summaryrefslogtreecommitdiffstats
path: root/SD-VBS/common
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/common')
-rw-r--r--SD-VBS/common/c/calcSobel_dX.c77
-rw-r--r--SD-VBS/common/c/calcSobel_dY.c79
-rw-r--r--SD-VBS/common/c/extra.h479
-rw-r--r--SD-VBS/common/c/fCopy.c24
-rw-r--r--SD-VBS/common/c/fDeepCopy.c24
-rw-r--r--SD-VBS/common/c/fDeepCopyRange.c24
-rw-r--r--SD-VBS/common/c/fDivide.c23
-rw-r--r--SD-VBS/common/c/fFind3.c46
-rw-r--r--SD-VBS/common/c/fFreeHandle.c16
-rw-r--r--SD-VBS/common/c/fHorzcat.c40
-rw-r--r--SD-VBS/common/c/fMallocHandle.c18
-rw-r--r--SD-VBS/common/c/fMdivide.c27
-rw-r--r--SD-VBS/common/c/fMinus.c21
-rw-r--r--SD-VBS/common/c/fMtimes.c38
-rw-r--r--SD-VBS/common/c/fPlus.c21
-rw-r--r--SD-VBS/common/c/fResetArray.c19
-rw-r--r--SD-VBS/common/c/fResetHandle.c19
-rw-r--r--SD-VBS/common/c/fReshape.c27
-rw-r--r--SD-VBS/common/c/fResortIndices.c77
-rw-r--r--SD-VBS/common/c/fSelfCheck.c59
-rw-r--r--SD-VBS/common/c/fSetArray.c22
-rw-r--r--SD-VBS/common/c/fSort.c43
-rw-r--r--SD-VBS/common/c/fSortIndices.c77
-rw-r--r--SD-VBS/common/c/fSum.c55
-rw-r--r--SD-VBS/common/c/fSum2.c56
-rw-r--r--SD-VBS/common/c/fTimes.c21
-rw-r--r--SD-VBS/common/c/fTranspose.c27
-rw-r--r--SD-VBS/common/c/fWriteMatrix.c34
-rw-r--r--SD-VBS/common/c/ffConv2.c47
-rw-r--r--SD-VBS/common/c/ffConv2_dY.c52
-rw-r--r--SD-VBS/common/c/ffDivide.c21
-rw-r--r--SD-VBS/common/c/ffTimes.c21
-rw-r--r--SD-VBS/common/c/ffVertcat.c36
-rw-r--r--SD-VBS/common/c/ffiConv2.c54
-rw-r--r--SD-VBS/common/c/fiConv2.c54
-rw-r--r--SD-VBS/common/c/fiCopy.c23
-rw-r--r--SD-VBS/common/c/fiDeepCopy.c23
-rw-r--r--SD-VBS/common/c/horzcat.c48
-rw-r--r--SD-VBS/common/c/iCheck.c18
-rw-r--r--SD-VBS/common/c/iDeepCopy.c23
-rw-r--r--SD-VBS/common/c/iDeepCopyRange.c23
-rw-r--r--SD-VBS/common/c/iFreeHandle.c16
-rw-r--r--SD-VBS/common/c/iHorzcat.c41
-rw-r--r--SD-VBS/common/c/iMallocHandle.c20
-rw-r--r--SD-VBS/common/c/iMinus.c21
-rw-r--r--SD-VBS/common/c/iResetArray.c22
-rw-r--r--SD-VBS/common/c/iReshape.c25
-rw-r--r--SD-VBS/common/c/iSetArray.c22
-rw-r--r--SD-VBS/common/c/iSort.c43
-rw-r--r--SD-VBS/common/c/iSortIndices.c47
-rw-r--r--SD-VBS/common/c/iTimes.c22
-rw-r--r--SD-VBS/common/c/iTranspose.c26
-rw-r--r--SD-VBS/common/c/iVertcat.c34
-rw-r--r--SD-VBS/common/c/ifDeepCopy.c25
-rw-r--r--SD-VBS/common/c/ifMtimes.c38
-rw-r--r--SD-VBS/common/c/iiConv2.c55
-rw-r--r--SD-VBS/common/c/imageBlur.c67
-rw-r--r--SD-VBS/common/c/imageReblur.c67
-rw-r--r--SD-VBS/common/c/imageResize.c78
-rw-r--r--SD-VBS/common/c/isMinus.c23
-rw-r--r--SD-VBS/common/c/isPlus.c22
-rw-r--r--SD-VBS/common/c/photonEndTiming.c22
-rw-r--r--SD-VBS/common/c/photonPrintTiming.c22
-rw-r--r--SD-VBS/common/c/photonReportTiming.c28
-rw-r--r--SD-VBS/common/c/photonStartTiming.c23
-rw-r--r--SD-VBS/common/c/randWrapper.c30
-rw-r--r--SD-VBS/common/c/randnWrapper.c40
-rw-r--r--SD-VBS/common/c/readFile.c42
-rw-r--r--SD-VBS/common/c/readImage.c112
-rw-r--r--SD-VBS/common/c/sdvbs_common.h139
-rw-r--r--SD-VBS/common/c/selfCheck.c65
-rw-r--r--SD-VBS/common/c/timingUtils.h99
-rw-r--r--SD-VBS/common/c/uiFreeHandle.c15
-rw-r--r--SD-VBS/common/c/uiMallocHandle.c20
-rw-r--r--SD-VBS/common/c/uiResetArray.c19
-rw-r--r--SD-VBS/common/c/uiSetArray.c21
-rw-r--r--SD-VBS/common/c/writeMatrix.c34
-rw-r--r--SD-VBS/common/makefiles/Makefile.common134
-rw-r--r--SD-VBS/common/makefiles/Makefile.include16
-rw-r--r--SD-VBS/common/makefiles/Makefile.recurse41
-rw-r--r--SD-VBS/common/support/buildTable.py54
-rw-r--r--SD-VBS/common/support/buildTimeTable.py55
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/MNcut.m93
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/MNcutDemo.m34
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/README.tex9
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.c405
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.dllbin0 -> 7114 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.mexa64bin0 -> 10646 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.mexglxbin0 -> 7896 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.mexmacbin0 -> 13096 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/affinityic.c187
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/affinityic.dllbin0 -> 7680 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/affinityic.mexa64bin0 -> 9755 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/affinityic.mexglxbin0 -> 7775 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/batch_MNcut.m48
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/cimgnbmap.c198
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/cimgnbmap.dllbin0 -> 7168 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/cimgnbmap.mexa64bin0 -> 9598 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/cimgnbmap.mexglxbin0 -> 7824 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.c197
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.dllbin0 -> 7168 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.mexa64bin0 -> 9604 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.mexglxbin0 -> 7830 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.c294
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.dllbin0 -> 7680 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.mexa64bin0 -> 9747 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.mexglxbin0 -> 7829 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/compileAll.m10
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/computeMultiW.m245
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/discretisation.m49
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/discretisationEigenVectorData.m12
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/doog1.m32
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/doog2.m38
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/eigSolve.m5
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/fft_filt_2.m29
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/gaussian.m31
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/make_filterbank_even2.m45
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/make_filterbank_odd2.m46
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/mex_projection_QR.c82
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/mex_projection_QR.dllbin0 -> 10240 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/mex_projection_QR.mexa64bin0 -> 13067 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/mex_projection_QR.mexglxbin0 -> 10165 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.c83
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.dllbin0 -> 10240 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.mexa64bin0 -> 13093 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.mexglxbin0 -> 10175 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/mex_w_times_x_symmetric.mexglxbin0 -> 8713 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/mex_w_times_x_symmetric.mexmacbin0 -> 13396 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/multiAffinityic.c216
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/multiAffinityic.dllbin0 -> 8192 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/multiAffinityic.mexa64bin0 -> 10138 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/multiAffinityic.mexglxbin0 -> 8134 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.c126
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.dllbin0 -> 7168 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.mexa64bin0 -> 9345 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.mexglxbin0 -> 6805 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.c158
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.dllbin0 -> 7168 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.mexa64bin0 -> 9493 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.mexglxbin0 -> 7277 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/quadedgep2.m188
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/quickNcutHardBiais2.m187
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/read_data.m13
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/readimage.m15
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/run_script.m60
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/showmask.m65
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/sparsifyc.c232
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/sparsifyc.dllbin0 -> 8704 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/sparsifyc.mexa64bin0 -> 10322 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/sparsifyc.mexglxbin0 -> 8296 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/sparsifyc.mexmacbin0 -> 9004 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/spmtimesd.c141
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/spmtimesd.dllbin0 -> 7168 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/spmtimesd.mexa64bin0 -> 9282 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/spmtimesd.mexglxbin0 -> 7280 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/spmtimesd.mexmacbin0 -> 8888 bytes
-rwxr-xr-xSD-VBS/common/toolbox/MultiNcut/tim_eigs.m1084
-rwxr-xr-xSD-VBS/common/toolbox/ikkjin/getANMS.m30
-rwxr-xr-xSD-VBS/common/toolbox/ikkjin/getImgGrad.m7
-rwxr-xr-xSD-VBS/common/toolbox/ikkjin/harris.m43
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/Makefile21
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/README.sxwbin0 -> 5929 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.cc45
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.mexa64bin0 -> 28391 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.mexglxbin0 -> 23141 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcImgBlurMex.cc30
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexa64bin0 -> 27799 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexglxbin0 -> 22665 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.cc85
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.mexa64bin0 -> 28499 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.mexglxbin0 -> 23321 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.cc99
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.mexa64bin0 -> 28778 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.mexglxbin0 -> 23692 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.cc99
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.mexa64bin0 -> 28811 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.mexglxbin0 -> 23725 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.cc91
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.mexa64bin0 -> 28815 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.mexglxbin0 -> 23693 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.cc91
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.mexa64bin0 -> 28880 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.mexglxbin0 -> 23726 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.cc87
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.mexa64bin0 -> 28724 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.mexglxbin0 -> 23558 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOpticalFlowLK.cc59
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.cc77
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.mexglxbin0 -> 6538 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcResizedImgMex.cc33
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexa64bin0 -> 27842 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexglxbin0 -> 22704 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcSobelMex.cc32
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcSobelMex.mexa64bin0 -> 27837 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcSobelMex.mexglxbin0 -> 22699 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.cc44
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.mexa64bin0 -> 28388 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.mexglxbin0 -> 23138 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.cc33
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexa64bin0 -> 27844 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexglxbin0 -> 22706 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcTextureMex.cc53
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcTextureMex.mexa64bin0 -> 28273 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcTextureMex.mexglxbin0 -> 23171 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.cc54
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexa64bin0 -> 28392 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexglxbin0 -> 23226 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/dummyMex.cc58
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/dummyMex.mexa64bin0 -> 8245 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/dummyMex.mexglxbin0 -> 6329 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/findCornerSubPix.cc39
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.cc62
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.mexglxbin0 -> 6280 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/lagrcv.cpp840
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/lagrcv.h51
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/liblagrcv.abin0 -> 26268 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/lk_flow.cc76
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/lk_flow.mexglxbin0 -> 7224 bytes
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/test.cc34
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/test/getPyramid.m10
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/test/img0.ppm3137
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/test/img1.ppm3100
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/test/pathdef.m284
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/test/test_lk.m74
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/test/test_lk_disp.m49
-rwxr-xr-xSD-VBS/common/toolbox/lagrcv/test/test_lk_opencv.m47
-rwxr-xr-xSD-VBS/common/toolbox/mex_template.c58
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/Distor2Calib.m391
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/Rectangle2Square.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/UnWarpPlane.m54
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/add_suppress.m98
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/analyse_error.m141
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/apply_distortion.m137
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/calib_gui.m117
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_active_images.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_convergence.m48
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_directory.m97
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_extracted_images.m37
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/clear_windows.m4
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/clearwin.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/click_calib.m193
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/click_ima_calib.m230
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/click_ima_calib3D.m482
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_distortion.m38
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_distortion2.m71
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_distortion_oulu.m47
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_error_calib.m46
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_collineation.m66
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_extrinsic.m123
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_extrinsic_init.m151
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_extrinsic_refine.m113
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_homography.m163
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/cornerfinder.m215
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/count_squares.m74
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/data_calib.m92
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/error_analysis.m182
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/export_calib_data.m99
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/ext_calib.m152
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extract_grid.m234
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extract_parameters.m46
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extract_parameters3D.m36
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extrinsic_computation.m185
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/fixallvariables.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/fixvariable.m18
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/ginput3.m216
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/go_calib_optim.m139
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/go_calib_optim_iter.m394
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/ima_read_calib.m158
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/init_intrinsic_param.m158
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/is3D.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loading_calib.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loadinr.m52
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loadpgm.m89
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loadppm.m109
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/mean_std_robust.m7
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/mosaic.m92
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/normalize.m43
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/pgmread.m26
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/project2_oulu.m53
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/project_points.m276
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/project_points2.m312
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/projectedGrid.m24
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/projector_calib.m258
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/readras.m87
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/recomp_corner_calib.m119
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rect.m127
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/reproject_calib.m121
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rigid_motion.m66
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rodrigues.m217
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rotation.m23
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/run_error_analysis.m65
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/saveinr.m46
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/savepgm.m22
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/saveppm.m45
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/saving_calib.m95
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/script_fit_distortion.m39
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/startup.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/undistort_image.m193
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/willson_convert.m89
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/willson_read.m59
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/writeras.m105
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/README5
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/carve_it.m25
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/compute_AD.m90
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/compute_AD_disp.m103
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/compute_J.m31
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/find_AD.m82
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/find_D.m65
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/find_center.m4
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/gen_feature_s.m17
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/grad.m24
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/hemisphere_s.m27
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/im.m3
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/iter_AD.m26
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m49
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/norm_inten.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/pan.0.pgm53
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/pan.1.pgm59
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/readpgm.m26
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/simulation.m42
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/sports1_11_28.jpegbin0 -> 23655 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/test_affine.m33
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affinityic.c186
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib/TOOLBOX_calib.tarbin0 -> 98304 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/Distor2Calib.m391
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/Multi_Calib_oulu.m12
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/Rectangle2Square.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/UnWarpPlane.m54
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/add_suppress.m91
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/analyse_error.m104
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/calib.m74
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/calib3D_gui.m115
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/calib_gui.m81
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/check_active_images.m14
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/check_convergence.m17
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/check_planarity.m41
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_calib.m99
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_calib3D.m79
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_ima_calib.m218
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_ima_calib3D.m482
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_distortion.m38
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_distortion2.m71
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_distortion_oulu.m47
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_error_calib.m40
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_collineation.m66
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_extrinsic.m123
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_extrinsic_init.m149
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_extrinsic_refine.m110
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_homography.m163
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/convert_oulu.m35
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/cornerfinder.m215
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/count_squares.m74
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/data_calib.m89
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/error_analysis.m182
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/ext_calib.m130
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extract_grid.m227
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extract_parameters.m46
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extract_parameters3D.m36
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extrinsic_computation.m173
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/ginput3.m216
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim.m60
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim3D.m264
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim_cont.m142
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim_iter.m332
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/graphout_calib.m12
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/graphout_calib3D.m153
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/ima_read_calib.m107
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/init_calib_param.m210
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/init_intrinsic_param.m153
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/is3D.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loading_calib.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loadinr.m52
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loadpgm.m89
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loadppm.m101
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/mean_std_robust.m7
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/multi_error_oulu.m49
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/normalize.m32
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/pgmread.m26
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/project2_oulu.m53
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/project_points.m276
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/projectedGrid.m24
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/readras.m87
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/recomp_corner_calib.m96
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rect.m93
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/reproject_calib.m92
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rigid_motion.m66
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rodrigues.m217
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rotation.m23
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/run_error_analysis.m65
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/saveinr.m46
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/savepgm.m22
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/saveppm.m25
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/saving_calib.m27
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/script_fit_distortion.m39
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_no_center.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_no_center3D.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_with_center.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_with_center3D.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/startup.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/test_3d.m80
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/undistort_image.m88
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/writeras.m105
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/calib_bouguetj2/TOOLBOX_calib.tarbin0 -> 253952 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/Ncut_IC.m26
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/Ncut_IC_m.m42
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/Ncut_IC_m2.m51
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/affinityic.c186
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/affinityic.mexa64bin0 -> 10209 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/affinityic.mexglxbin0 -> 8828 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/anisodiff.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/bin.m39
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/cimgnbmap.c189
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/cimgnbmap.mexa64bin0 -> 9679 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/cimgnbmap.mexglxbin0 -> 8486 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/density.m133
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/find_edge.m24
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/grad.m28
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/make_filterbank_even2.m45
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/make_filterbank_odd2.m46
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/max_supress2.m59
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/mgrad.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/mpgread.m25
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/mpgread.mexlxbin0 -> 84735 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/mpgwrite.m29
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/mpgwrite.mexlxbin0 -> 105791 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/ncut.m108
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/ncut_b.m46
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/ncut_bb.m39
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/ncut_e.m36
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/ncut_neg.m45
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/ncut_sparse.m45
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/ncut_tmp.m45
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/ncutd.m108
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/nonmaxsup.m81
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/pair_dist.m14
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/quadedgep.m106
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/readpcm.m12
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/readpdm.m8
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/readpfm.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/renormalize.m32
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/show_edge.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/spmtimesd.c141
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/spmtimesd.mexa64bin0 -> 9427 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/spmtimesd.mexglxbin0 -> 8198 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/tmp.tex16
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/vmquant.m112
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/vmquantc.mexhp7bin0 -> 24603 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/vmquantc.mexlxbin0 -> 16987 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/vmquantc.mexsolbin0 -> 27012 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/writepdm.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/common/writepfm.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/disp/disp_image.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/disp/draw_box.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/disp/draw_box2.m17
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/disp/im.m8
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/disp/ims.m3
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/disp/montage2.m17
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/disp/showmask.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/disp/showmaskb.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/construct_w.m25
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/construct_w2.m25
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/factor.m50
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/factor_test.m52
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/factor_test2.m52
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/factorizaion.tarbin0 -> 81920 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/findG.m48
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/findg1.m49
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/findg2.m56
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/hotel.matbin0 -> 56320 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/show_3dpoints.m22
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/show_S.m17
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/show_t.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/show_t3.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/fact/zt.m6
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/91048.jpgbin0 -> 2553 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/bar2d.m16
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/barrot.m22
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/bars.m39
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/clip_image.m6
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/compute_J_simple.m50
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/compute_angle.m18
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/compute_filter_fft.m84
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/compute_g2.m23
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/compute_h2.m27
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/compute_ofilter_fft.m88
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/dgauss.m16
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/dog1.m28
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/dog2.m31
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/doog1.m32
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/doog2.m38
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/fft_filt.m82
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/fft_filt_2.m29
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/filter_bank_jshi.tarbin0 -> 71680 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/gauss.m16
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/gaussian.m31
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/get_diff2.m43
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/get_diff_free.m8
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/grad1.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/grad2.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/m_interp4.m49
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank.m63
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank_23.m40
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank_even.m40
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank_odd.m41
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/mdoog2.m36
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/mimrotate.m119
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/mk_odd_filter.m36
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/mkdog1.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/mkdog2.m22
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/mkdoog2.m30
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/mkdoogs.m15
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/mkg.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/quadpair.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/smooth.m24
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/softkmean.m56
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/softmeans.m46
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter/softmeans2.m39
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filterQuad.zipbin0 -> 4531 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/1d_cut.m16
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/Bfilter.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/BfilterS.m17
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/Ncut.m14
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/apply_image.m38
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/back_proj.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/backproj_outer.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/backproj_outer_chank.m33
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/backproj_outer_chank2.m36
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/binize.m15
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/binize_old.m34
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/binomialfield.m75
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/colize.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_hist.m29
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_histnb_s.m47
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_histnb_sf.m52
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_histneighb.m37
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_joint_hist.m41
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_test.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/compact.m36
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_J.m31
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_Lf.m35
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_corr.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_diff.m36
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_diff_patch.m34
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_diff_patch2.m45
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_filter.m84
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_filter_fft.m84
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/conv_trim.m6
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/corr_hist.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/crop_im_fil.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/cutoff.m13
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/cutout.m3
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_Imask.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_diff.m37
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_evresult.m435
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_evresult2.m215
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_evresulthome.m237
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_groups.m13
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_hist2d.m15
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/dist_pair.m28
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/dist_pair_chank.m25
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/doog2.m43
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/eig_decomp.m15
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/eig_decomp_v5.m13
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/eig_proj.m12
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/eigs_decomp.m39
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/euclid_dist.m22
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/filter_all_files.m29
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/filter_output.m38
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/find_bst_cut.m24
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/find_center.m4
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/find_cutpoint.m13
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/gen_filters.m47
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/get_cumhist.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/get_cumhist_inten.m7
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/get_hist.m24
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/get_hist_inten.m15
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/get_win.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/get_win5.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/grad.m24
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/half_sigmoid.m17
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/hist2d.m13
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_I_f.m22
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_diff.m30
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_f.m28
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_in_chank.m33
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_inner.m40
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/histbin_fv_chank.m14
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/hsv2clrs.m25
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/id_cut.m14
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/im.m3
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/im3.m3
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/im5.m16
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/im_vect.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/imrotate.m119
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/ims.m3
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/imvs.m4
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/is_step.m33
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/ks_2d.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/load_result.m39
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/m_interp4.m49
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/make_masks.m12
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/makefilter.m14
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mkf_t1.m22
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mkf_t2.m21
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mkf_test.m43
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mkg.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mkgaussian.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mkmulfilter.m52
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mkpoog2.m29
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mksgn.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mksgn2.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mreadpfm.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mreadpfm2.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mwis.m16
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/mwis_image.m25
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/myinterp.m18
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/ncut_b.m25
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/new_compute_J.m32
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist.m45
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist2.m46
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text.m70
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text2.m58
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text3.m84
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text4.m81
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/patch_cat.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/pgmread.m15
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/poisson.m44
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/poissonfield.m53
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/proj_back.m24
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/proj_back_id.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/quant.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/readpdm.m8
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/readpfm.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/readpfm_id.m21
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/readpfm_idf.m29
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/readpgm.m26
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/readpnm.m21
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/readppm.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/record.m6
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/recursive_cut_tc.m140
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/reduce_all.m8
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/rotate_J.m30
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/session.m4
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/show_cumhist.m28
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/show_hist.m23
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/showsmm.m45
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/showsmm_v5.m34
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/sigmoid.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/signif.m22
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/signif_N.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/smooth.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/startup.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/swarp.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/swarpback.m12
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test.m110
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test1.m175
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test2.m220
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test3.m4
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test_best_cut.m12
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex.m361
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex2.m136
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex3.m169
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex4.m353
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex5.m446
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test_motion.m117
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test_motion2.m127
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test_period.m58
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/test_text.m434
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp.m68
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp1.m25
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp2.m17
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp3.m126
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/true_loc.m23
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/vmquant.m112
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/wismm.m26
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/wismm2.m66
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/wismm3.m71
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/write_command.m8
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/write_test.m38
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/writeout_feature.m40
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/writepfm.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/writepgm.m8
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/writepmm.m14
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filter_hist/writepnm5.m26
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filtersQuad/doog1.m32
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filtersQuad/doog2.m38
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filtersQuad/make_filterbank_even2.m45
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filtersQuad/make_filterbank_odd2.m46
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/filtersQuad/quadedgep2.m188
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/convert422.m27
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/im_vd.m6
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/imread2.m45
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/peek_pgm_size.m19
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/pgmread.m24
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/ppmtojpg.m25
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/read422.m45
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/read422f.m50
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/read_cimgs.m40
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/read_ev_pgm.m26
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/read_ev_pgm2.m29
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/read_ev_pgm_real.m30
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/read_imgs.m47
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/read_pmm.m12
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/read_scan.m42
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/read_seg_file.m36
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/readlines.m30
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/readpdm3.m16
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/readpdmc.m12
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/readpfm.m10
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/readpfm3.m17
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/readpfmc.m11
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/readpgm.m30
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/readpgm_evinfo.m35
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/readpmm.m22
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/readppm.m23
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/writepgm.m8
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/writeppm.m14
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/Contents.m26
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/allcosts.m17
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/allperm.m17
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/condass.m54
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/demo.m38
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/hungarian.m464
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/test.m87
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/pyramid/091399fbn-jets.3.jpgbin0 -> 25886 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/pyramid/expand.m8
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/pyramid/gauss_lowpass.m9
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/pyramid/gen_w.m12
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/pyramid/reduce.m7
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/pyramid/session.m26
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/pyramid/startup.m5
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/remap_angle.m4
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/spmtimesd.c141
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/afromncut.m73
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/dispimg.m65
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/firstncut.m67
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/getfnames.m47
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/getimage2.m46
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/globalenvar.m6
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/jshincut.m94
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/jshincutdefpar.m20
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/ncutcheckin.m136
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/openfigure.m52
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/showim.m36
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/showncut.m92
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/startup.m18
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/stella/test_ncutm.m38
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/tars/TOOLBOX_calib.tarbin0 -> 253952 bytes
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/textons/dist2.m27
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/textons/find_textons.m46
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/textons/find_textons1.m37
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/textons/kmeans2.m127
752 files changed, 48920 insertions, 0 deletions
diff --git a/SD-VBS/common/c/calcSobel_dX.c b/SD-VBS/common/c/calcSobel_dX.c
new file mode 100644
index 0000000..4be5845
--- /dev/null
+++ b/SD-VBS/common/c/calcSobel_dX.c
@@ -0,0 +1,77 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9F2D* calcSobel_dX(F2D* imageIn)
10{
11 int rows, cols;
12 F2D *kernel_1, *kernel_2;
13 float temp;
14 int kernelSize, startCol, endCol, halfKernel, startRow, endRow, i, j, kernelSum;
15 int k, kernelSum_1, kernelSum_2;
16 F2D *imageOut, *tempOut;
17
18 rows = imageIn->height;
19 cols = imageIn->width;
20
21 imageOut = fSetArray(rows, cols, 0);
22 tempOut = fSetArray(rows, cols, 0);
23 kernel_1 = fMallocHandle(1, 3);
24 kernel_2 = fMallocHandle(1, 3);
25
26 asubsref(kernel_1,0) = 1;
27 asubsref(kernel_1,1) = 2;
28 asubsref(kernel_1,2) = 1;
29
30 kernelSize = 3;
31 kernelSum_1 = 4;
32
33 asubsref(kernel_2,0) = 1;
34 asubsref(kernel_2,1) = 0;
35 asubsref(kernel_2,2) = -1;
36
37 kernelSum_2 = 2;
38
39 startCol = 1;
40 endCol = cols - 1;
41 halfKernel = 1;
42
43 startRow = 1;
44 endRow = rows - 1;
45
46 for(i=startRow; i<endRow; i++)
47 {
48 for(j=startCol; j<endCol; j++)
49 {
50 temp = 0;
51 for(k=-halfKernel; k<=halfKernel; k++)
52 {
53 temp += subsref(imageIn,i,j+k) * asubsref(kernel_2,k+halfKernel);
54 }
55 subsref(tempOut,i,j) = temp/kernelSum_2;
56 }
57 }
58
59 for(i=startRow; i<endRow; i++)
60 {
61 for(j=startCol; j<endCol; j++)
62 {
63 temp = 0;
64 for(k=-halfKernel; k<=halfKernel; k++)
65 {
66 temp += subsref(tempOut,(i+k),j) * asubsref(kernel_1,k+halfKernel);
67 }
68 subsref(imageOut,i,j) = temp/(float)kernelSum_1;
69 }
70 }
71
72 fFreeHandle(tempOut);
73 fFreeHandle(kernel_1);
74 fFreeHandle(kernel_2);
75 return imageOut;
76
77}
diff --git a/SD-VBS/common/c/calcSobel_dY.c b/SD-VBS/common/c/calcSobel_dY.c
new file mode 100644
index 0000000..d2ed379
--- /dev/null
+++ b/SD-VBS/common/c/calcSobel_dY.c
@@ -0,0 +1,79 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* calcSobel_dY(F2D* imageIn)
8{
9 int rows, cols;
10 I2D *kernel_1, *kernel_2;
11 float temp;
12 int kernelSize, startCol, endCol, halfKernel, startRow, endRow, i, j, kernelSum;
13 int k, kernelSum_2, outputRows, outputCols;
14 F2D *imageOut, *tempOut;
15 float kernelSum_1;
16
17 rows = imageIn->height;
18 cols = imageIn->width;
19
20 // level 1 is the base image.
21
22 outputRows = rows;
23 outputCols = cols;
24
25 imageOut = fSetArray(outputRows, outputCols, 0);
26 tempOut = fSetArray(outputRows, outputCols, 0);
27 kernel_1 = iMallocHandle(1, 3);
28 kernel_2 = iMallocHandle(1, 3);
29
30 asubsref(kernel_1,0) = 1;
31 asubsref(kernel_1,1) = 0;
32 asubsref(kernel_1,2) = -1;
33 kernelSize = 3;
34 kernelSum_1 = 2.0;
35
36 asubsref(kernel_2,0) = 1;
37 asubsref(kernel_2,1) = 2;
38 asubsref(kernel_2,2) = 1;
39 kernelSum_2 = 4;
40
41 startCol = 1;
42 endCol = cols - 1;
43 halfKernel = 1;
44
45 startRow = 1;
46 endRow = rows - 1;
47
48 for(i=startRow; i<endRow; i++)
49 {
50 for(j=startCol; j<endCol; j++)
51 {
52 temp = 0;
53 for(k=-halfKernel; k<=halfKernel; k++)
54 {
55 temp += subsref(imageIn,(i+k),j) * asubsref(kernel_1,k+halfKernel);
56 }
57 subsref(tempOut,i,j) = temp/kernelSum_1;
58 }
59 }
60
61 for(i=startRow; i<endRow; i++)
62 {
63 for(j=startCol; j<endCol; j++)
64 {
65 temp = 0;
66 for(k=-halfKernel; k<=halfKernel; k++)
67 {
68 temp += subsref(tempOut,i,j+k) * asubsref(kernel_2,k+halfKernel);
69 }
70 subsref(imageOut,i,j) = temp/(float)kernelSum_2;
71 }
72 }
73
74 fFreeHandle(tempOut);
75 iFreeHandle(kernel_1);
76 iFreeHandle(kernel_2);
77 return imageOut;
78
79}
diff --git a/SD-VBS/common/c/extra.h b/SD-VBS/common/c/extra.h
new file mode 100644
index 0000000..8c67b33
--- /dev/null
+++ b/SD-VBS/common/c/extra.h
@@ -0,0 +1,479 @@
1/**
2 * Copyright 2019 Sims Hill Osborne and 2020 Joshua Bakita
3 *
4 * This header provides facilities by which to separably run and time TACLeBench
5 * To use this for paired task timing, define PAIRED (pass CFLAGS=-DPAIRED to make)
6 **/
7#define _GNU_SOURCE
8#include <fcntl.h> // For O_CREAT and O_RDWR
9#include <sched.h> // For sched_yield()
10#include <semaphore.h> // For sem_{open, post, wait}()
11#include <stdio.h>
12#include <stdlib.h> // For exit()
13#include <string.h> // For strlen()
14#include <sys/mman.h> // For mlockall()
15#include <unistd.h> // For ftruncate()
16#include <time.h>
17
18// This is only visible if _GNU_SOURCE is defined, and that define does not
19// come along to places where this file is included. Address this by manually
20// forcing it into the global namespace.
21extern int sched_getcpu();
22
23// These constants correspond to the imx6q-sabredb platform
24#define LINE_SIZE 32
25#define L2_SIZE 16*2048*32
26
27#if __arm__
28#include <unistd.h>
29#include <sys/syscall.h>
30#endif
31
32#define LITMUS 1
33#define MC2 0
34#define MMDC_PROF 0
35
36#if LITMUS
37#include <litmus.h>
38#endif
39
40#if MMDC_PROF
41#include "/media/speedy/litmus/tools/mmdc/mmdc.h"
42#endif
43
44#if LITMUS
45#define SET_UP LOAD_PARAMS SETUP_LITMUS
46#else
47#define SET_UP LOAD_PARAMS
48#endif
49
50#if MMDC_PROF
51#define LOAD_PARAMS LOAD_PARAMS_ITRL SETUP_MMDC
52#else
53#define LOAD_PARAMS LOAD_PARAMS_ITRL
54#endif
55
56// Store state globally so that the job can be outside main()
57// Arrays use float as a comprimise between overflow and size
58// Paired arrays use long longs as precision is more important for those times
59#ifdef PAIRED
60long long *_rt_start_time;
61long long *_rt_end_time;
62#else
63float *_rt_exec_time;
64#endif
65#if MMDC_PERF
66float *_rt_mmdc_read;
67float *_rt_mmdc_write;
68#endif
69long _rt_jobs_complete;
70long _rt_max_jobs;
71int _rt_core;
72int _rt_will_output;
73struct timespec _rt_start, _rt_end;
74
75char *_rt_run_id;
76char *_rt_our_prog_name;
77char *_rt_other_prog_name;
78char *_rt_other_core;
79#define _RT_FILENAME_LEN 64
80#define _BILLION (1000*1000*1000)
81#ifdef PAIRED
82char *_rt_barrier;
83sem_t *_rt_first_sem, *_rt_second_sem;
84int _rt_lock_id;
85#endif
86
87static void _rt_load_params_itrl(int argc, char **argv) {
88#ifdef PAIRED
89 if (argc != 8) {
90 fprintf(stderr, "Usage: %s <name> <loops> <my core> <other core> <other name> <runID> <lockID>", argv[0]);
91 fprintf(stderr, " <name> string for logging. Name of this task.\n");
92 fprintf(stderr, " <loops> integer number of iterations. -1 for infinite.\n");
93 fprintf(stderr, " <my core> UNUSED. Core is now auto-detected.\n");
94 fprintf(stderr, " <other core> integer for logging. Core of paired task.\n");
95 fprintf(stderr, " <other name> string for logging. Name of paired task.\n");
96 fprintf(stderr, " <runID> string to append with .txt to yield output file name.\n");
97 fprintf(stderr, " <lockID> 1 to indicate this is pair member 1, otherwise pair member 2.\n");
98 exit(1);
99 }
100#else
101 if (argc != 6) {
102 fprintf(stderr, "Usage: %s <name> <loops> <my core> <runID> <save results?>\n", argv[0]);
103 fprintf(stderr, " <name> string for logging. Name of this task.\n");
104 fprintf(stderr, " <loops> integer number of iterations. -1 for infinite.\n");
105 fprintf(stderr, " <my core> UNUSED. Core is now auto-detected.\n");
106 fprintf(stderr, " <runID> string to append with .txt to yield output file name.\n");
107 fprintf(stderr, " <save results?> 1 to save results, 0 to discard.\n");
108 exit(1);
109 }
110#endif
111 _rt_our_prog_name = argv[1];
112 _rt_max_jobs = atol(argv[2]);
113 _rt_core = sched_getcpu();
114#ifdef PAIRED
115 _rt_other_core = argv[4];
116 _rt_other_prog_name = argv[5];
117 _rt_run_id = argv[6];
118 _rt_lock_id = atoi(argv[7]);
119 // The paired version doesn't support disabling output (legacy compatibility)
120 _rt_will_output = 1;
121#else
122 _rt_other_core = "none";
123 _rt_other_prog_name = "none";
124 _rt_run_id = argv[4];
125 _rt_will_output = atoi(argv[5]);
126#endif /* PAIRED */
127 if (_rt_max_jobs < 0 && _rt_will_output != 0) {
128 fprintf(stderr, "Infinite loops only supported when _rt_will_output is disabled!\n");
129 exit(1);
130 }
131 if (strlen(_rt_run_id) + 5 > _RT_FILENAME_LEN) {
132 fprintf(stderr, "Run ID is too large! Keep it to less than %d characters.\n", _RT_FILENAME_LEN);
133 exit(1);
134 }
135#ifdef PAIRED
136 _rt_start_time = calloc(_rt_max_jobs * _rt_will_output, sizeof(long long));
137 _rt_end_time = calloc(_rt_max_jobs * _rt_will_output, sizeof(long long));
138 if (!_rt_end_time || !_rt_start_time) {
139 perror("Unable to allocate buffers for execution times");
140 exit(1);
141 }
142 _rt_first_sem = sem_open("/_libextra_first_sem", O_CREAT, 644, 0);
143 _rt_second_sem = sem_open("/_libextra_second_sem", O_CREAT, 644, 0);
144 if (_rt_first_sem == SEM_FAILED || _rt_second_sem == SEM_FAILED) {
145 perror("Error while creating semaphores");
146 exit(1);
147 }
148 int barrier_file = shm_open("/_libextra_barrier", O_CREAT | O_RDWR, 644);
149 if (barrier_file == -1) {
150 perror("Error while creating shared memory for barrier synchronization");
151 exit(1);
152 }
153 if (ftruncate(barrier_file, 1) == -1) {
154 perror("Error while setting size of shared memory for barrier synchronization");
155 exit(1);
156 }
157 _rt_barrier = mmap(NULL, 1, PROT_WRITE, MAP_SHARED, barrier_file, 0);
158 if (_rt_barrier == MAP_FAILED) {
159 perror("Error while mapping shared memory for barrier synchronization");
160 exit(1);
161 }
162 *_rt_barrier = 0;
163#else
164 _rt_exec_time = calloc(_rt_max_jobs * _rt_will_output, sizeof(float));
165 if (!_rt_exec_time) {
166 perror("Unable to allocate buffer for execution times");
167 exit(1);
168 }
169#endif /* PAIRED */
170 _rt_jobs_complete = 0;
171 mlockall(MCL_CURRENT || MCL_FUTURE);
172}
173#define LOAD_PARAMS_ITRL _rt_load_params_itrl(argc, argv);
174
175#define SETUP_MMDC \
176 _rt_mmdc_read = calloc(_rt_max_jobs * _rt_will_output, sizeof(float));\
177 _rt_mmdc_write = calloc(_rt_max_jobs * _rt_will_output, sizeof(float));\
178 if (!_rt_mmdc_read || !_rt_mmdc_write) {\
179 perror("Unable to allocate buffer for MMDC data");\
180 exit(1);\
181 }\
182 MMDC_PROFILE_RES_t mmdc_res;\
183 memset(&mmdc_res, 0, sizeof(MMDC_PROFILE_RES_t));\
184 int fd = open("/dev/mem", O_RDWR, 0);\
185 if (fd < 0) {\
186 perror("Unable to open /dev/mem");\
187 exit(1);\
188 }\
189 pMMDC_t mmdc = mmap(NULL, 0x4000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, MMDC_P0_IPS_BASE_ADDR);\
190 if (mmdc == MAP_FAILED) {\
191 perror("Unable to map MMDC address space");\
192 exit(1);\
193 }\
194 mmdc->madpcr1 = axi_arm1;\
195 msync(&(mmdc->madpcr1),4,MS_SYNC);
196
197#define SETUP_LITMUS \
198 unsigned int wait = 0; \
199 if (be_migrate_to_domain(_rt_core) < 0) { \
200 perror("Unable to migrate to specified CPU"); \
201 exit(1); \
202 } \
203 struct rt_task rt_param; \
204 init_rt_task_param(&rt_param); \
205 /* Supposedly the next two parameters are irrelevant when reservations are enabled, but I'm leaving them anyway... */ \
206 rt_param.exec_cost = ms2ns(999); \
207 rt_param.period = ms2ns(1000); \
208 rt_param.priority = LITMUS_HIGHEST_PRIORITY; \
209 rt_param.cls = RT_CLASS_HARD; \
210 rt_param.release_policy = TASK_PERIODIC; \
211 rt_param.budget_policy = NO_ENFORCEMENT; \
212 rt_param.cpu = _rt_core; \
213 if (set_rt_task_param(gettid(), &rt_param) < 0) { \
214 perror("Unable to set real-time parameters"); \
215 exit(1); \
216 } \
217 if (init_litmus() != 0) { \
218 perror("init_litmus failed"); \
219 exit(1); \
220 } \
221 MC2_SETUP \
222 if (task_mode(LITMUS_RT_TASK) != 0) { \
223 perror("Unable to become real-time task"); \
224 exit(1); \
225 } \
226 if (wait && wait_for_ts_release() != 0) { \
227 perror("Unable to wait for taskset release"); \
228 exit(1); \
229 }
230
231#if MC2
232#define MC2_SETUP \
233
234 set_page_color(rt_param.cpu);
235#else
236#define MC2_SETUP
237#endif
238
239#define CLEANUP_LITMUS \
240 if (task_mode(BACKGROUND_TASK) != 0) { \
241 perror("Unable to become a real-time task"); \
242 exit(1); \
243 } \
244
245#if __arm__
246// On ARM, manually flush the cache
247#define FLUSH_CACHES \
248 volatile uint8_t buffer[L2_SIZE * 4]; \
249 for (uint32_t j = 0; j < 4; j++) \
250 for (uint32_t i = 0; i < L2_SIZE * 4; i += LINE_SIZE) \
251 buffer[i]++;
252#else
253// On x86 call the wbinvld instruction (it's in a kernel module due to it being ring-0)
254#define FLUSH_CACHES \
255 FILE *fp = fopen("/proc/wbinvd", "r");\
256 if (fp == NULL) {\
257 perror("Cache flush module interface cannot be opened");\
258 exit(1);\
259 }\
260 char dummy;\
261 if (fread(&dummy, 1, 1, fp) == 0) {\
262 perror("Unable to access cache flush module interface");\
263 exit(1);\
264 }\
265 fclose(fp);
266#endif
267
268// This semaphore-based synchronization is from Sims
269#define FIRST_UNLOCK \
270 if (_rt_lock_id == 1) {\
271 if (sem_post(_rt_second_sem) != 0) {\
272 perror("Unable to unlock second semaphore");\
273 exit(1);\
274 }\
275 } \
276 else {\
277 if (sem_post(_rt_first_sem) != 0) {\
278 perror("Unable to unlock first semaphore");\
279 exit(1);\
280 }\
281 } \
282
283#define FIRST_LOCK \
284 if (_rt_lock_id == 1) {\
285 if (sem_wait(_rt_first_sem) != 0) {\
286 perror("Unable to wait on first semaphore");\
287 exit(1);\
288 }\
289 }\
290 else {\
291 if (sem_wait(_rt_second_sem) != 0) {\
292 perror("Unable to wait on second semaphore");\
293 exit(1);\
294 }\
295 }
296
297// This ensures a very low difference between pair member start times
298#define BARRIER_SYNC \
299 if (__sync_bool_compare_and_swap(_rt_barrier, 0, 1)) {\
300 while (!__sync_bool_compare_and_swap(_rt_barrier, 0, 0)) {};\
301 }\
302 else {\
303 __sync_bool_compare_and_swap(_rt_barrier, 1, 0);\
304 }
305
306// Buffer timing result from a single job
307static void _rt_save_job_result() {
308 if (_rt_jobs_complete >= _rt_max_jobs) {
309 fprintf(stderr, "Max jobs setting too small! Trying to record job #%ld when we only have space for %ld jobs. Exiting...\n", _rt_jobs_complete, _rt_max_jobs);
310 exit(1);
311 }
312 if (_rt_jobs_complete > -1 && _rt_will_output) {
313#ifdef PAIRED
314 _rt_start_time[_rt_jobs_complete] = _rt_start.tv_sec;
315 _rt_start_time[_rt_jobs_complete] *= _BILLION;
316 _rt_start_time[_rt_jobs_complete] += _rt_start.tv_nsec;
317 _rt_end_time[_rt_jobs_complete] = _rt_end.tv_sec;
318 _rt_end_time[_rt_jobs_complete] *= _BILLION;
319 _rt_end_time[_rt_jobs_complete] += _rt_end.tv_nsec;
320#else
321 _rt_exec_time[_rt_jobs_complete] = _rt_end.tv_sec - _rt_start.tv_sec;
322 _rt_exec_time[_rt_jobs_complete] *= _BILLION;
323 _rt_exec_time[_rt_jobs_complete] += _rt_end.tv_nsec - _rt_start.tv_nsec;
324#endif /* PAIRED */
325#if MMDC_PROF
326 _rt_mmdc_read[_rt_jobs_complete] = mmdc_res.read_bytes;
327 _rt_mmdc_write[_rt_jobs_complete] = mmdc_res.write_bytes;
328#endif
329 }
330}
331
332// Save all buffered timing results to disk
333static void _rt_write_to_file() {
334 char fileName[_RT_FILENAME_LEN];
335 FILE *fp;
336 munlockall();
337 if (!_rt_will_output)
338 goto out;
339 strcpy(fileName, _rt_run_id);
340 strcat(fileName, ".txt");
341 fp = fopen(fileName, "a");
342 if (fp == NULL) {
343 perror("Unable to open output file");
344 exit(1);
345 }
346 // Baseline output uses a similar format with "none" for unused fields
347 for (int i = 0; i < _rt_jobs_complete; i++){
348 fprintf(fp, "%s %s %u %s %ld", _rt_our_prog_name, _rt_other_prog_name,
349 _rt_core, _rt_other_core, _rt_max_jobs);
350#ifdef PAIRED
351 // For unclear legacy reasons, paired tasks emit sec and ns separately
352 fprintf(fp, " %lld %lld %lld %lld",
353 _rt_start_time[i] / _BILLION, _rt_start_time[i] % _BILLION,
354 _rt_end_time[i] / _BILLION, _rt_end_time[i] % _BILLION);
355#else
356 fprintf(fp, " %.f", _rt_exec_time[i]);
357#endif /* PAIRED */
358 fprintf(fp, " %s %d %.f %.f\n", _rt_run_id, i,
359#if MMDC_PROF
360 _rt_mmdc_read[i], _rt_mmdc_write[i]);
361#else
362 0.0, 0.0);
363#endif /* MMDC_PROF */
364 }
365 fclose(fp);
366out:
367#if LITMUS
368 CLEANUP_LITMUS
369#endif /* LITMUS */
370#ifdef PAIRED
371 munmap(_rt_barrier, 1);
372 shm_unlink("/_libextra_barrier");
373 sem_unlink("/_libextra_first_sem");
374 sem_unlink("/_libextra_second_sem");
375 free(_rt_start_time);
376 free(_rt_end_time);
377#else
378 free(_rt_exec_time);
379#endif /* PAIRED */
380#if MMDC_PROF
381 free(_rt_mmdc_read);
382 free(_rt_mmdc_write);
383#endif /* MMDC_PROF */
384}
385
386// Start a job
387static void _rt_start_loop() {
388#if LITMUS
389 if (sleep_next_period() != 0) {
390 perror("Unable to sleep for next period");
391 }
392#else
393 sched_yield();
394#endif /* LITMUS */
395#ifdef PAIRED
396 FIRST_UNLOCK
397 FIRST_LOCK
398#endif /* PAIRED */
399 FLUSH_CACHES
400#ifdef PAIRED
401 BARRIER_SYNC
402#endif /* PAIRED */
403#if MMDC_PROF
404 /* This disables profiling, resets the counters, clears the overflow bit, and enables profiling */
405 start_mmdc_profiling(mmdc);
406#endif /* MMDC_PROF */
407 clock_gettime(CLOCK_MONOTONIC, &_rt_start);
408}
409
410// Complete a job
411static void _rt_stop_loop() {
412 clock_gettime(CLOCK_MONOTONIC, &_rt_end);
413#if MMDC_PROF
414 /* This freezes the profiling and makes results available */
415 pause_mmdc_profiling(mmdc);
416 get_mmdc_profiling_results(mmdc, &mmdc_res);
417#endif /* MMDC_PROF */
418 _rt_save_job_result();
419 _rt_jobs_complete++;
420}
421
422/****** New API ******
423 * Intended structure:
424 *
425 * |int main(int argc, char **argv) {
426 * | SET_UP
427 * | ...
428 * | for_each_job {
429 * | tacleInit();
430 * | tacleMain();
431 * | }
432 * | WRITE_TO_FILE
433 * |}
434 *
435 * The main() function must call its parameters argc and argv for SET_UP to be
436 * able to read them.
437 * Only SET_UP necessarily has to be in main().
438 *
439 * We use some niche C features, here's a quick explaination:
440 * 1. The && operator doesn't evaluate the right-hand side of the expression
441 * unless the left side evaluated to true. We use this to only execute
442 * _rt_start_loop() when the loop will actually run.
443 * 2. The comma operator executes the first expression and then throws away the
444 * result. We use this to call our void function from inside a comparison.
445 */
446#define for_each_job \
447 for (; _rt_jobs_complete < _rt_max_jobs && (_rt_start_loop(),1); \
448 _rt_stop_loop())
449
450/****** Legacy API ******
451 * Intended structure:
452 *
453 * |int main(int argc, char **argv) {
454 * | SET_UP
455 * | for (jobsComplete=0; jobsComplete<maxJobs; jobsComplete++){
456 * | START_LOOP
457 * | tacleInit();
458 * | tacleMain();
459 * | STOP_LOOP
460 * | }
461 * | WRITE_TO_FILE
462 * | tacleReturn
463 * |}
464 *
465 * The main() function must call its parameters argc and argv for SET_UP to be
466 * able to read them.
467 */
468static int jobsComplete = 0;
469#define START_LOOP _rt_start_loop();
470#define STOP_LOOP _rt_stop_loop();
471#define WRITE_TO_FILE _rt_write_to_file();
472#define maxJobs _rt_max_jobs
473// Has been part of STOP_LOOP for quite some time
474#define SAVE_RESULTS \
475 #warning "The SAVE_RESULTS macro is deprecated and will soon be removed!";
476// Unclear if SLEEP is used anywhere.
477#define SLEEP \
478 #warning "The SLEEP macro is deprecated and may be removed!" \
479 nanosleep((const struct timespec[]){{0, 1000000}}, NULL);
diff --git a/SD-VBS/common/c/fCopy.c b/SD-VBS/common/c/fCopy.c
new file mode 100644
index 0000000..f9b844d
--- /dev/null
+++ b/SD-VBS/common/c/fCopy.c
@@ -0,0 +1,24 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fCopy(F2D* in, F2D* out)
8{
9 int i, j;
10 //F2D* out;
11 int rows, cols;
12
13 rows = in->height;
14 cols = in->width;
15
16 //out = fMallocHandle(rows, cols);
17
18 for(i=0; i<rows; i++) {
19 for(j=0; j<cols; j++) {
20 subsref(out,i,j) = subsref(in,i,j);
21 }
22 }
23 return out;
24}
diff --git a/SD-VBS/common/c/fDeepCopy.c b/SD-VBS/common/c/fDeepCopy.c
new file mode 100644
index 0000000..332926e
--- /dev/null
+++ b/SD-VBS/common/c/fDeepCopy.c
@@ -0,0 +1,24 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fDeepCopy(F2D* in)
8{
9 int i, j;
10 F2D* out;
11 int rows, cols;
12
13 rows = in->height;
14 cols = in->width;
15
16 out = fMallocHandle(rows, cols);
17
18 for(i=0; i<rows; i++) {
19 for(j=0; j<cols; j++) {
20 subsref(out,i,j) = subsref(in,i,j);
21 }
22 }
23 return out;
24}
diff --git a/SD-VBS/common/c/fDeepCopyRange.c b/SD-VBS/common/c/fDeepCopyRange.c
new file mode 100644
index 0000000..e9a2b29
--- /dev/null
+++ b/SD-VBS/common/c/fDeepCopyRange.c
@@ -0,0 +1,24 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fDeepCopyRange(F2D* in, int startRow, int numberRows, int startCol, int numberCols)
8{
9 int i, j, k;
10 F2D *out;
11 int rows, cols;
12
13 rows = numberRows + startRow;
14 cols = numberCols + startCol;
15 out = fMallocHandle(numberRows, numberCols);
16
17 k = 0;
18 for(i=startRow; i<rows; i++)
19 for(j=startCol; j<cols; j++)
20 asubsref(out,k++) = subsref(in,i,j);
21
22 return out;
23
24}
diff --git a/SD-VBS/common/c/fDivide.c b/SD-VBS/common/c/fDivide.c
new file mode 100644
index 0000000..7d7f90a
--- /dev/null
+++ b/SD-VBS/common/c/fDivide.c
@@ -0,0 +1,23 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fDivide(F2D* a, float b)
8{
9 F2D *c;
10 int i, j, rows, cols;
11
12 rows = a->height;
13 cols = a->width;
14
15 c = fMallocHandle(rows, cols);
16
17 for(i=0; i<(rows*cols); i++)
18 {
19 asubsref(c,i) = asubsref(a,i) / b;
20 }
21
22 return c;
23}
diff --git a/SD-VBS/common/c/fFind3.c b/SD-VBS/common/c/fFind3.c
new file mode 100644
index 0000000..a783bae
--- /dev/null
+++ b/SD-VBS/common/c/fFind3.c
@@ -0,0 +1,46 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fFind3(F2D* in)
8{
9 int r, k, y, x, i, j;
10 F2D *points;
11
12 y = in->height;
13 x = in->width;
14
15 r = 0;
16 for(i=0; i<y; i++)
17 {
18 for(j=0; j<x; j++)
19 {
20 if(subsref(in,i,j) != 0)
21 r++;
22 }
23 }
24
25 points = fSetArray(r, 3, 0);
26
27 k = 0;
28 for(j=0; j<x; j++)
29 {
30 for(i=0; i<y; i++)
31 {
32 if( subsref(in,i,j) != 0)
33 {
34 subsref(points,k,0) = j*1.0;
35 subsref(points,k,1) = i*1.0;
36 subsref(points,k,2) = subsref(in,i,j);
37 k++;
38 }
39 }
40 }
41
42 return points;
43}
44
45
46
diff --git a/SD-VBS/common/c/fFreeHandle.c b/SD-VBS/common/c/fFreeHandle.c
new file mode 100644
index 0000000..7616583
--- /dev/null
+++ b/SD-VBS/common/c/fFreeHandle.c
@@ -0,0 +1,16 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9void fFreeHandle(F2D* out)
10{
11 if(out != NULL)
12 free(out);
13
14 return;
15}
16
diff --git a/SD-VBS/common/c/fHorzcat.c b/SD-VBS/common/c/fHorzcat.c
new file mode 100644
index 0000000..9845e7c
--- /dev/null
+++ b/SD-VBS/common/c/fHorzcat.c
@@ -0,0 +1,40 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fHorzcat(F2D* a, F2D* b)
8{
9 F2D* out_, *out, *c;
10 int rows=0, cols=0, i, j, k, c_1, c_2, r_3, c_3;
11 int r_1;
12
13 r_1 = a->height;
14 c_1 = a->width;
15 cols += c_1;
16 c_2 = b->width;
17 cols += c_2;
18 rows = r_1;
19
20 out = fMallocHandle(rows, cols);
21
22 for(i=0; i<rows; i++)
23 {
24 k = 0;
25 for(j=0; j<c_1; j++)
26 {
27 subsref(out,i,k) = subsref(a,i,j);
28 k++;
29 }
30 for(j=0; j<c_2; j++)
31 {
32 subsref(out,i,k) = subsref(b,i,j);
33 k++;
34 }
35 }
36
37 return out;
38}
39
40
diff --git a/SD-VBS/common/c/fMallocHandle.c b/SD-VBS/common/c/fMallocHandle.c
new file mode 100644
index 0000000..6ce917c
--- /dev/null
+++ b/SD-VBS/common/c/fMallocHandle.c
@@ -0,0 +1,18 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9F2D* fMallocHandle(int rows, int cols)
10{
11 int i, j;
12 F2D* out;
13
14 out = (F2D*)malloc(sizeof(F2D) + sizeof(float)*rows*cols);
15 out->height = rows;
16 out->width = cols;
17 return out;
18}
diff --git a/SD-VBS/common/c/fMdivide.c b/SD-VBS/common/c/fMdivide.c
new file mode 100644
index 0000000..671e7d1
--- /dev/null
+++ b/SD-VBS/common/c/fMdivide.c
@@ -0,0 +1,27 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fMdivide(F2D* a, F2D* b)
8{
9 F2D *c;
10 int i, j, rows, cols;
11
12 rows = a->height;
13 cols = a->width;
14
15 if(rows != b->height || cols != b->width)
16 {
17 printf("fMDivide Mismatch = \nrows: %d\t%d\ncols: %d\t%d\n", rows, b->height, cols, b->width);
18 return NULL;
19 }
20
21 c = fMallocHandle(rows, cols);
22
23 for(i=0; i<(rows*cols); i++)
24 asubsref(c,i) = asubsref(a,i) / asubsref(b,i);
25
26 return c;
27}
diff --git a/SD-VBS/common/c/fMinus.c b/SD-VBS/common/c/fMinus.c
new file mode 100644
index 0000000..6b4954e
--- /dev/null
+++ b/SD-VBS/common/c/fMinus.c
@@ -0,0 +1,21 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fMinus(F2D* a, F2D* b)
8{
9 F2D *c;
10 int i, j, rows, cols;
11
12 rows = a->height;
13 cols = a->width;
14
15 c = fMallocHandle(rows, cols);
16
17 for(i=0; i<(rows*cols); i++)
18 asubsref(c,i) = asubsref(a,i) - asubsref(b,i);
19
20 return c;
21}
diff --git a/SD-VBS/common/c/fMtimes.c b/SD-VBS/common/c/fMtimes.c
new file mode 100644
index 0000000..c765d2f
--- /dev/null
+++ b/SD-VBS/common/c/fMtimes.c
@@ -0,0 +1,38 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fMtimes(F2D* a, F2D* b)
8{
9 F2D *out;
10 int m, p, p1, n, i, j, k;
11 float temp;
12
13 m = a->height;
14 p = a->width;
15
16 p1 = b->height;
17 n = b->width;
18
19 out = fMallocHandle(m,n);
20
21 for(i=0; i<m; i++)
22 {
23 for(j=0; j<n; j++)
24 {
25 temp = 0;
26 for(k=0; k<p; k++)
27 {
28 temp += subsref(b,k,j) * subsref(a,i,k);
29 }
30 subsref(out,i,j) = temp;
31 }
32 }
33
34 return out;
35}
36
37
38
diff --git a/SD-VBS/common/c/fPlus.c b/SD-VBS/common/c/fPlus.c
new file mode 100644
index 0000000..98900eb
--- /dev/null
+++ b/SD-VBS/common/c/fPlus.c
@@ -0,0 +1,21 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fPlus(F2D* a, F2D* b)
8{
9 F2D *c;
10 int i, j, rows, cols;
11
12 rows = a->height;
13 cols = a->width;
14
15 c = fMallocHandle(rows, cols);
16
17 for(i=0; i<(rows*cols); i++) {
18 asubsref(c,i) = asubsref(a,i) + asubsref(b,i);
19 }
20 return c;
21}
diff --git a/SD-VBS/common/c/fResetArray.c b/SD-VBS/common/c/fResetArray.c
new file mode 100644
index 0000000..23a853a
--- /dev/null
+++ b/SD-VBS/common/c/fResetArray.c
@@ -0,0 +1,19 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9void fResetArray(F2D *out, int rows, int cols, float val)
10{
11 int i, j;
12
13 for(i=0; i<rows; i++) {
14 for(j=0; j<cols; j++) {
15 subsref(out,i,j) = val;
16 }
17 }
18
19}
diff --git a/SD-VBS/common/c/fResetHandle.c b/SD-VBS/common/c/fResetHandle.c
new file mode 100644
index 0000000..da1a8f2
--- /dev/null
+++ b/SD-VBS/common/c/fResetHandle.c
@@ -0,0 +1,19 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9F2D* fResetHandle(F2D* out, int rows, int cols)
10{
11 int i, j;
12 //F2D* out;
13
14 //out = (F2D*)malloc(sizeof(F2D) + sizeof(float)*rows*cols);
15 out->height = rows;
16 out->width = cols;
17 //printf("fmalloc happened\n");
18 return out;
19}
diff --git a/SD-VBS/common/c/fReshape.c b/SD-VBS/common/c/fReshape.c
new file mode 100644
index 0000000..a078826
--- /dev/null
+++ b/SD-VBS/common/c/fReshape.c
@@ -0,0 +1,27 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fReshape(F2D* in, int rows, int cols)
8{
9 F2D *out;
10 int i, j, k;
11 int r, c;
12
13 r = in->height;
14 c = in->width;
15
16 out = fMallocHandle(rows, cols);
17
18 k = 0;
19 for(i=0; i<c; i++) {
20 for(j=0; j<r; j++) {
21 asubsref(out,k++) = subsref(in,j,i);
22 }
23 }
24 return out;
25}
26
27
diff --git a/SD-VBS/common/c/fResortIndices.c b/SD-VBS/common/c/fResortIndices.c
new file mode 100644
index 0000000..d4d1cda
--- /dev/null
+++ b/SD-VBS/common/c/fResortIndices.c
@@ -0,0 +1,77 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* fResortIndices(F2D* input, int dim, F2D* in, I2D* ind)
8{
9 int rows, cols;
10 //F2D *in;
11 int i, j, k;
12 //I2D *ind;
13
14 rows = input->height;
15 cols = input->width;
16
17 in = fCopy(input, in);
18 //ind = iMallocHandle(rows,cols);
19
20 for(i=0; i<cols; i++) {
21 for(j=0; j<rows; j++) {
22 subsref(ind,j,i) = 0;
23 }
24 }
25
26if(dim == 1)
27{
28 for(k=0; k<rows; k++)
29 {
30 for(i=0; i<cols; i++)
31 {
32 float localMax = subsref(in,k,i);
33 int localIndex = i;
34 subsref(ind,k,i) = i;
35 for(j=0; j<cols; j++)
36 {
37 if(localMax < subsref(in,k,j))
38 {
39 subsref(ind,k,i) = j;
40 localMax = subsref(in,k,j);
41 localIndex = j;
42 }
43 }
44 subsref(in,k,localIndex) = 0;
45 }
46 }
47
48 //fFreeHandle(in);
49 return ind;
50}
51
52 for(k=0; k<cols; k++)
53 {
54 for(i=0; i<rows; i++)
55 {
56 float localMax = subsref(in,i,k);
57 int localIndex = i;
58 subsref(ind,i,k) = i;
59 for(j=0; j<rows; j++)
60 {
61 if(localMax < subsref(in,j,k))
62 {
63 subsref(ind,i,k) = j;
64 localMax = subsref(in,j,k);
65 localIndex = j;
66 }
67 }
68 subsref(in,localIndex,k) = 0;
69 }
70 }
71
72 //fFreeHandle(in);
73 return ind;
74}
75
76
77
diff --git a/SD-VBS/common/c/fSelfCheck.c b/SD-VBS/common/c/fSelfCheck.c
new file mode 100644
index 0000000..fe146b5
--- /dev/null
+++ b/SD-VBS/common/c/fSelfCheck.c
@@ -0,0 +1,59 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7int fSelfCheck(F2D* in1, char* path, float tol)
8{
9 int r1, c1, ret=1;
10 float *buffer;
11 FILE* fd;
12 int count=0, i, j;
13 char file[256];
14
15 r1 = in1->height;
16 c1 = in1->width;
17
18 buffer = (float*)malloc(sizeof(float)*r1*c1);
19
20 sprintf(file, "%s", path);
21 fd = fopen(file, "r");
22
23 if(fd == NULL)
24 {
25 printf("Error: Expected file not opened %s\n", file);
26 return -1;
27 }
28
29 while(!feof(fd))
30 {
31 fscanf(fd, "%f", &buffer[count]);
32 count++;
33 }
34 count--;
35
36 if(count != (r1*c1))
37 {
38 printf("Checking error: dimensions mismatch. Expected = %d, Observed = %d \n", count, (r1*c1));
39 return -1;
40 }
41
42 for(i=0; i<r1*c1; i++)
43 {
44 float inVal = asubsref(in1,i);
45
46 if( (inVal-buffer[i])>tol || (buffer[i]-inVal)>tol )
47 {
48 printf("Mismatch %d: (%f, %f)\n", i, buffer[i], inVal);
49 return -1;
50 }
51 }
52
53 fclose(fd);
54 printf("Verification\t\t- Successful\n");
55 free(buffer);
56 return ret;
57}
58
59
diff --git a/SD-VBS/common/c/fSetArray.c b/SD-VBS/common/c/fSetArray.c
new file mode 100644
index 0000000..cd8269b
--- /dev/null
+++ b/SD-VBS/common/c/fSetArray.c
@@ -0,0 +1,22 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9F2D* fSetArray(int rows, int cols, float val)
10{
11 int i, j;
12 F2D *out;
13 out = fMallocHandle(rows, cols);
14
15 for(i=0; i<rows; i++) {
16 for(j=0; j<cols; j++) {
17 subsref(out,i,j) = val;
18 }
19 }
20 return out;
21
22}
diff --git a/SD-VBS/common/c/fSort.c b/SD-VBS/common/c/fSort.c
new file mode 100644
index 0000000..8aef21f
--- /dev/null
+++ b/SD-VBS/common/c/fSort.c
@@ -0,0 +1,43 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fSort(F2D* in, int dim)
8{
9 F2D *sorted;
10 int rows, cols, i, j, k, temp;
11
12 rows = in->height;
13 cols = in->width;
14
15 sorted = fDeepCopy(in);
16
17 for(k=0; k<cols; k++)
18 {
19 for(i=0; i<rows; i++)
20 {
21 for(j=i+1; j<rows; j++)
22 {
23 float sik, sjk;
24 sik = subsref(sorted,i,k);
25 sjk = subsref(sorted,j,k);
26
27 if(sik < sjk)
28 {
29 temp = sjk;
30 sjk = sik;
31 sik = temp;
32 }
33 }
34 }
35 }
36
37 return sorted;
38
39}
40
41
42
43
diff --git a/SD-VBS/common/c/fSortIndices.c b/SD-VBS/common/c/fSortIndices.c
new file mode 100644
index 0000000..753eda5
--- /dev/null
+++ b/SD-VBS/common/c/fSortIndices.c
@@ -0,0 +1,77 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* fSortIndices(F2D* input, int dim)
8{
9 int rows, cols;
10 F2D *in;
11 int i, j, k;
12 I2D *ind;
13
14 rows = input->height;
15 cols = input->width;
16
17 in = fDeepCopy(input);
18 ind = iMallocHandle(rows,cols);
19
20 for(i=0; i<cols; i++) {
21 for(j=0; j<rows; j++) {
22 subsref(ind,j,i) = 0;
23 }
24 }
25
26if(dim == 1)
27{
28 for(k=0; k<rows; k++)
29 {
30 for(i=0; i<cols; i++)
31 {
32 float localMax = subsref(in,k,i);
33 int localIndex = i;
34 subsref(ind,k,i) = i;
35 for(j=0; j<cols; j++)
36 {
37 if(localMax < subsref(in,k,j))
38 {
39 subsref(ind,k,i) = j;
40 localMax = subsref(in,k,j);
41 localIndex = j;
42 }
43 }
44 subsref(in,k,localIndex) = 0;
45 }
46 }
47
48 fFreeHandle(in);
49 return ind;
50}
51
52 for(k=0; k<cols; k++)
53 {
54 for(i=0; i<rows; i++)
55 {
56 float localMax = subsref(in,i,k);
57 int localIndex = i;
58 subsref(ind,i,k) = i;
59 for(j=0; j<rows; j++)
60 {
61 if(localMax < subsref(in,j,k))
62 {
63 subsref(ind,i,k) = j;
64 localMax = subsref(in,j,k);
65 localIndex = j;
66 }
67 }
68 subsref(in,localIndex,k) = 0;
69 }
70 }
71
72 fFreeHandle(in);
73 return ind;
74}
75
76
77
diff --git a/SD-VBS/common/c/fSum.c b/SD-VBS/common/c/fSum.c
new file mode 100644
index 0000000..cd9483a
--- /dev/null
+++ b/SD-VBS/common/c/fSum.c
@@ -0,0 +1,55 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fSum(F2D* inMat)
8{
9 F2D *outMat;
10 int rows, cols, i, j, k;
11 float temp;
12 int newRow, newCols;
13 int Rcols;
14
15 rows = inMat->height;
16 cols = inMat->width;
17
18 if(cols == 1 || rows == 1)
19 Rcols = 1;
20 else
21 Rcols = cols;
22
23 outMat = fSetArray(1,Rcols,0);
24
25 if( cols == 1)
26 {
27 temp = 0;
28 for( j=0; j<rows; j++)
29 temp = temp + subsref(inMat,j,0);
30 asubsref(outMat,0) = temp;
31 }
32 else if( rows == 1)
33 {
34 temp = 0;
35 for( j=0; j<cols; j++)
36 temp = temp + asubsref(inMat,j);
37 asubsref(outMat,0) = temp;
38 }
39 else
40 {
41 for( i=0; i<cols; i++)
42 {
43 temp = 0;
44 for( j=0; j<rows; j++)
45 temp = temp + subsref(inMat,j,i);
46 asubsref(outMat,i) = temp;
47 }
48 }
49
50 return outMat;
51}
52
53
54
55
diff --git a/SD-VBS/common/c/fSum2.c b/SD-VBS/common/c/fSum2.c
new file mode 100644
index 0000000..8078249
--- /dev/null
+++ b/SD-VBS/common/c/fSum2.c
@@ -0,0 +1,56 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fSum2(F2D* inMat, int dir)
8{
9 F2D *outMat;
10 int rows, cols, i, j, k;
11 float temp;
12 int newRow, newCols;
13
14 rows = inMat->height;
15 cols = inMat->width;
16
17 if(dir == 1)
18 {
19 newRow = 1;
20 newCols = cols;
21 }
22 else
23 {
24 newRow = rows;
25 newCols = 1;
26 }
27
28 outMat = fSetArray(newRow,newCols,0);
29
30 if(dir == 1)
31 {
32 for (i=0; i<cols; i++)
33 {
34 temp = 0;
35 for( j=0; j<rows; j++)
36 temp = temp + subsref(inMat,j,i);
37 asubsref(outMat,i) = temp;
38 }
39 }
40 else
41 {
42 for( i=0; i<rows; i++)
43 {
44 temp = 0;
45 for( j=0; j<cols; j++)
46 temp = temp + subsref(inMat,i,j);
47 subsref(outMat,i,0) = temp;
48 }
49 }
50
51 return outMat;
52}
53
54
55
56
diff --git a/SD-VBS/common/c/fTimes.c b/SD-VBS/common/c/fTimes.c
new file mode 100644
index 0000000..bfab489
--- /dev/null
+++ b/SD-VBS/common/c/fTimes.c
@@ -0,0 +1,21 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fTimes(F2D* a, F2D* b)
8{
9 F2D *c;
10 int i, j, rows, cols;
11
12 rows = a->height;
13 cols = a->width;
14
15 c = fMallocHandle(rows, cols);
16
17 for(i=0; i<(rows*cols); i++)
18 asubsref(c,i) = asubsref(a,i) * asubsref(b,i);
19
20 return c;
21}
diff --git a/SD-VBS/common/c/fTranspose.c b/SD-VBS/common/c/fTranspose.c
new file mode 100644
index 0000000..9611be2
--- /dev/null
+++ b/SD-VBS/common/c/fTranspose.c
@@ -0,0 +1,27 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fTranspose(F2D* a)
8{
9 F2D *out;
10 int m, p, p1, n, i, j, k;
11 float temp;
12
13 m = a->height;
14 n = a->width;
15
16 out = fMallocHandle(n, m);
17 k = 0;
18 for(i=0; i<n; i++)
19 {
20 for(j=0; j<m; j++)
21 asubsref(out,k++) = subsref(a,j,i);
22 }
23
24 return out;
25}
26
27
diff --git a/SD-VBS/common/c/fWriteMatrix.c b/SD-VBS/common/c/fWriteMatrix.c
new file mode 100644
index 0000000..822af92
--- /dev/null
+++ b/SD-VBS/common/c/fWriteMatrix.c
@@ -0,0 +1,34 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9void fWriteMatrix(F2D* input, char* inpath)
10{
11 FILE* fp;
12 char im[100];
13 int rows,cols, i, j;
14
15 sprintf(im, "%s/expected_C.txt", inpath);
16 fp = fopen(im, "w");
17
18 rows = input->height;
19 cols = input->width;
20
21 for(i=0; i<rows; i++)
22 {
23 for(j=0; j<cols; j++)
24 {
25 fprintf(fp, "%f\t", subsref(input, i, j));
26 }
27 fprintf(fp, "\n");
28 }
29
30 fclose(fp);
31}
32
33
34
diff --git a/SD-VBS/common/c/ffConv2.c b/SD-VBS/common/c/ffConv2.c
new file mode 100644
index 0000000..450c5d2
--- /dev/null
+++ b/SD-VBS/common/c/ffConv2.c
@@ -0,0 +1,47 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* ffConv2(F2D* a, F2D* b)
8{
9 F2D *c, *out;
10 int ma, na, mb, nb, ci, cj, i, j, m, n, ri, mm, nn;
11 int r_index, c_index;
12
13 ma = a->height;
14 na = a->width;
15
16 mb = b->height;
17 nb = b->width;
18
19 ci = ma;
20 cj = na;
21
22 c = fSetArray(ci, cj, 0);
23
24 r_index = mb/2;
25 c_index = nb/2;
26
27 for(i=0; i<ma; i++)
28 {
29 for(j=0; j<na; j++)
30 {
31 for(m=0; m<mb; m++)
32 {
33 mm = mb-1-m;
34 for(n=0; n<nb; n++)
35 {
36 nn = nb-1-n;
37 ri = i+m-r_index;
38 ci = j+n-c_index;
39 if(ri >=0 && ri < ma && ci >= 0 && ci < na)
40 subsref(c,i,j) += subsref(a,ri,ci) * subsref(b,mm,nn);
41 }
42 }
43 }
44 }
45
46 return c;
47}
diff --git a/SD-VBS/common/c/ffConv2_dY.c b/SD-VBS/common/c/ffConv2_dY.c
new file mode 100644
index 0000000..e480eaa
--- /dev/null
+++ b/SD-VBS/common/c/ffConv2_dY.c
@@ -0,0 +1,52 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* ffConv2_dY(F2D* a, F2D* b)
8{
9 F2D *c, *out;
10 int ma, na, mb, nb, ci, cj, i, j, m, n;
11 int r_index, c_index;
12
13 ma = a->height;
14 na = a->width;
15
16 mb = b->height;
17 nb = b->width;
18
19 r_index = ceil((mb + 1.0)/2.0);
20 c_index = ceil((nb + 1.0)/2.0);
21
22 ci = ma+mb-1;
23 cj = na+nb-1;
24
25 c = fSetArray(ci, cj, 0);
26
27 for(i=0; i<cj; i++)
28 {
29 for(j=0; j<ci; j++)
30 {
31 for(m=0; m<na; m++)
32 {
33 for(n=0; n<ma; n++)
34 {
35 if( (i-m)>=0 && (j-n)>=0 && (i-m)<nb && (j-n)<mb )
36 subsref(c,j,i) += subsref(a,n,m) * subsref(b,j-n,i-m);
37 }
38 }
39 }
40 }
41
42 out = fMallocHandle(ma, na);
43 for(i=0; i<ma; i++)
44 {
45 for(j=0; j<na; j++)
46 {
47 subsref(out,i,j) = subsref(c,(i+r_index-1),(j+c_index-1));
48 }
49 }
50
51 return out;
52}
diff --git a/SD-VBS/common/c/ffDivide.c b/SD-VBS/common/c/ffDivide.c
new file mode 100644
index 0000000..0607d0b
--- /dev/null
+++ b/SD-VBS/common/c/ffDivide.c
@@ -0,0 +1,21 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* ffDivide(F2D* a, F2D* b)
8{
9 F2D *c;
10 int i, j, rows, cols;
11
12 rows = a->height;
13 cols = a->width;
14
15 c = fMallocHandle(rows, cols);
16
17 for(i=0; i<(rows*cols); i++)
18 asubsref(c,i) = asubsref(a,i) / asubsref(b,i);
19
20 return c;
21}
diff --git a/SD-VBS/common/c/ffTimes.c b/SD-VBS/common/c/ffTimes.c
new file mode 100644
index 0000000..8ef84b8
--- /dev/null
+++ b/SD-VBS/common/c/ffTimes.c
@@ -0,0 +1,21 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* ffTimes(F2D* a, float b)
8{
9 F2D *c;
10 int i, j, rows, cols;
11
12 rows = a->height;
13 cols = a->width;
14
15 c = fMallocHandle(rows, cols);
16
17 for(i=0; i<(rows*cols); i++)
18 asubsref(c,i) = asubsref(a,i) * b;
19
20 return c;
21}
diff --git a/SD-VBS/common/c/ffVertcat.c b/SD-VBS/common/c/ffVertcat.c
new file mode 100644
index 0000000..00fa74b
--- /dev/null
+++ b/SD-VBS/common/c/ffVertcat.c
@@ -0,0 +1,36 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* ffVertcat(F2D* matrix1, F2D* matrix2)
8{
9 F2D *outMatrix;
10 int row1, col1, row2, col2, i, j, k;
11
12 row1 = matrix1->height;
13 col1 = matrix1->width;
14
15 row2 = matrix2->height;
16 col2 = matrix2->width;
17
18 outMatrix = fMallocHandle(row1+row2, col1);
19
20 for( i=0; i<col1; i++)
21 {
22 for (j=0; j<row1; j++)
23 {
24 subsref(outMatrix,j,i) = subsref(matrix1,j,i);
25 }
26 for( k=0; k<row2; k++)
27 {
28 subsref(outMatrix,(k+row1),i) = subsref(matrix2,k,i);
29 }
30 }
31
32 return outMatrix;
33
34}
35
36
diff --git a/SD-VBS/common/c/ffiConv2.c b/SD-VBS/common/c/ffiConv2.c
new file mode 100644
index 0000000..83c7466
--- /dev/null
+++ b/SD-VBS/common/c/ffiConv2.c
@@ -0,0 +1,54 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* ffiConv2(F2D* a, I2D* b)
8{
9 F2D *c;
10 F2D *out;
11 int ma, na, mb, nb, ci, cj, i, j, m, n;
12 int r_index, c_index;
13
14 ma = a->height;
15 na = a->width;
16
17 mb = b->height;
18 nb = b->width;
19
20 r_index = ceil((mb + 1.0)/2.0);
21 c_index = ceil((nb + 1.0)/2.0);
22
23 ci = ma+mb-1;
24 cj = na+nb-1;
25
26 c = fSetArray(ci, cj, 0);
27
28 for(i=0; i<ci; i++)
29 {
30 for(j=0; j<cj; j++)
31 {
32 for(m=0; m<ma; m++)
33 {
34 for(n=0; n<na; n++)
35 {
36 if( (i-m)>=0 && (j-n)>=0 && (i-m)<mb && (j-n)<nb )
37 subsref(c,i,j) += subsref(a,m,n) * subsref(b,(i-m),(j-n));
38 }
39 }
40
41 }
42 }
43
44 out = fMallocHandle(ma, na);
45 for(i=0; i<ma; i++)
46 {
47 for(j=0; j<na; j++)
48 {
49 subsref(out,i,j) = subsref(c,(i+r_index-1),(j+c_index-1));
50 }
51 }
52
53 return out;
54}
diff --git a/SD-VBS/common/c/fiConv2.c b/SD-VBS/common/c/fiConv2.c
new file mode 100644
index 0000000..87fc4ec
--- /dev/null
+++ b/SD-VBS/common/c/fiConv2.c
@@ -0,0 +1,54 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fiConv2(I2D* a, F2D* b)
8{
9 F2D *c;
10 F2D *out;
11 int ma, na, mb, nb, ci, cj, i, j, m, n;
12 int r_index, c_index;
13
14 ma = a->height;
15 na = a->width;
16
17 mb = b->height;
18 nb = b->width;
19
20 r_index = ceil((mb + 1.0)/2.0);
21 c_index = ceil((nb + 1.0)/2.0);
22
23 ci = ma+mb-1;
24 cj = na+nb-1;
25
26 c = fSetArray(ci, cj, 0);
27
28 for(i=0; i<ci; i++)
29 {
30 for(j=0; j<cj; j++)
31 {
32 for(m=0; m<ma; m++)
33 {
34 for(n=0; n<na; n++)
35 {
36 if( (i-m)>=0 && (j-n)>=0 && (i-m)<mb && (j-n)<nb )
37 subsref(c,i,j) += subsref(a,m,n) * subsref(b,(i-m),(j-n));
38 }
39 }
40
41 }
42 }
43
44 out = fMallocHandle(ma, na);
45 for(i=0; i<ma; i++)
46 {
47 for(j=0; j<na; j++)
48 {
49 subsref(out,i,j) = subsref(c,(i+r_index-1),(j+c_index-1));
50 }
51 }
52
53 return out;
54}
diff --git a/SD-VBS/common/c/fiCopy.c b/SD-VBS/common/c/fiCopy.c
new file mode 100644
index 0000000..27c164c
--- /dev/null
+++ b/SD-VBS/common/c/fiCopy.c
@@ -0,0 +1,23 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7void fiCopy(F2D* out, I2D* in)
8{
9 int i, j;
10 //F2D *out;
11 int rows, cols;
12
13 rows = in->height;
14 cols = in->width;
15
16 //out = fMallocHandle(rows, cols);
17
18 for(i=0; i<rows; i++)
19 for(j=0; j<cols; j++)
20 subsref(out,i,j) = subsref(in,i,j) + 0.0;
21
22 //return out;
23}
diff --git a/SD-VBS/common/c/fiDeepCopy.c b/SD-VBS/common/c/fiDeepCopy.c
new file mode 100644
index 0000000..7058945
--- /dev/null
+++ b/SD-VBS/common/c/fiDeepCopy.c
@@ -0,0 +1,23 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* fiDeepCopy(I2D* in)
8{
9 int i, j;
10 F2D *out;
11 int rows, cols;
12
13 rows = in->height;
14 cols = in->width;
15
16 out = fMallocHandle(rows, cols);
17
18 for(i=0; i<rows; i++)
19 for(j=0; j<cols; j++)
20 subsref(out,i,j) = subsref(in,i,j) + 0.0;
21
22 return out;
23}
diff --git a/SD-VBS/common/c/horzcat.c b/SD-VBS/common/c/horzcat.c
new file mode 100644
index 0000000..2041396
--- /dev/null
+++ b/SD-VBS/common/c/horzcat.c
@@ -0,0 +1,48 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* horzcat(F2D* a, F2D* b, F2D* c)
8{
9 F2D *out;
10 int rows=0, cols=0, i, j, k, c_1, c_2, r_3, c_3;
11
12 c_1 = a->width;
13 cols += c_1;
14
15 c_2 = b->width;
16 cols += c_2;
17
18 r_3 = c->height;
19 c_3 = c->width;
20 cols += c_3;
21 rows = r_3;
22
23 out = fMallocHandle(rows, cols);
24
25 for(i=0; i<rows; i++)
26 {
27 k = 0;
28 for(j=0; j<c_1; j++)
29 {
30 subsref(out,i,k) = subsref(a,i,j);
31 k++;
32 }
33 for(j=0; j<c_2; j++)
34 {
35 subsref(out,i,k) = subsref(b,i,j);
36 k++;
37 }
38 for(j=0; j<c_3; j++)
39 {
40 subsref(out,i,k) = subsref(c,i,j);
41 k++;
42 }
43 }
44
45 return out;
46}
47
48
diff --git a/SD-VBS/common/c/iCheck.c b/SD-VBS/common/c/iCheck.c
new file mode 100644
index 0000000..707d04a
--- /dev/null
+++ b/SD-VBS/common/c/iCheck.c
@@ -0,0 +1,18 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7int iCheck(I2D* in1, I2D* in2){
8 if(in1->width != in2 -> width || in1->height != in2->height) return 0;
9 for(int i = 0; i < in1->width;i++){
10 for(int j = 0; j < in1->height;j++){
11 if(subsref(in1,i,j) != subsref(in2,i,j)) return 0;
12 }
13 }
14 return 1;
15
16}
17
18
diff --git a/SD-VBS/common/c/iDeepCopy.c b/SD-VBS/common/c/iDeepCopy.c
new file mode 100644
index 0000000..8d56680
--- /dev/null
+++ b/SD-VBS/common/c/iDeepCopy.c
@@ -0,0 +1,23 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* iDeepCopy(I2D* in)
8{
9 int i, j;
10 I2D* out;
11 int rows, cols;
12
13 rows = in->height;
14 cols = in->width;
15
16 out = iMallocHandle(rows, cols);
17
18 for(i=0; i<rows; i++)
19 for(j=0; j<cols; j++)
20 subsref(out,i,j) = subsref(in,i,j);
21
22 return out;
23}
diff --git a/SD-VBS/common/c/iDeepCopyRange.c b/SD-VBS/common/c/iDeepCopyRange.c
new file mode 100644
index 0000000..f3fa6e3
--- /dev/null
+++ b/SD-VBS/common/c/iDeepCopyRange.c
@@ -0,0 +1,23 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* iDeepCopyRange(I2D* in, int startRow, int numberRows, int startCol, int numberCols)
8{
9 int i, j, k;
10 I2D *out;
11 int rows, cols;
12
13 rows = numberRows + startRow;
14 cols = numberCols + startCol;
15 out = iMallocHandle(numberRows, numberCols);
16
17 k = 0;
18 for(i=startRow; i<rows; i++)
19 for(j=startCol; j<cols; j++)
20 asubsref(out,k++) = subsref(in,i,j);
21
22 return out;
23}
diff --git a/SD-VBS/common/c/iFreeHandle.c b/SD-VBS/common/c/iFreeHandle.c
new file mode 100644
index 0000000..c45db21
--- /dev/null
+++ b/SD-VBS/common/c/iFreeHandle.c
@@ -0,0 +1,16 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9void iFreeHandle(I2D* out)
10{
11 if(out != NULL)
12 free(out);
13
14 return;
15}
16
diff --git a/SD-VBS/common/c/iHorzcat.c b/SD-VBS/common/c/iHorzcat.c
new file mode 100644
index 0000000..ac1c4ea
--- /dev/null
+++ b/SD-VBS/common/c/iHorzcat.c
@@ -0,0 +1,41 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* iHorzcat(I2D* a, I2D* b)
8{
9 I2D *out, *c;
10 int rows=0, cols=0, i, j, k, c_1, c_2, r_3, c_3;
11 int r_1;
12
13 r_1 = a->height;
14 c_1 = a->width;
15 cols += c_1;
16
17 c_2 = b->width;
18 cols += c_2;
19 rows = r_1;
20
21 out = iMallocHandle(rows, cols);
22
23 for(i=0; i<rows; i++)
24 {
25 k = 0;
26 for(j=0; j<c_1; j++)
27 {
28 subsref(out,i,k) = subsref(a,i,j);
29 k++;
30 }
31 for(j=0; j<c_2; j++)
32 {
33 subsref(out,i,k) = subsref(b,i,j);
34 k++;
35 }
36 }
37
38 return out;
39}
40
41
diff --git a/SD-VBS/common/c/iMallocHandle.c b/SD-VBS/common/c/iMallocHandle.c
new file mode 100644
index 0000000..afebf86
--- /dev/null
+++ b/SD-VBS/common/c/iMallocHandle.c
@@ -0,0 +1,20 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9I2D* iMallocHandle(int rows, int cols)
10{
11 int i, j;
12 I2D* out;
13
14 out = (I2D*)malloc(sizeof(I2D) + sizeof(int)*rows*cols);
15 out->height = rows;
16 out->width = cols;
17 //printf("imalloc happened\n");
18 return out;
19}
20
diff --git a/SD-VBS/common/c/iMinus.c b/SD-VBS/common/c/iMinus.c
new file mode 100644
index 0000000..a0ed908
--- /dev/null
+++ b/SD-VBS/common/c/iMinus.c
@@ -0,0 +1,21 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* iMinus(I2D* a, I2D* b)
8{
9 I2D *c;
10 int i, j, rows, cols;
11
12 rows = a->height;
13 cols = a->width;
14
15 c = iMallocHandle(rows, cols);
16
17 for(i=0; i<(rows*cols); i++)
18 asubsref(c,i) = asubsref(a,i) - asubsref(b,i);
19
20 return c;
21}
diff --git a/SD-VBS/common/c/iResetArray.c b/SD-VBS/common/c/iResetArray.c
new file mode 100644
index 0000000..3659d15
--- /dev/null
+++ b/SD-VBS/common/c/iResetArray.c
@@ -0,0 +1,22 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9void iResetArray(I2D* out, int rows, int cols, int val)
10{
11 int i, j;
12 //I2D *out;
13 //out = iMallocHandle(rows, cols);
14
15 for(i=0; i<rows; i++) {
16 for(j=0; j<cols; j++) {
17 subsref(out,i,j) = val;
18 }
19 }
20 //return out;
21
22}
diff --git a/SD-VBS/common/c/iReshape.c b/SD-VBS/common/c/iReshape.c
new file mode 100644
index 0000000..511a8ed
--- /dev/null
+++ b/SD-VBS/common/c/iReshape.c
@@ -0,0 +1,25 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* iReshape(I2D* in, int rows, int cols)
8{
9 I2D *out;
10 int i, j, k;
11 int r, c;
12
13 r = in->height;
14 c = in->width;
15
16 out = iMallocHandle(rows, cols);
17
18 k = 0;
19 for(i=0; i<c; i++)
20 for(j=0; j<r; j++)
21 asubsref(out,k++) = subsref(in,j,i);
22
23 return out;
24}
25
diff --git a/SD-VBS/common/c/iSetArray.c b/SD-VBS/common/c/iSetArray.c
new file mode 100644
index 0000000..205bd13
--- /dev/null
+++ b/SD-VBS/common/c/iSetArray.c
@@ -0,0 +1,22 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9I2D* iSetArray(int rows, int cols, int val)
10{
11 int i, j;
12 I2D *out;
13 out = iMallocHandle(rows, cols);
14
15 for(i=0; i<rows; i++) {
16 for(j=0; j<cols; j++) {
17 subsref(out,i,j) = val;
18 }
19 }
20 return out;
21
22}
diff --git a/SD-VBS/common/c/iSort.c b/SD-VBS/common/c/iSort.c
new file mode 100644
index 0000000..5dbdfb9
--- /dev/null
+++ b/SD-VBS/common/c/iSort.c
@@ -0,0 +1,43 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* iSort(I2D* in, int dim)
8{
9 I2D *sorted;
10 int rows, cols, i, j, k, temp;
11
12 rows = in->height;
13 cols = in->width;
14
15 sorted = iDeepCopy(in);
16
17 for(k=0; k<cols; k++)
18 {
19 for(i=0; i<rows; i++)
20 {
21 for(j=i+1; j<rows; j++)
22 {
23 int sik, sjk;
24 sik = subsref(sorted,i,k);
25 sjk = subsref(sorted,j,k);
26
27 if(sik < sjk)
28 {
29 temp = sjk;
30 sjk = sik;
31 sik = temp;
32 }
33 }
34 }
35 }
36
37 return sorted;
38
39}
40
41
42
43
diff --git a/SD-VBS/common/c/iSortIndices.c b/SD-VBS/common/c/iSortIndices.c
new file mode 100644
index 0000000..5939c32
--- /dev/null
+++ b/SD-VBS/common/c/iSortIndices.c
@@ -0,0 +1,47 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* iSortIndices(I2D* in, int dim)
8{
9 I2D *sorted;
10 int rows, cols, i, j, k, temp;
11 I2D *ind;
12
13 rows = in->height;
14 cols = in->width;
15
16 sorted = iDeepCopy(in);
17 ind = iMallocHandle(rows, cols);
18
19 for(i=0; i<cols; i++)
20 for(j=0; j<rows; j++)
21 subsref(ind,j,i) = 0;
22
23 for(k=0; k<cols; k++)
24 {
25 for(i=0; i<rows; i++)
26 {
27 int localMax = subsref(in,i,k);
28 int localIndex = i;
29 subsref(ind,i,k) = i;
30 for(j=0; j<rows; j++)
31 {
32 if(localMax < subsref(in,j,k))
33 {
34 subsref(ind,i,k) = j;
35 localMax = subsref(in,j,k);
36 localIndex = j;
37 }
38 }
39 subsref(in,localIndex,k) = 0;
40 }
41 }
42
43 return ind;
44}
45
46
47
diff --git a/SD-VBS/common/c/iTimes.c b/SD-VBS/common/c/iTimes.c
new file mode 100644
index 0000000..479c39d
--- /dev/null
+++ b/SD-VBS/common/c/iTimes.c
@@ -0,0 +1,22 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* iTimes(I2D* a, I2D* b)
8{
9 I2D *c;
10 int i, j, rows, cols;
11
12 rows = a->height;
13 cols = a->width;
14
15 c = iMallocHandle(rows, cols);
16
17 for(i=0; i<(rows*cols); i++)
18 asubsref(c,i) = asubsref(a,i) * asubsref(b,i);
19
20 return c;
21}
22
diff --git a/SD-VBS/common/c/iTranspose.c b/SD-VBS/common/c/iTranspose.c
new file mode 100644
index 0000000..79b65d2
--- /dev/null
+++ b/SD-VBS/common/c/iTranspose.c
@@ -0,0 +1,26 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* iTranspose(I2D* a)
8{
9 I2D *out;
10 int m, p, p1, n, i, j, k;
11 int temp;
12
13 m = a->height;
14 n = a->width;
15
16 out = iMallocHandle(n, m);
17 k = 0;
18 for(i=0; i<n; i++)
19 {
20 for(j=0; j<m; j++)
21 asubsref(out,k++) = subsref(a,j,i);
22 }
23
24 return out;
25}
26
diff --git a/SD-VBS/common/c/iVertcat.c b/SD-VBS/common/c/iVertcat.c
new file mode 100644
index 0000000..2c2d857
--- /dev/null
+++ b/SD-VBS/common/c/iVertcat.c
@@ -0,0 +1,34 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* iVertcat(I2D* matrix1, I2D* matrix2)
8{
9 I2D *outMatrix;
10 int row1, col1, row2, col2, i, j, k;
11
12 row1 = matrix1->height;
13 col1 = matrix1->width;
14
15 row2 = matrix2->height;
16 col2 = matrix2->width;
17
18 outMatrix = iMallocHandle(row1+row2, col1);
19
20 for( i=0; i<col1; i++)
21 {
22 for (j=0; j<row1; j++)
23 {
24 subsref(outMatrix,j,i) = subsref(matrix1,j,i);
25 }
26 for( k=0; k<row2; k++)
27 {
28 subsref(outMatrix,(k+row1),i) = subsref(matrix2,k,i);
29 }
30 }
31 return outMatrix;
32}
33
34
diff --git a/SD-VBS/common/c/ifDeepCopy.c b/SD-VBS/common/c/ifDeepCopy.c
new file mode 100644
index 0000000..a899340
--- /dev/null
+++ b/SD-VBS/common/c/ifDeepCopy.c
@@ -0,0 +1,25 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <math.h>
6#include "sdvbs_common.h"
7
8I2D* ifDeepCopy(F2D* in)
9{
10 int i, j;
11 I2D *out;
12 int rows, cols;
13
14 rows = in->height;
15 cols = in->width;
16
17 out = iMallocHandle(rows, cols);
18
19 for(i=0; i<rows; i++)
20 for(j=0; j<cols; j++)
21 subsref(out,i,j) = (int)(subsref(in,i,j));
22
23 return out;
24
25}
diff --git a/SD-VBS/common/c/ifMtimes.c b/SD-VBS/common/c/ifMtimes.c
new file mode 100644
index 0000000..15b3631
--- /dev/null
+++ b/SD-VBS/common/c/ifMtimes.c
@@ -0,0 +1,38 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* ifMtimes(I2D* a, F2D* b)
8{
9 F2D *out;
10 int m, p, p1, n, i, j, k;
11 float temp;
12
13 m = a->height;
14 p = a->width;
15
16 p1 = b->height;
17 n = b->width;
18
19 out = fMallocHandle(m,n);
20
21 for(i=0; i<m; i++)
22 {
23 for(j=0; j<n; j++)
24 {
25 temp = 0;
26 for(k=0; k<p; k++)
27 {
28 temp += subsref(b,k,j) * subsref(a,i,k);
29 }
30 subsref(out,i,j) = temp;
31 }
32 }
33
34 return out;
35}
36
37
38
diff --git a/SD-VBS/common/c/iiConv2.c b/SD-VBS/common/c/iiConv2.c
new file mode 100644
index 0000000..436b206
--- /dev/null
+++ b/SD-VBS/common/c/iiConv2.c
@@ -0,0 +1,55 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* iiConv2(I2D* a, I2D* b)
8{
9 I2D *c;
10 I2D *out;
11 int ma, na, mb, nb, ci, cj, i, j, m, n;
12 int r_index, c_index;
13
14 ma = a->height;
15 na = a->width;
16
17 mb = b->height;
18 nb = b->width;
19
20 r_index = ceil((mb + 1.0)/2.0);
21 c_index = ceil((nb + 1.0)/2.0);
22
23 ci = ma+mb-1;
24 cj = na+nb-1;
25
26 c = iSetArray(ci, cj, 0);
27
28 for(i=0; i<ci; i++)
29 {
30 for(j=0; j<cj; j++)
31 {
32 for(m=0; m<ma; m++)
33 {
34 for(n=0; n<na; n++)
35 {
36 if( (i-m)>=0 && (j-n)>=0 && (i-m)<mb && (j-n)<nb )
37 subsref(c,i,j) += subsref(a,m,n) * subsref(b,i-m,j-n);
38 }
39 }
40
41 }
42 }
43
44 out = iMallocHandle(ma, na);
45 for(i=0; i<ma; i++)
46 {
47 for(j=0; j<na; j++)
48 {
49 subsref(out,i,j) = subsref(c,(i+r_index-1),(j+c_index-1));
50 }
51 }
52
53
54 return out;
55}
diff --git a/SD-VBS/common/c/imageBlur.c b/SD-VBS/common/c/imageBlur.c
new file mode 100644
index 0000000..8e3ad92
--- /dev/null
+++ b/SD-VBS/common/c/imageBlur.c
@@ -0,0 +1,67 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* imageBlur(I2D* imageIn)
8{
9 int rows, cols;
10 F2D *imageOut, *tempOut;
11 float temp;
12 I2D *kernel;
13 int k, kernelSize, startCol, endCol, halfKernel, startRow, endRow, i, j, kernelSum;
14
15 rows = imageIn->height;
16 cols = imageIn->width;
17
18 imageOut = fSetArray(rows, cols, 0);
19 tempOut = fSetArray(rows, cols, 0);
20 kernel = iMallocHandle(1, 5);
21
22 asubsref(kernel,0) = 1;
23 asubsref(kernel,1) = 4;
24 asubsref(kernel,2) = 6;
25 asubsref(kernel,3) = 4;
26 asubsref(kernel,4) = 1;
27 kernelSize = 5;
28 kernelSum = 16;
29
30 startCol = 2;
31 endCol = cols - 2;
32 halfKernel = 2;
33
34 startRow = 2;
35 endRow = rows - 2;
36
37 for(i=startRow; i<endRow; i++){
38 for(j=startCol; j<endCol; j++)
39 {
40 temp = 0;
41 for(k=-halfKernel; k<=halfKernel; k++)
42 {
43 temp += subsref(imageIn,i,j+k) * asubsref(kernel,k+halfKernel);
44 }
45 subsref(tempOut,i,j) = temp/kernelSum;
46 }
47 }
48
49 for(i=startRow; i<endRow; i++)
50 {
51 for(j=startCol; j<endCol; j++)
52 {
53 temp = 0;
54 for(k=-halfKernel; k<=halfKernel; k++)
55 {
56 temp += subsref(tempOut,(i+k),j) * asubsref(kernel,k+halfKernel);
57 }
58 subsref(imageOut,i,j) = temp/kernelSum;
59 }
60 }
61
62 fFreeHandle(tempOut);
63 iFreeHandle(kernel);
64 return imageOut;
65}
66
67
diff --git a/SD-VBS/common/c/imageReblur.c b/SD-VBS/common/c/imageReblur.c
new file mode 100644
index 0000000..1755f67
--- /dev/null
+++ b/SD-VBS/common/c/imageReblur.c
@@ -0,0 +1,67 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* imageReblur(I2D* imageIn, F2D* imageOut, F2D* tempOut, I2D* kernel)
8{
9 int rows, cols;
10 //F2D *imageOut, *tempOut;
11 float temp;
12 //I2D *kernel;
13 int k, kernelSize, startCol, endCol, halfKernel, startRow, endRow, i, j, kernelSum;
14
15 rows = imageIn->height;
16 cols = imageIn->width;
17
18 fResetArray(imageOut, rows, cols, 0);
19 fResetArray(tempOut, rows, cols, 0);
20 //kernel = iMallocHandle(1, 5);
21
22 asubsref(kernel,0) = 1;
23 asubsref(kernel,1) = 4;
24 asubsref(kernel,2) = 6;
25 asubsref(kernel,3) = 4;
26 asubsref(kernel,4) = 1;
27 kernelSize = 5;
28 kernelSum = 16;
29
30 startCol = 2;
31 endCol = cols - 2;
32 halfKernel = 2;
33
34 startRow = 2;
35 endRow = rows - 2;
36
37 for(i=startRow; i<endRow; i++){
38 for(j=startCol; j<endCol; j++)
39 {
40 temp = 0;
41 for(k=-halfKernel; k<=halfKernel; k++)
42 {
43 temp += subsref(imageIn,i,j+k) * asubsref(kernel,k+halfKernel);
44 }
45 subsref(tempOut,i,j) = temp/kernelSum;
46 }
47 }
48
49 for(i=startRow; i<endRow; i++)
50 {
51 for(j=startCol; j<endCol; j++)
52 {
53 temp = 0;
54 for(k=-halfKernel; k<=halfKernel; k++)
55 {
56 temp += subsref(tempOut,(i+k),j) * asubsref(kernel,k+halfKernel);
57 }
58 subsref(imageOut,i,j) = temp/kernelSum;
59 }
60 }
61
62 //fFreeHandle(tempOut);
63 //iFreeHandle(kernel);
64 return imageOut;
65}
66
67
diff --git a/SD-VBS/common/c/imageResize.c b/SD-VBS/common/c/imageResize.c
new file mode 100644
index 0000000..72c0881
--- /dev/null
+++ b/SD-VBS/common/c/imageResize.c
@@ -0,0 +1,78 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* imageResize(F2D* imageIn)
8{
9 int m, k, rows, cols;
10 F2D *imageOut;
11 I2D *kernel;
12 float tempVal;
13 int kernelSize, startCol, endCol, halfKernel, startRow, endRow, i, j, kernelSum;
14 int outputRows, outputCols;
15 F2D *temp;
16
17 rows = imageIn->height;
18 cols = imageIn->width;
19
20 // level 1 is the base image.
21
22 outputRows = floor((rows+1)/2);
23 outputCols = floor((cols+1)/2);
24
25 temp = fSetArray(rows, outputCols, 0);
26 imageOut = fSetArray(outputRows, outputCols, 0);
27 kernel = iMallocHandle(1, 5);
28
29 asubsref(kernel,0) = 1;
30 asubsref(kernel,1) = 4;
31 asubsref(kernel,2) = 6;
32 asubsref(kernel,3) = 4;
33 asubsref(kernel,4) = 1;
34 kernelSize = 5;
35 kernelSum = 16;
36
37 startCol = 2;
38 endCol = cols - 2;
39 halfKernel = 2;
40
41 startRow = 2;
42 endRow = rows - 2;
43
44 for(i=startRow; i<endRow; i++)
45 {
46 m = 0;
47 for(j=startCol; j<endCol; j+=2)
48 {
49 tempVal = 0;
50 for(k=-halfKernel; k<=halfKernel; k++)
51 {
52 tempVal += subsref(imageIn,i,j+k) * asubsref(kernel,k+halfKernel);
53 }
54 subsref(temp,i,m) = tempVal/kernelSum;
55 m = m+1;
56 }
57 }
58
59 m = 0;
60 for(i=startRow; i<endRow; i+=2)
61 {
62 for(j=0; j<outputCols; j++)
63 {
64 tempVal = 0;
65 for(k=-halfKernel; k<=halfKernel; k++)
66 {
67 tempVal += subsref(temp,(i+k),j) * asubsref(kernel,k+halfKernel);
68 }
69 subsref(imageOut,m,j) = (tempVal/kernelSum);
70 }
71 m = m+1;
72 }
73
74 fFreeHandle(temp);
75 iFreeHandle(kernel);
76 return imageOut;
77
78}
diff --git a/SD-VBS/common/c/isMinus.c b/SD-VBS/common/c/isMinus.c
new file mode 100644
index 0000000..da0eb89
--- /dev/null
+++ b/SD-VBS/common/c/isMinus.c
@@ -0,0 +1,23 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9I2D* isMinus(I2D* a, int b)
10{
11 I2D *c;
12 int i, j, rows, cols;
13
14 rows = a->height;
15 cols = a->width;
16
17 c = iMallocHandle(rows, cols);
18
19 for(i=0; i<(rows*cols); i++)
20 asubsref(c,i) = asubsref(a,i) - b;
21
22 return c;
23}
diff --git a/SD-VBS/common/c/isPlus.c b/SD-VBS/common/c/isPlus.c
new file mode 100644
index 0000000..9c7438f
--- /dev/null
+++ b/SD-VBS/common/c/isPlus.c
@@ -0,0 +1,22 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7I2D* isPlus(I2D* a, int b)
8{
9 I2D *c;
10 int i, j, rows, cols;
11
12 rows = a->height;
13 cols = a->width;
14
15 c = iMallocHandle(rows, cols);
16
17 for(i=0; i<(rows*cols); i++)
18 asubsref(c,i) = asubsref(a,i) + b;
19
20 return c;
21}
22
diff --git a/SD-VBS/common/c/photonEndTiming.c b/SD-VBS/common/c/photonEndTiming.c
new file mode 100644
index 0000000..b15c4de
--- /dev/null
+++ b/SD-VBS/common/c/photonEndTiming.c
@@ -0,0 +1,22 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5/** C File **/
6#include <stdio.h>
7#include <stdlib.h>
8#include <string.h>
9#include <assert.h>
10#include <math.h>
11#include "timingUtils.h"
12#include "sdvbs_common.h"
13
14unsigned int * photonEndTiming()
15{
16 static unsigned int *array;
17 array = (unsigned int*)malloc(sizeof(unsigned int)*2);
18
19 magic_timing_begin(array[0], array[1]);
20 return array;
21}
22
diff --git a/SD-VBS/common/c/photonPrintTiming.c b/SD-VBS/common/c/photonPrintTiming.c
new file mode 100644
index 0000000..06df530
--- /dev/null
+++ b/SD-VBS/common/c/photonPrintTiming.c
@@ -0,0 +1,22 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5/** C File **/
6#include <stdio.h>
7#include <stdlib.h>
8#include <string.h>
9#include <assert.h>
10#include <math.h>
11#include "timingUtils.h"
12#include "sdvbs_common.h"
13
14void photonPrintTiming(unsigned int * elapsed)
15{
16 if(elapsed[1] == 0)
17 printf("Cycles elapsed\t\t- %u\n\n", elapsed[0]);
18 else
19 printf("Cycles elapsed\t\t- %u%u\n\n", elapsed[1], elapsed[0]);
20}
21
22/** End of C Code **/
diff --git a/SD-VBS/common/c/photonReportTiming.c b/SD-VBS/common/c/photonReportTiming.c
new file mode 100644
index 0000000..c41d103
--- /dev/null
+++ b/SD-VBS/common/c/photonReportTiming.c
@@ -0,0 +1,28 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5/** C File **/
6#include <stdio.h>
7#include <stdlib.h>
8#include <string.h>
9#include <assert.h>
10#include <math.h>
11#include "timingUtils.h"
12#include "sdvbs_common.h"
13
14unsigned int * photonReportTiming(unsigned int* startCycles,unsigned int* endCycles)
15{
16
17 static unsigned int *elapsed;
18 elapsed = (unsigned int*)malloc(sizeof(unsigned int)*2);
19 unsigned long long start = (((unsigned long long)0x0) | startCycles[0]) << 32 | startCycles[1];
20 unsigned long long end = (((unsigned long long)0x0) | endCycles[0]) << 32 | endCycles[1];
21 unsigned long long diff = end - start;
22 elapsed[0] = (unsigned int)(diff >> 32);
23 elapsed[1] = (unsigned int)(diff & 0xffffffff);
24 return elapsed;
25
26}
27
28/** End of C Code **/
diff --git a/SD-VBS/common/c/photonStartTiming.c b/SD-VBS/common/c/photonStartTiming.c
new file mode 100644
index 0000000..0d0b2b1
--- /dev/null
+++ b/SD-VBS/common/c/photonStartTiming.c
@@ -0,0 +1,23 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5/** C File **/
6#include <stdio.h>
7#include <stdlib.h>
8#include <string.h>
9#include <assert.h>
10#include <math.h>
11#include "timingUtils.h"
12#include "sdvbs_common.h"
13
14unsigned int* photonStartTiming()
15{
16 static unsigned int *array;
17
18 array = (unsigned int*)malloc(sizeof(unsigned int)*2);
19 magic_timing_begin(array[0], array[1]);
20 return array;
21}
22
23/** End of C Code **/
diff --git a/SD-VBS/common/c/randWrapper.c b/SD-VBS/common/c/randWrapper.c
new file mode 100644
index 0000000..cadcc32
--- /dev/null
+++ b/SD-VBS/common/c/randWrapper.c
@@ -0,0 +1,30 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* randWrapper(int m, int n)
8{
9 F2D *out;
10 float seed;
11 int i,j;
12
13 out = fSetArray(m, n, 0);
14 seed = 0.9;
15
16 for(i=0; i<m; i++)
17 {
18 for(j=0; j<n; j++)
19 {
20 if(i<j)
21 subsref(out,i,j) = seed * ((i+1.0)/(j+1.0));
22 else
23 subsref(out,i,j) = seed * ((j+1.0)/(i+1.0));
24 }
25 }
26
27 return out;
28}
29
30
diff --git a/SD-VBS/common/c/randnWrapper.c b/SD-VBS/common/c/randnWrapper.c
new file mode 100644
index 0000000..4701b0e
--- /dev/null
+++ b/SD-VBS/common/c/randnWrapper.c
@@ -0,0 +1,40 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6#include <math.h>
7F2D* randnWrapper(int m, int n)
8{
9 F2D *out;
10 float seed;
11 int i,j;
12
13 out = fSetArray(m, n, 0);
14 seed = 0.9;
15
16 for(i=0; i<m; i++)
17 {
18 for(j=0; j<n; j++)
19 {
20 if(i<j)
21 subsref(out,i,j) = seed * ((i+1.0)/(j+1.0));
22 else
23 subsref(out,i,j) = seed * ((j+1.0)/(i+1.0));
24 }
25 }
26
27 for(i=0; i<m ;i++)
28 {
29 for(j=0; j<n; j++)
30 {
31 float w;
32 w = subsref(out,i,j);
33 w = ((-2.0 * log(w))/w);
34 subsref(out,i,j) = w;
35 }
36 }
37
38 return out;
39}
40
diff --git a/SD-VBS/common/c/readFile.c b/SD-VBS/common/c/readFile.c
new file mode 100644
index 0000000..2c16abd
--- /dev/null
+++ b/SD-VBS/common/c/readFile.c
@@ -0,0 +1,42 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include "sdvbs_common.h"
6
7F2D* readFile(unsigned char* fileName)
8{
9 FILE* fp;
10 F2D *fill;
11 float temp;
12 int rows, cols;
13 int i, j;
14
15 fp = fopen(fileName, "r");
16 if(fp == NULL)
17 {
18 printf("Error in file %s\n", fileName);
19 return NULL;
20 }
21
22 fscanf(fp, "%d", &cols);
23 fscanf(fp, "%d", &rows);
24
25 fill = fSetArray(rows, cols, 0);
26
27 for(i=0; i<rows; i++)
28 {
29 for(j=0; j<cols; j++)
30 {
31 fscanf(fp, "%f", &(subsref(fill,i,j)) );
32 }
33 }
34
35 fclose(fp);
36 return fill;
37}
38
39
40
41
42
diff --git a/SD-VBS/common/c/readImage.c b/SD-VBS/common/c/readImage.c
new file mode 100644
index 0000000..a4dd990
--- /dev/null
+++ b/SD-VBS/common/c/readImage.c
@@ -0,0 +1,112 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9I2D* readImage(const char* pathName)
10{
11 // Reading BMP image
12 char signature[2];
13 int file_size;
14 short int reserved1;
15 short int reserved2;
16 int loc_of_bitmap;
17
18 int size_of_infoheader;
19 int width;
20 int height;
21 short int number_of_planes;
22 short int bits_per_pixel;
23
24 int compression_method;
25 int bytes_of_bitmap;
26 int hori_reso;
27 int vert_reso;
28 int no_of_colors;
29 int no_of_imp_colors;
30
31 int nI,nJ;
32 int pixSize;
33
34 unsigned char tempb,tempg,tempr,tempjunk[12];
35 int ta;
36 I2D* srcImage;
37
38 FILE *input;
39 input = fopen(pathName,"rb");
40 if(input == NULL)
41 {
42 perror("File pointer error");
43 return NULL;
44 }
45 else
46 {
47 //start of header information
48 fread(&signature,sizeof(signature),1,input);
49 fread(&file_size,sizeof(file_size),1,input);
50 fread(&reserved1,sizeof(reserved1),1,input);
51 fread(&reserved2,sizeof(reserved2),1,input);
52 fread(&loc_of_bitmap,sizeof(loc_of_bitmap),1,input);
53
54 fread(&size_of_infoheader,sizeof(size_of_infoheader),1,input);
55 fread(&width,sizeof(width),1,input); // Reads the width of the image
56 fread(&height,sizeof(height),1,input); // Reads the height of the image
57 fread(&number_of_planes,sizeof(number_of_planes),1,input);
58 fread(&bits_per_pixel,sizeof(bits_per_pixel),1,input);
59 fread(&compression_method,sizeof(compression_method),1,input);
60 fread(&bytes_of_bitmap,sizeof(bytes_of_bitmap),1,input);
61
62 fread(&hori_reso,sizeof(hori_reso),1,input);
63 fread(&vert_reso,sizeof(vert_reso),1,input);
64 fread(&no_of_colors,sizeof(no_of_colors),1,input);
65 fread(&no_of_imp_colors,sizeof(no_of_imp_colors),1,input);
66 //end of header information
67
68 srcImage = iMallocHandle(height, width);
69
70 // Conditions to check whether the BMP is interleaved and handling few exceptions
71 if(srcImage->height <= 0 || srcImage->width <= 0 || signature[0] != 'B' || signature[1] != 'M' || ( bits_per_pixel !=24 && bits_per_pixel !=8 ) )
72 {
73 printf("ERROR in BMP read: The input file is not in standard BMP format");
74 return NULL;
75 }
76 fseek(input,loc_of_bitmap,SEEK_SET);
77
78 if (bits_per_pixel == 8)
79 {
80 for(nI = (height - 1); nI >= 0 ; nI--)
81 {
82 for(nJ = 0;nJ < width; nJ++)
83 {
84 fread(&tempg,sizeof(unsigned char),1,input);
85 subsref(srcImage,nI,nJ) = (int)tempg;
86 }
87 }
88 }
89 else if (bits_per_pixel == 24)
90 {
91 for(nI = (height - 1); nI >= 0 ; nI--)
92 {
93 for(nJ = 0;nJ < width; nJ++)
94 {
95 fread(&tempb,sizeof(unsigned char),1,input);
96 fread(&tempg,sizeof(unsigned char),1,input);
97 fread(&tempr,sizeof(unsigned char),1,input);
98 ta = (3*tempr + 6*tempg + tempb)/10;
99 ta = tempg;
100 subsref(srcImage,nI,nJ) = (int)ta;
101 }
102 }
103 }
104 else
105 {
106 return NULL;
107 }
108
109 fclose(input);
110 return srcImage;
111 }
112}
diff --git a/SD-VBS/common/c/sdvbs_common.h b/SD-VBS/common/c/sdvbs_common.h
new file mode 100644
index 0000000..14e28b2
--- /dev/null
+++ b/SD-VBS/common/c/sdvbs_common.h
@@ -0,0 +1,139 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#ifndef _SDVBS_COMMON_
6#define _SDVBS_COMMON_
7
8#include <stdio.h>
9#include <stdlib.h>
10#include <math.h>
11
12typedef struct
13{
14 int width;
15 int height;
16 int data[];
17}I2D;
18
19typedef struct
20{
21 int width;
22 int height;
23 unsigned int data[];
24}UI2D;
25
26typedef struct
27{
28 int width;
29 int height;
30 float data[];
31}F2D;
32
33#define subsref(a,i,j) a->data[(i) * a->width + (j)]
34#define asubsref(a,i) a->data[i]
35#define arrayref(a,i) a[i]
36
37/** Image read and write **/
38I2D* readImage(const char* pathName);;
39F2D* readFile(unsigned char* fileName);
40
41
42/** Memory allocation functions **/
43I2D* iMallocHandle(int rows, int cols);
44F2D* fMallocHandle(int rows, int cols);
45F2D* fResetHandle(F2D* out, int rows, int cols);
46UI2D* uiMallocHandle(int rows, int cols);
47
48void iFreeHandle(I2D* out);
49void fFreeHandle(F2D* out);
50void uiFreeHandle(UI2D* out);
51
52/** Memory copy/set function **/
53I2D* iSetArray(int rows, int cols, int val);
54void iResetArray(I2D* out, int rows, int cols, int val);
55F2D* fSetArray(int rows, int cols, float val);
56void fResetArray(F2D* out, int rows, int cols, float val);
57I2D* iDeepCopy(I2D* in);
58F2D* fDeepCopy(F2D* in);
59F2D* fCopy(F2D* in, F2D* out);
60I2D* iDeepCopyRange(I2D* in, int startRow, int numberRows, int startCol, int numberCols);
61F2D* fDeepCopyRange(F2D* in, int startRow, int numberRows, int startCol, int numberCols);
62F2D* fiDeepCopy(I2D* in);
63void fiCopy(F2D* out, I2D* in);
64I2D* ifDeepCopy(F2D* in);
65
66
67/** Matrix operations - concatenation, reshape **/
68F2D* ffVertcat(F2D* matrix1, F2D* matrix2);
69I2D* iVertcat(I2D* matrix1, I2D* matrix2);
70F2D* fHorzcat(F2D* a, F2D* b);
71I2D* iHorzcat(I2D* a, I2D* b);
72F2D* horzcat(F2D* a, F2D* b, F2D* c);
73F2D* fTranspose(F2D* a);
74I2D* iTranspose(I2D* a);
75F2D* fReshape(F2D* in, int rows, int cols);
76I2D* iReshape(I2D* in, int rows, int cols);
77
78
79/** Binary Operations **/
80F2D* fDivide(F2D* a, float b);
81F2D* fMdivide(F2D* a, F2D* b);
82F2D* ffDivide(F2D* a, F2D* b);
83F2D* ffTimes(F2D* a, float b);
84F2D* fTimes(F2D* a, F2D* b);
85I2D* iTimes(I2D* a, I2D* b);
86F2D* fMtimes(F2D* a, F2D* b);
87F2D* ifMtimes(I2D* a, F2D* b);
88F2D* fMinus(F2D* a, F2D* b);
89I2D* iMinus(I2D* a, I2D* b);
90I2D* isMinus(I2D* a, int b);
91F2D* fPlus(F2D* a, F2D* b);
92I2D* isPlus(I2D* a, int b);
93
94
95/** Filtering operations **/
96F2D* calcSobel_dX(F2D* imageIn);
97F2D* calcSobel_dY(F2D* imageIn);
98F2D* ffConv2(F2D* a, F2D* b);
99F2D* fiConv2(I2D* a, F2D* b);
100F2D* ffConv2_dY(F2D* a, F2D* b);
101F2D* ffiConv2(F2D* a, I2D* b);
102I2D* iiConv2(I2D* a, I2D* b);
103
104
105/** Image Transformations - resize, integration etc **/
106F2D* imageResize(F2D* imageIn);
107F2D* imageBlur(I2D* imageIn);
108F2D* imageReblur(I2D* imageIn, F2D* imageOut, F2D* tempOut, I2D* kernel);
109
110
111/** Support functions **/
112F2D* fFind3(F2D* in);
113F2D* fSum2(F2D* inMat, int dir);
114F2D* fSum(F2D* inMat);
115I2D* iSort(I2D* in, int dim);
116F2D* fSort(F2D* in, int dim);
117I2D* iSortIndices(I2D* in, int dim);
118I2D* fSortIndices(F2D* input, int dim);
119I2D* fResortIndices(F2D* input, int dim, F2D* in, I2D* ind);
120F2D* randnWrapper(int m, int n);
121F2D* randWrapper(int m, int n);
122
123
124/** Checking functions **/
125int selfCheck(I2D* in1, char* path, int tol);
126int fSelfCheck(F2D* in1, char* path, float tol);
127void writeMatrix(I2D* input, char* inpath);
128void fWriteMatrix(F2D* input, char* inpath);
129int iCheck(I2D* in1, I2D* in2);
130
131/** Timing functions **/
132unsigned int* photonEndTiming();
133unsigned int* photonStartTiming();
134unsigned int* photonReportTiming(unsigned int* startCycles,unsigned int* endCycles);
135void photonPrintTiming(unsigned int * elapsed);
136
137
138#endif
139
diff --git a/SD-VBS/common/c/selfCheck.c b/SD-VBS/common/c/selfCheck.c
new file mode 100644
index 0000000..e79a6a4
--- /dev/null
+++ b/SD-VBS/common/c/selfCheck.c
@@ -0,0 +1,65 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include <math.h>
8#include "sdvbs_common.h"
9
10int selfCheck(I2D* in1, char* path, int tol)
11{
12 int r1, c1, ret=1;
13 FILE* fd;
14 int count=0, *buffer, i, j;
15 char file[100];
16 int* data = in1->data;
17
18 r1 = in1->height;
19 c1 = in1->width;
20
21 buffer = (int*)malloc(sizeof(int)*r1*c1);
22
23 sprintf(file, "%s", path);
24 fd = fopen(file, "r");
25 if(fd == NULL)
26 {
27 printf("Error: Expected file not opened \n");
28 return -1;
29 }
30
31 while(!feof(fd))
32 {
33 fscanf(fd, "%d", &buffer[count]);
34 count++;
35 }
36 count--;
37
38 if(count < (r1*c1))
39 {
40 printf("Checking error: dimensions mismatch. Expected = %d, Observed = %d \n", count, (r1*c1));
41 return -1;
42 }
43
44 for(i=0; i<r1*c1; i++)
45 {
46 if((abs(data[i])-abs(buffer[i]))>tol || (abs(buffer[i])-abs(data[i]))>tol)
47 {
48 printf("Checking error: Values mismtach at %d element\n", i);
49 printf("Expected value = %d, observed = %d\n", buffer[i], data[i] );
50 return -1;
51 }
52 }
53
54 fclose(fd);
55 free(buffer);
56 printf("Verification\t\t- Successful\n");
57 return ret;
58}
59
60
61
62
63
64
65
diff --git a/SD-VBS/common/c/timingUtils.h b/SD-VBS/common/c/timingUtils.h
new file mode 100644
index 0000000..818728f
--- /dev/null
+++ b/SD-VBS/common/c/timingUtils.h
@@ -0,0 +1,99 @@
1#ifdef GCC
2#define magic_timing_begin(cycleLo, cycleHi) {\
3 asm volatile( "rdtsc": "=a" (cycleLo), "=d" (cycleHi)); \
4}\
5
6#define magic_timing_end(cycleLo, cycleHi) {\
7 unsigned tempCycleLo, tempCycleHi; \
8 asm volatile( "rdtsc": "=a" (tempCycleLo), "=d" (tempCycleHi)); \
9 cycleLo = tempCycleLo-cycleLo;\
10 cycleHi = tempCycleHi - cycleHi;\
11}\
12
13
14
15#define magic_timing_report(cycleLo, cycleHi) {\
16 printf("Timing report: %d %d\n", cycleLo, cycleHi); \
17}\
18
19
20
21
22#endif
23
24#ifdef METRO
25
26#define magic_timing_begin(cycleLo, cycleHi) {\
27 asm volatile( "mfsr $8, CYCLE_LO\n\t" \
28 "mfsr $9, CYCLE_HI\n\t" \
29 "addu %0, $8, $0\n\t" \
30 "addu %1, $9, $0\n\t" \
31 :"=r" (cycleLo), "=r" (cycleHi) \
32 : \
33 :"$8", "$9"\
34 );\
35}
36
37#define magic_timing_end(cycleLo, cycleHi) {\
38 asm volatile( \
39 "mfsr $8, CYCLE_LO\n\t" \
40 "mfsr $9, CYCLE_HI\n\t" \
41 "subu %0, $8, %0\n\t" \
42 "subu %1, $9, %1\n\t" \
43 :"=r" (cycleLo), "=r" (cycleHi) \
44 : \
45 :"$8", "$9"\
46 ); \
47}
48
49#define magic_timing_report(cycleLo, cycleHi) {\
50 asm volatile( "addu $8, %0, $0\n\t" \
51 "mtsr PASS $8\n\t" \
52 "mtsr PASS $9\n\t" \
53 : \
54 :"r" (cycleLo), "r" (cycleHi) \
55 : "$8", "$9" \
56 );\
57}
58
59//#define metro_magic_timing_report(cycleLo, cycleHi) {\
60// asm volatile( "nop\n\t");\
61//}
62
63#endif
64
65#ifdef BTL
66
67#include "/u/kvs/raw/rawlib/archlib/include/raw.h"
68
69#define magic_timing_begin(cycleLo, cycleHi) {\
70 raw_magic_timing_report_begin();\
71}
72
73#define magic_timing_end(cycleLo, cycleHi) {\
74 raw_magic_timing_report_end(); \
75}
76
77#define magic_timing_report(cycleLo, cycleHi) {\
78 raw_magic_timing_report_print(); \
79}
80
81
82//
83//void metro_magic_timing_begin(int cycleLo, int cycleHi)
84//{
85// raw_magic_timing_report_begin();
86//}
87//
88//void metro_magic_timing_end(int cycleLo, int cycleHi)
89//{
90// raw_magic_timing_report_end();
91//}
92//
93//void metro_magic_timing_report(int cycleLo, int cycleHi)
94//{
95// raw_magic_timing_report_print();
96// return;
97//}
98
99#endif
diff --git a/SD-VBS/common/c/uiFreeHandle.c b/SD-VBS/common/c/uiFreeHandle.c
new file mode 100644
index 0000000..ce64ad9
--- /dev/null
+++ b/SD-VBS/common/c/uiFreeHandle.c
@@ -0,0 +1,15 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9void uiFreeHandle(UI2D* out)
10{
11 free(out);
12
13 return;
14}
15
diff --git a/SD-VBS/common/c/uiMallocHandle.c b/SD-VBS/common/c/uiMallocHandle.c
new file mode 100644
index 0000000..ee26d4c
--- /dev/null
+++ b/SD-VBS/common/c/uiMallocHandle.c
@@ -0,0 +1,20 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9UI2D* uiMallocHandle(int rows, int cols)
10{
11 int i, j;
12 UI2D* out;
13
14 out = malloc(sizeof(UI2D) + sizeof(unsigned int)*rows*cols);
15 out->height = rows;
16 out->width = cols;
17 printf("uimalloc here\n");
18 return out;
19}
20
diff --git a/SD-VBS/common/c/uiResetArray.c b/SD-VBS/common/c/uiResetArray.c
new file mode 100644
index 0000000..249e570
--- /dev/null
+++ b/SD-VBS/common/c/uiResetArray.c
@@ -0,0 +1,19 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9void uiResetArray(UI2D* out, int rows, int cols, int val)
10{
11 int i, j;
12
13
14 for(i=0; i<rows; i++)
15 for(j=0; j<cols; j++)
16 subsref(out,i,j) = val;
17
18
19}
diff --git a/SD-VBS/common/c/uiSetArray.c b/SD-VBS/common/c/uiSetArray.c
new file mode 100644
index 0000000..871a84a
--- /dev/null
+++ b/SD-VBS/common/c/uiSetArray.c
@@ -0,0 +1,21 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9UI2D* uiSetArray(int rows, int cols, int val)
10{
11 int i, j;
12 UI2D *out;
13 out = uiMallocHandle(rows, cols);
14
15 for(i=0; i<rows; i++)
16 for(j=0; j<cols; j++)
17 subsref(out,i,j) = val;
18
19 return out;
20
21}
diff --git a/SD-VBS/common/c/writeMatrix.c b/SD-VBS/common/c/writeMatrix.c
new file mode 100644
index 0000000..a457734
--- /dev/null
+++ b/SD-VBS/common/c/writeMatrix.c
@@ -0,0 +1,34 @@
1/********************************
2Author: Sravanthi Kota Venkata
3********************************/
4
5#include <stdio.h>
6#include <stdlib.h>
7#include "sdvbs_common.h"
8
9void writeMatrix(I2D* input, char* inpath)
10{
11 FILE* fp;
12 char im[100];
13 int rows,cols, i, j;
14
15 sprintf(im, "%s/expected_C.txt", inpath);
16 fp = fopen(im, "w");
17
18 rows = input->height;
19 cols = input->width;
20
21 for(i=0; i<rows; i++)
22 {
23 for(j=0; j<cols; j++)
24 {
25 fprintf(fp, "%d\t", subsref(input, i, j));
26 }
27 fprintf(fp, "\n");
28 }
29
30 fclose(fp);
31}
32
33
34
diff --git a/SD-VBS/common/makefiles/Makefile.common b/SD-VBS/common/makefiles/Makefile.common
new file mode 100644
index 0000000..144adb2
--- /dev/null
+++ b/SD-VBS/common/makefiles/Makefile.common
@@ -0,0 +1,134 @@
1#################################
2# Author: Sravanthi Kota Venkata
3#################################
4SHELL := /bin/bash
5
6# Define MATLAB-PATH with the path to the MATLAB package
7MATLAB_PATH = /pkg/bin/matlab
8ifeq ($(filter matlab-run,$(MAKECMDGOALS)),matlab-run)
9ifneq ($(wildcard $(MATLAB_PATH)),$(MATLAB_PATH))
10$(error Please set the appropriate MATLAB path in MATLAB_PATH variable)
11endif
12endif
13
14ifeq ($(filter mcc-run,$(MAKECMDGOALS)),mcc-run)
15ifneq ($(wildcard $(MATLAB_PATH)),$(MATLAB_PATH))
16$(error Please set the appropriate MATLAB path in MATLAB_PATH variable)
17endif
18endif
19
20CC=gcc
21override CFLAGS += -DGCC -D$(INPUT) -pthread -DCHECK
22COMMON_DIR := $(TOP_DIR)/common/c
23M_COMMON := $(TOP_DIR)/common/matlab
24M_TOOLBOX=$(TOP_DIR)/common/toolbox
25TIMING_DIR := $(TOP_DIR)/cycles/$(BMARK)
26TIMES_DIR := $(TOP_DIR)/times/$(BMARK)
27PRELOAD_TIMES_DIR := $(TOP_DIR)/preload-times/$(BMARK)
28MTIMING_DIR := $(TOP_DIR)/cycles/$(BMARK)
29BMARK_DIR := $(TOP_DIR)/benchmarks/$(BMARK)
30TOOL_DIR := $(TOP_DIR)/tools
31LIBLITMUS := /home/litmus/liblitmus
32#The options set below and specific to each benchmark. Disparity takes 2 input images, whereas Tracking can take any >1 input images =.
33
34# Variables exported from the benchmark specific Makefiles:
35# BMARK
36# INPUT - sqcif/qcif/cif
37
38# Matlab source, data and result directory
39
40M_DIR=$(BMARK_DIR)/src/matlab
41M_DATA=$(BMARK_DIR)/data/$(INPUT)
42M_RESULT=$(BMARK_DIR)/result
43
44# C source, data and result directory
45
46C_DIR=$(BMARK_DIR)/src/c
47DATA_DIR=$(BMARK_DIR)/data/$(INPUT)
48C_RESULT=$(M_RESULT)
49
50# Source files for C and Common folders
51
52C_SRC := $(wildcard $(C_DIR)/*.c)
53COMMON_SRC := $(wildcard $(COMMON_DIR)/*.c)
54
55# RULES
56
57EXE =
58INCLUDES = -I$(COMMON_DIR) -I$(C_DIR) -I${LIBLITMUS}/include -I${LIBLITMUS}/arch/arm/include
59COMPILE_C = $(CC) $(CFLAGS) $(INCLUDES) -O2
60#COMPILE_C = $(CC) $(CFLAGS) -DGENERATE_OUTPUT -lm -O2 $(INCLUDES)
61COMPILE_G = $(CC) $(CFLAGS) -g -lm $(INCLUDES)
62COMPILE_PG = $(COMPILE_G) -pg
63
64preload-run: compile
65 @echo preloaded timing
66 @echo 3 | tee /proc/sys/vm/drop_caches
67 @find ./ -iname "*.bmp" -exec sh -c '$(TOOL_DIR)/preload {} &' \;
68 @find ./ -iname "*.txt" -exec sh -c '$(TOOL_DIR)/preload {} &' \;
69 mkdir -p $(PRELOAD_TIMES_DIR)
70 @echo -e "Data set\t\t- $(INPUT)"
71 (time ./$(BMARK)$(EXE) $(DATA_DIR)) |& tee $(PRELOAD_TIMES_DIR)/T_$(INPUT).txt
72 @kill -2 `pgrep preload`
73
74time-run: compile
75 mkdir -p $(TIMES_DIR)
76 @echo -e "Data set\t\t- $(INPUT)"
77 @echo 3 | tee /proc/sys/vm/drop_caches
78 (time ./$(BMARK)$(EXE) $(DATA_DIR)) |& tee $(TIMES_DIR)/T_$(INPUT).txt
79
80c-run: compile
81 @echo -e "Data set\t\t- $(INPUT)"
82 mkdir -p $(TIMING_DIR)
83 @./$(BMARK)$(EXE) $(DATA_DIR) $(C_RESULT) | tee $(TIMING_DIR)/C_$(INPUT).txt
84
85run: compile
86 @echo -e "Data set\t\t- $(INPUT)"
87 @./$(BMARK)$(EXE) $(DATA_DIR) $(C_RESULT)
88
89rt-run: compile
90 @echo -e "Data set\t\t- $(INPUT)"
91 @./$(BMARK)$(EXE) $(BMARK)-$(INPUT) 5 0 12345 1
92
93debug:
94 @echo Running Debug C Version of the benchmark
95 @$(COMPILE_G) $(COMMON_SRC) $(C_SRC) -o $(BMARK)$(EXE)
96 @valgrind --leak-check=full ./$(BMARK)$(EXE) $(DATA_DIR) $(C_RESULT)
97 #@gdb ./$(BMARK)$(EXE) $(DATA_DIR) $(C_RESULT)
98
99profile: compile-prof
100 @echo -e "Data set\t\t- $(INPUT)"
101 @./$(BMARK)$(EXE) $(DATA_DIR) $(C_RESULT)
102 @gprof $(BMARK)$(EXE)
103
104compile-preload:
105 @$(COMPILE_C) $(TOOL_DIR)\preload.c -o $(TOOL_DIR)\preload
106
107compile: $(C_SRC)
108 @echo
109 @echo -e "Benchmark\t\t- $(BMARK)"
110 @$(COMPILE_C) $(COMMON_SRC) $(C_SRC) -lrt -L$(LIBLITMUS) -llitmus -lm -w -o $(BMARK)$(EXE)
111
112compile-prof: $(C_SRC)
113 @echo
114 @echo -e "Benchmark\t\t- $(BMARK)"
115 @$(COMPILE_PG) $(COMMON_SRC) $(C_SRC) -o $(BMARK)$(EXE)
116
117matlab-run:
118 @echo
119 @echo -e "Benchmark\t\t- $(BMARK)"
120 @echo -e "Data set\t\t- $(INPUT)"
121 @cd $(M_DIR); $(MATLAB_PATH) -glnx86 -nosplash -nodisplay -r "script_run_profile('$(M_DATA)', '$(M_RESULT)', '$(INPUT)', '$(M_COMMON)', '$(M_TOOLBOX)'); quit" | tee $(MTIMING_DIR)/Matlab_$(INPUT).txt
122
123mcc-run:
124 @echo Generating a C standalone application
125 cd $(M_DIR); $(MATLAB_PATH) -nosplash -nodesktop -r "mcc -m -v script_run_profile -d $(M_RESULT); quit"
126
127all: c-run matlab-run mcc-run
128
129clean:
130 @-rm $(BMARK)
131
132
133
134
diff --git a/SD-VBS/common/makefiles/Makefile.include b/SD-VBS/common/makefiles/Makefile.include
new file mode 100644
index 0000000..f1000b9
--- /dev/null
+++ b/SD-VBS/common/makefiles/Makefile.include
@@ -0,0 +1,16 @@
1find-dir-with = $(shell /usr/bin/perl -e 'chomp($$_ = `pwd`); while ($$_ ne "" && ! -e "$$_/$(1)") { m:(.*)/[^/]+/??:; $$_ = $$1; } print;')
2
3# define canonical directories in starsearch
4ifndef TOP_DIR
5 export TOP_DIR := $(call find-dir-with,.SD-VBS)
6endif
7
8export MAKEFILE_COMMON_DIR=$(TOP_DIR)/common/makefiles
9
10# backward compatibility
11
12ifeq ($(TOP_DIR),)
13$(error file .SD-VBS not found -- try running 'gmake setup' at the top of your source tree)
14endif
15
16
diff --git a/SD-VBS/common/makefiles/Makefile.recurse b/SD-VBS/common/makefiles/Makefile.recurse
new file mode 100644
index 0000000..ed575bb
--- /dev/null
+++ b/SD-VBS/common/makefiles/Makefile.recurse
@@ -0,0 +1,41 @@
1# This file is included in the makefiles of the non-leaf nodes
2# Thus the various targets in this file have to trickle down
3# into the subdirectories
4# List the subdirectories and call the target for each one of them
5
6################################################################
7# RECURSE
8################################################################
9# Listing the subdirectories
10SUBDIRS = $(patsubst %/Makefile,%,$(wildcard */Makefile))
11
12RECURSE-DEPENDS = $(patsubst %,%.traverse,$(SUBDIRS))
13
14all: recurse
15
16debug: recurse
17
18clean: recurse
19
20compile: recurse
21
22c-run: recurse
23
24matlab-run: recurse
25
26mcc-run: recurse
27
28recurse: $(RECURSE-DEPENDS)
29
30time-run: recurse
31
32preload-run: recurse
33
34run: recurse
35
36rt-run: recurse
37
38# MAKECMDGOALS contains the gmake target specified on the command line
39# it is defined automatically by gmake
40%.traverse:
41 $(MAKE) -C $* $(MAKECMDGOALS)
diff --git a/SD-VBS/common/support/buildTable.py b/SD-VBS/common/support/buildTable.py
new file mode 100644
index 0000000..1a1a6aa
--- /dev/null
+++ b/SD-VBS/common/support/buildTable.py
@@ -0,0 +1,54 @@
1import re
2import sys
3import os
4
5def getExprName(fileName):
6 exprFileName = os.path.basename(fileName)
7 exprName = re.sub("\.txt", "", exprFileName)
8 exprName = re.sub("_","\t", exprName, 1)
9 exprName = re.sub("_", "", exprName)
10 return(exprName)
11
12def getBmrkName(fileName):
13 benchmarkDir = os.path.dirname(fileName)
14 benchmarkName = os.path.basename(benchmarkDir)
15 return(benchmarkName)
16
17def getCycleCountTup(fileName):
18 try:
19 inp = open(fileName, 'r')
20 except IOError, err:
21 print "ERROR: Could not open the inputFile:"+fileName
22 sys.exit(1)
23 globalTup = None
24 for currline in inp:
25 currline = currline.strip()
26 currline = currline.lower()
27 if(re.match("cycles elapsed", currline)):
28 valTup = re.findall("(\d+)", currline)
29 return(valTup)
30
31 if(globalTup != None):
32 return(globalTup)
33 else:
34 print "ERROR: INVALID INPUT FILE:"+fileName
35 sys.exit(2)
36
37def main():
38 if(len(sys.argv)<2):
39 print "USAGE: "+sys.argv[0]+" <inputFileName>"
40 sys.exit(1)
41
42 fileName = sys.argv[1]
43 exprName = getExprName(fileName)
44 benchmarkName = getBmrkName(fileName)
45 cycleCountTup = getCycleCountTup(fileName)
46
47 print "%-20s %-20s %10s\n" % (benchmarkName,exprName,cycleCountTup[0])
48
49
50
51
52
53if __name__=="__main__":
54 main()
diff --git a/SD-VBS/common/support/buildTimeTable.py b/SD-VBS/common/support/buildTimeTable.py
new file mode 100644
index 0000000..c718cb2
--- /dev/null
+++ b/SD-VBS/common/support/buildTimeTable.py
@@ -0,0 +1,55 @@
1import re
2import sys
3import os
4
5def getExprName(fileName):
6 exprFileName = os.path.basename(fileName)
7 exprName = re.sub("\.txt", "", exprFileName)
8 exprName = re.sub("_","\t", exprName, 1)
9 exprName = re.sub("_", "", exprName)
10 return(exprName)
11
12def getBmrkName(fileName):
13 benchmarkDir = os.path.dirname(fileName)
14 benchmarkName = os.path.basename(benchmarkDir)
15 return(benchmarkName)
16
17def getTimeTup(fileName):
18 try:
19 inp = open(fileName, 'r')
20 except IOError, err:
21 print "ERROR: Could not open the inputFile:"+fileName
22 sys.exit(1)
23 globalTup = None
24 for currline in inp:
25 currline = currline.strip()
26 currline = currline.lower()
27 if(re.match("real", currline)):
28 #valTup = re.findall("(\d+)", currline)
29
30 return(currline[4:].strip())
31
32 if(globalTup != None):
33 return(globalTup)
34 else:
35 print "ERROR: INVALID INPUT FILE:"+fileName
36 sys.exit(2)
37
38def main():
39 if(len(sys.argv)<2):
40 print "USAGE: "+sys.argv[0]+" <inputFileName>"
41 sys.exit(1)
42
43 fileName = sys.argv[1]
44 exprName = getExprName(fileName)
45 benchmarkName = getBmrkName(fileName)
46 timeTup = getTimeTup(fileName)
47
48 print "%-20s %-20s %10s\n" % (benchmarkName,exprName,timeTup)
49
50
51
52
53
54if __name__=="__main__":
55 main()
diff --git a/SD-VBS/common/toolbox/MultiNcut/MNcut.m b/SD-VBS/common/toolbox/MultiNcut/MNcut.m
new file mode 100755
index 0000000..5486080
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/MNcut.m
@@ -0,0 +1,93 @@
1function [NcutDiscretes,eigenVectors,eigenValues] = MNcut(I,nsegs);
2%
3% [NcutDiscrete,eigenVectors,eigenValues] = MNcut(I,nsegs);
4%
5%
6
7[nr,nc,nb] = size(I);
8
9max_image_size = max(nr,nc);
10
11% modified by song, 06/13/2005
12% test parameters
13if (1) % original settings
14 if (max_image_size>120) & (max_image_size<=500),
15 % use 3 levels,
16 data.layers.number=3;
17 data.layers.dist=3;
18 data.layers.weight=[3000,4000,10000];
19 data.W.scales=[1,2,3];%[1,2,3];
20 data.W.radius=[2,3,7];%[2,3,7];
21 elseif (max_image_size >500),
22 % use 4 levels,
23 data.layers.number=4;
24 data.layers.dist=3;
25 data.layers.weight=[3000,4000,10000,20000];
26 data.W.scales=[1,2,3,3];
27 data.W.radius=[2,3,4,6];
28 elseif (max_image_size <=120)
29 data.layers.number=2;
30 data.layers.dist=3;
31 data.layers.weight=[3000,10000];
32 data.W.scales=[1,2];
33 data.W.radius=[2,6];
34 end
35else % test setting
36 if (max_image_size>200) & (max_image_size<=500),
37 % use 3 levels,
38 data.layers.number=3;
39 data.layers.dist=3;
40 data.layers.weight=[3000,4000,10000];
41 data.W.scales=[1,2,3];%[1,2,3];
42 data.W.radius=[2,3,7];%[2,3,7];
43 elseif (max_image_size >500),
44 % use 4 levels,
45 data.layers.number=4;
46 data.layers.dist=3;
47 data.layers.weight=[3000,4000,10000,20000];
48 data.W.scales=[1,2,3,3];
49 data.W.radius=[2,3,4,6];
50 elseif (max_image_size <=200)
51 data.layers.number=2;
52 data.layers.dist=3;
53 data.layers.weight=[3000,10000];
54 data.W.scales=[1,2];
55 data.W.radius=[2,4];
56 end
57
58end;
59
60
61data.W.edgeVariance=0.1; %0.1
62data.W.gridtype='square';
63data.W.sigmaI=0.12;%0.12
64data.W.sigmaX=1000;
65data.W.mode='mixed';
66data.W.p=0;
67data.W.q=0;
68
69%eigensolver
70data.dataGraphCut.offset = 100;% 10; %valeur sur diagonale de W (mieux vaut 10 pour valeurs negatives de W)
71data.dataGraphCut.maxiterations=50;% voir
72data.dataGraphCut.eigsErrorTolerance=1e-2;%1e-6;
73data.dataGraphCut.valeurMin=1e-6;%1e-5;% utilise pour tronquer des valeurs et sparsifier des matrices
74data.dataGraphCut.verbose = 0;
75
76data.dataGraphCut.nbEigenValues=max(nsegs);
77
78disp('computeEdge');
79[multiWpp,ConstraintMat, Wind,data,emag,ephase]= computeMultiW (I,data);
80
81disp('Ncut');
82[eigenVectors,eigenValues]= eigSolve (multiWpp,ConstraintMat,data);
83
84%NcutDiscretes = zeros(nr,nc,length(nsegs));
85NcutDiscretes = zeros(nr,nc,(nsegs));
86
87for j=1:length(nsegs),
88 nseg = nsegs(j);
89 [nr,nc,nb] = size(eigenVectors(:,:,1:nseg));
90 [NcutDiscrete,evrotated] =discretisation(reshape(eigenVectors(:,:,1:nb),nr*nc,nb),nr,nc);
91 NcutDiscretes(:,:,j) = NcutDiscrete;
92end
93
diff --git a/SD-VBS/common/toolbox/MultiNcut/MNcutDemo.m b/SD-VBS/common/toolbox/MultiNcut/MNcutDemo.m
new file mode 100755
index 0000000..972a4eb
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/MNcutDemo.m
@@ -0,0 +1,34 @@
1% MNcutDemo.m
2% created by song, 06/13/2005
3% an exmaple of how to use and display MNcut
4
5num_segs = [20];
6imageSize = 800;
7
8img_filename = '/u/ikkjin/Benchmark/stitch/data/test/capitol/img1.jpg';
9
10I=readimage(img_filename,imageSize);
11
12[SegLabel,eigenVectors,eigenValues]= MNcut(I,num_segs);
13
14for j=1:size(SegLabel,3),
15 [gx,gy] = gradient(SegLabel(:,:,j));
16 bw = (abs(gx)>0.1) + (abs(gy) > 0.1);
17
18 figure(1);clf; J1=showmask(double(I),bw); imagesc(J1);axis image; axis off;
19 set(gca, 'Position', [0 0 1 1]);
20
21 % cm = sprintf('print -djpeg %s/file%.4d-%.2d.jpg',OutputDir,id,num_segs(j)); disp(cm);eval(cm);
22
23
24 % figure(10);imagesc(SegLabel(:,:,j));axis image; axis off;
25 % set(gca, 'Position', [0 0 1 1]);
26 % cm = sprintf('print -djpeg %s/Seg%.4d-%.2d.jpg',OutputDir,id,num_segs(j));disp(cm);eval(cm);
27
28 % pause;
29end
30
31% fname = files(id).name;
32%cm = sprintf('save %s/SegLabl%.4d.mat I SegLabel fname',OutputDir,id); disp(cm); eval(cm);
33%cm = sprintf('save %s/SegEig%.4d.mat eigenVectors eigenValues',OutputDir,id);disp(cm); eval(cm);
34
diff --git a/SD-VBS/common/toolbox/MultiNcut/README.tex b/SD-VBS/common/toolbox/MultiNcut/README.tex
new file mode 100755
index 0000000..5970fb2
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/README.tex
@@ -0,0 +1,9 @@
11) You need to first compile the .c files,type
2
3>> compileAll('.');
4
52) the top level function is called MNcut.m
6
7
8
9
diff --git a/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.c b/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.c
new file mode 100755
index 0000000..25def92
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.c
@@ -0,0 +1,405 @@
1/*================================================================
2a_times_b_cmplx.c = used by a couple of mex functions
3provide Matrix vector multiplications,
4and solve triangular systems
5(sparse matrix and full vector)
6
7CSC_CmplxVecMult_CAB_double, CSR_CmplxVecMult_CAB_double,
8CSCsymm_CmplxVecMult_CAB_double added by Mirko Visontai (10/24/2003)
9
10*=================================================================*/
11# include "math.h"
12
13
14/*C<-a*A*B+C*/
15void CSC_VecMult_CaABC_double(
16 const int m, const int k, const double alpha,
17 const double *val, const int *indx,
18 const int *pntrb,
19 const double *b,
20 double *c)
21{
22 int i,j,jb,je;
23
24 for (i=0;i!=k;i++){
25 jb = pntrb[i];
26 je = pntrb[i+1];
27 for (j=jb;j!=je;j++)
28 c[indx[j]] += alpha * b[i] * val[j];
29 }
30}
31
32/*C<-a*A'*B+C*/
33void CSR_VecMult_CaABC_double(
34 const int k, const int m, const double alpha,
35 const double *val, const int *indx,
36 const int *pntrb,
37 const double *b,
38 double *c)
39{
40 double t;
41 const double *pval;
42 int i,j,jb,je;
43
44 pval = val;
45 for (i=0;i!=m;i++) {
46 t = 0;
47 jb = pntrb[i];
48 je = pntrb[i+1];
49 for (j=jb;j!=je;j++)
50 t += alpha * b[indx[j]] * (*pval++);
51 c[i] += t;
52 }
53}
54
55
56/*C<-A*b */
57void CSC_VecMult_CAB_double(
58 const int m, const int k, /*nb_rows, nb_columns*/
59 const double *val, const int *indx,
60 const int *pntrb,
61 const double *b,
62 double *c
63 )
64{
65 int i,j,jb,je;
66 double *pc=c;
67 for (i=0;i!=m;i++) *pc++ = 0;
68
69 for (i=0;i!=k;i++){
70 jb = pntrb[i];
71 je = pntrb[i+1];
72 for (j=jb;j!=je;j++)
73 c[indx[j]] += b[i] * val[j];
74 }
75}
76
77/*C<-A*b (complex)*/
78void CSC_CmplxVecMult_CAB_double(
79 const int m, const int k,
80 const double *valr, const double *vali,
81 const int *indx,
82 const int *pntrb,
83 const double *br, const double *bi,
84 double *cr, double *ci
85 )
86{
87 int i,j,jb,je;
88 double *pcr=cr;
89 double *pci=ci;
90 for (i=0;i!=m;i++){
91 *pcr++ = 0.0;
92 *pci++ = 0.0;
93 }
94
95 for (i=0;i!=k;i++){
96 jb = pntrb[i];
97 je = pntrb[i+1];
98 for (j=jb;j!=je;j++){
99 cr[indx[j]] += (br[i] * valr[j]) - (bi[i] * vali[j]);
100 ci[indx[j]] += (br[i] * vali[j]) + (bi[i] * valr[j]);
101 }
102 }
103}
104
105/*C<-A'*b
106 plus rapide que CSC_VecMult_CAB_double */
107void CSR_VecMult_CAB_double(
108 const int k, const int m,
109 const double *val, const int *indx,
110 const int *pntrb,
111 const double *b,
112 double *c
113 )
114{
115 double t;
116 const double *pval;
117 double *pc=c;
118 int i,j,jb,je;
119
120 for (i=0;i!=m;i++) *pc++ = 0;
121
122 pval = val;
123 for (i=0;i!=m;i++) {
124 t = 0;
125 jb = pntrb[i];
126 je = pntrb[i+1];
127 for (j=jb;j!=je;j++)
128 t += b[indx[j]] * (*pval++);
129 c[i] += t;
130 }
131}
132
133/*C<-A'*b (complex)
134 plus rapide que CSC_VecMult_CAB_double */
135void CSR_CmplxVecMult_CAB_double(
136 const int k, const int m,
137 const double *valr, const double *vali,
138 const int *indx,
139 const int *pntrb,
140 const double *br, const double *bi,
141 double *cr, double *ci
142 )
143{
144 double tr, ti;
145 const double *pvalr;
146 const double *pvali;
147 double *pcr=cr;
148 double *pci=ci;
149 int i,j,jb,je;
150
151 for (i=0;i!=m;i++){
152 *pcr++ = 0.0;
153 *pci++ = 0.0;
154 }
155
156 pvalr = valr;
157 pvali = vali;
158 for (i=0;i!=m;i++) {
159 tr = 0.0;
160 ti = 0.0;
161 jb = pntrb[i];
162 je = pntrb[i+1];
163 for (j=jb;j!=je;j++){
164 tr += (br[indx[j]] * (*pvalr)) - (bi[indx[j]] * (*pvali));
165 ti += (br[indx[j]] * (*pvali++)) + (bi[indx[j]] * (*pvalr++));
166 }
167 cr[i] += tr;
168 ci[i] += ti;
169 }
170}
171
172
173
174/* C<-A*b (A is symmetric) */
175void CSRsymm_VecMult_CAB_double(
176 const int k, const int m,
177 const double *val, const int *indx,
178 const int *pntrb,
179 const double *b,
180 double *c
181 )
182{
183 const double *pval;
184 double *pc=c;
185 int i,j;
186 int jj;
187 int rpntrb, rpntre;
188 int index, nvals;
189
190
191 for (i=0;i!=m;i++) *pc++ = 0;
192 pval = val;
193 for (j=0;j!=k;j++){
194 rpntrb = pntrb[j];
195 rpntre = pntrb[j+1];
196 for (jj=rpntrb;jj!=rpntre;jj++) {
197 index = indx[jj];
198 if ( index == j ) {
199 c[j] += b[j] * (*pval++);
200 continue;
201 }
202 if ( index > j ) {
203 c[index] += b[j] * (*pval);
204
205 c[j] += b[index] * (*pval++);
206 }
207 else {
208 pval++;
209 }
210 }
211 }
212}
213
214
215/* C<-A*b (A is symmetric and complex) */
216void CSRsymm_CmplxVecMult_CAB_double(
217 const int k, const int m,
218 const double *valr, const double *vali,
219 const int *indx,
220 const int *pntrb,
221 const double *br, const double *bi,
222 double *cr, double *ci
223 )
224{
225 const double *pvalr, *pvali;
226 double *pcr=cr;
227 double *pci=ci;
228 int i,j;
229 int jj;
230 int rpntrb, rpntre;
231 int index, nvals;
232
233
234 for (i=0;i!=m;i++){
235 *pcr++ = 0.0;
236 *pci++ = 0.0;
237 }
238
239 pvalr = valr;
240 pvali = vali;
241 for (j=0;j!=k;j++){
242 rpntrb = pntrb[j];
243 rpntre = pntrb[j+1];
244 for (jj=rpntrb;jj!=rpntre;jj++) {
245 index = indx[jj];
246 if ( index == j ) {
247 cr[j] += (br[j] * (*pvalr)) - (bi[j] * (*pvali));
248 ci[j] += (br[j] * (*pvali++)) + (bi[j] * (*pvalr++));
249 continue;
250 }
251 if ( index > j ) {
252 cr[index] += (br[j] * (*pvalr)) - (bi[j] * (*pvali));
253 ci[index] += (br[j] * (*pvali)) + (bi[j] * (*pvalr));
254
255 cr[j] += (br[index] * (*pvalr)) - (bi[index] * (*pvali));
256 ci[j] += (br[index] * (*pvali++)) + (bi[index] * (*pvalr++));
257 }
258 else {
259 pvalr++;
260 pvali++;
261 }
262
263 }
264 }
265}
266
267
268/*C<-A\B; with Lower triangular A*/
269void CSC_VecTriangSlvLD_CAB_double(
270 const int m,
271 const double *val,
272 const int *indx, const int *pntrb,
273 const double *b,
274 double *c)
275{
276 int i, j, jb, je;
277 double *pc=c;
278 double z;
279
280 for (i=0;i!=m;i++){
281 *pc = b[i];
282 pc++;
283 }
284
285 pc=c;
286 for (i=0;i!=m;i++) {
287 jb = pntrb[i];
288 je = pntrb[i+1];
289 z = pc[i] / val[jb];
290 pc[i] = z;
291 for (j=jb+1;j<je;j++) {
292 c[indx[j]] -= z*val[j];
293 }
294 }
295}
296
297/*C<-A\B; with Upper triangular A*/
298void CSC_VecTriangSlvUD_CAB_double(
299 const int m,
300 const double *val,
301 const int *indx, const int *pntrb,
302 const double *b,
303 double *c)
304{
305 int i, j, jb, je, index;
306 double *pc=c;
307 double z;
308
309 for (i=0;i!=m;i++){
310 *pc = b[i];
311 pc++;
312 }
313
314 pc=c;
315 for (i=m-1;i!=-1;i--) {
316 jb = pntrb[i];
317 je = pntrb[i+1]-1;
318 z = pc[i] /val[je];
319 pc[i] = z;
320 for (j=jb;j<je;j++) {
321 c[indx[j]] -= z * val[j];
322 }
323 }
324}
325/*C<-A'\B; where A is upper (little slower than CSC)*/
326void CSR_VecTriangSlvLD_CAB_double(
327 const int m,
328 const double *val,
329 const int *indx, const int *pntrb,
330 const double *b,
331 double *c)
332{
333 int i, j, jb, je, index;
334 double *pc=c;
335 double z;
336 double valtmp;
337
338 pc=c;
339 for (i=0;i!=m;i++) {
340 z = 0;
341 jb = pntrb[i];
342 je = pntrb[i+1];
343 for (j=jb;j<je;j++) {
344 index = indx[j];
345 if ( index == i ) {
346 valtmp = val[j];
347 } else {
348 z += c[index] * val[j];
349 }
350 }
351 pc[i] = (b[i] - z) / valtmp;
352 }
353}
354
355/*C<-A'\B; where A is lower (little slower than CSC)*/
356void CSR_VecTriangSlvUD_CAB_double(
357 const int m,
358 const double *val,
359 const int *indx, const int *pntrb,
360 const double *b,
361 double *c)
362{
363 int i, j, jb, je, index;
364 double *pc=c;
365 double valtmp;
366 double z;
367
368 pc=c;
369 for (i=m-1;i!=-1; i--) {
370 z = 0;
371 jb = pntrb[i];
372 je = pntrb[i+1];
373 for (j=jb+1; j<je; j++) {
374 z += c[indx[j]] * val[j];
375 }
376 pc[i] = (b[i] - z) / val[jb];
377 }
378}
379
380/*C<-A*B, where A is (m,k) and B is (k,n)*/
381void CSC_MatMult_CAB_double(
382 const int m, const int n, const int k,
383 const double *val, const int *indx,
384 const int *pntrb,
385 const double *b, const int ldb,
386 double *c, const int ldc)
387{
388 int i,j,jb,je;
389 double *pc=c;
390 int l;
391
392 for (l=0;l!=n;l++)
393 for (i=0;i!=m;i++) *pc++ = 0;
394
395 for (l=0;l!=n;l++) {
396 for (i=0;i!=k;i++){
397 jb = pntrb[i];
398 je = pntrb[i+1];
399 for (j=jb;j!=je;j++)
400 c[indx[j]] += b[i] * val[j];
401 }
402 /*c += ldc; b += ldb; */
403 c += m; b += m;
404 }
405}
diff --git a/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.dll b/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.dll
new file mode 100755
index 0000000..5656f92
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.dll
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.mexa64 b/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.mexa64
new file mode 100755
index 0000000..1ab8e8c
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.mexglx b/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.mexglx
new file mode 100755
index 0000000..4138128
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.mexmac b/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.mexmac
new file mode 100755
index 0000000..65232e8
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/a_times_b_cmplx.mexmac
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/affinityic.c b/SD-VBS/common/toolbox/MultiNcut/affinityic.c
new file mode 100755
index 0000000..d78761b
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/affinityic.c
@@ -0,0 +1,187 @@
1/*================================================================
2* function w = affinityic(emag,ephase,pi,pj,sigma)
3* Input:
4* emag = edge strength at each pixel
5* ephase = edge phase at each pixel
6* [pi,pj] = index pair representation for MALTAB sparse matrices
7* sigma = sigma for IC energy
8* Output:
9* w = affinity with IC at [pi,pj]
10*
11
12% test sequence
13f = synimg(10);
14[i,j] = cimgnbmap(size(f),2);
15[ex,ey,egx,egy] = quadedgep(f);
16a = affinityic(ex,ey,egx,egy,i,j)
17show_dist_w(f,a);
18
19* Stella X. Yu, Nov 19, 2001.
20*=================================================================*/
21
22# include "mex.h"
23# include "math.h"
24
25void mexFunction(
26 int nargout,
27 mxArray *out[],
28 int nargin,
29 const mxArray *in[]
30)
31{
32 /* declare variables */
33 int nr, nc, np, total;
34 int i, j, k, ix, iy, jx, jy, ii, jj, iip1, jjp1, iip2, jjp2, step;
35 double sigma, di, dj, a, z, maxori, phase1, phase2, slope;
36 int *ir, *jc;
37 unsigned int *pi,*pj;
38 /* unsigned long *pi, *pj; */
39 double *emag, *ephase, *w;
40
41 /* check argument */
42 if (nargin<4) {
43 mexErrMsgTxt("Four input arguments required");
44 }
45 if (nargout>1) {
46 mexErrMsgTxt("Too many output arguments");
47 }
48
49 /* get edgel information */
50 nr = mxGetM(in[0]);
51 nc = mxGetN(in[0]);
52 if ( nr*nc ==0 || nr != mxGetM(in[1]) || nc != mxGetN(in[1]) ) {
53 mexErrMsgTxt("Edge magnitude and phase shall be of the same image size");
54 }
55 emag = mxGetPr(in[0]);
56 ephase = mxGetPr(in[1]);
57 np = nr * nc;
58
59 /* get new index pair */
60 if (!mxIsUint32(in[2]) | !mxIsUint32(in[3])) {
61 mexErrMsgTxt("Index pair shall be of type UINT32");
62 }
63 if (mxGetM(in[3]) * mxGetN(in[3]) != np + 1) {
64 mexErrMsgTxt("Wrong index representation");
65 }
66 pi = mxGetData(in[2]);
67 pj = mxGetData(in[3]);
68
69 /* create output */
70 out[0] = mxCreateSparse(np,np,pj[np],mxREAL);
71 if (out[0]==NULL) {
72 mexErrMsgTxt("Not enough memory for the output matrix");
73 }
74 w = mxGetPr(out[0]);
75 ir = mxGetIr(out[0]);
76 jc = mxGetJc(out[0]);
77
78 /* find my sigma */
79 if (nargin<5) {
80 sigma = 0;
81 for (k=0; k<np; k++) {
82 if (emag[k]>sigma) { sigma = emag[k]; }
83 }
84 sigma = sigma / 6;
85 /* printf("sigma = %6.5f",sigma); */
86 } else {
87 sigma = mxGetScalar(in[4]);
88 }
89 a = 0.5 / (sigma * sigma);
90
91 /* computation */
92 total = 0;
93 for (j=0; j<np; j++) {
94
95 jc[j] = total;
96 jx = j / nr; /* col */
97 jy = j % nr; /* row */
98
99 for (k=pj[j]; k<pj[j+1]; k++) {
100
101 i = pi[k];
102
103 if (i==j) {
104 maxori = 1;
105
106 } else {
107
108 ix = i / nr;
109 iy = i % nr;
110
111 /* scan */
112 di = (double) (iy - jy);
113 dj = (double) (ix - jx);
114
115 maxori = 0.;
116 phase1 = ephase[j];
117
118
119 /* sample in i direction */
120 if (abs(di) >= abs(dj)) {
121 slope = dj / di;
122 step = (iy>=jy) ? 1 : -1;
123
124 iip1 = jy;
125 jjp1 = jx;
126
127
128 for (ii=0;ii<abs(di);ii++){
129 iip2 = iip1 + step;
130 jjp2 = (int)(0.5 + slope*(iip2-jy) + jx);
131
132 phase2 = ephase[iip2+jjp2*nr];
133
134 if (phase1 != phase2) {
135 z = (emag[iip1+jjp1*nr] + emag[iip2+jjp2*nr]);
136 if (z > maxori){
137 maxori = z;
138 }
139 }
140
141 iip1 = iip2;
142 jjp1 = jjp2;
143 phase1 = phase2;
144 }
145
146 /* sample in j direction */
147 } else {
148 slope = di / dj;
149 step = (ix>=jx) ? 1: -1;
150
151 jjp1 = jx;
152 iip1 = jy;
153
154
155 for (jj=0;jj<abs(dj);jj++){
156 jjp2 = jjp1 + step;
157 iip2 = (int)(0.5+ slope*(jjp2-jx) + jy);
158
159 phase2 = ephase[iip2+jjp2*nr];
160
161 if (phase1 != phase2){
162 z = (emag[iip1+jjp1*nr] + emag[iip2+jjp2*nr]);
163 if (z > maxori){
164 maxori = z;
165 }
166
167 }
168
169 iip1 = iip2;
170 jjp1 = jjp2;
171 phase1 = phase2;
172 }
173 }
174
175 maxori = 0.5 * maxori;
176 maxori = exp(-maxori * maxori * a);
177 }
178 ir[total] = i;
179
180 w[total] = maxori;
181 total = total + 1;
182
183 } /* i */
184 } /* j */
185
186 jc[np] = total;
187}
diff --git a/SD-VBS/common/toolbox/MultiNcut/affinityic.dll b/SD-VBS/common/toolbox/MultiNcut/affinityic.dll
new file mode 100755
index 0000000..67e4d64
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/affinityic.dll
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/affinityic.mexa64 b/SD-VBS/common/toolbox/MultiNcut/affinityic.mexa64
new file mode 100755
index 0000000..2648387
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/affinityic.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/affinityic.mexglx b/SD-VBS/common/toolbox/MultiNcut/affinityic.mexglx
new file mode 100755
index 0000000..c296845
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/affinityic.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/batch_MNcut.m b/SD-VBS/common/toolbox/MultiNcut/batch_MNcut.m
new file mode 100755
index 0000000..d4dcb3c
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/batch_MNcut.m
@@ -0,0 +1,48 @@
1data_dir = '/data/insecure/qihuizhu/baseball/Gray/train/';
2save_dir = '/home/songgang/project/MultiNcut/batch_result_MNcut';
3
4num_segs = [20];
5imageSize = 200;
6
7
8filelist = dir(fullfile(data_dir, '*.tif'));
9
10nb_file = max(size(filelist));
11
12
13tic;
14for ii = 1:nb_file
15 fprintf(2, 'Segmenting image: %s ...\n', filelist(ii).name);
16
17 img_filename = fullfile(data_dir, filelist(ii).name);
18 I=readimage(img_filename,imageSize);
19
20
21 [SegLabel,eigenVectors,eigenValues]= MNcut(I,num_segs);
22
23 for j=1:size(SegLabel,3),
24 [gx,gy] = gradient(SegLabel(:,:,j));
25 bw = (abs(gx)>0.1) + (abs(gy) > 0.1);
26
27 figure(1);clf; J1=showmask(double(I),bw); imagesc(J1);axis image; axis off;
28 set(gca, 'Position', [0 0 1 1]);
29 set(gca, 'Position', [0 0 1 1]);
30 [PATHSTR,NAME,EXT,VERSN] = fileparts(filelist(ii).name);
31 print('-f1', '-djpeg90', fullfile(save_dir, sprintf('%s%s-%d.jpg', NAME,'-out', num_segs(j))));
32
33
34 % cm = sprintf('print -djpeg %s/file%.4d-%.2d.jpg',OutputDir,id,num_segs(j)); disp(cm);eval(cm);
35
36
37 % figure(10);imagesc(SegLabel(:,:,j));axis image; axis off;
38 % set(gca, 'Position', [0 0 1 1]);
39 % cm = sprintf('print -djpeg %s/Seg%.4d-%.2d.jpg',OutputDir,id,num_segs(j));disp(cm);eval(cm);
40
41% keyboard;
42 end
43
44
45
46end;
47toc;
48fprintf(2, ' %d files done\n', nb_file);
diff --git a/SD-VBS/common/toolbox/MultiNcut/cimgnbmap.c b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap.c
new file mode 100755
index 0000000..44af715
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap.c
@@ -0,0 +1,198 @@
1/*================================================================
2* function [i,j] = cimgnbmap([nr,nc], nb_r, sample_rate)
3* computes the neighbourhood index matrix of an image,
4* with each neighbourhood sampled.
5* Input:
6* [nr,nc] = image size
7* nb_r = neighbourhood radius, could be [r_i,r_j] for i,j
8* sample_rate = sampling rate, default = 1
9* Output:
10* [i,j] = each is a column vector, give indices of neighbour pairs
11* UINT32 type
12* i is of total length of valid elements, 0 for first row
13* j is of length nr * nc + 1
14*
15* See also: imgnbmap.c, id2cind.m
16*
17* Examples:
18* [i,j] = imgnbmap(10, 20); % [10,10] are assumed
19*
20* Stella X. Yu, Nov 12, 2001.
21
22% test sequence:
23nr = 15;
24nc = 15;
25nbr = 1;
26[i,j] = cimgnbmap([nr,nc], nbr);
27mask = csparse(i,j,ones(length(i),1),nr*nc);
28show_dist_w(rand(nr,nc),mask)
29
30*=================================================================*/
31
32# include "mex.h"
33# include "math.h"
34
35void mexFunction(
36 int nargout,
37 mxArray *out[],
38 int nargin,
39 const mxArray *in[]
40)
41{
42 /* declare variables */
43 int nr, nc, np, nb, total;
44 double *dim, sample_rate;
45 int r_i, r_j, a1, a2, b1, b2, self, neighbor;
46 int i, j, k, s, t, nsamp, th_rand, no_sample;
47 /* unsigned long *p, *qi, *qj; */
48 unsigned int *p, *qi, *qj;
49
50 /* check argument */
51 if (nargin < 2) {
52 mexErrMsgTxt("Two input arguments required");
53 }
54 if (nargout> 2) {
55 mexErrMsgTxt("Too many output arguments.");
56 }
57
58 /* get image size */
59 i = mxGetM(in[0]);
60 j = mxGetN(in[0]);
61 dim = mxGetData(in[0]);
62 nr = (int)dim[0];
63 if (j>1 || i>1) {
64 nc = (int)dim[1];
65 } else {
66 nc = nr;
67 }
68 np = nr * nc;
69
70 /* get neighbourhood size */
71 i = mxGetM(in[1]);
72 j = mxGetN(in[1]);
73 dim = mxGetData(in[1]);
74 r_i = (int)dim[0];
75 if (j>1 || i>1) {
76 r_j = (int)dim[1];
77 } else {
78 r_j = r_i;
79 }
80 if (r_i<0) { r_i = 0; }
81 if (r_j<0) { r_j = 0; }
82
83 /* get sample rate */
84 if (nargin==3) {
85 sample_rate = (mxGetM(in[2])==0) ? 1: mxGetScalar(in[2]);
86 } else {
87 sample_rate = 1;
88 }
89 /* prepare for random number generator */
90 if (sample_rate<1) {
91 srand( (unsigned)time( NULL ) );
92 th_rand = (int)ceil((double)RAND_MAX * sample_rate);
93 no_sample = 0;
94 } else {
95 sample_rate = 1;
96 th_rand = RAND_MAX;
97 no_sample = 1;
98 }
99
100 /* figure out neighbourhood size */
101
102 nb = (r_i + r_i + 1) * (r_j + r_j + 1);
103 if (nb>np) {
104 nb = np;
105 }
106 nb = (int)ceil((double)nb * sample_rate);
107/*printf("nb=%d\n",nb);*/
108 /* intermediate data structure */
109 /* p = mxCalloc(np * (nb+1), sizeof(unsigned long)); */
110 p = mxCalloc(np * (nb+1), sizeof(unsigned int));
111 if (p==NULL) {
112 mexErrMsgTxt("Not enough space for my computation.");
113 }
114
115 /* computation */
116 total = 0;
117 for (j=0; j<nc; j++) {
118 /*printf("j=%d\n",j);*/
119 for (i=0; i<nr; i++) {
120
121 self = i + j * nr;
122
123 /* put self in, otherwise the index is not ordered */
124 p[self] = p[self] + 1;
125 p[self+p[self]*np] = self;
126
127 /* j range */
128 b1 = j;
129 b2 = j + r_j;
130 if (b2>=nc) { b2 = nc-1; }
131
132 /* i range */
133 a1 = i - r_i;
134 if (a1<0) { a1 = 0; }
135 a2 = i + r_i;
136 if (a2>=nr) { a2 = nr-1; }
137
138 /* number of more samples needed */
139 nsamp = nb - p[self];
140 /*if (nsamp<0)
141 {printf("nsamp=%d\n",nsamp);}*/
142 k = 0;
143 t = b1;
144 s = i + 1;
145 if (s>a2) {
146 s = a1;
147 t = t + 1;
148 }
149
150
151 while (k<nsamp && t<=b2) {
152
153 if (no_sample || (rand()<th_rand)) {
154 k = k + 1;
155 neighbor = s + t * nr;
156 p[self] = p[self] + 1;
157 p[self+p[self]*np] = neighbor;
158 p[neighbor] = p[neighbor] + 1;
159 p[neighbor+p[neighbor]*np] = self;
160 }
161
162 s = s + 1;
163 if (s>a2) {
164 s = a1;
165 t = t + 1;
166 }
167 } /* k */
168 total = total + p[self];
169 } /* i */
170
171 } /* j */
172
173 /* i, j */
174
175 out[0] = mxCreateNumericMatrix(total, 1, mxUINT32_CLASS, mxREAL);
176 out[1] = mxCreateNumericMatrix(np+1, 1, mxUINT32_CLASS, mxREAL);
177 qi = mxGetData(out[0]);
178 qj = mxGetData(out[1]);
179
180 if (out[0]==NULL || out[1]==NULL) {
181 mexErrMsgTxt("Not enough space for the output matrix.");
182 }
183
184 total = 0;
185 for (j=0; j<np; j++) {
186 qj[j] = total;
187 s = j + np;
188 for (t=0; t<p[j]; t++) {
189 qi[total] = p[s];
190 total = total + 1;
191 s = s + np;
192 }
193 }
194 qj[np] = total;
195
196 mxFree(p);
197
198}
diff --git a/SD-VBS/common/toolbox/MultiNcut/cimgnbmap.dll b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap.dll
new file mode 100755
index 0000000..368d76c
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap.dll
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/cimgnbmap.mexa64 b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap.mexa64
new file mode 100755
index 0000000..6564652
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/cimgnbmap.mexglx b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap.mexglx
new file mode 100755
index 0000000..655849a
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.c b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.c
new file mode 100755
index 0000000..7b1434c
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.c
@@ -0,0 +1,197 @@
1/*================================================================
2* function [i,j] = cimgnbmap_cross([nr,nc], nb_r, sample_rate)
3* computes the neighbourhood index matrix of an image,
4* with each neighbourhood sampled.
5* Input:
6* [nr,nc] = image size
7* nb_r = neighbourhood radius, could be [r_i,r_j] for i,j
8* sample_rate = sampling rate, default = 1
9* Output:
10* [i,j] = each is a column vector, give indices of neighbour pairs
11* UINT32 type
12* i is of total length of valid elements, 0 for first row
13* j is of length nr * nc + 1
14*
15* See also: imgnbmap.c, id2cind.m
16*
17* Examples:
18* [i,j] = imgnbmap(10, 20); % [10,10] are assumed
19*
20* Stella X. Yu, Nov 12, 2001.
21
22% test sequence:
23nr = 15;
24nc = 15;
25nbr = 1;
26[i,j] = cimgnbmap([nr,nc], nbr);
27mask = csparse(i,j,ones(length(i),1),nr*nc);
28show_dist_w(rand(nr,nc),mask)
29
30*=================================================================*/
31
32# include "mex.h"
33# include "math.h"
34
35void mexFunction(
36 int nargout,
37 mxArray *out[],
38 int nargin,
39 const mxArray *in[]
40)
41{
42 /* declare variables */
43 int nr, nc, np, nb, total;
44 double *dim, sample_rate;
45 int r_i, r_j, a1, a2, b1, b2, self, neighbor;
46 int i, j, k, s, t, nsamp, th_rand, no_sample;
47 /* unsigned long *p, *qi, *qj; */
48 unsigned int *p, *qi, *qj;
49
50 /* check argument */
51 if (nargin < 2) {
52 mexErrMsgTxt("Two input arguments required");
53 }
54 if (nargout> 2) {
55 mexErrMsgTxt("Too many output arguments.");
56 }
57
58 /* get image size */
59 i = mxGetM(in[0]);
60 j = mxGetN(in[0]);
61 dim = mxGetData(in[0]);
62 nr = (int)dim[0];
63 if (j>1 || i>1) {
64 nc = (int)dim[1];
65 } else {
66 nc = nr;
67 }
68 np = nr * nc;
69
70 /* get neighbourhood size */
71 i = mxGetM(in[1]);
72 j = mxGetN(in[1]);
73 dim = mxGetData(in[1]);
74 r_i = (int)dim[0];
75 if (j>1 || i>1) {
76 r_j = (int)dim[1];
77 } else {
78 r_j = r_i;
79 }
80 if (r_i<0) { r_i = 0; }
81 if (r_j<0) { r_j = 0; }
82
83 /* get sample rate */
84 if (nargin==3) {
85 sample_rate = (mxGetM(in[2])==0) ? 1: mxGetScalar(in[2]);
86 } else {
87 sample_rate = 1;
88 }
89 /* prepare for random number generator */
90 if (sample_rate<1) {
91 srand( (unsigned)time( NULL ) );
92 th_rand = (int)ceil((double)RAND_MAX * sample_rate);
93 no_sample = 0;
94 } else {
95 sample_rate = 1;
96 th_rand = RAND_MAX;
97 no_sample = 1;
98 }
99
100 /* figure out neighbourhood size */
101
102 nb = (r_i + r_i) * (r_j + r_j)+1;
103 if (nb>np) {
104 nb = np;
105 }
106 nb = (int)ceil((double)nb * sample_rate);
107/*printf("nb=%d\n",nb);*/
108 /* intermediate data structure */
109 /* p = mxCalloc(np * (nb+1), sizeof(unsigned long)); */
110 p = mxCalloc(np * (nb+1), sizeof(unsigned int));
111 if (p==NULL) {
112 mexErrMsgTxt("Not enough space for my computation.");
113 }
114
115 /* computation */
116 total = 0;
117 for (j=0; j<nc; j++) {
118 /*printf("j=%d\n",j);*/
119 for (i=0; i<nr; i++) {
120
121 self = i + j * nr;
122
123 /* put self in, otherwise the index is not ordered */
124 p[self] = p[self] + 1;
125 p[self+p[self]*np] = self;
126
127 /* j range */
128 b1 = j;
129 b2 = j + r_j;
130 if (b2>=nc) { b2 = nc-1; }
131
132 /* i range */
133 /*a1 = i - r_i;
134 if (a1<0) { a1 = 0; }*/
135 a2 = i + r_i;
136 if (a2>=nr) { a2 = nr-1; }
137
138 /* number of more samples needed */
139 nsamp = nb - p[self];
140 /*if (nsamp<0)
141 {printf("nsamp=%d\n",nsamp);}*/
142 k = 0;
143 t = b1;
144 s = i + 1;
145 if (s>a2) {
146 s = i;
147 t = t + 1;
148 }
149
150
151 while (k<nsamp && t<=b2) {
152
153 if (no_sample || (rand()<th_rand)) {
154 k = k + 1;
155 neighbor = s + t * nr;
156 p[self] = p[self] + 1;
157 p[self+p[self]*np] = neighbor;
158 p[neighbor] = p[neighbor] + 1;
159 p[neighbor+p[neighbor]*np] = self;
160 }
161 if (s!=i){
162 s = s + 1; if (s>a2) { s = i; t = t + 1;
163 }
164 }
165 else {t=t+1;}
166 } /* k */
167 total = total + p[self];
168 } /* i */
169
170 } /* j */
171
172 /* i, j */
173
174 out[0] = mxCreateNumericMatrix(total, 1, mxUINT32_CLASS, mxREAL);
175 out[1] = mxCreateNumericMatrix(np+1, 1, mxUINT32_CLASS, mxREAL);
176 qi = mxGetData(out[0]);
177 qj = mxGetData(out[1]);
178
179 if (out[0]==NULL || out[1]==NULL) {
180 mexErrMsgTxt("Not enough space for the output matrix.");
181 }
182
183 total = 0;
184 for (j=0; j<np; j++) {
185 qj[j] = total;
186 s = j + np;
187 for (t=0; t<p[j]; t++) {
188 qi[total] = p[s];
189 total = total + 1;
190 s = s + np;
191 }
192 }
193 qj[np] = total;
194
195 mxFree(p);
196
197}
diff --git a/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.dll b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.dll
new file mode 100755
index 0000000..d66e578
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.dll
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.mexa64 b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.mexa64
new file mode 100755
index 0000000..905aae5
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.mexglx b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.mexglx
new file mode 100755
index 0000000..a7fc50d
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_cross.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.c b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.c
new file mode 100755
index 0000000..e8a37d6
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.c
@@ -0,0 +1,294 @@
1/*================================================================
2* function [i,j] = cimgnbmap_star([nr,nc], nb_r, sample_rate)
3* computes the neighbourhood index matrix of an image,
4* with each neighbourhood sampled.
5* Input:
6* [nr,nc] = image size
7* nb_r = neighbourhood radius, could be [r_i,r_j] for i,j
8* sample_rate = sampling rate, default = 1
9
10* Output:
11
12* [i,j] = each is a column vector, give indices of neighbour pairs
13
14* UINT32 type
15
16* i is of total length of valid elements, 0 for first row
17
18* j is of length nr * nc + 1
19
20*
21
22* See also: imgnbmap.c, id2cind.m
23
24*
25* Examples:
26* [i,j] = imgnbmap(10, 20); % [10,10] are assumed
27*
28* Stella X. Yu, Nov 12, 2001.
29
30% test sequence:
31
32nr = 15;
33
34nc = 15;
35
36nbr = 1;
37
38[i,j] = cimgnbmap([nr,nc], nbr);
39
40mask = csparse(i,j,ones(length(i),1),nr*nc);
41
42show_dist_w(rand(nr,nc),mask)
43
44
45*=================================================================*/
46
47# include "mex.h"
48
49# include "math.h"
50
51void mexFunction(
52 int nargout,
53 mxArray *out[],
54 int nargin,
55 const mxArray *in[]
56)
57{
58 /* declare variables */
59 int nr, nc, np, nb, total;
60
61 double *dim, sample_rate;
62 int r_i, r_j, a1, a2, b1, b2, self, neighbor;
63 int i, j, k, s, t, nsamp, th_rand, no_sample;
64 /* unsigned long *p, *qi, *qj; */
65 unsigned int *p, *qi, *qj;
66
67 /* check argument */
68 if (nargin < 2) {
69 mexErrMsgTxt("Two input arguments required");
70 }
71 if (nargout> 2) {
72 mexErrMsgTxt("Too many output arguments.");
73 }
74
75
76 /* get image size */
77
78 i = mxGetM(in[0]);
79 j = mxGetN(in[0]);
80 dim = mxGetData(in[0]);
81 nr = (int)dim[0];
82 if (j>1 || i>1) {
83 nc = (int)dim[1];
84 } else {
85 nc = nr;
86 }
87 np = nr * nc;
88
89
90 /* get neighbourhood size */
91 i = mxGetM(in[1]);
92 j = mxGetN(in[1]);
93 dim = mxGetData(in[1]);
94 r_i = (int)dim[0];
95
96 if (j>1 || i>1) {
97 r_j = (int)dim[1];
98 } else {
99 r_j = r_i;
100 }
101
102 if (r_i<0) { r_i = 0; }
103
104 if (r_j<0) { r_j = 0; }
105
106
107
108 /* get sample rate */
109
110 if (nargin==3) {
111
112 sample_rate = (mxGetM(in[2])==0) ? 1: mxGetScalar(in[2]);
113
114 } else {
115
116 sample_rate = 1;
117
118 }
119
120 /* prepare for random number generator */
121 if (sample_rate<1) {
122 srand( (unsigned)time( NULL ) );
123
124 th_rand = (int)ceil((double)RAND_MAX * sample_rate);
125 no_sample = 0;
126 } else {
127
128 sample_rate = 1;
129 th_rand = RAND_MAX;
130 no_sample = 1;
131 }
132
133
134 /* figure out neighbourhood size */
135
136 nb = (4*r_i) + (4*r_j)+1;
137 if (nb>np) {
138 nb = np;
139 }
140 nb = (int)ceil((double)nb * sample_rate);
141
142/*printf("nb=%d\n",nb);*/
143
144 /* intermediate data structure */
145
146 /* p = mxCalloc(np * (nb+1), sizeof(unsigned long));*/
147 p = mxCalloc(np * (nb+1), sizeof(unsigned int));
148
149 if (p==NULL) {
150
151 mexErrMsgTxt("Not enough space for my computation.");
152
153 }
154
155
156
157 /* computation */
158
159 total = 0;
160 for (j=0; j<nc; j++) {
161 /*printf("j=%d\n",j);*/
162 for (i=0; i<nr; i++) {
163
164
165 self = i + j * nr;
166 /* put self in, otherwise the index is not ordered */
167 p[self] = p[self] + 1;
168 p[self+p[self]*np] = self;
169
170 /* j range */
171 b1 = j;
172 b2 = j + r_j;
173 if (b2>=nc) { b2 = nc-1; }
174
175
176 /* i range */
177 /*a1 = i - r_i;
178
179 if (a1<0) { a1 = 0; }*/
180 a2 = i + r_i;
181 if (a2>=nr) { a2 = nr-1; }
182
183
184 /* number of more samples needed */
185
186 nsamp = nb - p[self];
187
188 /*if (nsamp<0)
189 {printf("nsamp=%d\n",nsamp);}*/
190 k = 0;
191 t = b1;
192 s = i + 1;
193
194 if (s>a2) {
195 s = i;
196 t = t + 1;
197 }
198
199
200
201 while (k<nsamp && t<=b2) {
202
203
204 if (no_sample || (rand()<th_rand)) {
205 k = k + 1;
206 neighbor = s + t * nr;
207
208 p[self] = p[self] + 1;
209
210 p[self+p[self]*np] = neighbor;
211 p[neighbor] = p[neighbor] + 1;
212
213 p[neighbor+p[neighbor]*np] = self;
214 }
215
216 if (t==b1){
217 s = s + 1;
218 if (s>a2) {
219 t = t + 1;
220 if (i+j-t>=0)
221 {s = i+j-t;}
222 else
223 {s=i;}
224 }
225 }
226 else {
227 if (s==i+j-t) {s=i;}
228 else{ if (s==i && s+t-j<nr) {s=s+t-j;}
229 else {
230 t = t + 1;
231 if (i+j-t>=0)
232 {s = i+j-t;}
233 else
234 {s=i;}
235 }
236
237 }
238 }
239
240 } /* k */
241
242 total = total + p[self];
243 } /* i */
244
245 } /* j */
246
247
248
249 /* i, j */
250
251 out[0] = mxCreateNumericMatrix(total, 1, mxUINT32_CLASS, mxREAL);
252
253 out[1] = mxCreateNumericMatrix(np+1, 1, mxUINT32_CLASS, mxREAL);
254
255 qi = mxGetData(out[0]);
256
257 qj = mxGetData(out[1]);
258
259
260 if (out[0]==NULL || out[1]==NULL) {
261
262 mexErrMsgTxt("Not enough space for the output matrix.");
263
264 }
265
266
267
268 total = 0;
269
270 for (j=0; j<np; j++) {
271
272 qj[j] = total;
273
274 s = j + np;
275
276 for (t=0; t<p[j]; t++) {
277
278 qi[total] = p[s];
279
280 total = total + 1;
281
282 s = s + np;
283
284 }
285
286 }
287
288 qj[np] = total;
289
290
291
292 mxFree(p);
293
294}
diff --git a/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.dll b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.dll
new file mode 100755
index 0000000..a7cddfa
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.dll
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.mexa64 b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.mexa64
new file mode 100755
index 0000000..d687d91
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.mexglx b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.mexglx
new file mode 100755
index 0000000..25da17f
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/cimgnbmap_star.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/compileAll.m b/SD-VBS/common/toolbox/MultiNcut/compileAll.m
new file mode 100755
index 0000000..16fe77b
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/compileAll.m
@@ -0,0 +1,10 @@
1function compileAll(Cdir);
2
3files = dir([Cdir,'/*.c']);
4
5for j=1:length(files),
6
7 cm = sprintf('mex %s',files(j).name);
8disp(cm);
9eval(cm);
10end
diff --git a/SD-VBS/common/toolbox/MultiNcut/computeMultiW.m b/SD-VBS/common/toolbox/MultiNcut/computeMultiW.m
new file mode 100755
index 0000000..b2cb7ea
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/computeMultiW.m
@@ -0,0 +1,245 @@
1%inputs : image, number of layers, distance defining the subgrid, the edge filter scales for each layer, radius for each layer,
2%edge variance for filter, shape of the neighbourhood layout ('square', 'star', 'cross'), sigma for intensity affinity,
3% sigma for distance influence in affinity, weight coefficients for Wpps in the multiscale matrix.
4%output : multiscale affinity matrix , extern constraint matrix, affinity matrices of each layer seperatly.
5
6
7function [multiWpp,constraintMat, Wind,data,emag,ephase]= computeMultiW (image,data);
8
9%variables
10
11if isempty(data.layers.number)
12 n=2;
13else
14 n=data.layers.number;
15end
16
17if isempty(data.layers.dist)
18 dist_grid=3;
19else
20 dist_grid=data.layers.dist;
21end
22
23if isempty(data.W.scales)
24 s=1:n;
25elseif (length(data.W.scales)==n)
26 s=data.W.scales;
27else
28 s=1:n;
29end
30
31if isempty(data.W.radius)
32 r(1)=2;
33 for i=2:n
34 r(i)=10;
35 end
36else
37 r=data.W.radius;
38end
39
40
41if isempty(data.W.edgeVariance)
42 data.W.edgeVariance=0.1;
43end
44
45if isempty(data.W.gridtype)
46 data.W.gridtype='square';
47end
48
49if isempty(data.W.sigmaI)
50 data.W.sigmaI=0.12;
51end
52
53if isempty(data.W.sigmaX)
54 data.W.sigmaX=10;
55end
56
57if isempty(data.layers.weight)
58 coef(1)=5;
59 coef(2:n)=200;
60elseif (length(data.layers.weight)==n)
61 coef=data.layers.weight;
62else
63 coef(1)=5;
64 coef(2:n)=100; %200
65end
66
67if isempty(data.W.mode)
68 data.W.mode=mixed;
69end
70
71
72[p1,q1,ignore]=size(image);
73image=image(:,:,1);
74filter_par = [4,30,4]; %[9,30,4]
75[x,y,gx,gy,par,threshold,emag,ephase,g,FIe,FIo,mago] = quadedgep2(image,filter_par,data,0.001);
76minW=10^(-2); %-3
77
78
79% function [multiWpp,constraintMat,p,q,Wppp,subgrid] = computemultiWpp(n,imageX,r,dist_grid,s,dataWpp,emag,ephase,minW,mode,facteurMul,contrainte,tt,gridtype,colormode,imageOriginale,subgridImageReduite,pG,qG)
80
81p= p1*ones(n,1);
82q= q1*ones(n,1);
83d= dist_grid*ones(n,1);
84d(1)=1;
85for (i=2:n)
86 d(i)=d(i)*3^(i-2);
87end
88p=ceil(p1./d);
89q=ceil(q1./d);
90
91%computation of the subgrids (the first pixel is coded by one). S{i,j}(k) is the index of
92%the kth pixel of the jth grid in the ith grid.
93
94for i=1:n-1
95 for j=i+1:n
96 a=[0:p(j)*q(j)-1];
97 subgrid{i,j}=p(i)*(floor(a/p(j)))*d(j)/d(i)+(1+mod(a,p(j))*d(j)/d(i));
98 end
99end
100
101%computation of the independent W matrix for each layer Wind{i} 1=<i=<n.
102
103[w1i,w1j]=cimgnbmap([p1,q1], r(1), 1);
104
105if strcmp(data.W.mode,'mixed')
106 rMin = 0;
107 imageXX=double(image(:));
108 sigmaI= (std(imageXX(:)) + 1e-10 )* data.W.sigmaI;
109 Wpp{1} = multiIntensityFirstLayer(double(image),w1i,w1j,rMin,data.W.sigmaX,sigmaI,minW);
110 Wpp2= affinityic(emag(:,:,s(1)),ephase(:,:,s(1)),w1i,w1j,max(max(emag(:,:,s(1)))) * data.W.edgeVariance);
111 Wpp{1} = sqrt(Wpp{1} .* Wpp2)+0.1*Wpp2;
112
113elseif strcmp(data.W.mode,'notmixed')
114 Wpp{1}= affinityic(emag(:,:,s(1)),ephase(:,:,s(1)),w1i,w1j,max(max(emag(:,:,s(1)))) * data.W.edgeVariance);
115
116elseif strcmp(data.W.mode,'intensity')
117 rMin = 0;
118 imageXX=double(image(:));
119 sigmaI= (std(imageXX(:)) + 1e-10 )* data.W.sigmaI;
120 Wpp{1} = multiIntensityFirstLayer(double(image),w1i,w1j,rMin,data.W.sigmaX,sigmaI,minW);
121
122end
123Wpp{1}=coef(1)*(Wpp{1}+Wpp{1}')/2;
124%Wpp{1}= coef(1)*Wpp{1};
125Wind{1}=Wpp{1};
126
127
128
129
130for i=2:n
131 if strcmp(data.W.gridtype,'square')
132 [wwi,wwj]=cimgnbmap([p(i),q(i)], r(i), 1);
133 elseif strcmp(data.W.gridtype,'star')
134 [wwi,wwj]=cimgnbmap_star([p(i),q(i)], r(i), 1);
135 elseif strcmp(data.W.gridtype,'cross')
136 [wwi,wwj]=cimgnbmap_cross([p(i),q(i)], r(i), 1);
137 end
138 wwi=double(wwi);
139 wiInOriginalImage=(p1*(floor(wwi/p(i)))*d(i))+(1+mod(wwi,p(i))*d(i));
140 wiInOriginalImage=(p1*(floor(wwi/p(i)))*d(i))+(1+mod(wwi,p(i))*d(i));
141
142 wiInOriginalImage= uint32(wiInOriginalImage);
143
144if strcmp(data.W.mode,'mixed')
145 Wpp2= multiAffinityic(emag(:,:,i),ephase(:,:,i),wiInOriginalImage,wwj,subgrid{1,i},p(i),q(i),uint32(wwi),max(max(emag(:,:,i))) * data.W.edgeVariance);
146 a=floor(d(i)/d(i-1));
147 if (mod(a,2)==0)
148 a=a+1;
149 end
150% Wpp{i} = multiIntensityWppc(double(imageX),wiInOriginalImage,wwj,rMin,dataWpp.sigmaX,sigmaI,minW,subgrid{1,i},p(i),q(i),wi{i});
151
152 Wpp{i} = multiIntensityWppc(double(image),wiInOriginalImage,wwj,rMin,data.W.sigmaX,sigmaI,minW,subgrid{1,i},p(i),q(i),uint32(wwi));
153 Wpp{i} = sqrt(Wpp{i} .* Wpp2)+0.1*Wpp2;
154elseif strcmp(data.W.mode,'notmixed')
155 Wpp{i}= multiAffinityic(emag(:,:,i),ephase(:,:,i),wiInOriginalImage,wwj,subgrid{1,i},p(i),q(i),uint32(wwi),max(max(emag(:,:,i))) * data.W.edgeVariance);
156elseif strcmp(data.W.mode,'intensity')
157 Wpp{i} = multiIntensityWppc(double(image),wiInOriginalImage,wwj,rMin,data.W.sigmaX,sigmaI,minW,subgrid{1,i},p(i),q(i),uint32(wwi));
158end
159Wpp{i}= coef(i)*(Wpp{i}+Wpp{i}')/2;
160
161%Wpp{i}= coef(i)*Wpp{i};
162Wind{i}=Wpp{i};
163
164end
165
166%computation of the intern contraint matrices C{i,j}.
167
168for i=1:n-1
169 r=floor(d(i+1)/(d(i)*2));
170 [wwi,wwj]=cimgnbmap([p(i),q(i)], r, 1);
171 wi{i}=wwi;
172 wj{i}=wwj;
173end
174
175for i=1:n-1
176 for j=i+1:n
177 C{i,j}=sparse(p(i)*q(i),p(j)*q(j));
178 firstPointer=double(wj{i}(subgrid{i,j}))+1;
179 lastPointer=double(wj{i}(subgrid{i,j}+1));
180 invNbNeighbours=1./(lastPointer-firstPointer+1);
181 for (k=1:p(j)*q(j))
182 for (m=firstPointer(k):lastPointer(k))
183 C{i,j}(double(wi{i}(m))+1,k)=invNbNeighbours(k);
184 end
185 end
186 end
187end
188
189%Assembling the built matrices to make up multiWpp.
190for i=1:n
191 if (i>1)
192 for j=i-1:-1:1
193 Wpp{i}=[C{j,i}',Wpp{i}];
194 end
195 end
196 if (i<n)
197 for j=i+1:n
198 Wpp{i}=[Wpp{i},C{i,j}];
199 end
200 end
201end
202
203% %Assembling the built matrices to make up Wpp without intern constrains.
204% for i=1:n
205% if (i>1)
206% for j=i-1:-1:1
207% Wpp{i}=[sparse(p(i)*q(i),p(j)*q(j)),Wpp{i}];
208% end
209% end
210% if (i<n)
211% for j=i+1:n
212% Wpp{i}=[Wpp{i},sparse(p(i)*q(i),p(j)*q(j))];
213% end
214% end
215% end
216
217clear Wind;Wind = 1;
218
219multiWpp=Wpp{1}; clear Wpp{1}
220for i=2:n
221 multiWpp=[multiWpp;Wpp{i}];clear Wpp{i}
222end
223
224
225% Computing the average extern constraint
226
227 pq=sum(p(2:n).*q(2:n));
228 p2q2=p(2)*q(2);
229 constraintMat=[-C{1,2};speye(p2q2);sparse(pq-p2q2,p2q2)];
230 if n>2
231 for i=3:n
232 piqi=p(i)*q(i);
233 if i~=n
234 constraintMat=[constraintMat,[sparse(sum(p(1:i-2).*q(1:i-2)),piqi);-C{i-1,i};speye(piqi);sparse(pq-sum(p(2:i).*q(2:i)),piqi)]];
235 else
236 constraintMat=[constraintMat,[sparse(sum(p(1:i-2).*q(1:i-2)),piqi);-C{i-1,i};speye(piqi)]];
237 end
238 end
239 end
240
241 % saving useful information
242 %subgrids, p and q
243 data.subgrid=subgrid;
244 data.p=p;
245 data.q=q;
diff --git a/SD-VBS/common/toolbox/MultiNcut/discretisation.m b/SD-VBS/common/toolbox/MultiNcut/discretisation.m
new file mode 100755
index 0000000..70b5650
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/discretisation.m
@@ -0,0 +1,49 @@
1function [SegLabel,EigenVectors]=discretisation(EigenVectors,nr,nc)
2%
3% EigenvectorsDiscrete=discretisation(EigenVectors)
4%
5% Input: EigenVectors = continuous Ncut vector, size = ndata x nbEigenvectors
6% Output EigenvectorsDiscrete = discrete Ncut vector, size = ndata x nbEigenvectors
7%
8% Timothee Cour, Stella Yu, Jianbo Shi, 2004
9
10[n,k]=size(EigenVectors);
11
12vm = sqrt(sum(EigenVectors.*EigenVectors,2));
13EigenVectors = EigenVectors./repmat(vm,1,k);
14
15R=zeros(k);
16R(:,1)=EigenVectors(1+round(rand(1)*(n-1)),:)';
17c=zeros(n,1);
18for j=2:k
19 c=c+abs(EigenVectors*R(:,j-1));
20 [minimum,i]=min(c);
21 R(:,j)=EigenVectors(i,:)';
22end
23
24lastObjectiveValue=0;
25exitLoop=0;
26nbIterationsDiscretisation = 0;
27nbIterationsDiscretisationMax = 20;%voir
28while exitLoop== 0
29 nbIterationsDiscretisation = nbIterationsDiscretisation + 1 ;
30 EigenvectorsDiscrete = discretisationEigenVectorData(EigenVectors*R);
31 [U,S,V] = svd(EigenvectorsDiscrete'*EigenVectors,0);
32 NcutValue=2*(n-trace(S));
33
34 if abs(NcutValue-lastObjectiveValue) < eps | nbIterationsDiscretisation > nbIterationsDiscretisationMax
35 exitLoop=1;
36 else
37 lastObjectiveValue = NcutValue;
38 R=V*U';
39 end
40end
41
42%%%%
43
44SegLabel = zeros(nr,nc);
45for j=1:size(EigenvectorsDiscrete,2),
46 SegLabel = SegLabel + j*reshape(EigenvectorsDiscrete(:,j),nr,nc);
47end
48EigenVectors = reshape(EigenVectors,nr,nc,size(EigenVectors,2));
49
diff --git a/SD-VBS/common/toolbox/MultiNcut/discretisationEigenVectorData.m b/SD-VBS/common/toolbox/MultiNcut/discretisationEigenVectorData.m
new file mode 100755
index 0000000..4626e3d
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/discretisationEigenVectorData.m
@@ -0,0 +1,12 @@
1function Y = discretisationEigenVectorData(EigenVector)
2% Y = discretisationEigenVectorData(EigenVector)
3%
4% discretizes previously rotated eigenvectors in discretisation
5% Timothee Cour, Stella Yu, Jianbo Shi, 2004
6
7[n,k]=size(EigenVector);
8
9
10[Maximum,J]=max(EigenVector');
11
12Y=sparse(1:n,J',1,n,k);
diff --git a/SD-VBS/common/toolbox/MultiNcut/doog1.m b/SD-VBS/common/toolbox/MultiNcut/doog1.m
new file mode 100755
index 0000000..dd8e87b
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/doog1.m
@@ -0,0 +1,32 @@
1function H=doog1(sig,r,th,N);
2% H=doog1(sig,r,th,N);
3
4
5% by Serge Belongie
6
7no_pts=N; % no. of points in x,y grid
8
9[x,y]=meshgrid(-(N/2)+1/2:(N/2)-1/2,-(N/2)+1/2:(N/2)-1/2);
10
11phi=pi*th/180;
12sigy=sig;
13sigx=r*sig;
14R=[cos(phi) -sin(phi); sin(phi) cos(phi)];
15C=R*diag([sigx,sigy])*R';
16
17X=[x(:) y(:)];
18
19Gb=gaussian(X,[0 0]',C);
20Gb=reshape(Gb,N,N);
21
22m=R*[0 sig]';
23
24a=1;
25b=-1;
26
27% make odd-symmetric filter
28Ga=gaussian(X,m/2,C);
29Ga=reshape(Ga,N,N);
30Gb=rot90(Ga,2);
31H=a*Ga+b*Gb;
32
diff --git a/SD-VBS/common/toolbox/MultiNcut/doog2.m b/SD-VBS/common/toolbox/MultiNcut/doog2.m
new file mode 100755
index 0000000..a0511cb
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/doog2.m
@@ -0,0 +1,38 @@
1function G=doog2(sig,r,th,N);
2% G=doog2(sig,r,th,N);
3% Make difference of offset gaussians kernel
4% theta is in degrees
5% (see Malik & Perona, J. Opt. Soc. Amer., 1990)
6%
7% Example:
8% >> imagesc(doog2(1,12,0,64,1))
9% >> colormap(gray)
10
11% by Serge Belongie
12
13no_pts=N; % no. of points in x,y grid
14
15[x,y]=meshgrid(-(N/2)+1/2:(N/2)-1/2,-(N/2)+1/2:(N/2)-1/2);
16
17phi=pi*th/180;
18sigy=sig;
19sigx=r*sig;
20R=[cos(phi) -sin(phi); sin(phi) cos(phi)];
21C=R*diag([sigx,sigy])*R';
22
23X=[x(:) y(:)];
24
25Gb=gaussian(X,[0 0]',C);
26Gb=reshape(Gb,N,N);
27
28m=R*[0 sig]';
29Ga=gaussian(X,m,C);
30Ga=reshape(Ga,N,N);
31Gc=rot90(Ga,2);
32
33a=-1;
34b=2;
35c=-1;
36
37G = a*Ga + b*Gb + c*Gc;
38
diff --git a/SD-VBS/common/toolbox/MultiNcut/eigSolve.m b/SD-VBS/common/toolbox/MultiNcut/eigSolve.m
new file mode 100755
index 0000000..cfb64fc
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/eigSolve.m
@@ -0,0 +1,5 @@
1function [eigenVectors,s]= eigSolve (multiWpp,ConstraintMat,data)
2
3[v,s] = quickNcutHardBiais2(multiWpp,ConstraintMat,data.dataGraphCut.nbEigenValues,data.dataGraphCut);
4v=v(1:data.p(1)*data.q(1),:);
5eigenVectors=reshape(v,data.p(1),data.q(1),data.dataGraphCut.nbEigenValues);
diff --git a/SD-VBS/common/toolbox/MultiNcut/fft_filt_2.m b/SD-VBS/common/toolbox/MultiNcut/fft_filt_2.m
new file mode 100755
index 0000000..9c84e96
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/fft_filt_2.m
@@ -0,0 +1,29 @@
1function FI=fft_filt_2(V,FB,sf);
2% FI=fft_filt_2(V,FB,sf);
3% fft-based filtering
4% requires image to be called "V"
5% and filters to be in FB
6% sf is the subsampling factor
7%
8% FI is the result
9
10[M1,M2,N3]=size(FB);
11% prepare FFT of image for filtering
12[N1,N2]=size(V);
13I=zeros(size(V)+[M1-1 M2-1]);
14I(1:N1,1:N2)=V;
15N1s=length(1:sf:N1);
16N2s=length(1:sf:N2);
17IF=fft2(I);
18FI=zeros(N1s,N2s,N3);
19
20% apply filters
21for n=1:N3;
22 f=rot90(FB(:,:,n),2);
23 fF=fft2(f,N1+M1-1,N2+M2-1);
24 IfF=IF.*fF;
25 If=real(ifft2(IfF));
26 If=If(ceil((M1+1)/2):ceil((M1+1)/2)+N1-1,ceil((M2+1)/2):ceil((M2+1)/2)+N2-1);
27 FI(:,:,n)=If(1:sf:N1,1:sf:N2);
28end
29
diff --git a/SD-VBS/common/toolbox/MultiNcut/gaussian.m b/SD-VBS/common/toolbox/MultiNcut/gaussian.m
new file mode 100755
index 0000000..509b129
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/gaussian.m
@@ -0,0 +1,31 @@
1function p=gaussian(x,m,C);
2% p=gaussian(x,m,C);
3%
4% Evaluate the multi-variate density with mean vector m and covariance
5% matrix C for the input vector x.
6%
7% p=gaussian(X,m,C);
8%
9% Vectorized version: Here X is a matrix of column vectors, and p is
10% a vector of probabilities for each vector.
11
12d=length(m);
13
14if size(x,1)~=d
15 x=x';
16end
17N=size(x,2);
18
19detC = det(C);
20if rcond(C)<eps
21% fprintf(1,'Covariance matrix close to singular. (gaussian.m)\n');
22 p = zeros(N,1);
23else
24 m=m(:);
25 M=m*ones(1,N);
26 denom=(2*pi)^(d/2)*sqrt(abs(detC));
27 mahal=sum(((x-M)'*inv(C)).*(x-M)',2); % Chris Bregler's trick
28 numer=exp(-0.5*mahal);
29 p=numer/denom;
30end
31
diff --git a/SD-VBS/common/toolbox/MultiNcut/make_filterbank_even2.m b/SD-VBS/common/toolbox/MultiNcut/make_filterbank_even2.m
new file mode 100755
index 0000000..f7f4527
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/make_filterbank_even2.m
@@ -0,0 +1,45 @@
1function FB = make_filterbank(num_ori,filter_scales,wsz,enlong)
2%
3% F = make_filterbank(num_ori,num_scale,wsz)
4%
5
6if nargin<4,
7 enlong = 3;
8end
9
10enlong = 2*enlong;
11
12% definine filterbank
13%num_ori=6;
14%num_scale=3;
15
16num_scale = length(filter_scales);
17
18M1=wsz; % size in pixels
19M2=M1;
20
21ori_incr=180/num_ori;
22ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
23
24FB=zeros(M1,M2,num_ori,num_scale);
25
26% elongated filter set
27counter = 1;
28
29for m=1:num_scale
30 for n=1:num_ori
31 % r=12 here is equivalent to Malik's r=3;
32 f=doog2(filter_scales(m),enlong,ori_offset+(n-1)*ori_incr,M1);
33 FB(:,:,n,m)=f;
34 end
35end
36
37FB=reshape(FB,M1,M2,num_scale*num_ori);
38total_num_filt=size(FB,3);
39
40for j=1:total_num_filt,
41 F = FB(:,:,j);
42 a = sum(sum(abs(F)));
43 FB(:,:,j) = FB(:,:,j)/a;
44end
45
diff --git a/SD-VBS/common/toolbox/MultiNcut/make_filterbank_odd2.m b/SD-VBS/common/toolbox/MultiNcut/make_filterbank_odd2.m
new file mode 100755
index 0000000..0059dca
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/make_filterbank_odd2.m
@@ -0,0 +1,46 @@
1function FB = make_filterbank(num_ori,filter_scales,wsz,enlong)
2%
3% F = make_filterbank(num_ori,num_scale,wsz)
4%
5
6if nargin<4,
7 enlong = 3;
8end
9
10enlong = enlong*2;
11
12% definine filterbank
13%num_ori=6;
14%num_scale=3;
15
16num_scale = length(filter_scales);
17
18M1=wsz; % size in pixels
19M2=M1;
20
21ori_incr=180/num_ori;
22ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
23
24FB=zeros(M1,M2,num_ori,num_scale);
25
26
27% elongated filter set
28counter = 1;
29
30for m=1:num_scale
31 for n=1:num_ori
32 % r=12 here is equivalent to Malik's r=3;
33 f=doog1(filter_scales(m),enlong,ori_offset+(n-1)*ori_incr,M1);
34 FB(:,:,n,m)=f;
35 end
36end
37
38FB=reshape(FB,M1,M2,num_scale*num_ori);
39total_num_filt=size(FB,3);
40
41for j=1:total_num_filt,
42 F = FB(:,:,j);
43 a = sum(sum(abs(F)));
44 FB(:,:,j) = FB(:,:,j)/a;
45end
46
diff --git a/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR.c b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR.c
new file mode 100755
index 0000000..5ac4820
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR.c
@@ -0,0 +1,82 @@
1/*================================================================
2* mex_projection_QR.c = used by quickNcutHardBiais.m in eigensolver.
3* mex_projection_QR(X,P,Ubar,R) == (eye(length(P))-Ubar*(R'*R)^{-1}*Ubar') * P * (eye(length(P))-Ubar*(R'*R)^{-1}*Ubar') * X ;
4* (R'*R)^{-1} is solved by solving a triangular system
5
6* P, Ubar, R are sparse, but X is full
7
8* R is upper triangular
9
10% test sequence:
11
12*=================================================================*/
13
14# include "math.h"
15# include "mex.h"
16# include "a_times_b_cmplx.c"
17/*# include "a_times_b.c"*/
18
19void mexFunction(
20 int nargout,
21 mxArray *out[],
22 int nargin,
23 const mxArray *in[]
24)
25{
26 int *ir[4], *jc[4], m[4], n[4];
27 double *y, *y1,*y2,*y3,*y4,*y5,*y6, *pr[4];
28 double *y2bis, *y5bis;
29 int k;
30
31 for (k=0; k<4; k++) {
32 m[k] = mxGetM(in[k]);
33 n[k] = mxGetN(in[k]);
34 pr[k] = mxGetPr(in[k]);
35 if (k>0) {
36 ir[k] = mxGetIr(in[k]);
37 jc[k] = mxGetJc(in[k]);
38 }
39 }
40
41 out[0] = mxCreateDoubleMatrix(m[1],1,mxREAL);
42 y = mxGetPr(out[0]);
43
44
45 y1 = mxCalloc(n[2], sizeof(double));
46 y2 = mxCalloc(m[3], sizeof(double));
47 y2bis = mxCalloc(m[3], sizeof(double));
48 y3 = mxCalloc(m[1], sizeof(double));
49 y4 = mxCalloc(m[1], sizeof(double));
50 y5 = mxCalloc(n[2], sizeof(double));
51 y5bis = mxCalloc(n[2], sizeof(double));
52 y6 = mxCalloc(n[2], sizeof(double));
53
54 CSR_VecMult_CAB_double(m[2],n[2],pr[2],ir[2],jc[2],pr[0],y1);
55 CSR_VecTriangSlvLD_CAB_double(m[3],pr[3],ir[3],jc[3],y1,y2bis);
56 CSC_VecTriangSlvUD_CAB_double(m[3],pr[3],ir[3],jc[3],y2bis,y2);
57 for(k=0;k<m[1];k++) {
58 y3[k]=pr[0][k];
59 }
60 CSC_VecMult_CaABC_double(m[2],n[2],-1,pr[2],ir[2],jc[2],y2,y3);
61
62 CSR_VecMult_CAB_double(m[1],n[1],pr[1],ir[1],jc[1],y3,y4);
63
64 CSR_VecMult_CAB_double(m[2],n[2],pr[2],ir[2],jc[2],y4,y5);
65
66 CSR_VecTriangSlvLD_CAB_double(m[3],pr[3],ir[3],jc[3],y5,y5bis);
67 CSC_VecTriangSlvUD_CAB_double(m[3],pr[3],ir[3],jc[3],y5bis,y6);
68 for(k=0;k<m[1];k++) {
69 y[k]=y4[k];
70 }
71 CSC_VecMult_CaABC_double(m[2],n[2],-1,pr[2],ir[2],jc[2],y6,y);
72
73
74 mxFree(y1);
75 mxFree(y2);
76 mxFree(y2bis);
77 mxFree(y3);
78 mxFree(y4);
79 mxFree(y5);
80 mxFree(y5bis);
81 mxFree(y6);
82}
diff --git a/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR.dll b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR.dll
new file mode 100755
index 0000000..d77f509
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR.dll
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR.mexa64 b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR.mexa64
new file mode 100755
index 0000000..bb7b7bd
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR.mexglx b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR.mexglx
new file mode 100755
index 0000000..dd63169
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.c b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.c
new file mode 100755
index 0000000..5915959
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.c
@@ -0,0 +1,83 @@
1/*================================================================
2* mex_projection_QR_symmetric.c = used by quickNcutHardBiais.m in eigensolver.
3* mex_projection_QR_symmetric(X,P,Ubar,R) == (eye(length(P))-Ubar*(R'*R)^{-1}*Ubar') * P * (eye(length(P))-Ubar*(R'*R)^{-1}*Ubar') * X ;
4* (R'*R)^{-1} is solved by solving a triangular system
5
6* P, Ubar, R are sparse, but X is full
7
8* R is upper triangular
9* P is symmetric
10
11% test sequence:
12
13*=================================================================*/
14
15# include "math.h"
16# include "mex.h"
17# include "a_times_b_cmplx.c"
18/*# include "a_times_b.c"*/
19
20void mexFunction(
21 int nargout,
22 mxArray *out[],
23 int nargin,
24 const mxArray *in[]
25)
26{
27 int *ir[4], *jc[4], m[4], n[4];
28 double *y, *y1,*y2,*y3,*y4,*y5,*y6, *pr[4];
29 double *y2bis, *y5bis;
30 int k;
31
32 for (k=0; k<4; k++) {
33 m[k] = mxGetM(in[k]);
34 n[k] = mxGetN(in[k]);
35 pr[k] = mxGetPr(in[k]);
36 if (k>0) {
37 ir[k] = mxGetIr(in[k]);
38 jc[k] = mxGetJc(in[k]);
39 }
40 }
41
42 out[0] = mxCreateDoubleMatrix(m[1],1,mxREAL);
43 y = mxGetPr(out[0]);
44
45
46 y1 = mxCalloc(n[2], sizeof(double));
47 y2 = mxCalloc(m[3], sizeof(double));
48 y2bis = mxCalloc(m[3], sizeof(double));
49 y3 = mxCalloc(m[1], sizeof(double));
50 y4 = mxCalloc(m[1], sizeof(double));
51 y5 = mxCalloc(n[2], sizeof(double));
52 y5bis = mxCalloc(n[2], sizeof(double));
53 y6 = mxCalloc(n[2], sizeof(double));
54
55 CSR_VecMult_CAB_double(m[2],n[2],pr[2],ir[2],jc[2],pr[0],y1);
56 CSR_VecTriangSlvLD_CAB_double(m[3],pr[3],ir[3],jc[3],y1,y2bis);
57 CSC_VecTriangSlvUD_CAB_double(m[3],pr[3],ir[3],jc[3],y2bis,y2);
58 for(k=0;k<m[1];k++) {
59 y3[k]=pr[0][k];
60 }
61 CSC_VecMult_CaABC_double(m[2],n[2],-1,pr[2],ir[2],jc[2],y2,y3);
62
63 CSRsymm_VecMult_CAB_double(m[1],n[1],pr[1],ir[1],jc[1],y3,y4);
64
65 CSR_VecMult_CAB_double(m[2],n[2],pr[2],ir[2],jc[2],y4,y5);
66
67 CSR_VecTriangSlvLD_CAB_double(m[3],pr[3],ir[3],jc[3],y5,y5bis);
68 CSC_VecTriangSlvUD_CAB_double(m[3],pr[3],ir[3],jc[3],y5bis,y6);
69 for(k=0;k<m[1];k++) {
70 y[k]=y4[k];
71 }
72 CSC_VecMult_CaABC_double(m[2],n[2],-1,pr[2],ir[2],jc[2],y6,y);
73
74
75 mxFree(y1);
76 mxFree(y2);
77 mxFree(y2bis);
78 mxFree(y3);
79 mxFree(y4);
80 mxFree(y5);
81 mxFree(y5bis);
82 mxFree(y6);
83}
diff --git a/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.dll b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.dll
new file mode 100755
index 0000000..0270d17
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.dll
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.mexa64 b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.mexa64
new file mode 100755
index 0000000..201f6e3
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.mexglx b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.mexglx
new file mode 100755
index 0000000..5b80e13
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/mex_projection_QR_symmetric.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/mex_w_times_x_symmetric.mexglx b/SD-VBS/common/toolbox/MultiNcut/mex_w_times_x_symmetric.mexglx
new file mode 100755
index 0000000..bfad956
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/mex_w_times_x_symmetric.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/mex_w_times_x_symmetric.mexmac b/SD-VBS/common/toolbox/MultiNcut/mex_w_times_x_symmetric.mexmac
new file mode 100755
index 0000000..54be540
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/mex_w_times_x_symmetric.mexmac
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/multiAffinityic.c b/SD-VBS/common/toolbox/MultiNcut/multiAffinityic.c
new file mode 100755
index 0000000..6919db9
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/multiAffinityic.c
@@ -0,0 +1,216 @@
1/*================================================================
2* function w = affinityic(emag,ephase,pi,pj,subgrid,nrSubgrid,ncSubgrid,subpi,sigma)
3* Input:
4* emag = edge strength at each pixel
5* ephase = edge phase at each pixel
6* [pi,pj] = index pair representation for MALTAB sparse matrices, pi index in original grid, size(pj)=nrW*ncW+1
7* subgrid= index of the subgrid in the original image (first pixel's index is one!)
8* [nrSubgrid,ncSubgrid]= number of rows et colums of the subgrid
9* subpi = pi but with index in subgrid
10* sigma = sigma for IC energy
11* Output:
12* w = affinity with IC at [pi,pj]
13*
14
15% test sequence
16f = synimg(10);
17[i,j] = cimgnbmap(size(f),2);
18[ex,ey,egx,egy] = quadedgep(f);
19a = affinityic(ex,ey,egx,egy,i,j)
20show_dist_w(f,a);
21
22* Stella X. Yu, Nov 19, 2001.
23*=================================================================*/
24
25# include "mex.h"
26# include "math.h"
27
28void mexFunction(
29 int nargout,
30 mxArray *out[],
31 int nargin,
32 const mxArray *in[]
33)
34{
35 /* declare variables */
36 int nr, nc, np, nW, total;
37 int i, j, k, t, ix, iy, jx, jy, ii, jj, iip1, jjp1, iip2, jjp2, step,nrSubgrid, ncSubgrid;
38 double sigma, di, dj, a, z, maxori, phase1, phase2, slope;
39 int *ir, *jc;
40 /* unsigned long *pi, *pj, *subpi; */
41 unsigned int *pi, *pj, *subpi;
42 double *emag, *ephase, *w,*tmp,*subgrid;
43
44
45 /* check argument */
46 if (nargin<8) {
47 mexErrMsgTxt("Eight input arguments required");
48 }
49 if (nargout>1) {
50 mexErrMsgTxt("Too many output arguments");
51 }
52
53 /* get edgel information */
54 nr = mxGetM(in[0]);
55 nc = mxGetN(in[0]);
56 if ( nr*nc ==0 || nr != mxGetM(in[1]) || nc != mxGetN(in[1]) ) {
57 mexErrMsgTxt("Edge magnitude and phase shall be of the same image size");
58 }
59 emag = mxGetPr(in[0]);
60 ephase = mxGetPr(in[1]);
61 np = nr * nc;
62
63 /*get subgrid information*/
64
65 tmp = mxGetData(in[5]);
66 nrSubgrid = (int)tmp[0];
67 tmp = mxGetData(in[6]);
68 ncSubgrid = (int)tmp[0];
69
70 /* printf("nrSubgrid=%d\n",nrSubgrid);
71 printf("ncSubgrid=%d\n",ncSubgrid); */
72 if (nrSubgrid* ncSubgrid != mxGetM(in[4])*mxGetN(in[4])) {
73 mexErrMsgTxt("Error in the size of the subgrid");
74 }
75 subgrid = mxGetData(in[4]);
76 nW = nrSubgrid * ncSubgrid;
77
78 /* get new index pair */
79 if (!mxIsUint32(in[2]) | !mxIsUint32(in[3])) {
80 mexErrMsgTxt("Index pair shall be of type UINT32");
81 }
82 if (mxGetM(in[3]) * mxGetN(in[3]) != nW + 1) {
83 mexErrMsgTxt("Wrong index representation");
84 }
85 pi = mxGetData(in[2]);
86 pj = mxGetData(in[3]);
87 subpi = mxGetData(in[7]);
88 /*{printf("pi[50] = %d\n",pi[50]);}
89 {printf("subpi[5] = %d\n",subpi[5]);}
90 {printf("subpi[6] = %d\n",subpi[6]);}
91 {printf("subpi[4] = %d\n",subpi[4]);}*/
92
93 /* create output */ /*!!!!!!!!!!!!!!!!!!!!!!!changer taille output!!!!!!!!!!*/
94 out[0] = mxCreateSparse(nW,nW,pj[nW],mxREAL);
95 if (out[0]==NULL) {
96 mexErrMsgTxt("Not enough memory for the output matrix");
97 }
98 w = mxGetPr(out[0]);
99 ir = mxGetIr(out[0]);
100 jc = mxGetJc(out[0]);
101
102 /* find my sigma */
103 if (nargin<9) {
104 sigma = 0;
105 for (k=0; k<np; k++) {
106 if (emag[k]>sigma) { sigma = emag[k]; }
107 }
108 sigma = sigma / 6;
109 printf("sigma = %6.5f",sigma);
110 } else {
111 sigma = mxGetScalar(in[8]);
112 }
113 a = 0.5 / (sigma * sigma);
114
115 /* computation */
116 total = 0;
117
118 for (j=0; j<nW; j++){
119 t= (int)subgrid[j]-1; /*on parcourt tous les pixels de la sous-grille dans la grille d'origine*/
120
121 jc[j] = total; /* total represente le nombre voisins du pixel j*/
122 jx = t / nr; /* col */
123 jy = t % nr; /* row */
124
125 for (k=pj[j]; k<pj[j+1]; k++) { /*k represente les indices correspondant au pixel j dans pi*/
126
127 i = pi[k]-1; /*i est un voisin de j a considerer*/
128
129 if (i==j) {
130 maxori = 1;
131
132 } else {
133
134 ix = i / nr;
135 iy = i % nr;
136
137 /* scan */
138 di = (double) (iy - jy);
139 dj = (double) (ix - jx);
140
141 maxori = 0.;
142 phase1 = ephase[j];
143
144
145 /* sample in i direction */
146 if (abs(di) >= abs(dj)) {
147 slope = dj / di;
148 step = (iy>=jy) ? 1 : -1;
149
150 iip1 = jy;
151 jjp1 = jx;
152
153
154 for (ii=0;ii<abs(di);ii++){
155 iip2 = iip1 + step;
156 jjp2 = (int)(0.5 + slope*(iip2-jy) + jx);
157
158 phase2 = ephase[iip2+jjp2*nr];
159
160 if (phase1 != phase2) {
161 z = (emag[iip1+jjp1*nr] + emag[iip2+jjp2*nr]);
162 if (z > maxori){
163 maxori = z;
164 }
165 }
166
167 iip1 = iip2;
168 jjp1 = jjp2;
169 phase1 = phase2;
170 }
171
172 /* sample in j direction */
173 } else {
174 slope = di / dj;
175 step = (ix>=jx) ? 1: -1;
176
177 jjp1 = jx;
178 iip1 = jy;
179
180
181 for (jj=0;jj<abs(dj);jj++){
182 jjp2 = jjp1 + step;
183 iip2 = (int)(0.5+ slope*(jjp2-jx) + jy);
184
185 phase2 = ephase[iip2+jjp2*nr];
186
187 if (phase1 != phase2){
188 z = (emag[iip1+jjp1*nr] + emag[iip2+jjp2*nr]);
189 if (z > maxori){
190 maxori = z;
191 }
192
193 }
194
195 iip1 = iip2;
196 jjp1 = jjp2;
197 phase1 = phase2;
198 }
199 }
200
201 maxori = 0.5 * maxori;
202 maxori = exp(-maxori * maxori * a);
203 }
204 /*if (total<20) {printf("subpi[k] = %d\n",subpi[k]);}*/
205
206 ir[total] = (int)subpi[k];
207/*if (total<20) {printf("ir[total] = %d\n",ir[total]);}*/
208 w[total] = maxori;
209 total = total + 1;
210
211 } /* i */
212 } /*j*/
213 /*printf("total = %d\n",total);*/
214 /*printf("ir[100] = %d\n",ir[100]);*/
215 jc[nW] = total;
216}
diff --git a/SD-VBS/common/toolbox/MultiNcut/multiAffinityic.dll b/SD-VBS/common/toolbox/MultiNcut/multiAffinityic.dll
new file mode 100755
index 0000000..f9b6bc9
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/multiAffinityic.dll
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/multiAffinityic.mexa64 b/SD-VBS/common/toolbox/MultiNcut/multiAffinityic.mexa64
new file mode 100755
index 0000000..9a2a3cc
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/multiAffinityic.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/multiAffinityic.mexglx b/SD-VBS/common/toolbox/MultiNcut/multiAffinityic.mexglx
new file mode 100755
index 0000000..ec11a0e
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/multiAffinityic.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.c b/SD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.c
new file mode 100755
index 0000000..0cae523
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.c
@@ -0,0 +1,126 @@
1/*================================================================
2* function w = intensityWppc(image,pi,pj,rMin,sigmaX,sigmaIntensite,valeurMinW )
3* Input:
4* [pi,pj] = index pair representation for MALTAB sparse matrices
5* Output:
6* w = affinity with IC at [pi,pj]
7*
8
9pixels i and j (corresponding to the sampling in pi,pj) are fully connected when d(i,j) <= rmin;
10
11% test sequence
12f = synimg(10);
13[i,j] = cimgnbmap(size(f),2);
14[ex,ey,egx,egy] = quadedgep(f);
15a = affinityic(ex,ey,egx,egy,i,j)
16show_dist_w(f,a);
17
18* Stella X. Yu, Nov 19, 2001.
19*=================================================================*/
20
21# include "mex.h"
22# include "math.h"
23
24void mexFunction(
25 int nargout,
26 mxArray *out[],
27 int nargin,
28 const mxArray *in[]
29)
30{
31 /* declare variables */
32 int nr, nc, np, total;
33 int i, j, k, ix, iy, jx, jy;
34 int *ir, *jc;
35 int squareDistance;
36 /* unsigned long *pi, *pj; */
37unsigned int *pi, *pj;
38 double *w;
39
40 double temp,a1,a2,wij;
41 double rMin;
42 double sigmaX, sigmaIntensite,valeurMinW;
43 double *image;
44
45 /* check argument */
46 if (nargin<7) {
47 mexErrMsgTxt("Four input arguments required");
48 }
49 if (nargout>1) {
50 mexErrMsgTxt("Too many output arguments");
51 }
52
53 /* get edgel information */
54 nr = mxGetM(in[0]);
55 nc = mxGetN(in[0]);
56 np = nr * nc;
57
58 image = mxGetPr(in[0]);
59
60
61
62 /* get new index pair */
63 if (!mxIsUint32(in[1]) | !mxIsUint32(in[2])) {
64 mexErrMsgTxt("Index pair shall be of type UINT32");
65 }
66 if (mxGetM(in[2]) * mxGetN(in[2]) != np + 1) {
67 mexErrMsgTxt("Wrong index representation");
68 }
69 pi = mxGetData(in[1]);
70 pj = mxGetData(in[2]);
71
72 /* create output */
73 out[0] = mxCreateSparse(np,np,pj[np],mxREAL);
74 if (out[0]==NULL) {
75 mexErrMsgTxt("Not enough memory for the output matrix");
76 }
77 w = mxGetPr(out[0]);
78 ir = mxGetIr(out[0]);
79 jc = mxGetJc(out[0]);
80
81 rMin = mxGetScalar(in[3]);
82 sigmaX = mxGetScalar(in[4]);
83 sigmaIntensite= mxGetScalar(in[5]);
84 valeurMinW = mxGetScalar(in[6]);
85
86 a1 = 1.0/ (sigmaX*sigmaX);
87 a2 = 1.0 / (sigmaIntensite*sigmaIntensite );
88
89 /* computation */
90 total = 0;
91 for (j=0; j<np; j++) {
92
93 jc[j] = total;
94 jx = j / nr; /* col */
95 jy = j % nr; /* row */
96
97 for (k=pj[j]; k<pj[j+1]; k++) {
98
99 i = pi[k];
100
101 if (i==j) {
102 wij= 1; /*voir*/
103
104 } else {
105 ix = i / nr;
106 iy = i % nr;
107
108 squareDistance = (ix-jx)*(ix-jx)+(iy-jy)*(iy-jy);
109
110 temp = image[i]-image[j];
111 wij = exp(- squareDistance * a1 - temp*temp * a2 );
112 /*if(wij < valeurMinW)
113 wij = -0.1;*/
114 }
115 ir[total] = i;
116
117 w[total] = wij;
118 total = total + 1;
119
120 } /* i */
121
122 } /* j */
123
124 jc[np] = total;
125}
126
diff --git a/SD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.dll b/SD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.dll
new file mode 100755
index 0000000..a47e22d
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.dll
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.mexa64 b/SD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.mexa64
new file mode 100755
index 0000000..06b2f57
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.mexglx b/SD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.mexglx
new file mode 100755
index 0000000..c6eed07
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/multiIntensityFirstLayer.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.c b/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.c
new file mode 100755
index 0000000..e01e516
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.c
@@ -0,0 +1,158 @@
1/*================================================================
2* function w = multiIntensityWppc(image,pi,pj,rMin,sigmaX,sigmaIntensite,valeurMinW,
3* subgrid,nrSubgrid,ncSubgrid,subpi)
4* Input:
5* [pi,pj] = index pair representation for MALTAB sparse matrices
6* Output:
7* w = affinity with IC at [pi,pj]
8*
9
10imageX,wiInOriginalImage,wwj,rMin,dataWpp.sigmaX,sigmaI,minW,subgrid{1,i},p(i),q(i),wi{i}
11
12
13pixels i and j (corresponding to the sampling in pi,pj) are fully connected when d(i,j) <= rmin;
14
15% test sequence
16f = synimg(10);
17[i,j] = cimgnbmap(size(f),2);
18[ex,ey,egx,egy] = quadedgep(f);
19a = affinityic(ex,ey,egx,egy,i,j)
20show_dist_w(f,a);
21
22* Stella X. Yu, Nov 19, 2001.
23*=================================================================*/
24
25# include "mex.h"
26# include "math.h"
27
28void mexFunction(
29 int nargout,
30 mxArray *out[],
31 int nargin,
32 const mxArray *in[]
33)
34{
35 /* declare variables */
36 int nr, nc, np, nW, total;
37 int i, j, k, t, ix, iy, jx, jy, nrSubgrid, ncSubgrid;
38 int *ir, *jc;
39 int squareDistance;
40 /* unsigned long *pi, *pj, *subpi; */
41 unsigned int *pi, *pj, *subpi;
42 double *w, *subgrid, *tmp;
43
44 double temp,a1,a2,wij;
45 double rMin;
46 double sigmaX, sigmaIntensite,valeurMinW;
47 double *image;
48
49 /* check argument */
50 if (nargin<11) {
51 mexErrMsgTxt("Eleven input arguments required");
52 }
53 if (nargout>1) {
54 mexErrMsgTxt("Too many output arguments");
55 }
56
57 /* get edgel information */
58 nr = mxGetM(in[0]);
59 nc = mxGetN(in[0]);
60 np = nr * nc;
61 /*printf("size: %d, %d, %d\n", nc, nr, np); */
62 image = mxGetPr(in[0]);
63
64
65 /*get subgrid information*/
66
67 tmp = mxGetData(in[8]);
68 nrSubgrid = (int)tmp[0];
69
70 /* printf("image end = %f ", image[np-1]); */
71
72 tmp = mxGetData(in[9]);
73 ncSubgrid = (int)tmp[0];
74
75 if (nrSubgrid* ncSubgrid != mxGetM(in[7])*mxGetN(in[7])) {
76 mexErrMsgTxt("Error in the size of the subgrid");
77 }
78 subgrid = mxGetData(in[7]);
79 nW = nrSubgrid * ncSubgrid;
80
81
82
83
84 /* get new index pair */
85 if (!mxIsUint32(in[1]) | !mxIsUint32(in[2])) {
86 mexErrMsgTxt("Index pair shall be of type UINT32");
87 }
88 if (mxGetM(in[2]) * mxGetN(in[2]) != nW + 1) {
89 mexErrMsgTxt("Wrong index representation");
90 }
91 pi = mxGetData(in[1]);
92 pj = mxGetData(in[2]);
93 subpi = mxGetData(in[10]);
94
95 /* create output */
96 out[0] = mxCreateSparse(nW,nW,pj[nW],mxREAL);
97 if (out[0]==NULL) {
98 mexErrMsgTxt("Not enough memory for the output matrix");
99 }
100
101 w = mxGetPr(out[0]);
102 ir = mxGetIr(out[0]);
103 jc = mxGetJc(out[0]);
104
105
106 rMin = mxGetScalar(in[3]);
107 sigmaX = mxGetScalar(in[4]);
108 sigmaIntensite= mxGetScalar(in[5]);
109 valeurMinW = mxGetScalar(in[6]);
110
111 a1 = 1.0/ (sigmaX*sigmaX);
112 a2 = 1.0 / (sigmaIntensite*sigmaIntensite );
113
114
115
116 /* computation */
117 total = 0;
118 for (j=0; j<nW; j++) {
119
120 t= (int)subgrid[j]-1; /*on parcourt tous les pixels de la sous-grille dans la grille d'origine*/
121 if ( (t<0) || (t>np-1)) {printf("badddddd!");}
122 /* printf("t = %d\n",t);
123 printf("j = %d\n",j); */
124 jc[j] = total;
125 jx = t / nr; /* col */
126 jy = t % nr; /* row */
127 /* printf("pj[j+1] = %d\n",pj[j+1]); */
128
129 for (k=pj[j]; k<pj[j+1]; k++) {
130 /* printf("k = %d\n",k); */
131 i = pi[k]-1;
132 ix = i / nr;
133 iy = i % nr;
134 squareDistance = (ix-jx)*(ix-jx)+(iy-jy)*(iy-jy);/*abs(ix-jx)+abs(iy-jy);*/
135 if (squareDistance <= rMin) { wij = 1;}
136 else {
137 temp = image[i]-image[t];
138 wij = exp(- squareDistance * a1 - temp*temp * a2 );
139 /*if(wij < valeurMinW)
140 wij = 0;*/
141 /*wij = exp( - temp*temp * a2 );*/
142 }
143
144 ir[total] = (int)subpi[k];
145
146 /* if (ir[total] >5000*5000 ) {printf("trouble! [%d,%d]\n",k,(int)subpi[k]);} */
147
148 w[total] = wij;
149
150 total = total + 1;
151
152 } /* i */
153
154
155 } /* j */
156
157 jc[nW] = total;
158}
diff --git a/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.dll b/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.dll
new file mode 100755
index 0000000..16146c1
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.dll
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.mexa64 b/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.mexa64
new file mode 100755
index 0000000..525ca62
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.mexglx b/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.mexglx
new file mode 100755
index 0000000..a17fa03
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/multiIntensityWppc.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/quadedgep2.m b/SD-VBS/common/toolbox/MultiNcut/quadedgep2.m
new file mode 100755
index 0000000..5041377
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/quadedgep2.m
@@ -0,0 +1,188 @@
1% function [xs,ys,gx,gy,par,threshold,mag,mage,g,FIe,FIo,mago] = quadedgep(I,par,threshold);
2% Input:
3% I = image
4% par = vector for 4 parameters
5% [number of filter orientations, number of scale, filter size, elongation]
6% To use default values, put 0.
7% threshold = threshold on edge strength
8% Output:
9% [x,y,gx,gy] = locations and gradients of an ordered list of edgels
10% x,y could be horizontal or vertical or 45 between pixel sites
11% but it is guaranteed that there [floor(y) + (floor(x)-1)*nr]
12% is ordered and unique. In other words, each edgel has a unique pixel id.
13% par = actual par used
14% threshold = actual threshold used
15% mag = edge magnitude
16% mage = phase map
17% g = gradient map at each pixel
18% [FIe,FIo] = odd and even filter outputs
19% mago = odd filter output of optimum orientation
20
21% Stella X. Yu, 2001
22
23% This is the multi scale version of the filtering
24% For the moment the parameters are defined by default. See line 34
25
26
27function [x,y,gx,gy,par,threshold,mag_s,mage,g,FIe,FIo,mago] = quadedgep2(I,par,data,threshold);
28
29
30if nargin<4 | isempty(threshold),
31 threshold = 0.1;
32end
33
34[r,c] = size(I);
35def_par = [4,30,3];
36
37display_on = 1;
38
39% take care of parameters, any missing value is substituted by a default value
40if nargin<2 | isempty(par),
41 par = def_par;
42end
43% par(end+1:4)=0;
44% par = par(:);
45% j = (par>0);
46% have_value = [ j, 1-j ];
47% j = 1; n_filter = have_value(j,:) * [par(j); def_par(j)];
48% j = 2; n_scale = have_value(j,:) * [par(j); def_par(j)];
49% j = 3; winsz = have_value(j,:) * [par(j); def_par(j)];
50% j = 4; enlong = have_value(j,:) * [par(j); def_par(j)];
51
52n_ori = par(1); %if it doesn't work, par<-def_par
53
54winsz = par(2);
55enlong = par(3);
56
57% always make filter size an odd number so that the results will not be skewed
58j = winsz/2;
59if not(j > fix(j) + 0.1),
60 winsz = winsz + 1;
61end
62
63% filter the image with quadrature filters
64if (isempty(data.W.scales))
65 error ('no scales entered');
66end
67
68n_scale=length(data.W.scales);
69filter_scales=data.W.scales;
70%
71% if strcmp(data.dataWpp.mode,'multiscale')
72% n_scale=size((data.dataWpp.scales),2);
73% filter_scales=data.dataWpp.scales;
74% else
75% filter_scales=data.dataWpp.scales(1);
76% n_scale=1;
77% end
78% if n_scale>0&&strcmp(data.dataWpp.mode,'multiscale')
79% if (~isempty(data.dataWpp.scales))
80% filter_scales=data.dataWpp.scales;
81% else
82% filter_scales=zeros(1,n_scale);
83%
84% for i=1:n_scale,
85% filter_scales(i)=(sqrt(2))^(i-1);
86% end
87% data.dataWpp.scales=filter_scales;
88% end
89% else filter_scale=1;
90% data.dataWpp.scales=filter_scales;
91% end
92%
93% %%%%%%% juste pour que ca tourne
94% if ~strcmp(data.dataWpp.mode,'multiscale')
95% filter_scales=data.dataWpp.scales(1);
96% n_scale=4;
97% end
98% %%%%%%%%%%%%
99
100FBo = make_filterbank_odd2(n_ori,filter_scales,winsz,enlong);
101FBe = make_filterbank_even2(n_ori,filter_scales,winsz,enlong);
102n = ceil(winsz/2);
103f = [fliplr(I(:,2:n+1)), I, fliplr(I(:,c-n:c-1))];
104f = [flipud(f(2:n+1,:)); f; flipud(f(r-n:r-1,:))];
105FIo = fft_filt_2(f,FBo,1);
106FIo = FIo(n+[1:r],n+[1:c],:);
107FIe = fft_filt_2(f,FBe,1);
108FIe = FIe(n+[1:r],n+[1:c],:);
109
110% compute the orientation energy and recover a smooth edge map
111% pick up the maximum energy across scale and orientation
112% even filter's output: as it is the second derivative, zero cross localize the edge
113% odd filter's output: orientation
114
115[nr,nc,nb] = size(FIe);
116
117FIe = reshape(FIe, nr,nc,n_ori,length(filter_scales));
118FIo = reshape(FIo, nr,nc,n_ori,length(filter_scales));
119
120mag_s = zeros(nr,nc,n_scale);
121mag_a = zeros(nr,nc,n_ori);
122
123mage = zeros(nr,nc,n_scale);
124mago = zeros(nr,nc,n_scale);
125mage = zeros(nr,nc,n_scale);
126mago = zeros(nr,nc,n_scale);
127
128
129
130for i = 1:n_scale,
131 mag_s(:,:,i) = sqrt(sum(FIo(:,:,:,i).^2,3)+sum(FIe(:,:,:,i).^2,3));
132 mag_a = sqrt(FIo(:,:,:,i).^2+FIe(:,:,:,i).^2);
133 [tmp,max_id] = max(mag_a,[],3);
134
135 base_size = nr * nc;
136 id = [1:base_size]';
137 mage(:,:,i) = reshape(FIe(id+(max_id(:)-1)*base_size+(i-1)*base_size*n_ori),[nr,nc]);
138 mago(:,:,i) = reshape(FIo(id+(max_id(:)-1)*base_size+(i-1)*base_size*n_ori),[nr,nc]);
139
140 mage(:,:,i) = (mage(:,:,i)>0) - (mage(:,:,i)<0);
141
142 if display_on,
143 ori_incr=pi/n_ori; % to convert jshi's coords to conventional image xy
144 ori_offset=ori_incr/2;
145 theta = ori_offset+([1:n_ori]-1)*ori_incr; % orientation detectors
146 % [gx,gy] are image gradient in image xy coords, winner take all
147
148 ori = theta(max_id);
149 ori = ori .* (mago(:,:,i)>0) + (ori + pi).*(mago(:,:,i)<0);
150 gy{i} = mag_s(:,:,i) .* cos(ori);
151 gx{i} = -mag_s(:,:,i) .* sin(ori);
152 g = cat(3,gx{i},gy{i});
153
154 % phase map: edges are where the phase changes
155 mag_th = max(max(mag_s(:,:,i))) * threshold;
156 eg = (mag_s(:,:,i)>mag_th);
157 h = eg & [(mage(2:r,:,i) ~= mage(1:r-1,:,i)); zeros(1,nc)];
158 v = eg & [(mage(:,2:c,i) ~= mage(:,1:c-1,i)), zeros(nr,1)];
159 [y{i},x{i}] = find(h | v);
160 k = y{i} + (x{i}-1) * nr;
161 h = h(k);
162 v = v(k);
163 y{i} = y{i} + h * 0.5; % i
164 x{i} = x{i} + v * 0.5; % j
165 t = h + v * nr;
166 gx{i} = g(k) + g(k+t);
167 k = k + (nr * nc);
168 gy{i} = g(k) + g(k+t);
169
170% figure(1);
171% clf;
172% imagesc(I);colormap(gray);
173% hold on;
174% quiver(x,y,gx,gy); hold off;
175% title(sprintf('scale = %d, press return',i));
176
177 % pause;
178 0;
179else
180 x = [];
181 y = [];
182 gx = [];
183 gy =[];
184 g= [];
185 end
186end
187
188
diff --git a/SD-VBS/common/toolbox/MultiNcut/quickNcutHardBiais2.m b/SD-VBS/common/toolbox/MultiNcut/quickNcutHardBiais2.m
new file mode 100755
index 0000000..3ca1046
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/quickNcutHardBiais2.m
@@ -0,0 +1,187 @@
1% function [v,s] = quickNcutHardBiais(W,U,nbEigenValues,dataGraphCut)
2%ligne 35 : changement tim
3%[v,s] = ncut(W,nbEigenValues,[],offset);
4%devient :
5%[v,s] = tim_ncut_rapide(W,nbEigenValues,[],offset);
6%et eigs devient tim_eigs
7
8% Input:
9% W = affinity matrix
10% U = hard constraint matrix, could be a cell of partial grouping
11% nbEigenValues = number of eigenvectors
12% offset = regularization factor, default = 0
13% Output:
14% v = eigenvector
15% s = eigenvalue of (W,d), s.t. U' * x = 0.
16
17% call eigs using my own * operation
18
19% Stella X. Yu, Jan 2002.
20
21function [v,s] = quickNcutHardBiais2(W,U,nbEigenValues,dataGraphCut)%voir : rajouter sigma
22n = size(W,1);
23nbEigenValues = min(nbEigenValues,n);
24
25offset = dataGraphCut.offset;
26%offset = 2;
27
28% degrees and regularization
29d = sum(abs(W),2);
30dr = 0.5 * (d - sum(W,2));
31d = d + offset * 2;
32dr = dr + offset;
33W = W + spdiags(dr,0,n,n);
34clear dr
35
36% normalize
37Dinvsqrt = 1./sqrt(d+eps);
38P = spmtimesd(W,Dinvsqrt,Dinvsqrt);
39clear W;
40
41% if max(max(P-P')) < 1e-10 %ou eps
42% %S = sparse(1:n,1:n,0.5);
43% P =max(P,P');
44% % P=S*(P+P');
45% %P=0.5*(P+P');
46% options.issym = 1;
47% end
48P = sparsifyc(P,dataGraphCut.valeurMin);
49options.issym = 1;
50
51Ubar = spmtimesd(U,Dinvsqrt,[]);
52%Ubar = sparsifyc(Ubar,dataGraphCut.valeurMin); %voir
53
54options.disp = dataGraphCut.verbose;
55options.maxit = dataGraphCut.maxiterations;
56options.tol = dataGraphCut.eigsErrorTolerance;
57
58options.v0 = ones(size(P,1),1);%voir
59
60options.p = max(35,2*nbEigenValues); %voir
61options.p = min(options.p , n);
62
63% nouvelle idee : factorisation de Cholesky
64C=Ubar'*Ubar;
65%permutation = symamd(C);
66%R = cholinc(C(permutation,permutation));
67t_chol_Ubar = cputime;
68[R,ooo] = cholinc(C,'0');
69t_chol_Ubar = cputime - t_chol_Ubar;
70%if error occurs, check if Ubar = sparsifyc(Ubar,dataGraphCut.valeurMin);
71%sparsifies too much
72
73
74% compute H = (Ubar'*Ubar)^(-1)
75% t_inv_H = cputime;
76% H = inv(sparsifyc(Ubar' * Ubar,dataGraphCut.valeurMin)); %changer
77% t_inv_H = cputime - t_inv_H;
78% H = sparsifyc(H,dataGraphCut.valeurMin);
79% tEigs = cputime;
80% if options.issym & max(max(H-H')) < 1e-10
81% [vbar,s,convergence] = tim_eigs(@mex_projection_inv_symmetric,n,nbEigenValues,'lm',options,triu(P),Ubar,triu(H));
82% else
83% [vbar,s,convergence] = tim_eigs(@mex_projection_inv,n,nbEigenValues,'lm',options,P,Ubar,H);
84% end
85% tEigs = cputime - tEigs;
86%
87
88
89
90R = sparsifyc(R,dataGraphCut.valeurMin);
91tEigs = cputime;
92if options.issym
93 [vbar,s,convergence] = tim_eigs(@mex_projection_QR_symmetric,n,nbEigenValues,'lm',options,tril(P),Ubar,R);
94else
95 [vbar,s,convergence] = tim_eigs(@mex_projection_QR,n,nbEigenValues,'lm',options,P,Ubar,R);
96end
97tEigs = cputime - tEigs;
98
99
100%afficheTexte(sprintf('\n\nTemps ecoule pendant eigs : %g',tEigs),dataGraphCut.verbose,2);
101%afficheTexte(sprintf('\nTemps ecoule pendant chol(Ubar''*Ubar) : %g',t_chol_Ubar),dataGraphCut.verbose);
102if convergence~=0
103 afficheTexte(sprintf(' (Non-convergence)'),dataGraphCut.verbose);
104end
105
106
107%disp(sprintf('nnz(P) : %f\n',nnz(P)));
108%disp(sprintf('nnz(Ubar) : %f\n',nnz(Ubar)));
109%disp(sprintf('nnz(R) : %f\n',nnz(R)));
110%disp(sprintf('nnz(global) : %f\n',nnz(P) + 4 * nnz(Ubar) + 4*nnz(R)));
111
112
113
114s = real(diag(s));
115[x,y] = sort(-s);
116s = -x;
117vbar = vbar(:,y);
118
119
120v = spdiags(Dinvsqrt,0,n,n) * vbar;
121
122for i=1:size(v,2)
123 %v(:,i) = v(:,i) / max(abs(v(:,i)));
124 v(:,i) = (v(:,i) / norm(v(:,i)) )*norm(ones(n,1));
125 if v(1,i)~=0
126 v(:,i) = - v(:,i) * sign(v(1,i));
127 end
128end
129
130% % nouvelle idee : factorisation de Cholesky
131% t_chol_Ubar = cputime;
132% R = chol(Ubar' * Ubar);
133% t_chol_Ubar = cputime - t_chol_Ubar;
134% R = sparsifyc(R,dataGraphCut.valeurMin);
135% tEigs = cputime;
136% if options.issym
137% [vbar,s,convergence] = tim_eigs(@mex_projection_QR_symmetric,n,nbEigenValues,'lm',options,triu(P),Ubar,R);
138% else
139% [vbar,s,convergence] = tim_eigs(@mex_projection_QR,n,nbEigenValues,'lm',options,P,Ubar,R);
140% end
141% tEigs = cputime - tEigs;
142
143
144% % compute H = (Ubar'*Ubar)^(-1)
145% t_inv_H = cputime;
146% H = inv(sparsifyc(Ubar' * Ubar,dataGraphCut.valeurMin)); %changer
147% t_inv_H = cputime - t_inv_H;
148% H = sparsifyc(H,dataGraphCut.valeurMin);
149% tEigs = cputime;
150% if options.issym & max(max(H-H')) < 1e-10
151% [vbar,s,convergence] = tim_eigs(@mex_projection_inv_symmetric,n,nbEigenValues,'lm',options,triu(P),Ubar,triu(H));
152% else
153% [vbar,s,convergence] = tim_eigs(@mex_projection_inv,n,nbEigenValues,'lm',options,P,Ubar,H);
154% end
155% tEigs = cputime - tEigs;
156
157
158
159% % idee de mon rapport... semble pas marcher car R = qr(Ubar,0) est plus
160% % lent que H = inv(sparsifyc(Ubar' * Ubar,dataGraphCut.valeurMin));
161% t_qr_Ubar = cputime;
162% R = qr(Ubar,0);
163% t_qr_Ubar = cputime - t_qr_Ubar;
164% R = sparsifyc(R,dataGraphCut.valeurMin);
165% tEigs2 = cputime;
166% if options.issym
167% [vbar2,s2,convergence] = tim_eigs(@mex_projection_QR_symmetric,n,nbEigenValues,'lm',options,triu(P),Ubar,R);
168% else
169% [vbar2,s2,convergence] = tim_eigs(@mex_projection_QR,n,nbEigenValues,'lm',options,P,Ubar,R);
170% end
171% tEigs2 = cputime - tEigs2;
172
173
174
175% idee de Jianbo... semble pas marcher car on a besoin de prendre k maximal
176% dans [A,S,B] = svds(Ubar,k);
177%
178% [A,S,B] = svds(Ubar,300);
179% A = sparsifyc(A,dataGraphCut.valeurMin);
180% tEigs = cputime;
181% [vbar,s,convergence] = tim_eigs(@mex_projection_svd,n,nbEigenValues,'lm',options,P,A);
182
183% afficheTexte(sprintf('\ninv(H) : %g',t_inv_H),dataGraphCut.verbose);
184% afficheTexte(sprintf('\n\nTemps ecoule pendant eigs : %g',tEigs2),dataGraphCut.verbose,2);
185% afficheTexte(sprintf('\nqr(Ubar) : %g',t_qr_Ubar),dataGraphCut.verbose);
186% disp(sprintf('nnz(H) : %f\n',nnz(H)));
187% disp(sprintf('nnz(global) : %f\n',nnz(P) + 4 * nnz(Ubar) + 2*nnz(H)));
diff --git a/SD-VBS/common/toolbox/MultiNcut/read_data.m b/SD-VBS/common/toolbox/MultiNcut/read_data.m
new file mode 100755
index 0000000..c0929c0
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/read_data.m
@@ -0,0 +1,13 @@
1
2%fnames = dir('/home/jshi/Results_DLIB/SegLabl*.mat');
3
4fnames = dir('/data/jshi/DLIB/Results/Results_DLIB/SegLabl*.mat');
5
6for j=1:length(fnames),
7 cm = sprintf('load /data/jshi/DLIB/Results/Results_DLIB/%s',fnames(j).name);
8 disp(cm);eval(cm);
9figure(1);imagesc(I); colormap(gray); axis image;
10figure(2); imagesc(SegLabel); axis image;
11
12pause;
13end
diff --git a/SD-VBS/common/toolbox/MultiNcut/readimage.m b/SD-VBS/common/toolbox/MultiNcut/readimage.m
new file mode 100755
index 0000000..e45fa19
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/readimage.m
@@ -0,0 +1,15 @@
1function I = readimage(fn,maxSize);
2
3Io = imread(fn);
4[nr,nc,nb] = size(Io);
5
6if nb>1,
7 I = rgb2gray(Io);
8else
9 I= Io;
10end
11
12%maxSize = 400;
13if max(nr,nc) > maxSize,
14 I = imresize(I,maxSize/max(nr,nc));
15end
diff --git a/SD-VBS/common/toolbox/MultiNcut/run_script.m b/SD-VBS/common/toolbox/MultiNcut/run_script.m
new file mode 100755
index 0000000..3d2e8c6
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/run_script.m
@@ -0,0 +1,60 @@
1%% set path for the MNcut code
2
3if 1,
4% MNcutDir = '/home/jshi/Matlab/Toolbox/MultiNcut';
5 MNcutDir = 'C:\qihuizhu\Checkout\Human\Source\MultiNcut_new\MultiNcut';
6 path(path,MNcutDir);
7end
8
9%% set the image input and output dir.
10% imagedir = '/data/jshi/DLIB/image.cd';
11% imagedir = 'C:\qihuizhu\Checkout\Human\Source\Data\test';
12imagedir = 'C:\qihuizhu\Checkout\Human\Data\Current\baby_case5';
13% imageformat = 'ppm';
14imageformat = 'tif';
15
16% OutputDir = '/home/jshi/Results_DLIB';
17% OutputDir = 'C:\qihuizhu\Checkout\Human\Source\Data\test';
18OutputDir = 'C:\qihuizhu\Checkout\Human\Result\Segmentation\MultiNcut_new_03.07';
19
20a = dir(OutputDir);
21if (length(a) == 0),
22 cm = sprintf('mkdir %s',OutputDir);
23 disp(cm); eval(cm);
24end
25
26files = dir(sprintf('%s/*.%s',imagedir,imageformat));
27
28%% image size definition
29imageSize = 400;
30
31% for id =11:200,
32for id = 1:length(files)
33 %for id = 19:19,
34 I=readimage(sprintf('%s/%s',imagedir,files(id).name),imageSize);
35
36 num_segs = [10, 20];
37
38 tic
39 [SegLabel,eigenVectors,eigenValues]= MNcut(I,num_segs);
40 toc
41
42 for j=1:size(SegLabel,3),
43 [gx,gy] = gradient(SegLabel(:,:,j));
44 bw = (abs(gx)>0.1) + (abs(gy) > 0.1);
45
46 figure(1);clf; J1=showmask(double(I),bw); imagesc(J1);axis image;
47 cm = sprintf('print -djpeg %s/file%.4d-%.2d.jpg',OutputDir,id,num_segs(j)); disp(cm);eval(cm);
48
49
50 figure(10);imagesc(SegLabel(:,:,j));axis image;
51 cm = sprintf('print -djpeg %s/Seg%.4d-%.2d.jpg',OutputDir,id,num_segs(j));disp(cm);eval(cm);
52
53% pause;
54 end
55
56 fname = files(id).name;
57 %cm = sprintf('save %s/SegLabl%.4d.mat I SegLabel fname',OutputDir,id); disp(cm); eval(cm);
58 %cm = sprintf('save %s/SegEig%.4d.mat eigenVectors eigenValues',OutputDir,id);disp(cm); eval(cm);
59
60end
diff --git a/SD-VBS/common/toolbox/MultiNcut/showmask.m b/SD-VBS/common/toolbox/MultiNcut/showmask.m
new file mode 100755
index 0000000..6fd1142
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/showmask.m
@@ -0,0 +1,65 @@
1% function RGB=showmask(V,M,hue);
2% Input:
3% V = image
4% M = nonnegative mask
5% hue = a number in [0,1], red,yellow,green,cyan,...,red
6% a char, 'r','g','b','y','c','m'
7% or a matrix of the same size of image
8% eg. hue = mask1 * 0.7 + mask2 * 1;
9%
10% Output:
11% RGB = an RGB image with V as shades and M as saturated hues
12% If no output is required, this image is displayed.
13
14% Stella X. YU, 2000. Based on Jianbo Shi's version.
15
16function RGB=showmask(V,M,hue);
17
18if nargin<3 | isempty(hue),
19 hue = 0;
20end
21if ischar(hue),
22 switch hue,
23 case 'r', hue = 1.0;
24 case 'g', hue = 0.3;
25 case 'b', hue = 0.7;
26 case 'y', hue = 0.15;
27 case 'c', hue = 0.55;
28 case 'm', hue = 0.85;
29 end
30end
31
32
33V=V-min(V(:));
34V=V/max(V(:));
35V=.25+0.75*V; %brighten things up a bit
36
37M = double(M);
38M = M-min(M(:));
39M = M/max(M(:));
40
41H = hue+zeros(size(V));
42S = M;
43RGB = hsv2rgb(H,S,V);
44
45if nargout>0,
46 return;
47end
48
49hold off; image(RGB); axis('image');
50s = cell(1,2);
51if isempty(inputname(1)),
52 s{1} = 'image';
53else
54 s{1} = inputname(1);
55end
56if isempty(inputname(2)),
57 s{2} = 'mask';
58else
59 s{2} = inputname(2);
60end
61title(sprintf('%s and colored %s',s{1},s{2}));
62
63if nargout==0,
64 clear RGB;
65end
diff --git a/SD-VBS/common/toolbox/MultiNcut/sparsifyc.c b/SD-VBS/common/toolbox/MultiNcut/sparsifyc.c
new file mode 100755
index 0000000..82fca98
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/sparsifyc.c
@@ -0,0 +1,232 @@
1/*=================================================================
2* syntax: SPMX = SPARSIFY(MX, THRES)
3*
4* SPARSIFY - sparsify the input matrix, i.e. ignore the values
5* of the matrix which are below a threshold
6*
7* Input: - MX: m-by-n matrix (sparse or full)
8* - THRES: threshold value (double)
9*
10* Output: - SPMX: m-by-n sparse matrix only with values
11* whose absolut value is above the given threshold
12*
13* Written by Mirko Visontai (10/24/2003)
14*=================================================================*/
15
16
17#include <math.h>
18#include "mex.h"
19
20void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
21{
22 /* Declare variable */
23 int i,m,n,nzmax,newnnz,col,processed,passed;
24 int starting_row_index, current_row_index, stopping_row_index;
25 double *in_pr,*in_pi,*out_pr,*out_pi;
26 int *in_ir,*in_jc,*out_ir,*out_jc;
27 double thres;
28
29 /* Check for proper number of input and output arguments */
30 if ((nlhs != 1) || (nrhs != 2)){
31 mexErrMsgTxt("usage: SPMX = SPARSIFY(MX, THRES).");
32 }
33 /* if matrix is complex threshold the norm of the numbers */
34 if (mxIsComplex(prhs[0])){
35 /* Check data type of input argument */
36 if (mxIsSparse(prhs[0])){
37
38 /* read input */
39 in_pr = mxGetPr(prhs[0]);
40 in_pi = mxGetPi(prhs[0]);
41 in_ir = mxGetIr(prhs[0]);
42 in_jc = mxGetJc(prhs[0]);
43 nzmax = mxGetNzmax(prhs[0]);
44 m = mxGetM(prhs[0]);
45 n = mxGetN(prhs[0]);
46 thres = mxGetScalar(prhs[1]);
47
48 /* Count new nonzeros */
49 newnnz=0;
50 for(i=0; i<nzmax; i++){
51 if (sqrt(in_pr[i]*in_pr[i] + in_pi[i]*in_pi[i])>thres) {newnnz++;}
52 }
53
54 if (newnnz>0){
55 /* create output */
56 plhs[0] = mxCreateSparse(m,n,newnnz,mxCOMPLEX);
57 if (plhs[0]==NULL)
58 mexErrMsgTxt("Could not allocate enough memory!\n");
59 out_pr = mxGetPr(plhs[0]);
60 out_pi = mxGetPr(plhs[0]);
61 out_ir = mxGetIr(plhs[0]);
62 out_jc = mxGetJc(plhs[0]);
63 passed = 0;
64 out_jc[0] = 0;
65 for (col=0; col<n; col++){
66 starting_row_index = in_jc[col];
67 stopping_row_index = in_jc[col+1];
68 out_jc[col+1] = out_jc[col];
69 if (starting_row_index == stopping_row_index)
70 continue;
71 else {
72 for (current_row_index = starting_row_index;
73 current_row_index < stopping_row_index;
74 current_row_index++) {
75 if (sqrt(in_pr[current_row_index]*in_pr[current_row_index] +
76 in_pi[current_row_index]*in_pi[current_row_index] ) > thres){
77
78 out_pr[passed]=in_pr[current_row_index];
79 out_pi[passed]=in_pi[current_row_index];
80 out_ir[passed]=in_ir[current_row_index];
81 out_jc[col+1] = out_jc[col+1]+1;
82 passed++;
83 }
84 }
85 }
86 }
87 }
88 else{
89 plhs[0] = mxCreateSparse(m,n,0,mxCOMPLEX);
90 }
91 }
92 else{ /* for full matrices */
93 /* read input */
94 in_pr = mxGetPr(prhs[0]);
95 in_pi = mxGetPr(prhs[0]);
96 m = mxGetM(prhs[0]);
97 n = mxGetN(prhs[0]);
98 thres = mxGetScalar(prhs[1]);
99
100 /* Count new nonzeros */
101 newnnz=0;
102 for(i=0; i<m*n; i++){
103 if (sqrt(in_pr[i]*in_pr[i] + in_pi[i]*in_pi[i])>thres) {newnnz++;}
104 }
105
106 if (newnnz>0){
107 /* create output */
108 plhs[0] = mxCreateSparse(m,n,newnnz,mxCOMPLEX);
109 if (plhs[0]==NULL)
110 mexErrMsgTxt("Could not allocate enough memory!\n");
111 out_pr = mxGetPr(plhs[0]);
112 out_pi = mxGetPi(plhs[0]);
113 out_ir = mxGetIr(plhs[0]);
114 out_jc = mxGetJc(plhs[0]);
115 passed = 0;
116 out_jc[0] = 0;
117
118 for (col=0; col<n; col++){
119 out_jc[col+1] = out_jc[col];
120 for (current_row_index=0; current_row_index<m; current_row_index++){
121 if (sqrt(in_pr[current_row_index+m*col]*in_pr[current_row_index+m*col] +
122 in_pi[current_row_index+m*col]*in_pi[current_row_index+m*col]) > thres){
123
124 out_pr[passed]=in_pr[current_row_index+m*col];
125 out_ir[passed]=current_row_index;
126 out_jc[col+1] = out_jc[col+1]+1;
127 passed++;
128 }
129 }
130 }
131 }
132 else{
133 plhs[0] = mxCreateSparse(m,n,0,mxCOMPLEX);
134 }
135 }
136 }
137 else {
138 /* Check data type of input argument */
139 if (mxIsSparse(prhs[0])){
140
141 /* read input */
142 in_pr = mxGetPr(prhs[0]);
143 in_ir = mxGetIr(prhs[0]);
144 in_jc = mxGetJc(prhs[0]);
145 nzmax = mxGetNzmax(prhs[0]);
146 n = mxGetN(prhs[0]);
147 m = mxGetM(prhs[0]);
148 thres = mxGetScalar(prhs[1]);
149
150 /* Count new nonzeros */
151 newnnz=0;
152 for(i=0; i<nzmax; i++){
153 if ((fabs(in_pr[i]))>thres) {newnnz++;}
154 }
155
156 if (newnnz>0){
157 /* create output */
158 plhs[0] = mxCreateSparse(m,n,newnnz,mxREAL);
159 if (plhs[0]==NULL)
160 mexErrMsgTxt("Could not allocate enough memory!\n");
161 out_pr = mxGetPr(plhs[0]);
162 out_ir = mxGetIr(plhs[0]);
163 out_jc = mxGetJc(plhs[0]);
164 passed = 0;
165 out_jc[0] = 0;
166 for (col=0; col<n; col++){
167 starting_row_index = in_jc[col];
168 stopping_row_index = in_jc[col+1];
169 out_jc[col+1] = out_jc[col];
170 if (starting_row_index == stopping_row_index)
171 continue;
172 else {
173 for (current_row_index = starting_row_index;
174 current_row_index < stopping_row_index;
175 current_row_index++) {
176 if (fabs(in_pr[current_row_index])>thres){
177 out_pr[passed]=in_pr[current_row_index];
178 out_ir[passed]=in_ir[current_row_index];
179 out_jc[col+1] = out_jc[col+1]+1;
180 passed++;
181 }
182 }
183 }
184 }
185 }
186 else{
187 plhs[0] = mxCreateSparse(m,n,0,mxREAL);
188 }
189 }
190 else{ /* for full matrices */
191 /* read input */
192 in_pr = mxGetPr(prhs[0]);
193 n = mxGetN(prhs[0]);
194 m = mxGetM(prhs[0]);
195 thres = mxGetScalar(prhs[1]);
196
197 /* Count new nonzeros */
198 newnnz=0;
199 for(i=0; i<m*n; i++){
200 if ((fabs(in_pr[i]))>thres) {newnnz++;}
201 }
202
203 if (newnnz>0){
204 /* create output */
205 plhs[0] = mxCreateSparse(m,n,newnnz,mxREAL);
206 if (plhs[0]==NULL)
207 mexErrMsgTxt("Could not allocate enough memory!\n");
208 out_pr = mxGetPr(plhs[0]);
209 out_ir = mxGetIr(plhs[0]);
210 out_jc = mxGetJc(plhs[0]);
211 passed = 0;
212 out_jc[0] = 0;
213
214 for (col=0; col<n; col++){
215 out_jc[col+1] = out_jc[col];
216 for (current_row_index=0; current_row_index<m; current_row_index++){
217 if (fabs(in_pr[current_row_index+m*col])>thres){
218 out_pr[passed]=in_pr[current_row_index+m*col];
219 out_ir[passed]=current_row_index;
220 out_jc[col+1] = out_jc[col+1]+1;
221 passed++;
222 }
223 }
224 }
225 }
226 else{
227 plhs[0] = mxCreateSparse(m,n,0,mxREAL);
228 }
229 }
230 }
231}
232
diff --git a/SD-VBS/common/toolbox/MultiNcut/sparsifyc.dll b/SD-VBS/common/toolbox/MultiNcut/sparsifyc.dll
new file mode 100755
index 0000000..cf832a6
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/sparsifyc.dll
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/sparsifyc.mexa64 b/SD-VBS/common/toolbox/MultiNcut/sparsifyc.mexa64
new file mode 100755
index 0000000..2f5ed26
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/sparsifyc.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/sparsifyc.mexglx b/SD-VBS/common/toolbox/MultiNcut/sparsifyc.mexglx
new file mode 100755
index 0000000..0ba41b6
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/sparsifyc.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/sparsifyc.mexmac b/SD-VBS/common/toolbox/MultiNcut/sparsifyc.mexmac
new file mode 100755
index 0000000..caa2306
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/sparsifyc.mexmac
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/spmtimesd.c b/SD-VBS/common/toolbox/MultiNcut/spmtimesd.c
new file mode 100755
index 0000000..a98dc0a
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/spmtimesd.c
@@ -0,0 +1,141 @@
1/*================================================================
2* spmtimesd.c
3* This routine computes a sparse matrix times a diagonal matrix
4* whose diagonal entries are stored in a full vector.
5*
6* Examples:
7* spmtimesd(m,d,[]) = diag(d) * m,
8* spmtimesd(m,[],d) = m * diag(d)
9* spmtimesd(m,d1,d2) = diag(d1) * m * diag(d2)
10* m could be complex, but d is assumed real
11*
12* Stella X. Yu's first MEX function, Nov 9, 2001.
13
14% test sequence:
15
16m = 1000;
17n = 2000;
18a=sparse(rand(m,n));
19d1 = rand(m,1);
20d2 = rand(n,1);
21tic; b=spmtimesd(a,d1,d2); toc
22tic; bb = spdiags(d1,0,m,m) * a * spdiags(d2,0,n,n); toc
23e = (bb-b);
24max(abs(e(:)))
25
26*=================================================================*/
27
28# include "mex.h"
29
30void mexFunction(
31 int nargout,
32 mxArray *out[],
33 int nargin,
34 const mxArray *in[]
35)
36{
37 /* declare variables */
38 int i, j, k, m, n, nzmax, cmplx, xm, yn;
39 int *pir, *pjc, *qir, *qjc;
40 double *x, *y, *pr, *pi, *qr, *qi;
41
42 /* check argument */
43 if (nargin != 3) {
44 mexErrMsgTxt("Three input arguments required");
45 }
46 if (nargout>1) {
47 mexErrMsgTxt("Too many output arguments.");
48 }
49 if (!(mxIsSparse(in[0]))) {
50 mexErrMsgTxt("Input argument #1 must be of type sparse");
51 }
52 if ( mxIsSparse(in[1]) || mxIsSparse(in[2]) ) {
53 mexErrMsgTxt("Input argument #2 & #3 must be of type full");
54 }
55
56 /* computation starts */
57 m = mxGetM(in[0]);
58 n = mxGetN(in[0]);
59 pr = mxGetPr(in[0]);
60 pi = mxGetPi(in[0]);
61 pir = mxGetIr(in[0]);
62 pjc = mxGetJc(in[0]);
63
64 i = mxGetM(in[1]);
65 j = mxGetN(in[1]);
66 xm = ((i>j)? i: j);
67
68 i = mxGetM(in[2]);
69 j = mxGetN(in[2]);
70 yn = ((i>j)? i: j);
71
72 if ( xm>0 && xm != m) {
73 mexErrMsgTxt("Row multiplication dimension mismatch.");
74 }
75 if ( yn>0 && yn != n) {
76 mexErrMsgTxt("Column multiplication dimension mismatch.");
77 }
78
79
80 nzmax = mxGetNzmax(in[0]);
81 cmplx = (pi==NULL ? 0 : 1);
82 out[0] = mxCreateSparse(m,n,nzmax,cmplx);
83 if (out[0]==NULL) {
84 mexErrMsgTxt("Not enough space for the output matrix.");
85 }
86
87 qr = mxGetPr(out[0]);
88 qi = mxGetPi(out[0]);
89 qir = mxGetIr(out[0]);
90 qjc = mxGetJc(out[0]);
91
92 /* left multiplication */
93 x = mxGetPr(in[1]);
94 if (yn==0) {
95 for (j=0; j<n; j++) {
96 qjc[j] = pjc[j];
97 for (k=pjc[j]; k<pjc[j+1]; k++) {
98 i = pir[k];
99 qir[k] = i;
100 qr[k] = x[i] * pr[k];
101 if (cmplx) {
102 qi[k] = x[i] * pi[k];
103 }
104 }
105 }
106 qjc[n] = k;
107 return;
108 }
109
110 /* right multiplication */
111 y = mxGetPr(in[2]);
112 if (xm==0) {
113 for (j=0; j<n; j++) {
114 qjc[j] = pjc[j];
115 for (k=pjc[j]; k<pjc[j+1]; k++) {
116 qir[k] = pir[k];
117 qr[k] = pr[k] * y[j];
118 if (cmplx) {
119 qi[k] = qi[k] * y[j];
120 }
121 }
122 }
123 qjc[n] = k;
124 return;
125 }
126
127 /* both sides */
128 for (j=0; j<n; j++) {
129 qjc[j] = pjc[j];
130 for (k=pjc[j]; k<pjc[j+1]; k++) {
131 i = pir[k];
132 qir[k]= i;
133 qr[k] = x[i] * pr[k] * y[j];
134 if (cmplx) {
135 qi[k] = x[i] * qi[k] * y[j];
136 }
137 }
138 qjc[n] = k;
139 }
140
141}
diff --git a/SD-VBS/common/toolbox/MultiNcut/spmtimesd.dll b/SD-VBS/common/toolbox/MultiNcut/spmtimesd.dll
new file mode 100755
index 0000000..f78a650
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/spmtimesd.dll
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/spmtimesd.mexa64 b/SD-VBS/common/toolbox/MultiNcut/spmtimesd.mexa64
new file mode 100755
index 0000000..43c59e3
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/spmtimesd.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/spmtimesd.mexglx b/SD-VBS/common/toolbox/MultiNcut/spmtimesd.mexglx
new file mode 100755
index 0000000..5bc9ec4
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/spmtimesd.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/spmtimesd.mexmac b/SD-VBS/common/toolbox/MultiNcut/spmtimesd.mexmac
new file mode 100755
index 0000000..014113f
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/spmtimesd.mexmac
Binary files differ
diff --git a/SD-VBS/common/toolbox/MultiNcut/tim_eigs.m b/SD-VBS/common/toolbox/MultiNcut/tim_eigs.m
new file mode 100755
index 0000000..4b80262
--- /dev/null
+++ b/SD-VBS/common/toolbox/MultiNcut/tim_eigs.m
@@ -0,0 +1,1084 @@
1function varargout = tim_eigs(varargin)
2
3nombre_A_times_X = 0; %tim
4nombreIterations = 0; %tim
5
6%seule difference avec eigs :
7% arguments_Afun = varargin{7-Amatrix-Bnotthere:end};
8%(pour l'instant : n'accepte que 2 arguments dans le cas de Afun : Afun(W,X))
9%permet d'aller plus vite en minimisant les acces a varargin
10%(Timothee)
11
12%EIGS Find a few eigenvalues and eigenvectors of a matrix using ARPACK.
13% D = EIGS(A) returns a vector of A's 6 largest magnitude eigenvalues.
14% A must be square and should be large and sparse.
15%
16% [V,D] = EIGS(A) returns a diagonal matrix D of A's 6 largest magnitude
17% eigenvalues and a matrix V whose columns are the corresponding eigenvectors.
18%
19% [V,D,FLAG] = EIGS(A) also returns a convergence flag. If FLAG is 0
20% then all the eigenvalues converged; otherwise not all converged.
21%
22% EIGS(A,B) solves the generalized eigenvalue problem A*V == B*V*D. B must
23% be symmetric (or Hermitian) positive definite and the same size as A.
24% EIGS(A,[],...) indicates the standard eigenvalue problem A*V == V*D.
25%
26% EIGS(A,K) and EIGS(A,B,K) return the K largest magnitude eigenvalues.
27%
28% EIGS(A,K,SIGMA) and EIGS(A,B,K,SIGMA) return K eigenvalues based on SIGMA:
29% 'LM' or 'SM' - Largest or Smallest Magnitude
30% For real symmetric problems, SIGMA may also be:
31% 'LA' or 'SA' - Largest or Smallest Algebraic
32% 'BE' - Both Ends, one more from high end if K is odd
33% For nonsymmetric and complex problems, SIGMA may also be:
34% 'LR' or 'SR' - Largest or Smallest Real part
35% 'LI' or 'SI' - Largest or Smallest Imaginary part
36% If SIGMA is a real or complex scalar including 0, EIGS finds the eigenvalues
37% closest to SIGMA. For scalar SIGMA, and also when SIGMA = 'SM' which uses
38% the same algorithm as SIGMA = 0, B need only be symmetric (or Hermitian)
39% positive semi-definite since it is not Cholesky factored as in the other cases.
40%
41% EIGS(A,K,SIGMA,OPTS) and EIGS(A,B,K,SIGMA,OPTS) specify options:
42% OPTS.issym: symmetry of A or A-SIGMA*B represented by AFUN [{0} | 1]
43% OPTS.isreal: complexity of A or A-SIGMA*B represented by AFUN [0 | {1}]
44% OPTS.tol: convergence: Ritz estimate residual <= tol*NORM(A) [scalar | {eps}]
45% OPTS.maxit: maximum number of iterations [integer | {300}]
46% OPTS.p: number of Lanczos vectors: K+1<p<=N [integer | {2K}]
47% OPTS.v0: starting vector [N-by-1 vector | {randomly generated by ARPACK}]
48% OPTS.disp: diagnostic information display level [0 | {1} | 2]
49% OPTS.cholB: B is actually its Cholesky factor CHOL(B) [{0} | 1]
50% OPTS.permB: sparse B is actually CHOL(B(permB,permB)) [permB | {1:N}]
51%
52% EIGS(AFUN,N) accepts the function AFUN instead of the matrix A.
53% Y = AFUN(X) should return
54% A*X if SIGMA is not specified, or is a string other than 'SM'
55% A\X if SIGMA is 0 or 'SM'
56% (A-SIGMA*I)\X if SIGMA is a nonzero scalar (standard eigenvalue problem)
57% (A-SIGMA*B)\X if SIGMA is a nonzero scalar (generalized eigenvalue problem)
58% N is the size of A. The matrix A, A-SIGMA*I or A-SIGMA*B represented by AFUN is
59% assumed to be real and nonsymmetric unless specified otherwise by OPTS.isreal
60% and OPTS.issym. In all these EIGS syntaxes, EIGS(A,...) may be replaced by
61% EIGS(AFUN,N,...).
62%
63% EIGS(AFUN,N,K,SIGMA,OPTS,P1,P2,...) and EIGS(AFUN,N,B,K,SIGMA,OPTS,P1,P2,...)
64% provide for additional arguments which are passed to AFUN(X,P1,P2,...).
65%
66% Examples:
67% A = delsq(numgrid('C',15)); d1 = eigs(A,5,'SM');
68% Equivalently, if dnRk is the following one-line function:
69% function y = dnRk(x,R,k)
70% y = (delsq(numgrid(R,k))) \ x;
71% then pass dnRk's additional arguments, 'C' and 15, to EIGS:
72% n = size(A,1); opts.issym = 1; d2 = eigs(@dnRk,n,5,'SM',opts,'C',15);
73%
74% See also EIG, SVDS, ARPACKC.
75
76% Copyright 1984-2002 The MathWorks, Inc.
77% $Revision: 1.45 $ $Date: 2002/05/14 18:50:58 $
78
79cputms = zeros(5,1);
80t0 = cputime; % start timing pre-processing
81
82if (nargout > 3)
83 error('Too many output arguments.')
84end
85
86% Process inputs and do error-checking
87if isa(varargin{1},'double')
88 A = varargin{1};
89 Amatrix = 1;
90else
91 A = fcnchk(varargin{1});
92 Amatrix = 0;
93end
94
95isrealprob = 1; % isrealprob = isreal(A) & isreal(B) & isreal(sigma)
96if Amatrix
97 isrealprob = isreal(A);
98end
99
100issymA = 0;
101if Amatrix
102 issymA = isequal(A,A');
103end
104
105if Amatrix
106 [m,n] = size(A);
107 if (m ~= n)
108 error('A must be a square matrix or a function which computes A*x.')
109 end
110else
111 n = varargin{2};
112 nstr = 'Size of problem, ''n'', must be a positive integer.';
113 if ~isequal(size(n),[1,1]) | ~isreal(n)
114 error(nstr)
115 end
116 if (round(n) ~= n)
117 warning('MATLAB:eigs:NonIntegerSize',['%s\n ' ...
118 'Rounding input size.'],nstr)
119 n = round(n);
120 end
121 if issparse(n)
122 n = full(n);
123 end
124end
125
126Bnotthere = 0;
127Bstr = sprintf(['Generalized matrix B must be the same size as A and' ...
128 ' either a symmetric positive (semi-)definite matrix or' ...
129 ' its Cholesky factor.']);
130if (nargin < (3-Amatrix-Bnotthere))
131 B = [];
132 Bnotthere = 1;
133else
134 Bk = varargin{3-Amatrix-Bnotthere};
135 if isempty(Bk) % allow eigs(A,[],k,sigma,opts);
136 B = Bk;
137 else
138 if isequal(size(Bk),[1,1]) & (n ~= 1)
139 B = [];
140 k = Bk;
141 Bnotthere = 1;
142 else % eigs(9,8,...) assumes A=9, B=8, ... NOT A=9, k=8, ...
143 B = Bk;
144 if ~isa(B,'double') | ~isequal(size(B),[n,n])
145 error(Bstr)
146 end
147 isrealprob = isrealprob & isreal(B);
148 end
149 end
150end
151
152if Amatrix & ((nargin - ~Bnotthere)>4)
153 error('Too many inputs.')
154end
155
156if (nargin < (4-Amatrix-Bnotthere))
157 k = min(n,6);
158else
159 k = varargin{4-Amatrix-Bnotthere};
160end
161
162kstr = ['Number of eigenvalues requested, k, must be a' ...
163 ' positive integer <= n.'];
164if ~isa(k,'double') | ~isequal(size(k),[1,1]) | ~isreal(k) | (k>n)
165 error(kstr)
166end
167if issparse(k)
168 k = full(k);
169end
170if (round(k) ~= k)
171 warning('MATLAB:eigs:NonIntegerEigQty',['%s\n ' ...
172 'Rounding number of eigenvalues.'],kstr)
173 k = round(k);
174end
175
176whchstr = sprintf(['Eigenvalue range sigma must be a valid 2-element string.']);
177if (nargin < (5-Amatrix-Bnotthere))
178 % default: eigs('LM') => ARPACK which='LM', sigma=0
179 eigs_sigma = 'LM';
180 whch = 'LM';
181 sigma = 0;
182else
183 eigs_sigma = varargin{5-Amatrix-Bnotthere};
184 if isstr(eigs_sigma)
185 % eigs(string) => ARPACK which=string, sigma=0
186 if ~isequal(size(eigs_sigma),[1,2])
187 whchstr = [whchstr sprintf(['\nFor real symmetric A, the choices are ''%s'', ''%s'', ''%s'', ''%s'' or ''%s''.'], ...
188 'LM','SM','LA','SA','BE')];
189 whchstr = [whchstr sprintf(['\nFor non-symmetric or complex A, the choices are ''%s'', ''%s'', ''%s'', ''%s'', ''%s'' or ''%s''.\n'], ...
190 'LM','SM','LR','SR','LI','SI')];
191 error(whchstr)
192 end
193 eigs_sigma = upper(eigs_sigma);
194 if isequal(eigs_sigma,'SM')
195 % eigs('SM') => ARPACK which='LM', sigma=0
196 whch = 'LM';
197 else
198 % eigs(string), where string~='SM' => ARPACK which=string, sigma=0
199 whch = eigs_sigma;
200 end
201 sigma = 0;
202 else
203 % eigs(scalar) => ARPACK which='LM', sigma=scalar
204 if ~isa(eigs_sigma,'double') | ~isequal(size(eigs_sigma),[1,1])
205 error('Eigenvalue shift sigma must be a scalar.')
206 end
207 sigma = eigs_sigma;
208 if issparse(sigma)
209 sigma = full(sigma);
210 end
211 isrealprob = isrealprob & isreal(sigma);
212 whch = 'LM';
213 end
214end
215
216tol = eps; % ARPACK's minimum tolerance is eps/2 (DLAMCH's EPS)
217maxit = [];
218p = [];
219info = int32(0); % use a random starting vector
220display = 1;
221cholB = 0;
222
223if (nargin >= (6-Amatrix-Bnotthere))
224 opts = varargin{6-Amatrix-Bnotthere};
225 if ~isa(opts,'struct')
226 error('Options argument must be a structure.')
227 end
228
229 if isfield(opts,'issym') & ~Amatrix
230 issymA = opts.issym;
231 if (issymA ~= 0) & (issymA ~= 1)
232 error('opts.issym must be 0 or 1.')
233 end
234 end
235
236 if isfield(opts,'isreal') & ~Amatrix
237 if (opts.isreal ~= 0) & (opts.isreal ~= 1)
238 error('opts.isreal must be 0 or 1.')
239 end
240 isrealprob = isrealprob & opts.isreal;
241 end
242
243 if ~isempty(B) & (isfield(opts,'cholB') | isfield(opts,'permB'))
244 if isfield(opts,'cholB')
245 cholB = opts.cholB;
246 if (cholB ~= 0) & (cholB ~= 1)
247 error('opts.cholB must be 0 or 1.')
248 end
249 if isfield(opts,'permB')
250 if issparse(B) & cholB
251 permB = opts.permB;
252 if ~isequal(sort(permB),(1:n)) & ...
253 ~isequal(sort(permB),(1:n)')
254 error('opts.permB must be a permutation of 1:n.')
255 end
256 else
257 warning('MATLAB:eigs:IgnoredOptionPermB', ...
258 ['Ignoring opts.permB since B is not its sparse' ...
259 ' Cholesky factor.'])
260 end
261 else
262 permB = 1:n;
263 end
264 end
265 end
266
267 if isfield(opts,'tol')
268 if ~isequal(size(opts.tol),[1,1]) | ~isreal(opts.tol) | (opts.tol<=0)
269 error(['Convergence tolerance opts.tol must be a strictly' ...
270 ' positive real scalar.'])
271 else
272 tol = full(opts.tol);
273 end
274 end
275
276 if isfield(opts,'p')
277 p = opts.p;
278 pstr = ['Number of basis vectors opts.p must be a positive' ...
279 ' integer <= n.'];
280 if ~isequal(size(p),[1,1]) | ~isreal(p) | (p<=0) | (p>n)
281 error(pstr)
282 end
283 if issparse(p)
284 p = full(p);
285 end
286 if (round(p) ~= p)
287 warning('MATLAB:eigs:NonIntegerVecQty',['%s\n ' ...
288 'Rounding number of basis vectors.'],pstr)
289 p = round(p);
290 end
291 end
292
293 if isfield(opts,'maxit')
294 maxit = opts.maxit;
295 str = ['Maximum number of iterations opts.maxit must be' ...
296 ' a positive integer.'];
297 if ~isequal(size(maxit),[1,1]) | ~isreal(maxit) | (maxit<=0)
298 error(str)
299 end
300 if issparse(maxit)
301 maxit = full(maxit);
302 end
303 if (round(maxit) ~= maxit)
304 warning('MATLAB:eigs:NonIntegerIterationQty',['%s\n ' ...
305 'Rounding number of iterations.'],str)
306 maxit = round(maxit);
307 end
308 end
309
310 if isfield(opts,'v0')
311 if ~isequal(size(opts.v0),[n,1])
312 error('Start vector opts.v0 must be n-by-1.')
313 end
314 if isrealprob
315 if ~isreal(opts.v0)
316 error(['Start vector opts.v0 must be real for real problems.'])
317 end
318 resid = full(opts.v0);
319 else
320 resid(1:2:(2*n-1),1) = full(real(opts.v0));
321 resid(2:2:2*n,1) = full(imag(opts.v0));
322 end
323 info = int32(1); % use resid as starting vector
324 end
325
326 if isfield(opts,'disp')
327 display = opts.disp;
328 dispstr = 'Diagnostic level opts.disp must be an integer.';
329 if (~isequal(size(display),[1,1])) | (~isreal(display)) | (display<0)
330 error(dispstr)
331 end
332 if (round(display) ~= display)
333 warning('MATLAB:eigs:NonIntegerDiagnosticLevel', ...
334 '%s\n Rounding diagnostic level.',dispstr)
335 display = round(display);
336 end
337 end
338
339 if isfield(opts,'cheb')
340 warning('MATLAB:eigs:ObsoleteOptionCheb', ...
341 ['Ignoring polynomial acceleration opts.cheb' ...
342 ' (no longer an option).']);
343 end
344 if isfield(opts,'stagtol')
345 warning('MATLAB:eigs:ObsoleteOptionStagtol', ...
346 ['Ignoring stagnation tolerance opts.stagtol' ...
347 ' (no longer an option).']);
348 end
349
350end
351
352% Now we know issymA, isrealprob, cholB, and permB
353
354if isempty(p)
355 if isrealprob & ~issymA
356 p = min(max(2*k+1,20),n);
357 else
358 p = min(max(2*k,20),n);
359 end
360end
361if isempty(maxit)
362 maxit = max(300,ceil(2*n/max(p,1)));
363end
364if (info == int32(0))
365 if isrealprob
366 resid = zeros(n,1);
367 else
368 resid = zeros(2*n,1);
369 end
370end
371
372if ~isempty(B) % B must be symmetric (Hermitian) positive (semi-)definite
373 if cholB
374 if ~isequal(triu(B),B)
375 error(Bstr)
376 end
377 else
378 if ~isequal(B,B')
379 error(Bstr)
380 end
381 end
382end
383
384useeig = 0;
385if isrealprob & issymA
386 knstr = sprintf(['For real symmetric problems, must have number' ...
387 ' of eigenvalues k < n.\n']);
388else
389 knstr = sprintf(['For nonsymmetric and complex problems, must have' ...
390 ' number of eigenvalues k < n-1.\n']);
391end
392if isempty(B)
393 knstr = [knstr sprintf(['Using eig(full(A)) instead.'])];
394else
395 knstr = [knstr sprintf(['Using eig(full(A),full(B)) instead.'])];
396end
397if (k == 0)
398 useeig = 1;
399end
400if isrealprob & issymA
401 if (k > n-1)
402 if (n >= 6)
403 warning('MATLAB:eigs:TooManyRequestedEigsForRealSym', ...
404 '%s',knstr)
405 end
406 useeig = 1;
407 end
408else
409 if (k > n-2)
410 if (n >= 7)
411 warning('MATLAB:eigs:TooManyRequestedEigsForComplexNonsym', ...
412 '%s',knstr)
413 end
414 useeig = 1;
415 end
416end
417
418if isrealprob & issymA
419 if ~isreal(sigma)
420 error(['For real symmetric problems, eigenvalue shift sigma must' ...
421 ' be real.'])
422 end
423else
424 if ~isrealprob & issymA & ~isreal(sigma)
425 warning('MATLAB:eigs:ComplexShiftForRealProblem', ...
426 ['Complex eigenvalue shift sigma on a Hermitian problem' ...
427 ' (all real eigenvalues).'])
428 end
429end
430
431if isrealprob & issymA
432 if strcmp(whch,'LR')
433 whch = 'LA';
434 warning('MATLAB:eigs:SigmaChangedToLA', ...
435 ['For real symmetric problems, sigma value ''LR''' ...
436 ' (Largest Real) is now ''LA'' (Largest Algebraic).'])
437 end
438 if strcmp(whch,'SR')
439 whch = 'SA';
440 warning('MATLAB:eigs:SigmaChangedToSA', ...
441 ['For real symmetric problems, sigma value ''SR''' ...
442 ' (Smallest Real) is now ''SA'' (Smallest Algebraic).'])
443 end
444 if ~ismember(whch,{'LM', 'SM', 'LA', 'SA', 'BE'})
445 whchstr = [whchstr sprintf(['\nFor real symmetric A, the choices are ''%s'', ''%s'', ''%s'', ''%s'' or ''%s''.'], ...
446 'LM','SM','LA','SA','BE')];
447 error(whchstr)
448 end
449else
450 if strcmp(whch,'BE')
451 warning('MATLAB:eigs:SigmaChangedToLM', ...
452 ['Sigma value ''BE'' is now only available for real' ...
453 ' symmetric problems. Computing ''LM'' eigenvalues instead.'])
454 whch = 'LM';
455 end
456 if ~ismember(whch,{'LM', 'SM', 'LR', 'SR', 'LI', 'SI'})
457 whchstr = [whchstr sprintf(['\nFor non-symmetric or complex A, the choices are ''%s'', ''%s'', ''%s'', ''%s'', ''%s'' or ''%s''.\n'], ...
458 'LM','SM','LR','SR','LI','SI')];
459 error(whchstr)
460 end
461end
462
463% Now have enough information to do early return on cases eigs does not handle
464if useeig
465 if (nargout <= 1)
466 varargout{1} = eigs2(A,n,B,k,whch,sigma,cholB, ...
467 varargin{7-Amatrix-Bnotthere:end});
468 else
469 [varargout{1},varargout{2}] = eigs2(A,n,B,k,whch,sigma,cholB, ...
470 varargin{7-Amatrix-Bnotthere:end});
471 end
472 if (nargout == 3)
473 varargout{3} = 0; % flag indicates "convergence"
474 end
475 return
476end
477
478if isrealprob & ~issymA
479 sigmar = real(sigma);
480 sigmai = imag(sigma);
481end
482
483if isrealprob & issymA
484 if (p <= k)
485 error(['For real symmetric problems, must have number of' ...
486 ' basis vectors opts.p > k.'])
487 end
488else
489 if (p <= k+1)
490 error(['For nonsymmetric and complex problems, must have number of' ...
491 ' basis vectors opts.p > k+1.'])
492 end
493end
494
495if isequal(whch,'LM') & ~isequal(eigs_sigma,'LM')
496 % A*x = lambda*M*x, M symmetric (positive) semi-definite
497 % => OP = inv(A - sigma*M)*M and B = M
498 % => shift-and-invert mode
499 mode = 3;
500elseif isempty(B)
501 % A*x = lambda*x
502 % => OP = A and B = I
503 mode = 1;
504else % B is not empty
505 % Do not use mode=2.
506 % Use mode = 1 with OP = R'\(A*(R\x)) and B = I
507 % where R is B's upper triangular Cholesky factor: B = R'*R.
508 % Finally, V = R\V returns the actual generalized eigenvectors of A and B.
509 mode = 1;
510end
511
512if cholB
513 pB = 0;
514 RB = B;
515 RBT = B';
516end
517
518if (mode == 3) & Amatrix % need lu(A-sigma*B)
519 if issparse(A) & (isempty(B) | issparse(B))
520 if isempty(B)
521 AsB = A - sigma * speye(n);
522 else
523 if cholB
524 AsB = A - sigma * RBT * RB;
525 else
526 AsB = A - sigma * B;
527 end
528 end
529 [L,U,P,Q] = lu(AsB);
530 [perm,dummy] = find(Q);
531 else
532 if isempty(B)
533 AsB = A - sigma * eye(n);
534 else
535 if cholB
536 AsB = A - sigma * RBT * RB;
537 else
538 AsB = A - sigma * B;
539 end
540 end
541 [L,U,P] = lu(AsB);
542 end
543 dU = diag(U);
544 rcondestU = full(min(abs(dU)) / max(abs(dU)));
545 if (rcondestU < eps)
546 if isempty(B)
547 ds = sprintf(['(A-sigma*I) has small reciprocal condition' ...
548 ' estimate: %f\n'],rcondestU);
549 else
550 ds = sprintf(['(A-sigma*B) has small reciprocal condition' ...
551 ' estimate: %f\n'],rcondestU);
552 end
553 ds = [ds sprintf(['indicating that sigma is near an exact' ...
554 ' eigenvalue. The\nalgorithm may not converge unless' ...
555 ' you try a new value for sigma.\n'])];
556 warning('MATLAB:eigs:SigmaNearExactEig',ds)
557 end
558end
559
560if (mode == 1) & ~isempty(B) & ~cholB % need chol(B)
561 if issparse(B)
562 permB = symamd(B);
563 [RB,pB] = chol(B(permB,permB));
564 else
565 [RB,pB] = chol(B);
566 end
567 if (pB == 0)
568 RBT = RB';
569 else
570 error(Bstr)
571 end
572end
573
574% Allocate outputs and ARPACK work variables
575if isrealprob
576 if issymA % real and symmetric
577 prefix = 'ds';
578 v = zeros(n,p);
579 ldv = int32(size(v,1));
580 ipntr = int32(zeros(15,1));
581 workd = zeros(n,3);
582 lworkl = p*(p+8);
583 workl = zeros(lworkl,1);
584 lworkl = int32(lworkl);
585 d = zeros(k,1);
586 else % real but not symmetric
587 prefix = 'dn';
588 v = zeros(n,p);
589 ldv = int32(size(v,1));
590 ipntr = int32(zeros(15,1));
591 workd = zeros(n,3);
592 lworkl = 3*p*(p+2);
593 workl = zeros(lworkl,1);
594 lworkl = int32(lworkl);
595 workev = zeros(3*p,1);
596 d = zeros(k+1,1);
597 di = zeros(k+1,1);
598 end
599else % complex
600 prefix = 'zn';
601 zv = zeros(2*n*p,1);
602 ldv = int32(n);
603 ipntr = int32(zeros(15,1));
604 workd = complex(zeros(n,3));
605 zworkd = zeros(2*prod(size(workd)),1);
606 lworkl = 3*p^2+5*p;
607 workl = zeros(2*lworkl,1);
608 lworkl = int32(lworkl);
609 workev = zeros(2*2*p,1);
610 zd = zeros(2*(k+1),1);
611 rwork = zeros(p,1);
612end
613
614ido = int32(0); % reverse communication parameter
615if isempty(B) | (~isempty(B) & (mode == 1))
616 bmat = 'I'; % standard eigenvalue problem
617else
618 bmat = 'G'; % generalized eigenvalue problem
619end
620nev = int32(k); % number of eigenvalues requested
621ncv = int32(p); % number of Lanczos vectors
622iparam = int32(zeros(11,1));
623iparam([1 3 7]) = int32([1 maxit mode]);
624select = int32(zeros(p,1));
625
626cputms(1) = cputime - t0; % end timing pre-processing
627
628iter = 0;
629ariter = 0;
630
631
632%tim
633
634
635indexArgumentsAfun = 7-Amatrix-Bnotthere:length(varargin);
636nbArgumentsAfun = length(indexArgumentsAfun);
637if nbArgumentsAfun >=1
638 arguments_Afun = varargin{7-Amatrix-Bnotthere};
639end
640if nbArgumentsAfun >=2
641 arguments_Afun2 = varargin{7-Amatrix-Bnotthere+1};
642end
643if nbArgumentsAfun >=3
644 arguments_Afun3 = varargin{7-Amatrix-Bnotthere+2};
645end
646%fin tim
647
648
649
650while (ido ~= 99)
651
652 t0 = cputime; % start timing ARPACK calls **aupd
653
654 if isrealprob
655 arpackc( [prefix 'aupd'], ido, ...
656 bmat, int32(n), whch, nev, tol, resid, ncv, ...
657 v, ldv, iparam, ipntr, workd, workl, lworkl, info);
658 else
659 zworkd(1:2:end-1) = real(workd);
660 zworkd(2:2:end) = imag(workd);
661 arpackc( 'znaupd', ido, ...
662 bmat, int32(n), whch, nev, tol, resid, ncv, zv, ...
663 ldv, iparam, ipntr, zworkd, workl, lworkl, ...
664 rwork, info );
665 workd = reshape(complex(zworkd(1:2:end-1),zworkd(2:2:end)),[n,3]);
666 end
667
668 if (info < 0)
669 es = sprintf('Error with ARPACK routine %saupd: info = %d',...
670 prefix,full(info));
671 error(es)
672 end
673
674 cputms(2) = cputms(2) + (cputime-t0); % end timing ARPACK calls **aupd
675 t0 = cputime; % start timing MATLAB OP(X)
676
677 % Compute which columns of workd ipntr references
678
679
680
681
682
683 %[row,col1] = ind2sub([n,3],double(ipntr(1)));
684 %tim
685 row = mod(double(ipntr(1))-1,n) + 1 ;
686 col1 = floor((double(ipntr(1))-1)/n) + 1;
687
688
689 if (row ~= 1)
690 str = sprintf(['ipntr(1)=%d does not refer to the start of a' ...
691 ' column of the %d-by-3 array workd.'],full(ipntr(1)),n);
692 error(str)
693 end
694
695
696
697 %[row,col2] = ind2sub([n,3],double(ipntr(2)));
698 %tim
699 row = mod(double(ipntr(2))-1,n) + 1 ;
700 col2 = floor((double(ipntr(2))-1)/n) + 1;
701
702
703
704 if (row ~= 1)
705 str = sprintf(['ipntr(2)=%d does not refer to the start of a' ...
706 ' column of the %d-by-3 array workd.'],full(ipntr(2)),n);
707 error(str)
708 end
709 if ~isempty(B) & (mode == 3) & (ido == 1)
710 [row,col3] = ind2sub([n,3],double(ipntr(3)));
711 if (row ~= 1)
712 str = sprintf(['ipntr(3)=%d does not refer to the start of a' ...
713 ' column of the %d-by-3 array workd.'],full(ipntr(3)),n);
714 error(str)
715 end
716 end
717
718 switch (ido)
719 case {-1,1}
720 if Amatrix
721 if (mode == 1)
722 if isempty(B)
723 % OP = A*x
724 workd(:,col2) = A * workd(:,col1);
725 else
726 % OP = R'\(A*(R\x))
727 if issparse(B)
728 workd(permB,col2) = RB \ workd(:,col1);
729 workd(:,col2) = A * workd(:,col2);
730 workd(:,col2) = RBT \ workd(permB,col2);
731 else
732 workd(:,col2) = RBT \ (A * (RB \ workd(:,col1)));
733 end
734 end
735 elseif (mode == 3)
736 if isempty(B)
737 if issparse(A)
738 workd(perm,col2) = U \ (L \ (P * workd(:,col1)));
739 else
740 workd(:,col2) = U \ (L \ (P * workd(:,col1)));
741 end
742 else % B is not empty
743 if (ido == -1)
744 if cholB
745 workd(:,col2) = RBT * (RB * workd(:,col1));
746 else
747 workd(:,col2) = B * workd(:,col1);
748 end
749 if issparse(A) & issparse(B)
750 workd(perm,col2) = U \ (L \ (P * workd(:,col1)));
751 else
752 workd(:,col2) = U \ (L \ (P * workd(:,col1)));
753 end
754 elseif (ido == 1)
755 if issparse(A) & issparse(B)
756 workd(perm,col2) = U \ (L \ (P * workd(:,col3)));
757 else
758 workd(:,col2) = U \ (L \ (P * workd(:,col3)));
759 end
760 end
761 end
762 else % mode is not 1 or 3
763 error(['Unknown mode returned from ' prefix 'aupd.'])
764 end
765 else % A is not a matrix
766 if (mode == 1)
767 if isempty(B)
768 % OP = A*x
769 %workd(:,col2) = feval(A,workd(:,col1),varargin{7-Amatrix-Bnotthere:end});
770
771
772
773
774
775 nombre_A_times_X = nombre_A_times_X + 1;
776
777
778
779 pause(0); %voir
780
781 if nbArgumentsAfun == 1
782 workd(:,col2) = feval(A,workd(:,col1),arguments_Afun);
783 %workd(:,col2) = max(workd(:,col2),0);
784 elseif nbArgumentsAfun == 2
785 workd(:,col2) = feval(A,workd(:,col1),arguments_Afun,arguments_Afun2);
786 elseif nbArgumentsAfun == 3
787 workd(:,col2) = feval(A,workd(:,col1),arguments_Afun,arguments_Afun2,arguments_Afun3);
788 else
789 workd(:,col2) = feval(A,workd(:,col1),varargin{indexArgumentsAfun});
790 end
791 %workd(:,col2) = tim_w_times_x_c(workd(:,col1),arguments_Afun); %slower
792
793 else
794 % OP = R'\(A*(R\x))
795 if issparse(B)
796 workd(permB,col2) = RB \ workd(:,col1);
797 workd(:,col2) = feval(A,workd(:,col2),arguments_Afun);
798 workd(:,col2) = RBT \ workd(permB,col2);
799
800 else
801 workd(:,col2) = RBT \ feval(A,(RB\workd(:,col1)),arguments_Afun);
802 end
803 end
804 elseif (mode == 3)
805 if isempty(B)
806 workd(:,col2) = feval(A,workd(:,col1), arguments_Afun);
807 else
808 if (ido == -1)
809 if cholB
810 workd(:,col2) = RBT * (RB * workd(:,col1));
811 else
812 workd(:,col2) = B * workd(:,col1);
813 end
814 workd(:,col2) = feval(A,workd(:,col2), arguments_Afun);
815 elseif (ido == 1)
816 workd(:,col2) = feval(A,workd(:,col3), arguments_Afun);
817 end
818 end
819 else % mode is not 1 or 3
820 error(['Unknown mode returned from ' prefix 'aupd.'])
821 end
822 end % if Amatrix
823 case 2
824 if (mode == 3)
825 if cholB
826 workd(:,col2) = RBT * (RB * workd(:,col1));
827 else
828 workd(:,col2) = B * workd(:,col1);
829 end
830 else
831 error(['Unknown mode returned from ' prefix 'aupd.'])
832 end
833 case 3
834 % setting iparam(1) = ishift = 1 ensures this never happens
835 warning('MATLAB:eigs:WorklShiftsUnsupported', ...
836 ['EIGS does not yet support computing the shifts in workl.' ...
837 ' Setting reverse communication parameter to 99 and returning.'])
838 ido = int32(99);
839 case 99
840 otherwise
841 error(['Unknown value of reverse communication parameter' ...
842 ' returned from ' prefix 'aupd.'])
843 end
844
845 cputms(3) = cputms(3) + (cputime-t0); % end timing MATLAB OP(X)
846
847 %tim
848 if nombreIterations ~= double(ipntr(15))
849 nombreIterations = double(ipntr(15));
850 end
851
852 if display >= 1 && display <=2
853 iter = double(ipntr(15));
854 if (iter > ariter) & (ido ~= 99)
855 ariter = iter;
856 ds = sprintf(['Iteration %d: a few Ritz values of the' ...
857 ' %d-by-%d matrix:'],iter,p,p);
858 disp(ds)
859 if isrealprob
860 if issymA
861 dispvec = [workl(double(ipntr(6))+(0:p-1))];
862 if isequal(whch,'BE')
863 % roughly k Large eigenvalues and k Small eigenvalues
864 disp(dispvec(max(end-2*k+1,1):end))
865 else
866 % k eigenvalues
867 disp(dispvec(max(end-k+1,1):end))
868 end
869 else
870 dispvec = [complex(workl(double(ipntr(6))+(0:p-1)), ...
871 workl(double(ipntr(7))+(0:p-1)))];
872 % k+1 eigenvalues (keep complex conjugate pairs together)
873 disp(dispvec(max(end-k,1):end))
874 end
875 else
876 dispvec = [complex(workl(2*double(ipntr(6))-1+(0:2:2*(p-1))), ...
877 workl(2*double(ipntr(6))+(0:2:2*(p-1))))];
878 disp(dispvec(max(end-k+1,1):end))
879 end
880 end
881 end
882
883end % while (ido ~= 99)
884
885t0 = cputime; % start timing post-processing
886
887flag = 0;
888if (info < 0)
889 es = sprintf('Error with ARPACK routine %saupd: info = %d',prefix,full(info));
890 error(es)
891else
892 if (nargout >= 2)
893 rvec = int32(1); % compute eigenvectors
894 else
895 rvec = int32(0); % do not compute eigenvectors
896 end
897
898 if isrealprob
899 if issymA
900 arpackc( 'dseupd', rvec, 'A', select, ...
901 d, v, ldv, sigma, ...
902 bmat, int32(n), whch, nev, tol, resid, ncv, ...
903 v, ldv, iparam, ipntr, workd, workl, lworkl, info );
904 if isequal(whch,'LM') | isequal(whch,'LA')
905 d = flipud(d);
906 if (rvec == 1)
907 v(:,1:k) = v(:,k:-1:1);
908 end
909 end
910 if ((isequal(whch,'SM') | isequal(whch,'SA')) & (rvec == 0))
911 d = flipud(d);
912 end
913 else
914 arpackc( 'dneupd', rvec, 'A', select, ...
915 d, di, v, ldv, sigmar, sigmai, workev, ...
916 bmat, int32(n), whch, nev, tol, resid, ncv, ...
917 v, ldv, iparam, ipntr, workd, workl, lworkl, info );
918 d = complex(d,di);
919 if rvec
920 d(k+1) = [];
921 else
922 zind = find(d == 0);
923 if isempty(zind)
924 d = d(k+1:-1:2);
925 else
926 d(max(zind)) = [];
927 d = flipud(d);
928 end
929 end
930 end
931 else
932 zsigma = [real(sigma); imag(sigma)];
933 arpackc( 'zneupd', rvec, 'A', select, ...
934 zd, zv, ldv, zsigma, workev, ...
935 bmat, int32(n), whch, nev, tol, resid, ncv, zv, ...
936 ldv, iparam, ipntr, zworkd, workl, lworkl, ...
937 rwork, info );
938 if issymA
939 d = zd(1:2:end-1);
940 else
941 d = complex(zd(1:2:end-1),zd(2:2:end));
942 end
943 v = reshape(complex(zv(1:2:end-1),zv(2:2:end)),[n p]);
944 end
945
946 if (info ~= 0)
947 es = ['Error with ARPACK routine ' prefix 'eupd: '];
948 switch double(info)
949 case 2
950 ss = sum(select);
951 if (ss < k)
952 es = [es ...
953 ' The logical variable select was only set with ' int2str(ss) ...
954 ' 1''s instead of nconv=' int2str(double(iparam(5))) ...
955 ' (k=' int2str(k) ').' ...
956 ' Please contact the ARPACK authors at arpack@caam.rice.edu.'];
957 else
958 es = [es ...
959 'The LAPACK reordering routine ' prefix(1) ...
960 'trsen did not return all ' int2str(k) ' eigenvalues.']
961 end
962 case 1
963 es = [es ...
964 'The Schur form could not be reordered by the LAPACK routine ' ...
965 prefix(1) 'trsen.' ...
966 ' Please contact the ARPACK authors at arpack@caam.rice.edu.'];
967 case -14
968 es = [es prefix ...
969 'aupd did not find any eigenvalues to sufficient accuracy.'];
970 otherwise
971 es = [es sprintf('info = %d',full(info))];
972 end
973 error(es)
974 else
975 nconv = double(iparam(5));
976 if (nconv == 0)
977 if (nargout < 3)
978 warning('MATLAB:eigs:NoEigsConverged', ...
979 'None of the %d requested eigenvalues converged.',k)
980 else
981 flag = 1;
982 end
983 elseif (nconv < k)
984 if (nargout < 3)
985 warning('MATLAB:eigs:NotAllEigsConverged', ...
986 'Only %d of the %d requested eigenvalues converged.',nconv,k)
987 else
988 flag = 1;
989 end
990 end
991 end % if (info ~= 0)
992end % if (info < 0)
993
994if (issymA) | (~isrealprob)
995 if (nargout <= 1)
996 if isrealprob
997 varargout{1} = d;
998 else
999 varargout{1} = d(k:-1:1,1);
1000 end
1001 else
1002 varargout{1} = v(:,1:k);
1003 varargout{2} = diag(d(1:k,1));
1004 if (nargout >= 3)
1005 varargout{3} = flag;
1006 end
1007 end
1008else
1009 if (nargout <= 1)
1010 varargout{1} = d;
1011 else
1012 cplxd = find(di ~= 0);
1013 % complex conjugate pairs of eigenvalues occur together
1014 cplxd = cplxd(1:2:end);
1015 v(:,[cplxd cplxd+1]) = [complex(v(:,cplxd),v(:,cplxd+1)) ...
1016 complex(v(:,cplxd),-v(:,cplxd+1))];
1017 varargout{1} = v(:,1:k);
1018 varargout{2} = diag(d);
1019 if (nargout >= 3)
1020 varargout{3} = flag;
1021 end
1022 end
1023end
1024
1025if (nargout >= 2) & (mode == 1) & ~isempty(B)
1026 if issparse(B)
1027 varargout{1}(permB,:) = RB \ varargout{1};
1028 else
1029 varargout{1} = RB \ varargout{1};
1030 end
1031end
1032
1033cputms(4) = cputime-t0; % end timing post-processing
1034
1035cputms(5) = sum(cputms(1:4)); % total time
1036
1037if (display >= 2) %tim
1038 if (mode == 1)
1039 innerstr = sprintf(['Compute A*X:' ...
1040 ' %f\n'],cputms(3));
1041 elseif (mode == 2)
1042 innerstr = sprintf(['Compute A*X and solve B*X=Y for X:' ...
1043 ' %f\n'],cputms(3));
1044 elseif (mode == 3)
1045 if isempty(B)
1046 innerstr = sprintf(['Solve (A-SIGMA*I)*X=Y for X:' ...
1047 ' %f\n'],cputms(3));
1048 else
1049 innerstr = sprintf(['Solve (A-SIGMA*B)*X=B*Y for X:' ...
1050 ' %f\n'],cputms(3));
1051 end
1052 end
1053 if ((mode == 3) & (Amatrix))
1054 if isempty(B)
1055 prepstr = sprintf(['Pre-processing, including lu(A-sigma*I):' ...
1056 ' %f\n'],cputms(1));
1057 else
1058 prepstr = sprintf(['Pre-processing, including lu(A-sigma*B):' ...
1059 ' %f\n'],cputms(1));
1060 end
1061 elseif ((mode == 2) & (~cholB))
1062 prepstr = sprintf(['Pre-processing, including chol(B):' ...
1063 ' %f\n'],cputms(1));
1064 else
1065 prepstr = sprintf(['Pre-processing:' ...
1066 ' %f\n'],cputms(1));
1067 end
1068 sstr = sprintf(['***********CPU Timing Results in seconds***********']);
1069 ds = sprintf(['\n' sstr '\n' ...
1070 prepstr ...
1071 'ARPACK''s %saupd: %f\n' ...
1072 innerstr ...
1073 'Post-processing with ARPACK''s %seupd: %f\n' ...
1074 '***************************************************\n' ...
1075 'Total: %f\n' ...
1076 sstr '\n'], ...
1077 prefix,cputms(2),prefix,cputms(4),cputms(5));
1078 disp(ds)
1079 if nombre_A_times_X > 0 %tim
1080 disp(sprintf('Number of iterations : %f\n',nombreIterations));
1081 disp(sprintf('Number of times A*X was computed : %f\n',nombre_A_times_X));
1082 disp(sprintf('Average time for A*X : %f\n',cputms(3)/nombre_A_times_X));
1083 end
1084end
diff --git a/SD-VBS/common/toolbox/ikkjin/getANMS.m b/SD-VBS/common/toolbox/ikkjin/getANMS.m
new file mode 100755
index 0000000..a40d50c
--- /dev/null
+++ b/SD-VBS/common/toolbox/ikkjin/getANMS.m
@@ -0,0 +1,30 @@
1function [interestPnts]=getANMS(x, y, v, r, dataDir)
2MAX_LIMIT=100000;
3C_ROBUST=1;
4r_sq=r^2;
5points=[x y v];
6[n temp]=size(v);
7[srtdV srtdVIdx]=sort(v,'descend');
8srtdPnts=points(srtdVIdx,:);
9
10interestPnts=zeros(0,3);
11
12suppressR=ones(n,1)*MAX_LIMIT;
13supId=find(suppressR>r_sq);
14
15iter = 0;
16while length(supId)>0
17
18 interestPnts=[interestPnts; srtdPnts(supId(1),:)];
19 srtdPnts=srtdPnts(supId(2:end),:);
20 suppressR=suppressR(supId(2:end),:);
21
22 suppressR=min(suppressR,...
23 (C_ROBUST*interestPnts(end,3)>=srtdPnts(:,3)).*...
24 ((srtdPnts(:,1)-interestPnts(end,1)).^2 + (srtdPnts(:,2)-interestPnts(end,2)).^2)...
25 +(C_ROBUST*interestPnts(end,3)<srtdPnts(:,3))*...
26 MAX_LIMIT);
27
28 iter = iter + 1;
29 supId=find(suppressR>r_sq);
30end
diff --git a/SD-VBS/common/toolbox/ikkjin/getImgGrad.m b/SD-VBS/common/toolbox/ikkjin/getImgGrad.m
new file mode 100755
index 0000000..90fae28
--- /dev/null
+++ b/SD-VBS/common/toolbox/ikkjin/getImgGrad.m
@@ -0,0 +1,7 @@
1function Ig=getImgGrad(imgroi)
2im = double(rgb2gray(imgroi));
3g1 = fspecial('gaussian', 9,1); % Gaussian with sigma_d
4img1 = conv2(im,g1,'same'); % blur image with sigma_d
5Ix = conv2(img1,[-1 0 1],'same'); % take x derivative
6Iy = conv2(img1,[-1;0;1],'same'); % take y derivative
7Ig=Ix.^2+Iy.^2; \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/ikkjin/harris.m b/SD-VBS/common/toolbox/ikkjin/harris.m
new file mode 100755
index 0000000..92a6543
--- /dev/null
+++ b/SD-VBS/common/toolbox/ikkjin/harris.m
@@ -0,0 +1,43 @@
1
2% Sample code for detecting Harris corners, following
3% Brown et al, CVPR 2005
4% by Alyosha Efros, so probably buggy...
5% slightly modified by ikkjin
6
7function [x,y,v] = harris(imrgb);
8[nr nc nb]=size(imrgb);
9if nb==3
10 im=rgb2gray(imrgb);
11else
12 im=imrgb;
13end
14
15im = im2double(im);
16g1 = fspecial('gaussian', 9,1); % Gaussian with sigma_d
17g2 = fspecial('gaussian', 11,1.5); % Gaussian with sigma_i
18img1 = conv2(im,g1,'same'); % blur image with sigma_d
19Ix = conv2(img1,[-1 0 1],'same'); % take x derivative
20Iy = conv2(img1,[-1;0;1],'same'); % take y derivative
21
22% Compute elements of the Harris matrix H
23%%% we can use blur instead of the summing window
24Ix2 = conv2(Ix.*Ix,g2,'same');
25Iy2 = conv2(Iy.*Iy,g2,'same');
26IxIy = conv2(Ix.*Iy,g2,'same');
27R = (Ix2.*Iy2 - IxIy.*IxIy) ... % det(H)
28 ./ (Ix2 + Iy2 + eps); % trace(H) + epsilon
29
30% don't want corners close to image border
31R([1:15, end-16:end], :) = 0;
32R(:,[1:15,end-16:end]) = 0;
33
34% non-maxima supression within 3x3 windows
35nonmax = inline('max(x)');
36Rmax = colfilt(R,[3 3],'sliding',nonmax); % find neighbrhood max
37Rnm = R.*(R == Rmax); % supress non-max
38
39% extract all interest points
40[y,x,v] = find(Rnm);
41
42
43
diff --git a/SD-VBS/common/toolbox/lagrcv/Makefile b/SD-VBS/common/toolbox/lagrcv/Makefile
new file mode 100755
index 0000000..af7e8f5
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/Makefile
@@ -0,0 +1,21 @@
1rm liblagrcv.a
2gcc -c -fPIC lagrcv.cpp
3ar rc liblagrcv.a lagrcv.o
4ranlib liblagrcv.a
5
6mex -O calcSubsampleAvgMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
7mex -O calcSobelMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
8mex -O calcImgBlurMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
9mex -O calcOptFlowLKMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
10mex -O calcResizedImgMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
11mex -O calcTextureMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
12mex -O calcGradientPyrMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
13mex -O calcSobelPyrMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
14mex -O calcTexturePyrMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
15mex -O calcOptFlowLKPyrMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
16mex -O calcOptFlowLKPyrMex2.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
17mex -O calcOptFlowLKPyrWInitMex2.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
18mex -O calcOptFlowLKPyrWInitMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
19mex -O calcOptFlowLKPyrWInitSobelMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
20mex -O dummyMex.cc -L/u/ikkjin/Matlab/Toolbox/lagrcv -llagrcv -I/u/ikkjin/Matlab/Toolbox/lagrcv/
21
diff --git a/SD-VBS/common/toolbox/lagrcv/README.sxw b/SD-VBS/common/toolbox/lagrcv/README.sxw
new file mode 100755
index 0000000..9f20d14
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/README.sxw
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.cc b/SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.cc
new file mode 100755
index 0000000..d94130b
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.cc
@@ -0,0 +1,45 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15// TODO: add number of corners parameter
16void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
17 // usage: [dxPye dyPyr] =
18 // calcGradientPyrMex(imagePyr)
19
20 const int *cellDims = mxGetDimensions(prhs[0]);
21 double *image;
22 const mxArray* imgArray;
23 mxArray *dxArray, *dyArray;
24 double *dx, *dy;
25 const int *imdims;
26
27 plhs[0] = mxCreateCellArray(1, cellDims);
28 plhs[1] = mxCreateCellArray(1, cellDims);
29
30 for(int i=0; i<cellDims[0];i++){
31 imgArray= mxGetCell(prhs[0],i);
32 image=mxGetPr(imgArray);
33 imdims = mxGetDimensions(imgArray);
34
35 dxArray = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
36 dyArray = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
37 mxSetCell(plhs[0], i, dxArray);
38 mxSetCell(plhs[1], i, dyArray);
39 dx=mxGetPr(dxArray);
40 dy=mxGetPr(dyArray);
41
42 calcGradient(image, imdims[0], imdims[1], dx, dy);
43 //calcSobel(image, imdims[0], imdims[1], dx, dy);
44 }
45}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.mexa64
new file mode 100755
index 0000000..1ee53da
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.mexglx
new file mode 100755
index 0000000..cd7d6f1
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcGradientPyrMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.cc b/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.cc
new file mode 100755
index 0000000..5e2f1da
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.cc
@@ -0,0 +1,30 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15// TODO: add number of corners parameter
16void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
17 // usage: [IBlur] =
18 // calcImgBlurMex(image)
19
20 double *image, *retImg;
21 const int *imdims;
22
23 image=(double*)mxGetPr(prhs[0]);
24 imdims = mxGetDimensions(prhs[0]);
25
26 plhs[0] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
27 retImg=(double*)mxGetPr(plhs[0]);
28
29 calcImgBlur(image, imdims[0], imdims[1], retImg);
30}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexa64
new file mode 100755
index 0000000..8f4bfea
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexglx
new file mode 100755
index 0000000..ade786d
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcImgBlurMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.cc b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.cc
new file mode 100755
index 0000000..e22af8b
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.cc
@@ -0,0 +1,85 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15#ifndef MAX_LEVEL
16# define MAX_LEVEL 5
17#endif
18// TODO: add number of corners parameter
19void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
20 // usage: [newFeaturePnt validFlag ] =
21 // calcOptFlowLKMex(I, Idx, Idy, J, c_xx, c_xy, c_yy, featurePnt, initialPnt, winSize, accuracy_th, max_iter)
22 // featurePnt 2xn int
23 // winSize c_level int
24 // c_xx c_xy c_yy: image size double*
25 // image must be double
26
27
28 const int* imdims;
29 const int *nFeatures;
30 double *imgI, *iDx, *iDy, *imgJ, *c_xx, *c_xy, *c_yy;
31 double *fPnt, *initPnt, *newFPnt;
32 char* valid;
33 double accuracy_th;
34 int winSize, max_iter;
35
36 if (nrhs > 10) {
37 accuracy_th=(double)mxGetScalar(prhs[10]);
38 max_iter=(int)mxGetScalar(prhs[11]);
39 }
40
41 winSize = (int)mxGetScalar(prhs[9]);
42 initPnt=(double*)mxGetPr(prhs[8]);
43 fPnt=(double*)mxGetPr(prhs[7]);
44 c_xx=(double*)mxGetPr(prhs[6]);
45 c_xy=(double*)mxGetPr(prhs[5]);
46 c_yy=(double*)mxGetPr(prhs[4]);
47 imgJ=(double*)mxGetPr(prhs[3]);
48 iDy=(double*)mxGetPr(prhs[2]);
49 iDx=(double*)mxGetPr(prhs[1]);
50 imgI=(double*)mxGetPr(prhs[0]);
51 nFeatures=mxGetDimensions(prhs[7]);
52 imdims=mxGetDimensions(prhs[0]);
53
54 plhs[0] = mxCreateNumericMatrix(nFeatures[0], nFeatures[1], mxDOUBLE_CLASS, mxREAL);
55 plhs[1] = mxCreateNumericMatrix(1, nFeatures[1], mxUINT8_CLASS, mxREAL);
56
57 newFPnt = (double*)mxGetPr(plhs[0]);
58 valid = (char*)mxGetPr(plhs[1]);
59
60 //idx convert from matlab to c
61 for(int i=0; i<nFeatures[1]; i++){
62 fPnt[i*2]=fPnt[i*2]-1;
63 fPnt[i*2+1]=fPnt[i*2+1]-1;
64 initPnt[i*2]=initPnt[i*2]-1;
65 initPnt[i*2+1]=initPnt[i*2+1]-1;
66 valid[i]=1;
67 }
68 if(nrhs>10){
69 calcLKTrack( imgI, iDx, iDy, imgJ, imdims,
70 c_xx, c_xy, c_yy,
71 fPnt, initPnt, nFeatures[1], winSize,
72 newFPnt, valid, accuracy_th, max_iter);
73 }else{
74 calcLKTrack( imgI, iDx, iDy, imgJ, imdims,
75 c_xx, c_xy, c_yy,
76 fPnt, initPnt, nFeatures[1], winSize,
77 newFPnt, valid);
78 }
79 //idx convert from matlab to c
80 for(int i=0; i<nFeatures[1]*2; i++){
81 fPnt[i]=fPnt[i]+1;
82 initPnt[i]=initPnt[i]+1;
83 newFPnt[i]=newFPnt[i]+1;
84 }
85}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.mexa64
new file mode 100755
index 0000000..5ee979e
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.mexglx
new file mode 100755
index 0000000..31df310
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.cc b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.cc
new file mode 100755
index 0000000..56ab3d0
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.cc
@@ -0,0 +1,99 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15#ifndef MAX_LEVEL
16# define MAX_LEVEL 5
17#endif
18// TODO: add number of corners parameter
19void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
20 // usage: [newFeaturePnt validFlag ] =
21 // calcOptFlowPyrLKMex(Ipyr, IdxPyr, IdyPyr, Jpyr, featurePnt, winSize, accuracy_th, max_iter)
22 // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell.
23 // featurePnt 2xn int
24 // winSize c_level int
25 // c_xx c_xy c_yy: image size double*
26 // image must be double
27
28
29 const mxArray* imgArray;
30 int* imdims;
31 const int *curImgDims;
32 const int *nFeatures;
33 //double **iP, **iDxP, **iDyP, **jP;
34 double *iP[MAX_LEVEL], *iDxP[MAX_LEVEL], *iDyP[MAX_LEVEL], *jP[MAX_LEVEL];
35 double *fPnt, *newFPnt;
36 char* valid;
37 double accuracy_th;
38 int winSize, max_iter;
39 const int *cellDims = mxGetDimensions(prhs[0]);
40
41 if (nrhs > 6) {
42 accuracy_th=(double)mxGetScalar(prhs[6]);
43 max_iter=(int)mxGetScalar(prhs[7]);
44 }
45
46 winSize = (int)mxGetScalar(prhs[5]);
47 fPnt=(double*)mxGetPr(prhs[4]);
48 nFeatures=mxGetDimensions(prhs[4]);
49
50 imdims=(int*)malloc(sizeof(int)*cellDims[0]*2);
51 //iP=(double**)malloc(sizeof(double*)*cellDims[0]);
52 //iDxP=(double**)malloc(sizeof(double*)*cellDims[0]);
53 //iDyP=(double**)malloc(sizeof(double*)*cellDims[0]);
54 //jP=(double**)malloc(sizeof(double*)*cellDims[0]);
55
56 for(int i=0; i<cellDims[0]; i++){
57 //imgArray=mxGetCell(prhs[0],i);
58 //curImgDims = mxGetDimensions(imgArray);
59 curImgDims = mxGetDimensions(mxGetCell(prhs[0],i));
60 imdims[i*2+0]= curImgDims[0];
61 imdims[i*2+1]= curImgDims[1];
62 //imdims[i][1] = curImgDims[1];
63
64 iP[i]= (double*)mxGetPr(mxGetCell(prhs[0],i));
65 iDxP[i]= (double*)mxGetPr(mxGetCell(prhs[1],i));
66 iDyP[i]= (double*)mxGetPr(mxGetCell(prhs[2],i));
67 jP[i]= (double*)mxGetPr(mxGetCell(prhs[3],i));
68 }
69
70 plhs[0] = mxCreateNumericMatrix(nFeatures[0], nFeatures[1], mxDOUBLE_CLASS, mxREAL);
71 plhs[1] = mxCreateNumericMatrix(1, nFeatures[1], mxUINT8_CLASS, mxREAL);
72
73 newFPnt = (double*)mxGetPr(plhs[0]);
74 valid = (char*)mxGetPr(plhs[1]);
75
76 //idx convert from matlab to c
77 for(int i=0; i<nFeatures[1]; i++){
78 fPnt[i*2]=fPnt[i*2]-1;
79 fPnt[i*2+1]=fPnt[i*2+1]-1;
80 valid[i]=1;
81 }
82 if(nrhs>6){
83 calcPyrLKTrack( iP, iDxP, iDyP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize,
84 newFPnt, valid, accuracy_th, max_iter);
85 }else{
86 calcPyrLKTrack( iP, iDxP, iDyP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize,
87 newFPnt, valid);
88 }
89 //idx convert from matlab to c
90 for(int i=0; i<nFeatures[1]*2; i++){
91 fPnt[i]=fPnt[i]+1;
92 newFPnt[i]=newFPnt[i]+1;
93 }
94 free(imdims);
95 //free(iP);
96 //free(iDxP);
97 //free(iDyP);
98 //free(jP);
99}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.mexa64
new file mode 100755
index 0000000..f17c9ad
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.mexglx
new file mode 100755
index 0000000..1b6e21d
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.cc b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.cc
new file mode 100755
index 0000000..81f6274
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.cc
@@ -0,0 +1,99 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15#ifndef MAX_LEVEL
16# define MAX_LEVEL 5
17#endif
18// TODO: add number of corners parameter
19void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
20 // usage: [newFeaturePnt validFlag ] =
21 // calcOptFlowPyrLKMex(Ipyr, IdxPyr, IdyPyr, Jpyr, featurePnt, winSize, accuracy_th, max_iter)
22 // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell.
23 // featurePnt 2xn int
24 // winSize c_level int
25 // c_xx c_xy c_yy: image size double*
26 // image must be double
27
28
29 const mxArray* imgArray;
30 int* imdims;
31 const int *curImgDims;
32 const int *nFeatures;
33 //double **iP, **iDxP, **iDyP, **jP;
34 double *iP[MAX_LEVEL], *iDxP[MAX_LEVEL], *iDyP[MAX_LEVEL], *jP[MAX_LEVEL];
35 double *fPnt, *newFPnt;
36 char* valid;
37 double accuracy_th;
38 int winSize, max_iter;
39 const int *cellDims = mxGetDimensions(prhs[0]);
40
41 if (nrhs > 6) {
42 accuracy_th=(double)mxGetScalar(prhs[6]);
43 max_iter=(int)mxGetScalar(prhs[7]);
44 }
45
46 winSize = (int)mxGetScalar(prhs[5]);
47 fPnt=(double*)mxGetPr(prhs[4]);
48 nFeatures=mxGetDimensions(prhs[4]);
49
50 imdims=(int*)malloc(sizeof(int)*cellDims[0]*2);
51 //iP=(double**)malloc(sizeof(double*)*cellDims[0]);
52 //iDxP=(double**)malloc(sizeof(double*)*cellDims[0]);
53 //iDyP=(double**)malloc(sizeof(double*)*cellDims[0]);
54 //jP=(double**)malloc(sizeof(double*)*cellDims[0]);
55
56 for(int i=0; i<cellDims[0]; i++){
57 //imgArray=mxGetCell(prhs[0],i);
58 //curImgDims = mxGetDimensions(imgArray);
59 curImgDims = mxGetDimensions(mxGetCell(prhs[0],i));
60 imdims[i*2+0]= curImgDims[0];
61 imdims[i*2+1]= curImgDims[1];
62 //imdims[i][1] = curImgDims[1];
63
64 iP[i]= (double*)mxGetPr(mxGetCell(prhs[0],i));
65 iDxP[i]= (double*)mxGetPr(mxGetCell(prhs[1],i));
66 iDyP[i]= (double*)mxGetPr(mxGetCell(prhs[2],i));
67 jP[i]= (double*)mxGetPr(mxGetCell(prhs[3],i));
68 }
69
70 plhs[0] = mxCreateNumericMatrix(nFeatures[0], nFeatures[1], mxDOUBLE_CLASS, mxREAL);
71 plhs[1] = mxCreateNumericMatrix(1, nFeatures[1], mxUINT8_CLASS, mxREAL);
72
73 newFPnt = (double*)mxGetPr(plhs[0]);
74 valid = (char*)mxGetPr(plhs[1]);
75
76 //idx convert from matlab to c
77 for(int i=0; i<nFeatures[1]; i++){
78 fPnt[i*2]=(fPnt[i*2]-1)/2;
79 fPnt[i*2+1]=(fPnt[i*2+1]-1)/2;
80 valid[i]=1;
81 }
82 if(nrhs>6){
83 calcPyrLKTrack( iP, iDxP, iDyP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize,
84 newFPnt, valid, accuracy_th, max_iter);
85 }else{
86 calcPyrLKTrack( iP, iDxP, iDyP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize,
87 newFPnt, valid);
88 }
89 //idx convert from matlab to c
90 for(int i=0; i<nFeatures[1]*2; i++){
91 fPnt[i]=fPnt[i]*2+1;
92 newFPnt[i]=newFPnt[i]*2+1;
93 }
94 free(imdims);
95 //free(iP);
96 //free(iDxP);
97 //free(iDyP);
98 //free(jP);
99}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.mexa64
new file mode 100755
index 0000000..b3d2ae2
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.mexglx b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.mexglx
new file mode 100755
index 0000000..03a13a7
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrMex2.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.cc b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.cc
new file mode 100755
index 0000000..b9c3289
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.cc
@@ -0,0 +1,91 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15#ifndef MAX_LEVEL
16# define MAX_LEVEL 5
17#endif
18// TODO: add number of corners parameter
19void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
20 // usage: [newFeaturePnt validFlag ] =
21 // calcOptFlowLKPyrWInitMex2(Ipyr, IdxPyr, IdyPyr, Jpyr, featurePnt, winSize, accuracy_th, max_iter, initFPnt)
22 // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell.
23 // featurePnt 2xn int
24 // winSize c_level int
25 // c_xx c_xy c_yy: image size double*
26 // image must be double
27
28
29 const mxArray* imgArray;
30 int* imdims;
31 const int *curImgDims;
32 const int *nFeatures;
33 double *iP[MAX_LEVEL], *iDxP[MAX_LEVEL], *iDyP[MAX_LEVEL], *jP[MAX_LEVEL];
34 double *fPnt, *newFPnt, *initFPnt;
35 char* valid;
36 double accuracy_th;
37 int winSize, max_iter;
38 const int *cellDims = mxGetDimensions(prhs[0]);
39
40 accuracy_th=(double)mxGetScalar(prhs[6]);
41 max_iter=(int)mxGetScalar(prhs[7]);
42 initFPnt=(double*)mxGetPr(prhs[8]);
43
44 winSize = (int)mxGetScalar(prhs[5]);
45 fPnt=(double*)mxGetPr(prhs[4]);
46 nFeatures=mxGetDimensions(prhs[4]);
47
48 imdims=(int*)malloc(sizeof(int)*cellDims[0]*2);
49
50 for(int i=0; i<cellDims[0]; i++){
51 //imgArray=mxGetCell(prhs[0],i);
52 //curImgDims = mxGetDimensions(imgArray);
53 curImgDims = mxGetDimensions(mxGetCell(prhs[0],i));
54 imdims[i*2+0]= curImgDims[0];
55 imdims[i*2+1]= curImgDims[1];
56 //imdims[i][1] = curImgDims[1];
57
58 iP[i]= (double*)mxGetPr(mxGetCell(prhs[0],i));
59 iDxP[i]= (double*)mxGetPr(mxGetCell(prhs[1],i));
60 iDyP[i]= (double*)mxGetPr(mxGetCell(prhs[2],i));
61 jP[i]= (double*)mxGetPr(mxGetCell(prhs[3],i));
62 }
63
64 plhs[0] = mxCreateNumericMatrix(nFeatures[0], nFeatures[1], mxDOUBLE_CLASS, mxREAL);
65 plhs[1] = mxCreateNumericMatrix(1, nFeatures[1], mxUINT8_CLASS, mxREAL);
66
67 newFPnt = (double*)mxGetPr(plhs[0]);
68 valid = (char*)mxGetPr(plhs[1]);
69
70 //idx convert from matlab to c
71 for(int i=0; i<nFeatures[1]; i++){
72 fPnt[i*2]=fPnt[i*2]-1;
73 fPnt[i*2+1]=fPnt[i*2+1]-1;
74 initFPnt[i*2]=initFPnt[i*2]-1;
75 initFPnt[i*2+1]=initFPnt[i*2+1]-1;
76 valid[i]=1;
77 }
78 calcPyrLKTrackWInit( iP, iDxP, iDyP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize,
79 newFPnt, initFPnt, valid, accuracy_th, max_iter);
80 //idx convert from matlab to c
81 for(int i=0; i<nFeatures[1]*2; i++){
82 fPnt[i]=fPnt[i]+1;
83 initFPnt[i]=initFPnt[i]+1;
84 newFPnt[i]=newFPnt[i]+1;
85 }
86 free(imdims);
87 //free(iP);
88 //free(iDxP);
89 //free(iDyP);
90 //free(jP);
91}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.mexa64
new file mode 100755
index 0000000..7946dc1
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.mexglx
new file mode 100755
index 0000000..4ebcf9e
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.cc b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.cc
new file mode 100755
index 0000000..35288a6
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.cc
@@ -0,0 +1,91 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15#ifndef MAX_LEVEL
16# define MAX_LEVEL 5
17#endif
18// TODO: add number of corners parameter
19void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
20 // usage: [newFeaturePnt validFlag ] =
21 // calcOptFlowLKPyrWInitMex2(Ipyr, IdxPyr, IdyPyr, Jpyr, featurePnt, winSize, accuracy_th, max_iter, initFPnt)
22 // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell.
23 // featurePnt 2xn int
24 // winSize c_level int
25 // c_xx c_xy c_yy: image size double*
26 // image must be double
27
28
29 const mxArray* imgArray;
30 int* imdims;
31 const int *curImgDims;
32 const int *nFeatures;
33 double *iP[MAX_LEVEL], *iDxP[MAX_LEVEL], *iDyP[MAX_LEVEL], *jP[MAX_LEVEL];
34 double *fPnt, *newFPnt, *initFPnt;
35 char* valid;
36 double accuracy_th;
37 int winSize, max_iter;
38 const int *cellDims = mxGetDimensions(prhs[0]);
39
40 accuracy_th=(double)mxGetScalar(prhs[6]);
41 max_iter=(int)mxGetScalar(prhs[7]);
42 initFPnt=(double*)mxGetPr(prhs[8]);
43
44 winSize = (int)mxGetScalar(prhs[5]);
45 fPnt=(double*)mxGetPr(prhs[4]);
46 nFeatures=mxGetDimensions(prhs[4]);
47
48 imdims=(int*)malloc(sizeof(int)*cellDims[0]*2);
49
50 for(int i=0; i<cellDims[0]; i++){
51 //imgArray=mxGetCell(prhs[0],i);
52 //curImgDims = mxGetDimensions(imgArray);
53 curImgDims = mxGetDimensions(mxGetCell(prhs[0],i));
54 imdims[i*2+0]= curImgDims[0];
55 imdims[i*2+1]= curImgDims[1];
56 //imdims[i][1] = curImgDims[1];
57
58 iP[i]= (double*)mxGetPr(mxGetCell(prhs[0],i));
59 iDxP[i]= (double*)mxGetPr(mxGetCell(prhs[1],i));
60 iDyP[i]= (double*)mxGetPr(mxGetCell(prhs[2],i));
61 jP[i]= (double*)mxGetPr(mxGetCell(prhs[3],i));
62 }
63
64 plhs[0] = mxCreateNumericMatrix(nFeatures[0], nFeatures[1], mxDOUBLE_CLASS, mxREAL);
65 plhs[1] = mxCreateNumericMatrix(1, nFeatures[1], mxUINT8_CLASS, mxREAL);
66
67 newFPnt = (double*)mxGetPr(plhs[0]);
68 valid = (char*)mxGetPr(plhs[1]);
69
70 //idx convert from matlab to c
71 for(int i=0; i<nFeatures[1]; i++){
72 fPnt[i*2]=(fPnt[i*2]-1)/2;
73 fPnt[i*2+1]=(fPnt[i*2+1]-1)/2;
74 initFPnt[i*2]=(initFPnt[i*2]-1)/2;
75 initFPnt[i*2+1]=(initFPnt[i*2+1]-1)/2;
76 valid[i]=1;
77 }
78 calcPyrLKTrackWInit( iP, iDxP, iDyP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize,
79 newFPnt, initFPnt, valid, accuracy_th, max_iter);
80 //idx convert from matlab to c
81 for(int i=0; i<nFeatures[1]*2; i++){
82 fPnt[i]=fPnt[i]*2+1;
83 initFPnt[i]=initFPnt[i]*2+1;
84 newFPnt[i]=newFPnt[i]*2+1;
85 }
86 free(imdims);
87 //free(iP);
88 //free(iDxP);
89 //free(iDyP);
90 //free(jP);
91}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.mexa64
new file mode 100755
index 0000000..9588d9d
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.mexglx b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.mexglx
new file mode 100755
index 0000000..984f054
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitMex2.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.cc b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.cc
new file mode 100755
index 0000000..1a2b15d
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.cc
@@ -0,0 +1,87 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15#ifndef MAX_LEVEL
16# define MAX_LEVEL 5
17#endif
18// TODO: add number of corners parameter
19void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
20 // usage: [newFeaturePnt validFlag ] =
21 // calcOptFlowLKPyrWInitMex2(Ipyr, Jpyr, featurePnt, winSize, accuracy_th, max_iter, initFPnt)
22 // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell.
23 // featurePnt 2xn int
24 // winSize c_level int
25 // c_xx c_xy c_yy: image size double*
26 // image must be double
27
28
29 const mxArray* imgArray;
30 int* imdims;
31 const int *curImgDims;
32 const int *nFeatures;
33 double *iP[MAX_LEVEL], *jP[MAX_LEVEL];
34 double *fPnt, *newFPnt, *initFPnt;
35 char* valid;
36 double accuracy_th;
37 int winSize, max_iter;
38 const int *cellDims = mxGetDimensions(prhs[0]);
39
40 accuracy_th=(double)mxGetScalar(prhs[4]);
41 max_iter=(int)mxGetScalar(prhs[5]);
42 initFPnt=(double*)mxGetPr(prhs[6]);
43
44 winSize = (int)mxGetScalar(prhs[3]);
45 fPnt=(double*)mxGetPr(prhs[2]);
46 nFeatures=mxGetDimensions(prhs[2]);
47
48 imdims=(int*)malloc(sizeof(int)*cellDims[0]*2);
49
50 for(int i=0; i<cellDims[0]; i++){
51 //imgArray=mxGetCell(prhs[0],i);
52 //curImgDims = mxGetDimensions(imgArray);
53 curImgDims = mxGetDimensions(mxGetCell(prhs[0],i));
54 imdims[i*2+0]= curImgDims[0];
55 imdims[i*2+1]= curImgDims[1];
56 //imdims[i][1] = curImgDims[1];
57
58 iP[i]= (double*)mxGetPr(mxGetCell(prhs[0],i));
59 jP[i]= (double*)mxGetPr(mxGetCell(prhs[1],i));
60 }
61
62 plhs[0] = mxCreateNumericMatrix(nFeatures[0], nFeatures[1], mxDOUBLE_CLASS, mxREAL);
63 plhs[1] = mxCreateNumericMatrix(1, nFeatures[1], mxUINT8_CLASS, mxREAL);
64
65 newFPnt = (double*)mxGetPr(plhs[0]);
66 valid = (char*)mxGetPr(plhs[1]);
67
68 //idx convert from matlab to c
69 for(int i=0; i<nFeatures[1]; i++){
70 fPnt[i*2]=fPnt[i*2]-1;
71 fPnt[i*2+1]=fPnt[i*2+1]-1;
72 initFPnt[i*2]=initFPnt[i*2]-1;
73 initFPnt[i*2+1]=initFPnt[i*2+1]-1;
74 valid[i]=1;
75 }
76 calcPyrLKTrackWInit( iP, jP, imdims, cellDims[0], fPnt, nFeatures[1], winSize,
77 newFPnt, initFPnt, valid, accuracy_th, max_iter);
78 //idx convert from matlab to c
79 for(int i=0; i<nFeatures[1]*2; i++){
80 fPnt[i]=fPnt[i]+1;
81 initFPnt[i]=initFPnt[i]+1;
82 newFPnt[i]=newFPnt[i]+1;
83 }
84 free(imdims);
85 //free(iP);
86 //free(jP);
87}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.mexa64
new file mode 100755
index 0000000..dc5640e
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.mexglx
new file mode 100755
index 0000000..817ad6a
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOptFlowLKPyrWInitSobelMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowLK.cc b/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowLK.cc
new file mode 100755
index 0000000..150bae3
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowLK.cc
@@ -0,0 +1,59 @@
1
2/* compile with
3 mex calcOpticalFlowPyrLK.cc -I/usr/local/opencv/include -L/usr/local/opencv/lib -lcxcore -lcv
4*/
5
6#include "mex.h"
7#include "opencv/cv.h"
8#include "opencv/highgui.h"
9#include <stdio.h>
10#include <math.h>
11
12#define WIN_SIZE 10
13#define PYR_LEVELS 3
14
15void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
16 // usage: [ newpoints status pyr1 ] =
17 // calcOpticalFlowPyrLK(im1,im2,oldpoints,pyr1)
18 // images must be single-channel, 8-bit
19 // DO NOT PASS SAME IMAGE IN TWICE!
20
21 char *im1_ptr = (char*)mxGetPr(prhs[0]);
22 char *im2_ptr = (char*)mxGetPr(prhs[1]);
23 const int *imdims = mxGetDimensions(prhs[0]);
24 int flags = 0;
25 int max_iter;
26
27 if(nrhs>3){
28 max_iter=(int)mxGetScalar(prhs[3]);
29 }else{
30 max_iter=20;
31 }
32
33 /* images */
34 IplImage *im1 =
35 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1);
36 IplImage *im2 =
37 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1);
38 im1->imageData = im1_ptr;
39 im2->imageData = im2_ptr;
40
41 /* coordinate arrays */
42 CvPoint2D32f *oldpoints = (CvPoint2D32f*)mxGetPr(prhs[2]);
43 const int *pointsdim = mxGetDimensions(prhs[2]);
44 int npoints = pointsdim[1];
45 plhs[0] = mxCreateNumericMatrix(2, npoints, mxSINGLE_CLASS, mxREAL);
46 CvPoint2D32f *newpoints = (CvPoint2D32f*)mxGetPr(plhs[0]);
47
48 /* status array */
49 plhs[1] = mxCreateNumericMatrix(1, npoints, mxUINT8_CLASS, mxREAL);
50 char *status = (char*)mxGetPr(plhs[1]);
51
52 cvCalcOpticalFlowLK(im1, im2,
53 cvSize(WIN_SIZE, WIN_SIZE), velx, vely
54 status,
55 NULL,
56 cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,max_iter,0.03),
57 flags
58 );
59}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.cc b/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.cc
new file mode 100755
index 0000000..d4be5ff
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.cc
@@ -0,0 +1,77 @@
1
2/* compile with
3 mex calcOpticalFlowPyrLK.cc -I/usr/local/opencv/include -L/usr/local/opencv/lib -lcxcore -lcv
4*/
5
6#include "mex.h"
7#include "opencv/cv.h"
8#include "opencv/highgui.h"
9#include <stdio.h>
10#include <math.h>
11
12#define WIN_SIZE 8
13#define PYR_LEVELS 3
14
15void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
16 // usage: [ newpoints status pyr1 ] =
17 // calcOpticalFlowPyrLK(im1,im2,oldpoints,pyr1)
18 // images must be single-channel, 8-bit
19 // DO NOT PASS SAME IMAGE IN TWICE!
20
21 char *im1_ptr = (char*)mxGetPr(prhs[0]);
22 char *im2_ptr = (char*)mxGetPr(prhs[1]);
23 const int *imdims = mxGetDimensions(prhs[0]);
24 IplImage *pyr1 = 0, *pyr2 = 0;
25 int flags = 0;
26 bool clearPyr1 = false;
27 int max_iter;
28
29 max_iter=30;
30
31 /* images */
32 IplImage *im1 =
33 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1);
34 IplImage *im2 =
35 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1);
36 im1->imageData = im1_ptr;
37 im2->imageData = im2_ptr;
38
39 /* allocate pyramids */
40 pyr1 = cvCreateImageHeader(cvSize(imdims[0],imdims[1]), IPL_DEPTH_8U, 1);
41 pyr2 = cvCreateImageHeader(cvSize(imdims[0],imdims[1]), IPL_DEPTH_8U, 1);
42 // reuse pyramid if given
43 if (nrhs > 3) {
44 pyr1->imageData = (char*)mxGetPr(prhs[3]);
45 flags |= CV_LKFLOW_PYR_A_READY;
46 } else {
47 clearPyr1 = true;
48 cvCreateData(pyr1);
49 }
50
51 // pyr2 will be reused, so allocate in return value
52 plhs[2] = mxCreateNumericMatrix(imdims[0], imdims[1], mxUINT8_CLASS, mxREAL);
53 pyr2->imageData = (char*)mxGetPr(plhs[2]);
54
55 /* coordinate arrays */
56 CvPoint2D32f *oldpoints = (CvPoint2D32f*)mxGetPr(prhs[2]);
57 const int *pointsdim = mxGetDimensions(prhs[2]);
58 int npoints = pointsdim[1];
59 plhs[0] = mxCreateNumericMatrix(2, npoints, mxSINGLE_CLASS, mxREAL);
60 CvPoint2D32f *newpoints = (CvPoint2D32f*)mxGetPr(plhs[0]);
61
62 /* status array */
63 plhs[1] = mxCreateNumericMatrix(1, npoints, mxUINT8_CLASS, mxREAL);
64 char *status = (char*)mxGetPr(plhs[1]);
65
66 cvCalcOpticalFlowPyrLK(im1, im2,
67 pyr1, pyr2,
68 oldpoints, newpoints, npoints,
69 cvSize(WIN_SIZE, WIN_SIZE), PYR_LEVELS,
70 status,
71 NULL,
72 cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,max_iter,0.03),
73 flags
74 );
75 if (clearPyr1)
76 cvReleaseImage(&pyr1);
77}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.mexglx b/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.mexglx
new file mode 100755
index 0000000..ad5d0e9
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcOpticalFlowPyrLK.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.cc b/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.cc
new file mode 100755
index 0000000..9c1aed7
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.cc
@@ -0,0 +1,33 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15// TODO: add number of corners parameter
16void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
17 // usage: [dxPye dyPyr] =
18 // calcGradientPyrMex(imagePyr)
19
20 double *image, *retImg;
21 int newSizeY, newSizeX;
22 const int *imdims;
23
24 image=(double*)mxGetPr(prhs[0]);
25 imdims = mxGetDimensions(prhs[0]);
26
27 newSizeY=(imdims[0]+1)/2;
28 newSizeX=(imdims[1]+1)/2;
29 plhs[0] = mxCreateNumericMatrix(newSizeY, newSizeX, mxDOUBLE_CLASS, mxREAL);
30 retImg=(double*)mxGetPr(plhs[0]);
31
32 calcImgResize(image, imdims[0], imdims[1], retImg, newSizeY, newSizeX);
33}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexa64
new file mode 100755
index 0000000..0f66793
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexglx
new file mode 100755
index 0000000..192ea5a
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcResizedImgMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcSobelMex.cc b/SD-VBS/common/toolbox/lagrcv/calcSobelMex.cc
new file mode 100755
index 0000000..8667ec4
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcSobelMex.cc
@@ -0,0 +1,32 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15// TODO: add number of corners parameter
16void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
17 // usage: [dx dy] =
18 // calcSobelMex(image)
19
20 double *image, *dx, *dy;
21 const int *imdims;
22
23 image=(double*)mxGetPr(prhs[0]);
24 imdims = mxGetDimensions(prhs[0]);
25
26 plhs[0] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
27 plhs[1] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
28 dx=(double*)mxGetPr(plhs[0]);
29 dy=(double*)mxGetPr(plhs[1]);
30
31 calcSobel(image, imdims[0], imdims[1], dx, dy);
32}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexa64
new file mode 100755
index 0000000..272563f
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexglx
new file mode 100755
index 0000000..9fc5d10
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcSobelMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.cc b/SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.cc
new file mode 100755
index 0000000..314c835
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.cc
@@ -0,0 +1,44 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15// TODO: add number of corners parameter
16void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
17 // usage: [dxPye dyPyr] =
18 // calcGradientPyrMex(imagePyr)
19
20 const int *cellDims = mxGetDimensions(prhs[0]);
21 double *image;
22 const mxArray* imgArray;
23 mxArray *dxArray, *dyArray;
24 double *dx, *dy;
25 const int *imdims;
26
27 plhs[0] = mxCreateCellArray(2, cellDims);
28 plhs[1] = mxCreateCellArray(2, cellDims);
29
30 for(int i=0; i<cellDims[0];i++){
31 imgArray= mxGetCell(prhs[0],i);
32 image=mxGetPr(imgArray);
33 imdims = mxGetDimensions(imgArray);
34
35 dxArray = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
36 dyArray = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
37 mxSetCell(plhs[0], i, dxArray);
38 mxSetCell(plhs[1], i, dyArray);
39 dx=mxGetPr(dxArray);
40 dy=mxGetPr(dyArray);
41
42 calcSobel(image, imdims[0], imdims[1], dx, dy);
43 }
44}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.mexa64
new file mode 100755
index 0000000..a8b87a8
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.mexglx
new file mode 100755
index 0000000..1f1a3cc
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcSobelPyrMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.cc b/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.cc
new file mode 100755
index 0000000..1eba6d9
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.cc
@@ -0,0 +1,33 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15// TODO: add number of corners parameter
16void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
17 // usage: [dxPye dyPyr] =
18 // calcGradientPyrMex(imagePyr)
19
20 double *image, *retImg;
21 int newSizeY, newSizeX;
22 const int *imdims;
23
24 image=(double*)mxGetPr(prhs[0]);
25 imdims = mxGetDimensions(prhs[0]);
26
27 newSizeY=imdims[0]/2;
28 newSizeX=imdims[1]/2;
29 plhs[0] = mxCreateNumericMatrix(newSizeY, newSizeX, mxDOUBLE_CLASS, mxREAL);
30 retImg=(double*)mxGetPr(plhs[0]);
31
32 calcSubSampleAvg(image, imdims[0], imdims[1], retImg, newSizeY, newSizeX);
33}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexa64
new file mode 100755
index 0000000..6cf4f0e
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexglx
new file mode 100755
index 0000000..f8acfde
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcSubsampleAvgMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcTextureMex.cc b/SD-VBS/common/toolbox/lagrcv/calcTextureMex.cc
new file mode 100755
index 0000000..f91d184
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcTextureMex.cc
@@ -0,0 +1,53 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15// TODO: add number of corners parameter
16void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
17 // usage: [ lambda tr det c_xx c_xy c_yy] =
18 // goodFeaturesToTrack(image, winSize)
19 // image must be single-channel, 8-bit
20
21 double *image;
22 int winSize = (int)mxGetScalar(prhs[1]);
23 double *lambda, *tr, *det, *c_xx, *c_xy, *c_yy;
24 const int *imdims;
25 //double dx[360000];//[MAX_IMAGE_SIZE_1D];
26 //double dy[360000];//[MAX_IMAGE_SIZE_1D];
27 double *dx, *dy;
28
29 image = (double*)mxGetPr(prhs[0]);
30 imdims = mxGetDimensions(prhs[0]);
31 dx=(double*)malloc(sizeof(double)*imdims[0]*imdims[1]);
32 dy=(double*)malloc(sizeof(double)*imdims[0]*imdims[1]);
33
34 plhs[0] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
35 plhs[1] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
36 plhs[2] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
37 plhs[3] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
38 plhs[4] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
39 plhs[5] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
40
41 lambda = (double*)mxGetPr(plhs[0]);
42 tr = (double*)mxGetPr(plhs[1]);
43 det = (double*)mxGetPr(plhs[2]);
44 c_xx = (double*)mxGetPr(plhs[3]);
45 c_xy = (double*)mxGetPr(plhs[4]);
46 c_yy = (double*)mxGetPr(plhs[5]);
47
48 calcSobel(image, imdims[0], imdims[1], dx, dy);
49 calcGoodFeature(dx, dy, imdims[0], imdims[1], winSize,
50 lambda, tr, det, c_xx, c_xy, c_yy);
51 free(dx);
52 free(dy);
53}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexa64
new file mode 100755
index 0000000..3c023ea
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexglx
new file mode 100755
index 0000000..f8e0c99
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcTextureMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.cc b/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.cc
new file mode 100755
index 0000000..3c332ca
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.cc
@@ -0,0 +1,54 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15// TODO: add number of corners parameter
16void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
17 // usage: [ lambda tr det c_xx c_xy c_yy] =
18 // calcTexturePyrMex(dxPyr, dyPyr, winSize, level)
19 // image is assumed to be double
20 // the lowest level is 1
21
22 const int *cellDims = mxGetDimensions(prhs[0]);
23 int level=0;
24 char winSize = (char )mxGetScalar(prhs[2]);
25 double *dx, *dy;
26 const mxArray* dxArray, * dyArray;
27 const int *imdims;
28 double *tr, *det, *lambda, *c_xx, *c_xy, *c_yy;
29
30 if (nrhs > 3) level = (int)mxGetScalar(prhs[3])-1;
31
32 dxArray= mxGetCell(prhs[0],level);
33 dyArray= mxGetCell(prhs[1],level);
34 dx=mxGetPr(dxArray);
35 dy=mxGetPr(dyArray);
36 imdims = mxGetDimensions(dxArray);
37
38 plhs[0] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
39 plhs[1] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
40 plhs[2] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
41 plhs[3] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
42 plhs[4] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
43 plhs[5] = mxCreateNumericMatrix(imdims[0], imdims[1], mxDOUBLE_CLASS, mxREAL);
44
45 lambda = (double*)mxGetPr(plhs[0]);
46 tr = (double*)mxGetPr(plhs[1]);
47 det = (double*)mxGetPr(plhs[2]);
48 c_xx = (double*)mxGetPr(plhs[3]);
49 c_xy = (double*)mxGetPr(plhs[4]);
50 c_yy = (double*)mxGetPr(plhs[5]);
51
52 calcGoodFeature(dx, dy, imdims[0], imdims[1], winSize, lambda, tr, det, c_xx, c_xy, c_yy);
53
54}
diff --git a/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexa64
new file mode 100755
index 0000000..ebede53
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexglx b/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexglx
new file mode 100755
index 0000000..697ceec
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/calcTexturePyrMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/dummyMex.cc b/SD-VBS/common/toolbox/lagrcv/dummyMex.cc
new file mode 100755
index 0000000..0799182
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/dummyMex.cc
@@ -0,0 +1,58 @@
1
2/* compile with
3rm liblagrcv.a
4gcc -c lagrcv.cpp
5ar rc liblagrcv.a lagrcv.o
6ranlib liblagrcv.a
7mex7 calcTextureMex.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
8*/
9
10#include "mex.h"
11#include "lagrcv.h"
12#include <stdio.h>
13#include <math.h>
14
15// TODO: add number of corners parameter
16void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
17 // usage: [newFeaturePnt validFlag ] =
18 // calcOptFlowPyrLKMex(Ipyr, IdxPyr, IdyPyr, Jpyr, featurePnt, winSize, c_level, c_det, c_xx, c_xy, c_yy)
19 // Ipyr, IdxPyr, IdyPyr, Jpyr: levelx1 size cell.
20 // featurePnt 2xn int
21 // winSize c_level int
22 // c_xx c_xy c_yy: image size double*
23 // image must be single-channel, 8-bit
24
25
26 double* fPntDouble;
27 const int *nFeatures;
28 char* valid;
29 int *fPnt, *newFPnt;
30
31 fPntDouble=(double*)mxGetPr(prhs[0]);
32 nFeatures=mxGetDimensions(prhs[0]);
33 fPnt=(int*)malloc(sizeof(int)*nFeatures[0]*nFeatures[1]);
34
35 printf("nFeatures %d, %d", nFeatures[0], nFeatures[1]);
36 //plhs[0] = mxCreateNumericMatrix(nFeatures[0], nFeatures[1], mxINT32_CLASS, mxREAL);
37 plhs[0] = mxCreateNumericArray(2,nFeatures,mxINT32_CLASS, mxREAL);
38 //plhs[1] = mxCreateNumericMatrix(1, nFeatures[1], mxINT32_CLASS, mxREAL);
39 plhs[1] = mxCreateNumericArray(1,nFeatures+1,mxUINT8_CLASS, mxREAL);
40
41 newFPnt = (int*)mxGetPr(plhs[0]);
42 valid = (char*)mxGetPr(plhs[1]);
43
44 //idx convert from matlab to c
45 for(int i=0; i<nFeatures[1]; i++){
46 fPnt[i*2]=(int)fPntDouble[i*2]-1;
47 fPnt[i*2+1]=(int)fPntDouble[i*2+1]-1;
48 valid[i]=1;
49 }
50
51 //printf("v %d %d %d", valid[0], valid[1], valid[2]);
52
53 //idx convert from matlab to c
54 for(int i=0; i<nFeatures[1]*2; i++){
55 newFPnt[i]=fPnt[i]+1;
56 }
57 free(fPnt);
58}
diff --git a/SD-VBS/common/toolbox/lagrcv/dummyMex.mexa64 b/SD-VBS/common/toolbox/lagrcv/dummyMex.mexa64
new file mode 100755
index 0000000..a394cc7
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/dummyMex.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/dummyMex.mexglx b/SD-VBS/common/toolbox/lagrcv/dummyMex.mexglx
new file mode 100755
index 0000000..11c3dd2
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/dummyMex.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/findCornerSubPix.cc b/SD-VBS/common/toolbox/lagrcv/findCornerSubPix.cc
new file mode 100755
index 0000000..3e8659c
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/findCornerSubPix.cc
@@ -0,0 +1,39 @@
1
2/* compile with
3 mex findCornerSubPix.cc -I/usr/local/opencv/include -L/usr/local/opencv/lib -lcxcore -lcv
4*/
5
6#include "mex.h"
7#include "opencv/cv.h"
8#include "opencv/highgui.h"
9#include <stdio.h>
10#include <math.h>
11
12//#define MAX_CORNERS 500
13#define WIN_SIZE 5
14
15void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
16 // usage: [ features ] =
17 // findCornerSubPix(image, features)
18 // image must be single-channel, 8-bit
19
20 char *image_pr = (char*)mxGetPr(prhs[0]);
21 const int *imdims = mxGetDimensions(prhs[0]);
22 IplImage *image =
23 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1);
24 image->imageData = image_pr;
25
26 const int *feature_dims = mxGetDimensions(prhs[1]);
27 int nfeatures = feature_dims[1];
28 plhs[0] = mxCreateNumericMatrix(2, nfeatures, mxSINGLE_CLASS, mxREAL);
29 CvPoint2D32f *newfeatures = (CvPoint2D32f*)mxGetPr(plhs[0]);
30 CvPoint2D32f *oldfeatures = (CvPoint2D32f*)mxGetPr(prhs[1]);
31 // plhs[0] = mxDuplicateArray(prhs[1]);
32 // CvPoint2D32f *newfeatures = (CvPoint2D32f*)mxGetPr(plhs[0]);
33 memcpy(newfeatures, oldfeatures, sizeof(float)*2*nfeatures);
34
35 cvFindCornerSubPix(image, newfeatures, nfeatures,
36 cvSize(WIN_SIZE,WIN_SIZE),
37 cvSize(-1,-1),
38 cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS,20,0.03));
39}
diff --git a/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.cc b/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.cc
new file mode 100755
index 0000000..376a096
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.cc
@@ -0,0 +1,62 @@
1
2/* compile with
3 mex goodFeaturesToTrack.cc -I/usr/local/opencv/include -L/usr/local/opencv/lib -lcxcore -lcv
4*/
5
6#include "mex.h"
7#include "opencv/cv.h"
8#include "opencv/highgui.h"
9#include <stdio.h>
10#include <math.h>
11
12#define MAX_CORNERS 500
13
14IplImage *eigtemp = NULL, *temp2 = NULL;
15
16// TODO: add number of corners parameter
17void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
18 // usage: [ features numvalid ] =
19 // goodFeaturesToTrack(image, quality, mindist, mask)
20 // image must be single-channel, 8-bit
21 // quality = minimum acceptable ratio of eigenvalues
22 // mindist = minimum distance between corners
23 // mask (optional) = bitmap mask "region of interest" (MUST BE uint8 TYPE!)
24
25 char *image_pr = (char*)mxGetPr(prhs[0]);
26 // int imdims[] = { (int)d_imdims[0], (int)d_imdims[1] };
27 const int *imdims = mxGetDimensions(prhs[0]);
28 double quality = mxGetScalar(prhs[1]);
29 double mindist = mxGetScalar(prhs[2]);
30 bool use_roi = nrhs > 3;
31
32 plhs[0] = mxCreateNumericMatrix(2, MAX_CORNERS, mxSINGLE_CLASS, mxREAL);
33 plhs[1] = mxCreateNumericMatrix(1, 1, mxINT32_CLASS, mxREAL);
34
35 CvPoint2D32f *corner_coords = (CvPoint2D32f*)mxGetPr(plhs[0]);
36 int *corner_count = (int*)mxGetPr(plhs[1]);
37 *corner_count = MAX_CORNERS;
38
39 if (eigtemp == NULL) {
40 eigtemp = cvCreateImage(cvSize(imdims[0],imdims[1]), IPL_DEPTH_32F, 1);
41 temp2 = cvCreateImage(cvSize(imdims[0],imdims[1]), IPL_DEPTH_32F, 1);
42 }
43
44 IplImage *image =
45 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1);
46 image->imageData = image_pr;
47
48 IplImage *roimask = NULL;
49 if (use_roi) {
50 roimask = cvCreateImage(cvSize(imdims[0],imdims[1]), IPL_DEPTH_8U, 1);
51 roimask->imageData = (char*)mxGetPr(prhs[3]);
52 }
53
54 cvGoodFeaturesToTrack(image,
55 eigtemp, temp2,
56 corner_coords,
57 corner_count,
58 quality,
59 mindist,
60 roimask
61 );
62}
diff --git a/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.mexglx b/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.mexglx
new file mode 100755
index 0000000..0fe9080
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/goodFeaturesToTrack.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/lagrcv.cpp b/SD-VBS/common/toolbox/lagrcv/lagrcv.cpp
new file mode 100755
index 0000000..4f24b5d
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/lagrcv.cpp
@@ -0,0 +1,840 @@
1#include "lagrcv.h"
2/*
3void calcImagePyr(char *src, int sizeY, int sizeX, int level, char *pyr){
4 pyr=(char*) malloc(sizeof(char)*(int)sizeY*sizeX*4/3);
5 int i, startPnt, nX, nY;
6
7 memcpy(pyr,src, sizeY*sizeX);
8 nY=sizeY;
9 nX=sizeX;
10 for(i=0; i<level; i++){
11 nY = (nY + 1) >> 1;
12 nX = (nX + 1) >> 1;
13 calcSubsample(pyr, sizeY, sizeX, pyr+sizeY*sizeX)
14 }
15 free(pyr);
16}
17*/
18
19void calcSubSampleAvg(double *src, int sizeY, int sizeX, double *dest, int destSizeY, int destSizeX){
20 int i, j, idx,
21 destI, destJ, idxDest;
22 for(i=0, destI=0; destI<destSizeX; i+=2, destI++){
23 for(j=0, destJ=0; destJ<destSizeY; j+=2, destJ++){
24 idx=i*sizeX+j;
25 idxDest=destI*destSizeY+destJ;
26 dest[idxDest]=(src[idx]+src[idx+1]+src[idx+sizeY]+src[idx+sizeY+1])/4;
27 }
28 }
29}
30void calcImgBlur(double *src, int sizeY, int sizeX, double *dest){
31 double kernel[]={0.0625, 0.25, 0.375, 0.25, 0.0625};
32 double *temp;
33 temp=(double*) malloc(sizeof(double)*sizeY*sizeX);
34 int i, j, idx, idxCol;
35 for(i=2; i<sizeX-2;i++){
36 idxCol=i*sizeY;
37 for(j=0;j<sizeY; j++){
38 idx=idxCol+j;
39 temp[idx]=src[idx-2*sizeY]/16+src[idx-sizeY]/4
40 +src[idx]*3/8+src[idx+sizeY]/4+src[idx+2*sizeY]/16;
41 }
42 }
43 for(i=0; i<sizeX;i++){
44 idxCol=i*sizeY;
45 for(j=2;j<sizeY-2; j++){
46 idx=idxCol+j;
47 dest[idx]=temp[idx-2]/16+temp[idx-1]/4
48 +temp[idx]*3/8+temp[idx+1]/4+temp[idx+2]/16;
49 }
50 }
51 free(temp);
52}
53void calcImgResize(double *src, int sizeY, int sizeX, double *dest, int dstSizeY, int dstSizeX){
54 double ker[]={ 0.0039, 0.0156, 0.0234, 0.0156, 0.0039,
55 0.0156, 0.0625, 0.0938, 0.0625, 0.0156,
56 0.0234, 0.0938, 0.1406, 0.0938, 0.0234,
57 0.0156, 0.0625, 0.0938, 0.0625, 0.0156,
58 0.0039, 0.0156, 0.0234, 0.0156, 0.0039};
59 int srcI, srcJ, dstI, dstJ, srcIdx, dstIdx, idxCol_1, idxCol1, idxCol_2, idxCol2;
60 for(srcI=2, dstI=1; srcI<sizeX-2; srcI+=2, dstI++){
61 for(srcJ=2, dstJ=1; srcJ<sizeY-2; srcJ+=2, dstJ++){
62 srcIdx=srcI*sizeY+srcJ;
63 dstIdx=dstI*dstSizeY+dstJ;
64 idxCol_1=srcIdx-sizeY;
65 idxCol_2=srcIdx-2*sizeY;
66 idxCol1=srcIdx+sizeY;
67 idxCol2=srcIdx+2*sizeY;
68 dest[dstIdx]=
69 src[idxCol_2-2]*ker[0]+src[idxCol_1-2]*ker[1]
70 +src[srcIdx-2]*ker[2]+src[idxCol1-2]*ker[3]+src[idxCol2-2]*ker[4]
71 +src[idxCol_2-1]*ker[5]+src[idxCol_1-1]*ker[6]
72 +src[srcIdx-1]*ker[7]+src[idxCol1-1]*ker[8]+src[idxCol2-1]*ker[9]
73 +src[idxCol_2]*ker[10]+src[idxCol_1]*ker[11]
74 +src[srcIdx]*ker[12]+src[idxCol1]*ker[13]+src[idxCol2]*ker[14]
75 +src[idxCol_2+1]*ker[5]+src[idxCol_1+1]*ker[16]
76 +src[srcIdx+1]*ker[17]+src[idxCol1+1]*ker[18]+src[idxCol2+1]*ker[19];
77 +src[idxCol_2+2]*ker[20]+src[idxCol_1+2]*ker[21]
78 +src[srcIdx+2]*ker[22]+src[idxCol1+2]*ker[23]+src[idxCol2+2]*ker[24];
79 }
80 }
81}
82
83void calcGradient(double *src, int sizeY, int sizeX, double *dX, double *dY){
84 int i, j, idx;
85 for(i=1; i<sizeX; i++){
86 for(j=1; j<sizeY; j++){
87 idx=i*sizeY+j;
88 dX[idx]=src[idx]-src[idx-sizeY];
89 dY[idx]=src[idx]-src[idx-1];
90 }
91 }
92}
93void calcGradient(char *src, int sizeY, int sizeX, char *dX, char *dY){
94 int i, j, idx;
95 for(i=1; i<sizeX; i++){
96 for(j=1; j<sizeY; j++){
97 idx=i*sizeY+j;
98 dX[idx]=src[idx]-src[idx-sizeY];
99 dY[idx]=src[idx]-src[idx-1];
100 }
101 }
102}
103void calcSobel(double *src, int sizeY, int sizeX, double *dX, double *dY){
104 //char kernelV[9]={-1, -2, -1, 0, 0, 0, 1, 2, 1};
105 //char kernelH[9]={-1, 0, 1, -2, 0, 2, -1, 0, 1};
106 //const int kerSize=3;
107 int i, j, idx, idxPrevCol, idxNextCol;
108 for(i=1; i<sizeX-1; i++){
109 for(j=1; j<sizeY-1; j++){
110 idx=i*sizeY+j;
111 idxPrevCol=idx-sizeY;
112 idxNextCol=idx+sizeY;
113 dX[idx]=src[idxPrevCol-1]*-0.0938f+src[idxPrevCol]*-0.3125f+src[idxPrevCol+1]*-0.0938f
114 +src[idxNextCol-1]*0.0938f+src[idxNextCol]*0.3125f+src[idxNextCol+1]*0.0938f;
115 dY[idx]=src[idxPrevCol-1]*-0.0938f+src[idx-1]*-0.3125f+src[idxNextCol-1]*-0.0938f
116 +src[idxPrevCol+1]*0.0938f+src[idx+1]*0.3125f+src[idxNextCol+1]*0.0938f;
117/*
118 dX[idx]=(src[idxPrevCol-1]*-1+src[idxPrevCol]*-2+src[idxPrevCol+1]*-1
119 +src[idxNextCol-1]*1+src[idxNextCol]*2+src[idxNextCol+1]*1)*0.0625;
120 dY[idx]=(src[idxPrevCol-1]*-1+src[idx-1]*-2+src[idxNextCol-1]*-1
121 +src[idxPrevCol+1]*1+src[idx+1]*2+src[idxNextCol+1]*1)*0.0625;
122*/
123 }
124 }
125}
126
127void calcGoodFeature(double *dX, double *dY, int sizeY, int sizeX, int winSize, double* lambda, double* tr, double* det,
128 double* c_xx, double* c_xy, double* c_yy){
129 double *xx, *xy, *yy;
130 int i,j,idx;
131 xx=(double*)malloc(sizeof(double)*sizeY*sizeX);
132 xy=(double*)malloc(sizeof(double)*sizeY*sizeX);
133 yy=(double*)malloc(sizeof(double)*sizeY*sizeX);
134 for(idx=0; idx<sizeX*sizeY; idx++){
135 xx[idx]=dX[idx]*dX[idx];
136 xy[idx]=dX[idx]*dY[idx];
137 yy[idx]=dY[idx]*dY[idx];
138 }
139 calcAreaSum(xx, sizeY, sizeX, winSize, c_xx);
140 calcAreaSum(xy, sizeY, sizeX, winSize, c_xy);
141 calcAreaSum(yy, sizeY, sizeX, winSize, c_yy);
142 for(idx=0; idx<sizeX*sizeY; idx++){
143 tr[idx]=c_xx[idx]+c_yy[idx];
144 det[idx]=c_xx[idx]*c_yy[idx]-c_xy[idx]*c_xy[idx];
145 lambda[idx]=det[idx]/(tr[idx] + 0.00001);
146 }
147 free(xx);
148 free(xy);
149 free(yy);
150}
151void calcGoodFeature(char *dX, char *dY, int sizeY, int sizeX, int winSize, float* lambda, float* tr, float* det){
152 int *xx, *xy, *yy;
153 int *c_xx, *c_xy, *c_yy;
154 int i,j,idx;
155 xx=(int*)malloc(sizeof(int)*sizeY*sizeX);
156 xy=(int*)malloc(sizeof(int)*sizeY*sizeX);
157 yy=(int*)malloc(sizeof(int)*sizeY*sizeX);
158 c_xx=(int*)malloc(sizeof(int)*sizeY*sizeX);
159 c_xy=(int*)malloc(sizeof(int)*sizeY*sizeX);
160 c_yy=(int*)malloc(sizeof(int)*sizeY*sizeX);
161 for(i=0; i<sizeX; i++){
162 for(j=0; j<sizeY; j++){
163 idx=i*sizeY+j;
164 xx[idx]=dX[idx]*dX[idx];
165 xy[idx]=dX[idx]*dY[idx];
166 yy[idx]=dY[idx]*dY[idx];
167 }
168 }
169 calcAreaSum(xx, sizeY, sizeX, winSize, c_xx);
170 calcAreaSum(xy, sizeY, sizeX, winSize, c_xy);
171 calcAreaSum(yy, sizeY, sizeX, winSize, c_yy);
172 for(i=0; i<sizeX; i++){
173 for(j=0; j<sizeY; j++){
174 idx=i*sizeY+j;
175 tr[idx]=c_xx[idx]+c_yy[idx];
176 det[idx]=c_xx[idx]*c_yy[idx]-c_xy[idx]*c_xy[idx];
177 lambda[i*sizeY+j]=det[idx]/(tr[idx] + 0.00001);
178 }
179 }
180}
181void calcMinEigenValue(char *dX, char *dY, int sizeY, int sizeX, float* lambda){
182 int xx, xy, yy;
183 int tr;
184 int i,j;
185 for(i=0; i<sizeX; i++){
186 for(j=0; j<sizeY; j++){
187 xx=dX[i*sizeY+j]*dX[i*sizeY+j];
188 xy=dX[i*sizeY+j]*dY[i*sizeY+j];
189 yy=dY[i*sizeY+j]*dY[i*sizeY+j];
190 tr=xx+yy;
191 lambda[i*sizeY+j]=(float)(tr-pow((xx-yy)*(xx-yy)+4*xy*xy,0.5))/2;
192 }
193 }
194}
195
196void calcAreaSum(double *src, int sizeY, int sizeX, int winSize, double *ret){
197/**/
198 const int MAX_COLS = 1024;
199 double *a_array[MAX_COLS], *b_array[MAX_COLS];
200 double a1[MAX_COLS], a1sum;
201
202 int nave = winSize;
203 int nave_half = (int)floor((nave+1)/2)-1;
204
205 double *a_ptr = src;
206
207 int nx = sizeY;
208 int ny = sizeX;
209
210 double *b_ptr = ret;
211
212 // Construct array pointers
213 for (int iy = 0; iy < ny; iy++) {
214 a_array[iy] = a_ptr + iy*nx;
215 b_array[iy] = b_ptr + iy*nx;
216 }
217
218 // Initialize a1 array
219 for (int i = 0; i < nx+nave; i++)
220 a1[i] = 0.0;
221 // Sum over cols:
222 for (int iy = 0; iy < ny; iy++) {
223 // Copy col into temp array:
224 for (int ix = 0; ix < nx; ix++)
225 a1[ix+nave_half] = a_array[iy][ix];
226
227 a1sum = 0.0;
228 for (int i = 0; i < nave; i++)
229 a1sum += a1[i];
230
231 for (int ix = 0; ix < nx; ix++) {
232 b_array[iy][ix] = a1sum;
233 a1sum += a1[ix+nave]-a1[ix];
234 }
235 }
236 // Re-initialize a1 array
237 for (int i = 0; i < ny+nave; i++)
238 a1[i] = 0.0;
239 // Sum over rows:
240 for (int ix = 0; ix < nx; ix++) {
241 // Copy row into temp array:
242 for (int iy = 0; iy < ny; iy++)
243 a1[iy+nave_half] = b_array[iy][ix];
244
245 a1sum = 0.0;
246 for (int i = 0; i < nave; i++)
247 a1sum += a1[i];
248
249 for (int iy = 0; iy < ny; iy++) {
250 b_array[iy][ix] = a1sum;
251 a1sum += a1[iy+nave]-a1[iy];
252 }
253 }
254/**/
255 // 8n^2+2n
256/*
257 // 10n^2
258 int idx, idxCol, idx_1, idx_win, idx_Y, idx_win_Y;
259 double* sum=(double*)malloc(sizeof(double)*sizeX*sizeY);
260 //sum up along Y
261 for(idx=idxCol=0; idx<(sizeX*sizeY); idxCol=idx){
262 sum[idx]=src[idx];
263 idx++;
264 for(idx_1=idx-1;idx<(idxCol+winSize);idx++,
265 idx_1++){
266 sum[idx]=sum[idx_1]+src[idx];
267 }
268 for(idx_win=idx-winSize;idx<(idxCol+sizeY);idx++,
269 idx_1++,
270 idx_win++){
271 sum[idx]=sum[idx_1]+src[idx]-src[idx_win];
272 }
273 }
274 //sum up along X
275 for(idx=0;idx<sizeY;idx++){
276 ret[idx]=sum[idx];
277 }
278 for(idx_Y=idx-sizeY;idx<(winSize*sizeY);idx++,
279 idx_Y++){
280 ret[idx]+=sum[idx]+ret[idx_Y];
281 }
282 for(idx_win_Y=idx-winSize*sizeY;idx<(sizeX*sizeY); idx++,
283 idx_win_Y++,
284 idx_Y++){
285 ret[idx]+=sum[idx]+ret[idx_Y]-sum[idx_win_Y];
286 }
287 free(sum);
288/**/
289/*
290 // 8n^2+2n
291 int i,j;
292 int idx,idxCol;
293 int idxDelta[4];
294 double* sum=(double*)malloc(sizeof(double)*sizeX*sizeY);
295 int halfSize=(int)winSize/2;
296 ret[0]=src[0];
297 for(i=1; i<sizeY; i++){
298 sum[i]=src[i]+sum[i-1];
299 }
300 for(i=1; i<sizeX; i++){
301 idx=i*sizeY;
302 sum[idx]=src[idx]+sum[idx-sizeY];
303 }
304 for(i=1; i<sizeX; i++){
305 for(j=1; j<sizeY; j++){
306 idx=i*sizeY+j;
307 sum[idx]=src[idx]
308 + sum[idx-1]
309 + sum[idx-sizeY]
310 - sum[idx-sizeY-1];
311 }
312 }
313 idxDelta[0]=halfSize*sizeY+halfSize;
314 idxDelta[1]=-halfSize*sizeY+halfSize;
315 idxDelta[2]=halfSize*sizeY-halfSize;
316 idxDelta[3]=-halfSize*sizeY-halfSize;
317 for(i=halfSize; i<sizeX-halfSize; i++){
318 for(j=halfSize; j<sizeY-halfSize; j++){
319 idx=i*sizeY+j;
320 ret[i*sizeY+j]=sum[idx+idxDelta[0]]-sum[idx+idxDelta[1]]-sum[idx+idxDelta[2]]+sum[idx+idxDelta[3]];
321 }
322 }
323 free(sum);
324/**/
325}
326void calcAreaSum(int *src, int sizeY, int sizeX, int sizeSum, int *ret){
327 // 8n^2+2n
328 int i,j;
329 int idx,idxCol;
330 int idxDelta[4];
331 int *sum;
332 sum=(int*)malloc(sizeof(int)*sizeY*sizeX);
333 int halfSize=(int)sizeSum/2;
334 ret[0]=src[0];
335 for(i=1; i<sizeY; i++){
336 sum[i]=src[i]+sum[i-1];
337 }
338 for(i=0; i<sizeX; i++){
339 idx=i*sizeY;
340 sum[idx]=src[idx]+sum[idx-sizeY];
341 }
342 for(i=1; i<sizeX; i++){
343 for(j=1; j<sizeY; j++){
344 idx=i*sizeY+j;
345 sum[idx]=src[idx]
346 + sum[idx-1]
347 + sum[idx-sizeY]
348 - sum[idx-sizeY-1];
349 }
350 }
351/*
352 for(i=0; i<sizeX; i++){
353 for(j=0; j<sizeY; j++){
354 idx=i*sizeY+j;
355 sum[idx]=src[idx]
356 + ((j>0)?sum[idx-1]:0)
357 + ((i>0)?sum[idx-sizeY]:0)
358 - ((i>0&&j>0)?sum[idx-sizeY-1]:0);
359 }
360 }
361*/
362 idxDelta[0]=halfSize*sizeY+halfSize;
363 idxDelta[1]=-halfSize*sizeY+halfSize;
364 idxDelta[2]=halfSize*sizeY-halfSize;
365 idxDelta[3]=-halfSize*sizeY-halfSize;
366 for(i=halfSize; i<sizeX-halfSize; i++){
367 for(j=halfSize; j<sizeY-halfSize; j++){
368 idx=i*sizeY+j;
369 ret[i*sizeY+j]=sum[idx+idxDelta[0]]-sum[idx+idxDelta[1]]-sum[idx+idxDelta[2]]+sum[idx+idxDelta[3]];
370 }
371 }
372
373 free(sum);
374}
375
376
377void getInterpolatePatch(double* srcImg, int* srcDims, double centerX, double centerY, int winSize, double* dstImg){
378 double a, b, a11, a12, a21, a22, b1, b2;
379 int srcIdxX, srcIdx;
380 int dstIdxX, dstIdx;
381 a=centerX-(double)((int)centerX);
382 b=centerY-(double)((int)centerY);
383 a11=(1.f-a)*(1.f-b);
384 a12=a*(1.f-b);
385 a21=(1.f-a)*b;
386 a22=a*b;
387 b1=1.f-b;
388 b2=b;
389
390 for(int i=-winSize; i<winSize; i++){
391 srcIdxX=(int)centerX+i;
392 dstIdxX=i+winSize;
393 for(int j=-winSize; j<winSize; j++){
394 srcIdx=(int)srcIdxX*srcDims[0]+(int)centerY+j;
395 dstIdx=dstIdxX*2*winSize+j+winSize;
396 dstImg[dstIdx]=srcImg[srcIdx]*a11
397 +srcImg[srcIdx+1]*a12
398 +srcImg[srcIdx+srcDims[0]]*a21
399 +srcImg[srcIdx+srcDims[0]+1]*a22;
400 }
401 }
402}
403void calcPyrLKTrack(double** iP, double** iDxP, double** iDyP, double** jP, const int* imgDims, int pLevel,
404 double* fPnt, int nFeatures, int winSize,
405 double* newFPnt, char* valid){
406 calcPyrLKTrack( iP, iDxP, iDyP, jP, imgDims, pLevel,
407 fPnt, nFeatures, winSize,
408 newFPnt, valid, LK_ACCURACY_TH, LK_MAX_ITER);
409}
410void calcPyrLKTrackWInit(double** iP, double** jP, const int* imgDims, int pLevel,
411 double* fPnt, int nFeatures, int winSize,
412 double* newFPnt, double* initFPnt,
413 char* valid, double accuracy_th, int max_iter){
414
415 double x, y, eX, eY, dX, dY, mX, mY, prevMX, prevMY, c_xx, c_xy, c_yy, c_det, dIt;
416 double* iPatch, *jPatch, *iDxPatch, *iDyPatch;
417 int level, winSizeSq, winSizeSqWBorder;
418 int i, k, idx;
419 int imgSize[2];
420
421 static const double rate[]={1, 0.5, 0.25, 0.125, 0.0625, 0.03125};
422 winSizeSq=4*winSize*winSize;
423 winSizeSqWBorder=4*(winSize+1)*(winSize+1);
424
425 iPatch=(double*) malloc(sizeof(double)*winSizeSqWBorder);
426 jPatch=(double*) malloc(sizeof(double)*winSizeSq);
427 iDxPatch=(double*) malloc(sizeof(double)*winSizeSqWBorder);
428 iDyPatch=(double*) malloc(sizeof(double)*winSizeSqWBorder);
429
430 for(i=0; i<nFeatures; i++){
431 dX=(initFPnt[i*2+0]-fPnt[i*2+0])*rate[pLevel];
432 dY=(initFPnt[i*2+1]-fPnt[i*2+1])*rate[pLevel];
433 x=fPnt[i*2+0]*rate[pLevel];//half size of real level
434 y=fPnt[i*2+1]*rate[pLevel];
435 for(level=pLevel-1; level>=0; level--){
436 x+=x; y+=y; dX+=dX; dY+=dY;
437 imgSize[0]=imgDims[level*2+0]; //y,x
438 imgSize[1]=imgDims[level*2+1]; //y,x
439
440 c_xx=c_xy=c_yy=0;
441 //when feature goes out to the boundary.
442 if((x-winSize-1)<0 || (y-winSize-1)<0
443 || (y+winSize+1+1)>=imgSize[0] || (x+winSize+1+1)>=imgSize[1]){
444 //winSize+1due to interpolation
445 //error or skip the level??
446 valid[i]=0;
447 break;
448 }
449
450 getInterpolatePatch(iP[level], imgSize, x, y, winSize+1, iPatch); //to calculate iDx, iDy
451 calcSobel(iPatch, (winSize+1)*2, (winSize+1)*2, iDxPatch, iDyPatch);
452 for(k=0; k <(winSize*2); k++ ){
453 memcpy( iPatch + k*winSize*2, iPatch + (k+1)*(winSize+1)*2 + 1, winSize*2 );
454 memcpy( iDxPatch + k*winSize*2, iDxPatch + (k+1)*(winSize+1)*2 + 1, winSize*2 );
455 memcpy( iDyPatch + k*winSize*2, iDyPatch + (k+1)*(winSize+1)*2 + 1, winSize*2 );
456 }
457
458 for(idx=0; idx<winSizeSq;idx++){
459 c_xx+=iDxPatch[idx]*iDxPatch[idx];
460 c_xy+=iDxPatch[idx]*iDyPatch[idx];
461 c_yy+=iDyPatch[idx]*iDyPatch[idx];
462 }
463 c_det=c_xx*c_yy-c_xy*c_xy;
464 if(c_det/(c_xx+c_yy+0.00000001)<GOOD_FEATURE_LAMBDA_TH){
465 //just skip?
466 valid[i]=0;
467 break;
468 }
469 c_det=1/c_det;
470 for(k=0; k<max_iter; k++){
471 if((x+dX-winSize)<0 || (y+dY-winSize)<0
472 || (y+dY+winSize+1)>=imgSize[0] || (x+dX+winSize+1)>=imgSize[1]){
473 //winSize+1due to interpolation
474 //error or skip the level??
475 valid[i]=0;
476 break;
477 }
478 getInterpolatePatch(jP[level], imgSize, x+dX, y+dY, winSize, jPatch);
479 eX=eY=0;
480 for(idx=0;idx<winSizeSq;idx++){
481 dIt=iPatch[idx]-jPatch[idx];
482 eX+=dIt*iDxPatch[idx];
483 eY+=dIt*iDyPatch[idx];
484 }
485 mX=c_det*(eX*c_yy-eY*c_xy);
486 mY=c_det*(-eX*c_xy+eY*c_xx);
487 dX+=mX;
488 dY+=mY;
489 if((mX*mX+mY*mY)<accuracy_th) break;
490 if( k>0 && (mX + prevMX) < 0.01 && (mX+prevMX) > -0.01
491 && (mY + prevMY) < 0.01 && (mY+prevMY) > -0.01)
492 {
493 dX -= mX*0.5f;
494 dY -= mY*0.5f;
495 break;
496 }
497 prevMX=mX;
498 prevMY=mY;
499 }
500 if(k==max_iter){
501 valid[i]=0;
502 }
503 }
504 newFPnt[i*2+0]=fPnt[i*2+0]+dX;
505 newFPnt[i*2+1]=fPnt[i*2+1]+dY;
506/*
507 if(valid[i]
508 || (x+dX-winSize)<0 || (y+dY-winSize)<0
509 || (y+dY+winSize+1)>=imgSize[0] || (x+dX+winSize+1)>=imgSize[1]){
510 newFPnt[i*2+0]=fPnt[i*2+0]+dX;
511 newFPnt[i*2+1]=fPnt[i*2+1]+dY;
512 getInterpolatePatch(jP[0], imgSize, newFPnt[i*2+0], newFPnt[i*2+0], winSize, jPatch);
513 dIt=0;
514 for(idx=0;idx<winSizeSq;idx++){
515 dIt+=(iPatch[idx]-jPatch[idx])*(iPatch[idx]-jPatch[idx]);
516 }
517 if(dIt>winSizeSq*50000){
518 valid[i]=0;
519 }
520 }else{
521 newFPnt[i*2+0]=0;
522 newFPnt[i*2+1]=0;
523 }
524*/
525 }
526 free(iPatch);
527 free(jPatch);
528 free(iDxPatch);
529 free(iDyPatch);
530}
531void calcPyrLKTrackWInit(double** iP, double** iDxP, double** iDyP, double** jP, const int* imgDims, int pLevel,
532 double* fPnt, int nFeatures, int winSize,
533 double* newFPnt, double* initFPnt,
534 char* valid, double accuracy_th, int max_iter){
535
536 double x, y, eX, eY, dX, dY, mX, mY, prevMX, prevMY, c_xx, c_xy, c_yy, c_det, dIt;
537 double* iPatch, *jPatch, *iDxPatch, *iDyPatch;
538 int level, winSizeSq;
539 int i, k, idx;
540 int imgSize[2];
541
542 static const double rate[]={1, 0.5, 0.25, 0.125, 0.0625, 0.03125};
543 winSizeSq=4*winSize*winSize;
544
545 iPatch=(double*) malloc(sizeof(double)*winSizeSq);
546 jPatch=(double*) malloc(sizeof(double)*winSizeSq);
547 iDxPatch=(double*) malloc(sizeof(double)*winSizeSq);
548 iDyPatch=(double*) malloc(sizeof(double)*winSizeSq);
549
550 for(i=0; i<nFeatures; i++){
551 dX=(initFPnt[i*2+0]-fPnt[i*2+0])*rate[pLevel];
552 dY=(initFPnt[i*2+1]-fPnt[i*2+1])*rate[pLevel];
553 x=fPnt[i*2+0]*rate[pLevel];//half size of real level
554 y=fPnt[i*2+1]*rate[pLevel];
555 for(level=pLevel-1; level>=0; level--){
556 x+=x; y+=y; dX+=dX; dY+=dY;
557 imgSize[0]=imgDims[level*2+0]; //y,x
558 imgSize[1]=imgDims[level*2+1]; //y,x
559
560 c_xx=c_xy=c_yy=0;
561 //when feature goes out to the boundary.
562 if((x-winSize)<0 || (y-winSize)<0
563 || (y+winSize+1)>=imgSize[0] || (x+winSize+1)>=imgSize[1]){
564 //winSize+1due to interpolation
565 //error or skip the level??
566 valid[i]=0;
567 break;
568 }
569
570 getInterpolatePatch(iP[level], imgSize, x, y, winSize, iPatch);
571 getInterpolatePatch(iDxP[level], imgSize, x, y, winSize, iDxPatch);
572 getInterpolatePatch(iDyP[level], imgSize, x, y, winSize, iDyPatch);
573
574 for(idx=0; idx<winSizeSq;idx++){
575 c_xx+=iDxPatch[idx]*iDxPatch[idx];
576 c_xy+=iDxPatch[idx]*iDyPatch[idx];
577 c_yy+=iDyPatch[idx]*iDyPatch[idx];
578 }
579 c_det=c_xx*c_yy-c_xy*c_xy;
580 if(c_det/(c_xx+c_yy+0.00000001)<GOOD_FEATURE_LAMBDA_TH){
581 //just skip?
582 valid[i]=0;
583 break;
584 }
585 c_det=1/c_det;
586 for(k=0; k<max_iter; k++){
587 if((x+dX-winSize)<0 || (y+dY-winSize)<0
588 || (y+dY+winSize+1)>=imgSize[0] || (x+dX+winSize+1)>=imgSize[1]){
589 //winSize+1due to interpolation
590 //error or skip the level??
591 valid[i]=0;
592 break;
593 }
594 getInterpolatePatch(jP[level], imgSize, x+dX, y+dY, winSize, jPatch);
595 eX=eY=0;
596 for(idx=0;idx<winSizeSq;idx++){
597 dIt=iPatch[idx]-jPatch[idx];
598 eX+=dIt*iDxPatch[idx];
599 eY+=dIt*iDyPatch[idx];
600 }
601 mX=c_det*(eX*c_yy-eY*c_xy);
602 mY=c_det*(-eX*c_xy+eY*c_xx);
603 dX+=mX;
604 dY+=mY;
605 if((mX*mX+mY*mY)<accuracy_th) break;
606 if( k>0 && (mX + prevMX) < 0.01 && (mX+prevMX) > -0.01
607 && (mY + prevMY) < 0.01 && (mY+prevMY) > -0.01)
608 {
609 dX -= mX*0.5f;
610 dY -= mY*0.5f;
611 break;
612 }
613 prevMX=mX;
614 prevMY=mY;
615 }
616 if(k==max_iter){
617 valid[i]=0;
618 }
619 }
620 newFPnt[i*2+0]=fPnt[i*2+0]+dX;
621 newFPnt[i*2+1]=fPnt[i*2+1]+dY;
622/*
623 if(valid[i]
624 || (x+dX-winSize)<0 || (y+dY-winSize)<0
625 || (y+dY+winSize+1)>=imgSize[0] || (x+dX+winSize+1)>=imgSize[1]){
626 newFPnt[i*2+0]=fPnt[i*2+0]+dX;
627 newFPnt[i*2+1]=fPnt[i*2+1]+dY;
628 getInterpolatePatch(jP[0], imgSize, newFPnt[i*2+0], newFPnt[i*2+0], winSize, jPatch);
629 dIt=0;
630 for(idx=0;idx<winSizeSq;idx++){
631 dIt+=(iPatch[idx]-jPatch[idx])*(iPatch[idx]-jPatch[idx]);
632 }
633 if(dIt>winSizeSq*50000){
634 valid[i]=0;
635 }
636 }else{
637 newFPnt[i*2+0]=0;
638 newFPnt[i*2+1]=0;
639 }
640*/
641 }
642 free(iPatch);
643 free(jPatch);
644 free(iDxPatch);
645 free(iDyPatch);
646}
647void calcPyrLKTrack(double** iP, double** iDxP, double** iDyP, double** jP, const int* imgDims, int pLevel,
648 double* fPnt, int nFeatures, int winSize,
649 double* newFPnt, char* valid, double accuracy_th, int max_iter){
650
651 double x, y, eX, eY, dX, dY, mX, mY, c_xx, c_xy, c_yy, c_det, dIt;
652 double* iPatch, *jPatch, *iDxPatch, *iDyPatch;
653 int level, winSizeSq;
654 int i, k, idx;
655 int imgSize[2];
656
657 static const double rate[]={1, 0.5, 0.25, 0.125, 0.0625, 0.03125};
658 winSizeSq=4*winSize*winSize;
659
660 iPatch=(double*) malloc(sizeof(double)*winSizeSq);
661 jPatch=(double*) malloc(sizeof(double)*winSizeSq);
662 iDxPatch=(double*) malloc(sizeof(double)*winSizeSq);
663 iDyPatch=(double*) malloc(sizeof(double)*winSizeSq);
664
665 for(i=0; i<nFeatures; i++){
666 dX=0;
667 dY=0;
668 x=fPnt[i*2+0]*rate[pLevel];//half size of real level
669 y=fPnt[i*2+1]*rate[pLevel];
670 for(level=pLevel-1; level>=0; level--){
671 x+=x; y+=y; dX+=dX; dY+=dY;
672 imgSize[0]=imgDims[level*2+0]; //y,x
673 imgSize[1]=imgDims[level*2+1]; //y,x
674
675 c_xx=c_xy=c_yy=0;
676 //when feature goes out to the boundary.
677 if((x-winSize)<0 || (y-winSize)<0
678 || (y+winSize+1)>=imgSize[0] || (x+winSize+1)>=imgSize[1]){
679 //winSize+1due to interpolation
680 //error or skip the level??
681 valid[i]=0;
682 break;
683 }
684
685 getInterpolatePatch(iP[level], imgSize, x, y, winSize, iPatch);
686 getInterpolatePatch(iDxP[level], imgSize, x, y, winSize, iDxPatch);
687 getInterpolatePatch(iDyP[level], imgSize, x, y, winSize, iDyPatch);
688
689 for(idx=0; idx<winSizeSq;idx++){
690 c_xx+=iDxPatch[idx]*iDxPatch[idx];
691 c_xy+=iDxPatch[idx]*iDyPatch[idx];
692 c_yy+=iDyPatch[idx]*iDyPatch[idx];
693 }
694 c_det=c_xx*c_yy-c_xy*c_xy;
695 if(c_det/(c_xx+c_yy+0.00000001)<GOOD_FEATURE_LAMBDA_TH){
696 valid[i]=0;
697 break;
698 }
699 c_det=1/c_det;
700 for(k=0; k<max_iter; k++){
701 if((x+dX-winSize)<0 || (y+dY-winSize)<0
702 || (y+dY+winSize+1)>=imgSize[0] || (x+dX+winSize+1)>=imgSize[1]){
703 //winSize+1due to interpolation
704 //error or skip the level??
705 valid[i]=0;
706 break;
707 }
708 getInterpolatePatch(jP[level], imgSize, x+dX, y+dY, winSize, jPatch);
709 eX=eY=0;
710 for(idx=0;idx<winSizeSq;idx++){
711 dIt=iPatch[idx]-jPatch[idx];
712 eX+=dIt*iDxPatch[idx];
713 eY+=dIt*iDyPatch[idx];
714 }
715 mX=c_det*(eX*c_yy-eY*c_xy);
716 mY=c_det*(-eX*c_xy+eY*c_xx);
717 dX+=mX;
718 dY+=mY;
719 if((mX*mX+mY*mY)<accuracy_th) break;
720 }
721 }
722 newFPnt[i*2+0]=fPnt[i*2+0]+dX;
723 newFPnt[i*2+1]=fPnt[i*2+1]+dY;
724/*
725 if(valid[i]
726 || (x+dX-winSize)<0 || (y+dY-winSize)<0
727 || (y+dY+winSize+1)>=imgSize[0] || (x+dX+winSize+1)>=imgSize[1]){
728 newFPnt[i*2+0]=fPnt[i*2+0]+dX;
729 newFPnt[i*2+1]=fPnt[i*2+1]+dY;
730 getInterpolatePatch(jP[0], imgSize, newFPnt[i*2+0], newFPnt[i*2+0], winSize, jPatch);
731 dIt=0;
732 for(idx=0;idx<winSizeSq;idx++){
733 dIt+=(iPatch[idx]-jPatch[idx])*(iPatch[idx]-jPatch[idx]);
734 }
735 if(dIt>winSizeSq*50000){
736 valid[i]=0;
737 }
738 }else{
739 newFPnt[i*2+0]=0;
740 newFPnt[i*2+1]=0;
741 }
742*/
743 }
744 free(iPatch);
745 free(jPatch);
746 free(iDxPatch);
747 free(iDyPatch);
748}
749void getPatch(double* srcImg, const int* srcDims, double centerX, double centerY, int winSize, double** dstImg){
750 int srcIdxX, srcIdxY, dstIdxX;
751 srcIdxY=(int)centerY-winSize;
752 for(int i=-winSize; i<winSize; i++){
753 srcIdxX=(int)centerX+i;
754 dstIdxX=i+winSize;
755 dstImg[dstIdxX]=srcImg+srcIdxX*winSize*2+srcIdxY;
756 }
757}
758void calcLKTrack(double* imgI, double* iDx, double* iDy, double* imgJ, const int* imdims,
759 double* c_xx, double* c_xy, double* c_yy,
760 double* fPnt, double* initPnt, int nFeatures, int winSize,
761 double* newFPnt, char* valid){
762 calcLKTrack( imgI, iDx, iDy, imgJ, imdims,
763 c_xx, c_xy, c_yy,
764 fPnt, initPnt, nFeatures, winSize,
765 newFPnt, valid, LK_ACCURACY_TH, LK_MAX_ITER);
766}
767void calcLKTrack(double* imgI, double* iDx, double* iDy, double* imgJ, const int* imdims,
768 double* c_xx, double* c_xy, double* c_yy,
769 double* fPnt, double* initPnt, int nFeatures, int winSize,
770 double* newFPnt, char* valid,
771 double accuracy_th, int max_iter){
772 double x, y, eX, eY, dX, dY, mX, mY, c_det, dIt;
773 double* iPatch[LK_MAX_WIN], *iDxPatch[LK_MAX_WIN], *iDyPatch[LK_MAX_WIN];
774 double* jPatch;
775 int level, winSizeSq;
776 int i, k, idxCol, idxRow, idx;
777 int imgSize[2];
778
779 jPatch=(double*) malloc(sizeof(double)*winSizeSq);
780 winSizeSq=4*winSize*winSize;
781 imgSize[0]=imdims[0];
782 imgSize[1]=imdims[1];
783 for(i=0; i<nFeatures; i++){
784 x=fPnt[i*2+0];//half size of real level
785 y=fPnt[i*2+1];
786 dX=initPnt[i*2+0]-x;
787 dY=initPnt[i*2+1]-y;
788//printf("input dx dy %.2f %.2f:", dX, dY);
789
790 //when feature goes out to the boundary.
791 if((x-winSize)<0 || (y-winSize)<0
792 || (y+winSize)>=imdims[0] || (x+winSize)>=imdims[1]){
793 //error or skip the level??
794 valid[i]=0;
795 continue;
796 }
797
798 getPatch(imgI, imdims, x, y, winSize, iPatch);
799 getPatch(iDx, imdims, x, y, winSize, iDxPatch);
800 getPatch(iDy, imdims, x, y, winSize, iDyPatch);
801
802 idx=(int)x*imdims[0]+(int)y;
803 c_det=c_xx[i]*c_yy[i]-c_xy[i]*c_xy[i];
804 if(c_det/(c_xx[i]+c_yy[i]+0.00000001)<GOOD_FEATURE_LAMBDA_TH*100){
805 valid[i]=0;
806 continue;
807 }
808 c_det=1/c_det;
809 for(k=0; k<max_iter; k++){
810 if((x+dX-winSize)<0 || (y+dY-winSize)<0
811 || (y+dY+winSize+1)>=imdims[0] || (x+dX+winSize+1)>=imdims[1]){
812 //winSize+1due to interpolation
813 //error or skip the level??
814 valid[i]=0;
815 break;
816 }
817 getInterpolatePatch(imgJ, imgSize, x+dX, y+dY, winSize, jPatch);
818 eX=eY=0;
819 for(idxCol=0;idxCol<2*winSize;idxCol++){
820 for(idxRow=0;idxRow<2*winSize;idxRow++){
821 dIt=iPatch[idxCol][idxRow]-jPatch[idxCol*winSize*2+idxRow];
822 eX+=dIt*iDxPatch[idxCol][idxRow];
823 eY+=dIt*iDyPatch[idxCol][idxRow];
824 }
825 }
826 mX=c_det*(eX*c_yy[i]-eY*c_xy[i]);
827 mY=c_det*(-eX*c_xy[i]+eY*c_xx[i]);
828 dX+=mX;
829 dY+=mY;
830 if((mX*mX+mY*mY)<accuracy_th) break;
831 }
832 if(k==max_iter){
833 valid[i]=0;
834 }
835 newFPnt[i*2+0]=x+dX;
836 newFPnt[i*2+1]=y+dY;
837 }
838 free(jPatch);
839}
840
diff --git a/SD-VBS/common/toolbox/lagrcv/lagrcv.h b/SD-VBS/common/toolbox/lagrcv/lagrcv.h
new file mode 100755
index 0000000..74d31f1
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/lagrcv.h
@@ -0,0 +1,51 @@
1#include <math.h>
2#include <assert.h>
3#include <string.h>
4#include <stdlib.h>
5#include <stdio.h>
6#include <limits.h>
7#include <float.h>
8
9#define GOOD_FEATURE_LAMBDA_TH 10
10#define LK_ACCURACY_TH 0.03
11#define LK_MAX_ITER 20
12#define LK_MAX_WIN 25
13#define MAX_LEVEL 10
14#define MAX_IMAGE_SIZE_1D 1000000
15
16void calcSubSampleAvg(double *src, int sizeY, int sizeX, double *dest, int destSizeY, int destSizeX);
17void calcImgBlur(double *src, int sizeY, int sizeX, double *dest);
18void calcImgResize(double *src, int sizeY, int sizeX, double *dest, int dstSizeY, int dstSizeX);
19void calcGradient(double *src, int sizeY, int sizeX, double *dX, double *dY);
20void calcGradient(char *src, int sizeY, int sizeX, char *dX, char *dY);
21void calcSobel(double *src, int sizeX, int sizeY, double *dx, double *dy);
22void calcGoodFeature(double *dX, double *dY, int sizeY, int sizeX, int winSize, double* lambda, double* tr, double* det,
23 double* c_xx, double* c_xy, double* c_yy);
24void calcGoodFeature(char *dX, char *dY, int sizeY, int sizeX, int winSize, float* lambda, float* tr, float* det);
25void calcMinEigenValue(char *dX, char *dY, int sizeY, int sizeX, float* lambda);
26void calcAreaSum(int *src, int sizeY, int sizeX, int sizeSum, int *ret);
27void calcAreaSum(double *src, int sizeY, int sizeX, int sizeSum, double *ret);
28void calcPyrLKTrack(double** iP, double** iDxP, double** iDyP, double** jP, const int* imgDims, int pLevel,
29 double* fPnt, int nFeatures, int winSize,
30 double* newFPnt, char* valid);
31void calcPyrLKTrack(double** iP, double** iDxP, double** iDyP, double** jP, const int* imgDims, int pLevel,
32 double* fPnt, int nFeatures, int winSize,
33 double* newFPnt, char* valid,
34 double accuracy_th, int iter);
35void calcLKTrack(double* imgI, double* iDx, double* iDy, double* imgJ, const int* imdims,
36 double* c_xx, double* c_xy, double* c_yy,
37 double* fPnt, double* initPnt, int nFeatures, int winSize,
38 double* newFPnt, char* valid,
39 double accuracy_th, int max_iter);
40void calcLKTrack(double* imgI, double* iDx, double* iDy, double* imgJ, const int* imdims,
41 double* c_xx, double* c_xy, double* c_yy,
42 double* fPnt, double* initPnt, int nFeatures, int winSize,
43 double* newFPnt, char* valid);
44void calcPyrLKTrackWInit(double** iP, double** iDxP, double** iDyP, double** jP, const int* imgDims, int pLevel,
45 double* fPnt, int nFeatures, int winSize,
46 double* newFPnt, double* initFPnt,
47 char* valid, double accuracy_th, int max_iter);
48void calcPyrLKTrackWInit(double** iP, double** jP, const int* imgDims, int pLevel,
49 double* fPnt, int nFeatures, int winSize,
50 double* newFPnt, double* initFPnt,
51 char* valid, double accuracy_th, int max_iter);
diff --git a/SD-VBS/common/toolbox/lagrcv/liblagrcv.a b/SD-VBS/common/toolbox/lagrcv/liblagrcv.a
new file mode 100755
index 0000000..a7a39ae
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/liblagrcv.a
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/lk_flow.cc b/SD-VBS/common/toolbox/lagrcv/lk_flow.cc
new file mode 100755
index 0000000..c083048
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/lk_flow.cc
@@ -0,0 +1,76 @@
1
2/* compile with
3 lk_flow.cc -I/usr/local/opencv/include -L/usr/local/opencv/lib -lcxcore -lcv
4*/
5
6#include "mex.h"
7#include "opencv/cv.h"
8#include "opencv/highgui.h"
9#include <stdio.h>
10#include <math.h>
11
12void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
13 // usage: [ velx vely ] = lk_flow(image1,image2,winsize)
14 // images must be single-channel, 8-bit
15
16 const int *backwards_imdims = mxGetDimensions(prhs[0]);
17 int imdims[2] = { backwards_imdims[1], backwards_imdims[0] };
18 int winsize = (int)mxGetScalar(prhs[2]);
19 plhs[0] = mxCreateNumericArray(2, imdims, mxSINGLE_CLASS, mxREAL);
20 plhs[1] = mxCreateNumericArray(2, imdims, mxSINGLE_CLASS, mxREAL);
21
22 printf("imsize %d %d\n", imdims[0], imdims[1]);
23
24 IplImage *im1 =
25 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1);
26 IplImage *im2 =
27 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_8U, 1);
28 IplImage *flow_x =
29 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_32F, 1);
30 IplImage *flow_y =
31 cvCreateImageHeader(cvSize(imdims[0], imdims[1]), IPL_DEPTH_32F, 1);
32
33 im1->imageData = (char*)mxGetPr(prhs[0]);
34 im2->imageData = (char*)mxGetPr(prhs[1]);
35 flow_x->imageData = (char*)mxGetPr(plhs[0]);
36 flow_y->imageData = (char*)mxGetPr(plhs[1]);
37
38 cvCalcOpticalFlowLK(im1, im2, cvSize(winsize,winsize), flow_x, flow_y);
39
40 for (int row = 0; row < imdims[0]; row += 10) {
41 for (int col = 0; col < imdims[1]; col += 10) {
42 cvLine(im1, cvPoint(col,row),
43 cvPoint(int(col + flow_x->imageData[imdims[1] * row + col]),
44 int(row + flow_y->imageData[imdims[1] * row + col])),
45 CV_RGB(1,0,0),
46 1,
47 CV_AA,
48 0);
49
50 }
51 }
52
53 cvDestroyAllWindows();
54 cvNamedWindow("imfoo",CV_WINDOW_AUTOSIZE);
55 // IplImage *myim = cvLoadImage("lena.jpg", -1);
56 cvShowImage("imfoo",im1);
57 // cvShowImage("imfoo",myim);
58 cvWaitKey(0);
59
60 // cvCircle(flow_x, cvPoint( 40, 20), 15, CV_RGB(10,100,100), 5);
61
62 /*
63 FILE* filefx = fopen("fx.pgm", "w");
64 FILE* filefy = fopen("fy.pgm", "w");
65 fprintf(filefx, "P5\n%d %d\n255\n", imdims[1], imdims[0]);
66 fprintf(filefy, "P5\n%d %d\n255\n", imdims[1], imdims[0]);
67 float *ptr = (float*)flow_x->imageData;
68 for (int i = 0; i < imdims[1] * imdims[0]; i++) {
69 // if (fabs(++ptr*) > 0.1)
70 if (fabs(*ptr++) > 0.1) fprintf(filefx, "1");
71 else fprintf(filefx, "0");
72 }
73 fclose(filefx);
74 fclose(filefy);
75 */
76}
diff --git a/SD-VBS/common/toolbox/lagrcv/lk_flow.mexglx b/SD-VBS/common/toolbox/lagrcv/lk_flow.mexglx
new file mode 100755
index 0000000..d6c1136
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/lk_flow.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/lagrcv/test.cc b/SD-VBS/common/toolbox/lagrcv/test.cc
new file mode 100755
index 0000000..d18144c
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/test.cc
@@ -0,0 +1,34 @@
1
2/* compile with
3 mex goodFeaturesToTrack.cc -I/usr/local/opencv/include -L/usr/local/opencv/lib -lcxcore -lcv
4mex test.cc -L/home/ikkjin/LagrMatlab/opencv/matlab -llagrcv -I/home/ikkjin/LagrMatlab/opencv/matlab/
5*/
6
7#include "mex.h"
8#include "lagrcv.h"
9#include <stdio.h>
10#include <math.h>
11
12#define MAX_CORNERS 500
13#define MAX_SIZE 700
14
15// TODO: add number of corners parameter
16void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
17 // usage: [ features numvalid ] =
18 // goodFeaturesToTrack(image, quality, mindist, mask)
19 // image must be single-channel, 8-bit
20 // quality = minimum acceptable ratio of eigenvalues
21 // mindist = minimum distance between corners
22 // mask (optional) = bitmap mask "region of interest" (MUST BE uint8 TYPE!)
23
24 char *image = (char*)mxGetPr(prhs[0]);
25 char *sum;
26 // int imdims[] = { (int)d_imdims[0], (int)d_imdims[1] };
27 const int *imdims = mxGetDimensions(prhs[0]);
28
29 plhs[0] = mxCreateNumericMatrix(imdims[0], imdims[1], mxINT8_CLASS, mxREAL);
30
31 sum = (char*)mxGetPr(plhs[0]);
32
33 calcAreaSum(image, imdims[0], imdims[1], 8, sum);
34}
diff --git a/SD-VBS/common/toolbox/lagrcv/test/getPyramid.m b/SD-VBS/common/toolbox/lagrcv/test/getPyramid.m
new file mode 100755
index 0000000..ecae078
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/test/getPyramid.m
@@ -0,0 +1,10 @@
1function pyr=getPyramid(img, level)
2kernel=[1/16 1/4 3/8 1/4 1/16];
3pyr=cell(level,1);
4pyr{1}=double(img);
5for i=2:level
6% imgBlur=conv2(pyr{i-1}, kernel, 'same');
7% imgBlur=conv2(imgBlur, kernel, 'same');
8% pyr{i}=imgBlur(1:2:end, 1:2:end);
9 pyr{i}=calcResizedImgMex(pyr{i-1});
10end
diff --git a/SD-VBS/common/toolbox/lagrcv/test/img0.ppm b/SD-VBS/common/toolbox/lagrcv/test/img0.ppm
new file mode 100755
index 0000000..816e0ad
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/test/img0.ppm
@@ -0,0 +1,3137 @@
1P6
2512 384
3255
4 ó         
5    
6    
7
8
9
10 
11   
12   #
13
14      
15         
16        # "08%9+!5.(;(07.)2.#3*#+'&)!##).!%.")#%!!"$% "#   ! %)$32+):/, )$"%28)+&!$"&   ! %#('(%$!/!+&"1/34-1"6 5 *" !  
17    !%      
18  
19 
20'491F,<6($ "!%'!"*-#(  
21  "2* #
22#?64&DC$1$#./+2.)$ 0-"-A*&2$",/.?>::4@,5$/7A58T*37,%(("/72>,1-20>=):.8!2  % 5%;&6   
23  
24  "
25  #'O<L8MGD
263% 68)R=;9&"*#%"  
27 
28 4 H0             !"  #!#$(!""$"+%.$$!'+-AB/0['Hd)ekSC$=;*A@(3>$6L'CC:KTLri@Kf5QV(KHE<#E7,*#(+-FH2FB&?:0?C7CM8@<0JE*?F.99(-',?/6;?/@J2QY%W[!7O+3?8:H=?J7GK<MTKLdNI]6<O-1H30@0+8.4<)D91TN8QTK@\\3OQDV9OW8U[7OVDM\>PdCP]IZmIWp`I]“YlÀvyyƒˆRxŠ@j€7a{8YgAA@[AKMTSHVZM[oXVbQJcL]lL]r^p‹ˆƒË±ÿÿ˜ÿÿ“ºÌ—œÿ—ÿÿüÿÿÿÿÿ±ÿÿ–ÿÿd÷ÿq®¬ÿ¨”ÿÊìÿËÿ¼ÿÿåÿÿŠýÿÍÿÿîÿÿøÿÿÎöÿ­ÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[Z]SIPZCOSKLULJRMQTPWSp ÅãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿÿÉÿÿ¬n~dYcQHWdA\mQceGHE31257=CNENI8>A;1;U3Bh9Mp,J—&G¢0<`4:J      
29     
30 
31
32
33 
34   
35 
36    
37  $   
38  "                 #"  .7 8, ,,)+)*+'%*#"&!#" &#&"!"'& %#"  !  # %).,*&-)#5).577 2?!5! ##"! *#$(!+))+-)&,#064'**$%!! " "!    $ $
39%  
40
41
42
43  
44   
45  ( "!#++"-0*- #'"-0#+*"# "  #)+*'*
46* # !$*6*4;2-73*40:8+9" !! !+$22&)!$*(+1(2+0-(%17(9J*,A%"%"'#&/#3-1>(,(3:(,+1&3*%"&
47 
48  
49 *
50 
51  ,* +)%    ;(/E?Z*(",       % &  60
52-A d;!      
53 &1$      $  !!!$",'!"!"! &&(!%+ ,/%" %#);#.N*,BOZFnx,~c-L?0/8"QR(@Q9PdR„‚Y\rOQfAQ]+L])A_&?H!1;2;L84G28G1MJ</9D:9;5?A6A0?A&IJ'NP18<43B=3E:6C,5G*:G27>A3;?=A8KNGLRGJ`@CN==A6*3-11*/47:A7ZP<TO;>D>7C@6J9CQ7CQ:F[?YW;LX>Wk:av@hzDhgZ`or^‡oaŽa_Rp†Ag€BLr@GZ0AN?CPL8NVIbWCSU.GZRZ__mq·’°ÿÏÿÿÿÿÿÿÿÝãɇ“ÿ‡¥ÿwÕÿ¡ÿÿœÔÿu‘ÿy€ÿx—êšüÿóÿÿÿÿÿlªÿV·ÿ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿíÿÿÿÿÿ¤çþUN_RKZXLU]JTYHTOCULHg]cɬºÿÏÿÿÎÿÿÿÿÿÿÿÿÿÿÿðéÿz®ÀXtwXdb`ZP_WQM^XaZQJA892246C?FGJH?@>449<><J6AV.3S(/I-2<7;f          
54 
55     
56    
57 
58     
59
60  ! !" 3 )% /(   
61 
62   
63    # "18%0*!&+'!$$    !!"* ""  !!'#&++' )#*-%0'')12.'0 .*"$+'2#3328/4#3!.+ $"*0*.3+)$+**1+.  " 
64
65
66    
67 
68    "  " "! (.5;/:!&(-( (-,*!4*53/71+$#$(/##)3'(361:9#>C'??#19'#,,+-1-,('!''%"!#'(&*%'!% ( !16!/6!,%.&-$'$ !6 5,I60@/3(7*."%*    
69' # !"' 
70(**5;4
71E& " " *1-G0I.94/ 
72   & /. ??
73}@ ˆ]9T)>/#=" 
74      ##:5-1        "!"%!&##"  #"!#')&"''*#-3%D7-`GGzm_`~F{y-ig1[c<;F?1=^G€cg„@R\A@U=7O<.=D.>1->40;A8?755D8B>0;45;387=247M@6CBC[_FWU-I@/<?.6@,3:(<80<91BA4LM6QQ<]Z?OS?GR;QW/ZM)[E*G=0MEBAQG=U:IS0QN,7@7.><7F:GGCOS;R\ASkD[nJpyEoƒQs‚_†‡wbhgZecf|Ng}<kzBxy3uo8VT<=;FEHN<DA-2I9LZJh‘n¶òáÿÿÿÿÿÿÿÿéëÛŠž´v†ÝPnÿd—îu£¯m“–“˜¤wŒÿZšÿCµÿkæÿ_|ÖHaÔe™ÿ•ÿÿ¿ÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷¾¢\OYVKY`M\_PVXMSQHPJK`[‹®ÿýÿÿÿÿÕÿÿùÿÿÁÿÿŠÎÿz¡ÏYf™MWi]cf{fYU`OeaVxoQUJ9D98KDA‡nSxaE<D7<F8CJ77B,.:-,0-24036J  
75  
76  
77 
78
79  
80
81 
82       
83
84 !
85'#//,+0.#6)   
86        ""$(#  (5@&;.!7((% !  $$#!!#  " '&!!& '$%( %")#)$ )0&&$ %&1 &'../,'(4,.+ !''%%2 '!() !   
87   
88
89    
90
91
92
93 $#+ )"    3 9$I7 "#"!!*("'(/* ' -)#7#$/'/(%&<3 & )-+2?.D76!98+C!$?/)41(2)(!#!" )#+#& ""&/%-.*$)*/'3'/'.)%3+ 4(0&7%8(;./3'%$"15)9I0:%!"($&#)) 1  $O& 74$<12DA 
94 %=;"5*2
95'"&3")##'71N== N; <31! 6 C'616%<3$7?08Q:[hQYc79'1 8  
96  
97
98
99 *%67!#@       ! " " !%()#%$ ! #!+/'JQ2[nDcƒYKhc]wVKhBO]9L_*DK>54rAKaBQ7@I;5@7"4.*7).6&>:,B@.6=42;84:-=>23@++/2);A1DAU^Ftr@DY/=H+2A*4@&9B/48-GE9GM?S^?[\BSWB8L6?M=JY9M]:OT<BJ@uZB—RA8CBDT-6D)5>64>:6CC=FEN_IG`MSj\Ucc^ˆhhžkˆ¶\‰²QlQ`vZ]{Nd‚M{—Xl‘BUk:JH<CL@KR5=99@DUZb” •ÿ¡Òÿçÿÿÿÿÿÿÿшº†s›pUqkHkŠdŒ‚v“}š˜dˆ›QwÃ`mÿYtÓNf]L`‚Wpðr§ÿŒÐÿïÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôæ‹ZP^WJ[[OaaTb^XYSVOT[‚gõÝÿÿÊùÿ­Øÿ³Üÿˆ©ÿw‹Üyz…qX”r`„lšo£‹f©„j}y]WVBEIJZry´”lloSI>7;B8?M3AH/29,-15*62)32        
100      
101   
102     -**(3-*6(1&, ($"
103      
104  
105     #% )($%(%$!# &05)G*'2/)+!
106 "    ""       %$)'-."&$#'%(./  !%# '!),(1!$&2%&*'  #"'$   
107
108
109 
110 
111     "  
112!0&2$ /)"P D"!
113
114  "  +49 9'$#'!#&!#-2!  '#(&%&#%!  %$"& #,/ 035'#0+%--($* $'#1"!(+$0!*!%.%5$>&D*)33$$&$"'!0&G92J  <2 GIFJ 4Z:L4O.O/    %##% $&+() 3A9"lk$>o-<%697>WNhR\&UZ/<Q>5RF;b9'S%$(   
115   &,!77 +9$"0' (4 &  !!"%"'$""+&0% ! !&#*C1Jd=ac\hV^hbD_KDMIMN?A?1SG7DLC1AA+A0EP$GG"88&((,#3/0A45B0;>->B+FE*4@*4;('*4.*<7EON]QCI=<@20:,;A09<4?:1CBAGRAGPO?[SH`FQT<HH:LSNDYNGRCARJAZm[Ž@lX>NAE<D+;D)8C.098<D>AJKDRN@KS?H]?\YRyg€¦`}¶Uu¥YyŒLZcMJk[LfoLk\I]BUY3UW?<S7FI6JJNej…‰’Ä‹ ÿc¸ÿZÃÿZÖÜe‘{Nt\MoI=`UJwzk–a„„Lik6NV0S^I^qIbTRgW\b|Zq°uÿuÿ…íÿÃÿÿðÿÿÿÿÿÿÿÿÿÿÿ•Ôik[s][ndbkn\^jUVfQWg‰[‡ÿ”Ëÿ´ÆûÐÉüéÏÔÌ¢›ƒ€awuy™—‚˜¨–ž§š“¬‘··“Œ†fPVQLRnUl¦^ŒžI^RMG=8B?<I:@C4?:..11*/3+-.  
116              
117 
118  
119      ,2% ,6"4"*&.)*.-+1*'/&$(!! " 
120 
121      
122
123 
124 ! &(''*!%'(!#$&+'1'=&!>0%-7)(/#   !#    $ "'$%!' $(*#+*(%2"!1#      
125
126 
127
128 
129 
130 
131 
132  
133 !#$ !+'*'"
134  '"!# ! '3",. &' &%$.*/-0*:3D:605/=/((!!#& " #'.$%/9#"8!%("3" #)*"+0!<#6"9/''+#*&.<%**'$,2F:8)'$<5!&>3'1'3-5$/31#E,!C/;()!   
135 &,GG3526,<.=#!  !
136%1J%CC#! &7#-M')@7$5=<S7+j;)W75L67BO)78,Z2>" 
137
138   %,1%75A0"-#!-2@.X2L;.;!8/    !"!&!'%.''0+)*#( %)%#8')D*8QCQbOYEDQ<EJ9IP6K^4FZ67G..=.(82;C*?B,-="!$*$+4.95G:5@@22>/0:-+3#43!D=(OK:?CE-?4374334;335418=4FB=HO>:L>.:G3<I<F8?F:LX=HG:CI6HH=FHmDY“mDpq4BE2<>039/;;4D=8AGD7?DJJCMM<NO:OYNU}X‰¬S‹ Ox“Ml~<QTIFaPEVK;HD@QHFS>/7?JM>faP]hwUs§\xµ?Yò2Qÿ7W¼=]cC\BD]:JWI_clNvCneFgBCGA…KPg_M«H¦rScr\j…of…‹_Þ€‘ÿÄÿÊßÿµ÷ÿÆÿÿÿÿÿ~ˆŠezgu‘d†Œev[bzN^nK_idk‡¶§¶áÊáééÿþÿÿÖ›²šl}yqk…¢—Œô躱¦£¿‰Ÿ·v¨œt‚gTTL=IfDMŒHX}STBMT:;P8:H;:F;9>513-42+61( 
139       
140  
141 !       
142  
143
144", )0"1#-% !$,#!+-&%3%//5,!-,.)"+(!  
145 
146    "  
147  
148 !$"!!%&#&"% *2:$ >0#2.-*).&  "%     
149
150    .%%'&/$!(" #&%"$"((   
151 
152 
153 
154
155
156 
157 %
158!%,
159!!'5 -& $       
160 #   ""$%!" #& ,%562"7@18=,49!+6+"/""!)!% &*")+#,("(&%,+&2 0,6)7"-1)"#1&$5!;'B !-!$("03-+E#)!-"1C2%F);9ODD945-,../&. 8#%# &" '* ) )3(!6"C-/>*/C(.64=B
161*#"" % !-(06+0-/%/13##,% &%3!9!*!'26:)4I%+++&   9,5QKU 5":2 >+ <*?2%,hNG\>E?>!Tn=k$#S&'$       ! #!(!$#$$*+6-7-6:5S:T+B&M/C3 -*!674=HAEICAN=8P@0ED3FQ;JJ)1+((%+$(<6;I,KI"A:36#370NF9/B8.5--.&(,1&6)CM7JR93D1+;3-:,=@+=C,9@91;64B<3C>-87900D53LI:GD;9GG5C67;9<?9?GB8IjMd‡dqMP]?LV2=E/GN8@L:8?3;><;H;e†?m”BTlQMbpUpnYŒ^kž\p‘JZh6wi7Yi7Fa40GE5@EFC=HSIUeMU[d?UwVeibWSA5K=HK9?G;A59E;<MENkLGm[BNF'<@-U`x«p¾±“mˆ˜o—\nzX”ˆimsp{ˆ‚«±ÆÃÛÿìÿÿ”æÿÿÿÿÙ÷ëhc5YrS{ur‘ir‰Ta}Hf‡D‡[’— –¿äÓÿ§ñÿÿÿàÿ͙șy¶«¢ÇàÏ÷ÿÕÒЧ‚•–yޤp€Šer\PTB=IP<JYRRUNQFCM<BF7=A?2B:7?6;=/BH,CM-
162 
163  
164 
165  
166       
167 
168  
169
170 
171  
172
173 
174 $+$,1+3(+,,.'//'5 (-&8+ 74$38%44#7!0"   
175     "       !! "'.$*%&) $"#.85+>,&+2(*&+'!!     ' #       
176      
177
178   
179  ("))0&!-)#!'"#!)$C$A6+98'
180
181   
182 
183      !
184&
185 2 "%$*
186           ! +..(%"    " *14$"#$'$1+5618@5 :2'&0++,$ ",2C6K9"01$1#)0$4/"1-,*$'(217=BQ= +0#!(')1"1"%0'. -23!9A853,0&% (.6!!7,4E!1L#8%8364;'4031, :(4,D+C1>7E/C-?BI¤1G$#(-"0<0?81-'$8#!"-2HC*72%/ "5"6!(<$8/".1( 3*$2,%%8B9K  0C!DIF'% ,$G)LON^N=C"8T>Gp4Rc 0A1,PG77          "$$").%1#,/!%14:*5H1Fj$\j'`e,G\';O#/A4-:=7:D9B5;K0<C5=G;@M888 78%.#+/.,/;4H5=G(5B%DC5RH:@;..*,)*))*),'4<@LU@JK+ON%@9-4C76?567584/@58=:5`M+–b.ƒa6OH<KA3F>5A>82;69D:>B:B@I<JrD\]MZG9EG:T9EHC@>;><4U`1]r;YtL_’P_ŠAazOPtaUdaTk]^xVg{Ho•<|z3hh/NK7B<7@D?=KN\lQcpEvrN^c`]hAOb/SW9.742H1HX5NaIMWJ6F?2E00:?(:–[në^ƒ¶h„º‚‰‰}x„†‘~€°Í±Æ×÷éæÿ“±ÿƒ ÿ¨áÿ¯½Ì]zNN_XQmfSz`ZnNcoP\wSnŠs˜¦ž’¹ËÅâùÿÿÿÿÿÿÿÿåÿÿ´êáØÙÞÿ½ïûžÂ¦ˆ—€k{o{pgfZU^=JMBCKLK\EGW>8E66=77@::C:AE<:K85E2/D3
187 
188
189  
190    
191
192 
193     
194   
195
196
197      '(.+*"1$+$"#*#*%%++!(6%+9/!:/0) +
198  ! 
199    ! '",+%&' $47%;,1)"+%)/ &*  "   ) !%        
200  
201
202
203
204    
205  
206      
207 +0*%2'#2! -%#".($5+=*+383,-,"*    
208 
209
210        3
211*# (!   
212 
213 
214 
215 $
216 "
217E(#! 
218   !! )&  
219***)%:5*,85&#3%$+"+ &$%,!(F*6?.66+P9#EG$4=$5J3A574A,9 0%)+%0!25%2-2883K*6-/(2).""3),D)O120*(4'%.),-3+)4(.4!8@*D4)7#."#%!%"%&4'179B9V*+A(*A$J9&Lk?D8&*$<"9"J"6!2  %-50$ %%!(&"& "#0- E;384,:& 1 #*E9XD"c4/&!-*21H56U2JB:MG8.?):   
220 $ +
221      "$.-'.+1&.;<JKT`gP`nJTZFAF;A516-1&-7(75>941B5+8<5@=0@33=+05=C$CA'A<;:C6EK1pb7_h;RU+<:+'"'(#'+-1.:JEN7KT1F\'NS+HP4_Y.IA+?=/MU@R_e_xi…YLWB[J9RB1@B.<>1@C8EI3EJ6GIDAFQ<HB268*4;<J<MN6IA7HP=[s4k€@pˆCr>p@_`OdƒV‚X@T^Poi[s~HyZ_uFcb;BK=BJ>KQIfrRþ·SÊžO”TjtTkwB\o8DE,+61:F1<V<>^:aW1MH.C;+?EgTdºy{ hu[‚™[†¦r‘©}–¹h¤ý†×ÿºáÿ¡è‹œþƒ©ÿ†¬žft:xƒ8twGUxRUoGWgJ`k^`}zo—ÃËÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉâ’™œ…’}{€pUph\dNTZCSU9MSEIYHEL<<C4/:75:71:9->;0752:5055  
222    
223 
224     
225 
226 
227  
228    
229 
230 $'$) #)',%/ ,#$    
231
232      & " ( 5A'73#30$)&)-%,!"#!  
233  $ &$""       
234
235
236         
237    * )%#!'#!'%(" (+(.&.)40,4*2'%6.;10), '#  
238 
239
240    ")( ' ** 0) -% ?/(65*0C(%
241         ('N,V 
242 
243 
244
245& %#%%##**  &(%$-')%%'1,*&$/&1#34$8P)0S>0E3,6847-43(73661,+% !.'6&*7549E%15$/)&'1!#,2+$'/3<KH<49)3206@16)/(30#19/7(*- '$#/*#;$+&#$)'1(@5!8$#")2-#$$)$& #'!0)9#-E$*P4W7P', **1ff1L‚ $O,I'7&)!&-:'4=3>1R`.jX-V#'<      8 >
2461% .4%B$)1@7+ #&$&#*,G9]>$U>'DI70LZ@bPQ_8TS-en-8D$3.%0*'47-)3(,'-/(5-*/.-.,6-7B4U^8{\2dR2KQ8_kEgjXf]C@I,-6.7 #'"1-*:73/:=8A@-;K%:A$8G5MN:I729:/?D5H`DeNn~IOPRLIOQ9KE5VB37D6PR6@M7<H6HU;=G9?=,7:-HD?<FDHK@eS?FP@HqA^“Fn’Li™De‰Xmzk”eR\P@Va@dj>ZgH]eSdHgl<e_AZfU^Šª£Ö¯„Úef—RXPZ…G\{A]p-QU'@K33G>5PSJgCOX5WZ1XZLTfXyl\wh]x…kzŽš’˜{‹¥^‚åi—ùj´ê‚ž’kš¦š­°€’j^zKgKl”@dwBXkPShQPhSixté®·ýùÿÿÿÿòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿê§«™€t„jO^\I]MP_BMY?KX@CS9CM;?D36B7081,43(02/3338./3-
247      
248
249 
250 
251   
252     
253 
254    ! %!%)+'      "&1:$>/ 00&2+(0%&( !!! #    &,,-  
255 
256
257       
258 
259
260  
261
262     
263( "0#!!"''."%2%$-*&,#'#+#'  
264
265  
266
267
268
269    )$'%*#==?U'.F<4?@&G$      
270 )$):7#L#4"9G      ("+%%))&%   ! '( ! # .347882?6";?6;G?UD1TS XMGV ;P:U6R,K1G-::0663-/"71!5:"97/6:+,**3%;!,4.061 +&!(9)<'5*52A0<<?EA58"+9'09&08(0$$-5:MAE?9&/!"&&&       $+ ((&,!.9,6&)!,)*';\/K`XM9P?(N63,:7#,('(02CL0oC%e";mI; e%DF R-
271RO?W2^H"+.,FAEKFO/1+,8/!<>-Ag4+k70O9GG?99VEKCWQJhlNUm,NJ)7B'7P&PU(fT#NH#>9&56#42--8>:GKPiFmy@bi=9NQ:VYOdS?>8#)( (($($-2)1:)261<<3)12#5&2(.J1;;4:./928>?;CV/Aj1GM:IMAFIC@9BE83=9BMCOO<H?7€WA€Q4=F->?/T]9{v:ww@›™?x“=FWEEWSJ^OSdO\sOW…_OtkXz8`c=NOBRWEZSV}\VruH€€B…‰X‘§†¡åc{R[FNdIKbLKnJQxERi-Nf/Ub/KUGHbR@YIKc>KoBWoZWgWToMJr`Z„ƒm®Š«¿Y³„lg}”a‚œkœ€`“Ÿ[¡‘bˆ_Hh]Lj`JjOOlG`oFktKat_ŠÉÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿÿÿÿÿùÿÿÿÿÿÿÿÿíÿןWnbE[SITNCTHFTEGTHFS;?O::E29@158+03./5004-&..).+  
272  
273
274   
275      
276  
277 
278
279
280    !"          %*#"/6#F(F/)66)')&.'$%!  "#!'$ " % (      
281 
282
283
284        
285 
286
287       #"($!               ?,F9D6(@*/&'*6&>'  # % 
288
289  & *1'"&"):!-* 
290 
291
292 
2932E+5<'#
294
295  "  *(&5.$""(!!" *$<)E.<%:?"MK.=bFFa>JWA<J>>E7>G- 7%$)&3<#:H8R%GP"SSEGOE3B$38(&- "()!*,39A#DR!.>/9(-%!/&0'H8)/G/6M13K(<C0;81"8?-31*(/(&%7)+>&+A/7$#.-2'3*.<1(E!.  
296 
297  
298
299   %$! *,,<=7?5A]*(F&)8!4%%";'Q*J!)HJY-8z GOs{\|*-81)  
300/;EP%S\&YQ,gbP["7D+5E>9EM(1J'&7!)-&;2(AANWBu‡Qby9\d7JS5E8<_MCz8y7SW2-4)*:.4@1<C>::T:F\5QDAJ:PEGhYS:E2+. ./,'#")01)36+6;0.8"0+"$ '(,++.90,/5,CC5OA3,0:%0>98FGC?7=@EA7=66E?BWY>jlJ¡•bKx@8<6E<AG?J<OFQ…P³T‚­Ddg?HIBNWDXeB\qDOjCZwMbvOn|<n{>v’C†«_ÐË]¡«kx btŒp_{S‡ˆ^|Q_u;ew9bl8^e9LfFPh2Ic/I_)Ol2Uo9Kj=O`?Ie@N_C?[DHfDJlXLvŒXŽÃW¡¡a˜oRpb\g]Ga\^snYtlDkNH\IWhNWjLSeVo|Yv]dx šêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÿÿ°éÿ…·Ûh~T[OCPDDRIEJB>FD8HB:M>5F63>1,7/,9.99,48--/,'-'%.(      
301      
302
303 
304
305 
306 
307            
308    # %)&&!&$"!("2$;*H)J7&19---*-"% $! "'" #!!"!     
309 
310  
311
312    
313     
314 
315 
316      
317
318       
319   
320   #!   >/56-5<+,(*$$ !$)'   6 D@EF+B 1  
321  
322  @%7M"+C.#5 $#   ! !#)",,07G<.>--+-7$5)%5:%33&36 C;3)9N-3?B@<=C6GF=7D9-.,'& ;3&!E6848OE3Al64S08=*3B&<A'K@#-@$$*"'%*#>0",(((#&()*6*<)6/1/#,22.=(B 2<C#D%!)-1!*;1%+#2,'",$!! "&
323#
324!
325 
326  
327    '')!-!) %#!1+/9*D%)3$&'(  ")FE)M'<*bZPS!
328  
329 
330   
331   !(:(IO>[hFon;ET<AS0Q\-OU4NP.cT">>"<9!@7$M@,A>D6YY6]QO^QTQ<^b2Vn>SrYxˆKk|0WY"u^&U\6:H7WN7`k>^a@R_?T_IWqJ^j//:$ & "-%'",,*,10182'/)!- $+&'$1,,:5,7<28@DCQ5C;#ND(XX;Xa8GI4A>3??4SRHPQ\BZ=p–4Pa1=:@E;>D=>4=8AKY|W‚²H\‚?c|>ThB^jCOj;Rp7OtH\`d“[mŸKr£hm­™zȨ~¼t]sFpdHcmE`[DjIQiF_vR`x>Yn0Yh3Qi6Le3OX1JS2CT8Ib:EX9;QHE]E>C;EO8I[;OgQ_pŠTn›Sq€Rh_O`]BWT\tEwHF^DEcIZpDTiEXeSXomaxjuˆÍÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéðÿéûÿÙÄ킆šYiaQWJBMB<F<8C::H8AK7>L75>2*806</7>.8;129.+1'(-#.2)
332 
333
334
335 
336 
337
338
339 
340  
341   
342
343   
344  
345
346  
347 
348       
349  "+  
350 
351 
352 !$ # ! " 1'='I+!P5*387'/0*!#!!!$ 1&23"0       
353
354  
355 
356 
357  
358     
359    
360   
361  % 
362 
363# 
364' 
365   
366
367 0+011779)#8!     % '(1!&C+D15M7'=5'%    
368  , 3$
36943$K'J:'28 3(&'#     #$*/$=K&DU/=RLACIKC!HJ%>P!;M(0M,44-DH 6M)>J+?T->J1DI#@C;F$:G5ED#ER8LKQ,CA%8()%&)'1"7%'"%10 ?+ !&*,$(1(!'$46#0# # "!!$# 
370
371  
372      & !"!( ($L1
373 
374
375  "$,DA7XaJadL3L@JS5Aa6Lb;VQ<BW>ZY4P`3HO;S`7IO4%3A,2P)4S-PR1OU/?U4J]?Q{Bg^Ae;K^5Tf4GY8`VIdeILS<5MG,DN-Ce,LH$5%,*!"#&*$ *.'+5),6,'."'%%+.,%32(:>48D4<D<JPAQN/QW8BQF<ZF7U==ED66E1>R0GY8H`2>nBB4@?7E?DGF=DA0FF3XfM]‡OMfMjlO[cIHeJA\9Gb6bs=bvN^pTNsJZ‰K_‡yLt›IwrUoFFaHE`<AYA=WG=[NEb`UrMMc;Yr:ar5Ui7ip9yr?LV:II>3C</CDeQGHB:.J7Ji<YgG^vCVaPF]UQlUixJpiSTi_KcA4H;APIDYOEXITWQejnbrmg”åºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}¹ò—¼”z|fV^X@OD<K7:?86A59D7;L5BO4FH0=<.1<0/96,94+3,',*",&%/)  
376
377
378
379 
380
381    "              
382
383
384   
385        
386  
387 '! 
388    !!0=&"I.#J92::5(-2("$!*'-( # )*#/%"+)!% #! 
389 
390    
391
392       
393     
394 
395 
396 -#++)!  
397 
398
399
400 
401 ++%.,-6)*6!
402 
403- C 67*17) :/ /@12:89%
404
405 
406  6#3:#>* "64%   ' '"4+&>532@05Q*6U59O*3W-5N(2Q)6R47C(6<&@8,$D0$64614=R>3D/@J+6C':B)<@5*;,*'$-! 2(*.G0>(**.!)+! *+.0$,( # )   !    
407   ! ,#7 , 3
408H*+%) S$5@ !
409   
410
411 ( ( * .!+-IVPcrTgQ..;42?7=>>2IA8H<UV@DSH=R?4RK(E8*0!<5(C?6gICC7B039676CKI]ZWUSHcQJqlLE]H@`U9dO4?58D8@725/5/4;1/&3,'#!-*21%,,)'*&#," (00$68)3811:6.>24B4EZ?O~8€Ÿ3——2‚k1KK76>>/94/3B49I835*.30C.E@:BH<GN<VZ=^]3Uc9f…BovEwJf~CCX;?O2<O8Ur?lˆMg?TkEB]OHhLYcSUbIJh0FW1Id0Wg0NU0>U<EUKW\QP]LFWT8bK=aTMlWfŠMƒ?hj@6<4(?Q[}Tyn7),<-;NFaSJgUUcFJ\IVqT‹š]‰ŸYŸ‰^qeE`K7LN?=DD8FLWTLdaVVwea”ò¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÒìhwÔ]|ŠSgcGUHQS=GH64D/0>/7A55C;7H:@K59D43:0*2/&,-&+("%$'&%$
412 
413 
414 
415
416  
417 # 
418
419
420    
421    
422
423  
424    
425 
426
427
428
429
430  
431
432    
433"  
434   
435*;?(R.!V4/4@3,,0#  #$)#$"&#"!$""$%" "$        
436    
437         
438
439    
440  
441
442 
443     
444 2#   
445
446 =A.
447-1 %,
448$ -,%+$)"$ 
449%&"C&;&"+ :1^J!WZ.MG*R/ &    
450
451
452
453 40#"-%
454  
455     $"(#518%LF$7E-89).3,00.&"&0-)0("'/!"@/%K;5D$(@</:3&=6*3-01%09).7++((3*:D'*2+,6 BR':J$--#-""#+#!#! $"&$(%" #(   $$+8+ B>>?1-
456+  &  2 &  
457!$% 
458  
459&,,#,#, 1 %&!##$-9DQGa#>S.5 97;V3RXs`xM+Q' oK ŽJ_,iG K7O060B   "!HHN`f]>\BE@#<;-^U-AR6/<)-G::M=1:1KA9\L4ZP#GG/SI6i;~h+TN-NI.TSIubQcpHTdG_jIBMF?AS48K9>3??1BD.@;+42+8>);:#4;!51&1-%)5%*)#"-$'.3!49'5;*8:,!9+,1/B<99JU@RpYiD}Kmˆ2n[1jQ/?=-+54.9-2:-/.738:6DC:GF=O;Li;Kw;gZOq`Hc];[FFQ4LI1hR=LZZ\fUUaIE^:GZCbdHRj;Rf7Ih4F\4Db=Ak<So*HS2E\A`mDaq>I[A;ZG6PU<RgSmrª½[ÿ±G[L6%.gAZUpCTP.DT@diNRaSN_@pvS¦žièæ€ÿÛ”ÂÄr›‹RNiCOo8Ph8TcD`lJ\rHWdRbˆÐŽâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÿÿˆœ™]c…Q`sHVR<RMI\DHR48@16C-7F23B9-@<3@93>24=+01%,+&$-& +!%)"!%!
460 
461   
462
463      
464          
465 
466 
467 
468
469 
470
471 
472
473   
474  
4752
476, $ 
477
478     '<I,V4"U@22J6&,7$!*"4(./%("&###!     
479       
480      
481
482 
483 
484
485
486   
487  $ 
488
489
490
491  3("S.8$&2#!'" 5(752@#7/$21!)&/$ -, 1#91.;4.'4$(814JJ>\Gbh11\1  
492   4 :)-+#$!!     !%,/*,50'!0'6/66/./#*0+.@=$8N.$D2(F+(:'!4-#2& -!17&>D"AE73('2/# 3 "$"I9$4@?MG?HR 10&*&!$!,3>3'%   #   *-"=!#>2%8*6E%H2 + &< BLCV4E )5 *'/.
493    ""!$)/!4> 5IQI3GK .:'1@!A2c*G[:K#0H+$]@.k@1`(qw:f˜(6g,<'!# !%")4AAOUNTDE^2V_+;[;'H1#6*"-6$85)*,'28LR5Wc6Lf8__?u[RŽE5G=8H<=PE]jO_}KGcUIPF9E5AR51<07B78G@?KBEH19A,:;5:E15@&>@&FK'5?,-;#10&)-*(43-<4+,2,).&21'ES-Vf9BDL@BdCMaOib@vL;d<El);D/3:5/4/29*2766;<3=9-93,362@:0O?BgMF`IVQDIR7‰…>¯­<pCoKZg?Pd@XcF[lKSjPZdE<U5?\9HZ1S`HJe>N]5FTGSkQTn>Fb+K^,F]<H\NVv®ˆ°ñ«ù„xm852G;A@SgwmJpOW9[PCb<FmNhœ|¿çǦÿüÿÿÙÿÿ¼Ôœ_DFI.JE6SA>eBAdNSyCVhKXv¥’ÈÿÿÿÿÿÿÿÿÿÿÏÿÿÁÿÿÞÿÿˆ¸ñipQbZOaTPXA>JC6KB5H56E2<G-7C-.;2*43+607:40<032*/.%+* ,-)0#./$   
494 
495 
496       
497
498        
499 
500
501
502
503 
504     0 ,))  
505
506
507     +3@* N5(E>8/7G'%4 (5(*@(1'!$"$! ##&$$! !#$%%  
508    
509      
510        
511
512
513  
514 
515
516
517
518
519 E2#-,6+8">"-2%(6+-,-!<-(7-2725!37@?BK(7G-=!$!-3E$^1l**
520I
521AE7@ ,( /B( .N D5E)H(3"*6097.%!   !'  !   !" "&&%%,+:<''1'&%#).$96.5:=2/2*(!''%#$4,(#&10:H6dO(TY"3K5CA2S;,;L+H<2<G?QQ(XZPLBG"Ub%0R !4/ $&       ('"'#&!120 !  )=-I/4% 
522  "#  "        $# '$)%8 6/,;+05+1 13<5C<D6$@/@@+Nj0a/#  .(&/'136G1G=+AA8JE3=9..+%((!#."*!)13@]A;lF-GGQSYoZ„LVuCCA87?2BD/EZ/FZ@SMT[=IW=/AA,42/69/9H<@BGM@HR1;B2096/6..4).?6?K-?K'04#37 15#@;-A7+14$(+83(9=0IE4<J:TN5NE;HNMVLNUFIPF>EG9CG0BA,=D/BE,WC0G5-&+)18*9<(48/3@<7SIRnCks[eŒŠÌvyQkyYdkArxHm}Pl{QnxFf{@oz-PZ-Wi/[n4Tw:Ie:SpCQkQEaCGX4BX1Gd<LcSHd¯>nÿ7ù>mV4BA:HUI^€RwxsŒNMPE>T.FaQHbœ^Žÿ]¥ÿlüÿ„òÿ{°lAS65?.2=53C90G>=RI?]P=ešÍÿÿÿÿçÿÿÉÿÿœÆÿl¡ÿk£äbƒ›‡w\`]MCWFFS;@H<5<=.<92:3,=2/>+/5()3,/5/.66/8317+(-%*1$..#&-&#.
523  
524
525 
526
527 
528 
529 
530
531 
532         
533
534  
535     
536 +
537) &,  
538  
539  &5B' N2'DA1&7<$&( &"(0 3*"-')%%''$+,$&   "!$"!   
540
541    
542
543      
544  
545
546
547
548 
549       
550     
551
552 (&*"*)/> )R9>?'.3+-,$&A"*7(*%(&(*F.)=Q;:X;#d F  " 2 + -?#T84QLJH<80D.=&(60'<"0+$$#(6*!)+-#* %$ ($   $,1'$&/%)$#*+%-*,37:<D#JV(:I"-&)42#(%.10??M_J5W54<.VK!C\&ML,BJ&VI*B>4CF@BU64L0:=L37A,)1#: #0 *7U!L" 7 *         # 
553
554 (
555 "     
556     
557  %!#)"*'$-- *!-!''9.L+]U0%.!'-* IIRF7A*<%+A3)5=$.5+D/124;#&$ !+(3-%.)'-N,,J1/7=>ILWP9]A;K8C?)_O&`C0M=?6=J1?G0<A8;/54('1,+/678D?EE-CC-B56=2)0,0:*661@@=7D7>D-1:/*835D78>5;?%9B&:;-3?4MY/^x5Xd=Th.d~5h…A_‚=Zx=Lc8?K:=J67K:<W=o‘<’£'i&KB1EJ+XQ,@F+9M;DaXIxWHw›5iEpcQybSrdNhXUy`pigyRV}Ku}AU}4U`9Ji7Cf7Hi8Cl<Hn>N\=J^;JW:>K?MVGAS`5Ny-F†9R_L^DFW[>Rr8R”0S`<V4Lc-?X<BYeXd M\ô=^ÿHtã\€tCT'AM'5D"8B,5A28G9>FJBO§K{ÿiÑÿdªÿk ÿ‡‡È€y¹Zq¨`oqi|blwF]\CKS<3>34;22:787356055*;6&(1*)5.052+00).-&)&"+%&,&&.'$,#
558 
559 
560
561  
562
563
564   
565    
566  
567       
568
569
570
571   
572
5730-$#%       
574
575' :J( E5'883,28(!)!!*#,) &0"".%&&"+&,*)/#
576    #    
577      &   
578
579 
580
581
582   
583  
584         
585 !+#:+IX$>T-$:.&"%."*R;+JU8K&#>(!.J7L&LE" +7A3@'L$+6<!7N38L=:G.3H3'35&+$$11("/2/&'"!"'-*4%6)   !#.%(')% +-@8LI!FG08@H.??% ")""0&R)J3!-/89$C;!;6 1-+B)&R(!3*-469A*AU)8L*'F#'!"):2JVX#R%;&,$
586
587    
588
589
590
591
592 
593  
594  
595 
596       ##"' !+$$!%$"5.?+>-I8;.!./+$&!(,$4+ ,''!$*5@-/A;%`N)p](dS:SEO799NH5w^<gi=Zs=@Y6-2/.45+506<1-2)&.'$1+'49*5=,66217+10'2++9.=H2?O55D66F8-2/32-64:-<:2<2-;-&520739K8Ht<Kk=^m:g‰9s—HHoY<`Q:VB1B?+;9&682;X,L”4ZŠ@eLFX87NHAc=4Z$8L%AK9VWI>TH3GN8LUGc^\haXpaZrrWŠ`W…OoUˆ•U—O’“;{l.z^)IM01O13G9;UEA_EMjA`eElm;b`2<S$7J'L\4ow:p~EYhD7GX6IE:C3BZ1LV>IUUSkYTZ[[TzVXwQ[P>H/->,-6+88'8B+:I4BJ0IRYhǶàí¹µ¦¬·±±‘œ–owtkj{wfqv^mM[kAS[9=E1:>,2<19=1@:-Q</r;+W;,F4,/8.-4),4&./%(+$(-'++%*/!
597  
598
599
600
601 
602   
603
604         
605         
606 
607  
608 - "(#* 
609
610
611      #  1 ? Y.L>*;;;0-2&'$""$)*$+&!".!),)   
612   
613   
614      
615
616      
617   
618     
619
620
621 ,'>,I/?:45DE1313#"*3Z(%IbK9VH"08=*=)*75"$3 .("4%/ ,#0B*I&8%-/7/?%H5(>4%&5,&$.)(+%!+.;$4'!&$ %"$&" %  " ! (!A(,7'::5%9@90K<!:3)2.%)+ #$%%# $ %%$ $:+!4#++%)""/%7""08(4.85-7%/&  .#O>#     
622    
623   
624
625
626       % !!$@8=0(-+,:)8
627!=,##""''#&+0+..=-DgJVyM<bE=s:MI.OWJPuRTd^LXU`W8CM*A6(8='690)4&"+$"')0,9D/>F->G(+3(#'%1-:95:64?14-,45-.,13(<C*MC.595/7.C1*97%<<+TK-he4_h=D_Z<gT-<<*2<*21.84?9(25*8825>D@LYEWXIY:D^6NQ;:J(2D&1K=9T90D)29)0;<0@K9[RQgAcjDKjTSt]cŠh±‰™Ãx†Ád‚´Pw >^o*4=(+732<:8<@5HY>ZaUtXSa89H%&;5*KDa|MSvIGn7]Y.XS4MX;CXDKcHWeTUl]y‚VyV`bZVRB8A.:8)=:2EA-LF0HC9NE:PN`y»ŸÃщȾ|½a±j‹|kqhyj]lbT`U[fE[`?TY/KN1=E,8@2BD3hH;sS9‹N1L<,)2/(8(24%36$-5$.2"*3&*0&  
628   
629    
630
631
632   
633   
634
635       
636 
637    
6384(""&
639
640  
641
642 
643 &$   
644
645!
646: A&Z1LE.=@:*2-%%#! ""!%##$% #   
647
648    
649    
650   
651  
652     
653       
654  
655  
656  8J<$7R53J< <1"*$+#'+:.YDTR!A48$ &-3'''*  5C1<8S09K",?!7;1IB,+8)**)!!+!*&+%-,"(&+%$#$ (  !'"' ! #2+?>G7*:C"@@$56235=8>.44"",'.2!'$(&)3.#$ * $",+$$         
657 
658
659 
660
661   
662 
663 
664    
665              )#"" ?;."   %"$#%%!"'!"%$ &7".\-:c5<V.8Z9NJN[JLOdFLU4JFFaEXc4I]*>=-=A*/0"&',%$$'BE1FI84G:65(/$"1,&@O.DE(<8+<>$91'22/)482C74B+7?(_r(‹,wd1uxC\nE3I>4F:3A@(5*2.&63*5;,9L,GQ%XW*MR)BL->U6=V8<V57R-1M9G&>@46739:'3B,.B-773A@QLaJK\:@^;\zGwfiy‘W}šLv‘9_{/Rr/NA'9+&8-0@1<B3;CE8K_LXuCTH(5(%/-(7P4Me3LJ9NTXrEjr@\mB]kHdnTС]Ã~r‡‚n‰lUtaWdBRK4DC:OU<[bFOZACN?9GHRktÓÀÇÿêÔ±£®k…–ezž[uƒaurJd\CXY>OQC\RE_JAY;JY;DO68E66>=PDHcBEaL;060'.,)0-*1*)3),2*,3+-.)*'
666  
667
668  
669    
670 
671
672          
673    
674  4 +''( 
675  
676
677
678
679  % )  
680%
6816 J$L.$J=8?;@*12-#'%"4%$" !,&)    $   
682     $        
683  $         
684   
685  %8%-5<D(5;-*$"+)! <-/2'$/! 
686  - '.8"!29 /6// &) -1543<?#1!!% &4(7++&1--2:7?(4%%"  %$$  &%'+'*=+816SH'Oa-D[+AM0P`,1M"+&#%$"#' &            
687 
688  
689
690 
691
692
693
694 
695
696
697 
698    
699     (!2.<++.!
700,"   #""#'-+,!(*2(I@3:=5AA438G:DLRVD:H47>9<JSDVSFWI:@2DN44D$E;:8?7'=C8;?8,4.<?,DH%?N0=J?;L1;M17I4:B*-1*.260=7PZ-TV:CPmIctL~`KjcF[O8H59=.@I#8:(^`*st){s4SW@CT=EW=Lb23F-(;)3C2,90)71%9*4?02E1.<+5:(8;%FE,[T/`X>OcJOY=JK7BKHeNhY‡¤Z•SqHFDDCA8>;'A@1JT<CW:;J9:NFB_X6L>3?,45 <978BH3A8UXMcjikoX`sSVo_T{¨~Þ¹ûÿˆ´¿‹ÿ´j‡}UHnNRa=Z`FlmUYiMU_PQS@HI`vŽÌÿÿÿÿÿÑØÚ‡‡i]ujH`oL][:KS4FI:CG6GN:EH5AC7K5>J2<G2C@;c>?eADT::..*$)+)/*+/(*1(+3(/3+*)%!      
701!       
702     
703   
704
705  
706    
707 7 2(+) 
708 
709  
710    - <U+N7$HA7>@8230)'(% 8 )!!%"( %"$*$)&   % #  
711!%  ! % "  E ‰F-Z;   
712    
713  9=@1<1,+(0%QB4C! -!+"+607,   
714  #%*&,+.10*!+" .8!4F'!5&()&'$$,","3!%.'/8 3.'$0)C2;.,"$"&*)% )-$0&"$'97$@D82HO0;E 5=(H*A!!# !# %!1&%     !           
715  
716
717 
718
719
720  
721
722  
723
724
725
726
727 
728 
729
730       # )  $#*%-/. '!.3<9#',42+a>P34$ #  ) !! $  +!>0!@@M;3+*5=87D56G23D4B;DOCQH@7;A1-:8-6E+:C.95??<>::AE4\Z2PY,ZT597*LA&>C;1D?<7<.<<-?9*5>+2;-2;/1(-1%+0+*88,K.Ib?D^O>a\8SS2F<-A018+7J+?S/TpTBs[>iOcr?k`E@CI5F;(5)+,%/1().'.."60%/1003/21,&41.>19KEBYWRdL?OL7IH:O4DYQ\r\caw“sm¢`qž>`|2s…4v3w‘2o4O]6AT4?N>XcEQ_:HS.;O-L])=N0=TCCUXAdbPefK_[;SZ:X­<|ÿqÁò“úûÿÿ•ÿûHU`FFXZRe]^x`pwXeoNjrH^o}~ÁÿÿÿÿÉÿÿ‚±|o‘[avPS^UNbINP86::.5;,8<4>8;>87>8;C4>G9UL=sI>[H>sK.A9%1.'..++2%+)'((4&78--       
731  
732  
733 
734
735
736   
737            
738 ! 5 2)(/!
739 
740  
741    %
742* " * 6 C'O/ C9)=6::;6*03#$   %=!-!$#& %%'&)*&0,((*#!$"
743  
744    " %#X,%AT!'+,&      
745   !W KY AG"9=/4/'87JPVc++Y&%>$+'6%2;!>-$C-G+  
746) 8(-+#"+)"'/$*0*./("6$#)-#!)'-2>=/946-8!*9 A>6@0?%&;%5483)9#2(()3%!& %"%! *!9#3'#"$./ID38 &#"   $7$H,-(" "
747
748              
749 
750  
751 
752
753 
754
755 
756      
757
758       !#'$ $"(+.3(# % 47,6Y$-U1S8@;H!6 "%! #$ :6!:D&265IR+KG&A48I77?1<C:.A@8MN>DH6*:2/:-*3-)0.+-/<;9>I7=WBM`K9TJAXDCT,QK.XG1A@4GR-6A7/5749)2:+88,>E&<<%64&31).+()850C>.89%3>%:4/0-*2*37-GM:`PI?J?I_MOoT=mB9d05G237!22%E?$G=$B8(<<&48+&0+%1)23.01:68N4;d/AY@C@J=;78A4>R*?Z7L[=glPmuQt\YsHSsS]˜Vx©Uf›M`ƒ=Zd<;PCAWCHb;Mh0Q_:T_8JN,CW=>VQ;BT0GL8KE4A:2EW5QÆN}ù]”ÿ”ÿÿµÿ„7J:D[MKebKfjUnef{ajwY^~›qžÿŒàÿtœÎYqwKd[KdOGZR=PF?O98?3*110<5:@89;61=51:40==QGFqIC=7C<A6E=-4<-6:*/2'#("!"&#*3!,8             
759
760
761
762
763  
764       
765  '%##0$    )B"G4%H;1>70)24%&)# ! ##7(,%7%!6(/($/+!" '%-*70+2"*'  !"! 
766  
767 8/&5C,(4       !. '61<QK<>PKB:;925.(0*<<MI,R 11'?K;J!7I=GBnW)!&!%
768$
769(0(+$(!!#!0'*$:'#:!3$',+"0 '(( +0'(0$'055&+8*=<6H)5@%-3 '+,9&/;$4:1>"'/%/)$ )&3*"4-7$"!% % ,71%5)0 +, %,"!         
770 
771
772    
773 
774 
775
776 
777   
778
779
780     
781 
782 
783   #% &#$$+0%<;+&'," ! "#0,102,.$+ "13846L0=SKpt4F\3F^3Sj/N\41I@,=C/5<26&14+")* '#),-(86*?>6CO.HM(3D%0M'AFGMNL`7BF+;D9CO*CL%CF*:?-MG2MI,ET.@F,5B(3:#11*79/8?)35&13)8;'.;''-,1;K4[@8F2KU;EMP->D+540@*6B*RY3LT>Qe7Xb5hg;TP+3;&%.+)6.KM/BF:;B867<;BC1B515*001,6>5?C=DHU_SS_MS[GJUB1CJ,SU<eY5cXNrIOU?<IKBL?=W@BhCMa@SR4;E77A4'2-!.6"/27;4OA7KDZ9I“=Qó^ŠÿR}š?6'><9EMPEO`ARqEYqNl`TdyXwÒo’ÞqxpOdTFTRLVHJRC=ED3G74<,)3.,94>C9:@179069/<?<lIHzGB,#6%'8),0".)"0) .%',(+31!/1!22( "     
784
785
786   
787
788  
789   
790
791   
792&""!#   #85-#:/4:1/-21)#*,>"+1%11 ,9 !4%"&+&#!3+)5)24!.7%*.&(1 -&3$ ' ""!       !((%!2&,(-)"  
793 ?RJ1B]=AR8,X.N)$,5/,G5CG$4/&/3%(%%5&(I-=3"$$#!*!'4)8!/ +-* -$+ ($&1"4-(A0-?01*/ :7)C=%1&1,-223/"##!, ;*"(.%   26332)50"" "( #" &3)4%#" # &1%"            
794 
795 
796    
797
798
799 
800 
801
802
803
804
805      
806   0.%) )!&$ #! $"&'!1)/%(#"*-$5$)E<F]LVALOIRYZCZC4B157.C=.LE&9C$349: .9%18-1330989:18>%D9'C9:/8P)@T$1;;A;3A?/Q,S]*ET:FlC@_EIYB:K3,17$--.3)@H+7F/.<'6<,6E)1>"4<)4<KB@V56B-<C(8:/4+.-%921EF<HRM?QP6KT?K]LaWFf@5D*1/%'72=<6D=2J8+95&9G&2<.0)-:%%/3+67/:>9LEHcJPmGVb;9@.0/474:3<M/@M8K=:I;9F48H85ME>UK6Q=JP.GI-G<=*#-)4):FJgI‡n;VMKDGmRbŸI[J494I87I;?E=I8@Q2@^4H^=Scad}\g„JifQa?Q_BN]AGS=GN89<3+2()0(+591A64B47?14<2F?ATCjA/%%$"'%""$ !!"'(0%2;&5:&
807   
808   
809
810
811
812
813
814
815     
816
817       $ ) 6<$$D()C2,-20+"" ! &)%,/&(,%',%,&$!..8+7"!7$%,'2(%%% #( ,& %   
818            ""#!'
819# 1"   
820(& 0@543M(2>&(;36'$$&.,)#!H7:./.$5.#="922#@ (,:!6+2);&(-"%"#&!'#+$#'!!$%)/!&0("2'*3.!1*/-' !"'&$ 1!5H-G6C&7&-+$=>!!  !   )  65)# +/0-+&"6%  
821       
822  
823  
824
825
826
827 
828
829
830
831 
832 
833 
834
835  
836      
837   !&1+4'&+,#<"+ -!#   &**#%%"#.)7#! 3.$95C1H@/@E2GN6KI>N1BC-?I7CN=EK-?B*:<*:808;(;5%43+=64>?.=P0<N,=7-5+5'&.5317B494?2DM(E8(9M%5F#6G.:4*3*#(*&(+-5-+4,43*3//9C2A@'-;(4N7Gc4VW6MI::?6>9)G8)@8+DJ<ec?`U@UQ=vjFX_QEO>292D9 *-)*.=(6;(03)14$10-4&20,'.,!))!1/,:65@C=IX>D[EXIZ_,]_)e_,>E44=@6C91@5:=.*:%0:47FA=Q;9M<Yh:Vi4\l+—{-hM\BJˆZ‰q±>{qKc]X;D;B;>H<JK;?A<;.=;36=-7H*:YCcgqz`GSXBTFE[DFO?HN?BR4CI,/4) -&-32+92.8206/3=6EFJ{WHk@() $ ! #/2"9<(:A-/@, 
838 
839 
840 
841 
842
843      
844    ,* 
845     ) 26 A%E.!72)+1-,"! "++.!"!&$&!""&!$ )  !)-$&1.$/(       
846        #,' !&#(+
8470% "&8#*1./-*0'$ "%($.2'*03,>"&-%#*!' 9-# $'742C,9:'7O$'C+&'.%!##&%/!1+,-(/--*"#%"  ! "$5G&2=L'.<'G?"";/-"!$)","   ##   4",&"$'*".,<?9E19(4-?#* 
848!$ !  
849
850 
851 
852 
853 
854  
855
856
857
858    
859    * (& >           %#+/""&$#%!@4   "*( &!-06 4B3;2?%ST/VM32;.963>A<1;:?E76HA4BD8>A@J/<E27A1?@2CA*>F+GS4YQ1AB:EG:AM0;S(FF!@S/<S5,9)"-4.--"(%"'.$*1/7,;7 42 33$14(84(HK)IJ*1=:2?43;/:591>OHcCTi@Xk5\a7^m9np<voJzƒRe‹Is…UVƒPVDct5ET4A[*<M&*9,,2+*5)/8#-4)-6-7<#-0'+1$(3**3/+9<,9A9LA9RL`yH†‹MtˆK^c35A61=56>12>-2;'GN/n]<UN5>@F:VUI\`F[wVzh]qLDUoJc¯k›ˆjdN\D1898:CE;RHA=D72-3-6:,56,.4D4CVQkGPWB@SBAQAAR>7HB=K=@K+=>'.-'(---1036+2519:7H?IA?C5/%$ %4:'-:'-<'-5+        
860    
861 
862    ( "#       1>"?+P2P7'<:,1-.#% !"#'2');("%#*5 4&)' -.#+-,'"                   &!.-(<1") )/6'"1(086*+09+)8#*%( 3/";& +""?'6210 >%C*4/2&*,$L&/J* <8" )/$, ,*"+#0%$%  
863    :O,<[;G1H4)"2+,(  " !  
864G"!:..)" !0 .%L2&@X04D8H7)98),#*,),+/9&9&%,* 
865   
866
867
868  "". 
869  "'!
870  
871  
872  A](@ 
873    
874        $!'%N6H@A3%5*,$)&&.+.+#   !((-?,3<#(/,)<G.S<+9-'36!66(/50299@1?@8<H8HH=6G;.91<889@>.;>1D=EMAIL4.991?=0:BBL<:CF"16",(.0!,)!'(*%.(%-+3.92BJ%cW)IJ*;B1AL6AX03;/%17"0+,D0,@4K]IXfCSi@k~?pƒNXˆ^_ˆWq—\y•gd„_RxUGmOHvI7R10E26I-0A+.5$(/"(4!&4$03.7:,-.**(/ )0$*1,,;/0B5DSGWmqr—sš«f{‰;:?.%24&6.7=*9::;KLFgPVl?;K==?LfaK~nhŠ•s¦—RwjLdcd~”HWf8B6).9,6D@>DB=D=7.131871:8+/8.<AFBXD_b;RW<HW<IN<AB7@E<4A6@M):<'(3*27)/6/+4,22+C4:;*.' $%6+@C)JG >F$     
875   
876
877
878  
879
880
881      
882   
883  3 0""  
884 
885
886 !$1 6%5)D,"A7.867,-/&##&+"* ,&&)!,)'(9 ," )#,*'&,,"5-/(4&6,#!
887 
888      
889               
890   "(#)#/ '5$6: 60.<-)'4*$%( JGE"44!A53JA;<V8N26: 63:2G!/>%-:#.3(,;.8+ 2#)<+*%5"<92%#$&&  "      " >bL5g+21C!*6%+7,"     !  
891D#"*@0%+ '!%"4/,I/,4&F,<H,>NC?!G<#8=)5-'483/34)0$"! +" # $  
892 
893
894  7)FU<<4.#  7   
895 n4€8N,T,KC>\U!#& 2       
896       +$71[e+Cj!&E $2;O<R=F2@+1( +%(&&(&#'&!(+,-.#)$:#,<&0)-*%0))-+'//4)630:68;?2>B.17:>/BD75:513,75=5>I6C<6B/70.35306<?>305#1."GC"AR5;483>%2H&@F8XXKXzIQe4GQ8JQ=DH6@;(12*+,.9A8=O7.EOFdGLxFZ~QXŽJvŠH[w[W}kQsdCcED]/Ib5E_82L*8D >B#8A$,?(1;!35./"66(.4*(-#(3":6%2,%*+&$)2*3:4GH>_vTr–i„gpR[O*@4'C@18@2c_1B@F=N[JQGldEnaP~‚_šhZ„Oˆja’M«Y{‡c†s<D?2.1.&3?%5B.8D1:9::6B;6==16;*<E:9GOKeHRa=B\>MZ8S[:b`7UP9BG3BF,45+5;48?(97*?21F2.?+"""$!#!!)0'CJ*=L.8K%      
897    
898 
899  
900   
901
902 
903    
904 
905    #
906
907    
9087 2)-' !
909 
910
911
912
913
914  
915#17$='F-$<1(532/,*$% "!'&$&%))&0$#('.!33/<%2&!% !% #'4&!#(1"/.&#$! 
916 
917
918
919      
920
921
922
923
924         "&*$$6, 3E1"8!9;#>M+<0%$'JAN*4N1:P&NP"AX&=O/&V3 9+.""1)2EH/2P1+9(2.-#<02 !.)"+*'#&  " !%! >U=7gM';#@="#1% !&*
925
926   L/F:6$$)#0*3(4<&<0)I0)?31<-96+B5+&8(*?&)2$1.+!#%* #"'.*!)  
927  
928 %"?.7 (?(]PEX?@SR>/( 93 RAFh4<ZGNc0)V/&E<7eB+F!-18" !   !  # 
929   0#T,C,#4(350">)0+'101. ?9-1(4* " %'"#&#&,*#55??/=#==& .'((/81@F=;:4GC/3;848?7=81?,(;./?70A7;H6GD-(4,&,8:A98H$$+#!,)$D.8],`^/CE/8:5=D7Q[=>mDG{<S}4Oq=Pr=Vk,gh(†i>R"Fp'3J0-B<'II:GA;^aE~IRtIOvYDaN2G<1E6/>/'9+(5,*6/3E+DD'33+06-17'E;'2:)4<%//"2.'>92<6#4@"9@(>@1.=C<JVDWtPho}ox?rn,>B68G<em>op=j]UacbOfnIii5Pl3Xb=Pb`_cM\eq„jrh~•OOY/,,'(). .2*2474495:<=:8:2552:B>LWHOZLO`?GW=FQCEQCF_GQ_6GN8DF.?C/?E.=@.8;/>//8.0=/. !!(*!($(%#$.3H,?K+?G* 
930 
931   
932
933
934    
935      
936  
937       
938
939
940 11+-1 #
941 
942
943
944
945 
946& 2<'N-M5%@<*1619''&%&$!!'!% )((/)'% :20L'4#")"&"( %'# .%$#0)$""# &%&"!!1.#! (6"4+"'"     
947               ))#4+6'E-%@6A<JJ+MF06I(?<#:!-20/:=0%6A?.6?)9590=.0)".-'KM25G:,.*" 1-,$17 "!#"(!,&2&0&0. "%#"! # H)XKCDDN052$>()'%! 
948    I),D7:0%%  '5.)$*-<+(3&+-+14&11 AC;E()" ##',!45+.#
949% 
950* ,4:(&= DU)EbMIK8(<%K\6]z&lwY\ BZ.I\CbjC6nC&32-+705aP%?G"#*-3 #"!  &!-   
951  '#&+.$(C$CH)>?,=<"6.#/&-).)+*6,--#*51/98.54"03#)$'!151(@9*<7.C<360137-21-0.'*/'*0,0544>*=:3B(JA$/2:I?,;>56 %#BH=TaJH^.CS0ahA{|=aW/U]8J\:Rt;@`>HdOIleB~BU>M#/E"/" (/(=;GO8:JN>BE5?@1E;2:5.<5'3,*.)'&+*-52:>.@/*7'.;3QOBoj.F@)%0"13)LL,MQ6[_/JG-7946=*-/./5C4J[:O~fz€€ys9NM,E?2AF2KnKx_Qw[`v[Ud`<GG;:G41C8EAO]DQmXŠ¡m•w^{Y7G342'/.&0*)/06,4;.;<:8;;855B4PU=KPC?SIBY=I_=Z^8NRBGQFK[BX`7IT5GV7M\4YW1KE,8,(.(-G3$@+'#,+%;5#9:"35!-1(##$+-+E.9O*      
952 
953
954      
955 
956    
957
958      !   
959
960
961 2 3&,) % 
962
963    ! $ +6 J*V>$>J80514%'$*!$!  $ ""- !0*#' #'%%%$-!$!)#4,-;"*8%&+'"' $# %,5*3:"A%!6!4,',0'<83A4 
964 
965            
966 
967  
968 
969  %8%3B&1.+(<+#AZ':D2JF/6O6;<$#42.1+->#+2.)83:I.=*4I#4E-5@$42'"5%)8$2%&,@:BF"5=:2J5J?16..6;0@)E7> 96,#)%.:&* +" F290G<&=*&) !#!"%## 
970
971D%)?87.3*  % &!&"$,$3,52<!1/?/ .!%6"184A/C*B'G-E)F"./*=4>;FD.D4%3%(B8;Bg9[a+NG)A>"@B9U#C" 2CT(QX6iy,<C8;TM72#      
972  
973  
974   &").*4;-78<4K61?3?Q'HU@D!41 :9 +7$*-#&/(07//@'&+*&"!#%'(3&73!+236/1>. ,,#-( '%'($#',2-6C0,>40:3AN.GG2;=20?(2:#+.DA*MsH]z1CW4C^O€•bl„4L_.G[-Gk3Ou06<B$5Q1M7Q1?Z"5>+-') #/9&789I4JY9<I-6J+5P0<N&8@+5=&<:"*3&->**B2%2.#/:-<X=XZ3B'&')3458C@*FB/BB6L3+;35D/US(XT/9=;:Hh;]ŒM}^<G8*0!.76L/@h9G`AZP2E@&45:E1EL-:@=+AB-?aDfxgŽbUaL4?53:**7+2<+981,3-.370690506>?>VDNT=7H?6HF=RDDV@IR>9NH7KIG^CDR9;M==NC>X@DP/D6+G91nJ/U9#83(A@,9A03>)$-)!&%&,-3%/C,?I/   
975 
976
977
978
979
980     
981       
982
983
984     
985   
986
987  
9882 0(+, *  
989    &
9902."B'H21>>816;+*%!#"!$!#%&"%*".#%"!% %##*#'!*"'%%$& % *-'*.&*!)!("#%%) *&%6("#7!%/)/'"12 +:-#0. &       
991    
992   
993  ( F(2:!2"!%0896)()* /7#2KB=9<8G4/E;!-4#$2$4%+*0$1;&?"+,0--3/9,46+:@)*6%/;%(+# $.;BALRQ!Ef#7V!<_6C1C/-S22:",<.=%8"+$""!""#,-!(')#<"    '**2(   %#"0"(!  
994 I"$80>$+3  $*3;D- ".!!(%(OG/TC.B9)"-"%.)&3')!.;',:0 01 &/+5!$@&.63;02:-32%%$J$R8d20$2-@)%   
995        &'"" &#",.21>I.--7((GABCM[3*A(&34-=+ 4!&.#')-*3/#1(-'* )'%$+, &'%5108,;8$60$))(*!& -2*986'0,&07,6A&74075$,/"6(%0-;&-G/7D7Ht5XYeGq}=jcC[;^[33:.*90-C&+:"'1.4(+J,+H*(4D7A 0@/?H5-C;(E$.D'5M*KV,CN+<M89J,-: 0;"'3&49"*+/#1?-6K(3&#1"020394)+1(+5'.1&-./<<VdD@Y4%62,<B'3l&<\=F%2. $(*-,.2@/>C5PIJO17+.(357F6;C/651*3H,6d1KZ?RA1936@19>-7<59A3A=1682322&..2888@>;M:AG6:I9AHA=HB=F:7;:87G9C@>F9BB8<B=>EBDF9H<6@=HYX@kG1?53CG35;-()*#" $ '("2'6I,   
996
997 
998
999
1000
1001
1002
1003
1004      
1005 
1006     
1007   
1008
1009
1010
1011
1012  0
10136).- %   ")5 I*U6&D>7545%)#!%!!!$#+! 0)!'%*!1 %&''!&(%&*#! ($(+ '$""#) !,/ /3&.4/-0,%, 
1014 "      
1015
1016  
1017(36;+,/"(%"! )$!&18&AD;6(6<-7E+.<'-6/6:#,7&!$'#)%0 -&,()!"/?84J1I*FD+<G$6?51(,)7/H<63a45L@%;B#1?98%-2)&!(/"#'$ %%4!,&! 7!.. 3(!#$$&-+$+$, "''#$    
1018    $&&," (#+)""&%  @ "341%!* 
1019  "(,2#>'8 7('64-5 #':YZ5Bu*,0"0!3. ,%#2(74 ;-$.&'(!53,.#*C#):7-W&3$+!',+                !&")(,"32-78623&'"&.+73B;;6,13*'5."+"&(!#.&#.!'*,$(/#).""+###*!04*<22C&94$$)#&+#!++%5)))$)/+#*,&-'0'$*$$+*"0$",&#*,,--27=9PEKbQHMQHPM<FB16%,/*44%HN;;3=!-!## # $*'!""+(33/4.'.%(0#05(>@9Q:6I86K0-D#!8)"4+'3),;"$+(*2/*-"!'&.2*CG'>A/-#87 02'10:3@D;B1(1''1-)/.',9*:13>..)*%071)4:?@G>D;R\'`\2TR5MQ1Z[%>5)&+;*3F7:8/01(00,90:;:68=/88+5,*,('-%1642D:EM:EP9EN::H:?F?CJ9BF/:>88@=BQ>NQ>AH7@K:BF95*8--L@;MJF:D88.49+2'%&"-),%*-1.+-!*,'-5& "   
1020 
1021 
1022
1023 
1024 
1025
1026
1027       
1028   
1029      
1030 
10312 :&.-& 
1032 
1033   ",6K"K2\:*MH25=<$)%# % & #"$$(#)(%#%$%"")'./*.! % !$!$$& %%#!"(#!""%!!$ (#'*&'((+'"-"!  " ( " 
1034     
1035 
1036
1037 &1"$$")$/-,&%06+(I*-*(7,+4/%&<!+4%+?>-,0'C* & !!2,*%:2)2J11@)(8#'2#12;<:W/3CB 8,*/'+))# '% #! " %&&)" &0*//3/%$'#$!((#F)#+;&<,--?28B8: )2&'*(!7+ -!$  $   !!'$&'  V!$4.2$ 
1038        &6)@%)+"%$%,()#%-$ 
1039 !PW &"&!!0/?;B%J_$h]SS3U6*#53')/+#((#;&-%)1##      
1040
1041    
1042 #!!$ %(1!14/:623+("& #*-)7,2++2,/ -''#"%#4*"#$+($#"$!' ! !'$&22/@(/-$%$!"##0#'$"2$((#(' )()!$%,!#'%% "%'%$*$*2-+<,3F9J<-L??R:>H'3>'5A'1I(-E)4M!7>'%%#*)2*(/!=;*AC(17$'#%$8%.)9**:'"4#*&6"%4)!.& /!!,#)!")%26)MA2A?(13)/.+*3%*11-535@'A<!A;%7;#*/(,49.<,/3%59*5<.D?29E>JRM[rK[Eb†F`yFB[=7F+47,8/3-21'1+*60,644A:392+.1%**','--(8>6/=8?R=GT?FM7:D:3C>=G;=J;:?53;<2AC/FC2><7?;;@5D2+;(9A4FA9:524()2!"(##",$.8&5=$<F'9F%8?-=E0    
1043
1044 
1045 
1046  
1047
1048 
1049
1050    
1051 
1052
1053 
1054
105557&/1*   #! !!!6;'K-K9)W>3LJ87=B%,'"%#%#&'%!&')",.#-- #,)$,.,5 18(4&,#'$' !%!" % '!!  E"%;' $' &,# '$ %             "#,, /$#"# * ,+&*! +=)!;I"BF' C %%'("&".:5>#:(&&(:':@.I#&>3.0'''!,) +:(&;9(8*95$$3!,$+0&!&'(,.0/71-8"3C7 CN!=>!051B!<3"E?'1?&G:*>96&8-10'./.,&2;1((*!(%#$)%-#$'" %&"('$$)" %#! (()/      #&/#B8>>4/")(.))*!##     .& I1&204Q!8N)D>2E6!'$"!/</770,5&")" '(%/&) 
1056      
1057
1058 ! ($&$"!(!#,/6A.=B'11"++)1$(2*.,(74(*/ $!&(*"%& "!%'#  &$+1):-/5$7@13;'%(%&&# ' !"'&) -/ *2#-26D#?SdOA2*/">B%<B&DM3>E7DK::\:Rg*Wh*3>/%5+*-'&:+-G/F4>IF#LV#CI'9B0+<7,5 (-&%!!!&"&' %"' & &&#!$&'476NR5HK.6<'72'0."*0,29/4615E,P^,M]&5?&26.5;06B.3=.6F2CO5DXDYgHAWOOkSa{SV~Qe…Dgc1>H/:A/13,42'55(073,69-41")$&-#3-&56.6<24F64B=>KACM7BH25@;8@73:5+53)31-/5*.;,.4(06013H;/fH0Y8:C24/)* ""! !$"#0*0,4>-1F.:J1=N5AP7 !     
1059
1060
1061
1062
1063     
1064
1065  
1066  
1067   
1068  
1069 . 5%"/1)    " 69*@+!R/,U9/OG<0C<(*0& (#!-/'0=(368 ) +*"66'0>&%<'*)1' ", .4'3#  '&8&;#72041!*   
1070        %!& $%,&&,3,E.60)7+?27(A.5:" 4G=-R (,#/!-'%!"%$!#') +0%$,*!"""$2'#,'+'%0- &1",'' "!" &!! $$$( +.*&0&,:");8())(.4!2B/;4-Y37L/-K&*@5&"&." "#"(*4+!#7)!!!#!**)-$+   ")$1'()*.,*!""(%$        '&!0J'J('#"!1(>".463+ 
1071
1072  
1073 %""- " * 5/ $("&)(3),(0*%%-(;1**+,)*#,+ 1 8 
1074 
1075    
1076 
1077
1078
1079 $&'=&'!#('/;0>4HS$6;"/&' ',($/9-3;!,3'($"'"" $!%()#00(5B.==0(.?(3+&"!$%-**/%("$'#(,)*2*#*!"'"):%HA!D(('$-+110;#:.)5',7/3F7Dg4ao(SV"=ACHIC<9@:)FJ5<\03B*75.-4-'3$'/(0-.,-+--/$'! ! " #" $ "'&""(0,?A09500&*1+%1#(2+*815E/4D7-@;&2.%1(&2*,70(3,+.#13*=C4DBInDQc>KQKRnGGXN/LVAi;>L46G0/;.261/83.202=1/2&%)#'-&*0-472<J.=H0HJ5COBIH:8A4,40,4303*//&,0+-3)*-*),*'*/129RFH~aBˆY8[9%6+245/1,-0+58.050(8,*60%98.C2!    
1080 
1081   
1082  
1083           
1084 2 0%.+"*57&B+M.%c9/QL;6B;+(2! ' +//#4"/&$##(+-5#.@+.9(!1+" ),/92B78"#B!)    #",2+36-328<;  /"#  
1085               "(%$ "/)&*#%*! ' &++9()7(<:=K#7A/-?/0/$/#2%4>+:%41$#$%!("%#'+)%5* "!&!-,/1%;!"#) " $)##1 /'""#'$'' "%#/0("8:1!%//-%"2$$'D!>6(-2%7%#( :599;5!80)$ !*.&$.)%      %@%"&+$#,( $ "     
1086            6,(+(#L/#      
1087 
1088  )",- &) #!5"$!*%$,4+90814RF7h ??D, (  "      
1089     ",#2F 5H.1BH(BG3>=;)8.51;495$/5,1/0,5 .+*&+"$!$$&+7;&NR/@W::B59?(72&%)$$! %"')! %$$&*$( $"#($'%<!(+&'&!*%"!% $! (%*246OQC\O>Q>(55(7<1G6B`.`m0K\03H+09.44,*)#&('#,%76$)1&&.$%*))1!-1%+'("$&2(, &#%""' %-!%%(.(00(&#%"-"(1%./&0-$*(!'%)()""1"%"*';/;09A9;R;=MF*>O(;5!,J#3K#75$86$12.1&22(32'10!.(#%%#%("*-(4.7C/>M;CO8@N=@N69B+48-54/47-.1+*4%+/)(-%$)%!'-96=bM`‘qegD`D+0*&*1+>?'EF(9>)6=+/:)(+&",-(3')3& !   
1090
1091 
1092
1093 
1094 
1095            ).!&, $  '0 4*5'!:,'W3.CE;7AC(,*$!#*(&%&30.4.; "@ /$ & '7)F"!;')-&'-+$  & ,6;).9# %  &!      
1096
1097    
1098  ) $#"$!#$ % %%(%"-6&(;./=16<.$+#%5-&"#('*,(&&9% %$.($#" %- $"#$#!##*".+%#'#2+'+5'=:!$ &)!$, $# "(!&*!'11+ '*$+"!)%$!+$"#!%!'!2&+#&"0>'.A1;=,.<+&$$3'6%(!#''# ) ,( /(*!+$# 8(!!!#!   
1099  
1100        
1101    
1102   1  
1103 
1104 
1105   
1106
1107    "     &+;")&$''%'*,8)!2C.>$.."9(3444B+   
1108 ! "& "&  &.Bf#Cb793#G;&76;RT6FL4%,")/$0-!6)&.((**0*(!+&'0 )*+. :8+2B90:Q&:@ 183;24:1' (("!$ !!# &'$& "!*"* -Re^W[DA,""%(24B.9H+2@%*%2&5=;BOE]R,J0&7/(9,(,& % %&*#8(1;(#'%$%'!%%$"&%!+51 %)!'1!%&!! !#!""##!(!-%%!$(-"4/+(*%'/%)+)."(($$1/,,')'5>0GX24N6%@3,32&0,+('(..()*#''$& !*'*#((#+*,.#7,%4)#$#%#'1-:96J<BM<GN>MM?AE2<@31:288-/0)(-()+&)* %&!##*,-EJKg|gw„aG_B1,"$!",(127A19A,2<-.8($)"#$#1!.6" &"&""&#$($    
1109
1110
1111          16$#.' '  ,,".",#4$$0*)66#%=!+$#"&"!#+(.$'+,+!2? <$ + *$!&.(8AI!(   &+!5),!!3
1112                 ! )  !%)(0!-.)33%,;*3@")5+&1!151>OGAS*NSGMNQ?NDICG>B*)%(!..+#9#1'3*#  ,&/=$@%   (!(.&(($+"**/%%5#D/$ ,,%0&%+-3') #)"'6*(!" $(""* '4+1!!2!."! ("
1113"         
1114
1115
1116
1117
1118
1119   
1120   
1121   
1122
1123  
1124 
1125
1126 
1127
1128 
1129
1130
1131
1132
1133  !%"+D</D %;#2!) !'#!*)'  
1134    " "*B(K<97KO,Og3Jn50KR)79"%4&%/-&*(("'&*)74"+)&5+"1'23!@C1HJ9MD/-:01:.")%69- + &-.-'$:*.# &"%#$ " /%L<>/m;L|$KZ"Vg)dc-B1#& FE,DWD6S>&/$<J"EP"9;13%.$+!&+0 -&$,#*!&#! '%&!$! & $"!!!"$&#%)+%*1'0<&03&.2$9;'@:$=<DE!VU(bU@:'>I7AM2#0,$)+#+%*1*04&%(!!-$**+*)!!#!%)&.279F/66$1+#,(+,.3.=:<H@@L>GZ?SV7EF7176'1.)/'&+&%*%"'$**"-)(71<QA]YWeaTGeM)D+& "&%(-0(36(14'3=&20""'3  % '"'" *!&!!  
1135 
1136
1137
1138
1139
1140           28($.('.  "+8$)&($$#!"% (%")))+-0-)3")!" &#*261./1&$,3'4 $0#($     !'#//(  !#"#&&'0          
1141   
1142     "!#  "$'")*%++!- )( ""&$.,,<*)3%>;%52.8#))';6'@3*;((>(3-(#,,+,04")+(+#*&0#/)!"       ! ##$"2%=3#/  '-#"$(#'3+%"  ##B58"+!  
1143 
1144 
1145
1146
1147     
1148
1149  
1150   
1151
1152
1153
1154    
1155   
1156
1157 
1158  2)# '!.%" #*4$1&9/       " ,/".49LGLMW6=J0I32;#LQ>Q$*2$$!#&(+(+'/&/2-/=#;>+PJBRUCDK8-5-,:'2("#&#'(''+%)%'%#(*&")+$-"  #"%%%%!!!"!*A!(I#/3#=./O;MW%@4IJep-Pv<4N,10',!(7&+?"*:>>31#.#, !+#/#+ "/%'!!  !!!&#",$(2+19/3;.AC.KL05C1NX7hc4RWIJh]`z?S^7BNC*72&-$.2#,1'*2/2?(5:",4%29$+4'0;&-1 ! ')0667;926065(76*:>1<@==I@=FB9FM@TBMP/63('))(++&)#!$# $$)#23+N96TIOZSW[MNLF197!39"BE#HI'CE$<B"FM%MQ;76354!'!#%%+)!+((%#%""!    
1159 
1160            
1161
1162   /9(#42(0    #$! (.' # "'# " ,#&&!&-)&$8*#@,/&"3 %&'($&      " !"),#  
1163     
1164   !$+". &$$'#($ '$#!!$!",$!%7$-, -,3%'),)*"!( ,."/420-63, /0'(%)+-(B25'@&*  %!      % &'#&!#+!!#0#' 5'$(.,*$% +() '"$)   HIG<*.("$ 
1165!    
1166 
1167 
1168
1169 
1170 
1171     
1172
1173  
1174
1175 
1176
1177      
1178 
1179
1180
1181
1182
1183
1184
1185   
1186
1187     
1188  !!$ #5!-!'=!8&1 $) 
1189    #("%'$)'(@5>AM:1>E.++3799+9,)7'"+!)# !"%##+&*2037<2(721@C1LO"9A7H-$3.08"3976$88$!5(-2"#' "!!*&#"&  & '!## "$.*@9A-LDC4S<)@*'C)(6 !)$+,.!1<*A@*1>%8@63!$*% #%%!- %#$!! #&%)"*$""$ &(-6,=46>;7BDFY@FLE=LU>]ULaRQ_h_pcbpEEA932*26(4;&19*(:1*72'8(.:+*51+9-1@+/B)1%)*006589;:66;8GN-B@/:H:=I@>G=<IHHQLKO5?B$93&47)@9#3,.+!+'*395CD?PNM^RL`I@=15,.%:A*>F*CQ+FU%>C%7D)BR*=J#AI%?P& "($$*!#!!*#" ##!!$
1190             
1191   
1192     
1193   19)!3/&-  
1194"%.),@D*<+..%  $"!' *)1(600@(>'%0",(# 1#,   !)+!," #'$ !" 
1195  
1196                    
1197   0*/#0/%2"'"!$#)#!%!"%!!!($"($(/.  ! # !$.(4,>#3>19)& # "()'1*$89$=!+ **4=>"9-3% .#!!#"$& %!3&.#(!!!!
1198%##&,)2=$/%#,&#(&6 %.*1'1! ! 
1199  -?7E::+)*#'!      !   
1200    
1201
1202
1203   
1204 
1205 
1206 &   
1207
1208     
1209
1210 
1211
1212
1213 
1214
1215
1216
1217
1218
1219  &! &#    .&#"#2;?6"wW0T^/;N*6+#3,+)-'$/%()$'##$#)-%(-2)73=7)7B:,3:'#5"7 *)-.*9,3H*GN,%' "!#$+*!! )(6.'*$& !! ,16<.27-%:)9C@:5A/))!+183!22)-#/4%1).>43H//9-'2!$()*!$#&"()'$',*/,/" %&*"):%67+1I4FA>H;*<F>OPEQO0NY@dbJlOI\5EN,]S8GF,MR,J?+08,!5-'4(,,"*+(7-.4$'2,3)0611>68@19C79L9@P8RP5QK<:F88CE@SHNS=AF14B0<A/9A,5;#;<#99+6>7;?BIDJ]IBZC7E1%++&>A/?H)@G-<D'AH*;F*<K+GK&9A#4>)   $&&)   
1220  
1221 
1222  
1223            
1224
1225
1226    
1227"=<7#96(. !$*!-%+!?=-<181&,-&!#"   % (*)1)2#7"+1% 4&$))14 "" %! #.%*&  &3+$1!$"    
1228  
1229          
1230 
1231
1232
1233             !'""%!&0!,!$"""%#+/329<4?793,+.-!"   #&"$&## "$$2.%%< 8.C;MEGJ.L"3%*0#&5(!,./&"- $$!/ ?%8-
1234+$%1)%)%'(&01033='-25.*5!;6"-4&0"/!
1235   .$<5-30()%     
1236 
1237     
1238   
1239  
1240 
1241         
1242   
1243  
1244 
1245
1246
1247
1248  
1249      
1250 
1251
1252
1253  ! #  
1254      ")<:!+##)&-181!7^)8L,22*2#!*%')$.!%2 -6 $!$!%''H;&Q<1OC5066&-% *'$,#=-(,#.*+E)0>*-"#.'(" #"*( !!+=:36(&!,&%5&(2%.$4'8)0*'9-*C(>U-Ti4bw<2B(2.#-1&8M+>T!.>&2;$3>!1<5,8+2:(-2!!*$!$!!&"$$%*  !!-'$0%*6 ./$(!'&(/2+/00!,<&61$,5':F1G=1F"3T5LJIXBASNIeIRaGPhE^i3IU06$-&$-" )#+)(2&,4")7'*5,-;5)96.>03@C)CF@WJG\;FS<GRCFRUHUCFK3;A37G36H49D/9F->F19C6SG8tPFjKAYA2:6'00-05/+9/0>)3@'6E)7B)8D,;K(7A#1?+  $"&#$#$#%#    
1255       
1256        
1257 
1258    
1259
1260& 7/:9!&65*/% #('$.#:!@*>-:/(00,(+,"#"    ! !!$!##"$)!'')$,*1&1/!%##"''0 + ( "   " #"8,C'   
1261  
1262       
1263 
1264
1265
1266    
1267      "&% "!'!   ,$24"0;&,@,*?%2= 3GAQ3K)2%& &## %!)* $'!1'), ''+/8!/I/'H8/?27=6E3! -*"7!!'%& '!"<& C.2$,&#"%" "$("'> -1&?*41,;"0C C-#'-!"!     *% *3 ?/;/-0/.'5"# 
1268  
1269  
1270  
1271 
1272 
1273 
1274
1275 
1276    
1277    
1278
1279
1280
1281   
1282 
1283    
1284
1285
1286
1287
1288
1289
1290 
1291
1292
1293 &        &+1/83$;3>=,3//5,0/6-G?&9A&')#)"&& $'*(&'&#$&+ -1)*5>&@< B@#;,41&%1#"("",#7?-\jaR'e>/^A RPash†(Tw"$' "!""C30,&+:309("+%*1(26).2&04"**1&-,'(/*%42,B 0PBQ??R*7:"=@+/;;-C01>.3C/.F*+>(-=&8B$/=!(% *#( ' #* (/"%""#$)%"+))" )+#*")&#0+(8"$/!05(-.$(71&'/$)-7/8A3QD2LF@ZXH_QKcdOiMH[/2>*3'2%227'31*+1')2$+2&*8(.70;A+FH*GH:8NMJZHJUAL_ADYN=PDGO2>H1?P-;F)@J.=I47H79DA[QL…iLrSBRB7@<-AH-?A,99);8(64(7;+49&<D'8G%/<$,;# %! !"#$$"  
1294
1295
1296       
1297
1298         
1299
1300!! '#!4( :-'(42&4!&(! %$(1%+/7$$:%?+"=2':/,--,$%+" '* +) 3-)+0"$%0(16+1=& %(24"'$    !',$!,/$&",%2166+6.#"&   
1301
1302
1303
1304
1305   
1306      
1307 
1308      
1309  &"!#!#%$.,*5#%1#+((%!%),.378,E7(4+)241;6,9#4,-/+48*3".'11;%;"+'!1"%',&0## &*4'"  $<7=:=E+26-GC#J+&.?"Fe9T>17A*J6,>0'5&')3*&,'!)"&"3,  ( $(!+0$*'/879*:.(
1310   
1311         
1312                
1313 
1314  
1315
1316 
1317
1318 
1319
1320  
1321
1322
1323   
1324
1325
1326 
1327 
1328
1329
1330  
1331   
1332   
1333 
1334
1335 +$.JC0Uf*Bw.PZ ;D(9K+,<93F/00 +3$''(39 *3-4*0 2:$'20 %8$8&)1&-0!+%&% #$)"79;R,TIDpJh‹Cz‚8r…<MRY.3=9)!*!!"#&'./1*&'0'+'-(""&,$.,#6+%<(.9(6",? '/ #-.148<+;C-5=--7*)/-,/-)6/!-2+2++2,-=(+:#$(! "$%#,(0'- $,!&0!"!!!-6'!!"$##&"&%!!!)#(4))5#* % '/%/8*,6.0<:*>B3;F4FJ9RMEXI@M).D#",(*%!41(7,+1"$.'4#*4(+=69E>IU;BX1HQ>=S?7PF@PA?OB5F@@M3>K0=K/>O+2B(:L0CI0CIEe^[€oWQX<GD.+4(1B.-9)57+AA,EI)9>%*1$1< 6@!*6.5"!!% #& 
1336
1337  
1338  
1339 
1340          
1341" $%5(;1"/4-#-1(!" !%.*'#)!$*"-'),'6#$>#E)'42%2/+*+, #":D;$B,>.8913# .!(&*,4(&5%/'# ( &$  # ()-"'!!*%()#("1&*&,
1342      
1343
1344  
1345    
1346   
1347   
1348 
1349!
1350!$) $"!$& &&$))&-+&C=CI6F./)7/:((4')1!4%2".9%<'(361; +8#22.6)76/&#8'&#$$!    )#%1*%;.<7 O@KW(-V)M:>J:/6W4)A2+B'!@) 3+8B#7G(<O$>.)3%47!OD5?&+   ='=!)(,)2+4:#$; %914114'      
1351     
1352
1353 
1354 
1355 
1356
1357 
1358      
1359       
1360
1361
1362  
1363
1364    
1365 
1366  
1367
1368  
1369 
1370   
1371    
1372  
1373 0.%;DE8B]47[->C7@41?5)6/7E45@&19'!)#*$$+,.4$$8 )1 !0)%1()!(#/" ($"*-4?CJ#=A/..A#,T,<mDmYHl[Qc6”x)˜y-Œ[>S6O9+:5*+.#)%-"(!$&"- #,&%)% )((#'#&3F,DN.=V);S)+6%'(!%'"*2&&."'/&)5''2"(5!)5,*&&-/)-(/ $(!%#!$ *!!!! "!%$.)"")*'$(,)-(-0((1*06(+5/(834C80C>?O=EM(=>67,( $,!.(#+#"- ,!)7+<I=J]E_[ERQDMX9LU<EP8CP>BO88I58E2>Q.=E.4E,->'7B,HZ.B\DLeTriK^Z5FE&./&).*69-EF+EF0=C.36""(*5%4?!4?";B&  !  
1374   
1375              
1376 #$(5#@2%0:485!%%$$'+*+#*"*%/$-1$(.'/#H#G0 93.6.*1&( % $C >%4-<3 *>#&2+ 2')&!$'%!.'0'(3 %. )#  ! $  $  ("":"-%$("&(.+2$./!4 *)),$ &+       
1377 
1378
1379            
1380#&'0 *"-&"!#(>*3!/* &F0*;26<!$<#. .7"$=#%0$+ &##,&&+(7-55$.F!2J=O%3P-9 -6%.0*/)-%"     $";-C(5X:)L.(>$3>0*  06'&<>&9' &249Q?3,C)%%B-%A:#"G394, 6%4$7/, ) $-),&.#-&)'"<J#/;/..+:*,'!&#*/* )+ &'
1381"  "%"#    
1382      
1383     
1384  
1385    
1386  
1387      
1388
1389
1390 
1391 
1392 
1393 
1394
1395
1396
1397
1398   
1399           )*2$04*>,((23-84629>..80%)116'$2%2&2 )3!"( ! &!(/# ,!"*+ #'*5+2'5637<64>+-:)$&%,#,;1:@OXYƒ’ƒ²‡x™wœK˜¬?hr9CH+24!73"5*_> C6#!%#"!  )&0.9!=J8V^8:K-,3+&B!"1 *# # ($#2%!-"%7$$.$ -!!)"#/$$+ %  !  $&!*, *("*+/4<:$7B(IN$1@%<F$58(.5.-;+8@9;SNYcA\](>D&5JA>)%+&-%(-4+6.)BEDWT?cEZhIPUABO:?P4@N8>L28I16G34B18F)5<(04(-0+6>1BI;ZXSfbAPP-36%%"#(''1+3>7;L2GR-GB!6;78-8*6D&CT+"!    
1400
1401
1402
1403 
1404      
1405
1406 
1407       
1408# -&,//$#3$:5+A213),2$'0# ,((""*1+0%*.'6!"B&B3#/5+=+14,%*), +;! :*3.$/9',;0(8,2"&$!"8$06.1+0%0 $+) " !!" $ ,"&1&!,/&26,G+875-I'9"%%$(*"--, $     
1409      
1410       
1411"      !"&  %+%B0*))''&-#"1#,"&%! &),-..#.+, 23"*7,.3(4=&4D(2=$*,!.1 %9&8:5)C1$!    (!= =4/UR)SI8a"16/189D$% % *4!)R0#<6)6 Q ;*))%! ( 4(2P"@$7;9!/!1.$5>, /HA"?B1DF"MC/8##'+&$0,84'!* $"  
1412        
1413          
1414  
1415    
1416 
1417
1418   
1419
1420
1421
1422
1423 
1424
1425
1426
1427
1428
1429
1430
1431
1432 
1433      
1434     "" #.5.7@"+J+->56<.,5&28-'-76!35!:9#.2-/51#(),1,9%,!&'!,4"JZ(nu.NO*19$'&-$/5%**:BO{ŒƒjŠ—vœ‰‚¤—j‘š_‰au;{e#co)1T:;pH0g'#0  !"! +(<*<=%<O*H2)2 !'#&#$$$$"('("!.)#)""*#", (-%*')" #(&%" %$)#*"",#3@7<N-&9..**4&/9/=B(-0''0.1C<.EY$BW,L@*D)&:4+9'#."*07?C?$>B(4:01AG2EY>QW6ND6H9?P2>J1-8,7>-:B/3;0/A20E->G(6;)/,1CB?{]K’hIgH0)%#"")'..*824E3FV'NN'MU&KP,LU/PU1  #   
1435    
1436               
1437%"*2"4) $&)#3/52 -72*6   + 3*,0'(.( **&0(2+"3$"=(;.'-.-0#*.&!'"!%#29+36#45'85,+<-&<)-+$)*)&C(?5<9*/7#+:""A +#!""+*%" /)!'*'489 .: /4.9.&/ &*1+(;-(*.%          
1438
1439
1440   
1441   (% !" !$%$ #"#!#%**486!%= 4)"& &,#(,*02&'4#6=!)C#$'.1&+0)+3$.$ "  
1442    $&<""4,-O)1D7/,#59$F $&&(##,"#%&# %#1.')#*"4!&*$0(64()7PC17A:,D)(:07=C$?*2#>&"8% %(! %              
1443
1444     
1445  
1446  
1447    
1448
1449
1450 
1451   
1452 
1453     
1454
1455
1456
1457 
1458
1459
1460
1461
1462 
1463 
1464   
1465  "$&*3*8A7'1< /"2 +''2%0:$&7'.>%9?$,=&.9$'8"$!$7 ,@').:4427<$1BP6RYIl.;U&FO>L!FK!CL#ihHedj]j\_‰jk’}BxV:oW1Yo)WU(EA!-A#[): $'  ##' -(")#5@),/.&'-!*&+&*%-#,#-&.&- '!% ( , !+$$ /)1') %!  "*%!!# !("5$)1"" *(SR3CP/JS)93*B;9576+.<'-2*5"(6*/<&9;,3*")A.KP2CK)@N*5A/1<>3DG+=6:B9;J5AP-@=+-6)+9).;():,)75+>8&5,-,4ECKg_”qU]B,(  !" %&&(,-6=44=5>I1AW2=Y:Gb5FV4!!
1466      
1467       !  !+% .0" :2*>-"76.$3/'!(!'"-$ 3./+*3%/0'),!)(-'<&:';* ;.#5+'.%%-% *( :?'4-!71(2;(-=.33,%5!)/!2-968?&FC.+P*C%#()&#  !",(     !"! ""!'*.,.!:#.$&+'6"56#'>%+7!*0);'533 )@(.(4$     
1468
1469 
1470
1471 
1472
1473
1474  
1475    
1476 $  $  / &-,( 1:,  &!"&)0-=$ 9('&&'!)$$+#!&#&&1)"--% ( ( !
1477  
1478    "6/ 3Q D&1%#"-%0%(3+!$'72  8$'82>(S2!+i*"?&$+&P&"}R _M25?8)3$&(.#2!2%#"*$    
1479        
1480      
1481   
1482
1483       
1484
1485 
1486    
1487
1488
1489
1490
1491
1492
1493
1494   
1495   
1496   !4)2() ,0.1(,&/'$.*'#+)'8)!(*!(&$%")*3%-##*+''#<-(=$+@'8Q.6A:7JC7O4-=8!65!95"1<'FQ=TGahDtvROdJQL469612<:37,(-!'# >,8,5/!50&(!#2'-'.(3(+#*@/0D#(8 ")'2&!-# ( ')!))!#%$&)*$$/ !'$#"''%$*)HNHHVO=nj<]]BX\6\S5?P0@J%&2$(1!(4"0? 09(#8"*8#(*4-C@5L35?-:C/;A-(/3!.06K:6B4.D;AN%'1+",% +!%. +- *,#*'(.2MASgnœlJ\@%-$&455514%20*0?-;F3=J1?L2;K8=G52H/ !      
1497       &$)0&6!.& 9*;6-*A.+,*/'8,>6I9?5 65)31*:1 (5 9* A(?-%>+&6-#6+&**!)"(##&B9+60'3;*:-,0$+% 1(%+(& *-'03-3=,!D251"" #(&    "%#'" "*#++-!/(%' &2,7(+5!-7)/!'4.;#.5 /(         
1498 
1499
1500
1501  
1502
1503            
1504#,&)+*%*0,=;$" !$&%$-&05!<-*$0,%0*.*"1' ""0 &$#"!$*&"0   
1505      '8B!*G-%1$* ('+'!#')!*"   5)-K+)(37!?# 4!%s.Cs+!-"f-ŠfV[XS097  ' ' 0'(1(!"/    
1506 
1507
1508      
1509 
1510   
1511
1512
1513
1514
1515
1516 
1517
1518
1519       
1520         
1521        ( '.$165=-/&*-#09 0&0- $'"*(0.7-&%& &0("76&1/0447C1DG)28 )+'+ F?:G\C7QM:H?4JFPn<\_0\h*Yz/]hK==@#<_7fƒ)jw,NL+4$, .)"2.0"*%!'#'"&")-",(%#"%)+"%""&%!%")!#& !!#*($  $$')"& !$)'!!%4!5A4H1UbV€[]|KevRd{:IP@5C);;& /'.=*2:%*7$4:+25!(#& +7 07-?2?R<]],VI&3-/<G=WY*YO<KH(83&& %" !""#$ !$%.08FH_ykr—oJqN9" ,3$3<#7@!69"2?)6B03C,5D+3?+1<**1$    #            """"!!$$%!." 5)5A).>25'1E*"H8!J@%F:,BC-)?,"/(%&& )'2!#@&3.$B)'='%:+#1)$-%%"(6 2+/.+&0)(&&($$(,)!&*)*--"',(")++3%!!    
1522   ! %'*'$*'!%!)%($2+),#&+"# "&$     
1523   
1524 
1525
1526    
1527
1528  
1529
1530       ""4*4969$(7"!&!#&)$./31,?/@4%# 27 $#**%$%%1+(=*>&6"7-" 
1531
1532  9&&(%  -##2'!"%!*#"+#;%3$"#&*`D&Ek \,#‚mnb`]9=6
1533 #)5&   
1534 
1535   
1536 
1537
1538 
1539 
1540
1541         
1542
1543 
1544     
1545   
1546 
1547      !!
1548,+.,
1549'#))$%,0")4)$//-1"10-4#5'0"*'%-:H&;AAB.A5N$5O!&;$1!')#*.*;H%Y[7[_3LR FC;B!Yf=WXG3F9/:2.F78HS8NH1HN/9N3=I(G:*I07FS/Ec?cVHn3Xi_X:6&%-(#!,&"% #) -@%=H3B.5&+% $&' &&+$)(/(+$&$( "!! !&(%!##%#% ## "$!,0O)d4^.Ug-FLCN19=+88&!*.5D-69(2<'4>"35089;A<%,-A(AU=dSLi6LY3WfGXsKSdHSg:PY&46&( "%%* #''027YBVdSi@HT;;.($ *'8<(CO(FL'?I'>C,38-15)$/$)%)-   ! $ $%!#      
1550 
1551!
1552#! !(2&4340,5.0<..J2[<"eE-:K0!85-- )#&"7"9&4- 9$'A+;/%60#+,"%"!%/)9/=3&?< 3>&:!(-. (+',#'* -%$%   
1553    #,&#, .!)!1&!)1 ' %# 
1554
1555  
1556
1557
1558
1559
1560 
1561       ' -%  !#%().0'&6 %6%&,).'*.)#*+$#*%* %#$)$*)-!($!)+$)"%-2'5G=# "1"*    )&,&/$ & "-0$*:)#7k=*=Ak`\`>K4)  
1562 &"#')4+,($      
1563  
1564
1565    
1566
1567
1568 
1569 
1570     
1571       
1572       % !   %+!,14? '< $6%*%*4"6B)87)).*'%%''&./,"!( )>0=S.5G$%2%+3-!0%"$(-%%/ #/+9B7>ZNIwMUw?Ha2'H=,YW0b= =-)5(%//)65AG23=2$4*+5,;D3:7<J?5+.5&2R+=F3@IKhEJ`!:8 4D-.% "$2.6.A2>F$%6,/+2#)#'$ !,( /"(""$&""$%%  +"7%+F$/;8<3/:7BS (,%((5-073$614E0:H%14.0G5;O(1<+./F5=V>LF4F?;SONl]arHDRE172(, .*)+'+!62*+%648]JNrQIF,:%('/1(@D)HU*<N,9J+7H)<A'14$./%18%5<%  #  !    $ !% &* +*"&.+4.'5).:/1@1%M7$[B,@K3#=<*9!+(,$4)9($;' 9)7+&0)'*%""  #/*<96F'&D0&67%22+'!""%!&! &   #%&!   !$&$    
1573   
1574
1575 
1576     + $    1"( %)'##5)%0'%1/ !$!$##,&&* -+)1;"%'.(,!.3)%'8"($%/*8*3*()  "%  
1577
1578  )'L#-0#!.$3#)!.#  + %..61I6~o:A:Q?9E'/"  !"   
1579            
1580
1581
1582  
1583   
1584
1585
1586
1587
1588 
1589
1590 
1591       
1592   #& '"!!#-&*6+(."""!"%%*4-)@',:#%.%/%+$"/.2%-(,:1+?&.</6%).2C+4&&6#$/# +62K(/X-2Z'>C!&3!'C0/<!-)#*6/5)5B3:A!07)5.+<+,75Ob7ev!OG(88+0A87FSW`=JU21F'*0" ##  -)3 --###,''6%!" !"))$ "'&" $" &+**!/3&?7/00.))4%02*46:#]X.dR#14,+666K4BJ*45;7H=CE,JB/;B:BN3BJ9BIDG_[]qJIS<FS)JV'MC%-+%'-&/8$<<+K?<gRL|Y8W4 )%,&BH)GQ)>P,?J';?'49)3B*5>)3:'4C,6G'  #   
1593
1594
1595  " !   !#" '$&%(2!%.&(71(A4'F4)FA0=B<%9<#,)"43',)8#5$2& 6)#/''%$!$!$&&.)"8"%84"1=(,.('')")(0$2+     (!$"&"  
1596 
1597
1598 
1599
1600   
1601   # (*+/0   
1602#(+/!#!%+$"- +)7<<5;$>)  -*$9-((2 *!.""%)#6+4"#! -+" $"$% % &!       
1603
1604
1605 
1606 ! !! 71('.&$&%(',/%6A(    
1607 *3I@Tl@RE113(+/ &    
1608 & 
1609    
1610       
1611 
1612       
1613
1614     
1615     
1616   !
1617
1618   "#")  %)$3;/948 0-,";3**2*21".1$-/$+!%+$)1+$)(,0+9A''3&)6+&0&#1!"""'&0>,0>$-@##!$,,.*7".7'%5.9C)$8$02*&.0&9`,KM.N08O18J09[:ATK0H?"9/+;!<>-1&#%**0!!%&10"2-=2 *#/"!!!$!##  &%+ "!1.%5<);95/@.#(%#&',,++;0EVC=XP;N-<<$7<25EAL]3OI8<Q?b_?LS9GG;<F1;D76D>7AV:ZMMfBYi:`\>4K0/3!&*+)//398ZJKƒa\€cB\:$1%.)54*AO&6L&1;&,<%-;%'+'"'$!/#%*'#)).%       #"  
1619 
1620! &!!#("  $..('# &$(.#//4/(>9#>=+==*:75)31")#&55(2&"7&7'0*#-$!2$/")#!%$ %(%)*(-+%0*#3'3&,-(+-.*21)      
1621  ! ('%(  
1622
1623   
1624 
1625       
1626  #!"%!+" /%*)!.%"!!","(#!,"B"(5**6%+8(-&/0:?!*A+30! &!""     !1+ -! 6*>=!76 ( $'&"# *2%
1627 %"     $')&?B3FO90*4
1628
1629         
1630 
1631     
1632 
1633    
1634    !  
1635         ($ !(3(:02>+.1 ,/'(70&0(2G&26*)7#*:#1!),&(,.3A)(<,.%*&.-&,*%+,)'$&&$4*$/%" )""-!+&,$!*#%#(5*HJ 2="#.&,5"/5)-('&3"7!+!&, 91*  !##$(#'-817754/B974+0<C7E!+7 7D/j!RT=C!+( !%&&   !"" #)-?//>7#11$)02,1-'97-;?>?JF:9M8<2=6+'1+ )? 3F/H:,:N6QKAPGOW;OL76A4=?864;/6D:DLDXQA\F5</+."&*&,0,:8FdQX”lix[K`I+:?!FJ"EM(AM+:@$-0&"$% %""   "    !$ &""! %(& #%!&!)))($&%' +'3-832<,2<(3:(,10,+(!)&%!%'%"7!8&&)"9!6*1&",$",$'%# !"!#'%)(*"(*#+$/ /)'2/ &2,$$&  
1636     %  !
1637
1638
1639
1640
1641 
1642
1643
1644       
1645 
1646
1647  !&&# #""+) :(!'**185/1*-#, -!,))3)9.1.2J9LD/O,783;(0"2!!2!2&,# 3(("#'(..*     
1648 
1649 % !0+*8.+7*&$---&.=%   ' !54-+(6<1.1&  
1650
1651   
1652 
1653
1654
1655       
1656  
1657   
1658  
1659   
1660    #"
1661    0L;-  ! %!    "'  
1662 
1663 !0'59<%)9'50*=9%9;5(3-2;/=3)06".8(-468($4,)%%  5;(BN"18#59"54L@ MK#+ '*0++--204@4=3/$,+:M81E -.76! ()/+0"$&"&+%!!#!''#)%+)&3A ",'+'DZ-[o'w{-Ka*J_!1A$(/&)'1D&Y^=CYDEY/=J#(5'/(#(&*&*(! )!(&+.$#15"""'/,3',("@:)F9%=<2LP5MO6OS5TK.865NK-EA#?<&+(:#0'.=%8D?MHGfMu7QR4=K/;G'.2+04>8<==J;R[+cZ%A6"$,./7@[Ka|cdqRHeD1EB*AL.<G,8B'*6%"%!    " "$*! !"#(%'.#+*!&" 
1664 % ! ! !!$'!% !' '" (*(,+1'%;)0,5-0'-)&.-#0/ 7523+&"3"0*$"&+#2&*)'-"!'!( )!%("'-.)&/&!#,') %" !      
1665    
1666
1667
1668   
1669
1670   
1671        ""$(.",,'7',5%,)$"#**,0!46%4+*,.-0/0 2%"&# -/'4!6/957994:-2$14+':""-$  $!  
1672)* #( (#.''3(>+*?%'</%>55:<8! *0) D3 .8:6 @90 $        !!(!)))(=&!  '"!      
1673  
1674  
1675    
1676
1677
1678   
1679  
1680  
1681 
1682 
1683    L:8nO <' K\ UXxœ!s‚'j^vxFP
1684   "!! 
1685
1686 
1687
1688
1689  !"%*?3.6+9K/AD-?E-%6.'3-)>. 3)%0*&3%"4+*"+7&,$%'("26/=.:N03N(-M12W.%2 ' -'#)# .'%3$'4+<X,FT!SO!9>;'/$)<!+?# '")-7-3*..7 #$38)7+/$%',&DECF$JM7&;LAiG-M?)G-,4#&4'$-2>];KY;GH;=Q$'*"1(-.0 /7 %2(.!LPGDGD%-."0-)%8@"($.+/25D:'`Z*`J+>A<TX7VT=ooL[bIL\DHZ;OL;FU@b`=<I*#0 % %)+6!4J(?`EfRCQ;1<:/:,'0*%-2).6&2?4FI@f>BS&))(81GdQaŒ`]cOIcL6dR-MC)29'++$#!$"#%         %(    ""$&)+/$%+!%$"  ) #
1690#"' %" #"#$  ()+!*.$*0)+,%-0 &1'%/'0-'/-$#0%"&('"%( ("%&$$)## ( )%'%! "        
1691     $"       
1692 
1693 
1694
1695   
1696     " '%("$%,'/.,(1%%,-*5%#2(3@(0*!$&-'9 78/7!-/!#($&5**;APB -S$%8+/+-1<-#0+.1.'%2!',$ $ )   ) 
1697   ,/#H,"U,&-( &.*$.-!,*&$#$/.*\)&1%"5%-,#   6
1698/
1699   '! &-. 0(& 1&.! & 
1700 
1701
1702
1703 
1704
1705  
1706   
1707
1708   
1709 
1710     
1711
1712    
1713 * 82Y@x13EP$PJSq<iU:VF@xX!]6 
1714      
1715    (",) %+035*+6<':;1B210"'/(!$%#"$) #0& "* ",*,-3,'4-$/54=+$10*518F!9K484G'!($(,%!.95?9U^4D['CR CT 19!';(/%:!'; +<#-=%"(>%8M64-.15+1+1!.<*,@5Kl(BP0@T:?P&ME&MQ;8++FI+V`@G]<\„<ht(=E,.!')#&$#3$#(#$,.*8@/3@3N`/IQ&WU'ki i^%6?#,,!8>9FXHNc\Wt;ncJ`hMjpXLbdYuJ;QQJ^J?VJbf[J_B2@*!#! "#!,/&.C%<K-:2<;.@8&,0"-)&'(%('/),=27D12(0-);9I|_b“fOcBK]G<XG668+5;#'$%&/2/3!-0          # 
1716   #"(#((&$$!#+)  - ($%%! &#! 0&4076%18%)2!2# $()%!(,#&")40!+"+& %  "! $ %)!!-%              
1717 
1718  
1719      
1720 .:3 ? ,"(2 +  3 $D $* "     '%(*$*  !')!)!+&'80.;!5#)#" ! * %43(2@"5D$5;-<)"# .,#)8#+%"#$$%%2(,.7=))!*7':#*'"&" 1%&"()+5%        $#*3%-N,>6),05-9 (/H,$%3 (/'"6''/: ",0''5 " "!" 4"*(2+7:-
1721      
1722     
1723 
1724 
1725  
1726 
1727     
1728
1729
1730   
1731  
1732  
1733  
1734  ";-C($0><DT3    
1735
1736
1737        !#00")4$,/1 &'$*%+8&5$*4"6LA659*5 &+%%#!"#%'&+-3!2-+;A+OJ>:*0@*2;.+3%-(& -#%(&5<1Ja?';3&54$14-; *9-.') '#$-"+6 "''3#4+8G!FL.= 77.2&>H3bf8Na-ci-Ya->[/]k1tˆ!CL'/M3=\<JZ=J[Iaz4dc$4?/2;70.@901 .>(*9+%.2*=7:D25HENqAd‰6`u>4;3& B1&T9'*6)M*?^5H`F[_Ph[QaWBQZpwEfaB:RGK\S:PS9C?'"" !*%/:%(1//;04B3=D./4",2#41-.&1+(1..1.+=80F=W€kl²xMeI?P:@B1.("'%'%#" #- !+ !)"*       "  "  $ %+-"  , &$,$&# (* ""$1#/518&.7))5*-.!*/#-,/.0&7#=%9+7,:(B)/,-##""  #% $)       
1738 
1739   
1740      6 );   -0C8;4E#5<^8IM9F,9 +)%,(#
1741 # #&-),3(5"9#' -%)) "!' !(++$"-#*% )-*30!H?$=L":# " #%$/42"!##*&"'5%$())&&-#! )%/'&2&)#)  "! !
1742 8?-P N19 1 # 4
1743+8 $6 5; Z$41#HF+G(#7&,/")%"556G':B#"#!0!1&"  
1744 
1745
1746  
1747    
1748 
1749
1750           
1751 
1752
1753  
1754*,  
1755 
1756  
1757 
1758
1759 
1760  #&(%!+$!".(8#.9@76:!6:(?@%#06'8.C>+8@')/$&+%%$$*-'16+:G2[m5Fe-CX.P](`w 0>27CF=6#)!+449V9>E!36##,.1 .4""3/3") )03 !&&83 +-):?3XX/<L$Yq,Ug#+::2S=&:7,DHNx6]q9Y|;_€AFY*QU/?L1Mj26_=IySH„8F\%57(b_,rj0tg+XQ IA%:<04!57/AL/]]7T[Lb…Db†7bw'lw$cO$GD6;E.+(#-/?I?PSO^Y]U^[`jP_m`dlaj{>ISFKZIKa:KE(5-*!-'$ #"##-$)5$*4,0>81A+5@$28%59*97+44)91+9..764E@]rf|šyV[A;Y>2<)"!".,-&%"        !    
1761    "!!!!*+'!   / %%'$+!%"'."3-" "&'&,&,#+1((1&(,"&2",+#7*D7N= F<77&,..)"%$!!"$"#&'! 
1762 !&$%$)" $#.! !               
1763    " ! '!#)"* 3,4<IK$Ab5>Q6JX+hnL1dEE9**%$3#- ! '/)B4<@$-)+ &! 2%-H<J(H,5!9=34\&'S5-2'!- #$'-)6)81!!!( ))%! *"#*!*)$4- #*#! '  ""$  .A0A .A9 &&("%; ( %)"%-(#K/1OB":N-FB+9@?["?V'<<-2"<F->(*# $#$ 3  
1764  
1765    
1766          
1767      
1768
1769      %   
1770   . ()=K;6Q> ) 
1771   
1772    
1773    #*-B269#>D'DP<<U0AS.J>5 )$,*-*<<'2-&2$$0' )&' 1/.+3:3GL8@:0=;AR=Kk<5Z <O&D[39d'5G,8((>47E(4(!1@$DK"$+#*!/F1;('!!*(&0;$DX(=I$7E;7^5(H36HD-G1.7,3:)$%%.+4B;K:.;F6O@F\4Dc1)=,'?3"18&6;+?B2B/897yqUr‚Kz‡I~˜7rw,<D ;<%<H,FY:Ba?MgBJfFBdKTvFd€Mit>MO>JC/,4485=NKJ_Ka^UMbXDdYHfdYxw_sW`b>@ED/HFMr:fl$OC#GCB@HH822149"5A$?G.BG+@F/=>*98297116.84*=4-:2;THe‘rz›uVmD:b?2-##&/-*          
1774
1775  
1776   "#*%""%$ 
1777% 1 ($, ,#/)6#4)4/1/%+#*##'$(*!'+#!-$((#&+!,++2%42)95/20,+)3'!#"!# # !)(!#%$##!"'&"!        !    
1778   
1779  "" )>%'FA)(X=68I<J?+XS#<^(>'87+J,.g09#.400 A$))*) -).$&
1780! 5E="0O*:,) $-(8/*#"%),) 2$"%&/&)  !(%)#&$+&7-&2! 6!*#-.#   " !&*%#   '%%!'&    A%Gi*KX1<a.*R15)"9#,9+*/@#A. ('"$; ,47#?  #  
1781    
1782   
1783 
1784
1785  
1786
1787   
1788 
1789
1790
1791 
1792
1793      
1794       
1795# , '   
1796 $!3$!+)&3B    
1797
1798 
1799      +.## +$/-3<$3b*/C!@F1/9>>>>;@A2I;KUEN(%72//!*.#$, 1/"!(&#*'%$ '22;,<O,=G><J3GP'6D,'A/8:0ES+6D ?D(8?&/0(+43-(;,>J (71#)&%9"2@",,2 IN-RZ-WT+JR,"0/:=([Z.EF"%,%.3(*"&%$6.#4%*933?50<2?J 38.0)42;&5<(63<P^YR|^z•[Q|TDl:>G/W`3i{5mw:Zl>FN<@P4DN?KcQhXg{Sdl?M_4BH0>L:GWPY_UX\D@L@Tf>?KQ6Je/RkLfPRW617: 6Y@ZSbtEov8=K46H5=P+KO(=?'9>):F4BN7?M8BF+7=.,0-.-)+).4:,<:=p[d¡€x«vU‹W;a:-#!#         
1800
1801 
1802     ""&$'''! #$ ("   ) %%-$3*+*#/(.2$0'*))#)&&#"%$+)!*&!$"#%!%#&*$,*$4+&5*'2"%D"".# '
1803&+4+%%#%              
1804 
1805
1806
1807 
1808
1809
1810"5 , >(8\!3O9%7=*+)/B-8>3 7<("-0>@.2]+JKLBP0/O#;;/=A"6H 7   
18110% 4%*%2%*#.:"6."('!*1=!%(4A7!;#,(&0.02%'($,#0$C$(9+-7''&4&.-102 #.!/1 )45) !&!     
1812
1813
1814&'   #/   !+  3&< "# ##!9?/>=AI;!D->?#3/"-/2#,5 *'4 8#)'%)%% . .  
1815
1816    
1817    
1818    
1819
1820
1821  
1822
1823 
1824 
1825
1826
1827    
1828 
1829    !
1830  !    
1831   #"   (#$)#'2;<NW>?*168/0(!/4GZ,Pn37N37B:@U<J[-OQ%V]$,6-*1:#&;98&("$'44%*8 .$0)470Se0IF-[d0J`*:A%5:"/B,5@);L*Oo'O^TRCO q`'u(?@ BL%I\VT%2<(&993=C!2C/He;_y8BZ.,; .6=b}CUy"&+4?".<)%5@%ZO"** -'"0)0983D'&4$*.,7&-?&38-6C@4O@5WL.@=9H5@F9eyGAbHnŒGx“<v5v…6n†8v‚J{†ORqOuƒMn€<OZ8H[CQ^\XkUNcFDR6Za6CL6<=2")L+AS5A:%1#*7AHL\N^og•Pmt8FKC:C;JT6SQ+KD08=:8D:AF7>D67>),1&+(&6/,/,356Nfdv¨‚‚›vb`D?3 ""+/,&    
1832    
1833  "#$! ( #
1834))'()'()(,#."'*(/(%'- %$#  & $%+$/%7"7( :&(3#(( % )35!5$!%    
1835              ! $
1836"" '#( "(4)<+(%*#$3+51.-$G<(B%3+".D$84-?@$BB.C3"@1)?5+",(, *$. *0.9$3*#0!0-""#&9 66>+0O&=8MN%Wd*AY&5M",E!2< 3@.5.;B71\ $9+0.?3-='*7,0!#-'$  *$!") )$   
1837 
1838 
1839
1840
1841     
1842  
1843  
1844  ;'+G@- .W "#=( 5J(:$-;0F9-0!A*5'$3H$/P>G"H%-'/!!))  (' )'$#   
1845        
1846 
1847
1848
1849
1850 
1851        
1852
1853 
1854           
1855 
1856 
1857 #2      # #$!&!&&+./$/90VZ6dq+a^!I^"<K [Y;bhCKZ/CQ7BM7Xb;Ij;;`90F$7A$*0(*4 .>(HM3K7= 99, 1#' /+40Yd<v†6w<cl08J,[l+Zh#1D+`Y4ZX<Xi8Zu3Sk5FoKZ‡LQq&66;l„12Z40<'#2 b_(T`#GL.gp5cmD[u.DK&;I1?XREa24= 7>)=G82$(,3<R}6V` 13'."<P3OZ-59&-4#"0''2*(5,,5,+9-*7/)5(!.0$260LD:OGKoTWRKvUX{S;eP<fTV}SasPRi`RiUTkG\bBEZ^WpZM`DXfLSpBX_3[[(FB)987HP-6@'"27BML?McJ^hWtJan3JU@T]EUZIHW4HO5PS9PI:5?.34-54+H7&54$//(<6J\T{Œwxy_`dF;)$$2-3--+("!$$(
1858    !  
1859  %&     % %'#%- 0'/!) (*,0-7#3 *#"!#&'# $4'9$:# 4&7#7"(*%!(  %)$""        
1860 
1861
1862
1863 
1864  '#  5-2*-)1 1%-,;%1#.%#+#.(6D'&P=5*%(*/!)(,3#,&'#%1+,')/' "+ /-'*,"-"%
1865%?00X/K/$:%2?*,J#MB,;a@EH?,Q. 4+3#$#,+3"&7$()#*08'/(1/.8"960%9$)0'/3$07*,$*'%%'     
1866
1867
1868   
1869    
1870
1871 &'-2**A) ,5',("D+#+()#$&(&))+')-+,-;),9 80,+9 
1872 .%"1(% +  
1873 
1874 
1875  
1876   
1877
1878 
1879
1880
1881
1882
1883 
1884  
1885   
1886   
1887
1888
1889 
1890  
1891        
1892        #"$*2#0%"!"/0(DE;8TC<dI;`67K9?PDRlIe{:Y[7EV9Se>[h6<K-.7)(6#=D"Fh!@K)N}/\c)FF(UU#3D2837!?H.LaEToU5SSW}>Eb0QaJf}:N])TZFar@V}=Sn?=[65L82EJ:Q/!+1NvCXr%(3$ +$pqEhx8;Q9OvM\vCJ`=JU0Oa2<Q7/@6,<#(<+"3-1Q=J0;).9D5P0>R$-B#*8;Aa90?*7A!'5"&-"!*)%1&-8(,3#.4(18%67'4809@;2DB1KA/DG2SECT6=EA7SLPdQ^sOuXq{Uk‚KJ]T@[QJfHYjJ]jRNkZYzFS\:IV5IY1MR"2.3/7?39BISSK[`YsO`rImwLZiC6<@3CFJWD8E4012<32K>7MH0UB+M7+GBGuYdwYdC>EQ8)&"%$/.&=@'A<6- -.,24=9C99%"  !
1893  
1894
1895   !    "!# $   -(&(((!&!''",0- *7#&3 &)-".8'8 3 %4$;&/' 5(#J%!N496%9)'-%#    #   #!"
1896!%     
1897           !   #$% "$('1($!+#.-)(  &1,!#2(/%'2-+9-0039"'$# . #,)&-1$"6*2?373EC!.*)>-/3& #* ) -*,"% +$,/&.4A100+87%'%"#*!4(,7$'<1: 2<,C.? '5..# %&&("%).""73++#". 
1898 
1899 
1900 
1901   
1902 
1903
1904 
1905  
1906 &O',((1 "4"$&# *$ #. ! "%11%$2!1:'1#    
1907   #  
1908 
1909
1910 
1911  
1912 
1913 
1914
1915
1916
1917
1918
1919
1920    
1921 
1922      
1923
1924   
1925 
1926
1927
1928
1929
1930  
1931   
1932 ';-K9 0        %!#2#)%$#*1*-*:/707#',&)-+@>$CW1>V.9H70F5 80(<<*MC-JLQo;Ml6IeAHc=DU(HG&B:#JQ,FS/R^(WY?•µB‰¦Fr“9H[$MH"LZ$NV-.3:4E8DD6CJE>S:foCf†I9a=_K`’NLa@=Y@]k)_b)my+OT(!%"6B@$>4%- '*Id\Cv=2R2-<K*BK7L<,F6=R6,>)+#&# &"#,,<%);+= !/,3A*09&1%$1-.#,'+##%#!&%*")$"1(%6+$51+>+:@'9;+$.'%2-4G1BU'CP:ZtXz_r›ahŒW[}QJ]97IENXKNjOcvMYeUK\YMbE9RKH^Hri2ea(fd2TM>NYAZeOBYV=KX=Z]J_<7G07:@4B:67.:71GC5BC>AB=FD3?B?BAP|aZsQ=>(2)+!)09A!EK%CH)>D&DA#>A+.#)$,!1B@D>?=A<7  
1933         !        !"$'(%"#*"/)$#+/")$')))5#)+'(& (&40 ."$.!-&&)'0,"'/%" "'&&) ,& 
1934
1935 
1936
1937      
1938
1939  %" !  ) )""%!%!!#2C(4B)#3,.&( %(,+$2)0),#/4)-3&,C7'8,#$F&!**($-  $3!2!,)"(+. 332@&9"9,#)5!80#1D5B-;<7)58!(.5!!'$+!"%'% !#-'('             "/ 
1940 +)! #   (' #!" "
1941  
1942                  
1943  
1944 
1945
1946
1947     
1948
1949
1950          
1951     
1952
1953 
1954
1955  
19562$=2D<_6   "# $!'!')%(*)#.'(0+*FH#3O.%?7-=4&>,"2!"+*!.%$+/.@Ih’Eiy<^x:]†9Uu<‹°;„¤8Mi4pŠ<¾ÈPoˆˆv lKuY8L1QZ7Ta>Qg2Q_'M^)Y8Y6g€6RuR;[G)A:4F`U~OTv;k…Ak…C`yIS|KCg.%5'+&4@ (%/@BMX>P]-[Z+QR3:A0;?+;E1?< .3*+")+6,6",%!+)%'(0"/D "8!'! !!$!'$,)-(.60BQ/0@ $"(:A5K[6Sa=;V\>[hCeY;ZQ6[JRq9?J5?QHB[[Wf]ShNIYH:UEFV;<SOUkIizLt…Iq@gc?YfCEJ86@?=@E;<6.80;F4??->>->;45773::33534887>SGXa[„U1L1#)#''0$6D,9M.AL*-9*1;';>>? 99#8:&9I)9G-9R/HW+
1957    #" #" !#"&   &! !#"'05!)""*#%"$+&-%1$)& ,'."<5)7""+"&2">$":+)    %#$+%'  
1958   
1959    
1960     ! 0!-+/#'%&#$(&,+3,?6+B(7?4FB!-%%*)    &*$',!.,!.$$"*5.8%,9"*$#(!'/!4)($!%"23&&<#%)*##2##%%*1/4'-:$/&'$'$-',"$9/"%! "   !%&,   
1961
1962    
1963
1964
1965 
1966  
1967   
1968    !!   " !    !  
1969  
1970
1971
1972 
1973
1974    
1975  
1976
1977
1978
1979
1980
1981 
1982
1983   
1984        
1985
1986
1987
1988
1989
1990
1991 
1992
1993
1994       
1995.*,<"#"!   #."/0" $&"+7&- "23)*%%#26#,0-+"-$*''+10>Oq\~ER‚6x¢>YzMw’–{¬tq™A€¨o Ô˜M|Y\j_^vE?_0XuAnƒBt†@[nACV6[u3NiOmtWHX;9A.LJ`n2b;Mp8c†L[pPBgL:FCA52G:,%36&'2>PI\xPWwOZo<N_-JW-HT.EX,6J(%67E!/; .@!%1!$/$+&/ 0:#!*'!  $*.&*#-3&8B,BY00D#""!>S@‚–Aq}@PS>:G>+9<&51->@8VGfu;ov41@B;ONGZKEV5;>?;T<@NA2GPQoZo†am{Y[lD]nAck2WS09?60=*-1+0=7:C7@M?VV0KF5jP+9.((%-&)7?C^whg€a6I2!!").)5=+4=$09#,5$7:(7F%:F%:B)2@%3>-6E2DW:
1996       &$!) !"!!''&!-. ,)/$   , #%#"+#*#&)#,&"#!&%''(#02""'%I?*?.%W&"B+2"*!)!'" #%    "&(    
1997
1998    
1999 
2000
2001  '$#$-$3*(")/( / *)"),,/8 *?+8260(@-6=)614?5#06B+*2#%$% &* +&!)*)'6&;,'52;C$3H#):)"$+*' -(  $ /+".((3*$(1*C1#$+&*7%2*'(" %&&&0%#.506,5 ' ! ""#!!'#   $$+% $!  #         '       "     %   
2002
2003  
2004   
2005    
2006  
2007
2008
2009
2010
2011  
2012
2013 
2014     
2015
2016  
2017   
2018 
2019 
2020
2021
2022 
2023 
2024  B= YO:# 
2025 
2026
202770K;ESR>5" 
2028  !"%!'#.0"0&&&'3:$:L"=E35=Hiv_]:8;>71MJ=L9DRRz‘RW£aW`Ÿ¡JW‚ƒ`t‚[pBl}HGhD9A1DMR`†X\{\i…>Ž3|„0JZH„•Z“5n†'Ut36pI+NL+5=GPT-C;-.-131LU-MP%" +-7$>WDGi[=TZ=_M8P9K\9?S78O5?O(7?.9.7B(/9'.9#(0#*3(0$(%#" $ #&&!0?!7>#>@.5@2+=*0@37()!-;ZH{h}«QcŠ5CR)74",2",0)@OH_|RXw>AM,BP9@F@2F48M1N[?AS--@=<XTrŠ^h‰\p~MyOƒ˜Hdr9;B/6<)LK+YQ.IF9afBTZBNMIQT;/.".$"$"103XdWfhY;H8#"#&3-!-2&0<-:D#3<!0;&/=+49,9C)9@(3;$+<'4C1EV:   
2029    # " "%&#$  #%5)*2"3#*+#   # #&%"#)-#+*+26+!#"$"'"&!&1!. @"M,k+%p1(UA 8:$%7-$!!  
2030
2031  "        
2032     
2033   "!#"#&)",&!')"./*;!4#&!$%"&$)&,/1&261B'%<//-0:6'IO'*b:*=-89&%A'#-",*0**2#2#6$0.+0,'0$%9-&8)-0"0=#4) # !+)=',-!!,'$**!"(()#%,,'**:0&&<+(.$0$(!*'(22#),#' 19-( !%/$ & 
2034
2035 
2036    "    
2037     
2038
2039
2040
2041
2042
2043  
2044 
2045 
2046
2047
2048    
2049     
2050
2051  
2052     
2053    
2054
2055
2056 
2057     
2058      6#J"@4H ( Q7/!(*:7C H1) / 
2059 
2060  # ),$/*)21F!0/+'&+ 3B1*@54S4Ne*Uf:TdFKn<mŽ2M`/p^)e[-mpBvŒl‰FVeYl¨{p“Pb~OYnLg}L‰”6jc2mmCa€Ya†QRkdfŠ|ZyMNM:R[kdgGjk9Ul+6E+>S&D@%4;7SH,:> 59*4F6@D'% #!!-<!:O56R5?M9AP;1<69N>8F60A5,>49P(?F.+:.1A,0%$&.)!-    "*!16(-!$(939T8GV4DK.FJ/7D1I^!LUNU8EQW>Uh@[C0K/K^$IQ#?D+2JB:_ZX~>]m7Tq;gw5@M13A5/B;2I.4D)DQJj‘V†™Y’®VޤZm…\n…<ln/u<G–š=inI‹Ti|LQaM;F<,+$,( 0%$=5ImMQcG2</!%&0"*9.0#08*BK$:>%8?*8@+2;*/<*,5+(8"17+5C9RkD  
2061    "$#-$#
2062$ %/).2"! '!-#'-#+ 
2063  !  #'  '%) +* +%("&("2;#S!(a* q=)UI00:5##:*(%# 
2064 "  $!#$#("'"$    
2065  
2066 
2067  
2068  
2069         "'/%65=6):$00$01!&(%)1.#,3")2'"!<0,4%-$$5*,.8!;I&/# )+)"($#$ ',#1'$9(03$%353<-;6!(#  /%6+  !#*-)* $1/$!;(<3!7, *! 4"(6".30.!# #& . *1$&!!"/ +#2
2070%
2071&$)"  
2072 
2073  
2074  
2075
2076
2077   
2078      
2079     
2080        
2081
2082 
2083
2084   
2085        
2086
2087 
2088 
2089    
2090
2091        J8 tyG=&O6&Q.2.+:/,8-3!3 " '!"%#!"!&    
2092
2093 &15)8-1"*5)MT$HX2; )4)$'#0*.AUiFMaB.HKAYV`wIu\‰µZ¥ÌUtwge•^bzB?MtPiTo‰>žœC~™]Drn=}`]Œ`aFcwJ^‚<\jX_c;sb(i\:WcFgœ;;Z+,4!A>1\j20S.0@1BV1Sm&7K,Lb,JF&,6!$7)3@)4@-EX3GX5EU?CR.9K'>F.:D08D41:&1**# $!! ##" $!38$48)*&.&3>@UGIW:HP3GI/:F5JX@Yk6P_6?N<6F.)641A@U`/7I'/3%7D+JIFkIUuKZs?Qj+BK0LX-TV&>T/dvHz‹Z’¸gŸÄj—¸`”­T¤U¥Ç\±Ôb ¹g’·\– Xƒ—]KdNDN>22013"<1#A4/QAKtXJiH.62*/)--8%;4"9:)AK,-6%+316@*=A)9<&++"!#!*736K<BcL 
2094 
2095
2096   "#&!% $&$((% ""%( %  # &$!!)' $A!>+R!'W,f:-KC5!15##7") 
2097  *# 1'+6!:-)$%  
2098    
2099       
2100  
2101  
2102    !# $* 5/42!':++3!'4%2+&4-193<&%82'!+,7'8!(7'!-E.CW!PS',V =<<E>GAN?P# ?$&%#!! "  )/#0! 3-@C&T4$1*$)A%( !$( %%.&2  %# -  " +,& !'$!  
2103  
2104
2105 
2106 
2107
2108 
2109 
2110 
2111
2112
2113
2114 
2115 
2116   
2117 
2118
2119  
2120
2121     
2122      
2123 
2124
2125
2126
2127
2128
2129 
2130
2131    
2132   
2133
2134      
2135
2136
2137
2138
2139
2140
2141
2142
2143 
2144 9]@EbtBYHANE^n>0V-Q2'#*'( ! '(   $-)#%+$.-.(!
2145%#-* " !* (1-8=@(UlBBX9&?$%3*'6IH1X7"+'=G<KoBWxeŽ‹†|†„˜–Naxe[{Iit1HmKGbi†¯n5mY(=B\gX[cgP[MIY<Rf;^~3p‘KˆžS†ŽAxˆChRVŠ&Og+|€5L^FIT0E?,CW>OY;DK'+B:6"#&$*)6'%12,<7"5@%@A#9,+)05$;3*05'"!"  #*%!'%#")8)5=(7A***1,<F<OI=VED[3>N55KE8ZAI^46E)5B$5;**5<0H;-;!$!"+1,=A<UDLiJ^5\q;Ul<]r7au@v—VŠŸatœi^˜gn£k¯ksŸfr­w‡¾tƒ¹w„·q£Ên†£Q^d?WT2KE'23,A@0J=9XGN^KsL*74(,26B=$;:+;G0CI-7?")(&%(*&3,28)*.!%"28*BM;DYF
2146
2147      "!   ! $ #$ %%# '& !$!16#\$&^._4k8)?I0*)/@3*(!!4 /; :7:;+9.+41+F#$5'$*'$1##
2148
2149   
2150  
2151  
2152 
2153     
2154 "%!(#)#)#"(&0&.6,"5#/##** !//,.(&2)60%38.7; &(%'+"2323+@8;BC.ISB?&6R)/N+*L6-C9&9.# #.  
2155 )"2*#40=B)/GG&'#
2156"&   
2157 %"!'        
2158          
2159
2160
2161  
2162
2163
2164     
2165
2166 
2167 
2168
2169 "   
2170 
2171
2172    "  
2173
2174  
2175
2176 
2177 
2178  
2179          
2180
2181    
2182 
2183 
2184
2185 < K$K K@Mab^mA8]=A-'*  5/&!"!!$ ##$$$(0'0="0;%/) "%-9E$8&"43+CJ5U:4!$ "-%3,`X&<R!?@+@E/Q_E‘‡tu¬nвbs“<?dL3GA+:5/LZ4^|-0+((1H7EPaz6Wi5U„3Ej9Gbbz™†o˜g`„L<g5_q?jVlŒSITOX~BR{.dq/Vr>Kb(7D ")%-3+<#."#"$&"%* " %#!"%$/%)"(((,!3(/:/8"(02):8'2?-A7=A72<316C6K::L,BO*3?$(0, ,/(5 '*&'040<&0@7CWERmIb…FUmB;\LQuKgapœ[Œ–TerREiVPzUOkNJn`w¥fx›f³w Çr¥ÅQœ­F‡—B Ÿ0fZ,XJ5J>AeW\…`TpP->/!75";A5LJ-<8)>F2>@*/3((*!"!()'.('..2#49-4B5<K2
2186
2187        
2188#% !    -%"*!))"$?G%h&&g:$_:*a>+>?3B'4K)37 %(-=,@R&ES2A\.<K/2D*.>()92(81"0#&.',-+ !-&   
2189  
2190   
2191         ' '+'# #*)5'4) (53/%:(%2%5%3/ )=)&/+#/+!,.+E7>()',-8*77&"%)740:959,/@(0C&+8)4+2 *       $$ !**(4)F15HEC- ,!+""      
2192
2193
2194!    
2195
2196 
2197 
2198 
2199
2200
2201
2202
2203   
2204   
2205 
2206     
2207 
2208
2209
2210
2211
2212 
2213    
2214 
2215 
2216    
2217    
2218 
2219
2220
2221   
2222  
2223     
2224  
2225   
2226  
2227      *1K9ybZ›Ge…3r!Ez Jehn(†$meˆƒ`u8(##!$-'&&'-$'/, "("$$&-*B "2)2+AJ129#!*&%1<F:#\T>N_0IG*UV5lkXo „o–qd‹iyOP[39;(<I!AK."7. " +F!%).FQFR`H1EC;>;HVH;\jRt]Hi?CM3GeZQa_UfWC^BadQJ_@"?<&.=%57+",'"%0!!+"#    '!$!,114'3=,7<$2< /5%.6'07-5F7DT3]i3`f6S[4C[2@M$658?!8C-COCE6A!6O%BV,PZ9JfIOiHH\5GR6D[MHgR\~YnŽOZ|:I[9N^8Vm5czHe€Yh“Ylšq‘Áw•¿hÑeŸÁe¥Ë[¤¿A£¢BŠN{g]z_FD;3+*$5>.RL2CI3CE+IG3><''%! "%)* 21#%)'7H3MU3>K5:D: 
2228  %  !    %-'! $      ?W%i+i8%[4.J8'L12M,)H8 791$&).<:4J99N<7ID>JB7J:?=17B)1G/:2*494<!8;>A(Q(- *#!" 
2229    
2230 
2231    
2232      $ 1)(;$%#!"!&."8",+D-=T+F6&."/#- (2$4%* 0*,*"0 54!(+#)*&0"2%"3##-& &$$ ,"-5/  
2233
2234 %%/&-K/K"<2,"4!") $%'?$A   #
2235        
2236
2237
2238
2239 
2240 
2241
2242  
2243
2244
2245
2246    
2247   
2248 
2249 
2250         
2251
2252
2253   
2254
2255          
2256  
2257
2258
2259       
2260       
2261   #'YY†d eT!BM/PJ`fP;UDqlA7;e`}‰ma—‚¨c‹©0'] ')3*#$$&""$(%#%-/%.(&!(":C56G6B37B:=T&0P4*HI@H<>Q3uBx|TLZkPsZ\„Vb‰bJv5,E,.C46@/%=3M$ .&3/%(F>6L;6I&LT,H\8>N80AK&5,>B#BOA:I<3J<5L9#B=)3*<8)0! &#!%'& " #!$$.*,=?,HT0GT-CJ*-3&/3!)8'6F,>H67LME][VxNi{8VW.FY-CX)@R+1C02A/=Q*=J,AP,HW4Ob5QgCZrC^v7Rh4N]<GWL;YPKoSSj>Ke6La?Rb<ZvLfJ_€HJwe`—prŸo„´s»v~»vÆtµé`®Å[‘œe‹o>\V&G;*NK:mp>dj1HJ4>G236%A=56G=!02'./$ ',.AK>WCDZ3>V;       ! $"!    '+!%+ %!""        G\#k0l9'[:)H9);+)D+!D:-;99,/-8%6A I7 0<44(/76?4A?*9R)<F5?J)9N/3N4,D/'8(*=4(9,.!$&+-      
2262       
2263%%'$-$*&"(+)1)).1+.3 9 ,4*:<E72P>/<$%6",*!!  '"" $//$#*%*"=+""'$ %
2264
2265  B1* G1#,!(#+.(7 #$ ,) 22/       
2266     
2267           
2268
2269
2270 
2271               
2272  " !    
2273   
2274 
2275  
2276
2277
2278     
2279  
2280
2281 
2282
2283  
2284
2285 +G(N+<l8\XCZBRD@%TGEB:0L>^3cA9VrFsZ„m &‘8H’NL9XnhEDZ[‚'F„. B#$"%' $/. 4"("*(%+6:>M.IP-AK*9B%Ta*/?,03&76%ON0)?98_gReNCm;4R9;SFGSQ8M59<" )&":0-*&G=%5@XLEN'AR(0F0;K-DY97G2*802&#-'6P5Ec,2>*$)%+%"''+A%#' $#&- #,&!"   # ),(+"68"#,*0=839E7<2B3=D!8A'GN3[^8Ua2HL74@O.HW7TUPk5UW2AP3DT.=H(6A+4D.6L-L\2ET;A];@WAAYEOaBF`;CZ9BQ32D82GB8E?I^J\hEZfG]eKJbCD^>ASBJbNbbn—fr’dU‚]r›y™Ä|›Æq—ºi›K?“ž:•’D|M€8WU38<+>F0ac0fi5‡€,HF(6E$>:'*0=2@>>N72D;
2286 
2287 
2288 !)!"&&  ) '",&.&%0#-"%! 
2289 
2290   
2291  )"0 .$%2"FM(c.$n:(P8+72,2#'A#"?5.645).)"(!5!05 +2 "(7"06 7=$BL59Q3:J6(H=';2#7.)(-'4-2$$*&.#+"#"
2292   
2293   
2294   
2295
2296   
2297  #'2#5;0<%:8**A';#,6"3>#-D 1/)6418%6D$7E-1C(%4%*)"   
2298 !%!&!"$&  &)   
2299! ' +  1$ +( #'* "!$&+"! 2)'#$                    
2300  
2301
2302   
2303   
2304 
2305 
2306
2307
2308  
2309     
2310   
2311
2312 $$/ *$       
2313  
2314
2315 
2316
2317
2318  
2319 
2320  
2321 
2322
2323
2324  
2325 
2326 
2327A&‹‘ >m{.874%3?!6;9Q9Ij9Lg4Be=zR-“š3SpSKViSNhE7`HD%1K$5O$$<))b+-K!(( ! .,
2328)" ! +-!+'",&$-0$0.,KS.:L09<2dk;Uk!(7-2)-;0# ',>XN>2G5&3&;:.6J5.8/ ,' $!/(?1Sp<Pp1Dd4CV(B_)1D*Sf2U^9Uk,/K$'5#)>-/6/?!.#!#.'!( 
2329      $"$5'9E*CL%$&!+ +(1&202H3CRD>SMAVFXf0AE'/4.+:AO\Jhs3Zg7bl3IW(=M&;J&@O+;J7M`7]`3NN8AO<:H;6K6:I81D+16!".,1@3KWIToRauDTbCH]<Q[0\d3X^?^rOb{R^wEWnJk“n–»~–Áq•·uœ´X„–Yw£h‚²^œ±]˜žH‡Ž5y{0igCqˆQ‡•Sv?Ma$@M/[e&PP+DJ9Ue2UX1   
2330 %$')#$ $!# ( 22'%,* %!# &((+$
2331  
2332
2333 
2334  
2335   ""&"&1+0$)3<'6(M#_( j5-S<(02&-%@B0)46+(+-+&%4!(!#7(;E!9L%@A(:L!<C//K1);480*+%&'1-( "% "(--#!,(       
2336   
2337       !")'&$*$99"2A'5?!.>!0;&1@';?!=H$6H*2A&B)'%%' 
2338     
2339  ' +$ *1#-&,3)%9*   " '%!!)" ! $&*-+$ !)$4'(5$'#(+!!  
2340
2341    
2342        !
2343 &
2344
2345 
2346
2347   
2348
2349 
2350 
2351  
2352
2353 
2354
2355
2356
2357
2358
2359 
2360   
2361  
2362
2363
2364  
2365     $$
2366 
2367
2368
2369         
2370 
2371 
2372     
2373 
2374 
2375     /‰?’*j51/A$cV ds4X^A5>'AU82Sh+Uˆ2gP'sB(D5+>W,DQ+!")#$&!)&'4$'"%'/'*--*6 -,"(%/+3-<&/#;80RU/`n1PgLIc3@L"#0!)'3A*K'.;2$ 6+-E&CTEDDACH2;HYK[JLbC?_5&8*ED+,F=2R57VCNZ<:<<?K18 "   
2376  ((*&!&*-377I5CH30"% /71<M:PW<NS:GPNXjMNd+CJ%@C2<JVGmZh…Zr‰Ojy8\b.M]1K].?J46L>?X?Ur8qy/Z\,FQ/GO.4@'*6'&#3A=YhIObL@TKA[BHeI‚–G ¬B¢¯H•—OyŒKn‚9Yl@W~]t£uz¬wаs‰²g†¦^®c–°s“½iš·Z‚¤\œ¾O ªQ›a‘¯]€œHu‡5{y>xC‰–@‡”Ew†<bn,
2377      &#!-&"+$+%!+ $ *'%$ &&! )     
2378
2379
2380
2381 
2382
2383
2384 
2385  $.(.3208#-(+0"<D)"@,I,N-R0'?4)'1/+ E!G5 161%*., &!##0(241?E-5J3*F8'E21-(&#)$1%)*"#-*)!2.#&)%!    
2386   
2387       
2388 
2389
2390 "&,1%:%6+25%<D-9D/>J*>M*0N. :,(,*00'%4%.0  
2391
2392
2393 
2394-+0
2395714DB!!$0(4.5%5#($  $ ))!   $(")'1$!!*&+-  %"&'!!!& ,!'! $ 
2396
2397
2398   
2399  
2400          
2401   
2402
2403 
2404  
2405 
2406
2407
2408 
2409    
2410
2411
2412   
2413
2414 #   
2415
2416
2417
2418
2419
2420  
2421     
2422   
2423
2424
2425
2426
2427
2428
2429
2430
2431             !"Q#W#E$+,0:5"3),3)):(/:*A*#2*+1)%&* ).! ")'%&%  -)0>%#;"2(-<>7K);!4'$/,%/&LTDXjFTdCM^:I]10B'  $8,#<5508B(Z]:#=;#E8)66*2@@E/M6AK(HN975KI BD-5,7?DOf2Z{4Hv1+7#"'-)[J>5QC      %"3,1C?B8A12E8%<6@G%DW@9)&=>(EL2=I>?RBDS??RQUnYE\AE`?Yg:N^><JS/Db'I^DlRF^D0P@B`9Od2LI-<E?9LN@eNiˆ9CO8.B18K(@H HD"HLAR`KEX?9P7HS6RkTr–lƒ¥q•Âs¦Æ_¤Pe}Fbx=ShQcŒ[h‹atŸb]z`\„`t¡j›¾t—»~”ºq·oœÅvš½mµs»l©Ãf§ÃXœ¾a˜¶cŒ´\‹¬YƒžUw—B 
2432  
2433 "#*#+(!, )'" !"'&""%&      
2434 
2435   6/*E7(-",6"<(>& 2*H''E/"G+$70!,'+&=,."!+90 $%54"2@8'>611%*",,!(/)+ 5(')(+ $1 $. 2 *
2436 
2437 
2438   
2439   
2440 
2441    #&!'),$)0 &1$,7%-E01C-7A44E/4?+"=+"'' ! , &%#  %% 05'.$457$&  
2442   ',')'1(% )%  %& 1/%#'#"#% .#)!, ("/!   "&
2443   
2444 
2445      
2446   
2447       
2448
2449 
2450
2451
2452 
2453   !  
2454 
2455!    
2456  
2457     !% "
2458           
2459 
2460     ( ‚‹ gX sTqf#-'0(K3>8;3%,C(!$%.1C" /*!)1 "$ $"%#1&3:%$3%$'/+2&(5,"5"#'$3-.2C6CYGŒ¬M´ Aef1L="$)).0-#@!159LbB 6,+*<>$=G''-$$-;=AY07K0-DI4HCJ#UZ1_k@0KK!(> )&&!!)7CxŽ<>`E3V*    !+ 62D/4=1:D,<;+0@@GT?H]&JR'@K:5E<-=6,7:7@62?@*9I"2<-?O6KG=M=IZ2GT/34<(BECV44:1 /<.C;G`2fk,CD5?JJ@eCIT.)3)!,.%11(977I@ZeE6=0*:<Y;IcMAgcQvsXvh–uj•_g‡Idx??\CLsR]…MiŒN^oMb}Vy“mw¢sˆ·p„©u“¸x¨Ïr—»~œº€¤ÃxªÜx·Óm Çu–¿e…¬_|ž[h†bd’W
2461      +",&#+" $%    %$#)     
2462
2463 
2464
2465  #"$'$'#.%!%'*"0'/$5*C$I+#I3'L6%<6(7)$5"<%#, , $ $ *
2466+?2BF,$J5 -.+'3259%*@)1&0/833=2)'        
2467    
2468   
2469  #&%('3# %2#%.;%/9(49(/?+8(/%.73$#+,&2+/!='!!*
2470'"/ %1*613.<&(3-%$$""$  #!!/-*/# & %.!#  #)"- (#'3'.  % , ! 
2471
2472
2473         
2474
2475 
2476
2477  
2478  
2479  
2480  
2481
2482   
2483
2484 
2485# 
2486   #"$! $  
2487
2488
2489 
2490
2491    
2492 
2493
2494
2495
2496
2497  
2498  
2499             k^“ªtŒŸi¤¹d¡¶j˜‹"{riY/¢Å:So)MF0@F*02+1B?~dML²<¦¦´¢#“• ./ #$ ."*(!#9(7/!-6'-0.*#&#'&86$0<4$= BA)›”F†œšIyYmXe’<…;a /&!+:,/*"(!B%)ZF2G[-3B5<,I&>21?M+.90C@+;C/+1D#:C#5 $"'%=?@FUTYZO'U1        
2500 &! "&%(%%03D9Si/OW=UaLCUG-<<&74-+%**2=.^d6}n.zh&VC!/,8"50 4>1L<,B-*>#1)<,5@'&01I=ZA9P.7M3R[;HU(7;12 5;$?@)3994F9>J0/*;*@<H[FVwQwƒVm}Y7\PQhCPd:P^:XZDKmLT|Jr”K•¦U‹«`¥c{¤kr›kyŸw„¯q‚©|”Àˆ¸à§Ù…²àyš»q€bm“Xp„SjuR[tb      #/4#**&&$ !" !%$%(!((#!"$    
2501
2502        &$%#)/%2+-7277+=2$$;'!@/*H0*4538');*4+!.$"25)538;$B0/5&5G/K4&C81))/608!0?"1>*)?$)7&*=$E&.1" 
2503  
2504 
2505 
2506
2507
2508    
2509 
2510         ""($*, 74/C&+?-"7,+4($)-%)&(-?!)1#*4,+73>%A*%"("8( LEDI$?)0$%;*$$+'(2    (&$+#6)2%!3$/0&   9&&:#$+5#4*   !       
2511
2512
2513      
2514 
2515
2516 
2517  
2518   
2519 
2520     
2521 
2522 &
2523
2524   
2525  
2526 
2527    
2528  
2529 
2530 
2531  
2532         
2533
2534 P#–.*-F§5{¤Tu“bœxi[`‚¦c¤W:LHJf8[q-r€$fn@‡£vˆ¨Tˆ§¥SŸ4h¥²‹ž¾%1A,6020.+,4%-7 $3!%+!BB4>$/&!!%3#$/$EYMm¦š~³sŒ–Mz”Hko`ixj%F54(15LC 2= *..pq*@YL[!225+EVL>U--7.DO'!2(&5895ss0O\0€a)aS$*6(21œFS!)!n~'Š7HdA4NG'%(         #@$:K+:Q?XH-:5!)-##!+*6MOlrf”nd‹^q‚=AT"H>$6A+=G2NO)LB8/.3-7D+8!( &+7"7*0;1L=8S5L\)MZ%W_(OX0Vf6di<su4im#[`&SX6XkE]sFSwRBiBZm=agGdsFt…D{“@r~Gm~Vn‡l—Ìkž¹c·cŽ®Zw‡\{™k~žj}˜kv›‚}´‡Ä„œÇƒ†ªh‡¡Qq†SaxUm‚LizF 
2535       !$"# #!$$!$$("*)"" 
2536  
2537      
2538 
2539  !&!#*#/(/62A72N!-3*5%"7&:):''5//1&$3$"&!)< ?J/R!/?$6;*9>#8D0@0%1/7+.N9 :Q&0@-C7'-K)#4.)#$)$$,%&   
2540               
2541    $)$" * ,*(-,+"'!!#$%*#*!)&/*0">5)*J#:1=C6F@=9N 9K5:H+7J/C)12&%!. % 
2542  #$*!# '$#&-!*& %!''!)'#((*" %#*    
2543
2544 
2545     
2546          
2547 
2548
2549  
2550   
2551 
2552
2553 
2554   
2555    
2556
2557  &#3#!'  '!*   
2558
2559
2560
2561
2562      
2563
2564      
2565
2566         , (ƒŸ9_Œ=jQN–ÄpW’\¨}lŒn‡:In7OYPV[s‚t`–Žun˜Š4a€4>V+3A//‰@E˜GI0M?AB%8627%-#/!/- +/0,.=$%(, >=*/$"/+Mv…lJyƒXŒv`lOtlaŽ\Lk%1D-0A6.L=+0-.@35Mkbi:$34$&/D(!:B*A+/:.3>813(31DD*?]=I]GncJd=GV<XB(V|/##,'6BhIgY5@<24+H.(Q       
2567./"  ,+/752=C8NO"I<26/,  8*[$=f)=h)>RBM9ep8Y_<_mMcyQlx@Qj+EQ&0>%-=/7,.""()4,&<3,B93LBGm@_p7SoDg~NsMx–Dp†@ky<Um?QeEGY<?C:;MJQuJMaJ>aWMu\kŒT{›_„›i…£q{Ÿkf—jx_x’Wg‰^f…ZgURqYX~nq”yŒ·v€fv˜\wŽQj‚Sh…QXs?
2568
2569    !  "  ""(&&,%)##&! %'&  "&"   $ . 3% ,,70/9*4,3348;F>?C%4Q+K"1A3!<+#A) 4.2&$0#*!!!AIKOR3@O13M&>D'<O..D8//):2/F!<?;?O5>M%*M2/+!",)""   
2570   
2571  
2572 
2573 
2574   
2575 
2576 
2577      %"' % % "/&.29.76*>-<-D!$=278"0G+?J3)H'H?.-C'!1%55(;K%L!%!#+*!2 *"  %(* #"$$*""&"!$%#*!+' ' '"&'*'&% %    
2578 "
2579
2580
2581
2582  
2583         
2584
2585
2586  
2587     
2588  
2589
2590 
2591 
2592         2)*"' #$($
2593 
2594
2595  
2596
2597       
2598
2599       
2600
2601 
2602     " !!"}\#S:[›^~ec’ˆ;zmE_vTe2=a7YrS`žuK„‡2:c #1I>-DL!-&6G,QZ0@K;5Q1=I'.9"#*00GF ,@ $5$:7$ 1C@ |£,†–:¶©#[Oz;Oq_RfL=WNaoMC[UX_[Pe>0;++ .&+"+'+)0!0MR`qiWk.Sj(qb%<0&*445E#=9 84*VO)$0=.3J&=72R+]R)Qb2EL9/757G.8A7(4!4%    "(024'./. %$((99&-43:"#$#()*01#[X6jw?{ƒE†…Efg0DJ+V^&DH51$%$56*5>.;=2<CKD\fJfV?^X9X^(ES,<<*4,-8)+7(6E'AM::&*!!- -: %9&!18)@GOj@XkO\Z[{]e„[d„W`sIPh;D]=Qg7cx5mp?FRB6J8<K;:MVSxelŽ`v’ce†`h~P5TW>eYQjSWqSc|PdxJ`nL\nWn„du›mmdz‘anŠN]zPNjHN`=
2603
2604
2605
2606 
2607  &#$%$#!+"*!('     " !, / ( "* $)'#-(/209C7%=K!1I*,9(077CA:*@R*:B4C,'94&@)$41&2$!*") ) # !; KO#GY=0d>+A7(3/&<-8/*'#,1,1'<A4=A/.J)-820'$##  
2608
2609
2610
2611
2612       
2613   
2614  
2615 
2616     %  !,.&6&)1)36,0)'A1:K2E#;?"AL,AI+J8!OLKO+IU)L-!7#+%%3-947& (),)2(    " ',"/:%7.'(,2.-#8''+ #!!##(/ !"($%!-5)4(1/!.#,!! " 
2617 
2618  
2619 !2%      
2620 
2621
2622    
2623       
2624 
2625 
2626   
2627  
2628   
2629
2630    
2631 %!
2632%$'+ $,8'
2633 
2634
2635
2636  '+ /
2637(  
2638 
2639     
2640        
2641 
2642  
2643       (*.707-*-0).")6!1C'?C$.;+[F1636QQb^XOW<J/^]"je>ˆ|7`fw`.VODEV13?/,1/=E',3$2"-41".(($,0 /ODIdm—‰Á£t–B:OiHNDLZ<<I>H_TU^Cd{Abx8 .,")#)<G 5> %*Pp†LDfC*I`WŒXNx(_r+4R:Xa2IQ4hDLY"]Q!<?)A?2=A,>)*".BAu'()%'  && $& 0*-PF TW-Xc+EB)91*[JMI!0584,(! !$$J? 9:%3=>@\cRpt_~u]yWzQDPACR@?H3:J*07%:K1Wd4bh=ZgGM^S;K?&):". (!*"' #,$+6(!/.0F/CO$:B',(-;6C4<$.3-GDRfIVkNRnNPmPC]D8T=?U12M;@]HXrRXr?N[13I&0E,KX:OgUfˆ_g‚Y`pF;Q6'419JFWjEeuRdrGUjAOkEUoSiƒ[j|\VnVKnUMcKRjERe;O_6
2644   # "    !% $%#!"$ )#  0 ":,"&()&- 20*!)0*,,/36);:%+G)1>4H5-DI)9I'BG(AG-H55E8%41+/('/&!* " ' !5NA)8]>7IH9@3&C$/!$$!9"'5A;@+7K+.I1='"   
2645
2646  
2647     
2648
2649
2650  
2651 
2652  
2653       !' #+'(;)<&'5"741'7B!->(+"/02-)40=+%@359.4I);J:jO:Us;Ne9#[$*$%).%&#./00'6% 
2654 ' *"" ?(/G(*1#*7B+DC1I#5!$" (, &(!M0(O!)*(#%7C7 /O#">%%(#++' !!" 
2655 
2656       #
2657     
2658 
2659
2660   
2661
2662            
2663 
2664      
2665
2666
2667 
2668
2669+!1:02*   
2670
2671  
2672
2673       
2674         
2675%"$&1439#,1'8<%:9'%0&-!!'.*(-*-3//9+-=M/8IBPEbf[O{eƒ—z¡°b¢¹nn C3@9:K%@7'%22,F$ $ *"%"#" /.)6!#;,,‰mTl›gc†€ŽÌY67!8>&0DHN:M\>CSFDU`opI,3"#*$9#/>7<@&,00!2[FS-RT+->\QQC6TF2D67HM7[E;W^UeNeˆ7Af'7C(*-&/aD/,!"0!%<16 057%-     
2676 .+TB71++ML7~ˆQz€FtKjt9‰4í¼PÔÁ9Õ–+Ÿ‡,kq!OSaSVQ1x@up0MP<EKMT[_myd}‹kƒŽU„…S…‰U~Emz;IL(36=8PX_|R=SLR_?IP*8<!!%"$57K1>N$<G5=7=%6D$:E*6#%058N<>V?5O<HY77H-0?-6G(.:-5G;<VEDZ;CO19H0@N1F`9]mEVqS_~I]q6@L!/?,Wf?l€N^mJYg9HP7K_@dsOi‚QgzGSe>?Z@CU:<W<G^6GV2   
2677$      !%&# !# # '     ) (3(010+4!4'-$0-..#/5)+"3+(;"3$(.+4+-<@$@I(@H3PC78L15.0F)'<**/-'3!") *+$ ")5 6F!$O9$-@#6*&5($,($*3,7=<A-1=2"=0(,    
2678         
2679  
2680  
2681     "$$,&,#)/$" #&$'6)1$:&$/,(5%., *&3.%!.+/&,6*0C'2OI.@H8<8/266$C%,.)$*'6 "&!
2682!
2683)*# ,E!H:/X19)%701"`8Pc+5[2'7&%(-  '*$0#"(,/H#"8!3=&-%'(2;% 7&&* 
2684 
2685 
2686       
2687
2688
2689 
2690 
2691  
2692     
2693 
2694 
2695 
2696  
2697
2698 
2699   
2700 
2701 !#
2702
2703
2704
2705  *6"0;'23, #.   
2706
2707             
2708 
2709
2710(#
2711X[9;(&(**4$.4 %/$2:/7A0"0#")'/ )3 -;$/;)'9& )!%!$5/7AJS9AQJ\~Sqš9e)Ck24' ,3/-22%$&#A9PR7<(.-4 "1,-mŠK|§{iŽ\AobEV|-X36!6@!BU<7ICru,ipTp´Ugt![a0Q !()(2+IO=8!4;<4H40?%2A9,C3&@)575.6.69*;MQ>fOet'<X#:K-%:=D:8:N"7:6Ms0+V)   
2712  $51<UY,UZ+2FZD_w=hf;\jl|^¦®p§ã˜«Ð‚ßònÿÿYƪAhUH‡O†”Vu‹lj‡[nq8=LD3WVb|y|ij”z{™kvjƒoNl[;J2,9*59J4@ICRDNc>4G60D%#! %(-'*-33E+#6*)B%':(2%'5%(;#0''9/3@)3.0D+9G%4@(39 1#0B-':24H7P`+IU1FW@N_<E_FNmL^wLaw<Th.`i9ZvUsVoS[n;Q^4NcAbwMWxDRpDSa1AR66I5<P7<L6FX5
2713 
2714
2715  #  !%$$)(*%"" #"## )'     2 (31.!5;1=34).8'16#/9$%3$), 2++7 =3$9:"A"2$#--%*7>2);0."-2 =" ++#&,- ##"+!0%0-%"( 7( 4B$@.$30 3/+5'
2716
2717        
2718
2719 
2720
2721
2722        
2723  !!$"%%&*$$-(*4!)('4'3G4YVH_E %" ( $(-/); -99=$aLPfpgiugpqr#_siZ`|Z{iPD‰=X*4V0EE&GT&:ULT!F`C.\>6./%F$2("!0(%*4-70<" #"     
2724  
2725  
2726
2727
2728 
2729 
2730
2731  
2732
2733
2734 
2735 
2736
2737 
2738 
2739      
2740  
2741
2742   
2743    
2744  #!((&!"& &  $&.-&-< /7(;B$'; 
2745
2746
2747 
2748  
2749     
2750 
2751
2752 
2753   ' $     8?!-YA?i,02!,-%('1 +$!(DF4;B 024B":@"53$C>%14')("));5LV+@X<?Q11ICJJL<I49;#1E%)1'!!1698L1Vh66G$642./5*3-Cgy(Xh'3V,1@D2‚©''C0Oh02@2%/6%Gd?M^ZqwXtDQ]DVn-4I(*%'"%%9BJax1*;.?P)3B%$,"+4)&!!4<'#4)8B-Mg15D@%>H!*))(%!<GB5W*#'"!KEJL8I'8/'+3!""    )(_S$m_6Z^S`c:<A55<I,,;&5IAOW]koLc}Nu}\{•„®˜m›ZS`T=W|@f{q†cLlhdyOUh9:JKGWpLjh^|sQmvEbsRoRDIC3=+6A,7E34E,?P;<A:!*#!&*4\g heHE.6%& "%%-%$-%$*""+ '$- (3 .,#%1,3!/:1JT.GO&>C8:">M)5=,=H<Xh@O`6J]6AO:EO:SjIVoKZoAPg=FcDAZMLgRSxSj‰CZpAK\GUrMdoFPiDWh9JZ3MY8@J18I8BT4  
2754   !!$!$(# .')(%+!*$'!"2*! ' , -.05%;;!3F(0;0'<+,5*01-,5-22!16 (8(03*59#/:.$.0&$3,%6#'(0)#/--"!+#+=*?%%37='D-30"$""   
2755   "! $  
2756  
2757   
2758 
2759
2760
2761 
2762    
2763 &$"%!"!'$-%-'/-/N:5U#2< 28N9RNKV0=\>.D:5*4/;(P1_M<P(>35;BEG MP%0U66I5`X?bˆ;UDYŽZL~I.cL>HEFg8JXR;U30X)7J+UL2cf3=s09EA0H@,D&(91!+#!5 :&!!!!*%"!!)"'+   ":(3
2764
2765  
2766
2767
2768
2769
2770
2771 
2772
2773
2774
2775
2776 
2777 
2778
2779
2780
2781      
2782
2783 
2784
2785
2786  
2787 
2788 
2789       
2790 "  #/-+',#)!#+#$ 
2791
2792 *""/5++2"'+'')' 2+$+&)  
2793
2794 .
2795;9 95 D< @4 >A %0    $$$1
2796   %'=:7AH0%S!##-)$&3;E3:G)?H*>B,8A"Z]1Xc'Q]CV1=&AM8NR4DS44H/=U9BK1;H(*A#(- &$84-KU>0M&36 7A#,6"%"**;6:''I !:6Cf6I$1FF($5-+) :DFKb^WoW0\J$DE?O#_`"X}%/ #4-$!39K'2<05$.(4-2CAA8/@:?L#*/>P%2O6:=CC?F*;G*4>CHVEx-JL%6G+. (  )36A +"$/1*<Q7TR9ZY@cBEQ07H.7@&?N)>JHJ\G1D@;ARws\]_^NSOa]8VVDUTYnmZXVWVji~‰C‰ŠD~Iz{P{L2K7)?EKUJ_a-FE%>E1@P*;E2)A2-?%$( !*/5?SOUƒS†¨7‚“%mpWUA>@?8;(-)( )'0&6)2%((4#7I1BO9@O(+;#.@'7K&+=&5D6DYBUf7Vh7Vd/@G4;[Ej|PpŠKr‰?L[61B8;V@@XMGnTSk>HUKIgPmQhtKQc=J[7>V6AL73A:AU3
2797    $'&1'/**2&*)'")"'!)%,6!%!$  ( -"0-*4#./#48&482,>1,3-5.(0/#:5$19!9"))"!>$+@5&A?!9B!&;".)6*! 2-!"#   /
27981629&+1(   3",<!4-*%*+&#0$ (,
2799
2800$2+  
2801  
2802  
2803    
2804  
2805
2806  " "$#'&+'#2'+$9I=7HX/HN*CTBW3.TF/>FkD1w}'i•,j~6hŽ+Sx87cC5?-)5.7$":*,)$4?1:B&@C&AG:NQFQbBQb?+V?#3$.5'KE+eU.\e*]R&gi'bBcvK.[/D3&!="(((-%K(/C$!&0$HD:L*E)',7$/ !%)% !&+)))/' 
2807" 
2808
2809
2810    
2811 
2812
2813
2814     
2815
2816 
2817 
2818
2819
2820 
2821
2822 
2823  
2824
2825
2826  
2827 %   #0
2828  "$#$1+ $0,/5"  -1!-7'16)",13$1(/.2 ).'0 
2829 ',-11/714A3CK6BI7C$
2830  
2831H*vTŸ—r€_2J4 
2832.*@P&^a7+H$"'&#$>?;<5L3BP/NL-?A-8P*YiHo}FSd>AU379':@/>A89L8:K17G/=S54A/&4!&  '#,&%15*2#4,%(,(2!L)B52S- ($"#/$4-#9!'65C(-@0<57EA?H;tS#CH"G:0ONB36?9$T4&#)"(.&--%**)/-&:L45a41)*5./5!65*99&1=18E4S]5>A*JK-\a3asTd}_Ok7i{,>J/;>?09%#"&*"7#2>&,=64:DH1GP-GN/2:5+E50>-8DM:]_B[HAIEL[N4RLmŠhl’k…˜\skX}lKur:d`BjnW€G9B&4<5RiZa‡Kiy5hg<BU1AG$+;%.:&*1%+6H/KXFXrbvšgyž\n”KSi4Kd5Sm1^k&LW<A-3&- +86A0?4>16 * &60,</@G.FG!48,:G&-5$)A1<VANeC`vFh}6N^5VdDSkKHiRQzEYh(-:'/H37K6E]@U`>WfAXpbvŽ[j‚NPdA=I5*@61E1,;32@.         (#$%  !"-"/3'5(*-)'/",* 40,@&7&%+%*
2833  &
2834'&2-32+5%)3$77&A<,6B05:)<5(5;*$>'*+!+<%JH >R.2J.!=12%4=& 0&"-$ -@0' 2 K1AQ"8M)=@*2A#:6=;A90?08&,8#1&"9! 3=&5"%*#(!%"*;     /1).
2835        .#,.*25:?+@!:26=,;33P1 UK^]4Ye@Ir97_F;EAS=.mc#H}D]^YOlKDYUKXNljBGs6/F%15Q6"A] N$3/;B%GL)bI+Vo/Av:5PBU=!aNYpZj<QuUNlEfdAoˆRkƒO@dO,X(>2!#,,8'45(!& @&$/#';,#0##71+M-#       
2836   
2837
2838
2839  
2840   
2841  
2842  
2843  
2844
2845
2846 
2847
2848
2849
2850
2851  
2852 
2853
2854  
2855
2856- F+ ]` eeGh 
2857
2858  
2859( )# '*'3'".!( .(". #"0*$-7)3? /:'(8%%%!,)24"*7$(0  9=(0#.!39#;?-=E0*6;43"
2860    R(“Ž*h©^€˜ˆY–G€ƒ'JHM;<+
2861"4>,?N./LF.4/(# "-(@H5HP0DI0Ra5gpE^v35J0XRJesWY@J[5CA(E>,W\/hv4Zf02>/1C0(9'<4 %&-.
28629267('%$(("R+d9 Z=),3+)-&"!%'0;''%*BN,G]*:I39O7dokj;ƒ‹@Z7WQ*^V&‹O.pR08$% !$($O5$/*:&-B2::1&4;=!+7+(;1@U'!$'#>/;H:FC]†FBnWHlN8PK%7GNTPhl'>D&;K%!-$*%,(3 "") &%"7?+I^4@T9ISD=Y6>N&4B),9+&2.#5>.B:S^5'7F)49%4r$:m1Eq&HV%2X-E(>'J#:M:D,TRAOdU7O`LnclVZq39H(BM%>L&:B#GM(Q\8J^<UqPc[GnY2MO4O<9I8>R=DT;9P0EU)Q]$CJ";G,BK+:M*8C#2= 16.9%8>+P\;nu"KE*0@#(6!/()<5:UBJfMGdFdo:F[AGe?es@O^EN`(9H$IO2M]7RcAOiF[pG`sYoŒ]byAHb8<Q*1=28O0<G17B%     
2863 
2864
2865
2866 $$!$#"!/#+3(3) +)(5*-8!,9()7,'5*)" (
2867-+*311!&9 ,0'40!4;"/@+.82,9-04'16.</)44!E1YF_[)Pg7@_<=F59 W$<0!3++ 9S%94+&$A I;4X1/?CJ61MS+5U*?N*BJ,EO7EP3>V%3J045"*<)7'!3'(+"2"      ") 0
2868% " .073(/21  
2869    
2870 0) (6!*"+%<2=CKD,UV/Sa'Bg1NQ1XX%Re(Ci5=RG0RN2GH4DE?F5bS.t@r“eOn=(mD5FA5H=EG<N_OMN3TO)@a!CP8@P.ANNT#5L(1?3NFJIZKR],E\&TO3FcE3TPSFGJd=2VCAUSH\T=\M :0"$>+@ !0)23&4& . :!( 0'(8#4*        
2871     
2872 
2873  
2874
2875
2876  C$ @? #% 
2877 
2878  
2879
2880
2881  
2882H3OC$ 
2883    6 DK;L+SOECZZS`RF   
2884-!+"$$&++0$$ "*0&.&( "/%$$%)31,.-,0$$ %#(*&4=*12#7@+A,*-(/368)@G6XL7YT(:2 
2885   !($/_15k+@dWfxF…vafryžJŠ“Awœ3gYc$@E.7I&G/$4R#*")<E7:M>?H5?JC5MWAOPB\/SI:woE€‡Gk|;{•>dr<0L>BIRWiG3?(>H&6A#CH*(6$"91#<G-PM(*142545/B;&B7.?2(N5">7EAva *J1@1'‹Jœdqu288QC;.0,GK2>WPIXShfMif9sfIÿèBÿØNª0Rm":?09,8,)1<'0*:(*!%/+*,"(13.@!GJ+\T14<;@ c[4fn:j‰Vj~46H4;K%PE(DOUvH‰|(7I"2=.;.8,1'/ )* JI &3"%5%1>05>6FC'3=/)%(!/!)0,6"4:07L07A5<%5E+3?*&1.))! "%)71ETAOaK_sEuu9ALV<WV2J=8J2JX3Uf5bi3Zh7XjCm‚Jv‹EIW=/<-.5+4<6T`1de3;J(.;/CU8[s;_w1ap.J^-9C,7B#8?$9H4A&>J3MaCPk8GT#&)!%) (4,4=7(84'8=@g?OZ/*6@2WBh}8Ma3LW-=R54L2GV:?UFIaFE]PMlLOf8=O..C$!1(%;37J.-9&*%  
2886
2887
2888
2889
2890
2891 
2892 &"!!#1$%3"-''$!('+3(2'$2$!-&#! 
2893 .
2894*1-/ 6. .5$&.(,* +1!14,A4*4C$=3%6:'G5&MA'RM%QR*N]8RdD;_C>3>C&ƒ&"ES#048' $$8Z*3:':%,,4;:AD@AA;IA+>I02F>,79B3.7F74M:2E;6<71B,'=&,-@-!2J*;! 0       #"  . 5- <E1M+ D.%* 
2895
2896
2897
2898
2899      +#+,", ##"+/C9NG&QW3L\?8ZH-HDC::0U=<M*'B09;+:959,9A0;C+VH.fhHdrf-T"4A+'#8>(<=*[K1Rk6V^5Uf:]\-Yq'Ng3BI1D:4?:(MJ,SWCO[8CX@DQ4ZMC_f@Aq,DO=6F<180<=/;R3+<. -*+J4'?I21/">) "* '" #0(!       
2900  
2901    
2902   
2903  
2904D(SNCOV4;G% 
2905%! 
2906  
2907 $601EH '  
2908    %0631K<KOA[]G4WD+ ) P-M>O[:H!'&&*#+&$( )9 &$  #1-1&(/,(3*(-%(!)* 4:0);'@3(6R%JS!OT%MC-vw?|Is’VŠžD‚#‚wQi$!#$. T,8?!/+ 4**=P[SGSc–“t“qUyQa\FAS7HT,3J4">*"!$,4@0-80DS1N[2+;+)3/52,@B4EWMZ]XZiMl~gf}MGW%,43,<HIY17]2A^+:=2MGRO"8'IA8*Q6'2)*'03<3 d8+`;"X;'¿˜@µø>d˜7PrCFa */262/]o^¦ŸT¥…B€d-gk;BM')<<II6¨o;‰Qj˜KfwRX‚­D]˜)WK(.-3D ,6)'=$*+"+5+/!3$"#, '#%&;C8BODmj)T`0V\QYsS<bfkwGg|0_g6Ui6UoWT…Š@uI=I%5G$:=$FS"CM >J3A JS.9H8)!'', %#&+,#1%'"&%''4$*6$,:)(2'7E(IT(;H#>N"47.7(0'% (! -/ 4B(CD-EpDlF(@++91':.2D,Rf:_qFh…Fn‰GlzJb~Xd„O_~0\f+js-{‰:{‘Dt‰6?P)FQ+;H7/G@F`JWuHaw6Sa,=K,@R,DW.[l,[`0=J<IX3+7 #!%!!/*#' .8<^,ad+29A5T?O\4?O*&8+$85Gd:Md8FW<7J=?L>=J;GU&=D%/$'.#0*'' $  
2909
2910
2911     !$(&&1!(!& $"#,'70/5 5$    # #.)'/1'5&$2'*/'@6$ME SN-JR/<R-ZH0SW2N^;UX@MbIPXF)YJC!;f)u;$;W<0C "%+<=,90*:#*",B*KI0EW6>N31C6<0=69.I:,RU+SY9G^4LM&QP3L[,TR(@e "S,-*!(!.)*/$0"0-& )() ) % ('(!!0$43/,
2912
2913
2914 "!!(&"/3@>EL"E%+80 CD34V?%GF/5=+>.8+ )4/#%2+%%# /3$D2.[R/VqFPoWM\M_R-Ma@U!AI1PQ1XdDXb<a`:h}=D~MC^B,Q?:?6HJ6?J9BLBOUD<aI::?MH6jqF[yUAa5.>2*:)30$-45 5*,)4.48!GN3Bb*?@:P)6,!27&-$&$&  
2915
2916   
2917
2918
2919  
2920    
2921         
2922 
2923" F=#U]CaaJly@[w(SXFH.L$4 
2924 
2925 
2926 !JF5BT 9   
2927 .' 27'8,9)5>(9H"?:! 1-83GC Vc.TZDJYB[A<D>?1 E7#12"%372Y^;A&2)(##+),#"'!*1(0)8!),'#0(&6-)-16+-U]CFcP[nadsqUpq@ay:iE O(79205'0!,NBP`4V] %3 ",,b¬;Џ6Tcnž«‡‚”WaŒWj‹?kg7?`.'>*'0+25 ;I+?E#7I62BB4>#79$0%))-3B6QUD[jEavXakK@R);<&/#50?ES06@/\c2TaHUjK:N$+/%'!!.0%C+#oI2dA3žg;YjFOzG\C=A;E;,fy<1%WF@ïÌoÖÿtV±X^o@@N+/1*f~TK tNw^kkPØ®K“¤AAc98GHS 3H)7=%2;'IT&<H4>#-!*!$#+&13DT6LdRNgMk…T_iFIY7LZeH^Nq‡M[tHUsCIXR8F>=M)9I&/?/0>0LW7BN-%90'=2#$  %$--2#-%2&,)$*(%.!&2!$,!%,!27,@Q.@O*7M).A%&5!$-$",+3.< &0(('*@0:#/"#1$#0%*636JC_|J^vUm‡V`€J\tLgNnˆIkˆNhX_ƒW_Se‰Ho}1eu4?I!'246C@-EE4QGUu:JU1=M6HZ@LlC_z9Xb2[h.DF+)!&-C[{+WZ)'766N6JM!/7'8-&>6'@21J*1C+6J33G@HX7^h9?#)!"& %
2928"      $$%%%$$&1-+>6'" 
2929  )$1*%70%'&O+PHIU$FM0UQ6VX:O_MSS<Re>W[PKgID\S8S=7<<h/h@_H19GV)*?(!3$"' 0$#I()2.( !&@#?:)8A8"3:.)7:5.D@.^I0Zo3Qq8Pk@[c;[o8Rh?Ll:Ha@5P:(?)'*D/5L'D%%1!"3,5(J2?UHH'FN L%/&0"$# # 3B12?;"%'$(*'%&.-//5';>/%C5 +#'#*4*&6;..-.42& % 8$ %;#0&#%5)C>":K8UAGEZ?NPIF[9*UE,97540GH4_R9Tu<5Z@3F>SJICW1%Z<'(-*C5>_?5Hb60J<K8.XT5XdGY[TE_F8R>W?.OW&=S-0;*N:6F('D*"0/'9&/&3!#+ ()$ ! $          
2930
2931
2932 
2933 
2934
2935 
2936 
2937
2938 
2939  *(*5AI=JH>OS6GXNTDIY;,D/!+2" 
2940
2941 
2942
2943
2944   '!05.CR8'1 .646+$/& 7##B9HP'KS/\f;GeO8WCWQVbn:nvEYo@js:Vy55(OBEhgCYp A*F3#D=!3:$),%*-"&2%!$&&, ,&$"+>%&6;*3:CGKFIP7LO:C!8"N1%L^-CK!A5`\0PˆIPb(@F:?ŠQ_žQl‚g…|3‚v“h}gNukXVQVn6g\#>REC%LN,IP14B*2?08D2BM-4C*,9#.K@+X]@DVALOI~‘P‘3Zp(Q6 0^/(-"&$*2OAO#K9>.SR"-!#<*G9&zY>‡R?˜‚;VHMP=730O/'Šx6NhG79'7>G6Yª6Z€;KJˆ‚FÀ«9»ê-PŠI)9:ac?”ÔkH‘UxUYz.3>,7L43H&&,$/33CB!0/><*,7%%/*%"&,.8hM<OXSKZ`BaQ6H>0@A@N;?jJI`KBW6;Q14H(<M,6F#7B%$.*DY59K,&' "(!+$1 /&/"!2%-%1!'&0&4+5%-(2+5H/=S.6I$(4$0 **",#0 '& ',#- 1A/:'7&9H8E\DOgF>XA+F<.I?CgMInUPtTRpURiLYkJ_yT|”FXk74F%#1%/)+-/964M@Yj1DS6GV<H]GMgEVp>Xq8[c#AE2-
2945   "19P@Qc"9@";F-8G"6:(1+!*$);%6H)<N*1B7/F>?a3Xc!<C07%-*!"0%#   
2946
2947       % ##!"!"#%-,!
2948#
2949)' 5-?52A+3 :,F9WU$`]5Oi6R_:OU?HZHVOBQWC?]F6ML;DI6B6F(8`)\E-„?EK_Q85C<&-)# %""4/)+0&%%3,(,51&;9#C>)XP1WeBHpJc_K\s4Lp@NeEN^E\cFTh7BW58J"FB"<T*/J.(<&"/!)**3->?>=DM5BT67JE,E&16%'7)#"2.75=A"2?>+;316*61(2136)7,%#%-&'5!12 ,*#-$')$,,2!%9%1"544=J;2W":8"-?&804&P62F[,1QDEC>GN88V<78&G9hQ)Zn9GnG;WG-2.@"*18E84DLGH[R'Ja84XC296AB(QQ<M]EO[FG\O@N>RR/Q\IK[D5P5<N*-:=-3+*,(9'/./1&
2950 
2951   
2952    
2953 
2954
2955 
2956
2957   
2958   ( 0E,1/7<67B=:@67D2N@93Q7&-$+-: 
2959    %) (@<& !()+&.1602 3  &0+%4BANOEFTT=QDBZF>=5G^P[]ZghRIqUxuMoz[VB\+dQPevTbw3RI3 %0DL2H`8QV4XY)N_ 1M(3!,0 '( >)*6.3$"/74$3;16<>%A+'<..8?>AFWHJKE6=3%'H)=@DOHNdAIh=8Y2`V^aI…N~{w<osfly˜š]¡­Z–µQ’‘F‡žQs€3DQ5EL@GW?:M0AK(@C-7=64E05/ -57F36BA8U;GQ6vrbT|]@GG56+%"$!/+=;.?,&/,7-"’^.‹¤e€‰ƒd’zª«-IS(FMWl)Sƒ_/D5¦R(œ”)22,1+2692ÿãqêÿ|hm`1-/183<:FT\9JH2CJ6O>@M&,.(;D#0B26"#,,*.#'5#&'- ..!"&.'1 =K;DQ@GQ96M57H+)6#0<2&9/3G3/A*&7&.="NT*MW(5F!66 :L0+;"/3=$ "$',&*@L.?-#"%-#- ,$3 ":$- /;.8G-=E$)2&1$*'()%%",'@$0L,9$;H17K68G:,E.BW&4F'=M9<RBD_On€Ht?ZqC\{OpUp~29G")#*5&%5@Vl7Q[3AT9Lf=YmCRp>YnD_s7JX&AK'$
2960
2961 
2962  &'5<C^0?N.AR-1>&=L#CH$/&0$4)3M+AU+?M':E41E8=\2LZ&0;++,9!#0'"# "%! 
2963  !"!  #"#'''0%' /)$820",7%.9':6!9F<>0QL7Sa?VbEMc@EZGRT;I]BET@6K<@<3:;.=,,5*A,9•23QgO3BP4&.2%)* $(#3,)+'+(#0,.416$29,6C*FFBPXDBa<5\?3EFBDBBZ=?T@>V7FX=M\4LX-<`4=O:BD.2G#+E!%4#>0%EE';X/8LH2M>8J?>B-,@!(;#/.+3$(7(C;=H+*G1"8= ,1/&--)27+);%"8'&0032((3(-31&2 %*(0%60':2,%6-) 0'9C)?+%4E*6?G" H.%"#*'"">7#.<>+!@O1L]55S.E=*JW24RP6CFCD5>U-#6"3 N@V_6:Q;6G=<LJ=LA9J/)9+6;:9FC4FB?;GFQ@LT=J]EH]ICZC<T-1C12:)%A)1#  !    
2964     
2965 
2966 
2967    
2968
2969
2970  
2971  
2972 
2973
2974$
29753/+F.71.VK/VZ6?J5=D77B1,F>!2()",         ()*#># -*++/.0(+2-1  %")JT"JG*OT6L\B4E3>LG,<57E@?BH'DQ(9K*!IY_`_jYXdITlF<PRdr]TlQUS9JI'#50,EC@>JPXJS\MOX8IU.1X#;$ !/%0,()/, 3@,1300:-TK$[dX]NV-T]-SZ2brDZe>W]2JJBH%`a:G\CNP5X\,4T686l^SG„Vw—CreB†«wv–ƒ‰ƒ•x~Ÿtx‘XU~<Q\?IZ>DU2BS4GZ*1C%.<!-9$'<&6A)9>'ED/_g>_kaFlG9_0-!N3GP(7*"'$4=%B7?L"B>&tq€Xvyt…ffgr9i…:)%O4.:>D&9>8E*ÆXµ–Z±“(0K% *>=PéQ˜´XuC5I%%-%+1*687NV4UL.y^8Š1_o->&,1 &.%'<> .7 0!#!&& ,#0:%!0-*03'C(#-')6&.7BT&CL+:"(7 2;"E`(5L4CW/aa(T]!@L(DF>D?Q6=("$<C"@V 1K-CL!2>!$)&&-"(6%7B.ER'8@.0#3#)%!  $"-&'4%49(3E(&5(3&')!2-2F+J_5On2ReARoQ[€LwŒHTgMXxT]@G_ :>$&#"&2=6XmO‹š<q}4Wj>NiBawCf|KmŒHiu6bq0U[@>;AA=;/$!7@17J/G\+AH'BP'FZ2[g%9B9C!3=-3@84E:3R5S_1<R7IW<Oi8_q-V\*!*$#($"  !!! # (&/, /$  #%'!0%$%#)0#.0*2:"0='>=-DB%FT<CU@GYAIULLU@MZECU@4MA1=7A9+D**C.!H.4z0"F`H/:[)#,!!8$" " $"(" %")#"'#- -+#".#'(+B,*DM41]8,=<&512503=-=C38M15L>2G67L4?KAOI7B[26X=)G510#A;*N.#9L25+-72:56E+<A3,B25;%D=%?M'6L(;B)>D89I>-?:*5#+/!;1,D #4'#+'")+#'$-/%,8(0$0('#4#&*&+, $5)&)&.0*;;/AE$B8!)I302#%#"&- F,@GEE04K)J;-DE JL4@R3%;*97)@<3dX,Ud 5[.4J;"BG-3/0=39;00:2B@,7G"3K/*52631>I45F=/A?"<A)68$92#2/)3'/3('3"$! "  
2976  
2977    
2978   
2979     
2980   
2981 
2982  
2983( 0: EB).;$?9!=V7IVOI[B<R=(D.9<."8#$# * 11  ' 8
2984<<
2985[J 5V-2 4 */&7$-&8!.&.#)0(N5_N78%%-41FQ@=SH1OG]T7Ym/SG(bN.AJ(7@.":6F_GS\UK[T%>:=,WQPY8SPM/B&E(('2*%QZGTaNRWKGTBDK+>H!%/0(,:!$.")62!;A/7@*88&MO97ZOJUNUdCYdLdjNo}QY|PZeLSm<II@GXO7kRox8ChF<K/:@,@ZJPtjW`kSšStˆr}›l„“f{lƒ¢os˜f]wGAW<:J7@I9TQ3MW0RS&DG!DV"$1;=*AI-Lb?XoT#KL(92BP,/B@3m|<<\6DAA<FX>>,?03$JT.aZ7~‚2\_PbkD~xl€º`^w;l4y„8G<!0/ 38.rz‰`Äv…†f©–#qh†BR€I©’8':2)/!67)kkh…ÌSp~SnˆK‘n8bt,”‡*nv!¬y!Ü¢&pG"GL>E>G!($$4.#!"%"!%*")1!1>67M/CQ:;.> 14)QQ+ji1amG‡Œ=€:‚”4Qk)CM/8J'RS&&"AK,Ob+5G$5G&6B(" $#&(!,!7<3JY0Zh'SZ 2>&)&"""  !%!,"-5%/8$-5()69LP&YX4hx>Pm=h{9H\EMiNc‰Nev=N_MSe?EO+5G!,5.4CB$SP5mUd…XS€F\{Ac{DRtCc‰Nˆ¦Sr‹CSh9Nh2@K&8N+BT&6 ',7&6>3Oj:hz2]i8dx;aw-AH&<I*;G*3;)"02.@;@U4>L99OC?]H]x;Ql..++)& %$$  !'"  !#""*"(-)./#"
2986!%%'$&03.5:#1?&55)??&CE5EM0;O=@C=EG8NR<EUA;UA3:644-P$"L0%<63a,&=FC2.U*!& % $
2987
2988%&'/$1)!!$90<E0&G6#/10$#'%'/!14*,=(6>0B@(BJ+IK4PU/KcGF[S<I35A&3B+*>62?($0&%+,!-;B,/BE'AN>6RG9F=8@34@3,9:18(,D'0:%-93%7#", %$#') . &))+%2 '(/-0578(8.! 01IB'AM/*G4%*!0*45&,@?<DF9JT.BW;,P((344--;J1,C1%: I+)XS",eN7K6)*7**33%2A-99'/@1.1/25%2&(-/+1"6--#$ "4%6D5?(:"#%     !#     
2989       
2990
2991
2992
2993
2994
2995    
2996   
2997
2998  (&1B@2&H M:;KL3FSF,S@.61*(13+?9UX>bGFl_-Zo%]d\^^_!Xg3AQ8,7A%/&(($ F/GP$#:+($7 BH+BlPYsCjt!b| ;J?1<5TN4fi:ƒ‡Gx…CnŠUbO^u=De"*C/^F>]gLS[H^R,]['K\L4MB0=;&K/!'"')!<?CU\CKaCCKAON7:R>3;,<8/3*'3,/>:'eM2OX90@(":**97;2Q]QXoPFjQ(9U3KTMMDk_ApAps@]}8jbSFR=`g00B10*-J2A`h@bxB’š\¨wgšmh†\xˆp@sT?JM@I21A2?E2:M8>M>::%-2*)*3<@*FV6<Q@$,A&7@=ep/^u&Uf.QpWHc4?F4\I+YT-RI'd`)fd&O@9\UOU\lXuHL`Re{h€€^vˆD™vVHXQ@^-ABED/$;[13I,:]T`‰]¸U->4MbS=~€KŒkZ£04W03$:@Rjeczr<ŒŒ<š}LÚ¹T¤°xÿÿg¹¹e’©h_j2>I4[h19Y0+2"&*-%4 +/*/!*/69;0;7M&1N*_h&8K#7C!ER-Sg@WnArwO‚’Zv[r„Vo3PP(KL*Z^(PO$M[0Pa/PT!5H2Je+CT,8!,%.4A!AV 5D+>*%9=8S@Pg.1D+$(    $"/%4%-=&9H%P\%cr/Pq?TrBl†Ix~FUv=ax;dsA`mNXn9HUBHf>ET(5@*KX*Ya5z‹B„Hk„PE^:,E@QkLxšLˆ¡Q§a†«ZYz=@O5BR4HT'6A4.C%%*"#/6 1>#6?10NCEjGQqFVtL\ƒ;fu4MU.0=(, #*&!79;O=T]5BV5<RBEWDFZ4.* #("+'!,!'&'1$&"$$)#*&!""!$+ '%!& #!# ("!#%*((+!)'"  "!!&,+"9%0(*0!05$3:+><-2G86<78@0;K49B==C<8?301-W!T7&::7K.,B=3E.<:1'%$$
2999! '"' #$%%0#(."$#"+%)+(".0&:9#BH2PQ0FR6,^JE:OCS<8S68C3:C,3?144 <$(  &!$7)5A+0CD4EB4H4*?/%:/92/0E%)<*5.' "#& +$(1 !#"%,* (5)..1:74C9=''@*$' ;$H@"IM38N3<F5@B%##5"%/C%F>7-M7/:.%6$ +"* "1* &N.CX-+DM2)(&1)(#:+ CB%8D)3D(5=+<> 7>#5B,"=*&%(0<%$=)&4$%3&3&;3: >0  
3000   
3001 
3002
3003
3004   
3005 
3006 '%
3007,$ 0  
3008  
3009  
3010
3011  ,-/2=3>>>COD7J<2;$871=)MG'fY8ZkNOc3BhVI^[LcMObIhRGj[b[Ro/\€*(E!+.#$2?8"(--=,"&#"!/$5>).<:8UJZBFZ+SZ4aX}}nn‹o:UainaMkM`OE‚i.rŠ,o‰:ˆbKiLLeI8JSlIJKE>L?1[S#TLBC&-&.3AQIDHd>_W@^WEeg1BV5B9#Y:g!’›,ž—D•£P_q%?;<?[V0_gAReO@]ES>#Z`.HYH~k_…’q‹˜`q†]…QU8AZK00-=/N<1YWS€oMo…x„—†Y|`b~cJraAo7-@-,?)4>%1=2.9/*>-(5/09E(TQ"5U+>=1"B,'/(-><!DMDbxHBZ8KL:ƒ•5lu:_©Jk°F‘¦Cš A‚KqwD^oOxDEtCv‰=qdUŒ¬t‘—wr§ƒVs8DC6aa=T]>CM15&VI!WZ=‹‡;I\<G/+:($#(6>,9<$(4#5K7N^M^pRZ’d’ÕxtÈzI_mTd°D‰g=ZZ7K65I1CN:;K4BN(<H-;"*/<21-3"0 QZ/M{$J[$<W)@PPaq*DZ(EK6]q>cwGbuYt‹ev˜g‚¬Z‚«Jq?o…:cx8~‘?›;f{7Ml//E24E0'7,$+"#%*$/,:'AM28J7<H %4&3# .6Ba3%4+%'%" $**))%426PBW€MŽŒDjxQhŠa‘ VdrHYsUn•SkˆQlŠA`k>OdDQa3[g:WmEiXu’i¶\…©Cky0io<’§[žÌjŸÉj‘»k²ÊXy>ˆŠ4~ƒ0R]0QX2Qc0gh%]]KN+@R3KV*AK6;G?CPA5PB>UFaASc/:?%!"&4*?DI];Pj:Sf5O[8>M6&") /'3 1 -!/05$1"6 2)#*#)$*"  !' $ $#!'&%!  &"'*. .!!     ##"&#!$#&##-+$*9.23077+5D21A43443</'14C!<0(,,7>!041+)(4%!+!+ !#!$)&, %(#)+!/%+%)3,'B<'=T<DSJ2QH:D3)K>28<E@9,R:1C:1=0)E0080&52'$772G'1@9&<,$3+ **#$ *)%0&!0 % *.(!)!!(#'(-#,# *003"5<51B11:8:-#=/,I)B<9&D84*"%*##6#5@&+>&)324 '(% 4$#.)'.G3CU;9N<C4$*K&'("DC'Q=&*+=-!=H% C/%(& 
3012(!!%,%"8-D<5B4
3013  1&-
3014)  
3015
3016   
3017
3018  2!25 "0#.'%     "   8$$/5-6<:6D;+76M?9Wb2be6poLbq[brN?Z9*011;:5@>:GNc\\Ma?Q\XpidjvK-\#'=822<5!!0 *>!2<*NJ0Ke:<i=kXS7ZS@LR`Q4b`=_gMl‹Q€~o‚tp|rs|]t}rF‰__@DxuNW IN„JRgKŽWnˆAJMVK!zz=qˆIgLEgT1K^58Cra2`zJƒ`‡®„~³‰yÀŠ€›ba¤7NM3DOLf`LpaKs=u?|yK‡†Bv˜oƒšs’°{Ou`AUi-HA4*0=.@4$ON6^[DYZlƒ`ysi9bH8^VIs;4F:?C$1?%/8 '5"&1*6$"1$+2.@G/8SE1=*9M/%/'MR"L^-Tb/K^Bc^-U_2bsUžŽG„|I‚„K’Žr‘ɯÀ{ÒÙ`™ÑUS‰X]]5’}c¢TcP|^LiUqg=DXM7mxI=ZC65-PH+o‹J:[DP^eRe8(./)9 ())+&,0 ,0MA'42+,5%/C!,d$-?&@/F?C;3)=2/8+3@/;N85A-V^/TQ+FM.)",1,.<0/56#IR4<K;Nk-OZ$Y^9xŽSš²6Œ˜@u˜G’‘Hk†Gv†]|‘Y„˜bŸY—IiP\tAx’b[†Zv›L–9p}):M$)3,,)&-#)((5,=L3L]0EZ'",* %8(59&3%!&!*!(&2@BWtZh’[y’XhyUf{[]rCfrZUrkOo_a€Ym‡Bkt@ZkH`zG^tI_uZ{Žex£m‹¶b¬R‘²i–Â{ªÕ}±Ëm³Ê¸ÕmžºV†¨bˆ©Ks=kƒAh‚]i…Pm‚;[q3Rd8BM5Oe/W\',=)+:/5H>MsH]n,FM.4(+'2%4H6=NCHaCZm:GU0>N0Q.Y/Z.a/X0W0V)M+U2[2 Z0^4Y0 N0O+N)?':$0"$!#"    !#$&      "#"& ""!" )"./0:,/5%-8((3'/0(,2')',!"#+81#$%+#$ "/&#/#*)+ -("+(-/,2#"/,!:*9D!BD9:J8.IB">55=&#,$2%!71,-+19)&6,.2.!9( .+*)*.*5$98,6A',=%0 #/$%2!+0+7/'7,  "&)#!'')%-0)91+#70)/3%/6"2:+&3#!%%" %')+"/#'"#0-3?HA$H;(4C<#85.(1  (1-5*,,./ 
3019  
3020!!%!40+/EDH/A3(&4( 6)+=J8'M1*<2 8> ;C/1=!'. 
3021
3022      
3023' <74I0#1' ( 
3024 
3025 4 DU*6@--<0461%<.N4$jlGeqVanY@`Y?D\CRU%B,!%$/-+(7%/dfRDb<FRJjf_1[R(5%#</.9F3/4-5*'*&$&).3LC":X:1A6;F08L8*?8./2VI>^hK4cH\T^ymNp„†vˆvf}hopZVi]DyLbKX&6X6?F\Q6dtfoaaogD_]<qm^lkAxY9B8'=']F3VkD“…YTsOvv7Ac5:f<>Qi‰hX\?Yp?:uaf\Ytym‹‚c™žv‹¥z†”^”_q}`fKUU7CC,YH!,.$E7/FiBHT@u{DQsSieO6*.C*"*76>)/>21<%6A#)8%078P-5HR03_/*=(8;.:GO[!ae6fw::[:BY3°²A–?NdN}–wœ¿u€´v×옪ÿ˜q——ÿÅ¡‘ª€€€X‚£Wx·tŸ‚€´c‘´B‚{Ae…IdvLES]/A136+6>:+3;6<115<>K:FX)]`+”z&¼Ž DD,ef(DJ(K<51 5031/=44>;12B..3$8;EL*>K,VO4CE6bc3WX'/8$- (,*EG%37();+8D.0L>qƒ>t£C‹±`’¸blš^b‡Uc‡Wd‚MbWe…XožOp˜Zs–SxˆN‡“J¶²U £N´Çb~_a3IW""+&*,6,1'(+-MO,Ti2I^0(;")+CBa_&8\ (<%,(1$+%+"   ""%4IaP_yUZtOVxHYzGRmEJkDe|IRiRe{bq‘SoB[sCIcNes\…¡`Œ¨b„®n±t‡¹o·u‘¹~|¢‚¸su™|sžnHq^KkWJjWOyPVzSk‚bh‹bOiQGgDNe42C23HDYv+IP#BI%9M7RjP]z?]r2_h&N[$MQ+>L;BY?JcHQ`BGY8G]7¦K.¯G4±K.«P3¡T8ªK3«H6¢N3¢K0®J0ªJ1©K2ªM4ªJ9ªQ3¡M3¨K2¦K,¡H/@(};'v7g3P/=.+(($& "! "    
3026
3027
3028
3029  #") )(" '#&*+5()/%%2$#,$'-!))-*(198 !    !&"(!!  08.39%,7$)5"%-$-((,1'5!.0<,':(/- 5*.2!-6()$&"$ /. #:&.!+'!$&%%( '/$-)2&0;,7)&" %##-./<,;($4%+#!!(%%-&"(!H*CP%5D.066@(+;+66'1=#/2#2=!7"!##+#! 0$*5$2"@-'K2($6$!" 
3030 
3031
3032   &  
3033    !&1)0$=) 1,((-, C8%2C91/.() 
3034 
3035
3036   $#/90'1+")A%BG H>A@$#-"
3037   5*3*<-'2--+(4/@'$QlTOm^Pd\[iKem:ep>hv6N^%/*%,.0@APSY_40`I7IF1G"3U(?D'0C2$?,-%M@!onn^BH!*80/7,'4(BG).P/:)-2!M>)|‹Q{‹2bs8HbZcl_kˆsm‹baue?[NHKNN[U/T!(/)0;?COQl„OglO_A<b†[!Or'B++$SY)Cb,qdKc~€UlXUZK_w5gv/W^+n„Z„¬SbkQscE‰ˆJm]rkfxvYp‡Vk{FZmBFOCREHCJ9F1)7<99%;H/BS:HM'kwK]lALmD#4.%#%7!*+,1(#4$%4$4;%!4$42*497L724+,4&,:0%11!/? =E.D@#&6),{bz”›c‚ŸCwšez’}Ž´e’ÂѶĘn{„áŒ¬Ž»î…m¸rp„ccm[Q`wh‚„¤m„¼X]„JLJ25C-6?'E7%BC;3)<<)KK,¦‘5ʽfm°k¾£hܯ<ë¶:o,bAY…,Re(IR-%1 :<(9E-':'G4"IK%55)E5*kV5^]2Ra>HW2eP O@40*&4*)/&,5&,92DTKSXOkx\s—dzJ‚šMˆ U‡¨M­O‘§SuRy—QlU±ZÁÜuãÿ}Õùn­Øzˆ·_™·H•¯6†”HJU^$WoKRJ\/_{BOeC:Y8Ja_\zu-[}1&@/ %+)9#1#1>09#&$,!$'5>?Y=A]B_€Iw”Diy?guP‚˜UpŠL_z\nYt†Q†žT™£T–¥h•³u‡«ch”|{¬r€¤w€¤kJq[,NY@cZOa]P]B9@21>32E:BVGMnO`r^[vUTdAJXDH[5R`'AD65G;Sa/@Q.AT9:T?AZ@Bb=Ro8Ue7Lg8N\6:IB=QR@XCAX?EQDl=FxCIz@D}EB|EK‚EKƒFJ‰JD„DI„DI‡FH„AQˆBKŽGLKN•MQ›JJ–NM•HMœMQ“MH”GC•K@I=ŠC9{A6j>/d6%K6"B0#*,&%!     
3038
3039  )&+% "$ !)$"$!$'#+ $%&#50$7" 6"83&0  !""%.#*!&"#%! #-+-6'35/.5'.8!):791=/8$22)7!/*$"## #'# &#6",A*2%"""$'-"$%&$2.#  ."+7%"6,+,&&%! %" & $)! ')6D:AJ54I=3>35E+2>958E># H&0&)-)2+*#") "&'*%/ +#6*1*$
3040 
3041      */)& .       '%5Q7KZ(F\?*L+)  
3042
3043   *#2.(IA$OU$Qa;YZC^]HM^2!7!'  
3044  .1#-C*&4)$6"#.**:$<92>EN:;hH>aSBVV>fV WNJ@5:Q&+-)7/$'BUG39376"9E&&:!U@6CV&(7%4(&VnHj‚hTx\0V!'9;0&=7#6'79>N*32-X.EjR_VQzAC]K^nobzx^†`X~CJX7nYE>W2:?''5%,4-0BRZWS‚z7Sta/H</œn¢<drK5iZ_VQ†RqŽ_nfIx\ZfK=<OJhxOtb\_p„oxš˜f•’w¤ˆ]¦Kˆ‹;i^0GN.=4847/PB,EQ)5=$E24JO87?-ETGccJJl;*1'&%$"1:!)1#*&%(!43'$#IA,.C+-4 '@93!+? #/#4;-}v\›vm²y||d}ykcƒo]ivxµ³a™˜‰zjhcšî¯v±Ú`_ƒA>Q<ThJe{V[mb†”\XzFK†<R‰;a”=y+ls%;I-©„B²¹{èõ{sŠJYsaØÑ»‹ÿf 1@Z=J^>Mt59Y9*GDF*MT%,.&6D2:>+2=pF*aK;>;5AE-;F.DD);095)53:E$06"&6>4gs8~”Lm“Tk“^†¬]š¶f›¿j›·n•¸c~²Rw—Lt‰[fn~¦ Ü§ªê‡§Íl`~ow›m_hm©Su©8qœGz—<y3d{@JgC6@)ZZ6n}<Jc5*G?&.$,&7('4%BN!&  $)6H4Th=YgF\vVe‡KT{TH{bRuOKd^Wsfw–Yˆ¨m‹³ušÅgk‘kcŽRTsdg”bv¡`QkD5A46<+)8<7MJXc8Pf2Xa0Y`2FSAJ[GJkSMfL[sUt}Kj}Ix‚=fu(]`0Gc-BS-FX-SX5H[9H[<GYBG]<D^:H`<KS6.<9/B=6S>CMGG"3D":B%8D$7K$<K&;H)<G(<L'BP-;R)EL+=Q'?V'CT/BR.@Q,CT-BX2HX,D]/E[+EY3B\3E`5C\2:[0A\/4_22K22,,."&)"!  "&$* %$"
3045 !%#%*&--*1#2*%*-5 -&&!% "+()4"3$))-&*%./(//*2&-!),",3!)8$-4"6:";*&1)--+4 2"%$%&#'-7!+;(," #(!"! !"#$ %# -(" #!-,17/$81G-%AG)0G'-A!-3,/ !/*0)#<)G@IKZQ%=[*?'
3046     ""  "(8- @6 A=/C-  %=6 =G02IB6AA>J:(  
3047!:=,30 "%
3048#J<BU,%RGA7HMUB3OIU\K:P7?>7B-
3049   ('*+%'%",#";2!,2(*.-& -:5!&%#71E%-0A15Ai0:;AM4*H)2;+;IF@#$%A1a3O',"%+=$(&/35UW9}Š4n|VvM_5CQ@5D.,:<RX?5VDs\@MsC?IU=MC;V1+4#+9(E%,@8V[Tc€Pak8W?*±Èf¢¼‹KŽk"*7?A;[n{pzwd‡^{’r¡–Qv˜/‘›8€Ž>rmPyiqƒgn{†’ƒ™˜ˆƒšxs\J>T6-B5!,""4/11D@*LH598</7%3K1NcA8W8EM#%4'+1+>!+; (5$$(73)HJ-L213&,A'&2A(:;5C//
3050&/6&|Z&Œœe‰Ÿh¢_ ¸fÿãdrÂYmšGeveZr\p”jS}`XwsŽºØ¸Î…ˆªGnw1‚ˆJ^}MazOVrgDRGMDBNGJ5>N=DWEWYRh4GVdOtyy€c=…p;X`ˆ>UsNo<-R/ 3(&!'&"%,)D:&89 :7%,-#FE%B0?OK1UC.B;)=6$C;#^DQGO?^K0Pn/+<445?.PjP[„Of‡DFbKm†aŸÐmÐlq¤hj—ct•VT}??gC0MAMf[§z޲t}“\_ˆIX‚R£J^lKj{L^zZ€ _ Sm~>R_)=T&@eGƒ•AVg((0#!+$+/.)((<$#,
3051!# 
3052*400N<5LD;ZH5RE-D>);=7C73I;ASW_uZZudo†gab‡¥FZtFd‚F]wVRzIIf1D[0Na-GO*0AQM`SizJKePpˆDs}7Uf?fu?L_Ka{cj…cl‡`a€Rg‚=z‹=q„:uƒ=s}@:Q\=Kb@U_;7F96V>EX@H^3BJ66C@M^J`qI*$*,!/ - -#'$-$/$+&0"/"1$0)2(4'2)1+;&8+B*B!(A%/B!1?".A!.C*E#1;!.-#.&#)'+!&!!! #$$"!& ') 0",#)   # !!$&#,%+-, ($('(/!+& " &-%65(I 3*.)66+:#-6!:7/F!$5")-!'0#).,/!3< .>"#:)#,(*#- !)#-$,3%.*"-$ (4&8$ 5-), "'((*#$ 
3053         #/&*6- 
3054  &+%5-/<-0/70-" 7%+(#&'#$ -28;.:C:@I7#KO#%3.$*) *'&) (  
3055  +%7!(  
3056$+ %+#2 " '%>)P=GG!F29(&" 
3057  
3058 ?LB DS;L(DQ7MK37N&'5#& !5/#3);'$:AH=BX7YD7N_,&7
30596SLR['Fb 1'*"63 (7$&!!"" -4?2*.@'PP@CV+>L9/B*-0!2A'&R0  %(M)%T0, $!&,,BV+HO8EK6F7.83$:+28=B)6P64UM>G91@-<;!49='A&%' ""')8itaDSEia5>L}8]Šd‰]E\ 7>&DFEbk^=TR8EXa~‚W€n^ps{‰m~‚p—³}›¼hEj@>Zmi…}€lntg_U[8AR'11""7-A"HA,>Q6=@.,@);G%LO41],1N40 *,##1"',"'#"(-@K%GV,bd'8Q(+=#.7 2=14A*?B$JR'6:VA6¶°_ßõz·Ôiš°fh‰y¥ÿ½úlŽŸdžWk›Rx–WInH]lPfiku’ŒÁ}UrYÅSgv<ci?^rBTk4ÿ¤6‰ƒ/po)\g3FV7a^Až›=”˜MÿÑp§·dz­e?]8#3*%8$+$!7F=6u}5h‚J4L%PS%QU%ph-©e0©s3w5DQ+,0%76'H40@9-$5':6>,=*-; 8A#J\'E\4N[?]H›²3†žXŒ°pl«_n†T|—Kw‡Jg.6D"(?),F<`‚`T{bKgSmƒ>NaJf‰U®E›ºUp‘Qt“m¤½^¢·Kp“7Da)!432OELl-LO:A%,&-))1$ * #  +=BCK5? "2)**,+.'.!"1#+;&1<-Kc;l…H\r@FbYkŠkšVkŠUt—KlŒFr‡;Zg1Nc4Vl8JT(CKAQdXk‡LWoOg…az•Q{‹Ns”IrMc„Xdƒ^l`™Z–¥Q|MQvVw¥OsQ_|DDT8APHH]?V_)@P7KcE[o?Wi9G^DNp\b~V!       
3060  )0!,'.',$. //.!,+!(&*#()('"''##&& #%! ') /&##  %"!!&&)/)5/'$$# ( ,('# ")%!:*7+,2#73>?*H),:0)8!':0$1(('!,,,5!182; "@")3**70$ "&$*!/0")6$0$!* ()2&!&   " -#(4',!*+''   
3061       *!&,$."  !5,"7;$ZB'*C(-# &%#"$.(',>.#<5" #"".& 
30620 99+5,'(.."#", %/!% 
3063   P, TPMIL7KO!>M8/@G!.9+ ;* $) )$   
3064!
3065-;#87.9?1?C!,3G09CPC;D2-8!# 
3066
3067, ;%'_Y4\c?Y]XP[=JI=EVX_f:hoOTmPBR12.&3-# "1  %$#;? 3.H8/]UFCW.3A" 5 -2",(
3068 !%<$)-'6 !-%$%$-$!1#&D5CN)H?0HS2HJ2WS&}m5‡~!Eg2BC! W1N;Q8MRECp;0;(3HSL`75>0==-@NH7T0>E!_jAM\Hƒ~Mm‚`Yd_h}†ad{t†U,;837?e_Tkyaž‘C?V*7I!":IH!M[6@U5.D+/;!=')8G-1F,(+$  "*0*058'9 !;/.z‚2<C@f[(£¦!m_ ¢c#Kf+KL4>T3US-‹—Np‡v[P™ Æ¡…·~ršN6Ji=b¹†µtFWp…Š_Nˆ[^r>n„P^}V:M[6VieWFxx‘‹ÃR~¬LvŒB]ŠQ€®ð¹ÿt~’TzyI~™'†u?zyªÓ†x®¼z¡‰Mq^*7-7; (0)PGEC.8&KA9GNd<VE+5+Ia@SK>iUP…‚i„hPmgO`u(`S$5>!D6%NB"C@&->54%B@"GL/Nd5Gb)Sf1ayLW‚h‹Èn±ãc“¼CYsH{šZP‡Ul3ZfEJ&//K]NFZ//FE\€Ur=‡ \~ªhp§a_ˆK\ƒo«m‰ªcDh<'7 '&)-B8K\2Qc2=19<?#.&*" & "")&/>L(az;Yv.Mo'AP )'1*2)2.6 ($1%3JBQrRUu=UhMZwuKgN9Y_d‹^u•QoŒNmŽ.BZ;SpCm†4mvB]tXasVc„NcˆflŒ\tOHv[kŠVn‚OvŠUq]tšf€ªc{=?ORS{b{›SnŠBbo>EJ9=P?Pm8<F35IA/FK;WCH\O;\\K\O!  "          / 1/ 36 .3$,+ *&+&"( '#'#&)"% ""&*%! " !"#$ !  "$(%  ""'""#&(9#C'5-"+'!* *#)$# #  "'$*&.&/%2+7(%://4--8 09*58#-8/?4:2;"+?"#7$ - '&" !' '%%"/!"0##''/!+)"# ! 
3069" !! )* )   
3070   
3071!$  "" :& &@%.%+1$)6:#0'$(#$!"#$$$! '. +/?05@1=.>=17G&&7&&*$*)" K-PH"C 
3072  ,2N@;RS=MN30M<OK<)A(=8FN 7P$FF0:P$$>  /;1.5 01*1)%&027;@=E69A-:520%  ;(NU?DgQX_UbkJUbC^o9Vd=cjRau\BbV+2?'A4"/  !!%!*"+*-2!/&%.<-9<BQAHK?%I+$-%#A,
3073 2#
3074+(3' .!'!  +*$&$+,%+-IL?\U6=EEAE]Ael6aP.KE#9# -6R/JF8G`;WP?B#KP@1P+95+dc/4V)(,))4DD3Imfj…egiP˜”c›´X[xai,G@%Yb>HDAGRr@QBJQ':;8K):@1HI+2@"0=1,79$$6$ -$0,0=¢‚k­.*A%;3HH)5@F16&gfJw¦…ž§Ue³tpl9RY5Xe4xr;{lQnTu˜S™¼…нvj”i^…:P[3LbqDeF^~jCMGlxMet`|“Om}*y{<OrMc|NLkXHlZQdRo‘Cr†nuƒ‚ÝœNÖÉHÁàU±°j|±gFa€JHiFO[X_7dl ][$LNI=(›YºÙGcw#‡H«ÑR“®*—$OL/`_@vsBn^KPTH{_FTjGUU3NM%GI+TL(`V*5<!GN(WV,dm5Ui7Of3HdB8^4-H82GV9Zkn˜]dŽD.RD7@CZpSc…Hnˆ,+>&F!8+'+ASHiGX…\[€PLoFE\8=ZTbmhˆQA] '.&(/+G^,Ja*CM=M hr"^g!cfTdV`CS:?!,3',297HDY'l{>e~EK\21K4(;& )'2D 4F#,= +1"$-86!=@Jn=7KH-B3&:?9_ZZwT_pQX|=]u7D^CBeIlšF[uKYqPYqMIlRX_dƒHZiCNlMWoQ[~OVyU[VQu_\z8Sc7Uhc”]rSUwHOX.?KFRgAMQ*/:-,/5!,7"7@'7F(9:" "       
3075 
3076 +7055)4%/)%3*2, &()'&"!#(%%&"!'" )(!"%#%)!+#&(!+ #'#"!!'%&",&+).#,%-8-A,B)70'0'$,#/0")#"*"$!!$ %("'')"-0*8 .74:!?D":P*0H/6?&/C#A)!6,"2*!% ((& & )%/,!!) , )!)$  *" 71 %<3!$$"% & (#%+!"    
3077 " ## "%! $* / ,(+(#2$+$ )" &!1-5>6#6!.451!3 !0! % 6-=@ 0J$EA69Y4FF*4K8?E26C"<!(''9#COA;PD/C#,=&")&%.9%,@#+;+&9'9=3'$2 !15&!5&!-='0A! HG9K4=L07G,&4' $+,84*9?&=G2/C/*8,,-%#. '>!EZ6H,1@7.MH@V[>RgLMRVQfQK_L5cQ;QWAH(&*! ( "!&))+;5'E(%"(##-&^</3N00@2@C/,J3%4&4*  
3078,!!'&%$+,48??IDG'+!'"&",!#$$(&C.QM.L10BE7H3*5#,;#5=,!$ #GH9TW8pp>p€Gnn7ecBg^)fm*AjKN\1<P!BJGL/JW2A\PpnPwžy’šˆz•V††as BWm?¢B¼·6”˜6\i6*;092'/5--@,/6#_C!<Q'G2'%1*&\D®pÃÉ2¾ßu˜Þdr_‡Ÿ³ºF¡Û?s’'BO Z^JŒ¶Mr¢nvS{pI~…Fƒ‚=ž¦U§¥X¤’<¡šTÖôz»u`‡TMlM_}QkjGIN;T¹ßKg”w™bbXumVLe[:L6‘œCXj,yw0{r;DUF†kTͽlÄȨ³Î”£¸„¥¬mRmFf_1XyA>TBOqQChNR[JZb>bV6ŠpaƒtÁTu¥N`VeNQQZSIRL,O?@SEEOnJTT;\YEhj>Q[4GP,DK*DC34?+3<#ET=t|;_v=DW29E-9G*"'*7 +G-B/RgL5Z9#*+5/CURVoL6;#&-$.18 CQ8g|FYn5Ml57@+?R75IH6KJ8Q(3@?SN<<!@V,Cb+Sc&L_.UpCPrD|•;7O;Jd9Yi2Pc HJ;I BV#Vg)Sl+t‡J•¸T–»D‚¡5y~'R`DL)1""0&"7'&!"!!%+.E4Ne&(-! (+);@<UCIX5B_Ba{<Yo7LdETxUo‰CYlNQkEVqNq\_|Of‹AYi99P=HaAFgNmˆOc€CK^@K`AWpOip[bsGC]KNn0Q`:Oa:IU#7?%1>,;B(38,69+.3*#          +
3079,()/"")&/'#3++1!$,"$)$)%%',**'%%( %' %$ !#")$)!#$#&"& *& %$((+0+/(2%1)/--<& B)#.+)0" 0"3!5$*%* !(  "#!$+%044:;<*H&-@+7:&3E,*?8&:767*'F&&891/#'@(2 5$.#/(,%3&0!3*+5+.*1)8%/"-*,(9#51&)(+ &)&"#" '%0+75(9"' % . '##&&#($!
3080##*-,"+,!+# ) # !0!.728!:B"99)31*+1'&04.;#0.%8449@5K $F44,65N.B@@2Q3/5;.;0;82EB,$? "% &A&+)D8(,1 '2)))2(5*0!%,58)/ ),3396IB8B+<""& B3HJ$AV==T:7F2@C58G..27;+A)&/,&/'59,-?',-/3"(7!32AQ8<J8MD-NO-AJ=1<D>=GGBA<SF<K<GX8EU4B0'(%
3081A'DV0I#$;(!*3& "!/ ,;(;S9@M(.I$?K3=32T40 - 75(;%*++3913G$+4-0=2?R201%RI&/:0N=tl08ŒH$'.3"554%+$%7A44"A# YHin6if>Š„U{c€ŒU]PSRYTgxVouJaa;Qe+ii1Qf2^Z2@U;Q]OU_a‡‚j‘¤g~‹k ’h§D–]™Ðs«älŽ®SVS"IX1+:&+. <4 (,5R4-C6"3+I/"̘Y½Ä‡f“‘b|–X{X\K]p[´¸…|µn~“_s“=Œ”Hn€epbR¢²i—·[¸U¡º]s£~Z™šš¶×ˆÆÞ¡y¢]dlJ_‰:\nTvŒY[zF{f]°……ŒVUpi5_SHhh2H/3L0Misž£J¾ÕfŸ­d¯Ã4ÍÊnu¥‰½Ò—Æ€…”‡’ŽŽ`PDlGKa>jh.7@8DG2oo;ZkHVfVdudÍ¢ZöÚgqWPV?›F@b5=9)</&qQ.GO6T^5;K;^_9LM-6A(:6$8<'+58G&6G6GUDQ]8P`-X`!AE$CDRVRS2>!8C;,E!.5+A #/92-!#.77<ST,{>lƒHmˆA~8Œ.q{&?I+hm2Xf"ce"jv(_p3]k%>N)?O*I_9Ok6HfDEdFJi=9M+2D=C`FLrESr/;W3Xi3h~9f}:Y|Yf‚hv¢l‡µa¦ÖVªÐE¨Ã2fr"3& %-*")!"'#"//(>,BL&,3D,<P4AP1EW=WyIax@WsAYxLi}G[kAJa>SkPtšU›Mj‡St…:ag2Yl>[hDPpGB\@Oa9IY6<L;8:CJQ9Yk?Tm=ZoAVm>w€1U^(2@32E00;/#2&#4&! #  
3082      ! $
3083)&%&& ("(%(( #)&&(&'%#/')-,$'$((%&!+&)(($*","/%*)#"% *"'"+#)+-++-0. 3381A$"?*2)6#2#6 <%+'!$()$(3,6:->.>$)<"*5)&?,.4+%:!'6* 3,+"&)()$+&2 )+!(.**(*'(-,)6#5%,"/**413>#3>,>#'0$/$."$)'+'+ . &+$('#$$&!!$&(%1)3;0<,.1%*.."2014%9 !" & 
3084 # $($%&$/&8*#3D*6<'=@':I!2L&*9+,9 06'229B(8H,'<.1?!8A98G2.D6I8%!I%#**1,,+87,3D1&=(.5)-!*3<-,@,*4$'2"3,(")+*8*0D-A%37/065+:;=6(8L&27 /#/9"=?78E8)?6.;(4@*/@4-.&'9&+%!,"%" -)/6A+4F(E;6A!A1(3C384.4B@,A8201**:>1-8:580=C7AK>0F3*#"0*0#%308@>'L133"...9/9*;S8&S*D7-858<)PK/8K")2 2 <E3H7,1,*842 1C$0D6 2"!%(" ?9fm??&$+*6.Eƒ|K–ª!H„*JJ9,A$.40(:,)':)8<4TPL|W>ŠsOrmZvl;cC[‚8BlBTY[goJ>PBYtRzŒJnyM}y:evAmq<l€gsyl“¾v•›v>^n)]o<?c™‚q «{žEJz< .)($,#!00"Q9$6<"|O2ŸÑ™^™šMbM†~VymNHW4JX<T}rUzb{xW‰ŠQZˆ]^oYW^FÕ¡ruœ‡¤|dyGkVhpK£¯‹¡Ü ‚´™}¼s¢ºDœ¾Gi•EbXvŒGh{QvoP¬h_€@NT.<U4°–&¯™+îÚRæÿtÁ䉵ٚ¸µt…¶cm†‘Åá„•­nn’TUK.V^3<ND<Y0-F/BGH8J=/@:6;G†«Žª¯l‚A{†>˜ªme‡(-)"IC)DN8?>/Jg90>'3@8<?+5E):C(JU!9@'3"(9#CU5h~<iŽK‚ž9`j'5K(Va@9W3%4+##& -$#("(20CG!- MZ,wL€§[~›Lr’Uƒ¦^˜°Q~“6Xr+CbM•²F– IMg5Z`5=P-<K"NR+\j8mr/Zl0Va+FO9Rc'>T*2F6AYBhp=Wc8Zz?v‹=_u7Ne?WpJQjUTqcP…xl©yÑg‡¥+,;%3>$<J 03$(#)%,*?S ;<'3-:J(1G':S;XzP_yAPlCA_UUsEHgEKc@m’[˜·_½QxTsœL\w=_wFg‹Hlz;^j9JY:Id6S]/@B1IRKcyCRqJbsDe{Gl€EZo4UY08G'%4$#,"+;' %#$$    
3085    $ # %$ ( '( '$$ %$(&+++(,$&'"$#'+.$%$(&*#-,&+'(#!"$'''%#+!*%.-+, ,/#./#-1"J5 ?;%Q+!E4 6,$:%7'3'3&*$ , #( ".3/<8!4?$29)28 67-=$/5"*9 +/!2,,#4(%%,+/,..-3"2-6+.+3..;1/$203423-5%2&&($*.&(4&5'2#01/7<2?!8:6>&?"($%#'*$!#".&33#.9'%5)$,#)%#4 !$!(( ! !  J
3086;0&!  )&2"",*):'67,1@,#7-/)),59#)J).?29A3+D.-4$-2'&2),02*E(-;@$.!'#.%!0#13-4J;0A(7C-.7+55#+>8!4%)"&!( 8;!6L,4C2,:--/)?3*8O1AE.DM>VQ+?U*.G#/*))5:886!#%&'!%)%$)($+/$4:+2D9<=D95E--B9=O=9A-@D7@N*,E)+-!*0>69C/8?,)E)*4,.028;/@ )90C(7''&6+$$+&#-=#0-&-<'),)<G/A/ !)%%$IP0#C:)3' &';;**>36+ :$$&-/"3HL,*/.44#FRH)?*   KY=†d{DWc8_a08U69"'@").9<5v"!%)-0W'3F+74)95A/3LU>C4Gn=WmCXh:ZhADMek™aƒsg›©cn”W`aV>jBKcpNmk/F,7E$ÀrœŸX«»x­ái”¼:TeL>),%-$N8O9)…tI‹xd”s>z|4·¬xµÖx†¼IuŽ=—›C{œSo…T|¨rqŒP‰“WŒ~J¥º’ŠYp”eJaFpk1}œQP˜=d‚GH[_Š`Š‘q™Ñ}˜Ù[b€–nƒš^‚¬e\˜}t¤S0R>3=4vŒ˜µÙ¯êÿ¨îÿªŽÈŽ‚©‹£nj…lOdY†qZ¢¾ƒ¯²¥Ã‹dšOPdNkh>ÒÌ(¸•(»Š ‡j*PJ $5""5+):F&/N>DQkyV>W`mp:MI"**%-.%++*5;225!)2"/3")/#58(ED-0=5<&3"(87,=?=MQLeIEa2=@%>L4,1#&.#*)5#,+'*&9K!('u~Mi“[\€l‡©`kdrŸoT‚PQnLw›9r†N¼o“±Zpj4Oc9ˆ“4ËÇFÌßD’¤O©¿I¼ÖD~¦?v‰1OX75H":J(<O;v‰J[v9c‚P€ŸQh†4Rb:F^67Y9Ol<LaIIdb^s~«=CP#+;3H:)< " $&#(!2E+CV 09+/:#,8-G97QKNg?8L3/A;7PBCZ?GjL^€mošxŒ¹tš³dšK_sB8VG:YQY‚Fh~Fx‘?‚–Biz7JH4FXINfFLcJ\rBZnCEbFNf=DZ29K%.7*4&;M5"!'&!   
3087 & %( "%!!"$(!$$!$&'(!''&&*'&#"'#!&"'"#$$#,#"/!.',*-' ,$&&((#+'#'$)'('*(")-'+030$76'[6(Z<&Q:'I6$<(%=%/,&0%$1" ,&1&#'$!"%$(,*=2"5<*;<'69$9=%2;,/:"/<!25 27/657.;!68::;74;*7!2,827/3165 82 8;/?$9;"86$<:!7?)8$067>8H 6?"4598-;$59!9=%6K)'44*):,+0'3&=02D"+7,&+. !  !2*,0-/#& %#1;((0&/*$"$)$"$%$!!$#!*,!$!!*41%)G- ?+)/9!8%"*!0%(+&&(5!#1"$ "!'!!)$/')/'4%+1D:&E+3+(#+#)$( &4-7=6:7>3?B*)>#$/'*#$4#"/;$2HN5>PG&F7)*-%"0!%+")#+,(/B/?%%7'3,%2=1!8(%&-@3.OOFY,/E$.8,H73DX8AQ!BS&:M0;A8&9,$1& #+-"0%! "'''&*3!3,!-:)>9$/D'
3088+-#7F2!*.,-(+/7:3;,8&,<+5$$$#54!=:PA;DK(==#>V$MQ?-g5* 60 )2D8^‡Ul}HoƒE"C)#,'&PR1C.22!)) "2,#.(/'GD*>T'1A844?=G@DR8=J)CGNGFIuˆ‚jfˆZˆ‹5]l.NL8H.,'‡Oq¸ÂšÔŽK€“I^`?NEzv:7N$.Os*ˆÊH‹s*²ª]ÍÓqw³„§šV¡¸“_x¡£”І¯ut›•¤¥k~†Rs–sUpvxvЇ©|u§€p‘jSƒWaŠ6–Xk…g@WZ2mq@xK™iФ‚‘³o™¯[‚™hy¢dLj^MjMYmBLZ1IO0AVaz’¢²ÆÛËîÀÛém˜Zg†gzšIоP÷÷v•º|uzv‚ƒjzH1G<BRVvzª[¸œ·å›Ëèz—¦L<S6: 0? /1FO.*,;G@*)25#/"%',&,+-/417!>E"34XD&6?)TN"gm!HH'3'3,7(>N=l…:]b1\_('9.!'!%#&##+13s†ZDX@„Š_‘´j‹¥Je{OŠ—9’¨Hf‡Tn‘Le‚j˜°_–¦?‰{Q¯uÂÀå¿Ül©Òo‡£oŠ«UŸÍP­È6~ˆ'`h)JXA_xTr€6YyV\}UpK€–=m|2Zn4Yj8>W27M;)GOAiWb‚ .8%%+"$*&-040;*7G&8D",4&,!1!!.5':,*9"#,&.996G64SAKgSRd\CihGoie’N`u7HW@WbQp„n¶³nÎÉ`«¶e³L‡?c]FI]ALcL`~B^oBVl6Nf6Qd/;I(?G08.:S=#%!-%%)!)! 
3089    
3090  
3091%#(!+"&"&%$#)'&&' .!#$ ##$#$$#! "$$""% . '*%)%'! '&&##,"%*#*+%++-0-0#;2#@6$h3)W@$W<)F6%@-!7(0'#*#'# %$ (/*0/%-0!1-#42',3,/,+--%0#.,/"/4$*6)32%2:"*7$'3#,-%8.4;/; 33 19"37'/8"16(23!48%3493%-7(01.1;9(7C)*;-@1 59#72#76$@6)78%:82@/8 0275:7"4E/.@-*0&/+/*4-7/1;+3#</-61%/+.%<50@56#65# 7$0)-)()!$$ /#'))$").*.-0%!& ")!+"#4'##!-$%/)# ,%70-A:A&8,1(5<54G(-52=';04571@.=,'75(:-(:7,,9:0&L$8&9H*GD?;P<4F4+@.9*1 1% ) #'6.&AQ'7A!:4#GDB]:Q;?P?=]8-/"3;&*;?-01(85976/=10,!!#&&  +.(1*!!1&+#/&,-
30922:!+=/+7')1#.%B"*L$/8)+1)6! !%"/0<;)KJ/c`DlrADU/>H0PP4&D6)+ 3< :D+5@$<K(v[d™‹h—›[|6fx­¥  ½=„ + s$xAX!%:!.131?,%7"*/#2$-('4P-FR)Ã/‡¸b´Éj}Áa}¤o¶Ëk–¤C§Š©²§I‚xy ÀŒ‹ 3Xg2MD%3:$,;:V$(%V@GviQ‘˜o™¤™•¢e¬¼É¤ˆ¨Z±“u‹«m|…^¥x›ŽT‹tZl}Ea`aKdTUaXlxEÜ«2‰¢B‰dž²S÷ì|»ýD’©Y|«_XŒ\l‡b p¡Çw“¾m›ÃY˜«AŒ9ÿåQš¸90`g7rˆl‘§£šÁ¶­À¸­áyw]<ä¨lÕÝ›¿¬¼ÿñ|¥¼UrzPCYM+4<=*qpQ1?:):D`ŒeoL7T'234@^-Tu.1F(-5#-'*.67(0&+!%C>+= 79$\Y+XW"=?2E`6-N=IVFVm4Z_'2)$-1JdYeŽa(F,#$+'+ *)VOgU+-#"'.38U„€6av_t›kjŒ]o”MgƒR‰¤OTt=E[7JTNq†cyŠSe{Tx…jÄÖx¶ñ{Ãx{®fz›LGiU•g|¯hˆÁ_ÃíH•¤;q‰O—9dx@eJoX‡ªU„ŸJh…>B\3,@') **&6<+@1'6&)!!)2".;%4>&.%%/&&"*!&- + *&0#,$102O;A`:=V>AXOLsRo=Yo=>\RRx~‰¹––²Ž¡|ˆl|”PNbDOaAVgGGgPZr=SmEQj9Ro1DX-@X+GZ1DaA%&#'",!.#&!
3093 
3094  
3095 ! " " *'&" %&$#$"'*#"#"%&%(#$""$"!" !&"%*#'"'!(%%%((#$)$)!)'-*(/!).#B/%^1#c9 LB'S6'A3$A(#8).&!+!) !() !$*$*+ )'#($!,#*'2)"6*0.1+)(&)!.)#/+ 1.#!0&0'#,,7/5>*:'+8$,2!-0 2-"3/$00+5 .-!,230#6-0927#-<19=.?;9@",8'04%4/.-#-0%4!$6"04-6*4&0)'5/$47!1-713;96":,'/.?+17$53 93390<0:&(2%','&' /(+3'/#)242 .//(0/4:.:531:::=E*=$214?B!EC2"$$  )#.'/": &.$+1.80C+1@--C)49+1?*>(G6T\*>c-3FE=9Q#4@!AQ2=L(EI"CP4C+@#+5 8/-;?%:!,4*,-5:9B>?+K-$1$#)-!#$ 5,A?HS'BL6/O-++07110(*2!*4>%5A()8*@2BN).?!(8+&3&"%% / 6=6>!-A&:&$$  ( 3,;40>+49!'3'!!%&*&'!$&%'0#4!#' .149<@&[S&Ib?HMHXVSlvNSj5GW3.S5^JLa5<%0@)07*J;$Vq<Œƒª…®y›^]›uTjqƒ‚«²•¦Â‘| i,Y""+%%%#&&%0/"c8–Žruƒkg€wXxg:CaJp‡L\M–„¨zŠ`·—Pmo_mŠŠ‰–®F”‹B® %G]gW)nw$dg?ôqŠÝ—e”©”µ£Ž°ž}¬§¹Á––Ä•‹‹t‹ `ƒªcЧcU}^i}L†ŽdŸ®P¼ÎMÀåVc¦•NzlбVrmPˆ“„ƒ±›«hZcX¦u9¬Ð`§Ð†ƒÃƒe‹‚Ž¡‰²ãÅÌcûÿ¹éÿ‰¼qt„R‘¥h‹¤nЧ™†“vFqtp¶ÿøŸèö®ÿÿÓÖ”¤H6H"-13J(+->8I-9 -;02=4-C&*1"N]-1:(:I#'&"(/ )4-{|D–«5y|48.3+HC,„…F—®d‡š:JX/(A)(""04.@ADb2'2'3 *..4jkE0I"& 0.4777*JLaišZ=Y(MQrj)•–?`†Rz‡It~T`yX`€PSoM]S~ŸF°ÞFËÜD¨´NmvLw|I•ªl~ºwPxZG^Qd‚a|ASi<u•Uy…Ui…npžx¤×d‰Áe†»ZišR‚œRz¢\x˜d–²br‹D7I "")$!,"3'/,2'!%$)$,:04A# *!$"0,3'+!/-1F15F+-E4.AJ1]@9Y?E]V€’tšˆb}tbs]]lfKfICU?4I>0JG8GH=]BTlDay@`i:ds4hy<Xl>ZlH&#&##$"%%$$%'   
3096! #  !$(# ! "$$!%!!#(0***#*$()$)+'(+&1'+'*#+#- &&$*'2'62S-!a6 G:08/.("7,#<,8&=/(+!)"**!%%$&'&-(-(*)**0(0+ +)#.&",)1*+)&$"#!#%&'%-(1.$15(-,(/.0*/)5+"-1!-+ 2+5/5,!22/3 0,&3("-+%+(".(**,*,,$4&4+0,#).(+2(28+#:741!/(%5**.&. /*!7*$0+#-)1( 8.!24"4/!4*#*2 6%<-2+2./-.*+0,03-*5+0-23-"251=+=%98-5D-28120?):886F36J IC$@Y:C? 0&-2?'?@+,>'),)/ 07%.<#<5&+C+)7*;;#9D .S2(@?4@)2H6'HA47<:?0)C25<1+J5+;66@.;E'4K'2C=0A>)?#928P-<F><>>/E&'(%!+ 0/E>HP(4I9)8<:<->I'4@.4'3*08(6$*2)79(@A+7D8/;6 ,#"!  
3097 ("&0,&)*%/$).'1%""+$K6LU[[2IT-1@.#.%+.6,"/"#' &"0)#)$*"07" $0,-+,-4<=gZM;`B8N75T[XBCCb>EF09B0LDW<^.3:'DW+S?,KiQzbh•“|j…uKif1Ufbb?•q]Š›€Ÿ¢u’f?V5:"!)8)iX'}U€›}sŠ@‰“IK}D4?'MB(ch*pGQd\@WRt@]kD|yep—j}pqÿàŒ¨ÇLˆ…Ro¢k{Ÿcg’ŽoŠWr[Oq“HX™§ nµÈ…š¦‰¬Ç‡•â}жq_Œ^?UE?PI†veŽ£`˜°¡Ï•r±M&8)ugV×Õl³´Y”˜q‡£xVˆWƒœÑ䞎͉vsbS^HVWl‘d›°‘òÿÖuˆ™‰‚^¿ÓjÐyŽp_€\nƒ¨Ít€Ž;©±zçÿÿ±à¼½Õ¶ªuSiJN['5<5N*/44#"&!+02:,8N+L^"%US%2C29 -1(EGm«¿€¤º_Œœ&LE$dT£Â€§Ãƒi”S.,7>=A-5).*1B'*./1$/?N+OXL{ˆ&HP!@Fcd82!-.(VW/>KE8OQLaMW„J\mhp‘Z\uKM{]gxM`vI~‹E|?«ºX²Ý]‹¢ºås¥Éf¨ÁU¦±HXtTBQA6H*-:2>VIhI\~.E^Fi>j€HoŠ[i‰_@bRMqRMmSm—^r•bz›g¡e†¨Khw:?+/%CS>I$GV+Sh&M[6A%-$-,76?&+?!/;/u„"JNEN$$)!/!/, !1&-<#0?'CR5McB^tIvŠ[k‰dm‹Vg{JOfADW=EL79=/8=),2/(72/@EKiPf~I`tFXsOPlBH_CAZG*-.&.($'(%$&$  (" 
3098 ) %
3099&) & $'& %"!!% /$0)*4-11.3403"04-5*2!%3(,),$,''((+4#F*\/Q?:8*,4')* ,/ )!!5!17))#.  "$1!2(0'%"&$"-&.+.*)++(''!-(.'),0%**+%2(+%% &,+&"."$1%*%,%&'*)*% /(6+/01,2+ *&,&5)7)60 8+;0 @-8480 00"0&2)(*(#-,31&54$6+.4-'/(0/1( .)4"4,0*!5(3+60<+5.1**%+")'+! .(0+2+7*<-7689 5; 15!/5"39'48"<7%?H%<I 2>&.502%/584;/28#4896AT)8P,/=0=C"3D&8,.(4>?)5S,8B+'?55&"+ )$(.#!9G(A50:,:7&HE$AY#/I$+F5-:2':2(2)&5#%-3/-.>5(@?'78+.%)'!
3100),&19-3>-3M?&/1(1#8-AB'@C-:F!8801"'%-$/='48&2;6-</.$   
31016.?@HG?M ;=6@=54 /$,*1A>63D>TI+=938$&3&,&!?A-=?GK.D'4,)7&2/-!,# 4;/;K-5R-3>4,DaM'C&&&.,/*C?0:&9F:UR4=_H1GN4Mp%>k&4'@12AKp~ePk‚Siqh{1iw!0.)!D1“m-¦¥Gª¸`šµph`PœzwˆÅQam9ƒ^D¨Ù\¯n­Å=v±)Œ˜G¤ÔTˆ´k¯¹mßM§±²»ÐˆŠwo€`X{o}eKfuZPŽ£D˜7ŠÈm•—€ª|u˜€zšyu‹y€Q 2¯£8z©i„r^Žw?j_<S[ < -34C†o¤Ÿ­á†žÖgˆ–FR—j £•ÃÇ|ôõ~xLÿÝ>Òâk­Ï€ÿé»òÿq¯Às4fw/NtIn[<f2>ADNbzŵkÿüŸçÿÄ¥ÇOx~4E_CFC5D*3>IV*CU"+-:398,=+3'HH(7?$-F5-1%=E'2>&"-:}iƒñð‡µÃg5}…z½Ð—ªÅŒ{™ENM<?"04&"7%08FFGG:H:S-DVHfŒIRb%PP 8L05E9AO!LRLN9Y](8>-).C1EIG[N^vOFeGHrLi€J`vUµÎv¦ÊkÇûˆ´åh©Ìef‚yšÈs¦ÇØùR—+GT%5B ),),/H\Fž2\{:Hb>7R=9YC-F66O05L.4JA8UN7XVJobOwadŒdZz:9U+8L#5E).!+C8K^,7S=Dc<Zk5<T#0?8;3A#3E!/7%:B14EFoIOe8D\#,8!& &"-<"6G-V^:QjFj…]o”di‚YPmN]zB[q8S\8LU;ne*G?#B?%-)(9:2FK/C;$983;!57!4322</=-A1#@1$F1>4:  1 7!* - + (# #%!*!+ *"2$0#,&&"(!  $#'(%+',(,..-,4/109!35$5=!9@!:@)7C$->%-6 -5/0'1+5&- *!)I#?:7C%-9.%.&-#& $3(.-! * & %((!5&<%G/K4.8#,/+0 )( -,0.*2 /&0.-.*,1+02,0 20-+1+-*&'*&(&$(*(0(/) )',)1%(&*$)* *+"1).20+4,1*1,#+)#2.!*%#-#$3&#-)$5'$6'3++$,'$!")&!0".,$., /'/)!-+0+9*:/!,*!2)-'3$).(($)' 6)2/*++&=).66-7,6/"52$+3#4,042160/5/5"34)92);:(?8<4B4O< ?D$<H=Q%NI)?N+<FFI$:S+2D+.7%79/E#0?,,A0/8%6C!7@+;,3?"!) '+!2<"0;07O>8;6D<'(?#!.1* @KDW:W29OBEH',? <35>@HLZ/O#7>')7(2*05).7 &= 56&/<38741><,0.+8('.!/( 03-39*/?,*0+$0#$%  & RDEZ!DM0BP3CG;JJ1GX5>U9(%"/+!+/%' -0,+6).;&)7"/0B5"<E.8,:"!;8(BE"2G&&0$+!/' 3Q&:J;fw/nš/BD'FIAFN5\U`H"U]1!"! /+24.3)")')" (&@\&:-L+gJ((1*4GU\YVb=-_%&Q$!˜g)¤g¦®}¤¶„¬Ãžž¸z›½‹¡|z¤M}ž`pЇ:dm=MoQPg]]\XyWcZgog–—~­“”ŸŽ¨t¥f™›N­ÕL«–CŒâK¨¥o—Ûx”¬^¨Ý^WaL‘¨Sb–`o…bes|­¡‡¨ÐuœjWk`bLbw0*"+$*RJ \j=yyZŒ‘r8ˆ[vn2»œb²¯qôý‹ÇÍWÿÿÿÍÿÁœ•µÏül°Ã­­zbˆ%%#-0-9%'/%FR4ªª•ÄÖõÒÛ¯ºèv#8.::&7A,-D(+4.0# 6-+2*++6C!.0 \d8i…0H`#FY-OU7~„+¥¤&¯›\Ž‹›–²ƒµSST}ޏ¢“¼ŠªÌiÁTi=^„3@S'%4%2():1Nb0Tk9E*dv1\iADS3;R27P#1;+=N*8;EZwQFpAav4uv2id*09:;T:6=7HZ:eqDn‡_c˜o:]oIt}Yfd…^lŒSx’oœ¹x’Á”Ùÿeâÿ8„†%4@38 0=E‡ Vtž5Gb*0E)0A#+7 6T)2H 3<(6%$/,!3B/<C,@OC_21%!+),<)A5C1\p;=|~ATl?DX).<(@Q'>L'BO+>G(+5'/2-6<;==71>' 1"#"!5F)Pd2[hE{F_sNKZN9N?CM>M_BUq@Wj<DMKakEIH%>F!5/&&2,*4/)-#!.;#2=!*Up*m3'n:.c90G:185 1 W T +/(! 1
3102, '& -"1&-.)%&'/*,+&, +*/)($**,-/.-,-,.3/6-0 /3'1#-.!7369 7<%7?*0C&2</26 88#63.7 %6!#" ,9(<3-7"$4%%-',!$%('%3 /$/)+)%-'$,'1*:)Z+"_A LH;B903<&*6&-1031-,3"1/.218"1224%-/!*-#3) 0+",(*-.-!),*('(.&-/.*(+5++./,,*-00/8/., 0*(%,*0*4&#3%+,)(!1&1*!1,#*/!3+$/, 2)6'1&/%+%6#"3(!1&0&!3&1)"6,(5,'.0".*5*.-#4-/43(6. 3*0*0&7'"?,=/"70;/:/#;6<5=4!84!13-/91 B555#65%:4%@@?A(I<0>H%=E)4I+A?1HG16Q*8?.;@'?E!;E%4G%1<"=?#=D#?K(GQ,<N+=A'??"DD4P7E<A#EE#DU"5T6FO1+ZC42*F8A_-:L7/F=78>;A.@I5MK!C^=<T45F8;J3AG#7[4*;"21 6 *%6+;G,);)%'#2'#!(-55&0<)%>//' (  >4 1DB>C/>P7AM7AE5G=@#,/F$!'>+>?H@,I .844;=$:BEK/#J96*&EG?0@/%06. ($9'/.G>;g,8">AAG6M,efW`…L=„GeO9CxZglR>f!. !+)"3& 
3103G+(0*#"$$*+9:=H9-3E*2B %!"P"£©ÃX¬¢r®·’”¦‘b‰Œ~¤vx†mddji:LimgiPo5l–=Rˆ>J^YprAZx@hoLU‚ˆd‹–¥’¦¼’o¯tV†~„Ÿ™„¬ˆ„¡–usnw™kXhX†€ƒTŒ¯ynM:_CIRF_ƒu=kyAW`L]EXcH|ˆ?1;#$"*F83”¯K¡¸gT}nÄ2‘§Má½ÿÿœæÿÀèÿ¡çó¿Ùÿ’’ªwžß”mgLm˜€6yK"ȵ ¬Œ›1D,28mcw˜\€Ÿ¯ZSm;T04B&<82:/5 &)6$3584"PH%CS&'8:@QPS{Aw•<e:EUL>IhNZ‡šÅ|ƒ¥^›–N`sGPVZe…¤Šw–jBY@9H?5=,KS!ST6>&2>9(:,56+<8=H[57E*DS(V]$]W(y‚.uŒ6RuAh‚AyŠRw€Sp{:GR).3%6=*GQ45DB?]H5G11=&(8,/44>><Xf@XgRetUj{k“§¢ÐÿŠp™?0;!0;"-2.2HJ$@53J,JW(*?3>@Y5Wn$:G)[]6;.;!7A"'*1@/:%+2@"8K(Qa7ZwNVŠW[}GXe7L\#".%*=6JY:bl4Se*LH#BJ'HY*AK'('  ( &'/@>S|]‡¡w˯Wul:9C+<?(>C8<O;JZ71F3DO>BLDMM+@A-E<','$0&0743/8%@K)2;!<D +//"(. ,! -+ )
3104
3105), %! 6
31065
3107))%1)1,(5/+/..,)0*/ 0( 4'7+60=/;2+50./424",0 +2'2 2(217426$B;'->#0+(;0!>2$53'*4'"&"*! -).--/+5)+(!-)$$,") &##(#/'0.10/.27+6#&0-(.-8*!89&N96r:/DK.N25>=#97%B9".5!+/"08!,9)24%45"-3!+.2+4./01215$22722/.,/213 0/0127!181472!/113151//1+4.1!/0(,-)*$@.1 %$&!)"0'1*1(/)0)!1%.$ ($ 0&/&!5*!0,#*$,%%$#(#!+'#,()%+*.')()%'&!+.#1)2,#:-%7/!6/7/!D,#=4!9- :-%4*B*>9"91'4351541.$;1"57)62(94'67:K+AI<6C)*>#57(1@.8@$:G#@G#@O16M24C)?F.BQ-?Q79Q4EM-JP,EP)GQ+:N+@9+<M$U=)<Z'8C-4>;1>&=<'=9*[T-Ih;?L<5U1,:>*:,<B->B+2I9,073"0B<C$DD1U2&=.#+-!($43$='".*(     ! %0:)EH-&W;9,$9+$+!%%&-( %--4<4-:646$39,<<*,?34?>%2+$@0&T^%j" ¶*‚·Hv7RVbCSj(9KFL!1G.%4+dX2fd@J\17TP6EC50"+K"+%$ #)(',66"<905 13'yT%>k@Š’=”·nš©z¦¶„š¤Š¦£oš¾UcŠ]]]_peK_yPP=-;…HY`7@TA7BIabLdqd}‹G‡še‹“4Œ’K€¼s~‡…”n™>™®tƒ¨’…Îgš±T‡ªjQZ²ºžtÏ||viŽ•L‹–(‹†78E5Y[&<F0;A0;N;sd\¢´> À'”°8m—0DYXj‡g”›Q»ßƒck?ƒjyÿãÔÏ䚟ӞwšÌÓf¶Èh¦ªm_‚Mš’?\Ž$1~:>Ve„VVw2[p)>R56D3-8Z]|NJV*I\%0> )<23:=*K<K+4 16$BH<GQ$:A,1)#-*3Tb…KEe=ž¯X£Ìlk“™Cz]`‡~g‹Lª<ÚËZ¯Ãh’µZŸ¼H´ÍA”§7oŽTZƒ9@V(5B"-:"/!-4#07*@B W^,”>“£K”¬bZ{@EW9[nQ`Š\‹°Xd~=Pf-;J!<P),B'GR*&8&$7%->4?1979'FD/9H1;@4CIDVgt[ˆt>]14@!/=,@0A+9:M0=Q(6B2F!IX8@X9FW7J`>_q$Sb(DO"GM7>";F8@OZ1Zt/Ka48N;,<AD[EF[8:K('#//IT?asDDR3CF1?R(1D8;P!)36769'/2<6:/2(! $*5'E^K~Fg`?P,?H+AT-JM+BJ2:G)&68]h:HP6^h;ra4SE%*,+0)(4,5F(3F'0;/#4-BX'       
3108  : B
31093-%,0&5+1//-2-3-,&--/6*9267#92$;3$+6$-0$0,"4/23 22 ). .'3)23&5- 54&4'($# ()",*%1#%*#.,#.-+5-;3'7&&0%&*0.22!)1(0!/)'2.04?* 4,38(/B&,>$28!33,=!)4%D,'O8)N72h1.aI-k@2`N,?G4:5(5:"7<%:72< /7'40!)65632!7327$01!3/"62#03$99$4;"65%4: 8;#9>#9>)6B(8;#/=#7:%58"6?&4<"1;'4<$4A'6>(5;'<9/<!*2$,*&%*$1/13$52621757#09!04-1"'. 2*/4!,.&(2--,.. 1450123-"4-4/!7/))2$+')&#3,"6/&:3"719,(>5&;5$9/(;0!<4%:1$63 --1'2/26 >:)=/$B7!95!60$92'+3+2+%[0<:"19#E<)9;+7=/6<'E?'DL+MM4=Q)A@)JK&BO21F09:+7G0DA2RG+E\+>W7HF(=F'I>?E5F'3</3BAD<*4G*=@!<C"AX(%S:13.5X*5B2<7,8D!<E%4>)&.!1046(0*($/"'!#
3110! 
3111    G9@I$(S7$C   (0) 88<9%33'2?(,%+,+`Is{-u•KS†HTqhg~na†mi’RP}=0J8C@ER"?U GYC\1WncHaI)=#%7%- %"   &%)$# +-1&4>'/< ,0ESJHJ~ƒ>ˆX‰€Tˆ…xž²”­‡¢¸—\¯ 5OMB=Bry@€ƒ>nŒ+rw5q€LSk;DV#D\Fdk[s’m]…_q|lƒy›¨‚¤Àe†¨lwpj„ˆ…RŠ—^snXY\s‚ƒ>¨šr¤˜n¿Ït¸Ñ‹¤Æ‡§Ìˆ†ž0dhZ$I/!3+>A.‰vS‹¥{™ÂÌ»wÿÿ]ÿÿFÞÿfðŠQ†”QqLÅl·Ð¡˜¸’y‹``hIÞ»–Éôr„ŠåëŠÊõt¨n!(3-.&)++<S91I()3%2'9E96kL%;1-@'.=OH&IJ"! &%+,06(9@IUeCs™T=p:i[TU$@E@u…b­Ì¯‰²Œ[pUUa56Wlbu• _jvŠy¬œf›’„³‚—¬Ÿ”¨m2>C=L<j‚7\w(CJAPIS"8;09,<S?p}b ¹k‚¦bUW/GO6Sa?Q\Q|§b‰®E^5FU*2G"3<+)>&#.,2=!7J"7M!;C!<B$37#>76<&:D89I5:H)9B!,-.84A5A'BS41E#@O9L,Wf>Sc7Yh8VfAfyDjz8Ua.Q^.Vd)K\.Wb2c}B`yASk)?O"8F&>T<<M%:?#:8-5*9EFWk@6E*9<*/8(DR,<:"(1,GZ5JT,8>&&,*%4/,8*AA    $>6FDGW6EO*:@6GTP‘KŒ}5QN0859R7HV1T`EUd=SZ):3!(4)8H5GS3BK+9B'1;8>N9
3112   
3113
3114
3115 ' .0 'D Q ;!1%!41!.4$--!518377%7316!14"5,88#29&:1(660:'-1(40!77":7(59"-3'.-3127 .2!/5!4/%3*-1*2!4.24!(@"$6#$,3,.7/:#36'35 3-!36/;"0:")8&,. 341<-=">2!B?!8:'<=%4A,0B(5>'7E+9;':7#=<$X4"H7'J83R=6NB=JF?L<7\>/ID(B?/8A+32%95%6>%?=&::$=;%D:';@)>2&:7$;7);>&;;%<;)8:%E='GF)?D+6B,7='><&@H*>H%=F(4C*69#<:'98&9=,24*7:$.<)68)7>!9@$19 7=5B#9?#4I%:=#6;%6;!/=$66"-8 5:"4?'1?,.5 .4 .806"/9&36 46'2:!75$31&72 63"/)!6(6- 2*-(%1(6'';'"=3&=0(?3%<2':2$60$=,&<3>6 ?2H0!50+)!:+3?,?2#AE=; 8;B<H=*:B"?5J@#DJ'4A(36';7(9?%CA4>H)3M1=8+EB'AD):M,EH'>R+GJ4NL1AX*UJ0L[+HY7EX)GP$KH#R?'ER/GB-;C%17.<4)=AEC+>A%>J)7L.=?8=K40<+%5 $%$''"%#"    " ' *2       &52;>->;+%L("5/-#'0&)-=~\Pc¡[PmFF`3sW4Bv7 .;:4+MP]i$Tv(;X'5G%;I#Na/Le85O$4/'.!2*  &! #78)06.,7("+;8'cz@‰Šhq‘w†•GŒ§]¦¦µÇz“¢ŽvqKad+ed=X|scxЇ„}‰di†p†¤FT|<TV*os@Mf`qTQe;U^F=PXy{ƒœaLl^Wvb8`}^xz—Šsi™Ve…‚e‹“‰®ˆ›±‰u„އŒº‡}™kOlYCZK>Œ;­W}Rm”nkp­µÿÿ<ˆ—CTnJbN_]5ƒª>jKjb’ƒ6Vx7EAKPDÒÙÌÍ‹sŠg’¼²Ä֒ΰV;S #+65411*.YVIe&;I'>L!?AHM$bX49N&-+%&*.$%>:SmA‡“N]fGzj@µvÁäuµÍG…Œv¨¸r™uGuGkt=Nj3_j^„¤p|œIQlXK{[Y€Ž³’¯Í–¦2Q]5”‹Tƒ›L•.>S+-1%?920DC2HBWy†mo’H\p4<M<JT2^lEj}a~ªbj’;AQ)/; 9:%<G.6+1<O)@O+M]*KU(@H'FM$BE AK!=H*K[&LV-IR#8<?E 5K&Ne3:J+7B#HU*H\<_rObw=kvO€†CkƒRzŒFv;s†>x>Wl:\pIi…OtŠHƒ£IªÅ?µ¼>šª6cq+V[*ON IL%9B?DO1DC$FK"DJ,`^.?K&443;H;7G:0=*0(-#(+13:$>C NKC>55$IB<^S6ZU-MH8]RZVlp[n@CP'56(8K3XYNx|h¾Ÿ=c`3CL-3.=LDIY=;H.2:,,40/@7,/$' 
3116 
3117  # 0;*'.M d L*D*$G0#@1#=/!@3<9 B5%I7#:D#==(A0$?5&C7'H9(<?%3?.96*7:&3=$69&6;*76)<5'7<"2="*6$19 76%92";: 1=(24%17#-5#2.$;2 8:/806$;6;D$A5$.>$.<(71#55#19%3;"6B&4C(H; U<)I@3DC0<E*<@->>'<=)?>)><'G5#R@ XE,P>8L9*L:6G>5]<3NN.SN>HB06=3;<(C>#PB+==&?@(M7)D;#D7,;:(C;/?;(==,GE+N=-K=+>F+A=)D<(>=07?(:<);F+;A.??+>B,;3-?<%@?*>J)A?(<F%?>)93'B:"@A&99(81#:3$0>)/<(05$34#-9"<1#;7 :8(@>%4F%8>$7>&2<!3; 4:!4<$3?"5>(4>$0B"38%3>$6C'4@$-6)87 6>#<=&8<%79#44&.+%80*=/)87'76(E- CC$D:#73'80(:/%9;+81!<,45$;5(>:":@%=8%>5%49$<8#FB<I#=B1;E$0E%@?CG*=@&?5(M@$IO$DA#AD):J&M8&DD0=G,:A6C?2E?)IJ6<F39H9ID5WP+W]=R^3DX'@P+PC#TV/HT&KN.IP8=W6DI4*=(;, 8'*2!!*8/Q+(*5     " "' $- )("   
3118
3119 &646</+@*/*"! %!(%=.4,2GlI|ˆ;s†+K}G[e7DQEI`‚(Ym3by?Fc)?U6H<G"^p.Jz2$K,!'043!   "2B7P:Hi#m¾">U"=>gIƒ‡™œDƒœc|”dwckœaalkj kŠ‘žl¥šb‚¥WHaA8bWMhve‚ŽMkUzg‚…±_`nE9hRSh:R‚\;LL4NB6P.;LH(9Z<NANsG@`-/?D6Er4Oo5^QL^CZyYC]w+LjC<Q0P[tkXo7JFCsr6’’q¾k‹£KJ]B*F1&P<5!Th-B[0M]?JLQTG2ElC'% ""*21?\z3O]5CEIYj©°0TY0:&&)F>Uo Wq"o&ED"ŠŽ=Ru/8I+8G1o~?ª´Gž7|†#\e#J`C88B!5E<‘zZ²ËfØú©¬†—£ºÎ–޲lˆ£[g–ccƒ:PqM~‚>s’wMŠ_9[TKV7Gp;Kdiš¾Ÿ°ß«Ìß‹ýÿƒïÿ“®Ul„L:E"C><2"4/CF&9>=bpO“PUk18;0TdRs™[}¦Ya~mˆ¬Mdt08C@=1<N/c]NU(>M1CR5Yq8Q^2Pd-JV0DN$GX,Qg/ht2Yp8`t2hv2mm,Se;Hb9JV*GP3O\:[hGZhJ_yOcƒTi‡JYsLcvQv„]x’Y\m:Ne<VlKMgKd„Nn–gl’ns—n“¶eŒ­Afz5ab;\\2[Z0NU4aY/U_*KY6]j:Yb+W\'CI1GK0AC%AL/TY01 &0(1=+<H/S`,>E(:G4:?3?N.BT4QN<?HQEN8BI&08)AD>olUEQ€d€ZVi;9H,4H2=L?5G67G+-4!-0$"3.r=,o?&d9'l)q)s.w,r.u.v.t0y/„: ~<%|7'‰2•5”?&€>2…F3„D*C2†I,N5‘G4‰H3‡V8ŠI@‰D/D*I.K5xQ3TI8NB-BE&:B.9?':@%<A*C?$6?%88'.;$.4(-2!28!9>&8>'6<'9< ==&>3'N:FD"?D'<?-8F#;G(?;&2D&4=-7689B=">D%GI)CK,D9*H7,GD3<C5BC*GH*MC/CJ(FG)EC-G:(D@'SQ-YE2NC-JC-L?.IE/EI+I@<;C07C18>'@B(>D-A=2:8(::,?:)A:(P5$@E'9B%;?&>E)BC,I:/?A/F9)A<"BK,E?,FE+;>-@5,?B'@L)AC2DD,BM)CC/=G*DE3<6*>@&BC,CN,GC+>O'H=*>C%6D)7A 2:#<=#7:!:;%:A)4;.3B*47,9A'<C(:>"CH$AF$<L%0@*1=(5='4A":D$;G%.A,28"2<#/9&<:(8@+7B(6A*1=$1-%25#84*7<*,7(90,47(71'97%=4+?<*;C(9:.>H(<F+=A)2?,77#62$7@#5B#4?*2?5>G/EK(=O.CL'DQ1>K/;A)7:+A@/K>.FG*V9)cP*LT2CJ%>A%<>%:<$EC-AB'MK&LX&J]0`J>Oc9=I2QR4Tf-D]7FR7EX7JU:RQ;ZU(?T&88F/JWNIGT8P3&B"*,$#/!!+#' '),)1#(##(!1("
3120  
3121  0-67"JD*??+(B" ""W1b^NY+&D$#8(45.hfY_“ACX0]\:Wy5‘“5v<b}>Tm4<Z.7H#EQ]k37W<?I#=K+=))-+-4&.+%02*$<C"Rh+lbPKv‹x†@OœKSnCƒe›­|‰¨‡a€}„Tjˆi[\EqcGƒzVs³_žy· Xœ‘Qv<[€,Sd=[rN?OAP]o{€„i•`Cd4WuEd6:S1KM-AX'*O</7&?Q%'O&" +' $.-E'=$PO.UX2J\-=K+>N+Yb(D]KRZhŒ•Cžªs«°eØÏvޝg}‚:ƒ.;J†–9R~<aw?Sr94N6Cn@-7-2;3;3@&\T+JQ$|x)ov9UgjRN$8@22Qm"Š Io‡8¢žAŽ®\T…4i\J6F*,1&HN,csSzŽ\’©T€™Se}9m-fl4JR0É×VÉÿ† Ì‘ÅíªÓÿ‰¥¸mŽ •—¯t¥´UqŒD?TFck‰m<S_N[HJt9S{FBT.ixS€ž|•³¦¹ÑÐìÀúÙÆág´ËBro6ga-ql$cV*^b-BD*ŒuQ•§Zdr6eq2fzKMZKZk[X_mgn“BGK$LO)f`A`g;sl8\d09;/;JC^g;k|:WZ4Za4gf?exKq‘FpˆFQx–GUo<Of>ao7db4lo7VYIiiJ_kGew\‚•N‡“U†CjqJlrRgtOgt1Vf5Qg=M]?TlR`zTbzVPeapu]]pZ…šKsLnuEnk<fgEkqCjs6_]@^mApl@gr6\b+OV,JP5P]CUg4IJ"94#9>0LQ>ET5CE05C3XW);H9Sm:^j2MY9GJ5bX.NS-TV>GO9<<ISXNHV73</-;+%?87@3=D-=;"/.*7'¤RA§PB¥NB°MD´P:µX>µUAºX@º\D¾`D¶^E®\I¼XJ°XE®YG²NA­R@©UH¤SL¬PH®WJ¾TJ¡[N®^O¯ZM«RN¥MQ¤KQ¤KF§JD¦QD¨MJ¢WN’RS†MImH?RJ>:E7>H0@D*<I,:E09=*6G*:@+6;<?=@)EB+@G+9B*1C*;=)?A!@E.9L-BB0?E,>N)DM'<R)=I1;A'=E#<C+EG,DN.@G1AB2?D)CH46D3JH+AP1MF-FQ/>H42H-9?'E=+JK2NG0HN4CJ8CG3?L3AK/@F.AE-BC.<A#FA+;K)>@3@G*=G-:@'8A*H?%BM3;P2=B*=G(>I'I=*@Q,:81;H&BD.?J&EG2BJ0=I-GI,@Z/<L3KN-]F1hS/TW,JL8:L.BG*>H+@G*HD6?K4HG,?U+<L/BB#BP'6O(AD+?I!;G,@B%AA'HK'>F+4B.>>'<H(>D21=-'0+@5'>=#@:&FD);N*>A39B!BG"BG)=O$7@+:@+1B#8;$-=#5;#6?%;B&=M'>J#<G'AK*8K04<%5=,2D(59'76#?4#@E&CC*;T"C@-CV'DP.AQ+DX,>R%=L.FP7DN+=N0BH6GT/GT.KX)_S,Tc1Ra)YZ0ZW3UN/ZA(]H$IT)DP0DF&LP)=N1PT3Oa8\UAZ`9Pc4fc>N_:U_:TS1Da.b[>]mH]uCip2bu4Rp5F]:;ND:M7EH'Dj9>A9=5A?2GCA" =(- '$ "4$61/2 '''.+$,3-018EO:4".3-KE&8C+(;'B9,t_…}u’ANzM<REM[+Wr*Ra>N(9QENj3lƒ#IpE=V@R]F?_4Pn3AO$=RSc(Vg8i~=Tq-TV+Q`&ED<="+0($7 "3OFSTP_sb)‰®Iy`W¨6it;mJ0•–6’²`kŽp^}jPO8m_S_nEgjJLgqs†}hšSv[Qo™a@SCHI7RqE/E.;FXKhCOoKEuQFW[CX@9Q<YPYhATzGFc=3J)5%"*:$ *%)CS,ƒ„P{©8\r6MV!hh/‡Ž>Œ/s|/by[*Nnƒzu𽓵”‹Ïè}¦¾gt˜6j†[t‘DwˆHJj<\_,|‹=„œ)~”7‰¨Mg,CkKAF:T[cD]SOC3ª XøúCº×-.:3>GRw„`ÆÚw¨ÌgŸ®L“¯XQŽ(qQ Œž9‰—QŠ¡Oœ¸dn›Q`{Dp”Y’¥VŸ«W”×¢\„‚hxt^‹öÆ–×Ôs×à~©Ægi„k„”\|§Aêq½ÏaÓÏ3´ÀA}›BVc7LU;f‡[¤ˆŸ¹¥¬Ó‹«Êœ¼³šËƺöËâ[ªºU‰¢S™‹Iކ@o|?\ue]ƒ]MODipPoŠDS^8NZ>FS<UhTdtFdh;†?gpA__DW_BXe9UY'MQ7YgAj„Ddl<ck:`l>VdIGSL[qYzŸnO‰Ÿ;hxCjwAuIŽC€€AnyOz„GuWua’™dŒ˜Z— SJ…„S‡’Dsx;Zn4N\6K`HTnCZtG_qK^kENaUn’hƒ˜W‹R€xO~yUo|SmxJspIxyQ|‚IuƒAls8ai<ld>fa=V\8QY+UN#BH0JU5JR4H@(WK2dj2DR9C_LTl@GZ:ER3:I/5I?Rb/DA,ML;}w:as/DT'@C#24(8<,=C,>D$/1#/6']:M]=I]9K`6Kg@CkANa?Vk@RcARfCWjD^e?[j:[d>K_;Wm9Jb=Kb>Kb;W]4Bb:Lb9Nc>Pf<W_=Q`6K_0KV1@Y1B^/EV1AW2FW3DW5IY6C[2DJ19=9>>G2:E/8H,9I2AF*@M1>F(:@,=G(CB)AD->L/8F0/E.;<*5D!5B+<?*@@,JN+JQ2DP0?O0JD-BN1>M.?G+BG0BK/BO2GG0RN+BP.<I5=H+>N/CJ1GM.?J7?K0?J'BG&MN2MS1FU8AQ6AJ/DM)FM.=O7AJ.AN.CL/>Q)8N,EI)>O.<Q/@N+AM1CS+=U0?K90K*BC-GM&BR/;T6GJ,AT+@O(9N.CK-?P3;Q1?H3AQ33S2AE-BP0LQ6E[>CK4IA9BP.IM3BT*EK,?M+6K-<F1;<2>:*DH)?T1FF1DS*>X/LL-IT,?T1BJ.>F)B>$EF(EQ+@J,EX+>R(>A*DQ,<D)@C*A@0@H)?B(E@+EL29S0;H.<L-;L%8N-7G&<I(BL)?U+IU,HW.CU.@W0FS/DY'DQ"DM!CLBE$8L&:@%8G.:C&9?,4G+9?-?B-AK)<D(?A.@H-GI1DJ(JA,MC,DG.ML8MU;MW=JO;KF5FL=UM*IG5Z@6KZ-PM)VJ)YO0|l%Xj2B\2PXA_cBUb@ok@e}?Zo3aa?hn4_dBn]>OuCccKuvE\vILb*Wf&\ˆ/]l@gg&qp?T}=`^,7_5&7&)**",-&@29J79"9>)0C$-=+7 017M+;<"%@1-6F387?F/FR*92+$.)(IQ"ae={Š`\€`”ŒFxž-b”FHk?GX4JX%O\"qo+br8\{.Jt1*T3IF0^c!X`-bb&Wx2:T1hY8Wf(t_(sq%Wj2~o(WfOBW\Nd%G`B7P@7A.>M8Z]cj\m”Z¢¹vŒÒ`ˆ§jÂq{žJ|ŠY„¯Qž°Vt¬YOŠMFdHWddJqr4OTPXVVwBLg@HXP-<:@-#6%JC&g€4X=DH8=R./F5+Ea'8J%3/(:(K;F@M]3?J-3/7IZ!MR%uwU\wzKaISU4ueN•¶uC„v4=I*D>,L!8@[kGp·ÇŠÑé ÃÞŠ·Ýc|ŠE‰­R_‘fmt<‹‡WHp~Wj‰wz‘†™Ÿ‰¬‚k‚Pt€I^9=D4n|P¡Ê¶ªÚáh¤’RNRa7Uyƒ“¨q}–Ÿ|…¦z¦¬B_ƒ[EZU_jY~žKv]˜¶Iy~<FZMc}|k™„zŸq“´Yˆ¨`¦Jª¶³‡¨~j—›ˆ²v‰¬T¦ºeµØn¦ÉšYn0Fz2@Z^]BnfCˆ†L±hœÇƒµÞ©ˆ¾©¥«ÊÞ…Öð¢ÖöÊÖü²òÿ޶Åp›·b’·X|—JglAWV6bQ4eaN[cLgw9]h5Zf;qy9gsGˆ|D}qMOŠB‰w?|B2vj5on:qrDcnAn|@‡B]u:as5UdFRf]u†f€™I†ŽO€‡N—†]˜ª\{…B{…K{‹Nw•R‰—_™®hxŒ^‚™m’¥[–Z‚‘ZˆˆHqs=X\9QY>WgDb}Ee~F[nD^{W`oy›o‰’m’”Z|}Tr€WqvS…†Y‰]ƒ†Vs~S‚Pr|Kw}KuvI`e=^bAig6e]<ij:_l;nu9|k?vu5_i-DW;4L?8>9EJ1@S/STBXY7RT5CPSk}T`p9Xc=Xe$68&)0(/9->F" ' %3%>"5@!/< 2@#4=&0:"6<;C6= 9>!>B$:=!<? 9@8E7H 7J 5M#8H'5C"0=5;7A 1=:;480;+B(A+A&,A#+@&*@%)B',A%-B(/E(+D41DN1BT/>I09O1@F+=Q*7I09C1<H&CG*<J,:N02K47F-=?&BJ">M+<F,GK,IK)IR5DR3>U7@J1?K2BI1?O.GM6FK3CN0KJ/F\.FK:AK7AU2>M0?R1FP4;M1=G0?R/GK+NR2JV1OZ<Eb:8Y5BD,@J*;I,@J/@Q.9S3/H5/@.9F*@P3?P0?N2CQ/>U,3L35E2=@(<I';R,FO1:U4HK*I]4DY0MX5EZ3KY1EY0AV0C[1FW3AS)?X1ET/BW3;Y7:H/8G0AO0AO/;P.IB26Y28D.B@*FO(AQ)EP/;[0=H1BM2BL-4L3=A3?O1HR6FU&CV.BY5FT4=U/AP3>J*=I+=I,KL%FG.DN-G?1JE4;J2:D2=S,8H/:K,7I,>J+BL-?V,;T0?N-<N4:R78H:?R6>U4GS7DW8CZ1LT3A^4ES.NS-GK)AL'=K#DD$1H%9=$?G'=I(<E+DE-HO3@N)CG@QG9K[)AP;ME9XW9Rb.OZ/N].FZ/;C)CP5NY.J\9MTFXSARMRWb;XV@bb5X`3SZ@T`S_cDfo<kmI^iAd}M]ƒPkV<p}Ubˆ\_j8ab,hi9gˆ;t}]moPT€cR_<5Z@7I&RV0H9B>M)1N/8D"3A($>'%2*%1!.1O? CT)7G&)*(/E9=+9@<>K+=C MO!DT2QC?ŒqQYo3FVJdKTh„Neu8kk+YŒ/w„3]˜Bhi<k…B1b138NZXg3Qj8bmASxC;I"TK,XP4WrDdsTQgJluDk|Mji-YiQH]DUjM>W(XI|®/œ£O™ŸO•X{¢‘j}Š­—8†{4HzSYu\vrŒ‘<hyJQ:4QI<ME?YE7>,F@,ƒ—^7hFE^CCO-Fc2G^"_yE?T>IN7hq4=`;#B"DF"'5M?%as:Cd8JM9WZ9dj5Tmgb5o„DY\h‘Kto&^m=KbXQ_e:W5+3"02&E,.`UEr Qvœ‰¬Å“‘Åf®Ç_’¦E˜–OÁËxy‹P\nZF]_G^g1MdCR`RYIj^R–5d]?j^g„z|—¡VÉà`RU.pr:‹¥vn[›’]Ÿ¥nØîy¤ÌW`~4v‰LP`F¤´]ÀlezSi‡<WqOewJ‰“n¯Ô}‹¾a\tYkx}¯ÇRvŠHvŒ`]‚gi„vˆ—}¶ÓŽÁäY¾Z¢ÀV§Ílž¤Vla^“l_‡f‡ŸŠ’´p»Í…™¹›¿ã¦—°º~’±„¦ºc~m_jevŠ_“­LJ{i=…n?jl<eTNqN€‰D}uB}L{…S•ŽY˜Tlue^kMolPŒ…SކN—•J“Iˆ…EŒ|Ew{MnzJe{JoDx†BhsKv‡bˆ–Yy’[†Ši•Ÿ\€ˆW‚“J‚ˆN‹‚[“Z†›pŒ [ƒ–U~\~\~“X‰›V€‡M~FpqBp„@n„O…œP^ƒOn’X•¦]tƒf~t™šm„‡`xtYwwVwzX…c‚†fŒ‰[ƒ`ž‘^”ž^„‘W}ˆO{€FsqGnqIilLozGkqc–§z¹¯TtqCWh=Og5S`/Za8fe3MI0AE9DT-BT:U_TH\HBS=CYAFZ0<B#)1$)-+6C *3$B* 60<'";,),$!#*-() ""1Dfo'I0&:*+$ $#6?4>="7=$59&A6";=#C8)A>%?G(CR/GQ0DK1EM3LK2EV.;I4EI-AM,BN+=P3=N46H/BJ*HK&JR+CW5HM5DP0=R1CW9GW:GN3EU4@Q0AG0=Q2AK2FR-HU6OS1FQ8GH7>P9@P:EM/IV1A]1?Q:9I09G-9D+>O2CV0VT4Hj;9R7H@+BS'AP.5J.AF-<N3@L.CJ)<N&DO3AV2GM/JR2IT-AP1IL0LY*E[.CP69S2=L5EO'DW5FU7A[99V3<R2IV.6^1CL1AT2AQ3BX5GO,EW5DY9FR3;R2?D1GQ,BZ.DJ0EY3JU0IU(FT0CQ0<U,7I3BI1CO,:N,8G1=C*7B5;G1>K//M->D4BL+DN:FX1BS0DP99P0<K-:T/:I1:A)O@-JK/<F#B6&FB+>P)7I,9A)D=&.I*5=1>J-7F3:K,<J-@O*<T/BQ-;O0CM0IY1?^2>G8FJ5JX1DV6AU-FT.CW1CY#DN(DN&DV+PR'LY7BU/A_.LP-O\8JV-Ea2OO4L`BSb;He;NN1YV;Yo*ak5TW8[Z0QT3GN1PY9NO6PT<WS?ZmJy_5ci7W]@^SC_VKf_>VjQQ]>hcJd{TˆqE_vL\oUZ`NeuX`rU``VXp8LV<7X&6: ASC:>$JG-NL.F^#8?*<A'G@FV?D'_`2Ss?CZL"57=-C:-EU06C/0P52D6DJGEY*H^TP_HOTG`}:›UsÀ[p SE”LAF,?]99S69J8‚:§³*È8{Ç6v Hv¤Bi—Ck{!q„'}Ž)uŠDo5[y,ep8ezBnf;ytBb‹DU]9;Q:~|)›±ZН\zup¤avmxŒ]Y¢†TKTnw%8H'sK>DqUDK-HC(=;-6[59646B3IN<]Žc257NEJ¡ÂZR¿L4V)8hG,@T61Jj†n&Q=(8&#."*@27<MAI(,A(#89KMK{Y™ c›hPkKFkrŠ…·ºe¥7’Ai…4H9If PTO_)PeG\\S[f:j•`l~W¨·r´´jÒçr~™Ž£mPLD[r2(.&+20.&ny=ÁºgÖÿ¢å÷„òÿ“ÍèÕ݃Óðm¿×dáûaŽºiš“`ÅÚ{ ¯ˆãÿ¬îÿ{©Ó_U‚X,H2hqeyŸbw›Ls‚DT[Phzf—¥³²ß°›ÉfRpHf{O”oµË\ªÉX©ÄEi‡J‰_~’rh‘”y–{…®¢“¸Ž_„ZVx;Vs8e„;c€SYud´Ð¥¾é‰¸Áz™¡m¤V…šS‚‘<Y`G‹™_ˆ¡n™¼d}™X{yVigB^qMdsF]qMmoZƒ_ŠZ†‚byTyxTƒCopJ‹^£“d¤ f­¡bž]š“M‰…LvƒJquSxU¦ž]q‚Gj„^{^Ÿ®i½ºkˆŽW„‡[“—[ T’™N›V}†]|†LWqNrzTjpJ]vW€†Y‚ƒSryQ}‘Wqb¨`~œV\|OV}{Š´y…™mzŠ€®¨j—’X‹X{}LixWx€Uxgw~gˆ…g‰Žj‰ r‹›pŽ¡]€’RwƒPŠ|Qq}VlX{…p€‘y•lwuLQ\>QjH^vLg„Y…˜Jse(GM2LX-PM;G^8@J34H36H76C79D+1/9 16!#/. F9'9<%A3(8=%(5-# 1 ?
31224?46&+,+ 3Gw"€/Z>0E3:### 
3123 
3124 ' E IAEM$>M*?H3BI*?G,E?)EK)GI1AS0JP5PP-HO5IS/L^1OR8HP4FP0?V2?Q8DI5CM,OQ-NV,SX7;^8DL=;N+?F.EO4GT4KQ4EX7IP3DR1AT1EJ/ET-DT7NO7UO4PY6FV7EM6IR,CU4:P/:@55A&9<+@A(@H&LS/ST->^6CO<;J'9G,@O-7K,A@)FL-BR4@Q0;O0DQ7>W48X8AJ4KO7PV0Ha4B]5=U8MQ3I^2HW5DU/ES-F[6=X4AN0?Q.>I)=S77P*8F-=K-GQ.<T-8G07J+@L5?O.BI'NI+=`3JH/JT.C[8G]0J\5KX6J^0GS0BN)<K*?J1;L(CN+=F-DD(IT,M[.<V(=I&<E0BJ/DQ/=P3@P18N/8:-58(9B'AK-GJ5>I/?D'<H,=C0IH,CN+=K*<C*?C$BM%3X1AH-?O-;K19N56J/AP2?P+;T0?S9CQ/FQ/FR.CT06Q4AO4EL0KY,G]2G\5F\7@Z.MUAO[6Mc9Pd.Og=Ki;P^>Ld6Sh<T[?Ya6Tl6Wn=ZkGMoBZhAX`2Z]4Pg+Ri0UY4a`/]b,_T5Pc?PRIQnCcW7j[@[JCef<aZBi]<^yP]vL_{WazS`v:bgSaiDhZEjƒNjr3Tk/GO!RS(PW#X`0hcCUjNdh3az0[~HyeDj;e†;`vT[j+Lf0@O2LU8Y_Rft/O‚2DO#"K'1+4"6+J;/QU6L\*7K:R^@ERP2>8EP/J^3.T,-5_<$a{ORmMbxM\vFss>s“Jjy7KYJ\cQmˆRvsNg”;—”6£¸O°Eh™Xb|YkuBhh1K ­c_“ke„OeƒLoŠ[[v|x‹{~˜ToŒc?n@^}[Db4TL-]];;d-@N/.G):A(9E6SH`EV%?6)^‹¨2DM'! !,(9R,').;( &+#5'!.""*@_~}‹a{~:PS_m4`{S„ƒŸp••Jjyz\=I&@R6Vf5AQE7;BikC{q:Š­J›¦lºÊ‰Óæ•‘Æwy˜‚?Z~~Š“U{Q=bW63!VS%wu/¤ºm®Ö´©à½:x­9h©"Bj*:vG\|Sgƒu‰²œ_p|n¨ÁŒ¡Ã|’­›rž¸©‘œÁC3G_MNz—KAJWcta…‘Jhƒv^v—g§m‰‚Xƒ:<M8RYXpƒÜú€®ÉoŠ©OfuYuEZn?cuL€‰VœŸZms5‡”>_3Zg>€’;qŠR‘©|ºÍ‹Š²yÂa†¤c‰Wz£J–¨O–ªs–¡^˜¬q’¡a¯¼`¦²K\|7EL7›œG·°K˜š_œ§cµ°c§¨]˜ _´¨YªœZ œa’™n žs¢—j¨Œ[¨Y˜ŠRˆ™U†’O‡–gŽŸl—«Vn~T|Y€–€€£ƒž¨Z¥§fŸ k¬·dšcŒ±c€¤LrMw„M}’N}~;fxGkxX‡RŒWŠžc€i‡˜^tSp”Jk‰hp–{ qrxq‚–vº¯d’ ]‰€NuyRk}Rq~Qiv`Š’gˆœo‰œl‡–l…Ÿeyˆ[vƒTvySjsS[q^i‹pžn„™^o{Mkv<\gKbjV\st{‹g]pD|{>]jAT]<GY5AQ/MR)6;*$00.;%>@&~T,bJ 25 ).60+99*89+0C,%7-$  3
31257"94!>:2C4.80*9/ C o })"W@5</= #4   $!
3126+I!DPHL0IN3JC:JR.GJ5EJ2?N4DK0?P0CJ3HO0NM7OW2K`9OQ7LK5DP1>O1EE7MK+SY.S`/J[4M_<CT8HW8CU5IK5LR1NS2T[2Nc8F\4?[5ET4NU/DV1ON1RQ1QU1F]=8P9=@3HI.OH1BT2<E'>I#NL%U\&Xc.Pd8Qb8Lc7JR6IU*@O1FO)/W,E>+>V*GK3MW3TV/F]6HQ1AQ7DK(IN0MN2=a9MQ4BS/@P-QT+Gd9MP0F\.O]1Pc5Bb8AO5BH(ER'FM,GR#@Y%=S+AP+=O+6L(K?*F['EV0LU3T`5B[4IW0O`2Cc5HZ:N^1B`9EV,KZ,JS4MP)CZ*FX.JN.FX1EZ3OV7I`6HY0CX/?F(GM/GP-AR.AL28L'8>$>M)BK/:U/=O17G+AB*7F%DF)CX.9O1CL-IO18W4=K.@L&7N46D/=G+;H+/D!>A+6<-7I-<K/CS/BU8BU4:Q6AT*C[2>S/HD/AM,0A.5C.DK2E\==Q5AO1@U8>P;A[??J<LW6Qe@N\?K_A\cAGnC\a;B`6JY>MS.OY;Od9Jh7T\CIcBQN4SeLCP/LX?W]3Th?al<Wv=V]BimB\dHY_8lsKhp>^^DloCZmHRW=\oQu~IoˆSn>`q*Na>cgRmyD{šPip<y†D\‡Y[kNmrXq˜WW|Thi@vHv—E}Š6kŒ7pTf•cŒI<}3UA[P^eRm=@T8Wg)[Q;{n4_c#S\+E€8?;%dh&am>\xBgy2s:O‘?GKL[bJiƒO^h:{r6ƒ‘KeQo€P{–^v…„‹ˆƒ…¨n]FkqYl•It™rbˆ‹j}^|‚Rg˜bh›nSUŠœhS[ˆOOORi+NgJp{:}<boO:j;AG0P^.@n@ECRNQ[(=7EU6KjOK:(F(: %(.<78V9L>K(1%2JI&+$-4325K=CF&:&6<* /8I1I.1SPJ3qID†•-@</aiH14)SB&qŽKqˆOc“m€£„‚©‰”º’‘§TGrT6A3+8t33Y6XW_b+‘§Y¬Óx°Öj©‘8W# **(*74$j4IIO<^Wj[OªÃ~»å‡£a…c´\OeUwˆ)Q‚ND_Dnj1˜¥hˆ©nbŽW>_T?T=ViNkj;GQ(AC5Spa¦¶²ÔÿŠ¿êXkwBpm=We-`_?œ‘s±³«È†¬·uŸ¤=Tg3XpO[rXpŒuezw]~V¡¡\‡²c{°P­±P£¿½Ý“ùÿwÌÞ{ˆ¡YX|½txœF£ BŽ£w˜®|¨Ãl·Á~±¼~£¾p›»m¯»w·²q›¤e”žb¥Ÿ^™ŽW—”_‰]‰ˆY„X—¯k¢¼s ±©Ñ{½Ò`›§V•ž\ˆ“d‹©u­t’®opq{™`zŒo˜­]žVŠ—`œ°X€“SŠ™R‚še›¨l—®n¢j|‘em}]w„YtŽZqTnŽls–nv{`syo‚œ{©fŒ›Tx„Ny…RvEu‡\ˆœf…—a{Œo‰›j’¢gz•Z—V}Ix{Ej{Us’mv¥m~ d}Xf|RjoK`lDk}]RgS6KWn|ZfoPoy:U`=L[>O\0F=!,2 +2'<E)iK2IQ-@HB>>1/?6'<B+1A1!60# 
31273 4$</":7.B5-9;2:84D+*b |)T706-E"2
3128  (;!@C=C.EE5CD5<N5AH8@J0BL6>I1;H1I@/IN.IP5PX7GW;PT8NJ7GG8KG3OO1yT.˜]2pw>HlAES@LM<I_8OY8MS4NM2JU8VY=R`>C\>QQ9UZ4UV5LW7PK4MP-MH3PU=FP0E@0`E,ŒR-]f=I^DAU3WH-ab0Xb:MbHKZ@GX8HX6TM2JP1IN.BR4PK(>I1HL2MS4VX8Nl<R\9G_4NW+GZ2PU/H]:UV/Jg4=[8YR*NjBNX6G^1IZ9@`6BM9MO.OZ)Lh/I\5[[4Nl3Q]3NZ16]2FG*MK&TZ1K[6>V1YO/OuBF_5TX0Sl;Ob4R_2V]:Wl0T^3N`3R]2T]?We7Kb<N^5Fd9TK4Zd<Zb4Je>Pc-Pc3Qb9Xh6Ff4Q\5_c*Rk'Ja4P_1Md+QY5H[(>O.DN(QU4Gi0S^/Qd-Uf5Wg0Rc,Kb/Hb.:G'??&DJ)AL"BR*>R'BS)GV(BU18L.:G+AI':S01N2DC/;[3?P+?N&AQ#MR2PV/D_3@N/FO(BX-LW,MZ.KY6HT6?M9HW5CYDPW8K^9O\3Kb4Wg<Nj<U\=UeANdAUW5K^?GT@UT8MS2^N<TS9HCLUL9OO4WP<W]:PO;fOA\f=`J:[L>OZ=UU:e]7nkTjmM€tSuj=qŠAt…I~}iy–SjHq„Nl€<pŠK\}[b{Jg†AqyG~N‘•Z€¡W‚‰n~‡`u£`svJu•Xc‚?u{cq”P‡‰]VAUQ7x„Qg‰M]a8‡§E}ˆ*`rXm€GƒBošNOSPWfG`3C{9Sb>Rg<UyHpfw\‹¥D‚®\ž¿_“Ê^­TWŒ^xŽ@d„Vf‚^mku‚JaˆjGgk[LJE†f7RŠHGS`e[9nh*EA==XCQT6QC=C0Ae@:OG&+1œ€FšÊYY" ++'*!66BG,Vi-Hx6LX.(:3(&#%.( *.%+4+89H,0N.$>(*-&( #&[J/4<)gbA^€cXw\BT)hrV?> PU4zoQgAVb3K[Gtvb¦ÊnqšmTNƒ›66<%(A5,£˜j³Çˆ‡°’¯+6E/&@A:7C= [d5haZOZ,89#cgU”–’¸„‰©mI{rA`~TnThQe€1Rs(=Od=YgclWMl<BX(@Z/‚€V‚‘\>]?>M,V_>‡oŠ]™†DPf‘~XÒÌvÄÉ>vwQ‹„gOWl^~˜Npž]zbƒ™Iwƒ9\d?YrCbmNd{[‹™Wh~K»¸_ž¯‹›½‡Òÿ¶éÿ´ßÿ„ˆ¨KXhH„•Tl¡~¨Ë’³Âg­h™¶n˜©w¬µz¢Àx¬ºn¨­u­£nŸ f™¯b•§iž±g˜ªe™MsˆM†•rÂÖ•¢Ó’§Ã‰¤Ç®Ôÿœ¾Ýmšhˆ›lv–ltŽlޏbŠ[„¢U“g†®o”Âf—Ÿd‘`¢cŠ«c«p¡¾xŒ¬pvŽ\x‘V|ŒJgmJd~Uq‘Sn•c‚ŸewŒ[€Œ_y‹f˜¦g«e‡œR„˜\—±b‘ªl‹¸žÀ]‡œeŽšcm…dƒ™hŽ«a™°W‡˜Gt„Xzš]kŠ_\yd{†WsvYRhN[xHmwKVi8NYQyh\t~Kmi;W_<S_8HJ%<@"=G+ES)<<6Lc8_p1QO(77&;>(5?*.?2 5, 
3129< @+ F<&@C3EA2A>3=62A-/V!"o' Q5/7.@0'.*/'(   6 <0<>EA/AG/J<4=M4@C;EI.=I3;?,>C0E>/DN/JS5YQ6OX:TXEMS6MT9ZR:NU1yS=ra8Um<J_>FR?QT1Na:G^;RS;JP9MQ:NX5I^?VS;aS3\m5Ud=R[8PQ9ZM2^d3Ya@N^ELQ5PK-LQ.NLFIQKFM6HL1XW1WS=N[DE^:5R7BD/PM(CX1TO1W_2TX2NM1NP,WW0TW.G^:GT3=W1<K1=J,DN-RU0S_2He@L\?H`)N\8FT7NR/PX+G_4]S.Gb+CU8VV8Fh2RU=Pg4Pc:Fb@DP5YP O^)\^7_t>Mi@L`&Ca<^S;Uv8VnAF`=OZ2cm7SrBMc9Ma<;U7HN5K_GLY<GS7OZ6^S3Uc3R`<_bC]f6S_;P[3M`3Oa=Ld4Ua1\l>Ji;bX5\x4SpDTgCUw4Xg8Og8OZ1Oe4dhDi:T}<]dDRy:Fj@XZ6If.B^,TL-H],JO*HV-SW2Pc7J]-CZ'SW-Ob(HT.GX$?W*=S.=P&FM&DZ&DG7HY9NV.GY-GU,FZ/J_D_q;Li:FT5XZ4fk=Gw;[\;Ek1MX:O_>Zi>UlE_gEKn<Pf<I`;Ve1Ri5Nm7Wg7U‡FRj6PU'R^.Ge,IL'FQ1HX/FVMQP)WT4PO5\L3^U<_hGXaD_]Hig8czL`pMxiBj~Vj„S~žbiLmqHI]E`V:elGRtclkeu‡cf^r^l—eg‡bYŽUr“k‰œHƒKŽ™a®m¸W“¨=Ž™d·Å]±ÍMo´P~¢l—šN‘²EWScpKj6xŸRj“7g‰.ir-p‹0t›9€•Go¾Qe™YLwKDaYvmKu”]lKh~PVjAemHe”i9VX>AU]^C~y=Nv</D!7-0TYVzr*„§.g~17?1"/0$4(+(%.**(>=] 5|   /)'\`N$SMJ2B;NQLpFDp!':", *" / dV=R!6@ GBEU9FUOq~<k~+_`;Aa0MA=t‡G‰Z—«DšªE¤Ûp|¿_r·>rh=e ioˆoft@{ˆ9‰‚dh‰4iy)ys=Ç윎Γy…j ¤Q~£,s’ 9›§F§¹<Vv50F6.:D64'bb-auH£pš³t`Œ]o}5E^3Ac7EKEepSE^3;M%^]4Z€JTc9j‹9W|5frTcr[A?%mq?U}CNWW@E2XS5’¨g†®›­•|ŒGEUFBM3HQ?wm<‡„`„¥]§^m4Zh6OZBOhORjj W`Š_h„oŸ¨d‹§§°ã·¸çœ—·W‚L[~]Œ¬n¥½²´Ì²¾Ó~°ÆŠ«Â{š­o®§l¯³vÃÏy½Çˆ¾Å€¯¶w£®t’¨tŒ¨aЍh‰ªfÆ€› „§¥‚…¿x•°’§Ê»£Ø…­Æk›³aŠ˜Y†—h˜»j“¨`”«h”¦iŽªo Èv¶Ñj§µ~Ÿºlž¶l±n¤Á{°Àc…š]’[oŒTcyOxTg~So‡\{’`iŠ_šh|—g”©a„ŸhŠ¥u›»|™¿Œžqq„vŸo®fŠ¥^t^|•g‚Ÿu“³t«[|ƒSh„Mhp@JTIRbP_vRh}DXsSk€Kmx=RhhwŒfo{jy~NQ\>AHEm|8Nb4Qd;YmM}Ÿ<dj=ayUr‰Evu?:<+9C,7?'&A*"-)?F?DM)AH3=M:3?3;@1D5,N#$c&#T,%8)6@1,FC(3I).8#-1)+5'9-:C:F&EG,AE1AB,9K1?F0AI.AL/DE/SK.@Y.GM7PQ3ZT9Gf?GOBTS;OZ@SY<dU:ZT@XR:RX<TT9ZZ5X[1MbBKZ=QT;L\6[U9N[9JR>KS:WS6PcAR[DNY;QT6Q\5V_<[cEObDNYAUS6a_8UZ8ZW9Ne2FX=MT2Q^/MaAEZ=?X8IM*OX&Ja6PZ2Di4X]9^\8Ng4F\9OU3Ob6NW6MZ,DY,AS#JO&K\(KZ0La9Ud9Fk7GW:L^5^d9Ru.Kb?Q\*Re2Od;Jd5TY:V]5Mm7Yc=XgCWg8Pc3Nc;X^2Yk=cqFWq7^i;Zn9MmAQiGThFHn6emBQyEShFRj?Wl6jh/kz<I{<_`@[u9Xh@\lBfo?ey<`yB_oC\v4Qc9``3Ss9ZZ9Lp8TY@c`7G„AV[?aa7_]7]i:SkBWq=Qh=EZ2X`>NyD[V@Y_>QHIi>OcBVb;Wo6QkB\m>Wf=`o5[v:Qj>hp7[u<iz=Et5W_<Jg8TY8Dc(B`-HS8IY2H`5@Z1P]5Of5Qb1ck4]n7_nBWk2Hw7^_=T€TUi7PeMF`9TZ6Tg9XjDVyCNjGYk6_{H_zAa{<Sv=Md<Xj@Ui?W_9Pq5M\:Rc6R\/Xb7Wh*is,eu3hx8vŠBr…9V|?Uu=fDW€NXlFVmKduDv‚Jo‡Lt‰Qn˜S{‘Fb‚=f|5mn@z“K[yNmg7„C‰œSlˆcaŠ[quJe…SgŒgr~YƒVsžp§i†©o‰•l©l’³{Ž¿f™­g©·rŠ¿u–§džµM~O˜™pn­^”«Y‚ g€–Z€YyŸNrwO?p7}s6\‚0[n<\tb=`^f‡e7KKbdAV‹[byEYk"l‹Z˜€bt@;)*<-PIBv•gW~gBacFi?0G&$5#6!$*5"&!+    , '+9:9.;4#?:()@/L[Rj’/Z}&5.+#1J!(7LR4/_N[a9[qG8SR,8PGZ`—Mvˆ?¾L±is—sn‡“t”˜_€ˆm˜[luX„—dVh=7HHgoX·Ü„wŒ^h{Iw„Pž³p|¢¤†ÊŠ„¼e¡žz³£V…´VŸ»p·ÖŠ`|~Ok.Qb-Uc#XZ$MV:V]=f’}Pz†?_FPql—ŸAax3js?z€G…Š.\U'f†c£eˆ­O„š`b†CRV:‡}7Tg.ipGYn:Wa6OV,ffUsnir|ga{l<[WYU-ws4ŠAWud„{g¦™h£·t>eTER1BV+CM/DR;XvWg@lŒebŒgWn\y’sxžq¦kb~IWkN:XpXzˆƒ›˜Š˜—ƒ’“—ª”¹¿±Èx¡µŒ¹Ü±Àγ¸Ê«ª¿…ÀÅvª·k²ºuš»q–ªl©°y–¬sˆ¦i‡¥`€¯jƒ¢|hš›…®‡®|}£_}¡t¤¼ˆ«ÄuŸ®j}¦`|œm¡··Ñ¿Îw›¯y”³y½sŸ¹²Ës…ªay‹RjOZpKlvK„ƒR‚‰Xˆ—_„”UƒŽfuŽkx–e‚£kŒ©ž¬†ˆ·nuUm…]v—w“©lz¤d¨fŠf†Ÿo‡£tx›i}–[‚U€>ht5_lRu™i”¹_z†\KQ^@RWVf{]djY`gCmh2ENIi„O^sKs’WyŒh”°^‰™P“Y{ŠSmƒQ9C.:F+2E'E*"+ " <BC>J.<H5:J05D-;D1A5(J"%Q" K$"8#*D/(CL'>N8>G68J%>@$KA BQ;K)?L+>G,?H/EJ1<L3?H/KJ-AM0?H/HM.FW3JN5WO.]X8Qb;OGERO8KV?LO@]G=YV:YUC\Z:b`A`eCe\<FhJHRCPJ3OS;SR;K[7EV;AP6KP/IR4GV8KU6HV5DU4G[=LY7NY;JZ7U\4Me7PY:Pa8J_7>a>DY2GY-EZ;GS<J]7LU-K_1I\4QU5Ma:VW7Yb6Rp7Td=Se3Jd0Le9Rc6Sd5H`0d]+Pq4Zj6Ol9Sh>Q_<]h=[v7Xr@Vq=Wo@ee<Vz?Yi@Lj8Mb7Tb8DjCV]7Vn7KkAI_LQd<Pn6Si:Kq@SdBcn:KyHOi?No2Da7fe7^|7NsBN`ATa<Zk;tl<tŒH[^gpDZy@\zAQoG?mBP\=_pGIvEZdEIs@xa=]|HHp@VdAfo5sz=UˆBPb7Oh:ff=^E_tGTo>J`@Xg7Gu>gZ=`z4FfFKQ0PU0Lf2G^;UbA^s?vj=[y>Wj@]oGZoD^g?dvKZ{AcmOW|BY^>|f2N—?TT<P\,S`/Me;Zf/T_/Pa6Xc8Yh:Tf@^g@[xGYk<Ui2ceA]p?^yEYu@gf1gƒGavKXFc|Abq9f{CVmDguE^…Mcs>cƒ;i„FbzFYkJan2Zs7[p?Ui7_q<VsMdyKU|EdjGb{ZjzYQ†Mf{UWwDTe:bs=V„8`tK_uIrxR] V[kMT~Qiy9j‚Nu‡X{QˆŽLs—L¢j§álxŒ^{œfŒ§j‚¦g|Ÿd•a•¬j’³€¯s¶wš©c¢½n–ªr}§}‘®qŽœxšÇt•°q–¶‹’ÀtŸÜsŸyÄiƒ™^š­f—€¤¿W’³Q„–eŒ¬h’¹G†Éƒn|(|ŽDu|-W[78?7:A=D@;7`_(;Q0-\f1JPBY#=e‰6G5Wg$3O;ZI..S"<><F=J#IZ)4  # !#$5&. '#-&/);P&7/&'0#>8.XdM;ZN>3zR2Z&DB&Pg"Tm3\uIq€/nz*w5sb„£}Žžy¹É|d†C_rSCOVpfK\}Nfxe„¨n…›MXm,alCq““FH8amL„X‘¼hi’jXkIsoH¶Ây¸Ø…®ÁcÎ傪ቀ¯N‚¢Qai>afDbwNnz>pAOh<<N+9A"3C65SxVro`†bSzx—w¬<kXYxjGSz‡Ÿu\lY2EHE>+M\:Lh=KU5DQ5UjRx–aŠŽJ|8Š{6µT7^S<WLrˆGjspˆ~t”aHL,ic/ˆ8KT+=E1ZnD`n@•œKƒ˜Cz…>}šW„¥c¬Qš¢Em€0IU,gqPŒªl¤¤c‘§R‹¦‚Ûç•Åà…Çٸϓ²Æ’æÆ‘ºÂ°¿¤Ð斸еé¢ÕðxÅä•Ájˆ£h¦Yj|\{‹j…š`jˆ`oŒiazau•iŽ t˜Œ–¾~–¶SŠ¢dŒ©‹ˆ‰®p‚y¯ˆ{ ‡«}‡£}t“]~–Vw’EsCvˆR‡¤Y™YŒ `Š¥[›XƒMVsd’q—ªw”±t•¯eƒ¨SwŠOl‰l{šRx™\…±l„§o µeŒ¡_t“ak‡Uf{bi–\Š¥S‘–\}Ÿw}¨rj†UYtLFR9QSJ^nL^`JhyLƒHh|\‹›Uj{`‚fov§y’›Zw‹\tˆUj~P;C/=H07E-=&!!. B<@GC,DN,BM/AH)>H'E=(D) B""; 6)B)#LG%DL2EM2EJ*LI+QJ%EP,MM-RW,VU,IO/HK2KJ-QR/LR+EW6MN1IQ.XU3N`4dX5nZ4Y\>SZCSV:JX9UOAXW6`a0X`AR`>RaCLf?QUAHd@LYF\S3K_9UV=Ha2HU?DU8TS*Nc+NY5U[2H`.G\9AW2QT+I]3WY/\_3Ne7S^9Kf<J`7Da6OT0?])FT4GV0E[,JV)C^2BT2OV-Zc1fg7d{;^tIPn?I];Gd3J^:KZ1I^9A]1OT0Od?Vd8Dg:B\;L[/Od5]j<RkDLcCN^;Qc8LpEVcAKl>L\8Ka2C`9X\*Rj6GcA\^:Ey4Nb7Sd4JcBJe4Le9DgKI]<Vk8Ij:Xc5`uCYrJDzETg9\kC_o:N{W_iT|z2i™EbƒIW€Bou;Xˆ1^n6CoEI\5Ke>`m7[uCi{>Vs5Qv7YkCVrORpG\j4l{4T~Kbk:ZqBqr9v1NzJ[Y"f{A^„LWvBan2gq7lu7T|5^p>or>fCdyDWq?am:Sq@Xt=aƒQ]uAnmH`‚DTx?esYQxBa[?ei<d~=ZrDZ[3ir/p|:t}:VƒKQb2\c@Wz<LuAXo5ilB[„FZoN^r@WpNSe@nqKm‡NdƒB`lDh{Pp’KnNjyCj‡F{Bc‘M\x@cx>ouA_ˆ7bgBd~ERk?Wi?SmFZs9Vg=Nn9\k9Tƒ:nl>eŠ2he9x¡Eg‰Iv}Ea‹?m‰W\~7bsCp‹IVr?a{JYyRq„O|‚P‚¢^†¤‚wž]‘žZ¥´lw]s²^w‘Vq¤jt˜cg‘zl“lw•dƒ«y™¬w±zˆ©oŸµr–¼ƒ•¶w—Éi‡Çd °q¬¼w”Óž›¾pšÅÀ” ¨{—Ç— ¿t–¤`›®~˜¶hƒ `‰ c°o—°e›È[‘´Fy‘0[p$¼3uœ#‘¹E€¯Ju}/r„/Km*R|T1S-/;/8L 7D&EJ0<N0Ff@2U-4C!1002@7O"TZKf!Ia 3A#,7-,"TH+xm1Kb5537*RS0hbKu†[Lg+*5ZH*jx9G_?’gPde„‡sŠÂks¥yyžqp¯wUvtmŠJay[jƒ8 ŒRjK‚xY[›fKZibƒWUta^dS›¤K™ÎOawnBec_kWNh=[gZ{ƒ‡¢°{q”ƒ€ž‘eˆjp’\Ÿ¦h„²S~®Eb{L\‚PgxcRi=q„32M&4A<?)DY6‡ˆXv¢D‘–Ub‹YYmCiz.Rx:7EiU^]jx@‚u-{6š`ÅTv­6¥?ÅÀKb”RvpKd€¯f-D@%11@$tt[–¾WbuD\gFv}7™›e¨ÌŠ»ë=‹”.fm>y†Nª¹]›¥[ެP’ j}«}’º\zŽv‹¶_v=o†\m~c“wdY–¦z³Ð‘¾Á†¦Í‹Ðêz¿ñ¨Ål‘Âz‘¬ˆª›’°rx©¢§à£—Ê€€´u›Ð‡éÛcawSis†¡cx—Zm‘Sc‰Wh„[pa_|nzšwƒ“\m™p}­jv‹ky˜l†šlz—akˆ_qŒZW{WcuPg[lŽW€•Tw˜\–¼k›»oœ¸g…²b{—mŽ©Km€Qv‘a‡¤rˆ¦ƒ Åy’¾exˆHczc˜NeˆWp—lx¤t…¬e i‡§k‘Rn‰Phn~Ÿo…§c€˜p{euFF_9AV9HJE`o>O]L^~ayŠT]wt~©[m‰Y\‡ckn}žtoˆZgXpˆ]qŠL9?.@A.4C%>+$8 D*9C=?,DK,DO,BI/DO.CE-?)#6 0 . J GMEO*JM2KK/RR*VM.US2WX8`S;_U;OU8RN3US3\^=T`=Mc@YT>Mc<M^>V^;R_;RXBV]<\]D]U=T];ZMAP`4^Y2Zf<Ve>V^CHZ:OR3NZ;R^<Ze3Jb9KX>R[5P`9Ka/NX.I`,IR3Oa1Ib5J^5Kc1VY0^d.Qi6Vb6Mf=J_?Ia6Cc;DT4IS+P_/J]4A[.IS.QU.A]0>U+LR*E].I_6Ye:WlBKj@G`=L\1Oe7F_8Ld0LW5Kb'fe4F7Ac9H\5M^1Ee8I[6Y`1@a<SY/Qo5Hl;M\:Nb7Rg6Fh/Hc7N`1Pe.Jd?K],Fd@P[7\h.In6Qd-Ng3Q]5Mg,Ld6Hg=B`;V\8PkLXt?Qj;jl8T€MkkHbƒ?r€AR•TXvSl|Pl†CTPctEJ}GWi2Qz<Yj>N{FVx?^xLYz=zn=aŽ?Vo>d/e=Q‰O`p2Vv?roARLYqNV€HWlBvKu’Mv‰:c“RQwQcn<f‡8_„PhUh˜Kc‡PmŒOiŒHX<z€6U”KwzCY„JZhIXm;]r;lr1ru=iˆ<ez>j|9f€GXgIb{MUsNLc:Yj1]u<LlC[g2sw:v Qp”CuJm‘>w=i›Ey’LjšSpsHX†KcvQ\}KOvFpˆTt–S|‰X‚‹Jr˜LtCqM^DXg>ay@c‹6cr9k„4s5\‡:fy=mˆ7Y|:htLu˜Z`“eXyRbsISuP_k8y€S_ŒDcsXy‡Ps˜Bn’?aˆD‚Ah”cnZr–Rƒ¤^†–o–k{—TlBw‰Ml‘YlŠL_zGu’S£iˆ¤gxµtf‡_}•p}£o~§|…is­s˜ g¡Çt›ç‹ŒÀl‡ºyˆ½ˆŸ³‡­¾n¨ÂgµÓt»çu³g áS‚ÉZ›®‰¤lš›k…Ôs…ƒc†ŠYv£Y|œV¤®^›Å€…·m’´ck‹MwM±¥<”š*”À3‹º:|”/’½>–(‡œ.OW-UC`w)‰‰$ˆ )k Q<UNd`-6U"Šk^fXWDTnQ\TFxn2Fj bQ4œ³EÞ„˜¥YW’1o‚åÚyÀ¿4}–t°Æ[¡½xClJkfFUeAoƒ>h‡?q˜XT}^Ž£Q]’L|’P„œ]“¯OºÐ;i‹hD`U‰uaeœlHSmj†=BK'l~Y‡‰;¥µS™ÉUÛÅY¡ÝMˆ¤Sœ½aˆ˜^œ»sa‰_VleŠ¢CÒ²fœÿx†¿mSkEUZ,S]%@™ÄL¨g’¡M‹·d]yCYƒI^„7gu<]ƒ,mq>ŽY“µv›OtœR]†^pœW‡¥g‡¬jH_CŸ¬^pte‰ZOp&3: fu=l‡ykŽRt=c‹Tvr¯Ò‹¢Ä‹·ÒŸwªwNsHO\X¬¸|½ßxÇâŽÈᇾڈ¡¾•„™t©wœ¨]¢±w³]‚˜]z‰Q‚šm¦Á€®Ã¦Ào•Åx…´fr£KhHgrQpXY€EBgPVzjZ]}šl§º£€ ulzCYqTe~ck„Tk€Tz’Sd‘T_€L\y[h‡c`ƒPax`n•`t’Yreq‡dpŽRe}I_€De{=cvFdzNz…\†³bƒ¬_ˆ­t‰¯r¶h²i‰¢az•Xp’[ƒ¥cƒ«n‘¢z‡¹…´nkKgz^oRe…Nq”iƒ–`l“nˆ«w“´kl€P^zRk–n„¢v˜±g‰^jƒUWp;T`;R_4KLGuHr„Eq‚W[|EIZhsŠhŠˆB_wR^ucj‚[m‰Uh•hx’mƒ W:B)E>'.?(</! 5 =-
3130@;&6B/AA-FB-FA6@N2;A(>)..$#)<@ELK)BI2LB.QH0IK0WP4TO7XJ@]M;TM=RM?LV7ISAIT<B_;LS>Ha<B[EIS9NS>GWANT8]_=aZ?QWCLN<QS8TR6]X<bZ:aT?WY<S[;RT6O`5U\9G_=FW:HU3Q[4Lf>Ma7HZ4LU2I]1KV3H[/LX2R]+S]8Lb5^Y=Ym=Of<Ra3Ad1IR-MZ*Mc,@e6=T9ER*IQ0N[.Ic4K[-Md1N`1S_/Sc4Ek=S\<Jh1Ig2Kf9Mi._c1an2S{<@yXPZ;S^1Nh,K`5L]6S_3Og5Pe1Nc5Oa5Ya7`l6[s<G}DRW2_h4^o5Xr<Qh-Q_:Sg-Zm6ZzGTi8Oi6O[7`a8V}9Hl9KS5Xa&Or<^e;`uIh~:`„FOyKNxNTlLfvQZƒL_rIK{LUpNXq:]yK_p9Ws=Tk=Hq=Rh7Ni?_k=t{<V„QVsLX|3VzB^iOP8ZpItCj›Zd‚<Rw>WsGesA`€TYŒJNrQ]v?vw3ƒH^šG^~9I|G_fF^ƒD_}DTu?SsD_tB_‚Bb‡Zd{:r‰Eg†?h?j}HeƒQ^{A‚ˆI‰–A€¢?]•AUpEbn<_}:k€?W†DWt<pu;`‚JYzJwyUk‰UƒƒCk•S\†K^|Uc{BhzHdŠ6lŽK]‡?[~4jNqQk—ZpˆKO}HgˆOuŠFh;`<_‡D}ˆAfŽXt‹S[’KsIl¤RƒŽEkNl‰Wg}G”’;fŒEkŒ<€.ržEyST“Enk@sˆIm–crŠFh…CcƒIly?‚O‹ŽK„¥j|“W›¼YzžW„ K„•J¢Y–™CoŸOm’_q›Wskq’FjŽNu‰^¨R€§YlŠjz¥`…¼b•¤œªl†Õqxeƒžw—¬¢¬ÙŽ’ÄšºÖŸªÊ”Åÿ¤šÒwŽ­q¦Ök¯¼’§ÒkÇâ~šà‹©ÃW¸e‡ÂžÝ„”¨T|­r¦¥P˜»d±†¾…›Å•›À~—½|›Ëˆ×ð«ã“±æ‡ Çoq‹b‚‘`“¥…Íò_‘©8¾ÝZÅïCÆÎe»÷}×Ü_Ìò=¡±L™ªT”¦I‰°G˜§|…¸Tœ\™½TŽ›W¤Â®¬Ìª­¦a´þosŒnp€/ª¢Jw±1]U@zuN{‚F“»:…ªIYnO„˜Zs†bOxcU^¤WdNY‡`>Wl–tCw‹HŠÄjd†6{…[¨±~›Ö`˜ŸaoˆŒ‘²su”Q–Êp_‡Rr‹ssBz•M›Ä•q—¤vˆTTwB:L/BR=Le4T`{ƒÄv’¦U€¨k^†Tr|J:ZD‚˜\}¬Oƒ¡]¨^°Ïj«Ç‚vV~¡Nt•;OcNavZYlNMiF]qwpŠIKj<Tc*Xj6SiNtŠ>auAk„OsO„¤b¼Ë~ƒ˜¨´ãd„<kf5¨ž\¯Ö½Æþ³¯ÜÏ·íÖŸÒ¯Ýð”yŒmw“jŒˆ–´‹‹²ËÝm¯Ã^uŒ_‘§nÉÔ{•¾bt‡eX}EPsQZv=GdaœY‘¥_“ž1GbFPgR[z]f{€e{UD[EVuHcC\tA^vEcuVay?bzMx“J^{Nb…HLb@PlIv™QsŽPk|GjBtƒG LŽžN—°I‡ Rž¨\…¥]†¶g ÏW‡¨eЧr¥Êp²YzŽWvŽd~šhw qr‰Uq‘bx•_h‚Ux‘VsMdVr•du‘Zpw’¹}¼ßwš®DmUyŸm£´u“§e{…LheFYiATX:<I6ASJe“Zh„Nb{Ei„Bk{OVfhXgFbiDR^LSjJbWY|jtvp“d6G/>;-5)-* -
3131 ?% F7"*;.+3/8+$?5#2:+>4,<%#&#7H6O=$NH*KF1N9.LB4\@5pH._I;^L<XK8XM<VR5IW9GN<GO5KI0@Z5ES:GQ6DL+>P0EL1FO/GP;>R7?L;:I2TI+rT-hW6YT?OY:LV<QP5QY4Z[6N_:KU4<S0FN/VZ-Yb;Sk6Q`8A\1AS4?S*CQ,IV)N[1Y]7Kc7^_9Hl9JgCCd;VW3Lc-Aa3:X5MV1A[*DU1BW(GY5P\0U_7Im7Ua8Sh4Lb6J^1Bb4G[7H]1M`0Si8Ji<Ia>Nc?Tc1P_2Oh<Tf.Ng5Gi6[h7Zr9Zm6Qe6Vs:boAx~FU–M\dC|n6W@NmEOi<Sm@kq4p}?tzL_‹C^tB`p8]u2a{=VtCTf2Vi.^n7Un8ho@bˆ9cˆRZ~PWvDOv:[f4[|Fc|H]xAd{<b|@‚zBq @\‡XZ}IUuAPn;Ll3Rp2`oF`|HfwA[7hu;\|@_v<k3i€BxƒKa¡DjyLM‚BcmAdŒExGrŸC_š=f{8vLf—NSy9S„O`{-p„DY‡AnuCa8^‚:[p>cz@UƒD\}<m‚Db‚I`yHpANClo;r“rgepZtCnBfŽLX~>\{Gbt?V?byR[}=[y=o|Fk‹Vvˆ`|Ab”B\r=ax3t†Gm„H_„N_‡<ix8_‘EsEŒ©Wnˆ5k|FmšR…ŠI…²HtMy‰A~”Oz•H›H•­E{’Cl™Er”E˜W~¬a¨_„£Q}£X…™Wˆ¿Fw«Oz”[uš=m‡F¢¡I‹Ærv•Ki”Lt9n•f†ŠP~j€œXy›e•=Šœi©ml‹jy–c~¢^¥¦P…ÇmŠ¡H†ŸS„®Xd›Yt’is—a|Žb…˜Rm“`q“k’¯mn¢no]—’S‡ Y¶“¬Ç‹}³š¥c¡Ð–“¨y‰£d…´•£x–±‰¸Ë‘¨×Ÿ—Ç‘§r¹vŸËp’©V‡ŽN“™`Šž`~µ\}¥e•¯c•Ê~µÝˆ¨Ë†Š³x¡Õ‡”ᆳÁ{Œ¤_¦¥[±¾w¡Æ™¦½g²ã¨óþ¹˜ÛŸ’ÅŽ”±’¾Ë°®–©Ô™Ùv¾ÐiÀÛ–½ßsŸ¿w×ÑmÚÿr¸÷x£©dˆ³…ˆ´“†›L–K–Çm¡¤|¿¿a“­e·Xn‘t‡¢Z ¬F³U˜“Kt|AozKl=’ŠqŒ·A`yo__•X’[uœjjy£‚DfozlJg†S_jM^o_£ÅIºÅZt˜h‡X®ˆ…¸XrwCa†1{-vv,n†Mx€F…xSª¨[¡ÆTœP_MTp5<ci¦Xl•]\yb† o\‡†l—Rf”UZ{SYr9|KUo@^q9UtISrDbJu›DmH†›<{htŒK_tIj{Ny“`[}wmkh›¼to}E|€\Ьpy“¯Áæ¡‚˜zˆžŽ”´†¦ ®Z–±gx¢|¬z޶wÂݵÙÿl°]ˆ¤gФzvVap?O\:[r:L^7ksS {žyTv\Yt3TiGsJf{V†‘Kgq7I\9Pk:Wd@VaABU@E\;JfHJeEFUDRjB_q4€”PßåY‹—S}„E|‹J‹U¨¤u¶ÖlÁÛa ÉrêØa…¬Qޝk‘¾l~ `£u|§‘¤Ì|™ÃYw‘]t”e…˜[ZsJWuPgˆLl|]€‘^n…PcyKPu[^‚WV†b_—’—Í’Ÿ±^’“W€…³¥kƒŠ\Q^FCP>CU<BO23C4[kPc‚_yƒJiyVjƒVx‚IZqF\jAT[?YbIapC`n=GkXf†SYvQ'=1$/4&"!
3132
31332/)%(!&&& ))(,!3(8(&/9%I7FD':H0B<.C@*J:*i=-YM0RRCML<BL8JP1@T7PI?XS0[U-EZ6EQ2DL.@H'>E)JB);O)@N0<K+;P3BJ']H&kX,YU4HS@FY:IU7AS0MV1VY6N\3DY>BT5HS.WV(R`5Ti6Pg<GX<DZ.HT-BO(@X,EY,U^/Pc4Q_9G`9M]AI]5Kd7Hb3G_:D[/M[0I`1I`2HZ,DW2dZ+Qv5Fe7V_3Tj6Gl=Af6G[3J_6@V2SZ-Uk5ImDT_8Tk1]o:vw;]‰ANr?Ec6J_5Yb5Vr<Vn;NqAOi>Qi=^rAT{R]mHew<Tu^EjE>U2JX0Sf3VlAlsM\€P\wGc~GW€K\{G\€Pav>^t:S:cyAa€8axCZvBdu@[qJtyGg˜;r‚RaŽGh‚AU†LwsHƒ—H} Xqac€M_}@XoDVu<]w?mzBPqH[p?VyMmp<h~JY{A_p8Nq>WmCcrKNŽ?WiQNl6Im@RpGawRU‚NPsCaoGeqLe‡@[}<\w=fy>a…LŠ@z¢Kg¥M\ˆAQz@SrDpwBd–>gŠKb€F‡GЏ]d>d…Uf‰Rk|?hŒSe“Ib‚JZˆ;„wBhŒBw†Ha†2{}Fƒ‡H}®Po£IjŠKe–NjvP^y;l}8zIe•Ot…He‚Nn|Cw°MsœTtšV~š\lŸRt”]„¢FžXz°]’­]„Ç]¤\w•LŒ¬f~«sФN‡ºSx¤@‡¢Py¬Up£VŒ¡Yy¹P|·YгYš³Zp°Oz“<z©T~¢ss”Tq™5gIo™SqRžGhŸFo‹Bz–Y~£No¥[i”Of‰Qd’O{’bd‹`ˆ™n˜·~©Å„äQ¢ÅSr¥U|“H~¡TzR‚¡O´d†Ïn•´^vŸnt¤Î‘–´‰o¥av‡s•­lˆ½oy¥d–®mƒ¢m”ÀrŽÁt ·|¨s—˜]”¯a¤·kœ°i™ÈkÁm¾kŠÞ^’¿bv•`ªgª¿l£Ãr¸Ï‰¶ß^¬Ù|¶Ý—±Ùn¼Ñg³Ô|˜Ð†§®pr›‰ƒ“¥¤¼ˆ«ÕˆŸ¼g™é‚¢µ\u±|«‡—´‡ û‰Œ´wŸÑ†½Õ˜‘°œ­ÜŸ±ÐŒ–Í‚…«Z ÎnÖb¢¶r½ç¢íÿ°·ýq•ÆlÃÜd›Æg¹öu«ÕcÑi””`£ÆdÂÀeËß[‡¨S·Íj„“e—˜t›aUkRaxR…›|[r1Yk;QNBzZ¤¦HŒ¡a‰¤‰“·cf‡\y‡lœ¹a¡²Qy–Zˆ¤ ~œh‚Še¶qsŒe˜r¥Ä–ˆ£z| Hx€<¬P‚¯„`ƒX…¡Iˆ²`X}AdŠEnJ±_…­ou¥hXy>ZwSz¡GGm1v[vš_{˜U­joŽTq‡Li€Gf~Bk†Gr˜Bn„]¡Àr‚‰W•€Ž«oƒŸsu”€y–i–°p«Çm¢½jmkTuz—j˜»rbƒs½¿ÆÛùކžf fe}\†›OŒ™@•š@‡›Flˆ;\sQYmgSYVGVLuK\†UnWo‚slƒhdw=LR3GS6HP;BI8?N-9B7ayE\q'JX7ZmS¾¿ˆÿÿîÿÿÅãíX‚šO|“Vs]wžrªÓ{½xŒ¿š³‡ž¹”§±etŽhtXzˆYqƒt„¢Œžµix˜QcˆY]}Rj~DfvHh‡Je„S`tQSjCKk?Kh?_xCl™Ry ‰±†wkv’a”imŒa[jHQZ1FT6Tc8JT'5A:WkV\yfl‹[r~Tg}T^pHTmJiF]r@ZjGe…Mm}@`uKOpAFaI#&#)
3134   $",$2$%$)5.97$4;,0;+6:&;9'I:'_H*RG<LE99K8@A4EG2LD6TF1NT4FR=BL8KG.HF(DH+O?(?P)BK,<L(AR(KK(JR)LO/O\9OU<KX9UU/Cc1PS7CZ,AT2BT6IR/DY*FP1MX4Je7GY<CS:;X7PM1A^+FX,LY+R_'Ka5N`4RY/K`:J\5H^8K\3L]6Ba-K\5Ia1?`6RX0Jb0}a3\“GYyBQk>]p<Uw>]l?Iu4Wa8Ae-FW0Na,Fb;_]8as.dtGTKJtQPiBRc3Li6Ij<Uh?JpCNf<Xe=`m8Mu@gh=[†?iqCs…NT†LQp1me%bƒ0qHp‹?mMn‹Hq…<]xJTx;]fBks9v‡C^ŒGqr;lDaGhƒGd…G]‡J_wOu‰S`NU‚P\s=\vKiƒ@xƒZs’igŒZ`„T]zFJyHbhCc>vz@]J^v9im<ZvASjGrpFX}:nb7Qx9gp<bƒCar<bw7]n8]w3Yz0]u?`|:h3j|D’C˜Pm”L]?WrAht>t‡ax lV LZqBi„4Ls6QqE\sBYFzJb£pWSb};\‡OVA^~Nc“F[‡=n‚F_Ž@v~S†SŒ¤Gz±N{žMŠ«fÀ\bŠQz‹Jc—9cu=[zC…Rz¢^jˆAˆ—Et“Fh‰Nb–JjŠIc†Q`Ž]w„Eu•ov˜ZoTc¢S}«cn•L{Q…›W}•Yšbu¦e~–[—O|¶Vv˜M~•Vu—xS«Îrz¨M‡»n|ŽX‰­Y´SoœD{|]q¯MzFy¥T{ša…IqHz¨@‹¯b„•DšL“·?pŒL†“I ÐK€¤D€—R‡¡^m§ac¯\Œ™P˜¥PŒµP¥V¾[›³g…˜Z~¯V‘»l¬w†¯rq«Uo‘Fvšf|Š]‘£St³[’±]”¬f|¥jq~§V{¨P~®l £w…—•†°vneŸ|œÒh|°†Ž¸aªS¡»u³Õ|…Åz¤Ãk­Å– è±Å“¡åv¬Òs“¯r¤³l˜ QÂF·e¡ÅŠœÒuÅka“a¢‹K£Rt—[|€qµÚnŸ«nŒºv›±vÊ‚“°‘†«n§Èk‹¨m½Êk£Åd¿ÙŠ¾â¹ºî“Çøuàÿ¡­íp¡À|¸ÄzÒáv°á‚°¬d²Înž¸u­Rcm‡u‡c«Ô‚¾Vtr6†‹NupWµ·Kƒ…Eœ@Œ¦}–’jlp\ÁÁ~}–tx™Ct{Ed}dYo…‰ˆaµksrµÊr†e}Ÿh^†°i`oVg‚j~e½aUiOlG”«pq^y‰NU‰:\‚N`}aš]gJVh8E\ICXG_o-Zx^|£b†£tsžc…¯`z“Y™Gb„AfSvšfˆšYthžV©³ušÍ€‚ª^‰šVp•c™s”¸ÀºÜ‡«Jg€Qm†z¥Yu†níðÏÛô•§WZuV\jN€”]Tqmr‚]atV~‰P°žNnx5Zr4upEWo[XoH\kEG]@BO@Uf=P]5R^;|}3S^1Pi5hq/?YU…™Zìçg±µg“§²“µÿÿÿô·ÉÎÒ{ÿßb £Z…¢]ˆªl{ c{‘khƒzy”ŸŽµq~‘Xd{Qi|Vk€edƒgt˜k€œNl…HKd@GcH\pDKcLdzDmt;Qh9_p9`l>UpLc•w•´—³dx›Nf’Yt˜VoŠHm~Afu6U`5Ic2JX.CL<\qL`z_v^lwN_hJZi=TcMe}MhƒGk…@d„YnQd}CUn=Kb=     !+ 3#"# ",2(.401$.3&6/$0:=5!Z6#];*V<8DE1DA2E8#J?+R?'HY+BO9IF.HC%HI$NF1VK+GI,EE1GH)MM-@P(CM.QN-G]2LR8JX0MQ2L]3FS4@S*=R0EN(GT'MY1JZ.G[0\T1Le8JW:BQ2PO)Q[/Mb5J`*Hb/D]4FZ.W^0N^0Xe7Vh3Sd6YZ5Bp0K^=La2Pe1J`)Vc.gl:JŽNOnJPg:Sg9Up>Qt?\o@Yz8Pq<Ie2I_3d]-_m1Zq>TtGXkFbpGq{;VŽ<_rC_z:Wy<WjEKh:Wf6_p7^tP]t6[zH^~B`„JTX]o;Hr4^i@pvNl“JiŠScŠUayRivKWIEy7ce@~xE`ƒR\pD]uAJzNej;X~MRw;ToBz~@w“UP•Ibi9e‚=i„EgMiyQ`Mc…DN€H`cAd{1hyG`ƒDkyQgt<a<rn?\@\uB[sHb|5[ˆKTk6Li>Xm=]m;i|DSAYl>`…8On=Zt>cvDawHmZ”^‚¨Qy˜Oc‚LmQ~ˆMf–aY…:_t<MwIet/T„@}sDjvGX‡VPu<Zt8v{E^“<\t7V€Hb‰Tr~EcˆPcƒ8pxC^˜\Mo“Gn”Hƒ€[ª´B^¥Te|fvŠ@us?z“9z ^yˆF–¯Z_¦W“‰R†ÑKg§Uk“S`‹?‘žDf¡Ht‘Fw£GlŸI{KŠ¡TŒªZ—Ãf´T~²Q_˜f–Su”Pc¦Opt^k–7ƒ”N|¬L‹Ÿv…—Y¹g—¾j„¼k‚—a~³ZšSs¶av•Ož¥_ǰM—âT|¢H’¸O‚´g•œs‹Çp Æ]±]}›Q²kˆ¼j{—^‘ v”®Lй_¨g™¡a†¯j‹¤f©gx¤i–©m†Å†˜ aš¼[ˆ¶Tƒ¡d£ÈX˜¸I›×d‹‘Ss«Zw˜UФV…¯aŒ¡_‡¬YŠŸ^žN§Ám£d~žMn†\šµJ˜¬UÄh—¯_|¦jФp°]¯ršK~¢ux v«¼’Èw–±t¾…­Å±Òp¢Ãf¢Áe²Ëu Îl¶Çr®Ói±ÏK¨Ñƒ˜µ^°ºoËòi¡à•‘Çl…ªjušV€™e|˜‰¢YÇÆ«åw±‘’Æ«×wÁô„­ã„Ûï¤Øÿ¶»å‹é霮ò±Ô¯Ñÿ°´ÿµÈ¢°ß~‹ÂQx‘J›W¤½ÛÿwÀÿ\£¹UŸ·W£¢‚‘݃œÚ†·}›¹m¢®^ÃÙv›Sˆ¥T’F…L]€Kk‹ˆQŒe_iI†©r~¢_‘¬L‡¤k޹Xg‚>u–K|¨ejbgŒ;x˜bm•|m›KmŠXXn:\†Nj‹LDhGH]@d‡Fo†5eŒ/NgAHcE\sJ‘µl„®L^€g…¤j Óu€¾KmœRz°k—Çz†¼f€¸ršÀvq©r—·hk’Zj‘T†·w§™Œ´¨¾g˜½^b€Sm‹d~³r_™ËZ’vQkYw¡>dRwTb|:?TCbkF[dhˆ£„Õì†ÜðqÃÆRV`=>TCJaA<L%8L$6F5_s:KYJ[g|¹Én³Sjm9k~lÿÿäüÿ¿ÁÑŒÜÓ…¹ÁÃÑïÔÿÿ»žÂ´»Çˆbzb™š_ž¥Rp€ERdIXeMkr]PgXd~PpƒJv}LitOawRd‡dl{TYp=Ub26I5;U25N;IaM}…DUd?SkMe~;[xOeŽz³sršX_†O¢PwšW|“T{€@FZ;?U4KW3DT4COBXpJPknd‹b^wIOeTexCXfCYiPn€Ru†@d|KSsQLp^›`rŒb           !2!$ $"%$+**"#* ')).10B1K9#P@1FJ3A@4F>*BC&@C,EG,PH6@W*E@0=I)AD/BP,>E0H>.YI+QJ2HK3<L,CK-EV0?Q7LQ(MT/HY1PV4TT-WV*PS(Ma/Fb/B[2JX3\W)Ns5S]@J\2K\1MX2Vf4]e6Fs7]\8Tl/Xf0_m5bp@Yp<`j8Qi8Pb=I`5f\%\€2[p<`p7hu8YƒJWk>Um6Xj7Wv?mwC`‡<fƒFN…NVw9Nn-lg9n0Z‹N`zMoy:cF\ƒQZ{UOwCXqCWp<SnTTn:Em6dk6^{;Zy?_r>ht@[‰CfwH\‡:L=Yl9]}?j‰Mm`o†Xb†Id}Gm|J_ˆDRt<dp;jwHS}Eap?i‡EZ‚7KzBDf:Tg1dz-n‰U^}IWt;V{?_sF†Ed£G€Cm”@P…Lbs;kBjˆ@PJYp=]nCrxFZv9WxGdz=O‚E|u6R“Jlz8_€7Ks3\n2Yz9[lBtu2`›?^†Bhy<^€Bi…;[F\ƒGY}ia|W_{URBq{BdŠUtyCY‹A`y2\r5\t?ez3l†;qL]{7K‚3_g9M}MRm5[{Af€8gŒOlGc‰Hp‹Je„Qv‡9b`„†I µL›Òn«ŠY…Ev‰<jR`~Gh„dcŒNRyGl€^p•=X“uH~™Lf¦La‹Ks™SfCh…Po€O`‘Q~Cy³|ˆžpyŸWn‹qx{I|¤Fg„@€¢RkBrWˆ¯Fm‘V€“^{¯qªi€º„¸j­QФn}®[±Ä£ÄFyÆgF\Oz}”’¡`}ªc~¡Z¦²N…Éa|Ÿ|uf‰§c¨ÊXžR{œQŒ¾Q…ªYšµ]¹Îb†¸hs˜O†žaÅYy¥Dz˜`“ŸMtžRŽ¿x¢Ìezµ_˜¾r•ªc~¸y‡­U|®M~”Tv¢`’¹[fœZ’k—ªbd]OkSƒ„O°b™=“£a¯²j‘‡†—p—U‹¹go|KšÁf~›]{¡]nžO|šj{™h˜±x‰±c˜§q´À€›Ào‚¹€™Á‰¦îˆŸÂŒ«ì¬¦Â‡¡Åo°¹_ºÕ ÕœÁóŒ¸Åm¨ØX¾ÌW¡¹_ Ïc†®\‹­}­z~”\Œ¨\­ÙŽ’½p¬oµÊ~ͤ—¯©Â⺎¾v{–q‘°{§¼{‘¿jˆº€¦Øj¯·Y¯n›Á–È’ºæ‹¼ä~¡Ïq†°gt‘L­½a²ãp“ÅX¥Îj™Åw£Å_¡Èb‹°pˆµ\™»N µmËöT€¤AuŽLެj}š]}ŒYŠ¢S«OfMœ¦[m’Do•N`vKyŒYr¬SgMW|FiKnGTy.u};{­LZv[x§]Sn5Qh;f|By—dŠŸ[œ±e—Çw¶~q¦cޝ]p˜X›m¡Èsx­d˜±ee”\^PNh<C`MbnbmeŠga`i‰SjG†™Vj‘ZnRk|G›¶_t’Y‹ i˜¶{œNqAg@XeOe|®ÛôÈâõ¹ Ãm`~5p‹8p~:CS9Yr%R^,^gI–˜X• n«·ŒŒ­d¿¾Ošž’»áÿ¶Ó¨¾Û»Û잷ŧ£Äƻƪƒ}”‘cmaQ€ql»•Nnx7U`9ZjL{’B`t@t‹Qs‰LxtKrhDpuF`tOO_@K`9I\,>O(3G#7K,HYGNe@P`8UnH_zJ[{Nks—½[c…V•k§SUnI_wEB^6@V3Rc=]j6S]0QW:Ti8F`Nd‡nxŠIvKfvO_rC]ZIObO]uLg„;Rm;8OYGvs€ ~        #.!$& ""&&(&$'&(,,*./3:5 E>&<E,@>2K>/?D*9G-@C*IB,=U0>=/=F)@J0AM/@G,LG-TK-ST6GU29N6GC0JS/JV:OO.LT1MW2MX3T[-TS3QX0Yc;Ke:E`;PY4RZ+Rb;Fb?S]2Od3Z\0Mn3[`8`r7Vr<ek?g|6b{<boE`nClo?_uBOpCVa-_k*nw=d~Ip„D[ƒK`uTVo7PlDcr8kwHPŒLlnF]‡Fe|HM}DNh6ea1x~9n‘X[LrƒJ`˜R[wOd}Ha’EbCL{8]lE`}<Xƒ:hz>f?p}G‰@t—@\VdvMg|Ep‰Gj‰D`ˆJm{FTŽPauUkuGf…Tˆ…L„ªZu—bm‹FmŽGpRmGˆ˜Hi›WaƒHn„;c†<V|6lt?kŽHl?f‘Ck€=ŸŽE†Êo¦Vm…\b‰K}~:v DwŒ^iKfA~„>yOa†H[DW‹6k{Kn’;r`mš@J†°J}©Gd‘=l‡@i‹C’Ph¢Kc€Cd~GYƒDg{G]>eu=c‡;jA]{=~z2q¦le‰9v‰Gd’F[ŠNsuAcŒEv‡C‹Fl“Dn‰Jy5ˆžOe±8gƒ<n–HiˆOw†GcSrB|FG‰«P³VvµvwŽkm•Yk‰G’;‡”Ko§@hˆ=Z‰Aq{FgCk‡L‹’Em¤A€:zšUUŠ=g…@q‡Dg4u“Ky’HmPi‡Oq‡Ržen“X‰¡M‚žaˆ Ih—Pp‰M^FtN‹›Jp‘GpHl•InˆOjc^’Lf“Xi‘{˜kÚ„t{‹?i”BwzFnŸp‹`ˆ´q·Î~{ÍRpmQs’S©±hv¹RŒ¡PŠÀe“‘L‰©f›·¢º·‹š±J©¿\ÅÉS¾×S“‹H•ýntŸJ¤F~¿|tŒWŒµ`ަYªaŠ­d²W€?|£A‚”f…¬Q‡²N•²a|ªR}”9šQ©Ûp›¹r”Þˆ•³‚˜L•­P”¬Hy©]{ªX˜ÔT‚¡^{–G”§PбcxžTާdŽºez–`yŸ^nTp•YЧ]~Ÿoˆ¢n˜Ëp¥¹…¾Š¿nŒ¶•‘°rË~ž¶‡ Í{‚²{Ž©e”¤kš©a£½V•©]}T¢Çn¶Ñ•ÍÿUªÔw”Ó²ÍivœU¢«n›Ài¬ÖV¤Àƒ€±o~´^^„[c{Zn‡o„›V|«vºÈ|ªØuÏá’±àu·f£]†›…–°|ÁÞoÝú‡¿æ|ŒÂx“³w€°X‚¦h½zØœ¾ÿ®—Ån§¿^ƒ°s˜¿T¨S Écz®Sz™J[‹sk¢Ve}T“QzicVb{N_ƒJmŠNm|Jq–Gq¡JjP…¦Og•Wu„Kn›Tƒª[¥Ãg´è‚‹É}©keŽ„ƒ§c‡ª`‰±]´rw£pa‰d†Ÿn^†BPq9Fd&FW:dxFj„LrŠPyšIl‘Ujˆ_]‚Sx•U…©Qm–gª~—¸€–¸mp…gŽKb|Kt“Ah€;`}us”¨Ãœg—dªZ¡Ìi‹°G€”?azM‚™]›±fžœcv‰cfwXk€p•œ‹•œuv†–’•ˆŸ¥¯…¥’©†_u‡ ±u•z]šuTžxP…ln°˜™žg°[“¨Sn…SmzMhxX|~Is~KatDdwTmŠBcu4[f1FY.?R*6L.g}?o„FioDSiEbŒc²Ï\¢³_©¾iˆ¤V TtcFcRp‹9_o+;Z'?_4Ok<Yo<n}<\oFb‰;gxLv˜iz—_y•Kf?Ja>JR5PgJZvNkŠTˆ¤<en@=`vz™{ 
3135       !'&*"%%$$!*#&(%(&&-(./-36276?7"E<(TD*=I)=G8;?'<G":E,:G+5F&AE&BG)KM1GK+ZS0VT2QY<JT2UQ*_`.d_8_k0\_9_c9Uk5J^5QW=SV:[^:Wa8^`=Nb7I_2WZ:X_3a_7_h3ck;Xo6Xk<Ql5[c?ne6n;g{DpyIi|Ax„LvLZƒRbq>Tv=ci?V{BWp<dtOcxNTuCRkAbh;r‡Ck’Y\‰RV~P_rOL}HTjA]s3n~<cŽQS‰RYUiƒQYŽKwsEaNPTQ|>Ov<LsCXxHU„KYyE_~>j†?_ŠYcMpzFuˆGdšFT_rtJm“;wX}…;~š=n•XnŽH\ŽY]ZW‡Rf|RrŽFr‘U{šS`¡gn~BhŒB^…\o‚I€›?r¨Mq˜\‚˜W{ \u­^u—q\”hj…\{—F„¯G‚°ap[_‚IfzNi}B|TWOanFeŠ@bz<j†Gw—MZšCt‚Q^¤WwƒMg]bQg‚Nf‹Hsƒ_|‹>s­BeŠ@€<j˜Hœ£C°´R|¹El–Nv”Dx¢[qœYW‹AoyBX’=rr0_ŒGw‹Iy—Rt—Wx–NbJrˆN arœCr‘TcJ^|BiDs™D†ŸCl¢bt“UvŒ\qjg–Yy‰LsšRoˆKoƒGcŠ`d{OsŽ?3p³Uez=pD˜«†|¿o€°{d•_r›9q—=p’Dy€D‚‘Oƒ®D‚•Tr¸WxŽCu©FŽ€>‘ÁeŒ¬s~¨wh‘N_}HfBt“QjœK|‰Ai–GhŒ5dB^†=މF¯S’‚L|¬ti¢ViˆBsƒB•¬L‹¡M†•Az¤V…ŽS´b—œC‰›SލI˜F•ÈEu”‚vKlWŠ›}²ÂsˆÌ{¸f Á½y¹Å¥ Sžºe®JtœL‚¨mšŒ5x²[›·V}ªT€™M’²k¶LzÅc‡²Mw’BŒ«ku‘JŸ¯QwšV™Y€±aw’I}®w|še}­Y©^†¡[‰¨OjªWޱXw¤VvšOw³„¥b~¬\­çztŸgbˆCn•Ge’H|•C›¯b{£S€ŸjqžWh‘k“¢[v™\z¤Ws’G{¥`y¦Y}žf†®U|™Wz˜_¢±g•©m«qˆ»V–Àƒ¡¼|†¬m‘ºgœÇrª¯Äo×étš°iŽÎ~˜«e‚²Zq‘IWt>yB•ŸO”¢LÈÁQ™Êƒ‘赫Œ»„¥c†©\£Áf»ÑŒ¶Øœ³Ü«—ªn½ñZНaŠ[ºV˜¹^“Á¥Ú¡ÐšÁ…Ûþc¼úh¤ÅM´Ûp»à_Ùð[¥ÂDÄÍD¤ºJ ¼h„¨Cq?c:b}@sžU•µ^¢ÆdÐìg‡¿P‰©e‚§]nfz˜Iv›[q m\‡„ƒ°gkŸOoDcƒJoR‰µuˆ®ki‰<iHƒ¯l]‰9Mj8Kk*Me7RlOtLpšVp¢ax—Qfˆ[[~Vt—]e“k}¬e†£†š¾—©Ä|Š”X\N{Ln‹Utœ=d†Lk–„w©iv¨`ˆ«{rŸ{¥¿p–ÀSi•Oƒ’`s–m}’\qŒW„£IoVs™p„•MYzIq„Z„‰`oyi‚]isQ‡„u•‘`“xY|t\yf¯›‡œ¢vs““£pµ›l²ž\vySM’ŒI„Ly€U}€Tu‚ARsCw”A{…'@VEhŽZ]}P@QC;L\g–³ëÿ¨ãÿ”×øˆ½Øh©Åw›¯Ww†T}£\Œ(Tr*Uq7]}GyšJu‹Fn}FcRg„R\w]\€Vf‡Ux™Euˆ9MSAlxFZqPSxtx™YYl;G[e^Œ
3136  
3137     *+(&&##'!!*!*($))%(%*-11*5!-1 =/#C9 K@)=M,5C6;E$>F%GD'9K#9G,HC)MG(ML/QR2UE4UT1TV;M[;IT9YY1d^:wlC_gAzf>ZŠ>HiGO[<Wb0[`6Wd7^_ETb9Pf;ea9li5_oB_h=WoAXlA`a>Xs:[lAih6et>g€?p„NX|LW{\auPMy]WhCcpPX}Gct@TpB^i;\n?^{BT|A[o>TuCWqHU|P_tLMp@Vr>RpHMq2Xq@YzF]I@~HRh@ZsCgtC]‰B`UT‡;Ov@Bc<\d3i}9yŽ>y¡BrŸJl˜P[‡CekHf…Dd”So‡\ˆ˜H€Un¤ec¢^[ŒSiS]ŠQY|JSz@hs>wL\’CyŽPWSŠxWr¦Fk•Ms‹H\“Hw…Mu•W{˜RˆK„¦ap³\‚˜Vz¢Sb–G†‹L|¦em•bˆ—\~°\€ J‚œFƒ¥Eg˜_[|:f†An…LyŸDpNt„J€˜=p±[|™Ab’Fk†CeŽ<sŽMnLm‹E}“FlN¥={™cŽJ»µsÛ~«f«™QŠ»LÉ©U™ÿ[v°>\‹Obu@`zBd„<q„Ok[¡¤WŒóT„’NžIy˜NŠ¡Ft§\z›?Ž™D©«YsÀT|›yx¤pq˜Wq’Um€Fx–O|–^m¨byˆFt–D‰†6e¡Pl„JyKl”PiIŠˆS„©nbŽZwxM~©K‰«Z“¹NŠ’M‡«Ix²[qœHq‘Yˆ‹Ly›XwœHg•Hi‘LdxMs‹D‰œB‚«R}™C`–O„Œ@l§K~“>|9z›>”ªCŒ¯]‹¬F›‘Vz­GeŒ>ŽŽ@§W•ÇfvšJƒ•T€¨O‹®]u·e~še¥_œc©¸n‚ªLÌ<„œ@ Îb£©r‰Ëk’¢[Œºwg„GwŠXš®j½†ž®P}ÍP£”M‹º^~—VÂ\¡G–E|£d™œWžS¬F–Z~£I½êpt£J€Gx¥_ŽœVƒ¯W|L~•OšA‰ŸV…¦Qf“HwŽS‹›Qw¢Nm†I…P¥ÃdW…v|ŽFš¹Jv¥Uj‚DeŒHn•r„ŽO–Fm¨H¤Gtš`nSi”L…šLk¡Pi“OtŽKt¢\qŠL|£R„©hu•[v™I€¤X‘º~£Å’Š·m•·l˜ÁuÊk—½z}»¦’Ás™È}ƒ¸“ƒ£o¢ÏRƒ¤?¨¯^ŸÄ€šÜŠ¬Æ§”ËÀ¶i±ÿyžÈuÄêb‘¿‰ÆoÄŒ¯ã—Â|Âꘋχ~§j•Ån˜½Y Ír›ÊZ¤§j±Ðl•Ñv—½~œ…—»ŠœÐŒ¶‚®™“Ë­»ëž¿Éƒ©Í†±bŸÁT¡·W˜·^ÃÌjÿÿxªé¨ÜŸÀ\Œ¹fŸÇ}¥×X}¨[§Th—QбH‚¥Zv¡Pu™Qu”R{©`f…^jŒZn€R^…Xp ck›8Qo3Jk6^{?[sO…«_hŽcg“`¥h£¬GrSjŽTX~Il’a~§mƒ¸Š¼yw˜Vp•Qx›\z˜Pk“Ei‰Gj•Ph„DXzYl—Vl–]w¡u‚«l¨Ç_¨Vy—St›K\€Kk‹Tw‘Ne‘T^DLr;n“SeˆTg‰QbƒYi‡UhƒgŽc„ˆ[wŠg–j—šµ£i†‘g‚Šu€ˆmNj\n~Tw…XttXewVn–Yi†Uh†A\sQv¡Ž ¶`„›EcuJSZ4NY0EYNRz° ÜáÍûÎÏñ¦Àù¢ÂॳÉencn™ilŽB{¢L† Np’\xPRgCNgEBW9<b6BZ7C\>KeKQtTkKYjRyMmvAPk\WzPYf0NfKTo€ % - %!"! "+ 6 3'4'0$*"% %*$%#$$'#)&$!'%(2-+8"%5"4+75#=9%8;,7@+>A%>?":B&>K-BF1E@)VK-OW/LT:QR2VS6US1O`:EX?RV0]X3i`;_mEhgHXzI]iPck8dl6cg;Rj9NgDKfAO\9]_<Ye4Ui@VeDKn=Oa?`e8bq:`zJ`nCZrBf{CdƒKQuUKpLemAYzDItBZk;d~Bi‚Eh„Jez@is>\=vv@lFa…Q]rA]rEUx?OpKei1Z~=[t6dy:XAQxIHnKTl7ak0bAP„J\sMZyAZzA\i<t„,k’7Y”Fd„\eTj‰^gˆIq}Btˆ=t—P¨—JuÇf]‘av‚mu¢TYXn}De‹ToŽIc}P‚|>|¢Xv–Mh›R_‚ay€Kl’Yt]mŠTcŠMfuEnŠA[Ž[t^˜js“U‹’I}Ágšc—±[—¸z€Æi™·] ÅvrÊr„Ž\ެcbµw|‡al;uEj“MxLz“KbNeyMbuC`x@~‰:s¢Yk“Rh‡T”‰A„´[–SÀ³I”ë“…œUv³aqŒy~œ\’›d§›¢Yp²šh—woŽSpŸ<m‘Bs‚Lˆ’SqšCo‰J|“loœU…NzŸ\~‰H{žW™’L~ºY‡Ž^®…cL—ŽY´ßY~œS‚šD¡¤eËæP‡¿k—’OŸÀSm³S‰’YŒ¹_²`޶q„°\r¦_nŒOf„\šB‘µm‘£dq³wv¥g~”YŸ_•–Y•Âmk²IzU‘Lm—Ei¨Wx“?h‡LkLy†^‰­R…²?~™;˜§b‚œL}¨Zz¥Zˆ£Z~’Hš`z‘Jq X{‡:•Ÿ@}®Qzš`‡–Q²EmœFt“]y–W~¡8qItŽN¡š}›ºd‰šU¤_™¢ƒ–{{—£j†±M…¸rP¬;Ÿ_y¤}™®[€­T„¡M‘ \Š•V…œZ¥¤Y½^…¢I a¨s’¡X€Œ[hlÍÅ|–³iÇR¯GŽ–QzY…¢?o¦R‚R‚¡[}›Qc?~—Jn¡yk©cjŽJx›bŠÍ¬fšNv’Pe–apŽcp‡@p£NxGަ`x¯Y€ªP³Ji¤A_£S`…EuQq—Nf“?dˆMk…Ud>u›YvˆKnŸPnHr›T{¤`•¯sмe…³q“¼bz¢ky¡e€¥d–¾h~«g™½Uu¥VŠ©_¢YŠÀƒ„ªd™Ôr‘¶w»Þi¤Þ––Ë‚ÃoµŒ¾b¬Ëm¡Í€±çŠ ÒšÌˆœÃdw”Vœ¼a™ÁZŠ©y“»„”°ˆ´€—Àf‹²€”¿j£Çf˜Åp‰«_ŸÉeŸÐz¬c–¬ˆ†«os–]–ºlÂÞa‚ªe’¯ƒ¾Œ³hg„`w™g{šSަlq”Xj—Tn‘P†©Q~˜WŽ®P”²S‡«O›\i’KiˆLqŒDm„@iDZzHoŽ<[„1>e0Fe9VoBg‹^f˜JlMŸfƒ«fޱSu—T°VŒ«Qzb¦\v‘\nO`ŽMi‰Lpž[‚ŸCy Mq“Ce‡@jŽDnœQm¤QY~Um‹l„ªb_ŠKw›OeEZ…Cp“Gh}BOx9Go4?e/OuFOyFY<OtCYBTzMlƒX_ƒLPp]g‚hj|ueyrqTr}WvyIkxJgR^oNlqRh}N\vO]€K_z9RkD\p]ƒlq¥p–±Nr‚=avO‹®X‡±€’½·Êµš¾—•Ĭ©È¯˜À„”®Yu‰U|•\| h} ^f‰YXj=MW8Uj<Ui4Wr?u‚-Rd&D_6EeZrŒ\„Žaw~Xp}7HdH\x\Œ›>bh=Zu]++,163!.%(&'#)#0$>,61 0-!(&&# %+(+ &,*&,,&,..#04*=2,C&07&<7691B%/9'7;)6?#4=&@B/<D*>@'WK-\V,QU:SR9RR6]W1]_2Rj<WX;\\.dh:b_>]dE\f=li8y{6i|@evALy=S\CLc4D\3XT3_c,Ul;Tj9Th7Uk8Vb2Yj9_xBWyGelHhx?n€D\€IZ{J`z=l~=]†KZv7[u.onDdˆEoJm†J`‹GqyA`KT†[bnKsvE^…@pvOi}3h{Fx|Fa‹GXrZkvD^„Cqu<g†7f|IQwIIbEW_6Rl7\h?`x=}Ng˜PcˆS‚‹Iy¦YdžXk‹TjŽIt•g˜¡Ve¶‡n‹išL‚¡S{¢wŒ¡G`š]\}A•~Y{¾Ms•\[–ia{Mh|?y€F€Fs”KpMq€?{€OŽ’>‚—Im–Ev‚PœœP¾Z€©d{§Z…›Ot¢yb‘bu‹Bq”Weˆ]_€Gg†Nizny’Chn{‚Dt”Uˆ£S‰¢_z©To”P}‡@ƒ“<n¢b Y„¦Xn“Raw?e}htR•‚PˆÆr«i|—Yf LŠ’Xw®\f˜TiyDlŽZ‚›Bƒ¡M”³PtšG€…Gp¨Xj”jƒQlYmV‡”>g–\ƒ`nŸY”{jˆ«{™±A]šŠ=h«Xžžr„˜t„Àet›až¤oœÀŽ‘ÂjŽ­}§±_hªPYˆQ^Oy„keVw}Eu‹I]­9o‚E­›Tj¨c“^o»N€¦L{`x‹Ov pvªxrŒM­J‚“Q^§N^nBf„QqGu‰9Š›dm¯ow’YŒ˜XzŸ]v¥UÉÆi²ÿvŸÊU|™PfœCxGˆ«Z…œU€¨d„¯K…«F¤´t—¤O„®Y‰—=p¤Ke”P’¢C‘ÍUyŽbŠ®[{¬\‡¡ixN‘ fyÃvŠ›Q±ÁA‹¸d‹±\”šN°¾_‡£Yr£M“R}“V~I¨mްb†™E‹­[‡´\u›Ož©L§½;šÇuzœaš^ˆž_|±?•Pƒ—P‰¿J{šK‡œHvKœ>… QsœVm“Im?Œ Kƒ»J€FŒŸRvRlŒT‹ŸDf‹Ou—Hx‹TsžO–¶y‰¨Tq¡Bl§>l‘Ah‹EŠ¢T|ŸB„©LvµUw\|¤RpSpšJ_ŠKlƒA¡ªTŒ®eªaw©_£c™·QŒ¯Z¤cˆ£dw±V~ªi|˜J~¦P~¤P|«^Œ¸h¿c‡®Wn¨g«f‰·t†¸f³oœÐv•¹r‰µu¡Ëƒ†¹lŽÈm‹¬s‘¬P¯ÖÈq°†šÑn‘Ær§åp§ØižÚY‰¾d~³qŽÇg«ey§fk›\n›_s¥€n•P¯b¬Õ~žËƒ‡µX¥_š¼l¬M’¶O·U¹Z}®T|Pe‘Ki’Qn“Nn’Vr›]i‰U{’Sy”Sp˜?p”I}£Nh‰Bn‰<eƒ>iŠHqœ=b0a„3n‘>\ƒCg>i‹RgŒVjšZsš\v§Ns›` ²KpŒNxLuŸJo”Gw™Pm™P|¥b‘¾aƒ©Re’JgR|«Z{¤Lk•KaŽ?k’Ro‘Zh†If‡G]ƒM^‚9S~?Fh4Df1Lo,Lf*Il4\x9b€:Wy:Hr8Qr;EgAEa3=S>\{XKtˆCIa@Ld_q‰Jb{HcvE_xMl‹Q\rJa{GYuHMr9av9SrBe‡Qn˜}•¾†½Ã`‡˜ir®t‡«w¡Ï‡~¤„x™beš“’³’‹Â‘™Áj‚©Vq^hhp‘]nŽP^y?WeJg€Kf}BY~]{”Ccv,D[6AaZ^€|†™x‡oŒ…>]eRhwmVu\`t=OlG.2$3$('0"1'6&1& :(97:1!,4)-"%'$%"#&(*##*&&3%11'9#(,$.#:2A> C? 9F&L8(OQ>L5;H2A>,<>";C(9?*9<&:>#@C'BE'BD%FF*NJ*PY0UU;\[:jW6md6cm0SsFYa<Sg:`b:ck3dnCXo:_c>[r:duGevFeyHhn=O|KT`?Xe3jo:^|D[j<V`<Kn:EZ9p\2ax7^vIewAdwD`€QUxT`sGo}A`“DeJT~GVn:ve7i‹=d…KquPq…IgƒMr‚B_‰L\AbuDu=›_IuFƒ‡[a€KfxUljEw{=t{S„€Gb~IfwI\eGSi?@m4V\2Yr6PsGkvFO‰ZgmQwƒ@k‘ebbs„DlšPtšiŽ™Wv¬ee™cgUZ}R[}UmƒUv•oXMd{G_‘eqƒe‘\]—>‘y@¨O‚œa€£VuŸYx‡K¤“Kª¯JŽ®qƒ¥TzˆTs¤Lu’pYšT†|`µ­RWÕvtmJt•Np„Nm”][‹T^zEh~:†ƒB‚žS†¤K„³dsžV{žrs¦e~ˆ^uD‹“Tw¤Oq™FrYl—^p[d”Ho‰?i•Qq‰\s‡]w>¿˜R¼ãO’×`ƒ•O{¤EuˆG{Cs—_£hf™~uŽJ‘œ[|ªH«‹PÛd­“AnÜkŒ^ƒL¦Sˆ¢Vz¡gz«w|‘fp˜Oš˜N¢²`©¼‚®Ëd‰ãbWRf‹aj‡^”‹S˜±gr¬‡q˜F`‹Ej‘K}œRlYkDt¡S}ž?qVp…U`ŒIf‚\¦]†Àe€›C›Ä^k¤Œ·`w½OxŸ^g›cz—F~™=y©FY<l|DœÕ]ÃNƒ¯W~˜Yƒ•Lrµ_€›–w¯dwŸbn’OlŽBˆ•Ju˜ao„Gz–Dz”M‰§Qpœ]ƒ†d…§A’œf’±N…©Mt‡bn¢Kt’^wŸQ{¥[~›Q‚‹Iˆ´e~ºZ¬¨£_|¿j†b˜»t—¾k ´K•¬bÂVœLr²X—]‹¢_p¡`wˆQu¢KxŸU«¶}¼^‚ T¡ÅO†Ä`ƒ›\–¶Sƒ˜Bp‘hgŽJ‚OtT–œ[w°SŽœOiªH[„A{†R{¥uz«RtU„žX‡«H fq’Kl‚I”HhAt ft˜\oƒIv–\tœ=o€T¿af”gt”UlIxZs«aw›To‰Fsš<l@€§lw·d”ª``”[n•[x¬junm_‡¡YrœR‚¬bv‘No™X…¡NošO¨i{¤e€«]tŸTŒ±lšÃguª^~¥mÍ‚µev§mu¡d…­[x§c|§Y¢´g€°k¿s‡¶m—²qœÔk…­i¢º…³ä|«Þn{©Y‚µd–¯\‰²PŠ­[‰¿]™¾_ÍRƒ¬r†®xy¨h„´]} Z|³gy£f‚°b«asŸa€¡S€¦Y¥Un‘Ns›QmQe‘Oc‹M|œ`y§O~œNq—EoImšHn”Kn—B`OzœQ{žDj”Sk’Iz“?v•NpžCgC{’Mg’NeŒTl’Uo•gl“IdK_Uu—KqRnŸNw]x¤is Lq“EvY‚ `~¢M_…BaˆNX‚O\~M\€=Y~@\~Ka7Qq3Kh2Vr?x‡5W:^…Dc>]~9Rv7U{;\v5Qe+DX+H[8OuXfƒeužY†£@bwSl…N^}@Z†O§VsƒJi„EiyH[}?^sBjtH‰§wÖÚp›½„¤Ë®©º{‰¥Q~Tj‰sƒ¤zk—bq“[{ ƒ—Á–Æš Évz–Yj…O]ƒU_…_tŒV[{EarPj–O^„GR^[xGK[2B_;NiWh~wgzew}z~Ja\KS`J@S?-LELkJ1,3+..+1#5, ?-A7"G:&G=&AH)=9-79%<:"8@ 86 105+B2(E!87,J=IV9V3;<)C>QE H\,EB.WC0XN.NW0KO<NN9RF2ST*LQ2UJ1@J.9H-7G(>?(GD%TC#^T,K_3S[7^b2c^=tl?S€C[fP]eAVsAYm?_f9ep=Ty?_h?`q9_s=ZrGRwLduIa|WluJ_{Cr{Ht„D`{Ijh<\z>ze=s/lC]ˆJRG`lA]|EazNhtAyC~šMl™S\†YZp>€o<t‡Df{SqƒKbvMw‚`g’NoRq€BqNžBfŽ?[qLZpQUlDFoMT\1Qk2ddD‡~H‡ƒS[–VTfEDh?DV?OY$Vl3^z=jt7yTZ›CdsBT„KWvTz|4pŸMn‘X_•caŒvj…cs‚Z~“D€šC§Ul¯Tc~iYvD`nH[‡QQ|PwkT}Œ8sŠli€RzŒQs“cvYœ•\~ºTˆ•„z©g“š\˜ªm¶W§­WhÂUc†`j€|p|Jr†On„H˜ŽQy™^pvK•=–—P«·e‚Õzs cU•jvxH~˜Ca«cl}M€“[~šg€¤Wz›[m™]p…Y‚ªRhŒTv…;v™IŽFŠ‘O…¡X´´¢„ã£m›l}wP•KƒNv’U†’K~‰Yv—@бIh§gY„Q|…pˆ³Xƒ§m¥ªP”ßp½|j³€Š]¨i„šWgšQŒPh¬kŠŠdšªt‘ÓnœW|Ez7޶`ªwžµeœÈ€hŸ\{˜9lLh[}O—¤ug•Nh~<h‹=‚Œ`Y€Kq„H‚œ\”ÉhbŸqb}As‡Fz¡b|©S‰¨JqŸNjœOr‘Z}³Th—1’g•²X„ªi€–PgN`rXu‰BlRy—NfŠG—<•²]¨Uu¡=‚—Y‚‚J´ÞQ¢§G}Ç^|²W§]~ Z|§UŠœBÇZ‚¯MúRuØfw‹Ps£I’T³\—©L¤Øqt²„z†Fx£g—½œ{Äcs•ZŠWz–RiŽP{›GœR‡žSwœ=‹ M{žOrŸX{–Vq“U„ªXžZu¡K¤°X{¬k€¤Lyœ>Œ¥U€¨VS‰Ðak¤_{–M}ž@šQc‰W~™Ry˜Oq£Z|¢XxU«E…–E®Dz™PqžPl•QhˆEiŠMr‘O‰¥X…µ~iMt™MbŽ>mŒPeWu¤Sv˜Hl›Nš£Kw§g•ÈXkœgk†=m‘C\‡Ij‰LiP‚™gk‘D•®V€µHl›Rs—RrŠDs›StŒL€¥YxžJw ^vemFƒ“Tr˜eªm²R’°_z¥P„¡Lw£S’§k²Ë”ÿÿw~º\„­lr™[wœ\™·k­×vª×zŒ±[…¤^f›is¢[v¦ne’[q¬fv¨hwšUtšXj“^‚¬sd”ScˆIeMyQc’\e•Op–SiŒ^bŠMnŽNs“L^}<`}Ba‚IW~Sc‰LuŠWdŽH^…Je„I`Ie‚=\}Cl‰WgŽDfŠKhKc‹OyœKÙ¯Iw•IcJ^Da…IgI\Ke‚Gb‡Jt“EiOmXf”Mo™Gu‘V_†HhŒNkšUgWaŽJb‰?^…Ca|:\w=`|9]|Aa€C]|Amˆ:^{3c„Fd>Xv>Ur8Pu<P{3Kn9Pv8[|>k~3Vf6Vk6SgAeˆQhW_…Pd€SqŠLjˆBu›l«Äo|“Mx‹Kr{ByuCjrDtj²ßÌôÿ´ÌÙ›©‚UwX]ŠeвSpŠcl‹_yšf¬p¢É¨Ìò™žµup‘giWX†Gm˜]|¤d…§MZt@cFb‘6d;V…Uo€<OdALhJe…`„œi‹YNagY^INI9ME06M2NbFYx]KBR@"PD'IN)TB*bP$SU2UK;GL2FD3HC4WJ+UU)MY/MP*BI%DB&W@#;Y0<F?SD%N\(Oc<X[7dY(ah/Jq<QF=rC.`_+VVGaS;bU6Y]3\h8i_:ra8\b2NZ:<D6><)O>X?$xS*hk5bt>\u<ik<qB]“QgaQYpAOnGVc;r^9h{5a€KhrFZ€5Xo>Tn<JpA`bBQr8bjHfwAr{InŠM^‚VuuHj€FguMw‚EbŠP_„^Y{Kep;s†GhŒHfFn€Kp“OeˆWc‚`V{CkpCrƒDmOc|JcoCtrM\zIigKlByKž…B`—_[iNMk:E`9DV1ST(Rh,am6]z4ruHTˆ\[h:Qc5`c+f|&^‚=Wx<rzAmˆS€šHl_PMXkK]|5a†RR‹S`zHz>u˜Ip’V‡‹O¾¦>a¿eZyR{|MyŒ?t‰HoŒMl†Hk~?’Ce™po„C•‡Kk RrhBy€Ok’On„Mh’Zc†H•‹f„·hq¢mŠŠq¹¹UÑ[ƒ£Gt£eu‡So]™i˜Yy¥Mj—_}Šf­‰o·^v—X‹DŒ•>a˜PX;ƒˆ=rSwš\n”Pm‡X¢¨M|pp›Iƒ—@Ž«Z‘¼]§Y£œZpÁcw’rˆ¢\o¯>­’JŠ®UdR¡‰PÊ~¦²Z“ñ^‚¥`‰¨H‡»Mš¿Xxµ„†©Z»„n¸~}ŒW¨F€Ám£¨o„¡VAŒ¯^À«^õ[…ꀱŠy­R‰¤Wq¡VƒA’¡w€¥€nžMŒ]g‘P]EyˆEt¦a‘‹S‹›Mt¢Q‰–<qE`”>h’Rb—Wd‘Blƒ/l›?†§KwUhMe‹Fi|>s‘C{¢\Œ¨BŽUžËon£L}“?Z—Nf€>X‚M}Ad…Kq‰Ii‹G~›iw©[{¢NxœLx”>¿è½¬·i‘ùRy‘N†ºRl’@‹Re£]n‡Sk‹R‰š^…¶ƒ‹7w°wÀFˆ¨€y›Gg©‚s}nœLrGp¡S„™au¢R†V‚‘Ré;©Ó>¼âVn¡QšgwƒY™cy”Mƒ³I{œEˆ©Oj‘EA˜ºki”GŠ•C{¬Et’L‰Ÿ^xµ_q›\k’?w”Tc˜S…”E…§Gz¬Z{¦KnFu¥UzEr¤bm˜]qœRm•Af”<‚›=„¹Bg’Gh}=iPf„HfƒCp’DyHg‘>p=›ÎQ|£Vu¡Pƒ¨eƒ¨Oqav§H‚?~¢Cª:v„Hy°HnLnN_ƒE_…Ut—No—OšU’±O}›Pw’^€žLœRw§OyœJl’ZwžZy c|¤gu¢U‰¬Qp¢br˜Mƒ³b¥w›µ¶‰ÁZv›R„¬U‘²Op™^…°wx§]u˜ZhD^ˆ8q†Gn‡G†¨Zt¢NhŽFj’L|¡SpŸJ\‚LlEYAr…NužXa€>eŽHlJc‚=]}?qC†›K[|1q‚@c~@¤©L¿ÔJj†Ls—=]†8a†Em—B—@rŒDq”FeŠ=[~?c†?a~Gh‹?g‚I_‰AX~:Pz9[7^„:[‡?]ˆ@\€FVJ_…Bf„Db‡Kp˜Ta‘Hf=Y{KcŒK[†GrŽQn‘Di‹J`~>c>^†?\}>X:b~Jp‹Ec…9c‚>Xr9Vt2Ai.Mr1Qt4Uo-Uq5Y~EnˆFwF{†AyƒCr”Ip‹Et…KhƒKgzG_xCh†t‡ži“]““U˜’S›J†ŒP”´”µè̬罻ܒ£Ki€8`ŒXb‹EHvEL|NX‰l`‰‡zª®–Ìšˆ«Qc€K[xOcƒWf”}š¼°Vg@ay;\ƒ?Y„H\~Vd‰Il‰R_ƒfi”w€¢oq…Q^nCEF6=C:HS7DWL`v^iu_bG%fN.jn6UsGT]C[`;W_<ZWBSRBaO?O\6]\5[X5]^:hd:c]4[X4R\5Rb3?Z=LT-X`-Ng=XV:k`8dz>TlH`T@lY,hc8_pDafDd_6ci3hsDei<se>jf>`kGXZBNV3fO+mX-v]0}s;i‹JetT^rEjp@a€OaqRPh<]dB[s=o[9lv>o{Vu…JTŽKTpKRl<Xo6am9Vs4Xp>cq;rDs„Jj„Hc‡JUyHVaIld:Sw@hq[f}@S{BblBexFe}KX„K]sGeqD\†I^€O`}Mi€Bˆ~@j–UmxMquAyyHazAf}EqvMonHˆO]€VZm<[l6U]7Ra.Qh+jl2W:YlBdp@fk5Vr3bn=_4J{OYl;_6q}Am•DeWZP[s;h|3bŽ4b„@g€=‚†?išIpŽN‚~X[¤Kg‡g|>s‡8yMdŽM{€\t–GS‚VjsF\ŒJwƒHh—Uo€[€‰Ao‹Sp‚L•C¦žQ™¸Fp¯Oy˜krœgŽQ|¾i˜­ªig¼m„ˆUˆ£E‚¨Yr©ck_n”K’ŒA¡¸f‡Âk‹°WŒ½g¶´_}Á`pGY™5ovHZ~QrJf’Tz˜Rb„‰…WÀf‡_oŸ]z‚g}ŒZw‘r] Wm…DcˆZ€yMdœŒnˆažœ.nªs‚Œow³‘q m³\¦Á_~Ãt`°‡b‚[ŽT¦}¥£I±n^²rNtW_‹ªpu©hžb‡W½Ÿ˜ÒXĹUš¾[|°WvˆOˆ”Qœ¸T}Çc’œK½Q‰¤G‚£Rz›V¢°KŸ×S˜«YÝpqŽg…–VY£I‚3b=Y|9‘Vj“^oŸgu”Kw«Pz¶6¬]€§K…®I‹´J‚ªo~š[u›@ˆ¡Bw¥>i|6gˆ<\ŠLq…;aŒTg™H|ŒPˆ£_r¢[y˜H¥›©en´“uKd„]„”D·Qz¦WqBzœG^‰Zf‚\o;v˜U¿¤Zk“kYWt‚7œZ“®Hy¬jƒ ]ÙØV­ÍIø×Pƒš_r¶sg£‡Rj¦O_>t‰Hp˜Jo˜_‹Kz™f„ŸKƒ­Y®d|ÄL†£L|—a~¤Ll‘M‘¯^o’Ri“Cz£Nx Kp‰Lw•Mx“Pu Si‡CcŒV`†KiˆNl8iRd?g>f“Hh‰U}žLb@—NzŒBl;m“GfFi›FoŽ?k—nx—VqŽWiœlhUšTq§cj’Qw£X}§Lc†Ly‰WA™©KdŽ>dŠB… Ci¬[œ«_›ÌVy§Xz§[y§TmŒW]ŠNe‹NnCdƒLu M~—T‡¯Xv®T|—Fx›U{™S U„©lÂÝnx¡Nƒ¦[½Xp–IzªUЬPpšFƒžA™>i‰I~—K‰ e}¨ZŠÅI|¨JpšV†¦Wx’E„§Po:y‚L|…S’J€›ErD;cu9{‹Iƒ•Ll‚?o€LC‚ÀÿÿÊš»Dn‘RoŽ?uŒ<hHqJr‹KtE^‡:[>[E[};a…=dƒAz—<h‡5[~/Z7_~2]@e…9fƒ7i‡6^ˆ9a‰I{ =b~AT€@f‰FjŠ<cˆ:\|@^‹D^~Cj…H[€?nJ`†;e~7\y<`ˆBi‘<Tx8[|4`5a~-Sj'Xw-Zq8av7dv6fF~‹LsKz„Kq€JhvM““R©ˆV}Lw…ApŒH~‘\š™d­˜bˆ„ZŽ’fŸ—_œœh³¿Ž¤ÅœÁš¤²ku’F„¨2Bl)+F"-I!Vƒ3W‚GJf^c†koŽeaƒMf•He‚Vi}Q\€s]tsJrS[wEJh;Y€?Pv@Cc7JjNR}T`[^‡nTuRG_OOh?PP*3=A[`@MUSGYSJ_CvY6po;X‘NRsZRdJbWBe^6of@maDen<_k@ab>^\5f\9id;mc?e^@UeDXd;Me9S\4WY-W`?YY5]e9`qEaaHeg>ai:yfCozD]tEfb>`l:_kFn`@rmCmm:YrHdjCml7oh8oi8eg:auERLddRVsCbmDdtFVuRRj?[lBVt9lf@fv?l{Ox}L]†P]uRee:Ym9\u>\q<]pBMm@Vl=Zj8it@f†YbwUhp=hy4ZzB\uIVv@Zn>up<f‰?lCXxLSrBMr6Sn=dqEkz=pErEg‡[wzSj‚Q|CeB^vTetGenFcxI[}O_oDce4ql9]Bnt@[?Vx@Zs;ew6TxDEk@Va=\m7]yGX€=O~4brA[…@e‡MX„Cdƒ9aŒDX‰B`|>lx@i–Jf“XŽQhD_ŠO`ŒGj€Kk‚Ws€M~–Lz Px™V`WjyLY‹F‹x<ˆ¦Hv RuUz‚X “H¨Q˰bÅñ‘ÐžŠ¦\’›Q€K ’_†¼]ƒ³OdŸq{Li˜T|ƒYŸ‰YÌP…´V{¡G~§bš¥ny°ƒd¤f““]q·x`’f}AŽ•Lz©HgsOQ„;n~F…[—F™R“¨f}ª[iUyŒG†I~¦Ue–6W§Olo0dŒIs€Fw¬Z›ª‚¿_“g\¢Jv~>ª¸_w§}`”fw†ed¦Hš€d®Þk‡Àzy¯_~š@œ”[~¿X‡¢[k›Q•‡[€Å[zq}šiz–t’]ޤFw¶eˆŠN¾cvªnu¬p‡œ\–µX’¤RªI†©ˆs·^—ŸZ€¬T~—Zh™Zw€9gIR€9u>‹­I“½G‚˜v™bй]u©Iq¤Ršil¹c„—T’ŽMw§WbˆYoƒ^{ŒFk‡GŸFj”6—œDmLˆž;„£Rš£Ho Fj…0~MgŽRp‡Gm©F|’Cy–]qˆQqŸQo¡LpŠMx;t•Dh“Er…K™[t£AlžM~›P†žn…¶m­W‚’S|¡|~K¢ŽQt’^o‹FbŒOgCm…Uo¯L}˜:§KÝ­F¬ÿIŸOs§Nx™Nz–WÂÂep¢Zw“[‰ÉcgŸJ‰¨VšC{¥Eœ¯Y‡®]rS—¼>oŒFl”Ow‚=iŽ@o@gCe7j”Fq-\€Cz˜Li‹>ƒŒHr‘?h‘L|ŒMxœ?zKm‰Ex›BtšLsEq¤Ap–Hd…4_‰AgPn£El…Fp—[j JR}6l‡@g?sOhŽBfŒG`‚]o™Ru–lc•dƒ¦@oFz‰Hh‡>p‰Hf‘9zU‚ž@v¢Crd|”Q‚¥_‡žUs˜Q}¡U™¦kx˜Tˆ¯’Âby°xpšm~¦G­c†´ZŒÇJe’]v¡^’­S˜Çqöÿ›×o‘Ám˜¼\œËt”°n‹W|‘n†¥T›²Z¹Yž¥^š¡S˜«Rƒ\–H˜^¾§h«¨IŒwBzpGjÇÀÿÿÿp‹ŽW…Q‹U‹JœMš˜R„Oˆ˜Eq†7`z>|‰=ŠžIHt”Js:y‹=p…AvŒ=o‹?g?nŒA_‰N™³Hš`}¨llŠ<[|3^„DdBo>a7V‚>g’Nm„Aj‘Cn”Ba†<b†>a?T‚AX†7[8j„3b‡6d~9_{3\~=_€?lƒDm‹>|‹EoCdƒH{ŠFy„@…T—¥cš–WšPU’ªqÄÉd—©`‰œ[ޤ\²ÅwËÕm®Æ{žÆƒ“Å‹šÉ‡‘²b˜>U{/Hg1M:PUq/Gj=`iDZoNYvOQsIo‰Re„JEdMFdHSn:E_DMgBi‹M|˜H}’?j+Ok7FhJaˆOa}OapBOeETqAT\)>L:5>;8E9>M2;P8‹`?t‹?`“fRc]VbHi\9uh0|}DsKksPljChqCXsB]a:g[:lk@^nE]hF[d?S_5`a6\a1Ra=Q_:b\4cp=feFtg<\r>`jMdrCWtI[gAab8he?_8|{BfqIYlK_b4[a;oe@pw=`„DhqUXwK_iH\v>_sFPqG]bFXr=]q>hp@f|CdyPj‚Nm}HZ|M\kFhi8jp5e{EfuAYyFDsAP^;Ve,as:huCctSrmFrŠ@b…U^yN^€?ZnApx;[‡IivKOwCOnDLl8[`/_k-]{;bxIeq?h‰MYAbzd]~@_}OVrOSu@PpHqeCp‡IfzJmu:u‡<og^|PM{ANrEeh;[}FMyFElA<i.fY/e‚3]‰TP{<Xs:Zƒ<r|4v’?ƒ—EešL]Ib@k‰:WŠIt|Iv˜MeFr{NtLfC‹{>h¦K›R{®^n[g„Ob„?oˆM{“>z”`c•X“†OnIƒ€C® {´dy´~„‚‚‚ŠJ“X…`j‘]~£bmžc¿‹k̳K†´VžžR°Èl‘È{·sZŒQQrLHn8eyFY€Z{m?n©b_vQaoR”‚\‘¹or®up¢Q…žW§šR•Zi‘[˜heŽZw~K§Id’[«†V†±T‹±GjµK^˜So…NnUu•ez—c‚´W¬…jk´[¤ˆJ†Ôl›HmPn|cš“<©ý“¢Á‹‹Ñ}~¡S~žb}®|Ьvw“\f„\…nÔ¥W¶ÏMÁAo§L€ŽD[¢\–ˆH½`}ÄVi™L”O†ÎkŸ¹i‘»b‹¥Ll Vtˆap˜e•I„¡R‚?n”J_‹Em‰?pak¬L‹œO“´mv¦fŸ`s¢Qx£Yw§e¨’Mžµ<­`±Ögƒ¼E¯°]êW}·U~™T¤×Zf·X‘™Rf’_qQ”–IyŒFx“@v‡Am¤HvˆIošRv˜He€Cr›TZƒNh†<|šRl°MjŠCyœTs–MqS|…IÉÿ[h±WŽ’]s³Z‡¬Sm™]²¯>†©G‡¦IvƒFqž@{9jƒ3o«LŽN£ÅyÃßr¶ó¯–ÒO‡³It•P‚¥Bu›q…šK°¼C·Rg—HŠSu¨PtŸR|®Oš¥]Ž´Km›O|¼Y^„:rIv–=n“>]‹<t‰Cr‰H}?f—3|HZ“;hMb†?czDhƒKk–C„•PsFt‡A¤J}¢SjŠKuœPm‰Fc…7p‘ApŒKy©>cFc…?i…B}˜QˆJqŸQg“>m˜Iq‹7s“8y¨?jB—Vv‘^t“Grˆ<lœ;cDi†N~žZ¦×kqŸT‚¡cžØoc“PfŠPˆ¦Y”ºawœ^­ew¯^b•V‚©X}¹Vµdˆ­lœÞ_bœ<\N„¨lЬo´Ù¨t¦dŒ¯v¤x‹»i‡®]{©Qq‘Wrši¥jz›\ˆžc‚¢e¡½hŸ®i ÁcÑÅfÿû˜ÑéƒÄ¹]²·V¯¤a¯ž˜·½ž£¤Tš Z¥»XŠš^¹¨n—“pt‚Kk‚Mu‡F~ƒJžœf¶ÆW{†L‰M€†EŒ‰O’‰L•Pu‡HfvC{–Fm‘^‚¨guŸ`z—L^„>_Ž<`„?f‰DiCiAf‹Af‰Oh—GvœIx™@uŒDo‹@fƒ>cƒ<h‘Bq“?n†=Z†:b†9Y>i‡@c‡?]ƒ<c‡Jf‡Ggƒ=b€@g„H†˜K‰¡`•±`¦­u±¼lÁÃe‰—|s…m¤¦g´»{Þî®÷ÿ¹øÿ©éÿ™Ó÷z𽋗¿~¨rf}@FX?] Fd+Pc6Mk@VsIfOboDQdT`vNi~Za|HQj?VrEXyJYvPp„Uhˆc]~Z^Y]r<Nd6X}H_„Ys“NnŒXy–[} Qm‚:]o3O],DU2BX/=H0qb1d}?\l^[`P[kEf^@lk?xJc†KcgRht?`v=RzI_iDlc8ks>YlF`hI^d?\g>be=Ti8Ql;H]8[V0_f2kbDcc9YnBRiMQh;T]:Ne=ad;ng8gg<]xG[aMUlB\[:Un:vc=eˆA_†YqjR]ƒG[rK_qJRyHKfJY_;Xn:X|F^|A[{JavVp~MmwN\~K^rLmy8xz5tv=c„Kn~RusF„Ž5N¢<hsMou8SvDilK`ƒEq~Nm„Jo‰P\ˆHmzFb…Ia~R]wA\zD\r9…l5~…4gK^tMri:_Hp~FcˆUO†GooNY„=ZvJ]{Gcq:p~C[„Rtv?_‚?nu]j„FW‰X`zIIy=Ti=Pw6KvEEh3a`-p†8R‰NWv<dx-f†@nŠ4eOh‡_‚ŽPi›Cl‘KnŠ;rQn‘Cd“WpŒHu‘S}£]lZ~ŽKf¬T‡Š]xœdfmkŒT`”VnJm„IgˆNd†Kq…:h”]‹F’¸`Ž´—’›d®[žäU™‡b™¦]y„R}—R‘†JŒ£Sãw‡Öx‘e›¥_k¼vœ‚Sl±Q‹ˆDŽ”3ƒ˜1 •J€’Vd¢YRlFŒh*–¦6‰µ‡‹m}‹;—“DŠÏpy™}±L°¶U‚®a_ŠI„“`‡¸c‚¶L~fp‘S„“giŽDk†>Y„AhreoˆY‚•h…¬_o’…sˆJ˜œvhÍn{‡d¦M‹‰S‰ºy—£ƒ‡¼‹~’jŒ€>§Mo¡S_Kt†;ƒ¨@Œž]yŸV…›O™¯Zƒ§cjžLq“4m¦u\bmŠE{ˆBt›jv–E‹œX˜¢_–¿N‘©Nv¶Pl–Tk„Uz”Gu¢Hn…Cq—Ch‘IsŒSp”Y›ª]h¬apŽHs²PsZŒ®_¦Ms³m~›X†­Ws¢s’bŒºŒwœZu LpÔ…{ˆHƒµM¹·F²XޏL~¨Oo›Hs‚8{W€Ž=}¡KgŠ@g>i‘Ig:o„9sŠUk“d`ƒ8gFqŒ@|’=…¥L¹Å â{k‹?dH€‰@~¢_|ªKxŽQˆŸV~[uš@~”=•­<„¯g„ž?ŒšcŒÀ‰‚ÀYkšRq’\ƒ¤A_ˆQc†Sl†Ut’ƒ~¯‡yN{Àgi‡Ur†DiVq–S‘¬i~¦Fš¯YqŒF~ƒMu“Qw–N€¬@|„@hŠOmPs‘Bp‡NV{2]}Bl‰?f‰@eEp•BjŒLx•Yf›JoG…²NrŸGz¹Gq‡:j;fPgŠAt‘IbAj”@]ŽEo”Vq–Td™CiŠC…§J^”<qŠGˆ T™¼Oc—NyžR‚¤N~¨bq¡RhšGl•Bp”Qw³ep›TqUd‰Yj˜Kh“Jv‰O޼]„³SiVaŠLiEeVk”j`‘d}¢x¥ÛužÌWŒ½T~®Vx¬[‹·u–¶m—Ê`»M]‰Yƒœh¬VX‚Lsˆ]{¦Tœ²f›_£·‰øÿÀäÿº´á¸ÐôÿßöÈÒò©µé´o›©nÈÐr}“k~—[u–rx£cx‘\ª¯t¤¡f•­Dq†H´§_¥£[œ¯™ÏÓk”ˆWª¡Zª”^´ e°œež™SŒHuCfCs€PuPr™QrEjFo‘Ou›IuŒIq—Ek‰>^ŠAgFr¡pèÿŠéôRs—Mr•?lŽM|Dk“EsHuŽOx<o‰Ctˆ<q?m…7e…;v–FtK~”=]|9kŽM„§c›°†ÅÚ~£°j‰hNsTVqPw‡e¾­©Ç“•££‹¬®‘¯ˆƒ¹‚¿qˆ·rŒ­\]sRJg8AR 8K%8S=Ng]mzŒ¬“«‘žiq„tr„dat\]rZxqŽš_]rXQo_hnuŒNNpCRlV]j8AV<MuISwRXx[`…y‘¨xŠ›`p†O]|@WmCe{<Yq,Jd&ec6Sq>YZJk^AgqDeiIdnFowFi€ThpRcpDdpAouJdqJnhFf<h|GnlP[v;XlFcpBW|?njLTh;V]6c`*lj@\uEWgHVgGYl:]`3Kb4`b7Zo.Rq9SkFsa=]Ž?mvKgDzKu“Gx‡be€URXWkZ_r?QuEUdLag5ot:d‹IcyK[‰M\zK|zCb‰ScvXpuKmˆ@n„Ln‚KlŠR|t\”N´¯QSÜ{apsbz<pkDiŒ@\HhzMvEl”MnŒ\gƒPkŠYaƒPlu>z„Qa•Jz€J:pŽgh…cdzJwMt”IbŽ\UŠT^rAZ|HeyEdr=s?b„D[‰Nd~Fb€HW}QurDe•__‡PTO[i7H6Oh6Uk4yx0|œCpUw‰Dr:q—Op¤N[“Td„Q€‹Cn¢[gŽPgBkZ\‡LYzIp‰D…”OqŸR”tx´PqScŒSg|Sp‚EtŒ@b•]Z€RM|KupBm“CqŠAq“D¢ŽD›Âi~¾s››eƼ”§ó™®Û“˜¶‹•^¦¢T‹²Vv°dÑ‹]™Àˆg˜_wG®UqšNµœc”»r˜Ÿ|¸m½®j†Ú–œ lÁSžŸMu›`­’HvÑq”e{Ts°‡}uW¡¡dxœot‰ft‰[t¡@wpXŸ­[nÂiŠxWµn}¨myhŠJmvE³€@šÀJ…¬rš—a{§Yš^ÍËNrÀ_Xi_Iyšk«Ÿs†›lg…LzQnfl™T˜œTm¬xm¨Zs‘e^ŒF|‹_Š¡\†ºKlšOt†Cp•G‡–@{›9Œ§GŒ£Kް`¨§b“ÍjŠ«O…³Tg˜Sm‹Mr“Pƒ \‚žJ~ªNm›B|œAm“IhzEk>pŽ@w˜Sh©Sg„DYŽLjMg’R€ŠVm£[”§]‰Åku Xu§GhMy•=všG‰ ~z©s{Ÿ[ˆ¦S{©^k;g„H†‰F‚¤yŽ®LŠ«Zf“E_†;u‰<x‡@nŠVƒž<€–7„ˆDŒ­Um¨X™›iz¬zi‡:lˆAaJyCp—HZˆ=pS›]ˆ¬\§Ád·g{¨C}‚^s‰I_D…‹Jg’Mu§OcD`’Lc‰2e8x‘K‘®[‚—Zl›Ig…7kŽT_Œ@mˆBŒÄdtš^q˜]vŠAŠ—H™Ql˜K{‰Pq¥Xl‹Ef†Gq›CqJ}™Hc€;q“Gl›Hr‘Cm¡Am—JfšH™W€ªYy¥\{–NršT|­ToŒCm‡>yŸB^†F]†7g‡DW|Eb…CdE_‡Be‰<w•Kp“:užwc’a«`yžOmœVpŒMv§Ro“<f”=n“Pmže›’<€¢H‘«e¬ì]{®J‹²IaZi‹K„§P}ŸSгM~¬bˆ´KržSh—Dj‹`ƒ¢zm£b–htŸ^v¤]Œ¼mœ»qÈtm“Hn•C–ºÀYmŒ;|”clšf¥¼—¾\pŒqН¢¦c”°Pˆ¬so˜¡§˜œÅsžÆf‚›k}ŸinŽGz•QiSjŽIlN‹£m’a|¢Wƒ›Z¨l­gŒ›ƒ«Åw©¡g›¥qÑ¥qáw¦¡dªŸjìeŸžLyD~‘M‹’Z~™O€žLv”Q~ŸOy–QyŽMz‘Nk‘Io<b‡F€¡‹ÓùÒ°Ørj’Iy”GhˆX|¢[¯P“«U|ŽMwŒOj‰@‚œI†™R¡˜C‹ŽLœQ’™OšV‹“S ®Q“™Z‚‰t£t–­f£¢Js€KœawÙ¾”Òà€ª¸vµºb{’M†›Yˆ–QdƒZcxH[c2FU0EV*;N0B:F`VB`‚Knœ]€¦_|xUqpQhXVjQGbY_~pgxQS\IUr]n^g…ENgG\iBKd:G\7NvC[nAPYELei\|iTkLQhI\pGK^PYqEUk=Zw3cf<ThFdYBkh3klDtcMfwD`}NjxSetHclB\vCbpIbnAwlE‹p<nŠNrnSczJ^wOo{AjŠJb{ORx>UgEl^/tq7eŒNbl^`iLgp>bj:Ro<[e:Tr5QoE_l8‚l5TJdp]_„Jv|[zŒGwˆSaW`}XUsH\kA\t>]{Ghx9vŠ:pJj„T—W¢Rn¢ba„^]rQso@j“Oy„LV‘O`z]pKTž[•{^d¯k`‹|`‚Ggp@^=dzSazGyt=^”S^vddwJd†Kc‰U|}Di—Lj„X_ˆQs‚8mX§\~¬MmŽe]ŒRw‰^_•Mo}Ku‹Bm’Jh”U{‘M|œNxžXX—Q`wG‡Kj¥<iŽOcŒZZˆMZwAOt:_j7p1y‰Oˆ™_~§cošgš‡Itºdb¥pb—dZ|Hnv4p“Si”Qe—Or…`x˜Ug‘O`‰JzKm˜Y]Ž\iRU”hR}e~pB…8€žJtTiŠK]z;Œy1‚¥G‰œKÁ¢R‚ãj~•|vb‰\—cx®d²io‹r†R^¢h©–…¨y¢n€—o­–_¨ŸR§_šŒbº¿B¿µ|v¼i]Š_hq@Ñ’o‘ñnvœƒs—C­”y€Ç[˜”j«ÁIs¥N¢I„¾F‰ž[i¬ws„CƒF«Kl‰E“L}§Yz–pÔ«Ošì‡s¶^‚›To­NyO£N~È’n‘j‡‚Q‰™]¹žHÍᬙݪ‘F{Ž6„K‹¬EˆYk•N™B]¨a„@|šIƒ¢I| OeMSŽ@ey)f‰@r—Yc”]pŒOl‘K–šO’¼\€]’U…£f¢‘Xz©\s£LlœfvK_ˆEv‡BiŸKjOŽ­\qž?zœJf’W–7„ÆJv½Df„I…›Rt–Fv¥Dz©A|ŽFz¥Gn—jv¤hešnq‚<x=m‹Hr‘G‚ŠF{Èpuœ[€šSz«[wŠ]~­V–¦6Ÿ”?—ªX{™Uˆ™Zx•?nŠ9xS¥¥Bv˜D~”Z€dŸ°\“ÏjŒ«Lž°Nu L|’Eo¡Rg4tœS^xLi„1b…?š¯S¢Ïh„­ˆÍq„¡^… B€®Q¤Zn¨5fz4ƒ™B…®Du˜Tk‹Bwˆ@„–>b–PoˆFdO_8mˆEc’9bCn˜[oŠ9l‰>k“Ce–QjS{–HqšC^‰A[‘Fiƒ=eFuŠEt crœPašdsOtšR¾c_Fr‘RcLw Sq™MdŽLi‡I}«]ŸMl•A\MW…3WyC`ƒ:Y‚,Yƒ@d9h•InŽBiH‡P´Vb†4g†jv¨Hi‰;h7ušXršE|¢Gx¨W~ŸN‘º]‹¹Z€­dƒ´zt¦VhZ_‡A{šV|Ÿ`œ±tn§_v¡`«Â_q®[i“Rl—Mu¢d„«[g’=nMv¤T€¯ey£q{­Za…>^sBY‡[Tuc†d®Ö`p]¨‘¸rƒ¬SŒ¸o¿è®äÿ§¿íz™ÃRŒ˜|³Èe…¦]‚±_‹²Ol”D\€EY€A]‡EkŠAiŽHd€Gf‹Gj”PvŸZpšTl†Zv‘bœ¢l£­g™¥k m•¥h’£n¤w©`ƒ–R“”^‹“Ps‘Mo—Pr‹On€Lv‡VsŠQy‘T~•Us—Qp–J}šd¼Ç ¡ÁTr‰Bl’X£S~¦n“¼p…¤b‡¬Ry™S¢¹UšŸZ ©iœ¡Z§¤QŽ W ±e°¯n¯¯n|—pœª[«£l³Ãr¥¼‰óÿ‚ÌÙk£Œe‹”|´Â²âæ³Øì®ÈÌh›V¥i„–CYk=VoMsB›D~–7Mb'AQ0=T71D3'?@7OVAYE:ZAIeOg{Lm†N_uQh€Aq…?j’Z~¤`j{J`jITf9CV5C_@[pLb{?Yl6OhGLpMd€?f{AYk<<P><V<Hc?RrFne;`oGmcCjt?hgE‚iGlL^cVq[YeGZe=fmA_m<_xIhlGf|Gf[lqVlyIj|Uo‡Lp†Q_VM~LRkKYd3\l4a€NYy\YqKnkEl†?R„HYfBSy:OlHPi=Yi2MzCYiUQ{DfeEc{>eoUhvTixRS}IboDc|:iKp€FnŒLl~PXQxsQ™‹Ki½wR‹lchI„xDyœRg‡[Q}]vmRr~7R‹dfyYoEU˜q\wUsr=eDS„SYtEcrDavHx|U‘CbµYa}YyxAaŠPwS[žVu~R~•J™ŸeyÀrožqi•]~Or¢Kc—Ub„Rb‰SYar‚Iƒ•Tr¢nXœhazUe‡Ae›M\ˆKqƒNeˆTOƒAaoCh~1sJ€ŒQ„šNªªbZÈtZXmvVp—[h›WeH^‰A_Ad‚E^GgBc’QV‹_NvNWh=`ƒS]‚I_t9h…Es‚;w>‰Gj Xy~LˆNxL{‹Cn•UŠ„lŠªQs®‘}…_e“Zb€S®€G‘¨hr®[f˜>h|?GwByj,u˜GzŽ=±‹I«Ô_¼®pÂÀn±Ét– blyf}f|ŒGs¥B´†WÀ益ٜi«w—›IŒ¬Œ§a§ÃSx¼q­˜L‘Æl­[fƒQW}>mx>¨y[‰È]ŸFƒtDhœW›“R¤¶Žf°ƒK‚¡^oŸL¢qX’€Ž‚b»Hri{“S¡”n©º~î«nÿgƒœH‡H‚§KŒˆ__¥[fvQxA_wXzŠ@pÄao‚KSo¡C…œG©I¥¿RwÃ]{šKo™Aq¡SV„Q{ƒE€X¿ŸPˆ±gq“Xd¡PZŠFo‹J| <ˆŸP}¼Ks’bx±`zªJ_¢Pi‹3o™Z}ˆJ–±Gl¶KcDsšEa”Lp§Rg§Xc„=dŽ7~¤Gw4{ŒX‘ M¬B‘¶I¡W‰¡@x«Dƒ˜C‹§IœÅf“Ì“®Öh—Éwæå^ƒ³U‡ FwœI†ŒSŠŸ]hT…”G™§@s¯bƒŸgÈ\Ž–Q~ N©aªÿskª>s˜Je¢?o•AWŠEy„Ux¨lt›?xŽT~¯S‚¬N…žWoL|¨Xq>k}Vo‰Cb–Mr“Kož[sš\{@uŸPh—>fŒ;`ŸSm8\„Jf€HkŽ@€š?]…9S‹7X}7`€Uf?n‹8a‰?^‚D[ƒCkˆGg–:Uq;[ŠEXu=u™Cv•QZ‰=f„?m§Az—OmžLj‰9‚¨A‘¹\s–Tx–Mf;^‰<^Š<Pv6n9j‡Jr”?f„;z‰S‰ÌNsOX‚E[}:e‚>d’ElF…ŸO¸IuŸ\Œ²a~¡b¤¾l¶Úp„·Yh•TtŸam›Ed’@xJq“Xk‘fb”b‡•V’¿aƒ³}q”BW{=jƒKƒ·Z€ªdnŽAWxUžggœk]‡_m™@i‰>i‚8\l2]q3dsKtƒYy§_p†c~’Z… IZAaŒ`“~|xmRad­—‘´y—\‡ ny¡XcˆFi‹;e<a?i’B_†C[‚CY…<f‹Kk‹Ebƒ;l€Hi‹N‰Ÿ]‚£k†˜Qn^kNo“Wn^Œ±ak^‚¢eЍLm’JlB_€C_AŽQu•O|“[t–RdŠQƒ‘Sƒ¢^£´‚žOy“?m“Z…›m«²n£¶p›¼h–¬W{‘_{g‘ªo”®ZˆžaƒWˆž^Ž«q™°u¿³kƒbŒ¦gu„­u¨Ú¸ÿÿÄ­Ên¦—c¦}”§³¸ÛÎéø´­¦€ˆœq†Ÿr‚¤o¯ÇY¢¬`§Ä–ùÿªÿÿ~¿ÇEgv6TS*GR!=U'Up=k‚Dt0^vBUrVi‹FKdF`{S|¥Nx™ZqˆOWnRVfPhk>M[;I_K[}We…EaŠ?c~Gkˆ[ƒ¡a|˜Wn}QowWv{Ux‡JfvDWc:TjEkgGju?W}JgiJiz=^‡^cv_YnE]i9ns9b‡Fg‡RuMrˆHg‹VjnVp‚FbˆU_}Ty€Lv„KV…NOfJRi:Tk7UlAQlOXkEkrCmƒBU‚ZanFVq=MqCNf@Qd1Lf9`^:Lt6R]:K`0Va9SfALkFHkJ`eEsy;iŽKf‚\m†Ot‡QU€PUiL‰f9h­ZL‚peePf|8RŒWarV_wOzzKv‚Hn•`lŒbhCLŠbUkTbu8W…L[~V_x<cy9l„Hj†@ŽPa²dY…fƒq@` Q]„Sb…Ip€M–N€®`w«|Q™k_pWi†>z†Qmži_ŽSWƒXYxR^€<l€BxŠeW”hKq_NvB[x9V|:d<[ƒN[vDnxC‚8j VWŽRf€O¤†IjÅ…fu`†BZ€LwyKs‘Pf¢br“KbœE`†Uy‡9fGj…SR~SWp,rs8ŒœBx Mm“IyŽZ˜T|–Nƒ¤fsDZ‹Jd{Dz|Mn‹Wr‰J™[Šat®ZUhni:z…Ab‘L™‹_z°Ka™Mi:gx3s’U§\‰ÕYv£˜u“m†•cŽ˜jž²aÁS`‹EEr8•i9£²L~¬s¦¯‘„¹“¤[Ц_o¯eÔžWΆ¦»Ya¬l‘€Ru´sœyNn°4u1£Wž”b{ÁIiŽSœ‡:g Tuzjty8~‚Lzq[s§DfVyu(x}X\€Vj`<p†O•–o­´RšÇ“›\’œ?s‘t¤tDj¡?k„9}~9k UjYk‰fd/„”7’«Q„¦B†˜S“Ã]q¥cn¤Q^œ[bŒQv‡Dt“B‚ŠUЬQv¥ud…AlˆIhagšNkfq‡K`ˆ@i“>h‡N€“Ziž`\{>n=o;“Q‚”A—7lž@u‚9k¡CrH}¡F}“3w›Em{<ˆ¶Sr†BŠŸG~°u’˜i¼lšœX€£ZªK†ÄzgŠR€Z{XÝ˱§á¢e¨U††Bx¹PŒž\n’Iw”Iµ[†µT~²QrŒGm‰P™ R„Ä\x ŠnŸoq“Do¥Pp~Mh˜CkŽF}—=a<mƒIx”Jr›Y~Ÿa¬[›»z™½Mn¡Bl•>nŽEd=x”Xm‘Ir—HpKb“Flt?l¥Cv‰WnFyœ3Z‹;`O_ˆ@k†;l•3uˆ?fŠAŠªrc”<u’Cq“A`„DYC`‰2Vr7Pv3ƒ™[eœ>s‘=gŠ5k†Ev”Sn’>sH˜c}«U_F]zEm‡MbŒDs‘?˜šPƒÈQp”O†¥F~™E’¾ZœÀde“S]ƒ:\7k…Grš@l”O‚®e‚£hmŸHn—To•bmšoŸÇŒ•ºr†»Yl›Ytª@{šBn“Bn“KhNhŠLmˆ|hŽadŒWb>W{5ZC`ŽMU‡D]„Du¨9Ih9Nv(rƒE†™N“¯Wc‹CKq3TnEqUx’My—Kcf@ap[`kV‡£2BU/?P9?\@h‡LƒŒiwŽdq‹Sa†YŸJo’@U|F[y9[€BPv5X{8Y~:a6WBWr=_8a}?eˆHwšP|”Q™NfEc‹@[xBb†Nlœ[‡¤U¡V‡¢R”³Nr•=c}>gRtKqˆK€•Uk…El‡Io‹Qx—e¤²m„›Nr‡Gy‹Tœ°j§´»¾k‘®tŒ¡c‰Gh‹Pu›pŒ®XyšR~¢VŒ¯W‘¬dŒ¯tÿzÔÄwÉ×m¬±i­h‰»Ÿ³ÞÉàñŠÂÍs²Àm ­y€žªžŸ™ˆzWN\Pf~[“ÃŒžÍ£¸É}t¬º¬êòÕñ¨µØ‚½ÌMZg8KW0JX5LhNf‹T[‡X€¡LrU}™Gg‚=b‡I]‡Qp“Rm…G\f9LWRlkI^l6CRLZl_ˆ¨kœ³\„”Zr”kvŽi}io‰vy‹{ƒ“rŒ˜Ur€9dj7Ym@mgBhs:R}OZgMfp@\qNalN`kAhxHoyCu€MhŠXxŠ]a‚F_`qiM]~E^}YjyLŠpAiƒ@Vw@NfGOe;Nc5Qe=Wm:UnB]q;vu@]SVxRWb@`oD\v9]j8Wl5i`7Ys4YeHXg5]a4Vi8Lg8N`8Xi9kp9j†Hi|^jƒQwƒUZQSuHao5a„C\tV^pDQw:XpH\m@lu9‰†G€žN‚œgS£hcwSZ~IdxJW;YqK]~Hil;dˆJ}ˆUw‹KfŠTi„WN‡[yp=l“LV‰ckuPyI^—`d…\[…bRv_Zm@`s=byLkVYƒ]_lJm|:]‹=a{ES‹LfsXT‡XSv7Uz*\v1p‡;[”GZ|Ejo?¤‰=o¿og…yl<R<Wsij{MLQMs>uv3]›VL{pnsJ]‰EWTh|;{ŠYp“O`‹ZgGu‡@›XqŸ]r˜Vtœao“M‹“`e¬Y}}YtŸPbCj|@ª…<‘´Pt«I””^v°ZfŽEh‚2€6r¨l‡X„›SqŸb­”Fv±P[’P|~=z±^x¢gq‹K¦P²it¬Y_f~ŒgqŒF~„4v¡TyŽZƒ«Bq«n¡js”_u—Y—HÄ™†£eˆ˜^­¹8‰Ÿ]­¿H¸Ê†Äi¶œUÁÆ[ƒÝ›…”Oy…A€V|ˆR’=M§•K}‹K—}L‰>œHHž“=~š@{t@œœgzˆ”“N‡r[l”`´w5‰¹VxtRu~9‚ Gu˜S{Œ;r›O„•>s¡h‹žXŠ©i†¹uižX€ƒI\/Y~6o{1|Kp™;aœLa‹S[ƒ;l€:}£E`’P};t¦Aošea†Dq—<‚–<z“Xh¨Gj‘UqŸ_j’^y—W‹”Q†®s‚¦<f™4z–Ct’Mˆ›CŒ´{»¸a¬õq‡É]˜¾cz§^”ÏW†¨l€§~y¡LošYkPw—PŒ¡U’·Rƒ¶U˜¬‡¶vžFuIz¢X~¦Kp¤P†³XŒšai´o„ˆD‰¸e|¦pl¶s|„CÀVk™@„£[i‡5n?dŠ?\Œ=tŽJ‘±Q”ÁAŒº]¹XŸµU²_‡¦Vžª\t˜:e‘Ce;qœO‰›Gsž^„˜J~¨Ug‰Iy‘Ot—BhˆB…™@~«Jvœ9u‹7u˜HsŽT>ŒÀ=jLoƒ:a‘Rj‡DožPe’@q=l–-n~>r—Xj™]w•B}œC‹BÏöhÉOŒœP­D†ŠL~;s7v’B|™K{—>`ƒMt™bv“St’Mˆ«`x”a©h{Cp’;ަCoŠHb•Ci‹Gk•D†§IwžQƒ£E†³>m’Hs§`–µ{xŸbx¤S}²]ožX[„@p‘aŠ«Jf@kˆWfˆOo—Ip˜Vq•Vd‡9lŠ@c„@LoNf‡KRz+_~7Ww]W€Wg‚OHjCI`>_lE–˜iÕìçÿqŠ©Sgu:[q:jrKt˜$2I.O"@X8B^KjƒVs“MkŽElOlŠN]v<Xs:\~=Qv0_yAW}9w™`v¢Rg…1Ty9^‚Bh‰Fy¢K§Qt”Li”@`6Wr5]…Eu’ajYk“Xa†Ws—Yz›Rd”LmQlˆEz”M}•Xn‡Bv˜W–°Rz™c†œet‹IiŒE‚ŸV¥ºs–¯sŽªe„œXyˆVw†I‚I“«hФRyšY–µwºðÉíx«Çy ¹|´¶…°¹vŠ¡g{¤y¹Õ…»çÌÖÿ·Éó‚®Ðl€¥Rx›erxZdnBf‚ByŠZ~¬—³Î©Ås¥ÍŒºâ¥—Ö™¬€‰«gj€<Rl3F]2:O<JhKSq[o—l†§l’½h‘«ZužIi‡TeŽQkxNpzJk]EWdVz‘?XvDTtp¤•¥zŽœ_sbn—ir†efuw}™|Žªs‚ž[Zt3ns:p~C^xJWtE[uTTiHaoA`n?ZuHX|EToC^o?f~Jj…T_…aQtSPnSebCJx?TiNNkBig?csBLt=Qj=Ko6Jj:Ic8]`7Pq:[nHch<^|MVnMdd@np7`ƒ>]vPYpCvh>T†CGuRgd=[l@Jn;=cCUY>[n1dsAeoIb{OewS\x\aoIOn?Qj8Ym;Mi=Kg?<j2T\=_h1ty7xŒQXŽ^SyfY~V]rGMƒA]p>bvCTtC]qP]v7aˆQf|Mb|Q^zVduGR…GYr;Z~>cZt€KT¡NDr[FfHSe9MwA=e8XU5gy@]ˆR[nKX{BcqD`ƒ>i€IUˆFdrHz„Fe˜K[ŽK^†=mƒIb–Fb„HkyBt‘6h˜kb•c[FdMhƒ<]‹2U‡Mkq-^‘8H‹a^iERu4]y:c|?S6`vDZ„UZyMM|ERo=ruE~”SrcnštxœP‰•Kyªaˆ¡b€ªJ‘¤Xv±c•“Q™ªu“»„‘³Vm˜qj”[w–BXšS‡~N°Q”œGs´pƒˆD«^w«[y˜Fl_z—Lx§M~–;¿¹X‹½ut§Q ˜=§ÁL£Òiˆ´l®£Y­¥`‰«[¶œSºU}¥oË£D“Üenžj_~K|{iŒ˜dw“V…–_’­z¹²NtÇ~Õ§„©ÕRƒªKt†Tƒ|A˜«j”–ˆ±]Ž ½ºU¥»c¥g~ÇU¶rÏÛ^¯Øa®•fš›Kÿ¶]Áÿ‹™ÉgªÁ\¼¼|ŸÒU…¥U“žVj Ao—?^‘C‡€?€©Ft‘P¢E€¤Wi–R„‡/{›A„Ÿ3m«<yŠL|³P‚£EZ«EZ}N}—6}•yu®H€†?j®Y”„AtšOm‡8c8w’T“¤^w¤I|§a¥Mu”=m–P“²Rq’fvˆYk˜\p XŸvŒ¼zŽ»y¿Íͧ̚¾k¢`y¡u¨ŸZ˜ägnœCh’KhŽGrCm”Nd’Uw¦r©²|šºb‰»Ch’KjU‰¥<c‰Nt W¬Rf–Fj‰Gs£br§\r¢]k–;z™OŽ®9u§[bˆ;aŠOi›5^†G„ŠBj›WgŒSr•Ls‘R¬°eÿÿ™©Ûn~­\x¡X|¨D}Œ>h…Gz“T{ŽL²` Lv§?xšX†©BpHuœTgZf†@xˆNœ·Uˆ¸Q{Oi¢sT„5[ˆ@[uE^}6sBT‡Db‚IvŠTjDp“Ml”E¨hp¡T} Z¡¿}˜ÈvŠ£d«cŸQ¯So‰Bj}Lq‡q‡Zk˜9r‚B”I´Pt£MtžO¶ÄX¨Ío—ÌLw£Zi•NyœCz•M‰­I‰°J~¤H|–a„¨on—Qx°[p—_pŽOmœVušZm[—>z‹JŠ®xožIZwIt¡`|¥?}™I‡±N~ªQqFr›DœªR¼ïMlLVrCq…Xm@Z~Yd€<TgIfgIXgnq™È¨ÒÞy£U]w24U.EWD‚˜Xd”#D[!FQ*Od1Mo=hvR‡ a|šSb‚AEl5Wr:e„@z›HtœMq£FiƒRg‹NeƒAsƒ4m‡9e…GnŽTc†Qm™HT>Yz9[z2`}K–T‚¤TŒ¯Mu“Ft“IcŠJc„JnGfˆQn”OsYr”Z‚£jˆ³|­Àct™R}•I{–SŽªe{œm{ž`Oc“O‚W’¥cŸ«j½x¤½`”±U|¡’Öÿ½¨Ó„…·rŽ´j’¤i†œZ~£N{½Š‹²”“ÉœœÂ˜¹]n“g›À€´×mÏÞn²ÊxÀÓg”«…“À™Â’¶Ø¸Åðš°j€£l­t›ºg†ªUkŒC\v@LZ6GVLUlce„``l€žSa„N]|^ƒ p™³zŸ­a’W}˜pŸµaqThv|–~„ž|§uªy ·p‚™W]sf‚¢|‹¯uƒ GXh"^‘E]‚Z\xVShG_mG`yC_rK_wK^wH^R`lD]xHV{D`nIdwUgxJc„O_tOer>UrINu@Y`AUp;OmC^gFRt>BvEC`:YV+Pp4Re?Qf:\fBQgAh_Abq9\oHOrMWjEon;KGNj[_]=Rm=UlFKlDac;Sz7[iFTkAP^FUgCanN\pL^lGVo>Nd8]]7PnB@o>E_7Ra*To8WxIS{YNvQgqAZ}:`GT~<atFR€ARvK_n:T~JRtRhj=‚v=u­@r‹Jb™J`ˆOizI^‘LB‚]=PIMV2db&R‚;Gm5Vc1Nv/boDbt>[€?asDc€BXyIYwGRrBsh7^@l~TlŒIz˜MdŸEqGt•Uu‘EŽPo°bgL_ŠMY‚W\|CTƒ@g},b…Nˆ‡Me«0_‰Tlz>ˆ’GS¨P]pCl€<‚•<`›P[w:^n5P‚A_u[tˆX{‘Bp§J–‹`t·`jŠQs–Dƒ–nz¥ix£už™©fg±pb‹V†ƒB²Qz¤OošM” Mp»m~”O†¨X…§d^žb}|P‡©A¶yq¶ežGžªgw¶s…™g°p•Áoµw„ b‹™Y‘¿u¢¯Pˆ«z˜“S¹ÎN¥´¥¯º[­¼l®ÀUžÊ[¶¸lŸÛX‡³a‡qo{™ˆFžªtIJ“ä“–žZ«¥I›­Nµ›R“e…¬T„”a™ŠW•Êt’¤Lßžp­Ì­Ú“eŽÄZŸµr€Ç±ˆ•[}”Z«µ©Â‹€±]€¨Oz‚T”«:p¤Lxt2Ä­QnÎrt…K|ˆXp¤g}‹>•¡e¡ÆU®·Lž´V¶RxšbbŽ`dwKu„C~”Q“²q´Op‘H[‚‘Hy¡M“¸<q›U|›_p™ayžUw Nt¦E{›Zˆ¯Fz™P{˜?‹‘D§ÁB¬¸2yºX†‘9‚°N”±m£|¤§^z½t|ŸF–žnz¶^ŠPwŒ;k—ThL€¯Ex¤^¢n… n~Pa’KrŠA”½Orš;p“<‡–uiDj˜Br‘Ln“=c’C”¬L¡¥V™ÃelMk@2y›2£®Iv£Lr•Tq—QŒ[}¡f›¬Qãÿ݉°†{§VާVy Uo@y•>i£Ef„GbNŠ“Rs£\eŽGhŽKl’Pz¢S{‹U{§E~—\{©mˆ²qu’Sv’Eƒ•Da‰5hŠ?b}8iŠMf‰3cŒ3w¢Ny^p”J|PÁü™|ª:¾¿Vl»YlSx›\f”QnŠ:ƒOw>v—DŽ­W„®iŠ«[…§~†¡w‡œIn“Cm™V†¨]pXe\t“NŽÃOiŠKk“StŸ]pŽTޝL{˜Y’Ÿ^b“DsQtšRi‹GnLo‘P~¡Lq‘S‚¬h©Ö–Ñî„Õî|ºèzw«]g’`±w˜»e‘µJ‚W•¿~ŒÌ„mMX:…’_k—S|‘RmyL•¨Fl‹:p‰Eh@kˆU|šY{ž@Ro$5O!JZQsœMZs6ŠŽ8…˜R‰§Q|Jˆ¤a—­UVv;gƒ?n„J~Ÿ`g‡e²r«Z_„PpŽ^y–V_x\ƒ˜gž¯Vt—KsN…¬O’²F€§Hu’Fh‰Lšcy©kª\‹¢P‚œEc‡M—¢\ˆ¡O~œHªJm–Or•]™Àjp‘tžpy—Q{™L|˜dޝT~¤V~›Ml–GfŽPiˆQw–eƒ fs”q©Æpy™OjŽo·´™Ïm Ðq”±]‹°Y„£QФWŒªb‡£Vp™\Š¡h‡Ÿ`ˆ Y¤k¬Ò¤Ç眤މ²œ‘Ê—±º||}Š¥||˜‹€¨{u†\‹¹”ÒóžÀèqu•]g†MKm9Ie.@]8OhLVoAeŒ`’»X…¢P}i“³ƒ”½–´‰}¤ˆ†¤‚taX}O]udjŠwˆ¥z‰°„—¾‚xškRkOXpanqoŽbf{FV`&XŠXdvaY|KgtGn{Ii‘KV†PdoR\pI^qL]kAN~LPtN]fAgu>nŠKn•VjSl|NZ€M`sJoa>W9UePXk>Sq?QqFTh=d`-Rv.LiAOd>Rc;Ch6TN6Qd8JXDGR=UY5{a2l‡Ef[X=Vd:ai>isDosC^ŠLdsHSrAXZHdb6g{@njIlGUM`lBh{=]{CUtOEs@Xj-Nu6Sl=Mn>cqDfz=P‰AexJb‚Gi„SU|?VlW[t@]}<doJpx8|€8§Pd¤c|ƒgm—YY‰PAdQJ\BYU1Si-]o/\€@Tq8^h1–s9§§Hu±Yo…Xc‚D€n: –Cw´Sg†To{>[@mwLx•Kˆ“ae¯Ne†O\ˆCi{CfŽAmik‹H^‰D]@_y;x€8o“/w–Qn¡W^S§uL“¹Mh®oSoirCfˆLUTNy[Pp=}n5`’7Z€D}v;†ŸP‚¦Bgš]y‹Uk“pp›N}“Su§ZˆV{4…œ[n§k`‹Dp€B’žcŸºtžºf˜ºYm¦j””S…Ñe¤_|²\‚´9ˆ£f§_†ªmn™Sˆ‹N™¨o…ªY’²J™®ig˜|–[™¦dÌ•™n¦¸€aŸu›fƒ®y•Ÿ_J“†Œ\]¨§b°Ðf†»mu¨R ‡\[W›{*œcœ•P|—–¢Y‰¯c›®^‘§Kƒ‘R‘–sƒ—W|ZV~•M—¥U‰žY¬µw»¤p™ä„’¦j”’TÁ£A¹«nœ~Vr”`†‚N€Z„¦Xr”e~¯7¦SÆžh{ÒL°ŒGŒ«Yn’7‡”SƒžY‘›‚«®[¡²S“¦M­VÈJ‚•Fz•:q‡X€œkw–T€‰Hy¥PsRpšR‚ƒCs­XgŠPq@| F‚›Nº\•ž_¶¾S~ºe‚—F’ mîùàÏÿ®‘ÉIm €x…fž»~нpd‘gxœMm—I’–dަx«Èuƒ²S}¸„¢v€ŸVy•P{‰Ls¬ljˆJŒƒ8kÇ quTk’PdŒRlˆ4u‘=p‡I’”>q¨C™’†ÛüŸ”ä‹t‚Cu¶?…°O¶Á`ŸÄŒ…©OŠÈTo‰Ds˜Vx«g¬ªT˜È´bžYp Z‹¨T‚¡I–Ÿ;˜Õg“”;xŸ:j„7nšLl˜E`ŒCP1v‡;~¦{j‘KbTiŠS“Q»WuˆEz­Kkek‰@ˆ—Rt‹6—<ˆ£H˜<޵Vm™6xŽCj—Dg›s{™M½é¬u¥HkªZ~™Ru 9‹™Ag•_y‰I“£UšW•Rƒ˜dŠ£T{ªN}X™ÁR‘Ç\„¶lr‘Cw”<ŒPy¤Kg‰HwDe•Dm‹T|¢_~¢Pp“Xˆ¯Ps’^|¤U|›U­Vs—D‚¯[gƒV£] g‡µ˜r­n“c^†E^ŠClJrd”©a‹¸b‹®fk›bkŽJe‘Et•NjHo–h°kzd_†NiPk“O_†JW~Dc~Kƒš1\‰2^‰?cyNo–ni‡|l“_fˆQs™\{›r{˜aYs4d}T~ŸbWsEIaLlŽlb•Sg‰>RzUf‹TnŽLx‹^nTd‚_l”[²amKjEc„JiD‰¥]w—\ޤ^œ`jˆNmƒYšbq“Yq–^hŽThMu•SlYz“P†¢Vn•]¡¸v´Ì{Ôæz­ËXªUv¡JwžOj–Iv›Un”Kadˆ³ngCb‹Gjšx»’¾h…¦Yv¨o˜Ág•²Q‚¦X³J~¢I¥X¯a“³a’³h·†‡­egu]\‚^y˜œefƒqžºgˆšXmŒPpUo˜‘ˆ¿§ªÌtnIVv6Wu=i9lˆ8fuBNnIl”^wž[i‡b†´†°Ü‹£Ä†š¹w`pIfS?cD_wQqSep‹¨lv°¥Äp–¦W}ŒJe€WkS\sBHa:CX-YqNhnKZŽGexRlGa‘TZ„YThWZoGel>qxDW†LbxUo{DaCfŒLiŽU\‡VOaWkQth>w~B_ŠMYnSRj:Pb@hkGfx;\r9Kx@Mb=Zh6dq7Lh>PR4Fd5JU7JH/NY2[c3ps>sƒVg†LilDht:r}Nm‰JsŒ^yŒTd…JklSgt?n†Ch€K`IV‚QZzFm~@g‡Hc…[aLO‰@Ji?Ne4Ni;mu:f‰=U‡ZVrI[t9TwLkfGgHXˆUkuDr…DT“HiyByŠG`¥g_†_aN[ŠQqEc—<Uo:\i8[{<eu9_>fy=†q<”«Xs¾pœ{i’NŽ…A•«Yl«vW~^rzJŽ>«R|¥_‡¦`[³va€MFƒ4Od1po1uCkŽL’Ry¨P}›M—N¼M€¢Q€£Yu¥Z‡‘O®bkšSirt>aDVK]t:Xx2W~4UrDl„Eh—H˜’Rˆº]‚´bZšYazDk~DVŽIktD“ƒO‡·Ny§X‘^v“Oi‡@‹B†«[}©e–˜m‹¸[†±_‰°wv®gŽªe·dŽ¥_¥\­¦a…Äi—\{©eƒ¥v‡§R£¬Y™¾xsª[€i<•’GŒT†˜bW€dn€=Tt`Œ@u“I®"™ÈY¿¯Š¥Ån§§W“©Pn¢\yA›¥dŽÎc†¦Pt^ŒŽW¥b”Çu¤¬pž¯m¥»[²V™W¥°T–ÍS¦Ähz¿~š¤‚z¡„£qRkœP®¤Oy»\sO|ƒ?‡—Rh–O‰‰J¹H“¼OÅ·ZÿÁbé­nvG]ŠIoˆ:—±la¨q•>­`¦§€‰Äj~šIzªlŽ¡a‚ˆJt€@Ž’Fp¢JoG{™]o›Lk¹KoŒ=oœ^f‘aj:x<­¹`„¼t|ªQ…Ÿi‰«dvˆM™­X{°pʲ׀½`‹¤gu¬`›V‰§Ls?{’Fu¤G“¨SžÐF}­Pc„Vw‹PŽ·b|ÀetœUj„Qt†Yi?xœHq™c’¯Vn¤9‰£H|¤:“«V¶eœˆNŸ¼|™Îaƒ´ƒ³p¤^ƒ¡IŠ´l‘Áj¸ÂF®ç~q¥‚˜™JœÞTg˜K j|§p}–J\ƒa‚¦Vœºšºhr¾‡¡¬\‰±I{ GŠ«X˜Òe¨ÏPN~0d<wœMo–Lq–Cz”@“´c‚·Iy–Kg‰Eu˜P‰´KrGr•N©P|•K„¦Qu“um¤YZ~Avš7ZŽ5€¤Eyž~o¥[h™:•®U˜²Jx CŠ Hƒ›S”ªY‹²OŸJqœd’«XvQ‰®n}³vv–i®fu’JqŽM~œ^€ZoœA‰¬Mhš`v—K“³Sz§ZnŒZ€•ax›W‰£k¡Ãbz›T“»Xs›Xr‰J†¯e{›^iŠb{”RЬKv™>eˆFuœM{[‰¬ytœLsœfoœLiMc€BeLd‹>|£Nu¢aºR^Ž=eVw¥OršYd‡NlŒRˆ§VŠš;b‰/”T…´QWiF£Qˆ¯[“Ä„‹³xx¦QkPw…Xc‰`SyFUd<]zK^„>];Z}F€›m¡f}“Ye‡BZy@c}Hr”p–·a€ŸAx™F›h~¡buU‘”b~•PlDkŽWrŽPx–KeˆNb†Kz Qw—Us›IeJc‡XŒ¨j²}Œª„u˜z{›]Æq¸Ï_”¬S¯i¥¿\i“DaŒJcNa‹Ft“Dm–b‚ hНgƒœTpœnt¡_k—Rq—YŽºj°Úeµàe¦Ùu¥ÈgŒ¤lš´aƒžFjŠN~–V¤±c„“cm‰gp“sn†Hr†4\yAlƒPe†uq`i‰>k‘?€¥Q‘µUx›C\ƒ;UkEmŒQj‰PjŒ]{ª‚І¶p‚ªOZ~<Wo6MiEb}T`wLYxb…®i•®t‚¡o~lˆ¡Zw‹SiJ]f7@O*8F VkHYj=U}HWrLQrFGuPHoJXbDqr;w„:’Qe˜Z^ŒhpvVhŽJm”ea‘^Z„XY‚SWmJrs:aER{Z^gZJm<UhHfg5Zw5WvEOnEKaBRi7ff<cm:„f?V˜<X_OOR5a[6[h;YmDmyC||F|˜MqP…Ž[}›Mn‹^_‰^v|Sx~Py‘Io‹Sk„U{„Xn—OaˆOhFp‰BbŒZm{ZT‹E_o?_s2g|A_Bc}CW‚UXqIZx<\kDij>r@Q–avjPt”Mt›[KjšTkŠ^f‰MŠLŸD§©Nn×t€iKŒAYfNn|@a…<h€Lt…F„¢S`­lUkZ{>ˆ;¡m^‰\miXƒyATšE‰~p|­bn kgugƒQ_‚8Zs;gs.~Kƒ§Wj™Qo€SˆP¨™QyÃZy¤fr‘UwTbX6|@6O@TZ6zz-c˜FTxLx3{£Az§Cq“?R†Ei}Av‘Azž^œc]—WjƒAc’HdˆFh‰;^{G„…_j‘eˆ‘9ƒ²Tr YœƒJÁÄZ ×r¬cˆ¯TxžV„™[€›cš˜K‹¹\Œ—]„›L‡¨Z«¢~žºcxÀd˜^¦©SÌR¶«hÑÀXßd¡—I—´cȬZr¿jZ€?š`.ž›UŠÔy¥›[‚ÆmA®Á|”Áy¿¼ix½yˆ’<¥ >šÎs£ÀX­¾Sv²M¥ŸV“»^s™h©f¨Ûh¸`œ¬W—ªX’Âk‚ªc¥\¨©W£¸d©À^ŽÍu}©IyœiXŸOdsOq…Oh‹9ƒFºVÃn¬ËP…z¤œ}nƒ>Œ‹@f¤OŠH™ \~¸J”S­ Çn~˜;w™[•ŽLÿ¿aìÿŨê}”§†Ìeu—\Œ¡Dt»]gœF_y=]€@cˆ7|£@„£Vz›pv^žÃTq®\ŒK‚±o€XŒžHr¥Zy–g§’Z¦æoßÐn’ºNi®mt‰?‘L²c` |t•;†˜6ÑÉn¦ÿ„Ì¿U¡î]j£^›;z¯I‘C¹È^žÉx»¾Qœ¾GÍÃ^Éäh¹ÿg¤¨j—Ç’ˆ°O€°E“›S“Â`z½t‰©_¥X„­Y‰À]–žx…¸¡ˆ«E€šavŸ]¨¨BН[‚œN«»fŒ¬\~œU£”€›dw¨Sf‡Kƒp•Ëj™4„Š=½s¨½‡´Ôk™Ã†ÊÊnŽÛX‡»S·Uu™O˜¤h“¸Vˆ”Y ´z·ÖuešLmI|”P€Ž=`˜Vj7p‡N{ŸMe’<n„<…—c‹ŸjЧQd‹Pu“JÄ¿gЬU|œe– Y¦æul™a|­`}ªf’ªpŸÀr‰¡Qu™D‰ŸY¶aª_qJƒ¢L{˜gˆ´fsžOjƒK€“`œÓg§Y”«d|£]‚Ÿir‘Rn–L‰®i… f“½`oœZgˆLkLhˆGx“Fl‹EgV_ŠH[zBmLf‘?h†?mŽC`ƒEs–M…¦Y‘·[~¯Hp›X«Uz G„–K|£p­Óaƒ´qf5^s_~“KmŒN„¬Z~¨cz§U¥[~žW®MjƒOfyD J\w4\}BŸSoQXsJj‡Vi[g}Ehv7d~>duCp”aq‘Vd€NšYy¢e”©WzŒFg…T€žUŸX“ªt™L\}>X=^†KrOe’LzžE_;l‡M~¢^sœjx•Xn‹FhQu¡…žÌ‹‹®e޲tŒ»Yh’Ahˆ<h7Y~Do“Ep˜`‰©`€¨bk“Tl‘Z…­Kj˜Fz–W¶u¹ïšÈù‡¶Ý®Çe¡Çh«Îdœ¼L„¤X‡—h°[tŒOfzKZkGe}Hw P‰§Gn‰=jFf‹Ki‰;m‘Jy£Y…ªTw˜Bk‚?gƒCm„Ic…Pd\…°r‘µo€«]k’Kb‡FzQd~RYtDXrEXye¥m{—RdxSmˆctf\d€IRY+5D7BWeCoh7s}DUŒKSpPHdFOi9fl3r4}›BŠŸal§je›lv~^wGŠd`£b_„ecwR`oJZ{A^oIPsOedEMo4_hIaf3^t:h~IMC\fDeu8fr<qw@ GiÃ]‚x_~EmhMrApKt‰P˜‰C¶³Xy°f‹šjƒ¥Uˆiv–]…T‚‚L{£[V–d\zerxSeŠL‹]k–MlMu€P\ŒUb}Krz?fŒ>c‹RjyKkN`ˆJl{NYŠAYzB\t7]@V|NdpPp€EmUdY[„ZhtM`‰@vJ•˜K¼Zd¾‘dˆjh~In{Fa‘Mm{:[ƒ?cAŠAƒš^w¤Xd‘Q‚Š;ŽOmœ]m}R}p=pQ`ŽObwLl†B|†YoŒK{…Ek>r†<‹~B~žT£q~“Wn@‰T€¡b]©vxxY–“@n¦Ri‡OZ…?`t)b‹6P€HVm9ww7ƒ•Mq«X{U˜¡Du¹Mk Xf”Ir“T‚šRp«Rs€F|’4k’Co“Ct—Xf–V€‹=•¯g·d•Á]qª…€ˆz© j”Òw‘©fªHÑ·SqêVŠW£žOÕÊJã‡h·[a\m…Hœ“YįYŸÏ¸«b޶‚‹‘m‘°e»­v|ÆqvŒ´À‹K‘ë]ˆŸViŸ_n“Qi…ZŠŠH˜g§šp§¹a€¥kšŠB— QÿÀ]ãÿš—íy°¯YzÅh‡VŸ±TœÉEŽÂg„¸f¤S…®\œÅc€À^‚©[‡­U¨¡R”È{†´¬l‰¥X¤S˜7uœ9‹—=pºLt“Up“d‰„[}I–E‡—Kž¸^z›dŸ™EŸ¬q~¹Z}’p®‹J”°qx>wD¨´Z¬Èe»ê°£ÿ³m¡ymi‚£fg­Jz“u—¨KbœHcŽ9n~=Z>xF¤]d˜JœVzŒY¢£[†µZ•ÈYy¤tžMi‹Nƒ¦T‚žZ‰¦\{¥p’¨J„¿]—¹dM•kto0vMu‡Aµk¨ÿÂyœ{š›œ—®ƒ†ÇU|¯a~¿m€¡ˆn¢†£µ±×ÞŽ½ÿ©†Ó˜|¥~áí‡Èôº–Î}‰«[x¤PZšT€®MyYtšly‡P{¢fxŸPu­\kL‰XsœEˆ¤b‚¥_°^˜¦z‹¡™º^x«Hp–B|D|‘D‡µr™h„C›´²×o•Ö™›Áwnœb­¤……Ò~‚£lu©Jd‘R…‹az¨h‘OŒ£q¦Á·L‰¨]‚©T~©Y|£Ax›C”Bk›M}–>w–DšW|±bƒ¾sm¢Ev“U’²„•Ÿ^~›Jy¨zФt†¹K¯Xy˜R›¾l—±ws mlW‚¤W€¢‚j¥OgŽXz¥dЍ]˜ÀarKŠªD‰°^¡ÍsqZa}b{œtgUo”Kx•Qf¡Y~Ÿ`…¤_Š©WeGeˆ;y“L£S\‡9h‚=i†?eˆ<w–Kq‡FŠ¢Dz>^€Bw–O˜Pv£Zz•OžOpšYp›^„¤W‚§j~¢PtKe?wFt‰M¢Dh‰OeGk‹U‹·^S~XHmGTn;n…SfHWxI_†F{“Wx¢Yy¢G{›WƒœQƒKd„>b|Fc…HuOr–=a€Mz—dƒ§e‚¡_{—KŠœNrTv˜cw›]Nt@`ƒ7[~<o†BjŽFy™I}¡I‚§DbˆNo“P«fx£Zp“NwœHag£s|š_¤e’¬]œY|œIm’?a…@mRqŽQsšY‰·Rf‘A`Qv¨d‘¨M~¡X†§p¹‹˜Â• ·q’§{·ß’Ãë~ºã€µÜb¡¾h±XŒ¦V‘¨[¡O•´W¾n™Ì`’¯SˆªT„¢Mzš@g…AiŠKv›PtJj‘O}œFlLi„Iv›fŒ·j”±u¯Ûb•¸K{›Z‹´`\LNuKX}SqŒf{–`l†NmtKf~ViXezXeu>KY#3?"7F-fe9tp:‚|Ic•O\WRwEZs=bu;g~>iŽSj_p’a}›pdŸbSYpoW]•Ol„jbuI`nLg}T]uJ`xEdjAUt8knRdj4fw@h|NU|SXfJcu<h{>{~O¢‹HgÁajˆPƒTnkNw{:qˆT~‹_°˜SÝŸ_„¢s…•q‚‘U‰‘bŠ˜c˜œh‡ž[y¬ggž_W„]grDdDz„Og„KeyXg‚PWƒMnrRu‚9dœQY}YVqGYtGTxE–wKa¤>Swlbb4gw=iƒEjŒI‚{@›šKeÂz_†cy{F|•GŽ•Ip§Z‚˜a–¯zj¬b•|Kz¤Lg’l|…CŽ•N~®N{ TtžWfœXsˆ\VCoo=[„Rb{Uw|6gŽZkˆJbˆFY|4c{?Š€<{œJ`žeouNs~IgŒ\‘}X•V_‘bh…WS’V‚iUW F\|Ft…E¥•T€ºSg¢e_„Squ:„ŽA‡°<}«\œ±m}»kz’g¨]§f[•GtƒE‹”P„¶ieŸZrK„“cf˜K…Ž;‚¥Nj¡Ru‹WhªoW—u[qpJwNÀ€:¢Ùˆš·‰£¯”ºÃx‘è§r©†•¢CÅoyœ™ec¹W€~F…0©œT«Ìqʺ_¶æy¬ØS~¿XÄ’\µ»ožÄV¶µlÚ×tƒÐ‘ŒŒSŒšA‹¦@®’W»·_ÏÏQÂìvºáeÿÞcµÿbÖ»cÆÿíµØ©œ¶nŒ²v¤­N„ák}ªh ¤YoÑplHƒœR‚°W£\ÿòPÞÿ§¢Ènr³[ƒ—]¥Ow´aƒ™X”§Cž@}ªAfŽM{ƒ7’´Q¸Mž`g¹oŽOŸ“X®¸rnÜ\viGw~‹ª^xžSt’cw‘QŒ˜GÅ¡GlΛ––]Ç纄¿ƒl‘8z–DZ}Ic‚7„šR‚—R޼L]™Qh4qšO]}‰QˆªXz˜M~œau™cŒ•xáý·lÖ^s“9iŠC_4‡‚S®K ´K–µqnœtfŠ>xŒ6PƒœF’°Z‚­“äÏr†ìƃ—TŒ¸_iŒZ d~´Kœr³¯|¬Þn©kb‚O„9ƒ­‡]•›x„X™³„~›_x=¡ev—G•³J–»_x«f[p?k˜ai—4qŸX€Wz K€¢J‡—p„¡J•J¢Üav¥E†¢Lƒ·Z£¦>¼g…œ[‹³k´|ƒ˜‰¯z¨âw˜±C|µ`xªYv D‚§Y³âN˜½S€µ]…™S{¤X¤°s àlp­S‚˜O~°Y£h‚ŸK‡›fŒ§Py²_s¡LwZj—FšP|²Z“£Y|¬_l“L€®Z£Žišzq˜R‘šw¢Êo‘¥ež\ƒœ`j•JxœVz©X¡¸Jv Y¨V³Ð‚šÓo‚±F¢`’Åz¤Øx‰¤\–°Kl–]‹¥Y|¡O{˜Ws¤MpUfŒNs ]tœHc‰R‹£ky”Hj‹=oŽTw’Gp~P€©q‘»Y“®m¥^rŸ@u”Rd…ct›Ym•SŒ°`qUr•Q^‡On–ct—FXl;…ŒU}•MyœV_YhNŸ:~—QŒ³_z¢4Xs,WpPu’a„Rlš6g…EdQyWg‹J„¦ipŸTsŽZby<ZvBm“Pj‘Qj‘LW>_ƒS]Qv‘SrœRo’Mf‰Fq›\{©Qe‹5`†6`}E`„VŒ¦X{šTnŠRb…CqŽOyd}›c€¡Ne‹Zh‘TnŽIr‹Pr‰Y‡¨s£ÆSj‰NoƒFY}@\„K]}C[|=c†\wœYt”F\…Ak“b~žVp›^‡§W| h{¦t•¨fp˜º‰›Ào‚¦xžÆwŸÃržÉn¦¹iºetˆ_†œm£É‰¬Ùy˜¶fšÀ^ޱV…™NpŽ:eŒMˆºUгW™­o¶Õg«Í^¡µI©Yƒ¶fÁÈÿ–Ãã`£ÄežÅXy–=hŽLs˜`{£XdZUhLQWFVeDcqIn‚Pf‚?HV$1:%4>0Yb<`v9jrFm‚M[‰_\~QSmAPoE]s>zAqŒQŽb‚£^c¦iV‡n_nXdq;o‚UcxUdrP{yCwQq‡OqqHbqFksNgm8_EhtLV}L\eBiiAs{Et„H‚Ng­YV„ZmP‚kB‘?n¦]‹a£“N€«bp‰cb}YgrQƒ}N„–b‹’i}šff‘jv‡fxYn‘PYN\‚Pk{Ez~NjŽQhUƒ‚N~šJt›_cˆWT|K^t;hv0„‚<^¡QY†‚qp=oy<qY[‘PiM‡ƒF`´Š_Žya@r{JvIe—a‰yS©d€˜cƒ‘`y˜KaŽfd~GŠ}K‡­Sy¯p‘dsŒVs€=k‡Kz=gŒLa|I\w=n|Nh…AyŠKk•@~‹Dx–;\•Rhqasq?tƒCj”[_ƒHud?|AL©WcbJ`ƒ:H|F‹l1£ 3l´fl‘gj\žip|6 ”PÒrk³ÝŽ^ÇôŸÎ“…©S…¨p€‘L²[y»gbvf‚kizF˜†L«W€ S’ a‹²Wm¬fv›V—ŠMi¶U~ŠTµIЏ¢¯„‚¤c‹§l›¨q³­]·ÒYc¯W_:‡m-‹œT£;­¹]yÆk•šZ‘¬b¢ÆŒ¢·~Äe·´UÌjаmž®b¥¶tòÈ…ÆÿhžÐbŠ©`œ­S˜¦hñˇàÿ„Ðí„åÿºô×ÿÛzÔÿ£ÛŒ…¼m¡¬T¢¼O‹¦j}¯UŸN€®q€­PiI˜H~ŸMµ¯e¬ÿÁ—Õœr«Y—š<ŽÍVp£rŒ™Gz¼K—S’¯[~­X|²P§`yŠbˆœB‚žR‘‰^užW™¤S¢¾w¬ßZƒ¶Q{µMe“Q{{L >z¬JlŽbe„Ql…=¯¥k™Ý‹„¥Ly¤d±kŒ¨Dv³Q‹˜A‹·i‘6Ë“>„¼R†’O¥ªX–²Oœ´dбQ¢¨W|²l^yN£u¡W}žJ<ž´b‡Ðq”­_”ÆyW‹Sat6r}?…d­»g®¼x—Îm‰•xªÐn®ÃT‚Ën•Ä`}¥`¨ÊI¥Ïi‹£ˆ†³‡Š¯’‚·fzŒ`~©^„ Ts©_s\t”E|¤H†‘XŽ´Ly£k†½dXŽJc4yˆUuœAƒ¦Iz¤Qw…p§»n‰Ñst“F[€^˜˜‹{Ëj~‘Ns™Qm W„ P„¨]~’gŒ¸€‚¼Yt“KŒÁUƒp©`”·a‘ÊI‘¨F¤Ü{½}¥ºf¡Ð`Áñr‡¬X‘¥s®ÔKœÇR‚šM®[‡§j•Ÿu†¨td¥Ne‘We…B~U„´|xš]§[®N·hÄxemu|L~ªbu˜V’£| µo±\˜¯i„ Q޲R“²N‹¼kØõh½Ú{£ÐŒ´Ûi•Ái…¡i“Ãve™bl–M‚žTˆ¦Pš³g’·ho¦Oz›Fe”Dwž@u—OqNlP†”J‘«O{œTx‘Pz“T˜°RxŸKÈÅmm”HtˆUg‡Nd„Hl‡Ct—D¤]~¤fz¡Ke@d†?v’Zƒ¢R‰šLŒžR‹ NmŽLg„BmŽ@mˆNs–U‰®uޱLy’Dv~Fh€D~“]ˆŸTg‹>Wz<^zFd‰Hy›Zn“Rm”Yj—>lKhŽ]p”Hz–Ib†@Qƒ<o‰As“Mp˜Yp•Eq”PošZЧ\dFb‡@iˆDx™^–«t¨UfƒNw•LžZ›b‰¨kÂi“¶Xl‘Fa†Kl’S›V…¨pœ»Z•©W‰§I€ Kƒ @h“Dg‰?^ƒVv–TlŽ=Y~?`ˆJp‹HdŒP~£e”»_ˆ§Xy`n’j•²tˆ¹nµ¾f”­g~°kŠ·z‘ºxÀa°[‰¦n¥Ô‹šÃ}¨Ôu£ÉbžÅ]x V”Rº}Ïõ†Åì|¬ÓÂ爦Âw‡ŸHm“By©d‡¹‰¼ôš»ív°Õp‹ÁS†²P|›Yw”_oŠMSf;AM21;57>6?S7NeO€—@fr7>$54'~xGa‰;\†OmrIT†KeyUsyBqAaBnL|‡Mt\o’g_lOzkRkPri:j€Ak{Gi†Ud}Pr|Kz†PqMoyQx‚SqŽGl€UrwSkuBeeLym9oŠCh‰Q€T{P_cawU‰qDŽ˜K\«li~vl€K{…U}†_dŽVfpPnl7d†IŽy\€Vdon‚TxK`•W`{\[zPTkHH`8SnGbnKn~Hv‹V[‹§_q]d†Oa|Ei€<ƒ‡Jp”bu~GPu>ZlUztHm–Lo†In†Ts’gp‰H…„E¦«TƒÈhy“Q–—cŽ Rpžl‹†M„¡Tn§WRŽGR{HpoTy‹Kˆ˜Pw¡>’QyŸN~™bzžK†„L~£Nz™Q^ Uh€<h‚R^…Tl„R{qAi€<b}Pw~L›‰W“›Ly«P_šql‚>m…9t”Hs‘2hzFf…J[‹C|kR’‹L¸Drœ[d˜a’‰UʶLÝð|¿ç²‰Å}uµaŸh‚¦TŠŸOu•LoH€…KÁ­U¤è™t¿|l™\ˆ’X‰Ÿ`˜¦T„µjr‰d`xH’Œ6¼Àe—ÜŽs¯gm–dxN‰“]—§^¦º‰‚°Q†•C ±Z°¼a«¿{y«{”L¬£i ¿_¡Ÿt±£Wš¥e¤ƒ` ¬T‘ O£ eó«VÜÿÍÐÿ²ÉÓ”ìtîTàÿ‚œÿÊÂ’ù¡Á€²É©Áܧ}ݵq¡K ¨Ju£Z¤Tÿÿašÿ¢t‘^ЉP¦²\ŽÓ\ƒ·€n³„ƒ¦w}©…y˜`‚¨ey˜h°©b¥Èv}´ƒ›?x¬[‰¥_Ÿ°gw¦hxˆ<–±g„”}ª\~¶g‡›P‘Y®­s‹±gs›[p‡4q’?y‹G}®Vh‘Bw‹L_ŒHv„<‹¶|›Ð[|ª`¢l„ŸN™¯D£¿a}ž~‚Q«Rš¾k·®K‰£R”NÚàxªÿh‘·o¤¹]vžOˆ¯[¦¹d‡¤NŒ²g®fЧU‹°N¬¹fp¤Pj{4k†0‚¢EtŒet”[x°{‡“LÇ}~™Y³’O¨ÿ©âÍÒÄû~„®mÿÿ¡«ÿ}œÆcmµ…k‰BvKn”Mo”Zm™O\‹+„}\±¹Y©ò€¥^{¢i`€Fy<|¤EsŸcnMx‚;†´V˜°R¦Åk‹¸h˜´A‚¸J¹`Üÿm~Éc‚ªZ ºc±ß_†¿IiZ‚¨y—Ep‘P\z=™¦Qž½V{Âpx¥m”µjt§Q«W™Ôs§Óp§ÔoµÌu±ævƒÐƒ–¼ž½|•µnp›ni‰G}¤Sq K »I„¸FŽ·fpœ?€§]œ¤r€­l…©_z—?nŽIœX}Ÿ]n˜cv˜j—°Xvœ`{›g“Àr½z’nzµ‘{¦kjb®p‰¾h€«p‘¥…~¤M޲Wˆ¦`–Âk‹¬u–ÀpkB[~@†“C~¦U…©Q°Sˆ¯Zw`¯Ìn¼îd·M•ÇR º´¾åuæÿây²KˆŸU‡¢K¦Mu¡R›£_—·S¢K‘¼b‚¦\wœLw”N}Ÿc}pvšjx¦Wp›FxŠ@„‰KsŽ@uXp‰`›}”«_w”P|“Rr™h€œ\t‡Is—;[‡Gv™GeI|Z¹SxœMp‘Ma…Cl‰@]‚HW}Bvš>w“Db†P`‹[k˜Kt“X„¦aa€QW{7X„GXEa„]‡§{•°Y{œUr–`‡£`ž_u¡o†°yеuv—Sy˜Ip›b{¢_|¡d±^šÁw¢Æc¤Ñds¡Kf‡D`‰@YyKbˆMk’=[t?oJƒ•>b[‘¯m·n‹¢KHj@eŽa—·g€£†Ÿ»|ƒ©b°[t g‡£Zƒ­l–·{¢Çw›Ë…­Ð‚®×„«Ïk´Úl”°d”»t°Ö˜»÷“§Ôx£ÖŠ­áv¹Yk‘Ir˜Jg”Us§y¦â“¸è‚¸áa°S€²Sl€I@\MWb@MW3PQ-UL+HB*CS2KXLmˆY›3QW#40€ƒHl–NZahoNntB`~I~xF‘Lz£TY•ejrWc{QSƒgIhSY_POkI`hAq|<h~K]‚WwrQ|{K{M‰‡S…R…’[~ž]p˜az~Nu…Ji}Mx‹Lr’Jn”]]ŒQptJh’PMƒidhD^AL…]Zg\hs9g~D•xO‡©c‚Žpk‹MiˆS‡{Nt£Mm—usŒZVUTtU]kEcuI[qHJk?Wi6kb+b…8\vHcSd‚Rj‚^m€Xz„Up„B‡xB†P~”Sl–Om{Iqƒ9l…Ns‹Y‰G}Ÿeˆ˜`„˜Nž£evÀ~”žpržWi‹UY‚|IŸQ…¯~`¤gF‡XZ[.v}/Ž”D‰´Z}¶o‡§[¢e£Pwœ_‘—^{ºvpœc‚‚GuŸKs›Ie…RtxJˆ6ŸKoT¡{=«ÁfnÁspynl…=pyD½šIŒêsngšPn‘S‰’H™§LsÀl”Žvh¦J´}G­ÚboÑ|¦£¤¥Ì‹u¼gx g™­em¿Z“o‡±]Œ¥UŸ¯W¾’y»z„–c‰±M—¶e’¶zm®ƒˆ…]”žL¥£EŠÍ}|À‡ª‰pœbw•Jn–c†€Py¥Uš“u—¼[{«g—V¢½l˜¤p££XƤOƽpÃÃpØ¿¬»q”©b«f‘¤Y‹—V”“Q¸Ì¹çˆÿê¡­ÿ’½¤k—½±ž¼¥ÁwgʉY~U§—3‘϶›ª¤šÆL²°hºä\åó]¥ÿ¹] ¬d‡F“˜G›®cyÅetŸdmœ=®†,¸ìm™Ôiq T‰˜AüK—þ‰tžfkŠa}Q~ @Š’Nf¢\l†A•br¹W‰¥H|Ÿb‰F•G£RŽºd¥²Y‘¡DrŸSp˜DŒQ“°kÇ^€©iu£F›¢G…½ˆŸ¯[µQ‹µJƒ•E†ªP³e•º|®¨džÑ®“³Nɶi¥ÑQº_ €¦Å`—»g’´dŠÈg«`…§U£D ›J¾Æ\­Ãn§r„ªp|›7›©:ŠÇaz™Mu™L{“Bd‰D–kkšP™R»Ó“Ÿ¶aŒ¤}¥Ñ}¶Ç’ˆÚ¦ ‘–ÜdšH±ÿNi‹<r˜BŠ–Tz±PrƒRj¦oz}vŒªW{²A}My—Lj“@g’?f’PxMbž^w‡9Œ§Z•µZ‘²޹p¥©]ÀÜqˆÄ\h©j~‚Tÿÿ¦Øÿ“h˜DnŒF‚¢OGt5fs.”²Tª„¥Õ{| Wi™EjŠM¡Lxvž¹]”Ålˆ©rÀÚy×XšÊŠ€¾u„¤~w›Tz–@¬ÑiˆÂcxŸ`q¨‚tœWjˆY†’_¯f†ža‚«i‹±j‹©rx¤f‰ Q‚¨Uz’gw–Zs¢Uƒ“Wºf‚±Zkh†²Mo±WhC‹«KЍiy•Xz°^h“Y‰ ek’\~¢d£·]€¤bx–JŠAr§Dˆ¨k¬]­jŽº^¬[ЦÚsi˜k„ª„„ªx¡Ô†ºïÀ‚¨NfŽ]‡§f‹²_z¥dÅÝ“›½{”°c’¼§Ìn´j¨Ê…´ád•ªZ‡©_žÃs¸ÍSºR|¢X º[xŸHw•HŒ¢g¦Äm¢¿R–©]›YsŽZ€™]b‡Gi‡Rs“Pa‡=la“¬gh‹Yp’HdˆNtGl‹G[ƒ<WyQfŒFo‹Cb‹Oy¥^~¥ct™QW{@n9]~>Qw;f‘I…¬gu¤g’µozžYˆ«k} b¹l}¦_w˜e{¢Qj’Q\„ObLs›a¢ÀsŸÂc‹¸€ŸÈmjK¤Qy›Fg†Iz§W|¦H_}ErŠ`’«Vq˜`’Ágˆ®\d„?[zApœoˆ­^zšo~¨kŽ®n„¢OeŠI`ˆSw’i‹£wduŽn~šxx£{‡­r¡¹o©l‘¼ƒ˜Í~‘Ç…¨ÛsÄ}¬ØzÅóf¦ÀXu Hr“Nlˆhˆ±–ÄtЬ[¤[“Âe|Š+2@:GYBcoCor@ZP3KK.<I-@L>FaYy’Fe{/IPsm?\~MX`XpOmo>T‡?_lQ]wIl{TXmo~`^r:^oMXuOYjIlvIPƒLVsNanDjlG`U„€Ag“XvŠ^r…Y‹ˆY‹žlo¤p|”c„‡UuO€¡]}”Xp]nek{Ua†TKhZeIWo3OyFaa9gq9_‡G{iIzO{qo\g‡]rxTsIr™ru’h\^fxPo{@q~Oq}Hb{?eyDjw8bŒKb{D`…FZƒC_vIbzBmwFl}HuwI|–I{’T}’Yy†PoLS‹X]jMjxH|_Š[Z«[k~[o”Vxi„…Ox€S”ƒA•°S—«cš°yo»ƒc•t‘}8i¥Zƒ‹Gg¤R]“noOw“^‹›^s©Yˆ–\„°prŸf•ƒJ‰¾Td©mv^¨ŠH™˜6~¤q¦b‘»M®¨piÏ|‚bnCZ|Oo:{™}b”|lWgŠB’I…®RbZl{XkFq†C—›arÃq…Y“¦jr³n~a}¦`x¦o“˜Y£®V„·nœž_›À`t©aˆ‘H’®V™ÌZ—¯|f³{…„Pˆ¦d~¦f˜ži‚³]xŸp‡‘]ŒN—AÓ¤Nšßg‘¨cx¸p„›džœ@¼žiÎÑhÞå¹êŸ¿‰‘¯lÿÃ}o÷„rv½±d’Ñ^•­K«šZ‡š^Ÿµz‘¦]‘ƒ†–¬W¢­sÆÆ¶ƒu U¤ˆ)ŠÁ8S®•¾cb{Ûr•ÊT³©zÓîmzõ¯|Vb§:yyA¥OÏ„gŠE‚•3pƒJgˆ˜t‹t˜™U›»eŒ¸fc´‘x‹Fp‘;Œš@{¤BŠ¢`lš]„‘N‚fh—jš \Œ½{‡žD…±jš²\¡¡my¡u„ŽKÁ‘Mi¼i6Š«]qœX‡Ÿ=žŠdÇÒlóe¿~„¹Šˆ¤F‘Azœl‰¨p˜ŠF¨°q¡µm}§v¨«Œ¬ÑÁp¦jŽœa{¢Y’™n£Y…Ϭ´e™ãmw‰X±±D¾ÝjÁ[“„]¨¿r‡˜Iq‘@ŠšRgIt‚?›•Aq‡Kƒ¥6`“GƒJÿóxµwvX­«I¾exŠL‰¤d†©oÛ¡m¢ÿϱZ„ŸPvŒBi„Ui|X§”`y“€œ¯‹bˆ[ˆšF”·K…½<„ž4šÌ\‚ˆBq±@€žU‹ºbš¸]u¢Mw—`¯£¨Šº£‰¼}¯`zœA¢¿ï²Õ½±ÎzƒÈ_^{C°ž>½òQ‡µ_y¢Jy™Uv€FnŽ@~¥9–ŸSp‘Gx˜c€•^{–A•­”¼h… y𾇥¬J€¤Xƒ˜pˆ¨}š¼p¨Wxš8¤ÎT޹VбZ˜Ácj‹^}‘X†¹ht¨M€œRbˆL‰ž[g–M|’a~¦Q~Ža’¯€^Cs‹R}¬`…¦\­Yˆµm|ŸX|£TœX«\z©Oh•Wmˆ]~¤rx—]¡©Zƒ¤P´Ù‡”Áf†«^~¡ZdŒ\r¦q­mŽºT´E¬gjŒW…Ÿyœ±`wŽHfLPvK^€Hw£]s£o…¤f°Èbn“Qj‹a£jŽ­vz®vž¼`|[‘¶y‘µqÂv‰¦X„·dzšW§Y}Ÿf¯ÍŸœÂ‚‰¢dt•Ro‰`˜·a„ªCg‰St•GUu7gˆT’NjˆNfJ[JjŒXkSg…=g?kˆDa}AfHr•bp›e`}G]„IZƒJXx5aˆIu¢LgŠ]yž]r˜_c‰Ij–]d…Us–h‚ªT|žXxªSmŽOh‡Fp“SuœaŒ¬u¡Ëi–¸oޤWwˆXƒ¦vƒ¨d{£u½Öy¢·^®Z‹³i„šUw–W€¢tˆµQs’Ar”Hti­^zž\pŽ[j‘dz¤Ir>jƒJr•i¯pªMhJmQn’R­m…µbt˜\n§tˆ®y•¾‚µßˆ¬ÓŒÅøšÊö·ØhÄV}±QlŽXo‹d‰®Zm„@T|\€±u˜µ5We/gEl}LDX=JS5BX/AY,Kb2I]F]ŒQ…›Dgk/^k?Vj8ceHiq;t{GdˆHfuRuxN~vEbKh‡c_}J{lKp‹Oh‡Zq{QU„Q<sOTT@]c1qjFx|Hl”_i‡a_zLrpE‰ˆMy£dnšxz„du‰XŠ‹i—W_¥cu„|{Mv’Qe‹dm„R†x9s•HktFc|=oxEduCj„Jk…M‚PfWcpQk{<gZ]Žm]o\xqS~‚Fz‘Q†…IwNi—R~zKlšVi‡Uk†Ao„JZ…MmsIy{B‚…Gh†Ob}Bv†OŠKƒXršT?”fa^Eiy1nŠIkŒTO“^beLmz5pz[q‚T‹€Q|žUuŸs}–ƒ…“qf¢{_nx~>k¢\•‰Lt¿ZK“f\f;tz@‚‘Kd‰NstR“Wj±Y\…¶[_œt‘sP¹¡Loªe‡›jœ¢N•¿fµºu¥àq\²{ewDs†Lq“=aˆT]|M]|6…=†¦[s›O|ˆJ‚DŒƒ<t–@”Ne¦_zŒKs“S~“Ro¢Z\„H‚‚GqUsa{”dp c‚‘Q…ŸUy£H€P¨±\޳†­[{œb›]{°Uƒ–V§[zµWŽ©K¡®[€²v‹žm¡Á‡¯Ã„™Âe¢¼W„¯aÀO×ÖvÏÞ’¸¹‹ªr ³‘£W°a§ªM‡ºf‘¡aº³e³òv‘›Ãi˜°\Ô­bž½[f“QF]akQ||€X”¤T‰±u“Ã_§œ™ÆQ…®H_oQwPql1fvM…„@°—[˜Ñ„SdŠzYU¡e‚ƒAUŽid~[dtPYƒCToOj€@}‘D¨¦X¶Ò}–Ñ—×Íl ãt¬Ì>b¡X¬[Ì”_t¸m’j¢Òyw­gu‰P¨±X´U„’[‡—=}v‰‘@½‡M޲Q—vw®nx’€¼Ç~‚ËG‰œW‡•V‘«G”ŽJ¤f—®PНMi²P›’B‚ÊlŽ…=¬ñrѽU©ÔGp®q—›E»ËŠŠÛa®ªg“Ïž|™s‚–[Œ¥fƒ¯I—œ;y bx—L…‹,¦ÏzvŽ=¨•TŽ¥P~ŸFÝ‹~ÏYŒœAª´\‰œZv²G—˜Y ½S°¹t’ „z¢Rz\†—R_…D€|4„w‰‰HӿЕÎf¦²k Ê’kºHos.•žR–ÌP‡´†y—ax’I€¨Q}¤R˜Z}„VjVU‰UiuZTŒP^[.£´~–æt¡©Rt¥^‡¡m¢§Ââss£:ƒŸNy¹Up‹:x•Xu“GÈOo£D¦¢\¹Ý`·éoˆ²`ÇÁu¹åt°Í”®ØvœÍXŸºe•Â|€´djZ‡ªž½d} bµql“SbtQwŒYvŽN‚šTp™Ln†QtšEt’Jr–X~¥i{œUsŽR‘²`¯e‰¶gœÈu‚žVt’P³zž»}¦×u€¦L‚™J‰©P’´M„©O‚¤W—ºe…µwx¨\s“^y–Ye™pƒšth“[Ÿsz²vxd‰µU¢Ä{œÈe˜ÌVr“=ˆ—5޲EŸ¥VªÖZ´ÄqÊb”­Pn‡C‘ž]€¥]ƒª`¥gƒ¨g„¶`|gqš]vžl£Åj•¶Z™ºc‡©O}¦r„£o¨Òs€KƒŸJwœu¦½Š³áOg‘Tq™=\ˆMfŠIs˜AWz:\„;l’Fp•IfŠ<r‰M|•JVz6Z|FWYrŽBt“Dw›Maˆ:s•D{ŸWR~Aq’Xp‘F\ƒ?m’=x›Kl”Mn‘^|a}¤f°SsšU—´^~§Vl”S}žqÆž¼˜´_vPb€VrXk“q©{¤sŸÇw‰ªmª·_Š¢Xu—[vŽ\¦UxTg†]ql†£e—œ\˜P{œVWp‡FmŒ`nŽng‹MgPy¤Z‡²{¬Ïa‡±Xi“Hl™ck•w‡¬ŒšÊ‹›Ó‘Æö«»ð²Ýy¿æ~ºÖmÄÞa›¾qµÔl¯ËPЬc¡ÉvªÐZ£T…£Qq@cv:[wBlHq‰S”©V¥±W˜¯lžÂSbh8ZxMVa<S_6Xc;imGiJ`‰VtRƒ|Ar¨Tkll‚RztSv‘KNŠlEr]G^?9n@US4jd%_…BnvMx]c”aV~RmlDmƒ<bŒdbqdr`ixR“L‘ª[²upštmˆ]z~Ug‰XUyVjiJjƒLl|Hw‰K†{K“ŽDjšZpƒ[‚oGZ‚KdnS]x>b{Ng€[lzFzwIq„KmŠWu‚Xs—a_yƒOg’Rm}enBj‚TUnQmkB|>o•J\‰SpqL„†I{ŸJ†ŠX\œU[‰ek4|‘4u¥\]ŽZnhFG~A]c=xv8\’NtQP‘W_jh‰xV¤š_}‘kˆ›Zj£Ol‹Vt‹Db“cojanwBh‡EnEj{Ivt4u¤?¯™W¶Ô^ÄÎk±ãq¾Ãp¾«W§È‘Äu‰¹Tg­ojƒT¥œOiÂy‰ŠU‚°Ht§Y|’H`©HQ‹Tvo8k”B’Vm”M¦L”žHƒžQ‡‘N~­b™Hr¦T~JWˆ§B{šAvždx“m‘–[f¯{l„Fƒ‘O‹§Y«EƒQœ›k”Âi³«fÇp˜½`v«_ŠšLu¬T¨ˆT˜¼f‰¾„¡±dh´x¤sK¡Ë‚~´€“©o›˜Qæ˜f­í«¿ˆ¦hôPxÛjšU‘¸]€¦bÞÅ\Áþi¥ÏožÄ}®^•£cŒ½n„¢žˆ¦[O¢AtU‘*…ŽNšŸT°QŸ¶l–Fª¼uœ¾sf¡d{€.ÉŒ?¥¦Hj–P™U¥Ák`›a|Œ/m”Auƒ]}†@g@c~C^v2«F›Ñf™¢\v£ŒŒy¿Ìnж°†­j|¬}l‹Tx§8¥„D„«w¥¹B…éas’^j—:}Ÿ`~¬{˜NŠ—MŸŽb‘Óe¼»\½Ü‹…ÍU{§aЇA•¢^˜Ãr‚ŸxŒªVsžRŸ…;~Îq‘ŒC–µau¢H€<€ªaz¶U›¦†Ôß·ªé¡ÀØi³ýh—Û‡¦wÃl}ÁWA¯ÒIˆ«Lˆ¶q©e”®S…ÎHjBšƒYlyL¬Z’±KœŸXª¶cƒ¤L}H£¬`w¥Jy—U˜„_»Ô}v›g…[m SŒO–Î[‚¶GªE¦Í_¨½sŒÜœ¢¢‡íñs¿ÿ“…«Rl©G¦¦F˜®sµí‡·Óf} ‚©v£Å\ˆ»R¨]q™d_ŠDd‰K¨7z’>zžS°ªPg‘J‰¸f¡­¥“Â¥®ßuž¹W˜Ã^†£X«W…™Y’¾gs¤ZŠŸP¹h’Çn¸Â£Äá¢Þø°¬õŸ‰³h´Ç§¶ßªšÀzpžS’¡\u@ˆ«PmQœ–l‹¶S…¨U‹—F£XwšSi—Sx‘Nm{O—¡_qFcGi‘WsV‘±iÀÅw{²f©Y»[~¬MlHz›v޳€®ÈŽ­Ð{gšY€\ƒŸa‹¿[˜Y±cy¤c‡£_€§Q}žR~°E\xMf‡P‚œZƒªV—½k‚´e‰´€ ¿yªÜ•ÁßeyšK›¦b¸ÔzÝûŸÇ䫤¿ƒ’¯u—´]”¥X¦c²»j‹©tˆ¦jl™Pu_‡§XŠ©`…—^‹Ÿ[xžb‘±h¼l‡¬b‚¤q†¦Vv–ZbŽL_|yвœ˜ÀP_ŒS]„FZ‚?jHfŠAlŒNt”Xq–OmŽ?‰•Xn’Ci‰AYDUw:W|C^‡Hp‘Pi‘Er–\y¢LeD`ŒLi’=`‡Bm“Pr›[kŽQt˜n…«`nŽ^k—HjŽaw¦sŒ°[u–Sf“i§oŒ¬s‘¨`r”IjHsPx”Rw’^…¬~Ãp„¤ft]c†\jŽRoŒ]z¡]xŽHuQt‘aw“\y‹Ti‘SeZz‘Ol{Ei‰Gb‚B`tCeŒVs¢o•Á‹´s†§Lm’Rt‘Ru_ˆ–g¢|‰©¨Ù”ŸÂ|±£Ç{ Ò…©Õz˜ÆŽ­ØŽ²ØsªÚv©Þw™Íq§Ñl ¾h¢³T†›GnŽOb€TVkd†§m£²ayošÇmŸ¯<N†YI[OJ\8Yd7YlAfmBi~Nn„Qh{Mv|Uk{W^}[Z}S^vNO}`XZN\e-Zq7tc=w}8TšM`o_‡yJzžYyg}‘V^šOCwaURN]_<qlF‰zB„¦Q|Ÿ`”peth[|PbrP_jBvtFqGy‚S‚‘U†“[~˜_bœc\m^j@\K]pNRp;XlHulEdŠM{vKlŒNy‚`q‹Rb‰bi€Vt}DTŠS[`Tƒq5£}Jq•P|{TzCl‚Gc†T„tCY™Q`EŠpPd˜Pe‹ihy-}ŠAZš[fƒ[`ˆ=YOzoDr”Cº•O°ÌSfÅq[†Y{t2™’E’°mg«oVVorR›‘Dª¹my_’”I§·cŽÔr‰¨l˜šJ£ÆTÓ‰·z“¯ƒ³¿ÆÖ‰Ëå•Ëé•ãÔ’ß뎧ꠔ¼d¢²]‚Ák•¨n°³M•ÁfÇÂXŒï”„¯{pŸH`…I_…N€Q›@”³`q¡kŸ›P™Äw˜­ew›bgŠMŸ†T°ËM¾†“V‰©dƒµMpžti’^‘€<tªišŸP Øda¾yj€s‰•Dj™‡§‹h”º]©}±»j»êkŠ×‘¶¯|¿úc…Й½—O½ö~ªæ{{°b°“W²Ál½è¯àؔ冸r–Ôt¶šY×ãÚц›ÿ|g¥†‰\¤_‰šUq«[i‰[ }G“¶p¦¬cÉd€£cQÀ¾xÁâf“Ør px¬Šžz†§lD‰”?­²dÔµk³òIm©™ŒV¡˜:«ßu“Éh¬ÀMÚЂªíso™Ov„9“”`§qa“¹tÄaz²u—•oŸ°dŽ”XŒW•³nœÀm…¡fy¦u€™vŽˆ@¢¡:Œ—d€[Œ¦^”ŸN§eŽÐc¦§[«µ ·€›Ó~Œ¶>©Ò\Ÿ¾v—¸`«°a‹Ìh°Ì^®Å[Êßkêÿp°ÿ¡ƒ½qœªG¥É_¼ù`qÆ~n €œ«`¬Ág‡¿rŒ¸a«·_¾ÇoŒÄnŸaŠ£d£W‰’k®K‘¡yƒœW„˜;‰?ŽŒy–Žc”™n§¯b˜W¥±Fs¤m‡Gœ¡M§Ã~·®zžç€†¿M–·N¯5–¸“¦°_¦×pÎɈu®Oi‹?{œy}¬”sH—ÃV±w†Ç…¿s âÅ™¬b|Ò†Š’W’Á€½j»S±Dy‹Fd‹M…‡²»{»ÈgÝÿ’޳ƒ¬Êk¢˜y‰²mp‰ƒÀ©W´p‚‹[·æt•®r²…j“JŸ¡bŒºƒŒš}Ÿu˜Ê•†¯ŠŸÃs¢©`s˜ar˜W‚¨Ww’Aw›j}‹Vy”Lƒ›W¤]˜¦m±Än¼Zt†MšQ„³WŸËeXˆ? ³€‡¿_ˆ›Jƒ IŠ¿I ¢jˆÂŒe]”©†ºj‰¹n}–K¦e¢ÏiެoŒµbþWµëq„µchˆQy…i§g‡¨aÃZ‡£\j[‘¤O™¥Kh™JoŠg–¹lŒªp~¢jh“^{ €…§‰~«s¿i°ÄwÝ÷›ŠÅ—ƒ§[œÈÂÛ¥•ÀVЦ\£Ìb›¶d ¼h®ºdmI‡—fÁÂw¤¹b—¥g‘´S¦ÂnÈæ{‰¦`q–K|šPn›St–Te8Rm@o‡m˜©mwŸ<]€<c†@t–KoSkFkˆPgŒH{‰J} ci™CjŒ<[z=U|;f„8Uz:f€Cd‹IwŽMp›V“¯\x˜OiŠCzœT¥UxŸZuŸZЍ_n“g…œSk“@aˆOpœq޼e{¥TyœQvŸg†±•»`pŠPk•XŠZ‚œ_}ƒJdqмt‹°[}’Gm‹CdŠL|˜[‚’^Š›_‡¬SmŠLmJ€™Y‘¯M‰˜^”¸U{•BcC^|@`}=`„Joœd€ns”UfŒS}šZzV…¥]|’Hl‡Xn’q›º†®mšh¥³l™Ál‚¤pœwˆ¶yŽ­s™Äz•¹s“¾{—Ãi|šrŒ±g I^€EWpAfrDhzUawEOfb¸}¬ÍPJƒZGbSGZ2Na4O^9ag?_tB\~S[lNvbG}yEp•W`–aYyPagHjC^‡2gsEktFkyHSƒYanWk~Ay‹Q€’^xŸ]b‰i\~kga?dl4‚sB~r=w‘OhŒcUsWh_IYƒCowQlz<ŠRU˜Hoqjy€Nt‘^Œ‚h€Ÿjhžo[|KKzIxc9uƒ4i˜S{~OJŒR{hL…‹>Žb~ªYh–mw{Rt…8z}F€ƒCi„I‡tAiˆQŽ‹v{—P~ƒV}„LmMdŠ`YxE‡k;‡—M‹£fdºTt†Go”IV|Vup6k„E‚}=™—Qµ¸aŠÎjˆ¼¡m§nž|=§U²„¥d¸d‡¨Z¾§[‘Ђ²Ž¦µSÁ̓Æî•ç­‰³€•®c‡»ŒŸ¤l‡¸cnŸq¶šo˜Ñ–~µŸu•|ˆžvƒ¡žà˜•õ}‡»’i£Y‘b„m¡¯Q ½œ~Æ’až}†‰Q³´T¨ÇS‹Õh‘¥pž¤l¯µV“ß‚—Ärp°a‡Pv®@¥šgªÇ}‰ÁƒŒ³vp°jŠ•cx¬^k‰NNPm½bkƒdj„>‡‹8y¨\fšmhˆQ³~M¥¯[¿Å¨¿˜«ÇÒ °µ•á}¼Åˆ¢Þº³~£”EÔâl†÷¦˜¢š¿³¦˜ê›Ž·y¸Æo¿ß}˜Ð­µÁz“¯‡±Xv–X‚Šs‘Ve†N~;‘–m”е K»Ï|¹ƒ©½j´ÕS³ÝiwµcZiTv{;›‚<•Ø\Ÿºn‹¡L£Dt·|¦“a¥ÞZh¡{¬§…sË‚…”g·£y·Åį®z·@•™WŽŸŽ®Ïp¦Ùˆ‡­J·†<…q¦™StÇ>Š“;”LOƒ—9©w“?² G‹´ŒwžW¤gltR„«TŒ›€†¦_pŠ^­£p‘Õ’É|ޤc°Z–Ëx´ZvÂ`“·_œ„õÆj§öÞÝ…ŠŸv~ªM‘Ôtl‡q`^–{&†Á=wƒa•¬Rv™W“›d•·vœahyRzšLЇO—§_v‡J»§Tšälx´Y{EưN´Çh›³]¸°Q²¾`ÊÕd»Ø\‰¤EmŒQ‰„b­Àp­¿rªt€¿ˆl’Y’”\|’^™®n’¤g‹ªOpˆ•žG`¦Lg4kˆWl~@‹¨M—¸]™¯°v­`ˆ—\z”tr›yz”Vm•JlƒIy’W±½q|¦…•¢mËæyxÃ?s[z”U“»a£Ë`ÿÊzx”aŒ–[¯¸•²ïƒ{¬VzžO¥V•­U£Q…¥a†§dŽžM•œY¢¸SˆŸS“¢T‹¤^r‹7s“PxšG|˜C™g„¤qo£vžµ¤àn¤¿[š®nw§Xn€ouCkq‰—wz›V‘”rо|n“Pj„>j=pW¦¹qªy¥Éx—ÄŽz—v¯g¥ÍwˆŸl¥¾tªÔe–ÄL}Wy›Y‡´tn”Wˆ¸]dYibp‘g›Ås¡Ðk¤Îc…±elŒElNsNvš\³i¶às™º‰…´¤Åãz}±ww |Žœ|ïÿ°ÿÿ“Þÿ•ëÿs¥´l”´Xh‹A«°i¹Ôƒ„±i—²}¹ä‚‰¾¤ŒºŒ¤ak“T{§]¢bq QdyAg†4qJ‰ºy£¾IužKžD¦JeA\‹@Y‚?X:c…Hj’Nj’U‡©Ig…WÁ߈Åá^¬ÁKwŽG~ OgŠM‡¨wÌá~‘¯K_ŠElŽUp–Z†¥^ƒ«mžÃg‘ºb¦]|¦ReR\‰So£g~¯Sp˜[„®{Нy `v–Cd†c­`}¤RmŒA]ƒQmšfŠ£b™^‘¨X~˜Eq’[vœ_}ži•¸_€™Iqža³x—¹rˆ§yÃ{‰§InŽJp™HyL‡¡]¸t“²eŸTl•Zz›Xo“c…¨]„ŸIy”P j–«d®s‡Ÿm†¯f‚§_g„`~˜cl‡[U{l{°v‘§n†£j}œ]{žn˜Ç{±Ëc¦ÂO…£I‚”K|Dc€:UrYˆ¨s¸`RIRrSSh9Sl:Wb8_t@ew@k|MgfRz{D‘ŒA]v¬ln•en‡`‰‚JT˜PZm_`h>[nB`hCewJjHp…QiƒMg…^sˆ]€„TŠMŽGƒU}ˆGu“\aƒTllG~yC_?fv^u…Gs”Z6‰PIH]TZ+SnD…fPŒ”G_³vo{Z\„RauFxz:}œ\yVt^eƒWl…C«{V…Å_}œ‚x‚Rn‡M…|Dˆ†Ji…[m†RowGŽ{`†œU—šfx[VT‡}^”œF~¥]”yR¬«Z”¹||¬Zq˜Xƒ†Y€’CqžQZ‘S€{NxšQw“kin”^œCŸ½Y¾€v®b¥®qrÆ{}™‰‚˜v‰šqr©\‘h¬–{ÍŸ|›—„¥^~­r‹¢]„¬hˆ«h”«Xm¿r‡ƒ`˜Ÿcb½\‚wP³—H»aœzMruSb@ˆq0©°F›ÛjW¡•€rK‹•8yªi‹žy¬¦ŠãÄq°üŠÅà’”Þ¦¶—§¨wÇdoºƒe©©nwÑ•yžmUŠ]izPg‡M±Uƺ]›É‡š²«²n«¼VxÔ`o”bИGªÒP‹®a¤§ZÓ׊ަ¬^uŸ|ž‘Pšºmðl»éfÁÓ˜jȼ{ð¡·´W°öƒ{Ç—˜§U›°‹“±’wšž™}]°žY–·xkŸVŠ“5„¡4V—DYiIœ‡Cš¬fã°Sy䞊žZ´ |®¨œ²c‡¤n§”R³¸@§¥‚}§´•Y£¯w‘Áh‚§dy f‰Žr… qœ¬PuÊ]€?w¢]¨Œn¾Íuw؉¤Se§cxNn•^‚›p…W‘â?¥¥m¦¡¨›©VެdžÀRoÎ`x¥`‘¦IË^ˆ¡XzºO¡Ÿaœ¤I•Às ©F«ÖSš«\¾dsºŽ]|[‡•q|¤’–H}³Rb›Vl{`¯ s]àˆjoG}™bƒ›E}žLmW´·J~½Pkœ:À—‡šë®‘–d­›[r¼cw“_z§V„‡=g²OˆŽHž¬ouF‘˜Z’¿hp°lu…FïÞ¢Àÿ¯Ûó£Àð{‰²gƒ—qÁ“L§üe‰¶=|‹Q–]€¸l ¨L‹Ø~…±Kˆ’G¾Ív‡Ã]†¥S|‘S}D„›Rbœ8l‰H\ƒ@p„>‹“Sy¯XŸÈk£¤€ŸÁj©KkŽJp™Kn‘TiV€“L­[ƒŸeyšH¡§fÔàë®î§š±c|•_”®v‡¥e±vŽ“M|”NŒ±|…«ot™N€IŸÉk–Ãk¤³f´Ðq…´fšV˜¢m¡Ú—}•Uz¢Sr”Js”<s“RŒ N„´a”»u¤Äz}¨Pw‰Mw~‡¹l™¼‚ŒÇu±ÍJ‡§UÞ÷hÈèqÃòv¶ãX}¼Nt|IÊR„²^œNx˜i‰¼_–¾ªÖ_¢àcŒª^rŸomk¶o Ô–ƒºložDq•W’½qhŸSr•R®Vtª@{«nk˜fu‡a~§op›]Š¡Sƒ¥\vžR‚¦Oxš]“¹uf•\ewW€Œy¬Z½ÛW±Íj¢Ã©–¹¨`‹–ˆªr¥Ê_Œ´SŒ¦iuŸkŒ«dœ¯g»Ý~ƒ³|Äk¤l°y¬t„­k}ŸZp—GTu>cNn“NmŸ_‚¥nšËk®Ó†¦Ð[r£GW€6hŽEk‰Bh…O}¨MgŠI_Fk‹Oz¢¯”Ä•o˜mi‹O‚§]„­Yš²“µØŒn•LY…>i“OpZ}¤f‚¦[‰­}“´k–½]{ [p@gEg—\ˆ²Usj—ºj¦^d`}©Ps•WrbtœZu“FfU›f”°ex•oˆ¡ft‹P_‚Xw–eˆ§esœdq“Wm—fm›esšiw™m€žpu“WšW{™[„¢jƒžv†¹™šÇ{ušTt˜T~–Yƒ§fЦ`“°^Šš_zšdx‹c’ k•³d”¯Zl‚I[sRuVnƒOv›s¨Îˆ¤Çp±m–¯`“¸o„©†‰¯|†¦fƒ—Zo„Ww‘JgEo‰WŒ£m³cbRV~Y\i@XzDgu>f‚CmxK}…Ma‚Xk~S„}IqVq“{q›my–ho’aW[[m]oh5_|?mpEn‚DiMm}\jƒLg„Jo€UwŽV€‹U‰“`tŽ_t‰_m‹X_€U‹dLoŸFQajrfq‡CL”W2jH;B;ZJ vk$r}Ay‰If£c‡†`‡Ig do‚Rp…IŠ€O„Ÿ`J•rVq_{u?T™Ry}x…C•–V‡‘Mƒ“Um[XŒ\WoWkZDmuIzˆfjŠY~W™”Ww±W}£}†„P¢›K¦¥}Œ·m°{aŽd_qO]†_IzaXf6Ao8xcKe‘Do‹C¢G­¼n¯Î|…Ï›ŒºŸa¯w†kq›`{ŒhyŸX‡’P„ Lu¸rqŠoqŽ^œš_x²mŠj›´dŸÁh˜¾oz±f¿…a{ÄqW…`afBqtUKO\cNœn7•Æ6“¾tq¶w˜}‹´NuªS[_gzIŠƒK~¯¢¥™§šj¼‡Ž…nˆ°d›_¿R³ªf­²~ŠÉŒ¬œTUÍv[h>©}2ǤP ºb©¬o²Êu©°ftÂx| žƒ™UÞ¥_•ý–½©|¡Ô~–Á‹¢§±h ¶T™ÎF…Î~q“|—“`‘d¹YbŠR„Šp§¹‹_ЂUv[{f+w”Aw•XusLŠŠ5|¥D‘¡ahšVÞ†D¿ûec¹SŽk+‘¢>¼U…ºsŒœh‡¤wzcy˜C˜‡X€ž\mš\‡sL—v‡¨P’ªa—¹]^šw}~3ažTs‚=™•Gy±Py•_ƒƒ6|ªM~‚RŸ¼k©|¥±OtÙn˜6ƒ@T˜Yhh*ú³nwÿw‰»@¿¡l“ÿ}SoŽ`u–hyœXy’?‘Ÿm”›Oš½l“¦w}¼e˜™Wm¬u›_n—Doƒ?‡›T¨»d{žS” jv˜[cƒQ{‰=­ŠU–÷º•ˆ<¸¬Kz£CŠ=‚¡Km¨]YpR£†QžÉKŽr±£@§ªYÁN†ŠW­a‚£Bcƒ^w›J²¦rx¤q~™Vk išUØÐU»Ù{ˆÍ¦”´zެБ±N¼ªL´×q­Î©od¸ªHx®yŽ—b•FqR¯À`¥Ûm¡}ŒÖQ—Lr‰Iˆ›^ˆ©_—»Cx£WbHx?ŽI—’sÃà‚ÑÎ|–¯w†´e²` ¾k¬JRzE_nl¿–w·õ°a¾¯UÙïs‚»iŠŽCŠ‘;´ÀdyžW~”c«·oŽ‘Qy¦^Š”Wƒ¦c‘­evs¬¬v­Ûƒv¨x•³“¹S„¹u…¸m—RØåx§JŠ–b}—K|–L‚£\›¬ƒe—mf€Ed8~ªV{^ƒŽcœÖ‡¤³ƒ¢Ä~„²ØX€p› ¢Ïê¥åþ×çÿŽÁòÓäÿŸx¸Tu[žq‡±m–ÂrŠ¡q Î¦sz­Oœºv¯æ…„·i{£ZlˆW’¬g‡µHs¡[®i“É~h‚=}—S”ÆX†°`m”O‰¥x‹¥fiŠQuGv•Y°cn“Dd=‹žR…nš®»×y•Ác‰™c‚¤N—Á Éô´¡Ý«{ Ðr—Åb‘¹q•­l¤f«j‡¯Y”º[t˜Sb†>mXu’?l8v–b ¿bfI…Ÿj±j€£ke‰H[ƒNiŒAs•Pa> ]l‰BTw4^€?…¤Sy¨d³x•¿f¯e—®fŒ©\u”rv\a‰8]?l‹Tˆ¤OuŸe¨µc‰«[y¡c‡µ]wœOj“L¥Éaš¾qˆ±_}mŒ²vsšT^ŽTy¬t°Yˆ®^…¢QmEn…W„ŽvϾdrŽTj†Sn…Ol†RlŒ^‚šOhŽQe†Nh˜MrNY†Tn’i‹¶b‹¨Wq”Zl—`}›]t¤m²~…¬gn–Qq“T‚¨j™ÈjŽ¢W†¢j—¼o¢ÂfŸ¶a—¹dªÉh¦Åj¤¿VŸQy˜\~žU„¥}ž¸‘ŸÀ{¤Ì†­Êf‡¦g„ªcЍ_¤Zo„Hk‚Hh…P[xRbUv l’·]ipLcPZsI]~DjzAg9l|KoM\Ujw[q€HmŽM{†W€”]s‘`f”cf‚_njI€p8k‘F^ƒQbuN]iNdtHj}D_€H`vOmwK}vGƒ~M|~T†[ƒOƒ‡Q›ƒMy¡Tf’t[wW_x;N‚QIpCMY'wY"y‚*`‹Nm‚]}†C—–P¯]v§u}”dd˜R‡~L’§Nd¥€}yUb™?LzVxdNj“.‚XtUzŒhƒya_‹__wOn_2Xn8[kJQnB€dC­L“³sˆ«|£Z’–Xt˜q‰’hˆ°m\¯uRiJZiMuq8d‘8W‚=u<w´?q]}›H‰®Z—®b²°‘¡×°¶Œ¤_y°f‹”Z†©Q­QgØlI›…e]=šz7–½Viºx[²ÈfwÞœ_pvo_•ŠEi¦q}^ˆ—F{¡SkŸRhE’2šª^x­u‚u­šXwÕmo‡w ƒAÇCMbžKb‚[ŠuCo­† ‰[…¨y´“b£äd¬p—¬m¶¹eŠ¿g€ Z^€4ï1ÿÙqàÎ|Æêv°ô«Éƒ~´vr¬j£’‚ÍžR€Ó¥|‡^»„ažÀZ¡vpiAŽ–O¡®JËÒf‘êŽižf¥¦[¢ÁhÃlrŸAˆN¬Äd™Âg¡Â|“Ãl»n‘ˆI|ŸD­ŠZ`›R˜wS”ŽHÔÙ–¼Þ—ÂÁJ¹°K‹Ži‚±o©“O|©]”ˆL·£`‡Š^’Isid©¯MØ^–”|“²„¥p`>œtM‰ÆAœpnÌ~j[„„`êsýUm§I}c¢¢W‚¯v|žK¶˜Ui»gŠŠ(l©E–o”ÆZ•¹‡”Ù©“x{D€ƒX‚¨YL›ÎNz®[h¨fz†Pƒ¤iŠ«`‰¬Fy’et£W}V¢±]s¸PuŠCu€Hœ™V¬Ø[gG£‹U›Ã€µ‚HÍÙq‘ËŠh}J–‹gaœFm‡-©Æ=ÝãÿÿØÊÿˆ¹ÿ‹ª×•|žnw¦mzgcx0‹œJ¹Ó‚|•UxŸFŒ¥V†¡FÏ™`òÿ£ˆåˆx›Lv©k¸Ä`çëj•aºÇX¢»†”Õb{[„³e‹“IÄT‹´Š˜¯_˜°l¬ÎY«Üf–¿R€°ažXh“Hj‰=„œDcŽ;£¡:£y¸Ù›Äo‡¥`~›K ¨}†v[~,q~1£°V¿ºp°çm¶Ä¡ÈÊ®§éJ£¿K’¬T›¦lŠB—¾XŽ·T½Ä~Ôe`˜KŠTˆžV´×t¡Ñ^ÉØŽ•¹oƒµbœÅn„½c‹ªN¢ÀY›¿’|¸U˜¬W”œMm™K„ WvˆTt©R_v<n‘S|˜F„­\d}Jš¹|Ñ믕À[}“f‹¬P‰¿K¦´Ð°Þ€Öâ¬ëÿ¿®ó³©ÒW´iu {]‹pz˜]i…\‡«„q‰p„­c…¸x|ªZ|–XŠ«U“ÇbŒªZµ½cÿÿ^œÊ‡”ÃnfŒH`‰bz¢oŒÆ{q™Dl‹n°ÀhyˆE}•K}œ^uœdu¡NhŒWgŽnw”euUŠ™e•·gŒº~Ÿ·M‰°j}§†w¢^u¡[“±¢úÿÉËõh„´;Z|Ii—L”¦bˆ™UªSy”Dq’Kq”S•¶\s—g\€J\~FhˆV©^~®am¡YVwOf‰N‰§[uŸOp”NY|4Tu3j“Vˆ±X‹¬`¨Ç‚¢Ãb‰®WxšL|¢HeˆEm‰=\}=lŒHlW„Ÿ_Ž®o˜¯hw›Sa`‡¸a_‹IošW¬|žÏ|‘ºUgŒ] Z{¤Ns˜Wulw¦^wžmލYv“@]ˆU‚ž˜«k{šKgƒEpŠPr‹Jl•\|žPb}>YrMy£j…¯VwX’¬oš¼lm˜Qb“Muž_€¸bm”`k—pqœb‚©Vt¤[ƒ´ªàЧºSu£dƒ­v…¼„ Âv¤Ærš¸mºy²q‰¦Tz˜d‰ lœ¯wš¢w~œšÁŽ©Ên™³j‰­^Šªe°]¨QwœY„ Xr’RwšVu˜e{¨Zr|Hl€I[{LRwMXlAXvA]sFzhMl”O„\~B[“YVsYlwJ‰}RržZd_kvF_zAt}D^‰Y\tReeCrw8[|FSwE[iE^q@ph7vr<yK€•X¥~Uf£Tv„gw~ShˆhpyV|†CQœJdlMa|0v;c‘DN‡Z]lNij7‹zDu¨eŽpžb{­ešnŽ¢L|£}ƒ˜^z®Yd‰Zn†Ag„8`€Y||Jx`žŽUвc_§nsJŒEp’TW…Pc?Lq–^n™|—™g†¦]n£j‡”[‰¨P†¨nfŸTowMiŽ<zŠT•B|”[X§[b…diTS“ZlrJ«‡YÙ¡²Ž§×o‰áˆ„¯l{¨eŽ¢SfÀgf‹ubr+“{=œµktÃŽ„’g §[‡¶“lšy€>]•?}ZÉŸ:~Íh¤žw˜Ñ\gÁ[‡7e•PSc}hW™¡^‡¶fs—t¨šF’¾fÁ£a{Ä^†‹[c–CˆsW±£Bo¬—hPdL›V‡¬cš¢~ƒ¯`“”_z¦D—•MמR¶¯S¤­eµÄŸ¼»v…¼“„”]v†RouK‘hQ•ªQ¬‡BЭj¬ô¢ÕÍVÚ{ š€“Ç„ŠÂ……¬Zp’Q”—@²uj¥d‰K·»D­å“™Þ£oºZuP‰T°œV¤ÑipŽTt‚W|\’ªgË–bˆåqŽqff³€rl6¬y‰M˜@}”Pg}Ajƒ6£”>‰Êna€tŽ.w›d“ Iˆ¦S°ªf¾ßr”°k—­elÑ4ˆ‚8ž»qfš™g¦[yLešJ}„[¢ºo¿lh¯rOZ H‘–>‡µ€›ªLœÓ|ͼyƒá|R‘Q…~N§S¤Å—ÐænaÄ€‡D§Ít ¯cšB{šT…¡Yv¦F‚ŸY¤Å y¦Syu@}’YŠ¢kœ¤Zž¹Z²“b” P߯…˜ÅŽ›Îj‰°U’«Nˆ—>¬~•¾s‰£„’¸’¾q€šW”‘`ÒºVìÍN§ØOŒ­\`}g²µ…•³†¿ƒ‹½n¥½‚¡Ä£~°ŒmXz”Ov’n†•ltš^¦Ko«rž¤p~¯a‚Ÿd–›gŽêy“€d«V³Ÿczž`«\Œµt‰»ZnA… b¢QišC|ƒQˆ¤a»¶Ž§Îp¸Ó¬ŸÀj£Ôpçø|µçlËg”¸e•ºgÊ€­Óy„»“©^¦«x‘¶y~¦u™–a¼_o¡dl¡ˆv—z­¸»ºÑ›„ÎdŸ®E§Ãg•±r£Â~µÅ™–Án“¼_”¬”¿tr“~v^wœzn˜Tp†S—¬shŒSs€Cg‡A[sAx’Fl‰V‡ ]‹¹uoŠW•ºb¶{ºrr¢gy¶£Êò–ÀЯ¢Ú€Íëšy pµÏW}«m£°i“µhrhx¥RužN\r;W‡`hŒ`rbt¡}¢²å¿sÿÿ¾ÿÿÿÿÿÿÿÿ“qcvY–±b¨Ôj„¸^cˆ;kXx¢me…?b…Pi„N}’f_‚CRw8Xu<nL”«bshwšcj„Zt_|›Q†¤f¼uŠÍ_z£|¯È³”Çz†¨\–¹^ÀÏZޤu‰«jŒ•n‹®P„šO…«\m˜Y‚”G^ƒ5U|?p‘Kj‹Zqžea…Gd|A_†Q“¬jw¤[€œESs:_„6q™Yƒ¥fˆ·i‚ª{«¾°ÌVƒ«[žÁf”¬Ig…=j’HnŽNk„[‡ž]}¤e©Idˆ@eŒRoŠJd†XŒÀu‘Âl€±o‚¦RcŠNyšc“Á`x ^€§Wš¿pžËm•Ãl‰¬ThŒTy—bŸ^p’Ie‹O{¡`‘£PmŠX}—Kd‰Hx‰Sy˜gx¥]z `€¨lgˆVb‡Qy›Sw•Rr—I]†Jd~PjŠf‹°l˜ÈjŽ´‹²¢ÎqŸ¶Yqˆ]y˜q“±p™Ãz ·gŽ k{”ZgŒVv™]€›m›¯s˜¨f ¾¡­w¨¾ž¬j£g“¤pš·o•§g‘©k”µm’µ_‹ŸQr‹TwScoA[mGbnOR}L]oBSs?SrIrUBa†G`Œ\i|OV‰XBoSJ_9r[4m†D]‡b^pPI?aY?YoDVhLae;as7VL^lKVm8dt;ds:pt6oIŒ–b¥ŽWf²Xy{‹†Ex‘[x‹d‡Ln[p—ahŽHuyUe€JI‹WXhG_l.xm>t‹WƒŽfq£^]“tpwj…–R‹™^™ `”²fŠ®pƒ®cp˜Xc“`•wKŒ¶R¡n§dv¼€”o’©V°vx´}ƒ‰T`Ž]lwN•‡\r¯Z|—aª]´·iŒËn©§o‡Àkl˜pqŒNt…T†Ž@`£[yŽ_©›SpÙSW•s[r=^„BˆRŒœWl¹lT™mZyhp{R_€¤Pd™ekŒ2gˆPYˆPwp]•‘]š±lp®qjŒj[Bso@dŒU£Š@‹¾„»¥{Šàm~¥’kœRj~[b€Fn{9†‘Uk¨fkƒnp‹Jrm–—W¯«„…–„n|OÙpL…ÄBx•²jDrt=Š5ž•uÔÏ[ü…Š‹i‚§Xg¤X©…Gƒ‘`ʼnJœ»v{¬r³œF‘©W‚”WžzV¼¦KÀìt¾Û‘ŸÐv··Z¡Òwp±~¿uI²Æx¡³…«Ê›ŠÈw˜¢a{«\µ›J›¿rÁ¶o¡ä¬Ž`ª´vµŒ£’@™L¹¯MÚÖsܘyŽO”>ƱP¡Ôed¢hvt)£M™±c¡²N{a~•H_ŸJlu6fˆ7w¨*mt|”–JÎÃ[òY—£Q¡°R«S‰È©lœxkyYs¨gu]‹…q‰¡km^ž‰C‡Í`˜9oŽWt‘cŠZe™Tr…Jv®K—‹Hž˜sÌxˆ´~•¿šx›Ww¦>ŸO“ÁN\§ockH‘t:¹ä©„˜wº®jžâi}¶v}Œ]z˜cl”T‘•KMžUgo8ƒ‡?¡œiŸ£g«‘c¯¹n³®už Z•°`žQœ¶_z¾ˆš{‡¼‘t‚_”iû°ƒÿÿÿÿwÿÿÇÿÿõÿÿ¹˜×V·Ôf¯æi‹œL‹ÀjhžaŠ›Rƒ›xvŽLaŒN’”]n—U¡›rl¢kx _„—U¼Yœ–}¹qœ¹^o£mc‡8k…>š±fu½cUeCˆ‡_ŽªV¥UxÊaq…DhA‡u¯¸pŒÀc§`˜¬kƒ±~™ t´¿ŽªÛ‰›Èa³Åe~¹z£¥j’È{wžetŽc€§\™©[Š«a YfŸN[}2€•P|¦upžI§¾‡˜¸c‘±b”¼u‹Á{̉©uŸÊmÑn•±h |nO…šM‚®P¹M”©S‡¹]¾G’žDq„=VtBs‚F‰œV—U¤Ðv¡Ãa¬ÛqÀbg™k³´ŽƒËguŒRƒµƒi_‡uc“Ks‹Yˆ«’¹{Ÿm’Áz†¥`€–s—¶[«>m”H‰¶L˜¤R{£Ql˜VÀÆ}ÿôÿÿÿÿÿÿÿÿÿús•TRoUdŠRŠªt¶Üd|¨Mm•EtJe‚DaƒGpƒ?vŒX¢P~ž?~KuŠX‡¢Uv”Jc>ršSn†MlŒP„”LnaŒ»mkgвq—Èw®`~“x£v—¡o–­J…—T|`r’V€’T{—f“½]z¤@nŠKlWvRg‚ViŠId?`wQ¨·yu”\…¢KZ@}•Dq’YcˆW§Ðw…²d‚œ‹«Ž“ºm€¦^›KaŒLœZ‹®HhƒIcˆSe‹Vp–a†¡Y‘´XƒšMj‘k¡Â~‡¥cy¡c‚¨Jc…Dƒ§r•ÀXs¨Wj_g‰m‹Â­Þ€œÃOi`z›Vz–Ox’LvY•±nš¤^”¥InŽSx]i‹Mi†Q`ŠWy¤X} Um‹AY‚TlŒXsSaA`†MwPb„Tx›i{šeƒ­\r•j|Ÿp†¨WœNŽ jަiªy“¥byƒ]j€D`ƒT|¤eŠ¥j‰©fw›nžt|m¢i~›]‰˜c‡¥jŠŸh“^u’et—n‚­o“§V{™Kw”RJ];Y[<P_9WjCShBQnFOoJU_<Rk5KrTJdEJh>UiDZe/nh,b;[~WTjcTmEYf:Nl8V^=jj1[{CVnL[gA^u:lq<ƒrAl‡EhŽJ‹ƒX†•P|–g}€o|‹Wˆ‚_g“g~‚dŠ’[^¥kXshoeKn~GT‡V]qX`n7xi>s‡E_~Z`zWSsO`mH€x7œAª¦eš¹e¦»všÀ{ƒ¯os u“‹Rˆ¬]›s™£gƒ½{§ˆƒªkž¢€|¹„vim‡^oL‘‡O„¥T~˜s˜‹I»Ÿb‰Ò™£ƒ“µe{´ƒibr‰Tl„JaŒUšR—Å`ƒÇvt r‘@yŸQ‡ŸEj¤^Z‰_nsDs~L~z5{Pp’EkŠP‘–F^¥_^}B€-j¢T‰‹X„šX¤”]®£J‹ºez£[™Nm§dloxŠ[œmˆšh¢œ_¢·q¤¯dwÄXc–Hm{:‚ˆ1r“U¤C¬§jÒ¥†¨Éiá«Z¢Þc³Œj¿°QŸ£\—\¹“GÄÇn“â«y„twRZHx@‡ŒP³x?’Ø~´vˆ˜=¹–—…°`¬ŠRàã{³ÿÉ©œŸôÉ•ÿÀ£±´ÆqÇÜa«ö€Ò¹p~âxa¦l¤ŠU†ÓiV³Qymi”‘f¼|yº“hk†€[™Jš8¤°h°Âp¯Ã¤·{o·XŸP¬´€k¸x}y8o„4é”N§ÿ§˜Êl»T–‹nuª7iœ8m|-Pz<k3]šmq{exU›ŠqˆÒIl«^zŠb\‡;”‡?Š×O„ŠK{¶k…”H’§;ÁPwÆQ\ŠWŒ“?°Tf›ss>…H‘¢Nw®VWž`‚fLoÛqp§Lb‚Jx‚?˜ Vy¼^y°.¶§1Ê~n°ZƇGméŽ`„CdˆG„ŽA¬ªA{³XcPwr0~ŽUf‘nŒ€jÊœg‡·wWxœo”ƒ`ƒ·fƒœaxœl¥U™Ùņ‰:ÿÌnÿ¹ ÿèÈÌôÚ»ƒw˶‚Šk›ªl c†˜\«Ùxk¦tlkRfvHkŒT\…S]„C‡š?|±Go»c‡O‡Ín‰ŸR t¿¿]s®jfŽfg™Ž>–ÄExœlªx×¥B¦çc§»o‹«J§¹\y¯GmŒH¥ˆW°âr™´‡’ `ÀÌi–ÝtަK‹J­ÕžÊéj‡¯™“Ãk† R´Ø`›ÃQ†¬J{ªTvyXr”Dˆ¡RgœL¨Ty§kz¬acI…œk­V‡¿v‹³lŒÀrŽºY“Íop²l^{O}‹r‰©Y¤×e¼u™Ó|‘´n¦xi‘ZtžfuœIµ³€ˆ¦O|žJŽŠJ‘‚~ž®Šg W~‹Us’c`’D{–x[‚A¢eÁaŠ®L“ªl”§b`‚C¬Ðo~©hx™Y’gdOo–QŠ«d‹®x˜´g‰¹vy¦\š¬S›ÉV‰£˜ºÿp…Ѝ„¦®“¬ll Sg{LŒ¦P¯d”±k}¨_y•Oc‘Cv”Ej?Wt>e|Ey˜Z£dy¢TˆV†›`¦Íh~¥W‚¨Pn‰S}”Qf‹Gy [p›\|“]—©iƒ˜_†¦`Çåp˜¯u”k¦`j‰E^}KgXv™bp’n•©pˆpu–MUz@bƒK`pUˆ›Ab|<[rNz ]~žWW}:PvP¢clAe”Uo“j^|hޱ[˜¶t¦Åo‰²Nd…OjvÆâ’œÂcbŠ<]<jŽ[‚ ]b…`b‰\gŠPphv—\Z„Oc‡bm—Xl‘Jz¤o†°dŒ·Wx–Nm“Wq›w~¤nƒ«NiWw j©L\‡Xzžb}£aƒŸg¢³`•¯f•­Pl‰Ry‘NsŽLnŽ^yŸRkQx›Id~J]„HVyKy–Wm”Lg€Ig…OdŒPi”[u ^y—\{˜QrŽMlšf‡¡fŽ™v¡ÀfHl‚FsŽZy¡p† h}bˆ§e‡šVf‰Ti]uŽbu—k‰Ÿe~™^‡”Nk†Pq‚cz gx–Pk€Rm‘aNZDZ[1Ug5RtDGiI`Y=\h<Lp>Ui=VtJan<Qt:Zj?lt4w‚>gŽU\~VWqVclB^sBjzAd=\t:P|HPcA]h:_m9osD—xEˆ§Mz¤i‹Ž_—”T‘dxˆdZ†\blYVoNupZ‚ŽHc£pTrn`iCau@]{KbsOukE©l@r¯LtŽt‚€MVK|qLiŠ1xFŒŒ]ªªf—Ä{¹|‰dg—s]‚`gqM…\’›_„¿}¥vš—hž°p¹cŠ£x]rœU{›S—•Pª¨g’¸e|¨gm ~†z”¢Vs²|R€xehMi|<oˆKŽ‘JŒ¶S†¬f…¥s‚Nd«\f‡Y{dv¡Re‹H\…X§C¦µWÄ»j¢×x§Üh™ÙlˆÍn›±Si·zUyd‹~6 £Z¿ºpšÚ‹n±‹Wz«`ZŽdpAŒ›I´zXÐÀ_¨á’”µ’–µq\“hbn<l€2T†WinB™yEÿ§_¯ñ˜˜ ‹x±~¡YŽ‹n•†Z‹b«¤Dw°o„ˆ[§ž]–Ácv—R‡t@‹=°™JÁÒ…®ÑÐošg˜‡`‹—ŒÈ¥T„å}¡²½X¼€yIU™—ZvJijSšhް¢­Ucȃh€OvMU‹cwL„ÅLgUtBg£`[†ieo7Ÿ‰Nº¾\ŠÞ~— e…¯`¡š_—³sl¶nƒ@•£\q¶Z€†Hµ¦MƒÁ©²¦’À©®»e¨×~¤¸x§¯9™jo·X|xC­²D™Èr³ÁMt—n–MÐÅZƒÝ{“£G™•„œy’£s°Zy˜L¢¯j˜¯|›Yq¼Qzx„”§Wnµ]€Š9¦O{Qu¥^\„K|‡n|«Vi°fPo5Qq6bHx€,«¢d X€¢R¡žI̧‰ºW”§`h”Lhƒau‡_u’Laˆ9ŠX‰’Y€[ŠWžl  a¬Ôk‰ÒMz’Q_~R]s7k};nŠMe~?…“k¤{‘£mt¢¦Vyli–²°pv fz¥Wkƒ`… \UtFda2pv0¾Hg¯^j‰<g|WuŠ>|žWƒ¢R°ŽxÆßoðÿ‘êÿ¡”Ép˜¹t|¬Ez›@t©e€ egši’Ÿ‰´y®¿`»ÒȨƒºD„–[¨Ü€©mÁæ_Œºw“¯‹¹‘¾s¿®dÊÿ¦w xš¤eq˜ˆG§·¢|Uwcw—h««\„ÊT„ŽVlœRpŽHmH~•Rj–V…•e¨N‹¨WÊ銘ß|v Z‹§`ÀNgpA€šKhŽZq•ˆ^Ž^yY€ªa¦Áv€§Gˆ¥«‹°|…‹a²½‡Ž»x—­oºÉ]®Éd…¡Zt˜Gs‘AŽ¡\oŸ?kŽ@r†[ƒ£`}‘Eu§kƒ`”ªs¦Áv†¼^š«h‘À\\~;tMu•\¢ÀtvfŽ˜\Нf¨Âƒ‡¾NŽ¡r©Ï£¸CxšVŸ¸k…¬PmŠL’¶]q—piˆN¤U·À]‡²Omš>~‘D†žFv”Mr™`w˜Vœ\–ºt€¢_ž·…œËpv¦TvQ‚¢XtŸEr£KfˆIiQuZ™_lcŸtma„¤^c…[s›X€°Du˜cr—LX?Bf8TnPXxNjƒEp“@f„P~™RX~<q„T¯½iw—O{–<SyCfƒP[|?jSW{>c„Ov |¿×žœÔ‡~¡Mb†?f…q½È¸Óy‚£FmHg„Xd„JYy4Nq:]yFb‚On€H]C\K\K\€]p’d}§q”»mƒ¯Xk–Qk’Ns”c€ŸUg”Vk’^^?Sw`„¬`„£S€^Чq‘¸w‚¡U†Ÿgž´`‘­Ok~XyQnV|œarAh‚N]}Om’^{§\~›D\‡GnŒFdˆWp’^ޝeŽœB]‚Jt™U~¥`ƒ®ƒ®Î‚œ¯R‰¢Vƒ^‚¢c‰š_xkˆ²u­ÆV¦Ko‰Rc~]|Ÿn†¢`‚‘Yr‰Mt—Ij‡]ƒ£_{“Jf‡KfŒ^^fFmnBnuGS…JIjMLU=]c4ag@fkEkxIjyH\€S]|Gk}JuˆKm—U\„dVrXcvHmzIkJXŽKKpT[iMMa;Pi8]d8nr;€H™S‘¤ot­n”„f¤ W³h}‹jpzVu?•“Arž\pŽely\emJgcDVB\lC}gF°nA“¾U®“ªšTb¿f‰‚n|™B–“]x±Se•an†c[‡khjHdiKjO‘y:Ž™K›˜^’¾hƒ¨r_ŸnŒµs¯•‹ \›•Sk»[hŽl‡…Vl£Yo“zj’eX‰L{pIl‹W}†f‡CDyW™W™]y¢Vp—m€ˆH€¡Hš—W„¯c„_¢™^l»^ L³gм…ˆ®…mµƒv˜¢qš·ic¬jWYbn6‹<âºc˜ûx ´±Ò²MŠí”Ö¨yºíW”Ýv£œfs¤M†Œy‡§y—°l–ŸYt¸T]’Eb5Fy0Ãb ßÀc¬ä¯±w§ÏZ‰GV‡N‚nFʘM—éc•žÀ”@Þçx¸È‘“lœK’¡k‘›`“»bФ}w¦N‚‹I„œX‚ cr”|˜W«¡jAÄN`a;Yi0am;sR{dj fz†bh”E†„MoRŒ‘3m«tsƒM›¦OŒ°]˜±K”¡^§›@¿Y‘Œh€¯Rlªl„™KŒ’NœµG{®T¥Š\©Ã‡ˆ½]›†_ §{u¢ˆò±„ÆÑv©å†›¹Žžw¾âM§Ò_v¡Iœve’XmmnwZàªPÿÿÙïÿá£â¤ˆ¯FµÉD¹ÌYÍwþÊ[Øÿ–øÿy_ø•IoI]n.r„Co›R€WhšYqsI‡sœ¥P{º1š¡I¼ÀŒu¼Jm•9j~Dp|3ª>a’Y‡‰=‚¦i¸¬n£¯u_¬R£Ž]€µ_„Ž:w”>‚Ž>Š´^h‹nE¢¬f½Àc Á‚‚¦fzzZŽRv¨?c{+ˆ„;…µ’brAˆŽ3a†J¡£S€£rݳ\´ÿ~‹º|PƒLdm[|O€}Z‹ž[’x0€Š°•PzM‰Š9«Q¨›]¹Ñ]Øñ}Êÿr¹øÏÌËäÿçÂìºy¹]…™W‚±Ur‘Z€¥Fw”C¤¿S„¸^€©]»Ã‚Á‡¬~z~^Ÿ  ”°H®Å‹·f¹åz²æK­Óx›×±ÈŽ”Ë[n‹=k™<‚€I¨À_«Çh“½N«×]³®DÖü…Àù`Åõ\{³[Œ¼F’¦PªÑmÄÜ_˜ÀM½oÛá–Áÿ‹Òy`rQ‹¸]h{I–·§j™Sr„O¿e’Ù=ƒ¥S‘­j€±_ƒ’Qz³lt}p”®k¯[lxKo`{œ™Š™¨}z i¥ÅM†£`|•n†—`y–P}—[i‡R¥ºZœ´Qu‹kš¶€·èyvœk}¡n‘»[™Ä\x¬X¢kˆ·WhƒI¶k‹«rq•Mb~G~«vj—Hm‚Lާ‚“¸m‘¯l™ÊdfŠE{‡Iv‘b~ŒI„™Kf“8`…Oc‰]‚›N_ˆBp‹LZ€TtŽSo\¡q–®`Œ°Rm–Wz’Zn™UdBSx?]|HlŠYcHWw6h{S©¼‚ªÃc£a‹©gh‹g}˜hw˜M`9c;ZwB_DxYlƒQ˜j¦Àkf4bŠkªŽr‘@l†e{“Ll‚A]z3C_<OeNZ{\mˆnª‚¥sŒ£f‚šIs‹Rdsu›~x’nŸ\s‹Sh„Se„?bzIu‹?Pn>`pCcuF[€NtŽHWwKaƒ_l•iƒœbv¡`sQmU|¤Wk›Of“Oi‰Pj”AdŠR~ WlŠUŸRs“h‡­q—²i‹£q•³as™\‡”\‡žR“Vz–UkŠU}œUmƒPh…Tl–b¡Ec…E\ƒLpŽX—j”½u†œKnL³l—ºj†¢€—Á|Œ°o˜´jªe“²i’£Xpi‚©‚´ÎlŒ£Us…Kk~ZoŽh… [l†Jm„IqŽPi‰Wt’Zl…Nq“b‹­pfwAguFiqNT~Q\bZGg>Qa8W^0NhDcbCfyEa~QSŠWciMm|F[S_vWT|ZXpJqv>k‹BUŽ]FyYneE`2OoKl]:sp3czLiƒLƒ…Ut¡`ƒ‘hŠŸXy¥x†m‹M«•KrÆ]g‹~}mZorD‹mJvSg~J•tG¨zA¶~E¶œX® …”jr¢stm—‘Hš¬]n¿tH†qX`Ixi7b}C`d?nuA˜‹<–¦WŠ¥mt¥on–kq†[‚~L}žc¨’p— b‘£kqµrx‘pp‹@G•V…cV^”CZx_uA”“>b¦Y™{KŒ±Z‹­u–£e†¥k„œ]Ÿ]§¹YtÌa†s bŽSŽœW†¢j¬šZ®ÐoÄÏŠÝŠ¦­p¼©`˜Ëh•¯`‡½q}£`¬–BÿÏEÜÿgï®”užÄ¥O}Ҩ΄všÞj¸²¹Ã[‡¿}u›]”‚PŒS‰¥j›¯‡Q®LukQa‰H€x?Ç‘n«×†~¶¬˜˜a¦»tv·tZ‚G‹sOŬr£ÐpÆ¡bÑÄf]Ò³zo‰™_³Ž^ÍÙzÿ“ì­‰…ðÆ›NÈßS݈g“K‘‡>e½DJoeOX({p+©“HÒÜs^ÅZM]{FZŠHl4v‡pQŒ^klHS~E_^3†‚~vžzƒ™fuŸ|¸™MƒÌZªp[Y}1¡»^]¾uzR™¹Tq¤p^ˆX^kcmtK{{CMˆ]‰eO±ËŸcª§ƒ>¯æ«u¹š—§dƒÆF~“KŒŸ;ä§Löÿ»ÿÿÊÖÿû`£c_ž…‘zÊ ¦‰|ÿÿ’ÿÿÿ®ÿûš¦‚âFdKc“MjuHAr3’a(t¾V_N]}DVƒZƒn9±²‡|½h•\{¢3mx, cZHtx,•—N¦«yŒ¢²Œ\ÒÚkqÂy œTq«P—–<~®d‰™F¼¢;¬îg¹¨\ÈÛvk®l°d§¶‡ØßTvÐ7l„H–`˜ºT_Uer5•XÀÕtv‡m§¢™Š½h…‡S¬ë:ÿÿ]ÿÿ³Çÿ—q·QbpC‹‘Tw‘TogWt”Yž‘Lˆ¦~™{k›•†—f›»tÇÅÁ”Í¡_|AhrBuOyŒL_Lsˆ3¥Ÿnœ¸~™½c‘¡Z}–`tƒ@x•BŽ•xž[c{Ož¢f­»€˜Âh‘ÀŒˆ²_¯žÁ}v­EŠŒBظZ˜Î£¥™{ÿÿîªØf¨âİԫ°Ò«—À›r”b–¿p‘¡YÒÞÓÿ½¨È›‰¹˜”¿{’É£h›M©£^°ï„•¯U¾Ð‡ÎU‡¹T}žiy j|•S‡ža™È_™»g²ÃPœÎUž¸|´Ëƒ›¼d—ÏH{€GŠˆcw–Vƒ²d–°]ž¯f—§l‡¡t|C•¤J´­n€¡c~g¢³uÎü¨±æ‹¦Ãn{œqŽ·i‰ke]m‘ka‚>r’_Ž«a\…2qA\ˆU€ŸZpQy£[r£Xy i°c“²EaƒJn‹Jn—P’a} Sm”I|—dЍifŠ?o‘Ds‹Bi™EZ}ApXf“h~ \t™QhMv˜Te‘Cg~Fl•<w•Ias=mƒDuQ|‰‡¤€³Ëƒ¬TjŽKp„X^‚JQtA]}Cfs>eƒMgƒDf†Fg‰n—±v|’?_‚M{“lw–IbyV`y=Hh:Kf+Ro+Ll0Lt7UuO¢oŸÈ``WOjLToHpŒTb…\`ak‚\f{PkzRb‚Jl~TtK‹Iˆ‰P‡Rše‹˜iqˆH[wTb|Ya‚Ym‹Xx›Rm‘Yy e„£e€¢Xl™kŠ·i‘µ[y§Pt•[wœ^‘­oµv›­biƒRb…Jp„Wƒ›m|‰Oc‚QrVo‹b§] M_zFl˜vÐÿ¿áOe”g™³c{n¬¿z¢]~—e‡©p†¨ao›^m‡k‚¯}¯Ës¡Êw¸n›¤^˜_‚£xš½j‰—OoŠPr‡Xx‘fuŠMiŠJpˆFhPqLbzDVy]tyŸÀ{V~J\pTTkKPnOc`H\r8RdAQg9Fe5XQ<dk7exAE}IYbK^i5\q;WmOUnGXj?iq=ˆ|?}™Yl‘b†‹S•KiŒViwGw‚BmM`ŒYn…Kx{>g’\u„Ww‘_tY¢~J‹§OUµxeirla:gqB§wHÆyBÛŠVÒŽS»~[ÙoYüŽ]‘®ˆwƒ]”ufr]|ƒKq˜U_Ÿ|NuahdCiu,}?‰œHŒ¤XǨT‘˜_i•qrŠkf‡ZryLƒŠDw¥VyŽeu™nlta^ˆg}vVƒ‹F^¡fYsMjz=ƒ†K›’9…¼aq n‚Š]€•Jq”k‡V†žlo³c“U­¬gœÅŸÀ‡¢po§W‹‰Q“œUŒ§^´¡cÆÐ†–à›lµš¸XÈÏx–ë~Ž®v•¢b®dÀ¢V‡åšJ…Ÿ‡SX‰‘7¥q”šSÞ¡WÈб‘­Zk­f`„i€dL{¢Dm‹Wm‹M`~apf8`:l}F³D«Ç›Á~¿¿k{Õb_ІL|G­w:ËÓ]°ìŸ¡º{²h`˜ƒw‰F°¥<¡ËNÃÙšµñÊrʆ‰•_¬=äåb£é˜w®ea—UmƒXq€BgŽ;v=³C«èyìÐ’Ìÿv^ÈšVsBuw ZŽ^dqJb~:M}8Ig;d{œˆH¸ÜSÀ¹]Úÿf‘ÿ¹¢ymŠmf…7q<‘žn†Çnb•y†to‰Â>”•A˜ÎBY—ZTnEam0Ò˜C¨ÿ—ˆ°|Á³`¢îЦÍUwÍv”‡VƒÄièkÖ뾡ê×|¤Ç~šmFx;‹u$W¥`[ƒNÂ]èëÙ±ÿú`£…yŽ[e•B[ƒAS€PFh4r\+…›kl”8bmP¢9ž°Xo™vpš<œ¡R{·_|iE¥–AÇa’«x•ªYšÁ­Kš³Jž·”“Æ~ާYl•Fy—a€£j§¦pŽ¢_­±~v¿Š¯±k¢µs˜Æf®h‘³Ìq¯†x@}¡Kg‡Rx:ŒCz©A‘yZv˜G—{:œÏm•_ÿÂŒÿÿÿñÿÿÝÿÙÆú«—±`„­To[£¯@‹±[{‹muxZHyo`t¤po}]†Ža¥ÜzlD‡ÎU• Q‚©fyª^{…H¥¶` yz£l‘³R·c¤±‚¿ažœf~¶X—”S”Ž]¯³“˜Ér•¨u™¤‚w´f‘ªqr£i› p­ª„ªƒV„RNw6ksTf—TX‚O_zUy¨ƒ]~l‰©uq•g—«ˆ´Ô°k®mr£Nw¨vw™^ŠÁt­~}·ªÁu¹Ó’x¤^’¸pf‘O¡²:˜ËN–ÅPŠ»t¡^ªuš¿}~¥{„•|“Âj†¡V•˜@ƒ±[ƒ™d˜¿d§¶ešË–~p¦ºj¢ªb‘µjŽ›cdVyž^•ª…ŽÀ™‘¹rŽa|–N«cq“@a‚J®V[€FŒ§^rŸU•H`y=m“=|c}›Gm“DsœOb‡X¤µfyžWm’G^t=n@rŒRy‘Bh‘]˜¼U_CeƒFa„GfŽJ]ƒ8bƒ?YƒB_~En‘Nm…Mxš^g‚Hb‘CyŽInˆTrHh~6TnN~¢UlHk‰cq”ZZIh„TcAUlFdzQ_‰;gzC`wAzŒTmŠVh‹Sk†\u†NsHezZˆ™Mg„@Vr;Xo0Mc8]l=Zr<i…H¬`£¹‡ÑÿsiˆHOf5>Y4QhK_{Ff|VuWmnQnoBssLteuƒt‰ž{œ§o¥s·¸‘Ó¥·“W™‡QzsU‚lÏ®vÈ¿uŸÀilŽazœax—Z|˜c|©nxŸe‡°l•³iš­}¥Ð’©¿tw’J\wAuŒRhU{”auˆLu’OsRqXv“ew•\yˆRt¯–ÞÿÁÝÿ‚®Ðˆ¶ÖŠ«µy¿yŒ®cub‚¡]yœRs˜Ru‚]{˜ ÅžÃ{–¡n’WrŠUzšgƒ¯k†šJh“OsUu”U¤R¨V†¥Y„¨Xx‘Iev>Y€\z¢xˆ³sdŠG\†ZQqLL^G]b4[s:YqBOuCOfA\^>]s3_mFTgCNoFW]8Sg;JrDV[GNa=R[5mf=_~Kw}cxX}kq™blŠg„Js‰L\˜_\{Xdd7zpD¤ŠIj£Q`e€xGržJb’r]xVpj4pr;yF”w<ƒLhlSEkSfLT|V:QzgP[c?lcVXWbr=}yLd—W_~Z~yD“= ¤WȱfÿÙƒÿž‚À}`ldP„yXoxY¦zT{¡Ia˜^p†^e‡_WoY:oJrRA‡{4QŸvul[‘•=ˆ«^¬ªb“Æ‚Ž¦…œ\l™Sk|HtBi‘VegxAzCÅ›lo¹W`uV{HyzLÅ›>£×o˸m°çƒcÖ““„‚r™S¼Š^¡ò“¸´™Ðt‹¼t½©YpÜtP‚uŽd4˜ŸHŒ¥lžšdÁ¸eÇ¡t…±p‚—`c¥‚–C¬¹]zÊXƒYq˜_oœ?Z‚Omy7f7TxežwW¢È‹¬¾s¢ k¶c¬¯@…Åm†¥Ãá¼v¨÷މÅ`ÖµFî—V¤‘LiHw|c”–fe²^^‡5tˆYfˆgyˆG—•J€°A¨›I¤Öa¥l~˜v–”f°}®‰{·WŒR~(»=¯åQ^ÈXCgL…n5l;rˆ.oŽW‘^¢¼™žÖ«©±‘Ëu®’]xÍ]`xCe„E—’[¯ªj±wdŠU‚SYSOl7bf3³¡>Ãÿ¥k±Ÿ–~GÂÛ–”÷Å“Ÿ‚y—vƒn…ÁSv•X…ªykŒ|=rªN`‡<[oEN}Fss3’¥eœ½œ²pˆ«B˜¡<n±Q€e@Œ¿X^›%Õ¡@žêr{˜Bf£?ZN^¢•D³Çðña ÿŽ™±g¡£J˜Ÿn±¶Yt«€¡‰RƒÁfŠXz£^‘¨od­Ddq8¨®[p²b«˜fyÅm˜¥W”Òˆ [’½Yˆ­‚{°QÆ¡\€ŸQÊ¿J˜Ê¦q˜H¹¤`•¬”°ä€ŒOŒn¬p1‰ªpV‰;¥}T¼é¤³Û¸ÊϘ¢ë¦Ÿ³qd’Rn‚2bŠc…†`ާUf|T}PŒ…Rk”Y‰Dv¦Vu„O—¦Lw°––¢J€[‘¯zŒ¤LÄàr”ªj§D„•n‡ŒV«¬a˜«eÍÔm•Ñ“„¬E‡‘H×ò†x­\ _¹[dˆW©¬‚ªÊq}®k‚Œ]B}BAQ`w={4dŽ@‚ˆ9w 6ŠRs¸>ˆš]†›cƒ¦[}‹U›Âmnž^™]ƒ’[v \…™O¡Åx¯È›„´xŽ™Tt’a~<v‹d–®ˆ~ªVq¤xuyvšcZ<ak;QdDq^yNÂÍkW‰6™g½Ç˜¸ËŒ»å‹“¶]ž^p’n˜¸n¯·U›­~€ž[¹Ìiœ¿l›¸k–¹V“·jƒ“g‘i‰¤^yžX^y?xe}žXŒ›TrR¯´m˜¶^›Ér‚ŸD{ŸMVx?ƒœp‰°J¨ShˆNcŒNˆŸ\Š P|ŸP|˜_‡°Ck‡HhPpŠCm™9iˆH_v9cˆLz•Ww˜_n“Hc†D—™ZsŒLd|Iv‘Oh†9f‹Bl‡fo„G{˜R¨JdŽ>kJj‚@a|>rˆCmMsNp‡@tWw˜NoŽQw‰U‡ŸZ{˜KoK‰’VƒˆM†•J\v5h|AtŸO{ŸS¯Ìe„¬t€“zlŠj]sJ\s4W_)LY>aqUmvY¤|F”„N± Lµ©O×®S­ž^®“gÆœˆÆØ…³Ö’½£v•~k°j£Sxch”‚ѵÌȃ• [¢m·×l‘¼c’¶k²eˆ²wŸ¿‡¢p‡¯’¡¸cl>j†N†–WqO_T|WЍ^…¥Y“¢Z}ŽJo‰Pq’U‰®Çô¯Éø£Ãð–±ÚŸ¶Ïƒ®ÒuŠ®^ƒ¦b‡¨d€¥[¤X™\‰žn|¢ow•^u”g·fŒ²Xˆ§h‡¥dŽMlM{šZ…«i•½kªËs¦Ãiˆ¤XrŒLo‰Gt“\xiˆ¦bbŽF[…aNpPP\LX\5\n9]q9]f@inA`t?E@FVKRF:Mk7Pg:_g4OyET_IM\:IU3C^9K\4]ZGisCcz]N„`Mr[k[Jps;O”VNo_Pb6ea1t<qPpvgŠNj‹M~ƒYe‘RgyGx6k’Pm€RS€BfoAP…9Ki<V[*My?Pg7bn:dm@Z=em=`|Pixc}„Q‚˜Rr¦gÿ~cÿ¼rÿ€wåsTW[EifD“m?¿VÃbx¢]f‘ef|OAuI8S4yH,yq'ajrwf’A™¨g‰·‹™Ÿ‚”¬o±ti¤pglV_tBGt<M]EÈi'c¡:`}aZqFxoXp’=iŽO£y.­»p{ºq£xS˜txoSaŽM´vF ÛkvÀª^¥xWŽXjEwª[]†e‚^:¬’1§²gÎÉo¹ö©üÅj¦ÿœv•y{‚[§‡=àÒe›ÿsªmÒ[ƒûm““½·G™¾_¨J¡¤<‘¦q˜®\q¸b‡„^{œWÄ¡l›ñh…ÈoQžž‡fˆÇ§Pkð~tÛ´4qû[f•L]Ž>T{0_tDzM“¬V©‹jªt‰­X¤¢b­£d{ŽZv{2y‡:˜Š1ºÇl„áo™IΪ\{ÛÒh}~ƒy`c†C£t;˜£DVšc‡y,¢Ÿ`–ÇŠ£«‡ Ðš“Àyf«cS„_oy;qU}ERžgS_OŠ&zÇno~1|œ.£©>u³‡ ]…¦Us‹um¤raYƒƒWq¢g¥Ke•cm“N`0ek-X{Kiu>bŽ9QlLje5¯V±¹b‹ÙiSš_Nt/Rw7Rt(§„P…Óœa¡8ktPŠŠb²ìi†°:²[‘°o£Š‹Âƒ|ÉM‰Ž]ÞV|«^i‰X˜„A’¸p‚µfužTh~K[†Icp1T‰¬’f´P“V Ãa¡¥p²Óc˜°ZºZ|¸j}‡i†”J­Çu““n†`‘¡Fˆ°bÆ« éÿ­×ñÀÜmªVX{$y˜) ¦Wßÿ»‘Ñp……WY§caq)iŠ1ovR`–9tŽGU~?|—InQ~fq”H€‘FYBz„K`ŠN•—`ƒ¢X§`€~bµ¼‚|¹–jxW„ŠNi„@m}L^JfoKTr.l{39´â¹oªWiŒ9‚Žd‰Ptž†{”dk}I}¦gjœ=fm.š¸\‡½GzšB¦¸Z¥ÃS¨J¢Ñoqžnn‚Zs˜[~’T°Õ~ŸÜdd—Wcrwh…[¢­q«¾{tŽpf€XˆŒ[ž»q‡–h^™0r’B|¥WjŽ<|{^ª™|t¸][pO¨µN°ÛV´Ð}¥h‰ BޝBu–‡’¦v…°Š¢²i„ši„ O ¶c–´r{¦H‘´n‰ªm±¸§·æm‚¥v—Ÿl—µG}£]}œ†Tt@^z@{Ž\q™Eg‚GaK‚¡m…”j¹[޹pmKg‚@jN­_†¬Ty™djŠZ}¡k{¢j¤`y•bw¦Rh‹Dn„:†¡R§RmKs•Y‘Pc‚F`xCb}Lv‡E[r\zNo‡Gt”Z{£]–[”ªW›¡X_‡\YƒIW~:^€Cr“M¢H‹ Uš­dz—LbˆL}a—¬f«[r•_oX‚›X}¡f[¬dpœ_o•Or™h–¯wÃô°Ãõ£©Îpœ¿QoRŽ™Yi…:kK‹¥O‚L•vWÆ•Z¤Ho‰N¼¨`Ú­fعiÀ®mÅ·ŠÞÄÂÁˆËÉw¢›e€—y™…r­‘…˯¬òº¶÷¸›Þ¿{Õ¡v–žr“¤s¥Æ‹»Þ‚¡Ì…ÉЇš¬vžµ®Éoƒ›M{‘`{šU}‘L}Žc|”cƒ n¶¶i‘¢e˜N„V•`¯y¥Ô’®ë›¹ç˜²Ø˜²É‡ÁmÁu”±g‚•]v•^ kŸ¶g}™Xl•Vf‰Op—`‰»¨Ö€£Öw޳]vŒJo“_ƒ¡^³}¨Í†¼ß¤Àrt†Oq“P~ŸRs—Wwb{”]QŽLJvXGlQEaDO`8]i1^q3cn8nlC]…HOtQO^FOV4Tf1Rs;Un:Kn?NbNZ^@Wm5Gk?M_<F_/Q`9][:=vMG]G\Y3^p+OEYuKTj8Zj3Xl4rd;€„P‹ŸR€´bz–]›ep`h‡KW†Q`rN†|@‚›;kªZm€P~y:gŸH[IZo:tp:e‰FTySPlMŠcC£M†°i†žrÿvXÿ‰BÿmBÿzDfXBiu9t|4Š€FŒ©pŽ•i|¨iXŸpGkIn^4`z/mrB…G”¦b|§\n’an€v|…_IxŠiYœvdmScv>PmDn`6xo(K‹>ZlNXiHzq=MH2_dcE2ww?S}^ƒeRy L`˜R„v?q™NY‰UMxwlhXe…=ƒ{9°§R`¼m`jOu4}™c¡˜R§À•ÇÈŒžÝ¿•­©~›Yª˜@³ÍhŽØ¡›¬}«ÄisÔ™‡yk”G‰W~™o§‹W¶¼dè·hÿîŒÿÿ‘»ÿ½ÑÑv€á𖍉†½t®¥>ÍÝmⳇ£€¬ˆ|¬zÚW‘ß]´´QT³Z‡p2ŽZxªM¥‘OÙÎsµ·y ®y|…_s{A¯’9‹ß_¤±l|®‹wLªž2ÉpmšF†@ë}^íÿO‡Ñ…Sƒeaq0Z€@mŠ>nGtŠw¬šp¨­ƒ€¼ŒTŽ\–j6v»\ O˜¢R—´RwÇ\qBg›4‚bU—pWi=NsOXbNT}=Jq8n_<€ŸMZŽP`7O2kw;i=hr6…zFPvTVt.ed*q¤K¥;`àlgŠOkˆ$¦ž,d¶Z{iRs»iˆ™[´¯U…«Bn•dƒ¢b„¶^Dw‘R‘œ@tªN¨Sq¨WfŽBY—.‹s2‚®P§¢h°ÀKf’:\{=Xr2†•2W‚Op€YzzH½ªw†ñŒ©—Š”ð¥s‚Rޏh¢š>š¾mŠ¥|[qVš~n»êŒ{­gƒ‡U‹§€²¡ŸsŒuz’`—AdŒGÆ»GÇÿŸÑÿ‘ÚoiŠYt=h‚1nŽ3hBrHrƒG‰}} jÄ­mÆåŽf¥SR|9yDTXt†X_xXVdIˆ@¢µ‡o}J€sKs”Wvƒ8›£K ÅV`5hhDx›Ya’y³‚{‘ßw«ÌjŠ£àðg}Á6{“Ri€@j{C_ŠIbxP†bûõš’ÛbŒY]…WcsXŠ£‚o¤Q‹E|­O]~Tw“k¡²w~§Yn‘R}šKºo¤ƒ·[p˜a‹ŽnŒŸµ·yw­hƒ£Zp‘S~›VŸGn}AŠ˜bhŽMrxT¯Ç”¿æƒx¬Pm‚[ªz¹ËŠªR‰¯g–Ë~‘±hšÒ”­¾‚…£h¼j©ro…’£v ”šµygŒ_„™[bNpSs8zBkŠP“ªPu‘>kŒAsšP‰¨kj’]¨im’Jm“Uu‰T‚|}¢s‡¢T€­[hV}˜^‘¬\t•SwŽU‘¨YÅð‘·{§XqŽYh‰N‰‘WvQv‡GxˆL€—HkˆD|„L‚Lk‚b‡¡jjyMsŽ_ƒ£]j•ASp0_|EgƒJŠŸNg‹gŸ³Z…‘_nŒIdˆHz•\žšei…N˜Pz§Xk˜gw›HvšRu¡c•­d£Éd¢ÀLj„xм’€³„„¢tª[‡£_…œY–eºä–Ñøˆ žW¨~c®Qn7Š•V¬k­§yâǘÿô†ÎÐ~ñωÒÉ’Òð·Ûÿƒ¼Û„®ÍŒÃÑ“éÌ»âª귟Ũ›Ä½’Ë´qĤ⼓ÖЭðø¹äÛ{Œ®„¼‚§{—­j“²lµa™¦Y‘eŠžiœs~›Wˆˆgš] ›]˜™h›­v®Ûˆ¶éš®Ý—¯ß§¿Úw ½p·cxšZpŒVt—]ˆ£{±Âw•«dš¼aŸ³Q}_~¯‚ÄŒ™Ãƒ³Sq‹Ri‹Voeƒ¦z«Ëƒž´gr‡Tg}Qt”]‰¢U|¢Zz¡UoQQŠ\Tm\`lDPuGh^?]r-btFbtBlqHaJnzNgxAUoHknAH|@P_?Uf7\g?im>S}>F}GB_ANZ1MY:X`1Ku<TeP`h8ku2my@XJ\yDks<dsEƒu?s•D„‹Y}­fq£vwžaTœ\VvcU}M]p3‡q.ƒ¡>pµtvi‡œLƒªolŸqiwSkNl„L‹Tq‰Qg{Mw†H„`Ü”bÿ¢Yÿ¥XÿpKÿs8”ZD‹©Pu£S~Qz}Tv‰`yxRˆ‹s«˜Xº±PˆËq¡–w¶±X{ÞŒ‰†Š–Wq«^f€VfoCuyGQg‡R`ƒEbs=epAhr1^vBpjK¥€C¸Nz°]j‡W{h3†{5|‚FƒŒH›•E”¬c¡¬icºdb{Ujp8‚s4m‡A•{]¹b›Ú…s°‡‘ƒB²O¨S¦­YcÂjšue™jrŒX¢‘O‚Òq{©j•‰iœ³{T¸{SgYw{>\£Ašv>‹ŒVp§Zlua‘Œ\S³€[qsaTDrkdt.p>w”=NXÏng¼Þfª×g}˶¨7l×u“†HÀ©`¬ÿQØÎg‘ê…›¸eµ‘_¤œsž«‚–¦`ÎÅDŽð…•{…–c‚`{§_|•ds€eb{< wBº«Q²»­…Ë•s—†^W5g9\Ž4McDˆ_6x“a•~`Ìß”sñQ|<§t>”Æh‚°³u p“®}±…ѳNæÿ–“ÿ¾nc™C^€?CV?…X'f“<cžGKh<CZ!D]Kc‹`%•±YZŽTŠN„¯fm©8‹ƒQ‘²dpÎzu9nŒh‘T½ãއÁUtŠMb„EYm>}ŠTN”Th{/b…Tg|/Ž®/…¯Y©>gŸbl€Ck‰7‰‡Hy’I¤¶O™ÈR’mšªp\°O”,ˆÔ‚¦:XŠOtd+mCw¥„|‰8c²„pt2¡|i®`c~WJXRNk4qk3›µŠ™¹t¨Ô?ƒ¨Iht:jr0…–D{H¼¸dÐú©±å«ó‘‘­g`™Jlr2‚r9j±Adh/`pKTi3RrFat]rˆK’ƒIy¸eY€?c}<Um:‹™e_d7dr2†i“ša”“S‚|C…ŠV˜V¨½™šÃV¯¾GÕð_xµLNz=iY8“®j‚¦nr¢U¼Ë©‹ÈvmŽN^9ko9_u:Me3ss_ÿÿ¾|Ì}‡§hfŒAb…LizG”³_ˆ²]‘ÆA¡h[_ž}†¥d’­_»ÂvªÏUšT£¦‹¼¾a“µKƒ¤Z«°b¡b©½`œ—ŒØÿ„”¬r‰˜XÀÔ‚Š±OŒ£A˜¦q¬skŠGƒ§Ao‘H€›jožc‘šHœ¾P`]s}Tœ±l¥ÐstŽ_™ˆPŠ“<މMŠ–OޤU€¥LwœGe}=jŠPx”`˜¬c|ŽH”a‡šoƒ£`ÐÙ–­ÛuX~9dwQ^wD™²_–Çt­»l”¿m_…Uh‹_ƒŸv²º” ¾Yo‡MoŠVŠ“p§ÌŸÌ‡–±_’R{‹C„T…„U|™Ul_z’Vu†Ln‚RoV€•W]rC[rH’¨^“·aw—[kŠOÓûsÈYœ«~£É[ƒœkÆõe¸Ûgºøs•Ë›¾i’ÆR”®kƒªb}šR~ ^†žbk‘XZtJd„k¨_†žAkŒMz˜O­S€•G…™lž¹^‚—Uy¥”»Ì ›Y§xPjˆ@_l?z^RŠuSœ—_¼©‡ÓÇ ÄÃzܵ®¨t¢¶¦¶ÐÄãÿ¶ÜÿœÎíüñÍÿÿÁíÔ”¸¯‰ÃÁ˜ÎÛŒ™´‚•·˜¹Û´ñïµÔ¶w•±o·vޝz·qœ¸r¸Èƒ½ÐU}™`Œ´q¦¹`z˜W¢n’Ÿg‘›h’g’¸v¢Åv—ǤՖ¦Å“£ÂtŸXf—[jŒTm’c~¦`ˆ­vx¢hv¡h†¯oˆ©\„£Yp˜t€²¨ÔxžÅZx“N{•Vz™]„e{¥^vQbAe}Ou˜Xn‹RnSg…TmOgkXbeNUnG]uFogEfv5c|Ok}Pl}Kp…Ov~PtvAe…UZ{Z?rBHUDIW+g\-wv8eŠFYŽ`YwI]d<\j2cn:Z}>`vIfq9mr:u:\‡KduTapKwqBЉA{–TjšdxT|žal›`P‡`DmZEdCcf …}&i¥=bqzsVF„‘d¡”s|”_h“_{zI‰”Yt•`u‰d|ŽS’›Sï¢_ÿ¯jÿªmÿwmÿr-ŒO?„”K’¥fy†SzwLpPuvJ‹G«‹`‡°qqž•v{€¤‘Y”À„™”ƒ“¦`’£jœœr—Q™¥W¢b[„VntIWy9MjRQ_1YR1we<y>§ÁZ Å™ÂzeŽdlkH~u9ž~Bº«pyÏj†¤‘ˆ›n”’g…«K~›_t…\~™Q‡ŽJV¤xutY—•Z³Y…šqs•[y…sŒ‘E|[|Œd“žNz¶dzŠ[{‚;•_°c²œLµÖLêÕˆ¨úÛº†ÿvv¥|n©H[FUvIRy7V{A|q(ˆˆ@}šPs‘N–@ƒµ{—¢•­Ëw̾cꀌ±Nšžl©©e©µiÍ̆¯ßˆÊƉªÞ˜–Ïwª¸eÇÄQgÖ³‹…Q—­mrºpW“]rvG{’P|‚Rn‘Ky{Irœf^€[ca:{Ž,j‘R}˜^d‰huy8Í‹>ÂûkTЩmjRja‚,wŸ_Ca³Q_yCh‡Y’|DŽˆb¦›jGŠdu´_u™EXu>Yy2Jw.FeKc%qj)€*d~=€xX” {—Çi›¨l†·y–’E»Ô„ÛŒ„œXhƒbšM¾s¡‹¢¥Wd˜SYy/C_/nN$»Æ@b±<ˆ'ˆ¾8q°aamD~~RdxLƒšD|m\u¢:…›ar’‹ŒŒN¹Y‹«v~©Z¢¬~£Ý–{¤\q<p‹HsL‡„7\œtbo;}ŽDRvcl9iw.qp?†–St~ŒŠ¿eˆ†aƒ|EŸ|6†™Vc‘g}j@„°z‡–^¥¼aj£}z‹DvžSzn;ЦO|—Opš=gz8m†3sŠ3Xi@|ŸI†—D|ŠEk¥\gz0z•?›¶U†©„–{™®Sk‹L·¥Wm•V?kŠPr‹T€ E¤Êt®É¢x¤de—<•u3ÔÿtY¿Gme9’¿†bšuŒQ…¤G¡ElC~2ÊÓd…ΕoŠH’¾o¼^y™>¦R„¥cl‚di‘\w‘G—œj}¦d¢šdŸ¸‚—¯¨¨‹xˆj€ŽJ̽p±ÆWk‹A£‡W¥µo†‹_sF¥ž›®·—}ªf›±£—²l·hq‘O‹ªƒtœ[vªj{˜IЦ]eTu’D©a€¶HÌê‹“ÆpЬg±Òq‡¦j”±Y‰P˜j¥v€¥Oi‡i—¥P~£Hq‘G‰œjx—Vˆ¡S®šF¯FiN®nž³\|³:azNŠ¢u°ÈžÀ€b†<b~DpŒFkŒ\Œ¢xkŠfžIr™M›ªp‡®nu‘qÀ欴Þs¨½b©Îf¨Uj„Clz=k…G¡¬X‘±[u¢PcŽAarG„“Y‹±‹¶i¢Yt™‘ÆðІ»t•ªp¯q†ŸeªÊ­Ó—–– ½£·|¾žÅ뻕Âe »]‹ÃaЏušÁ_©ÎBf‡[Œ´^œ«\½ÕcÀpŒ£s€”J~ƒ]††^s„Cc\ª…®¾x¨ÀSˆ¦G‚¢HopKn_TŽ›j¹¤µ´Ñ–¨ÊqsšRb‡hж„¿ª­Ö—˜¦ŠÆ©¨ÀÔ­ÔÕƒ¡´o~ª}¿u|¤c˜§x¿ÅŸªÐН”~£•j‡£|œ·u„¨†ÀÕ‚¨Â¥Ê|«´wµÏ‡µÜoŒ¨Yty³Åy±¸t–µk’´m‹«aˆ¹{›¿ƒ¼|‡´gk…C[Š\v¡`~šYm“iŒ²k„ªc€¥VqŽSkŽT~ŒXy‹k‹³ˆ­Ô}’¾j”³Ov˜[x—ak™^z£^y™NoKlŽW|œTtŒOwŠMi…Tm‘YXS;[[1`o>ewEdmHqt@m‡PeƒUdwKjySduO‚kOrŽUKdEhTEW<JW*^^+~v.–EoŸ[k{]v„L]‰COpP`kAZnCUsEbn=no4]y@azHinGgpFxzF’„Kc{¦fb—bXz\]VGnPIfBnb1~$T Lqq]WDaoQx}GWi”bq‹j—‡Q­^~£j…ŸZyª\€¡cü˜eÿ•^ÿŠMÿyuÿm0—T>€˜CpªciŒ\gSk‹>^zMao8‡oQy‡WsŠd^”ZlvNz€B„‡dw•g‰‡Z›V~ªSžr­Ÿf\ÃeY€ev`/cjFo\3d~+€vCžœF€Âo•Ÿƒ‰¶‡ri~Ck…>Ð{:Þ醟ñ–‚Ä i¡{l|g™wRu²k•‰c‘½bk _H‰XSk;ˆw5l¥XYŒfe^Pi|A€EˆœN~£eQˆ]^t;\q6]a*rbHfžX’zPºy…­˜©‚†¬Ž³ƒŠ›m…®zs¢^~—`{­^n¨Px‚;…x<~Oy†;G‚XkaB–m9 ¾nÿ¥Š…ízrŸjj‰O¤„8¥°b¡§oŹxêćñÿ­Çÿ£˜õ|Lª…ƒwRwMŒ‡Xq¤}¡˜]Ÿ¿F Ì|eœazˆO¥´;M¬[;j7od&~†ELzXms:tŽ8x£0Ÿ©@xÁœ[ŠwNb?{x ‚ˆVh—e•¤aR¥šRe=rk>~”R¿°BÆÒƒŒê†x~‚pªqbtj]{[Fp9rc#€ª$f˜:†-x„<‰=k€<||GÙµ\„Û`€¢hˆ£[ÅÍttÚ‚|Io¸j–Kt¶z‰R„-gªHrp8¤¥>èèWïÿÓrÅioˆ:–s€•OÈÌSâr…Fª–Ys³dp‹M’c‚£SvžcŽ­}†yr|Ȇˆ‡RÄi§jN@kt8ŠY¼?VPj>_r4[k5cs?hkKk‚BŽJg•B|zJk~9–Kº¹ºˆÆƒœ¨ZŸÂrp•H–ŒWm}Z|y<€E~›@»“g½å|»°e°õe…¬Sn…M|€C~¬M›Éeµ­ˆ~Ø]fˆO^tDczB_|Fk…J…ŽP€—p‘ÏUh‰Pr>ƒa¤lclFb„Oz€^† Q…\vt[…°hv¤…^|4œ¿Ch¥qu‚I‹³[e™lOv:_rHvˆK•¥«…žsµ¿R©ánšÅ€^Šb~™UjKo‹OXr@oŠM¬]f„E‡‘G¢œjœ°~§·L¡¤Uˆ«^‘|•ª‡…”cš¹— uƒž^ŽN~šYšZd‚Dstt¡º{‘²Ty¤Jr–X•JXŽ^t€aª¾|Úv‘¬v‡°xz—’£”x©WnŽHo˜m¤¤…¿×h‚™Zš¥Y“»dœ]€Uo…`Ž©Rx—Hm’Y¢¼oÇP…ƒSh€g}’e×çŒÛÿklœPy—d’¦ƒÆ–‡¨zg‹R_ƒDsˆJ²Éb{¡K]‰4x‰L‚ `”°da…SuŽP}u…©j§ªt‡œrz˜q]z@q‡Ex Ul’W„ _~°ky–i¸Z‡§_·jz¨VdŽZlœ^ƒ¦rŽ®V|žLdSl”k™Å„©Ðx‘±\—Ãfƒ¢qªÈÓÿËUޝ‰Ñõ ¦ã°Øš­Þuy˜OµÒt¤Íˆ½à–šÇUo{J}{QЇO‘©o­×p«vˆ­yŒ°’«Ùƒ§Éd£Ìd”¿T›¬hž¹”Œ»y~¢‰±–€£yЬWy¡T~˜lz¥l¨p¥Åjš°yœ²Œ¢»‰ »`všPi™_y j¹¶›¬… Î~¢£o©[œ™d–¼sް“©ÐŸÐï®ÊᎵڶÒ}Œ¸n ¿Ž»Øš¸Üƒ¥Èu¶[„­`~´wšÃ§Ð§Ïcp•G^…OqœhššUy v«Éq »av§]ušEtV~¤SgŽq³x™»o‡ªl†ª[~˜Sn’fs›nŠ»p‰®]~¢d†œh—±e†Y~OjWw”oSV*Tb/Vg9bkCcqEbxJllMZ†MZzTwrVmJuX|’K[›iGxbJ`?QZ3fd/ty9j|AZƒ]jgU`~E]€MWkN`o>So:SjA\f7nj0by9_O_nP`q@mxBv{>p“V\ŒfW{jQvZUwTjqNRFcsEUu0GdLZ[MHx@qhJƒŒ>ˆ•Vlšk|„is–N{“]†h V›cwµfÿ\ÿ…Hÿq0ÿVÿk7¯Q;’¨?{°}j™m_†Sf†<lŒ2[l8|h7…‘A‡’Ym¦`ƒŠewAw‡L~„T¥‹Qž¬Kªh–“i•¼gf³p„op‰<[sF„dCY“N†|bg§Ehˆ“„L€´bª˜^mµGn‹c»3ºçy”î³~¼£b©|€G¥“Iiºowu–Xk‚fb‘H^‰@†v2s˜_‚ŠL†}A‹I”ŒW“µt€¯l^e—~7z½Ou›YYŽ7\t?Gs0ChDXW3…^>n˜^‡P£PpžY§„^«ÌfÁׇxÛ“Y­Ofy4©•K.¦‡2@@\O%tu4hAg;ž‹nžÊa˜š]•ˆGk KŽUÀ³Q´ÄŸÅÔÑüÃd±ˆZvt§‚5‰¿sV¤_‚n<Y–i/`SLU>use•²V‡³^_›†W†jE|h[n9Z}#Z‡@h€3^›0[t0m|SoqHrŽ:’€AiŠP~ŠFc—OPyB\l0VnP~yEýÎRÖÿœ›ô¸H¥f@WCeZ<ev1jo<Pw0jŸ.crRw~3ptZr‡Kr\F}|2“‹EfŒ n~P‡M—¬kd¢u[d/]n/­™I|×x‰˜HÎÅy†ÃˆÞ¾UÆÓn¹ê ­Ü§y¶‚?¥p¹Ýxh¸›n…[­p•¼zp½x_{5 u/vªHw«’f’xz:…’lp™l˜–cºÒ_ÇKÊå]¸ìp~²® U` Fd^,h]G³wE«Éyk‡D“ŽSl[‡U––\š²`…‡AsIwwV–“iˆ_U}/Vq4xf.{–nŽ©Mˆ‘šŒª€_ŒHu€X‰ŠIÈÊj…Øgs†Kxz{»Ø~šÈ…€”Vs–Nf :†—E—µGqUpxE‹Ë‰‡‰>¥ˆ?”©Y|ŒP’I‚”1“§:„£d¬Ãx]–It‡I«´NšÅV|—ˆ’ŸaŸØi~ÒkX5]n1es3Ck/qucƒ©g‚™b±ÆnŸÍl”9w…QpƒGt};‡—?“IŽ¥]¥³Dœ›bž®lŽ\m‰= Ÿ_„œ[‹™P€•R¿vŒ›^§¼y¥OŽ´P¤ªo“¯h~žLtŒJžºb¥¼Œ³du¦Q„©hž<p—E¦OElAv~E‡¢]žÌS‚¥Hh“Xn…]tšKzd¨¨»ÙcŽ©\‰«qˆnU†ŽY®aƒžc¥ÄbÍä°ÿÿÜËÔ~ˆ£F~šJ¥¢µÜ»‰®Qn˜RfVfe“Nˆ¢Y€¤PŠŸe¾Ê•r›Rdu†~©Æˆ™Åb}™@sHhŽYޏc‡Ÿa“ª^Iw’Em‰Y¬]w›RobiŒbqŽPx–kˆ¥}³Ì¨¸Øy£ÇSl¨Kpœbµß¥žÇ\[xI†¤‰Âã¶·Ñ{Œ²f–Æs£Š”Áž¦Ü­»Êis•ki˜p”¹ŸËﱻ⎻ãrÂæ¤Ã쟜ĉ©h‚›P‰ˆqºÙyœÍ{zn‘›[xŒjЧ º›œÅyµÖÿŒŠ³d”w’³†¢Å†¤^VsZ`yk…©ht¢TeUr™f¥ƒ Âcf‚RdtXkxVq‘EcŽO{¢tÛÒt w¿w˜½q¢ºo·¸d¡¾j’°׵³ãÅÈñŒÓ”Óÿ¦µážÂ}‘­~…©Ž§Ô‹¸qt•\g[y¦|›¹~™¸€žÁh{šT…©d‘±k‘ªWs•g‚¥k~¨sšÁ{™ÆaŒ£nžËg£^mŠdr—c•`{—`i…MdXu“o~¡nxše…hr›v’¸r“±d˜TqˆZ}”lhr6Xg9ga=mk6dxEdvV~fO}ˆBq˜V–{VwŽKl|dd}VdvYUySTnFol8g7s~RZ|MPuWiV@^z9kqIel=Ln;Te<]e8Zx6oo6]Ž?S€Vfa?rl;i@€uA_œQm{^bQl{SL|_`e]Ty5OvRQj1Ka6e\9{{5wJlŽX…[…§Zœ™wrÄdy“q›”Xˆ±WŠ¡lz£dÿ‹cÿƒ@ÿj(ÿu4ÿl;ÉY6“£Ap¥‘a‰pqrO}•B†œMy~E‡}F˜DrƒQ‰€P~’S£U‚œ^†ŒY¤L}£h†pšžekÀyt~i¬ˆBj‘QbYMZr8Vj8kqDŸ…=à³n´ÄdжmŽ—x³¦]ŸÂy¹dºq”¢} £uÀž»Yiœpj^¶ŽOw›E‚’bbŸDj†W“x4•K¢¡bÄÂj©¹f¦œb”šn‚¢_]°h€Nq‰B_”|^…8ƒ=p½IKt>UT„b)í—E^êuqzb­ŽEóÄxÇÿ‡Úõš›í™‘¹u{§UX¢Q:kis^n“1˜…<“«Wª¡iœ§Vœ›f–¦Jošeˆ’SˆŸ>wœ]nX˜‹I×Ö—ú’¥°ot»f¨ŽY…éŸiŒXt~C˜{:zÐ<”­Sb¸Lh‡RMˆ7ab*^ˆXcxV}ˆ:‘š>˜³‚†¼”b”lMxIdY1f\9ˆ—Cn¨EDo˜LgŸCZy1Œs9›šgÿÞy¶ÿúi²¦d‚sm-Ds+”`>–³}}‡=p¤^€„<lzA˜†?v—r¾£Q‘¿hƒ{fP›Plm/‰E€ Z{‹j^h^lL=¢Ÿi¥êƒ¼°yÅÕ’¯â¦£³oDŸ‰qo&p i‹›Mt¤Ow~j³Ts©FxžGW|Tu.Œª?rIdz_œlM–ÎVzu,peUŽŸBx¡AdtPxw>z`²È£ŸÏ£ÒÒ‚Üéâ÷”ÎþZÐßX’ÿ™®Aª¨W£ _ÿÿqÃÿ¦¦¦}´›QÌÐ]„{k¦‹U~¦Gav1D|2LR gq-ˆ”=’™E|¸Xi6sC•¦?ŠªYˆ’€—›T‹¯R~¨otS†¡\œÂt‚ª[qBWxUjvP„xA„ªd¢¥Q{²`¸¤]‰¹O¤ŒQŽ›J¥£¿`žm_pR{S·amŒ@o—>”h¿ç¬zň¡?›ÀLlƒ/ÂØa—Ðgƒ·tSwC‘‡ƒ²p]‘J“Œk™©PžG‚…WƒTºÃ`¨³}Öe“iO¡°Q°l°kÏ_§¤nz´i—°_Œ¾|‡£G ²rÄ×…s²ZpšUf‰[xˆ€}ƒg–Y­ož›f¨èJxF€‰Q|“V‰§M~‹i„œf{RŠ¢IkayvQ›i®Ë‚”ܰcy®Mhy_x›]”°]˜£mÅu¹Þ”޽‚›¾±“£Œ±·y`‚XSrB…”dœ´}w”eh˜Dj‘a~“n|¬a|žX’¬b¼‰±ÍMª5šNšºk›Å^w¢?XyDr–rvŸz VƒšPrV€¨I_xY€”Tª„›¶o¦NœÆo¨Ia†GgXp™SKlnqmt“Zj†‘´ÐŠi•B\v^“¨³Ûÿ€v¡Psªj›Ã‡ÿÿ¬—ÅU_oP_v=eˆILlgy–~¨Í£Íšw«›«}¨ÀZœnŸ§`š®‡¬Ê–ƒ´esŽMu‰W–¢NoSl‰cp‹v•»‰ª–®²nrŒf~Ÿv‰³o¯pµÙ^|¥O‹µzŽÄX`‹Qz›Tw¡[¤c†·Iw•O}˜NjšSsQo‘c€¢nz‘Xw¦nˆ®p¢Ç~·Ém¤œmµÄ“¬Ï¤ºç®±É Éñ²Ñõ°©Å…œ½|аb‚°‰¨ØŒ¡Ìf“¯[}žOgŠbsŠgy—lºeuc}§j“¸ržTs™Rf•S^Œp‚§‡¤q޳µß|˜Ã[t™Y|]n‡Se‡Qk”Dp‘TwŽ`uˆXr’`†š\~žo Àx¦Æh–ŸXy‰X€™mdM[sM_lM]l=KsKTdTs[?Ž}6p’c~Šq_ŠX^z_RnFpjMrCq€Ov‰Oq‡QoŽc[t]Pz`\Y?as>opHcw9UzMcdLxq6jŠ?}{Qa•OS„cwZ9k=lzTp}LUŒK_kRY‚BKv\WfKvhRV;\xXc€6|}4}‹?t”K_–Yer[}xP€‘Dš‘tÅ~„¡‹–œ`vºbp”x€yMÿ{Xÿ‚?ÿf$ÿo+ÿj2á[8š…7š™}Žš]ŒžR–°c£Z‹W|–J€œ\›QŠ”T~ˆG‡ŠX“S” ^}Æ~˜‰~˜]¡¡Zœ½€¡§€”¬S‰g…Xš€P„“UY–”Nž¬u±°s¦°|¦‚x„Q„ˆ_± i¤Èyz¡g¦—_ŠÎeŒ®†R¢{v;ŽŸ/ž‘I€ÀopªTy“J˜“D´ŸR¢±^‚¢s—‰_|Ÿd~žm†™\ˆ²„b¸r_…3‹‡:€Å4¡¢[eÀoc~\|h*fg;ht:B€vZaDSqG]vM`ZG€oA_…ReJmtTUŒ[ym<m£?c€]xp:݈>áëKží}—s†PoƒD …@Êdtžy‘ŒH¦Ì^™¾‹›¦‚¶€«¤nà×Yÿÿ}·ÿÏÇxp¬E¹·Tí„b¡UuyDn”RT‰<”ƒ(„Ç;£„]i´s‘’v¨³™^§gV]@O9tl&|~h{Ÿsf\j‘?^HaEkŒ-]j6BdWgiR\¨)¶˜2¥ô–c„yŒ<‚ŽIw@ƒ¥`dˆPj‚;Y€8f]m›•}w¯nlƒQ_~R…‡4é|<²¿k¶Ë}X¶s\aNˆ‘Z‹…E”¾_‘¿‡VzsyoœÂÄ’>¿yB^ ^o7c€AYy={0¤·~q½µ”}<ÁÊ2tÉ1§‚¥Å½ €{F­Iª¦{›{CáXœÍ†gn‰ob>ž|[ ª€¥ž†kmÀ~‹“™|•_Tz‡–f…~UµW£°pªàj¡±}p¬`©^¼¥i¼Î}‹¼p|O‡c†Š?w}CšF´½fµÿ`‚¯Bu¥Qi~0ŰX…‚Zš¨^i_Dxˆcˆ¢rT”gfs9¨ÆqfJX‰NOl9]ƒ0Uw:ee1sŒX‘^^\8]T½Ò‡À¤g«¶Uƒ¢RŒ•NlœpX{3Œ„8„µg}ŠOb„Yt‚5s‚Ry_p|P‡Ÿv—M‚v^ƒNuil‚8v£Fo‹cƒ™[¾ÕP¨O¤¢mÃçt®ßg²Ò~}®TŽ{~—™l‹®Jª¬z—atW‹®|…«‚]€‘v~¯a®gˆžm¦¯mvŽKŒ7©·7j–8Um2t„DtInZXrOšž±¹Ò¯ÜY…¦e|”jl~Y‡šq—¯]s›K~ŒBf~>“³‚rcÃÜ}¥¹{s§Tv¤UyŽV}˜bÀnw¤{ožu„–UªV¥¯pÈë_ÎPLo?“ y¸Öst¬[Op*rw[¹Öa£ØYh­fcl~ nŽhe„Nt_x•hs—Xg|V~•K{›pz \ryZm`h{>ezK‚–aŠ­`£»n™ÀkÄÖ r¦J^‹@UvGaƒIN|0B]2e{R}™a›Ë‹«Ûpƒ«T¥Ó˜ìÿ¯¡ÌW›¶i®­èûõÈíkuš5p‹Gt‹Gb‚Co’Yo’{‚¨•¨eŠ­…¤½m«ft¥c~•jvkhŒ[i‰]­bi›e]wScƒLczjœ´‘¬Ò~“³Vn–Wh‡VY~\bˆfa‚uƒµqŠ·~„¥eŠYy¨f~¦Mfžfбbs£SZ€X‰¶jp–GbPn”[r•Uh”t¨q}¦{’§c‚ˆo¯†Œ®¨Å•¾Ãª¬Ð°¿è‚޹€¤Ô¥×{£ÍˆŸÌ£©Ì†¡¿r‡®MhŠOs„To‘m¶nŒ¯mœÂpx§_s‘Up›Ux¡Vpe€™a˜e€©ƒ–¿x“Áw¥²j™R€‡Lp’O}¡Y‹¤R…_x†Tt˜f~—c„«o—µr™¿kФZw—^„¢niuS[~TUoGVfCPnEXhDna5…}8|‹Ng™jW‡g\jVhmH†tF{™Ps•ohŽfi‰[_‚jTl[SnR^eC„h3s‰Eh}MW‚PXkJif:^}CTƒ`QoFqwK{<W©O^shoqGkxBbMe‡N_qRk_Aa|<W{KlgZZ„9^sCho?fvYjƒSnQg…Ed€Jt}Rj’X|Š|†¥df¹d\‰iŒk=ÿt:ÿy:ÿl$ÿp+ÿm6ÿb/e1¼e§¼d†Åo–¯†š·g‡²vf›g~b“™V{²q|’Z„Ž`ƒœR™’Z„½—Š“ ˆX¹¬U‘Õwo¹„„ˆZˆ˜nv¬w™bš™S¬»ksÑrˆŽz¢Yzžk]–i\€SZFjwQ{˜R„YͰg’æo…²f¬cg™Az‰+”EŽÆyhªxqƒQ|”L‰ŽP˜‡J‘¨g´¬R’¹Y™¸n´t•·Œš¸ˆ€ÆhwšWm™Nn‚ij_x‹di”SO|@Dn,HV1I[)LU1~b$a/Hj6fj%…“-ŸOœ«h^Ã=y†Ds˜HxTR’Xvev¿‘c¯¹]Õׄµÿ†‚½tv¦e”FmžPz˜Tv–xc‚c›|S—Ätq¢‰“ žf²¯V“o€t-šªS‘²¦z¯Œ¨•8 ÚZ…²~|¡_k}fK¥n‘o¿Y®•´ŸIxÆsJdGrt(|…[lƒ@lA‹}:j‡?VŠ]Fg,Ês µÿblÀwv£O—oP©VTS5]kF]t2[uVUD‹q;–Sr‘I‚H’˜tÖšW¬¼nƒÇy¥…F¤¶wz¡€j„{¸ªA†Ÿ`w«PjŒk£G}¾3‡Ž# °MF§tBUob/`Œ6bhPŒ™Z¬ŠuŸˆØ¨Q俨ué™xb3âv[m±têÉ_¯Ob{‰sæ‡Abr=wh4“oM|Plq3x‡5}9~sV•³<¸²G³þTŒßJáÊw¹å»’¹ª˜–qaL{oMàÁZ±ÿU´Y¡Ûmq†I®§dÈžvÙó•¦ßd{˜J’šf{‹[‡—P‚‹7p: “:äœi…¹Sy­6h€PYx3}fWtVel4kS`“7br.Ro7ky3cRƒˆJ¿âgæÿ€¶Ë’¸Ði¡©U’±WµžXa¢PzkF~_”™kXLj{?wFv›LV‰4fr7jwGoƒPoŠKiŠ+YwCq›RQ}G†‹]`Š:]|Mlz>z•m…¢…¾Á–¼Ü—‚s¨ÀTÁÍ“ÏX¨µU‰¯WyœLŒ³kiI‰Nx N‹µ[‘¹c–ÊG®½‚‰µO‚£W_}”Li|<¢­‚s›Uj”<e„K|–Mw™c{€[¯SwŸVr‚Q¤´h¬bžµllƒF•ªm’¯sƒ”_ª´‹¤Æv‚³t~•u޲]s¢Io¡egŒP]‡Mn†c_~iƒ{a’Ä…–º}m—n©µx•¯‹’Qˆ¬L„¦Y´{¾ášµÓcy–G™§_jJs¡Dz›Dr˜H™`|ŠO~LƒXr~C_wLkA`oFdxFz‘`g]›±“¶çŠŠ°qkL¢¸r¶ÎWi›LXŠE`‹=kzH“ŽZ—±…š½t¤…—§¶Ò÷´ÙÿŽËòª¼Ü”•‰£^„©Hq Oe’DUq=T}AUxIZw]j…n€¥‡v¥yyžciˆhƒ—V`€I£Wq^k‘`f’Hs“Rt¢VЦf¥³ŽÄêœÄòx›=Da9KdG]zLlˆZl’mli`{W`zFPgT]}Xr”Vrš[¦W{¨mŒ«w–¬\sŽG[€Y|’Jy¨o’Æk‰²e…¥Xc|KWbQc{l“²ˆ®¿}¥Ì™±×ªÓ†¹Õ“±Ê¡¨Â€ªµ“­¼‡ŸÁ”»e‹¨a˜±o‰©l{œls—lf–^oši…µc‰§W|£i§o‰›n‚œl‚¥fv¥g}©y‡©Wy’W|]nŒXr–]z”Z}†Sp‡VxŒ[x‰Vr•dŠªoºv’»d~«cv–`VmLZrSZlKSi>TmDmjDip7ŠuE~†Nah^€dLtJh]7{u7~™g† ‚m¦}\’qZ{]ojO`…I{wQŠ|>p—SpsWY…SdcITt<IlD]bEvr@‰‘=s¨LLžlPab[n<oh8r‰LZQa\KZ`2_i3^ZC\UATo9ViA_e7kCyƒF†ˆMx•Qs Pp‰Kj‰FxzJ}–Rw¡UpˆVš{Cÿv8ÿv9ÿl#ÿy/ÿs6ÿb5X-‡—S‹”^Ÿ°t‹º|Ÿ­kh²ˆG‹{Z_JŠj@…›cx›q‚ˆcrS~_s™{‰‚w¡šOž­T¤º‹˜¿–†¨tq£fp‘r‰O”¡k¡»{±Ë¼Öuzçwk‰rp‡R_…LPz@^\>ux5êŠ?ÌÿŠÕ★Út“o–œAsÄRP“nehYM†KgrQ{Š7‹f€œZ§rr‘l“’n¬ÄkœÅj•®mw¦ƒo“zi–e“5µ¤MÑpœ§r Z•U§9¶¶W|¿Qa“Nny:sxQ†1…ŸE¤‹dËU‘Ÿ‡Äv‡¿gyLŸv3·Éi·ZÊËcµï¢±Þ€xØ©X“cWwEVs4XuCƒ1¼§U™ÒZg¶F…ƒP«§{ŒÍOpžs~£:„¡EôÆGÔàv¹À¿ài|䘅W`¢t‡rCv“NX…Hnb9“‰AŒ¸bžd‚•œž?…žEe‘PKi?lj1x3w•Jˆ˜C^¨HzT(Ü»xЬƒžCa±HC^‡BU$pU,›=yW=†ŽS­¢:§Ì]lÈ[F^’OmXÆ´hÓŽXdKq?KSGps3ruDŸ´w~«eŸ´]´ëŠ»Ç”Äü™Àð–ôDF‹6mj&g›Lm›:v<‡”m_‰_s‡*{ŸnÈ>¶át©xÎÓ²Ýz̼;ÿ·`ÚáÚÍËbÇ´Km¯…µ•Aÿÿwäÿ¯ÝöŒ·Ö‡¿½€›Ý›’К·¦•·wWzcn‰A9W:R&Xf'ˆj™®»p {„Žv™_u¢n›CÒç—~œiUo;‡ƒ`‰‘f”ªk°Å`‰Ô?V{SVg9zE`yier>u‹H[sKcu?qu8v–LvœUq€6p‹InmXi?qnE“Ž|£ËÕw¶Æ…¢í]{‘RŸruSž4ޏDŒ¼¤Ávަk}›Onƒ@œŽ[­ÏpxÀpo{Gm†Pg‡Ad{8–]d•onY|‹jM^j>X‚9r‹B…¯qv™X¬¥TÎÌ˩ʱ Ï‡|˜K‹¾nv©RzžbaCl>jNošfx–xލ”¿~ƒ£y}š{c‹O€–l‰^‰OŽ»XŽÅ`f„B”²Rm–@ˆ›[—Ç`^~Pf}F¤^Œ¨m”´ej€;’©Sª«G§µQz˜c©w¢¯ny«a•[­Ý„p§STwAs•Q„U„¤:•ºWvxŒ›€k“[‚¥fq‰B~–eÐïŒÁÿd•ÉSŒ°bazai}\—¨i†´Vr‰hïßžÿÿ¡¬ÕLieA\kB~L‡ˆJ‹ŒMVwBšªXœËQ|”Nž®aÇu‰¬yh™GVt<kŠ…Œ«Žg–vIq?v™W‡¸Fc”U¥Î„Þÿ‰¶ég‚•]†›™§¸”ލrvŽ`ˆ¬g¯Ü_²éz”Ø]c‹D}¥QÎÿ}¯ÜUvžBnLw–f‡¡p{ŽLmk—¬r²ÎyÚù}¢ÔQ{¥e–²u¡Ã„“Äp…ªi†º|¥ÑŽ‚·ah;`€@jŽ7ZzMaƒ_z”dg„N[yEdtHXu9^€BWyCa‹\x h˜eqgz˜WdEx—Uz­cƒ¾ˆŸÃrŒ¦i€¦W{Ž;nz:v‚\†­n}—hƒ¡z™±nšÂ‹Ÿ¼w¶zyŒs˜mq“gx¡ce‰_p›w­}z fn‘ZgˆRp”Zr inšvx ^nny§n|jz˜as’b|¥^{›kŽ®V}–Tn’Xq“g¡amŽQg‚OmŠZ}ŽSm„OkŒ^ud{¤zžÈlš¾Y{£T`nPŒqRp|D^‚UWwRqrDl>~H|‹Of’md{hDvDQ\<nf2z…O‚‘l\e‰yxrQ‹’JxµSifY‚SLyQN`CJhGNR;9`<H[EnY:„…?x¢\q–r[‰iooY^ˆ>fnG_zLJkHSXAhb(iq:xp3g|DauFlu;‰‘A¶St¦k„‡[†ŽS|©ap–bk‹Pi}BuzFƒ‚Dx”VÒŽYÿIÿj0ÿo$ÿ€.ÿ†>ÿh=³P1r§O‹[„¥Mn–zra_…hC_:YEjQ3v>j¦ks™o~‘S{‘Vm‰W‹•M£¶PnÄpoŒtv†P‰‘b{¶\h”jŠxP„šc¥Ÿfþêœ`̺‚{ggšSO€^h>¨Œ6‰ÖZ§±jÝx¾«gµ‚f²µTÕ˜g°‘‚@¼X‚¬_v£[Š”Oš°Te»m‚}\¦•=’¦v‘©mzŸr|—^m—UouFjC‘>x¦{w«imR¢|M¯©]»¹pxÛ™Nwrbc5¤ˆ8ξ9¶¡X]³[€ˆcï«K€ðru‹†q–IÍ9Êï|”Ö®›p´´”¡Ö’«Ï†~µ?˜M]V0o2^6|cCº¤JªÄ–c´f‘l;¼¤c«Ò‡‰½„„“\Yªb’qG¥¨d›­‰x²‹™Z_±HD“”ci–\YkLˆ{<i–JÔ‹K ïn¦Øq½Žc‹§]Z¤¥G¬Èdªmu†`…yk]™SŠoNS¤{<hNPH.oi7;^MjB-|•OÿG’òt okŒÆ—at~{.gŠ2‹š/‚°tw¥sl‹P@|S-U%aD!cqUœvN…»`³…N¢ëǬ¯…Ć‚o{¤™X‰…‘)‘æZE„pkf%{Ž8ÍDY±Vzq+¬q¿ÊŽ‹¦`ÚÞ§øÛšÿÿæÿå˜ÿÞœ›Ÿ}¯Âƒª¢`»°9ÿÿ¿Åÿ³Æ»„˜åli˜i†}\ƶP©ã¤±Úœ‚¯jnŸlIj1Op(†2~œYœ¨‚q²_}K²L€žNk¥J{ˆ`| RZ‰Ltˆ9pChqi¢‡s}ÝwO|F_i,S‡Aw1f¤Sf_)ezI]…GiZ'u’P…‡Up‹9‹œMlŸ9|ŽJ{‰A©¹Jˆ zazBµ¹×ÿÅd™}…ŽB‚œT”£rŸò`Ž—Y«Ç”sœY„™w¡³K¹\„}wƯ’¤áZNT_afZɼ`²ë‡g§H_nPiihmxT]w=v‹A®¹t¨c‹Œ\j~`a‚™sa{Hx›Tx˜K`¡\Yj5|‘Fp›[o”K€•]Œ§]†®Bp°@u†Pi~AhBo‹<}”W|“Y¸l[†6{Dš>Š¢T˜«€ƒša›šK–ºªaš¼x‘™ht¸Ve„LlGj…Pk€QhNW?^tKj‘~`ŒD[wLnŽgª¢œ¯•u«S}”R†ŸiªÂÛœªP—¥Z¥Ç©èñÉùÿ ¾Z˜erŽAŒ’p¡Äcš`ÇмÇç¾¼¾wÈ®Z•IuT|‹Vn†ERr2iy}¨Èƒ¡Èc‹¨h‰¦ˆupoœHp‹En‹[p”T‹Nr›V‹°ŒÙÿ¡Áÿ„žÐ¸Ïþµ¢Ï„°×Œ²\xœd§Áy¤ÍuÌâ½âú¬»Í”¡Èv‘Äj¡Ø¡ÔÿÀ}¬k¢Sg•9Or9Io5Rr4M†dz ˆ±°©È¦´äŒ}—x·Îq˜ap—fx¢Xy¥}¥Æ‚™º[‚¨e‰©‚‹®}q’cg‹`r™Rg†Pb†FYrS•`‹´by G_zRkŽUaSj…Qw•bx£Vo¨cw¦ht¦}•Ìir‘ZfJbSt‰NmŠZ~¡f…™NhƒSa^m”€¥ºg|’UjYy–JfŠOo™^‚®[~²dq›\g‰Ob€HY„LbŽ__ŒTe\lXl’e‰±s‰®cw‘[v—Xl–`s”_j’Zp”Pp“\pq‡œd‰›GZƒWtœ_oŽVb|Ma~L`xUcƒr|¦v³džHeySvxM{~I\ˆggl^leDwmDŠxC€…MNˆqPn\HfJ@d?O\5\a4u_Gp…]`ˆlƒxUƒžQz³i[—{gl^^|HK{JGbJD^.Kd<[i8fh6vK^”Y`uoYqMclIZ€@\rWPrAFl>PZ.V^%mn4z:_May_io9‰…Go—]\†loZ‚{EŽžTl—_o{TpŽJr~K{r?‹ŠIÿ—aÿ†Xÿm,ÿmÿ€*ÿ’XÿzX¸P3|}E‚N–FpšnuqWZ€MDnWXaAhn4‚}<}ex¨og™iˆ‰^|ŽEuœLd—VS|awrZt€3y‰M[žWNv_ggBgM]“_“zb¯wh»¢]‰j~9f¦_’}?ž§F”¶¸…©·~‹Å€Š¯s³Q›´o»™f³¡T›Åƒ}Õ‘€®„ŒœbX“œ`†˜Z‘£J¦Žl‘³_­£gÔÙk†çuV—NŒi6·¢H«ç™ŠÏ¢ YwŸE—}D»»^£å zŇ‘ŒPñ¬C¶ü¸Ä’xÕsoœO€~Gq„|™’>~—bŒ|Xs¬Xy¦…’W‰“oy§a˜b‰ªvL‘nic5—ƒ3‡EXl<q`5¤P›¨r¤–c£³]l¦qp•K‘E³®[‹Â€¹¬nШ{Žò|¥{Ž¢fz”Ey£;˜G”²I¡ K’¨:}®H””e–©r©¥•‚ɈŒ¥H­˜]…œw€¼yêœD‡Û€‹ºC L˜·IŽt3ÖÜ9q®o‡o3Øã1˜ùE«³A„ΈŸ´M¹hºÃ¢ŸÄl¥muqjc‰Kko]ž†dÿ¾lÒÿ¯iÇ€w>{r=cœP——<a·ŽŒ…`P”R]UˆzG ¯lQ‚ŠWaTWj5tgFTTJpTPî¸}Òÿ½¼ù}‹“U¯Oç¿~ÚôµØÿ¹»¾¶³¤ÌŠ°Ñ™”ëmíÄŒ±ÿȲ¾­¨Êsˆ×tls<}š/²¶dÌÌ ¦ðºoŸŒ£’Jƒ§[|OsŒX€Hµòc[ªEvl3½Ëq—µgd_i‹GQ~&yj/²µbs·m}{>}±^Ç“€rÉcWj7†lšÇc‹Fs|Kf“A‹¤VL¨Òm‰Ãm‚f£¼|j•‰šœm˜«r¾Õ~§ëi´¹A•Ýu¥b‹iƒ•Z€“nyfx‚€¿ _¬ë€»Ås¾Ó¡¼Ï›š¼_t›[lvVެ[§T¤8rƒ2¥›“ÃèѬçlнI¬_›Åy¤º]x©h´wg|E¾kñÕl¢«k†[j„9{˜O‘«Xg¥Gh‚=wœM_ŠKg…En„I…O¬¹q¢àY€»;{”:‚•Rx‘5‘±[l©Uk‹Sc:\{?wBs™I‰¦d˜Ëkq‡avˆEš¶`¦ÒkеRv¥JhxQs“`hEd‚X[wCOm5Wr?žem§;Py9`zOp_o‡RŠ f™¤v‡¬mž¡_¡¶_™[„™]… d²ÊªÍòºšÈ[–T^ƒ;v}f¢q‚¤C‰˜s›ªl¬o–©YŒQ™˜f ³i‚¦RtQÃÝzÑæÃÛŸÐÿrЏ`ˆ¯Sj•]kKZv=žTz\‚¡c…”f°ˆ¯Îqš´vž‰n”b~w›Ð^ Ätª×йЫבÎð›çÿŽ¡Ã‘œ¸·–}¬gu£B WpŸAu®4d‘7p‹@o”\f‚eyžˆ‚ |l†VXyV r—µb¾ãkd–JU€MbŽh‚t›·t{¥]c„`u”c{§hs™OX}LY~Lm~DYvYVl[V{LLkC[zEV{DZ{Od~]mŠe{’\ Ra‰k™·oiƒL]~CY}Id‰Kh‡]~ wŒ­[}˜MpŽRj]t}Mo†R”¬e‹ªVœl›Ä½ßr}ªc{›Sx‘_yœ]v©k™Âkƒ¥OZzASwCZ…h…©t‚ŽX^ƒPh“Uw§pµ´Tv”\}‘Xo~Xo…eavŽFY~Qw™b{•UmƒJgyI_tDVvb|¢q€®q†«RwwJdyPelMohJewMloEgyEhvEljMIiZJdUL]28f4CO<?T2ZF3je/W~T{kW‰D{µmj›xzrTp‡@‚`xŽ^mœSf’R[PYlD[nIipI_eJVl?Xo;]p;SzFOnHPb4Te-QZ+Vi,kq<oˆQZƒTmsDmuA]kHUfRh^@su/‚‰Lt—Qw„Xs•P~V…‹H°QÿÉnÿ¡bÿk*ÿm ÿ%ÿ˜[ÿˆfÿVA~G.}~:–“Wd¶xpqkg„?ƒEh‹KpU|…Hj–YV‰ea~Z|†Gx¤KT‹W`WPdj2j}7„z=y‘N•T~ [n‡Tu€TSŒZjh@{Œ:fŸƒ…„|‚›P£WfšVx‰M…ž[Ž›V„©h‚œw‚—l_ži†MŒª^„¿{®b”¼s‚³˜œ¤”‘Ÿh»£X¤äd£Çw´µq‡šm]°©\Ýà‡€ÿ´Y¥ˆj‹D•…>i«gŽh¸¢f¡Ê‰zÎcfšx©€¶¿‹g¦e‰@|]•©™¸fuªŒtRMsJzb:^‚F‚†E|›ZÅ‹T‡µaf¦[]€Qtt9„›=˜š_}d¥‡HnMwm7^b+„W#¨¶^§ÏZw‘f\‚ae€4bQ«f“Å‚¿[’¹qa¨ŒƒzNsÃKiŒaz’FŸªI¹ªl®¦eÞÐ_Ïô‹§¿§¿q²ÐzÊ›Œ£W¹«Y‰·ƒ‚¸o ©d¤¼™€Èq„ŒDqtMuˆHžy¢©È«u»Ø™ÿð¼Öÿ²·ÿ˜“¿op…p€]ÃÈU›ºŠÜ¿SÖÿÊÅò…ÒœBšû¯>q–_]?€c?b¦L[~=asBg•EqmCj¼2MLJªTˆ}Y\Ã6šx)–šF™ŠB‘¸?™ @³¥xÒÛ¥Ìÿ½ÃÖ»Ù·lÍþ‹pÉ„a]¹¨…ý…l¥Z¬¶^‹¡‚¿æqs‘{™WÕ°‚ö¡¿ÆQ‘ç‹q¢Pzƒm®œiª»WÁälˆÀgv’B£¥C²ãY½†KuV†`'†Õk`£<Xm0‘}KÆÏN ¾^cŽDeqcŠ˜TŒ–u}‰1‹ztu1“’9¤³q²ÅM›JršX†¢U–Vl«˜`j_lrOmySi¤NzYqžEy°JiN‹£9S‹Xrƒ<\wMcx8m‹A|Z¼¹`ÐýˉÑp”pŒzŒœY‡¯^|¬Ÿ¤TÂjr‘H‚¢K^ŽFxV¯Ë•²æÀ¶Óˉ¸z«är†“nŽºX¡Ò…bˆ7«ŽYƒ¤QƒŸ]x¥Uˆ–I¥½pzÀ[}Ÿb¯Ã’˜Ì²Pi¦6V|3_wE|†Q‰¬v{¨r…ŒW¿ce†LmƒDg‡o…´Zl–MaA€¯Vpª[n‹Z—«ˆw›WiˆHj‚EftIe„e¼]оqz¢Rd‡Xd…H\…=Rp:Kg4]vZa™<`€7nŽOœ›Q““Y^}DjyPŒ–¨³£ºvU¢¡\Éá…Ïß Ûü•¨É†§Ík’§]}Ÿjo†Yk‚E‡¢P´¨TÔº¨®QŒªV•ŸY~œIœ½mˆ¹fJpS‡ŒrÓçÀìÿÑ¢¹ˆzŸUQu?W€=Xw4y—qœÒcx«^zž`Œ¶uƒ¯o†£]¹sfl™Œäþ­àÿ™œÊYV[_ƒ{…¡”À똟ºcs˜Ty™L\‡Iy£KkZœ¿–«Ì‹”»JXo@]`;[mGŠ•Jn BeŽJj‹Pu“bl—ŠÛòŽŸÓZšÅ\‡¸d–Á‚·ß‹²É]Фc‚žZ¯t}«Ul‹Fb€ZŽš`nKg€I\wIc€GkƒMy–Z‡²Oo“P`‘DOpGbb@ThRy•owˆ9YxGq U¤JgƒVs™pz«j­b…«cw“Qq‹Kx c‹¸t­e”¤ˆ—éºè’š·dw”T|’boe{¨|µu~œNlQ€£Mcƒf…§]kƒGcŠNqR}¢¯®r…’mt”P`vT]z`k†Yd@RxWZˆX`ƒ^l•^t™HrŽAZ[|§m‰¨t£Ts„GO}NhkU‹nAcE]sRYqGNoQEcKIW>M]:G]/?\.>R:=J.WK(Kj2PhJldM‚n=j—[^‘wcuWowH‹ƒT}¦`r¬uidY„]UgLPbCTZ8Wa5gi7p;o†P^“VRvPKa=Og,gd+\w.dnH~~@f˜Gd†WWmCT^<^k3ol0Y5j}Mx}@h–dwP§}P–ºOœ´ÿ¹qÿ›cÿe&ÿlÿ|(ÿžPÿ„nÿYH¤=#xx-z{L}“ncœ“D‡¬_j¨gz“js’[bgWmUvmC¥?œËow’dv†LsEo•P’ŒRƒ¢T“¥eŒ®bušyP•\woPÄ’4xâjW¢w\sd||Ly¨Va¢^uŠ\M“QqvT{ŒWe©^_€Kc†MœŒK‚¿G§q‰¯d}¯t{—o‚˜{—‘[°¿cˆé°‘¯¥^‘ºyŸ©qœ¿n‘œªˆÊÇzªÒgÊÌruÈvc‘Rp‡F˜‡`Ь•w¬h›M„Oo‡_J~C[b3^f8ÍpP£Ö˜œ]˜­b«¡E Ox~P†…a‡“R©‹V}…Jo_ng#}Ž:—–bqQª‰G©c‚‹O …QºÊLh­‘¢xkŽ„m|<nt?HzE…T,†|Xƒ‹UH|VZbAt”)^…ap„5j„Hi…H“€;ž¹S½•w¬½šÊu¯¸a„Ès‡©uu¡eŠžV~‡h’g ³s¯•oœ{{zQ†Fc©9S…1pl!ˆ•[d¦b§šK¨Û±ŒÇ©¶ÉZ‰¸ZŒ¯>i²bog]——XŸ¹¨¦˜¿þ䀿ÿ¼ ÷YØÛny¼wer_[„E¶˜0sÃb‹yjF{wJ'r”6Zb-‹‚=“µKˆ®QUqcÁq6‘žf’F‰–’—µ¡®Ê®¯¾}Å̰Õÿ¥‘Ë_·¥\€Ð~… Mƒ¿|²¨7…¿‹`’O`†-¨¹,}Ø ’†˜zϱ›NpÄiyqX™°¢z ­y~yž[ T«°†ªÅΗ˜H´¯Q˜Î€[u__fTw}<ˆŽT†šbµ¤g˜Ôª‚‚”@q[GnxB•`D§”Z¬¡v¦ß‹„¬ov•C„£ax\w•Sm‰Jk‡<yŠM©£ˆx›Xu¡]ËÁŠf<~ŽXY‚?Vt6}{=‘Æ[bŒA‘?Àꬥ¿¨›Û™zšcs‰2‰“g}œ}—k”voi‹‡dŠœRj‘=ˆ‰@˜¬Š†´‘›­[¢Æn¶ô®¾m“eš³gÍÿiºä}ka“±ƒy£p™–[‰¯}g‹CitCd‰]wnX€RXqH_~?b„>r„L]mWŽ’k†Ã~ZV9aw:o]Hf0_jLm‘JšMo‰Q€ÀTr™Or‘_ƒ¡H|Mxƒ@xŽEi‚Ix™O}‘Zµd–”dÁV\ŒAW~<Mo/Vr0\|DZEx•Tn‚@iF€£Iœ¾_“­wz¨zŒ´„•Ã\­°sÆÓ„–Á|´ÆŸ–±s¥´‚„“a°«z¬Û[Œ‘J’¥r¹ºcŠ–p£µy…¤k®½u“v§¾ƒ¦´y´ÝH~ž_˜ª »„ªO_~P`}6_}3dŠ6e—\¼˜µëvz¶Zj‰zÃâ|™ºg|¯i[„R±Ö¨Æé˜¥Õ°Ç£ÉíiÁ݇«ß„…·w½Öž»v“Àn¤Òn­Íw´ÜsŸÀq€¨‚Œ®o¯ÎW|BkŠM«l½Ðir£KRwF{“`“ªm©Ó«Ìë—³Õ”Ñꂾˆ¾Ô¶ÿÿ›¦ºi¢q³jd…JY…Ng‹Ux‹[f}R`q>VgFc~b{”Pl‚[y›uvœjuŠEks<`d2NoBaƒcrŽA\|Vsšiž²YrRz”`Šmš±z‰©Ws•SwSlše|¨y‹´p…–sƒ¢žÈ¥¤¼_r‘az–Yt”]thw•cdŒXpf ^h”Zm\q’KfKnˆWtŽu•¢iw‡_wšTo“Mf…^l’Xy˜Kl‹GoŒYw”b…¦r–´`ƒRm”g‡°j†¤dp”SzHu\€”fx•]m‚`[{aJpLDeI7TG=M>GK,:Z)=J1;U2MQ1[U*Dq4HVEKV5dP*^p<P€UFlXMY7c]:`…Fp}fqƒUZ}SScIM^;Z^=fb;xq@m‰Dr‹Ya‹aTxULbFVh6]s*Hg:E]EV_8[y8v|SnŽLm†UkˆJoxCTEayQ]y=WƒK_iB¦k?z­J‰¢ÿ€bÿtNÿm"ÿmÿ{,ÿ Tÿ‰iÿtLÿ_*ÿf,kc?‚IŒ–M‡ˆYx›kŒŠl’¦cˆ¨{—¡‚bŽbtwLƒE‘¤zŒ s•¦h~¯tuœc‚Pšb„¤^i¨lYtcNmN¬j;Ï»<oñ´@‡œqSEœ5z¾Se™l}Bw˜Di“ZyErš\€”R€œS€®gj«Hi{`‰MA~lReOzg<…Lv˜cm•e}v[v—Eƒ_‡ ccÂQ–_jwV²›Q†Ôy†Ÿ|•˜a‚º_h˜HypI™‡AvÃeS’j_iF³t-xSyŒ;y=³}Tޝt£‰t®°o©«u—°f¨©^©·_z©T‘}B–Oq“T Œ<yÌCsŒbnLŒG†¸Zo…\•zAo‹Zi\@ƒu?ˆ•L˜¡L–§X™ÁFˆƒA’N«¢Ld…V’z.u¥ScŠ;„DkGŒu:”ÁS{Z”…O’RÀv’Àovžlx•Y‚ŒGŒJU`…s7e’GNf=h2 3džXZ€LF‡;k^"¼œJÌì…Ñù”ÎøŒžØ…P”nvZCyˆWyƒhSƒ›Ap•Z„†b žz{•ŽvœŠ[hc€?Ч_Ùÿà÷°¤ì¥¹QÓãYÞÿŒ“úÒ‚tj¸G¢»W‡½e™n:¦ÇI®‘Kйd²Ég†º^–¼oÿ•‡ÿÿí«ëåt·~{¥a¬ÅbÆÔ[Ñÿª¹ÞÉ®Ëkx¡X›¥[©Ç¹Z ‰Kt+‹–fOzAn„<|”>t›}¶Åz³¹:×ê„~Æe€€K€uGŽN€B”®ˆ¯¾|“Àh–šj—¹V‰†L~‡fuuRÅzf‚¢rwƒ;‡oR³ Xœ£X°¡V—Ë“²u¦¼W®ÿWg}Gw™p’{fƒ…NÑÿhšÈ”мQ°k­Å`§ÁLp¾Oj7i†?~–JyVh–BmvFœ²²u‡Zw…uz†PŸ´W—Ñ_–C ŸC—JŠ™Uk…8fŽY]q'£Tn“<ŽP‡’ZÊð}„ϣʟn‰NºÎ¦âÖmzhmœ]“¥Q‹ÉS™m†µt}“Yw‘[«d‘Âup˜g\tLYt5cwS‚ˆH´Õ=sºlYpBhŒ>[w8lyYW„8\‚?Tv8m}L^~Qp}qmQ‘ cjTv•U}ŸIz­El†L„¦Y{ŽV°\“¬g}ªma}D]{@Xv2r}Bw›DгW«Án…¤L…ŒF—¬‰–¦s|¨Xg’OŽšdšµn„¤j~¨Oi›i®~o˜hšXl—P·Æ†ª×f€™g…œ}©ªwšs‡¡ox™W€•Xu˜^›«V}§W—^[{NQq@WuFmKMr6;W2AX;i}Lg‡Q[†v‡§{UxMi}iƒŸpbSSu;s•h–Á‘…Žnœi¤y¨Æ’Ñý˜Îé«ýÿ¦»ÿkr“}¾Ý¦°Ý•f‹cr…h‰®h˜¼X‘Àz¿õ¶Í˜Ìñv‡¸xz¯]k›Fm˜>\ŠETwAiˆpŒ·sƒ°ƒ}¥|‚hv }§Æ‰¡·`s˜sŒ§_Q€8RxHjXapKVfCZjCNf:H[S{Vh|Dk†Q\‚OcŠIq–RvAqƒLk‡[hŒLm…RŒ_jŠUiˆIk…W‡ gy“bw›[s•Yv˜Qq’Y¹nŽ­dv“\|™q¬Œ‘¶^ c£Tj“^u™er—Xq˜Yx—Yt©l³Zi‰QmO`…DaƒGdy\m‡Zj‰Uq’i•¬`‰—Zjf|”[z‰N\u[fˆ[gƒrxžo} g{•fy¡hw“V€“Ey˜L‰Ž^|žhZ™qreghqOQzRY`J@_;?P=KK.A[*BZ:>R/:T*=J'/F-<96OA)aPng.`|FUrK]^>Yf5SlAscNg|APpMMbA]\6gj;lr9u€Gk}SS†fLjWU]BW\7Ts:Zn9GZ4FR5ƒT.n‹- qM†¬FZ¥pcU{zHx’Ed™_^ƒRUyHRZ4qd*Zv9‡ylÿhFÿt8ÿf!ÿqÿƒ+ÿNÿˆhÿmJÿY0ÿQ)›H5ŽœBœ^’ŒPzœk´QŠÏom¤®‡ztoVq‰RJˆSioX¿{OÉãu“ò p©‚„‹c‘—O·œ]ˆf”bFf?]L/Æy5h÷r‘…¤“EŽÈN–·kÑ|cŽZ`ƒEWˆP[rEpvAtŽ?—=‚·csŸVH“dea8b’>D‹AFi$Gd,GaNie$i;g}Fy‚?{—V„–eq®tk•Ij€Eo’Qe‹S“’IŒ³pŠ¿Z{½^l²Rr|]|J™ªN¨®_†‘Qs~Le@°ˆPÆœc‡µ£ŠPŽ j‹«l´}a‰c‘m`¦x@¡¥L¹œ_¾Ùsƒè†‘YX•S‰vN¤©dcÃ|€}K™¯k»°lÒÙ`ÂÝ•´†¢·z­œ–å `“¶wÑ•€­¼‚©“c°b™ªpªÒRs¸iwP­‡^œ½uˆ¤d’“IŒµcz®fVm¨dŸ‰=c}U|pBRd„h–t4t´A·†0\´{Vo3jg0j–+zU𬙂°¢³{{u¨zH~FAllW)ĉ@Ïb…¦E{¯duˆ2–i¨–W»ÍŽÈüzˆÔpµºU·Ù‡Åៗôž¹ÑcºÓ›Æù¸½«¿Ôƒ¾Ìƒ°ó¥†¦ZÁ±uÝÿ¼Ÿôˆ®²”¹ÓxtÁ ]Žbir:®–>¶é¥¢ÌM˜­`áw›Æ–~‹‚ÝÒ€«á¨}¼š¸½N–핎[‰Ær8˜ßMàÍdÙúžÜÿz£ÿ}­mºÌ•’»K›»TÑËsÒÿv—Îq•²w­›l³Á‘¾¦KÆÑcº™Y‰”H‡vIÖwQf‚s{zHÆ„J¢Çnê|—釘¡N’Ä^\…CdoVr{]a™BgLÎrjŠZ¤¥]„Äql’=o`f—KˆMk”W¬›hã_g‘O€‰Fn=oˆ;}¢R”¯iq s†—yªqš§b½\sSn—CyŒ5t¤Jf•1Jk*vvAc†+uBy¥”Qi5}’8£Q©­‡a¨7\z*eŠ:¬­zt©\ƒ“OŒÈbGVFdgGs€¹qQ8Od+Zn/}”LŽ¡J|¡fo…L’²KWz:^u9oNh€EfN{œJuT\3an?w—Kj„O~ŒWw¥Uq‰Su²M_8›±jv”H|žPr™[| Z„¬if’<f‚D€§Fr¤W„«Mr’aÃ覣Áa‹±XfŽEf†A]ˆB¢¶he€Pby=X|>v¢hvPm˜Y‘®”¶aŸœ¤€±c¥°_œµZ¯Ún{ŸV³`g•KpšOa…\ˆ’o’¯[Lm-Wr7?m&J`.bŠH_x1Zs-Iu*Us:Z‰7Ie:f„U6Q3k{Tr–f‚’gŠ©Z½j…¯\‹®Uƒ¨Z§Îdm˜h·Î˜¼“ÚöÝÿÿ¯Ýÿœ¸áz™Liœ@~œf¹ßt‚¾x±Ý®Ãç‡x £Ë“¡¾©ÎvŸÁpµˆž¾im–X¨kpŸVyžTmœFf–Yˆ®ršÅtž»b{œj|¨_‡¡Si‰DPl@az8Tf6\nG|—Ba~=UiGrƒNw‘[‰›b”±¡Âp VVxGj†P`‡U|‰`oˆNf„MbDd†\p—cqUlŒ[p”[mQpŽ`r•e€¡hަo¯iŠªzœÈvžÃgj”Rf^t—jz™_r’akŽc‚±o„¨XgXu—WqœSvžHZ€JZQhƒMg…b~¢gŒ¯Yy]jŠYcBSzHb’Ynšby–m|›_b€Tf‹\s–YmˆOj}Ny}`]‘]I„ja]_`g8LuIf]OFf;BXFMU;CZ-F[BPX31a83I))=#;1]=pb%Y‡6aqRnnKmEmyBWzSg[Ilp:g~VXxT]^9zo9qCn–hdiYvXQoS[c=Oi3?lEGYEHM1LU3[^.ch$blPinDh’_‡‚Wˆ O{£XwžkušfW‰RPp?Zj+\f.‹g?ÿm6ÿq3ÿcÿhÿz'ÿ›Sÿ‹nÿiJÿK+ÿ>%«M(‰—U•j®Yz˜l’ySs²h\‘—™fOš¹Q}³d€‘hh•Z¾rP¸Âh–è¹u´˜’gްY§µu‰Æ‡s¬iGŒfyW3»-•ノ¸‰m¶x©[þÁfÏÿ·Çÿ˜ŸØwc«db‚G…4ˆ¢G‰®lžªm~¬YQ‘jvxGq˜Da¬OT‡H‹y-€©C†§>Y®K]pLvz2­¦T“ÂTÁ®P°äukÐytˆbŒ˜Hy²a~¡{†œU‰mv¥eo[v–6¦Ei¡T‘~`õEçÓž¸râ{iˆÔœpragQugLˆA¬ƒR¦ƒL¤O™ŒCuwažŒI¢¾rr̈iŽOsŒA“ŸGwšjg‰aŸ–O¸š‚´rˆ¢Wn‘edmT—8¬xt‚©w¹†a‘ªde•YskBÍvSƒÉ~x}oyŒC|vS š\–Ä‹k¥x™‚n“¡j_ˆA„|J™ŠKhwTm…>~–FB|Nll>p]d›=nd<jiC_wDDbHÄŒ?Üò²§ûä‡Íd…V„µY|p;ž¯KÎÏG–÷À˜´{®¯“•ü Éžeµÿ€îÛmÈÿÌ` ²¯ŠDÑô”ßÿÄâ¬j¢Xp’8t‹e€A®†k©Ú‚ ë–©K³|×›µ¤ÿ¤}ž|ˆw­iq‰•Yzƒq–Pƒ‚^‰®b†©SF‰U‹qBc•pNc>…ujy¥‹éÏqwѺ̛Uéü¤Ãÿµ³É¦Âݵ¬ä‰Øú¢ƒê­x{@rÁPkDt„S” ¥£«±“ȰòÒ˜ÄüŒ¡ŒLàœžÆ¨w¥BÆ–`®]༃¶Ä\»ƒxÐí‘Æ¬~Á¨ˆ}§ky‚L‚“cz‡T“šU^©@vrL•¦n}•H’†Vs…^yƒe^y4€9…“R…¤c„>Ž¥T`x=ª®kx™€hŽJb}4zN„ydŽL ‹Ujfs›MÈ£¶ŸÒf¨Ä|­ãbŒ¹gnYÂöLz¹A‹˜NƒŸOz¬<‹€Yš´™›µs“¤rwªS_‘8l„\j‘GW‚<hw@Ÿreh1|š:^tBvˆ_„£m¾Vj™?€šVÎioBFhŠP^o1jBy‰aƒ‹LfHXrFk†CcŒB¦¯UÈe‡¦ctžWXŠ6dt?ržF}ŸPxˆP‡žZ]}M—lÀižÈvºXl‚SŸÀ…°×‚™ÍppžU—»…˜X{’]y¤Jm˜B°ºwh–bcyAc|Mf‡Pn˜RkŸNc‘\ernu‹Z†¦OYƒ7c}M~™dvt©b˜ÃvªÙ^t®]®i{šMd{Qo¥/Rn@pŽIRf3n…]y¢KlCa‡E…°d~¶H`7Sy13F'Sg^r‡Ks‘Oj–Sx¤csX„¦_œ¸i“º\gb™±Ž¹v¦–Ñõ˱ÛgU…°d¨Ún´x† ky£^ޱ‹¾Ôo†¦[pSm–f|¦uz²jŒ²kгj¬Vi–Mj™IbˆHkK©d Æœ±Ú•¶``~Os¡eˆªY}§UsŸ_¨^mzAczPgWiŒKi}Hc€Qr—Wa…^…›x‰©^u™Wl‘HaGi’Wwš[oŽXrŠToˆPi‚Qe‡\sŠN_ƒWkŒP\uHY{F]xJYxT[|SazY_ˆoy¬ŽšÂhtšUp”^o_h’Tc]q˜fžnw aq—iw—Xu•`z©Td†Oz–Vk„Rp‘Y|—kŽ´X‹”Qk‚O`‚Jh`‚©s‘­d~Yc}ITrK_|QeƒEYxDckCpkBZ…JA‚[F`JHa8EbGX^HD\8:VGKS8HZ6QV8_]6Cl?>S>BJ&TI'yZ!†‡9cŸXYxdahEb€Bn{Pa~OcjPomGq‡YlŠ^vtS|‰Rm^i‡y`xglxUm…QtƒJN…M?nO>\BFO-KQ/e`1[i+hi7mf9„‡9‹£N–]|¬hƒšmŠœcm¨gZ\Lx@ZW5¼o/ÿ4ÿn.ÿa#ÿpÿ|(ÿŸSÿ…jÿaEÿD"íN$k*€ˆNƒU—¡]±rŽ”c`žOsj^°E{Ès–ˆo”o\|k‡hOw“Fp¡…p”eŒƒW|®o”¦sj¯||‰cfbˆ„OšµO|¼yk£lsƒh‡ƒHÕ¥MçØ©Àÿ»{ôÁv¤o~˜]ƒŸ?“£XŒ¿rp¥f…–h‡’I¦[k¶fyšU“ ]y©[›™_íÌV‹ÿmª{ª7‹Év¸µgÑÓy¨÷·”ÏŸˆÇ€§Xƒ®€ºx­§U¦Áum¨yp [oˆ:aQ|Œkq—l—¡L ­|©œ·blÀ~z{~Z|Cvr<“ˆOÿ‡FèÇ}{´Šl|PMr5RV?n[Aizi}tC Zf¥F|~KžDv¨mw“W}˜X~§Y`‹T†Œ+u LzXa„G•Yl|^„a6†‰?Ù kÄÏr¢”g‡Ÿa¤Œ^¤°ƒ¦Î±¦¹“¬ S‹¶VœK®šHµÀk€Î›~MUqO\tGl…LVo6_v%qa)¼›C…¨†zˆVvŠSœŠB‡È½Š}D®¹X±À\Úpb¢;šlT†Às¶R{·{¦‹Vÿù­èÿãâÿê‡Ù§‹©Y¨¥~¬ñ¸›ÐáÑyžôÁ¹¾mPA°i/¹ñŠ¡¿r¿¾€Äà[öÿ¬ ó½‰šctˆY‚”S~mz°E€|S¯³Y–â]¤×W}“F‡®=l…Wl0mž9~?Îì…sª…°ŒbèáÀ°ÿÓµ¨™À놧Չ€Ê_b‹Ry0£¬q¹Õg{×Tu}5±ÔY•ÔuÀÎŽË©­‡{ÖÁ|ΕfÿÅ{Ìÿ³ØÏiŸÿêQnQ‚l2À—‚±¡qÌ­nº­q®¡ÑǾŸV¬·Vš8‡>{H‡ƒa˜D¡ƒS|€CwŠJy†\”‹[s¡u…—Mg‘Tcv8o€Ev‰Ds‰Lb{/w€2~¦=q‰G°—Q“¿l• mv¯\Á¹Ä·Û˜ÒÔ”Übœ¦h¥á‡»y‚¢W´ `Åþ® °]«Ô~„t’¤ck Ky™[by1oš@g*cs>”†]•Ìg¥³“„«aVy8]p@`kB€‡X–¿e‡¬Wo‘Bb†JW_6{J…‹@¡”Mm‚F`nPqlJn™UUx;w‡qŽ¥eu¥Ju”NRq;Zp=YxEkzStŸGl‘Md~Ea‹Ocw?r“kn‚J”½i¡Åt„¤S Dq–F‹•]kŒ=w…I`tHXjFWpPNk5`wV‚–O°V‘º}’Àoq‘ROk)`};¦Ù_€·<q–CiƒR–UyžXr›c³ÖŽ™ÌrŒ­Y”®f³\k^Ob2XhFq}?q˜WŽ®’ ÄnqˆOz…fš«qužSa{7Rs<„¦Q¡A{“gÒé„¢Ñck‰Bx¦d’Åm~©Wn…Tœª|aƒTcŒZ›¹‡„±e£½o§É¢Ê…”²]‚¡Jf†Eo‘…³ÄŒœLp…O]…D|˜aŠ´zˆ²hfNtŒ[”°ViAPy@p†JfŠb‹®}¤nu’VhŒRq”f“»e‹¾h‰Ànw¤QTlDZ€ZŠ dš­h©Âf‘¨m˜´s…­]‹žkx‘Lj‘Oc‡Eh„DZMkO_„F]oUiySfxCYxLi‚LbŒZjŒH_{D\I[…DTr;Oh7Kk>SyUq—w™¹m{œ_u f¤Yp‘OnŽYr’_mŠekfq“ep”hos­cv™js˜\u–Vt–cŠŸv–·a‹ Z‚ Ru—u“¿}‘¸r£_~‘Mkz?f}>^wI`z<UvDRo<Zc;Yp<HsJF^O@]8ET<GT1>X09Q8CN1DR%ZT4h\2Ym@MiGW`<fb4{s<t‘JkŽ^ZrgarE_x<dtJv{Dg€SinOuqBn†SuqU\Œ[[yogoevpS{‚Oy‘]mŒ\U‚_FrPGc=cW.ef,fk@ct8seC{w;w–Eš“[ªhw°{Œfn”Vމmm–ZIŽa_a?äf2ÿŒ@ÿk<ÿeÿg ÿz'ÿ¤Wÿ†oÿ\Bæ>#‡Nc{9j|Bh~@‡xOƒ†V’ai–Z{eX‚@r‘gŠ}nŽ”W‹šd¯P—±^›¸wŒ¼aˆ¬Zj±p†œo†±lˆ·mm½m†‹a˜ÅNlÅzZ“w“yIw»DVo€hY™’u}­…j‘m…>p›B„W„Ÿ€ššOv·poP‰†I„žg•KjŸiN|PPdF£s/™Î|Ñ›m©TiŒRu”:…lŸ°•¡ÈŠ‚Ý—y~xžXŽ‚«Â[›ºrÀÑbˆÙ‡i–ZyŠJ…©Yª¶bƒË†¢V®­O‘¾¤~¥p{…¤ŸI•Ógv°m–NÈ^ƒœ†zoiuqUCV0TH`h#Qf3_jMp|Qiq2‡ˆ.Q±tcvAuŒ&U`bnGg~:}‹I 9fˆjx}RutKwJfƒAz^7b}3|hXˆ‚Z_l^\P§»I‚Ã…„’z‹¨vr|ZŠ{Yw¸^uZu†Z¦Ž;œžiaˆWi}/qo8kª@Šs-™½R†Çri‹?ˆz@^”lkHžž?‡£[ª¦lÏs~´i{©JL‡lbn]qtIœU¦Ã€öÿŠ|ÿ¬cjvw…R y@¾«Í•]Ñô™ˆÚ ~i¡±S»‚=‘Žz«žE¦åm¾³oÂÁ€¢øˆ‹°\aœ<u;}ŸcÆ­gº÷bÐꂳö±½Ï¶{™\}Ž^†˜_„›}œ¾U Ða×oz•Kµ°]Ýâ“¥ÿŽÓT¼Úœˆ t›§ZŒŸG”¾Q]ªI_eJr|Dz–Sã_¢×{£xhˆF_q2g…H’J‚²q’•„—¶\[•bw{5–˜O§¦q¯¬WÊÿo…†NÓÆh䯍š¼t®œe¢˜h“‡Vy‹P€eª¨Y–ru—Z¥“[¯ºbgyK\{;t†J‚‹Og‘GqŽCW‚<]n;gŒCv‹fŽš[ЦZsvV®f§·Q–pgŒIlC~—:Š­q€ˆ‘·„q—dc“[d–À²y}}¢vŽ–8p«RhŽgWqO\†1]xLdƒ7^|6}‘E£©x“‘X{Ÿ`\y6jo>‚yE„}Wb‰[‘wƒl«3Zt3Yu({Rm{Kk‹Ex[˜VŠ bu¢Jh–AW~7q‚L~£Xf‰KZ<Tj7Wz2mŽ>t’`hKc“;],Xr?X|?XlJUtHOf3F\8j€Mtš?k„HMl2b{<em5]r5€ªC…ÀJ†ºEºis‰–®‚v`‰™`j’:\„<‡xªÔŸÄ[iRж_}¬Tn€@¦f¦¾ºÕÿ‹t_u—P_y4aƒ:ƒ•`ªØk‡¨„lU_„NoPYy>…Œw¸PuœZz¦ox¤}nŽOp™c|•v˜²ny£]°‹”ÉzaWsˆV}˜iy›Y¯]†³Yoši¢mv‘ez¡UcˆWtŽMw{Nx]¸À}•ºNqŠFk‰Kiax¤q“ÇlqžN k{¢^c„@lŠM‡§P…ž`r•eœSeM]„Kc‚\‚˜z¨Äu•­h“¬TxMv’k˜±}‚šp„¯upšio‰mhˆWc‰P`}<[Af‹E`x=ZpFb|He…Ef~=UnEYtA\wLg‘Vj‹O_}OlŒWoKdƒCUu:Kf=UtBX{L[‚dadv“Wl”m­[nŽOlQ]HVuL^P]‚]fŽf{£u‘ªo€žknpƒžap•kp˜{žp}¡ftšiƒ«‚Á‹ Áu‹–YvNhxRuŒNt‰K_xNmzJTd1P_1Nf3@i;:V=?V2HQ3>]6?S/IP/MN.K['Jd6X`9ZoBbcLxgEcq=_sJlrIiy[fxTs}H~{Do‰Nq{NVqPgRIZf<YhHmW?fŠLQ‹c\sV…iDsŽEj“oR}]PnU[gCUw?ff:Zq2YsBVc>f`Ez6s–XxŠ[„šhSmnu`vy<•ƒU£Usªw‡`ÿyHÿˆCÿe2ÿg!ÿk"ÿ~*ÿšOÿ{qÿM9ÿ9e4_c.yl;f >iyOoj:zzDh’SWtLpx<sŽJ•Y”ŽTkža~ic¦`©ÕvåÍŠÚÿqÿÃwy{¡b˜«e”Ë{²µm½émoàžr qt¡>\š^R„e(uBo?"g9M…]‰{@s­Ci›^z€Ml•Se—xdPg€Bc{Ir|1I}H;k4Ia!bogˆS©¤UwÑr„¥g]ªGr‘O„Œa¯¬cyÍ‹Zlj€Sˆ=‹½a”¶}—®^[´}uAŽžVv¯{MŽgsbNsxG¡ž[n§kzGƒ}jš¥\Œ¢†­´… Ñ]ÿxyçš‘|YvƒVZ|]oj9rt2`‰9qo(™‡6Ÿ¨RÖ¾Q‘Ö‚‡“m_›XhMŠC®¤Bu«b±’[z’S™‚:œšX†¡h«ÄU‹žrkhNsXÝÅFh¾}W^:^GG—z|Q®g€a5›ŠK}ŸOu›ZˆV¦‰g™Ñb¥«ir§i ŒBv«V§ŽK’·Yy™i”§usŸraƒA®”C«ÒTŒ¶†Z„D[VJ¡¤F“¯v¾szBY‹C|j+«ÇKŠÒ‚´¦›¿ø»¼Ô‹Á¶P—ˆPÙŸ|½ÒeÃÄÊÿ’¨˜g´¶ŒÀÐkŽÎcÊ‹S–¤n§Ág«¡[{YI“Mxu;œAT BŠe6ͯª™ûÌvžf•‰]cYn‡Hœ”<|¾X€“U²§wŠÎ|«zÛ¹‚ÇÙ°½ÿâ¬Ê†¦À°¡Ÿyÿð›ÿó ¾ÿŽ´ß›{¤oh‡K†K‘¹’€›{k‰<y–IR1J`7Œ‰D¦¸e›§z¨­w£ÑyÃÓsÇÿËÏs±ÿ€ŒÖ£€~eåÞ…Ïÿy›§_š©]wTì£_‚ŸT—O˜ m®Â‹¤­W¿ŸW°¾iµÎPˆ’Q©Áj­ªi‚Êuv HpŒ:r˜6oˆUP¡–ml•Wci=}†Bš¢‡sžL›~u pYs;†Œtk’<m~JpšPuJs€DjX€F_E`k;lwN•ÍYk©*dz:b‚6ty4¢W„SË»¨álc”Mi…9y›Kq—E—V[€1ds1q†;z™I†“I™M[p4jq:n|Bˆ‹NŽÆfW†7vŸEP€9enJfxIm~I„¦]vœTvœCs¥B\‹;k{Mа`e¡8Ps4t‹Qwª~¯je¢>fz:gP† {¯Us–6{žBq|L¦h‘¯Ž‹Àz¶~†²xp‘x™afƒZ‹©jmž?Zs;m‡Dp‡LkQj„G^€T\wEnƒO²n“Ë‹§Ú²³ÇwЬOw™T‚ªg›Á~™Ä|v©Vw¡Ol©Hs¦Ux­=e‰ROxAV}R{©fŒ¿eiŽPwGl’Vu’[­×t¤Õ‚´Øv…¡Q¢³g¡ºb›½|Ê눱Øo~¶m–²i„ \Y®À[˜®T›¥NuƒN~Šf‹¡drœV|œX}¥l{®j}©qˆ·l}°gt¤k—¾X€«V’_ˆ ^†²kœ´du—Oa7V|@]v]’œh}œV|•^‰Ÿdp–[l›QZyTz™`n‹PhNl‘Xˆ¯cŽ£Ga~IjR‡ƒ<I`8[kH‚“\™£\xR~še‘­`“¬afƒDRhJ]~Rd‚SjˆMmŠE`xD`|CYyDVqHRuIcVm—g‚—a—Rn’HWyD[{BTwHU{O^|\w˜ku¡tz”aq“h‚’aqŠaigsŸfw’`kˆes—n£i„­jOcJgUt”RlŽDc‰MjŠHUd6gX3Ry4LkC@\=CS1GS0QT1DR1AR3NQ1[X'Zj=YlFhk?YlBo\?‚pCn‘Xh‚WvoNhwMawKjkDTtJ@eREU@RV<Q[-Rc<gW/x9Z˜eXt]fsAe{@Yb@oQR_LZn9Iv<J_CW[5gh7hj@vqBnŒ?_gV‡XgyS]…JilLpv;vŠRÛmPuÂex†xÿ€Lÿ‡@ÿe'ÿi"ÿl!ÿ{%ÿœ^ÿ~dÿJ7ÿ:k6TN&’\0p¢Dœc¯›G´¾iÏ…y“a}›Ps”QYŠ]•lFª]…¡dÖŸLÈÝ}ôÞ¢¿ÿ´lÔèz’“˜¤Zº^‚Ás¯§kÑ‘~°«¦i¤Öh«ÄurÆiLkWz5Vo/gjW‘ˆ4ƒ¯sh¤ŠwVt¡[ZˆX_wCO~A[a=Tz(f5c²DyOu¯G€ŸSp®PkŽsh„_¦Ž]QÊd„kNv–=v”fc›Y‰C|–CH—cPc[ŒoUn«tq‚ae†E[{_Up?rm5hu?~jEŠ™P`­MNbK³x/w¤_ŸŸg™¹cË©{áÖ”ƒ·d\‰I‡z7É1¢å~t¶˜…=º¶>¥±dƒšžŠK…fnvJ‚’8‰˜K‹µB~Ÿp¨xLuO\W:Os:bg+~…Uƒ‰MŒª]Œ†QÿªYT¿ƒ4>;S1$el*y{Gƒ±?g¬Jk=€–N½­<‹ÍiÛµy±Ûª|¬Z™…eÅè`rÊtbp“IfeOYŒ~_n<`zQpWSºšKöYm¶[¡‰t’Ì^t¨bƒN¦ÝYg³tomYm‰f·“~²Î{ˆ¾kFu;m[$š¯kŠ®t·q¬Ï]³ð‰~ɤ¨ŽdÄ©“™Ðz†m£¯i›ž`K‘X|m%{ž^w²^‡;¸ÆQŽÁ“~¥k¢Z©§rÐÌhÀÜik¸‰:l,ÎaAáÏr„¥U°Þqˆ£‹vNkNwo?·‰wÿ§h×ÿÿˆ¡Zˆ³h¥¿Œ¬[¨·Re£Mdj/^—w[X)€©(h¦?À¹bÈØ…¾Þo¸ÿzu¥˜”‰“µÇ§žÏ·uœo°—j²ìv¨˜‡À•oÂÜ‚¨VõŒr«Åœµ¼lÈÏ›¦·w¡¬g¿ºz“¤kìË”…ªl—«{ŽaŠÄ€t’^f…Cz‚GãÞ™ˆßo}|PVsHjvD†‰C«p„«„‰“k‹Ÿxn;tyTÄÇNƒÃUœ¤r‡¹€]|:h“[L[-Ç¡g’ê€T\dX_I\yB\c7ƒg=‘ƒTVxƒU–w«Èž¡³b«Ço¦ÝnÀþjÓUk˜1]|1vyC™£Mzœi­q¡Ã}µØ€’ɤɃžÎp‡ÐCm¢Nz¡D†ÁNo£6_ˆ8¤[Üÿt~®?vœ?rª=iŠ>}¦Sl”@\}7q‡:|®C³Ï€Àfj‚C[Zl~\u†Kp>l‡JEf‚C–ºw‘ÃpÈvjš\€ž]çö˜Žº|Ž’•œÂiwžI“žqŒ¶h“»vŽÃv‡·UŸ²d˜­`r„z‡wÀv†¸i »j…±ot“¥¾‡¤ºŽ—³cq–ivŽw”¹~ƒ°hrœMOg8uš\Нe¢Ã„‡§Q²jƒœaj†\{¥½fk‹@xŒb•™uÁº‚ÈÙ«»Û’£Ä„¡¿z„ªrƒ¤a–¢tœÀyš«sÊÌ‚‹£Lq†>|˜gŽÀVYKX€Xu•e€ x‰«np•^e’Yl†cª¥bsˆQ]~v€ ¤ÙÖ ÀdpŒDl‰Lm‰GbŒ_v§anžQp¡`‡»tªÆ`uEhƒJqV›ªfŽªfxŸySn—Yyd€JWp;h‰W|—dš¡oŸ`y‹zƒ™nnŠY`~AeyJs‹L{–b­\{›QhˆNoŒYm’O`ˆO]yBYuQ{š`v”Sg‚Lbv9KlGb}MczOa|IVzNY€SZ‡W_‚Wi‹Xc„Sj†Vi‹d«rŠ¥b…‘^u“Vj†Yu–Uo“Jr“Y|˜`~Lk‰IlŒVuŽLQe=`\5Sn1LkLIXEGS9PN5UQ0\P+K[9UT1QP,OY3PX?l`=fi=mjJ{lAi~Ybmh^]OWcCQdE[]9Pc5B_?DR4QR(\a*kn;oƒ6hMa„ad}VY~JqnGexH^vR]ƒKbzLV„Bbu>cv=b|<yrAz~FsŠMm†`q…Pq‹Vr’OeƒFhyGqŒP›{GŒ™S³„‚ÿ¯Wÿ•\ÿ`.ÿd ÿm!ÿ~*ÿšVÿxcÿB4ÿ:·<tT y>‡G}“YˆV£˜zˆÁ”rœ‹PŒeAoPCTJuW5…~<Š£f…_‚¥ur¤{M“†_c}b…S|…P…—K” _f½cl…lg|LyDu­os“V…rQtWM{=cb§o1€³Nk±‰g”t{Ll“S`Š_n|@`z>RuCWr4…r5{ªW‰“nb›o†{|‡at®[]¤Cm€Bˆ“N€¤Lu¢Tl’bT‡OEe0\N.Mq>Ri8Qf2bd/_<S~>h~ARxCj_;„s9e{>v`F”„Q©²V« M€‰W–œ@Á¡lÿ¡f›í}»žž˜^ÿ‘GâÔeËË•Œ£¶–w[´²”ÞÖ‚œó»´•ƒ~”¦‘MµÊt¤Ôƒ™½d“vžƒO™´mupdYrCrm2€q>S‹ar_BvœS‘‰S¨€XŒ¬W©Ÿ=öe³PxÜ»ošbpˆU–‡D´Ç;k«˜{ƒIrSvrZ†›Qžƒ@¡±ž¸k¶lZ€Bƒn,Õ:T§DZZ0yk>‰§?k‘i —yåg~•l^‡a¨”3£¿~¬Üâæ˜Âø”¼ßxpÏd‡xJÓ»PÕ÷n‰Þk¯]Y—pXo*k_;‰mI^oW˜l?{É“Œ@ÄÍq½æ¡šôrŽØM_„S}†HâðX”ñÑ¥_˜œyj´x~€Ožªz‡‡hq;Rs2‡‹ Ã^`½={À¦›ÞÇ­ã¥d‘<ŽŒK™‘zÁœQÍËõijÝíyðû´™ÿ°\ŠwVkHUXP®{Pûÿ®¦Û©†»h…‘E›¯L•¾v{£†E{;>>#dj‡z:ÄÞ”äÙ…Ý™–…d—iïÄ™¥Å^´‘m‹¢ƒ’šv®Àf¯ÓVØÃkËוǵiÿûÀ€¬j– ce‹Tc<iˆR•S}ƒ<š¼a«º£ÞŠ^~?o~1Úæ‘§öŽ‘¼fŠ–P„¢YiuUPw9…y®»°{¥‚lK…¦HX{Zun/°À[ŒÌ„\m3Xy,~Ÿ?vyE°Bƒ6ŽVŽM ¾X¥³t}Ÿy~›ƒ˜Ç²ß–¤ìbŒÃLp¨:€®?€Ÿuˆ¦e£ÆŒ¢Û~ºÜ„¸q‰ºw¨wr—x…œtmd{‹zs­gw‘W Ñ}¥ä’¹×²›M’©fi”IkŠYUv9j‚;ƒ­V–Æ€ªÔœy¬`ƒ§~°kc=fu7\‚1X€=ŽcŠ©Kv^…¤\Œ»O’»ji•VyB‹N‘ÆW‡¼|x¥W‰mg€AU[Kgj[n]›s®²s€³PdŠJY{[Yv]p}[]zEY9f‰Txœi†¥m‡®WSz4Hg=mWiƒB~‹T„¬•ΘžÃ†l‡Pn‰ZržZr£Rˆ¥`{ž<^ˆ9f†AmU¶Ÿ¼Œ–·€v]y™g¢Áuާ]ªn¬Ìr£·t™´^}œVzHœ´…¤×Zo’Id…Et•Xw–Uq—Vk‡Qr¡W|¡N|˜n¯Õt­Ìh™¸ˆ ¸}ˆ‡…—e€›V¤g™ÆmÑú|Ìÿt°ì’Øÿž°Óp†ª=d’Gs Se‰t W]‰[[‰RXuPh‹YwU]ˆªe”•`{‰c~Pc‰XfŠWxž\®f‚ XlŽSm‘fl–avšXl’Yg—kt—`t—]rFWyL\„f€”VY}>Sh1EbC]zGTkGXsRmˆSm‰N[{DZzVn…XsŒ\~•UeŠi€žzˆ›lw‡fz’^r‘QjRrŽZv˜aq–bi•BRp=KnP`‡TUsE[e7]h;_qBfaCLaAfQ:j[3o[5bf6_jDcZ9N_9IQ7gW4mw0U„NZdN8_KODNPF:XJ0MW2RW4Wh3Os:Z_:ir.e€5czFVuCUpN\iNMqFDeDRZ:V`7^kF`wKjsNgBoƒU{Gl”Ir„SpEmˆUttQuŽ[|’[y‡Xv—Pq‰W‹UŠ¡L{eÑ‚bÿÍ\ÿ§…ÿa3ÿd"ÿk!ÿ}'ÿœUÿhbÒ;0‚VZs1PX#fb<aƒAYzOdjK|wH‚–Yb™sXr[9tFVQ0Sh%Lf2^gAe{AaƒR]yNBUUe4Vx:et1]ƒ<‹€CZ²jb„`UŽ5piClGOifsX~„5L‰M[b%‚o3…Q¦‚ª]`Ÿv`uW\uNrv>‘Ež_dÐdswWi:>…PKK2[i5‚v2‹«r…§v’¦`ˆ·yušRg‰UZw[FrJPF4Ym+[v=FsB@S3VZ/€/‡ŽY^ kkyWsk4Š}5¦~:‡ŠGž|O‰T|VäŒU™ÿp„’vüƒN¿ÃŠ‹›s‹ŒkÄŽ]˜¬nÏcÜ™ìæ{ªô©š¡šÈµµïÁ‚²‚±ŸOš×“¤Æyp§ŠkWª‡GU´€gk,oz6wˆD¡ŠMz”x{ˆf»‰Tg¸„Èo;É’nÈ¿S؃•H{Ãm˜Tl“Fso8…™Xª]…šcòn]³ojt4‚‘@U›YyWS¢_Á¦Tà·xvÔ°`qs€4z”5|‡c¬YtÄ\„ˆ]ˆœbŽVªäpªÛ£¡w˜Ç’L˜{m^Xx°]œ™\‚­kÀ¦sb¯¸ƒJÙâ~éÔy×ÿµ¦·›«‚£Ÿ\™ºs¸¹|Æ—™’vÔò„¥ùt°d¨½Vx«šm~}Ä¢M§ÿ·c³ÅN×Ì¢Þf¡–TÄÿQ¨½:“º‚ƒÃrl’{‚eGŽ‚U¡àŸ€ dŸ­Pz†Cç³g®}ž°t–š€ÿõ²ÿÿÿýÿïŽÚ‚r\¢µ@ŠªUd€`nT|¦dQr@^^/‘‘f‘´xŽ£RÑÉ|ÿõÊÎÿÒÞħ|Æ‚€n<™€V­q§—½¶x ˜pª¢l†•[¬›Z–v€}Hü«\ÍÿöŒ…3`¬qOc+@mON'|™E–©D Á˜‰ª\¯ÌinÁC«¬cËÿô°ËŽž«‚‰ÄkwˆG…‘KŸ LŸ\YBc~Ld>pŠN”¬^|›GZ€>…šVšq„£LƒGŽ€;š„jè‡Ã´°ØÿÅe®Pb„=krQ`€;£”‡óÿ¬ôÿŲژ»íœÁئŒ¯Ž{‹hq„biš]“jz„an•icyYd˜[h€4`z8pPeNT‚<f|[ÁĦ¯ß„Óõ©ÉñŽr¨Lhc€¤Yi€W†§„’¸~V–KnƒX—½ŒžÉl‘?ax,dˆ5½ElŸFxiÂd”¸o·mŸ¾n£ÇsŽ£z¯z“¶g•¨d‰½‚Íçrj—>Hf@Kp@oEd—R‰§gyŸ`b’6PkMyŸO†·^y®b‰±Sr•Vq”Me‹^i“[k›Lp¦V…²\N}>^‰Pnšin‰j} g›¸[¡¸b ³szœp™¼}°Ù‰°Öfj‡J‘šm§tz—pp‘Rw™GtžU}”l™·w¦Åm’¹} Êt“·Wƒ—fy–T¥À––¿U]|AUHl˜\´Öj³èVy¨Nt–\Äs·×|Åì¨ÐÿŸÆë›©Ñe°UŽŽdœ­i‘Çi“¿qĨ¿ížÏý’‡§j{ª¨É_žQl‘EL{LjNc‡FjGW‰KbŒ\{–d‰©‡¸Üs†–ItƒP—Fp’S{œj¥ÉÁã…¦Ä]{•X}•Ti‚Nm–`~£V¡cp–VeŠau˜Rf†@_sQ^vLQi7Ki2Eh@_zFZuAUrQhxVdyHcx=SoPaˆet¤p‡¬i…©t f{™YhŠT_Xl[dYaˆ\t–WrYtF`z9SwL]ƒTTiSTa<Md6U`>]X2Yd6d[Boe:zrEayFaeIa];cn;juIxtGh‡@VŽQYjUHU2gC:eN'iN7]P1f]@bo9TxAt^B…ˆ:fœML†VIYCP[:HV:Ia9PZ8\W0Yg.MhDZc?hh@a|>fwOxrG_ŒOgU`yJepBevExqKpW›z^—W™“o€š`WŸpNulÀ[Bÿ¯Pÿš—ÿd5ÿb!ÿf#ÿy%ÿ™Qÿ^bqA+cn'JwJU]0sb E<<\KaX({…?{ŽEB”]:YI8L9`@.5c/BM8mW"OŠDJmJYj5X|?[v8Q‡?pu1r–DqŒ>d‹cz’L8JnNG™8xµj‰œd‹«W~”\S—Y`o?^L†|JŒž[NˆMbW}s.› G¢®`ªÉqrБt–{i™S\ŽSk€6w“9lŸUn‡R]Ž^hvT†Shª]]€X_z8cxEcƒ:X‚H`zS}ƒ>‹—Hf¬]l‚Hš~E›ËdxÃr~O»¼N©¨\”§\®¼w§ÆV±ŠR¦¡]§•w£§ƒ†U}–ud‚P eS¯”H†•^‚‹I®o_¯Š‡y«Æb{`KvGkK:ŠŠT€™Kv™bŒ¢bsh‚„IqR`T‚]thBG{?D_K‰V#” ^t¶MryW¼k’–h‰qO¯TŸ¸uh£Hk–[t”H|6“œIgªLn†:§Om¥ylmih~=eŽ<d„. …Q{¨v€œRŒ—F{—Vš©Rd”sw‚1]|Ez€?€’Z}œH“™KÎÃu¶âž﷟½|¨fXW&cf>Nd7MV+rƒFl‰Lw¬eŽŽf­Ö¡{¾ŸbŽ\nw\{zXd•\ŽšD¾Ãny¯tž®uÁ˜¦ªNf¦b{<„‡-¯ÑG·Ð¢ÑÅůOŹhÿÿ­üÿÇÿÿË©ÿ¨vÂ\}@x•B•¨x“J£Ê—y¢SkˆC«‹LüÏxÁ¥Xg3Sm(©ve~ºŽ¶œ“†¼q‡;_šL6B*xv$h—>fr5’´]ƒ†?ÙÈBÇЈ™¼jb’[zwx™gcÁ²h¸´iÿ­tŨqº}f£ÂXøvÿÁ{üøeã÷•ÜÿWŠÓOª»}°g—Õ°Œ­Rž·@PŽ1ihšŽ:ÔºhÒ©v†j§§f–Ägu“T¬ÇnЬލ§l•¬P¶ãm¢¶sªÄc“ÀUv°E™£^”Ùjƒ­@n†<bp7„u2·š8ÙÕo¸·”°³o•°sÓΚÑÿ…—˜Wž¤¯¦µÿ²rSp•C€ŸV|£hÊ»¤ÝáÖ…Æb`rK…—qr‹PQ}5ks:Цhv®KqˆCr…:—·Vx]ŸÄl£h—¨b‡¾JVw2nI­¹˜´ˆ‘š‡±j·v”ÞlkœH™´Y¡Ôfw™lÀøƒ¯b¶g«À¡¦âor›\…¦V”¢pš­c¯n¢Êˆ|¢’^ˆ|NcS€˜]~«nŠ´lx©_‡¯o¹b‹¯¥ÁÍij¬;OsC^y>]yLŒ‘XWyD]tAMw5TpJk‰UgˆQp’`šf\‚>Rr=iŠQ{’VtŒf¢³j£Æ\´ï}¦Üp~©Wz—h®q„­f¼Ñ|‚¨Tt“ƒ’°…¹gƒ¨ZlYx˜dw’VrLm„D\Fh…S‘µ~‘©u±Æ¦îÿ¡±Ó…ªÄf^„S‘¬}–ÀU[A_ˆI‹¨k”·…¥ÁnVq>TnQ|¤¶â’¸ñ·Ïû¤·ã“™¸r‘ÈYlžT´a–¿dr™Rx¡mœÅ…ªÉma?j‘ƒ±Zt“K{žPq™Gb„L{¡c¤c‚¨f€Ÿb{’Zx•t–Ám“¯PnHgV|ªgˆÁ|žÎœ±ÚŠ”Áf€œ_‰™Ww—Yr¤_|®^^{U`†h‡°x«^t’O\m@YuJ_z:Rq8[xJgƒLg‚Fe†RsšQcLZxAXv?RtTfˆo€§w©z~¨g|žZgTo‘_tš\z˜SeŠWrVmŽSlŽCSl@\zOk‚RScUYe8@oC<\EYG*bZ&rm<ql>mnAbyI^pI`fChk=j{@p‚Ny‰Va˜ba}efe@yZ<lV5[Z;\W:UZBZb@ZiGrmGs†>vyGUŸWM^MI`2SV4K}:Te>ci+Yw7[r=OjFXa=\[7mrGy=fŠHN‡ga^D^]2Zk:dk:ruBoa|‰O¬‡d˜¬lx·„\’yÂhFÿ¯?ÿ~uÿ\1ÿf ÿl ÿx)ÿOÓV\cZ(jh5H„IL\8[`'j}E›„Mƒ©8~®ax±`A¨Y&]H05#Q6Wk*^y>ar9VFdvG]y.o|4U†=Ko@zc.f|?pNI‰dRf?Hp9pi.Y€;{whb‘`‰]¢ž[É”Œ°w}²mq¬]iwExxU‘ŽN¼\—Ïw‰ÔŠ›«}€ÓЧw”¸rk½d]w\u…HT•eYnQ@r=lO9}Aƒ“O[«c{4–²>‚žu§bdšPmuCƒDj­ˆj~g§}=½ƒp‚–mUÓ\¦¶ýÄs«ç‰Ò©’åđ»pÔfÊ«hŒ¼htw›uA±„\á…Z°­€¦‹S‰…UCo[1:V*M<*1$,BN/'tc-zgL¥ƒLÃÀs„{r}lJOƒ3HX5XS-En-fc!e[8—ŽP„˜S¸ÂJ˦™•Và«TÇÿ”u¶u]–QPrB~Š2šJ\p„~;£ŠH¨¬xp€D€7ƒ¢JtŸRw=›M›c¢œV¸·Zµç‡“Ä_¦§g’¥Vp˜F~~A¤§JŽÄf‚›Vu¨Ž©Š€±ó•—Ãva‹nX™Afˆ,e‡6uŠ+±¯Fš©d«ãªçpsÄt_ct®µ3{Ö2‘1Ú¿^Áû¨¼è»x˜~¶¬V傪«wŽÜ„ˆ‡>p™oEp†4BA\Q>̘_ÓÁ•£ ¥ÄÉñm’¤€^ŸFbxCO{7otSfˆSŒe£¾|‘Ï ÌZº¥ˆx¦yµªXÊ`‘¢B•—€£Ÿq“½u{‚RѰ”Êvvd¾˜j€æf‡yS†xTl¸Tž3jzN®“T±©[‹MÍÐq‹­zv²eH^&fr0ŠiÆÑ–Ýï®Íôˆÿÿ¸ÿÿÿÖÿ¶ÀÂÕáŸÒ‡žÏhܯQá¹…—±†ÐÊ›Á쀔ÂMƒªIž®boKe‰9p„RrWÉÀe·|”µc·ÏiãÿÙÝþëýƨå~¨Èp§–LzŒDr²5Fp!•¢Y¯Ô¥Ò€§Íc´Ó”Áع›ì‚„œgs—`ŠtœÇ™™¼j† ƒ‹©|¶ËtÔíªÖÿ–«ç‚¹XTlFW_E[f3ˆŸE…žI‹£`o˜Dœ¦R|R‹ cv¥†v©[›™k ¾sl…Ko‡`W“PZp8t‘h¯bˆ“jŽŸi_–7z—d}¨e‡²sq ƒew`r¥`Š·{‹ÅmgžE†œZd~PawFo’T~ zp˜SSh7^pLaZmˆh†°d^Bx‹Y|¢vްr†¥€ŽÃtt¤Gz“VªPvšQ\yHe‹?c‡2Sw=^‚BeŒH„¥`nŒOiv<Xp>f“CnœK‚±Wv‘U‚šeš¿^n“ty•VXyNp¬\•¹vš¾u¥Xm‚gh”XZ€hŽ”tœ¡d¡e|–Z‘œH˜¥g…–Wx™dk„Z€šhƒ¥“Œ±|vŸjеcv™bµÌ“°Sb„H_…HiTdŠL^zJb‡4c˜Fu®{®Û±±Ö…„­†Œ£t‚PxšKˆ®Mn PU}@MvLy”U{’\{–TqVk‹^”Y[{BPlKSs?QrJ]sT[sa‚”]vRizKƒ˜kª±q’¹]|”Cf…e§ÃŠ•Ñ‡—É™£Ñ•›¼s‚¥hŒ eˆ¥^ƒ£aƒ¤H`xJf…j{Žsw•VWxI_qD^|Zs”Ol…LcƒSošd~«s‰²t¥Æož½Tq—Nl‡D`vARsPa…ceŒp„·Ž¯Ïq…£Ysˆbl‡Yf’UeˆSd†Nh…Vq”L\s?`pJv{Id[\{IKwNUcI`d2wr.vtGlyMoKŒˆNw¢]i“dusVm|Dx_˜‘[w°fqmwPYqMiTD\X=M^<FN4wX4w:uƒYQvInBAfz8puRšƒC…šJH«^zaU|…2t•OjŒ[\rOVlBmg4€}<Gj–R>–lO[USX*e]3ds=}r?„lNŸ„^  [¹´p«µŽf¬˜³|lÿ’PÿmXÿc)ÿf"ÿb!ÿr)ÿ‡N‰^Wpr.‡j;l¬W`wTdq4w‚By›Wˆ”W–Ÿot¾un›gPž]]gFyi$“Eo›_l†beˆJJƒGuq6r‘5HˆN7X?DQ%QX)Ok5SrErd:qX'nAu—J_ŠNUuDbnJ‡„<Š­€ªŒepNf>f@mP$Š=˜ÈuœÉ‚k½š~’{s’rv’eš‘rޤ‡¨¯qiÅjQ‡VmZIs|ITMwlCzžNi”JÁƒGs­Nx˜r‰—c†‡l”J€™\Syw{[;`4deMšcK—›D¦´X´»Ž{ž…²‚m¯¨p¶¦sÂ’i´šS¸±{°Í—½´uì¦Z·šbÐf¼°p×£Rm‚y[d¦3~³mo£RwˆFzw3xŽCTqMta-§¢OªµuI–{AV@OYSr'|~)JŠ=wY&l|Hm†M€aˆu‰f¼~V–â™™‰µ^—eË“N†ÙufŠEœ8]ź“zÙ©š´IÁÌ]—¸eƒ¤W‡‘Jy©NÂ¥Pž»ˆl™l¦iQÿ¤S¯ÿ°“­nd€N¦|Cf­‘fc?ŽÂ=ŸÇ”t°|gx[y‚2™[‚½fqš]ŠRɱZž¶hµÃ–ÚÿÀ„ÿ»¸”Lõÿ˜ªÿÃw´[•¦LµÅq·¬Ê’Nòÿ£Žòšd¹WbfXlq<R|JQoGXƒ){„%Õ¹YаNœÌch¹My\]–´Y´Ëˆs©‡nŠ;^ph•€Xš¤W”¸YŸ£[×·œ ï´sŸA…œC…‘Fí¶u¯´€›ˆ@¤àdІe{qJ}›>k NP`+{U=}ƒLo«E|^B‚‘R”A™Ž]œ¢d÷§jëØ²®»z¿±jšË_–ŸX—ÇY…­ZÏ»ˆãß´ÿõ»ÿÿÿ£þ¯µ³x¡ÇŒˆ¨t–¥‰ž²[–¡M¤»`‘°{¡—Ž‹˜v›£‚„¡m›“`ƒšSƒ¢[¢ÉkªÕtޝ`Ž¥›Ño“»o¤«’“º‡¯S•}GÇÁ_¢ßq•µl†ÄmŸ¯ÏÿÑœ”q”’„›‘…—vi…Xgm6n—:h‹H¦r‘¼uy©Yi}KrhdzRº¿¶‡®‹Rh2\{&Xj2ep+‡uL†G……VkKjLv€@y¡aPg@Om,Fb>_oI†œd_‡KyˆP²´ˆ Ä|”­~cw¬O_@n„b—±]޵fv¦Nx˜Mc˜C[‚Fo^›RZŒDi“KnH´v¤³o•ºXyÀD[ŠNe†YmžYiŠ[e8Lw?WqD€™_j|Hv~R€“[Š«T~±jk•4Qt0T{=RŒ,Ou/Dg0PqMQjOPm<VsCZz3Wy?q“S{“Wv‹V]KczGSp@PsFx¡pÉ…‹¸`TyK_‡ONv;YsCb€>{~W’r€au‡gr–Vz“iv”Vb}Dk{UZoguˆ_x•X|™gi”VbXŒ”hlCZs?Pq8[|Jj“Rt–OlS}±fz²a¡{«Ä‰”»b_}GDh0JwB~ Rq˜2Yˆ5[„Gn‚AexG†Ok–Rf‹JY„Vt›e‹´b†§GY€:Rk7FfAZTrƒNrŒYm~RlsKXnQiˆ>Z|`€”ƒ‹­‰Œ¶Š‰­plbfŒYk…Tj€RrUe~EZmMl„^[XjLb…A_v=azU‡•`‹PizLi‘cy›iq—n—w‹¨dx[o–Zj†;Fh<HiMW€q~­¤²Ü•¤ÁWf~NXyNg„XiIZ{H\sLX|TqŠNz‚BavDV„SgsUcpL|F}‘Ml’ShyVh|WqpO~X‡¢mr¥tlofŠSy…bˆ–dn­jk™‹q€ieuXscOkl>NoEpO7œ1x±Wt‰p>ˆ^RLEki.…yC²˜T†ËfQ®”‚bj‡‰7udˆ†gm‰SW~MQnDde6„rA}‹OY—hRsl[hAtf5i€AqvNnLˆsQ‚`^šlPswa[WÏhUÿ‡Cÿe9ÿ]!ÿ^%ÿhÿt,°vQ_uP`rEˆS0„Jc¤iƒƒM¦NrŸ_tŸby™Xa©l–`†¦U…œj—IŠ´bz­dUˆkZnM_v>R|CSn=:j<5L5GK)I_%MZ5Vl9ssAn‚3€“Bq¥aAd`[=hkC@CI^UˆVUuSMŒe4r:MYwy5r©b?`KXOgv>uPC…CTVGg=z¦i”{Lªy=WCK+_­Mhc“St–^‚T–”SY“bKiKMQPT@3}K5lcHgc7M]@dI,ƒn6‰yAgZŠ~R‹|U—‹R´²e×¾_贀ʒuÜ®t«í–´¥gÜiÇa¤ljõ¡h³Ç† }]|}_•aZ±uLVU¡`Q¯»f›¿t}…nŒf0}¼Oa][n|<lœ9TjBdv:—€;^\Yf<„z1€˜`n¤TsŠ5~Ž@³šZoÿjAIQeh.ˆŒCxFmBh‹Ecu<µwAÌê~›Ók•“È~lŽgu†<i|JuŒ:¢@®ÃSçŸcóÿ§æÉy…§¡^vq¢kD†¨Ve°ule>­©meÄ„vˆN~™6‰Ž8c\ÛŸRz±h£S‘”mg¥~ƒAÓ˜Žªÿä‹®R»ÒstÑ‚‰žJ®K~~KÄT›ÅKˆÅyµ‡k¥áÿóe¦ÿŸ²¶W¼×s¸ÎzªÂmå Põɧ¥Õ‰­n»ž^¹Óy¾í¢e‰\…Hƒ·Ll‰?ŒyR“s¼Ö€u¨x˜ŠP¦çˆ€rI¨ŠL•¯cιdžÈˆÒÝÚŸk’¡cT~5ydK›¢‹›ŒF›Ty‘W±ªT©Ÿw¯¶~›£]Ê»dÇæ£øç„ÿÿ³Îý••ÔʱsÎð t£u´¿‚Æ]·ñ¨á£`ŸF†wR•Œ™m•¥h‘žX°Î|•¿gQfNƒsI²š^mœARŠ?Q^*Ž€M¤¸p”´k§³ƒwÊdl‚<rxC|«Mˆ”@™§]·f„•:¹Âp~­spO¡¬ˆž’{Ñ}š“RÄÌ—ŸÚ~ˆÚXt{^ŸËfa|6™ÈH]~0¦s‹Èu޲M`–J?N6TGCjp9h„FxlOtrR€‚XvzN††Bt’Jš©z¥Ér‚¯c„¦fk—=m5oŠEƵo¼êy¢´eÁÊn¹Ùz™Ánˆ¯hg‘Sc|ZV†:Oj=\=crISŒ6EH5i}Akx\kˆQh•F¤ÄoeDCYCpzpƒ§WªØk‹Ó]€´Pºi¾diXdyC\wFqŠUp™n~¥_s¤^WƒZt—hqšjr“HWz5Ut<Ss6T€.Gm+Nn?OhC\tElvH^z1[m;jŽAr“Ve‚GHc1IY1NU-`‡Qx§sx°pq“`n‹`ƒ¡Zp£DUw8g…>rƒHc…Ow‚Q|ƒYs™[oœQvŸJi~Fz‡Jo}A\{Ig{>WzLeKYwO}Yj‚7Nr1Oj/Qn3W}G`†K^‡_vq™«i‰«i‹¦…‹§gše{ŸMhEu‡G|KsOtR’’Ds„Nx—_x¥ZjŒLhŠ]‹¦x‚¢ij‰R\yFk–Rn—JwˆT”Z€—Vw•DlŠ9Zp:\nD^w;SyUjbn‘^ZˆQd‚CX~Pn…Oh‡Qk‰Pl‚Ne}V‹¥y¡ºƒºá‚«ÒZqBiƒNp€Th}FXmEk}Zz{EMY?AXHViL[x]nŸdyžD[v3PoIc~ZjŠ|w¡—¢¼`lŽCb|PdƒJcwG^InvAUxL`yTv„Fk‹JFjIa]Glk:€‚Dh“YW…`Hw\\gJcoJpx[‚kVUm«ij‘hl„Z†{Z€§]_©”etfwGcnChs?uxG¨vB¸Mv¸u–ˆn‡¬Tr•gp„JrBÉ V Ðuc±¡~na‚v>„rRž‡T’¬Uo«h]_ulG`z7pr@zvVtˆdt‡`”„Gz\zmrjOolG^vOF{MHdKbU-ÿ^*ÿ”=ÿ[6ÿ]ÿ`!ÿb"|m+Š€Ef¢M:XN:-`Z%eˆ`†‡O ¡U“¾qŽÉœ¶tr²fd”g~yH›ŒOµfv§nq‡`Ye\vMcq'S~J\d?av+Xn<ck1M{5m]3„y3€˜Su…]eŠHgV_tOfv0‚ƒ@Z©GJpVLY$f[9ou8ŠFd¥BSqUMoIpM7z<„¥Mo k^wNx[;˜ƒ4J›`oSP{‹@†‡]ªy9r±dy€S~Gu|H€{Lz}O‰tN«›K”ƒE…oMnv6[=–gB±€D‚yK‡|GvpL…tD‹«cz³_zG¡¤^à®\«è¤œ¼mOŠiQ΄[¿ŸPˆ]•€M£Z¼~g¾Ÿi……l‘„N ®g¨Õ4³h^86l‰1Hw@DJ'¤p/c¥BUƒ6Qr$vqž™DK‰HfM5š{:ä£cq²€qppT}‰;b8‡U'W¼Wh|(qƒ7clAyk<h‡C¢{To‘U‹n=–u—®c¾ÁoƒÑ­h„el}D`dG†jF’¦†°´n˜Ã]ì®lÿò—èþ¹o™wjvG¢…Lp³}[}N‘{8 Ô‘vÃZž—Je—eÅŠIÌÿ¤§ÓzÜÿe‚Èh½¶GãÇžÔêˆðÿŽMõKY0ed7j«GU‹*Us?­‰CÈõ–Ýÿ‚¢ÎQ¾¾‘µÛ¯ÿìŸÿ™d‘iy{:g;§œ4ÇŸT°Ø§‹ªmÉN¹­he ’q…V‡ha«¦t¦–ªsƒ–e¤¥n–‘v€‚by‰I”‹€¡Ìm˜¦rÿ´ŠÁÓ¨éþ²ùòÃ¥³“`Œ•E›¿e³«d¥´w½¹ˆÞÌ‚µÐzš¤P›N£¦¥«™¤«ùÎÁùÿÓÍﱩɖu ~}m°Ëo»ÜƒÅõ¶ŸÜ‰f•>vD}€XŸ©V´Ï…”¯€øÔžîŠ‚„O‡Lÿ®m©Vp„PYo-}•Se…?…xR“‰‘€µ}wW†£Y‘³a€³X„™R‚°g¼ž™œ×Œ®º~¬±O°ÉdÇöª\ŠGŸd »k¢r‰Vÿß±ßÿ°“šcÌÈ™ßazzR‡ËZl¯XW8h{+l£1pŽ;„„Apr6„wU^^<uxOspSbo3š©q®Äƒl‹HXv@i~Tv—gˆ½q”´y²º¤ªÎp¹ë•y™S~‹[•”fy–Pl;„°l†¿ia—/jwSˆ­[¸mu–[}žBy§Mp€l–¢“}¨O:['Zs=rww£}¢ co•ClŒj tX{6Ol.Hg+WnA…¯tyªgyª`i’PQsSl‰SPmPhwQi‹KXuFYwVqGˆ±Mg›?m’ab…>^{NyŽKTyKŽ»cyŠ?w“<`r@`xB\ƒAHwJPoJQ}GdvZtXq LZ{<v‚V‹ž_› ]sMrY€ NªWw°GY|<uxXš¢]Š›WЉFm„D{C{ŠQ˜[m‘EX~3[{7[v:d~EnGcE\‹Idƒ\kƒS^zLmƒV†©\dŠUiRˆT}ŒL{‡KŒ“VˆŽO~c£Áq—²dpŒQ^„Vtˆb‚©PcAlTx t§f•¤m†˜d‹Ÿ^޵]™¯RyŽ;Nk;[‡On•MoU~¡Uw¢SbƒNp‚Qq‚MlŽTczXn„Wpˆc|¡ƒ…­Œ|¤“¼sžXv”Jp†Sm„Zy•^š¨_vt1HR2FR1VuOwXi’fl“WaE[‚ENrKZvV^}v€¡gy˜SgŠUm…QkˆXsš]zLx~C\rNf…R{‰VMZ3c^<kf4aFh„RtzUn’P|ŠYt†Ng•_€r^‹rFƒ£`yšnqa…ˆ\„Ÿ]Фa®‡nsY}}@|ŽY|ˆU“…He©[\Ž€xp^ƒA|¡x}‡j|“W}SzŽad‹ucv^rE„uA‡œL€¦Xˆ°sr£ue‹fpsCYyClm<~‚A‡€bœœiy¬k{~yuvPuwI_{MeoLQl;Ra1èa5ÿ€6ÿ]6ÿ\$ÿ["–X&ƒ}5«^z½bH–„=DBcF[|:Yu@“xE‹¼\°„¢™t|Ëq]¬yo~Wy“CR¤f>xXPN4OP-dg+g-fyLvr;Š7l—K]oKgqFa‡<e{@ŠwPl¥mn‰[|€<_…I‰{:n—M[‡O‚s\8Ž=?J@NJˆ`@N´XFp`Kj-V\)jf>O‹N}qQw’Qƒ–T„“Xƒ—fƒ{B…w/—–^‚\È„ƒ»byŠcŠvQcŒFgoCnIœ¼XÖ¢eâ»b}¼t™w<ut?£fL¸mD±‚gržfœvB”§Rгs¦©qz¿n°Mtµjn€X„dN˜t=|nd®qJÅšT—½_Å‘iÏŸfø _ÃÕyŠ rƒwG´Ž\wÓàE¬ü<ÄkgWx’<SvPW€-t~%~;££Y‡±o—Jh‚Iƒm9Š›b|—LYcƒpFcgˆ~\¡¨g­×pnÆQgZ]tL¨v4¥¡„Š‘U˜¾|žµsËØ–åÌ„‚eYzJ„[.«I¾Xÿ¼vº¸–{¡}˜„M¦®o‹¬‰uqC ÂBob€H¶Q¶ÙŠ¸Ú´žÇjÛÏsÅÿ­½èª­é›Òâ“Éî£Æÿyº ²ÿÿƒÿÿé³ÿÝtwbxc>µ‚zÔ‘a©Ed}6wwJÿ»yéÿÿ™Õ“z—H´­s‡Ä…e‘‘Nq‡e‚QβY©{³ÑlÜÿÕ“±w{¤Xc~1y 6\`å¥nf«—‰ŽF™¤W¸Ô…«Ñ_ˆ·Xv“S™Ÿ\¯¾ib‘V„~F¯¨€žÁi’§i½S˜žV™Õ}ƒ‹Hž¦Y»ÐjÞòÍçd­Ça“™V­©oÒúº¥õ}¥²]Æ‘¡§á´x•Xq‡NeƒF›¦hÄÑ·§ã§n”k‚UœË†‘•i¦Í}‹¼d‘“}·»¡Ùê­îˆÌÍtÖ—]Äð„q=“|E~˜B¯¬\Œ¦Y|ž<–W†‡O®½vÏïÜoŒŠy­9}›b†žBuK¼Ž|äÜɯϔ¡‚]€<^}5{ŒQŒ­HЏ`L‚7j‡Þþ©€Íe…”kš¦zœË†yœ]£Èt‰Ìp‰¤„—¶p…–cqS¬Z¾Ñ`§ñ[ƒ•Iq{AŠˆi›^f7jŠ;„¢Huu[h‚Qj|`°®y¹Óªºô”›Ætƒ¾Vy‹X¸L“±c¡×y®Þ“¡åhÂq·Wk–\uP”ÁP‡¿N\vDh‚Li–Ec‘DU~8`{NoY”~š¶yt‡_f“OawHp}AW,Im?YfWz¦es¨LCq65P.=Q<[rZu‘CFl-C`)Fc+Db>PsLGgR€±sƒ²dsŠFsOjŒ\¢·–xŸNq‚Ke„=e’=j–D_ŒJf‡MtŸYvzHYmB‡£]`ƒ<m’S„œ^~™rsƒMdQd}BuXsEg€:bVm–X‹•cƒ‘[™Kj‡Nƒš_€œc‡—Wo‡6Xu8S|@i‰FYsA`xNb‚FbzHh„<]s<fmJ„ŽSq™i¦¶a‡ŽCdIˆ‚Vƒ^°a… [Ÿe€IpuE]yKXrYu£\o•TtŸYožgw¦|‡¨~”±i¦o¯[z›S„£U|˜T|¢q–Ài†­]…£m›¸^y‘Q{ŠQvŒJh‘Mk€Jo}UvZ]rn‚ jw—`o—i‰ª\z’W|£‚¸à±Çq„‡=YlCmyNŽ–p§\h~Zu•z—¶cˆ”\‹—Sj‚JW|Xy›g}”]rža‰šhž­tªÄsƒ•W|Qm„Oeˆc}ZRU([a3g`3h‡Js~YyŒJƒ—[xœo„ƒl…—_ŒhnxOXsSio\ryPn˜Sh]ˆ„qj p^Švq{Ot„Ro–mc‹bYrT_z_vcAnj5j‚U|~apW[|ZRyFOeH^nC_z9rwDt‰L›X´aeªjfŒhssPdtD`}MivOƒ}Px“[€iš†g†ŽTLp]SWId_>VvAGiD [6ÿ‚5ÿ^2ÿX%•Q#Q\%jd5uvF`ˆaGxp<TJ\?!8j,KO>Ÿ]&‚³?”¨ƒÅ¢Ywñ‚z•ƒ£¡a°Åh™Ëˆf»kN†UVZ'po&‰˜;v§a“Y~¤Do˜Xg‚^†uQy I|jŒLtž]„«X~žPŽ‹Tw¨OYŠac\C”w=R¦cŽc+Œr,œ¤C©Ïm•ݘ€µzkšYz“Hj•Kp—T¿ŽX×ào‘ö§‹²~Œ¬f¡P¸Z žX‘©|Œ­av¢esGŽˆL‹xW›ŸMƒªr¸–]ÿ¾zz¿»È›7ª¥c«ŽXŸœZ·uPœŠt~…X‚{G˜œkw…eyˆ]‘ŽHâ®XÕçrÿÌx¹Âxå’kÛóŽås™‹k¼˜TÅ£\ß§b²î«ž~lW{h@„–M®­`f»šJM_L-u‚DŒ›L]¸G‰|.ÿžUˆÿµz±f~9 ©Zi±mŠY=}¸A_z_G†R0]*LI"­yB̉}”²]¡l„u<‰ŽK|§c˜ŒC¨k—™nPž‘uYYo =PfA~k.ˆyJ•yQ±‰Z݇p –‡»²py¸~š•O»ÓFŽÃ…¯gn“ZzŽubŒj™˜?tž‘Ÿ¯TžÕ„ƒ­i©É‡ïÝ‚àÿÈ|ÌœŸ¤W·Û|«Ä¯“Ç}Q‹Iq\#ThT[Tâ[[yCZtN¯;€»q ªa~£Gs“K˜©T«³p–¥q„ŸGluW‰†Vx‰kªV~‚OjŽW…Dj¬IeˆDœ²pȦWž¦i£¨L©O£ž[ˆžgŠºŠ‰‰R‡§pÛÕ‘Ò_‡žKŒ”f‰²aŒ©R ™`šœ€µŠ…¦]¨£’¨§‘›­§c ­ˆ–ž]„¨_ z»éÀªØu‘ªoo|\œ¥V“¦g…¥eRtZ\qtjfW‹’U¼»]€øŒ}@çÔ¡­ò„ÈØpœÞ„ÊÊžäÿ­¿gʨ\Ç»”­Ðz¼ël¥¬i¯­‹‰¬{™†\¢¹T~š[©˜\v ]Œ’g©Ö{s—Lhz;w|Eœ¤{‹­„ikOWk7mŒWŒ„>šÉR§b„‘{žÌ~{·J¶Ín»ô}‹Æ\u qš[Ô]]…L¯±¢†¥Y²ÊpÝú»Áý¯¡×‹²è‰›æx›c‹ÂVŠP¬¼l„–dwZb…CVd:\i1ƒ“Wsu@skX¬«¬¢ØŠ˜ºƒ•À…•ÄŒžÆƒ©Ì‚‡¬u™ºz–¾ƒ ²z|¡W Ì}§ío{¼hzPk™LŸX{¢?c‘=hŽOh‹_nŽ]‚ŸntŽWJe?rGGr4Om>^xJvdŽªld”ZF_-E`#=L3Ga.Mb9Vl8Jo(A\0Nj;^{CY‹Uckn‰_hyO‹ž`ƒ±aŽÂ‚ˆ­]w“n˜¼~¬Èx…ªL_DMhAx˜_®]ƒ­Ehz@n„FŽ‹r“°„…ªoj‚Gy‚MuœV¤ÐqžÈi—Á[n£^ºkr¨[‚¢`’LkŠIa„I”¢[„–Zz•FeŠOn˜T[}3Ks=]wLex<Ow4\tBmzCesAh}KrcƒW~ŒY™X’R„ˆk•žjw”a‚”^‰„Wu„KpƒGeyDXxNaMo™Uz¢g‹³†”¹‚‘³„𮄙¯[kˆIi}[k‚Qa}drŸzœ¿q“´€ Áw“ Yk}HbvIrŒ^‡—Tp‡P{‘Fk€c‰onw`b…dnXhk†Â›²Ò„„¢^b‡Yv£h¦r ¯|ƒ™MZ†W[…tƒ ms…_mz[o‰So–]uš\x‘a‹°v¨¶}¤°w•¦bwUy‘az“cŒ`€‘Wa],Wi1Ul2Xp?‹lDu¥Gu‡o`‹hcveuvJ[‰VM{dI^JO\=`c3ez5^Xk}Xr…RZ‡Wg}Uvz@pš\Zf_lQVtJR`IS]8a^=foBTJcqE_tAQt>Yg=Td:`m>{w@„–N†«eo£pnŽi‘‚LŒŽLd™fopX\q?ntC‹€O†¤Pk„XYi^{fFxy4]…PVl@€c.ÿ€9ÿm:ÿZ nR#Az3C]8A`(GS.8g=9M/G94cQO+jo"i€@«ƒcªÉeoàŠv—yŽ–]—´oªÁ—~ÃzJ¤ŽmjQy“3‚F•«hËqx\QlZlRpq6’E“›l‘°fž­y€Àor–o}X€žWupgro?†…<P£€jXG}W,«–D Î™ŽÈ”z¸™…žw‚¦az­f§–XšµlÐÇl½ãŸvÛ”f”Z‹Ÿ9Œ¤lˆŸ\™—d©»j¤¹v‡”b‹ŠHr\|‹V‹‚}“lKŒ‰_|ƒx’>— ]š¬e}a†tQ„]o‰njmHjp:qzGoqS‚“E~šI}–ˆ°—YÏ¢XÖãhÌÿ…ïÁ…¡Ï¦¬µlo¡ƒ‚‚BΡbºæ؃˜¡d”ªFÙÄPÛœ¾fKxWtt1ŠM„m™¤>Ì£g‡°™‡¸m£…[¹Ès´s‹ŸF†¥|g¡goˆFg\Y‹Eƒ€)Ÿš\­›[´‹†™=žPœ²O©[†³o_qRn–Bˆ§AA•k:> q_!‰–\Õ»`—«Z«f?ŽmÉÖ~šv¬¡^ݺ“Êå®»ä—g¯†Mt9h€A\–:€€Ba¡_³Eµê‚‚˜­‰ÆsŸšTÝÅ}§ÓœŸaö¡S’¯l™£O—ºZ¹–`̯c§ÿ¨ª¡O­Ó]ËʼÄݾq‹h„›U€’Yˆ=¡°‰Ã«Vºrž Y~¨Q}’\~¢RbŠ9Vu#Rr5V{=pn<tfy¿¥h”°\¨˜NŽ®_hˆ]ƒ•Yߘd˜ç{q£k»œx¥ÕŸÈÿt„Éf»©i‡¤n»`~oz³Å‰•W´ŒK¢ÃtŸ©[}¤GµªŽÒñ­ˆ½–p€@’´[‰­lº¦`y<yˆa¤ŽfÈnT‚Jfi.óe«»yÑØ¯ÚüÉÖÿÒ“°YŠ®T¢Ø¡u—fÊÄŽÌÿÈÍÉŸÔË¡­ªy£´…¨ªjÜÀ†œ eËÙqÑÀoǨzÿà’ðÿ£›ÄO½Äz¸õŸ¥Ñ†€¢M ^Šœi‹˜Rk™?GO,¥¡]¦h”¬’z¡[Go(g_Ev“Y°¢¹Ô}¢Ü]rÆGi„Q‹§qV‚:j„GzŒG…¡i†d‡ˆ¦ÆˆxÂft†R`zSC[DDc7”‹„‚¨urƒW†™b~¤Hœ¦‰¥ÔŠŸb‹½m¤Ð»ÜŸŽºx‹¿b€¦\„¤^ƒ½P’P_qE„¢l‚¦cu‹MyŽqŠœƒ‹£s˜`k˜^]‹K\ŽHXtSNgCsuGs†_„pi’LRw6Ea@r‘AdŠ:g’D[z5?h2LbGnŠ0El#Ik.Jr2V~5Kl9Nk2=Y%=])?_,G_Ef|>t Ld{Hq„NMlWjsgfzaœ¹¤¿‘¯Úms V…±YW‚2dzÏÄÑÿÿ´ˆ³Ns’d­§Ž±Ã…›°xޝo¤¾xžÈ{ŸÂƒ’¾‚›Ç…–¼†š½u‚¨iŸ¨gŒµYy²I]ŒI`xEVzJ[ˆQyª{нic…:XrM[jBYf<^w6f}Ck{G[q<Zl@gyPˆJyNwH`uFv}U‹–_šoŸŸg—WovCy€Oop:Zo=kŒJa‘^{§nv™v~¤tƒ¢r£s‚ p‡¥N`tSz—?_|;fˆm ¿}žÐ€¸Å¯¸j–§WsŒVjŠk£p‘¨f•©Z‡¨v±»l‰¢\y™`mWdŠZxŸœÇŒ›ºdt‰BPt_y¤u¬szŸc~•Y|¤^t¨dw˜co€DRnKi[u—j¨j€žb‡ sˆ£o†«htVtŠ_žw’žd„‹\pŽY^†AVyMgw?]x<~^9S‹9XtheiEk‚LƒŒX£[x“ii‰\wyEl™Lp•Q_‘TQ}[TmHlY>c‰Ko~JuˆKsŽV‡}Q]ŽKGl]NY<_^*et0WƒF]xGdt;i‚D_zGcs=jy<u“?ˆK’\s•joŠar‡aw…SZŒdVzfPt6gg3t<hŽPgoV`a:GsDAS=BS?TZ6dg%ÿ{Aÿ†9ÿ]%Sb$@t9<e-E] H]%?]'NW)TPjq&›CqÆN€c¡™F¤½cÇ‚x¹}}•p‡ŽTt¯mu”howx„eXCx}A‘¥K£»_|Ìwr¢uo†]‹H²`°¦t•Ӄĭ‹s»lƒˆz¤zQwŸD|…j‚’JņSÏÔx¯ØŒ£Æl—¯h§²{wÍ„osw‰]†U•²Z{¼‚¾˜\¼ÌvˆÄ•]¥Œ—„5wµE\¤°H¤µp»¸w¾½‡“Ñ„îŒbð¬_†«‚Œ—`®mRÜxR°¥_»£U¹g€“‚‘gL‡mJwZEhRkzYekP†u6ОXÓ䦅ìm}¢e“™WãÂ[Òç§èù¿¿ÿ¥¬Ê…›ÊŠq¸x€?¾®Qùë…¨ÿå¿–œ´€ºŸ]zžƒcŽŸS{Â`¡f·ž\žª^ªd³p„Êp°“Y‘»i}”tŒŒsz˜]men€Jr¦O™§Z”ÂaXO|(fª`~z;³±f~Ä…¨¡H€ªzQy—t5‹E,KIMhƒ°{3äõ•Øþ©¸½vß‚~…^‡‘D¤¼[¬·„¾ ŠrX’My4hx,›Rm™IŠ‘KvÏO^…L}”5if™§m‰²S¥Æe´ºg¾Îq±¹”Ä᎕¤Ay|H™™B™ý¯Y®Úqˆºa—V´“U¦Åde‘Iš‹8©¿‚²_ÕÁŠ~¹~_~Ovs6Tl8¦sSª²’ ¥pqŸN€‹J‹˜I±¬jÁÃsq¤_¨ ZsˆE˜¨Bõᣬ{˜ž^˃‹ \®Ä±}Ãd|’Td}XwzKt€1ë­Œq¼œw~\š˜pŸªƒ‡¨y¶¬z’©¥°¿‡kŽN¦ƒŒ¯±k‰´pt…DºŽp‘¬d¡Ž‘©¬]•“dзd‹c4U'mBC¶´šµÎyËíÛËØÇV—[œˆH·ê Š¡l˜±m¢ºm‚­o¤­rð¸~Ïÿ¡¿ÍÎÓÐf§oˆ•O}…ƒ§¡Œg‘Ÿ\h9e†aQ^7grQqwQ}ž?«P¢–a´¡Œ£¯v”½Ak¤:w“=k­>‡[lžJkfJ}’YU}<Zk,Zm-„¤D·Êv½¸}öïΩݕ{ºEjpI‘’?|˜YLw@Gb)U~,r¡D’¸ru–T—¤XËÉv€§Xe½³†‹±xŸ‹¦Å‰¥Ö„‚°^}”O’žap—By~V¯ºh¦tV…BYs:i>]}GWpKWv?csAl„XWsYJgZ^YEVk9m…Dj‘QÁec†1Uz0MwHb‰L`o=Ml/>V4Ea3[jJmyNYy59Y$AT8K_5E`/Lf*K_*V€.b¢3fœ8TwJvs‡ªZDs'La.\vAo›nаnr¡Va†Y–«¿¾l_nGTnns‘¯¨Â‹€µnˆ¶t}®|¬Új˜Ìo„³sˆ£en\r“fyŸkq”`ziu£r}§|†Â|‡¶m}³JeŒKq™Js z’¦Š£È‚“¸cd„8JU)BW5Sk@c„Igƒ=h{DX}3OmI[xF{ƒV”Ÿ]¬Uyƒ[Œ…W‹q’¸{ŽªYupBvsDno<jk@c|U|œn•kˆ‘g‹µh‰»f|°dy«sy•PPiTt›Rv™Hu§p®všu¨¢i‹m‹£s«Ån °iƒ¢ik”m€—]vŸ•¼~ºo–»l†¤aw“k„¡zŸ»š­Yl},JkL]ƒn€£du [s•s³}–Íqu¡S`tEZqTh\iŠiz›n~•[y”\u™`‚ _oŽa|œo‚ q†¢`kSe‚iU?_|R\xGYDZnBPw?LlLpj:w>™`†¢g¥œx¡ iµ®a‘Ïpk¼}Z–qFv`RYMdV2Z‰:YsV`iF_vCttGfyJS…n`cIfk7dx4W~ChrNev>k‰LsˆVn—Y…‰VvNxYl{Rj‡bl|Tt…Sg—XWY_uOmy;y{<k•A=ŒZB`O>J$?M8RS4ii&rƒ;‹ŽE·›NÿªRÈb7ba)Yw7Gs1A^)NX$Tb%Ol*RT,Wg)ksK;ŒjcGX€`5¯–OºkY»FliPV<Fd?xd;v DAŠaqbD‡¤5žžP¯µtÄpœ—rŠ_‡€O„f²‹pŠÃ‡Î’—zªmƒ§xgYi>zƒUIfaÂDKÕÀoÊÕº“ܲr²¥{—N„›jg¤i]xPƒqI¢@t£„ž£`‹¬[uœ^lŠN{{C¦•A‡¢O‡®O€Œa¢–W£ºt™»y·¤k­£f³¨i¡p˜–\—…S²¬Y§Ëm”Ïy|º}±oKt›Y´{=¥—C½»d˜»jtžQ|–hmY’‡Wƒ¬x’dƒ„N¶«`ÒÜo‰Øºzu‘w©•†žLÓ¦\±·eŠ”of™¥n‹™Y‡¬SŠ\­¸d—¿s™µfjšom~KgnNŒJ{Âptygw‘Kf{O ¨K“Í|x“jš›P~·u†œi‚Àn‰¸j†¹Z…Ÿnu¥^ª†G•¼m¸·N®Ù|£»¦y<¢ROD D{&sl-å¨Wôô¯°Ò½ïˆkÙ ¡Œ?¡µI´`„ŠYMyZqd3ft7‰¤[i \Y{Ej…N}”Dk—cr‘cv•S8†IyK Ûd»ÙŸ¹Ì|¬ó{¾‹ÅÂ\†½…¢C¸¿fˆÍªxšcš¢u¤¡c«­p§³l—™e~–WŸ‡OË¥k—¨Š™¡|u–Z˜?pŠNxi9fƒPooDoƒi“†`«Á„¤Òj”¥c·°…¸¢sª¼m§¨hÿ¶qîÿ¶©Áv©År‡ºh…en—Yt‚Ng{F—€P®xgŹxÛo—å¯fŒ/•“_mŠ^Œ¢_—£w‹Hµ”ƒ±ÇqÞ½œ‘¨h\ŠŠB~žMršP‘GžTw–D¢¬e¹Y`n7c1Z1mKˆŽY¤eŸ·`žºLÓÚ²³ò¨v¿lƒ¸j§‡NºÕuz•[Œ—EºéY¡ézŠ•Gš–eŠ¥o}]|\YƒIR^2LL xa7¨™^gš2exIUx.€‹8j”NwY|º«v¨¿G¶Õ{Íí­Õä—oÄGSuCw™;i‡4ŠIìµ—öÁ†Ç±„iz~††™_§±|º¼w_~N{L~©Z’œn±Û|¥à‡–»g›·j…»\ŒÂNƒ¿N†˜N‡‘O†‹O~‚h˜Š€£±r;e€HiJ“‹_esFVt=Q‚%c—4“ÉY’Üb^’?Y|8c…Cap<ap5T~.Ke+Xi6m•Jp˜e‚œrr•`|Ÿ[v¨GP}?nUSo9Gc,?_/Tu:cwPwšDgŽ;jy:Vp-Tn@jBmH˜¾o†µfŒ¼Q`›Eiˆ`{„ZšÂGi¥:^Œ9]†`u˜ae‰Bm{Bk^š±yy›@Zw9Tv:[{`n‘gt•h—®”î쵂°jmŽXkŠThŽOh‚Sm‹[g‹>Rz]ˆ³€z¦md‹ro’lr•]a‹c~¢x‡¡[]‡Yr’fUgMYnBTr6Om4[nTƒZ„›Vo‚PTtGe~Sj„U|—k¬¹|—ŸUŠ‘czšh’®‚¡ÄްRstL‚}SŽGjmBbqS_sKctWƒ{]ŠŠkšsЧz€§mr›M[zSw£o’¯h‚±n~ž[w‘bœfŸ¥]¤w‘±niŠXƒ¨jˆ¶n‰¬Zi”Uu¤sŸ·}—Èpt^mŽdnh|•bn‰@H_2A`CUt\l‘[r•[h’et™u’¼‚¶Îk§Nb~SeXl‚^h‚Qj‡\z§k«d‚Rd[pƒhr‹m‡©b‰¡RdzWIY<bh8qy:YMa|Tlx=_ˆ>c€KjƒC{†J†•^ˆ¯q—m“£aвnj®„d†uOtMh]Coq3aŒA]s[ggBhs8iyH}zL~‡MqƒRdE\€C\}Lcx?n‚:~™O˜[qš^r“iq€N€}QtLr|Y}ˆM†‘M\¤PY}aicDz{C…†B¢›Xr¹ks•ulr5RƒHrr7qw3ˆE¦ŽS¤_ÿ­kpzKLq39k20D31?/^Adv$Eƒ=VN4Ch$U\>8h7?G/eOr* ž^jµzJ‡a_[.†o,™—6iŸV\{_dn?En=}PL~ƒ`h ‚]|}<yTD<:iW3z‹LQ¤clef…‡O˜§ke¼k”}P|˜Gf^p?yp:y{ql‚}h—zhˆ6`˜bk‚Kw•Pb“>s‚H‚‚Gj©M†‹VÉ£MŠ«Wb¯Ag†K…ˆ<v“SwlŽ’P…©\¬¡o•Æb|§h·–\”œf¢¦d••p“®f Ó~œÒ‰°¿uÀÎxºØ“·ëŸvÓƒ·¤uÍ„¼‡Z—z[h;„Š3œ¬I–Å‘¢e²¼nŸÜ¯sW›Sžp?…Äl˜©`‡´jyoYVwGf4ƒq=¼¾Q¹áЇ«z¤džª‘¢Áv„¶}]yGv~>l‰Z€¡Czd‚…QŸ…L¥Ýnn–ŠˆzKu£qU€ZžC´ˆ¶l’|dŠÉ€q¨\œ}G³WŒ«Uy£_†¬TÈ¥J¤òr¿¶LÉïŸñcƒ¦Wt·h{T¡­LƒÂ`­Xÿ§K¢º§M¥­Jÿ®@tÙlM|–?s›A¡;‹™Rµf†˜Xp‘LuƒR £bµÌaŸ£«ÃŠ–¹…Å·oÆãwŽ¿‚§­u…Ϻ™wD—Àj¤Æh”à„‘–I€ŽQzBæ³eÁÿ¦—ч‰¥f Žc¤vŽF´¤B³¼c}ÂV¥E­©eÄæ¿ÃÚ–Á¥lİw¸µn¸×€ñÒmüÿêϿ…{O¥Ãf ”a®¤U{ÅT]u6‚y5ž•Z‡šG–šk“ƒZ¥Ê€œÄVË£S´ƒ³S´¹Tš³]žÍ”˜h¾çtÄ_‘»Q‚™T»o‰Çkg™NrnY“°d“¦Ww¬}€u0µ­c­ÉŠ©H»¨o ÀskžZD·—b¹ð¬¬è‹Y˜RˆBÄå¤s®S¢{€Å²¸§Íç¯[›ù…^q1e€Bwsb¥x ¬_QŒ2GV aZ3_‰9Rˆ2j\Iëÿ¦¤òƒ¦l;¬•V¨€„b^[~‘p•œ„h”\dnQº¹nw­UŽŽl™´t–ÉYIi=:O&DK5yŠay­Vg˜Np—Dlp>xž[Œ¿tx±iolT£™xÔ¦hÒ®h¿º†¤žƒˆŒX€ƒLv†J ‰Qf…1v{JgAsžH‚µY˜±jŒ§D{•N•Ás¤Òv¸îŠ­f^|DUuEg„Nh‡4Wi:NV3Rb2Nf4yZŒÂr…ÆcˆÀgn©SwŒU`:Mx.Rw;`‡FYƒ;e}Jwœ^w–_X}7eŠQƒ¬UXACfUzk£Q<W/r oœÑys”@Gk7O`@SyRi[~~±p_‰¨QW|”^mŒJp…Dd=_~>\vSuŠ`‚«pXzUSz@Zt<mŸSˆ¿cs¡Tt®Zl’Kg_„¨~wou‰bQhC;X9RpKd{Isc|¬g`?J_;bvRo‚@]i:`qS‘Š\‰—V•e–ºtˆ´_s—Zo—b’£n{™[xk„¥y|’pzšeƒ—Z~žV{Š`²šZ{;^wCo€LTdsHku`rno…n¢g„«]pdˆ§¥¢hh‡Yd}YŒŸo ¯z™Æy…©l…©^z—WiŒrn’}šew˜W†¿m‹¹cu–FKkDZyUsZeƒFUl-;N0Da@P‰KZ…^gku“\o‰gr•Œž¾~Ÿ±WpX|“TiLoˆZwšg„´yŒÂ_~›LlLguTt‰l…h‹MeyEaaEvr*u}>]“IeSs=h”D\\}pN”C€¬U~ªqt™ok“^mŒfc‰^[zURpIn_:†2j›Wh}btvN„ƒHk–afyfvuRyRy„M~ŠQ“O~„JŽžLq²[i™jl[g‘azuP„K‰~QzXm‚Ot‚S]ŠIJzT]b3ww:tz=›‚R¬–^ŒÈ¢›nj´kV„jYh9rpG…‘Bƒ¨`„¢ft‹Is‘CA“K$YH<<"Kv-\ŽSGCS_,Iy3I]4KR(d^&Pn/X]?eqWz‹`H˜T?NNCJ3lZBrgCN–A<U7:H-œE!ÀY„ž€`°a°z@ÀÉB¹ìŒ|Ö™Šƒ{žºZµÈhuÜŒ¢Šoœ›Yuœ{Vpi\dE‹pE£Ah°eŠ9‘«]™§NµZ`iª>ƒÉZx–kvžP‡¨IšŒLŠËju¡sš¯R³beŸ]e~In‚=K›ˆjx­g—’^ª™K¡um˜TU“¸d©€‘Ä…©»zÝïvzÿªÍƒ‚ãÉj•Æ™w€ºle¤K{•?w¥Vj™|„ŽQާo Ã`m±ƒb¦]Ε;—÷²Êi–Û•[¨e^l/”t/q”h—ˆdŸŸ€¸ƒl–_ŽŽj{©x‚ztp¤]noKx“A¡©Wk­rKØÐ?që­Ž’fƒÈ\}²uSrNTl8io;Wi8ih2`vc{`J‡‚K®«`„Äu–½R„¡[sŸ€y¦J—¢?“ÀŠ}¶‚“N„_Ɉm¨»vb›mˆm'µšSʵ„­“{Ÿ—r¡fݸ^­ø›ÀµK´ÿj»ÅežÕk»ßjj°ie‡?”§GÈ]y£r‘´^¶²`™Æv‡Š`w˜Qº~RŒÍ‚…du¸‹D¤ÃR᪇äáÊzÔ‚˜DÒ™[³ÿ±½Ì ò„uŠ@yG§¢L×£_®ÏpôÍqõܬŒÿ°¿†KÞþµ«ë˜—¤JŠ—NŸŒXºÚ’}©:ËÁxÌÜÿÿ¡ø‘Èdÿÿ~™Ú|ÚÿS’ÓOõèuéÿÃÅ÷‰¡ñn­½ŽØÚ¢‰®jÒ¦`©­€}šaŒ€_–ž˜UŽ=bkJ–¢j‰pƒ“WfeTµ—x«s:K)y‚<‘‹sƒpr¶E†‡U“aµ™VÊÿˆžÊQ«Âwœ°`»é‘»ú§œÚn™„u]² ‚kŸZc}9‹“[Z‹7—‹d„½xpƒE‡°L—¯Z’’]Lr5AL XO.voD¨Íi„àaV€#ÈÄ«¨øx—6¢šW‚gDˆª[b†GŽ‹Y‡¦3©§g¦Ç€ÒÏ”q»L·¶wÚÿƒÕTs¯5=€%moUšÝ€„¨gtE‹™Yœ¶”±r^…LižLgkX‹ŒrÕß|•åX€L’gv‡J˜£aÈÜþÿª¸ëf„—QnA˜³|©Ù„±Êq»À®àûžÁìŸ~±blŠMcˆCTl5JT1Yw:Uj1Jb-\lE€¹V~§b†s„­xo’R`xATq7\z==S*Hp7n_“Âcƒ¡`©Ya‚Bm‹A{Ÿl„¯kr¡Mz¯V…¹U}ÃXj¥Mt†Ëß™q–K]s:Qk(Rl>‚ bv¥Md}V‰©i‰®ƒ“¿s‹¹doœa}£n]‹=tˆL`„=`‡VeV\zMg|9`‰Rвh…³jw™[ržimžaSzGTr\c€RZ}OEu85R6[v[‚´Np\x·i€¿Y„³Z€‹XxyS‘vJec=WiENcFYqgYs_b~kq™Xaya›vœXt‚]w–W^{Qw”a£h¥žgŽ˜c‘—Y„Hn‰KhƒOj‰Pi‚Hy›]o“K^S`„WiŒ\„—i•˜m‚‰NhxU’—^…¨w–¸‡¬Û’·ØƒœÆhl—NXzTzdlŒMe…d†·u†¥RM^4BqDZ‚OvRm€@Xq;GoEf’g‚´kгv{–gpObsZgƒplŒ\lŠTm‘\}†VdtPm’ftžos¡x­cy˜O|‘S‰Ÿf’¬e€†Lf|CVlAejT[u8jo;f„Fnˆ\‰…VYœUS}umhN‹€<ЍYu³rc’nOŒbOmO\b>Sv:Qx6‚i-Œ2s¦`v„jo‰a–~Y„¦lrƒ€c€WyjKsv>ŠyO{†VŠY‡œXm¤^m€c\ˆRoR}wLtƒPuƒTh„Jh†Kd~Qg@qƒFvEuˆFp{I…|E‘‚Spµw•mr™`q•q]yD†rJ£?x³da’rZlLvt>{H|Ÿ\`¢H†s?{§O…›QmªU‡Oc²IWŒ]yo.ž…-†¶Lv®U‡K“PG‰k?A[g;Gf$‰Y+Y§B/kaF<(lIqˆ3¡h…³mè¡l¦Ì|h¶®y|ˆ–a¡®x’¾z²”q©ttkUkm[¥kK»£RŸÏt¶ow±n_…KxpA{ŽEo—c•‹GÁ¼QŽê„b½„‡}Sx¨WrŽMZt`e`†9„‘`m|R]“Ghƒ<|‡OÃJ½à‚ƒÇvwšYxzN§@ÚŠÊi˜¸~¾p…󫅜ɳÉ^®Ûpv¼ˆ±¤HŸÐ„uªw_¯h›£j}Ùyœ®[…¶T¶»\‡ßŒÒ¨_¼Ì­—°ŸÑ¤“ŠÓ¡tª^sRC†VGW0^e }{;‚•V~¿T£·U™Íesµ_z¥Wi‘O—€Oo¹uÀ‘D¨ÿ‹ˆ¼£Ã·|Ž¿–œ§”¦v_«w=ƒ˜Bfzf\Š0^k1oŠ9…uFÿ›I“ÿ—}™L{‹5ÓªS±øˆŽÎ—•½†tt€c8‰[L¡‰UȼU­x¨‚T—¢hµWÿÄmÿÿ›ÜÿÊäü´ÀÿœØŒ}Žz¹·JÒí’­ÿtÿÿ]ÿÿМÿº¸}°Ù…–ÍŠœ³eÍ£RjÃ\{x/q—O’Tq¨r{J–™U—wù©ycÿ¹jƒ-Ûº=ŠÀ¦—›[›»›»W—Ïq³·`¸¬…ÂÊ‚ÜÌ“„ºh™£cŬ[¾Â„¬Ð‰ÇЉÀl¯¡^ÿÂÿÿܱÐj…Sg•8b±»NÿÿÔâÿì–¸Óב¿†¾½—Á®˜“Ô™Š¨cøµk}¾‰™†kÛži‘¡\ÖÍe½Öxy}]v¢DvF|‚H†S†N¶ÃUàÔŠ‰ðXrwK‡«7‚¨kn‰V…ŒPª¾]~ey´Å˜£Ý¢´R’©gs“_©ƒ‚›a’eL–¤Gƒ¡N„‰fkojŸ|U¡wmq“;ˆ‹Q¸Êƒ×ÿš‰­yuG•ÎN`ª2WC"mDLß±ØÄÝÕ˜µL£Ï|¶ÖŒ…ª‚—x^¥Âƒnvvka‚dÕ©o§¯§°ƒÓ롟ÑnÀÁŠîÿʋĉ Êwx¸NpIWwI€¦;j–>‰­V~ž_v¡g—žu•¯…x·R{–c­Àœ¡v€T‹cïã°°Ë„©¢‘­¦cKb~?cŽHˆ£k¬¼Ÿ¢¿‹§É‰’É‚w´_Fr@YlS{ P[r/d„8f‰>^x<Xt6A^7Yqal™af‹Vj†\c€DQc2dpGyI’¤H€³c±b‰Ãa…¦X€³Vv”O~œb›²tžÈ~¥Ám„®a„·e½q„¸nm—=fMVh4K]5@V)l~I‚¨i”ÌT€¹i£Ùoq [{•z’¯^pŠY—µ~Ñ‚«Of‡Lc…KdCz«_t²BnžYk¨HUv>Nl<Ed=EeGH_4HZ<YiOf[d–Sf’;LtCoshrˆn‘Ä›Ì‡ŠªoŠš^…[Š“Q¤Ts™9?`6T^Div9YgAQkCsxLv~iˆai€Rj†Qn—Roœ_škœ¸r‘¦`…Vz^ŽYy{AsMhšRl–j…¦c†œbnŒTg‚Uq‚Yq‚m•±O‚™bž¨e”¼xžÂ‘Æê·Îú“žÔqožI[~P_xOi}H]\d’leBQnBužk–°g¦UnŠPk—V«e~Ÿhq½šŸ®`y‹Sv‹Sp”e‰¯\{œLtŠIc{H]…Ok‰du‹al‹ce’\z©aªndž®Í|¡­nˆ•TqŒLSpQ`a<og7sw5rŠP~–YP™XStohi:‚‚5v¢Nx fW–e:‚XMQCXj-Wp0^o/xd0{„:“Y›ltq{†ff“cajqWmSjcEbr2in@{k;pˆRwQ[“^M]VgGjnClnB_qFuyNz„H†WqKv„NrKz†NoŽXexM|EJzš`{Žd…€L{‰Tb…OƒxWiŸGqXf”el…JŠ‚Iw§OŒ‘gªZ™›b¤µl¥±Z€Çp~ƒu”^ogM›gye;‰…IH›h1_hP>7DV3YU9_g'Yy8Ÿ|6ZµK5jsIH(TQ%`U0‚r<«Ž`x­UWˆnfjVH¦c’Ÿ_†»p•¨|‚ZxŽU”};mz;‡q>•›Pœ]u•a^ŠRgc;–u2i¥g¤…Gï¢VÕö¢fãÉ^Šubz<[zG`v5|t4pŠBlqL†Sf¼be’_‹’T±©X—²Šu¤kƒYr“Ca‰Ex}PŽ—Yw©sœO®Â…–Ö¤ÂÊ™€æ¡•¥i¢¹}¦½l¡»Š†¹—}©X‘”]Š©lÂÊw¦ö®s¸vZyxTubpZ3pm7jxQ”o9à—^‰Æ«œœ[{Àqm–Ru6~“HÞ¹LÎÿ¬Ïñ¯ïÿ¦èÿ¾eó½dsV­‡3±÷u°ÁtdŽ™—Zq›q…‰]ÁÐd’Öª²ªt‘Æ€m§Zl|RtaK‰„6‡¥U]™I—‚<«t¥Ïf‚™^ƒ’Cu‰…lŽZu›Uº—EÿÿiÈ僅£vŽšwvŠm…Bÿ„iµÖj~ L—VÀkàÑý«‡™m¶ŸqØýÑÿ¡Øú²ûÿ­ÿÿ­¤ÿ×Ñë`ÁÑ©êáƒÄäg~¹…ΜSxÌyp€G¥qDx¿xm…FuƒGn•>W¨¨€©T}œQr²FtP€©CŽª>†¼i‹†Q€±WŒ…G®£c¦“Më왬ߟ¤QÂÀaðp¤§s ’WÞªqÖÁ³ §ˆÊº‘ѽU„<€M©–m¥Ê­¢`˜\Z€Swf2¢„]sœa——H¨´wq‰cKa(ªvG˜¢Rµg–¶q±Ü—œÎ| Ét¢h«³D¦ãnšËM®­`É}ŒœKi…nq…<{žE¥‡aÉÝ‚”ÖhG{>c/y¯@„¶Q€¨T¤Ýe|ÈOv‰@nz]Wq8a_.gvBGb-Ž]3~{Dÿ¸žÜÿ„fº[ e_qŽ5¶¬©Çò´¸ØŒZuBLG+€‘<Œž]|ªf” _|œO”°\ŠœYuœJq…D†_>Š‹pacIˆ‚a¾Ï¢œÜغßì‹­Ú”ƒn¨­q¦óv¸j€«as»Io„Ra^WeE~™NzifÃ‘Š²U¡µjùù˜ñÿ™Ôuœ·–‚£]t P3a%ZbFSr@j‡Y|¦|w™n]vRj{a®szµkl©CŒ¸v¨Þ‰ŒÉS“Ït¾áßú«žd¨°s‘¸jfZjIv±CqŸAgM}šZŒ¡nj—Nb|i€œyžpªi‘È~ŠÂsˆµh…­[pšco\—_h‡Ih’Pl“Ug‚RhƒTby=Tz5[p?s„WmŒe}ªd~­‚”˜‡‡¬UZzAp’MfŒOzws˜zfŠX~‘HiwLx~]y–€“¼‰¨à“Ètq’Ft—?Rj4H^3=U'7J)D_5;OFavf|šgq—?Kn8FoGw¡qx«]X{Fd…aвgj™a~’rrŒGiŒM‡MZj,>^*F_;Qj>LhFhRai8LjLg‹Uj“Vgc€£q•­tœÏwšÞhx£Su]Ž£j‹¨`l†S_wWn…Uu‡Lt~Hn‰M•|¢Èz›Ôt”³]w˜o‹¬ÁÒµæì˜¡§ez“PœU—H]~Nsnvžfr’MmMbŒfq¨k}­m…±r¥Vc‡DOoDLgfW€•³oЬnƒ¤p~¤r€–V^yG_vHi”Os‰RcuX^alŽ]i”b~¢sбu‡¯±ƒz˜v‹`’^MxEN_=H_0dX6t{Ck_Q‘[^n`ˆm> •>l²Te•_XˆRYwTmmAO9TuCVi=U_;To<‚_J~•Rl¢pc~pNƒYbWV{l5q‚>coFQoBfX<xd;r‘Vl”lNmReL]c9jp:y~BcŒLayQymHjˆA_ˆSowZvvLgNarOvk:|=s“Jf”Sg†Ov‚>ˆ@n©GaZvpB«=­¶Z޲s«il‚]‡†;‘–NrŠjbw^[{[vgeŽ“N‹¯[i¯vo•\x¡H‰šP~Ÿg”…D…ŸG‚œRˆ’P‰¨^…´fx¡oŽ“q‘¨Hk‘TjwJz:ŽJ}‰L†|W¢‚D™ÂuÈ‚¨±v•Ȉ}£šŽW³n¦Z¤¬\§ºp»l~~U{kO€‘O„~Jsž?„~K…“c|‰Kƒ‰dŠ£€h¢q\Œ\BDmS-f‹>tM±ŽD³ßZìˆc¬‰€ˆgŽ©Sn˜€€J”§WÔ³\{ì“Tžkbr*M|D{]BƶRœñ†›Ôq‹ÉˆÀ|‡°_|­X±’W“Øz£ÐˆÕw¹¶j´ênƒ½ž‚€e¦³By½tnCyxH]yIunKµ‘HÌÌt‚fMŒQkk:_†7•^F¯¬`§º±Î¬°éÞ¿Ÿöà–¡vy ”r–ÐpŒÐv§j²mj¤T†‹MšŸy¤Ä½¼yx®™”wNN€Qpm6˜©; ÀŒzÂqpœaŽzQ›´^«¾j‰Ïf{œO”P‡’\Æ‹L¥°ƒºµeÁ¾\Ÿ¹]«¤TšÏU†—Or–c‘ŠHu—g‡€^ûქÿµoÝKǹ<Éÿ €ëµ—‰ZÝì„ÿÿÀÅÿÏÄÝŒ›³ƒ¯|€×«lj§h›RНijz_ˆ‰?—Çiƒ»`Æ¥FÎe‹Mt<‹¯hn>š‘Ng¿gt‚Em‹J”ºfy½az‹C¶…nÒÞ§Á£oµ¯¢|Ÿi…“Jؾƒu›g™P””Jž¥cuh}†I]mA\eOYg=y‚6t•Pn‚j~„LYxSˆ‘? Å<«¢q›Ã]ŒU¬±e»¯ig‰Cœ Vˆ¢c§Ñm²Ñsya” j»ìm²ôw¥¿†¢±w¸¶j¨Ñ”}Ò‹tC—Ng„-˜¥RbˆI‚VKÍÛ™àÿ¨™Èkv‘Pv—]n€E†c©Üs ·_—Gm[/fvKvƒP~”7Íñd¡Ëq d~·tq6[œuZ¢„Y«¯f«¦}â㪤¸ˆm-¬¯Dž¾Qx’E{“LeyE`p>ІK×ÉyÙÿzªä`gŠ;NT'ni7s‘LYŽ1Xb:g7o‘Sù’þÿÇ·ë¡Ïò¬–£×⽬ú‚qŠXr R{­TdnO•²p—¼zmˆW†›‚t¨\…FmŠEpŽYfœA]z0Oƒ(@X*byE\v2_™6Gk,Be.?J5†™’À}“Û`†ÊyqŽƒ‡—×ôȳàžl•T|˜a¡ºjr°W‚£pšÈ…”²‡°¶‹¸Ö{}»lŒuyŸ`h‰QZzAcŒWyšmt¦Nlc¡»˜Ãd˜ÁT_…Gc…Ek…UxšTm–Pr X|ŽYƒ—S|žUsžJyœ\k—`YqNtf\œ«qu˜h­´fy—Y\ƒFCj?Z€>\†JxšSp±Yt´am™c~œz| OOhHn…Yf‡Be…>Kv,Tm4_…:@\-2J2AXKlzNcwDctIc|MPhCGaBczfª¨sw~O_xdŸm‡œ\l};Tc2Mf,He5Qj3OkJh‰Wj€BcOdTs˜_‰¡b˜¨n”«s‘ª|¦Í‰“Âo†Ÿb„™k|ZdQv‹a{œb¥Y‰ŽY†°{¼Ó‹³»¯Í“ªZ~”Qt‰c{m~]YsDoŽV‰–atŒ[ªv”¶– q•R\…8[Œ]†³h{¤w{œsrœY^y>Tz@VuOYpi›t‚Ÿry˜`s„]€Mor?`lU‹‹cŽˆNprKs{_pŽeu©kt¢v–®tuwlx“^††RuxWX}LYkDWo?ta;i|<s†\j_o‰Zm‹G}H`V`\`Gh}Io†Ig†KN€LLdCAO88Q7eI4vh-N‹[rdfa|DjsRn{8YJ[jKKb8P^8fc,W„Il|eh’ZcƒXkzDyz?€„IM aFhZ_N5gj1`|NksWcsC_uJOwIW`Bxk4Ce©at”Vq6…€>{’F|’j…‰D®|C€©^Z}_taueCy„CBKLkYrg9w’@x‚\ŒId§gx…s—XÂcpµznŠv“‰YЏel³uœi¥»q˜Êˆ‰ÇЦ’e—¬qy–ymxib†SutIl“GAv`Œ35®[~º“Ÿ~|¤ov‘wt™Ir†I‹W‡a”‹oq¤_}„K‹zA••U‡©Mk¥Y{ƒK£’Jv¢cmJG¢ªUoׂjŒYy‰7^™A}…J›©B“°j—«|y¿†fkˆ{B‚`™CyÀpm}X„}Uz±onžWX‹Kiz3™–8Ÿ×}´Ü„«õ‰zÔ›s m€ˆgh‡HS~|hW[p„L•va¤×nu³‹otS^‡<NqClY+^Y3o;’¡Yz¶Pq¢²žJ‡Š_­¨JdÁˆ’i9z”Q|“m¹¦q€× Zl‘–…VyŸrŸ˜M±º~˜Ìƒj¶xZrYŒpA²¨OšÞ€›Ãeg³‹kZEms>£=¦Ïš­~’¼Y‹ekcGuˆ8°‰C´l‡]nŠ?h€<x6˜C‘†EÓ…NÀú¸¹ªÌÿ¡‰º”™©gФYp™joMj€?«‚VúÜ©ÀÿÁâݦ²ð³_·™¹z1š•v½ÃškŒž¦˜M¢µvŸÄaŘfµ{ˆFˆªV»£P¯ù®ˆ¢q•¤aɳuŸ³‡u¨Xƒ‘=Œ’GоIcš[ÂŒLnÎuuƒA… [‚—o‡e€€f•cŸ‡^̵^኎š^°—MÂÉSνTq–Edx;jq4Z€CS[!MY'ds4ku5ˆtS½¾‰¥tšSr»Kx©M~”LŸyÿ¶¸ÿÿç»ÿ™ÇØŽ®~}œhŒv”À•aŠ9µ»]½ÓŽƒ»ŽfŽG¯«Iˆ±hÿã•]¼Šwn:m€?±ˆ<¦˜lw¦Kuj:‘–O°od¥UfrMg„=‡[ÊÔýÿØhº†Vd4nz,}‡K£¶kˆ¨~›”«•¢‘vpD}hnx6~“]Œ‡sÆŠqÿ³˜ÿÿùíÿз÷…»ªpš¸‹¡´_}¯Kim<¶spÿÿDZޗ‹£i¢Ê{bœGu™7’¡_¥šh¥·nn¥(@‘¢F…´T²ª‡œÇi©µg•Ømyk¶Á·ÈÇ ³e„›q¬¬jd‹;}„…{]‡¨—Þl‰²fUŠ2Ue=vƒƒÿÿÈËs]Œ7_l:Qx/[p>Y{E`€F^8Y}6{Q‡ÈsÆf_–B^wR£³¸êéмèvÒúªÛÿÁÁ„„Çc}Ÿ[ºê’ÂᢔÉm†¹hk DK_;\w5_u?¼i‡Çp}°e~©džÝt’ÁqmšIGg7M_Dƒ}p[sQi‹ZˆÂYe’Jv‡Rz¤f…¶d¤\qŸ<Q1U|J–²v~¤[}†IgxY¸VdŸ>cGZwN[pZ˜¬{“Äx˜¼^sŸV`7Gc2LaKy–k’Àb·`p˜FJ_0HY,Nb(Cd4I^0A]0E\5h}Jey8XeBdvRo‰OgLu‘qrŠWIc1?V(Ic7Zw;atM|˜X˜Rˆ–U~¦[€¦eµm³ct…Stƒ\…‡gžm”n~fƒ¤p˜±hs¡_l˜\|˜cmVj‘at™w¿ðºÿÿ¨¯¶w‰›v“µcwŠN^†BZ}Tq–Qh„Nj‰]†–`€ ~œÀ’£qku]n„PqJj_ƒ±{§jn|NYvW]Šey™g‡§|·Ç…¤³}вt…¢g’f”˜WvŠPowYz}Z{„Olk@g`CMfby˜o‘˜h‹XzqSjp`w„]}‹Tx‹PUw>kgDs‚@hŠTY}[asYtmIp”Usœ]W•]RwSbrEQy5WqDMr<Tg:Jg19hB7@28D%_B)cc%IrDX^Pai.]{B@{<EX=N^0pN,|l1r‡Dw™Z”£`½_uµhr `oŽW„NTŠRUmV__0kp8h~EZŠWgrQmhA]}CmqG•w5w²Ml™pz…T—9«–G€M€Œb™…K§JxÃmM¢y\nOyc'ž…<–ŸTˆ³]£—Lq­vKŽTWDigBVzMyhBv™Iqšh·–\ŒÇ[¯°t¹¿wÉÈ“²×‡£×¶ZÖ«F€q_`P›m>`‰R_vNoqGdˆEAqVQ92g`,QwZjrP‰„P~›pycs‡N²•L€›H¡™X|§PU”S‡}=“’?—U”£[šœQ©ºcÁÊtˆñ‘©¦jθfð©‘„˜¤“EÕºW§ä}™ÒqzÉs®™b‰Ê‰w°‚–R˜¡Xº_šË…®£fŸ¾a¡Ôsy³€ƒ¤qq£L |^—ÁlÁÆ£¿Þ”QÙ®Q^JRr)R`<_p5?M;^:;¡„5ªÍ}¢Ñƒ‰Ñ€X«sP];ca-o‡7p’B®§O¼É|©ô–rµŽqeB“{>‡¥x‚E›ƒ>Шeа•w’|I†9 V8“Ÿ}´·p¬ÄsÀƒc¥oŒT¥Fͽ|Áì”Æá§lÚ¤}q@`ŠIr‹=¨œh°µb¨Ë‰[˜~biJs}5°©<ˆ£NlE‹†;>‰H¨€P”¬{˜uËÃŒ÷í”ÿæz§m‡˜Lq”eVtKEo-HQdxqz<i„]ƒ—c„ªnN›qmz-Wz8Yw:Nv*‰ƒ5zÅ_Œ„\¢˜\–že’P˜\Þ²x¹ÿÈ’–`» PÜœ‰ù§Â¾¡—¢e­¿a‡—qo¥W…A|Ÿm°‰=€ÄŽ’—B‡¹Wtb‹¡Hɳ\¤µkŠx^¥˜U€œ\–ºV™´l¡¾V…›aP~8ep;x†JO—<sa:ƒ›Gˆ¦Llr—•L¢¿‡v R‡Œn™¢[zB¤ c–œs §•|›‚v‹Yyˆ]y’K{¯ZyŠM’°pmd0ji;€‰FÜÑ{và„Ÿˆƒjªh`9¤”NmIÿ¬hÿÿ·ž¬§›šb¢Ý”½Q·«[š§m–³_ÍÖ¦³ížjž_gx5³Lšb•›vd›Mq€"°áG¯Ç•¯§Šª:„×Cމ7¯“`¥ŸfÏΦ¾¥£×…†”dx’M|ƒP•„Rˆ‘8…]œ³£s]A}ˆ<}qSЂÿÿÞ’Õ„<I&YGJÕ¥’ª·js ^Ja<€qSŸ–RÈÌÊÿ›°µ‘Åç¢ð€RO? Àe¬ÿ]S‚(Xi/|“K³¾®ÕãÂh™Xšµj˜Øap£Pš¸¾­Ü¡X€8Ty=j<\}HY~:Ei/wvkvŸXrs^Ë崲㒂¯d\€:cTˆv¡Ñ˜§ÃŽ”±d{ŒwšÍp]™OsˆÍâ§®l`UX4>^)csIX€5Jq:fƒcbƒj¦u[|gbveš\[|F{ HkŽ=]eAyŸYo‹QexPcsV}–b|¬Xr¤^‰µ[z¤Z‡½_„¸h¶bvŒM|’\ªÎ…­Ývx²G]~Aj‡Oo~[‰¦tp¤ghŒh‚¢U~´Hu«D[…Sj~hŠabz:Nc1XuCp†N“I[i7FQ.O^JkxVYeGh„VŠŒP^xTy•c|iq—Qp‰E]>iŸd¸o‚¢]x¥q’¤SjƒS„™q•¸r‚¨u|ŽiZtSmŠUwŒ_‘ c€_–·{›»›·p”¤q„£i€‘W޲a©u ¼½à⟲¶hzŽ`€ªavžW Yz t”Æ|б]a„Ok–d„¦Ž­ËŽ˜¹]^sE`say›hyšdƒ¥tŠ^ZlAQwg‚¡z’®}²›¨Øƒš·m‘ªh…®m†¸ƒ¬Ú¿Íw©¡i£†V™‰]‡†B^]8FVHIZQ^bJh^?ebEh}UqzTo€\ˆ—[{†>Š]¢Nj«d[’v\|Z‡i?vœBX«mS€i^jIpy7ZŽ>ZlO@e9?U/PR%Ga)G[<B[0eK,`Y'Jg=a\9lp(xŽ?h“Na€RMHiVA[0‰ˆG…¨h’¶l€¿mt ~~’ju cX…SQyT_cOgi9f8`qKXzIXxIoe>kŽ;e“Zt‹KfšY]‘fu{G‘y9™ˆBz›^q•c€M´—TªÇnyФU®€xo@Œ‚4žQÀbƒ¥i«©|xËsj}nlt?Œ|4q“Nw“Fy”Mm§Sn’OlŽbt|Yƒg±™eÅÕ™™ìÁ˜½œœ¸h²N™œLp’Um}Nl’L_{O€q?~F„ŽT™¯Oš¿Uv»pˆˆc¢›Gvªg†R‘—WŽ›N¤¥Q–¾V“«\v•W’‰R¡„SƒµqÂŽq|â–„§|w¡Qi—f›Œ\ž¹B©¹i¢Ü‘­Ã‰¬ÊŠ™ÊŠz´xtlj‚m‡jR† fy¥t}Œ\mvZ[[o‹M†’Pl¤K}ŽO³«@Èš]’|hliaŽKg{/^|4=bFI7#>"•¤B„²m«lh‰bk…Po‡FŒ>²ªJ–Õ|Ít|˜sl¤n…^›‚@šœJš¢c[™el`5w…?€RjˆVqˆQ¬’N±ÏŽ’«›±—h†À“x¢…€h±¬Zÿí¦ÉÿLJ³Æ·¹p”¶o¤‹V©Às Ì‘†·ZdZv‹?¨¾6r¶M}6{}I‡xXž‘e¾¼e£átÇ V’¯™®–_í“¿Õxj¿¬•šOlŠP‰¢Pf”c_”Q[ˆ.U“5…—$œÐSŽÇK‚·ek¢Nk…7¤{=ƒµXf3ŸŠ9y¦uu„P~…M˜¦X°Îm™Ÿ~±¼räÀ|¶Èyª¯k¬½aÏÏ€÷À˜ßˆ|•c©ŸsšŸ ÌÑŠo—w£˜TtŸcœ°W‹¿mt–eƒ©[ËÄWš¥l§Žc‹ŸRy™]Þ\££Yvf~¶[tŒ=ƒ°i‘^¼ªi‡Áz£eŠd•¶i‘™sËÁ„ˆÁ€v‘_{]ƒœc›auƒS‘…]–¶n¡·g†®ai˜OYq@^MX2wŒ.g|/—œLôôœ´ÿÉw•Ow‹{ŽW¶™^´±Oÿ痲äw‡=ÔÌËæÎ™À†¬yvÇP£§sšÑŽs€a•‡JbE~r\“ž‰•g€²r̵i‹Ø‡Tw+]Lž„‡fLÓ¡±´®€Æî“ƒÖmx|DñÓƒpµKj]6†…Ho†@wgE‘|IȽˆ»J­‡Mº¬gÆç“Äﮑ¯Vn|E[kB¤xhæÿ¸­Ç©·m›´e˜ÇY¿U‘Y‡¸L”®‡¹êŸ¬Ìd´éŽÁä©`=„¡Vˆ²SiŒXpRy“}…¤uŠŸpV{U8R<…—€¿Sn“W}”Rw¦Qa†?Rk6lU`’7i–Y•¡˜‹Å}~¢v¿c QyºRyfvjmŠikˆkˆ¡{Xˆ8hœJØzd•AwN†ÆODq'@]*dnOŒo„›c|Ÿ[~·Vh“:i„GEp2@T:}†Ž¢Ê¬É¼Ûek¦9o—K‡¿[mlTY‡FLo:ZƒK[p`xŒw‹‘nŒ¢w›>S]FЇ–§{oŠI‹^r‘WW}Cibx¤nz›hlŽWZxTe…\]zAG[,6I'CS3L^DyzTutZkfDTa8Vk9]iNk~Hr†a”©e©ªjާl¡Ù|›Év}šboŽk…¬uŸÃ”®Ì…Œœb’¢k„šKSn:Qv\w‘d~£`|ša®´}š¾m„ª_uœi‘ e{ˆ\zZmQ\cPcpUw~PfK[…^… iŸ{Ž´„–Æy‚®\®e³`…§lŽžmz—s|žYk™Tbi}›ol’x‚µƒ”¦X`}_­oНn‘¯v—©iˆ›Yy—o£tz©„•Ä‚©¿i¨VkZsŒhu‘~ˆ®”±Æ…†™c‘{c¤Šgƒ”dz›Hi„GdtNs‡Kw}DpyY|’`‚“U|Še„žsmŒPj‹dp‰hb‰bŒme£`w†cp„DK˜h_p^i}?c‰DVˆDQ|RAlBKV<Tc-Yg+ak7^w=fvBƒ^6E\5RP7W]*vo:‚‰Hv¦\]ˆs_{_gp<Hƒ[‚ pf˜qtxq^‹_k†``mH`HhzIzvKo~CYpNh\Fe{7‚sKŒœJ–ªbšµt”´p€³h}¦Z}“Wy‹Sv™Z}’bŒ}LÖS·Ðw©Ù©Ì”Ž«w¦±TÛÀe£ò‰¶Å“™Ñv|¹Žrv{‘}H°°Tгki›p¥P•ÆVsÅuN˜ZXrCvr7¡GÈÁk›ñ¢”Ƕ¨¼p”Ë|¤j—©\r¿mk¨d‹„X¢Jz³`•†Y‚ŒR‰ši}«g“¤aj¢Fe‘]hzDŠv=¤NÄžW£»mdžuQF]nJuk6x}Z{‚Pƒp]€¦|cRr{Bu¦3§™@±OŽ´zn˜t^zb~k]ošgn…;¡„GˆÁ^Y…f†lP‹¡YgzM[gC–t=`rmk;cQW‹Py”ZÄ[ºÞ‡„ægm›rf“BdoA—ƒ:…EÕWwŽTMF`.j`(}€7c—]œ’8¥ÈWh±¶dhŸŽ7rÂYÕ—=Êÿ„lÏ£_@be7>u<QJ/vT9«•F“Àj¥eœ”W™ƒSTLWW1¨p/Ÿ—n–™x~sx©QizTz{OÓšSÁÉ{«u„¤]¶š^Àú£ÜwœhªM™ðc–Îe–YÚ‘n½Ú›°Õ™°r™™i¶ȋ¨Þ¬¢ÅfzÉyÆ­U¢á‘…ÀZ¯Sƒ±d›”>œài§Üx”áqËz–‚A¸®Qv»Œ|=›ŸDžÒz”ŸPÛ±dáÁ{¾ÇqwˆY²{O¹Ç‡Øßq“¥‡àŸ‰¯éÎÞz•£á¤\l>ŒY‚‘T’¢a°‡sª½‡ƒŸSŒ¦Y;nÿÿÙêÿÖÈÿ¬†Í{¤µY¯˜aâè\á’lÉËzˆÁdq„S“ËukšIr 7b|9ap={ˆ5|¼LnƒO|ŒL¤Ár«¹‚kœ?pt9Š˜P¤©^C„xC—pm¥c‹nc¢‰w•µzn¡Z]z7{qH­ÄaÂî|¿ò£ªËv¤ë€­áM©ø…›´LÿáŒóߘšÞ­¡vÓ¨­¬ÓœòØàÿÒ¤Ö•—Åiµy—Ì…yX”tJFÀTŠL¥ÐSáÚ•Äfiˆ?¡ªL Çkœ«qÄÕ‘Å´rš²—¿žh`7¨pUä«“×Ô\³ö{¿±hÓÖ•ªÀo‰Íh¯½oÁÞŽÉü©·â™Š¸g¥L…ÒRU‰=¥†œ™ÚY¢´vÚð¢Ûÿ´µÙ|¯\sŒH›£„Úñ¼Âæ–çÿÐ½ð©—Øbz“fˆ—_‘¨njŠFƒ£oˆ«kk«R–—‚È÷…‰Úl“™Št™f ¶ˆ{³Ku£JZ~:‰›Xi=|‡q‡°s|°bkTp›Mªi¤Ñ‚mLPt:`|8iN€œyx—f…j³y‰­Ye’OW|DL\'_}1Y‘2W5i’An‘Vk¥JyœJ©FQ‚4uŸQt”PRm;«‚_‚sq½Á’¾ln”H£Tx¤b¡V‰µ\‡•DQo2Us<q–\p“Ov›NhŽRuˆIp8_>q—LYiC^rLVlEn„\Œ˜Iq’Qw¯`jœQR~@U‚Oz VsžGdj<`j?bpDƒµn…Â[sM—vŸ½ˆ®´|¤°ƒ©k~ }‘¨|„¨ln•_o—{ž½‘Ÿµ_sYr„cuŽSd†Nges˜s‚«m‘§op“kp†`o€Wk’c‡œb„„I“[˜Eb†D[€Gm„O‚”V‚˜Nhˆ\{_uŸt‰·¢Èsš©bwŸ]{”r…’PbvDNqQf‡XdŽl®f‚¯tšÀw|’Vn“yŒ¬„Ž­{ nœ‘®wŠŸcsrŠ·‹®×~§ËZ†¨@a~/Ag2<]@JpRY€\‚ŽV‚ub¨•o¬º‡¯ÀlŸYy]z‰`‘‡c‘’k‡¡qƒ¥ht‹am}XsTQŒbbr[aqR¸{QfœNe |ZlM[sCm~Mk‹Bn‹I‚‰YwžVY“ZE{KR[;Zl1Z~7a{EK€LNX@=N.<R7QL)zf0˜ˆ0o´Wv…u‚Œc}¢cx¦js–f`„_ajSgx[]C`qRpd;ƒF–¨_ƒ\tŠZRzTj^Ii|1ƒ|P‡¨WŒ¹o‘ªw’¡tš¬yˆ³w“mx‹Z{Xr”\‚ŒWœˆU¢µl›Ç’‚¶}‘®}¡¶gª¯f†ºx‹¤Žg£eZ~‚_JŸ<s©r{‚q‹yX‹uJÄ›R¦ÜО‹œb¦I“¿`«¶e‚¿x‡°´oŸ¶vžÈkƒÇ{–µvy®lˆk¶ˆH‰Ðd«z¾a¨Åi˜Íf¶·y½ÔlÝ‹n«t…‡E¬ R¨¡K ’k”®uw½s¢“o¶ÄVrØ’f‡d}G_¤CysPƒ{8ŠL”7zŒReQ\‚Gz}8u¡;ajPz[=†t9h‡`WqSp‡;r®V`IYS6RU/_m5ge*«›/ Ãecw“h×ÝX¦ÿ²tËO’d}f7ŠˆW¨rnÊuP‰\RV1VK;^s0h{4er8•‹5‹Á‚`¡sRuCƒv6Á­V«å¯½­Œæ´ÃŸ`£Ånk¬e‚7–ŽDªKŒ¼m‰°t‡•U««R¥Õƒå€ž›Q›ÍW€Óf­˜Gµmw—Qƒ—@‰ˆKƒ¥P`•Ub5º„7½ï‡Þõ”¨î™²–¢Á£Ìÿ­„±i‹ePÜ–vïú·›Ü¸h¯p‚N™³bÿ锨ÿõq³Œ‘„dŸºhš°eµàuR{¥1³ÞŽÔÆv©ê­šØƒr–vz˜<t—M‡ŸA³‡H{ÛwŽJnŠbŒœH‹°]ž _ŸcÏÓ˜Æÿ¶v§~“§C¥£kÝÏ]ïãÑ´z¿ÄvŸ©x¿¨pÈYÿÛz܆ª¬WÚá¡ÜïÌíÿÃÊÿÑ¢³‡‡¼~ŽN׳| ­}ëÜgúª´ÿ·Á›ì«}‘Ym¸G„p;–Ý_xŠb¹´h³ä‘Ùÿ{øÿwÙÿ“ƒ¾ˆ€˜R²¡c™o‚Miv?†´Xf›2o’0l^9k³Ã••µW¯p¦ªmÜù«Éñ™¼Î•²m¼õ“—Ô‘¢¼kŒÙi† ]–“p›°mØÅsˆ¤W‘¯ŽKUMvt7‡¯[£¢¬Ó›µ]š…R‡‰7ÈO“£YŲ—Ù¿ Ç󽞾–YŒŒ]•–tÏ”‹Í¬zá³½îUÓ¼v¥ØvÒ©c´·^À⛲Ѳ²Ú“œµu®sqŠj¨{éè³ÿÿÚ“ÀkOo-E`#Sn-fx9Ëè~¸çŽíáŠä÷‘·û‹¥Áp¡´W™¿_£Ý|•»~«Ý›‚‘ÐÛÖ¿Öª•¸e}•Gj–C\…?z‡kw°\žl¢Ï†©Ù˜‹°m_˜Eu‰^i|Pºçup¤I”®q¬Ñ…‘îPxÊ`x³i~²fˆœw®Æ£Ò‚”ÍuTr;_‘7Y‹=^‡Ep‹\Zx8dYU~§_Y{aXaOdlFwš\œÀ‚»òœœÈ€—ªw’®Q`|9i…6c–@†«xšÃp™Ôc…¹_¢Ð¨ÒlºôyŒ´\ˆÂcr·TYtQŒ¢|¡ÚŽ Ù€‹®Oo’GxŒd¬¿`l†Xa~5mFqŒEjŠHh…=Ni2Z~B^z?|’Z—Çp¢ºs’©oƒŸi¶fx³k޵|Œ¨k|†Bfs@mŠaˆ´ŠµŒ Ìz†¹r“³ˆŒ w”¨užµSlEc|S§³~ºÕxŽÂ{¡ÐŠ Ée†½dsŒGa~`ªwÇ…˜Ò‰›Ò„¢Å{’±ZSn7GlA`‰dy¦ZtŽTt‡l…š_}žbˆ¦p¨ÂxvªbuSv‡e„˜d™jq¨~’»qzŽNi‹SvŽgŒh‚ OcŒO^ƒYx ‚¡Ñ ¶Ë€Ž“[`xEVudr’o‘¯„µÎ‰£»v›«n„’E^}k©Äw› uš¤iŒ¦?Q|,Hr1Jt:Wu?@dCCd@UnWŒ¥m’³s‰´\q‘ZzTj{Vx†c‚‘o}ŽgxuXgcCUR6q€On‡Os‰dWzVš}LŠ“NN­zun^g‰5m…Lz‹I€‰S‡ŸVtŸ_cŠnW{MdiG_n7mw?a…G[WaqJku=iƒKetFhƒDЇF¬[x°Ž‡šn†©pe³f†wfzNblF_qDZxDlrC~B~B„¤[yœho‰amˆPy…PˆŒM•T¤Xr¹l…šb‚W|‰]eŽc~v`p‹Hq…bƒzOr¡ac’hq‹Vކ\ ¨^yÌ}Ui\zMP@blAhx<uƒPlIh:mrNgˆV€’D•–Nµ³b®ÊkiÄ”Œ€_™DjÀ}v•dq“MhŒYS «XœÀh–¿‚¶|jžlk~W„—J~§^~­j®–h¤Çn‰º€» tÁ厯è¬f½¡¿rSËO„™t‹g°®`•Ô›¸¦“´á‘pÛ»tˆ‚xˆGs…^‘uI[¥Ek}`;„žQl^ˆ}J”­T\Éz{`Fle8{}?t Xm~TŽK‚°a¡¨y‹ÞpXž[In8ni&jœ8VyUjl;t‚Er…SXŒ•`fM\sD…v9~ HŠN‚µpo£[aj5Zq/\n1z{4¤‰<[ÌPok{m¥RW•eUc.ˆs5—®l–¿oé°a˜Ø©¡yy¤|³Ÿ\©½w¹Í’ƒ¾’}£vˆŒhœ¾hÿÕ†~êܳ¯^¶º®yƒ§‚Ms¥oLsKh^0s¤6{FƒŽN}€@Œ‰C†m}صºýÇ}á•¢eŒÂ†„¬p“˜h­¬e|¿\l}@z‚Fw¼QœX~¢a€›q²’S¹^‚¦Qœ±Xk–€P‰={5•¼ªa÷¿c†ÿ¸Ž–M—¾g·ªMŸö}ªÉ_ŒÁp²ÜLêý[çÿ’¼ñ‹Öµl¼ÛŽÿ÷¤u¹ÏMgKng8“«S¹Ábª¿£’¢ƒ·Í|´np>’t=ÿ댗úÈŸZš¥bãÀ–Àù¿¦×©²Í{²¸t”ÐfµÖo©Í•’Å}Ÿ³}¤¯x‡™w—«U±Ü–ŠË]u¢j¯V˱ÿÿáÿÿêèÿÙÿÿµ†ç°w†Tk|8·”f‰¾W]v8s‡:¡W”tŠ@m«^pKrNÌÒƒúÿ»°ý¶}m‘·f—ÌhÝϨ–í lœOž–fè댵ÿ‚‡¶j‡®cŒžh·¸ªŒÆ†”­I´p¢q§Ò}›»nmg8qo2n’C²­‡¦›_¥Âœr…ZHŸ¶o·vcÑÜ©®àŠ›M®‰‹‰žŽ‹p¶Ë•Ë´ùÿ¶Ë·~šº`dˆ?ovA¨©ºÖŒ€´e«Ÿ}ÿÿ½…É[”žX›Ð`T0w‚JËø¬Àá”ÇÒ…åÿ”„»f~zdcuRi‹M¯xi«^atG^q6‘—xœÑ–~ƒS’ŠxÁnv£D]9‚”aŽžv–º”RuHawS”±Š¼ipœN‡“^x¡G™½qØäÃéþïÿÿá¾õŒg•CˆÉU‹¹v–Έ¦×ˆ†¶Z¨Êw©m`•BYm8Jh*7]!F_:[k9Ro2lˆS¹|ªÔ‡¢Ù‘s¹]iŽX©¸y~¯Lju9F^.>T@b„X‚½R¿w¶î¿ÇØ¿½ã¸€mrvsllœ›Qudš¼‡¤Ã€„´h®äzÀÿ—Þÿ¡Ìkt‰Dd}Jq‘Jr—]…ŸLawF^oD\v@ezU‰rƒ­m{©_ƒ½{ŒÅ‚€¯j}œr±tu¦[i|X~‘v©Õ}£Ñ{•·˜Á’µƒt•fy¦dx¢Z_ƒ;]~J¡t˜¡~ˆ£{’¸}‰Çx…»w~­]u \~™s›ÁŒ¤Ú”ŽÅ}x™s‘i‚™T„˜Ty”aŒ o’Ys„QqŒb¡g‰§Œ¯Ø¸âãkg€FHmRi…\|—o¯—­n{NkˆZqŽ[p‹`kŒCTmHZ€q…®•¨âÃÏæ„„ŸQWl6IfIKef~œ®Ëš³Âty‰]p}Rx•h‡A5@./IGNlAY@Z…V®e{”G]o7Yr;T}JaŽPsŸ]•ÁtžÅj ±W|Kj€Sy‰Qn}Hce5^Y3iZ0\rFcvDc€LjiRŽuCHR¨jgy}\„:[qGhnEh{BiSG‰]?`UNP6^Y3Xh4gmAtw@rŠNt“Vq“]w‘`pYs‘d‘^Š™`‡¯‚ƒ¹‹³vb nq‚_dŽTftRbrFjNs€Fƒ†Db‰LbyNLvJdrJ™xD‘¦Ss“fdŠUf|Kd‡Uq}Nzm9yuMg‰Z¢Lt£H\œzwsOi—@Q]M|Ijp%‚v3VcO{cKs4Mj&G\'Ne*`k2WnCR:ŸŠ3¡Ápʺe±Ö…¡È“¢qc§pa|Xtu1\Z€zZVš@YhD}r;’K­_|Ÿy‚e¡šj³½`|Õwˆ lx«[{ši…£[†±eÄ™a—æz~¼œZotiEŽw:qW©a¤®l£Ê€²»¬ÙŠ„Ò¸u¡ŒhŠ]`‰Jy~D†˜D‰µn‰³]^­raw^hu6Š}<m°eƒwV‰žGwÉv~V„ÂW–¸lq¦VŠn˜²fY•€f@„.¥ei±f`‹ERv:’O3†’E¥žQ…É\‹°se¥u‚ƒFo¥[†›Ky¹Kxœ]†©]Ì™P†ÉodŠ‚yž<…²Z†«np‰Zu8\„ d½¤^–Ä«±¥€©µ¼ºf¯Éx•ʆ¢©y~¯`fcR‘u<u·gšb®\~¦XwFkžH†‹@c€F†‚/ºX€¾ftªJj}LCŒ;{\*€«ná¹wÇÿÇŸØp¬{qŠIksE€qCqT[ŠL‘‚Cw·ggŠL|x8aŠMd}8žO‚¾ošps‹Qa›5r†>å“OŠ¿~¶¨W…ã}šOŒ¼`²¨Q™Ï„ÓÀj»ÆŽÿψÝÿŰ쉢Áˆ°¹mÏÞœs±§E^FH\)‹}1ŸÃ{ªÆ§Ê—¶•h¶é¨[¸CY0‚](ÿ‰dšÿÿާV«ö|¥ÀL·™~…ÏœˆÏe¨±L‰µj~T¬©Œ ÆžØz“ÆrtŽa¦ƒ^¡Ü¬×s…¼€‚q‹¦P®¦hæå”ÿÿÓÕÿËÒ헄Ѐyƒ8|€=x¸tf-xžUŠˆQ‡¨[pˆHxfI{f½ÓYÑôŸÓÕ|£ê‡ž´H–âdLÕž™ Ð«g†Dw’O„¤_¤”x²Ëp¸Ó‰¡Ä‡m„ž’eœÆXiŸ=›xg™z¶´¯[†DDU"`7ºÂ‰[f;Š0¨·WÑþžØÿ»zÎm•zFº¾q“’M——T…†>–ŽK¦™vïúÚÿÿÿÿÿØÑÓ¤íµ—|›QˆÀ_¹½Š™†Fìè—ÿþ¾Á·ÿÿ·Ãÿ§z±P¹Ô}ÏöàΪÁ—ŠÛãš’§K‚UËÿˆ“ÿY¦ºx»î•¸vŸ“y¬¡z•\{—=n€DrUt†ejqAr£C…¡Yz¡ar¨Zp|\¤{ÓÕ¬âÿ™É_Œ±UаeyŽar•i—šŒ˜®i²Îu¨Õuvº\\jR_nNIh7mlQž_}ŸgLu"F^0=W+?Q!9PPh>gˆR€™atœh^t]Fl?Zu.Z‹8pƒO…ªHBe.dÔÿ ßÿ§°Ó«¼¤œ³¥¨ºv–;Zw=Ia2kŠR}mKmxOަv¾ÄÌ²èæØãô¹䅊¾]o¡CW‚<fKnŒGG^6\_>_oAa~B[n[€ž‘±„•´oœ^s›liSi~rŠŸc’¬\„£g^Œn…¡ºw}¨aZsYj‚pÌxt›NjwIƒMŠ`žg©d}Ÿj‡¶tƒ«f†¢ŒÕÀv‘®ew¢n‚œw‡˜h]|HZmNexP^xFbCu“Y™p¦½k˜ÊmŠ·kÈš¸Ý¶ÎÑ‘¦bsˆQu‡ST{W[v^d{ZjˆNn“`ža¡Uk:Io;Z„lˆ²¶ãÀÍé‘¡Á_xA^nALlW_vnƒ—…¬dn:BdCdUdˆ7Fi:NqIm‹]q—Ts—w¦g|ŠXoGb„C^ˆ=W…E^[qg|•[g€XeKh{GcrC\[=ej?rs=rc4g]1ig:`„=apD†|DÍFV±[U€T{=Yl=Ws=ay=f‰=RSNuDNX;V^.Tf2Ve9rm5iCaŒR`|ZqzPoŽMcˆbcƒ`~€Q“šd‹½†k­‡p…c|ˆ\a¢afdeyEXƒCf~EqHawBsvRa†=g‚Iv|BŠIy\r‚RuˆG^~OdtDme2uu9{ƒJz‰Ux“U`’jsuW^ƒBSuQNh5Z`+\r+:~D4e@AM-fZou sŒD`ŸQrHl; ªK¥¿xµÉ{–׆n¤yy_y’Qt†L‚„Q…’?j‰LU@Wq<g2y”OvˆRd‰X–€L˜¥\¶®b{ˇx•…kŽ^u†^ƒ›X€«]ƒ`~£V|¦sfŽdˆ€Q’§Rµµg‘×~“¡xš½v´ˆ³sª¹†‚Énz£uo¡dj•V¯‰AžÅzŒÂmp§s^–On‚5\q:}m=‰ŠRœUp¥¾ RÆîˆ‹×ˆS“{—xJزW‚ù­w´¶]šÉ£y·“n‘vi‰TSqBy\3œ‘A§Â“vƃwšt›X”iyšT‚§Y¤]‰»W›{ªk]ˆQŒšTRªiHr8Gb%MV#cf6e‚@FŒ´u‰¿ƒ“±~޹h¡Å–»‘£Ã‚²‚}­cаMoÅw€‰TlœW‹‹dœ¿f¡·…µ]x²If§M¥‰LÐÏ›‚ÿ©‡ÌZr´jªG’¿j˜Öx…Ô}z’l‰^™µx‰ŒJ…L?µ˜S°Ðf±¨[œ¸sd‰@g~6•°G‚¢Tˆ¡cj¦kx]>zQ”™Oõ\wÙ³€€E¬TœžKu¸rŽ•H—~m˜›\ža—§{¦£iy bƒJ¢¾j¸ ]ˆk_x9Um-My1vcAK—dUb#Ž‘2¨‘ŽMœ‡nl.–¬ZÿÄl¢ÿάSûøž^ã”Nf!v…I¾»eÿÿˆÿÿαÿ”Ƶ}¸Ë¸ì‘àwj™F‹h+•šcuŒI}‹cº²c»Æ–±¶{Ä£“ÿý»Ûÿ¼¡Ñ‰†«ižšYŠƒe“¦h‚¢Gp†Ino5`‡E›”Am—Qy`7oj>´Áƒ¹ò‹—¹pl›He‚^‘M’µtiœ[Y}*r›@™ZzœG™X‘wLŸ¤gˆ‰B•Šb˜ÇpnŒ?iŒJ6V#e9BonKnV+±ˆW«r†ÃCzV~]–¯u¾­€µáqšÏQ•­S‘»gØ´søÿ®’Ñ_׺}æùͺֺÿÿ⋳Z\’0n?{›`™¸fµÕˆ·ÇŠÈÒ°±ÝªåÿßÍúϩϟp“I¯ÎjÖÿ”ƒøMv†EÃǼÞá·ÿÿÿõÿíÿÿ×…éar˜KkŒ=Xo9FJ+eh,hlB[rCuvAy–G¥ª^§½hÛÿ¤ÿÿÃÐÿ~–¼L€ŠVwgiiHv‚I”bŒ€d^q7rqCp‚Prb™±…ØÿŽxé;Uƒ6.E3NHXb`FheNT};:d"8[!6Z=Q"K]1I\4Wv:d‹>Mf8]nX‚‹luš]s¡J¹_ŠÆ\¦Î€©Ó‡ƒ°‰qœ[Z|3`ˆ;[1c’@n–EhDª_‚”Bo`Àx¨éa~™R€Šq±Ÿƒ±ÐÒ|”ÄQkˆA_wAPwA[†KkŠFd…UeEMjA^vqhpn“`mRsŒd‡³i‘£Rt’S~¦Wo¡]…§ahŽ[gƒY²]g†\Œ«q…³cf‹APqHkƒV‚­p‹Ì—Çulƒ[i~]xZvšr”¹~¨Ì™Ío}º\azRixY’ŸZ~ŽQy‡Mgy@pŠYz–‚©Ö Àøƒ£¾|•Á™±Íˆ‹¬–¸Õ•™ºfr›`|šNcz9QoHd€XtŽWkSeŠGb…I_†I^‰d„žz‰ŸŽ›¾lr¡gv—QftH^}S¢_£s£¿jŠ¥M|‡U}–n”·n~®fs”\Zofl€_^…\]zSZ}]n[r‘?X…>[†ELg3Ce.@b7BiO[‚KYxNiƒJh~Eg~@ca5`_:Qd4_e.jo8h}>ru?®z<S”MS||YmAgj3iz:gCh~DvvKtK\…RUvFTY9^\3yj1^‹?Iu_S_<ic3e|:txUv–Z}œb~‰Xh”o{t†’\xžio™moˆdk‹H^ˆMizO~‚>tt?o}Va†Gl^wƒ@y‘QyKttE|{DotU_jLZr>_}6vxGdFPuURjFFuFAlI2]COG)Pt4uµ^E¢e;n>V[(ai#t„H~”\Œže…XŒQ—¡[›´t¹„…œtj‹Tf„Oƒz:fŒYŒ|CyšRg¡VM„M‰g9Xš;]d]r?uo?„GªÎpl͆[ƒzep<†wCyªXŠžY’¬a¬·i±Æu{Ï…k¤€rC§ž[w¼{p|lZR\vM{qMžXޱh©lp–fgšP–}H™¦X¤ŸlyžW|’Tœ¬G‚·h‚Šch•Q]oJ™Š@¶Ã[­Ä„ш£r¦¥Z²À¶™‡ €D«tfPI{ŠPŒ¥I«°_’„oŒ®D‰šJy€Q£›m›²mg›kŒŽO…¢fj†YŽ–Lx›J‹“p‰±zmª{eŒW\\Y‹?Wˆ:W|,_Y@z‹Cš˜_wÈxx§]}Œ^¢¸S¿ÜŽwÑnbŒyj•»ƒÄxi¢ok‘Mm=_ŸV‚‡G±´{º¦™àzm¬rs—L~§R® w›Ú¹¸•žÊs€©ˆtž`s˜gbNІAå \‘ìšs®^`yY¹i=ÙÑŸº‚–¥\s°`^1g‰>YyD˜€4Œžgƒ†W²]—Òx ©V„©†ŽBµ¸N{ú‚™¤8c¶E€U7›May_–tQÞ XlÆtcz<~ŽS’cÕÒ}b¥l˜C«»cˆÂj“¹aŒÀn”‘q‰¹eNŒY³Œ<Ðø¤ÑÎ{•’©ÅvåÛƒmÏ…ku0V¤T}Š;¹‘Q×֚昭´Uv ?À‡_‰ÐŸÇ¶\¸ø¬l[šœu”ÉL|¥X}§L}§^|tPKÿó̓æyÖGyš:q‰D’TmŽIiz3v~;]k8Yn*xu2À¸j­ÿ‚Ìèxw¯s~˜<a”>‘²kXT]o0]r(rv<•[‰¹tw“K ¹qrÉG‚’N¦gŸ•[w–Vƒ†YÛæ˜Ñÿ¸Ìÿa£<~–HeƒF†oZŒi]„ŒT˜±el¢`„dLsXƒo›¬Ž~³J‡y;’g¡Àp­ÉwµåŽªâiÿîÓÍÿ²Èxc‡M˜€IÅ«‡›]€xPa”¬‹ À–Z–Pgl@¥©zÿÿìÜÿÞºÿ´ŒÇk»Î|¶lîÿÍÔÿÎûÿè×~´Å…˜®i|•L“°Y­[x‰V|¡[XeD‰XÆÛ€êÿ¿©Ï¬Óᄐ╙°oŠ–f”‚L‚‡=—˜T¢­^Xk>¾É~dš?¢X|©P¨¡‚½ž¤ÛöÄÛäž‘èT>k&7e+9W(kž\… dŒ¨SñÝeÿèed«,7T To-Rz4cƒDbŠQ_{@pzh…¢w‡¢yz•tjŒM|–q§Þ‘¢Þi•ìPež>q™OeŽGW~9]€EsŽa§e’·o«æ€¦Ü¥×g£e¯a¢Ãz¥Æq›ÅeoŸCV:f”Gr›W~¡^fŠIQb7gsJ_’OX‡LYrYw‹c±‡œ´qŠZˆÀv}Á]f•[j„I]O{®zžÄu}hZjSuŒVd’M^Iiˆl’¹•»Úš¬Ó„ˆ¹TaˆEf|Mwl™³„™Þ„›Ó„—¸nrŠW|”g†¤hoPq‰LftDbRoŽa¬ÏÈÿÿ¿Îó}†·x´{w£x—´¦¤Â ½}ƒ Yh|JuSy`tžRl”JqDVsIc…Hf}QrˆUa„co`{ž``xCFXIj‡n’°} µu’¬a„‘Tz…Fm‰i…£uƒ bg„GQuESuGOhPTxSXpOPwOk…I\~Jb†Uq…CWp1?b7NtSq£Xk[c‰Zkž_~›Hhr?f|KR€QRk=Rc7Tn6Pd7gl8Ek7G_Q[`8qe0pƒ9Z†H`{Ph|Jj†EWxUOwP[e8^]4bf0ckATtQLjDZ_1il4oAo‹FRŒjRhWM_Ih`H†pAsŒWqˆin†UmQeŠZnwOˆuB„ŽRw•Xo„[x}Sz‚Gs“W|ˆ\€G}‡Mo{KpzJbN]vNoD€?r–[‚†Ka¢OC…l+]E@=YN£a"“­Z}·€Z¨sWwMnj3iƒCz„S€¥\tazrG‰qDŸžlŠ«jrŽiyˆXr–X‚’?gžh¬uR•µQz³uv¡qx“H‹ŠSt ef†Ra{>ž|C˜ÇOW¼ckg\ƒB†LˆÔT|±mr˜er‘j}‘w„¡evžu•œc…ÂiP¬tOsIP~8=xFQ](ro1‡C|°`‚€VkœLe‰Jlq7¡ˆ<¦¸a¥Ú^™½oo­ˆxyMsr?´j>ÈM¡Ë—Ä|~°–v‹bguiyŠNoŸ\x¡]l¢gc—?{™Jz—Q’r]ožU¥…r©žl¯¹w€Ÿ}p’kZ˜Htu<kžIg>ptKœT§¯x»¹ˆ“ÓfKœhB`@6P/SW$^ƒ,r‘6e“IzJaŠj†?¨Äb}®~ˆ¨kk¹xo™Ql‚T‚žbo¤g{`†ˆ>©¡d~¼xy©c}ƒ`­›N½çyˇÇa‘®e‰Ëq²ÈrpÄŒy¡br“cqR ¦M‚Éw…ºkw¥h†šT­iÅÓ`ÀË‚Òæ¢°Ý”­º…M‘rAi/Na"ux+\’Hwn3‰l<•™O¡mz’Gm<¦–I¯â¥‹¥p{˜Vrl;}|9q®U¿•Dƒ®{·¤u»£b†»z«‘W‘«Že¨WŒ„Hª l¸ÄZš›«k¿±ƒÉ½Á”ÁƒÛņ¥»¦ÿÈ¢ŽÈŒ®Ôj—Ÿ„u¬h§—Z^š^ssE ~MÌÓÄŽ\~Hf…*m….‡µO^‚WmrN]}@½Åg“Ãs¥g†¦di{B¡I•ºeÄ’]¡ò±ÍÊ”o¿ƒj‚9Œ’WpµSŠˆ?^~Bmx<s˜E¥‘]a˜H졟ñ®z|VrN}˜RY}LIo/JV,X`=F[.77&SN+muBm†AyˆX¥¦‘ˆ¢i–d‹™H¶³~ÿÿìèÿç½éد³†„Û†Q€7s€@“¬T‡—pq”jBb6Wj,™ŸU¹Ö~ÉÿŠrÆBo‘:wg>½²ÿÿùëÿ¦Âí–çý±éÿ·”ëZ9O)lL=shI~eGDE-QL1§„[|ŸL˜Ði™×^«½}áýºÿÿÜ×ÿ̟挣Á•m£_P]M—~ºäš¼œÉÙ¹¨Ïa§¯m§Är–Äa‘ t…¦]Un(uNn‘XS_>‚œj¯À‹©Ý‡±£¤²Ýg´bèj¢¸q˜§z¡\´¡Œ‡·T…©dn„e1@>G)^\L“Š|—ªk„ºwµò„¹ø€ÖÿªÆÿ‘³ÓŒÆ®€ÞÇke—Xag3bp8[z;pRŸQBi'\p3dp9R[-0B ?P2gŽv›¸¦¡·©Ù˜ºñ†£Úcf˜7]Hb”P‡ fа€¾ÜžµÙyžZZ|WcwYš{´éms²QtŽLlL|—MošE\xK\wF\~M„µTs¬eйrz¤Zh¦Qn©Y–΃¢ÞnÃf›Åj„«MkƒYs•X`}e€v¡UYu:U[5V†Fc˜GgŠMj^t£|§Õ”µØŠªÀeuDfIbƒLdƒkyžqžÍƒŸÚi„§f€¢[u†e˜“m“¤Xn‡Nz¥]…¦_„¸ºÿÿÿÿÿ®Ìæp©|€™dmrŒ–z‚œsq]w˜h™»›Å¡¹dx{@Un4So@`‰V„¤ZŸ]r†UoYiNZ}/.L3HgOf†fm•o«Xq—=X‚=TƒQeWe‘c«m€¨Zw’MltCU€LX†AJoNb‰MYyReŠfy’Tj{J^ŒYj˜apžV\~HWvSj‘imŠ\h„W|‰a`ˆiY}MflEg‚@a‰KRzKE{DPY9L_.t^.ju-Z~Qb{Si{?awG[xMatDpj<qu4Yz>sk<k}:UzPXc@T_._]5^i1PxUVTA\Q(€c6„l=]zI^jMib?k„;g‡OwrHŽwA‘—Voœdh‰evhKnFrG†UjŸQtzVfxFsvNWvCJnTa_<nf:dLntQl„VIfCeNI^)Zi-|q$y3y«bNŸmGmVgl>su7¢]‡½jWŒm^W@{f2lKNŽfbO™@œ­c†±Rot¥‰Mµ¹L‹Ï‰e¢yS€V~kTƒ™C|•cq„E•ŽT“©IjµwvN†’J¨žc–ÁcбxnŸZsO~šTd€”i‡Ÿhb›]j_k€:qŠFƒ•YZu9{\3J€®Vz…UTw@WsDiw2‹y/º©F€£}†ªi¨–^ª®s¼¬QŒ­`lkŸ“T“Ñk´vwSYx:Äq5†é\žk‰±m•»v—Òq¦·‚©¬rƒÀiRy}ŸsJen\ue[x…O‚ŠRP©J‚o6{¡ak­ZiŽHg~Zl{O|’Qh¡[@}V5K';IpU!~¦Vt§gƒ ^hªQd‰Hi’4yŽGnxN“Dy§~YŒ`~x5WROvB†r9€¢Jn}eeLWlQyoPy‚L×µV„౜ºn²Îp­Ôv‰Ö‘¨‚y°wo—drV·¯GÎÛ›¢ÿ¦€än{œL¾Vu§Fe™<£‚;…¬t_‡JQz;W}-]„'x…2€›DŒHi¡Qz„7všRm“MŽ>ˆ§O“¬dŸ›\“£R‘Q˜¢T€ªs¡rO¡`Û³g˜ÿ²|‰ft‹:…wP‹¢o—L¥žoˆs£v^À»m¥q‹K‰qHTƒZp4ñè”¨Ü…Ž½d›·wxÉh“·QdOM_KYR,w‰Ot¥D‚Mv®f¤T‰ b—_n—CXo%Œ‚-qÁd„qH‚¨B ²nžÆs’Âlœ­YèÙ˜mãuk‡Bc—C`|3ŠˆA V“¹R–»K§Uv§P[u<Nh9kx5~‘C‚ˆBm}>bl@Tl0ap9]{?@X(SU‡n*®„F‹¤be˜GxqF~m;¥ˆZ‡­h—¿|·ª»êʰڌöÿ±Àÿ²vÄbT€>ž˜fˆÃs^‡BEd,ˆ{G¡¸bÆÂŒÞöʨÊr«®Jãÿ”Ÿ¯t¡±p•­\ÂæÙ÷®ïÿ¾úÿÑcÍ\bG,¬ŒR ©O¬¦o¨QWu0pT[ͬº‘çt†›J¤ÑˆÇس·Þ¹j|€p{\—²‡wM¤ ”ר‘ŸŸ\¬¯ÁêÎÈëÜŸÔ‘­Þ¸¤áŒËwV{5lnBGb.9E!^jCˆŽwª\SŽ5€™Y—¬_‘¬x•’_‘†o‹¤jLr5j]=£Šx¯ÖOIb"c|-b¸3Z‘1†¡]{‹h@HM5=3::\lXs«Ér²ïy¤ÓvöÿÕ´þir}UoyLŠ’_Ëï}¤±m¨¾¶Sp§J_³:\}Z˜¼Ÿ|©r£„Âßµ§½’¼ml˜P«jŸãŠ·ù|´ý‰¬ÿn£[Qm:msR…–VwW”‘~‰fuzSa–54X4V†Ln±Tn•W†§„•Í|‰ºyv’kpše€¬ ÏŠ«Û‚Êw¡Ùwy©Tr–K·f†ÀehHUzASnIhH¨i¦ä~·K]„OmœfŒ°y§x¥¹‚uLm„S„¯nº_w]o›e±ƒ ÖŠ¤Æ€’¤byScrc‹œx‹®†›Àv€©^}œq€©—’¬Š¢qˆ•dv…PkvB\sY|“l„œko‘u“¯£·y‰Laq=Yx=X{H^…h{˜b—t¤¨` v±³`…©Nƒ†AsBdƒHf“m…ŸZtƒ4U|<Y†a‚§m¯}¦¬lv‡ScWxˆUu¡Khˆ?NrJ_ŽYd‰Wc˜ao—_^e‚®n}Ÿ[m…?Uk:PuVdjƒžp|›U_zUm…Pe}S”uQ’—Ge«ppo_”bYvLMg9ha5ym1a…O[‰ZyxDu„AY]TsPkb;fu6FEFcGbS3]i8V]?D^8^\4Wd/CjB]N5rc&ql<Uc@IWA_W9oY0`y>Z‡Mof?{i>qoLbtODy]C]FfR2fb0‚wGh¢R\yk^sGcqJlxFU†OVqMah9if<miB{CWŸ[WZ_ak5p{Au2‡“@„¦Uwšg`–looJ¡‹EœÅnf½ˆnyjŒ^6ŠŒ6”­[yº{…“i•M–®_pµhm‰[¡ŒH¸Wš°wo´ƒc‡`”zA˜H„›fm~W|‹Gp•R`¢j‡jI~’Dx…fv’Q…™VaœfVgnoHŠyMzŒZi]k}Mak6Ž~7‚F•MY—L[m@zn7g=I€QSZ=ˆw7¡¤F‚¦al‘P}Lš¹k¨p[—pzt@YŸIrrE¢~3^½t|“UC–HNS2yh.“\šÇmŽÇ{ž¬}€Ó”z|zu‰YƒO †]‡„_YsYŸUA²Io©xW•Ouz7o{M€žR`¸gRwRXa&un:eqE8WjRQ)uk)r„KWdSWbHglO†‰Ccšjuz>ZJj~3e‚Dg‰UUxJLq9rj.WˆN{i;N“QFb=±[.šÆ{¨Ñk«»ož›€²¼|¶ÚzÐׇ‘ç‚s…yt—SŽmƒ¤c¾XŽºU˜¬[j«}–O‡¶nˆŒwx¯br™S’µQ–¶g‰ÓwhŸTX@^W.¢ž?ˆÓq{J¶ŸP®¦z‹—m…ŸXsIeBƒŽCiŒKc‰=\m8€‚GpJ‡•Lf•U…ƒJ¶¶‹sg‘‰EŸiBz¢bmsDt‹M ›E­ž[”{s£d¡:›Ë]¡¹Iÿ¨a©ÿò aŸº›è½Ž­àËrˆ›U–ÓXƒÉT™V Ävš·Z¤ˆÃrV…JI[,Mf>HS)TZ+’˜ek‘O¤Êj~¦WŽ^œ©x‘—W˜Á{o§}„—,›¾sd«U|:–”g²¿ƒ}“h\ERu=Sw'Kx"kj3ÁKø­…½Ã}‹”E“¼[kªCe†2’y>˜®^{‚Fif7€uSy°Y†ŽT€¥J•žfˆ¢z¢w¬‹¡ÂÕí ÀÿÅàÃÓ§ÍŸ‚¬q ¸|–°t•¸{u¢s½˜hœ°~€¨|Fi@fe3Z[-iŒBo~6t…0³­rØÿ¤ÖÿµÒú³Ú÷Á¤á‰ž®aÍ©vͯ}†X—¯_¾ÍÚUgº;dCއohžqKK7a>Ff1[c5ad7k|Ejx8LW-V^H‡ƒ´ÉʳÙ˜ϣ­Ç¢·Ë¦o–Se©:Pi+AO*`…4H¢&}‘YÀö²¡Ý¬À}ÞåÁßÿ§¼ÿ†»äu¡Ïy¯êzÇÆáÛ«¾¿’Æ¿wÿÿîáÿ¶áþß¼ŒOK64C6FG‚,O2i’J•´wÉàªìÿåÐÿ³ª¾c˜µMŽ©h®ÕŸž×…šÐt˜Ô|½x„Àrv¢r‹¾‚x¹ek”rž}›¯mžÇ‡Ÿ³–œ¶‡´ÌŸÏÿ¡Äÿ–¥½}¼JHy,<P-@[9]q?cGwyO¸ÎtœÝpµ×…©î€˜Ñ{Ë|‰ªˆ¨”|£xˆµ}Œ³k°mx˜tzl„ i„¦pŠšPs²e Î‡…ÄjfˆU[wQjˆY´e£È®ïv¤FU}Qsžg—®q‹¥XYn=Ia6ZsO}o|™ipŽbw—`m’cnŽh…¢v•²c}[|o‹¹„¨Á”¢Ä‡´ac‰JpSfEbvWšw” ^xž]„¥ZyghŒaj‹b…—xˆ—\€›Ju’Fp“Ra‰L^‡e‹­js£o€¡u‰¢v†–o•°lz¬p™Òz¡·q®¥ož–IRZ2C_=Sj[gŒfn’it—_s˜[pƒRh‹\mŒNTo?UwWkžh~c­kx k€¦u}¤ny“OYz=HfLYƒgw”s›†¡¶pz™W\{IWwKvfK’z@rˆanˆtg~YS‚[BiCT\;T_,YpAkoJ†zH‚…J\•lYvl_s<bo>?q>6c=MJ&FN!aP*Eh/I[>@\2GT1fM2\d+_^@aeDWbFae>\h6ac7Z‹Jgo@\o=N_BYR7Eb6ElDfS2k^%ƒq?~•Cf‡cvvTg…NzyQu„I|Y‚ŒFsŠFnP’I{£ngq\TnAck@€m0qˆOl€V`|T\nUŒsI‹­RŒ°m¨vu™g‚jL›…5¦¶p…Í’X³ŸkoMd…Ca[Z€Fjg?h{?|‹cp‘_{‡c…y@“…W‰™^kŒdjŠDs‚L†šU–”ZrŸXgŒXi…HlQR‹_InFsQ1py5oKjGp„Fj’@WrGia>‰‰?q¨]X“^sv:cŠ=]}Mhd-Š|5„§WŠŽbˆ–V‹OŒ¬…X¤_EW[‡b3žE„·Oœ K‘»ao»hcŽmxš7Ÿ“J™Î€„Ƭz¥€P<‹€zm<v©PŠA¯‚Q˜JtžN¥uM‡µ<pšdaŽUSv=Vg2d@tvEo›Ui’?\ž=Gˆ;ƒb,v¯<h¨NSq=ph0gS>wjA”@a¬ql=^‡FN€+OnBbp-au7Šz:ZMgwB{f<PˆKeR4©9”Äsy®ljY_jCcuI‡‹OŸ·b›eu‡K|Q‹ªf[“gŠmQ~¸prxXBsVwJ#¢¸[ÎÆ^Н•f“tWR^x=žxA›×zTƒt…k8c«s…uC”R™•]ŠWu9ƒ‚7ÏÀL~õ’¡J•bR“M\n%rk<d…G…sApŸ`huBœ¬K«Æ{ÏùhÄÚgx®}˜‹?p±…‹›b~`©¸gŸ®l„¤‚¼®o¨·Á¦a »ŠŽ¢W–¯^Œ¿Z¢«cl®e¥ŽK¾½¢Òp…»izzX˜—T¦®x¤Êzb~Mjp=F`6CR$D_!EZ.bd%½¬iÖ癞ÿw[²>Vz%v{L³œYyàfeˆ%ˆ‹O§¬V«ÕR¨¨pjuBZ‹4[{r¨5Xp0€ŠRgeIŒ€@¶¯sš’PÈ×›¯oe¡Gxœ]l•;kŠHEv¡>sš\z†A–³{m—VQ^;€Q  oƒŒe¬Î‚ÂÇ’—µe|žj«Ã†Óíµ‡Î„ÅÒ‡–ù‡cb?ƒ†R’¤jÿÿ­®ÿ­HZ!Š{7Ÿ¦L¼íu¾É¢—€Ç’Ó’†Ä• ¼~¤~OõÓž–·F¨Sq€LgeP©h…€u´š‰¦Òlf“QGW*_w4i–9\\<\…8/6A>-Z\*Pb3glF–Œ‡Ñð¯ÐúÀ‘º‹ˆ¬^t‡HnˆG‹…Kg¥?dLK ·’¼|˜Ê‚ˆ¥cp”C°¡ŠéÿÃéÿÏÂÿ¤íäœÊß—µç}²µm“M›o𦅾»¡Ÿ¤Š¼É|¦ÍQw¶:i‰;ª¼ˆ¤át`ƒ:‚‹r¨Ùm¦ÜŽ¦Û†»Þ„Áÿ—ªÄ|Œ½p²†©ä«ë†žà|q¹ahŽn¤ÅŸÇïž„²XU€<Xt=‡˜cz—emyVWi<EpHQnDf“\x«ft¢Dd™?T}:t†;`~?e“I\‘Wr„oŸÀˆ•¹oyb{•khwPbxxНsrŽ]YlU`wZxŽc‰¢n¹am”\oŒWz¨r–Ƈ«[[z<UzEX‡Svœfs—clŽ]^|Bb“Xy§g©²|€ OQv5Oj2DW5I[5WoD^G[vB_{ESsQt˜p޽{uša¬‹¤¾zuh|•†¡¾kp–R‹ªaˆ¯WxŸUtoŒª~™Éw‘¶iŸa~h‚Ÿfs‡MjW|UtšImŒVyŠSldwnˆ®m~¡rŸc…‹i©{’¸™ÂÊš›Žcmr[‘ŽDg{3D_4?_:GaC[rKi‹i¡by‘YlR^€H`€M]ŠjŠ¢t‡£v¨x‚¦|‡²z‰£lrL^GY{\l”¡v‰¤“˜¿‚”®rS\<g`;ie6js;jPdqQmfO]FTyM[t@Uc;_f6Xu4al>fl8h}PcZUxPRe=Bm58^6?T.IL"]T+Hg.MW=Sb2_^3\V1IV9dJ:fm6nrLo~N_uFge=hw8pd<_e>DlBNQ4]b/]o6aq?[d6qc=v‘<n‰`¢rVƒ›N˜‡hŽ S‚†\Ž}Ji‹TiqK_}F{‚T§€Eg‰?pvNvp6stDkFSp@kd=}r?]…Ubq[ƒpJw‰Pk_i…EŽ…`hžkO„HuI}b'Š›?@ª]PPE_`(loDzwR‹UO~KzaA™–5x¡d|™`vªdŸ™K¢Tn™]h†My}@z|Mh†WYlCoZ4ok1m‚R™{9g–CbzHdGy†Bu‡Oq}Mmgg}?m…Eˆ~J‡†6˜Lq‚\vnIyxBrwZ[†ZwZ?œGW—Mm€?‰‹Fˆ³Y‹¬\¤¾k­írŒß`¦“w®Ë‘°Ë´‘Ù—rŸl|‹T¦«H‚Ï“½‹c¨¡^œ¿s•¿e‹‚hœ®Cr»zt•\z…SVxD^m;Pv<__AˆhDƒŒ`QZ[fGrq>n„\_›LVr5Ye4qp;¤œ?n¯}^˜N\y=]†4kƒ8OyEGj<]f0fs9sq4~…ClSˆqXêe`•}yh?_’_Tj;lu<tŽ;tG{Pc”Y…‰2p©UQjBa&I‘XW]0•U5j›Vlj@[s6qt1v>bpH^]A¢{9ŠÀy„Z~¦Nu†K®ŽIuÀuŽzI¡±MjˆF“ƒ@¿Æˆíá¤ÿÿÈìÿé€ù[‡:k{'u•N¥‘S‡®p“¡[¦ÐtaŸn™aoõÇg»Š\ŽLR|.VR@oFC§zŽ›eµ´a‚ËŠ‹O¦Ì`ƒÆ™†¬Y°¿ms¬kxªZjƒN˜†L¤É~›Ïr}»r‰ˆK‡´j˜µj_–bH`&_g.hq9^Œ9¾¡F·ï’HRf@OGKWa:Ut;X[+HmGfIc5jŠ(¥¼\µÖˆˆ–a€š[j{.–¬IeEtd>±‘`¼¸p—Ål¾‹[¢Z÷Ö¬±Ó„‘±…–Ow»H{{8€¸pNx7h{.d@cs?Qw>ER(`kJ™¦pœÔŸ¼pdŸ[EL+QY,oz=ÀÀ‘’ê”±³fìÿÀްk›°pæü¥ëÿì³—‹£N|¹E{@’›a‰TŠxQÔ’g‘ŸM¥‘bËÊñÔ–´¢iÌé›™Àuy¿HÍÝy¤æbËß~¨ÁiÊ푞ª‚Àç×ÿÊÉò¬Œ¾R^v3k•3¯ÿloÌ?ˆ‰MƒR„šn~pަywŠd‰v{x¡VXo0\x6š¡Ugš@‰Œt»à±˜Í‘wœ_t›K¬¾}Âä’Åâ­ÿÛ¸øý˜¥Ï`µ¦±Ÿ½ppC¼°kÁð‡¾Â’²Yž§r×饿ìk§´W”´~°Å…Wi(^[B™Šo޵\…®T Ü{ÊþÄËýº¼ã—”Îu{«r{”z‚•p“°l—Ös„Áz—Ð]7Go'bŒDz J]’:p¼Bl‡?i•]…³^vªbu­j¯„•À•š±iuv6<T,ZZQŒ©`Œ²a‡½`t¦QzŸ[мY^†Emxš²ªfbŠFp“Tt˜Vužm‰¯s‡²c€²b{¯br§V[sCQv?qŽ]k’Z^wWsˆ[vRY€LeŒo{®iy³ifšMQx7Vu3VrB{™U~¬X~©MhŽG^wB_wZŒ·u†ÀoÊ{˜¾€•ËljœHKq[vŒu•Åq¡ÚrÑx“Ùhy£`o‘kz”bi†cxšl„žg…“\u‰H^zPl‚YlˆRl™Vi‹ER‚PdŒr°€–¸o†¢VnˆVqŠp{£©ho}Mg†VŒŽY„ANa:OjAMb3HZ8O`N_yS]KW|SfƒGbVn‹hpŒozœq|¢ot£t js‰Qa~JZ|N[~PX|do†im”‡‘¼…˜´zEL4[J)f]*i}8f‡NZoKbi?dq=VwG[oGZb<gk8Qv:JkBXX0_c7I}HPkVfhAZ‡CZƒLKBMa;WT1V`1ec;_n9Td?HV9OM9Z\3Wh:y[Egm=`tKZiFed5bb9be8q`CvuDu†B|Eg‰M^qG„f:x“=e˜kƒ]šN§®t­Äi•¬sx‹khNV{[WkDfx<x6u‚A …Q—v=‚tKh‚J{xH}|CŽ„Hx…Ik‰XŠJxŽLq„adyHb~PO~NIeIUZ8s^-£…6[ÀjO}zeR0Wl6fb7^w:[z<}u?ž¡?ˆÀp‹–zh–k€vS}ŽN^’[cdHx~-}‚?‚HŠyA„ƒ<t‡R{H{†CpŒGpqNm@_c@nƒBrw7`{Ep‰?uC{ŽF·†=XŸIdYJ~n9_t6_rKl†@i’=h…?d‰X†M„›K–ºnjÇ|‰c”aTšp›[=f°[t†z}–ZaˆTvªWe^tB}ŒUllXj„YátF©»dwÈ}j‰Pc{U‚~CišZTƒTnl.nl7{¦AeŠNL†Bij.Àv8ƒéŽ ¹T¯hjŸr—Ž=¿ÆjrËy™PŽÑdQ¦Yƒ}9†Ó_o¢XŽ‚C\Nxƒ6w–_W†Tw„?_`QŒ‰7x‹bRWEm`>t‹7n†OŒ›TK€fTY8W`1KW2Mk*cl=`u@ƒ:°¦Y”“W‡K“˜Mt‡VX}?lƒ.dˆGz~LežVFo9Zh+Ê4’ýž‡Àv}„_~¦W‘³_¯µ|ÿã¦ÿÿðÐÿÛíó™wÜ g’Wf|HÏ”Q|Í…²©Z”·‰m·pk“Gs‰Jx_HvC^c)ThTVJ6‹ƒ={‚d{¥X½¦j¥¼}ަƒ‰¶ˆ›¡t†£‡Š}\ocfpCœ›FãóœÂÿ¢‰é{r¨_wŽG¬J`€;_v'z­C‚œP‡¨qžo’¢oLxLBB$;P3IB@M OR"rŠ3N};”ƒUzšWa~4veg|p¦xe†E‹rFž~TW5qm=Š‘C¦­v‡Ásk”Jw€O¸­u‘™k…Pp…Oq‡NimBŒŽy™zk›:Bk“3‹©cªL‚¾ju¡f®³‹†»©~ƒVf›KŽ]g›Uaz3¦®”~W À~“dw‘_¹³‚Çÿ¬—æcs W`rKzr7£E†„`YL8}bGÊ~r‚}Zˇm­l¹™cÿÿÐÏÿÄ¥]”u·À‘Ѹ’tÆW}th{„VÐάÿÿïþÿ­ýÿÈîÿ¥ýÿÙçÿÚÊÿ¬˜ÜsÅr„šgiŸRkgZH]0?T,T\8Tg3bp5Þåž‹Å`l†VÀЯ±Û~z¥[Pr8zx`„}h¬Ä}–Í_—¿_µ¶šÔÿ‰œ×^š«X¾ÇŠÊ „Ò›žÍî­Ñƒ©«ÉÕŒ–¹VŒ‹^h_7l_3so>Œa‡Š<uBx‘T¦­…¹ô¥èˆšÆƒ~‰_^yCUpTw±q’³~ŽÝwŠ´jy¦S¯ã±öƒ›ãp„Æ‹ÿÿضæj^{Kw„oНw޳lw£c¼rw›R\n(DO+|xQ{œ\u•b|•[u™SJlKJcN]X|œvŽ·‰‘½‰{”^l™Wi•Tz nwP^xSU€QdŒ\g˜KUyH^Jv”Zo–FU€Jz—ae‚DCa=[r^”¦vŸÁ{°\i¡Qh¤LTtGZtTftU…¡jÁ]xžOgŠWw¤sÀŠšÇ„†»€”³…•¹m|ŒF_]{­t‘À{™Ê‚Ýt|¡MZ{LhP`…Sv’o…ŒSk‰Pq‡JgIhXqŸUpQg‚KptHo“tŽ·v³s¢Xh~Oc}Wi€n|“h]vˆd°µl…‘Hk‹Mc~HblBdyFksPu…Ue}CX|d¢_l’X_„RY|kt u~ŸaeXc’P[‰DQƒKY{GSrFQmKWx\_‚xŸ|¢sH="QJ"b]/_l:J‚KHfMQU6[e3XtCahBYn9OwG`i?ey=RjCWq?WwHyqS|Br¢Po`_“TM†jIY=TV0c`1Um@WaIXc=€fFaŽGSzZNQBPJ0XX3VYDQh@UW;Yd/]hEsb@w‚Ht{Vq{VllO„dB||Godd…U~rL¯ƒN·žbœ­yœyi“l]jWlIZtBlt1]>ƒlFˆx=•kLevKqtOæz@ùºW ó™zÓ›h¬skˆNxT„rHh”_N†cAgCPH-nM&¢z1~¹hr­zt•WQ‚Q_i;l}:€E”Fz¢[dkir\MˆGUu@{t8Y JUZ<qj'|>‚¥U™›]‚LŠoW‹†A’šXŸažŠSv¹Rm‹Rq~B^ŒD``<½w9”›Iͬk‘½a}„\~|8v|O¡>‘«T„­Sºg{Âc†ŸfžšN¢¨G‚¿pl­zg”kQŒWDc@]\)~¤>…žk ©IzÁ¢q«\w”eƒ‘TzŸf„Iˆ¯VŠœ\½€N”Äag­‘MyEdw+|k2˜¦Jj¡\n|G‚‰S[«S^‚MŠ~6r°SÖ°EÿšdŒlYLS|FXe0t|ChŒJ}Œ:„Xžšw‚«„h£nQ{Nil+n‰Kh=x˜K¹ŒSœç{i”eThDo_7\h5x~<œOT†iR]AOU2|o5ÿµO‰ÿ‡~¦Eÿ¾ToÕƒlH¿mBq¡op’>~C™Zy³JZAb€5”©J–¹ov°m^ OŒt6ÎÒØÿ•›ÿ£Çm¶Ü’u®– IÿÙoüÿÈøî«gé¬w–G–˜Q‹µneXƒ¢V”„`reO‚Mhq1\u<bi3k}8w—Rr–T`cOj„MouZ}žBk™Oy‹Cr¢b©`Z˜R{An›Bw‘KµLÐÉ‘éÿ²Òú¥Íð ‘ðˆY|GJ\*a^$g€8`8pBXp=vi6_r=q…>Al+AH"9S"RJŸ˜eOŒLVc.sj4\–EUr(|Er¡c†–L›qQ{CZh1de3fLžŠOˆ•S¤\¬Î\žÆxv›=¶†N|Êka„@n–bu‹Sl‹ZVw:Œ‚G–¸m¡ƒ^|§`–©wƒµ…|¤lg‰Vmd?a¦P*Z!7'&DZ(ng2~•B ŽGÇÙÀ喦ޙs{v_5A oa4ŽhS€T;“‡Cuz@`B²[T¥„cŸ§fì˦ïÿÔÕùµ¤¹‡Ÿ†}_rG^wF~US¨kt–TuZç¿Åÿÿæÿÿÿêÿ¾æÿßËwžÓ•ÎuÉê‹ÃexNEm'WR/e†:}XNb*Zp-|‘X§¸“¶à«ÑßÌ´Ù¦‰˜^Et*RR+Ns(@F2…xJ˜@“¦?›¯w×û©²ê…‰ÚR|>•®^ÈÔ…ÊÝh¨¡_a^=¶˜cžT’„XµkÎza¤•Jph8qq<‘¶`‘½q•¡eHdCyn€¬jgšYnžZ|±h†­c’ai†Z¹ƒ³ì˜´î™®ñ›´à„‹½qt Pc†6Nm>`qMHb8SlT‡†^]wDc~=\zEuKs“QnŒTj€_lyGe…GaLod¶d…Ÿa…£tu‹N|«Ut Zm”Mg…Fj¢S•Óu›èp—Èn”¾nw­MgˆN}—d~™dj‡JJh-F^/NjDk\oƒ]€ ]f‹Tu [o­RpšIj‹W†¡e‡®a|›Xˆ½sŽËm€«q°wŒ¾^r¡Nc„V_€Tušc…¦aŒ¤o€«qŠ®adƒV‚¢l}®^|›MWz>RuRuVk“C^|Ad‚_®|²_~™GUƒVv o…±w«w–¬b{~Y†„TmŠ`s•p‚”c…ƒßЕØÅd§]n‘Ku‡Op…Uo‡Sj|LYlKR|vv©€­u¨fh‘fj£l°o‡«p²q„®bx¥Ml…E\x>Qu?QqKS‚mr¨z‡·lNF!WQ!re/f?JŠW>nJNO9ec&ftDoyAh|CZyOb‰Od„Ih|Nl@_–[iƒ`d‚Ef…Uq„LhˆVPgO[Pb[1€<q¢Yo’ho‘Xwˆ\b†WQ‚lZ\H`S2_U8j]>Vz?PdIQS3RW<kU9pl5|TqsL\gQ`W@xa7jqElrR^gI†T;ÃV9º”_²n”Že¡—gd¥k\‚Up{5U’;nlAwn/oyHeƒMžwMÿ—AÿçxÿÿöÿÿÿüÿÿÂÿ½ŸÎ„—p«ì|lФU…eYq?‡b3€‡;›±e›Çn’È‚r«u¦zNs’QM‹g^cJmyN\†JxM†ŸE‚¡Z|¢Vi§_ZvM†u.qŠ@‹‹TÆža–Ï}¨¨h£Ç[¢Æy°Óy®m}¥amœr|–Jnš[c‰Irr:—q7«¨] q‘Mn‰Bžt?—?–¦W«¡e¦¾qÁ|~‘m§¬AºËp¯Ø˜žÖµ’ƘW£‘^pF‹z;j·^j—fÉ–Q¬ô¸ãœ§Ö•¯ØpÔŽ‚¨kvµd•´Z|¸Yž¥Qоjlšf·Š=˜¯XZ“fosI[‚2®„:âÍiœè–€ºiž B¯®gÁ¶Ž˜²¦†·kˆ¡f`™]V‚Hwa1e‰<rƒBx‡Ou•at‹Ig†Qfz:ap@U‚:fr6¶…M‹…q^¨`zo2k¢J€ŠF©“M•؉“ÆmxŸ`³}9ÅÛhÀߋëό{˜ævgœs>€Ž`žŽdÜïjŸ¨’Š¢Qu®ibd€{BŒ¤`«±dƃˆ‡\’¹^â¾oÞÿĬꞫ⤲œah‚}?íê`Þߊ»¿aƒðˆ¬EºÝ”t¹™d _k’I’qP[Œqn„6i”C‰›QÍ\—ç„„škz‡q‰•_r¢ba F€„<‹¢g–¬J¢ÇdŽ”znƒIuu7qv>™]µ“]Àä”Âî±É…Þö›ÿ~K›;^a*nm:|©[¯©>£ÿ€y¼BLn2bQ(zpSub@ED6B5‚X8~cPi=bZ8gjANi7~q:ed8¥®nŠ’]bˆVlf4blDhyGtBÍïp¥Ö…Ķ€¯Ã‰ÿ홢½e©Wƒmƒ‘lJ„0Š~EЧP‘´Q¡”e|p<—‰e—Ãn˜Î—¦·…œ_th?Öew¹ZUÂO*:CT›“Vž‚UÃÊz¨âŠ…¤cLŸ.qœ@¤ÖoŒ×mv—?_z>RK*‘eOZ^8P5(P=/jS>ŒŒXž”dš«ž¬ˆx’COP#N_$`y>Mn4x|Oc|K\sGj{S~pRÞÛµÿÿãÓÿ¬–Þr}ŸY…‰JìÆ¶Ñÿ£sEz—To˜T—¶†X™L=^-=R"D["_pM«Ásrž:q®DœÎV¥§tp2s˜9‡´F¿¯làØ†§´dK|6~…c­°§¢«…™Ûa‚¬W…€TzjT§¨ÿÿ¯ÿÿÄÿÍ ®¬^}~O~vA}U²Îw¤ÙvªË™ºÚ“Pq3XS&Yf?šÌ­æ‰ î~|ÇdrŸbk‰HJTAmŠhhfi†djŠd“°`„º^ˆ£X[‚2O[4W5El'TgHgp0Xi,WuCqX€¨iq¡Xk}Tmr?Nf6SqX}¦i„¬p³m…¨Us¡OxžQw£VXŠ0Gy4RrR† z»è‰¡âƒ¸th’Vi‹R_~Df}N…§]ƒ®BLp,Dk6\yDn‹S}—WqJQtDs’}·ã“Þt³f„°p†¨`†©vÅuŽ»au¢S^glbcƒSl‰f‹®w¢À}‰·loƒ^o€Xcr?MgUšˆ“¬bi~Dq{:c]™¸¤ÉhŽÂj{¤\kŽ[u’\ƒ¯aŒ«j¤mƒ¨heƒfzˆ`|‡Y‡§kŒÀz“ÉnŽ¥Yy„v²»›È¶h€—^ˆž^x¡Vo‹OjzRixF_McŠi}¥xy§~«mx mv«fu˜ro™pwœv„¡x‰›bbObOd’CT}I^ŽxÆ„—ÖxRzC]pE†n:aŠFN`HpQ\Z5\x1Xo>Q]?P_@m\@h„@SšWeuL|x;m›Z^“rZ~X[o?]w@bx=e„Lq€LšwB¬¯Z¥ÎÊ•–©†€¦nm¢psŒh…yTƒkCƒƒL}Xf›^_ydVdDOOHiF7mT*moMobEX]DUK=WJ&kN*vQ/V^DUM6˜R/¢a4nWkNU”tSr›g\•yZ‡G^y2u‡0^ Pm|IfO÷Qÿ©Eÿÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÿÿÒýÿÿÐÿ×µê~жnš§U˜¯d~«tbsKp`\bU–Q8…«_u·S„‘Pšœ> Àiz¹l“§n²ÊgmÛ—’ž?øºTÿÿ€ÿÿ»ÿÿÿÝÿÿÈÿ¯­ï½–Ê¢s¯ŽpŠhŠ’Y†±m­lsÛalŠ\‡€=™›Jšºh}–_šŽD‚„7ŸzE¢ˆB§°uÍr€¹j£§`®¡F£Õ´Ó›ÑÃiÑ™jn‘rpBCshdYCm‰K¸…Sšß‰ŽÒ¬yÏu¦ƒh‚¡g¢k¾Ådwç’plŸ’CvÆorƒWˆŽ=©ZH~^wT2a ?†DÄÕwšÒ‚„°Y‡¶Tޏ[¨¿_´Óm|àŒs¨Yu‡Xƒ’^X‰Hop6q‡;nN~„Ju£`v›Rr˜H{•BsœLo“Eo‰du¦SŒT_”Kt’A’ˆQÇÁdÑûÀŸöÂ’«|©¢f} {ζ[‡òº“·Yƒ™\‘[Ù½YÍÿ±¨t·€š³m´ºuy»”{™_zšRˆ^˜¬Weµr›‰Ho¶ƒ¢zK¢Ù•u†}`WNOšzVeÉbº‚A®Ü~ÿág–ùÌ ¢jpÕ„•Nt›s‘ªXYÊvZu3e‹Px†;q@]žC†„B‚ÇjY°Pn”+fšDzD‚¦_l¥RŽœO’¢\mŒVƒzN˜zA¡œq‰ŠAfr8}:¡ ^Â{–eóæ—Ûû²?™vH;!hu2Á UÕý©Â쟜ò¤‚°Bi¦MST5JG'T@!¢^0‹›odpHGW*Qa-MN-XT+td5}bCrÀghpEg{>|ŒH„ˆG¢Íjo¡\uyY’“l®Ïp—“€é¸Ïè“ïÿ¢ Öf°ßp¢×zŸ°vÐè’×û±àÓ|ŽÀoÜ…|䨻Ùã¯Ã榇¹yTm=€z¦²ÆÿË]¯:²§WŽ»zƒ›RÇžo¹ÿ¤qN“±o¥É¦žÅ¬Û“¼ÿµ©ÏuSm@e\9ad.‘KB‚_B}nFaC4iM:z€Y}–gW‚79Frj;p’M„¬ZÿÿáÃÿ²?t'(F;4"ÙÊ êÿ·èÿ³—Ôtw·MnŒ>‘¹` ¶q½cg½T]TNÂÌ¡׎»ex¾RwÇa‡¶cz©K¤T¯˜“®à“²Ô‘‰½cbz1p„=›w_‚†gy„e¤¨pŽÎT¥ŽbŸ–Y“wžÊqw|Cn~Q®ƒ‘ÿÀÎÿ;ÿØÎÿбÚÎZŽ}S£·z…·s}¢dNt3c‡B…´Ws¯P”zN`Žgž›•·æ—£Ê€Œ_y¬GQBW‚EKw1EgCZ{B`ŒEjŒ?t¬Jc˜<YkC˜±{ ãTXŠ=Qx0Tv7mœ`…²jƒ¯jlŒW€n›¬p‚²S\x@PqJ^}Lr‘Yr“Qj˜\~®^uœW}šVmšEZI^ˆU]}Wh‰^r‘btše†³f…¯Z^‹7WkELl><b,Ib3Y{=h€Ba‰J]y<OxBožh”ÇŸÇç†|CY‰?Z’Sz©az°[ƒ¶Z|±dt™oˆ¥u޵y“©u†j‰›f|¥[gS‚“Va…?\zqÉÓ§Ñyv A]v;ivTn”mˆ§y”±z”§jŠ J^~K`ˆQe‰Si’Yi—UiQfŠUkz_h’x˜Â„¡Énmz@Ue_•𑯴al‹\lˆWlŠS[uJ_|Z~‰OmJYw[h‚Z^w[a|Yj‘\n’PYrAQgEUjGHfXUuSm€gx¡ex£O\SXˆx„º—Èts§\r¡mq}TZzJ@u^L`BZ]2Hh,?a<2X7/L2O7$wM\ŽAR‘fswAn?QŠdOoPFY7Ib5gc9ŒŒC‹«QŸ e—°r•«€ƒµ…‹£‡‡r…šq„ˆmrŒ`‚z^‹ŠO†ƒcŠpsŠxj‚cqgWˆbDh9lzLdjPMQ7dA2OM(PE8cG%ZP5cP6pr4„p=q„Q“nU‡§Wm˜pY{d`tA v1À¸?nå†|Š~s Oÿ‰gÿ¿]ÿÿÒÿûøÿôÙÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿÿ†ðÈnt{es“Gp†Mƒ|PX€I¦^?–˜6m”ncyO„m8Q¦³`ÉÕsÃÿÿÿ·ÿÿËÿÿÑÿÿìÿÿÿÿÿÿÿÿÿýÿÿ‘ôþu³®p}eorbakQr|Fn\še¾îsÞÇœ Èf ºn˜«“›l¿ [‰¢Z˜žS•A¨«eˆÈÇšh ±`«‡Z½Å…¥ß“qѹGrqShUWx;jpACxMCM<´a+ÇÚq³æÛ…ܤ]‡‡šf5o£bu‚XeŒY_‚D u>|ºxkšQc‰ESzUUz4f„+Ss9ft4`‡Mu‰<©}MŽ¥t“·d“´yÅËp滑¯ñ®~Ù†kXjƒDUm:\f3[p5‘†:Œ¶U„£_}¤U‡’T‹¡Z‚¨W…^ˆ©gŒ—`›O†­V·°PÂê‰ÁƤ£Ø×ªÖ†‘o®‚R¤Æ—¯° ˆÊs‡“fè¡TƒÔ¡žn€X’¨JžÌgˆŽdŠ›t¢£nŸ®n{£l‡¢cš¯iËÁd…â•f¤Sd‹L¦°GcÌ\r@N‚<3Z:XW"¿mI¼¹tâÕp«æÂ„â€m¯L³BÒð†¸ò¤Ãò{Ÿ¶–¢—²¯œ¯µ¥¡¿•„ ‹r—~k‘Nz§X‚…[‹„Wv—V’ŽFtœXs€Loˆ6’=…L¨‰ašy[‰zM‘G}»o—¯]¨l–­s´¦gd˜bµ•DÎñ‘¢»—z–|1MGXQ«Ÿn”¼jÚŒbÕ«lÿÿ’íiu€`jlCp…CX],„p;Vq8ˆn:‹§{y|G™ioS×®z”õ›o¼R½¤Y£ï¢r·][;gŠG„’^Ÿ½|ÿ×£‘¹h€j?Ä¸Šµí«¸jŒ£I|˜iIg+eS+›ºc°•w}MovW£áh»Øhÿÿ»¹ï¡–¶yØÙ²ŒæŒzzZ£ÀŠ]ŽBs…M‡µ{­­œÁö·³Ø•ž­p?i4SO,~mGžƒK͹x Ùio¯FˆxEŒ‚iÅ^l¤BµÑn³Öt“ÃdïÿÒçÿÕÇÿÜ3R#29E#2?.44/~S\µÈv—Üa¨ÅpÆþ¥‘Æo¾ÎŸÓñ°Äõ‡´Ö•ËßȶݹÊá¼Ñü½oœ[OP>¨Àuºû”üÿ×ÿÿÒØÿ®¨êm„²X^}Ašªl™ák¯²‚”{I}rGvy<µ¹j£åm²^Ä•{œ‚oÌ®t®¼fÊ¢¸Ôw¹Öo…­N’›c˜©a¸d¤Ø„¸ï•·üš¦á~ÁV}–eo^ao]žTGm=x•_…Ãx†±h–®i‹Ð_W’AC`%Gg(nxGi@kU§Õ©íˆ§çu~ÀP\z8nzTaxWx†Y`Fg†[‹Ÿc| X[t?_}2a{<e~D^kBYuVw¡XhŠAc{Lm’Yj‡RcCa€Fa‡D]yO}¨n€³ov«kmšEn—Of Pn“Has?`~G`„K]‡:Oj5`ŽNtªe¯ey§MU€2qZÆmÌ{–Òyнp~«tz±t·qtžo€ nŒ¦h Ôxµän~›N^zWm€Tm…o~›ƒ›»s~Ge|A]}FdMeXf„MZvWr‰[s–Faˆ:X„Bg‚Ql•_w§]|›Od}[iŒev˜ssˆGSi5dk^Ÿ¦Ñ¸i}˜UxƒJ_nD\rJ^~Np{\…BZwERxAVwD]yNeyI]n3@[/@]0A`7Ec7B\AFl`gŽow›`lŽMW‚hzž„ЬayYh_SpXToUUjIEk@Jb7NX*Ka7@Y;1Z4GG(cV vy9l•Vr’UMKSv[Eg>MS1Lb*`\-~k0}’E~’hy†YrWyS}…b|zd}~Vl}QovZ~uWvvLqcXd]JhkStx\mƒaysWÅsC´ªPu®s_{Tn];P\/^B.`P)U_5dP6vu4~‘W«†mϸ`²ýbÛ¦O`gwO1«.¬Ñar× … ” ˜QÿšpÿÇvœËµ­§§ÿ¤pÿÿ ÿÿÿÿÿÿÿÿÿÿÿ×ÿÿÿÿÿÿÿÿÿÿÿÿçÿíŸâŸ™Ûy˜ªeœ£gš¤gª£h—±[°™p“Ì^±¶TÿÌWÿÿ”ÿÿÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿ½ßÛ™­™¨¨[µ•H‹cDe9SZ+q/{œ6Ÿ–UÖ³]ªî´wƇpœq®OÇÈn­´u «ly¹i”rX‚ªco©k|[˜J‡·aœŽ[›œtx´‚±§R¤ØŒסc®}QŽSO^=›j Ô»j¨òÙbŸXXt}q0|ªRYªWndI}šDmPnˆLm‰Wo”I_}B^i9OcJmp8k•?L‹@@j8w] ©ŠGÇ©džõmaš†AuOg\9Š~H†œop¯Q`ŒEkp6n‚3v§DqŸVx—V`ŸTw‰JœLƒ¥f—‘Zy°Z[„^Šv>w±VªCvË‚›‹U¦Äƒ‡²‡i‹g`ˆAslM£Â[¶¢lö³z¿òªuˆ˜—>žñg¦¼n¤Äm•iƒƒR‡VÌ›YnÞƒ‚€Pʸh³Òª“ê}Z‘eÒ¢<ÿÿ©ßÿÓd¸‰g…>‘…4¶Ã^{§kÞµM£î´~†X|¡Op‚U†©]‹§f»ÅjšË‹µb˜É_Ò¡[‚¹‹‚–]¦Qn¾sv?XvF^V/cg5^_Bs‚2t—Mi\>Wô€MÛÇ “¦f”{G«Nn‚Ks‡Em§;†‚M`­Qr„2S~8@m*(R:<‰‹(fÊZdy;›|VÑvRÿÕ’ÿÿ¾ÿÿã˜ÞœoOjvPbf)v–@€±Jd‰9Ž–Cp³c[_A^Y;ekNr…KŽV§·q¥ÒªÝvnXk™Fœ¯bžÓ}ƒ®b™™]©µo‹“fv€UlwPš\ßÿ¿ËÿÈlÔV3b ½GLæyŽVba5ÿ”šÿÌ¡ºà’u°Qe¢8º¯˜šèt Ôd‰±]£¼qÛô¡Îá¤؎Îx„Åt€›Yi=|…DŒ˜K¤šiÂЙäÞÝÌå°¢¸n§Ž{ðÿÜÉÿðÿÊâÿÕÕÿ°€ªeñîÈãÿµøÿ°ŠÿiZ“Cfš5l´=^‹@„Žqàé§¾ÿ„àÿ¹£ÿs‰^Òé´ÞÿÏÝÿËÔfÐÿ­Âÿ‰ÂzbŒ?´å„ÞÿÂÿÿóÿÿëáï¿™§¬²•Ïÿ²Úÿ±·ÿ~w¶Ilc.ZN+’JÝÙ—ÿÿ¦Þá”” ^·jÍpᤣÇn„aš¦z¥U“ž_„‘I{‘SŒœ†Êé ¯ù›»ô¦«Û…g†PZV>^hOg{Kk…Ls„NS{Ev–h‰²t~¹jw°m‹¸jƒÃ\y¥Ek‚4js>sGs—[w‘fxƒeo‡Ji‚?b|<Nc.\l@\tPfzZt{L€‡RtHl}Ge¢FdˆAv‘Px™Tk‰A_…EPsTxƒ]ax;iqE…•_™©\]oMƒš{—¶u…¥q–¯l•Â{œ¾qpšBUlIo„Qmˆb\†;QsHn¥hˆ³_p™9XŠ,Tƒ<V€Vv˜`{™fp–Yh‰_®¤Ýœ©Þ„„°a’±…’Á~•¿}ª^c€IW}Hd~M~ŠIpT„¤\jšD\|H^~Jk}TdŒZlSqP{–h‰ª^t™=_„Ap—Lh[m‡UaF`PtŠah‹R_|9[r;^}mÀ¸‡¸«cm™TnŽP]{D\‚V„Ÿa•‘a’Ov”m­±gžWdŒMSz:Ei-Ca*?^2FiBW€N^†NUvX]xce„We}GWuX`Žhl…TZ\GTiC[aNKr>@b@EW3I_7Nb.Bi.Bb9U\=qi;a};k‰M{yRfŒRT^bpV?p<J\5Q]'Kg._c5Yn6dmHdmHhrKog:Š^8~kGteEnpDvbHpqE\iD\WCY_9R[9hg;VwBebNµgB£¥HЍak£mb`RkDT@<iK$`W0nU7…z<d‘b`fÖ‹N³ÿ˜\ãÃGpƒ}Z5¨’9ž¼nz³‰†•v˜ŽY½œds™w™ˆu¾¦Rÿ¼fÿÿƒÿÿÿÿÿÿÿÿÿÿÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÿÿ¨Ã¢Ÿ£zŽlŸ‰u¯ŽzÿÀvÿÿ•ÿÿÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝðÿ½¿«“£¼‚™ÿ–vÿ²yˆ¾—‰—`Z£z]pJp8lˆ?U8‘KÀ¬N¥ë‹ƒÐŠb¨y¨Ž=§ÂW™Ò–•Â|¥mSWnZ;u–K„_”–J„–d ›Qi¥oy|S—–J§Åv`ÔGrsQT=IzAsh-ʆG¸ê¥wÑ©r“[Ž˜Iq¢`c‚V…R“™C³¹˜ŒÔ{‚Âk_ºoIrJF_'SW c0c:[cLfT6p=Í [˜ÿ€”“pJE~3\i(rz-nœBz’;À›Ekº}}Jz†Ji¥]rŠXdŠK†™B©ÊfÜre”Wpw?M‡Min.} >Ž£DnntS¡‰Z_›vw“T¬sž¿L€Â‹‚ªcʬ{¥Ý…½Ÿ¢¬`åÒŒ|î¬c’jbsNt[:“GŠ®m}—]nƒPjdJ›¨T¤áp­ÃuµÞyjæ†Qc<cuAЍ4£¡\Œ¨hîÑp’ÿÅe«WgQ>•šIh~VyƒG›ªf§Ãl£ä¬ÆÒÃêÉ‹¬pš¯f‡ h~˜Wp™PyŒ=LhRla/r…5S‡5yŠ:d–L¢|N¡ÌgðãyÕÝ¥Êñ ¸Ñœ¸¯‡~ŠanDd‹HPq-x…Ds²V”¢L7—L.T3ëá”uÆ•PoIV`4°tNðجÿÿÍÝÿÈ—ÍŒ±›[…­`ÍÕ|ÌÿÃøÿÈÛÿɧø{e¸vXd+w}Bv€Sg‚Nmˆ8‹¨Oq¥Mbl<Œ¥Gv­P¡¨_rsz—K~<•Ÿeƒæ]Nk9Ma)ž‘S½é¯ÐðÈ„¼~jŸWUv3¨¬uzžoIj@h]5Š7¦¦iy©OuŠM¤âcÈé³Åÿ”۞·y›âŽ¢æƒ©æŽžã€›æ}žÅ_¡Ï†›»n›©pt›Tw·_œz¹è½”¹†¢ վܶ­®õåÑÍÿÞµ·ƒ|Ñe‘‹i«Æÿÿóÿÿñœ×sÓg»äšn±XMs6^UEέ¦ÿÿ×Îî ²\ÄܬÅÿ¦±Å ÿÿÕÿÿÿßÿº‚¹c’¡tüÿå÷ÿÚëÿȉ–_8H 2.#šxˆ»À¬§žšÆÎµÍóÂÑÎsY7uh<­§„ÒÛ}}¶K_‹9š—fÎÓ€Á›j§©p¶ÏsšÄ[cs:„¯p£×”Èks‡X‰³ŸÑˆ˜Õ‚|•n€ÃXv´aÀs¥â©å„¨ãsÄ[bœ?RŽL‚‘—½‡•Ë…‚®kˆµ_y®=e‰5dkAxCqCv<j}=t}J{Š^}›M|pEžWy‰UkyFlvOŒ`{…o™o‰Çx‹¶Wo’Dq{Ihº¦g¡Z_w9E^/NaDqxLz|QŽ…[bh?C\;_xRUsC9U<9J(I`@f„Na‡Vf…[z–`¢fvA`Š%P1Z<RpIz X^ŸN_Hs—f“Ä‘¥Ò†v›lh‰\Trez‡zpˆS[oIZuPVr@cvMpŽWm Uy¸\€±b„·]m”NjwOn~]–[‚žg¢gt˜S}…E`CvŽNpŒM\u9Pp;TkL`vVs‡S{…MpxDbpl½«€«¤[{¤Yƒ¦[x‹U†“m›©n‡ W‹ŽZ‹…© z˜ŒYu’VeˆJ`‡CIp(=Y6LjZt¡q{›XVtVZmOYoPUp?NuSo–]h…FG_GRZ0B]3_`65\2AQ?XL'Wg,Xh9Nk8Rb@jn=_|CLwVYiFSm7PcCdY?8n8EV@VV&Oq+dd:j[0rk>`k=Zn@ta:sW8fu?nmMx}DkH’u>…TexNge>\s=ZwD`y;Vk8l`3ƒn9 †Ec¸f]‹hHKUA7_M*gW.{h7oŒJ^rcˆHPÃ_1ÊÈj‘ô²¬°ŽÅ_tÉmYš\\j[rZ?yFu“\eŒi‡{=™—HÏfÿÔuÿê§ÿëÄÿí±ÿÿ´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÚÒÿÆÏá²ÿïŽÿÿ·ÿÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛåÙ±²ÿ™”ÿ¶}ÿÑ€ÿÊ“ÿÀ¤ÿÓ¡eý·hrehtJ{‚OO§UMvPŠt;£«X—³€‰ÌˆeÅ„wm|šC¿ªex⾉¤€ºmb˜do^=hBc‚8VlJŠpCœªI‚¬ru…T˜™G”Å|aÄŠq‡a–¬>ƒÔnµ®p¤®Wª»n®ÚÄ}Èo…²j}ºa‘ŽZ£µ·ÑuÉȿ٦–í½]œ›fdLZh3sb0hu1{}LacC‚n5¸¦Q½ÿp{«©Â¨NŸ½y—¯]ŠŸPžÁoqÁ…Æ®U»À€°¬o°¼lyÚzqI£FR¶®N‘¼~g¥}q‰YV CKd?kl#u‘<\ PxdJ«¸U†Ðwj”{t§TZ§E†“@ˆs­z˜ÿ“œeŒ‡O•«uq³|†X]‡kYt;k_-\‹Mn€.Å£E–ʼn§ÊiÂϺÿÀ‰º|¯¦a´ç’v–€„†W˜„]vÜ…g:òÉrŽÙ FoBuq-~Ëhtz=”‚M„Ãa—·c›¡|œ³uÀ¹|‡³W’²lš¡Vy¹V\J“o7UwTSV1Xc-z>ˆŽd©­]ÏÐêü®ÿÿÓóÿÕÜÿÍ’èŠRu94S ^\%Ye3_u2g€>a‹DZƒ-Y}+}¬4”©Qæä£ÕÿÉÆÿeàh§=¡É\ÃçšÞúµ¬ß€’ÀƒŒ­‡¸¨xÙðÄýÿ÷üÿô“Ï®R€G{qEŒTck=w{S}vF‰©Jh©T`v6“Lp™Vcu?bn7ds6vŒ8®•_¼æ¤µú|œJsŽ7±Ä|¥Áˆ–¨’¾Š†¬o’ |tªaušEx‡9gBVt1wl=²V|€[½º­ÂîÉ£â—Ñ}‘­n–Îw•ºt’ºg–¦^‘™T§´cš¾nm–EzP•ßuŽ˜r¼ä®Êyz’iLi/XG-‰…WÎæ¡j¬2_-`y;}‹[ʰ–—Ól–ÉeÿÿÅ¡ÿƒLU0KY+Wa0o‹B³ÐuÌÓ”Õô°Ïë¶Ðÿ¼¹ð¢ÿÿúÿÿÿÕÿ Ú_Üæ°ÿÿùÿÿä{¢e:F"2E25;A'S^5`p7Un<Ž«w²hŸÛ[”ÈM³µiÌÝ…´…†szD‡O”œh’˜X³«‚Á䊰¾s–Ñ]¡Ñ’¸Ú¡®á’Õ–œÒ…Åv‘¿s˜Ñ¯äŸ¬ÛŒžÐ’±ç™¶ô˜¤Ølƒœe ºvŽÉbTŠ>NuL‰›Ž ¿š¿e޼q—Êh}mAnm2lrG«–bœ„K}hSŸ‘sŠŸl™¿`”Àf§±j«ÄiŠÅ`©cˆ»_ršaŽŸmN\w=]iAnmN€_¢¥h…ŒGVr0?e+Ml2Sl8_k9Ja#@a,Zy8Nw7Lu.5N*Ji<[IQt;]xOt‹Wu¡Rm7Y‡/Tu<Gi4MmFk£e~³aq¢Ws i“º’»hk‹Uw’QWr/EQ-H`;LoI_€Pc…FliJp„\œªr®Çt­Ò“Âf}—I]mDXkL_w[†˜lª±v´¤Qmr<UnC_uGiyE^z>ZyEdŒCbuQŒƒz¶¦SfqDgri½¬rŠ˜Vnˆ\cw–^zœb|£k®m‚›[vuSc`JltbYwwMbA\o0?X1=`PsœdŒ£WqMWmCSpF^wBUyTvŽ`lŠLVqSd_=Vi3rb@Nh3MgNdQ:Fd+C\?BU5LW2Ub:Om=8k>BR>:M$8E.\E)AV"EW@O]&Y]+wa8€^6us<xxKowF{jJxh=p|>hrOsuA”w>‘Cˆ‡W\‹VfjWgzIamC_zKOwCMl?|]2¡w,[°UUwiEnDMW=QS*U^6nq5px?pr_ƒ`F W:€K›Ó„µ¶‘Ëoq¿˜K…UaQ8cc*mqDg†Nc‡]zx;€EÂpEÿ»]ÿÏ‹ÿ½ ÿ¼žÿ³ˆÿÿâÿÿÿÿÿÿÿÿøÿñÞõÙéÿ´êÿó»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÕÿãÌÿý¦ÿø«ÿʹÿ½œÿä©ÿÿ³ÿÿÍÿÿݲÿóqÃÕsX/©‚DÕssž†zŽ^sŠh~—Yƒ°hh¯k f޶_ͯˆç’…«ymž\f‰WGx:Sb'S`/ge1x‰<uƒCZ‘Vn;yšD‰¨o§¯v{¥Œ²PŠ¢~•¨mq¥h¹—S‹Ü×»z~¿‰n·p·b¯’Lˆ­…±±dŸÃ—¢«•a´ŒNh:ic.~ˆ0•™D¬²e­®XïÈdÛò¨’ØÅ|e¨šL±—oz¨Ž•™W‰³~ƒ–Šb©ygyL†uFÁªeéÎ…˜ÿ³l¤m‘M}…Tœ¥V‚­t}‘QQ‹Jqv2•”H’À_•¯pža¨³XÀ͆™ÙŸ‘Ô~i¨˜ŒN^›hi5xŸhcŒR®ƒH¾ç¨qаj”\t—We N^’4€€3œV›¿fy­d›z¥x‚…€³pq˜Æ‹\Ærq˜6w|JÖ¸Vnã®¶¬Sè–Z¯X‘s*ÈæÏù®–ó›j²Zqm?–B‚™NjŒV›…F}²\•²S‘ÆcŸ³^Áºdˆ¸vhn:nn<z{6~vD²•MÁ¸m›Î…µ£U}×”—jV®Ô‰•mP”N¹ˆ;f¾–IW%“oDY¥sco-g >½GÞñ´ÚÿÂÜý©ëÿ½¸û´ivŽ”e™³–„€\Àǘ‹Íˆž¼pfŽJXp7Õ‹oõÿÿ›»¯w‚Mv|JŠbXwvNfs9]j?el<’~Mƒ«\©”cßø¡d¤fZo5{‹Elˆ@nZF•fÈÚwÃÿ¦u­onc=©»X€ÒjIwAVZ'ƒŠ[ÀÁy¨e­Ê‹°Â‡t£LOm%zWˆ–E¹Ç[™¾rªÊ˜†Ïwеk‰ºq¯Þ„½q¡—bŒ›U‰Lz•Q‹šaµluÌZ‘’y‹—n±ÕÆŠ¢y£·|šÅh¨Ìyƒ»X‘Á\›Ël²â¤rw\‚¹X„›UšÆ\²ò{Ûÿ¿ùÿÃwöJe‰>WhD›—vÔaŠ•Mš»]£ Š¬ß—†Èmÿÿöÿÿÿ˜åq¡«oÅÝš¶Ö„SeE+,]W@ÒËX³/HI)h}7wŸB§Ámâÿ¢àÿ©Íÿ£Êÿ »ÿ‡«Ítƒ Oy¦>v8tp9qC…ŠT³o¯ÔŒ»ç’§ëŒÃ]™•qŽy³Ê•¨k¢»x™Ð}œÅƒŽ¶}”¾x ¿~£²Š©Àƒ¢jexXs†c’Ãn{ºSc–Sw£V™i˜ÈŽ£àœ†ªR{rE†T¿¸jv†=ZjGrrXv˜f™´{—´{®g†´t—Ï‹©ë¤¯÷¢¦ám¥PvŒQv•On’CqŸC_vYŒ’imzMWp@Nl.Nn+Qi2Xj/Ie(No2U‡9Iq?m€COs2Un<^z8^…?Xh=XiDj†G\x6bŽSl£bs¡e—ÂxªÒ’ŽÇˆ¶r„¸ai›Yv€V|›Wr¥Y~²FV‡7W~Ox¤d|¼m‚¯MQV1VS@ftRq›k¤½{¾Æm MdŠA\ˆ=Y€Qx„_’”y³“Llg?`Ž^xšLd|Eo~GWwRkKvkQŒç¹n—†Qx“oµ­j|…MXnRj‰f~Ÿgx¤[vžr—¯›«Rpr<ZaEuya‘‰N_i4BV7AV0@X:I_FPlRQpMPk:Gg>T~GUx?TkDVsO\xGx}O„~Pn†T{Š\]vNhwPphF9k:4TGKL)Wb*PwC_b;5n<9T@=>!K;ZGET"]T8^v1ak4jn9€m9w€EyxRzvMlnTb`Gin9_wEmF•o4~ˆF„{_mYJŠiLpUac@vo?l‘OT’`amHq_+Nd<8bFLV3Xm4nyAv‘Ps•Ug‘SQ”oMqc`PB©J5²ŠBŽÕ‘‚´mj¡mbyKwk=}ŒEy•R]F]xXdm6—a9ÿb8ÿ»`éËŸÿ¨‡ÿ«€ÿ~ÿà–ÿÿ×ÿÿûÿÿøÿÿóÿÿïÿÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿÿÏÿÿíÿÿÝÿÿÎÿÿÑÿÿÍÿÿäÿÿôÿÿÿÿÿÿÿÿÿ_ÿÿfpo­‹4YÙwP‚z^Jq~T„‹>¯lt§gg‘h‰ogƒ n‡“][¤‹^oUKrCVp4_i1Se/r*¸RwWŽªW{»dp¡X[˜e}Trºr_DhTW‘T†rJÓ¶O—ôº¹É¬²ÙœžÌ­‚º¨}ft—Uw†Vw–g—¡a’Ïvk¦ok8f‡G˜{;¡TÕžQñî¸óË…¾…¬žZ¡ªjš°ft°qsbY•nw†Q˜y€¬eã•F¼ÏŽ}µvZ•xR€Ipo8Ov~^Ÿ¦N]˜ny~8†¡Gy—T`«TcnBss:ˆŒ=zd©V^«˜¥’L¯ñŠŠ¿„k“JgKr‚PZNa\AEÝÀmßÿ•ÿÚVƒ^›f5T©Ž©g0¯«wyågHcHIB$}c/‚`’qgŸh¾¥U¯ÿ¤‡‚£³mž¶œÎ…¶½q·¿œÊᨒá^s^aS)^ƒ>xp8|@ˆ¢E…­S·¥\¡•x–Âo‘¬PidKˆF¯²]£ª`ð¦~Éí¢áÿ™ºê¥âÜœÌûȆØo{Doh9Ò†>|zLXzT:e#.K2LPU³G¿íŽÐøˆ¿ä©·Õ’°æ¡v´~c|KŒ›WB‰PGc#|r/ŒÂsŒÁik¡OZ=ax.xŠ;Ü\‰ QŠ|Kt¨F~‹G{‡Aƒ¨Sk‹?‚vBz—D£“Q²ÊueN‰I‡¤jsYV„gc–›V Èlv®an¬Epp2žµ<Èù‹vÐl^^/ƒ…W”¬VÂh˜’b½Ú˜?e2LH!›_|¸Kgw<´“Z—©Y‘M~rBs–Hƒ‚i~yGwsG¯°…¥É‡{¸g•”l—½iŸÄƒ‘¦dy£i†³u]uE•‚pŽ—}–°‘j‹V‹ r©á¿ãž…¾ez£Hm¥GUj>}oR”¸s²¾‰¢Ùyˆ±\¢¶t½ý¢Äz–¬O™á`n«;¨X¶nÒ©®µÈ‹‰­Hu£CŒ²[t²>9@D9#{[HkhC„T{ QqiHsu;Lb0pF`B”Œk³º«ÉÇŸ¨¶|¬ÁýÿÛÙÿ‘€º<}žQ±ÿ~“­y©“²×•¼ö¡«é„£Õr†©XdpKsˆRŠ®Œ¦q„žfŸ»†¸ÿŠœ×ak…Am{B†cz@€ŒP`‰P\vCtO~”]•¦u¶‘—¡•ªl€ƒQ¤œk¯¼‚’®T^t@XrR}dlœS²sš¶t¬tª¶½È龾᱿脽bl…°p…¥\e‰D[~Qp‰[lP]rHVo2Oi)Y9`E]‚=]„J€·P`9Jm<Qe7Lc3Ka:tnM{t5Oc6WsFdŽSt¬† Äާ|ÆŸ§à²Ðÿ«½÷Œ–É…‚½hv¦^ ¥w©½y¡ÀkxšWl”s‡¹|“¾~‹¸UPj1]i?x€Q‚‰e}fp‘ZuŽ[}žmµn²av”KlŠj§€@XUBp…c}œQqˆFj~I\‡RiInhHbi¡}e‹i¬ºÇ²iq…Dj€JoZxŒZ€‹a‹¡p–q—Rt|AbjCXkRm…KqˆBQq6>b5BdCOg5LY>YsEez?YyJfTdy@MR6CY?Pk?w…T„…c†•^u h_…fU{UmeAIh:L[Ggj8d|AYS`wNI^<:UGE<,KA!_L$Bi5aaJvc.g€Er|G~zCsOs†_f‚`GnSRI@VW+Vh4re4tf-lv>€eU‡‘Nf©xXŽkZsC[g=mmCK‹V:g[?J)ND!QG)~`4•‹9‘`Žœd‚“k–•i… b^šfjqM¡j6»›J¤ÐoŠÏ•w±p…Rq’F^†[HtRN^CF_8AO/j<,ø>÷€Cÿÿ«sÿº“ÿ ˆÿßÿÿÑÿÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùýÿÿûÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr½õ¤•ÎÔm½åªÐ”Çuf£t]~M[yJeyD9|FC<+vS/•E]€dqH†‡=QŒBMjOV\,u,˜˜H³µo—ë€m»žx•dC‹k„f5U­MOwIlu3r‚Vœ¡GЪt„ؤ–‘˜‡¼–˜²‰€Á¬£©lp¸_—‰U޳X«®c‡Á{J™vPt7c|&…6Ÿ†EÒ¿W³ê i¯ž®†`«šp—~y¥x””Tq¯m‚…`m­bugt}Kq}D˜¢Qr®j\œqh‚X~KŽVq¢dk„[l’BžšIÍ€ŒUœ^k—_jG…¤C}±M\®N„‘D­’fšð¦a©}Œ;i·yuœG`ŽK^=¹ƒ>¼ã•ïè«¶ÿÇI¹’’Q*v¶wÿ±LÿúÈ£•x°g‹ƒA®ÕWªÿŠpˆi{›[ä­R½µ¥Ú“Už·™³¸—“݈e“kdO:x›M¨§ZƒÌvq—Eb‡?\…3by:ip5|_Om‘X‰OͽQÅ¿Œ°S—“`˜£W—”\ŒZÑÄoÀÿ³¥ÕŒ¨èx¿}Iih]KD<R,fbc€?JZ,=\%<UB__y ™›FµãjÉÿŒŠóˆ“ªe–È~K‘ITn%trJ`xZR’Gg†7_‚E‡‡Brš]m€E•«Zˆ~T˜§ŠuˆU¯yQ·Ýˆ­tœœR‚±Y¥²Y“Ãs‚¬U’S‹¤k‡™Xv”Hp—LXl(w‘8}”7o N~AŠ­`ÈÂhëûª¾õ£Üð’‰ÆjÃ¯Ž„Ùl™·fn¹]xY;Õ¦‚–¬ƒqÂCŒžW¡ÄtÉë¬Ðÿ˨Þdfh6o}F~­cƒ¿W^œ4|uM¯bœW­À‡¢ã~¼å‚œ½ˆr`[€k§£n¢÷hƒµ^n¶`z_t¡e”´„‰q}Wl?Ld'KX"u†M·ÍyÁïƒÙÿšñÿ¸¿ë•¾Â‡ pŸ½u™Sq—7t7wª@w…1{¤0t.e„-FT(UF2yp2rz7k€A£©ºÃª–³~ [T”sF‰ŒGgn>e\7aZ>r€A”’YnpB}wxÄÒÄæÿ³ ªT±¬ƒÆõœpEk‰[™¿‡¦Ý“œº¡³zŽ”b…‘M€g«w¨Á‡¶Æ¯Þ°Î³ÜŽ©è]`=_pCt„UŽŸd®Pp°E^G}˜Fat[fl¡d¢l ªb§·|›Á‚´¹›ŸÅpr¢VuŽ[rŒ@s˜]Š£q…‹OwcˆlfZ“¬~Ák“§r§µrvUiŽW‡œ]pˆUh—RPxA\iE{ŸI}¯^¼amšO¶ƒ¸ÿœÎ`i|7MX0L_';S,U]Aia7Mn4V{X{§u‚¸‡}£deg™¶­ØúÐàÿº¶ð’Ão~»x—Çg˜­vª¥ay–X_xUp„ht…^yn•©jˆ™W’œXi…CdzFIb>ThD`vKew_v‘k‡¢muŸZw™Rnn+HJ*HS>Xc:]sOr–nˆ¨cz‹Wor:uTA‰ob»°ÑÇ»«]}›Ge‡BTpCXeTjyj‡³y´a„Ÿ\„—KhwGqrFjrR_kMRkBQgJKlOYv?JkB]kYp†HcUr‘Qbp2<P(:Q5Ma?^cGsiO†oNt”Yuˆkm‰\€ŠX`OnzYU„TJmU]YC`ZH`Y?SaAfZ9n{8l‚MEtJL[EsL+j|5qqH~J€…Vt‚Xt€UV~WZZVc`/Tj;[^<_e-fg2‹jDŽ’Q«zR¦tJm]B[=WT1?d,?M@IQ*QN#qa%ws@MMN^RC_J9YIK;C^U>€aR¦|Kª­V›¼r“±y}·{z’lm…Sw€K€xEs;ly?It61C4&0#M'”5îkGÿŸbÿî ÿá¸ÿÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿòÿÿâÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷üy¥ØNK•mCHÓŠ6˜å“™žy†¨†¨^…¥‡g±`b›_‘„HX’=Zl@t„0†K‚—]]^yn5W•H_tGm}8›‚4‰œN¤¥f{ºna¤…hLo†EœTƒžRˆg}«S‰Ÿ`o“_§–[¨¿Ž«°¬}³{Œ£„†¢›Áas³yŸŸM“Ïo‘Ýz‰ÎhN™s9a+IZ%~f$ÂŒDÓÙv­Ë“h¼zV„V›–lldgˆ@hx?f_^|LbvJfc:ˆv>Z dWqUeP{‘W~Ÿd­¢r²Ú‚å–o¦]¹‰Hb©¦[D_y9|y;€O« \Z©‰¶«M€ÿž‹S‰Å‚‚¶e™˜R|®~œ£W~œ{„±\|´\¸©U›Ó¡×ŽƒÌ{tœcä”WÊ´¥Ÿ£Š¤Íh–¦n²Žzž÷½£v¬ì™§Ë|c»|t†4`^1g€DƒJ|À`nŸUiš=|¤@™ª]ƒ¤x®›]¾ùq_ÈtSv)Y\#pq7€‘B±…^º¯—·]±¿R›½y ­L“šN´Ë_Ëi±¨iÅÀ‘½ì»[Áy(^$&@=@7MWQxŒ*‡ª3?ŽJ*3'K3;oJ6³Š~r¨“…žJBƒTBJae._‰.9‰'Td e}GozRjSb„K˜ƒ?{¬qPq0‚x1’¨T¹È{¯ƒˆ¡U€‹G‘¯[ƒœWNt‰6ŒF{F—’Q’¦T€”U“šH•Âm”±j›²kžÑdÅÊ|éÿ¤¥ý–†ŒQÇ䄸Øn°ªgϹš¨à£s¨R›¡U‹ˆM—šn›Ê‚´r­¸ÑÔ®ÚÿõÍ븮ò—eÊQdt7^l=e`:Y^2`i6…Œjy¶WНkȽ•y¹f•ˆL–¨Z’aÿÈÞæÿ˒匃¿b¼z£É…”ÄyWi=X}7Os*Q†/KR*€zSz]ˆwuÿÿöˆñ\~žERs6\g3eŒ5_Œ-k}.—Êb…²?ª/k•5‡@Å›pÆ­hνhÑaÈœ–±]^;¡˜d»JÖ–e¹©cØÅƒØÜ}ŽKŒv[°¤g‹£Wx…c…™t›n¬¾…«åŽ”¿~´ü§ãœ‘Ê„®ËŸºäž–Îg”¥T|H€œT_‰M‚–p¦¾~ŒÀa~^¤lv‰XXv;ow[ˆ’u޲g¶×‘Î{w˜Xc‘Bn“@`Gp–\‰¦f–¤f¦ž~¬Ê‹‚¶g {‹¤nw”Re†1k{7es3Pc1Y_?Ro9Iv@bd ×­ò‘ªó‚ƒº`šªVaƒA®`…Çcœ´i´¤UjvBWlH[h?hz^ÁíÄéÿ©“¦Pjd8fs9Ma(CP6rnHTg0[yHz¡gª}­†‚¯jg Qn¡„¡Å¢©»ŒšÇƒ‘¸fÁ}ÎvšÍsŒ¹eƒ¢[pŒRy‚XgQf’b‡Ãt—Ñik”NfrC^e6R^=_‚NgqHS^E`pKYxJf|Qj€:Lh/K`5Sy9\€>\Sw‰exŽP_cCgdD‚\¯½u’™k›aŒKe~KTvFY„Mo¤]d“flŒvz•bd}PW{Fj{LjwCRk4>T2:X<KhAUwOe{I^qIcydx–Vr‘Qg‘S_6Re,=R5IiJKU2^Y+b`-fo@w|R—}O‰™[f¯uR‹o;qW2OC@>,hH(~T5jBžŽH‹µc]¤s=mf:FGb?"oV#g{EhpHdcH^dFYbJghCvkHwcFilFglIrs8f‚=”tH†™MyštnƒcGŒ_VdFEy1FaD`]3ca'ku7dz<~lGnsMYhW[_?U`Ii[Fkm1zC¨–Dw±h‰›xƒªkH§oBPSbR,\x9cb=“k<†LŽ{]TuTJZGrZ3̓:ÿÚoÿÿ®ÿÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿçÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿµ³âZc¥84kA%A<9#QG)—`)[œr…rI‰b•±ixºƒ„¨kl´wp›gTŠF©i>™­Fa›t?zJCG2‚e-…šJ›]y”N{ªHgŽYg„GŽ’Hn¸RQ‘Psz3zŒ=f©g‰Š[£YU™k]eJzn0¥{xqžw‚Tsmž’d…ÓU|sl–V¸­KnÍŽ„…bŽ\V}Ga^8™x'‡ÆZª x·²~ˆ¬€ƒ²rj„]j}H‚K‡šWVv¯`g‰Uc‰Cyv@[žRiR“•T–žjm˜na‘U„TXwbª‚c}¸’V‘e]nQtw?WUMn;On6]~3™rAêÇ}·ÿÀç‚^‰kOvDTd1Yk)ƒŒ6sšiƒ£Hˆ¤` ­`¨Ë‡ˆ°—­®x§Ö—­Ïu¬Ùz³“›±rw~l®†G½°†«¿ƒ¹šg’tšŒHÖ÷xÄÿ´šÞ„ÂkkZIJYéñ•¿ÿ¬ŠÊt¡V¡šNÙ¨aÈX}|2¬ŸF†«^‘”]‹b@šc>˜•B¯ŸS¨»`•§b ¬fÆÖ{¬À‚Œs’y_̽ˆÁ÷¨`£}Ix16h Hd CV1_3BBe!/7#Q76¦5~®Onªb5D=>) MJZ¢^5PŠ[,Q”jbu/=l-Ob,|5r–NƒQYŸK¯ U¼ÇˆÅÍ—»áx©Úzjˆ1xvDd‰>lw4s|;‘Tš”Y„½[‘‰P}’PŽM¹]‰Æ`žªZÄÅm’¼ewO´Ìƒû²cÿÿ¼×ÿ´Š¬l¨‰n¼±u‘\—¤ZÝË€ÔßxÓüŽÐì¥Øÿ· ººÓÃŽË”§ºnÑÿÍÂÿšãÿ·­ÿ‘T…>bG*œ|cЧq‡³iŠœLUh+rt>~OÃÒ©Š¢pϱ‰²çœ´p|™Tq­L¦Ï|hÐJf}J7Y)wiPv K@l))>7DSk,œhÇn|yY‘•^v­R`w9e€5˜¯ay¤@d}1[b9™Ž[°§kÿ¬•ø³¢ô䪽ÃpÀ†fÿ¾ÿÿéÿÿ©Â½v”ŸKr«@z©_ßТßî–ÿΚ¬Ã|ޤjm†Hi…@ŒŽ~½Û¦Èÿ¥Åô±Á歫袙½’”Ç€}Œt’¶u²¡^}¡H]…@pz_‚•g{žMfˆ>Mb5ZX2^t:cT6PY5_]CfvCdufphg®‚^m¢ErŒQ‡£_аo—ÀjŒ™w°À®ÂÑ|†¯t‘·y޶ady3Rk$K`#E_-V€HhŸbt¡g‘¬ŒËõÇÞÿÂÚÿÂÎûކ³U¼c–×}žãu§åœÙctˆ5V^/^a9t“n¥¿Œw|PfsC\wDmŽP~Ž:]d7aa/OS>„¡}¦ßt„§s|®|ˆ²m¿w’ÇŠ®jq™e…¨ks’Mq’g¼iŽÐpv”WUuRs‚UŽ–Rz‘U‡¤oŸÁ{»es‰=MR6[Z2MZGiuPVh:JN/@N.BI1B[>gf7^p1QsM{ªjŒ¿joGRe8Ld<_l@ux_©¦sž“OYpH‚}Had;NlF]z[y¨v¥ÛvŽÎn€­pw“Qe|;_|U˜Œdv’Weƒ?Cc*5V6=Y=HoVl^gƒ]qvšÊx”ÆxÄf‚¬IXs5Ka6QlNBF6WW)_j4YE]kT—]B`wA\~m`y]LvMRVCcP2y[5zvEŠƒZŽ“`‚§s]ˆ‚?`c3B@H8)l=!Uv3VbIUf?<XAEJ<]P6gS7VP:cP8cs=ŽzQƒ¦]v—fs’UfŽdiuPr{KŒ„Nh’Ki„[h~=~h=\pCZgIP_8]S1Pb=ELC^?6V9‹ŠB˜¢\‰¢m{Ÿxu¤qqžeAŽbD[IzY+uŸ7p“T¡s>Š~K£jbª‹YÿÃ|ÿó•ÿÿ¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿéÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿ¾³ËJs±39o90A/,",)¡%ív&„̃f€c’„D¬Çl„Óz—¨z”—¬ˆy£{„£rfªY{=…¯UqÃq‘Vp GŠžT„Qq‡RƒšUxšW{‹D”ŒI—µT[´`b}SZ{5ž€G…´ns¦b|‘J\”d_tVi„/¦ieuÁga|sv=ÀœYeÿ{‘Y³¸[o¥o“xI~„^uŽQUh?yW,’š6¢¬pˆ±d—œ_¹›vœ¥{˜¦ji p{ŽEn—Zv F|›^[‡aboBl…TP~CKp=MQ7hU)Q‡9KG6CX'dg.‘˜P²lSSOh>Jm3Uq2^h4fy?hŠKhˆBÁzF·¿žv©]ŒYX„8jƒ,W†Gvw0fªUh‚E_ƒG]tSŒ„@`¯lª:¢Æ‹w¸•Ž—[Ÿ§{b§ ¨vH„¤u‡kD¶ÚgnÖLp>Žj)Èáx¾ç¥ˆÓŒg`RíÂMàÿ´Ôÿ™ÏÜŸ¯Ì‘f—_s_8°z\»²q|‹[вPŒ›\ª€Cs™S€‹A®¢E±¬]®´n—±Xw™MUz8Cs-–{3ÜôxíÿÂÄðÈqŠ^«ME|0DX,K(,T7&BI_rªš[޾nL¶Õd™÷xMåKBGSY(e‹_N`&Pt$uw2­åc¨ÇxÁß}™½iœËhŸ¿mó÷š|Ùks•Jˆ€Aµ‰N³½muŽPw}9y6q‡2ˆA¤­WŠ”ZŠ‚F†’Iw”V©˜`³Ä“ Öc´Qˆ™Z©›U£¿`ñôÿÿÔÿÿÿ¦ÿ±¬~T¯—y’„D «RÉ܉°¯d£·š¼u¥Ë–­wz¦nˆ®vŠ‘SàÕ³÷ÿ½íÿߎ¢xUN.ˆS`‘­x¢¹Š{¶Uk™C{ K{zPi]A‚ˆ^˜°ty¥U¨»XŸÖl¿Yˆ»[“Ëq£´ƒr°=Zz8Hv,YY7=J,4;GF.k€F_s7‹‰\j™EXg,xBwu=‘RxIxpAw}9‹p=ß‘kÍÓu®¬c¦›UÆ”güätù^ÿÁ ÿ᛾Êqٺ뿪¾`„«VÂfÃÏŸàðœÎÆ}±Ÿc…¤Nn˜>j†B§¹‘ÐìÇÕéÈÓø±ÆÛ”«rh…DrxKgdmyIr‚Gl‹JiNp•J_p9]n>_‘DT};krBZd1}u8£ ^b•5Db&Sy,Eq-Sb3ce<z„PyŒ^¤¹nˆ eµÃ—²É{°|¬À•’µSVj1Nq6Ok->R2|yx™¡wo|Peg‚ÊñÇßÿÃìÿ¶¸ä~fP\yX…£|¤Éx“­v“ª_pAsd5tuR™¿dlˆ9Ka.QbCƒš\u®a‹¾`b.EG,YeR¬yŸ¸v~¬by¬ewŸgn”u„¨jp‘TlŒV}’Pdq9a}S…§o¸giˆAj“[¥´TWy<VsCyŽKyNuCHU+EG+TS2RU8qcAcc3O_2LT)@N(;P4MT4[\2U`J}ƒm–k~—Ibp8UtBcyVŠ•m”†CJY5ToFpj2U]:YwQe‹Zo‹m”»{¥Úo–Á]]„K[vD_rJqwXpœg}£Ql9E`+?\8OsYwšj¯¤ÆÇꕯ接à|­MZq9Oj?OnGSW5gT3j^5Q{Ao`Kc:Nq=XOYUt<WpCOaAZJ:sY3x}L„`~‡Y~‰_cŽfOuhQSIVJ+bS([g-YhEJlA]J=UO7ZT5ZJ2_J4`3†ŽC–Sh§XgueasP[Jg_EXb=[aAe[BgqJ`oC†b@]m:VgK^Q6rm1‡u7wg:\Bj7——M„£fn‘p}ˆp}“ao‚]ru\r™P†–M„œVn‡e jOß‘Lÿ×–ÿÿ¯ÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿÿÿÄÿÿçÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿÿÿ»Æÿ±kµÿi}ÿÆ“ÿÿ™çÿÑqç¤?ƒf9D1>>*‚5ÏU& ¾‡u©•šlM‚±€k„›vFšROUdW:qŒC\ŒG~~Eˆ’Ikšr€…UŸA›°k|—m“ŽK|©Ix™[™šZ|L „7a¡nrpJ…™9t‘Nw‘Tb’[s>d“SˆTj®N‚|i¦C[µštw?ÅE€ë—‚žm€[†‚Hž~A`ƒ`p7k˜Sˆ…Bm‘UyzI‡ŽP|O™ŠM«¶q”¶ƒ~µƒfIo„KeŽMc€Mh„Sk>eP\{DC?Ed+iu)¥g1Z€Yt†=t”XgschhMC{G9=2ZT%?m7G_(c|'qyDš—Og½f“‘Ac‹mM€9ey4nƒ7Y‰AZ‚9`w;ZšEs8‹¡Wu‰xš‘ZŒÿ‰‹¯cj¬pjuBh…K[‡]ÏŽD€Ô’¯’V Õ—Ã…º³f—ÿ„‚©l¬ÌoH¹pl> иkÎÿÌàÿ±qè©6EAlb$|¶Sp­>޶Oy’M’¡HšY¢ª_½®e®¶o·Ãz°Ý‰œí‚ŠœR‚§Dl¢9ŒºLËÂsØÛ˜ÿÿÈèÿÓ­þ¹k¬zI”F+U"C;)]$M>;CTxVt!Z‹'BY-pu, šcÒÇ’æÿÎ¶àˆºÿzß[¡Òkv×_u¡_¨š\r…Rª¤p¥Ù˜·ä’¯ã}¹Ï“–¿fœ·c…¾^“Dct1~/‹—E‡‘H…‡:¨–N™¦Z°¨\žŸMÒ˜aTMƒYB ¶d—±j‘©S¨¢Z˜·e£¶j¾à¥£¾tó¾²¥”oÿá‘ÀwŸŒIÈÅoÈÖ•®]œŸh³º‘Ž®f–´e½ÿ¸u¼S_ŠDvŸDƒ¥Oz R~fE¬¡Po¹OSU5‹zt”´†† h‚©_oMFV/pOGáã·ôÿܶç¢g‹F‘h¯}г­˜žts·¤†v’R´½Ž‡ÍWkŠ;‚žV¥ÓqÛÐ}‚¹ab†E…yVª‘m™‹TˆN‰ˆR…ºU‰µ_š°gŸ¦b ›pœ‡]¨˜^“«TÄ¡q溃󹂩®a¾×|‹Ç^¤¹bѦ‚ô›ˆ˜QsƒP¦­…Ãú¡ Õx–™c©¡r†³eg•A‰jµª€©s‘ËdZ—BjªP§àxšñzu©StŒM™ÒefŸ@n_ƒš[{NsSƒ™{šÏ‹”Ìt“ºpqŸPn•k}­r¹u—Çvo±Vi¡Vq¨M`H^pAk‚Fo{C”³‹—¹…’«®q„¨Z_|GV\AmuF‘BNs8C]8bZgeÆÓÖîÿàíÿ«ªÇoQa28:2RP3Qv1>Z7QYIXcAymKœ–fšŒU|nBrm9^i@sqa —~ŸÃ‡±Tw|HsrNl†[uYq¤RhžPUQaz`‚™iw•M]:HpAT}Kk—e¾†–ÁnkR¢´…öksŸRi–JTD`sHsxCgV,ZP-L]5X\2HJ1SV8VaA\nKd|DYz@VhARa5SYC{{XhtJg{F_ˆ@YuMapNlzOmi;PZJ†yO}e.NeAp~Wƒ°awªlq¦t|®y~œJXuAQpGW~;QkDRn[uc¤T]„4Af9HhL^„l‹«‰ªÌ«Ì硺ߘ¶áˆ˜ÁHUkD\wKUzBLMF@J7985GE,dP/V].@M8L5CMS+Ie88_5LF/^Y*bd9ssIcfNmnR^O`‚`iq[^dClcBao3Z~AOqGXSDOV6hL8c_7lF‘|DsˆYzkc\|X`Y[oZ<`q7Qh9VJ/GI.ZI*dM(^g>li@zg=h?zgRŽw=¨‰J‡xEksPj_@wsAf€Rc~[u‚Le”H[‚^“gB«§C‡Ò„‹²{ÿ¬pÿö€ÿÿÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÿóÿÿûÿÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼öÿq£x8N…@(PÄ-!ÿu,ÿÑÿÿ«ÿÿÿÿÿÿÿÿÿÿÿäÃíšg¨vjL‘H€œVbi@ksDއX‡¨`[©y@€LJL$_\+lq@p–LX’QmJ¦JŒ¦L€§jycvFr”Wx„QŽˆOr@«z?vÃo{ŒLw‘D…€_hŒLl’Nq~EmžQ•¦Up¿hx¬p¢§Q}»”sŒi»ŸSl½|fmY˜[;}ŠTªO|–b’E’«cr§bQŠOkn2–„6{“Všš_›£m‹¥rƒœnS•jbr5ReHff8i„Jr‘D¢›Rr¡ewcNƒvhXr[‚x4y™ZXVkh<vp?huK_‹B~‚AW¨dRn6`…:p‰?cŽMUWM™i5\…`]v:\‚.\7Zˆ8Gp5hm4všJ‹§eWk[kJN„7Ù_2±âÍ…sÚ}†•Q†¯_\¥dey=\aIš»X±Î‹[„‡l;¥¢`¯°†xÖ|`”IŽo2¶°{±àš¼«{oÚ¢x£:ɽNÄÈŠ¬Ö«½Š…¤_¤«\™Çfš­S¡ÀtŸÍ¼ŠÙ¸eõÿê†å­bŠAri:|]l…e€BLrXvOnMÃÕ“›Ò“h¶f5W)gL)CV'<^Nr\{%t®;z¹C¢·[ƒÞ”bb0¢œˆœœeÂÆ’»ß®©Ô©„´{w»e~“E†©n–ÃtÆåžôÿ¼îÿàÈÿ®‹ó€k‡@|qY¯’U Í`êØœàÿ»±éz¹]°¹YÌÌ}Þõ­Æë¼Áܤj»a“›C’–UŒ¨Fµšs¨£e ž`¬[ŠS©âš»ßÌäË^jFš›h­Ñ–¡ÕžyQ`n8|ƒC‡[ÿñçáÿóhâYS€.ˆ´[‰‰Kº˜i°×uÈb\±8Yy7~–[kX?uS?{\Bm?€‰W[W>fB9”l[‘¥\€ª\„œUHg5V—<^x9ÅtŸå‰ŒÝzŒ£Q”’jŽœwœÖ€†Á`dŽNe}C‡|L‚xM~\A˜‚Vƒž_wŠra€K”‡Zº™iÉ™rñÌ„îདྷmû‹˜ÿ³ŽÄ쀢Òl³l쇠Äy’¹t ¾”¦¿|w…c¸¿£¶Ü‚Õʼnÿé°¢Gu”M£´gµæ•çÿ¿Þÿ¾ôÿâýÿâîÿÕíÿ®¤êˆ«Ì‡…¶O|´^t±^_žRpœ\Ÿ¾z‰¾Wh›Jn›[x»p“¶„³zde«·¬Îñ´ªÚŒy¤U`ˆ;fy@nŠH¥euŠ\‘™o¥¾|ºÛ…¦éÁú|™Ñr•Ì…†¸_‚‹UbcT‹Žgf{k±™ÂØÑžÂܹ?=H#GH,Qg)Pk=nŠQm‹V¦e¦°^c`0^a?fh=phK‚m]}l³š©åzz7O[>rˆX{™ZwŸWp‚BI[1HS9OfGcCe˜Oµo“¼‘Ä•È󲟾Zw”oº§~ž­l”Õzˆµ\|ŽMgƒLi}Gnr4Ye>gvAwo<[^2V\0FW=MdZo~RbpLlnHij9NaKuS––Uz²^v¬\v—\mQ^rDkZCaL…j?h`2Q]?_qTnšrÈl‰¸ct‹VgsGShBUnM[m8EX;PnQe‹bwœhˆžM]„CUqL^ucu™y“½’®ÑŠ©Î™½ð‹µÆScK_NmŠOIPT5:4,/.=,'DJ6C*>9)S9#KM)PM0Kj6[e4`k8Sv?TgOVaCv`B…v9R‰œgfŽfeydfhCiHxUnyVwRBa;m=‘–Q‡~[–}X~zM~pTurEZjORV>GT4NI+W='`H6XJ,fU7d]5~`Aqd?€_XžjE¯L„]JlVRZDq\,b‚Mp|LzD‚ˆNx j²šbÿÌeÿÿ©ÿÿÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúõÿÿÝÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÿÿ²±õ|.Vg%&7)&B¨)ÿg.ÿ΃ÿã£ÿÑÊÿÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿúÌ¿ |”Z“†Bo‚GfaJlfCUoUhM@fN2Zn8nm=No·sŠXˆ“e€’^vŽce|XRqAciHmy;`~6dx;ºt6¢Çt€”V‡uEbvApl;ކDo—_‹ŠQ¢«ZœÄŠ™ÀŠ£¯s~Âj{¢lj]pŒW“i7™z5{X…`޶X•…Yj®sjiHR}Fck7„<ìáW¬þ¸y—~—‹]i sq’Q^•Qh~;^r6\}=^o7Ÿ~@€—eK˜^L\-bo4{|?¥fhzVn9—‚T__i\^Prt5UzXv’;Û¹]ÿ¨~˜Nˆ\€™T¤“NizkY}:B{<Ja,Cg%V^[{<ej5U„RPV*lj/d€O¨m8»½~w±Š‰˜Va‘cHuGai+ª¼D¶·‰WÔ­r`BzK‰zCÌô”ŽÒ‰l _y£HioBq†O‹x;zÍy|¦Nxš[xˆLt’H¸©Z²·|—[[{YŒ6›°€’°–Ž™†‰“o¡ro•Mz¸[oH˜°agºsq•<uÈeeƒIo¿XN’<@^3F<F3:T##BBFMx$g[)Ř‘…Ó¨”™ST®)8MH!{Iœ­jl”vpQL“º}oœdm“LiCš©nØÓ¤äÿÎóÿâÆöºªä™WUX|.ˆkIŠ…z„~7Ûª“éé´¼ò¬Êši§¨t±ŸŽ¯ŠŽ‘h„“Z·ªÀ†¦Ì‡¢T‚…D|ŒC¯­kÒ齸ݵ¯ŠÃ©…‡¬g³cP…6€†HZˆ“cy“Rxž[¢¶]‚·LÿÞéÿÿÿüÿúºÿ¦ˆºb²´|²¼}³ÉЏmªÀu´Øœ’tqdÆ…Š¶ñ…—Égx‡Gng5e¨:„}LÃè—¬ç~‹²m–«R¢ÃwЏWºÂšÈò»­Úˆ”ÂcqœBІ`ÞÔ¶y©hh…G½p…šL©l_·«^Œ}Oy‰_hŽO]•KoŒbˆ±xž±|ˆ¦V‘­_›VܲxÒÛƒÿÿÇËÀĘnÍ´~ÈêœÅ੼謜ÅÌÇ‘€·a[p\ÄÑ®ÓÉyª}K~’C›\ÄÕ£ÿïÉØð¹ßÚÁÇ骻ÍÎÜë¼Íã«Ù鎴i¡½†¼æŸ½ö‘Ãe|»\y¬c½í ÿÿ¾Øÿ“äÿÎÿÿ÷ýÿÅ—ùsg“V‚´®ÖŸ•уƒŽq´×ˆ¤é†·ã•°ðyo•U —h¼¹„¢Ê{¡Ê™¹ÜŸªÞ§æ¹ê—Ðî‡q;j^Hop4D^Hn™\}¥Š¸Ã‚¢Ìi²Nmˆ7c€Guœ\yc”­s†NzƒJp„=kpNˆvO–‘d³~´Ù›²Ýaj'?L0f‚SoKpu1IP*@L,Ta7Li?jEf•U|£s˜¶„˜¶ ·Ì˜€š>\‚Rtˆ]‚©t’³o„ªa}‹S£‰^¡ža£PZ…HrvErk;rm@hg7hd1_g7MU0NJ3hbDo}HXsHo‡_z–_¢oŒºu‰µz€¦b`qAcbKxtJ‚‚Hkl4ViGoxMntXp€OTj6GM4JZ:AT4AU8AY3E^EhŠRmŽRe]t“PfŒMi‡M_~R|“k–·iˆ­oŽ´‚¨Ð†¥Çgy¨VqžYk‹NFQOE6:61-</)>/A<'B>'XJ&OY/P]7Ll9Y_<od5l?[ƒaKtTY[@‚U=ˆ“E˜™e~žu\~vuhTj‘Iu]bVjUNa]8U<‚z=’sL‚oKxrI•}K}«KkkZcNdc5Vs<_E8jU2{K,Pi9mD>wg1†V9gG~]Cy^=w`MlfD|bC~=fZ…xT•›HÖ¥kÿ×}ÿÿ·ÿÿíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿfæÿ`?}-C>03%"& 9&ïn*ÞÄp«ÍŸü¤’ÿ¤]ÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä¬þõ pÓ–As\B@-A=$AP$I`*U.¢‘?€³deoHjKgJ9‘o4sˆYqsY`lFdxL|:q–=d‚?¯t2“°^‘[¤O™•L XpœZ~ˆI²—UçÀZŸ»Š­k——rn©alwxhŠC{~Fr@ˆnHs8~”[z¡g“ŸU™l¹~Pp|g˜y9úçf¢çÊŠ‹³bJ¡ime2}–K²cÂj‘χiŒ‚g^C‰„UfV‚zKf¨mNVJ–V/r½‹’Xž€^FIfkM3]e2Vi2q0œI›£}ƒ€yv¢fR†R^s=qx@L`DGv-Hj(2S,TT"ey.RvE[^2hhGV˜Jcm4–—FŸžp™Íp]—_\k8aw7Yt<µˆ8®ó|“é›N—~pŠ>quCè«E”ÝÈ|¦k…ËOq»`ªD†¯J}±Rƒ«f{V^´\…z<r|[ª OÎÕsdšrXa6Ry8P`*ns:_œJ[a)o’3}¾[‡„S‡£d‡¤xr£b„±l}WÒØp¾Í h߇gBT 9;W"–¯FEÁGF_#Jd&Bh1RSd]•˜]g§q6Mbi2v˜NO}R $;(tt7‚šP[}Xot:ˆ»gÀ¶vÛÿÙâÿÉ´ñ«œÑ‰e‘aCF+GY"MW%Uj.iv+„“C±q€£\н[eµI`’4jy0~“Qk^=zC­¬{ ¬‚¤Àym±V`r9““q­×…°ã…u¬S£štŸÏ“бb‹²yv•pswEnz@’‰PåÍ¢·î®¾È’ÿùäÿÿÿ®ðºŠ”\‡¦[€‹Si¢F€±H³Ó˜aqIsuPjlC³´vwpO‚sL·€]”¤RȆf£ãoj_Bíì¿ÖÿĤËp³ÎŽƒÚbip@©’ƒ¢£v³Ûš©á…Æp“¨z‹˜Yƒ®eƒÀa—ªwÒ诤Ύ€¯eU‡E`vJ…­vœ¶ƒ‘Ú„šyœ£|¶öž¦¸„ÿÓ¹ÿä½ØÛšª™o»×‰·ëžÇâ«ã嚢Âv‚›t‘°…yeŒSp{uÓõµTaƒ6uŸFgWUYM„„~¶×¡ÒîÀ´Û‹„¯v•¬‚ºÁœªÞ…šÔ¶è–¹ÿ º÷–®ô‘ŸÐ|½Ö—êì©Ïè¦Î¼¤æÍ»ÿÿÔæÿB{4\[k‘²“½Ð¯Êâ«ÌòºÓþ½×ÿÑÍþž§^¦S{Qx‘_mšVu†y”²ƒ À—•Ö‡q¡Zƒ‹L{„Jpj5KrLk„\ާe}®j•²ššºfcw4]s1Z.c{D‘‹[…w\”šk‚¥Tt„M}_ ¥s”™w”ÀlrŒF`o0IT2buF`oLmO]{A`r<gzGVuFqxKqvPavO\pISwlˆ©v§Si—Yk†YeYb†J_xUxtV‡vµv•¼u‘ª\x‘Iap:hwFr‡7Tj*Gn.Rg2ZV;lfLw~\{‚dx™co›dt‘f„¢ew˜j~«y„´i{·k‰Åo޽dˆ˜V}NylAcc?cg9]i+CK)Oa1La.7Q2FlNWŒ^f[a€J_|YmŒQe}KgˆHcqIe„mŽ·ry¨Zsš^s“hs”f}šVgŠFZp;AjVFE8JA1M</J</ZJ*Y[6ah>‘q?x“ALILcGfP6nl0`|`IxdTZNl^:zzBpƒOeƒVbkRnlOj‰O‚]nŽ`hj\eb:ok8{d=…iE„tG‘hJ¸ŸL‡Ükyž‘ŽyW•©Wj”^hZSh[;r`9Sr9wG>qa-~ZFxb>raH‡qC‰›Jž…Y¡“N– a¤hÿ´fÿðvÿÿ½ÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Ãÿ8rØ$0‹^ !7?!23(#:#K<QD$sK$¨wL¯Ÿm¢ƒÿaUÿ¶_ÿÿÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿî™ÿÆ}¹Ž«[‚ÌfÈÇtÕÿ…ÿÿ¤áÿ°€ÿ’c±qÅŽJ€¾\^†g©\3§‚I‹ŒW‰‰M‡¡P½šAÿàVÿÿ´ïÿ¶ÿþ¥Íÿ­œÑšÿÇrÚÿÄ¿†~¯~‹“G‚©iœ‘Ps­ŒZŽKsg:—¡:lŒ^c…=z–H­]“¾f”»uh¶…wƒC“¦Ešœ„Z“zŽn?f‘YClQKh/tr0eˆVƒ‹Ttb_^bg;’h<g¯cSZSxtL†Œ[Ù”T{ùÈl}_l_GpzMH™e„–hRUQ0Srfx]0aKfqB|CUxM?P`No2;i4Wd#[z8A}6X"Š¡Lj®VP@‘|?©‘h\ÔŠ|_8ZzPSw<_|@”Œ<‘°y…¼|v›€L‹efy9„Ju“_…ÆtZ´zU\1’{Mœ¦zV¡z€l<j©b°šS¢ÝŠz¶vv’[ª„Eu¬q”RKv¯Xk=zŸO€L—ÍQŽ·j„ˆZq†Uy„S‹sÇZavyB®¢k𬂏Ø×~µÌV¤ÚY˼uaÒ}|*l™Cª–OkÁiZ«<\l7hXB>zPXP+dŠ<E‹@7Œ)R>Š©W›v__€D¹‹NÏó«Åÿ°ÙûÇÞÿʯî³Âz€”ry[QŠ{_‘—e’Úd¡ë‡}ÁrlŸX{•Jµ¼yŽÔwf¹ZLo&g~KB\#Ve*c…1’›B¶ë Å÷w¡ï‹´^¾Ñ—±æžrÙd–”s‡¢[}¾r^ŽXIo=nN4•–_å°‰Âÿ¯¬Ûxÿß±ÿÿü­ÿž‡´f«ÂxºÓ¡Éó»Îü»œëŸe†B‰ƒM§¿‰GÂÄ|ƒ¡Fš¶M†¥O²…VǾ|•ápšÆ†ž¥´¹‚¡Õ…§}£»x}ªad…<“€kÊé³–Ê€lx>œ§l’°y‡½m†¸x­ÃX‘‚U¢‰lŒ¥o©ä†©Éx·â}ge>vQ^´“ˆ§¬‚¯ÒŒ±ç”½Ý²à÷ÄÚÿ®¸÷•¯ñ ±é—£Èyu®d‚¯s…`”ZoŒV’†·Ìx‘žP„¬Yx¨_mŸ^£Å„—«‡ÄÚ“”¿y“¹q‘­zƒ—l–§y¨ Ž²Íš¶Ô’¨Ë‡…§]Bc%Li,N7PŠ=yGS”:Qq[vfsg…E7X;vškÒ–·‘¥» ºË­¹ÙÀ¾Ñ“¬Õ}Ÿ»k¡šgž·lŠÂgc›RTWq˜€·ÜµŸÓq’¶w³Ò‰…®ZluP‰•f”¾vÀi~«„„¢_]k5Ug3Xi4[e6mn?~j:khL‹sV†§a}ÀWq¤Xh•Ju†[q˜Z‹T`’Ms‡MˆvWp{^bWp†Ym–KazCZd=^o@`g:Pf8axc›«~›¤d€³iŒ¯jн^v–DyŒZ‡©fw¨i„­g¥hv‰i{š_t‡XqžSZ9Cj0TlK“‹cޝišªZ€ŠDUiOiq[i|Ma„?W}8KxXtŸ‹–º}À„Ðy‘ªj‰[ƒR}uLsƒR}‡Mx‚Bkk4Td8Vb5B[CLyoy¦o„¢bl—@Hb@JaBSk4Ib3M_6Olh‡«‹»UqŽOjtQZtHVu=Jb8?Y+]p@cl?X]7sRCri:`i>fkCgtEtvNk|PNvOK\VZJ?Wg+\[2Bg?T^M^k;[e;\d;lz@ˆJm…T|tTy–Vu`nnXulDˆ„C‰‰X|K}ƒN¢uK³œHŽØ˜«“¬¬l‚Ót~’trpQ‡rEŒƒA„uK‘fA‘n>‡mL‰mM‡iP­}K´®\Ϥoþátÿÿœÿÿ¶ÿÿÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙúÿuµÿX‡¦Bzd#HD#&B 6.,4*<-j?6f,6J3LM«f$£´Sm¢š~d\ÿ?ÿÆqÿÿàÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú¸ÿˬ̂ïÅuÿÿŽÿÿºÿÿÄÿÿµÿÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿÿÿÿÿÿÚǦÿ¤‰£nvœm©‡Qc·lo~N“‡Dºª\n͈¡V¸O¦ªv’¹˜¥ƒ{»}eRikR†GxŸ†’ŸWMpehb4o‚7[p^x‚?q‰W“–Yr˜†T~LZoAZe?œ“K‰˜—™Tä•iíß»š_sÔ~^nmÅc?\Ÿ VX<Xr3oX0t£JfTy|HUŽWIR;dY.Qx>F\4J_,Me0R^*Yb0Qy>tv%ª—PÇ…y¤b±¼MÀöŸ™µ›§ÿ’z®uR‰D‹{:…Ÿjw¢mKhXl†K^ŽB5tÂfv³_GpOas1[~;‰Œ;н\ZœET8yl;r˜\´`”›k•­j–²qŸ¢w_œS©;¸ÀpÅêwŠ«”‰•VV‡aUZ;jq6¹Y€à|r–f•Íl†Ãx’éz‡Ìe¢Àb¬ÉxßÉ‹Àÿ±¢—[a§j,A(O"ÿƒW‡ï¬]bGu£Nkž@ƒ°KwÊT“ S‘³|~¨j”»U¤Êc˜×Z•ÃS“JÿäìÿÎÚÿ̼÷®¥è¥Å|ŸšYª®qÉã¬ÃÞ·Õ羱ߤœÞ’ˆ¼r¦´kÝäÏж¥¯À›r®yj{D?‚8HY%Zy/Œ€Dðèªÿÿçÿÿÿ¹ÿª—¤WÌëΩù´¡Ó†»q‹’L‹§az¼^UŸEjk<osAë•‚ÝÿÁâÿ¶²íˆ»ÌzÓþ¬§á‹Àê²÷•̳—ÐýËq¤paƒ1¦ŒV×·‹¥b¥zO‘iDy_8‡bF±™bŠW¦Åx…¸Ts¼L…ŸN’š_Wg9€Tk›E_};i†6‹”^†¦Xl‘I…a|™[ŠŸl{^É™†™’U¡eJ›”Xj‹H˜¾{¦„t½Ø‡ˆ­V™Çd€ÁT~ŒP­¥x³ÍŒ³É”ëýȿי¿Ó¡ŸË„{’e¸×¥Îñ­˜°v­Mo?k€Qf‡O‰Še¦j¬ÓrâΘÂÞ•šÁr`ŠP‹}¤ßy–³c‡šYuMUw6;K/ˆ–ix¢KUy25H@_-ežUÃw‰·{‰«krIbšOf«U‚Êz—Ø~¤ì­öŒ¦èƒ‚¤qš¶” ÕŒ©uеv“½x”´l”½p’Ðr‡Ïƒ…½|ޝ•»Òº¯Ü‰¤Í Æø»–ÌoXŒGa„Yе{›Êt‡½juŸN`{Gdj8ezGpmBsd„µg­ãw ºh®Ë¤í~“Îs‹¶l¢^‚ªf’Ê„—Õo†¬XˆMn€Vh~Vs£^Œ±Sk}9iŠA^ˆB`y0:W*>Y[~’gwiqœbi„]c„Qf€Mk„c’«ršÀer—Vm†\•ev’`o™qŠÁu¼dŽ™O€ƒX}n‹ºw–Âr‡µWev9M[5Rg1Rz+J{/Is:S~Ulˆm†¯„š´v‘ŠXŽpQƒsGrHp‚KgMdqEgl>^pIbŠKe•WcŽ_f‚[^t[dxDK`-BU/EX&AY(@T0H^Pf—…¸Yr‚Gbj=[d4Oq?^Mb‚@hcB`t;€dAt€IEXC[Ts@?mU2Me=@O=<=49B:@E9:@,KF)u[.t‡HfJblE…sD†I„¥Yi¡qsbi`„Ltib^i;nn<‡s?‘M‰‹VN—˜V¦¢S‡Ð~©‚™œi‘°o«£z¬Z°d”\™zaœyP®”N³¼c«ªr¹‹bþ´cÿåˆÿÿ¬ÿÿáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãñÿhŒðP¥{Žr~˜rƒ™iSžr+Um"%)$$/)@<^F Ej07cYBV1cW*‰‚=‘k{zh~Wåw?ÿ·Vÿæ¸ÿòÇÿÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿÿÿÿÿÿÿÿÿÿÿèØÿ² ¬ž“¦l{•h~”S‰ŽHˆ™Nƒžb}¯f™az‰J‰ŽXgž_r‰Tb™PžŽK‰˜O¡‹J¹’ofœjGiNP\'Q^;KL1Y]2bxF¢l>dhZƒDEp:LY*YN2b^FËuKбqÙÔ’‡\^lfmQ vKY¤q]f>tq7wtL†Œ^c—ppeE_yJY—L\`0UKJm‹7O‡>fr2¢Fx`h‘[b|7`ŒAqpJ‰‘U¦œd¢ÿš¥”z‡•‚j}O^‹Ol…?T~MQI6VvAâ…HþÛn©T‚¡a|Çr]‹ICz>TN&qh5½J‡­yQJVk.ƒ:¶m¡®f¼Í„‚·wv©IužV§§J›Îm„[o’HŒ„G—äšT§áp Õzt¬qq’Xw¤Vš‚L»Æ‹Ë㵺㾎ی¸o£µƒl—\IE6DW(Y]&˜–BtžfŠšWÃÚ{ËІ®™}šXs’?¶ÅdÃÿ¬¯ÿ“Ëê‘Þÿ¶Úÿ¹’ÁwÏ×máÿÃÓÿ©Æÿ½¤è®¥Ån–]œµ\‘»{“®{›¶¤¹†¬Ë‰´Í‰¿ß±¸Ì¸mž•rh«a`£JgˆTFl9Zi'‘Žm¾·Øú©ÿÿÿ¨ÿªŸ¦EÂÝ€„´7G0x4(Êà‘‡{Xº½¯x¯‰r•J¸µsß¹~ÙÈÑ몹ۋŒäo§T‹¦aµ­|®¹‰s™;…¤\aŽE}ŽC ¨i·¼pÿ›¨ÿï­æ­pÛ«q϶sب‰‡³lŽxV„–NwvL”`®Œq{šSœ§c¶²u|«Lf8[†5Tr.\w1Um0¬p±¶tvl=Ë™…áÿª†¤O †bl…?“¦` ÆhÖü›Åÿ•Ïà©úÿÊëÿ·¬ÿ|´õuž¤dçÿ±Ž·sb‡IUvEžÆ§ØŸ“´‹›ÁÖ쬓¿^R€/RcEƒ}S§½j·¼ˆ˜Ôh½µŒûéˆj¯SfLŠk™›fy¢PO{38R$/MZ=Pq+Kn,Kr8u¨a¥ÐŽ§æ›§Í‘’½q—°¬ì˜ªØ›°Ü¨°Ö˜‘°|…¤y—»v‘²y£x¢ms‡Zu‚Wiz[…wžÊ…¡Ãr›Â{¤ÀˆÐ·™¹‰Á÷™’Ü{z¶`VJpzX•ªs¡Óy“Ín€µWqIe|<bˆNwšu¢ËŸÇü¿Ûú«¿øŽ Þ”¸å™¢Û†¦Ï†É~¡ÊŒ­ÊœÃЗÖqÍh†½br¡gм†˜Ðjw«m¬í‰¥âd°FM6CbWqŒj}•l‚´qƒ¿mz¸nƒÀhv¨P[S\tF_wJ^ˆez˜{“±krŸu‘ȇ”»vt”Yƒg…£kp•oˆ–~­k€ŽK„yMe3Tx0U}BOFNy@B`Tm‹o€«_tœZq|R€ˆMpDd‚P^}IdtAm{Rw‘b›guVb{?HW:H]GYnCTk+E]1EY+CY'3D6FjWh—{ª\sy2K\/Fi<_Yr”Xg…U\d+dq;yn=w|AW‰TJnW6`6*M1)74,&*B1 NL"[a9bp>wD€¨Iiˆ[bZxaI|B“ˆ^y«b\•zRZ\XW8d`F\h;WqGsY8‚d8„yJ“ƒR‹¢a—¬r‘¾q€º…‚n’]¿‹RÈ V®¯u»–oä‘_àÈnðåƒÿÿŸÿþ³ÿÿ³ÿÿÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿž”ªY‚¿)Rj9(0M<"`G.Ž{Lz³m+ˆƒ!-L &(&>0Q=…k=‚ ^ZŸ†]h^bjLEaKZ:GaE,cuK”m9Ý‘Oÿ€rÿàÃÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍéÑ—Ÿ¢ž©Sƒ³t€Zl“g_‹M}{EiŠRc‘[y˜O‰‡\rŠWg‡P‰uO©|QÀoŒd{UWhHRk8X[0UR1RX7el6qŒC‰E€‘jN¢YIhAHb-SR*]|<žLµßptËq©gbC††C»Y¸§^~»c‹X{x?syVbvOs|A´­Mu¸Œf”`azH_|Bl£IxQu¨Z|ŽTk˜Yv†CiGq5”´âŸg|ÿÄe‰]`¢C™‡5a­rsyGg˜YjƒKem@ÿªYªÛ¹­z~­n|“Z†»^_Êkm•JYQ_[5€™?s’Rh•P“‰DÐÑpµçŽ·Öš“Ó”ÄÌzű¢›¹‘o„_oˆ<·–R™ÁnæøÞÿÈÿÿljþ±ušW”´K“Ò‡ƒÃh—¸ižÂ…‚¡}ˆb‚P–´‰a«mKc;n=£©G¥Âf¯áx‘­t¨ºtiŸ_†˜Jr“L‹£X™ÇnÄÛŠ½úÚ¢ý±¥Îÿî•Ë‚±Ìyðÿ µö°¼«€­ñ¶¨¶‡ÿÿ§¹ÿ¬r®hŒ•j{šk–°i¾ìkÊ{Yƒ,[\*\I.XQ%s„B„xOFe<AZ2dX;n†N”š\ÎöšôÿИ刎Ëhu³qUnL0C µY>åÖÀg`Ez€M}SȾ~âÿ°§·{š±ss–gŠ˜PŒÈSk£;q‘Bh‘=xxAd°Ox|HºÀu×è’²ß†Ðæ—îÿ›ùÿª õ‹ŒÅ`¿¼bÉÏw€•Euw8gw6bh8v}E„•Yy’I©žq˜•s‹ƒUŒ’No=b‹7]|6`2‚‰LŒ€^WB3ÿ—¬¹Š¯Š}“š^nx5ŸšPÞ·‰ôÿ½ìÿºÎÿ ½ÚŽøîÑðÿÊÀç‘”¶T‹œS\p>gnB„¡`{—[“¡n©ÂŒ®ß™Ëܧš¹ee¤@Vw/wyG•“`¤Ák²À‘½â£«×–ØÚ£ŠÀi~‹Yƒ–Oi—VIv($>%9:J+Ru;>k*-I'_Pf±±š²½“ŒŸ{œ¦r_ƒ^·²•œÌ‘›ÈvžÒf­N[yHu†LHm4avJlŠ@`E`¢@U‰/VqG„«kk;`‚>dlL†ž~‘Ð}žÜ¡®ç£ºæŽÈbfžER‡?RwAJfD[{h½É~ÒaqŸH‡š_}¦‡—Ñ›·íŸ¿ÿ‰ ëŸÇ…£ÉˆŽ·z¨xš»ˆ¦½Œ’±w–¶›±…µÑˆÆn†½z™Õ™ªÝ•–Õ‹™°}•žbxYp©L`’Zršf|hƒ—ršÄˆ›Ò™Ì€¦ZnVmŠKp–X²n|©xµ‡”—ƈ·z¶|ޱxŠ cy˜Vc€_m‹Wy’J„ˆFop5LuA\‘bu­^o™GTˆ?OpMk”^x©hsŸa†—XrˆMe~Oe†K_x?atNdvXd‚^kŒQ`{>Tf9Sh>YlDTp:Lb1Na6Pb2AYHWybh‚loŠ^[n3I^3Eh<XnLalOYmO^€<QuLVdCbmDnvFz~OtSNŽP.lR>26Y9eZ"yw?·…Mÿž`ƒÝo{Š{b‹c_h[j\AtWJXnMRxWXXSho5j‰@c‘]_tXxp>˜…CžUˆ´g‘—g¥œnšªq‹´€€–~†WšjL€S˜‡oφkÿÜoÿÿ°ÿÿàÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³°ÿ}nÏVg•ESC<@?)408,%&6 h* Œe'Rˆc(Pj.,+04/=!-6 d3x`(p|aiqt`oc3XC"27)c"gn3k1®†Lÿbÿý—ÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜâô—Œ…•\¨Vl b“oI€¡MiŒ[‹˜NŸ­fš®ƒ`–wq{DeŽUeŠH€p?‡’I•bv‘_XiSLj8Cb-RL&>T/BF'b^.]€;NdMSe3Tq:Vh=Cq7k\*˜˜B“ªom¥w{{^|˜[}®n{²b•¨S¥ÃssÂ{neS—\<t–f L”²`™®¢—nl’‚b€RŠ•CZŸjX}Dhq<ny>Z{Ddq8gp<„r@ކMèÆ‹ôÍ„ nw…eˆKN~Sad.pˆDptK‡‡Hÿ—f‘ÿ蘇]‚§r‚–b™±šÊœ…Ài–d‘‘<Œ×m ©cªºg¯®oÉœqÕ˜h¶e©ŸA‡¿‚‹¤rJ‘SnX.|–Z½ßn˜½“‚ªk‹˜Z•分®hl¬Y‚‘H–«[z°aš¤Qp£`P~:\h+‹¢K¨µhšÍž­uа„‚©S¢°\‚ªc};ϧmï늪ÜwËk…§Z§½r¥×ƒƒ»|R‚@Kf8žqF‰¶{¶}‘°eˆ“JÃc°kØËiÿÿÀšÞ’da7n›S^u8£Réÿ·¯ÿÅL›MOJ$ZH(IE!‚b;|Oi`OhBF1ll3f@¨¤t½¿ˆ¢Ñ|~Ñ|D7p]H†Aÿ™f¢õ¾„gœ­…¼b”Êeí飱éšcˆWas>w|H‹’\y±MkŒ5†®C¯ï{íw|›^‡ŸW§Ûjžåˆ¢{̽ ºÃ—©–j“¨_ïÌŒ×Ãi£®n…Fy~L}y=‘Vé¾”¸£¢¤i‡ƒIq‚9ln3vu<Z¼¾{ØÜ‰ÊÀǧ‰ìÍ™[X3ŽfVunJT^)yj<²—cÈЉa‹Lܱ¥Ýå¥ÕüžøØ¨Ââƒz¢Kž¹_g¨:_>fg8CE'OW,uŒYµÇ𥯄¯m}¸ltŸQp‰A€xK¥¿lx‰J•—‰»âŸÇ¶ŠÎß‘¬Îd¥©o–µul¤G9i)X‹Ci±Sp£dSv9\n<ge7jgZl¤cz f~Éb^¡Mq‹^ŒŒjrŽIzj„ši^?kŒXˆµkx›P€¥e‹Ó„¢Ñ„ˆ¿\x´Uq¡Qd’?[t4Ju/U€f’´|’·w”¯}ŸÜœØ|“ÙvˆÀig¥MVˆEi¡hŸÇŽ­ÖŠÃr‚¨p“¬‚·»ÝŽÇÿ…²ö|‘Çm€¨nˆ±^ƒ¬h’§x„£x—±†•³uФp ¿s‚´lš¨„µ¼’¤Ú »ê‰¯L_…ošÙ‰Áhy°k€´hf‹<KlGZl“²‹™É}‹Ån{·b‚¸Y„»m‰Æ{ŠÀ™Äz{ž__€bjŽo‚§z€ lm•hœe¦«g–™Ndz<Rv6P}Cg§dy·xŠÅnp›Y`„=A\<Ryfs¨zzª^w˜`o›\iQ]€T]{FRmFNpEPsL^FZo/LU*IL4DYMc…TeFYm@`oGlyQfuOXhFSiVl„Jk€;]_-EI/?H9ETLRƒPUjT^aBgnBg}G“TŒ‘WsŒ_E}bP>YO<)NX)_X5€l4´vAl[dwkZmOSaP[S7[S4l_9m‚D¢mP›ž?Àt_Ÿ‡iabvHˆ•Zƒ†mw•fp™m‹pN„rLj‹\ut[„~S‹‰QÀaÿ±zÿÿÿÿÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÞÿÿN·ÿB@B04r;%Oi3AB61L@50!,;-4 01<2!!00/'=(N9YX,5\8;B0CC4O-U9(B;+=C-?M/'I'k!ej¨u5ÿÃ]ÿÿ¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒÿÿxŠt{ŠO};g¬uaw?r9‹©U„jk®pŸzaœ©nqÃmc“TQu>KkBwY/{”Px€^q…NMyWHy>6R,UL*Re4Xa<—Œ8X|U[i;]o9[e6Tt6Dj5oj*›NŠ¡v¾xŒ—a«ÇqÊŽgÁsh’IWkJ¥{?ËÇyz•­Wta~nAyžUmyPRwLjo8‰ˆRŒhr›j~—Kt©kt|[~S¯‘R†›g|UË­id¿°c…UƒŒKfyLNmCOh3t‰AyQgŒOÿ•FiŶò‹Mšÿ߃²w—žuœ¼£]Œˆ…B¬¹k³¢}˜‘_yªm›[ɵr¡—„u˜bÄŸS˜À|†ºtw’RqWtBc…PTk>dX$ e?l‘w€žTs­Slš<wœJTšIg5ržJvuFoW™žf¹sŒ¦Yš°T†Ésy J|ŒJw|;ŒŠAµ¥]£’kšjBfŒNan<xl;†zej–KRƒ8P[†®Q†ÏlV’Ig’Aa|0_”-•‹HÔáh¤á‰š¤bŒP“°bd§[ˆB±åŸ…¼qhVIp;BK_T'iV&[c5PNŽGzªc‰µRŽÙpxÂR£ÎbÒû™}Àeü–³àÿϺՑÿž©ž×ºƒP˜–i‹€T™°eàÌ›¶ÆŽ…šD…JxµVc;e€8Qs$cu$Ë›£¸ÿÑ•›[À餽⨽ث†àp“äx¤ÄW­ZŽfOæ—}™oå°‰¤´i˜—Q„¡Ay·DÒœƒÚ«…è·ŠÊ—s¤¶f†‹O‘‰M~~J˜ySß²ˆøÐ¢æÿ¦ÿÿÑè×¢—|\¬¡dxd<^Qe_8\c9…{aTv†Owh9ll7ji2}‘=}¢5yšJ‚Ögd®Fic6EX"ZT1u™HdƒP‰¢nÀ{›Â¹z„¢Wƒ[œ½nk¦O™œˆïÖ¡—±m•œ‹ÈÚ›•·l€wTœŒN„ªE˜²v¶Ñ£…»pT;AB/JM0E`3NnK•ªtÓâ—¥ævl–Q_‚;X‚7\ƒ=WrQy§eŽÃƒ–Éoj’Gd‚SoŽXo…UŒŸ|Åà”‘×pÍUe„Cˆ]u•`m•_^zSauKq]™pŒ¯„•͘Ç}˜Ãu§Ëky½b{›`o†V`kPcoNKJ7GMS‚Ÿm¾{~¬MgŽY}Ÿa²o~§uˆ²}˜½޶nk„PevZ„‰dŽ[g‰¥…’¶’“i“·š³Üª²Ü‘Ј¡Èry¥ZhD`‚V“¼wŸÊx“Á‰¿ä‘¯êqˆÇzÄ~Æ„‰¶g‰ž]h¡g{­€•ƉŸË‹¢Äš¼„Ž¦j„—Op€EYx>RnMe‰f|§{”¾w¨Ua:Gs8Lrgx¡zФjƒ¥a¯o…³kz¥^k„M`‹YfœYY‚RNo?D].A`,AY4Kc\iŽj~“V_{HXpMfkMxfEa[=CUP\wThzAXb5KS8^[@edKRkGZpFfd7w}HŒŠ_Š›cežmaw^eXDZNBKR03Q.N=.]L Pj4X`7J^0MU0dR4fk5xm<yyGs}U—n_~—OV•uDfo\EFrV(qoIˆ\U€aEztOˆR~Fu}S”„VÿžSÿâmÿÿ§ÿÿÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÿÿ¬Ûñ¸²†Ç§¨º–´¥š;Ö«,Hƒ4&t,=i5]421q89128C6J*4C%1"(# C.KV(S\6Sk;Zb:Uk-?d;<7&K.#jB O|G¦j4ÿÅAÿÿ¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØÿÿªÕ±e¡c͉Ag¯v¦ŽGvºn]‡o„}O›—X{”d}ŽhiŠV†zG…“YjTyzD_‘DYiOpjD~‚Ztzc_cqH`r8eJQ€MPf4C]-Za,W:dw?K¢O^c8q|LkcjsKŒ†E²ÍrŠß x²o]¤N{ŒAu}\e…OPkEgo/‰zEœed©xty=U|IQZDŽˆEp›u^ˆcy|CO‡d\U:YTAhXGpa=·Ý`s¤”™ƒUvé~SrEbo>`~Hu|B—›X‘žiÄ¢VqŒv—wGêizÿÎLr@EJ/^p5’}D„ºp|ª^oygwgOÔi=–à› b}o^†Žbª§Xt¨tdŠBSwAg;Zz@Qp4CX&Hf*iI)vhIz›Zj­Gr•AbšUurBªwe¤Fvv3¬ÓvŸÀq‹½mu¨MrœCUª=tx:j{:œN™ºqŒ d~˜g”žK\…9Nq5Yl4p4eŠ;z„>£¶†q¡s“Y„¯]}pTbD‰r)¨°X©Â]¿kq–UlxE˜Éd‰ÇhŒ¬NžÇ‘K¦E?c'YO&g?…ˆS«\uÌp…‡U­»‹ÄÚ ¶èµ~›k«“VôÿƒÁÿœ€«M·“móÅÕ…ê‡ë§¢Â•j~Lª`¬˜jQ|;„iDs—M¦¤m¬Ð‡§Æ…[Ÿ:Sw S{-Te'™ŽX¦ÊˆÐÙ³矤á«å‹‹ã…~wQ•¾zp|5®‰cÐÛ‚Ëޤ׀|{Gr‚E‰ƒQ·•qÁ™ƒÛŒƒº¤p³—qЇVŽ„StŽIˆwVÆÆˆÿç·ÿÿÂÿÿÂÈÇŽÿгÍȆ{ªV`a.Mb2Qq4rKvµT[h9mƒS^j<=Lcb+y¤C~Í\œÉ‡Ÿ®wjžFR}1Jd2pNf„H²Ë“Îÿ§¢åƒŸ }²nž°‘»á¢ ¿|šáƒ¬Ö†˜S^yCxkS¼“‘xŸZŽƒ\¨¡r¢º{®É‰âñ¥Íÿ˜fÍVyym‘·~¡à‰§÷†Ÿâ~“Ôl©X{‘V_‘??l,=Y?–¯„¨Äq{£Na‡4W‚/R‚6[yAu“c‘¾“ÈàŸ»Çtx£_¡Ç…·Ð…žÂdi‹Lr¤LY—K[ƒi ·™ÓÛ¥²Ö{y‹Tq—Xn]i›kŒËka¥?>p0*S!4R.RwRn‹Wb†Oi§q~»pv¢\b‡bncz’h…•_sŽXz¬^o§d}“MpzMqŽ]s‹Mag[‡©Ž Ï› Î®à—¯Ô™·a‡¢[‚¦d“Àv‹«]mƒh†¨ˆ¦ÆˆŒ¾™ØŽŽÅyu¨aY›mz·†‡À¸x޶yœ‚¢›|šžr”¥iŠ¡Nk…8La/Cc>Mp\kŽb|by¨Zd–OQ„ahiebq™i€¬oru…ž]^t]\‚q{šjiƒZ^wMWxC]wCTt>Moaq—dt\rŠGbeBhX>h[=b[:WW>[iXu„NpsFdiJeoOsyOvR2h”9†ˆHŒ”Y•kƒ›|Y—vdxigfFarJTeB@e;CH9QJ%H]'YQ8]c,ee.en@fuFcrDhxMp_Ew`DDjGHMSNM>X_-\X5lX5†X<…o<—jL²…WΤjâšhø¢rÿŒtÿÇzÿùÔÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmxÔi^P‡lPˆ–Y¨Šdi®l-†­166h,1i3\25Dj(xMR~j$Z6/}AE31(B?SO+pN+q†BDvECNMdH+B~HAMFAB%\O'ÿ~2ÿÿ‡ÿÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÿÿ¸®´¡hj™gŒƒVw™Y_^©wMW–XŒnAt‰BmˆWZ‹YMh>ŠZ1¦]h^\Lh9MT>hN;rCŽƒP‰n_v©…z˜OjœnP“^Rf:Je)CZ0]X*W€F_l@Q]@hf6W€Xdp>ª|>ŒÀ{“›djaeFBcA`X'mqFx•P}wJ“„J–‹W^uDzu1]~EMbAfp5Q|QX‚K`€BQ~CL„FYg,tF2ªeI¦ûœm°‚¯žMY ww9…yHo†b~p:¬¥TÝÒ‚o£€kzP`oGˆX?¼â™UˆpƒD›¥N®Ãqšã]whds2r=æ§ta}fZi2hu0–y<z®l€™L‡¤e€ _KiNRl/b~7]”OCm=V]*k]AjUržSj¬H`‹9z¤L™W¡Éwó•Tµä¶›­m«ÿ›h£U„”Mc~RYv;Zh;fr:w‹X|œXoœB¢‚A·|pšNP?\k+lw7±Pw«fOX=cS7ŒSÁÜ‘œÿŸ{©U¬„ZɃaŽª€L=¤Ô^³å®Æ„Ÿá‹ƒ¤i|¬Yž°>•’ly’I¦†I¸Ö’7;L=»­€è‡K•<‚|9á§hä×Ûö”‘¶h¡wHÅʬ£ø˜|ƒM‚•Y·È~€³ado5†pD‚¬]™¬bÔÞ{×\ži…ÇgwJTo+Dd#WT+kpSysXcfEj{BIm"Xu)‚šYœšcË㌵ր¯Áx¦§gxtE“Sž“W¨yaŸ‰[žmĪzž“Z¸Ã}·‡h›jO¥rY»‹ÿÿÇÿÿáÿÿÑåÿ±ÍÈ‹Ÿ´f¬Åxo§Jb…C_„>~‹T³^y¬\h”RF@(“oS[v0jxH“¦~´yciZu[UzkMxuL~OjlJŸ´ƒÞþ¸¸äcxBxN˜m“—t¹ÊÄÿªš¼ilyF^Cmf=eZ8€{^„›SXy-Hr-Lj6¢›ùÿÐÐÿ±¿å„°Ë‘°â•‰¼wƒ…jž˜ŒŸÕ{„²~±ûƒÃl›×uÕuµVl¢W_ @V‡9oAg€Fp›Zƒ£n}¥^h™It©c§ú“Ãÿ“¢ÿunÓa ÍŒËÿŒ¢æ†Û—¡Ô‹ Ô}‡ÏlŒ±jq–j›·¢¾Ôœ¼lt“Le‹L`…DhˆAS‚=a…_½ŽšÊ‚‡¿ry¸bxPbz?Ca>aje“u¤Î¤ÒckžRx‘Ur…CPnFj‚Z‚‘]Š›k˜§av‹K]w@VrNrŠez™di†Gb€Qm—lƒ¬…žÇŠ¥Öˆ§×ˆ˜Ê‡–Ê‹‹ºsmŒMUyKg‹Sb€Ed‚br—]h|QopBYr4Gk7LuBSzSo†a|•[| k¥ešg|—go jw©v®lnžei‘O^…RZ{_^fc]ewWa€ShŒZy•NXtNj‰Xn`|ŠVsn;`V=_^E[hRatW]Kf~I]f>liLwtXˆ‚U•g5š;³Ÿg’©mq yjloy`vƒNs‰Ku‰Vf…XQ|LTc?ma3Hu3HZ;cZ4cd3^j=^pPTdGDk=MR4dU$Rn4\M?iL0hh:cwO‰nYÌuPÿ‘Yÿªxÿ­{ÿ«„Ý«p‹‡´d…ÿ_LÿÇÿÿØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×䨟Ñ;e·%/p"!+B }GgŒFvŒ_¡„KM¢k;`]fF*Aj3{\;W–>MjmDL,i?+’\3K«^LkbJa1\e;npFvtOd‡OJ‚GsR>‰f$€pH’vPò›Fÿô~ÿÿÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ^|¸ºrQr®cŽfg¢Qq„N`Rfb>_lH¦q>n¤]|Š\{VM‘sŽwHoZQZzF5X4HJ*`U0R‚?RbEe])€”Fr™nl–rV’]Yq?lt2My<dˆ3GBSX-Jw4[f/waCY†Bƒ{>«TÒmX¢Q@b5BN$”]$b‰`~jC\„_o]8š‡;ÈósaºTa>zApTv‹W_‹aZ{=ˆj/p¬bOmUTV,Äe8¡ÿ³…‰xf˜mRr>l1yrE`~O[f2Ó‰AÄ¿dŒkV_6r^1‡_?Á†DtÖ£~{L´£a£Ö‘solb_Hco:…‚N|–YcžJny;k‹F—}<‚®okˆMmR1L;K)d;h‰M^oBx]M{A$L(=/z<y¦ku›JxŒK‰Y¯Á|xÖ– œVÁ¢g£ÿ³vAg¢Wrp3^›U`r3ez=ŠMŠÀqrœH˜Fª_‚¦c’¡No6v–H²—s‚ÙšK˜CZz3f_7‚‰Z¹±~Éý½“òl™Ž>¨ e®eìõyÞû…ÿö“¸ó™¢½lr¨ir‘]pBuvCsu<vwG‡„^buLys8xzG‰{hi8²cšÍlš“Nq“gm?$°†Uƒµ€³”a‰²dɧg°½u´¡eÉm¶Š€XŸk•uŠg€i;Ѭ”–ÈezmAFT,=a'X[Dy”s;‡/FE%Ii/a^/˜ r¢È€ŠØgx“>”oN¶{c‚„P´{UÕ¥}·±w«€f‡T¼Œk¨sd¢ŽhkH’T¿¸¿­™ÍÒ© À†ÿÎãæÿ ÁÞÁóš¶Ýˆºó¢µà’Ên†²j¬Ä{ÊÖ’‘¨\am5[S0}‘=b’3]q;u¦O[v:SZ1kVAp}Ko~Cbw;žƒéÿ¶¬ñ~f’By{B^v-Gc6³´¦Äûª˜ÐsqµS¹Á|‚ Q•“Q‡¦Qo†Xt¶NUŽ1Bm2R]_Öγ·æ’«á•ªÍ ²s…ªb{ŒT˜Z‘¨}޼–®ÏŸ¼ö¡¼ï‰´u‡¶pµo—Äpm¼Ld§Nj—Pt’b‰ºy„¸gw¸n½ó®ÿÿîÿÿäÿÿÚýÿÈöÿµÐÿœÂýžÙÿ±Íó¨Íð¨Ïá¢Ïzƒ¦_tˆJgEgTy•i’»r‰±QcŠHk–Rp Zu”nŒ´“­ÓŠ”¢gp‡HMp;>p5GdFwuU|‡r˜µ|–»mÊuœÙdr©Ld|9Y{3[‡B`–D`‰Hm—Rf¢Yk“`¡cWožjv¥pl˜dt–ix•w~˜nhv[k}vs”cfHN‚Lr´]m¢h‡¨y¹m†«W_t;Pv;Su>JjF^tSnyUjIJR;9@;OjUY€ev•†µ‰²q{–bk„T`…[`ˆfq™hmŽ`f‚]q”gmšdv†IU\:C\?Ma?OcFff>fnBivYl—l{©g€¤U`yCOX6TJ<]\R†wNˆc?‘ŒH¨‹^•Šk|›xk~tusV|†O€ƒ[‰fzYerTaiHjk;[o<K`GUX:oW,p8e›M?T:RDb>%¢m'„š;bšixcR´^<ù{SÿŒlÿ±rÿ³‹ÿ¯˜ÿÿ¨™­Ë–”®‡uvÿbbÿŸgÿÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Ëð>d³%,U,OxPw|K`„^‚xQ{y=[hmlRwqE¨ŠH[Âp5sƒ?:-UTrq2³Y8wÎ{i”frTXhDlcP‡jEPŸSsPUq„8•Gÿµ[ÿÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿs·ïML|€{7Ñ£U„²yqºdrWSšL[V?~e4‡™RRbUMBjj7qzH¶¡SW~oOW@NH*J]:j‹?]™VgnP—§EŒ¡YhŒYvoUe¤MPjT^i=†p8˜”\_¥mQ{Ewh/„”OzkM@’1r¼_u‚ZjRZ‡F@m=HR!|_3q™R…ŽQC¸|n^5§“DÝàŒÆÿÉ¢ú¦mׂSŠLVi7^l>ny5s¡Q¦°W•¹”£wç·‹ôÆzgmˆX}xG[sDdY0V}Alb/h‘Hˆ?k”chƒDx[9t{Ue‘Q„‰N|‰]³ˆG§êš¥b\U|u7‚‰Hd¯g€¡Mn—W_uK¸q7tÇy~‡D@S9a†9f”Gn€P]~IETIt5spI\a?~™MaƒKfk7|2Ì•\¸¬r£˜vŒ­d¹ÀcµpS|Api*bƒLxƒIh†@z}DwŽMz•I‰’H”¢q€Å£ŸR鱆ˆ†lq¢UŸ³PÊØŸ¯èŎΚxQwª[ž¤bÓߦÐêºú×¶Ãÿ˜ÃáŽßÿ»ÈÿÇÊîÜÿƤè‹Íú£vÚt‚’\x¢U¦½i«ßŒ›Že”uSl”M\c2Ž‚X˜YC±ƒ`µlîÿ³ÇÿÊwžP™Y›ºo®°g¦í­¬UŠCªW‘^†G”qLŒ{W“sU[ŠJmSAaWž–v¤qZ{h?Wc;Ro@Wd=S};CO)ZV2a^1Wi,—ƒl©È—©¼s‚¢V…ŒJŠVŸÃkõÿÌÜÿÂÃæ‘Àñ“˜ZŽeš²`—¯U’‚Yla:qzC~S«‰xΓwÿÿð¤Û„ÕÏ—È鞣²w‹ygž¯‡›É‹«Üž¹xHS3kGHk^Fmj:s‘Nˆžb¢¨u£±vˆ”Q’Šaœ`€h®ÃšÖÿÂéÿÍ®ÿž}gb…fYŽMxL¢·†·`˜¸] ¶^”Zv•JpŽP¶nžÍŽ‹Óƒw¼f•Э핉Ï}‹–u¨Ê޵_u³Sv YŒœch–Fržu Á‘Š«r…‹¬[X~F†g†¤q®¹‰¼ÑªÜð¦Âù‚Ÿâ{„¼oŽÆƒ´ô ÷ÿËÿÿÐÿÿêÿÿîÿÿÔÿÿºÔÿ™µß—¹Ñ”¦p~vˆ˜m§u‚±[w¦B\˜8O~>eˆbŽ©qs“Wm¡e{¢fz¦]b‹Zl’^|_sŠ^{˜w‚µheŽYQwCktWv–Zs•duˆ[…—u£ÎšÔmo°ECj/ZqKj”b~³o˜Åw¡¸j{š]n†Xg‡SyŽd|¤wr¤eoUX}KIh7FS3H^HiŠ`z´k{µmu¡svŸ‡«ÛšžÄz”µil~BXr@Tn6Fb9G_?Yf=Za<:Q"):)McKh{Zbƒy‚­””Àob‰MHuV[”Vc†b|ŽYj‘P`”d}²p»`xƒ;Db(-P&*Q'/M9YrOa‚SX‹lq¥‰Žµ…“©ck’F_|9LY;WTOppQpeFq‡C…yUs“e]˜ƒjyps|Z…}N‡‡X‹t]nmSplNhb;om@ef8YbDbc;‡f;¡‡Enš[9ŠiBHDhI#Žr0¨†Dµ§jÓ¨‚þš‚ÿ™xÿŸ€ã¦ˆõ˜“ÿ„ÿ¡’ÿ©†ÿ̸̱™Ž¤Üt‚ÿ£‰ÿÌÂÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿs“Î4U}!.H"! HMPQX:P];M_Hb8ˆw7x¢cމ\˜œMZ°‡CypmU2‚p.wzDv†T¡yK_·ƒW~rh1ƒ¨B“—Xa«b¢sTÿØ\ÿÿ¥ÿÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄ™Úÿ±…¢Ò†[³škDzWɆ›–]•¹yRš^yv@iRX€Yin?ˆgEž‘^V“{cZPHe:GH0S3€W‡šk”ÈoŽÑ}v¯mp¦To‰[d…TLcIVi4\‚B[=nzHG‚TQk/ZQ*_j6dfAÕŸ6cשhˆL„Kk±rRyRK^5lg4‰o6·‹k{Ý–k|j´‹KÚß•ØìÆàç¹§ûÅl¿‡{—KweI™rTu–q‰I t€“fâºqi¹´£z5ˆ~^rqGYvDaa/_i8s6`{N_v;jr9`ƒFaY4€ƒGT‚L‡[1s©to•KƒI¨‘Sµy|R”¦^¬p~‘Q[cIsxIü©IrÓž_‡@kn7{‘Sr”jgzGFzDBM)gA*Š…YSyLŽ<'–o”†V|vJ„“Hv„E‚q<¨žN‹ÎgÄÂh€¶wd|=dw2Y{<qm7Vq>Šu;–ŸRw—JšCyvF®W°}gOHv‰?°Žx³Ç°¿×¼Ú«™­ižÐ‰…¹iØÎ“𿤦f“¯z¤¹}Âô–¶ó¯õÿ£÷ÿߨɛâà§½þ£s¥_Ƽ{Ùþ§Èÿ·¨¬pŸ™[ÞïŸÃûÇåƒÇºmŸ²dŸŒS³žnÓ¼}–Æ„ˆ…P³®i®½~‹”\Ž˜_—ˆH¡ˆL”¥\ƒPdxE_~BQW0™“ek¬[[]<~bJsjCxbGpJ=eH4Wd:Ww9>S-@E'BA)ZJ,jT:gsHUç俽ÿ±ªÈ|äÕªåÿÇÇÚœ Ê€õõ°Ðÿ¢ª©`¨Ãm–ŒeˆN{ŒLŸ«{ŸÜ„n”M}POÿ”¡Áü™¨¹Ñç’ÿÐŒË҂¨ß“†¡b’­Xji2cU3\[=SS-x‡Iƒ•Ujx?`wGdxB~Ow‘S\©¦ŒÿíÓñÿÐßÿÛÍÿ­j¨FŽƒ\—·S’ªTw‘;j‹0[i1‚Z‰•[|Z†£r»ŽžÃƒ|ªr“»Œ Ïp«TaŠJ‰¯yµojŠXhqDmIz™i–Ô‹ºufI[yJc{AXs;RlAt€U[…PЬk•ÃxŸÓ~ŸÃn†®y Ñ¡ÿÿÉúÿ¡Ûÿžìÿºÿÿ×ÿÿàÿÿ·¼Ï_dh[€qlxtUhcMTb7KaDvWi‹Nz [f¦O[—P_‰PpŽQnŸp‹À~~‹Up~HbŒ;X‚NqVzŒr¥oc€NUY9RW]©ª|¤Ér|¬M_[mƒ]l~^rGH]+9_Ge—jŽ´†·Ëˆ¦Åo—Xi|OirRb~N[{Yg{Qj‹VbŒFU~8Bo5Fc@ThUb|Zkx[pˆfuª‘©Ó”‘®l}Y`r5DZ1>L(:I/Kb;Sa2KZ5K_,;N-<S;B^FRahx–¶É‡šºlƒ¾yšÉit W\HWxGj•Ph“b€[€Ol—TY”O]‹MIi;TjP{ x~½‡»‘š°“”·~„ž\~ŒVo}Jq}[uƒ`{pK•ŽJ­–a~¤rfœzs•r|TƒqM’wLjS‚jPylLifHrfHrlB|q@{†VˆuYr˜WK…i2_`JEAV`*ctB~kL²ŽWÛ°{ÿ¥›ÿ£‹ÿ¹‡ÿ»–ÿ·›ÿ±Œÿ®Žÿ«‘ÿÆ˜íº¥¡—¤Ýrqó|ÿ¶·ÿ¯ÆÿðØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿw´ç*H-!T!%%') #!6&?@LG-]M,Sd;XiD“Z9„‚GŒ”j‘“Zx®}Q…_KjYTQ)iJ.\[1hXHyX=ež`“vI ¢F–»zÿ¯cÿÿ’ÿÿÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿ™ÿÿÜÿÿÔÿ¾tÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»áÿÿ´¹ÿí —ÏÌPr{oh3Å?³Þi”ª“‘`–Îy…Âvr¡dmTvnQjwDq^I¡ƒN‡£mn–_ggEYsFos:Œ|D\cŒ`O‰Ásd¤udmFr‚[R‡Ue^=´‚8\—†my?n•My’DVœ[€“;o¯\pÁiz¯WƒžZ_`†^Td=RW;e[.[€4qj6yCŒKT“—‹9Ò¬l¾èµÌÖ°©Ç­c¹”Hu>IG$@n7T=+vb2EawO-Ê·\OŠ–‡K(~m@€†ZorHq?k|@šX4t‘a¤M†¨XS£Zcs6ØvFƒ›zF‘±d¨Ûnˆ½v”YabV}uEźnÈñÁ´å±Õ‰ŽÄeþºkq£‰qˆE`k@ƒyH‰Ul|E„’J\yXDb0^D%mj7®µ_oªn‚€Ip„EcN[‘@‚>}²_~Ÿ7–¢f`L‡x=¦}^qŠVWl.b|5–yB–™Wªž?±¥k³±{x o‹…WÑ«r½lf|=Ua6†KA±ªrÊèÁÁʪõÿõ©ÿã¶Êx´ß²m¯pgžNƒ«VÇ쓯ú¨Èó‹Òß°±ÓŽÔÔ‹ìÿ¼ ²]§ÅoªsI˜¯¢L–•fæ}Zèí¥¸ÊqÚ૪¥}| @±¸lˆ’^­FŸ„dž¯mnJWg1h[5”O“}MÕ¬rx¬^{WÄ®€”°h—_yySetGRN5u<=oC>a`GL?)_k9Of2<P%N@-dsFpKEeW>ž½†¬Ì•´Ê‹™ºr‰©oš¯u‘²maq;ŠUÐæ ¤¶i—zV§xT‘ž^ª¤x´Ü§¨æ™«Â‰ÿ”ˆÍ³hªªvØ·•Š¿c©»ÝîŸûÿñᢡŘ³l‘Ÿh¶Öˆºä}}ÅX„¤Q|™FlDj‰>sNx¡KWt6kqBs‚E‘—W•©n˜¸t™ÈvÆÒ¢¥×vo‰@d„1]y3Hf+{ŠTi‡5_[Bq“N]ˆQo’aŒ¹ŠŸÏ‰„Àu€¤~š¿‹—Ë‹…Á€°Š¸Ä¢”Îui›DgŒRœ½²Ú–­ie™KOƒGR‚DXt>FT-O\:}…g}«]“a©aqŽVkwV‹tˆäð¢Ñ÷‚ÅìÐÿªÿÿÎÿÿ¾³²cRn0cŠT\™=OqHx—R^„<Tx5hšQqœYy¡kt‹S€¨c€¿]\ˆNŒ²|™Ä`^j+Ke7guGuœT•\m|=NW7DO(1C(FZc¹Âš½Õ“»i}¤Tm‰IZ•NjGU>`ƒMp_{ c| q ]m‚R~’g‹³Š»ur§MR‚Ma‘RUxAPi<bGU?>k9:n:3X:@WKr–y™Â†™ÅœÏƒ}®ME_$3C$8N2TiCcr6K_6TQ7[e9UAGkCTfEZdWeoZer^u“‚žÈ†”¾i~¢Yl¦Ql¥MIp:CR;NYVkwŠÇ“—Çt}Š=D_Xt§Š¸×‹ÃÉ´‚‘ªm{sS^o\u‡^…m|ŸhŸ~I« Ov§qs…xƒl\²daw^uh<roFugNrpBm?lm7yh< f<šŸWi›crylt|Zo‡Uw…Y†ˆP“›Qt¯g{–h§~Yдnò¥‡ÿ•‰ÿª„ÿ¿–ÿ¼™ÿÅŸÿѧÿÍ¥ÿÓ£ÿÕ¥©¥¾ynÐqYÈ”šÿ|›ÿœÿûäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿn©ï&B¢U+%9%+8(*2.-628;;RG#_V/L^BJaRva6‘sB‡ Vi“mmiYS}MyU?gQ.dW4csC€h?„‚D¬¥]ÝÀbÿò›ÿÿ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×ÿÿÿÿÿíÿÿ–ÿÿÀÃÿßÿÁÿÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹úÿÿ²ÿÔÒh{¹Cda[a'¡†4©¼^Çs£‡–ŠYo®}jo[S|_h[2qƒPi¥Zl~St‡X‹rU”‡ZŠ‹Tfx]VxKz[>…Blª]U`oCi„=sˆG{˜NlŠOhpM^qQe9Vp=`i8CwHBM*Š\+ß`ÚšœÅ¼¹€åÀr¹pJ{DK\2Uk1Vp5Ij4xW1§uCz¦}lF¸¬_Ρt˜o‡_y‰SSˆdhx9ai9\v;oMXš\P<¯Ñqy…xsL8}X@{Ÿar~G™|FPˆd_g/ß§D¬ãž˜‘m‡·io¤\…{DƒLx³d~KšŒV{’hh¾g¤´K…¨t»»ºð³Ùÿ¸»ÿÒ½ã⼓©f|ŒYNoAKb#:V'ZF^a/`E1idKT‚GjZ1£‘Zrªqq‡AŒ–V¡ai“j€VcsI†™*‹½]}¡\š€LΑ]t›t]†7v€C„“W—z5Ñ¥sŒ¡h–d™r¤¦™“©‡·º†…¨ldŒICs4`C*¤th­žvÿÿòñÿþµÿ¸Ão}±jlGŒ®NÅ·’¶ÙÆÀÒ«ˆÆpÐÈx°â—ññ‹€ÿt“F‰Oƒ‡O¤žb‡LŒ|L®zOŒ˜R‚FŒ8„A–Jžªihw6ŠT@¨°rjˆNhk8vm>uƒL– ]Ù~³„T˜ŽOÒ’jØá¼rr4„ K“£b‡mH…·R@n2Q6+Bi,>>"Yy9jz?¡VE`'bZ2†wD ˆtµva£RHu7tvJŒ•[]‚=_r0ˆ°Cv‘7Zm*[W0À“{üåÃÇÌšÚº’ÄꌪÝq¥ãq°ó}µáƒçОüÿ¬ ¼r¾´²À§¹Š†¸h›cQzlJÈ®v楂áȃ†‘K–|Qt|K–«vžÖ~ˆ®j¤ä‰ÅY}šSf—Aaˆ=r“U­â¦Îÿ·™Ýqg†I|ŽId‡3u‹JpŽJMk3^}Ae†Mp‘Zh”Hq‰^ª‹„™m^dOˆ‰žÏƒ»y€¬yyªoj WVq@cyNyz\†‚k„Œfy–mv›kv›krŠMLh1Yq<U[9ilB]rEŒŠ[k’ZmŸem¡o£¿€¥Ík‘¯q¹ÇšØá¯Úå¡Ï呵X“q¤Æ‹¦Ý‹ªÛŸ°Ý„Ö{~Àop˜bj—aw’c‹¬n†´fišOr˜kÓd^•;Tv9NyCfq^Œ•ovC>h06[-=X8FYZ‹¤~•®{Š¥q³wœÃ†Àå•¶îjh­:K€/L6T„H^zDZd;SbJnw•Â—Ä‘Ž¼~€®hy¦Xk¡OK{6HmKk—pxµcx­WV=<_;Z}\y€¤Ã §ÙŸ©Ñwj–:D^.Oe=VpK`uAQg9TdBeŒWyšau•^cˆZjŽPUr9I^7B`UrŠt…¤l¬o„½mw£PQr1F]4JjLSˆlˆ¾£Ä{ˆ’DKnUp–uœsš—m‚—fo{@MN,CM=Xi`z•}™Á}•vSmX_|qgug†}SV¤T^t[x\BqfCr^L\iDZ[FoZ7†_>„~JŠŽXq}`fwV^lMmYMgA…DªYy³tp–}ˆ‘iÊ€XíRä™ÿ–ÿ¡xÿ³ÿ²šÿÆœÿÅ¡ÿʧÿå²ÿϧ¿¹—È„xˆk­`~ðYPÿ‡xÿ§´ÿùÔÿÿÿÿÿÿÿÿÿÿÿÿÎÕñYu¾5M‚HS%,"!)!M1,O 50)+<"-)"24/729 _: ‹x8r¥W‡~_g‘JV|wGtLNS*`N(xH.›i6¥œS£¤dµ¡aÿÎwÿÿžÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿìÞÚûÿïÿÿôÿÿÿÿÉ`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÜÿÿ¯¾Í³¥qY§gMjMSKa\5™}.¡­O¯˜i]±xnsUeuWm_@lm?s~KŽ‘I§´]¡¹“v•x{dZŒe@‚tKumW]~UG^CL[-«‡2–®d^{t€Bu”GVˆLQpAQi6W5\ŒMMi3Ig5}o+BfPSh+rq5ƒ°NežFWsEjx:xƒJgƒZQyKPe2br/Jt<Fg0‹f-IŸoƒ^/³«`|Ë©ZuXGVv;_q=lzF‰ƒGt‹N|RQ§t‹t9š¶tw¨vp?~€Hªh†O|…U†xPqtUªs9ªÃ…¯ˆku¦}sHͨZv¤vIqCNb)œs0€]¸Ãˆ™Â“¸«„ßê±éÿÃÏûÇÖÛ¹ŸÑ©Š s²¡_•—p†ëŒÛg}ëppähjÈXUŽ>XT0xbF{‹Pf–c{m8”¬p}°i”‘N“¦gÁlq£\„N…ŽX”„F…fnvKjuBŽˆCÆaŽZl‡A„‹I‚¨T}ŒcªYP˜†^w?wsA‡£`Àº{´ò­«÷—Z‘SOM¾nÚÿ¶îÿ¯ê’„»f[“T‹wQ™½i¯Ð}ª°­Ì…³Ë~Ù÷¬êÿ±ÜÿĬ®v²¶~¸¡i±¤n÷Ó‹ÄÖ‘‹ŒU`€<pn,šÆRo²EjvEŽVHr@1…V8®Yi•DVf0st?g…@¨oÐàŸ¼fª¤fˆ—Rˆ£]œ—\¯™uzU`c2my;Mb8DB+xpF–©I—¬Q¯”as‚D¹•înz”D¯xD‘†c•´ƒs®[o Gl:t­MšµWÔ³vjk0‚X3xr<^U4`AvX<’y]ÐéÝÿ¸Ïÿª¹õ†ÄÔˆ~³Yò…¨Én~‘N”„S˜¦nµïˆK¬<Mh0£“hã÷¢†ËZs‰Bi‘E” o¤Â} ¬t…ž]½Ò–—Èt‚ŒK`‹7Vˆ/hžR¼²¦ÿÿØœè|_ He‰Ds•B—¸u·ä€zÂh×uk­VQ|6J`,IG*R`>e^;gƒ@h]ƒ¯rƒ±gf‡\bxNWg@{¤ly¦ZKw4Bb;MVC[fB\qFlt^tŽKJ^2d‚Ci~>chH„‹[lQ¨œv¡Ò«™Á””¯s…ªd’µs´Çƒ¿Õ¦Çß©Äæxk¤`„¦qŽ»lˆ¯o˜«€®jp€VfzUh…LuzK‚†S{x@l„[y¡u¨Úœåk€§o–Ól‚¶RpˆJhnHw‰e¿s Óki¯i„«…•Ä‚‰¯nЍp¥½†·ÍŽ·Ä…©¶d„¸`~µcs½fx»Y]Ib–Qj d€¬hqŽYl|[qŠ`xš^t­ni–NQoLWqZn‰l{¢dY•akŒR]wLd„g~˜šªË¨«Ü–›Ðdq”KkƒDm‚bž[q‡KtƒPl‡RtŒZ†¡}’»ŽŸÄu‚˜Q\‡DLzCJhGYgGb~Z‚ h{¦d`•UcˆQkƒVlˆcy˜js–Z{˜c…´hn£ll—c{“dtŽSgz<H_+AM:[l]}”€™Ã|s„NUz]MgTbeGqx;b‰QghTt`?qcEf_JkcC…aD‹sC“jH‚{Pq…X_qPD]G:N@I=3o<(zQ2‡lRzzIy†Wa‰ZdSÉqAà“aü|þ †ÿ¡‡ÿž‡ÿ¦ÿ¬ƒÿÍ•ÿç³ÿÕ°ÿݲÿˬôÕ£š£“rf’TGÿSJÿxdÿÛ¸ÿÿÿ–©ð>`£?7dYJ7ii5D„K#qZ)99$($"2&i19R)KF66b+%D155&H!*+E:€OŒ¤7ªhn•jwNdžkOwVZX?bS)‰Q/o<¬~Lÿ¡Vÿï‹ÿÿ¿ÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÕê͹ÿÉÎÈšÿê{ÿÿ¼ùÿÿÿ÷Õÿÿÿÿÿæÿÿÿÿÿÿáÿÿx‚çµqZE€uM;DXI3626PR)\Q/ig8~[N¢•T–Átz¦uayfuH™Y”P‹¦[ƒrt‘iSk[|b.foK~bJ]”QmfMmT4[qKsw0£ƒOvšmwV‚I’^jwW<^FGM$OP"Jq5cj,t†MŠ¡HXzYnvCDoFK[)ba)enA\€IQo9\Š6b|Bm{Fl˜Rq¡Uœ™WjÈ|zž]ƒIš°{V­ŒXt9OI>^6ŠO*Œ©IƒSŽn/k©vuŽEMŽVKe7Xi+my1ˆ¨]W¯kQ†Az†@†žM³¼bw±oy›GssLèqJ—àªwXEi?He$wg,°‹d¹æ¨…Òž¸­uÁÖ¾Íû´µÙ¡ƒ×}­go‡Si…H}”QŠvKxjTg54†6Fäj~ÿØæ¥ÿôzÓnƒªTd¡]bx=Q™­‚®r‹“Vq¬gVm6yu6|hFm…Cqu=Šs7|oVn€Nod6]K/‰h>™¯f¯ƒ^at^«Q;µ‰j«‘vš«iнyž½nÈЭ~Óªt¶il›RŠr_®œr·ó—‚¾t`;‘R¢~\°¸Ÿl˜lŒjF¨›rÇÖáÿ·µú’„´`¦•eÿ¿xìõ°”žjÁŽ]§­mÿÿƒÿÿèÿÿÿÿÿçØð‰¦ðxvŒ@cq7cb,ŽmVtœZk…>wˆBT⹕­Ñ‚¢¦b˜™h‰žcŽ}ËÄ|º®p¼­sœ»d¢•feHÁ´i¦ô€ªÁ€ŸË{Š–WŠbO—|RªÌ{„Î`ˆ«ao»Rh€:nBHr^MnqA“‚f§¨†¦‹XYZ(YA,a?0B5%J>'kt@ÁÊ‹÷ÿËÿÿßßÿ¸Âÿ¤•ÇkÜšµãˆ ¬g ²jŠ—g©Ü‰¥ß‡¹÷‹·ÝìÏ’­»y©§r¤ª|º½|‹‚XŸªw áƒšÆgŠšp–µosžA\„0[†0gBz“X³Äœ¿ñœŸÞvr¡=O{(Ht)q†X›Ãw“Ívr²LRk?M]?8O)HS'B]1dˆ[cTy‰a–bk–Yc‹PnŒqª¸†yšMb‹J\y9Lw2Ha/Ok3Uf>\m>ahC‰^•“NsvVx W|›U¤k Ö”š½~ §e‰[™ ‰³Ô°ÄŠ—–k•ž…³±y~—L^w?Qr;Vq>P{Dh¢[h¸`u¾lq»[[’AeAXŠQz¬u”ѯߤÐÿŠ»q¡³p—¼SIz27Q*EUN˜Œ·Ù™¸ÌŠšÅ“ŸÑ˜–ÁxxšTr•Vw—UvžUt£h„¬m‘ŸÅôÄÍû­ºï†„Ãrˆ¶o’™O[['@V7LzIXcn—ƒ£cUr59\6F^G]za}škwQMZ4HgNY’‡‰¿žË¦¯ÊŠœÄk{žOy‹`}›kr—Vq{Rs‡Wc‹_z—~š«ˆ¨»xЬgm•Mc„Uf†Lc‰Pf€RjZršw®x˜˜]rƒD;H<>ICP`W_k…¨t‘«m¦q‰šZs~Qj…R`€?Yi>izWj›m„°obŒU]xjUeTUpBWv;\tEfbI]8lhNbrLƒoK‰pCwwJgp\ZfNRn?Uo;^c>UzBd_@gX7{]=_>‡gG}sK‚nN£xRª˜QÁ¨jΦ†ÿŒ~û•nî¥}ÿ›~ÿ¥}ÿ´†ÿÖ¤ÿÝ­ÿü»ÿÿÏÿàÁÿûù³è“‰œkpelMLaK^‡JP€Y>yc@Š€CŒ˜b‹´mq®v? x0RN&/! 0#.B*P2AS3^Z4Ow9SmBKb1%]41.%O:œW®D{¦ve˜nssUa‚JVkWi`N[lAmf9µCÿËhÿÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéÿÿÿËÿÿáÿÿõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿõ¤ÿäŽÿÿâÿÿÿÿÿÿ{ÞÿæyUÿþjÿÿÿÚÿñÿáœÿÿÁÿÿÿÿÿÿÿÿ¥ÿÿÿÿÿÿ\€½gYscY7I8UƒX3k`56=A{D,Ž¡ClzVUeA…[1ƒCXƒdRH8ic:Ç\?”Ú–t£ks‹FaŽQXzH`rHxr7oTf‡QQzUMK2rW1bz@YqJ`[9ii4azO~= ˜Rz€fDs?H]1s^&Z“IzB_›cKtOqf3„ˆHAqPYP-xf+c‡NPpE^;Cj=Vj)‰v8\‰XG_Ffk4’cGŒ¡i}¢|“‘^V—y[sDƒx=0pfQGak;„~Nƒ—ck¡k¨½_oÈ…N«PIp4Il(Ÿv+O¬wVc,iv4mžH~zBǬT•å‹uÉx…qJ¥iRh³uM‰ABg*Na"l.~h•–qŠžyЫx~¶ˆ¯ÄdÁÈ—ù³l”fM‚C^V2Œ^<i¦Y\N|g9–¶³~~›qoWt‡BN§Y_m(ut<ŠxA‹”u¹k†¢lt”Toj5ww:d„Ch_1‘‚A_€C¥†L‡ã”^}7„g1™™a¡·q ™eÀ†QçrmÊž£šzœsxtuhdQ@ …c¤»…®…{‰pii>“Q{`­ÏwdÅq´Ärcµ[br:Lo4p:ײ~Çÿ¨Í÷‚Å鈟·m«¤K¸ªSÍ¡e—PŸ“aÿ·ÿÿòÿÿßÿÿب–|ƒœVvŠQ¼^W›‘Zv€HˆwIŒša¤°s†“d­’j•£]…ŽM×®}ׯ›²÷®Å†Uò••}Z⭋ôp·¨ofv8lf?”–n´³sJd{;x†@Š—\¹Ù Àà—¤ãŒQ…A9<ZO*uŽM‘yMe‚QoR3V^-TK+mW8qz;„~M·Îuåã§ÿÿÝÿÿíÖÿ´åÿ¼¾ãœŒ·j¯’m°´jµ¹‚ÊÄŸÓð¥Ãû¤¨É€–ªo£Ñ‰Ó`{’Eq]D¨”v¨Ï‰›Æ†“¾ƒ‡‘Um}Iƒ™e„›[ef;Ue1`Š9gœN•Š]œ°r¢ºkj¦@n§@Ly/b’Cƒ·Y†·X†­d_š;9I+CN)MP.Se=\Gt•R^¦R€œgr°[i‹_•ª{¦h€ªb²_mŽE`r7CT)Ec4X‡J`“LQ|JeˆUv„OUv;g|Zu€Ux¤g…¹’Èz¦Xv|V|­nw±}®Ù‘•Ù~‰­u¯åz‘Æ_o®NQ“Oa—P`WŒ©’ºèªÓ™¢Î„‡Â]o–U†¯s¤ØŠÌ„°‹Ïé³­ÿoo“[„¢^¨]³UR~7D\_••„®½„¬Ï¢ºá¬ªÅˆw [e‹R]ŽO^‚Qr“i•àšº÷¼ÑôµÑ雿Ѕ‘°q†¥`f99U0<b9h„UƒÁs}´~µus¬dd GFp6KiDXnQg‚FDn@Y†]Žº‘§Æ’›±Ÿzˆ—^bvAdWy˜[u“UwRs‹Up†Rj’_z®}‡°~£«pª¢UbzR^rUjzXl…Rd|DUyZq€[nrRqu<U_*+E9:`Sb}bvš`z—hŒ—iˆ“[s“h‡¡bx”LhzOq‘Uw”[rbdQ`o]PfPccCOr9NxSaW;rk5gEe€[g‡WoV_“XNnPYhBi{7”V}žbk ov„jt}Nz{QunJgqHl`Aj8†ŠJ¦£^®tw–‚§eqé_Dû]ÿœxÿ|ÿŸ„ÿ¹‹ÿÂÿû¥ÿÿÛÿÿÝÿÊÅÿÁšÿ»’ÿ¸’⶞嚌ú‘mÿ”gÿ–hï•r±pŤtÒȈ©á›sЪ9—”:SKDM*R[,`N.YO)ob;t‹CaŸWV‚F6rF2I31D&F2€L#yr2…‡c]¦e`tbqu=gwT}uRº“YÿºgÿÿÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæŽÿÅŠÿ‡ÿÿ¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù×ÿÿÿüïÐÿËuÿÿÀÿÿ«ÿÿÿ¬ÿÿ…”§ÿªMÿßoÿÿÿÎá¸ÂÑ ÿ’^ÿÿ®ÿÿÿÿÿíäÿXsaMg@|l2h­IYmPkm:¥R2¯ˆR±¯dw¶ms‰oZkH^a8km2No;gb.MhBÿV6Ìÿ”gž±z|<‹¥bP‘]ƒQ=m†Jo‹Nl}Mzy?Hs:j]0f`5A}@SL+bk-ap@Ž„9†šWxuFMeDF[.qa,k‡>`Ob\6kkMy†F[nKTn@^j4”z;žˆUq‰`LxDGb/En)gX'j‹Rn~URŽ[\o:yUD‚fMO5Ud-im7TH\s@XrDb|C]ŠDr„Aˆ˜VÄ·s|ÚfŠXCE?e%…c¸nbovŠ=p¬Q`o=œ™SÀÒ~«á«vÏœw›_‡LPžfCh,Xh&O{8œ~=Z³ŒTc.Q['vg.‰~L½¿q€¸˜•º_a®ccŽ<i»VršG[ˆE„|O¥fh’jZpNT{.Y0pr@k…Hh`.kW3sw3Ž¡TŸ´gO|G@K#ŽU3Œ‹Wv•I­ŠNpÆm{c2®tT¨Î›˜°bŵn±êŽí¿jòÿŠ¶áŠ­kNžw}¤vkÂt—yq^Hj˜gY³[ŒŒJn†I|V€˜ZÀ¶sŽçˆv¦QV…Kbn<Zj8£¤Q¶î€¸Öv˜b•Š[u|<‹‘Oˆ”Q°ªhÌ‘^º­fˆ¢O‹¤lN†ŒMª®{ƒ_…ho§N]xDˆ`Mʃ†£\nŽL†@¢½a­”gµº†À…rµš¾Ì ›yRÇ…cò×’³x“ˆS¿Á~›¸vPƒ5kf=®¥l£‰\Řo„¢gmˆA©±‹jI’–eWnD‹~H¡ž]ÆŸp«“c°Çh«™_š¢[Ž“V“‡VÒÆ°Ü„´¨yîǰÏÑ©Çè¢ÝÜ›¯Ä±³d›Yž e’‘_µªs¶²‚¬Æ‹r™R°´„ÕÖšì›–áÕ¤¨¬j\LŽd‡¤s§Æ_¥MTu:Wp8pzOt•FJƒ5a‰J¨l¢^kR|˜NtDi‡<l˜K Æs«êin¸Eƒ¯p®ç”Z¯?<E+H[2WXS—{›°h¤[ŽšqÀx™Å…ˆ«|vªh†¶{’ǃ|®g]sIRz6crP}«kˆ»tz—ex˜UŒ¤d†“Pw‘Rz³s¿u‘´Ÿ´x„OejF’¤ƒ¢Ò|”Ù˜±äž{¾n”¶k“½{·îÜÿ¥êÿ”¹ZnŒkšÄ–ŠÓ€p±eŽ¥ZjHc|Y—sºyr¨s¦Ò·ñÿ³Ùfs–CWjGsVuK\–j•ÅŽ­Î›¢w†Œq„ˆ]q”[y£k‹¼}Åkt³€¢Ü¥½ñª¼èÁ|{’er”cužgj _[™gqœMJlIm‰q…¡v‚­Š˜Ã‰‹°[k‚>[p=PeVmŒ^tžbn˜Zzšd‚Yc~KZjBTd19Y0IeCarRrŽdˆ¨V`w;MeF^†u}­ƒƒ¬ou”^u~Nfq?\n>RU]‚O`|BXqHo€SgGX~E]xJcM_y_^v`o‹\z‡KfvMr‚Mi\|’eŒ›Ll‡KdˆLd‚Ul~`fwHMpTVTJ]U5Nt6GrKZR5rj.f‚Gj‚`‰‚\‹¯e]©rU~k€e@‡—Dˆ´xx¢Œh’}cƒ`r€X~{P|zNptUzePy‚D„žd·‹cµ‡[n™pitÄS<ËyEå€hënÿ™yÿ¢wÿ»‡ÿÙ¢ÿó¾ÿÐÃÿ¹®ÿÁ›ÿ»¥ÿ¦ÿÛÀÿÉÂÿΩÿÄ®ÿ¢•ÿ–|ÿŒqÿ•„ÿÄÞ䙚äÅg«—Z{q_fGga;b9^zJwbLp‰;`uYJfHEbGqc;Uš<?zLFF.g<'‡Z4`šOwr\zŽBš‘_ÿÅwÿÿžÿÿÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿÿûÿÿêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×âÊÿ⡹ٖÿÉ¡ÿÔlÿÚ¹ÿÅ‹ëÿÌÿ¬ÿðsóÿèô¯›õµq”ãœÿ¥eÿÑcúÿÿåÎìfß“n„GQ€IijC„pB~bQsvM¿ˆM´ŸZ°Šq’·vc†xIz[\m/Zr6XQ-ka3rAÀkRÇ¢Sl»Ñ«‰0–Ôul‘ƒŸFeb`‘P\k<cˆEXƒPWr6{n4`{I[k3`b.e|Ge‹?X\Ekb-NZ:UW,d|,­‰G“´Yt­n“”Ma”hVYFVS+žb4¢¸ed|`OS9OL.[T/Y\8Ni;hY;[‡M…sDkŽifŠJSƒHFw;Ji2nf7˜†OÍ„~Ík˜Se}Dpw7†•[ª·cšž~kÒ}—TG“Id` w˜@_™Vƒ‰9’³_ŸÏsЬo™‰o¦¿q†ÆŒ·§pq¹’nJD„ETc'€Ag¦tMj?:Y*-9QMŠˆHÀrxžSmœKyLš£^‚ºkŸ£R™û—l–a\Qel9Md?hg0gŠNQk9>X,JV!jx-x|=£¤Yˆbq‡GYw7j…2n|AUÚ¦bs‘V…e;¬—l\±Ð„ÿí™ÿÿÓÿÿæþ÷À¿Èª’]^}eX­OH𻆯°{·èŸ­±œÓžœÀ‡a¤f¹¹k”õ–¡W¯­‰…¬qw«T~ŽHÅÃi̾‰¶Ò’¾WSj5nm7™sS‹S„…E~šH“ O³ÀršÀa¦„IˆˆR¨|L¥wS„W††]ZŽ¿tŒ~?®žl‚žWvL¢­nx„Jª€j²›u›ž}ŽrMŽª‚~>…kLØ{kŸ½x‰}J¯Žc»áœ©ÜˆµÞ‡‰Ñxo‰T©›€¦ºo¢­d›¬o«Ô‰§â˜³¿w‹‹H¢¢WÆ©i¿°q–ªfŒŒK¯ÔÍσ¯¾sž´^Ûø·äŒ‡¹n›x¹À›Ýñ¶·u¦¶±Ä“¢]žnT¨ˆX½±{¦fš…cŸbÊqeëƒnÑnÙ’rÊiŸ|R›uQhy>‚†Y”§t|¾c€¤[Çlªå€¤Ë‚±Ó|”Ãu¤É„”Êz¼rÈl„Åa}·Zp•Zl“GiM¬ÆµÔª¶†–Âqa•HTyBYmGeu?Rk:f„X’¥wĆÃs¸mƒ¥r’¹v¤Yf|Q…†fožYi…`³¡l†¬bu®\u¨\|§_´o‘Ê|¦`˜©s‡­Vu‡DnDXqHxqm¤£{Ÿ¸†¡Û„x·Qu“h·Ï‹àyÐanž[{ªl—ËžÏò¾Êï‹”Â\rœGa’Aa‚LŽ¿¼€½žéÿÛãÿ•‹¿\¥I_†E]{[ˆž{“±v²pX£UP†St°oˆÆt‚Ã~–ΡÅí¤·ã˜¦äš¸í˜À爳LJ©³s‰¹yŽÆ„†·†‡Á†ƒ·i]…GWtXr–mŠºŠ¡s‚–fwŽTx•J]vF[whv–e~©Kb};Jg>N|IW‰Q]Yb¬[c“Ha‚HU{Qqu7Q`/HlDOˆmu¥‹¨r}›_p•a”\l†[`ˆ[c‚M_vCOrLi„hŠ­m{°\nUu„RgVb{O_x?Ra8PkGZz<QgDZmKuIayKbxQlY‰{Wcw=SkT\YMZa9Eu:GmGP\5Zh5_d9miF‚Oh”aI…e`\T€d0Ks—|r„{hq\mŽdq‡bz„U€zBƒiC|}N”˜j™€dš{^{z]ymc—[C¬qCÅ‚f·dñ”iÿ”sÿ¦~ÿË™ÿѦÿ¸­ÿ­ÿÀ–ÿǬÿ°¤ÿÀ±ÿ¹ÿЪÿèÌýÔ¼×·¦â—ÿÿ™~ÿ½ŽŽÐ¤^•–chVHk?>\<V-Y~?b`Lad._XApc7}—C‰¢R†Ÿa]¦nFpZEV7nK-ao7 rMÿÌXÿÿ¬ÿÿêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÇÿÿ¸ÿÿ÷ÐïÏšû˜½¶‹ÿ’Jÿÿ ªÿ¾ÿ­ªÿÑ€Þј”¹ÿ˜aÿÿ{›Ø¯¨µnxm…ehmLsuGFšd^R>km9wnPqdBiˆ[j@ŠŒLkPTlaf^8VEs€?t’M_‹KggG„ƒDÏwD¾–³ªB’Ë{™³w~§fvœiN{SneLŒ‘L\Šcgw?se9owKs}IcŽJe~Uv…C~wKn{MO_>Hj8_j.n‹@yŸRy½i‘¤]–¤u޲ij•b®¦S“Ÿx||SImS/V2+A>AVb%kk9bUS‡VUsKWr>Rh?Oc=Œ‹;‰­Ts™^i†^·†M{¼¤x¦e{ŽPw•R‡›[¤šY¨žz»ÔŠl¹“L€J„z%Q¤e‹†<|°e¡ªS«Áq»Ü §ã·¡Ûž»ÉŽ‰Ù¬y’hGxDcr,èÏW‘ÑžWvQ,U56CGN~x9eX°Lt¦dy¯T©ÆY”ëʯm´é¬U™nRm72P.V_*p€DcqMH\,]n,V7gw-ssOŽ‹L™œdoŸZt‚Cˆœd„L”ªZl“Jcu2tw@¢£j˜»nܨkÿÿ±ÿÿ¿ÿÿ´×ÿ¾‘Ú€ª¶^Ÿ½‹†•d«„h§­„j¹t¹oTÈèÅ×ñ½n™ƒœ¦U´Î“ÄvBk2¤O?ªó¡¤ê‚¼l…yQ§¬m_ŽDLR"`Z4h]Ds‹F’ioI¤{N¨­m³¨tÏè—ºÿº‹¿n¡†Qˆ‘S‚’L˜™M«ÊvÆ™k˜±ls‘F“KŒS£f“r`ˆg]ƒk—}Tžˆc¹Ìˆœ¾`°¯p§œ`_tJyiBïó®§ôƒˆƒIœ…i¡›h¦ˆa•¨eз|‡Æj˜µo°§p ­i¥˜Z¼£r˜—_wR³Ë‚•é‚”Äq…®`Fr/__2wJÕ›r´Øˆ}Ðo¢¾}¬Ô‰x™Na…>”«c­Í|¦_­Æt½Ó‡þÚªêê úȘ§Àr—[ÒŽuÿΓù×…»ŸcvGUz6V\1tnP«Å‚®Ù‹¬Í{ÆÓ’ªÍtË\†Ãi¸Ø™£Ìq¢Â€¤Õ€“Àl…±`všMbH…‰g”¾vy´U‡­u§×ƒ®©hžœgsXp~Mk\‹¨co”Z‹¯ttžlsˆWz{T|ˆ[¨¨t‚¢ShkL{’^uŸOu\Ä©~~À_tªVy¥cƒ¨q‰«h{¥Tk†V†§l—½p€ªTa‰Fn‘d…ʃ•ß„Ã埱÷„vÁfv¨q‡¶o—Ÿm†¶gxŒ`ˆ¥Š¨×¢¦¸mw˜JlžJuŸIh˜R‰Á~ŸUxŽk¥ÌÂõÿ­¢Ð]„©Yv¢YjŸOg‘iˆ¦¶Ü®Á䛪͎ŸÔˆÌ‰”ʈŽÄšµÖ¤±Ô–ª¿ž¦y®¢|±³Š²¿‚”°„²‘…¸‘ÍŽ½vxŸcsšn}±sÉk²V_zAZtZl“Ya†Ec…vΚŸÖ_Vx3IjIbŽbiˆh}Š€©»ŠªÁyˆµfvš@IP"6P3QmVo™{„¢|~›eolt t‡¢g†”cn‰SlŠM\}JUyVdŽe†bYetNgoMZlMTjCK`3=^=Q|Wo‘Uh}BRoEZgIQm]tŠ^ˆW”€Yqr;YoL\gN[_EDrFIaBFV4@^/OY6[`-RsFUeM;jAKK2hQ'nyA]~ajziŠ}Xx¦TfŠvJ}hFcQfM0q["ˆZ;—}E°|V“~_w{fŠk]«gDºˆM¶Œhºˆr†oè~aÿiÿ¤}þ¾šó½¥ÿªŽÿ¥‰ÿË¡ÿȵÿôÿ½´ÿÀ¢ÿâµÿéÌÿàÇÿß¾ÿɦÿœšÿ‹vå¡|ƒ“Uzf_L>om?eŽTHsLGG4EJ+XO-…V5€>xZ”WuTi‹Nbm^q`AÚ’Gÿçuÿÿ´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿÿõÿÿöÿÿÿïкºâ°€º„ÿŸq†°Z¨t¾Š@•£Ò‰]ž€cÿe“”OsŽX‚Rmf<JbG2^?T>oc1h£bftNPk`vY6t…O…‰ZbžbˆjKRŠ[esAt=Wu;sqGƒ†Kz‡Vw|HvhG›}H¼½d¡±qs¥hj„VzxIaŒ\qfPV_GYgIpq.y‰EvlO…“Ycƒ^_…\C€En^8Tf:T\3Pc7Wt(•a.ÜÑk€£’f}hlmP±lCÝÃ…¤û¦Ýá–ÌÖžt¼£ZŸfT‰Ed˜:FxIWc2Hb9{^-m«lQ|^Lh6cb1nd3‚€A«ŠW£ì¥kÁ†hˆ\›Prˆ[|r:‚˜_fšX†ŠH¸±dZÉŸI_7ji'\ŠL^ˆ;lŒ?r‘>œFžQŒlŒ‘b§šS¬u…\ck¡§V‘¿lZ´`Ih11T*>Q#g2c Nrˆ1yšP€ªTŒ³\·¸g‹ò—‘ÍoÞ~R’PJU,Y{<v„MRwBS]/Ue8Oq8_k0|¬]]FEr4de)‹Š<”½o~´wŒ†Jå«sc’Zb,’žX©Ïz®ý‘´Ô‚ëÇ{ÿ¸‡ÿ­ÒÂÁã¶’¥v¼Ãƒ¦ƒ’šS´·eÆŒ?j@OA&„k>Nf7˜€JxÙq]ˆ5QA^X,ªmLŸ¦zp‹FŒƒ4w§Y^k:hg4[W<wB(™fWr{GRh4qz<\wGªj>áϰÝéÌØ¥—¯p‘’V”¥R¡“]¢˜a{Lv8¢’a¦¨x{M³yn„n[²{š˜aÄŸw]Ù‚oÕ´¡óÚ¤áÿ¦¥¨c}”OʸŒºÌ‹¤ÄqÜûœ¢Ý‚£áu•¼hÖÔ›¡ßxŒ¶_“¨k–W¢‰\°±l‘ÆqžÜƒ”Ò…¢ñ……¼fˆ¯a’Èiv§Ny¡S’•^ó«|¨×x­±x‡ Z„§SŸœu·¾Œ«´v°ÖŠÇá§àõºÎÿºÐÿ©Îÿ¯¤áv¦¦fÛå’ÆçÍô“´Ò|Ä­|y·Vaa8™So²R‹«XzÉGŒ‘V¸Ä—ÈÞ›©Ïz¥À‰’´cœ­o²³m“Gv @k§b¡½š­v{ a•Éu‘Àe¥³ˆÈÎŒj€Ms`MlrW’l´aj˜DkFenBŠZ†Š\¼«†äÜŸþÔ‹¾·gŒQŽNfŠMo„]³¨u}®]{›i‡¦w€¬g‘Çp„¸s˜´…«Î¤ºlw˜V—t½Å’¹éŸÊö«Çñ›§Í{y¤^j|BZrC}žY€»c»€¦Ä‚¹W{ªX}·^s­[«g•¹†´BZt@}šyÓ媠ÑcŒ§oš³iŠcˆŒo¡³©Ç„©Ìxƒ­fƒ¦uŒ´†¤·Œ£Ãz¢b~Vs’Ov•TŽ[ž\‚˜cy—dv¥|оŒ“ÁroŠXe{_bŒjlžt‹²rz£MZ|A[Š_v²hw¯n~º›±Ú¯²Ôre~3B\F\pIMd6CYF_ux£¸¾éŸ­Ægj‚??a?UhM]kX^iYvˆbv–ou¡wƒ°o† bmƒW^…UeŠi|§pm¢fcŒ[Z…XhˆUqƒRmŠQ^—TQ“R_ŽUqŒi„“i…‹Y|‘_~‹atŒf‹^¤zT”qMdx.ugLTdLRjJ=iD?[?LL0Fd3W];]c.@n=A\B@G/IE)UY(S\5WoFnmE‡‡Kk k]|wDcV5PAOI5VLvT.¦_0µoKª‚a‡”c‹}b»hLÙŠJØ’g¹žs±{¸ˆn܆hïŒlñtñ£ˆÿ±–ÿ®–ÿ¬‹ÿÛ²ÿí»ÿÊÈÿ¾²ÿ¼°ÿȵÿÁ·ÿʳÿÌÅõµ°ÿ‘‘ÿ‡{ÿ”rÆžz“ŠrŽˆTM fMXZNj.Oj4]l.gƒFcmCqc>tw@ž†O—>ÀÈ’ÿÄÿÿ­ÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿòÿÿÿÿÿÿÿÿúÿØÉÖÿ½™é¤‡¹{a^“‰Vgƒ:xk9Mo7RX3mkDO‰@]h>RzCWU0\w0Na33R:8@pBt~Eožoct[fh8lf8^wMq~I—¡Rq±eY™rOqEdX*G`D6F7YC&Qw/]y9›6_š_VLeG2pY=„m<^…agpLKnTXg.zp-‡ŽM•¬CŽ `¤¡jÕ{ò¦b³”]‘URj1Qz6D|.²l'dß{olWozG¤ŠOÿï~ÿÿÂÿÿÿáë×ÂÁ¸—¢“xŠjiyP[|DMd>?Z+OR&Zv6”u;g“OYF[;c\-\b<sŽBkzEt|KŠzSSZep5[}:Žt?q‹f^ˆM…zC†§Uh®eeGnƒ9Lw>gi3j’@~Cv¶Z`ŠKfˆDXu;jt)uEy±nÞžX{»|Kt;7S3BT#\j,ŒŸJ`§[k§5s–Fˆ¬N]ˆP™;ªÈs¾ÁpŒã‰¢Pc WiƒAg›QE€<Pm)R~-d‰3¹»W‚Ç‚^…ABg.^u1xN£¿i Û’ÅÔzŽô•ŒÝbn‡>´‚DÆÿ™ºÜš»íŸÎp±¨iž¹ª¶†™À’¨µmµÅ~„Ÿg·€`ƾ”³·af\O{4h}8D‰Ai@NT,gf5lw4Ov<ZE,g;`u=rt/µ„cÌÔ›¦¸rw{EƒqDi?ƒ~JzrB„b4€…@ª^åÛ±ÕûÍÌò´‘⛩`‚šE–Cœ¦S†—[pz?wAÇ©˜‹ƒNdCvMÜlÿ娴£p‰vE¦mZÿÚŽʉ¦_¤x`ŒBhp8¦dV¾¾˜Ãw¹ÁŠÎÏ’ƒ¾`¢Ÿq˜µr¢Ð|³cª«_œ£Z½¢gÅpn‹CªŠmŸÐwp˜>„…L‚¥\p¤F„«Px>k…6î{¾Ë’Zq›Pu}L†L|•]¶¼‚²×‰ÓëÀâÿÛÈÿÁ¿õ´¬ÛˆÇó—É⋯Ö|ͽqÁ¬p§žj¼Ä‹„Ó\i„E{xH“›q™Þld”;mgQ£qŒ´b’­[‰¨a’®mž¨]}¤F‡ª`›ºŠª¸„›’av—Pwg˜Èwo¦_•œefx=[U9peKo‰Y‚ª^x–R‹—WŽ¡W”•^©›d•]™¥x¾Ä„­©h„œU~¡X°š_¯‘cŒ£Xz Z^ˆ¤h}¸o™Ì‡žÒˆ¾}‰°kˆ´it›MVx:TzGŽ‘yÉÕ®Íÿ“ŠÀarœUL4/D!<E:weGab8jzT”·hˆÂe—³u¬Ãf{›V†§‚Ýe\…1P}@ƒ™y˜Ç`tšRn•Ll‚Q·³w¬ßou§_z©]´^j§Tg“We’QXz[SG|<T}J¡b‹¸bx³d†Âh´gzŸqz¤ckˆOZKb˜YkXe‚X^…WeObˆNj•d†¯oвƒ¯‰‘¤zu•_^Š=Me9Kb9G_-;T5LfW€š˜²Êµ¶Ï‰´dl”IYxOaGOl=OdQr•t~¬ƒº™Ë‡ºbsŠTk„f‰°ŒšÇ”ʇ ÍŒ¶afcd¤|‰Á‡˜¿o|§Th}VeuR^x_‚†j¦–s’ˆ`xhOlLoiImb-meCfhCVnHBhG?W>YM(Mk,=a9Qa2AX19S8:B(LF#DT'IX7T_2sa0p{8Rƒ[ZdfbSD_f@IxGX\;T[1‚V5†t=‘oYŽƒP–z^¶dZåVñ’gí£{ڣɩ‹µªºŽuÒgÿ™bÿ­„ÿáÿ²–ÿ¼›ÿÁ ÿ°³ÿ°žÿÀ¬ÿ¼±ÿ³«ÿ©žÿ®œÿ§¢Ô£•üЉÿƒuÿœ{ÿ£}º£…`–~‡~S¯Ie¨_nwHršer^y‡Ufq=­IÿÄ[ÿÿ™ÿÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÆÿä¨ÿÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿå´ÿø¬éÿäÒËÈ«l¤pkƒGRŽNSo3Zn0hu7uŠEgŸRW‡J7|JDL2_d*ZANˆBF=Qw7€e<i—MP”wYt1g_0{W/ƒe=±‰V³­cl¼ª|€Xˆ9UwOYp>Tl2u‚9ŒžT’µ[rŠ`ƒLwŒ_`|DZƒ=ksAZuIJoIZ\)wc+tqBw‚T‹rVŒQeƒQjˆ=s L†U€–VЇOš¡dÃ×xŒè¡_“m¤ˆBÔÞ…©¢rq‚i”ƒTOyVrS0qA[š[8YBDOCg`x+Ec=da3¤FFÅž`d8k{<ŠCecHFpA@U)Vf/Gl7Mk3]{1eo=jd=]‡Ua‘DuI¡´~[µ†dm<S4]|<c„FfŸ=w’Aƒ°axÁm[‹NB…0z_!k”\u}?L›`Ub(d>gžMg˜Io—=b™Bw‘F·n] k}_+ÿ®l©Ñ“u¡XX:eY/€Rq\W”M5^1RW!`7tŒH˜®i¸wzwDR†9]f0–N±²qÜ×…Øÿ•ÿÿÊÿÿëöÿ߯çžÞù ¤ßçâ„ÔØ•ºùŸ±æÉñ¡É÷™ž¬j€‹Ngz@wƒG§“h¶¨s¥»pŸiyhGxOnC^f6Sp1X_4—oK†›Ymi<‡¼Xj{0jf4¼zÄÍŒ£Ó|¬¼|–œ[¼“oŒtSð¶wÿ{ÄÀÇÕ›ä÷ÉåþÌÀû¶Ôߦ¡ïªoOrƒ@€NtƒD™ˆU¡}P¯i††`~t[ÿœˆÿðDzŊ¡ÜqÉ»‰ë³³¦zrUjs@]v>ƒqT¢ªr—ZµkTÀo²Êr–Æj†³dœÐ{’Âr~™[¤°j×¶z‰¬VŒ›WtnNg|JfrExeDk•Kb‚?Zm2}|H`~:o|>½´Ó»q¤Ì|€•bx®YeL‹»k¹Æ…Äj¬»ÒåºÀ±¥ÁÁ™¨¨oŸ­nÄ\’­NŸ¡`¿£l‰Lw`œƒ_v—Kan5xtQ Æmž˜]å—t»»^£©`ůwˆ·\zŠTy•Ew™LoZ>cbA}wU…Šfr­ZV‚@œnœ—_¢‘[…‘OƒwE~eK‡U´¤mˆ‘Z’’eƒšZ›l–£g|vNuxR“g‘¢Wf„H‚’Z‰˜S~’O‡¨^x¥Qs­U}±fª¯~´ËˆªÆ‡¨Ãx‘Ào{©UŽ›V{³Rf¥T|¬[hªqǾŒ—´[`Ya—@/d+/^2)U)5Z5QƒY®v¸r~š\n„Uužg‹Ð”«ç€yŸCgJm•fœ»y…£Qk—R„¡cާe«eˆ¦g“¿n€¹fyª`s²e~¶h~£^‚¥{•Êux²Y«hŸÝ„£á{•Òu†¼htVj†NPtG`ŽZe£W^—DNyDZ~O`ŠYu“Pp„O^vG]€\o’`jej¢kzžUNs3=W/<\*=U5IfKn‡s’·§·Ú›”Äq~šYj…SeUeF]Zgžjv£kmjšuФMZj7TnZ~¢šÀ‰«É†±¾r…—\o˜sƒ­}ƒ¤q{”grhn‰RVpMlrU’ŒrœŸe€F^SIg|at™cXX7dX8]X7@qH6ND=O3PE%Qh)Um=?qM4P87<*8F%IH$SS)L]5:_8GR.H<\@2bK;rU8fdCSxHU^FUnB„lJsŒC\{[y]DŒ}:ÆfLð™Nÿ©wþ¸„ï´Žù¦¿´’±œ¾zoÂŽf÷}pýŽrþ£ó¥ˆé¡Žÿ‚ÿ›{ÿ°—ÿÇÀÿ²ºÿ³¬ÿ¶£î±¨Ûž›Í—‘ôŽÿŽ~ÿ¦ƒÿ³ÿ«†Æ°…ºt–tœ{[•­_Š«w³®uÿ¾oÿÿ’ÿÿÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÿþô¸‘ÎÆšåÄ~À€_¨„BoCYN1Vr,Oz;Kg+YT+el<^†IhdFTƒRbw7ZpGQs=BZAY@*pR/eˆ]ˆWiª^x™uqv9hwEeg@¸e4Ó™X†Å¢´•Qe¢D¡‘iŸn€³qŸf™¨fĺ[§—zw­q—UJppA`tNLj?:h.YDqh+xsCÊ•WƒŽltPŠŒOë~DßÎt·¹‘¤£o«s¸—Z|€œ{a¶·wÊÞ•Ú¯ užrR±Œ^z{Rze9„ŠL†£[S†hªw=„áyVuCQ‚2>V,75$W!®¿|Vœ‹}^=`MW~DK{<Mu:Rn-K^5jh6]’NVv:sq6eƒCioHsN¬œTÏ—…]g`Xu/Ov=bx+mŠ6}D€Z‡YNŸTNd#`g$O‡J-Q*N%a6/QQ3g€0kGV3ZI5j74C9;Q=,…‡<á¦aš›yŠÅ€“ÁwT†RP`.Œ–OO²e\ƒ5[f3f•Q©›P“ÑukÔj<w3Eh#c{?`\5Ê“QÜä™Þä¥×âšûÿ ›æ{¦¬V‚’Eœ½`ÒܸõµÄá²ÓÜ¥Ô覡ñ ©^¸»x󊻿fÁÞ|ŸŸgŠtZ–—_~£S…E¸Ÿ]l‡K|†<»\s„G¢§IȽu‰»pm[<}€S„—`¨§~Ù¾“þÿÞÍø¹Ð–iŠ[´§eØóªèÿÁèÿ×ïÿ¹ô·Ä½©Ç…·sÆÅ–tL“S€†M¬x[Ÿ›jˆnLÜ„u´¸£à¡œØ’¹Í”£â›³nyL‘{L†ºpŒ€[«¶u±¼vܲlÿ»ŒÃ²u­¿qœÓ‡¢«s„§Z—[ ­tŸÓ¤’h‰¤Rq{ByzI€Vp~Jc}@ea8d“AK\4‰VO…]¼ºzt˜F÷|s‰Ôm”ªl‘ºi‰œY{’Dš³iÑ¶o\\2Š}WŠªm—½e—Àb‚¸WƒQ¾År©·f—”S™ˆN|jEWh-rk@cp9{‡A‡›P«]šŸa®¥`¤NkŽ?^t=am=ltJs–L[o6†ˆQ¨¶c}‚F¸ztÝÒÑí¦ËuˆN\T:fo<ˆ£f±Óv–°]œ²k†¥ež]ŽZŸ—Z¢\Œ’Lq‚ApŒK‰™Bg‹F‰žb›¬X™Ÿa”£Pc•R ¿~¸Ï„¾±áÑ—ÀÑuŸX¬±v“Â~˜Æ‰ŸÈÝ… ÈŒµÆ˜¾qœ»ŒÆÐ¦Éמšá•܃ˆÒ|”Ñ}}ªZg€X‰¢€¯Òž´â~~Gk‰NrŸ\y¡_wŽBd…Tz¤f†¢[l›X{¥h€¨_‰”_‹Âv•Óx¸v‡¹uz°w—Æ|„¹Rl‰I{«ƒ¥Ó‡“¿z…­[aw;]rTm–fz¹ŽÅƒ‡ÀlsœXgM]vA^h<]jH]vMbŠ]qšjlœp¨n~ Xg{?Fm<Lt4@d8HaDkr\““°Ö¦°Õ’°\i|JYmI[iNl†c¦jzŸXZHKoS]r:NQ,IQXy’r”³n®o‡›X`‹_arv¡ki‚EPmUt~g…ƒV|€X{[…˜u•·i†›WqXq„v‚°|G\:fL2Z_17^F2A:8B,UD#vl$N{>1_M9D?A;'UG"ga(Hn99[B9Q6.K&44C.6E!E),G7)PS2wN3oq7€vZcŽPohM~}Go€L•jK¹{Bÿnÿ»ÿ¯“ö³’Ϋ…®¶“ª‘‡›ŠkªxiÌs]ãza݆j÷Š|ÿ›ÿ§ˆÿ¹˜ÿª¢ÿ§ ÿ°«ÿ³¥ÿÛ­ÿëÌüÚºð¸µê ÿ£˜ÿ¥›ÿ¹™ÿÔâч¡x}PÄVÿÙ{ÿÿ§ÿÿÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿ×Ӕ̪pž}—’at¯gfiPC|`?O9KU#Th-Rh$Qx9Qi+w2?šIU\G^r1\p3Dm=RY05]4@;&H?oF%w}JŒ¥\h»ggŠaRm3v]1£sLìƒLz²Ka–hÄ8 £`n|wˆj7sš\“zL¿žSã¡”¾~akd}V,ts=I‡OQ]:cV.ul7©[º¦s£Šn…ŒRl˜fqY<±dGfÔ~ƒ†TgŸRcnMd“Fp„R}–I²Q°“w\Ú»}~M›TK^MbC)xw9YˆUYcA–‡>f¼cA{M]O?pH:C*µ FMžžqŠM„š\zmOZ”Tl;u²`Vœ]eŠEP‰MgwB[>gx?JuHV>*E];†X$i”fqkG[YY{.Ni'^m/\„3Jo3V„2U„!<bAQuGkŸS)Z6*BHQx+PJ(Z”E?Z)RZ+J\@BX-Zd3w]3dlBe{=wªZ‡fž°w¥¸˜¬Ž¸´„‚Û²m]ž¯g¬Ñ‰}¼vNuBJk2@D*e\/e\H\U<d?1”cDÃŽn¬amAp«Kf“Fx›S„ƒQ´u½ÅŠ¹ÔšäôµÛÿÐŽÒ‹Á¢e°ë›ºÖƒÃê•´ð•¥Ö{Éœa¸ÐxŸ”Y’ªL£Æc¹Ãe””J¢˜D·®SºT¥®mŽƒMŒwN‘­y©¹v±È™ÄÔŸ¦Ú•–ªp·w¨˜m¸¨lÿÞ³ÿÿúüÿÝáÿ»¦ú c€IšN8܆W¿«t~J¾…[s;‚šPgG}}Kˆš`¿¾šºÔ»¼Þ»®Öœ©™b·§z¡Ázž›V€¤d€ˆM˜¹sŒ•Y¯ƒkÿÿ¼ªâ”ˆºg޵j…©Tp“F{˜ItCЛ|šªk«“Y~‘HlEh•PoFe9Wr9aq>qNki=zuW¥h]x4`j?Ùpt›Æw{ŒWH­E”Ÿ^—šZª^‰¯_qªa~ªg„ªd‡³XžÃmˆ¹]°°k¦¶p©½Z„žLuF\ˆ>|šIy¢Ua¡>uŒG›ªh¸Äo§¿s­Ï~†Ç`t¬_…Šdm‘RvzAqžQ}˜S€]V‹gªÓ}±Ù‰øí’ÙÙšºáur¡Q§j“¯W†{P¡¥w Ç¨Ì‡¡ÂnµÎ{¶À]‹‚HŒ‹T”[|ŸUv£U|«i”Ÿj}¯VmŠAx–PuŸY‹\”—\}›Xi…Ss‘_•²uŠ™d]dILUJxx`d’MV|Ac‡Ml¡NR{9QWNnˆp›®Œ»Õ¢ÀçšÅlgšPa‰V{™~¨Ô|tIZ…W{²y~½ga—Ia‰R²~‹Æx‡·j•Àjy¢Le‡R{žv™²s޳f}¬€•Åޱj‚©Pa8[ˆZ‰bnqTedFWd?g‡m‘¡±äªÁﱨÏvyŒU]qD\a6O\AavLp‰RdŒeo£s~­luŸ[eLdx^€›on­Z\‚G[w;GS9KW^y‘«¿~œ¾dc„;S^8R^8NTBPcM[pDTfAWkGV=N`=Pl[f”•h‡¤t˜´pŒ¾uχ¾}ŒžZd…Vo|W{‡\wˆ\‘ˆ[x‘i~¦’´“±n~žs«@L-WF+I]17Q;4G9?B'ZQ"Ve';m=9LF8F+EH-v^/j‡:EŒS?gD8[00L"?6WJ;u+:N;A5*FO(V?!bE#fk?PzJ^A›€/“›RƒyX–{NÈVß—fó…zÿšzﰃᶗ㦎Ѫ€Å›ƒŸ‹wpi¯c_ÒpTò†fÿ˜|ÿ †ÿ”—ÿšˆÿ ÿ¦˜ÿÄ¡ÿøÅÿ÷ÜÿçÃÿ̶ÿ¼®ÿ½ŸÿÁ¨ÿ³¤ÿÒ¤ÿæ­ÿ÷­ÿÿ¾ÿÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÏÿÿðÿÿÿÿÿøÿìâßàÇý¼¡i–ˆxpq…F<ŠXUI>Na7>uPF^&:S"HKU["qt6}’?jª`lKW—`Di<QV5O\6Xr78g/_B$|l.gzK–v@ˆµci»rZRtn4Š|F…‚[w¶cŠ•Hw³o£A}ŸpilUvq8SwR_e6›a*åœiÊ—…_–ƒieEUt8†c3VlBltG™ R½—f¥°z‹“jŸ‹LY®{_‚<yD¹t8’””Ä€Ð~qŸ[eyY™ƒ3…Í\Ñ|Næ³p•îÎm§‡HmIV\.Tf8WnE‹_=K‡]xZ0I£T@d;FJ%¹ MLŠš_E=Œ{H\¥yœ‹O`½{RSˆ[9›—fwÍ{cYqp@G‹Ja\39wHBO RV.cf8\FSm?›j8e…^<c1A5Pc*|b+_ŠQMv%7I$=GYJ!a@8e<Wo*K‰3Dq1h–F^‘A2a9`J S]=Le9JV6Vc:m‰O«iƒÈƒi¬^vs9Ii9ly5n–N†£[jžmj“Om„FK„HQz*6]'BE!z“Vm΀q¡[i“Az¢Rw†Q³Öl£Ás¾‡dŒQ††MG˜\eb.”‘X«½zíݦäúÓ–Õ«´µjÐü°Íå íÿ¶ãÿĦü þ«rª¥mñ¤^ÄøŒ•Ímj“Kgc4wk?œmQzy]ê|Lž±tƒWÆ¥vÕð¾¾á±°É•Ð䨱úÆ¡Ô|“ hf«YWv4ŽO<å™âÿ¿¦ûpyD¬‡PÀËl‚ŸZ¡†V¦j^i6}¢^Qv=tqF–¥q®²q¼´“–uš˜l—˜gχ€¯«†¡²p‹¸n‚œWiKo[9œ|K¬åœz°i’•Q†HzŠJ—V´®~¾ÿ­ÅøŸªávŸÕq—Ëv¢â‹‹¶jšÈx‚¾n‡«c®³€¡ºjžÁi…­WlFk®Y_–A ‡R˜¶]k‰CmŒQ‚®b˜©l|Xza—‘~²v}”Y€Kš¿fŠ»`ÊÇ™ãdŠ}KŸd°ÙŽ‹Én{¿o„Á†™Ï‹sŒGªvW‰Vp~FkX©§mº±†ÅÕ”¶ëŽ‚¯r¶|Í‚©®{úÌ›îô—²Ä~¾¥x²­e––b ¦ot¥Ox‘W˜¡c§”V ˜k–¬l”µ_Œ³^¸µwÄÉpsSŒœg“Às’¼br¤Mp‚[^‰˜Y{”@uŠP†”Xs‚L|‚_„¨}Á‹œÒ€¦ètƒ¤\†²uu¬Vi§RiŸLRi@d{Qz…Y_Ž>6\1]oOw–\„³u­Ó’”ÇyxžZn‘Or•h¦Ë†¢Qt~X¤¥¦ÌÞ˜–Ä`kŽOhŒW|˜d…ž]~‘`†¥i{±dmž^}ªpÀt„ªeƒŸSo‹@dŠIdŒ>Rt9Be-6R&:T*I^Ed„r­˜®Ó·¶Ñ™ª\f~Hq”Sn“KjŒYg‡JUpRg•p‰¯}ƒ´qy¤V`yJur™Äš±Õz¡KWa/3J;J}XtŸt˜·„œÂn€ªY^ƒBLi;@d1=c:C^<Da@N_DZkA[kTvw‹ž]s}W€‘i›ªuÅ}—Ï„Ž¯u‡•tŠ£°†¼Í{˜°fŒƒU†k¥‰¢¶€Ÿo€”ksš~QP)<T,;W3<F)AX.JO1KZ1F\0N^6Za.fk5xvEz–EWeBxo<aE?^*9CJ2kL Y…:<dE9;<8;(AE$kLiw9hŽMmOmtQ\qI[cIqY>|bBœgRµwYõ{Uø•bÿ¹þ¸ÿ³Ç³ˆ­Ž‰šxr™t^ªkUËr]Ú~bÙŒuÚ“€Þ‰€ÿsÿ‘{ÿ³ÿȲÿïÌÿëÉÿïÆÿóÒÿѾüлÿ§¯ÿ»–ÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿÿõ–ÿçÏÿúĽ°\_mlTBŽuDL˜giqC:zJHL-mZ-FƒH@mJ8Z.DQ&Kg(]j*Ž|2^¢]}…UY•OUzFNr6Wo4[i5Dv2‘R1Šƒ>n{e ;†g}^h¼jŸ–HÉ­W{Ÿƒ£ŠV~¬j‚‹fŒv=t©ginLh‹HkyJIoG^f0•x:º”h—›u–š^h—^m…C†„K§‹Iœfö‹dy®‹ˆ^“¾eyƒ|hd6D:8kO)Æ›J»Ú ˆßª“Ÿgx½ey™beœM²dMŸ¥o¾q}¯ƒoŠtkhE‡m>m®ke[KJpJ+`5x7R£\¤˜JKy{<Z3D]!jZ/¤‘T¹¼ˆ…ë¦S®i]Bo‰I±Vm׆]XKy?ey7NnCKa<>P1`O/sˆGa‚Hk`4J\1_\&_O0F[,AU$UW$\v2RT8fvDcŒBeœQ^k5Z†C^}Lx…Rk›MU…@Cd6Rg.ttEvPx­r °i“Æx—¼m}£mg¡jUIf€9z³\kœW„}F‹—clˆNg‰;]Fu‹@€€E‘¢L«¸o¥Æ’w´g” c…£q¹¢gy­iR¤W_X*dpBx…8A `!.R&vXÁËÝï­¼ÿº§Æˆ«¾†Íã™æÿµÑÿ³®nž…J™£JÉ×{ØxoŠ?Yk3_d4~b=xqH›oR‡†^¡aŠ©n„Kµ’ÊÔ¬©Ô”ßÕ±ôÿÙáÿêΉƒÔqj™ZFi.º”k—à}€¶^“­[骅‘ºs·•bÍ}do>fžODb/gw:u}ItƒX{XŽ•h™Ê¬»u¢¤f•›^–˜NŽ·d›Çi³cŸ±pš†N³¯nžÏyv•J\‚1c…/~šIzµT“ bɽ±ç™¹Ê}´Ä˜ºm¡Äv”¢_Žªa’£k˜m³¨|›¬c˜ŸQ~šE…iEÜÍ—’Uz“H”Dœ¶[§³Š“Å‹£nq—Y{‹Q—‚H~tDjh:l`>‰ªN±Vq©Knp=q™Hj¢?}˜MœÉz¦ìŠ“ÒŽ±ã²èƒ\r:v…Uv£V[j:|cSt–NsŠGŒQªÇ‰¦Ö„¡º«àžáÿ¶Óݺ…¼Õt¶ÂˆÓÿœ•Ýi|Pu‰=o;z|NkwJot8o†A ´l³¾eŒ¢Y„ŸV„¸oÇv—ÎwšØev£Hj–RnŠO|•S•W•UzšU¤X}®x–´˜²l¦ºi›Èsޤk€¦V{¯`ƒ¯XW~2..'giQp¤`wŸPx—S_KdxQ‘²˜¿p•Rn‰EetU¡¹€Ž­NvŠP‚¦kuƒPei=Vh4Zx;_Hp†U†¡fˆÀxÁs…·Zp™Xl]}¥]‡±Tl—9Vu4Xj@\}AW|K[Gc|IT~^v«q„Âޏv‰œWbfBUbDn‡S¦_~¨ho›XZƒMc‘izšn¤`mOi™R{–s¢¹°Ñtp„;B`?bžu‰ÌНp…ªy‰´x¯dt€[x“ow±^_˜O_”Wkš_nKJzGSs_v—ˆ’©a€}JtiDajMws–¯tžj€¤…¼£¿Ì¢³Ãˆ¡²k•\v„rœ€–¥pt•hk¡po¦nKN*FV08]4KL1PX)NW:>^7BU;YT,yc+}z<Š]o”`\Šu:Š~>?S5Q/69"V=qP*Us9>~VF?FW<&Tb)lh3…{C±ŒImÄbS—{jcL{n3es@xUCmj<vzH³kQÖ|Iÿ`ÿ¢z鮑㤉¼¥ƒ¶”¯l¬„kŸ}k¶s^ÑtTцiâvî…tÿ‰iÿ {ÿÍ™ÿî¼ÿ÷ÙÿÁ½ÿÌ´ÿÐÇÿÅ»ÿγÿÿ¹ÿÿÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÿÿïÿÿÿÿÿÚÿÏÏÿÄtüɘW‰3OeEU2S[+_P#bT@NŠH-MFD8$cX(gp:SˆKWa.Cl:Vi/R{.…r-jœSj?STn†;KŠFR`7fj/\u:Œl3†|Ez[ÈsF¨wlÏ—pr—{ˆ™gÏžMužŠ_`¢Xi£S‡„Gt¯YŒ¤h«¯Y¶¢m޾r|Éz–žSðxŸ°›©tŸ¶r’½uƒ´„„ f…‹UŠ~^€qR¡‚HƒÁwavd\c/SnH~<Áh†®o““Y–°r˜Âpu¹„Š–T‰»mÎuS±xv[¹ƒbj°‘‘VZ“jS[7C^;S[+„^0£­pT´…Ai9LQ"J`4l\1}Kµ¿}¸ÿ¥K—‰AO,iSYŒW\eGXc=zt8Q–R:O2;A#LY)]|>ŽsGF’nVQ#;I-„V wƒD8]4KGGq!&FIC[X#”n5}®q‰…VyË…Sžcf|7k”ANx9W}8h‰Fz \¬e“pxŠdo‚P_YFP^9u~H}™cw«[jžLYŠ<x£Qz Pj¤a`›BXo3[y.o…B€‹T‡‚Qœ¯‰g¸|—™O’±s£qOÇÁˆ­å¤å–RƒLht.J‘J,O6,e],­Ùv¨í­â—O¡g©‹Hòÿ³¸ÿÇZmD|e1¤´XÊk©Âu—ÑnS¤LX],Dc7K3!gJ.{e6qC—zSxqJfr;pAÓŠ‰¨¿•Ú²ÞлïÁ²ÿØýËÿÿ¯ë ž¯vVjC“^AÅ×ÿÿÄÒÿ·n£Vo~<‘uM‹mVcn6`“?\…:XBEp-UY9}pW•¾‹ÂǦڸ¦¼Ì˜«]¢«b™ž`¼ÏŽÊô¸ÔƒŽÊw“¤j¹¯~h»\^w.o…;‹•R›[ ¶z†Éqˆž]¨ŠV‘‘Z§ÊŽÈxŽ¢_Ÿd’¢]š…d±£w•šlf€:tv9s‰KÓ¥€yžFcˆ9h‚A”–NÕËz¡©p…‚FvˆV€¥wƒŸe|MuŸW{œW€¥KŽ­W§Îrw±Cc@f‹Cf–Eˆµ\¡Èt–¸vŒ²n”|_wŒE”¦^ž¡j£¯zw™`qsMpŒY`Ž@¢¥}”¬uâÑ­ÿÿÍÑ÷–¨^Š`ª°r¶Ù©Áƒ—Êdl¯Kw¥Z‰³e‚ŽO|‡;o‘7qMŸŒ^Ͻj¦I~‡O~­R‚’QouLŠŠUt‹D~“b–¾€¡É€Œ§rލ‚˃›Î¦Ñ|„¥\t‰CkE€µY‚´j…Á~—ÂwŸÊtj{9;5!88=y_vŸUt¡hpÅoj²n‡·x„¬[jƒP`ƒ<E\A}m„²Zv¦o¢µd~‰@fƒ>Z‹I^š]mRt’`€¬oƒÅw”Çnz³Wc–L_‹OsŽ\‹º[kŒ<W|DVz?]vNr‚T†Ji€^¦~žÁ‰ ÄptžUecDhjNZ…N_‰N\…Qh„gwœez¥bu™`«m‚ªat dx½j¸gµn”´b|‹Jkg–ͨÔ{³jz¦iv¦ew‘UVjTpz·Â§Ò‰ŽÉ‘·•­v~ [o†kyš‰¤³v€„B`Z;aeIat]†‡hŒ–„¬±¨Ìß¾ÕÛ³ÉÙ‹“®z—¡g‘jr•{t•unž€|­‡„¸wOJ.WU-?m9VI7LY+Z[2GY2FZ2MR+PW+cT6eg=puNkƒ`BŠ|OajLU=^d1X}9txM–xKX `FsoHG9VF-W`.ob=„G³xNf³}vbmsf=OuEOLIqL0cz:}o[³}A̪[Ùjÿeÿ£}ç£~·ŸŠ×ƒ¼—lš˜…v«w]†ZÓ‚fÿ†pÿ‘zÿ£‚ÿ­ŽÿÓ¤ÿöÍÿ³¿ÿŠ–ÿ“ÿœ¡ÿΨÿøÐÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷îÿÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖµÿÿÂÿÿÿÿÿÓÿÿËÿÿÿÿÿëŸãÙ’¹žÇ³ƒb‘nMif;f>UC+;m5'E,4*]=Gs/2cG<E&GO'Tf23h40C+L2T[1[b5v{?QUhk?qr@_¦TWgCYb8ekF^{4gj>[}6§pF¡j?¯bRƒ‘Xk[lxPr’H€‚V™†G´ÖniⓆV¢¨glÀdˆV|}<ŽˆIdœ^rfJhdAWvCaxAŠ‘Hšš[t§xmVlzPLkNbo7Šy>|’b{Y§bC|¤l„«`rµdm¡]k˜C’{M™[mvb‹o7Œªbs€cl^8˜[7•’l¢i…Ù¨Tne/T0;0MS¥‰>·˜xr wG•YO^)Bg@uk2§Êk§wv‚È‹>eY@G!?L'x_,I¡lFX9jM)N{DJ^,Zg2L]<YC5{x@W˜en}53I@HR€a*5ZDIn(Wl,œe9Ìðzìžž¡W”òœ¦¤}‡{q]s„a«WË„VÉyK=AY4LL#B~4.A!G/B`)XP1Ž—JtµhjœMk–KŽ¢T~Ñre£Og}9Š~Bˆ¼r~£S`McdBpxGu…Z°ž]§÷Œ·ÿU¹bŒQ3ᙀÀûÓX•pV](k†F|ªer²c…C¦£u‰’fÚxtÚŽÙÃaÿÿ¶óÿÁiž^Ëæ”½¦c™W„‚KboFRtPM:(Z>(pQ5_8‘v@qn@fP,wnN‘zTSZ9vŠG¥Ãvsà€qY7}gF•kPÿƒxÿðÿ¡ÿÇ… [¶·aá±yie<bd,”eE§¾…W¹odo@hyE¥Â„ÃಬÿºQ³`iU2~NI~oMš†^®qž—`“–]²¯Ž¯µ‘ÍéŸÎàŠÄГo¤Wo‹Lf:Yp/d†>t…C}–R{ŸS˜™g‰‰[q€Pc˜e‘ž¬°y¤šh€vN§fV¶„d§|asrJZg3jf8žxW‹€K’Ob„H•­€¯Þ”áöÇÀÿ½æƒ—«Y‹Y€œY̽š®Ñ¬Óˆ±`˜­^€¦Ir¢I~¬So©F‡·W‰«Z„qZ²ü‚‰ß[ƒab«\l…|©àŸ}¯\a•Gr¦Vm“Qy mŸÑ˜ Ëŵ‚§Mmh5x}C‡œ[“«v¹`s¢I\‘M‰¦‰¨Ò£Ì{ÃXŠYÒÔ¡¨änŠœf¯µu·f Ltw8Om4YŠGi‚@tiA…}X£¤‚§ˆª½·Îúû뢪֓†­gs”G„¤e™Ç{¸Œ¯¾Œ©®€¢¨zŠOp_=Pf4L^?drN€™yѶœÂΓ˜Ðˆ—ºm„¢\{Ol’]ޱ€–Ênq’[u[lzNwa¯{¯¸‚™’Zt‚_••u™¦o‡£d…X~™\|Ÿ\v¦a†®Ns“Cd–]{¢OX‚ASv>IcCkŽpžÂy‹©lŒ¥pu‘EBW7KeZw—lv™]e€MayRq˜rˆ®ex”c‚’d…“^uŸn…´m‚¦^|•S‚—Hm}Iu¥[‚¡Uz†NmM_zTg…Yh†IMk46>Vvw‡Ê»–Öˇ¥°zj˜h}ht†at‚­²}›“MhgIptW€{[|‡d“‘‹¶»¸÷åÑÿîÅðÝœÅË’¾º‚Ÿ£~…¨‚~™ƒš…¡z|›hIH:AG-=H0JG0LB$CL)3C-C@1PK';R'QQ5\b-lpMwwa[k[‡z‰m]—HŽ™q™¬u¿‚vž~TshJQ>YV0…m4Ž€Fb¢_skdk^Ayj_©eBg–Le\[]XAb@€“O|¢^m˜_n[Ë]KÔjMÙ‡n°Œpç†ò›dª˜‰¥ƒz²Ž_œ«{´z÷wbÿ‡jÿ›„ÿ¤‹ÿʽÆÅ¹ˆš°{ÿ‚ˆÿˆ{ÿ¿§ÿñ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿþ÷ÿÑðÿÖÖÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷¶ÿÑÿ«Âÿ߃ÿÿÀÿÿäÿÖªöÙ¸¥¹µ¸e–|Li_ZX4Pa-GwED`6,b/!F*.3WB:s4@K:6]9?L*SR,hs03ˆG>>2DT(<=+nJ&MŽEOsDhs9>zC=V8GX!V\0bn9Md?jb5g†=om<“s>–M¡†\zŸ_n¦Ms]¸u/¥Ækk±‚a†W¢yKp˜NY‹bdq6lm2\jC\rAOW>_a+’z3Ž¡^Í£n¦‚^vzg]iOWj9V_'Yj-SsA”…?}™Qoªfj—V|ŸUa¯eU‚I]{8Lu>Wu9c~H±yE[ÕŒCN<‘G*®“S®Ê“¾K€f/H-=:Še-µtž­tzihg@]‰OŽ›O¦ï‹^…xq^Dx°jR’pLL3<>"K<“a6T´‘\n6Fh7]o-@]977&I?uO(“¡a}”]I[Bi,Œz.SsXDO+OL…„7ʽlÃ{©~HnLvS&y†UWvI\l3jx7SwObL/o@<f„U>s?‘T,#S9(6B<zz3n©d‚ŽH¶ËzÿœW•G_m0P]-Rl+Gl7~[&ƒ£kw¡Sp…HLT;\T+ΉQÛö¶òä©kú«2k1F.¢T8s¾Vt9|ŒF™Å|q¥]V‰CQN-Ho+Àu>“¬z²†C¥É€‚·G§µL–¤qeM5nc;¯½f—ÿRÄa_x@`ÂZdc2rb<’T®Ï€¢ d˜x_«}VÌ¥wÅÐ×Û¤ÖóºÖÛ¨ÈûÇèÿÕ«ÿ½¨¾}¢›YÒŒZ›€f£·f³aZ‚IYR(tB˜¸j†¹_c”NGg6‘rUÃϲ¾åÀY‹UBF%Y_4XKšvT —tš‡eÝ l­ª†¦¡^±»u©Û€”¯^`Š<{‚?g›C\}8ŒUq²Vtz>Ó™q¥›nƒµn†½|…´{f•U–¤q§len=dX7lQ3|[6n7´nH׉_œfI©mFxŒI‹QtV˜§yÅÔ¨ËாΦµq¥W€…Vu”Tˆ—i™ª~ˆµk‚§U±¬dž›T{ T¼¹ƒÂá’”Íl_„>JE+†yY² i±Ç‚†Ãq‰Å„—³u€ZÊeg˜E~Lw‹Y¡ q‡§VRm(BI"S[/p…@•“UrŒKo†Kˆ¤aФc†¦d†¦UqoM¢Šoмl’ÁtªÅ|…±\ƒi—˜xŽ cp†E^ƒAu¤Vf™FqtAnjGm’fާ}¦È¥©Ý›¶Ô¦·Ý“•Â€Ž¹mtµnŒ©Šœ«š·‹›°ˆ£§|¤£fš’Xu@Wr5Gk2Oi3?^+__[Š•p’¦n¥ºry˜^‰bœª€©Ìlz L…xG|sKu†a§k‡ŽVuy=duBv‡S€’[˜Of‚Mo‹^|£c|£[{›Pm”KtšZƒ§Tm‰Ca‹Jožm¡¶‚š§_f`‚¬j‚¡Z|²Zo M\xO]uFZh<^x`ƒ°s–¬f€‡[…‹Zn‹[hŽbthv¢TdžKY…F]\¤T`‚9Mj/Pk6TrBTzSk’Wjy/;A1JePfi…–~Ÿ™qÇŽoŸŒ^‚Q\lfŽŸxŸTasVgxYktYl{dyŽ|¥¥œÂ¹©Í¶›Äµ“¬Äž¥¸œªÅ”¨¶y|Ÿy}“‚—Œ•hPO@@E*A?'KJ&FD&;H08D5B8&LN%XS,wg7xˆBrˆ_mzbru^e‡e„mar{Lžo_œ–][º„6‹”ENLZJ!sf6~€G§uNbœ[`loYd>t^Dœs<q‚GwbUrTCšlHœ†E‰´euŽpZlT]I@‰P?›qG©xTç]÷˜h韎±£„²’´‹a¶‘pš©}™pØhTÿv]ÿsÿ›zÿ£’ÿ¸ï¥žÒ¡Œÿ”•ÿ˜€ÿ»ŽÿêÀÿÿäÿÿíׯáÿŠŠÿÇÿÿ±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÊÿÿñÑîû¯Ö‘ÿ¿‘ÿÒkÿý®…åŃ¡v’Œk„€_p•tE˜u,]_#0IT^#FnDNF0\a6Wq;ac9YxBekCX|MHoA[^9rw9S}8Mlc[[5Kr>fK0@{,KWEQ\(5q54Q*SJ$F_)Je2Ki6de4e]6‚‹Pª¸T‰ªbz—\kZ}‡AVžeŠ~AV•?Vx<jy:jhF††F^†GOj9`g1v~FX›aIz[Yd3z|1ŽB[¦‚UvCKp)CR&@hXr$m…+gQW _f‘Tj˜N|›Uz¸bl¬a[—UWs4v|6l„OoO»‹N³áŠfÍ©gxE¢sJbªwxCФ`›]†qNT„aKj;Uj/@`8†u/¢“[Àø‹_¡‘Qj>Îs7‹ÊZ~V6cI>G `d*ŠˆEz¦rWœnek9KqAEH0VN'Nf?p4±°k~ †dšPIu6‚a(V…Ohm/„¯Tw‹^[=]ŽUoo.Gl<|\%MkHKp)Qw.Pi+E~=c[6MwAOh8ƒ_<¹´pV‡^PP(tk4«ÏkzÅo‘³g“ÀkyÃeQ}DDv*:a"Bb#4OERsH"‰¬nBœO:N$AF%§]7‹¶t¦š`Z•jEP-)X&T7 xO|©i{–@§\QˆE\w3˜•LhÖxEl1g€4w“H}=–@™Ñ_]k;Q]*h‹3ŸªE²Àr¸Òyÿ×~ÿÿÿúÿÿÿŒ¬ÜvºêŸ|°fŠ›Oq¡Quv5¯P@¡lX©|s¬”s»˜}äÀ‡ÚÉ¡Ÿf~vFwu?ªvI¥¢iq°__F,[?)|ƒFÇ‘|™Ò‹‰áqMZ0^N;ޤq…œfwsQpudXl<€R:{fQ‹WŸ‘j’´yŒ _¸£h˜¿n¨Éx‡±acŠDn}?{PeZxV [¨¦d¯²aŒ¤d£Å‰Æ“¸{ƒ‘U’Ž^{™Sk<“‹T¯]¡ŠRtdDplAfŒFZd<YF’ŽS©‘]Ñ£sœ [ ‹jŽudviFwV?‘—Pb›;^i?e?s„Fˆ¤TtžFŒŽS”–Fz‹U¹ºŒèÿ¿ÎvZ˜BKu2Rz2:U"--`K=¤‘q‰Ùqg’Jz~S~’Py©Vv£W€›\m¢PpFt|@s~Ds:xMœºv—Ê‚ŸÝ¤Êì“ÿï¬óÿ¢¬Ò}žÏ„ÁΑ¥¯j›] ¬u]¢QOv<TY5XR*bzO‘Ó‹¿ÿ¥¯ÿ‚•¤Q€’^ª§|œ·†«ÉŒœÁ‚±s„šqš¸ˆ·ov£oˆ¡{‹˜tššƒºÂ’ªÆ†¾¿}̪n…’]vžZbBawAhg@qaK€˜t¨ÉšÀhcˆWt}`—µtœ¶eu’Qv^”c§d”Oqn1J_2WqGs‘Ux™Z‡h€žau¤Vf“JpJgƒ?`xSz•TdŠHjˆP‡®nªÁmršYm‘o‰±`uˆW„‘V{‹Lo€FmzJs}Tƒ r—¶p†™cvŠZ€…PsxSx…YsŽ[v‰Mw’W{ ]t¡dw¢^h›DS|9Bl@K|OY^l˜VmŒ<Mr?Y…IV€J]qETbCSNZ„n`ŒŒMb‚U~x–u„šwƒ›rs‰x‚”m•¢x¨–ÛÀ™Ì¸{ž Ã·¦ÎÒ¶ØÓ™´®k„š}|†šœy““z2;>H/ ^<#FH(HF/[K,RL0gM/‚e7«b;ŒƒBkdL€k>WUPF@IX0>cDQP9om=“Fr™cAª„XUZ„S$h’CexZ|tI_tAieOpfD€Ox}DwuKxxD€]>ŒiE†{KjŠTmtYdoKkiE~tB|ŒXžuZÑ}OÐ{OË‘xÐp»‘xÖ–p¾¡zª—‡˜§~}e¨aRägRïx]ÿynÿ…gÿ¨Žÿ®Œö¼¡ÿ±šÿˆÿ¤|ÿ„ÿâ™ÿÿºÿÿºÿÿ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿÿÿÿÿÿÿÿÿÿÿÿ¢Ê¨™¤ªÿ“|ÿ»pÿè¦ÿ׬úÿ¸ÿï«ÿÔ…—¬§r–V€d9[P‡C7}¢ORª}%vk/0>!a\GH\zCU<1[9YD$Na9JE;I>4FP9SO4Kk5nW(rŒXSuM7V@]F,<o&5NLRCEh";h/pN$H„3jd/^…5brC{n?€£Rt¦j|¤o{µqkœop‹T…¦\i•WqƒCg™NaxGcŽDIzFa_6[|?Hf:jL3Œe@TŽfivHdJu@\•OX|XA†@Lc2k‰/V†?„yCžÉq‰Êz´zh—^~¬_vÈmg»k[˜WhH_£QlrF~i?}œ]ï–RŽÿ¯‚ˆj†¡]^~Mx”A}¯W~‹QM™b<_>6M(dk.t‘Jm“TÓ×uˆË¯IŒe?\5Š_,©­joŽbpžUjšYEOIg/'ªF-†‡bnŠ`ko<q]=]OAha6Öb0ÙÅ„rˆQ‘>?n.y^+jw@}Ž?WœaYK0`]36e-AX"HL xd1Ji>Lq)Rf)~g-Íu¤³jšq}šc}´m~•Zpœhz™`Ÿ¶d³·ok©rbv7´°SX¿w[z@N|/Iu*Xw&OŒ9\9cz8œ‡Hh·d]g7gY:sZ;^kHdv=fKk…Fd‡E\“K†—Eš¬gf‡AjŽAg8v}=Y‚ŽSt–E{±Xƒ·[hŸXƒk=­Õ‹–Âo~ª]’V¬¾vÁÿžÇà‡‘»qʯTÿ¹³÷ÿþÉú£¡ß•°¸qËø¢­ÿ³X‚P8; 8)6/46ƒ\1åŸx±°q‡¿lg{>wjHU[9Q9#hd6Tm?ƒ¡Wœ¹p^BwY7°Ætqù}MB+”œkpwOdRGKtBmbU‡Œa¸iw|VŸtX¢£uœ´i‹”bš®vÀir©Rˆ~LpƒFu”IvœSo…I~X‹ˆN˜œ\½ã¦Ö÷ʞ锑¼i‹[q†JŠT„F§·Êõ¬íÿŹÿ¥ŸÏŒà୴ч©¸n”¾Z«K²yX¡³fŒmPs_Q„ENn=É™wªÓ€™Èt…Èm_Š9q‘Ce‰4p…<k‚6dt7vqAÁ¥‰”Âp„³dŒ¾ly´j|µd}¨W•|MކQˆ®a²¹†b°Lco=bs@u„Gq“KŽšbq¡HvŒ?u“7jw9|`½‘µxŽ®z‹Ÿ`…©|™Âš¦Ò±Öÿ׾ІwJwQ„®y¬Ö}X–>K\6My\Ô”Îÿ·Ùÿ³Âþy’LSZ0Z[DsyS€ˆZŠWŽVy]ޏ«fu†^ƒ‚Y‰`†´h‹Ÿh–µ‚˜Í„–ˇ›Âƒ„£m¥tˆºmm•ON_;kyr´Å£Î蚀¶bz›p£¹w‘¥mz‹MjgQ…~Zz”e‰˜RZ_/E\Dr†\‡œdŠ®t¾v‰Ân·dt¦Ov”Orr?XhCl„?`ŠHt“Tz’^™°sžÑx ÑŠºVg~Hs{Qs„OcvHclDpˆ]’®q›¬g€”d†¤h€\xˆPhxBZa9aZ?eeRpƒ_z¤by¥Sv§\oœ[d‘]nœpx±lr£[n’Oj–Hl˜Q\ALi=GW5GOBkjdš”`t“Vn‘{ÄÁœÉÀu˜–n€š•§¶¦«„™§’«œ´˜pŸ•t¬ž˜Ö¾£â¼£¦t‹Ÿ…«¨€»§tˆ‘e3::D7#NG"=P-4L;DE2`K(lc@u}S±t`|__wf;tT2XIA>:S>!b[.†nE˜Q‰¯l† pD°[iwur1RoBSx^cpK‰q?‘|Gu{XysZ`„JzmRŒlB°P`—P^zd^fBxi?hz:nhLpdJpeNuSI‘hDÇ^@»yOÆ‚i£‚fð†hî“a´©˜•“žvuƒf‹YY[D±VMÿ_Lÿ…Wÿ¨‚ÿº•õº¬Ö­ªÿª‹ÿ²pÿÑŽÿôÅÿÿäÿÿÿÿÿÿÿÿ÷ÿÿâÿÿÿÿÿæÿÓÎÿзÿ澜ëä®…{¡‚ã”_ÿÊgÿù¨ÿاÿ×±‘º©ba}bfK;fD89/)j,ml:]yY8gT8FMZH$8|¦ZKƒd1IE9'UG6o=$6/=$4>H8/Ea&uD&G}B3T`5>'L>%UZ"-nYC8 J` Sj+Ug5ZV.Qw;ap8Z†?t…Qg¦_x«d±hiªuU‡i‡w@“°Yd†nƒ‡6P­ZghAM“IT^;…h-hf>JlWhj6’ŽH‡´n{›xv’]l’\kyGj„Xl™Ph‚FS`=ib4Ž„<ŒÆyœË}ÕŽ–¾~©ºo£Ôƒ ÙŠ†ËŒ¤¯le¦~RƒURo9ct9„D¾à…mÍ¿Kq@UP$‚a0ižW{†Lr–VvwYa[Gm]8cGÙ“W›ÿ¼^™~t~KL‹d”f1˜µmZmS€E/y‹_N†RXK0IJ2‹`,¢YÕ†NŒ‘h|~Bab7s8˜¹t€Ša||KJM~z4}µf`„PEe@sd.`‘UP}>7]%UI"Mh;Yh.V€7cx3§‚Mª¸„{³‚p´i{ `b}ViW5pb@ž¤e͆z­^q XvQ­¿k~Èi¢XSŠ>Ir.SO)h†9Gg1MA oW2–L|s@‘cB©qIŒUtzJevDozEiŽWv˜N‚Hr¡\~Œ>axFN^-KKF> \l+‡Œ?’®wœ¶w‹²v•º{µ¾‚—Íy‚±c‚¥\qxFéoY|y^‘E‘åkéÜ}íñ±¦Þ‘‚LŠO®°fµÈ†dnLP‡HS‰C~§T¾Ê{åᛯ¿}´Ìƒž¼xq–Wˆr?[D265SJ&jc6Þ¥€ØüÊU£S]W4ŒJœÉpNi1•|gVlAhfHbv;{wHÉuzšµœ~¬h…W«†g†uRˆ®rv¦V}•Qo“J{u>~€L£U—Mt¥JKu3neG™¢nãöÂÛöµó²q§\m†VoMtšFn­My…P´ž|櫦Ûï´—\€nIŸm`™ŠM’N¤¬hÆÃ…Ãé‹~}T»‰Œœ±oeGYGŽ©Y‚|H‡™UjŒ<y¡Ei™9˜˜FyŠ<Qw1X~=x‘]бrš³{Š£g¾¼¦ÿþ±Ä¶s˜’U¤ˆSœœ_®Ö„˜àqu‘NTk4bv9iL]nI„X”¢`‚®G`In—b˜¿‹d NLP+X_<f€M‘Ÿ€¶Û¥Ò麭柑ßwt¯b—Åu§Úwv¯H[yF— ŽÎÿ°Áþ–¿÷Ÿ¬Ë|y†R[|NT„@U}1i„D`q7Ws?lˆWªÊ‰ˆ«OWn6wxJoƒNtuIg{H}ˆk£´‹¯p‘cˆŠVvc§©p„¤UnŸcw­ŒŸË©Þ䣞ŸU†qc–¬‡–¿~‡«`Yb;kXR’k’”VxuE{…Y‚ˆX„—n»§p«¡eƒ­lv¢^sUw„Jie;^j;b‡;f€Dp„FtŽH~˜l¢É“µÙ‡¬Ìe€­_€Tx…V„R]sDg…\ŠžtŒœ]l‰e…¦ˆ¥¾†´qm‰EPfGYlHuT‹ˆZ…§c¶fv¬hq©pw¬q~°lq¡_o—[t”On’VjŠPj‰QgxEcr=Tb?]m\‚˜frŽPn‡o«ž‡®“Ye|`†“’Ó±Œºœu¤~ žt•˜f¥Ÿ}̱’Ö´‚µ‘m‹“|—°µ±v¡“^v…[RDDZU*]]8Sa:Pr?cfDjq5{Rw•xj‘}^Š‚\mgSbI>lE7YCK>7YQ/joBwQ€¦b™lWdm{fq€9cwKeyOw~TŒ|B¯hP|‹buuge‹K‡sNˆ}D|\{wVVqNUgCY\3O^1]X<[XAga?qY6riBžjFa8©ZR£aFÌ{RʇYÔw¾˜~­–„‘°zz}€^TŽ]E²oTø†Sÿ›aÿ¥zÿµ“ÿ¶…ÿª“ÿÙ¢ÿö¼ÿ¾Ÿÿ’‹ÿ«’ÿÚ«ÿñ¶ÿÿ¦ÚÿÿŒßÜ‹¤ȪtÿÁƒË¢{¥‚þ—lÿËjÿî“ôÑ—É ›Wcq62JaJ',s805!"#,0%2*"<)TG&nt8vlFS_C-UF*#;"QK[P5Aa5;=&%C"F-!3[#g8WS(,[X04!;4gL 5sCLI,€r-ou/_N`~Akp>€qF†™B¢¬d~΃}¬jr°k£Žj`šj€‰CaªXVxKƒq8O®Z~nHbˆUS„SLg;Ha<a`<ÀƒDÿ®n¯»žo‰…ŠcN’ Oy£rj‘Gqc=`m5Kj7DS+eU+lw>ƒ{K¢aX‰Yuf3p–BcNa^HfdKO[MPI-P_3Ib0kj,ßu2K÷®.RA?JQq(ib/T†JCR/2O0>9yg)µ|TâçtÚÄCeXpW*mkC·‘KË—:\MM<%t`4x›g˜°qpیŋRá¹pq¦|œ\5zRz‡Gs˜M¬vG‡·gƒIy‡Vk“ZT}FTe2m‡>[hKyn7n¡QJ‰^cQ!Ig:X}-et0grDUS4¥ŠH‹§{–”^e`Za<Ug>owD|nE~“YM{O\^3}ˆF‹·d‰T¬i[MI|2X^0n~7XƒDg€BkNz°^i–CwŒLurGpi:p9vŠKQ:tQ-w“co¦_iŠGV;S~@U‰GFd'GV#\l'U…>iP(„†P¢§ii„T†r@†ža¥i’ÀicÉp_n5o}Dµ˜\¯‰e²Æj¥¾kŠSvŽJ‡“Eœï„Š‘OËËƒãæ»¹ô¥Á«på†Á„ºƒu­z†b—†h‘ªymnLM–;‰Q/œÈ~šº”¶oj‘Rz[XyD„d7wO³[spH|cG…{N‰|]“‹i¶|k…ªz™ŒcºžuŸÇrˆ£fh“BrŒ@j–Qkv@œ—k™í…´X„¶Vg‚FlrC±œ„ÛôÇÌéÇËà®}½b{‘XoŽPpG„µ]‚ž[®Ä‹·ØˆªßeD`v:CU*_\2hZ9Œj[nu@¢†^„©\gg?xgLf|Tu„Yª›fft?}ŠLs‹AH‹ŸI±šM{…;[s8Qp7jsFr…O€£]|—ZǹçÇyÅ™Vž“J‡T’”bδ‹ÿø°ÉÖsœ‰Wiˆ<Sz7aZ9j{@_‡8aq2x‡R•³€¾ˆx˜STi2\p4ey;ši¹»š¥¹Š™·€«Ä¾Ë•´Ú{¡Ñn•ßacŽBŒŠg¹Þ™µå©¨Ù˜j†Lta`™¬™¤nl}7[k,GT%M_8w€k°Ê‘€¢JUl:dpJh}CkpEˆ‹Qs‘^£s}žTmŸOrž`‡§\iŒ=ReLޤ’µÑª¸È¦þ˽ñ¶f]YP‰{”·ƒ’´nnyAocS¥¢t”™T……]—eƒ€P„Ža’‹JevKp‡Y{]”VuxH_c8Za5^wAf}Lo’LcŒ@t›d”Ãx¤¬euS„œg†¬l~´l…±^oœRePh|UjƒI[Yrœ‡»ŸÐ¤£Ì€‰ªo‚œ_‡Ÿ`”dŒ ~½‰†¾y‚ºw€«o}•\f„Ob‡VlŠYw’UpŽLdzIc€QjŽTh–Umgzžf~”KmŒ^kŸbŠhu¨…b‹~g–}¬¡t‹”m¥£‚¿³ŠÆ¦s ˆpœ‘À¶†¦˜i}w\l|i_Y6bo4UnCebEhdBnwE}‚O~›g¢q£‹^£Aˆ€FTW{M._~<^„U~LožQs„]gGbyPE{UoWPƒg<eQ`z^kyOzpBœtKkpDmfYt{C†TˆqFmNQŠo]eNYg3Mf:Xc2[0‡r<„{Q…vSc„Po|Y]nGXU?kL)ºd)àpBï•dûŸwÝ„ª¤š¨Œ“xk›iV¤uYÅ`ãmú˜vÿœ|ÿ¸xͯ”ÿtpÿ§~¡€…’“V¬šNÿ¤eÿ°a¾Ç©¼±­¶yˆ›sè›{«®y½²˜ÿ fÿ¾iè¼¢h•w'Bc$EHc 'I?01$3 +$.,"0 (?+b\&[rD^tB9j52?);:K<$:Q(L>2LQ-D[59Z3JP,Ce+OS.bN17s3,>:&6D/;f"_L$[{8w_1_r9cNZ{?q}8„²Q{®t€«p|¼j{»o‘³oo¹z‚›v^¯[S}a€o?k¤T…‹WngfwK“xObz`ZUN`a.EU7RC(g[-ƒ|Fz|HJjQYm:Pg.9U5:@²P"Œ°Tq†`x¢eR˜NLk:V…@eY=~yBX¿X5„H?J+5V-?\&Nd+@]+qg$˜†:`¬‰Z|@?g+CM%Qj-Wt6=u=_/–~Cݧ_Œê¦EukP^4Qp3\l<˜†FÚœp_€thA­wJ€fšmJ·}Zï¥m¬´ƒÖz`§bŸ‘Z‡„K£h\€P‚2V‚’bN‹OUs.ŒZ6nƒOˆf?ª—G„¨tIcBTq.Q{/Wl/v8‹£m¢žY[[¡keoB[›Nqx?y‰G^nEa`.a<§LŒè‹¢ñ‚„ú–t¿c`’Pa€7Lx9P_2Š€F VŒŒM“‘I‡—[“C¬U‹›lyK•’H‚‰]m„R;:'up.™Ç]^²eo‘8Á¸}{Í£P–YEr*W_2x‹KMvFQR,]q<WŽBb›McœLËw‹Ín”¹a]²fQb+nI1}‹GdŠ<Gf)Wf%_z;¬Nލ]—¢c£º…ˆpKÁYJ»‡u˜È†}Ür€‚Cšh>¬rJ¼~P³Ÿu”w`ˆbFŽkO¸kW omŠ`OŽ‹PÁz¾^‘ŒK¦€G”{Nk_:uW:ƒƒR•—h„`ŒzM¯tg¡o|©dœ‘`œ­b†¦fk’Ab€<tvP‚›_˜dv™I}ªVaˆDTf/‹ˆaÀÒ¥´Á™w“Z˜¢on­Wb“@Xv8`tAnQx«e•³j¼¹›¤§zu‘NjGs‰J§V’oNvb:ž~`œe®©y§«{¼™x²…h lX{{F‘lD|A•„G®šMœ{Fƒƒ=d‡@WƒAa}F˜Âo¡ù~|»VÌ´y¼É|»i‰«U›‘[«­w«^ŸŸpı„ ¤eg•Qs®M‘U‚•Se‡9g}A‰K™‰L~…Qªg}µQq§M~¨a˜Ã‹™UOA+I71kVJ~˜M†TžÍi²Ùp}¥X’¶x£Ö‰™a{wV|…Pt„TZkI`I6TZ.A`"7F%>M3~~w§Ç|p™DBe/Nc4XcBsƒn©Â‰ŸËw‹¦j¥¡s´»ˆ£ªq‹›wŸgmœh€¬ƒ«¿™©¹‹˜š–䲂|V‹‡d¢u£•t‰YoYµŸn ¡Tx‚\ž€[~gž“c‚ŽNsˆGhƒAl€Mq]nM_sE`yM•g™°›ÆvzJu‡Z”¥dJjIm‘^‹¬zšÁz™³^oƒJUrCRtGQsEVuWg€‘µ¢¤½ª¾Ü¦ºÉ‚¯·t‹ZsŽY‚qº›y¤™fy”g|§^nVo‹\w j~¦bwš]uˆM^m=XpVmœh·jw«k¨i„—Sr‰Tw‡[t€W|ˆ`„kŒ†X€xdŒ†l¥–h™Ž_hƒƒt¥pšŠ|¯˜Øq—m]…ih“„jl`5_o>PQVdSo_@ƒ}D‡œS«n…­‰€ž†c¢€M‚yIlYrbCy~5›Q‡—_P§oBxprJHF};CXM_K9UX1hc=awHXpOqhBh~=`|M_zHXw?gkEm`7hiAKsXXhKf`-Tg3Rf<bc5tj9gvKjqM‚mEŒ‹Wl”cOy\[jHwh0²dAÿrAÓ›jÞŠ¬Ÿ|~ˆ¥tn„U•f•¢až¥m©Šnɇ^Õ‡^Š–kz‡`·‚Yÿ‚F—Ò‰£¥…’¶^“·e•VŸp[o”Wq‹XÿxTÿÆb©Ó·ÿ™l¼˜l^œ~]^,(`4/…<05F(<$'! :&8_j^&Uw9mzMD†EMJ9bR.jp;]_BhnA«cE¾tG™‰[˜Žd†‹XËQ¯·k“t]†ZKk_6Y<DR&Dd*\h6P€5r>^Qe[FGcAwk.k¦S‹©e‰ºs•£n†¼uw¹…wªoŽgb—dKnXw`3‘¥Kž•e?skKR,WJ0Pn>TkERb3\S4_X1uz?d…Mb\F[D6]}7PmGBa-]S*lO-ŠŽEÁmˆ{vK–©mN‡gCX=R[(s?—ØwzÞ€gšh:lGMI'`y;eu6‹t4a§cFnE@b+JX&a^,X‡FhO2p‰OÏzD¿ä“e·ŸsŒM^PQj7f{@WpH¥T6ˆ‚XÊ}QšŒj~z_ykSü|O²Ö p‰e‡_;¢V½S˜_t‘jp~9s„B–ŒK¯¦VI­lFa0p[,Œ|Hº­n}¢h¢•[Æ^lSUo>Tb1tn6œxLd…fzo;z hc’Q¤šS»·}…®lRqFtˆ:¡½oÕ¥‚Ÿƒ}ŽwQYM^R*`r8b˜L_{5R|B]u3yy>p§W{–PuŸab™IyŽG}›YŸ¨gw³j¡›Vhæ†Q}2_Š6Ni0tm.q•E§žU€¿Š`‡JXMZe5nœVY…N[hLcn>›ˆZˆxfs`JªjP€Œg{PB“dWe¢ic{?mKWn9BV`K%‰‘YŽ«]•„_‡™_†ž]jÇdƒÀe·ÔˆÈû¯ÂÙ…ÉǨžU†WsrDÊŽ[ÊÉ…µrÂ|°§‹z‡ao]K…x]§·uW„UN¡fOz`N®lP§¸}³Õ—¨å›…›a›–jˆ—_“›yy©Yr•Lo‚D‹‹Lb”Ct…Fˆ“On„O}‹Xr‰Ds­Tƒ XœÄe»“k·€~žrfvCqˆKfKfNRq6gr5f„:k|Ao›ToKkcH~MбXµ¹màÌ‹´Èt|‡Q¯—dçºsì–kÜueä€i¥yR†tKž†M†H¡•P—˜RŒDŽ‚>uu=†~L°bŒ¦]˜«qÌÎŒÁæºË¨«_º’c|“J‚˜T´Âd¦I…£a™Åƒ©Ý””Ôˆ™¯m|žTTƒ4Vk/^u4os.`W,‰b>O‡žZ€ª[¤¾w’¬gœvIib5<@)64'f[>€°P«¹\¢ºWzS†–b Z}Œ\‚–Y_cLsqD]X07;$A6*lV2Na1U`<{}]”›Vec:Xd<f{EhqKn{Kt„W’°…°ÑŒ®à‹´r˜”w®„‰Â}ˆÒ‚ˆ¿z”²y¡{˜‹zΨ³¥b”ˆV{ƒc¢¥ƒ¦£gˆ}R—‘[‰¤M}—Sy~Pz€T‰Ox–Zy†OŒX†žg¦žl“\}ˆ]–h‹¢uŸž“ÐÅ‘² \rŒMtˆFo„Hd‚OnƒOx|Sp‚RmHPm:Oo=Y†OV~LTxVb•xˆ³Œ¢«z¨©vŽžv£m„ŸPu€NhwSzwSsiL]|Pi¤h~©gy¢m‡²w‰³h¢_‚‡DamBZpXm„_w–`x›m¢Œ\zxV…ƒ_Œ|[‰hš¥z³˜m“ˆh­‘j Ž[~~Nh{Maz\†u§˜f¡…b{Hmp<esQ|{Z[€MduUkwTjsRmuHR‰bx§mb“tYfFdXV\Gaf?p…@VxG^^Qr]6yhA\”ee{XG‡GSbWP];TM6an<TuBNsIXkCc`2W^4foCV;ZrEZdCSn;QV=DjBJY6ZZ-Xq9qhFtg6ixOhoGcA‚xB€_q†hgwUYvHvlTÐk7À‘K¸‡mµ’hŒ‰u’i©…J—ºq¥ªs˜ºy€§kf§sJ²‡P®§g‹¦i­bS‰˜eŒ±‚Ù¬`ȵ[¢”|Z‹hWnLXx9lwBÿq@Ô‡7—‰azmXRzM{X!"M(_`":hCCI5E05-BH*fR k”>[‘L‹rPo»[`‹ogkFv~Jv†@wtQe‰b‡aCic>qI7œL,•uPÞ•y]ƒ^pZZ{]4qqV^YC`bAfT0x‰H|¨Q]ˆSR“MX‚Y[Q*hW5|<kŽi^sXum9z‹IwŸaS’hfgN8sD27<€;a¡HTˆT4XPR<%[U/hX+\sIX{Qw}Nz“YmxbJR@K_4\E+`}.VlEsn6RiH”…D€‚s€‡QeoR§~<KŒ`;F3BS0ˆ{5©Ì}“ª…a³Ö}ÿ¤k¢oLwQ“‡DZªjj‚?9…JRAEZ8[_/az?a_7mCÕׇôÃtˆvaœ\NpOju=„ƒMœ¦^‰’`â“[¢á”Žz`lO¨mL·mX­STƒZ®‹[•˜e¾ª`~±ww}_hzI€y@Š=åY‹¶wbQR…F¥k<¢´tt‹UpfBKkPXf,eŒA~>p˜\\‚TQP1qj5^ŽXV[5yT2œA¡¡\ »}Œc]jCLg5gW+l`:^u?Dt;_],_l=i„:v±iyqKglH”V•_~`…P©˜j¯®‚¡­ƒÈÈuËÄ~¹¦|}•lg¥g^­Sd•;†HX}E_v8xw-£°x_”Vfn<e“_KwAaT7H]B.O&GU(@t4WV.mKDjE9•n=ttEn‰UKp/HS$P[!pv1}]@‡N6ž–kt‚9¥eW®ŸwÉÁ˜ßꤘ摩`Ü”qíˆk´ˆWÕ²pÞУ²„jÈx¼©‹®ydvTPF+F+?6#{<+¸\G´`OzZJJJ®‡€ÂŸŸ°j«uHŒ~T_|Yw‹V\x@l€X•›h|H{wI}]q¥Sh‡D™Ÿow¸aˆ›Uo«dX_8bg?YY5U~1ET.EV/_b8fn/^q0hH”¬x¥ÈŠ©^œ¡^›¿hƒªV~rF|iG§¥€âÐŰ_Šj>bT6YJ0XF4j\B†tEŠ}E´•W–SD…{Bw|F”|W‰[foA—j¡È…¢¥c’ `¯ÉwŸ·c”’K‚C‰H|I}R‡”^‹ŽZŒœYužF€N†±Tl“Mb–Cf‡@a‚=s…Ht˜JqšKŠ‹WФ]s~@]l1txD‹ŠV¥UdwL—™_‰Q– ^‚¾c{–Y–µa‚¨^{©kq·nyµ_]?B\5M]7Hh8`u8lŠ<fŠ>`m8U\7_jN gw™VPb:cUC„rd¯¹™Öó¯Ðÿ’—»r­ÃÃß‹ºë‹šÅy—c§i…`ª˜x£‘WflB[nFq{m—©ns‘b’Å‚›ÖzŸµq¤¯q´¨l“›`v rœ²xŸª{Ôªv¢–`y|R…Œc›£p¡¥v­³†Ä»{•›[y“Ju•Rr–Rn‘Mmw>`b/Nd6Ux@Vz;M€Wr¬s‚шxÅkxtŽ·~}©nzŸg~¤u€±e}£_zZ}†TlMuqKu…Ntb„‡d}^rži|¨r}›crƒPt‚Nt„\lŒ\zˆau‡ezšy“˜d…yU†€cˆ„XŽ‹q¢€Á›s§•m«‡lš„ZІGjxR`€_qnŒ¤l„™`uŽM\~GUtJevQa…`\…j\{SliUnƒH`Œbx~fK‡bR_XLbJD\7RU3u[)c„9K[WRJK\1lO6oh9…rMz•Yj£hVŒV^yMYyFZuIPrANoGk]3ai,^vMsl?k‰Fk|K`~GYwFLx@]rIt{:frB—mN{u9f€\kfWeDi8}tDosJwdMyrD‚xV£tI‰ŒOkSŸcEºoHo€W¡s[¡£D¤¦n›«zw¨wzsowSC~`<hL_~X‰tD†r=‹Œ_œ¼kŒÁrz¹uj|[b…Jk¦PO§RmiG^S"bY5b5AgKkD<0—@&49W9=j/EaG-b0 =.<$HTRcD—k7v™Klœw¢£Vhʉn‚wrx\xpT¤G€¤cL“ac`IMZ8DT0iI*àT$r™[qs{TX1fD4[j5_eC:^5sH+w§GO›c€„DË’>-†:?0X[+j|/D›idi7>Y=SN!=P,D\.Rf-6g:5D3nC!„›D}§YbjK{ETc8jW<Qd>‚pAk‚]OkWcP9WnGXh@\M+Z|4~B{ Y’œ\N•icD}§Q› ge¸l9FK7.#~T)‡–Vn‰oSs_wS/½jEÐåz­ÿÍ¡¸Žâöxÿ¯t·vZ’Q]t:Nq8…n5Uy\PtA¬•B¼ÇŽnÖ¨rtSHl?iv8hŽMÒ¦N¼Ì¡zÿfH¶³¯¥³€‰¥r‚vTPJ7‚^3­²\ogµƒWÿo[sÉ©u[‰ŠNs~Kœ‚HÑ¢nu¬yyH~¨^Ô³^Œ{f‹T~pU—_£XޝwjŒUHUE[P-^c<qhBt¢dWDiy3”Mˆ„D’t?†©evœURvBcw6\l8Šƒ;†Yo†Njq/‹¥Km©j]j:iw>ЍeoœoV|I_hDnv:jwC˜Ãbª¾r“„[ŸŠVŒ°u‹ÈiyÃXo¦VažM[|9R>kt:š´jg®ie„CezDJg>9]6`pF~‘ln{RfL3.B 6F&ZX5cŒX_q>[nAPo0NN(PJ)¥pH—†Xl…Jq«VY•>=R%G:€a;Î¥wÉÚ ¬†d¤SŽ|O•’TßÖ䬆µõ™Í’rɼ‚“˜Tv…PJg9??&[N2pM8¨XNˆrRlP8N>/Z<.s\=‡tIgN¦‚_m€Rdi>qt=\y<[v3uŒMsˆDx†G“šX‰”^dKn€FstDc\/b{4[I6‰yLvn8Uo3Eq/Ie4jY;Ja.O`.nxDyŽUˆ¨hŒŸc–¦a¤hºœ^³·U¤ŽS¹–a¯¥¯¿s‘J‡F6dc=‹gNykEhF5s[?±td’ž[Ê\Š›Hml>v^Lt†U~vK{“]—±y—’kžŸ^© gñÊ€µ×qˆ»Ys”I…¡Zƒ­^w˜N VnIšT¥f‰«d‡žPŠ‘Vx’Pˆ ^wŒ?jy7nrHŽTj‚Dhr7vvL€~S‹c¥ sƒ¥X‚’g˜±i­¾y¥Ís}³XmN}|R‘²›ÓÿȽÿ‰“¾~‘±fˆvLˆxL‚?o†<`|;Pc6hhG}bŸ¹•¬ß¡´à¢˜×€iµapve®º¢ÆòœŸÀ}¿Á†µçˆ¬È“¿aw„^‹•h‰œl x—T‚uKirIxrbŒ“t¨Á¨ÿû¸þÔ„ÇÑžóÏÄ _Š›oºÃ¢Ü¯|¡›i–£m—_uŒ[y[Œ“c—¤x¡Çu‹½Vv£Mm—Kw|SŠˆ]‡ŸcŽ£Yk“Hc~D`{Kh‹Ts²€«ì·ßÿ£¶Òt{Ÿo†²ƒ¶uˆŸb€™j}ªfy f›e“‡\˜}M~CnzEalHWpZg|[m‰WjŠ]x~Xu‡Ut‹]p†UizLjtMqx[~‹s“•]ŠuO~uZxŒ_~™m§™p¢•ožj“œg’…KyGezWoruœ˜´‡ž¯~“ªit—Tc„P`‚?Ur\rbLhrCdvKfsO`pKTsUYiYPdI`c;Rf>TnAlZ=i4t†Hm„cXiJXh@Pt;fh@†q<z–Qr™tfŽh_ˆZOwOPdHMk9tf3hh3b|OkoGWu;efIY`:ajIagByuCruGooR‹uR‘yT€|IUrMabMu^4g[1TQ6hR4fs<q~N—mODˆMHSLbJ(‹V,m[=r`J…b4€†Lz–ZzˆZ]hTwE:eL+\bASl>Xb0We/¢s7½ÛaÇôŽžþ¨Ì’©Ñd†ÌyR›gNlGEd,Vi.Dv;0QEoA-Jž=CeRfb4b‰=Y‚SGvH5]:WZ0k|<Š‹ZxŒOu–g˜ˆc“Ílb¥–BckK>AZV-{\2q†NcˆTbnIeZ:]Z6\S7`7‰g7I{gHC6^>+VZ0Cm<XQ)€”>jPl‘JV”JbDMšR|{<^¡_‘{VWÇaAoM8K-D:7CTH!Ko6Oh0V_;o_>xŽDbYWiPFm2DL+XL,d~AJhVWH2Pd7XoI€wCh–^pž\vžNbnRŠyJqªffomÊQ¢®sw¯n}…aBŠokV8\‹WBJAqG1fvRˆlT«×dÔä‡Üð•àÿÎðÿ²žÿ»y°l^–jW‡Bdw;]v0wo<¶ezST·šPZ¸•ClD\k4ŽL¢Ô|Èé~ŸbgB«e=›jWxx?Œ–Rj‚^•ŠKŽxVÅZ“€h™tR§Žn[“iž{DhU±n7É…T¦²syœ`†‰[³{J¥×‹ˆ›k·¤oºœƒˆ–yœ©\´nj™ckrJsMqnE|Ps]h}F€=€€Rs˜YŸ€G‚˜bb|Hg:RˆE\q4t8¶‡Q’ŽVj‰M›·j²Á|Äÿ´¿ôœŸki…XWe0_[3fv8Ÿ‚H²‹sZ\L\e'‡Y‡±zXƒ;]g/…Y_|Dks;Pˆ¹up£vEn;GT,BU+6F!I[2Ur@DL%=\#Wk0yœV‡šY|¤]UžT]v5tŽM”®wIfI]5„`>çpOÁ]ĵb¬™`Õµv»o^‡8mr;‹mQxI¶‰e’^ʆ`ðڦŹ~ô|­ÝŒ´©tÉ™kˆ”Y‚tE…‚I‚OŒ‰StGœdV’xJ‚TmpC‹xTÞ¥€£œbžŽ^z…ValE`i:h~EevDcwB_f8~No’PUh6[q6ez=pVdšSQˆ<fl<˜„OS}8\‡CdDat?FQ*dZ3Y{AeŽD^ˆBt˜Px•`•s›l‰˜bÈšnµ^²\Ó lž¦r£¾¡²[´³dάi”—Vy‰T‰•O–vJž–Xvy@¦uCy†I~”a‹šd~¯X–W›¿¨Ðz¤©f}›T€¾X±ã˜ÌõŽ”¸V¹«n¶»oy¤Xt—Nl—R¤Pm“Az—Lo—Jx“Cg‚?†’U–Rh;s{LoŠFr€AƒrJš‚]œ“^Åb׎f¼œo¬²}Ϻq‰¤^ÝÁŽÈÕ}kAXk=“’Žãü½Õÿ–—Ü€©À‚–¬^ŠJ„™Mk>\{0[}4r~8‡M¼Û«°Ëœ¡±…ª·…“±eƒ‡}Ë⤠Ät‰¤i”»l‘´\~JdhCjpQƒ™mŸ¿‘²\€“b¨¤q¡œrŸ~ Ä“¾µvžqæÂ©ÿÝ•¥´g…«x±´v®c¢r”£p˜ q–”Yx‡Mi‰Lv¦c±Ì}¬Ûp”Ã[z£IlrAf€WtˆX…‹eœ“\‡‹KhpBj‹r Û¡Æÿ ¸ãx~¥d|˜v¥¹y­cy•^uŠ^w”]wapWhz>hxDf~NkzXi{UuUqŸYiœVcOasKpyWv‘^v‘HauF\yHjvSkg„\‡Tz~VuŽ[q[yy]„jW…‘kŸk”†Kmƒ^z’u’®ª†¥²‡¼µº»|™ Z‚’[}”I0bTD=4a?!eW.F`BlJ@Mp6:eVR?;hI,^`7R~Ga_Pg`?wrCa…PnsTpzFWˆPhgF{nAm€L\z\^w^`vIIˆW\_H_n2`v7`o7ZoDVa9Tb4Vg5Qg1XF;Q\3Wl=`V+pW,sa;‡eF‡nAv`BI^EXS>HN%MC(YR*kg4on;`€SEhPEYCYZ2Nc4LV6S@.^M(gS,cg;ToBIO5\;+iC)WS7?l?N3.eL'›g8­ºN±â…¯ä‡œË€f±r9|Y=>/JR ob&o’AZ^eQ{‹CS”OLSGff4QvGTkADq@_sE|€ISŒd_TPouDs—a¹•lÆ{EØ­GjsVJ3is5cJ[`Gkb9WD^cCz\4rq?€tEd?TwQcTLOP4ZO2\t:“œKY¨^b|Hj8o¦[vºX^¥[dkO[`:\>[±C5db6R&6R'<G!bT#P}:Sh8~gIb|HzHl [HqNVg4`l;[s<TrNBoFz\/yw=xiLƒNˆªxg•uXvEpY6€H« l‰•oŠRŸ‚Q[ŠY|V@ˆ™Z|Äf|ia}Xp”Tz]¡­b¹Ïk¿ç€äõ‘Òÿ«Îÿ´ŠîŽ´pk›‡ƒ—EKWCpvBŠ—F\rU€e:“£WKo^Z1”ˆO¦¨‡ÅÝ€ªÿ£TˆzfO3ˆy?fUSDÒk@ÄÕ‰€«„›~U»ƒZa„a`@w`q“fŠ•brOrq>“Kœ{N•“U[–cn`/qDËœZ‰dŸÃ†{™b§¥a™«t’g¢Tµ{V‡Ÿmo’IQ‡Qep.Rs5fe,vx:lwBge7x‚Hi‹@p}?v›OywDcxB^s>ˆ„;Õ™ÿÓ•ÿéײ—vouM[[7^a4Xk@^l1[„H`{LcO„‹W wqzTRn7w5w¤\oYfP‚P{¥fqyDd’YRu>Uj8Pf9Vp:`ƒAoŽNx©_±asœ_Z„A|h=¡±uˆµd‡ž\re@bT9ƒ]5Ÿ„\Ê€Wÿ„hÿÿÆ®ø³šË‰ƒ·U[S5qg@oi>øeO½z]©‡[â›fÿ¸£ïÒáÌ~ïº‰ÑØ„¸–t·”Ω„ÀÊ„‹—L¶œaº­q¥©nœyYëz\þ¢¨¨wƒN¢‚R¨€V×¼‘’«sl“Ms|Dkj9isAVq8foBd„JZAhˆNeu?iyIze}“c…Vi¡HR\*PE(VB4Gk,JA&KL-Ÿ„RÈÿ–®ÿ{žWƒ„X™‰h¶j›²_‘˜\›~Z³‡]ИlÌ©tØÿ§Æÿ“½í‹ÙÅ}¼ j¤›[š¬O¤²Z’“[“Y{}F³¯y—°mxwLއXw‡U¯•uÙ»ÃÛ„“ºe¥×sÃχ¢Ì`€Fy™HmˆF“§iƒ«Ra„6c@z‡Mx?yH‡ cz’K•œ\­™N‹—N|«Sƒ›Qp“LcX¿h˜‚]œˆb—²o‰µ`…—]xTu}Lk‚P…tC`m;au<|yh¾Í¾æ„©Ùp‘¯k©Ãk™©X¥VxŠ=`~4Y6\|@sŠNw•dž¨zš¨p„¦ƒ¼Ã‰ ¾y‘Åwy¡Y’°[“Æ^“³Sd’@W}@]W¢½ŒÞÿ·ÿÿµÌÿ¯›öŒÅŽ—µ‹ª¿„º¯rµp̱…çÇŽßÚžÁó²é|½h¡Ä|§Ësž»m°£[Š–Jj—KgŒMx›a£Àv¬Ôh‡¿Se†ForZ†”QmŠBs™W–NjyBq•‚¾õ¢Éóz†¨\nŠUx”e“¡c‡‹My„JhoFeqUnˆ[{ˆTm‹S|Ša•h–Ÿc‰šc‰™j†¦j…¥fvžaw’Vq[yœ_xœQlŽGc†Fc€Kf_~“_s†W€}W‡‹Nk€QlxMwwR~{^špg y[Љq¡©}°£v¡Œs”l£šx§¢mˆŒOkoLpuV(\:=56TP&Dn1CV9hD+[d2AnMFQHJX5YS-gW6]xCnzV‰lF{~EwˆVW‹ZPwRec?kj8j~LV{YgpYrrO_“TSmX\^>af-Th<Sa<gc7h1}|>Zq8uVDiu:InE[N0XO*YO3`I1o^3rR?CO6FY2OS)GN(VP-M]3kX2wm-eXOpWSjESf??hC9M.@T+VH(PDY[1JX3P='}?%g\.=yN(03X)„M—¿MšÚvˆÃYŠa5KG#P*/6"H:]aHc2WH9dr<Um==xGYfAP‰AN{Oxj6™Ÿ^n§yRnj8^L]=,ks5j…XŒz^ȉ[‘À{`Ï©ofolv:hkVdkLff<qcC{ŠM|•NjJmxM€j=pfE]gU_^Ha~K—‘J]·g_ZjŸO€¦P~´f{µ_Y¬cH’S5JFdI%wŠ0;‚oJB1@S,PR2OI1ge2^‡O_bBjR>x†GZfJbOXZ7`qGnšPZ…X„FtdDjaGayR…•L\‘fSZNzc5_`Ip‡O†„Uw‹R^šRlK:¨R/Ѝ|¬ºsŒ ‘o´Šxnm‡U”‘]¬·dçÛsÙÿ¹ÉÿÃßø–¥ÿ¤—´w¸±oi²‹N‰D´šEU¹„`iA]Co^:PjAK_5ªs=“…[Œ›uÓ¼jŠÿ¹uj[zC{pQWnLh=ž‹GÉ•^ ¨‚…ª}Á›i¥¡zŒty—m[[|‹F”F¼¤_x{o’bBvŽO_n”V|˜Ut’XŠNгk—Ža”²h¬wn—fqoHjxAjˆE`€?[yIv|BzŸUf?uu9R^2w[-‡{Gr†Skj<‚i4yŸ[uvC³†R¾ÿ¦¯×±›žv¥°ƒv‹cvaI^yIgp5e‡Mfv=x|Jy|RŠ©fdƒPXo;G\-`g(„šRl™[u€Nl…P|Mr‚J—X‡\nªXŽ|I®±wγnËÅuk›`ƒq;`hBJW+BX#>R%ªjNv¤sUX4TB)†f:Í¢lɦw¤ã€• Xÿ•qíפÿ¾¬¬Òµ‚«nˆœj£e®dη‚ݲtç¯uî¶~ÿ´™ñ¢ŒòDzÔÕžÛ¸ŒÍÆ{ˆ‡SoAŸdgr8ŽkG­gU·ˆjVÅcS–j²˜`¦X±|`ÿßµÆÃ˜n˜ZW[,nhC|ƒUk‹M^~Bvh8zŒQW}<ts> tKoh9jP9dQ*wsCDd.-740MU,c‰Mz›SŽŽTÇØ†¸±—c‰ŒT|^IÆtoÙë¢Íò—›¦e¶®iÉ¢uÜÃŽÖô•¯î€·Õu©£h¤¢i¨”T¸ÇdÀÃjž™d©šY£•aÖ¹‘ÉÆ‡¬¨u“ÉfŽ´[›šh´¨bž¦]}žSŸ`‚¡XiŽCf‚Ce‹Fk—Gw”VwœK_‚@e€I†”Sl•HaŒEv”Nq’L†˜Vž¨V‡œ]Ÿºwž²i——c†ˆRopFŽ[N¡yW“tdœŸs‹£c–Vj”O‹¤k‘­Yc‡=j‚:wvL£™o§ºk¿aƒ¤l¥´lœ­a¥£WuŒ=_†?h{NuŒZ~ˆc~™c{“Vv‚UŽ}k‘Šj}^€ g{ j§`jGj–;gIe˜\}§f~ª`ƒžv©Ïˆ±ÔžêÿÏÿÿÚëÿÆÖÿ¥²Ý”»Ô…¬µd˜±ƒ¨Þ•¸ß½Õ}¦Àu›Û„­Þ|²Ôn¡®X•¦X•¬`­Qt§Sr¬]ŽÆi›Õm•Óh‚²UgƒQrKs~Cj†HsOuH„¦sÂᇲÑmu™Ed„Ku†ZŽP|‹FntEhmGj}WˆX‚‡Uvfzm˜–b‰¤_r¢Xe†F_tB[iNo{[ƒ’e…Ÿm¨lz¥afI`‹K]‰G^…\n•_}ŒU{zQw~CbnJcuKjyPryU|Z…ƒV‰—j‘šiœ‡_…tU|b„m‰—evCafMewdDVAeH5sv59}O^SKrU*[c4qbEh[@XgBReL~]E_„:D‰^RaNyf1xp:bSdpSshEskAuTq„[„†Yz‘VVŽVGl[U\>YR%dL'lQ(•f4xv=woG„o?›‚GU§ZLcYYT,YU/UJ-_M3h]8]T4RR3Ad2O]4KR-SW0GY4gb6‡t2h‘Ia_ltJe^=ZkKblF7}J6JJO1F_!U^.ST*xH*vY/9sM"F7X%Œ\ ’›E^­s/^`5@6+H$96-Q%;B&4T!'C%O1Cm.ao=‚„5‹½[n·p€¨xŸŸb^žsRbkRh5TTAwK1U€?MYK]L7ec<½d@•¦Su°ŸZlTlL>hb?mnO}a=ojGŽaJŠ¢VOŠehT>LCWcBad4†K‡¦f‚¸‡~Á~Œ¼q‘·m…»s~ g^‰\+\O@/0PE#~e-Mœt:_9EM-VV#ko6£ CHÄz9R=HM1z`0_”SDRHgC-‘‰=h¦xq‘iWšgZqEhwHewMFzL<L>OH+tb/“<`_lYFx‹HYlMElFs@¡ŸZa­‡unW}]Fb‡gŠhD°Ò\°áŠãë€åèš·çìé“ä™—Ùz„¨~gÀy«™T|¬oGs[e\4`‚>Gj=MW-¥n:¥²|¾…c¶‡oÿÇÿþX~rwzA„ŠQ™£c…cÖ„J“­uˆiJ“vP‚™auzH†uOe{cuzEˆM~aEt|E_j=‡‹Hz”VYgP\F3ˆ{Dj|Y³–OvƉ£†Rz³|e|IvU1\lBXj2[f/Sy2uzCyy_t–q[¢rWzL^–X`Ÿ_ »eÍ„iºpSx>uB~W°±e’²mgJ‡Tp«xZEŒW;pnC’^vN]p=­f@­Ç“k¯z…t;ª§|^~L\…BƒMˆ’grGiT{›ZŠ„mX^7mBŒ­t|‘V•ƒGÖ©|ÕΓ¯_Œ†T˜ggyIRj5Gn2PV+GK(g_?”oS¡Y©‘YЛhÝïԥ§v¤œj˜wMµlÿÀ—ÿ»¬ã¬ÙŒz͆gⱇ׳̞jÀŒ\¢„c¸›n¡”fª­qÍ…c½¯v ¤dˆSx™[¦ƒFÑÎuÍ«f‰„Mž{Fš‘_Ï…f·“f¤“jÿÁ³½³ˆr†M^z8•jJռޫÌmjƒJdn9x|Lh{Cqz>}x;me=iU9dP7`\5EI%;:48>:#™|^ÁÿœqŠI€”Uig4•M‹SŒaˆa¹µ†Â΄®­n«§_¸¥dذeº×wÌÖÆÛ‚¨œe¸©d¸­b²Ógľc»ªZÎÂa»NŸX‹OІU¦Áy—Ïa‡T†–[mˆGcm3n…<u‡Ho†An€J~^‡ž`o’@n‰Bp‡<mˆK…ŽPo¥M]‡A^q6ƒ}@œœU¦­bŸ¤e¢¹¾³o¿›h²Ÿe¢žbšªZ§«]¥Re‰UvŽPnwH’\º¼|ÞÒ{—´[sœEŠŠN˜›ZœÅfÍa¤³e ¸j¬¼w­Æmp—GtŽGdŒM‹c› `Vx‹R|–Wl˜R‰Š^žj~©v‚¤dl–RbƒEe@c‚OƒŒ]p†LatMiƒPp„N…kªÍ©ÐÿÎíÿÜìÿ³Á܉ °e…ša°{¢ÂqŒœKwNŸ}¾ç–®×u°[–°^˜Ám”ÅlŒµo“Æg’Ïj¦Õt¯âu¦Ô{—Äw‰¸uŒµp‹¿aƒ°T~²[|CtœQƒ­c cˆFmIl€ImA_t9ZoA^oMi|Wo…XvƒWuˆ^}‚\{‚Sl„\s[o˜Q[8Mq;]vDo~Ns“^y©rzŸgyŽ[jPdU]ˆYiŽap‰Ql‚Of„BTs:Ri?YfDc~Wn„[{†VƒU|‡\†PslZŠ|f˜—cŒVqJthdq‰}g_CkjAMvM6_MJWD8H':?'WA!~[({c=dnIzt^_NYwmWrKiw@x{Ao…EhˆIg‚KYjJjeBruGp{NevO[uMMwN@pM9M(>CFJ#_N"gT%ŒW+§d3ЇHKd@bWGU/KV*DS1XI.^d0hm5dq:P{GDjDUV2_Z%g`1vyEb€DaeB_oANvNg]@‡j.tˆCC‘_-aO/A%B(GP]S){Y*jb0Sf>9[4T`<Qw9PiH7cA1B,@@!=I#6W+;A;Z&:U.Hd(V~5[ˆBc~PŠIнf‹©uƒ¢n?{lEAR[M)Sg/T_>P4UO[XI\h6MY?_G0¶Y-žžSb¥’b^[}m>kO|Is²^ŒjžS˜±lÍpmªaZTv‚KrœYr”p„Y€Ž`ƒcx¨kO™jF\UGN1<Q6FI)Yz7†‡Ga¯jSjLNr3]c7‡]%Ér>gšcO_[pMdyGE‚E2<2f7Š„?r”v°qYd͉T…cl{HS•^WwIPe5ee4Nx/L]9Pc1uc5NoOdn?zpH‚YJ’sHžo”`hmUz}B»šC°ð†áÿ–ëÿ¯Æÿ´¼ï™‹ñ‰Æ²d´à§À¤žÂ}g¡‰kfJS~BFZ>N^$BT/xz2§‡JškX‚zN™_>ÿ³w½ÿ΅вH™]©’hw‰gœs;dwHsZF^P@sg;•sF€wYX„f{‚BsqEhE`p@fu6|M0‘H‘\B΄^œ¬^|T™„Av™s†K^pD;[)F]%GW,Nj'cn)k–NKwLrf5eoQjQ+|^(‡oB ‡N«„Z€œ[¸cl¯vmtF¤¢e‚—nN™er“l€z]_xSmd6f|?‹L1taIop@”~T‹µƒuŠRžaЉG—lEŸ—q°¥d—•lz›g{{KpƒX]sG^uG¡†W~¯z€ŽUt‚WÛŠQÄÅŽ~˜pxž]xRZw?‰tCh~PftBMl9rh9pTº„Y³£r ©n°—WÛ‘r¿Œg£Ša‡—`Þ¨k䨊ÿ¤¢ä؟ٸŠÈ£gÀšb›™c³_¹¨j”U¿b®²q¾‘[«šj‰yOˆ•QTÿ©qÂê§Â~[Æ¢k¹‹fqs@wrLŽ|NŽvRžkê·ŠŸª†…‡Y{zQ¯¦fÿ´ÅÏžeBkV1dm?\o<yx@o~?Qe1xR3ŒlDPR*L?*GB/]ƒO[‰A‰LÅÁ{i‘IpœQržV¡¸sÈÖ˜®º¨»¥ž`°ÃwœÐ…°Âo¬¥]¼¿cŒÉU µS¹Ât¥ž^§¦Y Âm«Úp°Âa«¬hºÒ|¾É{ÀÃ|¬¸j”£T¢«]¥°cŽLt€K|FfŒ;c~B‚“T_=a~7jƒ=‚?au7av9j‹H{§cn“b¬¿•½í“t´S\’;ƒ¤W¢Z§¸xÂÁˆ´hŸs˾p×¥nÊ´j±¡hª`‡Z›•e‘³_‡ Xž¥oǦg„•L}šHg‘?š•f°Ât©Ø|œ¸mžµqººsÏÒ‰–ÁXqSuVs‹Y‹œl‘­Wr‡Q¥œx»wžža‘¡l•¶t©e‹ `t¨UrQd›Xz˜ZmJixOh‰NgŠIN}Wˆž‘ÆÝ­Øñ³å´fvšQt–a¬g‚œGYk<irQ{Ÿ~·Ô¢µó¡ßv­Õv¹Ý}ªæ{¥ÛxÏtšÍdÁhŸÉhÒu¤Ö—¸ñ¬µÿ¤±ñŒ«ÌpŠ¥Y{JnzR…„Vy~Qmq;dv?btGg{HdˆNdxRivXlŠ\p£ku£l‚`{Š\w…Rp‚Wu‡Z|ŠKx–Ec“CdŠG]„Lh”^|«b† UeNW‰Uc‚cs…ZgRnˆ[v˜c¡To”Gd‡JZuLg~Zv‰`z…LnuFfqFkiJ]hWsw_|\y‡\j†Tm…p—‚b^=[b:@[D9KB,K/%C$P/ZFYc)jW:uL4thDX…\W]_[hH~`Ev{D…sNƒ€Kq•U]{Ydl>[q=dpAafGuhAh¢X<~c>X=HA%ES(5I6HB%\Lre)os8ikLVkIdd<hq3[{DbaAmn8“ŒFsŒKb‚gEfTNV:hV)ja3Ji;KU8KT-i`.Xb1JpNd[7d_*OvJ/kC$H;:.I>FW)iO#T^%Qp>io4p7zˆCN~P?dK5S*F8&LG!6c%;O*FWjl'‚?…±fw¼sv m„›`u³jjk]—c9kRKN>M`/\g6ob2€=Z™WgZCaq7Y\OUV1h\9À[5‡©RŽ…„¹•P¥i¥žc§ÅtÁ€…¾x˜£a_–eY~Wj@k‰ILPMrG]r=Qj:\bE~i>Ž•Ga¯jf˜ah•Rc„J^dApbFG“UPnKI_4,V8A- UB ’a1uƒWdWhrX\“T_‰L~‰Gv™\e–if‹_€[<X®`n|hd•[L‚\JHA^e.a’;AfD]u:_Cm‰AhwIm}SjS†“O§¨Td{{d[<W”Dv5ͶUÐÜâÿ•¹ÿ¢ÀÚ†‚¼€†V–¡o¨×b·ƒOuAfp*nI9†JDU![f%iyCWwIdR;j‡@—J­¡[ÿÿŸoÿÿ£—_®’jrrg^TEqz=hwNwQ6ZxIpY7e^<”pCrŠl‡N{uGgk=ZU2QN-v2‚‘T}gMžH;Žeh‡Wsk@`yAOv:Zi@rs?€•^epRRw4W[,Nm:Gc9`d7HT:J@#`K$_d4gb4uUstE¥TfŸick=Nd:Q^%iwAtO}ˆWˆ}R`—jhˆA]mCVS3\N+n2™e¶«˜x†”rŒƒT…W˜m?Ï·}Õšž²”dqCgnBOa8{fE‡®kv›a‡wM}mNšuI¶™oqxR—u?uuLetJzBjˆLLnL™’b¶“eƦs´¯p¥‘`“[ª…NÚ·x»¾zÂÔ–ÀÍ•ÏÃ…Á¼ˆÿ¨â§Æ‹lÑžlÏ­mŸNÉl³¨f§ªW¶\Ï›\º¨s¨¢c¸Œ[³˜\¸‚Q̧p’§j·›]Ÿ›\i†H{pAЇXrkE‹oRŸa°¬z¤f«‹^̺¸˜`ÿ‘…”ºˆkpN|jIvpDv]=rh:€fAm†FxZAu“Nk…Gp†H¥–`ªÅ…žÉuœ£Xv„Cÿõϥ꒖…]…zDf;¢j:‘’M£¬pØÐ¤ª×† ÝqÕÃ`“¤Qxªf¸¿–¹÷›”Êj›k±Ç‡Ÿ¼jžX™h¸Çƒ¼Õ„¥Âz–°j‡žW†ƒE¦{[ ]p…OzP€›M†{Ne€E_Ge@q˜B~O|¹fb¤Qq~T†˜m¨g—¥dɶoxœKn”EœªeÁû¸~ŸÊz‹ªnÛâ»Ìkº¤Tѧm÷±~á¨oŸ¦o©¿²É•±c€{N|“Mh“Oe§Iƒ¢]›À¨½†°¾|©Év¨½xÒ±~–›Wu|Bw|EyxU›žlŽ¡Xw‘Ušd²£s­±h˜ž^|‡Uai=R]7fwDƒˆr¸‘y¼gn–Uh‹^q’aužh‚špy¦nŽt†—t›´uƒ´\s›[‰³iŒ±hlƒFezWнÄý«æÿ·êÿ•¹¿n¢—d ­gœÉušÅj”¶f•¼\~ªU~¡`‘ªuŸÃÚÿ×êÿ¬°Ädv|Aar>WnBagAm{OtGaj6R_9`oQ€Žc‘žh…k„Ÿfƒ§n”®}š²x¨dnšb{™gt`t‚PluAan;as?gsBfyJo…_|—XvŸ`p¢`sž[tš^f‹PhŠWp‡[…—e¢e}žWm‘QbTcQx…VzJf~F_qKnmNruQ}†[wŠl„–e‰•Zx‡fusKZ=BU62N2&>1-=%+:A1LAF\4IL7eI.bg2X}OWcXd\DvE\qJfoOh>Y‚LbaSh[7gl:otAqs=‘@S·bLnzJa:QR-OR/CD0HA/V[3Yo0jj7qp@WrCjpQtn9az@k}U‚KžLt„UQt]=fLMR9VO,EL/5F+HF'ZC^S)Yq=Ca6<[<GO+ZO @o57eEBP:@J#FT3Zg/iu>Y†@PyQUe0Po8;a76J./B E;DU%N_-Db2ZM#tn.z£Vƒ¨aw¸t j{­co²syžmZ†fRmPZhJTFPr>b]1~h-YH~tMW®]Q^SIW6[Z4h1¤—H¡Ì†Ê|“–yŸ§]‘»}w³vb‰fN|OVx@au@WxKXyVc…NJ|MJ[3<Y&LT/^h7ck4bpDvE`–R>TVSAcc1H‚HBQC?Q-,7%.4:,‹= †ƒHJnVuh7m—LxmPy‚Wi hOahvBd{b›_0g³}I‡k4fE;8,b"k•Cƒ|O°•NVŽ|CZ>X;,zj6gnWŠ]:‘žPa†mm_;x…B¿Ë\²ÿ¾Ñ‹ÇÊ{Џ‚n’b†žC—µ]µÃqº‹Nv?Rn0kz2Ol2JW.?]+hW!x|@q|Ho…MvpHMS>£Y5ÿëŒÿÿ‹y_}sWrUAgtIp€Im`JQiHGH9kT(sR0|MyVW}IRJ*\J-dK/€O8Z…~ONLBi@'yOR|PLm3Sl5Rc1];+oG+wgAb…CKl8YsHTuI^tC^šPVlAr}Ne~Q]j<fw8YuFXZ;od3JQaT/\r5Lq7bg.‹dA\§qpf:[‹OXqAYf>`i9bEkFº™\ž¥uÄ£ow›jvpJ€oFšwJá­†²~k§iŒzQx‡\‹`®¬€Á·|±¥w•o‹mBuP{€D•k>ŒwDvyGƒyCjxEiyJŒyC¹„T¯¢eœT¯’[‹©[{‹N’O£}g¬Œc›ƒRª«~¶­~ǦyÅ™r¿”kè’„¸©…¬ŽlƯv©­rœI®¢Z›¦^£[²ŠJ¹h¿˜lĤiá]¬á‘¶à„´ÏxŒ|S„sSwjBh‡B°˜g~˜Tƒ‚K©rZ•™t©_Þ´”ëÉŸº—k¡‹c‹g¢ePˆi›wPˆ§hªÒšÔ…‚JqZ9©}g¾¶´Þ ®ÍŸ¬½‘ adw5nv2ÿÈ¿âÿÅbt<am6iyGƒ}M¥V§žVw{DˆzHž‹S£gƒ£Pš©nßï¼Àá—•¯]^t4eV2tp<mtBš‹n¨Õw•Èj‰ºl§®f–›\Œ•X’²d—¬k¤µgl‰KopLŽ«f¨ÙޝòˆˆÀX”½g„Þw•Ö«¬õ›©br…It™Xz˜Vœœ`Œ¬Xv›I~¦j¹¯‡©—n¶”q›´d¼³~ÌÍv£®`°µuäćϲoðÖÐÈÄ¢u»¡d˜…N’Y£xîÕ–u¤H‚P’”e¡©n¶Àr£®bwŒR‹zA€‰I‚V‚I˜‡W•¡Y…¨c“©a“™[ §n¢¬g‘S†€Fp†In’Zu†^Žb”‡Yj‰V}•p{˜\ovMqvY‚žf†Y… i¤ËÖô‹œÊk†£n›¨hŽŸg¦Ê“Äü¸åÿ¨Æ×u‹‹HS\8:H0FM=q„W‰¯U¦T€£V‚©QwG[¢¼‡Áä Ð䇞¹Rh‹=Z?[o7ck>oaAn[:UZ9UgLj‡\ˆ‘p››qŽ“`‡Š[Rs…_†—oŽ«vƒ½ŽšÎ‰‘Ë‚‚¯Xq‰Jdv=Zr@]pAdv@jƒIv¡]†®f|¤_l˜ZdƒNf‚QpStU|†ZWŒ[rŒMzƒNnKn‡No~OwŠVr…RiqLpuSs„\Œx —|Š˜cyˆYhyZWN<VP0=R1(Q00:&;B?A>CAU,aJ*‡N#cq;wsUofMhJŸŽRyvWtc€MWŽ^]QWVL8TW,Zb2^2Ÿ~5SÌ}NzšL\B[S+M[*fM8uY/lj8`dB`a:Vn:Vo8YmAqh5|…@†Š]_wUVhLQU?P_/Wp0fl7RO96D62?$ZC gUg[3fW5Vn:Sd4=p>ZM+bi&QnAQcE\j4yKœ§axÒyJ¬p5jSND*Do/?e54X):BD<=< 9@,0R+I5bUnl7u{LgQsˆ[†ŽO{®g[¦zPh`TW9cT/btBVsEPe8a^(‡f3‰GxÆqwz}orA‰€D¡¯[½Ìs¥´|f¦‚ukd‚šRj•iI{]Wa;cr.X„EXjK_w?[‹Y[V>ˆ`ON.I_9U_6Rv<jn3fm6kA^—GZu>OMX^66zA6B6.L1/,2/:"O4!—P'sFdoMgw<duC‰‡Qtj_Tr^“N4RºkWcD€e.Q´w<vPLU*o$CŠZn\=¾‚;V–pDm7_h:WS8UG1yU1z8[“nWtD{l=ð¬T·ÿ’€¼…€Ž_{ [†šKœ½Z¸×rÌLxI>YWIW~:pY9cpE=^4W_$j>rQ@Oh@ag+ph9’jEÿÈsqÿï~~ceƒTtc?`}Cvf@asK~aCksFRxBŠm8Ž‹`ƒ’gc[Rr?ce?zT;ÕV„œ{…ŒQiŠXZT@uo7´tTŒN…l7–ƒdUlKlg)aNTo7YoCZm@j†Mr~<gvOVR;YN/‚c5haCczQrBb”e`v;Js;Ie6Rw=ga*jxKpwG—™f{¢vp“`9mGRF.OR2_n0oG-›rQ‡WQ·wV€cU‹`U~—g‹™b« z¾¿´±‹šZ–„]ëuaÞ’z¶—y–‚[x}`nj<¥Asœbi~FzyHŽŠRjŒLlˆB|‹RR‰†NswF˜sMzXl†<m~4¨~?Æ…PÚzW̬ìË—É®{Ò•qÄ—zƱÀ²…¹¯uਇûØ™»ÔŒ„›[“‚G£©a‰²a’U€~C–ƒI»‹[”ÂmÐÅt»ÛЏ•f²…\«vR‹ŠIæ‘k•°oŠšjŠ]œ’h¢uU¥xSÈ®‰ØÞÉŠí¼_Ÿhƒˆb“¾Å؊٫„Âäþשÿ׫¥ž_¨›e’®~†±†—½œ É©Á{¬qtJps=ÿ£•ÿÿÿƒ–^™\Œ—X££_¯£`’§Rl˜GvzG–uN½X¿ªaЦZª¼u­È‰¡S{Hbn=gvIŽT‹•Y‘ªS—Æe‰Èf¬jp›Opl8“ƒWÍŸs‹W‹KqJ“‰g¼­€¹Ö™ìsƒ·iÊçÈêÿöòÿÜ›Ò|h}U|­o‡±j‹›V¸¥b~¢U¡¸t—§YšŽY¡˜a¤•]„™L¯˜b¾²s¶°jÒ§r¾´Úö§ÍÍs‹’Mp‰BiƒC|£Z‡¤ev–Yg~=eq?m„X®t¢¼t±¶x·¬oˆ‚H||I›[•”U}–Z˜U‹UŒZŒ”_‘‘gª c‘›Q‚“Jt›b®Ç…§½bmŽQVD^†Vn›kŸ¾€{¸cz¤i¤`€­hŒ¸q¦v­©f’©e†¨e}¤\­Åê±Üþ¡Åꃖµ]uUs‰bw bl¨by·p~Ío¼l…½o–Ìs‡º[r¡Ow©aŠ´i±^yšQc‚Ba}C_{:YT2GG,AL7OYBapJvNg~EimBrpGzxM‘ŽS…‹Uoƒ[v•~–˜¯Ü›¢Ì™·nm‘HayLcvIerBe}AdOq Wj–Zošj¤^nŒRf†Ul‘[rPhd}Uv…Mv„MoQyŠTp‚RiPfyV{…Zx~QctSs~d…|l“‰¥¢w™škŠN>D;LL';U-'P3/<(<=EOE^ DW2VH'yO%Ok3YaTgTC†b>žƒIƒb‡kQr‡UO‚^Za]hH;~`0lr<w> Œ=XËZu£R_>i_5g^.fe9fp8__2VJ0SJ3eK6x\9‚€E–~O‚—VL€fKQMBF3KA'WQ%if.hp9@v@I5>8>YO&|N_r)PlD\X5^[1Jt;faDl{0h‚BeeOŒa<¨«N Û•yË\œ6uNHE/KT,Ej1/Q)#7#0.9?;C$/G$J7GDB[6R_3Wj(auBay>lpEI—PG^WM_2NJ0Uf3L}AOtBXr/uv?¢‰Gˆ®d{Ÿ~˜‰J¡²]´n¢rvjK~|=¨kq¤_P‰SRjASg/dY)Go9Y[?hw4g”]lŒ]M˜^YdHNU5lS6cm6B_AUW4or1IŒ>Lg=Gn<Xj@>sCFM?0\%*:2(2+]8!f_3S|OON(ug7›HB’lWA?U>!jR=dQ+B€Jbg6ql6E}KPd'}t0V;Qr?†9V™X`SB`{:O¡QMŒLHh=…X*n¡f‚š^}^xZ›I™œ_ŸÔcm­g†A¨‹W|¿xDjS9V@Y!aW/V^=]~AŒh;U‘RN]6V|2U[B9Q%pRŠ@‡¤WÚž^€ÿ±ntmmšZgxKop;grB_jC_jDbZEQP<[N0jf8keIcJYmL[Q1‘oD¿”e‰À[–^B_C=3qW-‚HZtLoC¦Y9gkTZ}<[w6[~8p—Rm_]ˆQo†>p ]R^3‰a2hµqOŒV]h?ˆ¨i±[šib‚K{ƒNŒpc·„vtG‹|U‡¯jišaŽXP¬{<J1NU-p‡4Yq<XuD_m=qq7Ha6se:{zL–˜aÿÕ£ÿ®¨³cmr~RtaDÄhLœt™w_…cŒlyyJoˆG—”E޳lŸ£iššbžŸa™\³YŸ¤|k¯g‡I”ƒd˜œy}•luªdœ˜SŒ}Q‚fI½¶Á¤b’hÀ~X½‘iËhWØwvð—̨ƒ£Žj¢vS—o^|mJ‹˜Ut£T{ŒH•‹W¿¯qÎü¬­ó¢€Éw–œV·™_Ÿˆn‚œh©U“´c„†PuP¢‹Y³Ÿk˜’dz~OŠƒs««§ÁÌÆ®Ôº§Ê¸ŽÅ­¦mËÂþÚÿ׮ܶ}‚P|}cŸ»–‘¹“’±‡sNre;fA‚T:|_4׈{ÿÿÿ´Ø†¾¦¡«b¥¯b£‰[™ŽY…Y‹[ˆ„PŒIw‘Gx‡Fv~IŒrVW–žXxŽOz†Q­’d²ŸfŸ¶h™Êf¯îŒŒÝl‰’U}B’€Uœ“cz„Big?‚hFšOyB–˜hòþ¿ÿ¸ÒÿØßÿ¿Øc~•d†‹du„Y~vG¬‚S’O¦—pã·‹»Äz©ždR}’S‘–\œ¥`·®a¾p–½r§¾£Îwu—Sw‘NwL‡·mŒ¦f‹™h•°`i•O„‡Q’›e¥¹p¹®}É¥s£”`ƒ¢^ªc›«nž¥lš­n‰›Yx…Q}[¡£T|’Px Xr¦m‚±qŒ¯i–«[|‹OgPcŒLWrLvr_Œ™`Žœi•²z¦ÍŒ›Ð‘Âww¬ho“p‘¦z£i„­|ÁË’¶±j––q›­x§j”…f˜Ÿ®Ö—µæ©®Ü¤×‹¤ÅŠ˜Å«Ô‡™Åbˆª^ŽŸ\tWcP_|Gg{CivGTk;HX5@N1EM7WhFguOsrOql:b]8bcD„zYŽ‚V‰Su™k„ª…¢Æ“¥Äˆ•¼mtˆHbqCfvNv’Ry˜OmWqUi˜Xw™e‘”Xz†KhˆOt‰[pe}¡y•¬cNx…Su‹\„Y€„\…Zi}Rz„X„€HhoSirNmuL]sVxj—Šc†R=M;LO-Dh72WB>@58>[?Gj,8Q>>.(RA Wb)[cA`hHs`Fqi<\cGnZ>wqAa‡RdbPoX?€a5giBŠd?˜‚=E¸…\o•WO2iW,o[,[`:^Z?[k=`]:]_:ZQ<P6}tDz{`jaPFTH8F:4;(K7&vL wr5UwMNmJ;a6D5.7FHL$u<"WV-U]@Z\8dh3c{JU€EPŠCImN€V1´Š?ˆÓƒ[±ŒPw`9hG7G+:C+AJ)?a+'G#>6#JS(8R094'@@L9GR1Hc7T_"ek4F{<hX8\[,KsQRd?dg<a†BYwTfvTS€MyxR€“F—šiy¯`~“`fˆ_[jPSm@tl5˜Qy ia‚^V~LUg@LT5_W0^f1al8j…Caš`d”dS]NtTGmOOP/JV*Bi@Fh4Nu5Cn6?b2\e5Z‰KVˆG5cJ:O$A>!6F 2=(Z/D]*IR5bS(€|>`£i+^U)0!:0:9Y6$Sd+Fo7Jf3Ze/`’7KtE_w0zr;›£Q}ywkv>wx@sE—ZSʃ|‚Tk•RJlIZg5Q^?T]*•q+w¸Y\oLrj6|¦U9n[:AD<MC(VU>knGtdŠOLaKDN,gm*NvJ9c.:ONLnc#ÆM˜ÿ­–xzk‚]zkAkU™“^† r„¥peqT^XsHc€Ra’^x‚[s£pu“_xY`rOQX<‰g8‹˜e…±lluWMZFeX&ol+Jq;Vn3Vm2{†=u—Tr{S|€Xn“Pu~=v}NYgAN`?tn<Æ™Z°ÿ¹†Å‡uNW‚EGl2CH/Y5#¼tJ€Ú¶Œ¢ky¼|ƒ”`˜›oq·TtByt>h‹BygAo_BieCmu8kjCpeC´yDÚ…t¾PN¥…s¡i\†¨zji7±`:Ì ‚ƒ„aÆW—žj}ž[jœUVd?|g1|ƒKsŽX­‰Oa“T]d9uk@wŠXvmIx‡C‚˜X“‘` wO§˜l‘‚`z–_~“Ptd@’oKœ˜k f™ŠY“…Q±„L¨m¬Êx§”c€˜l~yNn‰Ch{=cu*~‚6º¥bÐ覙Å{“TsŒS “`±ŠR¯—Z¯•dÖË…žÌiЉ^®œZµ{`µŠgu^jX‹¢p´Ä¡»Ýµ®Ë¨­tf–Ez‰Q¤¾dÊ·g¢ŸP™•d¬¼{x}QwG>yscP]:jYEX`?TD2‚mP³Õ„ÿëӳ剚^‰Q ›U°˜^ˆ˜P‡ƒN\€~H„ŠV‹¤Nf˜Cdx9oqD—{Y¥©`š·c“œ^±“e¶¨q¦¢\«š[³·k¥Ío™U‚ŒYq–Zw†Onx@vzH|‰Gvu:_q@fxG²ª†ãø¸ëÿáÇÿ´žÝ…¾o|ˆWzoJ€wd{¢_H†¦\¤»f¥Œ`ÔŠxÌ®rª ]†‹OoG~}R||R‘ž}§Ò‚›É~š²r†¥YŠ¡_–Q£”n¬`„ŠPš~cžž^~—P…™_¡½v¯¨sÅ®{£Â†ªÕ§×‰µ¼ƒ¥¬~¶®…‰‘m—Ž\€ƒKt’Tˆšg“¥t–¦d{‰\jvKv_u¡ZyždpSd„Ng‹Pq”X|še·—¹ñÇÇÿ·¦Ý“²xŒ¨u’¦z¤n†¬t›ZiyCIoPy‰qª­u™œgµ­ˆÆÚ¤¼ÎŸÇÕ‘©»ir}Uz€r’¢kžUtœO{ždqŸgv¢am¥Rx’QŠXzŒP`rAC`9HX=\[DkiNn~Iq~H[l8]f>lvMuxKp…Ke†Tp“f¦}‰·vŒ¡]x•Gd}=_{Prœ[yTvœRn‡Rs‰R€„OyvEep;]qDb~VjŠd„¥k’£f…—Ww“]yŒd‰ŒTwwXŠ‚[v…_ƒ…c‰‡SxƒX„}PvmEhmFhsQw~P|{L\S1_b5KuK4Z[0<895 _88n038HH;+`K"br7ƒmEg›NP}UQ]EhO7im3}hBcyJV]TSQ<SR1MN.{S0—p3Z»yQ{–GW<][3jd-in6ub:yv@hoF^^Nd\<f:”Lf€bPUS;:3=5%I8 RO,e],|n1Q{EL\REV1MU8@Q)EW+IO"UA-ZZ/ftBa€Ca™G~“FW¨La|b}9—¬Qp³su¡v^«f?‘l8R=C:*KI"Af7YT8dZ+Ih@8Q8?F,@P"LB A\4AN3Ue.[s2B{9B_1eB#YjEFX;c^;Ng3?jGMN>^]1wB‡CŸfž«[ƒ°y]ŠgW{Oo{?‰ŠF|…Vp€[n‰HulG_sHgnG]xKRrGpk@r|Dh‹UcˆVU„kU|c=sCIQ7Oc3UrJc‚EYKV†Wf…Dk¦Y^aYX=iSBM)CG$WC!2U)Q8&[I-VWA‘†? ƒMH’Z;PG=U1>L'6D%FG$Pb%Ge1Xp4Ts7\_.Fi4Zr1„z8€³dWhdKv3so9ZvFr{J†tI‚§^»xa°oM|O>Z5?H$tm'N:;B#|n.@}P4C)AD B@0<E%TN*Tm+ia6JMLk8HR1[p9Dn);Z$:GRSmj(æ“OÆÿ¤m¤H{QO_/L]9t]*znCr\Bk`FoVFsd=‚~DsXDZR:pR/q¦UO¡VxD2}a;•oH›ºtWzhxX6c[Dh_7HU4Hb,EY'<]$PN$Rq3Hy7U~Ea…JkŠF]š[mj<^O5‰X<¦¾sšn¦”Q~¤dT¥kdw=g‡PbvHi–`¤”U“´~ƒ´sx•c•’kµí²`™|–‹Rº_ŒsX’pYuqHi~J{[8r^7xl;yaM~eQuWIÿˆg§‘’yGÖŒe¶‡pxP|=\v:~ˆH€‚VŠnM‚X¦²t¸|Z‚Ek|>f|Aaq>tk;[~G˜‰A‡‚P„gI‚{I¯¬q”–[…’VŽVm€Ltr@²{L¤‚^¾€Y½¡eµ–hƱ…¸Ä‰•¬l•©_Ÿ›[zQZ?\o.|œ4Š¡Lž¼olŒP}„N}Z‡yO†„IˆN…zM‚rRkY@ŒdA‚\B”Oœƒ[~xNqŽm¡¡‰ªÐ­´¦™ˆ˜x|oQncN~\BËšb­Ð~Ķl–¯d†ªcD~;K…Kg«jM€?Zh7gpLu¦iwzR¨ŽdáËÅʆ´«dª¦e——Q ¢U‚K”¥gÅÆšÛ‰jq3ƒ‰M¡ÃsŸÖmžÞf•¤P—Rœd¾˜k¾¤s©y­°i—»d—´g¡Ñu·¾u¬¦v»Î˜™Ìpn‡El?‘’Lv†Dˆv>{|E€ a»âŸüÿÝÅÿ›‘®f€”Pqk?wgM•bWÀ‚a‰¡K…­P‡¢XrqEƒ^Ib[>r^OŒvY–c‡‚Zo‹G–j­Î‹°ÌŠ¿br˜XŒ“U‚S†§m•Äpn•Cet7{ƒPˆªW‰§Xšœm©oÃÞäÿ°ÉòšÀë—¶È„¼“r¹¡{œ“s–‘k•›T€¢o˜¢m•–VhŒLe”O]Pl•h{®qw°gm™_p›fm]zZƒ`– ‘ÇñÔîÿ˺쒉¸s‡ªw–À‚¯dŒ§mºtˆ¿t‰¿kx«h„—g¢ j™¡q¦ª|¡£w–¦tw›`]Œ\fQWw>M_2Na>n_…—aqœWƒ¨YsžHs‰T}‘[n€N`zHTg6KJ0DI9QnNc–YZM\€@ZvHZyNSqOhš_m±Wi—eƒ¨ls‘Iv‡BjNu¤ao¡]e€Lb|?Ri?QsM]‡Lc{CZs7Od@ZzHd…FgyQtˆgªqš¶v¨ršŒXqsFh|^Ššsœ§n”œV…[ZŒsFmmHflMp{Eql@RN-TU52\B/DG18*C, g>#Pk8EYGYN9Qk0Kf>pZAXm8PfKW_E_V2eo8ekHUsKMQGM`<Ck>XD,wU%¤{4XÈzfœdqP`oEtn@u„;z{NosMjcVhRA«W9Ë‘Nu›lVjoCLF,;-<*"D+SA!]r0qs=PmFGZMhZ5[r<O\?Ih3ZZ0|^'‚Œ;µh…³`…³a€´_fcuwQ‰”>«g–ªo¨¿ˆŽÀ€VÀ“*…i2/0K3dN&ˆxAxxNE}J?L;CO,@J+K;$>T*EP?]]'\~4T6Pr@rg3=iHDD?JW'^P,@l8R]A^]5iqFYE²oA¬¡Aƒ¿‰ulkO^ŽT\fNhrAuˆEh~OfZ=kp=oaAanI`gCr^;Y]8]V;aZ8fqRK}VPoTO_9Pb1N_9RK9YY3Yf>}o;w¦Y`¢fC}R;_EH\)KW(IY9Vd2N[5E]?]Z7ˆu>S›g@K4BE4GG(GJ6TH%ec*fc3wv9P‰JW{EcˆIi—]k£UdL¦sE]=oR(ylC_‹Q^€I}xFtxE”t<p®iBX7F.LU%Vv-Na3d|5\‡F,f?//<8:A&@D"7S!UH'Šm6f€Sr¡VfrDT‹?Fy3?]&7OdRei6‘?µ°Yž´s‘iknPV`ERX6l]3jp3yaHDhN]L#„yB^rbK:”sK…NQ€—UEtHs@+›‰KÕ…†wS•pFŽ“f_ŒYFlBP],]e2po;nŒO}£W”·_œ¥g®l¤Ç{®ýŸ~ÿ°e`•š\c—m[uDDq1DS%MW"ap9šŒJ¦·z áŸpÊ…z¦O…’Q€f€€Xÿ™€äŧ¤W—³koQ{tH­lM†€a}uCy—EvE®{]­°‚º¸|­ƒŸmƒM·{‚¦wzˆRŠN`l?ŸrGw£ltQ¬{ÉÇšÈÖ¨¨…w³‚j‡VogCzMcaB^5i‘YYN7dC:ÍxbËઉ‘f‰{U”‹WwzA€„S¤{L½vOÿ”{–inpDhNxYž¦q°t‰’eaf?]i3|£>¡”Xm—Udn:^b?rT<‚fLpƒMjv@qFnafU<]V@nZ:ª›dŒ¶hsxLφUk9phBD‚;31/->?'gk7ge9qt?~`8£pc…­e]t>‘¦n¥Ü”‘Ƚÿ¤Úÿ£Úÿ¯ÆÏ‡Ä­„÷Ùµ¢Ív³k¬–f¢¦h¢•f”Z¶­¡É~xDj€@‚¢e´æ”åÿ¥àûŽ’½[ˆ¦]¥^¤­cÁ·f²´_¦—V—X‘“W ±g©Às¨©]‹™O’“Ts~:ƒI„‡Tv€PVfBcyNŽk¾ü´Öÿ±¸ó–m¸hh’Qzm?ªjU£‹c”£Uˆ¹Nv¢M‡zR©‰ož¡nµžv°¨€ŽwWž„ºƒ‘š`|•`œÂ{Æsˆ°\k”BUu@t‹b¥Í’°ë†} PquDxŠR[„?pzF…`œ—sÄÆÂß‹ªØsž«k§£oš¨n©¬{ž¾yž³h‘Ÿb†`€ŒYr•\z¬w‚ˆ⠘ݠ—Û”–È}‡»v¶m…¢e\{’[~š~½ÜÁâÿ¹Äà’Àu~¤tˆ¨}“­y­Ã˜¸õ¨±õŠ‘Ív¬·z³§i’[~Wœ¦b¤¬n›¸“ÎæššÑzn¢e[“NK†M@…IC‚O[ƒNk{GfŽOp˜@cŒGmŒSjŠXr’gt›K[t>\Z~­Š˜ã ˜çˆ†»qišXl”bg“{˜Â‘²Þq{ª`t–T^s8GS4XnM|›c… UhŽC^ˆAStAUqIYwI[n<Qg=NjCNlLZG^€JeŠ[€šf‡œa}—gŠYz|QkW…c’™`“—[‰…Y‘—_•c„TusR‰nOos?.K1'9'$3!9%"2<#BA)ZD*[m6L}@_VBO^8<f<@F:H>)FM,YQ+b[,gq9m{CMqMdQGX=>hHUO@[,«Œ<YÑ…Qt³RaLYg?fw=qw=mQhtNdkLˆg@ÞwDŒ¢Tjˆ~d^YC\H(P6-#$:,XL!]w8]‰JZqI}`E¡;t†Ye{TTyDJpB|K*žn)}Äe‡¯v³^lÊl[šxupQ€™L–[È•V«Óy¡Ð£tÄ”8¥€:^O]L$te0kƒC\‡X?€R5Q<<Q1:S4GJ+QN+5a<^C,Z„,e{BbxA|aASV=K_G@^<:P/JH/Q`:NZ4Nh=Wo9r|5‹|?e–`brg^…JStV~IžUamVXwDJZ;IZ.KQ,NF/E_=7N3E9$\Y)L|>T`:Oa6RoA6d7NB@,O'.3!I?CR*YJ.\W3Oa?P]9Ee=Q^:He5HM5PK3HU+FA4OS7…e8M°[nTAQsIScN[h@ZoDKmDU[.Xj,†DŒŸ`‰ZJycYF/‡}:]uk]kFYg:QX@b[0nLbvFLE[g=vw2:\J\5T{9Ju3]f)lŒ;7oA)6%22X=Ga)7S%EO%Hi=FG.hJ+gvETšSPGHY5C_&=T#GQ(Xy5[u5›‡BÏ€^o¾eB„sYarWhxB†„JŒ{SAL;ˆA%ôVWcq²\9XhQI6G8·[€sC¢©\z¸~±”a‘œ`lžX²zE·‡mcteŒ_3icjk?UZ:b\/jsEZuC‹|@×Çtÿ¨…Ùÿÿ—ÿæir_‚PP›_Wy?VQWy4p{>„˜ZngIt‰P}ŒKdšWQ˜T‚N;®œdíÏ”þÿтʙŒŠ^z„_štaµ€]Œc°°`³Á‡·œvÇ~Ò™~ÌÅ¡œÑœ»rÖ£ƒ¯Ád{mFjX1{sSzŒQfŒMf9¬kN»]KmwN¦SC}aUezKepCN\5aT7‹‹]kmPelT¦háÁ˜˜‘[xvUº}Q…‚Tsm?{oB®‰Dè²h«¯~e‰Ob†>x•7©°fŸ¼“p—en†L‰TŒ•Kjv:]u:s~?pzMÊŒe×Ș–ÕŽp‘UeR‚wFšZ{…Qƒ–WŒ]‰ŽT”µdé뺙þ©‰¾_h³SCZ5hY<ÿËqÞÕge\8]uEdŽZo…T…{Nk€D¬ŸsŸ¯{œ›hÛÿ€Ú €ÿ îÆ£ýÞ³’ŠV¢–^¸•cÿëÀñÿµ®ó”…®ešWy E¤ÅuÇðÈÃ|×ÇuÅÔ€€¢Q¨£qÓ䱷㎜®h£¥Z†•OŠ”P¦R‘S…P†oEu@kˆHOn2Yn1^q8DN(TC/eVC“^Q´«{Þ좭õ¥¯Ò—°´|}ƒKyr7r†Ax‚SwrEO™Z¨–^¹¬}½¬ƒºuÊŽs™uׯ‡±“\‰|W­©v޽ci”IcƒF^‹WŒª€²Ò›¹áƒ•­Zz—V”cІTq†Km‘e³Ì†«ç}¥Ït¤Ò‚£Ã‰ÑÃŒÃʣϗÔÓ–¸Û…–·vx°t†³w›Î“ÁúÈÜÿÛàÿÓÄå¡±Ç†Ž¬l{›b‚¨p‡²t—´l„\†g¡¨…¹½‰œ¹u«h§n‡£rˆ«{ž·Éâ—¸Ópޱ[uT“^Í”X§œY‰›b–›c˜©‡¶ã§Àâ–«Ñ” Ð¦šæ¢ ë žê€ÅbWl5[s>n‹K`‘Blœ\¶n–·r™«ZsŠLo€Zƒ‹®Ã¢¾ã¨­è“ŒÅhr†`yŒo–¬¬Å–´`h‰OSb.DV5SiF`‚FqKq—Po™M]‚>Ml:Rt=Uh<Ji?Qs=QpG\Wb†R_Ok‚Yu‰XtR{JzG|}Hc€IgŽO|KrŠRz›oœÊ|¤Ák‘WipUŠzZ%J<'.)*58?DM#G^4JS4KY3FU,WG/EQ%3T0.D59D,NL)LY+WO3jg1mm8cu<pkBSyFHWCQX3„a2·v0U×yTo²OXEdV6hn4{Kc”N^tN~qLuG°pO‡zO„l\i\L`KJ@\:IM-]K(oi1z‘BY’PigO”cBs—7e“tfiUa†NE‹SM^BvY,ƒ‰4Œ­X¯»a‰àxu¶“f¡bP|_\O=¤].«R¨q€¦ƒVŽhKfJFW2[Z5yEl¨hH—ljiRaw>e}PXrM=qK5R=`?&ep'b~SUh?L[6bP-LP2@`BGO,AW08C,KI$Lj0Tl5do8n{9u†Ka”^]}PqBhŽSgbW[Z:OrA>R19B*G<&YN#Vg2AZ?LO3Vd2g`Apd:PŽDJwKBh;3P=H? NU*Hh9AU3LB+;b-?P-=E)AU'Z[-^Y<_`;RT8Sm1PX3V\3ug;_•H¥w\“tTpcFkgDYtSbk7c—;†FYsQZ\=B>;c5wd)Z™XTN<O[;Jc9M\9fj2TŽNGt8_k8L…FJV.hZ0h˜TLrKWl,Vs4Dn;*R('<03PZAZ)UN&Ša5S~JfXDOY:aS8r–NK’OEQ5D`#VU%vZ8‚Z=j¦Y¢¶kxÅaoKa;RL8`O-˜Q5¥ ftƒ^WN>³qFgu_£J:±™l€œi‚MŒeE³˜d´Ú…¦Ë‘“‹cu\œjDÔcc•:UP-XE"cb8NI9QW8SjEQN.`d0`rF‘~=›±l|zPéVÙÑ“™çŒwuD€U5p^2kj>Nq?w=‚§hCu;qd.hwEY}P¢—Svšbž¨oô·…öÿ®œµy©ªW¡¥r´g¢ƒj‹œX«–`ƒyUŒZBƒfL¼¥räï°±œ…¹€_Àí¤®Ü£y–rn`:vTB‰Q>f€H’p<e[EtK4pX9ƒT<[U?O>1X]?Pk;YM2ehB~g>ŒcOvnX–x]‚`‰R;nQ?ª{U‚nSrgIziC´wQ®®ƒÉ§lw¥iƒ„E†ªK¾°r¡Ï—q•d{†V¥±t¾hl~>i”D€µh©ÁsëÒŠÑ«}¿–k Uu±_Rd;…iJ‘œXŠ¡Zu‰Ehm<¬†Z¿ÅˆÁï ¢Ûy†¶X„‹[䜂ÿ²~ØdDmU:RS/~eP޼¢ƒËІËq†«pfo=Š‹ZÝ씿ÿ–èà¡åʦÿÿùÿå¶‹Q¥¸uÈü¢Êù¦­Ü‹¥¯l§j£±gª­Q¬Æt«¸\¨¡\–¬O„¡M ^¦¤]°¨c­©^¢·et•E€„E“ž\€†@„{;ˆ…D_n/r…?o‹F[}IY~:š•e„´fgoGbnKY|G‹¦që–Íï§“¡e¶XIŠtDdq7‚{Už~e«‡e‡‚`‘¬x¯tᮂÿ›†â x§Žo»«v¶‘sÇ¡vŠI}Ÿ]ªch•OmU}¼|£¿|Ÿžd¹{Ÿ¸g~_˜ƒdaŒ™cŒ¡oª¢u·¹o£Òr‘±n¯f‘‹tª¯–¬ã«Æú®Éç™ÅÙ—¸Í‚‡“Sw{Rž‘–ÝèÆÙó°¥È}{˜iw’Xnˆ[rrˆ©~ˆ¯st£_rƒPyqLx„U}a€©j„®y€½‚´q€«kˆ·g¨OtŸPvšMf‘U†“e•¯s•ºk™¬b‹”j®}˜´t‹©‰¨ÄŸ²è¶·í¯¸ñ§µÒ~|¯HLw2XvMp£Wh¢Zƒ·p‰¼b|Ndfy¬et•_”u‡¸“¯å«¬Óy€•YwŽj}v”¶ž­iv˜Xn‰BFr;[m9Wv<W{AZ~@d‹JbE_…Le„Gm€G^{EXx?QhTf‰is‘HRq@PlKn~KnqJxuQ~†Rt…NqXuœUq†L`{Rm›oˆº‚š¿s­jz”a}‰[/F?>5+PQ*lr7\{GHvM0WH+E7-:,D9CR#NX0Nd6Gp7Hj?Cf=LW7Yd0kl0zx5U‚=BrADJ+SO)o6·BRÛsNu¨LJ:PR*_Q0vh3z“Lsž]„†R}…PsmarZHcZ:V^@eF9|N2Tq9^XC]V;nm=BŒMha]{m<mF]«}^bgnfC[›HU`_‰Ls@~0¢“KwXz€tSšY4m\`@.‹XY‚Fd`H?`;;J::H)QU+“h:’L€°€k tijŒZgjDagPBJALEZU,Xg0YoCOh<KT1LQ/FF1;L1=D#/J&9G.GL!ZZ1Iz<@Y<fc'p5a™Ns”]n¢UUi^@R>UM,P_(FN+HT,EY+Q`;aa3owHh^GBkFSVAXB#\x=[p=<ŸT3O>BF €d,W†]UbGLc:QS/dX+HjC@XA4I,;8(:J(;I6eM&W{1If:`F8sx>|†\€eQhW@ÛYAm«q•£[[’[3^H0<"Y9g€;IQ{l3ArT•J,bp;k~IYlPRqCNcPSd2F\.CC+Hp4„z@_ÑodŒJRˆ?In>HV0Ai.4g1H`&^[(IRBII/TN5_t7Q]3W;‡kJpc^‡QSzAtj4‚aG]=8K.*ˆ_,îŸ]‚ÿÐI…j`D.LhEVQ0“P4”¤_¶ÌuÕ¤t‰³„QMQˆV3†iG‘‡]ž¡h¼¤w¯˜t šjX¤qsR3jƒKÛz?ºÿÁZµqWl,o\.PS@EB+^D#F\@QF,kaCb{D‚sDlˆT^lG@`6wR²‚Dj½y?y<KQ1Pg:@G){?\‰[d…@Z”YbˆDu–My€Nh„OxxAʦg{©[†‹J˜džwU›…[ˆ›^†ŸV’¡k‡mw‰n¥mUÿÕŸ¼³ˆveItqA¦†V¦ÚfÁ€[tJA<.cH4f<^`=n`@K`CjH4®R;xwR`B;cVVc;JY=\R8^k=zV3f]6jX5fsG`]Ed_=¥oFjmXtIm[5„O1§aF{i:€y8‰ªJ]šJ‰sD¨®…oŸk~…]·Ö•ñ™Rz7>®§i‘§z¸Ò¦sí«„¦a…’[˜njNa†=‹Qºlb¤Q]:Ž€Rô†«å‡˜¼b‹²aœ‘iÒÆ’Øò­UÀlUjJPh?Ah3²†pæÿ½ÎóÐï—íz›H΢måñ§Õÿ¹ÿÿÌÿٷߟz§™hŨƒ¸´w’„Q«‰d£²n‘Çp‰±Y’µc¼lm‰Irm>ˆ[μ‘Ìß¡ÀgxŠD‡{HwDpe9gw8q†>np7q†@y¥SiD\x9i~>Z}=bq=x‚L¦£d‘ŠK~gL‘ˆf¡Í½ö§¯àŽ…šWpi@lg5lo:ŒbP­y]ªqP„nH¦}cº‰nÅ’xÄ—sœƒd´eºœjœ–^‘}d›–^«sš¶lxšIjPŽ—j˜e’xW˜‰n©·tqNŒ}Rx|Qz€_—‘`Ÿ[…ªY†–Xq…TŽŒuººžêùÊòõ¾ßá›”a{]‚‰Ym~KOk8H`>zl_“q“st’Ql‚PxŽk”—x•œu¢•ƒ»Ä“–Õil”HfƒLqžWržYq–e‡nŠªmŠ­lƒ¦Ul’JiŽO«o›°hiŽVt˜^‹¯c‹ª^„‘[ˆVp‡Vt‰duy•®š¶Ò¶¨â—”¿tz™J_7IiCg}Us’^¶™Äly±e†Ç¦»ï «Ûw‹¿{ƒÄŠÔ²¸æ¡Ÿ³_qƒR{Œ{³¹§™Xs|Xk‚K^|EUw<\wCWs;UtE_€L]xE\‰RfG^nARk@OrEPzdœˆ„°^YzCSoJaoFXlKc†ezªl|«cn™qƒ±q~œQj}R]–g}³zнg€­n¡cj„PfSDƒj?ŠJ˜’i`z`Twb;v`<^M?L<QM.D\'T\?cf:ZtDOrQJcIKh=Kh>R]8Jd'Ha0F]4]^.‹q*}±R«‘gHÉm<|¡@NB<D%ND(mM&^n8dsS¥jE•€BTŸk`q_O]AiL6_Z1eT?\Z:U^AX^<„p9v³Zn·ˆk”m‡ŽcT™ce^cŠy>аY€°oc©g?‡\NTBDW,\P.pt;hŽMEgQGC2RH:X3JX3Gp1Tc3sk.†H{„m…bqXІQ“TO‚eSJFXM-;q;?]EKV/Hh2Z],5_6F=0BK";T36U38A(E<>[2<Z.UP+8r>=A/^A&X7{nE‰žOt jXwbH]=@C1GY%ES)_N+sU+`x>urLn{E_hQNlC5[IHO&Hg/QP5UQ6;“RTT3rr7UXFkNL^4F]1TE0TS+\Z9q\:v`C^_KDfE_G2Zs<DVCHG*mp0zŽJvŒjooX¢…K—¸jJ™oJM6<i?4P0dB%\:CwGO]'@`5[m/qIfˆMctN\yJ2\O?N CS%@c-vE¬¡Zb¤pG|AW`0Pk;RwBCu;T\.Vs1Od3?L1eJ3hV:lQ?dJGQBaM6QBfMBJ†ByY,qvFVkGDW@fb1œ¡XÑ‘cqÕ¨Qƒ‚oP+gqGŒqE¶´[°žoŨv}™W‡d‡¥z`רdÿfÿ”l°Ö¶“Ϩmy¦n”ªfÿ¹~úÿésÏžeƒA^‘JW[U‰OPr@Fl8C[0VQ*dh>|a6cb=J]=89$AG%jV.¶}KWÃvRsI8J2QI#y‚Ey“[v£_hŒX}•F†[gˆWc€;°s-’¬aZ…=jd=ƒ†LžwRŠ„^Ÿ•XȰŒÀƒy£iY©{`½Œg–Ê“jjMeK7afC†ƒW‘‰i“„id‰S^4*hP2j[2li=]B/aBbZ?h]>µf@vcG{œnRyQXfBX`?k}KokBQY8\]8€a>¨eYbuD€g;£†]†‹]PP9LM1`Z5fd5\c1r^3xŽRl‡N¬gV¿Œ‰œlÑÔ§´ÿ¶L}DWR0\N2¡‘sÎܬ»Ø¤š§|£fprNV|@ig<…ža­ap…LVƒ;p‰;§„Y¢š_”®c¡¹s‡´k˜ÔÃ׉°ä—Öƒg™Ra|Fb|CËtn®¦pŸ°l¯Ñˆ—Ó|“œXÒ»©¡a½ylÍ~l®½ÃÑŠz±Wo{Fs…ExvCU™Ÿf…­W›¦néÔšÃç”ÅÍ”ÿɹÿü¾Å͉»˜”—d~„IoNfx>x„G}‘Jz€<ŸT¢œV•“E_|7^z8\s:Hk.jfB¡†`—T{…O“–yËá±Áð© »k‹X}tDxv?fc=bL3qI5uU=€bK¤pP­‚m›œm…yVÝÿàŸ®Ó|Áº|»Ùš´SyƒS…ŠQm‰Ih’Hk‹Zw†OgkBnfR°¥y{ŽQˆ€_i‚TskP{wP‡¢Y—Ác‰šW™vªÐ¥ÂÖ°Œk‘vY‹|XgjCegDanAY^2@J$??#AH)EY8goaƒUmz\zŽh{„Vok8ea5w}U Ÿl€¢Ua‹IpšUr¡PjŸRp™]tšb„§jv£NfŒDgR“›kưy«¤bhUv†S‰ŽRiqBal?Tp;QiOj†gvžy~¬† ½ƒŒ·_a>Uq<Qx<Qi@kŒmÖŠ¤à~‰¸sžÍ—»à‰œ¹z—¹‹Á¢Ñ¯ºë¥¶Ðn•’Qz‚z¾¹©—ZnxOj~Di†HfTc“Za…G`xOg‹Pa„Ip‹TsˆM[gEPnMYwSb‡s§ˆ™¨ajƒIbwCdrF`{av©…’ˉ—ƾ„•Ó‰ŸÊo‰¢iˆ¡u´}±o„i‰£az”[boHy{GbO]sZkqSlŠTj‹bPŽi;a]=I;AT+bY3~~-T—LCt]ZQDXkDFwGE^8JS,FX)AP2xZ/—-kª_¤uk[¦d@zŸ2PQ4A,F?QF!RE(KV4h^5vi4–o>W§Y@ˆyYB=aS.YM9YX=bd?i€A¨PËgqâ´†¦Ÿªlm˜o|rm“M„¢or¯vm«`c€dLfE]f>uu3c‚CLlM%J818%WIAt7TV6Kq1Xl4¤n8¤±HWÚŸ?FGJJA'8R(3C.9>%FO!NW%CjC?M6DL'NR*0[24@*HE$FN&<P4.E*>3?E AK(X_05p><F-eR$[:„…R]‹L^\HIc;Jb3<V(SW+E[#IN+QJ*Nd7ho@a‚I\wQdTTSMu=:_26L,lA&Xt/asUbu?XdJIM9gX5~e4StQKO7UZ2cp7fŠKX›]L‚QihFpˆHa£MZvEawB‹…@•V~–xYuºeF…iNa9CkD<Z6Y^0Bg:5X/JO&Nx5Wm>eo<=…¢ZP«w0eE<F%bR)EtCVJ*se-Y•Sa€DYDcu@V†WGhHU\&`g;NsALg1HC57<0l. ]P@[HSA,NW7K@8ca-T~>Œh.siOT\oi@_’TK{@°F'˜–[h³•e;œ›Zpºj¼ƒ>¡¿j—ºh—Ài ƒN¦œSš‘_‘«a›°ƒÚµ~À¼’ÄÆÁàŸ¡®‹ó¬z³ü´­¾€a†d\8rSB`<2]>3YI1dN8u~Qb‡QUi8RX3TT49Z7OL/RgGZ]?C4r›\FŸPKf3{–Fl‚aaŠMVr?’ŠFzžbuŒL\‘N{=u†>ªpCŒ”uŒ“ft–c…T¡~VzQAZT<\D4^B7°…T¨ÑŽp–h^a7iO0GR1<K$kl0lGX]Aju9ch4q^5R3%GP:aiMuRweEml9’”g}u_tzWqpJuyZRlCMU0[`1‡mGŠƒWUm>Ya6vW]rIbe=Tl?^f4nhBgx8b~AxpGYuEPF(¥XN„lÓÍ™ÓHk7I[/\a=š£~·»¹Â‘ˆŸl‚WŽªw€²oŒ«l˜°n€Um“Gj„KsŠPˆK”Q‹ buŽD‘ƒWååÀ¶åÕá˜ãÿª°Øy°°l¸­l¡˜d¢–c£Ât¬ë„—¯iœŒS´©{‰mŠrB‘wH¯‚\±•eØ×›¯Ö€†£a{œ[‹UwŠLqF`™©€Ä»‹Þ²ˆ¾˜kº‰hê¿£®ò–ÖÏ–k P{}HqB‘Ž[°Ãyƒ®Wt~=‡=ŽIa•FKs/Og+Bm,Yt?v”O†„I“ŽW»¨‰Îóµ²ë‹ŠŒU‚T†‚C`[6eP?^J8sM9cC5ŠQC”gK„jM¤}pÌ—‡ž¯ŠåϘ´Å¬¯t®©m€šLcz>†Px—JtIg‘M‚ˆPrz9`f>‰—gƒ”SbRÄ~p’‡bˆ‘n »|—¿r¡s¯ªˆÉ¯…ŸŠYriFdhN‡{Wt}L[pG]g;BP#/6#-6F!?U+BVCcsMkuO€“cj„9CW'D[/Gf9f…`Ÿµj{¢Fbƒ@c~Lq¢Xu­b}¥hƒ­m‰²btŸOj•M|“b–bŒyO€qMj‹ZƒŽX‹‘Vk’[c–W_‰jw—m…¥vˆ¢eyhŒ¤[dAGh3Ng:YbAjŒeŒ¶}¡ÏÖ‚ˆË…‘ÚŒÐ~q·ƒ‡´›Éš±Þ’ž»ci€MræÆ‹Æ¢Wnƒ^}šWišar j›Ñw—Ëj|¥cƒ•Okm:\qMo‚WkƒOb€OcTl_}’u‰Oa|?Rr=WdFd€h|¥z­x•ªuµ—¥å¥¬ßˆ›Éu| €ƒ¬yŒ«ppft—cu‹b^}MjƒOc‘Uyq`n‡W_ddhbXlWQ]TZM:>^5€T;†„2{WmcY{[KvOJeH9X;OI*UY'CU.iK5^k-RrSšeFm¬K?…”1F[24/3:#=<AHUF&bg*\Ž@ÅeJƒ8S°T‚kYr>Vc@f_=†Ct­d¨“sžÎryÖµª–|±n~i›“^Œ©g~”{v‰\bžXZT`NBZlJR{IAl>6S.,J&>J(aT%?9OaBZe<Kw8rR;Ào0Í´bUÿÑ4¢×<?CWGF4=`FPQ.Rk38h=@=4=U*LY89^6?P1:C+?I-A>-A&2*98NU$Xs8MxHJk=d~7s@V—Y9cL;9&=<"9N)9K%@P >B%<I%ME%YZ3avAZ€M]xS\€JSƒRH{APc(5t3LX<vk8f…Tl‰LPšdSg:Z`?wc?Jf@FY4Zb-ky?bŽTg’W~–Yw§hV‚bYDe@`‰Bv‚V”˜JK‘g†RcÍqOznjfBE‰NLlHH~F8bE8R"US&FZ.M\/^d5¦zA„·ebeSˆWFtAtn>Cc9FU-qv5o‹ISyMF`<—w6V]RgAQs.9U9F>+JO.];&+C7X)[u8EUK]<3UK9;Q:XG!Mr4ct6yrDUlO†|=[›eIi9BV-K©q@qÖ–¦LR›Klw$—w+Œ…]ƒYfTAxR;{dC‡Nˆ™i€¦i…’_å~Mdz{š­f½°f¢°s¬¹lZsXk6ZR0ZU5SL(dK1h@*jR1je7X‘\Mw=T\3Ff?7U,1&@,?6[N)n8R€:}‚:lUZ“\Sh8v‡Eqc6]…HX‹AXAas6tp3™g@‚[’µ„|qRƒ—gb§iZ{Up{T¢ƒ^´º~¥º|n¤n\QaŒHMl:qzHzLt\=ÄWƒ„Vƒ„OJm=w{M•µ˜Ã›{¶Šzº{{š_ªƒZošqwsWahBtiDg}KFR=uhBˆ|bc„VOd8_w>bwGaeAbh?SWa€Mt§g—°{¹ç²|Õ–S¦k[eCVY:a[8§¯tz—Y]ŠRgz>}U£’k‚­{Š•c|…T~›_‘džœÐ}˜Â|ePf|:`ŠC{ŠHzŸWjŠQz‹A”VlIŸžlâÆ‘¬É‚®²jÀÓtà²_ÿ±uÜ®s¹•b¨”p®¬d¾Ð|šX†’O€Yau<vq<¦Ž_ß•rÊ’yÕ”`ÿ¢oÒ¥hÿ°Žµ£o‚”ZrG¦¡jÛ²„á›sLjiŸŸk¯‘l‘§r®§yº½‹†™_pzE{n@zdIÁ‹pȬp¥¬W˜LrWfŽKbƒ>Ay0F7]ŠB­_u¢Lj‚Mˆ˜sÊÙžºÝ~zHzjHkwFegGwqF”gK~iLpnGr[E–mTjG—c[Õ~СŽÀ¹™Ì¾„¡`—•hr¥[gˆAqHy”]„žXo…IqtDpqIfyRšlŸÁl‚‹e¸•~ã¿„±Â}§¬p“–]Š‹aˆƒXmnEutV‹‡c— m•¯n…dyTtyWel9476<$?P-KP5I_>]vRT{@Sj>Zi7A_5L_=^jGbzDl†?Wi6Vr>Y€Kx’\t›Tu¡[} gs¢Wp™Uz¬bЦl¥ŸfƒŽU}|Y_lŸ®Š©×´šñ˜Æƒt±dfN[pI_Eh‰\v”RW‚;Eb4R_Mvªv’Ô—°ö¾ÑÿÉÎÿ¼¾ûÁ½è—³qŸr«y¢¸o¥M`Jk˜p¸¹w±ªX€Ÿk…¦e{SnsY…ŸsžÏwްl|ŽMUa;NiVh†bŠ‹W„HhvD_qKmxPd|@\h6Rc6LX;`{b|£_u˜ToŠZx“…¤Ë›¸Ù›¿s‚§t |‹žqˆ”lq˜ds“h€zUoœVO‰oGgavGMRt>@pL@HCO?0OX+;Y:vS8mx0‡xKYRŽjVwkJcJ;R6CK,HN*Bd3_O/I]+[SC­Z3y¶ON—§3Ja33/(9&.1':>QMy[c…/m}]œgF‚~>ret~Wˆƒ`ˆmSŒœXp±z Žv‰¾cq³ˆz”rb“]sb[’wHk‘cmxgw™FjL‰™\{}ZpŠ`U…W7fJ=R4FQ!H\$fU.TŽ4MiWK\EUG4Hn0_S7½^.ÅŠGKíµ.‹³X87WW"C}QK]>Lj9Go<YaCjo@WVAyfKR85T2;[=JS1;\6IZ>Tn8s…Ch¡VdŸaj¥ivc¬^Fªc9zC9_4:Q#8Y&:G)6V/FC"4[14?(@3WK3Zl9XtMg€UcŽY@†Q_Z4k_.Yn?nlD‹‹J––[f•qtuEetHapHMoFKXCO[8df>n•N{e“Ápr®sqžjOƒ\]]?ls4f€MjuCwtT¶˜cXÍŽPmXuvGp–ZmhKŽ]AhI:O+Fa)?b87Y8aW,€k>diMpbF\‡Lj‹Ul~@`©cf¡bLŠR=S0GA$lP%Ye0\p8T~CSnB=a:NL&@d5NS @=*U4+`k3fnMgM?OL>HE9bE&aG\‰J}i8Z„UŠ‘JS~\SP(F[)k? }`)©}=s­t[†`mp*wwO€cPhG|iFbFsqE™a@t{PmŒSyeM—uO}€j‘lB“ ]ŠW²sT½¼tWx’Pyl:g[CP…CRR7\V<JY6pC%‹ˆ^Xµk™jERb?G-P\;Lk:_xAQ›[Ig)n3„¦[P‰[RY1uŒAgpE‘t3¢^iŽUV}Bcm9v~KnP4‰Ž\KeO‰;4À‘qeŽoZJ:vT=¢_‰bM‰—d§o¡¡gwÃtv–T`d:‰`3ë‡^º™w»s[fnF——n¦Êœ¤Ê˜¡¶} ×˜ª|gŠe_…QcY7MmHd_A^„OSt>zd6•€^ovIZyOk|JegBnpAg~Pz•gwŽg¯…—±ËÀš–½’r­j‡—k²||¦p‹¼pUK^BYˆBkyEm‰Ys˜Y^’Us„UŸ¾…Á~€©^{…GfIZx;rO|‘Q}‡Kj…Cj„FtGƒJ™—h‘ŒV—ˆMzE©‡`®Äy£²ož’Y‘J€™P}˜K½‹Oœ«På©ḭmƽÍÚ€´ÚwÕ¬zÿÄ•ž¬lv–FŽJµY’ƒUŒX›…]ª”cÃw_œtT¤‚]…_ŸhR‘pW©—|«¦ƒˆ–[އTrHg@™aL”‹[{Á[q”Ez£`q TL}3^j;[‡Bv…Wh‚Jde4amB ©€¹Þ’¡ÀhŒ{VhuFc_A}_DŠ{TŸ`˜ c…‘N}nGžcV­Z“‚Y³‰`žsQ—[_¦£|£¿ls¢V‹¬t|ª\f…<qHƒž\_y—J€ˆUè´Íù˜¦å‰ÊʼnäŇ¼Ï{͵p¬¢g‚ƒI_e;[WH~Œpˉ™Èt‘©h‚‚X‡‡až¥}¥¬s{QLkBYeJnrMww^wYemL^_5\`0QsDYˆJ[‡GZ…K\|Bc~>WBW~Q\ŠP]€;eˆJo¢Sx¦^| \xœjœ¶r— YyVŽ~a™‘\ž„_›ž}ŽÊ¥¼äÀÊí©¥ÀvˆIRi9Pd=L_3LQ0TJ?g_HjU\“nˆÀ¢¹ö¾ÜÿÍéÿÖåÿÇË裤ºmh„EPjDb‚MiˆJ_t9avEp’dŒ¦_€“Vv‘X‹¡d€€KclGc‹Y„«s…¡w—œfyXlƒQm}OcmBPa?mi@jlEdqDYj6Pd:IZ9H_=ZkIo‚Rp‹BZv8VrMq‘l“­{•ºdz¢Qr‘Zš[’“c••_vhˆz>]‚RXp`9bP>I?`0*Me-Gj;aA8Ff4B`9VV4oc.pyOk`Z‰`Ny\JfCIU9;R.EM.I^+UZ1A]4ZH;³E'w³GI¡©@IaC<+5R-,D654%<W#JQ#tUW0ZzV‹d=€€1„Š\}tXi`HvOBh‡UކTxµ]drktXShBvWF|ƒ:i˜au‹Y‰I¬ŠK†¤VŠŽrc‰dVkQ:W47O.8K"<LXI%^f&7xT3@:@7%QB$Aq7P]5„R)†x=E¬Colk^;iŽGb”lRb_vNnn>{J~[IzcXgQ[p<n{@bo<WZ@VZCu[AL‚Œhœ†Vœªk˜¦x»Šk¬‘h—pS\JŽPPj@HDCT8FQ,@P0AR2ML'Gh9Qb>XlDd{O`zNN|M@b=AR.FM$mT)pr5ƒrJfŸT[sIKZ0JM,RC*Xk:Z‰T]ˆV~‡Uµa~›f’±jtǃ[žcSzTSyI`Y:„s:r‰a™‚dW¹wtxNqŽOtVziUƒO@jT@Y2oX(NƒQ0`D?H#MS%=S-CH%_R&Ru6ctB‚~9–§ooÐ’G·†8rUJ[1P~6Pn5Ki.kŠIUx<Yy5[ˆ8V…KNh8WoJ§ˆJg|e^RHXB2V^8™\=ê¹vOž¤sg3p}RvœTCmLOR0D^+S>'X[:PtBL]7Kh0iU+avE[oJtf?‚Y8„N1{ŒPzKb:wyNpI9~G3jU?gI;}iAntM}|D{—[­‰Dͪm¶‹b…«sЇYxœakmJNU1}m9sW<ybC –^Zµ‰a_B^]>v\<®‰X^‡^Le4“y5u³_HcE[].{‰Fªb?YvOaT,jp<Re@^h-ŠmIYžds{JGnCYA)·v<šæ¡~¸Œ¸€u½oOC1l2'ˆuQ–©k–°h‡“\quAžtIÇwQP7hW9‘k‘¦p–­€™Â‰Ž«·º‰czQgaIbtUhh8nˆ\^†Yu…Vn‹XT~?QvCOs8p‰Nw†Wki?Yr>]e4•\=¾¨~ëÉž˜Ç„¿¬z¦Ã‰ŸÃŠ|›j§€€’e”²l]‘UqˆPV‰J`l<k€Kb…Rcg<gjCzƒSf…MTr6Jh,Jc-Mq2\h0Qu:`sIV€=ch1…–[z¦_›•Zºnl‰N|yG„‹N¤µ„¥Ñ„{³[‹HŠ™R œR³Ëu×ù”÷ÿºæÿ®õå‡ÏÌz°¤fÛ™zÿº‚õ©y‚•KŠ•\’—Qœ«_‰²T}xDŠ•Z^‡E„iG Žd¬’fœ_©ša«¢d‰“F~ŒB|w?fDif9omO½¤}¸Ùo¼_dx=r†Igu=Z~6yŽWzŸZvmEZs3Sv=Š`²Ø|º]}qA‡gH‚jKrfFŽ~VŒ\¬©n Ås¬¤c¦Œk¶’nŸ¥qªe§w]’ˆQinG¶Œ^€–KqŠY‡±caŠAgƒK‰¡`”§kž_•¬t²ÇŒÿË™ÿÿ¶ÿõªÌÀw¥§t„ XŽ‚Mu}H_m@^bUŒ›ÁÉŽž¡_w¥Ê‡¦ƒ¹­ˆ¶´~¹­qµ‘^„mV~hX|„aƒUltNaŠMZ—[d¨gu®hm¢Vc“X_†C^ƒIq—`q¤kƒŸ`qžL\Gn™Pu¥[r¤`„­n—¸r„PŽyV§‡hªˆg‹j›¤ÂÛ®¦á¥¼Õ‰˜®ejQcƒFNb5AE-<?4>$<?=hyl‡µŽªØ¥½ð®»óµÃúÆÏÿƸ𓋳ls¥fn§ng°h_’FZxE[„W„Œc™^{ˆHlˆO}‰O„wQ|qJj‚HiˆVr„]‡ƒ_…†Oj}EatJm€J_r<W\?teAkr@Vk:Rm;`jFelAgq:Yr;]yFZx=Uq?Mu[q p‹³_w“Ej…Dh|=ZoAiuSt‡]_X7doBX^K.TL%<;/+ e8Iq.DoHDZBMX;d_.nu5cR_uZMoWI\MAf;6TE6B4G?&SB(X`.DkBS==¦B'}¨@C£šDKiLC,9G05C2;7)@F$8],MS"W]Sv:‡q?Žk3V‚S[TN\_7Y@5[S5j9aŒBPj_sWoCx„>‚wLg Y^”]_pC©i@vKlŒxH~P@RG7G..D,;4FT Sf,l_,NˆHHXCNP+NW1;\5@Z7Lc8`p;g†K`bj‚Tq†Xb”ePzdIdQO^5_w@W„GO_DLg<?g:6V0GQ%ONiW)ªuB‰•Mk^Š—MqŸ[p{N|yF~†GnqYx‡[u’cY­kfxUF•I>eCCP*AX,AT*Hb2Fd1IX8O`5\o@HzB=cN/`54D,WH(WX:y†FT;EN;HO*9N*N3'€y0ƒ±qr±sq¢pl^„Ÿa¡¸o|Ó‚n—yGjJfS;\o5_zTL\?”p?O¦mfrFl{Ey…Pe“aKl@Lc+.`24C'<:'0I*8@?S#;P$eF#bP+Nd6Wc/gu2ˆm7¨¤h­¶~•׳‰Ü¹L°‡JdD‰h=U‡NRg<br.hšFkŒ?Œ7†­p‹žql€ªn…ªr{¥gÀ—e¾´mh¸•e‡[qzKg‘Vdo9^‰DKq@TU0uŽDK€QQ^/KZ2Xp8i~>XpFa\?E€VjD,£X9hFvGUiB…`9hoOwcD‹kLŠ~\uZprPh{F{qE£tG‚¢jtjGc[<kX1_r>a[7dSW]>`2#}c:¤uyÀkwÐ{”YghAGi@EV-mj'…“JXmHdn8””Ui~eK5ueFrfAcvMULsS/kZ{R?dŒ[m‚LR¸»‚±Ë¡ß©‡À‡J`.</M8$€X1¡‰`«°t¤Ž^¯V‰kNk…RˆŠPwXdjH†T@˜~do•i‚ˆUU„UcB6Z^<puEm„OkŒPx~Kh‹Lk„E\‚Kr‹VpŸbd~H_P]{AfMh–\wJ’P‰•^Ž¢c‡—\}‰TjŠ]‚uPŽ”eª¿ƒjlm€FJ=_s?j|XV}CT€O`ŒVl‰_W‡KUm7PsBQu6Pt4Pp=W‚>]s4Ps5E\'•jA¶­}§Ý€ƒâxŒ S’“_Õ²…ëèšžÆwq“P{~E•RŒ›VކK·°oéæ”éÿž¾ï| Ål¼›mÌÏ™Úÿ¦Óôˆ“¼c©©e˜·Y˜ÃZ¬Ö¾í¦Ùï¨äþʸڛ¶¯–­p¯žt«Ã|‘Ëml²CQŒ4jk?…wH~qJ›§p¿Ü¿Î˜Ék`‘>Xa7d|?Wv7h‚CoIT_7Z\0d€Bo’V¡¹k…U~iU€…cŠ“^yPqY³™yË¸âæ¯Ìù®ÆçžÌçšÊÖ„žŸh™ˆd©©y‹©fs™Mr‡J‘^±qs¡L„FƒŒG‘†X›‘gˆ‰X£¯~œÂ€ÉÌ Å푪´wŸÌ}‘Æouµe}¬f¢±lš¹™¿Ëš¨¿ab}A{†l¿Ó‘çà–çÆ…ÆÌ—­Ô†ƒ¿k~ŸjŽžly™djŒU`…]‚¢qŽ¿x´¸z©Å}“µv‹´ƒŽ±qe‡QuŽo‰©nš[€“LjFj‚FxŸ[}¥f–Ä”¿ë¨´Ô…˜¯v¼£q»›m±•sµÄ•¸Ü¤ºÖˆ‹·qˆšbw—\~–hm†R_xCOm5=Z6DX@j‚t—ÅŒ¤Ô–©Ü˜¯ç¦ÉÿÔâÿ¿Õ페Âtd‰n˜˜d…”Kk‡X}¨o“ jŒTy†Kx…Kq}PpvIvsCk‚AW‚Nh…RvLuGi{JksQ€‡W~7JT,FT6\d;Yi?ZuJ~uBmb3Z`6Pe9agB\o=XqAY~Xw—eŒŽKhu?`ƒM`‡GLm>LfJgy`nCO€OGdMFY>2R=JM1SX.{X7P•ILkdObCa\<cx;N~FHj[;PFa87Vg39sP@<G=B/T?1Pg3@sJU=7žH-{ŸAAŸŽDOo;;5CK9>N38H-<K*;L+:b+O`'Nh$Pf@[vEMs=c_?lh2VcBPaAi`9›}B‹ºhw´|€¡cqšaq}ZlyJm‡Qj†Vs…RrVRkHfHDQ;-R417.6B#H8Pa,^k?<ƒ;7J?7@8=KI#Ul/UkJXaJd\EVfIezGf‚GZsXI{YNrKqu<‰GOƒOYTFYx9ItFOf8?r5Gh2Aa.M^/Mn9kn<\n8GdCQh3^m7<|7GVAOW&a\0qr@]˜Tp{IG¥MIaHA`4>a5Cc5?\+QS0Vd3[mU^|;YtOTuV]~YpŠZc„V\“S8ŽSFeLPc?B^5VI2Œf-~°xp¢oPsVhdAy}Gd˜²pDµ—PF/Wa<TrBAZ;W^3”n9LnJ`Fnc;ŠŠ;QÅ…LgQj@4Q3<:%39(.78H+S%4>!;M#@IX`"Nf8Oa+cn,ŒS/Ÿ‰F¦¬‰È±ŽÙ³|ÕÃ^­Ž\U?rB\=#SF6^V9\q,`U2zg8®sJÅkUµp]žmTŽŽcubL¦yP}¯{h²ZV‹Y`M+wC+U[3xo>y¢\HqQLU2SC/mI)kpN[‹H]n9kD1aŽUSQ7}Q0ˆ‡N‰oX‡Q;„M7i^<zhCfZhRZ}R^qKZb5]D2‚cAj¨l^P‰qGbrIo|>peG–kEO/^I)¹‰V¯ý¨®ÑypšZWnHM`D9X/`L!’•DeˆSaE{{A?<.V1#}N3ˆoD–iHa£lv„IŽŽU{®j„§gœ”_ƒ±u«›g½›j¨¿œ¼…’¿‘V”Z…f6sx<°x6ä·ríÅkÇÏ}Ê꘮ãœ{¯tkŠCP`8H@,gK3>P7jc6{{U\†MXd-gAªW†§au˜Py†Pf{Dj{J‘¦ypŒWf‚GpˆPg’`vH|…WMqEcr>V‹=dBb…M`L\‚MHw<“ZˆÄvXy@TzJg|IpˆPuƒYl‰X}”pW•[\c<UxLSg7Vw?vvBXCnxGcIYz6Kr5Si4‚N¨Ê‘ª½m›À~{Às¢]°¥b¤^ޝu’Ö˜Ž×†‰³l¢¡V‚zA…l<¸§j¹ÂsŸÁk§Àj™—Wã‚oÿò°øÿ½Õï­ãyŽÐZ€¤Q«€Uß©o¼±ZèŠeÚ®„ĺ…ïÆÿÙ¯íÿÅÃö¦Þi}ÄZw–J‹‡J€wD£‘_‹²p¢¨a…ŽUX‚3C\&‡€UmŠ@]„9q|<p}@]o2k}=´¼mµËs…G†fA–`B¢nR‘‘[tG{Cx|NЉa䷃˾xŸ‹ÁØŒµ¸z­§m¦£l¥¸ok‹DmxRt€J~e€±Ubƒ?gy7\n>wwN…‚^˜¥{›Ã‰Â½”øÒ“¤Æ€®´~¨ªp«Ð‹·ä–Å׈¾Èsªªiœ²bx U«V“¯T†”F‰…MƒƒRŠ]¡™o¡¶n‡•kŸ¤p™Î}ŠÖp|°n­Ë‹ŸßˆÆoˆ§i™¸u‹¤bbg@sle ˜hw‡PivDZv<Vl=o„Nt©\šÀŽÔù½Ýú­À垯Ã}›“aŠ“zªÃš¤Ò€š·oˆ¤c|ZœY‘UzHrpIewNiIc}N_ˆfƒ«›Æˆ¡Ðˆ¥ÓŠ²Ú›ÊΪ¼l“¥Zj†E`wEsƒIh{AZyNx‹f“•a–X’Vn…InƒUq‚Oi…Dl‰IhMrƒK‡Dp‡Gg‚Jd€Rq„UtHQy49Y/=Y6Sg9WqFewKTsIRwLP‚HX…=Tn>RsBZ€I^x<VZ/KN?\v_v—c`‰NLnDSl:MmG_WKq^?Ln@W^?pdB`nKwsWeŠV\ˆm[dW^^@fvC_uA,ƒO92BQ6"‡\)g€FmhgaaG‹fEc‹OM‚wOYLH-€‹:2 „FDojF/df0CjM@J>CE5FU7Kc3Wr3Yq=sqAqƒEa„UhqM[\<La<L`7pc5•†?€®`q¤vf‘\XlN[bB[j5`oEZj>vnR_‰J?uXB`@MX7=\3CG1B`/W`9]nGi{I>~I'OL./$6.e,WT(F]B]Q5Yd2[n=^rBTn6\pE^pHe‚MdˆE_|@XqAdw=pDN‘HUuEQx7Hh>Pe1zx9x®SOškIoHH‰GOzOXi3U|7N€KTƒ;PFSpBVi?XxK[r7B}GFR5Ja2;\:4=*=B$YF$Xw=VB_fHcnKlqJjzWbzTkR•“V޽~‚Ç‘w¿”i°{p”u`“]GlgK[AL[3_X6wO:¹oTCÌ}RKQO^;KcAM\5Rk/rd0CW7X7`R*©€9­§eƒã¬Vϱ;^DQ4*\29='NM<V):D,7M&L]'Zg+L^0Tj/Zm,Cb<e_,l`7‰^9›‚^Ä™¶Ë¦†ìÝHͯUg=qG1Id6FV.pL$dZ=dkN…K3Æ|CžoIWZApV9ÔpE³Ø•œ»‡a¥pGoDXY8bY=”–X_–keN<`^2dF7©O7g`Eb_<\ˆC’z<k‡Z\cI\8h~Vg]0€N3›zW›“j}™vƒ‘aÇ’a‘¬†W¥rH\1Ne=yU0srI}dKЍfY¬foe1ˆEt’btTBZaN˱f¹ï©Œ«fqyIwtLizN?g7RH•…Am±_bCN‚BDO1`P2pjC¹yWÑjˆšmyS´|>ÿmIýeTï„Wµu¡’j„¤{“šW”€Tœ]DŽR6‡Of ;ri3™G(ÈrBÝà…µ{}¡dm—ft¡ch¡^‚„OZ|HˆyFzZµƒ_y˜npzYŠ„X™‰iz”Wvh>†‡Kl™_ž^k‹TUg<Un9o~EiŠOxvESƒUNU5@R)PS&\W/WY3aS*^`8HL'‰~B’À~dTVg6IJ)Oa6q}\‰¦€l˜crRiŽ[aŽOVyGjwIi~Ecn:[}Ei?p‹DSx7hy>ޤgš½qˆ|O¹Î™žÊƒ}“U†x?¢”h¿á°ÍÿÖ¹ú·•å ¡ÊwwžLfwIš”j¦›sµÀ…ªÃz¡½nš„RÓÕ™ïý©Ÿÿ‘˜»e¹p“ŸY­Ÿy¹ÅŽ}µT§O°³x¤­r¼šqëŠÌ昩àw¢×p ®gsQuLuqHci8h^<vlLvv>g8Gp-l`7dvA_€Dr‰O…ŽPf8Yu.šœNÈÅk€ˆM‰n?xi<NS:imI–xUfƒBŠzTʽŒŸßp{¬Zp{Y›¶u±¼r…k–°nw²YwMw•Hr‘M}™c¹jo¤Nx–T{’Rk~CgoF‚Y¤…fvP«lľl‹ŒHdy6o~K¨ d–¢S‚¨T…¼m¬Á„´Ão‰˜Z†ŠU|ˆLl{NsqH_j9YW?g`CjoF|‘d¤ÜžÍÿ¬·û¬õ°é†¡Ìu°lš»„—Ú€_¥URd2DO7TTMh„bŽPeu8\fE{X„ªm³ÎƒÅ×—¼Ç°®l›”f¨…«Ä†¥ÅpŽ a…©Xt£O}™Y‡¬WužOnIuRˆ…^ˆœ`}«o‹¿|¡ÙŒ£ß~’Èk†¥b~†Wq€UuRk‡?Yt@_tCo{Kf€Jn}Rl‡To„RjƒFd~BawGpvBbl4\sAcvFfpHmxC`wLp€Vov@SkATzP_‹MW>Nm;Om?Uxb~¡„‰¸ƒ—Å¢Û•Íef¡U\PYŠI]‚NUzFM{RU†ji™sv¢ej‡FTf8Fk;5jGFQ=TH.^[2ZiAimP‚v\Yx_d~jL†Ha_DV_>amA<{EdB=LB1wO8pb5NxQubOqEpšhJ€Ld\ƒP4Œ|0O­wOc~eTCT_6IoKScEQfESpM^vCg=Tq?MqIK^:Z[5PX5SV.R^0I_5he;}‚Fh—W]_S^LVK8[X5Tf9OR3yQ7vRN‚QStPK‚CVkA<;Z]9ŠOz¥ecŽjVjDQ_B0r>074*@&>,K<1[2=>)>Q#>O(KT&[a'Y|:ZxEQw=[j4mw9e~MKjEWS8Fe5Rg6@p6N`1gf1uv8^IWkAg<‡FQ¸€OŒuOi8bX-sp7o„FnOe©NR XM˜f>iBHL/RM&4W34@*EE']_1a‚I`O`^A_cG`[JJUCEG3YQ1ff4g8›ˆPȬj¹ð—ž¹ˆž³†ƒÑ©`µ›ToX•gRpa_J@[d4?iBUF9]u:_wAPkDkh6I”Y?kMba3^y?ƒwMÃs?©ªyvϨbÉ£L•€GeO<i?GJ0B[3?L-PR(F\-Ky1Y[3g‡99kERY*Kx9Uo:RVEsM(—rLº’mw³’i—‹Y^>‚X=R8HQ'~a0y£_ejOJ=1eD2e€SweWˆTŸœfcft~7cuGe`8}‡Y§bYŸnWU2`V(iW.‰M4‡F3jY>`e>aDlŒIƒƒAqyOSfDh[=tJ¾•kÿ§ˆºŒ…wfP|^?K6‡¦ga´hjq<^yQyjB^‹XlrK`€H^w8pwCœ}Nmf_ŸMÑ쇖ë­n‘RSM0NF*W\+9d-LG­‡Hk¸qeX’Ÿa£ª‰z}\tX<ueEœO™ŽR^uJp@rc9nZ=da1cc3uW7“l@j‰S>X7GP0wa>{rZ`K9S@1PuEG©•Uš‚\·Ôˆ¥î«žä²«é­žÜš¯s¢Á}“¿~¹“Z‘†c”zRˆuK~iEfuFZA+‚V7—¬nŠŠZkn@L[2km<ƒ~Pr¬my~USlC;O(6G"=W.=Y+@V/A\9X\.>b1‰„J¾jczLD]243HW-jlAƒfƒ‘i³©± zz‡[g|J~{OeŽQWj2f|G[}>gq<\=mJ¢¤s¤¶u}ŸW¹½€—äŠpTonL†lRÊÂ¥Çì·Àï¾°÷¹šÑ„¡£j·«‹±Ã‚Ϧb² e¬še’“`\~>«j©¸lË˺ÿ®£à’}¯V”uP¿™j¡ jl£K€£N˜ª\¨†iñ°–Öû ­W¡yT­{f®j¤k‡†UŒzZƒX†qKTZ?kRf Lj@iyAx‚I„Um‚N[v6]}7t”=–“J¥pR‘„`t…Yƒ„c›¶~¢ÞŽÕyj™Y†P€–Yx¡Zrªb{©X‡¬M‹£N†™Ww©Vl©^x¤a~¢]‹ƒaŠ™bg~<`^<yg@qfFv‚]n…Tjk?eW6usFŠL_ƒ?V„F`Kn‚@n…Aƒ˜S•³k›­mœ”h¤†V‡[‹ŠZ‡ˆ^ŠŽ_z–ev¤nz k•¥xŸå¤ÉÿÍñÿÃÚÿ¦¾õ¡¼íŒ Òp|–`‰—{µÊ¥Åàžz¼lI~fbŸ’Ð’†ª``f2N]5g{Jy›WyQ‡ŒY‘žb¡­l©¯vµ¶z¦Äk–£ZŸ†\”•Z|¢I\†7\yBt‹Ai‹DWb<hhNp‡Vt¨k”Ç~ Ð‹°ê‰–ÂdnŒBVi=^nLd‡Vm†Kb|DguFi~Y{ˆXƒ‰Uo€LauK^yOi~C^>Y{7\|;YFrwJvJewS^{Zk|Pjn=OU=PfXxŠRnKZtERpIZyZ‰{³³Œ¦Ï¡Áð¡Äí›Æt„·pmœZiŒ[p˜atœgu˜ivžxz©mlRJf/\N7Mo@<_JCI6SF+]]3_X<V[ELP>xaB†ƒ;L‰ZYTSbm?csDyaEBU:OI=TW0ap@{{Py‚Q„qobaSmXbL¦o/z§nn{†Zx`SgNmmC{ŠIgš^ZŒ`ZVJp@G\<D`?[f9Ub1@]8ZV2Xd+Pa1ke;cuBeqJclEU]C\I8Oh7@g?rW6•z7T“`^aXkkEMˆMovY‚—H›¶{€¶‡[—‚PdKZ?)cZ9?y3D@TC:)7Q1LG.-c-5H>DT"C]*@V&RW&Ug-Vu?RgDmr;_ŒQ@`H=P0IM#Lb'Rj0Gi;DV1;Q3UQ-Zp1E€LKc9ˆ[0ƒšBG¾¥5jgAW-@j)KQ4YT,e3ŒJ^»h9’Ž7Y<IB!RF%J@->K1XG.jq0<QDS:Sf*8O<:/(>A%IN*EW+UP/]q:åvBuùs{y…RD„_N„aN¹ˆ^ž¿‰qͶj¹…^ |SŸ`S‚N[uEryATi5„<a²j^Šd[xB^|EboFF„XSJ0~>#–RE˜s`ƒ§k¾“YÁ„s¤lQxWPn@ey5Xn:qvKL…P?A0HNkh8oo6Gp@]Z2k…;vpMtxOv‘o‹„@kžpo˜uÈ™Y¸¦yeRC56c=&]D5vb<p“m¡lr¼Ix]gk5fƒD‡vXŠ›Yzm\guM]yGVt6ZZ,dT8kvJ|pH‰Sh‰]lq>zƒHfŽLhf?eyQlgR‚\=pgN[C9dN7_`KqgB¡²gfÏ‹buJf];”pLy”lyˆ\i˜`fŽMƒp>q}O~pIÚˆFâó›‹÷·‰WOtXX~MW€MEf/]^7ÅOgŸf‚~Jû½m½¸s‚ÈšhhO©~X­®s¸xpjL_‰Qn{>bj=frA`yGŒŠTv¡je„HXaBn‘M´{M…qN^i5£Œ[ºÿÒ¡²‡Ÿ¸urŸk£™aÿ¯†ßÞ°³Å‰½Å’ÆÐ“Òט›»~v…Tƒ‘^À‰douRyq>hyL`‡QœU¡¦m]IlqFMk<gg8ˆmCš`{¨od’SXsDlm=VwNEd:gb9g‡STyBSX,ŽˆZj eNX1IR+3Y.EU+Ji5jk?ˆc=xL‰ƒU’•fh‰Ob„QuwBb{GbsHU‚A_y;`‘ErŠK‰‹X‰Ž\‚¢[’›Y¤bdFŒlX¥‹e¢Ÿp‡€Jºc«¼€Š§s¸§mÔ»ˆ½Ÿaœ~MŸ¼zÞ|i CuˆJs‘Fe|2pl>±i­’a„§Ns”MŒL„›Ry¥Lvž=©®Nø°‚èÌ‚·²cŸZŠUyyJµ{iá¡âŸ‹Ïµ‰ºžw›‹e’Šl³»|³Âu‰†W~„Py—MfwDorCh~FŒMŽŠN{Ivs@€h@“pJš‡Wš]¹´‹íÿÊÏÿ¥u[–¹Œ©÷£›Þˆ™ÖˆËsŠÈj{Èk¯u£¢s›”i‘†b‡šj”¢iu”FZ`@luHk†bƒ²”’ÓŒh§XLl7YM:laFy†fz^}€Ul QRˆB^vH‘žp™Às…¬l™^}‘iž¶–´â§´ï¶îÿÛÿÿýûÿè¼ÿÒëÿÛôÿ¿äÿ˜Ãã}ÃÆz½Ñ~ž¾ai…Ib|R€šr•­x¬ª‰½À’½Å‡¹ªs¨—Yj|9Xj;_Ln•Hp†;cpA{…[”»u•Áv˜·`‡’RvKyO”|U‡ŽWu>Hm&B_(`q5Vw6IkOiˆ]|¯c‰¬m™´„´»nŽ…A_l5Qg=czPq‡M`u?^r:c~Tw’b‹–g’•]‹ŠOuwPw†[v‰M\rIj†Pe‰L[IbzMi€ct’meX^tK\d7@Q07L9HZ=UcCUiRX{OXwFS~\q‰uŸ¯‰»Ü–½Ò‡¢¿|”·c|ŽRbsCd{IbuJbhYv{h€n…¡Y[{8aC/f\2LbC?C<QD-2O1574M9.QB*€W2xw9dŽTnUk†U_†XbkGFW>TT7ˆe0ŽŠ=…˜ea‹lXrh_KKIC1„=0“p(w£_”cubwZah[dkKlƒJd„Sh„OWzKkX;ck9WwIfpEGy=H`=H\)HX)U[-g^)NiA`dKVk2UQ<_Q3Xo;SgE€jBd”NZoVXYF`XDqu=Œ›`¬£k‹¸‡d¥…5oV?71\<^Z.Q_46uQ=7?J@)SR4Ms6EcO>U/AL+\H J],VY'Mp2ubC‹~=FŸgKZSR^)Ib.Tf:Is;C^?Ra<Th;^zEtv>]ƒBVŠWwfB¥z3Z¸qC…’IZ@Kf66gA1?/CBS])†S+BžP7SVAI%?K8M+<B%QT/Sg49\8NI)Hd/:_=@=5P:&K]1U[4`b4dfA„i=f‘CTjK\Q4P`<_R8a[4wY6”pJœŸe™“q‡£vh¸‰c©z[›Xe};‘ˆMv°a[ˆeV}A^g9jP>Q`4=sB9X,6O+HD(ZW)~g5b@´¤\Ózì©r½Žw}>p¡iBq[9OGH%Qb%qt=Z‰;m†Lf›VQ‰HsŠF[©U‘?½nm˜gotKP|KGj;W]/\R&IM2€K.Š p¸€gn[tMhf7¥E§¶tgŒjZYD…Gk†[€˜Ip›lB/uR;º_=‡W_L8wi<\l3st>ŽMƒTbxYV\D^L7psSŒ~I}m—t¢½ˆŽ×‰e˜sSoC†T9}ƒ_q—dvSa˜Tc–Mš­`›ä›½õ¨çñ©¯ÿÍŽÍ¥ŠÌ–¹‹e»…Zy<v–U‡Zi¤anƒHšz>¬Qÿ—a®¢…°c¦–az›d€K\ƒKnu6ˆqB“’fh|cï—ZÑ•}—W®«r˜¹vx|N]_2k^5ý£u¿É¥…Š_ £f›©qwŸq]T„^?¢£k©ê—”Ôzœ i~fm•a›˜\œŽV‰wT©—]³£e·œn´£rŽŸft€LxxCp€Hdƒ\€›_‡«l¤£t´Ê¬»‹¬ª„³¥|t‡V]‘U`{LTm@Qp?˜˜^T\?E#Ig5BZ-NO(]r>C].gU3de8~K/suBk‹Pu†J^t@I_*Z{A…™U’®lŽ£Y|“Y©¸qŠÄ~ŽX¥h§Î”™tª›p›fˆUj^9Qf8…|O—ºy¥·w¬_‚~M’ˆ^ÕÕ’ÏÞ‰˜Êkq¼Vd¤FQt2EQ+seLi“HzžS¤c¨Z‰™Y{ŠHk|Eƒ›i˜À|ŒÐrt<•kJª€^ªš{¾ä–¾¸wäŽuÿ—s÷ƒnÑ_Ÿk@lU8eGŒ‚Nw€N|JwƒMpzBeh:ii7…w>mªRgfMrfGd|Tt•g¡ÎŠ›ÜƒÑÃÖºq ªv¹Ý°àÿ¹Æú¥ªïŽ®ášºôŸªç‰“·gš§l‰aŽ~Q|dO–‰c”Sr~U€™_ˆ¥ošº‹¦Ì†z®eh˜TP|?LO3`P=vxNjM§Ws©`]Sg†c˜°ƒŽ²t†¡k“£x˜«Ë¸ÍÈ¢ÕàµçÿÌíÿåïÿÕìø£ÇÏœ¨Zv|:KV/bfGv~Md~HhQpŸ[rŸOV~9Oa2_U4^V6WX5SZ9hrC|ŒLwŽGg‰=\t5UeKŠŠ~£»u‰¨T„…UuwSkhLeRŒ„SˆPwz:Gi,Ol7e†Ow§gŒ´cxžNfQvYŠ„JWS.JZ7KeE\tMj{?Wl0Ij?Xc‘°~ˆ»eqŠPlzGnoIˆy\ƒ‡Wp~Q~‡^ƒ–Z–dpiq¢‚’ÅŸ“Еr¼…f©|X–iJ€\GxTHjMOlQcoQ\hD]w`p¥qhžix‡a’•`ˆ–b…’UiETp@Vz?Rp@C`1@C5?GES\P]aA;S9FF4KR5CN3EG+\F/dE1[O8LGAYH>Yb=…o<œGeƒfCvc@dH[F7LH.b^2|\4fJnuZVUY-GA/+-Z1²Q f‘9ImS_BOU7XT4Zn=\i>F\AFG4pF-€\-]fEhxQVk=IwEMh6In/Rb7Xh:DnRV]@Q^0aU2e_6^rI~€Q…ŒLWš[SdRA^;fI1„x1„jtŒugo[AiK*J74H.K8EN'vQ.F‰9PssLf@OX?]Y.8~K/V@J@)VN@a*Q\/Ys<loHy>W¦\Xu[Mk-Oe4^x<Z{K\`A^X?JJ;GN2NS+oU*Pp-=„Us?-‚p)L®jKrWMd49e2;K.HU%3^6^E1Rh(<|[-O,/=<>Š<On;AZ97Y6MH$Ib*Lc@NW?KI6Yb6Zv@^X9AiFZS2do2Tb9TeDYxLe~PVNkeMt~?`‰bUˆZlG€Hx}GQ•Tjo?s‡DQ…GIaD\k-/U1.0$O+Pb$Yj5NxKc‡OMyBKi5VY/}v=Œ¢_¾©noÄŠŠ™~i¬pL–lQ…>Xz@f€GeˆFz‰C}Q’™X·ÓošÏ€r§iå‚Nø™YXmrL`FEa6B_$@O&IU%M_2rt:«i_»|TWFTk4gtB¶ˆH¡¾q{‡gXRE½L2Àuÿ“Vƒÿ¾Z‚rDS6e0 L1#S4%aC*_uBtl5_eF{^>¤?ŸUD|€c’“cr»o¬Oº}\ƒt³¬tà’dµjx±bt§kp•[ƒžQ™Èv¤¦i®„X—ˆYI³ŠR§×”Š¡|¥¤h›½€pÀx’†H©­v‘|aa†WdvCHzAnj5•rA·¢t|Œmz_D†Tmc;_‡L]x=‚sI˜‡X€vM°qƒ²w|˜C¨ ]’»‡„}Wi{Uq}MÒf=…^Fu]”b‚}_d]Ai¢_l‰NÄ슺üœ‰Ëc›šS¢—h¥‹`—‰Oš“U†ŠN¥›k|‘qˆy[¤‰fžgŠ–jwWnsHƒM¨t}®w‹¼t³ÈuÅ­w¤«u‹¥qygpsFn}MtVUT™Ÿmi¶?G*<>!8P,+>SP,Xx7W[6ra:erKfƒJks<\t<xKi’UqŒTv…I|‡EgˆGx’S–‰Xµ¢k§¥{ªÌ‘¹×™…vT°šq¦×‡«×—h‹m]‚BŒ]ž¹k»ŸVq}F{T¶_Æ{O®´i¬»q¹oo _k­ZmHy…J†“Q‚‘J€’NtD[i-O`.gp;•c­Š]ˆ[a‹WvŠj˜É¡Íæ°øð¾±ë¨•Z†nE‘D›šS©¬j‰¼e±Z^Š@km>uL—‰JoŠD^q8q}A¦­dšb©y±ŠÂ©n¥•Z‡HziIkZ¿‹„ÉÜ¡À⛺ӊ©È{¡ªr«x«šq—ˆ`k¥œm€}TxsL…}aŠ _‡¢\ˆ¸mv¦Wi}Nˆ]wœQq”V€©e‡X[sSdYt¥L„Æ^ˆÒf‚«ZmŽZ‹§r‡›kzs_œ…u̬’­Ÿx£‡wÅ£˜ØÕ®äê¬Â΋™ eŽ¢hlyIMN/CL4LdF_|K`†QgVy•Xq•MssThˆRLi>Y`@Z^@j\:`bB|†On”Ik‘Hi‚>_\>rqTˆ‹Sv{CaaL~mU§|V‚sP€qUš‰c–Se5guFvšaЍk”˜UvyBd…RtƒYue;hX3QY1K_@dtCar6^l8fLz‰`¢®zÌÃi†œIhwFrpE€uJxGjcBcaEnnPhs[r€csb‹ŒŽ¸§œÆ·¦ÔÕ·Ñ󱁾¤®Þ~À~g¬tZšaQ…PQ‹nŽº|ŸÄ``>MvBPxMc~Rl‚Qa†Kg…Ib€CRr8?T2?[@IhALh<?R>3M5>H5HB*KR.TC0OC-XM;UQ>PM@H\7tU8K{6P\rVJofB:iN;SCDa=]Z7dh6@kQ;4G&=,0.,E=$\I!b_/Z]:R]:EV6\Y3Th6IT6>A,F=*_[*Tq1S]B^^;[U4OQ;^k@S4XiBWe=Hr^JcJH_1YW4ge6~„GvS^nYGwP=X=@L1gM*u€?X—e>z]=S.5O.<L48J/JJ0@T5dQ2vc&I–b8JaC@6^P*Q…@MjUJ_2M_+fs8r>a|RShJ£nAdVa€ht}7lHp}SD‚_>K>BL)FQ);O':K$>N"`T N`*?MxK3t…<Xœ|JQ4p=>N2KU(Eg?ER8XY9Fu97k94Y+7FR<$;I(TK/?p2IZ.GP*PU6QVLZT6lyA_zVZg7EnNNV4[f/\N-cf:j’al“em`b”eo{Vu–V†¡YpŸ]KtJm]6R‰>KmC`](Fc-Of9Cc,EN)8_@BI/P]/…t<¨K]§‡nHb‘Qf–Xo›Zj—cnŠLoˆUih€w@s‘Lf¤fSt_J]AJ_5di0~‹C™ºdÅ¢]{ŠWV_EpS+gX&HD;]=Gn7SQ1CƒD<l2O`-{G”®vq o]Cu~:C¦Òr’©r^rRDGCyH)…‚E¨ˆT ’VP“l;_=O:%@X?G@*\@%WT3wr<}h9dgOw‚_}NŠ’d•“aÅj‰QsŒW†‰<§vA¯¬nÑ×™÷½ˆÚ›mž¯f¢·gt–Wav<ul1Xw6f}9‰o9¼}’Û©•»ƒ¡c}”R–z?ÿ‚W£²–ˤk€¯oPWnHVB1ÿV8j¼£spLytTq™V|–e`—_x}B‚{U†h—šr_IPɨˆÀ‹håÁ„ÛËŸ‡šv^P]s:JN/K5B? KB&œc8´¸lîÿ°ÝvwFw–;€~5ˆ†]fuI‚f9|…R}Wh]@hX8oc= RªX”‰[•’[ɶ†«Ç•®¡|š™h‰‘UmxH‚ƒW|{JjkC]uAQrEAQ*ZK0…‰_‰˜\PW9]4@G'IwF[X2mV1dƒA~f;ƒs@lpAmpD]zEgˆR^€Aer7›”Zn‹Ct‰J‰R¯¯€ªÇŠ›—f¶Áy§`…^Ÿ­y°ß©Éâ«Ëø¨¬§y^mC`‚;³•\~žR†—L„’Nx’>r–?w‹@ly6lv>†Qƒ”VnDkŠEŠQ„›Ojt4hh=Li(Qh3rR™”rŽ f‰kB…^4gY5ÀwnÍÏ¡À×™ºÍ‘£Ø…›_™_Žºh‡šJ›€B|ˆCvpBjg7td;Ž‚Gо\¾SiŠG‘‹d¬…鬒窔|Gzd@ke:TE/P?’q[ª‹l˜~^Ÿt\…ˆ_ž€f°¡{žl§nT‘zZ¤j“‚]€ƒZ—bšµm’Åu•Ây„¼b^™BPy4[W7]dEw™Xiƒ@gY3„@{Kž¤Y‡£Ob€=[l5h}Cp{IR\Gkb^Œ„»†‚ª”„§”‚·•}«zš¥r€™f‹§tw¥[Th8SXAayaqšg}£b€¢a¦Xg“FOd5sQL‚gFpa=j`@mbAokDszK„‡LzŒGh‰HfzNitGfh=hhQz†b]qyP‡oTztJ‰zXž~Hwz=i~V•Ÿj”¡_srFgjEl‡P‚‰QkvGZxBTm9Jf;UqErJbN{R‚ŒR•[¡·rŸÄh€³ft“\u{DmkA_b?ceC^dF^nMcyNv|Sp…`~™b{–\†`šŽbœ•q ~¥¦¼µ¶Æˆ¤Íuйy‚ÆŒžÉo€¤G]}=Yp=Tr>WuG`vC_yAXvATm@Pm;RoE`OguBL^58ZC>F9QF/YN/SK0_J0HX;BTI>R<>X8^N1\7EœU7l`KACjE,Mh;NjOGV?8A515,Z:%IN"GL8M4-BD'HM.``'R[*Id1K_2>N8<J0B>"[N#]|3ll:EgD=T;KK.VV*iw<Rq/YdB_\7MYTkTFZ2U^:tq7mrLU\CQN67b6JG8Xe1pm<žNX©h:eSWN1Hc'BV9MH5bJ4P_4OU?‚R)p€9[ |I{`j[@m7FˆjV]Duw<a{8^xTZwBS‡LhFT…9^oR^l7RZ;sZ<HZ2C[FGO+6G1-2'1<?8NQco)Yi8QƒMwX5[ŽLYpXX_2G?Nn=L\AQW5U`6NmAVuCBs<HO*EF)GI,\E,I|:Ln<HV(ZX5iX>^c:`€MYq\rn@XƒXKtME`+IL,zd4wR`}dq^Mm‡O¢aošNehBop7_s^^b<Tw@AzGI\/l^W1Gs=mR3\jCNrM]|:ay:Øh4]Ÿ_R|Q\\8hk7mp>ft?e{;s@J„Q`k8vz@’NŠÀo?ؘHkIx~1ž«Ns†TDT7OW-HK(2>#aII]-UE1k[,©oEdaNis@ti<‡¢j·ƒ‚‰pbqMXwJ”I•_¡R^”_CZ@UwDtuF~ Wcœe‘fDg¢rpRIvC+GB4]1}6+bK=€F©U—±y{«ƒx˜^’K€½gc’WP]=`Z/[Z6 \1Âзªx‹ÍŽ™·mt­te™VsŽU‘¡c“°lм~oœ]¤–d{­‰‚ŸbŠÁrUªp\r/’W‘ySñ¬i»¾{ÓŠa”lMcP<ªbM¹‰r|…_~ƒMŒ˜_”§sl¯v…>’f–•enŸhxo?¶„lbâŽjØ yÁ“lÍ¡mš´wq™`NzJ4J/G@'aO8•mH´·}ñî…¡ÿ­‘ŒVn®mV–@zƒ;k `dk8rd>tqMcŒU}R_­—d“ ^lp?~€P˜‹XyˆO‚€KoyFep8|qA‡ƒP`oH`nCkoJk‚YPuKMg9‘†Sw®ogŽYq’WsŽZ—da„K\vJˆwL}œQ¤{H‚uAz€Nl†VyxDfj>r^E—]g¢Xr—P˜¦gž°qVz‘U™¥\—‰X¯œv§½…®Ì‹¾Í’À礶͑xÑspŽT{ž`–Ìwz­JxŽH{‚Dè®cÌÙk£´Ur™;V`0ZT+[m5z’L}ˆGŽS]B_jCXCj†Y‹™qŒ‚R{mDZo:_d:qy@GT/ŒXH®¢w¬ÌŠ¿s™°mŸº^¨ŒXzNmj=|A€j=dkBw‹Wˆ¤`ª¸†±ÿ¦›ý~’¾k¸›_©‰\“’Xac5>O5Nd>jƒ_q”k¦º’ÎЗ ÎŒ•Å|™ªf‘ŒS—‰Y¡sZfRuwQ…•fާzzµsz«i‡®m~˜^‚—b•ªg‡­de¬L=i.78-b_C„‘S_‚Ci‰=k˜FZ‚@RoCWvPPGZ†Ke–]‚¢mŽ ƒº¼žÅԠέžÅœ|’nP‚{_~¨j‹Â‚¢á¡ºî›–Ù{b–Qq‹f‰¨¯‰±qy§[q™Q\†FPa5Va9Yg;fpNw~Yn‹Ji‡Gr…NyZ†_…Row=Yc@bjR˜˜nœªb…›Ht@sˆ>hƒFxŠUjƒO`}GtwO}K›zM‰€HoŠSq‘]w g al•[b•Wd l{§nެs­j¡Wc’a¬w¦Ò•µñ ªÛxˆ¡UrtEajF\nKanIfxJbsHesJfnLwwRp|GVn@P\9UV;rnCz€FeoH_lJl^Ktre¢}¦Àp‚¤Ibz5Jo7Bi2He0E[+I[4Ke1Ic/Ij2Fe8KqFUjGYQ-HZBO?>KZ8?Q7bL4lR/YO6i\:^kBPcEMdAlSFbgIQ˜bDYNQZ;FY54T=%L;%%"J(HN3>+8',I E7>I&TK'k`%eY.P[D;YGE>:DH+dL+Ys8[mE?a7GU1[W)Xs:NGQ`/Vb5gR.PRTlWX\+ku;_|MC]LFC6HC&CX*OM.ƒd3‘±Pg­rPc^CV;JX8E`.=^1@R,^Q1QS.CH4nM/¾k2Å‘O{¢qtpq•W\¨vo~bT‚NWg<zo6Œo9q„Eb†L^ŒCHrH=b@6V+;M'KI*CH*;]0*O+-3.6)1D0YDXs/WqBe€O^p85€REL6eB#dj2KSCmHWT7TV+Z\6ImE7_;KL&@R/RO&Sr/Jy@M]/V`7WlEya>dœP]x[oh:exPNxN[s/fpMVuHQvPSzF…ŽA~”ZUŽVNvXHgHk^>buIYhLct:GƒL=c6WQ#O3F]+_a9Ub7Uq>Qi>Ld=ps5ŽƒAb£hNsSUW6Qb=Uh0du2[{@Tu@€Y9”^0’wE‹M¥tn»rp‘K\BMf<IsDNY33hA0@B>eP%p[/kfAfN1vG.fp?€‘P•°oh˜yh[H„j9”ºtާq„{V¼­ihˆ\mPn¡erZqWJ{[h7&»wEFµ™aE5OR1TQ7]gD‰Zn®}‘ŽT¹™cÄ‘wwuYl@Š“Re¤ehpD;P2?>i6‹ŽOf[}’KIi„Bss0ug>nQ¯¨jªÕ”‹â’ÄÓ‚¦Ý¡”ÁvŸf[Uxw0z~@„–\àÈ{ŒÃ“xƒXnyF}nMwsWŸtR‡i‰Žh’Œeª“h€´~ƒŒF†ŸS€š_i‰N¢’W¸zW³|PÛ‰e¾•Õ¦~鼃ÕÈŽœÚ›ÅhšpswUqrF¨wSǪÈý–óû˜«ÿ¢µó‘‘â£Ô‚´ÿ«o a‚^=¤eG}gJˆdN„Œke‰E`uB\|RˆxUrW„|Q›šhlœ^dx<†xLvPs~P†T|Ž`gqCvY;nnJu‰Pr€MaU9t]8k[4rY>VLozEoqA‹sDœ•\sr<•ƒLyš\]Y8eL-iV7p€H§]Ž·l…¯cމShƒ@¥…P¥µ„Šd·’j¾«x¯ßž—좟ߋ¾vœ®aˆ£]«¥Y²£a°\k~6mq>¬‚MÜ…J¼h,{}:e~Fx‹\i–DŒ…L¥Ÿr–¦c¬˜o°¥ Éˆ¹¶s‘‚SwlFbi?Ya8bzCrk>„`‚µq—ªiª»p¦Ì~¶Ñ‚¢ ]“vD‘kD†cDzb@…|I›‰a«•f©uJsF¤}[˜~YŽ„\§™g•’m¤¥s—º{šµuªª†Ã€ÊÕ‹ÖÜŽ¾¿m’ZE±][±|_†€O~ŠKwqF|WE‡iJˆ—h¢©‹Àޏs~±][‚H[s?{“\еxšÂ{ˆÆd]Es‰Vs`’ªltµh|±fo±b[Tm‡Y‹ž`‡¢qµ„µìœ³ù«Èÿ¶ÆÐ¨ÑŸƒ²y[~]BdWN•¤€ŸÖž¼ë±½ò±­Ù…‘©TuY˜n‹¬‰•®‚Фis™Z}šWZ„GQpDUhQv†U~‡V{[{”Ll‡]‘’s¦œ\y‡Cgd=_eIfs–¿—•Çe_4_z1\|5fŒWŒ¤o¡dE\p:^d4][2`^6gnQœm‹»r…¬i…£gˆªq±q…¯€‰Àˆ‰Ã’Öš‹Ö†Î†›ÏŽÀà›º×Œ­^dpF^bIksNarIaxF_h>Ub<=I(7<9LY@[lAGh54T--G&7A)EF-SJ1DO+@U3Ka<`W<_P,GU/Ti:Zq-Jl';\ 5S':[(?\1Ac5KqERxO_ŠRGT)OJ3uH47]??>>9A3/A/=@)UD&Eb'Sa=XfB`w?>o•JX…_CqTEaG=Y9)W;(5(42%:0%&2.;I=I%SI']]+_J1^I;G]FDOALM.dV,K=BaAFL5S[(]c/Uw?JwDPf.Ki7aK1DzOJfNl]'qy;QmGHbKES;BT,KO6ai3—‚F€²VO„oBMWOH'Km8R_ED^9_F5\I5KV?Sf?Sd>]`Fdj>yfA¨kA‘Q{µ„SŽ„BOIEN+RZ)`_.ov,›r4|ŽDMbKqIHh4QX(Et6@w@AT=:Z1/E-/;-.0)::9\CVp3\kJg€FGˆ?;iR:]8fR,hb3Wn@D|CFg;[T3^vCLrPVrC>R7XB*cc-F–RMU9Q[6Y_=‹q=q¿nid[tQNiG[f:v„<q¡gŸ‚PªU›obXWY@`a6dyN]vCc}QZyPY}V^wFHuADm7Yb/@}=Pc3Bh/BY=EM.N\6fr=yPv~RV~NCpS_P6M^5Gq=Jc#hi'Jv:6cEGN$gZ3ndIj†Ki”bLEDb1IV%RP'„c0[R=qP[G(Zc'ddAUf:tV4Š•B{ªV}£j¬iLoXZ@*•„Jˆ³e‰‰_škUs]ZT0t^+euHl{<jrIL–]B[N—N˜šom”„veN‘Œd¢«—­†ˆv…jªE ~^ˆy`nq[Œ†S_­cGfF=g6,G,C@$y]3f†M€tLkfY“Yq¥O¯Ð€µäÀÔ–«ŽwŠzXÄ„]ŠÜ©pwO„qGgŸTT~AaX0{p<³™ZØÆ}í垩Óˆ¦u–ƒ^˜•r‘—f¢vR«Zž©x’¬xi•WxŒD“£d—¬_·ŒXŠmR €Oº”jñ {쪈ة{Æžz·œˆ·‚s³Í“Ù¤‡”x“cLÁva¸ñÎâ~Ùÿ›äü˜üÿÐëÿÌÒÿÃlÒ{yM…„Z…„b“•luˆ^WzCwf7 tH”|Snƒ[† g}•hm€Nr„Yw—`yxDwP€~S˜~\u{Zuˆ\…yLkŠUbq=yXBtaFbvN‚|Y‹}\šc~A‚g<Œ€Gm‡D{PšwQywU„Y;tc<v|O–¢f€—M|¡Ln–J[v5v‡A¥­s£§k}‹PŠ€S¸¼ƒ¥È‰­ÑŠƒÊtyMjmAu‚BšˆZ€´hiŒE|yEoŸiFj;Wr3€¡l«ß¤ÖvƒžRbwH}‡Sâ{^¢ p¶Ÿg³¯j›ZWt<\h8U\0x]BŽtLyzN’—Z “_¤’Y°–c›ªg„“Rjb=^Y>cO2qU7…nIvvE‰TvzG^U7UD'Z@)_F.xU@vKœsVªŽgís¥–j¥‰cžsR„X=‰P<Œ_Fe|AB^7UN<lZH†[}•Qzb@pP>‚ƒ]‡˜f€‰\Œ›]}©_d”P]„QjKšc´qš»m~œX•bo˜Sq‡MuŠQo[u—[n„KCP(>-&b94t[Mš”rÁ朴ی•Ži™a]šn[reL[Z6OQA{h±¢»·…–©[gg3LO9qr]†—t}œu€Xs–\}¢fwdp”\l\y‹ZzsSxNl|FoqG|vO{eMslG`g@_od|Œ­Ë¦¸ÀkuŽ3Z†9\€Lx«t›Ø• àz}“MtlBje:YX0QY6ZfX‡›v¡Çp|¶hn–Znš]tœg€žn„°~œÄ”§Ñ°»è®±Ü™·w˜±…£¿Š¢Áru’LVbG]i@^oBXrBHjKXqQTp=9J3FUCVuJ\rJVq?J_,0F$8B+NT3P]BOj8K\.<I 2C4K#6W.>a.F_,>b*:W$7V*<Y6B[2Lg>VoGZvECW0iN4GM3?H:>;60C,J@.BS,\I/^W/TqBegA^Q=_i>c\AIvDQTJJc>?gD(XD&)*4)<9,J,:A*RO)^c'Yb:W^<YP;\`=]J/gX>GhDeT:vQ5Ph:;mBER;[Y'Ie+N\:Oi9Zh+Dh1aK1Pp8T_LZb'Ci;MD4QL3Wm>GrCbkK?~ŽP€‚UO‚^HYRXJ1I\3AN;CK0P90ST.rjCPnEXKF\T6Wn>Qj:gp>xEn•K;‘|2?>K=Uj#Py-[n3dz;jt<S};@_19I)FB"rG#m|5Iµ_RhS@j;4_F2<)*E"1K%FI)[X/^n@jmR^‡DGzJNN>FT.MX.HT*_@$jo;}ˆKy‰bކWfœiFXNO>mW(J™E@hLGW5OW=–e6c¹bnqOjyCewO{{G¡“Fr•o`rNq|<_‰COsWPl;eh2[…M_sPmiHZ_Clj8L‡qJ`1Ui1Zl-Wm:_}CM[@zMT`Ixk@h”Nc{R[vOy‚KL’aBkNKh9En0Cg"[_Qr8?gJFO$}J.U€S‰ET¡hUi<=z4:b/KJ(SN*uR,Qo:Lf1]h0S^9|j7zyH{«[x¢`€§gu§o`oEfm2v¦Tm†Q• Wƒ¯v\¿…\‹_m„RWu<FZ/M$´M_ÉŽkgV‹o6ªS§¡€™§v“‡k•f]–ZF}rIZAj4Ž}P—_bzWƒ€CUjGj5JQ/TS4im4f}D“–Jµo§ØƒŸÁrœŸg‡KjlIsvCs_?Ø•`|ú´ŠŠW²Æ’[Žqdl3i~B{‰G J¾¢f¿Ö‰‘q[±xK”‡[©šnonrQr@¤Y¿¬ui‘\›l;“¢f–\›]ÛxT¡g¸Œc¹f’~V•l=¹„FÔ„K¾™pØ™pÔÞ»¤Ü¶y}Y€R¯m°ÿ‘ßù—Îÿ¼ôÿÂóÿãÔÿ¼zÕ‡l„O~pK•^—¥sž_tVs„Ou’Sm¦dkU‹†[cmJkM3‰dGŸiKavI_gDciF¥pPu›e‡‘gc_@r~EsR~g;\X8kX0lkEvIwp?izFr|<r„C‚}E‹’_uwHºqF†Ž^nb7ˆ£^‡—a`…Bu˜Mz¦Zy˜K†´\ÑšU¦¢u•X“ŸZº¢cuqB•‘aºym Zhz:~•S‰´dœ®tÄݘŽì“­Èw‡¦bi“S¥°r®Éy»fª^•¢fœ¢oˆšaŒ e}¦Xy–\€”Ws€JrtGª|c¥“g¤®t”»s¯Õ‚k¹Zh~?jj3eu@dwD\n@~T9ffFniD‡wM†sIzƒM‡‹Reu>cc9`Y:_gGhlIyVy„\Á¤‘ñÆ¡­¤jœ§l„ŠRg^:geDXgCrTDmdKq{Q‰‡]”d©_w€Id^A{|]’šiŽ—]‰™\€™PbvCf‡K`€AfvIqOqQdˆPg€Me|;Uy;Ui;xy^·…ŠÀsQ{?*6"'6)3I9Z]V›¦˜Îü©‹î˜rÀ’Ï‹Œ¥`oo9G^-6P&@F2_ZK{ŒUAe$:E&IL8tbW‰Šav—Vn˜P‚Ÿi‹œp§p©…¬pv‘\tƒNi~JkwM}‡V“cŠUxY|Ÿzªtœ lš¨Z{ˆ=`{L|™~¢ÖžÂô§ÎÕ¨¡XuCrj:€e8Y]>VmUo˜j”Å¢Ö”ßo¹fo¢\k fv›dx—mª¤Æ“¯Ä‚Œ§fz˜nˆ¬‰§Æ… QcmKis?QhFXlPf‡jwŸo{’JO^3BTHYsZ[{Q[xFOi77X,)G,;C9MZAUl?Sa/]P"HJ"1G'E^5P~EK~CCo5E_,:H)DM-GQ%8G)?U7Ol9HP.bN4GQ1EE3IB0=A4UF.\Q1oM8Qc9PSAMe@]aBF_=bK?dX;mPh€VBt_)RP>05[3!ST,Y[>NhBaT=oM;cW9VREMI>bO7R[6pS9h]?s_BQ_AWU?M[8CL9L`4Ae,FS,J`.UY'>[-TQ1A_'F]8If0Hd1Ga4[[9]Š>clM‚uCgŒK]sVcc<PxHC^GDB2.O1@A.MR'^K)go8YvZ@\=[N9bf:VuCJbA\[:`a-{_3Gœg<Sd_P"U{&Ys,Rr:C\2ON(?n1;U,?P&5@&BD)ƒK!–ƒ.QÒbwvC‚EJuES{<Z„@nƒDhL]ƒ`atHhŠLaŽJAqQAQ8ER-IO.RZ-Xc;d^6pm<wSYxUZ_OUp>jk@cŠIE„T<M2bM2w€E`›e‡€Sˆ]€€\ƒyG‰r=RdNhb3^z7Xm=Jn@Y]=To:]mC_oZFmCAK<pT(L‰SIe;=c-QW+Ml0X]0jk4x€Kk·z\¨‡n‡Pf”Lv{C}‹NgƒS^„Z]xLMˆD>i0?W ef0K†TBh?gI,R^5|o.I›QDuOSa2H€>Hq:BrBGn<M{:b}:b›QZn4ld7š{:y¹i|“[|©lH^]U:|„Fa‹Os›WŒSÿ`¼¼ŠÊÁ†ØªRZQa1˜M{sQ×w?‘Ù|¥}„­t¡†O|‚]oS?pO2j_-rc6TqFvzC˜ZpzVL„e‡W>m“IIzLIL+YR)|ƒ>›Çu¢Ü‚‹£pvaFt|@iYK£‹@gRWd@ŠcB§kUÃ|ÿјËÔ½FaDOh*Wa-wo6ª†FµÄ˜ÈŠ€‹bx†QmzI|rQ’uLlqLn†IŠ„M®ŒZj•]†~=­“L¼Ÿfª–r«‹dŸŠf‚tTziEWK0J6K<(UG'}[.¦s5ήYÔʉœ·~Nˆ_6àžpÑÿ½ßÿ°îÿÉúÿÿÂÿÀ¿yhqAwiC©®}µÎ‡”µq‰¦o£|Кt„ºz¬sx¨qpµsjªr…©mu…SmoCYN,iS>•_²¤q†¬nQl5hu5uC³}‰Áxxˆ`se=ka7ll9ioAl€G˜£d–°|Æ×¦Ç³‹ÄŠr£y¦j…¬bl”U}T}‰K€P`pB‡ŽMq©Sš„Dñ¤nǶo„ŽMc•T¯u°ö¢}µqb€F‰IzJ…zE×­{ÿ°bŽZ¦_“Âk’·UsšN†{VÕ¹†¾Ö˜§lv˜Um‰XxŽ_‹ƒMŒ—e„•^º¨o Àtœ„U¡‘i®¬j²ÆÃq]vAvg}¿€ŒÈ~²á‡ÐÑ}ÐÒ…Š¦l€‘_ˆP‰~S‡|QŒxX†‘eˆ~^ƒ€Z„`œ©{ØÈžÿÏ¿²sÁh®~]‹ˆNy[B|gIv~Rƒ‹[‡]†‹^miJŠ`ƒ¨cw•X‘^~“WˆˆX„–UsˆKeoFewGUo4;B$PP+X]5foB|ƒUŠŒPWs.G[)>R(XK?jfI`b;SW8]ZOzŽw„‡’Ù–´Ý­Ûõ¾ÙÿËËÿ³£Ëki†HUy;Aa)1>!14-jeXjœSKBG€BI‹HRA`j:n}@n‹GtM—€d r–£z¤xz˜YpŠTp‹UvŽW—UŽU„`Œj…¡axšUyžQn‰DcqPˆhŸ±r–‹U‰dG‘aQ¡oGrX:haKyu\pbxªg‡º€ªØ©¸â•žÂsx¤kxhw‰T_yRj‚j‡ rŒŸdv–Uo„f¤vŸ¸lŠ–P^vO`ŽVd—f_Šbfm©tzž_Xs<EUM_rWb‰Z^‚NTwHNnEMp@<_8>^BLc>?T+5M#9L%<I(:B8XgStŒMk?Oo*6L)4.7.A$0P5>W*K\=FTAAQ3TL3HJ87;@C9:IH1|Q4wi>irJV`UT`RL]I^TBoP<kmDRxU6YU>:>hG*~N(vcF[RMj\XIDfN8bND]TFiPAZSB\TC^O7rd?€dHR…OQfOOc8Cf:JV<Ei+De)Ic.SW)B^*J]6W]1qh0ZˆETƒW\gEyj@P¤XIyuM^;<e2SJ-qb3ZSGtY@XLHW/:Z8RT=`_)K_5VQFkg2U¨[CsdKW;K`42\9O@+|N SNLpkWk3Mm'J[.@K.5I*QI%>m+@E1?J(4O36N2JJ&‰c-†9dÞ„iŽ‚t†GX‡RQhJaT6fU3IR2hV6r”Og€ZA‚M>VBPY3J]0`U6W\7pd?ro7voGc“i]‚Oc…MsUpƒJO“U`gM{mEv€X“™`žƒVf{XT[CVu;lf7MlHMSF[j2Uj<Kb7[_5boBMvKO^@P^4<_5iG4Bs<HW<=b1Gb2Cb/Q\0j‚;Œ¢X”«iv®‡v«wOœh>zN5c>AL(UQ+eq6L˜HA\5JM(dJ"SˆFaiFY9Gm9[w/f“M]‚\[Hj‰Tk|Gug<t@žYÑ€d®sTzLKj.qz=€£P|˜pz¥ljˆ]dcAWHwaEp¨lx_Vë|@±dÿW8š¿œk›l¤¤a|¡k`gE–m?ëzHÖᕤ¦oqrPjŒQ\…\Z\:JU9oI4˜™b‡£|xŠN†¡]~¢_{¹gŒÄqUÅgRsAd…;¨¬S”Ãp]mN>\/H7%X`-¡l;ë£|¾ìÔzûу±{|°wؾtÙ®ŒRn]Mz?cy9d…WUbGˆƒ=§½n­›r´‡`•³~—’]¡–j•¼‰}±€‘œ_­­~©œfn Zc{:‰„C¡d´¯y¯Ëˆ•°ok£\Y…GJ‚NL{Y]‚Nc§\t¤XcœLf~I]k:Rc1SoBb€M{J¶~EÃÁ‚òÿ ÿÿضÿÒ_žgVf2zf2Å’]“‹Nu„A¬zB„U“¡`~ªr— f¬¹ÆË˜ÉÖ´¯ç¬‘»xd‰JKf4HZ+‘{=¥ªpjŒ\Ph8i~>bœNnh8lL1„I/oU6q|K€‘Rž[„—U¯Œ[Üpãd„qLgb:‹kD g‹´lsUr•Yg™PnPb‡LƒŒJ˜£\¢²n¯XÜ£\—Q‚{?¨’WÒû§„éˆv¤^sžJ]˜DM~=~U¶É~”µ\”¤a„¾] Kn‰I‹U¦—mÕ´tå™oœ¤f‡ž^s›bZx8s^3›‰cùx‹Âs’š\š•Y °c”¤l†S|Y>jK:„naâÌŽÿÓŒÿΆÒÂs°˜aæ†s¸­v¢¼|•´h”•S–iEÀi]¼”x»¨›–h¶šÿ÷·»Án{NqLŽ{I‡„KxxO{xN„HzwW‚mº{|¥n‹†dœ£\†zM|…R„ƒP{…S{Vk~EsyI\u=XrBO{8Kr-Zv.VzAk‰Rp—Kd…5Xu0Wg6Ib;DeKQuYX‚V[pJiaVŽtq¥˜|§¯¬Ó“Áá¿Óޤ«t{–L^v:GU)/5/.'QSJq|­d®b¸l·ca“?Wq5d|<M_0RI1dS<€|Z”…[‚Qu‘W€b¤j…¸fVwtEnYI€Xƒ›Xq–Vj™_pŽY{•Wv™MYs=Mb>]`C€kDzqA^w\} j†§fxªdz±‡¨Ôœ·å™ŸÆq›cfƒLd{@Tn7Q_=emLx‘LmŒGd~Xp’f|‘Uq|ImŠ\yŸx»€±jq”^l‡t jz‹KI[:U[SkchŠO]…JWsEbvG\k<JhNRsGHe.A\-H`2Je1=X/:N3TYBd{Dqx;Oh)1H #5#.B3A_2C`'OmL^PQ]Q5ak?OnJS`KYLBiD:e]:o]DmjLknTTpWCcYZWMWaFo]GSuKGSIQF6bT7~g5pzCR‚UNbU[OA^^=YWDNQCNN@PN;`S:d]:ƒl<…qG_Œ]ZoQ[k@InDCb@K_=Ka6Gd6ST*PZ,Qv7qb<™n-—qF\~Qgu]•p<e°RV–ƒM}TFxCTgGxuDl‰RM‡jEcZNW=K[8Kf@Vc:EG-UH5–g/_•NFˆ~_gAQl=<P;XL-lc%_i:OŠ`Ao83V(7K(9D$;F#JQ%9[)6G2><@<!AW+H\0R^.‚U0–d0QÛ€lr}O~??‰Y>U;AJ!KC(|Q'c¬US€dKX1:i??O9FH'FA*RP2fi/_n=€b6j VolTw…TdtSpxJv†DVmOhG;mzIvSld>WeEWX=Yj;`f5NQ7Rd7Pk8JW2PV3bV3c_8ja<esATjFLe7S_8Oc;@tDM]3Ql.Ca6h\)„ŒM~¥c|˜T|¬]ržpZ~O[Y7Ub9GtBEkBnc+Q”ASf>AQ.\J'Z€4ErJPp7Wn>ln5m~DG}^\\*FGEnO:]%F="f=¢o+†°ha¯s—Om\p|G—a±pX†Tb_7lƒI‰_H…j‹J3ÐPH‡dVK2q>z=’£f“˜hœœa{–i…xQ‡iAfuD~>š£aÚÇt¾—ez`“ƒS©­uŠ®aqQ•A¡˜LŠŽPzS9•k1l©U}¬N€©_†š^r»uBŒTP<#_f5UoE|€9ŸŽT“’cž h®«eâ¢l‰—j†—hn¦u§‹NÈ¡m‡’m¦°Z¤Âu‹‚^³kI¶g`blmH™xE{ˆJ›sGšŒWœ“as‰T\‚? l7¤ŒmÃ`ÿª€ÅçÐÃ×¶„阀šhgrKqn9~ƒGužci…Mp™R_¹xQ¦lVj/}[-ŽT‹¥U§Và¡lÆÿœ°Õh[‡M[t8yƒ8|¥VTw.lp/‘˜fÏƒŠ©mp‘\muK²™i‹µrye3]1”uU`ŸhMˆMa‹NŠÍw›Ôm¡d_v>k…EwŒQ^yEgc:n}Ent@‡“V~’[ŒU€Ÿa‚{@wY8}F6§Œm”Ï„€©`—›\šŸd›œfŒ—V‹ŽM’^{ŽM€‡F‡ŒPÀÁ†©gbvN_£aXq:eS1Æ¿Š§Äy fi¦Y€£R…•Sr€Q¼œl¬ñr™GŒ˜OgLƒM›ŠY§©r»Ð„‰ªZl‚Dn™b€£_cŠH_z=q|0ˆA¨­d§[vN”²a~«aƒ¡^‡©lt­n¼¹†Ú׉¶X¡“Z–‰SˆmKvnIŽpH¼”b™ša{sGo‚Hi€O„_¯žo±˜f¯ˆhÒŸs¶£k²’j˜`¥£hžÃv™§l‡NzM„š`Šºh›¬s¼•sš“p­©x† ]‘O‹}Q‡‚UqŒQk{Mv~S`ŒOb—[zª`rˆE_v>kˆY”¿ á”~¿iZuCXh>[]=[VGuxft‹hc{YghTx_T€oY‰zq Ÿ–­r®Šn¥sŸxQRP,=A.;A+J@/JI8w{V…‹P‹•^¦º†¨Ó{ªQZ„Gd…J`~FNmAXnBcpBcm:i{Eq–Z€³o™·m›¢\‚…Jko3SM0XG;qsDxŠ_Œ¤w›©h~UtƒOwˆQlKjs;hl9_n>n†W{•]‡’Ww•c¯€™Í•«×“¯Ê{ªVgƒ?Ol:H`88K%9>.\]?^GZƒPi“Rh…ETd7Ub:dnJu|[‹^‚’bh”]j˜mqŒJWp99[NYk]k{O\g:Ti5DW5<G?LaRezM\c4I_0Mg:Ri;L`34C'*6-I\8ab6jV+HV);W3E\8Ki<Lh-&6:F$+f3#~^0˜|F_…\F`[BMAgC6\W;\RHtWQynU_„ba~cnqVqs]\p`~qUZdHtlJVzMblTN];aUDirE_tIaXK_NH_PC]UIaXFilGryI‹uHX}R]QIPf6KS<gT3_‡?R‡MKvLOj;O\3IS1sV0Mn8TVKd[2id?f7u6byQfvKmc:jtLluTdsSQTNmWWg@nkFIwLHhPD`+QX0ia.„eAo§Sq‰b?]T@;1OT&\X+]w6B|>Fb6Nh4fr5;PA[?@W,Q\.>U28=(=;?I!6\41T*6C*‰9 h*XÞ’j€‡RqJ=TD];;U1Q/WÅ]:g^XK.M`1=Z;OF)WM,`h>Eq?LM:yL-Zv>WYQjV;g’DeŠPc~L;vRU=Aev3P~I]b0qyCWeEZ^?Ef3Ob<KwGB^>JX2ES+JG1IO0ST;wk=]pJZ†MZwF_s9;hCQS1Hh/Q]3jf*v‰J`“^‚R}Á\N¥x]\LCf/HP.YU-F~Mw{BG£Q]P;IU'HO(dp0J}PKV+=i7@dBX[7Gw4Ef:€e,T¼{L‹iLuG?uEl`;|?œ­hz¹rlŸfr]¤kk–ivbDguDn\Fu‘YM_V’gE«•P¦ dM˜z\k>A—·wšªr~¯]CŒS:c;FK/oW-‚zFºš[Ë¡r©­‘u³ˆ„·iu¨Wa|EO]3Kj/9F,>@":K'aU&€GwÑŠ~yT “^€ªjoo>tj>gKDwFz†L–Áov홪l}¥h”`“·†¦n‰‡P¾‹Vª³ÓÒ—¤è¨•gƒdI„ƒY…yKyxE…‡Y‰ˆQõÜ¡µÿò“ž{znKqu=a„Cn]3Þb@§º‡¹†ZÞ‘pװΊ©õ³¹ƒn _q™PqCiŒ>š£RèÕ‚ÌÿçJìº=lDEQ'YT&fp+Y{7Y+|ˆL`œIvŽ\s“Gˆ«OS|7qj.ã”X¿¾{x•StzGfiCœrHžµxd²y[¤bk›fj[Ž‘\¢Ùб¹ƒ™­jNgCRK!tt4…®yv³t‹|H†‚QŒœ[Ž—Q£†W~‹KˆzRe—Z]S2gG/}L<ŽƒS{¬Yœ¬e}¢a}vMh€GnzCyƒL}{J~~U³x­Ê„»Ðˆ¥¾xàÑ™…ß–f©eÁ´ƒ—ÍrdT1‘sB†•U‰™Ru‹JwP¹¹gˆ°W}”I}†H‚m9ŒzG‘~L¡¨l}œT^}Bs{EsyI_uAnoM^u5a0Š~Ky…Q|wI£žl¶æšœÐ‡›Áu•—g®¯•ZymGqmDzoByOŒ}Y‰LœŒ\Œ„Rw|PpnLkP™“eŸ—j™‘lµ°…µ­o£—^°V™•U —eñ¯x¥ _Žw@|E˜“^˜“e™}]“wb²ƒr¥‰e¨—]‚€P”N€ˆRp‚LŠˆ^•QuNzžZ…•Rkn=\^Fy‘p³ËªÖá²µç”|®T^q;JE,74 B@1ciOeqPbmHm_H}^M‡f\…p\„„_–_¢‹e‰’^etP`lKllPa`KPQ;IY0DJ&D:6{oh¤±s’­Xi‰Ih‹SnŽZqŒQv„Kh~Bjs?c~Bf~L’„\Ÿ–PƒƒKŠOqˆMgs4RP*RW0fgP†„n•kpˆOl}IhwKru@^l8Sc/KU3V_DhuJvwN}‚f†¡{›ÇŠ”°k„ƒOwl5QX)CM3AU48L(:D06K8Hb<^sOoŒL^{5EY&5U*8[8FsIKR^ƒam‘v‡¤wy—WWoLQlW]‹fcKAe=FbD>gI;^<CW>HU8<K)A\*DS/BJ1KI5OV1@V4R_@Wf-3E#7H-GX;U^<[l=Sh/,!#"6[*aS1vo<s~Jg^P„PTqSL{U?ieDgeYh_TshUoy[T‚^rt]x{QntRsrPHt`BXUfV8cg/^oGagD\C2hD8cP@fXFx_OdyMoiKvWAJjMGCO8A*:*%Y-kY$na5^NNˆNG{KU_7yY4JvBiWKtZ0UZ<wL;s_5Q…KDkSHB*??#JH/e\)Wl2SiCTZ;W`CBZCAb?J_3PX-a\2fX:–m?G®V-K]H3$S]'_l:Wy:Wk7Vd8ZA6ŠU2KžfIZWHX7GhA3e;)H.-+$V+;s+7L>1V+EL(“B"”{/BئRksnf9]‰H_‡N „KUÀsKf`K^3<M.3H7II"Za2Ki;VT-R_BZU5WN+NT8aK-xj4c•TeYBvKPRA^y<C†M]\4qg.Pm9O`>Zl8h‚F[‘_JgL>L4IJ$Vf*^[7xDz’`c~S]uJRyBBO&9M+EO"IV-O`;]y:xyJE}Oˆ>4ÂBU¡fGo_5I);H);P/KN#€z<<¤W5O5EL K[+dd/5N@V/gb.MtHG]<Nl.AmDp[1Œ…H]­z`pT`c1PpB€ŠFrŸRtuHpEƒ˜g¥uy˜_zFywE€Sq˜o˜zOÉ´mz·ƒ™€S}±{]ŽPwo@{uHzvV“WFw{UmzN`|LSƒ7po;vŒS€R—Z¯®…‰Í§T~f+[*2(ED.F*J,X4g?¥£OÿÏ}ƒÿêt}Va]7Sg=e‰P‚·f‰Æv˜®v¬°tµ¢v‚½³y¥É—€\€Qn{RtD²•jÖÛ¬ÄΣ°Ì ªÌŸ¾‹tµ…È„a¥´‡ÿäžÿÿ꣌pdM]R1…DbyQ`h6ŒnMžˆT»X£šƒ†_®ŽVÿÂ|³ë¼‚¹u‚¢Wt‹Mw–Fƒ£XªÉzÌÇuªÂwwÊ™W¶‚L‘OSœ_lH[g@{nGŸ®M¿½ga¨a_w0Wa0__,r_)sl;|I|ªUoµnžd¡¬v£ÇŒ¥Òޣę¹……»}š˜]qb>vb?^‰\Gt?Wl4‹nC¬¡i~¬y|˜Tž®[œR¦E²¬a›’T…¬eyˆPwcNzoY“¥pª˜oÎÁ‘„­mf{J`b8erFo‡Lžt„ÂŒ±Ù§¾ñ±Û‘ªŸjÎφÅí î…ÈÄŒ¡üœRj@Y_7t„PsŽTbIZ…G{ŽLpŽArw<ij<fwBl‡@z‹F’™X…“TYy7Ia-Pg)gt8t}Cnt7d…;wŠAªxUo›^sŠN”†`Xjs=OG1pVL¥œzµ·v£’bc™…c ‡XŠxE‰~NvqIaVB„mF‡e@ pP†‹e­›xÿ¾Î­iyŒQ…M‰WˆN”sHžU€tHs]8ƒ^E—dPžqV¤m`©_•I‰vCtI…‚W‘e§›n¢šd‘Te’RpŒ`…£gr›[h[†žn¯Â˜ÊاÍÞ¡žÑ~{¡S^d@FN.6C*MM9V_<UP1YK6dPGpaVyf}oeŠp]œzf—£y­¿Š¥Å|¤™q–‚`viGUeBP€I=k=VoX¡_u‹Hdy>n‚Dx‡Iuƒ>kr6sm:`s@g…Imv?ci:VZ2TU.[[A{€NxJ`y=^_6]Y?rcVt‚ScnA[S1OQ.]`?[iEZdBM_G[k@Tc8^T<xkM…™s™Â}„—OWY&6?"3=",;"2;->R>WfU€†Y^q=ZtA^{=Rj2A\7IxJIWZiz«tu˜km‘cs‰hzƒRdpM[u]s’iobp‰Wo–g{ªijŽLNkDOc8Pa3Ga0<]-8N*1H.;U-DS2PT7[[=RW8?]>Lc6R_7Wb9bn5!-+(&?(!U6$Q=+iF2mp;XƒVBlMa=E|:8ˆJ5NLJ\SHPL]Q8nN5€cBˆNy]kŽiM†q5[QPK;DK/LD0LW4gW5cQ7^eAlgG[eDEeJhC9‹L/Sl?EII&G12$A'Y=!\V*k]1bf4alLj€Kz…B]uOUTEGL?XF1ZP*zg5nh57bQDH?BG%BQ-CV2PO*Ac/BKB>P6FY6DW8E_<P\/Gb4OY8uZ8bŒ7>ž\YP?{l/R‚?F`JTT,9N)MA2†a&;—\BMK`T.Rg=?y[3j?)K;?6+UN(UxAEr70X1@@&•>q‘9\ÀFm\NYByO.žŠ=NÇyQmWAe>DQ;BT1[g/hu;L\:uJ3Va<5MHC=*NR%U= _]8|u2Y SE‘`W[>hw;K…TAZ6dS3U|:]}Lq…Pf‚DVpQG[9L[/ZP'}S(tzVž‘H[‘agRM€PJƒI?q>2Q,I<"Xj1jˆAj•SEkT6J.jR&†±>b³o;ƒ[<K+;G%EU+GP*y`(F¯U:W7:R&=H!kN#Z—GIeJBR.=O(@R(X_.PmAQZ5rd:dŠDWŠgNsFZf4w};F{DPQ.hm1Œ›_„®m‘Ž[pO„}?—™O²aÊ­oØÇŠ–Ï™©rrÅyb¦qm{H‡{@ƒx]¿vP…}Pb]?QU.W\6{xAŽPq¥u“`˜¶l°Ã‹Zº•A~[:M*IN%@X+I;)hf1ЬS©ÖˆäÄ•ø¨`x\VG,}U9¥¤b‘¦kfzP_Y8¶P…Ä–rœo©¡c»Œ”³Š™¬y†”]ƒQµŽb«½yœ°v‡Us`DØUC“§„¡—cÿØ–ÿÿ韓€‰{^guOvn6­}Oœ†kuXÎ|S¦ˆY°‡i®ŠgrƒQ…G·˜YÌÛ¤Ô“s£j T~ŽN–NÄ£cŒm}WJ£ƒ]œ·ft¤\’•M]‹Pz_6‹yO}‚B™¥`Z’M^j%jw>er:]k:]r/‘?•¡\¬Tˆ¨c–°l¨½u”¿{ƒ©f‡­d’§e€žTLŽSQI*s^;f;iƒHˆ‚RšU‡™X¬£j£Ä€š­b’Y¨¥c¡X‚ŸZ–¯b†Pv{M|wM½~^ÌÓ£wœZgrD\V/xmA_s<Ž|Rðû×üÿáÃí­ˆºuntA‡mBœ¯uÛã ÈäŸÚÿ¸Üh‘UsRy¦UŠ©_‚šRkz@cq/la9˜rO•–U”•MiElv8e~GLt??](Q](Sj'jl7`}Ash:žŒS’„W̧–ÅŽ‚¯u{£l…“l›‹l©”…¸¸ï¯éÝ¡ÍÿŸ¡ºn”˜Y{šI…KxwFq\@lcDyh=‰dJÇfº¤nÑ e„Ilk?y{S“T—ŒT}˜ZsTw€Gcp?Wb?q\F˜gVŒ{bzƒ]rtMne?jc6ztD™Vƒ‚R‡‡Kt‡Ci…Hs}P~zQ£uW¢‡b™¢z‘«~©Ä•¹×¢ªÎƒt–Pei@]X7KQ5BO2?L-@@,GB2hWLŠ|g°‹k¸ƒ`›_‹ZŒf¨¨zÓ¾ƒ·­fšˆh¤g…{Y‰“gŠŸ`u„ZŒ—`pCj‚Gx„Cw{Drq9_n1Zn<i|O|…DrnAbd?`dCfm?€N‚yCcD†]=fe8Ri?`mNnwLhp9KR,EF5O_?ioCckAZnIhuGfk<Xf>PyGl‹c’»|‰·ZFn>:D8DP9IN6BL@\kd‘q¢X€p9\X:arCZ…CMvJltW€‡^sb‚†_xƒUi{N]oCSdDQbNYw[Oz`X}V[ƒJeQs}O~~I]mEL[6HS0Dc4Jf>Jf>U_7Sc1CZ4J^8VdCijS‚~T|DYj4PU3NZ2C:$=A3A73L;.MB2`=5UG6iT@VfK2mH?QCJ7;R13?54:941D,>7"V3(<*˜fCX’bFvvMHM?e<FN@YH.Sd5SjCT_E\WAXcBBcAHQ@^K3sL*XR@UC8<Y586*G1"VA,N]?lO1aO']nEqa<g?Q€YMfC;O6V?)Q>%UZ,He0@E9=F/<N.:I+6D&QM'HV(>fHWU>Uj<:\?NL6oY#Rw9TrNVeGY<aœ;kˆRTyH=tIDK2AI#=9 ZD)|t5G‚^HP<UR:mH3grPZ_?@hDMa=RmANg>Ct6Dn:5V,`V-¤m2\·^D‡E\C_t?Ÿ™KqÁt^—TORLvLUV=p{9h_Cld=b]ETO64P<<<(?T$6Q)HH(nj*mŽCd{TYUcŠPN…HQc4d{GrŠIb’aUƒZVq>Qw?>Z<FR2Wp?‰‹@˜®\„ÍcˆÒx„ÅfŽš_‹¶g`Î~E›piwKi–PnŠQIkRAW6GR+k]6²¢Ddç·9l-HA?9 6L#9O#rW#U®L9|[7O*6G!vg0]°X8oQIS&?[4FY0\o26h7RV1F`?Z8Y pUMGV`4Qd-Hf6Vh-rx;zŸh_ŒXZsEoPt“ZŠc§ŒYÒÍ{ÿ螘ÿÀ}Šq¸w@ŠÙ“kŽj€]Œ‘`ŠŒa{oCwrIr‚P€±r€ÈŽ{Ňxxd~˜k–Ê‹Ë“Š½€n»ˆX¥€]gFcr0]sDt„=µ˜N§ÒŠü™hÔþ¼lé¸`ˆTŠah{WyHR“nQˆX‹]ŽÇ‡ˆ»~¢±zÁwiÏ䱯³žxŒj¥‚N»¹³¬ƒ}Î…WaHqa6¨‡Zˆ”p÷—Tÿù»ÕÀ²ÍŸŸÀm~Wˆ{GhLoTdMu‡Y‚pJŠ^KŸzC†Ž`~”\¢ŽN³§nªºz®q|—T²•Pv{O•‚Rym[„gW¦¿†Ó‚r¸np¬bl™Rzš\m˜Xs};‘¶{g›TOk0sy8|†C~NiˆPr‘Fƒ’B®­W™í‹ˆªrš°p‘Àt‚®j…¯itŒToƒLh~>bV4u]Cow@ˆˆIt“Tz…Ož•c´Èw¨¤až´p¥¯i—eˆ‘]”˜d™Ä{¥®|§›m ‰qœ¯yè礙èŽs­ZRc6\X,CA&P=ÿ×´îÿÎÎüªÃÿ«qÿŠewDÿ¼¡ÿÿÞÆÿ­Ãø”˜¦_µŸj€©jƒž\€‘=}=a]/Vj8OK.m€JkAJb3bH)WZ5j€LSq?=^0De/Cb*Rk5p–U‰¢g”ˆSŠRvvE \?“ƒjg`@•^U¢„k©‡dÒ}eƈpó•ŽÜÇ—¼Çpœ¿_“©YrŽP|rM|jQŠXx†Y“’cŸŒl¼ŒgµŒ[”}K|c:vmH‚|Y‚Y„™a{‚QWb>SI7lUGƒdOŠgUƒ†gk}•eyŒTwuLmpKwƒQ‰{LfDfAg†CjmI‘ŽW~”Y¡`”®t“È…œ¼Œ¼É£ºÝ™œÌtqœYj|LsyI\sE_kMQtEMV<]pPuƒe•b•{KuM„‡P„€Q˜‡g®‹e¡€R |\³‚bš}W}gY—~f|‘[‰†^~Y€–]ˆŠUwGl{FZ|Dg}Vx‰Z…{MqsB[p;V`?ib<re7f\5JK,>C1T^Ko”_lžZn˜M[{<^`@^bCSkBXpQ‚Sg…JZn>caG^wMdOc—b„±Œ£ÎФ»pƒˆNotPijPvjg¨‚±¬n‡BQT+7;$DN.Zj8[w?Ql5F\0H[0HY3Mc;Me=OlBNfN]rbjŠrp zq§u‚¢\qŒG_nG^mTdyW_uJOh:MaEUgDUU=NY=R_6Le8GdARhNXuO_cHg[?hU0CT.BZ>HL:T@=iL7dW=MQDA;;g42LA7S=0pP6JoH2gH3>H215>)'9(83">6"M3#ŒC,\|H?}mZW\?j@TYEVV4Um?U`LQYB\\<V\>B^=<[@TL*\N'_S6bT4PT8YJ:uQ5b\?I`CFX?eP+eg0ˆi?c}CNe[NK6?d34V1I9,JZ&;@2O8)OE$>T7=I::F/EP.RM-Lj2MXE&T9+4+H4qP"~o/g›VV›kauS}Id–MVvU<p?7a>>Q-X< †J%cƒB@o[>G9F`=ncEAvECNACc1RQ<Ez5Me>ji=t™L]–JpˆJo~QxAo²SgšqŠ›_—¾elÝv¥b‡—PT™ccuY?zC=E:W?+Of7XX=<^=BN;PI5KO0OX4fi0^„CTyJzeGj©VX¦or…Id‘Vg€W_YQ|TZx@^€DlS’¡W’¯f–¯k®°cžÅtm‘^j‚Dj‡P€€A™P©¢a™Ý„~ëJ·‹IfRZ`8Š–Ex¤bÈŠPhá™Iƒb3jS:Q17Q4?Q$~V"n˜GF—Z;dMZi6ƒŒJw˜YO“YMrBHT5Q`0Jn:J\2Jm8SZ9}h;Y§m<r]>J<R!OK!`l9ŒMy˜h‚[’Ž[–|X¥™g–Ù ÀãœÄè©´×™wtTf9‚w4ƒ™J`“smX6|pGvnKÚoGš`}¤m‚¤n€¨i€¨g†£v r’¼ˆ‰Ç—½„œœu“¿u¸¢ušcvJ•M•¬n}WÀ«wÿà–¯±–žºzf™wphF¾¦l’Ò™¥Ð©Ì¸£|´ôªÒ¥€À©—óÈ ¦ß¦‚}aÛJ¼¤j´¥f§å³Žxc„ÒŠ¶ÍŽ££qh €ZÀkN£pS~i:`Z-‰k=šbAvI7u];‚wA…wE†{A€zA|w8|x=ΘRÃ˘‘³‡¦tp“oƒQˆmKŽczubœ|cÎΔ»Þ™³õ²–Þˆ’´s˜¹ud“M‚g7–¨f‹¦Ye‚Pr„FwƒIxQ}ªiwœX}…@بvËÿ¶£Ù}ɉ Åvžê™’Öy˜`u…TlJd^GŒzT‚T¢”]ƒ’`•«V›©X­¡g¬¯x ²q–¾i½°lº¥h¨¯q±¼ƒ³·y³‰gã¡”ÿÿÝÚ뮞Ù~l–C\z3EZ*WH.^{<¬¶_Ù׃µã–µã†Âë€ë{øÊÿÿÆöÿ§ÄÿŸ}áw¤G’³Rf£KVq7fq:c‘Bcy;df:››\˜ÙzuÏhW}Ae…[gzOZS4O[7Np;Hn;H_&rJÏÀ†´Ä‚ªsˆªro e§²xÑÌ…t“VªoRÿŪæÓœÆºŠ¹ß‚ÿß•§ÆuœRsyIy‡T}N—uN°zW¬†h™™p½R±lY­}\šxOlS7\UEahCsgQކ\ysCod:…`JœzWŽYG„QP‘`“‘Z­¥|žÊ}z¥Q‡L†Rˆ‘Mk~;^t;[l8ywQ“§o†¸cx¢\ƒ©g¯¶‡¨ÔŽ®ÐœÉ諸𕕸c£dˆ¯o½jƒ½}—Àut¢a—ª‡Èè™Áó†¤ëyŒÍw‘Ú}n«ZxtJmS™|P¦\®ˆZ”{Kv^T†…f£œhŠSŽW‘ªl“¬ro¤ed“Po]‹—Z‘„T‰sK‚qDfiBceTr„f]†MO^7GN4DI8dtd°w‹¹exœRr–Te„OqxN_mAecH~jQ˜ƒWe}OlwVvb‚†ct¤k¸vŸ°}¹´iŒSƒ‚kvšÄ¥~¾žeˆƒRetFHe4AW%?Z(FZ2JW3=C'87)>:)CH1Gd?S~WWfr›{z±‰’¿‚Çr…¦_zVv…Tk|bxj‘˜m“ŽSh„UnyX{{L{xJ{|FquDXnWny”Ÿk‡›Tdv=Ga2E[:U`MO8;Z4-XB2V?8AC3M72D>'B@2I43U>*lE4Xm=9zM-^O)=J%435))E.H?&_I'jFqxR`jLj\@cKQU3UT*DX>MF9K^4SJ2HQ54T7d=-c])`gB\^9yWB…N<zUAWLIQL<aW9{i9lt@rpPmeA-wQ2:BE/@@ XH.BK&6B2F@%x;#Wd9BbM8I17@-F7(BA!9P9.B*(='<6!SJ!e\&…f0k‰Mh`g…MU†OBwB]R2Fx7@iFIS/hX(\m7VeO\Z<|rFNxIQeQOy?:dEXG2Tm-[]:lr6t¡T‚š\€UFsG^X0uU,c›Q—qLš¼[…ª|z–bŒ¤Ykµda£iJ{MSpD\wIfM[oAwhFsƒUt`MwPKKJhZ.^‡9EpQse;ŽFv©]k¥wcƒ^Z’V\UiŒM—TŒ©RlÁsqa†ž]›“SŽ©V‰zSxDtwBrŽIi“O`‡HqxDŽ=¤‡D–‘Rx݆¤Ê‡d«oT_G®p<iÒy]ˆ_\‡_QsKHlA<W8cR$Z”Dw‡Lp¤uWƒ`ID7WP$Xw@`bAK_2Qm1=s5TX1Xƒ?Bi;yo3o`EŒRQdDIb.GU0bj4‚—Zk†\XzKE\=m~IÂÑ…ÍþÉ·ô¸€¼‹^xTHj:ag-Zw@™„LXÐvx©gzÏwnÃ||_zY:h„JfšMu›U€´b‚¿zz¬‡¥p}¨o—cw}Cµ§R ²s¸ly•g›‹Xk[sQA³zIÃÆ}޼}€•Xr”Q–ŠNʯ~×Üš—ÈkWNí_¤ÿÀn‰mðO>ÿškãÿÝzÃy›FkŽQÉŠX¼á§œ”tÿ~^ÿâÀˆÇš«“]Фi‚‚N~n@[LuwCnŠU€}UjƒXdwH`„Ap‡L‚–Vv¤Ou†Ac‡Pžy:÷·‰œÇªŸ™iÿ¯xËË¥ÀÕ©¦v~{Z™~YÎãŸÍú¤ºë—ªÐŽÂr€—ZJrDt„K~µltN…mFk‰C‰ªp¨¼ƒ¥Ä™u£cu‰;ÌšTêèÑñžå橣ᶱ¯k¨·yƒ©y}¶~sœg‡¯q£±vŒ­j–ªmª»y¸ê“žØo°Ái±Ñ†ŸÕ‡‡§e€[†‰Z®²kª«m¸¹vÍ—wÿ©–ÿùƖʼn…ŒQYˆAUl*e}/`l6m˜PšÎu¶ß¬ÎŒ¤±o©¼r¿Ôiÿ´lÿÁ…÷ÙÆíŠ¨¹_ŒµXi’ItˆG\|8]}:oxJ„~J‹Q‹¨Y ¯o€™aixG^pPPY4Yl;YwC\u<Ms6x‹N¥–`£“f«ˆc¾„Vª¬zÁÍ•óÚÿË…š¥|ÿžŠéusX”ªlȶ€ÿàŒ¢¯jzŒYˆtLtfAaSA…YF’]J­\K}nLgN‘mVunRYdHnfPl{K]f:bG}Imw9hs>“†R…ŒOwY€ŒWto:uRC‰rX„œ]¤Zw™Xˆ—Ti€@kˆIc{HUU8vd?…ŒJr…AkC€]¡·l§±p¾¶‹ÈÞ› ¿_pƒRžg§ÈÕê“Êû™±ù…–Ý{»ßŒ´ð‹´ð‚¸ß¢Ç륲Ü”\‰kW˜zcŒ~V˜|Uša‰xk¤£›¶l‚‰Pdr@pnV€œhŒ¤q¬mx¦rйk‰¤c’RrŠRl~[‡}³È¬©Ë‚sN_[=ZPDdng˜ºŒÄmsœah‹Q\oA]W8dY=€`Q“oW]…€U}kCwdR|yd‡¡kˆ£[tpQ…x^ŠfŒÔΤۺƒ¿bš|Tc«“eˆŸRV‡6Dm-CZ.JZ2Kd/?J"*5-63Id\a˜nr¦}­Š”ÅŸ°Ù©¹áŒ˜Å{¯}ŽÀ~z®so‘d„‡Y~xKppMm€Ph}NisF`d=Sl8UeOfxhzˆhw~UowUbxFNjDWjO80/8.#@6*>;.@:+Y:0S@1DF7C82a<3g@3mO:–aGeŒ]B’m9om2U`4E?EJ6aN.bd8}^FX„I=zj>GF@L0BG%FQ*HY71U;6A5A@(<V/n?0Uc/KnG]`@iaAZLEM75[;/_?9gI7n^:ioD_mHŒO6^e0#k_4*2=0BJ'HA'@N'XQ0V1R€U7QS::6/M+07/K28_))?>17'?:$4R'CB%ZH ZO,\`4_vBS‹EIˆNH^>Tj:B€DE`DZb+Oq5bVD„u<JˆWbND|i8LwU?\FF]4Lg-Pu7Œe)€´QMœbFZJEP3E],lQ/ir7‰’[kÉ_QmmZ7qm;y„F\«^|‹^~€HsyY[zZorH‘i<x]MjYB;V2D<(`W$O„;NdGak:fˆI€ŽKw™Qq¤siŽXdrDfmBkrBso;†}K›°d˜«`m©[swEWsCNS.fg,p‹?Q}RLV3\d.ZnCAf<ZN;°V,…¿e`¦oO¯n”xYt»[b‹d`ˆS^{QMK7iLiY(p I‡}VTŒW7ZE7H3_T#T˜J:fGM])Od'Dg.P_1P[1Cx3rg4a^m‹Fc¢PQHRq>nz@XdcqPdV¶xÅè¡Í𼡶“} j_„KW…LJc>_b)h|=¨‚O¨ÚŒŒì•Ì…œÌvoØ•f`d‹Hv´^ˆ´d˜»n£Éš×’‡¹pˆZ‚À[uÙw³c¸`”Ås|™oqoEkU=”rRÄvµ¹m¥ËzЧy‹›i™“f™–j›cO‹qbeŒw±{œÑœ‡‹`‚zTØŠAÿ¾krÄ€cl6tW-ò¤d¹ä®náxTÖÑ¢‰ŒRˆ«pŒže}•Pl“O†–U¯±r¡À‰Â¤‰–yy\¬p¬·u§–l–ˆ_¥®f´Ãˆhž^ÿŠFÌ¡z™žwÄ®sÔÓ‡®Éqx~LkS¨‚u¼Â…ÇψšÉy™—_nqNTV+ix;““]w©eˆ‰T„ŠDˆ¬bͶn´ÐàÖ²ˆÑ”r‘Gƒ@—£Q®a®•bš›k{jwŽJ£¡_¨Ë•™Ãˆ½³s›Âx¶¥X¿Ì|ÑÒ{÷óŒ¾ù–°õ’¶é¥Ô¤žl«“s—¯³¬nšb¶¢b¡–[™l±´w§†U„‡Yr›XVr9bx/]j6yV8‹qL¢¥g’¦ks[v~H„™Pi–CVi0™xZ²Ìx°RºQz¡amOˆ™]Èi˜Èq™R{z<{ˆRi|E~]=ƒ}VwtQjX8nsCy|St‹\OŒXP_Cˆi¢–a‹„V”pRˆ{Zä´‹ïïš×¾sÔœdÿ¬x鲚\dV¨›x§Éˆ§Æu•—[»hUž}^rx\wne…vn™€s˜ˆsƒd˜|V”€YzwOy{TŠ|drSZ_?^oFpnJ™€bu `„™g“¡w‹ÃpyšJz…;^{7quEp‰K}’J€Hvw@su<f€M{UW|>;G!?H#>R#@R%Cf+Z`1ho9e„O–©r™®^p‘L„›o®Ü•Ñÿ­Ëÿ®Áõ“¼ãŒ®Ì~¿æ‡¶ì‰¬Ñ—ÀߪËí–™Èqƒ”d¡‹q°˜o”…\œ‚d•“z©º}–±[ky=HK'C?0kkQwŠ^y–h‘­wž·vš¢n¦e¤f•¹q’Æ…±ÐŒ®É}°`e{AelS„¦†ªìŸ¡Ñ}ƒ°ck’Kcg;VV;`[>e`?g`CbiQtpLloCgaNua­q•[zqV‡v[“‚eŸ‹xϳŽÂ¸{™‘^‚|[ˆy`œcŒ´[sŸPW‘CS}AZ†>e•Gd–BCk/6Z8InSxŠs £t™«Œª€™²µŽ–·Ž½›©È˜¬Ç§dt~Poq=Ve;YlLx‚U{ˆLet=LZBOWUst„™kt|QlnM_mFKdG\oN>14\:0[P4UR=[R7RI9R>5JD7N?3H@2^G2\T4nQ6…J>‘nYn•jM¤‹TNu`NcVaTFjM3_n>GlT:UK3F;[C3fa&]‚QKZTLe?\cAPkDm`Kz`6{‘S~ŠjQ…bXV^ƒA:p[;caRc`OacKViKAbBYE-^L%0R@=;4WO,Jw?HiOSj@rVBµkFY uD\sPT8Hp;5T>GJ)JI"1^>0E7=;*2I);=*BFJD&bT*\W.jb1U‚>?‘TR`QXh?G‡S\jLN€Dy`@Ww>POHuS5m…L8{`PG8M^-cl0ZD€†HvœUKœ_Fe@Di;Ea9Ha2wd8¦£GkêDˆ}HM7Xl9oyAt„Lj™Md›YsRV}LfySGqF<L?L>$CT$?c2XS,G€/QoE_yFoŒR„ªV޼g]¦k<bJI0EQ$DH)_g)އHg‡SZiBed)_ˆ7HFWl8r{6T€R:jDPX/Sd3GS;NM+:d4…a.k˜Jšn@¤ŸQ‘ãhÏ•Xwi`zAWoNN{=OlB„7S§]NiCBj29H:>J%lf9U£OFxR>d2CK#K[%>]4=Q+[V%ru.PqN\W1ec7cj=Xh<|Gy½wŒÂƒ´ß¢È䞺—h€d”kGowZgoHce@Gr7V[$\`4ša7²pM£²h~¾…”¬hŠÌyo®p…»l’ÒsƒÇp‹½o˜Ày›Æ}¥Ò‹´Ã|Ú肳⇔¬c¦ª`¡ÿª㧈fKiJ§‚V„¸u °l’¸x’–q–ŒUpšuDM?b7'žY<§—ÂÜšn¾‰yˆ@oigUŸ™Xk´Zf‡?j†@ô‚R®›e§¢o Ò›uƒPqwMònL•ž€€‘dŠŽY™˜dÉÁ†•¤„«„]–¯y¬¯r¬Ó‘¤I©u@™‚N£—n¾”^eƒS|=¢•NŽ¡q —_š°ej†JƒW@¼w^·•r›£s‘¶wyŠVScA3<P_,f‚?h€=m‘My|AexDÉ¢p¯ç¢ÉåÞÞš¤Ð†}£Rl=mŽ<‡JUW4[k9pkFVX5k\2™@‰™Xn–g}—a‹±e¤ÈŒÈØŠìò‘àÿÑê“·ö£¡×‚±¶Ä½Š§Ð‡›µlž˜mŸº€|¢XŸ‡`t›ZuaGšOq‡GUR3mqNUsHWJ29A"ƒhBºdf P]…HNxDOj3_t;¤§v§Üh–Dk€4e‹9b†2i‹/„†<ž²Zo´Yb‘IyŠI~’O†vT‘—feqCjM9}‰bЧly’_•£|œÏœ©¤z†S|yVˆ§k¦Ã’´ÿ¸Çÿ¬µï°Êbª¢_Ö‡Qÿ«€——^­„\±Âx°Çw’Xn]‹‹n²žÒ·‡¨•^¸{Z̓gº‘d{yU˜œ_–]{pUp[†kY‰cIˆzVˆ™\£€SÛ_°¬cÙ§l¯¯t„¤UgvGszG\z8ks>b‚8[t6_i;Vo:il@jjCYh0EN&>W'>a,>\,@]*7d!6ULf*y“Kš¹[­Sp`¥Ä‚¿×”Ååš Ù{—¯h}™[„žo¯¿ˆ«ß¥Âß²Ã墯ӔÀ‚²È•Äɉ®¹c™¢i«Ä€³Û„Œ²Zp–I\‘7;d,>P8bwRoŸo‘±˜ªd{”`r„OepEibH‘’a¤Çx•Äu‘´pl™S\~Iƒ•wºÏ¢Æ}Žªpz•ax€NnsFqrEtoEppLi}Sn‚T{wCipLp†^žªpŽ¥`€†Q{„_‹‰\|Ždˆ¤w‘¬gy›Zr–Uo’Km€L|ƒS˜Wq’Sj‘Qk•QfœSmšIbŒ@Ss>ZlKp~X‚‹eƒ–l{˜s£yЧ~¨x¤›mœn•}_‹yY{xGpsEXk:Pl?]pF`oEdkKcoN`mN…r[¬xVrCeb6Q^:KSGL]SVF7}S5eW;qK>PJ=CG8I81Z@0BD88><*-1V,'OC!V4.ŠB,ºqB•±k}£Žqz~RqZKVIeY@FhHFKH?V41[7aD;Šk6KžQ}^YxCqƒRowSzcK˜_E™’S‡“l}‹n|tjTJ¡Z>…rJyp[[eSJYS9V@HP'U]-Pe>tY<s>h—Gj§p}X¼Œ]ÑŸ\L²SZxhi><xC3I>EL"VM C]-ETFAc><V6=R1?E'G?'>S.:S*DK(eD&hx4Q\a^\_ƒPesSP‘TNiIAU;E;'„O"d}GRsPDc8F[<q^'o›6[‹YnpK[‹@V‚XYo;b„S]{DlfJ²„Fgå€?ŠSP.Zm4_pEVlEgX<r‡9W•UX`Y^X7DvI8N3=M'ER!K`'`s2k?fŽNk€M{’Bx¡ReŒ^``DIX29j5A@#M]+‹†Ts²QHŠSF[1A[#\])[y4`x9i{<M?M]6Hh64J1AA#WW3VsCi…FZqIPvIpO2³h0 ¹cbÍ€]ŽR\‹BW{0Z~3j‡1a~4Fz>=nA2P=BL(qa=lŸZI_9X1?K&=[5`F$O‚<AS:TP-.]&F<%ae-Lf7fl:‡`¨®{Ô×–¶Ø£€À€] e`‡Ui7[[LQZ<sHOMNc-bR.no@lcE¶jGvÖ–…zUz—Y¥aŠÓxŠÏ€…µrša„ºm’±r ÆxŽh¶ª^yÒ|ƒ‰R†Sÿ€K”ÿêRxkP-¢˜ZŠÒ†–­k¬d_yH^]4¥=+e”w_cHže<¾”]Ìï£l¦|”zC¤…b†Ž_—¼xf‚R„ˆSp¨ex”Lpt6ý…P‡—_uH¬¡o}sxpW€J×fäÇÝÍœƒ—k‰€C“†O±žh¾¼n¾xT‡Gli0³z7†¢Sg„?uq5Œ„H¦‡[˜m‡—gZJ{Š[›šgb¬Œa„œlO^BBD/J^+[u:Ov9f|3}¨hg¢cw„EØš^Ãqò§mž´zŒ•V’†Lh;]|1}‹F7p=P`3Uo?L†CMšBf”>v•A¶•W¸Ñ§½ÜåŸïè–â¹pÍ ]±¦fºÁu£»iÚž`¾¬m~“VƒV£¬rÏÔ€y®`¯ˆR’™j‘”s—Ÿm¶…_˜b{vDa@OjFC^>:L,€W=ˆ®i¿tw¿…„¹}‰ÌƒÒÿª©ú“a˜P\”BY™:Q{.V…-Z€/›‹V›Îw‡¶iš¥a”§`›²p¿Î~Œ¯msž}y­­–k”µœÚáé­Ä½rsjAmI2•lS¼ÓŸËøÁÄþ²¸ÿ®§í‚ÀÂrŸ˜U¨uOÁŠQ¦»d¤Ö{Ã{£¥s²»…¿¼~°¿|¤f“sI¦sW¤i›ŒeƒŽ\yˆV¸™b¢’^—•i‡§l‰¨cŒ[—”j‰¨W¢yU¥‡\„zP¿ƒhÒ´o‰œNdq3]f5^q<]t;^q6]x4cv6Zi7BO(WL7V`;Ei4Bl/C[,FY+Kj,?n)Cb!Rs't‹7§Bp¢F—\Ÿ®xªÉŸ£Ù…·’Ä’œÛ£¢í¤«é­´ä­²é§±Û¥Ð¤Ï„­¾‚˜¹cz°a–¸¨Ì}œÆl}½_yµWX•BWŠ?W~X¤t’¿z‰±tŠ»|€Åi]–RiƒOp†^©j”¾r Ô‹ŸÎ~µgj©v•‰–Ç‚†»}­i† f—Sq‡Cd€Kf{Ps{\‘Zh~GdxSˆ•q®µv™°awšXo’HqGq‚Wƒ—b®TrœUt†Ljr@]^7XhLpŠ`|¡^o¤ht«fq¦Yg˜N[v6GJ-DD@YmTb}or–‚¦†ˆ·ƒ„©x~^xNxf?q\=UG3FJ3IX8Jb7Nc?PcFZnCSoNXsPRg=XZ;KY?M^;K[6DW>JZOUqgc]:k]BhR?[N;_=3UF5_A6bF<RZB2KD-;7F<&.P+?;,YD*†L6‡bFWŠ_N‚k]\Y`XKRiAAaODDFUI7SZ/U^>zeAxv?€pPtdI”jJvGµhU¿uM›‚WŠ•vq„icXXnL@‚T=…iB`iI[eLBSMGL<XW.jZ6U^>hS<…]7¡yC ª^å•x|€u]JfhKt„WU“YHeVBP1JQ+]c&dr4g‡LdŒY[‹UP‡SL|ILdHGc@M_4>m>GX=qW4_‚CZŽeWqXkwVYMBƒW:kN\X6p}88ZHF9.BD#CT%dZ(\~5MhIa]<uj5S¡Hnw^f’TY€SrxP¶°Vgö’?Ž”DX5HX0SR.<c:T^9qc4h„4<ŒTTFKKa4If=>e3GP-Rj._x6g‚>J…A_d?x3€}M^ˆYC{KFpGCg;hn7§Jz¸s{“ZTˆG?i6Pl4Z‹GJ†]RgCdc0U{8R–ODƒLCvHS}D]‰Lq~LS‘Re|PH—MLXDVZ1c2p—>_’4_1[†+U~'Q*^r)Rt?IuA:U=QM*w€>y¡W:œb,A.NM%8b=CQ+Sa-<Y9GZ,FrKP`,O{1]”Qx`‘¨g¥¸„†‘wqZKg‡C}rEf{QejPXf4hP.}šPq`AqNUI0ie9]O‘[E”ŒWa·€wˆM Åt¿íš¡þ”€Ø†WwTfc8œkH«xxŠd¬ˆO§ô•‹¦so“SiI±G[ÁboQ£žT~Ç€®]fˆJJX?@G)Y>&Ôc:rªˆgsMÊ_›Ø¡amXYS0zL5¢ kƒÛ–…¢l·¶kвsh”R‚’XŒ¤]i­p‚ƒV¬cI•oPz…[¦ƒUÿ¥yÝÅ” ’c‚„X¬†e¯¥y»˜w†~]ª{A„‚N…¼s…Æ…pŸZnyW`ŒX–“V§§k’“b}†N†ƒZã£çÿô±Ó¼w]TO4DD*YH-Oe9\T6g˜g|§WãÄo¢é€¯S‰·tT©mTn4X`.i_.\Y1{a9j¸mŠÈyd«Xq³a~«[¥¾d¶ð‰‚ü”sÏ`ˆ­O¬·W¯ªfÖ´„Àz‘œkƒ–[¡‘^£Ï…ˆ¿o‘±Pk¦OX€Fˆ£t¯€©Ä„{¬_—‰U¹ƒÌ䤢ؔÏÓŠÄô¬€µjm”Y_ZBˆaN¬Å’°ÿ­ÎvÞÔÕÿÀ±ï®Òÿ¹ëÿ³¢Ô‹t±l¶d|³eX­Ul‚PržU€¦\´œf±™^~†Fvp9rx>˜w_Ÿ¦l¥¦má¿|Îá”´Ïíͤӹ}lX6DG(Yi2‚©`¸ÙÈÿ¤Ëø«Í㙨½r·•Y­ƒT¦Œ]}pEpY:¡E·®a¶‡Ù¿”»Ò–›×™—Ø”‡Ãx‚šg‚Y¢‚a¢a„ƒ_„”m…±s†¡i–Ÿn¬b›‚^ªu\žšl{RyXÃg‹\’Qz?[k?bs<bp=to@Yo=Nt2^?X{7Je.PX-YU1RT9Pd5Jo3Ee/Im4Lx3Gr,Js(Z|.eƒ1p”4Pr0lnaš³ŸÁ€ˆª{¥¿žºÜ®Ãæ¶Åà­Êë®Ä惡ⓙµz•¥nŒªi„¤Z|¨Z±aˆ¡R™›h¦Æ‡˜Ö€Îty¤Ss‘Uxžeƒ‘VzoU—‘qÉtx±Zp«c­~ŽÄ‡Î‹¯ÑŠ¶Ð£Ó…‘ÎÑ”¤Ç}œ¸sޤew\z”Pu”GrR|Š]z‚c‚\hVezc‡¥v™¼u«]x^k’I`{6YcB‚xP†’TkšH]‡4@[)3M:SxZzµr‹Èz™à‚œë„Ô|w·fWG6]C4gG<^DZbTr†{‹ž ¹“™º„œ¥_„{Ek]5VD4^C<mI;X[8L`8Ja?JbDNdB[hOgtQawU`hY`lSWb8IN.CP2I^L]|u]{<auW]cQCD?K<6NB7OGGgUHhZDM_GaU>M\3DU3pR=dS<IEBU22y9-jx@GžaShiuIErYASnHA`PXd@Ib>UVF]]<ea8^RBXQ@]iIgD˜pG……Rq£ugyrw`XysK{wW†w[‰fUfrU`^XEaKMU?eQ.^P0dH8‹S3x<Ðm|Þ}I´¤C[V_R8†i/ašXX†WFtAHg=_W*rS/mhEq„RlqRŒ[G“rAb¸tjŽlibJda>^fIhoLlsOo…Lužik•Z^”\fj\]—T—YE‹Q1RE>:'@U*A\&YY#F{7EbC=T,^H+ul$j£Uhop€Y|”QÈ›Vrü”E¥³I€R:[?VN/Ur8<uKLF4v[*R‡@JvU?d=T`?Jr6\\<Wi3Wq<gs4M~9gm?nd7JX9HE/]@%Va1tvC£€K—™jl¦k`ƒU`…>l’EvCŒ—?TƒZ?VFIZ-cd'wr2r¡Tm™gz€Q{‘amªmf›Pg€JU‡RB]R?M'V].[v4[…*U}+S„,R'Sy*Wx'Sn*ExK=Z9kY4h’HˆˆA3Ÿa>E2Lf'C\%>e,LW:A]0l_2cui«u’Åx’äŸt§~jwYfL4Lq;VeDehBnzD‰}LLZM>Q-hN'€{Dt}WOjDEgJeZ8he>pmK²j@ŠÃv®w¥Ëo¼Ü…šÚ”sÂ[‹WHi@¥g;Ÿ—nŸ…jšoÕá‹påÓpO[qOwdLs€Hh™V¼¿nŸÞ~h¾yGpFU^=UnX^€XœvKÍ¥r…¤¡ºª‘Ä“|€UzŠP²žkÅæšÀɆȊ¨iˆ¶p–§a¯¿qˆÖˆ–¬m‡Ë”zˆ¯{Ÿ°y~¬{«—qŒ›t‰˜e “f²€]î{Q·‰j|Ž\muFµ¯zÄò§£È~c aQ™³u}´|¡®k£×›³æ­ªçŸÿåŠÿÿ·îúÉkº‹K–_JM_u@U\;RG+™ƒS®w¯¥fv€DbM'{L_sLwh0z£Sp~?^y5]C½…FÜí‘t²XUz0od1ÆŸeÈ¨[k„Axw6¿¤Tÿÿ¿ÿÿüÿÿææò¥£[©¢]Æ¿ƒ‹É‰—^™ç¤²ß¦¢½œ¼|z¥cu¯pÀ˜À쪙»€½×žÍÿª­ìŽ®Áqw£h‡¬qïÎÿý©áê…ÈÉ‚èþ½ÐÿÉîÿÑËÿ¸¡à–˜Ó’“Ò•Ò…•Ïr‡´\—‚\¥{Y‡tBo[6bf:`f:qh=wvCdxF_n=iB€Iv~FŒtKˆvFGQ%\n1lŠ;ž†Fœ~H•zOk\5VM.VlAaƒMmŒK’}B‘tN_c>e^7£zK»x²hk‹K Œa­®u¹¯~ÑМ¾ÊŠ©¬vŽb’—o‡¨|£À˜ŸÌ•¦©z…^‰jU€pM†iMŒQyyCoIš}Ku‰MvwJw|MxxFƒyHwx?mj8lsJx’NVŠAWl3Om3JO,47#54'HH2HS/NS0Vi?]CI‰5Uƒ6c€1fˆ0L|0D[KŠž€³yŠ«…ŸÓ®ºä¥µÒŠª»uª­v¬ºt§²l¬b{ªc„­cs›PnHvžVgŽB^~T‰žd®Ãr°È¦ÀfzžQoRj€=BH4Xe^ƒ™}ˆ´f}¯pºȉ˜Äz¯a}œX «r±Ø£ÛˆœÄmzžWq„Tl~RrŽKq‘OwŸ_~[~ˆU}‹[nŽZiŠ`¤€™´s…Ÿc|ž\rŒG\t4Lg/Ue;hxKvƒFl–E_ƒ7LuIg{ÏŒ­ß¨é™ÉÿÊÿ²³ù¢Ö‘q´†”¼su¡@7E/MGJvxsŸš}«šs™Z~W=fS8JL:DO7TM8k\8Yh7Td:[a?V\8K`DUgU^ybdvZguRZb?@O-8O8?VDKm`h|CapY>RN_53hd1h{Lc‡\^yWkYKX„IH\JUI4€N1i_2,ED/$0* O$Œ2!e€>8“dG`ghSHa]=u\H~qCWrOBb[VRBa_8duEnrQkŽlo…i“ g–“er–nprd…UO¢]HšnP€{a‚c\{ZI„lKJmGOYN\W*CI5P77ƒ>*¡a7Še¥~u`ÇjFš|dSNk>TF]}=bƒGK‡\Oe=eP+c[6Ub>DpTRW<G+ŽX/_¥RFtLdYKtGPUF\c@r_=vV}–]]•gtri—ŽMv¨iAyW=J.LN(?l-GY)^i(?rALK48]/=A"pW"~†?r¥oc–h}‹I;^ ö”Œº©g›eK‰d[j8dw55|U2=3b@"W6[m;NwJOpQb`6Vt?P\?W[6\s7e}/\y?Md9HM&K\/Ug6moC–tLy‡e€UnŠYwˆRu–Q\zM_eCzs4V§K]…K?{@LV&I_)rN,`4gsQpuKe€KjLYŽKUoC;[8BU(MZ)Um/X€*\+QŒ1U+Yƒ(Z…)X|/Ml@[o<[{BFg;td/H \?bB8]&@T(KT+Sn>IbF±sCÀã˜Åコñ·z½œjœl8jJMW+`l/yk:y{E{–UtzI`cHFg;QW6jZ5e…TowERuPWc7ZR?bZ7•†?ž™\q°aˆ‚O˜°fŠÊˆËv‚³nY£_s^Bc^=„{MzŠbÿvI‚ÿÖy„]@–yOh|XžšNœËf©b“®\I³bL3hA+{F8‹]EÅvRš™dØ¿{™°‘¡g¿¸}±ÖžÄ»€Ø¯‰¥—eœ‹]{}S³Q–¤z¦iPp»•bŸí¸‘³„‘¾u¤p|€Vudq¢mhˆ`\pLWsAswCo€@o5â²q½ÿ¯”å£`¯tfu0uo0ƒ|Cµ´xŸ­w±qX”wP¶uR㑇Ö꥚ÿ½—µ‚ˆœvr—bPaJ@H(‡V1—«p]r?1D7H%Q^32H'I:zc.s]@]a:k^)u~=²‰R¾˜eŠØ~Y«Jh“J«ºwÍàœp´q_–`t¥`uºeÛ°[ÿø§òÿº¨éŒƒ¹gªÎ‹¨Í‰¡›`y‹TÕÆ‹ÆÿÖ¦³‚”_ˆ ]Š©jµ¶t¾Ø˜¢×™Ìî´âü·Îÿ°Çÿ¯Êÿ²Ñÿ±Øÿ¹Ðÿ¥à߉«¾}ÞáªíÿÊ÷þ·»Ì†°½ƒ¨â‘ŸÑ|¾Ý~¬Ûr·¿q¿m¼˜m˜Ò~´c†¬c_˜O\wIfsQ…Y†]muAwQ4cV<nqJtv>j‡=x N{ WhoFgUBRN.<M*A^6XoB~uQˆ{Uz…Jsa8m\;xd>yt?ŸjF•{\t¢bn§[q™OtŽIªŽS^~[ƒŠTƒ_‘œzœ­ȶ³ªv„^’oWŠrUŽqR‚xIk‡Daa7tpA‡uEw€R„…`š…VƒuMƒm?ol>u€R’Z‰Pl„Ig|@R:Bl/2W+.L'.J%.A-NVH~§`l CX|4^3Mn0^{EZ‰[…§w€¡hy¦sÑܕŨu›¿Sx©Ccr7ec7nl<vŽ]q¤j±ho£L^•ImŸSf§Ud˜Vp•PlŽO•‘`§ŸnˆªasªYwL\r?jwU¤„ˆ¸‹„¿qŠ­bž¹{¤Ê‹“ƃ}¯hn V„Œf§²y ¶dj‡FZ`@d^?loHs•Ozª]ˆ Rt‚Im„]nYo’g”«wš´lt‰JqwNgy=Z[5MS4J]=Rd;R_3^l9\o:b|cذûŸ¡ï˜©å¤Éÿ«Íÿ¼Òþ¶¿à£®Ë¢°eˆŒA@U(*C*@B>seTŠl`‘{[epLOTI{aRjvOSqGQi:cd6S_8]a:[m7I^@P^LcgVXbFJEAQE>SWFQvTK\T‚cJjH=]B;I5g@'nf3ŠuKL]LgVmhG=ŒQD]VdD3=;3?11H+ #'/0,K3'v?'q[9]VHxeJUTVR<qW0XhD`fTThK}XL„‘Nªu®ƒ£±Š¹€k¯‰KwwKKUd@8cI7Q?„RF_WK‰VNgc=AQKXP9Pf-;SJ@?:j>*¥H1•OwªŒ›xeZÐna˜yKvIZpIŒsF‡—JUaXpA^p@\mA‹XBavBP„aSQBrH2–_9|¼dgÚ­m˜”pŽbo‰dlzXqsT…ŒYi›cm›n|“lM~O4bF;T4KX$=l,Y])Jz3DbDBL%6[+GX)]i4zxDh¦Xr—g³ŽPÅÖdwî°N”Kh<Tm6[~Cg€C7oB=f?Tn<M|HUrEhe9KrLHeFA]0<P3DO,Ud,b‚+[o@Gf1]]/eu8€w?•ŠRŒl†Ž[i¥f„žin•f\~J=lL@8+cQ#z’Cn­MA¡X7v>5S(AW+tZ*TŒBKcPR^-Xo/Wg5Px@TxHCj?KT:Rg5^~=_‰/Z0W„6X†.Zˆ/S.Tv9Mn5B\0AA#n^4c¦UJ‚PFa(>q<S\?ušJw¶l¾Ä„¿ß›­Í™eƒop|KI–W=E<Y`/Zp9^t?ut?…Q‚‰XT_NWV3ES1cp5kpCw€JQ\[^=QX.PS)aj:ScBlZ'u…C’tG•¤`Œ{V³cY™eLY;ix8™•R`ŒY¦^8~³k{˜sœ¥Q¦‡I›{K|’P‰Çck¤i’jE‰ªhS§w?W<]D2adE^7ƒzB‡ªpy]žxB¾Š]—¥y€xVŠ^5etFf\2pV1{iBndAˆtT¯Žd{˜b •M¿z±ß—…Ü™ƒ±p„•b{]…Žn{”`u“dh~NZi@Wj3»‡PÀõ¨¢ãœrÊDŽLJq+l|7Œ‹Vk‚D]fJWcBƒaB¥}n¦Šjðm–ÿÍh‘gbb;gk@PnBVh8€}LIq<AH*TwHKb@:]6;L4_j3{sBt‹X=‰NI5~¤~OsKzzR{‘mv£r—©€ª¹€™Ç…°Ç‡•Ö†¼Üqä’ŸœHݹn»ÿ¤®µkߘh­UuT>{qO¯¿xíõ­šý´_€IxŠF{¦^ƒ”_§Åƒ²ÛšØù²ÍþºµÓ„ôç¯âÿÎÌÿ°âÿÉÅÿ´áê¦úÕ¢Îå®ðò´¿óšs Z‘¶i¡Ði¼X–²U¨°i¿Á|ÁËu¿Ý†ÐÿÀ¢ø­—ìšâ–~‚¥ÁûØШi¡…NŽ…L§`”¦`y‡S‹…?œ…G°“T…qAakMY~W[™_Zš`e†ex n‰¯`Ÿ\k{EaR5ZQ3ZR4jlDŒ~SuHRu‡JYs=qFœ‹f•`t„R_wKj†Wvš^Ÿ\Ÿžt Ë’ƃ•¡w“h}vXxvUasIosCxyDŒnI²qV’`E‰gH‡|Hw€EŽYR{wLywNntO]uI\Il“Ud«bY¥pX¤qd¯u”È€ˆÔ{hÏm^¿oW“OZs@e}Miƒ£u·ºäšºïw™Þl{¼NI‚30Q$<T2`}S†²|‘Ò…ƒÆau©Y|Èti±co—RhŒCfˆMz‡W‘ŠfŽŽ_ŠšS{—H|ˆ@lˆKu”d j•ŠKn}8oˆO‘¬r·tލi‚¨dj}MfxTl}Q_a>]jITwLlw\Š¡^r›Lh†BcuAc}Tg…Xo‚\ƒ–^ŽŽMaZ1RL/TX.NT.?U:RhCSk<Mh7Rc:G\8D^Oœ‹Úÿ·Üÿµºô­»÷·Üÿ¾Ôþ´¹ßŸ®Ïˆ‹¢afqJZzMWwISkIYnJXkW]kp©Œ~—`drUyp]—Ofv@[`8p]8ec=ah>NX7ITBJ^TfxOVpFHk:HhK[^{žf¡eKgF<[GJM9TX3XgE`bEsa=tu;Š~JQ{Xa]P=Z:7?7I7,$R- :7X#$;?.K989.e1!tW2DŠP?n`JFQiK;nf7apSU_WbP›—MŽ­~„¥†Š’{›bv p^ƒw\_S_YGeLNQG`lJUHRxNAO[6<VLvM:iP$^qOA\IE;:’7,Çp4‡¾…·†Œ›c[¾…‚~jz‹Or›xScKLM5R[,Uf8bc0ygChFY…Pspjz_EqTÞxT®ÜtmÖÕggƒLhNH63fN.‚s=…ª]‘ŠaZ±zFflQa;Im@JsC@p:Wi3H{1;fIQL+\Y'`m/`ŽNjvN—}Jg¨Z•{fçQqð˜>† QZ6ek8Vz;Dt?J\1X]5dc<evL\OTPZ}WBlH<P0La2PrFLv9]u+D|:]S.yY(‰‡>¨mE¦zQwm]ŒwW” f­m[™kqvP:j>?JCkM"g˜DwŒB}žE^ÆhE¢hEU9AY.`G&J‰=HlC[{:Z‹GTqGeU;F†QOYHTu8YƒCg‡6bŒ3U†4X„,Q…,Ux1T€8@z=0h?4:+k6lœE_Zdr@t¢GxÁ}“²l³Æ³îŸ¾’PtVPf4q‚HLš]avCh’Ta~HSz:hs7‹f6op;KW;Q_;bpDVh;muHcƒOFsG>b>8[1J_.e[3>V6SM$Zu0{{Dr–WgzP…ƒLO}R_k;`i;td1fb=~ŒN·»cˆæ¥j¨eˆyAzs6|ŒR”µl‰œg†¯|~šd…’Qx½t‡£eˆFpnJ¯…\£ì­‘“mƉK¹‘[„|UirEXL.reCZŠXq_>o_CthG¦ƒ^†™c|Ÿm²ŒcѧvÞžyŸ¢jjo?ae7€c9qqtyW~€Zm„jg}QMuEsU-»‚S¶»†™´nc˜ZSBe~8Ž{Kt€\rMks_‹rP²…j´gŒ‰_ÂuT~Õƒ›œo‘§‰—tnšf‚~D_W-j}CŽ·e[ŸMIM3FI;GL5`w:Z€C]~FkWÄŠk€’q}‹i„rV{zMŽtB’B¶©hˆ±f¬ˆPª¨d•ž]a‘MŒM·Êqe®f[gCTiNX˜g‹\›¬}ºªfƲ„ŠÏ…q“Iq—U~¥m¬Ï—ºá§Óùº¾ç¬‡À„ª¨fðé«Éÿ·Üó”Ð÷˜Øÿ­ÿüªÿÿÃâû²·Èw¤PŒ£LzŽG_m/ig;–žc´Õ‡Àõ–Æÿ­Êã›ÆÄ…ÇÊ‹ÃÓ‘°Ò‘¶ß›ÄÖ‡ŒPnvHw|P«Žk¼Ó‚¤Ú†“¼_‡‹NމTvˆI–~RެlЬo”«q„¤m›§fŠ©h¿~˜æ¤wÝ‹Yž^cbGXjA^g>drBfh:s]6fU9`f8Ž|<šŒO|Ol|@nŽFw¨Sp¤]°µæ°¨òš‹¹qm“™m|žj‡›dz–]lŽ[me…œu‡˜sz”k•¥l†šfy§hw[fŽas‹agYc‚W[zIl†P| d‰®s‘°z›¯}³Ø”µÖƒÆÝ“Øõˆ¨EKD$OM7k|gŽª£Í›Äå¿án§Õh’Ã^nœDQ‡=Dn8WzVªw ÂÇrd™U¡£w¶ÍližGXq6hv?uŒT‹’_™Y~ŠHm‹:]y?liOltFWW1F="AN#Rh/fxF”^Ÿdªck•Xb”dk†OOX4UK=lqLz‚S¤„O‰CdˆE\|<\sDdƒQd{Su…Slv<AD#6;"@M!@c(Cj6VnGepJa€H`|LV|ENt@X{l²à«àÿ¬¼ñ«½ì£Îí˜Åà˜ºÅ—¤¶¢®py—fw¤yйtnªis–ds˜s|­~©wŠ¢mŒ•gudh~XoGmy;_p=ckLhtI^j@U]<O\D]nIuwLh|;Vm9YqEf}Tr†VKA4SS6OU7bZ=SvH0^W?6@Q=-pT.lS8aR:ST6PU:`L3NY0/Z=a21RG%.Y:K5=YB(UH4…A6ZPKqPU^UWCFaB`@:tD1xa=mˆSR†g\YTnZ:smFUrT]TObY@c_I|TH`P?SXDpG@~O2AkERXL_3$iB(<VBE>AmO4»^E~’X}…€Uˆ^›Š_sŒ`2xX.56?:GKY_CaW*`b;‚^C‰g:Š…T…UixdpW»gNlÊsL™£2]WPA5vW,~xG‡†X—˜aO–jHa]Ih7O\7Nd<Hl;]h/Pˆ8JcO~TUz?zyIiŽId~T€sGddCjzB½‡JmíyQ“T‡G?~fFZ2Fc4[d)Z{8_yMN^IZI.fg0VvD@vN=X?SU/MtBLj;`d&N;`o8ˆp4€]:de=YY3oe:~–N{Ru„J_kG\d>To3HzEjY5[w+`Aˆ:‹ÀTg¿t@ºz<[ADZ2i[&cˆ?nwAs”AXµ`r”Sxª`\ iQQ`t8f…:f‘8Y=]€,S‚,Ux.Pr2gb,Z‚C:‰X_TFp‘?I™U]S9އIŠÄo˜¤rœ·i“«hwÔ{l©|h©mo¦dS†`ZyN^|IZ}D]rCP‚D?^CAK1u]*†Kc]‚ŒYch`‹cfœdv•lZTPd?7W9=D!H7 X_&ŒFv®]v«hdpObeAƒƒ[MsWRd8cb,€u8¯ŠSŒÛˆh®vRtBdh1l8r­]†l?ˆQ`½‡€bI¹¦m‹Ð‡†kœ’eÏœoÕÙŸ‚a…k4azJqpI`dD_\:Öe:§Ä›ž†|…KsF~V6¬U?¥lÉ©kƒbbiGYh@Tp@P^:yW3th7xk8‡fAƒ~Lrw@Vk9yjC«onÁ}nÂ^²jL~4rn(jy2uA}?™‡Q©€V|mJ|a8ƒa9¢O«¾r¹R‡‚Z…WlB>Q'aX)~{9ržNXsBioFjNs›R{ MŒ½j™XŠˆas‹RX]:dF3g\7o^5oH. T>|SizHv^:kƒB~‘Nv¢YŽŽK¬d„¬n|§l›¤m™Ât™ê”s¯[‡~<œ¯yy©S|§T Ë‡Ä뽿ÿ»Öþüô«šÌ‹‚¾v±¹téÿ®Ìÿ¯Äÿœ×ò‡ØÛ•ÿô­Ìÿ«ˆFiv0sˆGt«YPšOhF…žX²ÑÛÿ´ÁðŒ˜˜`uŠU‰›k±n˜³f·ÍŽÀí¡’ó˜q‡PelM‡‚n Â•¢Í‘ È{žžYŒ‰N—o@lh:ˆfA‘P}yHsdIqpHŒ]ŸÎœ½ÿÅÐÿá¼ÿÃo§fY_;@X/?H(f\=Œt@£ŒUr‹RwtBƒIs|@df6h\4ri<m{KŠŠd¯°­œlˆsPz_A€aC‚wIwwEo|Ckp:okCsK‘|O€‚K‚yL‚W€Œey{N`Q7]@/^C5YM9Y]:[T:vjM}WqžSc{Iš‚až­ZŒP…GdR"%#26/l~u±ÇžÍÈ–ÆÂkš¶Vˆ W‘³\q§^d“X]™Xhœk—Ɣɀ‘Áo|¶Y`PwwKwGN†BcZx¡Mm“Ls…KoƒAby5Sh4W]?ŒvOxx>G_5In:Hy<Co;\|Y—u‰«yµt„¾‚~Ÿ]_s:Xb5Qf@q}Ny…MgƒEd‚>hDh~HoŠUd…Rk{M^zAKc3@](4S ?] Gm2Zx>Y};[wJaŠ[a“\g–PaY˜³{Éá–Ãñ›±ßŠ©ÕƒŒ®n…–xŽž}œ¯†žÁŒžá¦«í›¦Ñ~}®ez–h“£}™®z¡k“j|z¬”mzˆPks@`c;aoC}L‹yDnjAau6Qk.GY/FS3GU1@E1AWEHfR>B'FJ,ZK-k]<yoKJq[KMPFA:7A;E.4@2$5:+D@1XK0e[64i@KJEL5H`;gIBAR4:M@zB7¤c7 ca’{lZaPsHGNCP53`;*U];6`QFH9GQ,h^9Xk@\U?jE?bV<j]HudCepJQfWp>?W_5ShMPA-jJ3d`E‡\B„~P„ych‡bSŽqljabwHqp>BƒH*>B"/%C$BINT5gY3_R.PeEmYH‰X6ÆuJ—Zœ’s…¦~˜˜rLÇŠ?ˆ[IAyY2pg@‚kI„—QVŒ]GtS9U;;C)?P'9j9b],z6xzZacP\i>Z{Gpm9r~FdŠJ_dJ~l4²“K~â|l¸®j–X;„yAK9C^0X`-ql0qŠJEœYIoNGlB>X2KE&FW,SwEHrCEa;_N%My2jl=d;OPGYD^e3~x<t“U]xGQS<YT+MiD]c3Vj:J}Q[`,p€6…ªN…œ@©¶`†ì…NÚF†nWn=Ut9Ot*si/~BšžR|Ékb»vB—`Z\8g~2k;W”A[0P€-Pw/?|3BV+^I'vg9v´j|ºwY¬fm”]™Yp‘RW‰Pc|K”›V„¸~h‡jcTjUc|CY˜ZOœ^P}O[lJb\<Wx=WiKt‹OzWivPguKz•[ r™¤rna[_CTT;AaI1E*;,NI+e`)y4wšYN›Zvf<“i=ej>cGU…Eat>‚‚Dª­dkËŽLŒJFt;p^*­ZeuI–‰Q­v“ªtÇ „®’r™®}š¨~·Áv²ºzfYWqFlqNŽdGyQ7hfA—ƒW¸¬uº×±Ÿ§‚“ß™R {X`A€mN™‡c—‰\ªbƒbciI]d@Tc9ag5Z„[XiC[n8Z{;N[.DG1ƒ^B¾°mºçª°÷¬‚Æ€R‘G?s1Hi+He'gv?y•[j~EdxBmvPboH‚zG¡]˜ŸY}Eh{GRŠLWƒEeW_|KZ]8ln=…’Z˜Àr‰Ôi~¡Xй`€’G–‰K€›OƒˆOeˆIlnIsM[^F†gGŒŽ_”‰Zb„Rc‹Ls ^s›WiƒTuQp<tW1•vR—®oÑÚ£ý¨Y›XŠI†½i—½oÝä ìÿÐåÿÚëÿÑÙÿÀµÿ¨²ü–´æ…äÿ«ðÿÀÅô“³Õƒ­Ð{¸Õ‰×”Xl{Bdy7ˆ S£¥Uš©V„£Ux²m¿¯}Ûך†‚UOW7~”g‹Ã{…³b~ªZ•®kÊå¬Äø¦ŒÂxއ`¤šƒ·å¥Ž»n‚™`£c˜˜\†zW€yX™lªk¢m{¥v‹b{†U¦°~ºã¯¿ÿÈÅò±‡¯eUe4>@+9=&;E%TI0jT3æhK…™TmyJhh7XT-QN,WT,]W7cbDˆwEtMiuHY`@_hDXcGiQ<cg:Wj1hg;dlDhl=rjEu_LƒlT‰rKuZ?YG1>5)=-#>-#E8$1< #$M/0~oOcFJs;fj@H[/@B*3:#%3168u{wδ€¾šWƒU{’EfzB|’Q„°f{¤l„¡`‚”W ³j ¹`аZt¢dn¤lb°gl£Xw±[w—Tv…JizIj~Jr}G_{?Lt<Wj@auBw‚EhŽMhQi‘R[\j£sx£y’§r’¿Š™Ï€…ª_dv6LZ5SN?mgNyxXp†L^Œ>b‚>i…Nl‘bnŽ[n…SdˆNS†BHq3?_ =X!?k&Gq6Nc3Ob?h‡\x£p~¸r_OWrJ“›e›Õ‚¯Òy”µm‚œ^xŠf‘‡¢Ç—©Û´½ñ¶Åñž³Øv‘©`}“Z|e‡¨zгs…¯k‡˜k‘~e°zT}n:^V1PS5Q^AetEooB€e7^`.CO):C%7@%5:4>SO\yQ4@/FB-HG%TQ6g]IulPblS]SKFREGJHSF@UD@`NEWLBZSLSiE<gJRFHV?6lB-bS,rhAgDzKt}]Vo[[JKZVADfDMKHOS?6O:8RCHN4HW4QjFWrOQbLx>8^R5`QMbQEo[CEgEZEDNe;NaHoJ+]C‰oO”]UsQMx\IuJoÂlOªƒPjXPZ?Be2>b@G3/+#DG!Cd;_^:td9o^@XrQyTJ|`8lC¸`JÍuK•¥u‡œO¨};R_VP8df@sm?f†HJ‘Y4bH%K5=>'KY*IqFYc3@d@4C5I=Vg,OcBgY6yq-ŒKIKcf:±{6Øvuؤ€u@žF[@Oe2[h6f_4sr8€uJjŸVA¡j9dF9E"JZ,P_(Fb3;r>TP+Ux'fyA_€?KpKVj7Lb?~b6aO:U?VM+oR)NmDSxJ^\0Hn5PW2qk5Y9~€9©©HªÃr°Ñ}cçžL‚gSy:Gm(fi8l7t\‹VŒWc°ZW¤hc~Br‡<\“CV|5O~2Us2Q3CˆF[u@t€BšWv®kjbiŒWX†M\‰ESo4ge.‹Ka—x]jBdyHW‡[d„VpAf˜Yq‹Vb«jWpg€Ym¦lb‰ZXaCWfDwˆTsƒk„StqS\cH\kAh’QBˆV5=1E:%J\AOj,|™Lr¯ggžc\|RUwBeŠLO{A@Y)^f.jŠG²¤dtÓŽcžaKˆYq†J^¬^mZ:z])}r7©•R¡–sƒnR¡b¥k®px¦mƒ‰Uzy\€Y^hM_G1´ƒN ®ˆÄ¬ˆÿÍÕ˰ÿ®‘ïЬ­ç³¼Å‡ž–qš‰_žŒi{c’kNPkQNV1poA‡Rx‡eq†UP~V:Q3gM7fqauL4«J¥®vo•Z`|>Lƒ>Ar0Uu9w–R˜b[…Ur€I„…Jy~UŸkª²w—¤e‡¤X‡Àtu¯nq|AuE…’[l¬vq²s€¨jžŠT¤¦l„”R•Y^¯_~5‰Š<ˆ¹[ŠŸ]‚yJ«wRе|q‡T¨•^˜¶|t˜_u”P‚œd¢i€¤j_žc[yHKˆ?LK3–\?¼°nÊø¯„ØŽu¶u‡£[¥J´ªhõóºöÿÊêÿÉÔÿªÐÿ¶å‚¬Ïp¼ÉqÀÖy¥¾h…«_ªÆ}¥ãŠq¨b\ƒQZˆOuˆGlƒ@dA}ˆGªv–Å…±TKZe?‹¨n—¿x…¹dyªf‡Åz¦À€±Ä€Ž®|z«yˆ§}«Ê“yÀrf‹Jiz=}>™}BŽW§·•£Þ§¥¼‰š«lwvM†‰fÛ“¤¿ˆ¼Ùš°ÝŽw”^qc?YO7CD(JI.KJ/]Z8fb8¦iXyš[Ne7PF,X[BXcAX_>bmEjuK{xH‡Oˆ•Wf„PepB[Q:XX4Tn8d}JyqI|aB€Z?z[Ew^;zbDrxUgQ^oFF[;;;'71#<A*.E"->13…vVbEkoCdzJL„PL{E:b6DI>{rg£¥es‚Gl\p—W\’Je‹Lˆ­aˆÃh„¡SgxAis;uŽI¤wÏ–Ì„”Áj‚šLu‹Qw“U`ŒNT€Bj‡V{Ki>_v>b{C]ƒBc†Gi“NwŽV€”Xq¡mª|•¹q¥h®†ŸÌ“»f[xBL]5CK;RQ>ea8]T9bb;Tw@^†SdŠ^zŸ]uŒRtzO„‰Rg59Z!=V(Jq7a~M`x>KwCX~]€…ž»‹”Ât^–Tk‚X«ZŒºXЬOrEjoPu{œ»¨Èô¿Êö­¾Ùƒ«ºa{KfoPwsl…©‹¾|‹±r”Ÿ\„sEcS8Xa;R]5VZ3MP<fqTq“Ml€=Re0KV-IL);<#1623LN`xa?-/VH%lY.V`>ZbEYdK`RJaWEpfI]pHa_IciLgfQ^_MP_EgWHUpD:pT'8R6'&U<Sa1tR4pf:dlR^nL`LGaTCa\GgWH_fHU]JFuKR`CjjCb…TcŠ`]cjKMbJ9^aHYSFTH=VS;qU;PˆHhfW‰]3wo@`kRfUEdXAi]H®_Eƒ^mš~VxXL`>lc9M‹FG‡MUƒLcšQ_ŸjXˆ[[e@T;rY9foSu^I]^AnT<rY=paClUDX\FNgR\iJ`gBgbE]l;JrA9pHCR4WrAr„HCSNcE-r</H<Q? ;X)2B0J@sZ%m<QzI`hC¯z5˜É`‘̓јGª„JbPG\7Jb3@^2NI#NW/}R.mŸKD²sLbCLP+Bd8]Z4R7YyVk„;VŠCa|GZPIŽTYjHa‡HBsODY1XP*TT1ZP-Hh;An5MT(c]$Tj:M{9ks:„Š>”£O¸Äg{Ë}b¸sIˆUCe)Nc)jT&bwK_ŠLWvR|‚Ew¥TXÁlk„\[‚9l€7W SL{Her2qw2dŽ;e}Gk‰D\uIhz=Y~F{ONœS6]6TM|W FpCPh>]…JW_COg5XpCks9tƒJv•T~•e~WˆRr“Tr§a‚¯xsn]ŒePXR]J`e5z¸]i©mHz^HN-_q?XV†ŒJ•»`ƒ²sŒ¬jl®qiŽUKs@ES*Om-VˆAy|@²›Yt¾tyŠNgd<}xE\­X8J<GC!rg.¨|A’ÑxŽv|…Tˆ»q‡Àw~¨g“ŠMŒTš‚ZQ^Cu`<¨‘b¬«‚ǽ“ùױ햀ÿœ}ÜìȲ±ŒÎW©¢o…¡kƘdÖšp‚¯‡c€WSg9geDufM…›goŠf[^BTX1o^GgjKB^9ra-–uFWZCaU1^€@X…?ušQw”Zhm<w†]`ŠMd}K¥“Z¥žb®¯pu«cƒ¢Hœ™ZbuDEP+]M-tL€­a‰ˆN}ŽPfŽV‚{J\i5ˆi?nšaZ…8Vb*m.‹ƒIq~C×qQäÌœr–[suA£bx¥`…ªdŒÀx‰Ï~†¹ww“ov˜gq’Sd˜G]]7”ƒA¾Ô|¥Î†•Ä}‡·lpªN¢]Ðæ«Õç©àÿ¬¹ü–²ã‹Àg»s€¡_‹•St‰M‚ŠU«Å¸»p °jn–XŠjpÑNÅuiŒK|ŽM¨º…¡Á–‘•r¯sj¦^‹¡pšÎ~zÁqˆ»mªÐ}’Ål|¡_w™g¨´”ºÞ¦£Ý¡„Á{qŠJZp:^Š8_žDn—MŽ u¥¿‘Ãv³ww\Œ_ªÈŽŽÐŽ¥l¼s™hu¡ra„VUS6U\9^g<yiGomK€lL¥€\fl?PJ1xV9Šh@jo9\lAqtQ‡Nv|J}‚J|ƒOx|GeZ5^a8^|H‰–a’¯_r|D~eE{f9s`=rcF¡…k³Âv²ušµh_}EGG0GM8TW;>^45P0WYPg{RRa>pfEs}G^j5TK;\fd€”oˆ•`x”dhšjy£a|¥[ªn‚½{“³h„™S`v;Pd?_‹V€£b–¥fŠ—Pm€@fzAgTs—ez¨huªdo©j‡¯]g¡C@k.J\)Wk/[z<oPxŸSv•T™¢_’§i‰£]w›Z‚¢u¡ÅŠšÍtr¤UVˆDawG^‚HXu@U\1KJ1VjCeˆOw’Yu YvˆUnoNlk=Zl,>b)Be-Mv@Z€Ph‡Tt‡Yz›o®u¤½~¢¬œ¢ejCWw<q†Gu–Bf‚;P{Tašo”ÌŠ¼çÊì®Øs’´bwµezÈxp¸yŽÁ‹ Àw”£k‚zQte@d]=Rk>UrDgr@UV5JSJu{Sw‹GWj<ElADf@<YB;`HFhQ[vb:D%KH+`M1\]=WTAET<:R=SD=mM:]bAv\JemROe`cKTMH>_E9u]<JJ4d\fBCQW1ZS8dS;OU@gNEX`6baGmtCdOZXO[RG`RBOYFX]AdtDk}Xu‘jaƒq{ZYƒrIaqO\QS_E:T]>hRC^a5soBuZ1†G6zY8‘QBlIŠS~[vx[oqUa~IikCb{B•~OÃ\žÉu”Ó‚wÚ’U¥v[}I\p0}S,«f3}†XbdbUTLOe>GS:MO8ibCa‚EK{[e]Lhi9Sh9StETƒGH•ÅZn ‡?yZ[b36q>8I>JP%9[1?`/L\)nn2_Ž@C{UdXC•o8‘»^³xõ˜cº¶Hr\X^3Op2:l?5S*@K&tQ(p7c²jcŽYvf5^e8ea6_l1UrEsk4n©J€¥b–Çm‘ㅇ݇]ÀImFiBHV2AN)IL)LS,Bj/Gf'Zf;U[2^|0NlgyH‡~BQ™§crÇ=‡dMx8W”EnœN‚¥Vz£YwSt‚I€…Ek|BOw;Qz5~s-b¤ZI†ULm0Gn2Jd/Sp1Pn2Q‡FHsDYR)n„CC†G*P,1F5Q#DH\k8T˜T<hBcX*Nj:P_4_c:a{BNqQU^8]„Dcx8‡|Dˆ¥^n½snžah˜_X¥gŒ–a¿¼pƒõ‹X¯x‘I}¥a{}UyˆC|j:yLt•XgŠOR~SQ^AWq9Y{?Wq5am2}x9oŸTK›]]l>‰M_¬`AN>>J,L_.oX.¸g:¡™dš¸~‡“q}©mwªoy¨v²¬m°eƒzT“†a‘t¨«˜¼¡€ÌÙ‘•t^ÖqWë˜rÒ“|ž˜|”’i›iмu•Ây’°yœswS}‹i˜§xޏŒ}„t``BkvK‹“gm«|LdMgAYg9Wa;UR4TzCe{9t…Do…U]~KdwO^zK†lAœzP…pElzLl~7o•Gc>?V.SP+nu<ho9v_1[c9a[8pP5vaBCO6pW:™UZBP{2Ez3a3ˆ‘I—œRݨsw©e`‡M™UƒšVˆ‡Q¤‚T«Ã‚­ot‚Vt‘alšhs“cmœPd‰S¬¾m¤Ïz Ï‹žÌ†€·d‘¦bÖë«¶ÿ¤Äø«¬ü¥™Ä…йw È‡{©`r€Nb‰\~³kžÂp|£iu¨ll£Vke<—Ÿf ¿{€´s„©d¥šo¤µ‰£Í¤à}·sƒÉ‚—Ïz™Ëy¹ÈŒ—Ü‹l„AluO…§w¦½…³Ï‹´ÏŠ‹¸rgwHXi3On%my6”¡_q®r©|‹¯t—®€Œ·wp™d¡n—¿r§_|ƒSƒ—j¥¸€¹wošir‘f‚’b‰–b™o…®v„˜PduCQg=]\@ypHkzPc„X{„Ws„Oyv@rh8np>ŽŽQv‡Lb}FhT­§|Ⱦz¥®qˆ—^t€Qa`<}U>eP¦œk•·kŠœjƒ‚Vu}Sl‰\b]`ŒYUwH\^G|seuclPh}FQh;>KO¡–Àº€™a­›z¨»{ˆªZ}—fƒª§¼yŒ¤Xˆ|FˆvJz‹`y¢]u¡^r”XaLUzEXxBa„Nt˜j‚¥j‹¢i‘¯cªQ}–BNy4Be3>j8V…DV‡?g„Al†Ng…N…•X‡¢^{VrŸn²~­d}]q—\]†HjxBe<Pd1LZ6Sj@e“L`”XsŸm…¦lƒNhq:Td-Mi1Nj9XkEagGgxHc‹c«y’Äy™°k‘ g‡ˆSj~EV{HYŠGg–Hl‘Nw^˜µj©¹až¬ZŸ­^¤µ`ŸÈo”Ò„¤Ù޶äŒÀyš r„’e€‚\rrHfeAQe@PsU{^š—R]uB[`Ae`@R`UZkb¤oS”db‘feŒ[_|YEQ'C[6<O>IG<MA4bR5Sr<McNQSBLS?fZAMaMF]O<HI1@BA36|G-hg<Nƒ\bbiUaNy]E^~JaZMVP;a@8qR7hrFQmWQJBW_?bpFTyJXeUdjEq‰S‡“j„utoebX^šTR}UUQFPF?FFALE1OT4FS*VH5oN:ˆ_9‘|G|‰UPa]iQT\<[W,sS5†c4‹rG~‰S‹–c—W\›hIkaV`3Vg"qk*’r,vu5‡hFIhENNA[gBj‡Ih„MfsN^sE…yFhŠT]mSN{GdoF»ŒH‰ÈlO–ŽCjQTe(%p<?@>H^&IZ4Ea/CQ.dA%x|5nŒ^bhŒ—]®k·q¡Ú~SØ»Ck_Ma5L`/DT7OZ,\R&T\1~_;hq:S”^BpBG[-F`)bO*@o1pS5˜:ŽÎƒ¦½z§Ñs—Õ~ƒ¸om»gS¥m@{Y=h:Df2G\4Yh4]l1U~:XqAŠ9Y¾€X|fb{L†›QžÂl€Áqx¹j†ºjy£aeŽSMuIL\:FY6QZ;@^7:N.[b(U8z„=_œ[KsLQp1Iy8Jn;KvEih=r„L7‚eKH4Rg1>o54S#;K$,Z BO't~7r‘mg}N^„ID};X<m‹?t–LW¡ek‘W\‘RWƒJQsC~O8•G|؃{ÃxÅ~À}v°u§tMŽ©UhÑ{`qHcl9Om8[[0pyGq¢b{ƒSsuIfwA`HQ~<Kc8KzCqz@p”PmˆIp˜TzQc²YUlCHX0I^0M]0eZ-„X;ªªrŒÏŒšÀ‡·Ã‰æÃ~¦Ö“¥®ˆœ‚h‚…b–xV¾Œk¹{{²Ï–mÁŽxK§f?š~JtD©–S­Ê|²¯vººz§Á„¢¹|…Ñ”™»zÀÉ Ê¡°ƒrw‹m¢qH£•[®žb€cXyTkg5co@{n?y§jb£WnDu‹JuŒMo“f”e{Qj9]t2|r;_o?j|E[CSn>ee4Xi>I]9SU5\^@\bIRe>{bFy‚_s„[qF[y8[†7Z;`9n: X„¡YhvEQX,VC"N=95/*†G3e…NWE"mT5t„Iu“]…“\•²V»ÉtŸÛ…ªÐ{«ó£—ævËn¿Ä€¿ÿ¡¼ï¢Äê®Ýš’³nˆ dk„ImyAƒAšQˆ“Y³£Ó•r«f^€M…£n¥¾Œ«ÂŒ¼ªr’­nƒ_”ªx–¾vr¢Z™¯s£ÐŒ°\—¥Y–Mfk2deK o»µu¥±fž¬b’¤agwHWl4Kl.Yw2•ŒH¤•cv•]t‰X‚yº‰t¥ht’Y‹¢`w‘Xe|JuzJŒ‡[Œ‘k—¹–—Ѭˆ½„™š\ÐÌzü铵¯derGidTmo|™q~•iu‹ZsxJm{Jt†_f‡VZŠK‚”^‚š[j‘Y~…TµŠaȉY¬†P¥~R~sLtd@ldDob?¢sZÀ®}ÚΕ²Òu–œU¸ p̼‡±¿ys›QUl@ndKˆ‰c†”Un€Hg{Up‰Å·¢ÔЋ~¡c€gœ£q} x~š€¦±‚ §a’Mg‹Pp[}™X|–^nŽ_xg~¢go™Z^ŽLp‘`†¯j†§e€„Wy†Rr{>_r:Mk7Cw>UF\†@d€8RzCpHsŽBk„CkƒFcƒGnˆQ‡¡cr’K[fRŒ‡mŠ­\Y};Wk;Yo9Uk<XvEg†JkŠVn—ršÃt›Cfj'I]%Hc6]pClQl„U]Xz¦kŸÅs¢¼k…˜c‰›e€—e™^}¡Wƒ‘Jq€Bgs5h{>x:ke>_cAZx<Un;cp_œ¦‰ŸÊƒ’·p¨iƒ£v¯†Œ´v{¡^g~HUrFOsKm„`š\„x?eZ8UXCKmZgŽm‚Ÿsz‘kw“hpŒan‡]TP0Mc8=Z>;U9LA5lI4_w8I„R?WTOH@RK<aL9leBiuVFaX:KRNJ@ƒK6nsA‡hvo[oREsMUGGH?,i</uX6c|RWcXeQGu_@yˆNX}XXh_sWCŽŒYv©so~wsFR‰RBy]G{rVN¦UGfPBR@H[:a[4e_0te>thCqaEyiH_b=hsGYq@;`FQF-Ef2LsDitN_–UVdVoRFbE;\BB?.RR'Mh/La(`f%vo!Xj#\Y-qu8]œNSƒ]Le7iY*…s)v‚CetX^yFn‡O¢ˆTv¶^H’IjQ[l+M„;JxHLk64U9/J-+E1`D4zu6vzQv’U‡—Ry¨]›T­Âp\LJ@szFS3@W(7I&OC!J^%PE'JU(eM&T„6FaId64d4=H$GV+jc6Š@ÑwŒÁ‹†¾ti«`f}Jwi3~€6a¬SU¡XV{JL€CGzG[c2Nw7[|?ž•>eÑrh¢v©U’®a€¬`s‡Kt€9\MOgBVv4MrCKcA@Z0EZ*0Q&BT(Zn6b<…8Z¤YHyIMk2ds1_ŒESjA_e<YqC<V>FX*Mf*5`+<E#9g.Dc2S`)‹FSƒ^fg=e|=i†IXkIjU+zk6~ƒMtMu [w±hgÊ„lÆŠ‰Á€£®v‡Ôƒ‡¬m´q‡Ã~O¡s„q<y<_Ù_‘_WšQhyAqˆJs¤_d“a]„BS…9P`/zb<iƒW`ƒYhFc‹Jq}Fl”FpqEw®Pd›YKŽ^Mj7I_7rW4…bG˜œh…À†¤«i‘®r©ˆbǪx›á—•ƒ’ŒšbM ^J¡_N¼Ê¡Âˆ^•boX5|aBhW>¡„UˆœqwlO~a9xzQt]C~iB‡nEÑ\¸¥y‡™c}Ym†Fl„J„ƒAŒwN`vMPi6`n3`z8ox8aŒ;`„8h‘K§i¿Ý¤•¹_l7UU-gs2m};NzRd]<v‰Ka„Hwi?voTqwK–‘jŽÄ—w]‚‘S¼“[œ“gk[Qd3Wn*_y,h|9iŒ?”šOs·bBS,+%()$=)7)\?1W‚?#:.1S[$fp.hv2l‚G•ŒF°Î}±ö›ÌþšÌùšºÿžÆÿžÃø™”»}•Ÿ^‰NiŽN]l9ak7Bd.BN"DO)syV¯¹¬¸nƒN‰—g¬Ï’ȶ|¥‘Rs?‘…Sy¥i„—V…£cˆÍy—Ö‚ˆ·h~Jˆ›`y“NRW0jfO§º‚ŒÌl€Àf{¶ZœÊnpÑeiZ]tCVg3f‡4sw8fn7Xi5sƒU˜´kr¯VcL{ªb€¸‚‘ÖŠk»dt£fƒ¨‚¦¿§¯ã¬¬Ç“œ^Ë”bã¨b¥‰KjeExvV»Œq²–sŒ‘amzNenDcrMf¼½€–ÔŽ¡Ü ™äŸ‹Ìˆ‹µq’¥`¤—b|Œ_zzPpRvwV}}WsQu{Q¬•h’‘W«šd ˜d¸®i¸³d¥¤^ˆ‡Nd‚Mey]‹k‡©owœa¦¬ŒḬ̈àȘκnªd§’`¢“rDZŽÀ»€”¡W{}P‘‚^Œ¨p†¨ss‘^s˜h€µw}»}„±~tªeeŽVbŽ`|¦t¶r„¡_k}GVh?PsDX{H`†Ec‘Kaˆ?YuFQyC\~Ae7bl;\yF^}GU†Uf‹Xo‰CXp-Tk;tLz…EPi8Th;Zk:Xt9\n6Vo@rŠ\ƒ¥^vˆ5Hc&A\+If9ZyCl…XŠ•] [pšS–ŸZ¡¤Yx£f~©k²`‚ªbƒžUjŽ@ToDQm<Rr4Lu:S„Wh›^v¯Qd?OsC[xYŠˆ`€‚Pw‚Z|œ|µŽ”Á„‹©eo{L[lJhnEmnG˜jBƒb;RWIjsHf}Xj€Zm‚aeV[vWcqR^n\E;&KE0SJ.5W3.B7e2/y\+G„GIQMGJ5DC1^K6jb>paSfrWHa:i_bNPnD5hhDV[OAVNJFFPD/V=4~J2ˆgCtœd_WbVD\YPqbCXuDhlS{WG”|Mƒ§iLŸyVXgˆJDeU?SDy|H`Ÿ]VŠSNqI[oIVf;\h>S^?KX>JU9U^8TmCHrOF`D\i6“`=Ÿ†Eœ±i‰Ö˜pËFª€GYREX5GF-WY5Rb;Fa5Ic2Pr)Sq'Xr"…d&m’6C…S<e9L_(ar+h†AktLZfB_i@yU<zŽINšdTƒabv=f‘@IˆEK_6Ba8Sb4WzGaX]€Ma‚\q`/zŠE_—i“yLŠºhu©{@¤~1UE;I7BAJ&F`'Dr85T(HF'kS!D•GFeL;Z.NV0Zj1or:•˜T޲h’¹ŠÝš|Í‘K¼n6˜VXO,z\!e—Cc§YbƒOOŽPbOq¤T}½l ÄoŒ´k fvŒL^…HFu7Gg1Rc1Hk8Nm=Wg:eu6DvFGW/=\'8Q$S])Sx>`p:|†;YœQFtCHt5Zs=Nd.;\)UN'5V2?I#J\,Cd/9Z)ZZ.k‹BD¡cgm8g•SU^Dlw=QtD:D/96<Q(bM![Z7Z_;dq6F¥’W¶uO‚ÍzocPmY(yq2v _o•WPŠZ_[@qz;­}C˜ó‚†Þ‹s§hršX¯go¸r^¡YA|OUS1’f;s]_‹UdŠP\ŠPn€GpšSp£]f›Y|£XiÆfW…MPX<d^5„rMŸ‹`m£itsB…N”‰\‚u]щaïõÀ¤Ç±mq\zlS¸œsÊ´}ivn?i[-‚gBŽO”[>|aHap^xlJ~iO†S;gT?‚jE•uYxsa‡ˆ[wª\d¢Yc…Gea8Xm?Rw<av8Zu7U‚-Ml6Z^6‚D×·sݸ~pxMZy6\g5ej:b–=msE]‚btƒT€‰L‚nCœT –mä©rÿݶ¿É ¸»•”žf}Z‚…dŠiH[S\f>R‹AV~;[|@‚‰Jƒž_EuB4N9*<-)-#&%egMUl?05=R,^ŠO`²\Fi2SQ*ke9{s;º…W¶âÀñŽÕÿžÃ㊣µi…KOS0Kd6Uh:?_3Jf3Jg6Fh8PpG~•fš\g€Gdvc™šm˜i±{Ri?rwH~ƒW™¿„j¼p„¥n¡Ò„Œºjo€D¹’R± d†‰SdqFhH…ŸC‡£J{«T}·Q‡˜M–™dŒ¿xc‹KT`1kz6[7Wn7J\3cx@r’Jj“Ml‘R¿žæ›¯ú ”鑎ÜËŠ©À’ÃÈ¥Ÿo‘_š‚pŸƒi¢~i~…cdmLxhF–jK‰|VuzOw…V|cˆ˜o ¬x®©{°ªv¯–q¦–t‰•b{…Kx‡L„~?|yLœ‚\ª—n—›c’]‰„R–|W—^”“^²t®®k¦š`‹ZX}ŽeŸu§ w­ŸjŒ¤c³¯t䱃À s ™`€Rxšj‘¨z™´{Ž›bq‰Hf‚LxZÀ”tÀ¯€°hm‹f‰£u™¾…’†’·oƒªs™Úªð“«ß‚£Ë€ƒ¬kl[jŒUnˆOv[‡˜_yŒSp€PnŠJXr5Qd&LY#HT'IU9czZqVf‡?N^)Q[.P^:Vc=Zg?XjAWs=]p9Sm6Ic4_nQy’KZ}1E]*AY3Nl;\m=XuDhtEmf:Ye7_v?b„Lu–^†¬eˆ§Zp‡Jnt@`u9Nb;L\3JZ7VnKw’]‡£fƒ™Vp„HUqCEpSQ{[_zTXmRoo‘«• Ï›™½yi‹Q]b@^c9cg=ji9b`?hrU‡auŒUr‚]ƒ}T‚SflJ]fRYlU60$>8#@=!0=/1</C9+i9/A]:XF@ST3RM6]W9On?^_OvRLqcQ:„h=daID?lE<›eBS’^@Xj>?E[F7mV=kWL>^MQH<i7,P]=b]EvpFfyN€fOœ\H½˜PˆžnTˆN`pQSLR`=ag=sxNl†UgžWY‡Y^iMY[<Pk?PnM[bGso=u‘[Z•t_k^WvEQcAgY3”i4§xC˜zVI‚YIRU8\1P;'Wg*Rg=MQ-Jn>NlBJv5<x;]L*[~,L…JPƒGf‰@rDtIayF_d@Ai>^J6|u3[”RV€]i{JVŒBEv@H`4MX1}m6›Sn†ad~I8ˆ\QO6ko/\ŽYŽ‚S‚¹^°‹>¦g/`U3@$5>FBYDEa,0b-;H WG%]a)DzU8U4FX*Je/_Y2m5«S±¹‡·ä•“ôªˆÙŒU¼g;•[OyCw„Gq›Ty¡T}¢X…œ_…¡[t©c^}RXxKEfDK^4Dd5Od;Ht3Rn5FrEBh=KV+Tb<=rA:Y+:Q KQ*Zh6Qx>Tn3x„8OœZUnBSy5Gk@9c.7W.3G)5H*;M)BZ$Ae-?S$IP)}b.S¡O|ŠRF‹NWb=Fc08H,.D(5C*DO0K\,G\:Um7wv1’ORS{]8^J>nHAL!_H&hh5_J\sBN_6_i/•ˆBÆÂf›èuÓ„„¢ašÈ~ŠÑ„_›^i‹FYŒe—xAm]j‘RZyF^g7s—Ku­WqªfpžR³^n·^k”WQkQŠo?À¯}ÃÂm†Uns:x|S…™h£r§„_âŽd¼Ã¨³€Ôć͹ȣ~x®‡sxZIxD]O)zd8at<bK7‰UA’nK‘dOwjUhbWi\INlH“Z2kƒZqxW—wLs‘WVCVp=Qx;QvAUi+M~3Y|;PN2`M9°‡[º™[}l;ajGhv7qs1qhEl†AhŽJr„Yr„\oŒ^ƒ{F©—b¬³sµ¤nòÌɴ…®˜h|•bއQz‰Y‚„Yš`z„Vq‹SnHošDy”D‡ž_|‹VznCSq;DP*3K&9N%xa5Gq<5T,…X¢àˆ“ÚƒH¯]L~Wd¥uc Pjh:´ÄpÄâ|¡Â[†„KtŠ]C`6G]7Ic5A[-JY2Ti>Pn4Ym@pˆQ‚¥]fŸYcŠYˆ_˜‰]‡e>fO0RP/pc3a[C™žp§f“™Z•¥hk•X^œh›o «cŠ‘e‘šau‹C_|6TX&eY/ce9TH1liO”¢{€¤`Zu<h\2rŠ:r„>crAgŸ\f£VWŠEiwEš´u¶ë›«àµç–¸ï¥£ì~’U˜eTŸvbŸ€kº‚|¦¢~š´ˆ›¶‡|•t|nVƒcI„sKwsMmlFgfDmlFxxKo€Ks†Sy›V•ŽZ€‡[xyUu„UZ|DMm6Uj9ls=vyH{}LЉV†‚T’TŸžd”¡f‘Wš€[ˆŒf„Šdˆše…£o‰žZ‘}Hš…Pšª`³¢l§]„†Rˆšc™³v¨©p–¤jvžcs›`sŸ^‚“X“ŠY–Šf¥¤t‚³o_£n…™€ ÀŽŽ·x‰»…¼çŸÆÿ‚¢Äd§µp¬·t’ªažNt}?guE|vMzsBwuC}…HMx9?\+9M1B8D,TbLu˜Sm‚@LW*>I+KM3C\:B^=XU>_m?Ru7^g0Kd/Ph<l…G[}3L`-L\-T^0`k;VsBk~Ecv<UyDW~Sd‰fu¦n‡¹p‰Ãd\šN;l:@U,?L%<J(>N,Db>`xVraq¡ki¬r\¯{a²—u¾—ŒÄЉ¥ZeyLs~o“²’¢Æ•“¹kr…Idd>eh<`l@_zJxŽV•T…yDogCeW;_Q7`\FjqOcnL66&97&35$G-$P;%=B/WC65Q0LD4QH,NN-ZY6VlCQsIXyKqmSDŒ_^o]GvI_lTÎQGcƒTf`nuTJiXKGRNP<>??0TD3eP8QB=aX;Z_@i_L[nJje=šb4½ŠPvsj\uxk]a]bQbNG_W3u^DgAN‹OHYAjD.p`3XpGgWHˆm<£jf’ˆXWKCS.FW0P^1Ai>F?4GQ&>U2?M86M/F6)NTDa7zZ4ir=U‡YY}QE‡QYoJjzAh–Ve‰OTuFE\.LZ'j`#Sh4<`<[i7c{9Y~DZyN_„BQŽI?pLFb:Ud:oa<c…LC†Ym]@AŽGWlMr‡Ee ]‚‡ZލWl°a[6ŒW3P=1;"1500B=9Y*@S&GT)YZ8?~@4a?LR*Jr/\i@}C‘§S—«€µªi•»er¸undhš^bX`zHWa4\^.a|5_…EhxAQ€EekCZŽFDwZM[3I^'Tj6Or<`n9Uy6BˆQNqHIk?Cb9;`2>a-Kj7Yu8N|7Te5t3NTThCHu-Ef/Ao.:X/CC&@J(;U4JW'7j-1H&?HQ`*jl6`š`RyEIb/=?">G+Ta/\_AWc;YdC]j8Ws7cq6Zt>W{EbIa„F?{HCV'>K'NR,`vAZr?Qn1Ps,„f/Âc­Äm¡Âm™ï ß…„œcfŠH‚>c‹M{‚Xk–QQ{RCY-[T-zŽC€ÅsxÉtp¦i‹ž>p¶V’™R„‚SÃX¿¤k‚˜go¢^©|DÓ—aŸŠj°´v¾Ü“Чm³d×­lÛµ‹š”u©Ÿa™¬t^U©TckCs}GjsLe]FYJtkOrfLgkMsXKrVFLdE_O1q^>RuTwh8SrK]q7Wp3_k5Tt=[h/‚¯Z{ÙŠX§e‰aD£‡Z]ŠRJo,bc/Tq2Tx.|o8sWƒ¢XÉuÌ—u¡inžw¡ƒS¨¡\°˜WǧnŸ¥pˆ™_„KxƒHuG‡`>š‡`{§gkBsœN\”Keˆ?v’YbxJAA+B9(AL::X1CB5OƒOEœWNŠZt›[¢œ\¯¹jÛ†™»c­»j”Årq½a‰’Ks‚CZ[/[t;`UHq<Kc0;X*=X-@d<Uq>VxFa‡Ps \™¾sžðvxÉ_uˆInm:RS,UG,]]9spIQwD’~Yx°jU~Dc€F{«pœÑž›ß£’¾}†ži„|P[X7_L0>K'CG%Z\8OY8r‹nwks8`k4Yp;tr9‡’HOi6bF1b\;\Z-Q_7~}\­Ò‘£äŒ®ÙŒ²è—¶éŸ‡ÔŠ€šp–£uš–p¡’u·¸‘®Þ“À좾뛙ºvlœilŒWhSqzT`zEcpNiƒcg‘ZdŒWˆ¨o“­s‡¥e}‰Tx@il6Ka1Ub8mzE|‹[t‰^{jxžZmŒH~F­˜a £pym“fš˜ew—S{‘SƒTwM{—V§`‘°f›•Yw…GuQ‰‘a€™eƒ¤o‚®tƒ¹{†°s…¤TtŒQ{K}ƒW¹ †½Á©’Í—£Å•À}ĉÍÿŸÊö€†¸\ƒ£a§œaŸ¡Ws”Ic„BS{Ei}Jwz@hy@[}Fd|;Up<Ch21R(4A+JREhxR_o>IQ1GN,GL,OS5[X7PX6W_Ce€CRy3Op-Nf6b|B`y;K\0KV+E^8MsFV~EXv=ZiC\}Soƒb„¤p§¼vš¿{¦Ò §ñ›ƒÛuV«G@x:<V+;G1S[=btEksQvŒuˆ¼ª™Îº›á¶—È£•½ƒŠšYrt@[jNm‡~–¼˜š¶€Ž¡Ze{GJW@NVAdrGwƒFds;Tc<R^EYZBbT:lU@g`CcmE4."74"AA$?C(U>3XQ7k\=>]@;E457`7 Zg0a|G}}K‚¡]„º{K¾Žh„ypK]œVi~a…dKeuSPQVYLCCP;?K7ZE:jX6HTFOBAPR5EaCKN:O[@S[4g-¬Š<±_O†q^a`aEUR;NEOG6UY=fU7LxETsCei9JN;CM8ZM4†e1l—VG|u-IDB-![D$Pn8-_AF3/QF$MX8?O43I,8?&?E!UY1hr:c|@VvOUlHKc<LZ2hI-^ˆ4H…M?m@8b3Kd1do6Wx@\x@]„L]‰WP{O^uRnl5^y7V€S]PR•^QaVYp4I<ffDW‘Dp‡Zy’Og…VaeE‚p:X©Vf`SI~4*jG"9-'153D[/Ms;Ll@a[+eˆG]˜hM[c‚KwŽJmœP€¢]z›Zi”bc]dzQoyAh¢VXŸfX“Q;z<2h;AR)\U$V~5U‡CGlA\]/Rw4W^;Ae5FQ(O_0Tq7PtBMp9\\3oh5\nCQpDP}HKEKd9Qc3Ed3GW(vp'OšKJpIFe.Hb.Ln<1^26A>F"9R2JP,Bn*%X186HZ#ov/bšNDsT>_47Q/CR3V`3UO/]_5Q{MBtDP_/fb@zwLixLe“Qo[GŽQBV9=U(MT-ThAKk;Zf0Sr7p{2yy6q†F¡¨Yµô•ëiÚ…`žb[œJ^uKc~F_„NCk?@I+^e6††C¢`}³fyŸWj’\lpMƒ‹J{›\ЉHªN¯—]yÉo¿ƒS¯©g‘\¹štÔ©—…œ|]Ë”]“WŽmM¥sR­^}mJvr?zCƒ„R•~^lyS•uN——d¦vrœu~‚dk}W]qERR3fsOh‚mgoOsINwDHb-Rn5^v>e…=ž¶_¨Ã{~œ\Œ}LsaddWŠRc¡`\‘Pfu,u~C„ŠXvºn¢I·‘bÀÀ†žÿ·kÓ—‚\x‡S sDpB‡h?rkHŒyN„„Wq}O”vD‘ƒTijIr‹NZ€<iz=lŒO^mDX`;\jDty\g‡e]Œ_ e”–l¬q‚¼}²r‰¸ušÅwŠÄeйe Ú~ÄjfˆEf–S:X2je7Ž­^a×n@wA=Z:K`=RiHc~be~Xw‚\„œc™–d»Ô›Øtz¿bi³\ee?`oHƒSš—Xh‰Ff~Bx‰J]‰B]q=’’U¢¿w§³n}H~z@|Md–NOsBJf6Bk7Va4ZsJšl‘–iƒPf{@cM+fZ5‚sI˜vQ[_;O?)<G0CB.]K: kY¯Àz Õ{ªÐ}ºãÒÿ®”½{¤®`•‹b’‡`¥¬z¨ÔŸ¶ä£¶ò¯¯ù²¤ð¯´ó¨‰Î„wœ_‚Rt~\€¡~¶Œ†µˆ™Áƒ‘¯f‚‰Gfj2MZ3_V;``>\l>erNu‚M|ŒVZ–“ZkNS|Hj‡Pš–m—˜k˜¨rœºgp¥XZ7`s:n‹W}ªc®nš«n«©k“bu‹^}›juœkxaœm’²ƒŽ¿s„¦UnŽJl~OlrO|ˆoð­´þÛÁ°â™¤Â‰°ÇŽÏ쩼î€Òmw±f‚¢`}YqšPt•UvˆSpxEptBYzDb„Kb‚9Yp@Yk@e_@LV?PaGcxPd‚CXa:S^1LM-?:.>F+BJ*L[9btHb„EXt2Eh9Wp>`;Qm@Tl:IpDYzPj”PbˆGVwHZnCfoL|‡e³€œÑ‹ãŸ¯ðš´Ý}‹±VušTc‰=K[2NW6Uk@LbESqjƒŸ”¨¹¡©Èœ•¹Š­oxŽRip;[XAgg[zžv‡¨lsˆgsŒecˆcm]o‹Qav@^o<VxNUxXYxUYh@eM1eG7c^JA7)B@,YJ1kU0hY8YVG:DG4144.'31$W4"XY/c}I‚O—¹d—Á…R‘PŒzeU_›OgfV{UB[|T]`ZJ\TT[SJWMMVM<LKHT=XN<gW@;^CEQDBU:KT4iZ&]g.sE7i<2i82j>1nV:`cCNgRb[LLYEaSD`y=D[@MP6Q`Bxd9X•[8`n+:753&MN*D]7D]8ER8EL..C/87/5G&;Q(ST+ek6P‚GKkJKb<<a89W=+N+C: \KSv,R|@Vr2gŽH[„RUcCbb6d|ATsHN\G?h?HQ5OT$bo>stLJXYVHWl3\tCh„GlŠHUˆ[PU=Ak4I?,|M)L¦ELoaXX.9‰75g><H/_a/]ˆK@nOBR<Zf0y{2l¦fn­es ^y—Y‡ªaiÁ‚`gaŒZQzUHZ?`Z0yk6mIR˜^NrI:n61e5DQ&XP%cl,C‚HK`ARj-MW5;X,=K'[Z(ZŽGV‹VQ~GBa<HW1VW*r^0oa-Xa9Sj=I{G6`3GHte%^T@PJ]1Qf&Vj71_-->966G&FG'Sf)'R-77#DTey3dˆAT§\P˜j[¨q^¨wF—oBtYeZ@_…NjzU¬z6“rS{T=joA”[mn]…RNm@LrB_m:OtLCoGTY7`k<^x7U†5`~9¢LË´lŒÿ¤¤Ž`}ÖpZµtnqI{œUVŒYByQOF0NN/TI,oX:}‡D‰y?˜Pq¹hŠšPs‹I{D•dššhŽÔtš‡U­—c­p‹›h®…K—“\¦oJ…‚W{‹^‡yHŸƒQ†jg|O\ƒIs‚N•}P—žlŽžf–›f³šo¹§~’špŒp|”k[TNd<wrMr^Ud@mg-Rz;P|3f†>lGs•X—]{¢U]x7xr8†œ_p†V‘ž`¡É…f¶oW…=f}Bna;¡kQ•dSX4vZ6ÍpD¯’a}†V€©pƒ§kis?cl8{sK‚‹T›Œ]‹§zv¨d“´n_’dY_2IG(Yq1‹ŠYn€dh^Rl`RyeP’bT~hG¥ŒK…V‰„N”—h‰­s~žQ‰~Hˆ¸pºì‹¬Õws}Get<k‰JMs>‚³o“ß~©Ç]b¡GGB#LE&IAf=%zn:c<‘[ˆ]Ÿ¢Yœºk§ÎyŽÓrgmRZvYw…Y•‰S_|Ac|Ah|D[q=Vz@Vh2`_#fc)bh*hz7z¡Mv¬W^P\ŒFjQU~AocK¤…p™a¯lB—=CL(OE/iS;œU1™n>PN-QG4CP5:E$L@,|O=”]¢¿w°á€Õô¦œÖ‡—šf”¼y¶tÂ|žÇ…Ê„²ÖžÏíµÙÿ¾Þú·Çù¢‹ÓŠ{³“оŸ¿”žÂ€“«n” Rou@muLcxMmlN€}^Šœ[z‘SˆT…Pl…Kr“M`…;Vj4apCm…XŸ¤l¤j–‘o—¸p‰¥`vN`‰D\~R†¨d‰³^˜™^¤—\šœ_‚™`w g|›_s™c‡¢g—¬uŸ´h°m…§dw—VrvM}yf—ªy믋턤»–½ož¸p¹Ð~´ê™çs{¼oq¬lmž[ƒX~Igq8Vc;arPhƒRa„OcŒYV~KOk@V^FfmUqWhˆHfiA`b:RL8LF6NL1LZ.Oi5UsHu†Ri‹MU{Dc{Dh€IixNm}Jq„G^‚N\~F\{9]p@SvH]‚Si™d­v—Ę΃«Ñ{”®]q~@\w?`}:Vf3W[:d_;g`Enxd‰”jŸ^ zZ„_‰XswGc_<Y`>UfGeWzŒ`{…`{‘n€¢sˆ¥i|›OYi9P_>YeGgyX`yWbxF^\0QM.EH<ED4:E/IC2[Q2_O=NQG6G=;E=5@9S;,C;+QB:fdAvHŽ–V ©ppÀƒ>¡’zV[RERaKjW>nk@‚~bx’f}‹y}|i[€`Wq]QXLI`DSXAMJ=LL>ENDEW;QV.Il-:P241%?#'Z,iD+w-*€D/GZ>HQJKJ4VQ2dk:dZ9f^B‡yVZ¤fM_rRE9^K4Rp=QZE`b8LiD;X=4A+5B/DD)FW2Ad7ZY0Lc0Bh>TR4T]17h=.Z<3@#@>\]$^~5lŒHf€HH—N]nJ[_<Tk>AU;IP39U-;L-QJ Zr>TvPHoLHSBhO(gv?kƒ[V‘P:zX<I)7O"7L1d6cz0=ŽePY8ig'P•FYySe‚AH†^FrMOqFv…XŽLrŒZo˜Sh™bw‹OŽLo­knƒ]F’N-RBDL(Ri6R_0b]3NsBHjCMf1>n51[.:R'UM%Ta$NwBPtGC_55Q'DI'[^-ovE\‚HUzLMm4?g::X25Q(=HMOjX+av9He7Ac:m`/U’?9_ECU%@\$JS&3a*3A7657K?!He$@R)5\=KY+g‚;m…@v|=r{P{l?ƒj@šrN–®fˆã‘wî¦\ºš‚|RKU7G5!fS-~uEt„[r¢{uŸkg”_d’QfP]€HVq;Ok9Up5Yx4vˆB„²i¥{P£¼bb•z’z3¤OfÅ}‹ˆ[r—RešbJ“d_‘We‘YfŒY_‘HL{:}m7r|F|AtžM”®[“­l‚PŒ¶cˆ‡W¯œf‰¶o{_Š{H‰’XƒvJ­§j¥¢…—nÄV‰†ozyS£_} t•šnª|•§x˜b³‹mÅš‚—®–‹—y’wl”{QpfW:NT>Kg>Nh.[x1Z€<Pn5ZP!dU*YfC]_@Qi4fw7t‹QfƒFr{=}n5o{=_„GXvKXo3¯†ZaºŠl_=RnD^m?f‡Pmžj“]±¡[wÕ›˜i„|L„{J™‡W»å˜|̓¥’[iŒQWi:Dj<`h8˜S–„_œˆcƒ~cƒn`ujUjlM†Hq¥TrNƒ”S…r:mk5o‚O£¯uº½ƒy¬dozN[€Ph};Rc7«fG²Ñu„¸Wi‰>:_0=h8/b5?O/cwIZ}B€ŸcÑyo¾cŠÁi›æ‡Ünj…L›nX–ky¡WeEn’Os‹LZm<X|EBs3;M N_-^g)`e0g‚<{ŸX_›Ubj?x€Ca|HanWu}\rS:”V7Šb4XK)^T:\Y4H@"xB/uxIML/UK3EQ-BA'QK0s_A”P¡°`ƾ†Âæ Á|‘¡i`†ªgªj¥^’¥qÄÓ´ÛÿèàÿÝÏÿмü²¼ÒŒ­±z cuqFxvG~†TosRkoX‹p]Ž{`“˜g–^˜‚SšuN}zKj‚Hs†Kn‘GTw<Kg=UdAŒV¢¢k©’`›’X•¢eqS{vB‹yD{…G…IŒ”MŠ‹P‡š^„¯~qµol£X…¸i‡Ðr¢Êr’Ïy¡Æ{š¹o¥°e‡¨ao˜gw•d‡Žb ”]“^¯m†¹f¯l³Ð¯Ô…›Ð•«Æ‡–­gqŽ>gb4P\4Q`Cc{X}ŠY…‡U…z[oxRd}YOvLQlIfyGgx@gX9`U6^h=^c@do=Rs@\ŠDcŽN|ŠQƒ„N}vAvt>ep<heCosHm~MŠUz…JWj9SnCgTu“b{©d¸j‰¶g“´cŠ¥Y}‰RhgD^_=Xq>[t:jb6hg<cjEwSy|Ih_0KH&GG/eZ=sj>i[<w[D„jJpzIavHb~RjŽa¥`z•Yl„UftK\tDOpGYiJdpL_lL\kBPb;ON0?D=9C6WF0bW7gb=`eJOZJK\LFTGTH=WC;WK?QcDR_@xa?Ž{Držd/xaKLSŽ<]…VvPo‡Z~€oszlhoh^oc`XOH[FSQ>_\8DY>ZR9la3LbH@PNXU9Ef4X`7)R.878DG))U4H,-YF+eE6ZT>\\6WqEZlHyk:}];˜—\b“qO]`eF=^b>ZvH\^CMV:HTAGU:Ia8M\=SU8Lb;DW@Nj9>u=/T7NE%UT!Ec64X;+F0DP$Tb/pg5b“=VKe_,V6KtFDa:DC/@< 2K26P&TJUh4LpNCYHDW7ZL,]l/n~HqŽL4›]CJ:@Z%0Y3V=%tc"C¨aClH^[(m;v§[m¥dw±pz¶o†º}a¬z\wVfy8r}=Y“XEI5k>%oe,c­nDƒTDk@W€F=rPTV5Tk6Dd7A^9@Y)6d0=D,8N#;]+JS+Yb+Lu;4k97K2;R"Y^0RˆIS…PSwMJy8<f37a63V4<X+@S%GQ*Mj,Uj:T^+a]/Pv3:~E?^07b/=G=U$'H&D .3@;H_"L`.Em8^w2Y‹:Nj/UW+Xp27e<EE${c.ŒW£’b¶ŠY¢®ohû©F¹ž9iSU>-mY5V9ŽuEr}OczIXiIMd<5H,=9"@URq.Vw9„J\›eUY3·j-R¹aU{>os-‡BÈn‡…_€Hбn•¯ui„^]cDdxEcHygEY‚C^q9dt5s4œˆD‹¿f‹Ó~—§a´•YšiPioM–~B•‡L†˜^ÏŸl®ŒY˜x\¾‡T u‰xK¨Œ\¤›r•v™—sŠ˜d}†N™qPÉ}e´¢y~ y ‰c¤kksWPO2[hBb€aOŒ]]vEO…M8R+71G]3KY2T[4FZ+^x0`ŒG]’QSo8LS4[h4m}7€p.``A¢ƒ_ƒÇš]}dMl8Ti5„ kš´o±jx–QÔža‹³krŽN…ˆQº·€øÿ½Žá’Ž˜^mê–ašde~Ol›^€ŒOˆ~@›‰HŸ¤cƒw`yiY„lR€ŸV‚‰]u›fd˜YR]e›_ˆ³l˜”aŠ£rUuGWD#s9'`a7^s@‰rM†^pšE€WŠ‚bgdt |YÈh«cc”X‰–a©·rž¿{¨ê‘²à}¢\š‰^“‹i –g›£_dˆOuYj‚UGa5TU6J\?>J*^…Y`ÀyO~>Wp:„¶q™á‰e¯fdIW}EjwVtxQZX?cJ5mK8[RBiWBxU@HL4HG8ªZKiŽRBP->G';<"MH+cX=nhJy‘V£¢yËÞ›¢ÄtuˆTe€Aq|I{ŠVt¡v‰Ô¹×ÿÞþÿéïÿÎÑõ¦·Î†—Up|Nm{MYd>YZG{}X|KoQÀ{n‹‡i‘mR›~^•‘Y‹sNxsFk}EhnBjZ>c^;Wi?Re:bnIŸi¢£u}PyˆJ‰XmŒNdy9dp2n€A…‹HƒŽS”˜_–™cŸb²dŽÄr§Út•Ãf•¯fž^„—Z}ƒYˆŽ_¨m‘©dƒŸW‹PzžQ‡«f¥Æf{¦TŠ™išÃˆ´Ë•¸ÌŸ§Pjw6Qb5HY=RaOo{U}‚PlwKjj?]]Ihvmyšvp—ciƒTYyEOiAF]?S_Iky\z `q§Wt¬Xn¡P}t?kc9XY:\m@XkC`jUnyW`sFt€VnJVw@YGjŠGm~Nnƒ^Œ§d…ž_l€@dh6U[9dcHolWszOg‹Ig†Hq„GvŽV„…K€z9VW-;N24U4:Y4K];UZ3VN2`U3hZ5fg@f€TwXmLbtIekGWjDQc:X`@YaFbmPm}OxNhzE`e1<G>:D=JI2TN0aN3n^:bfKRZMI_DlZMYTAFRFDKACU5Z^8ie4JzE/`IšA2w†2s«_™mm¨ibucHdULUJMQDRPFUQ=U]BA]FFS@\E4_P0SeE:YHJFBB[3ma2E^-ZT;Qb;>[LU14\G1NxD\^Jmg=[nOU[N}`<Ÿr>vœ`N}r]WGb`<gmNQZJ@^DIM7QO1\J0_`;U}PTfNEqJYhN[}=AqA>i7DW*LV+HQ*Ac6G~JKjF=Y<^M7fo6=–MHZAkQ"N“;2tOBL8JF%<XB3L1ND"Xa1MvFDyU?\BIQ9_Y%fd:ƒk@?¨NF_T?c.8S:EU.t_-L§ONu_]tA‚•Z‹µdŽÂ–­w¨´²‹Z™o^Ž]b~Q_n.*†B$A0L6yK%a—NBŠSZ[1Wx9>hH@O6PE+>f3<M.JW#<_+3Y-1B(9D#<]-E[+I^*Eb)8kD>T1`a,[‰JiŒONŽgKpELj4B]8>X48K1;GCL#^g)NŠ9AsBQj3Us0R{=Mh6=h?9O)8G&;Q"+L(0?!;=R\$Oo3Xr9]‡GRANk-QL)hq.AzKDZ2`Q,†T,cS8xT.fOAÁB$«±jdÿÆH™…GL4BF3MB,vi;s‘QRbDa?7U.;J#J`)]|6\=y„FFlO6K*K%fEL~LKg+df-„s1m¯[jzV’g?†Æzkro|Ll’ZYwBbv<X€<\n4Rw4do9bjH„hA§ [‹½qw·dlŠcf€Vp†J„B¯™T°†X¢’n‰š`ÁƒW—tƒ°ƒ²¡mÅ«†ÒÀ °·Žmših‘XŸ [¦iá r–ÅŠ«ªy¥pMšpG^FXY9lT0hW1mj=X’[4gD0L3Na:Kq=Jq=Gs5Tw4Zs0^o<If9ZiDVm:Kn.Sj-mm9™ˆu–½‹h›oJxA’[”«x‚uR{¢gh¤l~fMx|Q§º„Úò¶úÿºÆxŠ SÑᅙ擅̗µwy¹}\ŠRkG˜y;“uA‰o@qBŒ›Qsƒ;m5v†K£¿q”ÉsŠ˜\™Žv«·Œ=r9/83!r@3‡ƒQ§›u“¯sq™P ¹q«Ñ|©kTͰ¿ê° ·ƒ–°y¥³u¡d­ª}Æô¯ ÔxwKªž[¡j}V—[w–hs…c`lHLP/IF3XXEHY=gJÇ¿zfœQQS1~b>¤•[Š¢eiEn€Lp‹_†¢e‘}YŽ‚\wvQ~iF¤yjy’olTehVekTÈŽlLRLaFN|HZzClzFlvN…¡e¡»~ÇÛšªÖ}¤hf’Yq™r”¾–²è³ÎöÀãÿÀïÿÏÞÿÏÅÿ½£è‹‡§`n~JcsMgiJo‡a‡“juˆdr‰\xt]p`’z\|a£{^”‰cpZb~L`cFVV@XK=YP?eeKitKr€a®’l”Wx}FqtD|TfW^ŽId”Zš[‰N|oNšTs„=r‹F“ªeºlu¤VbEn}Tj”ZOr:RS4klM}XlŠ@kn<iƒ@z‘O„ Kj{BZmO“‘nȼŒ¾Ì„‘ªhnNc†Ra}P`{WgbeW^‡JW|?Z_@noi€›ˆ‡©zwšfr¡ax™_o–Rf_…¡—Ô†‰Ëw·`r¡L^p3UT4O[;XjCcoDoiP›~]€tFgwQ~RrI`ŒBa;Rf:YjHjzMzvKhnBL_8F\7EdId{]{^‡R‰”OuŒQ€†QsoGY[-QM.JR:NpKUuLXzKLrDHg7JW3KU2KhAXtAav;Xa9U^9M^GUdDQkBQc9S`5Ya9ciBpvFie@WV0AQ83F63A-CG-zG$jQ2\TFbSEXWHb\HaXDNX>IQ7>V3IL7[T(Lf.'e6H>(E z…?{™fTŠfR^Q\T:fc@IkEP`GaW9Q`@IiEBhEO[>Vb9ne:[oCFcILR6LU5[I0_K2N^<6nAHG5‡D2\s=[€Ym`;VfJZf[quKŠNhƒTYr`t]IzzD_x\SWOQWBEkDS[K`YA^<VuJTuX\zFPxGT[>U`1DU1:V05K$XM!xa&hHDœ[EjQAVGa@0Q{+:K_S7ka,L‡BEuFmL58gB6HAIIH_3^\7RŽDFŒaGTMRV+Eg9m\8Z€:U~Q=uC;[ELW.lqAdŸOq¨l‰¹j†¯„†•lx•U{‹O¥V…£i’›pV–hIj]Xl%A};*h8EA0e_*i{J>ŠXDW?H['1[@1A&CHIN0@l/La3NZ(@Z:;`9?\.BZ/8_/@`0N_(<i2HY7^a/_z>mˆLKŽ[IcGKm78X11J%*=.9=>NW"hf,KPGl0\g/Gx;PV(KL$6Y,8A!AO"5L%-G*><XW$Or2^h,i€BQŒHAq3ES&b[&Tt:J`37L%97?*€G'9T<M1#8Æo5fñ V­¤YŽPcrAz„F’\_kP[;IQ&Jj/Yr7X{<a`;f@AoEAS1]P,^r8\q-I5Hg.Qd'†t<Y°^ixU¢lE{Ð~s›liuEW‡=Vj.Zr2\|=_‰FrIg‰S`c<‹„D{§gŠˆ^»‚G—·Y”—O‘œe„³ƒ••|ÈoFŸ|OÛvJ´—cÂ’`㲓Íu×tW•sVueA½[8’€_¬’T¾¦f¢{}ƒV~gK}jD`gM_wDI^9>W2ZP*oŽEX…TRnGVk?kb1p–[j­e[›RKl1PU#\Y%lrCWzEIq8Rj){v>©fF—go„\_h5—o7nŠS`}MŽShoB|e<gž_›«kÌðŸÍù¢´Ås¥P~¡G—²Y‘°e”·n™¶l–³y€°ov—Pd?nt/cƒ3|•I³pw»leŽI‹—Vª¥l‘RˆxMÞ¿–²¼IV.8@(:E6ey\ŸžpÇÖ”®ÜoUµ¼pÈû¡‡¿„¹Âáô®ºÈƒ¾˜d³¬‹­v±·{Äâ”¦à…‡¯gœ^¸µn¦µp˜­]ƒŸRnx1fd1BU.>='ON<kUDju<{w9jn5T_.Rd;ZwEr}b’št™¢ƒ†l“•]ˆ—T²’T¥¢d—“e••dшo§»—žÌ£™Øª¥Ê˜§ÉŒˆ¼„‹½x– d…•kuŽi›ªq§²y´¢„³ç˜çš˜ä£¨Ù¡³Ê¶¬l£|PÁ´€îÿÍ÷ÿÐÓÿŸ®Ó‚°ik’Sj‚PwŠ`€˜g„ `Œ£f h’žs™¢{££i¢€M™eL™sR€ˆ]t[x‚]x~VgdDk_A…vO{l@rdM‹ƒa““iwš`sQy~P“d~¸{˜ß‡©å|Ía‹¢K‰JxŠD[};k‘SÂuŽÏ|f­R_{Ox‘c]”V=m9=S.cP7niBbvGc†K]Sogd xe©n]—a‚šm½·¯Ï‹Œµb{ ]x™_o˜j…Ÿoƒ£`u˜_s‹L`e?eh`„y¡p„‘mzšr}œir–dw’v‰¨±â‹ŸÐk³ayŸMUz1NX/XR<`k>Zs@aaCriDrm@YoGn†Nk>au<Mm7Id7HgIWrAK^>fnM~JZtR]‹dgš„©q†™SmKtWy–htŸ][€<LU)BG6MhZe‹elŽau‹b`YWtFQtBQn?Wo>Ia10I%5C)EV:UhHa|O]ƒCUc4K\5Q`;Zj9lg=_Q0FS5CP4<J:@M6RG2K<1R?0VP7PY?YSDSU<XY7bL62Q9&?737-=F&+P)6E$r[ ’™;T·m7˜p>iSAS<AQ;@N9IR6IT3JL3RV5VY=Og:ST<L`<FU=GP8OO+NT1KP4bK.S[4T_Abo=Zh>fmJOyIrW?ª[3YŒ_klmuHc}Th…Rˆ†V‰„\X‡hX^_pS?ŽZ9~iJt~P`‚US‡\dyPgŒN@zRGN;?O%EH.:F*6M.JH!OOfS'ty0d¤O-†pDMLgZ1PŠEK~LZT0iP'Yv3u‹J=kD9TESU#Ea>WN3nn7O–]@vbGS2Nl6Hk<jc0d•JP˜WL‡Yf€Q|’X†©gŠ¥m}™Z]™p^}Za~@ixFˆ{9¢›aŒXS†a8igG;"Cg,9c5Oa>^p:^pKB{G3W<NP+7z?FVLEU3?=,Ha+@c3GK%@G#FY1>^6<X8BH%;O)If0Im3A`4RY0Zr1h:JRJSAM]+6sC/G,';-7GCE_+fh8L‹BBh=Q\#<n98U)BF)=]/IR3=U*;H,>`)>lNWl4Gs3Ve/e‡GM‘EGw0=^/LQ&SV#Po19iE5O(DM)q_5BS???$A9"h2À@ˆÀrbâµc‚XoˆG‰”Vc{UYsGGhEZj:]<Vi?Vd9\c7Lg3Wd0^f+Ow7^w0M„;;Y'QK\j3…i8_­^~€X¥“TmÁzc˜Z_•?bAw‚@–Kq«T~—Ts¢\[—^ˆWv£^ƒŸb{¢iˆ‹LŽ¡]š’`çjFívV¬›“Þƒª‹”™h¡†KãzGª•k‚–ytoHc{O‰uXŠy\vhN’ƒE…„Qf|Tdv;aq8aoCMc:GQ7c]CfxZi‹O[’RRT6IR1S[8vl>ru<i‘KE~B>b)Ea"Y^.Wc@QnAXy<uoKs¡u‹¥ob¢mR‹Vm _w¾€rµl`“OFe=p„NºuŠ«]©¡OŸ¥Xr©YÇcs»]{ŽE”‘U¦Í‚‘´k©‘SŠ”Tpw7]v.Xt3gƒA’U¢Óz©¿]k•DˆŒSˆ›[i¬i“¨oÝРlŒY?K1[]MxsW´xZÅ rè½~â½y|§X¦ÁrÀâ‘§Ó{­Êx­Éy«År¨kÂÑ™¹à”žÜ‘®×ЬÓ¬Ïv˜™a±­iÉÊ|“À}p¯jVj@P^8W`7Nj5[pB€Z¬®}—Ôn{´_¦m†®p†¶}¿³„ÿ²‡ý°Å©y—n‘¥e”‘\³Š^½ŒY¸œd«™i·«y»Ïˆ´Ìˆ³¿ˆž«ržc–žj¡ŸeÌÇxÄÏ—ªÓ‰§Ó}©Ý˜ÖÿÃÒÿׯÿ­©¯l{^5Z=$MH3kßÙœçÿ±½äœŠºw™`v[v­w¢Õ“žÚ{œÄiÁh†¬Y’žd”«r‘ ]vb;nO7‚[L‡…a™l’œ‚“¤~oemjOƒ{XwYp“\kfˆ«t–¾t°[v‘O‹š]¥Ã„Àï±ì€ŠÁUp @p…9e}3Ts5aV„¼q”¾gŸ`YŒ[a…e€§€h­kS}DGV0QP7bwR\‘_dšnq¦”‹Á¥•Ĥ‡Å‡o®v—˜Ôá–¤¯ep•`t•j{—p“et|Zs}TtzDicDibk¢{…•_‹zXn_u~aŒˆo£¤‹¥Î–´Ú‡˜¶d€¤PkDWm7Pa;ZdH^hNaGP}FX}N`ƒS]„So™YgNVzEX‰PJ“cW ~^±uKZUWi“PfVqŽc‚¦x µ~˜¯jg’SMˆUk‘l„§f~›MTe/=G1BWRbhs‘nzœvp›odŒT_}>Rk8Ib=OgBGf5?X1A^CGoHZxM[rHXj9M^5Q^9\k=bl?dY5LU.PF6bG23O8A=6MA,VF2LG>NPGUO:`L6pV1o[6EM93K9:R7CU1*M-WB#~[%‚…DŠœ_[°ev–fMYH`[:QDTG?0N4?84J@,UA./J;A)-=#:+":+ J.ZD,KO5[O2^f7ae>koCy‚IX‰KHsRc^A´q.d„RcqledBbi?}h:ˆ}L˜—Wl›bfŠsZdZ_YLjqIkzLk‰Pn†\cvTPyN?VF;N5>>.@=#??&1@$7>%1?DD#iF!yc&R¥VSv^hqNo€UE—XFf@MR0lI*q†;D™Y<ZNPP'0c8PE3ac0fxH@‘`ONGL[-La@pY0sšEn¦`g™ieyWmhLqEc¥cv~Q_XXƒScƒKR‡FpoJc‹B^U^ƒP*hz48&H`-Te3QjG[o?KtNQe>Ip?Xh:gv:_ƒ`2bZAQ8HZ-6l0-K*67AB >F/2A)9I':J#ND Pw1DyDQj<Rb0kt3>‘S7ZFSR*<h0*Y9&1)5FB\l4PoH\o7@ˆIQ]*Fq7<i1JK,UwKD`JCS-7N(fW+Zw9_ŠJL„Cax>_‰IS<Ev/:`*9R'SM+hy@MyMO[5WrFwlB^ŠMKf?4Y)5B'I>(¡T2‘³_e¿Ÿ€qHd•SLV;X_,Sk8\ŒUdˆUhi;Ug4cY1O?_j=Pl8Sn4V|3Kq2@X&=8IU,HP;vO-n¤M~‹G‚•LqÆfŒ_Yf6jt;{:u˜GŒA˜yU‚xeƒŠSužUª—Y„˜kwŸN‘ž\›q†‚[ŽrN¥uOÞlPÃ~I±¨lÚ¡“½‹¿uWœn:wuFŒ…ež†j¬‡o®†f“vi„Y^w>^a?]d1iu<gz8ZxD|lHv[:od3^—MEnNFO5WF.XZ>YN3`~<Fy7;[(HL`e)‚Hƒ»d§X¤b¦²}˜Ì’»Ê‹¬ÿª¿ÿǾÿĆñ—p¯fr•GŠ¥U¨UcœF_„;p|3…‡D¨ÖqÉw^s6xq@¥™R|§V}f<_™UHf3Uc.[Z)†}7‡’JºŸX˜Lfp5ll@|B”T§ª`Æ¢vEX3Z;1{lSyyX`†mƒ“až¹~„¶vvŠRž–V°³p¦ËvÊ凱ãžÞ„×sÆÃlÀÉq¦Êpš¿uŠ»u©½sÆz£Ì¢ç±Ì…•Ì}sxQsWBxOD…dEe€St}Q¹T¦Ÿ]—FÎP΄Uã›fä£wÿ˜€çx­Štµ}aš”g”_‹~b”…bº”p¯–e”Q‰{BŒvLyM}nAul?pm@{uLļxÔ阹áŒÀÖ”ËוÜý¦ÑÛŽÁÂ{±hGy=9Y5HeDz™lŸ²y±´~°×–‹ºqnˆLt“_™Ä‡½å„©½\œ«T´WŠ«Y¡X„•Ux”]c†V_vMk€XœoŽ©£¶‹°Æ ­Ëƒ©t{†g‹œmƒ p‰µo|žc„•[s™Na…=eu6xm@ƒzHƒJ†“GnŽ9b„.Vr&Me'RS.xjDhBkˆ[{¥‚€½ƒ€£¸ym“OQ[,KJ.Z]Qnžwx·}ˆµ‹•ΰš×±Ì•…²€²‡¸Ïˆ—Êgn¡`p¡p‚ª‡…«}•¡qs•^eL_sXo…~¸‘¢flmQpmYbp^ewi„¡Œ¯ê³¶íˆÀ]w¢Tb‘KMsEK^€Ÿt‡«lj™Vk—d{·y†Äws¶sqfo˜be—nl«ƒ†Í– î±Æÿ¬ºì†‡´aq‘Pe~P^s]xŠb•šh™ j‰ªw|»ƒ±qz¦ap‘Uaz>=X0>TC\t\q‰k€¡‡ƒ«}o—\g~ISl<B_;L[;SlAMjGTvU`ŒXgUYuE\iBTf>Rd:[h7^d<_X/D8)]7(CK/9F<K@9`D/eG1ZP>IO=@F5ZE1TH4nS6XW<ER>4T=-E./>&D:WJb`2zjB’ƒO{­[n¦g`oCTSKH=DI+`G4EH6_A3&L8'.-*">!m4JQ0KO:ND)DU+OW3Ye4Ss>V[>LT5ie@ws2btH@THKS7e[/„`,zb=~fT”X‰hr“mo‚`d–]e‹^rvO^~[jwVPmGMUK7W>9L:0G/1C-6:%9;&6@'7F*:K0w>$w|2vzWu•Ucua]|OHŽDB`@TN1mr0ZŠS<’RAZE9\9FU<SY=eg4K‡@BbEGJ*K].ei0~–Az·jM—_A_KOM2}S'V¯O`_YM[hFZ[8Yj2`‰Dg‘S“‰e_q_9gf=N>IT4Rd3Re2brCI{LZ_AKv9V^6{e3h|IgˆQN”^B{bAf<,h45;"<C":=,78%;J'/I(C>!]D!Wƒ4M„KCk>i_7SNLUF_CDW.7_*#WJ*+_<\m1Jk;_f-M1O_>Lt3Nr8¬S*ˆwDN~w?l@KoCXy@`„Nd†<[ƒJe‚EP‚CYx?F„6Ek0IW/Y^2al>ax>|nM[pFalEq]:VT<MT-bH*\\<qsN¹‹WvÄwu z` T]mCS{@as4zŒAl«dWiVtI|i;pmDn|GUxEYi4\~.Q‘L2rE79ZR'QiA]ƒHd|G^ˆ?~uK…ŠSY©xMtImd3x‰=i‡8ot<™Š]‚œsƒ²uu‰NŒƒMl¦gs‰LbcB€R9kaDbU<b^>nwQ‰ªh¬¸dÿÀm±¼jm´dnCœz@³w[½™x¢„_ö‡i¤Ì ‡‘o}’_Ws9eZCm_A[]=bQ.Vi1@j-RT&px<MwPK`B\N2w_AZd>Yv=ChDBa7>\,Lj/mi7nnAivAs•\Šˆ__£©nÒñ¬àÿÓÖÿË©ÿ¹€ÝŒeÉpr¶`qÆgi«PP¡GBw.HSˆX*el0Fh3jn.y†=z–@i|D~ŽIb“Mf}DLj9`L*|}>’Pg8TO/W]7UT.`P)ˆ_9siE;SGd†j‘Æž…á°ƒÙ³ˆÍœ Íˆ•Å}~°g}¯]—N¡¡S§®m²Âp¸]ŽWŒ¤`ŠŒP–vT‡\ŽŽj’±v·Ó…Êñ´¼ÿµŠâµ°s°¸q££_…`H›b=¢Q|^_mQ}lO‘iƒ±dŸ„\«qÈ›xë vÛµ†Ò­ˆÊ¦|«¥n­£m¡Ž^”‚QžŽT¥•i}‡ZbrMYb?ga=_T7VV?]pUp¦~®â¤Òÿ£¥Í€•ž]‡ƒPš¥l“¾ƒ˜À…–Ó”tÍ_žko¥qŒÆ‚y¤YsgK¤«ƒ¾t\pCn‡S¥Äw»éx‹µZwChŠJs—Q•½k€±g•¨x‹Ëƒ|„y¬~†±„™Ä¨Ô¡ªÂ•­Ä‚£·u‡–VŠ„N{{Kƒƒ[z›^^F^f3``6X\2S[1M\)IR.oe:x„;Zw6Fj+Ee,9['=Q&La0\{E”_™™m“¤`¡i—PVv;<O-F]Gt™wÖ‚€É|™ºŽ­¼–›´’‡¥€}›wˆ¡ršµc~˜PnŒ^zœy‚«Š³y‘§deŽNr{[Œ“ƒªÀ›•µy–^‚fy‚_a{cq†Ã×¥Ãô‰Är|¼|x½e¹{p¸ˆŠÍ˜¡Õ†‡»kq§j{˜h‘—m¤qЬux¨os§„“ÆŒ Ñ’µé§É÷—¯è…‘¿g]ƒKQ_CYiWeƒap“]mP}•j𦀗¸‹·tl§dfQNrA:_DI`Ob€`uŸ|‹¨x}š_l‰SX‚Q\ƒMF|HNtHXƒVc’fm_qŽV`vBPa=JZ6FU6OX3TZ4HR0U4!xM'yY7bVHFTEjDCiK<HNDH?9BH+QH-JQ/OX8EU>4E21E-/N,*J+4;"OES[,`k;}pF‰‹Kq«[@›k6JR?97O?&PS1L?2<2*5+&1,;.16"i6mB PJ)HE/CI$EW*S{5JsA<V@9E-GC'HZ)MS(9g/7R+@M.T\4kW+yu<†VuY|_xˆ[‚¬l^¥ikŒan{Lj†K‚V~}Qb~OO{TM_LBd75Z2BE)AA+68)>I&9Y4kC+_n6}dMq<] f`t\bDQ„EXT8`m=]|Y`pLR“RIpKQl?SLlwKVƒEG~H;b5JW2nj3~…7o³tTŽk>wB?T<sG+o˜;`‘gspW_yD6_HSE3iw8{D‘±daŒuFj\29/CD&F\*Z\3Sj9=l?UU;Lq2Jk?Le;`i;€mHxšQhŽbS^5~W6Q/8G).7&C8"8H+;K.2D$BE+hd1^–ONŽWaQjŠJCR6H<EKq`(2f7$HH\I'Ri*Gv/G`*WW&O„CWq>U}@tZ0Ÿo5T~ZR^<\R2Zn3Qk4`i/Ts6\~CRbBWu2RŒ8Q]/Ck;I^6[i;rg8rb4V`CZYAQY3JT1ZS8nO7o`;bbD„U;z¨[zƒVq˜]i‡Ad”Da—TƒJoŠ]qmPe‘Ye€b[qK‡b6MŒTPk8_t2„…:IÃKuSWxI]uFgp:Wx:oz@jŽN}†We›_P‘Vqo7j>Qo:a[2xi>‹WƒŒZ_šUzgGoNWyHj`IsmRps\q‹cˆ–e›•\Ž’S—yOfw€Iny1or?}†Rº”G¯›]ŠYÂ^¤_t‘[m½…m¦{xn:mo=]n3B_6J_1I`=I`2is7fƒG[bCccF‰uNj’QUu=PQ=Qo:Sw@NuPS{H[u@dwH†‚StœcgmI–}>ÕÂãð¸ÜÿÊÈö¸•¨rˆ¤bŸÈl³òø‡Ž¢\Zœ^<„@Jk5Fr5Rf0_\-]M€žl{kI}qEud_nAYK%YB"}l=|Lj{P`aGedAMp6AT4^lBcqJ†lªÁ“¿ß£Äò°Òê¦Å豤߰‘Ï–~¿‡ubo^=‹iR}]Ž´j|µh{±l–¾tm£_’yWŸ}b°z\ª’i•©xɺÃꡲöŸ…¸jªšZ¡˜gŒmx{WŒ†d’‡j“q¤w¥s´¤q޾tÈfÊ›h„SÈ‚b¾”n»j°˜c˜\’“OƒšG‡‹K˜‹a¦¢`„zKwn=\`=dY>vsP°‚¹çªÌÿ¸Ã觇¦nf€Ra‚a‰«†Ú ¢Ú°½è¹ºöÚퟙӇ¡Êwž]EfEybZªËŒX¥_dƒT¥¸{§ÌnƒžBlm:r„L{µn‚¿}”ÇŽ–Ж©×Ÿ•ÅŽ¶‚”¸ˆ¡Ã•¯¼ŒŒ¥v˜œl‘£ar~Avf?vi;gjH‚‹Wk–LRn=GZ6^N6YV9N^5Ei5Sn6w9r‰6^u0Nn1Mf)=T)>J%OP,_Y<iiAkdFztI|rDpnCUn?^~[„º›ÏŽÖ~{¿qx¬x{“…{›Œ}¯Šu¥ux¢ai QX‰Yq”oƒ°ˆ‹­€‰¬kzOc~Jyˆtž¢‡•¬wŽl®ŽrœŒog‡mi‹u›¹¹Þ…’Æy‚¿ˆ“É’–Ò—“Ë’•Ê–Åy·dv”Tm|D]`AooTЧr„¯k~ªrˆ°y“»o•¿}¶ÖŠ®Ì|©¹oŸWTuBUbSh{fq‰Zs†L]Eh~\œt¹}ˆºxwªei•ea‘\S~Rf_„ªg‰©_mˆLeQlŠYu›_xU^‰We‰`v’h{Ž\n…R^rASg>LX.?J->D%=?$6F*R;!kM&nR+‰S9NY?bHEMP?>H@Q;1MF,VQ/WR6=U?LU?CI6?S0>Z0$[.B='PMOb/Lh:XpBˆr>‘KK¢]+i\:I;OM1;S6(I2,3&*/*9(> +4$1:#7A"1`.2K/KI!}U(r‹5/ŽP<9=-D(@?+5Y(Ia4An7Ua3;N/KU6hq2ƒE…|Sqh—w_Šp@v ii—nh’^sŒWmˆPn‰YfyQ]rLPe>?N=9A.E?+_?&6M3:G?Jc6Hs:|fBV~EZg\ud9gMQ•gbuSZ‡M\~IcrG_†MrvSc€LV¡]k€M]žZcs^ON‚EBfERc<`r=}r;k²^U›mQbB:m4ZK5sv0M—`l^Jre>d_gˆpc‘ev’g“_x¿1‡}6JF=P)GY#Lb3Mi:Ce:XnF\ŒINƒQSnE[rBTwTpU:{m0rŽNOmUO~I<|D6N=>R1ES3AK+IU5Pk9Q\:nL0`AXŽ]eƒD@„H9T7O\&Gq8RQ'TuDMƒjIf9Ma<b"`N"_„=lLR~HYj6]1=hM3>&4;MFMj)VX0\j3LvB=P4RR&V~0O‚1JjAVb@Wu=8jIU<'\N0Nq>?XETC)q]-hgDghETQ7‚K1gŸ_‡“\i©\l‹T~¤RºuŽË›y´‰a‡XqrEss@mŽTwzT[ƒ2Qk/Xv2¤7’¶i|}WopEa5Tn1Sl<[kEƒxFv“ZuŠGg¤O_›RZƒDR{Fb{G‡“_|¡k€²msžb|“SmšN|‘O‚‰PŒT€‹P…ŽYrU‡b>Ši3se9€g2dv6Xu6vc4`h7uoB•V|ªjv‘@s~?{`D­tOprKbn<bg0NX6SJ,fhBd‡G^’E`i<lq?WS8o\0…FY€DSg<Q_>TZ4_i.Yl@[€?XB_sAi{Jw~Q\€Gbw;‚M³‚Pʨt¤Å‹vy\y~D˜y?¶¤W¯Êzo¸tiXAoJ>W|H_ŠCešQW«d™‡m©¨xrqL^F4yvUVzTGg<<K+X5 wI#|f4jk2i`9]`0rv7‡”N‰Ñr’Ý”±ãž­ß¥´Û˜ŸÕ’·p—\˜O¢`…¼‹Q·z£Z˜›aŸ—[Œ²jž¯dµ¸€˜²z„‚U†bHƒO8ºoO¤¢oš½ªÇ{¿ÔƒÇ~‚”Q‹‹W˜ŽYˆ]“…º¡„ª|•¿Ž’Æ›€º‰¬v{™aœŠO«–Xšh¤‘k—”d…‹Y¢ŽQ¡_œ]‰ZŒzV¥]’‚V}€N¤i‚Ë{ ¶·äŸ¶é›ÁÄ‹²¼€†™afxOt}W—©w¼Ú›Çê°ÍîÊØúÆÂï±¶ëŸ×‡ŒÂ„d¦lR\@›aXš§ak…J‚ŸQ” @_t/P\+dfD–®u‰¹}—´Ž°Ï–°ËŠ›´j‰‘ašhž»ƒš³~w‹S€pGƒOnuFcj=de9^[2jk?‘O]E_qG`zRt˜Ty Wu£Xd‘M[@Yd3PX4S\9NU6QR16C!*2/+C5$P<,_J1`Z:U]>V`<b~_­ƒ¤Û‰‡¾p†¡b}£v|¦}wœq…—o¤q޶ls®_l¨cv©j©l€žm{™`rˆTdKgˆe}œx{¤lzm}rtƒjpklƒa“žx®È{’¿t„©yާ…Œ¹~‘¾z–´o¥e|™Ok:Vc5DR*GXEo„[ˆ®f}ªb€±f…µd‹¹mаh€•WŽ€Z¡”[‰‘Q]|Wx€b}‹Xs†RhŠG[yCatVŸw¶|“¶q§lˆ_oJVsPn‘WvŸJZwATwH`ŒPiŽRrŒPpbršjr—ei†Z]wN[m:QX2RR)DE -7%467#0@!=<!U9 `@ WN*cR5AL5?A*B8*S<'NK-SS8bO;QZ6NM8BN3N?/)a*:E-FD!DG-TI.\[1\i=‚w?c‘IT{UZS>RZ<:[;.F3)?$5E#Hl.=};IC;=O7aP1Gb2:T5?P'KG$PR%<lA<b:=S.DS.FT5Z^CMr<MjDEf5[q9iv<{wE‰iHilNot^ze4h‡CdZhƒR]}GjŒNi„QNxPIbMH[94P5H>+iE&y[;\m@hƒO`NSxM–Q4iŠBRxkfVBnf:kqB_¢^_w_TŠJWd;`i:jzQh„Vtœgw®nvŸgR™eXcRPe7T}H^BSYHvj:{ LX¨nAdNEG,Hj0sg4R¦Z`wV‹€X—™|™£ƒ€™„Žl›–n ¥suÄ@ŒCoURr;U‡Fa‚JbˆMvŽWi”_QMP\8V]68oK5E/V>kJS‡Dt|Ur™Ec‡ZOˆVBsaGQDXd=5S7-.#?2jBpx2a£_>U;b>UW&De*fU.’h5V|FzZEa'@fd^"~w8f¢T^“M=v>> 5`:/B+77MN%Cd)E^1Yl1@q>@M4PO%[‡0qˆDr¶j`¾}j›l\œ^U—b\``Ÿ`Iˆ^_cN`yN[‚N`sGUm=eM=u:|¨u´so±q’¤l×´wÕµwv~knoC_ŒKdwBkwEa‹VU†PW{-Sz9{z2cœJDb>Qd$Zf.Uk>TxQOXFz}@€„Rh‰Nt”EE´oh¥kƒœ`’ì§“ô¸Œõ´fÆsLr’Fb¥RhYgPejA\bAmjBhpJf~B`yHa€TZyDnj2i|M’…`³°ˆÉ®u‚©na‡StŒdhmU\hEbs>Ne?US-La&TI0hVAZbCnf8eŸ?qvA^lAdxJj‰VX}I`b0IZ/BU/O_*pi-g€=cy>^i<ad<[e:MX,Xh1]r;_i?yP;ˆhEdoISk4Da%rQ-‘kOz}baoY`cImH<dW:uk4SÅŸsµ´}mpJ^gE˜blœ_m>S‚?Dh6E]5`wSSuIYK0fB,dW1…z6®Ÿe¹È†´Ù’­Ö‰žÇƒ›¸Š‚¼l_€C^_3`h:ŒgC–¨r²qŒ±d…©\z–X€zS¹™aÖÆ€‹¸mnzMsM1d=†tF†‰T„“]•”b—¯vtS•‚Q†Yvm™¦‡š·‡x£v“šn™³ˆ‘À•‰µzž¤j–šg²®h¹Ãt–YhyP‰€QŸŽR´™ZÓ“\Ëšbˆ`•Ÿf¡žp©Ã¬Ô‡˜¾o—•g¶˜r¡Àz‰«q€¤mg—Z`ŠCX}E{W˜¼y£±w´²‡ËלÆå–¹×–«Ý‰¢Ôz¡Ôƒ[²[R`6€uLq™R|™>d‰4Mh,LV'RQ6zˆ[°n»†­ÎŽµÏ¤Ón®D`‚>‚kQƒ]iwAYW0u_?zlBvmCir:Yf3U`<dvT¬qc¯i›_¨d|˜aufv’bƒ‡Hhb:fP9g\CjsRU]RxM,^/9K.:F/>5%E=,IL4RP=WuXi¨ˆ{‹•‰¯`d—Ih€[ˆ¨m}­qf©mo uްwˆµcsœKn‰;q„<nŽKf‘Rf’Tf„H`‚K’i‰¤na”dh[hx[_s\jxS€œf›µh…¡\jZt¡p‚©h…¨i}˜`ŽgtŒQiv6Wd@He<L{La›a}¨a…£Vz´\‚µ\wšXq’ZdxPXqIjtQ˜U¢—b¢`ˆž`hŽS^EWv?Ld<[wSˆ‘X‡œ^›a¤f–†Xm„WyQo@Rt=OqGcƒD^†DXƒQ_ŠaoŸpƒ¦ss›ag‡RSwJF`4<M)>G)>C+4>*.4%#A(!9%$6;:T>#A=!(6#=13AM=%PI&CZ/RY8VP8/D8!.-E%"'K*G*$9 *1-6 O= UV.Qe7a_>/mD>K4IL,4L.*I2CC)pL%r7V‹OLoJM^7>d.VH"=M&5S;SB(Z^(LoA9fP7P-RC$DY,FWBFT/Sd/\u3M|?QgAVW/tc2bn3WtIhm?g…@V„W]rI[_9ckDm{Ib‹KIuKIR@9U8a@)uXut4j{AStEc^6Gˆ=…YBf3C€]ZNKOX;oJ>lo>W¡VZˆ`^ŒNcl:f{O—g‡¸|w·Šb­„N›dQqJbi6\‹FU„SDƒ]k[?{˜Gb qBBFF4[T(u:^¤Og‰^etMjgHbf@\T;ZO0‚k9‰¯]–Un«Pq£sw©[n˜ZbˆTauB`c=Oe:E_5LM#Q[/:vI-R2.C)A;"h>!g‡;†™_©[ŽyMpuG\tV5wQ?;%/21;=jF"n€5I™YBhGBf8>R.TP!‹e0Y|^HiFGuCOm-wj!hj1v…Dk›KBŠGoK4Ee>4T@GF)MZ&I[-OQ/]t=;iC8M3VW({6«œ[œµuЬs|žgy–Z‰ŽMŽ£fˆ¸s‚¿uо…‚¿†ÁˆuГ‡Î‰nÄ““©{™¸{𷉆Ÿm~˜_Œ…NtmFRd3c_8htDd{Do‰JrŽSXRa€9W~0p~6h«UL†KKg7Yo:kt?ezRcuQvŒTzƒO{¥Vl“E„‡M¢™dq§pž{äÿ¿ÓÿܸÿˉÙnÑ|n‹Ptˆ9d9bq=l|MpŽXr…KŒ{FxtFŽr9—yLa†G†SœÊ†õ«tÔ±oŸ™`ˆŽS…˜k‚YhcAZ[1^Y&ZY&C^4O_3h_*r^=`^4]a8pi@i¬P–ŽYrlŽkJX{HB]1AU)CO&GE"Va.SY)TY7Xd>W^6LU.=P"M_'Tv@Wm>XbAdlKi}POw?<g4VO9keHz]B~YBzbMaZEuS;QZ7nO6¾w_§žlr^D_X8ƒtNU‡MTY0]\=WU>XTEpUo“a]Q<dC:q_Pcs@‡t4—aDœ{Z™€g†yXxZxrP_m9V^/]\.ok?¨c‘¶qo“Ox–Y…›YY„¡W§»z“·i‰Hi†Qj‚W|vNtb\‘cZrC‚m@s‹NmpE‚†S‡‘f„•U„IxN…¦q—¿v™Ä‰ÏšŠ¾Šˆ­z…°€ž®l†¤b~’j¦\›‰W¢}K©wJ©ŠVŸo¬Ë†ÈÜœÈö“²Ùxˆ_n€SxxNˆqI‡€Y‚Vv@^^3YX?qtV°Ä±ÿ«³ÿž«ö‘Ñ‹Ít˜·k›¢g“¡q¡´og©Xe‹O„Lk”=a?Jn:IX5K\3k}R›½r©çƒÆì|ÆÖi´¸`„±QdšF]—Sužcgœ\_‚Pm}ThuJo}Iu{Ed~F\{Or‘h‰¯o”±mo“`t€[fŠplŒbz€Slg1YR(^W8osX|ž}Š¿}®‚b›bcvInt@JeBEfHQ]N^vgu¨–ïÀªæœŽ¸gs’NmŽSa‘Vw–j­À‡¸Û§Î¨h’Lbƒ>T|;Js2Zp;_ˆP`”K`>Zt2X|Hs[rŒU]9Oe3P^;ZjIs’^¯VgŽIUzIn\yŒdtŒeqpt—ƒv›qYzLXzKd‘du­k†»c}¦MwLpŠMzOiŒTh_n]g}KhvMdpEpoD™sNª†SŠŒTrP`€PP}HV}MZ|A`Df}W…–_~–\{]˜ŠHoy:Lj3Ql:]y:Uv@RzHa{Xu•jŠ r„¡srnXƒZStJ:`A6M85S?7VB:V0&B*&A#*;#D81++K4-G%9A-J6 Z?'PR/D_4;L7&=.E/(/U*)J3*;"+?/;!9B$JM%JY5E`<:[<6Z8GB7L3'8P)HI-WY(_l1Os;@b85K'8Ik:JD,>X>JD2mG#J_27iG9Z2HU!8S*3I6AK+V])Sb-Bc3B`@E`5QV.]\0N]/hn<f8SvMYgFT\1[e<U]@adGSˆLK{NBdDXK5b\%X_3QS0PR0ah7k_4n_5‚P2`ƒJgYUb[7UcDT\N|E3qžDofY’Ny‚J’«k¼Šx¥zs­u\«‚EV[`<tb1r¢MN¬dn„e|œVN«sDc@5m>XN+yq0l¦KWžbFƒdAlM2Z<)J4L5)}m2a­Xij…‚?e¤IZyeTu6Vs<Of<Pe4Fc72^.AL%S]0Gh@LL4JN;Z%LR%t^(r™Ho›XY]]k7\L5cB%BgD:oU2]M0R<PR1_h1K_/Sa8Np97wIZY=qm5Lz^U_CMd$TxFX}0Yo3hi7b†Ck•Gˆ„A‹xRy~[amQXl@da2diI]„HCkJ@\AYd:|v<~…NfuKfeA\v>e„H`z<vv@”U{­iƒT—«k¢©vªÂäÂŽä¿s¾´r–¡vy‰YlZr‰H|¥u`œ``l0kv:d}E{~J‚ŽV…‡VbmIWt>]y'{‚2r³]]Phl-S…I_h>eq>o‚Lf€OrCgƒDŠD•·p{c§pâÙœêÿÕäÿß¿ÿÁ”¼€…—\_ƒE`x6b}2U„Ay€TŒ—ahškixMgj<`r:zr4`†UÿwHÄÁ‹Œ¨zmUszMwpGnyPKeET^@VhB@n;Hb4Wm<P~JW€BTy;Wj:di?fbBwsM§Tƒžd_nNRf7M_6CS<3C0DM)K_.BS(iK&VF-OC(CF"=P"IX'dc6UsPZi=XC/VD-RR:K`EUJ3lYGUYD]K=gMD`H?dM?ZO:bW3Ñ‚Z¦¤wzlSdqS|‚[m›kdlKi]CiRCsdMywRmtJm\FŠnZ°nQuf=dv.l>˜–Q“§ot€_riLa]=CN(E>!`C$w\0–z7•…Fl Wk|IsœWh–Pt‡U©¬w‹®_Z„Bhr>z{KyŠZa¡Z^f/F]-D^2VV1W`>}i:r=^|4Ur8Yq@gr@rn>wH§¢r›Ï‘‡Æ‹„µts•Uf…K{ŒY°s‘œa~ŽWpMž“h¯¿{¿ÑŠÈΜÍ÷ Ú}¡ f‹ƒRlrAB>%D/S9#EE&04O<:Œ«v°Üšçÿ±Þÿ¥Âü…»a—¥^€„Jte?psWzX€‰]v“Y{“UsŽQ~‹OlzAgh5^c*q„C’±R©Ìb£Ñc‰ÁYwIv¡Gf¢MxŸXŠ«_’ WŽKˆƒN‹|J~ŠQzSy‡Zza|l‘ i}¥ZˆŸZdStŽw{£xeŽVLq><f7TzIrŸs…´‹—Ä’˜Â•t¤gZqJ`_>evR}ži¸}•¬€žÉ“²Ô‡¦¶fy‡:Sb5arIm‹RhŽ\ˆ{¤ÄŒ©Äs{”JWZ0X\)Rk1Li,Ji*\h4^o5^t;Qr=XzH_…\g~Qd|ELk86b7HjDp’YyVZrALi;VlHblRhfiˆpy“t}šrh‘c`—e‚­e„«RyŽAms4Tf.IQ+U^1ZwLt¥xµuŽŒ]vxO\yK\vF_tJjzK{|K…xGp|R‚™_z“Kes>Yl8YjGxzY… a€¦Pey6Oa/Jl3Jp6Jd.RP1^Y9UbKZoUi}`sˆlvŒqp’|s£wr—kU\Rt]UwWXrH+>%,:%3?"D7%0:) 7@0E'>@"9221O5&QF3WU68Z=_L:1d:2Q<3>%1G#1K(FD)Q_8IqK?eMHT>2b4!K-E(&DA!@H*IM)Mc*;T+/J%<GIHOF+OJ7B[:8\4GY+KW)F`4=dACa6Ro3:Y6?M0>V-FX-Ta&Bd<Oa<DZ6E\1Kg6^u:Rx3MmEF_9RV-Q]2Xm@hlBd‚J]–R>…QKm=LX25P4=M(P>#DN%BY3QG*ŒD(ha2W_]^H7wQ3<n>RDDS,qžLuŸkˆœTŒ³jmŸ~|j… hi«P›tB†ZfZ6~y2zBo¹]†¥mAÀuTQK9w3UV3q{7{”Xa_O…bEzRDnG?jDVfAr~@£_WÀicuUzm*JœNRsVLl/Fn9YV8Nj4An2Ea)Kb22n=+M95;<<C?!\Z'o~;m”JQ’LMmF=U4h=*E&}_4ZiLJbANs?>g;<[4DP3]Q&o`4fsF||RPYA`JNZaq"c‘CXlHsG-fe/tŠ>}i2=&oF(ZG'S_(mT)kv9fGj{JVqN\sAow9hƒ=]cAPW2^l1[€Ars@™i+‚–Ks·cmŠX‡ŒOš«d…˜pj|XyoBŒj<}~D—†Dl‹J}G–½mV­|lr;w„C|‘_ˆ—glhd{VfvH^†HR†;wv7o°OR—UUvD}sAZ•O^uIenAlv;e?_u;³ŒJâ§vã›ÈÖ¢ïÿÆùÿÜçÿÔ©ÿÏoªzp€DZ€BKp2V`!mw9sU €S€~UfgBec9Zp6l{:{q:‹‹aš—aznO†pCŠ„]lantMiY:wrIi‚P[‹bhtUs_nXn›[lž[}©kd‡[waGm{‘_}©S_sIHe@Qg@OjGKoHRk>X[84c*@? HU$HJ%LF*?@(GJ$FL)e@)hA0QeI[P<V[7eY@SvIhWEndSoeRqeVkfLgbPcWFd`@§qH¥pB”W=‹^H¤’l–žv•ˆbŽƒifnMwwPw•_j…N™|OÌœ`ŸUuF_’Ko‰7š¥X°Í†…»v[iCOP4Hd4<S3A9"SE$[h4`qLz™lp£]nŽNbŠTš_¤¨g‚vBXX/S\,a`;Yh?nuG>p:BS,K^7Bb5HX'IQ&O_+Lj*D[7J]@LgCBpG?rC`wP—•m£¾}‘«_u€C_o;wzV·²x¡µt‘©vºzŸÂ‚­°r­•gÀ¶˜äù¿±æ ±È}Š¥addBKR34>*7D(DS48Y1/<%}KA¬•[Ç«gÏÄqª½_j…AmlM]–WJtAŒvVŒ‰]tKbIryE~ˆcˆ‘]ˆ`\uKKP*DD#hP0Œ‡Rž»gËjt³WižEp’KjŒJs…QŒZu‰Tv…Uƒšl‰§hЦn‡t„¤zƒµŠÄ“’Æ‚‹²l„Xg‡QzŽcq‡YeˆDW†?]‚Mœvº’“¸’™¬†–¨v`RfeFjgCsxK—^ޏp‘ÁqЍ_tKS}<Eh<MdIg„QbŒPqV‰ n‹©jvUCf39P!D^#@\%K^(J_)D^$KS(M^8XtNl•di¡pm¯nÇ‚wÎ{b´[j¥WtžTOKEf3GV2M[AXwWl‰nt”`yŽas›[€£T‚“Ijy1NT";J'JQ+AG"6<"G^Dq—tœÁ~Žªa†ƒPwPbzJi|Ux‚[w{Odp@_cFŒ€Fƒ€6Sg-K[(EV0RbArvJqy9Xf0<U;F^?Pg9Db88R7:M4AN6KUGXtZb…^sŽd}hˆk‘bƒ~XgkLg^JfaA&3!./1<%A?"#3?3,61=2A:9EG(FI1OK=zL>Qj?XmE2aH4S:=B(:Z%>T3g^5UQDkaE]KZ>5RH2I[5NL)LT.?G+>L'1S"/D 6EFK^@$TV6^bAFqD@^<MS6KQ*^Q/Nm5Sl>Ks>=i8FF*;K"PS*]\)ZvDUdADb@Wa5Rw5SrBSm6L`;?d3Ha7Ub6`p<gmE‚~C`™SM…jRhANm;Bf@8Y79T3JT*Of-HW2]K/iR1DU4DZ5Va9?`9G[.]^0yl:w LƒŸep—WV‰bruQ‡‘Os nb¡~Q˜lIƒQQR2ja4|v3¬jJ¸nJƒbYpD^‹IeyGy‡T]¤d\†ZQ{QOuNRvRi„Rtœ\‚ŠfW¶Y?}kiZ*\q!EHKW3F\'=U-AT,MV+Fc1F`/?j:,[>1J11S2;T6drAVUiuJ`†FTeDOT.GB,^?(oK&Ib8QO&Qi3EV+IV%3V0HB*‚S+gqDx~TV„WAhN\i7j†3m};?rK9?7U=_n*=w5Q6&>D$:?"FX#o].i…KcqKflER‚GNqHepDV†CJg;Hf=^n=W‡GT}Dc~Hzs>s˜C_Zgl<vu6jzDc‚QY}P`l7`x@duH[t?|m=¨ KgÔ•`‰d““Q¨¨p©Î}{®i`”P\z?_c0_†3aˆFiˆJ[s8Rq@ZR2fZ0c…BV‚G\s9`z?q‚H›‘P©¤WÆÚ–ÚÿÊêÿÉßÿÅ×ÿ³¿ÿÃrÉ•‰‘hs”dDŽ][i*g}JdpSƒqMsOgAdl8cf9_xLz˜^–¹€s“^mzB™yY¢Œ[‘¥wŠ›€‚hksU‰\@ÅX„¢dsD—jI•lŒ kŸ¥{zfoiC©©ok£n~‹RjžZUn=Xb?Xh=ZwAPwHEj:Eg66Z*?O%9G#H>"@R*<K%;R/BI-G<'s?(pnW`uTcb6nyJixNv\CxTIwZMoZGpZI{ZH¨_I‰lL‚{N`Q9H8²xUŠ©n”`<²fIwY’]·t~ªj—Z°¢\‘µ`е`µd\°bŠ”@¢¥b€¡lOl<\F/ga;L_8EK6FO3]iA~‹\‘¢ji¤bVn4zzI…­j¤ctuMe[>\qGf|M]†TRyDHd6G`7HX0RY)Jk35[(?V/Dg,:Z1F^<NkG\uK[k=vf7’†]™›k}¼s_‰WQzJe{U•«|ž±z³¶ÂÁw¬¢o™Ždœƒ^ܹ’ßð³©Í†¦¾|åµzŠ`jxQQiKXpRe}Xu—_j‡T[pErƒJWx;i_?v•d`§aN…DuzKn’W}‘W¨–a”›]~[qxH–sU˜vKˆ}@wY3X;!:62;BE$oc8˜Ÿb•Êyx¿ijN\ŽNe[j jz¯s„¯v‡©g‚ŒT{€T{VƒŸhŒ£qœÆ¥Õ’Ê|ªfX|MWtSc„LVƒH`†CTIb…\Ÿ…‡²|‚¯x~¤ih—P]†Fi{9`~ChˆSt–eƒœapK[rAPc>abKk{fn˜noª_`NnˆQ|•TrŠZV|D<^.BV)@K 8J'@]):V&6N"CU,Qh?i…`Ž®‡·å­ÒÿµÁöŽÏiy«Tg X]‘WL{>6Y&.9:;)WN;ssKqEoƒB{}Age3HM&2G"1D EL"HM%-C"6X7_„a­rˆ`qˆ\oyRmqDggQeˆ‡Zp|FYa5Ug4eg+Gc$>\*>b/Fc9J_6NX0;K4FR<Vd@Pb@NZKY]F^Z<KR0GN7HR;OZPdvdpˆak~R]bF[TECR>6E0:A-6/66.7!+7!$A;$#6,1377A ^H&VV/G\?VRHVQ=|S?NjE9kL7W@KK1E_2joAfJ?j]I?E7V2)B7F4/KS+Ka3<K.8F-:V(/].0C%IBJL"SL.eW>jW9>`?4Q<8F+7F#O?%ST(F@.DH65Y(6K*2D ABuR%Zr8J`DH^;Tb:RuEOl@Hg1Y\6Up3ax;Zv?Z~@s‡>~‘Wl™b>ŠcME@Ui.Mr>9h;;K4GL)Fd+C\<KS5JtGRu[ksJJ‹SCy`[yGR{:_t<f|Ak—Q^ŒPSv<in<€ŽP}žhošnZiO€UOz@Lp9wb6xN~¤tf´fe¤obŽZ[€Mm\u›cg”]X”`\‚SiIl‘T]\cƒT€vK9ÃkEhMZj7@{*AbE=c-:Q(5G(:D$@P$LK/Bq58N2?7EL(elFr¡^S˜s`ZN„R@rCG[?JO:FS1RR2FO3RN.8j48C'AX 4A#TE-{U4m|Q`yW\|``tKhŽOb…SXeKV[><c??A-V[(:}8F>$F>#==#OW$€e7]ŒUW}MaŠITnB[[5dhAK…<UL-]mE]HY„DjB^w:Zt9pf)[ˆDXZ6WY<zi'‰qFZ^>[c/om.kp=dnDZl>¬ƒA£ÚƒÌž§d­“W€ˆK]g=]j;I].QW+nv7xšDM¤_Yv=a„HJ’d[€Kl‹E`LiLrŸ^u–Pz”Q“}CˈHãèŠäÿËÑÿ¯Ðù ½ø®¸†‘œ`“”]X~;gv-nˆ:\yTmp@ul:gm5in7n†Pyžaž“c’‘]~{Q†w]»“v¦Æ”ºÂ‘û {¼¬Šš¨‹n]•m9_r?OhCq[@•pL’g”{Rh§m•Y­ui–\rf:l [\~U_T>LL6NB/D<+C2'M6&Ob2Fi:>R*/7 ;3:Q)[Z9_TAFVEE8+­MHoÑ«P‚WfrEœ€NnftaOwc[zdOzcP‡R<rC0a5&9.o\GnQA~dBˆ€Q^xYqM@’eG{Sœ¼n¡ºl—†Z¦¤e•Ê}¾r…³b’»meµ_•Gƒµv[†QXd3mk=T^>XM;[aL`_KŽj‰¥^l~@Mo5ai;~Q’F‡J|jBjl5cl9hwBQo@Lk;Gj?4I)=4)^xSAŠI;W4J‚MPŠEa”G_zAZc5VR.AP:maLwj´wl˜]Zd;atL“©l‹¸l—¥i®œj®žqƒŒ]¡oO³¢pÓË…ž¼y­¶³Ôñ¸w¯¯p¤‚`°o§®k©[ÄŒR‘o>uzGd‘K_„QŠ |“¼ƒg¢ZKt5^f;bo?n‚Pr]“[‹PŽvCx]5_J+LA+79&74"8B(>R*:X&Qd;N£i_m—Ol‹R­tƒ¾‚³z²pqŸaf„NclHlqZynš±}§ÎŽ›Çƒƒ´oy°re¡i_ak‰b`‹Zh’Xm¢ku§k‚±c…ªYyŸOp†Dd}?\{IXyB]€WmŠWq›ed”cQ`OaS€aiŒsq „­wv§\bŠJpšTm¡]dMOy4F^&>I!<F'=K,?S-9O(Ba0Mi>Z|Vzž€­Ø¤ÖÿªÅÌi€¯\t£UfŒM\†HF|<3c;2];:];UkA`k8_d/bW/\_6LY38Z/3N'5P'BV)AS(<X8U‚byŸe{VtwYlyStiI~iM|mVžW†|B^e2Fd,Ed.Ff+?e0Bk3Ch4A_5<P02M9DR7Mi5Ti>]jEqiRjhMY[4VU7HU7AT8ISH_dUg|`c‹bQ…cVTX€@A_2/*#.&219&A%"< !2.54JBH.YB,`K2^L4JM6]C:^S3RQ@>T=>X5TU,Xh1_sD@aD2F9R7&@\.9=7D@4JI+Qe:Jh7SR.Kc1/^0DF(JFMM"PO6bO:<Y=2@47E"0Q*7J5F9'3D'2.->-!;E"-X&2>@AgS!LlAN[:ZV.^_<Kl=Ja9df.bj5en1\i5_k7[m6uq;‘IiˆV>zRKF:Kb-Kl6Bd4:h2AT-NY2Gg@kUAhnQdŒp€jdl‹S_˜cX‘b]sKTz<_€Ma‹NK_O~Bhp1x{EmŽQk_RˆVCgGQ`0Ko5gb2z‹8|²ko¤dzƒ[p®YU¡ihqUkŒWlƒWj”Rd¥Xg‘TRuIRa=OiA~\Ga¬II™qQjSWj-Cˆ;@aD<\-/C'6>!<N$BE-Fe.0W@5\"HD'|U,gTi€]Y…VWkM\DZk:E|WKJ;NR-Ma4T`8/e6;<'B["KE"nG%“T<Œ›Wo˜sp‹hƒŒT‘qKjpEOqEA`PH^6<rHPV@Bx:;P0:D(?0!^V$v„9f‰Ka‚H[{IP[>R<%bB#[‚:\v7{Qf¦faƒO^ALZ>ER'ZV"Iz7fK0BQ4h`1Ug.Q[:Uf5`n:fu=Lx>f~B›¥U»Ék€ë qƒls‰S]•XLo;Nb3E^*ZS*ou;|–Ll®WXŸ^{vCpq7bwA\q@fvG¥U–ÚuÆt_™PPxEph=ä±aÏÿž¯¾y™P¢¹dq”Z‚x?yYOƒIZm)gt*iˆ2f|:dƒEWo?ie;€š]v]fvAjV-ŠI2¶I6ðzW½¿–Ñ‘xÈ~c»XAÎR6WbCTU/xO.‘gBrzQƒ‰^y¢iykOŽfÒ|°nSjEUY2€tIpº}`^CU>)JB+BC,DD5F@/Q>*^D"<I02?#/>EQ'aZ:}]@„gRNnY˜VAÕШd¸‘^ƒR}‡R•…bunZŽjPƒfN~ZEnT@`C4WL7eM>‘SAqeQkvJvSsaOitUzuD~N’›Vƒ~HˆV3»…P§Ær™ÍzÀu…ʃ†¾a±qœ•Av”\\sD_e9ilDq‚O¨Ÿ`—¹ƒŠµ‡pžmHf1Ud-Vh9qs?t‚Oo~Ebw?Oq@Gb6Re5Yp6TwBUwJCqKOq…¼lÉŒ<n;hjBj—Tax:FW&EJ4hoJrr¬ƒšn¤»xnÆvCoCS_8~kE}Œ]ƒ|QŽŒRžŽa–”_wXš¥p­¼p©ªsªžpË»ðá•ÿã¶®d«wG¹‰Nƒ‘D‡s6eb7cxDp„IlzPƒ‰^Žš^m‘NKt?Kp@ZpEY{Js„Vn‘Un_t„Olb5OK.ME0HB*A?'BK-FZ1FjAS‚Mf‰Qš`‘¨st©bZU€’y—Ëž‡Ë‘…ÂŽƒÐ–Ë’kºtNT[`H~[˜­q¹}~®s‚³pŒ¯vw«je“Zm‰_p•h|²f|¶axšKg{<\s6S|JTƒXN†T\sJkuLbzCds=rzL~‚kŠ—tŠ­y€µƒ¾‡ƒ³}¹if¡L^€?{‘JnBVy5Cg.7Z#1>&AH+E]8Cc0Gk9\|Rg—`nªv¢Ä™Ê曻܄ ¼hŒ®^oœPZ‰P\‹`a˜b[žl[¡e_“TiKrl?PS+NU+U_6ppCgkBJd7Gi:Gg;D[2Ld6W|I”Y~˜Zg„V`uV]fNppX€z[p‚WyŽIZ8Mm<HsEE|FKo>Rw6Ki8A\<>\AM[=Lb9Ie9Nj3P^9ZXWyqlWzgBo^UdUefHUnO^qUcbvŽdrŸ]hW|wLki:%%*;(8 /5'?##:#27"MC'a.1C6:=(7?'>@&OB(‚F*8S4@>4>F'DQ&[T,Nl22gA/::2,"c2!E_3DO;DG6IB2]M?Nd=OT:9W.2Q+BFBOeIYS*O`?0U;:L2IT)Lf:8kH>D3AB&7;0.2,:0 /C/J 8:sHGo>DZFRN(UP,Eb0G\/M^(>S(PO&Ri2Kf1Pd-^]-Rg2Pj;EpAGO?BM+=[,>O3BP+Bp6Nf3=a5eD0s`0UuQXegna=l„SQƒgUmHfq4j†?^‘SW…RVKVB\wA]q>\v9HxCBg9F^3FU+_a.„Œ9x jg™af`vvPm˜T_¢b_„WX‰WpƒIa¦TH„U@fNIZ3Dh:WZHŠk.UÂeA‚j`hJP~&BxL9_:.I(5B&6W*NN/Ap<7cPFX5Ot2jr8Z•K`ŠYSˆTZzIR…Pm–UU¬kA“€Fv[YxQVœXF‚]@eKBa:Vk4_^>¼G<¶Œ>|¦zwmWsPOI5QE"\> EP(\T-^qEL†_^{[E}5EZACH6hd0jE_ŒIVwKVc<Me:AH3cS<jYŠŽJ´žWw‘^muJl~DMqMEZ2R[#V}6Qh@s]/T…OXi3U`1Yk8au:lPy h‚¬r—›_­QžËon®‡}j:l”WUƒJOz:Ns6Ga;z_;|¤JvQgƒQMrHNa.\k2nƒG{P¥£V«Ðu¿wžS~¥r¾‡Óð¯ÿžs­ndƒLhsAN`6bO*oe2Y˜^O|7^z+hƒ/ns6w‘XX‹Ww‰W}±x`—ZGl<KR-JW7gI7¬gF›³€¨›rt]NY<db<SlBb_IqaKŒjIoO¢ƒ]„bg_Hž|]¦Ä‰k«mWq@_Y4x\=¥vL–n:5&;2$@2*E=,BC0AE/:F+A@*8:.7B&;O%DM-D`;^L-uW1ol@ÒŸlr­ix™T‚«t¸Ð‰šÜ{´‰†˜s‡€fllSiVLoZG‡XH—LDeJ{‹XˆŸkoVt€EyQƒ¥Xƒq?IC/G7*©a?µªY®¹t¤ÕŒ¹à¡¥ñ¥‹Ø¤Y±pv†>nŒKax?ruT»z˜Ö¼Ñ}‘¢j~yKRh8M]-Ta6ig6ppD^tNXvFT{JMp?Nn=Jj9YkAg~Ph•n²™«âÑÕ©@‹P>L$_e=Lb6>`5C^4poA‹ˆb¼¹™€³‚†“d¤»vY¢VGqDJ_8‹d=Lq~Ct}L‘{Oˆc ¤tŸ±m–š[ªcز˜ãç¬ÿςήaz‹Jnu>n€FY}DVb?i‚Plœ\j™b]|RstUnŒZ\‹Ze…Y`‘W]‹]i•hk“bvan”P`}FhfE„dR`hEI[9GN8OcQ]‘[}œa b‚¢g’³qƒ©ed“Oe‡]™¦•¾‰”Á‘©Þ´šè·šàª„ÐŒS°eM„SsˆX i‚µt®ln•]z‹jq™tp²{Œ·—É‚·tlŸ_P~JO{PXŒ]i›i›hXŠQ^nF]o4Hj-ES.X[3ZZ/dU6|gHy€V…‹X›Zv¤RP9W}8_„;St0E].Fb&3V-0T0@T;[i;Uw?aZy°q²wŒ³¿Ú‘±Ïu‹£O~’HoyAXq?bvNg†Rj‹`o”_mŠRdm>b_4\S)KL-JZ3Yc8jd<qbC]zGS~FKf5H].Li5]Dn„Qwƒ\p\e}jœr‡¬p€°m|ª_f•JOqDZz]mœ_^˜L[{7EY/?I:`_J^gAYnDZs@Gf,<C,'H&<œGf¹z}†hik`dn[jvWy€^—Y…{IzzPbNWoB4A/;'$.-5,:"@#,1"K>$+U++K:2;*-:<:D9EB)4S7;;46?)EJ'ZQ-Ik2.k>?G;AG4\=*G_39cHLC@NH/QF8_P=<T8>C*3R#6=$4B!]L"KQ%BW3H]0Mh>aa;TU65O>@=)@@1A',0&*,5*+<2=^DOv9HhKES7BQ.JS3Fa4<W-8R*<P*?U.=V07P-Ia0Yk;Sp<?T>;=2AE#Hf3L|GKmFJoEJl?@q;Q]6MV4J\EMaHm_HtJCv\LaLS[.Zp/Xt8XwDZ~HUNUCH}OInEQl4Ff78[43T4eD)h:\ŒgmfAVŽDWrZpuTq—]džV`š[o¨Wh eN›eAySMlEGnFIqQzrGh›PQ–mQ…ahuAKŠ6BhB4_/;a3KnAYvBVPP‚[^ƒLZ™VeŠPs˜Sp²hn¯vpªu|­u•»t˜Æ~ŠÕ‡À‹³}¶x|²u^°zS—b„;T¦^yi¦—a|µgYžn>kR6?04O+/=#/8E-e6"td5h¡kl‹O_jKU]JloCf‰@eyLZtWed>`qFo‚X˜’eu¢u˜‹C‚~@Ub:g^.…x:\zEEcCKZ%\l8SƒM„mIhn@LiHSZ+[hAnOŠž[œªeš²hˆ²‰‚°iª‰[^ÃijXvjA^CiˆNh‚NfhBej7m‚D`t:g]<I_A?T1]]&sp>izKŸ•Lª^w˜P•£Q¿É~ØÿÁÐÿ¯šÜ€hŠZgV0bEVk:McDgQ:q—X[—^U|1X|+}w7‚—n‡¯|vª}i[C\U1OY,RW-jV:paM˜|Wɨ}¦‘sa`Ffd@~[Œ‹eª…^€y[‡aIƒWH£jQv`YH8…uT–jyžbZ•YNL2VC2¨_K[ÍŸBNE<B2P<2TD2A9*:.!G9$8D'=3#;?-58'B:*rK/ThNFW9i]3œ¡tp¤pxŒXŽ‘d¡¸‚¸Åв»„·¾€ÞÜ—±ÈŽ¡vƒ“oƒ–wu“w{x]“‘YœœgzmRfvJ‹’Iœ®\`¦_L_NN_Fnf>¯‘I³½e¶ØŒÏáÉ䥸ô¹Œñ³d¿„}–Jw—Qˆ˜Nɶk´é–žÌo‹Sg]<VW/K^0Va1Mf1W_-dg?^ƒRn€SW‚PWtFTzE\Oo\~Ÿiœ·‘ºË¥´Ë¦Vªj4X-LU/QW6egH\“YVuR¤…à×̰ÿÑvµޝlj›V\iAleBluCxp?p}Ot‰S‡†až_¬ŸpŒ§b‹Œ]™Šeå­øÁ˜¿´r¦’P“RvŒN‹Q|˜Yp‰Tx”T{ R—ƒI‚cAdSE€eu­jj£j{šhpšhu•lx˜hx—fiŒYbƒVssI’lLŸyR‘…R|}[z›wНr|—Z†xLŒƒF‰‰Iv‡FgShŒUiyGyu>‹W˰‰âÚ¥¸á¥±â¤›æ~†Ômuºcs¨q}¶‚yµvi•fe™„ŽÁ–Ë}’¶|œ®wš²‡Ã€v²kj¢ip–jv›irXi~I\x>UpCMk9CX-AM%=D!38<<(HQ8PqDY‡OWETu6Hj/Ux9Q„4>s/>e=PdM‹W;aCVdBTuGeŠ\ˆªt’©l„£n·¢¹euŠ?_v8G`+FR)D[(KW.PV2Wh>_wC^o@Xc5H[-BI,WU4L]/LW-Y]/mc?jo>Qb2DY+Ff6Vy@\Ms…e‚‘q}¤‰·€’ÁsŒ¯rˆ¨l€¦`WSUyOxV|J`u6BR)2@2DO@acETnMfv[j}M5U.6&$*@;/cJD…Q\WPb\L^dLdf=le=W`>_l@]pH07%+! !*%34"8*5D45E'%K27)6.E3]:"L<.0D//6(,2%@; QP"Rg0Ae9=^?9K<e<*ej4O{HTCJV=6S>6HM5CL3L=)9N)8@'9@!;F&?F dD$NW)>T@AD60I),F/7C!.G"-;$.A*,;+#6+..$6I%rS&L{:LeRFoFKb=I`;HX4KN&BJ*D[3Hg;Bd<Tm8N‚D@rSC[=3S8;2'PB[k2a‚TY‚eLm[PcLL|FG{BLi5Pc7NjF~lNouGFnU9TLHM0NZ!No2N{=YwA[|NaRS|GKtGHoAJ^-;](6f-]T/e€:GiTqHe{7Y”L_rZbrSlŠOy¥Q„¦Uu£pd•hSœ^IuSNW;Wh=lŠNbVZŒaPT\oBTy/?>UtCd”QXžh\ai›Wi§gk ie‘VuZŽ [‹¥c‰’QyI~iA€q<Ž…C‹‹SqwTqgDxwBqoAefCRtCpz;p|8r€Jw‚A}ŽKe–^V‹YIH=sH=V1.W329-F2}D%l„8tŠMv‹PZz`_wDVn7g^9W[5t[4‡u@„¡^¨ªjv¸xi•`Rp3FM1T[0ms;]DKbDU~;i”Mh–QdŽZŠyFQCTnLqjCz¬`nsNij8ÈL4¸Ÿ^”Ṛ±t•³sr±ŠoUiw@Šr2gtDXwBwŽNaTWq?^W3Hc8KW1JZ;vk+u«\‚ _a…<{k2’²UÍá€çÿ´±ò˜Š±`Ve@_S7k„NsZŒ­ie‘kƒˆS\£oYAl‰7ƒ‚D¢l¶yneAK2RC&ZP3mY=€e†pp´o}[lrQŽ]¦‚œ©£€W‘gSš€gŽ„i}iL‰XcqZ…šlc~a‚…_wŸyK„UYF<ƒTD©¾‡b›y^QB[UDgO:XQ9AK4UI2Me6Ga1T[=?Z9:B/MJ0|]1Z^.__7 ™am–`m‰Oƒ^¨´€£Ê–ŒÁ}‡£nª¡_è©n²¼†©»~¹Ë °Ý©„Â}†£d› p|‚Q|Yx•Ty~Pž–aÈr‰µkv¯]€£M§Ão´ß…¦¢^³~LÄ¡jÈÓŸ™Ü¥kž^t>€‚X•«Z³¾r“Ñzp•RcvZNuGOj;Wy@[}9Rz4V‹Ip^k¢hi—iZ“Z\wCpƒQr€JnvW“w¨°…¼¬}u­z4k6Lk>RzLpuHƒ¤l_¤j¶—wÿͪÿﳪՎ—­kq‹QTuEd€Tr„X`MirL„x[—Šc£–e™£k‡¨oƒ“X§ˆ^â Ñ¤|Ÿ’cˆ™[˜’\—“TzˆO|’a~‰V„Sr‰OqzI^lAJP9~pUެw¼w€¼„Â’€Ä”Š·~z½„x§pp›dx˜c}†Q‰U’dµ­¾¾”£À†~›_npCW`5Uc>ZwN]zSiŽY]ŽNAi5@f5u†Z¬º¸Ú޽䔫Üq—ÇYŽ¿f…½zˆÀ„ˆÀ“~Ìœ“ئ¦Ò”¯bt~Gn{R–”v¸½”—¾}} ow owšcrŠL\v8Yg4Yg9Vi9Re0BV-7H(.?&.C(?S2\`?x‡PqHRv2<\$C\,Zs7Rz6Jx?^ˆ[bp|GXsP]\cžiаr²q|©c„ aŠŒK^b1OM)=L 6@"9E<M&3G(8L5Bb:Ga3Xc8Rl:@`;Ne5Jc2<X,=T)?X/JM.VM2OW5Ke4VuCeKn~a…œxŸ¿‰Í„’´g€šRv’Z…©m»ioKe{D`p?I\5=O9;VAB^FPlAVsB]uUn}ds‡YEr@(Q)";$0;%6F,;P1DK7LC9]N@JX3M]9N\:J_;XW<$(&'#4)+1 46';:$J(7(1.?9>9"64$22#*8$*1%9>=BQR#RY.CY=<P8^K3r\:R†L=_OLA9NO3@J6HJ0@B&2I(/;&/D!2>%9C%LB _O*>V6GY9AX6/Y;I]7Fk7;\5=L6>P7=a;D^=Yj<bpA[wK[qR@kLLYA@`<6^:>Q/NN(RZ8L{MVrN\wLKtNEq[KmV1iM5HMO8&bh.hŠ^j‰s_t\|n_zRRŠQOˆOYyC`n;gdElT6GlH8`X;YDLS&Pm0Yy>_‚H]‘V^‰nQuMNx?CyF:a9?L&Db*Xj.f€8L–eQxYiƒH\‰>MxKguL`”UqSy£YgžY~R`œ`?ŒdDbGZ]0ey@hŽUQ˜cFxSVv@^‡Ih•F{«^u±rp©lzœnwŸ_q“d^…Xh|Mn‡UhŒPIgM?U*<@$7BH:Te,bo8`zQVoASvB\nAV€HRXWyDKn9Kb-DL+^K4Yz[Xj\et4Z†EWˆFU‚JA\E@THSL-fh.}v?Š‚Cy„PY’[Du@M_;PX=twD™RŸ•Z¤„O¥~M^oLft3E[6G[/…e.q@gˆHnNh“\rŽQ^€ShiR‘k@m—TT]²a:iTJA,Za4ñ='±w9ƒ½‡¡šy™È‚n±pYzJh}GSn@lh;‰yDi‘[Z‰DVv?Qn8Zn;MnFsŠI®{2q«^Mq:lL$™j-ѵY¿ó“n‰[\^1\b*n;ˆU‡Ÿb̪jÆ…‚žb_Ÿ`_wFh†F€“U””W€‘\XpG9N5dB-pd>ƒmHÌzO¡’oŒ—q€fŠ”n¢u³¤|Õ´§ˆm’€dŒ~i¶iQ˜|ZroMÁoM‹nŽˆe„kT”yZ‘~[ƒ«~bv[~G?¹|^½†’\MvaMfO>Y4llBnwGetH\l6okCJgE::5>C2TT2G=&fK:‹‘dl®in‡Y…n¬ºƒ©Ð›–Î’ˆ½‹~¸o•¡^»»k°ÁkíXó‹O´ŠTžžd­ºœ­o­c‡©b‘Ã{¨Ýšœæ—’·m}¼m»|«Ý“¸ß‡j™^EB4dgJ–t[ª¦}kÀrwB…„K…“_”ºd›¯bywC†gVe”UZ=m?g¥KgŸJu¡R³r‘ÌÅv¶tR…L^O-RC/`XT­‘´•¨{‚©z9}ET^0mŠL‹¤e‹ä„„Ý‚{žeœ±|é¶Ž©Ç–††VdBSiCrmK‰xKƒ‚Ub}Mqg@ƒdEˆbG¡‹W›šiˆšdš‡iÔw©…`~rQxˆNuP~k9tEmNlOnxFm}HdtImdEVhEi[J”›gŸÀs”¶i¥À‡¤Å’‘˚‹¸¨|µ‚œ¾ˆ›Ÿx¸»†©Ã·¸yÀ¡r¦_puD\X4WaA^€Wbhh•fihPYU…\m©o•ҸݱÕ˜µ]z¨Lƒ©S€¨_Œ¦tŸÈš©â«¬Ý—¡§is‰IQnB^sIv…_”šsŽ«x~ŸoxžswTWf3MW*OU2MS*E@&IC-FQ5I]D<kD6c<AV/<U)=C>5=)4*36!D[0Eg2G`GaƒZbŒHXi;TnXtc…–`›\¢_š¡WgF\b.@C+;A 5;,/.62>%EK3N_@Ei?Bd0N\:irI]{IIn<He9Aa0?_0Bf0@c3>R):C$JJ,Vg5[?eˆMŠ‘b­®k¡¸a‹¢Ok8Sl8apM”‰Swx;X]2FT3GU<CbMTtOQpHLe8LV0GQ5IE4\C;aK=QQ9:M/5N(-K#/7+>K1AW8<R3HU8FZ<JdEWpSGhR'  )/#&**(#/,;%!0".-36,6"3+4=!.B*+?+.<#;3CJ":R5J:5fK,dZ=~UC[sHFvL[`ALl48K=4<,5A'+<%;/2A#6@)GF%RJ&EO.L=+VO+YV3X\8^gCTiKK`=IS/aj6izIerLSlHPM;PX1Sc<Vi?bvEQ‚MJtHYl?dr;i{I^|IV…Oa‘P]ˆ]N{mRtW;kN-ZRL>=lc.wXq‚y–†fŽtg’r\‡f_ŽdRXI‚RSn;R^4UfH?nW8e[JX4Tg1Uw@owDj¢ZU—pJ€WPs>Dx>-^<:9,GQ(Wl5j}AY‘OP…b[}QXˆOW€9b‚AS€\k[v˜Vb£gj•[v‡NP£mDz[O_A]m>j}Sd—Y\®in›ms¢k‚­lx˜ZopQhFYr[[c@NsFJb@mwGp˜]KŠY2K@8.7_,Ea<@e;Kh3iu7Qœ_X~XSƒLd‰Kb‚LQ{GSi=E4@]7JM-iO._xWEplHR>OG$][,ck8lx?KuEL_5g[3`‡GuiCxf5et<Nt?I^7gp=z…ObmAeO4xV9{f<SpA_r:Eb6IZ.jp1s~=‚BŠSx|M|‡Mqp@cl?‚ˆRxž\y‰Sw‰N]œ^CŽZRpB[uA•R3؈J²Ä”¨Ø¨n¹wzG†ˆIa‹\_~SwR4zr>bVWnJhn<n–TxŠVo·\s dZj1=S,MG$ah<Ñ¥Z‘çŠDtm9<1H@(l[6y|Pp†LŒŸ^{˜jp‘ay›eT™izŒa¯ro‹YgzBWcGMVA^RFtTF•`R•Žqš—t…wR”kF³x^ˆfÌ™€Ù»Ÿ§›‡ªx]¥«…Ÿ”n›•Xi„K”tL©¥vz™j†zVxkP‡W@™žor~f\D>žQD˜¦|€„iŽƒdjS`n;qiB{e=mwMVtU‡yK^†TOF2PP6?P,;B(bV=sOr£]m“VŒ˜nž·†­À®Ô¦­Þ¬Äsq?Œ›V|§dg‰N|_™gŸ¥fËÕ‹¼Æ{§™Fy6­ŠL½£_»ÂzŸÓ‹¬çšÃÿ¼Øÿ¿¦ÿ qÅzT¢hެˆŒÂš¤j”XV{N…yF޵]ˆ­e}¤UpE{cD†Ck?c“>{¬ZwÉnr³i©¼v³áž£Ù»rRwD.9-) ZB9ž–s¡®r’“e}‡RUvDOh7tžPj›W®´f£Ñtq¨\šj¨¤æ·™lŽ_Yp>esFryRnzGroKpoG_]Eof<ab5f<‰qC“†_˜’d¤i”’xs…fpTu›QYvH_c7€{Gj„PboBq}OdƒRgtS^…ZgŠ\~™]„§\‹¨d—ºk˜Â|£ÁŠŸÄ’—ˆ‡»ŒžÉ£¾Ý¢¹ËŒ¹®s –g‘sHrdGxrPiw?[sAXzNc‰Yr—gu¢sо‘‘Ñ—Њ”ÐŽ¤ÙŒ¬Ì„›Çf}žFhDg”Nl¦ax¶v—ƧѰfvŒXi|PMyQ[yVrƒ[y~Pƒ‹av›p„lmzALM'9B.MY=\g?GQ.?H0<='DE,gP;[l?AY1;S)2I#+J >2$0:L(?h6FnO`„bo‡JLn>Vsbo‘ac{Cek;]V5rS8q`7GW+;H&38 .5!-6'-C'0F.<N>RjPe|SW|?P`3kfKq…Xc…HTl?If;Gf:Go>Gn;Vf<Ij=>Y8CbDPs:]~9fz8g‹GrGj‡>Q~=Kq>FyHNh9\W-EE&>O4E]GZuI]vRbpGIa;;U3AQ6?B0,8%*,$E7.;8#3@*8K)5C*1:->H4GZ=Ua:Oe:@`BRp`t‰l) !%$ $ $)"*,+%3"6!&0"#.&)8%B9"1M+#?+&2^)WO$<T>6%>E/E=*\T,jO7Kg;[i<Fg:2E2C7'1@'/9$;=4B"16",1 E3;= <3 Q:IL%fa3Zo>A^>OU.fa/PyB>TNDX3)F/8/ OGNW)PY8VX8Pb7:S3AB*aJ$AZ'NG/hE&pm9pX\™tU”jNx\9pZJU[nE0{y:v’r•„›‚{ut¡j]šrS“c\ŠYV_WY]†PNd?‰pN‚Rb}U_xJs|LxMh•bUšbV‰QM‡I7vH>Q9Od4]€Oj•__—ZXŒUP|KY|HW‰F^|@c}So‡X‰•Tk±hp›qx™koqJ“sFeKQs<c…Oy…Erœdokj}\]}WHt<CW2YS0OwFQeAA`=ZV/os@k’L={U)91<:"b^/Z¥MLaKg4sm0bœQ]–gX‚OVpN_zHgŠTO‹PVv8BˆGM[@le>sƒSP}WB^E;J/JY4BE1QG$Y^&Xs4tu5c€JLs=Ic.dY.V8a{=lƒAIa;9L1LH%RD&mL+eT.^rDJz>Fb/qj+qˆA†|CzvBtyA]CXt9zˆKz¤^j‚Jnp<fpNiaAbZ9an:`v>iu9µGê·vÈÔ~mÈ‘l™h‹”V}—eWoGfV7~o>p’NQqJah=ŒX/©P­™hm©fG}H:W$[vHË‹Êÿ£ÄyrfARdChmAziFƒYƒL”ˆYˆ^‚†\sœ]t“SŠ¢l‚¬ng‹RroD‰`A†nV‹bGŽV=‚R<¼]B­vUt² b|lzx]ªwPÈXÿ¦xËầ—€ÿ˜wÞ½ŒŽWw[‡£y¦©v~‹]UpgJqX@†Vr]_XJ}cN™¤w™¥zŸšlq–_„>®\r‚\z€[~·w|¯uR[x:T`39U2Ig9awDa~Lt„Gl”_ƒ£g¤¸Š¸Ë¦éì¼Éø«zËwLt7|o;…ŸSv†H‰‚L¢\•TÔ¢i™£\y¢QhŸVx¥g™¶}¹ÚÆø™Üê“äÒ}×Ù{ÅÀx®¢c‰S ©e¥[ƒ¥Jms@qoHh˜Z‰©U–«N—G|=…ƒ=c„7e6d›<s›E‹C‚–L‡¸i¬Ài©Çl™Ó…L°_0_-HJ)jk:€€G’ŒIuGN\1KQ%Ne2€‹SxÊfx—Mœ¢_~©b~Yk‚Q›nEtwGOg9\mBs}SnxNiuLqkDsqAp^>YY9WkMm€a“…u¢’p–~N¡‹O­‹UxƒMv€Mu”XXŠOd€H„}Rv‰d}„[‰uOztY§z‰Ë…{Æw…Êz‰É’ךšÔ’¬ö´­ÿÄ ó©¤Ü£ª×Ÿ¿Õ–¥¼|©bvHkVBxLhŽQ`zD]xHd‡^n¢s~¶„—¿Š­×žªâ¡­Û—žÉ¤»mœ«Y•Ee’;UˆB_žW{µj‡Âm‘¸j‰Ÿ_s|FXi4[cJtŒfo—rv™k`ŒUVnL~„\}Ž\fu?BQ)AB1Y]JehC_T<gZ?H^83I38G.JN.GR(>Q,0K&,;4J#.P!%K#3R%>`:MvZjXbˆAcqDcxZu‹elKUsBHf8CO3UO6_f;XsABa5.C#2>.7C17N8I`J_{Vk€Res>Qg5XcA{uRo„IUv=ZxAUzIX€LOsOJtJJuSU~^TŠ^X‚MT|<Jp:Nr>]ˆK_™RV•KR†PZ\XŒFCh/1H#/D&@Q9[hG\yGHk<GV4AT8I\Eb^AX[9BU89M1=E0>G+:E+;G&A@-AI7CN4B]5H`>Rd@GgNj}\"!#!$ #*&,(3&6$ 5!"+!#*'-7,Q> 5M(#A+1/[)=F' L9-(1?6"QH*=]2KI1Z]2@n9=M@)F.86,9C'0>&-:&;%2 &-+,D,G8KH$WU,J^:EG<9B&LE%kd+>‹IRVD;[3.@39?$YM$Nb-E_6>N8KH29I'=D&=P!=O#8A%P?#gC*ka;qr_smc¡sP‘^4rYVEDxb+y˜\s¢np—ng‰ij€]j]w–ip§hj¡lo›f…§`‚»ix¼rg´kažrUyTkOz‘Yj—]ebfSb–PbœMa™Sq™M|´hz¿t_ªt`‹\VƒFX‚B[ƒCWŒF[ƒEfH„‰NsžVc`l™rh˜oCfSnQcx?R‹[fnIf…G_POvCKG7Hc+=b0ZR-OwC>nM9SB^T/]xBXy?.kG5C/FX,fq=i›MCždNfAls8n‡=^’`[sGfzFr‚LfpGQs<jx@LšG>bGZ]4[„C]•\M^Pe=Rh5:^ODK0AJ,PW._W)Vx1Sy?Kk=ag8mw<xz?h~IR`=HQ5BS/:d3BN'iV0lq=Mt<B_4jf*mr8V~E^e;_Y4\o2v~CŒ¢\g˜ZWrBwvITh>LV4EU0SO,Qi6Ye6˜|E Ãi©¬jˆŸ^{¬t•¦cgŸ`W`oX1|yBp‡OdfDTc=`R4Z3Œ?ž¤mKŽZ_b1¹¸Sèÿ¸³ðœwšgd€XpcCuoA~iG‹h;oŠH†F}’Kc…Ge_2|€A‘ jhšccW2uU4ƒlB†kKzfKfbS‚fJmZ±nXâ}[ŽÊ¡¤žŠ„›}rkVÄlGå„Q¹kÜ‹lÊ’o„‰o„|U¨˜o~šqzcNvqN{–c{W…„UuyTflMbC“Š^‘žm»›r³h†«\ª¯Rh‡Í‡‘Óx؉d€RSf2Jk:KZ;ozKe„S\zLf|L{š^½¦Ì™ÕÜ©ðò¬¿èšzÀzM“OV{=|J`G^Z+]P+l[8—w@ly8tp:ˆz@š¨_©Ô…»Ñ‡®Þˆ¥×†qÃtttEƒzB—d?ƒrL|K{‡[u„^oŒUh~N‹“\~´cu—Ftv1h€6c„5Sl,\h6b‚<bˆ<Ly7OZ%lb+}‰E~NŒ¡T|¬][¢bJyI`b6dZ.ow<c?K;?x7Hj*fg8‘ŽS`ŸIkm;rrF_wGqtFr}P[†QJn?Sk@xvMu…Qh†]^‡gcyf_qKgfO|†]š‹rÀ¦†œ–rbzThkO}‡R¬Tg…K{kIŠ‘b‘“bŽyWªk¦¨€Ž s~~hž°…°Ý˜§ëŒ£ášÂù¹ºÿ²²ý¬Ñÿ¹îÿËÎÿİýžœÑ™¨ÁŒŸc“†U~‹[ehD{sRtžaiŒLZ€Pl›o·‹¢ÅŒ¨Ã‡ÊÖ™½ä˜ Ö‰¸i~–Qfq2^f7_‚B\•HoŸU~­NƒªS{˜Je…CUm0CU0L]Lp‚b†’_€ŽdoYONSoDfp@fb9SL4JJ=ecZlxONS2U=7n]F\sTKqHDf9:V35L2<T31O,$H*0C&<N+7^,;`AXw_`ˆXZs<Rj>b`FsrPekG\[DhkS\pJTaBTgGvyOnƒF?]8<K<>_PL€[O†Q]†KhHYo>I^4EW8UfEjrGXtBQtEg|La‡]d’_`‹R]|KmmPojDjd8TT4UX>Vg=OgEtƒUx¦\džPgXrSUi65Q&/D.J!;K5O\:Ud9BY+;M2G^<]kCkj=ph:oj;fg6TZ3QV0;L)7D+FE/QU5ES3IW7@_AGhFKmJ$&$-*") (#$,%9")>/%7- 0(#-!&/(3 <6 ?9!@E%->'1/X2LL,-S<:@53D&=G'=L2TN0QZ8Kn=Ja>7T?H<08;'(8(2-.3)9"$/($-"G2SP'FY4(=665$>> P?!i[*Kw5GQ@BJ9CP2HU0N[0?N6K<-=h:BOFDM-=A'6J(;L*/O168,G=-^<(_a;_uYbp`ueE„LIXNtY4†ItgY‹^ZƒVm‘Zr«ho¬vlŠi^Ž\lqPy~Go‹Uu‚P\QH€TTqMj‚IwYd chSfš]dZq‡Nk—S†‡H{²^w“h\™_R~ZOxNUzCV{=V‚;T„D_Te–hk’^lai©x_’n[Š^a‡Fd…JKRTlN[o8R{A9Y966&OC$Hk2HV(Yc-Rg?EaFYc;GeFUe;=|LE[7OY4_\8’D^ºlV‰\SjGpw2rZw”jhwMJW;EK(dT)nk1j¹k<wfTJ&lx2„É|^îÏJx›YO+_U-XU5QT0AY2GE3LT/Yq5`m=oz3cƒD†h2kb<nObdOYkHGhIHe3`j4fv.Qv3A].La+ZY,U_.Nh4KU6`i7†HtšWZzJ]_5ZqGW]>R\?WwAg„Ib}>sk8†D™¯_c˜e‹…K~•\}yRz~E_iHXqBqm.aq&YM.kX1X\DNK0I. wDk±hSlQÈn+Çáu|—všoI~°‚i”r[@ch@]\:bn6h‰DiH_ˆJZ‡Ruy]}™eYzR^R7cE*‚S4„†i„Žl}}O²‘y³š}{eŸWÿ€f»Ÿ‚®’~w|f‚M:{]G¢kI½¾€Ò“yˆc‡œv·Ž~–~…fš{[Žz^|]‡™ax}bmiLxgTŠyN–—eÆÓƒ©Ðu™Áo¡Í{™Ì{¢ã¡Ýš‰È‚[rKK[9Xl9WPuUeƒO_}Ig†T}Ÿi›²p®´†ßÐÕÙºíšá¤l·la¥Xo˜PcŠSR:ro5‹ŽN‰Nl€AguEjfAªžfÃ뛼òª¼ùŸ¯ì±äƒê†‰Þ~cÖx‰’\t—Y´™n¦}ŠŒgp„U„—Zš¦oi®bRKTs4Y]'Q^0TE\ŽPa”GIq93?":-Q1!hh;dŒPk‹Hxu:††J^wETgBgsLh’J\“B_…9Lx1Ib/s~N›¼€\ÐvV‰NTG[Kdu;hd2`m=]o5aq6gk:jrN‹ˆušÇ®€Ó¡–v¬’c¨Œc»~˜”z‚Žhm`pmP–¤qšÈw‡‹Y‰‚\ £uš–n¢‘pÛ›|½©x˜…\°›Àí¦°ç‹»ÝÓñ Õý§Ôþ¤Êü¯ßÿ±Ù÷¨´ÖŽ™Ë‚™Áƒ{§ofvR³s]sŒVftE’TtGd~L~—nš¾‘´Ñ°Ñ†È…ª¿†¡Ã}{«[`z7>R%9G1bvDg“Lp˜Gu£PoªWm¨NY‚BQh-Oc?RrV^Xu‚PkPnƒaq†[Vr;Kb/W_2QV5^F;r^Iˆ_IbZ?AQ>PK6smL{†TXwHEi@H`7?`5BY2D[58U48H.<Q6E`LWzX_|LR]<Wb;\`:]XEjfGaUJ‰iY“|b†‚PwˆTa‚Iq‚OiŽ_U…^ddu—Xi„Iae<eW?gZCNV6DO6MT2Qb2[cD]QX…Vj’rªyiŸd]z>?H,F='MG'99!093UYDflA@S=hjEnxGYkLizUW„I6g85S+/M,6W23[8@U1@T/6P28Z=F`@Ga;Kb<IY7KV2UW1[b1X]1CR.;Q.FV-CQ.7M3CbRNucJ}Q)!,+,$2%(-4+4F%*U:(?5!8*"6"$3%-1 (6#14)88"3:%57C<!^?%ON49S81E2?A-8G(6C*JC,\Q.Ha4<Q?0E025#41 *7#,-672O&'E."1&6,#SH KY.GD/8B(3G#13"G3OM'Fd4HZ2<T.N[2Fg6:G=`5)¤C$qt>GaTBK9IE'JH&S@'QR5>e58I2LC1[A-^pFOy_SsZPpDS€Ias?\|HUMTmCizM~’_wva¢zeƒgRˆUUsJPoHOqX_XKStKPsGZ~TkŒXp›Y^œclmN\{JS€S]}P]ƒOzNn¢Qbk`™aQŽdRmERuAQ}J]€Gt‰Im›`n•soSp‹X_‘\UxUJiBeX6f{4OKKoVXm1@j=,B(:)MH!Bj6@b3[h/WwJR_?Zs;NfMgn:FO:RE?I,aj;‰•MrÍ}JŠgHZ?{x7ƒ­PRyGSE9S)=\.LM'ªM%“ƒ=?ÇHkT”p(ÖÏr™ÿìF¸ÌGOAVD)\J5m`?f_5aV>YR3p{D]‹Sms:[u3}m@wM„V’Ww—[VšmZOZv5Uh*Gr/A\.Ri.Mn2U\/KM*[W.f‡FexKŠtAS¤TYfBZuFUoMp’H€¤S|\i†VYtGƒpGv©_Y€WqIks<lrAyCreGX•qJ€IRs(Ul*u\6_VBXX?eg:‡„A•¢pW¿‘y£o†Lfc>…n@ÙrC„¿{i˜…b^BLg;Sc7b]/bz=rB‹“M†¤bzš_i£}X‘sVicxZM£gO†‚`w~aÕzTÒ£^¬¹€žšjŒpÀ…m–eZ‘]S}dS‘UD‹gHܤ`Žå•”jWÌ’lëÛ¤Äòº¡´”˜|S£•lz|f˜–l‡¸‡…gŠ’_w™b¯¨q¹å—Áv¼Ás³Ü‡­ìœ®ç˜˜Ì|…®kKkAN_EN~Kˆ‰MzŽUf‹Od„T{“g‡¢s¥rž¦qɡ¾æžÉ멣㢈Èqz¹V…Ãj—Øwwärp²VŠžV‰ša°b»^zº`»Çâÿ±ÝÿÎËÿÈÁÿ¦ºð ·ï²Ñs²ÃhyÒ}‚±t£¿~¸È‹À…x¯my‘_މ^¶ws»kS†I3O";?^@"sd4fw8O_03<),/+V?+xyJa‘MG8`r<fzQ_„\oŠSxŽNy˜EQ‰>Io3Fv:qF¾µuàÕzs»be‰DX~@Rj7Hg7N_6Jg9Lf8WrBlxV{zgº‹iÑ‘r¥„ZwH}wH¡tP•}b§|[–…\‚}[¨‘s¶Ð—Œ¼vrV¤e¿©~ȤǬxº¡p“€V‡gP½˜o¯å“°æœ¼ñœ¾÷Á쇴㒼존ñ©¦ë¢“Õ›‘¾ˆ™±yxƒ[‡jGu<l{4jƒ5_u8\zEx“n¥º…®Ê•¢Í‹˜¾}ˆ²h’¸ks®cFw99W3;a8Wt<dŒCaŠ@l L…¼f†Ñnp²WLwF[nPa€[oNcp9WY-PK0TB,K>'>9'AC*S`9cfBmjVeuUmp]ƒ^T}QYpMt€MbKTxKHpFBd9@^0=^9Jf=Hi@MfBKnPYtQZn8KT3VfF^uLWlA\hFbhFueI•zLyvEyxJvzOb‡b†¥€´|x \hvFSb2JY-EO4YUA]_LaaF[^@P`5E]3ThCi~Kg^šyˆ«q`Ž]Ol:4O.4=(58#),(EHAkoO^uI5[CM]FNeJJ_G`iEXjCMgBF`MFv[NƒRAq<7Y2@Q;R^DOcLP\F`fMaiBR]<OV1JZ4DX*BV2W\8Da5>U5@Y;B_IZndof-$!-&!1 -+=<=S0&IC(>4"?3!6.%. &5"$6)-<,'=(+2$-738!0>%L:)AF0.98D.-.<%77$8<)L@!?Z//G4,8+<4'1:!48%-/9-AF&<H02M-XG.QT1/F2=N(:T",=-3&%@8DY+A_6F\-Rc.Zy.U†AZ`G^K:XJ4P=3NG/;<-B:#R?"*> B*R6"J[.=s5XV<\d?^v`ay[YwJQsJPu>Rd8Jg7Yf<x‰KxœnožNš~^\\Z^/XˆB`ŠYP’`P‡hOeGX„RdŽZg‚]tsMY¢OJWEqFVd@X†NT˜aeˆ`r€Lr¦ei°nO™mOpWSrBZk<^uAi‚AhƒMd€HsyHP€PEcH?T1<`8FO1^\2_Š@M‹^Hl=;\069%>5 KE!E`5Jk<Yl7VƒKd~IMzITgDfxEQ™R;ƒ]QWDkŠF˜§YqáNžsSsOƒ…Gx‘SG’`?\QCT+8[&7H*aF+™N)‰¥P@f…p@ß¶o§î¾I°»MVGiR&nU1fdDs^Dk]0zY;|rCc„_Z…JjOŸVŽ„LwnBue>q=pd>Qj?J‚4Ki)Ni)Fy2Un6Rk,NZ3RN2jk=`qIa{O}‚M_†Pa‡Kdy?f{AzC{‹OnoFnrEa†Q…vAgŽXV„QMqERY.f^5\s@ºY4®µŠLštOl*fi)ŒI‹o•’s‡“e·‹]ȳj²ò®©ñ›\»uz`7mqA‚K§’fƒŠZh²dzoH~KQo3^}9w¢N}Ìat¶diET,–tD’˜l}¶„y·‚w¨Šh•om‘l£rŽŽ_`Ÿ†\™huiaŠ|m„pdwlUlJŽS¢eu‡e—•{ì–hÿ£k°¾®šrÏ´‚’¶x´«c¦Ä|•ÎŒ“Ñ‹ˆ­w¢šh“«b›Y’®w§Û–°ó­ã‘¡jo…NLuEWUEYlJv”T lnžav£n‰²‡žÀ‹–³w¬¾†Ñë¯Çü¹Ðù­©ÝŽ~¶eI­ÛoÑÿÀÿ›žñy”ÓkžËf”Ñe±a†±g±Ì~Úó¬üÿ»íÿÈÖÿ±Èÿ¢±úŽ‚Ê}‚Š[¤°~¤ÅªÒ«Ç¹±„’­vj‰VsˆU£´w•σU‹M0J+6L)/D!0:98$3Q2*M,*G";@,LH5`U6YN/OO&Ti0bf=pƒSc˜]f‘\k™XY‚HG]/KY4e‰d“Æ‘—Á}pŠEUh3\m6Nn6Ng5Sa9Fg8NeIfŽjv‘Z­†R¤†OrBpoH\U\‡ed„c†^~€Q‡Ž\ž’c“€É¹¦¯â¢u£cžiÊ«ܬƒÌ¨o´–n™ŸsskMz^O«…j³à޼ö‘¯Þ}®Ûw¨ß~¦Ûˆ¯ëœ»ò¼¹õ¼‘Ö‹˜¤p–lm‚Nj‚?b@Z–>Vz5Ta5}u\¡}¯¸z˜·y…ŸRkx8opG‚›\SŠLLn>Ij@Qg7Wn6Y…5k˜Cƒ¯Z˜ÇyŠÓzjŸag€WhŠT_h5KQ(3>&+4%5"*>/:J:FPMNoZQ}On€Vz^†›k¥v¡¬suŠWlyKppPdwMf†UVNCq>If@Id<PYJVmU\y]a}RQd9EP8RdPbZ^…U\SaoHWgB_gFPX8QO@nZUzp«‡¡¹mw†LQT6=K3GP7KSD\cPsq_z{Z†{PdxAIa0C[0N[3Nc8ahK‚Ys‰Xi€QcrFQg=9Z:3Z=;[GPoTi€^xƒ`O}LRoF^uL[wGSrUW~iT‘}]žnšle‡SIh9B\7LW?aRBaRBdZ:ZX:bN4bP/CR+CW->V,>[4P^:K^6FR9Y]BOeG[b\$',$*2!9.%??&3K05L8-J;"B65..7&0@)-E./B78/$+ /1C?<7%V3&4@*2)1;("9<%8=$85"J9 3d23E5,;(99!7B"/=!*28*7=$E:#FR-BI70;+67$E@ =Z&X17/+K>D[/;g;?Z4R_,ti-l„9`~JwRL[W9Gd@9G;9A.;>&0J.,-&,45B"JA#[G'ay:\‹S^„[SrJCa>DF3L\-Dr?MX6t_1{n7…Sr™pK’u?g[ZR=lv2fL`‰S[ƒY^ƒNc„W]\Q„cgsKVL`aBXv@^œQe¢ha¤k\wq–dx¥fe¥sR‹i_vUHlLLe@O^1Sb,Ml<Pl5]n@CwI6cG?O)9d:?Y>[O*k5U^DjAIT,RC(=L)AX4PZ4XzHXzN\}Ie‡ZL‰^\|Zm˜]l¤gZ¥dd’ZqS¥ª[{Ú~Rª~qvEZ…ElX4d}:E„gFi?<F.8F3K]9xwGz–RNŒU‘q@­ k›´ˆG‰EdKSa<Z]6i^9PdAbb:pV3¨pA‹¤d‹¶l€¡_pxSddEu_EaB~bErbB][@TlDHk.Pb'Sm(Sq9Wu=Uw?epB]oGlZ>~›\g¨rb‹]X•PQAZ}Cf‚K_}G[xC}…F[•aqvIm…I_UHk;QO3fd>ak@ÇP½²lO…YIp*aq-–v>Å™dܬ‚±º²p±uPÛÆk´êžW‘[itCpi6]6qgDŠrV±mH‡Ë…\veFe’L–‘M–Ùk~ÜrHždEO5rT-Ÿ[:´_8£¢o—¹Š»’„¿—|¾›…¤‰šƒŠ—m”‹_Šj\ª~p†t‚k\dKl‰Bi’Y’št—¬†Â {±¯ƒ¼™hÂ}N¯§p”e•[ŽxUž›q¨·|‚φ‡²n„¨e£Ír«ä˜´ï§»ÿ¦œß—zlje’\e˜XX€Q]†ZuSª©q‰º‰ŽÀŒžÄ˜¼Ê™¥ÏÈàš÷ùÆÝ÷»Àî—ÐzfšVjc1§¥VÏÿÍÿªµÿ–¦ö‹Úr“ V|—YšËyÃì—áÿºõÿ½ÞÿÊåÿ¶Îÿ¤Èÿ£—í›~¼¼ì½ÿ±¿ÿª”Îu¡¨fŠÒyhš^v“c£¹ƒ§Õ_WHX7A^14P"(@%=^AX‡WG’V:ƒDOh:XdIZƒ]@qTBQFau\X•krl…¸“qËr¡n]’a;lFIkKˆ­t±Õ—~±pJb@CY8NZ1`k?IjFGrGJsMjwU¦ƒg“‰ekkFi]EXaRmwm¥„¢ª…£¸œÒ§‚Ή~³ƒƒ±tœ«}õ¹žëð®”׃|³e´­n̰|Ò£l±¦k¾œd‹[j_KT_>€W=–oG”B“ˆN¤µ\ŸÒr°Ì€°Û·á“›Åx–Z›“X™…Dh<r¤Mr«Q^”BQjFowO‹[Š›V~–Pf|?Kj4Ca3c€No’NPyARu;Ce3Ge1St4\z4pˆJ‘»s¯â€Ëp_‘]txHMe9CO/6E1*8*3GBCo]TˆlX…muvo¦e¤qeŒS‡tO«ŒlŸ®}{ i^h@MM0PO1c`BiWc…YN‚YLWAvZWznx{l™fX‚NU}abtlœnoŽfbxT\cE^ZFfaMb^UacU\oeŠˆn‹‘k‹c^nKIU7;L0;=9QG?ZIHi\HjhA`e1mT2YY1EP)@M-DN'AV+DW7Ze@d~NsƒPo‘R\‹O`…G\|MZ|MayInyFkxANe2Ha:aqGh‚SrdŒ—~—¥’œkqŠPVwA?n=Db6Z]2_Y6V[;Z]9I]0:O);K,DH-EY4G[3C\.HN1QL4IQ8JW??[@ \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/lagrcv/test/img1.ppm b/SD-VBS/common/toolbox/lagrcv/test/img1.ppm
new file mode 100755
index 0000000..da1e24c
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/test/img1.ppm
@@ -0,0 +1,3100 @@
1P6
2512 384
3255
4…  
5
6  
7   
8
9
10    
11 
12
13  
14  
15  !!%$!!!     
16      !/9$80#)/'/ &+#)$    
17   #
18%#%%         
19
20
21
22
23
24  
25     
26  
27     
280 *& &$ $$!')'&,'/+-*4&5!)7-0".#
29  
30    
31    *"-5*$!-%2:')    
32    
33   ' "$?-%C+6<9  
34   !$&+#&&""   #  &-#*" ($$4&#&$2(1'+."3G#0F?D<<B5+=.%B7'C7"C8)0#+%/%(4<4Q>,,""$$)*%%)/"3-6B;17+0.8'1/7+-#"-)*3+.#&- &!+"-,&:,/ '"%BA-U-D%)$!!,.+&5"%# #/1 >D->>'E; D. !  "<58|PgQ3-+ #%(5.974N/GC(TP.'54+   
35   % )   ""#!")")$0 +<4>EPZ^I`cBQQ:5902-3A=-84/"3.2.;A/-E52>3/=).;".203#=5&>373>67;*RG6e[<[\'23#++)#&111BKALR8?C%ED#LH+FD:FB4RA0NB+x[4–f1_R%:<0DA>OB5I8)I>=;?>1929DO:Py8Ge9BD9KC;P@.<B5H6>7:827VA.CI-Lc:\vIb„LfŠPh„“fˆÈofSVQDLjJgn:I\1^R.WQ+A?3AF1BG>MXQXbTYm[ms_biJYR6MT3NJ;(4;-G1GR7QfDCkK6R@/GC*8o7`¼T¯­n›||wweTly_z~c’tĪ¢¸Àõ¥ÐÿxÉÿyÝÿÐðÂq‘lK_SI``QjeLn`]xSbsFXuQo™ÏÆ ¬Á›¶–´šž“hš”xµ¹³ßóÎÿë§žo‰£p…©jzpX\JEHF4DSGK^MIC?G;<J7@B86H<1>234+56&   
36
37 
38   
39      
40  
41    
42  &%
43   
44       #' ,6"?&A/%40'&)+)#!#      & !)#  
45  
46
47
48     
49   
50
51         &" $%)$&-"+(#' $ %! 
52 
53 
54   23:J/C949<'A'    
55 
56    &&#&$#4/#,7 
57    7+.5%#-( (&$! %'"&15287/=;;?,9A89>4PV2EWD^#BO(@D-BV!/H7D+4 1'5*'(&2+55#,9"8H0$?!+6*9&.*6*.!(13#E !>(974/A2@@?+5(<#-:!(7"%0 &$"(2#40"0/C(&$/%%/&!  
58 "&")%*!,(1(8!1!'A!(D#,(0/SlB<g3&:)9$)(+%-.0"';356Xa/n_(Y/#@   
59  '
60?$ H' 1&&4"?#&6@,&#!!#%&-)?*J.H/%3A7=[TKmHVY1FN+i_,6<7*/'.'10/1>-+-1)*7(04.)-*4%1:)GO.YO+[K1KO1YY6mjP^T>@9#/*#--)(0--<A93@9/>4,G44N2AQ2:N?Yp7IZLCgh[‚cV};IL57>INF<OH0MG4EB13=-FB4DD?8C:?B8>AB3;;/03*5:>D/CC<GN?<P/EU3_v9o‹BušBƒ¢RÉœws–RŒ‹HETW=bEUXGRi>Me7OR:8F>BN;VaJ}pGˆ{Vj„_m˜WdjBfi?\p1>B0.6;7O7GZ;DI=:D.5=02<WCY³swÄdo¤i…”iyhŽ‹À¥‘n¦¾¾×èºÔÿ¸Òÿ|šÿv£ÿ£ÆÛl{SW`AVqIelRTrKMkHRcC[jbc€›~°©Ê¥úíÿÿ‘ÿÿŒÇǤÇÖú½äù©Ù¿–¡†}t_st\dhQYHHN=>DDBM>CP><M76;4.;:;<9<A5>@3:A0
61  
62
63 
64  
65  
66   
67   
68  
69  
70  
71
72
73              
74  !&'"!&"/8#F(F4!28,)-*+!( "  %$$ ##   
75
76
77
78
79  
80        
81
82   
83 
84  #% $"          
85  
86
87 #
88!
89  <'B:68+=*,)&*/)4&" ! # #
90   ! 8&H<@?'8%)     
91  (3=83I&'4    ! "&/'0*! #!#!,%<*@&=$:9$GO):RD,IU<OMEHC0H66>7(7&-*%<8&A>?IIKFPDDVB4G6:1!7/+,$ ()4<<!ND21++ 7")!*$(6 <9*8?+>N%9M*:2&.2.78:)+&$#)* 2; 5K(D'* '"(,"&/B3!  
92   !!%'$/$+##) %,/.T,>IWV*FF$F@56+8( ()&BP(XG(O)7^b; Y3 G) S& L5 FO:S+[>( -*B@BE?G0/+*2/;:Cc#<q )<)JF>><]>I9KL;ZfISf-?;+9:#8B*@I-nG&CA ./&/0"11+44/2D>L^=nm4ej4M\IH`JNkJ9D,*8$%.(,!02+4>7/86.5)!(2&,>(0>38H<B[9CN3HuBKƒCOQ:?65<@@IHB@<LB?GB124/g]6†h5<D1.9.7@17B.A:'D<3B@9OG@QLJX_;^[7NY=BjKTzaZ™~…Ë{w«‰ej_lCFPOAYLNbPIVAIP7]]>^cKVp__…jN]r]_ŒbX…RQC[t=Rn'\Z/BC=9R:^e1<H+BK%CD;WZqXo‰ey‚Zo€fu“~|¹u¤´l”Ðf»ÿªÞú€´Ëj¶Œ•Û]“®U|FXt7_n<vŠD`y>XgBQdEQb^fz’𥹴Ñåÿÿÿÿÿÿÿÿÿÿÿçÿü÷üÒÿ°£¾~Ž|†‡l^q`PcSJWEHW=DP=EMBDR=?F42>3394/=7.72*;7*72    
93 
94                  
95 
96
97   
98
99 
100         , 
101    &$ " !*"/%=&I-!M5*7>0#+0' # %""$4" 5)$) !   
102  
103      
104    
105
106  
107 
108       
109#' !  "  "   
110 9,36,48)-''#%"*(#+
111 ' 3195B.;P9%<,$)"
112   " + :( A=6R+);9"/))('     #'')359B=,3-.++."8((4/"32$48?;&796,1273,NC1FL5672>50,.43$/@,553PF6Mk18Q,:F)9Q)4BD:$33"&%$&/$2.1)%2,#*.(;+$18 188(2%-$,A(474<&7@/86&-+6*(0,)'.&/#03 ,%  
113  
114
115
116  
117  "!%#! "'**<2*=@2V7$7,%0%0,5F"<%)FFQ4,g'CO n%Tp-'3*"-   .<EV)P[)MP#g[SU5B(2B<AGL%1J)'0'/5-I55D;JT@||Jiz:]c*GO,226BA8mr9€|$UI%.>(-7(/<0<=?5AF<OV8dVA[?IAJN@PBQ5,(&%+$0*& ,,%-.05,03)+'&%&#"0(.4.3B2;;7A<<EQ2??3E0+36.4C;@A;@?;B47:;fbd\qUGL-73*==0:=4<=5D@+1G>}}E†“;v‘=‰¹<Rd9FQEFPPEY[ƒ™Kx_X€sLj5eh7[VDSaH`aF^Cƒv<„ƒ?‚ˆ_„•…™fjqELXANbDE]LFdFPq@Nr7K`>IUEJ_KBY-DX2JX:HeXOg_am]SqbNswk¨ Æ·–qsŸf€Ô´ÍŒŸ‰…Ÿ‹ ŽYuMfIJpOTnMM}NNoDMiB]fD^k\x¡•ÿÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿ°Ýµ‰€ˆmSh[HUPMYJMZ?GS:DQ?CP3?G25?11<6,75)41)/2/02
118
119
120
121
122
123   
124
125    
126 
127 
128
129  
130  
131    
132   
133
134
135
136 ! , # 
137 
138  $3=%D+ I7-9:2((3%  +!&!-#14'9"#*              
139    
140
141 
142     
143      &+&,%(  
144    ,%011657)(4$!  -?&23'&*.#9*(51#*:@'=& 
145   
146  2 84(A#6.&B$2+$%%!   
147!&.0">K&EQ*8FJ? =@I<BI9G=E&+K.4?+=P#3T?K-5K97L+>B-?N!8? ?B4A>*=Y5ENT0AA-6./8)&'* 2*  !'#!!") $747+%%'%*'&0/'."+2' '5*"6'"% !&'  '-%
148) " 
149
150
151 
152
153 "!"$( "#+-$,5#:&&% !#  $$D?$@'?#U^<M            ,7)JH@]d?jp5@Q8@Z1N\2LM8IG0TE'64%B2%6--B38BAH>XQ=aMTlHT_5OF/nr;_oQh|?ˆ-HN/WC,XC1AI37I6PLA]USHNFZ[9O`B\h6F? ))!-.%"+#"')45,-8(-.!)5"'#!&(*,0241;9086:.05+003,.B/3D9:MH9995>IHi†vekb64<2075/;5B9;@88*3HISV\tLf–NŸShŒ@\]:QXAUdDOdbXfCMyL]uMnyBixGgŒJs¬]–½g¶¿kk›fr“i]Œ…P†o`x<So4bv7fc9[[6L\AJd=Ja4E\7LdFYm/Rp4JY8FdAF_OJfJQnNKqˆP~¬f«‡^‡kUw“j{¤Sz|Ktu`†[YqDFeC<ZFFdQQdNN`FWiLksPpx‚m§öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÿÿ×ÿÿÿÿÿÿÿóÁÅ¥f|sGXTANJAOBEQAEOBCR>FQ7<E/;>.3=/.1'+-,+1).2,
154   
155
156
157  
158 
159          
160       
161       
162
163    
164     (9?'I."U6.7>7).." "  ("!!#%'$!',"&&!$        
165
166
167                     $,$       
168
169
170 
171 +-$+&++(3*,1#$    +%
172&F(@(!/>5^F MO+*8&" #
173    /((1!&! 
174   ($:-&3836B,7S-4W,9M)7R*6N*6M)9Q48@*1<*83)7@1*8-9//5I80O;+G*7B$5E'5B9(C5#2(!!"!&+/R08)*+()($1! !%1$!  
175   
176   !!*, 
177
178 "+C,
179
180  !-@::O[IemE:J6EN8K[4Le3RS6<V8MY/PT)KF+MV3GL7'3D&5N$5T4TPEWF3VX9QQ9T^Ef]Ms2DT2\i-Mb6BE=cf@Ta=C^?=\P@UK-GI.J/&,#+*!/(''$)3'-6''0( )% $!/)#71):<,@H/:=,.8.3;(BB+M]4B];Ov=FZ8bNeiožb‰m5PG0</34-8;64<>7?48-<A<VDOAG[F€­LZ|Hfz@Yg>TiDPf>Ke8LmCJoPWzXa“Gw“Ql}m­£qµ‡Z~kGlgFl`:^dDeGHiDYjHfu=Vc1Xf+Pf4F],FS1LQ5MX2Ef8@_9;Q@EZN=GM9K;FVTK_‹Op„SyvQszMjrMWpGUhQeIlr6Jc6EY>Md<cm?XbJYaZgx^t‡—¿ÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéÿëëÿËéÿ“Öÿd•šXaaEPB<H@COG:CA3G@;J=3F9/B//8.+9,16'65*31+(++
181          
182 
183
184          
185
186
187
188
189
190   
191   
192
193    
194 
195 ( /  
196    '<F*Q3%Q?//C9%*6 '!.!&'##$         
197
198 
199   
200 
201  
202     
203    
204 
205   
206   
207    
208    
209 
210 
211 >A/+1 "
212 633$2.'4,"(-& * 07*22,1%( 7K=/_T?P\3!*
213 
214 
215  
216    +,## ! )"     
217  %,#6;:#GE&4<*45*)0*(**#$'06.0&"(#)40 H:!=E>F11=,(8*&00.4+.:),4/(&$)3/<*A $# %-2*GQ$*9%*!!/ $"  ""/1)   # . %-
218# 7* 2+ $
219     
220 
221
222 
223 #$  $  &4 ' + 9% A1 (! -P/5M 
224  
225
226
227)(1*"),GQIejP\V1/;03F:>E@6J>8M?=FIBTGBT;8WD.N2&;!1.&.-;L6L@9D(1M6:<<GJUSbRHLOHGZbNWf<F]AYrR=VB@H@06@+43+4:*,8&*%),&<6 0, #.)+0''2!%+&*!*/'95-5=2?M6EQ2:?+JS1hg8zd7qX@LTD8HL<Yc>cšJaw+6O*4*0;)B>0BB5B@1GE-<@A>I5BY<a|LNeJitOfpDMeG@W8AZ1al6r{KboGcsFaƒC\€YMo„AntRkJK^I@[<=S;;V=>_DDXUUpNPb>^g4O^.Ie2^h8ch8Y`8HO9;I96@>0=D-GDBV7ik=LcHWdI=SZFia^mWWcJR`YLcRRlB3R5C[>I`GIgNNXKY^]Ykzk›Àíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·èÿèÚÿžÌmppJYI?L=7D?5C;4@8=C7<G;7C4+:6-5//813=43:'/5))-%    
228
229   
230   
231       
232 
233     
234 
235
236
237      
238
239
240 * 0"( 
241
242
243
244
245
246
247     . 2 C) M4)<>7*;<%%4%3*23!$3 &!!"#%" ! #    
248   
249  
250  
251      
252
253
254     
255     
256 
257 
258 
259
260
261  0*!I(='*3 $""1+-6&-,&--$62#6(-.+(-/1?8K%:'8=N0Ij@hkH>a6
262 
263    6 @0 /G/8(*-)/$      !)0,/%:"+%"2.7*-.+.5#%3+, /3&.<,.J5&9>*>,5#/ +$02#A:"@9/.'$.*"5 '@.(2#18=NT7>G$!"$!",.7/!"
264      !&"027E .J=FC5+( $ 0&@(I26$ -''" 
265  ")$+0 ('!(#(.>:M!F\#=G144;0S'3KRrWo G& F-mL ˆN T,
266gDD3I.2,A  B?LV\]H[@8D'4:-VR-BI:3;5.=09N?0:8;@;JC:W?&=:%GD(YT5–n2IH*J>.IG?SKMY_=L`=]eILXE7CV0Ac6D;??2<>-;8./3*,*%,0%13+:@-4:4/!**"$) )('-"59,7912<4099(;;.<+;L9D\R]‰F}©=t”5ed>F?c;@i-BD37,,1,)016F:FD6AJ6CG3LS8_m1O`5e‹A[qHe|^]…ADY67O1>E7?\D]€L\€BYƒKLqUemJOeLEOIEb6EZ1D\.>Q*;Q.?O9APFI]WO]HH\>;[A=]DToXr~\n€L^X83E3im9˜]:(.C(8O6[KNkNck?M`:BTIm€P{…Ol{PYlWI]@>C/=B>;HDAMFIKEcRRYiƒmªþåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ³ë{¯¹t†{ZiTGNE>F9<?61>04?26D5<K4AH/@>,5:+-:4/97-2.*.'$+$     
267
268
269      
270
271
272         
273 
274
275 
276
277 
278     
279 
280 & (!'%"
281 
282     '3>&H4(>=5%:>"!-!1(9*43#!'$!"& $+#"$$#   
283
284
285          
286 
287    
288 
289 
290 
291
292
293
294
295 
296
297
298  
299
300  =/!+,2,4#8 $0!3()-++'""@30D!3<# 4'##G',CB<827); \%h=f#1*
301: 92
30267
3036!I-H) =: 4*'6!>!*-5!(,")$#2 -""5'  !"#    ($!+""!!"%#!$!-(#-<"#7&18 ,7 78&C=*<82'/***#!!&.) ' &3)AK.6F%`E"K?633,<3%9O%=4%5E<FD8OFR4D4#ZI$1F   ##" 
304 
305
306   .#"0'4/-,5'& 0'E.<P:.$$$    !*00A'.GXJ/>G*6*%;#> 2\%AT9O,C-%U@.a<5[)c|0aŽ%:_(6'#' "$.5?BSNORLFW2Wb&AQ1-Q4+=.,05*55 /),40>]5\_5Sf-N]4|sK{œKNY3?T06M:XcBqzOVgJHXI=Q6CF38@;A;6:E8>E1<=,5=(59#13*:7,3E2VO.9>%-5))$,+!10 72/76*-7..50(-200(XL9JFN9>b7Vt:XZ\€Fg~:jp>RP315'+5$22/07B7@I6B>5G61?5?T=;Y3]yHTpZDaY<NE=N2TJ.‚[8OUY^bZTaHDTHH]W`iHKa9Pi/I^2GY*>Z,>_$AP&9J,=O=TfH\lDL\G?W87SKE]it„g«†]q€AFAiAXˆaCUA738D:>JX\TcnIM\>Pea•iáU”›Zh{JFTBUa6]Y9IR6EK?S\H\fMTgoeœÿãÿÿûÿÿøÿÿÿÿÿÿÿÿÿÿÿÜÿÿp€Âav‘TefGULLR@OG78?306+1=06B55C9;G0<D+7:-,2-'1*&-+!(#$#  
307  
308
309       
310 
311           
312   
313 
314 
315 * .%%   
316 
317
318
319 !  * :E)B0%271+,8*(!" /( *$'(&)'!*''*(&$   
320  "                 
321
322
323    
324
325  
326
327      
328,*($)& *>!&J4>:(&2* & %.,)#3%&+;#?DDZ67]8S%# (;'" 67-UA=K?FF >K*<M')D&**0$%")$ $)$#$%  
329%    # %'%!)$,!&% ")+ &0#'74(88%1<-@V,/B-0-$*!$.5*523=5CX52S%E?ZU#LN/@F!FC#MF1?I0DR";O 8O>(C=+.'(/;* & )   
330     ! %" !&    %= @ ) 
331 
332
333  !    
334      & !&" %(74)'<%-4(7"37?5:2H,!<5F=*E`6\1    ,#-,/.7I8F</C:?SB4=90/1)('+!"/$'.'//8ID_d@-F?JQL^YqL\ˆIIC39F+;A2JM4RW9YGPQ<DL;AGB-@31839?@>IGAF79@,:6.3;*.<,&6(2=0@F)@?&10!/3#//*;7.:6,03()/'/2!03)190CW8EO<>9G7CN?PZ8[V1FM6^4>I+55%14*/812:A07:/80*5-+7//7-.F>AeF<WB\V<OU9x}L¾º@v>jNZh=WbAXcRXjKT[GRa;?R1;V,BY)N](H],LU.@P=NcLVrEQf/KY.CZ9DZeZ‹ý÷€zsS<K[/C•Kfse\9D@;2@P@^^NrSNjDp‹}ÆÛ¨ÿÿ‡ÿòWè§ILTK6LH/RE4R4Mn@[rKUtGS_dc†÷Ëíÿýÿÿ¼ÿÿÿÿÿÿÿÿÎÿÿªµÕ^kqV\jLTP=NK>QCPU96D238,4</4?42>7/;7,902:/43)*/$%'%"'"'
335
336
337
338
339
340
341 
342  
343      
344
345 
346
347    
348
349
350 
351    + *&$   
352
353
354
355
356      , : Y,I<%3:4.*3$#%!%!"( &%)"' "&+++(    " !     
357    
358
359 
360 
361   
362 
363 
364 
365   '$@,LT$?Q0 7,!'O2#GH=C!$=!"6>!7R#"LH# &62*G%*)/)2&/P(9R1?M70H;+81/+ 1/#,,44<9"  )!"*(+&4)!"
366  .&& (%%!&1,8HGH)BK/4HC=4#!'""%'.6-N)'G",*"6;-R1&G."<%%81"D2/64-3/;B.5L5-9":!0"#"-30>@gGF\.G8 ")    
367 
368    
369
370
371
372      
373
374
375         &"'' "+. "" 2)%(?0G+\I- ),&!)& K>T?4<.?&275%1A+44$4G*634:%" #(/'%&1$(/I(6S0*:7;IJ]JRqZ\eCUE15/&665@9E36I5G?(AB/B;453*2206=/:A?G@5I54H1391113//$*/3.89;I34>';7*.5-274=@0:?(,3%35'=;'27*JE4JR2JQ-W\-Ra=[f<aZ>bW?KK:AM*?D0@H27>3lM/rD+7/'1:*6:&7920@65MKAfIl‚U`|’q¾†r˜Rg‚S`nIkp?n|OlzPoq>Ww4mz2W^+Q[/\t.Pn6Lf;RlAMdOGmBGb6MU1G^:JduBqøG§êP†]>OK:AkYV{U|Wº‡:GBHCK^C_INnQq„«z®ÿŽÚÿ…îÚùõsTY547>385-936P95Y@:XGKjdQ€ÓÿÿÿÿÿõûÿŒÿÿÇÿÿ±Êÿn’ŠW`WKZMOVCGOK5GC2D<4G17>0:?01=3*32+43/40/6,36-0/#*+&')(  
376 
377
378
379 
380  
381
382    
383
384   
385 
386 
387  
388
389 
390  (&!$' !
391
392
393  
394
395  " # 4=%W/!KD+<=;&1- $# # %!!&$-  !"   
396   
397             
398    
399    
400         +&9)C/<;/5A@*34.!,/L(!IWI@UC272!-6$,;2&"0!))+/%* !$ >92GB5;2!8*<098>D8HI8)0)*'!'. ,%*-,!"!!#!"!"  %  ! "!%#?,-0.;25I=01E<-F9.=2$(* !   ! ")#7""*%#6!$1(&. /%$/#..0+9**3%"*%!!*!6:=J7!     
401  
402  
403
404
405  
406  
407      !" %(#!$ /14& !83K7?3'0$.,*)!'%,-$3,&5 ##+@:026/$B53oM'QR7PKR:EKFPK[^3e\j[)Lh,4=229<742-+518-)/)13-.77=A<)65(56(-+/8-0<$:?"KD7@B<7</1?.'/5.29.=;3>24;%1<*.;0+8,MX7Y9Tp6Ld2e…5x…C]~JW|?Hj8@R57H51C74ECFsXf :l~)JO.?G.TY&CH&7F49PNDmWN{v4\=egKniTpdRkZmren†ei}BQp<xƒ?W{:R^8Ib8@`4Dj:Be4BhCJb@KZ;Ni5lW:DZND[¢8WÂ-ML5KH;U^AhA[§I‡k3J=3Q>Lb?CXXP|Zxà^„ÿV‘ÿDŸ²:^3<K$CK!5B,6=02@36>9DN^Cfír¶ÿ”ÿÿ§ÅÿpŒÿf›ÿb†ªurejeMCTEFP<>M89A?-;7+55080,<,-6),/,+2),44/5127+./)$.!)- &.#
408
409  
410
411 
412 
413
414  
415
416
417
418
419 
420
421                 .,#%$
422
423 
424 
425  
426 ' ' 
427 #
4284 B)F/$E>;>8C&05("#  '"!&$$  $ &!!'"               
429     
430  
431 
432
433
434
435     
436    
437 #2F:!:P20E: A,!,+!%*17S>WS%J>6*1& -' '&+"$(:%:-$D+):"&4(*3&644B&49)" !$*%&#'($& "$  $   !"#,)<>TE#IJ&5AW6*6F1*83-8,49!*+!-%% %'(/"!!% "(!#!( &&%(&0  
438     
439 
440 
441         
442    
443  %   $*;7;2-)/3+&+ 'D0 !!$#! #%$,)%3 0@%L[4WtCEd=a=HL6MP?esFQoH@\FQXFGG.14+69'04(+++(+)'/ 0-,:755)66&(-()*1&2/,28.=9,B5534+40.4+1<-555-:3-60&23'/*/.)2:2Ab2Mb5Vg6R}=ZF2WR4MM+@B,=;(64#1106F.F=Y„9QU=K8@VCH_;5P'3I$:P1RWG?O=0GE4DP>VVQb^Smng‹iR‚jQ|Qd€T‚]›H‹”<yl-oX'YU,0G*,L67U@B_YIhZYqIddDn[>AL=6G/:I5]iLn~_`h‚6Oq2C:/=9B\<G\WJ`ƒTj€Yn‹V\ªOU7F0>R11E'-@(3?%0?):E/;IF>O¥r~ÿt…ÿ\v¬jm³S`»Zi}ey[hsLX^COZ@=G52=,-91/4./53,5-*4):0)-1(/4-)31'0.&-( &%",!)*  
444   
445
446      
447    
448  
449    
450  
451
452     2
4531''#  
454
455   
456 
457$ &"
458
459+ ; R'J6#G:2>=7/3.(%"##  ')##'$,! '!."                    
460 & ,       
461 
462 
463
464 
465 
466  !7&14;A(49/'!("&. &=(34%"0( & 
467 & "6#!*&%*,#% ( '.2<*9!&"(+8"5%1%-2107/3'"" ( +"$## #!**1,.+3?8(=Y5=]25T+,M+9Z4J &"!&! $ !* #)            
468
469
470 
471  
472
473
474 
475
476
477            
478 ($" "(G9 ,# !"$(%%%'&"(:+;Q'A`/AZ1:k?MA^bLLTe>NO5GDI]@W^7YU(A;06;(07&"&%#("&(49/?E,AN,&1'+'&0.';=1N>603766-30*43,/813G1>D++0)38(iR+eE,H>+eS0fh5GZ;<OJ7RR(4=*,:/415A-D=)6;#?G.4@<7EJCXDP`9@S9=W6;M%6E(.B57N;0D/*7+0>1->C1PUHeRap\OjRNmU^€gn¥‚‡½u‡ºd{»Mz¢<f€(6;&&5/1:>0?A:Sagth]}Xq?”s)(B&1D6_pITtKLnDJP3JI/DO4PU=IYFY]dWbkfrkxv^_cADA18=.4=(24,03)=6&:>/:D>_Uki‘𮳥•z”€dojejsp_lkVlS[eFTa?AP26=)58),9-:9+55(C6)`>*X3(H5+27,,-)'+%')""%"$+!       
479!   
480  
481 
482    
483        6
4840&*) "  
485
486 
487
488
489  
490 ! ' / ?"I,?6*B8488>)./ %(  2*#"#)&!%.")&*()!%!'( 
491
492
493                $ !!I! }K)U1     
494
495   
496    5@=-73%/*+%I:*> !'!$'%,9/7)     $   '&%.$*###& -(&3%"! ,&,-!&'*!*$/7%'9%15 ,& 7+-9*2&/%'&("$2 %1 )!")!!4#)=&%KM"@K&39",:.#<$ 5$"   & 
497   !   
498        
499
500  
501
502
503  
504 
505 
506
507
508
509
510         
511  
512      &"4)3)#*  $.!  !""&*,)((&-,1C7:7:<68:H9HLSXIRJFH;3==?ESESOMWC?G2>B/CD$8/4/2/!/(+47.7B5,6$C>&O<&::3;E,>D%GE-BB&36-,33.2;=A*78%6?:FiLa—9nv@hzJF`E.697E0=C3*-&H<'D71H=0BI2IR,Y`+LY'>C-@K4<Q64S.4F-?I#=B#0;.3=4-8(2@'/=.78+?9CQXNNZDFS4MnFxz[n‚^~–K}„5^„.[p.SG+7*'8,/859?;;Dd=]xIaˆ9_‰Br;.1+"8LQbP-KH9NDOi2nh-]a=VkErlU}uY‘vigy|toTmLTZ2QJ.<?.<A*NK.NO2MQ2DFI]bvkŠž]•¤^‰cŽ}dwfXygVm^TbUNiLR]ASZ2GM/@J+49,4=(36-S?5fK6‚P1^A.+6+,4"/1#01 +0#*/$    
513 
514 
515  
516
517
518
519
520
521 
522     
523   
524. *&'' 
525 
526
527  "%  /H#J2&K8/>50*25"%+#!   9.-""!)( " "))(!,-2,5&/' %         !(W- 5T&%#'$" 
528 
529   
530"S MM=B3B..+&53DOW`',[!(D#&"/0/&?(*6521   # 7&! #) *5%.-(!2($(.)!&*393/6*/51"'1#18=<2B);$'6'4-'+ * **!&!%%(* "  &+3 '' !'2;N);& !  2(0'&#  #  
531  
532     
533   
534 
535 
536    
537
538
539 
540
541
542
543
544
545
546
547
548   
549
550       " &  !) &&+*'"190+%$'-1'T;@+ -        '*$/-74<.52&5A1AD/GE3B?;LDJCBFCG78A,/>6/@K1LE6K324<-<38=)RI)CE)LG+4A(<>#13-9B=-C8/K:=G>0?4,@7/<4,8*(1(-82?L4Wn*Im9If^OYoHi]JY[DYC8A+=A,6E#CH*hi5`~1pƒ7R\HBS@=WAGX0.>/-4-,9*!.+&910E,;@(.3(&3(5>$0;&B<.=A1AM8AXEH]@LL06CB\zOj‹W|ZˆWƒwEHBK56986!:8)DF2AO68HF7Kc6\^8Iv&<W/8$6;;-DI*8<KKH\c]eqLfuXch_^˜wÐîxÿÿj²œ~ƒ|wYiTBlKGb:QR7ZX=UbIS^JCOEAI\p`ugs†ev„Zo’Xp|[rlJ_V=XP:PI=TFGVF;Q?EV1CM3;G37?28<1A<?UBFcG;;:2$+,&1('-()0(*2''1'        
551 
552 
553           
554 
555    
556 '*" &" 
557   ':"1/#<,492.)-0%"'!! # >/20'$6/,6$-!* !! &"&)')-+5 )3 -+$$ !
558     32*66((,   
559   "*%689QJ;;MB@8812+,(-.:7%OL8S7,*>J9K4BAAMaW#,!"!
560 ,%2 "/(&'#%)%(1-$(-%5".&!&0 '$%')*!4#%211"-7%6.&2F99#)6(,-.,?+9,6,8'11$ "+++'" "7&2""&  @$!5;%,.!-2$ &          
561 
562  
563 
564 
565
566 
567
568 
569
570
571
572    
573        " "#$ "*)-4!!+5;&5^8Q3J>55=+"$ 2-:<#5<,DT$D=,97>81?:>:CE?HF@@G89@:.>-,40-76)4@(37983==2BC=T\CUY<EW7JH-F?,FP*;A<CA?4:=/:;(47*-775195+21%(0*/1?':33A-CZ<;PF3RG1BK*AB,>.*9/5C1<XBDhV=_W<YV\pDlm@DKE+>=02)/3)-/)+!,+*586BH)JB&;8,&1//925B5;C9<GE9GE6DH1K:;NI_kZj}Yngl™_h–<b-cn.v},rx.qx/R_4=Q3AO8OY@IV:<H72I,IS+=J38I3I[S^o_dsbSi_Plv;dáSÃÿÿÿôøÙ…¦¨eehAA_IF_MX]KapYkmWYgL_ZIYnb°ÃxêÆ]|`dxaXekFY^9LQ4DF4AC6BD3D@2?>1A<;F58A.?E.<@0S=>_:B`?=0-+()&'2'+1)'-**.$).'  
574  
575  
576
577 
578  
579
580         ! " #39%>*)93*)/,#!!!5 ,2!1.'22#..(#*'!$%!,/$0,#.4!,7%(-(#.", %6,2+            "!%*" &()  
581;LL:IZBBL61T/I",$8)1C,:D 5*&-0&/#%/ 1C%A+(""#$4(71 +5"1%- $"!!*.13!7-57*2#.5*"66': :%$3$"449/!4+)/"(,1%-+"% 4,*62+9525&#! '"%6!)%"*&$0*    
582    
583   
584 
585     
586 
587 
588    
589   
590  
591
592    $ (#!"'/8&?/ (0."   (),+,-(-&*,&0.#G37H5=KGgf0BP-RV3[f;U[9ET>2@9.7-.6,21'"1&#/$ *+.;69K47CE=SW-IF&=B/M>8R8U_2SU1;C,?N%5=-8=$6?)7B0<>*KJ#D?'7:+61.+,20674:;(40$/503---,'-'06-?<78;BN>6=SG>^W-SI2R14D031'25(:<!HB L>+T;8>DN->;*9&+..-133:I<=8*7=67:(2:429/>NL^eRiZ@deHqkGocUnB\pFUŒHq£JažGiˆ9U_/AT3Wc;Sa.G[,EV5GY1@P,>Y@BR]6Kb8Ua@YW5LU1F•=nÿhÏÿ¢ÝÀi†ˆFY2)=7:SKNgZNhbXvVhvTjt_kx–d¤©‘Å{z‘^QoZQcMFZJJP67<<+99+48+;78984996?/7F2<F4DJ5gD9ZA<[@3L4%*(&'1$+0(!)"!($)0           
593  
594               %%     '+:<'>+$:1',-*) ! ''%&& *!% $''-'"0$"*%,(!$&!""-,#(-%#(        
595
596
597      
598    (($ 
599 -
600
601 ("2I028E*4>".=1;")&)&#+.I,A.,0"3/+0"6!0/!5+%/0$'!1 $)$%  !%"' '  !!&)/$8%0!"*-&*5((''!("*% !#!  '3$C1<77#/('61$/E$  
602    ++ "$!$"    
603   
604  
605  
606 
607
608  
609  
610
611
612
613     
614
615  
616
617    
618
619  $)0 !*# "  !#$ -#)<""-'$$-!8#,5#<=:PTQ`9HSJLWUX[HBLA9=384(16)=9+33&6."72"/.5+1:4:D2;K/8;+,0.-='/D<KS9M68F63C:DJ*JQ%KK.NQ1PS4JQ?IQ2-</,>(06'69)FN-4;%,4'4='@A 31"-4++7.5S<¦Ž09@4GI<#/A'414C+BH.GR0JQ7Re7s|?±šAzi?2<>%.)&2%;<-KO9AH1103)/,(/,.*,,,E/?k?Ld6ACIVPM`SK\GKXC4CD2XOEuU9eSSrJDRQD`Phi6<W0=Z6M_9NT.7D4+?G*9>&:D*8?:@0/4>EOº=hÿ>|¬Ea8B044'99;LZM>a`LZkHac`pk\l‚h…´†•ˆo]]^V>TG>IA@N:9=5,30%2-58-9<64<33<3+=3)>8>G<tJ<?:A792IB+:6%/4&&.# # ".       
620 
621
622   
623          ) %!      
6242<"B(S*E5%9:),./&" " !/0$($&&( -" "&! #$#*%$#-)$                 
625  !5$  ' #!" (0%
626
627)/$,0/00*/. % !!"(6!!91(!8('"!*%!!4(.$ ,=1.D#3<!8J'F$$&#%'% '&2 1+#! ,*!*"/,/+'  $%L"5>H+%>(%-$6E$39$#! !   *$  :'&&($$'9)&2)4 )*13 
628      
629   
630  
631 
632  
633 
634
635
636
637
638  
639   
640 
641  
642  "          !!,.!))!&-"+&/*  "(')" 1''!"%'(.*1C6OB5B@8KK;SO?K<9@/JH*E?419144%99".8',6)0/+.448517=)DI"@B#--/(%H,-A27::A=,7?-J>F[82LJ3YH/RB<N;(;3'*1%,-1<03H94C&)5%0<-:B(/=&.<+>>DGL€Mfq29,*3111',-)351>G@@UD>OQ<Th\wc“QzK=E.)*(%4/`J6/CD&D9(1+&3-#+''1*-9/(1J,7K-::<G;=ZPThER`5?F2--:0;D,:T/EV9RP8Nf;R@6H.6P>6WH7O27@-98,5))%),AC2LK4B>9GGZFSw;D]8CN:7/;5+G6/C9;=AK:C[8BeEUiOcuJeŠU|…Xt`TdCJNB=E:6C84=.*3($/.4?4;?039+39-032/1<TAC}G93'5"'0).+)3)&1)(/$(')//#       
643
644
645 
646
647
648      
649         * &!!       0 3"6)A.#?9+;65)-0#%"# ! 0+44!  '00%*%'.&/1'1",#                    
650  $.+%<'$+ (35)/$ /52+,/3,$7""# 0$%.% .'>#16+)'!-9**! 0-/#A-8A/&99$&+ , $(#-#&! !     4S,8X2N24@.HC!)+$      
651  E+)'$)! 
652%',)*>*J?"4C07,2"/ +1)(*% ""$!       
653  
654   
655   
656    
657     1
658%,           &$"&.$&!% ?) (("&!-&-&.07;<+,;:$AD,I9A8<7)47@<E=C>4G7>N=8K2;B,>C5A?138*14*8;89-EA0E</79;6B1BF#JH(>5*=73MH38J-(2=#6D&02%,;!*?,79/1''+#('*&,,+6123(<5';7,EG14>'05(2F@<Z`QhoKT.>B2C>%=2'C92IR>af?eZ<^WQkknTiˆLUV8<.78+*4J-G>,00#+8',+"0*61!2*&#-*'1/$-51<6@G><>K1?Z?SCQV2YM)?;*5951<;3>81@H@E<'8'2;/9<@4C5;P-_W+dj(­l4U@K2BLFTFXPH>C9=I=<B656:G4;I<<F8547:/;A,<I1=T;LXCWiCUt>XdFZELY;AP4:@4/5)(,'&122>41>15;+1;,*4)2:7wMCuF50$"& '$##" !""))4!   
659 
660
661 
662 
663
664
665
666       
667
668 
669    
670
671 5
6722&( 
673
674 
675   !#/ 1%7% ?+!8/.3/-.%+$$ #*$0#(#$(%#,)&-50"#%!(,!*)- .,''2"/+#"!  
676 
677                         !!*'.%+8"1<1/+4*&#6-#)) E?@*2!8,;=:;?H8V,75/350I2?%<.2#03;, %,,*%//*(5#>0) !' "#        !    " _9 ^n(7GA,-5&*1$!!   ! @1$1+%$   &$4/#K4-@4=@*GL%:5#83#++.2!2&&*-!     
678  '?'  
679  *
680   
681  *!9U#-  
682 
683      
684  "#%# T460+-+"# "!!,('#% ! &1,,?)9<-735O1Ad5+A+'2/)B2+580>678A9@??B=HH5?J61?(1:+;L44>8<H9RM5JR./@34D/,?5=Q,AK3+E>$;.)/"'+.#)!&$'&!,.1<(>721$;;'@7-:A,JJ,/?00:7%3*-:->E529HJXQNlCXe6ek@[t4bx5xxBpƒYc†NiWP€TQvB_n=;L/Q^(1D8'7N&/%&2$,8&'4-/;*58 */#15#(2)#/1(<>,D6BHD8LIVoD‘•8€/gY2*=.-62,963F.,4$4>%<E-5<-)<DLh^Yqww¸`…‰PGHW@T]|‹Ohf<QP8362=2:C>BK=@D>4.6-5:1)46*3>,@A8P@@LKMTOAHK>S=?P6GK/=='#,'!)1)05*32,5.,7&+4(4<AuUJvE,3  !"$0/!79$   
685          
686  
687 
688
689
690   
691      
692 
693   3 3)*' #
694  
695 
696 !!27$D+F0#<4(.-+2'($%!&##($(,'.# ('0" 0118!<$&&#!#'$( &-*$#(,",.! !'#
697                  
698       $(($!.) +4) 4#!96%<G(;. (".NBQ)9L(;LIK?V!AM**P2!@**##&.,9DH1;D/-=,%0)#/*2/' '1 *, "(+%! ! ""!'++.KT1A5/,"&E &     &H2-)82'$  (7&-1, /@2I/6F+<L%4G'*6#.=/;.8 26")!$ !'## "* #$  
699  8G"$H -G
700&,.
7011
702+)(
703  F% zUmUU5JB%OM;DS! =#   
704
705 
706     
707    #*1H*mhJO,>-;DH@E787?*0!(#!' ##"('+.&3+)'(F%:M*6.%') '4),3(-4->22=;AB:5BE-=A380:75?=<307*0L3GD6F9:A0(-6-,7+5B@J7+.8('&* 54,,*+,-!71).26>@+PY,U_/@K/7M65J8/7*)/.!%-")5+:1(:0<XAQ`>OcEbˆAp‚EQƒ^W‹Zg‘ZmŒ^X}OLwKDfNIlI3I8+C0/H'1=)-6%)3#*8$#4!,0//2&'-!.5+/5&/(69/$571D08N@Jdlnžs ªU†Š9<>*$0,,40)8219);E/N]+@O+45C6@nWllp’jvFBLKKWk~‰uMlM>L='46-3AA=EC<DA96/0+57*76()2..93@E<8F?ET<AK;5GB;D>4I4BF'40%&*')/+,3)+3-+3+38+F7G?:L91,%&.",9',<'     
708
709
710
711   
712
713
714 
715
716 
717       
718
719
72043'+- "
721 
722 
723
724 
725"',9#O-W@%:@-20-3(!')! !# %#&"*("0(3A#"5(!$ $ %''"!. &$(3/') #'(!( #%2"2*,!$!"24*+*(       
726            
727     !&*!&#2)1$E(!>-@=EL'HF28A)D13) /279 :.(3@C)6C&673+600&! **"CG-9B4%.-# *%$9/5"#% *"(#.+%( ! ""  $%MI!PQ>-87"*$"/)" !     
728'D5/33- "! 1"//:+5 6&+7+?@+8.(/'(5 "-91-+%'"'),*- 
729 
730
731 :+/$)J6XCB`=QCHPVY)
732( KA IH$D_LPNJ>Z5$B3!AC6b9'2(*&2  !
733
734
735     
736 
737  " : ;L.8%"+,16.2G'/8''),3/1:2/,*,"(!%%"',' $&'-00&?36;A8&/2'(-.)/3>B<2<6A<4=<.8?36:7?=-5;-6>=5>=5=-;:!.*"$.44A5>H!*)/3$:S%A_"?:#<7')>(4;,BR:]lMOyIYe;K[8T`9DR'D<%?061&?K3>T3/ELAbC>mHUzRZ†@p…@Rqe]vjNm_>Y:?Y(@[2>\52N(5?*7C 0@#,B"37#85 ;3"/-((/$94$+5*A@%))$#/(!*-#372@8>RpSj§i”’Zt^QL'5/%45+<:-291QX<RR7\[4WO7qkR’b‹p‘®LusC‹tcbymhfJ4=:*,-(/:.8F5=A2:2/0,94/=>%,3+2418G1KL7AO8HQ5EF6?B76?8<F3A@$(-!,6#25(+0*.3*/3,B28<+8("$+"/9$:=&         
738
739
740
741 
742   
743    
744  
745
746         
747  
748 -4#.. &  
749
750  (/4$C&Q5(;=9-29,%%%! #  !&"+* %!"%%".$*! #+#)3")5)(+%)&!*'!),,43'?1)(=++<)0118>#;*! 
751  
752     
753  
754   
755 
756
757 #   -/0&+'&"E,@_#:F2IE*6U,8="*-1.,%/8!)-/#38=B /E*1B!1A&0E)6!#,,12(7#',<)%=C"5A109.B,8,(, 21180>+H*;:/!,)1)!*/ # &&54EI!8.1!   $  "A69@65%%  $#03)2".%7*>&*F#26#()"(,!-, /<((
758, 4" )2& 2*?1):%@0A_AAS<-J/7?*Sh9_s'XlE`+;L6I]DDe?)N:'&'+(>4:s\"5! / #. !! %"(% 
759
760   + "0!)7='9D$DG)7<#91'% !'+(-*&)),&+)4)+?-)3.+;.%0) $.*,7D:2F5=E7-A525;094,44'-1&3/(51&;97J11;)0'&,1;3A1-2%#!!%)6,@Y3Yf+9<.<C3LQ?HY@4\KBi;Hz8Jo;Ko:Zl1jr)qz6F%Bk&+A.'<4(?;<FB9S^>sJLe@JjQ<XM1@:.D5(:+5%%4,/6//=%38 02+,:)0@+BH'-5&)0#03&.3.8C,-:"8:$39&49-3<C-BY2QyOj‡s~f~3v](=B/@N.[S>SSS‘‹NxkNSlIifwœpEulLjbUƒ\†§g{“b“•>YR0&.)'-4-A+1:/8/223=>7:;.64+:?2GF;KR>EQ8>V;FW8Y]5WR9AD9>E(19"/8,4;,68'-1+@0+D/1@+$% "'5=$?N#    
761     
762  
763
764
765   
766
767 
768
769
770
771     
772
773   
774 
775
776
777 
778  0 3&*)%      $ +5$H$L4*<983-7#' !&($%#") +(#'%$%#+$%#*$*$''* "#(#'-&'&*$%#!#!$ "&#0-)#,/*+-./&,6)'63!($$  
779       
780   0 :6/9/" -+:77& $#166HF6=<9G6-I= ,3" $, 5#-1/.7&B!$,*(-*'0-04,4<&$7%)/(- ) +<59@N<T^&/Y?L1F/8#3N%7>+A/9 ":0&'   %!#" !+ (5#+  % "%*&  :36907)&    !+(7' $*2%-*215%&*-(0;:2@,;!8"#6$$<)(3#6/,2<A2B= 40 1)0@O0Ha$NT/AD'58 4?".E"3813R+aa?Th"8C@DJ'#%    
781    " $*%,3-27IA90F13A/JK@@91".0$;8#.5 '3#&6++846A/',1$!""'/10:9*=,5?571*11'01%/.**#"&)-/*<91=88-80AD!66+6?.6B"69!!&#TfGQiDFO'C\6tzHƒ„.\W4Fh<Se:W8:I<8RK5Wd:eAMy2H",?, %.%64BK53GFCG=08;4F62;10;6(4++)&&()*1/1@1-;*4:+AK3JG3WW4&.%%/%22/EF3MM1C9#>?'.:(29,-3.2:3)8_9Qw[t~„hD^C-D=>TR‚ˆV`m~Qt‰`{T<JO*<Z&Ib:CS[`cU_er‡~m‹tt“Z;R.*')+'#"&+%+42503566;967855.;B4HW>JX?P\9GP=AMHDUJQ_@JQ5=E.@D,;@09;*9<)26,;/+6++9*#7 $##""$(8.BJ)    
782 
783
784      
785
786  
787  
788    
789     
790
791
792  -4$)(
793(   
794 
795
796 *1B#N-\:)HC4+74 (   " !!(!"0&""$" %$&&!"'#$ *"$ #(#("#*("*1"(5)--,'.!!*  "           
797  (*= 1/"*$- & %"-)#'/=(!:>57(;9/4F*.?')85/5!!," %'%!*$".&2+ ("'282!/E 7C#;B)<E#5?42%! !&C'6:T+,K<)=J/88!F48.#9(.('!-#,'!##"-&4 $*!"#E* $$ %# '& #         %'#!"(!% !% E25,)3&      38(/(&!! !!"!! &5.,US0sK+%7(!%%%$)/,&-,$)7+$1-!#!#$-!5),80/-+<%79(1.5D%W$6M#()3!8.
798  
799  
800       '!'!()4184;4$&9,2A@E5]^.2?#/8,59)(-$#'&"*05:'+1'(!&%/$.,()-61-6/44)%%("&)'%"%& *)+351*53'.34A94E.=?6+4+77')3'(Nd4>`G`{-7EDZudqTYv-MP*EP*8T.Fh.+4/"$C '7<M)>T%-9&)+)&/2)45=H3AW1=E+4L+1K,>L,:C%:<$4;$&1()>.+@.'62-5<0F>4E3(0 #$61.0663C;/H22F1.3)?>)UH'JE$,05+>f9X†ZkMPD .G';b3]l=V\I`{=OL6B1792B855CAB[F:WRatofwwXk\8B,57(0/"-1$/,/'24%3=3:8542)65CG@AI@?RBC]8QZ:KP<ENECS@WX;KR7DK2CP3NV3VQ.=?+6.,*#*@.#B*&"&%5012.-#""$()>*     
801
802 
803 
804 
805    
806 
807       
808
8093 8%*(' 
810 
811 
8122=$H)P5"[?-EI:067%'*!" $ #"!!!!*#+&%('##!#'"+./-#*$$! "!#&"('#!# # "$!$%%()!&*#"'"  ( *
813    
814    
815 
816 %'+!""%#!&!(0$" !&57,&N*--'6*-1-)'9!-7#/=5 1+.'>0(+'%/&86)8G'1C(+8##33-938N"4I>#91#5$- "0 "-$$$  %%.,06#'   !99##=%-/,2&/!200;-/0/,*%%4$-+ !"        %)+%&(   ?01'&)    
817 
818      ,!5# )0(%'0(A!  ),5CAc6?04*)$$##%-2M9-'.(2&"-1"$/+ /'(>'!6R):,0%$ #-*     
819    
820 
821
822
823   
824"*!%"#-'#33174'%$#!",-77>O:;=,.3/#4.!) !+--'"*:/$()))(1"'/(%)0'7+7A+=E%-1 *+")%,)5>,#0,$).&,>&.622/(+)*,)-&**;,(4/1C/Dd:T^k=am3UMD_6=V8'/*!//"6 )2.3+3*$>)":'1A*8 2<37C4(B;-F#0C#0G)OU.>K-;J38E(.< ,3 (4*190)/0*29-7*&/%#/3--4.'-1(*0#20$0+KV3bm6<P''2'%,=&5t@Sl-=)''")?&1Z0BJ>ID>B8'.3,@/;J--9:+<G)7Q/O]Mm[gkD/:6382+2*+7(5>,134/5.143-13/917C=6F>7D@7JDAR>BS==G<4HBCW?IX9>G8=IB=TB>U>AI,C9#A/-bC*T:81"9?*7;*,: )%')+(%+/(  
825
826
827
828
829
830
831
832   
833 
834    
835         
836  /8$*,) 
837%$77&=) Q/,O93IA>.9:)$*! %#"$%((., #,(')-$413-7!*3$)*#)%&(#!##$"!"  6-.!4 !!+ $&#!#  "  
838           &(#(""%((!("!+?-5A#GA&8 )#$(""'#2315 3'&!(8;06E )?4560&!'#%'36!&@2+:0.2 !, $+%)."!##$&&'-*&+ 0$++-/;BD;&.%"#'34; A9 3=0=;F)17-&5'(2"%!/*-0.+&!!$!# )#
839$# !" )"% ! '  9:*'(&
840       )1=<"28'%&%%  #1)%( 
841   2 P 1$D&0#2 =8!'L0b[NSJR ;."#/$$.#,'1($%,)4 +",( 
842 
843    
844  
845
846   %"))-%46-/1,$'$!*)5'-7,6$-2"%.$%*#)% &+($$# "'.%"+!+#($% #%%2 *;&392=,('(!#)!(5$+!*/'$+%$#!(*"."#(#"($ + )/*(&%&1/*<B/CFF\EDPEAKI<B:+1"-+ :7"FU8>18"+!$  !!)&! ),+0517,#-'"-# 14'<A9O5/E<2I,&=#%6!(/*$3/,:&&4)&3'*%8:),2' '"0/&1/'*3-0<K;UE:G1!( ((",<3FD:<"*(%',4.'2<+9<2F-3A*K<4FM3<E-HM.B<7%.Q.6W=T=(03*/13=-8644@19;-2;-.5,'+*15/4979A3BF76E<=EA;G98A549=3>F4H:=?8=>::@><DA:D5E;1<6AXN=qJ2E:.9;,(/*!'% &!,&  
847  
848 
849    
850    
851      
852
853 
854  . 4$"+-' # '0>&C.$V.)^;-OD;/<=($+!%!/'%,7&28!!6& )%60*7E+(; %.&.*#","-0+9 /# 
855 $!((#>8-3'; ,0    
856
857
858          %'"#  &#&.21B$51%9);06(<050$#,G0/H$$$.$1#$$"$'!&&/#.*'$,,#%!2$#(*(##,(!!1)%&!"# %!#& !-' %8!362/(3 .80(DB;)8\.2I+9K/$@'(/(4%,!")(81%- "')-** +     1&.'%%&   ,4"(         %(,A4)8D8A).-,64()#   % #6"41*:U8C-A8'2# $-2:.0 B0!"#+$%$ )
859  
860  
861 
862
863
864   
865%#%",$*238@+=4 ' !)(+-%*3&%,%1-!%3!!*1 "'(&$$#""#$)$&!#"#*)*845684)! $! !##!&%)"(-))"'/%*)!*(0. 0'%##(%"#&'2222-7-6;.=B6E;;K2BE$2?(0<',>&*:'4O/9*" ,).--(+/>=,8E$)1"" #7'.%6+(9$#."+$3##1*"/%#1'-"%&'#6=,@?-($*(**8$/:*03<7B<?C)*13/!*0+742?,5; ,/&-5.07)-6.>D2HN9Vd7ao1`r8\g5<I*)-.)/<286,3*,1.(21198535.52)00$,(&)#06,8@49A3CJ;<G56B=?E9AC3;<33;4>L9JQ4FM2@C1GG;;<4--5*)I99MHG;L63.2-&'""'!/&$%%&"     
866     
867  
868      
869
870  +
871($&*,    &09&:-F/#Z5-HG=7:@))-!#')".!!1"'#+%-//6(-?% 3 +#%(%4293<#*H*#!% 
872  #"(*.5(3'84"!B# &)     
873
874
875 
876     
877      && *%$, !" "$&&(8()8*;85I6?,*=,..$'03<+9"6''!#" $ $#('%(/ . # &'(/)5+"'&  " #$ %' $!$#%#'&,,(85%-*''3$"&3*&N29#%=2A2" #5"50630+%('+#!$((' #2 
878
879 " 0+(!'!).!/'.  "!         
880   
881   .%?2$1#%+#4 Y>'&   "
882!  .." !" #-!&''"11-+'/1(0 1,1*2*  2
883'
884     
885 
886 
887 
888  ##(%!(%$(#%*-*55;M-MB &#$%)%.)&/&45(63"(& %(%#*&$#$& %/ .0;6 18%)54-;-#*++#.%)%%!##&*%(!13#(, &3",E#?`!Yb19 07#7J,5K+=P,8A-;P59S6Rw-Ye(09*$- -*")7#-B7B:@!BHHS4>*5A5-8-(2!%   #)%&%$ %* %))'EF-GF(6:2-'-*%(,&-/,*445D*TS#\]4<##.0+3038,3:(/80DF-;95GPDFVL;ZRGlFQvJWvIWn-QK*45.(-,'-'+-+*31,9=3:2(0.$'&&+&&.(4604=22=7>J8@G74A<7?;8M6<A1/982>?0GA2A81C70?73=1C+-6+=4.B;3<504 $)$" ).44!9B <>5:$! 
889
890  
891
892     
893         (8 !)"  
894  *+!,"-#;(&<1&(=5(,<&(.%#$')*45*;"'=!/%  $$$9!&9$.4&$1$+(
895 %(*: )$/".% &$!      
896                %$"%"" &!($!'5$*<21>/.<,$*$90"("&*('*'"7!!,(" '0!+'!""0!")!'"",33&# ,"34#!' "*'(#(&&"" "& #&('&,,02)*+0*# '%('!!"',(#""!7$79$1=)<?$%4'".$!'0'#!
897  $ & #''F6#*% &$! '       
898
899 
900       
901 (%'1) 
902
903
904
905
906  
907 
908 
909 +*#$% $)  -($&!'#+6(3!-;-+Y^)KL0
9102  
911
912 
913 
914
915
916 !$(?N(/ '&!B>.9<@3@0.9,(%#!'0*+02/.4--6*%("  !!(,3)%?;,FC27B-/92,-3'%$!("-2 !.+&) ''&(( ),"''("!")!)H!<?,)'$!',&711'1'-1((214E<Qj2Um(EK$2B=I!KB"DA)A9)?O*3U--<'83,49&&2#$*&.'*,-.-&*!#(!  ""%"#.2480?037)02')1"(4('2&/8,6:;0C=+B3-A(5(182.91/</&04/>:4C:<O@Us=UY>INCAYBB^L7fFaƒ7FP(:C'43(49+,03277'0(!(&")"01&+/*6=02:,099AL@;I;3B46>5084(35)30*.5(/7+/2).2(-12,1C6,]A/Y94F440%*"!$%*'-8,6C):L+7I/!"$ $% 
917    
918
919     
920   25&$0%!(     ! ,1 +$!#$*! ("'/+""'&#'#$**)+"#*,'18$;"%0$)  !!!&21K#,%     "-.&'/.
921      
922   
923      " " "%&,"','.0'29*1>-4&")&1.17L<>P'OKCBGA;ID>@<76)"#!+&*#3"1-1#1""%$;+1B # #&# $+& &$",&'!%%/*  #+-'-1&./(60(/2%+$)'!! " )&4&2.5#%6#%""!  
924
925 
926      
927
928  
929     
930  
931   
932       *8 %#$(("!$&(0+#6("4B&/0!-'$=* C9&.       
933 
934
935!/2YN&@H:821>&7I3QR0?B6,*)5*366)73''))!*()/ 1, #$--#.9,1=9:X7/C22B/6<%$2!$%+' #! %"%  #!&"%'(#")-*)#6,.##"'$%)"&'&27;>UY0NF+>7 ,0'49,P7E^8\l7:P04G.-2)70'*0%!($/0#-, )&*8#@H'\E#,#(!$ #! !!"$ ',#%1"''+-($##%"&$*%//+28(+.#(&',$&-)/'.%$!5+86)380J=GY<@R:9K?(9?(:N4JS6A/)<0)71(40.50+7-)5%#" #)*$1--5/9?,=F,<G3BI95@5,21+3+,41,,%*/(-.*(.((+$%&+#+/,3K>BsX=ŒW9Y<):/ /%(#+)$..*35.+5-(9+);6 $""*%$!"%! 
936
937
938
939
940
941
942
943
944              
945     2;&$0,&.   #'$$ ''!"&)'(-,+).#1 !!!")%,10.*.**2(0&/%( $   
946 
947
948 "',#  # $##*#,! 
949                !% "     $*#(+% +'$,)* ,%"$$-)59'/0.B;#=-$52%0$)>0/C*(B-9&5!/"++%#(,'!$&!."0=*7  (*$!'+6%A%2+ "!"%**!*$%#"%'#*((!% "'(;$,'  '
950 
951    
952  
953
954    
955 
956
957  
958 
959 
960
961 
962 
963
964 
965
966   &)**2D +=!5&)('#'" $"!1
967   
968 %"3-3E8I.MI!Zd&Zf77[D,K/ "!-&+$1(,5+&4(!#!)$*#'''$2,$:?,683+>=55>)5)35;G3#)" !! 2*-$'#"+!#&##&'*"'!!)"%8*=`^`aXA3"-,.=:?078"(*'0*3=FJU9TC'>2(3-)5%"((")"(!()1D")/# (4*:Y!C/!(2.()!#%% $$"%!%& " #(+&(&#!)$$$)0%"# #&"" !%!)/0@1EN1>U?4D7"2+#.*"-4 -A //'.'/ */%*,!),"*%!%%!& &,!,/-;19E6>H:@K9;?-97*42+08(02'),'*-$,*% ' $#!(/.7YH\‚hd“hB^G.<5!2; ?8=<'7<+38*',+ &%$.*$)!$ ("''$# #!!                          
969   39*"3-%/    
970 '*"+69%3%'%!  !&""!'! ('&&&' 7&&?'0!!3 #'(+&$
971
972       #'%"                 '  !)"'%%##&"'"&"&,)*(1%'&$*(- *)'/-#)$+"*)",2,6+8+.0*#)('B-".G*3,,-     &(" '(!*'#6'!'%!#   L6"&6&#
973!!
974
975  
976
977 
978
979
980
981 
982   
983
984   
985
986 
987        
988
989
990
991
992 
993
994   #.)
995! $-$'+4/!    
996
997   #)</+<8BJG@LWAOR6EB029<@=;+, !'$#+/0"+0'6%,5 5812"2B0BO8ER/,8.4?*"!/ '5$!//"""',*1593"% "%"&"%! %!7%B7J-cA=b'H_#Qv-[V%'@2GQ-H[D,A5%,&@R)?K=9.4"$0$+)( (-%.)+%(7#3 #)%$* !$  !"  ###"#)#)3%24$"+#54)0&66.)!.7#FGM>,/*;A3HN2/A-&5.&-**3%'.$%(&!%! ! !& %& )$&+$;5"5.(# %/!.43A3?E8@I7=E0>A,8=,69+/1%'-)).(**%$ !(%*A>F\tis‚cJYF0.+*&-'/=):F,7<+09&&(#!"( $#!% !!     
998        
999     
1000         48,"3.#0   
1001"'/ (#:8)G+13++$#!"'!*)/.302=#@$"1)(.'0 ,  )$!2#   !%#%$           
1002   
1003           -)*#).'.$&#"!  $/%#1,52    !$  ,,*6694=49"$# /%-(/;0*0#(()$ 7! &5 $ 
1004# /
1005,! &!-% +/#("  " " " !)$/02 -7,%!"%," !+-".$   C34EC2*,!*    
1006   
1007 
1008  
1009  
1010  
1011
1012     
1013   
1014
1015    
1016  
1017  
1018
1019    
1020    
1021 !!#!$#02$579 " #% $$ 
1022
1023 !!-3)5B:L>@=:5:,03+/:,7J1-2##&$-(+0'(/+369-2=26C:H\D=SDAF+34007)''% +.0/(,,%('%,*&.#(' $ %#$!# ,D&8.-'96*G/VJ2/WZ+Yt3Fd64C#&+$0$$5%/@-695%.&-%(-#, #)!$+$*#!"#!#'*'1',8.25(59(EF*>C1DN+WO,BI=]i@nx3XU3FNB@P3(,) ))$-)*1&.4"50#).0/2,'$"##+/26@.9:'0)1)#(+4)37;C;AG:9L9BP7CE-)2,).'$(%%%&$%"'(($(!"4(=I7[VSgaUH]E,?-"''%(*)*1*-6(18(.8"!$ "#  
1024  
1025
1026  
1027    
1028   
1029  
1030  
1031     
1032
1033 !::7$60'0 
1034 #' 0"7 @#629,$//((%) 
1035 !#(%-,)/ !4&-$"3&#-+/"3%  # !'",%   2&-7".!    
1036         
1037
1038  
1039 
1040
1041
1042  
1043 
1044
1045    ""&"+'#3/!#%!%((*/263.6-2.')'#!"$#"%"# "!&!%$"*-1%&-*)3*?4@2/A!520 *5+-"$D((% ,& '!'!" $, $ /' ."'*($ # !# !%#( '6"*(0# #$!,"*2,3.% & !   I)1,7B,1(!!  
1046  
1047    
1048
1049  
1050 
1051
1052
1053
1054     "  
1055    
1056 
1057  
1058
1059
1060
1061     
1062
1063
1064  &%!(     #%4;.,-cC2WO-<P+',)06-+0%5!#&&")( *.#)3'451'0232=+=K(@%27"0,%-+2B">?$EB)-+ +&' #&! " ! "#!$$# ##%2'4ID4=FD'@.$9.)?%#1%**.-7*;=(39 C@80'1 * "&++ "   #""')""-'"-13;39>36F:HU;7>><RJMdDT[NL^gPs_^`?9F@.:319$35&*.-)./'7+):''5(':)5=)4A!()" (*);658361/4)=@%5:(2>73C?:J@@HBAK@?M22.('+$((###"#" %%!*.--%B96YBIQPYRIDQD6A;'<:@A$?? ;6 <A"@O74'"$ !""! !#     
1065
1066 
1067
1068 
1069                 #!5*74"&31%/ !  ' &"< 8';,7-&8.(+-*%#'"     !# #(()*-!,!(-&0/##" +,"0&#!   "$4 (; 3!!   
1070  
1071         
1072
1073
1074  
1075 
1076
1077        "" '!%& ,$11/7%+?),;%+869?S2C)(& !((&% $%#,)#*-<>R 3P!1E/;=$5;3%)./'%  "$ '07K3J%0(*""#2 -7'1=(?)B19=;&B'(%&  
1078% ">0'!54(&,)(
1079   
1080
1081     
1082 
1083 
1084
1085
1086
1087 
1088 
1089   
1090
1091     
1092
1093
1094 
1095
1096
1097 
1098
1099
1100   
1101 
1102
1103 
1104
1105  
1106
1107 ! #  
1108   ,2-),! #/'3;*4SG&H<#A005$*/,"1"*&(0*(!"(!#"!&"%))(+63.;<-+>.&/0#*$," %"#('-7)05<N2". $"$)%"$*#)#"'3024'(#(''%182811@0)H9BHN6*0%&, 31"A8*0 +2#.5&/:15I-;D6,6""*"#&" $& *!*$ #)*/(-%   $%%2%58-;93AF@I??M;1DN6O\GVN=[[So_[vKRU4BH/BB/7<+>>'78.'.. 0++1$!+-$1-/;(+8 %0%-2.35.19.8=5;G27:-2=18?::D>9I@JUDDH06>%./#(,"*,"361.',.&--.A?=NJBZLF^E@A8438':@'?L'CT%:G#2>$8K&=P"?@"
1109
1110 
1111     
1112        
1113
1114  
1115 !!&# 5'=."'72'/$' &!(,#-,3!>(=.(30(2,(&+(#%*( - , 3 -%--$) #.%)7!+1#!7!)' #)2&!&
1116# )$!* #&)%'-.22,3 7""&##
1117
1118  
1119       
1120 
1121     
1122  
1123  
1124    
1125 &)%'! '#'(*,"'.$-$''""*&3460E5)5#(.//14*.!-'/*&1-,+", %-65(?$- %#-&.4+6())/##D&("    54'??$('$=(&/ $.%)" N5ET'*&%46&$-'"$+'&5)%2(%0$( +%(1&4! 
1126 !#"#&)0=4.A7*0+ 
1127
1128
1129      
1130   
1131
1132
1133    
1134    
1135   
1136
1137
1138
1139 
1140    
1141  
1142
1143    
1144
1145
1146
1147
1148
1149 
1150 
1151 
1152     ' "   
1153     "$(4=!-&"20/.$#24+.F*23C8-73*$%!%& )$$"0!"$$"(&**2?,=N2<N479/)*%'*"&).69!bH+1+40/@(-0&;*B4]: # *'4)" &#8<59*/%* $++&3%(3,*5'0"%/0*;(.C0;W2Zt:Hc2-3./%-</7S$7G"1:$4="6:.1:17B355$'0" # !"!!&$&##&.$12+/ " "#+2)*/(+9!1@);1 0>,>FAKH#6L&DT:WLAQ<CR=OY:PQ;TS/RR$IG %('1%$( %' .%-3 '/%*4+,71,941@82C6.<.1>7DP8KN9:BJ:QCNR;69.38)27#:4&-5)1<&8@);804;BFAEWIBQF5H9*85)=L(;A)9C&=H$=A%9@)=H$;G#   
1154
1155 
1156  
1157   
1158
1159           " %#"5)A5.4.",.'# "!*&#$(!$"' ,%&,#5 B(E0%1/'.(,/'$!+5=6&A)@,39,3#$+%")*(,6(&4$-%!% )%! ()7&)#"'+ )!,&-&&"#     
1160  
1161   
1162
1163  
1164 !   
1165  
1166 "     !&)#""  #"$ &#&'+#*&#B3!@<.4&&+6,C-(4"$. (2&56:@$)802;(5,0/1+6!03)%0&% !$!!"    '-0< -K")>7<IK0O"0(66"'EP2R/=I9P/6 =;:C9B)-(!./-41()- "  1+ ,  &%($ 6,"/&+-13+!       
1167
1168 
1169
1170       
1171
1172   
1173     
1174   
1175 
1176  
1177
1178 
1179 
1180 
1181 
1182
1183   
1184 
1185  
1186
1187
1188 
1189
1190
1191    
1192  
1193     !%)5IFgU+P_"WO%6C&?L",<-BO$).)'%(((5-&(.#+,.,/!#46'F+> *,'0%'0!%"'(%/-;;P8_v&md.vh$eWcp&Ic?B‡(0 '!#+34;.((",47%6-#+ (+1'/9%,6'-%/%&."(-" 1),-#A7KF9P86=#8<&8;4+>8,A,-9-/C,-@..B*;H05H#'/  !(#& '$#, &  (((, , %,!%.#'+(/6!-6!"3((-)((-A(;. //!->-@C?UDBKKG\NF_KQ`QVhCFX%.9!)/!$2"'#)'&1%$1&&1%'2))8/)7,/=+2<,0=?7MGCXBDN@FSPOY>EJ,8?16;05=.2>+5E,:J/=J1NG;fG;cG@U=8D?,/3)+61.9/5?,8D'5D'0B-9M'<@%   
1194
1195 
1196 
1197
1198     
1199          
1200  
1201  
1202! #((3 ?, 0<-71 #"&$&/#)+"&"+$./'+!7H&D3%/4,7(+/'$##& -@;"9+=418#)4+ ,))% %'%$,(.%$1 '-! '+   "  !  !)/":$&*+ .2+*25)""1"'/* # *$  
1203       
1204   
1205  
1206#   $)(0%+!/'$!2)"/*&+>)/@'39&5!3%13!(>6$ &#(+#$,'4*/0#3@5B?C!2E,6!'2%"%)# ""   ' (0,.$CKDe'7^/3H<eF7)"5/50+!.1$-#+$6I/5C-.B!'6% EE+5h#%@(   " 36,#!%(015.9B#1!/#72(*-".    
1207   
1208   
1209 
1210
1211    
1212     
1213
1214
1215  
1216
1217
1218    
1219 
1220 
1221
1222 
1223  
1224   
1225
1226
1227
1228
1229
1230     
1231
1232   
1233
1234  -/*JPA1PV-MG6@77H./A:35788=<9#%2*',$+9'-5*8)3#*9"!1" $ !"#&) &)(%&",#%0&-!'F%0T/E^Bb_]„J`@Fj8D=KG8b7&%&&4./")+!'+'&)'/ "#!&/*0 0,'4+5&(6!#/"%"(,83>*;?+9B/6?,)0-%).$1-%32$12+80.=5-6-%/')%! &&,$* &.",!!#'#$#  "#& ($%.-$, .%)5 %.&,&(1)0'*74,@>0DA,@T3IR?TYBYOG[.3E"&2$0 -,8)47),-!#-!%5#09%-:-8D.CK,KD26FG;RC;NC?TR?TBCH1>H.=H.:A*5;'2A09H55D<ROJbFvW:WC5DE,CF+:2*22(.5$57'/8$4A&2A%/>#  
1235          
1236       %+%)2/"#3$41&=2-2(  &3!&/ #*&#"),./"1)%2!<)40#//.3),.*")$!' #/3$8+3. .7"*<,.312()# 1#42/-+.++#*,     *)+# $!'++>9&E441F):&#-"!+",-#3!,  
1237  
1238  
1239 
1240
1241           (     !!""!'&%B5#*-,!& '9!'4!+$+&(#!#(#''&(+/"*6")4(.4'8@'4F(%=(+%4/5*B<5.7!   
1242# )-,:791>5+GA0$H,*7)7KA 422FJ.:`(13P>:W"G+.<%!$%6+55+2.!*  %"$'#K."99-3%.3!88'/*%.&%4 *,  # )&"
1243     
1244 
1245   
1246  
1247               
1248   
1249
1250 
1251  
1252
1253
1254
1255
1256
1257 
1258 
1259  
1260
1261
1262  
1263   
1264 "3'*?=086+96*7-2<1=-(-4(>43>03?$+("+)%-+,'4""- *!'3&.5!*#*$#$"#$)6 6>#GH77"%&+)+6$+M-D_=]QC^Cm€7«@„Œ2pe\$gL+KA%,/#"'$)" %' &!#('$%$("%!"%2*BL,>Q(7T&5C&'0!&*!$($*1!-&)/+&1+&5 (0)+(%)+00'+"&(&")$# !#&$)$%()#!+"($$0(*2%(.'-7.192'96;C@6GD;N@>O1,9# ('"#++ 2')0 !,".#+5)3:/9H>FQ@KW5CI5<I42@=8MC1@?3G76F38L.7C-=P#2>%4E.=K@S]\hfXnc?GR39L*<H*7<%89):@%AA",0!)5#1>#1> !    
1265  
1266          
1267"!%/"0)##$%&0.<0!*3,'4 , -(,1#&+, ''$.(8("2(?&!42#4&%,#"("* $"06+77"02'34')<.+5&,.#+-(,>(B4?8+37%.:"#=-"!    !$$ !$+#$)('229")6$,96:$'4(+%'+./!4 &#'+)    
1268
1269 
1270  
1271
1272    
1273     
1274"!#!!%$!!" !$$(+535$1#* 0$,!#4")5')5#*+:8%?""%%#1&(7&&2#,  $
1275
1276 
1277 #+-938F_8_%(;&4;6D8(!#"1 3*!(8'0&&3' %!"-.) (&7!$(%%&.>*$/K$J;)@E#GN!C;+,!)'>+,*4135+,$($)"&
1278    
1279 
1280      
1281
1282   
1283   
1284
1285
1286
1287
1288     
1289 
1290   
1291    
1292
1293
1294 
1295 
1296   
1297
1298  
1299 
1300  (-&*025(;>"EC)3<18D%27+&.0/:)&0 ->$#/"%,&)&&("-2)/)-&'*13)IH3YB26B%,:$"&+)(115D<w}~ªžv¢}‹]r¥aqMWX8<;!@<98_EfQ-, ! !"*)3/=+ES8Sa.-6&%2!(6&2#)$% /"&4%#.#)6!#.!)/$.7##/&$!$%-1&%"'!&(+*/3<:&6>$06$27 27$&3++>,)@88N>SV.OK 6B9;)""'"+'#-',".#1B0>L:NZEQ_<KP?JO6EN-?I.AL3>I64E4;C47K.@G+6A&):)29*AS5KaPJ^OUZ:KM*7F+=G,F?+D@+?=)5=%#+!)!5D5>! 
1301 
1302   
1303       
1304  
1305  +%%.4#"3/*>)53)!1.'"*#*0" 0, 0.)3 -*',/*$:";'4+C*$7-"5*'+&-!% 9=)7,%70%-6$.<,13,$3 &/,.318;$>=.,P(?+-''# !%'"    "'!&*&.'6$0!*&3"33"/8&,9)0!+8(616*7'0-*1     
1306
1307  
1308
1309
1310
1311 
1312   
1313
1314   %   $% )( -',&.  %$)/#26(7%* !"#"!* (.#2&-8,32- !,#) '    
1315 1/ <6-:4+43%0$&8 "4%00! ,"($$ *#$*+<7$%&"*^.' +*X814(/G><(4B#3/'(%'<')9+ 5!$+%+(*,% &! 
1316
1317       
1318        
1319
1320      
1321  
1322 
1323 
1324      
1325        
1326  
1327
1328 
1329   
1330   
1331   (,0;0+7:%<(3'74!4$/:"5:/5>!9<%4: -2/238' .6%0?*:!+!&*11(5D>Fm9lm-@H"653,14023/>MeqZ‡vŒŽj†u›”fpVNqˆ.Yh+4T;(KR3dC&<# #!#$ / ,;# 7L#D?*;'' *!"#$ &# (&#"(!#+%(!#-&$,(")""&!!!!%#!#&!+%#('-29$MV%2<,.:-4D-0E'=C,*8''4+29*163-;S?^MLZ1:G,)E*7D$++ '4/387&(68*=C:RJ=`HX_BBI94C59H38J08C15G43A0/=/6E,7>#54)2./E@2\O;^RCSU=AM-48)*5-3;1?I/EH/B=!..00.3!3?'    
1332  
1333           
1334   ##%1'3#,$$8$;3-+@.)*(/$6/:4J>B7/8&0/#72 *69*B,31$=&$9,!1,''' %#(< 9)1+"/9$:,-0")#!-%%($#!*+#*2),70>34-"  !#!#  
1335  $!(! $!*",()**%*/7$46%*=05)2/2 +8 (3)    
1336
1337
1338
1339
1340 
1341
1342
1343
1344
1345
1346  
1347
1348
1349
1350 
1351       % "&+ +&/4 4* )!*! *&+,"0()!--$6+&-&)(#!#"$"#%"#      
1352   A80E)/$%*! $! $(*) 
1353!4"&#*A*3(;$5 œ/ M)*#'0{6(h`)HF8",'*)/% !#     
1354 
1355
1356   
1357    
1358 
1359       
1360
1361 
1362 
1363
1364         
1365
1366 
1367
1368
1369  
1370
1371
1372
1373
1374     
1375
1376   !$*4!9%$'')""'.&)&(1- 3+*7*4;+%:%!/(#/'!0##$+$2,(6&(;<D.6AH'>C549V7NE<T(7F'2J$;K (D$Pf2[qZ`a\Zw_S{n=mXAdK*LZ&F^ 8C!/0C"I!&!#'" ! $ +)!&"(2$7:*%'0!%'%&&,$,#* +#)&0$)$&*".% &!!$0,,"%""#!!! &$'8%>6,% ))'C6.AI$QB'"&--,.9)&-C#4S#=A'>*)31->!$- )/)>C#9<#FE.9@14=B4CR5UB-=>@B5<J1/=/3>+A@(3;-08,,7.,>+7A)>=1C:Cu\?Z<_K7(--".&"!(',-/:06B5@T$FM!CI!FE$DE-   $ 
1377  
1378           !"" #$!,#6*47(+952&-C*E6 J>"C;(<<)%5) )+")(&+);%!:(5.&<##@,$9/"9+"''! '5 ..02%&0')())"!'$%('(!&&-+'0' )"'-!!    
1379   "#%%*)) "$"!#'*'!'''&"'!"!)    
1380
1381
1382
1383 
1384
1385 
1386     
1387         ##,*),32"1 %"#-%8*0328 2)"/((9/ 31&!"**.317 *6'3*#
1388
1389  -9#!<.1+%%)1(&''! #"   $!7E$99 (8#"%#$,?$of+4T5! ‡W9nfaGCJ '$ &'90').0(&        
1390
1391
1392 
1393    
1394   
1395
1396    
1397
1398
1399 
1400
1401
1402
1403
1404    
1405  
1406   
1407
1408
1409
1410
1411   
1412
1413      $"#'+.11"-6#, + #*8)*.$(*#&##$( '!*)+"3%3I2.J52F,/:>2F;-<+#1-%7),,EROLCQ@flKPgJdV8BE5?7/L</>3' %##>9N:<. ;;+)$/!3'.)4$/%0*/?$+=%'1 !)"1#&$$' ($#%("&%$(#/ (, !"! !&$+?32(*#,KY7OT>O\%:5!25)EB$33)$-1,2.+8"-6(->$+>"+*&(@4FO:GQ/@L*3A-(8='8;0@7:K1/B3VO2+50/9((/('7$*3("-1%82(7:DAT‚fZjBZC,$#'#"+$.+1:5.<2;L/;O-EW0D]4  
1414     
1415!#  
1416      ! !%&#%0)5211'1/0:+*F1!^?(YH,3J1!85,2 (("0! 7'6'%9&7(!3,%1*&(& "'%",-80!83'=;&4@$; &-$"+#* %&&&!,$$% 
1417     #&'!! -! "!,!&+ %+$&"  
1418 
1419 
1420
1421
1422     
1423      "&    #  
1424 $%'&33+3 $7(/"4")/!.!,&!)$/%&)*!"("()".+$'*!"* ',78&8 $,!$
1425
1426 "'%""9% "  $("# .?/'LX&."9_JPlfeLNE'&"  
1427   "&0!#           
1428               
1429   
1430   
1431  
1432 
1433 
1434    
1435   $# !&,/!)-&(8 )3$+*%&!&%%$9,:(,)37 ",+=:>A0? &(6--5%7.4;.:?+DG(/6"(./GA0DY@;UG4?G8B?7WHJZ5NZ.Oh5Kt)RWKA=I@Is:^|+X`*7:#)#- ,*.0'-)'$)$*"#&()"$ $($!"& % &'&$%%"!! #! "#'&! %/'A1,F)H]6isVu{E^iCtu-fU30H-D= *5#%2#&1''8**8$#0&,*.%9)?;*?@8H.?B'1-)&*'.=74D4/<6-I160-%*&&$)"'%$!%+'+7CCVƒks‘hFZ='*'4/ 520/#.-',:0:>09@/?K.<L6>N7      
1436       
1437$'""!+&'*(1,#,*)8/+?0%M3 S?,>G4#<>%6'2+$2$!5#=(:) 5+$,'&$! '#*+,"822E%)D.*:5"40'%#$ !' $+       ") " !! #% !     
1438
1439
1440
1441  
1442
1443    
1444$ '   
1445 '$( $('##2&'.&)(2&+!% "#+(#&%)&/*%,!"+*(-#'..$.%+!%+77&=' (   "0$$  <#"*2@$3-*$ '
1446! " !$%9%+ #4$\4gSC93`PIK-0'
1447   $+(.$1% 
1448     
1449     
1450
1451
1452      
1453
1454
1455
1456
1457 
1458 
1459        
1460 
1461 
1462    
1463   ! &(*6,-5213/1$0&'+%66%.)%'1$,!-%- &&(56$ES!@D-D &C%2D'#@!"1&2%%/&)%.7.IO7fl4X\RP<C#O^4goG@L51C0$27:ID.<F+?D-:F/6F45@';6=L9.C]4JaEc@Aj"`ZMI-%($"&(!'!#'*!1= 6B57*)%'$&%$!)&))%,%(""%!"&$&& &#! &! !  "#*&8$:1Y%Jw:c`EeeGm\hv30@7;K(44!(%$6%+1%$1%09%83 "+%& "#0/8-E9Pd2h\'@6)6>4DV3RU2LK1FB"2.#!"!#$$"( *-4E@Zrij”hHnD"5( ,4!-:!47!18$59(6>+6C,4E-4H-4@/   
1464   
1465 
1466     "! &###%.!$))'50*C0%?8)D>)5A:(:7**!60&+%6!4'.(/#$+& ("%""($,!$5%'3-%-4(*,$%)'".(,"0*        !"&"'!!   
1467
1468
1469
1470        
1471 
1472 
1473   &("*'  
1474    "*1/!$)"!%!!2#(/)1<46.%8 .%!/*!/( ''"#$$,7*4%#"-&%'#"+"(+' 
1475      
1476  --2%"#3./63%&)$#.W4*ƒgOj]5,2E62*$     !!
1477  
1478
1479       
1480  
1481     
1482
1483
1484
1485
1486  
1487  
1488      
1489  
1490     !!!')(+3;&'6$#)$!"%!,9#:M".<&05#&-(0 ,4(&.*-B45Q',7%,!"6& )'')2$).")#,/*)9U6`\BjK3_=!;84\$DQ$F.*5((2) 2,=Q*.<("3$!.(5@+072IH9D7(*4=*<B,;A7UGQk1=A8?.-!,%!&#5 3.4F'1?0(0(/$$ -#*!-"-",$!&'"!%!""!$## 4I"P /^(=a;DA0<,GI./2 #!-)+8#4$*7+;D&5;#'5:?$51./G.NUEfFD[4H^CTf@XlJE\DEZ/@E %&$$ !#  ##1.2P>SULmBJSI>+,)#$(#48';E&CM$8E%6@*1=*-=)08+$/$   " 
1491       
1492 " ! $ "&  
1493#,)&%#$%!$/#-, 41+>:$@=$56-186)31#+%$"93)1'7"-$,%0#.*"%"$ #&)!&('*,&+(1$ 2&+'(+).*11)
1494           &""%    
1495 
1496
1497
1498  
1499   
1500   
1501    $!&!# ($#-## #"*(/(%?#!4 ,%.#5 1+16(73.3#''#" !#
1502  "    #! %% '-+ "4$&#%,62#+ !     ,35d8DZ9=6*/*&"!#!         
1503 
1504 
1505
1506   
1507               
1508
1509
1510
1511
1512     
1513 
1514           "#$$(!"!"-((0#/,)(2-#/()80&1'.0($"#($'#*3$1)8(4,%4!3> *.&-7)>!'.%&2"+!"%+7$/L.5G,3;'&"+".4%)##")6"*.$7;58C'15'4")40*6/.>Bby(OZ!==)*8+8HGDTJJZ/<I//<$!(# ! .181& &(%2""#%)"!" ""(&#& %!%(.3+)8898-17(@87A!(2&>6#+0 -6+<4:C$',):@02A$3/398HAIQ9E;5CBA`PVqNNWAAJ75:'+,))"1.%!%$"90:ZJEoIF=):)#,$))!6:&@H,@R*:F%:G'9?%-4"(.!++"
1515     
1516  " $"  $!#&"  
1517  $&$%'%("(((&-,43!18*3;*/8)+/+'.)$)*#$"!& ,2!,(+!$;!5,!/%"/$'!%!%  "$#+)(!'&",!$,"/+(0-#/.)%"         
1518   "
1519   
1520
1521 
1522  
1523 
1524 
1525     "!#!$ +$2( $+)1/@32)$.#)"-%)"+5#/(),,>3G/5/&).,2,2)7'6"5&0$#7"+&&!##(!"
1526     "
1527",%)? !('./.I*C! 
1528  &)   ) & !  
1529"!(((9J;2@>(#' 
1530
1531   
1532
1533       
1534   
1535  
1536  
1537
1538
1539    
1540
1541
1542 
1543         &!"#",%%2&@= -7*/.'2'9;'&/%05*415(4"$-"+ '$)(3<,,@&$1&'-'*#."$-)0;( 0#':""%*#0).$*5!$-1>B&)813 -% +)"0D'@W(A>5J*/?&7P34SI,EH+C6 1$/498"("!"")!"##$#)%!& ("'!#$! !#  )# *11 55)@E(52.*'*)&3#2>=BM3m_"@<?6'.;9;I,C>+2=<MK.BB+>>48D4;I0;A7=KKOmRN`<CP=FV/SV'<<&46#;790'I9>hQGxQ2N. ' "%8;$JR)CP+=E#9@,47.1;%4<"3:2=&      
1544 %"!   !##'%%+#(&#   # # " #&%$# !%$(*..%(6+.'1*+%,( ,,!0322 +3-3-'&$ %)%"#&$ %"$(,*(!)+)!!$&$+ # $   
1545   
1546  
1547       
1548
1549    
1550       
1551  
1552
1553   "$*&!%%3 $+!/&"$'(%6.$-2&/$')& +++&5(*"(4#+/&':!6B+45+45%&!.+(3-$"*%!"!'%  #  
1554! (/'073$G(.%!!,&$$""'/  - '#        # -+(/1%,8$  %   
1555     
1556   
1557
1558      
1559   
1560  
1561
1562    
1563
1564
1565
1566
1567   $    
15683 $       '  
1569
1570",*;)8)06,/(&05(/)#9&0;+!1-'5'&.*+)006!'901)&!& 67 84'*). %'-&"1,"!#"# !!"5&,&'#'!%%%/(6B%?F *!(#(,)1(1'$()"6!,$'!', 4%#"##&)#(4:31('/,-$+0287?06!5=a_CB-1'$ #&"$!"#/7&??0/;0(92)-&&" /1%*,7:L86KE6O?9=-36#%8:3N<PW26ADS`AQR@FL3?F9<@0165.<G4EPE\FHdEceADQ80?,*5+.6+?C3dKK[X{\>U9"-"*-$CH*:O.2@,4=&4;'/2*%-($6&06%$,+       
1571 !&  
1572  " '&"+,%$$  
1573/
1574#" !)" $"!!!%%&(0"'-(*+&).$-$%-$+-%,+$!-"#%&!#$ $(!%'!"#( %!#% #("(%%!!      
1575 
1576    
1577         
1578    
1579     
1580
1581 
1582       "%"& %(/"*,+&."(',) *"0*&5!%,!"% *3,<.731)%"! # ("-2+2;F.3?!*=25),>*7'1'4 )6&$ # -$ (& 952/903I+#3,'0 !-&=):;.*+@KC $D -<8L@ 
1583       &(''0/!." "   
1584
1585   
1586        
1587 
1588
1589 
1590
1591    
1592    
1593  
1594 
1595
1596 A*M:
1597:( @! @@ iasyQlo^PT  &#""  
1598 
1599   !4--1?- +(A=)=B&86%$,0*<'5C(-4%-:%,2'6/$(%'-$!# 1C+7G'4<#PM<?QJ#@D &%+4&/+4%-4!5G 680/##&$8<4H);7/8&"')+ $&%)(#"$&"!#$'#))2;$/ *#BV*Mg%lr!IX&N^5K ,,-'+7*LW3L_><^#>G)7%+ %$%!!!"!!",)--!$,2(91#,/32.B223#A;*EB/>F<C@A595B;/-.)&(5")G)?;'3A0GR6OGES;UW4BH09;-86446A4=?=LO9RI9H9-.-&/+,21<;DiTZ‘f_kUDaG'JB!AD%@O-9E)/9"%-$#'" "! !              !#%'! &#!(   - ($%'$!,$52!46"12"*6!-# !%*&',%8:&:#2!0 !!"" $!$!*%               
1600
1601    
1602
1603   
1604H +A ' )" *    3 &1 %      !"& ( ""'*&*%74(1-#)$&)*3,5<#3@/3 ,$"%#%1"/1!,7 #'#!####3 ./($:/,-')/$,4" /!)$,$5 !./1,-$      "-.%#33%'"-)'-%'93>+$"4)/**4+%$# *!&/  $: $    "" (!1"%3($')$#"  
1605   
1606 
1607 
1608     
1609     
1610  
1611
1612
1613 
1614        
1615
1616   
1617 
1618--%5=n(:e. (<9M\Hw^Op3Gp?^•/,
1619
1620
1621 
1622
1623
1624 
1625   %#'0*-5)+"1<86G29H*"*$!+/&74(($2'#0# *#3 ''*&1,14)538P52C-,;91E$&'$#&&#)$)'!,!#.,6M%>OKP23/)+',<)*E %#+25.0(343!#69,4)!0'% '$7=.0 IL71CC6^B8T;2X+(8%)5(1'+;V8?[C7M2;K&!-1>#%+%())1*(;10)60&-(!2A &#$ #'=5)=1(CA2IO,;@/KP7SV9KU8NV+D83>K2LH%BC%00,#7".5%0B1BMGSMYqHah7>F4:C.49+/54%2=4ADEM,X_%MA&)/196I[Nd|aamRDaA4FJ)?Q'9K&/;#(0!
1626         
1627    
1628 !#")
1629   ) #",!* (( !".$.9.5%.6))6',1"++ */1)2%;'G$-*1+3&6&/''.' & %#(&
1630    
1631
1632   
1633
1634
1635  
1636     * :' ,    " =9.5?(/:C8D<<6(1)1 ( %
1637 
1638"  *',-+40&%!+$$#"#'!!,",.!#& >&%35'>B$2D 9"$+% -30!%!&'&*-$!!-).!,"%$1#%+(- /  !    
1639   (O'JD9\:8+B4!#$  &%2WA*G203/3%".!01,;='"  ' #' 1"3$     
1640     
1641         
1642     
1643
1644 
1645     
1646
1647
1648
1649 
1650
1651 J /82R'?&K%V#Xn
1652
1653    
1654
1655
1656  
1657
1658  
1659
1660  +268 +2+'7&(7,9)52,9(12,""")+ &-$ # #('/!(4*%4."+74;.$/)"/(2B1@5>#&;$&$%+$"10:?3L\6=Y>J%>T(2>$0#,)A&=)8 ,7$ /H'1G/2,.:/$*-3-5$1C%A\9Oa&4?56A.;D,=;23+44#>E7DS8^u-X[(<B'-" )$&)5#+!"#*'=F(5F#\e$7;$00PAB? $&%(22:SJ-XU7lg3ZIAIR9Z[DYdUerG;TJIS;A^2JJ>oj;IM/*.!%" #%/#.>(:S*MgLf@,96+22*5-%+(!$+$*;+<E1XHAZ-/3.47HfWXY^dNJVG/]S-G@*-0&&$ 
1661     $      
1662       "%"    ! + !&( ,!$ (00*$"!((!(+)+.))/&'0%"-$)(#7%<2"@=!94 2/%)&.' !&   $!!!$# $ . 
1663  
1664            
1665   $"$-+  +$ 12<:#RX17X-HG/Yd0<j@+V.3$1.!' $ 
1666&,/;1@8"*()##'!52;=7D8-,"(A> =]#/P-&3'"##$&./-*:/! !')!((&,##)%.*$.-.!+       #&&#    -& (3* !% 2&92*@) ), *#+! &10(800)-:C0N!,/@4CA#0%/5@'4F-; "-,"4      
1667              
1668
1669    
1670       
1671
1672 
1673       &"0    
1674
1675
1676  
1677 
1678 
1679     ! '.#',/9'$,'%&%#-3-*+'',(1>":F!3;$*3'+"+"!*#3#35(?L3XW:B<A.48)55(&#(#*%2A4I\9)60$4/"21(:#3>""()!"##1.6"*$.%1'9L"DM!+6,.)-(/="IJ;Kd/[g&LQ*Nf)G\)|†OP1A)Cb5A`<?XG\ƒ2P\%2=,7.*"&/2++'/(/<+,7.9G56I+FQ0Wq2f~(QZ @.$402/DK4Pb@[`TkIaeY\kPL^aUlNPUC9QNCJLPfOJ[L3H3"%# !#+(&.5)5N-><:7)3,'%(&$)%)&)--0/7.,>+/9'..A<Kx_\†^OZ?FcF:VB/:?*')%*+ 
1680   
1681  
1682   
1683 
1684 
1685   ") "#   - 0&$. )(1'4#1,/0+1%% $"## %*%'%"* '!#&(!()+1#5-*4/+-,4+%'.!  ! !  %&'$!#" %!"    
1686
1687   "   
1688
1689
1690    $% 
1691.%!9-'@C2/PI6D<CHI&kT 5V$2*"$!!3#J1*P04$1-/!8%+,(#
1692/&@8"'B*0((#-2!, -7'3!)$%&-( ,#'(-%2$*  ""$#!'%,+-300 !1"'!$$) !" &!$# ##
1693
1694
1695  ()!1!.7
1696''  0-H@RSFW(HK,.K2C$(M3;H#/839%A*&.$ %$    $&%         
1697       
1698
1699 
1700       
1701
1702
1703  
1704 $# 
1705
1706 
1707   *#3:4-' 6#    
1708    
1709 
1710   &%+##!-2(,;2:KG>I&<A$.@#(8/'73EE./>%,1"/.!')# !)).7@+>L7C]:5O0EX+M\(Yp)29?XO73!)074F]8@N *3 $) ,1$4;%...#36$$(2/+/)4>2WS,;I!\f#Q_!3<'4X6*B91I7Rj.I]9`u:qŒB@f&2@0:F2OX0D\<_|Hh1K[ 7; @9!WM"]FG;IA"6:$'/%'1-.:-B@5=LAWm?[s$X[TI9*D7,QF&"'(&:*2J:Aa@Cc?]TTgVRTSPaUzx8DPC<UNJOT5F<#*'!"*$-5"%//0:50:/6E 0,"// 0,0+,--(/-+54*651EC^ˆplªnHXDBT=:?02$*#$#!%#)0 &1        
1711
1712  # $#$)% #""   " ) &%-!/,-(!/*)2$2",')"(#"!"#!& #%("!#"#"$&!)&!*'$2$%6#!@$$:(/!$
1713' (,0!0'  )       
1714   
1715 
1716 
1717
1718 
1719  %#'  , L>5e&,F1%*A36),B6+8J<0"#4=5I=Q*;E@=@&-H#7; ;5#)5 $
1720   "
1721'' !/'+!4 "3*,D%=/#""(0!).(,'!)(&)$!! $) $+-!$"(#$, .("*%&+%#(+50""%      0 #  %     "@Y.8Q/4W7-J7"1+ %'<&(/:) 5%)#(#).,/(*?#
1722' 
1723          
1724  
1725  
1726  
1727      
1728     
1729
1730
1731    
1732
1733   
1734  ) & #   *:(4'#,",' 
1735 
1736   
1737      
1738 #% *+]B@C 4C'6M.4KD5G5/H3VT/@9"6<+0>>,0 2''+#)"# )&+.24)B>7@25;<<N=AU63I>O,E[21]!3B(9-1F2EO,!5'7H&BK )'-717'% )#32"CNBL#4<3Gh65F16G>+P4.B $)4 %"$/#6;6M7/PC;eHLd/Ic)1G%1I1#>8$CO)MG1G/<K)ML9v>lu<qt1ZZ$>;!/007(>I,Mc0R\6QnCTv=So3c2g`*CA78A/),*("1B6RY:QUOZP]QaYLjIhsf^wK][=;MB;]@JS*M83*3,($#% $."'7&/6,2<60?-8<%2<$75)44%>3(2,'00)376IDgmwlJM:>U;50#$ "%$#!" ""!   
1739    
1740       "    '# )(%&'%%(#)/",%*(%/&"".(""! % $&-"1#,2%-)!-%+# 
1741 " %.5!6#!'        
1742           
1743 
1744" * 1 $"4K39++" +(/">.#..;4439(11*1G/G8+F50C=-I-B..1$$# !! ! #6!+12)8*#&#>*+(',7!*735/H;6^R!Z[HH>D1A4738)(/>P>DY"<.07924+=.3 1))3!-%%               (+ :
17458 ! 6. !A-(/,&/-2%13AI.B)06 5E4+ *3)%'/2!- *.&+ " &&*.%     
1746  
1747 
1748   
1749
1750
1751   
1752
1753  
1754
1755
1756
1757
1758        
1759      *!!      
1760   ##%*,.'*>?-5('B?"<-/G*@G0LE9EJ52=41BGMa,BO-22+D; (#*"13"+-*"$.1!'* ',%6->M-3@0FM/F[*6?1)?67:,AT)0?!;F/1F/+/*16=.*:*7C"/.&)%$5#5D&0!)>G(MV3HO-JW.*945:(EE1D>*"2 )-%1$+$'"3)'802C07@3)<-?I#37(*-,4*-6,7I4AE1;APY}T‚Š\l–HaƒA<M)HL&_k&NW7AUE6I;8M?:TEMfH]zWh~CTT<RV.44)8?);@HMTLPYLMYG?UU:NYE`gHni\q=YL=4>H-RH^r+^U'UO @BIEA7915=#5?%9B+=@/?A':8,29.31);3(41*0-+:59WLd”sw™jJR?4[8+%%*33"$
1761
1762              ' &!!    $"&%$+/!)"#)'*#(0)6!!2 #! !(" &) 9' ;&8*7% B& :'(*'.   $)#"!   
1763     
1764     &$
1765  ( -*,!3 0%'! #(75$+%+*%775Q+&C0/$$),0#0'(7%14$(% 3(-&-- $%$!'0()   #C3@V+Q)6:8J08N*\G-FVCGG7.?014.1)'()*6 )5'-#*:=,.0*4-6!;4.+6',0#)7$.) "!$     
1766
1767
1768
1769
1770 
1771
1772
1773    
1774
1775   /9KA?$L./'3&4F&9(,?#40# & 3#)%#@#:*5?4I$*$&+"%.+!"!%* "%      
1776
1777 
1778 
1779   
1780 
1781    
1782   
1783  
1784 
1785   
1786
1787 
1788
1789      %$     $#&   &$##&$02EO)PXCB%EA!12&676Ie9G\4:K*<I8>J7LW.W_(Oa(;@34(2!&5 GI',)(+0,3%-7))&+&8@1DS(W]2Vj-=W(AI!C<#2F(/>%4J,Ee+LU GLJM#fi$vo(?8;:"G`QR"'2(,@.)06 /A1Vs5Ui3D`/,=!-43bs4c"#)/5 49+#EJ"NB&)(%40#/$086:Y(*1!%,'3$,A-/;*24A=YMMzU8]L<PB7M2[k9Qp?fˆ8n€3gq3WV2Xa2R^Lm„S`rLdm<[h9DM6BQ2BGJV_TX`JDM:LT6CP83=S#9`.Q_D[<4C1"1P2FYThPxƒ=OT25H8;M)EK&DH+:B,9D/<E08G.<C,48))-()(-02&;:2<BFtZe™zt›lQyL>S:(   %  
1790    
1791  
1792   #!""    
1793 
1794
1795$+#&' (&''"*//$*:#%/'*/!15)7+*/"/#)) :&A*"A1#4/,5(#)& ! 
1796  ! !!        
1797   
1798  " &!#'" (&6+&( + (#-"  *1"5)(+,(,-(2#+77/5! $%*"($",3#//0+6//@! =28)3"#!! :%$5"9.$!) '$&*2++7C@:5!64%'#"!+#!11*'?/4$4/ /9"3;'(8"0&' &,'2"%+07.''!        
1799   
1800     
1801-( #&&!E1+./()")4.*!*$!(+1$"-2,&0)3,#%5  
1802  , %1!)*
1803 
1804
1805  
1806  
1807
1808
1809
1810
1811 
1812    
1813
1814   
1815
1816   
1817
1818
1819  
1820      
1821 
1822
1823   
1824
1825       "!#$+"%&!1,5'8B6Om6Xs+Sd.:F$GV/[o?Vo;IT-:J2Q_4D^>7\@5M95B%-?35"24%2A.RV>XEG-4*."#)/ 9<.]q6c†7x…4K\&<O0Zm,KW'5H\_.UT6Ui6Pu1Lb6FsE`ŠHK{-//Yy6,V/4C&%3QN"LUCJ/fv<[m;Zo-2: 3?3G\LHg47B23*6A-+!$(9<r™-bl-+#&(>K4Q]66?&(1"%-% 1-.7'/;-.>4+><&5,,7*3A5J_B.OIZpMjŠKfŽGgˆ?Uy>a}Iq‹OVjI^|Ni€>Sb@OX@GZN\fVT`OJW:J]4PX,DD',(2!.L2FA-2#&.6BGQJYlQ}\dz6P\4;D;EM4MU-QM,89:6A8?@76>/6<'**"-*)0*/133:;Ltnz¦}’pY†X;1(""+(&$   
1826      
1827
1828  
1829      
1830 % %)'#&,*%%!-!0 ("&'))2"%,$('.!5!.# ."-$)$$+&+2!!$'! $'#'( *"  
1831
1832         
1833     !$ !$%  " !""$ ,* 7'+/>,7"2&#'$ !#%'%*''"0.$ + 5%+<#1 53B)%#&'1#)*(<!2$##&%(%/(*8$1 6.%-3(2/.313,;-7"-- )0!6 $))/%(+!%(#"$$$'/"*!  
1834   
1835
1836   
1837  
1838
1839
1840
1841
1842
1843
1844=&$0"#+&   %*1& &( 4'/! ;'"   
1845
1846         
1847
1848   
1849
1850
1851 
1852
1853
1854
1855  
1856
1857   
1858 
1859
1860      
1861 
1862       
1863 $9        " %&!!!#&## )$)'*-&0% *'$KK/BRC6IG3O74J/3G<BXHTrKY|5TT1M^AVj8Pn02?.+7*&-$;F#:U#CX)Fg/{u*p`,c_9H59<81J4ToLCZR:[IJd-9R4V`H_y8JZ,Y`=`t@JwBMh?.O78N;1FIAb0 %1[9O^ !',+$zeC`w/9P<^}Nf~@H`5AQ$RY-Mb=/B74>(+8'.E*6L)>*664KW>b2ER 0<$(8<Mj:3D-2?'48!!-%".*"+.'5*,9&*5%*4)'12,D1(473ITBhN<\PHhG<WF8LQ>`RLoHP`UOeVXbFim@K[RRhYUfIN]@PaIUm?V[2UQ#GA,AG0AD !*37CC@I]GWkFhQe|6_W<ORJS[GPZ5EO8ST:JP7@>)91)3/#2,#*.)*+.?7TdYqtq[Y]D6 1.+)-$
1864 
1865 
1866  !!$  !""' "
1867& "! $$15#'!+ $"!#*(-#/!,'-'8<%6'7#-"%"1">%0,%!#!")%  
1868               !$/ +
1869' " *'*!%)4'/5->(@-,0&,$   #','$--#,..%+:.8&7!+%(& +:7&#+'- +3,,"*'4 '2!('"./10"&; 3&!+"8-:,+*>$)" #( &(!     
1870 
1871 
1872 
1873
1874        
1875  
1876   !     
1877
1878 
1879  
1880     
1881    
1882
1883
1884  
1885 
1886   
1887 
1888 
1889
1890
1891     
1892 
1893
1894  
1895 
1896 
1897 
1898        
1899&/'1OLJFE  
1900     " "&$ &/",%1"$3#)5"%+$*1+B>#6N5=Q0:J)/F*"1&!1-&76%<E3ID9d6qAViCUZ6N^*SV dQ#o_*NU)OY/RO8wŠ_‘·Ln“>Ro&LM(R]$;;+*7<>P.KR7AL8IO5_hJOq=4W<U‚Fd}FCV:LZ8Lb)cc)lk-?K' $'0>J!B*2."(XhZM|93B3,@P1MM0I86I59P<2G3#/%('&"$("$( *9 ,5*!24/A+%8"!/4(7:#:+"2*$7!( &%$*'%3'!*$*2*(3&+8+-9+/94-4=(;8%:<9P0HU20@@OqMhzOz„Z€PbrLQdD9KKGYGYrH^oLGaQHhYQ^>FV:CS4XT)>5'87>5<>ESLJX_MdOVkHbkK\fEBG@4AENWFBJ;@>3O>*G@)E5">2!0,.G@EyZigT]L@BI4$-'#:=94.+)*,-/3682.        " & 
1901 !*#,(&- $+(!   
1902* %!!$*"'"&$&$!%!##&&*#/-!&4$B!G+L/'R*=-0#!*#"   $     
1903      
1904
1905 &#  *,,7%% '#% !3 +$%%+&09,;,C#(8&+:.(1('85.B3)7!" #! ' $ # ('*&,%-/)"38%7=,=%$3!!' % "% $!++%>$+<.&H".$&4+&4#2'$+#"#&"!**"0/))+*/%
1906$!!" !*  #
1907!)'   
1908  
1909
1910      %
1911     
1912
1913 ! 
1914  !%   !
1915  
1916
1917 
1918
1919 
1920
1921       
1922  
1923
1924  
1925 
1926    
1927         
1928 
1929
1930
1931
1932 
1933
1934  
1935
1936  
1937    
1938/)(8!'7    ""  $!'*'( !# %'%$$#%.7'+/@%-G-!4*%6)"6*"/$+''&".,+:8G[io¤Bi|2eƒ9NqA}Xœ¹G]r7k…>±¸A‹¢piŽwIkbAR?T`7ak6O^"PR)F`/S_-[’6aw9HtN4R8&5;5D\JhMVs4]‰@s’4]vONyIP`*'+*('-8"(,#5IL?P8HQ+LU,IL15=*2?06>13='*2() %(%,''!)%*7!-A.8)!$ !'! ( %/$!$'+..8'6@ ))'/=2@S-GP3H`XW~acŠdYs\XƒM^j:3=B@SFKiO^lOZlQV\SF^IHSBGWJdl5lk,mm0\_8PQ@UbLANQ;KK>NT;XH:G36;B?ID<A>JI>XO7==3D>0D?(436BCT|dTdDB4/76265<D&?M$<D#C@:5(+#. &33@:93540 
1939  
1940  !  
1941  !&"'('2&$50')($     $%"*, .)(3.+$# '&# ',$ #<?)Z$$e2#k@"JC*(2$!4$%
1942
1943
1944 
1945            
1946    #""#! !&$)$ !## 0**-'3#)!%% '!#)&,/*00(7;#A&(7&3, E=#FZ3*J*,?60-!# )!+"*+*1&-#9!2 +,'6*8!*A*%5%&2",:#.&'&$+.$;+4!""!-!%%!.&#+#)")%!--'4%)3#"* $"#!#%!  #"+1  !    
1947       
1948      !   #    
1949 
1950
1951  
1952           
1953
1954  
1955 
1956    
1957 
1958
1959
1960
1961
1962 
1963 
1964  
1965 
1966
1967
1968
1969
1970
1971 
1972    
1973   2H5( 
1974 
1975
1976 &/-.K%3"(#  "!"$  '2#*3 (,, '("$)/ 6C*9%)%1-.1*-418,:LMIdl?zCIzCk‰D“ˆ€¶Žm›Koj¤Ü˜[|_f{WGd>8Q>e~Ct€Ihv;8T3[_@Yv0Ur=UlMdd@=;)2="[s1[xC]6a‚ETpV8WO=C<6:6S=$"/4,17E[<UdG^vF]w:Sg/DO/IS/B[,=M3L(8.96B'.#.#,!)/0, *$#,"/"(")4#=C21B%!'$!4F4Yc6Ze;7JI1J[0KX4MG6IJIs8JW0Q\B7KPEeSN`TPdC2EGC`=@OD>\WcvOhyOt€FgnB`a:DF74975999?@2=4>C9BE7>@<?<J8;<344/2535->76TIaŠiPxM,7*"&.&:G'>O*>F$08(/? 4532(*'.9(:B!>G%;I(
1977  
1978 !##&(%
1979!$ !*! 0)$ (()$-#$ %!!) ..( *)%&+4D$W"f2 dE+>B703#"5*" 
1980
1981
1982   $!!%!)%#    
1983 
1984
1985       
1986      
1987   ##(+3.8127'2$00&+)#."*/..(%&*/#"=/%/*(6"#5')<;/J%&$-..+%%-!(;#3./0:33:#8 / .&&#$& .+$7"/&%'(-$)!'9"'*-+#1*%!,")006)6*+$$%#%4'5, % " +))%%%  "'. #) 
1988           
1989 
1990 
1991
1992 !
1993
1994   
1995
1996
1997     
1998  
1999
2000 
2001  
2002       
2003     
2004  
2005
2006      
2007    
2008&6.H >i   5
2009 3'4G26')K,C      %&#%& 52# * ""44"0B'CN!IK88!<=&Ik _m"ux&OO3.?5-22J]GwoZ£kUxk ŸQtŒhWk”i|N^„O;T:2@<WkZsYYmJgy5gjN˜3Q[Bq}WŽ›8py&Je%=kE8ZQ7IECPM(B851/4=/QZ*UP#--/=-F[>CZSAW]IeSJ^?AY8H_;?Q9>O*7A$)+-0>"'9$/9 *1&3*1 * &     %/ )015$16)0D--:$+!,B?s•Kƒ’Biq78C1,56',,&524JKWu@p‰;@H75BH8LKAV;BF6:N=IT61ALHfVs€`d}V]pBRj7[e1ZZ-?@-08/59.<>6=G7GI;]X:I@-/,+*(-,/124;ML_ŽkQ}T*2'"+/*9;*.:*.4#-5#/9#=E!>D"=C'5D%.9)3A-   
2010   & #  !"! & !$%'#$   
2011 %"#)*$= 6)E#%Q$`1e9+3@9$,+1(" 
2012
2013 + 0(*6!3&)#'!    
2014
2015        
2016  
2017
2018
2019  
2020    ! $(!2)13!.9(&1()5!0!#*# 0.2A-3:%*  +)",4#(:$"0*(&O5SM!5O28909?G;:N+>0+* (#!*!"    !'3'!## 2/ NH W*(*$$3 )"0"+!")&%(")!." 
2021 & !!%"6 & +%0 
2022  
2023
2024     
2025  
2026   
2027
2028
2029  
2030 
2031 
2032 
2033  
2034  
2035    
2036 
2037 
2038 
2039 
2040      
2041   
2042      
2043
2044 
2045   
2046 *iF==73'G)%"38(#&2A'20$1#,#  
2047   $&#../5"/)1#9?<?$)-9%7/96,F2Pg+J\->VCAULdyXJ\8^c%{€!œ|6k}a‹ UiyHPyˆd„[iFaŒRKjK‚‘1ƒƒ1vk[‡¥^]sK]sP]tg[fJP4[`Y[eTba4Tl(<N(GS/?<2MK8@:!<D!.636F9B?),$"!"3@(:N;5Q3GL6AQG3J:5F=>M><N2,;28Q"4B&0<.,:'/?'($,%%1!(!!)*#''+5"7E&?Q*EI'1;%<F#DN5;:>E2OfT†]Z~>?Y*;@#::-1&;FBNuV_xOH[1IM/ET:5?=3E19O;G]23C1.KNmŒ]q„Xq‡Pq„N‚›N_z6CK/672B@3jc3KL;P[MeeLQK-0("+#'%#+&%=<<`r]RbM/1'!,( ,/)39)19!,0"2<#/;,5?-2B(9>*/; 0:'08&    
2048
2049 
2050#      #%!""$#!  ?#G+e(&`1b2^<)2A36!(=+.%%+1!
2051177435&9+*81+A& ;(#' &#,!  
2052
2053
2054  
2055
2056
2057
2058
2059  
2060
2061           $##"&)%"&&,!.3('7$. 0 #,+:!)%'%5)*.(614-#;!2'#/"1+ 00/1>?I0QD373AE5Q#5H&.I7.B.8!  $!      $*2(! !.1EB.#FK' # * !")(  
2062!   "'&!"! 
2063 
2064
2065 
2066  
2067
2068      
2069   
2070
2071 
2072
2073 
2074
2075
2076 
2077         
2078         
2079
2080
2081       
2082
2083
2084
2085   
2086   
2087    
2088  
2089 
2090
2091
2092
2093 
2094 F=$J[WEl>=a'ci!L_ 1)'&'$+<*""  "!.' ("&'*#"   +* (5-3+8 FO.=],8M(:#) *-<IIToC-I1*<;8PW_y?d”Yp®iޏuZ€Y`pv_|BJRRSkfZ}@œ’@ƒŸT6pg4ZgFrph‰a_~?Wv:RdJatIsm5rf9JUG_t:8k.&7,VG,GX9<Y<GU+Bb.Na$6K.LZ,<; ( 3&(:.3@'?F1FX5;J3<H8FR0=J.6D*6:23@-3>&#4+ 5%" "'(!&-3!/8#& %/+'A7;O?DU9AK19K50N0E^&[d0OWC>MY7M<'?58O-S\'?E+*=:/LQBjL`s9Um<\q6LW+0@-3@?7M14C(>M@Us]Ž¢W©TŽŸ[z˜Zk‚Fnw.xr8szIŽLo{@stX€f]\.=>'3*(" .#-B<MkRO\B--')*(6"+7%0=&>B4=!3B$69),:02=.0:*1:!.7#/5' 
2095       #     ! !*%!&'%" "(BX%i0`<#a8*L@*D66A((=/).%#8;B<N-CM3;W+<P..D(*;"*7.'32"+##,$+,$ +#      
2096 
2097
2098      
2099
2100   
2101  '""!!#&+!+5+ 6#9')--3!*6#(7"%6+0&&%#'*6.(74)2-6">:,30+%,E7-:038/5;)+B&!/.) * " $     /%')254M1BW>2$$+     
2102   "   !("  
2103
2104          
2105 
2106     
2107 
2108  #           
2109
2110 
2111 
2112
2113
2114      
2115 
2116 
2117  
2118
2119        
2120
2121  ; SU<ROMT\\QHT_'-O -#!  ! !!$#'"$%&,516++/1.. &12/7 .=#>]?FZ;-G,%! !.2QSA)2#=9%1=1CNAE]Lnxr››~«©Fj‰WY‚P^m8D]BEZX€‹{7mS%367GLUtTlmWO[<^b0Rp-i†EqW‰žGoƒ5WkQU€&Vc)q€;^d>PO=RP4BW@M^-5E+1K96 $(-",9),36/C3'85-C>)D93'.22G+%21(:%,4$!&#$"",2'29#5:""&1(:J6JA?S=NV8KQ67LBNe9P_4@R/6D%+3+,7:@X38F(*)!/9$:G8VCNiJQrCUo)BP'IX5Tb(ER+Tf=sˆY­g‘»m޶`Ž·UЦV–¹UªÀS‘¦bŒ¥a‘©SŠ”\`{[DT:44$/,".."A10VCJzWAU<$,-&* *4'*"0:,GH)06'/3-6C);;&08(0.%%,"&1')4#
2122
2123
2124
2125  "     '+$!$ 
2126 
2127
2128 "
2129+CY'e0"h80N8,E/*N)1E3!A:&-20'!&;:J2J=6K;7KD<G;.J8:>0:@*/A-83$352837C8'M",&##   
2130 
2131  
2132 
2133      +#)7)-####,("*<""28G?%N&$,!!+ %*#+4#<**%#!*#';%,)",*!#$*'0*'6% 3#!.#*&(#!+)5*!1 "    $#8"9>2H15$<*5% %60% .:$ &
2134     
2135          
2136   
2137  
2138  
2139      
2140 
2141
2142 
2143      
2144  
2145
2146     
2147
2148     
2149 
2150
2151  
2152
2153 
2154   
2155  
2156     
2157
2158     
2159  
2160       >LhŠR{ŒVew0gk^?
2161WA P>rnDHiKgM'"!%%"!# (' 2)%8 '0%(##(;&*<!"3#&0;1>='B$ !  )3);=6BT>F&7A$NN.DH8¥œnyž‰v–~e“<@^D-H>%4/2>B3Us(3%,,5#0HYmFVm=Nr=Mx;JaLt’lf‰ma…I6_4C]5~Gx`SeDTvKYˆ8lc2\z7Ff(9P$")4)4!-!%&)&$&1#)#/%&   %)"($ ",)"3'(9 29'*!&05,8B*@B/JD-E;0C>-CI5SCAY'8D%9= -62$96-> "% '('580IED^CUx>`s;Wu8Nh:^}7iƒR…£Y}˜h`m\“hr¤^m£ch s¸t‰³h{¢k¹g“¬ZZfHVZ4FF*KB)?=+PA;_NPƒ\?\@!(-*,.3:;%;>5OQ0:=&&%,(,-*9)0='/5!$',$.3'        !     #,)$$$ !!!      
2162  -M\+b5$j5*F=*8.):+(F2%<85526.')?,0J$&N;#2; 46,273:1?<,7R);E0?H&6H26L.)?+&<$(@,%6,1!('      
2163
2164  
2165   
2166   
2167 $! ",0&$ $%$%"%"$.('/"20'BBA"<U?(B+'60"#,!$"&*"'"!%(#21 ,!%$%2%<6%   
2168%5:0=@!+" !(!&- !0  )
2169$#$       
2170  
2171      
2172 
2173
2174 
2175
2176 
2177
2178  
2179      
2180     
2181      
2182     
2183
2184
2185
2186   
2187       
2188  
2189 
2190    
2191
2192  
2193 
2194
2195  
2196
2197 A4 O,
2198G$f!n@QPjJ;ZAPTD+3>~€fZ„G„–_ŽŸ\‰€gr*?*&" !##) !"  + $ &('$2!/#6E-BT$#*#*"+7:;BPS4N[2H[0O[.[^5}cEO}“claƒs[lTXl337&2F;J+):,"#(; $)8@AVeD4NK:H>ESDAXa>WaJzI7F(E\JSoeSch9ZDXdQOZL*P@':?%:5%3",(!$.&#!  ")1 ! #$'&6#,81:'&/'*0.*564C+8@/EF2CI?DP3IS/6@%*3(*2*'3%16+-16:A&3?.=Q<JdLXzFUt=<R<BeM\{\p’ax“Rx’PD[PHnTVnOHkW]gxŸ^n˜i‘¶p£ÄY•£Hƒ’@ƒ‡:‰s3VN6THKxZ]~^@iH&825<&@?)/=.UO0:=-6A(4. (! ((2,&.$$*2&;8)    #"&#   !!(!'*#.$"0'$!!    
2199
2200    *!1 '0$:=^&k3#\6(=8)2&"8#"C+ >52/21)((%/ 9*28 !(, !#2%-1 4=#>G55J48H5/J<&;3 70&*0(4(!0$"+(+ ()"!  
2201   
2202 
2203      '("65.7(64-340;'<984D&<$+* 36#59"8D12?+$:#.#"$,
2204 
2205 !0% '' !     (# 6(0&&& %! )+&7+3!5       
2206   
2207    
2208  
2209 
2210      
2211  
2212 
2213
2214   
2215        
2216        
2217   
2218  
2219
2220
2221  
2222 
2223
2224
2225     
2226  
2227
2228 
2229 %:5K<L3PgC@45)E.JDT802De‡1JSvhwq|›…*K—@rƒ3dcfM(-<]7€^V`5"& !!!&+",'3"%&'160:F07>6>BD0B&(I-,@83,A:F:@D=m{JaŠ>`UO<U[RvU_}UElC)G%)@36G4'7+A%+%24*825GC6D*EN-@P6<S75G8&49:D(EO86LE5L<3G2)<>/B*;9( . $"  '%!     !! #'@B ?E(?E&-7",5 )2#/9(5B08K7Jc>^l=gn<Ma1=Q(>?"DC 3?%4K"EM5=#7H#@Q*KW2I\;Sh>Oe7JY0GV@C\QOpQcƒS`DLd8I\CNb5Zp7^wQfU_Š_·p”ÂnžÈ`—¸[¥Àbœ½E¡—IŠS}gXoRJ=9,06&.4(?E.A:6LO2NF+@<$$*""!*.#!#!%&7=0SQ(     '"!&  + .#-(+!($!*$%   
2230 
2231
2232        #!$/(/!(/<"7#X#_0 m8+9;(%%%5C%=3)(.4*%'*04*)##7*;@3H#=;'9G#8>0,L0'<59*'&$% !/ +&# #'-"(&    
2233   
2234  
2235 
2236
2237  !!'/&&! 32 0;$58"/9 2?#4?(5D8@5G$1F)0@&7&$'   
2238       &"#.!) %&&"'! 
2239 '! +$$!&
2240  $!*#%$#!!!)$!'$%#)$)"#"&     
2241   
2242   
2243
2244       
2245   
2246  
2247   
2248      
2249
2250
2251    
2252
2253 
2254 
2255
2256
2257
2258
2259  
2260  -% $"#    
2261   
2262 
2263
2264
2265   
2266 
2267 
2268 
2269   
2270 
2271  
2272
2273
2274~U†wmj9*6W(5H/A/FR*We-IZ8Ns//3QnL;^bbECy8[5.0T7AD*BT>Y $T("7R'Lc!9R #(#!&20'&+"%*&+AF(?W*AL*-;,QQ,MY#,:!)3%FH#4E% 75N[BWK8VC,G,4CFGXF2J9;A!'"..@< H?&=DPM?N#Pf%,<+8Q)LX58F,6=- -'!1$'27Qi.3>.-+(&)#+4'(9&   "!*',%!"     ! (, &".)3,:L;5J8?U/>F&-1%)2*4>+GJ,FL55GH=V_IrO^p4W_/>Q/BO/6G)4?-8H-AO*GK-@S1Ib=L_9QlBZm6Zl3N]9DW<>OG?_SPfCE^9L^=I`AZoG[wMh„FUqZS‚ljjt¤q“Át€¸u‰¸t›Õh¥Ä^‘˜TlR3EC&40!6;-WV3jm7IR4RM,02!+),,A;#.-,# +-A<D^3     ! $$% (&(& % )# % (#$"!*$ %!  
2275 
2276 
2277 
2278
2279   $ )(11)11!",)*3-8D(?0K'D.!J/&07)$*3F';6(-/0&(, (#%&4$24.?E'4K00@1'B21-("!)",#)%!%%$+$/.!$,&" 
2280  
2281    
2282    
2283    !%,!$8':&,5&:=*4D'@B(?L)0L% C+ 3)*2(&)(%$1 
2284     
2285'
2286&$ -4 ,>2(#,9&:(0*" (  
2287! $%$    
2288$ +&)" ' !*7!0#)%%    
2289     
2290           
2291 
2292
2293
2294
2295
2296
2297 
2298
2299
2300
2301 
2302 
2303 
2304
2305
2306
2307
2308
2309    
2310 
2311
2312
2313
2314   
2315   "
2316* 
2317
2318 
2319
2320 
2321  !     
2322
2323
2324  
2325 
2326
2327  
2328   
2329
2330     
2331 
2332  -j=q|"if2]&3S':.5P7;L?O4B4IQ5Sm)Qˆd_˜Lh|?Gp70R*Iu6)S,():"'/'-),23&## %12(! !+4$*+("$*4- )B:3BM0IM)VX@]v.?U"%0#&41(#&1K^29K7-5"8?%7K45B*$&&"&#!&2:>_BSw1BaB@L'AV2-A#K`0K_6Uq+4H +%+0/%(?0@&-.$$%!( #   "$     )/149?"34" +@06&7$38+@->C'>C7EVCD^<Uf3II..:E(@P7PHIe7JX5FW2CR&<E'4C)2@0@Q4HW5CW7;S8:WGC\GIb=BV7@R34E/,A;5C9>ODUgH_lHZ`HGbJHe>DZ:?VQU{Yd‰ix¡p\…]bŒp{°€¤Ár•²]••5uv-†ˆ7„|?‹‰Hy‡BV^6>L-83#EF'YV+^j,TQ"5=;/#(.7);@     %#,$$, ( ""  !!""#%    
2333
2334 
2335
2336
2337
2338 
2339
2340 ""5-'D /"-&.914&3(D)!B*$G-!?1$:*(+!%)9 !1) 4"'$48#1@6%@< 14"*&(( "/'-!6+#%(+'0(."0#+#    
2341  
2342
2343
2344 
2345
2346    
2347
2348
2349
2350  $' %&(#(0($1 016K21D/8D/4L20?'(7"2!)!.&  
2351   (3-"C4'*#&2*#%, !
2352  $%.+%'$ !  ! '"&( *%"  #&",!4#%%( #   
2353 
2354    
2355  
2356
2357 
2358  
2359   
2360  
2361
2362
2363     
2364
2365
2366
2367  
2368
2369
2370 
2371   
2372   
2373  
2374 
2375
2376
2377       
2378 
2379
2380     
2381    
2382 
2383    
2384   
2385 
2386 B85-",!I?!8:+6**?32<?%+Q0e".^)5J%3<#2Q$13 !'+&(.)' !" ",1/: %,%.&%58$/,;!'7(0-/">K1Zd:Sg>RaAGP(9=# !"!B8-1"/+*,+7*:F<ALH=D(7GJOaEObAAW5(=)17&:M6/A36E>DY*KQ@<BA!/8  &#            &!*0:H45F2+ %).1?0AQ9FSI<FHCUISi-=?!(2,.:EJdLl~9ku6af*EW)BJ(AQ(;I0DT6Ug7\\/NS7=J;2D8:F23D0,6&)"#11EVCRkPUpHYl;EV=OZ2V`/UZ8QeH\rPg~NPjGOqZ‰«tœÅy’³sš²L|žNsœX…²]ƒ¥V’¡H~Š<hd0OJ-hk@ˆAsA^o)>H%ET#I?#.27      #(#$) &%   "$" $             "&$,-$ $&)%5/,';%K)#@0&N.&D6*3,,;& <'-)!)"  % +?.9I0 H5 )(%%.-05)9(+#**/-16 6'   
2387  
2388    
2389           !)"#4%!%#(.1)%6)78)1@% 8#!')&%.*#+)**2
2390&;!")
2391)-/->%-) ## #% $ #"(*+ *!%#  $#&   !& 0 !&""!#%#"
2392   ) 
2393
2394
2395
2396    
2397   
2398 
2399  
2400
2401   
2402  
2403  
2404
2405
2406   
2407
2408 
2409 
2410 
2411
2412    
2413 
2414    
2415 
2416
2417
2418 "
2419)
2420          
2421   
2422        mG I3 @ R< $(##)(!"6(!0+#8H&#1,(-9!!"#/#")(.""(# #"$!33+: 1!#/&+)7.F/?)"'%,"?E3L_@;^A„v<M[1.I/52<C=2$3+^o2 5@'?>+>/$)8A>,F;*>-XZ1=+8A#b_06"+58FP:Pw.Vs7'C ([I./G7
2423     
2424 "&7@56-+)6?:;A54E7:3(#45%<H5@V=GQ1KV7CXOasDCW)XT CI98F[8c\Qxbh‚H]m6H`/W_4PX-2D9/JAFf@_y8en3HX/BM19J'.8#++',1I[EXkNAXK;XC;U?h„B‹•B—§?”•NyPrƒE`p9LfTd–hq¥t¬wŒ³g|b‰¡\‹ªf|˜išµ] L‹§C˜•F„‰`ƒªZ†Jfx4Sc6dp8v„1rr<      '- .&( #
2425"#$!&"&*% !# 
2426   
2427      ##%$+0$1(230'7"+$3$8*!D,):4*../-#!;+ $-$&/ /.4, 47 "C&.5(4F3I2#>:-%++./72>&+=%(;&)4!,<#A 0*$   
2428  
2429       
2430         ! )( *,#12/<->++@$93(0"!!1/ % %.&6,7*:%+4'.6+45"9# 7<'/'6$,7!4"%$#,-# +4. %A$%0 3!*+* * )" )' *64         
2431
2432  
2433 
2434   
2435
2436
2437 
2438
2439  
2440 
2441
2442  
2443
2444 
2445
2446
2447
2448  
2449 
2450 
2451 
2452 !!!$
2453# 
2454     
2455
2456
2457
2458 
2459
2460
2461
2462
2463   
2464 
2465     
2466 
2467 
2468
2469
2470  F!}YV€ˆ>›—*—›Fe‚$RB?3˜j$`s"8K"6J2%* #*&@6!9.Q'ƒv^7 _B$(%"%)$#")'2%.6%+/!  +. +'(6$.&-3%+13*:*=I:SOE€©j‡¤@p|$aYGF/$ ,$1#;,);TQ#A$".(2&EP#1$(3/9C<:N-,=;6O88> DL-`e<D_G#.G&!'".u„<Md3>a5'      !!&'0.=+=E+7H3-54)34;R6FZAA77&BJ85J9.?><K;<K:.DS4WL0CBDe>G^8BV6>CK*:Y.NTK]G0AC+MF?_3PV*KI66JH3LSYFTk50D3/A,8D#=C!GG5HUPS\>7I8CL7GSI_~dy›eˆ­n›Æfœ²RnŠJ[x7SgDTv\c…Wn–ikˆjW‚b_eޏj¹j¸o˜¼_—µb“¿^˜­mЍoœ¶X–®EœH‰œV”¬R“±N 
2471     %   ##!" "#%)" +&!#    
2472
2473 
2474  
2475     $ #&,$1*0!3267->"3##2#4%!9%&4,&3()-(!*!####"?& ?Q1N".=!3;(69"6A->/#726)+H;6N+C+A3%+J/;/("&+&!-#$"  
2476   
2477  
2478       
2479       "!$ 
2480#!* ("2&2,").%()#+ "%&'&!/.3$58"(=807?2=?>?T$;Q)6C!2B+8!!)"''#)&   
2481 "'&/&%%"-$$#"#&"# -*<!!!&!"%&')  
2482   
2483     
2484     
2485   
2486           
2487
2488    
2489 
2490
2491  
2492   
2493 
2494 
2495
2496
2497
2498              
2499
2500        0>y"UˆD{o ›]™tž»I@m:‚Ÿsš·XGW)Rg-Z_VOF?'„y;ž©)rG–¾{©T¯ÃOš£A7%2&/-&%3)51,0$#5+11"#00$54/)8 #- ok:Ÿ«W¥‰Lc{\f^RtFn”7<g++"&44<:,% : #LI(HT.?ZC5-:))3.=J.6?-;@4C@%)82&5I'B%!&!%!3/+?JkCLFO`A*           (%"/$01*9.JR'BJ2FOCNXDFR/AQ/2@=(46)226=5=A*::;1)7'90=L1B??W5GZ,=D'*;2P59F&!-5"19,K6Wm-XZ,4G;<GPMc1-4&"(*".*%3-(<;O\HJ^/"(.#>6H^;BdVHjfR{vbŠyrapLgƒEMf:ChOTzMj‡W`IQgQax`{ n}¯q•®l€®s˜¿s¡ºx’¹hаt©Ïr©Ða¥Ém Ãh´b„«`  
2501 !  "# ,&"/$$ #'#    ! $ '     . 0( +*2,'8)/+/3396D;1D#C3+E+)>. 7-!4-!.)",#!,#%#' G/DM'DS1;H+1J"E@%7N+*C/*/&;14C8?3:N5>I#)M000##*'&&    
2502
2503
2504        
2505   
2506     
2507        %#
2508"$()$%-+/-')6?9"J 54,5C@L+3J'=C&I.#7//8,??$3K%?#%!&  !   &"  #& %0#   !'$%(,'#%(! 
2509  
2510
2511 
2512    
2513 
2514
2515
2516   
2517  
2518 
2519
2520    
2521
2522 
2523   
2524    
2525 
2526      $%!) #
2527'
2528  
2529       
2530 
2531    
2532  
2533   
2534
2535  "0{oUqeu)-v”ž…¥O‡Œ†}œƒk`?KbD9ZQ=[MoŽAadt~Ž’wŸwGx“*G€,;¥L|\‹.8/96122.$."0##5")64#8E",,%+5#)!*&,LjpŽ›k¥o“CuNn}\~Œb-F2881=CG#7A.5+ag7Ih;P1+0ENE@W1-3,ER(&:&!"*+04uk.L]/pf1]Q$*>!)*#ZU ~w!MR"}x,XgA8SA&4<       
2536    
2537# "!9-HF?V?G`FD]@+;6/0$(&#".+>FCqz>І:ƒ~"gX!)--$/2&6<,B5+<!!1//B+3#$#8#@D?V0'?7G[;JU3@E 2866 B@'4903<=>P&8;$%+ 0?;P?HYC`xPpTI`U@iIGbBMc0KY<JfJRyL\|D…K}—[ƒ§c{j~bn‘x‚¯|‘Âz¨{¥È€´Ó®Ûy³Îr‰«t‚¡a~™Z   !!!#&$%"* ($% 
2538  $
25391( % #,&'($0(035>B:"8M!-E#)5264<B<#8K)B)3:2#=,+4+ 3*$+% (!+*""* B2ES2B[@1_9'D3$2))9)50-&&/03:)6=26E4-J)(<5''""$
2540 
2541 
2542    
2543     
2544
2545                ")*#/%' '.*'# 4<>5F6?@H-J!)6#8.<?0B?%5J#%:-:)*/%3J,"I#,#1"9.''  !+ % ,**0 9 &$(".%0)(" (& # +--"! *#%)-$0/&#"%%$#" &
2546
2547       
2548 !&"
2549' 
2550   
2551     
2552 
2553  
2554 
2555  
2556
2557 
2558    
2559
2560 
2561
2562
2563  " &+, $(!$
2564
2565 
2566 
2567   
2568     
2569 
2570
2571
2572   
2573
2574 
2575    
2576    !)zPd-2GvŠe›€ow…uœxa~VSŒ=Ia-gxDŽk„©[\—w"Io/8G=J*#$(>CSIJXDA%XW&=@ )=!.$*/1/2-"#1=,(-N+LHZI&+-&_I>iŽnBqzT|q[ogJemCxfAb(+8,#:7'G<)0/%6)/BaL^=.G2 #6E&);8-B0+/&-A>8A")52C5,B`2CUKmb>dDJW$BS*1Tf#QD%"-;ZMka0G?%<2+@*H[     !    :3:)5J5I810$%'  .!9Y=_tEvsMtiKl97C"OQ:F0QQ-a_"]PK@!8@(2>$'! 1#/)%1,><3I8<S+BR*S\0VW.IV0Zb8gl5cj&ccQI+V\7]iCWsOMkLPg:ZcB^gFcuBq=s{A_sJa{W«b§²_±Yްaz‘amŠcˆ£iv¤h‰qƒ²„Ä…¢Ò‚žÉm‰©[}“^iƒR  !
2577    " $!$# "&' " /$ 9$*',(.%2,' '/&)(022(7;$%I-385B:(>C#8E&?B*F?,L/.?8%*,*1(#(!%"%"$*5-ND.3W>8IG6E6!>"(($#8"(2; :>)8I*.F29'#"    
2578   
2579   
2580   
2581 
2582 
2583      & %-2)9!,4'5.299+>&&.'>'(9/28/,A+1>4EI%A^ JV+\[*Uh3=R(<  $"!"/%-!#).*+'   ' &+57(=!*0!&13-4;*>!') ! ! *#$!J C,,/:99> ;$'!! ) " %"
2584      (  
2585
2586
2587
2588 
2589 
2590   
2591   
2592 
2593
2594
2595
2596 
2597  
2598
2599 
2600
2601
2602 
2603 
2604
2605 
2606
2607   ! % &1''2 
2608 
2609 
2610 ( + %   
2611 
2612   
2613              
2614 &&*10!&( !7%3X5X[9at&:ZTQK<f.47LYn~3N}@U_?5&JA0R_1=772.FK8O]14@@09/;F",.1/?<$/;"%03$)0 5%BDJj–I‰šKàÌW\,VJ_``VcA6IOcmMD\BibTSk6)A""! (!*#!+ -,*")D3E)xq_n)J[)“v*H:-3,0C-DA21*UN/)-6.3P2=.R*EH+KS5@M&)&##2/3F.5>L,5(',:   
2615 %&0- "-&  )(*6-.--$"0."JC*UX0\Y6e_$@@;?76"6,M%1I//W'5HMQAo€4YaEhqG]vTUpED]+5F$06.257"##+,*4/$=5,B47WA\q7L_AavNpˆQv“Dq‹>f{7\q<NjBFb?@I=7=CKeIVmGD`OHmOZˆRp“T|‘_…–lНpu›jw¤f€šPuƒ^f_i†_daPxnc³yµkz›_x’Pn„O
2616! 
2617   %
2618 #!!$&    /' #8.) 0.(1%0&*-*"-. ,/ .,"0,'9&4"&.*6*-=?"AK/<H28A/64,6)*F*((/'/"!, %)'#!: 74;C( L>'/?*:&%8*#,%#*1)2<!5>-7>,:0*)   
2619   
2620 
2621  
2622
2623
2624 
2625 
2626     
2627
2628   !&'-!) +, #$!!$).!$/!19&=-,7$,$"$$'3!!5,%,$*3!.32A;/?^</[E6B<)604!.?!4&* .!.,43
2629 *%%?$*S+0+,6,4K>BX(-H%#,!.#
2630
2631.) )!)*?K(H1#0+%"5*)A(90$1()"'     
2632 
2633
2634      
2635
2636 
2637
2638
2639
2640 
2641  
2642  
2643
2644   
2645
2646        
2647  
2648   !  
2649'3 28!+-% 
2650
2651   
2652       
2653
2654
2655
2656 
2657 
2658          
2659 
2660  $ /+,7-0#4;/5%/#.!'#-. $# $G ";/($EAQDe8Rj<OP3ck?†‹H}“1€~/ˆ”4?M?FK'+0(4;0=A,",0)(%%!+2&3+!3FjeubƒŒ~¨˜„£EGPL9RKAU9MF;JYN[]AReSd1")*#,%(7E%6C$&>dvNGh<-@PAnpQ|)]m*9[4CT4TV+WgDEc%\Q$8;(;<14I719!52$"-Qq$&0%)+"   
2661 # .$!.;#20>7JO(1:"%.&/14033#!!#.,&.LL@apSt„Zvˆ\ŠJU\2CK?=W)<G?:-."EI&<E+HK0GKQLY\9LR/NZ(@T%;E+37%0!+4$,7'7I=@11"'7*8"&3& 1F6Z?VgG\nYZ{Va|Xe‰S]wIRmAH`:CZ8Ui9ko3VVB2L>:O<8MK@_U`„ap’`qŒhu™^ToS8gXMu[UoUYsZfxQevHI`P`{esŒk€£jq—^x^n…T     % '%$%*  &$
2662 *
2663(# #6/. 0;.: 36&06%36%*8 (0$.& ,.(4#:+#58"!8!1&#",3/1.:-0'++ "; !,'"*#),)! 2)@ 70-1'  !($!/'0B(=&$6-&3.1/ ' 
2664
2665      
2666
2667
2668 
2669 
2670
2671 
2672 
2673 
2674     
2675   
2676""'$&! !!%0)#$&,$( '%4:'H> KDI%($ *.(2",*13&*?0= :=A<RCRCN>\I"HPB8X4 _M 6Rj9?gHY?H-?G<6!PC%Rh%Lh9%S791!&8))#%"(*.$#-)2)=+)!4 ($&(%"(     
2677        
2678  
2679
2680
2681  
2682
2683  
2684    
2685
2686   
2687 
2688     
2689 
2690 
2691
2692  !%   " $13)2(2 *- (
2693 
2694  
2695            
2696
2697      
2698      ?3$ !$()2,5#)3'4:.6B(!/!")&)),4843)9 #!8&!A.0FHQF?^[NVwt„v¦„Ov)L3+<69@%%5(%0/%( +#"("' -0.; #,*!ˆm-€£nZ‡_Ik„K¬i!,;*/06,:CLDEV<9G?<HN†‰N,5! ##1 ':19>',3$+Y5B4LV),:SDLB3OA4D13GD8S=8Va@ZFd‡FKh%6J''-$'*;6:4"")&S(6#+4#!    
269961*)!#%'*'d_7nr:asH[c2Z[%p]1Å£,ƒf!XMZQD:3,('II-db$AC-:?J4K_Lfo[lqUt_\n>W]AZW;XZ1CK''/.3G@bq@]p@Q^G>PI1@0%3!%&'#'"$5"*-!25<M'<D23 )60<7E)1*!3?DXDShIQgJLiPLeE:S@<U37L2:PAOhKWvEZk4CS+09+?O8CRESlYlˆ^ewU[n>1F7,<?DVMWdD`kO^sGUo?XlIXx\o€^baTt]Y{\OvJ 
2700   !"" %%$.'#($&"$"$%+#   . *&.2749:!/?*(8.&;)+2&30(,2%2)"-6"*;&22)3>&);3-)$!-+#2&#)-/&"0!( /55#;$#!5 68'H&8,$(##'   
2701   
2702
2703 
2704
2705 
2706    
2707  
2708  
2709 
2710 
2711 
2712  
2713
2714 &! "! !")#(&*-*B57E-<*366F<TK"@]0/W<"- $$$D#):,(+4;2 1F?;":]%EQ.Ll1rb2|‰/x•<e5Lu+Ci;^h<D});[DFH0?P1EH+LM)TU+/c?>DH5N>,7$"48$$)%"%$4$.)%$()"++$(&  #   
2715 
2716 
2717
2718
2719            
2720 
2721
2722
2723    
2724
2725
2726
2727   
2728   
2729      
2730"%$ $! ! 
2731!,&+4#&4.2$3B#/  
2732 
2733 
2734    
2735 
2736
2737        <)>X4Ji%:(&**4"!0 $$'+.GE/34291/,- .3+,',$*% E2%JW;BI3BN@DQw6Jx.;M>;$(0!-.&+*!><SZEN+/).(, $KA5„¢yOŽ}GƒS/NHRLR@R=<#<@+1A817=ad1QjUd˜ehr#NdEa%&&.0BI!RH35:=J;29#38<%<2(D',0-1:2/9&9A<BfZSg'CZ'8N'5/3;1>HN'! ##kj&Gl/<    
2738
2739 &+E/@R ZM <>9Ifii‹_PqbmxO‰†IûÜañÿbÒÃRûãGȵ:I\+nh/mp2}}Mm‡Huy;AI:GRH]ldƒbz‡fšUˆŒ^€‘Rm€N`r28='.5?6RbAbNHRKT_5BL!10$%%'#63>O*9F:?7; 0='0D!1;',/B:AO<3N8=Q<<P71A,3@*0@&/?37MEDaEDY84E&7F'>I5U`@^sS\yP\qCNb1*64@/XiE^kNfwGO[:=Y>OgEUsSl‚O[qKOkJBYFEZ:         %$$(',(-*%,&,$!) (!".+ !
2740
2741 
2742(
2743+(++"%0!32$39'26.%;0,-'/.$30$17"(9$3*'&" =)*=;&;:/>+/"10 ./&$#" ' 3" 3>,6$$*   3 +; 6/*)#,&)"
2744
2745% ! 
2746 / 0     
2747
2748 
2749    
2750
2751   
2752  !  "!&(# $!)"+23FJ#HO43H%K< NQ#@U4-MJOA<rR%ppdz ulUtEr-3T$+4/<)E((7!>G..L.<>.<S3JPLDXUP]Z8`F&?@39-:K=IZ0TR+4P*KB'ia/_y76`E)C,"43-&!2& )(-5 , 6/549.0+% #/$$!,*&!$  
2753 
2754
2755    
2756 
2757
2758 
2759
2760  
2761
2762
2763
2764  
2765   
2766      
2767   
2768 
2769     #   ()& (.")"&# $ 
2770 !(%&16)&,",&0 %
2771//"#"&  
2772 
2773 , .(
27744(@/ 2"
27757+   
2776$.( 
2777   ,%84A@AF$8T"+"3%&,5?L(;F;?$<J(1= NF&LVD;?<0;DG,IT?GL44>5IP><P4:H%16&'5"#+3)6+SS=BQ.C>67/5 %)2G0Xr08K.?%+&39B[’/(68Ki-"-# %*"?W9BP[tgZuBN\BNp69I-4(*#)5E[q5,@-4?/;H!#+$05+ %78'*7'/@*T]*7E@,@B"70-* '/8@Nd'!'(&%<3 851:!-B$/   
2778  A5K>7FGH`j><B71;S'9U#1R/H`[mg^‘e’Žv–‡œÅŒÛì_…CMZgde‹Ÿhase[{Qej78DB=Qah‡_ˆp`}`‰crQac9Z@1;(7;)2=<8B9BQF;U7$5-4A**((&+&+0)@)&4'$<)'6!#1 "2"(6'.#/,1A/!3*(;56F'2>%2=#'1#:&/>0%?6BV3FN+@N-CU:JYCLeJOiPauDYm+G\&U[?qƒNw‰M`pIW\2IS8QkD_jM^nQTr>Mb5;P95N;         !"!#"*!.)&2!&*(#&!',"0, 04%>!1"'
2779   %
2780(*.-).)5 +7$67#;>)1?)46$?9$0?);%$();*CA"9N,%=.+"*08"/( -*!%,9 ! 4 H4!9Q$:F%5=$-70,3163-943%*5&, !5 1;'5$-" & )- 7
2781  
2782
2783 "(   
2784 
2785
2786 
2787    
2788 ( +"(,*74%9),0)"8&.$.L&(HT2PX;S[,=]9=NG5?>_:*Qw-LoIK`SAmHKeQdeJQd:*J"$1!0.!@8#-G (9#7? AH%:Q'bL0Yr5?r81K-0/I8!_V)`j-Ts;Xg.i~:h~LI€GHD05e8%5*755R'<##!;(-C'6& 3%#+ 3(%$"#24 -*&  
2789     
2790 
2791 
2792 
2793 
2794  
2795 
2796
2797 
2798   
2799
2800 
2801
2802
2803  
2804  
2805
2806
2807    
2808*2   "   ' %*&")-"04#/! *:!*8+*7%&'14 )
2809*.!(9), )    &5*;'27&:@,AG&@D.9    ' H& I_Yd[1: " 
2810 &+8C*?V:'/@&&%/')&!AA6AI/3B/4A1CT'Z\9ck;Ha,9[/1=&<G4EH8OO8?M30;9@M68F/&;'$-"  ,0"5??,C.+*(4:#)3!'#$8>+<<)*"!2*@R7G$*@B#79,-<C:@YZOsP%QC 7?;E!ac,ax#)(#: +#"+4A*2@,7(-%-/.F =A02FB:J(*4*2D$AZ1; <<;9E59F&-466@6u“'>L(AG$&- * ++71 )#(6L9OhBLaMbwHFN.>J-:@+37'6CCS^N?QS4GfEbkZdyYwd\aNBBQ7AdPdtB]TDYahwB^[9SZJCUd`l[Zj^;\Z3PgEa8?@2,6*7F-1>.4F/<J72;' " #!/9(^q'qpOJ3.# &#&1 ($+ '' #/#1( %/ (/&0,9L1HS%>G!4;/;">G&2<3:S<\f7LV1BP:CR7G^>JcHWoCLg9Pe?LdIHeQSrTaGhv4Oa@M_EiuGPiEJb=Wf4AM4>L1
2811 
2812
2813 
2814 
2815
2816
2817  !# -,.$4$!)( &-',0*7(=($1(,$
2818
2819  . )/0.+1 (6%.#7,$.F(*<0+7..1*,5(/2*5.'7/E.TGZ[,Ea5*O56-A%B&1.$$!& $JO2&0%$ GCF.N--<<G80FL*=K'CJ%DN'?G-GJ.=M(*J+/).9/:"1*$)%,$     )! "/) # )1*3 %$#     
2820  (#
2821')# ! &!*.=7CA"RL'YP&LZ!DT)ULTWPcJ_@=cG:YF;SQ8NAQJ5uj+k…FMlLBm=FVE6R=EGAKgIDP=JH(ID9_"8R-8?DD_J >U(G[,D_EPLGPP,GZYf(Le<D]K]XGKp?QaDVWSxU(`522 ##.$" !&'*'1+%%$(:!G&+*176"$   
2822
2823
2824  
2825   
2826
2827
2828
2829
2830
2831   
2832
2833  
2834
2835  
2836 
2837
2838
2839
2840
2841
2842  
2843
2844
2845     9* U8 ^c_g'4T 
2846 " * !#&...)-$(+%$ $'$*/*16-57-;(!1! #( !*&6@$-1* ' /3 &0*'"34'8>,4=30<:13     2 se™2‰¡Z”˜L}J^l%-9"$
2847+ =I!<L/2S<&?!$- $;?#BJ"7C1EO/jf/\d'FY0SODirWaq?Ma1+=$-8*IJ1KD9<E2/C)=H12<+,$  .""' *+%*'+%--%8!Y.M2:9,-1#$(66'"*.?)1;#48.5?;;DDaS%RZ#VE,z\E49BM%J.1+. ,,#*!)$) !$.1%5@/=\4"7%+,0+364,47309*1@0UX34=*EC!VT*[aA[fQj2Zp/RU'35234* #('9'I'9?/L'89<A3;C-?G/4K44JD0B11;<DQTk|JKPGMUB`e6Ya=€]ƒ†@leRoy^r‹Tw‹QmUyR]d4"417DCcj@\f&HI'HR/<H)4E/';/,5'.5<=>]V^ŠQ‡ 5€Ž%kkQKBCDA55&*"%#+$5'2$+%"0.7)@O8BK/:J$(5&4H'<I"(<)3J=Ph<L\6R[0KK13I<RnCg~?q~?`r<:G82J?GXHHgSY}DS_;@WQ]xD\kE\jGSh6IX8L]2$  
2848
2849 
2850
2851
2852   
2853  $!$0)0"3!(#$)#&1&/'%2(%/&'#
2854  # (( &2/,-0*2&#-".)!*/";4088*0;(82#92%D9$H@%JF$JR*Q^=CcC4S@9"'t' U<!5;1)%*$#PQ6)6*4';@B9AB;>7C:(8N1/A=154E524J<4M82H7782-?)$9&&+':)"->)62  
2855 ) $8#
2856=?:I*!F"*# 
2857
2858
2859 
2860
2861 
2862  !$1++- #!+&?7<@SI2SY1@bE8VI@FAKS2"WB"<I.?E)@G.7=7;=8E0BG-dX@V‡bZŠY`B !76403;,KA7QcAaX.Qc/@T3YQ)JZ,7O+9<*73<F71MO8PS<Gc2NN4?\6EPIVC=Bb4:SC)A=0<DKD@+`:$1"++/9-2!$,+?>K$ #&*&%"" +%)%!
2863     
2864 
2865      
2866
2867  7% UM 7?
2868% 
2869 
2870
2871   
2872
2873   2LIJX    
2874   74
2875DLC?7WVNLHR8\A$
2876   #-!%$)%*+$,&$(/&!*" #('+'!,7.(3&#-" ! !'/-,*8%/2"3=$7+*1-,67+?A4HI39E'"&   
2877
2878(1S\9\z2\}sxnlœcb’R¥'r€|‚XR9//?K+5I*()"JJ.>'!!;G4EV6BK1CT=TaRTiLTk2Q;8ZrYbjLW\=ef%Wg"8N<Ld@Mb64S"::-19&=A"2!+ 8>DK)1'&("3#M*Y4J9%25$,/($'*++1"/$$+#)8D,BQ-4A04H/P[_VxEjrCm–GTJ(kX$qH&„\9@'(""&!K9%,%4!-B'3:6*30515)(:5>Z&%($46ICI3Zu@MrRVvKATO*G?4NQYk/5A;F##3"&#$(0! &##*$OP+OS4=M6G[0CR*/9/-<,*:5,:G+AHFT67;I4SL%8kCws:dp[}Z=^j=[o'Bd$Aa5LqGc068(>PHFc]YxJv„:gr8:K+8D0;$0=,105#9L0J_Jg|h}™fo˜T\€>KZ4HW9[k,HY#?F32(/'23>"1=5?-.'1.)/@/);+MT&.7"2>*2B%"1*6G;BZ@Ng@av6Wh/IY9RgGJmNM}F[|8CO$(527M21KG<[CJ^>KSMVq[~Me}NI`==Q:/G4%   
2879
2880      '!)!$/) ( $")',,22 < '"   ! "+ !).&$3!#/) ,"*' 0)C2"HETH0=P+@C/UC,PX2OR=HX8M]E:[;;:AC"$|)%SS#*;J+%'0:@-#//*-"+E-ME3EP5?E/1@632:361B7)HT.HO9@L2AF)LL1IW)SHBU!V-)"!%)!+*&+"* +&#*(*$-3(511,  
2881   ! ! '7(@8BE#:%)5/DD.<S5/TI/BO+A:-50?2%C$,.":')%+1$<:(PH,ae2UqTFkOJEF:B@>;I$HE.Nf9LW9QR>yc8Q€1Td?Fd9:O0DI/<K*DD7MZET^E.[C?>6`Z9W=JVA,O607/&4&.6%)D=)-!&()*ED$PT )=<3!$F0'%&+'%"%$"   
2882 
2883 
2884  
2885       
2886
2887
2888 
2889 
2890
2891 6'LN8NU?XO)8C,
2892''2        &9#IQ
2893
2894   
2895  #+*1<6<?6JYEPW;E< & +IDKBJR!=! "*!#* $(-" )!+##$!&!,-1,+-'#2$!+'&.0/"5>,.6&;2/6B+DG#BC&@:+dm6‚‰B‚–>ŠŸ%ˆœsDE<!+*)!+&--(5#K'0WPV`Jgt’g„”ei‚HKo.Na/@N+09 (N:$+*)"&(<H-,>;MN/OX31>@1>F)8C5>3UnEhyKJiHp‹YcŒM(?318F7SHH\.HN+KG(8G.+<<5,+4H.[W:-5&(3?2(04)KD'?)'31$hZ"fPK^Rv.(FJ E5£Y€€…$18hM6.7*=D-;PN<LIjuDVT>\b>¯ÀNÿõG­:Rs#18.=-;(46",+8&*".'%2 ).,*D):B&IK23A73?B2_e9agVs‚D<VE4D-@@#/:BOrHw{%6N(17)7-6*0!' :?2-  /*J=.E=AJ>%<D2K0,'%9 %0#'1&&/)AM7<G,'/-.78,3K,2K7W/5%;%, /!*9/=;DO/SYLUeG3JZLmgRzOEY-9F&FQ*@I'<H$RW1Jb9Rg=LiWUvW5PQ/H>9I77C@>X?4L3AR-IY"KT4C'>N)8G&8D$/?4:$. -4$:D/]p.\X:>)2>'0! //0G?JbDOkJYs5Xc:GaEVn@ObH?\:BP!1>$DK-IT<U_A^j?^gLh}YrX\qCL^88F.)9,      
2896 &&$!#%"% ,&,79"'    $'#*)4$#5)O2HJBL&JI)TO6JZ=QUBPS6S`?WYODfDCVK)L;`">_5i=+HK;(6P&&,)%"-"?&,:.)%%!+>(FB,7I8'6:2,390/CC,SI(Vc3Tl6OfAU[0Xg7Sd8Mf3>c;5M;4'&%:+8C&@!1 !.)*!E,BICDDCE&%*! '  $ =( 281  !""#'#"#'./)8%78(.K31'1$)9#+:;(5<.-*#3)+& &# ,.0"#)%?-"DK)=M>KOSC`N[L<<l0/P48D7CG2TO=_c4If9?X=?`Q@PFF]@>4(&.;B83D6K><2RC5CGDE'QM5NmX]_BFf;3A*G:*AC$&C(9,".<;D,A&(?6':6);%%E260 (;!$*!/ !    
2897 
2898 
2899          
2900 
2901
2902
2903 
2904
2905   50OP=NTMc\EYy@WZ,DU&'M-1<  
2906
2907
2908
2909  %4CX*6? 
2910 
2911 #-017,9''5*/8(>B 0+*!85 ?/PL)I]<^_=@J>`O/J3D4#F9 20%J8XW*2 *"(+/)"(#&$&((0++%2/- !*%%<",-18-7cT4Mc:]u[cyn^noDe{0[l->%D58M+&'.%-NiZ{:?"#%™l0’‡<S[u¤‚yy\{ˆAw‚7D\39H+$5'$'(.:9018!CI3CU81;"((&'2%)?)=I?VLO\kA_t^c‰O@d",>&,<2-?@J\;=P8H@)PN'Yb/0J &-,%FA)"66%E0\6!l>$Z2NG,‡¢ZmÈQMnBE\?<T 4)+1/,K[[¢™UɧH~'[lCAY%073A?.±ƒ8Œ‘Vwž9ZlEov~Da¢4q['+4;D*5#-@&),!+*&("-"#')#,774AECV]$Vc$LH@\nHLmbMpOyr-QV2Vg.Pf;g}ra’H<L#5D5A >K 9==A,5BD%NP4$7"&$)-/./:4*)%) %(2,9-9),615C CC!7E"9E+6&.!!)!!)&,A<AVF4MSk‡Bed44HM3MJ2A56I-M\3[p0eh1\j8YwDyŽFbv:;H61>(3=-AL3_b0J_1/:+;E:Jb<\n3_p0V`1<H)6D&7A#.>;A3A*EM7Ke=Sj%<;)&!,!)>0,@9,@=.KF\p54?6*ICW|=^d4L]'GO*GW2=T4<UGD`JQaLWs\]uLOe:>S+0=%%3-( $(%        #!"! !"!#)1#
2912 # +*;/23+6*-I.HLVR-[b2Kb;GU9HYAMULPR7NSF;ZD9LG:B>598c)IC‡:8UVD<FJ7%*<'*!! $#1/(*0(#)9+#//.&:7 K?%UQ+Tk>Ij?[WHZh=Jl<NbGJ\AYZAFc49N.2;B89Q'-F*$9!&-,(1/2?<E4EK7<P.4L=(8&*5"1% (#0.3-691A2,>--2%0+''(3-(3+!&#)))$/46,%''!!.'* $.%03#=##1 /3A6 4K.2*,14.19 7A+ND5=Z4DJACN4CRA,A515&V6+T\1\h?AhJF:500.L+:939918,K:!OM+T^,+R;<8(QG)Q\;[eAZk?9\NCA>GS-GU:9L?H4!4[*"81$2-%%(&& !# ' !)             
2913
2914 
2915    *!67;9@EBFH6ETC>C=QE;P<),)$  
2916 
2917   %.+O:4%> 3.91 ';-(+! )!"*)J=EO3ZX0Lf?W_L3>F[dB]m@cz6^j8jx8;b,$!ZZHcp.G^8' +A:"91$02"%#!!)2/#.$&,(%!)$09#,?C/9BJIOKPS5US@E)$:+G\EQ*"0`M6`€3Mg(.%0J0]uYb}jBZ>…ƒ‡}’lgxpijR~=Un1=F 1B@=BI$7=,.B%3C01;88?+6D*<'3&4:*AB8?VFB]Lx‡L^o,?T!."X@(*E@4,6G<E_E<YICc(3=" "$/-$6$$kA2OB5QD1¯AG_hJO[7Z77:,L;.]| A7 MM8¬”€¼ÿŒ]Ÿcjs;[e-@5,UeCLŽqJoTVfX¦E«·D_|64K/FN4B(8E#,7'DN 7L8:%/) '"*#-)CN:U_HNlBuˆG]hLKV8JNXInSwHQz@XtB=Tc4FQ<L&=F%5A)2G+CU&@N,&;'=D313%(&/"+*+$*$ +'%$#- %2%)0$*2"(-'@Q,>P(7O(8E%-<'8"*$##/",14?)8;#Hf1S2$5)&3'(7.6E1Wq:]pRq”Gd~ChyP_OcwA^s0gi2r|7~ŒBw‘B\q(4B*RZ.&<?>TFQpIUm;]f.CM#2C(DV/M_)[^/PS3=N<AT/"-!& #."%0'$)9+D6`q'764$?GMp7FY.5K.(91+E6Yg;T_<=SD7VD>TDAT5;N')9.) -'"# $  
2918    "#  #$%'*  +$1/0 35!/;)19;77D IA7PU6OcDUX?Gb=MRAMT;AXB>UE7H:B;085/E$!24&‡)=i\9:N[*)27#"!&'( .$5*"$%.("2,0716"8?+>L.FRGQ^CC\68e=3OKHD;G\@CVACZ<BZ=IS0LR*?\-3N58?*/?!+8#47, C:->V/@P?@L9.J358,/A4.#,*;0?@/D*#<4$27$0#.1"24$.8 (;$%8'.1&%/!)1)%4,( ,#'/)-&./.#$(A4&A#7.1@$B6/(J$ 2#'$&+'6D)&FC+-6?@+LN4:W4:E"SK Gm@;YIEIB5O20"&2'$UC)<P.BJ3IT>=XI@IC37"2F+<G=>IG5NNGBGFQ4KT8P]@LY;BP1<M24B'=> *49 "$,% 
2919     
2920        
2921   
2922 
2923  " :<+9*=;04C61;7<B88>48V=(/&#*"3 
2924
2925   
2926  +.#16  )&.,),3+2& (%(87:=DNUH@SQSJ@7Q2FE?D[UWfY_cPOcX}…I\iNeBM4ZXVdpLSu-7E-38F]9IZ1LT,LP"NM4A!#-", )$'330>%*&$,!2,$.=62<=(=5!#:*$!8O>g-4QF3:37A#6`>=XTOW;Qf*7X!L^6}©Z\rL‰ HD°cn¢w~z]…e™›Rx‰G„š-at#BL2NP7LS0<H(5<*08+AI1;N1#1#)*!C9*EZ1Mg6=H6al]s‡MIq0S`M?'&16E"4%<SW)-C %!*#<4 kB9ƒt5­w?T•ŒU@8@>BJ-*:.%|~>B`>01"9FA.K‚3S{1@OsoD·™E“Ô;d—D"2:;;?‘Æ^a˜Lnc_96<+0K70I+#,!'-1E> 6..3'1A$*-$"/4:FGEMWCG\iI]N9R<0AC:GAZ{LF\LD`@?V09N%9E+9A&29%$0*EV=>N* *"&/ #&,)3'/%.'3(.*"& ,#/'0#(''8D2CU/=P'-A'#5!"/#+'(30#1?#$)#$8%1''0'/!'/',74@WG]yI\yYSzOTrFPlOg„Mf„LcT_‚UVW_€Oh‡8ft6]i/*2)-59+@A4IHA^CL\.?G1DS:HXBXw8`v.NW4OX"43# -""0+P8_s%<:7,F<MY,;=*2!'543T;:Q47I-4E55L:3K2T](ML*0)$  !&$(+"+&!
2927&3%'$%0-1*-4#2<"3B'>9)<I.JW@AVBBUAFOAHT8HVA:RB3G455-B0.G)#50+y')aR38Nd')>%'/"$%  !$ '%"#'$$$(#*/*#!/'('%<7/JP5,U9.9;(6859.:A:<J::K55L8:I79R2;T9KG;BQ.6[3-D.0/#A8.Q(#CA!79(0:25;8A.:@-/C*-4 D;!=J2B 7C<E57D;(<:(.' /#8% /=!"3)",*%#")!"-#,+"+6+2#/%*&&3(2"%-"+0+%!!$%/*3=2+<">*,9C" A1!'%#/",&+5* 6B$6L-7N8>;/@K)8E=24739..C/MB)LGAJSI-=[B;>60B63?=-?:2<.C5.ID-/C::8<>;0AI9CO?5MA8GC-E<)@5&>/&3+*5."*"! 
2928"
2929
2930
2931    
2932 
2933       
2934
2935      
2936
2937 3 06*9'9.,MG(T]8DS3=E0%>40>4(3+&"""   
2938     #10% .)" 1,/ +1'$00$!#%2.FT+OG.JMFCR73741YD2301A?DHL%1W<>6-VQm]\oQYa8PoEPFY]icSiDNJ(7=1;:4Q@FKASZFS^FGP-LR$>R*!)0' 5(.030B!-5,-3-JB&KGFLRP#NSTP5ZdCTO5IO#0-,<=<SR:8Y@?JIF@24D@N\uRfSƒdiq}ZEIfŠ¥b|›{‹€‡‘`ˆªrp‘K`}6P\<GT>>M5BJ.IH)+50->0064?:=+(51.C<FL1jaNWr^Ea4 72!"" #&<GE(73/,G:)’Op’th…’nud}¢188#EJ#Je/=fa2>-¢V)¾£):9*+.*A>0Å”vÿÿ{y‚Z=85-238.;QVAHN3?O6TBHL$/*+9>(3>,/ '+&)$$2)#!""'()&)(1(>;5EZ:IWJ8Q?7L0)2)/92)E=4H6.K0);('6"HP(EM'<O+/$@I8.E#!,.-#%15-8 -')*',#- *'2,7',;/1D.:L(+6&1#+'&#1"+!$  1 &3?H)1#1@)AM?F_>I`B9N9-@;2HAKlTIhMQpP[lEQeITkQb}Lo„?G],*.!#.&$'*5/)>COm7IV,DT6FW>IbGXn:Pb:\m*KK68   0=Mk-KY .406N-8B/9#/#*(!0*)>%5H)1G+2A4;O6^o!IL#$" $#" '$)', ,  #  '& )*(+91 1= .;#69&=C*CB2<P3>K@AF=KJ8JU;>XD4J;481A(*Q*97+X*(H<+3<X+$3%#  "'"&/$1&!/<67F2%G9#0.!+"%($'0&38'.A-8=,=='?F-HC1TR(J_A=UO2J-,9'/8')=43A(%$*$* "*"#4+'76?3+AC&>O46O=6D88?35E4%=84.%3;59/=+#6%* %"!)*$0# . "$"+##*".1.%2$++."3+J>(JJ*5N*8.'&"-)&8.C=DOUO%JZ+@O)1O$.>-J?/9T./7!';!T6$Wd2/`>/35#8= "/30+"67'27)<?%&8/018!-" ))+5:1;;#40 $),(!*%8-14355!"#    
2939       
2940 
2941      
2942    
2943 
2944   
2945 .HA,8C&9/ AK8=?HDMK@P84E0?''-8""$4-"*%
2946>2
294750 / )
2948/*>8 JAFa06#0$ #0/,*&-!'(!&,#1/#YHOO)0)%8/?IPF;C?5D@R\-Sh7WN#aT0@4.*?$ H/DQTOO]P>\P$2.D2TOWV8QK=44$9$ ")C;7R`HJWIL]AAL=EE12C".).9 & (1/!;B--4)C<'OT??ZASd=Q]@P^I^mBmuT]eEhi>Tf.=S3Y`HW’=`j/Wc2HV*;A4OZ?\€VPhfŽ“9vs„Œj”ƒeqpp™ty ^NvMGM<7L7ES6:O3@U05H%+<(59!!-$:2#DIIO&^c<TpP6hFBZ4&.!!YKDS5I$#%' #&&*.=:=@)UOMH9`ƒv_q]qzXejmFMbQ6(I>,$85)401@&¶•W½¡až':Y"*66BR¤XÉNI4F'#."&5*627IX7oX+kX4„q7{{2705)00675@&,!#*!+&+"-5 %21$42<S6"*/+6'0=<K$6@".7%"7!.?LS"EN1GX0PP BK">G+26-99D+0#-1;F2@%9Q8:"%(!.% ,#1)4%3B*BI'1@$.'2(*&$ !(%2$,A(,;!6B(:I,1H5-B/'G,DR(2E3AR;?[DQlFo„Ajz=XkF^xPx‘AV^$(-(4&40,H;Zg1DW/=P4RiAZi?QgCZk7Yk,AO76 
2949
2950   %-?W:D^(AN->G+.9 9G)/%"+ *:';J$8H*0A,/@:6P=U`&,")&&'%" "'!%"  ))""#$!&&""!&%%)")( "   "##''.2%>$(1#/5$36';B,8F1.F89>08C1;E99F:>9<3>+H &[0">;/A./C/+B2IG)0,+$ 
2951% &) !%'2*).#'!%& )*"++#0.'98$@F0KH1BX41WKB@ICR8=M-:E51B)%63.+0  #"%1& 4<&:CC5FC-@8-=- =/4332?!-=(6-*&&+"#)"#*) #%!.)+2-/*.!4-/999$#>+&*%A2$HI21H:C3%2@"C#&/*):7-@I35M?3>4%85-$$+,=2%4+.-S<3Y=!3H''#1 !( 71+9$19*2<(1932.-;!** %1/#"$9/0E'+8"..&$--'1+ ).
2952+& ")  
2953          
2954 
2955
2956   
2957
2958 
2959
2960
2961  
2962 
2963# '8!=(@)E81AR2NR?4L:'35&'!2:10/LDWa#@D"oW)d}5bk,Xf"`i(cg2_^,;ID64&&"'$),@J4J&*'0 (6"<f;QZTQs;l~Hf)5CI5?-dR2lcMy‡Iy}Bx…Paˆ=[j8>X,'2'$VX<YcJDTDVW$O]2DPI5D>076)H,*(,+ISHScBGXB?P>KM95M//@&) ,9##0*.:;"UF27?/&@-&0@*7?46DQcO\lKNlL<Y\?cQBINQTIcb;cZMORZLBW9YFPL5<B-&,A.<]aeH^_fvtd‰tŽ›pg~XzwiiDrG9H65N/8C4DN3NW38X+'L#*E(,@82(ER2Rc<0KH0O@*32>B2@S9/a|FJd:@D(4?LW4=OS9+ IF5MS3^n>}—8aiPqvPjwoG…WTX>U‡H_†6;D#3!/7*VgŠR¤z\ba±³,¯¬'ZqFQvZ¥Ÿ<¢’'M>&."96$PLS’À]kŒFkƒQ`^:t{$ˆu'…… rP à™'pE*Nm9957""$,)#$("(## "($&0/<4:Z$?N/61<&+?(:C0WW5Uk8ux,mp.}u&Yd#AP(>H5=:?'@P,?T(5H(8L"+$'!! -!%5&?N(KT?H1>#/)    !(!*$,8"4A)(;$,*&*-(9,;I-Ym1Sh:KhENtMeItDJhP^‚LWn(>I$("%%0!6AKz—?tƒ6\d3L_AVh@]lEfzCg}5]l+RYB>/- 02 /.  %,%4D6;K*;N09C(9D)K_"LQ-4.8)5.;N/FO.H\)>D0<G::M3)&/ .-+0-#/!//,'&#$  ($&$&#(#!#%)()!) %!    !#" &*&"( (%.($04*(8543'7>,1@04>73:0%=/?%F-046;'6;**--;.#0!$+"# !#! #$*"!'#)-!,&&)+10%H?.CS6AW=1KK=A8+J7;=:AD;5G.1B58@+/A.)6)(12*%<11H%'A7(74"42,/!)&&*$5'!6''$',&' ,#"'$.#'&"+.$317C*4C.9A0A)@%6IEG.-E8,8(#7+4& 2;52<,%B04.-#5'"**(+#B(KM:W@28*6;-""% E5 =X*+B((0&M0&1R*'<%8!%$ (
2964+(+1 *&# )#($"$ $        
2965 
2966   
2967  
2968-$'-
2969(+
2970!* 
2971 
2972 
2973    
2974 (&-.1(5859H=>B@;@,;A 4>)E<)^Q-_mDPhA6TD6T`>[M7\O^[Q\|T@VNdsHh}3Yo &%%)$*!3069,+ $<$!#.'".,)@).H=H\IV2HL,bXA^€Sr‰rW…f<PVnzVPPIVV6wrfq XŠ@„nSkfEFVJ5OPTWKEF=?5,WC,76(4!*.87BHPK?EV9]^DWK9SU*BW'-3$<0yE‡r.‡8xš72B+/286!TN'beHTbF:PH6/+DP?<T7lcJ‹š]nxVmaL~;nh3Je?.N21!D5$R_IfhCz…b‡™}YžolyWs†]GzJ/B?1>,67)7A./C5.F6 5)'# <8CDC8(5A:;F?,A)(,##,Of.bw4Nh-E\ITg::G.gR&‘2gd&Wb5m%m`6]YDWcSNZkSeHI_]t€PqkF’A‹ŠJHLE@T-=B @H-%2M4=J%*?LZ‰^Åc+60FWB<jwFyhbœ.@e+.67=mdo[g?œ“AyP?¿ªUž¥cÿÿfØâM—›tl‡8?S7LY*<T%(<""%).$-.'+$*,*.-,28L"0N5FW"?K3EDC$Ta5\r>_mH|P|“PpF[}43D-6D)MT$27<I+JY-@R$,;)HW$=B+-#!&040/.3*4F5Gc3Qd*CP &0&&$  !#*#/!.8#+50757>E W].\f:`z:Sp9Wo9J_FMkYh‡=L\>H]IQh3=I"/?%,66AF)SZCr‹[_‡If?]u;\mCXsNjS”JXq:Pm2P`7H%JV!7>'*&'.?+4E7Yf1\_*V`0Vp:O^%1A =G 5=,)6- 7:/I:JV/;K:EW<D+D&I%A#A#@#E*F)H)G*B):':!80'" ! #$$!
2975 
2976  #""#$ !#$)*-3%.5%+3$,7''3)01&#+(.!$# /4(6"'"/$ 
2977 #  $)#%+&(#'(("+'./(0#/&#>(9B&?D;9L75O@.@.:7#$1*/*">80.6-5/+6.321&@!$4$("'--5'6;05>&+;&'-#)-!,3"1$',$!++!"#"%'*&*(,/-(7/3+$!$$*3#14)0=.0' " ,! 6.$4'"+'+"%*-70951;./5F)5<C/C/3&%( >&!C4%2-%26@9&+  ! '%(5)7. 0%/0.<EGBB > 1 6033$) 
2978 
2979    
2980  
2981 " =-0<!.("!       
2982  ?0!'=&0<25=71:7>34bW/de1]hCYob^nQSlE=-09-3?6->47MY`vFLPGY`_gwPVr*41$7@ .2'@ '#+(*; =<+HP3Hd=CWEKfT@M\FP]WT,eaPi[HZ„LŽhvŒmhylk€ax„\It@XE;{S]ƒ8L„6\xE{•6Qo/;/\K&p{@f=l€GBhI9_J2H;wp(el5…„W„ªmŒ½v—¾r–½FPi+FB-O\AO[LXYC_a:ee.efAzp;ƒ•T‡—w©¢kfnYmxg5VZ&1?9%)5*B=0ZXDo‚Lm}^n{pQx]eyXenW7_@3<(0A *3#*3),9#(3+'14786/EE:2\0@@;)!#0+@IDG1OjC=^8AM0ciAtŸ.SpObpw\yK®¶D©¶Oƒ¡N‹ŠO}qMOsB^o>z—>^rvZˆc”¦Œb|tLb/IE7Tb8O[2?M"7A)`LJV9“‡GCX;B+'7$""-4/:B,)40<3@dJhjF_a‹ÂX¶óoK`oUl¬k¬vNiV>O82A+DP8<A.AR#9K.9)083.')#)"P^"_j?G?N%<SAPr'?V"?K2ZfA`pD_rU~‚^{–X…™X‡šAr|0ao,mm0bl'oz.[p7[b&=S08O;0I-$?  #*19E$<M-=R'8"5,"4>J_<=T" ,(&"!
2983,%0"'5&)<%BO'Yf-Yq2Gd=[tF~D\hLT~8e|9\hL\rDL_2Ga?F\9?G'8L%NT+cq9}}=s}K\tK8M@2QBd~Gz’E—T˜a… MGa@=R>C_(2@'3D,)/  14&,=%2B;FfCWt>[rCXnBiy-NW0<F)+9&'1$#.10@DAN1>L5/F5›F(—C.“D)šD)’E*“F+žE,›C, F*¦J-¢H0™H/”F/œ=%A$>&q<g0 X.G+6%.'! "
2984 
2985
2986
2987 "#$!(' #%# '&/226(*4&&-)$3(+)).$% 57 -!  " #  36/39#&5"(30"$'%'/#5().!7*(;+/)&60"67!0C+-%* $%13%%9!#1&3' ('+''%#&,(-"+.(1>'#?+.!%,'&*(27/8"!2"$!'!("# 4A<!4@+8!8;#F.2 :;"9+0/$ %%%%'$ !,*,5325B!!.))4!7+%#  %)".%'   
2988"!!(:@-6L836& #,"68 163#@?/F+-6.13'8 "
2989      
2990  ,5)/<4*(, +& 81 "   
2991 
2992
2993 ! 3E$>G2.8-)4+#:/B!jZ;jsVVvTMoXCBOIKX9N=#%+/+#+REJNpBCTAjN^Ap^(@'$1-$=:06>*)21)/" 2,54 ;O--N=/B;6I.2ND&7,+32VVASoK@GAY]^n|jryynhhxlZpb^kRFxFE{b.6T>OQZXA[xpuuQkl0`^E`obk{f>]/JD.;1`P*WZQˆ}\QŒn[x6R~/KEEwWŠMGQ:\a=LtPedQq~WynY„‘_™cnst…—rf‡]pQIUYA=<A2&*!42%dQ7P[GRLWWl[njT&<E*8N&5T=F-,A%+:+1>".8"(%-//9!,'8;/FM0.670?1*3;2<J&\`5HY1H`:go0Th/V\F~{V”¶@¡¯O…–IáÀ•–­’–Äl•Öq~®jbk>~ƒM¿Àj|ŠS†jdpQ‰dAPuU8NUH\rP3M<83+II.h€E2Q=GZcNe306+,8&+!( /:$(0F8$#<3+/<%,I+e&9^*I/K<;:F0D4/;+:?,=J55A&WY.LM+<C%% ,5"6?-.32HU83I6Xp):O&8I;kyJ™*sv8v…BŠ‹@l„G]w_|‰\tb~™]u›HbyD{‰AkRz¥Lv“Al5``,4J+0='")% "%)".'4$9K1;K5FO''4 (4+$$476L %-$&"! $)#&+'?9A^Hg„@||HcuTa‡e}ƒNTfH`|]pTp‹Pmy9M_?Ha@Q_/Xd<SmHd~_† _‰¨Oq‚8Vc1jzD‘­] ¹cŒºb—Ác‘¡Edn6y€.RZ.MV+BO)MUJF>=6B$CS%EG/1F=;]BBaAH`EGgEfx5@M'+/$%$189R=N]3H\3ˆKEEKMDŽJC„KE‰IBMCJF”CDKH›IHšOL›SLŸNEœXGŸNKšPIœMA E8H:’E3‡C+n;,Y8$N1@/1*&%&$$!   
2994    #!!('"!" #&"$'$'% )%'(!-//"364!+$'  #'"'"* "#" "!".).4(/7(+3(-8!/60618/2$/-%50$#)# $!"'"!%!8#A&$ % %*/$("*1#1%  # /"-6$)3,&0*($"!!&"&"!(;)D<>K$BI72D)F=''M6,6"=1$<':)&C$),&'!$&"%).2)(%7%+ ) "!      !%  
2995  3&-+*+ ;+GA*2E19'  % 
2996 
2997
2998   -1*-2$12M7IHXOKP%!;%)     <-&.<*#1-*,#+7+-"CHDKb^MX^WZJci9]l8irG^l$<D(,*$ 0:MSO5@c;8CU09(2=*D@/G),<-$/(1&%XQnc]R-,,6/$5-:2!<J("I.$8":,mKB€ŒPou&V[FHZbwpfpqki][sb7RKOLJE\O/>/2/8@EUhVx“MH`Kp@;bˆT!`^1L/2/fX+CD9…aKuœsVvZUPGm|.@M,YQ5uŠQd˜9K`J]qKlFer^hŠah|qƒjpdpyFT\GQLGIDLK2FA1HE<:&UOGG>8WRA_dMj^H"7&/$"*%13,8'-; )8$-;%0"'+4"*3A;+4T5)2%55*+B*=G'Ub.GmG'C8(24kkPÎA[Š;s|\‹›wy­ˆ¬­‚ÖÿãS‡¸®€¢×|¢™a¥£`r™rj˜¡ct©n‹—B{’=…ŠYS`L3?M/0%08(56707B0<,66BDH7DP&GS+¥ r >C,fb$@K)?961(+),,5.,,036E0/0&53%GH-EU)SG-EF2lg4DM25+'%+*DC;:$.?/4@(:T=et/ƒ5¥Y•³Y†¬LršWs˜Rf}Dl†Ic‰W~–R{’[tœNk‹K_zEƒ‡R`~S|’Z†¦Kr–71H%$8"(')&. '$!+$?F6JY1AV-%2(('/%HP:@!, '"*%!  $.<RJ]xYh‰Rh†R]s]^sEg{IXf_Uu`Lrcl†Ll7^j=]sCRiDQ_Km‰Ysˆc‹¶]¨KŠ¢FޝhŽÃt±ØwŸ¸q Ã|½Ê]’¦W”¼Iƒ—?h{5`sA`}Lg{@dt/SY-GX0?S+[\-7F21=/,=14IJe?HX"69 &# */->A<U7Mf<J+>L-@K-@J/>J*BP)EM0DK,EO*BS,AW/BU2GT0GV1IZ2C\/JZ-MZ1Ef3Bd5@a4B^6Dg5Cb69^44^3.J/*2)),'$$!    
2999#!)&$"!   (&%('(&'+,#/ +4/#(%  "*)%0#.$'$, *#&*#&.&- ,/*&*4#%4#31"5<'=#*2$0-+50&#!$  (',:(!9'! !$!!-$   ")*'#  &!+ $/    #7-/5=5&8640'D>89C!<?J.#"%#0&1! %&;'@>N:@D63>%     %  
3000
30018 3  $D/NQ;W7FDA?-  
3002 
3003
3004    >#$JB*DT-GU=OVDSYJSaA-D ).'  
3005   #%(;.$5))($,)*1**:&,493-P9KQD=EU6QO,NP0AC`(!:(32R61ABA*9"?8&2<#10!\[.0@4  S83lmZa}aDj:%8!-49+86(7)D>8I!$2<'=k;Wa_uR>a;MbN_qff|i^XN{AQR;KQF5X2.; )5+076=LZlsBmn5Msd*2%9+tKsƒ9W[<:gRicdnxRj’GV\[jF3N@EI^P‘iPpAhzN|ycxg~†nztjsYkkSXLBH?52<9<D1P?0KM+*7)=G.HZ?DH.NOCXqGZfD%0"*(06(3#-/4")>%2#'GH?O**:)-4"'0)9=#&0$@)5/>+gRC–²nŸ­V‡ŸVu•k]m‚±†¡¯Æ¼ÅP—Ÿ‘•¦›•¶¦†ÐŸŠWc}MRhTUcw_‚e€ fušYJa;LJ)@@&B@K7"?C 87'/9'KL2–}.°¦L…Úk»™e©¥?òµ9l€(Z|9`‡/Og ;H$,/6>"/?&&--N6>B(,7,A7.o_0VY0K]CVZ*J=K?',# 16 , ".&-=')53G_O>XSZ‚`|£dc}Ku‹M~—Q{˜I{ŒOk…OmOpOg„U†œPŸ¤SÉß^ÁßQ¸Üd›Í]€ŽF€’"]W"*18DE.;-5TU$ho4E^0?M%&0*-RP_]*8V,5,7*)4%,!+  #  #*4AQoSWoSVrAXzGYq<G_DRlA_wGTg`k„`sŽMhƒ?RnBN_Ng‡Y‰`€™kˆ¯r‡±hˆ°l‡¯w‹°€…»{“¸v‚«}q•pXƒbV‚^KuS\€T_{[pƒha€\JiBOf=KS21F2G_6[d$4>/7*>QB[}C\i*S[DK8@26,:K9BQ@J]L, /$.%-&/)3'2-4,4);'5,:,:-7)6,=1>-D/D-D$/B%0E&/D4; 5H 4H#4<'3.!',""'$')%    ($.!*!)   ! ##"'((,'4,&#'(- +$ *,061&D"*-+34*9/132'<-3*. $/ &, +6 15*? 5."& %/ 0)+"(/$-',+/-9"9-1)  ""% #'# 
3006  !   5$+3&   !'1-0)"6A&(=0-.*.4+1"& C%?L?L+I=+;W@A; & $ $$ "
3007 
3008  (;-)   '&+!!,;'B-.#  #%1$ ;<0D<4?&/-!D9      2
3009=-
3010F8>H 7A1)(  )2-H8 DA0 <@JB%LHMKG?SE=G@H4 
3011
3012 
3013+8,$( # '%5&'8($2*! (2-.(,?250,".2XW>.I(J?'9J-*;$0A4CI;.#1B!(Z4A$(4-#=,!+ &45:!bb1t”)njEM)DQE=ED)@12@D[rI;LQ|^ESt>7T@JY:2Q-++<80E%9BC_`_\ƒPBV&|U#®µT¢²u/‹O%1@MGM`pklknŽG~‘gz{=as/npSYmJ`SSpkhq†znvq£c­²cŠ“]BQFIE97A)'/-2324A9<;$=J*5A81D2HM1PZDFdD;H$/ & &+0&)/!,"(A:81KP42I.+;*"0< ,:+>; !05.`JU‰“w{œxpad¢N[q]Us‹[‘²{†j‹b€…ˆ„„Öúyv·O>T?LX<[lNZoRpwcb˜MNrB?nAN|;S‚Dp-ai$:@&žv?¯´käÛ{q•YYu]¸“•Éÿ|Â8Cb?GbIOo3=[0'G>A*6?!-+!6E/CI$23bE2_L4BF9JQ1@B4PF$73"99+&-19 *3-";I6_q3vŠFs“Xy¢NŒ¤S‹¨[Šª_†¯aްQ„¦Wu•M^€L|ži´~Ãü‹ÏÿƒªÙygn}£^޲[Â2†!gs(p€+dl#Vc-k{D<ZB/@AH[/\g$fk0Ht7'=*! +;)(74@'0%'#2/D@AZ:G]M^ƒJt”=Xg>m€Nu–Lf{L]~_hŠWm„S„žN”žY–n‘¶fu™ft¡rr¤qx¨qx‘d[_7_hU~fQfXEWF)<A.F=2PHI`OVoSc|XPtLFQEBW?@\,<B-.;ANh0GO$MW,CSANdFJ_=Tl5Ue/K[+QZ)AP;:RAH\F  
3014    "--'1%"."," + -...( ,#*$)",&'' *"" # &*##""%#.) (
3015  $!!((*0!. .&!#*!&,-"  $-0(<*8-/3!618<"(E(02%+=&80 .('%%.,217/<(<#-2)%6-%'**$-2!$4,$ %*0&'"
3016 *!+$"!- &(           1*2!,"   4+ 580M8!)<"(" &)'+.%%-40-?<20CB /6%(/2,.. 
3017 ( *-&+  +)  "  .2CQJNK4T+./$! 
3018 , ?6>GIK,9I44B;KK;=S,-=",   #" #"5,19BLR7QG9Qd6:K"6 NDX[(Ta.!@ ""34+;,.$"!'$  9(5"5-9'?=5MX5=F$2G4%:!(2=I*1' J>&3*""4):5Ef/KU2GD-E:1>+$=$69C::HN.>RS<B819181,;@3+&+ !"D1HS{Z?VJO`1B[^ŽˆV†X9I481GMQhwdMj_Q[g|¡g{¡Nh‡m}‹Wˆ”Kœ²lˆ§dR`Qgxtˆ‡‡‹s~ho:LV3CI)H0/2*5(A=+JK/@K%/;*E8,KR;<\7GJ1$<)(*5(. !*!145%.<$G[,CJ&*: ,148+NA&6);61@;)Œ_&”©O¦k{˜]‡—p’¥Yÿÿ|o‹Sl…Hf„WckgV~]Rcac~”s®¹¿àh›9bv?]ƒK[uAdu\K[V=K>IG98=B5=G>FVEORH]*=BYSxw‡ƒt`Cyg:gT}AY—TkL-P*"8&0".((#)):5)2<;&2*)45'O8;>73HC&G:(43%57*\>J<?4JB&M^+-=3/*41_uC{šQX~JFcR_‡g•ªi¢Ínµp|§i{©ZlIWyGBkYTqi{¦Š”·…u¡doL^}_‚›YNo[W€J\„Iy”R‰”B~‰?Qo>:H(@N0}‹>Sm5,C8&&#'9$-#%5@(2= " %-/DR8Wl:XbT`zLZzJIs`Qt[QrJ?\_a[›aˆª^„µj¯hj—hdŠJPugqšivœRBdA4@2.8;/AME]EGZ0HQ.TZ(DE5LXDHhJSmQLiKcyA_fCfr6kn.QW,;G8E]*5K+9J48H:AM:EUCH^6M^=G]8M_22C<2FI!   
3019
3020     
3021 
3022
3023 '
3024,)-,54.-")'&%-(&!* )"$) $ $$$ %#  "#"#"#!"&#! "$##*4%;1'0& '$+!%% !$(&*!"2 +/+91<((@2+2(,7")2-+2$*509.<.8*= #3)"/!-%" #&%&'&/#"0$("&0!+ +*$#  "&$&0-&     
3025    
3026&#% ,(.6'9:(/E3*7(&
3027 &%&,#$  !' $$ "
3028/3, 6@)57%8 -&+ ",$ ,#3/!#. 
3029   + E:SR*_MDOIL62D>52C6+#F4DE 9:-2  
3030
3031'')22+,7#A> -E6->J?6E3+7#$ * =\V2XcG`cIEaA?Y(=J!MP`c6bkKKoUIU>';$:* !&!, 
3032@-&*=&.L^CMV05G.#=$(01/$#   '/ A.*0#5+ $"(""/'.'.?@#8J&BB2?S/DS2NM"eY,ib!6I#.kW[@>9JJN=i471C=a^;X-4F"9>;LgN7S88F*cUdFkP~zN\zj^baaƒuŒ€q”@-GK/:uniWoVtv@3::?8 1"70%BN,M^3GQ*/5'23(3=69W8!90 !)-$-',+;  !=F"SX(^@3>a-JH!'4$*-(>60C>%SR.=8&sL)‘™b™¾Ñøt§ÏerœjMg’m—ÿ·ÜT|œ`p¡\RV}I]`H_cW]vmi¥YŸq[hI”¸Bvx>pwC`iAjd/øÈ/vv*\j'a]-9A<Z_:3Ž™Lÿ¼i¥¶^ެZDm;%9-'?+!  "*8H8v‚&qˆ64AMAEO wV$‹M5 l+ra/6?&%/<6 H8,JF"1712:6E*1@#4@JJ$HX=>XJe€:zƒ.qƒRˆ®kжhl“Zm‘V`€N_z83Q++C-6LEm]m”sYƒRkŽCB_E`„N†Ÿ=z‹FzˆO`†[‰«W}•Dl.P\$/G6KlOWw+8F#-&#,+'+ +/D     $/E5.A51GA@YI1KB(=@*<<7K5.COJ`X\}^\{ejeošSc|JTyH^sN[|SMuGHX-GR)H\-6:>=HPXpE_oAWu@s4Sa9OgBD\HKe\b~enbe‚Ye}>]}7n5Ur1Wc5dt2wo2J]7Qf<JW<?T;=T:>X:AR50:;"  
3033         " )),0143#,3",( .' .(#%'%( ! %%$ & '$" !'$'"% "'!&##! !%#"(!."'"'%#+(7-E$82#4(&,#4!- )$!'%"$$'#$ .&-&"0($/,58:!@> 9H$+D(3=/?"%>' 4&,#*#!$%'"(#++&*(!$ /% %1*$ %" % )     
3034       )&-0 : $()'4) .&-  ! 2* .@'3#,'-"
3035! 1.036F7D,4=09?/AF0/A4)%4SJ#KY-E8-4
3036$   " "/+$8993G@DH6+@78C?-$G/#>S/%@6??04I/:$  5B1 >>6<$/5"3("&-3 ,:=<:<5;/8<1B$,
3037$ 5GH?B]PUSI]iQXfIZe;\l>]_M_mV8g[!B>/76%+#! $$3.<*(!!>;92/J@<=JG=O23 76! * 
3038 0&$5'($'&)!(*/%,3367FW<FU:8F>P_[e~hCk3>M/4J'4-E-FS83TH>D"39,8E:9Y$5:'PK75D80-)4DLK:kyai‡bhfF“—\Œ™XmllDb#4<$GXJ3:a]zgHu07D1./ <>-@@72=B2A2+1**+=&.@0('"-2X1L= 9A*"#?1'DL;+T/>I.¬†<€¯$˜}+g3?Z4I]1\O,|yVy™pWFb–†¨–ÂsŸjh„BBGpS]¢Q…XeZ`lkLlCl|O^mPNmE:V_QMKfoLoŽ}~´Uv•SoˆG[sn§ÇÛl¾Wo‡DhlJ{š(‚z=suu«È}±µ€¡zTy`*@/3;!)*PC26,.;;DKb`.LP81.Sk8ON7dVPŠTu\YyyH]h%P>+/%F2&E@(58$8G!)/(0:'9D*O^,L_-Jc+MjHg•L¥ÊU¨¿i‹²UTrM…œL„›C˜4BR+>#40?PVXqL8SBjBu0^vS…¦\¨ËZy¡JXu]•¹hš¶X|œH=\(#1$"3:0S:N`!RZ+2,6"(%0 ' % '!#*7PL;F.<)$++.,&(/#'1$/=)6@6QjCg„GO]PGl\o]w˜JsTtŒEg~Bk|6F\1I^9R`-4:2ENGYqVe‡DNb[mRm‘>lƒIxˆDexT\xhi^l‰XkŠJ˜Io‡Dc‡D{‘Bf‡Hc~93E?DZAL\0:C2<R<Oa<O^6EJ2      
3039
3040    
3041  &'1-+3!'(&.(#4,.0%-#+#$%"(%(&(#%"( (! %!!' !#$$&"#"&!&*#!$$+'+,2%.'/#2-+9*>'6,)/&'+00"&$( !''$!%)%,4157:-B"5:"9= 3D(+D7+;6=9"'H%&;2(1"$7$.!*#+#-%* 1"/ -*)$4#,$'#-"( &-,)3$76 ,+) +$$#  " *..*$- &  $ ! """##"%&'&#(!&!! '!$%#,"  '4%36:856$*22%)4-*(66!3')**)*7-6B1E/DC59X38N6/I96775?77E$$:)+ $5:B=> !/,*! +',(+0-33:-.&) %&$-%#$&$(./"$" .) 6 L4IS+3B68@5=K+';&%!3)49$-@$9A28E+'51+0%)*,C"BQ;L5;C8%LC=J_7PeL>TQN_O<ZO8^O=DUGL!+"'"  *$-,8)9B'+#,$#!)&=*,4_(,=,4<7@T4 3"4, " 
3042"&# #-&+*8"<DB=-2%#%''! - ,)7(E;9?A>BD1@/+1/5>8"3/(*AO(UT1rk@nf>TY'N_2`<.W^!9jADO-4H2:LG,:?PLeffdIvw•—‹j€VnoRz%VkBug"r˜GSU>PQ0>K8B-;>-99'/7#//!6I5>"6$#!1!kE °z9Äê>BS$J5‹r”r"Zc&24&[H.~†~‡pv·p`rJpt0Ug6dsFy_Q^_VPC–’o‰§†«kX€WXx9\gNSiHHVUZvQ`^C—M…„Rc@[x9nGDiM^uNDaWGaTVaNb‡Cm}‹p~TÉ›L¸ºGÉÝW±œc…´_Df‚KNk>UfV\Bbj#WO IGA5(Š‚BÕÉ5]!Š€9¯®L¤©#—y$<J9ol3pmDg[OZ\<mXOXf9XM+JA RK&KI!pW$/8!:@"FN%[\/Te1Xl/Xl4Qk3:VK@enS…p®Sy¡:YxT3KQUcKq….r‚BA /IEf+**0K[[Gd~Rw¨Ze‰`c}ECcUjŒs…¡ba‚>&4!",$"/-GX2Fb,4E3:=A78+1.1')% !&#/5> P\<`ˆ5Ff0Kb.3#&04$,*2$-"+#61?ZKXuKTl:NZ_c„bDcNHtbu—Un‡InŽ9Qk1Mi<b{=co+]eGYo]c~NgƒXeˆbx•Oh‡OWSm‹No|OrŠPu‹W‡¤^–²PboB@j^w™TwHYn;OP9CJFBZ;QZ0AS=IXJLZBTe:!   
3043     
3044' ' $!(&#'##%#($*,$($%')#&"/),)*$(*'&(#&%#&!)#+!+'%&""!" ''!!!'"'+())+-.-/-1;!G'3,!2! ,&3"8!+%'!!"&'"%$0'/4*6+7):");#'9-/0)*9 '8*5/*,& 0( *-/3*: (.!/$+!%+'*+0'4 1!) /))/876#7:'; %1%/ 0#* ) &'##(##'$&&!"!'(/,61-A'$/"# -6/)0%""#&*!'$% # +%1);.!6B+07$62@3&5>*?&-<&(7%.070:!'84305??$;OA*D,-<3.0(*5*36-.@-(1!-*%>< !A)!$:,3:":)6-8*4'#)!%+3.8.5:4A?K!*; 37"(* "& -"
3045E::H-9CI3G=/='8>,490+(/9-9*#3%'2"462.D'50". )0!+1 ;E4:N0K>-EI6;H8'==EBD<JE9Q;3CACM7CO1'L5".  2 FI6A"+6 "(*( $!%5@6GFC*2L"G=/1;%@:"D, 
3046-&2?!!3&-*,>2!+>.3<3:D2/a'#"7,)D"'0;O0…,"]9!+#-8%'/0 /18#@D&.)O=TY1f[E…v]k~WfyPNYOm}:]lM^jBXJ6:Y*ma*HR.FO1MQ:T^H]ddˆƒo„¤lt^u{ppqFŽ}Y“j¨¶OŸ=.?*9O%49&&1)6*>.#CA->/#"0,#‰~±«,–½Y•†ŽÀ—UY!c¢>‚­r Òt„¢Gp"fa6€”he—Rƒˆ^vv?†•O¡›<’—K§ªW¬È;¸»>˜­p¾ÿnYˆmOwHF`Qd{Lm|?MO6«¨N‚Ì]]„ur˜cgzG]sO7SNNP<v›9Pg({|6fp6MNG}Q¶¿b¸Ä¤¥Í†Ÿº‚ž£oHoRa`2Zu?CN8RnIMlFO\FZc1NR1‹Šmc~ˆeK–½LRRlRTU]aKLF-KHE_ZHOlAS^9^\?eb9X[0JV)LF/KE1>J-4= CH/ko2`x2:R5*<2>N5#6)1#2?,-@?VdT_{C"D2(10DZKZmSDfE!E#*!(&5,8P>LiLZwHQc>@W5?R=>X\@bZZ|,"0'#"7D1F],GY=H![e,sy%no(J^&Q\*Jk CR"'+-*/.68E:M#[k6m‡B`u=<L3(?+"5$(7%3C!/=%.8$'# ,6!<>.K7FaB,GS5C7-DTMn__‚N\zD[z/I_>>WHe…Er†CMiNVtWNlQIfSY‚\\pEKcT\{I[zQ\|O\yWW~a[‡Lau18JQQƒd|šPb|D[v62@6>RFZo27B.*8;!7B+CD!!" 
3047 
3048
3049   
3050 " "%
3051#$ "#$' (%##)%' #)((&$$$#'$&')&+$*")%0 ,$'+(( ## " )-"**(*,,*2+. 8/"=6!F,M+ 8. :#6)5%6%+&%"##"#!$ /"027>-A$-8$05!/4 )7))4!'8!'/ 0 ('/#!"!%,' ),/+3'3&+*1--7-6!/*/./-.19("+")1-&1!2), "/2(/<*6(0/- 2 #"!(&*! %$.%-0!+1*(3)(2#-*%6 -!%,(%"  0 ?#   ")#%.(&#-9&->,/;%+<'*93(8.-4"2;!1;!4<6D/-G-!3$+5+/76+:4<4$*U(.+#'%0(&-7)787H/="52,,5.3!0;$4.#-'$,"!**5#==E?-E+'91-1,=/13?3E8'7C/8;+0 +*;'7<72H2;-$3&/8(+2.&+'%1-!("#*%'% 2&04@0@@)OD!=K!D<$6K0/4,*@;(56115'&=85)933718>27H==K:,'!",4*-+)@8,L;@*"(-05/;-4?04U1":'35/860=6'4Q,)A.$& %
30522'6>')?3+/"9<2,3')L+(! ! +&%$Q?!Ht:($'4-A;Jއ8vžXr$C`-&3*/!)2)$, 7*FP5mn@x~PMŠnm^V‹`=l@WrHIYWciSYoBJW?htPz{A\l7\f5IcB[VAw…h{w‘µfš]Iym[j;lnv{‹£Ëok1R`4-$#'8/ G0$]B$=7I2Ô³j˜Ê[œofys_¢o?C9EVV~qc´‚sƒb_{Ra‚Gj…a_qJd{`²±l”®h‰ºn‹«hb‰zTv’¾Ã¤Ÿ¹ŒÉðŠs–J^wHYu?[oZl–dWkEwŽw]Š_Œ™OEbW8JR7hR0H,:FCqpa«®G±Ðe¡³R¨¸C³Øv¤„ÇÒ”†·s}•|‰šƒ_‚CAgEIdB\[59=:9B:c\>UgEQjHd{f¨‰Jòdžo_JH1›A>S/?5)I3'^F8KQ<T]5@U8X`=EJ+3B,78&HA."3#9C$4G7H`FI[;N[&GR 07#)4>D8B-8$6HEEb5%&:C!$5>@Y=-*#$1/;/;S]1]qEb…<Xs3LQ$EP&3H;3E@Sh+9DAEOHQPBR,CT/@T0bu'Ok<ZqB]vJTk49Q@Ub5Qd/[]BH&:I&O_$Ng+Um;‚ŸP”³R‹®;{*bh"PU6:"-#(3((3 #$ *68S0FQ#&""143MKB\A?PBMo=_y3J\9I`MhJ]jHXoULd?YnTiWh~GfqDCUG<ULPlJQvSiƒKWbFTe<YhAip`}†RWgHDf@OU3ESDOb69D)19$,6-*.." "%!
3053      
3054 #&'",%! #$ &' %#$ %#'%%$+")! ""$$ ('$$#%" &*+'+&+''"#$+$-(%*$!'%(",*)*!--!+-#/1&N3$O4&V2(N6 31$; 3+-'$.$!0&4"%*$"!#% .!1.;8$<8):;$5<#7@$-9)29 *:!-2.5/5-93454464506)4 2,208-1/64 ;/ =:4<!7;628245*4548;.?)51.16/<%27#59/D$1&)#*(&'!%#4%3;.;(!2) #"#!#"+""',$& #!:?//# $"" $$"( $+$#$#1#%+"?8#0F#$-!($-(2&62+-/%9.!1+14%"=! 1".$22,#%( !/'(&$.65$@8A1,/N+%8!)/,$2(1'"# & $$"9:+.C2'98%/);+1<0><4A5FA=RY-?W+!:#") &*&,83!/-'% # !,+"$/'5!@$/E-@:E1292*:;9E=2<09B0EM)/B"*($(/?24F-6<.-D+*,'2,0.31;-*/-?%: #$)5(#"!!09'*.&0:)2%,=!D5 ,*$%B0#.Z83$)# 4(%8=7 ((+;-%#+"8*#E9";*(#+GG)F[O+ "%&$cy…~SH>JQ<OY!*13: %D"6UG,-V#%.&I5Sd%5X8S-0^<@<A]Z@A?Gs>TXMO]4Q^Oa__f”Vˆ~S†QZ}HEj\UNXw‰ƒl‰f(29'.J;++WDD›œx®¯deˆE,>'")&"&%6%'A:"`83q‹5^{CXG®F¢^*UW3GYL{“]gdL•LnLduVLhJ˜o@ˆª†{V{jEqiUdM†‡PĨo¯vtœ”‚£^£¾J¦¶Cc{IvŠ^sˆGbvE†T‹¬dPe2D^3JS-À°#º—4äïdÜÿˆ²Öˆ›Ø€‰µ~”·rz¢feŠ|Ž…{Îáw†¦upŽMMI-LQ:<]>=T,.C/DM>:RB-D@/6F‘•Ì₇Gw6 ”km -'I8.ES/ED2Pj815.9I7BF%9@#5D&ZT(-409-8(<M4jr,u‚7ˆ•.Vd&?NNV1Ym&->-5+)+"/!"/$*""%'+ ,#'7\_2™C~PhˆGz•EˆŸ;Œš*Li![[-mu,hl(}z-[i3[h+CN&7G)=M3Xk4E\59Y9<TD=P+/92;R<I]BKl;=S2O_-\q:`:RtHb^jeªd†ºZ§ÅJžÃ?‹¡:>*' &*!"%$449S)+)/":K0BO2?Q1GcGav<Sk7ZtK]}PauBUe@C_IMnM|¡QdxK`„A]h1>L6Zk?QbOZ|CNo9LV<A_FGgPNhJM`4BG;P[6O]?Uj:Od$9>&':,?@'($&&    
3055  ! ( #*%*#'#""!!%'#"&)*## !'&! "!  "%$&0%++-'#*'"($$ #&!%&"*')'-/0,&10#73%e/$^9#P=(M0'>-$8$0(-$#()!%!"   "!',*,.03$-0!30$55)+4../!,1$+.&1 7-",5"-6&57$0: ,8$(9 *1$5-7408/446!552;!28*25&45$49 76#)6#.0,5=<$4>'09%>4$9;">2#2="?=*73!91-C00*-8)979F$2A,#0'&''"#$3 -3/343**( ")!0/;)39130() /# +(!+&#'#!&%# *&3*&'&"#/0$+"#')!#'%()&*& '& ))* "2)" )%0%2D*"2'"-'2"6&&'**04:/@3C'8I)"5"%0+("! 6*&=-&>I@:J@';/.)#-!.'"'&';*8(11,*5'07-3&$"'=6+NN JZ!+L',6!I6/>U5<J<M$6N+6C9!82%'"-/#.((!+$%)2.#/8%34!:D$, . ##6<!&C4.%6$00 06:2#10+):&(&,098=1$GJ44D?:!AL+gd8J$ /',0Ib`Co‹BllBRr&+5,,;)/4$".9 (#% (*1;<0(:C/5K)IHD5O@=]?AL<281V`iWQX‚¨on…]e}D<lL88Y;KP(2#(2cT)ÄíQŸ¹is¥zh¾i@})^l.28Z+¡‘Tl%’l:©ŸIžÊ3d’3“€Ï—p¤¢s—Q‘O‹¬piNh…sl‰`‹Œ[™¥OŒ¢hƒ½feu‰<Y]1‰CiˆnFV€?WYSW[tU·y—Âs}ÀTs˜e‚ i•šXƒž}WweJ’I:D409<„˜ÄÚ¡ðÿ«Úú£‚¹‡‚¨užic€hR^Y…nV—¹‡Žª«¬¼€Z–KVeC\c7¹°)Šq#‰nfZ)@?&"2 5%,<[#4wCCKckNQoid}6<4 (*+706065<0,7+5#). )2*99&;A/-?!28"+ .?4/PF=UYV}VRp21D&@Q:&=1#.)34$-5%,!(8L%CL/qŒSnœaƒ¢WlU…d¨Za„DvŠ3F\G‡™K“©KU{>OW5W_.KU dc)^f5‰6ut)qp.^\0AQ0Ja"6E(4H8ZnDiu.Hb9k€Anƒ>Mg8SxC=^QNlVP{jYŽq„ÂoœÃ?au"+4A :C$'#%") ':+GV'*%3E22M//H2EaKaƒGar?HiHQuURe@Mi<IdIy˜Vˆ¯Z€–Pt”Nh<Xm=i~<k~DObCAR<DU5K_:CU>G[8Kf1HG29E:`i;]y:tz1Ud&4<-5B($)#+' 
3056 
3057 
3058 
3059"$ .+(%%#!&%'%&&$(%  %"%#%  ! "(%*"&!% &$"!$$&"($($((*+-/+%=4#J4#^1$T@ W60C2"=-$:&*')"(##$##+,*-+ '%')*$ +$!-'"2-.*,(#'"'*#,+(,0.5$"1'*'),732;!,9!(1!&0#)0 1-#,/#20(2',3+3!24"00,247"4=)5>);268.8#31$4*/3$-0*7")4&32"/8+8%,4130)/1$-)50;:/=,20-!1, 5462)4-3:4,B%,0)*1$/2'3(+',%$" %'*$',''.0+4+0!+$*,.56.!)1(%$!/)&,2&3"./%:;:94?%E!-016*4AD#6K(#8.9"*:/8"=C2G#.=%,.2+9*(9,04 *?!8$$1' &D64CB7?;6E))?$:"*+&$  #(#--#@C/:@8:$:N6R(3H4,GBAW800.<"*;8)*+#3+301+53!0)  #'' '&&2&'"+,0"")2  4,')
3060 /)80*$-)%+$76/4('1',:'! %$./A</VM/apDPb7<K)DH2HN:;* .$8D9E%3><L4|‡sŒ‡Oy†Ucr"L5˜Š™8Kg!\AB4 "(*)&7>D/:P+!3-).)'13N2.=N&DG2aQ/f§qŒŠjt\ަS‡¦8{s/82HEia3Ž‘”ÅĉU„eERm08<4HJPw3;!00QI}Sj>ruf®Èz}¦x—R©Êk°°oƒur{´ry†‘œžr}UdˆVXzomhq„’Xvjf‹fQŒ\LbOknIr˜b¯•K€’.hr4|ˆMzOqm~¨r„©hœ©^†œkM‡oXp`F`Fos77M<CT-LWm­ºÎãÄï»ÌÝZyˆVj‘axŠAªNøéq‹²unw‚n„ˆarD4F:A^Rx“rÑ|Êô|Âæ\­±63I35.:"$.HK6*1BDB9&@=#-%#&$*!*,!/3,/@B,1]E(6=)3D DK ,6#3"'4&)<4=O>hp75G.IT)+;%3&+&!$ 0)(brL_„QNsX~¤fzTYuea‡^[hCnŒE}‘=v—r™µf“—6Xb;|†BÆÌIÍîX¯ÉF©Y¾ÖMœÄD€¤9jr9EO)2J 4G/LfE|‰6KnE}šOx’AWq6D[7=V5B\?KjCE`WEkqw¥Xv## (, 1>:D*-;!'" %,)@Y':?!.8,,<!.>$1KHKkIM`97R43LLG[@F`@NhSv›j‹ÆlŽÀ]ƒ›Yn€JUiCJYLU{Hm=et<Sd6`s:Wf4FP@Sd?HP2;GA`rAUoLUrETj4JY,6C# !!"'!
3061       $!&'! """%! $##&$ " #) *&(%' "$'+*#&+'(&&$*") *%)&'(&(*/, A-!\, U8==*8-(7*#;)&8#8*0("'!%'* " $ $#%' - ,(*&/$/'0((&+&*'-$*%%%!'#%#"'$*&4.22%.5)-0%,,,*,+1+!+0),$+,1-.+".1/3 /,"3/'12).2!-4''3''+#-&()!(#)(+21/740%8, ,.-/"0)-0-09."6.",08,234-".3"-1+2'/0&-+!0+*,1&--'./0/0+26,,5/0/4)2538=#:D&.I&*8*(@7 ?I+:G$40.3.$%%$!$- &230!6.#)$.!-3*3.%;05:)1B!+?(00%8A#AW4<K3AF?X">P)<F&3J7DI(WTAb!9D$.:47 7>:N.5+/&+2$8A-:E8)B)0#"'&"7+ AAFM0:B45F+6)(A9&)5 %'1%%*:#4B/*3)@5@J#0A#&3*'.#&% ) 5=2; +=%#3$&$%% # 5& 1/2;#16(-4)%&!#*!)#%.%7 11#(#-,76HB%bO/GM@H^RhnUXs4QV+LO44G$WK.B/;%,>*,4(R?*\v[“t®¬x‰¢_™7W€ll‰Ÿg´ÃZ¡ÄI}¬*) '%!'&' -$'$+3uR/Œ‚HœzeŠtZƒzTmf…±r•Ï\™É2x¹H³âY‡§V‰©¬´`‰·5kg"KW")$13:/M<ab,{z=—¬V‘­’ ²t’¤}¬±”¤½…²¦f¼_g~dv„jŠc~Ju‚KmwLŒŠQro9iwKµ<Õó6g@v”M†§|ÞòvËS…©_`†dMmV{—\¯i‘¸€•³p™µD–§JœŽ;ÿÿX‡™1|…1do>q†r–®¦»²³Æ©ƒÒ_‚UDâ­eþ•´°»ÿÝuž¯WhrP@YI$65;0xjV+6N7I•`|‹fzV=V!/5,Lf#`p#4F)*/"&/+%*,-"%"&" B9-0./"<@&LH#=A-XV'CZ+N`5cw JN("4 $0:SjNxŠ<Dg/)""!'",%! !!!,!#,C\\Ka9YoL‡©m‚§Ph‚LoˆFŠ­Fg…KSwSHiT‘iЦGrvI|™i…«w°×†Äåj©Ñq‰«lc“_Ž»Y¤ÉE¡µ-t})N`,F]Mx8Ug>V}Xb‚Q€™>l„:ez4Ph4Mi29Q4/@D0Q\]ƒ;NS(1.'%#+$+.,&5H*:M%6> '/$4$4.!9?1H/(5$%51,F:9I8ChKIocMrqU‡niŸbm@DU34I?GXNRyJbˆQ™P ¸Q…•Fy{<I[:HR9M\Ccq?Wo=K_BGa7>Q(1E '&"&##
3062 
3063  $ $  $'" $#  #,.#*.**0%+,+/'))/+/"(0(1%*($'('(#3%<-Z, T7G='/3)*&!'-.(,!9/(+ *$ #!#)/ -&#  $%+&***(.$,+*,)" +#.'-+($(%) -"% !(.$ +&$/&.')%'(*%**-%!0(2/--3/5* *)+$3%4(3)"1)9- =,;.;2333$',&(+&1573$0/0-)/&'!,#+*.+,%2/&4-#506,.05'6':,1,/(3*+/+#.,+*;*"4.:-<62886!14&5=)<9"1;/:88-.E)25&45+7G&-F&8: &5/(12'7>*8I--C-302*C&341K>:(9B /P .8$#@1$11:-4?-+<,;229-!9('9529:.8-5E*4B&,A0(?9+88#2)*/%9=9;K<?D7,A"$," %( 2*HE9T,3C; 10->/:F(5E5,)2$!(6!3(+)'1<&8>$:?:/<.#-$    ' 4,$4+(*%#+$0("!%8.JETR#LZ-9E,)5"//" '.6$&,$=$ .,9%2$B(+I0DI?O{@2L<=XL;b\YC=9P1@F 5<8P^;)G&>5(>H!RH-XwQ‚r„‰‹`zwsŒueUNZIšnu• –”§j…z8S%0#% &)&,W@ywFw°`NT[M]GR„H21.78[K;d|gfdUCr’m{pWtgx†|sŒynf³ÄWe~|p'€„9…ŽD“r„¸™S†–v€¯o¤™k‹®Š›q’”¶´wœ¢]‹©_ve\‰KJ\Ng…Uq°r¶h»â_¤×yFs€Oe^°PoxJxœŠ•«sv–S…s?§¥C¢Ïo¢Ä‚_¥wY…tŸ¬„ Ós²¼fëÿüÿ{bœ_…ŽXˆ¢i~£‚m–yž¥Ÿhq`J}rz³ÿù“Ñè©ÿÿΙÕt‘—F+I%.-2M&*8@0:-4'.6<7?52B&*1&Rc0.;02<!*'"&1*0!„-‘ \X+2-5(8<!i\-‰’>}‘,;C-4H2 0(&396SFbm'*2,&(4DTj`:O! . &&% $!IN.¬$b^>8-+A:AŠ=byQeƒ`SrYo›SWPo’Ql2{{7oq6ei[xŠW^qKiyXµÅu´Ùs±mdh‚œT[qBi|[u—kn¡eŸÈ[´Í;†H…¢Htƒ<f|AkyTuœZ‚ P{B\u4-G+#.'!!-2';?.F$#6#'$$0)4C#.9" 3&'0&#%$+$!.!2!,%4*$7,*B;C`F>aM?WN>\^e”Can2N^:@]BRo]l‡}Ž±ŠªÁ‰ÝÆu³¼K~}OxpF\]R]zCPh=Ur;Ri4X`.5C+-/*&#,(  (
3064%#$ + 
3065!"!!%)-' .2$"""  ! "'&$$"*%'&*)-/-0,7!.3826;3<&4>&-;(3!/3+4+-(.()"*#(E&J/=@/:.,4""/!"+((,-)%%-"!#(4!7'B-+0($(-#&% +'+*),%+ ,&-**&*+1)/-*)),*'3(&# !)!#$&&*#*&*'((+%)%'#,%'/ +) 0)...)7(2..-#4*4-1)*'!0)#+(%+'."'&&#$%,%%-,$1%0/!/( 0'/,-+/*6%2,0,1),%1&$:.-- +"-5%('*#5&1-0(5(7-66+;#-1/4)5 01!61#22%,<>=)3B+:423 2->6'1E @7!8D7;7D0/D7=<'BN"<M"&@%,8 09'5D'9H3,L,-3!!5$*$(1+#421(0,;-3G MM%0H,,=-*B18)4*!0 /025;7#)A7&3;'-0&-$%#.)1-#/7-06.0U:()')2'41!=<$D?/7F$1400$))/$,>&18)/75):*2%  /$7B A=BN!5?8<!42!5(!3&31;#AA?BK+H7)7*&9&28&?M?:6U!'2)-)3(#,#0( # #"$,2HJ9T'+A$,80\b<7T1!7- "')*81I88?&8K7[_3FeFGbaF{v1dY*L!(6KCDxt_uwpt‡e†WP`+'< $.({[ Žj8Šš^uœw:XCŸK„µSLrTO)‹˜<©´VdnGHX8QTjnl?Ž›J¦±S€tNÅ磇ÜWlqaV€ƒˆT‚€s…zbsWX`eIOs•€cÉ×k¦Ëa•¶~¿Ž‚¡t}®e:kJ.H6q`U—¢d£d˜´|ŽÂ}J2&0(”hÏílÎÏ]†—yt™fTne—±šÆé˜{¢‹‹MZ_QmehœŒe”£’Þÿ¾u€yšWŸÊ‚œÉpr‚iXuVm‘™¬ÐOnyB®³~æÿÿ³Û´ÎÔÍ ‰vRfJFJ!1;4E%(#/0&!(2$8<#CQ"C].!QO$49!,5(1&HHo¡¶o±At„ E5$^J;¢±k£»}‚•X*E-,= %) )(3-8D9!+)7 .GA&MZ@Yb!:>/.31*,;9AD"ELJHf|C`;y,I\A™µAb}[jˆLs–IUnHiƒFPlEVuLˆ›Lz¤aÉðS°ÔN™œG„~J‚–Yo tWw_@QGTtPg‹Qp1OhPk†LazQ_s{®l™Ð\³eg¡Lp–Ly›Wz—ay¤d„¡DUl0&&%&*!'$-$*()!%&#()2>+,6"&*+ ')+ &%  -'&>5:O/8L36IA;bREi@:TAWdDk}Umo`}‹]‡‘]…Žrir‚YixLDWF8TLQhCUpAQh5Rh2HY-\6&U5#-;" -)
3066 "W B)*% .+ )%#)#-&-,,"&!/&+%'*-(-'(%&$(+'0*(--././-./3,0,462%892>$5;'5>'08%.6$/920//&/"( # .>-4;*:#'2, '$% !#&$)!-*!)#,'- *&0#;(A-\3RD'66.56!(6!&'*)2+.1)2!102//.,44-(2$0-#0,!*+2,+,-*$))&*'*+,++*%(.%/)/#.&,,#))3'-/!((!,'-) .(!-%/%".)+&2%0,/-0*4-/(!-#0$&#$0%#4)".&5(,%3(3(<(#5,$6+/(*)*'6)%+,0$1-.'(),"..8)5'5*7(!53#3->-41263/ &1/33-!40(7:#6:#B4D6!6M(69#:E)CD(;S,AE-;H&4M*2G62>(><4B *A 2<+;8)6E"9J"3E5?!(3 -))%*".9$L&6+,E@:;F UQ*J+>+6RAR06Q60J?@G(-;F:?N?PCQ&%N(I6()B%1#.2()1$6#87%/>*672+9=*/+%7&"+$.(.2+28%2@,)2*&2"%!   K3HT;N->P5CI:?F1NR0?S4 =1,("0&),0,),6-(6(08&&040#?>20=)$&0'-47$=M#B)"$2%) 2.F+)ZR#v„Co C33KG8B=#5GI8*.&.#+$6A06C&/.&.9(+ -*)*U;mDd'ZL,1JJXLp{Dyy]f +
3067 & vL †šL©§_¶±v¯Ìz¥¿.‘§eqªz|On;}¯oRt[v^g¾Yc…:‚¹ch“upŠ€–²²”¤º}ŽºSv•QgzbVj^KilzbH‡G¨¿B¡Ähx’ˆ_—{f|niŽ]f‡b‹ vœž5§±0¥½\Uwiƒ™wTkl0GY-K;#-!1FBM–h‘£‡Íyy£Wh‘JRdn®«Œ¿ÁoÉúŠgBÿÿUÂÌp¯Å‚ÿÿ¸Òò_Œ«€2Tm7UpSrL/U.AJQKi|¼cÿõÝþ¸š½‹Z}Œ5XY@I>2D-58PX&@O'% %&;4+5 '2,<@)*//J806%4>".6 (Mt‚†þØ£µTlƒ)~jg­Ã Á‡|”Q)- $3!+@&8(!!."202=5B<M,P`>€ž5`s0,DM+GY(FM*&#5A3<N./6;4FAH[dR`O_u^ez>bqUkxUUtJ|P­B¦¼TÃîa©h¥‚·Õq¦Ì]°ÑMjzJ;RD@T.%5(-8;HmJpŽ1;U>_xEiy<`ƒKtZFpSJjNKgKT~^j•[s—`Š›e}¤Yu•+GP..$'.89C9F&Xj!BQ BK#0*!.)4$2A*%0CVLI@>/-$%-+8%# &/C&.=%0>+6M;@N8Vc>ZwWt˜Xs†V[nXDQX0@T;P\HZNFS;*=54A=8YFXrGl{@amBgx?M,.I./,.8
3068  B ?!""%& 4 //(*)(/&1++/!*( *+3((.)+#,'!.(2*0(3+1+,0/-+/.1 ,0&+/%- -)224779%7:$0=(33';2#B3?5%14#"1$) $$*-.-7)1$$+$$(&&('###&"/#-$.+3--/%, $),-+'8+J4"EA4Z6;V>-?A*55 534044'- 4/!*6",."11.2!&, *-/.*--./1-/0+*1+%+*10-.,./,0-.40-/,2+0.1/*(.)).-*.&-&2$%'92','!/)2& /)3*0&-%3).&("1! 2&$5%0),("/$!+."++!,%!.((('))* &()'#&1**,2&7,2. 4- 2.7-";-!93:/!4/6,)*8&D1/33-!22"66:8'/9*9<$0A(-@,38/JG+EX)2H-8<%:A!6D"0H':;!8:GB$CN%9K'@S*JS(EJ)?PDHBP%BJ$>I&:G2K66>6.J449>B:?H.Z,3A51<<6@5?=/?G.<G(JK<5Q36H/<M3BG/O:*6-4(. !-7,6F+"=(%%3'"-&/4$.<("94.% $   
3069:!.L:;?.>H1IC6>D3.D6--93J).4%:8BB=7..!17'36?="E;$ED2% -5>/X,/,-31 "'"($$01Ld)S398>8I*JN;f}Sz5:[4c[0WtKt„A#r7& "% +!( 3-9<.++()473-0%B@I3>H-:() &j4£™J—£m¤»~œ²‘”± k𔓩}mˆcu¤i{a{¤o:`O`]8ZeOoŠBRafZgCXkP”~i–³‰¤Ž¬w“±eŠfªÝS›×B£Ôxƒ²a{¸¢lœ‘µ^šÌ;Œr[rª\TuQYkfjju½Š|°Šk}E[fmep?(h $ 1ss-_hD†Lp¤kBH;x~/Ú¶eÙ¶wãÿs½ÏXÿÿÿŸÿœ ‹¸Ïÿn¢­·i=j !#16(>*0%D`9¹Ç”ÅÏóÄÚ¢ÉÚo818:)6>.2B -!1<21%$9*%)*+&+>(/J\4dy&7I#DM*FO,fd!xgeVk{šž¦Å{¡¹D\Sy©Ð “»‘§ÃX¢°/š&qv'FU&*5<:H#T\FP0J!EE9XqIJU5Sa#KT&080EJ*6>*ds:h“*hh HB.0754BBUiE?YDDZAShIUwC¨¾xŠÀy™Ð‹šÜw©Ù]zž_€¤n˜±n¼æx¾â6xx(<K 6:#$#7C:oŠAz•2Pn;9N<;Q<5T5/C*;U.+B.2MH6PK8\[Sw`Krgn’L?_*5M ;N#.*.Ki.>T.>_DNd7N`'3B-:-8"/="3;$1A//&A^I\|4Tj(5F% # $ '9%!1!,<)8P5Wr<j…ZuedY`~MI_83D/9C*BM73>9GN)<@+::0<IENhINiDJfE?\I%%# %   ) 93,-3,***(6*.!/.,0,,(/'*!,(3*4/508."6/#,7'.%.+--/4,/(/ -#.-7/!6/$94%'7&(()&%.$!*-$%,&#$$+'*-&---</*1#!/%%&+.+#'0#.(%&*(*-7.3)15!.9#(8!+1-3.41872-Z32F>/[0<]>'H>.W>%@D!17(24 /5 23 05".5 )/#00+3..1- 22-2$92#27#51#12 56!09!43"3198!5;"68#5:3;0; 4732#/9 48!86!3:.7 14 (43'*5%#,#+*/*.-0(/.1' //.)!(%$+"'!"&'%# " & (' .(1( ..-+ ,(/*0.&-!(!0+ .22/!7.!8/%3-&=-"83"9/!3-"6&A314(70.03+707-$D97:#<3%7/-4;53=@2-;%21 .9'.9)79$9>'7D-/G28B1>E%EK1>N5=H6<E+?M3<V3=I34J.<J,AB CL*IQ%7X)7=0(>2.4#AA#8;&Cj.6S84F4/C)16<08+G>-6J-2I798 3@%->!3:'7>,Q1#7)#,3#$)1&7+$,((!     ')1)#>B'=N6/#$!B3+0)"-31 &%-3;--E:.7#69#4='4>-?;*%<5:-*3X8UH)’‘•›)t“I})42LS*2S:><W%2N';.#TpEKZFRZ?8jS2I>'7f#<A%.,*#   !L%&&")8<"42!83-,9!MO#/S9x³J–°s§¨s›­’u–}„ˆin‚ps†`ik\{mV>=Kux[CWCALOC`Odq[lrAZmFt„AA[{Oh”‡}k”‹…¯‹Eqoy{Œ´Ê‡—¡‰xŠ{s~am…[µ”U—´t|†i€¨c?j:?S;`mE<cc:I^7MVBSAPmFe%63?462^^N–·Q„©mgbUÊÉ7€“WëÑÿÿ±Ãý­åÿîñзÿ{Ÿ–ÚŠuiXeŽv"Z-)$°ÂŸœe|!-805>zs”›o™”¤´UAU6P*5C'73/:/0&%!!&*72$IE5?%.F=SgMg.v9Gi74RT-KcSwh´åid‰wy‰QFH]It|n‡‡´†ˆ¸s0PS9LH&8+3>.5''1*5C=9O&16,IX9\x5*8+7U,>M';F$IU+WQ/WkQKgEXmE‚lEcl0:=1,G62?,5>6Te@euGPxf2TW6Kd7Y[Ek\^ƒCau^„žd¨‚›È„éÿ^»Î1=S!.4,2.Hd_{¬BSq01A(9E'$0(>&>Z$09&+:)$2& +1-?<#8JMfF'<,*'!/%2@ -6#BS7_t3~‹:XlDKf02D&3D'@K':L'>M$08'.6$.2=7;9<M63A!!$  %-!&3#AH%.;@YEXi_m‡[[lJNaDVp2Yf*QW'3D'(626F9eo.YE.@D5:E7%+0,1%1 
3070 
3071      + F
3072A10-!..,-!(2*//,32 22#/./.027.772;%80%51&/4)-1#6-!:4 7/!-3"(.#,)"0)+.#//"*0"-/&%("$+'',+/0!(1""1! 1.'3015)7&'3$), (//5-9$$3%0,)01)9;- 8327&08).9'-:&47!2<49)6289H.([0/L@(a<@gH1NJ6CD8>6'A5$?9(78",8&45$0319 /8"6/69!6:&69&;.":6#58%5=&7<&15*0:!>7'>>)7G(0>%37'3;%9>%9D$:@*0?&26%1>%18)4>(26'9769$39'8:/6-,384>7952#6: 4;!67!0:!25!/4"445= 0:!&/,0.05/ 17#14!+4#6+20 2* 1* 6*,'7*++ -#.&6,!9-8- @5$=8$93';4 94";7%230-"7&9'++3%"=1'@,"@5 29"*17,%62!A3<G26D9&??*98)7C(:7':?)IA/JN/7M(D; 7H&2O+95$@<+6J)CF(BJ/EQ4?J7JJ#MC IH?E 8@&;88;=/K9#4;)2@!8;$3Q-"D</0*,[/4B;:8'9G(=G.4C&&-1.9>(,'*!,(
3073     @,<B*P49?#     )$$0:"37%(4$;=,&-"),%G ^Jw/a<_~Y^‰pg“nz \a•84q:$N06I ?M&>Q!EPad@a’?1P3-<1 :"&#   , ' '(5,->!2?34Us635wl3‡ƒ]ž{nž³u›·Š•¯}¤¯y„¿yWhLF`HSXC\aOJT$PWdPo7Gg176.YQIk‚^m‰Kz™x}¤GŽ©F¦}‰•Y– qtƒP˜eY–™s¬ŒH}f—°W=si_dz—Õ|rMÅ¢b®®1¹,]8NH+<P+8B#EJ/LJ<„’[©À=œ¼?¥º=Rk:\W`ŽUÌÆa”µ{Xf?—m†òöӾ႔Æn‹œÆûŠ—¿c¨µg¢­d[VE¡®/+](=x@KbcŠAZt'_s-=B?4G952ln‹:JS%JS"+7"'9,,40>R:='705(9B9AW!+2 '3)E0@Vr“<?W5™Ÿ<¢°Xk‘¡i«Oo“is¡5rw:·•[Ÿoe{b~”+‚€1]g/kt6h~.EY!06+(3*+$*4,1;37FDN%el*yy1ƒ@t•:I`8XrC—KyZf{DZm%479G#@M,5@:;Q:1C.1;$)5%05&99/OR<EXATmTWpSer†À訑ÅU/C%5;#,6.>@)@8.>+;H(3J!-74I(Me.;M'NQ KJ/88>&-#(5.-<#))07E%?S+[eAeWh›NWq<Ne09F$&61>R2QW/Yj/GQ#<B"8B(OX%.2&%(!"*)?T6c-8=6=9JbVŸ—Kc]6@M5F\:P\:8K'85(.,.3BMbJUM'5B1LH"++# )"  
3074   )3 *! -U U?"9' :,<04-0-406/:4"=1#2A"19#61!94"?;(@3&4;$.:&16)/54:$57+04'21'32$62#48#/3%07!82%50:7.: 10"/5 +:#*0 -.!/0-5,3 626;$?7%38,:&26&36#.:#-816/;"<5Q;O>.=<-7E)4?*:;+8@$<<'=?"97!I6#Y@"I;/K/3F=0N98IB8t<-QN.JB39B).2*<3$B=!F:(@:#CC'S3%;=%D7*96!F6(?:$BA'D?%F:&A?(D@%B>(?B,8?*8:&@A(AI(?B.AC-8C*;8'D:$<<&8>)68':<!7=&2-(:3#<D%4<&13!6:#->(.=#.;&7;%1>'97#73 77 5:!6>$0>*/9 .81548.8!146:#,8 54/8!:4"45"65!0-5.!6-:1,, 6+!0+$9-$>-)>.%=/"73%90%>."?5 :1#=0 <1(72!4)!&(!/0"64%;48?!=:#<9$@<&3>"74B6!CK(<G'7;#77#78#8@+<;.2=&=81?>'D8":F%;B)>G"?C+BB+HI*@I/ML)FO3OP1J['BR!WG$PG)AX/A=,8F#I5(@<&PBLG#=C(@M+0F4B<8;E--:&!1!%%*%!"      %,-% 
3075 
3076
3077  ,%8=&7@%9E)5)#!!+4),"NH>v§LVNBp9BV6ShC"Q?"/E7@1ML\f(GY5^8E(IN,\X@DU1(;,4)&&# 
3078   ((&4=/<!&8$)JD8zw%„—Sw g{xG”ˆiŒ£‰•zˆ¥An;F.dQ2“Bƒ“Ut‘U`f>hƒJjxGI\(@O7RMUewnc€jIVsQ_wSkm©t“°j_viu‰\‚Hkt‹:oŽV}x8­·M¤ºk­Âq¤ÊŽ°Ñ’£³‹~¥ljŠ>8b6,/:60a[6p’Z~¥€²Ärÿé†ÿÿX´ò[žô|R¦”dƒpgS@à§sŸÈž‡¤ˆiViiRÜÑ­Ùfœ…ßè„·Òc_„q$/8#*00<Z<*A#'0$6';KEM}B)G,-H!0;F7 =B &)$'3,7#=M9fx2Šˆ5\‚?>8B,5?E[vQ¯Ç›ƒ²f{WH]JAgj‚£]Œ¨Tl€‚‘Àx¼q©Ïuˆ·ƒz±Z,W_?`:_f-FU 4;&4;;(.8>&@Q1~‡Qœ¬V©_Id>KE0X^AFiY¡[|˜EPk8GR!AP&(:,QZ$%;!-"';.<2>3:&9:*7B)9;*9?7FSSOovB\>6E",5,;)?!+=0F&IW/-<2A!3Q0Le9D_'ASCfk+Wc*IR&CS5B /<7@7E%Hc)Xf4>U?<LG*AGYk>9S49A##->:PcBTk?AH6FX,1</EX04@ %*(+,",,5))!#$#9JNpAMY&:D7:IqŒU[e4:G5DO6AK.""("+4+SW6NVKKJ';=7CC,.5 0;+:'&) * *$ #*.?D&:)Bft(X0"I2(S6&W9&Z:!Q9%S:#N5(U6)W<)NG+O<.S6 P7 W;&H?';@)5>.<9&>>%5>&1=*97(8;):9#3:$4="/8#25#6434 79&3B)38(3:#19(66$C3!D??>"8<%<=!6F=8%,>$+6&,1"4.89$::#<@"8G'<?)E;&H90@F3DC(=@-@;%B?*D=%CB&I<(F6"KJ+MI.]>/EE/L;)C=.NC)PJ1LA6;D38?+=>(LC(EC,;:094-B8%>3'86*@=&:>&58$7B*>I)C9+I;0<=0B6'?8*??)<B)>:*7A+850A<):E,A9+9>'?>&9?(C@(=E(7=&87!C="?F);9'7<!?4$5>'-<%15#66%.5 21!68"8='68)6C(.<,19&/: 253:%4< 3B"2>'1D$3C$6?%4>"6B"-B$*:%+6%+9%7?#5?(8>%2?&/7'1-&4*'94);3*85'<>%77,22(:/#:3%88(E2&C1(D>%5D#;:$5F"1=&95&58$<8$FE<R!AC)8G&:C#7<>D(>E(97$E:OI!MJ'LH#<J)>@)K?%;@.;B2:;0:C1A@(9D05</B@<GH/SQ,L`7R^2CK'CM(KJ#OM-CS)GU9LS7;V2=H2&8 "4,!3'-.%!*1+V!,,,6 "  + %)!)&#  
3079 
3080    0*9='4?)2." "'".%('T5Pg`Ah–5cv,Td?>d)02YJRu*Tn5Hn0=Y"5N3L"QZ.Vd/=d'E/%!,  6616,+wVDT1>)*;37"P6[M%…rg|•oƒˆde„h€™y€št²ß¨és‡£It4“{@Jtuan{jlŽ£PH‘`e|raSAM@fo=IeR]pYQp5QcA=\;@@Vh‡dL€M`g`<`p@GuYkh“ÃpŠ‚_Un‹n~}|™{z·vY€…f‡‚ªcPxVO_36:zj0¡ŸL‚¡IYWMˆ‰‰‰â_µÔ@S^FZ]E[=tCI—DxazG‚w6Tg3@?KS^çÿµy¸xnŒ€‘ƽ°Û˜¢D< 1#$,18 #""-NKK]+7E0;G!??>FTU-;T'$&$%226A/_o:glUA]`UPC—›O»ÐAš¦7f~v˜¾³‰¯rXwGSX8EY?TatŸœes›`Iitm‰z…£{’¼‹§Äk‰/??6[iEq5hw#Mc*<,6;1-":@1JT_‘¢rt¥NZh-=S1Zi7DQ@fŠi…®Nn5@V+/D%/? -9($1++5<J#@LAJ;@%7?:8!8<"3<19K17C&>A'-8(3.@!3D!AR*8I)7F$<J"<R<`n1GT<_l=Zo<w€?Vh,H[.Md%DU+FX*Nl9bt@Vp4I]'3:#1@0I^41<,:@)-(88TeDK\007*0:48G)9C+,1!28)CM*FK"/0(.8%.8!??)!#!%-#==FW+=J,0=Y$6B4<).:1>S3U["C< ';Sj9K[6X]:lb4XF//9+@I+;G.7#9 •;–< š<"ž<!”@#˜;•<$Ÿ@+“E.œ@0¢;&§E+›E4 C<M>©L<§O2ŸV<§X8¢L=ªH6£N7ŸS@¡M<¥O9«I4¦N<QAuK@gE:JA.?C)8B+9B*>A'<B%:E(5B-99*1=(.:&-343!8;!6A*;A&6@&1>&>8'C5!BI+;J0?B+8E&@H+CD'<N#6A+5A#;E ?;%DE*JL)>D(F@5D:+FB/9C1?A1CH)EB/FH'@F(AH-8;%G>%OO.VF4OG5JH,ID.>C*>D/?C.@B/7D.9>(:@$C@*CC+@:09C*;:)=8*>9%S<'=I)4D*6<(AD,DB%;8,7I1:4)8?":?0DD-EC-A?+;<'DD*CG+AC,HC)GG1LE0>I)D@7@>)CH(AH'FJ-BO(<R,GE*=E$6D*=B"7=%<@ ?A%@>!;G'1<&7;*;8)8C$7@'7B%@I(>G.9F(/<+.9'3:!6A%;<&AI'1J&29>; 3C#18#4>'4B&2?(5;#32%36 38#3A%2?%34&88(87#;3%;:*9B'8B'3?+1:'7@,:<&;?*<:#?C <8 :A::+8=+9A,<I-CS+8F*DF$;J+JB2B<,;3+:33S9*BM(V=#OQ*TN(DF#@< 9@#I=?G*AD$KE&CV.Sc4aR3N[4CI1YS6Qb.HV,JJ6DR7JQ6UU6W\)@X#>:G2ET"OKJP:J4'=(/+$"+, +0%-.+$&%!3&"     
3081   ( 23?7&,K(7F#$ 8"W4R2.^$/4&90TlRz§CC/F[0j•+zo(wœ=a‡5Yv4Sb'0S =PSS#Cb98J34E%.<%".4 4)%  2 /0-A;0>bXekbŒlwW$T‰ a|'p~Jœ°WŒ°h…¸eus[x›QR_bgcTfˆs‹ƒ¥Ð†¸ÊtwÌrUZI@S\BP_DJ.OictMx§fxŠ68uTY_8GMV=Q80J;3A-JW'7C?).6<FN*K;"K-<H96En*7NG:B7PP:ka<P[D?C8PBH@b’HAa3{n1zOŸ¸lŸ¶[[‘<KY3!/5"%0LN+Vh,CP1>]QDU7eS=#P6% %43=AR•2MRBDKT]s~»},BK2C%K<KeNjpv6L„w8Xg,>J&8F&sv3µœ:ˆ*pmIFU_.(1>++9MY]T”ºAàòv¤˜¬¥®Ç„Š®ZwŸs{tbzDVsNMs3s{]„¹jN{XDo9JdFA]oŠ©”ºÛ›·\¡7ÙÎe¡ÈY†žB:E)./>/!(*A8)B9>usby‰Ldt88D0AR9Œ•;Œ–Ol†g„£EOa-8@,.$BGD@,2AI$AS(R[0H\+>L$MM!CK:H"AD%GQ$GY*Q[$=J?F9K$HS0BQ28C"BJ-AR-KaJQe>euDp…EexIoˆKv|?q|;w„?Zm5OcCYtBt‹Iq~@ž®9Ÿª2—5….KK*NKCGAD.=M:;H+;H ?G$AS-IS%18$17;8L9@P('."$'$!)++8)7:6813(* $,(;1BZ(MN./(($-.1JNR}‹N•z,NI+045K?@W?\kD]b?MZ8^]6PX1;I1˜IB˜MEŸSHšSH£RH RK RKšWN›PRšPLŽRN™IOœIL“UGŒHT•ES–GL”MN•RNˆSWNQ‰JNŽFS†BN‚EL‡ALŠEJ…@EŽEG‡FM„ELyEJrBAI=<C?=8H4;E)7E*8F.<B-6@)8F,8C%9?">A">B$AD)@J,9E.,B-59*8?!=D-9@(=;,AF):L,CE+>H+GF19G+9F);A-?K+<J->J.CC4JA+>G)8D/FC,BL,AK,GR,BH3:H+4D&=>$@J,LG.DN2?P5>A+:E.<E.=J,@G)=K+=E*<F$CF%>G*DD*;O,=E-6F)=C+BI'>L4?F3;D)BE,@G+AL*GQ-9A+?I)?I(8L+@M-=M0>N,@K,>V1=T/?M'NK,\P8L\5PJ:@C/<H2@C2@A(H=/=E,BG0;M17I4;;(?O$7N)AH(EM"@L-@@$AE$;M';J*8>(::'>C(<@/=?,66&;;%A;$E<';G&AB*4J/:;)<='AB+AL)CI*;L*=F&=>8G 7?%9G#5B$ED#;P%BG!<F)<M+6K)>>".B*-=%75 35":4;B'CD,8E1EH$;O59O,AI/@F*>F,=F,BQ.DL+<H0=@1DP2EH-ES.T['GW8L[.OY9RO2PH+YC(NN(JR+GH,BI#HL)AH,MZ1LV6gK>P_2Od5`j=YX7Ng6TK,Hb+]^?YgF`oJbg+\m1Xi9F[6<N@>J2;C$<b9?D@=/G=/G=>$=(+($#*!2(1- )(. )" *-(%/6A9,7#*+!@A$:I+$H5010YPeS‹ \z8GmGFM3UV?v<T"?M@`e8g^_Ž:Ab3C[bIcGUd8>}.5D"AL!Pl(ir;]y!BS%IQ+3L4(?>*&6!%$6*1* @>^V"\mAfƒABZDNgMSEX‡nM–©U™y_‘tN[ml|JU]gT`7v‚Kˆ–W_œcbfŽlŽ|AaƒAOQN_U;P<X7W)SpRVcuWnyS}B<PS[~:Vn4YY(Eg01N9&/-*<&;['! "%1.&-(jZPd"[o)0U.:I,MQ(A]15GZcrQˆŒe§g§°r¿ÖošŒAwƒ=l’ZBf @Ul<]|;?b38F43fD;<1;17<G*NS*PQ tn-Xn@BbMVR/975`gœ©A_,‹1¢QP{,O]R/B,(3$FO&iyQle‰¥M{•I\w2\j1^Z'<R(¯š6Êö_©Ð}Ñî£Öèz—³o{£—›·uƒ¡P\xNEbH’LWŒ^BqmHZ_]t5Ui92Y6CRJ~•Œª«šÇŸàÿ­ÚÿÙÂäpšJIJ(UNK>E5WR(4</PRUŠ“X`m29B$X_IFdh]Šiw…Y€«Xx7BM!;;&:E5`b'jc%<M.7F.H\<T]5Qf0GW1@O+FQ.Qb,w~0cp3aq7]}0bs5Te/PiADQ+OP+HO9PY9OcLPaMj‹H_zUcy<VtNqzTt‡ZpƒJK^4RjFVpFUxKnZv`yj†±o¦ÂLzƒ;Nb4[[-MU(AE4QP,TV,IQ*OZ;Zb,NW&AE/9A05?&1:#CI:8 %+*.<'3D+>L"HM33 +*D@^^*SBH=!A77ZLQA^hJ[>'22A+AR/\_Ljqmº @laOVi>JS53@-N2BI6IP4KJ4ON4OR7NO6OM6LT4LT3KN8MO/OT/?P4FP/GM.CP/AP/DO-CL3CP.JQ/GL+AM)AL):K)<K(5L'<M'>O*=K+?M*?G);D+9C05AJ1BK4>Q)<I/?G-9G&7L/5E);B,6D(BA'?E+8M25L21E,;?'6D7A):A(DC%EK&LK2GJ1?R/DF1>J0?F3:I/>L.EM.;I1GE5TO/ES1AK0;H-;H*:I/GJ/?O6?N18R)AI$DL)WU1ET2IT7=T+=M,AH-;O/8I.BJ(<N+9N,4K-6G0?L*@P2AN+CQ,@M2;P+2L00D2:@3?E%DV-:Q-:L2HP'BQ0>X(@L.AS0>R.9P/>K.@O07P0;H*8N.?M0DR@=R3<H2@M,GN0>T.>N.@D,1G,7C+A8-B@&AG&FP,AI0@O+>O0BE0BP.7Q.DI28Q,F>%BF'AU.?M3>I/8S-=@,=I,3B.A6$>;.DA#FN*BB.CI-CR4AJ0>L+<G+AM/7N*6@,=F,?R*@I2?X-@V8ES0?U0DS.E]0FY'CT!=VHR4O$C=#4K*1C$8=16C-2A$8L,:J-:?,B<+=H1AS0ZM&LH*[P*<P3QN2M]8KL2EP8E?4@N5FU,GD1\>0FV,ON+]J.WX.nt4Rg2CO0J]H^U:W`;fm:ZtBQo5bcBWs4_b=gd=SnBdiEwoFXtHMa-Qb&U„4bl@hk)qj>S€8`[-;]5%;$++*1('?-B@+=3C"3C,<03"(3=L'3= .C&+=4.G8:D*FF*=&;8"$)J3]V2|sR_bpœQtr3~t,W}/HhCCa0FX#[U"]Š4]qHVo3@k)3L1H\&NX4JT[[#En3IV2Q`DGD5]Y-R_+HaVY$-)::?,^V@`,7U/=C1Ug>e§cu{Sw…P¹;„£.«cˆ¨zTw^„H{ƒ.„‹Gf‡EvhLLu\bgƒj‡~Zg4ZfJd4JR5VqK0D#CN/1CT,?\;QRRLF;SG<N*4@IKplPmV-?P.Q.'G" G3,(!/("56RUNŽªLi~@;\'W\/|‚B•›=€˜(Nt;@yc95a™ ‹¦‰ÆÉ†Ìäxœ©dt‰Ae~Io•@d„FF^4dg1€Ž?‰›2|†?¬9lg/-T:;JGM^\>ZDXQ1º§Xáè8‰­"-676;[„™O¾Úo©¾b‘ >~µER#T@‚y7„€Qˆ•L³¸Q|¬RXzHœJ‚–Jy{G©ß¥n§•Un„ƒ¼ž¬Á ¸Íp¶Åv§jw‰_~ŸJ…›Aoyv‹¦Ycx:c\@[eF9UF8G0ouI|¦w†¼‹ÎŒ€µ³ÕʮߪÑóm³Í@€7zŠ6ti5bg8Z\*nwQŽªa]u;iy3_QSf9JaGDbOUrlg‰WWZ)_U*m[7_a<[g?Yb6CJ)8F:Wa=_s;Yg.U_0c`4Xp=ZzPlˆGw˜L¤EYrDQ^<Vo7ad7so3Z\=YhCctFZhOyTƒ’WƒˆEkrAewM_kVg{BU^.Ri9K\=M_LZpSZt[Wo^^hdeuUaPv‹Ijo@af>`^7cf?jk6`c4V]Cpl6ah1ab*DQ(JX,MQ7DW6Q]3/ ,3'6E7LL7PY-;=:@7<7AY8QS&KS#;@52:4&.B+4.M?"9B0IR?agOLJn[o_M]F:VE6D4>?%;-6#0131*2.7.506/4+608+</?(O .G"+=#-8'1+-'1*0"1'.'1$7';$8)$>)+;&!:,"6+(:+)<+%=/"G8$DT,CP3EO0@L9>J1CE+<M.8E2=B-?I(@M*>O+7O57H6<D+DC"FP'AK.AL.JG,FI'MP5BN5BS6<M4:J1>F16O/AG/DL/BO-SL1@a4EI1@K3=S3>I1AM2?S1?T2<I3=M.?G0BO3HT5FX<NV<9^98J5AE$>N,;I-<J0=P14N22>.;='@G)?M1>M1?K*FQ1?U5=N0?@.?J$<P%;K/:T4;H1CQ&?Y8>Z0HW3<Y3FV5FX5>X3CR3@Y.BV.?X1>M/AQ/<\5DF/4I*=C.?M,DP1KM+=`3;M*;E'>E+FU0=T/=Q09N18H.<J+4F0A<3?L+BJ0AT,>Q0=U0GS.CW+?P0<P,CR*;N,CH(?H,=J/9?/G>*9;/0;1:B-3H3:D/6@'3D/7D)=N+9L.<J7<L.?K23O48I3<K2FM;=Q6>W3CT/LU/C`:EM(MR3PS%BM@E"BC'7I#;=9D%=D(?A-HK'BT1DE5DF5MT4DY,CM=IR3Qd3Wd3OW4H[.OS(CG(HN8SV,CX8QPBVL;OKES^6VM;be4\Z2R];W[F_eE]j6enKQi;hwM[‚LbS8kyKb†T^c9\_1dk>a‚?}yThjET{_SZ<:_D4L'OM-B4>BF#7K-;?(/D.'@''3&&6$-0>0#CE-?;, + 6? 78*4A,7I38H!GHAD#793ivJI„SKD?<_hii\ZkCMT/dc/`j+q5U…Ns€@Eo6*K2A9EX(W8bl2ij0Bf7:F"I`5\T)o‡@eƒ;Kc6y†Kiƒ.yb&hv0[\ECh:5H$TH"‹z9Ž‘N{}DŠeˆ¦Œs˜­~W’ƒeŒ\…‘ly£z…—‡cžtB^YLeV8L[M]n-GF4:@usI`p6TjG@M JD*+DKOLa5Jg@9M5IV9'C3/D!'G#5+3-9@#JWLF.DWMC/;BA$MW"hc9iok>^OBE-_h?Ž–]^˜w-RY3D9-56&9%)Hf¢†sÅÉšÊã¢ÎÍž¿Z‹DoMS|Wss7‰Ž\I\{Zp”u‚……›£tœqaq7sŠCO^/CF3uŠV²ÜÅ¢ØÍ_’pL<!H^3bƒ„ˆ ¦j¤}—¨k“¤fš<e€LOk\diezšJq˜f†˜DYj9EVY|Œq‘Éwv²s|¥U§P†ŒYÍê¸çŠ€°“¢èl|ˆN}•\ª¬^§º‡»lU”gC]9lF7R2dm:tŒXž²|»Ó–žÕŸšÏ„¸É˜€¶¥±Ý´ßô–Êëk—º[‹œOŽ”E‘EeiOQYUMI8[XQptJeu7GN3Q[5\fGgfGij?nmDkl=kd7a_=Yg>\Z*US+Qa<evH^m6Xg7`n<Yg>HVCN^KjƒayšUŒ Ccw;dq?tyAwŠH|€=xyHo}Ey…HsUyŠ_”—Yƒ•T“šK|M…‚J8[o9N_1N\@LbFZjGWsBZeTYdK[w^r’TuƒQyxMujEpsPh{Jjn8khFoqEqzCfr5\a0Y_7OS=Y\CT`.OH!??'=K.DZ8@G.1=*/=2VQ/ASAXw@[b2MV)5<(,&,0/]V*K\4fe=KPB>D@KJA5D2+;47<.=C%3/ .!8.$ ,#)6Wa.J0*7&(  '5 <8=:">;$8="?=%:A"=>&B;#CE%CK-BP7FK0HN3HP2EL0AW2?K2@I-FO+AR2@K2<O4?N*EG*HM&LR.7T9GK6;P-?G2BL8GO2LP:DV9AO.=K-8J.AF2DK)CU,PL0JP4IP4IP1BM<FH0HX3<U1;J5<C14I(7=,<F-AJ2LJ2LV1<\?<@3?L$AL-6F.:F(FB/:S1AO)@H(>I.@K/CS8JN)AT4DM5HQ1JW-O]-DW2FR0AQ-?Q/AQ)FY,HW2;X4?M0CM-JQ21S96J1:P+DP5AQ1<Q+AP4?U7;R/9M3;G+CG+8Y49;4EH3DS0DV,@R1BO,<S,5L-:F-:L*6I,=H.9E*7A.@>-:L25J3:G,@E%<H,BL-DP3ES2AS1CI-=J/4H/9B)FC+<N*HG'=@&?F';N*?F+9A&>@"4H%/:)B:*8Q(:D.?L,AQ.AP*CT0=O,5J0BQ-IR36[8=J(@N4EU4>T5CS0=X+FS1DR)?U)KW'AS+IT*@a5IJ)>e/OW-RY7T^+Ib4QO8Ge=L`:L\:TI.\Z9Vi0Wf:MS:ZV-OI;LN.TT4KO8KK:SR9ZfGu^4V`=S[DYL>_PF^`9TeOS_;cVH`rPo>`oIYuJ\`F]wSehRc\W_j:EU58]'09!HT?2=BF)DL0CU!4A(;?%>;FC>@OD$Ob@>]6Q 90!65"FL+2C*/L17>1B[?KS2T|?RX`Jm:li1x†X—ÈL…ª>ƒ‹A4b<BNGAV=9TC}h<…’!™ž›+—6“¢1sŠ;Tq/EG!Vb9m[.\o7O]KK`1p|EXqD^SCajCCM9P`>7R"‡e%z’_r™myª[gjl‹ˆvl\Ž¥Dv`QA895YzRnN{j;KTJ<=8F8BT+)L<8G(>M#q€q9\<Qi@pz/mt<:M6FTBc~+@>,mw:@€<0E)$(>E!*%*&&Uk16a:@<0TM8R^Cpt3Zj(xˆFi|Tsjepn9x}1LiQOSf]aD')3@"3>"0?5"„dt]ƒŒ\n‘§’–ƃˆ·i•¿J…™F£ž[²~dv?NdbIWUHfd1IWIaWHOWxiJty1[OP__Š{||Œ—Pùÿ>EI.gbO {vR‰eŽ©rÉÝsž¼JZo5kCHbAœšTÃeeŠEm†0T`TPf[i‚mªÉmœ¼hXw[v“†£¿`d~Uv‰jvŽdl›d¼|°±„ªÅT¥‘?†<‘¦=”›;‡‰Vw¥vYŸ„µ£”´Š —Œ¶˜Üÿ«Ú¸¸â¸Áí»®çƒu“`ˆ©[}•JykBYY2[X3b\DaREˆAqv0WY4`q>uqKŠƒJtF†wO‘’Esr@{z>„B†s4zj:tlGho:guAvƒAby4`n6Zn?N`Qe{[y–]~ŽH€N‘ŠL|†Z“ LyDnP|No‚T“›_Ž¢WzŒg‰£`’Q€‰V„‘Dk{8`j:LV7J[D\nD^~B\xD`n>UegeŒhxŠ`—šWxVoyUrwQo{M}‚Sz~TnsQu~Fms>msCkk@kh>\V9`e3dX/NW7RW5UV+DD%553@O,US@l|JN[>DN3DS"17 +52<F5ES?bj8OU6BO=si,^W'4;+38-7@*,<% 0*  @
308283 4='13&,'!*"5N‚%g8&J7:5(6"
3083   
3084- @+ G@IN$CH)@G1DB.>Q)C@.>H+EE-:G0?J2FG3FO1KS6IY/LZ<QV6FJ2CP+>Q2:G8IK1HM+NT/LV/MT2;U7DL36M*<E1DL0DO1GQ6HY5GT7@Q3=Q/EJ/ET*EP2NQ1RP.L[6=U8AH6AF-EN41M61=448#;?$BI IN"HY*KY,G[0?W?DJ-9F,DC,7N):E+AA'<O-CQ7CO3>P0>P./Q5=E2>N+KJ-DW6:W54L3=G3HK)JY3CZ2@W.KR/K\0G_3<R-7L-;F/9J6:E*5K%;H,EN-:P/6F0+F*F<2=Q-AM+LT)HZ.IO/MV-LZ6BX2LU6K^2Ia1BU/GN,5L18C'>H+HM/<Q.DE*IU.I_/C\,BI)7K,9D';K1AP7>K-9M478099*?9$=M-BE0<Q.>E-7J(8A,;B.FD*=N.GE+<A";T#=A):K.?R+2L-<J05I68G0EH0CI,;I6?W8BO,BU/CU1AP2>L2?N1?T*=X3>O5ET2CU9@S0LY@Cb/Dc:S_.J\>Jh<Ha=L_8Rb9QS;Yh5Tj4SgFVhMMo>Zi;Lc3P_3Nd-Fg5XZ1]`1Yf+cP1H]=QGIPnE]Z6c[<WG?_eC^ZBcY9ZnR^rO^yW\zNcr7afPZfDZ[@f€Fdx5Vb9CJ'JO"IV$MX*^j>\qJSc1fo,^†:dq:]7bq1[uKNV8Eq9<HIT-Hm@Sh5Tw.9Q)451%92+:576.ID1Dd74U>OJ\FYG1FGAM.H`07\*,E$'1$aZY]~jWrc^zV\wOu}NT‰AKi9HnDj~NnƒAfx@\r7€z@Œ’Hz‹;_Ir†@Qa5GR1xŽP‘kpŸ`aYb†`o}nu’Vh‹xjqHl‡>Waf„<CQLAC-CI(8H(5H:7;(.44CBD\Š\34#.M9’¢<šƒ3:*G/)D-)KQo#^U+) )&'47%#"A/C*8L%#0*(-;]`i‰]•Ÿld€[FT\KXg“‚£§I€˜HŽŽF'K^`5EIPVNL5aRPKSCgnB`~h˜›i–ƒ`¶fªÍn­ãx”’‘V‡QPTCF`1,(% -@1-hv9ÃÄzÔûv×÷tøòrÅè|ÀËuÀås»ÕRÊÐV—­mŽ]¾Õo•¬„îÿ­ØólŒRu–N5Y8`jhŒœgˆ¢IWmLAX?c{Z‡–…´Ú¨›Æi]w>q‚ZwŠu ¼FšžR§²EbrOpŽa›†„¯—lž‡§œÀŽ‹¥gW„PQwI]ƒDrˆfjlªÂнßz¶ÍŸ¥~‡’{|„–ftpN^Os‚^ƒ™Z¢ªQ‚z@ŽvAokAgYIptPoyNvD‰•L…N”ŒT€Odf[fsOehL„{U‹U‹K›F‘‹I‹GuuCuqPcnD~–Nq„Bmu?lz[‚’\t“^}†Z™”b{‰[u_‡‡Iˆ…QzƒU€Žb—©e‚˜U~Š[ydu”S„•W|ˆV~†Gvq<gn8fsCnˆIrŒLbƒQuˆWr‰Zn…v‰šqe}uYpoU~|Pqpc†aŒŠ_ˆ‚Rˆ…UŠS{ˆX{Nst@oq@cgCogB[a?il?^h<kl.PW5w€B‰{Enp:Q\6AO3DK-EP)GQ(EM3SWF\_:LP7@RO_qOlp*8;(*)(05/+;+-2  7./7/+9:/;1+:3(5,#Iw"r6&F8=0,>) 
3085  $ " 7>4?D CF/@J4CB6FJ1>N2BD2DL/CM3=H/>F1AH4GN.KS1FW5HR;PN<FG3AG3BH0JJ0WP-c[2Tb6D^;EX8GR5GV6KS7LM4NT1QS2[_=QaBAZ8BV4DN6MQ+DY/RK4MP0KM3JS<5K==:2M?,rE0X\0FV4?Q*NJ&NX'_a.En7OQ8D^8GW8QS/@O1GG/4P)E<1:L$CC3IS2QV7K]5EV7JV4MT0KY(OY1EP1KY9RX3?Y-BP.JR2@U3LS0LZ,Q^5A`5ES>BK1IH)HZ'JP)OO&BY(CS+DO,>T*?J$FG#HY0>U.FN2Y\2Gd>GV2UW5Gc5IU5HY1D^<LY3LT-LQ2OS*H[*DZ-IM0QZ2I\0NS/Mb4OQ.D\3DO-AQ+GO(FQ0BL/?I&;C%JA!FQ*<V/IM.@Q)@B)<P%=A*FM(;[0EH/HI-?b2<F'BE)?N-<J3:?$:F-:J(62$2L/:6-=@,9I*CK/@L3=Q6;P2FL.?W2;Q+JP%;G+86*6;-BK3@Z:CM2:O49S8BL8<U>?D7HW:Jc=OW@I]=Yd?IgCOd@D[5LX>JR0QY2Be>Hc.W]?E^BTF1Xa<>S-B^9U_7MnC^h6Wu6PWB^h>\dIV[8fnF`lEY^BnhCWqEQZ:[dQmJjHh;_p.Ql6[gEfs?}˜Pat;vuBh–S\oH\o`l‰N_R`_HtwC›=n€.S‚6^_F\Xr}<K-8)<7L?S\8Dj<PM+GZ"gX9KU/GQ$Y_.0_/P<#M^]o>^m?_u8n„=GV:X~At€JZ}:Sa,kg=€tQjƒKr„A€—l}¥v¡¿jhŸDTsRd~Ioh?ˆ™Uxªzg€ml‚H‰Jz—mIxcsƒlh‰z:Tq0AKO\eWY3^^-jj7OZ13G-7<-RV%\s+XmCGn&KK$Ugt?7=U$%!-*-*$!33 +%%*(##(=68o^‚‡A^N2DETo8KYlpƒš<hyfjvVy)JM6DK24b91F;VE@Ui<‚ŠBœR ¬„¸Ò‹Ï勨tl†{LW’zjQbW1SF99'_X$~l8¨Àc±Õ´£ë½Ly²G„¨+O{7T‚O}|q€œž³ž„©\u}g¯Ì¯Ãu‰›§¦ÊŸ¬Ý“«O2@ =<TrŽV>Q]jŠKxIgfjœv£Æ±{`:=PGJ]Y™€Íîx‰±q~£Cv†P‚‡W`xZqu\u„vyœmGiK`v5Op0Vp;Z~:SqK‚œ—œÏ”£Çu¸Ábަa…œM‰—=bsB’fŒªgŽžw{ŽW”ZvjIgmFH_<WhFenSx‚b}‘Y„c}ˆO|zQ…FpsD‰}Y–‹_¨—c¦›a ‘S–ŽR†ExƒIx„Ao~N€^” QjwWvŒ`f„X—¨`¶©]s}T€‰`’œQ’RŽW…”Zx„U^vPdyOupSXpMg|VƒKsyMy~Js†Zy™Zyœ\p‹ITz\s•zªfs‰w™–r—•\wUzySnmWhp\y|`x}`{Y‡f‡d‰—b‹žY„ŒN|ƒJsuLssDeoSn|KpvUyƒQtƒa…‚ŸQ_j;Uc;al<mr@xp5X^+A@/:?3EO/>A-9JH?UOK_.:>') '*')</!#,$
3086
30879=0@/*>9'>:-97/310F 'tf1"@2;+(6#     2=3A:#<;,=@1F:0>L*=I5<F2AF/>D1<B1<B/DA-EL'NQ6RQ5NV;PL:PK2JG6PL6SP/–W0j5bu;G_@FO9HM7HT<DZ8LQ3FP4FO7KT<J[<HQ>VO1X_/OU0KO4NK0SL.WP/PS8LZ:GE.ND*bH(TZ7BTGEL7FK3RY,]X>SbAJS;>T6<L1QI2KO+LO7LR+LC/FM%@B/TC0RM5G]8JY=G]-HY4ET2GU2JX-WS5Pe);h<NL6T]*O^?ER/AR2BX6;U6GK4IP)M`-O`6@_5SW4Fj;NZ6?\25M1DD%QM)V`0Ie3:R,PL+Mp<N[8W])Sl:Ih2P`4Y`7Ui/Pa3Hd3CU3UU9Ve7Db3AW7OU8IH2VU1_i3St=La/I_/JZ5Xb3Qf4N^5Pd+Ui.J`1Ld0^\(Pk3Q_&PW)GP.@Z(M^/M[)Lk/La1[f2Lq8Qe2KX1@Y*?F(@C$7I(AH$IO(BP'JN#D^(>R-5F(7F)9G)8N-1G/??+;S7AK+=M!=P%TL-MT3@Y-?M+BN$AP0OX&LY.I]5DP6EG4GZ7EY?PW:H]6LW6Nb3Sd1Rb8TY6Vi?Me8NW4L[9EV?XP/FW-[G=WU3FFFRM9MQ4NH:W\7RV;eKA`b<XO8PLCR`BVY4gV;hlUagHoZef=yz5xyFm‚Ux‡RdP`{[rp>w‰K`U[uJg|Bh{Ko~P˜X”Pi—Xe…]†œN_šP{(]8d‚FŽIv™?ni*LV;yyCkzVEg>€‰4[—'f{(gŒEl…B{’:Nw=LtE}„6jŽ0Wa?[m@cw9r~Gj‘Xk}O‹…B£X °\m–nwtdOƒTe„MxmIeƒgc†^ckUa‹b[‘bP_xg–fW yJaTWp,_2>d8RgGXvZK_Q5T>T\(HZ.8OFnJ;l—H%`;88?+Q=J>,2# "#&;78CB]"1T1C4C -/ %<.:7-=D"@A@,A&*.60&')%FMMC*N\K£ŽC;c(LI/2X.22 U_:Xs8k‘dY|zy¢€š¡‰‡®„‡ž[CZB0:<,=o18X;e5fo3˜¦Y§Òy¤ËŒ^—“8\"'#%,"&.2-lU>DEqJkZibXŒ¨|¹ß€—h`jb¦pH]f`nbAUxEJP0”‘W£bxWTpbDbRO`iWmD7C+6<<vne¤»¨åÿƒ²ÞWXbE^kIGg5Yl9oL¢°s±¿CޤT}’/Od5\zF_ƒA{‡q‰²‡¯Yƒ§j²ZŒ«Pz¡J’£XÎØrÀËd·¼n¤¬Y}—n¾Ê_~™GX_)eoG­ÁR©³Y•ªc§²g²¿\™¢Wª£c®­Q¦¤cˆ‡h”f›’e˜ŒWšYœŒR…‡P}‹Hw~V‰¢j‡šZ€—S€Yt„Yx‘„¬lšŸW‘˜^‘že¥±[‰—e•°QkƒHc}?x‰Jx€Bnw>clJx‰Pw…IoZ‰ža”hn†`q’FlˆQg„||¤o|ˆfsƒ{‹˜^YŒOvxPksZqZr{Yn{\…n‹i”m…›g†£Wv…O‚~QwzLb{XgxUu€fuŠizˆhk}‰f„beuAO_LVt\p’j£S~9QM&1:/BL$7C)3=23C30A78<&, &0#!<--, <=;H>.>>+:A19<2:6/A#'`^*"=157+61-&-,!( 4<?AA#=C(?A+B?4=I.AF0=L2=C.<B1BA.=I0?L)EG.LS.K]8IZBTT@MV8QR@ZZ4XP6dT9PZ9G`>IU>RO9RZ3N\:F_9NS<GV0NN6PZ4EW:NI:_X-Zl6K_ANV7LQ4UK0T`0R^>KaALX6OM1JP.VN<NREIR6AO1OO)VK5MZ<H`>5S99I0KJ+=U'FO4VY+S_0VU0QL3GY0L[3OZ6A\79P.2L2:G';J%NL'T[-Od1M\?MW7:f1TP5H[5\P/Fj+BT5YO-Od1LS6Q\0Fe;QX4Pg9Pd:JY@FS/IT HX,W\9\kEWi@Qh$Nd6b\5Sq<Nh:KeAPY.bs5Ru=Td<Md8=[4KK3EW?TY9FZ9QX1XP5S_3PS9[S?ac4Ec5Q[0H_7Ma7Pb:G^8c]>Mp>GW3n[2OuIKi8Ng?di;Qp:Gg/H]4J_5^rDis8JpAbf;J}?Fe<X`4Ld.D^(YW+Ac.JR.G[1Pc3Ib3?W)GZ+OS*Gb0TU,IX(AM&@R.<N'JL(=Y*EN2E_9DV0BY.HR)CT7DSDTt@Id9CN:XV3fi7Gx7NZ>Fg4OX3E^8Vd>Wo>\dDGjAG`9H^;J`2Ok6Ok>Oc5V=Mj7QO$OU.EY+KK/GN1FS/JPHRE+RO4SK/TN3PP3Zk@ZXDWiPi]HhlJ^mR_`F^}dcwW‡Ql†KcqSJyPKV;WkD_„N_†Tg}dk”plYwbrx]qP}–]V€~B…ƒSŠž`€¶Wƒ:³Eš ]”¦MŽ¡;|‹eu€TuAq›G`’NN|Ifh;VJ]e\Ol=[w;_o1x’AŽ’OxµDl’cQ€\JwtbhupT`xE`xUNnK~tMdhPjVQmaHaTOR8C_j*<L?H.UoL8FZ@J6BE4HIA(B2/?,(DF+?7&h:SfÀ‚IF $ ')BM,Og0In6ii1Ja#*/&24$'(9%2+7&7K0(8((*&(#35&A[!HC=\xQXllBU3QL9]p(>@%Zj9ˆŒHSn>I^:aXMxvb‡Ìgn“dfhFt™'0-" VF<œžc¢Ê‰‡©’a¢#.A/&.656C>a\3{hUBM267/av_£³‹‚µ‰”¯_U…kY’ˆh{Ab‘EXq>C[-@WLf‘rb‡cOwN;N8@X0rgHƒ™Hsˆ-BS,S[FhXµá¤g ‰ƒ>—ŽF’Ÿ,^^7•“\bn™^‰¶‡ª”ެgg}5i{:F[=gr`]ueYoI†Xg™_n¢Y•¥[¨¾h¬Ñ“×ÿ¢àÿ†§Xf„[c‰sT’§S£Ÿh‹§pެ}¢¼q©¸|£Æv¤·lŸ¢y·už«aŠ˜až—`šŽT’’Xƒ]„{U†Oq‹Z¦§ošºk‘¥v»Ïl·º[‘œS…V€e‡¡p–©iškpžq€›v•e¡PQ‡š]‚œQzˆJ}Y‚•c¢§d‘Ÿgk}‘dnZw‡Xu’VpŽ`jŽj~]nou€‰~¹²g‚¨TIszOpKixIk~b}ˆhŒŽ`xŒkˆ˜lœ¤Zt‰U‚†QrsKjuN]|\wŽq|—e€šVZhbhbixHadB]h^]unŽszˆCQQ(@G2IU-8@'.=.9A+9;/,5'."2<"9%!2 A.>?">J/<G39G88@2:;+C)(O#Y& ?*.;(3=<(=E13G)29!,/,,:)>43H<D,9J,>D1?D15K,8I2=G)?G/=F.OD*EU1=X4HI3QP.MT4GR:OG=QS9KSDMS:jM=ZQ8WM>UY=YU7TW5RV4E^?HR=LQ5VT5UM4JZ2GS>CT7OS4J];MU@JU9LS4MX5MY9T^<Ie@GZ>PT2W[6SZ5W[6Ti9C]:AR2QT-F`<F\=C\5HM0MZ'D`0MW6Ca1EW:K[6S^9Cf:KR2PZ4Kh9NU1Cc/?U(EO%IY#Ma-Ra4Og8Pb1Hc7YT1Km/Qe,Lk;N`8TZ)Sq>I`6Fb4Q^8R`0Oj?O]9XtASg?T]8Q^9Zd6Sq:XoARk=Wd?Rf=NbCHhDQ`DPi4Sc8OsBP\CPdBNk8dd3ut8U€DWfD^l3Vh?^g<Te;mr;_|@[tA^p-[a;a`0\g4W\?Lh1JZBNK6][5JdWZ\3Oh6`]5RuE^[9[x5Fd1Oa5[kBDmKHT3N]DOl@L^<V`AOc;Ol>\dAQn7`c9Xv6Yt<Sc9_x4Zo;am<Ji:Qb<G\3QV4Ce-Aa-FQ5ST/Fa5C[2M]1Q^8La8ef3Uf8Ti9Rg1Cz2_\;UzSPk8PjCHa:RV7Ph5XjATr@JsDXf4Yn?^u>_u9Qu9E^8U`>Um<K]8`_8JY9R[,G\1NZ1Kb,_^+\m/el3t„3c…9Ru7`dCqe9_‚BUgHYl?[uCfuTj…HtpRv†^{‡Ik˜Bh1cf<„‘GaŒ<YiJg{Nƒ€Kj¨QpƒM^{UbqIpycf‡dk†bt–v†‰s¨fˆ”dƒ›`’¯vÁs‹­Q¶\žº]ˆ [†€>W’Sjh[}‘l…|U{‘Mk—H–FsŽUaK[ŽW@gMKb;ER4_jG`m_oxi[ˆIA]B^YQ]wzCk0J9.€‰;… BI«3)>"EQzSP¢2}«J}±;L\ ):"3!'$*%)"),)W# 
3088  
3089ECO;[R+(.5EM2DVNk66=#$)&, F.Dd7< KHJRFE?;[i/q€9Vo-h}9EH3Ši6„‘H‹ŸeŽœ2¨Àe“Íw³LVˆ=kvLV‚`pˆcxq<UgG~o[q-an–~Q¾ì’‚džs„g¡MgŽnzЉ3‘“-Š—2Kb*4F<.:R:3"b[-dvG ›u”¬iscZr=CQ:@ZI=RQafF>g-CQ,9I:iwC@T3hx+fy.^aX{•W@C4SI+xˆ:QRTN‚e<H;sVœºÌ€v™>Xa`Q_:T_Y@LsOYe˜Q{…Ev3LYES`GiyP^ui—:«­Zr…s“¬y“ÁºÜÿµàÿ §ÊTk6kjOu—Pn˜ ÌŽ¿ÁcŸjª®qŸ©w›¶x•«l³l¤ªr£¢lŸh‘¢k«n•¢]‚šSyGj}J‡}¿Ü”§×†’¬ˆ¨É¦Ïü‹±Òd’–cn“gƒ¡qn”oˆ«^ЦepT|•f‘³j’ª]‰™m•£`‹™[§^„©tœ³ut›huŠ_{‰TguT^qSp~Ss•]{˜c{ZwŠ]}ƒh€†gˆ¡b„˜Mu‡KuŽN˜Qƒœd§p©·Zz‚a{™lš_a‡šT„‹PswEpUo’gf“em“VˆƒMaxWYsRepM`oS_s\Xp\UdF:G2V_5Rf0LQ!4;(>G.IG(?>-1%8@56&  / <,;D#@E06E09E/;E/>@)D-"D K"@$%7$'B8)HH0>H4>G49I&>?CBLH@J%>M,ED&GI+AG*@E,@G*ND)AO.>F*HE0FP.GS<SJ0YR0YZ2IZ<TM:PP1HP8PN>\H6QT5UU:VU;ZX=Y[9_\>KgIJS>OK1IT3PR7PZ3=T6AK2MK0KJ+DS3GT0JT5AU6AS6LV2OU8TX9W]5H[5QX=H^6H_7@\:=P7IR-AW6FS6F]2NS.HX)LX5VS4Y\3VZ5Wa/Qp<Yc:Lf5NZ0I^3K\4Kf8J[1`Y-Rg-Qe7Qi=Li3M]6Pb6\j8Ww=RqAWcBIg9dg4Tu@YjBAi9JZ5D^1G^G^Z0Mv:KcAQaDMe5Re5Rg4Pn;U]>Zk6Wu?Le<Ph1H^1oX:W‚1Or>IfDX^7Vi5tg;j‡BQ‡YekKU€8`q<No?IlEGT7c^A>t@PUDIsAYX=am8IkDL];cf8tz<lŠ6Hr>E^/i`Biv7Q~IYj;KaLWT>Ux/Hj=eg9O6LV<YG,XV1Dh;I^5X`9\q>zd@QpAQhEZiENuB]e>cxJP~?^kKYx8V]6ug0O;VS5PX)V`.Rb?Se3OU.Nc6Jb9Zi9M]?Rb;Tv?Qf6Z_-[a=Rm@_|EXp9[a1^|B]jBY{C\o>[l8Zr>SqCdrAfyITr:ay7an;[|@PrAQc5Zp3Wo6Kf6Yn6V{>jrA\xG_nOdˆ_cyPe„Alt>eXOj<Xh;gh:gq>S}a[wKp€WRxV]~^^|P_El‹U€šQ€‹7vŠD€™dª˜av¾S„‡H{¡T޳P©NŸN‚¡e’¦R¶v–¢j›g–š^w yˆ°qвa}ªs”¯g”»i§ÀƒŸ´G¯¼l‡¯R¢px—]~—V—›Sw¶Y†žF‚–)±Jfª7o~FEÐ>WL>VnfLM0MU;(B]=UKQ\0RcCbq'ULX&!"1=.7…ªf6]Z;:V<RL/M'&4(4#*28#2(&
3090 !
3091!8   &&<=50,".D57FN`CmŠ6+D$!%4&(8..3DeG=:FhmAV_32>;G;LtgRžRŽŒH’»eoaw|u™qŒœogi„bm†Ga–RCV9;APŠg¡àXz…XVjLv‡LžÃ{Šª°¢ãp~¡b‹–j¬­R£S‘²qžÎ€\Žq7H.AP+CPGI!LMFOW>‰™†gˆ™NtPUˆ™1AS,Q\/jlKkh*@IptD}›Kz„7bpVnƒE=TB\YPHF'{s?ZfB[W7>F-LQ4iƒn|Œwˆ ‡„—MNk0MH+OK7O]At†Rl‰hŒ–m“«Fho7HZ4HZ?ENLcZo‘`b{V®³ct”rŒº©Æ¥›Ðc„–F]rTadެ—·°®Å¢™½‹žÀŒ›·}žªp¡«dÅÂ|¶Ó€Édž²¸x¦±v¦­yŽœk˜Z†¤a‹ªe ½‹§¡¥„±w¹œ–Ï© ×‚¨»nžY{š\z”rž³_‹gŸ«T…£c”²n Êp¤¸i¡¯v ²fªb…ªr¦Àg¬Tr~U‘W|“HjxN}ŽSe~[z‘g|“amŒfˆ•VyŒd†˜`‚žVsŒb£­r ºx¶lo”„‚®jŒ¬U}—g‹›_˜q†¡fˆªa€žOsŒWi„Se{UUn]ƒSpQ]rV]{VM]OYoPc|R~;R\Crx@XbGZf7TT/HG4GP/HR(RZ"8>>3& < C4
3092<>!BC-AI.@J.7I+=E-=4&=":9"7C4FH(GI,CK0AJ1LJ)NH*IH,QK0P]3VQ2LM-PN3SH0VU0XW-H]0LQ8HP2RV/V[4`W<^\8_W:QZ=SX@TT4LW<TK:PY1_Y8Ra@P^?M_BIW<RM9G[EPP9TX1M^4LX9J`6BZ<GR/NS)E`,NV1PW.?^4AT6ES2RU+P]-PZ1V[0Jc9QW;Fh3K\<?\7JQ0E[,BY4?P0CT*DU(@Z-=S.GO+T^.Nc5ah8`uKThGHf@?[4H]<CW6LY1<Y1BQ1G]-K_9Fc6B^<HZ/G`/Hc:Rd:IgBC^:PY:Rd7FtCKb;N`:I`2Ic*Aa:VU-Gn7B]@T_7Em:MZ3Nc/Gb@Eb/H]:@bIE[<S`3DcAN`3eo9YyMBwIVd>YtAZn5Q}QZkOdw0nŒ@_‘RXƒDfo=_‹5go3LvBEY.Rc3^f=Ms<_iCO}AYf5Sp@PjHKuESd<fm8atAYvG_l6To?vv4R8U]8ZW(`NSyA]g>cj9apC]q0co>Zƒ?kn4lxL]{;Zi:WvCOj>ToC[‚NWn<ooJb~=Qu;^sSOq=Sd@dqB]@Pp>S\8ak8fz4qw8U@J^1Zc@Rp9Ko<Xo2^nFZ~=fsO`v?VtNTkDapFh„Md|BZtGX„SmŠDd“RX~Gf„HkyDb’J_k@Vo;_o@dw6Nc>b~4OtGKl;Z{Tak8NyHQk@IfJei@O~LgzCKd<se>gzB]{J^=pƒHQLXh8jCP‰XdwGh‚XiyXg‡^‚‡]‰‘a‹Ç p€XŠ¡]’¤n~ŽnsÀc‡›_„¤|~–rwŸvr©m‰ c’Át£¿u޲k¬iš°_±}”³}š¼{аo“ǬÂpãx•¿Z£»m„»ˆ¬´—Îe‚£m›fˆ¿_‘¿…s‘D„šVšFŽ:u†"u{&MY*/CL`j&XFk;f{!>K15Mf@W-Yu80W'DF/,B)27 6XBC+Vj.5J'," #) !. %>*2(108 -"%H:,73,A1)$GP:FP[QB eUK€"*3)JS4T^'alLx‚L„…,|”,‰—MmŒtƒµ‚’—}ÉZ^`KNkRIJQvNPbS†rr¤[}‹;Vb'gfh`’qGEAj|A‘XyœpdŽ[Wb^…vSµ­m¹Ü€¯®eÉ瀮ç~ošIw™9Rg5V]?jy?eg=Ys8Gb[5JB/@/(?PVƒk’HnŽLz‘g‡—a‚‹,g]^qY{|‡ž{„¦fr‰7TxI2F2LOHQ^;G_:BX,PUA³¥KƒŒRj†U?LQ[S/Š›@fpP]|Jjva•›b´ÆpNiW=E5JU3=I,?C,W[DtŠ>jtPk~l]iPp†^t_rŽd^€ITn6CTMJ\jw‡ƒŠ§’Ž’r‰‹ª¶ˆÁÚz¬½v¼Ë¿ÓªÅÙ±°Å¢«»}¿Æj˜§p¡´tŸ¾e‡‘p­½{бm‡žl~•h‹­k„˜|v£’…¹r†¥pX…šr®Çz©¶l˜³gz˜]x—v¬É¶Ñw©µs©nš¸n›³w¬¹®Èd~˜\s‡J\tFYoKn}Mq}TŽY}WrŠe~“Vu‹`‚žXz›X~™qœ¸‰‡¤uw—dfzo~š~—º`z›`y—^x–e‚¥t€¬ks]}Œ[v‹VyF\bPanIR_OaqTv{QXmJgrM[{`l€NLX\zHT^@KUDMZ7AF3Q`7I]Pv”>r{?,& 
3093B E9:E%@A.AE.AG.DI/EE-?:'91#0BF3CL+GJ(EM-II0NO/OL0MR1WQ3Z[6WP<SN=MM<QL8WX6RV=Fc?S\APb7N`?N_8PS=P[?OZ;ZY?cXEOV;SU<QR7U[5XZ9[^DX\BYY>SX:IP<OS<SV9Tc5B^=BS;SW3O`4Ab2>Y-EW2HO2JY+I\3L]3KZ.V[-Tc0Oc5Q_:Rg;I]=Fc3B_8CY5LP-R^)G^4E[2CR,LU,G],DY3JP&EX.@X4PS8Q`@OcDIc?C]5O_2B`,FT.HZ3S]*kg-[~5@j;E^4LT2Od*A_:HZ0P\7?]5P](Qj8Gb>K]1R[6Nk2Ca6H^4N\+Jf4Fb=FZ(E[=T_2\l.No:Og-M\4UW6Ke0K]4Fb7;a3O\4MiFZk>On=gf/[}AjfDc@d=[‰IVqU_qLr‡GT’DanHH}IKc:Wq5Kh>PsBMr>WtAb{>]rBr6Hw?e]7a‚6^ŽHZnCYy1gmAg~5U|PbqCLxH]p6oŽOi‚DlŽF`™FLoKjk=`‰F\€Fn„Qg”NlƒGj”Ma‹BZ‚:w‚5X„Kp};WwL`iJ\c7Wg:pm1rr@f„>ax8ju7j…EUmH_€JUyQIg<Pg1al6Ro;Pc1ul4xSpŒ?j†Lt‡@v9oŠ=~ˆCj“HX‚LlsD]|SVwWPzMluEr…N{…YlƒEw˜Djv>y‰Hf€HKm8az=d€=Ow:]p4aw?gy8W}5^oA]‚?XoIyLt…:c‡XRvDY}LLnAfyPcy7`}Ah}Vx…@r<ky8ZQŒ•OxVrjp†DvšeŠ¥stšXjŒ[jT}ŠVrjj„Mj~Vu…Xv—~›vy¸nt‹l‰§qˆ k}¬nˆ”€sžjš®|³©x´ß…˜­qµ{‘Æy‰Àr™©‡• z«°k”®n€«k‚›^` h­Äv{˜{“ƒsžnm‘Ih’({™Zo¢?—–`‘´dm7Š5Q€7RvYCf(C?!JU!\CMM'Gu,7AA3Q,=F+792/;2C$bc0_y%=N))>$"3%1QA%Xi=iy*7C.?"A@,_W<}Šbm?3<mL¤„/GY>UL:ˆ¬\mrkŠ¢lrŽo[mzœda†h^vil‰HYuIa†At³…bhE› pD`UY`p`xLVrUdhO¡D³YUwv?aQf|UAa9`po… y–¼{𤔙µ’nsoZš›`‹°Au”?WoLc‡QrŠNBg4Rk(;B.C 075BLKns^Š¡S„yir–\ZyFLi9R_8@WvluwTER0id'rw9‚™:w.Z`.vs8€‹msnVcvOªKs—W)EI$3AG[Bq‰b`pb\b}F[-Y[0§§H—£1=I-APIZj<Š—Mƒ Dž<€P‹£W{§_sŠM•´>[m,UaC†’i|–k’£V€Œ_§´…Ê܀ªÄ†®Å~Ä’ȼ‘¬³›§¼œÎÜ“±Ã‘¸è–¾Ûv¼ß„Šªiƒšbƒ–_h…bt‡cw‰ge‡hg‡ja€\u•o†–§œ»r‡«J˜o­’𴇋³o‰©|ޤw‚£v—À‡–®t€Ž\|Eh;iwBszKŽ¢Qw‡]|X€—[ˆ“Nwƒ\l€]o”dЧu ¸x‰²d„–PtŠVsŽu…¥isŽZzŸnŒ­i‡ªq| eo…_wŽYlƒfwNxŠ>l|A]oT‚Ÿi’žaq…Xw…F[sSHX@JNM]bFlj:]bDbm:QO>e‚LezjƒœlŽªN *
3094 < >4C>'5@09:)G>(CA/DE,?:04!#$&4>'AG)HE,DJ)HC)MC+HJ1WF4TJ3TH7^I<VN8QI=JL6DT:IL;AR;JN?EW4@U=?Q8FJ:JU7EX7OP8\X;XZ9GMDJJ4MQ/VR2iR9]V5\S?WZ8OS8KZ4PX3TY2CX;HX4GQ)WR3Gg5RX9FY0FW1EW/EW2@W-GO3LY.WX2O^:RY8Zj9Pe@Nc6Da3GQ0GV+Nd,=e1=V7?P#>T(NO0Md7NY/K]1N_7H_.L[/Fh7M]9Ke,Dc8M]/Uc1Nc4Qe/Xl<HpAGbIKU/Ma+F`1T^4M`6Rb2Md6Oe.N^2OU2V`2[k7\t>ArBUR3hg7bz6Wn7Sk6TY2Pf,\i7Tr@Pl7Hg0RR/]f6T{4Jj;CS.R`*Jl8^c7Sw@js6b}DX{JIsHIjGZpN^wWXrGLtFXgHXnA_t@[p?^q6Oj>Go3M`<Mf<Vg;kr@T‚@N|X\k<mrAFI_^IYq?`}Fn€Gf„V\€:OlEWn9_yGl|KPŽM[dBSu>vr3‹GUŠAW|CI‡LfjDa€E[zINzAPr=`tG\„>Z…Vky8rŠD\€=d{:nNm„Uaw?{~B}ŠA}Š?Zˆ7Nn@]l;]r/f‚9P†?Tn6ad6\vNe{Iv{Me…QsxOq£OZ‰L^ƒUm|HV†Gip;eF]B]j3hrHw…IqˆQqˆVS€Pj{TiŒPYƒCYp>m{<m’<p‚?q‰Ml‹LfJ{•Aj›Jl”<h”Ba†Rc‚Pb€4^w?Uk5vƒ6p‡Nf†DHsBbKЇSd‘OY}Au|Q^VewRt‹J—^š_„ƒUx¡Ue™Ht„PvƒL]ŽFt{9s—FnŽ\w—Qj§tjƒDs…Yy¡Wƒ†bi„Sj^†™f¡ s–Ì v–sŠ´mŸw›°vŸÓn¹Ôs¡Í…ÔÙ•¬Ög·ÿs˜ÅzĘ´Y¢ÃY“µiĨJ°ÐR¯Z [§¨‚¢Ævt¦bˆªjx¦Vƒ¨Q§ÀQ–Ù7©ÛSŸ©_“Á5¾È^¢Ì*£°A .t}u’*u‹+˜¾5{šT@WWl\,P{.vM ‹¬ui1\eJT]Lq](`i)OM+œ¤IŒ¯q}œpqš?\rdÖ¸“ÊÒ5ˆ¬I­’mŠ´Z]¡bCTJUx?clKvx<yw@\€^YyQ€¾Rc{I²Y˜ªv Ÿ3‰œAn—mH[T˜™[Szq]ecSv3E?2n“Vw‹1 ©Z—ÀUµ­_‚šYˆŸ^“¯V}Ÿ\›¸ijzjjŽZj‹=›N¿îa¤òFGXJ8T&FTqy*œ°3…”e€W•¿^NlEj|>WŠ8Pj6Kc/GLPddL­F† I|™\yµi’¼Ks‘TŠ¥kYˆQgxH„•VžÌ_v30AADewJŸ¹pau:bx>y„=‰£Z«½‚¸Ú€Â×< ¯<j{M £f¡¿a‡›f¦²d®ºnz§€¦g„šn‰¥F`†Mz„]|…^sijˆ_¦¯„´Ï®¼‰”½~µÙ}¶åy–¸eˆ¸|…´Œ…°‰¡ly´¦­æ•“Æx{²k¡ÉƒìÒXZrWs‡q}šTnˆUm„La~Ud€ZœT[||z˜uZs¦m¨nymq‘mšn|’hhƒllŽk\}^`zTjƒWq—Ho‹Iu“QŠ­g—¨cŠ¡g‹Ÿ[s”_¢UbmQm‰a{u€³w™¿q“»]œWfƒgv“Wc‚[mšrˆ°†¹iŠ\v‘`{”[a{V_cˆœ\™Ux•crŸ~}”TVyWJoDf‡@MZ7GP;N[O_aErƒ[r”_ƒ…FgXt–px—sˆj#  
30951D+53%$5)(,'6*%35#34*:0)0$!!';B=!O?&NG(CG-H;3E9,^<3lD.cI8[O;VM8PP9RH1FT9DK6GN3QJ2EV0?R:>R3@J.9I(CI-AG+=P,;P29J86J2AJ+]P/kV1\T4NT=LS=FU6GR7N[1Y[4NZ:AZ3>U0LJ.S^,T`9Ve4Hd4BT1:U);N/CP)FX+K\/Za6G]5ZZ5Fc6OcGDc4QV8N].Ba0BR4NT+B]&C[,BV)GV1OX2Mb3Kc1Mc6I]3Ha9E\9B\->_6<[0L\,\b7Qs<FdCI]8M^6PZ*Rf3G`<Kc/O_8Jl0Rj:^g7Ze:Uh1Rr8clCt…JN‘OhZ5nr<T‚GKnEFk8Rk:ar/hw<qyOZG]tC^n5Wv3^w8UnAPg4Pd3Zn1Sn9\k8a=^wMX|SZyGQm:Yh/Xu=b|H]s;^o9bx;ax<„‚B_œMNzB]s?Kx<Je:Yf4Sz9dq:`xH`z9Zm9g|EUv4\oDhx8fD†Ff•KW€HSu>fv>_†J~~K{Ÿ?\—>mu6sƒQV‰OYs:QˆK^‚+k}JZ…Ajz>YŠ;]ƒ2Rq9hwFM‰>UtAf‰GbJYyDgwKUDdlDs›he“di[jHn„:iIZ†F_~HWy4Qy7Z}I_v9Z{BirUi˜Is‹^s„Mk‡CUs=Pr9cu8_Cf‚Jf<gu6pAe‰R†šF[œTfy%yˆFeI‚“>ƒžDjzEuƒHožGt‚Io”An—Pp‰SnŽG€ˆ@…¡I†·DrªY†Ÿ8wƒH€˜J‡–@s‹Im‡@`Š7w…A”¦Mt¶Bu†BhKv@{¥^”HŒ¤i…˜Rq¥€zE¡§U¥R†¥T‚ªLk£H™‘QÊLcˆMŠ”Du¢E„˜Up¢\j—h“NrŠYqœw˜Ÿ‡›¯ex­}sŸXr‹q}„£Ï—Æ‘“¶žƒ ‘ºá°”³„ƒ©}•‘®~ž×w£È‘—윤¹l˜²u„Ïy™¤”žWoœtšU„¤‚…§xŒ£}~¢˜¬¼„š½•¬Ñ‚“½ ¢á±Ï˜ŸÍ‚‘c‹Q™™×Ès‹¼SÑÊ[Öôy¸Ñ^Àí‚´ÏrÃÿW¤ÒG£±G £T©N€£|·³f‘’Fœžl„œK°¯{˜Ÿž“Áváà–Æju{S}Œ-Œ¿Rb4dcOThM…“B„Eq•SctLq ^~–kGUwVwZfWgˆW<Vq~‰<‚ŽN€¿M]|4„…[´³z€š`”‘isŠÎ]k_°Ífc{^– veŒE‡H¥ËuЧj‘yF\f.M2CV8=T5{cŸÍ{™X‹°dz¥hTjLDcO\~Sp–A}—F…¢A“œa‰œ‘v¨]w›GXzEcs]d‚bfšnf€4kzZ}©Zc\EY:BRq9[uYVo^s“;}“NqŠaЧ‡‚Òå’ŠÁ}FXRNPK†™}¿åx¹ÜˆÔÿšïÿ˜¿ßš­„{¢€y’R§¿kš©n›°`‹œTw“^™¸}Ÿ·|©Ât«}‹Âg€­lt›BNsFkwR`‡\`@JfW`ƒm]‚Wr˜dµÁ}žvgy?`tZl€ao‰Sf€O†šT[€U_|K_wTc‡hb†N`ykuž\hOo“hf‡gjŽO_JWxFVuB^qIVnSj†Y}¤Yv“[ˆ­r˜¼pºh‡©\~–a‰›Zz‹H}•ayšq–¤x’Áˆ•Àp€›PQd[tUm„Oa‰`§pz¢qz”iže|“SfwHgVp’w‡¨_€ši€œtkŽGQkARbOj†Mem3>F6V^<@QGj…\eˆnoƒF_‚Yg‰ptdq”c 
3096 / &&&#%"$()$#9$+!!/<1D6!CA(<D->80?;#E8.^=(XK/LN@OIA@N6GL1HM4FH?RL4XM.HT2FM9@J(DF*?E(C<$?G&>P/=L*9L.:G-NK#eM&XT1TP??T<EM:BZ5>V3KN.JV0>W2HQ8FU4IO'KV)O`5R_=Bd?HQ4EW/BQ1;R(?U+GT*QU-Oa4LY5H\3H^?IU4D^5AX6E\9EW/I^0H`1IZ1LY,B[1eT1F}4J`7Ua<Vk.Ml5;f3DV,Ea.B^/FX+N`-Pi=Kg>R^-^m:lh7a‚=M}GLg?C[;M`-Vh0Mp@Rc;Jt<Ma>Pl6_rKKlRagDY{?JsW@bA<W3LV4Ni3]c=guBY~PUnEa{BX|IWvFYwMel;^w@O~8arF^{5YyFUrI^rH^wDezFn„>nŠIc@^|@U{LotK|ŒEl˜Kp†rfNe|B^BPo2[u7fk>R<\lD[€DiwD]‚>f{KWo8Uo8PnA^oDouPMGLiHVi4RlM_zFZ†QOwPSmA^pKmgP_‚;WsCWl3bl?fˆKsŽ?qMbšE^…>P€;RtDo9e‚>n}I\}IqˆA \g;f‹Iiƒ\fzBY‰Oa‚JT{Lc{Fb‚>`…@f{;X4by?r‹;x—7|Pp‰PpŒLV‰MOwAZt=h…8eˆKt‡Kl…?d€=ŠzBv¡Jw“KŒ¦\}§DsƒBm’^~’K¨^ˆ›C¹G|£Qg¬YŠ‘H‘«S}°IŸDržSv„M}š]p˜Tz´V‚²SpœJ~Ÿg¤XšPkŒSgƒ?s¢f†©†_Jf…RqŠHh’So‹Gr‡^l…On‡J„œKsV‡¢[s Kj[r‰V’ž]fšŒŸ¬R˜·TÅii¢jr˜X„–]qŒV~“[zPkœT†¨Y…¼[Œ’U˜ŸM“¾S™Ìw±³‚p§h ¢J’¥{Áf}ªY—ªl­^ µ{¤»w”ÑœÕe|¡ky²{•«eŒ—d†®W¹T“°`ˆ±[€©S³T¦¬pž£Œ•·Ÿ¨ÑaŒ•¤Ç‹ÀÀ‡”²\‹›P–¸i¥Ó™—«u¬Ã‡ÎÔ®¬úŸ­Ì‘žj·ÁІ¶w©Ð¦§Éy—ºj¦ÉZ®Ù£¦»_´³fÚõsÌY Çr‘©¥{¨no”N¨XЏlÂÓq¶»b˜°Ox™bpbužT¦¤Lt€Wœ_um:mnA]v=œ¯h}¨1jxeWƒg˜•a…–LŒº~j‘ƒ„¤yGym„uFb‚\WqP`n€•B«®^uŸSŠ`•´†Œ­^muDWx3KZ"KO/qˆ8f…T`flš¥X†žTh€Fm…JLq1W~_ŸZ`‚bvž^€¢p|†ÑOk’]bPSt;aoFhy=QbA]jLcoZQk>py-ki9YtG_qF„Ÿ?bxGt’Tb„^‰rzœr¥µ¬y¢Nac0«K ÂŠÑüʳ尛ÃÉ ßǢƬÑêzh|apŽn£²ª…¯ƒÍèiЦW”i‹ŸoÅÎs¢Ug€WW}AYsLBa7Nfdˆ›Mˆ—T€‹8IjEOhVe€YmŒWpREa<[tJe…HTp:XnFbzTd‚Ba|LqŠLZ|Qj~DOcH_ySzœPp†P`uNt„<jxA’A{Cu‘E|‰H…—Y‚©b…´c¥¿dƒªf†¥f˜¼o†žUk…Xj€Px›\}”h|žk¢p‚ªqx“OhyPn‹S`Kr”Wy—`u‹co¢g޹yŒQgzIa„cƒ¨m€že|†`k€WCb>UlAjwKPhIWb7;=5j~3Yk=cƒK^vWHXElqGcq\_vZTkS  
3097 #6"-"'/&:-75"0:'16%55!83#G<&[C(WI8MA8>H2<C5BD*FG0KG2OS/BT6>K6BA*LB'JG(O<(AL&>G-<J*?L(HI+HM#SQ%DX1OS7FV6QN0MV.DY4BO+@Q(=R2GM1BS%HW/EP1QZ4G]7CX9?V7>R.OO+C])ET+UW(H]&F[:OZ2M],I_9G]2H_6IY0N[0FY,QY2@]1BX6MV0G\,v_0\“:WsDTm;Zm5Qt:Vj@Jx3W_/Ge)HT-?_(O^4Lc9Tb,bj@au>OzJSePVl0Jm4Jb.Ng;Pk@Io?Jc:Y_5Qr:Kf?gg?c{@ko>j‡MS€LPk/l\*d€/l{>g…;lJi„Bez8XxHTu>Yc=jr;n€?\Œ;hpBj|9Z…JhsFcˆ@W‚N_vGg~Ne–URƒQVqBTvDduEu~Oy [eZf~TV„LV{@LoDsj8_y>cAcsA^p;bs@ZrDanBczB\h2kn;Ty5ew;`L^l1Vx7\k=Zn7Zu8To;^l8f€9eo:~‘H}ˆGl„HV:Up?kw?‡†[s¢^[™GXvAbv5Hs/UkEdqFX…GCkªZP}f^uB[ˆ?Z{KSƒF]ƒC]}Bhˆ>g‚?_“XrˆCn‡Jˆœ8m“E…´SŸ©\e˜LoxEfŠCY9U|9h‚A‰DpKlƒKc›Bd}>tfbVc ^r”\X…NjvDf¦gg¥a‡‘]™ijÑpvž]w¢Dz¡Xz’Q}²Wx¦`tŽS’—V|²Nu„O‚žZt­l…šYÄd{~g„ºSy—MŠ¢[l—Z|‹EuPo™AiˆMyƒOm§NnNwCv†Ye±Ve…ZjŽWxŠ>Y†@}‡Ly•J‹y]~“_’w}¬‹¯ff¦SpNu–O…Dx Sq¦gŽ£y{—\o¡_¢_’Ö…‘¿tyŸYn‡Jƒ¦^¬qt [‹™h‚¥cŽ©g‰³w™šr£jvŽD–¶p£ÀVÁÖV”°rƒ»w¤¸o–Ût¥½U‡³R|•Zº[Ìb¢Ø{ŸÁe²æz²à‘¶×|§áf×o£Ø•™®av§slš|‰«“¨Ó•­ÜhµË€ _{²…vš‚šc­½ŠÇƒ•©qšÇ‰Ö£ž¬”œÍŽ´Ì‰”¼p£¨\¤ÂYªg¬ÈpÐÚ´îÿ•³ÕiŽªi¤Üd«Ò^£Ïy›µWv»c¸±c~¡XÐæF±Áa§“b˜¾Vƒ‘Aª®p^dlQaiSƒ·YPd-YqMXa=w’>|}B‰]t—”x£So¢`xœ|–³[†‘Fn‹C™©du£D~‘L‘žQ} N³cšÈi™Æ`·ILS5p>œ§hy­DzKk„\`—R`nOeŒGxŒJ©A¢¹W[};Vp?r‘?Xn<PtCtŸZqN¢R} Qn„XgyEiwA]†Nhˆ]L]J”xz•Ls~Oœ¨s›fŽœ«°â}€‰x—¤‚…§€‹ª‰šZ›³hr™w—´m‚ €Þù¯±ßWŽ«g€˜e„›pq‘RTh9P^5Te7L^3\m[•¤x‘¡OrPUg8Kc@oyJ[zU}…C\]5Le<Vi7Pg@Tb?@W=Oc@MhQNp@F^HXrAK],dxI©­R{’Ml{>oIŠSŸ¡e©Â`´Û\œ·_±¸[¡R©m–Ãj€£c€¦f޶ƒ£Ãc˜ªP€•cy”ln•aj~C[qQb€Yg‚Xm…Zt’VayM_``Œci_bŠ…¢ÇŒ½ÍSt‰Ic‚e’®ns—]w‹R†‡E\b@Y_OZlKSc><L0>Q?ZxIeGp‡Af|?Q^EUYBLYE\cEPcN        4#+!&#.0)03+4#+3!3-.991&S2Z<+S=4D@5A>5D6&FB'HA*IS(EL=LF.M@#EG'GF,OH(GI+>H1OF,IJ*II)BK,GK,LQ/CY7GN-KO1IQ.FZ3CR09K,<J(AK(CW&OU1@\1NQ1XV.Ge8IT9HN.JQ&M]0Lf/Ka,Fe,G\5FZ+[[5S`:Xf6Oi5Pb6V\3Bg.H`9J_-L_/I\*V_0fm9J‹IHrFJf@Qc;Tf7Vt?St=Zq=Nt3Gd3K[+O](]l1Ys4Rs?WeC[jFax9^{7UxATo9`v=Vr;Sg<Hc5O_7^p9\mGXv3dzMg?YŒSPzTQn6Jm/\h@m}Ki“E`ŠNa„V_{OauOOuEEu9cf8wt?X‰SUjEeuB@|Ij_=VyIOp?IuDpqBe’AZƒTVqB[y3_zDiƒIg{Va‰RizNk„GJz;ee6ix3hP\ŠHcqDiwA`x=|v@W6Xq>`h?eCMHVb.RnAYj;Ys<irDQrDal=PŠATg=Uu?`yAeqIt–T|]}™Mm—EfAhPQcš\R„;em6JyFel3P€5vsGhz:\—aPwDWs1j~Bcx8[n<^ƒ>xƒFk~@[„Jmq<bzFi‰LZ}UcŠ[v€RZbtj¥?sœ`euIW‡=as/ˆDo”XwŠOf’Z[’LŠD“¤Xj¤Pc’DuDj9h‘Lw–Sv‹Gv“PxŸkƒ”J‘¢IÂa…ÃI™œVxžW„ Ks–Ln¤eg›Li€Hˆ™Vz•O‡±‡r™W‰£v¶Ne«_|¤Y‚©Mpš>zºa}¡Q­P‰˜O~˜O^ŒI‹œX‚¸l”¯Dr²M†¡U’DxŒR «lÍG‚˜L ¯Vy¤_“£U”·Wz¨J—®Q} Y„´S–½a˜´W°ÐJºRšb›n¥cŠ P‚‘Aš–XqI€—Uµ\z”SƒŸ^ƒ¤l€“TŒœZsL‘›`Ž˜ek–„ uvœc}–f‘²~†Ã‰—q—¶Dv°m•ÎŽƒÉwœ¼r—у®Öª™É‹°Ú©ÔlÇÖkŸ¡k‰½f©ÄM¤¨O“¾€žÇ™œË|šSnM©×E„žSeŠ\ºr†¿k¦¿xz¢z½kŒÄ’³{“°x˜Äe˜±s­ÆS“¸¸ë’ÄæÄ¹á‰»æxàÿ˜¢ÆzŽÀyºÔwÏílƈ¸¤W–³‡«¾yukZ{ˆ¦b§Ì€Y†Edn?ƒC‚yX‰‹A†y=zdK{¤p g^yg¤t¨ghzFpnVa{…d‡†qˆX|“‹y˜^™»c¥mª¦dn‹`£ºnbnm‰–YœºE|¦dl“oTdMyfh…WO|Bˆ¨=s‘Oi‹_}lmœ|Pu=OfAV€g?q:AbEw—`z—Rš´t¤Rp‰Pb~Hb„?SsFpˆEuŽGt— J{”s…™……Ÿeq‡rj‰ok”q­tªÅwœ½ge‡hPtl¥qx tj|tÖã×¹Îgv‹csku~P|’RŽ<ŒA‡¢Ax~CTjMQhn]]VFQKoyMk{TvSgzak…act5HX4CT.EO9AM7:D,=D7m~<I[-GX=VjR §nÿÿ¿ÿÿŒ¾½P{PŠRw”a‹y³Ýn§Åx‘µ€»¼m‡šq´¼kœpš[}’`mˆ†·—»j”Yo…^m‘V_}=ZnEk‡Ks†Txˆ]ZwRetGXoKYuNO~NXw|¯˜ ¼pv‰Io…g˜•^nrc¥]zqAJT<<E>I\>GW68FCn{PjzUr}Rd‰Si‡F`vEWhG[k>R`>R]J      +!* !% #"*%(&+#/*&+/2-@3L7'K9/BC2CB7B<,B?$=B'AH)OF5?O-AB,8F'BB,@N)?@2D=-P>,LG0HN3FG.>M.AJ6>V6EI1GO.FV4CV2OS,PZ3QP*GY)KX/G`.:Z0RO1Z\)Il;GY3HU.MX-MW1S_2Sh5Im6WX9Mj*Va-[o1dk<[o;[l7Lj5Kc:H[4k^*\{1Vr4af0er8MCWfANm6[h8Ys<iu?a2dFUƒDQuBSk.Xc5qq0_‹LU}Idt>^|=_‚C[„MRsVGq?`h?S€DLj=Wm>Fq1fi7XyA[n=T}?gn>R‰ActCT;Jw:Ua2_~BlŽNd’^d|T]ƒK\yBgxJ]„>Rw2go:cwHUuDVk=^yAWu1NkE?l4Q`4^j/rŠVZ|NSyDXq3RrMj|?_‰En}Jm}:OSQaIbr2XxF_{G`nJbw?Yp>bn?Qw;]qRPs7Wf;l„=fzGY}7Sl2Ql8_o1U}@PpFrm1\Ž=Wy=co4Z‚:^vBW~Cl{Nn‹ie†ZX…UV~M`zD\~inl=R‡6Sr8_p1WHcs/jzAjŠAS‚.Pq5Ws>_…DWoEoq<`t@sPN‰Pjq8n~IZ‰BolIZCiqFm Zº´@vÜ~zˆDg€D”AX‹@n‰Na®uXCn‡ei}O†šDh¥‚p”S–Id–Eq¥W`Š<o‹Hm–[|ˆL]G—ŽOv½gÀ~r¡g|¢h^o\s›Ll‡H}¯ZifNh’EnEŽ©Y«œY¤ÈL¨«d—¸p„¹n|”Oˆ«d†¦T½g}–HŽžYy†a›Í€Ž¨L|¬_†–l”‘\}ªy½X™ÂVƒ¸U‰­d‡§l~™L‘\‘¤\}£d°a‡®Y€¡j‘œZ•¦\t[‹™b{µzƒŒk¢Ôc‹Í[„¶Y§®h¬^²´kz›T}¬\}‹Lu”Lˆ¦or¨W‹ªH„­SªNs¤[z§]“Sc‹G—K”µV²¾Z£¥_§N‡•i‚§^‹œh„´Kz–\u¨|q™«Çv£Âq‘­~¾šËl™Øu±Î|­Æe­¿lšÎwÆÒ…¡Ç_žÑX†Ö“®^¾Ê`Æé†¢»sƒ¾yƒ«[€”]¤fŒ¡w~¡\ËËšÛ…±•žÈx¯„¼ù‹­Ú„ËòšÚÿ¤§×xàþ|±Ôž½õ¡Êÿ‹Äÿ¢Ë†ºëqˆ³Hs|A†¨a«ÉŠÕôM§äU¢¯Už[™¢r¼ãf²ÔŽ«]ŸµY‚œKš³„z‹W±Fq†FrwOmAo‹v}¯hYrYw£\~”^‚ŠX ¹dfxDj~P|–_~Ÿ`c‘?qˆJyŸo‰§UarNX’IeHrŠHbˆcRvIPg>Tb;CT@T_6Wz=bx^c”\ˆ·cc…kh’]„¤N‚®LeGbˆfy_‡›]zšX­k±Ìq‰³pzœX€œVjŽf¡y†«É¯Ñs|œLg~Rm„}” QxŒŠíÿ²Ät’URgLbmR|ŠZ`}kn{R\nWsP•Cdt3Sg5jmBVqXVmKZgF=QIBQLXh7NV0O\8hl-=N5L_1Z^/@UNt‹Eº°Q‘f¢Âº°ÑÿÿÿئºqÁÀcϺR€‹Qofˆ°r}Ÿlz—lx”rs•’–·~|‰ab~Yi|Rrcu‚wyœp„¢Kd{PUsTTnCa{@[sHe…KVnIJ\?Mb:Jf5MjE]~L‡§i‹±~{¡nq”[v˜Tn„UgvVYjNMU@HS1IS/GX2BY07FO`axˆRd{M[sK[rH\uJbsDWtJarA\aJ         %*&#""#"$&&'((+,---3:2C;$:D-B>3L?-?D!:B*A?%O?*8[,><1:?$<D*<L,EC3GE)UJ-PQ/IP5=J4>G1IH+DZ3CM.MH)LX3IU2OT-QW.SY.M]1Ma6F^6E]0OQ1I])N`@G^:RY.Q_/N]-Kd4\`1Zm<Sh7`j:gr6^t>^nBaq<gqCYw=Pi?K`3d\&iy;d|Aoy=X†E\vJVp<Ql<\h5exGO‡J[g<`‚D]qGQsGHi8Y_0ql.g‰Me|Qi}L_ŠGR€PWn@^|ITzCUt8Qv;]p5ft;[€?kw7^‚Imt>}‰4k“D\‡Iap<b€Mk‚?f~9j…B`yB[K\€Sl{Cb~IuC‚«Tj›Xj?r<k…Mk…Hƒ’@cœOZ~@j{8^„3[x4]p5gyFh{Agƒ?[yE}6„ÅV|^^‰Fe[ay>w†2k”Nv‡HQ‘Ihy7nŒDp‚D[y?lw9Qš@nu>i;x}Uc™>‚‡B{Ÿ=e4aw9`„?i‚:s“VbŠ?bŠ?\tH\…C`‚EWy;erL^uBc€CTx7Šj8dÀRd{3q€Ec†:u‰;py9\4cx9wŒDs‡=g‹4x4fš=vz2Y~.wz<jIrŽRc–@}‚Bn‡Oh‡<|šJ¢8˜«Q€£c{–€gO]sFo‚Pg¤Ydy;dIaŠ<d„4ix7gˆFq„C^>nFX‚Y[rIm’Q]“EfyCj‹7‰EnˆBs•f†ˆP˜­]h†D˜€>|¯WrŒ4q‘\l”@q8n‘^m…FqŽEu•gn‰]gœun³ty“\p UrÂ`¤¥† Î^’Òd\r3nlZu„Yˆ¿pz©N–ª\˜ËˆŸVižZyŠ\¨ `„³Oz£Q¡®WpžR›¢Z©Ëg‹ßpy—S}J|¡V|©Pp’N¨[w¤Dz’[§­{€²\„™o{²a‰Ñh“ P£gd–Fy˜Cœ†P€­Vf€V§t¶h^~GbnF £V ¤X¨šI°¬os¶d€•ewT™py³[†’Wˆ°co¤Uy’[‚N¢k{¥bÙs|¼d…Áp˜Æw‡¿|‹­ˆ›»‹–çˆÄ£Ø…¿Æ{¹X¡Ê{¶å¤Í›²ùo±ÎdÆ]ºÒY™ªSš¸T”´]•®–z£st—[‡¦h”Ïqƒ¯v£x¡Ø‰É³£ÆŸÂ𳉷„o•€ˆ½”¤»´h•É€ºèZ§§VƒÁq£´ƒ”Á ²Þ„±ÙwŸËd|­ph„i—¢y­âg‹©q›´]Š»|›°Rš¼^˜¶Tz«W‰‘Is‡p¡ÁXm“<Y‚a…_Š´Ylg~’eˆDlLi‰Z`’Kp•GgR]mabp„KOu6t~L_RGk:MW:ap>]vHw“Dd4?`6Wl=qŠN€¢]t©Lq‘[©È}‰¸^i•Mp“Vm–sz¬u‹±f¬{|ªou—d‚´dX„Uh_†­q‡§ Š³’ƒ³\|°`XtQd‡cx¤–k“½DjY^}Us“<XnY~™NWi6BR<Yk@]]o«yÇÞv×Ý]½§JMVD<XEIa:5N/@,:P7Ri/@RHl{cºÃV §A`q2gva÷öÁÿÿ§­ÀvÃÂŽš£äÞ÷»ÿ÷¡°Â¦ëásnˆV¦¨\”£StˆJ_~OUnUavm`€xt”Sk}Ju}OmpT_sT_€r„Ui…IQn9CP@E_=@Q>BaK}‚8cm:Ul5o}4VqEOod{¢{¯sx—Ql”U`ŠVgSo‡IdtC^l0L]6G\6Rf,AP3GKSf{am‰TWaOakHYqK\sPk‚?UuRc‚Op…>      "()*"" #+"''($%'((/0.54.64?9)F<-PA)AJ,:D;5@(9?#7F'2>/3@%<A#@F'GI/GM%SM-\N0SU;FQ3KG0RX,[Z2Vg4ZW9[]2Mc5Ld1HW3RZ4VZ8Qc9VZ=RY:O[7D_5VW;Wa2]a5am6[g6Rh8Wd5Kj6[[<hf5oq=e}=qvCe=r{KgHZ}N_j9Or8]h7S{JTj<cmM[yIUo=Lk=ch5pAk–Ye|N^†F[wLQuINpK[g1is/fK^ŒURzU[L]„R`yDs“IR•WOuLXuBTv5c|AW‹BTGVxGduAe„GXˆXazNhx:t}AY—JQnYopH^9`wQvu>m?gŒVi†AaŒ^j‡f]ŒU^~LnKv˜Kv”MXšh_|Ro|?a‘\fDz†;pF|›S…¡Uq§SžFqšXi¤je]w“J–Kt¸Dj¢Xh~J]‡^b€At~Fn’[I„Q\mCS|Hbk8m•OpžJ\OpIZ­_xQ¨ZbŽDcH^ˆLp‡pl~?WBa}A{‚5oEA‘¢A|’AoŒQ…8©YgœDW}>awVG}<og>^‹Qv‡@vŒP]˜\z‚It“Hg—S~Ov­Glš=pšV`“L_yJv€@vUw˜Gd‰Hg¢a{\v oi’Hv‰Re‰;d„Gz†Xd˜Vc†Q_x:‚C_˜D`‚A›¡K†¸Pœ¸F‚·HYŒ@fƒEn‹@p‘0€}Kw‹A„N—HgžGwhkS}Š?ŒºU¸·Y~¯Qs?dŒ<i@‰‘KpŽH\‹;n’Ci}AjŠHX„JjƒJ{‚Kt“S—Êli¥Mm‹HmŠF~‹;d¨PuˆFr£`xžh½qe‚Co›FŒ|Xs°ev†T›±_l™N~ª`˜¡{£¯¤Ð]ˆ¼r·ËXÃåUpÙS ªmt¡\|”D¥­Q\›V‡‘Gw¦T†²S€°^›bv½E~’E{˜Dt«J˜¢?}¦Qˆ¼a~›D‹9¡©l‡Ãz®¬~޹y„·j••H” ZŠ¢Rx\t¦LŠÏ]v©K}™L¸K«\„‘UޱzuÀiˆcqž^x“UoŽX†¬Wu¢kˆ›^~´| ¸ŸŒ¨q¶pˆÁ‰’µk‰¼”¦ÃŠ»f¦„ž©`†¤e«eަa†X¤NÀq«Í€°ÝK±Êx Ý~’¹`než¨ƒ§Ìd³Nž¶{t«s|ºje™ft€|h€u’V‡¾{±Êj’Ƈ§ÒŠ®Óv‡±^†©O} ƒˆÊ}¡»m°ÝsÌæl¤Át…¹q‡¼dŠ b—·jºäqâÿ›Ì_“¶H¹jƒ±Ut’S…¦T–®^azG€“d“­IcN…žCy“M{·`lŽMn?cuWa|QXr9`sAlŠL[‡DkyaOqAo{3hGdzWz›`”¬b´áms¤v–³s{ay’Wn—Y†¨o„¹sh“u ¼NdŠWZƒC@`4C\O[ad„ea_b‰Vn“Om†H€ Vn^eƒOqzKœ¬f•Lˆ•^—°sr™=qˆD^‹9KYPsˆ¶ÙøÇëé®™®ZTs2a{8n€7HX2Zj"HO-^eAŽ“J‡¥»ˆ„ Y—œHŒ’¶õÿ®Ì²Ïè¨ÎÛš°¾§ÀÒÔÌà³w„—š˜eYWOpzjª”IYf8JR8P[@izCW_MbrQt„IswMol@\lBWjY[rSSq?S_,7I*2H-3E1APGdyEQ_5DWGIlCj{>Pm`|™v‘©]\…P€¢Jv†St`‰¤Zt~AEN3CU3FW>T^*;D.CPIGdaX~TVnEYsF_nN\mSXpFUwSs‡Tg: 
3098
3099
3100$(%& #&((("'($$'())1*1!,-!<. D:#J<%;H)7E48<%>=&EB"=G'6B%F@+EF&IF2MN3RJ.NS-YR6JY9FV1MX/[U8ypA\dBm`Fd{6GwFIW@UV3R[3Wg:]d<W_/YY;Th<gX4bm5\c=_j;Yi<Si:j`:Sv7[]<de1cp?k~>c|HP|E[|Z[zTLwd_jFcmNYv>Yo=MlB[g8_m>ZwAUp=Uh@Qv9^sHV~SRtTIn@Yk:StIIn5Th;PqGdzIQƒDIrH]lHb{G`‡@S‡S^tIY~=?u<F`<Jn?_pAwˆBo—CeŽFlŽNW‚@hkBfŒKc”Vn‡S…‘Dv£ItŸZ`™PdP```ƒRX}TPrEjoCl‰H\Œ=lTTQxƒ[t”Ij›=cƒPZ|EeCt“Skš`hŒP…Vr¢Vg’bo†[lIxB…«Vkž]ƒXy´X_’Mk?ˆDk©NO€T`h0\‰Ro‚@j‘Gd‹LkyO‚=f®[lŒ:Q{EbhKaDj•I\…Db{M„Sj‘Ct›7f’\v…?ƪzŸÜly¢U~•RoœS‘]w¹NdŠ<dKb…<R…Bcq9rŠUd“X‰M§ Uq›Gl~E…ƒX†…Oy Jf„Sk‡9‘IŒN—µTƒºKp QtB`’HjVw¤\€˜Zn–@kx6Q‡Tq€;i©@fwHz~_j9l@‰™ku¸sr¡}dˆNnŸBŠ?uŒI}ŒEpIzŸVk–Qw jk‘;nœRz†8y“f€ˆje„u_„Go|Eu’Ou†ClŽUwHfœG\‚>j?q‚;|„@²L|–O|bv‘Nh‰Flˆ@ŠœJÆ\j§A†¤[žFŒ¥i¡¢C™°X‹­K€ TŸ­Nr©c`–Jo˜Pš…r‘­^›ÆŒš©b­˜‰¤¯ƒ—’¶\±¡Y{·FŠŽFx¬@Ÿ¨B‡ U˜¹`{“XfIˆ¯b˜³J…£Sy¨VužMn®TqŠH‰¿U|šP—U}¥]y‹N„ `zŒc“V~«O}©R…¥Od—Q|]y—Xt”Tv¥y‚Ÿ^€ªPžñvišUk‡Gg˜SjPv‘K–®o}™P|—Zo—Rm‰j‰œTv˜[w®Zj…O³c~£Z€¢g†¤Mwšf’™X±£u–«{m¦e¬D¢¸n¿y†©©o¨Õm›¶ˆ¬ÊXÂÉq„£q‰ÁsŒ l|žNg•W]n?oŽ?”Ho›K¦¨L¤¶¶ò}ÀÁš·â‘©fo“O¦²_©Õn¿ÎÁ¦•“®j¡c}œW‘¨]}¤e£·~ÃÝž¬Ño¦ÚkšÊ\˜¿^w±W”Ÿp‘³k•PsOnˆhknD‰™Zy›\RuIYwC\xBh„Fr–B{™M„±H‡šHpšJu¤TŒGq’Rh’gˆ°Z•È}œÓlv¬q_’`_{ir‘U¤dН^‡¬t_…][…_œ³^YwAQl-H^'G[Dcu@lDd†B|™Nf’UrŠYb|Iq—S¥Oh‹lН¢¸}©ab{fyHbyCl‡:[p8[tƒo˜­‘µ d”\‰›S¤Ã\q™;py:`qF‚P•¤c˜–cw‰mk‰\_‡o–ž~ž¤‰wˆ­ °•¢¸É¡¼—¢¸ž‹ £¨osigƒpN‘cJ€rm²†d“–Iy‘?|‰G{ŽJs}EtP€†O~}Oqo<`mCu‡BYg;D^6CW.AP!4D";J)L];H^FN\1EL8PpJr‘;azCKpn|£W…Ÿc€©d]vDVrXbƒUQb4?O)>V7X`AVe-[\*FT5K^AMp^k†MwˆH\yMSkPdo@cgQTjRYx>( ( # 02!1'2)!# #)%% !'&%%%#!#'%.-*4&/4+93!87!38(4=-<<(=<(<=$AK,@I3FB$PF+JL1RO7RJ0PQ-]O4I[8IU:LN1OP3p[8[d:hfNZw=TnQYd@cd1Xb.Xd6Te>Gg:KY9M^;_^2Yi;We@Lb;Pd;Sc4ec4\y:bd=^q<WwAktA^|MRsNFjSck<MvDNj@blAewBgr>`{H[r=bq8RxBnqAf†A\‚ERr?Xp@Ww@HwCab9Vv<Yp8`l;W<\DBuFGZGOb5gw=]ƒ:ZHV{:WxHHl6^a4f„0f†;YDdŽXbTp…[_ƒKkvAe‹>k‰NšMs­^X•Ux„qe¬Z_„IvƒAtŽSd‚G[xAˆs<x¦Oz‹J~˜H^›dxxDz›I~™^o‹Qu“B\~Mny;e”Kt]h¦^W‘_y|Yœ¤In°dªŽOzµ^‘¢aœ¢P®Ð\£ÃZi¬P“›Q‹¼^m¢]Lƒ?kr?k@x‰HxNgKX„UQ~ZawFkv?–=£DoŒL`†F@p™Ds‡JÚAsã`z‚NcjžŸ™a¼ž_{Öu ›dŒãy{ºebŠYc|6m‰9b“5n‰;mJf‘D†\t—’z’S…”HjˆOi“sc‚MŽG‘J—¸[gVq…]š—W|ž@f‹FŒ«E–£Eš³JdÆW‚Œ=ˆš=µ9“R–.´DÇUw‡B{žI}Žfk§GŠ‚>©Sˆ¤X¹d}“Ie¦a~˜d‚Os¯J„Bk˜Hs–Sh’Fx–Gp‡E^@n‡C{³\všKc…Hf€?Ž®Sw‰;} :|—Jw›Rok‚«SpšL{·d_‹Jrƒ9r›Y~®z|ª^sQl¨bƒ¥]¥dcˆhu¢gp™T¤¬j…Ðt—™Q¥RŸªT‘ªˆ—½R‚¡X¡Nz¬UcˆAƒ[™ªO޶s–µOoªBš·R†¥[‡ˆh¨O…œ>qŽMyœnœ½P£¥PzžD”®SvžRµéul?‡šKu S…™Q{˜Sj—A…šL{¡C{®X|­^oIp‡NާTm¤L`B|’L°»YVƒ}t‹Kš±Mt˜K`~B`Ln‹gƒ‰P|’Nl D‚šAv‰Vp˜Ol™Pt’@^˜SmNl‰Er]hŒG{šT|¨kaƒ\bEtœZ–«v™Êyޏ`¾`—´o—·h—±}•ݦŸÌi¯Ço¢Ëj–»\š¹Gv5Š‘Q˜Æc´îp­Î™§Òo€©lÄÊy¬p»ÖR¥³`Ôq‹¾†´ÐzÉ|ºÐgªã…•Â`’¡L†¡`”±Z…³z„¦‚­Æv–´v¾ã‘ŸÑ¯ÐdœÐ‚›Ì~˜Ú‡³Ø]êÿl£¹Y­Èn¤ÍUŠ­A}9z“@ƒœHˆ°b•·p¾êÀøms™XŒ¯W“·cx—J}ªNyšY`•e`m­ei‚Fm…?d€K~¡d‚©ovšZqˆ9l‡Wƒ­_Su7Ld0K`)Na?UnFuLw˜Wu£as–FgVc~Yp‰[[ƒg¨c„¦Š˜¶¥¸sy‰M\{LnˆPf•Mk7aƒNv—„ªlx£Yƒ¨u|¡z™Çr¡ÆFp‰O€‹hw–nvX}J‚’Gt„[~“m{†`V|Yn}fŒŠp^yo}xqrSuyu“Ž\£xN˜mY•{f†ƒ‹n~nœ¶`•‰ZŠPzsUvyNjyK]t?]rMrqOp~;Xi4Gb/DW+1I3X}N…NryDBZGPZ>Pwo¬Ëf«ÃP‰¦p³Ìg‘¨Yj†X_xF_rEe{5IY'=\"C^7[n@XoBj8Zm>l{D_xYq˜ez•PayAPwHYpEJT>OYHXsJ40 -$&"#!%*9&5+1/0$"#!$()(#%&$'$&)&)#,"-4&36(:$20":778 .;$.9&4;'0@!2:#AA*:F+>?)SF,ZS.ON<KO3LQ3RL.V[0K_:ST2SR+_\-d\2Y`@[c?b`Cik7r~;_s?SoBIg?Ch7F[8K\3YV0Tj5Xi>Qc7Lj7Vc.T`6Zi7]lDZsCZj=fzEgvDYzKRtE`j5c<Q}EYn8[r2ftA`†Jm‚Dr}HY‰;tuCjESˆZXyBcx>S}E_xHau2[v=js@d>S~LdnK`ƒ:[~=]x1bz<_xIEvPSa8_n?Xr?_u5lˆEfƒNWUlvO„‚Ll¥Wk‰MkˆFh•FyY¤¥RcÄŠs_ƒŠK¨T~œkt™?XŠSh{CŠtb†¡F†œR`žjX‚PgxNjGi†EyŒSg‚FtC_ˆ`|~2k„H^KzŽMŒ‘IŸ O{«dkš^…’L~©x`¡ifmk‰_`•jV}rswHW°l^{qm‡Alƒ\y‰G†Fj¨J{‡Ms«RTƒAlv:‰‰:s¡A‡™ay¨VNŠGms<ljd”X¹~U™ã®w¦btaz›_rEc›h]“|‡Ii‘†{}an”IŠ=sƒHXˆQ‡˜G†§RŠž[qŸAx†Nf‰QtŒNt™_”Y”ŸH— Vq‡[š¨_P‡h‚xJ —PwߢL…¹Q”žYªá¨ÂuŽÃMˆªhnipLl£uy’rj¡ze•kcub_”S^uQ]”P„žvƒ¢]g¦k€˜iƒ‘Gc¥Kt—\•™vv¾Sr“Os•In—SpŸSe‚Aa£TlŠH`ŽTŒ¬Uš­Jˆ¤A—W©Tu¥[“£`ž•G«T…“Uf­VfŠXw—CƒB™¦Zq£Up‘Fšª>´I‚‘GpNx‘OƒžEv”>p[¸»v”Z}šV«OfÀb˜™‚©©O‚¤YtiŒ›DŽ—C› Y‚›u‰¬bm N”¨Sc‹™Mˆ—M©¢b|œNy¥O¦]£s…¬BebmS¶Í”²W»Z€´S‘\r˜O™J|§V€žSpšNq’S_„7tžDx¹tjµak?v–]¡Ê m›?nŒSe˜ip…ec|=g©DbD„¬Z}¸WkPˆ£N‹¡Hi“Pb†Iz“MjˆE\=]ŽFiˆQgƒ?t¢Od~Kw“Cg—Pn—Xz£g†£k‚®iŒ²gˆ¶h„³kq i|°h”³tƒ®y©n}žUp¡h{£O™¾o|¢i𯄱~ŸÆj¹Èn­ô˜™Çn¤½š˜Ènµk¨Ó`¾Ô„´Þw—Á•˜Çy£\†¦t… f~ŸošÇx»Ôj«É~“Ñs‹³€š¿b{•|…ºpŒ·i‚°j…¬†™·­‡¡x—àŠ€°t ¬j¥Ëj†³g‹²iÀØ‘¤÷‚޻І·vÂ_}ŸpžÄxs¥Sx¡Zu¡Ou›QƒªLzJm’Tw–N€Vr—Tf‚Wb…J^~W[„[b“da‡.Np/F^/Ww@RlN~±\`ˆag’[ˆ¦_’¨Gy‘Ue…N`wMlg~¥q‡«|†¶znSg‹J~SpNj”C^ƒEeXmŒR[|TkŽVlŠbs¤q„ª]¨¼Z­Rz”PoL^LjŒNn…Hj“WkŠMW7`yOj‹RvŠOla{Lq}i~‰\–†[xX“Œ`¤›s¡¨no†l®™diŠdf|OrY‹O‚ˆM~QszVt…I\p?_}]µÁ<`i5Hf\UqY<K:1:95I:9T™´ò·êÿ˜Éç›Ë킼Îe­]˜e‚ž^»?U]!Gh._w>q…GjŒIbw>j{M\„NbtRhƒV^†Nq„Kn”HoxCFKAO^LOdX,!4#3#/$1'/+3/2-++")"##!$!'"+/$).%,&&6$368:;=!19)M2"MM7H08=3=8$8?8=&78&6<%:;%8<%AB'DF)AH,QG+TQ/ZYA]X=bV7h]1d_1Tr?\\AJg4[^;d`3ag=Uh;ce=hp7_yEjsE_{JfjER~<HkCY[2\^.`v5[o;Zc8Qf5@i:TY3ad2Wu<^eCdu<oD^}EVrWZvEjy@bƒ?[yEPoCSi0jd:lˆF`‡Kj{Tg†Kg}Ii}EYQ]uB^y@q€@˜lOˆu<u„Sl{Gc‚M_iXxq<g„D~pFh†<gsFSpJ]b@Be4TS3Te:Ur4hnGfHP…_ŠIv—LZ”jhx[‚‰G|œPd¢d„ŠQq©r^”Xc~Z]oUa‚gqŽSs‘laˆCz~?h¤[u†fh^_;Œ|0‰‘JxK‹“MjšSvyAq‡S¸‡?±\ˆLtŒ[‡ŽBe³[fduˆQ‘™N‚±^e‚iw†BiŠO~‡Uk–NYEZuCk|?y‡<eˆ[„˜Pk¢]€“d}af¥a„{RiŽAv}KgugŒL“]|—[l‹DgF„’Anˆ=§p^¦mt…G…–J~‹R~­gpLr„>iMˆ†J‚¤`¶šRe»lc‰]ˆ‹;dŽf}‡Tw“cx‹?œ©HmÁX{IŒ‘Hr’N‹šU””XjÐspzLyJ—’[™Õx€€T·o—Qtmo¸z{•{„žd®¿^_¬T\}Mg‡<v¢Mi–Rc”4nƒDX§Pn‡A ¨On”Ul‰^f©^{³Y–_c…G™Pq¶xu¦I•Ov–I|³O|u<f~PiŽ?kxIwŒKœr„b“O|«`s“Y‘’\»õ›Â{–»UlŸT]‹:~™L²Zn›Ln¥fˆ£Hšr‰·]‚ÀMo¤U«GwGtˆA¥Ct¸m„ŽRФQxœs{œr†—B™˜u| qšž?¾QŽ©]¨Q¨¥N¯¼R‚žKs›Or¶K{‘N€†Jœ®l£X†”Pªf‘«VqšY‘©I¬±7¶sz”[›bƒªT~§AwDy‰Qƒ¹P‚˜O‹˜AiŽD‡‘<•Mj”[hœXn}C|‘NŠ¥Tu=Ž•KkWaŒU~=dŽaqŠ?fŠT{²Mˆ°bžcx‘W~ KnŠ@`‡Ou’Jj—Cp—?‡¤?}¥MŠšKz“Dm”Sf’Lb‡CwN}£X‰·gƒ±fq˜bŒ¾\}ªP|±Uƒ¨lˆ´Z‰¨blœPi’It§Tršd•²S„³k~¯c”Âx±{ƒžn™Ëh…¦e–´i¢Çt‘¼zš½ŒÒ|¤¿r{¼o†»U“¥i¬æcб^±Ûm¹r‘¾v™Èo–º`¬m޶_Éi~£]¶eˆ°vyc˜»m’¾hj’M’¨pµÃ{”Èe€£b…§{…°wh‡Nq‘Su–XušTr boQa‹Mx—Lz¥Rv™RгWŸX}P‚›Zf‡HeGwˆDby7a|DVyEr“<Qw(Cc,Ha:[uHf‰We‘Kg‹L„¨fy _€¬Xg—P”¥X£Nu›[„¦^r“Yo“Ji‰Gi‰Nk”^w•Cm”Io—?mˆD`~@qLw™TRLf„dˆ¥pk“Nt“Gd‡Mdƒ@r•Hm†F[@Os;Ln0IiOVzI]ASwI]†EWyJd…]y[`\lˆftŽ~†‰nŠ•YgujzT`kN`gVt~JOh`YnN`|Qi‰N]„C[sA]„}m˜r¥O“™E\f8KW'AF':O6I`y{¨Ê¼óËÃïÁÃ៹ᓻ؀…žjz¡tq¦OXt=xŠBg†T|H[|FKc?Ys96Y=>Y:AY?B\FQkIWƒOf‘JhrFhr>amH+$3&3+:*F/!8;"?7)35!//!.3/+*)2$<%08*;#D-S@6N!28271 D5BECJ1H=-TF+MH'HR+FK5GE7JE)MF)FI-IB(>D&7B&7<(?;&DA"RH%SI'LY.NT5XY4_Z4bg=Xk@ThHYcHRs:UbE`g8bk<Nw<Sc?\d8`s?dlAWvFcqC\~DarNen?hw;k{;ZzGgc:`p8Mp@{[0l},aw@Vv?[p;Vp;UjG_mOip>v{Fs‘Pf‡GWN[j4vl*m‚C_vFq{DgtIyZq“HbŠNnv@i}EyxAqp=^wE\}`XoBRmZGc>Y`:cgGytHˆ}Df‰UftAWk?@p:HQ/Kc+Ol3vo?[~;rqOY€?eu>Y‡W^vMn~6f“TwŒSzœkm©pgŽ`swG@u“C{ŒIx TW‰^`l=]{La~T^TbzS“o5u™Tg‡c‚€QŸal˜V}šUÍ„F³¡‹¦\› dx²JŒc—–I‰©YƒšKn»bflk‚>wƒO}…LrŠ[i‹Nl:y“A”•G¨´[€°Vfª`R‹Wbv]—‘Yt¶P‘†Px½NnˆTzŒNw•Qo–Wt•G‚ƒTXž>nLk‘Jt‘N…‡Eš‘Pµì€ªãtj¡z‰yI€ŽVtFy‘^œŠNd¤Žov<vŠFœWk«\‘’Tz§v‚”f~•|š§J¢¬O•¸fe±Uއ\oŸoœM~†Rƒ©U¡x©t¥œroä~ixB_’H~ƒ7•±R—¾\‘›^…µB[†?pzHv‘^f[ˆ‡C£Wo‘8q~I{}Hd›Bd|N‡š^•É`yªHŒ·h[£žxŒ]t®Z~”ctŠXo‹Fw¥D‡£Dm˜=bh7—”G‹µNž¬Ty–`lœRƒ Im‰}oŸku˜df—LmŒYsŽEz©[dGq“Jn¢E~™Dz­bgœw€ªCŒU‹•V„ªL}™R€ŠMy˜TkWu—Im™Rk”SƒM„²Pz©a}¦v±œYy¢[z£Z‘¸b‹Àf¡§HŸ—zˆÇT|•Kf¶Y‚S€ Ml§ZjˆIs¢F~˜Q£·x—£U…•Rž´N‹Âat—XµTuž@m“qkŒMm•Nc“]yˆM‡´Nx˜UpŸ>]…>m…LsŸ|¦IoŽU}ŸR‚¥CŠ•^l™Ik€HnŠFaEy_{¢f^Ul›YeŒFoˆ@¤ºTk¶Xt icŽSu˜KŽ«^xŽUYœWd‘:a‡9sGÇ]r¨b~­\b’LyŸwpŸ[|¼Yp—Sm›`‚¢_rŸHoŽKlœRy¢IˆŸbz¯lxªQ©W€›M•Äa~ºf|¬_°¾sœÌu‘¯o~®wvŸq‹°vs£V}¥]‰³o³s‘Èd“¯Š—Án‰»x‡ºs—Îw¥ËV’»by§o€°\x Vi•R}ŸG{£ds”Wt˜Mºu’É“²by¦Nz£f½Uˆ§P€«\z¡Yƒ«Wj¢BzœTk’Fk”MkHe‰Rm–[d‘K€šUqŽHg…;nJ€ªGg‡Akƒ:eŠ<hMm˜8c|*`~3h:_~B^€>\ƒEa‹Ti˜Zm™YqœOpœf›®Ln‰KcŠNu”Jj”Dp‘GkŠL~¦bˆ°V©Ua•EdˆPu•O‚¤Sl‘O^€;aƒOe‹[eŠJc‹MZ…Lf‚=W€FPiAJg/Ii,B_,=`<Qv<Lp=^v:Ny;Gg<OnQOqF?YBMqXrˆ\RlXUiMGZOi}L\pITlQbuF`sIZjESmHOrK[y;Of5PpQSrXW‚q§Z_xHo‚;vw0]xX˜¬f|¨¥Á³‘¸¥”²Ÿ–œ˜Â‘°k„¢Yn‘Ng“c©T\€WezALf8GQA_q.C^8cz1Xf*AX4H_<QnUk“`ƒ SpoFhv5J9XAJJ$J=.JD-?D-CC5LB(JM(ER&ED)=@":6K3"BJ!8Q2H?%QP#Fe1LXCRT+]T(Rc/A\<V:4mH+RW4WK?VO.`Q6Ta0V[7`^4bS0QV2=S60C(;8'J;"V?%lJ,\a4Zh6[k2h`8vk:]‹FghR_l@OpFKjJ\W;bs7UxA\mD]m4Wt9Tg<Gq:]`CRq;XrG`t?g{Kn~CaWhuFow;q{Dy|;}DaœSW{R]tGcp5lyDgŠF\‚<n|FqŠO_P]…UQr>sp=n‚C^~PatAXmBgtOR€NklQb{C„xHÇ„F`¢DRhRQkAGd=<W9JS/Me+_\;ah6‹uHc“PLuOHa5IW5`Y-X}']{;jv;_}<‚yGa Yiz9T‡Gjm=nŒ=_›UY‰L^vTw~Kt‹FeU}€M—§S_¦c_‘UuyZb€<goHhFW‚MipGŠ6p£lf‹<p…Ai…ablLdƒQ}‹Mx‘eVƒ„ayª`‘¥Zwž^w˜e™•xr®Qyv;€–It–N‹‹IŽ˜Vw¢_ov?~“^”›\—¬lv¸ˆ]]¥Wp{/u‰IgŠg]‚AxŽPŒ[p§Yx’Wm’]”™Gi½LU‡`w7‡ŸV„Ft‘Mˆ›mŒœ`¿Šw¦pvt;„–PŒ‹FdX QŠÃk€™8±ŽHpÁ\i”^€„=…X}°\š‘g¯½g~¹‰_¢€yvr~¨F€¬h{”Q`‹I†ŒNˆ’]†”Iœ˜^§´oÀ>†‘Nq¥6g™‚žq¶a{Ù‹t†\y©EnAi†Ks…Oˆ¢nx¤Nq5\‡6~o_O‰Lf€Br›_Œ«si˜g]‡Df„Bnœe†­GyQk£da—BkšZ~šRfžDŽ‹L‰½[w´ai¦Gp®\\“O^ƒ>_¡Ne…Lu‘Oky6›’?{­fzžZs‘Ec¡Z˜ŽL“õ^›ªNs¨mm¯Y¸`ƒ–Zƒ”Q‹›7|¿No¡IÅÐTi¾O€‚Ov›Eˆšf¼T†žGžÊl{°t†MyŸ`ŒÃ¨xÃ^gšZ›“bw•Ng‰]€“Iw–J{˜Kr¤5‚—OršKs¢Vo™\i“Zv”Xw˜_€˜E•—Z†ª]z§Ejœ@~¢Hv¬Yg“H·¾m„»^_–\@‚•Bh‘Nt•Ph”H°Q~®Xo“KrFsŽ<‰¨F|—H¢¦Rw“Ll‰<n–AnˆO—AµdI{Ch‘:tF€«hnŒOhœ@kšMeBš­OŒ­e€²T`£Z]{AgP_ˆRkŠP{Ux HsŽT‚¨Mj‡Oq‘Mo¡WlˆVf”Mc’LŠ£Xp•Ss¡qx²Uc“Ve”™‚¯nx¸f§Wƒ«Rqœ\t—Wp’U€µ^ Âj§½h}¤g•»гb}©_”µ’ŠÀއÂpw¤\ˆ¦_©tuŸTЏk|±p«l„º[sŸmu£kxœa‚«Qy›alŸVt`v£Vz¦\o˜XxžKŸYxŸNhIp•Mk—N_“G_„Gs˜^{£Ds™KtžJsŠOm“Nm“Lk—A]‚Jr–Ql˜CmOkŽJv‡?s”Mn“DeEsŽMp’KZ„MnNl•]m“TeŠFa‰Of’Gk‘Rr™Ol›Zqj~¥Lj‹CiŠUƒ¡^y­Vb‰LVxF^ˆNYˆNdBZuCPxCiˆ=Pn4Gh0De.Zu4Xo5Rq5Xw:\}<Y}5Lr2Lm6Ll6DS/@X0LhL]‚aI‹2[_EizUWt@fx?d‰FeUbrB[qInDVk5Up8[l8Zp?^†T~“WoŽm®Ïy¨²Pzkq¤f|¥…žÄ…užmiŒ^q ‰’¹Œ‹¼†•¹V{™PkŽgf\kˆWgwASqBZbC]wBZtSk’Qny0Nb)C\:Fbfmއ£±s…†Xv{5VP6\\3OZ7SI?LI9LD7GM8MZ/VU1Wa4\\4_Q3VM/VP0LS+@Y=KS2YW-Jh3UV?eY/hf8Zo@SXEbM8nY*\Y9[fE_^3j`2Zl;fhFge7vcAef?]d@DR6JC.VB$lI&vZ/qn;dI_tLalDkp?ZJ]lTQf<[mGUo>tW>f|6ZwNosEV‚:Ur@Tf8Kl:]c;Uq/Rh@eo:juC[}CjvWZ{P^z@NtCl\Ck{F]…Q_rWcvEU{@^uOfyGa…CXxH\sJjyNe†MYHXrDiuI~DhŽImqDyq@q‚FhpFr}>rpKhwEz…Ud€WQl:Wd5Fe7BU"KS)Rh4Th0SgF`r7UlB]j0Xo6qg2VŠCNrCSh@]|A}„Dl¤J`…QK{RPh4\m;_ƒFd}=b‚<p9u”KmžL~M|³PU•o^kAuw4m‹HeŠGgS~EPˆCjuFb‰_r„KuW^‰LƒtGl‡Bs…Ew„Oq€Lv‘H|ŽH‚ŸO‚¬xz•_«•O’ã‹u¬s®fRœglyB}’b§[˜Pp£]eU˜N‹±kw¦aœG‚°H—ºI_ŽQ];m|(s‰Xg[y…Oo~Rº¿?r²z“…Gx¢B…žaƒ¦]«\Œ–O{¶hjŒaqƒK}œK“ŒL’×aO®_‘b9z¹n±pư`fᣉ’Po“Gˆ¡g™Äui´dx¥m”®ƒ„ n“³:Œ©lƒ¨c—˜dˆ¶M•J‰µj“«aÏÉNiÞ€|•‰zš\{U{‘L£L‹o„¤h`±Iˆ˜_cJ]RmEr¦Q‡O…Žg‡L¢›A†•Ad<l‡GV„PwƒIi0`™>†›Q¬DpŠGdŽEZz<pŠNrœWz£Bs®Qœ¥fzÈ[j†Gk™bi‚FV†>^rPdŽ>a‚Ey‚=xƒG~“^y_w£Ll¥Z…•7°ÿÚ¢¬Sw÷Vn˜MqÆao4ƒ…CgšRmŠ\m†Iˆ”i~°™Š4z«e‡ÐCˆªˆk˜Jeªh•xh˜If‡Gs¥]Žif®Y…W~J›Ž9†ÃE¸ÓRi¨Qu uz‹PWh§O®JlšCˆŸHgŽL|„I¬—Zi™\oF€®Fl•Oj¡d´htŒ^^‹KjŽMo¢Mj‡G‚§>r˜E{˜NoˆMzŒLs™JzœPy™ez›]g’Cj”Hp{;€«:a„9`Ap‰Km‘_[†HnEp„Ij<W‹A„?|šIm—DtšEiwƒŸ]mX^’Dv“:m<n†7u˜C_‡Dp–Og™ClšYuœPw¯C”MzžFn—BH€¦_y¡Gp–Qt›Rx¡D|šLx£`€ N·tl¤Zz Jƒ´ZoŽM~¶cŒ½ŠÈÿ°…ÔR{¤TtNzŸMy¯q“Ëx·f}¬\g•YU‰Wh™Sv—^vRt™]g’co˜Pq“To’Xf“^a‡TkC`xSy¤V\}Vj‘Lv›T^ƒP^ƒHl…Ks“CZ{D^|C[xCa†N`‚Iq‰Pe‹F^A]|IiˆKa†;W{<m‹TiCa„Di‹Lm’Ro›P_„B´¢EcJ`‡9Y|CqˆGb‰Hb|Lb„AnŒFiRa‡Uw™Hj‰Ae‘\gŒNa„Gn‘TvœYn’U]‰<`?Y}?Z{<Vt4Us<_~?\{Bg}:Zt1^s;h‡I_|;Vu=Rz?W|9Wz4Eq.Tx8^u,L])Ra.N\=WxZl‹\j“Qo…Fp…O\yC\€H~¦^’£Rm€GgxIXtD^t8Vg?Uh9b{`¨Ð|ÎÒp“°Œ±Â™¨k‡¤Mg…Zs”zv—hq–Vu‹\¨›¿“’¾“§Ë]u•Na€R]€W_‡WbvIWvLfvKa@[~SN„\Mi9@Y0EZCOo^X{‡t–€r}n‚‡GO\ASW9^Y7`S?^T5cX9Z_9T]3UM1bX5eb;oZ8YY5U^;QW2J^3I\3aS,Nd0TQ>`Z6_j@_dKcbC]f7ag8vi=b}EXi?mY:^s;^fFkg;qd:eiCepE\aAdc6j^1q[/h`5hnCX€M\jUXuKck?gpHQyKR^DUi9Mn;f[?as2otPv|@]‰JWrO^c9Wm9Zj9[n6XrATl7^w9_lEqiCk‚Db‡QNfGc_6Tm4avHUqC]nAll=cs<iqBZŠBSqFXqDSq1RmGiyJe|BruCj‡@fˆUkvOjxK…qIb…=\sMamJ`m<r~G^~RQoBVa6bf8\u3`k3`v3_|-VlBdf.cv8Js7Kb<ck3\{JK‚Bec/W„>ln9gŽPY†SeBh‚1hŠ8a€:Z{=f‚;€„Bb”NoƒIeŒO_ŠTt€Pn@i‚Jt‡Lf•Gp„WrE_‡Oax@U†6v€>}–HtMsšDpŒLuwD‡‚F¼¢UßÓU„åk“`{ŠZo…Xg•Mq’„‹ˆd‚§[e•aˆŒDo›Wo\s˜jgŒLp‹G˜ŒE’ÀsžÀt|ª`„§vÕ¾WwßkdJf¢?[x?^pQ]g9^€R‚„Dh‹me}E¤dmo“[k€Us{\i|WdœYsoD_ˆC^qCh“b_Žg ”2Œ×j¦¤Ty–Me’ƒ}G¬fËPv¦bt§rXF‰U†”u‡¶i˜d`a~g=x§Rr•ns…h„Ã[z‰C ±‰‘ÎWº®c‰¦fp¯YŒHœOƒ¥NÍmŒ¢Fy¬R¤I€™Rh—Cš§M¢½e|™TŒ¬sg |uš[`¬Hw5v‘4gz=quEp“Ms†ZŒ³?©[Ž”3}AušH…¢T„¡L…¶bj¯nŠ¡;‚>‰´A]§Ej‰-h†IV€AlGh|3`˜K…“B‚¥`dœUržH}¢ ž¢ms®‚hEfˆ_›@|©IpµTj–=r›?_ƒCd€Ys„9jšfžº}ƒ–Wi‘hW„^wx:†˜VŽ H€®ev¦TͬYŒÉLÿ»Tr˜_“ºx©{o‰Uo¦CkŒ>a„Gu—QvWr‡El¥_sžHƒ L—§b“´Pu¤KrœoŒ—Fq”LyŽfj°FeŒ;wEbO`‰:r‰[vNˆ—Zb†Hr‹Q[˜Jh’ba‚Co‡EhOoAaz?_‰QhIx˜>bƒ@v˜E_7‚‹Du>pDf‰<e~oƒ¥pr–V‹¡Xv­Nr¢\€R€¬Jt—V{¤SršMl”SgšGwJeŠ?a€7oFgƒKi™K{¢SrŸTy˜Zƒ¡O‡šKp—Pq¡Kw—RZ…Gl˜O]u•Ow¡Jt¦\r”Gx¢K€ S| UxžŠªæXqYc”Q“¶X…¢Ux¨`qšLlLh…=\~5sŠEj…B’­e|£E^†AmMu T‡¨D[}Dd|F`‚HkKp•Pg‚<iŠFiˆLWƒ=[w<rJ€—VY|.ly<Z~7x•LîìKhGsŒ<^|7f}<k—E|›Dgˆ9mI]:_€C^ƒE_Ak‡F[~7r‡L_Š>Pu6Pv9[wEWƒ>^}:]…>X{K[‡KcƒD]ƒEg‰Pq¡OcB_Aa‰Nc‡HdƒJmŽC`HiˆCZ{:X}8_z?a}=Vz;m„B`5\z>d€CXv3Nh3Kj3Jp6Nt-Fe6T};g€Blw1eu:]l9kNe‹J_}Ph|BlOctAgŠW…­|w—YŒ˜G|ƒB||Axu>es8a{P˜º–ØüÒáý˜½Î•uoHh[i—Wr–Uofeˆ\v˜a…¦z™Ã¬Áᑌ£uo™Zd†KQEj‘Xp”Vz”HPoM`}C_…2T>KOgl-G`:KfHd„b€’nu‰gJ]gQcML]F`R<le/rg;pp@`nHdgDZk?Yd8YX8gZ3en6ed?Sg<VaANf1S[6]_5Ma2SQ=VX9Te@gc@jd7fo7btCioAb{GPnEc\<bt6k`B{f;uiAZlBbmKYe:``;cm?ik?ez@[qQQtHcdB^z@asGRd?_j>TsGWn@cp>cq@`s>izIp€B^{QXnP`i7bc6Zx=[l:]u@=sCJb;S[0Tk1Zr<Z|SrqCqz:\}>]wMUlARpCmk9lƒ8^{NmuDWvLQo>Ml1U`4ah<b|=mtLezEpTaDg}cf~?`ƒIUjLck=VhA_pDf|LVyIjf6†x9fšN_~HRx3AxD_n?\4T}?=vE<b1D_0me:UŒ<Yv6^{6Vz7]{Aa‚Ch~;bŠ:]‹CX|Fa}<h…;c‹Ic‡UoEe•FhQ]„@R}EkrJh‚A‡RsŸWa“X\‡]q€R^‰H‚y@ˆ =sž]bŠPn}QŸpD°n—”T¦²ytŪ€ƒfŒ‘_€˜Xj”RR…¶c…¥i_Œ\h…=…ŠW£M¡«WÀodÁ^d•Q]‰`pŒY}•\¢cŸLZ¶pŽyO€Œ6¥P…¿S|{Yu¥8v¢7V}„S–I†¤eƒŸ_e]‘…@wE—œPl‘<vHz…=w‘A\•Ex†<{—{€¢f‡’nl²Il˜@vH|Ìw^™Wb…Y‡†Sb¢Bµ’^ær”µm|˜`ŸP­™dÁTŒ±D—d“ª[w»d j{ŒTo„i{ŽV…™BnÂk…ˆCt­_c°ryŸlˆ“^•­Sœ‹O˜=yštv¾nž’LlÂkiœXlªQj|)xƒ8TŽ@hq6””E‘¤Ow¸suŒZ£¨Ov¥QxJq­RƒÁ|n“U`¥\ňLj—]_]hgh‘;t…@p®;s…9®Mm‰C|¨=z°^’”=i›Djˆ3tLgDf€?e§Hx•CuXn‚IrKl›Ng“FoŒ6q”Cd’Qn„S|–Vs¡=oœExœFz§ly«^‚¬Vy—O†žu€~c·Tqœ\a[hŸTm…:_‘f}–Lyˆ/‰¨Tw¤;Èé9z“C~ªTv‹U{U¡©u} Mk¦]¢«Fm¬<lˆDpªWx ?{M–³Gu«Hl™M`’@t™RhŒ?m|AgEi„@]ƒ9m~DZ™DcxDk€>j9c‹:y–[mŠ<|ŸQt‰Bqx?z–Kw‚>a”6s™Cm‡Mo˜Qg–NNxAfŒJr£Wi˜VoQpœIi£MWt?b|8@‡£D^€AcK…šVs¡KœZ~ÃXkœZk‡\mŒJj‚Io‹EaFs¡Ad|@f‡Q„Ut™P†¥Mp˜Nˆ’O{V’QzŸR¨±’‚®KžH†ªW”ÄOj‘Es–C|¤Ez–@|Š;t‘DvœG“¥ix¤TšI‹ÃKªW”¥W„’Ds•B‡£OpIxR‰JlxB–?pƒ;dw9zzD€‰Pˆš<m{Nt<u€‹ÿÿíÂïBkƒMi†@qŠ>k|Cs“Ld‡Dd‹C\}5^{F[=^€7Xy=[;s’<a4Tr-W4Rv<Vz8^8^~5Z{:Y{8]~Bm‘F`ŽQWƒIT~@d>`A\s>Z…Ha…LbM]y:QtAq<_vBWw>ZwAd†J^<V}:_s4Tt4Ss(@a-Pn3Ru0\o3Qs<l‡Io†Lx„@y‹GvIq‘FoE††F}ˆ@aw=iwVr‰o„c–›Q•P¬’VŒK‡’J~™c˜Ë±©Ø¸Ù§°Ëtj‚9\z5g“P_ALqCNzTZmd—~ƒµ¶•Æ‹x˜J\xS[sI\†Ug–{šÀ~•¬TcuBc{;_y9U€Ba€Qb†B]„IVubl–uˆ¢po†PTeFFO<R]AgV5io9huCf}JjhLdmD[r@EpCU_=i\4am:MiEQjHX_=\e2]`=Zc6Kl@L`=UV2U\6]]=m]7mh<UqCMfHRhAN`@]d9Uh3o]@lmAYgONeEZa>SX1Q`;m]:_|Cc~RqpPW{NWo@Ym=OwJGbGYb<Qx<SnI^r:[vGj|Qh}PiuMZxTXmI^m:kf6ivErvD]€BNpAQd8]k'^{5dq;etFexDm}Eq…QkyP\†A^vG_t@a;S€P`k?SqCQp7Xk2m`+a€2]uBZcEjq=\‰LWy>cr_V{A^nOZxCRq:QmOjc9s…=YˆMho;a{;jƒar|S^ŠHXwKQq<Ot7UlEIvIAi0L^.ig%]ŠDIwHWj5T{2_z?w†7a›Hl†Tk†SX’Cev@a‡?^yD‚Cƒ›UlžGpOw’Nc™M“}@i­T…ŽU‰¥_l“]~Jf‘@^CkFs`X•\ˆ}EzžG’tO·Z…×kx¤b|‰qŽ}C¤ŒUŠ‹XˆWk‡Uk—`‡†Tà™S¹Æ`w³g«–VŠÏ~x¨{…eh“LPl8MT.{r;`’Q|b6Yšf@eHbZEŽšIž¯hX¯r_uP‚€` ¥Yr˜no‚h†•X€™Wr~J›ŸNb§qŠ{?x©T‘al²rg…djtg\Hm…Kj]¸ŒU—ªrœ¶Es’R± Qš¶syº>xˆJ^‘K½”MÿÁ¶Ç†Ö„k–Ur‰]x£‰|£~lS^[„nX±¦Y±¹]À˜=¢FvŽER¢b—|7Š»]v½Kf”OŒK¾f—˜\šÃy…­@q¡VuEm‹exŠQ„ ]f‹Ee”FQ’W_~2cšLyŒOt”L„©ex½jr¥gq”by¡`Ž•`i•F¨šU ?ž—XçEƒ³P²¸]‚æUs¦m‘-ÙfdŸM‡Vcbu\˜™GtŠ=wŒ:r…GmŸHj†Qz¢T~“FX}<tŒUa…]i>sœQs§@[…G†“Jp’Pi‡Ye‹KÊËOm¡Pw“X…ÄX›QbŸZ“Ž8~‡7Š:e—Gt Je‰?Ry>ƒGn›B¨Âa•¨Uåþ×»ËKŸC}£Ds¤GqœP~¬px“?xžMl‡Si’=‰ºh„¯[aœL€¡rƒ¢M R{Sb“La€>gŠHh‚@]?\~<g”<z–=p‚?j€:‡“HT’:d’Md=g•Ed‹<m–@qHw‡BmŒJm—H~>n‰RtAeŠ1Z…<jˆFfœDh‰Dn‰Re˜OX€2e6g˜?s‹Hd“<e‰DaCbƒGr]lŒE‚§ACvEe=d€Q]HbJƒ©F“¡Ao‘Uu“J¥¬fu“OkšU~Ÿ^‡›_†˜Qs˜Z…­f~¦jm›`m™ew«L’^w­[x¨Mg`t’[¯O”¾pîýsÃo¢Æm”Â}”Ædž”YˆK‚¢b§O©c›ÁR˜U¤£WxŽO’’F™ MŸZƒK—ƒBƒvC‡wW®°ÿÿÿ“ž‘Qz€?xyLŽŠO…ŠKŽIŽ>„‘<s…@hƒ;h|2yŒ<|•=oŽWi’:f~4f„4lƒ6r‰=i€9`8_|Be‰@{œG~›h²CY|4Y|A`‡;b†=\8V{=^ƒBd‡F_}=b„>d…B`y<Z>hƒ>]„@Yy2Xw7Wy4c2Z{(Qo1`ƒ2[w7p~7d‚=w…Jm~Iq‰Jm‚DpyG}„TªŽY‰‡MoDe€B•O—©_›–f¥—Ty|T‘`ž™W“ e’¼ƒ©À’¤Å€Œ¬~wŸ_kˆ<ˆ¥(<^)'D2L#U‚1RJOgic€tii]C_…AX{NkƒUbw_ƒzV|Wdu:Kq5Ps:EkCHc;JkHa€ZiŒ]_m]‚[MoNew@ZR,cnIX`?ed;fmFdyJ_`Gdl<[q=`p@akBk]7vg:dqFdgA`d?Ze5rb?Yo7\jEQY>UW/U[2^a8V_9\a<WpBIbDU]6G`/Sb8Wa3Z`3Sk8^_OQe@ffCkn1gwBvsEnDiz``wIVR`sKYq?SpARdHaa5gp6[†G\p?SI]oKzzFk|H\wParDlu=v~7qrAiƒFrOŠvJ£’@SÌN[{Tdl<]iD_oB\t=n~IuzBqLj…Rf‚RnC\€PjwL_†;ex?b|A†l7}”FjRfwHcn6j€Kh€HY‡SQyAim?U}AWkBVhAfl7e{@\‰SkzDj}=[{Y}rDX”ZPtPFtHSb>Wq6Gs<Gg8]_/iu%VƒMT|Mat.b€4a…@jŠBZUx‡L}—Lb•Pv‚Mc”:pƒKXŒFcQqƒF†ˆFw¥U{ŸXp‘Ml›M~†en™\cyf€{Jj–UcJd…E]sIZ{Ha|@ox?ƒH…žT«µ’n¤ÑdͦKºÙ|ËX‡ŽN‰Œ\‡§IŒŽHŠ—[öŽwmÈœ~ˆLsžh|œm“—Eˆ¤^œ¥;‹«;’¥=«ªQ€ \nšYv{@rŽ oŽC®™x¾\~š=ªŠ?’Çjz‘}‹¹J¥®`£±g\šT|‚M…´v’–]sœ^eœN†Lv¢F‰‘Co…E]zK_wXp~TŠƒ|®q“Sx„S” |z–ƒwEq´a~6ƒ¤|œ¥}…¯„v˜a{.}ªN{šLi|A€•4…¯D£QxœJ|“H£¡N} hc–Qk–4j—oXŽ\sCt|;€ŸOh•2Š‘K•£gœ°V…«F³Xk’Ab]nIƒ’Ck™Fe†?g…Ah<~ˆ[x‡Tºgi‘N‡=a¨Oq—K{£^’Ni¤hsšJ{¬g›ZŽ—w•ày†M’QjÈ~„C¨K·¸@‚ Q“­Lx¦JušFhƒA€ˆbs‡7zLfƒE\Š5s‰M]~<c|/n•Qj”cd~?|xDtŽ;p{;…ŸE¿«‰¢øœ}‰4oˆWjI‚ b|žIvŽdŠ I˜Om…Lo‡;{3¡©cl“=uœM¡®txƆt±rrUjš`w£CiOuŽIi˜S³Å†^ªE©WMbz¨[q„Fs¢Sƒn›±XŒHpCx’?„…Gt’C{@f/pBxJ~•Fnœ4m’NY~=Z{Ff}5h†>]…5c„KtŒIs•Go–Dp‡RxŸRqš@w”Ia@V5g†@_‰<p”G`=_†AdŒ>v›J~«Xt–Ma9kŠ@]Œ5`?w¤MqŒ=mƒUw˜SwŒDsŒ6}¯Js£<X|:`^–·…sªWs•Qr¤hšLd…?d]Ž­\~­\p—^ªmu©V[‰S‚­U³Q‰¨soœc–éY_™9V‚W|©_†§l±Ñ°‚§h—Å‚m¡p~ªkw‘RušWi”[sV‰«t¢`|œf‹žeŒ§b“–\œ¥en‰XÁ°[ÜÔ…¼Ë[ª–VŸš“½µÐIJk«–L†—Q£¥[ƒ’W‹œp•ŒFh{^mxKˆƒA€†I’¡g’®FuL~‚Cm€C{†B‡JŒ;ax=e}Cs<|›b‚ª\z¤ie‰G_=U€<^ƒ;l‹Er=i†7^~FpIh‡Cw˜OiŒ<lŠ>`…;cˆ?f†5d†7d‹5g„:Z€8^~3Y}:i<f†?]‡Gh‡OxŽAZt?hHt‰HxˆGžc‡–Z¢¨V£¨NŠ™TŸ©}°Â_‹£^{†Vƒ“W¤ÀwËäq¸Îs¥Ë‡”·t–·o˜Xg}5Vz%<V/G5MQs3@b@XiHVjP\wHIhBfPgNLgIInKLcB=YKLjDl‹Kv‘?p‰:^y,La:>hUV€W`yPLfGRaKIiLBQ"jgBbcEbm@gtDatKhrFep<Wi?pl>`i@nd>…c9n‚IqtRZtB\pCfjBY|8^nPWd@Qa8g_6nj9cz=WqGXlAWh>Z\@T^2Xi=Pf4Q`9SkAzdC\}8]|Rj{@lNz†M~’Ql‡WV„RK}QIaKXl;Gs@Vj@fh2ow9m‰GeEl„KfGp|?]†QdvQtxDtHs‰N_‚J[ƒR€rTjR²“SgÍrb‰‹[>ngDk…;cŒHTƒPtiAs‹DV†[bs_kƒH[yVdwLv{Dv”H`“Rt{D~“Ic’\yy[hŒFrƒLkŒIh…ZX„U_n;i{D^‚@`~Am†?f‡GbˆSZ€H]w>RyRfr=qJ\•`RJWiEMw1Ao?g]4|6v›5“žTc´Wƒƒ@ƒ§Hw¥ShžYSNcyCw?jcn„Hh”Jm‘R[FY€Cp„O{“Ph¤U}Šp¥Nq¦XY[k{MpŒ>xDZTO|ZKpA`o1h‹CkƒG’…=£Qƒª]Œ qm¡{rŠh—·™Ÿ¹­|Í¥œk¬¦Z·»[‘Âg™¢bÛŽP¸©‚‰K‹>t¦Z¦q^”»\‹Ár„—lpªq•¤y”½”§¸gi¿]VqŸmŸ;¶r¢iexK|•‡w{\œUqÀsv}\n„[i“@xŠ]{›a¥]€¬K•bŽ˜Ph°\t’j•Zj™Hˆm8»ŸA†·x{m‡ªbs‰Xä†Kªÿx`ŒV\XMq…Rqi®¤ts‰`drRz“MhŠac—P‚›Ypœoj¢Sn—bMIg…Wxµn‰°Ok›Cp„>mŠD–8”8ŒŠFz¦P«U‰­W«Ís~¶c¬W|™UjxQuŸDt¤`k¦O‘’Yt—<s”Bl¢MY‰V]ƒOa‡8j’9€’[`Dg~IUƒCbŒUhQŒˆWo“[”¸f¶dt•Aj£Of‘Yk˜>z–Q}¼¦ržhl¤Ov¡Pn¢ac…=n{B|ŒF¦nŒŸ@qšPk‡FT‰Azz:p†Gk˜Hw}=|Ž;{“H‚’H|¢Qt’`•ňdŒ@]‡Ekˆ>x„JrˆJ_–BwˆLŽ«Yƒ¬Kœ«PŒ·`’™[€†U‡‹P]}Tc†c|‹VyˆC\ŽGn_KyFa„?mŒ?v¤X¥Uˆ£Z_‡F]{Pt¨Km—HhG±gpžFgžLc…K…’OtƒPz”FxŸRz“IwHcIržGw•?v8Uy;k~;f˜?^…9e‡?y”NiŽDn Gp°A€¨Wd˜RsW|•<cŽ;a>nŒ3q—Da{=`‰Cc˜G`…He‚Wd–K[ƒ?t•LW”7k†>¹O{­V~°L¢ZjšO‚™\hXhŠOgCi”IŒ©Uj‚IbŽLoKZƒO_’@ZˆAu\ˆ½Si TqV`ƒHjBhZi›h^ˆ^zc½ìu¤ËX¹Ny«Ux¢[‹¹v§ÄiÈ[§Hk—^q‘c޲RY}Mc”[©bw“YršWo’\âõŽúÿ‰çÿ¥Äï ÿÿêËõ°±Ù¤n”Ÿtµ½y”£tޤ`t˜]‚¦d}’aœžcÁžV–šDj‚L©›]“›a±¶‘™¤H—‡YŸŽO‘€^³•_¤”VˆŠN|<s‚JZJs‹bt—Ql\d‰;^†9hˆCt“Bt“Eg†@bA]AgƒLj™ZÂÜV˜·@uŒG^‰?^„<n‰AhCo“Cv‹>Z€<dˆ7Y{Dlˆ?\<X~Bk‡Gs‰Bd|>VzBl‡MŠ•S†Ÿ_¼»b—›v¥¥m¤\s‡zr~k´«[Ç¡l»Ú¤ÛÿºçÿªÝÿ£×ü‹¶Íz“»ws”w˜ZL]0;U"Ea!Ha'=V(@[7KdDWpDW]AV_?bpJ_{VXt<?_9Sg;Yx=LhHa„Viˆ`e‹Sa‡Vj}>Ug6Xv@]…Rb‡Eh|Kk|Nd~Piw2rYAsiDY„LUwTXmR\hJYm?]nAXnDYjAkeJyv=j‹PnmWYuJfvPnAoŒI\ˆYMtCXfEh`9mt2d€K\[`hFdr@]gAVl@OiALm1Rf>Pl9e`;V„2X~TUwFZpMkuLj†MlŠU_|YauVSyA_f?Zz;byFix9i‡Df€Of}X•…T}°PgŸgVU^nOuqGgNo†]S‰UWw`ziCSŸOe„d„…VgŸ…OƒLkj@Zƒ6V}RXyLesFq€B`‚]osTk‚GU‡VooPi;a„Xg‡Xd…MwŠH€—O•šUv­bhš\Y…Rz{U]•Lk‚IiŽGr’If‘_x‹L€“P}Ÿ[Q”RWpL‚}?\¤HbƒZcŠV\…NXuAJx8`gE`z5`„HuŒT…›_d®kkŠ[w’Hh¤{`”l\…SX€Cqv5g–N`†Qa‡Q~Wi¢ZQ„PetIgDh†\QŒQZlKLxbVqgxpF‡…4jTp‡Mc‡L^zAmn6ª’Ao«a¬“PÒkwšƒiœ[_YqzSuŽdv–|j™b_ƒH\yHYypW‡zjmkŠp…e›¥_¯…g‚¿f½™MžÅU®®ki±s\†Yit9ô™X˜ÿx¨ny–E’p‹Àh”X®»No_¯ŒEtÃHx‹bk›bf†J‘x:¢„FZ MˆjOv¡Lo“sŠšU±Òv‡­dn•X—žDp†^‚“C™«mx¸Šf„U…’VžD¬§F»Ø³™Ã–ƒ˜;qK{ˆC‹§P’ŽQp‰P‚¤FZ ^v‡Ax¦H‡œJ†•Ia„DX†=bn(h}?sŒU_’bwPm–B‘ƒH £]¯MzœN¡L‰¨S‡£K‘SoZuƒCk“EeƒDvŸNg†D…K¤bn‡@o TcK‚®C„œ9`°@yz?¥Uo‚8„—8j£:x‹G…–IpZ€¥b\™uz†Fw¦Ge‹GvLIp×j}›_…™Oˆ¦Zn˜ar©J‡ƒ9…8”Yma‚‹TgBh|@wy;¤?lŒG‚Ctža ¬N”«X…¼X~Ar³Zj”F†A[‰;p‚<f”JW~KQs:rƒ:£ºU‡Ê\žÄ‚»cy¨H‹©He”=x±4[uPer9wšDs¨?dŒ?_|E^†>w‹Ob“_}}P_Ea…6h‹;^’:n†<mµpt„Ng{BlŒFq S|GsŽLaEXƒ@eJ]y9gžYV‰J†œOv6‚•?lžKg„9©@ySu‚AkIq¤Tz˜lmŠ@s¢E•©Tw™5q‰<v—EX‡<j‘B_ƒ>Oz<d‡@oŠCmB`‡:q…Bh˜=uR^“zh…Ql¨Vr™`W{>‚XnšDlŽC_ˆ?o›dsœM¯§Gv;•°~ÅL¡?…¥JaL\‚Nƒ¦H«Z‰¦Dx¨]†´Md’Jkž?SuKs£z²ˆu«l}Ÿ^zž_­k‡¯w¦Ãpn©Tx ;ˆœe˜Åmqš=hˆOx›cƒšo ½eo’a¬®±Æ·«|t¥€”º¶°Ç©ž½b¬Âk‚¢nwžktŠ\p–TfŠCmWe‡T”žb¤¤bm£LpR©¯idƒ¢ŽŒ¡Z½¡m•¢i² qÀ©o¥Ÿe¸›[¹©Q=fw=nˆL…˜\v•Rz’Hu“F}›NgGvD{’?tBc};`C~¦ëÿ¶äèLqEx“Fi‚N‚˜Iu?u”Dv„D–>hƒAx„>Hl‚5wˆE‚•EƒŽRvB^z=x“Nƒ_|Ÿ‹­Çw–¦^~rVMeFl|Oy‡nµªw±¼ƒ‰ ¢•²¡€¢‹„¯°x…¸n|ŸahxZRfE>U+:N7J*:R=GgOm‚t’Ÿ|¡u†‹^g{iq€XWpT[qMj†c—\bqTcpYg‹on~UWpOOmSVl@>P?LnI]w[d„Wj‚`|Ÿc¡e}ŒCc]CyhAcŒGY€eQdPM_AP^=hbC\s=YtIgiJfw=e‡XegTe~G_yMh~JkxKgRVzQQdB\i2[e4awKTsQKiNng?oy=VƒEWdIOh8QjBJj=PZ8Jk2WgONd<Rc=Vb7\iCdnFenMXuEZsK`nAjx=i†Dm…NoˆM`|NLvTm`P˜†H_­xQ…o`iM}t@y’ObˆXXy[rtXhy8Y†RVxb|x9[VPz]m`@n‚<T‰VNrGYj>[s?luF~~C|£PO¤gjiNbƒ:]xSjCa‹bnwH‰–N‡®`rª~e—adˆRt‰FxšJ\’Y_vQ\„PT„hlzHz‹Rpžh]‹m\~[\~7WMU‡UbuJ[ˆG`{HRs?rm6eEm…LgŠN˜‡R‘´iU {`zA[ƒLhŒTcŒR`DS‡@fp@S“DWsFgz9hRQŠMLnJXjA`|Gh{Hd{3gƒ>h€=o€D›zKl¢XrxGkI“ŒM…ˆIx’Cq†jŠGuš~ƒ™ob¦Nk‚Fc‰G~‰NuŸil•Kk‹HWx9Tn<s(€œGˆ¡:¬K¦Úrœ™b±½|±°w“ bq`orbo8g¡H­wX½à¥°Ó”n¬t’–K˜z‰±gžºBqÄr’}F…·ˆ}¤_tEV…9mc.wdLŒÂŒsªUrLc™TQžWpÅk~Tz˜K“MlˆUd§tXnqœ{Np¼grXv–`žœjš¯nú¹t}ícj¤@ŠFœG†{`^ž\^uTtDbuCs‚=n¾Ywu@ŒHp‘?‹”C…¡Fª§CrÊMo•Mk˜:tŒK]šghyN£V¦–S¾¯iz•Qf’Eb„;i€St›5l¦J€§Ye£G…™k|¨Kx‘OQ•;dG_®gt‹QЧ9\¯Qaz:oˆWi‡S{¶O\žN]‡;h…Ev O‚„3{\Ž˜Gr¤?¢9hšur”Fv–JuŒP}§<¤µO”Ühº³D²Åa”®U{ÐFsš@o”P~˜?•K~~_ŽšGtH†ºb§wŸ£Py¤N‘ºožGØØLp°9y‹In—=^„3`Š6i‰Duž`o»oqœ]z›_|­U{žR„°@t‘]o¨8_ƒ6a—Yn¡Vn™K€–D~šKhRzŽ9f–Bmˆ<k‡:ƒˆBd†8f‰8n’OkB‡˜=V‚;TR[ƒPe†?^‚HS}3Z†J_‡9eKfvD_ŠWV†bd›KX„ZW†W}–vd•GaƒN`„@mŠZeNe~AY~Ny£c£XwšEh†E^9TzAa€6V„.bˆ@jƒCyF]„@m…=e‚@y¤`_FW~Kr˜Q`Ai4z™O]R„˜Eo•Pz›Q‚¦`…±Pz¿V}°g‚¢wxX\}MWv9u™N|¨c¨Ä}n¡rxŸYžµU±OgO^Ž;}ŸW‰©VbƒBg‚U{¦I‰¾emŠn”µm_€?[„@r‹a\ƒpd„[³¾ah˜Y„”|“¿‚¨N‡­h•³kõÿ}çÿY®ÍdjŽi˜­n•´qoœW€¤P`?`ˆ=_<Z|AZ@h…Pp[[{Bi‰Xyš[€ ^h‰`Œ’c²«pž¥a¬¥t¶­r¨®jŸŸ}’¡i™R{ƒP—”S•Ux—Zu—Og‚SmŽPm|KsŽIs†Ew’Pqˆ<g‰CnÄí±Š­\bGgŒKh]Ф\¿bЍQ‚HoŠFz’P†˜Mš›V° M–TˆœP›X¥¢[ž¨_šªR•–P‡Šq§©d“­h©±J’Xªž_­“{˶”åÕz–±}ÅÈfx’Lx‘Z€TsˆL[{Tnt3<S0@S*AZ5@$2H;HiV<bRz d¤e†qRnPk[XeOHaY]€tj[O]S;Y]]…hrƒNKeG^iDQj<LW;MlLKhKN_LKhid‹pk—dZlNOmI_\Fcn@Tx_aeTbn=il:rq8d‡>ZˆT€uJ\“Ce|WgkGk€B[‚QczL€rEnLX|KNdLLf8Od5Rl?JlCUgFel8g{8SˆOSoLQd:Sr@JeAP_5Hc4Q]8Sa/P_=HZ0KX5Qb;Me<Fa;Of<kk3m{=e„Mj}[q†DhxRRyLTeC{h3`¤VQ|jdhCWy:J{PWfPanJr€A}€Ev”Sh–^fŒNLƒJSrYTn;VzAUSSoGdq9jˆBo„Er‰H‚”SL«qjoPzˆ6Tœ^XrJe€XjKt[€¬`[ªpOfbkF\}<o€S_•aX„VWwU_tJR€8iz=l‡\NŽh@ohIn8Ts5Sw3lr9[„CVvGbu<y2x£PZ™UV|Q†rEw®Vj¢™c„Ad‹G^z@svCf“[\’^h‚Ca•Oo„Kr9`‰IZ~IZuNYq+o}1†ŸAnQp”GkŠZ‚VpšXp›^t‹LYNZyD^rEmNp„Oy–Mv‡Yt™_X“`QxQp/fœH€M‘®\i«Qy:f‘8j€6hŸd½[kÜ~r†ŠŒew­[‚œ^¢­YŠÏ^c…;Ir:ˆj5†¬Ko™€ ±¯‚— Y‰ª_^·cÜŠNqØ…¦¥efªyŠ}Hw§bk‰¹.gŒ?¥<• e‘§Vf’aŒ9q–Eq|Xfƒ<uE`šK‘yCv©Yu})‡}3q‹XT|Fji9p’H–£h±¼O†ÂŒz¨]ˆš:l‘qŠjAjŠ?k~5w|>l•Tp|Xd“ha}.}‹8|«_‹Ÿ;r›P™·Tq§ai¢IhœUbN^…Cwz8iŠNªŒL»_Y—\cŽ?ežJrRnŸPkŸV\7b|[[<kŒM}²eN–YQƒ>hŒOd@w’YhOg‘4pŒBbu6p“Ji‹Ekª8~„6zŠFmv8¬Jk‹JoW—¿s†¥\½]‰ª\i§IŽ¢FÖcd˜qr‹dhŸt¤›SÑÿÕ…ÈR^•g~¬Y†‘ZxµLkŒBœ^|¬i{•Uh®Qo“H_’¤M ”š—Ǫa³Kp†J]”;uŠCc‡2f¤;mTd…J}—Kt–S§N“§O­¦@y¹PožEp Cc†Fa±=lˆJz§GzŽH{˜FmQbŽ9d€Eu‹N€C_„>XtFWŒ?t…GYŽ1V‡=Pz4m‚7f˜9ƒ¢8]”4X€>bx5aƒBm›FMx2[JKq.…—DcƒHZ‰A]„;}˜On„JgžGjƒ<‹¦6‘µYj“Rkœ=s=m ?Z€7Uw3i‚Ah†FiŒedŽ>]ˆ?±¼lq¦8Z‰?Vw7hƒ2n‘Kdt9kV‹¾\|¢>pŸjr¬X“§a¯Ô{®×_|¤B]E}¡]fŒ>^Š?u Bo‹Pf”pk›h‡˜R›½S…©ƒp–@Nw<Yu8‰°_p˜dg—DOuFršX‹±p{¢T…¬Uf…=e~9On;Yu6YcEVqx~ \fŒbšl€œB‡”Ifdo££ˆ¨£b”‡d}s®Èƒ±_{W‹¬^m”He>_„8U|8]ˆ?S|Ai‘A\€>S{Em’He‡I^‚<i[—be‡œh}’jt’]uŽVt“X‡›]€˜VŒ¤eŽžUo‹Tl‰Ab~BXrEq~Mp„MqŒQ…™TmHu’J…–eË¿‹¥IvŒ@lNŒ©Zˆ¢n•°kª_§VtS¤»Y—¨e¢«k…–bž¥Wƒ›`µj§µuº¯oo}g¡h|ºÃn¡Å—ÿÿíòv®‘f§~Ÿ·¯Ï×™Úè·ÍÔp“¤S†_|•NalBS`Ihy>j~9i‰7f}.DR%@K5=V3+?E%;W0QkB[J>MH<`V\uEmyC[uPYqB]o8_pRŠ¢ev…JQiLTe=>W<E[;Vk@]t@Yh5@UG?\VEkFH\<OeKMdCZ_?Rp>ZiF\h@ekEqwBjˆL`ŒZmzWR„I[l]hgBV|DVqY^jGƒiBlx9Rn>HbJAa<K[4Nc7Md=Pk:Tt8sl8[ˆKReXP`=fe<Yr:amAVh9`_9`m4Xr<Sk>b`8Xg2Oc:Le=O`8Wg=iw<_|PosYb†JeuWYxOLrFRm2byBPqP[e9Mr;WhBbi9zv:‡Fo™N…iO ^[t`Ty?frHR‚9]pG^vFgg?a=pWtK]†S^{MSƒUZpRyx8]”_TwSt}Ga˜GT‰[ewWJƒQGiWSe;\k?TtJ_tQX{S\pCjpA[†:WuDUKouR[PP}ATx.[p5g‚:bŠAZ‚QRk;”u;’µ[^¨u}L_Š4C‚MmdIQŽH:vMtY/jŽ8J‘iViabt;U€LOqPhu<vˆWp‘O[[az@nƒ<wŒYpœWmRn’caD~{[w Zo}^pŽJj…FiŒD}3›¨Jx®UŒšdz·Qd”To…;c/‰Qj®nšƒC]´_vI‡©RhŸXwyC~Ÿ7¢}fTkI©l‹·ab³K]hyŒr€yE~‡8•R}L£;z§nv›lp˜Yo—\wŽIޝ–’œgŸj¡¯5x£`–A¢Ï„€Ô™’Iº¿`Þ}¥dh ;{Cz‚W|}GˆŸ9ž€AŒ—R€†VR€ŠJ•’O™…@——:z“>ˆi>—ªs€m¨L‡rUX—T­j.†¥UnuTrr;š‹Bm“El9f£P„~Bq£Wgz¿l†°`f™fv†G\|7RŒ0cp<m@gBn›<{Z]€NU‰Ai†At<bU‚ŠF|ŽGn›JbM‚8ItMlAuQ}§]z\o¢V§_h¦^v’7n€5r@y’I€IŠÔ]~¬B޼j”¿G…²Vs¯V ¬J“Ÿ_§Û\t¥\k¦Re•ck˜Eˆ™?¢²Nz¬N™Âݽքƒ¹2n]sD‡«av³H~¤Npªiš±\qLŠ©Hƒ«U—W]ŸD„‘ni¦Wn™=‚›Dkt=W‚A^Ch„Tl§Ao¨C¢ž?¦S§LŒ¤az¬v³¡k~–G_Š=p˜K`ƒA€—Ws“Kt¢P}ŒCn›Aj}?t•VoˆOrGwˆN_—Fcu2X‡8x9u’9q€<f5n‰d[—Lc„=fžTbŽ;c¡R_„7Vu0Iq+p€S‚²Gc‚Cb€<oE„†Hh„DxšClKzªi^ˆ:Qw>^ƒAk—SV†9o†C¬¸emˆK{’UI°Huºe†À_XxDW€1`‚DzIp‹HdŒMl¦ni`rˆNi“Fh•hi“hÅ~бe¤ºLz“klš?n‡;f‘FtRgŒLhšMk‹zc‘acPLyBVy4l†Cbˆ]U‰JS}CvŽ5Ee:Nq@Ky>s‰M‹ My–MX}2Md6s?sŠ?qŠU]v?XbLy„[œFWj+V]?HZLMg8ˆŠc€‰|lˆZc…S™YlA]…LU~@X|4X~CLq7R~A[~4T}6hˆCfA\8k‚Jj‡KnŒXs•Tr‰Km„DdD_ƒVob„¤O‡¢_‰¢Yn•Eq<_v6e;–Mv‡J}™YvRa~IqŠK~ ]Ÿ»y’šIq‰Dt‰Q”_¥¸w™¨t¡¶k†©VƒŽUm]€¦pŒ¨Ss’]}—QwŽR‡¦l¦zÁ´_•‹_ª¶\i€t•o°£ÝüÙÁæu©žn’Ÿr†§™ ½¼ÌèÃʵ‡„Žbw•_]WpšU¡³S‘¢h¤Ç‚ëÿöüf¢©9Vc2TX&CM!3E'Pk;bt>f‚)KhI^yOwƒDQfIUvH…’ExœTiŽ]\qL_uK\o;Z^1=RF\oLVrDWs/Lb1RnC[Ot”DUcMSf?ab@]h:TuEOkAUgC\mAd{OZ‚PUxSMmST`OZb:Ej:H]PUdAa_=Yo5EjARb9Ii7Ha4Ea1RV,Oi4Uk@^j9Xr@YjWbd>qi0]‚:^tOSjBk`A_€<PMZcFed<Rs:Dh>CY9OZ3Sf:ek9ZtF[kR`vMXoS[jJSj@La<Re7Hg7Dd??d6KZ4Xc5dp9p‚QPƒVMsiTsKYsMP„<XuDY{5PsISlKcj;d„E]„N]jFXxK^oH^y>RqCZt6[zMk|J_—@H‡N9`TMR@Og4BmB5Y5]R,ZxAY€H_kHQ{:kiDa…6f~EN„A_mGy|@d—LPŠJ\|?`Fa‰BmNaŠ?n†6g’If†e]ŠGo€E`Get0O‡D_uBg*Mš=[mUKt6P_*\qGW}HL}2Ts=`vVW‚AJrJPj8ooKl•Siikšmq˜J€•E‡«[{£bqœ=—Yr³j“ŽRœ®hÂ…™¥Zz£pq—ep’Ul”A[M~„SuG˜¡Pa›M’‡P„®^h•XrŽTyˆNu™PxŸB|;©Àiƒ®su›Bœ˜7Ÿ²G¤Ùj‹­]¢¢V¬¨U~©O¥ŽH­Qr¨mÁ‘H–ÛToŸrYVro\}•`kš`y‰a†™a‘¡[†Çn—ŽÒÇe¶UxšVuj=„y>‰«‡“‚_š‰d§Ž_·Üb‚´g¤‹Iv¹_ÍŠ`ÈÛd§ÅZ¡‡Q—Bÿ¼X³Ø`š´^ª£P›´ÇLw¬T—ShŠ8q†@hƒ<uz@t¡Ps‹S•O¦Ln¢a~ƒ<nŠRn…-„š*q’?}”c‚‡7q¥BSƒA`@‡˜4l–^q‚6…|Hi–I…’LTŠH`ƒ;pxAƒ‡Lv¤[j”Bs¬[rž@s…Hl”H’¦bq¬`ƒ¡P‰¡Nyº@ÄÉO‹ÓcÆ·b¿ÿ±™ø­gj¦`~°qy™[žÉSyŸIj‰K\©N^‹JsHz l™žk¥Q…Óomg`˜Gy‹:e Qm¦]y‘@|•UlªXj‡B“H~ Wy©Ps±Rt†Kv²]}‘@Œ”Qf|2f³9d…<`…;zŽSp®np¡f}šdœ`zÎvÄÇc»Q…›Ws‘;h•>oˆ9f”P|W•R}œUrQb—@…„CiPrŠ4€ P{Ã_f™Krš7}—OhC{§:“Êb\ƒ7K‡Jn”IaƒBhƒ_eD]‡9r›>Z‘5d‘Ko“TbŠJx Ar˜K®É„¶ãUfˆ_€›=k†F“Il‚>s;v–<€¡@‰§F^{Ya“O’@hLÃ~u‰Sr›T}•Eh9¬>a€GW};l>]ŒA‡ŸE}•T~˜@Š«=gKl`Œ˜lz©‚€§Z…¦Hw˜VV{8nŽ]}–BdŽCU‰Mg’Cs‘Bq ?j…O]yD[}3`8Nm6j‹Y[‡(St*WvVcyfbx_[|KHk>Ym6{V¢¬eÞèb–½C^{FV^>WgJm.<P$4I Ce6KvFm{Q{—UiE\P\P€‹=Yr;Y{9a†4Jq0W~5Pu>‡¦Cn;Mm@a‚9`Bi‰JdŽJoLv’E_€=Zz;Pr<cˆ[ޤ[q›^€œb~¢]}žF{Ba‰EvNnIvXp‰8QqBt“Rh‡Z|œiˆ˜IuA{†MŒcŸ¶ˆ§ºo•¯qŒY†‰IxŒQ| h|šVr—Ns•NwS’¹iŒ¦rª½ƒÎÓ}ÄÉv£¢k–¼[„®†¹¨¿éÖä…¯Ãk£»q€œ…—¤€aZ[HXmJe}išÀ‡¦Ô“¿Ær}°Ö½ïàßó£±Öw³Á=PY/GU)AP5SqHfŠNXCa‰DbPf…CO^BPmO`ˆQoQwŒRXpKLYH]dE`i6;R>J]NeyUz•E{“Bd€[uœq‹¥a]u>_pBOtHYkIV€EWlKZlDRxBUnCYlGiqM_}G`yPaoBdc:N~BLhCW]9Tk8QdCVc?Nq9CnG@d7RV-Nl/Id5Mc=^^=Kd>`\@Zl7UlDPfIOdFec8V{9DwVMW>Me2PiANiJYd<Zk7Lr?VhD@g<XPNXg;]qKfiG`n@Jf<Nd8Ye.Hp><c:I\1W`-Or7PmGTuPNnK]o;[z8`yGTƒ6XyCUvAPqPVn4es>KKXe;f:s”@u’Ki‘IU‹M`vDbwEG„Y>e[<T6TV'^|%L=Ki6Pc%Nn6cl>^p9SxA[m:a|>TyBQoEPqCod7U„=lv_rŠEf”K[ŠDsˆPq›Ld“J—‚If»Q^‹N\L[€OVsGN„Dkp8q‰3]”M—}6`Ÿ>XGrp<ˆ—JRJ\p7nt<x“=[GRp4[n4G‡AVsVh…_u‰>m”I†V€·`]ŽWm6}˜gv¤ls©t|¨q šhnÈjj‘\s„K–™E{¸VwŽ<y›W‡¨FišhxBy–XtœdYœR}ƒ>‰¬Jˆ¹wn±Q€˜E´mq®u†”\œ²vÁl¨k‚X{˜\†¼{­ U‰°t†UÈ¢A“Õ°½¥[¥Âo °Ož½N¢Â^“ÖI¡¦O‘¥_Œ¯uŠR´›l ÕˆËÙŒ•Ég˜£L¡˜KˆŸTŒ—P—Œ\¦et‘b¢‘J€Ço”›Fפ‚¢Üžµ•e“ÍP«½rŠÑ¯v‚n|›a»»Š¬Äz¬Z›RX]˜=aªGd|5À†=~ña€Bn•\Œ¦Yp’?†–M«Jw®P£Ž8”œD…¸^y˜HZ˜Da~5s|^–žWPmÝZ……F~®I}‚=e–H‡²4r¥C‚§ZvžW„—^m«BrŒ@iœT}•Me Hz‘Di‡Vh†R|‡AŸdna•ƒ_«§{ˆž|žškºÇcl¬K•¤s‚Àfm¬G`‡Br›Ge‰GvƒHƒ“I|‘Oƒ¸•q´n€UaŒ6gˆLW`X‚C†ŒMw¹deŽ5j8g‹Mpanƒ_eC‘±H}¸UpŒCd‚3nŒOf/“7€”:n˜M|¡>z–;x±MŽqõÿ׺Ø~j¤Oe£Qu©Kmˆ:d{<r‚Kl~JlnRp»En•NuŒLyªTkSs—Qm“<sŽN¥l’¾gy–C}›`k€=Yy4O|=]ŒHmˆ9]›DR>m—N•Ur™Dy¬Qq™@v®Yn“K™b…Ïzy¥Q~¢o^‡Ax¢\‘¦Fe†@e‚P}ƒ[ªjr–@Ž‘9”žYxžBi¡Kt¡LŒ¾W¥½|޹;m’Xj¡Go”6œN†¤BˆªOvŸQˆž]|¨_`—K}¹LgŒ`n˜Ud–^r›WgOl‡<gƒM|¢k|ºRUwDi‚_x°Vh‹Jq–HxŸD©Cl’AYw5¬ÉGt›CV“@SqFr›Q_yBdw>^s9_k8gkQ~…•ËóÓïÿšn‡<Lp,E]:ZkT‡®04H.D&CY/HUA^xKrR§HwOa}<Fa3KtBQp>c<b€FX{@r™kf‹N\…4Ml:X|@\…Xe‡Oq”SjORvATv5Y~7i‹SkJl‘K\†Vl‡]p£Sd’Rb|MhŠIpŠM‚›[q‘>]zLªcˆ£Nvš\{“Af…Bt–U•§p‹±b£b}—Qy‡[rƒI‹‡P ¤aª´XrŒO•^¯Ð{Àé‹©Ìn Âƒ˜±‚¢¯l‘›ss—^–½€²Ï’ÃóÄ×ÿ›°Ô|Ÿ±Zpš\y’\ZhFZk9m}F‚Ž^w©“™É”¿m‹®™³Ô±¡¿¡¯z’»X\j3IW/B[06MDHfO]qWv–iˆ§]’±Zˆ¥Wƒ£JiƒLo‰T]kCft>o\C[ZNjj:Vf:<UL\q‡²lŠ aƒ“\lmt‘`f…H]‡KQvMSiHUq@VcJTjFCyIQ_HWj>dsDrˆMd‹`bTevNSMdkJlfAL~:XaHSh?PkAMpFVb8[_+Ru0Lm@L`<Sa3>g5SJ8H_2KU>@W>IN8l^0sy=_†UVpIMo6c\<_p?vmHi‡@^UZpLPn@TWB`g7nwFihG\ŠH^wC\f;gv=Z~DNlJKp8Ti0Ns8RiBKq:doAd{?N€@XoS_z>a‚SKuDUkRUzG_s7gwH^w=m~;ŒIo¥ep˜]w„YU”XAtRCaHPV<Za-[o.^‚-V|HPr6ed+œ> ªHh­diS_y@‡o7Ž™Fp²Wd†Khu?Yv:\vFwˆG„ad¦McŽbW€7\tBq€@j–[jŒRb†MV{;ns9W†:f|5{‚8q¡Wp”C^yZ¢}B€·_X¨hZya_u<^‰LS{NOyXMk?rq4]Š1R:vm7|¥Oƒ¤;l’[t…L\˜mb‘It•Z‚™Pg§fw„;~‘Hh¬qh€JfƒE{Lš›oƒÆq‘´fu¸Utˆ_™¨UŠ´b{§P‚”Xv±A‡œ^ˆžcw­phŠD‹‘X§qƒ›I‘¬O±vg•w¡•]œ¢d‹Ûf”–y¹Ázh¶i“z[†²‰¡”US¯smif¡j«¼m›±h‡¦] ˜dRª_†NBŒ¢KŸbŠšcŠ›„Œ½Z¡™_†Ç^xJœF޽w†—Yt\Œ€k{ŠRž¦T‚ [‘Ðs¶—t‚ár£³‹}¢C±’@ŒÉ_²~pt”qr…Wq¬N{¢Pm£nƒ3¢‡MŒ¥Ÿ•›LyO˜¢@n—B‚šA}“X­€Œ£d~˜hz¬Z¤I¢‰Bm€0j7x“Cx±zh¾wE„’H{–<g‘Tm«w›‰\s£IމUrC„ŸJ€ŒQ ®D|©W•”Kˆ¿PƒG¨ [ÿÿd†ÿr‰‘I~Ï_z¡nžÃf‘¨Lƒ¬stŸ_i›[¡’_Ä–VóG›cµžGž»9}—Ku‘Lnˆeªbd–\]šGvByãf–™En•;_Xe~<aˆGgDo;g9µØZºéR×ek?g•;yŽ7ž¯@¦ÔlpœQl‘Ov[‹žV­nŒ’VìÕÙ²sˆºV…¦GgŸUjŠA™–;\EW|8VzFjŒD„¨pjŠEZˆDl‹RŸ–Hh‡It¨Vq¦O†˜o™ž\lƒEmL‰Pn£9i9\‡;v~EpGg‰3yG[D_„_]–[˜¯xŸÚhv=Ú×m\Kp“Bv•E^}0r—>ŠL‚<€Š@†¼~”£YŸ³ps§„•£kŠŸCg„Hv‘\„žZpŒ_c†^ŽL‡¼Po€Dhix›\‚ˆH‡žN{–Z˜Rn§Er”SvœMbGc‡CfˆMkG`†F…JµÒ˜¶ÒqÆó]ÁÛi¡Ð`qªG†ªc‘·d‡¤Qs˜E…ŸV¡Ñ›ˆÊYc•AUi@‹­f`zAiŠLsƒLh}@Wg:brSd…†yˆw}™Ar›$8E-C7aydn•+C](Qf3o‰;l†Ag{Jy”]p†SQm3]u3MtAƒ˜Ie‹St™b‚¥>h†[~›Om†LpŒK…˜Gy“MmŒ@cMw˜<b6a‹>l„=o†QžO˜½e‰¥T˜NiŠIZ:_†HjŠDW‚KtŽOy–JcŠd¦v¬o®P~šPpŒJ„¬^ƒ•[qO„›\w–JjIsŽ]— [²xµk¬Uƒªeƒ«¢Þÿ„y¦k„«p•°o•¥YuJtœ\«ƒ’®xˆ¶’¥Ê–‰¶{‡¤Rj“b©Óh¸Íd¿Ãe¥¹n±³Pˆ”‘•Áš¤Ä‹³Ý¯×õ¨¶ktf¡`oŒQ~–Hey;]m0BT9:UMPidg…jZ‚f‚ª[e‹N`wH\~_}ˆW”•]‚‚BO`PivZŒ£?h}Qjˆs{œ€‚‘~‹šo…k|Ÿge…J[…T[pTQiMed?ctA\gCYrOioLe„<[‹Ke‚Ra€UO…SWpXWfFqjAq}@T…NXjFIj<Ta:bl9_u;Qm4Ko=Q^7Va7bh;Qe8NL4A_/AO9KH8NO0Lc.e^3h|Gd|JenIfd;bxBlqPw‹Or“Yt‚KkuKeiDhl<oyEm~EZŒH[}KTu>mqCm‰G_ˆV]{JM€;Re:Kf6Ri5lm7b†3O~TXmJWk;OrHcaHgqCMMkpFv„?VC[wDp~Bcœ[Q…e]xI`zNl…Sl…:M„=]c7Tu9\p5f{<Z}5do9ˆz<“¯cq¼‚mnw‹J††Fˆ¢Yn¬u^zbiuI‘w>~¦Lu§N™`]»caWO3Kb9ga2o„?pŠJt‘H{’NvTu•L‡‘Ht˜h€šM”œSf¬Q¢ˆ>†ÈˆlŸ…RˆXfr3W‚LL{AWl6Zr5Yv6XqGe@fšC—L‡¸S€¥haœVa…@r€<TŽEQuE€uZ~‡>m›T“[tšPa„<y„@‚Lš qu¯g““Y„±\ˆ¶VŒ¯s‹ªc–³h„±[“£P‹¨V¦¯Z‡ Xˆ¥W€®aŽžw„«L¢¥TŸ½mg©Gfh:šˆE…—V‹šdIŸeŸa:]’\jlUIŠTnZ!ªŽB»Áw¡Ñn­Çjˆ©Nbšksw.¢h¶­Q‰²iwœDl“Qˆ™]¬œ‚›·hž¶Sª·rž¨L—¨P˜¡K ©b—¾S¬Êd‡¼h¬½…‚œŸjQ`P«W˜¬xkˆY…tQ‰—I_©ShˆM“‹I‰£D›®E¥Àlºâo{‰Of¦Og}Fž…L–§^v}IŒ‚]±‹Q¹¬epQŒVŽxm±GkvIizIm–bat<zr:t ]j{F[¥V‚€=q­ir±Ee‘<jŒL޲^€¿e…™D޲ewž|‚ˆMƒŸVzÄŸÿËÝ{¼ž„—kz¨CŠ•d†’n^\s’8d–C¢?u§oiŒs~Ÿ‚pŸV{˜{–œNx²Ou Kr†ai§CjD—™G‚£fkArFo–@zŽ>‚°C‹˜<™>g¡D›–^»à¹Àm€.p­Q§±=–Ävƒž¿Z–°rg?s™Wi­Y’šI–Ä„n³S€‰a¯U™©HŽšQ·âmy‚LdžIa:€ˆCv—L]‚=[ƒ0Vu.r‘Sm”>b‘EbR‰‰H|Ÿd_‚<yQn›^h„JlA€^r…Cv—G}£I—¬Ow±:_.p™DsšK]™T†–DªõË“¤EdPx¢O–Dw?t•\…ŒQ‘Ÿ\x‘J…¥iwšhŒ¨VxX€¤dwŽ>¢ÇXŽÄdpŽBi<p†Ns˜^h†Goœ@e“Pf€M€ V~•Nh‰Xo”JgˆRyžRtœA¤[k“D€šWgˆ@”g{¢‚‘±‰–¾¬cžtd–ZpŽ=x™Vb‹ll–y„°Sq’j…¯txª[mŽHU…@w§UyS€¢R¢nŒ`h‰E|žClS~¬XY|GZ|ARa&Wtj„Hb‹CŠ–\¬ÀWušma‚Ok‘Zv›xƒ›HPg3]vM’UPs\Yxd®ynžYUwK`^x“\etSpŽl‡Ÿbc‰Km‰Y¦Xk˜MqNn†Mi†O«axšnƒŸ`—¨Kd†P^J~œYL¤KyœWcIj‘e’±Yj•evŸU~—]Œ©V®Y|¬P}—LzœWfŒCkRdŠTq[{˜et“j›¼Yq‘Li†z—Ç{–·l¼l¢¾\x¡Wˆ¥P‹¤^†§Yo•Ut˜\‚œj| b†Nz–q¼éŸÒ혔»–ˆ´›Áˆ§ºy‘„‰Ÿ„}˜¦Œ¼‡sYs£„Ñ特×mm™inŽNQk1B['?Z:NdM_z=D`[®X~šCbL`i¯~¸‹’¬oœl‰Ÿu‰­X_z]g€w}•yy‘yp—|†«˜·yKrBGmKOcGZa=jk9AdŠRW‰]exRo}IeŒY]e^zSVPVnLYi<no;X‡HRoRUfRDp9Ub<\d.X}:Mk<MlBLd7N^4bc7go8vf9Y<NbHSO6`Y1We4VhAbsDypF{‹IvŒIv“Vy…Ut•Ta\hzTkzNu‰NyˆUdŠWpWk‹RdŒLb€Gj}FuƒI[’U[vUR|AYl<[s/\vB_v9dtAXvUVqDSp6OkDhc>lƒ?W•YjqTx†Cq W|ŽSpŒF]“\p{ZlŒI|D¸”S‡×O`°whzRY?Tl:kq@a6c‚EwGƒUX¯jP}b_u;y=užkV…VmgU~{>V?Šznp©iyœm`’o`|Tm|0X€Aep,{7}“Qr’NX€B„ˆT‹”H†¡Tz¯ylW€€Yt˜PNS,qADM>Yj5s|0]ŸLRoIur2m’@q˜:hŠ>Rz:f}E€”<©Ww£\^˜\gƒGpŽ@[†Bn}@i‚>‡D]™p}zI€£EhŸVl†F¹…B¶ÐplÇb‘Fr¤T~–_uYx˜Z‘LŒ®g‰U–O˜¨\¥²‡¢«UtÄb}šW”¡J§¿Kœ¦iº¥cjÑN¥xPªc·›PTªkMd-kMD®‡$¥¬z“ŸP{ÃH›f°­‡–Õnž®`Îm~ŠDƒˆ/Á¯VŽÓ‹˜µJФKt›?“¨W‰ªm€›]µŒYŸÅf‡¤Zž OŒš`…ÌŠ”`œr¡U‚¬_©§AtÌdŠ}9j˜…|’Pl†HY†QaˆQd“D’W´u±™]ŸÚˆÞ¶†`³ppx>eœ;†uD…‰mŸŽ;pžY†™Wœ¤dlšw’’Ay¤U†’hé”M¨éJ€ÀX™³R…©7\Ÿ]rP_©mfƒ=g„OS†XdAy‡9™šWnÏ€i¼Pš^~—dl˜B™žbi¼k†ƒBš¾¦}šPx¯\¦©M ­Ls¯G™¶Bb¦7wŽGœ°VœÃVaÅFVzFqB ¹ey³VpšYs¢?p¢Gn†If•Na™Ošº`sµ@‚«Y}’K‰ÅYxž‡ŠyI­žƒ£Õv£wj–[}™e‰®I‘ÛtÅežµW‹Þšn²k{ŸOÚÿdaÁGªQŠšhtˆKb“R|”Ešk—¬mu¨”•£H|¸J€ Ay—RŸ£s©¼_Vž@Yr*“¥H—H–Hl„:”µPƒªNz«`lˆ=a{KŠ¢V„´Jm‘F}OŒ°Q{£X¢gl…_]ŒD`?o–=P~,}ŠV}škn¥`Vˆ9Š´W¦Qx—DyQ‡ŒQ’¬a”®YƒŸQf˜Z‡’XlM™`‡Èn‚º¢³kkœEs‰K~ŽYk†Iq¦Bz’Er©Py›QޱM” dnˆYt’R|œJv¤XÅjo—cVr–jn‹Djƒ]„­Qy«gpŒ`d‹=a=_ˆ;g‡FgŒF‚–\†¹ff`qZpžWf“@k‚Dj”Dd‚Em’i‚®fz¦Kb€D‡žYt¥AsŠOp4k€Wd‹2X-O}9t„Nnˆ]^gcsˆR‚ŸN¥·gš¶gm„I|?m‡Nz›bZu5EYI_„][ŽMY|?bNv“_„¤MzXc…@U}D]€VŒ§^z JYƒ?eˆAjR‚™Ww’gƒ¡^r…Q[}Ib‚WyšYnŽRcŒ]e…ScˆJmŽZ|›Uj‰P²Wp‹[’¯{³Ï€¹áx¤ÆO€£Su˜EhŽIi“JxŸYj“Naf†¸]b‰=bƒOr£f©o´jwRfcÄ^ŸZ¥S†¤N~™O{›VŒ­b—«_Ÿ«e‰¶ˆ…¦kcrdf‚eu˜|žgc~m“´jˆ—_h…QpŽPo¢™‘ϯ¸àyoƒN[w>G`4Qo3Xz7WpANa6XvYˆ­av™TtŒZ’¯€œÃ…•ÂŒ€œ†bˆw]xdYuLVuMRpgsŒtu“op‘„¡Ä|†žjEaAC^<Z\2is1tˆ>ˆ–Mu cX”kk|al‡J|ŠWhœe^ˆa^{SgpTOt>dkJNnMQrLVc<Dn9\`F\e3ar>ewGRsB_e=`t4bj:osE˜zJfÃ]um`z?jcBo=t…Ke“MŽ€L¯­Pƒ­[z g‚–Y–bv`d“XtyJ—Ue–^[‡iguSlyJl†Rq‚TdŽPgIq‰QX‡YftJm~<]…9_SfxIl~M]„Ge{NU€=Yw=[q1Vw9RuN\kVpwBkŒQb“WU†Y]sU`€>fCw{B¸šVuÝcY¢‡Z{LfuGX{<dxJU;OzAox@iŠA€^_¨Te~Q~‡:Ž”Ri˜\fsNso@fˆNa€O[}PkuJv…bkŠKƒEcˆAot8}‡8?wfz’[nKmˆG‹“QŽ´†[¦itG~™CgSb†OKs0_l"YŠ@Nx:XjB€w5yQdžcmP‚ŒCoªBn™Fe“FsP€œP‰£HG›Eve?i‡7ƒˆ7t§PpšQz}D«M‹¯d¤±HcÊYs‚‰žŠŒ¡¼eƒ·[m™Tž›G°±O†©QŒŒ[ ŒH½ÊNwÀp™Sm¡ju‹]”ŽSÛ¼R£ïkȤf™Èx‰˜}¦©m¡³qœ¼\dħ…zJš²Lt†Ur‘d‰“z‹LqyW…™a˜¤~¸¨\¬h†‘Y‚–N”›Lï´zôk¦_¥–Y²Mžfz—N”£CÊtxÃlŒ™LŽ£VÉgªQЬN§Q…±a¦ÕnžÃ€Š²i|¯am¢@„†-v9{Ÿ8ˆšG—K¢‘_‚œ`t—}“‘Dq“h‰;yŸO‚j:´ŸMмT†Wf’O‰¢LqWr…F˜Nz®NßÏdÇýñœî—ŽÅmƒ´€v¯MŽ”Sx¼ty•KaŠ/`x5i†5n~?~|FˆšcgŸT§SÁj…œA€§g{®f¥ÅNs¨E{€Lz]£»mˆ¶o é˜s«]t«]zœD“ÈU\®Zmƒ]t PŽˆBÕÞŽÿsëÙg¯Øs‚£Qƒ—E€µG”–RÌ¿l§¼„ÄÊN½ÁSàÐt«é}¤øÄÆOŸÕ’»^‡ª8‰[ƒÆapÊ‚s¤O¹Yv®M§›\a˜Zˆ·¡|¬k~³Y™^•ž<†®N¦N…EÙhz¯Ey•qm…„u«ReG…‚I½«wšIy},‘ªižÈ„«Ã—ÇXŽÖ¡ëÿlŽ»X¤¯E|·F~iœ¬s³J‘¢j·o Ê|W…Pv‡Az˜GxBaŠJ\‚0w‡Uk•Aa“=a„7x–Zƒ–ižLfGi‡MŽ™U‡ÍuŒ¥^~–[­ì]y X¸^{Ÿ^޳h“Îh}­OpC{•Sw]«Tu­R}¤V}—[ˆ±e~¦\mŠA_‰E©Èdš½Vˆ›jxNs›x„¬Ur•Ch“R{«Y°G RhŒe[~LdŠLb…QfAZT†‘\_‡KbˆHy™PX…7a9kŽC\CzŸWs•_x¤]}”;~¢P€§LhŠHgƒ>„˜V|¢Lœ²L[Œ2j|~w—FpƒO‘¯V‚¸i»m¸|k’JqUyŠWWoGnŽ=Me6YsAt•Ak‚>^~HzŠk{fn‡R]{6Vx<_x<V~e®]q‘Gw—Iw˜dŽWr…Nh„Wt…F]xAl†X{˜Sr–MT‚FTyLwšM}žYqœJoFa†a‰ d‹©ƒ‹§u^‰kt“X…±jŸÄ_‘©JŠ®l¦Âak‘A]‰Hc‹PQ>oCk—V„¥d‰«i{›Kv’e}¢dgˆP~—U¨c˜ÆY¥Ðm¹ÚjŸ¼j„¢iš²Y€¤A]}J}•W’°e{“Ug‚n€¢u{‘I];^zD__r’„~²oiŠ7^‚2`€6x•H‹­Dcy8A_6W~Rp˜X_{ITyc„½†¨Ì‡¯sŠŸXFZK:X9@d=euDZjSa~\_„b{Ÿx¿s”¨[VjDRf7cl9i{5`ŠBe‡\l‰ck™kn‰dJIdk`fWcˆb]vReoKcrHa{TVlFXhE`d5Rt<b`Aah5j‚C[IPpD`d=ir<fyEtwI¡Ii¿br“ŠVˆRikNpy9q„MoŒb•†U÷S˜£i€—{{–U‚Œc“ˆ`Œ£l—[}¬Yr™h`’b^xIen=cyK{{J]’TeyR^„LR{ImlNh}:\’KSzPSnH_mGWrCrL\ž>U€`X_5Vq<ds?\~F€t?œŒDh½hMŒd{dEg•CŠƒJt˜E•bƒ¥o~«{p‘U‰‡>d¢Qu‡h€B‰‹Ot¦C{—Gy™^f›Zd‚^\‚<sxCb‹XhzY{€2hŠW]ŠO^~JSu:awDwu=ŒKa©Uo…\{If‰E}†W~…V„ŠXMSrwLOŠinwP\•AtuDh›Y—†Cy±WT”PouCaˆ<g3t—5‰Wƒ®l©X}„_w­`v¡fW“EqvL€‘L‰®`r¡\r‡:w”mWˆKqwH}‘ApšQz‹K‘­j®ujŸ€Hƒ`qlBœ¦kž¼‹˜¼†¥¶l÷Îrÿ­’H‰·L©ªnŠ¥²›»|j«Aj€:;®’X™ºu¬±^ˆÂp• Gƒ°PĘr–°f«—a‚°LØ£a”ÿ€t¤_w‰:mpJ7…«Pœ}I×´J´ày™¿P¨³H¾žRÿÔpÂÿö¬ßеºZ†¶m™ªA”Íg¨dšœ\s³_‚—I‹¥^ŠªRu®^Ù³H¶ó[´S…§c€­lv‚Y”©T§PŒBkŽRz‚Ds˜T]x[Œ…AŽŠU„°R´“Wo›SHЏy9h\¬¬j‹ªYy‹A¤©>w‡Iy:h†D¼dá´¿ŸÎÿªN˜o^„\m–n]˜]]ƒ_„²aZ™px’2–7W…=}˜>‚›Kež`—~1i‘i†¢M{´l¥¤[³ãmx¬Mc˜<r|<i™tržPl³^v©O  `ƒ¿IÓdTr7v9uŠOŠ~<Á¬h“õÀŽ¢`‘àO~§k‹´lnÇac‘Qs‡hw«h}³¿½Ñ‘—ܨ~´£h™cÔÝ™ÝêÙ’¾w–¯Ss Tcœ^ˆŽ<_–Sy xxL{§Fo«E~™\e™Ns„Rt™DnUvž`ª¯Vy°Iv½‰´‹s¦Pk’>q…Wk¡@“ vŸ­wz˜E”¨=¢Äz¿œŽ•µf†ÇxdŽ^¨¾­‡¿‰~´goŒJgHŸ¡w€¡VrŽMŒ¯x—Í{†²Q‡¥W{Q}¢R{ž@m˜AŠAm¬NiŠAp„Co–R|ÌZ…ºh{±Dp…E} `~Âh‘ Y°qq¬|z—DržQw¥O‹˜WŽ©v´ju¥]r‡PŽSŸÉnf”L–bw¥Xp‘Rˆ™Hr¤Mo@¥yŽÄqkˆ\ˆ§dx²Zg…[mFmŒCo–L‚h‚šWy­BnDeFeƒHt•MPx7`R]}4^u4iƒPa‰9t”AV|=j‹@w›PhX„ªXmœNf‘Vv—fx˜Js•Fxl§Âˆs¥ca„5cwPn…OmYwš\y¡Gk”K’œ_j‹^‹°]T|H_rJzŸHn‡<b„<j‰]|§Ti‚?dUsˆUiƒAaz5f}=er:lSt˜PYzMrX Y…žar˜Cc…S„œK{‘R}žb¤e_„CP{9a|BwŽNaŽMp‘G`‚7]|R¤\i’ZoYvJ_}WlŒg°Œ‹­\¨sŽº``‰:_…5g=Vy>eCi—U|Ÿk~«jxš[\‚]n˜T„¥Ir”Ivžl«ÜŒÇï‡Æá‚ªÆd‘µhœ¾`Š©Ds˜UŒ¦j¯ZdƒD`tRIfUUr@o•D}—8`v>_Ve‰Q[…;oFp›O}©]x¤L\{9Uo6cGgŽG]}Io_Œ·ƒ“¹puž^hŠ?Je9gŒ=ZtKWkH[nLRsPuŽ[~›`t”n|—eQwSLeAMl=_p@o{Dd‡Mt‰U–\d aN‘e_oYcl;j{HmtIXyRslJw†Ft|EoJmgI\rEemH^m9jvJ^rGTtL]b@ef6swElG“}J]¥VW‰}TnLycH‡@kšN{‹]–‰S† ]sˆ`ayd[wLfS‰“[•–eŠœof™sgˆku€Yd“Rg}QZM_uIpxHr}Lb‹Vd„Uz~Am E`]TyQLp?Wj:bm0‡}?c§GRx€kd:{l;sPYYexM’‚;lªnQ“ŠdoLr‚=q‡SZ•X€z[}žY„¡qh•i‰Kr“Z^„ckB™P€½dx¬vo‘ZsˆVg€@lMwz2W€HYnC]m8dzNc{=v…Dk:_Œ:nˆ0YIj|iktRw{<`†NTƒSZf?Š]TmPH…E`kA\8VvKœ}%‹«Fq¢\imu‘g^`q}2½ Nâch£iÕb»ñtˆ¸o{¨D|o“M‰»I„µ^s­jf—efsO~ƒQŽJ™B~¤M}žYm¬_††ChŽ[…‡ImšB‘5—ÐMÆ™ƒ©ˆ‡¨\y©z•œ„‰ªdqžJnqYA•UrW7k‹pˆ9¡Jz¯h” k±°eªÏ…ŒÃƒŽ¬c§NŸ½‚œ®s«¨€²ÂgÀå°ŒãO~žR—K{l¬”L¤ËvŸ¼“¡ÉªüÍóÿ§”ÿ¬·Âd©àº™Õ{‹°b~³d–ªQƒ¤„w¦VŸ›BuÇws¥HaŽEyŸQ}‰OʹSôÿó‘ÿ»a¦^d†9°¢Q|º_‚ˆUŽ Qoµb•’Qn¡Xj“LŸ‘C|Ñ\i‡`m›Sn‘]z˜bŠ|Uœ¼t‡ƒwh¹O€‹PŸ_€šGZ™HqCŸ‡JÉTaŸÄk|?ÌÔ¡k¼„;xŽ?i‘;a†8ƒ›?q¯h˜¬[_MXv-|ŸAy„D„V‚®P|—_}ˆSv‘Qx«Q¥z¿¢ê¾s :dŸ<q“Kg1O€«D”Í[…±e|ag¢8.šžOv”<”¯c—˜{œÙ€³³t—Y…Ã\Œqš¡Uzœ_}•j«©ƒ®Þ“‚Ë[]’Fvš7ˆªff‰™|F ‡‡Š¢xl‡C…—bs•F‘¶R•©fx°gM„Qk‚=d}BsšPtŒPqžH”Fx™[r¬yh¢P“¸a‹¯So“JˆŸAk¯U§ Zx«bªd½qo¸ot«‹”·{™àxµKp cpžHtšR€£P¥ÌIš²O„¶VuŠEyœZ‹±v…Êhgª[r™M¥W„“_…šD~‰`y¤G~›Mƒ®LsœIbBn‰h‰•Mw—U¬Ûku›PpˆNˆ°i޳kl’|j}W±Éjˆ¤i›Ýfl‘dV”Dk—P„šU|£e‡š>‚¯V‡ŸXÜìk“¾grQ‚ ]ž¼jªãqv“@zKyZyMi‘Dp“\oŒJt `eTx¢at›JiGk“UvŠL[z3f@fEh„K…³M|šE—¡]¢=_ƒFs”J~›RršP„ŸLn£Ow¦Qk”Qu”a‚œgfˆ`QcGt†D€Nx“Ts‘Xs’Mh4T…M®¿aOtGJp4\m<zVŒ˜HQyAY;m„cy¤c€¦Ko“Kˆ©W{’QZy9YoIdƒBwXšHmŠDc„Z‡®^y¢`sN€•Rx’PmŠRtVa‚PSu@Py.Y{<lŠKkGs“B|§K_ˆJu‘St‘_…±hpGg‘Kv™]p”cw–dy•b¤Xw–G{–OpŽEd=_†Pm•Yu‘Yƒ¯Zi•B^„Cb„aŒ¦RxŸLt›dƒ®•¢Í“­Éw’­sŸÇ‰Ôïy·Ìb¦ÄdšºiŒ²W‡–Iƒ—P„ŠB…‘L}Ÿ_™½XªP~¢Fw˜EhˆFhƒ?[„Pm—Ty“Ie~>q‹AnˆDe~AQqTk—`·o}©h‹ªQ]~=^…V„¦[_vKOkBLoEToa„blŒLhxPlZWrNak7Yu6Uw9jq?s€Ep‘[q’ce“jT‹kPrZep<bq7hsEfƒQluWj{Dn}Pw‚PcyOhkEpyIh>guRnlCfqFbhBjh5e{EdM„zUw‘MT‹e\iR…o@ž•H`©be…ty‚NtŠ^{‡_`„XVoQe\>foGv}b|~an“rl^sNqM^‚[Wy^MsLLh=O`@YsPsmPz…@}’\”k}Ÿ_n™T[„KipBm|;{ŒNb–cctKSj7QjUgrPl”Mn‡Ai€PcŒpe„Psy>‰Kq´`{ŽY~”B˜d{¬Zv‰Wx†Sf—T]DVz;]Ws~ikŽQv’Lg9zƒPp—@‘Zn“KsxJt‹Bw“>U—Zfx6x‚Tg‘He€PhnNty@W‹DtuM…‹P{‰H¨…Bo¹Y[[x~2UI^u:Sv,MgGbna]ˆE|rP~Yg¨7y„Mx¢~w’eÈ—@ËêˆÝª~Ÿqv«]k™^v‘Y]–\fx`j„H|~C´¢G©Öb‚»iv¬_zb|ž[‡U}¶ln’HY~rhrA”—e›ºis´vt–YkŸ[‘šT–ŸYž´€r°‚{=Œ™4¼Z¿¯S¨×sn´pž…Oœ·[›µc·w£’`޲eŽŸ[’i| P‡­mâ¨pðÿ˜îÿ›Œïw¡ºVޝ`Ú§fßÿ ‰ù¡ë¡žÿÇÿפ¿ÿ¨õLj¿‰~µYƒ¦Pu»_„”_ËÈW€õM‚§g“ Pˆ±J›½:©È\†ÒNÆø†wÔ‹x¢o§¿H£ª_z¶}·ºCqØ[c…O››Jxµd˜ŸC‡ÉU]”ƒŽIŽºI…¥M„­I¹Mu½}¬±pŸÙˆ|©O`¢sZ|Dm‰LnšLwN³ujLr<—F‰à’›¥Wƒ¡a‚ÃrqŸgrŸV†«E‹®_m”Ev•W„Édwƒ^˜HŒ¦^›ªV‹›^ޤW”“d»?spH‚§„q‘Ep‘I“¨C¦ºq{´z†±iŠÏqN‰Ck{<gx:v”V¬½t¯°p”À`{Ž\®ÏuŸÓig¿z¢±e”½SŸ»J¦Èf’­€ª„|¤ƒ¹Yp€\‚¤^tšP{®drm<g:†Ir—G•ŸKu¢mªZc—V_t7hŽ<z£D“œHiŽBa˜]–\ŒÑoq§M\œK]†o™§c|¯Go•Rv’Er¡PŠ˜Pp¬i~‹aÊ}€³Hb™V¸n}§€w§aйX€¿K{œKœÔ‚£´t·bœ¸ZÈ÷bxŸW”²f™³DŒ¯Rm“TžR•¥dyi¼óp˜ªYl£hd?xœCž´^¯_}œCl™j¢S‡¢Y‚¶dgeŠ”Ll}C¥’®É|‘¢|n•Op“ApJ”ºcx‹P»e–¹Oˆ­g¢ä“—¹z©Y¢ÆnŒÉbx©uiŒJv‚c…˜QŸ¯Z’±Xk”OxŸ>g‡C_€7_ŠXk—Mg…ErŽ[‰–Tg’8n‘Yc~?vŒMVxao•^m—lqŒ[r@q‘DavPvšJx–Mа^iEf“LiC‘ViŒKmD™”Uo’HtZm‡WTvOœ@k‚TŒ°e©>du+UfK”Ws…S|š?j‚ATsFg`iŒNrŽNuSf†fb6Vo4i‚Hu’T^€FlŽCbDgŠOeViLv”Qbƒ?r–GmŒZk‘1Y€2Xƒ5[F…›R{T~žJlLa{Ezša Wj†Ug‡Ju[t•NeDj‡LmŒd…¨`kˆEnU]€F`€Dh‹L^ƒLOvGlœ_v¢K•:Z~Zj”Wm™S‚£UxŸ`q˜r‘«pƒ—dƒ³†¥Î†ˆ¡i‘º¬Õp È`’°U¥¼kš]‹”\­u¯Ø{ŽÀg“²\‹ªSŒ¦Kp4[y@iKn˜Fh‰R‘¤O„¢M|”?y’N‰®]ƒ³i„¶wÇók•¬L}¬eŒ°Xcw;SrF[wLvbz‘Zc|JaqRewJgxMwB‘ƒAp˜P`Ž`diTmxXNŠhRdYPiVCdR\aB`h5nn?^ŠK_}UurQr€L‰ƒM†V‹UˆRiŸ]t{\jxDkyG^tGƒxDf“DhYiO~wD^]V|]tg?d‡BT†i[f`Tj:exCŽxQ‚Yw‹dguLgsBxvJ„Jf¯erdiŽJR„PYkVWvO\kFPh=<b8OP7[i4d=\uNcVj„\e…_l‚UlHm<ŠvEzœW|RbŒEgvDju7pŒEnTw…Is“Zo•c‰‰N¢©YŠÃr’±ƒŒœGv›Tl…ZswX}@‰¸`x°hIUCdDkS+{„;¦šM‰½W‚ždªV†—h|ŸQ‚ŽV… X‡°ks§\q„Ja€LeƒJr†G]„Mzs:Lb–@€oB¨¡^Š»tb¦poyWa>ŸxAµÊPfÎUx…K`‰FUŠI‚pC ŸDhÖk¢}]ažO±„CÎ×`«ÿ|¹Ï·‘ÔŒ†¹U†¤l¤\…¦R¥b{šU‚V¤¨L“Æ|¬˜v¥a¦J°¶N¤³bˆÈ{ehqFˆ>¦®7³¸xܦt†Wk‡\¤9r·H…S§¤pš´iš´Ii¬X†’e±¨u˜³~‘‡Lž•\¶°`¦Ÿoνb°¦S¯‹X˜œU³¨b‰žX ™TÆÚuÕãÂÔê»—ÿwѺh¹ûu¯²Â¦Û¯±²S‹À“a c¹¦˜ŸÛ©yÉ­¨‡3½H—OÓ²Géÿ~ˆÿîs‹\‚ŠD˜½^Ьuu²dm¤mq†D‰¬d}›J}M‚u¢—S“Æoµ¤q—FkžXo~asž\o°zsƒK‰?pºjswQ}—\v¥hq‰`uŸR£Ä’zœkqŽMjŠ1l¢=‘C›¥Gm²Y†™1dD^ˆ@‡‰}­ÖX…¯ivŸi‚žYŠ‹F€”^“š€xŒUŒ”j߯Zª@”¼]u›P©ƒPæÞ”Ýk“§a‘¼p”Š>€Ÿ]mÒj}¥Y‰›cˆ´bœ—OƒÆg¬¼jp†Dcs3a},ˆ¤Gt”lz‘Nmžmƒ€L›ÂŠŒZ”SªÿŸÖ¨ÆÈû‹zÁiñÙÀÈÿv—Æ]y¾{X‰9h†hlSj…ds8b„7W}<•°]ÃÎSƒßxv™^]œatx;~¤Gp›en”e]=‰œSv±TŽ´[«¼i|²T·Eƒ‰P‡QÍþXy¤X€«P{ºLÓWm–Bm”_€µ‰}~Kq•Q^q?—šF|­hwÉw~¬a‡¬uehjŽU¯x•¸z´Ä]–º_¬ük™Úu–Ï|’Èh—ºb|°hd’[ˆ¥io…A`>—¶Hz˜a€¬QŒ Pq«R¸m{ªl‘XqtDWyS€QnžUuœyy–Zs¡Tu”Z~˜T±ÑŠÏa‹£q€Á’€®\‚¤r’Åny«k¶z“Ã_y¡Iz¡L‰—U·]“»mžÆue‹Fn”Hj…4rGp•Hx¡U{”K®R˜ºn¯QœJfA™³hÊBÝ×›äEl€Kl–H^†HvEw“Gn•]pŸZs“NmŠMu=q‰[všZ}¡b§À_~›Uj‹Tg}@k‚?eHfŽJ†¤kƒ«_„£E€”IXvAŸ\Ÿ·xi‹=\{7[Ik‡Ce‚Qo‘Mb†La‰BlŠEm–Tm…H`ˆE^‚M`‰?\Ae†Lc‘G}œQ]†?q™Zk—[žD`‚A[€:i†K|›iŽ]ŒOZUwŽQˆ o{¢Wu”PzŸR¬^£Oe=YH„¢^¡lŒ°Kx—?v™CiLp‹@`ƒ4d„D]ˆb¨YbŠ8KsMdŠIdŒIg’Ry¤]”«Y†™^nU}¡o‹µb§b¢¶v»lŽÆu‰°r ¶o«Yf‚\‚¡y™Ãx¾pž¿hƒ±\‹±Ty‘HcOЬd³Ò^ »p¡ÐyÄÞv¯Êd•³QxšTw¯f‰º‘Çø³Ó`—Âlš¿R{›>s”Gh”bvŸY^yNHaH=OIGXEN{<]fDdrIi‡XTŠlavbepBQ{RIeVRaFYl=VsAWoA`oD_xFiqW‚eOgCm…Zz‡P~\„—cqŸkr‹jz€Q„ˆOh—P~Ž^t‘Ch–c\ˆXksHY‡Q=vfWZ?Om6LkJaW=lo0V~<†iF{Pƒ›zj—`d†YpvR„CrŸi|”r\‘WSz_bkAa|@dlPZo@Rm=md5\ƒ/bwDXw5P{CMtE^iFdu>qxLn~A{qA‹‹NzžX|’Ts†OpŒCP‚ObrLwzM~’^†’bh–OkŒ`qad¤~{€Po‹Z~zHš‰G‡¡J‘gŽ·rc«r‚zWbŒ,n}?ŒEl Xl˜xt“]m—a˜ŽZn²X†SnµkkaxE”£Oc®Va‰[r}J,ƒ¬Su—Z—‡Dœ·P¸}b zn~@Z†O‡uA•¶U|Çg•WeˆRkŠM”Em§[UŠfb€Vh}J–>•ºtuÂx”—d§²|Èv‡e•¯Wo¸g~mœœL‚®o‡¢TŒ¶fx¼bx”gu–L›Ÿ]™Â|‹´q‰’sz›S„®\{¡U‡–†™·|c¾gsuHwlHrZ¥…C‹­P™š[мxn›q˜‰C·¥d¾ÃdÁÆ_³d£»l±´r³¹¥Ém­l¶˜mv•Lœ†av¯V®}K˜Ë”¬­ŸÀê­¦¥Ž±žjËÊŽ§Ðhq—p=„zb`?›Œ:®´ —vÚi¥l©¶ñþy‚ÿ®V›vUwD{†AµŸ]gäih}d|‰3“ .©ÎeˆÃ²q¬h­‘I »CŽçŠk‹‚]ƒWcu@w‰Ti©Nn¨]}}P—–7”ºXqŸ\‚¼UrV‹ˆP——DІE–½e€¾bºFbŸks›?pƒa‹©^}¶ghŒv~¡LŒ¤A“¨f¶©Y–½G„¤9o©LŽ›Tœ²L…œ|™¸`Í«y}®R˜¸„²ölÁY€‡U‡˜i¦¶w¢T¿œG‡·[ƒ¸a££Z|¢B°šM˼a­¬w’“[u£lƒ‘7¡ AŒÂ_‚’Pn•Xx†E[ˆJ…ƒOh–G¡“GÂÀ©—·V|²ŒªÅy’Ó›¡è Š£…¦åu¤–Hç³Qg„Ar‹GsF§Kg‚H€ ypƒ‚w•m„UyŠTYz?kžTd™6q“BaŠA‰†RTŠCn’?ˆ³pŽ¿Y¿pyËS­©h¨¾pŠËVl©_w‚^ÿãš±õ\g‡Ed†W†¢YBt4`f'y¤aˆ´p¥±„}¦Rb‘Lh‘QpŸK‚štÆs–µpŠœj¬Ì†šÛmž±[„Áh€±”ƒ³dm˜<q—QšÃq{¤`›w¶ay‹ppN{£Er¨wš§O‘½Y•³_¥Du®^s‡Ow¤A‡ ^w“sgŠLke…£ko ]b‰eWu>ƒ¬SiXq ^„³Wqšh„°jfNƒ¬V}•k~žktš^£t~š=Rv4t‰R€’Xh•Qq¥L€²dk•\¤¾ÀíqŸÈi·Öd€©š¢ÐxÓÞÕŒÆVx”S€ŸN‰ Y“ÀH¥f¥½bƒ¢Vбf˜Ê[m’N†¢Nm™SФo|œgo„M¥KmŠ@{…L}H“Jw†]gŽf„™b” Mf‹Q£»hrŒvuS…šB`„<k€Nw˜Fm‡G„˜R…ŸMq–Ki‚Jb|?f€IX|:f…BpKU{?[‡KlŽNZ†KfŽQp–WVvKRtEaˆAX{Pk…h}Ÿu›±KgX}Ž^€¢hgYr—f|£g›°ym”k…­Kw•Wyœ[l–e‹°]»ZŠºX—·_t¡Gf†9Xu=Wa€ Kc†=Pn?v’HjDp™X޲sŸº]¡I]}NeŒ_¢dˆ­‘¿ÐszŸfŒ«_xjržb‹µg¯d Ãz©Îv–Æ„§Üq¤¼o¸Í_}šQ•i¬Ô‡Çú‡°Îx«ÓŒ°Û|“´dq—IlŽCm›_…³„¶ï†³àrªÔk€©Uq¡R{—Ri‹bh†KI^8;D/5;1;=2VƒC`kS_nJjjFS‡H\u^`rCjoF\K_pFrtE[…JG|RV^Dbd3mhH…qAi’Id†hcuQowN…S…‘\n¥pkˆi{„Wr™V‰Šj~—J_ bl{irHbƒGXˆbdcImq0_„Cjf:fu6bxE`jFf{;n^w‚XaŠYXqTdsElT`œdaƒ]q€]Š{@}‘GyˆRwLh‹EkFu†@]‹VayIh„ImƒI[ƒEbtFoq?nxDjyDc…Crƒ`uŒQx„SwŽP=š_OYRfn4k€G†R[§[c}\l{;†W‹†S„‚O~L‘—ZŒ«t‹˜x‚ wP©flgr‡2r“nŠ—Cc§SN~d_l>‚‚Ir–Uo›Qj\‘“cv³X‰Z~½Pi–†–{V¨–J“Ny¡d—–V‘ÁW›Äs£À`VÄ‹fr@X‡QhuDk‹DP‡^]dKz};mžExDlX[~MstD|ƒ<n’>ˆŒ[kœez†O„›S€‘bežcyŒap–f~‹[”¢T€·d~§kƒ¥Q~¢dm•L}G¢ž\v¿t›™c‰j| Eƒ™a~ª\¡L®d„™\£¥I¡˜LвOÜ«Lµø‰‹Âe~¨`žYŠ£M³›f®Ðd×Ó–”ò¡£«ˆƒÈf“a~¢œ‹|p’¦M”°w£»ZÕ½[–ÂQˆµY‘´hy­I ªO–¢ju¡Œ—Šº¯m‰·I„¥6¯¢xŸ­‚ÑÞ:‡Æ…ƒÆ^«®XƒÉ€b¤¸tDbœPŠ’6°˜` ²|‡›H’¢7c¤R}heuŸcŒša{¶_wœun­€–|Ls™9ˆœD¡¼?¦®N{µV”„N|›?…š[zœh dˆ x~¬R‹©hˆÕa‹ gz–h‰Š>ÓžFiµb‰†2‡ª^‘V¢=›—\¯Æ\µæ[­ªo€»‡‘Cz¢Iu§|z¡o…‘1ŽÏ|—¾pŠ­x‡_“ÑÙƒëk‡TšYw’y–«Oº”Q{§‡»¨ešÂ`ŠL¥ÎZ±Îjw­Z‰Y¯ºoŒŒDm˜L’“Yo‰ItE™Bip8“0n‡E|=ÿOnÙ{pŽTŸH˜Nz†Lxª\ƒ³z¦oêÊ“†”[‹ L|“Dr„QduT^‰F²ËY« }p¤€j|Lˆ‹7Œ§D]ª#«¬Enž3€{?v‚-›¢B‹®h˜Â`t’KsŸg¸Õ”¬Š„×e†™Sˆ;ÀóÿÈà¿Â·R‚ÍS[€Fm(¤ÕDŽªayšItnz‰Sn‰Ksˆ4ˆ’CnŠBpšf~¨~q¤I€Žp›É‚‹³g ¹~‡Æc„‘Sy¤C–´Sz«s‹§T€ŸE_sAªRˆ“@r˜X„œU‹™n†Žg†¥Ve‹dx‘Uh€@¥`h‹`—BqN’a›Øa]†nu‚L›¶Q€¨Py Gy°S|¬co•O{¥Ur’Cs™[fP{¡Yx f~¤T†˜Ml†FËN¸Tv“@œ`Š£_„£Xг‚޼ƒiRu‘a’¶h—·rÊç¶aŠHo”LqzF†¬Sw¤VŸÂ†Ázr˜dy z˜¸Œš­o‘¦Šž°išº`«^z–S¶Õv“ºQ¯ÆTo˜P™½Un‹Km‹Fœ£k©¿\”²U›¯YbKp”Xg†M`ƒJh…]dŒN`†Hl‹bƒ§QiIbƒBbJdyCh<ZAbR\<m„GSxSƒ©Vrž^f…DWxEmŠ9c>\qAi‘Wjši}¡_‡¦_g‹_³V{šX§esšc»kf‘XhOe‡Sf‹Ea‹M…¨V~Ÿf“¼w¥À\eƒGr”B\‚5Z{Hz Pg‡;^|CcT…”E{›_—»v”¬Yh„<Qn<i[~Ÿ^z¡ˆ‡¨p„£Y|•L_…HgŒQt’e‹ªx…­r{¥vˆ¯~’¸€š¼u¥Ðr•­e²|­Ú˜§Ó…™¼i·~—ÍjºX‡ž?c†@Y„Vf“l›Ë®Ñ±Öb…¥Ps¥]‘<4LJTZ=LT1QW/_J(PD&h…I\vGrjH‡s@m¤GmŠ`_D€jCo•Me‹^\x[KpM3sKAPA\K+Wl:msKuMe”`R}[UqDzb<uJnkk‚uk{Qv|Q˜‰a{§Od¥na}ms}Ry{Qa†YdwQr@mˆKptEj}H{qJrƒ?\Fj}HƒpGbŒNZs_jp<n…M_‹X`rZemCzrCbQ}…az‹MkŒ`lŠWyˆG\YgxUZ‰=]~SUgJmg>|x9p‹DfŠMiu@ƒO}˜C‹”Qn•OJlh`>}ƒ(m˜G]ŽQSyROpSJh9v\FmSx~KnIYwvxq®Œhn•iiŽkzˆMj™:rŒXx‘BciZx_Vh<av9n|?_qOdf;~E…›O‘£`¨ª`xÀg~˜]å7­¾{z¨v–‘O€É\u—b›_„͇h’]w‡=eŸCe{EiFS„AVw:v;Œ¢[o¡Q|ƒHŽBކ@tD¢ŽJe¦br‚=|K{¢InTU„Czz>ŽžW†œdšœEkµT~…JvˆGo—OpsCŸ–IŒµx–¥d‡ q¨LpªI~‘O…›Cg«YnŽ\«ZŒÈ^¥¢’¥ky°pÔ«u•än¦«_бj”Oí°wÁ䋎²˜pœp’qš¨dެJ¢¬m‹Ìr޼\€µV©ÃsoÆ¡Ž^‡ÈiÓªY³Ùk–§dO’W:i2eW-[n›GoxX¨™fv¾f°€g‚ÎV™MVuN\fEq€%mhG{‹A‰\œ¶žO‹l„kCk™sw…<N–shp@NzB^l6ah5‚{-‹žT†¯H­¬vÈœ¬©“ªày²¾c‰Û`wwYs°^¼fižh’Z‹Ítƒ¢ay‡S©²XÀ[w™d„“>‚“oŒ–EÂtIˆ¤H~ƒh‹“c_U±•œêX†•M‹ƒL¡Lz¬W‘Žr‹Y†µN…«:pU´¦WeªFº€:Œà[ÄÖP²™Em–Zœ—G¯ÚŒ~ÇG“©}Ÿv¢x¦Z„žr‡¡Aƒ˜Dh§]u‹DlŒ-»É\j†,ŽŸ[{§Vx™@Ò˜M¡î€{6•žRwÉiŽ£5„_¾A‡”Z¤Ò{‡‹ix„Bq‹`x™JTz/zˆEs›“®‘DÆÿˆ‘8¨º`©¹]SžHui=‹”D‡°Go¾]‘Xo„QnZs—H›hˆnS_…`W|ityW^ŸhRbQ¢’›×y‘­b™ L}—ƒµÃ°¹ìhsœGq€<޳M_ˆ8w¡@{ŸM{£:p¥?v‰U‹½Y¥Á[Š¥c©c—¼m˜ºb´á^”ÌV‰•Tš´l’®f‡¬meŸE´Ì{{¿\Ÿ¨p•¾tw—Ntˆgr¨hzAlƒMe}Cjˆgi«?h‘[sZ|¾^fžK^z<všL·bs¦S¹T”ªasŽZ”¦b„±V ÊYq•Zf‘Lg…McŒ]o„U” W“ªNЇ¯oo“XrTiOx¡cƒ´g€ªX’ºW°[u£Lo_”»‰m‰EX@WjDE\Ke“Gw¦eˆ¤OŒ¨WjŒEiRx‡`r—bºhz˜kŠ­Rl—k˜ºq†°s‰±`†©bv¦UmŽD™°[s’†®Ñxªs… Xk…Ql…MlŠR‚§MkšKt˜GOy>fƒQuŒKiŒI\~CX}Qd†EnƒLrˆGdzDe;Xs:[€Hn–g|–`cDdƒLWIKs5[I‡ Mi—Ys¡]bfdŽEo¤jg\i‹Wƒc}¦gn IpPd‚=]SfŽX{ c›Àj‰«v†¤UdˆX‹­gx’L‚£j²ÐZx›L|—M•Qz‘^z™Z‡´o’¸Nh‡8`~K}£j~¤Vo”lqžfn`{•>e…<Y‚JpŽU†šd†ŸRl‰]f†_r“d„¥l—¼q«f~¥vƒ°s…²{—Îq‘º|³Ýr³á{¶Ý[t—Q{—Mi…^|›tŠ®oz—Rl–Uz¨hš¯/1:1:G:VfHqwGcQ0NH*`nA]GsvNxyDqˆSh€^azbgvQiuOH\;a^QT4Ki3U_=fa/X‚8XuO…uFx’U`”hkxTa}?P€KSt]Z]]YhJ~qG‘‹K…³[„›{c™rc`dpD[mPMqE``>fvAlxDqŠLQ“JfŸYXƒe`d@[xAWpOLi9OmGliHjO}~JwBiTnwXcŒNge€}Qi‰KR€SedG‡<u„GVrItf>ux?c‹E_€Vin=y†Gr‘=z|\_Y\~fue4z5i¡ZkŠ_zzAUˆ?iiLnp2hƒ;~R[ªEK|e[f@~yA¡”V…¢h^¬O`O{zIj¡Bxˆb€sL~€JpZjŒMouB‹‡3ˆµ>°¥Y¦Óf®Í€œÆt¹Ëˆ¾¸nÂÜ€½ÜŒ½ÐsxÞps\‚E{©Vc r‘’Hy°V™•R–´IW²]hsQw‚-f“U`„BzzSŸC}žWz–^¥“T~»ešŒH«]’I‡R’®ClžX“Zh’|–‘X°ki–N—‚Hu¾M~‰I„žN‡O\¯b›‹xŠ»g€ ‹…œi~¤k~šUŽXšªG‹±u¥£xšËfx£Š´o:˜Ú}s¯m“Šb•š^ùŸ^¶ÿ‹Ç³£©h«¹UjÊeÐ…Z·á]йdÚ©L¸ývŸâŒž¾{€³rm˜^˜™V†¥‘’œ[Œ¤lo’7ˆtY¯?¨pL¸°M§ÇJ‘Ép»§I›Ôm¤¹c©hu‰4®‡@¶¯YeW³}A¾àX^Àt†r%†œCx}Ri¤Q| 8j{CQy0ƒn8ǯSƒÉuƒ¨“q|k©”n¹Ú‡ˆ¥’…¤dv¤~{q5t”IªŠMoh”µC~äUu”hd3r¤er´cx™BƒDŠY™µY¨¶T³Â¤‹¢@’™Z`~Q‡˜?³¾[¤s‘šUŠ¡Ik‰:¥UwŽC¤œS€Æ_bˆ;Ž‹G‰¯su¾G£ÕªÄùűÿ’²¾E¡ÿgà…ƒ§}}›bÏjl˜C§®CuJµp„ L…¦^„ºMo•Q™sGmxY€Œ\ªY„žhª°X¡™rvŠ8¢‰†ƒ§`YpœQÈÀpˆ·[}¢y«\Š‹>˜ C‚ D|¤>}ŸV–¬bÍ»‚‘ØÊ–©oÂøtÄóruŽ?ƒ“LŸŸU‘°‘”ål’ÅIÔz}©h–¦fq—J„”Ph°cb—BlPhxEm†)†šg‘¡…U~_„™_±Ë„«ô}¥±…ƒ¥\Ÿ–H”™i‡®8xŒO‘±V|TaƒU›E£®€¤¸ÛêÊãaãì§Ù¯»ŒÃðˆ›åcšÓw‰av¬hj„G‰¡ov™g‹£ay’tt‹Q{@o…M|›KvŸNk‡FrŽAy¦`i„Fw‡OjŽZhQz¦U{¤fŠ­\j¢^v¡ax©flGš¤{‘´mŸ¾„¤É[‰¥Ly”`|¦U}«Yb„N™ºsƒ¯js¤[i~Fe‰^i“W^‹rsœ_`†Q©}j”l˜¯Ww­j¢Äw Ép€¨=q‹1—“O•²E¬Àf¢Äy¸×k™²Q”­F…‹Zœ™Tžmn˜W¨Æo€£m‘»pa‚T}š\|¦rœÅiž­VŽ·S~¦]}¡or˜m½Úki›OqŽLb†FgŒ~µÎl¶U›;rŒVo•JrKR~2Mu?V=p’JiŒMz‚DYƒ=d„=TwH\…]mFr’G{žLc;_=aŠLnœK[Jm”IZ|Gy¡@oš[`~?g‹S`‰d´aŠ·Uo’Q[ƒ@l”UtŽH{m½{¨Æz¨²Up‘]vŽgbŠbr›Ž‰³lu v²Ïh¤[™]‚žQu”f‚£WjH|‰Nf…`ŸYz™\|žUf„Ts”SzšGy’Nu[tŒh¨WeFc„NiZ{¤f–ºeаesŠUi•m•½†°Ú‡¡Èгæ‘ÈáošÆa‘¿Mv–NnˆfЍX™?FlTw¢xœÁ=ag+LgGs”MN`;BN0?D.eg>gz@a{ORrJdcKfhG[€TO‚OJbHVdVY]K`i/Xt1hpBvx>XKXn[rqFŒPz™ev–\iŒVE‰cBXO\F2Yf;‚o?y8k]b~uYrhbkZ[IhjAn{7qPk‘D~Vx’V{_y‘dm”m]…yaiBTy<fgI]p5U|Azj=VŽ;gvSxn;r‘[}€c`˜Zdw`nvAlƒB[yTcg;ym;¢Hk™e|yWr„FnyKk~T~}9X[Xn?cFržQm’bgŠ@…}?fœQ[|Sbz6ZJwlC{@——NÑ®V‡íw`¯‚x;–~2‹£a¥·t‚ždW VŒx?Á H|Çw›”cšªL¹Ãp™ß„¹{–¡U¡²\ˉ{§q—¥fš´nÌÅ~¸ñ£™ä˜Á«ôÍ›¶ì¤•À•˜°q£Âuоv´³XÂb¶›m¯és¤Õ­|ºbq•Tx‡Iq‘?›‘J¢°KŠ¿l™g®D±†ªnkš[e…K†Aº¼J”Í‹‘§[†¶\y¢Nz”yf`s|=n–D|™W›¯LmÂ…]}}tnD{›E’j¶Mg¤e”‰jÌœg±ûž²ÍŠÎËr§ÿtŽ»“£¡OÅ䜷îxpÍgº†F¯Ñz­Ù‡éΜ˜öœ~Ât­¯p¹ªeÿ¸p©ÿ­ÀÐagÈ¢w{Q–ŠY~¨W›Dt¨\`~Y¯vP™±}’£e‘Áyƒ—WªO¥º‚±Àzu׌Ž][‘–zŠ~šps”Cy›?‰¤a¼§s¹ëds¥¥|ŒW‚¢<¼ÅbÇ”¶R¼µeÁó–xÎXa~3³z?w¯a­‹X›¯Q…Åuhœu’‘S›j}‹f£‡J‹¬\ŸÉxs¦Wq›v¡€‘‰D”ˆ>†šcu–_†¥S——E—¼\¡¬M˜ [²½lŒ¼’Àn‚ªB©¬P¥ÒrÁx›¨O‘¾z‡»bÇZ·½j¼Â_ÔýŨç’v¤T«¢Gʤ[šäWqˈw¹ƒ³c°Ë…ƒÆx‹ºU‹¤SºÌŒ™¿_†–l”ªqˆŠ[–Zt—R¦Ž™c†ƒ<|x6†•sx§c¬M¦¥^‘—`{µIˆ¸Y|…^m‡@ň?äx·Æ™„ÎPvžRj—9°ŠD‡¶l¡³gŸÝp™¾Ž}˜c…€Y‚ªuyÏŸl‘|¼R¥ÔY»ìt·»a ê«˜ŸsŒåz…šU£¸y™¬t|™R|„NnªFSŠK}šv¤ÉN¡ÌB»ÖjœßRÑv¶c›£j¨Ãƒ—LÃׄy›Sœ²b…¤NžÙy„ÍkxŠQ¡ [£É§Ïk°¸–²Ô¬ËÌÏŒ²Z§¿i“©£±„‹•€sŠG‚µVš’M{aƒBŽ™gˆ¾Y‘«ChŸRo†P}™We›M˜J^pGœ¤o~¬K`‹DhIi~J€›e²¯fo³|Ÿ¸J—×_}¢TvšCx’\¡q›®˜À€\™Xy—MªU„žnl‘;Œ²vx Rk•PtŠbiNŒ°LWF]zC`…OºfrŠn“¾tz©]¹x Ã‹«ÔvšÀK™Y¬ÏjµÒË蟤ƙ¹j¤µlv•Qƒ—R˜ f¢·a˜³… ¹o†•TvN‘W¤a“™W}–`x—Xƒ¥s’µb…¡kžvy RmŽKbˆEXxS\„“ÃÕŒv Hpco’?VOs3`‚CmŽOj’Ks–I^€8Xr@{˜>^BYx>QoE^Ak‡SdDi’Sz”Ui„;\„Gh‰@_„Cj‘Kf†Ie?kŽKu‘c€§mйWX}EmWgšT‹¶Rx•Vr }†®{x™o{ŸWdˆAf„TzU]ŠS€™xžÍmy’Y‚ qЧZx”]q…MjŒYz—H_zRdˆWkZz–XvŽSp’Wv˜b}—TwG`{Xa†E\~Fv¡L¥f“¼„¨Ì\gŠXh‰CdŽht™‡®}|­†ŸÍ˜ÂꂨÆu±Ñw½âp±Ñj¿Ó`¥½m±ÕO§\˜½t¯ÚY‚©B~šLo™I^z1Ul9Yo<hc<Xx=XsNbbQrlF€z?ržQa”\V{T`fP}g<]…<goG^oQ^lJRkI^fV^}@m}GzKk›\nˆdi‰clpOkk5`}<˜vEmŠ5d„^YqPWcJfe7Y†DktLf‡A|qT;HYZilxA^ŒXm[‹œ_o«y[|RF|Mf\?„~0cšPƒtRU–Kkn\x.™ˆ`”¡bk­fqhr{>u{EŒ|Cp‡I\|Jup<h‡W‚e|œSV‹M]•NruYa†D†z@‚…T¢ec¼ck…PuŠIRzQsj7_†6vxEŒF™¤Xƒ¹e†¬†q¬‡nŠR…=x±o•yœO‘µp³f•¦ex©Œ’ |›°Sµ´~ÄןˆéºŒ™…}¤`x¥‚’œ]s±kf–c”ˆ[sºp“›s˜yb‹j{ˆpË…r¦äv‘±ž[«”Yzefzgz‚L«¬umÕ|ZŠŠzzt—›D®µi¦Íj{Ñu“s¯f´±`‘鈊Àwo£f‹ŠMp¨H ‘k³ÈmÐŽŒ´|{­ix‰`ާ]|­aŠ=–®H ·N^§bzyFƒƒAm“<h”zr‰]`’IÀm?šÈo¤Æ–¨±‚Æ„¹–°«€“ÉŠ™º‚ÉijÑpœ‘BÔÑe‡ÿ—³…“±¼¦“ב•|Ÿ¯„¾ºqÔ¬Çwzȧy§e\¢eu{]zTl‰d_ƒ6yƒ;˜l}mÄ”V®Ú{𽆦Èp¶ÌW¶Øyn°S``S|„2‚7§¸e««a¨N…®Bžq•‘x±ÓFd¶‰™‹T‹×“k”Q xŰˆ°Ë‡¸Jt¡=ƒœa¦—[®­…ÌotªH‚@v|X¶—9i´5ˆ‘C…Cx‘Q„¦3†¼t}‹<¹Œ@†àz‚™Sˆ_a…[—–N{Ág‹WrgIŒ‹z–Ò~‘Ëw¨u}o›©hƒÉ‡‹²Y‡U«h|‡„ÿésµç­¼w°V…—RpÐfo‚œNyK‚u%q–9ƒm˜¶Ho£i‰¡z¬¦„~“†a˜KL‡’RŸ•]p–N°•b¨ëR‚ªRo›7”ˆ>ÏgŸ S¸L¬¦P²ª]Ÿ÷€i¬Rl“P…„f›‹c”̆Áªg›²SšÈ}‹fŠŽc}c„¨Ÿ²p„²[pÏKv Fl¬P^o5pšoo„ao¨e†¥‹¥½‡²\n¯š{M˜¦l…°pw¥pzŸPc–>lžN¨Uˆ»wx¤zŒÆ¡c¥TŠqŽ“X†‘f›°Q‰Q²ÿ”—„F¶½x¥ÑdÞik‘YtžN–j‚’XvŒm}–]Çj} cœm~™j‰T†¢cp IgŽQ|“^u‹RrE¤_y§U²Ïu™µbz©Yn‰?¢_z»`‹ lR~8ž±‹›Êa”¢Ww•I¢ÓUz•N‡¹Ž_…OqŽhÅn“°k~šJ–©_œÚy†¿táÑtªÁKÉÇ‚ƒ¾]l¡IXuO—c–µt±Z®U}¤Nv‚Z–«;§Sn˜M}“`‹®\}žls™f|£`q—y«rv i‹¶[š¿vÚÿ¢y w„²n˜À•µàˆ}«H‘¤_Ÿ®aŸ²d¡´q­´o\‰H‚s±²e–¯a¢´n‘²XµbÌßz|§me“Jg“dr”Gg’In€;\s5ZlGj„ˆ¥»[`…M_5`x<}žEoŽJ`ˆEp’Lf‹N{’>h€Tq”=]w>b†8Ns3Ln8e‚Im”Qb‰HVƒJmŠOu”AcŠJo‘FuŸSm‘Bs–XwšQg’]n‹qz›^xž@g†V¢g‰°QjDn•ZsŸ_¥g‡¬\p™FlXyI~“Xo‰w£Èwwšaƒ•]q‰W]‚Tc‚Lk€\z–SN|StŽNf‰VqŠJ_}Pr”Tw‘Ks‰C[v>Tw<[€Lk’a|¥u‰·}¦LfŒJo—Oz’W™XeQsœ{‰±˜žÍ…Šªm—ª~ŸÇ|ŸÄ†Æ~”´v£Ë{¬ÑwŸÊy¡Ïk™Ïfœ¼bm–^›²Dw‘Fg…O^p9^r:nrLcqFy€=ˆ‰GwœYr¡pmbm„^€QJQWjd[e9Yi>bfBeBlDjUg€G_ŠNsV}‰P…‹UƒMz’Q„ƒToŒDi‡_asQnkEs‚BX‹Rmn\q‹G\ŠS-oMA;NJTOd=s`G„‡<Y«vnq_e„DWzGju6uˆPƒ{[s RkŠdKƒJiS—›SoÇuŠsgnMvF…yBx…Pp„^p}Kn{C~U{•V‡‹is¢_bQ‡yS„ŸGo¨n†oN –N’³ww©emX{ŠS‚ŠJo˜TSšd\vFi~Dwˆ[[“VrT“‹E§¶R¢ÌgйnŠ«l´kh¯Œ‹†y~œlz•be—Yi‚W–…z~¿“€•€Œ¨W¦[•£a®Z†©Z­Uo½az†a¤ŒL}È]d—Y‡€4w¤el‘ŽD‚\?XRvW3‘Ž2ÁÂTcïu`oj}w9{Jp”g†Œk»¦vÛØm°÷˜½Ú„Ý«‚§ˆš˜w{ºio¨ˆz‰f¡“\nË“‚Ž`_–XZ{Pj‚J{€NΠU›¸q„Ħ•y£¹dÃ`rŸkœ–Nï¨Aú„‚O³­aÅÛ…‘àŸ€¶_z‹s¥˜H”Á`¸´hžèeˆ°ÎŽe¹¨t‰þ¨´¥W³çŠn½—”“W~½‰œš|fŸŽ}g§…U¦»dg¹ruuBˆ 3|–9KˆArb0˜¨M–£a»ÇM€Â†‚©N˜©w©«y•¡_€œfœ‘M­¯G¨˜‚y¶—‘Zµ€•·pˆ‹c}™v›‡g}›}‚¨V›·K_ŽTy•Hž[ª¥€¹Ïh®vtµkc‹<ƒŒq¡g|Î…ŸpC†ô?Ö uhÉÝ€˜F…^™¶LpÓPv¡\†KžÌXsW…ÂF—ˆO}®R‚âKf½G¨¨By°_®UŒºzR¬†z~j“¼‹r¤Pw®pj—Sk…[”‰{ЧJOÂ~ynf}•qw§I~µF~‘v®Ü6{¨:j‘8ßµ•©ÿm®«i˜S†»F‡’J””Nwv=„—Dk|?ª´XqËF‰¨C¤”iƒÂ\X„<ÍœXÐÿµÉÒg²ÿ}˜Tœ½op”d¦ªx{£X“EaŒ…cš»mÓ«N`Ä_m¢7 |F³ÏM}¤fs©aszs„E†EV†@jEa†Iey.~•]n¥b«¨f¶½_«pn¥Fu–V]Fn¥Nr¬Spz8„ŽQœ•Yk„V…’^ÿº…ðÿ›°™@~™X¤­ƒˆ´f©m{¤y—K‡…b›—‹r¸vn•Q|•H¯Wy´^€®U‡¦ZlœO©¬P·øa¥gЦl€”Hp9j”D}B§;ŸV‰¥\y—o{¥m˜Æ‰§·j|™b Å\d‰L|“EvU‘¤‚œ]€du¡gjQiHvŠ=n”J^‹T‚­{|¤†ŸÍšw¤q‡¥mªÆ»† Y£´~´W¥à\€°T|£mp“[‚¡my‘Y€°YW{apƒe{˜_Ê{›Èm¤Öe†·[i‚SžQdŠI‚®h’µdœÙw‘¸…²›¿èh}œm|žwˆ£{ðÿ õÿ‡ÙõŠÜøs¦­|˜±Wbz<®·fÇã}©fˆ¤nµÝ‡‹³“½}¬¿vvžY|¡X‰¯dƒ«Ni:e‚7d{Ah’_s”l—¸GlŽ>i=\…DoKT|B_ŒLc‡DNv?]‚]}¦J{’>Z‚=z Hrž=i‹Ex‰K]€DkI‹¬h©ÌdfDl…Rh™_h‰Iy—Z{ WxžSm–Psœc|¢LmKg‹]wšTp¤Ro—b‡ªi—´j…©ep“LmX§YsŽKbXe”k„ªgx˜]†žJbˆL_~It‘Ux•Yyžj}“UhŠGl\¶T—d”²gœ¾WzŽE`t8e}?X~Jp“Xv—]j“[lScˆV‚›cƒ^{œLd}Kg[w›{ºqsœh¢g–³w•ºlxez›k¦…š»x“ºo—¯iµpž\xšt€©RjŒG[{<anFnrCy‡I[QnvQy|HnUrnrŸcu‹_i’[V…YbeSld7\v<aiCj=jwRqwTp{Fj‰Qj…XmU{N|Vˆ…btXkS^|StpN‡x?eŸPNgil_ZFA„O3_@?;-bM€r*l|=w…No™Vƒ…[~˜Hq–lkWcFzsGŠšMY¥mMmctc>\Œ>W†fiqPvH}€O‡†Dt‘V`ŠdL„SVbAcX6cn>osZo‚\ƒ‚MŠœWq²až|†O”–P™n¦vz¬yR™eacKN€UJo\Og7Dh1b[Apy8\‹Pw;­`œÅy›Â‘†Éªt¯hŠk‹„YZŸ_y€X€S–Qr¨P^œlcvfq„U”[i´q‚_«_šºe…Á\i­n¿v\•¿eXŸndbGdzD^xGNmSm`3¦–6…ÐW§mhŸu™Š[µUf]Z|Mb~;~wBn©‡Œ¢›®ŠlÁ~‹„]~«^™V†·S­¡[¬~ƒº|¬ŒfgÏxLnV¤g#›¹^½¦PŒµ` ±r¾Çe–¦gp¶ˆk“‚°pFÊãyÜ•¹³rš¿|x¿ˆŽ„œt¢²GÒL{¿whq“’I…›c{¯UY‹MŒtb ³jÊ~Wvh\j2u1}“T\~`—t)xš<ˆ _p¡[ŽiAêÂX†ëgY‘>ªj0€¥V¨¬Zv§…–k¢nm‡Yy˜L˜ˆZ{¢TZeˆnGˆ–o„Ÿ[Œža•¦MV¶{uo5b…TmpKzƒJ’µ?j™V\‚I†‰5c—M­n>ñy’ŸI¢¢GpšHu4„@XT„[)êѬjÐTvŽA²|FpìjFcŒtv¡]v QoG‚·mvPŸ¯S»sƒ¦i|©Y¦³x€’t“[\†Yz{B´’>ÑlšTÈU|—=c€Ox5À¥Z^ÿ¬ ?v“EYZQ€LœUt—R[t{ƒ˜S´›MxŒ–¡…?³’U€‘aižM‚ªPz@ižl‡y:«ª[Çĉ‚¢T‹at¹w‚°F‚˜N¼ÿ˘–[ŒãÎŒŽv…ŽF®—C¼Ãޡߙa“l™^v¾XŒ¤T€›V’¹€‡£ež¨M“ºnšG{ivP¥•U¡Ou’Go¤?ˆ¡JZ¤:wOš jË¥‚©Ðmµkˆ¿nŽ´I” JmžG~‡J‹‹9£œVÇä^¦F‹”^¼¨x˜ðÆ{‘}ƒ˜Tw|k‰©€•¨pŒ˜W‡±f‹”W‹»S€žYЦN‹›T»¼dµÀ`³e Ðy—»b‚°]©³s‚¿}zŽHƒ›Cƒ«Hz›@|–CŽ˜`—YÅŠ¨x~œMaŒB¢j‰¨nw¢a½ÙŠ­S}©Yïôušèvåÿ—­æz¿éR|‘@·Ñb¯Ï[„£Wz˜I|T…©p—­mªÕi‹³Xš¸^s“rz£bš¬‘ŠÐƒr®Mx˜BqŒb„¹bc•Ev—\}¯K~ L{¯elŽb{ŽeЬsh›`‡ŸR”¯bk‹Ay¢Pq‘b•ªfnw^q‰W}h °]°ËU£·ŠÀ®…º­nœ›¥|ž·Ut¢OŠªQl’ul¥l£^«Ä}޾’³py¢lƒ¬q”²^€­tЏ[Œ¥SV|/\u@i|BfŽP}©n¬f–ÆgÖóZ€£H…¡>Qp<cŠBd‹@iƒ:RxFxœX•NTxVËݨÄÑey’`k†Uv”Ex›^’®†¡ÈzžCZQW}@bYƒ¢Zz–e“ºa²Ég„µOwšYs•La‡K`…Noœ\r–nªf}¥dm•hz—]q†TzŸk•ªKx“C^ƒVt›cx“Z†§dˆ£EkˆIrQq–_ž³l€Ÿ]yžNfm«q‡­n¤ˆŸºj¤EnƒElMq’b¥¹g‹®a†Jm‘Wo›^œhr•cŽT‚›NwV{—jާ\~ g„˜h†¦av‰P[gSk|Wg‡qgr~®n‡§e€œ`—\™l»o Á_ž´KZz@iuL_ˆUW‚MphMl…@n|UyT„•^t”]ba`~\uhB}v;l’H\€S^hK]gB^rIcuE_‚D^tQczNwpGwtC‹vNuW}wQJ„†Hƒ†Ijœdb‚i^vDZw>JwIE_8]]$rd$mŠ8\ŠKgx]yC~ŒKw«]™mu‘_aU€|L”Ž=l¨q|„gc9N{N_\Fyn.cG`yIt~[†ƒWs€^]ŠYkeDkb+Zo>Qi?Oc=w^?ªŒP޶rˆ©z‚›[•Wp›k†c„©dR±vRgOOp;wg;d7_€>w=€›4n™b‰G¤R}®[œ•l­¿–›Ò›œ£v…³^£cz‘JŒžZ§¤S[×rI€tjY0—|5‹¹[_³‹²mP¶¼axÖ^qficzDgVm€d€H{¥Nn–WfžJxƒ)ˆ<~¬mr—u€i¼—HgÌŒ€l\§–;dÏO‡oC[›Ng}S|{Bc¤‚–~U|±Še¢ßh©¡i—§y°ª[‚Íe–[_ˆF¿x0ÿÌPÇ÷yÞ¹p¨ñ~¾Åk»m„oo¨‚¡Šv½žZpµ¥…~EÆ‹eÅ~X‚dvk<Ž^’¢NÓÍkˆì‘g¤`˜™S›°dy¹pošEu‹K¯¶[‘ßmÁwx°R®¢xtœ^•‘7€–t{’F`|W†‚9É€e´úÍ¥Õg·ª@¨©f°{JŠ«‚´Rs«mœE¶±]ƒ–\•ˆHŽŒY†‰a¨C³X¬œ±Œ—™mŠIb‚N«>³T¤¸]x¦[n™d€¦Už¨ep¦P‹Šbf¦R¤nz™~uŸ=·˜XX Wit‰”fe Ýƒ˜c¡»…¢ß·³Xq;•=‡©Hr R“¤G{»T… Wwtl†“o¨¤Nx²iŒ¬L‚¥Yv”o‰¡B|›Jv|`rY¥ˆd›š>d§8‡”:²™Lvã×´†OÀÂ…¢¶gw>eb^Aer2ˆ9ÿÓ…ÿÿgÑåe¿æ]©ìrsÀR”ž`}±eTyDu‚<ÿˆSl¹vpT}‹Lƒ˜;j†ËÄ“»ê¤w¢W€žƒ…¶gˆ¸mþáx˜Õy†”£FšÍqy¯[|›SФJlZ˜Ž… ¼‡™”Rw¤fv•R|²?Š–R…¬R‰§_q”Nn˜M]‚6WzCjqO“|ÒØl‹¾eƒžhwŽd–±hÀÖZRLYI<qwH®³Ê®¾t›¡[Ê銔Òbz P–Q™•Gs›XqvM„‘[‰p›¯R}¦Q|¡QvžVŠ©^šaœ¬‹“²|}Äg‰›{ Èrj¶tœxoLÚÃwˆ»Ar‹R€—TiHy¡V–žmi¨V_~F]{2„¡e‰Yf{E©¾¨ª^–Òj‘ĽSŠd_|‹¿ÉŽÌìËÂØ©¿ý¸ÃæÍÞÿ]f‚T“ªWˆ k}šl™Èw€ªt‹ÂqŽ dy¨K­”™Çzi—Tu¦Rc{U–¾[i’Fr–a–«h”Ânm‡Fw–U°Y©rk”MŒ¦j¢¹kdŽGmŒCk’V‡­Yr™Od;}e´Ì‘ƒ£šËÕ£džo‘³L°È‹Áõ¨Ã晉¹a»Òj’¿b€ªk±s†ªlƒªdŠª`|–W|£^r•WXuVjLe‚5a€@oŽS”ÀUcŽ\ž¸f‡²uгyfŠRdOc‡=s„Ur‹F[y9sŽN–¶Ya}@bƒH„ †¦µcw™TƒŸ_®½_o™bs“j’«“ª7jŠ?W…=pPwžQ‘¶itšj~¢l›½Zc‘Wl•Eb‡@`”J|§hª^£c‡·bhWn”Wu›QiŒ[ƒ£_p‰Ic~Ku”Wv—b†{†žM]vBf…Sdh~Ÿ\n”`z›U]ƒbf‘dh—ci•y™cyšUmŠIn\…¦‚‘°nrž~Ž´_v•Up^uŒ]‰ªa…šgžÀSsŠSq˜ZwŒ[t‚]‚•aФNVn;MeNsˆWiˆcsšx¬ÒŠ’«pš¯h•¯eŒŸm}Ÿuªw…±^Nt=m]Jj€Ap‹[„Og˜LT…[VoMokJˆƒNsš[nƒ]dpDcsEtzE]ˆZWmReb:no9VuDSo@YaCTm>kn:rm5|nEz–P—^{O] dvtYkƒVh[ytDp‹?V‘Sej>_‚0jvA[†LLPUfIhe9ƒtAuœc‹u›c€¦f‹“gˆ–N€ m…—ly¦Phœ^^„Cnp;\‘G[rH‡vTšL¤“Zvµek˜d…rDŠM[™OauPpr8‚…Xp‘\kŒuˆg¨UuŸh}˜W‡ R¨okZh|Oj:h…WxFx–TfœP\jc†WN”\^lVŽyD–»b’Å™—¤|¥Ïzƒ×wz£ko`“ŸTRÌpotabt#x=–ªmsÁ‚xXœU‡µˆg ~vy=_8pQ³“BÍ`£u¬dlÂgw”Cp=R‰gwqd†“AžŸf|¶mŒŒQœ N”°n»šXnÃbŒyRYšE†hQ«¢Dg›ŠY|P_tB“{e¤Y†›|…§]s`s—8Ië‹Gè¦M¶[ªµ”§Ã¡¼“ …v”j{nEdwO“|ZŒœRšz>Òªu–ìŽô§D‚䎟Ÿy¾xw®„‹”Xi†K‹{?‹»qh¬n~|J´›7¥â‚ÀÙr“Ï”©½[r»Zy‰\ˆ˜Oº£Q¼fnIw“Wˆo—™wâ¦v€Òl¸~XOÍœ“d;¯§‘ˆ†F±•CuWatPg}8²‡A¥©qP¨UrBi”gyP‘£T‘›LºÃu…·yŒˆ\†P\Ž@²zA‚鎉™©€¦JfRr‹F‰•oƒµg‘¯wo®\†„?\˜W—~CzÄy€Œd›Çp°¹fyÆdRŠY~}g–ŒR™¶x”¹m‰ÞNt|K•¯_¦˜[f‘shªZu…X|Dƒ¢O¿¡nuãg“Tj†Bª^‡°…‘Eš’4’ÀЉŒOǾ‹ÏŒƒ°Jiu^€}7v{@É}žªÑ¶‘¢þº¹{—“zhº…p~TŽ}LŒ8†Œ?Ÿ—T°„¢¿B©¯>—ã€q­Uæä¨÷¾ÁY‹›L…“Z±”Œ´­‚§zƒ€K¢¼oœÊic“”«Sªq¨7—»d„œ~•[Œ’i}²‚É—…®er°\ž–Mf“Oj‹?m…?„‘D¸½O~ÚTúÛ”˜¾z”ÃU‹ªX’ŒR¤«uŽ™O‡¬4–ŸKžÑzÜÒ˜²Þ^޵«²¿¬ë]¨W”¯T˜³`yªH¦Éd†ÆBÁÓ‹¡ÊVZ‹5›R‡Z±¸w¡Þ`žÁvŸå’r¤`£®{šÌ[‚ S‹­i©ŸjÉl‘—_š›M„¬JsœOh§^‡¯dOu6e‹M‡™X™¸a_‘8”ŸŠš©}›Ú`q¹u›ºZФ@x«iÏØ²¢¸|ëÿ¶Äü­ ÔžŸ¼`yªr“dfktœel‘k}¡lrsh}«kq¨puŸ]‡ª^…žU“É]ƒ§nŠŸSÄÐX‡»•„Îco›Gh€at`˜¹pižGft¨Äsˆ@z…K}¡Tz¥rh˜@gŒU®b€Žkg”Pyˆ|†´g’Çt™³_ˆ©n“±Œ½•mSu¦€þÿ«ÝÿeœºBO~E~˜Ll™c„¤XŽ¥Mt–CaŠ@j‘Tt–N„¨Kvžrr•geŠWp”WxŸTx£_x›X\}MkEiŒGj•>oƒBiZnœQWy4j’Mp—Uu“]˜·Y‰µp‹ªT{›Sq…Pw–_\{5kŠJ\„Gp‰Iu [йe¤T‘µj“½Tr”Lb†G€¤ežÄi‹½u­]p•a}£dh’C\‹Y…¦RnY}™Pg†@e€Xx‹]Ÿb’œbp<^zCg†G^†VqLi‡TlŽMg‰NjRe…Nch¬d‘¨ZhKW†Ujœm‰­bs¡o¥\qJb„NwžoÇp‘ªjºaާi Òt ½\~•Z Ëd¢¾[’ªJ„žbž§Tl†]}œ{—À”²}™Â{¶Êj†©Ut•_t“au‘X<t<aSCff6ZO^€X_QMƒY8hGMS2‚c2`ŠH`bQqMKl?\\8ShDPdJ`Y:`o3SwERfDak9\t=evDcv5mt9v–M£Š^z—Kh™u‡xZ‡‰Do—`|„Y}›Rm™ce„Tg‚OepP^„EHyTU`@Ze1oh4n‡S}†bm˜Z[ro{iwŒ\ˆ˜_Š ]›¤\аh‚§h‚‰QY˜Qs}OŠŒA…¦`“‡`“°pq³ƒŽzY’£[w±v|‹}t†D]xhnrB“‹\e«Y~ŠZ©†X²¿d€Ão¤’e‰¹hh¡vj‚Kk‡L‰ƒDh›RŒŠX~­T‡«FM°lbfLY…6nŒH†ŒVvœVx£rPžhhrZs‹\‰’^~«Wl”Zc‘1h€LXƒLqvb”\™¦bq­teŠdVvIrl;\L™{@ŒÁh“«†¤Ã]„©x¤XZ€@`uVnp@h‡6•ˆPY²gk}_b‡It†y“W£­…‚mn€HçnHÊ8x“¬^yA`tA°}*¤~Ì¥Sžñn•mz’LcŒiš~TsªUÚjDÅZf³f¤€T{®[€ŒE”…Z ŠD­¥MÅÑj¹Ïo ¸f¨ŠzžÔu]¤±qG§¼x£³‰¤É“»ož±Ms¥e¯‘Y‹×\«¢[™äŒ€–n´¯„“É…•œo©N‡¨C¨²[°Î‹‘Š^f9’‰/ƾS´_I~}rc"‚SŠ˜K–˜FqZn…J^•K[j2T7…+N™io\­°F£¿Y‘EœKš°H¶Ö—}ѧj‡b¦H—º £O™´nˆ˜LgwZ¨GkµK}‹C”pd”vƒ jf›=g…[p¡3‚†j|ÂN€¸j­ªlÝ»k˜\~†3~b¤šZzÉrT~^f8ÔÒxâ~‹Éh U—ÄQ‚»Y†¡BiˆHoŒiš[V’>op?||C¢¯dŸ¥k³W¹h±šorxw›—m’]–‰R«ÊU—År­Ísf½cu©…¬¨k¼¾F̰iÿŽNÿÿ_ÿë…|¬nicއ8€­r–’p–ºdc™dÆ}¹†{¦Vl›D}¨T‹‹_¤\a’AˆšGg”W—¨pÔQt’k|¨lnÌÂ[€b[¥k£”X„¸O‰‘O«i}»dh©@‘“PhŽEtœVž›A—À^šÀd¦·”˜Œ¬Ñm©År±Æw¬Úˆ¡ÒŽx¤_¥»i—Äq Ù|ªÆs‚¡q|µC‡Ÿ^‰’od“Mš†[o«ti‡]k^t©g•¸¦¾±˜†¢?ˆ­TžÆm…¢o ¾zŸe²©¥‹¨I{¨ˆ·t€¦]fŠXušx€ [wŽP…{gPey?^|=TyE…5p‚Z‰V€«ut¥T‡že’·b¢Æ†ªjz‚j”¹¶Ÿ¨ãÉ̘§Å¥§Ì~™hžÈdu£e Èiˆ¤U~wf’Gf•7csGVzcq›Nu’nŸ¤l½¹eÿÿ®ÿÿÝÿÿÿÿÿ~rc T…”R°ØW‘¯b^~>m†Tn˜aX6b€KbˆInˆm]†BGqARtIi’IkˆRˆ—cº¾{d…k‚•uq–X€–[‘¿kŽ·Jm›f¤»Ãªé‘±k|§=•¯K‡¡T–¨\“³cŽ¢\ƒ¡M}I„§dl\g†HYƒ:c‚AZIsœYq“dtŸ[\wMWv=^y\o‘Fw“L‰¬Zk~G|’L`ŽS‚¥f‘´^†²m¤¹Oƒœd°LŽžaƒžDvŠ:]w6gˆRjŽU}¡iš«dtš]g•uw¢O^zGbŠM¥mžÎx›Éuw›Nj‹Ns˜Pv¨Ux›_nbw¢\|ŸX‚ŸOeˆM]|Q}£p„©k‡¤I`~JmˆCsŒPpŽLg„CXx@i’U}§Uv”N´hœÀo~©Wp‹Je€Mz®f…­]j“_o›YgŒS~”Rnx“»ŒµÓ_w˜\‚±€‘¼‹²Ëq§»k Äp˜½k¯j„´w{–Uƒ‰Zšk†§hmŒoŒ³—²În™°\€šWy˜a‡¤SCmDI[ESX1GrAGfMC[?Md<Ta;\d0af&dx=]ybTlOOf=L[2Ja:RZ4af1\v9PxHWgEZp4bkA~pBj‚;bHz{NŠO|‘Pvnt€\‚SjŒ^l„jŒƒUq[X‹m]lbffDe‚KR„UciHZp3nl9rC[PZoPRuUXj@vy1“‹@›ŸZžµg ¸sœ¼yŒ¡on¤p–…\z¯JŒyŒ“e„ªn±€Ž–m£l‘˜uq©†i‚R`|[bvC’€G{¦V{•jœ„C²›`~Í‘™}‘¬Xt¼ƒt…`p†Zt…Pc“O…}V“¯GƒÁc_ªŠj|LaAŒ~Jx©E_–\bu[Wt;{oDuv5nM_“HryQƒ–?Nœ[]r:mr)l“OŽV…™ZІW§?„®ay¤K€—R‚£Jf¡wuL’ƒu\œˆc¢¸d³`ˆ®RlžPWŠCtz2rˆ>~†Lœ‘G¥¨tΡ‰žÊgÚ¢M’ÈZÀ„häL®³T‚ŸP¦ŽBÕµ]¾ëªx¡‡b˜AU„ItfQ“N—b:…ªN[ši§‚^”ºMs²p’‰`Í…RÓôv›ý¶Ç‡‡îû™’ÿ£±zªÄsÁÐO§é´ÇoŠÕyq³u—ŒpvàN‰£Uz¥„—©`®³ƒá™q¢X‹mf—`qo/ƒš=˜°z®»ŽˆÃu¤E€‡NÂÀg¥Ó‰cµWZj3„rBÚ¡cŒÒ|ƒtq˜[€zF]Ž.]t8Rx&VrIf^?w®R†p–d€£hužpr±U~–p[}=pe:‚`rˆI¦xJ_µ`^kL€zHtnz„:d‰?f‚F‘­Pd¨[mz?~—N‰A‚Ls®uy—o¥£L¥QhžXY‹=Yp¤\g”9r“@²¦esÄŸ`ŒX®±`blt{Vg˜YfˆBtEz¢Ajj2ih/‰„Q•§K¹¬e¿”?ª¾u—–a‹¯tš°^²E ´h„¦}ƒyE­ÿg]|GŸ‹NÿÍYÿùŠÿÿÄÿÊzÿÿôÇÎÃÿÿØŠÎm“ÿ…†Ù¤ÔIo±ndžAu“nr“sfZ]@qelJŠ­f†œ\ޝet«h“«€„†U¿}®—lÌ_^ˆ5x3‘¨D•è‚Rl7Ž[‚Âdrœ_uµuitDy@|ŒP¡•\ªÙ€£d©¥T€°|tŸiŸx¥Ê„œ²t‡Ëc¯Á[j¯{“ar¯qv§Vn–\±T›«cžUw„Lj‘=y†[€œOm•qj­;œ¯v„·e†¡S‰¤d€¼yÅz~¥]š³ˆ‘Ô‰­`¯epœ_•‡P†šQš¸U‹´F—ÀX€¡[t©;d˜Fe‚7[hLrD€ƒXžµa“Ÿj²Ñyœkƒ³r~”¶ä~m¡ar[x£rV~Z”®`PpZtz ‚‰Áo~ŽnŠ­{r˜Yvg‹·Fg€BX„J~¯H‘Nh”PlšR`„Wÿÿõÿÿÿÿÿÿÿÿÿ¢YXn[f}ar£c¬Ðtr•=q¡Oc}>[p<XˆDXq@gN†§?iŽ.Vx>|®GxˆZx•Ey›neŠOt”LcTxŒFv˜l«p…¬d»Š‘ªg³Ùex c£¯…¤¥\Š¢fh}In_Œ¤gi‹Xp‰Mi‘Rf“C\‚:Wu<yŒRd†L]„[u›FZ‚=Mh<\|R¢·yc“Y| RXyI_‰>iQ¡Åzz±]ˆ­…ޫбÄgˆ¨oŸ`Ž£Fk‡8Oz?e‡To‡V¢²frŽIe…I{ GS|Hg‚Gh‘d‘¸h|­gl e|™B\}Kq—X‚´Tp‘Zj˜d Ìg˜¼a¸]€ B]‚L|n‡¤b`†IaŠT£Yt’KfVbHfƒBw™a¤e{™dŽ´nyœXcˆWh“Sf‹Oh“V[„OZxPsRaŠ\}¦]–¹vº—¢Êv‹°a{’fy”v”ªz‹²u—½j’¢jˆžXi†[tŽ_pdš²b•¨\™¬r¥´y¡¿x’§c‘¡Uƒ–dˆ©jWb<FiAOh:Le8Ud@Gi3Lb7`f5tp0sˆB_†W^qXQlF^h?Yn<bgEdt:Zt4QrMPfARc=[p6gjAŒwG‚Gy¤a}]™…PXwf`„_[w]\jGdoa„oIe”VX‚oTfWV].PnD\qMhsBol@Žo<g§Nm‚[uzHPCmlLi}-z}BŽ…[ŸŸh¡¶w~ÂŒ‡js–se”k^Oy}l–žRˆ¶wk±ƒ†‰k†ž]¢¥o…½t}“hs™ZqPˆMš’L§¥m‰¬ctždh“zŠ…wŽ¥[m®{W€pYgJin=`€B‚D{­Ešœqv²jw‰Yy–Ui”ZfŽUt…[m‘NW€@rrU¥ŒA¬´]Ép˜®cªÅS‡Óhг^¤¦KnÂqW~]‚;™¥W³¸d¦Ôƒm¶~„Y{¡RL“eqcKŽ>”QÙ•XÍç}Ø£¯r§sGsOmf1x‡>PŠTtn?­„\ÿ¤f£ï”£¡xz»Š¡YŒ™n´Šd‚Y°›Ko²`{†hœ‚x’¬Tu¡@Š|<„~8~ŽDÒ‡EÓù¹u¤œz•Q‘¢]…‚q²¬O˜×£ƒÓÐY|n„|SQš½PcY‰l‘¶‚|¯«–YaÚ˜‚€X”Oo©QqžT—F\š:tyP’es¯cMSna5¼‘3˜Ëw„Èk“Ÿ`—«u¢i«Ò|WÆPf†Q{‡p^?|}I’µJÀÏѳ׌à†ÁšH§­zpÊc¡‹3„¨Zx4j}F‚H’ÇY“žX•ªA[©c€Pv×E}u<Ê•G–ÿ£¤Fy©ozšH}œP™€|Áeis5¥¶Bˆ·w{˜Nb´[gtG‹IpŸXޤM†›4s×e¥HwLZ€4UxKq‰jž/º¯;rÑuu™ekXÚ­ƒk¯]lŸ6m~AžTvÌ\pš__~9ju5µ“b‡’i‡[‰ŠG—²…• TpšSœKˆxx£Rf]O…A}¯_”kÙ‹aªÿ³³ÿ­ÿã¹Ø¼}θeqƒ\…“¦xh{‡[—aŠÂŽP‹]U_K`o?h§GbŽFct<ºHp˜PX²i”†G‹Èx P—TÈÁceÕ‚e¦Vmqr‰E»¥<I™šlÉ”;§ÿyŒŸ’ŠÒV°ÅojÄjŠ9ˆS¨œbˆæ|›´]®¦[³ý•Ïi›ªI£“mš²hÑÒb¯¶š|Æ_j‘U®Û[”©Rwž?q®Jwi]oŸY~…Lq£Cu¬Tl¥qy•Kd—Ouˆgx¨cy±gz³Y’¸_°UŠÅnªyJvS^ƒ]‚¥|™´e€®a™¾~•¾q~£lo³p„š`q‹W~I§Õor“HƒJ€zM‘t X{¥^Ÿ®g€§[p‹_lsgˆD¹¿m¾Vr±Tb£d•¸I‰T“Àfjšcs”Z‡˜pc‹Al’XkŽ`‡£i®ÅX…©nh¢Y‚¯N²DpŠYéí¥xƒë¿ÝÿŒ›Ÿw“Z]z5sFn—WŠºz¢®U}¨Kc‹?\‚4eˆ8fyEWt>qmt˜X~¡Go™Fš–J˜ \š³Iƒ”Y{¤F}‡Yˆ™SkG{«czm‡gŠ—cŒ¥l‰¤R¨[ލZ¢²e”¹Jl…Yo‰R|VpžQ†›d¸Äy¸\jŠE^{YqŒLVwJl…WmŠA^€4m€Y¾Äsi‹daƒ:`wS‘­TYU”±aޏttœY|•|¦wtœ[‚žWn‘Bj‹N®¶T}•JYrK_NbŠBaYƒ£b~“I€¤Ln—h”´t…¢VfŽWv™LY‚Eyk‘ÀVl›Mjd}¢t‘¼„ªÎ}†°La‚Msc…™Ri‰Jyd ¥eŒ¤TsI\…PiŠ[h„Um‰Uq\mœP~™HY†E]„Tn’UhFWwGj†Fl‰Gn‰X{žd´j€¤fu˜_|¯_‡–Po“a‘¡h‰Ÿr“°i~…XrƒKi{Nk’Xy“f‡Ÿf~šf™oŒ«tz˜c}šc•§d{‘f}›j\^2Tf;WhI`jEhvDXzD[zGhp@pƒBnJiŒ`Xu^XoIaoHgˆ:kLRƒGKkNRhKLa:Qb;bg8jt@ˆ{HŽ˜P‹©ds¯q‰ŠZž‹Y…§g„gq{X_q@p<…’Ni–^sybgrHRg?ShF[k=]l>h?¹kA~Âh—›››L]½cˆ{]x’4‡Zz§Qk]€ƒbXn`mXmgOX‚RziG€†= ›Pµ^~¥z€˜h†›^§©wƒÀgˆxŠ“^•¥K`¨Uh‡bŒ…\w¥el¤zbŒkWxMwvJd‚]r…pwx?}†AjCzŒK{—LŒ—\c§fi€V~ˆLŠ•]£Tw¢[ˆ‘^ySt“P¦‹7—ȹz›º„zÉy‡¦q‰®~‰¸`X’qVn\nj*x„<—bÂáizÕ³½ŽQ—Ùmœ—lôQ©¿W«n–ƒE~§l¢š‹y¬o¢k€•Ts–DQ…>B|6hl&±|(׺\ŒÊ’–k“½W†}@\†T€mQ³H¤ÝUr ¶zGÄÈT–Èw¤‡„ƒ}=Yn‘m†‰QlÁtmx’T„I†­O|°b‰˜±u†©„C¤=a`TXr5ig8zyN£mv¬kc”sp{J‡>T…Ozp6o¨Kjbw<uŸOŒ•S®;px1š8•©|‘¢{©hn¢\hKwxV|”|{Oª‚a–®v‰«CŸ¢U˜´…º¿wÆ¡œ¹^ÝËs°¾†r«fžtRvÆdŒ\’­F”Ÿs»pt‰w“xRöÒFúÿ~¦ÿ|h¥Wl…„…ªcާU|ªV‡Q¥ÎGÕÅZkªJLmelh9zŠ`—®pu•F„ŸV‚‹J‹¾lO‘KeaA‡ŠF¿ÃJTƒ=lm7e0]…6osI‡“\oH“¡Až¥T“ vq¶„‰¢psCPŠP|=i¢5g…F–I™œTx|H§Ž?‹ŒL¥¢g¢Á€Òow™?azOQ}2Zr:ˆœOiŽS`m>ir¼j|zƒ•_bwNpnM§b•逈Qg¶Sd}J{ŠeR3†Y*|›)§éTZ…YW‡9ttL„’6†¬]ŒªV¥Y£åwñÿ®ÿÿ£á{šÁwp§Rp¡>}œ]s‰Nb¦qy‡dr¯wƒ¯P¦³~£È›‘©K„›UÉÞ“’J§œz¥Ì^v^•‹‡º{‹¿{¤¶Œ¯ÿ…p›…ƒ˜‚pˆ]ƒC̵…K}mi”d‰¸X‹ÈJƒ‚Kp—Ew“Ej’Fv‚Gf£TŒeƒPr•L¦¿m¬Ú…lœSr Y‰¹XH‰2}‹Em˜ap^xoVgP{‡PxŒf„ËbyŠM¯Ö»vžHª¦ÅÊx~ªdާV¸ÇUš¥P‡”^vœRv•]… Haz<aŠ=‡¢{r”\Š•S_s8œž~‰Œ°u‰³P¦e~²TZ;q’Km›[z°g…¬‚sb…œR¡ÄYœÁ`a‡N¥¢Ÿ¿é[dxT‚Ÿb˜©cc€DbtRo˜[v¦m‘Q•T‹·QsŽBj”Cn<šJr“CqšS‡¤Wp Q¼ÅLkZ·lˆªW¡Ol‹^}“P_‚@_Žek‹N`…Zv‹X|™e{™P°Ð„¡op“ak”Sk‡EhFs’`f”[ZyvWuƒXsih~Vd‚CRs;Os<`yhzž?Nn:r€\Š‘R‡°XSw;X|e~¢N`ƒEf’KqZPv^«º\®u†¯X‚§W]„Sms¡ÅŠ™¿@V>Vx:nŒS€ŸTa|]_ƒ[fŒQl’\sœe]‚Mn‘Yvœ^qVv¡wy¦Uq£VpŽNj^pŸtx¥p‚¢Nd‰On–cˆ£O\‡Rn‘`o’_‰§l—V~¡QŠPrŠY‚™Nl…KlQ}ŽGU€Pm‘K]yF\@]{Ol‹ElIh|Oj‘VmSr˜TsTv[v‘QmŠ]|œ^“m‚œ^‚’Jh{P†ŽQp`~Ÿ^—Z„iŠšbp‰Uc€Ua†[}•Pl‘[y–]M]1UR0Oc<WbC`rEm}MR‰T[nOdwDhzNe{VYx^TvMcfHbx@i‹GGˆMChN`U?Pt.IaAg[;ik6esIk~R„ˆ]o©f’n”Rs®gy€}|€QLЦPi£fgsgmQ„n>qyO]xPboCtk=Šn<¬p>ˆªXu¡–}Zr¡ns…eŠ‹J—šao¾qJ‰kZ`Pyf4f…Jba>^r9s@zœF”•g…µcg£yfƒmw~SŽX…žk¸•l› cŠª^n²tpbd‚BQ‹R|hR[›PQ|Slm;~8^›SŠwE˜¤X°eƒ•V€œj}™W•˜eƒªWŒ®Kt¯nd‹^tƒh—–T€²Wƒ™rŸ–F¯Ï|–Ìv„¾|œ¥f³°h‰¼_ ªYzÅpcS‰x4Ö¨:Ýó^‚ù¤Š¶Ñ§V€åžœ–¨Ë»Xå³Ä±g„ÎhpšjvF‹}Q™¤Vƒ°i—¡re¥B‡€9hE—ƒ*Ò—v³åº™´r©c\–^ju7¢‹Cªºn޵‚–™ZפaŸìµ•¢y‡¢Y§‚N©¢yÄÉ^ð‡¸¿IŸ¨oǧ;¢êZ|¦__pCx‰H‹¶KAnXS#nv0–…7•µ_t†SXˆGmoCa–NB‰·bc”Xg€]X…gvh;¶·€½Qy£bŒ¦Ww]–—]}¼Q®hj˜7ºž>ˆè]už]‡eˆ¸I¤ˆ¥¸ƒt™Zg“tcu€º¢@Ý©‰Öÿ‘oån‡g…ââP•먶^}˜Lo‹VM„Dc€EÏ®4æò€ÿÿåªÿØ¥‰ÉËbÎõp¦Òs°¹jÿÿióÿÄâÿ†eË«t‰2a,r„-eŠSJtHr^Tk€DpR|tU{·d…{AµÄp‰Ó‚f«XTw>_y,š…B_­jRf3wiQ—Ãg¤¥hº·yZ}Rœšet gwˆC‰}MŽ›Nž˜jQt\ytM©¥U¼¿`¤´mx²]ceIµ’6™Sa†*bm.šžWd¨€ƒ—:Y DŽt=‰Œm¨RîÙ²‹çX~¼‚Dr*\x^hªH|[~µ\t~?qu~‚¶–Qn8§5z•LÝ—X½Ë^¾Õ†Óÿ©Þ£¬µ×ÿäÅæÐuÀll•V‡¹tedˆ–7pB‹B¡¸Q¦·n™jˆâ €‡eqzf©Š™‡…D¢X•Áƒ”QÍû…Š»D®áw—Ö…Ô’š¶Xg~?j˜8…=d±P§Ár‹ÁP¡ÆdªˆKÏÙvºîX¹ÛX|Þo’¬Dƒ±R™Áe›²S‘ÑMÈbª’†ÍÿĬÜoo°OfadZ’=œŽ{„¹tgŽ5™±`²áKr…F’¶T€«nxšM‡©R‡­mžª‹¨{z‰[d^[ŸŽœ®q ¼{¥Ïqcœ@o¡cyš^x”Bs’^ SY†OŽžKš`pvmz m±ùrr—~‡¥tn‘Bƒ£V†›Z`ŒX|¯ZtR˜£^v’y›´mY„Hˆ„sœ¯”d}@ƒ¶Îw€µKš¯cx§\yŠ=d{Q‡›ih‹bc‰Q\„JŠžarNiˆIeƒMd•Esˆk‘ž`|[ ¹sŒ²d†§\~œRsœQ|˜E…¡OgƒLcGrŽY€‘P_Ll~Xe[º^c‚EdŽ[{®Y„«cd†Mb‚3Ku1VtEd|>YsAnƒCw—7]|Yx˜<S{8¢¥h“±m…°J{Ÿ:ayNYv@Ry<aPJq;c€d„ v‘´–Á_~žfiLX[†¹¶½Ùƒw•?\}KZY[vCTv/Ei=MtF\zRZAV€Ga‚HQyMMmScŠYn™a”¹ly§TV„EkŽQa‡^}¨Lh‘Kb†T_…@SxU™XoƒW…˜kz’cx—Yt’OuŸl¢¿d¡EczQrŠGhTz›Voy>a‚CZVlŽFw—Okƒ=e‡LawLfXg…X€ªV|›FU€Ks•Go˜`|•e‰£W…¢_Ž®WlŒYi•_…™Xx”p›²_qNp”Ha€\o…Rm‹aƒ\S`<S[8C`9O[=`[4`uCGtLRgN[c<an?SxIPiMKlK`aCnv6r‚L`”TXƒYztHt‰=VvQngAzu0d†Ba‰Ss|Cn…Cf†ef†SuŠa„za…uF£•Jl¶YO‰i[Ufa7wt=§nC–‚IÀzQʇF׃VõyYܧ`‡²—p—jc€epYƒQ€¡V]ªuIzbXZDam+jp5q}EtŽB“E{”Rk˜reŒi^‡bfw]j{BmˆG„]l b~_lŠ`l“x‡Nv•UF”Vd^G^†;tsKw…7Š¡Nt±[Œˆ^”Mk®p‰‚f€Ÿsm¨`’a²¯Y¦ÃxŒ¸“±_w›Qv–Oz„P~’`›X£Á{ÂÈ||ꟈŸr££\°É}…Êf“šh‹¢e‘¤TϳN²ô¡^¸©Y^…‚o?ˆ¡s…•oÿ—T–ÿ¯•WzŠzn“piƒV‡y7k“Rp|WU™kXq`rc0R<‰m=± c¤¸“mº†–‡Q–Öc_Ÿ†KtJ¨]Q»ÁO¿Ól†´u«QtÅM“t^h;цMáïf¢ÿ•ÇšrÂbp¡Óœ@Çÿ|¿Ù…‚½Dr¨@b‰U^vGg["`w2§‡Tí‚Á¹º¿@aÀIMr8t%r¨Td‚bLk=ifK<v:JZ#{‚„m’^P”XÄvS²ö\ˆÝƒr¼oTx@yu.–µ“¦¹léH†åfa‹dR8R{<{l-ƒEFŽNEe2¿|b„ÄŸ°<½˜YwåÉnQÀžT\¹z³‡V{À^ÿ¾cíÿéîÿÈ‘ÿÝf”aNrD…tX”»™“vXíõ·ÿÿÿ¡ÿþ—³m‰ÄnM•IdhL\v>Ln0|b_ÕqVqQNƒ:mb7m4¥¤`o¥‡|“Uz{;lÀSu•<†”i‰—De†1³§ms´wk{Ÿ²™LèÓcz¹X™±bk¢^}–?t«€¤U¢«B¼ðkêW½ÌvÆpoq`šYÔ×fÊÿUay9†ŽT€°ia½obeIyŠF¥`\LJ|r~|žuÎu¡z8ÍåDÿÿÿÿ¾ÁÿœgC[m;—“^s°\nYBy³W™ˆ=€™›xu[³oq“¹g±œ¯œÏ­`‰?`nD{ŒEmŒS`…`bj+…¤=­´‡¬ØpsÌIˆ¢zz‚>w‚:€ªqŽ~Ff”LkuV–ÀM¡«—™»dƒ²‹‚¹`еq¼zr²Nu7”žI¿²fµ©ÿÿÈšÇNµäÂÐݱ¾à¸«Ç½[‡©¸wy°W¥©‹Âÿ¥¥Ù¨¸å¼¡v¸¿Á€´tjˆFºÛk¤àUª±y²âih‘Gw­Sz±‡‚¹Ym…`t®S€ÈZ„°h™ÃC¡³e‡¡jƒ™T†¬=„¨TxS˜¥xŒ«wqXl‰J±µY‚kx¦]}ˆCtŠB°ª}Ãtwš[† kÆÿ¸­ÏY¼Ú`•¬nºu°Ë}kRxxb“HgŒm£kn•R]€9b|VcŒcw›9‡^Œ²tw“]¥´€jž:_‡Hv”Oq‚Qt“D†¬cl>jIŽŸN|¡D_‚@dƒJd~Me’;kyS{ jwœ]‚©bˆ•Qq‘Mv˜Uh•KLr:X}9}‘OXr@j…5^H‘¤ž½W”³f|›_[[b‰^t›Fe{;]r@]|=ZDf„QcˆL`Xz¡tœµKSx:eŒue“s|­Il†f…”?n‚CYz1=a:GkJX€`hŽ{ƒ ~…¢v•¡oŸHt”Vc‰ly˜ƒ¦er“W†˜[k{Dt…GVx;axBZn:Um@]u@izBYy@Oo>UwWv–bw›n ^u“K‚QoUj•XgI`…La„8W€Rx›_^{B`}X•X„£gŽ®e•´~¤µdr˜PuR|•Pn‹Pe‡Wq‰Ga…QhKbSj]tŒF^‚@]Mg‰M[ƒh˜¹n†¡Kf”_š±Qw”[y›eƒ¥{•´wžµa•Lj–i‘ _po“ªgŽ«`«ÃJeRk}NeˆjŸe[gBOiAHh8MTBYX/Zp7OeHNiDVZ;Ph6Im=M_?P`<]c?Uo:qfAwŒMq†ds’aw‘VoŽ[jŠX}yEp‹T\WauOnl=mmL‘‚Jj›SddrO”F^ª`KrpnYAme+`†>¨nC¸y:ª{YotXXd[¥DKªUaˆƒTloBnoS]J^t?kwLU“^TpRup@…~2 –F§ªU†Æj^¼mX|chqWƒVx†Rs€QwnEn‹Trcl’[do[nILvRxb>m‘SXqjkKu‚8~‘NÃ’G‘Ísˆ•rpŒ`^ŠUkyRpHŽWe°]r…W•“G•¦l³¦xl¦wm‚Ua’S¦x;˜¼Z²°l¶¹^ªÔ…l׎‡„­J»Çn䘤±s‚¼ax¢^žMlãlRs†–X;€ª7‰—h§š_©±c±¤c{šq¥dsÉyw}Q‰’4Š¢RgŸ=mŠG_sOh8YI|}<~ŸAh’Š©›n§Ú‹™¸–qU«Hˆ|*ͬQšð¿¡¿]Â|i‹càŸAÛð\rïd§sˆ½›Ÿ® n·nŒ‘9†µIg¦„utn’Ub†Kt†9q€C‡‹Q´¶DÀÄQÂàsÆçƒ”û©a´²KqWpm l’Aiƒ7lƒ>_7YtG[h$g{$¡”M³Æ„ì¨QíÿÇ€ÿ»“‹it­K{›>YŠKy~[l´u{Y”•K†Æ[‰†Pš¥EXžy]i:Um2º'Òýƒví­–™XàÖˆ­ÿ½U¤„‘‰I‚¢y¢¼f­ÓÕtÌÆztƒb™TYd-|–1Q‡vP'¢‰DØÝÍšÿëb€‹v”@^?]?SuVB`*@R)ˆ‡a|šS[zF±g-yÔj€˜€ƒ°6 M³ƒš›|kÝ?¦ŸO„½€–£t——P¹”©–K›m¡¡‰‰°–y¨Vbš@£IФU™l|‰e‡ÆptÌ“Ãh‚ÂŽ„Ìc†³c“ººˆ¾Ži–_²‹4a©SbAvµ7¡CmžC¦{vmy9®ˆL¡Ðtyžgÿà”ÿÿÿäÿúÜÿ׳»RƒšXe’_ųD «l‚€Ko’“]EYudƒ§VgzK€P´¼qdˆPÌÆypp>‘ cƒ–cy”?‚„j¡¼c…²{~›f—¬O©§_«\ƒ³s©€>v Zqx:œ˜zÜÅ„ŠÛx’§T˜­{v­\›^tµn¬Z‰žT ¶²`¡RXlc]pt¦se{F]Žzp“_ha‚¢c̆€Œq«Á¬ä°psSk‘pd”^…©p~¼D«ÇÆj‡{¯ÚqÂÛ‘{—oÑUh‰?w·SlŠI€»`{©v‡­jŒË¶{€–e’¸—¶ey†_™‘:®Ÿ}k—^¬ÅTx–F¡¶œ‡·{«ªTŸ_x«]~…ju¹dkƒ_›ª€ŸÄ¦šÈ†Š|vŠeqƒIb”Pe†Ne}c]ˆ>y‘J’¢i|“F_w=`yDhyNˆ¬Qcx\d…S}©Jy›eƒ¥ViGxžAs‚Tb†Kƒ“Wi~Gx¤Ev“gsyDhˆF\‚BlŒDi‡CSk8d„Wf€Ps“^zžRs•Vk“VY‰L\yCe‰Av˜VUq4j{Fq•S{—osŽ|š¶v£¦ZdyCc€W]uDZm9hwFVp9`rFfyPcAjŽQeˆc¥»i^{2UzAW{bs”Dlsa[y9B_>Gb'E`+Jb1Gh7[{Zn]…©mr•jKfCLbCi„_e‰P`‚Tz“pXmR`vTh|J\uDa{Mfw7l€FuGl{PyŠ[|ŒMezKd„[d„Xe†TiŠXkˆVp“`{›`¨Zx›^‚§V‰®X‡¢Oc~6[vKr‡gŒ¬l¯v•ªp^yKg‚[mŒjŠLdGuŠRv‘T~œXiƒH\{AV{L]vHo–Ov Jg„Th‹tª¾wœ[—®s{ž\v“Tm‹\o™|“³˜¸g“¬Y‹ª{‘§bŽ™`„ o„¢nœ«Ne€MtKm_`[\qEPf@Qe>[]?Sm4IjCQR;E]5L_6[Z5Kx?ReERT8Rb7G[3LSCSd;oaMo‡]i‡fXŠU_z[neImq?O•\Nv[J`4fZ3Žo;|˜K`’kfwPbz?r€Ta„UdkF‡d.b•>q„U\{=UmMWbH6iATI.Wg#JiHGYFN_KT^?\l?wo=n‹M[ˆbfyJ‚Cl§T¢Šc‹·yXµ˜PraSg:ciCbK»†SŒ—Tbšs\‰]hmTRxV:bG:[9M,ƒ0Q—r~eSŸ™Ež´g·v˜©‡©zŽŸfiŸZWsKPt;YmAIqQk8{‹1}‘Y{ƒEP€qbcCN…C‹q0¾«B¨â–«¯nŠÆ[£ŠdrPc†aËzGŠõŠŠ¬˜Ão®r¤ˆPƒº^OŠsk_>¨}1˜¨k° m”ÖgÖ–jžËm†ŽhmŒ^ƒ]£¨C—Âms¶mi‰Lª{_oÎPwƒHrš7^‰9‚{<’–9ͯƒ|ÆdoŽc‰‡x€¥P_œ{„–yÛ©dÅöš|Öž‡S°ÂxdÇœX‰Voo/e—Hb“Rn‹[€”0t @x”IfœFÞ{SoÄg›¢MkÔrwnheo\hbC_c„V©·oi©d“‚1çœJÇÿ~ŸÃP¡bv`‡yM¢4^¾GhlA§QÁ¯ž–í³·±qxÓ ˜QvÓjd3s}4oˆOš”m}¬rL…Pžc?YµQcg8_€.£–9ÒÓ€rÞÔ]“:¥€Y·È¨Ä§pbœZ—ˆLzÆS„gW[•ricV„u7X¡kVl=`vKP}?sz-œ¤\”Ào¡­p€›G‘rGœœ]cx=—“X\×= ƒ!Š·šˆšV{­>HT^n3š’nïrÍÿ’’Õz¶{£^Ž—U†ÀivŸc¥ŒMŒºlˆ©V‚›RŸbc°2a{JÀ?q¤l•†I‡ÛoŠ•c–®s¦Mž¥@Œ Cz™p ŽK§œg‹}2´î€{ˆt„z7žÔ§­—‘Žíb}‚:’yF¥‹Jƒ²|T‰@·o½ã§¤å³ÒǨ͚·ŠubŸmw~-fpqc—ŒI_vWˆƒO’v=|œgyxFw‘Df¥etƒbš®›\?ŠŠPލ`—›W°—Jª¸kz“VryG…§|“I²Pïʑ¦Mšÿƒn¥?…~\ÚõˆlÅeŒ´[–šT}šc´¯c¬Ø_d•M€­cX£T6O'\jAMdd¤Zdƒ3¶1c‡:˜ÂRa‚?Œµg|”Ur¡]«Ã™Œ³ar—D|«Iz¥Lw¥R€“O„§X¤í u¨~s”Mm koxC›¸všá‡o‹c„©V„¢q‹˜yUpWMl4gOe‹“…fyC¢ºufyT€O¯Õ­šŸs©Ê`ˆ¶\‰µ_‰—c”«^~J“¹U¨^’Ÿo–Âf”·f±[Ì­[ƒ›]¢Vn”Ad{Oz”Er„M™©mzYl‚8kŒ;„¯[—ªe£¿V`Ž<kJq›k‚›kc‰Js”GfzQi…Cf‰Ko•CoF¥SpŽ:lˆGpŠ?jBTs3jw@Tx7azCt–ZnRv™\`†A`…;d|FeˆVtŒQr‚3R|G|–V}šSqŸYx’W€žObvFgx<Tu5Od>y†LSn6]{ImU{™Sh•TgNtƒ_\€BnŒ>WoU€‰Cct@Vr<Om6K\/Wo7Nh3Qn2x›Xy˜nÃê}–ÉKVj8<Q-?XORrBYvLh}RgrKivLdgF€yS‡xQ{‘i†kŒ’`‰d£•yº‘`•„WpvPkjMqO†Ž`‹©c{¤Yhgžj„¢cw¤ps™^{¡Rs¨U“«V~tŸ¼|¡Äw†žF]vDn‚Tiˆm“Kh}LoˆTv|U}™]{•X„™?PqDf€[§Û“äÿoš¾u°Ætªw˜³o¦_s„Lf‹Jh‚OmŒdy–|šË~§Çlƒ¨n’ž_ƒ^]u˜n”£M|”P€†ImNc€JPf6[c8eh8esBLD;[KGE<L\-Yj7Yk9Pt@NiROR8SR7C_:?[8IN0O[-h^<VnM=rQ?_KeH4ih1GŠKLdJRe1Tc.bl3rc:o\m‡Za”L„wJr J_‚QrvAkDW’`[rHnr>X‚:X|?af7gm(S„BXg;\u;g~9V@HoFLdNs_S‘‹S|¢[b¢]‚n]uŽFZ’yVz[Th3Mi:gR2±w8‹K†¨~y«ba“\EpN<Z=^S(c_ ek6[{VsvgtK}eq•‡’“}£Yˆ¨sU lxe\mt<Mq?G]9§\$\‰-ZqkRk:\`Hƒo=R›WX^I‡m3ˆ”xc™rq…YU‘Zlp>oƒK—‡Bµns²›T›jR}:•i4k§Gjzhai@Žn)u—d¼‹e½ä£þÉÑÿ‘Ú£oX„}IÁžBÒêv×¼ˆ©d¹¯ZgÝ¥t{YŸ«\¤º~~±\•K˜p½ÉX—×mɯf‰Ü[ßZ¥ùv£Ý‰@Åt‹Rb¤¿IÃån˜ÙšÆÉ:žë_eÀ˜{ˆ2d›HU|/k`7…oGx—Y}”Zƒp£ÆP²ŸkŸ¨mŠ^…;c8~1Å´h˜è€wŽ^§tFy̬Mrc†lfX™WfXEž…I\³oZ}1jo*v€x|°‰ž¬w’·›™¦ri©z]‚Kzr/nšTw•EVŸmF]QyŒ$s½[h|8t«6¦‰,sÅ‹§}s…Õahžfprjquk[mNƒ„Ww€IiªX~~F€·W_Ž1wf:lnEiw;R‘AH\Da\4|³d¸ªX„ÀrV–OTu6Nu,<t+—_: Î”{™P]|Ou\BØ“j‚ïgz¢W©T¤b¦Ÿpœ”wn®[®ˆ\•Ýou p~}Xš‘;’¦l„¯shŸSVuEazT^r2nUŒ²³g¼[~zX°²O…¸b®¿Áh‚¡S}³h…¤_{Šd™Š?ߦŒ¢Tz‘GµŽÑnú´àÿ›ÙÚ•ÌedžYVs#{Ž&¹¥jÑò­›ÂaX•deÉaYa)c…,Xˆbsx;_¦TZˆD‰xEv…ge{hmOp5h³g\m.i„QKxU‡˜`™L„¸aš~h§¶ ÂtuvfzŠUbs:okPnWw=KXB^Gfy;åäÈ~àŽdz<¤‹uw”C¡¸ƒwœo\Œ®_m¢RLi~HoLx±[l•Bn¢W¨DWo¼Fv`|Up¯_³x~É{s‡MqpNqUsP‚—]ć‘­„}µu“š^y•n~®RKh4U}Xe‰INqBŒL¹Ãd|šHyŠSoŒ4€”7ÔÇN†ªl•›N[l_›·”£³h¨×”ŒŸd¦¢^pD¤¡tŸkv®[ǰdŠ z­ªv°Ðz{·_„³€Êcb~F·±^X€Wv«^k{Ej”el•Nk‰[l€Rž§f}§SŒµis‘P‰¨Q_<a}J¥©YeM{–Hq‹Lv‰[„¤NªS€ši‡¬Ufˆ=PsAbKt–>^„D_‚EsAc}YgŽVf‰Qc…C`tTbˆMmŠKq‘Rk„FgDpŽS~’d~™WŠ­]c>a€Ed‡DUt6g|Aa†T{™LfGlUs—KsŠPf…MwQ„¡Tm‹Dw„S‡¡Rr|Hk‰ISi1]nGmŠAT|9wœR…°s‡¢p|—”cGZl6U\,?P4`iLdvbpoMƒmE•„M§’U«•S‰xR±a{tİ{—ŸwœªŒ©§wƒ^ŠyV|mLnlY€€²½¤ÊÖfzš]j’i|©l޳atŽVv’\~ªŠ¥Àk{¤v¤Œ¹vq@lTwHg‡ZrŠKsŠQx[~’NuS]_€‹AWwPt–}¾ôÌÞÿ¡ÁêÔú…©º}”ºry Om‰W~œN{œPuX~Œk‰¥—»r†›`‚•\|“Il‰\q˜f}¡TsŽLj‹MkˆPo’Uef6_n0_g;]|DUnKRcKJY>Xd2Ru2Uj>Oc9PcH]e>af5Lt?BdCKV6A[/NQ8[]/>xHKTIW[+_u-[wDO{INj;Wn4Yf6q_1v;…Sx¶dw—k}Xi™ke‰XYƒPVpEof?›w5k°Lh‘n~qC|”Cn¡VcwV[w>wx?fŽP]W\rAŽc=“•D†¡o|”p»nUz‚DZˆ_]q]d,h–?ws;vŒE€…EuŽuayªmU„gqj@Š}1f“H†vM‘œD€»ot•`rˆW|}YbOYqEpaVaˆn[t][q<WhHl^?fe0Y9^oU[u7cq@Yy@:y`>N>iLdv>RŠM‘h9‚•Og¡R‚vF]ž]FvF<cRuQAp’?„‡M®¦NeËxUz]~g)rŽQ‡šJ‘˜`б†Ÿ¬†»´x™k¥€X’¹N¦É†Œ¼‘˜¦nŒÁty±–|†Rk‰Mr|D…cŸ“F–®g´¤lÐÒ“¥Ø­£Ãȡӕ_¹‹tvv£]¡œ[ún°Í—‡—šŒ w`£\‚`’®Lˆ›~¤^wˆo˜6¨—V—¾Y¦FʽwÄ»„š¾‚{Ut‚F©–4wÔy’b› ~sÀI¨—8{Í]q¨O…ŒCž„Kÿç9ìÿ¥TÉiJhG^q*a{4c3YyUˆ‚f–k©£Ž}·ˆU_ˆa0u´g§ŸFƒ²_‘§NŠ­IrClœ4iƒWp kPq@[u7LfHVcJRa(D^DyX*m±>RuCYv-P|+zuI^žDc€=…xEObWTp+`d$wœ@Ÿv8[Ðr‚^/]~'«‡(VÊgZ\Sˆ­fw‹l­‡b•ßWpÌ3x……µšTlPp¡X|š@u¥,†•A‡¯=jLmŒ=T'¯a7yžL­£}““BP€9`w6U~4xd(i KuuYg¯E–šk¦õĉ³‹ßÁ¤m¸|ƒ™jiªN¿Š6‘Æ|ªZkqk½»d›ÿŠp•g”‚G”Ÿ¨·¥ox”“ Xk’0]ŒHÒ¶<Àí—Žï†Éº0~¾•FsH_o6x•/[‚I•QX‚9˜ª`²i”‘[¸åbwÓVH{=^o>y‚TV‡Qq’WgŠ:QnJ†yPŠÈoa7²ƒVd?^Š5¡H½“3uŽ5tv4¢•DwžP«Ÿ‚¡õOލJæÕ_‡„LL€E`f9dŠ]kcbƒOe‰8—µiº±w¹Á€ÊXv‹€g‘qŠ˜X–ä–cCz˜Gq¤OjL›¼œÁneˆ;dsBm”T»l¤©i…¤L„…=¡l‡ªMß§ftÂBx 5g•UfŠLˆ‚Ty„x—Lv¦Gsu¢§³„—À„dR{†L—¹b–³chh‡³dš¤|{ªP§°\ÇÍau»f‘•q¦¾fšºw’¬¨™Ì`n¢]œž‡xªTf|Gh‚NY:e‡LxRy™Nbz?ZsAp•cu‹[~¢Q ½m…Em‰@qˆD“–_—°U„¤RwŠNz‘buœdw–YiYušLa…Ahƒ?¡»X”³Zb‚Oy›RxˆEtŠEYy<_{Br‹Igp=^vJq€Hn‚R|œVˆœVuŠ^ƒŠU„œ_VwJSu4WyF`‡E}“IŠ£T–]”°Uc‚D^xYˆŸb‰§W¦cuYjŒZsOn’^‡ Ym’[x[q„<q’mƒ¡j©Ê‹È먬Ìt”»Of€McKTn6Rf1Z[7]nMsuZ¡sT¶‹L¨„V…˜b€˜UªžcɰcرY¢›uÀ£…ÁÍ›°Ér—|o…^’wU´|gÌ“’ôƤþԋ¬e‘¤mœ¸wŒ¯eŒ³f†³e~©£½b‡›bެn–®{‘­UsŠUd}D`yI–awˆUz p³¶`§Kh…QtGn‘W}‘x¦Õ­Å뤱à¬ÇóŸ°Á|вf~Sƒ˜c«b†¢^}“\|Žcz—gnŒX_…Tr‘^{§\“®]Ьp†›PqP›PyUz™f_jA_nB_nJbtFusJg‚DTyI^lJ?{?N\CQ\0Ma9`n<bz9DEMbJD[3VP4\^1`c2Es6WaN\k4rl1r~<]ŒH_wE]r:nd;{z5i‘Ew…Yo”\{šsz˜aW“YMwaOtHSj4ke(ˆƒ0`§^rŠ‚–tNŠ£R…£u€”vj{LczPntO„„W^ŠORxRftGâyQÿŒSÿŒZwdOd†[ffJ‹q9}¡Qn•\r‰\umFmU^pPwpI¦‡a¹¢[¬Ók‡»‰°Šo¦ÄfyΛ”wj›˜Ws®es|TvsD€@“Ft„Y_L_v=_oDef4bo@YmF‹h=«šMÄp|¦qq‡Mnv5ehEˆwQ‹žKšO»e©¡pt©mlxEyr8zŠ8O„A{d\µŸXªÊ‚{¾Ž“†IНC„žb ›Wj¶\ˆyg—€Mp”^•‚Q€¶F} qz‹_‰U¤ŠG¡rb_BBk³Aw†5©\lÄQ^}^„ƒHO§hPgYgm>8xZbc+d†-e9DqDQWÒÌM¤ôt~Ë}©‹^£ÏLd¨o¤˜>Ò±R˜ïx½·pŽÁ¦˜»WÇŽT§²bœ¬~šœeò?Œè“’–z™im‰auˆ[i•^\Žccf8–l?·”IyØs‰™‚µNsH[n+|ƒCR“;LHBŽY5w™j®q>Îð›pîIu6“m<’¶^~²®l©g‹›w®˜­UâÞa¶ÿº|®~4qˆFI€FMP!z†,y†3LvX?a)GS>[Ieƒ](y¹UStF}ŽL~´]`ª4¡€D“³_sÒiuŠ+}„[±|ZÄÛ œÇ]‡DpˆJWo9soCh”u^b?|—8f¸zlŽ/‡ªS˜±T±Ef@rvO‡t;‡†XuŽ2³T Á>’‹ŠŒ­m_ÇZaw)ŒÌEe“4P•Dff-cƒB¤š\f†j´”GW‚X‰{C…²Ÿqœa[—]QjhLs'›tH‰È³} f¹6lŠD]iKeX/™TtuKª^ìÂu¿ÿºÄÒ³–¡T\‘ZTg3[|D‡±2]`,ww^KcDnzCyggxˆ7Z‰f™¢Uk·ZRx1VsAHYDd aVR.eb2˜ jƒ‘lƒuH\@†G”‰F´àŒmÂ@“’Dn›5t—BQŠ=lL.­“’±ŸV~Õh¨aŸÏ‚ÅD`y8c‹Ej„Ldš5gpBÙ¨YáÿÌzºhnMr‘E_t<yŽ\iŸCx™_jGpœ9yªW±Þsƒ«V¨L‘»M¯³_–’t•ˆb‹8s„X”¡`‡Šnv”[†XšµR‹¶w™·h|‡TŸ­tb”Bb}>œ–€{¤\½BY‹[s|g’‡|¤[Šªaq™xˆ¶b|«v‘‰~ ´Y¢¦mЧTx‹j^yr~ƒi^}lt›ZoŠM‚‘QYy7{is”?h‘9}P‰–UŸHhŒDŒ P–»Uc„Rž§ri†JT€H}Ty m•Tn£O–´aj—Iy R®ce„QkOŽ¡]ºÕ…ˆÃz”·d}ViˆFg~My‘Pb~FqCw„czELm<{“MYrUp‰Xq™\y†Qz•`{ LgŒ>D]0\wCUw=†žSxŠg’Ÿ]všPg}ErLs„]Š“Z[{Mr‡Im—Wu—`s—AeŠT|«^„ŸW¡XžTbŒz›·´“É’£³s—·hn‘K† G—ko™G®Å~ÔùlŽˆV¨€d»ŽSy”8aŒ=ЪcÓµríÆˆÿÆjɳc²¯pŰ»‚­À^žh‡’|­™‘£žï³·Þ§°ã°€Ã¯o¨“k•›l©}µÒ„½Ú”½~Íʯj‹ªs¨yŽªVnG’Š\†šdv…[z“˜g‰š[wN‚LŒŒ[yi”½ŠžÔµåœ­Ýš§Ãi|¦aˆ¼i‚žn…ž`bƒY¥q¯Åm¥VdƒGr‘Od[°‰¨Î€¼x“²]yšYwUlŽbŸkcxI_u<etHozOs{GlvQV†QX{RBlCFXACW,[V.}f1w:_‘Lc}VZs?`d<^s7Yu<`sHT{F\f8nj6ty:^€P]qHaiCkmD}?~ˆNm“`m”Wr•\lŒ]T‡^=nVD^<Vf#„m!]™0TˆWby^ku=„L‡ŽdˆŒpvZrŠYƒF…¡ZrŠbwXÕ‘Kÿ›NÿRÿzTTRV{IpV=|~C‚’V˜Ÿ_{˜_izI}xHkœLsjD‘ˆJ™”_s®†U€Šnj]”ŽXŽ©’nŽše—™c¥žu—¦K £e‡ bVŠP\kG\m;E[QKX6YH.ni4„<§ŸK¡Ä‡œ»‡‚¬ƒ\uU`b8±d:ˆ¤J°šq~Î…Ÿ~‘k—†`‡­S€ [xˆZ‰›Rˆ9H¥jroZ’™a‘°U{œonŽY^ƒjŒoJ“‹M„ŒZp¡TxšIN–k™XJt€@Šc…´i¸¢>£ÚkÒÅ€¢ö“Ù³„„÷|˜†k£K\†?WuNMq3S~?ƒc'…„Bnˆ?eƒTk‹Vˆ—Vq¥¨£c ËÔ¼oχx¸QŒ’_ˆ¨`¨ sÐ͇¢çŒÖÌ€›Ö“¡Äy¸·cÊÍQgä°}U‡¨s{«pM“sOnEt{D{Qf‘PxfF‡‘mX?TwNzc,j“@‚r=zŸz[†[{x1Ï©A­ÿ€UÈ¥hdJg”d‚z,m¢h’“<Z Pe6cZy>‘yfoļa‰Oˆƒ[ˆ´jVŸ`M”.X_2N_%?h3GX"PY)om)jz)auD‰W‡²f”ÍnŸs‰¸z†Œ5¬ä˜˜Ùyt“Uq“IƒC˜®g}¦£Ÿ•bw¿iTo9Es1@a6¾`"ŒÝLV—=z+“AYºRZz_y„pdn@„ŠLtsYx“5‘ˆ`m´°ƒv>ž¨QɉЧI©­z­Ò{t¢kV~9pƒ8n†@a§[ŸœG\|Tkh5…¤TreNMuDUk*r_Mª™T|Ÿ‰ŠÏcš—oƒpH‰n5•¡^h kmcJ­¿hŒ¡Z‚Ù¦x`fœ]\_2ƒ[s¥put1OuBbj)Wp._€;gn;gxB~‚j†”dXz0]o>P\$vœ†ÆÈ@}ž<€žgx‹a¸™es‘?‹D£t5Š­bx•ƒš›{®ÚŽwÀ]L£NQg,£­wsÃSZ^P–zA…¾]eªiyÇJV‰=l‘7Kt7qx$ìÒbªæÊo’N’¢dV€9]~AvŽM¾n¤Ul´h“t ?ˆ®†¯ S©›^ºÌuµÁƒŒ¸Wj”Z’štˆ»]s‰Xœ”vŸ¦m»re‚sñÀó°àcŽªpšÅ¤u°u¦Îj‰”]ˆX„²c‡¡ef‚Wf†Q®Ï]’R‹”_e¥FjŠ=œ²^”Ð’¯n˜O–—Y|‘Q¡Š_·¶L˜®ox~I¬¼MWw5zŠOn†g’®W‹¨[|‘e„e|še­„¨ÊYu7^xJarJl}DªÉvƒ¡_­Ç^U]}Vrk‰©ƒ©²pl‡Jg[‚ƒ_¥»’ÀЊ‚¡m‰©Xq‹HŠJ|‹K‡›\f€QXmf”¬Jc~CbwRx‡TtšT\o@^€O»Ø}sUv”HlˆRÌèdf‘W¡´mƒ·W–“h¥ÅXޱQ­ào®ÑŠ–ÇY€­QzT~©es”PhŽP [k“[„”[Z‚iŒ¥cŠœQn–]hbY|Ku¡XcY²SŠ®yu˜T¢È·®ÓuwgU–ta…Al}8ŒoN©\¯•g¼°˜ÝÑÎÖvÝÀf¸³r¸«‹Äéžêÿ¸Û…¤ÛНÀ´ÿÚªÿÆªÖ©š¿ ‚¸´‰Ñ­o²šŒáÞØÌŸØÞŸàÚ† `v’[y”€§Às¾Àk¦¦PpŒ[… ]l|Wu•]tUˆŸ_˜—VƒŠRj‚h–¼v£Ï²ç–³Ñ°Ñr–­d¡fv”aw’L[…]Фˆ›¸|›Ãg~˜U„£Nu˜Wy¡~©“¶xµfuŒVq˜Oj…bt™w_xK]vJ_rEfrNUrNzbIn„JN‘aG`OL[@GU,OZ4hc*y|<ršVh‹`kqPk|IZ~INnRV]?Up=QqB]a1ii4Y|FXoGicDYs:oxBŒ€GŽ\q§b[—ZWrXXzPLnMLgH^h8~r&[™:dxdg{EH€If_Dr{F|xW_Uuw^“ƒJ„¯d‡žd’ Xÿ£_ÿžlÿfJÿr8gSN\\7sZ5|v5~’TgŸecŠ[Y‚Thu:]„ARb8ygGyLŒYw›UF–Tl^@puG|Sxe€‚P‘T…›Wši¯™gmÎeSk~[,gi?vc:g„2y|@¢ˆCtÃm•|y«~n”vzuJ^‘E¢iHŶ;×ò–æ§sÂ’i˜jpsR¡Or³iŠ_ƒ°ji™dF‚NRk?ˆo2w¤S\”r]cMe7u„I†–H”[P¤d[gBOnG]i'feAkk2`bŒ†G‡¸|Фr›«{~¢Œt§uƒ‘g{®|t–cz\y X€£Ro‡<k?y¡MŠy>M™>QcLci=¦{F—Ë›ÿ¯wvÜ®x–=t@¥‰D²f¡œs¶±róµàÿ¢Ãå–„æpJ˜jˆkW–T€ŠJi™eŠh¤¢@¬Ã|t¿kh„^”—+dËR;sRF_*yr|y]JuB[i@np8s™*²¢NrѧMŠuFh={m$‹‹Tjošg_¼‹Lc=j]6i’U®JÇäv½Þ~vÔo¨dT»‚jsmgh,Fi5yp!y«c…+fˆ-iz0p2fvE€vKÉÈk€Ìg~Ÿn€še¦¡dƒÒr„‚R{Ãa€[7{Ô~u£nh5Œ†Jdw;±|4¯™Vëó>ÿØ`ŠBu…-†³›jsP©´JhÅPyn>šSq¢]~š`¡“K™¦;€}Z¡¨~| {†»qjR‘·n…°{aidi@€|Oq‰Kž–Y`‘BdiGKi?Uh*rsMgŽRe‹5jŒUat7s…Slm5«„JÁã~m¢K“[«FVxYœ?‹”^f{Zp‰DkrM¡}X•¶[¯¥X£·gh£7‚§O~„F‘{1Š’5¤¨X˜ÿixy@\”GŠ3e„Ou‰jƒ„fˆŒHÅŒ†lŠ:~‘vyLŽ—E’œVd‹Aq†i”_y´fˆ‰\vF—ËFÿö®V²§]})¢z_y¯fTƒ3“g…š\o Sd•C±·kÄñ¢n•Gb}<ŽÅZ}Åbq‹B‚›T‡”XƒˆSWv5w‡X„™clŸS…‰h¯¢¾ÙTu|ƒ —VwGÿÔ‘¸Çh›–TæÐa™¦€r…Zy¯@•‹sy”Šxš]‰•bœµZ§pLz‡n€Œcg„Lt¯e•¸Y–Á`x¦5™¸I†œ_¬O±ú“s±W p‘²…°t}ˆ@™fŸfŒ®t„ªLs€tE„£TbŠC‰dÎÀyuŠC“¡U¢´Lw¡E•°u—¨Y¡ÆM^nEuŒjœ®r®É„ºnOn1\Ao‘F™žsk‹ju…N‚¡J}‰H´€v˜f±È–Öÿ–¬Áf «i¤ÊgyUcy;dFo†Q•³[„µRsŸJWs=mT—¬}ªÅ‹z [j’S›µºÃðµp¢i’´t”¸ax•j¿ÔŽÃÙ‘¤Èž·×wŸ´k’½–Øò¨œËcz”Kwžda‰b©ÂMƒ¨=XtMƒ£V‡ NbzJyœ`¯gª¾Wn‚Vƒ—_“šV…“H\oŽŒt”£[˜In|<Zk6WLKqaX‰ŒaŠu³´„²¸{Ô¹í·ewˆbŽª ©Ú¿ïÿ·Úþ“»Ô¶ðòÊàó§ÿÈ–¥º¨©°Åiz£{ˆ§”¢Ö©ò즷µv†¤fЍe‰—s¨¹¡Ïé}¨´W~q¾¼b†§MŠ£]˜g„f”œ\‡ŠKo“k¥Äm»~™Í“Ê’ž½y|›J[ƒ\¨ZpOp˜bˆ¨r‡«lw¢ij’[z‘Uz–QmŠWp{޼|¡Â^|£Q|›Vz•Ys‹d_nESzG\lLojHfrEmV}‡D[˜^Gw`MW<PW+bb1jt5ev=\{MeeWclDU~K^tKZfCPa<L\6Oh5Wc2dh+\{;VzLjgD_p6jt@v9sŒQd‚cR{aQtXNtOhgLXpDPnDTc/Gm9SYLKj9]lIzm>ˆŠB}’Vr’cr~_kGy^„™]¶žQÿ¬bÿ¨]ÿjNÿr'TNhp8gy7ˆuBœT¦xb›o_Wg>j€2`p9jk?Šw5†—Q{ŸXl l‡{Tr„?nO}L ŽJ›©X¡j––cˆ­g`©m…zqjˆ9UsCs^B`…Ak‚ep“AT•w€lZŠMžªj—¬CW«itQã=·Û¯Šâªo´€d‘ox‚DŸ‰Ef³r‘nlgŽPos`a‚FU†<‰s0n’J…I|sD‹‰=Œ…P‚ [‰¢}g¢rl}G‡-u¹lv}F]z4Rt7<h+IdIWZ1‡dFf“\ˆO‚¥Jaš\¤tY©ÅbÉÔ~ë‹b¥PM‚5ÔvMFèm-QW:G$g`j{8a‡Ixm>±‘’ÎMz‘P‘vFpšT˜ˆQǸW¸¾£ÀäÁ‰ÞÒu°Qv†šy3޹yO£_™cG`¥T7blO>=hdn“c´¿[m¿œa]Nwv6ibWN"]…'P„;ju=_Ž5[y8yRgwSs{(“~3w“T‚}Xs•@DŠfXj0XxQ_p>ä†9Òÿƒ´î¤i¯AsGXR8]_8ce7lh:Z|'_´=kiL„?g|dg„?dJ3tn,‰{Hq‘ªeƒ^xR«ª^s·‘SW2X]0•‰M{Û…m‡AÚ”cx圙i—òTűMÎ骟õØ^˜G†ŠC‘¿T±ÑGŒßކ‹‚¿¡P¤µGjÍgKp0„d6tŽ[ˆ®„lšZdiD’Æ^‚Ïjuªfƒ©smª<„’2 •BÛ•xnr IWg+ztDdlJˆ:ž¿Po‡J„ª``^‡T‰6l€LgYj„•]š¿zcœMhn;jl:ch.’¿\‰‡IËÛKÅ©¤¤]˜y˜p¤l¡¡fƒ™Aa½MÀÄU°·|ž¸y•ÈKp‚=Zt1i}4`t0tƒKtPlƒS¸¯v`As~Mf–Sw€Xs’SGj<_z:|˜g‚ŠCe‹FevŠ‚–hx£1™sµtlšB•»In§pVp3Qt.CmHypM}ŠUˆc½´_ ½k¢ÇWQ~—Vk=ayLcz8iH‚ªY`}>š–M¥ª^¤©`rˆZ‰‡M„»e‚ƒN~‡q›³\{£_Œ–~vQ’ P‹–Pš¬Th—AfnA–«±Éh|±?p’Qwb„«SWj;vµp€€­o”r‡£ucgˆ¡mm­It’ac†Y”›ÁÎh€˜V•žc–±k‰œY…§MeuD•¨Sy’>jŠf±Òd¥Ý?g…S`yVryUªÂ|áÿz“Ê\`‚I€—b®ÕŒˆ¦|¢haŒ9eyD ªXžÄao?b}Aw‘g…”ZŸRr‰aZy]†¡€Žµƒ‹®x}¤t} U`E˜§[e‹Lx‘_„¦czžsr“N‹«h¨lp›edO]}Te q˜UnMh‡VpšSœm‚¯tÂÝvƒ¬fˆ³ps•j—´{¹ä—ªàVx™_¬Ñ|»æ‡¡Ìm´ã‘} G™¤X€ªW„¼ìux _hpS€}SspL„…Y‰¢R}­XŸm•²~Åe½I N{€LsjW§•j ³pŠš}Š¥™¥Ï¬P`zC]‡j†³ŽÄ® Ó…ƒ””µ¢ŸÄ¢ÌÒ‘¨Êi}šfx™]g”V×ã°œ¼Œ¼i†j˜¼q€ u¦º¡Ë銜»y˜ºŠ Át°Ðs•µaz”k¡±}¸¿o‡¤S‚«m…¥[}§o™Ã„¼|˜¿dc‰AWƒf€©Yp’Xn“hºm|ª^w’Xu•M\|NyˆEc‡Sm‡v¿z Ék”²[ƒœNp•]u•]ygGmJq€VœsHnŠIlw]d|Q`zVO|QJdIcb5bz5ezRcsPAPbPJ\p-\sEkgGXn4LoCO^BQc2_k6_r5L†@VmQb_>fp9qr?t€>bTdxZ^KiuUOzYYmWRf7KnHOe?M_,V]9jd.|…>iŽI€ˆV“ŽO‘­q kg·l|‹^Š—R¶©Qÿ™Zÿ«Yÿ|uÿk,´WHp;ƒ…ML–¹dm­u\†rqnSt…>‚‹Ht„Hy|G|ˆ:ŒNf€PŠwVƒ”M‹‡Sr‹[‰K€—Jj™nƒva¢–ed¾zt|h§AoŒGm`Q`r8]h1`vK’r7Ϧa¯²`œ¡nx¨mµ“N¬¿ƒ»fw²b¡€Œ¤€¬p“±t‰·Nh•moƒ_´ƒKs”=„ƒ[d˜EcˆWy3—>›š`±·q¤É_²™d–«^Ÿ]q¾wL‡Rƒp<\œ†^{fd€?€y.YœARi)IV#`+Ê¡FgâxmtT£ˆEà¹zÁý~×ëžÅü™¡ãƒ‘¸f~¡H,›hSE&o"„6š@¢¼c®¦W}¯Sª•oŒ›Pm™g‰Vs‹;s•]c‹g¦‰CÂˬ‰ç—¨°bgÀF”uV‰Ýž^ŒTbq4t}3£-}›Up¬/`šXS‘@Ap2‰S$XªmX…/‡€5“­D¦°l†¿’e–_Kq=vR0kuC…•?b…Dt’RvmJb`Yj-„mDlÀNÿ“FäÿöØå¸^¿Ž6qP/V#y?Ë`cµlŠy2]´sfz-_rI˜ŒDw›T¢©FÄ«UwtT^‹Soe2ž|H€šJ˜»r‹©^QtK{i8¶¯„¦ý{ŸÀRª ©³Ú‚šÉž«è~W€€si˜O{œ;uQ{ɘt«]pˆ7’RjœudŒV`€A®p4`”„e`|e‰VƒN4i•R™‘Ta¦=Šle£“jWºÙº¶Ï³³¨_–Ê‚ÍÄQÏG‹w1ák~Òž¡w;…WšU¢cáèe…·~ŠS–®;‰ŸG‘‡dbˆSa|9Fv7AB1]Ug|Gn‹T~˜Vk”Za€:^oE¬¶mœ¯}q³lWAVvA‹Ò‘®qz“>nÀLo¥I‡˜Mޱi|—K[p/ž™…{€CuE•nxŒG|˜j’rU½¹Mzª]y]ˆ°mhz.s“{‚§\j}Tp™qÍÔd¶Ð\—VUl/js5^h+eš%|¤NwŒ^’še¼Ó‘¦·ox—5uCnƒW~y7¤ŸNªŒW–L«½\°˜Wž™s{Lyˆ@…Ÿ\z²Ov~E‘šA“·T•Ђz¥f“½f‡—m¦©l®³t“²U|‚I­«bš¸o½t{˜e„«En–bp˜=n˜RmEA^/p‚F¹iŠ´Ju³X_yMk…Zp•fx›b¤§{Øó]„œfŽ­u€‰zŠ•TxP†£z“ºe¥ºX­Ñ‰ÿÿϾÊzwI…¨AuxÈÚÕ¯Õ™Jm@d‡Vc|[_…Md{H¥Ïk‚“U±ˆÖìg†xo‚r»²Ž•¾itšEƒJc|<s’cvšRx›Z~¡WŠžAq†R_[®Pq–Wqˆie‹Vyƒ]muºÕŸÑú‰­Úhs¤I`™VZ„Y¨Ë’ÃæVEoBq”l Ä£´Ô}Œª_¨Ìy†®p’¹‘¼ó²°ßsx’_„´™y¨†µÛ™Âò©ªÕn|¹b«Ð‰ªÛ‹®ß}„¤KkaQ™šTž_§Ã‡’µr{šqЍvŠ®y™Ç“ Îm—·k¤Îe™±z«Áƒv’fw›c€³—xš}zœoµTu›Yu›]jŠm‹®€¾×mˆ¡i‡š„–®‹—°UlD`Lsœb”­|¤°Ž±¢Že‘šW‘Ÿi­x€£•ŸÑ©Ô튬ŀ°×‹µØÇl™¹|¤¿¯Øx¯j…«f„¢R iˆ½ˆ–ѳÎi‚©Nk“P^†_˜”Ut’l¤´n•°Yvšbv¦Nd…Q€—EhDgŽp˜¼|ªi„©aˆžOf\uŸ\rc2x€8i†\{€b`„P\p_OkKh]Jh}@d{Pr~GmƒHm†akqWG‚ZY\F]g)bjBwk<Vx?WmLf`@ts7cŽI€yIQ”P\m\ke1gŠ=gzOe…EL€JbgLXCJpQPZOpbSX‚;QvPZi:oy1w~7xŒEe’P[|WqrSvƒ6“„a“©u‚µ•–˜w§Z´¹sÿnÿFÿ‚wÿe7¼X;yf5…KˆŒYŠ•m¨‚†”mŠ—Q…«U‡–^ƒW…ƒNz£N•WrU•‚OjF‡ˆTœ„Uˆ¦az­~’lŒ‘Sœ°[˜°q£œ{“¸X…“fw€aŒ€Hš†O†Ÿa¥ƒO™°hªžqǦx}ª~w‚\vRœ˜i¦«o³»vsŸ]™QœËoxµvJyzz5Ÿ›8‹’Oj®sd”MlM‘†5••KºŸXw¬{¢dšc‡•bx£^’œj]¸X”CT}2’x5zÃI™ŸJ^µsUnAhK&fg<cv:Gv‹[aDXxCgal‘i‡˜{O““Hgf~jQZˆhSz>Œt!K¢X`\5wX2øEÅç\šÛƒpˆejxFj…N©ˆ=‹ØZ|•q{–H½¥W—Û¸º‹Ó{‚®|®§Bÿß=±ÿÊ‹ÓX†–_§”L±Ûƒl jZ“Yq0_{?Rm'¨w+ˆÆ?t¥M[£¼–‰¼Q~RXJ<M|5’a/—©N€—uiUo{;b‡K[€HZz&ƒ|AY€=Ny–bhcey-Ê·7}ùgE*n‡-rV”Ak¥bct>]}-vxEq‹ªÊy¨~z|K9Vjc"‹q6œ¥T¨ÎYp²VUzO‰rAo—q¶[Ìð¦}í˕“¡ÓœŸþŒ>^3Vff~Hm‡REdPŸm;Ù»snÿhTƒ<`x-€,´éˆŽÒ€Oe@©~;›³kfIž7ì3zÃO^jNon1¢¨M—Ç`|±µ°†Ï¿•¨óŸ°°³”ñ¾È¸¦‰¾yBzÓyž˜Óé»´¿³±³SÖ£M¬Å|³–Ds°\p™cdˆ9\Š8d^,el7£6ЧdŒ¡dV†Ay‰6¬µ@–ŠEjez€[…¯‡”»Œo¬UqqX“–W›ƒf¡cXxK[y<Z~GWv6—­f‹Dibj‘‰U¥Âi­}N’¦n ”`“¤oœ?Ktbr;†‘Qh›4…AS‚J׌¶ Ê¥sšP¾¼aޝX‹ŸCÎÕ™†¹rÌpEg9 ‰p›jX>t|p”˜WͪW§ŽC‚xD¡³X怤§o¬uZ{qBê±U¥ŒkŒ™j±I’·_¨–]}»d‡·h„™Xj H»Ñx©ì’pŠDPI_h`d…bb„Mš™j{ˆNv”U•Ë=~“F‘S†NiRzŽp‚©k†¡G„ŒLdŽ^msLuv¨Õ…Ú¢žÅizŸDhvL£sš§\‘Vˆ¢}¿ÍwšË„˜µŠ¡°”ÝÂtz |JhE`ng¨k‡¬Zz¢He”OfRœp§Xs’]”´{¥¼ehž(xƒ7™˜lo—fx¨R_xC_zCz›€uœsu‘T}Œdo‘IjzBgxEw‚Uœ±kž²alDvœS}®Tdˆg_Œec‘an’f‡ª^x¡exÜävg‚FUsr†§±³ç•s˜DŒ³lq™]†±ˆ´ët“‰c<\ƒDp gv˜—НœÄ…·Ð„œÄœƒ¢|t—eŽp† Y²¿Š»ì‰¥Úu\}g’^p’i]†flŽž´}ƒ¤n‘¯…‰®dxt€™]…¦‰Ž³x•XZeuŒjy¥]cŒMW}Mi”v޾}’³PVsKbnW`TaŽFhŠNs–h¹¿„›kq£p”Àc¡´g¯·k™Áoœ»’ɽÍñŽÁ}˜Ù±Úõ˜ Ë€•©o|¥x…²–±jmœ`j‡Spl~¨‚¥¶|”¸yµc€™ZЧlƒ¡Xp–p‰¨cx–Yp£lÀi†®^¦T˜¯R`‡fx™\xŒ_x™a|“Kd|Tv‘XmX0|v:k€NY†`WsVhjIjpEyJz’SqŒhgŠ`f|Tb{bWn_Iq\R[Dn]-o~:a~APLOfPWd8qg4L‹EWl]RuFwcTx„2Z‘XbrVkpA`wBZmI_{EclEmZ=lx?U{E_gX]xAVr>jo;i|IqzNg‡NoF_‚>juOwx@t’k€j‰˜YÓ­sÿ\ÿw4ÿ…Sÿh?òX5yS0]|<xuR‘~U¼iš³c•³k‡¼zŒ¤a‰ªgx—^p”]ˆ‰On¨dqŒg|ƒ@}‘R‰†H—¦`}À›€vœ‡M°¦W{Æwd£tƒ„\„•qo£ok’ZŒƒB›ŸX€¾[y—r•`‚£gr”pb†flQdŠR‚}H™§g”R¿¡TvÕt}’ib¡``2t|,£C£Õ~g½csQgIn}G‹vN dˆP ŸC—±l“´\‚´p™¯‘ƒÀ€b­CŽyEZºvljP€|^w¢\dMNe=>n*DO4P`+<L8dI*U€!5k*QJ%‚k  ¨6n XgŸ7]‡9……M’£F®´mq¡t’u{­ˆ|½ÀTºèf}ÅR‘’L|°edI{~B“º`y§‚jˆf®ƒ[žÑb¡µx·Ç´µå¼[Æ©\ƒ@±E°×{Ϙ…ƒQ«”0£Ù\|¹j‹¢V‹’w˜˜My´{‡L®™fx•y°žE~ÁJ9]1\*g”`e„H_ 6TrM‡r,k¢IRd#`e%y³%ŠÄ-¢qX¥Ù…N³„Vk?c`Gphaƒz8] vVe=„xP_ˆVhp/|ŠMyº€ÕŒ9—•4s¹B¨wD—šu±¬~sÒ®_~<¯ƒ5{vcšÈV’u[1Çj,7•@)˜·–9k8Oeen*i{4d•b†­5—Àt¸vÿ3ÿÿ€ŽÚŠYC0ùƒkƒ«qÿiz¹ˆÉ—¬Y}mG‚jb[aT„i1t?efOPWqFga Q:dL0„šosŽHZ|8b¡Gж+Çÿn»Ún¢È“”Xe¦U„‘GwŒVw¢in¶~x‚:§†]‚¯GžœNvW–~xÌœ´§Þo~‘P`o6y7V}x”‹Fx­``n3~…\z‘]Hm?~ž<…í}Ti+]›\Bv:X|.Uq7Sb'qvAlŽGYv8pU>Á­o¤‚dŸºY¬^v‹KqÚyv¤OkxB±³ri|FX¨EZƒ?\›HX}s\y<j|N~€hr™NŽxWe:l¥bx„=„®Ip…;yX¸°Vt·Mˆ•{àð†´ÿm³¹b„Úˆgnj¸ŸjŸµOt­ˆ¤^š]uŒ\x¬iŽÃ—v‚>†zv°Zz²k™©p—©^}x@ƒ¤0–¬HXh:Rl,sB‰šU]‹IuwoššÔòx˜Ée„¢Yˆ‘hvd}˜{˜žRˆ¯Gg{=b}C¤µ€\¬Rµº†“¯oz¿E‘²|mˆÃi|–k³‡‰»ˆx­h„²O“€t±ÃK´Ì\j 6fjVÆZªÍhr IEX7†‡x­ÔU™ÊZ‚¬s‡¥t’±‡gŽcrš]l‹^u’euEwŠ\d‰RqŽstœMj‚Tc€9gy9g†N™´cq•g±o‚¬e¥Ïx±ÂYa~HJrE]{EJ€/:RB_tGlŒUš¿Š¯ÝUn—CVzn¯Ð¸£ßGl^²cÈêùÿÿ´‡¬?Va8[{=aˆCGhPƒªh‘´‹³Ø…o—c£w—¼]¬m˜¬w”Ÿ…œ€z¥`hWnb”²L|‹Gd{Tl\}¡q^‡ZmoMdW—a||}©s‰¯j¥ÌSk‹c‘Âg‡¡T_ƒM„¨Xu¥`~«bªCh„IcƒLs›`†—I\ƒVg’z€Zt–w¦Çx–»‚§·p®´‡·È¡¼›¸â¥¥Å˜ÉïÀÎâ––¾Œ’¥Wp™c~®Œ£Óq‘µWv“Ns‡Z_€i~‘cpk€¬bh–e‡¡hz•[v’]oP[€Lax²rx˜l¼{¬Ük‡§Vj‰ZnƒQo‰Vn„HeLf„Wnj3}tGdRQ„dMjSRdAmb8p‡Bu—pz˜}g qUŠkJu`]ZKRoCnjD‘j7pšDuoWV…TWfJjk<S|?BhB[^Mou1}>_šFLnG]Tb_6ot5oJXzT`[Nd]0Ur?R^JaQ@Pk3Ml@R^5Tm8sb<|Go„Lt“HhIm…=q‚L‹Qƒ›Zÿ”[ÿšPÿh0ÿ|6ÿkBÿb2jT-fp<i€Dz‰C‹WŽ’W ¯r‘µs›£hˆ·ƒP¥~Wna‰jKŽ¢X|¥zz—Us…Wwa’\gœ…xys©ŽC©¥P§Àˆ•Ï”€¦etœ_oŽsŒQ—™^¦ÁcoÕ‘ž‚~½^t–reaj…GRƒDSe>Ua=žv=Ͷ@Îû„¥Üt´‰mXz’9u§<Q†Wcq`V|X_tR‘z8“®[ƒ¦Mš£c´gŠ—y£½x˜Ågª¥f¨½{‡¸}c©vi|HŒB¢P~»d’•WwœR_Fƒu.—Gk’>^{:Ž{1`¡J€p;œ–=§Y¯JÏÖÇb‰öa¤C·tHx°`‰–Q¶¦6¬ëb·Ê‚¦îŠlÄ¢YuTzQ\|<d|`dƒ4M}VVlKf‚-¸€SeÌœ2b§ab–CnŠ(”v3Ë®kmùqªŠ]Ètp©s‘šVp—Vk{Kcw=S‚NmmKŽ‹W©¡ˆÍ”^vÅ j„DŒ4pˆNK{NLn;\o5trDcp;XpDHj(ÿ”5eÿÏuL^I“‘`4ªˆYPfz>_‰3‰^+_ŠIr7ƒv]x‰QvqC˜s=†|b³¾xªÖŒS¢Rvilf‘i„MŠ£5æ›z{ÿo}—TŒ„8£Ã[—ÊvšÌ>u´]H8JPy^'H¡Igs.VpN’¥pQ‚tr}MÇ¡­f¡¹²:©©RhÁ•„i2W1ljgÿÞIˆ¡¢”k.q•\`y:VNFÅE޽M°ÜNÆ 6£³P­ÌAÐüˆèj©ÃkÁ‘X‚ŠaKVLP6dp1¼gÛÿʃÌs°Å—ƒšA²†I‰›yÿæ–®á¸uÅrt‰Ev†e‰r˜”Ky“SŽ‘9€›fÍ’‚Œ›Zd£C^€7{…-z¬wLxRhm9a™[p”A\n+Uv9bs0bƒKgp.·µ~ÝÛq£ä‘”ÔcÇÈ`yže«¯Cq‰gd’R|oSq`_wÃU[l)v’CjPjŽEV{0u|Ea€IhƒV~sDnŠ)\p7v TLŠ>„^a•2`„Jbw@n£q‘œ€“Èš¾¹‘š“ÆÒ}§¾iœÆq’jƒ·O޽P|‹Qx–UVF‡esŠG‡¡]Œ´J‚¶O£Ëhu‰Foš[–™i^t=n@–swŽUt¤>r‹Om’Ay–jsr€X ai‰M O›³u’·jgB{’K’¸zƒ–O…“w¯ÑhÃ×w­¬|¡¹iq´Do”Sx•fu‹hg„Ls‹aZyZªƒ¸†²EŽ¡\¨Ñ†Ž¦}w”D„¢>{f¦Ùáÿ™ƒ­9e‰E¥±Tk†Dm¤JSqA`„R|Uu‡BgŒJ”Xr”=_q<gwS`tJjˆesv\|£^¢¦•·Þ’¸â’«·me›Aƒ¦:g‡@k‡BTw-Z|M‰•Upˆp±Ð˜¯TÇÒ|êÿÂÃÿ€’¿pÁèl¢Ã¶Íð¾­Gl—AlMsBcyE_ƒN`es—„~h³É˜›µ³Ïp„¢gi\izTq”Yœ_¨riŠ[DfFY~BTtZ‚œƒ¢¿_£Ìi—·Sr•W\\_Š_Vzlg†d·€„ªvœf|\pœl«Re“`ƒ­Zl“HKlZ’·cYrDgGfcl‡Oc†wŒ¯x¢m~“m•¥uo‹ª‚¯¡¯¾«¯Õ¯ªÎ{x¡pƒµg›Îƒ—¼† Ê”¡Às”¶fx—Jb|Md}UkŽu‹µf…´n“¼\dˆYq“Kd”NjOW{cn`€žtŒ½…•Õ‚˜ÀY€‘S‰ˆ\“Op‰Lv”NfŠZsn:‚nHaˆNV†dXdPImBeX7vm:~Š[~›w]¡€hvfxU„|Eu©Ed˜Zb‚S:€Q\O[FtJWVOR_:4jLPMEsc6|–5o¥af–q]g_iEYtBda@jtOHlOURF_Z-`i7cl9af;Ri>dm:y;y›@s˜Kp†V{Xz§Xo˜]n†SaxCjtG~|FÿPÿ Sÿe5ÿo(ÿe8ÿa2R0€|F‡F¢V{£azXMcªtw‚leŠoEƒn>]VcO=tc:s”ZgœrgƒUyyTqˆQo‡\•‰LšÂQh±d}ƒh…‘_€’h dlŸf|}I{™l§˜fÄÆu¼ôqñ i‰qLGNIdFsb?”•8x·PÚ•Nÿª™µ—m£¡U­°@mÔ‡OŒƒwh=X¦Hk}Ig˜@eˆN’ˆGh¹Y^{WªvQ¸[¡Áh~¹sj“g^‡XlyMnEƒ=Ž©Dgžvo„g~ŠV­‰aÁÁX¸ÓyiƃMpoPg9|v1‡*¦ˆ?¼ŠZm¬]Œ˜v¿¹OŽÒ‘X‡`‚p4Û®R ü¡¦©w¼Ð~“꤮¶Œ›Únšc=‡9VW/ku/r—'•oUšËyn®r[„KrG”œd“¼š†ÉR€ž:œ¡C~¡„—šÂ¢m©Ò•Y²—eo=l—^‰œ7ª‹\ZÆV[Q.Љ=z¼atU’§fŸÔL“t•Bg˜Af…4t›=‹“\œ‹PŽ“l^¥T}…*k¾žnIDiO\JRzx7Pf)•S-]œ[»f+´ÞWÀÆy¥× Y¼o_x5DyBzd=£¥c°¼§dŒpDsI'A2j7%XŽNs6x“bƒEƆu²é ¡Ç{¼Í¹óϪšÿ²E{9tp%©PP·Gxr9ver™J_&‡H­ÚK²Ç}lí `Åý“Óÿq·î{Á ‰ÚكĔ^ƒÓs\…iØlÿÿÚåÔ§ÈÓ›Ÿã{¦çhŒ¼“›¶“¥»†‚¹gQxReŠXB\ 0]$`]&€O¡Œ”k¦mz|`ƒ‡Mp£RqÔ\À¬‹…v_¨@Vq5‹‰‡’œa}›M¶çzg¼NFkFN_2dŠS\YQ]n8q~Hgp=\zEdj6hŸUœ˜[Ty1`f8kq`mySwu.}e«š£Ÿžj¶®¨Þÿˆ‚¡CiŠ_‘¢Mz~F†º@ŽYŽ«ˆ‘ºg‹“dn™:\[M™a¾Åsn¹pUuB|pEe|=[y1‹ai¢U`xF|‰pM#dc*Y€At…Dc p~ Vr•@߸¤¥Áµ«Ë¡‘µFŽ—f¦Ç~`•D‚ hX‚B|f=dƒb€«wn’l¥ÏuŸÒo°v‰¤amŸZ–©d™³^p–@t’L©]dJm›Q`€A‚H©ae}VaFzŠ[~l›¯of‹<‘Y~ŽL†ŸE…‘[¡¬v„er’N|¤]œÁk¢ÝQšÌP[Š@s–Nf„1Jh1‚‹w­Àj†±p‹wk¡X‡”HƒœV³Ëow®Stžd…¦•\€U–¤O¥Ékk†iŽ¢}„“YÞú_€›MaSdsL‚~G•ChwJ_uBXsJb‹;l„S~”Fi”c¶Ùžx¨db{WUxKœ®‰”¶T—·XT~AšI_zKª—kŒ¿„‹À`€˜n—ž—Âí±Äâ«”»–­†wŸfn‡U޹K}«Qc„1Zy;_Š?b‡=UrNiw`m™y‹­€‹ªesi‰IZ{Hv©bfPY…NaF`H|žTzŸ`™«|¤¸…Éþ™Êvd†76J5[jRfzJmƒ[oŽqn‹ZTkSj|JF^Q_Kj‡Mk˜Z«Rušo³lŒ¡[E[|Nf„FeŽg»o‚«^wšauŒMG`Oug‰ž…Ÿ´ŸÌ˜²Õz©Á­Î’«Ò•’¨~—¯Œ£®{¢½m™½c¢Z†¡d{ mz¨p„¬oqMk‘_|²eˆ Wk”]w›^z“f’­o£pƒ´rœ^u•]pˆbƒ“XjŒQfˆKg~Ux]=t?iˆUVdSgP@a>JZ9U[2hl?mzXX…qc€n|mPƒG€®dZ©zQqdOiGLfF<l==M;<P*DS3bQ:zs4m–EX”i\p^^mOjtG^…J[pSPyAAe8OW2\^!jr0}€;dˆNftSno>ƒ„=„œWf¦onsmztHr—OjqŒX\Gq„H|w;ÿt>ÿ Nÿe7ÿg#ÿh1ÿf.‚J/s|@xqH‰ˆSe_v€Wu‡;l”hk|Zi~QH~R:[KRQ5|S*u‘Eršp‚žck”Wƒ…^ˆ’L‹¦M‚±g[¤vfg]vx5†ŽMX³]JriƒeDx“Wt‹j¦’g˜Ç€Zɱa„xzy=SW€u?œŒ.©»^˜Æƒ—Ãy¥»}€¿Œƒ¥f©­G¤Êe„Äžr±˜œ–HŽÌksÁz~škŸVˆ›Y”£hyn¨z7›j¤žW‰§b|[eŸ\?wVXa.¦n:›ÆPš¾zO¸Wk[?lv8u\¾©qsÞ’[€pqb2ê:¯ÿqŠ´ƒS«RxqO®ˆG[ÈZŽjzp§IvŽ[èD‘ö¨w‹|\ ‹y©´‚«Öty±|;‚\_V.€r2c’:nf-‰m5Ês¬·p‚ˆF‹H‰žov~€nŒ]®‹JŠÒR—½U³U¿’[’Ðl…³W^aqˆ9¸|[iSdj;r0j•Cª¨D¢Ã“ÈÜe·Ú{¹m”ŽEŽœQšÂj}½‹šmYw™an¡Xjˆ5ZœOGlGIX@re+XlD@9(J<{ubò˜H¬Æ§mEÿêwìã^²ËAt³Nc§@„i‹OqN¾”M„×3A†pF1cb@…~Mb˜Hœ¦F“¢–›¥ŠkÌrƒdBk£rˆšGëž-YŸ‡@fXdr'zƒ<•²GaÂvyŒ%mbE™¢zk–º£Zªñ°ÿõŲÿÅÿÕ…“ê’¼s†º­°_îßhßÿù‚Ӧ̊bŸÌfK•xwD·Ô`í¹áŸq™U‡^[lQ“5{†7o™R’—mg¿osƒL‚§jv©\yºn}‹0u’;jŸQg~+—‘C_=Udt¨•RpÛEH_/id)]ƒ3€}Fd©YmLfoHRKf_'}]u~Pi“:s4z°Zt…6f“@ªŽC•„`MŽO•uVäñÔ±þ±lz[”ž]ƒ™y¶j~Å1µœ‰ž¡wpŠBy‹aÊHm¢`tw¶ÃŽ£ÝKzt?ev]ajN¢™ZÄè|i«KfdDW`hu…O^Œ@sw?g»GšÄki¡Fz¤c„]Yxj‚^nŒNieuHW˜U\x<j„?nŽCuThzCƒ“Mb€MT‡;Ipz;oŽEY}C~‹Fx”[‘›x`ž>`k8m„:rŒW•©„|ŽR`{4¼¨i™­g‘µZ©M–ÆlzesŠWt‰S`†[m|Sp—fRtZpŠ}¨Â‰wÂPh~Gr‰X°©©Óimix…X–¦h«¶‚£Äa•Fl•j¢²“âÿœ¿þlsFn‘?mƒK€¤jj‹=Ž´_®°•ÿÿý£ÌCž›;“E’€b”‡]šTJh8Tl`¦À‡}©Rvšp¦·}ºÓˆªÔ]Y€Og5_ƒcfoKoIbOšÀz§ÕHˆ´lÁï¨Úÿ™¤Êg’ªkŒƒŒ¬y‘–ZpL·ÚyØübªàrªä]išA”»xíÿ›ÎìXBV|Igck’vm„OН’ž´kšº]¡Æˆ‘µK}¤M|šm‘¸„ŸÁx…®gw¦xŠÁ„£ÊiSwQc„6d|8W€:IhGQzau’Yk’IOf?XrCWp;QwGQv>hŽPtž\p•jpŽiy¡^KaEgFoŠTt n–Êz¯b›­Y€˜8Vf8hy]—²m‰ p…ªƒœ»v”½´|‹®ƒ…”gv‘pˆ£es™ch”`mŸ~¬|‡¦qžcv–Vi‹Mgx‚²z†§W\‘ku¦elšixœc}™o„¨ag˜\xœVx`o^m‡^Ro…T]lGymBouVA}[JZI?\39\8BP.EO2eL6nqEU‰c{hV‚šB|²hc–shkfstBZŠG^xRY{;Vy=M9hc:f€6o€PgodQjSRm8Sf4So@HlFHhDKg7I\(JY'^a4jx7YŠOU}Qhb>jr8hjHJubfXY‚r/y’Io„^kvKp€B{Š[|}AÿtAÿ‰?ÿg1ÿg%ÿj+ÿ]-sH+nr8zq4aŠJgTy†D“‰Pl­gnvbLvARhQ_mDms@oz;z‡Bx’fd¥id‡du€ZyŠF_MXfZNbHwpB‚|1t–Fyœ_e]ckApx?M’[`qT{@x¸Š_Ÿ„}€Ju¤Oj“Ss‹7Y—^‡ƒh‹ºo©{…œzµf‹¢e„¬dv¨‹w§}•OšÅ}„½š™ªšgu„V•”N˜¬W¶[}œl’ŒOˆ–ií±^Ùÿ–{ï[‰^xp6¨¢e–Ë¢¤¼”Á`z¤WŠ•>³«e¾Î Þ¥džfž‘C´¾ˆ‹Ï¤n‡ž‚| S`~Dcs:yv@_}\‹‡Al o…‚M’–Rh¯dTT‚zG€£eYWzn:ž‹8r€PAiD?@)E5Ÿj¶šhÇžeaªo‰‹3’šU•®M€Ãu‘ F™«WÔ¼c^å¡„uay·U„}Lm°A“”Aмa‘YŒ¥I’ºL™•Vx¬[‹¡|~Êqu†CèVy¸]š¬JÊŒs¤ÿƒ„Ça|˜b™¯btËnœ2¾÷³š¸V¿œ6ýÿs©ÿqª¸G…鑌¶L¹¤R„¤Š¶ ‰f§g‹f6uÈW^hC|ZPпa”Ó¹~³µikCr{OwmKrŒGž¡Ig„RRx]NLb_s:zzAb ‰@<x``8FR7ia:O<IHHAó–jÉÿÞç缞±j•yRÿ±…ãôÊùÞ¢•ù¯ŠåÌÁ´‚“zÏΉ”Ömÿø“ˆ¼¦Å“°ábákiX+†·5¦½¦ÿÇwé±u~­ž?‰¦`\ŒJl—adƒGʲV{ÐhQc&’l.ƒ¿h[¬zs}Bp*Ho/Ÿƒ5³Ácn|X“w4{¨sÚ¦¯h£O[^1Š…yƒÉ^g}7y{Hl¢B†\}o?³Ðp˜³ryY„¿Œ“·”Žjw«`£À|Åálu¿G·ÿp}جcŠqgg6ˆ·ˆ¥~j“p}yfÆÒg«ã`¦ºƒ¶ÆŸÄÀŸ‹ÐLbƒVw{G~ |‹ŒMxŸSix+›˜•ËëÞ¢Ó{v—9–±K«šn‡¶H¬Êˆb¥O˜ŽUƒGÚª[‡¹f¦§[z”;c|;n”Gy‹Kcˆ;d–5s‹IhˆLu“Cv‹=~§XŽ“WxÅ[\v<a@mˆ>T|.auE‚¬OVnVf©FWt8o’D_‹@£d­`m–Nw³soŽN}¢ll:y‹Um’FXuIk‚9{ª;€–eTsGTq>Z‚=Ž´?]˜=^pDu†W™›zuw²Ãƒ’›h–¦dšˆˆ™‰†œGlŒH™°}­Á§ÿÿ½š¢Oaƒ[ZyOŒsu•Y–§g„„ŸÔü°{•aµ g¯‚k’H•³WeQrŽ=`†A¡¹”£ÏyœÙe£’v›js Yk—h“¾HZ|Bh’Sw•es£fŒ­‹Íÿ–ªÜ‚¬Õ³½Ùœ§Ç~šÀy{§Zta´à€®Ì~·ÒÄÓð¥£Åš·¦Ï{°ØšÚü¸f•ReMjŒ.Hr4Ec*RtA\‰‰°||ª{Yˆ„ŽÀŽš·t¢µwv£gVc€«Te˜iŒ»—¼az—Oz¤e‡°zˆ§nuŽVc`Rw_s—NVv;UtOw‡To˜U}¡AWzKh’RcOgz[iSf†V¦Xg”fˆµgt­z‚¤`o’K]|=j„<jˆ]Œ¡h„œW^„Z^ˆdg”{¦¼kš]WfOw”]xIHrDh”Z‚»rr”ip‘bX{QO|H\€Se‡i]ƒ`j…Zojx›^v£p–fxœ_s˜Zd‰WyW|“RxŒ[hjŸ›Zv‘PPvEPeJW\BIbGO`K:W+9V5<M48M*J@(T].VhPkhZ†tAn¬_i“tfvXstE€ˆP˜lx©gw•\S“^SdOKg6W^D]c9X`<]q>_v2_v?N}@MhBJc2P_-`V%^m/ju9tK_ŽMh~NVnDR\AQX>dZ5oz,„ClRo}Sn†E†]®†Lÿ¥_ÿ…Mÿj*ÿjÿr0ÿc2†N-dh*\r2cmH]{Qjv@}Xc§jxvz~|B„”Mq™Nq]p„Mb„OVkZQxQlFw­Bs˜XHtNeS6iu0j}D€uEs•G†‘Xˆ§e~œjW…[Oq^^hHp„1ZŽfl}x“Y‚•d‚´cv¤c‡žFy—Vm™Jx†gi‚edˆ\Z†`‡€8‡¯fˆµ{…¶`€­ptž†Ž•Œ —i½³bžõx…Ѻª{€¤kpŸb­’[ªÕfœå¢aÆ®ƒ’b~ªC~£Ai–[BênµÌ„gÖ~V{pƒlSÆ“o`©ˆ[n8cqKqUÌ™puе—€MY Ss\8bv5zAtŸJy‡]¾€Sœ®w`§aKb5xo.„@·ˆYžkª„I””Rv>ƒx?¡r,ÊâWÄ×tƒ¶eZVog/TNocC†‡Y~¦p¦Pl¡€K}€]*f©_rCƒG{¤U­”V­^̺f¶ó¥Œ­’‰“o¬¯†~Öªz±y”Ny»š—›e¬Áq“ºrm¥n_ˆIfi1bŠ|`Ž€§s‘¢¥yª¡ÿ殿ÿ˦ÿ¨»qdƒ^vo\¶±C›º—ɘOÚ÷ÔÃÿ¿šµx³ç£;–ÀdK)Va@|4qmD_iQ€Œ-\˜rŽ—&-²]„.'Z½‘\BZÚS‚{2†‹fŠPšªošN¬¡ƒÂÑ Ö÷¤ÉíξŒ{ÙòŠ­Ï’U|:ˆ§¹Ú­[”÷ˆ¡P­·™pvÿÐwŒ:a—lÝǸÿŸšFÿ¦b›Ru{\ª˜_¶ÌdÄão€ÔueU~™<½ÑL“àt_‚‹T[(t 1âˆ\~+Ve)›˜G¨ÓR{Ñd[h@kyM™¥Jv«|r‰=¡ƒˆf)Œ‰8§±{ƒ’7iâwa§\t›K„_I”Ù¦Sƒ‚auLa“[Z€>m Zr—8€G{žRv‡;“Ì“\xJmy>VxA`u.{‘9r—F½¥YÍÿâ‚°dŽ’uv†ošŒlo©VŒ½‚‚ƒBš´Tm‹Yr‘FIu2kŒ?’ª{Äó®ÌÕǕĨ¸n¢e¥´g~†B…yKra;rWr€Iƒ¡wH—D¦³Ij¢\w‘D­Ì`›Îbq BXu9Wp8Un=ƒXˆ£s›ÊwŒšd^pJ\„-hzK†®jœÉIoš]\„;l‚Oz¬D{p˜¯‚¯Zi€1j“QauoŽ„£ÝZ~ RgAga{—RQs7W€2Zl1K`5pl¼AN{4`jGsŽC’™d‹¢c€Œgµ»g ¼É¹jr˜\mŠ=o“l¶¿›±àŸ®Æ}„«M€ŽD©fiVjL‚’ir”Q¼`¿ÇM{ˆN—T‚Xa‚Z•¶cy•^‡¬ ˜±­ßöy½Ì²¾nk‡OlŠ_aƒEPi;€©^ršdy˜W[ub‡°y‡©stpfiV{Jƒ¡mÆòg›¹…šÒ„б}¶ÚÀÝîÿ‹‘¸‡•³Žw¡“zšRl™=ˆ–Vy¢G‹ÄDq’4a€<{”eƒ›ps˜gVY`~fLlDUob–®XŠ®wžÉV\…EH{`do…¡lƒªp~–[\~_{™WjW|¦]iŽA^u:UpFLfUazceyRc~9\nKYz<RjMqWx’f¢Pj“aeŽQd™v›¾LYp?lˆDb€Hi‰]s˜k€¥]ƒŸKc‚J[~t…\b}Nže›°`}‘DZƒK|³v™Ëk~œRdŒXp S{ N]‚[q™YgˆN^yN[vVkœdŸc^~hyŽNlXXmPs’R]|Vc„ox›j˜ŸYJe>=[N>Q8DN2AT4CS)BS1<L.DN,UN%Fn2N]BU_;uZ6\‚LQ€hPiN_]DzeDv—Uo•ju†c[„T^eTLd;S\=[]3_b1lt:mŒ=oŒW_TMoIG\7X_-\i#Rn0PbDcdDcEU†RVgC_]Bdj2pg2]†5\ƒMwq?_“Tg€JŒvGÇ‘AÿºtÿŒoÿe%ÿl#ÿz5ÿj<ìQ*p'V}Mi`?oxB[{A]l@jsM‘~[œ‡D…³`x kq”j|‰Wp˜kXul`jC‘p:—²H˜µˆŽ_„šRl’Mr‚Rƒ‹E„`†§_„¨ag‹rYŽayqDËŠ6ŒåoT®}QkZgk;nŽFUšRf]hŽEaˆY„~F{ Wp•Xp’KeHž…Ak½[‡Žnˆ·a­w„Tkˆ…PŸ¨\‡Ô€§…‹ T·] ¥z¯a“²ry±x³¤tÉÔs–Àv®·mgŸ…]}Il…DuS•£‰…¤Œ_IcuE„y<P‹QQp)o[/­mD‡Êe‹nc±Y·´c ¨XVi‡PjuWkU˜|YW€xQXNoh&z:ŒR|z\µA–«_s–P“n@€˜_c‚‚|^Sz{_jZ=M}=Pb/TU;ia$”`HX„Ra^=|s/u±1`}M`5`u;c|4—z;“ÀMz©±w¨Éy¿½n‰Ô~§ss•WGx€xypM…›ˆ‡“c£mhqt‘qP‚ Aq’KG’?tj}£^e‹=Ÿ‘I ×¢¹•¿ÃN¾d†§Lr¨`d]K–i;£ˆ£±Ý¶^¸ø²¦íyÃÕ}²ñšn›x¡T‰“.¦ÔEVvPrŽhZlh¥—~À.QD1’pH”ÄY‘¢T`eYÀI&šx~šwM‹}š–Š®£È§Ÿb´À®çÿ´€ÁZò›G]¶y“«`qšs¯¡(x¨‘_ˆBn|#‘Ò/ÿÎuj\ŠÀÄ—™GmÍ_omE“°¢w£­h†‡®{V†™D¦˜oûΦ£X™±T†²vkø¥`S;nTNyw:†x;š¬wÄ·„—Õ…wœpY™KtfBds;ªpFÏ€g°–]à·[°vl‚B|ŒPr¬Uz–Bb¦Tc„9w‹D‰t‘¯x{yVpyBŠÿg[‡5|™xPd*gm3uo<|Ä9c—C’>¸Ø­²ÖÀ‚Ü¥q—Vmt)¹´o|¢}o“uŒ‹Ws«_„£DnŒPml,zx6—œgË÷‘v˜`“·tÈÆ‚Æx›Î–‡ƒL¢•smM“®Z›cŒ¿rˆ¨i•G¤»}jaf|Rm‡€ºwv¢qttU`8[z7|R}Ÿa{™ZbgHY\.°ÊM|—kU¡F]r`¢P•Ÿ<h„Sx‘cr¬6ƒ’]¸_v”Lc†=am8z;tŒG|£r†Ÿr€¡NŽMrCU}9^sANp0JfC—PV‚Dv¦OfO{‚OWw7iŒB“|ˆ³w§Èl©NˆkÀÙ™³É¡ÄÔ¦¨Ïtž¹}¿²{–§\u`r‡>|ˆ[¢«]y†|´³Y–¦gžZ•±G†Ÿe®Û”p¨?cuW©¾™Þÿ›‰®{’¬Žs˜?ey@Op4Vs5u˜„•ÅZ}³Nc‰Yˆ®q|«Zx—Kš¹nl˜q„†¦ßÿ¦Èí¤—¿[WPW|k|•ŒÈñˆ‰°gl–Ht‘P^†>f’Jq§ZšÂ‘šÅ…‰ªLTvDdeEXgLp‚Er8VvAgˆKe†a€Ÿgt–£Èçj²Ky¬]޼lƒ·‡¶Ôo‡ªYšSXn=@iVr¯hy§MnŠIv‰Ib‡Ge}FZmH]tCUk@fˆ?f’LZsJ`…Le~NeZkr;Nvq¥¹OSmB\|BWƒHZMkŒm’±s†§Wv‘Df‹]€ˆD|¡c¡²{{¡b‚d›¯q‘Š§ã‘³ÀVjˆs¤·v‰®Xiz˜Âag~E\†@QrVzœatHQsK]Rkd–­i”YeL]rN`{bvˆce‰\H`H9TH9M5<F)AJ&3Z/;K-DJ,DP/VT)=d6?OEDR%WM%W_/JzH<oNFK:`N-Vu;cqLskD]|DUdKLd;Q];a`8vg6i‚?aRYZWwXSkPNZ9Sh/Li0?\4AP8cO1^~.{EoœLpZmŽNpyE`‚>T‚UVs>M{@Ua@ˆb.Á…6ÿÿv_ÿd'ÿo#ÿˆ=ÿ{Pÿ[4N,V„]PfS]i9Rv;ol4Š8‡—C†„Gm£a‡ŒkŒ¥`z®yˆ˜‚{ƒlj„ZpuCd‹M…m–­a¸l«{udpM~W„˜Nd±tDjTLZB c3Ä®:ôªLœ¡`RI”y%†ÀMj©ooU‚‡5c©Qm†Uv„Fj‰S…ŽMw«V¬[]©M^|fMpH9g`@Y>{\/‰ŽFY›kW„L€uOl’DuuN”’Spµ_`šlS€Wyv> šLn±‰¡c’šQmªW`…Nlo@‘†9m²yY‡_m{=¯~3k˜PmwBšqD‘e³„D{¢ž˜‰Hœ”š¡f£ k¥¯Y‹²h‹e™ŽEŒM…ŸO²–MsÉWgŠagŠ@y„>‰³Sh†X–t?r`]q8kw9Ž;ƱTšÄn™Ä7r©?ymD˜ŒKv©X“s=’Œ=n±wj€5¡‰AW¡M˜u0…ÕdjS†~S|K€´i¯au–lt \|‰I¤LXQ_b;j€6EpQZ`5´z'£DW~LY{V=v9m[À²LÐã›Ïò–Íõ•ŒÔ‹DzeXN1ei9…iIm’a‹y6“UpŠq£ {”‘b Žf¨ŠU€:—`:ÎäŸËÿ”Òó¿žÌ‰¬°RØÍ\Ôÿ£ºñÒmoD¸P¨ÔYmÁT—m>ɦF¬F™¸ˆ¤l—ÆU޳ƒ…™UÿÁÐÂÿ˜ÊÔ—¦_¼’ÇgÒÒNÏüœ³ÙÑŸ¶Vg¢l¤šb©óÖ­‹Gf3²|KO8_ƒH|*‰x¾‡z¸TáÕlžõy‡BegL²“J^Ž|…AÃæ¨¨Åx¦d”“b–†LŸ€EŠw^}pYߊ[fxPmh6~J§”d•šY‘pM¯òŽ‚²pz”ZŠ\_xH’€^”¡|€:†rY™«S†¸~Œ‘By¨I˜¾ {›CUw:Oz0iy@œHt–Wa™J˜~^–´”ƒ„ra”{n a~|^›¼Q}†=§u?zrA~†>b‹@e_mœ_†=b¾\|“Y{•O™åš¤õ¸³¦–ZÃA››céÛ¥Åÿ冺€ˆ¦J‚™Wo”aŸ¦k’«x’Q|CJ–7‡šOv£SwŒKRl1gOe‚HPi1Ye>pŽ>«ÏkSz@|‹BO‡4On7amHi§[j‰<‚”fq«Gg„H’¨R›Feg;…z>r”\\€BcŠK¹¶i†•l—©j•½dQs=i9Tw.St4rn;Y|=y\r…E^~D´±N§È†Éµˆu¡\¶u‘³c´v˜ºŠ·i”Ã’·d‹ r‡d®d‰–p‡¬S”¬]¦§b¯žT§¶|£¾q|޶qq’vg€s·¿€u’Xzœ›‹Âj{•Vbˆcp‹S^u4[}2gŠ5b“\ް¡±Ýeµãqk…tzše‘c†¯pXŠL­Ê«¿âœ¾Þz‰¯—Ãç^«Ö£Æ„¸q¯ÓœŽ±q¿p•Êo¤Êu­Ø…¦Åkržq}¨l•·_…¦BkŠ<j`°ÅYh|NgŒ>FpOš¤b›´†šÏ¦ãü¹æµÝp…®”¯ÍŽûû„ƒšLiƒ?a…hƒ±mdbbŽRkŠPt‡WYvFNnFPsS_{KjŒO}¤htš[аWe{9K^7@T2OoYˆª[Sk8KnEf’^’ªKk‚f{˜gk–h{¦Z}¨e{”Oz˜^l“h}¦{ªÌv}m€¥†ˆººßódŠœmq›u—Sc‹yˆ°kv’Q‡¶Xl‰Zad‰•Ce|Gk‡ObŠlxœq…SZ~Se}NWtWmƒPc‡OZ^GBX><Z9BM5HJ*<\5AP6;U.5K*3C&+<)94-I="[R!^_,`{G[|MagK[b7Ok;^_Cnd7U}@HhHNV7YZ9h^:ox>oƒSXdElbH\LPX8[a6Dy>RaBDS3?Q1uI$_.hM—HY tbx^gvJv‚Gj›]Wˆ^ZuLQ`6c['Òh-ÿ^ÿiBÿf"ÿn"ÿŒ;ÿbÿfJC3bpCjlMT{8ko>‹u2 Gnš`™†Rl¥c¯~`¾Sh»±t}…nTpŠVV‡JUwV™zL¿œE¶êނ߭oœsЇY†¤T¡˜R„³ƒ_bA]?KG,Áf-o䕜‘’œNƒ©F²ƒ€¼wa¨gZ}B_€DKyFke:ir=pIƒŸ?ž\cWE€Y_a1mŽ9;’<6X"HS#2UGhX(`‡9ivCl„=b˜@cZˆrn¯a^Œ=`‡=nRrxHz—:Ž£nŒÄa‚¸Yd²YmoUv“E §O µn‡ŽU}zGˆoD˜†IÚZŸé vn„šb›hµŒa£ŠZ}‡i‹gRŸeF ´^ÇVÄÞsåz}QOSƒqO«§[bæ}ivD ›gȼ½†Ñ©”â”—Ãj•¼‡Ã›~¿«\›Œ„¼~“šx®{h‡¶t¬š_‹àpk®\…“K¦ŠcžÃk†ªr ‘Dƒ§boªeuŒ\p£WªCa–\ŠgA]‘^e„Ctq4˜&ˆKŸ“:Q}USU,jh#`˜4wa‘¥¦u¢šÃs€tµmBrL>pxE³?§Õbª<vŸ]O™Fšk6n¢v•™e´¶‹¥ùq”ÊJ´ÜZËê ÕÚœšÌ•ð”À΃ÎÿË¥ÿ¬©š®ÅŒµïžq—K˜­{ÿÿœ¢ÿ€‚á|›ÑS·Û´mk]nR{„0ÿ®[ŠÄ’Öu¡`£à}ŽË«–àär­ð¡f±££’a™Òu„Ú…ƒŠ=‚b)tÑ\ѯL´ÿ²È½L°ÿYˆœuֽޒÏV¯ž5’³nÕä{‚åZq¦X•ß–²Æo„Ö{¯`µ²oÁ–Hj?šuCï~KeM^s|P·_F…ž€Õ¹€¹ÜŠ™yv­\u~Uy€”{Ž’r‚;Žq4ly7ÇI¶‚Àuz·j`šG޹‡x€d•™sžCs¯9e—BjŒLq„Lao-pƒll„<‹§C”ÌV´Ä¸–‚ŽJ‚¹H„’FkMi”.qIGNKp3Vp>dw6fj@wÃoƒ¶™LbXqwak~1ÅÊ›]”NfmG^CŒ¡W}µOnƒ]›©sq„ehvA†²V¡Kt¶qWd:Tk7dh7mƒ?©©—„¦@›»hl’<g@byCkSlrEUx1eGƒ’HTvSg}Xt‰Fšœh‚–NtP‘™LtÂX]…Fm9_~Y~ažbk}OªIQ|0^}3p‚GŸF”¸[Œ§uœ»d\{B£­|qŒlr”efFcƒIµg^wVŒ¥Py K{¤Yh‚UˆQ¼ÈcŠ´tª©{¨W–«xy”`‹cn†nªe¬u‡±rs•=§¸]d‹LuOSxWZ|BTt9qTd…2CY;Ba4XwKiŠQTxh€©Ys[[qPk‚OZpHVs;r’\¡º[k\³gl–h‹´ÃÜ‘¿Û”Öö¯ðÿxRwf³ß¥¿ápje‚~©c X`V³ß¢ÅèŒÙów¿íƒÁo]{>[‹8TCBiOX}Mi›ey¢¡ÈˆŽ³ˆ¨etšŒ²Ð°Ê\mŽFR€v—GOqKa~Uy€N]qC^rEgo<KZJi}Wy“Ic\^‚bVw\c|;Yh3Mf2YzQ‡’Td8YoEmŸs¥OjƒPm‹S…¡_ˆ¦m…^s’NiŒNjŒas§‚‚§ff}i˜ uk˜¨¸Ívvœbƒ§k~ŽI]ˆfs˜^fˆerœ]e‡Sy¡^o†Kj…Hh~M[ƒamŒc„‚Oc}T|–Ul…Uk}TlŽ[YXPJU5G_CHU@PS3@`8MR9;X.1L3,@(+2$@3Z<ra'Uˆ<RoNcgEn}MnvB[Ob_Qlh5j…G[VTlEd_?x~;g“Vd€ncoYOt^WeHXg6Go7?gAAYEDF-FR+[U)U`S]B\c9gU„zP{—Fz’R{™`sheˆWOw;V\3öd.ÿ}?ÿf'ÿeÿr!ÿ=ÿŠdÿjZöE5YG$Uc/^c3›t9¥šAƒ–bš‹dz`…–q‚‚Zw”KQ‘ba˜™B³u‚˜go˜XŠ_Âu@ˈŒÅ¹xž|’‡dš¹hœÂu‹¹zv¬gG“hy[5®˜+†Þo³šmÁk‚Šbú•báÿÅÿ¦¤äx„¦eR“RYh@s8~³T†¨m”¢`u]HŠfvo4qC]¡TO‚K„z)r¢;z‘;b—9TPln,|˜B£Q‘™Z·µR¢ÏtT¼xƒu?Ž¥Ku­]ƒžs£›^§h›fiŽRk5 HqŸP}…\½­9çÖˆ˜´…Ò‚|±¯pj³šRpOb^?†xA‡rIª~J›IÇzEq¤W‹_W–£O¤¹slË€g…Fg>—:…–jgŒk‰‘G‰½~“®“€¡_n£lbvPs7´•T••e§§^ÃŒX„¦‡]Jxd;݃bjÚsfaoš<{qN ˜S—Ćdšoˆjc¦ aV”Cxp< ’@…’VbyJrŒ;T£K`w6‚‹Il‘fQ‘>”>1dr<LhEIS>Ï—AæÿµžÿȵP€F€±Ype:…Ÿ=Öª>«ô²¿§uŒ¿¦¹ÓŽ”‰^ÔèzÅáVñÿ¤}ÿë}‹X —]Ùÿ„Æÿ¶‚´ƒeƒK=}®Ž`J°“V¢Ís™Ý‹k¨=×¶jÏØ“Öœ‹´unšuKŽÞfš‘A}Zy¨c–uwÑ‘‘”KRdk¦¡a]8oa[·tuª«ýÀiÖÖuà„Û°XÅûš½Ç³Íá±´íÿζÿÑSˆC«|]Œi‰_=µÎ ×ì½Òï°zÀ‹îFɃuÎî ž¬Œ“g,³–wÒ…N¹±xÚD¢¬v£ãyî©•ûËbÐ^{xdŠˆr“[s‘2QpO†{X}ˆ2¡ž@v‘‡…ŸO|™^¦e]d=|:M‘Œfp‚M‘‘Qmrt—Ÿ@£à`ašP\ƒA{‰Y°¹soŠS¬M‚Ĉ–P¤~µE’°c‡½AŒ”AvÊJVÃ7^r)r‚Q œM[…OHf)›—F¿ßvr«Sº|f”/`2r—Z§~T_|Hb|Hޤ\QG Oj4€|[{™`l SJy'Re/f‡D{£FeC”¥dŽQh›AUz?lw>a‚<snKxŽIa‚Ce„R_y6e{N‚šS‡ŽCt‹\qšTSl4i¹Em‚>[ƒIi…?uPrŸPn‰Kq¯a_–?[y=‰˜BpŒO†Ÿfm–K«Ä¨˜Öcªº|m“EƒŸH^|7”°bi„G_yGS|3¢xgŠOeˆ:b‚W‰½vm@§£¦^‹FÝÞs‘¬l¢ÀY~~Bu›b„«woœHV‚HŽ–xˆ¬H9Z-cwBGo*Gf+<f6b‰7Nn0Ly)Vo4Tƒ/Rk=k’WC^1nGa|TZ†›]™½cx¥N£]u£M­Ègi—V©Ÿ—”Ë|¯ÌÓÿÿ¹Ûÿ½ÖŽŠ¨T\ƒ;cŠU£Òr…ºj޾—æÿ˦̋­Í¨¬Î‡¶¯ÊT‚£m¼Í^·_v™[¯Ì[lž_ޝXy˜L]Qv›cXˆ†ºg¢U}šsm—C]u7NwMHc;EX7H\FWj9Bc2A[T_}9svLhƒMqŽRˆ¯\‰¤FnƒCh~[}•OnIhƒPeŒV^wGWu@X}`Œ ap’^qUl•\†¢Nfˆ^‰«hФ`v–Zs[p‘~•¿r~¦dtŸnuH[[t—WteyZz¤o„¢Q`Mi‰E\~=TzHY}Ze|JX|Y‚–cްWp„SoŽ_PYGET57\A>L?NO/GW4]S;Qa2B^?;N1@H&gH'xo%~8dZPwf\jE\x;rpLbˆJamWhl?twKaŒdqsSz„Ko‡R`‹d^yuojTf~UjƒWc{GF~PDfL;_;GJ0OY'hY/^c*c^4qd5{‡<…˜G“a{–fo•a}Y{›doˆVXyEÿc7ÿu(ÿc&ÿdÿjÿŠ5ÿeÿyQÿb/øE~V.__%{:}—Gl„\ƒo`‘šR“ªmŒ£ce•P^|\–kJ¸Kƒž›–{\ŽdXoS‰e7^”Weuo~Z„‡Pš¬k‰­li¬Œ}…\k—e‚SޝQo½pm›n`†bo}GÎKáã†×ÿ¼€ÿ¼u³ŒsŽ_{—RœF}®b}¦oc¡`ƒ}ox•KŒ§J¥bz®S£_‹·a‹¤eêºO–ÿ^À~³:ÔZ œ€ÆÁx¾è‰Û¬†·‚‡µW‹¤`v«|‚žb¡£Z’Äkd¡lpŒNu‹8r”Qy™jd‘s~;¦¦l‹”¢\”«Yg¤«e?Zl<r5µ…Vÿ„C¯âŸk“gkrAEy-VL;x^Nhxe|yBršLwš=zŽO¥•E|µdm™H†—T›œikžPj€5h•+‚€cwnHˆooœuN‰ m]lWZ-¯‡TÆÔnÈØi­’Y}¦Y¢X±¹|´Ø³´»™›šKˆPˆž@¦’C²»]«ïv˜¬dT¨]tg?a‡q_¢VMh*snlW;°„?‹W{‘Qj”R¦vIjâ¾yk=•¬Z¯£RŽämb£W„\ZTÆh‰s7´ÍjjÌ ð£cÑÿýüÿƨÿà—F ÉIȾ˜¹ÿÑÀŒåÇm—æ¡„œbDh<³],ŸùšÉ©h‰»¢ÄBßñqõ휃´‚j‚]…:x¶g‹€Cr¨\‰>–ÓW“¤L~«TIs>~¡/^~6Tr'WŠ/aƒ]ÍÔ†ª‚n²pÍù¹Ãÿơߡ³ÍiªÏeˆ«uy`Jm>ޤp~¥7d¥;Iu7cnA‚ c‘¼WÒÜ›²ù›§­G¸Áeó[ù­i¼÷~¤³T×ÿ¸W‹|†r;Ý™Ÿ±šj̈[—Îo°§]ÿíQ‡‰Ji;p£”\l7ip,{©ŒiˆK’‡]ts3ŒPcŽ;x†^œ‹Vx²e{„0w¶jZw7‡adyVt“Ldr/Mt?HnHz|B}~Dg‚CŒ Ch¶:Êæ»LÚ~¬ËƒuF²U©ÿ¸£Md~[¦~@£Áb’y^’·|¢¯uvŽZm´Gb„8W‚Jf‡AYu5p8ew=jz5™²czšC[ˆHt€rtƒpv’GmQ‰¶eÎZˆO}€Obx8WkGbmEw“Q€zKfy>u|FbŒNmŠ<š§J•ål‹³ihªSL{<Ln.i£Jp†P_IˆTb‰Br¥hŸµrz¯SÚqe”N«ÌŒ¢²„“²i†Á[ ÀŽn„Xj\š®^¤KwZ‚›cOn7jƒRbzWfŠU|R`ŒFgŽSb~jf‚W~ B\>“–ƒyœn|ls¤R‹·`бq[„KŠ»kyˆQh‡Gc”,eqbfzNIn5”Yˆ­ES>j…Om˜F|¨Teš>iŒD3R9OaXj8m€Q{•fe˜ZŒ¤Vn—]•¸^…±`hŒRŒ–}†±xƒ¥ƒ—ÁÒåÿ{˜qZxA˜Ëq¨Õ|œ¿t–®l„¤l½ƒ›Å¬Èqk—Ed‡}x£ZeŽlmœjw£o‡¬pyždw¢ScˆUjCz_‡©{Ï嘣Ìzi[b‹^vš\bŒGazNz”Ruu8dv@ZrUe‚>Yw<_qNs€RiŠfy˜r»|Œ¥]vDXtKe€RkŒQr‰]x‰G[~F]~Cb€Yn[o‡X{ŽVq“giNc†Zn‘ew•`q”axžb†¨}–²}œºd€¨`s‹Mb^mŽ`h]d‹dx¢fi”VrŽToM`ˆE_‰HXzGbˆI]xPi‡i‰ªZ~“Pj„T@Q3HT04T4>F6>M+PQ+eO/ba9OkGEZDRQ:f]5rp:b…O\]PfUXlEXn8^nDvvC]XofLmp=g‚OrrS[‹QTxg[lckkTvMqQhŠe]~[Qz^GfNE^:`R/]o4bf9^n4sdDwz:~’E—]y£g|¡z„^x—X{Œd|…\Yš\ÿfNÿr2ÿe'ÿh ÿq ÿ;ÿŽaÿwSÿg:ÿ[+ÿR.jU-h‰OaŽKu{JeG~qE~…N”‚\j‹Ukn]†n=p–Nxƒ{†ˆZ†ŒY”„]¤¤I¦nŒ o‚§Vi©Xs”b†T޳u…ªre°f‚]Š»Koºhd¢pswGˆœ9\«^„v^—u²¹š]Å•nLjˆD¤Qfµh“…‚‰®Ov—h‡F“OxŸv…—El¤vY‡]PsY±l1ªÍŒlâ·c˜QW˜SxtO’dŽ¥‰™º¯›ÆgÒ‡‡‚Q}­oЉ´Tž®e½ÂbvÜ{c‹O~€T{˜V±¬V~Øt‚ž[ÒƒE‰ÜŒ•Ÿ†f¶w„G˜§Co¼T“‡[—uDÊcx ŠdT[rW8A'C8__$Yi.esKmYSr4¤y+VÏwDbI‰e'Y¬G`yJY{AulPމTµ“OtwnmuUkr[‚a9V†4nJ2fb>wj‡rZUxZu\T¦¦MÃm„ ‡¶to”a–mršP’˜S|¶nf€d‰E`œMTl,s2t…7Mµ*ql.©£Q`¬‚pi;²šKnÛ}s{?‚zH§¢Mžªs‘än…¤ws§=‘wu”Zˆ”Tp“u¦ŒZ¾Â¾ý¡VÊÒ—uR]œj¸pE³­ØŽkÓÙ•£áµ¯°ou•dÉrI‘i—™q²ËD¡Ç’¤»Œ°Å“¥Uvzho7yxEk’YyA’©Bɼsàÿ¨ÿªlvIm“s£‡7~ÊYe”M{•2qÈ~`€]rˆl»¬’²ÕÂgÍyÓ¯r©¥g`¾„tÄ|h³Uo:}rexx‘jŸŽdx¯ÒŽŸÅq›¥ui†J|h9Š‹tšyDø±’–·…|`°N]&œ{@²›oŽSÐ’mÄ„i‘®…äÁ«Ý¼wÅ•Zºujs¿7‘•l¤uAƒ€Q•ªY‘…MwžG—”f™•EgkR^ˆ]w‘dc‘@mq5W€J]ŒHh|R`=££O„`t”K‹m=ªÕw¯®s’œ{me‹¥±Œ·›Åœ¬®ÌQ Àiãrˆ«T«©Vº•]²ð³•»_gº[ywY~”Wi´Jw†`V}%†¤\z¼6Zo5`n2{¤qŠ—x|€Ef{6^…Fnj9[i2•˜T‚®e†®s[f8Nv0fwB~…?šŒG“PlzFZf3ŽŒL]‘KLo4h|l‰Ÿly¤?_—ISj5Sl.t”YXoCw£Gi”XX}5m–RTl=l„eYoG—Áf•Ãv’¶Z˜SlˆFƒ“] Ez{AduUQ]FKl<K|;Rl<j~[’ªfq¢Z–Åu„®ce†8Lh)Ng=Ébz«Df‹<|Š^}‰Xg“L{Žr‘¼xžÒnµe‚¡bm™Wk}LDQ1E].u~@ZsO“±€µ¼oq‹KNlO•ž~‘«_i4Ih8b‚EhAZsUÎÝ~”Æ[]‹H]ƒSŸÈ†v§co•Hx€k’§kLƒ§€¾Üt§c²Ó‡¯Ð Á߃s˜Ir”]Y…F‘®—¬Íyl„Bm‰FYzDaIe‹Zs¢d}ŸXkŽ^‘šMp?Sw<_‚P\‚Tsžzƒ«†—¾af†QŽ›Qqœ[‘¦Z„·^Œ®o‚MfpCVhLs†CpœKgs@q‹[~’Mr†dŒew–Uc’GY}E^}CVOv‘R^|Np†TlŠPl~N[|Ul†JVvTq“O]r=PxK\tD\uEUoN\wVX}beŠv‹½o‹¤`h‹ZtP`†T`…KaƒbhŒ_t ]pYoŽ]o’Vk˜Mo˜Z|‘P`wW”\r™`˜NxŒJ>U/:R1;I-LG,EU%Oc1PX4Vd7mkAjeFncCYo?`qHalGarS`lFuv;uxCiŠV„vN`ƒPeXU]h7Tn?iUAd€GW}eTxWgeHŠqDn™T[oOvWWhOVe<Rp<_[8Zx5PoKMd<bYAv~3rŽV“V‘©cY¨ymv`do7zr[ÏzW‰»_ÿ‡iÿGÿ_+ÿf!ÿp"ÿŒ8ÿ’fÿvSÿR=ÿE$ÿB'uJ*Z€QWnAkk9Z?\gFd_4ph6n~GT{Sip9o‹:‹ŠRK’Z{€f˜yT–§o¦ÂÑËr¢ø‚sÌžw˜\Ÿg¨czÂr›§`¯Î]pÊŠS—j}:^«IT‚s)oFE7)n`2a‘TU}Pov4] Rm{@“XzºVa¥u\sJcs<y|Jy‚3H…R:k9:V'r]j•M‰–os¼dD”akr.‹}\‡¨U¦¡]£Ñ€r•J™[]oI­„@‰Ãs ªz“Ód\¬”ƒvT¦¡U~¼o^¢qYm^qhC˜‡M€¦mމS”™n¡™O­ÄoÙ“³´n¨ÚSسN‚…Oq}VItb^h2\h.^h6e`$ˆ6e—P¡ˆ3ˆÖMƒªWr¤JkŽipˆ5¥‡4±8£—L“•f{k<¦z>¯µ`•¢`™ÄTw‡I‘_SlqCÍ3UÁbb[0„YH”ŽUº`N;l™n|‹8x•HƒXpšX¬€B“³W© zh}Vº<wºR‰°@†ŒMЬj’®tT¥lXc1hƒ@££&q³cwLV„MvZ’ž~¥ßjZ¤Bmu%Iƒ2©b>¥Ý~´ÐmËÿ¨×ЙˆÖR²–3ß‹2’ðr½¦QÅé‹Öœ®¡F‰®y°”L«’MÕŽD±·‡€ÂR·Ÿ_Œ¬‘l¬xf‡nTYh5q^1Þ¢yÎÿž¨êš‘°§n{yKc‹>w~Ql‘S¢¹ƒ§À†y“ϛaÀ®{«ÿ®½ÿҸМè·F¯§~ÇkÑô•Œÿ±¤­KnØLin<pz;­®e‘Äzª‡gŒOVDht$eŽA„Eœ³a ¡8ÍXgža—žG|§S®¶m´jðÿÆŽ©ZÛÅhù—w³›ŽˆV±|ewªm“^sˆH…šF¦¶u–ÄŠ‡wBØyPi¢sjxCg„0j‘B}[p¨FgŽLP”5Xl3pˆFg“H¡yF‚¢fkZ…ª]Ô¡tc‘Rq¤>޲NwNHj§QpuRs¸lrŠXj‰/†Œ[†·¡^~^b™Xƒ†9i´C`”WFc>c~2Nv?om>c‹6ž‰9Ÿbˆ•M•¥sjq6U2žoOqtA]b2n q—‹‡_§*a{;Yl4…Ÿa|s;cyGdvY‰§b…¢s{“>kœ4^€/p’Co™WZ~:X•6Pm1Vw8kz8}ž[^‘LW|9dŽ2[o3]z9UZBRtAOt8@T)Rm:¡ŒOm„QOk,Rp6dx6`p2Ni6v¤?u©Bˆ°R|™xx”|œge~X„žYT1i‡L‰™rÈû•”ºIY{JiNv¡Xe•>\‡lÒÌ•ÇÞ…`\€ S]|:n|1pŠ^Ž»dxŸVt—m^€Kb{M]‚:g€\“°qWAs¤\y”yvšEUzLft™¼yšÀ`u˜€Æ÷’›Ä`p‰Dv~H‚™Tv‹@m—W‰£k‚¨f†j|{„µec}Sk;jyHoŒz§µuj‹A‡›A\u3S‚>Yƒ^~°hnœKf’Vw£]ŒGW‚CpJ[„L‚ªp}¨cjˆYhŠYh‡?ir–·m‚³[¯kzMl|Epˆk«¼`…§y°Ån«|ªl˜[t‰YpJ]BRxI`„BTtIjˆIVzF]sNduViuBMhHeˆB\ySeƒL[}@YuKZ{?Tl7Eg8Mj8EkKTwm†ª~•²[s”`w›[oHZ~Ga‰Zoct™bjŽ`kšds\x©oˆ±r‚˜\eb|c¤l…žX“™TFS*=Y,=F3JJ)TR'Wc5WkCZhAWg@]Z@t`<rnBZTevVtsNgrGgpQllC[sEIePIVANVDUZ5Bg8dM6pq1\‘ZYvdZfIjm8^‰SH{_CmLX^@Rn.GiBQVAS_2^e@Sa>wd>n‹7a‹\ZWeyPTTdkPou2d…GòkN—ÃQÿŽÿ}Oÿ['ÿj ÿoÿŠ<ÿŒ_ÿoZÿV6ÿ=!ë<#^a'AuTJX8’W0k¨A–{`Ÿ8ž¯\z½hx‹ZnE‚‹He—W~}Q‡…Mv˜m¡HűHÑð ò瑺ÿÍnÖàs‘i‚¢_”®_´uË©sªì†{×¥™ªkƒÈPœ¼pzµ[X’__j4dwO‡_†e8—œ@s¸t“dmˆBq‰`TšY_uEG€BSZ<Ux)_a/E6[d/N‹(cz8›3{»g{ |•¢eq¼^JŠR}l>’b… p¢H|ŠDŒªK‰±dm¦ež…YpÌr€Ue’Aa€sPkE`d;pm/^pBohhr…MEzIšL;¬›cwÀv³˜O©É…µ±c¯“w‡F\Ihz;¬4ŽÞ]b±abl8 1ݨPj³‰«hzn”jdzCˆv4hŽ8}u8r«c¢xZš‚YY{T€<F]†z|vbX–clR€ºW|hHó¥GXLJBC6C5(vJg„\tˆ;[¡M€|+PŸJkn<y›H›£Hà–ìÌ‚‡Ï‘À˜NºsÅ®A†ºlic‰|R¤“ˆR©€prAs|ZykZ”M•( –7Í„ž^‘¨he¶CˆuUŠ·T|‘}‹˜m¼¶U£ÔŸÿ³tš’gAda—N5ºÅ”œ¶f¬È€ŽaóÔj±ã™š¬x»‘Q Æb›Âw•£nƒƒAWªhMh'‚6q·i\w6|t8ÿk£·Åz“Y¤HgvMz™E¦’DvÐzds@Ýr;¤ÿ¨Ë{¨a›µ·ÊÛ³ƒ›x™œZw§jÿxH°ÿåÿïÓ‚Õ‹}Ë”¦Lx¯N„„Dq¡m”kbƒCw¢SOf-:f –iµ†cc™Q±p¡Î€¬àŒÒò»ÕÔ|åÿØzé’ w>¢Ãlú䤸֖¢d“Ÿj‚SÿД~B°®Eª®f«º‰¤µ\ù´m«¶tࡆ‚D§¾e•‚NÏoªYj‡<cœ6m£Q¬²evIЧfdm3ŠF©g[y†I©g¨î»U‚Sˆw3f}Ui|-yCФ?\BmN“©pMrA_}1ie5t@žÞcpš8`t7y€3‚5“ºQvŒO‰œT¹âŒx¸_V{6oŒ?hˆH|œFˆY_p2Uw4ay?xŠM¢ŸY˜^Yl9a€:u†K„‰W°UUv9v–CEu<\nTYyK`tQ‹VgŸLr›Lr•Hv”>d~=…¤\´GYq3^x=…ªfhbÀARo.fƒ9l„wˆ¸fq4l“;z„BvM—­b Ë…Êtµz‹¸nˆ vzSb}Ry¢[W€7bl4_mGs€Vlz_ar=`€fLlTl€I…co†h¢Å¢­Ðjs—Gc€AlŒ=}§n·nwœeh”QZŒ;Y„HgD`‘Pq—nU|M…§tzªeh˜B`…GbŒPe‹[o‹m»å–™Ï‡•ÀPrŒDpHj’[†´q•½{šÐi‚®[o¦Lަkx™KiIt…EsSf}_–®u—¸h‘®Sc„=nJ^‘Sh’b‹ºly¥^y™[]‡Tf”It‘OoWn‹VxžgšGpL]x@Kp\lŒm•¬i£a›\€¥]|œz¦ixžm„¯ej†\^€af„SkŒKhz6ZrBi‰H^q;McD`m?XpNtŒGbfCZt;VsHa{L^€LVkJd„Ti‡K`I[o6Ng=Tk;NnHNhUY~fj‰dsYs˜už£G[yLa„PY~T^€T]|Ugƒck’g|£u‡©uv“cl’j}¢mmŒlvnˆ“YOH+RM*HQ/ET0SM-HW.HVCd`GicGb^Fqc={xHbˆd_kh[_FT^;UbAV]<Cc89Z@@K3OQ$RZ-dd7kp9ns7_“Rb{d]xNlvIuwGXSMpLblKRt9LtE[e?Nm+_j<oa2o|@`J]…]^|OcvNY9dn?iv>`„I·hH«ž@ÿ˜“ÿxJÿb&ÿf#ÿj#ÿˆ3ÿ‹aÿjVÿO1ÿ9¤H#Qs.RjT`k0zn5‚’KwŠcšJ§¬w{Ä”ƒŸ|Zšc_s^BsO]UM‹k2Ьb’¢`—¬cœ´•œ¯˜b±°o}¡u’`‰˜]‡£`‰ªmr¶[n˜|i‰iž…WŒÃb†¤‹i¬uP~sEu?Ig b`<ƒ{:ƒ¡dW®ˆiyh€„E\–d[ƒS]x>Tx7Pc/Tf*‹g1u»EŠ q‡µ\x©rS§`I‚iYsNx~Hu•K~wh9€_džRU…Jce'XpF7hMIM0Zk4^uNUx[Um;gsAT…9m`1ok8xw@ƒj@–˜g}¬m©9o—C‘xO”£M»¬tÿ dõ––—p‚›NÔ…9ãÈYóÅ”¤«žÿTŸ×‚ɹd²æ¡ÿ™_ü’©y?´°aÞw•·]‡²‚ª{R¢T…__p?Rp2dm&“v2fªikwWjvYªyU›—gK|$u³@–ˆ=½ÙK¤Ï|`ÂUj’?w„:¯Õ]pŒZÆq¨³œ«¹tŠT»ŠLÕÖ£‰Ë˜e¤XeF@REfa3Gi6^`0;m,˜„0ÂŽ‡¾q„“<–´i˜´’TwL¨¤Fµ³wŸâ[—à;”¸;}ÄWˆrw„¿|€†4”-š R‰¿njÚYœPlŸÉŠÖvdU€vG§ëž> ‘Äg5Ÿæ­s§mTd9nš5Ph›i¾¡>©îh|ª‚vŠÁ[{€y”¡„yžnx4c)‡?[ÄÎDNeorNëºg¬ä`dª3exFl+¡«?¦¦‡ÿ¿wþᱤŸhÍË[ÀôtºÖQ¬Òz]Žfim0N¤~Æ$Ÿÿ?X¾PŽ}r§£Ÿå›Þ÷¶X}@XGcR¡l|ª¬°uª»DÚÃq™“l¦qÏ—…úè“q7ÿ±‚¤\ ³]“­~¨–\”mŰw‚[ÿØ‘t¼z“…mŠ}]‚·xŽGrCb@®˜IÐ÷³^–7~‚GQW"~|Sh…3˜]|°kˆvŽ–Ddt6~z5Ìóq‰ÄN½§¢pÇWJ€:bžL=R)·…~ÿ…KUZSY@`eH\h9~Y@‡|MŠ‚QmlD•s­Ã¡ˆ²†ž®O°hœÑ]§öLµUb„0ar;tzM’¤Sƒf‡¢_¦Èt±ÙsŒ©e¶Í‡‡Ìdi–.pŸLaŒA}§<[‡9Yw9u™j“§Gy²Fs†:‡²QeƒAgŠK~°`^|9Yr1Ul7xŒUžÆ|^‰HbFl‚e]ˆ\`ƒE‹RawCu|De~M Ô~”Éiv®aަXf‡O¯_¨Ö^•£†•¸g³AsŒ^|®YuL|´Zz¬Lp“EɰOŸ¦`Џq’Ê€¾w{¸Us”c~¡r©Òy˜Â‡˜¼xy«WŒ¨a€°UœÖyw­IVx0Ix;u•e–ÂU—Ëby˜]¡ÏW~™To’€²Ð…†½Sq”I„‰n¬»qÀ¹{Öð©ÈÚš´Ù„½Õƒ…¤vŠ®m~˜e²Êa’e½·x”Ql{X„¥q¨ox™Gc}Ol“a¤kqh®n€˜Xp–iˆ§Z|–I_oF{‰\€¥{’ªSd„Lj‡BXx9^vP•kŒ¦ZuŽ_y©mzœ`q•CDcNe„IUy?g‹Tq˜^˜Âqzˆ;SmJ[‡Jjs+=T6TnF~ˆb“©PmƒOxŠT¢h“©UeˆDRgAZtTe‚Kb}MZr?\€?Ux?SqAMdGWoFInMc‚Ofiˆ—Tf…RtIWxIMl@RqKQtRl‹ir™lu—fqŽ]oly^_ƒbj\l”N]O,gO4^V/Q^<XV5L^1CO<QF.e]0^j=^i>TcI<hXQBTJL<QH9QV2VZ4V]/Hs9OW4Z[%Yk/lm;exBY|L_mMZuGJsBQcCX_8\kHdvPcxXhyEc†HvxDl„8i„OvzHoFs}Rv…Vz‘XqYj€PdGev?{…H‡BÄ‘PÿŸhÿtLÿe$ÿeÿo ÿ…:ÿˆfÿfMÿI)ÿ2v8Y‚1XwI`k-glFu„Ad…Kc{Y|}Q†ig¦|J‚Z:eP4L9aI$l_,O‡ErlSj„S|„aL‹[IdT`d5\z@i{<u~Kš’PY¿xYrTFo1tZ?u–RV“jMs]jlF@‚6Q^#`(˜‹<iÁˆ|˜|nžcpŽPi]ZyPfv@a|Ax~J`›=xr8s™LR}_KZWIb_™b:·w|¸q}\^¥Qw…N‰ŠO€£c\ˆP>uA5G&WI$\l9?j6IR1\[4š~7y¢LqŽJM~IoX3ut-~z9’zA¥;ÈŠB­™]’˜Y½O«¿kŽbÿ‡eÇ娮hÕ¢oÃ¥_Ҝʴt«”Œ®©NÂÙj¶ÆØ±µ¹ê»‡¥cφDÖ݃«Ø“­Ûve¬mwyO“–Nb•[`:[uM—i2İSÂ_y†;˜F~–c¦nF}¯R™MŽóA£•^ŠÌ—n”kkŽU~ C°˜5œËw©cÈfˆ™J€‡=…”X“Dv—~žuežslŠ:Æ5¯ÿc¾l@w+ª_0x³s[[ ‘<¦¯—|µ{ˆ«EŽ{J©Ém§Ðk”䜻ô ¥¬ˆËÔ„ »sŽÃ>ÉVÿу³ö€r`L°N^v)À­;y­>rÆNd}%j]š{JÉÐxµ÷¥Á¸¡îitÉu`“-«…9Üÿ›¿Òh•e¢eR˜d‰oR¸¥u{}O}“PPi:ƒi+Œ°Wƒàr|Á2oŸC€–ÙÌž}s€t+yºgƒy°ßZƳ‰­¼¡ÿÿ¦ÿøÅ¾ÿ–r´ILr1@S2„JÝÿާψÂblŠK€’SŸ¶ny•[Pw@CGŠy#n—BîØtÃÅ‚ÛëŽl’Pˆ|všˆMÍÿºŒÄe¨•i–aŸtW¨Çt£µaÿ肜½³´°\ÿüÑc{p‘¥Qg‹NR}(Q{Lv„G‚„9„™\Ñxç|»\QZ)f?Íÿt²ÿft’^t}:p‡Fd{9Kh6Š}ަ­»bYmœM•DTjX¨‹>ŽÒP–à–[k*Yv(”š8hxIÌ N†m,ƒ}PfpB§«`ƒ­ZšÅy†¬u—Ás˜È‘¤Ï“”ÖRƒ¢>^:l•Bƒ©‰v“T‘µd¡Þ~µÑƒ‰»lˆÂv{¦o„¨tŒÃu¿jk~\’Ï‚j—Q‰Òm‡Ë~èóæšÌ_y TÀUi‡M[‚7Wo5bƒ3u–pšÅ‹­õ†n’X† se‰E_n8bv9d”LeˆE”ŸRvŸPlzmj–V^Do‘G…²yi‡“x~Ub‰By“ Ï[|•U¥²ne`„‹~u f€¢v¢Äom˜J‡”bi£j…pˆ°fjŒho”c]aw£h²|…¶bh›RJkZa€pYZ€ URq=—»r–Äg°Ó¤n‰i“½bmŽGd‡T}–\_‚.c†Gd{_yœfš¼”»Ê¤Èë…y˜m‹£s€§q‡¥guš€‡®fx›lµ¿€x¢JvˆSšZg…Gc†Ny¨GZ~QlŒ^pšqoblNh†YnŠ^˜™Ml‚LŽUYv¥¸Š»Èl„¤SfƒPo~IcŠ]oª^nœUq›Ur¦o~§Dbˆ@j}Ia„M~s§¶ow›o‰§TgNm’^x€9Mn:nŽ^€˜gŠˆY{•Ykt†ªynˆT_†CdwIn‚Oi‡Sv¡ZoOjŒGY}Q^ƒS^‹N^€AUoGX~Vv¢Zk†\rƒPWp;NhFZuA[yHZqOWwW`ZaŽZ`|Pn~\oˆTc‡cp˜c|™VeX3d\8gj7Yd<QS;XY8Rj=c`;ix0[AMoMNO>AP7R19WD"^>3NT/[Q8_q3LsAkY@uƒ5^Œ>N~KLf@VZ>J_AJc9C_7UN6Q^-Nh:Wf<_qA`sDb}ForLj}CjˆTk€PeƒTmqStvHu€ZkƒX‰tZw›Hu‘UˆƒY}—Nž‚kÿxVÿnDÿ^!ÿe"ÿr"ÿ„9ÿ‹fÿgOÿA'ÿ7‘6Y„,BuBPR(n_'L„;5dHWF;ox<~„Caš_bwR?rBTLASa$:Z.^P'Xt7Iu?[iFOxCRpLPs5SrBap.\;x|:e•br‹RV”7NjKqj,T–`i}_ƒ–7_NAw>_]0jv?yƒ_’av¬xD™gSPCoj<rŒ?Ž’M±¨icׄ[wd[}3GsIQ`-]w+c„5zŠFe¡nv…ey•ywŸcZ‹YVqQRl>Nd>Y_$[x7[xPJw>Ue5hp1€{.Ž…Fƒ el³Tck<f|5‡€L‚„?pgmpEšfE TÑŸP‹Ñ¼¬‹[„H†‡‹¡_‹lO‹ŒL˜„Z¨‡Pñwjÿð¥¹ØæŽ–•U²¡’|ͽ¢lF𳝹‚h°‚U~XÇi<Œ­[P•{Xc#enAa‰@}aDt…_ƒ…F§ebË‘¶r9ÀjV£«vävqNˆ¨^YˆadxJw8z€?ž]q¹[¨„frËmtwyee7j‡/q•Fy†*€µN|žG«}zZŽsŠBF†Ecu4npPž‹Gжj•^ƒPs‹ZÓ¢P¬ÿ«£Ç™ìV}¿gI|>sˆ \™L~€K~ƒb„‰@p„Ž•ŸT¶¼vº™ïÿ©Š§¡§Žg‘Â~›¢p«¤ˆrÇdóvNÜÿ²÷“Ñ‚ŸéX‘—xzMø”T²ÿ¹–éPŸ°F꣹ædµ°JÿË_¤ÄI‘™›{Íx|hec}feoBË\|Æ~y8{Ãb½Ž<éà®|‡`v¤—£ŽƒÿÏ}ÿÿÿáÿý‹Ó~”§`z”NVv˜<CC=d1Ž‹jM|;Xx1ˆMª’ˆO©›IÎÆÎÙýè¯Ä’ãêœxžAyqU¦¤`¹•z°x|ÈÇ‘„ye§W¤±Wv‰\•o`y‰Gž£S¨ÿÿpt'bʇL^)Fs6M~x@—¦A³ÂŽœ¸¤‡–N°Ætm¢3µ’Qãÿþ€Ôº¿¸zo«a›‚>œR¤ŽfˆŒHMlJe|9awFc’L‹ÊR—°STm;ˆ™X–hz›KÑzQ›{7„†O怞@Úù©–ø‚Xr:]y>‡=Q[.¾Úƒïë·ÐÿލÓk·ÿv¯ê“–Í{u‡Ue‰cdcަ‹k~d”Êjx™j}›Q’?Jd3mwbWƒKl„B[z]Ÿ’ÚdÚë‡Éçn‚»kq}P¥\l“9€‘a£Ì‡Î|W…hmŠ]—À}š¹s]v1Yd3Vx/pœAgQ‘\Áfšª^¢Ãr€§Ž²W‡žF–¼Œ£{“Åup ‚†©PX~DZz<yoN`uCVuS·°{ož]}®jfEEl=V|<SqEf‡J_†Us’Xf‹efihŽHW~3N|8uReŠTZlR{“‘ÁŽ«Èv`yKp…UfW¡]Œ¤hŠ·Xz£=x‹P‘YЧ}—{”­ioˆCx¤Vu¤i”°iˆ¦n¯^•®xÛÆljKxKvŠRjŠ?v¨}šÈDZ‰Dm˜\n•LcˆQpŽQ`‹Ut–Q„¤u±ÓvŒ¶^¢µsk›À{z™{ ·X„ d®ÓrÍù~Áädm°k¥Ó„¯Ít¯¸Mh…H|žOX„jŒ¬dj`gŠVOrPZx_r‡L~˜_¥r› Yo{T}‡@hˆ[e‡XsˆQz£[Š£etŠVdZv”`sŒZn’La‰Xr”fw–XoŽIYu9MpXp–lLVj7E\3@cD[nALlJZqMmˆNj‚JVtGXyTctSiŠOa|[v†cn‹hj`6fe9Nr@WXFSZ9gZ<nzAhtKj„HV“QXuQX\B]L7D.jZ.gT>QV:hYDUs<TiGfeD~€5j˜ON’XC\FAT,?M2E[5IX2ZW,Vi+Wh=OeBWc6Z_7Wm=kg>m€AQˆNZtQXfCX^A\l;{kBhvMqW‰ŠNœˆkx•fRv­idÿ_?ÿe*ÿ\!ÿcÿo!ÿ…;ÿ‚bÿ[Iÿ=&ÿ8Ì<KZ%@`JTM0e_$:„ARWEcl,h‡Aq…@2K)JD$7)L&*7W'1S3jG$k2A‡FW_6Pq*MuBToAZr:zu-ƒ˜MU•AUx^g{I+‘KE?•“7‰³c„£nƒ\«œcjµ_~ŽXiA`†P–~EnžmF€}eW5{“1›¤Q¦¸r«ÃtƒÓ’t›od”]e“VnFz8hª_NwY_iT`mW‹†PŒ¤O_¹df†:p‚=hŸHQˆOVwKnuGw…A™—Ls¯mŠ’Q¸”<¡ÔjÂ…™hóa’¦‰ŒjÝÄxËÕ…®Ã|מSž†tŠn¢”g€²Z˜o\€EÆu?¨‡[•pt‡CžlOœxR}t^@^=2<+}J(_€Oq€W’™Z{±V¬lG8vTYA4Fhbvm*GzK9f?W““fd©SsrN¹ƒNŽ­o|hD¿xH¬ì|Uòqa‚9w}Ezt3©™:wìin€>b†RˆŒ?gwjbq=‰`;d–MU|,”|Q}œ‘~œKŒž>¤šOŸ¹ah|”iy-^ŠKo, ‘LvÒZg©NŸ„>ªÄªðι§¿Ž~½ˆ‡[gŒI?b(]oA>T4QEv€.dJp™Pv}L¸»ŽmÄžXt[faW{fSf¿Vž}7ÝêKŸã›‰R£½z‡Âˆ¥ÀOX€‡i¡:žœ:±Þ\–ÙÄ~ÂÄÁµRáÒ}ÿþ°ÿÿèÿ»–³û°‡Òp}z@^i4Œ†8c¼{¥™W‹ÁˆlŠ<j±LÞˆ[æÕ£h„P_Y<Q\¨‚nƒÄo²w„¤c—¤9^ž;:5ax"‘¬.Pt3šdx—@ÿ¯WƵf¡¹›h²wlfBtk`§mÁ·zé¨Pÿ¾n´µyט\ª­H«¾{ÿЕÿÿd²÷‹ÞòW}Â6¶Å’Þ–b–цgŠG®´hS9QS{.|<ÉåxŒ±Ž—œ´^¸Ïi]C£½X‚Ÿt¶˜b|¨U¸éužßlŸœQtŸCs˜7¨¡_„¸soŠ5€v9iz=‡}2ˆ‘+ÍÎ_á·|£_­vµ‡bÍÿq‹Ádµ‰W†·´ÇÒÇ÷m{Tg{?\v.‹©qåݹàÿÃm¬Uu•¥ŠfƒPRp<cn8ŠUtIR~Hd5}@|[ŸµIz±SeŒ>‰—7k§LL]4 ¥’£Æ˜ÌÚ¸¢¼œ}žq‚·Q| GuB{“N‡£m‹«v‘¿M}ª[†®…›Àc‘ÀJˆ³SpŽXºq ÔO[€<ˆ¢‚²ä‘«Åm‡‹yžwSkCv‘p›ª‘†±~¦²fs wÏ×j`š.Wƒ;UoB_ŽIu‰\bNfuTf†G\ˆ:gH”¿]y¯Rs—es’Sh…IIgGgŒOrIz¡IƒšgUŽ/gS†©Z|›gu¡o‹»wv˜g˜¨j{—g®ÎŠ¿â¤¸[TwOwŒl’upVŽSh‹Htbufš°z¯±a®x•¯aˆ¢Y~šY‘ [VzJˆ«Žƒ¯AVˆ@]€f„°T•ÆX‰¶EhŒ\ Àq«ÄyÈî¡Óÿ´á„¬×—‡¦Oyi±Ê|¬Öy‹¬hhš‹¹vÁ㈶ÖmX~_}¬‚…žSvœKN}Jk‡YcHa‚HV€CY€Tt’\u’s³Ë~ˆ’CirQ|“HpOo_…¡k•¼|¹Îqª[y’U`|PWnLhXo“cw˜[\ˆ[g‘`c…?RrQWzag=N\3Nf(Bb@fo;NhBQeWjƒS]{H]s;NsNZ‚Xr“Z‡ egŒ^t•dkeBdh<glA^pG[dDTc?be=`xDxSf™Sg†ghlEdnBiM>^O5UUGDO7JK2_U1]m<raA^y@~d=[KXhW_i;ec7R†=UaAhb(\}7Z{DIqIO]>[[4yl/m7~†GJ”PXl^^U4Z_4[h8bi8ƒjC|sP„|Y¦€Z¥ªlz¯…ã–‚ÿvEÿc'ÿbÿd$ÿpÿ9ÿfÿWCÿ8ÿ>¿Xfx.J…ISW5ej(r€<˜‘B¶B‚¶q{®XP›V1sL)A,O0sdeˆB[ƒIWs>XtHYo9ct(m~9E…EMd:a[(]lFf}G=‰ZI\<R_*fw2Ew5z`S]OrwW£}IˆÁ€‚¬œŠ£{m·sL‹Vjb?ˆtR›§HªÆs”Ö|’Í„š¢p•ÒŒ¢°i˜ÄplÂpXwfZ|=cx[U|U;y3MSEt_0kŠHhpK^~QØj;…Ð^§œnŠÇh\‹\fq;•…NZ©…bfXˆz0§nu„•eHÍŒC’Îw©Ðu¡Àxµ¯‘¾©oÊ—|„}Чb»Îx~·}³[M³|S¹‰RÃvW†——É‚Lo‘f0gZW60L€,7V$0G76&†RZz9n`<Ê™QƒÃƒ‹B¤…F?ƒT@I0UL(Eo1G]!^C5¡ŒKzV¦­SˆÉ¡‘„jË„XìÿŸnÿ¤]“X>|8zW,rœEj’N€o7v›nË<{Ôz‘R.s©<€•OiˆHo2ŠŒ>€_š•[½ªXÆÑ›ºœšk…XqªTg‡;zˆP•Àd‡E{‡kgeÍ›E˜æ›Ž´va|jc¯*d¨:pŠ5wƒ/ΛCt¶q³Ðl¶åtkäsF^nÇw<žÿGm»8;V°ù»ÓÊ›˜Òµ‡ugмT‹½®¢zeÍ—|6x•f=a‡7<9SC5͈ZÒ°›‡••ÃÊÙ¢ƒ›€lu®Vh~%[ŽIji8s›ƒ}‰c¡Ÿfœ¬QqŸE²é{©Î|ŒTË’QzÖx…MŠ˜¤˜n¬n|ŒEÚ¢‘¾„аi¹ƒe¡Épv`6]p`‡µUwz4b©xutZ”Vz«J¶œgõ¨•ž[QaBU)_h;‘¤wºÓŠãüŒ¾ê™ðÿÑÿÿÿãÿ ¾Äzô՞̀{ÊY¯º[à²j¬¸²¦¸û†¨±Žoˆ:n¡9¹ndŸEd9mƒ_Œ‚WˆN†Íaƺm²TÖ㛾ÌsÌõŠ•ÙS’×kއW{^XV†'3_&ndB«Ä•¾ß•¥W­¿ÖúŸ§äp¢aq®Ouƒ_¹Ä¦nØ|xŒCˆ¸ZŒÆk•¿aÃü‹¸Û‰’Öci–:e~ThbARl0ozBoˆK‘Šaca@h|9}|^Z†=ÇË ‡±`˜Z Ø†fC‡”Lr¨mQk^XkF£W_™L©Èˆw­j]pXz¥W†›zŽÎ}¸Ö‰¥y„¼]Žœ¤ºu`“3|—Zx„lƒŽhPt9ŠÊtºÃ‰k‹DVx9rˆWtNw«i~§su¤Xu–ZŸÊsy­ˆ˜žfaœ;Im4Zt<XŠJr‚@_z5No;PwEIjOdŽNJm6| Y_‰dj<Rn;Pq<\y@m‡V˜Å˜±o®Êjœ·w¸Vgƒcl—_x£|©½y–´]l–mŒ§o¦Ä|ƒ¡XmŒOo“`t“Ua~Gl}B_„Im…On”Z¬j“´xÃæ‘£Ð„©ËƒœÄ`k‰OOxS°…y²Do”?c‰Zx k˜¼oVo9VpL{¢qšÅ‚¾ã´Øÿ‘½ìž¹Óz¼P„²h†®p†°[\…CaS…­yŸÐys‰0MsOj‘›°Nu–Hm–@i”MUEf[†ª^s˜a}‹WmŽk‰¯p‚¤Ju–Oc}Ke‚[†»kŒ½{¨Ò™—È’»j}‹SnƒEbƒRq [k—Xc‚X`Œ[~¡`y¡RbˆG_lN[l9Jc4If2EkBWpBcz>UkNg|HVpEXt9MwFc€[bŽio mz«~y ^lsMƒlN†ŠU{ YnŠbsw^^zDl{V‡[v¢bjœ~yyZU‡O\TSiO<Sh:Hc?XJ1g2m•AenS=^DP:<^m1gwI£‚K£LJ¶onke~x+w–RgŠZ_tUTtDgd<ˆq6x‹I€…XO—[<pmSR=jX.cb5]qB|k@‹gF {cš™[«±r¼µŒÿ©ÿ‹tÿb0ÿb#ÿ]"ÿn"ÿ‰:ÿ|\ÿLB‰< †f.ƒ6‚¦I\¤kYmMjt;mˆEl[ŠU’¢io¸r|“hh›bRˆavf1yŽ>lZc’iptJ[wDZs>sr+[E8sN5O;DOR_&Pi4Rg;u_?hZ#s•Fz•PS™^Wm;YqOwu5†dw­—v‘vZ“d5rNRF2he'”—S‰Ôrƒ¾‚c”_`\y_ko[‹‚c“™‚¦¯tyÐiG•cMR=|^;c†]n}Be€1…L`¤]s;n„o€‹[Š”f‹[ˆO’[KlkyP4Fy4_PI‰M:…Kv©a­‘tЧy¥ng±m”§t¢m×]á–u¤Ë‡ž “Í­n¼gÇŠdÛ^º¯f™”`Œqr£`Sš“C™¤vˆ¬f˜ª\l¦F€ƒ7D~Wj:2ˆ…B¬¬hg£i@tL?U5gY\n+p*EFiO`KW}CM_M’ocŠg­fO±Ò{nµŽ‹¶J† a–’PÚ§€e¬qr1ŽDž‘YÈÈŒ“Ù¯¢PØÚV—­fix’RmL¸ŠIǺ„if¶n@ÿvO»ÿ¯ºyW¨Ac`7¥…XN†b“X.µµN‹ð­W¡bk‡S`l@}ew»reœU“‚>Ó“O…µy´±{âéÄ•ÿÑ}TÿÎXäíìÝpk¦]¡¦c‘ɹu—Uò¶jáÿ¹~ÃZS®vZhT€^<NhCHrUU€$dŒ û¥N¬­QˆðÈ>dMD}°h¶—z‘·”^ƒKdI…fD”žXaJ{¤mÆzYæÞ»äœ˜t,u6~•OÖþŠ‘¥o{pD»±R|‰ox|8u(N°pYLVA>Ÿu5Št7T{H€vP‡ª[H”Ÿ\š–`ÿ½¯°à‘ P¹©k޵Db›H„ŽKr¤m뤇óÿ£íä‘úÿÿ£ÿÅ ¯t§Ù•œ¦wÖ²¡‰£iˆGŠW޲d¥»®²—„°Î‚”»Qª±š|´=s¹P}£`̼W›²•®a¤ÕfÄa˜®‡Õ¶¿¥¶Ÿx«§r{` «]ˆÊ=zºh‹µe£Tëú´ŽÀ{£ª‚¶¼Â‡¸sd§‰XZ7b“3g¡_xw~§iŒ»{’VUd›£‡j†~ïë¹¾îšXwWNP,V_'Gf%nlw˜Uy{J’ÃMcgIypWhu=޵lUb]OWKŠ‘bl~<c•Jw˜e~”=·Ône”¤kv‘ei”HX{4{žNq§K‡™}W{GZ†FeCp¤gŠœn{ÂG„œko{JM‡:Mt=„¡sb‚\S2XxMz”Sf[t—h¯kq™F\~@k~h•Wj~a¬`w©Kc_~¦Yt^YtAw…PlJN~5Os4Rm>w¦jRp;Ql3Sn9]†Ba‹Is›[r‹_eU¡ÁWnœax–^PeEi”[Œ½|‚¤vµ_LuLeˆSRKw‡U»dš¹olW‹ŸY‚‹R°¬ux’bl`v•qŠƒ€›‚iˆQbk©eŸI„‘e‡±‰w¡KTzFYEaK\}E_‚6\B]Œexª—Ñõ±—·y‡£œ¯_t”U¢J_>]@Jl;i‹ZxŽ]–Xbq8f‰Ma‘ir’KTxGXvHY€LW|?^xc€Œb€™di‚Kl…YŒ¥v£¬d¤¼Uo‚Bl‘‚¤ÆyŠ¼Š‘Æ£ÈŒ°]w…[Š˜Tuœa} T{ŸGKcN_…jƒ›o|ŽZf€L]pARkF\p<Sl=Zw?eŠOlUf‹d“¶\sœK]y?X|EYrHTvZgnt–ebqamQhsTtU}‘dfšob“kZzYww`‰‡Zri\¡|jspV|PbcYoYB\u>ZdA‡W3ˆš<v³bswC‚VUN@pe4‡q6­˜HÂdU½‘zk{„9u‚Y{~cƒ„SR‡QHkF[Z?wh9‡zKpŒ_O†xOkTd`3rl3i‚NujNŒg>mMzbZ•iWhpÿW\ÿrRÿa-ÿ\!ÿd ÿk$ÿƒ;ÿue©E>dF"ho6…rBŒSr­md‰kMz­T{žXq¦dy“L_­f|XŽ‘Gˆ¡pŽ P®\„¢bZ¤^LvRh[6\†<Lt8Ge64\62D.BL%@W&SQ.Tq8sl@n{5xˆDlœb@z[NW?_g7Ht:6gSeGRˆgOS˜]:oEAW.Wd"pˆ?V Z<mc^O?l;l‘>9‚>HF:ƒ_-yžk~˜zM¨uIXXSL,lh0bv€—q<xžvk™K¢vDoœeGyPRJ=NL>Y?.~J1p`G}k6Oj<_L+–i0y~=xwO~}[pŒ?”pS”¨[û‡]ÊÝ‘©’pÓnË´‹¬Û§¯„SÄi ‡_»geî¸_®¶€§d‹w`¥žfMÀf:C?‰L@«EŒ¼t{ˆndW2³a8T°aJgU€d+N›<eT=iˆ<’†=@{hKp*sk.ˆŠZ¦evAupG{Š\ÙºT4“iV\-ux6~“LrqL—B`¨Rfd4ÍŠAÞó}vÄ€Žzlž¿…e‡Ts€5i{EqŠ=˜?£µLÙ…QÛüš£œ£³ƒslnbcŽŽ: rDM¤n‹e+…Ê™[K‡‚CŠx@ƒ‹3]šY¿f~‘[ {W|™u}¡o‡q>¹Š€Óÿèa½_©œmÁÞpu­vš¥@pªHŽœB‹¸<”´Thº¦µŠ‚–Äiÿÿc€ÿ¡z–N½½Sؽk´Þzÿ©BÇ彬顛¦c†©e‰âvÖØ…hÚtzrG|ˆ6p@n`'¢ŠZ¢jºéj}m‘‘¤‘Ñf·t<§I‰¥D½´RÐt·Â•å˜e¹¸R}‹>Y\4°q†zHŠŒE…„^{W¼šD¤À¥·²r¹}QÝÒh²þ¶Ýç¶ØêdÌÛp¢Ú~¬ªiÄÝ…yŸÆ–~•=Çå²ÚÌk‰avmO¢¼Ÿ‰™p™—?šˆS«¤n“±tpt‚kVFž{Y¢—^ŠmS_‰-¢`EŽ 9ijG¯e³¿Œi¦VsxAqz]k«bjˆP{•iž´kstEŠeeŸÆx}’m{¨X˜Ói¯Øˆw™D¹¾gªÎ`ƒÂsPtFÁ´UYs7h…4l <_rXµæožULs&Y‡Io†jssmyXb†9qˆ[n€Bd=qƒFzap…HqRy¢Ex«M~¡Us­ONh>K`2Rs*z™Mc}-b„?—·t•©xrª^x¨Ruye~¨Zg”JGdJšio†l`šI]hS]qDY‹@k’UmZ`“5l”M_~Nz€ƒv¦r\‹OаQ|µCpœQ†šYbŒMh˜aWƒ1Tz?e}L›§Qtt@cMgƒOt˜Vt©e[Ž5Us3[o9V|.On+Ae%Gc6MoAJe=Rm;ZrHBe/cŒPcŽSa‚E_sCTpCLc5Nn2SoB…¶€‹¬hh<d„LN4Mn>]w9|{UgoX€•i‡g`rD~•VrŒ`mOZqMahP_q`q‡Fo†No”]t—pi|Mj~Zyo^€0Ji>R{B[Ed‰IgŽ>h”Oˆ¼[s›u–¾Œ™¼_m—q^f1Ad7rT€ 0Ux)Ky=i€Ihn?}”Hg‚@\…Nb‡N[|RaˆPn•Tr™PSu2>_@XjFY„R}Uy‡OizV`rVhŠX`‚@f…m¢w¹ˆŒ¾™‹´or‹Ph„Oe…Sm‹Xgˆ`q†AfxIj[\rTYnEVsC^nBXt[€ŽHq†S^yJjŽYn]x¦~Âw ÀmƒšFWoH^y;MkFKjW[uY`‹ŠSXCWj<dgL|bD{Lkœ\g‡W[VzrVVT§‡cŒ‚]}C]nJ^dAgj>–kA˜Iq»d}ž€“g}§bp‘el~J—jB½–P¬Éni²wvt€p?hL“‡N“¦Ru©j[ŒchsGet5_m<orLvx]r€Y|‡S—ˆHq˜TtihngGf_AVrK:jPDPEÿC%ÿg$ÿY&ÿbÿb#ÿe&ÿ8ÿk^‡?9mi'8y35I<sN.Y“Jie‹…L”«^Œºu‡Ä°nn»g]’equB”}D´_i©ovwh]ƒ]OqMee,Rz3UmG`c6\z,\^5]r+Mr5zU+‚…0v˜RnVf€AaƒNWkDjl5p„@o‘95]oK0Bh+cL2‚nS€œ@I¡LNTLPiD~L-‡€>y¨Ug™o\yU}V:Œ1O‘XdQH‚~;zŸg—e;€¨Fzˆ~e|E–uG|‰T}}@r‚I˜D¡ 7yxE‡iSmr4…W9šl?¿x?NvzBvoBtvA”LsªZf|P€…C—œJʬh’íˆt­[vjL•gQÌE£šU r\™eމUŸ|\ª‹aŸƒiŠž`©Ÿq¬×uDÆq3>Eua"Kƒ96Z#bC'­>b©PY‰?N{+lh$;2tKp;#ˆFáŸLk­u}pQ‡CY,jH0ƒ¨K\}]n#Xw-Zˆ<}r5i‡X}z\aq6™m0ƒ—Œž§XºÂetÚ­r~Nh{GZZJ„dDw Š¢šP…µOÊ‹cÿɇÿÿ©•«›jx\‚@§­{w‰Q€O¬CÙˆk§<•šVbKÀrV½õ„¼qÉ¢OxÚ^Õ†2±Ñ”«ñbÅéfrÿLK2ZLFŒ_9MƒOez'g}NÔ™OŸÿ‘ƒÿ‡ª–J̻йó¶ÿê³¥ÿ{R…ugwGe‡XŸ7Ć;Èã›”Én|–L”¤w…ec“u@‡¸mçÂyº¸t­<|T©½Š˜–`ueŒ|p¿f‚†A¶Ù~Â¥…¡}eÄÿ©ÿÿjÃÒ¡e¥£‘’7–S”´u´Q•Ô~¥ÉxÍü¥ŠžVz©bÖ‰u½ nÚ°¥·Ç˜ÿÿÙëÿÎѪˆíÿ Š°•Œo™µyšÞ«Åæ®Ý”V’Hnm&eolŽ|C­·l¤ËsŽ}SÚïkrM—0‘Aÿë“gq5nÀb`f(y™VtoržwɃ§‚‘™Yd‹;ŒQˆ™bŽPÈe¯†^²û…‚f:bv@Ä¿`Îcp†K•ŠjŒuk䊰{¨mt´a•/œØ‡gx1l~fy H¥ÓxjE5KZ`*p|-\f7mRF‹†CjZEnz?šH\mA{y^¥Æ‚’¬Uk¢]n…S“D‚°Pj9Œ—{œ¬s¹Ój™³‹¨Çq »rŠ¥`l—UczJ]‹,jžASg@f|>pŠPBJ,kq8XdAazMe†E~»]w—UO~:ARK“žpt˜Y«âiw·R…§[Ÿ»Ž²[PgVFh6Jg7b{h~¦ot¢du¦XSNiŒhm”qzšKR~0Us-XrAOx4Cm&Aa,IiAXg:]tLmz5Rs2f…IV?Ls1<\(CW/DM0Xu2m•Uu¥jhŠUjVq›^kšGZƒ9YqBx”DaJqNrD|`h”Ut§Jt¨Ir„Gs€<^k:OmNb~IPzOo‡\U€Av‚J_ƒMPl.Fk4`r6R~>u„N^~Ko‘h¥¸krZ}œu¥~”½na€6]ƒ?i•Hl@lƒG|ŒN‚…If„<_oGa’UoPhƒFX}^‡¬jq¢fv‰V^v3OiEbF}ˆVz\w…Kl“:Vg2E[Kj…:YrATtfl’gfŠeh‡KS~>PqFcyJa‚Mn’VbxJ]lO|¢\i‡\Š´k¶R|‚J]wRo|RipBSkGTxVz†SVzeeƒgt\my@MoQbŠI[v5AW?YuWoš’x}QZ€LT‰[{hR†k=tœYk’lf‹T‡W‘›X~¬c°‰]bnnCt{GzŒX‹€N}™JS¤}axvmL~‘S›€t‹cwˆ^Iu‰`_„obw`muB†o>‹ŽAxŸTrlmŠi^]krJSl>^hCvi:…P‹“]’—ld©hsigqg@ll=`yC^iE`o7ÿZ*ÿb'ÿ[!ÿ` ÿb#ÿh#ÿ|5ÿf]‘Z5†™>M’U)_RQ:!Ld\sIey6‘„L~Àe|¥|Ž•cwÄka£qk†Unˆ9M§[8wcMI9LS(TS/ce)]vAax@xo2yŽA^V[qE\^Chm:b|6ŠzVn¢ghŒVtyHXzD{i7o‘Bk†Me‰bQƒ</[CV=gf1}ƒ==«mCXAPZ'^V%hi@M‰SsqGl’I{†I„}H~iwj9†m/¡“U•“YŒ¨Z›`s‡iexY|u;]tCepD’t8Œ¬c؈OÅÍj‚­xœd6ojA¡eKÃmHº{d`¢_…^<•†Fˆºy¯²m»e|Ÿd“šO_¤ˆQd>ËK@wG†dP±lG« Z±S³±rĘXò—d¿Óƒ’‚oqE½uJ|Ø“½fÆùa^Ãw<T7hcY•@U]OHƒ&‰m!r„H–›_ªjtšB\rH|`>}‰kzFb›b‹cL¯h€“V˜°P°´m›ßuI¦ƒOR2ocH³zBkºs†KŠ´ŒŸ¹tÇÑ”tòÂzƒJktI|W3”“8±Kÿ¡c¸Ï}Ÿ†Št\²šóˆtL{fA‡±OffmŒB™¢MÈö«ì¦˜›CáÌxÅÿ|¸ç¬´ù¨ÿØŒ•볫ánµèyÿ¤ÿÿÏÿÿÈ_ëŒ~ƒ9»”M”ݺjŽ6OŽ/V•^ˆwtÿ¯Ÿ×ÿ›˜ØY„£çã‚~ÿÉu£b‘‰;€¡tnuIÖvh|ä›™»‹ãÄ…yþ«€ƒCU~2Gp/owQ‚|V Á’j‘bx¥g´Œ[ž½D|‡C­žMw’U¡n]¤˜hd–bƒqy¶ó›Â“™ž½v`’Z€…P›¬mb“„yndŸS›£‡‰×œ™^‚^›•9’¹†Çÿ„´V¹Ž‚æ×´¤ôª‡Ãu…Nah*™©{ÃÙŠ¼õµˆ»­z§L¨Íl‘£Y“Çmyªs¢¥ÃÓª¼È©¢÷ey±P£¶\ÿ’‘u°;iDlu=c‡_o’Ef|9_tNyo}?»g®½u¢à`fwWˆ¢xmjAt…‰fXŽœ^Óý¬•¢mšÿž[d3x`I|’MŒ‚W\4Ô¢ëÓÿȰßh±´š¹u}„5¬½‡|Ë^q¹Jez8ŽÀWyµD“ŽFœ¹Hj“Jn}2pu>|nYQ`*{‹I–Â~sšdkw:_ˆMcI‡ q†´m{’j ‹{Ò÷¬—Ñc‹™raŽGˆ©nos?}ªB€¼h‘»pe<`hM€«k‡£ƒiZgyE—³M_vK{ˆ„{—x[§7?Y7cVz{u¤g•’^ZvWzži~‘]Kf4>a%Gf'DcCv¤m}¥e}«e~žREeO^sPQrPh|WdFVJ[{Fe€CeC{»CgJp“O^}9w€W_…CSnG‡µ@dƒ5Ze;l}Fe…;U„FOqETvCa|Ts‡]_„M`‹>byEtU‘œa¢—NhnEl…X{˜Ii™Vn£J^u@lƒY~‰H{VewFc|B{ˆS\<vƒRZyL_€3Gn.Ki1Ww8kD[Gf‰Paƒ\f€YZ{Pk†t„‘UlŸ`u aq‘S„ˆJvEoƒVƒŽPn…L” Y“´x§Yh‰S[yW|–^q“O^~Bi†F]‚UlŠS{a‘—^|V„¨T‰ 7Na6I_7]v<_}PqŠQn–Mr”GoH]yEaxPiŒ[lŠWg…Lbxg޵Œ±‡–à¼Óy–«RdˆEhpEgo=PfJ_z`˜}4LW58EFVbBXmFM{Yh—Wiƒ6JjBYrRi‡h}e‰Ž_x–iwycoiQ[{PfsZj‚Kj‹On†X‚„mh|Z‡xfvSx~Bl™[]ccrZS{ScdUvc/bp@vy\|{^gˆe\rSVmELeKUeA]n;oxCl~Lw—Y}Xj‘[gbnwJ]l;[pFclAttC~†O}Žjzo§ƒcuKVvVU`Dfe:vn:ÿr>ÿf.ÿW#ÿ_!ÿc&ÿg$ÿx1”cZ~d5_„NLi\.bOQ;0][;pG_Q.Ÿi0x¹V‹žzÀ¢Sqêk˜•a¥²L„Ì|h­sFKMT*e^%t€&w—NtŽX}Ap›Ts™Xd”O†lAr¡Kj‹T€xBl™Ss’ap•G‰ŠSw›?N‘RgbIœ^7]®K~rL¡i"€4 M–Ô{j¿}d“RoˆBywHc¡Om“Q¶‰XÒÍdŽç~ž¨h‚¹dsK†”K«’Z±s‡¡a{¡[jtI¨tLeW‚cD“O‰œ^°«Zðºq|¤ºÇ˜0£šXž€XštLÝcK ‹qt‹\š€<¯ƒ‚ЬdwŸq’¡i±‚VÕÑ[ë΀Üéw½¨jʬvÞÒqzÚas_Õ—Q· eÄ©k¸â‚ £yqŠOr]H–JǃkŽæ„j‰„U{]‰o6w­qfŽ?^’0ew$ÿ˜G‘æ¤o³lsg<rW]•Xwe*ˆ¥;hZS|_1J8<M!±f7µã™¢Ï¸i°®X@X<ºc:’s‡S¨t µ{i¸›c[|f/:t9€T"‰nFŒi@—Xß•`¸¡“‹²k’¶Zvxijˆ[ѬO¤`Îe»{H”ò¨t›Ž®¨q†½Š¥¯cžàš~¹ƒœÞ•ܱ|ßÿ§ò¤£RÌ·šðóÇ¥ÃÕ`uDO7’W-k‘·n‘_u^@p~:Fh<¯‹=q€—‘piŽ1‰R†›x¬Îi{Ãq¡X.r“oÁ„cž¯Ž‹‚Z|œ[°lwnK{£g_–Y€ŠplªF–à¾i‰8•™Cl|]« }¢˜†É‘‚ŒU³w9À´ijšdep3‹µ\›Ãy’™h›§[Å›„»‚Ë…¥¤TÆà°ÊÞÈ•Á¸­ÀÊ‘€}Їq¡žTÂß¿¾ÿ—”z”‡B¤Ì¥¢muq?h“_X𮓀¤ q‡I†‹4¨ù¨QiE¹²—±ã|žJ–ßj¨Å—Ûÿ͛؅oqcÿOÿ¥ÐlÇC” E—·\Á­x„½l™E¡Y‰À_¯­q• Èˆ¹]¸VušMO”®vteD¤Ç©°ÊÖ‡qy|‚]Tw3kŒ6vŒA޲sœÓz_Æ(nqY½Ü´„ÞRˆ|j‘…eŽÄ…{–PzS”Úps‘c}›k–È`‘ÍSŸ®i¤Éyæý™¢öMvš@YkD‹YžŽSv”BdwIxIVHaWiBcwf™©‡–À½éœ‚·zŸÄ~|L’ÛH~ cœÐ~«Ë•¾ù}”Åh•ÁbbšWNj8”°_¤mS-fS_‚JfŠ=bLRr)ZuFh‚Xƒ”‚u c~Ž`b{C^<g~9]u0Gd8EXDr–Y€ªVJe6;S$;H=LiQmvFMn8F_0:X)Gb-ZycPeIe†fp§\u§[…NWtOk‰]Àˇa{P|ŒAj>c‘=]ˆ@_ŒD]Ef†Lgh4m\f‰=UtBw”_ž˜np„K`u@iXdsJƒ‡\XvEUu7q‹hp‡TЇZ‰‡J‡G{Pa€UÏÉeiŠ`BV|5Hk9Mn8Oy;pƒIlŒF_ŠHj}<[w8avKmƒMžW~’WžOs}:^nMŒˆWxYx W‘cޱz|‹O^n?SkEd}Tu©Ve†Hr™Nb`t—bƒ¤t‰¥_›d… [}—Ho3Us;X€^{©Yl”U YdŽSYuZIr}Np‰S]wL_uGa€[wqx‘x_Šz†¡st¡gŠ¢Nh}FeyQv˜m™±g|w2JQ,?O@dkDlyD^}Y`€\jŽK`‹IexJRtGUdkkVixLI„`Ba]CM8OU:d`3dw7`‚UiUƒ~Xa‡cP…XtjFiŽHM’eYjUOm@\aHTd2WO9_c>[>YmSpeHYi;Jg=Q]5P_/f`:zG†™K‰Ÿ`j©hcˆctS™€Cj˜YbsVhrKhoA}YŠ‹L„—^azQTdZ|Y6w‡6„|Jÿo8ÿi.ÿXÿ_ ÿ_!ÿd&rt5M^QK\3IV.DG='^.77'5H+],Q@ shrŠL£‰h­ÀXh׊~‰w›•Vœ¸k­ÄŒŒÄ‚L°‚PfOzm(‰Œ0„°\‹¯q‚·djžbN‡^Ug=rn8‡P‘v…®d“©t»fd”`x]}‹Tuxl^k@›e3K°bHY^fB#±d;¤Óp¬ËœÓp²‹Ž‹n]«]jxUš‡Y¬¿bÂÄr²ÛœŸ×’tºf•›O˜¼jªmhœ¡g¡«uƒ£u„xBˆ|A£}L‡œ\w~{¡lQ|œz„~}€—1‹^ƒU†£W{LfXšdcjTY_6†a@exDtyIɇ>šÄv”“Ì}WÇV®¼PØØ~éÅ“¬¦ ¨²qu­ƒ¥…E¿±w•Ðy£¿`ЍU‹«Dœ—S—ÖbwªQo¯?`S)ƒ€=r¢bnƒb†”1ä•a”ÀÑ‘­o‰Ž_űUÅi˜…H…¢yf–Xnw2a‡M3t9PKˆ>“Íj£Åh_Šmz;q—T‹•S–®O~©b;wJ\_6Œ’1Qªs/G;k^©Y€“H‰‰ZXM¯] ½ŒºÎy‰¡b¿°}®ÙŸÌÈmžã°r{Ffx=^Š;m6wœYqœQ͉Z€ÔuÃÛs‡ªŠ¨°œyÕz³ÔT‡™y²tcŒ×z€qpÃR„ž6˜¡,ñ‰=‘Þxm¦:x¨U¹»:˜õj¸¹/Š˜[ˆ¤fgs:˜·P´cS˜Ã~©¯g™W|¡N„‹HV¡:OnKbe?‘Kb AŸNœŠƒ› oouW“mx²n–œeWŸTµyFdÂH“}Få¥kyÿ±ˆZs”Dx‡e©¥Mª¶a~t¿½mo°xˆ˜Vycˆ¹pkw_ ~lxÏŽ±·\Q§To~G®¿À¡¹Šž‡{w<…‚W¢¡`›½t…dCf>xb2ŠFžþ„Ùì’©øV¥¿]Öª½¤Øq¨ë¤}¨`êΠéÿÌšÂJÿÿ§°€˜ÿš¬î™­¦P‘¸”¬£d’k<ÔÆw¢¯Hº@cOit<˜¦“”ÂZt†0\g4Ÿ—Xy²a|[R\n3Lf1q¥6±Ž]Ýk‘f^tO£Ïst˜G¨·Š­àwŽÅyq½ai…A–À€Ml-sz[™¨jѱ¼´×Ÿ§êˆ®ì…­Ø·M„ˆqx±H’—dµÉgz‹Z[€=oDk`0gg=™¤Ocl<jo6kifº¢­ŽÇ{•À†…¯x–Ér’ÊqyaŸ¸•’Ãpy¢n—¬Q›§«Ò|‹Ùev¤_r¡HjŽYµ®]g‰1\†7XŒDl„G{«s{šZb‹JPdFl<Ki5Pm>_HlˆM†«d…¼ef„F=U :S1C_'<S0TwAUz5:[*Sn;_tFJk=[zcvšprƒfoL{§Q~œkº’‚°c’ª„‘¯gˆ±S\†A_…DJm<d“Sf|Mb‡Jkq?_}Vž¤†•¬qu‹WWsBm{Dp™Gµ`È]„¯SOnOƒ˜TgœaiP{ž[n”E`yeˆ”X`}U…Ÿ[dƒ2WxAjƒHOo9I^?Rq?dBVvAcy6Qq9gƒNzŠIp”k–Lb‚A_|VˆU|žn ¦XYpPŠ¢[‚LZq=_x?PsKn’Qv’Q{ŸKk^|—y‰£w‰±u”¸p~žMb‚Ff~Ba{On“p‹±y–±]„¡[‹²h‘em‡KZvSiŠNh…A]xKsˆRciVRndu–hjgp•il‹`€–Nv–ošÅˆŸ½d€‘H^lBe†[šŒY|ˆPbpI`[ušqޝ\‚‡Y{JQxQfrUy€FfšW`^RnEQg8Yk6bv;`„P`XRuQn[G^€Et{Qs“Ac’Ywv^ZAP|PC[ETK2gX,]q3MLUjEci2Zs@atHVj=`j4tw=u‰K~Ž`v˜cfŽe{ƒ\Ž“Ot–hVŠuQlJRb6qj3z‚6eŠ]bgN_e@YgCU`=maMÿU6ÿ\ ÿ] ÿT"ÿ`"kj%Ap2>\9<S"KY9H2N&DLM`Xr.|'`§;wuI¦•O Ñb†¿ƒh¨wqŠY‘V’µu† _`šŒ‚…iZ’7gzC‘GŸa‚¯kyŸd[–SdsIƒˆ7§Zœ˜`‡ºw­¦u»nvopI„’Kr{sq|?†Pª¥]‘¾~€™\¶„JÎc”ƒ¬…oig–_~‰Mr¤fv‹F£—dÉÇt©à”NÖsiHy™0ldš“Mµ»i¼Êeáë~’åz‘¤läwIÔ´_y™j‹„_‰jF¼vS¢j§’D¨“Z›²kˆoXtaJseE{f[}x\]Qeg2»z8{ïYMw½c‰•Fº¤\æâpçÿ›¢ÿ¹ÎÆi «€´zXÄŒr€/ŸƒCå×€«ÿÉ·Ôy}á‰ÎJ¦ø³œ»x³y{n2sšHˆ•K¹•a£²ql°lŒŠPrÈg¦wX¤Ëa·µŒ°À]¬–l]ÉŽV|8M{Ip†4h¨Z]ARkC–[7’uduÁˆ¡§ToÒi¢›L{Àz­xDa©†N}H(^=3?IX®m(ÿÝ„ºõ½® M´µOoÀ‡›_k ªU¡ºl¢Ë¹¬¡¤à®D¨_Ga uy8Y Q‚w1[–^”:}ÏŠX}€¦µ\jªugR¥–­¥ bŸÙhÿåšç¤zt‹z…pP|{B—^²ÿ‡³M…ØšŽ†Æ‡ŽJx›PhŽS}|8»«Uйf¨Ë`œVx…Pq‰JcvC›ŒaйCœ¥Sg´3j=bˆ<r%°Ä‘“„V¼±b“špiŠK`rZíŠUÉ煮âs«ß]–—®ÎÅ{Õâ»kœt•›ˆŒ¤ZGrnå`8‚Ñ•ƒ¡€á“A¬»uªµbp T°§s¬è²|¨z§£M©èc‘šx™šgIžTŽ~`´ÅwÄ]zŒ2Ò°aŽõ’ƒnŠ«P™Òߣ«ÿ¶Â”t¦Äa–ý§j…L±¶°³ùæ³—Ø™v¦¢OÛÇ’Ÿš_Áª|zªPÎîå”x­¢cÕ¢iÿÿϺìbœ­d·Ûµ±ë›œÚ u”>šWsoJ©J8‚MXC±Á—„¤Ry‘€|‹PHu&y_AvG–ˆv£Ír³âvˆËY@‹(žn^”FlyDq–HžžibtVgoa™£ˆ¡¾šV9nm[?SR=W)BX+˜‘‹z‹SœJ¶e™¶Q­«—©â’ÂЃ|žf‹¸Q²Ü„¼ë›‰¸`|¯M€ŸT}±GVb{Le˜VdƒV “Wq“hsx†·…‹»lmŒUo–gj‚MTˆC^qRJh@k|EpŒ[ŠfnŒKMp/OhKnEb€;m‘MVh<>^6J\Gg‡,B^%B[,Uo.Ee+=e+JmAHf)AY1=Y(B\Q`…@a‡Fj‰@ahL_Xr‹^{¢x”´€ Æ‡™ºzy¯Q\ƒSi˜;Hj.sŒ…õê®íï‚bEp^Ç¼Ž„ mˆ³h†‘^w“^…·d•ÁƒšÅz~¨ZŠ»užÂp„¼p{«az¢MgBRƒ@dŽKfsSi€IU|Et›dpHSi9\l?pzSfu9Uv3ZpE‰ŠE\oFezPhKjvGkzOeu\f…W{Œb‰‹HŠV–W•~RypBi}Hfq6RiGY|Fk‹E`‡\‰ª´‹³|™¯~ˆ¡\m;QeC]ƒG^vM\{n˜¹hy˜v¬¾r‹¥a”AbxS]x[Œ›U{‡W‹MkqJdy\o‹fs˜iy’RMl]uar˜u”¸sv•\iˆV_|g}£sƒZJfnKX}YV‡tŠœbe}Wq‰Ski3w‡HuŽZža—‡pŒ_„¢Upœ\p˜\ZZFUKWJiM6e|9]€TjwPazK~xO~zJOŒgG^T_W4e^&e|<W‡K^mIay:hzI_€JeM„{Cc—PlSzvWh‡Uw|]r‚SfŠV_€hP‚_WrHcf4ox7SŒ?HsQGN5HL4=V?MJ3c\*ÿf0ÿi'ÿY$ÿT ”V d‰5UB;o/D['SX HRLV%Mh&j_/˜‚5®GS¢jw\Oˆ‡I¨§_”Äzf»Z‚eroJZRVoP]}PO…Z?kMsl@ƒ¡=¥®P¬ÅvÍ“jn‚ŒVœ\–´q¸›‚ƒÓšÌžŒe¸d|‹si‰Qˆn8©~en‚[²[TÓ·NËë¬Áç²aÙ¥ˆ|ªsn¤†\’NMrM›`MŽ·Rm±~¥‚?x´hm…nxŠY•‘?ªI†I¦œF‡¹gÀ¢j›´€¢v³¤pµª^·xž˜}†™PvR›pZ¶•g¤Æmx¶WmrkyVEZu@‡L2±wB–„W••VâŠB‹±t”˜lÅœ¦’â¨o’lŒ‡\Чh¯–ŒèÛŠ¨ü̹¾‹žÃ½TÁ†}i:¤¤TãØuæÿɋη¥k‹ƒ[§„\e«v‹’:¨¥Y€Éx˜™S‘—R˜‹V‰{\“‹n›Îi‚·ln”lpoX‹}[–»aVÄZor9‚ŸI¤c¯p…«…{œh‰žVO…[Ql<†“Qog{—›<™žfšµf„°X2©[2>>8aN>°“YÿÿjÀÿ»¯×ª©òy\kCS>‚‹1˜¶_„¨ƒ_‚q_j?\yCW«D\t8q”>\†Lˆ™;ŽÆfa¢N}Ž*d“ayhA¿‰tÊüg¶Êq¨Üm°Ù|ëˆWºÿÀ€^f•8“¨L¥ÜŒÉ‚G¡Þ‚¸b­OÊ­r¬¨‡iŠ`ކ7²¯HĸƺeŒ¬w|/{P/X†A©c(n–iЬ”Ÿ\w~Kr¨Ožœf°ªeŸÓ’~”L¶›[^L«‹3ÿœ{ž†n…âv¯Þxt¡V¨Á™y™au˜AŠEuhCsƒJ”L÷«mq€R_zRš¤Y‹’r~’žÁƒsŠe¶¼ƒq˜Aµ‘T©¾}€”Z^]Ž€Q±‘rumEÁ¡xhV“x޳oGj+8?v@VÀ½ŸœÌ¨½ÂÈÆLj*|9¥à‡rœXžÝ‹ž«_ÈJ¥ ~»{ZÿØ¢­´ÀåÁW›©q‹|6p‡l•P‡­Á?b0g„LU‡PM_:_~BtˆIx©:—L™†w|P¤¶|¦ÇLeœ5yƒ<rŸ>loXe­.[c3zƒPM<Mg*znG‰JŸ­eŒ¯[èòÁÉĨ½\X˜5{…=¢™I†–mAgRo/Qx3…¥QŽªsy†Q—”YØÓˆkmPqN­˜}®gŸ¯z¥ÓxœÏ‰“®V|zJs˜HXq:»ˆa„YzŸPu…]Mo)i†K`rTQh?ScQG[>dvau–OokFes2Of7d‚:N^Gz—OZs/G]3_ƒXk‡T]vHep+=R/Ed%NoCw‡Kb„9>b3@J4L\0G]2CY%@]$?a*;^Em-Nx?]~b–^k‡;8U'Ka4lŠv}˜^޵mQpDg‹UŸÀÕGZlgqƒz½ÇÍÁÓhš¿o”¸……¶xx™awŸaˆ¼”Æ|Nz]^tU~¤w–ÍŒ‘¬e‚­jn›h²mÄq„µPV}5k4B`<q”r‹³ˆ½g_…8ReDCI.HZ6On7p{F`q8qz7Pj;Ql@y}Aw~@q€Iƒ…BvƒU™ŽY–eŸžc ŽLZlBcqNdb/Zi>p‡MoˆKi”yq¡pq–s…ªmx¥eoŸf€“>GQDpˆAg|;]yj‘°f˜¸‡²Öu£¡mˆ—^wYydj‡c’aƒœZ|\‚ªr¨b{‘a’CR}hµq‹›r•¨g£Mg~HHlkŒ§s|•anOsWn¡[jŸhz—VhxKc{Nkg5nvAs‚_d•cˆg£ˆO§³_{Äa¤…_†jGrUQTCkT-`}8P|RY_G]d4ehDxo>j‡PatYak>jn.W†GV|Ijk;c|={‚V’Qo•Y‚…Tw‹Gu`ttNizKm~N|~M]”NX}^_rCfo:vu<†‡Cb V<’jIZE<R*;L-]P&w&ÿ?ÿ˜Iÿa3ÀJ#FR#F].Tb9Gc94Z.JF"NVI_ 3`/W@+Ko2Ae?7[aU;/ˆY)¤ˆA›®[P¸x6eU>J/DY(ƒ_2†œ<O”]{iD€Š,O—\£Še¦Œ]sCfMOHEi[RŠyWk›u¨ju‚¥V†¤oX‹Oyg?c‡;;k^eK@ª[#°©~š¯¨m¯žƒ_}§Nx˜XC“WcfJtˆ:kŠG|€uv¬QÆ–DƒÂrj’M|y>t€?|…8šJeŒdL«£a€´t³¡g~¸b¯˜V¤™lµ‰[¨­^…¤\Й_¤ñxÓv˜½fÏŸZÀëy¡Îo¡¹V“¤ˆ‰¸Œ³Äu{·gU€OecG‚E€´qŒ—U°–K¸­€£Ì‹~²‘m•Kx|yªqy™X D¬„{fjagXNŠyA—•c²ºV‚²n¢R¨Æw{ʆ¨`c’eaw7xk<†´@rªjxvav–@sŽV£šAÍs…›m€­eˆŸ`x€“¯`ˆ­¤lÀÀh‚ÓdnšX¹|L–¶¶ºI¾Ë™”¼‡lXÌUqv%lËIƒ–;ƒ·D˜¬k_¶¡½oN¬ËvšÉZœ¥mš¶c’—p^¥T\€5S].€r5’Ãgv˜cX…Am¡6‡`Dk«]^ÀHm”PO†T>yº%Ó«p®Ê‰ÇÎ~‰Ì’š¾w¢Îl—§mÒ?ÎéX‡Ø¼d§g–…J’ŽV{£†Š‰i˜›W[‚c¾o6 W[²ÿœ—Ž^g’fyIy‘=g„<—l"WeAhwR|oA¯¨k·Ä³¿¦c–·O—žy§€fµ»ƒžÑgÿ‡tÿÿÙË«¢½‘c¬¯vpŸ_‡ qlŠBŒ~C…\;^uLÕy€·™q¾—Q‹¾V0m€vo„7v j®~Yz¢F™Ÿ•¸Vñ£{i”—`‹ƒ;|ŸP„”I}…P™ŽGެx{’Jž•qqˆ?rt2‚¨CdKzžT¸›`˜‘J’¸PÑÏ©°ä¤s¿k—šfІRÉÈ{p¢R{‹u”ØF«ÿ™·KŠwJ°tŠ{Un„dz‹ONs"aY?BE‚nLŽšIc‰3]zMMk(vk6h}JtUu¥µt—É?³Ì}Æñ²½¾ŠkÛ<Pt6kwAZŽ0nh?–ŸPÿΤ•Z·»‰\{oƒwu˜OºÌyª©jIg<}R…›q¦TžÞw­â²J‰´`z™L‚¹O}¯MˆP™fw•Ko|d†jq„q‘¡^Y€7ilMˆ`R|‰Qi{RBg+DoMr'^4ƒÆIc“2Vx0\o5b‚CMk0Cg(D_%Jn.gMy“_Ž´”ªfy¬SW‹3[}Jc„IO\.A`+AT(Ea8cnWZ~8Tt/cx-Ol07H+Tp4Kl/NaA•ÆYÊZa=VvYxcc4Z~0Kr5Po@tŠs€—]iˆ;b|E\xkž¸llœ6]zDJl^vpЧf„°l~±tÿíz¸à{…¬rwZd„Eo‘a`…a‘¯eKk>IpSw¤zw¢x…´|u®au¬PZzBb—c‰¸€bzt‹˜ƒ}•X]g+CU!K_6YsJvŽIjŒAl|EZq4TvFXxHƒYš¡l–”Gh}RZ~tg¼w˜­]v…FytBjl2eh=jzMugp‘lЉZŠ›i†µl‚²hz§ihŠ5MTJhŠPbŠHpm’°frŠw¦Ÿj€Ss‡m¼}¨°]}ŠekŠ`hœ\g‰ax¦z§m—¨rˆŸ\y˜…”¬xxpx“a€“D_t2EhZc†inXdQlŽjvuŠÁiv“PQbCXrUVpNdtJ~‚K}©Vy˜rŽY„¢\r£ud{]‚dIrHgY;wv3b…@WxTgjIaq?]xDfpAblKiuKXxEe{F[€>\qBlt8n‡Bo”co’ed”^j‚hpwM„uK‚|Jy|TwˆZ|ŽR_’PF|eMX:cW5nl:˜~Gº›RqÀ”‡sp—HcŠUlp?mt6ÉyEÿ–TÿbF‘P&ks(^ƒ72{6$K1#.U*gdVh*5p:DO,Ca0D[/<V8:K#^J!Œj,Ž„Og¡tPˆcfn7o1z?f…TcqZP~E1K.>DBu?1ƒ‰hh¢sC_6XEgJ ‰Œ-§°\VÊlal[މD²«^iÌt`”‘E vvŽi]iCYp@efEj}I|‰Ho—Dn’Nx’Id¥LbyBŒƒG}³N] T‰ŠP—–>›‰Ve½Wk‘YxŠ5~”Fv˜e^‹P|I‘Žd•šS’yŽ¡j¡‡W]„¢Z‘‰b”´Z¡Ê}žË”—«†¢È¦Ñs¸â~Òœ³œoÐâx’Ò–oŒgmvCd:’‡:•»rˆ­…—§f¢ÇruÑ–„ˆSJ…N“g5‚Îpƒ¥€ƒ«h`~VQQ8xe8_=Ñ”6ÏûŽšõ‘‰Œgh±q²yrš»vœver@g:kƒXŽ<Š’lbDmO¼Ö[fÑ‹`Ot’>l€XjH{•W€viŠp™„R…Æ{a£h¯‹.Œ¯]w»dn…`…«KŒ T¬«n–µU»éq¡ß‹‡§cœÞ?}¥d¾{Pçkl\ŠNØ“M¸ìt¨Šné¦_ã·]ÔÑfmЊjw;“™;u™KyœAwŒA…¯]{„_lƒNa†Q‡•6ÁÕcªˆ|{i²¿fœ±„¨k¿Óc˜§k‹©gˆ¸‹€:‰Á_€²|Ù²\š™CƒœS€”M´·JñÿqŠÿ«œŸQw™o‘œWv‚Y›E¯¬Y©¹‰ŽÀp†”F¥ºuÁâ¤Óれº‰LŒ”‰È±w·vÿÿ‡Äìæ|‰XÒ>­¸[y¼}™šBTZ1px4Ž8ŒË{°s:rps”˜R»Ã’ª\ÿy;¨ªc˜ºl¦·z¬x³Ðb‚ªq¤³R¤½Z¿Y€¥O£‘F¤Ì‰˜¡nbk6 |˜»|›¬KYÅu«>Áǜϋ‡~2³´q’¶te”Tz8°’V£Âœé—Z©a~~=ÜÚ¡˜ëŠvv;ºÃÐÅáÑz”aǾtD¥.lr<g€T”fG—‚l“¸L<g%MM!Zd/[y6N~1AE;äê”Äÿšh9 £Qÿ«ÿo]j•„–’y‰Ám€‹u€H¦ùpb„Bš®Œ§«bYŸDN[8=O$S`Kx•Ml‡_gLl·>{ƒUzN‚´jqªxreS©¼~¸£Põ`°¹…§«Œ‹L|ƒSo†Hlv9^p?sy=kpcq­HpšVq•Kƒ«Pgy5Sf4v¥_¥Çˆ©á†–ØgZ‹ASgDhŠF`x5[y@V_EE_)TqFY~Dp Wt”XŠ·Sƒ¾T_ŒQ[˜3Oh:Bh0Tz@Nz9Ih9iIœ¯s`<V{Ag˜=]•D]pOluLšÅh“ÅhQqEjŒQŠÇRfŒBMYG›¬Y“°F¦C¢¾€yœUl•@N{2j{Pe‹xmŽ;^r8Ml2OlGs‹Ur’[|ªâì‹p‹PQzGOjD`‹O‹¢Xc‡ZoOqx8O}d¾€‚°gv™lazWOmKVWx‘‚¨SaS|™UO`D]t?Zr4Sj3_pc~ŒZ{•G]€IUvLfƒX`~QnŽj§t†•Qz…Vw•ešo˜Ä}‹®fs‡KyQ|;kgAelOgzTftFd_OXpkv˜r‚¨nqœGg€QdŠfŒ·kŸ¤y~Ÿ^n~Xy„V’–e“Ÿn©xlQ_€Wu a€ ZwœUa‘]w¦uŒŸo‹µmmŒrx—X[tTq‘Uc}:BV2?XBPtTc‡UeR]]s™q²‡£¿[‚žMdmPkoP|€>ŸGh¬]upb‘]f‡\nV_xTN‚OQqFoZ4}ƒ4l Qjgi{Vz€Qjed€icoJoHzuA„‚Ly’P†PD¥We¢ai~n\…Pl}UrrCy{PƒƒMlyOe€Se}QauGBqMJ\?ga.Wn1|\7¸vIƒËs–¡“—žjb®~Uy]Zp;–i@ÿ‘Fÿ‡V€O2jq0j‡EO‹K1vR/P/k9kƒ(cf>R„CM|JLr6Al6MX&]X'Tr,Dk;N\8{lNž•PK¨a)OOB/(`Q9n]7Y†@A\I5T3t<z(–²ssœjr›vç‰8Áêf î¨²©‚g¥Äj¯ËqsÍŒ„s§‡O|Šqzwk wL¡£O•¬Nb¸p‡€U|­Rf‡­nd ^s‰Z¡•9[¹j|xhv—QƒœJ¢„B‰½hjµ~š™P‰Ägn‘^WƒRer=r|GŸ‚Kš]¬ f§šHŒZ—•yf T…~G’¤f‘´yy¾ˆ¥šläàqpÿ¿¶{‚ã³T‹Ë… oxƒ¨]t­c‚¤V€±Hw`g‘qt‚R|šm´ V€³e°\ÀMpÌ„žš\¾Ëxa±}[{4ck1UJ\TWƒjk‹ ql’qpˆT‘|Li¢xxRc¨ZvfJyŸRª•U[®~hlLÌ©EŠý­s¬„¦¹L—À‡WÒ\Xf:Qi;]h/Ub;Yf4Lpg}T9{ˆL«©c†ÁpнH€—av«k“¶K¢¤T–æ~—Âs£hz‰LŽ}HÖ‹{‚µ|š£Vwˆ8Õ˜R±©³iYŒ‹p¸|HÆæj³þ£Þ¶\´Ízµ¤b—Ìuä´bx¿jd‡?pB‰ä=p w•—eŸ„X¼§r‰©u}€bs€?ÇUÒ…r~UnĆ}…@êÆOÛ´“çÿøuà­}¥M£‡Cò¤r§Öнà v“Vr‡B„”A¡º]ÂÕ«ÍhëÉ|ÿß®nž”Ï„E«ÿϸÿšm·T…«Oy~^æß{a¡DɪO°ßÚãòn³ÿg´ÄY«¬…zÿ«ÚBËÿj„™FÿâlÆÿÙ§î]›Ôb³Éˆó®ƒ–GÞ¦]¯­uxšjtƒQ¬‘¬WKTcB¡Š}m‰z‡”s`ƒK”fz¡²œ^b4B9"qYÁ¦ŒˆŒmj9}Ÿ²†—B™‹I¯ì}“®D®È‚ EÏîvµæ£¥ó¢¨Ñ~Ž©o¹te|½~i{Hsn5_ÂRzd>žºsP¨AuW|™>†§NЦ`JGBIK ]V,~pHˆ¢YQµ<@[ë«·¶û–gŽ)® Q€VN{ŽFiŸOhd5u¹-kw/¥Êé°‡†ÀJd`9Ìò—ªÿe]•-6h.J p~Z¢Ùxv¼Sfv8•`¬Ñ‘m±kYp\iF}paž©y­vb€¤IzvL²¡ewŽN`s5–§R©à[µáP†˜Vƒ‰X€¤[s¶V­¥…|ŸPÏòНÚÊ횘Äw]‘NGb5\b:U_IQzAQ^,>T!NZ4Vs7€ŒXŒ·r–ÌsÁaq¡SMm@Qe6Jd0Nn:^vJq˜`cˆ=‘­hc„Bd7e‹B€ª\rœDQp-Lb;i‡_X8Sz6u\šÙŽqŽEUf2@]*Uz;f—Td™]j‰T{”a‡£n‡«a lwœa€ŸOPw2Tp8pyPXsFx¦g\}DXt6Ln2c‡BŽÑ]É{šªZ­^[…AMs^v“w~ph~G:W.>W=RgI_eRk‚_y©max9ruOwˆV{t@jc5alSovLtwF]j¼r¤¼hw Wk—lˆhw’Ke}dz™ljw`y•b…‹[€’UnŒ^—…Pp„>qrGjvSzˆFvtGkoS`oQY{eq‹g‡¤jzœcs”w§¨xŒŒ[fyPe€[“£e ³r‡´s—·k†§SsŒOe†pp•t—Tg†Qr¨iz _zœNLdLd{DZN]q9Tf&4C.9O=UxM\…PY}ak“[h‹ooŽ‹­Ã|Ÿ¯QnV_^W€m>‰Jj¥_n‡yRŒUCpVM^<\b6Py=Pm5zc(†‰5r¡[lheˆc‹z]zšbwŒƒ[y]gjOuk:ˆxIv€U€{Xy‡Ex›Y`™g`l\[|JxxIqv@j{IkxPhKjwD_Omw?pAjy?{‚H^ƒ>wmCŽz@w—Zlu|{Zy“_wjY…H‚mEÿ•Kÿ®YfV>Tb0zf=ƒŠ<‰œVb®M“sLf±F…iO‡¡@‡µ\o®iR™ZWy@Šk(˜‘/“®cr²Xo{ThsK=n[@6G\9?ZtN.p-9ˆm0A0H:k["yN”—R­§q¸¯Zx­ƒMŒrj_‰Y•’j°pŒ©\®iPaEJXBsN:—rL‘«k•ªmh¥_[‚Z_eH‰`Hh›MŠR¹”;ÌÆ^ˆã`µp‚zOj•L[}Kf]PV|Nƒi7~‹Vf}Vj…IoƒFe†Až€IÏ´NÒ‘}ªmƒ†OizRŠ„@…Èj¿_š²k½»f÷‹’¬‡ÃÐl°ápËÆeqê®N¨ç}kÔ‰g{_“–Q}©aŸ©xmÜs™™RyÈQ€«daÌrÁ‚OÝâq¹ô‹·Ä€§Ùs{ªt_šSY9\j<\k'v+rAs”M‘ @²ÈY…Ñuy¢`q”NXŠJšfGWÃs©l2¹ÿƒŒÀ±©°~«É‹•˜£„è‘o¦f_ze»l3i“d|n>F”4rc dD’d7ÿ’MŒü£€™Bmˆ.Ä™a¶ÿ~•ͤ¾ h³}eCyZ?°{GÿÈPÆxzŒ[Â{E­‘~Ъ\õà”ÿÿ±ÒÿÝÒÿªÐÿ•ÕŽ™`­LÉÜ‚¡ùˆÿµFþÿ´ãÿ¾ÁƒV«É}šÍŸÞ‰ Ç]¡ijŸT|i)ˆvZx„Or©Tj™CŸ•G}›q¶‹fgÿ·Ww%–€#¬ð¨o¶w–ªr”«^¢¹O—²^µ¡u³Å…ÁÆ|ÛÛ“s¡S…»]ס` È“• Vˆ¹^ª’Mÿ¤læÿÑèÿuN¤ˆitE’Ts¶žåÂxÿÿöÉÿà ¥¡Î✪¡ƒæð »»–›â§~žaù™Rz¤m…”{íˆPs˜iÊ£X«ºUy}ho¦G›„KšlHsDxnN•´WÎÄHÖÕuh9`†kŸx?~²lŠotšwQ­¤I®—Ãߺ¡Þ{·´Bž¨pžŒ¦·´¦©£ˆ„bD|3–“Kƒv`Ÿ•o”<¯¶eˆ°M_o3žµŸÍÊw¼ìys§sw~S\Ÿ.J[*H<"GtóûÚ½ÿÅpˆ/•Çr¬Ä‡°ëŒ¡ll—¸TŠªy…`¯Nv“eå´f–µyÂè¾Îˆd~?ÊÿžëÿÙž§zŒ¾r‚“9{ªa_€kti?Yu6€­C¹gq¬U{“]”»\a¥>ˆ…]²×¥ðÿÆ[w‚MææpÞþ€™®Òܞ_|Df‡A‡¢f‹Æq¯±”¼fž¹”–Ø‚«udŽJx‚\V”&Mt4Tw.]€0[€+Vo-M\9|œv…®bp‹Nm‚^pžPOn:av?krLS^"Td6…¶Kp}sr¡Qu bUv@ƒ¡MxœOu£l‰±r©Jˆ¹i…Æb‡¼^x±VRuiž¦ hwERn31G"Sm<k–`g–;Mh=ŽÈg‡¦jž~¬moŽOc’gs§AlŒGZnFrLX}EKk>d‚>RwIr[j[c~]XtJn”^fŽIB_>QkVl…\[?Lq73P,ScQ’°Xn¢gu¯_…¼]²h‚ˆQnoXteAP[7CX5J_:Sns_wYYp^r˜V_‚bs‡ix“XiyKkMOxIi‡Xƒ”`‡Žb“§\w‚]ƒŽSlwRuŒXj}Mi}BcyNfŒF[€P^…Yc‹\rŽlvxbr•[y~@tˆcŠ—e‹¨rœ¼ˆµÙ—©Ðƒ”¶\d„IRpSsYi}K^}X}«o‘²Xdq4>a?QtCjJeq8HW+>^5N|Qr£]s¦qx™bv…RfyXbuvq‰^g‹Qc^X`Klh5mŠ@p‘Ydg8Q6_NGP+Ne&Oc)Ui-mb(‚2ƒ”Z}™fu™lxˆgWbdflRiR]YDhi8bj6vc=€tHqˆPnŒUO‘bLmVOe<emB]m@XfGrmFz‚GrŒMdLs‹QjŽLs‚SoƒT^LreMŒAsNp—\€ƒOw…CsŠXt‚Pv‚X§ŽNÖ‹HjmOh‚=„†Ih•D}‹]†’Lšc±V•‡^‘¤K€·mv–{–gU°fIZpb0{…I0Žf.GUL8'@R&MT-\`Sr(Žs.u©B2…{VD.IUHZ+uT4w…L›ˆY_¤VXj]~n;‚•>… d’§W€¿p§€‡Tq’V»t=…„G†{JŒ‘C—Mu~OQ‰QjcCr/…žNd“v«=é°cÄÿ¼aÚÈb…iV„>doCYy:€o4s<\rF}qQƒ›QW£|e€A¤wM…ÀpŽ…ubško~Lv†>}DŽ h±so³pŽ•S¥¿}¨Þ¯¹ÒŽ‰Û¦žˆƒ¾w¡_Ç»”vØŸo¥ao¤^T´s Ò~’騡´i] zFs~pV?uj8axUŽlCã’^†û‰‹ŽZ’¯]g¡yn‚9s…K€BØçXÌÿ¬Êêåÿ—Öý²Lô©ejD•Œ=£ÜbвUXÄ¢‘„isžj`‡j¸¡H‹ÿ«“¨q°¶zƒš|€ŸI[x[X7x‹Gy§P\‘E“<š›|¦Îe‚‹Z„’?s’‹_Ÿ_k˜^|–Qÿ¦JÓ猯§š toÂŽo‹XvCÿ‰eÃÏ^‚¨WžnС|羜‹ÿº†š~³Š·à‡ÀÞ‘ÿî©ÿõÉÿÿåÁÿñ¿ŠWßöŽÞº™Áš‹ÜÖl¥y×€JzÖ\guGa6gÒe\­[iˆ>m‰9~’QФ}^Ëh’,{«=b¢cXQrrC“Bz¢|ˆ‘ZjžDT§³µwPëñ”™Ù„KÆÉ˜ÛµP½™‘|SÖ”ZÿÆÃœÿË¹Ê‰Öø—O«Wf(‹²yíÑã¥Â‹ŸŽ;‹‰mJ~[Œq:µxLŸæqƒE¤÷[z¨jI`0ÆcNd¦QŒ±zŽ®S˜Çf‰ÃbŽÈh§ÿ¦j¡S|›*c¤:†QÄœn…¯‡}…0€¸¨itNp’YŸ¤W¢×Œ¨KZi7b^9cª9yPw§I‚£HrÅY\l+–‘Vv zW\8}j8Vb)X<@†’?Õq^Òôm±É{~‚Œ¢¤Jf{DÉÕ©µÞ›¤ÄTMV;B<6iWU—mb{ºz‘’W{µVŸ‰a}º_ÂUbb-mxHµvgr esv[Œ§|Úÿ¯¼¯vçÿ©·™©Åv’¨…¯²€t«Lq S‘©|jLwoHn YosX`ªIvkZ½ä¥p¬O…¤kœ¶c˜ØQœ®IÖà««Ý„]X6Q?hVQWs.}†jo–TÒ¹¿uÌRŒ¡x‹¤nÀmx·LH~.L_>ƒ¢\T…6j…O Ì`¦Ýe«?r7‹·T€’WkˆO_pOUhBVs2j‡I{”GŽŒC«µ€„¯q†¼uµvl–Rs¡U€²Zy¡dŒ©{˜­{”f…¯hx no£_oŸfw§N„‰Z_w0@^-JX6hNaŒ\…µR‘´d›Î†ƒÁWc}`…–_g‰Jf{†žÉ†{¯\gE_Sp™KbˆLdŒLs´Qb¨Mg¤EMw=EZ0DZ7Hf4;K1E[:TZM`|TbLd”BQ~O‹„^[xbƒ¶„ÀxlŽVˆ•U{ƒDerQ}ŽM{”OMx5ObG\n7MfBE^?Y|YuzWh[k€D^€Ek‚ar‹du`¬q ¨Sq„Q{‚R€œ_hpEn|CdˆI^šUc`}œ]u‘UdxXƒŽPRhPxœgœ¥\ªz¢£gˆ´zžÌ¢Óü­µÙ~‘»cqŽCVw]nNWk8PsP_•ff…EB]7i–ZjŒbƒPhy?a~Nz¤_„¢d}€’À‹˜°[omJ_pJ]ƒ_s›Uz’Mq‹R}jGˆ†4n Ge—U]UAGYaBTi0Hr5Lm9W]3R]<Nd<‚TE{ŒNf™ueylL[^b]k^3py>iy@TkAX_Cs\6{x?z”eUŒnMskLa7]_3\k5fyF`„OjvE}wQl€DbYcWipNp{OexMteA€<m…Dg…W[ƒGhx?€~?‘€;h®Yi‡Z‡m7£~A«³Uޏmv¨jr|Ytp:Œ„;~[WvaSaFfrZ‚Z ]w·hd“xYHj‚EzA}Š\Š>ˆ£AyY‡•Py¨Xx av—P’s˜¦Kz¦OY|V{t?w‚D‹xHxO’nS¤£K–É“¸~§ªŠ¾„x“”‘„P†¯rŠŽT¡U·ªd‚Ëce’fuUQyKc‹Mys@–ŒE…©jyƒUƒ{J†”n…¢†^¢qU€W:xD]K,k|3‚}Pš>©¿E§àeÕˆl–gµƒVhÎtou`„}M«EØÌVuò˜SŒW]i,I|IpU;­§F†ì†Ä™Ám„Æw‹µc{¤\~Z£•_vÖlœ_b’_zIÄÎn~É–uvf®Ÿ:SÍ{lR4jjChwD`lb·l<ÎÃjƒ«l]vORnP‰r@nd?¶€B·Î‰¸¼»Ý»·æõÌ¢þÚz£¤v„m†ˆ€äÎ^Ù¨š€v£`s¢Z^zL‰K¦ª˜µÂˆ¾´‚_°—µ>LwYle,’­IÀl²btŠX—xK–«YÀÅh†Àj­?“ˆKŸˆR…–^³¤>°ŸvÀ¹a”ÄTŒ±l·•I‡½S{–T{’qŽy=n‰_w}JöÌojÿ[¦<{m3Øé~ÄÕ¢“ªxÖ¨uÿÿ²Þÿü½è•å°‡Úî²”ÐÃlpwU›¢IyšNp•dxo6 ¸kg­`¬‘@£Ú·n–ku|Y§š]YxrDŒ¹I‘¯Yb‚m•z@z¾qƒ‰P‘ŠZÕ°ž½çb±h¾¹³„“y…¡Uѯf”g‡Zo’IÁ‘^¬Ön£}R~g~PŽjbx—K–˜FºÅ{¸~Ñ™lq…hq7{.•é^f•c¦—w°oIb€5ŸZ0¼—H¢šU¾ÅlŒ‹€‚¦—¯r‚«M Íc¼É“—Ò‹² l¤Þqµ†“{Yg8``?w´ZWŽPÌ~gÌï”yÿKgT˜xеrh†o¦®l¥Üs®ßhjIEl;i_7Ue/Xx:b‚ ×NËÈSÆ»‹¢‘–¨{]ih/Érc‡|„«¹Ÿ»Ï‚vªM?Fp[J­ |œYl‘<qž7txB~fL{|T“ÀdZt%‡¢b=G'EN/XcPSpLJZDksy¨xžÌ¬«\êÿ¾³á™°Ý}½äŒ¯èo„²[uwIP1h{[bx<ª¹‹»\yœU¤¯¦ìÂè®Øˆ“¯bk’^c}_dgT*HGX&Ee+fxPu™dn…LBh,MfGmvhi¤c|»Q‡µUޝ~¡äeеqºç Îøžypr–~…—\v—J[„K T™×c¯Lºg–¨h‹¦cfŽIu jd„Zi…Vˆ§mÃy‰½w§h³XmŠ]i‹Wm–NT‚@f‘Jb‘OLf@l…Kc„-Od6Jc?ayMeyam¦Pˆºmuˆ|²®vQj7nŽMqšOwˆooŠnTvF\wJat<^yI`tFk‡t޽‡£Õ‘šÖrvžPNg2Gj4I\(4D&:I(Fc96H>`yao”_nFTj1DfBr™swšPOfBj„l–¼ak‹fpr˜kk‘V›•ISf(<W)@X5I`CL]6p‹WYh3GUG`€Ya|Uc†Tt–iuŒZ±eƒªe–Æ[q‹Op…Z‘¸a„ªV]zPhSMmA[nL‹€BYtGoˆ²ÎzšÒzˆ™VrŸu˜³ ºÛ¥ÎÓv™¦`… Ga…Xnƒ>Xk@bZzXb€Ll…Oa…ep›c˜`zŸXpŸ\dˆLayKOlkX€—™±cyŠZаjްu‰ªkhŒF^sG_Gs}=jŽL\‰VXsMZuChvDmƒ@cˆFLK@V?BP.6M5YG2md'I‰Rkd_`qAb~Ttk>fƒ;\tHQ^D?`<`I0Wn*YyW\pSVyPZf?jh=yr5pVFŠ`F]F\L/ad/]mIfvUbgCfzIPrGPaAeb/sz5o”Pe˜Tp}Dh3Œt9v“Ou€a{@±w@‰§Y\ƒ|Ll[^ZBwq<PŒFEvVXTCuY0„ŽHŸ‹P{²cX’uŒn]™¯T€Ípb®qkl €Fƒ¹dh©s†Œf °i¯Å{sÏp¤†\™±ghwulyI[Lx{MLJAKT™90¡Ÿkl­…onsŽ_mŠpl‰@tvEŠˆKv‡bwf•`d‹^}kG‹ˆEœMp¤Uo{D™…?w¦bnsL[tEt}<•™W[·yb€Gv‚1RŽ>erK•2ž¹S¿‡Œ´–Z¡w‚sHh”V‹mN“€Cq£crqHŠ`NŸu^s7U|=Zk-®‚.§Ì…Ù•ˆÀw‰Ä€Šª|B©mjDšžM|ƒ~tr™‡…‹¬°ym£{VEYz9BWXjT(b^/Œ_=v]µ™LX¼‰»„_œ–m«¸L‰Ü`Xƒ\˜z3€™\„—t¶¯| Ù™my¬|‰^[œdˆ|AÊÅm˜Û©¯{O}\QjH±‹9xÓl•‚?Ž£s_Œ`wWCrlB³šCªÍ’µlŽ·„k…n]\_yi1›•G¦Ì_{®gvŒ>`vB_w7œ‡+n~^’z=ÿ–k«ë£š—…¯Àm“Ål—§`–°Sg g{–Qj”NÑtkõþ¶¸ÿÀèæ…Áõ“˜Ê©aŠR¸¦5ý–}ÐÿÒl°Ž°²UŸ¹k—ŒR¼¬d~¤SfO†¬L¨’G¨ý…±Œ•ƾ¸r§ËŠp®Pf”BzŒ2R¶}‘˜-ybÿ}m‚HuJ‘i²‰’ˆW‘“J£¦n¡¢aÿžX¬Î[“W€‹F¥{C¹•@o£Nh„;YtK~ƒ;=nFGU$GM$Q{* 5wšLºÿpw¯FJD¦Q¥¬j±ˆÆè•ÁÿY­ûl”¬iŽy¥ÀXz·`“­uΩkJ¢c~r/Àï²Ì†t®¯nŽ:¨¢1[œUñ‘[LÍvza;xcPšqB‘ªqNr=jb*›l^¼èª…žy‚`kcOiwC”’<°°S¾ÿ”z¯t\ˆ)‚ƒDb{4Š¢fÕÒ¥éü´m™qª€…UŽENe'Œ‹bÌžmÛ¤îÂzÿÿÍÔÿz¢ë]â§žŸÅ[{£LrA`9€dC®Wíÿ’Òµ±ÁÖ¹n°_Dc3db/´•_¦ŠQW°E<J.‚‘Gbš1Ø´ºÿóÁ›¬r¡»–gŒ8–›©Äö¹«]t¯^•¢ƒ¨À=ˆ‹…•­x¢R™»o“Њp”GQ„9Od=T^Am†;o©VoµBK`%]dJYu0˜‡cF}.E}-=O&ktt}Šвk—ØaŒ¿ƒˆ˜‹Úõ¯Àæ‘[šN€ Wv’rbMm–P|¦vŒ¼y¸}¢ÅŒ™h‰¹hv‹c_|NVu>Qo7]ŠYj¡_uœDd‚m¼É™ÌioŸ?M[AP8ƒŸZe^n’Lsj}§K|‡X‚¦VrUd€W{ RUx;kkMŒ‰xj„A¯ÈˆzŒNm†MOs-Mk.Q}7S}Ls˜Ys¢Yp§Yr§h~ ……§aZkO^t@^v>Uk-F\*Nk5^Š15Q)8H2I\PtyKZn7SmA[{LLe:I`An‚|©§cMT?TrUdd}`nˆ;HU3Kc(>\,Pf3OjG^~Wb{?]mF\…Te‰N|Ak^‹­p´ry›z³Õ‡²Umˆl‹–s€ŽOTqGv‰Ng‹Nt‹X„‚Rz©m£¿£·ÙŒ®ÊtzJeYt¡znyQnt[v’Qj‹[jIuZ|¬{‰Ÿiv–Qg„=SwZpœcqŸex¥q†ªZi;Gh2@]?Cinklœls¢tušfvˆPis<L[DqŒT]UMOTnCYq?Xs;Rk=Wn7YsB>mC5P@,@-6;(`?!]b%ArAO\JXd,PyD<e<AY6FW7ZN2j`-o~7cƒChŒOjOa‰MaHdxCf~Fi~CH„]H]RYZ&_h+cuAZVdoRdf<Ps@`kDƒo4~ž:m¦`mV|~D™‚9–‘CxN€€S£†E£•Fb¸rK„v[fEqd.‘‚6ž‘Lx°[‡ŽWŽ‚LIšl`\fmtINƒWkiE„{:u§e€‰d•šY¹[··e³Ê‡ÀÊ‹·×y˜×¨\̬C}}=[I†JFdnG\~R]k>ro?Qˆ==UFO;!k`(Us]jlO„yNyjlŸ[stD±‹>‚FŒ–a”EbŸWswH†z8ˆ˜Q}Tƒ‹\ŒKµ¯U´Ú‚†Éo¡žW·f’蟜’œ”H²²Q—Ði€½br­d ’`¢¼x]¸‡w…U D›žUyÌ`–«}‘\ž¤R’Ý[‘Êl§kp°C–~YÄ`¥ÐŽÈÏ…sê­Qsjgu.A}4OC<kZJTq3X[U§u4ªÚ|•Ã’–ÈS[Ì[Gw-PP.al9sy4œ‹L´Ço±ã’{â’t’_”l;‡ÂfŒ{er‰A£“DµÁ]yÀ†@m‡I\3”J;x–‚вH”°fW¯h|Rd]c/¶­f·Ù†ËÖ¤”ò•c’btl3~d<£]©“lÕ¶_½Í’xÂnooJcl<z{8u™Xst:jv;€k=vrEvŽ9“³M–ÆOÛ¶N’ÿµ˜ŸqÒÿ|x‘ˆ’›Ys¦fOoVG|3Kk(Qn#€x-³®›¼uÇÀv„È›LlB[Cix2PqNTq&§w/¤Ö[¦¢qÄ—eq“‹ŠRœ’]é±\²ÿ½|ž}±‹MÁªhÆçi¨ÅV—–Lx±kªÖ~|š…d~>ÌQd´a±vA{Êbz“\v†0f…8©W“›VÒ¡\d“‰“u=p¬[«uo­Á\j•S¡•B_2_j=jg(Kd.JP,`VKn+€m;‘¸†q—cÂÁGƒ“ƒÂâ`qŽHXr@à€M£×¸ËºÜ¢Ü†ƒ¦q~­a_ŒGi™pYeJŠ”?”y­gu[Bd`3Ä•fš±QÿúÔH‡D‚?.y}C›„HÊRÿÿ‹¼éeŸ¬i‚q`³Nhs6œÉPe‡P”UÚè™âÿïS‘1Na%zy5‰´ZqžoIy@V{0qwKàÊMÄ]MH<MHFnlDš®j¶Ëz÷ü¼åÿ¾¾ë¶”Š`ЧŠ|«UÁÚ…QR,iw9ÿÛ¿›ã¯˜ƒOˆ„hž¼y§§NÃÈloÌM‚wn¿–p üR¶ž_·¤Tœ¨WŠa—«I¦ÍrÌÿ ƒV¹ìÃŽ­|—i‚žZ}˜NR'U‰Drjd¯º†³u›áz|šVI~.f`Kd„ZÿêùŽái[‚7UYDe…>zˆF_vAa|Pd;Zv2’W‡´l•ÊušÏw>g;y”‹ÍÆÓÌk¦Ïš ç“æÿµ†ª{}À_”¾tÔÿ°žÄwŠÀW†½^Tˆ0OaCQ|)YwCŠ»o‹½j}­cm›s—Â|ŠÎasŸHIt6?R:‰‚kXiOXlLq™gp±Ew€Jp™T‚ªaj—H|©IZ~:RyHn–psŸT~zcUu=bƒZm¥:U5TjJ`‰Nl€]…£zˆ¾r‰ºXi•RTZ-L^1L_<e{Wy¬VkPo¨EFo0F`,Mg,=T5FY-@S(?L1[rC_y=Qa<i}UkKVjElƒmqV?W/@S&>\5Km6G[Cn…Z²NzZwŠNl˜cƒ­g„¬d~”Ko}g‘[€—]p~f• €ŠY¡hl\k‡RhŒ[oVo]iŽ^tœv´×£÷þœˆ›y‡˜k‹¬Os‚J_pFYoIn€EPuZo…PŽWk€a„®‹¥xŠ€gkuIbx7M|Rqªlz¤qp†dgYZyI`Oa„b† rv’syŸ{œm‹†Y„…Fmj?bbR`žZP‚_OnQ\k@Qv7QrC=b>7S4:U*FN(AU61R,=E*bE!Q^+Ah@WV>ag&eŒ;LDYfHGh;[U:U+…> \ˆªix±jp²in¡ay—Ys‘Ta‚OO}QaeE^f5do7ayMX}VSvSk]>du5cN}yClšE`n`qT{n=Ÿw;ž•Gt—_r}Y…‡G²ŽP‘Áz]½–@‡ljY2ƒ.w‰M{—Xx•a…h‡˜Td£e^nElu9X†LioOrŠA{Mz”Ki™btˆd„^šŠ{´£g¯Ù §ß¶’Ë—Š¦lžE‡”Oš[c…IfzA[sPaiR…h7ušEg‹N§—B•²Gp¬fƒˆ]£ŠEz»`Š–M¢“c€žP{˜[“E“—D Ys“S›€UŸQ¦Ÿg°»vxØ£šªa¢œa^Ä’~}ª©9ÍÀ]¾è°ÕϘ…É~§·U¼|®|yf‘š^†³tx¯‚…q^ŸƒlmÃp‰Œpx«ihˆDdtZˆ6šÌ™ÀŠo ™L{p=`"a`&E‰2E;<T.*…?$¢ÆKŸË…™ÎŒx¿‚n—qaw?w+žOzÈf‹ª[œœi·Á…lä™`{Por1v9‹›YWwdyk7‚‘]­lX‹žcŽTçŸE¾Ø™§¿²¬j“Á“u¼xv‹d«ˆJîÚzÿÿª¨ÿݪ©€pÊ„•…4¬œQ¥Îr~¯c|n]lX^J\i,~Ž4F†\ˆµS»P ¤Z”¼o¬zQˬrwÊš²«R«­“æÛ†uÿî^‹]ux3€‹MPxFCi/>G"EpoefKZ)e³X‚—LV‘<Xn>U3Sw,M[%‰š)fuc~“N¬nEl’u³”E³¹j’Æ–Îн”Qš‰†‰¢PÁ´nùϓ֕­³`еf¤»WгrÑÆs­c¸®Nv¶k ¹c¢Ÿ^›¨_Ÿ¦tÙ—ŽŸ¡k¥‰=ƒ·NŠI›Ìl¡¸^Ò´aq¤l[}P]l-w®;‘aJvùF…›;’®Zpžc¤o–¾YÑω}Òci™H{“Tp”\¾‹Vo|Sg†b`xrco]Mq;si@ˆºUj¨_~qC€z]zZ-h_8´›`µ­P§ÿª†„Ahª`ª„<~¡Vj~2ÿÑnþÿÆtd`€xp´ÿ• ÜzÇçrŠ™£m¡ÓyÄØ¢‡Ò”Zˆ4wc2‡Óh„­K{¥nn¢X³¹Lµÿ€w–Q|^ÃÄ€·¼Šîÿ‘”¤`‡¨] ¼xtK°‘ˆ~ˆVhŒ9wo@umMžvRyDœ_m_Y3dMln>™‚C”{Vÿÿþ‘ÔŸCZTr9n±ÕfxyEU/zsB’Q˜¹hæ÷Àp‚p¯º™Éê—1D!Á½`îÿ£\Ä(Sh.u…bŠ P¯¯µ›Ìy_˜S”¯~—Íi}·\³‹ÕÖÅV‰!c{Ed€5e…IUj;Fo*:R,¥¨’WwHƒ„•Éÿ–«Ú‡P|3^yJ\tZ‡¯e©Ôž‘Ážk\…—u¦Ø[™ZŽ–”¿Í’ŸpPsGY74H%hxPW3?c3b{a`‰d}œqt™nao`~¡\Sm;IZ7t™C[k@•Y‚±`nŽMmTn}T§Zl¢I~©_‚¢]s¢_z´h³\q|GnNr—[±á€¢Ú_k•Y„™C}’R]rXggtœjXzMXd?k¦Kb‰E`VaskƒŸl}¤^Ec2dpCjzJ}“B[d09I+BQ:v„g^kE`wCz…_]xHg€ak‹glDHk@Gl)F[бao”Sd‚r˜¸a€‘Vm]´u† u€oŽ‹R|”Xf~KqŽ^‡‡W‰•d{Ž[•²g“·e¶j‹£mŽ£^|’X~§_‹­~‡º¹úÓ~’™eŒ_‘¹etF€–K`Šbƒ¦`xWbQh†Qfr—½†³k`i>BYHk†Jr‘h€¨f‹¥dt~GGc[`eg™s|˜‡ Å˜®¿…ƒ«sˆ°rr™a~žer]o™ZK›YIpdWaC_r4Uz<XvJBe<HP4LP)IY%Sb)Xd/Nm9lV/uV+G]3cL6|i){‘@ŽNn™ZUŠ[JqTfR:‡m5ŠžUˆ§pr«ql”ve€kcƒa]zVNvCSaF[`6gj4ar>SaH``E_n=juGs…Dj“OkŒXg‹JjS`}Lpo:~n:€Cj“[w~TŒzBµ•K²Óv›Õ™r½‹€†b‡“CŸ¤OÊjž¼o›´^¯¥cw¸‡hƒp—ƒE¤Mv©opUŠŠMw¯_ZREnDJX4_i7–e<¼c™ç¨–¿²©­~•Éx}®s—“U€ªYh˜ghŒT†rMvƒKƒ„csZ–£\…ºix™mƒŠYrŒEg†W_uN†qD™F¶¥Oª¶[~¥pl{WWOwZK£w<oZ™fJo©u‚˜k]Xd~7r4––>¢¢WŸÉq‘À|´®uš¼…Q¯ykmSr~N‚QÀ›Gk–c|b‚˜^grEn€AuˆFw˜OqŒCt _w“5pyk•YO§Ur…6[•Gfm?G†<Ea'rK$Áj0~âs}«~TXPt1fc=”‰=t¤\†EȾe¼ó†X×’kk8e—`j}>Ç@fÐiœdFCˆaWb&ci7gC{GžR¥“M…Æjt~s•xI†Œuaf€˜ip­ÈRÉÝt†¾›w}gµ~P“ i¦k« N˜ÈŠœÏ‚— ‰še«Ù^¡Äd|®zsˆCZeF‚t5˜‚M˜ªl¹šwÙË„§{z€ìtÂU¯ÝÅØÃž†Äêêb{ŠKެMY•Q…~?©¸NhÛqƒ•@¢ºY¡ÞšÏH‡ÆIdžSeƒGô±I‚«SZ“Fšš4ƒÎ`^‡b¬Œ4…Ý{‰¬r‹xF†vr¼·†Ä‰„¨»\×±yÙÿƒ¶Ø«Ìÿéo€ŠyKc„IÞzB—¢§Ž¡S†ÂYlŽU’¥R¡ž]Àîv ÿ†çáv„¤Œ¬ŒOz¹gp¡Qÿx=žy];~T‚½Q‹ž:OnZ†iEŽ˜co›i€•O~€Os§k’qNצ‘ç‚h•LeuM|’SÌšTgo;psH ¨ƒŸdŸ¸]“¹[X†5u„'Xw5|~Be™F]t+o‹O¾ÏzñÿÎf¥Uwk9¡P‰MÑÈSùÒ–·žrr±4ÓÌ–œñ±±ÛšÁ¶^¶ÿzjHŸ¿z‰Ç†‚R‡TISr&uI~Žmuzud™SÚÿ•a‘SPk+V^(t£m|FÇØm¯šdÙí¸—Ï’Xk6¡œoÿÿu^5crD……X†š@{e5·¼qȼšŒ»S‘ŒWßwÇôµÅØ¥†‘Si7Jl7—_kÙÿÁ‹›m¬·o¯¸f¢ÕX ×b|¢Z­ºmu¶Y¬Ãކ³eÀÚ€Öÿ­^€<]…2´^w™G…^h”LyvmŠ–vG‚6C\+Ž‘¯×zu–Vd‹Dz¡NTk4V}9f‚CЍbT€HW”jÁɹ€¢h~›nz¢H¥ÎPfV£¡ujhv‰jn™v»{Y’4S‚7qªXAb0w¨RнH>h$EZ,^mNzxSpEn˜_{§PoŸ:_uDQ‹6CK(Gb]œ¿›´Ï‰Áåze™8]‚?жXXxRcyDMu1a~HPjXpwqž§tŒUwWOc-^tj’©Œ‹¤\“€}fwOTl7Ic0Rr\šgtšMx•_¦q•©ijyDNY76KFTc?KbFr|Osw\de;LT-Nc<YgFjv>apT“ž\¤rs†Ml‰b}·s|¡Vpb€£h‹¼ŠªËƒ‘^r€e†”Sdt<KcJb‹eƒ¡d¡Z~y¢ÄnŒ²\~\n–`ˆ”Wsˆ_mx`y‡fv|am|]}…OZuY~œa‚™`…£ƒ“j¡¯m›V}¨d¡]p’cˆ qЧt“µa~ž]pŒJ]‚fv¢…ŽºnˆšNhmPVs]c“o‚›h›demLS€hs™er–n}œ…›ÆŠ¬Ñq”³f†¢]{§k±„¥Î„¼ÎpLq=ZnWcw;V>Z~KZ}AMlD>g>EW5Ta1Zk3^i.SzALlKSC65C(2B8E<!eV.†w<s—\j}xb‚dk…[ƒ†L{›Oc‰eY~f`wYhiHK…O^[Min-hG}N{KvwEDpK[P?ak2xkH‚—R¤c¯i†³i{ªds¥ggUewKioIiƒKh|M‚kF±K¢Ís¡Å¤‰Ç†~ ˆ›¥ZÉÇa§ãƒ’Ó¤z qc~nfqg–pQž¯M~µka”kzu[®‚@ÉgqÈ‚Yžcot@Ž;—¢Lǽ]¤ëy’ð”¹vŒÊs…¨m„¦c}·eªq¥^¦}S¯”K†Énw™[v›a›U”Åh­¸h¡·Z²[\Nsu:f‰B¤zIĦge«lr`N›P{b?f¡H€ˆSG{C†X,v©XiŠKog6€Ÿ2‹Œ=~’Er c9‡kBV=s_7v@X‰Ic=§@Vªi]cNx„5_–PZ]CZR6fV,Tp]\b0p}Cz§MsªLš£_Ƽh´Ø–€ÇhV vE  O¡­c¢–r_Ìj_iX\~BKb8Yj+po9_|Q—ˆ2‘¤ae¯”r‹d˜ @”›f“´`ÿÃYÿÊ”™„^˜F}š+>J=Y"h\"—‘4w¬]š Y‡ˆb½}X£\g¡Qhp<vd?]ºGM8—‡a’¶^S{a‚~7Æ™Wv©Žj•Q‡’G­®Bïì¢Ô’Œ¶nÔÐSÆôŠŒÎ³‘fJ°}Wâ¬kæï‘¨ÿ·l­q™x9l—®¾bÕû®‡ÌvƒÊ{²¶Sµç„¤É|ÀÃhkš€h{<¤ËN̲R·ÿ•Ûzr¾]؃\ݪqbá“‚Ž2•rN—­{ Tž~~›žê°|† k}…>¸Æbÿ²x“ïóš†A°æ¸ttpÿÈq{¨^ƒd(Ž­bµSiˆO¦…Y­²btžT„¾tî¾UÿÿÿäÿÒïÿ»ªóÇžÁZÖ–Mÿ¿Œ“©VÓ€~é¶¡•ÔWµÇa—шa“6|„7by6bj0‘Ë2s‘Zkd>}ŽSˆÎ‚¼°yhÞXƒxBˆ£`Û–Kh…Gt•V“\p±[Na*~R[ŸLwµƒažWby0N€@‚3§È^Ðæ˜Þš°ØÈâhÆð²xÃIǶŽêë¯ÏÕ¶jsY€–V†ò¡Ê§sèÿЋƞ«o‹¯n²³‰tǃln=€ˆ>‚˜<q«T†‹m×ÿiðç–šÝkb‘<«¥l ³Š–¥nÁÏ” N•Û`°šd[&ik=ºcbÐʾ°Ù—Ôñ¯ÙÒ‡·™^Ÿâ¥ÇƒÁpÈ®‡·Í¥Éÿ¹¼ò¤ƒ“]}‘M”ËbN¢<‹n~¾ÚqŸ¯gÃä‘ßý¸ªÏŒÊhky?“WÎÍ»¶æ„×å»âÿÕ³Û{‚£ho‰Y…†`¤Qc‡K‚žh”«neŸF„†ƒÀôŒñmšŒ‚§k†š|b–Eu£8jœJmˆR„£MjUqŒkuªur¤dh‘Wt¦R±ƒ™ÈgTu7Nk;Pz=l‰V¥Œ_ƒF…£f‚Ãsx¡;ZUjQRf)]t2Uˆ4Ky-bCm…VsžgržEo–:T†/fjAnŒPYuYÄ~khcÂʘ¦ÖypŽCsˆIs¥Xr˜O}žUšOZq6Ce1f‚@k’dmQx—Jm|L|—Le…1Rz3T‚<e}Ck}Vv‡\’UdlHqœB[|Og–IZ|FhFVt=SvE`d9Zb7T_4UnFuUpˆK|…d—¶ƒ›²}¤…œ Rp“z–Í‹‘»y‡«i‚›v†¤…²e^€Gu‡c §ZnGMuUZƒf{›euždp‹lwšxv[sRv•d“U`oK„Quw?ds<PgLa|KhŒLnRX{[•^pšuƒ¯~±i‚°k€¦SnŽjšSWmZUoWhhm‹AVv@T€tzª—«^gr?Rub‘§r‘¨p~™s…˜y›²x•¯g‰”e°Œ¦Èx‚¦Xm”H[†M^{X^|nkš§b`i;l{7d†An‚LwŽTx•PgŽXT„SOsLRb3Wm5Wt>S}GEyPHX@EW1@Z4RH&|b)’Š3n°Xi›}‚Z£fd£ve‹l^}XSeM]kC\o8Wt?bcDyw7šJž¬g‹¡bk‰^V€TbcEmq1uE„›T®e ošœmš¨|®t„ªmˆ‘cjVnˆQp†Kk…QˆƒPŒ aޏ|¨v¨t‚°g}›_v–jwpU‰TR``a`>•l6z–Kl‰qelRpl?p<µ¨_Õ‡v¶•†žbŽ©F‘³b–°r‡²jt«„~žg”¯k•·^™É‚ƒ¿t‡Ÿia„cƒeUž—F…Íu¬§e²Ï}¨Üv˜Àx¶­Ïß‹¡ë“jÉ’„LÈ£Q§¯c˜‰m¡†R¡º„Ä’½§_¥Ö…dд]tG€bA`¡MzFk‚9ZyXvs9w‰Mx„PuEwIw«BixRg`<tT:nvBb€QlrA£;u°WUŸXNZ6YV5Xb/h^-”‘0…žUhŒ{y‡sÿ·B¨ÿž¢Á‘r®ƒUsWƒq+‚zO™Vu¢~NTJN(PG"Za,bm>N7h%•ËeZ¡„=}ElW)¯ŸG}Ô—\’hÄ‚\‰ÌÑÿ£G›á«’—pš†A«”OÂj„°reªxxœO²›I¬ß€ÈÃÓ¼‡ØÇpÿwš¬OÁµ]q›yv‘?ioF‹Bw•DZŠVsr)½‡:»Ûšæã‰nÏÅ¢Šx¤À}½ ”ŠÀ›™œRŸ›JϽ‰¤õĉ«nhœ]mtDزfþþ‘ÿé\¥jixD¬ªXÊnp¢aN‘H…w)Ü©Zžú‘ÜÔ‹¼Å‰h¼€ŸCƒ @o˜cx¹Iá§6m¶on€=™›D±´As¿`‘ižsŸ·hâÔxaø¬ –F¨˜`ªä›ð¨x¾š§’g­ÿ œ†b³‘®“¨WÿàuÀÎyu¯kÓÃÏÖ—ïÿ¬ðöחѹ‡­‹‡~<¯yÀÀ–ðák}‘˜’›ÿ¥³_kv[SiÌIªd>v¾zh}^РeµÙŒìå‹êÿqÂÿµtôµ›“A™¸Yà^Tfv;TžVc}Z{Ëa^¼1pDnZ4„yt«Ê®´ŒDw—j˜hÌᢺÿ¬¢è”²R³ù‰´ç¢©”ZŒÏ^x£Uyƒ“T©ºuÇm“¬wBZ<{N%‰I¯Yž™€¡Ð‘y¦N‚…_”4€ÈY§Á^¶« Ó v«Ñ´Ž‰”‹WnŽPŒœTÌ’€ÿ²¬Ò®—Ëêp£Ø[⺶¤­M·ÎZ̦´Ó°¶·Å–±t­m…jzf`• sÝКðÿ¼ˆÓnHi(A`Lk2\s1ãàµäŠṎÈÎËÿ’ÃÀ‹‹›M›ÁK§µ‡†¹j¤Ï“‹Ä¡ÇçÍ´Ì£Op”Dg†AX‰C†Ž|iŸH‰n¬Þƒ§Ó˜™¾ŠJ€>ltf^s?ÑÜa©;v˜[Žªl•»`[ª<dŽXtždq^£±¸Ûi¢ÆsƒÂOJa2W‚8`‚CZyGuOQb5jU_fRb|Xo…VrhAx—Y…¬bÒˆžÌ{’µu„¯KZw1c‚3b>k‚Ot¦P åvœÆ\†³jФR¿âˆx¸YwšRy°dj™OfuYÄwœÔ†„½Pyœ<m‚HŽ¢lt^ix;SlByŸR‚ˆ;[„B]vCAV/=`6Ni6i…LŒ°f®å_t_}Ÿho\y¦R^a‹¯ltu6[`0[rKl‡j‚ª|Òs—È‚«»‰‹¨v¨¦±¶NaQhbvŽ{”³flš`ngƒ®\zž[|”CEiGm’aЏw®|’µz‘Ælˆ®ah‡IJZGKiRn‡Zm†Jn†Z}ž_Œ†IhŽFk‹ešÅ…²ÍmŠ”If†W†„_Œ¤y{žq–t‰“SqŒNk†c„Le„NPxJLwOgŠGRsT`˜|”À|ˆIXsJZƒr|Ÿn„§s—¢yˆ“ƒŸ¬uqyVVkmy·ŒµÊl•¶R…¢@Om,;`'1Q3HjDIpWa{>evCn~Jv€N€Sd’WZdWhQ\hDfl;jn9ry>hQgƒUj}Il?c…M^uKf~H†‚E§RyÁ‡z›~‚¤khª}T‰z^mTXl:[pBXr<]h>lu@}E}M€š_j’_q‚ZsŒP|UŒ‹L…œP‡§]n¬ay‰`†‚I‡‡Xn…]|ze”pQ£l|p{™Uc“[Z„_hsHŒvD £[iÅ{SŽhMtCIv2P_0fe2{a?[Š>^kDŠ\8lŒF„’Q”©O§¤[Áº`—ÖsZ³†ƒyV‰8j¬np‰OfDXQwxMŒœQ–ª^‹Â”ª~p¤iiŠV…“Hv¥Pwždk¥h˜“_˜Æ|‚®t¹u­ì~šÝ®`¬™…bPªw?‰Œjvf„N³¯s®Í–·Å}¨Ú¦aË¿ƒxlaœ_SpXŠf6p§Kne˜Jo›TP€iud<Š‘Ir´bjMzg)wƒBx‘BZšb^rJŒwF}¾n³¦kŸç~LªoHi2gf$eŽ5OyNcl3Zv;ao8NntCePjMB~?‰uAh~V‹@}²s[’Tjf,b€2Ql4jq)£ƒ;SÈJmdwy¢HZ tSy<uk+ª¬W»£¢®hærz§‡d³jÛ [¥£–»È„q«y‡sUœ¼k¾Ìmˆþ¯‡‘µ¿h¬–f…j²†C^‚lIe6£j#}¿NxŽC|‡Kap<Vm>jGYʺ_ÅÿÊ•ÿ¶t©hŠ’S˜ n¨–c„»”·—V™¡}}CƒzPrœJwšVz€b‰¢y£}w‡±m§Kv Rp•QXŽ7ho'¿…Kޝ‡›®`Ôênu±s¨œE“ææ—?•Æ©ÌOÂ~Áÿ^ÿîZÿþ£¥ÿÄðŽ_¯ù°¯¹yÙÿ»=ˆŒE_'³p2q¦i²”K’©¼½i•ñžs‹hfd:š`<ÿ瓹DŽt“d’—NใÉðµ¿â³‡Ç¬Ñx–툾Ó{¿Û}¤½|œ¨u›¥Å¢[§KŒ§VŽöŸ°MrŸ`ž¨XȤšÿÿßÿÿÍÝÿÐÿÿ–©ÿËy{Je}8œt7™ÉiPŽQaz.d7}¦hnºqz„Ct³Gn”Sh~:³Ãvõá„Ýÿ˜{‰”¹x¦µ_β…®ÿ»y¤LœžaÒÁ‡Ýÿ¡|µTˆºm–­s¸¯žµÚ¶‡°B™°Z à££œu¢Õ…•§QmZ2wo2`o-ÊȧŸuH Á™^_$„…G¢Âyœ_WãЭÕí¹Ž|Z…i¢©¨r‰q›–ruÅeè–«ÿx¹‰„oÇG\ƒ7tbI˳”ŠÍL·^¹—”ÿÿÓhÂQœ\|­VN˜'ai4ÁÚ¡Ãð•ÆÓtêî×i}ufRzBu‡VxY‚ÛrZ„RHP)aYBœ»‘›Îƒ„nU¥§…»Nc™>]„:‘¬j™¿“–µ‰Kf@\lX¢|™Áu{˜QszVdŸ.z–^¬ÐàÿØöÿàíÿ´¢æqgu^YWuœs—Á“ÖcŽÈ[y c†¼ZY|A\f<Bc*-H:IiCEn,;Z%h„Uhž\s©`¤â›‰¼j_{Kœ¬h®<hv8=X.S]?c{Z“¶zËpq³U‹Ð—¿ÜÍÌälzg…o€¬]iPŠ©‡•µ…¬`YnBjŸW„¤o¾Ïqƒ›FcnBj‚RbŒIrŸOu a]†;ƒM[s=a{]”¸ys¢db’LqŠblŠm~¸qy¥u‚ªkz§Rm”Cnf}¬j‡»zŒÆ‰•Æ‹€¯uŠ´vx‡X€‡]mŽ>=]3]‚_µ¶w¢½q“µx•ÊrÇu»^Z…Sv˜r£«z“¼ŠšÐ„ŠÅ­nGa‡FhŽQx•Z¥_q†R„‡SsŠSy‘a}¤ˆ¬ËÊ÷÷‚¢LavIYlešv|£hf™enQl‡PyŒWkƒ`ˆ\u‘E]~Yr–P]€n“»œ°Æ‚…’DKe8?f[t‹xޏ™±ËƒŽ©s¤Z_v<UvT‹šrv|cu„U€5Pp(Fp2Bg>Xy8AdA]}:RoH[k;[qA_„GI|P5cFBL3IQ+WZ4[g:bc4m{DuSz‘Tr–\o’`ccoŠ\ŒY’X†´vµ”z®„_˜nas^[†MYrJ[l>dtBuƒAj“Av}K[|FapKRoAhuB—{C‡¡Vk‹e\„SksPg~TyxOtz@toHttK†WŒCb¢ioozFS¤\D[Hm6Uc"hh)QŠYJr_Cn1Wc!Ba$PZ+Rb*B]6f[=¯k,‹ÅL¨´lºÇl‡ÚŽŸ¢…„ªaf”y]zTds-Z€O„{ISš:JiDan4|}<‚”O…œjrd|—c°˜U‘Ãeƒ¿~€œ^o£f~YŸd{Ÿ]²ŒR’Õs|¾‘i–gutD„‚6|P”“X–¥e³²x׎±³t¥Ð­ˆÑ®^­gms[[“[‰x9ŽŸO†¼nª]‘´tp–eY<‰c;ˆ Rb™iŒm2~½qR£i‘^=o·Rœ¢hf§`›ˆl™µtLăq_:{•0‰¦_q¹m_¡TW<pb5ŸŒ2q’l®˜@wËpЧjmŽk„9i™Uƒ—?vµS”Zˆ·g¿Š_xÚhm‡^˜@q™O{¬h\ gˆnAm¢HŠ—Z~¿oª M–¶©º¨{½¬~ÃÅ…«Ã†­‰°Çh}¨dfjVzf@‘T|¶x‚šg…„]lŠ[[x;^n1«w9x¨V¦œ8‹Òrw´]c N\_BI{9td#qŸbµŠcÞð­kÕ¹|±?z–Oot8eŠ@|qAh†U`t=ª™6xÁdpM€y1j“<]t7³pJÔ‘jš]mrY\š/~{0æšf‰ó Š±Tªß|mÕrDqªq¦ª=’ÂiÏÊq¯ËõÇ}ÛÿОá•ÍŽ­§U§É˜²ÍˆIm‹GR.ka'”¡W§µÀ¤‰Ì¬ÊÌ‚®ÏœB’‚=M#†a&ÿˆg²ÿÿ}ˆP¼ÿy˺H­Ç¡©ÿ­‰¯|ЦF€Ëpw‡E¡oj·Ý›¡Ás¶Íi¥«`zÁ”ÅsAŒûq¬ÇmvÁr}«i‡±O¶«g¿ÙŽýÿÝêÿÑÖÚ}°ê~i‡>h”I±›Rj“H|†B±n¦is®Xal=‹bJ]_–¨NòçªÆ¿s‘ÿ¼‘¥F´ÄR–HÌ}‰·ÿ³hœYl‹XiQ‘wO Ãe¯ÚxÀ¡‚z}sxaJ¡ÆI…³TT}:‰kq’¦eªÂ®V]/IS’WPºÙ”PP0†‚/ˆ»WÃê‰Ùÿ©œè{o]CËЂ™’f—‡DhHp`.¦€Y¿²šùÿúÿÿÿñÿÄÞÍ¢÷Û€‡ŒIw²RÑæ²vo7æÆÿÿ䛾väÿ{Åÿ»b’GŒ¶Xã꼼⽨‚}üÿªÃØgcŠ8{šasÉGlƒJÈܳ½Ý™ ¹‡a˜D¢s[Œ<gl=sdXk™Hˆ£`ou>jŠKw \n‡gj‘IQxK Æ{²À‚Ãý†|ÝT¤·W^†Q—¥ —œ’¼Å ¸Õ¡¿Ásˆ¿[Œ¼tb€]tzsfr\<LDU€Aq£_¨T>QA`=Ab+BX$5Q#QkBmS–iŽ·{|¤y…Œf|œd`‰bx‡M€™F7N Sg1q¶PÑÿªšÛY{½iƒ¹¨žÃ²¯UKd6Hf7B^<r†U^lNZa^fŒS›Á‹¾è¶ÿÿÔüÿ¿ãÿt„ªBY€;ZzGa‚S‚¤z^o<IZ8N]<h}Gks]œn‰¸qˆ±n»s{žmk†^mwi…®v}›U€Žn~Štž¼‚Ž¿ŠÄwg~p{i^aDz®jŒÁbkŽJx”`zhŽ`€np™q‰»w„Ãrš²v—³nwžosuˆ¶Š›ËrxUizRkŒVn{HcJeƒZ‚Z€ƒUt†Yl•d€¨y¤ÄËù𕔜Vhs<[w]Y~[f‚hy™du’Um‹Qr‰JlS{›O^p=OiRn…^Z˜Ù졢㕒²3BY2CaQLbv™µ›»ƒŽ¥a[sJ^pFqt8<L$#0,.D5Ed;Py?VXs¨m|•BUf8Jw9W`DXe8Xi5Tw9LsNEl?JX;MZ-UW.Lb2]\3hv6YˆF[zKdrHqrMbˆRd‡mZ‚W|xRša„¸a¶aˆhxtR]W\}cfhFZ~<a|CU‡=koJ[uA]gKdy6`€AxuF‡|Nx~^u{Rp‹M]ƒS\qC]o=jj6tzB|‰Pv–V_ZVt[nk?T€ECsJId0Qd#Op,:s<2X3=M*eUpq#‚‰KešJwvEšŒBŸªK¢¯i£Ê{®¾…rÉŠ_yŽzdC‰‡Qp‚Sv‚JxDeƒEN†AZo@‰b/dŒKm}OYSƒwDFˆ¤\Œpp¬nSe~gv…R}›ax§jo‹Sƒ‹Oxœ_d\v€Q„•U±¢jÅv}¢„Ÿœ\‰Â‚“©t‚¹„°°‚}Ôhy¤]f›fpV§†?“»v’¸it®‚†£U’KZ€;qo?|VŽŒGlªe†|j©ÄJÄÌ‘€ÁžJsnCÓ®U„¨n»®T‘Эz¼—u‡|n„^G‚C\O.•h3™µv‚ÆŽƒ¨pm§cpNl—ZyxEn¤h»ŸZ‘¯P~™}n¢mQxD¡IoÈwT}XMlDISpY<uqFm•]ƒ–D‡£‡Àj‘¹[±³m·Ô¦©Ã‘º–€ªd•‘arœT†¦]eª{•‹7|¬zƒV˜Éf„¦tl¥Y€‹Elrf{~VЧlY©n‚‘.u´d‰•L…¸fšÉ]‡ÇŠeÏhŒŠN˜·ud­\tqA™•:{oLÛŸH½°‰—¨^‹¾gry6XƒBG~¢9†œ|‘¢]YiTo†K™„3„§|̨€t¢t™Jm®R°¨Jlž…–—Nˆb˜M«|[{õ“ik”RoE¸“DÿÇ’‡ïá[{ATa:5b&qE$w±l3P=XJ!“€7ŽÀ˜Em=te'ŽªbËìx¿ÿÿœHÿð—q÷ ;\"yh8µ«oä½jÿÿ¬Õÿ½à¿|Èÿ–Þ³†™Èp—±^S©k—Z'¨zc‘›G¥yÓ¬k¼»•¹„Ŭ»øÿ©ãÿɤ噚³v˜™N“b†¢[‹´Vq£dfƒ5on6X=ŸK[_1Œ[<}qD¾¾§Ñ¶€‹ºxl¶}`wBE–³ix˜MAg+n‹.}•L~¬f‰‡Pwf˜xFx·R~n?›­ƒuÃTo“AKƒ532 xKSYg;\LÛ]€ƒdÆ=’¢dpwJ›¯_¤›ŠÂÍqš >“˜Vѱˆ´¦Y×óœØÿ†Ÿ–dÃØ™ÜÿßùÒô¥ÿz MOk-bŒ6Ž®~ƒ«i­ätÓ€ÁÖ©×é¹ëêÙÏÿÕÂë±z˜j[oWÑQk×=E`<†ybËñ«àà¦ÿÿïÿÿÛÑÿž„½m–PUt9]dOUW6WSBuv\g…Agv0_|1™’a‚˜Ou“e¨hkœLL‚;RtLšŒ¡»É|{‰I^oC‹»U¦sFY8nF~›Wšp¡¶‘‚ÔM9M0,B+]NH_GN€Mf†R=j$<I2%8-77@Q]6GT;dr?dHZz=Sg>v“\e8Am>`lOZ‰7d–iº…·Ú«°Ó”µa|dp“h\†Cj“PTv9Ol5~£ObiC¢…a®or—f…”ˆÉ´ªê·“ÁÉ‚“Úk~ÅUi”;dzEMp99T.Ce6^wUm…C]{>]xv„•‚r‡p¨`\}GXtHx‚O^mq‹ŸUmMEd;\Žf~¥oz¦[To?ewIf†cË€zž_ftDeDl~SuhŠ¥cv¤k‘±wŒ¢]oŽv„žo‘½Yb~R[{qkƒ]\pJ~‹R^oIw€CWq:n†Q‚‹k®¿s{œaÂ{–¨Ï¡¶À›®³ln„Z{ŒKn‹EQuLGgUTsO`…WhŠZzœ^p–F^t5Io@V{V‚«¡Æà´ÅìµÏÝ`e†@UlBI][dbm‰mƒžT\u6Bc>b„4=`#>T(I`/DnESŠau¤pŠ¡f}~Ie}@Om3_c3Zj4im6\7m~KhƒH[tMOwBLU8LV1lU*nv5HŒPE_QV^2bg/Zy>rwUq“U€‘c“Q€Ÿt†šv~™gyšXw›htˆii†JY‰Gd~Mm>vw<jm>lnLg†AqzQkŽUvzWzuEwnDmtFnkQakDUm8]u2nt:_u=QrIH`CAl;>fA7]?=L2[R$†Pƒ;X±_?†Z6e8MQ&h\ lJp‡T‰rYœ˜T‚¢j”’d•±f‚¶‚ƒ¡y„Šic„@szBn}=c‚O‰uDiŽIf•PN†Evi<kŠ6Y…fXi=uk;›}:§·g•¹sY·€PsQae7ytBtŽR¢m‘¤W¨²i¢Íos΄^•yy9£™YÂaw›ˆ’\r“cq‚YwSÂŒcwÂdžg{‘qsšU¢x>‘©a¦n…ƒ\h›_‰G–¨Xx©li™Z`wHmh>§§?»ÅhޝŠm¦{S«›HÊÂy…Ï™€¤‹;§vkKQjQ™GʱR‡£[Ñ‹JxÅT‹D€l‚˜xu§UtƒZ‘›X€±_VuM}ƒI€ŒCƒŒŽ¶mlµun€QR—`Kw>Bx(Q]!f~(^{?o›C›‘Uz»Š®gx‚a´W¬Ï‚æ|¦f‘°e~Äx†¸^kºsce^€7„‘7[¥S•ŒL•·†È¢‡‚ðŠx¡[Š›M×´€÷êߤÿÒwÀ~¢¶IpÀz¤V•¥{j–p‹Fµ‘_­ÿs‰Ýx]žnZ1ÁnU·ÚyšWžªgj­bR1‡-^ˆX“r(”©p’œOX£Âcs¤Jþ‘T’›s€¤N†žWk‚Hi°6[|8Žh4¼”L[}H{…\î¢Lp´rw–@‚^›æˆ¨±‡fÙ’Šr,c¥nh·Fs•2n¶B—±<cQWvVDc.ÄŽ4Àõ·ÿÆl„ÿÿ«Å[÷¶g|ý®=v4«o2˜{C|MÈÔŒ§à¥ˆ´)n[y)íÞŒ ÿµ®…<»ÿ™¶¹x|‹|+z«Lzw-®´O~ŸwƒwTÿßÐÿ¤c†?k~'j?w„@ŠY_ŠJ{gA|y1Lr.ctBzoK²G¾X¹še£ÿ• ‰PUf/›‹B[ŸPhh;UZ _r4t˜W‘°fbœC¥±y—¿_d›IÅvn…Aœ›k¤K…“d©Òs‹öcÇëlex<Š“Mez@€„}ŠygZª5›Ôa…±b…f`f…oriJÅÖº‹²bi—+²‰N”²¥¬^¨½ŒœÖ˜¸³„ÿÿÿ®Ú‚tÈYcŠKrEÕµ‡~oƒvh‘zuœµž˜Ê›^©\Z_RІ_ÓçºùÿýÝÿËžÙ„™`}¾pŨ¡éÿÓôÿ×ðÿׄÖa‘Ãs™Hs‚F\‘5†™K‚€I~«Oel>‚®bƒ[›¼o¶ä’ÿÿÿÿÿÿªÓo¡°g¥c|”@[c1]9—±RcWG™šNS`=\8b†H——’ȯ¸øÿ£‰è>?€%&<25./65n‚Hk—Kn{@’—7ÿúOAi)7<Uw4Sx7Qr/XyGWzFL[O|¶j„µm“¸ˆ±‹’žw“ª‹‰Æm_‰8U‚.Y„.Mz2j’AlŽ<bIˆ^Vf=|–YT†9„€a¨äqНRˆS„‘k¥Ü‰›×wi–>Nt;Ku6U|@b•Hp¦WXrDSiB]wgTbI^m`†©Kklš·|~›Zw†t…–UeŒ[^|Gh‚_ImO‹¯y¢Á_‹…d‰¡vyªflJ^p7`s>XrW~¸wŠÌzg•Q_lKs…Np’b}“u™ÂqˆÂi…Èlu—Lo‘l™©_{ˆTf;Zi>i„TtŠnŒ©žÌ¥è…¨Å”œÀ„‹Ÿ‰œ¶ˆŒ£y|¢`y–en†9Ta5MoDVzLbQX„Qm‹L^}AWˆESpb€‘p|‹–¤¾ ˜¸ew›P`F]zX~«]‹m›´`}›V~‹N„’HnŒCdwAP~Xužbœl€‰dZzKEjQbˆ]\`/df-`y>\tE`s;gyKg„GYTFuSLd=UM1]N)`e2LmDMbLP\1`d-hl6qDh—GX‡q[kYXgUjjQ}Kq’\oŽly|`yHf]fzSpnB~{@f}Hi~Kb}IvwOn…AnŒ^nƒQwu<yxCpsLnrHbtDYxFvoIv{=]ŠRstDxHM—^.kU+D,B>j<“g)¸nz´X§iTzMii/d…>bQ€iImŸGf„X€`Q©‡Oš¶`ž„‹^eŒMv…Zr‘9i‹b u:«U†§fxœb…”S‰Mq–gU„C]i8–o5¦¦G|ÆQ„_vMW‚FŠ~?•»Sp·djŠfp‡b‰kƒ­n¢‚~œX™¯T]¹nO}cXm:>‚KFT1\_(tw;‚Mv“ou„YZ”Kj}Eez9²}KtÌZ–¥U™µO^¯v\s^w`.eb:Íz3ôp²¸Š©ey¾|Ž•t‰£eZ‚sgpELcKk_VVŒoYv-|FŸ”Za†W˜d8y™…‘—a˜„v¯±pc©wiUZ“>d|Ay{Gc“<oyM‹…\¹¨‚™Á™kØag¡YczMEpE6P>;V,jd#fK vIn׉_vª[’ÇM Ïtrµ€q®Y`~j¢—P …¼mi§lpŽMv <“Ÿd{«hq§VœuPŸ©u ÕrŒ¬f‰³rªZ”Çz€°–~¯es¯ey’Yƒ‘fy—U ¸SŸ¼|‡Ê|~“i|¿_ ª@ÝËTÐØ§¤ÿ‰¥ÔnÅÇ{L¾„?r-Dg,c[,c“E\€Dqi3‡‰Fw¯ylžQs}<£6Éâj‰ÿµ’˜8u¯\yJ=a6I¤f–f'¸´eÅœ†ÆˆF¡—FˆX¢aV´“†o4ƒŒx[›j¢ƒTˆÓ“³°xèØ¿§ÿ´”šUÒòœ¾Õ©ÿÆ£zÐÒ¦hÙÿÿÝk|BŽÄC¡ƒ=ošo™ÂtÊÞ^Ó}|}i“Bw­Hr’h¬´K§Õ‡Fu@¤’5‚؃½I„Êb^šCmx.p f¯3Ã÷騽~ÅÿÏt†=iw9¡™TfŠK|‹EPm@fŠCtŽ;¯VqyOëÆŸ÷ÿš¹˜h‡Bt“Jh‰:KyBQY0ZY?7Q$QI(dRNJ|/mj?y{W•ŸmÀ䎚ŒT˜¢^š’A˜ŒY÷ÿíãÿÝáÿî­XzÝuTv:vqZs4š¿|Œ²p`Œfxc7fZ>‹¯H’Ü]hœ8hšFbL‰€PÿýÆÀÿŸäÿÈ”×qãæ­¥êw~§L=?'Žhf„Y]‡kReXJuHO„¨Ns’\x¤Vzª]‘oäñÓ¯ëªÓÿ³ºÿ¿z©nªÕzy”dªƒ¡ÊðÀÐô¼­Û‰ÒДŒ´OŠŠdˆ¬xa|I†·^ŒfHl.FCA³š}ÓàÓ¦ •“®ƒÀôž‘¯b§íl‘[žxQœ™^ª°z«»ro€ZÒß¡Zj< cŒ£gPPR`[x°¼šîîÞ’±UU_8ÝM”ÐY±ÿyšÒj¢Ç{ÑÞŠëämƒWYˆ(Qw+Kw@[wM~Ÿ^CX-<H6JSd`tUwY[`Yk„C„Œ‘¼ü‘Îa·ünb±5o–K`?X†5V~@h~`h•o‰°eÀÏw£Ù}¡Î†­Ú|ÍÐs´×u˜±z‹µi}žQ_‘:`”:€³Sa|UkAJ[0Vh?KgKe‘LYŠSNpNen`rX[kGn’io{FeXuž@q‡N[x\„¶’¤Á_i\GfgH`zW{¡[pœGhŠE^‹nŸÆž¤Ñ‹™ÆazŠ?\v=]tNgo˜Ï}œÑƒ“µosŒ`v‹_{—`k‰ReƒDYi@]Mi~OSmg‹®ÿÿÃÏó}w¤|€§kf‡muš„ˆ©z”§qr|Dc{R{˜_„®^_„HVvGt‚BXpEf€@JcVh†MSoYc†f¤[f‚IM\Lk‡| Án”˜k’š\zŽSŠR|†KW{Wv[t•vrœhl|<?[GYrBYqQOvHSS,c_+[q:QyS_lD\y9^oDOsE[iE`m=eg6Xh2in<kt<V€JNg@X`5Oc3pZ:S„<MiaTNBLW)mW0‹g3i}CZqU[cFswAkUelRjCƒ†Dv˜_m’`k‚Wx{JqvIp‚Sy„Wh’MrzMiqEkyJ\q?HqPbXAsj7a‚MmxUs‰HUd;tf:W9FU [])m(t’Eo™iO”jRlUah;^t3mƒ[‹{Yc™ZLhO][8ll6P€KT[džjCt«E—bx´Kjo¡€Bž¯P€¼‚p’xY„UapN{Fe—OoqH‹…E¦ Bbĉlqx|>}šT¼¦ZƒÖkyŸmf”fh‡Nx˜Q§›T‰¥x‰¨~lœYM‡tlpBlˆCR‹IfaAfi1tn0ƒ”Tb¯\i:V†INpFgi2hp.°ŽL†Æaz¨q–”`”¡j¥•S¼™N‡¸_–l‰½{‰ÀWºqqiT_nFŽo3‡ÓOu³R}”Lp£\ƒ­_c¬c‘J¡¤Jg¯WtiC³€M{†h„‰jbU‚…O]­H•v4[µgV–Gmw0ƒO‡”dŸ©c‹¦{Pu2i<5EhJk–8c£N|ŠLcœYm?T‚E~z4x§T|sf•`‡º„T£|fo?dHypZbšfxK`°PxpP‘šSxŽjŒ‡f‡‚Xʺb¢ÿŸ €ˆË^›½`ËÞ‰yÛ¥fœ]x’aP”euG¬³q†÷pk½uyµA“¬YrºkyƒPeiQ×vUrãŸ_€UCiJ?p&HZ“e(Z­fSu3\r1Ui8±mAf[b†Bk‘-˜O¯Ôˆ¡a“‘N‡•I”wCj³m—„=¡·kЦM’ÿljØuI“[‡@•§Wg•R½“L¶±{¡¾ ¡Žc°œj“²U°†yiZE’wBJÿîzÿúŸîn’–Y„Ž<jX)iý®m‘D[Ybl~LftXb|5fœKZ€:iq7ÈSa±S8^!Y^&¬–Kh»~Œ}HyH©¾r›®k†¦j|™X™vÿ‰sƒRa¼e]|@E·ku^g…4rm7bG‘q<PU'Ø»U™é®f5ŽŠU{{?S’WKh&^m9dq.Ez94?GL!i_%x†5`›HfgP„iE—xB¯‹z¥|¯¸–ßë÷¼üØe¸sÉ↡õ–^¡AQu2itRv­JXh:9r5W]8wž9¯®‚íù³Öÿ°~ç>žŠF¸Àm¶Ê{ µ•‡u·Æ‚æó°íÿ»îÿ¥;À$vE4v=‚Sd~4Yž)\j6”¡VÁÕš´ÿ’x£EŽ›wüÿÿÆçËØÿ¸ŒÄxŽ¡V±;Pm0•»e°ÔwÄzk­¯’¼å|Ùø¥­Û~¤¾™y¤bq|QYƒ7b†:yZB]!TO<²g³ÓžošK›Ž“Œ°U„œS¿¾{yŒ\—’qoœWŠxjˆW»¥mSh9+-*7 PN6[lA^|8°Ò‘·àŽ¥ÆƒËÇÀ×ò´¤Ê}² wƒ™Dy¶Kd¼:z~CqwHav5€šak‹K”²IŽŸOJm-&7%35J1{©…‰¬Žƒ©Š¯ê ¸ë„ŸÝ|‚¸Hp›Q™Ådi›mw›~¸à´ÁàšvYa^b|g¨Šm˜¥i¢æ^…ªGFbCPZFi‹ERgIYsIQr=iŽW~µUsªkŒÀvr¡SXuC^†H\€T‹¸lŽÍj{ºN‚»hŽÊ^jL]y`Ч†~VPs9UzCi›Po¨cаakŽN™¾vs•iˆ¨~•ªZt‡?^u=Ru7Zla…ªryi†´p‘Ãu~¨\jŒ]…n™œXq[}š^V_Ks›–ãÿùÿÿ²È鈖¾]j„Wb€cyjq’ak‹^yv›¿¤¹…’¢St„BLi5Qn=MqHgˆYlŽS_Kg}Zm†HJf*.N:Ff_†¢OdwNj˜\q¢Qe‰G_~>Z|a`…de’nq•\sŠIYlN_mBIk9QqDU^,o]2at8U~LY{Rem9cp@W|GXeLif7mk:Sx;^pNr`;gxEfcCRc9?`6pN6Sy+HbH_H-r](wa8_g=L`EWTEi\/fv7_€G^b?za@„r=o‡ZcƒkHsZUYHoM0ut;ƒD^›OXr[W_A]bDkgAPvGPfD[X2^X0N`?_V@R{?=cSM_A_a'hu1q‚7Š•9}£Va^R…`hd<’o4˜±[e¨wQjK~VA€b)†8vŸV|ŽcŽw?{¢S®qi©^lŠj™ŠFµµSš¿€]­ŠOzXrq=‰Œ7|œSr|R„NŽ•Oa½nXv_„j<r¢Hˆ^o¡l€Œa\¢hez[qzDzZ~‡Zt]_‡LGv@b`6pz?s}Dr“PHjGl[.‹p@s­Pd~MOd1{s4s•7Œ‹F|Eo|h†M¦©`kž[—‹h¤O^Z†m1§Po´N…`cc=NS<¥`.|¶x{¥w“°[¢±q™Óžž»‘x¤¡s–ª±¡^š‰TksR²i;p¦T{Š_J›Qbe+w‡4pŸa]ZKsTbU)Yu=–€CB‹5M<VLl„'€–7u–by”jŒ|f_¶\fC_Œ9t>baCwxCvž_Z~V_j;{O7QyZUZ0Š‚*až^RnRqq<]˜Fr~6ª¢H’õl•¤{­Ða«å…Æ|Œºst˜†¸[z›c^Œ]’3®³oÀù¥¿â™xË›ª±MuäpsšGt¡9|Œ?££Me±X[†8h‚-\{5^€8€˜:P¨J–/o T‡žJuŒIvšCGu›Jz®[loHuvEs„PvMƒ›U€9ŠS‘zcüă©h{ˆJxkCŠ{Cb¢u›¥P€ˆHŠÎl­„=ˆ¦‹~‰Nox?[€<QV4½—7¥ÿ“Ý¢o¢ÿžÁ³OšÏvŽ¿\°µš;q9HQ"}f$‡¯c{Âq™›Lg¾s“œRƒŠZjv;]‘PR;Pv*‰ÉˆLBŒ‡T•®gÄ–l ÈŒ¸e¯²tò´N‘J_”6g£E^y3‡E K§Áƒ—qƒxG˜»cfzQNt<Oj&€:×Ç~ šXf•1m‹GXc6Px/Po%f‡(qh.™y@¢|`…g]i–GqŽ@ƒ€0œÇo¾s¤¸“{µWŸÍ°Ãª¥ìõÅëÿÕ¢å‘c S‡’Q’ЂtŸXeIr•WÄ¥{–¯n¤¦‡Œ’‹‹r4ÌŠ€ofY˜o…A§Àc¸á‰Áä×ú²èüÀ¹ÿœg/Ѩudzsš†O™pt´°wb…0އ[§¡ c{9¦Ò‘jsnƒ’}Yu]FE(atE©~jpN‚q~¡ŸŒ—·j‰„s²ÙÁ³Ûɔɯ˻¶â¯”Ë^‹<BZ1sw=-H=F#H\;y‚UuÀK^®=‹U ¹ah‰f„„S™‡n‚¡fK])–¥Lr“eßÒ}\r-™ºUÐÿo†ÆFr¯R°èm-A*):(82C2~€oÉÞ’“Îhëÿéãÿ½‰½M]q7U\=ÏÓŸ±Ýp…¶p¤¼wp‰;Ov:t¶EkŸg‡±œ{¡l¢¨¹ªËŸz­f•ª~«Ws¥h€¬tu°_³Ç{¢ïˆˆÒW:^-frH­ŽSw}ObpY–žƒ¥¼a^e/Yq0MeAxRh¬Xa…r—½†¾qs‘jy‰jp•Rk†^’ÉœÏx˜Ý‚™Ý Ëo·^{®W…·ci¡P[~BBTHnLŽ­}­Ó|œØ‹È[Y‹Fa‹]q‹Tv”_Y`?k„@g†OwLe•`pšYdƒi“¼‡«ß–¥Ìrˆž[dza†”bdˆdy›~®msJrŽoˆ®¼À×°ÁÈŠ§¨[f‡IZkIcz[dnŽdj‡oƒ¡}|™x‡˜SY{<Qr9Qy=LoLf„\…¢g‘L[‚c”ª[y•Hvƒ@qxDfv2GsQi`j™Xo†8P€@Vˆ_‡«}‘«nƒ‘SauQblQZb9H@U†DAb4]L/jg.a|G_yZ~mC{‚C\”]Oo__[?gd3Dl73gDJJ2HS"JS2T\1Jd6dT:Cu/C\A_I.ha&ee>Q_>KSCYX4ca3kl6Q‹HWi?kj:[i:XS9Ul?5mF=O6cH"eZ'ƒm6g VZdYhBXrDonCqxCa€LkzDms9`iBiDrŸKYwVN[;[d-um4‡5s¡Xw‡]j_BcpRMœ†@š¾bm²UiWZh4j&”J‹¾u[½‚ircŽ~Dj©aoŒkiCЇCu£P™okšph{V«x?…Gy™k_]\{@~v@p£Mf‹T„y?fKspUe†L‹ˆN_¢[KtQS\:lj5st>f‡F_FTx:mx9`Y2o4‹ž]`ŒaPd?qb2R’9FnMlW)Žv3‰¤P¡£h]’Y o>¸tŒ¥mLp]YBq~+KžGol/ož=u–i‚©QEwbV\&zg- ­]ÒŒŒÆ„›®yV»ŠuQkd€L€}?w~E•vWyVPxM³V+u¬VrŽcU›V~}3g‰Y{‘Gk›gIyYGf(Wj28~4)8,W5bk/jyA?\DMW(UL.bj.‚‰7Q”oli*M—Sbw&c‚DPxH_R2exCby9|~9VuKe€=FwPU9/žz1£ª‚®Ñ~hœ‰†‘]„š~—‚ÿº€´á‡{¢Š`”U—¡M»wˆ¬uœžOœ¸xeºw`tYxH^˜N{}@€®]wÍM޹VwŸaœ­kl•_BÉWDB&sX3wÏS\›^ i(’ŠP¦D’N†gP†˜@Z›CkŒ=q¦FcŠ;Sj;œ‡:u]“€Co›Yf‰S·’Xu¾¢Š_D½’T©§ldQ…z<[†OŠ—> §n©®kœí•¨ˆ?Ðu«ÚÿyOÑÊá‰ÁކŒG©œJ³©‹¶Ä„›‹J˜žT›ñ•’[”ežxWu—X¤šC„ÍzP™J>Y-BL+:G-:M/c]JkuT¸§dpÄp_ˆ<i†Mrµˆ¯a̦mi¥hs˜+™­eªUiu0uxCÍ´t­BÉÎWUˆAPg Ov$Dn!Œ|HéldÇ•hË|¸ŸX¬Æ{v¦D¢MDQkKM_BH[€}idSŒ“Uo®M†‰^cwYw¢d•~o£²g×·¨¼ïÆŒ²u¨ó–ŸzÄk¬ì©•‰Z~Ícu—uxfM…¡YP~@Bi'Pu0LS~“/Rr=e–)µâbÏõœÕý£Ñë¥Ìó­Ìò§˜“iûÚ†y[_ˆ„W™²‰¢ŒŒÐ•ÆÜ‡ÄXxQwšm0C/L\2`Š5Lr3PM9[‡<cwF\t3NW)TpKh`K’¨¥¹±Õ¡˜¼Ÿ™Â”kUšªbm®*Ai'UD6µ^i¯0¾Ëµ·á˜Å~–œpÍÅÇÉÿ©¾ú“Õè—³ßxÈí •ºiÙñ·—¥xÔ¨„ÿÿõùÿ®Ïõ¾×ò±5A+>H9J&‘ÃZt°PkrD¦`žÚŠçãÆÌàÀ¦ÜpëÒi¥Å^Ž®|Äqº×ƒ—ÉoÌb€¸yx´u~²ox§zwÊfhgl…e‘¢s€¡«ˆ£}©¼’•~ËÿÉÿ˜Åÿ†j¨1A[&:J,PZ;`}DVf=X^6e†Nn°^Ÿ³}§é„Ìdˆ´‰ŸªŠ‹·mrQ{‘w‹­b^`v¤sƒ˜|¸šÂ‰€Kh“J©mšÉ‰•Yl‰I]xUyhœÂ|œ¾ƒ«ðލéjVw;_{Q[mIWi3A[7Tm;RoTx–Zl‚iq–\a‰^j”l r‹µm„¯`p–kˆ¯eŠ´‚™À•œ¹{Œ¢Kf„In“\dNf_¥¶|Š™W›_~’[c|Uc|Q\rYq“u’¥e€‘Os‡BYF_~?SjDVmSd‹fœa…¥xަ~”·iwŸVjŽRl™[u‘e©™VekJYkEZgGWqebuhrai†L_jL[yLdxMx¢Tq•TBZ7OY4M_*Qa6e^?vd:{uC^^TtoSbHRb8@e3/\5:C+HGPV$WZ1Cm3UX@Ff1YW6cR)Pb/TREad7clFquCUp=f^F]‰@bg;[t;4gB:<3EF)GU0Fc;eT+c\*€f<s“Hh…aŽyRnOrz^…„EˆTƒ{Ru‘GwvQ‰~G€œ]…ŽemqLb{Gmm7|†4e{XhkVMmAlY:‰@‹¹L‹²jq¦wav\^HŒx6”¢Sž¥\¼”Tƒ}_e4[y?M…N<f;XM0}o<~ŒQy”ZuŒ`apAqfI±|Mn–`qƒKz™G†‹N‚‡Yx™lb‰Vh|Ki{HR„VSsNCf3rD+tn6t„SowIp‚Ep}MirTjs;‡…>{“Q_S^wKm~9V…<h^Ijl/‡|7…MžU—}P˜]ƒ¡gL—W/_heR/to;vzJ†•X—™K©y\ªrqXtŸC¡‘U’Ö¦€Ã x«‘p]PV…X¹‰AyémŠ—XµŠRÁ¢Sªjh¼gÓhHqÌfvžD\ SUn9Oc.`x3€y6fŸPu~Kg¤OmŽIqD”Œ5sÄi`}VqxLax7ZS5u\B •BV |mk4QŒDo‚&T{Hcm+^wFH`;{`-]v\fg8c‚9prEƒf5°«\޼||‹gT[aj5Vr5~C—§Z|¤eZ‡\p_CGa£cgj3aM›n}W0R›E‹a)´·^œŽnrj‚UoŠK^…J‡s/«Öv0e‡zL•èUˆm{•mkFŽ_`ªSrs.އ?Úìnqî´u”7¿—[Q¬sKo+wz5p†QhUnŽlO|;vn&¾XùÐâÿ•¡¿Šs”_œs7P¸©x£Fic8´½tйƒ‡|®Y¡ŒŽƒg´§_–˜kŸ¤Œ¿x€¥f—´efŠJ§«]¸¾‹š¶q\œn~Q|u?¡’AÉÓdeqDlq8Oa1HE/EW/X`2X\/r<ôoÇí¦ˆê„Lˆ9Pi"hŒBž‹Zjèsa~&ž†D²‘VìöQ¹±—€~@y²iSn"cˆ)`€6wSNh<¢•EÊŸz•Ÿlÿ˜e†§\—Ä|˜VnžJiš2†¤g†²e”TpšZo‹9|‘rT\DJ'duK‚”sa“g¾¬“¥k¢Ç…„•Nš†XÄ箤ު~³Køÿ³hÇ=z‹Sr–Zv‡RÛîvéÿÍSd%ƒ|<׎qÉh¢¸yƒ‚b©ˆ^µqe—rn³É“މGö¢™ÿÏ¡åû‰£¹TU7>G-¥™lQe?Ÿ…ŠŠË`f¤2]r,„ž?N2{VQCd%1)69'ZL3DP-g=ir^äǺ·Ú²ºö·†Šnx«Q—ŒZig9‰P?e(pec™½‹’­yÆv|œRp¦?¯¸ŒÿÿÒêÿÕÄÿ‹õÝ–«¸¹é}®±se„B‰{e¤h£ ¨µ›¯ª„ÖÙ¶ÙYŒ–L™mÄÿd¦1RiJ¡·s¯Ö|©Øˆ…§U³Ïu·ú‘•Øi…·jmo¡Þ‡ŸÛ‚Òy„ÆlX‚VŠºšÎñ¨z²PWy2Fj:mf~XktSLZ8Z~L„ƒyˆ˜t¤kµ^~©StB~‹@\k=dz;[‰Fk“n’”{¬ÓŸ×‚|¤ll~YYb\s‰{¥XlŠcˆ¡l…¨eoŽb€’]‘¡w‡Ÿ_`„KhŽ[}«|—ºi[jEVxKNsLk–keŒ]m’o‘¬~|§JMn:k‹Rg‡M[„<Zn1H`0D^2On=^yJXiAVwDVoGToh”Á€”²co›uŸÂ}‰Ÿgn…z¯qz‰BQpD‡˜^jy>d|kÒ½ƒ™{‰½|ެb Zv‰JWx\†Ÿcs‚Uv˜VnŽCeŒPo~=Ys<SgH\ˆvާo€ f–m Â~™·t£½w¦¨r‡qb‚p<RkIgm64H)8R3C`RfŽShˆRnƒW|™UmˆO`wI^uFRk=^`<\e2Rd8Kh;M\:_]/`k?_uRNtLI[;?b5-`83E/;DQF S])E^9ZX9bn4Z[>ER1<M6`>5^j,omJntI]tKfjJjo;nbDke:RgAOcCK`.d]2]|6]m@T\5€`7w–=kh¢rT–L…¤{˜_ŒT}}Ur|JexXbqDj}I|yDŒu>I€nEs}AvkJ_zGfd9sq>~vEr‹Vf‰gysOqlKl‚Je‚Y`~VkxQYeMwTOb6b&xžDFªmIH7OV-Wa4mgJ’{LPvMjlN~‚.¤T‡ž^m¦X’V|P|‘Ze“Mi|@d|IptHm~MzvC|g@ol5gxR~zEp:rWuo9†x9_}HxwAbŒCl|NxvFmŠBŠsLo“=v“OgqInd>h;emNQmEib<”ˆ=\¬Us‚Kš@ЍJ„¯f‘¤d­Ëa±ës{Ønšsj¨¿|“¨£µ†„™``˜[™‡?|»q¯}{Á¡`ˆ›b—°gn°p¤pCžÏhw·{x—]Y]Kz8Yu;N}??Z2KC/mhBXgEMsCFQ-md;cŒX\zABY0P`(og>©B|£ˆg—QU{B[{2^s0T|?Bs:b]$tr5cv3U{7vŠ;]wK’sF›ebKXŠp<l’eay=h€>•„8|S{ƒWL‹Vmg*u–APiGMc0…c&Wm_jf*ç7ŽÀojkH†{9‡v7s£EMp<LZ(”t0”¿{]·gw‘LEpWIX,·‡3£~ž]u¸d‹€3œœM»Æ˜ÕÑŒÿÿ¼ÿÿëfÿÂZ€/^‹.ƒŠU®›aq•„o’Pu9jêQ\7°Ue²á¦bƒXjw6Go6MW)p4&h—†›xD¦]¾×‚§pC£çf¦ªb{´w¼J{Ê‚†—Fw±LqyB €Z¡Ès Ð}o¾{¡r;¦j—ºjfœv@W#XY$q^&X“B—4âа{ãbEmL<D)AH!Yq(Cu;a^+„[ih.Zˆ0Zƒ)c~#¢Ô`¤Ùxp¬@s€FPx1¦†2_VP‡hB„ob®–x¦¼d›…_’‡cÿ‚f¸–v–Ù“lŽy•†Oa¾D‰‡IoÅnCo%Us4Z¦>dj:Yg9=J%[_=‰Œe¶Å†ˆàs°Â¤7O:Wdn1ŒƒQÉݪ‘ìhÿД¹à|}ˆP_¥e¡vGÿÿÿàÿ˰Í^Š´U£|C£‡Ey±Tƒ~CȰd´²\²Ãj¿§¦êÑ•˜gf£nÇ霶p½ëyÒü¤œÇn¬æqÅÈ”Òÿ¹Œ›vÆÛ³ÐùҶݨ—ÀVTu-ŒÃOçÿ¤}ÙRÁ¥_xƒQ}’c…“qq^§ÇjtL£¡Œ]Ž?Sd0gy2ÍÈsOl9ŠŸ“®ã®„¹wqŽPP„1ªžŒÁß—Êç¸ó½¤ãÿ›±Ò^¨œ¥kšI“n=§‹XÓÿš©º„ƒ¢P…]ËʰÛõ€’µFˆ¬c¶Ö“Sb+WP-qq^”‹W‡¥_¦·j‘¼y­àž¾ï¨ªÕu–Èqˆ°v‰ ƒ‘´€˜Ãˆ‹Ì{y¶l¢Ö™V9@ZJl6l‘POu7U†?m‹@bC‘¢]b„RjœXp§j{¬Š­flu=or-5A0xzZ²Tx¤\|·_y­hsžXl™9S|U«¥•«qp“Nc‡_ƒ¡TUIu˜cºv|«_s”W†½`aŽep™@U|AUrRl‚PYtK_€]„›gZ{S^|=X€Wyªtq«bp›Hat,Bl.Nm?i„Qj‡Hh†;Nz9Ig3k€n‘¾€‘¸`ˆ¼y´qv¤HEtNZv[qyG^†Oy¦o|WÉq«¾gzšz‹­{„—t‚šmz‹Wz•gftBawOn‘Xi€QaŠPcq>VfCm|MZ€kr˜py–e|“bu‘qy‹y–pph7YxPdm?b€W†{,<[/B\6>P?ZhDVsSay_s„Ui~D[mE[sILpE\U<b_3gt:Nv>O_<QT+W`4Aj=GdI[fAVz<S‚JFpCFf9RJ/Ob+eU4bg;Ki?F^@HS8TZ2Mi4I^:cM=pR5`dBZj?\^<^\8f]2nhCumKiwJxzG€EZxMhfHf<jœGYŠplrX§yA˜œb§·qµ§h£ntŒ]Y…UWaLWq>kv5ƒt6xˆAœnJ•n>ŒiKf†LoIyw9|qMqr@dTˆ|Gn~Jp{Ca†b`}WMzOJeEIW/UX2xU(Œ‘;H¹xTbcuW)dj6^c9cz1\nAbz<˜6‘¾jˆ©yxŒ`u‚_f‡BypTNˆEh_<lx(kxCnsC†nBs|Fp€JŸxN|‹Eq€IssNfŠ@ms@bh<q}7\s:{uFh—?—=€—I°‡BUŸPo]Gcy=pb:]~Ntƒ9f•;jx<bRY‰Gxw9‘e‹¿wX§{uxSˆ˜hMˆr‘[1a«[wyif¨FYtRqEg>U†G‡t<‰‰NncWwmMeŒfßy8ÿÚŒg²™W~DiiR|}B_‘fNtPj,Z’4Œ‡;Q©eUm-Sf>\X)“­Hu©{µIJ¤\bI@7£®{d¸r{ˆ@{ÌLT¥OfwC´JvÁhŽ‚Sjz@j~Gt“BX¥Vb]DgŠ={rB†Cy_eG6^a9o5QrKWqH”ƒOWeeWt1Pf*MW-st(ƒwKay8š? _dSnx;—¢Gu‡QTƒ>^r(p”.ia|–J@nQFj1‚'æ°lŒÙ…e¦n‹zOj‹b•Âaº¬ƒÿá¤ÿÿøäÿãÊæ»zÿ©^HO€<}{>­ÍY’Š]¿³•‡Å‘`«ddp@i‚_€‡@HU<XL&1RT<>Žp(rwcv²E»ˆL£´l¡–~ƒYl®}ä«udd~I`‘jlK,Ÿ“FÙÿ¥·ü”„ÑhƒˆUr}H~²Li}<[l(~£A¶c•¥gq–xs’dl’^1M"FK%D,7I"6;k]%Vm9Ld'Šƒky“G_d6€wsŸŸ{µÄ—}e6`]%_‘‡TF)]W2kl7†ÅhŸÌ™r—[e~`Ïxl¡vuiTuoDnxJcuTb\6hvas‰ol•8˜~Fa~1”¨}ˆ V‰¹ngŸ`¡Ÿw”¹³V{Am¥iŠXvxLo)†…I`M¡{W‘Tˆu]o_2Óì¾¾ÿ§ ëwnOM\;mp6òwt\s(_\/whB‰pHwOÁ‰b ”bŠH‚ŸZßÿ¼Ñÿ¦†²g¯½†™­‚Ø¡†L4zstl{IÂɸôÿÉÐÿÕÿ”žòoÿÿÕÖÿÆÈÿ¦ðh¸g~¡Zx¤\Lp=~fAD/JJ2_qEYo1o|Kìÿ ‚µHwn½Ý¤£Érrš_Re7sy]‡r›Âl{ÃL•½_£”†ÇÿŒ£ÒW—J¦Í’¿±|ñ”¹Î»˜¸òj¢×‹¾ÙŽžµW YzZ@d[2ym5€dY‘£Hˆ;yBdxR¥›‹¯õ„ŸÙ}˜Ävxa =4N:¬…‹®oƒÍr„ºp[‰6U‹*Jj6z­pŠÉrÁÓÿÿ·mWXpK€Ÿmyªkºuy«qu˜nlœCRS#?K6‚w\¯ex“kyš[pKOuTPaN[k‘¬‰u£~ˆ´{t…ZiŠKjžfwŸmb~Qc~cggr„^iVg{E‚¢IWs9No<VoD\‚^©xm…KOlB\w`‹¨m†Çr~¶Zl™FUx7JgC_za˜²sÁ`·N^„APvZo£t„¶v‡Æ|€¨‚¥Àn…­Y[nJrzQªo§âšÒsˆËz‹¼X[nM_vNUzar£uƒ¡cs{Jv‡LbrDeƒEXzIoˆMaDexIiAJq[gjƒ±s‚ Sf{JWma‹V_cEk}G^{FY}^ ;Ph>\t>Ug2CW7MeJV|PUwESfFZwIZmQMsGXYAWd2YrC_mAW{?Kh=Pg?TpNvoD|’DxœQz›Yl“^J™^J^JFV5XK2Je4Q^DP_A\e8h@V’HFt^?IDH<*TH)XV5N^>OW:XR3[h@`bEqi9oƒLssQcnRyfG„c:}Jn†ba‚]{o@œzGª‹Y©¨iz£wn‘qd‘fUxTNvF^j2e},]wB}lCm:dI`vKmkL¡|>ˆ°Ux§lfœmiŒ[k€;}b@‡I~‹]TŽbEzYEU5KG#ƒJ%”3j£ii’ucHQ…HXi0ow={H•“@~¬X^”ihl_L|AMmCba+k|?Q~P]Q+kn‹€>tŸSŽŽ[€‰E~Y‰sF—‘Q¶ X¨Qt¤Rm‚Lct=g†=ZwGnc7Ò|9•ÄcÀ£a†¹iy…ds|6mmRn:…­XšY…¹dt³]…œ\wL¹„G~´\{§oZ¤z`ƒWNxKHa>HS$p}7‡ŒYƒ¨OQ¡‹”nB_¹b•xPx·ƒqŠNy‘My˜ZƒO«„G¸p[žlOq7|t)w‚6‡¦Eo—QloNk†Us£=f“Wr„Bo‹EyqQÒ¬L¡Ø³Ÿ¥rWØnJcca\2i€Eh}_›ƒG©œw ®Ÿ“¾‘mªqA~dZa1gm5ttOo—B‚žRÐ|]uäYnRUg5ng9X[6my?€zE† K]’YPXRtb9ĤOàÿn_¹i‚v0’ÿ^q´U„nK¥jC„ƒScºIb4tXv¢B_}Bai1—|>Ò|­^sÂ[dSáB±ÿß´ÿ‹ït¬Ìp°ñ¦}Í{œ²oÿðÿÿ×ÑÿÝrÿÎ~„Ut‘V¬²Uwˆ…azHŸœ[x¼teZI[l(Uo>Xn9Zx+_y6q”@mŠJk‘Ln˜H[ˆV¢Ž2}˜‡o7e‹Hqr9`רkk+]™]ll=t‡B½‚OËߤíÿ­¹õ§¼ôŽ’Ùf`’WK_2T_(rr5^ƒ9rh/Po7X[)l€BgY5>š8?*C;",Fg^1F•`fs=Mm+Ž€=CBRf!rw<’°ib^:¤ªy|yLXf/Sf,nŒD€O@ˆŒh²„zÆ­X¥¸l|¶Qv«;©Ib›=_m(n”ZrvV^i9_†-y~H‘Ãa¥xGyŸW‹‘dÄ‘s£lfŒQVb.grH2m&!?'4'FW!ž|@‹i2§ŠTÇÎŒµêŽ žm}Q{H/^^S(vuP¾U@x•=~qLvOAƒWGwVŽœi®‘i‰—Jçÿàç÷Ì¢škZJO]v8Sw4Jcx±`kŽO{˜bÑÂÀÿÿÕÿÿûúÿÉÿÿð³þ®çŒŸÉ–„Át¸á³ms]T};9O'^O.l|EnŒH;PDg*~ƒ~“Ày±Û—ØøÖÄߤ‘S<_ >F$Fn$DCG}gWsŒCw—5‹˜c¼Ý£˜èl¾Ui“7yS¢¨e¥íƒ¬°hPa2eQ7§œa‚ŽP˜{h¸~Zĉ[wd;me2tu=´Z‹®i¨ÏuepZx‚kŸ_aŠIJyCy¤cu¦`›¸zŠR|™ns®Lv°s¶öŒ³ëŠªÏˆ† dg”;zƒ@_wfp†^]rVwˆ_†s~›PLs$Me6^qRn—Nbs[b†QYv9Ql@Gk8b‰`w¯Vu¦k‡š_WtY®×Wlª[`{BOe-F`CTg:Jq=X…P^‹Lb•NgšHs—K\zY~Ÿvs’bQj.6R'?^Kqwb‹£‡Ãey—PVƒ0Mu9WpHckW}ixœJY}=h•g„²j޵qޏ}†½jqž[m•MYnBYuTj˜iz³lqžbвt´Na}Ji‘Ul•d•§d^qGauN_„CUr@ZzB`†Rt‹P_‹Sj‰Ow{BOeUp z‰²py˜Sd†DXeQs…Jk‹Ub€^‚Lf‹ÕºWw’Fe}C_w;ZhFi„UwŒKcsBMpPbƒCUkX]zG]uH_vBOƒSfkH\z@^nFexD`Tg{Rf†Gd‚\iŒUh€TN’]ShX\U9vk3x‘InªhqŽ]eŽTt|W^ŽWPtgPX?]O0\Z7gS6Yu>IbGLK1OR4RQ:yN/s†HsnPjpSQ]@YP8h[2hiB`mLY_AxO;¬L;Ì}N²—b„kª‹eo£eR‘nlr:a*[~D}i5wk7iJksJ¶nDÿˆ>ÿü{ÿÿèËÿÛ•ò¶z½vƒ|\’N†§isw\…bFtBY\7we&}„D¥hŠÊn}¶hl¦a¡pNx”KO‡djWFf}OUkM[pHwy;jJŒ†Ln¡G`Œ^ac1|w.g‚L„}X¡˜`ˆ•_¡z[‰¤V²§n¡Æu˜¨c…©jg¦oxLj”K[…TZm>io5•u8¬±_t¥p~„Kl‰D£r<²Œ@¬±Z›£d”·f¦Ð}h§s£K¿R¨ÊŽ¨ÑœŸÝ¦k¿”Uƒ|Oj>j.nÇ[g•]¸‡T¨ãœàÚ‹žÿªËÊy¦ç…Œ³ƒ}±gi»Z{ºX••M ±`„¼fh„c³Š5”§R|“gO“bak,|€9áš?­ír«o’‹E¾Â]Ýötáö«¥ë¢Ò„‰·SX¤X^w@pl6]7x…;{‘Oaœo…xEc›\|{IU‚E`v4iuCW”P¼tCpŸwšAdDXs:et;¬m@t¹zŠ—^{–Y‚l:ÀÌN·ÙŽ›Ò¤xuƒÿ„K•îâ|S‹xPr†aŽUØÿ‚z’ƒ€xBv§d[Œh|}8¢±Tf½y›±R¶‡pX´•]Óਫÿ·Æ¾nƒõÈ{ icŒ`r†?ú·/åÿËÿ“Âl‡ëgi“> ˜Jiô¤uy1Z¾lm¿Y‹¯tiƒP]—B`˜D}¨O³›Løm”­‡nŽ•a—ŽW^§pnh+w´e’H•Ož³{¸h޳\•–` ŒO’À`±¨[îä—ÇÝ’¨Õ‡Ëô”XÓWFp*NL!dd*~ J[q. ÅH‚±DH|=Jm x]\oe Œ]=3>AJH hd>¢gXS&^^Br]/W_Cwo@SS>\a)…­_irSjj0^|L[W-€c5ܺOÕÎ~ڶǘ˞güÿÅU dvœjrŒg<c‹ª`†¤Y”»K©—`\k7އ~¹f‹Ð‰‡°v»¸~bn?‡|J“çj†·a!f;*bI0±_çŸÕÄw¨Êxˆ€e=„ j‰;—Ú[ßY^†:f?JB!’\JSa2WJ'K;'MI.ŽZŒ‡Ev•MêãÍÖö­Op'OQ#MK'V>D`1“ic[x=^K‰Œc`Yد¾ÿÿàæÿÁ­ý‚€Îa„˜o ‰yÿÿËlÂ@O‚9`y9CH-~ºg1f#9c'@Y)BX%qoh—¿tqGKˆ0mQÓ¦oK€*]’(I‡&kƒ@‹ªS¸Áp{Ndgo»±­ÆÎª›©mˆšSmƒH”za’g{ßÿ‘ÁÉ}ÿÿ«Ú¨w–S…gE`\:ˆeB•®h–ÀkÁݬ«Ï{FB(NU$TdLi{Z‡ÌtÆkt§]r¦`n“NKy9o’Z|¡©âˆ©é‘¥ÒФå{|»Qn’BQs-JU;Mg17R(Uc;df0^r1VfJg‡Z„¡gf˜_y‚_Xh<<S5[pIuže±k{³fy\‘g¢b€ªK`•ECh4J$GfI{›Wx¶iªðsÔsŒ¼t†¨dv›DbwI_zMQlEKm/Gf-Hd>q_‡£l€™I]{FWB\‰Nx¶S{´[‚µhˆ´UeŽU¸tŽÄm„ªee‡e| XjD[}NbŽf“¼|Œ´f‰Tp}SfYk‹Jlf—§ew•_lxCfrFSyJuŒNfŽC]…Jd€Vn€Xz¦l|£Te‚=Ny]uœk{©kƒ¥cˆ•OmyO^ˆ\it|›fy|^…§©ÿàq…™Sa‹HhƒQeƒVmWamETnTl‡XfHQvgUjGQ`@]b>gt<NƒJPzIpa=wƒ;]§cWŠlV|PVrEVqD[sBaƒKdxM‡sD¡H¡½sÉ’¾”†¨~r›jc›lj\‹vVn?{xF{{Lb^Wr`\XAMX>OF7rH,iq?yaL^jEKOC`F6]O+kR.nV/[]:NK7wE.³N-hƒG_KN„ZFP\—vYƒSRx2^p1X….dyKbAsƒRÿ}Qÿ¼Oÿÿ²ÿÿÿÿÿÿÿÿÿÿÿÿÿâÄÿÿ®ÿÿ §ÿҟƧ¶°aÃgyšPš“O¤¹g·uf›mGr_W^]ŽI9n—as—D{’A‡Š6ºY‰©T|¥_”£`rÍw\¦Žjr@~:j„A’KßÓY•ÿ¢Çκøy´óªžß†¿Žp—ql‹\{—cbŒcaU`†Mls5}p0‰Q—©at‘X•{>‰6“{G›x@œ§z€ÀP­vn£a¢‹?œ¦a¨Æ¥¥Ñ £À²XÊuazu‡QW…calDo…Q¿…Z®èŠ…àšÅo‰Èy”Ÿ[w–q£”a²ælh×’jsRŸC^µ„isOu:žWM‡b]h1a¨/–vD¼Î`¯Ú}u¾m¤Jn¬]j^}œNšÀtfÇnx’K„h9–`e^%cr1h6\‘;~„C†«\‚‹[]ŠJT}9^x4}9ižhrtHލRqªqyJªšI}‡nÀ¥[°ñ® ÿ¡½­v©–l`˜y¢jP¾Þ…mÓŠ™ÔQ|¢j—¤K“›UÀ©V±´Xë—‹¤¹ŠÂ¡kÓŠ`¡qdš>‰V{‰h±Za|[s·cq}Nÿ~]¢ÿì’›om?p~¶]|ŒEY½BÙ›0¦Ü„•¼|êÿ~—¹€n·|ưH^ݼuf'¬–rVŒr`v7c|Abn0jr8buL|Mqw6˜Ied!Zc1\QšƒPb¦X€‚BqM‘´W–‡kh’z²ŽUnzœu-`j>Œt2²ÃtÅ„¦¬dÜÍ÷ÿ´_ÿÊY/*a?)\„G”‰J¯î³É׆I¼zn‹L]n.Z|0C9$GF,Ë`3`Šj[:Ba'Jf-IP,Sa6–Y2=T!Y\$…â}Z{Mž„MR«SµqCŒ²l“yg€tUh…DèÂx±³€âº|МWœùT³N—Éq›Øz–¸}ÉèŽÄû—ÄÝr‘óoÓ^SÿùÂËÍ£Ä↢؇“‹SŠSX…¸wÅÛ¬bÿ{ep(»±†bTyœSʉtŠêhr›I™¬«ÖœšÀ|«ã°æç‹ TWj6aR1U]6†aA}\?‰oG[=*\H?vnP’ªmo›N[‡896{žSc}Df‚Jèÿ½–ÿl>\'1Y*'.ˆzXØÿ¤üÿʲø„ÊXr£BopI¡Ä~\œGX’?GS8pVhºñ½ÀhR‘8>n(WŽ@f¦N‘„]²¾TÊÖˆõÞÀÙ¿Š·Sa,`:trU˨£´‡uˆX{¯RbrB¡‡Nwlf¯Ö„ŒÅMopA‹ˆ€ÝݸÿÃÜÿè»ÿäÏÿÝy}}<nQ„¨t‘¶ž·„]y?kC‘£[gn7‡‚B]|d®Ñžê‘¯ð“ÍokžKFa=\~KNoJJ\PV\Mh‹Zˆ·el•E]?R‚->M'Mi7E}/Ed1Ud(Tq2`ƒM}[~²jo¥fsIi–SXŠH_y@S…ZkWq\x–Y}’Uq©Tm˜HY>Yv7AY3lRgt Ãˆ°õ†“Îtoš]_{^d’@Hs1avB~Wl–5>f*JmLs•dv’Vbv6=]9R~S©y°Þ¢¡Æim›X]†Ut¦p‡±q‡­`sŸGgSl–ao—i{p©‡žt†£X]|Rq‘Shk7G[:]{‚Æ»_]xEhtJqyJk…Ss\…¬n’¾i”MYtJf]—U€£[nŒ^{ t†¥hm~XdxMhŠbu­p{®q‡±PhqYvšÓ¬gv’W„•Zr‹Tt‹\x€Q^tMd„Zd…_e‹[f~b7V:-N35?1e3)el2J˜V\oP~p3d“[XwTqJHm>Mb;ag;v„<‚’GžšYž¡Y«|ˆ°‹†¯‰…¡€|iƒg‰^~c~~V†Œ[€iw‹cqpx{^pp[sdH]<rtDdpQSZ<FJ7V@/GC&U@6`L'SJ8`N6dc1}i;dtCvbVw}@vyY`VXwOay8ª0‡ÉGe­„rƒQ{Xÿz[ÿÏ_ÿÿÕÿÿÿÿÿõÿÿÿÿÿÿÿÿÿÿÿñÿÿÿÿÿÿÿÿÿ¼ÿÔŠ½ ‚’…a•civ`h~S\|PxjGTCQ>•€-m§ahƒ]u=žŸX§­^Ž´t§µk›Ã‚p¹ žkäÃ^ÿÿqÿÿÅÿÿÿÿÿÿÍÿÿ«ìÑɽ–„d’}[uZu~IwTŠ”t½¨Té’ЦV¢°X§Àc–©‹Œ–a¾‰UƒžYwS±{7¦­b‡Çx­®vØ¡c˜¥k˜ªS¸ÇŸà¹ŠŸ¦5ˆ}GC<QP.ae>isEVqG®eJ­Ö_ ÞÅŠÑyt­’ŠhF„’Hw‰d~aK•unx4ŠvEi¢zf„8›:Lže:t>N_kz%fiQ{<{f¼—TyÀl¡VxÁmŸ£bßÇu«õºiºmxƒ`¦‰W\›mic4^i3b9enB†T…–k‹žV€ŸL¢TzQ‹Ÿ^ž€[k³„y{Ju’Kr›HɧEÁÌŠÕ㵡øÞq§‚|Wge[µ¹PÙù­“ʬ~¢aŒeHÿœEŸÿ¾”ˆ‚ƒZv’K¡§Y»u˺‚ˆ®ˆ‰§cy™[“\ˆ·t[´j›¤E]¤a“/F¦yu}$uŽ>UYa^&9TDpY%Ê[‹ÒŽyÃv§ïO—ÿU›^bŒ8ËF·ÿxb¦e‰‚?j‘Oxo3qžAm£>‰v4“ ]šÂ}s¹rkªAz—E³\œ°c E†µ\dJU~?sh&¥‡O°pO£KjtJx{L“ƒDy±Y‘Ž>àÇhÎÜ¡‚Ò—{®FŒ/{¼Vñ¬MÏùǸ֓Œ¨{¤yhlÄZ‹’HÒ‹hË¢O¬ÿy`uJtA`tBU‡@J@-tY:X]&RY1ˆ;tÿ“˜[rt_nyFá¦T~ÔsT=“„<åRd·nc‚H~‹Yœf©Í ÿÿ¾pb™[d¤ÓÎî ºÕ–Ÿ®X¡¥ƒOd+QO-—–QÙŠ™‚¶i•’}Z5y¼ZÙÚ˜ûÿɯ܊¶ºwÏÿ§˜’]ŠyNÂñÎj‹;†md’¨ƒ¡¬™áþÙÍœ…Êd7h-C3|aCŽaFº‡_^r4l‡>il2¶nuÙd_wBT—1“‡KžÀry”UòÿÔÛÿÑÿÿÿ4W# $,^gXͱÜПéÿ§—ÈZj®CÌfèy‡œiêæÆ½Ú}i•LÑèÂÍ쵞ˣ¼ë£Çÿµf´XTKG޼NwœcÀóŸÑÿ«µõˆg§C€‚Lae?xqFV†A½²…ÏÂz\cBŒ6FE7¡‘sq˜A´žl¦»^Ç¢yΣrÃÜv¨§yÛÄŽñ±r•³vŸÊf}”_s‘L]‘Kyº?§nÀ_…ÁOo’b_ˆXqy|œ¼xdgMr‡K”žoƒ½EW~3\°9R”>]z1Gb*QgB|¡Mhz4BZ,ToM˜Âo‘ÛGSr/bn;r‘a}­aw£cZzEZxK|¤t|–U]_CTv;Tw=[GfuIdzUu•__‡H^Dgv@n“@c“V`ˆQ\}arYf‚bdŠVwŸtˆ¢Qi6Ia;Nj@Ju8Q|4UxC\vLW}:Bd0Ii?q”Qe–m’»“¾è‚†°Cr¥f‹°Zz¦Y¬^}¾P]‹^n˜tЍs–¸o•\™a¹]x³_ˆ–NSkBOtOœ¬–ÌÔky§_yœBUqNp˜T_‹Vfq“¢hy†U|”N_HXxFaŠKX{Hb[mˆN`O[{U\c…§v•³l¡HX_B[vt‘£k¡¨dq|Nf|RomPXkMw{Xu~OWsQ^vORdTO\3,`0%E5B3sHV€4TŠ]bqGF†@Hw\C`DAK+B[1mW-ƒz,~—C{cn‘`w|g‚€]…•]~Žg‰y^rzSjzYnvU{tP~{JskXshTgqYsz[`tt^±nJ½—Lo§fhƒWY_AiQ6JP.e;*YX&UW7dK0lp9{†V„…c©›e”ÑagÃ…LdbaI?‡m)º¥7ƒànl³¨„‚f¨žWÿ™kÿÝqÿÿÕÿÜÏÿѰÿÿèÿÿÿÿÿÿÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÄÿòoÁ¨qw]ŒwI‹¤I€•T„œe‹¦^»•gŒ”F—•ng“T^qM€c9™‹Q³¨cêíuÿÿ²ÿÿÅÿÿâÿÿüÿÿÿÿÿÿÿÿÿÿÿÿþÿÿšÞñX¬˜?p^MQ:YS5Ys/ex7‡VÚ˜S¸ý”«¿ƒ·yƒ§`¨¤d¶µt£—^§¬a„È^|‘\}¢c{³cqšm‚‚Sweœ…Q¥³~rœ¢g¡p›˜YtÔ}c²bUˆX=xOFH3–WÀÀlèÒÅ™E…¢eL3p2™eI¤[eU3Y„6’{7p˜X‹VMtBMf=A_-Lr*ih7T8Tv,J,Za5º+`µsz[E˜²P›ÏZâ¢t»Ì°~é‰MY‡n0l‰K`]6\n0h-ˆJwfwœT~˜Ky”G¤ \}«p¶Uƒ©’S}†RŒœQ£¥[{äz’yg™ÏÐÐ}{›}LŸky¦˜­¥_‚¾~·—R¾ÿ‚es‰ŽrK“¦Y»³Xµä…^‹p[ƒM‰N®‚T}ªdˆN©‰\¿á‚šµž|À•UkQ´²WË÷‘pò…Žw>;ƒK^q4w0‰¿E~¾_à®M¥ÿ¥µ¦s„òˆzlK¤ª[¥é Øá„Îü¨¹®¬¡¢¤˜™ÃÅ£›ÓŸw „ °on¢€ezYTT6bT*t‚Kp”D€{?n„Lss\£Š8®ÀŽ£BiRˆL9jt]†d7­gu¡Fk¡I‚‰@š[†¼|tœ:U}Hb{VP@I4D<8Lel¶¹bÙ|mÿÿfÿÿ~ÿÿº»ÝŒ„zRY†NmLD\t=Žk;myCZu2l\;Ý–eeE^rE\{=惄†Åd–È^¿·f”Øz™­nS„0w“Y…¬c|¼u±µƒ¶žLx¹Q‚iv›§Žv¡I¦Ý‹­õ[£?D<œ-4Šýxx“Xem>ë\[ÿdzÿÿ»’ΘhNd{3¯Ù¦]5ŽÉU§£w„¥LÊÛ‹¿ýÈ–â…ª·¦”Éxw SO]&dQ1r|;“†L¹³sïåÏÊÿÎzÍl‰ªiqu\¡ô…šÑd’›`¨ÿ‹ÿÿÇÕÅÈû®£ÿ¼*FBR.I<-C=8+Bq€G Ìp¦âpÀǤ¾ÿŸZ¡V¬¦ˆÑã±Ô÷ÀÄÿ©‡Ž°Ù§®Ð›Áæ§3s(HR<ÀìüÿÇÿÿáÿÿñÖû¼Áß–”Ìr]¸B†·^¯­ŽŽ~k38%xFr<¶`ÿú¬Èýu¡²o°zbÔ¨z´¦p’”j“’‡©À{Ÿ¬z{”EYc>gnY~°hœÑ–³Áƒ¢Ý‚²ë’‘Ñmn©aa‡Zco:dlP}xTX…@n‰R‡¼ww´^z›l—Ü]Jr.6J Ve;cq=K\4Tp5a€WšáЧÞv£æk~·K`xGC_8EVDy„PoVn_…‰Beu:a}?^‹Cat1W]9D[4e‰HUv9Lt9fWx”OXxKp{AV|Zf}IdpG_~V}´slž]r˜O]ƒCX†Ov¬d`~FlUs”ZX|.C`3OqNn’Rkžb{«q‡»hr•W¬i…±dÒl¸tˆ¸w–ºy–´r€¯jhžt§s¶s¥â|¢×XZ|KbuTd€`u†lz¨u”Ém}‹>UlHa…MWŽRqJVp;Mh[t]n•JR„6Su:]€Ce‚Tf“a~¢eh‚_k†af„__uPWa5Q]@\…|¢µ‹Ó³cu}NfrAWf:XyM]k^€†Icu?Wu8Db?7T;8Q5CQ2SU+Zh+wn>n„K^’VJ„RXmN8e3MO/JU!S^-qd+s€6p†We‡Sf|Sln<xaJssT€fNjkH`mVd`Deg@XcATKDTSBTN8n`E_xJWfM§\GÍ£<–¿a¬ugš^^rLJU2_?/eQ%[`6dM4{s:r•d¡qgÑš[¹ü“gä²AsŠTE5›V'«µE‰Õ~vµ—bÊ™Qÿj§ÀŠ«·–yÿYÿÿ ÿÿÿÿÿÿÿÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿñ–ê —´uŒ£g£¢v ¤k¥­·{À›x­åh£¹eÿ¹]ÿÿˆÿÿÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿì¦ÇÊ›Ž–›w©†^¦uJqAIp0co$z)cšL¹v>ªà^‘À¨f¼}jˆ_Žx?™²f›¸u“¶x{›ptuT€…Py£cvžb†ˆSv³]ƒˆfT®P–kM“™eÀœe¡Ý¯„§o’}M[FT<‚X!Ê•E}ë¼o¨ŽM‡v`p/y};~\_Tpo1e•Mb†G`’Pj†=hœ?NvL]^>`b<]UK€Œ6Z’O]jGaa+m~3Úv<ÄÅdoûtSi:\7@S${Z(ˆ[½ZŒ‚Op”KW’A‰˜9{«\m§W`U^kH‹>Œ¹Yf±e}zU_¢QR…Hyg7d’K—8›ÍuÁw°a‡Â\wkZc–mWh:o’<fyPƒ¶^Ëc™Þ¨“¸pè¯S®ÿ²…Ë{½cv¡payhvu>®–U‘·w^ŠR¦’@•†ÎÉ‹nȘ‚Ž>ÙÅ_Òî°®²¨V†b„ƒ7‰®E€µY³ÃLƒ¼ZÌÿoqPto¨5už1uŸL~‹\ÉžN¸É›¥ÇÂË{›á«°¡Pm¹´wŸK¢ˆfhŇil7Ti@TW-U\1@<4_c-€k.bb=[o2„AàÀcÿÙˆ«ÿ‡³ùx¦ß†`‘Ck/p¬=ry9s`sm2gÝsZ’14i&2\6#²Åe`›ZVr9{lEb2ÛØyÿÿÓùÿÎuô‹–”V`^J­?‡ô{§Á‡{íjhµJ§§hH¢gQc0~xHwpPhs?p—B²X•½m¥¾iZCj‡AŠœWy¹cmB~ŠQs§gNk2Lm?Re*woB¿äÀåöà‰ü£_¡M-Vàk‚‘µj]>gH%o`FÞ‡„Þ]t?hŒ>`¢AÈçÀõ„š×‰œcíü¼Ž»kйb–µn†Æj†¼o⺔§Á‚‡žUÅ»……»}ÅÀ™ÄеµÐœ¤¹¢‘xÿÿÿßÿÂÅߪÂÿ²ÞÛºiâTŒ¬hïóÆÿÿÕÿÿý‘ÿms¬Il¦4xÅPX‘=x}ÿƵàÿžðÿψßbpWØýÌÊå½áÿÌ€¼díÿÁäÿÆ›Ñz œoõÿÍõÿÙøÿáóÿÄ¡¡|]bJ\UTÏñ½ÐõÀÖýÅÂÿ”²çWp¬+\I2„“_îîºüÚŠ–£m`oA´ti‹ŒZ·ª€­­c†”cš¬bY€&X~:‹†EŽŒc`†J}utÂì–ÒaUnKMT@e}Mq€GlOˆZr¦KaŽ_‡¥uw¦e}¿Si–Xw¬XŒ³[mŒ8]j9~Q„‰UŒ’n}—o‹©kƒœ[{…:]j7jeApMo~JbhCurOt‚Ax{Ap„Gd›=~Ps–He‹J„V‰’Q„…`l~@ktA^f;j‰Xs~=U[C\iY~§~€´p|®jo‘O»|‹ÈaZy;W{T|†USx:NvBl‹kx¡fu©Vq•Lg‡?V|:]‚Mh…]lŠ_b„]w’wަ~ˆ³«Îy†©‚¤Á…•º€‘²mu‰HXqGYxAq€PxƒPhŽZ| VnŽJS„IUvIm‰\eƒM\~@b…T~šk†ªZƒ¨Pm‡6S|B`‡Osan…Obƒ]nˆYe~JgzCZi3PlQ›|¡¯‡Ô¨\f‚G[IStQkŒXƒ„b––Gy{H{˜Vw‰K<_;JV<Nb6ob<ZˆBavSjfJZ…CQxVTbE7d8KN4MT Eh.]^7Re.fc<`e;]jCdm7}T6u\5|lDvjAps=sXBto?clGYWEZX.V[5Uh8\j5Tc:†[92‹™L¡]Sœu]vWS[;U?,eG)b^.{d<wAPŠ`…KeËj7¶Ýutí¾Q‘rqEŠ>š¬Vs®wi„s‡oV´†R~žcl„pž„NȨRÿ»mÿü†ÿÿõÿÿøÿØ¿ÿÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±ÿú£§{ˆœt‘j‘k™vkç˜gÿÿƒÿÿ³ÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿÿÝÚæ¯²¡‰œË|…ÿ•qÿ¶otµ•~xR[•pPnSpn:LŠCR_A†uB ¨N©ÉYÏ„ nb¦m”ˆU•½]нz¬©–}¹eR¢llV;ZŽ=i}Lp{Fc†L¯rH†¾b`Ÿ_Š}Q›VœÇuSÅ™3hQZ\a“7om2¶~A˜ÔzpÁŸhƒ}x•LbOˆV]¸cž‚O}Ì\©¯j¬Ëš~Õ“_ŸzXlHRg"d`)„j5‘r>Z|WXH0}c5›y7˰R•û~oœŒjƒ?by1]„5r—1}–HjŽJüªJlÏ¢|˜Ng‰Nc›?^jTp€@m•>¤£C¥Þt„Ë€h“\epBL|L[i$‹™9‘—Ld‹em|C€CK¡hhnAwŸR„´=†¥[l¯m¡i™â›……sƒ Qæ£f‰Ü°[|eŒl5e\9ŽsF|»lžƒNcÃlVf9·¸D­ëœˆÎ—ËËd¸Ì‰[¨v¤0[ D”‡-ˆbF¯t¬|9Þÿ“|¯˜N?H+¨nBa‡a…sA“ʈ¶¾|´â²´½††¿²†¿aÑ»q…ƒZv[ƒ•DS€BNZ6PW#j]2‚“3i>~“=l…<´±ƒ±ã¨Ñá¤×ô„Âúœ¨Ì™—ˆ^C‘YXH!\‡IJ}-ji&x‘o¾‡cMµmD +:Ñÿè\—qK_8HT0}a8½{ç鹿ÿ·È¿p¯¶h™Ìo¶·zÕù½çÿÉóÿáËÿ»«©o[‘W}[tu^mpLx‡Ks›?…£N]¦?gS)¥²VX“Dª„IY‘<‰xTs„>­¢zÁÒ©±ée[‡2_…-ž´ÃÚ³Åo±{…£[…žVl¦gHo=Ji"ye<yn?^d)tŽ@•£LÎÏ™¾Ä§Ë÷Ý®ô¯‰©o–½rà^—ìz¨ð´÷’³Û‹ØÆŠ³Pˆ£Vž©klI†«]m°d§ÓŸw²g~“[^\3b*£žp•ÿq“²Z’­mkXDt¾À‰ÿÿâêÿÑ‚¶ZŒÈXÎÜ¥gI>D%KN6•›mëóºüë–tÊNÒø©Øÿ¬žÁŽ½Â¡ÿÿÿÿÿÝËd‹“oÿÿïÿÿÕÿÿÓU\-9M$0HAC“xŠ{yn{rx±¾ ¹Ó³o˜=`h7‡qH»É…¥ˆfîX_9~ Z³Èw’‹Nž¥c°Ër¸ÒaIG0€—>]œÌvZ·<PU;‚¨€|¹q¢Ë—Ø„œe}¥v…½m‘ÕŸÔo“Ön“Í`f¤FZ‰Bfƒoœ²“¼”¾˜Ád§Jp—@bm8\h;pt?nH‡DzzL‰”n†—]hl?‡ˆI“”S¤”JioCiPŒƒBj~i‹§i˜½u¶blE—Šf·šf’‰_…‚ENd0Si5Pg9Rf7iuIŒ‡Vk{a[kDRjINlISqS[jO[p?[yPcxD[€_s”_un‡«cx™Kb‹5\‡%Es+TˆPk¤Id—JZ„Kp—^v¨t˜Ð€•Çsf‚Y\wr~Ž]VlDWtDVn<JcD{xNdQužU€º]¹e{¨Pb†D\vQa†[‰š`pŠVo˜gvŽdŠ¡m¡<YJs‘Jj}CPb7QmGgnQboVh†Ift<XeWmk‡¥yÀŸQzX}”O‹ˆajœ£]‚”Xƒ‹j””cŠfH^=K`CG`9bf>Ms@H_NN]6Ka1MT7[Q85d7?I6UMMf'ca:sW.ta8huBWg:kb<lZ2_^0^iFkh>rs@~g<špD~‡QTxLW]H`qDauBUyCMn5P[6gW5’d1{®A\—jU]JoFX<2eO+gY2hp6yuOnlQƒWPžY5¹”L§â–¹¯ž¬ÂlyÕ‡\¤zLqJYT;j^0‚lB_YfyW‚z2‹K¹_ôÌsÿèŸÿÖ´ÿ©”ÿÿ¯ÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿéÿÿó»îÅ‹»šî¯wÿòŠÿÿ¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýËÎÒž§ÿŠÿ·zÿÏÿÂÿ°œÿÔ¢Tñ­WdcgY+YvLM‰OQkImt=›™M‚šy•q{½wQ¯qqsH~–@¬ªbvà¹w~y›PLŒfYU6OT1cb4Uf@Sp8¢l- Wh”eyN–¦R‘Ä{UÓ‡frM¡<ÏlÃ}€¯Q˜[’äÊÎw’¦ZµWx¢|†w_‰¹b™­v½Í´¾ÂœÒÀY–‘b`=_Q3}^*wu9tƒ?\€=W/“`РM“ÿy£Š“¾¾oœ³mÅZŒšK¢±rɋžˆ~²hÄzGÒ±v‡ýw¨N‰š@n«X›’T­Å]qžza b„}LL­JFk6jh"j“?T¥PQTN¶†4±ë‚”Í€z¢|o¯`k¡VltLŠqcï¢|‰Ì¿„¼V`ŸX›°Qk»SŽ[PzAZ`0[\,}`,O|F•†$ººu§°c¦Ñ‡Þè¡ÿÒ¦Þa͹M|à±6KY…v$†h[»¶ZEUc°¬6ˆÄ£5nE]<»’=Jÿºio'°‰?©p•¡v£¦ˆ“§n¨«j`³W„·O›>}©Z…šFn4XÀXp`*hc8}Š@}N‘µdµfÞßÿÒ®ÿÿÓÛöÇÍð²šçŒYd'@Ke~%dsDR]1l‘Bvj:aÐwKr,e‡0’ÏPª„Jãô®âÿÆÛÿ¶nÞjp“/™î~¶ÊqÞó¬éó”p¦_”©j—XÍÆ§êÿ×ðÿä¢åÙšUt”NtqF_oGeW6y{Wtq<‡§PW·Md?޼J|„GRu5oR0bm?š—h’°Q¨¬r­è…ÎVj€C·Qxëƒt”bƒƒ~Ž„R•Àl€¥iˆp£ß„ÁeduN>G'¨¸FŒ¤Hm’0¤³”·ÔțȟœÂ‚‹žX‹Âr­Îh¸y›µe”­Q››N¸¨q­»bq´>eªR¤à‡`HÂñ¸…¹mœ­zQk=‰„QµŽ†eœ,f¨3rºKr[WSo;ǵ¢‘»\‰ÅaöÿÆ{øfhB5O[)ƒ™QxDÊ»¼ÌsÒø©ÇÝ£Óô·¹ç—ÖõÒÿÿÿòÿŲÜ|íÿÇÿÿßÿùÆ`uA:FIj+(D1< FJ,Wq>eg/Se?ƒ¥i’ŸzÑÿw›Àn‰¬Qµ¾žm\nZ4ŠN}et„Rˆ–x³ÌަÊpËOduAƒ©iœÔ“ºø‘†ÈqšÕ†šÍ{’ţ匈 ƒ¨ÙŸ–Ó–Ô”¯Þ‘ªä…jƒ[qX¸`g¥KGjKa{k¬Î—¬Ëm}²xŸÉn|;‹x9nq@™]sq@p`Oƒ„lˆ–m•ežÏf‡¿h©¸iÇj‡À`Œ²kv£T€™o‘žrc}>]{@ad@UlI›g—™c}~F\l3Cf*<Y)Nc?v|AF_!6K#Ga0=e)?d)=^%A^4Gc1Dg5]„ZzŠS_w]n™PnœDa€(Q€*Ch0U‘e»g|¨]aPp£k˜»ŽÈdf‡O[y:>T4>^/Gb;NeBUtD_xK`aBhu\žµi£Êu Çy‡²]m}?ZjA^rS[„i–‘_Œœi›Wss_ˆv1GpA{vAYvCRe;FqAcwBZuXœ¤ank;IRGn…kœk¢“Uv“\o”ToRpŒ`‚Ÿ\h…l–_tmG]uo7M0@F4GV*Q^27b:>UE=H#4A94(N< BO&>P4IP'RY$e[5|Z8xh4|pQwrDqxMugEwh:g~EelJyt=¢q:Œ‚Kw€WW€W`rR]sGYh=ZrBQzLLrG[S:^%m†:L‡eJhP<c8MK8O_)Qe;bh;kvFauTteN|V>—X7œœ_’Ò†¡žfoÀ{OvLX=eK']r0opCV‹J_pPyv3‘sE³lEÿ¶Xÿł⴩ÿ‘ÿÆvÿÿÑÿÿÿÿÿÿÿÿõÿÿÞÿêÜæÏêÿ—×ÿí¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿËãÿÈÃÿí©ÿìÿ¾–ÿµÿÔ¨ÿÿ­ÿÿÁÿÿÈ›ÿæQ²ÅjS"–l@™º[e¸Œ}|RU^‚gU}¥Zs¢db¥hˆS…¿Z±§r}Ñ–ƒ¤go–h_V@t;QU,BS(ZV,j‡6sF]ŠIR€Fp{0v¡HާfŒ©~„šp²U„ªv‘¤gi®]Ù…Zì·•£€qdžf¥urœtižQž@„¾{…´qŸ¡sœ¹{aªRo?wV+n:¦J ¶cß“ZÿÒƒÛ¾¦Ôÿ§mÓÉŸƒP¤»fšÁ‡|‹l„—]ž¥a^Á T†]Xh?„ˆ6ùªkÛÄ‘Ëÿ¶¥ã“h³bo={~P–²dpqn„FI€=sh-‹”C¥±X…³{“·U¤^¹ÐŒžã´¥Èˆ~¾“l–R{—E\™I~v=cvo™B‡‚T±Ï…ŒÏ¡[vis‹NqµQk›>R/iåt ˜MrÆOz…O¦w’¥{i\¢kc¦Â{_Åt~5PkQ´c4vÿ¤‚œG¤Ù‡nª`Uv3·ÙUßó ‰à²~Ü[WƒA…v3œEqzTd™S¬y@y ]²ZŒ»V”£H²³yóª_\gYtp:i?yk=k:¡n£¶}f÷—ʦ5`­w…TDš×”z¢€H–N²+†Áš8U)q^¤…G|,{y5`t-èÃ~ßî³ÉÿªÔñ®êÿйú¤f‚i‘ši’«ŸznI¼¿žg¿jŸŸcg®jYn:c9øàصíêx€IŠe.apBpO?\Ikv6is=ij0‡nDs©c¯‘`æý¨ZµaQh0v7–™NBL.]c0ž©mÇÿò™ItE€@¶²‚iòXLOfx9ˆšYšÀ}¤ˆRªã§{ÀkYQ7XW,a^?xt/¼D¦Ëo¥È ¦×ˆƒ®bx¥xž¸r®Ðˆ…†R—²Ne«?{‰IxxL…«^­³qzÛ`„€eoyL›¸nŒ[̳”¡¸{´è˜£Ø‹¥«”Ù}´Í¤INŒz\]¼?˜¶h¹T¨évåî¼òÿ²‡ÞVVŒ/MW9››}…å^=‹¼M²ÁŒ³ç›žê„ùÕÞÿÿÿºÿ€†ZÛ襬ÞlJ[7%(C\'Œmy´Ýc3hWc-aW4KX$M_.gp@Œ±}¡ß}½÷£›Þ|²ÆŠv JkŸCmŒ2Yh/Y€@•ŽGo¡f–À€°Ý£Õ Ù™®}„}¤ÅÅu‰š…†Ãg„±zŽ°ŽšÔž’Á‰¥×†–¤‹ªb~€Ydscqh€ªlq¯RnžQdb‹_•ºŠÔÄWqeC‘…X¬¢rrv9yqCgmY|‹bwo¤¹xŽ«e¨g–Ç„±çš£ì¦±ð›…ÁKv‘Yt“Vk‘Hf†Bx±Dhwqƒ–dVeIQk=H`2LY.Pb2^j6B^'5L$Ak4Vw@Hg-H`+Ie-Gn*Jb<PjBMT5RjHr”LXPo‹1O‡EVŠdžØšŸÀyu§ovš[w¢di‡Zz›Zi•N|¤Nc™:Qk/AaQh“]q©eoŽ?8G*N\Nz„Zušw¶®yš—Rgy<Wx@W~:WtUo{Nfvl¶ŽIh\6L])JoEXuA[xE\mCf}Sj„Hclvʺª„FjeJx{]•huuLOhSeqTj„T~¥a~_nv“¹Zlx9Nxp8=(EM$B\0NW8R^50b>4A6;9B:PDGT(YQ-St3Uf9bl5|h6}|BquYosRflOZZMcX:]y9ZlDƒf8†l4pxNzpQh†PD…aLgW]`6ok6l‰LR‰fKi]``4eW(2c8;H>OV*ax8u€Cq‹Op—aYTLƒlEoPTREˆH,¿k1‡ßu~«…h˜YUyZk^<ƒz:y–KuŒWOˆNYkPaj5ªV6ÿe8ü¿eñ¾–Í¥‹ÿŠÿ¨hÿΓÿòÎÿÿóÿÿòÿæõÆÊÅÿýÿÿ¡ÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýúÿÿÉÿÿÂÿõÏÿðØÿÿÑÿù¬ÿÿ­ÿÿÐÿÿëÿÿ÷ÿÿöÿÿÿ[ÿÿSlu§n+zÙ_C›†UbEXtF}}@y±[¦nu°ltŠmu^™¢v{³XfŠxOz\OhCDa4U^7KP-kb'‚„4—fy”Q¿_xµXs—JZ”f”{Th£|Rv8UW\`u5`nPɘ=šçž¡Èª®Ú‡­Ó³Ø …¶‹šVƒ¦r„€UoŸoœŠl‘Ìoa«di~8j‡C˜xBkŒKt@Û®mÀý©È ~›Ž“Q­˜Y¦moÓsŠMl‡cswl£Rr§nÇK°Ék¥Æs„²‹]ˆ‚qxKh„:}:—xcr³[d”L}‚:{¦Bx¬Qt¦McoDcz@Žw5f†c´ŽD‹­™`¤||9ÒÈvvía‹O“ªG]¬†Oœ4KU&YE7Ê>Ûÿ¹¦ÿÑW‚o‚T1vÈhTA²§O­öwLŒl?9+DJ hO.fxK”_Lg|_xw8ýõkeº¾ž¨^Œ¹·¢m¶¯j»¾’Â¥Œ«ÿ¿hÕ‰Fc9‚`.j=nwFyu>¡’@vžW©­Y­x˜Éj•ŠNV~qsY1Œ®Z™£k¬£VüéˆÓÚxÖÿ¨ªÚæâ£°ñË…Ö‘“L&nf<áw9iWlvc>^#.M)E5CZj"ÏÃ_Æó•Îö¢¯å¨ÈÒ­ã¢jÄ{Dt$™yK:p8D_%di.¦Ó’°XoS_~8H{0Ui4š¿Jx¯O‹r>•zU’¥K›Tu™Df–IŽŒ;u}?rHˆ‰NÅ·ty±JƒE˜¨plLFa^<ˆx>†Ä\Æ{€Kyk*‘’=íÿ®ÿ”F€5h`<…¢Y„Dw¦VvSl_u®69Y—nScÓ9”Ös„l:šŸO}ªCeq;Š‹\s{?m†Qt[;„k]žµ†‘ÀiV•@€›[¡¹r—Þˆ¬£‹hœQ“YVP4—[[oa„q[‘NoˆX›¼Â壧¶~y¥TuœB{ HUf>Žzt‰­c·ÅŠ¡Ñu‚¾T«ÊÁÿ§¢e€}?Á̆‹±fbG¤»n³|£ÿÿ뀳Ok;w§N‰µUG‘(55kMDpx?mVJ€¸Tv”MztB|‹7y”EžŽo×Í´ëè°Þõ˜ÎÿØÿ­¦é—Âáµæÿ£ˆµ6ir<¿üƒ”Ýs¥~—¸‘¢Î›µð­äx•Ä]RiIgnH‡›u}¤d…XxŸi·¸ƒ€¤l‰´O_:f~4uw\||A•QUƒLk…\jO^€H}™]{©ˆ•¥§ktuFŽ‹`Œ²}¡¹bqx8PXOiWnNr˜X•®b±f‹š‹ÆßÊ·Û¼¿Û› Ócw k„ªrŒ¬c|”We…Sz‘]g}Vb}OTa8Ob/Xb*Eb.b€3Nj8G]'Kp>e–9Bo-J\1Og2BY.Fa6ht@RV,HU:bWbŽXu˜[œ¿€ƒ§‘¡Â‘—¹•žÜ‡Îp„¼q†°b¥oœ¯y¢¸oНPYtETm“Ã~½†¶O@T.omHhxO†ƒXo‰Mi‹ZuŒV|˜YsœVq‘Oby<EiWµ•H[R-UX?fgwLe‰E^iA[oD^f@eYe½†~ž{H^eOm—€Ñ¿Wfc=QbIWxSo£h€žUxŽq™¡±»i‡‹LpwiQV.]l1IxB^fJ`b76\48B?F5!V>#PJ$B`0iS7pf,`xGfwDwu?q‹Io\l„_QsW?ZCNI.OW.Wc<v_.om&lmL~fG‰†SZ wU†bUs>Xd=ff;V|Q>j\2D7B: W?dS.‡k3‘—JŠŸi˜fƒ‹d…‹c’da›Vcw_žm6µ”C¦¶bˆÎ“l®pm˜X‚L]—JIoZHXCH[6CW1<I+v4 ÿ@è†Fý£ä¥zÿ…ÿ `ÿÆ•ÿÕµÿÕÃÿóÜÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿùÿÿÿÿÿÿÿÿÿÿÿäÿÿîÿÿùÿÿäÿÿíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿ}„·¸­N¤Þr’Õ”ž¼hbÀj[L_i:YuTRwJ/_A[1%}e.Ÿ˜LU¿Œ_i>n|;cs,NoR=c*dI :ˆµ]¼±jæ›|žna¢aK~T˜i7L¿dAo7•_0W¡R…sE°¨WŒÐ~’µ¥užª†qÁ˜z¡† PVŸXrw@†›Q³¼]É}W¬€Jn6Zn*™w7~ˆB«—=ÓÇaé¦v–Ë…T¥šw³Ÿw¬Äz‚Åv~¬xR¢no‰Atˆh{rUr>’‹U{‹rV¢]IuLig=ކCj§ggˆNrqY]ŒG¢;‰¼uuŸcuªSX’Qdv8c>°“=_¥dM{7wt4»¡V¬ù¯^¢€¢’;‡Ð|…‚YM¡ike'³‚<×í‰âÿÇ¿ÿÃJÚ´c7,—ŽTÇw`ÿÿŒÍóØÒ¸|p®nŽmE›ÃP¦ù{mxaqƒJä¼W«ÿ»†S¯¹}³°³Ør—šmAk_ˆ_+|¯a–¾Zn«]iŒ3cu/X3]„=ƒ`4~„u_™M’<¤¡Vã¶t‘®VcI£œKƒZt£\ž…FÚÄvÇû•ºzžËiž¿ke£‹od[;X9R_q…?K^0E_'0Q-_K[f…+ËX®åkÀúu‡Ð|£¯[›ÒCjA^X.„]Q•V:‚!gn)v‡Jw9u¯ib~AZ‹MªŽAà}_WsX“p8ÏÆi–º’ˆ Z£®V›Âd½»j‡–a€³SyP¬nŠ…Qoƒ;„BOTx|1[2{˜ah´J„¥Uà›JáÞˆÕ÷¨ ª[Òÿ®œ«dÀÜ“¼^»Ì“YÐiXJ/¢vd^>™¹]”¶m¦©xÀ}Áþ­™ô‡td;cR8b`1uÂav¤B`n1ŽnlšP€”bÆ×¢–Èu·ó†gqdc@l~T†‹d±èg~¾W€Ãkw˜ir¥`…žvŸÃ¡^šKw£fe36QFV'…‰\¹À}¡Îq­ÿzßÿ¢¹Õ‰³½ƒ£€}žÍrµÀ½Ë„o¥7”žXŽ‚s£ÙlrŸ3q0k‘4h^G¯‘m›=eu<€¡d³Ç¡­» €…TŽVKƒpQ|‘CTg9LX,fa>W^4|ŽdQZQ‰ss˜¶}ÌÛ¿©®F{ohµåŸ×acwI~•eku®Ú”¬ï‹}‘X‡˜Y‹‚Vƒk‹®u•·u©»{p¢V}’}°ý’ÈW^–AT\GimLŠ—Pw;f…@X|B} Sp€Vz[e‰\€£{|ŠK¤³u„¢rµ³ž¦ÐgqŽUgˆSqŠLs“Gv™e™ªmsuPƒ‡w{–_Us_›ºt‡\ª´‚–°[d{Mj”i‰–MVmM^wGF^7O[7Vu9j‡=j‘\w¸P[y.Z`§Üiu°CPg0GR+BV#=O<rg@Ue)Hj@S‚o|œql›z†¹to‰e‹³œÂëÆáÿµ»è†¹t³yµj¬¤j|—VmGZuVt‘eoŠh|”k‹¢WŒŒW‰F[tH_yBNc<QaEY|EPeLmŽh€¨j…´NdŽ]œ’0EI)AIBZzYcoGg~HY…VoZjŠFdgK”`K˜dO~‰o±Ñž×²Zg{=\DfˆSgˆ_m{Sote“¡‘§_`{GTxLYy<PlHQcG_]M]XAGT5JNBJR1\_7bi9?iAMO=lG%Xu2gd@po?{zHs{RiƒP[y\SnNYU<Ob2Ee=NR*^c*gi8„iCŠ“MˆŸsKžnChU:S<QQ1J\(<Y>CH-FA![S$oo3^|MFuTF^K8`L7T@?B;QD5hT;›m@ŸŸM—±h¸r…´{q¤hj“Xi€Mp{CwF_9[v66\7,7*&.` ¢7ÚjLÿ…Vÿ°ÿ¤|ÿÖÿ÷»ÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôýÿÿßÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿs‹ËXO‡ÃqL¢òs´®ƒ“Æ—’v{³„cfV‘Qin:¥:[˜Jbc<œ*¸ŸRgÇ€at`|}6J—?P^T^Z-hr'ª=”¨W¨¨qm½Ž`˜hm‡LW’^Š~=_§Ul…Xvš;‹ž^™¬G¦‰l¬¿z–ÏÆ¨R° ¡iwœŽ›¯WT¨i|o:o±Vt”BzžOb©xKs2K]%`l/‚„;ĘAÍâß§ƒˆg©sS’­xµ®tY™k~=l¤\d‚bgm?bvN`oElk:zz>z´nhkfyfw‚V‹˜c²³tt⦟TmšPÅrBsÒ®VuSQZ5†v;`¶¼Z¬Ú‡Š€†‚e[µbé^FyÿÛc©W•‚<rÄz”‰M`švpF¯ªL”·ÏÅyÁó¿™Ö•H©t¿R&ÿµ¦âÿ¹ƒf¥Û‡`Ãws½L·Ò_Ç‹Š`ÂvަDÇßvpqcmL1uoBq]TŸrb¯j€Š*v„L«H™¹‚Ѝs™£[ŽËaMºJTi'bN,ao4~y-–aÿËx€ª•¨žA®¹w‡­Y«¢7šªQ‡œOyºZ×¼…Æ±Š°ÿÃK³m"D!/>83RDY!Qr1@w"ˆŸ'L5(.0Fn;%š…ÿÿ¿dÅ¥“¢U2‰V74Dr!@e#/QqN8l’h]¤>l€=l|IJz=­q2R±oOb.{}7ƒ¢E«Ð”yp<žgA‡ D‘¸Oa„¢El’M™’<l?… U‡ŸT~Xx„KœÃbœ°m¦¡j™½}§³bÇÊŒçÿÎkÐU¿§u²òs—ÉqµŒiºÒŸƒ·hˆ”Vs¦YrD—a™Å~~°n šsŒÈzá÷îÒÿíÛÿËvÚSYo4jŒ>mrUPT)ng<[h0¢^{U”ºwÕØ©\ª:•Yš•\wt]ÿäàÿÿÑ’ã‡yÀaŒ»vŠ·z¡ÑŠk¢Wcd?J{4Cg$Gn)KQ5Œn™½t«†”ÿÿØsµ?z˜GTp/dL:b…5a†)\(o‘0†¤Sw¡3w¡7g7™™`ÓÏkï»x¾‰W»¸ ƒl”FUgI~™F„~DÓ–o·©h¥¼wÆÙoh‚8qVK²¥rƒ—O`a?ƒŽ†ˆŒm}ž[߈œ×všºsÍv£Ö”¶’ Õ§«ã‰„ dt‡IyrLnV}˜Ytc²Á‰Ðj™¶|œØ„ ¹€„«RjxQatbƒ¢UbAŠÇ_ŠÝ]c“;c<Y~@`~_¢q{™a‘Œrš¨s—·y‹œp‰§vkMi…9Kq/jvGgi&\]5]jAEe:Ac<_xYsµk•ß„…ÊnŒ¿r“¥SUo/TxIVƒS¨­Z“OxxL€Y—htƒROcAƒÅ’»é›°ËR^]4bh%=H#HUFsxDXg,XzO…šxбwvšw…ª_^ƒTm•—¼Ð¾·ÐŽ£ÒžÅs†À¥¾aœÂy•ÇkmˆKkzRw|Pd}JWkQ}|d„™oy¯\c{@Wp3@F3ChC`q;DV9]kRi‡Yi‰RoŽRj}-CS'DV,Gb7VfEgu]€¢v€¢es|FPZ7|UE{ƒb­ºr}„wÄ¥_qF\BPjC[wXezO_n†¨j„­]}Ÿ\t“W6qL1SL.?5B9,kE)nV6Œ^=‘˜Gy¬gU”j9fV9HGc8#g`&cv@bmCdkBbdH`hMbcLikKsbG^mBWmH`fD_t8gt;¤i?}ŸQyšv\}aE`FN=?`.>Z8JW2[[)__,pa1qH†tS[uMThOR]AL`H^XD]k5‚o;©A•µ`˜¥ƒ†´oS³tLdOUQ7Qd;eV?ya5›z?›‡TfxR>eE4B6?;%cA&”X2À~Fÿ­qÿÕ†ÿÿÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿóÿÿßÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆî[y²:7€<29Q7#½V%dÇrˆlbq£X}fS¬mzv_w«^`Ÿjk‰I_z?°h:}­Tu‚pasDLWMj=€˜Ht—Za‘?~CŠ•ByžSbœe||K\›UP€?”u2b®bo”RŽydi®^u‹[HƒI¢_Aµ«‚uΜzvY€¢{s™b¥ˆa£äW’šv¹¬S£Ìqªé|´by–hY?G`2hf¬‚/ŒÍw°¼ƒ¡ÀvŽ•}¨R_…XvpA_Y¼…=xˆ\U‘ic‚CGp<jp:Tw<r¨;Z…hdIo—N}ŒL_ŸjvN·¬tÄ¥Œpܨ“’Hdƒ‘[ŒDY„B@|CEU1ƒk4U¶iŸˆAáó„…¿¯°¿j„Ó¬;˜ZdV.\|H€z4dyk¶@…À‰›¸a‚¿n²«X™è­£m‡ŒI”‡S´Û€²Ø~§Êœ]}TØ3¨õ­ÕÇ^³íºÒ˜y–€µ›?ˆÿ‹ŠÆI‹Âl±½h˜„s°¾qÅÿs¦ç™t¯ThTã‡;ÂÿßYŠ\nw0‘†2b¦LžM„`T{W•‡H³•P–¹_Û²a®}”–E¯õ˜É®p”K¯¥z¼Ò‹¦ã”cÓcKr8(_$/75F<M 8@=G8-L!1+G0;z”>v‘Ks©P7Y=a75]•`5%?/!}H@Oï_QA L`'7d(]j>Cd[o£ikp*ûȃˆ½v˜ÆwèØS…¹h|r0reCb‚5^d1mt<d–“JŽ©Yx{D‚¨X‘D›ŸXµVr¤_¾ÌwµÝr¢œp¯£|ŠÚfÿž’í§ÄÿŠž±r¸•i³³y €k¡Kñ¦v»ÿuÌì€Ãǘäÿº¥É”¹É·¿ãÕ…°]¿Ä”¦ð˜r¹N—Þ^ŒÐ`Do4„R;†‡Y¹c…³^Š®KLW-ŒMœnF°¹„¼‰€ˆ_·æÅ‡‡Žbu‰A{__ÊKKx/bŽL>R,–—nQ’*:P&$14?\i>ÿ¥Ô£ËnŠšU‡¯WgŽ=³WAm o†;„¹Qk”2pƒ5ktA•Ž[Ù°{ÿ¹žÞÄ ÊØ ŠbÎxiÿÔ±ÿÿëÓ¸a¹¨c¨wYŒqÖ±ˆæÏ•Çå—êÈ‚¡¢hs„Kn‹L}™`¤Îx¦¾ž›×„Äí²ºéœ³ßœšÔ¡²¢¶ÊŸ’©}°»`¤>y‚Fv˜@^~GЬq|£RWˆ8fb>[`8jw5p\Ldd@dhGŒ›[›Áh¡i‚£ILŽ:[uGm—`£¤Yƒ¬`†³SžuÀÚ—~´\Œ«aw¦]ˆ§QY`(Xk%=ZBU/HiBm—^n‘]sŸŒÇïÆÏû¸ÊüÀÝÿ“p¡7P‡Jpža…œoŠÃdx±`u¢G`3W^/TZ0SprÑÿ¾¹Ärg~;Qb7mq<E[%dbI^`/?M0Z}bx«‹§mq›ee—fv³Wi¦u‡À†Š tµr}šS~›k©a€­„‘®kf€QŒVq€H`t<\uCl†_|ºx’Í\e‡9LS*BM?o}Odp9NQ/=N;[e6BW@TrCMg7Me5^~GdŒM„§N`uP`fVbsFj]1LSAz‚v¶Êk\Y?gƒ]–:ToFOsOTmS`_}²fp¡|–ºck†S\…^‚€E@iUCI@KL,hI+nX5~iA•sQ‹¥^o tRxu9RW0:6P7$kAGr8OZAP[;@W;CK5PP4bL;bR8jX7le?xqH‰ŠDj ZvWk‹Np†`mzS\~HrwS\…=VvP]d>b^1_d4^b6Qe=XJ>X`67K>C<:[<3oU1€yCŸO¤Yu§vt’wm”b=†i8MJK< Wf&S{<…e2Œ{3qW‡YRmyNneS„c?΋PÿÕƒÿÿ¦ÿÿéÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿäÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÿuŒÃCF“1/P,%$Q UOLmGvX8KCu}F‰§H˜±j½z}´w…«zr¯ycžaY€Lw\1n˜Kp•do„H_Š;~|@­ŽE— X[ZŸŒDv¬Kk“KqŠHŠ‘Kb®^W{Ad}2ƒ~:i«fŽ[ˆLb¦rBwIŸR&¦ro«Pe}‚jƒJWŽ\®w_RÓweHާIºËa–¬‚žbmœWXf>R[0o#~¾J€˜«jƒªiªaw§ž²Rk²W|ˆMi™IƒxYr¬[wˆ`YƒKVnO‡k;f¥gw“GŠvUrjSKzITS7hj7[„U~>l–m_œPSeAZ].`dF_vAQr;\q?Ti<¶Š7æû›µÏ½k½‰RuHLy.\‡0I—:€(]œ_x9x„RZrF’}4ÏôrÃíª½ä©Ë׬ˆ¡¡x¤|˜·[¥¿„ãW”Ø¡neJxŸ`™ºRbjdŠxB–×€Ôæ‡bÿÍx¬>i@5ÍÿTÈøÏÿ—·ÓœË|hhKŽƒ]ÿ¬J‡ñ˜p|0ïƒC‰WT²uOoŠO‡g1¥[=¾™c¾¶t“½T˜‹L‹˜GvoV5aAjI+jœ8ðßb¸ÿºWÂ_Dv0Cj"ak:C-V@*+Se&@k+*BW»¢Z¹wŠ™QgÈ]8•(#=("ƒ6-BÄlT8V];\:^H[…0‚‹<ŸÚdŒªY”¸yàÂ\ôÿ¤|–:•ƒZ s›\‘£JtvNdh<^f-lo3z“S¦’H¤©t‡~Bq†6Œ¬_ƒ½T©¸qÌVŽÎF›ÀL‹€Pƒ–E‚¡T²BìÿÛÿÿñŠØxµ~Oº…ˆ€‹F”£IÿÌž³×w¹¹‡²ƒ´ÇŽ|Âs¸~”ty¯k™Š^Øÿ¹ÿÿèöÿ·§¬«qWD‰c“¤\Ôzl|G`^8e{3rŽRi[9€‰X|›U‚©h¬™OpÇLÚ`ÜÊ­öö¿÷Õ¼\²JLn/Qg4HO6iqG8A32R34‘§PUb.z_L@z)Th.|pBd|8ly0„ªFi}9zt?—sOšnT³»lœ­]®“T uZÓ¤o™œLü’†ÿÖ¸ÿñ—£–Z⫇¤ Vv¡GušB‰¼dÑňÐÚ}áÜ–ÈÌ`‡Ow—^y‘ckˆeËØ®«ËžÎüÀ½ó¯½ë«x²ng…Mˆqdš¡{xšQ‹HnˆAGpA~‹[tˆOds;ix+AZ,n:BT#P[!uu5dy=M[-6M!6O/CP>‚`@v~M˜C{”€ƒ¾MyŠi—É“‰µxšœ‚˜¶}x@;["Yr1Ti(9>EŽ»v±pc†IdhÆôÎëÿØÿÿÉÖÿ¡ŸÝ_zŒw®kŸn’Øq›ßw§Úkp™?j`*L\8¸ˆ°[NZ9VgBmˆAp™Ns˜>EX*/;"NM;p‚z¼yt¢ev¬n{«r™u•Âбbm]«bdt1WfHu¥a‰Âsˆ¼[\uDOxMe„Jf{@oŠQ€›nލnƒ–Y|ˆ:WW0YT9\d?Zk/ES,?K&8C!.D1EU=_b9Vd:i{]…©r±YayAJk7Xj@Zf<Rvb©œshe-Jd>x~Pb^1>_<SnN^|d‡´s Û}ŒÊ€±K_x8KpHq^;Gj@RR@]J7hX3rkB‚‡U}ˆ`|‹_w‰fZ†i>e]@;@OA(jC#Xg2Zb?Oc;FS?OC5PT2WE.FH.W@3\h/ztN„ˆ>v•Zeƒ_^|Ka|WheEktC~tBs‰Ij~W\pOoc=Tf5?^;JN,`R#cm-s^9iX6vP7{k0x•M•ˆW‹Ÿ^w¥y€žlu‹eQ”_QtNqm0‹‘;l´ZjyP”^:zcP€W\‘uZÿ¤kÿÞƒÿÿÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿóîÿÿëÿÿìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍý©œœS†©6Uu274,2"*(7&Ü/ÿ|#²ä¨j‘œ¦kFœÚk‹ÃŒ«Œ“º†ˆ§ˆrŒvrnk„©]r§S‘‡C™¼WiÌ‹~P|–Cz yh‘Kdu@yA„³S—UcJžy6›´kQ·kWr:[u1¯@€«_d¢bxŒHg ct‚XŒŠ>h”u¡j;Gί\dCt€8Ê®VoÛ¢Š›Lƒ©^bnŽz8}rZ`†JSZ?ML'–…)®Žm‹³pŠTwœW¦“[—¹uu³eZ…R~q=KœKj„7q—C]vg^†@OˆL^}6@gPBK.GJ"«\+H™[;X%GT*€ƒ1™µUpŸzPŽOTS3BZ=FM3@])h[*mŽQ=WƒN–x@”ÿurŠlbnVSz9`‚+L/fm)j™I@?rT%ޤXtŒu¥®o^Æo¬¹L¨Ñm´…s[Lo‹s˜sm˜sgi²‚‹o9»Ò‰”À›@š^Zf ¦ÔP²ÂwªÍŒ_Uf»‚9Úé­Îÿµÿ—¢Â‰n‡q}[?9\.ˆW.¹‘Csz[©£E“¥c³F¡\¤‘M•¿a‘Ép°Ÿ^£³R~”SnJU¨5`d0ÖâdÂØ¬Îÿ¡·ÿ·•ㆇȊHoL.U ;79$Y#=1 KiW|#«vUZ¨U£…OÉq±çvÇÿ«W‚3nŸD€‚)`µQk¿>^6þˆD¨ÿ²¼¦Š³Åp‘®h¨ÿ‡¶©u¼ô“Œµ[}VTe6³vF†ƒP–gUƒuX•Œ?…}T©„@©¹dÁ“^{K¸‡OpÂ\\dKšG•½}‘–:œ®B²¬cª¿b—›hÆìŸ©¹gÿÿÿoy[ÿÿ”…ôv‡~E×Ó{ïÚ“ŠÃ{±”`­ºi“Ô€s¬J›À†Ž±_a£i~‹MkSFoŒ‹…}r\6Œ?=j/cnK–¥˜µ‰…§s†ªne†=FL.hJ@ž¡m–߉”Ás»ÿs¢»€¹bžÞsäÿ²Àã°õ‚jB›Û|E`$PY+W^1_:Úáfg©A[p6ª€_|˜Oÿ¦…¥¨^]g9„ŸRW\0~qJŸyQ¦’\È¡{݆{´„bÓŒ`Ï‹|Ý»ÿ։çsÿΡÿ÷‹Õ¼zÿßžÖ²u¥¥VŸS·l¨ÏšÿÿÎ…«T±›vƒ¡f‰ªmnDtŒ^v®t¬ª¦’¾am’WRa6_gA¡Ju|Sbp6^?gxAz–ow™T`k7LX7axCr­[X <Y?eŽDz…Q|ž_t©NBp5‰¯KZz9\w4?b8Sk3_†U„‘fw€_«À™¢Çql‡e‚ši•¨OesCikAhz:RV6GPJURB8L6F^läòÑàÿÚÝÿ½Äÿ’“ªVXWSiyHj}g˜ÆxŒ©j~’Skq;f]Ah`ÁÙzfn1Sf2YhGލ_{°jŒ¼Tet6cbGqQ‚“p‰©ev™Xo£dk”[u“g†¤ly›T[zOdƒDLh7f„O\‰[k˜t¡OQrS›µ‡:Ll<Wx?RfAtx?NM3BL+BK1V[5YP1XW2XX7OZ0JL+;^6KQ3DO3HT<\gO|{Znu\r„_w–CTl<UoX‘›_‡k3I`6DfG…o1JN)<V@UsOW`w—y”Ð{›Íu޳ORpDKkBZa7Ge79V;>E4SB.cY2ouH|€QsvUi{SUuYUkW\UK[Q2fZ0Tg8WcDL]AQJ9JP1SO2]F1aU7_8‡E~’btˆZP|caVQa_8[t<T]4DX7AK8_D-m[8VgEicDr\7_oGUpC_Y8yc4‰`;shI€YF‡c5|TyŸjo”[|ƒbg’a_b~lJ~L€ª[a¢hemVfO9‹X9¦…Iÿ¯uÿÿ™ÿÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåÿÿúØÿÿæÿÿâÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿÿÿ²Áÿ„c«ÿIwÿ½sÿÿÿÿ÷ÿÿöƒÿÅ^‹kO\7>U7_=*™L,Ÿ®Wy³ifPp‚Pg‚lv†^M–n:h^QE2ta(_ŒIS|Dns;UpAY]Yi{7€”5•«g‹osœPššC~¥cƒ›YpƒJ•†L‡²CbgY3s®?v‹Xq–KZŠSj€6h„U[x]ŒBo–ˆ¶;ˆÙ—u q`‡A·yF™Þ¯Š›d’ŽS¢‚Q«MX€d±^-‰•c‘GYœUvYGk|<š„BtV¡ƒT¼¤{‡¹fes„BlŒC`ˆMtnGvS\‡Gc~BY—Ii<e¢G}”AUiI}d,qyNsI_”`YdPbf>G}7:P,YMPq4Ii0Y{(di:‹H—wnv yY‰VMT/Ma0^|.Š€=[•aX…<w{7c†WdqBp‚S]v^©ƒAuˆ˜Š´d}ž`oªb‹QmŠ_n¢x¨uOŽ‚ŸSºÝŒ…Ù¢­d§ÿ¥iÈx˼Naÿ–=u5À`.È×µÀä¸Çñ¸<ª~OW¾¼>ÃÕy”逗Åkd¤_†„?xn<ÙfÍŒ^ŸÎ~¨¨iº“w¢ÿ³Šý„}Ÿ@º8Y«J–ÙJ„½~Ýß}Êê¸È°¯ËÙ©³îžqÑv=™='M8>+gS6CMl!@fTv!O†.<X['n¡W¯YQàÿ£·Ú‡õߎ°û«ÅßxO‖~9•’P—Y~>¬Â‘šÞ—»ûª äƒšÉy‰´\¡X¥×–¦]•‘AºY©¹[ؤR…·VœK½²f¾ÁyÖù£±¶sš¼qNK+{8lzF¡zW¨¬aŽ™P§ºQ¬ƒf¨nR‡ÊsšÕmÕºVظe¨¦]d‚?’H±°u‰¼woHvŽV}P{˜Y¡Ã˜îÿúqéYYƒ,|`Ic~Q{TY”mLëÆ‹^§E@^%FH/‹{k…xažž|lOPK)?C$[aGçë²îáÒu´ePs4ifGoKIZ+IT)`_.pD‰½_wžD»K‡]›Ê–Æv¦iq‚M]„A±€i½œn|zNjl:m€B„›O|«Z¹­m½¶uš\¤…\¶‘sÏ‘tŸ{VìÅ~ÐÑy´Çrðã¶±ÈuƒµY¦YÆžl ­qVn@y£`œ£~»ä’®×y–œe“½€½ï­ƒ§Kaƒ=…™l{‚g•ÖW@n'Kj@ˆÈnŸá‰‹×icJ”­pšÂONr<‚]rxP¥af‰Q‚Æ‹Æ~€–`l„^t›x¿|޳­wÊw…Ñt{¸c]„9Qj>c†FruNƒœƒž¯]r‰P \~žUSˆ:Z{Lp‡L¯“U}­DiEjw]t”p’¤¤×ßáÿÿâÓø‡z‡1:/#>7([^5Ou.@S5JV3KN8_yU˜£c`\Ck`?bg9moRŒ}[z‰™¯m“¥g…r6^oG^oFl‹Xz³Nq©VZCPjErƒ^ixOb‚6U~>`Svªoz¨kÓ{˜>c†ëÂxŽWl¦Sd“BQt@aq9RM'\T2\c2XR-DD(7K*AT3FO8]mPa„KTn6Mf=Z]:khUA\`DaM]9T^BZhMViDmi<T\G~tLd'BS+B]Gq…W‚­dmžm{³ww§Tft?Nl?Ut:Rm2?U18[0FM-]S,Ij.OZ=bY<Nb;Vc@]uHpoLfzLWiEjc@df6Y{E]mE\X:TT4hO6{b5‚{C“~D{FƒqdorHi`M`_BfW?Y[7M^3\A-QB)OG+ZG'WV1[d:i]Bzb:nuNŒfO§†D¢„NswXKnSdK<oe6bvR_{NƒuHs‡JhfyO¬“@€½z\™„ytXñ}MÿñoÿÿÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿøÿÿÏÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±ÿÿÿºÂ‡¶y7Y”:)N‚$"ÿP#ÿ¹^ÿÈœÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿ÷µÆv„b’‡G€”Pfc4qkC}N’¥Uj°jO‘fCYDM[$V^/z9b§Se‡P€—Gx­XšSŠ˜en‚c‹ƒHu¤ZdƒPkp>†zFˆzQ~™3p‰`ƒAoC~vZk‚He‰Dk€>c–Q‹VÄj}ć§ÀGmÇbdži”…Q ºVr‹puR„Z.ˆ|O²“Zp§[~p;”šR¥¥pešha~?jj;®g8f–aƒJ¥§[¤iz°…OŠPPh4<dEXJ$n‚<‘Œ>x˜Ug‡bbdC‰jEizVUgCv“As£jo\NopCyqDlsIf Ezn7a¤cP€IX€4g~7™rHKung)žc0fƒe\|1["L‰9Pi+Ft6Uk'Tl6zu87‰PS:%ph/f‡0Áb=i﬈dFdÂe¶‘@}Še\b_xDN•O¶}@Çþ½Er–j`'¨ŽE{’ýk”gb9lV.¾NœÄ—»ŠUwÒ”|9½V¦¡nŸÊr¥©wt´i´–EÓæ‚¥©…‰Ö{˜«n›Ê†§¤`ìÐnÌÿû\¯}]x6sW;l„TG§[;<A@52B0`4·^r–u|a{/.4E7UC$=L MlTh"pr'„ÍS–Ñz¦Ö{¡”P3@#macŒ†H¦Â}­ËªœÁ˜“Ɉ•½|xšK|L}­y›Çr¿ñ³æï½÷ÿÛÌÿ±’ó„Th,fY!Ç›Záò©ÚÂŒÙý­ºó©²üˆÉ ZÈÁsÅܵ±Ñ¢Ÿ¥°©…dºh Äz—˜N’D‹˜q ž[…ŽbØ’`±åjÀþʲ¿ ­Ë—¸§“ƒ„WgHzK8¨¬“¦®‘|µƒwŒW_g6Ts=²|ÿÿíäÿë™ÿŠYf3•p‚€Aº”u¼ý‘ƒÈXzµQEL,}¾_oiEXN3mG1 cK¡¥ZynV‡M>dG1ƒu>¡²aI£7 £u‘’XuòWxuPÍû½³Ø™È|‹­qsvS‹[Ÿ¯ƒ§Ù•j›Ubz=›^«~Xds<onA“hX}“[e€RTtEo‹_¡™wíkö×¢ÃÆo‡hHœ[®wfîÿ¬—Én¦Ûr‘£Rœ‘gÌs˜Í‡•·Œ´¹±š•Qc‰V³¯ž¬âƒú˧´€[^b:`Š9„¢`³æšåÿ½Óÿ¯Çõ¿îÿÓéÿÙÙÿ¸×ÿ¡Çs•Ä^~œOlŸYy¦y“«\mŽEx–fƒž}žÏOS‡7TŽPb±mk¢t}¯fYŒg¬À°ÀÛ¾¶ç¤qžCb‹WbŸOr–M‚¶Ui‚F˜ªažÆwÆà“®á’Ñù¤²Þp˜¾€”Èwu¯YLe:pkgeo;I]¦•§­›k‘©aW‚3Pb6cf6Ik)Ld:`ƒK€¢k†¬w›š>U\;e[=noGpiAodNit\|—ˆ¬ìvu™2ESO|†TiYqOk{GQ^+KX(@U4QuBWŠBk”Xy¯„ĊˤØõƒr„H”™†¨‘^¡©j•Îry®Zy†LbzAXm7[n;Xb5bT1Va/cc1`V+BN?QaVo~Q`oFhrKsf:QYFvvU’™LrŒNe‡N_…RcS_„>^\HhJe[9tY;G&E\Lfua|¤kŠÀrŒÇasCS`BUuHOl@NV'GC,K[-MX1[^0Jn:QlKT^FS]:†X4„‹:Šž]}œbeŽmZuamb?pŽIuŽNhmPkNDsW4{`8‚yG€_zlT…tNpxK‚jKh€IPfOGS:>M0@<(Q5fB.hF*c\4][6fc5uL4sl;}YHc?“lKolJGZRWO6df)blEpn>wŒJy}Mt‰d‡`’‹Yœªsÿ‡ÿÿ›ÿÿÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿÿÿÚÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáÿÿ³»çŠ‘€7de'.<*((7}#ÿG"ÿ£]ÿÂ¥ÿû»ÿº¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëȟ˸{™hŠ’Gr„FYdN_Q8_`F]aMdF<gT-Nj4nd9|˜Pt±mq„R…^|ŠY}ˆZkwYRh6S\Gco=j/m{:~n2šœ1Ÿ}q€L€c@Z}=lm1‡ƒ>}`n”Q©†N«¿x‹×ŠsÄn«‹He«qŒH]RiwQ›J-—|<—k\‹…Vˆ£W“Žc}¬swqZijDOo>dv5w{8t¤L®Â^›¢k¥µzj­ƒkPpvHht;`s7cx<SˆAxZ8¨‘_KŒqWV+Uk1[^Aˆx9f˜]exC™|9ƒŒX}JlKMpl4[oOguI¡ M©ÿŽlº{pšNš“Vp¨`˜_NX|gJg.cƒ:QfEB`@WS$mjBpsPT£bWa4^j;S‡3ow2×z;·É”rë™n‹PSm@Sk4^f8zÇMÒÍpHóÏ{S2v‹QrxDø•L‰óÛx»`nžY_t<eh>a“CA]¬auBTŽRir0u‘=¸ ]¥›‚|tFJ°`yv6c”À‰‰Žv{˜x‡j<{šqcŽIn¶Kao1“¼dp³pµ¥N¬²lŒˆP×nMxb0=$IE)+<,1g-6GUn'Rƒ.ij'º«š˜Ð–tŸS—¥P(? BK ™U‰³u]£|=B*ˆ†wcÍqq›SI~KŒo9¸}ÝÖ˜á÷±îÿÕ¾ñ¯·äžN‘OU”<]S0diGbt-¯hÏȤÞóŸɀ¤¯nœ`•¥šhŠA–”V[mA’‡b‚pVžÑ}†Ëx„žJŽºN¨·rÐêԜߣÊZ•e©mU†Ïƒ`ŸVj…O\›Fz|D|§e~ƒH´_³ x|Àc÷ÛØÿÿÿóÿùÇÿº{È_´É„¤¬p˜ÁŒ¥O˜ÎV¾ð˜–·y“²[Š•Y ÊfÃÿŽšR‡xFœ£YrËUª||¤žƒ˜ð{³å˜~´L}žPµxˆ”c¶Â¦¤Ï…°ØzµdwY”ÅŠÔ꣔Pf˜E˜¢hiw@ÿ”‡sLqs?€“dc~N_–NkŠa‡ qž¤x„˜Hz¬[„šUÓØ}ÿñ˜ÿþ˽bdpF®•}ÈÚ ¼äŸÆä°¾êžžº‚›¿€»lSnP÷«žÔX†uDœ®htŽB˜¯ŽýèÍìê¥ÅÙÆãâ¹ÂØ´äÖãÚõ«Òç¿Ñð£°qµÚ€•ÌŽ°åx®[f¨I‚©s­Ààÿ³ÍÿŠàÿÌÿÿâÿÿ¹¡ôx^…Oˆ¿‹µå¼œÕtk†`šÅ–¾ÿ°Ó©Íÿœ~¹Q“£n¸¾lž´q—·¢Æ••Ç„¨Ð‘šÖ¼ÒŠˆNw€Lg_(2A/c~WŸ[…š›¹~¨Ð}¤Ï\f}+j†Kj’QlŠe›´rlrH’ŽPgˆHspFulR„_‚©pšÏž¹Ù_j}/IHK…MbvHdc0FP)NM5Q\1D[<]~Gb‚Ug”c¦…¢y‡ž¢ËÛ_Qt<V}H[}Ma‹l¾m‡®e¯€K’{\‘‘Lp‰ESv=]nE~r<_X9QP,X\0Uj6Kb3NL;jj@btEWqMoYyGaeX™lƒ°v‚²ht“Qb`Co`?ro8d](=V8VoJltPlw]©^p|>AF1J`<MW3?N16I(CT7C_1LT3`R.jm2]{QJ{aF_J]Q8yl6‚NŠcgŒn\nqliQo„Fh‹Zcw[_VGc]3vU5€j8‚sL~bN}pIyF•ŠKj³Wgha_cC]m9Sb=\F1YU1yI4Hg;kBCg],qH9n`7q^;fY7j\AyY9v]>cBnˆEbvS}n>vGx„ZyˆZÄ¢gÿÔyÿÿ³ÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿôÛÿÿÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxÑÿ\Pv,F>!04!!#"-"g"åKúµVÈБ˜½’ÿ‚zÿù‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÔœÿû£ƒñ @†f@J:<3$>>$?W)T])›R+™Brªc\‹m>d@[@4€a)€€T_t^flBYkA`s;pv2cŠ<wi,’x5xr“uK‡‡JˆƒE{‰NbŠV}wF•ŽO׳O«Óz®²o¼¤©ds³}‘Gi³L…Wf„O[>ˆc9’ªY}¥nˆ˜`¨k¸uVa‹Y\tKs‘9ÿ´LËÿÀ}žÆaœfT€D€pDm¡a§šYÁ»f«Ñwh®©sxN„uSz’S|QUÂmLqHGL0b'p©p–Q|ngD:[L@*Vg/XV4Ti3‹p-’²|¥~hw£‹|”IZLpc9T‡MP[8]l0>b=/J#NNR{&Z€<HX1ld8¢zLO›g\€1}JnjK¼I_¥˜_U˜EP›lžb8ºü}¦ý§Lˆ‡xqAVvE\2“ÿž“¤u|»bvMe›P„³A€¡Mq‡U¡¿hn”jK”>˜s7b_Ÿt?º¨‚ `CgNWR/Ue%]g1ˆŽLV—OZ:`1˜Ã@\¥ƒvŽKžƒg“Z¤¨]‘Y½«V_tdƒÜ}O|4aK8ƒ*—G“â„:f(If"H^Ct)JE{]g_hTž¬O/G"^Q&y“P@mI5# ,#j6j{QguHYW4¸€…ºcË¿ÐÿëàÿÕ¬ð°ŸÐ‹a¡_;C%AVCX&OY-ct-ju'““Oy»h€”C}Li“Ff•6‚s2fŸ`]XGhy8œ¾±Ã”ª®il§ZIx.ƒxd±Íˆ¸ä’rØp¤WŠÌ„Èw‡¤a{ŸrU|LiHGf‚A•…dΪ§¥Ù³Ê“ÿä×ýÿÿ¯ë­xOq ]ˆ†[ƒ·Rt«JÈÜœX…PYO9ed;oe@íÿºoxAƒtM²©Xku;ÃÀsœÜdeO@öÿÔÎÿƧÇjºÇ•¹û“^€7loI^Z:ºÌ¤³ÇŒÁô§’¼xjvC®]hTq·T›«‰Äæ´Ž¼xŸ`L}6WlE†œtƒ˜p¡¢‚všf‚›fÈ÷´‘ªtÉΓܰÑΧœ ]fb¦ÈÈõ§Ñ姼ȔŽÁk—r«†„‡}d}JYqcßã°rÂKF_7iuDya_\NcQ[¤‡žÉ¡ÚﺒÇxš¯†œ°‡²Ä¤Ï†ªÃ‹—¶•ŸÅ™Ð|ŠÍx’Òp˜Ô„ìÿªáò¯âä´èê¸ôÿÄðÿ¯S˜:QYbŒ ›ªÈš¢ÀŒ¹Ý®Øÿ¿½ÝÖíÿλé~¹¦[p‰Dma€‡YNp]‚ y’°‘™Ì‡È^wŸX‡†M€o9N_4U‚Vs˜X‰Ÿcl¡t•·¤¤º[Vg+Vw0Wt/i|VŽ…RmXŒ—oƒœXŒ‰Q€‘[¶¡f|ˆi”°j~‘IUe3Z]:bCUYI`{Oa{E[n9bh>_uAauFepGlzHcvKP`ELuw›·WjŠLkPc…Md…Z`€L]iN|dBpfOfo_‰¤pš©[{˜Og|8Zb9lv,D_%Fp2Q^7d\@unQƒ}\qy^kƒV]}Lb~b‹žl§mv—nqž^i…Ur’b‹¤Uv¤Urœ^ŒsIbW<^aNqo<EL"6C,MT(>L 2E&6M:l‡8LŠKHYLOH,kW%cyEKpaKdP[Q?ug2i~?huJVrIhXLeyCnƒL€‹Nn‰YdfS^\7a^;uj=c;zhBlI¢uK¢²XsÍ…zy€ˆˆE|˜Xb€_eQEWW=qY9Up9sGAj[.vVCoX=jUHw`9uƒ;ƒ‚F–}E‹ŠLy‹WmsU‘kG­’=ÿÅsÿÿˆÿÿÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿÿõÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIËÿ)=·X!(7A!!30&"2#>1];„K ¦{N““r‰Ÿ†ÛobÿˆPÿá§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÿÿÞÿÿê¦ÿÀ]¹~P‚ E`Ÿ\¯˜N‘ß}z¾uY‡T=h:JJ0§[+Œ¦GIŒf¨Q3¤~>’‡[‚ƒLr„?z…?±‚@Â|µ¡f˜³wº fŒ·tyfwƒTä¦U¬¬bg·|—zHr²g©€Jm½qmPU‹Nw_3„—<a}Lp€4x‚U„—]¡d’¢|‘´€V™`h}<äžN©ý’a„­x~?cc>ŒTf[$nˆAb’a€oR^žqZpZft:pp?—sIe½qudYj™]}†K²wIŒÜ®[uVrV9mh@xgC{€Q“šTW}iŒ_+Uƒe^V:…s5]eOkU9V‘Neh?\p?D‘?NV$1Y/KQc†0@}5{U%…œIƒ±_M‹dbb+tKAZ<ƒÈ<rcRYs:U}?]i1µ}AäêƒàÃvµ†`m]_:©•D}€yq¯mrTOŠWiD1–ŽD™ÛskÁ…SCYœJ¿‰D”ç“u­lY¡[©P2f¿x’[B¤¡Yi©P}\1_Å~Q‹9cv=‘‘7X€G¹N„¼g°r¶uœ¯eU€WVo8¡T¿º{¬ð­„ËhÒàeßÛi—§oT…7‘¡;Rq3¼ƒ=k¯\I³HN›²j9‹`Z1"d;6r*HW@kXšd:‡§eav<À™NÃô¼ó§çûÍàïÄ𻚽Â{‡]™ŠR†ŸRhµGw¸L‰Åry™b`ŒLyzE¡Ë{€¾tb¨VMZ\ D?NPa)Y~1¯”GºÑ™¢Ènåw°ÿŽa¾N¢®¶Úšžøœ|ŠI’¾…Š¢Ig©XNq?9i0f?3€J»¥~àÿª¨Ï€ÿË¿ÿÿö¿ÿÆo—¬l©½–½Ô®»Ò¡Ìí¹{¦W}~M b®¬“½ŽeswH‘†A’Ä`u]Et<å·‚œÝtšº{…†\£¼w²Â„”·m¸»Ž{¦Mm DonD §…ªéŸª·yov>ÛÇ–c‘GbK–²–µ¡“ŠU‹‡P‘}`\“E…Àpb”C³›ˆi–9UAL®qŒ|¢\¯½‹®Ù–°æ£ÁçÄÏÿ¾ßþ³›â…ªôŽ»è£¶Ø|^ˆNo’h…˜tOi’PjqxÕû–Ÿ´eƒJ‚°ZMi4IpL˜Âz¦ˆ§Ô‘‘²\zŸ`ˆ§oŸz¬¿‹°Ç–¡Î™¯å•¯ì•߉¦ï‘•ÊmOw2Ep3T8H~?hx^£…nGS9N†D\‚^ƒ»q}±Š¬Ò¨ÀÉ¥«ÍÍÞÿÒ¼ßn‹£\‰‰b«’^e bq·QU‹T\ˆo°”Àß‘~¨kšÃ† Ê‚cMks\Žªl†¤l­iu …w;\k8Ne4\i4\`9dcAle-caF~cP’’\z«Ok˜CXMj‡VeŒK—PbŽLg‡BvrQkjY`|PZyMpŒLa‡=G[6bd:_w>Xi0McC_…€š°Xhdz«VoŸUa Zo˜Pq†V”Ccq@T~bw³t„²u‡«lxˆA^m<No*9a2gX¨ˆl£¥cš¢Wlu=H_EgdXi…\f~giy`€…Q^€]q’x­ƒ¹}‹Áy‘½f€‰IrsD_sFrzN‚‚Cbd6]]4VW-LS(2G,3IJmwDOtKI`VPH<RX%R\,N\9<gHUN>Yd1Si8Y`Csq?v{IhvOvƒQ[Œf~rO{eEƒI„€T}zJxvI‰K´oA¤À[€º€¢—{’´`s¿wzvgviGƒoA‚{AxG_?•i;‹iI{eGqgM•e@©›F¢ŸaŒ`~’Z§„b¼›eÿºtÿðƒÿÿ¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬áÿR{æ7OŠ"0B!D=,%1*+*]/P` 7I/<E$rJ¹…9}½wru|î]Aÿ¥Vÿüºÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿðÿÿáóµúÿªçÿ¶ÿÿ­ÿÿÈÿÿìÿÿÚËÿÌñþ”¥é|{ÓoPnrA……I“¤X“«\¢»[ÿß`ÿÿžÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿæÿÿßÿëÍÑŒ˜ss­R„ŽVšœBaž„_~D€z3³Ns¼g€sFáF­ÉuÀ„t¤xv_i„b¯†4’©}s¥x{{~z—SBj`JV8P|-bl9syKh‡`¥|b[¶‰a‰FkoD^wHyaRZ¯U›iY„|^ñ™cmúø„Qy•NY|_ÊT;vÄ¡WbXJ`9XR(W[1Wˆ@jd8i‚GoGVXJv†:f„FMrFNm<Ns8Vm.Ol0Jq8d\¥8šÎ€]»pšz/µ¹yÖâ‘‚ìµ™í‚X”VEw6ar<d–TŽJKqm3X69S fm+n•;r¸St{PhgYLŒD\ˆ-yN†Ê\9Pbz(‰xLŒŸL“¯„‹½€}˜Tqª`ÿ–`[ ™ƒM,}žTŠ’A`žQh©O•µGšÍoXhI]c/g¦L§t›ÃˆœË S‘mP{3cT1x‘K¥½b¡æ¦ÿÈp÷·—„?>˜c#Tÿ†Ly¸|2R>_w$d¯hŠ‘A{¼Hm›?®Ölv¡YmŽJˆ«LÁÍb‰G†š@³³QïÿµâÿÐåÿ½鲤å»Ír–fµpµÚ€¸îȸƃÊôèɒ‹Á{§g›VÂÿÆÕóµ‹ÝŸ[Äaw|C>g%E[$[y,˜~MáÁ˜âÿ×ÿÿÿ»ÿ£Q–D»Ç§¢ë­Ñ|»Ùœ’Æm{Zw“[h‡LO›A^`,{d?™hÿÿÌÈÿ©¿ßŠŒÏyêÿǯÿ°vŸU³ÜÃɘßð׿æÇMk2e‚7åwt°ÔlªtP¢_Enj:”zP€zE{Iرn¢Ëpd9]8{›S„’Pa^4j\Ek€FQv5j~Ds„M®¯}l¥Fe„?—«kgE´€€‡a®€…y}C‰VEœ–X\~BŸ¶‘¥r¡t—éhoaE~’IuC}}T•Ê~ÆèŸêÏÒïÿÑÈࢹä´ÿœ­íŽŸÒ†ˆ×xœäi¬HpvFt{W\K–‰Ž¬ÜmR¥ÂxÓݶ¨Î‹y•Z`e_¥Çz‚¾Xz£[o™[u¡NnŒR;P=‚¢rаej•M‰„v£¶oBk+V„Y¶n’¾€•PMs-Cm;P†K‘´‘Çÿˆ‹Ýj”Ƀ‚Ëuwˆ£Ó¤¢Ó  m‡®x€‘Ym‘\¤Ê…ˆÙ€|»w~¬ˆ‹£š¸à•‘¸¦ã¸Ãð¤lŸFLwCa{Ty”i…¬g{¯c`A]q9Vb@dwA]\BkˆVeŽS‘Åv²^œŸeÑcy®hy¬i}›Xw™X€°}Ìtˆ½\{EokX\pO^vMržd}‰5\l6Qz?b<MY%9R4D_tˆ^t”u| ^\|h|Ÿjo|WxŠi……Vˆ™e{¹l}®fhŒl{‘TR`7IXJv Tc”Xw{Ws x™¹qŠ´h}³Rfx;LS<S]OZpJS_8Sn)Hk1EoI`ƒn°…‘²p|LsnCfuCmtEg}K\rMomGba5P^:Sh9Fh=CbT;O>8D45C76@3;8&=='XK,h\+mxI^rBckBwd>‚’InžZnyoowVZ…gqfa^d<rf;‰t?…‚L|]uyQ‡S¦‡P‰¼d…§Œ¥r“¹j†»w¤—o˜‰RŸ‰[„ˆQ†vVŽoJ•uE‘‡JƒO™jTˆqSzvL€xZ¾ƒUÿÄqÿù“ÿÿ·ÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~½ü]Ãdeor„V6—[+6>"$%!*)40U:RS$5R;:H5AK{\*°Gq¦}`w}s]Iÿ‡>ÿ¾eÿãÅÿýÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿÿ½ÿÿÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿùÿÿÿÿÿÿÿÿÊÿÿ¬ÒÅ•¯U• g•Gi‘vvŒ:Ž•K¨žg“²’¡l… `‡Œo“ša”Šqt²oŠ«WfM©„E{¦g³xdF‹oC[5_\%^`>RaAgj8l}TyHfyaJXCj6d_.ˆpBšlc¥w„דgÿæŸiúõ¿–W€Ò”YcrŸh<J²H@2qk,xxB†™^f®}lsOgŒY?`FW`1~x:IM]Rm2bi5Pp?\z7`…Cc—LW†7V}6P52le5Ô|9Ì­âÿÇ׳ªŒæÉ€wYJuXzm/^–t:dM/h-±@bÿ·oŸ<tM‰Ÿk>Âw]l&=a:m=0•l;¢nU»Q;‘<cj)‰ƒKÉp”±l—ÜŒ¢Ádn¦`†}4ušQ\㥃—ª…Îú|f‹}s½UYg2޲uƒ·›šÿ£ª´V]ȱ ¿f½ÛšÿŸ¯î‡Ê—‚¬qÑ¡cÏT|F.U:41$ Áu.HcªÇPmÈz¬¾yÉé•·«‹š‡EŸ™qÑZ¦¹p¤é‹êê§Áÿ³ßÿÀx¢_îŒpÿÿÖêæ½°Ü˜¥é®§¿‹d¢nŒ{B‡§‘ޮЭ°«É¤¥É››Ù‘ÀrȽ„Éæºˆ›^г|bŸPDw2W˜\@j,ah1x¢‡µµ~ºù§ÿÿÿßÿÛ’?Ÿ ^Þü¹‰¿‚X[A]<F”œw“‹a¥·‘w™€rm:ºÅ†ŒqDÿÅ»ÿÿ¾Áÿ“éz²¶{½Û¥}´ZÿùÁs¡RžJs°`d‡<Š‹]©¤vÈzfÿ×ÅÿÀ‚Á«e󱂈‚LË•„ˆžgŽfPtC¨˜u„¨[šhˆ \^qAص…ŠÄSI…(_o0t`EXp3Ul.Z‚BƒŠW×ÂŒ`V3¦ntÇù‹‚qF~YF‘œYœ˜e ’Z–ŸlÙÿªÑëšâø±Ìÿ‰„Ê[­Ë~ˆ½Zóö­ÈËŽ˜±„Žž¶…l€J˜ÆŒ´® –µm‡¬x‹Ì^r‡ASeH\wN¤pŒšg·ÞtОx­Êr‘Sb{Bfz\¸Á|q©Sa_‚>Mh%"4oqTV}/ce02A9\3u¥jšÅªÑ‘¶zs®Xn¬hɃ¨ÔœÇ쮾ߥ±w¡ÈŽªÏŽ†¦o¡Äž¥Ë|r„_v«ms¦n}®z¦Üˆ¤Íˆ›á‚ƒ n’{¦·€º±ð“ƒ¶urMVlDit<RqI‡°m„ÃekˆEbˆARn=i›MmŒX†¶†°å´âü¾àÿ‰‘Èq{­{—ÅšÓ€™Êgzžm”»”¿ã¥Å醲Yy¦^hGaX£ov Hk™`”Õx‰ÈNa•5:b/@_gz†Yu„p{¥YmœO_†UnŠSg›Rh‚Lp•j}¢ckRk‡i—£MSj@gˆq}µz±bz›o‹•br¡h}v‰¯m’Oo<eyE_x4Sl Jr%Ht%@e2GcYy¡m‡œNioAgdJwt@`wB_vEQ_FdpChfEZk^ƒ [nœO\~O*&(2+9=GK2I[4f[7`s9j`BY~GZ[Iok>–vH„¡Rb i]wuWNLY\EgUGV\4_j=kX9qR6}bAƒlCŒ‰P‘©^µf{¸‚…g†™jŒ‘fÆŽ`¼W³ o¢ˆgÊYÄ¢\³eÅÛs˜Â­qd†MýÀnÿìƒÿÿ¤ÿÿ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ½ÿDWÀ_>mz^@s‡^|Œcp¥d0t!.K * 7*<E \I)_t8HyiQZE[e3wo=nt[vZUcmZu`Iñ†8ÿœZÿÔ°ÿúÙÿÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿýÿÿÿÿÿÓxÞÌŽ‡Ngžhw‘Z€›Jk‘N•ƒC‘‘[f¤jYxU°‚D|·z\šS€vLˆ£]ÌxSž¡cÈ’VnV©mISwnJ`7_X(A]7OT1\e-e„CÌg>`¯N|A?k5IX1;I1ZD(V^6zi>Ùœ`jÖÞ€{UdayW ŒQ‚°ey€\ISxv.Œ}Slf_p€NnzF±­A3Á“=_)jZ#mŸJQ’Cwp0p¨Q‚~Yaˆfap8[‰8Œe/O¥v€|0˜ƒb«ÿ£\Ž~\‡<We+W¢Nr0I eIj:i[(¥ŽHåèŠhßµz AxªqetFRŸP<rWRM)YT.Gc1—a,\„V\…>“=–™]’Ôy±·}ŠØ‰s~Ctº]T‚³V’ŽEʰ…^‹[¦‹=šìžs†U«Óržèx—ÇŠh’`nIq—P¥ QÇ®¤µÍ©²¿¦ƒÇ†š`jÍ€GZ.LG!bR%·tK¤¾[¡LâÙŽw£l`¸p‡Im§Kg†3xªR¶¼x¾éš˜ÿ®ÁÅ…êÿ¼Ãÿ¯Ÿê†¹Þ—ïóª¿ÿ¸Ä㢤ñ­šÊˆÿ£áÿ¹–ÝŠ_L–¼†Š¨z’®r—ÊbJ ¹Œ–|OfwG}eHdŒ=•ˆL\k?Oi:My.Pu(x?±õÿÿâ´ÿ¯o¯BˆÆ]rNFƒ5'44Wÿÿÿe@vnLTf,µ`¶ÿx…£WÜžžjž¹tžÄmp±Av›Gg…8‹…gh£H_jHe„?‰¼WÚÿŽ«ß~°ªaþÈ~ν}n–JšœSÖž]絃w|3m8j‚6vE`tEƒ†Q𪒗yl·¼©—o„Š>‘De„8Vr-]y3gu4΀OI&h<>ñ¿ºøÃ»— ‡Š´Tš’P“Y¼Ây¢Ø{óÿÈ·è°Ó‘ÜÒ±þÿÒüÿ·Æÿƒ§¨g€†dz–d\i=T‚8z§u¯ÔŸ—¿‘°}ÁÒªÏï’O}1Ip,VhBbsHˆ—TÂÉŒÍz¡È…ÿ·•¡Ípwœ]am9YVC‰ŠVQ|'%:!0BH,Be$C^ E[0s„^Œ¸€»ß¤¤ÞŽ»Í›–±m”Ÿ|°Ê¥Ð››Ê˜¨Ý‡W‚JlgzŒH:TG¡·ƒ}’S_e;Pg5Bb3Pf[u­UNjE}—XuƒGgŒc‰Âq¤{Å硤އd@Fk6Eg2SyDo‚pš¶n–¹`ŽÂOg‡Et‰Pn›tŠ·ž©Î±±Ñ“™ÀУÚx”¼¢ÍŒ”¸o€¨„žÄœ°|Œ¤|–¸vÎtŠ¿Yq¢Xu|•ʆ¡ÙŸÇÝ‹›ÀbvŸHc:Kscz™Z‚”oˆ«}¼v Æoz°s‚½gp™O[}DfqK\‚Qgar‰U\…o¢¼‡Â†»r|¥u‰£ab‘YZw]frh‡Tu“Z•Œ?Zf,Ns(Js/P{?H}47_F_~TkšKc›Uh‚Nfy@XpA`oOWzRlp@jyPsi|•fn—Sb}@2' R,_Snu4…|@ÙVˆ·Xoo\}]dgSqiBxjIpoOO^>a_<F9SS(Ul4UxEMwEiT8~d0xuBP‹ƒN“ª_˜­tˆÇ|r¨x‡†oƒsT¨iN–Q˜˜y²ƒdÝ¥]ÕÎoÈí²Ü¦ç¯šÿÕ“ÿÿžÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÄÿŠˆ˜Zuª/O\1'':0K1'€T1‹–XC«|"Hk$%&!(*,6)^3g7„šiaœ‹OwlGWD5RE(/4` TU!m]8˜6­VÿxXÿ—|ÿÿÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖä刓€¦“]–¾{Š“nhˆMq˜W|ˆEo}Gb|Jm€Tr˜QlqkdŠI…‚@^„\…l;І\š…Q}ƒVIlXEa+C[,ML)NK3WQ*Ub9tƒ6itNwpF[‡XByA>_4l]$…i>v}Z“\¨àlm®M›Uj4tyF‡¯O¤l…²€YŠngf@v^A[mNeiB‘ŽB¦kq oi–^k{F›oHL_YO3[]<oFp–iWcCto6_r<Šs>l¬hÔ‡JyÿÑr”ZX¶Q°w3i–~ahHvIiu>|rFÿ„T£ØÞ„É© fw™l†¬i޽j•É}¶M|XhT#pÃF‰ŸGr¥^ot:°žG¾àŠ˜ÄŽ„w¤Êxž¿oÝÞŒ¢º‹xž‰kz:ĈJ¥Ç®ÉzËÿ§úÿšÃÿçlÂxm”K¢®P¼a}¬`‡ºx|}FSv3\eCŒŒOް…j·l­¿o¢Ú¢ˆ²pŒ„F«X§¹`¨“OÀÔ„»Åt‡±Lq˜Gy¬l•ÍÅÌŠwÌ©Xr5ÉfYÜÿûƒí‰Ÿœ`Åë¤xÄvo¸E¸¦…’´GÿÿØÊÿ¬KoMvkCg–M{nZ§–YËÿª†ýyM7IJ&VG#OH#_FomCBp,Ik3AT#`L6oaC²²ŠéÿÁœó}ÊXˆÅ?hJdxH?.de3ÿÿÿg‰DžÄ{ŽM£¯xÿá©rÃpr¥j´Îde?’­f~ÏNe4am-R›3ŠâeºÖ€ƒ§h¬šƒ‚ªfºÖ˜½×ŸøÿÕáÿ×´ò¢Àµ¡x½ªw¢wX¯ÔuƒzG`‹8la@„ƒJxœNy¢R¹¤|‘Wr€A•ˆFc„3ly:dœAMf.pg>a©C‰‡UÿÆÁ[F-fK@™eI^%ok>‹‚Z³§|ÙÁ°à¿­éÿ®²ë~ðÝÅüÿƭш€”L‹DCY#FQ(l‹Lx‡^{yYŒšf±¿—¨×¢¤Íymaƒ?Ss>PeA’‰Y˜«Vy|¡´Ž¬á¨ÂÔ™„¦YZ{JЬU•]EŒ(*:-I%0U&OtITxD7U#)E*cWc©¤—Ž©m]€TuxOqU}w—¹p™q»Ñ‚}•\WqIp‘[s¢SSm8Sq3^†Hy°d{©G`w]„•L^ƒ:Tp-Fb,FcDu¤z‡Ë† Ö—ŸÖƒ¥Òp‡Ïft¯DRˆ=On?KbB…’€Ø}Æj‚¦e¢³ˆ“¼“¡ã°è–³ø‚ é}Énr˜a`Ywže®‰ªu‡§q‘©v†šo±v}©`xše¶”Þ“žÒ€{ª]\{`v¤`}Ã[o£qq•\fuI_yWvŒx„·{ˆÇ‘ºrx›[bjF\|Y¦dƒ¶`qœav¯ª{†£„޳…ˆµ‚Ž®sša†¤Qt‰Q}…Ij‚Usƒ?Zs3Hc(DmCc—ZkŽMkšQ]H`†Yo£acˆWiƒFa{BQsIWtDZp=P_A]iQbtRX|U^„?E0>Y:!XV%]^9€j<ÙxJ…§Zki[zaMmYSWGUJ4PO<Ia6Zj>sV<|;|«\e¢qiu\s|C‹‰N’Ÿ_z²mqŽmq^œ}c…¨uoy~g}rFˆ_LnpMƒb^Ç~OâÍpë÷’ÿú­ÿÿÈÿÿÛÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³µûakÊVNMT7:@;)2/5%**F* „Br‚E-tn-.H6.59"6F*-C+P7 aO%TaMfTQh[G7WE!E5&BX,li9~n2œ_Jÿ…Nÿì‡ÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÿ÷…sŠ{‰U“Q‡ŸZW‘Y‰n=h™\UuS};Ÿ]»“_°rs|O~ŽI]€FZt>oa6±ƒV}¢aU‚G\h=Bn@;`*O='?G&?F'V]3kv4WtU>k:yY&V}Sao8Ee9d+±©T’º}nœ„ihŠza}·tn¯`—¤N‰¶Š’Êmm mqtLcv<aQP“£E˜­kÈy„‘pc†tkp@†ˆB\œcd{McpKad7Z€;bn>h>–iBˆK`¡gÿ‡I…ÿå|‡fVjR¥u'S™rM^.i‰<iuB^|MÂ{Hÿ‹‚bºØw¦QpyI“œp¡¶•›À£j³‘qI›˜>ŒÈxa\—‡<°Á`»¤tÓ¾”¿¶‰­˜[Åvƒ°s“”iD‡erY0^v@Œ±W×ô…°¹™Ï k¿íБ|zŸVj“B–£Ru³^p¤SkJGl:Z‘5§E†¸l”­kŒ£qy®dz¥fo—F–¾a¢½f•Õ…¶‹@÷ê…¦üŒÍn…ŽM™ˆKà’…ËŽ\“RA~79T%ž]$}ØžwVigR_'wŒHœ>صQîÿžÍ´wrb?¡eU¡][\0¢ß Øû©œñ·G“JEC)QE$>N"¯?.}qQ‡3=al0éX^,|Çm[H'ž¢W³Éu˜Ã‚k¡NVr0§_g0t'‘|NÜÿÿ‚yY˜œ†¹•]‘U¡Ó|¨ãˆºâ§Mo8z‘Ao—E~ŒBlÂ=~–9ÅÞŠÑÿ×ÿ°gŽC€ºb”ÍZªëƒb“LqlE±€^ãg§•wùѨ½³†±y‰ŒYt>ov7pr<v‘=¢Œeÿ¦¦ª’m¯¤uŒTq“@fs;i:nŠLÔ°Ä÷ŒÚ´€ñռݿz{<_M6—Xhi3wi@—T”kR©…xo”I·®}®—|½¡¯°n¾¥w{®GŽ­dj–8Uƒ4b€:IO%@K&Uu*j~Q§Á€–³ož·w޵i…¸^OŠAކY‰‡F_O<§Â½ºö’¨ªtÃÊšµÙy¤¤m’šqƒ§DU…4u¡O…µt€²u]‚CDf,KR.-37\ML^†PNX<cwX~®_\Frv@bDqŠPbu`n–LgŽ`p•UMa6jšLn¯dœ×‘‘Íi|´cp£I\‰:Kh+b~4Bi3]ƒu”¸w“aŒ¯|œÍ}šß~¸m³fp¢K_—Dqžp”»ƒ”·‚‡¨x…¡nuˆftuw—x¥â€©ñ{žÝen›Lu”Xˆ®m‘”ho’nx¦|޲w‚¦c††Y‰šq”¢oŒ˜w¼„¥È›¥ÊjŽf‚¿—¥Úz|ºx™®^k‡?Im7>dVyœy“±x‡·uЏhb¡Xx¼^³f‡ÅuÈ{†¡`\vGSzs‰Ä‘œÇ‡·u~¦s¤`„~MapBUhHiw9Ja*=[3AnQaŸZ`—j`ŸLJp@Oyj{žnxŸXxžVe‰QiŒNDtNb;CX:IdBOlFMmL[`.J<CB9(>K,P@2aX,cr6bd7J^BQR=MT4\Q6^[,pY6pn8jO—fO”¥Io¯‰L„gORul3xTybw‡Yucw|Nue@jnO_iVuiE|‡>[uSmNRàxCÿåmÿÿ´ÿÿåÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÿüQƒÿ>8ƒG/8^6)GP3=;&0K=4.!14)= 0155*.'"+*<"[= Z\57\<7G2=D#1J(F>#<9!C7,LE%)[34/'o)Sr0J1ÿŒCÿÿšÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿhž¼juLh6n«Wi~[qc9r‚K™Qy•s‡£i¸«k„±uw»[]‘Phx>B|K]M'ku5nrQruSl|\SuMGt1@K-[[-Va9Mh7‚u-TuSTl;^e.Tf:Zm7Dq<O`({v8{¯\zns²W•Y²¹j™Î—wÍzyŽVtšR‹WU ¬\ Ý~†–ƒolƒsG\ŽfkO;PcD~i3q‘U|†Zˆš\n…c}}Z}ˆ_xpR‡ˆ`Œ©d_‚`’t@ÿƇpéÙX‡SNb>^œ?Mq=Il8jt2o‰=hO§W=ÓñŽQŸuðŽO|ÿ¼s‰]š‡cnkŒUL?—ž<ʵoγŒ‚ŽykiuL¹¶nœ‘xhOq8dFu“T…Êhm—;j¦B”‘Xƒ›sMrKUX!„^<f‡He‘QsªSh©BnŽ=x”@dz6jˆe€MgJ=ghB•¨a…Å[Fš²NŽ»dz²NŸFz§Hvª]¤Œ?h¦lf^"Œ^4S‘ELY&Te3uJ8l²a?w5N[¤ºi¦Ú¢Su?\a)b‘4a™*ŒŒ3¯ßmÛp¬¸J|zM§ª\ekFmµft|B¿Óc°dKo5;e8HU)n=&o`$li7WrAez;w¦`z¤\«ÿ¦sÄi‚ÀJ¡Àg¼ÿ¥J‹/¿‡}„ÿŸÑÕ–™²d¯ÿâ¨èÆŸƒVn:µ™Zƒ¨SÖÿ·£]zO~Kh°VU‰+o„9Rn%tp7¯Ž’®ï±t…AÐò¬®×—¼¼¢ªá‘›Ü}¾æ„‘·Wi_<Ìsc¥s¬—iáÔ›£°c®†[w´O€¼TÀ§„Ì­}ÿǞᙆ µay„K~„EuEƒhLð¡ÿñ ã­¬õÿ±Ê«¯ÅtÙ¬„tx@\U5eP-?["Be/€p\dŒ<_€8bZ8J+^R+py3xŸ9^‡*Jt5o¸Th‘GKa#DK(Yg2Zy4tŽd›ÄŒ™¾—–µv’¹z Âv•«s”nm®c‘ ™ÇÓš½iƒ{o–¡t¢¬l‹‚M’O¯N†¥p§Â’¶xi£V;J$*04. 2=-^dMzœZÇÿ›Îÿ–†¿P[w5[ƒ9h‰7UcPŠ­xv¥i‰·XY‡7azFg…l®qžu”ÅsÐv—ésYwM€–[rÂj~ÆtZ…MXoF^tRf|b§}’Γ›Ö‹›¹`z”b•¼b„±er‡KBd@8O34N(&:!4EF¤‡¸o€¦TbSo–eŒ¨gu–^wœyˆ¯€¯isŒBWlIh|ZzuLrwOea}¥yƒŠ\¤ƒx™È±¿à›¤Ó~x®hxª_i–OY|Lm‹c„­g–»{“Å–Àñ‹£×m„ÆtŠÌ}°hw«]wœdt«‚€´•®Ú”¼ˆ–°‹‘ª\ƒŒb… ]y“RWs4GW&:^@g•n‰­v‹½¿V]…CNvt€¬m‰–[sži}šep¥t“¾fzŽ?NcET…Y]SRzDAb0OH0IJ0/R/;5+U<DZ,NQ3NY(EQ+WX2fX.hv?ttEqrGzvJ‰gS^‘Q;vk<O]SB0nO(ldB‚XLw\<oeHx‚Nr‡LurFn†XƒŒS¡’Râ¥\ÿÄ~ÿÿ›ÿÿÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿåÿÿÿÆ¥ÿÁÐà¹Ã¶ßTÊ«)}»-',A!Z65V:V,#-d5018605D"1C%#9! +H-LQ&WY3]p;WjASa-@n>::/1*h+\p1MkG•R%ü©Aÿÿzÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„çÑ^’fwUE•”Ba‰x®9rÅhj€n‹„L™‘\w_iƒgh˜G˜yI{‘[Y{X^|Kkq:I…XcfDfIl vx‘n`kX^gA[g7UnAay4^kE?r2NT'Vg2P|GMi>]y?_m:m”Peik_FŒ…I²Ïp˜ä¥m¶op“LUŒHš”A^|uc_HOj:cl2‹ŠF—šob«W„FJu7,:Bx\&ŸÇgt•†ztXf‡pUNCTQ7iWAFj@QR#´ÅR…†‹p†`©‰PPnbOa0Et?nd+~—M– bð†OŒÜÊVnẄCÀؽT°†1T.[_'It@rw6‹Ñi†jKj›mchOÁšM_à½Ta2p}3°»c‡Ä“¶Ò‚t…hpƒ=Zt;f…=:^7I_%8U ;IXy/khB‚‡Og Jg4tN[9’‰Rl»ƒg‹4V0¦Ô~¢Z‰°{wŸe‰”Pm£L]{>}{6}†O¡I|ŸY¬yR’¯d] MKO)Bx5r|>vy4a‡;jjJ˜§rtš]–nS}ÉQpBJATY%–pP¨§L§¹‡ƒOQmEs˜G™¾h‡Ïo½c„Ö•L—>;`#]T+x;|f9ŒM¡Ï{zpC–§|¦Ø—±ëŽŒÄ‡^x<гdÿÿ“®ÿ’”–Aꡈÿÿÿ¿ÿ¤£~LîÿÊOEYK4œ¨g¥»”bN-ÀpevrJ™˜wµ¥‡€ªY`x8Sj U{)Jb!ƒƒH˜¿{ã乪ןހžÙ‚¡ò‰†¿q“ŠbY£B~fDÁ¸q½ßxÁÝ’˜ÛtbCiyA‹X¼›y¯Œv·h´³w¡—lš|S™`’˜T€yMÃÄÆ¾™ÿÒÃáô´Èÿ¹¯ˆÿÔŸÑÀ‘V¥=Ko2V{;Vq;q“TXŽ:HC,“eaP2Hj#RT&o“.i›.S‰S±Ä—–±cgˆ?Hf+jnEfn:¥sÖó«ÉÿŸ€³f®y’Šeœ¨“¢‡Är‹Ù’µå‡Œ­Yax>GRB›}d ¡s€£aŠv’¿wµÓl²«‘ÐÿµÌÿxK’5wjc‹¹aP’>EHo¶Z„Äm…ÈUT”?\}:Gp.JgW“§g‚¦\f>T~-Pm=j–9apAkTdœV¦³š¸Ë~~–]‹®z¡½~™§aYpB\€Ll›MUŒYu˜…­°Œ \VlIjœck›Z^€bdš‰‘Õqd¢GS{6@]0GiA`‚P^zALe@f‹dužkx¢^]‡UnŒlvŠ[€—`x“Tn¦^s­^~¤Re}O|Ut“TRa@lxjy»”ŸÈ‘½˜Çx–¤dx‹Lp^Š®tš³j²dt‡j‘¢~›t†º—½Ž¯ji”cYŽu–ÊŠ¹…¶}†¸wyª„ˆž`—’o˜›nSm;NW";V>IdPPp[p–x†¬g~¢[Yry™`_ƒaemy«nq–mqY_mJPmVc’o‚™hj€\]tHU]:Q_8=Y6;E/NAAY$HM0[Y*^b2\f6Rk@abANoBZaLgT6cW?AZDPDIWM.T]2S`<ZT9rM8gX2eTB…aGœ‡V£•U¶‘eÿnÿÍÿÿÿÿÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿÿ™Ë÷† {‰—z‘š`¤¡o˜«g6į%AkB#Z6*WAS*&5i'U>KgW$Br/.O1+""51;@UF)gS,m|=BoE=IJVF+FnB9TA==&;G$F8!œ\4ÿÈMÿÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•çÝx„a›”kq‰hQh”R[‹h³†F\•[ohC‹l7q_PˆYc`=cT>½ŒUTltV?GmO;Q<nF5fŽ]tD|uv¥ox˜J]”vKwTJi1Mb1LE+Df.al.ln?NyXz[3q“_G€Tak<›{GŸµtŒ§u—al”Q_†J…S>]vGYAZ|>ƒt1Ÿ‹^Ã|TM{Sop1<H?n„3fmTQoROƒCg~;A…M<Z/l_'TS0tC;‹xPÎÿ‹S«žou6nýo_u?d?RŠbjr/¢”L×®oÿ®}Z‚–ŠBI~^æT*nÿùYZAxŠWxsB¹¢V›­{cš€tz=‚BГQÅÀksokCYvB²›Mm„gm9‚z;|©UNe=`j+Ho;Hc9Ry+=O!Gj*zh*cw?mˆDd7užD|…F„ˆ^€ÁcÚ“B±ÿÅ…IŸÈ‚séj—9zŠ8J˜Lkh7Ve2z>rI_¬hu5©9tÜ”~KHg0Wh1cx7¨FqÂucoDW\H‡oE˜Ç¶îŒvÉq™bE§VŸ~`c0Œ8•Ä[µÈp“䈲±w”Òy‹ŒjŽ´_—:v„p}™C…c—¦i@¹]-D”N/Êÿº­\Lx'‹HÖ¨vÎÜ‚Ôÿ«ÎvpsCñ—ŸŠÃk£LŠF­ÉWš­h]‡Ckr7{h9™­k—Ÿ`ºÐ€ƒShg±FŒ€RLj'Hk(qiCˆyhŒ„k¤À“’hp}…W?_g„6އ`¡‘hÄÿ£¹s¨®jËŽrk];š–jvHžŒi¹šo³«aÁž{…MÜÒŸs`‚_H’jLª sÅí‘ÿÿÿÿñ·ÿÿ±Ôõ“ÓÂ…—“h©ÒyjŽEgCey<m„QŠÊ`z…cbˆCB@(¯`U`u+Q}'z‚]™ÓŒ¦Ý–Šq„¯yr’MD?,€LCƒ­`±Ò ñÿÂ{±Ih`@¨ˆf‚l€wV„q»ð¨³Ór\…;W~AMa4}b=pN£€jšFIn)Nj3L_@ØÜÄÕÿ±Ó÷±·öw¤´““Ë‚ŸÐŒªÒˆÒ†•ßp€Õp™»v…Ô}ŒŸ[u¤fxª]Z–KV–BV:i‹AXn?lPUT2cˆjy®dbJx¨`zºi£Úp}Ê]a®TÀ|¥áy}Æbe®S\©c™Ñ‚–´tz›Yc‰i›½ž®·w‡©\Y~Ng“Wc–NpŒGOr4^…Tw¡oŒ¾ƒ‰·ghcu¨aq€Fak=Ia={k–±|—Ïw{«ZYmCaa8Vw8MrZ„šo‚žby”g‚“GWv9@U0Ie^Œ¡k…‘[h‰EpTq–q}¢zФŒ”±‹Àu‘Ï€ŠÅ‡‰Ã‡»uy’Xc‡c£h”Zc„GF]G[uUkz)A_'=[3EjIV}T\xZv‰bŒ”a–nz•chŒfpœwq¨ksžX_‰PXOTwMWw_Z}a\rTYmT^lHYsBFl<LQ4nO(Kh*AS:KQ6WJ/UR2?g>SQDCa4;S5KC%MQJX3WB7eM,gc8ReHJTIdL4W1´{EÔ|_ô‰dÿ™oÿ ÿ…‚ÿÅÿñÑÿÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW–éEE”N89pD6x{KŠb§ŽVI¬n)\<1$ZD7\?iL5^€/ldcfS/ld:P‘;,tG320N=Na1Vd<jnGrvKX‘NGx@aO9‹Z'{v@wn[„g@ˆkCÿœAÿÿŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿÿåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxÂælqy«r3_›yr~N_‘Gs}MY|Q_h?MSD¢T,j®Nr\mSJ`O?k…FRzM_Q5<C5DN(\Q-TˆQSO3tU0v‘[aŸtXyQ[†FAqAbh(Iq5BX.[t+HsE>K,KY)O^.P?] QÄu?Œt‹ÛX_°\>w9CM'eM%y~H{jKj–]YiA™Y=Y—P¥w6rˆXXpGdbC†;sU†“ef˜spo;nm-8ŸWVA!TY5ÀO,¡ÿ±f˜}Ê\GLˆ†ˆh.‰pQJ‚Rd](¬g;ÿ¾{hÌšOYE^^1‰eF{^;ß crÆ£]§Z£ØQ¾îƒƒŠ†i[Jnt7†”T„ƒbs¡QMŒ:…q5d~D–GjŸaƒp@ЧV*08R Vm/rx<k mvˆ\J|D&j4.&s0"‡›ek±Wy’<rŠY«‰@‘Á¡u°^Ìžs|˜\ó™l]Ó­a„7LL'[:Yh-Ps9ls8x‘Wˆ®oižWqK†·x€¡VyƒBfg+t·QÀ³}~Á†Hˆ3f|<PZ6‹qC¹¤ˆÄ÷®z߃ƒDˆŸež‰6±©`íÞ„Êáƒêç¦Ü”›ÀvhšVz…\tC}^4…nJƒB}wTb…VcC.¬—O›pfX±tvq>—Ìe€¼a™K;‡¦tŒ6,\kBÔ~r•”^l³^•{OÁ¿|±½w„˜b­¦gì°•±§o¨²±¸³ê«qa5П“‚¾Tbj;Ra7=H"BJ)yu:12BAc/AMˆƒ\©¸‚ŽÇjl¢Fzn@~qLÑ£…fo>²{bË‹y¦‡bºeshCš‰X‘pZ¸²}xXAK¨»t¼µ‰Ð£¤¬ÉˆŸ¶ÿÿÿÿС¤Ý|­â’š§ƒ¼ü¬£Ô‰~Àdn£Z¤À~ÕÚ¥ƒ•N]j2^\7}˜Eq¢4HD*v{Z^}:>D)lZ;_V4RT-jQF`“M·Â›øÿºŠÕTTo7Vt0Cf'LW0kxk¿ø¥‘Édp–C¬À|e¤C}C{©Kn‰Boš\Q8Ox-@I3j˜äÿ¯¶ã¥µè“³Â~’©_k£e…¸rŒ²|’¶¡¿áŽ{Ÿ~¢Ò€ŒØqá{n¬i”¨szªMo•LbI:K#9H0[’`q¬duŸhœÑ—ÿÿÒÿÿÌüÿÇäÿ ¼ÿÐÿ¸î•Ñÿ¨·æ›Çð¨®Ä€~ `]uC|‹IcLiwNkŽn›ºz‡±UšL`‹Xx¦cn™YnŽl‡·Š¡Ù†•³]^q4?d28d5IeO‰~_‡ª}’­jŠ«Tj†@n•WušXm‡6Sv6Y@`‡>aEbSb›bc^v–hz•F[wUb„[gŒ^g[x™s–Åz’±v‘µ}”µ}€œYSz;K‰[p²^wi…¯es—Rw‘CWk2Gk,E`?GkLWtGVpLib5+19FVFZnQVv~¢®w{—^pŽ[e{TWyQ^_ibcWa}_glR[pHMk@Sa<^_4Qi2>NA:N3\</i^)Ux;7uJ$M69/)r;šs$pœAQx[MVJQP=aMA¤WGÿ{Lÿ›]ÿ²pÿ¥Œÿ¼ã±—z‹¬cŒÿZUÿ·}ÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÿ¦Œ±C[–"-b33s2ly/_…_—|NŒ…M9”jJ?J]I&cbCœz?`½[;‚3A,d7—g%z£YN©{e_KnnGjlI[lMrXKsxFG‡OfGOif*gsCdm?ÍyAÿásÿÿÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÿÿÿ£ÿÿ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ<mÀ\MC™{=‰µR{•}bžRyzTd‡OFM9zW-_ƒHuŒIRX\gI6YjEÒk<_¸O_N_B-:mF5?.Pk0[{<@gLv.ŽLs›oh{\f„MU‹TYsDjj5S’J‡„1U–RMa4šl8RÀ^iyIGd@`X1€®H¶z[uÀ{i—ROf=7Y2^Q(ej5M~J]p2GaM[U7³y1Çù’IÇšEi3„0P³_jd4XzVQe1Q‹<“v0ƒÓŠy•Oo¬iàhŠÿÝzŠ`„Ÿn]ˆN…u8dX<TAR](pq1Õ|Bh½Žhl<]{Jso:aI¯›>X²ˆk|<—€>ê~DP‡Okj6~‹ON„Q†s;i±^\„IXvJµ…@p}]m‹F%D7.[&\4h•Vb“Sc_5sŠFRJi\8S€=M`6‘j5fNIlˆ:…‘?­¡r§šx‹Â¡f†>²™`ÿ×}Vµw|s3Zªdys5„NZq;„E‘ƒIz°€i‘:lˆ^n¬am‚PÿË|ˆŠ~qš\Ž?Ãæ|¦÷½ŸÊ—U€CeLŠ—SÃÁ‰ïïÅãÿ·½ü•¼Îƒ´å‰³ö›ˆÓt©Ý‡¾ÿ“èœËÐ{cçx“tQfÀTZ—Çn‰›cœ|]‡Nf[;ja4u“jµzV¯‡b² kÐóªzÿ•äÉw~{L¡vH›¶d£Áz’±VÓß“xsC÷¤‰rz=‚•Z¢ƒaxxJšfXum@Sg5›‹vÉv™‡P\V5Ra7E^1bxMcgLBa/ˆjUBW#fW3[K–¬€¤Ô‡®¦lz]<oE‹€Tla@Âú–Æÿ ÏÿžÁ凈fK £c‚¬]‡´PŽ‘_be>UM5•Z{nY¢žgÿ£ðÿɼü¯Íˆ¸ïx›`„fd˜»‡‡´p±Üœ¥Ñ‹E4iUCeS@ia8cf:bA´·„˜Ó{›ßkkŸR¿d…¼_©j¤ÏœÅ÷°ñÿЦç~¢œq°¶t…£\`}?“m’ši~Š`¤Ãq˜ÔeŒœ^bzA€™T Xt·klŽ][M„±p‡Í€¡¥v›´}½è‰t˜Vt–Qz‡]u›F\ŽKg‘xÂΦÀ}’·Ñœ¬Öy‡“n„¥q¢¼ƒµÙŒ·æ¥¶é~ˆÍYl¿[t³z‹Æ„}Çyªì·ÿÿäÿÿÿÿÿéÿÿÂáÿ²ÑÿÆö¡Á×— º¢q‡q¡žgy«Lbœ8^:JqAg‡c†mf~FZ~PfŽ_ƒŸNOi<PwL|“|—²muƒ[zšhk•XXHEk@gzXle{ˆWr…JlnO‚¥}•Ïj_”9Cj;XrGY‚_o´r•¸mˆ§htUkuJcxGqˆ_k˜io£e[€VbŽWavEHZ<HSCS\IYrU^”eo´‰“¸nˆº–›Ö­e—@P`=Qw8Eh6;Z:La?UdDS_!#8;C9OmPYxfmƒ’£id‹RAjGMnKXƒ[iŒ`q—WmˆOa‹OllWWfZf^Fad8]eE[a8V^>TM4uU1…ƒ9‹’WMk*cSD;/^MŽm-¬‰B­ŸmÄŸvæoÿˆeÿ¢fÿ©{ÿ©þ  ÿ•‘ÿ¦¬Á›€Œ¢‡qxöaeÿaÿ÷¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäúÿ_•Ü)F{"#1  9_9fb7bgPQuJtgAfr5OŠTUfD^=§>Qºy6r{KB2ud%s6¯€J“°ffâKg^TZKig5u‰F{€AI“S~RP[ŸA¨™`ÿìkÿÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿÿÿ¶ÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶êÿ}}£všm”U‘¬gœhª²hQ§ou‰<Sz`a_5XR+†ƒI]cxp?V|DŽ„Kw©jUYuAfCA,*IL+rl5m¥WrŒ`{“RŒ¨Wv¦\]“\c†EqzKIpSMc5Ja6qP8b”BVjVCg5|i&|‹Rd~Ybz9¿}>d—jcsGzŽ?[zFCn:NZ+qa2¾r<u´®—Uf˲zo7¦—RÛÔ}Ûî¦ô»Šà›S¨dy<O¤S•q,~§‚“€Q•¼nq¨sm”dú}X÷ÉupQw–QuzNa}D^K#W~@Qd0[¤Aw„;V‚Omj/Dq@hi1Wr9Ql8{b5\pAމ?–•k¢¦g”ã~‡ŒQœtH©pV€ÃrXœdck?M~EÿE_’“Et8lT&¥ˆZ€­ŠT€JV„Hd‚>eQDª–HxÑ~ieBxD­œnn‡Ppk<v€0k‹L‹L7XEr™WàÆTºÿ£SŒ@MX(gk;]r<L‡DVc0ˆ€=‚r8f©Ub}1\…=Ž”o¸¦Wzœmd‚Sf‰B¼®u¹Ò½ÅÕ½²Ð¥‘¡xœ§miÂm¤§]ÕýÅrÄÿ©wÉù§‘ÀqÊÞªÎýÊ·çŽÿÿÊðÿÖÞà…µÿ´e¢T§}šÈ€»æ“µ×uš‘[¼”cu¸Q‘œG ±b‘€Mq†CΫ†±‘vÿãÂÐw_6°ºŒÿÅ‘½zYŒ°išB’~PˆyPg…=|¥Wb\3hmEzb<lnN=x+IV=aH4xÜqWL‡L@O\0FO-Um;Px98>@E(fP:vmLnlVf‚S¤ŒaÆý©§ÿœ”ËoÇñ£úÿÚëÿÁ»öšËÎìÿ»­¢^®·n¢·]”‹V…uFi[AvˆNh†KMI~YÿÜë¬È…‰¹iþ߀²Õm½Õ|”±y©ì™œ¹‹Œ¿lYK+bS0ZO6-.LK/„ŸY…“]g{;`^<|ˆT\n<hbA€¢dÖØÄõÿÜþÿóàÿ·yÛdOZC¨dqx3v–Q†©Hx–5V†,p…IyNrŸX†t¸ÈŽ©¼¢¬ÐžŒ»£º’šÓž•Øca§d›³w†­q†Ÿd…•]sŽI`‚N‹³”Äšz“KOpNl{SN_+=P8foUYƒ?oy]¼€ªÁ{£Ë€Ûv…®€Î§ÿÿÊÿÿ¬ÞÿÁÿÿÖñÿ¹ÿÿéÿÿÂÙÿˆŒnqvYe\Rhn:Da,U\Fm›Xg=V…LaEZ‡>R~ABX5\nXq“kt§bs§Qb:Lm<SbKp‹w«„‚§^VxNgn>jfeµ¹i„ Z_9OjGhˆmŒÅo‹Èb|¶HAoAcŽt ÂƒŸ»|›¹bv”IbsHQeNs]bsRjhp•bg†ADc+<R)3R2H[5KsZs®mx¨s|¶†Í£·Ñ‰¤Ugx8?M2@V26L,B^8C]1L^6[e,=L".?/AXCHcS^hZUerвyˆ¬Xf_e™e\ŠS[pDg‡J]€?|cGv_ChYBa`4dgA_a?cj:`sFiIxK`Œ[;le>ISPH3Me2hf?‚n?²‚Yå¥}ô”ÿ’„ïŸwÉ£Žò†‰ÿÿ¦Šÿ©ÿÄ­Ë­‘‡žÐnzÿŒ~ÿϨÿýåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×ÁïP|©+Al$&6&'  7 H7EO2RJ3MY5PbA‚]6ƒ3s£`“u]‡šRdª‚Ch_XJa`+gX<q_B™qXlcO–~T_@|a+…¢T|¢fm‘X¦‰TÿÑXÿÿ°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ¡ÿÿ®ˆÿ﹞˿cyŠƒ|Lè•EÉóy¦“„{·cªµshšpŒ~>‡œag~\rzA‹mPІQb”t{n]P_<O^4KX4S].ŒrCŒ“`–´y…Ç}vÀmkŒeu‰ViœSn\OSf8a²QVŠ<Y}=\s=L…H=[+[Q#Uw>_hA¾ˆ-pñ`wDX7‡¡JR€bIK3Qq,[o4h…9Ø„KZÿÄSI>«Š@ÔØ“Ää¼ÒÔºÅû½–ï„­uNgQeW*T{JrR8šŽFWƒ‚qJ5ë¦KzƼq`;bZ9ms@Rt>jh'Lt9tV'L‰Y\j6Ty5lƒ=:hHcP#]x@žf>›j~¸‰[«Uw…CŒ†]{£v cP‘ez¯dkÆbe¾Yc~:euFÿ˜Oy‘h‚—MuqJ{–XpW_‡FPzNYk)^W/Z?2|‡R`q:‡rAÊt‹‰P‡~H}_oN}‹Pæ‡7±Û‚¤ RœÏY–?‡•Iž£YMBNy>a](€“XÓ’Mq—<Ÿ¡V„˜T°­bv•x£›I‹ÀXn5dF4Ÿo±³„·ÚÆß¯£ÞŒ¦ÿ·¾ZËܮݨ§¨k^Hž‘_´ê±ÿªÕÅ{Ïý¼Šó®“¼…žÊ‰Xb+sžYëÈ|Õ×£ƒcqG›ŒNЭ€»ÿçâ™ÿû£ªfMv+™I’È_ª¥kdˆJ~pÿ•pYk3‰vLŒ}L‚q;Ï…Y²Tv—Lc€JqzCqqD‹£`z¯o<W1QB-²tk‰gU\cJ72zcCVf;On1)$<S)D3#aW1R5+~†Tk»W¶¥†§Ò‘¡É€£nºäš¨Í‡‡—cÎØ¢Ýÿ“¤Š\™šY’‰QЉ\¥ª‚“Ç’­Ä¨ÄÓª„¹^g}R¤ˆ‰Ê狳k’¯hÑ×öÿ²·è¤«Óžw¢Su‘YÚpp½Kf¬?Ys<€¤Pkœ?i‚JE^1bcE]p@_@=dgI|’R„œy’º‹ÿéÔÜñ¼ÑðÊ­ê|u“Eag)f}/at4JQ%ZQ8Sd/}uLo†WtWml”·“ŽÅ|¾qo§zªØ©¢É‚m¦h{·iz´tZ‘GO|1IW?²•Ðê¿­Ö€d‡gXƒ7Bd49N'6B(U}<KV<`Sz¿g…»gŽ»kv›cwc¢ ¢úÿ©Ïì‚×þ™·ð’öÿÒÿÿÕÿÿ«‹†4Cc;7X$432jx?Oe/;Q9d‚IU‹Clªmx’LfM\šET„<Qi?k”m’Äodx=ix<j€@xˆP‚{Xs†\clH=J.,=!1Hd·È¹ƒ¸XpJ[zVdag‚bn‡NIqKh’j}štŠ­~Ÿ±fi~DarYƒ”svˆSJo<BhDHqVkŽGYr>Nq9Fp56\39Q=B]KC\Sh„tŠ»ž»wŒ±nw¡MNl#1A!-A*?I3Nb6[f7WS0NJ0Of4Cf7FZ9KR9>_yª…ž©b}˜}’Å}—º\gDa‡Gf™A]T<f[9jW6Tb4rY;Š^;˜ˆFu–Xj}YfV\†\TtPRg@n`5d™Ff™a“w^¶“Qè°wÿž‘ÿ¡†ÿºˆÿ¼’ÿ§”ÿ¡ˆÿ§€ÿ¬Œÿ¿’âµ™š›žÓp|û–{ÿ¹­ÿÀÂÿíæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿM”³)7y& <!""#0$:7<F!KD%XU,Oc<\hA‚Z8{€E…†\”Jm¤Yv`My^WY8eL*\L+I\3‚H>pGo‰_”ŠA–°Yo£ƒçz]ÿígÿÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿô‡ÿÿÇÿÿáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿ¢Ïÿï”ÿðÏyŸ°>orc`,¢Š9˳]tØŸŒ{b™­`ʈŒºibd\uFKO@pt3acT|GŸž`vœu~`H]{OfrC|v>|ˆG9’t—d5ÁuVžVf=_wDLŒH;Z9ÈV$Z˜[[xBjd9]„W;h6AW6aT Ž`>a­`q…;w”N¥£`{¡vKjO8_0KA'fu/kk2eb2vh<i Sft_~“GÒ¢f¶èµÍؼ£Ð´{É K‰a@K&EŒ9_?3MT5…z.P¢pbN0ÔÏ\u‰—|g=‡XAˆc`tNl{6[©PxW/›[Dʾd½ºw¶}ZŽXii5âkHrŸw‰Q–ÝwÿÛ{š²¯Z€S\O'–¾S£Ž`ÏÕ¤µâéҟ§Î„“Ì–£°oz¹[m‡RXn8l[6Âb9Xq@”o7prIJŠLbl7`S:€d?­Ímq§n„Wvj;hˆUNŒ>d‚A‰Qf­U¬](‡—_M~Bkq?¢EM|7Ot1nƒ9Ãs>}›d°‘=•œvÔ¤ƒeªz”³s­“W¨[hŽERO3:E%}jCÁ¦ ‡Ý¬ÿÁ¤ÿÿÿ±üÏϳe§ïÁ^¢]k¤c‘¥WÈÕ‰»òœÄꛯӯâ»È֕ײ]ßÿÞˆ…Lv{Lj^3‰„=}L‰šfÓjGÉ ’ŸÄp¡°luQ2yŒF¬¬išVfV-~`J¾skÁnKy7Ij+\d7‡ŸcŠŽ`¼­i~¦cn}BžhÓÓpFpg9b•Kl\<Sc3OU=O+&5/I6(Kb,GD(0R%’ŠeQ,0L9#vyS¦Ë‘xšj‡hifGhO™gh}JKZ"q‡-´³m‡Oo‡B‚B=­¯l¤î£õ›Êÿ©©ë•w O’‘F¢¡WÈ­„ñÚ¯¤ï„¨kµ°’èü¯Ȩ̂•£w{‰^ij=¯®ýà™áï}…¶V™§Wu„Gh…:\?ˆ k½iu²\c H`ŒGfrO’¥c}¢e”Ëtµt¹}iŠ>[y@Jb)Sh,8t,‰žiFa*L^@~ˆWW‰Gf‰`‹®o‹¼‹‰Ä‚€µq†{À†ŒÁƒ…½z€©†¬µƒw­X\tLºŒ¯Ôš}±Vl–rm–[XXPr1:L9e‰=K[@w‹j”Y~aužNh•MLs=VsiÑà©àq­Õz½ð¥ÿÿÍþÿœqšHHy9r–rž¹[®_ Á\†¡d~±RUˆFh¢i•¶|{˜Kvk‰ºrn£ICh8QmR†ªW\™8Di2RdGs…_jŒRc…I:`-/G.3N/B\vº§‹©´Œ˜·kq“a‚žViš_j¸e|£B[€>YuDa|IqŠ\q‡MZ]Abkf‚›v~¦pyµrrªa`—Xe’PMr:C]7UnCSn<:n65]<9c5AeRk–t¦Š—̘žÎy 9>\)?N&5=5NiDRe8PW2JMDnG^‡HSqGXlLYuSUbD?J0=QUo•|»oz¡\z£at°Td`BbhA]b?[_2fP9Z>{„HW|des[gnMfsH{qGƒ€M£ŒP´`pª‚„œƒ\Ø–dþ’kÿ†ÿ´ƒÿ¸ÿ»žÿÅ›ÿ¾¥ÿÇ‘ÿÓ–ßÄš¦‘ÆpoÚxbסÿ—¦ÿ¨¤ÿÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\£Ø!9›D '$+)$*&.$*0-+..2<E;SO&YU2KX>JaE~W4‚€@}˜]gŒqea[aqCeaFvJ4|N3Œ{;‚‹R‚ƒLŠ S¨]š¾ÿÏ“ÿÿ”ÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø¶ÿÿÕÿÿðçÿôÿÃvÿÿÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙçÿÿÇÇÿÿÅŽ–Øbiƒ:_G_Z$žz1¯¹O¤³yšv’~gŸZi›uZqIMrJo^4‹}Nn°lo€gsŒVœnRzs\¤ŠUxvˆo«UNƒU“H=€—L\–‰^oLQ[=`\-aN7g‡AQ‚I‚‹9U¦QYj=_h._oF€‘:w¥\s˜Y¾¢c‰é‹|Ü„{Îts¶eg~RBr1AV'UQ,Yf6Ui3La8lU-ži=undF¢­Q Éšr¦‚‚}[]Œj]¡HbkAKmBX—:mW9v¡]B™fg@$°èmlbr‡M7VNK‰s>swHÂIJŒxX6ê†9ÏÉ‚ƒ¼œƒ±Z|Ûv|µlox8s“L£’[„¡jcs‰[†¬X¢Åfˆ²€œ€X¾×¥Ãî“ÞýÄÂ乽ޯƟ‡Á‹hrE‡=@e%9\#>Cj\#?U/r?'O“Z_t?hQ+¢v\r­gŒšIª–Zl­ru‡RBB*iÈ]l‘(‘¶K}bBk¬s¸zNØŒc`vJlj-n‚K‰”O¡o$懲~c¯hU‹o[¥–‚†‘ƒ¤­Ž‘Ÿk}ªqQµ`DT%pJ-‚‰cíšdÿÿüéÿÊ ÿÀ…®]‰ªXgz?{€F©¤¥ª®ŸÑ¼~’SÆì³{žYñé“qçiƒ™R¾…`³ªtÒšq‘–LZˆKY£>u`BŠP)dk3eb0©yc“ebV, yTv“SKg1hb0•qNj‡C…ŸQ¿ÿ¶¬[¯—`ŒÂsÿÌëe:Sj1¤^qc:”g]‘L(%&*X_?SD)V´:Š„D†«I†eIyU5…}UŽ~Uuei±_WˆAZv;ކUXg2Xx2Á¥[d¢9[a(PK0‰~[·z}µ ‡‚gH×m²ß„•Ûpäñ˜¸ÿ’«ç€À¾…ÿÿçˆTŠ“_…ŽOƒ„ki¬N9‚'k32£_™žeŒÃ`„€JyCcP9¥{Øï¿¨Ê€y˜Qˆ°gŠËed—Bj‘D`‹9Y~;|™jÍÿÔÂïŒT7suIZj*X„3x™V\‰>Jc2eŠL\xHbˆHdŒ@czQ{œwˆ«{®zjÁd“®ˆ‘Äuªl~¦go™_b8FX5j€z|ORbKl‹eo†a^ˆQ\J\mF_…4HX0KP2kbIu‚W„†Wvœ[k›y}®‰”Ç{‹¤P~Ÿ[вs¯Ë’×Þ¡ÑÕ“£Æ_h‡g‹®r”ǃœÄn•»Š£Ú‚|Âts¸ng¤ciŠIcgƒžeo…Lp†Na†Ss h›Óq{±ac˜LZZp‘argn Wh…QKo=4UFcyj†¯‰«iq›i•¸±á£Ý䉞½NR1I{1H{8NE@S0L\?\ƒf~²y‘©{‹ºˆŠµwz©uv _f”JQt5;\CV‰]o¤Xi¥eg¢OV€Ia‰Yk€‡œ¹šžÌ–˜Èoo¥G]Y(C]@a€SoC\jDmvPqŠXt‰]n„ms¨yŠ´N]o39T11Y<Lsb˜_xŽ_|›l†²je[EdcDi_@khC{^?{C{ŒLtrU\oHHZBRN@…G.zi/cvLˆaXl^h‰[rZàcJÛŒNï“‚ÿ“uÿ£…ÿ®”ÿ¼‹ÿÕÿÑ£ÿʨÿÛ¨ÿž§¨…·mn™‚^»nƒÿglÿ¢}ÿÚàÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõãÿO†Ð!C‘B  $(&0'&=.,$: (#**12&;6. c@„~9iœX€fOfMX}fGhWDM+YI(XI+vK3©ƒ@ŸŸZŸfš[û±mÿóÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿøÿÿïÿÿÿØ×•ÿ÷˜ÿÿéÿáìÿú{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÿÿ´…vw±X<viCCFC?aW/‚u,˜–<š—ll¯XctbgrTlbIrh;dmB…rO‡Pº·hšÈ”z›ƒz_bhtHƒA9v~V‘›VMŒr<XA\M$Ö¢=ŒÀŠSŠ]f‚A`‹2r?j“TsnPWqM_f(\uCE‚;_Y+h€,6VHTQ"Ys7‰ƒD­¢e½„½Ÿ™f§KžXYh1Ae.In.U]'Cc;IN(—s/A™‚‚Z&±¹]p¿V–jXx=\~8a{C]mFÍ€Fk¤tl?CoÀ[EŽc–V1²ÿŒ]ž`‡JnpD|‰Go‡_|C’f@TYmV-¤¦Rƒ›n­š]n{a˜EÞì‚x®~ŽVN€Y’e&~‡gĬe´À”„ËÏÈáø¹áüÆ¿àÇÅÞ³ŠÆ›ª™s´œ[­ÈpQ¡c®ˆ:_KY•>PW)Nb.@6#o>&ušh_t@b‹=…rG‘³\p©W˜|Mj¨q¨¡W~¡hu‡5‚©n„j7˜„N‡Nbj<ff.›WÆŸfŠwDju;‡zEc´Vn§Z¬II£™ˆ^aFdc,x Y¯œc»â™´ÿµlÀm>a1tLMé~tÜô‰ÿÿ¹zÕ~Z¯b2Q.”nKŒ±l¯ÂwxÃ{×®x¶½n¨¡€Õ׊çÿ½ÕÿÒ¡˜l¢·s¶¤f°’eÖ¬k²ò q”Nj­7¬5ãÿsoÿ[`—P„VDW>!h6$zM”‰Vr„<S‡2h;d€Aª™iÇ笮…j½‹€ˆ©p£™fŒM­ˆfŸ…_mK0`…<nlADG+ER+‹Œ\œ®K~›J«†U_‰@Õƒ“ŒÇ[v‹Tz]'p]?—§€„ªt{°UoŠEаdÄiÊ£gql6vJ6{vMOM1J2&K?#U@2„hN±Û…Ôÿ¶Ëÿ®ÁÿŒºÑ‚æpµ³´æul£L‚L<tŽO¤Ö€­é{„º^˜µkÿøÉÏîš”¦i‡Zµgu—L‰­dŠª\o¡N„‘dÀæŸÓOh›D[‚5e˜Ao¢fïÙÚÌÿ—uÐ[bŒBcŒ/m—H¤¦‚‰¬Wk§^ÎttÁXPq/6R'=;'Jg=OL;tŽu•¼j\}iŒ½v¨efƒ\cqERh8o}j¥fQ~=Hb=ES;Oc9Po<RR8V\AWq4Z}=nxH_vA†Žd ¤[ƒˆ^ƒ­¤Ÿ×³™±qn¡R}¡i‘±t­Ä˜¹Ûª½Ö­°ò xÉbw£]s”c†¢`w›j’·Š¡É…‘»x›Re}?\vIg|Mgr7M_V…£f¥i ÀŒ­ã€žÍfs§W]kDa^Y~}i›Å†²Ú¾YZ„s‘¿ˆ‡³mm“iªw§°u•¶qš¬n’¨p½b¬v–Ðzº^q­mžÓ~–¹ab‘MTeKR`Rk…bt’Yj e_E@U2LgOTz\u—wl¥ppšVZq?FfXk‰˜ÃŸÍš¡Âhf‰CWOub‡£\nPn…K_rHea‹«€žÀŠ˜²a{šOf†R^ŠLQ}NUqJVmHa†^z¤thQ=ƒ[8—i5ˆwK}nWloR_jPOWE9D=2D478+G1!k:!tM.€h?xmC|RoƒN·\FÉvAâ…iú’vÿ¡uÿ¨ˆÿ£‹ÿ¦ÿ¶ÿÁÿÛ¦ÿ̬ÿ˥¶¤yŒWZÈQHÿjnÿŽ›ÿÿ´ÿÿÿÿÿÿÿÿÿ¬Àä>c¥A;iOI10g9N?%("& $ 6$a72T(G9/7V$F/-**?!4!.&UC†m Œ™Dgi|{fo€CZ’sCpJMK3YU*rR4nY2y{EžmC¯ŒOÿ¯nÿþÿÿêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿÿñÎÒÜͽ†ÿÜoÿÿÜÑÿÿÿ±]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÝÿ­o¯•‰b;ftA42`C1623RM.I\+eR'cPH–oKŠ»^ˆ§qi˜seqWsoAŠsM¤Œ_‹¨_y“qmŠdDjSuE4_dD\rC—ˆS_Žj‘^>xxFu}Mwl< ƒJ”wf|W–‘7“•]‚„[>uJ6I&š@E†_N]'A‡<bY5xŽ<uÆZŽuTK|UJY+\a*pnCc†DvyEN€SNk8S=T9[„EiF‰¥RK°wzl<´sC’¿W¸„Mu>Iw6(]5`;¨•Xd§i\j6†ŽAsh™t>–¶x­tY‚MiG—QP¬uP|=Xl9U}D³r1a„tf>Y€@‚h>ÿƒP…ÿÛƒ–ZFŠY<]$aa"œ¶k©Ø ŸÛ£|¬ƒ½ÜšÈâÄÃ뤟ñ²±È†²xˆšaª©o«½’tyh±||ØqŒå°ßóíêðÿÿtÿßT´Q}ƒ*N±hW®]`‰A–—Ov«}€²p\”XšÇmc\tf1d|c|iEto=d~<lrJšiTtNqk<‚C,_e>u§U¶ŽoLp¬C$Ÿp½“x’™i»z³k¹µ‚•د{¾v‚¥gz¢p€•kºÅ`Ÿÿ¥{Ä–:T0l¼}ª¼›¤ž†È ŽiP ŒnÓˆ”¾ßÿŬ뇱g˜PÿµvËùž›z›‡T‹„Fÿÿ‘ÿÿÿÿÿÿÿÿÜèÿ›ßÔ¦W”w9`u1]g/€‰r`}Ep{FŸ‹XeGÖ¬w‘Е €[ȹj‹…W_òĘX»j‡­WŽŠXj‹M”…Wþÿ²Ž¶zޏr§Ñ}sM3fW4…‚]±ÕŠÄÒ«Yf7lxD\š<WP8\?@{T=toNˆ`zwCod2I8#W4)<3"80G7)W^5¯¿‚éÿÍÿÿÕÓÿ³Ùÿ­ÚuÓ–…ÝÞ­¢¥jÄ»zˆf²Á€ Ô‚§Ò€¢ßz¼ÎªÇuž^~…S’¨cªª_w™M•¢gŽÄsªç}iN¥³‘¨Ël_–=S|.U~3w‹L¢ž‡©Í‹©ä~p…GP|)Fs$In+kŽW—Ð…–Ò{‡ÍVAO/N?2:I%G]"AX0f{jršo^†On†d^‚;OjE\€Dq‡vÃØ›t’GfyL]t4Pr-Mf<Ob-@T(cbLj|I€–Mœ“ahlU„¡cv˜MewO §“¨×‹š¨awŠGu’^€ƒ`”¤„ްpФyÇÙ®ßÚyq>U{9Gm8RnGexYjŒ\T‹N\QU‡DMs:Yr=Rt9IzPv¡i~Ábw­}ºë‹•Ïp‚¦IWi8PxBD]Aymw©Ã}·jx§y¿œ›Á{o—P[u@b…Stœ[mYz©io›}¡ãÉÍìºÉñŸ±Ö‡Šµz~®[ew6?S"3M0OpDRg\h”nv‘NPg'1J(8U>Nj_p”ijw67@)<[KQ‡ˆÄ›—Ï¡—¸ˆ‘»o~šWm_ˆ—dm†WjrHetTnbnˆe}u“ kubx¢]ZrQo„M`…Tg}KXlDUz_OVKzZ9lf7q[GacPVcBPV>Hb1[T8S`5T[:_X6gZ9‹V=zaAlXHs\F}_B³pN°SÉŸuä“yô’oï£zÿŸÿ™|ÿ°ÿÈÿä©ÿâ®ÿá¯ÿÖ±ÿЯµ„”uc—]Rý[Jÿi\ÿ«¡‹›ÔLS¢8:`F71`U1shAk…WJc5u`)E>*$ #&("F%V:4J.XI4Gg.@l:JS,3]+%@/<%kH—p%‹¶bw£leˆbtqOY…[[hPwhAZ€?Ua@h`7yz@ùœPÿîxÿÿ¹ÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿé£ÿÿüÿÿÿÿÿüÿÿÿÿÿÿÿÿÎÞáç¼ï¿®à¹ÄƇÿätÿÿ®ÿÿÿÿÿÿÿÿžÿÿÿÿÿÿÿÿÿTjìzMSIY5S.Qd^0qb46:Fd<)ul8oa6LiBhK,©|3e¦e7E^^/-gg6žl9s ˜gŠ^oƒK[‹MT\FMU@wc,X}ZrNM€WHgEBC,T_*8YDSBi[3of5a‚Ot‰9ªŽKk›nFv=?].MY$e0ZƒCƒs5·bHi^Wg3š†6F€XXS&|\1O‚KIu>W\3j;VhHgs5tŽILkMn?9šoJž¥wÉnŸt™—\S¨“S_<„n;1a=B!fZ-Y€SŽCwRV…j…™ES”XHp7K^,cn/›„9MÍIR.Œ@%”…e™¯]½ÀuŠ·€k¥Wk¡MªZ=ÿ·ns·žKoJCc$L|2 ^$ªÅ•Üê­ž­²ˆ­›ðèŠÕ½§£Eº×‘wî¨X|GYb6PtG“c5k°šfS>IN5©‰I¡Á‹·®u›­‹o­sŽ™P_¨c\iD_~K´wG‡Ã ]n×wq~:[o:ct6~JL|J…{4_xPxyA’´ŠT¬ThR*}vCª¡_«l™—mÑzLùreÀ°¡©Š¦{xˆvsqUP<¤Ç€­xž’ovVTZ,ŠwKƒŒMu§Z•ì‘tŽB`ÃTkk=]{>PY)ˆ iÍÎxÐû–¶ÝmÒÑm޵j¸¢ZŧW·¯p›ˆHššVÿ¢]ÿüãÿÿÎÿÿÚÈhZi]?Vi4ÒLGÿ”•†PVk7¯dp}J…©go­Xª³ˆ™¦p–’PƤyQÎʶ¸šg÷ƒj‹•d‘cHÿä˯™vÉ |dd9fb:›p±§mmxBgwDmA‡®fâɸ–¢h³À‘Ù|@M!VH*y`@v•PktF;D!XZ*MN*VO)iT3vq=†…I–Ódëñ¹ÿÿßùÿÚÆþžäû¸Íò—”¹v\•Rš¡g¥µwÂö¨¸þ“¶ç ¢ÐŠ¾Â œµhz¹Rk†=K[:shH†­h—Ëy¡±w°²xz’PtX|œeU`8OK#V_3V[?sP©¬f¦´sxªHež?l§8Ki,^–G‰Ægz­^šÆr;9?:)DP+:L$Q[AWzB;],M^AKsL_…JWzH`€W“³’Š“YfœR‚šN^q=Vh-ET/@i@[‚E\„^SŠHr–Xx‘WVo@oUx€IWw;nyz€¸„¶coRm“h_¤Xrž{¥Úƒo±Ze›VrµPjžKZ•GU„KIMh„_š±yʆŒÂ…š¿r~¦VaŒ[v¯q„´t‡Çv‚§f‰¥l´Ã¢´÷mLc<z~f…Ãux =6VCZdiž«qt¦tš½©ªÊŠYZ‚Fc”Zj‘JPhT¶z¥ç±ÅóÁÆã®ÅÞ’ª´kh„i˜¸^c„;EM ,N-Vo;dŽcr©pv£d_™IJ…EF}?GnARiGXp:6[BW…e¶‡£À†’±xœq~‘_ns<SjJq‡Xy˜]x—Xl‚QluGd}L_ˆw†¨v}šuŸ“Q`bDQ^@QrQ\vL\s@NkETmIYuAjw@auDVeCJe;dj9j=uQr†XvrXo~JkƒRuoNkjDjd@i[8|k?Ž‚D¢œ[žªp›•…Údiì{Yâuÿ•zÿ }ÿ·‡ÿËœÿѦÿõ°ÿÿÌÿìÑÿËÂÿ³—ý¤˜Û•|‘smkggPH€PA´UA n?tKŒ‡I›–`›©p“°€a³*‹…#@?0+4;6B%U9ICXV9cw3U?ZzCGu:3N:->)5-^4‘\#yžYskVŽdfeMeu<_jNgI„rEz|XÀ‡ZÿÖlÿÿµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿÿµÂÿï©ÿÿÑÿÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåÿÿÿí¨ÿø†ÿÿÿÿÿÿÿÿÿŠÿÿn~ÿ†Gÿÿ{ÿÿóêè´ÿïÿÿÚÿÿÿÿÿÿÿÿ˜ÿÿÿ`ž?ZqJP/gb-=ŠG^B2Šc.jT1¥jC—¢d•’Ux’eorWNY1€g+UˆD^^-R{4WZBÿ^2²ÿöf‘‡r‚<StNRu7zn:rˆ?qŠds“O`rE_~;RK2ld-Op8Df1F9)_f&Uo:yy0jžOhy@H\A@R.EQ!šX'Y„Tt~@UmRH]A†p6c{MCc<JV!Œd.noAˆ•X`•TCk?A]'Ue$]x>nzGNuSEp7OJ'^i2x†DkkUe}U`jXMtDRZ:ZlC]gC[{G`z;~pDz‰_ÁÚth¿–S›K>2Nf%dj(t¤P‚˜Vt¬{pAyC’\¥Ò‹·Þ““á­l‘j¨‘L¥×T¥hEd)?V!Rf!k`%m‡Dr>x€Zj˜q¦„8¨wıužì¶ˆ•cU|QFR/E\/m~<?mA†:,„¬yЧxk›ke„GVs'Z}7j©_vi2e_'mT2|l)ŸD°ªee·OR#s<&‘ƒ_ZŽJq—J‡…J[‚LW=Àwr…Ü…ŽJ¨·cžñ€¸uFÓ f·¨q–ZV´Š’‚ZP’wp°›„eeZt\OJŒJVz2…nNgx1yW‰‹[Ÿ¢dªÿ±·–AXuQWZ3VX;Ub,ŠÀVÖðˆÅ凾Þp¢—XŠf6†J|žP—˜PÏ“n†§O©‹cj»gvHKj,kr>‡Ç€Í††QªTVe,a‰J“pWe¢\}‡EiÆ]SZ.¾vN”™bDzs»”}™kÿ¶¸¸ g”kLÜŽˆ_w¤g²£gÊÍ›vÌ`7Y"€YB“³m”…S¶itƒL\H4»ÇŸdC0«±o’uRl–M’dIµŒgɳ{‡QŽNÏ^°duTŠœUšUÜÇ’’Âb‡–iÿôÄÒí²¼Ñ‘ÏÜ—¨¡l·Œ`†U«k]„ Q¥§‚›¦b³¥£_–žsÛ⨵±x³Œ~ÆÔŒŠ•Weš[®±|‹¥kŒ¶tj½QG_2Yr7SwA}š\P›5?m/w¤_“Æl~Î]v›[k‹F\|0[~;j•Sœ×r­òrpšEŠ”xÅã›{·EKq;E\7VcbxŒ^XPŸÔnž½be˜X‹ÎjlŸx‹°lt®it§gv²`d¨\bŽFOeEa|\n”_|°v…£s‰¥a—£jx”Iis<NpB]ŽJu™|šÌx±³de{Js{ƒ­Äs~²wšÌ›“´wˆ±lºoÁq¥áÃùÚÿ‡‡­Un†©pwºux¨ez OdqHi‚W”t~`‚£lµgm§•ßÿ¢w¹N}¥h{™i€U\Qc {™Ñ|¯i€—z‡cjzM[ˆVr¢h‰¸mm©j}¿Ž¡Ù²ºè±Ââ…Œ¸jnŠcz–an—[m‹KCrRZ“[Jx>[rh¹‚Ž¿‰Á‰‰µsz¤Mh{;PdIhzZf–[p™Sm•eƒ¡Xf~JOjEP^29Q$5R9CbH_ˆa™³Sbm0=R3Fj[h–„~¥nk“``}EeqFWnBSyKNrI_€RZ}LlpR}ŒNmWHšeKfL^e2qˆA{”\r›kZjim[e{LlpYtgLokHlcKshByƒIŽZÉ—c”™liƒs•RYÒY.î‡RõŽuÿšsÿšÿ´‡ÿ¹“ÿñ¢ÿÿËÿÿÔÿÒÌÿ¹”ÿ­œÿ·“ÿãøª’ÿ}þ›sÿš}ÿnÿŠn¸¤t»š|͵lÇÓ‹Ö°h®žApKYFVa.ng6pg6S`>vc>v=j‰Zg€L5zECH4?e$2d/J7,`;l^+zLS§[fiVn~;dyPhvX›wIÿ°Tÿÿ•ÿÿæÿÿÿÿÿÿÿÿÿÿüøÿÿýÿÿÿÿÿÿÿÿÿÿèÚÿâ€ÿâ‚ÿê•ÿÿ­ÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÕ¾ìËÇÿà–ÿÝÿÿÍÿÿ¼ÿÿÿîÿÿ…ÊÌ«’]ÿÉKÿÙƒÿÿËÏá½àͨÿ›cÿÿŽÿÿÿøÒÿWy™bcJztATšV¬w:f´jqcKo‚G³e8ɧ]œœ~®»{€®:y\[K%kv.Ry:WZ/r^6~™QÿbHÿ…cŒ—_t1’†Sa½bˆQjžZy„fY}<slEd|IPd7ef1rb.frFRs/bj6QnDo{7JjMeP+Ud85M5UM"gx.s?@ŒWnT's’PwŽZ\ULST,yR3HϪ\Avp~`3@_6Rj%Cp3eN)t”UgX[ŒTfw?‡ W?hAe/<`5Wb(uŠFw£eu¦ff’O^€NcV<~wAi„]Ç–YwŸ’£©`G„o<d&A]•t r©}ZXNjv7`§F‘l;¦qŸÃŠ³ÉŒjË›¶Æp˜Üq·iCs2I[$gk+c„Ls}QIF<8W#7L[S!Mi5¨{<š¶Š^«vl‚CVl;‘›>°ëšt«qt SqƒSd†YVuIH‰:RS"T„HxD/UyGDL+ST'`y4ކ=̉ixE:c7[]-uq@nK—bRæ–[AaK›}L€`Ø…uÁ·qÿÖŽÿÿÏÿÿßÿÿîñÿ½Ÿ¤`GŒUK©—yÄS»¿}§×ŠžÂ›–´Šƒ³{T¨b—¢T€ÔenK¸¯|ÞrtFj•VmŒNŸªUòÙ¤ÝoÒcak9jk1|œ`˜‹Shl=‡‘BvœD£¡\«½u®€UÞŸu…}MÇ’p˜pQƒŒJ•bm˜Zˆ’T¥_K¬V—Ñrot@mF5–Ršwcλ„‚ăjn@¸„z~’S}l@ÿ­…çÛl™S¤nR¦­zÏy^‡Ag½KwO‰«dÀ©…¾­p“ h{¿ai•<žÂ‰œÊužže©}c¶až–W´¢mryH³¼Š˜´j às¡Îjx“IÞý–Àÿ”‹±lв’vŸhÃø¼Æí³ªØ—ÁË«´k¡iTš³W©r\„SƒW²qŸ‡géwpÖ€cÎwo½zj¿°s‘iJ{c?a‡A|ˆ]š³u¤np›I\ˆQŒ‰UŒÁf†¾}Ïl‡¹|‡ÕnžµsÇi|¸V~¯Uxª\†žn†ÃfP‘<ƒc‹žO”·w½TV‰@Lf@WbI`uQiaH]V5HZD–°wÇ|•ªv•½{t“^‰³„‚±xm‰R|…TIu8d~h¼²z€\} \h—a~¡bŸOo¶fŠÀcެ¢Ì{ŽžPci8\}Qkna…™t’µk{±r­£Ðxˆ²t·Û‹¥Ö~£Égk‡Tsžq’Һ߮®ávtªPl—JlŽAOtFc„_‰°ƒ†¿‚—º’¿ìÒÿÿ£ž½Q]CWaY€›{‡›os}NFT.<U8>kB`‹ev¹nsªu™Äš»à‹ŒÐ¡µéŸªë›Ì挥¸r›jšWx—i}«tw´€}¹xs“IO_]l‹{x ‡¨}„”oq˜]v‰GSwGLmScxQkŽFd…;N_/@d=M{KINP‹SU‹IM~LaYnv2GM'?V2@a[\“|y¨w~œgs‹]–^s…Wi‡X^‚P^uEUoBpkO„ˆU^—gB†ddYTzt2x”Zm‚fŒ€W†h^vU`|No~O|P~ƒG‚rQzTt™c†dŸ{T‰x[kwz€RU¬P1µnBÔt_ç‡gÿ•nÿ sÿ¹ÿÔ—ÿï´ÿÕÈÿ·³ÿ¶˜ÿ¸¨ÿ´¢ÿ˰ÿÑÄÿ¿ŸÿŪõ±¨ø”Œÿ‡|ÿ‚pÿ”xú·Šò×’¤ßµ}´°[‰tXmWVbDbR7‰d<XwEncNWxCFZI<T9Lc3tq9Ž›8d·];|f:H.P9%ƒM*RƒLyiWs•D‹ˆeïŸdÿÔ…ÿÿ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿíÿÿôÿÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿÓÓ¼á꥿ȇÿ±võÿÿÔâÿÐ’ÿÿÛ ÿÿÿ°„ÿî`ÍëÑþvæ½dzߌïaÿ°VqÎØ­x¡jËOcmX]o?T^;ak5mxQ†X:t€QŒ…T…yP‹lJ™ŠKV–}D{Rjn4\‡CYy?kS4`V;gP6 kTɇD_«¸qW. ±GŒžo„¥bu•nWsJMlC}f1¦“jQ¥nYg;`w1Xv?jq7g†C]€Tk{>pkPkv<jcCF[?tc(†oAÑ>šhˆ f±‡WK…fSI/Vm5íc:›Í”mŠd?bI7=)1399OF Vo:oq7W‹P{tCTuca}>XrSCyIKl4]j.jqA­¢]œ·–‹Ý‘j†^i•C~”:h§`¼[Ê€\¡ÿ´o—iJºU@n&“f}Á{QfNwŽ4Š«RsÝlS‰G~~I™¡U|ÎyªŸ\^ç­„‡AK–YH]$ci1~ÈxIZ]z-%G*-:QV#š•OƒÁ†{؃‡‰GnµT„–Kž»lq¯_£šShÁ_ƒBNy=CL1@@yx?Xz[Qs9=[(OZ$iŠKj|Dœš]“­co’OZ…Nt‘Q}‚HŠcfi:^u;Ka/fCv„Z²kâĈÿÔŒÿÿÅòÿºÓÿ oŠnoB‰¤gpk\¯g]¡¾ƒÓ´‚GM¿Ð³õ®±Û h²|Å“X¤ÿ¿R²^o™U]I{…Eg~;–¥T¹Ú²‰]·UZ„AH\,cj9Pa4•fL–VŒ¢s¨¡eÒË ¥±s‡´cv®M–£a—‰Ww|HtŠD{~Hy—EÝ¡‰§±lÐÐwž[œzY§Äp…wN˜‚iš‹p~šfŽjKœpSi}Cy™NzJû¦ƒ|‡[YI1º|`Øþ¶£”mŒeUµ{cˆœmœv^¯ˆoॗòÙ•ž´}¾Å¨ Ê…¯…V´™a“K£ªdáÉžÃlp·]‘œR£›klY:ŒySǼ€ÙÞ“×òšk R|‹c’¤kâá²›©{wˆOž˜`†œOjG–hL¬–iºèŒîÄ•¡¦j~†J”uMãªpÿ§v›ŠRZc0ez5NN)dƒQ‰|b²c¥¹{ŒÇn¦è‚È߃¨¯‚¢¦xªâ™§Å‚ÂÞ’†¾`‰°by¯hp‘fužn›™NW~8t–Xh–O˜¸z Z‹ŽN_‡M\€GirC{yIyz?YzV‹³u“Å~‘Ãzy ^|“l…˜__nJmfOxVfŠIn…_ª³m…§Vp™Sl›Vf…Nn|[rQ∕±hqX»[\ƒ=UyFV|Pg¡t„Îp¯Ü’­æ‡ˆÆiv¢n’¸rŒ­f{¡a~‚e‡¥•¨Ò¤«½mzŠNi”Kx¥F\†O^uHmutŽ·fw©lŒ£ôÿ»ŽÄTn’\u±]ošk|œ[dp@QwBN‡[o¯tÄ‚Ïxz­yˆ¹Œ²Õ¬Ï£¨µ~³·z²v¨„¢ÈyŒ¨c¨wƒ½Ä„޾†¯de˜cq’qz§qŽºcušYeyH_sK`|?XeOY“tÕmbŠ+:Y8R}`l—k{‹iª©Ì}ƒ±f{¡Tau.24'=I;N|ax›qu—ik‘_p„cv–f|dn‚Xd|O_{LX}Gnd<]}RA‚YI]NbH0tn6i†[\Žq_ylmsLn‹JnƒW`ƒZewX}d@xm<wkJ‚…a”|`’zQ‘ZecYZ U6§o>»€]Ì‚Yêlÿ–gÿ¤yÿË‘ÿÓ¨ô¿ªÿªÿ±”ÿ¹ ÿ­¡ÿ­œÿƶÿ²ÿÕ©ÿßÉﺯɤ–é…|ÿ„tÿ‘y÷´ˆŸÇœVŸ¢XgkXU;Di:L\6{i7UyC\YC]f-^SA|[3|E‰¢aŒ¢^w¥fVgT\LXV:fL.Yn3™g=صQÿðœÿÿ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿÿݸÿÿ­ÿÿó®ìγ׎ÿÁhÿÃ…ÿâÿÿðÓïÿÿÄx÷»vѱ›«ª†ÿ›Yàÿƒ…­´o’O… Y¥¬U`ŸTu|cNŸLOkI‚R.aˆHpmKnyLgzOw|;s—YƒSUˆpadEwrCb‹Ytl2hƒXŸS’F„‰E¬x@gŸz¤:Ïm˜qh¤p^V‚SR‘]Žr?jzeyxRb€@`\<{pEnO‡‡KW}VEz:WT1ei4M[BFd0Nd,dq4oŠDtNµh‹±a£ºn³Äz¬˜²fƒ–zpuRgcJyV6T3/4 LI^d0mh:X†VRyI]c?MƒKJk5Cd7xn.©µSt€YI—\e…8…¥S¡ndžqƒ‹Bd—aq‘L•~Il—ië¯Y¶ J§c^d~ŸBP¥pv|9}šNœ§UÎÀq¼ÓõÑʡؼ²Â‘}Ô©k‚R[…DCq7xr%F¿hh‹/3x@(D0CCS sv5‚˜V{LŒÁbf™]|–D¡Ë^zÓ~ÍœT[¤…<i9,C!>Hes;qJO_:[q4~`1S‚;Hq/c~A‰q8mHˆhv®_‚ Qn†Nƒ¨ul«NTŒ7vŒ>r–]ŒœfÁiÅ™\ÿµ†öõžÿÿÛüßÂòꭡؤ¨›gªÈ©reA‹}V¶·pL©gŠN-±ŸšÉ‹ŸWk/—˜F›­`°dV’LCK#åTV¾ÿ¦¤Òy”Da5‡¡MHd,^P%IW6g;-w¢sŽ™aIW'iQ5£…]¥oEÓׇéÿÌ«ü²×®m ŠOyŠI{‘H‚G«Á‰ŒV–ck•E²¸m’zT¸ˆx‘gYŒÅš€gH¶`sŠH·fÿÿÒÔÞ“ôÿ»•Ýey£K²ŠqæÿÇÄЋ‰ÉToƒG• nÄÆ„¯Ï‘³¥xœÜq~Ñhˆ¶^†¢Q—€aá—wz„U„«ipŠQw´^¶Õ“€Ñ\}¾gR‰5Br&9o"dY8‘j—Ë€y›N’’f‰¬ezSjm@—] ä„µê‰Åì£Çw°Ìƒ±œn¨ºh Vž¢]ªu™•b¬¥j“Çg¥’`t¦IT_/FS'frP¥à}©â„±Ôz¡Ôu—¾uŠén†Õf©Éž©Ìt…§m«Èq‡ªd˜¥ƒƒÂ‚¿žU[“;Z–Ki¡Pi«M‰³t°ºŠ£ªu·–pn€Nv‚\sŸ_qŸKb€G„œj˜µƒ‹¦]€{Q‘®]}¢nÿå ¥¡V”ƒKsƒDk„M}tlÔ·tx¬Us›Td™QcQx¦sްzz¶„¡Ò’®Ð}Œ°YVˆN‘¹‘Ïã¥ÃÕ’®Û¡Èì §Ç„¯rv¤[RqBv¢Rdš]Œ¹“©ÈppF]–EjžVm To—^u—DPzcš½eimK~Ÿ~»Æ·ÒÿŒ›Ä¥¼myœ]–‚M_`€¼}‰¶¦Íˆ¡Ç—Ìw€·u‡°Š¶‚‹«c{ŽJa|M•†Y‡£pŒ¥`n‡Ph~ht¡x}ªˆ‚ÄŽ‰À~x›k_Œqv¡pÄm|°KWw0FaAUtRS‰€–п·î‰11F5D_Nbv@BT>Mga}”€›¶‡˜Ì‚Š”H6O/9WG]dQ[kUdxZh_jˆjj¡uw§kˆ†RUzQ^P_{^Hf-J_FH[;8Y3MB%dZ'`lETrVeqS€wCh˜P`ƒcEsX:YN^F2gMyT+€j6¤iR¢zQ†_n{c…cV¥l?µsI³`º|oµoàuaÿˆeÿ¤yÿÂ’Þ·£ÿ¢ˆÿ£…ÿ¿›ÿº«ÿ¶§ÿ´¡ÿµ¥ÿÅ¢ÿöÉÿêÐÿÖÂÿÈ´ú· ÿ”ÿ’t碃zšŒErnJE@gC,}y2\“XDbQB?/BJ%KJ1}N,wi5v‚TzŒRd›Og„YUkNOQ@r]7¢FÿÁcÿÿ›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿÿÖÿÿëÿÿàÿÿÿýɽ©Û¦ÏÜÿ˜iÝÒ§Š zþ‰o™O®…‚ÓP€sÿ‡Ud˜P†x~n¡CbrOWlI?fGFC'iK'lUW]HYa>dbG{lD ŽS…ŒYz¦f££jk¨j‹ŒyižONs_‚`2™P}”]f^axCs{5˜‰A¿¸h¦¤wk‡[iqRsu>‰O[ydEg:@a7Yi,px/œ@×ZxŽi€‡a^­rZ„FjL]eATF;Gl6Wh,Ya*tl0¶Î\j«gmQHqM§i4¾¡lœ¼}Ê¢s•—nUteDj=Dl7Gf4Wr0@X:¥`,W ttj<ˆd_‡hFnDy{4HpB™V-˜ˆ^¶Ô‡Ï¦a§z~“M€²bssHtd=tš\o£R[Q­ŽA^ì¨CT6Cc$„n$NƒSyr(f¬]v”;…žHŽ©fnU~ˆ_‚@›šIˆlYIiZVi2–ÈQÈoH¦X:`-9]'G^$t:nž`WŠB‹©En°c«M©´XÛà€{Ö“œ×pl–Y;e6Z`/g?wYDoBTV*P]0Nv.Ok/½_c¬cN›OVe,ˆq>u“<³no¥x|›\xd>Si9c1–—WÈꀠ׌§ä®¹_ž‘g§­y¤£ˆÒ¾”›vЯ€©o‰O§›aÓÁzsÎŽ6j+0;£h3*A$u0™¥mT”=\ŠG+Q"q:›cD~©r`t5¬EdpAqq:ss;T9%X;,qmR–gFOL)gqCVy<S[,¼ŸrÞá¹ÈΣ›×žcœmŒ¹^ŽƒL“˜Xw˜SqzF…yM­¶{›ƒ_ŒgNxfVÌokܨ”Ý©€¿‡c¡˜o¦tbÿΠݻÓïßq‰‚W¥¯xš–e“ÚjëרÐÿ¨šÎ~ÅÔžºåŽ’ËlkŒ:¥^|_Ǹ€–Q¢˜j–°e¨Ì{uŽ^£¾r‘«^‘§kdŠ>†oM|ÇChbA|”QµaUaK¢ˆwhn8|“MoNÍÒ™”­tÀÚˆ¶Ç“Áæ²ÍÿÜÍÿÆÕÿͨÁ|»ÕèÙ³ßÿ¤¾ÆŠ´ð‹¤Àc¿¼{^œB]d<¶cq¾MvLƒÇXn—Oµ¨—´¾ˆÄµtŠ´}§­aŸY›–^ª”\’¬ ¥Âlu¡Rx¶xyœTt[}—q‹Ïl’“vo˜FWY7X]@icL}ˆp²µXj‹Cj‹R‚™lžj}‘Sr{[œ¯‰îþ™¶²hw QŠ‹U•d‰T†‰^|—TnId‰\w—w‡¶}½…†ºy‘°kŠ«x˜ gf†I_qRxtXš¹ƒ¶á¢¯ã~x™R_{Xp”GAW4bjI‚ `‰­]}“Z€¯^v¡WŒºw”Ä`u¢TqD]†]›ÅtdAn‰Ik††âû¡¤Âr~™UjŽ^Ø€}Ày~®n„•h…¯i‡ªal]r¬x‡´tš·zsŸ@Qh3UtE}zNz“\wQk…O[€\piq©…¸„‚«nh’adŒb]z[ui‚²KZu-JhQtšs„´ˆŠÄ™œ°tm>Ce-;VDOd86O.:V@Wwn‰©¢·Ðœ®Åu|žMSl?O`AUpB?_BQeZo•}’ÅŒÂ~…´wt¢^n•Ned<h54Z@>D+=A$EI$HK-OY5L_7b[Cys=c`SslE`R,M?CC/SC!fR,|N)¢a>­gM•yZ~€_“o]§sNÌxPÍŠ^º‘s¨¸}kØycÿ†dù‘o׮姓ÿ•‹ÿ¤‚ÿÕ¨ÿسÿÔÁÿ½·ÿ´¨ÿЭÿ×Ãÿͬÿæ¼ÿÚÂö¯±ÿ‡ÿ†wÿŠs·”u_€p€aIk„@Ld@QE8T'FP*Qd(^t?fu<Wf;xa?v…>–…KZ´dŽkdÿŸQÿÿˆÿÿÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÿÿîÿÿÿÿÿÿÿÿÿÿÜÞÿ髳÷¬º¼… w~uFš„E]A_]1S^BH^3aa@P€<y`7TKTd?Jn2eW.;Z</C K9rN!b¤[]€Q>LJF?1dX*iiBgvK’yS’•Sp“}RgS]a9\lCKbG<L;RS3?v=Hl8…p-W¥WB|RZ?6fN2mu2žwE_oQgpDVpC]d5Œn.x‹VލN’¥k‡“cjaeï‰GÈ‹x_ˆcJa1QV%Go0D\!ßp+gâ˜^g]€qE‰iGkšeÿ¸NÆÿð¶ÿźÿµ¤ò¯†Í“v¯emPS´QLn>Id1Ca0`Y+‘}DC¶Œ@Y98R&FBW\*]o5z};e•]PeMc9U~a_|E[u3šv7Љqdˆ\}y?·¦rWÑ©M™Gnw,WtHVn4b‰6a…1m=fÂV`FV|>Xt2V‰1gh.w‡@l±\’ÌqZ£iPX(>c0AZ*du*“­QZ¦g|‹-{ÁWxIh¬aƒŒA›«U ©i¡Àz‚´fj¦`aŽHfŽGkœN>xIO`,V{/VŒ;½±J¢À~v«]?›<dP)Yw9‹šN´½}¥ßŠªÀa·À|–ÿ„a›MùÃt±ß…Ìÿ—·ÿ§ÂÓnžÃ}ª¾’©¾ˆ”³Ž™×‚­o—•QtVE¼MMŸ¡}ct`^^@wGj\,S«Zjt5SˆIQf)Sw<xeAFH&„mFZ{7U~4{q:¼VQÕ¿“žÁx|jF½{[‹c@›YŠl@n`1°±nŽsPɲŽÚç¹¼øÂÄð¼€Ú——Mh—@’L’œiĶqnp9ot8Ävi˜¨z‹qS¬pa£—sÿ¥—÷ª†xxK{uH…RAÿÿûÑ®}ªvf®¢„jƒLrlEžmM¶¢„š€dÛ}u’¬nÇÒ•s­SqŠDŒ—`ŠÍqž£j§•T~ˆC¦€U—¦`ˆJ¨xhš¥oqžJnuCmq@›Àj‚¢Sa†6ЧRt‘BÿЫßÿ«gzC|±Oq‚HzvH“¤`Ñ瑸͋ªÊ„ÝÿÞÀÿ¼¾ýÆ­ã‘¯Ø­ç‹Æ×‡·å‰¶é{®cž”sºÅ~ºVag=yuAq{R¾Î|rªQž¨v|§Q  hˆ«TsW­_ˆ®hy™IŠžVp•TŒ—ˆ×‰ŒH`s;uy]œj¿_owDdl?ic@}VFŠug»±do¡Y’“gˆªj¯¤`¨‘Q§}^}’f³}£°n•UwŒHw–RŒ€FƒUlœKg‰;k~\–§jˆ±s—Ó“ŠÅ“±kˆ¨k¦_Ž—DLz:V~BdŽVžÄò„~«AJi4[nJIu,0I&8D-<A$>YOg€¶q¢d…—dsŠN\€@_†d˜Ì‹®9>S.R|h¨È“³»YjŠL€›‰äȈªÖeq–FSY±^o¥Td˜Ql’md_wˆfˆ–PVJU~ByySrŸVZ‚Ux™]lœJ]mPrzaekqžbn©YWm>QhJSzVjŠO\€?NzLq’oƒ­x‹³ww¢cf˜LZe0<T/AX0<R-8V6Eb]z’«Â§¦Ë~y§YkˆIQwSjŒFRrAWsPb‚auv’°†š¸_]z:MlT;U-0U1-@+C7CD8W,AI.QY,o]/k…:[€V_YcWOEXW:Cm@NU=HT/oJ/e-zoHfK”‰P›wW»wSÖvSãaÛžtà‚´œ€°Žt²zmÏw^ëˆgý¤|ÿ»˜ÿ¬™ÿĘÿÚ£ÿÙÊÿ½·ÿÁ²ÿ±ªÿ­¨ÿ®¤ÿ­šÿ²Ÿï°¤á •ÿ„yÿ‚jÿ—sÿ—z°œpY’kGt^kf8e–=o‹I|z:lœfl‘dx„SZg;jgA¶u3ÜÄbÿß«ÿÿ¤ÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÏäÿëÄÿÿËÿÿþÿÿÿÿÿÿÿÿÿÿâÛÿñ«üÿÝ“ýð³€a‡SaxCgz:@n<6Q/8T&[W$us9RH_tB9rF@H/OQ$Wl/:e5,V.1Cb;„o5L®wKiJ^Y0gj5y[5~S=¥yEÔd޹[}^¦q/n‘QcrM\q;^f=p„:l‘Gƒ™<‡‘bŸT¬`k‡gZ‘HTr?bhANg>?j<dO"}i0d~?oqH€Y°|Shˆ__~<l…6‹—=j£Wf«Lb­M˜FÔÉt[ÓÀPS9Ud)µ£PõÿŸÿÿÔÔâãÕ•£˜hQR‹aCnORT2g?<H<Pdz.Xj>xX8Ž–a3±EF(;e-wA"ŠœHTw]Fb4Z^,Oo:I^1O^&V‹1Rv9U4e–Rv…;‡šWÊœgZß­[qAQ{;WY/`pHY=jŠ4€Ž8x¬eu­aY‘L_…0Wp4”¨Jcš\}|>D—W^s-_‹DiJy©Qm‡Igž=Š·Dc„U‚¤SIdA©œ?Øø•€¶ng”GGS/†g*œlp^6ƒJ6a#Xbb‚4oGƒ¡f°P‡xFv¦JP=UW'RšJÌ•P»ÛŒâùŽÿÿÙÿÿìåÿßÿö”´ø™Úÿ½ÊÆ…ÈÖœ¼ÿ°¢è¨ÀÂÐÿŒƒ¹{i›^uT„{H–<¢†yŸr¶¸ksšlraGW•Phb+Kx;R‚BPp3se;ĆXdo>ƒ>e¶[\T%eN5¨žqÆÐŠ¢É|§§x‘‚Qâ¦vxhFÿ餮oWÿ£wªÎ’ÓÛ­âöÐÓìÅÁõ¹ÅÔŠ­àšs’Dnw=¸¥ZoƒQpP–ƒZ¬’~ˆtb…xX|hTÿþâÛ‘ÿÊ›’TÁ§|³¡…¥£m…]TnwHkŽG{_L€‚UŠ€V¡S>í·‰ÔÑ÷¿ƒ£¹cmG•Æn€£MwŒDv‹HØ«}†«T ‘_}zR€tUZm=ymGs•NX‡3k‚FLX+lbCy‰NouGÃÀŽóè’—Ô‚£c| Zn„G†¾pÒð‘—µ\€ÂoÑ÷Ÿ·v}´°v“]ºm‚¯Z޲T ¬N„U¯¦Vv~J‚UqSd•>_t2ciFš•ÄiÖŸr¹²X—–U¯§lºg€£Z†Az”Gk†DS<*OiP•Wgl>c„@\}EŒfš»o‚œWŸ“Vyi:yoFgmLÃzf||N“{cŠŸY†”T•RmuNnwM †Z“£g‹‡@qxQˆ•Yt‹Kn†KsšEc’F‚¤`}§Y™¶m«µ{ºß™¸Ý‰²Õom¤[š£[гUsžTuœQk¢m‡[nk5L~67S0^rEM‚1+@%6X7[ˆb‚®s‡·tš_l…[}fx™iƒÄ…§Ë–“ÀMQw@bƒaŒ«q¨Id€Mt˜a‰£[n‹Oj†Y™°h’­hxª]lœ\oš^|Ÿ]e„Qu«zÏx®^k‘_u°^‡Ósßiv¬EMZ9@^Ol˜což]l™QMuCLtCTuP`„QkŒIp}CWdOf~jx”hl’bj“OOj;N|C9d=Bi/:U0>_Qt|{–¸­­å»lx“XoI\mCTnQpixŒOEdHH~aYƒj}Qds0Kb@2K+/=*->%4;ABGS&<Q0GU0LH#MJ,LJ;VK9jH4b\8KxDE^FDa9g\A…s8`Gi_H|d>žlJÄpOätRÿ‘Zì®zç¦ˆíª„µ±Š±‰Ž­xhÎdÿ‹fÿœzÿ®—ÿ¬ŒÿœŽÿ“ÿŽÿ¨“ÿ»³ÿ´µÿ¯¨ÿ¥¨ÿ£Žÿ Ô—‰‘ÿzwÿ‚sÿ§zÿ£yΚ~—˜€¤«[‡Ámo›i–{J«a­ma™firNÇEÿÆeÿÿ£ÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÎÿÿÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿØ”ÿîÆàÅ‹·×¶k¹ŠW|Ver1N‚>Tu6Zq3Zj2do;x„GnžQ`~N<yN6\0u\+nœ>h‘JUŠEa‡?TFvgG}‰Bk·{gQmV8qg;ZoC˜c/Ó†Wç–­’h|‘C†{Y›•I¡¢qt­o`•_‚vQœÀ]̲f¥V›oˆN9t\2Wv>@rAPV,3R&h? ˆk8qqEÓ’e‰}waqPaz@m;º½gŠ×§ a«°z¤wŸ¹q³±|oÒ˜y¸v±±bÄ匥® ®d“†e–Znn<o†J{‰Dt®dPkUv‹Bb¸a`k,Dk<AS*.1(¡S‚ÃŽS®f§Eij?U}DRW/Dd<Qg+>h/XS'\eBTŸNGp5žp.\Sdx>q“L„˜K§Ze¹|\•MP}4U‚C^‹G[˜DX8kBгrzºaG¤aGdhu)IŒ<xS!>€^€5'U}oXB.Yx/p ;_œGWsIuK7FoaD>,se+éªN™‡ƒ‘Ä|ŠÎ‚“µs=oLaJn£]M—AWk,<U%h~F[”I–ðpáu`¥I8w*3@_}:´™PÝljÅÒƒÈý­Ò¾gïÿ ºË_»h¤“M†¶TϺi½ÿ½Åñ™Èí®Üܯ­ì¦wØs„sJœ½nzÓo¥¤^ÚÓ‡ƒ—f€dK¥˜g€Yl™PÍOk£Xvs>¸‰R˜dw„?ß¾Œ™¼t‘³ehW6u~KŽgµ”sªª{ÿÿÑÌÿÍ®¤aýyl´zbŸ]ÃÖ’Òü·ÜýÍËÿÊÓû̸븺ƛªÍxÒÂzû¾Ÿw™P|ƒJ¼•aeNËx`™ˆj…mSç´”¬±…™Ü‘yÚl¾ÇŽ™«l„¢ky~J¥nN¡¿€|‘Wކ\¹¼€««bÿ…ÿ¤“x³YJ^¦Aвd…¹cœÍ~Ár¹j”‹ayžV}oFs[@fpC[>ke<qŠMSz9Cb1jQEƒ^RutXµº†yšOû…uUÁHqR”Çr²°{?˜TÓì¡•§dPA2~pO‹œt½fžW»_w­E˜UÒÉo²ª^}Ž@‹GfYEUj/ed8…€dy‘B‰—Jƒ¢G‹£VÅj´²]e„7`‚<Xj@u†Oœ¯fSi>RS9‘—Qš“[ƒ~Pîy‰Ó»ƒÿì£ÎÅ|sJSd3\iCoYªÏo‹ÁY‰—d“´gˆ¤b®i‹ŠLŒQŠSp|<ru<|•`¡œLiFtO{\‰™TŽ™Oa‰P•®„¶Æ­“é¨ŧal•Z›½k‹Áv}¶a}§`Z‹GF‘Ui­iS¤dS£po­UJ‘lX±…xÏ’‘Ò“žËÆvhŒSgzPp•s‘¯s»Ž¡Æ]h‚PcR“`rŠDMn=_•`z¤Wi‘Tj‘U`‘Ji†c}`{¶g‚±qx­apŸt›Ö“›Ò‹‘ºv‰³^y¢`„«vŸÚ{ežSnXf›bh’gy¦mz«ljŸdg›NaŽJXp=Qc:WY7Gg;NmZgWX…fr¡^q•eu­ig[X:>V2AR9RYSf‚€¨Ê‹§Æq…œEak:ST8TYOgrWo…YcŠasžQ\nDO`?HR1GY:,E=59$:>NE\Q)8W52A5.H3 ?!/#3%/3"=%'I0!EL1jF3bq6lxTxQ]sPXjIl;ur@’iEËrKÿšOÿ™xÿ­†í³‹Ðµ·¢–¼Ž¦œx¸}pêt^ïkí›áž‡à•‡ÿ‹{ÿÿ¬•ÿ¶¯ÿ¹¦ÿ°¬ÿ´¡ïţ䧛ˡ•Ö‘–ÿ‰€ÿ”ÿ«’ÿ¸™ÿ²Œ¯§†Y”}m]b`>{wM‚—`µ¡aÿ¾zÿÿÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿõŽ×쩞xŽ¡d¥®f}j[o>wMO@3Vg(Ro1Mr/A_,OI,gb3RŽB\]BTw=s;K€JMVB;[5:A(Y6 sZ2X’W†‰Tr–Novtr=Ql:M6sAÿY>}ê“£x}’I¨oEó—`{˜}~fW°xD˜¢x±›kΧ]à••‰¾|Urh‰O,Š€?hˆFAoE\Y(h`,jb9Ÿ‰T·œtºinŠXqƒS‰rFyiWb¿\~oWq;X‰XiQ:V£P˜l;¼«j»Ô…Ç™EhvoQ%Ò†HQdLVJ0}F$}•`]\|R9ƒ HD‘]TO'Fk->V3"3!y*º¹aX£ ;eG_= [wHQ†DKr:QxCSu:MsDMd:eoBY}:V^2Z‚KI[9XV1„S0s²nWuY™W/[yQiu/Om<Yo(q8HjKR‚5dX#au'BX4@i&ŽDJ•Z; 1-Rq&?c3yf-6dCPZ(@VG75q`3t[,Wm<Zr9‰€A~šZv•Oy‚DyžV‘IŸæ M®hPf+š¨R°É~‡Ú„ŠPVŽ8dƒ/b]9ŽmJc§tlU?hWDÃ_>›š{‹´]Si+Mt4o‡;j©VŽ€K­§ˆ§Ø ÉµÌê¯Öñ¿µÿŨjå¨mŸåŸ®ÄzºÎ‹¥Ûƒ–¾l­Š]å³f’˜M¶’GƒCŸÁl§´n†‚N–—LÁžMÑšUŸÐj@oc>‚ m—hžÁ–ËÏ¥ÀÒ›‡§w« lµŸ{‘Zפ™ÿÿÓÿÿöâÿâÔÿĬÿ§_sN§X?àzRÿ»”¯m‹†S¢aae0~G¦`drAjpD˲¨ŸÖµºððݟÒÀ„´È“»¢s‰xG¨žkfs@{†SŸ§n‹—g«¥qÚñˆéyg•Bx¥V“i•Ãm}‘Civ?혎ˆ]}‘SrvBmmEeGsK__?f@Fd/pO`‡<aS:`oJ“«i_‚1Lf8öl{yÇe}‚PŠ•GšwIw„Mƒ•Sº†jª¬acœ]}§r}§ay¢W‚«\•Ðc”¾\­´j¬·kŽºKš©[s¤GAj+k~E‚@Ww5u;‰–R³µi¯ºn­àx‰Ð^kU_pG|zW†”^~kFt‰Fv‹U­‹c…’câ—°ì¿åÕÚ†ÃÊ~¼Üpx•W¢‰m¼kmyE‚‘e°Ã„Å}—Èm¥¦a¶Îj–­N}lBŽ„L‰”Zg†@dŠIg—X|‘Wj”Pdƒ@k†Tj§VˆŽ]Tu}]v—dŠ›c¦u¢Á‚ާg‚¤€•”{¤›„£ª‰ª°Œž§”£n‘¥ŸÅ ¦Ðµ¥ÖÝ«Äæ¤²Ö…ƒ­chEZzXh‡Pv Åkf…HcMy’aj–O[Fi‘]†®sy¶rz±jйXj€MjˆW€ŸoµwЏlƒº‹•¸}ŒªlivJm~RaŒ:W„]Š©‚‘Çu‰»€”ºz²Šˆ»‰›Ïž¦Úˆ†¥Sa^:QJ0EM>ec9_sNZVWoV_’`iŽeciws§{‡«OXe1EP#5?2=XUZ†mx›m´\_F_c;M`.>I-4OEQmL^o7=@.?O=Y}ET|J3;31?E?cW!Fv:>[E7M6/M**>2-A?-Z$42)>+!CC&Z>%SN&[^DOeBd^Aƒ`2ŽB‰‰Ps‡[•yd¸‹TÝz_ÿ}aæœsÛ¬ŒÄ¦ŒÑ–¸ |®ˆ†®€i¿sgÐz`Ünö‹vÿ™~ÿ®Šÿ»¢ÿ  ÿ”ÿ§›ÿ££ÿƪÿìÁÿٿ帴ڕ™éš’ÿ™žÿ«–ÿ¾™ÿÑ£ç™zžwMiVšZBÿ±Sÿì‘ÿÿ¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéûÿÿÑÿÿÿÿÿÿÿÿùÿÿÿÿÐáâÒy±œfoƒNY­Oe]WS|G=jGEN+I^&MU!Ra(Jv7]m*Š…;U¦X[rHU‡HNa.N[3OQ4Bo3.R'S6kL!‚Y.|“RŠ£aeÂng•gZs4p]1wd@Í{WpÈ\‡yaw»XxmTŽ—C[Šej]?sa1VŒLkf=œo/á¯{Ç•yk£~WgNk\)Ot5•d8Qs[me9…˜RŒ^­¯nr‘uqHd•TIj=|a0ÖA‹ã¥šµ}QÂz¬Hc¤lx‘MšK’Põ}\†äÑbÚ‚YeQTe9<E/po(FTUX5ŽS6¨€[KÛp1L;lP3Z>F=è°JR§ÈxN[¿u‚N±™i`†ruˆJn¯`Y“`p‚Jp§gyˆZ\’OXW;NM5A(?U*NM"ph.Y€V¥c5\¡xMr)Jc&M9'Fm$xj R cU…$0`#@6GX»QLË BLAZ„4-T.F^'U›@CW-ZH,afCidEScGBP>5],{\'³»z«r‡R«l—¨†¡¥‚µÍ ’ vh·ƒ°f“Y2ŽGbLU`'D7*:<$`C^…DE{4Zc,zžJ^lC¤ù—¹^Êퟆ~\x¬wT~9HJ%¨kV·³pÏÕ¡÷ÿׯõÑ‚­v¶”WÅÿ±ÊÜ‚æÿ»Ùÿ·»ÿ¦Ù‰IŸ”qÌŒFÜÌ|®ã{•À^‰NŠ9€Š4—ƒQwY5Ί}¬œr u]§Œ^¹à¢§Ú¤¢À‘ÃҦܯˆ¹q„Wkµ^V{9^DÕt†óïÓÖÿÚÄÿžkd3µ}YÞ i×·hŠ€HxSU _bl5}ÖghˆNvh>¿„pº½¢ÂÖ®ÌδŒa¶¬}Ù·¥±á…¿a©¾‡qHqœYnyK¡oV×’rîŰÁéšf­I›¬lˆ¤_„¡akBoŠMž|X¹ŸtuŠI«‰e£¾euŸH„±^u§Lq’IuQ„XšÄw€§Wˆ§b~œQY~/O{?qdAÍnˆß]^y9OS.k€H“´al}M~w\ŸzžË†¹pl€Ju¨Q£Ó|™ÎoÖëƒÊÖi‰„F¦…MŽº}…Ódp©Yb™Wµ„r³Wœƒ]®ŸdÑ”yš„U•¦`¥­{ÑÕ’ÎÜ›žæ~ho\Бz´d½‘wÝ⯺{¦­{«¶už©a‡aº±|‹ªZzœZ–¨i|•CyƒSˆ kr¬Z~©ZŽÌv©Ö{Š®_q…D˜Y’½v‚¹]¥Sr}Y~–cЦVm’;o„PƒŒP~‘X}]±±„–^`¤o”ê}x­]c–]eŸeS=` Tg—D_jFo}LGU6a}IMzG`Q‚­j¯‡ªÊ„„¨ep•NcŠJ]w5^ug¬ÎzyŒAk{Q€©‡Ðxo­Q]‰Fp“n“·ˆƒ¸muŒL\‚Mi’O[‚Xvoнs‡¦exŠVoƒGMd1U}IhŒ<HuKXodƒw_vzr‹”w†¯¢Î©¯Û¤ºÊ{‚‰=UoCX|GZm>Wb>MlVkQ_’is¨fhs„­lvm’Ë™µáfd€17A4=oQb•[nhy¤„´Å{|©[hŽSTr@Et3@c79^DAl38G1ESEThQf‹V1J(AA1hZ/€|=PŽR>oU6Y84L'3?G-^QHq5;RA;4/:?&@A$O> [Z/Tj8_p8xi>‹ƒ@€‡Sx{U„‹c”\•leÂcLâtQí–uý±‹õ°Šñ³…Ü®“¤”‡Ÿp™lX¹hSßw\ÿoÿœÿ—‹ÿ‘•þ‘„ÿš‹ÿ¡˜ÿ¼ŸÿéºÿõØÿäÆÿÆ´ÿ»§ÿ¬¤ÿ« ÿ²Ÿÿ¸ ÿÓ©ÿÚÿáœÿ÷Ÿÿÿ½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤ÿÿÿÿÿùÿßÓºì²~¤—W‚^u`Jp”Y€SLš]O\Qac3CNGY69c+6H JI[]'vy0–Dm—^t…SXžbRu:ON6ZZ0Hs6CZ-CL<‰L!h‘C{tO¦‚;®~u¸oY’Y¨x:¥®`Š£…a’Z—…V`Ë]|xPn Al„\\W9uc,WiBHh:h\$šj7¸‘i}‡iŸ€`p˜XZjGiz8ci5³‹NˆŠmÿ”jš®ŽdŽo¥s>tÀt~|=JGOe7%¤Š>°´ˆ¿ë¨‹ëq_|£`ˆVcÛV»f6ð¸}¶Ñ¹n²—oVKXmLki4uPP–a]q8KgI“Y)AÈp=H0AI#Ò¢BQ’šL\<g[/~N¡o§®rn±‚GzN•h3Ÿ¯o{Ö‰FiSkT'1ŸRbBJ‰PD`3AR,IR+|V0C§v_P%—s=Pefk'I>/VL$Ot,VK(ay;;,EDMA P[MžIQW)X«F^7`Lu€[hL=jAQR,]`@}lTRpF•œOŒ¯|§u†’o‚—Zh‰WFr4N_%uœIˆÇyR²f€¼ŒhƒQt’JJj8md?m•L³³|„ЛÅÆ†¢_’Åx†uMþÈ’š»{k­zƒR@u°ƒ“TY{4;S2Q)!|‚d®¾ušÃÂö·wÖ—¬ŸUÄð¡áÿ ðãšëÿ»©ÞÊrK¾Öx³éÇÙn•­h‰´XW}E\c8|`Hnl> aR€‹F€“Z“™[„€<ÇÞËΞ™Ö”»Ê†×äÉÈÿÒ†ÿª˜„]sÌyuƒA4l.ƒ,%Ñà¼Øþ¢›®P‹—QÛÿ—ˆÿ–oz7ɉcNƒCQ^+PA€Ag{R ”q„¨wÇ©‘¢Y…€]Œe{žWŸw_‡]§±l–“R¢“l†ŒS’˜W©Rί¹ÿ¡ˆ²i‚¨dq”I•yNŒ¯b—‘nÏØ©ÊÿǤû¥‘îxøÿ´y¨X¬Õ|½b˜§j¼º‡¥Ày°¾}—ŠU˜Ä`x–Hgk?¨Èƒ— i µTžSw¼Q_wH³o‚¯r–¬…m‚FwpN}nFL<Rj1wˆG“Ái¤Çg~J¢QV‚>o~U™«n~´d–ɃˆÌÌ¥ÇyU†BlO6w{YPm9`qPŸŸd{QŠ^»¤mtŽxµß ¤µqŸ§…âÑÆÚ˜Þ·z¯¹q—ƒTože…½n¥¨{…¢GnDc{?qqPu„Vx„Ir˜I¥¶|ªÃc‹ŠL|–U‡£hŒ·i~¨f‡¯\m€<X{Qf~Kn„C„˜HpŒR{“RoŽK{¡a…¨“»™Ùæ†Íj¶nm‹RožY~Á_g422%MD?n^m¤^m OeKWhGiŽf“²z€[p‹Ye„?Zi1Uu\¡Æ€w™Qqejvt§¡‚¡T`{5ZyFi|ep}TjuMg”Zq•co¬fj¡g} ^x—So•_y”<Tr'Ty8`„G`C[i:PU8PdNZz_jšs…¡uŽžx~LRU:\yOvWx”NlŽF[‰`YsQ[…ez®vˆ±t€¢`k’p—Æ„¦ÄcrˆEIx]{®p‚·om”cmw²€±hx”it—sŠ´ea—Zg«r†º`k‹PWwJHjV_‹][8‚zMoLVŒa:‡n8NO:K%;C52P/iR"H}95XJ05;?-(BM&PV&`b5rp<\Id„``fE_l:vfE‰nAvzO~w]—oS¼fHìvSù¡lÿ¨ÿ®€ã³’´ž‘¹€‚|q tj²pZÒw_΀lÏ‘xÙ}åxÿwjÿ’~ÿ·ÿˬÿݾÿæÆÿçÉÿþÅÿÊ¿ÿ̰ÿº¯ÿ›–ÿÇ“ÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚ{ÿÒÎÿáºæè°H•œTBTXR)tf;J‰XuZKFŠJEL?\])Dl:P[Q@q*LX&Ii*Gh,gb.€€5a^„~I[š`SuIEj7@X3\J,W|1VZ>–n0`qF‹jO¼mAªz¥nnº€¸˜P¿Rœªƒ–“s³³WdÖ‡p„W€~:e“jUe6|7^yQG^Db\-rH)¼†^’{gv›hœp<¯˜PeÆh}mI˜ˆX¿ƒOkh|Xd€[¶“H_ I]/)@.6v¼eÊ[¸Ø }Ô©¤“UtÆ}|†hj¬O¼jT¨“kõ¨{•¾ˆž¸Œb—{zn@§¥N[€Rc0HV:?^+“b.`°tº”MC‹@Z2Sg'[g5x…P’Ÿa¼¥}l¤Ž9eBMS&zh=¯vY^ä–H‚OK[0€d/GpWAL&*N1H0slAS¥[k^0cN0MY0\R";D!VK'@K"Rg%]"*(SEE]&hy8S«`x]-\”hVsMOa?^t.e{:Oz7MK-nn3xFg‡bb”\ŽvAr½†|¦Yx^Ak›`^ŒM]p:z­XU“Xrm4xœTL NZŠ=|›Rdn1Šs8tL«¯S˜Ç‘—°sd¹›Ždÿ¨m¯‰c ø‹k¾€=¤NUa5n9N‰H)>2!9&¢_F˜_Í÷ŸÉô²v¥u¤€cÅý¬ÈÿŸ¤¿‡]J7†w>wÆXÀµZÇÿ¨eªUN[0VY/MU0]3+‡Y8ƒeDytHÀŒg•‹rb]A{d@Ħ†´é¬Ã¼~öøÆÔæËÿÿÿ“ÿÁ·Ü•¶­ptŠPSM.¿®n¶û…Æï˜…Ôx¿ƒr¿§c}›]ÿƒ‡g¡dYU*r³VA]$toIcjGl{BtVfŽVƒ¬«Ú ˜¾p¡†X­Çiš§et¸b’©tƒ´]‹¬]tˆIŸ¹mòÕ—s¥Te…:[z-•QóÂ|¢X¯œ{½Éž›ÕŠ±ÏŽ´`q£P©Ìy‰b”˜e™ƒi¢©nŒ®i ¦`{}=ƒ˜KDd-ñŠ”—¡Ep{9`~<{Mz¥T®®•…±yw–Ue‰Tƒ¢rc™P±RyƒL[`/ƒ™Kz¸Mr©Szºcy·W_‡7a~Hp}T¹Ô ¹ÿ®›Íz¬Ô´—ÜojtI‹ \{šP›WŽqVwvMiŠEvrG±´•·ªv£Ô‹Î¢Öÿ¹ÆÏ›Žl²Ò“¬Õ‹³É’ÐïŸÇhj@j›BcŽHysEch/^z/dr?¨ j«¹]x}Fu…Htœn—Ài€±`§ÛwŒºUy–Yg—LŒ›j€ª_‚‰b‰¡e‹°w—¹o•¹~{ŽY˜šKu T‰´`i›WŒ½~¢Ëun:>4+4,]aZŠ©j€ Vk’WU—^t¢kx ahJeyT[l0EP4MRL“¬ƒ‰ªk‹­asBW`;Ub.Na/Ug?gtPp„Mi„Um•`‰µv…ºcf‰P`…Paa¤Á“œ8Y}*Ov-K_AYs=Qp0NfEdŽh€¿}Ídh{<SZA]Z*<A,J]>J\D_bHUoMgŽ`b•au›oˆ§at‹S^‰Io›`vf€°cpœ`€¡i€§f½kŠºr¿y»uyHLWTbzf|„y¸‘Õ…šÀr‹¥j†£msžejŸaln8vwWgˆZ[ye'‚l,F\+8/-6":4LAdL+Zt4:OIKJ^7&bP#^p2re?Ÿy=Ž˜QV¹}]kok_7b\0XcAkJ;ah:huL‚bIÂf<Ù˜Uñˆ}ÿ‰oÿ§}Ú±—¿¡½ŽµŠuª„m§ufÊv`ÖzfÒˆlωxâzpÿ|jÿžxÿÀœÿç¿ÿìÖÿÎÁÿÓ±ÿÞÏÿÙ¸ÿ¾ºÿ½®ÿø´ÿÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÛÿÿýÿÿÿÿÿéÒâáÿ¨‰ÿᎃš :ez#A:,3"U6qV#WhH\zH)kG>4'OHgd8K~G9X;5:$>@"UL Sr0‚j+^“Z]w>XrDVm:[:Xg:Xu:[h5k^8Ÿs4h}WnL‡gD’[IZpk^r”T˜‹Etˆl…xY‰ˆ>U¡mbkA…L¾l{L޲Sž±UpÙc°[¹˜K†©h–«v‡§j”²g¨°jzÅ|¥cR™bmrH‡rFTkNˆp6Ég]”¯a4wZx|RšˆP‰§dz§g‰‹I˜jrÛ‚m«p’’JZ¹eÑhCrwªQCךbpÔ¶‰‰Xg«hD]CGG&DN*Zb(J&°ºƒLºŠEc<FN$HV'ST5e\-_\9¯mHžì”Xžu_œ?gF\œP¤ƒI`Ä{^8ažXAX4ED%B]/Yw5EmCo?6rRFN"J4!XZ S‚;0i5:IWl#;`5gc7o„O¡sR›£zIÆ€l‡=a„YDoAIGM7Y?Pr6ei/w˜WxšZ‚¢Y{XxƒUbxTJN3ZK%]tLau5xKp¢jU‚;p®YžY~„OZŠJ`|,Jx-Nq+^zHlhB†”s™hh±z€z=p‘PuO7ŸVÑÓ™´ó¶S¸z`H8JŽA<Š9/`"@N'žQ±Ü„’׫ܛRMšÞ_ªß~ÿÿÆ1w6yZ4Œï…ž—8×t•Âa­ÿJ{=lV47F/]H*eV1pS2“XE‡lJhL0fƒC€a9|O6œXd¡{\¸‹… qy¦]WõfnÿÑÿ­ÿ˧ؘ[r<bU<ºæ‰õ܃ÿ丅VQl.uw?¤yPDa)bx=m­P\|9C].@h!Mb;]S<˜šŒ·Ì˜·½›Ñ¸™“µq™œ` ŸY˜ÇZ«Åˆ˜áyªÔm³Â‰‡ŽZ„™_ižPQh)]r4w„Oz›V„šV›·‚xµY„Z‡—Ug<±Æ–Äz€žR“†T¸‘pœ”iÞz}uJ^n<Qd&x^Eª¢q¦±bj•IzœJz”U¦“`ïÞˆJjy?sˆWs¤hr—Zx{@^ŽI}±†ˆÎsu§Hˆ—P‚ÁQq¨CMw4XBt±O—Ål­Ø…¯`l‰L‚‡VzX|žOt‡b‹¶gPhrJr–Td•M”—lq}ÿ÷¹·È~Ü싲¹k€~V¦®p¡‹\ŽZ’f…X}’NmŒIj˜Mm†Np6{Kwƒa…¥]ÖŒZŠ™KkˆS–«SwC\i1\d>q|BknEtyFtƒd“ª‚v•‰±Ò ¹ç£ÍÜ›•¿v€™Mn@p¨[…¨[m—c™§m£š{ƒdFfT;GN-A^?enOl†TsŸyÓߤ¬Ã…~³omŸJf…LhŽDd‡QRnJ‡ vƒ³jˆ¢Zr}KdpEzˆIdŽFU‡Vz§hx“bx¥eq¨i†³t‰½cc—Ll’Nd„P}œ^{@Qw)Nx8Gh-K_6Pj<J]To¥‰¢Èsˆ™EHR3BZIUw,-:+BkSZTRoQb‚Zj˜gws‹£_iˆNRwPl”[g“Pn˜Xt ^}“Sm’Cc}Bf|c‚¯{“«cv~N]u>;S9Pk=LWl§¢¥ê՜Ưehˆ_]zhz›dq~WOH0UT2[f@aiWF}dDrn1SJSN*_n/G€DuhO—sEYš]FhqJDEYE(J^,ZTBgk=£dEvSXŒr|XOdj6QuOXS;vT7Z„B|lY´~E¬¤S¡ƒfímaÿ‚[éªvÇ šà“{ÊŸv±•¨Žx¢†jµwbÇ~`ß…jþnÿ‘qÿ xÿ³ŒÿÖ§ÿéËÿÆÅÿ¤ÿ«ÿ¼©ÿ¹¬ÿåºÿÿÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÖÿÿÝÿÿþÿÿþ¸ú׌Á¾¶­Ž©Ÿ|A€l>RF87+KE"Bs3?S,6B!T; Rq.7pO<B'ED#ZX/Ju97o@6H'@K#GU+VR(|g.R—WXh2Nj@w‚8TJPgDVa1da+^q7da8]}@|`7ˆ\>¥_FwYk“\hSw‹@n‘[™oF_Rq§Tj—W•ŒJˆºh„²zv‰]´Nž¸q†­p^RO]DPS.aq8f}C¼}QÀcp”gxZk„copTbnD“r5y¬ah‡P–xCpTw}S{‹XXŒCx{4eIšl@…‡]v†eyd;|ªTSr^fR+¦72‚¹q¼‰Q˜ìÁH•yDO5.8);0@[ §f0Çœ„wª„;ƒYFQ)<k8>G&Bd*WM2ʾ\’ÿ®FUa<L"LK"€b2N§‚LO<kV1OyFMZ)kC)WŒEXWCdL/s•N@~UYp55;.:[S]3e3K|-Sc+bY,îÉkµý´[»˜xLQ‚g…7ršz7«cZ],_k6Iˆ>[8P[4>I0F6hc0'aF0EN$C< \o9hmE{°TeÄrl¨K¡žZ”¿re­Ub†:lH„œDh–@P‚LEW$Ti0my>q[F›‡HwñŠàÿŸ=ÔsVP ²LAàЬi¸•BY.F_'tƒ;¢pq£[y®Yw•PquN݈fkö¬¯½ƒÁñ€÷ÞN¦Qåá’hÆw‡§aŒŸSum<Z]-o_E99'?4gA(rF1Ÿ];…–Vd{FSd:v_A¨}XKyD‡ŠP­Ú€Åñ®Mê€fdAˆˆS“o\Ÿ„Rÿµÿÿÿ×x™XœÐ^M`-SX,hk*£YQ’ÜŠN”RniFO|:˜´wÇÞ¬§ü¦\çMJ+hR?Œ_]sjF‰~„qUŸ¡b‡–V£ÂŒƒjÁÑ ÿø¨ žii™Fc|Bx\Kj)k|?zŽS¥\r˜RŒ‹oˆ¡rb‰AnyStŽT¨r†–u‹¶Ô±‘‘RœqOª‚S˜qU{uPRy>ZtB U‚}I€y>o†>YwM‹Ò‹¯ÕžÉûþöÀ¤æˆ“§UªÆ~}“Q†£g¹×±ÄӉе\¥Y“Ìg~¯Tj™H“±_hŸLšËt“¾_Žza°ÿsÙS<\1\”Z†˜»ç°†·f]˜Lx£Zp²Ws[£ª”ºâ­¤È{‚¢]y}AskJ˜œ`vW‚R…Ÿf€¶iw–YnžaŒ¤o™¢y¿YwbP¾³”µÆir Z…¤~‰µspžUok>Mr5LCd›Aan=zkGaNŽxŸº¬¶Ø¨¾áœÛ—ÚyšShˆO~¥{›Ø{¨b jq`u…]™i|P_u6E[3I]9\jOrŠ_˜šs¥fƒ¡^s–Tx‘ezmƒ“`~¨„˜Ã`qŽIh^<ni6^mPy—t¬µºš_f~Un…]l…Xt’^r{QevXv Vfˆ[w©]€”=U<g‹We…9>`<UuHe•€­Ú~}‚DVe5O[Ox™ihx;<a=X}hvŸknRe|Tb|_ƒŸyŒ©[m‹Sc~IiVY‹XSyNbŠP]wCff8G\@;bNo˜Ocr<HgCQzDQkI`j,00;S`sŽ‘x˜X’Šf…lp…V]mK?C-MN+OZ=jiS\YU€nj`frDvP|ŽiŠ®p¤~r}Iq_DOE\T3qj7‚~HW˜\[p`nM<Uc@“RLyl=asZVOLeS@{d:s‘P ]jVhiN]=×TAÑrG¼…qÙuðœoР†¨¦Ž¦•y¯‹lª¡p³yêzmÿˆeÿ¡uÿœŽÿ­–ÿ׬ׯÊÙ£Óq€ö‚‹ÿ‰ÿΨÿâºÿÿîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòÿÿÿ¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÿÿÿÿÄrÿÿÂÿÿØÿÿÊÿöÙÿÿدɿ‘» ˆ§Šg }^lcNf==qFAa;DX,,]2 7$0.S?Mt*>TC.Z5<H*PP*cs3W},QkURl4Dw?:Z2s\&>“PTY6ll.e“H]jFG[6EO,ea3T|>JP*ra6gFwb?ª|CŽ˜Q«‡[cŽ]s‘IEšU Z8Ô±X„ýk €“A…„`c—YOpUƒj+`i@Xn=Xs>SV5JO/„T.‚ƒP¨°}›eˆyG`^MZVDC]2A`(l\ FuEzj3fvBZ]Ult;a¢LV›ITŽEZu3P„>Py>Tp9ps?¾ƒPcèŠMeN„C3¥pM°ÕŒŒ½’[š…<T?/:$KE\/sÉ~°{•jYyQFzL3J.?N‹m-¿è†É¯Ž`ü»EgJ=H#7A#XB–s?]¶™Jv;Pj2ET,Zk3>H6@A(YFU<Tµm‹K=‡_7h*³Z"]‡d>P*E=jn#Ô‚QÒì‡ß ©hŒæ˜ª®‚“½Œ‚dœZoŽa—apªD—XUR05[1Ï<"A™bAM2+8,HCZ`0—H¾Òƒžµ„ÿ¦L6jb+FbCTk*Sd4p^(ƒc³ZYANw;86%OW/â¡`·ÿ¼ôí“cÿÂ2f0.-t'Ÿ²ƒbbN¶ftp.´ww†KT‡ADK&Eh-½m@“²ˆfŒ8«¢m}·F”µL–±s[A,_:*x‚M¸ß…jÿ„E£Dg¡Sf÷xec3rs<„›T³Û‘¶{¦lU©~dµ¬p¬Ë…ÁØœâÙœµæ›ßÚ¬ßïÀÿþÖ¸õ½ ·ˆ”Šh¥nKˆoO•jÅ`|ŒXDO+^a,¬€g³¶t}§bSl?C]8aS³Ú¯ÎêÏЉ6C!QP0jOBveV©‹b¶¥ƒ“s]Çžªžt{yM¡ŽeÄ♈²V}~LkƒDa‰<Lu-{{Im‡QP€8×pY¬yW…ž]l—Oa­m~§ydŠPxŽh¼²ˆˆQ]r8nQ5ic6vj:•\:óa’P7‘X>nCŒšQ‘\bŠO¬·ŒÌÛµÃà¹ÀÜ ™­hqCSj{Hk¦Y­¢ˆmšR¸jvœS–R’TrZÉטÐu|]g‹DXQ3ƒz\€®S| Ob–i¡ÒŸŠ«TeeLÇßh´JjuAWu?rzi¬¯qof@w•RW[9k„O‹–M™zGs§Y|©Z€ˆaisEq•Jj›GhL‘sZ–`w¦c…¤gŽ­i°~ˆ’kˆ•kv†N\w8_Ln£Dg|Q}s9ijKj£n¢»¤Ã╕Ǡ•§Æ…‚­p{¨uˆ¸¡°Þ”…›az¡˜µŒ”È›ÔÓŒá£e‹KhqOf€;C\6]m>jk=dxMzŠOkŸ xˆŒNrP‹tªµi€›ImvCqHj|]‡¥h„sO~t>Yj>jwH}‰FgI]|Ga‰W”[h’i‹±dw”B^yCr—Ty“Lz”Rc—]”»¥—GPT6gY@nlgš´gq Y‚¹ZhšcuŠ]x}HgVp“g¼j‘˜[}uJklAW{^z¥gw“Zs RbŽKQ„S`šZgžSi};H_=TsIj‚KUnJbs*$4&+EJVyNasDR^PnU\¨z]ŽvIaO,bn;j}IlpUqrQ]{hnojo_FmyLœkXŠœ\N©v2h}?DBWIkQ+|n;—oH]ˆ[^um[WAd`8w]6€b=]bAYKNzO8›i9“‰Kp°imtgcf=JYAi@<’U:šjJÕvYöˆ`ò›~¹¡Ž¹“…·ŠgÁt£±ƒœ‘‘ÕmeþtWÿoÿ“~ÿ¡„ä´¨¿¦§­…‹¯‚yè‚„ÿ„€ÿ¹“ÿò³ÿÿìÿÿÿÿÿÿÿÿðÿ¶ÚÿŽªÿ»¢ÿÿÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÛ¨ÛÁÕÿ¯bÿÿžÿÿï¬ÒÖ˜–|È—i‘žu{™vfj6xbGH4QFMi5Gr@?Z6JN+IZ.>]2WX0K{1a]<YEJnA__Cb|=bi-C]YR>W^/Tm@ga9:ŠGL`;\\*;u/3L0PG(Z^$Lg/<h7SO,qY6af:}r@™i?‘‡V…Ž_m™jІHPªcƒiC­¥Hn›yi€RR‡;|[Ex‹DMŽ]C[*\[&czGizQXX]bBbm2‚r8–§cIŽzde%F_3:M%C[FW ae-a„?QvPIrAu‚@r§UfX QU¬lZuFLj0ir8i€Gf‚FÀ‚AÞê…Ç­€UÀvU“®`‚{xeµexOb’Yy?v°}TgFd@42X:Q#=¢a\‰<tK«ø‘p^m€’Svšj8†Y?8(9<UBsA+–°fRˆ~JW4X{8BG6DG%>q2ZD'ˆP(žØ†ˆng¡UB|<¡] WŽXQj3±\0€¹~iZ›¸dx™ctL><jAŠR'WFGK`-Rs/Pd-QT4L~FmH-‡|T”¥l€§kNcAHB!qQ.HQ7…‹Dv²kƒHx§`—SL©THe <b"LT9O!5JQ[(œcG`¸k>˜P6R$LX1cH£že—½t]¼~JZ-0h-*4£W,žbg»j^h"o—Fg¨Um€FŽBwÎxYkATn0f‰:pŽ;|•@¡«DUt?VK-X€9m’7·­ZÏ݇»ß…ÿØÿÿÿñÿÿŒëy¤Ô{Àë™lºo{tPt…Bvy=yD'XH™[Y¥Šn§§t¯›x׿~ÍÍŽ †]owCtxE­‚Z½_¡ÆlDr+D0"aU3™ƒP »ˆ„Ìq†×gIT0\8-ƒ”xªŸ~n„`Y™oHp9vH<yaKpmRvxK¬„Š¥g›eí²€•Ùx³Í‹Ådcu@dv@r„FfŸNXu;kQ{¢dƒ©a²ª]w˜Y”¼ Ì™Œ¼~ža“Žkm˜CwjFq\A{g=‚`;RL.h^:YwPWy=pSAŒbR—œQÑŠ`˜Ÿa“xU–˜k“eZ‹kMiW7b~>|¨=JY0m˜Km…Y„¢a‡¬`g”J‚”H“•Jq—ažæŽ—Ñjž•xV8Bc(/8 G\,HM4ÌOk©•d{¬Xb‡H}Œ]´st´Pq¶jy˜Z^„A_t=r–LqqUŠªDv‘8t—L”ȉœÌœ¶è§Ð×t¶Á⊴¤^|PŠvRƒzO q˜ÛŒ‘¸xg„<If/CK$?L*h†Mz¤{í‹€Çd„¡e–§m¦n†¤v¥¼€Œ»v„©er†o†—{𝔫Ôxq“drf‘‚±¾©»”Ÿc~–Voœd bt’RkˆG\y>N\8cp^}­y…´|¦XSrGk‚`œµvž¨\n‹Isy]’l’”Y’•\}9EN*C^?bHb…So…St•\pYq¥mªVm~8Xq@bBaCXmCn‹V’^–ŸJVg9[S?jx’¹bz›a~£Sm…Mz‚NouNi{cŽºnލa~Xqb9ZoHVj[tˆIarLo‰[w‡eu ht¡`yšOX|@ExDN}DVhEPSaŒCIv=D{LaFVx7GJ*EJCdgP~mTŽo3bTMƒdBYROKCNQ93cF:BB=S+fW;mw=D‡\/glK;6LU XT9em8nh=cb<WpPpS>i}B‘vJ“‚M}kNjqJyXE•a<‡}Ke^ex_‡X@]s>gpSo|MwsR»fJákI×…p¿}³Œy¼ˆjÅ“mµx ¦€˜|¶lUìfOÿbÿ–sÿ’}ÿª‹ÿ° ÿ¦æ´ ÿ›ÿ¨ÿÄšÿß¾ÿòËêëåæ«Õÿ—uÿÏ‚ÿÿ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÿÿÿÿÿÿÿÿñÿÿØÿÿÿÒçÿ·Î²ÑÁ—ÿ¿ÿÖ‹£éŸf›­o†m\‚[l\Gr‹Xc¡t.‹_'3?'+N,Mk77f<BX7Qm6GO*c?+a€C[ZDML>LS:YQ6Ib4eW)Lz=jlZcx9:m8kF5O„5IQOG_+=e12[$:CAb%S])Mm+fo8RoCcU9hf4u‰C}Dt{ReWGX¡Nj‰JV“7QuBcz@U~@ev7h}EOe5cX7[a.zQ3¤hK]’pQeYmk;_~9ybA@‚nOh.=k0>O$]n%`C_{FuŒD€¡U“T~«[a¤Vp’Mz¯Wi°aT‚UXv9Y{=Xk?mW5}•NΗL¤ò­ƒex’\‰qPj¬Z’žO˜ eqYc•UFpC/V*DH Ql&GC]6¬_ðÿ¡5Ÿ?B$ÐŒ>e¸šif>3W$?T]!ƒ†I‡dUZ¥iay:cq;{Q/PO6KU3KC/ˆz2µëˆjƒuX„J@o7jQ!de<BK+¤r,`”s“…HBpK5<Ee V<}nDAQ0in.<t29)GE)gvCt±g\‰Ml”OŽ˜^r·}V]€{A…T£Ìt`¤YP3Uc6ÇVlzFR‚;Bq(>l%>€1T{1Zq8\_0„¦mm¬iQc9W\3n^8lmAd‘N™‰Tu}E^pAT{@nb8Í‹W{ÿ¢Zy+y…Ga¯qŠu7††Q¥š_nN`„>z¨U†¸cIK(ž¥\ŽÇp˜Áj„°UеW›»h£ÿªÛ{•­lù²cÿÖÜâÿúÊð¬£äœj°m¸ÆpØÿ¨mÿµ>N%-/4'.',2tM.ã±€¢¤`’¼pnyJhe>U^6W=!–H9Hv2F\1”^ž«mgI4€J¥ÀkFá\A2&g•¢[R}VJb?OU<YYA¬ne±zhxtM´®}€Ÿ]’™V~i§§tÚo–Óiˆ„Q[v@zŽJ†Xg‘I|Z ®vÔ°g…ŸN†£{²ë¬Ï‰—¹„i Xdz<\z<u†Lkh=¯ÙŒæû·“ÿ†­xÑⱶܧµqxºZ•ºR~_;Á‚nwrHƒR?\zFCj4<\5«…o©Óh´b˜Ðuj›C|€?}žOb6b~6›~?d‚;›‚\Ÿ©w˜Ìn…›b€¥dr¥PiŒCYS5mn?ryB… M³®_¶TiƒIfb?‡z^o‰GpžVªÚr|°T–ŸAbn9wV@|˜|¡Á‰‡¤o‘©xšS‚¯„’º~®†–¾xKk¼é¨“™k¨xˆÖdG{1A]-=gEuˆ¸ÿÁßÿ½×ÿ™Œ­FIQ4e_I^qFr‚ZpyKooNoOcuM|€”À_mqJmxXz¬k„°w¤ÂŽ–·yy¦d¯h{ˆ\wŽo‹±y}¤KR_5L\V|£‚ z̾•»av“g›ªgkuVs‚Upw[„qSq„bŠ™_`k1?U5Km]‰’Lh”aˆªu“ªb|¹j…³r}²[cvAa}CYj4e…9^{;buAnyP}¢eŠÁ^o¶l‚¾ƒ’³OlLXjFfwOfsIttN}v¤ÇqŽ–Yu}RfuKWFW†U[i@b_IujR|l[y™\s˜Yf™Sn•]u–^e]^‹gr«do›VhTp—O`ŒHZx2IW1@T=NeI~rUj{KXyV9mN(U<.63I3 HR'i\;sy8w’Q€”^`d=’w`RIVd)KwNQZJca>fb9slDvnIxkP•vL††RžWš~F‰ˆ]|yXisPjvIgkDxmFio9kxZWeWhWGtX:žJ:ÍZ:Áx]©…o¾kî–`Æs¢žŸ¢{†e›ibÀ^RßmSîvkÿvlÿšqÿ©…ÿ±Žÿ¸­ÿ»¢ÿ°Ÿÿ¥˜ÿ­ÿÿÿÿâÿÿÒÿÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòܯÆÎÓ©˜ÿ©ÿ´ÿÛªÿʪÿíœÿãÉÿ㯖žhW|szCAwW-@E1#”Bg¤z<l*QW29$Q8el/zBoˆH1yT50/`C9r?,<1<(D5AI2EV)UM(t\3Q†_0T?0=3]<Am&/PSI3Id&Ll4J^1XM%G]2Za3ds3g}GglKˆŒ@k°d€¤e]¨iXnQgj1~œHb£g^‡<d“@Qzblf5TAIU<\)X…E<fPKQ-_^5vHf˜_k†OcRz{>f•[WuXU‚IP€?d~1Ro=~k:–ƒG{Ïn~¾r_‹`hŠ?w”Nk¬ac›W\oF£JQ­}bqJ[p8sx@±|J«÷ƒ…Ö¦O{Jgc+“8Ž»de¥a‡|;O}_.9/EQ#Ug1y•LR|\onBæÙwfå·9pSaS)‘‹Qi©g`kIƒ„Bo¦hKhIY?-XD/yW.Ž¥Q–yXT†\zm3paCc`=¼N*Çí…‚ÁaÈV?}AERai'Z]4‡µbbr_a–GSxCOw)<8.hLWwMIrCSž<3h0Wi.‘DÃÚ“]‘lu‚Re hi{BwwOn—`{²h¥Ëv{¦^Q»\RŠC’‰BŒÿª\šWVƒATo+hb%pk(U@uR(xA0™T6ƒ·j†jAœ`?«rZsyN^u@bi@h€F|ƒKs–G†¡Xš«g–PWŒCgv:_g7`Y%;M%fk-g¡U…­T–´pz°u^Ÿf»²uºÎ•z†JN«†XÎR6ÿ×¶eg<tm5|µNí´Xÿñ©Ìò¯ÄÚ“}{HèiáÿǼqpU9?S9:@'uiD•»iÿä–ª¯p¤Ì…¥ÁsWžJ–yBcL4<1 4!4L%}tSîÿÀ™ÿ¦>n(JK(RÓÞ:W(¡]V`†INU>fD7imG¢rin™V•…fqxR~€R‘‹_†“e˜ž_sTx£_”µjg”Dd{@vˆMk†B{³gXj:ËžvcZ/ƒŠnÐú¾Öñξ𶖾~Z†Cdl<ƒ‘_šS©YŸ²‰Óö¾ûÿÛ½ÿ— „e¡‘o¥˜Z†ŠOV®ÍqÔÞ˜Ÿöƒn\L®³§†È}f„R}dEµ·qš[– jd“@j”@k‘:Y„,j8vŠ:Is/Hk/y“h’¹}’³™Å{|²{‰º}—¥v·ÚvšYœ’jÂÚŒ¾ö‰u¡L:[*_a/Zy>cPdzHo‡S™¾kužMwƒMn’grOPk@[O8U`6hŠc…‘htq»yl¹ÍÿîÌÔwk‹T—¿p£Õts®AKpO”Á­½÷®Íøœºðš¶ä€kq@NlEVw6Pu8ds9CP+TnE`r6}vG’¦†…§C`qE`xHvƒZ„Rm{S~—dtRvrBblG`kZ›j€ŒK`Knœw‡®‹µ„¬¯“¨”SgWQ•˜qy™j€¢okw@{dXŠ“`„œX}{GV^K|‚^rsIt—ì»q‰•c~§s‰¹y„²dn}Lt|3Tt(]y-Ob?_x?fI~™o™Ë{¬É©ÎƒŒ¯YqUkrNh‡TcyEWiJv—v—¤kƒ‰KXYq¡s‹¶jw‘Qe}KgmY}Pƒw_››d…Uo¥QZwVh”`e†lu¢k{£eo•`nŽSkF_Lgv?Vc1QX7V^HyrKe€hInd;dP-Q:+;.@)%S=`O-‚g@xˆM~›h\–fE‹}g]Qgu4G€P\dTeq;uq?¬cIuFlkg[tNerLt?±|Mƒ“TN‚eKeT_^/n^5Yn;Q_;POEID<Z6.\S)~X:‰Q2¡a;™ZJ¿gRáSçˆl±•€•‘Œ™x‚ŽeƒgaŠXI‘ZGÙUKÿnLÿ’lÿ¥ƒÿ¡“ÿ˜ˆÿ“†ÿ¨vÿäŽÿÿØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêÿÿÿÿÿýÿûðÿèÆÿëÎÉäàŒÙÓz°yqŸw·dÿ¶aÿö”ÿæ¸ÿµª¿¯ˆJg‹60E[S(+e='+&P)aJ(IU?IEA2M8L=8PA!…i2e†IRzQ0d?98*[O Rb;8]688&0:80&>R<@"uAA‰=7:E6?)G?$S^(1lN?@"F`"Ud%Zv;_c1kc1SzGpw<_ŽJv†Yg©]g™^y¢bu§iRŽefqA¹œ=Uelp7l<Mƒhqj2EKUe.OW*[M7[f@rq?”‘\±Á‡u¸l€[nŒN]Wlp9{¦bz¥jr‹AIKU_*u]*›ÅR‰À}sË€i¤h~šY‚¼f‹ÌzsÊu”¹q{ce{bIyINx3Uf4q~7íwH\ÿÉ=eH2<CBk^$Y‘R[w;JŽH€wDhWMY;DŠZ@T7Ýy2wüÆO`ZqDuO0rBb©nCK6sB&Z^›elvJZnCin:œ†;‹±sÂS.ÑyRl›M\e*˜Aš·w­„Zg™N\c5Ii6m­Qx•QhlP}‚E]hBV‡2I€E;O'ld6aH;nv@V|9Xp1…j0lG0™Ö„ ÌŠ‹Ð€_ˆeJk>OK/qb4™™byµ‚jY?gdA\ŒFÁšI«Ö‡†·dN•OT-Ji%bo'M­^ZL*`X,UT-‡zB]<ai/uo=ye7„`Dr…RY~<gc?e—cb–Szx>o{GWz:k‰GQ†?>^%>U#Zk,e3‹`>Ÿd…™f­»~|œsžµw}¨`‹§Yg©[@ˆ<Pg8hm6¾°j¨Çƒ®Ã\±ÿŠ’£tv†JŽO’˜M¶ÿ¦}ŒT«Ø¬ÿ¸¤î‘ÍʉÖßÃÏ¥²½€³Ñˆ|xOshN“¥mAK-AZ-.5‰ŠEtŠBîpÞœƒ^d8_f@ap>›’NLA°„`w«S}g?µmO”zQw‰T©ph¢Â¡x¨qr„XzdEkzE‘œhjƒM‡Ž[{•RZ‹@zS9Š‚N‚¹iÃn¤¥ckw<ac8Œ¦gËÚ©ÁãÎÇòÃe½UNM1z¢`l™Em¨Kw³^…£b£Æ„º¯yu–N_e2CG%kP8ZP5`W:u´]wTšževšH†SK|_AC>*U>2Ä~e^‰<xlCr„=k‡<oœKcƒ7º´TŠˆ;Rv3Zw=gzMza‹©m›R‘‘e¬ˆeÿÿ°Ûf”}Hˆq^ãÕ–ÿÿº²Ýv›©b`;Sf0Td>\‚3R[@†^acBliQx§]s£mnIN\*Yl4]g7c|=~“f¶×™¯æÐàõ¶¨É~®Í…Ž›Z™Òm•Ñ`T~L Ÿ¥Äò’®ó¬­ß‰ozCikk€¯ˆ‚œ^Xo+HM$HU#L\>fr5UPH‘¸—~ HgwUg|>lcAue=T{Ju›mkŠ?Z‰EhšYq™Z‹LJb4Tqh›¸š¤Ã¤²¾‘“†ï¶pcdX…z“²z”³{vRs|`ž z£¥ZoxHhvr¨„@XtT£œl—‡=XlNpj­}{¨_s‘Oas(Ga/BG,A`Fa€Eaw:h•Z†œd‚™Ÿ¾q“±zŽ´en¥tx©f{Le€Qq~_‡ˆYipD\as ˜®‰†®ƒˆ£wœWt€Ul‚l¥ kƒ¢j™«s–•ip—fl¦t kg†[[‚ViViŠK`h9\\<jm2IY8MmFkwFWƒvUqdHbV7eE#V4-9/F=(Q[/op>|zGxU_Š`P{fi[Mr}9RxNRoTffCco:§XH}eAglYftL~qIjvA€pT”sPW|QSqQSi2SW4M]0XQ0J_5I]F\N3R[8[[BZK0YG5XE-—D+Ñh5¿‚XÚˆqÑ™sµ ~¡«Š”‚~qb…aN–gNápPÿˆ]ÿ¡iç¯Î ˆÇš{ÿ’jÿ§jÿè›ÿÿÝÿüëÿÏ×ÿð¹ÿÿÚÿÿ½ÿÿÿ“ôÿ²‹Ž§}ÿ¯{âĈƒÊ­o¤y£™ÿ£ZÿÖyÿÖ˜ÆÔ©`ˆ,8X*!)_?6q3?@'*((1 2&&/*<A#e`(…<[I?P>:0->:%?T&AD3VE%??'1I)>=.>TPH&gE!JP3+PP)31-oA6y<OG/mj/|h/`zL_xEjlEDj8cF8xs7tŒRp¨gs³hz¨g£ll{]r‚T\›=N}\hn9n3]Žqpj=cwXQ†LIl<GjB„f7ÕˆDωv¨vpcZfUiC™t:mš[†fs©LLvERY,<O)VK#’’CÈp’É{È{Ń›r¡¼f”Ä}—ɇOÄ€0GE44%HB#CE#MU*@Z'šT …«R,›‘>5Fl$Ti*c]<M{AB@&Q0I/sv4†iGvVGßÿ€nÒ½[[W}z;iŒj¸xAj·:`GUC*ªY5æ®{ÿ¦‹Ï¨®—¸¤òÇxž~{­xouA¥B–{Ro”Z¦rG¼Çd]]k`=|¨bwzLbˆV„v:UUƒo<‚”BªoCT?QY#`c6XoCVs0VIa[6dq5««mp¨yaxFFX6Wa,YV0HrfHT•X]žER`1}R0©Ott]‰vF\u@Y|1Dm'bN&q€@Pr2py=r¬W†º\‰¢KŽ‚?vz?bd8 u7i™[kƒ/=N3lL,…˜_d¢Thk4^¥X’UdÎ?†>;T&Nj%gŠ?.V3>C#lkGzªdy‘Sz…Rf…EŠ¡a–·b†ÂoD„;„M1‚™Wo˜S–c=€Þoˆi>qi<UE·¨QƒÞzž–[Ûð±Ã€bã°eÉ~p_>sW9ƒG*@*¥b;š€\¹±ZR6ŒcDV(J1À†£ª‚œfg‘Jh\{?X`2`nDªqPukLeZG„m¬qax€g{Vµb™¸Šƒ˜kšbÐËž±mµ\[6v‹F_‘TtoDÅÆ’ŽÐu€ªT…­TXh.fyFÀt}«ËÍç˶Á’€­_lžVx“\ek9j˜OŒ¸gršVŸ¾z§Ö‚’ë‹aŒLešFLN5’WLs^AvT>dj>ž¹u¡[k€Qhh­™ì‚¡{[ƒJ`S8ŠSy‡?€‡9”G˜ŽF|ƒ9Sm6Fd3e\;zhK…“Nl€CygNȳáÛ€¨¥U‘˜P™˜j~ \¤¹m£–i„ŸZmtD\a?_„;k‘Qm–\e‹IQl9b~Dƒ•]‡•gu‰Nbi9`|?kv:`~;V`Bgkz´Â|gSŸx´¿k«[¦Ôr¨×^`yO™­„£ã°³Á–¢¢]`bEisZ‚nfmc0<P$?Q#:M!7?)MQ/@H_²Ö’h6TM6_U9blGm‰Ry°nŠ_‡_¡¬|¨Àxƒ¯o€¤bl˜Xhšv•³‘¯½—¡nuuyÿÂ’ˆS‡yd”™k ‹”hzq^°~©™LdgN‘ˆz‹p>k€a¦‚Edz@\wJgvSe{Wou]}~HYv7Mi<awJq—„ŸÂcf†B‰RtŒd„ŸsŠœ\|•r—¯s³r޲gnˆJel9Mi<Mb:IjBU|kpŸŒ§…»¢£Ä—¼y{·z’”]~Œ[’Žl˜}vµ“n{¥q{¨z€©n‡ŒVt‰U^Z‡‰CO^1<P7Ud<MpMc–Zr›O\‰w?€jDWWhC9Xx9OƒMruL}ŒJZUTfP\\>Gm@2`J^@:cK(Yy=PrL`fGmh5li>h_?]kCRnFjd@d\8giAW{I\UFOc2Cd??R5CW-uI.th/{}M…wQbI^pQVYDZS=SU1fN/ª].Çb=íƒWÞ’sÔ€µ•ƒª¹”‚—pb¨qZ³Ž^â–jÿ›oÿ¢uÿ¼ƒ¾ÌŒ«žÒˆp¸‡hÌrfŒ“bÿƒÿ³QÿÓ˜ÿå—ÿÿæÑÕá“͉}®ˆ¤™w»¥|­¥„¾²mÿ®ÿ«aÿ¹—¸¦yD€ .YMOi)P>-3&5 !'#$2+#79cP"q“FT„Z=Z@DF(IH.PU2Mg5bS>Ua5ffAC€DNbCMi8rm5KwIkd?3sP-A6';D63]$R=#Jv+]P1pI(RlAMm>Hi,fr3Œ™C¨ÃZ’ÒŠwȇrªoiŒcZ}VjuDi‘?L‚o`h<}‚9pšf~™^`qhlmGqj>LjXI@8_Y*9[9GB,bK#mv:„SihHT^Gbl1=c25F'H>¨R"¢z?±›‡‘ÍŸ~¨o[Žn^†TpˆKj–GZlD0H9/=".9"24;A=L&2M.GQ!ºPZè‘qƒHYpG1f2DH Sv/hg3NwIlb<‰p5‚wPÏQ—ì«MhnWi/Ok7_l7ÓuI©Â“TKá|Wšžƒy_“€TŸ{Yÿ¢fȾ¥œ‡mØN|œm«‚=”{FX¯ƒ_ŒB œ8|ŽH½™_c³}uY/noBwXHgiJ”N†Š[@r@Ne*d€8^ˆ9Kr/‡n2€k¨žeaˆR·ŽGVÀˆ€pA„´hÏŒc@EzOgT![t<s`2OO,a„>›Âi\²lTšCOo0Js.<S#LP"‹‘J±]rzQs‡Hj{Cp~7o8šfh“QŠ…L}ƒD}‡W,>1L6‚8˜Ëiœea•O´„NrܪHŒMKd DI"w~A<a9;Q(zzKazIn¬Yu¸pŸÛ‚§µ|–Ú†ŠÃgg¦K6w7J9‰U6oÃsGd-Iehx6r‡B‹¾[qtE¨œgvwRj_;nY4„~JÖç§Î즔Àa—R–rP‡xL»{]‘UB~oO±k]ŸlT–XF‡IBw?3uw@¦©hËiŸÆf¦eE˜‡NkV?qaLpzI›ºsv³izŽVhFjZ‘”{yžO¯žg’Ät’“^^€=b…@b€?ntZrƒP¢Ÿhk£FsŸH‚“TpT’vc—®}Ÿ·a“KÛx{¼ra‹F[—>n“U†˜\s•K†ªi¨k¿°‰–ˆY‚zOŠ‚N‘`“Ñqv€JZZ5sgDž|T¾ŸqÈ̳‹c°šdvmK§xTid;¤xIˆ5˜~A•Dˆr<|=qŠ>\‡KxŸY¹m¥ÿˆvÛ^^‚JѰ…¹Çr’šExNœ±v« nŒ“[½“d¼¤{“žcÑÅ}j—<††P°¿o‹J|q9at;ou>rs@ƒ\›ÆfvªT…´KhG„c—²Žo{7=3"]Q;e…?ƒ•X—Æa–­UmžSo“^‹Udz=MY7QHEphGNX$94'RO7Ze2ET+JK/MG4\e‚¿èwcu3JP0\W5Xk6`s[—”r˜Æuвk‰¿m‹”r’¥nƒœrv©pu£z¡tŒ©z‹œyœ˜}Ï´¢Ø¸l[‰iƒ–y™¬tˆŠY¤˜p”ˆIdyR¢SwmJˆHq}Ds‹Pˆ€Lm‚YlˆWŠ[~„LXwJ\vVjŽ}²¬™Ö»rw‡KgnR–†R‡QmzEdyR„U}€No†Iax,Cb0Af8@g=OtBNrdr’tuŽx‹°¢²ŠŸ¹Šµ¹|™‘SpOpwKjbF`lQe€W`\u•fzYlŒ^o¤fdL_y?^u@_kA_†Sišcs£ZV€eKm`C\In[;…~3‰‚Jq‡VK”],m_E:GMO-;_@=J=TE)T['c^/XiGUgJd`;To<UXENm;Qg:@d?bH6`[1=f?GWB[Y*K`)Re6H`2b_3tb,eqCeoNimDw€Nu{XZgNc\;[b1n^;›T/áh9Ñ‹[Ó}lµŽl¨’}¦”vš‚r–…j••c¤¦d¸™j͈fÿŽmÛžnŽy]egaPÐaIˆ±e{•j’>Ê›Oþœ^ž‚ÿ°‘†¿jv}mùˆ`ÐÁr®½•ÿjÆœd“{Ly]BK !' `7({662;$=""='BRK]$lf,hAl‰SPwJYX:lU+jx<kdBzpH£lDÈjD¦sL¥x\›yc»ŠkúŠW´Ã‚€vwm€W_bRM]7K[1Ac+SN1<p*>\-ii-h‡EX|KWlGzy6x­Zz m¬j·rx·}€¯jq°pq£mr‡NJxjSN8†y0´˜cY_>?SGU&UC*M_:LwMQl7PM1OO0bk=b{>U_MGA+T?I5UfCe_-Aq>w;*“Kÿ•{t›¸d?Œƒ[l¿_L]Upa4wšJG³O>x@Bs>@v8@x0F[&Nu-X_+^o8vO0F–iH\+@a3GS%be0]ƒIoJ+d„KÆ`6Ó—^Íî£R›Sl>ƒ[6U|JPb7‚~E¸h\ʆZ‰qgˆ]{jFv„S…OàÓ{ž‘|mzY£n@…ŒW¹†Oš~Qxoq}@hŽ<qŠH‹›QQ°WNX'?\+~d3›•d¯¬_’{\Ä‹\¹lIhQ>S\'Ko.ai9|†M^dA“b4•mOR³€UtA­œNs´~¦l<dpHEˆHS}8¡ºaãÿÔÉܼ¯ÒŸˆyZauKZ|;d€?to8`kF`U„j:i—Gu‡B…¤dcJˆ8{•T•ŒM®{“’EêÚ•o»hYz-]ƒ8;_%‹ƒHRˆ7žBœÅœXŒDiŠD\‹:c}V^ŒQTe?R€Gtk<ŠŒVf<.OFyZ3dPCQ2!•11b|_ol?Y•QZh;<X!:6_X'¯^ˆrL©€ay­f”Æm‡Û‡žÖ„ºãÓÿÀ½ªv¬¬c‰`¢ƒYŽ~U’rRëwkÄ—n»™yã“„»”ˆˆzb€\OpgV¶žqŠc‡<9“cRfG‚Z?®~m—ĉ½Ö£¨ÖŽ¡‘S¡¦s£i ‹vi¤Sz’Xi>yO¤Yr•IX™F^ƒ7qfMœ¬evŸKc‡Cr™MÑä ¬‹S|SC†¥oGe4kxObIY‰AVyCqtAQl%br5j‚Cf•D«_N‘_TÕ‹…ƒ³Jx‰@Å‘}®Ž^waP¥”fòÀnìY›VH­UU–]JšOH¢nR{C~|G—•Gœ„?uz5“Arm@™PŽ­hš¥ZŠœuº„µÏw²ÏbÞ¿x±’X¡‡Mx„GŸši•³Qv‰K c–¯z˜­m–Tv±Wp­kœ¹gu|;X~1Xw@fy4XJ=©}NxŽCrŽMt‹Hk—L{›s««jwc<DY-6>)dnJ•Å\¤¦M©°_¨šS]{<]~J„—`|‘\jzQ\_Heq8EO,BT+AD,Tf5HT<VW@{{‹œ´\fnV{£[p“BTj;bbFiya‘³†¡Ï•¶è‹V‡Šm¤«—ªîޣ唒ºxš”dš—[duTšŠ}͘`qtMozWswdow„[ŸŠn™ F‘¥QiƒO—\v‘T‚Jbal•p“¶‡Á¶¯‡WzOkuMph”¥…ž©‹«§i‘€c™„[‡‰Le€G^wC`b8]M,@U3Kh;Mv3@h4BaBVSRƒ\T…cl“hfŽow‹_{‹d‚‘p› ezœU|€LiyG`uG^oL__BLcRa™fj£_r©n„¶o~ ZpzIlsF^zPh‡Zo™Yk†X>SDJH9O`/dd0P]<O_>u\5nn@G‹\]sVHsE8nVHG?HM+NV2bd8Nu;KqL^_@Um-N_:[a8Ys6G†DN^GEZ7BR6GU0M]+[S,JY0Pd>_Y5k]5htGagJvjDƒK‹‹[^’i^r^Nj=Pf>~W7µp/¥ˆP»oa Œ]¥…rvTšŽ`‹¬f—§{ˆ·w‡©zœ‰_©{Pª€U—‡b‰”ZÉ’X×rC{ªt€ †š™J¹TŽ”držZwbtO_‡XwzTÿ_C·®I”® ¬‚ZahLkiH"yH 9!M)_q%8mO7G6;/$"77"IA`X)ox9sE‚˜X]°n\rZbmAhzCfq;ekAUyVmX>N_9SD1nA&ŸT.¸—a’t_e]pbAkb8UaSOP6LY3YH'cw;Ts7k€=R PTsUZ`8VR3q)g eª^‡¼xŒªiz»xq»€w«nt¡i^nR+aXF,}i$]„aE‰=2HBMI&TQ6eX3]g@JsFOeH‹HelOa[\W:HX3_S-[{2^aAMh7S\?ŸƒH~…|ŸuAPœ^jQ1g»K8AI9A)QH,ow9 ŽT¢á~Ò„†bf¡]|JLqPRY2Z I‰|9DJWA&:U+ET,[n>d?LP4 d1y•vͳ]÷µfqcRcbQ4Ma?|y9”€N†ƒQÿ¦[•ª–…zYaAqfR¬‚LWMGÐG/¸}k p¬[Ñ{Ž•^tu_zqGt‡H‚Œ9·ˆN|­ub•YK}Nb[&ÿ¢X”Š’guMgjBCdE‘LWt?jw9x‡TG€UFH*eH%xk>_™opN5ˆyD„‡8†„FˆžP Æ£ªŠ~\Kc5€g/e„T^{@dzJov:V‘Oqd,™³ii~PgdF}¢[pU|QtˆV­º]z·t©Ê~´â~”Ô„¬ÚfÃiE|GU_3yu2•¿n_t4MzAhx<Vi.Á›^uÄša…Kˆ™cY”dXQ,`^B5K-3X24a/9P"(5*@"1I)iw6™„L^{FK–=?U)Dd*eu*js<UM1¤:0À‡os5škS°¥w¹Ä”Ôß¡¨ð Åª{Õ”gêeYªeDq|@‰Rá˜q¥xvÇ‹}»˜€±„l„uCOC'H&;-X/)®SEÂOB©XNnI9–de°¢ŠÁÖ­ŒŸ]™nCƒ‹Yt…Ub›K~œ^dnJi€M{Œen¢]kzOi¢M}~Ng”Ro†Mo¡YqžP™šXUšF<X0ioIaH7`BTr7FM6RO:h…>Xs-Sq9k™E‰¦y·Ö‹œa‰“P~´^zªY…SwzT¨§{Ï´ƒ´°`]BwS>SG/[94SJ8yuO“jB†}I¼¦Wg_0|tK‰‰OsvKƒpX¤‡_]]@u‚_—°|Ž­f‹`Æ©m†¢b¤Ž[‡Iuu<r€;faDhlEoO€—a¡Â“»ì£ ¬rˆ“UW‡4Gr3Nm:Yw<olFe{@`ƒF{“Wn„>bpW—¼p{xC}ŠPœžu‘£[xqJ}~LrWŸ`u“UX†Q~¡Z޲l£lƒ¼{v·pk©Zh…Pu}MvŠK’…P[b<\]LŽ‘r‡¤J{‹\‰dnf^–bf—es‰]z‚a˜ …¼Õ™šÄftšo«Í«Íÿ“¨Ò„«f‡ŽQ}ƒZ„‰gŽk¤Ž^…qNhuKkwa‰•rˆ“t¹Òš´Ðk¯_ªƒÀ¼{¾Qt–z²Ñ´Ù¸s›z]]ŒƒF[uO_~Z}˜kœš‚Ùg‰¡U€ŸOt”Mo…Iq‹Nl‹Jbq6K]-D^+CQ:Vh8Nu:Nz\\“xx¾™’à—Ž³]ngx›ar†Rq’o{¡h‚¤i†‡e‡†Vx[“UwrGfsYw£i„¯z… cv“`r“bzˆRh{Jh€Tr•Wv€IfiS4J,HH#aR$Ls6Ba<ZJ7]U6]fCnhF}xJa’NX‘g_q[MrEYmFPl?UkBBkCK`BdT/Uc.afEoj>o‡AS‚VJkGWj:Gu8>c?MW0\Z-Sd3~d?ls6jyRnlL}aB€e9ŒzGo‡WzycguQ\pQ{cI˜o>|N†kXˆiRŠkIfE¦qJ–žbš«vš¯z{³dxy\Qf=¥J•¤]RŒf[N…v>§lÄ£bΠV’ŽnXuZWrYUvBZm9Un9ªX0…e)hyV>mLeO3as:)U,80#^>A|8DUO*U/.)0!FEDV:ŒG'gEpqe„“M¼q_­…v~igzVi{Wr•Cq’UV[b`IM[5FW8MF-–I*¶n/`‘zk_ONL4cB1fpGhi>2Z9c7!\†9‰žOl¨XÓŠ]@âw-;SG;s_&|žSk mdag^Q•Dv¢cišgStYJg</VLH6#wd*’\Xº^OsWIlCU`6VW7JP?ze7œ’Tb‹glMShl?SbGBZ3WP&Xq2lm>jL‰VN¡{J_H“…B|šj–µeA\X2-(2-!HC#®xB¬á¡€”™c?Òå}jЙªÀ`UԄȉS~÷“dÅsY›R[‚BO}:gpByw>TkV/fA;Ï¿uÏâ«dÒ²eK{¹uGoPVq5¡f7{©qWiOé^=¯€Í—syxjškQRJEaD,åIoª‡zT?·xT¥£pw¸LnMxR/zP†E¦§dª©whXi˜L–˜L†£ržU8nl[[B©}Ltâ’ {;QF7f”VPP8WT4yyDo‡Kb—cb‚A™‡A™¢^«·|¨¬y ´x„ž^NjFjx4‚a8rl<q¬`‹–SW|:qj/Š}LeljZa9kZ1µv_ƒFo bnv7„p<€nLÉÃyÖ“q•°ƒ‚°]·š\|›qŽšnŸÆ}ZœR`}:sxBBi(Ia&ƒx7Gi0hB'‘v[`u\7\1CY3o‚bp—kQjTllCXd?†b@wa=_~AooEQlDJc5Ka/A9&I.¤[‚€^l€GfˆCS|849:/sd=¼ŽkÝê«kª~Q¢w[ĉk‰a“±vß©t®â|Ó‹p­´t¹mmsBGi718!PB2f8/’RE—vbˆTDE7.K8([<+y_G–dN§cB–bGSA.p‡Fn€E`a3Oo6eC“KwŠFh€E{œ\¡rX™Go}Ffa8[w2d…8C<(‚~Y^>Tf"F['<Q)Kf3W`6Gc,Xc<„ˆJ–“k‡¦n“¬f{§UŒªc´šW¬Ÿ^²‰ZÌ~`¦žg¤¬‰zÃd|C,ƒG=lS?¬„Vf@(cF4rcCÕ‘z[\6Õ‡k–R~g=KH1ˆ‹[lUC`}O|—h«sŽhN†KŒfµß†˜Å_z†L”•V’SŠ¢Y~›Jˆ‘Y‘žWNx’OvŽJz¥RhLcŒHp‚Wx‰MošUkŠEw†Nt—QvœTuxE‚vTƒoR“m™Zc{AdyN¤­y¶¿z»óˆ¾Ra|GqpUb†]Œ’}¶Ñ¡¯îyš¸eƒ‰N‚uMzsMi‹Jdg1nŠ<f‰Ec‚R{¯’»Ë¡£Ä”µÇž¸È…‡¨cjzb§Â ·î¨¤ÇÀꜽó‰°Ñl‰ŸMjlAur]Šœc„e¬—^qoO•œl›^„„h|¡²ÿåÄì›h­º™ÙÒ¶ÿÀfy”Qž èsyzRk]—šYy’W|[‚e‹‹P`wKo“i–Ñd©Nj—Kl‚>abJ~ƒQw‡c–£Soy6KR1RcAb}Pb“|~Ò¸×ÿÌïÿŽŽ¨am‹u‚¢v†•by¢q{§ry™c~ _vŠ[rrTykFob7`vHaˆRi†YiL]vZv}S~yUr„J`tMaxKhh>[\OBS(@M(VG)lV*[<YyHT\CH]=Id8e`3|l9u’Yl•l\eV{VWoKMl>Hc<Jh9eZ0\[(IjElcIdn7YlCfaFQo:Eg@Nd?Yk2^v:pXGkB‚yBf~Y]iUp]B€V2„k5pd@}cGk@u{OˆlS’uCi€U`]HZL/fO.¬V9­f4ŽxQ——_‰Ÿa‰dbŒ\dZOwG0€\;QIVf\ze8iq;}kMv—RdŸ^k‡WriHWk@M€HVzA7r;TF.LI SX(Px3L_=sP>AžD8KKCC#it/TœFP|S:o=+Q5A8!OW"FP=‹[4ƒœPmµw¬YxÅzX‹‡CVUX:8ƒd0l‘O`~YbsEnaBfS9^S7XR2mS=”f4\wGHZ\O='cE&Ih1>d=59%gT(’=~´jV—\–y@2€=OHB]z2kˆPa¤ER†[Jg7GM3YG#OL0=U0I`/OW)RdCLZ6wd3 TX¦YZSLJq4AF&NA'sd9U€WPQ>WY>GfNZY/nkHLŠ]^xC\€>z‰D•Sw¦lZlp§zGÇf°¸lŠ”iChM@4:=,„`4qšb}LWRƒWSOAÔœGäï´ÿÄÍñÖÿ¡Õÿ¡‹ä™dÀxWy\gu8N‚1Je*WQ3Kt<¸o:´°·â m•ˆ…`DCqWlr6[„GÕwCrß™eK>‰_C§VMrZw«jixT|pF—€Wã‘n‰¥qNƒc™“`UŸoŠpAšˆN¡wEÓ}\°«…zÔ‚f‹M‘‡GÆs`¸gy‘M¨œ]Û¬vž±wV‰IdY1s”XT€Yfi;hmJpm@q·anža¨šL޹s{sGq~E²ƒFˆ£dy”TdtHFf0Xk&€p3ÕwP‡•dHŽSdl-º³[sqL|~K»dŒŸapfSuL…S*S_>x2M_.|^>ty>€E•O­¿Œ°¦e|¸Vm›IfªWmŽK\u9Q”Kee2Xv3:_+5h8/08K'WlD=tJvpGcsWWk3g±\ų~Éæ­[¨kS‡PLt(t˜OAs@X5"ÔgRuE)¨qŒ™Cß¹}ž^‘­\vÜpIw0~l3±˜p‚F©pO¼¶‰¤jL¯Ÿ[À«sÇ«vÿ®ž´c­ˆi®¯{€„M\`6wgCe^@vrO}Mœ\KweQw}GljC^X:—[E¸×z¨qYˆP†“WmkLed<fw7Zm?ef;nIt†Ja|:^•Djg7a‚L\<\x4?G+Rp1?E'¯qLM[(N^4Nq9eŽD]‹JKO,Tm;^w?bl;Zn?w‰Sw«[…¤r›©pŽ’_¿™p­‚Z¬…Wº“c°˜u”±‰—¿d¸ˆUÃ’^—ŒLsŠM‹‚UuxF§|TžˆXv{N°~Lzu>PcP‰¯`x sžÄ^x•^޽x—”e¼d~I™TÊ£\ÇÆp¶ØcޱP¦Éx©Su‹MtJm˜BW‚9[•V‰¨]pPlE}‡Eg{IŽ¢S`w7_b9k‚R…ŒIm}K¯…[Ûrç½…¸zY©`¤°zÆÁ|ž©eÄ¥m¼Àxf“K[i<wkJjyVœ»ÃùŒˆÅm€¡W‘Ž_­²g¥§Vwˆ1Wt@pr?ctFІ^’n™£f‡¢w}u¦z|“U{ÇϦ¤Ân²Ú{¥½h£¹`~”KYr>`jIm‚Xw«u©Âwo¢q¯©r””k’œ…ª¹‡›¢i’ŽqÎÓ£ÿêÊùÅŽ¾³b¨x›¦t”«m“¦h‡˜\‚šY}ˆ\‰ƒD]xDbQ|ªh±Íl—Êaƒ¶Od‡:P[1U_E`j_‚‚[ІGrr4EV9]~h°¬ØÿËÝÿŽžÉ_l€Sil£{’«px™^k‹gv–_n‘_uˆV}~Jtq>qp9XkQgXjŠP_‰Ud’Qc€LdnG_xFeK]ƒAVDfzA;F3BL0SC-^Q)}]2`‚HTdR_WDLq<YgGg\5jtEazS]taar^GzNGgOJZ8Ce8f]-e`,Wq:ShCXd4VZ0T]3O[;Y[<ed4wv:dnEi^M}fG„oDplBHaDOU<_R1WM#MG,ZM,o`-i‚?†~U€mN=oK:MBEL)KS,YR3pN-fM*me=bv?izK[pESK:a<)bF'Qn8MT<VZ0Ja1{g3˜­F§Ýu­ð€À{“eƒÉgqÂ`Bžd9Y@DY"]c&`~=3vGvP>X™>[j^g`9nw@K}RP\G;h=:S7ZE0V„Bw‚\z•Jƒ™k‚¥x¢¾p]½|9poA>>UE)pk;suJ_‹RfƒFMfFPJ9nK+ih7sg?„l?ygFMi[bG6HF1VQ-Eg2TZ3‚ˆ8Z§Up‚LS“Df€KVœEr„Q‚s9h˜^pœUHšj3G,(? 586=I‰@Kf1me?]nEq[Ir–JPšOTbC@w4IQ1tk7NzTDkJEG/c/i|P‹xLx¡bq¡nˆ§lZ†Wm^A…N¢w›|g£‘X¬Šh{²a€cUn˜]U…v{a6a›[HmHeƒIj“X§™`´ÊjÛáŠ×ížßÿÄÒÿ¶´ÿ’šÂ‰gÄ‹€rpXŠJMM;]]&buB¢¬Qv{oµ‹T„ˇq|i<c9Qc4€ŠBšÂiþ»ht½Âh]<xpCiaIlg8‹_+©²f‘½vÇhÒ³ƒd•gq]:¿I:v¢zP™d€ƒCjœI–p<ŽyUÿRk³z^£]_b-¬Y6²Õ~Å‚kº®…´…q¢W’“J¼€Œ£oyŒ\«“Z¥®y¥¢ey“[ˆš_§r?`’]€ƒ3[|D…p6³ MrœWFk1Y}7b|9LyDr|7ozFLkAti;–àz¬žcÉöšÈó«±}]pMP`6Ok;[u1P€8Ia8X{AayRUl= ºlk>[u2>T#‰Y5rŒZMi8p„EO–[Wf,Œ¯m•°„boDQy@Fe*Sc0Xn2\m<O’J{–Q‚†VÉ”\¹’j…œaªl„Ž[€¼ubU“nKwh;\ÿ{aÿ~ÆÿÍwã•Ê·]ŽŸHg€Nfe9riCúdXÑšsÃj\„Sÿ–wüܰ¶¿‚Ù³|üÆÝ¶|¼‘g²Œu vdÿÝ®¦¾u¡¸mŠYŸ¢\‡P±gNè‰{¿¢†›}V«‘`›‘[ŽV~]…–_q~Fjx<_~AZ[9Xz;GZ+ptLjDOc3^pA\‹<lH€¸ue™[‹…LwR`z?]s;\r>\U8Hb(H;&mF5jvFs¬Zeñp{¢aw|S‹ySŠzR‡r]•‘n­jœOÉ‹bË‘e~cž®ƒæì‘¹Ü¸Âf™ƒZž“a’ŽQ–ŸTŒŠW„’TxqBœW ©}wŠO¨„}­£XkxQ³¶„þ¥ÿæµÍUˆ²ušçsªÄ}±´dzœY¥d²½gz“QbŠNg’Nv—`‹¡Ur›BW†B^@kŠBjˆP¤ŽNu{6ooA‚]q}H™d^Ÿ¡aƒ{aÅš{· h¥¸t•gš_lr>`v>zs:ypGm…Gcx:akT¦¬£ºà³áz‹¢^•¡_‘¤V‰•?iŒ8Vw=]v4Lr4q|?d„Kt†Y‡¯z„¿Œ¡ÆŽ¥³cavFyHI–—Qp†OxœOg†HO`DQwS|™zÓõ¬æÿ¶Úÿ³¾ñ|ƚlj€—d—x݈Úϧÿß®ÿÊ„²Ìºè‹ž¿|˜ÁrŒ¬_ƒªg“¾]œ•Lr‰Mi˜Kc’FhI‚¥f§¿h›ÃZw¬DRf<acNwe}–Io€?o{=TlH\un•źêÿ”´Ûp“ªZ_zRa€eŽ¥ƒ³³_~RtuLds^{iˆ‰Tƒ…N€‚H`zPp™]v[~atj}§cl chUb‹Te™Xn—TmŠE^DLW=AX=BQ5UQ7l_5bsAfvOjgHQvG^[NdT7nl<PtIRcV``IPt@JxNVW;Vk0ao9Zn7Wh?M\:RY,\d3Ue0IY?UB7M\6R\6XN,dU1a[6g_ElZ6YT4DV<JJ/EM#=?'NB&aX'qd?\tFSwVHSBNQ;LY4EW9<O7>F.NG#Fc,N;,OW'J]1LC)S:&[>%Q_8>a;E82vB$Ÿ{1¤ÒV²ê~¾ò†‘ß‹§¼qÑpN‹i>UDLX0mb)kŒAc“Zb„Mr„L=”N,NML9!Qn(J\9Ze8YuFF†PxqP`VUUWdh;u‰_ŸŽm¦¡ogä`™ŽPuasXBm…AbwU_iSfmCh‚EjtHxo=Œ`FyyBltI€Z;inKLiNVaHZl<_o9†–IX¹d\xTlƒ6g Si­Tn±V9†TF>-\P%„i+6¸f;K?BT"1T6=D.SIOU4[n=Wf<c`AtyH‚—SL©ZJUFbe7]tImmK[ƒPhyLxX6pMacIlyIs˜YƒŸu}k\ykFgfL†uIŽb|¦_m“WMgF›>&n¦f‡†U—i{Ãgª}syZ’Žf‰v^š±c¤ÓoÅö†Óø§Øè’Áùµ²öާÁ‚åÑt£‹;N?>)_S3²·H\ƒroa:–„Euºw=qKT\'o Rµ€kŸð†Æüˆo¢“|ŠKw‡SaiRxt9ž}Hû©gÃÆ—Ú«y“šz¼ož¤hx²wwŽfk^‰ªerMËU|Š×H>qbeŽWNk=rN)Œ~GžšV°”U’ÏzWe•‰I®k¢šh¢ƒY¦‹Zª€Yk„]g˜OXWQe(ˆ†>Ys={q<Uf5N[.†g,v~X`~L‰‚Dc“Z_w<go@Ij1Œw0|Þ ÿó°úìË«ŠpNpFJrDlp4Y]7RhCmt3gmSnK9€Ur†TRlIV}BCc.iM&ŠˆG‘gdƒF<nIOk.Œ°o¡³‡pœrip>‘vEŒ‘Rœ’Xo¦`zh@fpB‘›dNl=\N(KI'kq=‰§hf©WO‰WoC.ªsVi’^—Ž]žvH¶X=ÿÆ©ÿì¾ûιÏò½FQ.>D)`A+’eA”V:×”kÔ•^¶Œ[¢ÂmÿêŒÆü¢ÔØ™¾ì›¾³€ßv§|W¦z`†|B}ŽAÍ—hÂ{g¢„g«uTšmL‰sÈhX„­b“}U„wG©„_¼Ï‘˜¬u[q5an;yj?iy@\^8„uAUt@mvNbjFU„BT[4}pQuˆU|zFoj<RŒ;NG.-?#/L(Xi8^vEvf>olJÙþžèÿœ«©dyOŠtR¼•wÎé’›á|‰–h™bÅ yÁ—w¤›wØížåÿ§¼ý‰œ±a°‹a×r\²¥O¦Ìe¨ˆbS‹K¡¤‡Òÿ•»di®aa…;rmL«žoä˜mïÕ‘™Ä]žµ|¬Ç_¯›lŸ©Sn“E“˜apEm|Y€“Uh3cwCu…Gj…@lAj‡Lw•J“Yµ—Vt†=]|B”]›žP”L‚pJ‹`P®wb‡zXƒ¥`¡`’[_ˆH{™ct­[tUz›Maz9]l?•{{µÒ}ŸÍk|˜N™o¢­\‹¬Uw†=d{9[€3X|<bQxšVcyMuŒY}oW~mGpzP~¡JaŒC[’LY˜Rj’Qo™Zu¦wŠ´t›]o…d¨¿‹¾â”ÄâÁç¹ßÿºØÿ­«Ø†¤¼“Ã⡸äšÅÏ…®Ó’®Ì~–³kŽŸe®t’ÅfÃo‘±T~‹P‡¤dˆ¨[q”Mf§Ip«T€½b“ÇbŠÁ]m–HZ‚Tv|Nnr9azBf’Nx™Pw…g©Ã”Õçq‹ª^Š©Vd‰VyŽb‚V‰KklHYoNo{`ЇS‚yOk|Omƒaxš\~§aj’Wc~PisSp|bŠ—f‚SnŽ]všeoœRb†D^‚C^V<_l>VbGUaCrc<kEfwXVwNIkHZ\@]`5^tAUoLLkIXcAdg>E|IMQB`S,ZO+QW6OS9`]3td1…i<sr7ja=~eETyEPYB_Q/YT+SQ8XP3`W3fK7IN3=I1LC&@L&ID-JS0UW4rS*iz7\€`EZKCI5A9&EH/CO+HR+5R+=0,I;VV+LA)P6)f>"qR0?o>&68i"R¦¦K¡ÏvžÎ~Äub¢j5gZ!I84*KGh^#Oo:ZSBds=xiAE‘Q0eJ]K&A|4RV?ns5‹žW‰¤jX”jL]_cC8eg8\{PhXL²gH§¡\då£e|‡h\FS`=gI;fc8gnKy_;t|I~|N‰sG[o<XRLLT3G=,UA'[V9Ld=†u;c±W\ˆ]_ŽQw’Ewª[ˆ©cf²^M\0}JG1(‡M!X·R:VXK;(;Z*IG.;8pD%S•LD_<DM=kC0s„JW™USOERX5~D}±aY‰hI{HS[8^T6`x=ruNm“X@ZPVI+P]3n{A{¡Ye€T€~IY—N8MH‡A.Œv:‰œpÄ}ŽˆržyyaZuQCˆ—L›¸XïÁeóÿ¬ºÿÉÕØÎÿª¨û´žÇr q¢SZN‹}>oïhf@a”Ltc:„ˆZCŽUFU.ßz:†›n¥–|¾ÉsÏÿœm“n:j{@`zK~‰AwW•—X·rZs–t…[rˆP…K¤rWmzgvpKgžN¹S7Š•iUJByS-ozHn…K]JƒŽUkŽdŽ‹M»\‹Ð˜rrKˆ¹jÀƒUµˆj_vZhm;lq1^‚CcpCO†MsŠ7p~Mbf+_f9bb0UV#yh6“v?XnFXm/˜C‰“XU}Oš‰<ÁÿÁÅ󿥇zrƒRA‚P.ptQWu3m›_clIlq8k¡_Ž«r~¯uNk7]t@@€9L_&]b6 Qw‰PtDKg;‚€Izª{‚”Pt„Wa¡YŽHˆ¿‚öƒÊ¨u¾–hel8k…Xcx@ySGn8RQ%yrN@:#TO,‡UÍ„c­€N¬’d»í}“`¾¡eÓ³˜Û“{ƪˆÀ‚k…”jëÈ•ÿµŽøº…«­rÚº­®o߯x·™b»‰ZÖ}XÁ¦€³©k쇖ŠT„{Iz|KY^/„”X¨~VÍ•i~nU£jQ¥”w‹¬o©¬k¶mI¶nTÿÖΈ‡_II'YP,ptBrzNƒcx˜Tbf8kfAi‹Q\rAx‚VŒ’SiU6XL,XM/j{I5;7/=6"_ZC{„N‚«]luKËÔ„†šQm`=eeDlˆRugM¶£„Ýû›»´vœ¡Y½¿_Öª`ó¤yÙûŒÉÿ˜¬àtƒ Uš©[­¥U–¶OªÓkä c’¬]¸”O~yG¡…a‡w[¿¿†x¾V|’Jš–b•¦f’¤]“§\u‡Mw‰Hx—J}Eh€C`~Qb‰B`wEky:Lu0\l8ƒ€J}¦_mKkŽGx‘Bq—J‡¥QDj‰V»Ÿr¶ºt´¢hr†LnŽN—¡VnvFZY;VW.ZiBƒ”]¦µvÏ΀«¿dµ­X_2t|Bšq®Étœ¹OˆŠL…”n“Ã]“§]l>j‹Ca~;b}N‘}T‹…aŸŸf•¨TdFrOwZcŒ\l’WdŠ[ˆšv¥]hŠc~Ž\loAVj<Xi;]uEwS±…¦ÔŸ³×ªØÿÆÐÿ™´Ì™Ã䟰˞»}ªq‹ªf~˜D_u`ž¶…¢ÄhŠ©\˜šUc“¼lŒ³k¯`ŽÅg“Ák ÒrœÌh“Ît‚µw€°iƒ¬`Œ¯^ŒšId‘Cp‰Ad>s–N€žP{›ZŒZtŒU|„Uk=dtBYjJh~[rƒUrpIlxD`rTdnShjQl€[k“H\{CBh>X€@^s@aoG\teušs|£\k€MY|QUXDb^BOuEicG€d;u|=nmUUfPW\Aj[>l_?irIamTknQp{NqQH~[KZPTP-TM!ZK&\T-n^8}^:ee8y`:Žu<qŒAAqWGN>YI&UL%OI/XE.^X/XM4QW3ET2OP0QV*OQ'K]/OU1pY-f1RžS?pd@P5TO-Y_4Uj@7xG&S<80K=NU'OS(PC(pA,iV3FmDD5L%ƒS’¶JŸÓv„ÐrQ™c*cL3<%%P):#B9<[#)?%S*Ot%Q]9Ng/Mz<_{IT‰LplH¥Ÿ]u£|XoqUkJRN@nL/]}?ImO[K7ea9£W8¤‘JpÉ“u`bVeDfL:e[7\lBkZ;nW9rzKs—Xi†V\|Q]”BOtGNZ:Pd;j†Dq˜SnŠ]|žN†ªi‹¸dÀq„¶n¦eiœb7fW:?,tG%cž@Lvl>C&<I/:K$HT"Ÿl6PÚl7VKAM3\S1vz8O‘W9:1Z. “y;Z¬ƒ€ƒVZÈwU€QZxHYvO`sFFY?6\1ZC(…u9p LQaSwT8c‰Ke\?hv@e€OydI¸xPg§‘npTy|Kf‰b„H¶Úh®Ð†Èæ€ÆçŽ±ÛƒßÔwìö‘°ÿ¿t½Žqdeª_š•E£åƒD{i_\-kx?‡€HHW5LS.ˆ}?¶YQE‹\Ï«p›ÿ¾a|o²r<…¡o¹¢^šu¡e7¨oJjZW‘K6~lKeVwa=jqRTfM„m>fyK†‚OKaFXR(‚‡K|ŒX_SlL<³{S“d_zO· Wqµ‹ÅŽIŽªsVV8Ic5VU#GW+†{/ToAUp8‡}Ff’oˆb{¦|Dšj€ŒJr­{»sšçŠ~ŸhR…Tgn-g¦Za_;«RÄí½evaeM[œnMd8sZ:ha>}€MqwU_j<muAÂb™˜kjsKX†9™{JP~DNp5®U<›Ávn`>œyBY{P•œ\š|aX1‡eFqÍ{sY”xD¯¹¼‚ÜPv|FÞyZ~…\šcC>u:PY,CG)XV1z]7âw_ŸŠ]·‡Xµ§kÙ°…¢Õ˦›šjkC¤„cÿ±›ÿ¬‘ò¦“É|Y³­xÔ—jݤ|°j¨ƒF–\¤n[xi?ɺƒ°¢ Ž[¶rN®ŒZ†|`‡U©Ä†¡OåÂ|¿™a±ši¨†`§žjRÓg¬~Už|gÿÀ–zaw€Pel@£`Jר”˜Çlm|AdZ4buLdQlt@~x;uf4^L8OJ1jO>QC+6;3< BD(@L&gd@ÖÀ~jU2’•OWs3“lHˆ²i£ e¯•o˜„k¿Ì‰·¼{‚£^¥Œ[¼˜^¨”_Üê{èç‘Çÿ‡«²a‘ŽK‚‚Iœ«`¥ÊeÁ³`žÃV­®_ÖZË’g¡S™•[ºc—Ñn‡ªTŠ•^{cº–d€x?q‡Oo‹FmŽQZšWu±gk„BPr0a‚7Up4XkAvŽTvC`y@X~6cl5{‘S­¤i¨¦]¿²‰•›dªº…ÒÒ}³šm·ªh’–X©ŠWŽ|Mx~Gj|M€‹dˆœ[Ö­|̶fx—ShˆIb‰F’“]™ª_•¿fŸ«V}¡o¬Ä}ÌÀ}–OlŠKk}9`G‡ŽbЧdž Z†“XqŠ]ƒˆXˆžxŇ®t}²l‰¶hs•cŸf|£Ue’K_~>Qj8Xk>NkDazh”jŽ«ƒ¹ãÁÐÿ•—ªx¤Ä–·¼u†BZq?hˆO`p?_[R„†d™±i‚°g…´f§ÊiŸÑrŸÓv½q”Îk—¿^Ž¿jšÊfƒ¾z˜Ï£±é•›íš½ù‚¥×]u™Ae}<Xq8uŠLsFhrCaoHgTwˆD_x=UmC[`IcnVg}RizH_ySgtQalBZmI\tXjLfzD^tDcƒ=Vt;XoB[sXu„ZxP\pGTkL[iIltL6zS:SSUM3cX/Zf<RdA[]@dj;X^:WU:Za>[iCNs?WgGIeBAS>AU5GG$XBJU)WS5`T1]S2I0žl5oŒUSvdC^D>T.AL,?@*KB,Q\/]]9ik5Rm??^EBT3]M-`].Uh5jq<€~9bJg{YuzIƒ„O†Yr‹ZDa0dV&>&2(>8IS$XS'mS.ga4Kh;0T/GK6‘W'ާIs´t9zc;DC0F"6N"6L$<M'@T*-P' D#D.L_!Hl7nh2‡šBn½ox¦w¡žmO•zDLfUS4Tf,[c=xa>f‰MZkR^[4LpATA3œZ2™„@y®‹^n^eVKolLbŒQ€fFƒž\ŠŸo†¨d¨¶r®Ýs~Õ{U”a\†W‡Fƒœiv¤r|¬tžmgtX€|I{Š^Z{VXZ@7T76<1@B iW4v‡AC•e^4?l6\_+ve/ºxEu»dZtVrF[wM]{L:tH68(oA#o€Kra§`\fœZM–uYlNrzMQ˜eXmGJj6cg:Mk7PS5Pl7^b;T^FTg<IUNF6/q@(‚ŒGˆ«LJ]^?‰t7¼¡DªâŠÞý…âù Òÿ¬³æšÆùƒÒÿ¥³è¢z·”±¨YiÇ›u¨f\PIXtAEpDcd%AsKJV(‘;pKFxByU9”„Mÿžn³ÿÿH~h^)œ—Mœ}flNAWW9lV0ef<o]@q•NWoF…R2u‚^PuT††?†iJMA9Os>\q2F6(|˜AiV@žzXɈg{eZ];Ÿ‚D_—nŠ—RLgHCl-Jb5IW5Rb/Th<Ff/Wn(iu=WgDbC2m:'qP&x^6›„N‚vay¥^ƒ†Cy’U\˜Ynb3Ìk«·šy‚W‘œbheCvfBS…MKU*jy<kB3„J9]K+…„S€o[Ø—»ÑŽr{XFnmJ³€g¬Ÿn´­m…b_‰T^‚I`a0[W9vb<©tRmº}–V…¥tÿ’tÃÑ–u}i‡zBƒžk‚tA‘o?Bk3[m-{|QUj7ŽuK¥~a™{Q°ºuž®y¨¢a»“]­{[šyT}«o™~QÝ…bâsYÿëÜÿýµµŸqÅŸq›ŽW³¤o·±k²s²U”|XÆÒŽ¥šk¼•`jK•xQz™N–•]ÿ¸‹uÈ}ÄrRÀ j²€Y‡ˆ]–bGokAŽaMœtZ¡¬~ÿÄ³ŠŽf~‡]mi=•œ]ý¹¤‡î`M\S/qKUo<tt7ˆmH`t6CP'aC2o‘LDH(H:*E>3^™_\Oc~Eãÿ˜L~-jƒ8r•W®j±ÅŒ­Æ”¦¥†–š[œaÆl™É¶ÊvŸ•]¶Äi޾N—½^«Òf•¥exJ›®e¤Âi‚•Iª§a¡ iŸ«_±©eâqŽ”M†”L¢P©¥eŒNm}S~„P‹„DMs.Yw:[t7[ƒC}KgˆBbj4Rc,^p4VyMrŽYp—Qdj3wˆ\w HMs2qyJ‡¤S… `³º†ˆŸNžwîØ~»£cÜ¡[µŸd³”e†^ŠU“‰_¹w¦X{Wµq…£Uc}E…˜A^†Cƒ¤p«Ö†¨®\€•s²Á÷¿•ľr„“Xes9ZwE|W‰fˆ§Qs„K—t¸ªm”§l™š`‡ƒW€…RŠz]šc£j~§eiŒF[}>S`:Ta8X`Ce~Qf{RMlSŠœÆÄw}a–¶a|˜Jaƒ7RWw¤bgzRƒ˜gоƒ¡ìœ¹ÿ—®èn¬»a™ÄmÍp—¼dºj“´Q€œYލa‘º‚¢À¼æÿ×ïÿ«ÅÂe~~K]pB\o8Ui9_i>b_Apt:Ra7_nA]xHp}Uu‚R]sQ\€\m˜^s™jx—iwbw}KaxPh}TioG^i<U_:f‚Id‚K_}B`u>^}Gh‘Qe—G\{GsH1Sk@Cg]DJIGQ5dX3bb1bp>sm;c~CQuRL\BVZ8bb:OgAUYC[c>LuH0gE4C)89:HR?'YN%HX/vF4rw1j€IW`PZYAYi8Oa:PZ;^M4ge7w~?q~H[UIkVAY=ZG'x\,vy4fƒOYrFOZ;ZS4dX4|b;‡pAf‹KK€Z0fK&K2$+A*GMFT(`G NR&CX/EO%Sd-}r9byGHx\0S968'E;DR"4^6?;5U$4R"4W(G\*Rm9Qp?„s?бT†µt‰©nG˜s3`hHD4Pg,Qh2uU2‚n7`‰X\^Ph]1VnJYA5M[6ŸB2œ‡Ed›ˆˆ]O«‚CtžV¡}Yª¾h’»ƒ…¯|£«bo¶vLugj`>sz8k†Oxari•mZ¤rV~cb‘X“ŠN?­fGNB<],Gc8Il9lzDƒ˜P_§nPkPXe1@^5F@*nH f/lyJf‚PZsPftN=yM_P3Zk:}xOua^¥hr_KgŽDY”„m’Pe‹\6yLaB'^s0]†5U`@t†=G|PMT4Xb4b€Dg‘\vŠS´‚QhÍ{HCn\DUI…t.˵Y¿É„Òý‰¹õ–ÊÐ×þŠ¹Ùžs£‚˜[ ÂrÇvZrYQp8zn@;ŒK>U)AJuj.j€TgT@lS6`k?€nCÿ qÉ÷Ï™ÿÜ’ŒkŠXe^H]R>be:g‚Bd\J‰I.ZUFie0nd8‘€T_hLw¡Llp=]T7ZP1Z?)às.l‰{’aEX86¯U0§§wN‹amf4]m:Ov<Yh/“r=paމ_djBVs:Pr%M`9Vs<EI-<5&II!oG&Ue<\],pL_sM’M;f{Eh†D‡tDU†^[[(g^-f|Jjk8jj8aœuct=J\:JU1EF+XK(wxHž|bÿ䫃‡|„Œf‰|J…uFÄ\@Œ—››[Ú²w…™lZf;VnTxxC€šhË…RŽ¡yr“U‹sVpNÀœvj}QºnEt‚`‰tQyg4^e9T{H•’g}uNÀ—hʨ~²^¤¯}šƒW{L‡ˆU¼uS™œsdzwÉdºaÊ£~ùË”æÆ¤Ñ‹n¼ˆbßœh¿±k–«\µ‚_Á¨lŸVÁ¬^«ˆ\µžZ½¦o ˆ]Ã^Š[ÕrVÙlr¬dµX§™X¿ dTv<tm>llU’[B±œuÝ™°Ö‰’MŽ•\®·rĤtÿ‹œº]jDu]BrfDg`7yK4iu4z‚P[œP¦oHkžOcxDo†Hž’hŽÀ{›ÂwÄŸ^k–Aˆ¢`“Ç}žŽ`…pJh6w_9˜k<išM›£Ú캽æ£Ûj¤¡Jxp>~°U“¦kÎß§qÎWye= ›} Ë€©Ão‘ŸN•˜^ɼ†ÄÇh|‹Ng{Fv S£t]¦”fft:_{>]„?ƒwN\w>frB`xB]…9Uw6n…He¡[^MrzTx‡^kGa~H ´zx˜CV„C‘’W«|Õ±x¥£_zbŸÆx¨Æs› T´—`ݲxòŸ~Ê¢cÀ¨g¦¥|ª¹`‚…R‚mU‰ŸW`™Bh}DgH r¥½| «rœ°|š±e§‘g¦“RwzEht4b}=z}_«ªs’¯Sl‡QŽf¢ŸiŒ[t‡Ii†K`iATfIsŠW€a“Ÿl{EYn?Ql?^|I\SlŽg²|x’Seˆ`~­{¡ß€Çe~“Jc€Ak‰q–°i‰¤p¨á–Äü¨âü–ØÒow<PD8okUˆ¤b‚·Yw¨U|ŸFj•@aHša‰À¦ÕñªÍî|~²J_@Ut=R_3Jg<X[Cd}Iir:MP2UfDcrU}cƒ•d‰i}k•Œa•ky¬v”«g~žfu™fsT]{Ni}C^oBSoEfwV|uCZf@_}Pn¨`z¥Xb’O[?)Pm2ObRPOBIU;iU<Oc:TR<wWB~pBe}GghLSd@p`>Zq5^oAf@PU9cL:L4H? 2M!24078!DH$]Q(`h+br:]rIehEog;mq<_zIcn?ls:”…Kr‡NYx]C]L;R?UK'_P%b].Lg?KL3UI*M`-QT1O_4nW3\d,MoJDeD5fC6J+ID$<M'@J.LI <O ?S)]a(au-fƒEFpF9T<&I)0)@0HK'4_*=I'JVWp+p”Em¯Q_ªecŽ^‡“S}¹^jŸwjaR~aOYKUgBT{?Rn?_\4bk:OpBkY<qu@P‡ZSV>DY1iS)§f/z·X†œ|¥Xu}\‹T‚¥d}›]}”`gœej‡Yc’XX}Ql}CwˆEZ…]GjSWh=[d?peC{†OŠ…^Rœd^ˆUo“G`•VUpFMV<lb>J’TCW;IR/2=%+6 -.s4–u3WvOLG;c_1ZzJi’A—UjŸdz\]z<T‘pŒ^5n‹ZU™qFtR'O7C(cl%_†8‰uC¢«M¥”CNQ0.–Y1y‡is_D¢ˆKZ»^[bPld7`GŸ Q¨þ„³ÌƒÀÂx—Ó…ª»tm˜s`‰L†€B·ÆjŒÐCw[ac*‚w+}—P=zI4M&]Olf7Wj@VP:TE5bw2sŒI†›Vÿ×|—ÿÿŠvcgkHmN9_mArw=a‘X__B7dAT?-]a-‹K5j‡cnIHeJGH#^[1cG-vF0{³oˆCGI<=2%Ð]:„°›ErRV[/]b/Be3D5$OD+iP1qL4iŽIOs4^tQNpI;i;Zc1WF1ZpFƒqBllIrj5bvMZg4P_0ls9V^6Md-Ek5HX+f^*m’iO…Sux@\’ZJW8S\7Rm3d?Uy<›z?Üv_‡£õ„[{ZjEˆuL[B†|MºË™É‘{u}Uwi;ngH£€OÅœe¢ƒXinŽtJ™~bc‚Q®r?ƒuI²qEŽxIpj;ƒoF[_8‡oA™rC®…PÕžhz}F Zš´mŒ™P…‘T—tF¼xPާu¡¸t¿¶|Ï¡qº½ÊÌŒÿ‡bМ±œnª]¾À}³§h— R²¨fŽR’­`y{F›uS¹‘fДlÝ}VÌœm¢¹x²«hÍ¡vŠrH‚lL…dG^h7W]3ŽŽ[ŒiFŒvQhbBnp=œx[ ±pÿÀ¤¯”_§o_ž´i•SU}ƒd„bFswMf„L[²j¤u°•MqO4œeW¤Žw©Å’¡Ø’Ã…~£_jq=qy8~uBÿõï[¸MUN3Yh2‹}Pq‹MºžT…ˆI‚rPµ«tœ¬e”Æh‚°L{–b´ÆŒÔÞzZw:mxS¡c{f<YjBŸ¦l˜·r³Öv–½g «x²Í{ˆžXP¤Š\¥¤Zr•eo¡Tƒš_’PlKt¶dq­Wg‹IpKeY»†ag†H~GgDXvM©¶—°a¦Yp£K§m§¦e‡a€™lžÆƒ“¸jªªa™©pÍÃÕ®p¶ jïpÆlúv´‰S„ˆ^…šP‚ŒGT5dƒ?Qu=w{Y‘hš—m¶eo‹Nu}JªuAmz<`„>m~L””i‡ŸNw]¦d‡b”žj‘§a••jœ“^ž“e¯‰Pi~CjoBPrNkžgf§Y\…Pd\išo·w—«t•½‘¾ìªÇàŒ¤®^p{E[rKw~ŸÈyœÕ”½é­Öô‚¦´PZd:@`:7V8F^Gtœ^®YoŸLiU„¢Qly<_yPz“o—¿„ÄÓl‘®Se†Db{:Yr6Qm9\]:\Q6[K;RWDUxNs‹_}tOenRnˆ]‚ZzŒR_~YpxWgydo¥„„È~€µgk—jp—]m~E]q@`kGgw;\‚@YŠPp—as§h„£UcK$klAebQYRG[_>viPal@ZkN[Z>Ih>VL=UM0MV1RO1aT,f6_FT‰tOdR>^9OE,AY+KA2W@)TW-Qc7Zb:ko5Tw=JiBU^<`a3\x;nrW}|N}P_uWNgK6[;KG9ZB(DJ*9H-KA'MH!ZG(kJ-Wh8J_68X8RP,^Q$Ub7FmCCeC9J07B1DI.HE*PY+Vy<[v>Ta6?zA<Z89Q'&F 2;J<QW+?h-8K.Z?vx*z¢U‚«fr¯op›rvdh¯ka—lYrWJnGNY=a[:[v=XrD_k4`l1nŒA˜vH€žRv£€XuO_Y@zm@Ÿ’L¨µ\Ɉj¦€v}eŽMx˜in¥cXvachBu€A`ŠMmƒSWXLhRIj>Qf7Fb8ET9i\0Wƒ<iyFs~<sŒH_Ÿ_Q†_A}G_]=dj@9H9@4.O!--.7-1A9#š6!jFK\Jkr?žKƒ~O‚—dO‰lT<5<+VG?gR‹K']¶Y>t0U*LG ˆq*:€KyP0¸wDKiVX1]tLUa;P@3UU1ˆL/iªNSpTRp@”Y0÷·Z¼ÿžžÇ„¥jr–`¢¸V‡×~d›P«¸Pß‹L{[Jc$dp0tp9FZ<CY09Z5ANfZ+dhEjv:o˜Hs‡NsP@tY<ÿÎetÿÿbnn]~J}];^nHr†EvkGUoUsxETwNnj8_kHtŒUgTVb>Qo4klCqQ:ÿH«…|W^RS;R€Uw[/_n<h­jcrG{d.—Š][^LlS'o~Nu‘QS~;Za;klLT¨_Bl?XŒ:goBmc?[W3Se=[u?s[;WšbH‚ODX,MeAHšZW_,So9N‘SrI)k~™imY=e=P>)Y‰C\Z(Yv/‰[GΠo™[O»«}iS~€j—†l‚‹iŽŽS° u¾Œl…—e¤q@®‹sÆ‘f»ƒ±†k•y\iˆ\kT>´tSg˜q_n8niD€‚XrZ‰q9q`3rE|v?ˆ„Gr…^šsQ„tR• U…{>qt:¸qP­‚cå…kÖ™d¶¢t³žxµÒ•ϧ•¨ºv¯ªtÈ^µ„hír¾‘b’œd’}C¦a•¼hsPwªV¤˜f˜yOº‹i²É‚Ïâžµò—¬êŒ§°i³vP‡•Zž…\TGÚ”„g€H~}GgpG¶qYÍwdˆtöÝ©~µx‰cŠ~]|šm¬kä¥ŽŠ‹f»ÒÿÙÍåð§}A~vV©¾ƒ¤°‚Š¡€Œ½Š{ªzg¦^rzJ’rNZ|Aÿ²Ú¢ÿºw³[‡°YˆG¡‘Q•¡QuLgn=ge?k~D™„RËc‚¨ZŽ«qÐè§“µ\‚£_zGV^0On7ŽY˜š^ºp”È[ƒ¸[‚µi|˜KwnDµŽpµ s¢®i„“WjOv|TˆŒe­Ø­ØÿʶáltŒF…¤]T”QON\ž\UxKSm3OnJ‹–X¾¨m„¬`ƒ‘L†¦e‚†T£Œiºt±©z•¬Sr„VÚ­‰È¹{̦m¸»ƒºàÀ¨gšÂZ`q8tNs‹Gq–Vi›NZ{:Ru7Op;h{R„‘s¬¿…ÆÀr™†S}u>rHm„Es|P}ˆYzX‚˜[†–WtŒR†}j™ŽX…S¡šUƒ‡AŒ„Ao›cu§d{ŸjŸhŸaƒ˜a~gŽ®st˜Z{š`¤l¥Äލ¼v‡¥j}š_o—aƒ®‚›·|°à¡½Þ‚¬Èg~›\vwdŠn|‰ÎˆˆÎ~޽t‚¹rš¼§Ð…ˆÉkm¦Wƒ°S©`‹—UiˆF`}?Z|EXv<OV4<C/;I5CO;YT?V[@ja>R\=UtEopCqlPŒ…Zž€HimMp©v›Õžºá”¸mxž‹°`mGarDafC_tF]†I`QmždtžXl}P\^$We9JGFXCGiT6ŠvIvhTemOUxNBmPRDBI?)VF,QW*k^- c.c¬LKB^YSO1]K'OR.XZ5dT._X+NV9RC.PU7R_3U_8me9qp>zNfUV^SPPBRP1EY*P_0J`0RC04;*42(KAjAcO%Td3R\<UZ4U[-@i@PR7_V#il1LyGL[?O_?[tFURg„RTR9oAGC1FY.Cl/8_&8?A@A9!<?&%A%16 Y6rm&t©U¤au®gzd‚š\q¯gU t?ybEK>FJ/ES5S]2Mi4Rf7]g'xp;”Hº±\ˆÀ}ƒ]—mF˜T’°t”¾t°½tŽ»q‹™s™Ÿhr«tM}cNPB_`)Tt1[m:OoDgpIRyHM~LLrMeX/E]?WR7db-Ym9^X4jd4e L`‡UQ…M_oKa]?:v=;606T+6+2,$2)u@•rBjs8^kCSsB{vBg‘mhRN>vML@4_V.2}CRF%d(E¨a:W;Q] ™k+Ux\Ni2¦v9Z”LSgIae.8rFCC-TJ(X*b–Jeu]T—MuKÑ _“Ãy}¦ox”M~…Kš~Iu~W£CªÑDƒh;Q(BS&`P(Ms=jT:…\9S«YE[=vl(]ŒR•?5QtQlr)btBuj>ÿÂ\–ÿÛSt‚i†AbYNl€?bpERd>smFfgDLRFTX6gO-plIp[AU–U]V2\L.±V8‘Œt]µi†SƒƒO?O:T6$›Y9vš[QrC[b,§B*TePˆk(h|FQ€Azn2WrIHcŒ^T…<Jl7TJ(`K,Ue>dj7y‹Qg]?…‘V]vT[qJOzAl©fA™hjM,deP`|R”lExžodHI§}ZmA6<&U@U{.a\3a„Q[\Btc?;7(Ša>gaKjnKµ„UÿÓ¢ÿ¸³¨s_j9noY­zZ¡gR–|WrImq_naT}m8ŠpV]”ZmvP„‚OxxB{}Qel9kuCgEjs2vk7€‡VŠ|Hw˜Zs…8xu9£˜[¦m@©xEædàƒz¦¢†µ‘xσo¾‡tÖ–}ꣀãvä’}ÿ‚••jgmT‹W—ªci¢H—‚K„–R}R´§qÀÜ”ÆfŒ¢Ll›S…tJ„V”n?„MŽm=x™RkƒG„‰TwoO˜b¨|c”r¦É³¾æÔqÈ[nz›t²½´ÿ­×¹ö÷ÌüàºÿÛ˜sŠGld‚º—‡µ‘ µ¥š¦„~o]˜qLˆa@ksGã·±ÿÿÿ¨¶vˆ¨czšKzM“…P‚Y•²`ƒ¨PŒtKw>ŽƒJzEjoB›n[©ªk†—V–QksCt‚T¡h¶»h|…P}ªM¿\‚ÀWn…BlhEªuM•d~ŠHsf?wIª~WpyJ£’ŠÕÿ¡”Â_bŸEooU´Æœ½ÿÏÞÿç¸ÿ¥Y}A_…Tˆ“hˆ³b©£dt@¥°‚›£h§ŽyÚ“h„K”R„U¸“jÑ»i¨°o†«k¸Âz‘·oœ¹onwBt‚R{šK{¢a‹«`€˜bc“Kk€Wº¤f‘Ÿn»`Ÿ—jœ–`„KjIfˆK—cŽ¥_†£_s€JxwOx€aš¥x¢°pŽ¢U{ŠA\}9_ƒW‰šŽ¨½amŽVnˆLSp9N_?KhMŽtˆµƒ´Ó‰•²j‘Á™¤Ü’°‰««l…™n‘¬g~žf“œ\|Npvsž°u”¡Uzešµ£Ä쫶ᘞǕ«Ùƒ™¹‚˜¹™¢Çˆ‘Äbw¤Lv“PhuLa„N\~GUu<OuHiuGac5;I+5>.;I:GdBUoKt‹Ots=R\<fQG€uLqtDk—Sv¦e…¯|–´m{‘ci¥~„«adi?_hJf|Ro_lYu›[~žVoHQnLMHIY2[J=QX7~D:‚p>[rR|OGZ}@@wTALCLE/uM-kb0io<¨l9]«RJ¦GR^NC-gO&uO,j_4cc8Oa2EH.PD*PH*\K/oa3ˆxGŠmJkˆX?c_=BC48%G4 UG!`l1Sr<@hE265/,4=B?i1`Y)LnBZR9VW0Rc1OmGSj;Na*YQ6}e5|”LŸ¯l•ɃfÀŠSŽk:mC@B%DP*?R+/[$)<*19=;H<E':E%S1g? jl9a†Q^kGhnC~Š>x¦ci¢qKˆnM]GM]8OL+Qo;Gv@Ql<Tj-pqC ˆ@²¨gb©m\`a¦c6¤µU™Áy”hrmVdˆM{‡M}•QaŠ^PbPJY6Oa-V]&We6UlBY‚I]ˆW^…ZR“bUxIDeCGV8YH)FkDF_8hh2h:V…HKp9Mn@NQ65g6AD69[!;@#43.9"A2€D"Kb?H`7NH+~q:l©_4ZTF4E8zM4ƒ^1BœrGk=K]1FU(Bb,Ru)ap6M‡:fd0‚|L¥…T=oMSJ-T{5Bi@O_2R_8~v.}fnUQmGaS8zt/wwDn›KH…?]w1dz<¨œE?…f6G&:DIS,VT;\‰Yes@—ƒMOˆS<d0k`<†FKO>=P#~Vr¤Kt’W³¯W¡÷ŸUk€£ƒCfŠrV•WZ‹Jp}Ws“aeŽ]g\QBeCVN/VvLUy<u\BM–[g_M”³r¬šq”–‚dkTo‘PzvV|y`q}N~sG\{D…x:SqMK>)Ut5Sh=Zq+W{>h‹TaˆTX€I—|2OždIi<†R5W®cNƒO@Y4‹Ku¥€cŠT]y9PU6Ÿ†X¨aZuáµz}\uvPŠb}¨m{xT{¸‚;g@lk8{d;{l>pˆR`W@jk>j}ImpHwX>~iF€žSÿ…~£•{‚oYÁlUriY[gLØcM‚—y††\|€l huP]8_T/…†Av \…´aŽÂk±Ó‚†R“ª{˜ÜŽcºtt†LY}Q™jVµ¥ˆz¬s|¤e³‡YpxLgU4g[;ˆwJ¡Ñ…xˆ\ˆtU€}J•pE×…dÂm§lsTsxPmrDcpD~”Re‰?k6€…Iˈjïÿ¼Öÿ¸‚¿m_•?–a¼xZºu\’§l¥Ýxaˆ@hwGv…J¥‹e³ƒg´‰oƒuCl|N‘”|£µ ›Ö³¢ÂŸ“¬Œˆ¤h„†HÍ xÁºeÿ»‹˜„GrwL‹£|£À’¦Š…£{T\;Ih8OM1g@-bC6`ˆH²™ƒÿÿÿš«c¤‚`“€S²X¤œSxIyiE‰ˆS“vJxH‹T`ŒE`g<z‰N“^“šVš¥^‘Ž_€—_£•b©§d¢²g—Çf‹Âh¼÷ž|¾YtˆQhƒN|—KwhG^V8_e9peCnnN{vS©ŸdŒ§k¬Ý„WQ›°§ÔÿÜØÿÒÆôd{Js‹lš¾yŠ‹M›uT…yD£ŠiØ„sé­ªªo|‡D‚ŒKp~\’–YxŽV•«o®U~g’®v«Àmƒ“`‰¦Zu™O©n‘¤XwYœ£r’›G–€Rr‚N‹°b¥p£”b‡‰X’“^““^›ŸfŽ—k¡¬nu„Xy†Wyy[—“]¦ˆJzEbyKdPjœh‹¡i…¡`w–O`Qp‡YwX‰b••}³‰­©d{™l±¶”ȶˆ“©jƒšZn_|V‘}UkH[j?Kp^†—iœ™Z•q´¿ÁÇœµÁ‡ªÀ›UlyRfuj“‘q—®e{¡KhMj™ejœjp£WZŠHdP}zOp|JJn8=Q0GE9EF@\gRr|Bku=MI3SU<gkA_uCiyMfySj„Zs’LW€gv§w›UhFdzQhŽmr¥lŠ©_v…LazK^nF]uPEOPX4PV8^ZF^S@[^>QO@oZ7by?ZoR\XFeP7nT5V^5bW7ž_4V¬X4Œ›CKYLC!WK"U?#HC,ZL2j\._Y2S^BPT?]L7sJ6ld?ikK[_EGF;1=267$G7!qK"n,`vGFtR:^F.>)78:E@C d7$QG(TR0SX/qW4eh:FsM>l=JQ0rG' u4ŸÁr‡Ð—c¬ˆQx_<iF:P03H-E>&?\)4P$.=%K@*BV*6E.)B"82L;HP*Fi3NT+ic,a<myJWwMJoRFW5BS4^O2Ws;KzPSrHGyAlqEƒ~<|˜iv_ˆœiš¨Xn’gKxcj_A„|>ƒ§]i’b|qMmnLTuJXe<Zg9[^>ag8fi=cJ`ii‡]Y‘fKrSBoHHI4KQ.@hC=\6Ld-Pi3@e5O]1Ah8LbDQu58^E>N%;@$A:$5<!02's; 5N4C7(ˆT$ˆJH¢n9VC-D&<<!8C%[9$V`(Dl87X<AH(qn+V’GWbAQx4ab0¨6D²‹OT/ij/‘¥M`ÕnU¬fTiK†k1I’SdzE7Z5AF'JS&~V(l‘@‚yB]{Nƒ=Ah6>'<@!:A(8E,UR*S\.uz=V‚G;R/8O,^Q)OŒFBm:8U$?DVQyj*„’R½äsJ¡ŸgV+ggDJnA~U(ŒsR‘r_‚mUw…^{}Zy|Z}cˆƒeyzo“q_nŸ`IK5LG#tQ.lbLmC{lJ…¢]uv\IF@Ya.Kd'][%Xn;Zu:Vg*n|Fdg@ll=ˆqCXtK]‚<WiHOc=HU8€r8²¢k¿ÿ¹†û¶]yMeo:Fq>]L(–R?dpP¾ƒWzÈ«m wT‰Y‹”Wg¤€Ç–dL¨Nc;…g6‚z?ŠlLoiPqT=c‚MzO>x~JreC…JdD=«jV{ZLÿí¹ieQ[uBé‡dºšvqƒnðˆb°‡o‰­es¢F€’LojE™ˆUlQj†UÎ{PZs=Vf3‚l@†d_†[Š…C€\‰œ_|mE¤‰[žz\ŒWx{[csV‘†[”³{³‹n²žl i¥‡]Œ”`½©o¼é›ƒ¹q®Œ[‹‘l~}Rn{<_f9^r*›€Dʬr×àš›Ç}ru?zS~~Mœ|R·£_·V¯¤u‘ŒI™ÃZ‘}`œ}S…fO«Ša{‹Xo“[„˜k§µŒ¶Í ¬ÄœŽ£ta§S^—?‡¦g”Ç`È«`—±Z‡©n¢¿fAC#8+N-%RB/a];aI6RV:`[?± q¿Ëÿõä“ÐmŸ’Q›§IŒ”J©†Lu„?vCXyHq¬fzL—ª|—í†h‰Bi’HmxL²†`¨¦d¢¬g¥˜h™ _™˜cW‰ˆS”¦b½Ïu»Y‘˜f†\gp?iU=pQBvƒ[zGˆyBq~=Uf4dnLÀÄ•¶Û”ÁùÆÈÿ¿¿Ý}ŠZ~tY¥p ˜„{¡Y}vL|„JŠ¢g„Œ\ˆsS”vXwxG}‡Yq“UivImwLj~Y‹Wˆžo{œbœ©j›Yv—Fp\•–iŒ¥[^~FxoS~RhLr–S£°s¢‘a “^Œhª¢m¬{—Ä‚™¯€Ê¨{Ž“m““mš›X”Qk„Nni\‡ˆhЍg|ŠRewAc}Prj†™by˜Y`€Ka~WpŽaŒŒRg€CcyDk}W€€c}³x€À€…±lm“Z`|]y‚SwZ„®b~¤jŽe¡¢fˆ“dš£o‘_jcEGUCh‚LS~XaŠJU]7YX5SiK~gy™ZpŽNjUqžUwŒZ†¢iq‘KRW,?9+8D/EL6ZP8V_?`qD[~BSpDRlIHjUY‘oy³XdERybt›c|›MgŽJl˜^‡¥`yŽOkzAUs@EmGPwNd†VB_&j[9_s9[sHDpEMW=eH+il3ng;ZxKOTP>J:EH)G>*ZG(T+c™IM„“DbX?N0XL,SU"\U6hZ4oh;llCc`K]]Fg[6Šg?‘…SSnXAIJ67+:-K4!QH$aY'nh8VnCLaK5dB0D057AHCE=C*D=+NH'HJ0b^7\p1Nw>Gx=DlA`S/¬t1šÉbs¿WštL‚a?oS6N881,G@B\+N]4eS(Sh>AUD:F,9G'@K&UD'?_6>G6M[&^g.Pu5@]8TC';I*AOCOV-ed8dn=S{NUZMZc8ixMƒCm˜_…‚X‹¢[oŠgh`qH}rC†NcVlpRll=Ug>eo;re<d{JdmHZk?b`8m†Na™`c‡[K…]VrT=n?LR<OW,FcJHn>O~<AIIu7Wu;b‹Je™QT‘K8cN>KE;=H*L>#ZB#gX1Ow@QoBk0™~N=‡N;>.AU.BK4JR(Lb4T`=Rj8\|3P‚@[d8Pc-KU0Pv.o{Iš¬`Cqrb4b¥WmtN…t@“œX\Áyx‰YЬQe©qT‡G;]:3I#^YMd.r™7tvIO—L.I6=18G 51!:46(W[`j4I›QX`:;u6Nd.Ti%Ha#/Y9BMQjn2‹”GÿÙgZ¯Èkg4Y€TL\>gQ3zc;pR=lU?ieABZ=eR#Xi?hS5DL6}h;xoQW¹`AG3:%j_:•ˆJŸº|wœw„uQmZN^EOk>Id/EV"?Y$8S"{Y&<=EX/Ti>bpAV?]‘NNkDKL)h=+ŸuJ®ÒŠªV„¶gmÀ„a³uf¬f¡^l‰\_ˆj‹rL¨³„x®‚ƒ·ru”e°‘h\ê¥}kMŠÀgˆ—U kR‘…fÁˆhdr^ku<†xQox3nsS¤wbdTKÜpZ¨’†£‰uvf7Ê]JœmX]zZŽZ3p‚?Pi.g®nwsGpR§ƒWlµ|^˜Zˆv>Tj6n}CQw@^dAhŒ^[q=‚‘SxoImsG¦zH¶»Œ›Žf’s[¶•x½¦vƒ€[­yLŸmT“jÚn»tKµvWÀÄ’®lƒ©_—«TŸ—XeŽGWo:Tr&›;—¯P¦š]jmJxxK…tFrrPp|Aˆo<„_Dnc>_W;oV:‰_6hM9½‡Z…uCjI9uW‘~j¢Î¶¥œ—tViD€_Ii:4kN¤›]³Ë{ã¦h|ŽO‚’L;“GEŒO[Y^§dMoE]pPyŸp…ÍxzV –cÿdz«Æ~¤c£f…—S¦–[{~M€‚WªÎ{ÁË„^wG›‘z´c€£LÆú´ÿtŸI‹ŒP§¦]ŒˆO¢²o½žq´£n³¥b‹¡\}¯U–®b¡Ž\‡mHw†V¦¬pªp¢«f{…?s}=]Q>ŠmC_vBˆe®Ô™ÎÿÑìÿÌ—Õt—ʆ“¯mo†U¥ˆnĆgbv:luC¤·k‚ÈosOUsQdmP¤{iǵm‰ƒk¨d‡LyPŽ­x‰½sƒ¬i‚–[€ˆN}„U{…ašÎg¥Qn…Bg~L‰¡[„Q…†b¥‹c®”g¿¢Üò¬»îªÝ‹˜¬l°–qq Šc£žQƒ‘bˆ“^‰ŒpŸ ax“RZPZ„IVVr–io™ih–T_\h™^cŒFVCw\ŒM€‰Oy’† íϼﬖÄz„£jªy~›`o”d„©s›·‚«¬uˆŽY€„P™¡g”¥Xˆ›\ƒ¡mk™wv±fh?8f12^12b=EeNi}?Vf?g†SzŸHq”KeŒ]n†FO[@ESAIlAQ[:ghOnœooÀ€‚ºka–Yc’ea‘¦á®Áï‚­HO}Sl\t‹?cr>i†H^wB[yCMn>QwOZ…Jd}Le{B;b0OQ>TV4W[5K`?PV7cK0`j2lh>EwM<MNFI49^6AI3]?$—X(b¤PPŒŠKkjL_<[f6pb3hq9skH{i=lfHaUDmV?¦h9—RZ’hHSb9A<*3+9'G+R< g_'\|;`dFH^?@UF?]:GN3>Q/FU"OW%^`1bf?XpDWKRzCi<n›G\ˆVŠvJ˜žO{´qy–u‹œdmÀrJ¥Š(mV.1/C+UDvp7tHQzL=\O>F+>C+8M*J3 JR(@]D_`,W~-Rl5=r8ZS+bi4FgQEJ8K^-^N,Ai4R[B[\/foGk‡Ca„F£w=ˆ Lv¢}k†ZW|RfxM@nNYC>og2Tƒ?X^?Vb2XO8YJ6Jk;=K4Q<,`P,_~DPkQSK<CcDLgS?i2JI3O].`\4ctC[„N_vIm‹Bfªcbœ`V‡X8nN<Q/YP*ZY5Dp:ST.D`8RT;|\9s MHqNF>.=I8OJ&FV:PL-k`3YZ2vi7c{ALe@Pq9YwBWqNž…6¥®lQÁ’GXYNP)`T6fX=QwJ`{W„w9ƒ«bl®so’\6vH9A&<P Sj&a_=Yt,T…A?‚E*E(?-FA%!1"/'MX!WZ/¤o;d{UNShB5I^7Ls3>d(5P7JT#YgEn‹Cÿ£UYÞº‚pIlghƒgYiOY]>yS1zo7ƒkF6E?wP&ÿ±j\_‰‘M3b|\p3) lFkÁ^lM6Šd1§ƒQŽØ˜˜qN’sMŽ›dg˜RPxLNk6H]3Zk*yfEN[9\l5Pv3mq9^}RX“@sj=a|QSh?ƒvC‘Â|„WG>ŒKc\!cX1^R,Ž…Hs•[nvF„ÇwŠÉx{h~h;l¹msoPÒ~SÅîák™sœœVyÁs‹uP…|`®eMzzG–nk£m‚AžuX‡e¼¦Êw_‚dUŒbK]hCk†X{„Ik}S†G]rRKY' ˆcz†bv„TÄœÂÅ„§Ìjšcd¬h[wQ[b@n˜Vui@SO/ŒqFSI3JD/aB1ö¨ÍÀž­ˆ_ˆ_l¢\€nD‘_¦vN²…\ÿsa–¡rVb?z`†L5”kP¥rˆ—Ry‘YrR4O\(¦L½Ñy^vB[Y5`a6YQ5cEk„K|’WŒ…M_n<_j@kH<WZ=^E0¢bˆ¿lVP2hWL@PA*AK54I+/'63#II2‚žFpZ2~|D†V@et±gXx9nyIƒ¯s¨ã™¼Ð—Îþ©âù·Åò›š³n§©ÿéÓŒ¯g©|`¬‡d£«rŽŒ\’ŠWz`ÆÌ¬^trIdyQt‰N–Þ†äÿ£ÅÓt‡­bެd€œY…¼[ôjž£jª“Yw”K‹SvšO§¯v‰°gŠ¥e‹”nº¼’œV|uCk‡Fm{FeƒQu›^hŒS~‘^©Ô‘×ýÌåÿµ}º_‘¦hƒ†PƒbS¢zUtjBo‰9kšH‡¬d¢’pÝ êœ{³ŸumpOŠdY¼¶‹Ò“rpSl}Dˆk›ºm‘µbt™LZxBcyAn‚k³Ù“°[lk@q‚O]<exB{‰Rˆˆ^¼p§¯–Ñê °Õ}¬Ì‚·Æ…§¨{©±u‹¯j˜¦t™ a}–\xXdƒLs’`}«uv½nÈŽ‰Û¡—Ö•´kx™iyœ^m˜[t‡Rh„ZŸ³e—³mˆ¸´×ÿãÛÿ«¤É{~œi‰˜p£q}µ„Ōͯ±xÓžZ«ŽV“R…Pƒ‹\³˜Áð±Âß„s°td³zaªjl²vr·q_–B@N3`u<k‘E`|?d‰T~¤]|šf¯pŒ«V€‹Kg’t‘¹™§à› Ö”ŽÄ€x¡nn‘’³Ñ¡ÇÓŠž±\dˆLcƒJ]e3>U;[pHbJdwBWuD[…Rg’FQq4FX:3\94J7@?.BC*8G#J>*WM%nf2l}6JwRPIFab9=y;=HAeC*¡`/p RV™—RglRUBL_9d_4eu.`qF\g@ZcD`T8¢b9‚?rŸm\rgSWO7T:%?.& 5%Q8cc$I†=ZgIRY9~_:Š…E^pTQ^BXd7mZ,ob/tŒF}“Vq¬]t©e†Te§[ebYyoB†šTŒŸf”§hª¹†È‚Z´Ž:„o;C<O=+fS*‹l7nƒPS}S<bD0<-9C&2D$>/"VB:W5`N0Qx.Yi@S?k?„h@He]JVGB`8;E.AC$J\1\R0Re<Wa:bo6…p8ŠHU‡bleDfRLƒRU^EjwD[}DOu?CQ:PM-GJ-MN'IW3ER83K3E9+PU+Hi7WG/`b7H†^AfB=SC=H'@T)HL,>M1[H*oh.m“N`’WGvOEZ>Oa4JX0QK8R\2BA*K3+G>-_S+f}>D€`ƒO4bI\jVWiGihFLoELI0K]$DU'evD”Ozše=}cL?#’w9_ŽnPlCQU9Cn=UF2n{8emPcnWhu@ƒw@R´j*ZIAC JY*b{.FgFZl'e‡<2U<"2"DHK"@@%Lc$g]8KoCc?1`Y3fk?O’M\cNJu@Ea'9\"BJ?T,OU)rt1ÃŒI¶\„d—[V‘\AaJ<–V;]rO•‚IQeO99$©E+~l\LBª]c·kffCoM9’Ni­]^pK žX^¼ˆÅ|I•abJhp;ÄcB„[R`U.QJ1IK'Ym.€ŸJ“­]¤¾h|·w’¥]­î”—ÿµƒà‰™´twg¥~YHŸfGr9Ot5Q‚FbzFh”Mll;cˆ›wjm=yƒCM¨fiK3 fÙšl»ï®è׎˜’y“±uww\‰Bµzdž}oxC±·tͰµ¨}¡¸~{æ“u»o‚–ls€X¥†jzx\ŒƒZ—ŠdNW,Rd?—‚Nh]}tQoWÃ{ZÌyjˆlTÕ‰z{ŒhWp?loB_O5HR/˜P.ezQw{fk”odžg‰ò¯ wQS_LqF‰mC„ˆ9Ÿ”Wê–`ö~|¢hb`Ea`2q•A¯\ª¤uv‡UTl:~G±¬Y‚ƒERh8dh8fe<§oPÌ©ˆ™Ð™›ÖsžRPj9’a9tmKx}HxŒD§ƒaŽ”T™Ìlc«ÿÀYuO†¦VSœB@G.„rPÿÿ‰Ö«ZPJ.`]9_€Ki~C‰bMOx8y\F«¾°­Ô€½µ¾æ—Ûºƒæž†â­ƒ¬®†ÿøÎoU¤Ž\Ÿƒ]õĪÁÿ§Äÿ }¨a…ž^x–T¤Ÿ]ÉÀi‹¨Y¼¼oÒÆ²éŒ†”O—›[¾ä­¶Ô…š¤h®µf‡ŸR„I‡‡WxO†žK‡gI“vJn…1Rl,_g4Ux9Yp6AN*R5-`P?wD4{dÁã´ºÿ´Ïù¢Ðpf’Usx9ZdM|xRm’;t§RÍl†£Y£…R¡”k®«­‹p¾ze‹…aÌš‡´‘d•t]ƒNz˜q¿j¢[sF[‚?QoFršºõ ˜¸^g„Or‚c’Vk|FVtD…‡dª¹†¸Îy®Ì~›½fˆ®w»¶Š ³w¡¾‡¿Ô®ØÕŒ¡›_o’Xe—dw»u…Ο²øÄÌÿÏÐü½¾Ê¢¶is’ap›kz¡pНk¡XaS„…\Œ}hœ¢ž×ùÎÐï«©Çv¨it“h†z–«„¥Õ«Äþ–˜Ðg™]¤œd£®c“¦Z…aŠž‡ªÑ ´Õ€”º—®Õ•žÕ¥¢ë²¬ò¦œÇdQy:Ja.\n<Z}AX“Nk™[vTxšg„˜C_oH`h^yz¥ÁœÂ¢¨ç’—¿q~‘x‘°x‹¦rŽ¡fv‰G_rBNm<EhC[o?Wb.Ha7X…Fj‘TvRh‹DKh:4O)/=',7&79#A@ CF#_T)hb2js7NjM^TDSj6;b=CI9fT.£f-d©ID“DNeGN0C_0Zb6eb-U~DWdJ]fGvf9´f;’wEˆtYr\O^RMKFC.U6;>'K> `X)uw<a™GZt[bT;a4\šPCLTJ>4LO*_M+†P%€5u°c~£b€¡Tk³dO—gbbPxt=t˜Nœ[«UŸÑ‹šÀu»’PœwJoSRU/Za4]q2_„LI€Z=dO8T0=Q.?R/9R06B+8C(YB#Ur"`rBa|9[]@\J0\I6Fe<<X>AI)DQ-AE1FO(Ia-Qn1Yl-dw>jr=Z†Nk|PRMXPDƒ}=c†S[L>Mm6AS7>>%8@%TG(SV)W\;DX:YG8fd8c‚Fe}Ab€BHrVJd=1V<D>%VS!BY0GV8:G*ZL,Gc5HQ9BM/?X.RR5ZR/SP5HM7H^.T_2HX0[c3‰n@_±a¬Ps[o`=…M:W—aBM>JP*\<©˜AU_RaEC_52X"UO~B}NURrGh^9FYPbU0[„EEo@FUAN]0Mb=dS)<ƒERm;^‰Jlq:X‚=_Ž;(V1/7" 1!17DOBX$gO0}m?ltIolK]YIka:o›\eJ=nI?]);U dQrP9NN;Yh.cx9p‡>v}G]i^H=)pE,g^?h>¨¡XazdcQ6«½pY6;áT6•‚huWŠpI›iOžz`µq¯¼tÙŽditP‘lGc™POI,>H(D<SI$OI+n†<s‹UX]8dU2\n<RZ3Ž>ÝÁkÿŒgÿÿÿ•ÿÿ”ŸkŽC]b?¤b2qc@zwLak8S‘T›p8DtWm:=_2po2žžXg²p‡‘X©Šuðç•ÿÿÛ²¬zŒ p™¦_¥„h˜xj‹•j­¯]¡œf…XF|hJ‡aI«|a¶¸ÉÉ©‡Ðš–±{ ×™˜Å–KeD^YBƒUEŒeQo{B_gG–e<`yI¥I4heFrK7l4,^hNQj;[J0Vs@SgC‹pG„ƒh…b£‹hΪ¡TLr„KUyLrv>xkAak=­[›i´Ÿb¤×™‚„I}¨Nx²>«¾qšÍ—lŠSl€S®¬o~´W’ˆ:vEg²Qm}=ª¿sÝшðČƠrvžWNy7:>'fF3¸’Y{h<pV6mtGòzYŸgÏÊ”®ä‰‹ßo|¤RyfQÿ³•ÿÀ†¶‹Zqb9I?+{oZy¬lgc€LNj4›gd|Nz|TÅÿ” Ìuéר斅ÿÿùÿô¨ŽlK„Ÿd®Ë˜¶ÎÐÙŒµªg ¯p• p¡¯^¢²Ur›<˜…L—œT†•HŽ~N‘M£ a¹°e³ªg³Ôx£Y†ŠQ€žV«V–|Bv‡Bdt9Ya/Yy/d~Ag‰<Sd>¬kJi~PflLX_CEQ1fdUŸºrê壩ڛۥ”¼s\f7ŠZH‰H„”h’[—|P~Ÿc€›f®žoæ”pËo¥Ži£”[œƒi¾žq¹¥pŸ‰Vp~P†¢^xŸK[z<^€HniœÈ•ɲƒª¸jilFŒf–Œ[’]ƒœn{›o¥ÅŠ®ÙuËi´\s‹]{Œq•dŒ»ˆ§Ï²ÖŠÆŒŽ»u…V†}Z’“¿Ò³ËþÅÂëct–Xc‚OpŽ]sžy…¬q|X_‰IkzElpY Ž‚·²Œ´È‘µbx£cy˜^m›duŸw‹­Š®Èi€ªQt™^³pަ^‚¦^‰[•Ždƒ¥q‰ av™u„ŸŽ¤Í§«â±²æ°§ß‰œÃf]’3Bb2S}Wx§\f‘Jj^}®jv|7LsEaNl‰_|™p}¯›¢Ò¦£Ó|y‘u’¢r—£hxkƒ”U\|MZzLVvIQe=K\.Cn>\„@[tE_~Jo~HevF-M4F)1T-2S0DO0FR/CW5ac0_h-[s>Tn:Bd6CB3II)OV.¦R0h¨N:¡’GQ`PM*I_.Df9d\:Lt3RaDY[9v`6‰Y=w]=o^<^S?HN=[88hD([g4g^;cf9ut@L‹GPfT`G3ŠY1;­^?UlQM8FU69U<FJ.pW%r‡7€¥]¬TmËlm¤~rŽReT`hOxX;q5œc˜¦pužoE{f9LE7C.PF*ƒp6t¡U_œsXˆ`TzLZ}V]nADsG2eG6K3U;$_d$TvFMrCNT1CU(\?37I%>B3BE$,P-0=*I>E`+NX*S]3Yh3j€:c…GVƒ_NsOƒ}<Q“J@[QHH1IS$HN0IM*^R3Lp@bW@bx;edHV]7MsFNX8eH'R7ByB7a<-C+9?IAhl8OiMQR3Ji5LV-_W-F^5FX<4O1B;)LT3W[4sh8Pi7WRAQd7ƒX7k›Tjo\laLbP8ÒX>Tž[`uT‘¯Gf“[5N9=*JZ!Bb37p2„R)AŽXx<.h\,KhHct?]s?R{I_`6`9`j<AQ5Ql;h[4•©Y;tUPm-[o2EQ6>u+1Z2/I$MV"Ab,?Q1gB/SL6[q7ubKƒYA…`Bw}i[™_R|=Ad3aR$IS985(S0"SBp€A~ãrf´xQA?Uc>K?0sI.oUDî´Ogͨÿ‡Y;•XgDo^>~sG›vY²šh‰á· †]»¿ƒ´â|[rri5`oD¾M3ˆ®nP¼PT^-LE'`N3P[7EB%`H*CY:SN5nxFOgG{†G°[mVBÇ„Nøf•ÿÀn“_:p>3/Cb2XK*Be9Y`+Uk:Zz7]ˆRLp;Žk8…°grlz{@“rUñ׋¼×‘†¹rŠV¢‹^Ÿˆf¤—pmªX’€R[p\uo[XMAχjÿİ풊»ì¥ˆrFÆ¿‘Ý›m‰fKf8XK6f8&y^C\ˆA„h<EeEhE'ubB¯OCbyU[5/YoJPuEPO8cP=_aA‡o<ƒ[?[L:†jHr^BoP9fwEUlK]m@og=q[6…e=ºWB•}JœsNhžIl˜Ao‚>¶Š]œÇ“_Zyb™¯{™Ôf|Cƒh?x–G…GŽ®qiˆqpGˆ’XÌŽR}ŒYN}@th=¥¬‚z«qxšSbˆGvsG€aÃ䛼áu‹½V‡¹j{†^öÉ™ÏuHS9HG6EO1LQ+–xkÃýϼí˜}ã„°ì—\²NŒTÜôŽìÖ˜ÿÛÁÿÿëФ~‰‹[º»›èãënܳ‰‡·a•¯i˜[¥Ÿc§«R_=dz?•†R}‡J•Y³·sœ˜Ow€;pBwItfGn{9qC]{6u`Eh‰=~‡Hdw2d|9yŒDRy>[yCbD˜”s’“]†_QpfEƒ|^ޤa·nªá¢·è¨ƒ…TgQ7ed7lxM–ƒ^¡vLnnO¾‚hŠtË™€³—f |[¯yZˆZƒ‰QumW¯‰_…zMlwDs¥gmžWc‘Cqžn‹À|™£cjZ±¯yp–N‹|TqmL€un¤“`c„‚Jy‡\šÂhƒ§Xxy]¬œy°–½þÄÑÿ¤ —Xƒn`“jiEPf2CY;kuv´º•ª¨q—_b…G`€]yž‚§³†••eonIil?spDfxQ”ŒZ¡Ry–Xv›XsŸ[i`r¤ruªgx—Yw›Ra“Du™Rt›Xe|Gr‚QvPopAgpC_oEcrOi‰jz—†°—£Ò¢›ÊwuœUm=Ee.AXGgwRlpA\g޶\g„F]ˆRfšTd¤|×”‚Ç”–Òª«Þ“¡µ~˜™`mm[yŒŠ¶¡]k{I\nOeaI~g:Wi8Uw<Uq8Cg@TxANrES„IFW*`S5Jn9ThLRmABoDB\EAW9P[+ek)Aw,1X0:>%BF SR+­o>x·MB©˜EUdRC1cS(Fx4OiEVk=FM_QDwP/RqA_\O\S/ZO0QF5IJ7fB8^V0YeB\[=jq>;‚NLMH\W3•]=eŸNa’†S†WBsPL_LQk;em;{8‘£P·´TƒØvu›”\`7y[<@6r<sp/loUKZC<L;>E*FE)KV,|d<Ž>ˆ oršyn™gy–`cv][cO[`?>lL6L@MM*T^-Nl8Ai9:F0DG$>H&/E+1C./: 56;U(:N$>L-Fh-8e7WV0b+h…KYŽO{zU~šUf~eDTAGM?O](BY.PK)pJ)ni4g{LlSd†TliNBoN7Q?ED Qh/Wg7?ƒE8e=7S&_\,kyHPoWEf:LX=RZ1WI4SL4YS6m[9lY;mR@KS:NA-Wb0Fa9003YAiz8t‚U|~glcL˜k?˜”T’ÍxD}V<U9/W-2?(F?pz1E†Rck27XLOS&Sj.pm6`e\ˆR2zQ><3OV#4\,SIU[(˜xWDÌu`u=Xo5Bn4Mm?Ez4CP*Hb&a]%MH6BI.5I2B?(jA)t}DFJH_S6nI?\D3J’ELK)e.cuXXTAZN:‚t9ÒÆuÕЃN×´H=/z='PnW‚Y1|OBÆ«ZÝÁv˜Ó‘kx_ˆš]Ž›thaJ®„Kÿ‰_óq^Æ¢‹ÿꬥ·Œn·osqO^~Mh5ÿù|xð»JŒ2W<%RjBFY5KM9IF9@Z3O*Y-Rf2°DtsFelC6O/cF¬](p»q_rIExF@]<Pr>;?)ˆd>P\c…Lq˜VU¨azž`w‹SiŠQƒd8ŒŒf˜Êoeˆ6pj:ŠS—xTw`Œ‘T…¤_§¬ƒÐ”‡½|y¿šètÙ„dÙ¹€t˜ocxGs„KÁ®†xçœmeEEH9_O?uSDvvAQ^?s\9WgKeI.žf7ŒiPY=3o•cW`AU]=K?,S`<bo>gS4QU9toA¥hL_hL‰kH^Y:•}__iLP\7RE*YE%g\1je9‘?pŸFY–[„zB¥¸ežh¨´Œ½Œ¼¸ŒbšW]d6Uw1qrI«ºŽÎÙ²Çå·›·|m›YjƒRiZ;gj@‚’Q†œh‚±dY™Doy7“oVÃÊŽªÂg“º\œ´k­eººu×Çš“Ò„^{J[a?=e:baCãÉ£ªÓŸ käê—·çu„°S•LÍÑ‹èÝÿÿ·ãÔ€·‘l†a„jIq[9fj@j˜N~’XxU}ŸaŸQ€¬X†®dx­[ˆ¦YžŒb­¿œüØÂª¸†‰­_js@^U:fi@]`4jwDaƒ@Œ~FzˆDw—Ph˜DUv5il._|=Gg3^a;q‡Q–›eƒnMwgAteJ…¤kφÍúÂ´ÛƒŠ…Thr3[j/OI?yO:`L;lTH–qPˆ~c€ˆb‘vW»†hÏΕ¦Ð|£¥g¢¼o¦¯lˆŒCVoDˆhƒ”Ldƒ?n‚X’š_iiAk[H§¢€£TujVe}QnnOumO„u[…Ju«[‰ŽdœŒ\h™zœÔ¥åКͦ}­™be`6U]GmsGVW/?K,;I->M3RO4QeJ|]aLm~qš¤NgY6a[*hi*QqGh¥cg™Kl…IqŠIi‘Pj“Tpœk¥lŠžau\u•C`?e†Lƒ•`‡ƒFZf6Vi7U[.If7Jd-?N4SO<`kLbzgˆw‘°ox”DIc1Ic5Ie7GW/F]5TƒU‚¡U^–T]Od™fkº¶Âý®´Ö˜šÈ¨¯Ý£ºÓŠÍœX‰{p°Ž®œJ]iFX^FN_BXj4Ql5FW8BV;U{Fb…H`}Mm~N<H-KP(If2WfB[dEOdC@iHA[>WV-Mb)E_,@U/OP'jd$rˆ;š“Vp \9ŸŒ8Ww=D,OC"^X(kx3qLV’S^qR¨R6jr7HtcCMIS:)eG&\F.\L9V[8KV?\U<}w6[¦_c–}qŽZ‚†[{‘]lƒoru\xŸUzžcl¦W[’Xi‚F‡k3•‡:i„Vjyk[ŽT>nUCA2†=Rd,:Y[?].C\-JS'_R.hX3ehQ~jKjMu|UŒ…Ma”W^bcPG9MU63iA>P=LS+Eb3UV1F[,0I45;#?C?X+/S-/;(A0BJ /S+PD,Ek-KO8MK&]k/[wHrb0›¤QxgQ`XcZ8KU5VO1FP*HA0O: _Q(W\3„e7tyDltUQuQH[I[`*Et9QV7eU-D‘LMb;ej8\uEQcGPY7x]4ru0RjHQU2WF6Sd.M_MIn7@d@EKBrW15xG?I6Ma+lm4„…J‹™ct‡p€™\fMºeQWCLf<8eA*J*c@!V˜<@hNDQ)Z`.lm=C{A”C+Ž„Em¡o8…e1J/FL ab);tPj:!£‡@k¯uNzCU|:aF]‚N=PFG%Q_)Nˆ28N1HJ0_L<'-+x)[˜Q>ZC?A2VQ1T=>XO1M~7`)zbFgbRR_U\7ši3¹¯mPɨD<+hL(YJ1Šk;€bR¬ªYÍñˆw—f–¦C¸ªl¢¢k¨ˆVÖ`v¨m`°jõrQ³ml¹Ä„‹¸…u”cY­j–˜WÿÿÖ۷h‘Z{~6ož`y‘]bUI}ESv=2i<?a3bqH^x=fY4?Q3(-$A=D[6ŒiA‹¸rI”cYm?8oFD?!š‰MQŠKpH||6Ty4]…Iw„EU„HRr8Ú…Cz¤ScŒAahFŠ~JslPŠnIŒFÓv|SFhI6ySHoF?mG9‡q_£î–YQ6Y^<|†TtuW˜J1ˆÆwN5"P9%tv:dZ9TN>Z:1n@,acExgHÔP1OƒSŒ‘nwq[]nMveJgfJ„a=qL-XF-o[7^^=ah;f}V_qG†]AˆtXf¢oTS7FE,kS5n]/Og0^b2±jI{E•R<¨{¥Í‘€¡qµ¦}^¥gizF9u4kjMªÑ¯°Ò®£Ó ‹{_\pOW˜[S‰OWe8•™fe’A|•Ne—KOx<…>‰Q‰¡N‚µb€›VžZ Ç²Å{ªØƒ­â–†Îk†ƒPhŸT‹‘g¿s\„•]Ú‚£ÓxM€uDÑ«ƒt‘T”VJª`Wì­•·É„½ï„¨i†X{ŸL‰‡MŸƒU‘”e”¥V†£[²§rɵqäªzÿ»«ÿ¹¹ôÿ©¿Ž^މR“ŠLrqC{pQvn@‡ŠGw‘I{FŸŠFŠˆGˆ‹Ifw+Nj,Ul/O`0Ej.vxH†^¨£a|†At]©Ä‹´è¢Áﮚ±W·|Cag0SH5kG9WI0rBF€fI˜kJ~jY½ˆv”p‚pï¾”Ò»v•©i¯¥~ĸg|t>Ys5c~BppI`„8aˆEg‚H]|Ffo@ob¦ª]qs`…`tmKbWMœŽUv¤Z¼cmiPq—Š»ä°ÏÄbreI‚h[xf>IU:PUBcmAEV,:F 1124&<H+Fa;joVfvCbp[~ˆMR[%J_&J_-De8Nr_¾‰–Á\kDe|BfPc—JkŒHbŒSi‘]r–Z^ˆCZŒ?^ˆ?anErfJƒxK\i;XrAk€GY`2;F")>86kUUƒdl¢z…žjpŽJGm);Q*BW/HW.Qk9\„[o§z–؃—Åc±|ѦÅð“Á—›Å £É”š®aq‚K`Œ~ãÁ†µ@\jY~…Y‹J[v>UcBOdRbš\h¤TmD`cDStRSL#s`,]Œ:B…WB]RRK8F\<>`?AR1>L+<E+<H*WN,œf,k¯M‚‚h‰„SSšs2bq,E@8<%Q>X\&Yq:Xh=]l?oi=om>NpO7}[9O@HJ1RF-VL5_X9W`:nmFš„HŽÈjɰ‚Ÿ‡€°pryeg‡tN‚ Qr§mkœh`–YIwIBW9WX8vl/wOV‰b/ZK&7/E5?]DS.Tc)Ot4Ne;ch9mzDMcRFXNCF1F>)FG(-O1192=C MJ$Nj4JlN<V9AJ,KV+?\'/I1;8 >N(@C-:G&+:(5+?9;N"^U(B?:O;MD)^a-N€Kˆt5i’HXeNB`=HP-7R)FH!;Y+0I.@><@'QR,_v8W}EaqMVqMQTXm7Io59o4UR=fx7ZdSaDC€RN[;HU.YK/w[,IdH;R1NT,xj/i¥[o’^h•VK|XWY<j}Ag‹I^„MeOj‰I‹“[d”lMgPžŽ?J¶ƒHjDHi?AsA6Q4f[7Bp96R+OQ&Qy8Yw??f<Qm-gw7g‰IAzS,D8IL%uU#:VB?4$pa(`Je‡EKtF`3y aK_bJs+Tm>cP>CŽ;XB,Q1$+>:k(`G=XBO<1`E3@`GQC'Uy.Pi;^e0jQS`ML^2Wn7ÊŠE˜…Qѵb|UXa:šf5‹›bÁÇa—ŸTq¹U§­X³à~f‘yus:šŸX©‚Lž½ƒ”º~ª±«£|ȼƒØÕ›ŸÁžÓ¢u×ÿÁÂÇ’Otoc/uR=mS?_A.YU3mJ6nNAnwKiŽONl7NW3:a0BR4CE.j@)aM=—K4lª[W’PWt>Z{Q‡›XI{Pab6Tg2Št6\„[v‘N}ŒFgŠE•ŒI^|5¿d>sT‚kWl¨m‰€[ˆ™_fF4UH9OE7XC6vN;¢RFÑ­xnÍQe8VR'@U(2F*Wo;VrjBt€ZnUZy8HG)M1%GjMb†[ntIboHjnIºVMl¥myˆjY^=Z]4byY>d5[S0n^6ekF—†_j~XI].}gDo‰[€tMsoJFj6dY8owG}‰JRu=ƒdIek9\a5e;“shng=¤{^jÊ…œáˆMe:…uZ²Á›ÍÀ¡“Ü¡cVuyJ³¬……®ur€P”ƒIm‡Pž®fn–IUu5heBž‰^¦VqŽ>YN-zJÛÔª”Շ߼Ôð¢ºõ“±šf¹­{¶–du„Vªœy§¸g›Îzkµfx’V¬že†|I˜gNŸX¨{Q¦›iíÓºÿÿÿÈÎz’³^xZ€xLk…DrEˆ•a‘˜yЍ„ç¶Ê‚j†ˆ`À–u×ߥŸ¼‚ÃÅ‘]ˆMsƒHn‰IŠ„_¶Ï„±fcz4}x=‹wCi‘BIz38P%<h-Jm3h†OzŽR§]zx:~‡f ß–²çª¬ÓtwƒHpo7Wk?pbHcUA[O:OH9bMC~eIoZG˜^[¿ˆuº˜©¼¨ñÑ‘«o”ŽZ~‚DbtDyEYxA|ƒMj†LgŽKhTƒM`b6[lV’®``|L›rn½˜wzZ––v¤§nޤ]zj©§tŸ|Q€iL|pXˆ|a~‘d‚šfy‹N_iHPdBBC )--7"F\/@O,KcIUm@ZgFen2B[/AQ6EdF_rGZsNj}Nsr?e|<UvEq‘TnŽRfQa•Rn’[vžhu«`j•?\Ge|N‚qZÀ‰NtaHRkAKhGQmVD…[K’y} s|n‚˜`o{QoV`‡>Di+<@&:A/Lk@`†Vqœvºs—¶dv°rˆÁ˜¼”‘ÕŠÁ~‘¯z”©fz›Xe…d¤Ÿ`”˜Hh}Sr™Vr‡HV];UF9fra—ÊtºS_w=IYHWsGNL1‡X,~Š:Y™WnzZUsN?oL;^?9M(3H(E=">H#XF(}V*F‰FuYVut:H”g9Uo,;=*3(56 9;"=A&HJ-Ld,m`7n7ŸpK\¡TJ…o^\PaiAWlE_cJp{Jnœ[§Œ^™Éwnɶu”zšin”n„z[•›Ju¡st‹rjœUa—^rpKaYAerRmwAP…P:aM(G1&=%G>!Ek#Cc?T_4Iu5Yj4r4q¸PJ·Œ/rw(B=+-G2Hb"=zEDU=YQ*Wg5@iD7?8=?#JT,IX/7Q2;=(6D);?%;0(4#$ 5*HIV_2NvIHY7Wb6bs5^ŽQGwF5SLA6#8Q&4E*:E#BN%<Q%>U,CK+FU-`e9S~ARzMZtWZwKM}MHrDYd,hn+V}H~mIb›RzXyše[‹`YwEhzLek@DcCIS9S`7gv>^‡M`ˆZ`ŒP]…Zu’ZtŒRa‘M€yIY[{…RŒ‰KYu_zV»cPŽagKnŽLU“gdŠMFŽ]4T7=L^R LW4OY3Ec7mb* ¥Mn±pLSUqC@j>4T/;KeL!d7\lBSH5__/€{9J~GTcNSz==a2HJ3eD0*a1`.9?0R/#Ol;T]<RP6RI9B:0<A,dQ'Iˆ?]e2hvIETESc0z=s—bkiJÁk/ž×¨_“{nm1±™4T–Vxs"ž5€§|tŠZ]`JM9akQ„†D‡W€kFužYs‚]« X¨¨e‚œ]¯¯løŽÄ¢owž}dˆSjm1kN3\U>JP)7E*D7mY?o[0X†MQmB?Y6N;&8>$ '=&GD#r:$fBE†³p{EDq@ p5a‹\n~Hh‚Df~Ddq;Mx8Qw5\j1pn5~a8‹Z‘¯rewS‡wVf»}_œgf‡\š{b­„l‡dYßÅ€dšk]|OfˆNEg=n{I†mEfG/ÌcB¦µymLTTQp8|„]„¿“™Ä“k´…j©lf…O‹s@uß™~LG}€W[hItgDv‚UMK1ye?vkJš‚bbi?V_3alEkZmcJSqGF€EwzOˆµ~ËìµÊŒƒÒš[¼yTa>DX69T-\eChY0¼´Ž¬ÿ¨Zr5£”]½¨†›Ë‘ ±Œ‰œj}Š^…µy–Њpª]Ž£h‰¿v’šZ]‚:`‚AvyAyrK|Ubz<_~=›‡Y¬¡e£Å€¦˜Z¶ÑvÆÂrÉ–e¼µw—œc«ƒU›a}¬X»Ñ{U‰J”—[av:co?œ…bžŒRЀtß…jö‘b³™W—‘\Ó°xœg“‘V^sC’ˆ\ƪ~ÿ¤}Îe¬šl˜ˆ_“ƒZ…f[¬¿†Ù³†x|Gj`;RW3|cPÝ¡p»•Z³Rƒ‘Dv’X_”Oj†D4u*Jj/K}9iŽNz®my§P\t6lˆaœœ{¼Û–„Gih@_lCsjNnqCtLƒtQ”rK~WA–\Z–xNycC³{bÆ€oÍŒˆÊÀ¿²lpšNe•Sm–]m‘Uj‰C`Rƒ¥]yEkyD†oJlnYŸ‰i˜¨q—¯dÌœ}ÚŒý£¼§i –\Š^…‰KZL6W`?Z_M‰k¨µ}§¹p†“^pWdƒe„>:F-:@1CY3GZ;KVDO_QmqAXb.HZ1L[4Ic6Ja7FV1GQ<Ug7Di9Kk<TwE[„=XrFf–TkžSnXq•aw g~ SeŒTyŠTŽŒZ¡}RŽvMdrUaŒuv²Ÿ­å¦Ð‰¼dhH[b=T_=^uFqwDgz<Am2?f?V|Of”[m¢iq´w{ɖñžæ´ºî  ¾do‡Xo‹[y‰Pp„V–VwƒSn…W~ŒGguN_e<EO2PjOp¦j‹¯ch…`tZ}ˆJON3pR0nf1WuEanV\oQCmQAMA8B/8K&LC%=N$MG'NK#D`:nE7†p4W¡hD[~1><*0)$5 *3%::RMLj+PtBzY=—\/vwBŒZg‘_‰}e„fM{jSv”Uq®u Œa޽rh°–{•{r˜ba€dzYLŒvDb„`m`ZrŽ@r–Tgu[dbRZnUSsB;s=2P-1H7I"UU*Um.H‚AQa<O`8Zk7’Y4LJ=†à‰:çÕ(s˜(4)>-l1I}5@[SOR6Ib0A];GO:F\6GoDBmOCY;<E'0F/4C.92'@'.:#?8\^"_€<J‚MYl8^w7pz=fŸJ2sT9A18D?A%>Q"<N+>Z.RD"FX)6J3E8'SN.[g=YlDZpRXtQ\„V@‰GBX7QR+aY.rd?x‰L›sXsR`sYdc;Wc;VX4Hb=JU>NM7_jArŽGažbf–Z‡°ib¼qZ˜``„Mhz>^„JYsLos?ssQ¤‹Y_Ô…^mgvyAxŒ]m˜kmPJ“b:dH7K*K\"I_96`5:K+``'xo:jhJ]{>UŽSUw@@†V3{IFR+:m/2H&0:FBBU#ea,X€4QeGOp0im@Xn4Nr5EP%?<)LB4”v9tpRZL?>E1XB.SW:{`6i´i^xL|l;M~a\j7mœGN“XBk0X>$¸S2r°qgªnm–EEn5Q>SS<U7-mK) _8yStNmƒNeR0iLe™`…YAƒM?_A6ˆL4œJµk‘ZDßœYk§^ ‘Iy…V‰pC\tDRp<c^>O]B?W1i:ˆWUÀuid4LWTtA[W?]O:dj8[O[”Ij0fq<;d1lATŽT^Z+aNdl?|‚0†½dT”KNv7fj8hoAY>+–|WErZc4(ÓcGpÄ}SK6a:2IC2t4&­Í{~œjq®mž¡cdÔ‚o¢[ab6Q[-ÿ_Jœ§lû‹mkkP\t@—©‡¡Ã•ÁšŽ¬|®Ï“y§p\ŽaŠvLX`9]]IQ\8RoJXxF_[4yc4|lQucHBf9Qj=cqC_f@otNm]QtBtS¦­…ݘ¨€žµŒ¸xc|Sg¦yR _hN==Y,¤gTŠö—WMl‚E•¥h‡¦en“ZWo>‘º„®Þ¡kÇxxS¡Èo{¥Qk~@b„G‚N™¨ae™Z~¡[n—GrnH©i‘|G«nF…–Z…‡O¬¯t­½o½¤_È‹a§ˆP²—P}•JÞ’WŒ§VO¸·uŸ§`ÏňÂá{§¿lñ¨…¶±z‡¡`‘¨V˜ŒT’‰K—W}}T…|\–ĩa°Š[¡€\“}]˜mSwqQq`¬³|¸¥„sKtwDkk>‹WBW>|vS{°QiŒ@y£Yo–T`Œ;UP.R{1Ys>_~P‹S_X._a<›£~‡£ÀÜ…z…GerBa^B…\MˆxIxZœ`y‰Q†lP‚_Q¶xV‚kQ§sXªlRxxQ”b^±¨p–¸aqŠGnU}—\i‰Aex>vDsJnzDi‰KЇZß¸Ššâˆ¬Û‹ë¿s°¢s‘¶j£¬k•³k„’R^_A_kHl“uŽÐš½îŽž¯bzlPqk[zž‡±¥w”ZjlKgmLus\ˆrfŽˆq{€LMS,>Y0Hc:GuC\ŠO]‘BDf5G\FWp;WxK[ˆ[i˜ew˜PYJn@b}Hf”Tj˜`s _~£[ˆ‹n¥¡j–‡]†z]ŽzU‹ƒr¡ÍžÔ›«Ëž­ÔƒŒšHST6=b6Kt3FM'-+*B<FlnNazM`„U|”cz²“ܧªðÍÔÿÕÛÿÏËý­Â×~„˜V\†Xf€NfwAXsOŠRn}Bav=VqC`iM‚w@e]5WlB^ŒW{_Ž~X{xF_g?;N/JJ([U1Vh@LrQUgKLkA@]@>R*:M,5L(6E*M?%@J"BT2w>/Ÿs)@¶l;S5<7A6%,G&,A12C#SEh`!JŽA]jWcX4…^0³s<Wj{ypdWoOBmnFl_Š„Uw©_j¡wu„aZ„VYdR{_>hI[s\ktC{›?˜L˜‘Xx~r\}_IuR9`@8P.DMFS FX*cR.M‡A:VH:<4G=#Ii-œR4Û‡@‘ä†7çß-bŒ-1'K'cPQ‹KV|ZL‚NRfChh@pwIsŽ]S’tEja<N1DP6CU5RW4Ii?DtBIf>bj=d{BQzQcŠLa|?…Œ?S¦U5T5d8@Y(<Y(EX)BU.CL,DH$<B(IT1MN+L^6KgEQa;amN`{Rf{QM|FFe9Ka6aV-uU0\g3msLpc,[ŠMF\BHN->@'C2#_],U‘U^}SmzQ{—T†²k¹nsŸsjšbU’aOnGKf,^P0w8dh–hX`¾gevgww9xŽ_YŠXpwLFtIB`9:W-_`)RY.iN:F#JS@M)5B-`I^r6c€Jvq:q£`b³vX¢f3y[1=2VL(Y‚BEpCD\,Zl<eƒCM…<^s1V‰5hGhPjelŽf}mEyjVi|]iuU|nIÝaT„ÿ¾Srfth0OyWnp7—±TJ€gfj0I=1QS+L6¡`_¿Š4jRMN*Ri@Xo@b^<JX7m6$œƒHbˆ\sY9}i<gdGaB/`S1[I7PH/yX6s“\orCŸ´izšMÏ‘N…hÛ“^r£}‹‹ViŸcvT8GP7^X+aO3dD}b£ÀlsqZafPTY:mR9ªžiX‰kPp1_€->l,„”MBK<j<{™\sMWd1g[/X]>Pc1La)ngDX^yc@DŠSN4${U-ÃÀ„v±†{‚dIMeS4}ÇrgG<„‹d‡£mˆÁrƒš_fwL††Cë|M¹|LX3)hyXn›p­‚‹¨v¡Ã‡ˆ¬{×¾˜jšaXU@qqUdc9f}PW¡weoO]k@‚‚KVx=QqDYsCPa7jˆPZT[lF“wFoQ2{vW͸ŠÌ£‚ÛŸ‘e˜½‘†ÈŒ‚¦q¯¤‚À‡‡„OGo@•Œ\‚å”W€;e>{€Ra|S€`e~Pª¢v—£w‡£o¬aowJrtBTp7n…DcœJVe9io>]x9l|Mh|FvŠK®qyŒZyzJ<±•g¦Ä~¢ÁtЇYlŒCnžW®¨]¤§[œÈa—ÄkÚÔxÿ·sÿתîí}Ú¦eèÀ„ÿ¡Šñ´€Hq…F„…I‡zT…mH‡pM‘…PZt<^GŸ…d©`†Š[«Œ\œ‡j¥¥o—tfr{MoZ?{Z>^`7aaIº•†›É…w¼YYx6i{>fx@D\0Sl5_ŽY‹’Ypq@HS*HS-biF”¤{¯Ûnr‰MŒiFtYBqfBŽ{O„U“Ÿr˜¸pž­l²šn¶ƒn“‚b yd¶€`ª†Yhc;[_K±ŠXk>Md?etbq«`Tw;i€Hƒ›[q•Wy–RhŽX­›„ÿË ÿÿ¯âÇrÑ‘sº¡o¨Àp›¢To|IaaA]gP‡”’Îß›¼²i‰‰Rz‘p–«–Ʊ}¤™o•¢pÁ™_¡{R}nY…†f|’S^kCXwO_“Q_—Zk¢]u®kk¤SQvA[yI\rFb„eq˜h€™n…œ_zƒ?Se4_{CfKn˜Vq•Vj^‰vº³q¬k®Œ_€b—¥¯Ô¶ÁñŸŽÊ}˜¬ar†K[‰W[ŒHS_9;I%/;$3>-@I>aeKczGgŸ}•Ö¦·â²Àî½Ë÷¹Êü»¼âœ¶iy k{«kiSWuRk†SˆyEdp<]`9T`@_iGklEf[6`d;VsBUeF^dGl`A\bGRK-WY-^n=OqOMiPC[N=VE6P75J.9F*BG'<S*LK'9T+BH6u6*™d.C¬o>_ˆ?;AL<$8H)/?21=(=O&hL [l(DNU_C]Z0‹]+up0cTq[NTS<SD;Za@{j9w‡KU“hUjZT_=fU@…b9o—Qg‰cq‰Co’A™|K£‡JtoW{eEiK9Q=2D0/G4A6Q!bC!:„/*QJ-;)D5KI Mm<†O<ºl/w³nA®£0Zb;>(e>tv5a•[JaQiK^\6tcBymKZ}_CqhLgHdwAp~Aq‡RtXkžeu u~i|£m‚¨nnÁsv¤}i®u^¤ydŠ\X†E@”MHh@Dp/:p88W1<K,7M&MM$IX,AW4H[3Ka2X[>MoCRhFCv??[27V.:E(MH(bX4TKtv9Ck<?B,AF(-E&M0#wg)w§la¢lu“lx˜\ˆ’_vŸ`‘­ppÀ€Vz\LY>Di3bW4n}R>ZAŽ\7^¾eVeW[i7[pBS|H[I@d?E\(2O,JA!>D0/Q69?!0[%5E$<<[:!gK$GZ8^f7~z5™ŸV“¶‹mÌž`µ•„ nN„]?S-o]=hy:OpKSZ9h„:j˜IdzB‘{3”gt x•šTš·{“Ÿtu›_|›Yÿ¦j£ÝË\¤vwn@QqFys8Œ§TnqJOpGQg-Y~9lw7_zCh^2Mf?NJ)=9/`J1enD:iHL@(Z2bE0nd2_ŠDYb=’lIlpZzdD†pSp{Tc†MwoI]‡Pnt=“dE˜d~o`gxCmQ3``B^~RQS6`\1gsSW6'cK1¥nEaµUSgsQ†œZ`V?gfC<l;P\=d'Hm;G3 ixCe„AbQ6‚Q0ZkF\:(MZ:Fx7¨>/zŸkvi\”U^i=sPÍ _ºá´œÌ«eµzžiE¶t+*$]7'T8Ž[³¨kŠQ®PlT‚]DzuSwnJs‰Wnh>–u[›‘ui¸y—~TVi^G5[P:PN3brFsyIkƒYtˆal•YR}CXsENg9mo:~Ž^drNœ¦cc‹WC_6VZ.‹~R¾¯‚‘Â…¢O¢·€Ÿe‰ƒ]‹Sœ¨eŧ[€S¨r€ÌvP4ri=Yk@WS0BS+VP:\pKYj:c…GRW.Ld/Kc,Jh/fj0_l;\vJG[,Mp.Ÿez¨mm—O¹k‹˜[w…Mœ‚\ÙÖŸ¿ÿ©ºÁwpŒFpv9ŒšM‰‡U’ž^ÇÕˆäÿ¬õÿ»½ÿ“Ú×|ª Q¤˜uÞÁ…Ýȇ߯ir‰E°s~‹RŸ£Q¹`ŒÀy´ºzœÂw¡Ã„È€mˆ|[ ‹\¨¡pÛʉ¦±Wb~0Yk*d{7„‰I†wM†”_žÉ›¼Ø’¡±qT¨LJm2cv:Qd?gy=|‘L[‰D]X3D>-hn9\uF–®t¦ÐprmGtuZ†Š]‰|I†j]¥šp¶´†ÜԻݣÄç¤Çë¢ÚÈ…ƒk¡£o¡€KpfEsŽaw’Ff|H |UpY§jq”EjƒHrŠMˆ]šŽ[ž}S¡œ€¬ÑŠÿÕ©ò许xšÍ|‡·ei›Wzm¤py¤„´Â“¤ ekOsY²¶™ÇãžØÆ‚´¯y›œYwƒcz“`‰’h€ef‹]^…W`Y{™b‚ºu®¶u”µw‘²ef‘Rg‘ce d\•p„ªr•Zx„Pwp3Ni7MqDhKrœLf”Yz¨}£Õ•»Ê„ÊšY’~PŠ‚j¨³œ±ÞªÄ܇›¬bn˜UjŒSu|XyjObsJ`t<Kg:AP4EI3S\E_…]j­ŸÏ¡¦Ô“§ÔŸ«àÃÉÿÒÉò‘ˆµRn\†Œe„Hf‚SˆHk€Nrn?fkA^xCbpD]a=UT5_k8W€OpQy…Eto?]qFSO']^-Uh9AdDHZI>Z?JC3>M.5Q?657?5(GP,VB/;_15>8n0/”]+B¥c7gŠ9<C95%33%;4"<>"=N-AX*]S$=t.>`G?P/KG&[N%b[*^W9OU:NK<XZ6e_8kd6Q•W\‚^nˆ@bOjrPctBfR]‚L^mApxG„yHx†SLaZSK6Z6-G@56 AGCb&^^2[w.GdQDM.SF*eP.@n9@_R]P-€a4i‰S?‹s?]GZb6gJXŽWEYEgEJg=^hDwuAcgF[gEhwA]rELkJeM3š`+¬”H›¬w‚œlˆ‹Y˜ŽO¥Ÿhšœq¢ww­„Y®e‚or~QR§ZS…UZk=K…>:\>6U1;P'@W0CV,EV(>V/M[-Gu<RaEH{4IjL@hC]e=pf?mp@`‡[S{E,P;A5"QG%HP0YG0ƒp-v±suªmd˜e^gRlnLy–U­¤bw΄BjnIA!^]4Mp4G[EGT.b3O²gNgXQd:ho?e}C@uJBM,HV*2Q0<3"D6!+6@E-M&3?$FQ!:K,?F"NZ-Rk9Zn.~X+¤Y¨ªvµ½—sãÎR»©[{_K[:pV2QY0L[)m='ML7QI:a{,ŒaCv]K˜k?²eJªZO”M?“iI’‡ašeGz³|f¤‡Ux7|s7P‰OnF.TW+Qa*ZK1k UEhLI\5<J->a)Gd+[M:dW9l]@d™cDZ<_<+so?†‹Nƒ[K†E1tB-eb?†hGneRl~OO‚NM_>\f5XA.‡O4d¤mO‘Wk`5Œw>f}RMe6pB(O s@G)\C(~yA‚ăÍè~—ʇ[iDjl<Oc8FF1?P+Ad#Vm;Yr>biA]ŒGIB,[4~H-~oA–hHW£hdv9–b>vš_oŠ]…RlŸc–uF¦³ƒ­Ð”“ܰ™¹’aÈw9b<|=1ajF¨U4Ƽ…Ñ£e¾¦iƒÓ~àž…Î„i…LZt1bQ2N/!‚iLCE/…Q1[kK\‡Pfb9{c1}xCk¤Fm…MQ~@or;do;kzIKe8¢hcžcbŒQorHn{Fbs>\xI`…LOk1ZC#Zl2wrLq{IWh7E_:j^5^`5zzNž¢woÄgFa)Uf0R{CEZ0KpMMnAn‚Uo˜cM€BMf6Kx<Ir?Je-Gk9K…<dƒ8C`'Ez7Z_0«qO¿µ‚¯Å{{Äf~™R‹YîØ Â«_Œ}OVŒDvnIt‹E‰Ty•CœI¶Âoäå…Á÷€¥Í^€©Y­šiÓëœÌÿµºìˆ Ê{°Åa‰¹PˆºTŽ·dÿ ’î£yýÇ‘ÿ¼·÷¼œÿ³„Ÿ€Ö¿‰©Àtˆ°fc¤CY™6mz?znH{gG‹œv­¶|½¤r…š\y«OK^%cYLi”JIh.V{8qq@_m;SH*^_0uƒE—žs¤°Qv_7zYC‚sQz…Zo…KwwFyl<vVHß“ìî£ÍÓ»Ã|µ kµÁ}š¢_‰ˆ`¢Åjo‹CnlDnlIg|Kwx_q¬Wtx=pw:ggBptKkxR{‡j›¶ožÀ†öÒ™¢É±Ä•¢Ó“˨ߩÈí¨ÏÔ€£¨cªj“emÞƒÙе؀žµsš’j–¾…ŸØz‚­nŽ¢s•§k„¢bfŸVb†f—´‘Âz†»kp–Uq’eƒ£§¼szv^’XxzF_c=TlW…Jak8^rElŒKi”V‚¨ˆ­Ý¥°Ø„™šY{Z~…ŸÀ¡¿Ü„•¹_tœXp‰H`uMq|IkpEhgMkrSnJal?TN<UbOl„`ƒ©’‚›¾‹ŸÐž±åÅÒþÌÑð„’—I]gBo|FgqDWiA]oBbtEd{GZL[o@\fIhfJ\{Gc|BgtEooJrwKf‚Mb|LNO,L`/Ri<@o=?RB2E8`A*YM!9lLNGJQL6CY:X[9Cc5BB7g=1‹^0G¤f*`~'.G..#35"2@+9<(9>!9M)KY(F[$>a49O29F.;L)QH%VQ'bV:I[;R^7]Z8Žu9~­Uh{r•_qšW`ˆ_crOh‡GkyCn‡P\ŠV^‡[Xr_CfLjO::_1.DK.>#?2!IM V_)Ph.0gC99.D8ODUT&J]8EY:YjAazD^RaŠWkŽRc`c]U[JvUOg=Yk<Ys9Bc<H_0Aj:Bi66n0Ge5MS'PP+ST-\`3|o7v„?K}NY_?`k3zq.rˆK`nVdMx€SW£^c‡f_q<>ˆICM8FR.AQ2?a3>S/5E(T?"Pq3TbQYt7V^GebBlzXqŒfc†bW€V[ˆXP‡VU‰`^tV[Q_bPwQ>mpQc‚ZE`HWP4QZ8eL:˜cF‰¦e9›—QB/Pe=@b6AC+Kd1”_1XšO:YHHB*Sf3GxE?Z7EZ.6F*$195*A 42#EF<D#BO0@M$<V'OW%Vh/GK-<_&FSvU%•‘M ”`µ§‡·¶¤ŠæÅ‡Ç´UoEs@Hh2JP)vH6UT>Dl.<>\A&Vr=Z>7{K6¿‡?„rNLK<‚]=ð€ArÜ®lN|²xM‚RFZ4DU;^H3‰i@h°tbbNZ_3r:(MU;gh2a‰KZo>ÈnAn}oHoO~?+ŠRYuHSA(v\< kPkPw†[z­{µŽh¸£Šc†qKO8?^2pM0mHp„gx—\vºqU§gWe6ŽV3‚·~oUJDfU]Z9ÐŒ[šÿ´¢­`{–][ˆRzrV‹nWN[4Nm4i§US™]\iC]ŒE.M-lW.r<,¬‡ZŠ^‚¤s­…Pÿ–eÿœoíÖ¹ÒÃØÉ¶©¦ m¨Š[¡‰hš©t’•kewS¤‚El€7pƒ1ÝqAÞ³Zê¬dº¡c¤ƒbµŽg`vHYk78X3PQ:<d@qN:tkK–aH{RLp:YgAš’[ƒ¨b™i‡£cvGbƒLV}Aw‚]¤±yIQ`7xjFQ–Vqc7Vr>Zf=n{^TEp“A]”UUY5Lf8O…MP\1Fi3z…L¥Ÿs_£ZNj:LFt–^S—[e‚Rs—hr†XXyEHyDJc6Io8‚o<Gr>Si4gxM`?Pi0Rr6QW6ƒƒXŠš`˜»y˜Â‚v¯g •a±W`}<•q”Ù¢‚Ҟǭ§]DYM'˜sR¶¿l³Îs‰¡[v—I‹€T£|[üæ²ìÿÃÚý‘¹Þs“Òc‰¸[~˜eŠzS”Q‹º^¬ŒÄU…sP­Ž€ªÿ·½ÿº‰é~Úev¢I{ŒAml<j`K”~T|uD]|7uwJDu%JP7ŒŒORq>];Wt@u”MPd0Fk)mzGÎÁux>jN8cZ?pW<ŽaH“vMa<np9wƒf¥ã™¯ÐesJnkRsg¢µ›¡V‚[š£h‡¦W^o=mmIm|Cd„V‰°f\…A\|?al?^`:scF‹d“«x‘ªt«¶¦Äuž·u¡¶eˆ…`Á¹‰ÈÝŠ®»Yz”H‚Ž]¥šaŠ’N}—O„¤R„“E|FZ‘ŽW™b ¦zµamvRŠªv¯î…Œá}‹Ý†±ãŽŸÈj€§d|§t‡»~y ZTz=DD)?6'HEHj‚q¡u5MY.Qd>isCfˆQxt›¿´«o‰_ˆ‰k™™‰°Ëš®Älƒ StXƒ”Vƒ¦KužFv¤Tr‰FsmG‰gKzMopG`}R[†_t£y„º{”əťÁ’¿Ë’­µcktHTi:Pg8M_@_u>Wf=^p@LnKbtDYn6UlBftCnw6Pk<So>Zh4Xa:NeNoyIHC<JV5da8<r;'TG61/QF#oC&lhFoeVS\PQUCnfGHpK>GBMA9N0KM6j}O?JHX0Vb@;S?7D:7F.9I0CV/Jk(Ak2Jb8Aa:El=Vf9a[.OW7B[@LY6_e2Œy;pœOj¢muŽ\fŠWXgRS`APm9[eCUm@elEU‚HJy[B`=XS<:O(7B:1J),4(>2TH Vf,,zD,>:2< 5@9> DS,NX8[a8fiB\lG^nISn@PrFViCNpFLlA]sBt>_zHavI`|?e‹N^QPJ?qC5]97Q$N[+S†8ExKDQ->c/Ae8He0cf-?‹<OcB^g3bx:wt@Q’S]jRLz1=tJ<A+JG+:b-,E2/;(H8Kf2VmSBzAAgFUj=_jEXaCNV<_O<}n;’R”ži·…ÄŽ€Á”±‘m£zO’|_nXIjDG`8W\>SN7¥@+K¤bBTIKG<My8\j7QvNja3H„N9lRDS0X])=rJBP/5O#9I)1E=C#)E)1-5?>@5U,9C)EN!Db'I`+?Z,Ca(W\ Vm.cb/iq;›qG•¢y·—¾­’ãÏeÛÊH¥XV/TG.>a.3A0=:X8$lzA~rO‘cCNI9nL.€ƒ\˜yI–ia{{J“sHy§Qf[rS9GqS_i>¥¸lN€e[I-TQ(„B*pM4N</dh8o|Lur8xB+[}LvoN`CQB3zhFqqF‡‘_’ƒnúzcz^[‘jDu^8wvGI}]]m5YƒRfS5QuHc]9ŽkHg§^Za2Œ:†Y`99›g@ehWáó€ŽÔ¤„™JiO7sT1si8O]3GY(TR#—¬Q^”^Uf;]?FoBK[6‘bF¶€cÜ‚a~MXÃ~…x<z`?’M1D3Æp1Ä\C¦…S”waK9ˆ‘TKP0aE#ŠW?n‹C[€<G/!o9&ÿ tö䱩ã–Î’‰À’™Ë”—³”ŠW`jA‹W ‘cñs[”£rqUIjR\„aLœYfc5v}Ky‹\WlEЦkduGhb9^h@|jDD‡HW_6O~F^Y<NJ*CM&f`4fjEVf<quGp~UNc4ja:kƒP ¢k[¬iWrPf]4loHw‚e`–axvW…•lšœ‚ƒPNh<{…UY„>ph>Ub3i}Ep‘AGj6Wp1t„MwˆK¥q•¤k³ÆˆˆÊsmgAlT2pSÀè¹ÅóȼôÈŸØ£’Éw|£YhvBnyL¶°v³“d©tW–œ\‡ÍsiOßÈìÿ°¬ê—²_”Ãc”Ág¾‚`Ȥ~£Ã…}¯H³¥fæà–uŠVã{´Ë çÿÔÖñ€¢Ìeœ·n}~Yu€`{sR||K_k;zIsg7zFZ“<I]2~vCRv6g‡IuR‡ ]dp;Pf2i†I˜¤O~ŠKkxR“xJsXDd\Jh‹\o{OarA~l[É©e†©`y|Z·‚m‰ƒl Äxu“FytW±elžKp‹@iMi‹Gg„P‰£q~±TuJy…ProBSj@so[Ž€`‚MkhC¤¤g‡’Ixs1Me/_zDŽM}Œ9_ˆ;h¤Z€Â|™Ë•«a‰ŽUrMqwJcnO[sKpƒXx„tŠYn–`ˆÒ™Ïÿ¶Íÿ™­èЦß}’Îh„¼jЧ®À‰ ÆˆŽÃ`@s<3IDL€|‚´lfx8HY+DQ8Yc8gƒJr”V{[Ž•]¢¯o§˜t´®„³Ìw–±U}‘M……PtŠ[x¢F^ˆ:kKlžITu<PXB_hM{„jŸa{Zr¯t“Ѓ•Êqˆ¯Tan?jrUrŠSoƒDbr;bp@fjDlqEixJkzS]~OW{I`q:Ol7Nq8Un<WpAahAf\3KY8GYLxdH^S?HU@UZ7?d55W9B5,\K,lA-rP7KaHNSJlV;X~Mgf_V\?SXA€R=fŽJS}yf[V[];@jL=IBOX0Q^7PlDVuKXn=M~<dk>_zAYyRTnMS_DLP2<Y;IS/^\,tv8n“Jn‹YY|QOWEIO9TW5T_:JZ<W[;ezQM{RHgDA]9A^53W/7=*3C((C(47&SK)al1:y@2KI48%2F&C8+KC)1U026.4F @L&IS%P^%Q_/Lz=UvEct3cx7ww9gƒDY{Mf`?^c9Li;Qg2>`1DY4Td*y|:V”EArMQ^-er/G¢]F{eUg5Lq2Vs<X†@`†G\ŠKS‚AK|Ief<8„=5J1C@!K7OD'7A/IH2cm2`‘V]}QY_@ae>X_L=MD?H:FD,LP)J]/iR,~eIrL®†Z˜–p°ž{¢»‹x·¬bŽiŸ{M›ƒBeOda8G?Ka9NW@]s6iwDH\6zj,n¦\NƒeBnLTf4Pf8Mƒ?<e@4B$1533!74?E!;K):I$[Z*GN7EN4=M(JQ#Dj1IU8o„69o:QR"p5•zCm‡Wn]HƒqD¬…b¹•y^Æ©HwoR‚KAiDBP6av5—­e££VB_W]1"YG3q3)]ŒWÊZD^€u]‡Buk>ršYk?ndF`tCº’]x±mO†XJa.YL(cL,h^?lcIu^>b†P[‚B”u7”{LgxMbn8ug;gvNnOofGl`H\A4g3(d]AZ=3ˆŸ_|Âz\[^b7fwOfa=c“]d{QdŽVYl6q|I|€?ƒw\‰bU³œfÏâ‹|ךN}XTF1:E-Ka3OH-;I)RS'¢ÌigƒR\kO·—L¥°slJ„T:•sS•–_ƒV‘WCl•]ir7—\;`J;dl5Um>yb:wZ9RG9zŸa[D8lMB´|oS@0J2,vUDÒ¡yÿ˪{ˆO¹‹X¸½ƒ»ó­žá¦´ç¬Ïlj̳֕¤¸†°yƒc²cBމ\veC„sG|_?Gh.`C)™Qn°mkuJfc7OP6…hKƒ^Fm£cVu<ke7:V21D(9M(6P%EP.JY-maDjsI:M!Lo5`j@ ¹xHF3B A^-R`8€}Vˆ•h†£ƒæ „——h]‡RQoGlSV~=La-Vk>ZBm}9Rj7XvByNŒ¨m­È|uvGßИ•Ò€cdCe„L~^RÌСÄð¾»à»±ß¶”ÖŸ±d‹h£’Ù¸‚®‰]†•_¨p ¡_dŽF¶¬‚¨Öx¹È‰³ÿ¶—ב Éxjy<€[Æ¥}“§bh£DŸ©X€¥U»”v®™…áÿ£—¿MŒvI”\K­}n½pŠ]Žƒ^ˆŠj—rI[`Dr„Z‡¼jh¢UoDo‰Gd{@™‘V€ƒPvA[{N£®Wk•3††RÄqYŒ‘h‚¶f|œe£Å‡”Å€Ëvc…Mks5hz]ŠÏ›¤ç‰’­`Žœd‡¥Qs„Hw˜Mj•KcTj•dz™YgLxbu‘GX^/`J-`K<lWCviIu€P[l3M]D£‘Tlk4KvLSˆKTsCot?oz<kV–¹~³¤cš„QzzT…‰]‹¨tu·|žÛŸ³ÿ¿³ÿ˪ÿ¸£à•ç¶ËÿÊçÿ°Êø®ë¯ì†¦ã~–²^p€Ml‚Sxmž®{’ʇ|È©©ñÂÃß—“½^Xp3J\>YtPY„Km™Mv”FvŒXŒ¤n…¶| Â{£¿Rv•BrsF†kK€{^Š—M_4Ij5Zl5^w3Ci@_iVŽ”fŠ¥Vl›d‘Ér“»j’«f‹CC^5SkPv‰Mco;Sh<asBll>[oNv‡\TmwNp{Qiw=Ob@WtDPk=DiF[s@Vg4>U9BpSZƒLWdGFLEPG:Qc4ZY;CO3FS:CD4>>*P[1_`AplHA|^`G\uX:ZY=€P?‡Ft†ukgdXnNApF]cIm{@nˆRcWXXZsHLoALhJDe9UU2HT/ZU6aT.Gg2EU<^X,f^6`q@QqGPV>UA4TH-S_5=R1gU5“j/`’^KfYEjBDl=M]@9s11G29F(ElAVvG_bCXY=Rd>8jIC15B2#:F+@G.*Z,/G6<C"GW'@Z$AQ([W#Yn1SuGEo:Xc-at1IhB:S7FK+=Y*KW%Fb(3]3FV,X[/si4`F[…GZq>Œf<l˜KW£“Bv_GO3^\,io5cz6g…?cŸIS›WI–`AiI4Z,4J)36"4:!B1!F="uT*i€H<†[:L;W_&7a7?=0C:)ID+M]+YR+]h9Ri=œ|>kçoZ~Q{QBxZCpXCªdIµŸa…¼›z¹–]¶`yc…XX~R_|P^ƒGGX-Žr3o»Ve™p]y[XA™ŠD‹Áv:¡‹1YB870A$.2$G8 N[)cq:`hAhi:J`8>W/ZI'eZ1y|>S™N=B7<M%S[*fx:Xn@Jj;hsA[wFwlE^…Z„ixCi w¶“iÿ¥p‡ªrRR9GB2X:'AL0b9-kxKŸ[WRwHRh3…”c]uZ‰Hj‰]•vR€°hf_O[wFgs=UKu[3›O;D=¢lEm¢^Sv:gl9a„=fu@j~Ft—e`lTQjR[I2CJ6aG6`T@U\Bå\:€©ržË„VœqKuFaE,ªcAuŸyuYu—\WˆQd?ƒC`O{b?ÏœcËç‚ë·xK[sKhzRKbJH]-G^5dS!šºqvJ|Z´“Cà—Rש‡fT²£gÌ Wy²zœ~PZŸiaz<onF_kMg|@S}Cf€M]{G]`Hf¡UT^K©l^Œk`BF3ZB4ÿà°èïàã¶vš¬kYf—_ÿ¶…¯}§o¦¼‚»¾‰ËÙ–¨º{Ž^†uJ‡˜Wx•pq^Bn]@…wCV~KcaIʯ…e©r„f8Wd;rdDƒbA|cKz¸n]‘T~sOJ~Eib:ycDq?m^5muK^]8@uDAZ+<W/TZ9®¶vR‘Q+I%@I(8Y)`^7pQ1ˆ„Zƒ†^l€]…eb‡ZfJdrHFY1T^8Y|@ci8]r9\Dht:¥‘k‹¬bt†V _£Ãyœ‚PŠc@žOB§^Mª~^¯¬“µÙŸžË‹¥`Ë vÌ•·{c—¬f‚”S¹Áƒv”I}ŠL”¥]{†3qo;ƇƒÑÜ–¼ÌƒvŒGƒaK€‹O„“Xw•Ku¥A¯ ^øµƒìê’¬”Vz•LlfJglP¤ŠnɎxÚ¬†Ç§„––y§˜w¬g­¿t¬¨a‰iA…‡Rp–H€{KatA`tEuŠ_¢§Qj„6n~@ld>u`6aR4og?~xSœ£ãÿÏËÿžev5m^]ÄÒ«¶Ò‚v²hh®Ws¨Pgªd{µ^”eˆšg…’i‡`|‡XytayšNVd5NR>fjT`zVe•gr±fO„CHS7hS;bqYƒ¡rƒ“Y‚œi]ŽDJy>WtT”¤q²v}ªov—eys§¼¨Ëé»ÇóºëñÃõëÕþþÍÔùÌéÿÞòÿ±ÎõŒ½âv¬°Y®˜c¤¬mƒ˜NZwDRsFh†Mv‰aœªz³¡yº•hŸ€W‹uImi7_cJuU|CfŒEW{5Mv]…¢‚˜Ï„§Ãc~‹E]rFYXD[L’sWŠY††M[u-@_)Go3Wp;\VFsm\{Ÿ]q¢[‰¤ZktAXM3Xi0A\:LeEq~>Uk2Qj:bq;MkHWƒ[l‡JdgC`UDogVpqLamOnwTX€XX]_YZ‹SIƒb]ŠflmEnHIMGYVD`xA\mCRd>?P8BQ5mU/{‰ClŒ\]yb:ibGFOXF2PH)r<)f>w|nUZOdNW_Mfg?i}Il†TV}OJuK]S4[Z4JbBQiAVl19b3IR8UH'EU(KW1fX,Oh=WcIMb3DW4F:,MH-:X5@D8jK)jt6GkJZSERb8IkHedDC@KhL~{J|§m;‡oRHHW@^X:5s>17H*0';3#RJ*Cf4:fJDR1;O)5H$FMOV'Ka/Ia<NW6xo6Y†V>]TFL+LL&;W7K[1?f*IV4EJ/:R8NR2ce,XGUvNhr>¢r9`Ãm:’šAV@F_/7o=AN4^L-~e-”›CeÃk6™‡BK=BQ&=M-8R*1A.9@$ZV+Uo>8[4A=(FY'K]@DV<FF2@G-I^0[V1Ze?`\Bçy;uÿƒUz|TP9Ng>AcCd\>niE…d9ƒY‘’j‹ˆh€–pm–wd¡vLŒQaq<ƒ’MvŸKUŒ[[nFqt<’U1£uH}Ù›PÒ¥G’v7hDJK2?O1W`2ic4XŒPD‰SKiAIƒK_nHws6‡VFz];O(<> EQ]e2\u:cxJlr<]FIf;aH/Mx@jr4l–\v‚MxzTGyRLe:EP-W?!me2YV>Œ[2k‡jFI0‚Q1N¥qYc:|l9¶Q¨£l[z]€E8~»aâvRÄÿ¨H…wDA-a5*K3UN6Y=%`f+aeEewA­AsQž`R¢bPm}iocSbhMkmQg€Y‡b¢¢`±¹‰fä–TmDE`AšO6wŒlb…[zH]ŠOQ|=TQ*vGq|F”¶fì³i~ð¹reEcbInƒR_¥bVz?Po?PY(TiGœÜ™w‘U¾Tâ‚]°~e¤l™‘_z›dx’XyS]ŽV}|9ky?Š`_ŠT÷ˆQ‘ÿ»soO^„N…rOâÇ{^]9qfKžgTÿéµ|Ÿo°kM}©p—`{—ba‡YyH9†sP•¨z޳}—¢lv™`rvSŠŽga˜]ÁvK€€QyuJ‰…L®ds™_´‘YƒwUn}UzdAnƒ_GiFsb=d•W¯Á„¹|¥©x€XúlW\7<c1fV/PwHap@KT-:V.I^6£µvL‰HM]==W+O_2K[."2sP3r]7Žt<€uOj|HlyFfj>gl:hu<fp@U‘I]z;q”WkŽP _~—Uu†O‚}U˜ÇwŽF„tUplHyY„bƒˆLžˆRˆ±mkšR¬d¸‹g™Ÿ`ŽrIžŸq§çŒvŸLw„Au‰CNQ#DM+_60€‹`R—Aˆ’J{T‚¥V‚UušHo˜O´kœËg‡p7Š‚T£”rŸº†œÇ„³žcº‡iú™vÿsZÒlP¦cEgU4lF/ŠbAŠtJˆz[•I}tIWqBhg:cn:‡[1alBc{FgZBZtJUyP_”cƒÌ€ŸÆsò„è¼d^yE`}‡Ëõİô˜ Õ‘™Ñ—Ò¡Ü’Ûyx°f•®u™cwn@kQ>xaX„—Zgn?\^G‹`£q¼‹Àws¡XZ†CHV4YK6f\Gq~KszK~Nj¢TN~K^pR’z…¡pfƒ¥|ްմ•Ĩ†¯¯ŽÉÙ»ÓñÆäÿÌáø“¯²b•…Nri3;?!2?7muEgv=ZvEh…PhE^~Ml‡QMj5;I4KL4^Q3MP1TY/Ye:Qe>f‡@[„3Ja=n[`Ÿ¡\x}AdfD„aY”pVi`G…nP…}\–‘g¥N^p2Tp4ZyC}jSw—k“¼]{F]`>oP0_R2Sf-HX<Hg@\r;vn6bo5QiBIs\‹©iŠ¥P_s@lfLƒq[‹uLurMpqOtwWz}czŒs—œ{‡§{†©‘›¾`y>l{KVwTMwP>aE0M9W6,pK&q[1vbDolQfnWe]W:HG110I5"¡Eu5<’w<RXEP4EQ1OS3NW4Lg>Fg>;S.[8,uD#OQ5j\>Xi3BqI<fC=R,?R(JQ,RY,?Y=LV<K`,BO6T>'NX-O`DPW>|n<Q†NUaNG\;]F:On4[tBxyDœ¦q~µ„C•'QOE5#NBZK0Ml1;uWDXEJ_5GX<[O2>z>0QJ2G%I>MM"A]-CQ&F]-g`;t5M¦_@UW=J0C7%GP#Ol4>^@8O8JW-Rd2_{9hDlt>P‹LP_Jˆ]3‹;B­„JgpO]2Ci86`A4D,KK)n[/d=N£U<mc,J*57/=70e5X^;8g<7Q2BF%FW!PV<Z]CHK9HE7Wn6[e6Kk9[\I”[.\‹CIZDS]1ZyRY€Wl~T`rWyvGh~XTUJ`R]T6zl3{ŒDc©_f{J_w7`v<CbIQ\.Oh33K3r/"´X,°Äy„ÞµZÁ§j¡‰MŠ`Hu>QW3pc-r—Nm¥af^f•`~‰?f­oIh8n4BO+Pm7Y@g†Bi“KyˆTe©d~‹M˜³cpÂg‰vFŽ{?TXPOV4Qd5E])AT*K[-ˆ]/Le8—W,E^F@+ti5NuYlh5r|Iâ’Kz·†[VJgA4£l5ÿÃw’ †—Úx<uy=W/@);4!@.#`C$_o/aiFh`Hwx;rh9cC7Z>1…xC—‰fs¹q±}Cž|`®™t–˜x“Úm¹}U¡[n‹VG„aQe>un/b‰J[<z`,fŽVr:r¡Q±ŽM‰Ú­r–m“£u›È•n«hoš\}Á~Qe4›e8˜nP…õ·Q@[]5¸h=Àº›|Š`Tr~Mf^A”ƒOX­fey6v€TwyTjgM­ƒH Ï˜s¦Ux¡`¹çœŒƒdXoUnlCÿ~PŠpUtŠNm‹MqŽZ‹“aThD~S&<'K`9˜ÔtŒëz´a­§s¯™ÿ ˆh¶€AuS‚‡X²¦kžr••iƒ‹Zx™emPunF‚•f‰‡XkJ`t@£ƒS–®i¥ˆNxIy€aIi7]oE^‚SMgB9T.clELh9Fe=œ¸vWh1=p2;?XN%>{38R'ka5Pj4UY6cpH^‘If=Rx=J^+HZ-ezMƒ¯h•Á‡¨°my—V®žy›ÎŒx·k›žg´kqWJ¡›€±ÐЍ¯u…WmeEO…Lq{H˜¸u±¶¢±lra9¯nY¿Á…®—v”݈’ÙzoÙfI?Xr8O]8’„_}žNbšF„›ek«Uro>^t7`^1|uIœšf±ž`{Cgz^p…j‡´’ÈØ¯ÏÞžœZ†lD‹xP¡‚K˜€O†ŠZrVt§VeˆCtuBnrN‰„Mrg9Zg6Zg8rŒH–£XogX§”…ǰzØ¡f¯Y…yHwjL†m]¦Œn­ Ñú«¸Ù–ªÛœº×Ž¢ÏŒ»Ï—¤Èƒ—Žeš‰hœgulHj[7zYP‰“Ux}F™S~³`pšZ~„fŠªhk›dgSm‘QTw>Eb[b‘gR‚An–Hv¬`|§\cŽay˜z®oz|YŽ|vÇ™y¨‹j‰tjŸ‰‹ÈÀ¡è⨿ÀuŽŽS|ƒDbd7BI/@J8StMZtFUyB_†LgJYv@ZkFjvOc…Ld^BdX6\U;oYBabCpuRnvD_†;^;DfA`}Omp8Yd7LM;VZRxgO`Lv^Bzl]¨Œl¦T{9Pn6SnQg€h¾n¡CYq9IU<VS<^W5Pa0DU6Lk>bl8Z^1N\5YiGmlM†lµ_•E_sCbnDef@Zi;UW0FL5KPBjcRiuWdxZm‡fp‘hfj8cyHTiQGdLHaC@];1E;9I22C-ME*hX<;nH6;M1/#!E&ºL„w0MrhBVNGQ4HM0FO1Ua9Nd81P88:)EBFY%EH3hU3R.hc;FrK?f>A].I\2EZ5:_FPS8?W-FN6RM-^^1Zj?{€Kh—MSz[@YE7C8]9&Jl&{lO£žd¯…K‰8\K2H17D-CA&UO+k])YLPih<E9:<1UA)<x18aOCO+JF)HP$Ba*Vc0Xw?qj@“q=cšU[tYDu;<_6Vd0X€=WwM^dCVi?RU<NW1CO(RO$eY%8…DQMC‡O(c’BKm>]CLP.4\3:C*DK ;d.cM8gn/I†d.c?*F))145[5MP'Ee:>h:CQ%@H RL/N]CJU?RZ7P{?eX?Xo6@fK^R8\l/XK.gQ0e€P]‰`_‰cc‹Zfˆ_fLcuOaMp‘Tl•TqiCN„ADoIHX'YK BkG@m5NJ'9O,<O4eN,ŠX*¨€D«Ã|—Ö¨mÕ²hÛU´„]’b{‘]n•b}¢_ZO„Dpžb^’bcIlqDh_=T`<]a/`e3¦yF‰¥e¿Ógv¦iGW9YJ'QP;N5N<$P\+Hh59|B4Q%=KBH Y[%Oi/ry-S‘\L€Ifw;Š¢KšÖmmz[DQGA:3·F(œ³e–Œc‰¨`VžkLb;_=0lbFMLFN3)aU4Nh/_X<^R:`[<e<U†™q|ŽgˆWŠÃg…¤X‚H™nE³‰`„á­½zëç˜âÍŽ•¶|dtEek<sActAs[ŠÏ…Šé¥®ÖÅÿŨÿѱ䴤ܬ’È—™ÉŽ¢²†wj8}Nݵ}k¿ž_NP]=V1$ÿWEX¸ŸimKxlR|ŽYƒƒ\dœ`[D‚wBŠ‘jh}aÁšn|’x}I¯TÇ…eàʂβ€w¸jZy?Lh1\P5`J*sK0RS-\@$¿sNWuW¦¼l×ÿ¢¨Ëu‚H‹~BrD…]‰…V‰vA[sJ ŽX‡§tlgDs\@‹nW¤›]Œ rcžiŸmI•agzA_‰WyˆR{›[ar@ŒsK~heŽnv‹iRX8M`=[wJXe==O.rHA£Îƒ?N,?A!(a,DZ/`Z4dr2Q[1pm3~|O}GZm9Li6jW=_­fsQƒRrZv„HgzCo‡G‡O¥“\€kHŽ–uÃ謒ƇÀÛ¥Âã¤îÿ­¾n³}g«—iUxA‹ŠW¥Ÿd¯ŽAplIšŠi«\go<¶“Nž«YªÄop˜Nl‘To¡TˆR’NrˆB€‹Idu5MW3Sc3LT&CT'asMg…K’tX°…hŸdUÁ”€ËÖ¡»¿½·†¸ä‚ƒ ]zuIˆ‰I}•Lµ©oŸ°h™^mk7IW4ve:Žc4_[0}w;]]2t}J£Ÿx¶¶™ÿ·¼‹]„oEyp@fa/c:7„UD„`XªŒz¾Å‡œy¨®r—f«„m‹”g¥rX—YD‰dJdqnMjkKkqSƒ‹br“_‰¹myµle“JHi;ifDiqH[zJvœ]m{:nYP»”Y‚B‰Æ]¡Öd…°Pkv?p|S…™XU^>g[Y~os¥|x˜ˆ‡~¶‰kŽ…eŽ€Zq‚O^|QcQQgER^Re‚RYwYjœ]už\x¡ew£V]ˆBXrFenA]Z4T\9\_?]_?h`?vpS}ƒBb?`}LhŽU{„@Q`2QF4XKN}‚u‰‰YkmKvdMnxYž‚[—wGhe4N\6_~b¦²p™Vjn;UkA^{Lk„Pa‹GOm2B[6GX>\pGlzC\wIktD]e:^ƒY„ªd”®dgžc\‹QQg:Zb=T\8FO5HN@biJgpIioRq€`†V]O*@m4>pGXR@kR:UX?8`@6Y<?N5PU7Yb>'ZE8-<:3#,E*59*S>%VS%LP1FQ+FN)BI,UQ.Y`44V2.7387XH#Qk/Cc<9R<GL.K8#RP*Pp/Dx9R^9E_2=_NCY>CX0KN.OR*Wc=…~Ar‡QPnZBeF9K69@.X>uf+‘_c˜EhoEIF:W/<C1GK1PN0JO7mN/Qo0,wm68E:8$N>&Ue.XaMU;OY/Ol.nuAaFYtRO`F…\7WŽNQpfbo0d9eM\ƒN;pSEB1:O)<C'/:#0> =CTTUY*<ˆCSP?nZ-g•LI”c;oB0Z658%IABc6UR9aY6H‡I?`M3e6MH@G'EK0LJ2^a6FsDFh9LR)PN7m\9a[<eTEZ“KZgPwuIt}WLƒV@\5?H&[G*cuBy…Vb{Q‡tD\ŸaR~OsŒGo’OmwLcoQ]eETu??yH3_2vPVk/>g4>T0h^6SoO;]>]_2Šx>¤‹A~½ŠtS™}Q™‘eœÄ‹„ߢÊœo½€d–\`ŽXpm1fƒIJƒX+\C2E6=H,CO#^_(®j/±Y[{YGyN?Q86B#hOmI%TK:`Y8Šk<TR@R]/C]2?F*SC,b^<u‹a]’jkvTio:Ñ•J¯’t{ÃsMRDFb>ckB’ŒNyŒcp¤ahqHh“gZLFe,$FF1C2#N8 tM-‰l1 VC‚•jz©…–Vœkƒ‡aš]o˜Xj{Ac_:hd7wZ0È£LɽБš{\†cXrTU–Tq^5–Ìn¨Æ‰³¡`·¦SmgG“i@á­zœ½™n“albALP4tC&XV;ˆg%¹oKÿÄŒx̤è›]dw_PO=Íb[¼£swf}qL˜€Q„“J œgK¦mvj3…oy€d¸º’stS]z:WU1×q<½œa…U„yTq°tX}UOrG2K+34D<%SP:“hH£‡cÛÕÆù o‡On–Xx:ˆ„=†XngB\g1cD{P\U8ZT5xfC»™fšœk®‹\¨xYvnHˆ_|¦bƒtHybA}s;^l=t~Q–gfƒ[b„Yl†RU{QE`2@;#F>&jjD©ÚŠ@Z5;M(^€QZsB[L3|sDWy=‹xJŠjIca=[c<Wz?mƒHjO]j9ŽrF‰¡Q}|<h‚Bo{Iž´q¯Æ‡m¤pªÔ›³´y‡–^•…^Ä—ÚùÁŽË‚¦ÇˆvxNW_8\t3‹Jhq4ŠI›†Mk„<q‘E{®Mf<gr=vu>n|Gqr>r{7i†6lx:_AEc.nmA`€7Kk/abG—¤ma‚wFsuAvo9HI/ªjQ†‰a¤º’¥½„›¬c‘œ_‘ˆ`”®kv›J}r2€w:um:sT0qc<nˆJo…<u¡JaªOp—O§lÖ˜q¨“^•ˆNEC$<6'PM;S`Rswcšz¾¬‹ªnt•g“dŽsL•vU…Œa†mTZZGbUD€…^‚†_z€_t`‡œo–°l•¼v…·xz­f\B;g)<<,Ub=m‰Q\ˆ<J^-jz7Tz;nFz’F\k<@d0Mf3[zAgpLqtn¡„†ª•‚¼›”À¥„”zL][B_Vqžjy½ƒ–Þ™àŒl¹qq^g†dŸnz¤k}¢ks”XTKX‡IQw5Q_1Ob?fhPt{HcsG`xW‡Ig…]”dr…>Za4QT4LICnqo·µ‡›«nuŒO^~BWuEUhM]nSs‡CCj8UuHƒ}S‚sD~<^t9anC`mKxQkyJYtHIoSbŒg~ fwhœRtCR„Rwœfœ¹u¡Ï’£Ýp«OorFkb@J_<KaB_l?Wa4QR2@?>XUDVM+aa6D‚B2`K58=I1'GJ+IW;AW::J6/32-)(J7MP#@D/B)&E,<@$HO*N@"=I*BV+@O/>B8>F/@=!EB#\`+jk3Pn<3Q@4H-@B'\R'co+?x2SM=TX/GoTMcHDR1AM4VQ5pk6_jDFODCG16O0>?-:O#cP)ˆu=`£d6…iCP6GM'<R1@G/CO6XG2NP3YK;yK+iEO–‚AtfQW:v`.J•[FURa^){w7WŽMUgLJm?RqA±p?SŸOS~pfj1nc3lnAo\>9g?6A9-B",9*+00263H<\g(ik6A‡K`XCti,`ŽcYrL<z@<j<LN5BZ>UF*bY/^_4PrDCh:Ib4EI(TB*OP,]_3Xo9D|CKW*KL0Kd=QL9~Y.T–V\[Jhi=nsPK‚YYk8Ra<iuE\yOI_Ehj9‡Is]}šaf–VVoVtm>rp=RgF[m6J|FBf9HO#Nb(Tn.Pj1RU;VU6W€B[{?NvC¾a-gw>JpE`+bK2zj1‹`I©‚K£È{†ê¨Hž‹q_0~q2–†VŰn¯÷¡U¨’DVAuv1y³ZO|N\W.UV,3rP.@%:@nR&‡X/_eGcO0W>.bB/Zf1\O0iF1sB+{†V¥xm¨p™sP|µi¹ŒY­Va…`i–`a¢gn}TuFQ„SiA-·xDA©ŸS?7]K,MQ/XS>WaDdP’‡;•ªw›t‚fË{J‚zF˜zFg¸n^qD>E'I@BB#Ÿ?$ˆÔˆ³©mÇã¯ËŒ†Ã‡¬ÌqƒžerŒW‡­eœ´||Àj¦jÁ†[jÊŸy£dz®etÂ}xO^PZm/¯ŽQÿÑ—uÍœ‚]AnV8yRB‡qT¿cW”Žqœa~˜Xzšd™ p\¾všs8ˆl…z[‘É’u]7V„;]o8§‚^‰€i§y`É”jÏœdŠ«Zm–[Y~LNP?NX5d[B¹rT™yižÙ~à݆ÿ¥€^]¯bO“9qt5|Pcd<€g0„oUv‘b’œg†jP¨“m›omnH¤[M…nLul=€¡hwwQ][;`oF€š_ªº}¢Áƒ‡Ÿfƒ‘^zRqxUh{^YwRUxLq\ªÐˆ]˜WY„M‚ˆTpsKo‡Hy†OŽ€Q…N¨…Mqi8Vh6v~M‹ akuGWa@xwP¬e[|CpŠLŒ”Zžl™®|˜­t®ÁtuI¿ŠjÄ z´¸ˆ­Æv„À|½Ó‰µ{p®mXƒG_šR‰•[m—?s}An…C–Sÿë‡ËÚcϯTVj.ON*YK(ej4ju7hz<„YV‡CguMfŠIvUvP‰{P„Žc€‘Rik>kT9R`3FZ:[bN££¦Ç|q³_³q¤Ètš†I’bGk_=zb=umBhz]¸§±n…ŠVŸdžï“–ø„ ÊsˆU„„_x›c_…`a“p²…«¾’ÂäœÉê¥Þ׋´o·¦‚®³g†yKmD{P|mKp[Gr]Fs€_”ªu|¨rl¨q€ e€¦_s•S€”nžžgŽ¥[cœPK„8Yc1WP>tvC^ƒ@fƒ<`‰CZŒBGh9MoHXƒGNr>XsMd“jƒµyŠ| Å”µÈÄ•kŽ^?WK@€yc†º„™Õš³à³´ã£»â—”Ówtš]q”o{¢|‡¥y¥swšj€ \Z‰=JmBQgHlsQlvJn|Ig}A[sFqn°Ÿjˆ‹G\k7TX7YbIr€€É§šÑ|zšKf†FW{H~}Q™…L’‹Ru™MWz7J`3QS2dX-XN2YU:YeXo¤gx©ko ~}«ƒ¶²rz¯xy¦j{Ÿidžfi–j€¬—ɯ׉¥¼\lm>VR;Q];W]5RM5OR5LW38K'/B2BL9_K;G`@&oF<7=@E+6I,NG-$K5+1:7:"3$ $445?GTI^I!BO.CP46B8?B-9<(V<#Mg+^\8B`8:T7@O+NT,Qh:Pi4<^-OL2]U-I{SC`LNP.S^4em=[eL7TAA5,>C'=Q-DJ.[^,{z8Œ¤[a›n8YIDN5EU'H\1CV29O8XO4CT1?@5F(Ìt7ºamªxiŽjx‘ZI§kYvns{F^zHQgBnn>qt:w€QŠUXšRZ{WJi:AO95M.CF+B5;Q$AO(,I,)1$&2.+64W6Zf+WtFCƒQiU9KBEcJVJ+^g3YŽBF}OC^E;N2KE(LP)Ja73V6CR0IR#HD-RZ%RV3E<MZ7U^1Jf6K_?…w;Z£hXZ@So@X[@M[,at/~ŒPyˆ`Y€fij=€~?nuRo~O\nJrhBf|MYƒROxNObG]a3LzG=m;=T'[b+Fk2_`(EdI[e4U^@Tk8RZ:fb5¨wMPŽ[RpEQuJDp>@g=Wc.žs1§™P:°™IWGJU+oP5†…L™•_`–_]Š[|DSBDlB7n>tH*Uo7;XILG&]Z!nb>\j;EP0Z;&qE(^r<jg5@4"lE/yž`¨“h`¬r‘§Yz[H}|Em‰clk>ˆvAmˆaV‹`eu78{R:4%žC!™¤xR›WUE~^=žƒk•¯u«Šy‘nØ–H¦Šutuct}[ftYšŠIh²mKjS;Q,/S-);\:‘TebT’_9¡ŽIu‘Mmh8dg3~T‘ºkœ•^®Ð~…Æ‚¸¥s–þ¹Œ¢mŒT€¯fvœX^u;fk,”`ô†“¸}›¤{d›yXxŒjwT„Rƒ–Y~dx›p¯€i‹«€z‡Oˆ Yšœbuªtg~:aa>•b?’|`±nX¿ž{¿§o™r°’h|~^}”`uˆU‚tNvˆUà|g›zh€Î…ßÑqÌÿ©³Ù•ì’wć¬mÀøe´ib_.Šf@j]Jf_F‰h½„Y‡ƒI‡xOevJadDQvCzƒY¬¹•Ö‘‘¸t¡pR]”cDs‚X¤|X_€UV`9tE?kZEfŒa…„cŒ­ZzXzŠS‡dBP`:iW:€Nuh;vF¬•\ei9ˆ„Ky‰To_9]=*cP3[P,…yInˆS}¬et§c¬§oz‹E­hG¤Áyy~Y³­}‹›[“’x⣋ԋ“Ƀy»s©Xo˜N‘¯l{XkKk}4hi2zsAäv=‘T*‡[3gƒ:nlQ{ecx>oƒA¯š`”W€U¥ˆj‰[]U;`hH†Œk~zQisGfp@Vf9m];‰t…Æi©`‹”T•½„³ÍŒy@hQ5rW:xQ9im=svC|uKˆcAxY@xk?l]:¸Š€ÂÑŒœµh©‹e¤‚f¶‘jÄÁ±·l•‘f«g·]¾™c•{HQQ*<7*Y;3a?9jRA}xK`zEeX>gK5}vZ”œ}‘®Œµz~ `jNHc9aqS‚Sy•]|¨f~¸bV}Mm†Yj›d‹™\hšcu±k€¤hTIId>Z[@hrNgXz§„³Ü©¶ü·Åù°·ºy±kUpYInVAcQF‹€h¦¾—²Õš²Ð“¬¹r•žcx‘Vkb}œu} oƒ–jpa~TfŒL_„UZnNioZ}Kcc5ak@TqDdwRuiQ~bHg\6PZ<Wb`gŸ°Ü®¹¸m‚m1Vl(Uq(]~9e•Tn³s†¯_–AZc1HK-OG*?I2FW:NZJkycuš{ƒ§wŒ v•¨n‹ªk«|ˆª~Š´……À“{Å•…Êš˜ÌŸº”®[jqB=S9?S8QX3LY2N]FVqPOl75F2.F5BE1gO1F~BQ`I2d@0E;;H04T*B1""*&!*)"0/3B=@$=P(PE'S6*FG3<I;5B0><(X>!J\(AX<@P3FO*IP)Vf4GtCJf>Ca'LP1VO.:pQA]JTQ$mg-awI8iO<MA=H/:K.EL2Fb1uc3™Oi³k8^d89;AO%VT,Gd84G/V6(\A)LQ3Pf?kh@dc?xmA}lAÄn@Œ—Rwªx¡‡Eu`FN>HP#_R-„[+—m6tEaˆR:}U4JF3L#,D*)?%/8"B.8M&2M,+5&(3&..!%3//R:b['[}LW‡Q^r@5‡?=TDUN1za6gŠC:ŠQ2R<B=*XM%[n?bbEMgH7sIGD1LQ$aM0G‘=B`GBO+FT=cT6€ˆAS©xcrFZrJDdLS\+w{1uŠeŒxNx©`Z˜nuxL^‹LNaHGk;_qBd}>{vMVpMH_EV]7IR6Gf5O]+bl39f<NN$Ke.GV4QE,PU7Mc;kh9€•T†¦jg’dKqQMO5Ph4Yj4Zq,wk3T~CIjUSP$yX1qwIi¡\ux\hŒAD‹=B\,BL"PI#ad7cˆHIj@?[3UP&JJ/b>$]P*nxHu˜O_£QMƒOcm;x~Es¢o„Vަbg€\q„Ph³w=DDPR(a^&m|IMwJgE&ˆ™S6£Œ]O4–V,ž“j›ž‘Öi“§‚‘©€šj_sRFƒmBk9¦\A¬nW}~X‡…U€Q?‰fM`/;j98I'E<&~A%CsLnQ5rœZRpN[p6–~=²¨j‰½{Ž€IšwMpZ»[Žù¶~wNmD¡±yž _RŒPPm'ˆk8¶˜\ÈÌÕÀ¬µ‹ ›i¡\™}Šf…ƒUjMŽqG‰qV¤{\…`‡‡C—”hŒŽR‚C¦bDš‚QÉœlò²…ô¦„Ú­Å´‰¼ªš¦Œ—ƒvŽ·†µ‡–{fŽga—pR­–]–ë‡ÕÙnÃÿŸÒî–ÀÿÑÎÿÁÙÿ¶eïŠK|D}xJ„’mªŠdu‚PxPbQwG-€nEesGkP– hœ¶x‹™e`fAtrOovLvb>t‰L‡_ElŽ^iwPnkNr}JccHaX=€—UƒeEuzSg|LŒ‚X|Œ]zlGjl7l[7xE[v6xI{O^b@}R5{]Ae];pmDc¤T“¬m“©cn¦Zas8Ts.~^°˜o¬·hja;’¡{±ò¥¡Ó‘žÅŒ…¿vqnKa_={r?†VržT_„=\`8llDEa8[M3mo=d€CvY•®nb…;`tCcyF¤|YŠ…TusE~mQ…²sƒ¡d„…O{vJ{^E~g<hb8auJ•›T‘…I¡xP~L¢¶wt‡EfX7_Q:QC*cH8…iCun>lNv…PhxGUV+H;)QE.]N9u_EshCsM–‚`®{‚…]œŠevhIYB4`B6xXBdtJ[mHQL<XB;gOI~T‚’P{]3G=0eZJyŒ`}‘ayvXz™Yi—NOn=Mo<]j>f•Ru¤j²n†™\|c‚“Yt|Db|Dco=YbHnx[pXZp;`V7q\Lˆq_‹¹Ú´Ú…‚}IpHB~ODvU:ET*1K+YSD†iR†xOn]0MA=oT[jNzw\ten—`q€QovC_Lp“gs—hz iv€RcbFbqC^uEmvI{pJ}qJZk>W_Zqއ¡«…¸šj•Thh/Qb*Su<^›r~Øš§ü¥ªÝts@i[6eV1\M(=J-GV5?T8Ghb€³j}¡VdˆPdYh—bpšn{¡v}­ˆ’¼£«Ó¶¶Ø¢Ÿ¹t…¡s•«wŒ¢]b{S^m<R`>RqCRqUY†\s…GR\3On7_W<ue8euFSoJCcF>NA=V75U:%@3(-'--2#;#'5$<5>M"@O+FQ.OK7OT1[@+VC0HW8<W?@L3`A(=M+5N3=N+QL']Z&Dg4H\=Ge,G^+HR5YF*CqA<]HfJ#cq-H^=LB7FY4A^<DX5HV4db5–„D¯_L€lAXTBE6:S0EG,(R-J/'U9$LO.ja:NsGBIJUC*Wa3R_=jbBƒy5P=Ÿ|8Oc98 JLRV%Qc/_t3ˆz5‚{:S‰ZFsSDj7Ba*5b/,^6+:&A2EV)7a6/IA):&%5*:3<Z5_b0cyGdPSw>KhMPH6JR0XT,ae,Rs9:r>Oa=ozH~‚FŽ`Z—iEpWNU>hY3T†<@|XBQ5@L6mV3œQW¤slT<}|GZrSg~O¥ŠEj¥ivvSvy@r‡Jg’MKLgZ=gi<VsHbjIQpE?O:mP0C‹dCX-H^*Fc0I[)8\+FX+9_08P.;L/BR0Za.{—Qi‚XwtP]QNz\Po6Fs>Hj&@cV\!_b*=pSAR*T:#}T-vvH_¨kS€DVo0?n+4[(KM"IK)_J#Gf6SV+Ss7R^)Z`8wvD{m@y£Y‚—VSŠQb\3x•UiŸuw¡_YE}qC•²q­Äzo§„ˆtU^…]OQ33c(b<½…< ºu_¨l]K™’K†Z¢§x‚€fzG=bO=cP3UM4ƒf0‡\8{yFx‘aU{S~Z5R¦V\lAAg>?I'C*UW5Kn@‡’Az‡XbdfœOs{I“­bxÃp•Ô„¶É”¨¸ƒ¹£x“ÿ¼¤dÛÓ›¶‰MŠNQp:`i)—`D«Š]ÉkþÚŸ‚˜uÐ{K¥ŠY““c½¤eqZzhC§xO•¡|¿¹€`›hœy;ˆµn„‰N—‹_ägVá‰Z¶ŒY¢ŸZ°©xÈ¡xÁ£iÛ¿~ÕΕÇΩҹ˜ÒïÄæã©pwev€U­†QžòŒ­å|ÐîÀÿ¡úÿ»ñÿÊØÿŘíd”Xki8|qWœ‹rq¨s¯vq}Gdl;`u>U‰OPe=Œll‘_r[<epI|UbqpCrcEgYA˜h\Q›pbk?~‹fiƒ]z˜LQ[6`G'XP.VP&vR3c‚Hic=bp5Zh=cn>—ƒUXeE¨Y>upSjT:yM<s•Y“±gt€@v—OrªXuLk—Rè°yÁ³ts€Icm@Ÿa£]xi?ˆ]Fž¯wW@Vm4hƒJzX‘§j†²zu¾‡¥fˆ¼€g‡Sb{HŠªr²ä’±Øtv©MdzGl{J„xJfJÊ„l€¨d›°ey‘L‚|S£~^¥rR{sBqškŽ£o‚Ûq`•Efq=ah3qvCYsASj6qJ6_UByjCvhBZFuuFq„MvNjiA[cAjdJklLzjPx^‚zTŠwpúΫ¥šl §u‹ŽandCe`BnxFeP=gTHigE_\BucMsX‡¡_z‡HQY;gbS“b‹—`~„L~ŸPab6OI8^v=\~KnMpŒRl{LbEi}KqjAXe.Lg0MlEm™j€Â†|°_@V.5;(6G29DB`VT–“мö¥ŒÎ†v¢yv§Œ{»hT}BFf*4M#3D?8'B=05]CfŠ\U‚8F[ElpY~|OkxL`y:\…Lc”r’šxƒ npŠVd|S[|GkzFwoK€zXƒ—Zu‘a†Ÿc‚•TsŠ`…£az>]o:Sxb‰¹Ž°ÞšÅѾš_˜m@qK0\J0oS6SW1>U6@Z@Nl`‡¥i†µqtÊni®\d’Td‹^kft—o§„˜·œÁ‰’²uz™i~¥p‘§`lwQkqJm{O^tNGlT`yWa†NJq:9M6NH3LG0RO6AY8H]?ZT@Bh>.bE#>3)"M,?B(BJ/FY9T[:\T/VN4XMCDIAXF8UO/T?-fL2LY;YJ<LM3GI.G?-@M,HN-@Q%?Q+DO-K_,S["@W,TF)=_1ER@WU(Ch67S1BG0DR)Ic4HcBXd@‚ˆDz–Tp|ZMoSDYFGC42K-:>3IO&RB)RF.hcDOqN:F@K@3VN+Q_<OiAekDlv<yoD]T9rt>?8PJ"Rk*Wt3Vn1]p;vp4d8Mt:Ha/IK-cP$L‚;4‘N?\<MI.PZ17uG5W;=T+7e58\9C\4XlA]l;_vJV‚:@tL;R?AO*HP.FT2VK-jp9y“Jd~TœmNsƒR\p[_WLZxA\dEhnA@‘U3G3N?)‘e2n«e]c…|G­¢m…•lwwJ_tDSeIR_5ib.Xƒ>Io=ER:Mf;[gC\{SRdM>]6AL8}R-D’ZIV7Db*>d2CT*?Z3Lb2Dd5OV8Wh@eoAo’L]”Q[qNzƒImŽ[_ySTvNEd:Dj%?`(PZ*a]1QtMCc;Xg4LL5n_,j¡I<‡pL^/Jd1Kn.Nd;;g8GB.Lf/Xw=Qt9dq5lZ4fq<tœOg·_\‹MET:oc-ƒ¤ot©yY‰MQR<›ŽCÎ}[ǧxšx‘ÉŽY¡„QiFKa2IY€hË\.¹Ç~¦Ç–‘²}‚„\ކL_mN_O6hT3aU-SW(Xk>q€Jˆ‡h`iNI}Y;]B¥Q*Z–a>[30U)YF/gJ/oŒKp¸Rk’?‹ŽTs²o‰Óz¯ß–ŸufV<I5'vC+{gE¤ÆÿÍšÿüábdOHL'KA'Dj&rV4¦‰G¦âŸ»Ô…Šc“oHic9flL‘dL”~VlrLx\8”zE¼f­¦^}f¬qH—Âk”k­—e˜gqrQ}\AuS5V6Y/S=#F(°b8ʘXâÂzòð´þ®˜\|o=žyK¾ÿžÍÿšÌÿ±àÿ¯ðÿòÆÿÅžâ}wwW]p8mI¯¼ŽÀÍ‹”[s“ee„Rºœkk‚YStEŽŽdnwPPQ;t`FOjMgH5Z`9XM6trR…y[†£‚•®nTX7[tŠN‚¤at©l]e?X\@WRr‚J|qFz‡LeqA†¡_mƒP›¥mŽ¡\|`>’a@†“fwtW~©a|§nW‰Lƒ„L|˜SewE—“Vw˜O¶|@®£¬´w¬­TVa4Um<mŒO–͈~¾{fsB‚}EzŸ\ƒ‡M櫃ÿÿÒÔƒ£ g|“[iŸR©hŸÊq„¼[|IsN”r~¢bg~§ctNu‡P‚dˆ•Z£nDusHq‡W£}_’¤[ÆÀs‚Çtk¯ZQ^=oŠnfªoj£gzÁr¶×ƒÚÇ}‘¤gv€Ptd?duK‚‚SxnRšƒc…Œ]‚qQƒƒ`†~^k×µéë‘̳y®ŒZšn`¯†Nme8lK9^G5aI6aL6`PCqwNpUƒšh®cn‹_‚‡\|˜RƒwOt‡O{”F@G+HR3^m2R`8NZ5h^7YW9^i=okI„sDpS1Ie0Pm.JM2xjKrvEZ^3LN5NVFr€iœsyº†²Þ£Ôô³Èò½Ëÿ²íud†ERr1A`(,2&'$CEFe•go£u‚¹g\¤fZ™JFw,:4%NS,Xu6nY?ƒ`Nˆw^“Šh~‹Z{ˆ\k–bmŒWh‚JnˆQirOlsOo}^yŒ]tŠPtVw¡BXwH`oW£fŒ–Spc@jQC~YBjS2CI1\Y:sb6XY=HkO\…Vy¨m³‰¥àœªâtw¨[dŒYe‰VdxOu„]’d‡¢e~ˆ^r†cu‡^qtThtL]xV[Ždc™`XƒRTpYi…huKDO8@R8<N8RG:WP6MaD]X@EbC0NF,>5V("h>&`J3ZaDDmIOHHT<2\G1RM?QGDJH5PQ8GI7_I.TR5qU?Dh=<Q>B>3;B(;E+4U$=G'?S&<U$HJ!<W&II(=Y&FT5Jc.Hc3I_.L\7]n<PtI\bMŒu:hŸTVbVX]=Ll<;]B<L;2L,9O6QO/WW(wW1FnCAXLHM3MU8Lb=Mf@H_;W`6@O,p@*j:C|iA:BNZ(Rw*Wo6Pk5K`3BP$9V'>L'<J%:L.IH.wB*rŽ;F»kA`Vd4Tl8Z€IYzF\„M`vE|H^LP[`hcCc‹B`‹S?pM;IAGO-F\/TZ;d^<j[:zq@dxBg…PKqO_lM`ƒRm…PwwAQœWRkKocD}wQh‹]—U¦ƒFa…_RPEPa0]_/R^<TWCSk.Tk9I^5QV6`]:dwBGmENg;Lb;;X4nS6AyGET?Ma3Te8Ml@AU5Na2Iu7O€IiŽXgœUf]Q†LX`>T[1VT-]V1Zt9DzHGa+SO!JN([Q,Z}DZ`Gzr8KVbi3€„=M™jE‚KInFMr8Nu5Me;\k<TrBS|7bkCI„EWD(X_.”~6]Åob~HGwBz€I‰˜h[„]7M6c<O¢vÈ]9|—_”95»E.‘Žt^’]{Hˆ¨ndnTlnHÂM/ãÈzµÀkŒVwp?k†\]”dDR@XA/s>5˜–bt’rl€IfƒSƒ{Ga]Fp‡VnWHtGqo2K†Fic.„‘SyÎux‰N•Íw£½~”Ž[‡˜suϵTŸB „…tSGp\Ë™fÿ­t9POEJ-3F+IL-_m0xG±A²Ðƒ¼Ïƒ™¤u‰°x‰“]˜©}u‘k^ZOtYmwL ŒHª¦gr‚M\€N¨‚Lü¬u¼lÀ°·ŸˆZpH]Q+/F%)+55AI(9W*Hc4pC‘I¨…E™wHS‚CHf8fsEÔ‚[ÉßÒõœåÿ­ôÿó¾ÿÌvÔ€fBNx;ÃyQª£t‹lCja1žcei?xId\~ºy„¹}Á„Þœ—äŸ~Âx•[[s@EG,UB(ØzP¿»u^”KKN-qsIX“Mrw:bV2‹_=’Yxd9[d1\~B{†Oy¤e¼—fƒ™^å|Yžp‘£µ”{Ë©~“¨bjŒNuƒOgƒFiu6qt8Zi<yVЧZf¥WĘXîÇsƒ TuHy¤[fF¹±{‹»p]¨]b‹<pƒ@I[+‚qDÿÀˆÇÖsŽˆTŸŸj…©\„´[Š·U… Ur‡X§¦òÖ ¦§r–œ[czCa€TnX‹‹c¨”d\|Ex¬h‡«c’™T£¦nйf†vX–fHMU<Šla½´‡îìÿ·~ǧf¯°wÍ¢qȼv€‹R“žg–—XŠ€>­VCËb[©ƒk­¡p‰Š[Ї}ÿþìÿÖg£yM‚lM‰eJrCg|O[gCY]A[`BfzX~ªk˜½xƒ›n“n£¬b†”Z}‚OtˆDqpHxa{OUs?^}EG^0P\AKq5T`+[q1X^4Uc?\n6Up;U}>Lg.CM1EW@FbMPx]TtHUdP{pi›…›¼†¡Ä¥ÂްգÌì±³Ðyw‘Vch1=F!.0/1'GIJ}r¯v”¶w’·v†´io¡D6H(D]-Rq/;N$BF(M>7kaN{vKzzXŠZ‹„KtsDz{Vs‰On?ofI€sJw†Fq”JiŽK^~\u†N‚–Nm€Tm‚Qmx@e^:aZ/WS'F[4`sBRzRc•WpšSoše{¯ŒªÙ“¤Éhpˆ?Vf5QX-7=*JA3WZ>[wG\{Nd|YpˆNatEXhEVnU~Œh“‘c‡‹WZxMQv^y~TJZITLBFQ?9D;O<6QJ0SZ:-O=77;J>+U8$h=,gS0PsG>aUGA>R91LB6N>:F@@M>3N@3SI3WJ0zQ7‚X@TP=fK<U8;M/AS1;_,:X'7Z#<P'JI8T+DK7JV*^X,V?F|NCgITF4no;E–]_d]_n5=`;JF3iW/U~@FrVAWEIO5HO2AX>WX1Pa,EA8VF1Wv6L‰X@bSAQ:NW35V58<*_F i`.=ZPSOWv'No*K]2>R,-E#9:3M#58!>;#IE"8O3RP3‰\+šCWÐwRŒzVgAie6]…@EnMLD3ZB$CA$J:(dT/s{>lsH>xC5Y;@K2JW(UF1AK6PU7[_3of6`ˆFp†]Ž„Nd‡btpKmn<‡„DdtQaOJa^1}ƒIb‰UlU9Qi<P]CK]:``6EM9N[0Qs9GV8JK'ZT0XZ8OU7pL2im6M_FFa4]U9Mm>WcQbKa|I]IQ}H^‡Mvš_‚˜Zw£]~‘TpŽPQ–UO|O9|J6g:HT1LZ0Ac/FT%SR(JX-VK.Cx:>O8TS"De*Jh&ui.b”Sj„TIa`zCm„DswAnˆIe‘W‡¬\g³|Mˆ_FW-\p4z…E†žSrÈ~zšUiŸaacM`5[d6‰žSRVXål6tZ;hLE:-_6‡ƒ8¸s¡­z{ŒfF’rfkFÆlC‚“]v[yuH«|FȺ|e¢Šgwaœ‘g~–w}ª]ª‹Ij¢Fp¢NšÁX²Õ~¬°yzÂci‚]nvGs–Lºç„ܛׄqeE_T,ac>j?è}Vßµ™¿Ý¹ Ë£¶»ˆ¸±{vmPƒxKcˆSVeEXzJmt9]fKˆx:¦Àp§¥rÉ‚b²´…¬wYž|J¥g±·|–ŠnoŒU’ŸX°‘n™§mtœbp<ÂvBº{U¹¾‡‰±z™¸zr·yUJOwHe€H{•Mo˜Tv¡Xf›_NnPIc=?m5TG$dd?oŽXžQްG¬£ZÌéÿÿ¨ºÿ¿R¬bD8"Ul8¤l2[h2a[.Zu-Œu-g…=¨§mŒÇ|™©b “aµÙ“¼¸’ÁÁ˜‹º‘”_ak1a](Hc/nv=‘¶lb‘WU€H}‹X\…ESo3UM+}{Ld_6n\:y„Q’’\Ф_•¥S•{ExS̃Ӝ†‰œi–sOžŠT”•R‡¤a{Œ\|•if£_v«Xœ\ ŠN ŠG“OQ–v?x>rR0qS([\.©wm¦ÿ¹ƒÊ€dB\€9PƒGRŒI¥Œ`”Ìmg‰>’›awº`x¢Fw…AƒƒU ”e¹Ÿ|¿¥{ЇO~Fd|Qj–\xCov2hq6‹—f’Áj‘Vo‹L”²^u‡Lv…Wa‚\XhT’}ôåŽÆŠ\˜‰f³°mšŽ[thBšaIºvI™—Sv‚Mfn>Rm<l`AŒc±—o©ŒZ’bbÿ®±X†e—‹f‡KˆN‡‘XzV‚…[ƒ‘Zˆ—e‹¥j¼‡¨Á‚„–a”†[{’Y”~Lz‡CdoS”že„”I`sNyxO]nBXlQhSa‰<Qq3@U3R‚H]š^^¨g]Š=Ur/Fc4JgL^uapˆle€W`lNlYL|b]‡l^soŸ¤ŸÆ…°¸‚¬Žq¦q>BA(<E0DC4IF-B:+]M@ƒƒUˆŒe®¯~ªÐŒ“ÀfWv7Rc/]„<RjAIc=G]:dw?_V;ZoLfIa}@PyFY~Jk—Nb}>MK,I:+`T9n}Mi|e“`ƒJ`pAamJhƒJao<UU1XG&?K)Bd<TsWj”ft•Zm“Le–_z­‰¢ÆŒ–¾lp›?AZ19K,0?13%3D0Hf:Vt?[wIj€?If7H[):H$AM.EX:QeGYzZ`†_mŒOWbML]I<RFJL@UP8UR@XbCN_>AF@DI8RJ+oM3o];DPJQV>G3PC=HR5HM=KK;LG:FK;SL9\S6md8›`?\ƒKLlUMiAFj=B[3BP4?V)9^/CS(JP"HZ+He8nV5¯\(¢…Ef–\U†izxW›VW¢xO}mCtA?jDMc?jcCq}KD‡aC]RIP7JR;D`?K\?E\->C)iG/Šo-Kª^Frs]a8Fk>0C@@? QHgX,TxFQ|NBl00H%20445=:K 0M+;1$8:#<6<@!AV*US(‹W0}<FÄ~:kwTY8_o4C’Q1kT6C))<!5+!S0[`5Mc?LJ4:f5<\BBN+JF+pT1TƒJHjI^G:x`/l—ce€PXJXzOa|Cay<FwMCMBgR,X‡KMxK_f1Sl=Va?Q^;<\4>L4Mf5Be@JS0IM&FE(EG,9P0hH4pp:O[F_g@_j;mp5nHo€MSiEJ[0dY.qx8x™Zv¬omª{[ªid|KT€KVfHSX8Rd?R}L>k@;T'CT%U\$BW/IH,Ok+9f@Db-Dw<P{<`z?YE^iQKk6A{BAeDF_+Z[-bi>“d?–§YY¹|Z–_\¨UZƒR„f?…šPx«jljI…ZlK7’kIN¢~`eJŠL`cP„L3J~_SoGˆŠ;–]‹_R—dDƒSigLX\<[h>T^4^ƒBž‹^¿›aǺz|ŠcyŠ\Œ¦Yt¤^]‰Eer3nq:mS0jN(UM&ƒ[2c—L_~Aº¹\°ÕuªÅvP‹]XR2gR0vŠNKuH‡l4„„OžŒ]~ÁǦf± az—evX…‰VmdT–Z©n5ƒuS«´_Š·vr\<whCœnXmk^jpJˆpW¨“k’qM„©VŽ˜f‡Y¡šVl‹P^r6oA™§xÿ¬tÌÂŒ¿°|š¿‰x”Y[€GkuOl˜X{‘Zƒ¦`b~JtŠLqÂpüº>¢g@T)rH…w<‰‰@u‹@ÜqN¶êŠ­ÆWR¥EV\7qAX9a³NRu/_z3m‘Ov”X— gw™[`rAkA”Ñ’aR*fT*‚d8ŒcBbCvJfaœØ…¨Þ—_¡``P.ŒŒ\W†Fj}?_„LkqF‘–Yv¬Xžšc‰¦a{}Pxc:iS9—mO›TH—aO²ÀƒŠºhqŠGxŽRƒˆT…œ`‰Œ\r†Mˆ•PŒAlt;d…E–l›ã¤Z}RZrQS™XJg4DC*ŠiaÛÿ³³db¡Wi—R{˜H™S7_w;—™avÈmL”N[•Dv~K“†P®Œeã´Š™³o€Ei{?sd{¥t}”QYf'fu%–“L§¡h¨Qz‡Oƒ®itÇwr«h–®u™ºy¿ÑšÅ«h‡dEŠ_DlBijEdK|hNzzBŒtLŒqOnpIˆnGnS‡ŒjŸ™uƒ‹ZŽ„u½¢z¡•\¦™X¹ƒO¨€Qˆ¤nºÊy§ž[—wDuQ´˜e›­qŒ›bob²}k‰†]ššbx„Mt‚HmsJ‹‚SmuR|›‡¯¨m~ˆLmŠZ£ml“KRT7QaGx“u§¥×˜~®]Zq6J]5TK/II3^^J[nZ[bH]WEfVFu_Mmažr•b…†_ŽtWu†ZYmJY\QmlObeMGD)-/3+<<;sƒe—¦‡¬ÂztŒ=Xj4Y{Jkƒ`t•^d‹H@\0@G4^iDqŠC_Y…¤Z~™JwGdEWj7PR)QQ-VX=r\eŒ‚\o„OfBXk@lk@gq>Vh1MU+ED8DU8Sa`Œd‰qImwIe‡av§•ƦÃk‹ŸDGU$5D(3I/7Y@L^A?Z;Wj6Qc5Rc2DV-AU$+J%0F7LsJI‚OMuSXu\w†UbOB_YFThMTjNPaLJ^KZTEG[FXG?^L6dW9tmE_gHA]KcPGZd:RmBUU?TC:\H9XL<XPCYN;ZbAgo?~hDNsHKSJJ_89`:;M2FW+@X09V9>M,BW%FE(@H)\Q.ZZ,wZ<¯^.²yEªšbŽšjj„o\t\deEdi<mqKisOftSLuUOqOR]Be`DUtI?iN?U8@M(TV2t\.{uGb\cyY,YI4+5EFNQ$Ua0Vq6>q75[.2J(1G"0C.CJ0J[)2k985/*81=3?7?!4:$FK%†C"ˆv2MÐM†~g`B^g=A|M/[C4?.;7(X:%Ln=>\BIP*RR28a>A?*hC#pm:@nKS]<dh4X7Q?\N?bx?_ŠR[‘I[rKEyL?I=\M&R|DChAUJ(eb8Kd=Pd9Hf<]lALRPeH4E466!BCZL-UZ3…xERˆ^[xJW}ETrHV[-SX3;Y4;O'BZ-Mc5c\/q€@wŽXŒ™]xÀˆUyxPN,D`)BS5XK(Pe2EpQ<p6J`&>i;7J!<R(`i'MQTa1Q[/GiC9\:[R*AvAGf(g](d°tXžrb‚VjsGWpKii=˜y>Èp«z`–]hlMk]:q†Nxšob€[lcD™a¡ž}è’ds¿‚n™T£·v‚¡o`ŠPa„G`T=f{G¨Rx¤VRK„xB[xGZrNO@µvNâ©€²’‡¢mŒ¹vg~RAm76)L80[(51795?!aN)e~:t–F‰ÁdªwG‚ˆca€Qmi5zL.~‹F>a:rg6r«Y¨áޱ€z¥hpShb5yLƒ£f–l\«nSÙÚœ£å¢czc„ZD™wfrNq^QŒ\‡iP«“_—¤]œÊ•ˆŒY‰TA’ƒ^kŠJJa0ob6Ík…s_›—u–” ¼–†í¢‘ࣆʋ…”hƒ˜[_j‰L†’UÚ¾iÑÿµ¨üµG°})j<<1KC$UZ$Tq2bv:tZ2i¨G|Y†¥`bÇ\‡†@RŒCt€<`i5{wHu†UrkD]g@Xk>²Æ„q¹y]¯vh¢dp”Yl…T†¤r¦Õƒ¨É‡˜§bC^6?C#^U-Vx5Œ¥pi§fŠyM‹Q‘™V‰‚E©‘U‰Ly‚Thd<g{B|^=_P5“[Jw¨Tg“F›špo˜ZspKk‰Qmz>owBSt9ohEyœhŒ¶yÕÆ‹¨Ó‡¢µzµá¥hÈ‹ZšY…€IäáœSIqX>œ•Y„“Lf•C]u?v”S²¸eƒ¢GzœMz“L‚k9–n?zmD¨‚aެchŽMWwAx‹\Œ£hVp6Qm>Zq"]~)‹wFs|MujH‰”i¯Å‚¿r—™\”|NŸ{c‡Š[{Q‘PvjDwhO–€`®‚U{ƒA}sQu~IyOFvzRtlG¢`Š`‘f˯°Ì܃‹‹KzhBsj;E–dî™h“Nri8toAƒtS‡pT–cLb`¹vcœlU’wc¡[}„N€ƒW…‰Zm‡jÙ¦€¶“Uh‚IqˆS{ŒN_X8SL>vfNƒ§ˆ³ÇŸ½Ý¤¡Ô…o°`a=@T-?K(=F5S\?U_<VL2YQ8`RMq][yp\sqXrkd™un™˜j”“w‘ž~–‹f}]n_>GE56E89]GVsRw›p›ªayy?Xw>e„Ul‰Mi~Jl‚Nv@ny6[h/HhFgyDl[3X[.QRBrvOr‡Jaq;bb4OK.`J<e]EamES^5JJ-OV5`eC_d:OM9AT9GZ??YOqi=fG:iPDcu`s§Žž¼v‚‰CUK7FB,4O4@YEVh`ˆ‹o•™Efo<Mi6Gh5Ca08^:@nCAoOZcrŒ^d‚QVwQZuI\P:^RGZ]OdbLWpNBnP[[O]]GVfE]UEqa=NnQ=TIN<6WW2N[<J\AB=-O4-R=0UM6_L;oP=XoAUVBlG4FY>M@@=@.A3,V@+aa0Qy=DzEEjJ;\99M.><(gF)Ag9RP>^I.mK.wG.k_0Qk:Hf=EQ0Q=)HA%IB2TP6Yd5Jh=NV=[_:K_?<Y;C\:AU*MQ.[\0x\7ˆ†BM‰X*FJ?+*GFLX,Zj6Nl:Jf1Ag7KZ3rm*C…NKYPUV35m>4N6,D+'6-#:;<F*9:"FE,–N(‰<EÌ:pwBK3VU,Ss5F~A:`Dv`6R™QAbNJ\->P22K29A%eU#^>^_Gbh7H^APE5@[+YG2kD jzKeK[ŒV<zS<K;YP)P‚@BdDGS+YV,Tn3Vm?Zj=_{IPjL0Q==I#HO#fH!W€>N?œ‹@v“_a{KZqD?]CAU&FZ)3L4FO&G[-EV5^z7ylJd˜Oy]Hm‹J9Žy@L5[C9Q0<D(QJ$L['>rBk_02€IFQ(L[#ic.4ƒG-D'G?OL"Db9OS.Lq17j<xf/œ’PU®‘DoG_`2P[+ec3‰›@k{Po5v£[u“SiŽVp[”–i…‚V„†G©i¾¬räÄŠ{µz£‚S”—Tt¶}d~FuxJ|ˆLŠX“~X‘[f‰Xio:{y>„†;b™\Ÿh–žu•ž{“¥‰u²Epi<Z.-A$;*H_,94(\:(g‰:cl?i‡8ϬMŽÿß`qYdY8cb5Rc?\zIcŒTgŽhµp³Ãwª¾€—ÖŸ‡ŸkfŸcuœf Ì‡¤u‚‰k_€V¯—]ÖÛ¤ºÖ¨…Ö¦Âܸ‰â¿zœ}~{E£†X}[‡ŠTØ­fqU^[IgD+ˆSLuBSc6‚jBßg¦á…qÄŒv¨dOĵzÿ¾| æ®|²ssRx{Ao‰K} Lž»qœ¹g¬­c”¶smºŽ<³n>d;9iFcZ>TfAdiI˜£XÈ´B Âb€œIfx4dp?BV#^`-hq:‚hBfzHcScd«Ÿo›ºy¥ÎÐŒ’¿‡Ã€œ°q¢˜chT<tlGb†YasCZg8Qm+¥‘Sœ¥qŽº}“±a|šSmN¶{H™ªYƒPkbDcLro@mTDŒ¥t»aŠˆ]ãËšx˜ceq@hk<Za:g~E“Žd{»zŸ±¨ó´µç¥Ž»q¬ŸmÀà‘ÅÙ‘ŽÊ{o°lÓ´šmÖyQa-ko=`m@\|7Ty>qŽLœJi†@`‚7if>^qE€‚HrI„I—­hp…>Wn6Ob(`f2Qk4lqCZ],R~0\m<¦t\l‘\i‹S‡‡YˆMa^>DY@[aX– }Á½ˆ¹¨a’{^™`›xY||FkvAvgIqnBYP:gXF{zIˆaK“€_pü´‰Ú†OpOq|BmzB‘L•yFrhD}mNrs6e[3gJ2sR<~^U‘jOŒ]?xUCqnTŒzNxtI€[­‘d®kµœt©¡w“¥\g‡PiŠ]g‘ai…MnƒcŒ©±¾„³Ñ“¸Õ™›Õ•Œ±[eu<GN/9A'@?(IG*AF.LD4c_S{i¥j›[‡wad‹Žf®ƒ½ÉŽ©·lŠy[›z^zkWx„kš³ou™Q{—]ŠšTcyCa{EqJbz@mv>iu8hn2bg6Kk@b‡Jkt?UY5[kAgrA€|AtQ7qO5`U1IN/IS8SY?b^C\eDLX6?A2NZ@aaETdJ[iCXiKrlBVI*>C1ES=]ya¼Žž¾eorH`ZEY\=RXHgcgƒ‘v¨§d‘k0H=0N_;`€?Os?CgCnhGbhFadPmgKeoCL`@DX7t?.pK9NOGWKKZT<aV<^eAilE^tOpjP\xP<iV.QICC1AE$@60@F*EL0cA&QQ1PX@^U?I[=6R>S50r?%R`6>JD(>3',":W/aU*\e=Vr;G~F=mFLR7pS,Rc;RLE2H3<:.Y<%kQ&[c54uK2OA;3!A>&EG0FS3NQ.>Z+BG5;J/;I0BL37X:BY5CX)HX3WV6xc7M•B1rN?G3bW&ix<L{INY7UZ%?M0L;.ud*>’cIKEVI,Cn?3fL/J7$J407.I6<o3MK/Cp*VY0œJ&w‰@4Â’6VbAB1J="YV&`w;‰šTB¯sLTBBd:HS=5K1MI+ir0XxFmi7nW5MSE;F6?>*6N)?5 `Bq‹3_£[L\HyGccBSŽDJlCCX+RY6U^4Uo=Z~LP…SNqKJuB8W849$f:Xc+‰kQ_‘LXW=Yu5Cg>M[;^u8>i55D2CR$7X,{p2b”OZ{UES@ML2rv1H g+UU1:!-733:@FMLm)sŠH8‹Q9P+9K#[D7…;@O58[%@P%5M$@O'_o+IrLP^6zD5h¦YDza<;%;S,ke*V†:8T+_M)k.s¨Yg‰WnŒ]\^ee5ž7o„_§nBÅ›ke„ggŽU’f@\®lcxHbn8€[9Ž‘S•‚[tlDajIUP4[W6SM:yp5°vNˆkŸ«ƒ¼œ¾™näO›y>h7ER.V^3La/^F3ˆ_Fx±Ot®U¶¢kÃéœm§vCX;mC1t^H€a¦É}š¼xw‚T°sGŒÎœ³~SȟӰmÉ¿›èÚ±«•ˆ˜nVeiVõ–[°«†­©~²vT·xZÖ’_œtg¢q«q–ÓZ‚wXŒy]aKƒ“mn„KŒp@œƒa£lJãvR¯‘k˜”g†‰a¤\Ú¯{ǘ^Üàž‰ËkdŒN†MšRʵnvµ{€vPƒS§›_¨gj§a˜•T[©bx].‰eBh}E„<•vIYŸqWb)Mg0Pj,Ua3S`3~iE£¾l°T„Àu‰¯}œ½}¯Ã‰žÂ}©hˆ_¤µvt¨bM–QKH+|dAo}Hp‹QU;Ž“Q®mšŸ[”šj’¡m„¢_pGœvO†vS™_„¡hhœVh{H†S’{W†pZíÞ›h\?dtBOW1jZ<k”TnmA÷§àÿåÜõħ¯~}ŠKxe8va4ŠV6¿§†±iɳ‘·ÿ«]ƒU\nGdtCpˆBuœLo‘Ub|<^r5Zh;zoI”¡ds—NtœKmqA†…F[pAIo<>X&If.Vj2]v;Pl2Wh8vˆP¢”^«³|ŒÂ¬|‚§i‚Œe ™nÇÕ¶«ÐĨ쑲¸“´õ¢y_ƒ‘WkŒIxxIpxHnX:_Q=mXLxO§bÍ›rÊš`~vKopHlb=dlEx}Iv~MsXvNWs@^pBYa<_RI–_T„REm_Nhl\vWjc9aa:kgAŠrImtEzzChc:rf5b{?yyM„yP…W{‹]‹u‘¹ˆºŽ¯Ó¤²ÌŒ–¡\d€@ZW7L[7J\/@K+><)G>3`YG„dV¬rMgF†fT‹yNpqN‡‚l¸—o«†]qZ“ZtY‡uZ—ƒi‹YyŒc‚RgmBcsLŽOcuGli4af0Ph7SsGh‚ZEcf1Pb3]a?qo:rZ3JB(<9%>51OaL[ŠW\J]xIjuSirFL\=F`J`sPŒ„MZc=OUDXdLAE;:LCQ_Ja|]Ÿfš`n•]w‹bspHYLWr„ŠÉÇ…¾•Ij^&6<#4=(EW/L_9L`0?T,0M,/N)4R->\6Be5D`=J+0W/(H2)*5.03,<5Q6!gE.ƒc<ptKU|a9_[7B;8F'78'E:%>N,CV8JS8RS=OR>IQ=9X9=G7\@*xH*KL8F?;5F.,4/7)E-LK+TP0lK*[`/]kI\mDdtANkKITA8H4DC1O@&SE!„]+Ed33EC>A(8D"8C,3E$BB!?P'7[>=G8ET/Oa:?\5OJ7]X)Ic5N_Gd\;np=<ŸHUfMzg@L{A9[9MG'HI#5<%Z=)ˆt1@˜mKQIXW4\f<TnNWfKClO9XEOT?Np=UnFEl4.U3N:'š=b•AP®’1QM0=+EK+p]0Šš<\Â|Q{SKX@Cl??@6a]-Tt3fP0WO.VL94Q0.:;C:"6R)3Q*QF%vr0t“E\ aI{Xd_BSŽ>FgFNe/EgA\j;eƒQoŽNgXW|MJfJ;Y?AQ6o[%dZ7t;@kIu~As³RZUXf?Wb7:`1=O,Lr/iEj“POS^S8PA!RK/}s5[º/|q#?0)0,84;AN!\T$}•F:ˆd4C&/APD$Q„D?jQ?U)DQ,4J)AR*bl1>nGDP.XtCmmD;¢n=E6KCSd'FR,?a1Q\1hX2ntFjƒTˆ™iL†hbdF’O”kJŒ]{qR’xKZ©kj|QuG\˜fdr8uh@ƒcC`o?ÍN/œ’[zgNcP:Pa8eo@bq<oQ2‡V>š\C¶žl´Ô£rÄ ]xe`Jci=x@lM|kMŠ“A«×ÈÖŽ÷ÿʈÿÐ[“fhF ‚e©·z–¯qOŸs>gK¢cDÆ€€”{w¹‚°d¹°–ñ‰x•œzmEkmL°¨uÍ•tqø¬_fByd4Œlº–„‘—qÿ»ÈôŸµŒ¢¾ ­¾£™¶£ˆ¨xQ_/˜rPcLg¸Š€dI{^Ozf:Ö|[âÆ©®‚œŒ_½ v¬Ø•x¢txŒXº“L€‹V|^=pdArWH‹eYˆ¥†§in¤WjNVGWz9qŠTQz:^0‡ˆR\zP\d.an+kDdvBJ„Dgz5™•E‚H›²d”º{’·|›°w¼q…¢T‚¨f|š]x”TtQZY6s]E‰uKKV~8}SŸ“d`œ\š¢e¬®i™„P|yS­“s£Ÿg‹„L}®d‹‘hˆ‚^’`P teÏï§j³kjR[O/[]4VM)D?%Ó¯“ÿÿӼ譸€_¼tCtEDH5š•’»ÿÑ–û™’¦tâÿ°¸¶}­pqOoµ_žN[h8aX0Lh.T@,}Z7Œa4\L'Š0"JN-]nB_{NRu7<R,G]*J]#Pd(Zi6S\6ŸsP‰M}n=ŽJ@goYAˆ[O›sd–w`®|aÔobÎyỉŠÎÛ—¬s™ËjŒ¼\€ŽRzrIo^M„odŽƒg‘”j›b½‡X¯ŠgyWˆnEq`>je9}sFl{M‚k“OX_1QC2^ST€cO„WGrdXmŒ®z}¨cqyQ{iLpcGnqLoxY_oBSl7Rm5VrDŽw[}—^–^x‘`ƒªz¥Ç”ǰʒ»È““Á‚k¨U`Ee„E\p>N[7OT<K\BdpFv‰Q‡Šdw„OfXEufFhoJoQ”yW’}S™mZ¨~]˜|VeGqWT veŒk™|YrOkƒ[~^ƒV€u?WqG]Ov€W•iO•xFhn6XY>W`MUaDIR5@H-5?*2E<Qni|¬r~¨al“PoŒVwVcvF]kHYfGr`Kk]LNfXfwbz{d”vU}~PcŠNs–hm¦m|¤p…s¡‚j`yy¯«Œóo¢tER_>AV4=T0=\.7U%;D'38$..!3.!68"9B-CZ:JlS,770#)2(!3(!1.$21)D(s;)wd48{X.WZ868BK1LE-KJ*GT2H]:BO>HO2OH3TK65S54F5H@'VA"JB,T=,FD0@>.T;+cC1LT:DX?GF+L9VT0tT4bs?WwR6`A4G-26#10M6OX%/G4C4,8A#9D01?-47%BB)SJ&6c<LPBP[2'Q:-.(N=qP"hq8P“^Vuai_FpŒCoQX{K@yN7Z;;D-:;K8 L*n‰ACxa@H<BO;aI3Ti5YaB>T9KY4Q`6Jc??e;Ei6Uy88h5RE-—T(W²UCŠ}Uf@W}J|€I”»Ym¹Š[“R`„WD|KFOEQm0/T:F4%UE&SR7VS<BZ<GO;TU7JT6QS<qr6q‡@t‡NG‚ObU\–QR|=S_6cr?n–VZŠZQ^@Da5Oc7Nf9Jg:E^:`N(g`/^ŒL€™Q}œ^pGc„EI~EH\;>`1e_1išDsXN˜W@`<=L)G8LF"¶k9zèžJž4vV3Q5)E28A"<O(PIn+8 q/K80;T0iY$QTJgAHS0DG'KK%^h6GsFco=MaIrT8V¦c,qg>C!<a$FG(TW#Js>u[=on;tˆV‚¡j}wdŽn[h¨y¾ŠKr«houWw_>€Y=zF¢ZfÔMlE[BQZ<SX>šT9®Z4lN:mc>oˆQp dY›ejUGY`BzŽ\™Äy—Ä‚’±€„°{r®‘ti„Nz¢\a‹C‘•U¤ªa”‰Xÿĵ¿®n¯x™d›·zfvMö§cwª~m•n…‡s°®ƒ¥Ý¥“ò¨“‡`Ѹ“¿è¿žr`ªuH{O²‚UÊtR•̓v`p¸’¸xYפ㿒ÿÌ—­`EîuYér`þƒ_šzYS_,}o:D:‹QAÃܘƒsJv~Fas5rDæaCÜzO––n½»ˆ¦©†Š®voŽtmhN‹e<qdR`‰Qxgb‹}`ªn|Õq¸vx®hy±[`‹Ft—Gd™QZq9zdH\oRQX-`l+§ˆDŽkIs{Jf€[…œMƒš@Á¹l–ñ‰±h‘µ‚žÌv€Œ·}q§hf‰RgzDZg?‹tSŒˆe‘ŠdˆŽN¨Ðjo”YˆƒN§¢jœyL•\”®k¾²†åˆ}®\aŒN‡–W “S¡€\}`MÍ¿œÅñ²§Û‰x¦RPx9JM)Z5$.;$§aJⶉÏ⥲ވÅð“¥ÿšS¡HÞhgÿÿÐêÿ ™Õ’Øÿ«jŒU—Vs‰My‚CeuLX„7fx4S\-_H3cgHN“NC}?A]5Mw=JUAjLFT.L\8Gh3>b'Da+X{EuŸf¡ªw†bbŒ[` cŸ’i¹£r€Y—pMÄzÞÝ®¬·’³î—‘Ð~¹¾‹®¸i–¶PxD{Ša]ŽsN¬ƒd¨cÅŸŠ—“]U¯sc¬r[i;V@+]?(Z=)^PN˜izmCgT:rO<•\KXCrLF{ZS¦nŸ«|ŸÊŠƒ²nx‚Nˆj@qkK…W€D[i8Wj?c~PŽ”x§Í€|ªc‚¨Zž{ºËš´Þ— Æƒ™¼·ß­ŸÌfy™]|ªf…³jz²`gœj{°ip“Lˆ®j¬çŸ¾ì}…ÂiŽÈw}Ìk]†I`]Hƒi[£u]½w]ž|S€cIqYN„]]¦xk¡že†™U¢m’¢k«ehŽW`‰Pr\}‹SpLluJ``9c`Zmž‘É‚h‰TNV9KC-@9>clhšÁy·fx¤QfGmxHRk?sjJ}hAhbPŒlcŸ‚WjkJ{XA\N=[ZJdyNj–t‰½†ƒ´¦Ÿ‹½ª›¿¸‡ÃŠ^£qQ—eG€dY”‚NT‚=Jl0:J%28):<%8F"(6 $60;]HMw]1W;3@<$1-'",7'0,D.b1 d\/MaQPhSMZC1]DCH4EG(LU+D]8;G4DH+IK+KN/@W23J1H7%JHSQ0_L2bX3lF7wO8kU=MH>=K9?L-_K)[_8~[<Xe=>\K>A89M(/R-7:$CF"4R,55->7 _D#?\/2RC<=,:G(G8)HL%<[?.;3!;+&2B2gI}f(oˆAVŽZ]|[i‚Mc‹NGwGJU5;j4:bC?O+VDwI%X}:MfWKL8He9bmJJwB7U8Ha4Ai>PY:Hj4Za:o|Bh¡PR>SZ0if=…s>y¾c¥xnb›_“ÑukÁ‹u‘_„šKišd`“oE‚LDcHLV;\g<hp?`oP„pQ{‰e}|`YvSJOQnc2a„@R|Qm\=€‰C_»nV…af„Dm’ZL{X5XCES0Eg1Eg<A_?KnBXšVsUŸ•R¡Ë`bx„U~LoU[ŒZk„REYhe@x›If¤cFyVQa8Jh58Z0JP)Ál9tä€X‘zTrTPuEJY<>Y55V)=E"ˆa%S«`2}_)J4.3oCW™GOdH8N19H)EW5U^5Og4Rg:HQ2P,z—^M’gPmHq_2BS6NW'brDc…Ydr\}“]EkW:0)„M0^ƒ`£rL¯]K‡VX]7VuI]q@qT/žy?u¹‚Y‰Ñ·ŒT}e‡^IŒsN„§r‡³™µx}´…w­{ˆ{_‡Æs‡Ðƒ~€‡Âyžµ‡²Ã}—Í©ª¥r†^°ŽKmÁQd<•]@ÌÖ„ª£vʸÆx~¨…}lGÉŸv¢Þ¢”¨r±Ì”¾¹’ÝÑ›¢ã ÞqSÿª€ÅÙ±™È޶“\kŒX…•Y‚•Y£Í‹«¨}ì˜e¹¼‰õ¿¡ÿÿäp•gs‰\uU´}^ŠoZJa9M…I«l=lcQ†sR¿ÁЉ…ZwˆT°¤d¦YŒGgŒSd|8÷“aά””›oߪ€²å¶ˆµ‡ÒÈ¢€_|`Jh_LÄÐ’ŸÙÃñ’|¾vr¨Z~°chŽWpT4”Š[‚™Rov@VŠTnG‚n@‡¦{…²jkŠ>l€:ÿ±„Óƒ £r¿ð½Áÿ 蟃¾€ptJesFxuS †n”˜g›xW›ŠGŠ¥^|•J¥—K¦±`†sE°…c”¤h¾•i’¥f}†Wy~L—\˜¿s­Šn·–…ÿÿàÏÒ’ Ìp]œJWo*Ss/VR,MX2l”GŠÇm·Ð~žÙ‰žÕ~¹é„è~¥Ï†ÿÿÄõÿœÊÿ¡Ôÿ§€êpƒµM{ŸD]’EgŽO\x:k|GewCViE‰ŽY–Ág’àul»`a`CuŒfcCHE0I]/Jc9Ij4Ad)]d1¥œnÓχÀžkÕe¹©o´°ŽÛ׉ÿÔŠ…mº{~ÿËž­uP©YC°…U÷¦}ÄΆyˆ_oiQ˜wWwj@_L9|OB’V?ÂUJ°Z>kWL”vXkLcu@NO;NC1<?1QYPŠo£‰`qxK„qPŠw_…‚Sv]P|eUˆ†d…ŠQu^J—}Z~V|—[j‰Nu}QuƒKnx9[r=[p6{cRØ–u…¶ar¦[~©k®s±¾„¡½w‰¯‚ÁÊ–¨¹gfH“a˜¹s½Ò’ºú•°ú”ŠÖo‹Ù‘Ó욺⅜ç¨ß“ºÚ“Ž¡`zeR–jX™zbŒmažt^sS…_KoaT‘~uŸ»w€™KabCmze€•_ƒ™kq™cnžp€ª[vˆYŠˆZn…Ql„x¦Á§½Õ˜´kq‚<TL1IE:ZxlœÄ„™Ë…¸dXLZ^@TgC_`AuW7KG9fLHdHeeJmU@eN?cQBttVqŸx–¦|²‚m™|vÓ †Ï¬j‹…LƒkDsX0R]Ir‘WgMRv?Hj2C`5Ks8L„@P}2,L**K5=cR`tiHT62^C+LA&<<+05-+'21 91'U5 LM*pO?WrHGtU/bR/<?<D*AE$7D*;>05I*3;.8/%;;%+C([4+\V(;[=MF=OT6uA8VD1X76K:/Q>4gQ1kc8]f>k`Er]>*mH/CG:+"H;NE&PB"CD.:B-N?*lH/PeB2WB.6:/-%60!?32O)47-)7#.6!::?DSI"rN$`r:TpSYaD\i?Dt>GY5TW2@sB@_DOZ6a\-Pz<M^I[Q5vv@W€QBdNZf:EzL9`G[I0Gu9]N/ro-YšTRfOlW5Xx<}wOšS`šed_N˜d=š¸St¹f¡r‘–]y£]iŸhWyURb>XbBmiEkwF…mD“rNu_QhVG9G:?1+`J$`‚=BuGR\6‡s;r¦Nm¯kh˜eQtT8S?:L&G[/O](K`6`h@­šU°Ú‚•ÐŽµq•°^¬d|§Z’§TŽª\~³owÂqD­zYyXcyFWuAIP2@m1CI4EF/QY4›f9‡Ä[]§ˆ\…][uLZ}K6sD0G&?Bxg,n…R>‰^2F-/:.d: d”E;oNFG*PGKZ4L_-Be3Ep3F]/uh4V™YazGEuWPI0H@'hE$w|AP]>nk>c“dCLEK="pm>g}b§•WhœlU’Xr¢f³Ø‘cÌ­VT ‰O¥Ï‚‰šˆ€UŸ•L”«lbŒhÜoK}¸…o´k¨wožhœ`Œ¢q‡¹}Ž·~‰¿‡‘¾p¦f¾¸Z ³l‘±mŽ¢`®O]mVb`?•x\•ŸmãœfµÍ„¿šmbŠgŠuCÈ•s¬¶~Ãí¢|›w¸^DÚÛ‘lÃŽ_mLÎiGÿ~UÈþÅŒ°t}wD¥Q  aéà‘›Ì¤x}cÿŸ„ÿÿÿŠ¥s™Y™›bz_ÄnZ‘–iw>nµ}ÝyY¤r„‡m˶l¬€¥sFÀ„a—·Œ‡œ]„­}`Xÿ‡MÓ¿—“¸ ÔqꚀÿŽwó½‚l}I|‘j°“wÈë¬Äÿ¿Áû¡ Ô˜Ái|¸g›®pTT5PE,¤pf¥`‰©SLJ¤³prÓ—Ò©‡z¹…`ƒGcŠ<Ó™WÕÓ‚Áï”·‰ö²sÖÕ˜Ãè¡…´yvŠfišeš˜o«Ø€“\…–O•¢U‡¢^°Ñd³Çj´²^ «hž¶u—Áˆ¿s„«a¸•^˜ŽY–¢l½À†Æ¬{á”}ÿÿʹŕr‡Yc|IHj,_w.Xn0lnBt«b¥Òx¬ÖŒŸº€•žh¡Ÿe¤ÄXâ³Xÿ«fȵrÞÔ¿Ø€˜¶Sn™POY)p`ClšOaƒDq†T‚ƒ]‰”Y­P޲e£»qxGpuQŽž`lR4T]9Lc5Y~M]t;Hs2Ir.’Œdµ˜iœhŒ`š‘k¹×•ØÉ|æ­mÿŸ{Ý”ú¥j‹hMo`Qz£s‰®|ÃЀÀ¾i¾Œh€xSbcJ_SSkXW{latl]‰l^k^Ty~bƒlKifNo^HdS8ZM/dUFlU©p[Á|OsG“xC‰zM—–l¶Ä‰¬Òsp“B_H8zhWŒdˆ¤b|OdŠP‡ŠHcv@]GMz=7=!UA7†[z RxJ|†Lr’S’¨e” T›h”©hgGw‘Z‘¿z¬õ¡Ïÿ¸Ìÿ²¿ê–¯è¦Ò»î–¾ú‹®Ã‰¿×­¸Ù‡©^|a²ƒu¥‡o¦}b˜‰e†{Z{t]‘¤…›¸VYY'50&QI>lzPjŠPy”n}¦{±m{ h‰«h’¦_©t™¹€§Á€£µjx‰CV_2W[L¤}¤Úž²ï¡©Ý‰ˆ¦dnvE`dA`^Am[;XRAvYD_cIbmE^^CUO;QXAZvi¥xŽdœ}[yRqŠbŽUnƒM^o<Ma.Fd>]wUrƒXaŒLZ‰LX€EVƒ@Y†EYƒBQw=Ai>QdHspSWI4k[=ZwI8rV<R]<CH1<:,?.K?+WT1`M?bOANiB9aR4=;8=)0>#B5=T*0T8+D14B(A@(7R.ZA2TO3MhFXcDgcBFRB@3<N5)LA,V=4XD1[S;`b=Oa>„D7e[.!jP")49%0:42%@<#DD#UH-|M7CuT5JU2>1)5*')#7&9@1H5)71-6!<4#,M*>9!I>ND$HI/KK-RO-Ck5JV.TY1Ph>FyJ@YB_X(Es6PPAl8KŠXHZKl`;g‡JCk]NS6V\/4{:LK2|^&]ŸDI’Uoc:ww=`|DdbESm1D{N‚\9wµOZ}g~Q1u~BnŒT[ŸVK}YTlGceDQjARcF[h:D^5BH:MC%5O,7G1YH#Tx/?b=TW0fp?x„B~“MU¯x;~e2X6@E'<M'B[-Mf,MºÄj™»v¬e¡]…›XwƒPmwEuKp’WjQ‡Z6ŽŒQ‰ÅymÎ…C¶y8qWLB1bx9[~N^Ÿ\|†S‰•O]ŸicƒX[xTYuE1nE1A)E:#oy4ktT;w@;E:9\1Yg=n›J;€[<[57T)CW'Fy3;Y4SX.Hz2jZ1T‰XutE^—MgwK4^FZR1Ll>Q_<x‡ETŽaBZ@d<"†›Mz›d•f¤m”Æ‚³âŸÿç¡p¬~^dB™e5½ŽS‘ï•tÍ–z²sošf`pCeB~‰Bx£dr™]kœ\¡^ŠÃ~…ª~‹½v„¯ni“YxˆH“’<s“GŠ·g`“[gf>}rO§|QšdLnfAœ§LŒÓ€r¢k`†R€‰W™¸o¹‚cœ‡mˆƒi“vYŸÚ’‘ˆfc}Xwb;¶…JÿÁ|²m…@u‡Eæ_ÿ¶„„Ηº~fÿÿæÂ«|ƒI pŽŠPˆœPÉ’NX~@¸Ty­fºŠZ­—p¡”cǘXc£h£w:¨yB¿œSÀ‡B³¯fn“I¤ŽHÀ¤hÎ¡ŠƒnÍ–_¿Ò‡wÁx©tP¨‰x·Ž‡ÇÃ}ÔÛ´Õ‹Òq”½h²iW\704EI%¬iƒ®ev‰KÕgž¾€¸ò£Í°ŒºÞ©e˜Ok>„>ˆ£M ¥W²Ÿl‚’f‰ŠX¨›[{‡]œ¬s…°{’—X™}J† cy¬Q‰Ó{­ÓƒÏêžÅá”¶Ù†Ž±f©ÏªÒˆ‹¶rŒ£bo®b|¢Z±¤b¶½po[™p]ÄØ•±…\¤‚Tx’YLl:_h.Rq3db3oS0˜_C™¥e‡œZo‡QezDŠGq˜BPq1lPFŸ¬e¬¯[|žS´iJ\Šam˜d†®l€¾n–¶dŠF|j9{wAixHidBkU3ƒ…_km;WZ<iwHgnWtX\…UDo?^eP»¢{‹U—}O}n@Žj`ÿÈœ¸»q“ŠU¨\ÿ©tÿ¹…œž^ŒfL¯‘h”¶oŽÇ¥cp]F‡YP¯pišˆvšx_¼c^Áxhɇp¤qX¢xf”^uLqfKvTAjU:edPtƒVmw=‚jL“ŽYu¼WušRy•_–¢\Ÿ”Lo‡C^vPZ‘{N‚NqŠEhn6nj/Ya-`sFft>=@%68/X[;S[+HW'GX%GR+hg9^r6Z‚N¡¡ax˜D[€Rš»™×ÿÒðÿÇÚÿ°¯Ü‡¢É{˜¶x¼ÂµÁ‘›²á¦µä’’Ãy‚³z¡¹—ÛÖ–¾«d¨h­«c¢h™½}‹¯GM{02W&9$LS:W{YoŸ„¯‡§b‘NxxGslBdeHƒˆ^’Êv‰³l€Ÿ`\ŠMVtEu‰j¥Â‘¶Ñ¤Â†£[u€A^oKnqPhtE^kMykQlqM^uJvw\{uHbkF^}e‹¢|©šd¦WŠShy[d„Q`ˆI]?Ru;Ts?Wl@SkJrNmLmŒIc‡KW†E[„F[{:Va3FG3H\GPI,|L.tX<kcVUxX3meCdZGZLMZD=WFI@9_>*Ne36ZJ,C</>-::(W@Jn3FZIIJ=GR9UQARZA\WApM:fuFwuaYPCpZiBH~I4fZ;]V>]XB`bCS`F1X;Z4(fC"O7224K=@^0A]BAa<RP;gI:½l<Ršm>Yf/D7-J*+=+42%I< 7V/7A?7I+3:));,86!ECE?*VQ.Bb7HI5B[-?_1?O-WQ3Nv@@qP`e>Ey?kR<`l5=O?Z<+‡[-MyJ;XSFN3W\0N€7IoBeg0w€9YŸQ`ŠQSyJES>GN%fF-Q…;™sFXÈeAoiGE2Wg:muAiCd’W\‹UQuQfjKNxCLbF<T42A36=+9A#FI$WW,Jz8F[8TY1Vc;u‡?¢´S‡ºim³zJ¥zPpI^{Dn•Xž£L¡Ù…€»xV˜Xic<^`7Up;^s@ˆt?m‘SPƒS8P9FL(na7yV4§m<–¥_iÖ‡]¾ƒuŸp¯Ànf¦vYcOŠk>XžV]IQgRWW:3sC4I3KN)v|6M˜]Il<V…Qk…OfzSbxGIm?Kd,Bp>X~IExKB]4Hg8H[7ps0R…Lb\9rv9y†Md‰SbŸUNŠQ]ŒGs—]YhXAq>l:'hzI­‡S›Ø–°õ»¸é­£Ì“^‚XH\/EP*eX3‚ZC΋Q›ÓŠÏ‚}Åz“³¦nhŠU^…Id‘Qy™T”»q¡ÌŠÐÍ‘¾Œ£–e¶×yl±hdNr«M‹Äsm·t“O7lY7’bAi`Q€zI°å|™³ˆ¡Œpu™d¥rTaFcA+ºRF™˜„µ˜s®é²„‰\^€?t˜QŽš`ª¡pj mlŒFeh7”tDÜ”i}‘hÿ⤟‡jft=q…OpFƒŒZª‚fa˜]ˆ•[ϱŒ†¬~³’o¤É£ ·ŠÛÊ‘kÛvM‡™t¡‚‚Ÿ`w¥idqI\o7¡};¹˜e…›`¡¦[Ÿ]eT:–iNºˆxº•}¥›qŸÙ‘Ænˆ±[ŒŒ[RxS*> 2I$Pk4¦Wr†HRzJ§xT£ó´ÒÉ͸‚ËΜk–Vfˆ<j€7m?n†Ac€L\_5hg;^m>dw3h_:kQ{kpĉ¯Á†ƒÀnì³u»ãœûß‘ÝïŸÅ÷˜˜é™³Ý–¤ÛŒŸ¾‹°ÉŽ’Í|Œ izX™˜e{¬Y®zY’¥ahZ>„sNv‹WLO+p`CdˆZIQ7>J*:2&ŒŠZªaa—KXyALq;Qg3Wk5tzO‹™M®ms¿N_Š8’l,‹ŽCn“>}ˆ>ŒLt±SV‘BTt@rf<zk<po_”¯mVV8lZHv`€”_w’^‰–~{½ƒ¡²•ƤptŠW†‡SmzY™½“µî¦§èœ£Þ€¯·j›–[¾ZÿwŽŒY¦mJ‡]²Äˆ˜„P„j]¨—z”·€¸½ƒÆºhW d¹‚t¡˜mŸ‹gªh‘W‰zPnoDgZ>peW…‰h{}Wz|S˜wP«ŽT…{NÈa…–iŒœ\Tw6Wd3^`2r{=e>Xx.H^+H_0Cb1\pBee8?T4>U6U`,A_(;Z+3O".K$9] =d(\t7o‹Gz”FhŽW±•Æè“ÅÑ®®v Á„‡±ov¦q­y™Â‹©Ñ£·Û–¨Ê’œÈ‡—Ĕő½Ó–¦Îp‚©e–¶a}¬k‘¿m®Tt£P[:Ap,<`6Upg†´‘˜µp}Vy‡TQ‡UY‚PmxNp€]—¯g‹»^в‡Êƒ€²hcŸh‡¿‹ŸÉ–—Ê„°ZeƒE]~a}d{“UiƒRkpYkmOwqO€iHsh=ZnJ_iªx…®\d‹D[rEdjWj|Hj‚Ds†9V^&9E)9D;L]Oh‚a{ [dž]hŸ^h“R\…CWm1?? *75:E&'G7 O4'i?/†d<y‘WiŽrhsoXj\CYKCA=\I-6^;8@D.E1*C,8D-oD+Qƒ9KhVwYC‚BizQWfQnQF~S>Œ{Gq…^uzcisZnLKyI7‡O<vhFghUL\LHLI,H33-KA#EZ1]S5o\5dvERŠV`oLUwPÄyP±˜SC–6KdO@0Os7>T?;D-FA!L@$7Q9=<6?I,2A-::&6:![7"RZ+KsAGxCAiCEL7BV-LL)X]8]yJc}UO‹SXcJ4N217$L4rb+LrACQ9J]5V]<Ua3?qF^U/u2r©SOb9mKGV<KP&YD*ob6›ŸRUÊw:rhN[3Rp8UeDX\9pPAeŽDW™^OsVLL;Ba<J`=F`6?]<IN+Of.Ys6N>R_5Xi8azBHr´eoŒ`{˜Wf‰V\J_c=|n;¸D‡—h‚¥[cšX]ŽEa•A{‚?k‰F{{Ge˜LJ‰QAcLFW05\6=C,\N,za;–ŠM¬›Z¹æŒQÀ‡]nNTnGnW6b„>\rF[rTUM48qDDB-KM"…s4`²fp‰VNnVGK4KU2QvED†E_kBdjA\‡G9c@XK+Y†:MiFTY.A]'GC(LJ%OY3Y[8S|Dvl;pUk¨eX£bVTm`I{·sÑÚ¢Ìÿº®Ë¨‘œtj†dS~O@a+[S2joCmbL†mFŒµlŠÌºq©Ùm¶‹ZUl¡Yt¯[‚¼n­p–Àv“̄ēŒ`Êhm™U–`¢˜[ŸÞŽnÿÑbz`kcBlY1^E/«¬L—Òˆ€˜ppgMmkF›@0T“vQ`A§h@ŽyYã¼{}Ô©b|Lto<y^v\BfY9˜˜Vt™TT}Qgl@srD–s:´pFWG¥qIˆš}ieV|{]ŸrF½šeÿ̘ÿÈ¢…v¾ˆg‡]»Rº`…Ét–xEºs:®H½v:ŒzR‚~I`uLjv4œW„±|~P^`HfcS›‰_ËŒoº“p¥}g§´u}µkl}I„o=2K#7@AU+ƒŸPt¨YPqItsFSÿ›rÔ®m­Ù“­ªeŒ™Wv¦Qd‘>Uu0cV,Q‚GFO2Pf?Qa7\€=d˜Dv—Mˆ›Sõ„»ß›†ÍnýtêÆÓ—_¼ƒS´„_Á£{®ò¡œÉ€²®uªÇ|w‹M•¤t”¬t”aŠ•[w‚Oa~D€pW™dœ‡`V–pQ„b?YdHTc71O1Q7#~X:®_l¥dr¨xm£tk¼r™—\¼}Ïú¢mšKJp+Cj)g@`Š1U~-ƒ‹Nºmo©_q•^u¦cu¨aš§f¦œct`Zxev†c¯s\}®jŠ¨Š¥Ò¤î✙Q`M1t<;Ÿƒb´å¦À÷«´è—¨ô“›Èuůc•O§pTÂ|R|¦RfŸ[˜c“|Z³±x¥¸oª§i”MƒeAwdU§‰o“x¾mŽŠd„ˆWl{QŠˆ_“ŠWumJ~o\—Œk–ˆaˆ˜nw˜X˜qS‘xSzY¨{]Æ›eft8Na2Me6Wb9am=Qp0Og4Oi7Q\5Qc4LM-gQ3_`=Oc0Dg-F[(;W+;X(?`+@e&B\!Oq%a„9q£Vª]¥¤ZƒXl§u Î‹´r‰¾‚–È’Ó©–Ø  Õ¨¡Ù¢¥×‘˜Å‚¡È¥Ò™²É‹ŽÃi{ª[rŸoŒ¿v“ÓiÅmz³VS6T‚=RcᄆŸUt‰\|ªz‰Ävw¬R^}Ih{\v¥u‚ƈ™á•µò—©Õƒƒ¼|޶—¬ßŸªÔŒ¡³gd“Rd‹sŒ¦mƒ¡`~ŒStuTnkLok=aZ4N_BR{Ti‹gy£i¤Uoˆ=Nj0K\2_R2\_5Uw/Gl02X46]FJum€Ê„˜ÖuŒÄwŽÏo{Å^k›QXz?-Q3@8'^<3&1:-1&I1!}D+ˆsF]‹]Wg`KOTDOEIK8?Z90PM30<>7(:F)NN0jQ3ao:qdEzdCwpG{dHojJ™ZI˜^BjL|_c…dZQVQ?AjC.…W9jlC]^VL[H6EB,4,RA&]b5Vc@f\8ƒ\3‚g>uŒMkºpym†gWigGOoTGpNehI>wJ9?A8>'8CN7BS)E[A7U;1F20<(D?(OK,MX+`Z2^„C@‰Q=mT;[@D;1VI,Yn>gpLU…L3lU6KC4@-tT)X‚D.^R82$G=RN'jd.E{A^X6€Š@n”XJ–]JcU@d=G_5[]2‚vE›²QRƃF_]MS1DY2FN3BZ1OO?…]'l—M;d>MOHC&KV;Sb0Al9GE+]^3Ur3Vy<Xz:\ˆEw‰VOqŠZvwM`|LApHZWEyz9’O{Œe„‹GmšUNwI]d@fxCgƒ<U„<_k?xo?d™HI[FfBEs>OJ\“R[X_„QŒ}Rµa{«oyªaF¾z_|_F‚AUP&DyIUR>5cB;?'IS&Š|:Z¤^FRB<\,@E6n`2p—KY£bHhIIa)Nh6@[:NX.Tf09X5?L%?i96S$GI%G_2_R1Dk5YY-sˆQt™dˆš\‘½v¨×“¿æ§ÌðÀ‚¤„PI:v\*‹‘[WyW=d8UO*\c6XmFdhF¦xF~Û“‡´n”Èu~¬wqŸc‹¾g‹Îuw·m©i{³u¹wˆµmnjG¡”G„Çz}†N„†Cæ’WÂÿÍ\ɾYkD_c/zrG–ÑsާdX\Q_7@C&f?&Ôj>x«ktJ€sQÞÜ™bºaP9_U(_fFTK9lh@–º`Œ‰Q±Ïƒ…‹XqwG~R€ˆWV‘`­T9’[@}dZˆhuyIÿ¢sÿ¦‰·Ìž¤mPƒ„P ‡^“lœ‡T‡œk†BY`B]zI\q<‹‰PzTTƒIg~KŸW°ŒiZcN‚lMŽŒw°§ÂÒ¶¤¢z‰}WwyIcb=QM2;D(.- =F,l’Jj“DŒ©eü²uÁ_r¡NZ£c]a,pd/ys3ea5eX,eq6K†=gsCežYu¯ky¯e‰®a“â†wøn¢N¸²X×ò€Ôæ|¹m½Š`—…m€›l~žy“Šm©ŸpÍÒ‹“Ãl§Us}=SqCª±Š–Ђ›c‚¥V|ŸZv¤mÛìƒÖƒ¦sêåŸiµvn”UbqHeP7c^I\—ib¾€‰ g°vÏ÷ƣݜ³Ö•{­[ÈÅ©»ÿ¥d”YUTR‹GcžJ[v6Q†9]ƒC™d§²j« X„x@‡†J‹…V¤¶w»Ë{«¶n·«oɈ¢Ò¡ÊõÇçâªÉ‘XE<&:;#ZR6~ c²ñ›°ö¥¿ÿ½Ãÿª Üy˜—S©uI¨Š\roC{U8—’K›±k¤ÅŽä㣺ю¹¬t‡ªnƒ¬›­y¦­lŒyZ †\ƒ…]€mU|rLŠW¡›aš§d§¼u‘©nš¢f±‹n•]wˆTl\Á‹d€uRˆyX{ˆARo<S^6Xj1\_4Zb;Qd1Li+So7\t;N^5EC-G=+IU+Lb1Lj.B\+;[%Gj-Hk->n$GmLo"fy3sŠ4Un6f`Gvt¿…¥tŒº˜Ë´²â­¶Û¯Á椿ë²Ü‰–½r…¤| ·‡ µlŒ Xz’Rt™\‡ª]Š™Zž¯t˜Çu³^f¢g{£e‡¦miy:QSAzoiŸ®n¨OfšNeŸm}²†™Â†±¶r£®s«¸‚·ÐœÑ™ÆàŸ°Ík‡“Ej|Fexdwl”QrˆU{€WxoPja4MU7NoRe‡gu§es”_u‘R^~@Mn2>\,GU*ML(Pa-Mp5=g?QtWjŸ„Û—´Óy•Æ…Ö¬Æ||µ€r½{g¬jUo§]DI(,R/79/T>.WK2_D?YN;DdBJdGS]LaKCOSAPL@3J98B4CH0AL2DR8VR3PR1WM0WD6dS7KU9x<:}W3~aEo‰XOyaVWQfQ>oiFikO~eLmbKLgOEFDYP+FmA^QHlJ2UN6iJ9€W7´uN¥ÃoUÇ@erDD6[I+tb<[‘T>v`<P:;L'BW'WZ*ah9RNN|UNsIAr>Fi?FZ@dY3gX*ic7djD\ŠHD’[:fTLK7W`0^xR^‚Q\zOB~MVcFz;:{P1M=08"F,OO!g_(D„B}mG^ŠKidQa=N›_Ns`\xKZt?shH™žHDÌŒ=TY:R(3C(JI*I^4GeG`e0er+Wl=6‡YGID6W7HK-Kl&Z\:OX9Wp:b†Do‡En‚Hm|IqYEON,LP9MN-[Y6gk@¢€Mg„XqmR“¦J]¢wZxY^{WU‘_NxMZ[3Js3JP/~b.bœO[ZlOs~Oz†Wu˜]p§i‹ž\r¤`tŠb’sUŒG{Õ|JÅWtZO{DT~U4gCME*lu1tŒNOŽRC`@D_1RZ=z„Q|Ÿgdš_D†SOP1Ms4JV0Dm5Jb=5U4T=$>rE:P8JR%Nb4Ga22Q*bT*w‘Wp‘g¤¹z±æ¨¾ßª¹¶”nqFk<<_2qU,mxOeuIMa:Vb=e\7tu=prL¥S;šYƒ¾Š…®gt˜hˆ¹k†Î†{¼xu g~™luX„Xt—}b‰o¥€T‹ô–kƒ`ko@zzE¾m=‹ÈT…YXFŸ¤a†ìc‰WGh5KZ<A]ARfI¦fC¥¦ylœŒ³w^ðÏœ›‡giZ`h2ŸkQ´ä«“Ù¡„ȉJ|WxˆL°£`l˜`†QœšiK‡sL;6žR7~r@j‚c¸nVʆf·woxGzƒJãuV­š{˜‹o}’eli=kNS“i¶Ô¥‹Ï™‹Ð{TxV|ƒg„wjň_¥ƒ^¯‘\Ëœt’„g`fBCg4=B*49&I;#9D(kzAt‘WXŒPáÆ~ÿÞ€xµjŠƒEy°u[–Soƒ=WNco;JkGpn9•Äy½ø ‰Ëw–ºWi|0r0Ä”]Íÿˆù€o«FÊ¡M³Çd½¸{ÿÿûÿÿÿÿÿåÿÿÕíÿÌ´àŸÐ‚u¥Zz‘BJ|>yƒd¿Ñ¨¬Ó™€Š[zUq¡Y¿Ÿråâ¬©àœ¶~ÂÔŒÈ䎖¾l‚’WYW>„\BÜÁ”ÿÿ¹¬ÿŽ‚²oõÛª¾þ¾³à–tœiöÖ§§Ü‹{·w¹~·f}¼ql«`p™O¡ˆi°‹U `1tZ5Xd9qf=~mF“n[—–e†‰P£a®µu¬±cªrJ´ˆ[lQ0?B/P|8s¢F³a£¸r®¼l¦L‘oBleD_yEdzJžpM”xBUL0\O2~hEº¬z´ z¼°‡¹¯˜À‹¢Þ°¸Ó–¼¿‡„™l€}_ƒq[ŽzYƒ‡_li} u—À‰—‘^rlJ€\OweKxhWy†SqkH”iW­ˆgˆ‡Qo{FnrI\pC\hAdnA`kAYh2Rf7YJYŒE_z7H])GF"+.-#5-:5!=@#?J(Gb3Hs6@s-=t.Tv-Tc-Cb%0>)Xadœµyr–v’¿ £Ï›½À‚ª´r±¨u±µm£´j¥kz e‡£e“³bq’BXx>]…Il’CLsCs›o¤±k—¸u•ºx–¦[u•bn|EAR9Oia“mvŽmh®dt§i‚²}ŒÁ¯yu¦cn•X—¢l©¿Œ²à™ Äca9Ia;XaW{r¥Tk–Ls\~Xwc:I_>HrVl‹h…¤cj‚EeyKcqAT_2?N-=C$19 6E(H`9Nl<Y^O}—‰»ñšÔ~Œ¸v™½x¶ˆÅž©Í‘¥µ~ jˆ–X7N1BE4aM4EU3)/=0 &L%j@'^n::yQ:WOI<@\E5WY4MP9^P9K]7=UEII<>O5CJ/FL7FJ7QY8WV:yi<Š~Jiˆf]u]uaK…XAwiKvqNoaWdOIPZHmT;ƒn<CpVUTLGJ5C;5e:'„K*•~G¨‰d]¾qA˜wLSLXW4~€AZ™ZOoOEm6Cj<Uc7ko4yxSc„Xc„PrsTzwGg“Q>bDRJC:*E:"VX3uh9`‚LNˆbQIJcM3l‰GS‹YZ\Z`‚>|¤[cWDjM8L-.P+@>!DR_P%^Ž:_S<dSQD2tMy‰4iŸichJfK†w?¦ÁQEÛ>vpCd@=S2LS1Nb5FsBCY9NN(cX/P`5QqF>wQKZD_d,[v<ZlD]g9\{:Ir9de/@b4?L1MD&Ca/dd>]jGŽfEioJo`Arj6wƒFk‰`„`†žhP‹b3C:CC#=R0GU#dg+`nApi:[ŸMXoWgf=oŠWuƒRw’V[†Qdq?Kc<wW, {<˜·bdÆt_“iP‹OCgMU|CLrCi\,B„EFK3R`1idBxˆN_`VsEDœ_NN3:\,FY&O\(Jb75X6Z:)8s;?C6Sa,La%Ch,LL+px>}¨h¢¤vÌÜ›±Ì¥­}ž“^m~fLa@I]BZX5ne6Z‚Lom7NvR[c.X[;[Q5qe8›E{Ï{oiŠŸS¨Þ–§è‹ùœ¨ÌzaÀƒEuDI.…mTŽ}[›|]ÁÛ‘sÎÀ\[9]€?‘iI€ˆbišVàØu¯¢ƒ‡âŒV³{P^?f{?kJsV›‹]ÿ›iˆÁ‹Âžo£Û«³‹ep¡W¢¦Qç¶pçĶä zq‹ŽQ‰Àm­a”·et¶o¦^Ÿ¨nq£o_Ÿtj¢sW‡arxP¬ŒVŸ·}n©ls~V’|`ŒuV|=¾‚Uˆ[x„J³¤z‡œ\ħbõ®‹§‹fÄGU~M~O™˜oŠ›z¡u‚²Š…§ˆ¬¥•€™^ŽhXqMMV<@Z?JI0Uh:ul>hi9}®tœR]H"KR![^6m‚QAG$vV%˜g0pU,~h5jˆ@o:Ò¼nžïšuÉoD“=Cr.—^¹Ö ¥úœTu<ft=y•F¿¯bÿÿ®ÿÿÆÿÿºÿÿÈôꘫ¯`›¦b¬ff…PtžY•½€ºÛ®£Ñ‘n`ypwª`—žoÄܘڋ”¨}Ëë³Æÿµ¯íŒ°Æx~¹r~Ó—–µŠÊ³ˆûàu‡yNùª„Òÿ¹¢á”µ¡ÎÿÄžÚšÛ”™ÖŒŒÎv¡Ô€›ÌkƒWµtZƒvRaoG]_AdxN€‚Hec5|iFp‚KSxCrd8ˆb@qn?Qh:›pFcr2`v:‚”Om@ze9iU>`O(3F"7V4YyO~‡YzˆP€GY;s^<slCnk;°`<—vW“¢kb‘EnqNª›jš˜[®”p±±z™žkŒŸet‡RŒ“x›°ƒ‰­ŠÒѳZmbAydO‰tNzfEƒwL…ŠO‹nGšwL“DfyFn{[ˆU{yG~l?fBm[4h^;v†\t“LQr8Mj'<\%(D(A$#H% L-)E/3O5C`O_šRb‘8^ƒ-Rq&A\)Rj)4^-B[_©y«x¹¿{˜¬Sx™Kr£Nd‰5fb3ka8utWv–et£\{—R[7Po4UCeDS“XtšTs‚Dt„m±r™¡XudœUr{Fj…[v”{r½›™Õ~{¡K~Z¯†–š¤Ë‡†¶hgŽIpuRžŠd ›Jgs<B_?K]f›ÈÏm…¦Mqž]…™Gej0Gg8PxJd‚Vr…G[\2I?.OG+EJ(;G)KG,;D(2I,B[8CW.9@-P`fªÅ Ç呞Ñrn u„¯™ª×šŸÊ‹‰²u¥a|~HS@/rE'CE2$25#"1^(fH*Ng?4kMFPOPS6KN:^L2gV8gU@;V@D@<bP/Ya8^aGZXI[kQhlJo€Vj{[]gY>WQe6=g:-{G;†D=hUI`Q@SPGŒT8€\8GHIIQ82?640.M.!>&~u?qkŽscY´a=‰jiHIk|>L|PU`=kr2SYWmHgg8XuBa\KtY9_xK…bN‹Z7m‚KA›f:TQRC0Na8PfCe`I>ˆS7bSdJ8c‰@C‡aifZ’¡J‚¾v>„f4J=BDB]"=Z)CX'n`.nŠGExT6Q91F+I<vU!m¡OSœq~ˆXœ¶V´Òrö¬nµzQ©i?[O`6Xh2??0E=H<(Rd.^k8jr<TxMLqDL`8Jd/>W4CG*ML,Ms0Jk2S\.`d-SrAml=p…HrM~qE_mOegJmœXz’T”‰Hr¡aJpP3?.=2 LI)5M2LM.V`';Z9_Z.nr<R‘RVdHJT5[Y/aw:Np?Ik9FT/PV,YT2€b3}”FVœbT~Jf~IPšQAl7hn+3†B>5%XV%^f:C]=[U-ˆ?R°fGi?@X%5U*E/!Le/<nFWM0VrD^\8In@Gh-Fm5PuO’W…¦s²ºy˜šs|pW{ŽW¡|VTxh`k=JT9BK+gS*`w@rsFQ“dMB9LI(VR=}‚9zšP–k=c°_¡®Z§×‚ÉꎔىÍv­j;JCU4ri?v~Unc@ÿtBsÿÿevh„’D±oFd‚a‰Ku€C–’J¸¬qƒÉxb«qBV9B6&a8(aS=‹C4{|Uº˜`¶ÀŽŸyz™i¤¥^µÃ”Êë°œº‚¡–[ŸoMb‘xUŽ˜m€|R‰~d˜a‘£o‰·ƒƒ²~z³~y´‰€ {jm‹fe‰^h‚ZavLgyCqqH¸–V¬—eµ…XosF“Ç{”Ƀe·ue}@m•b†a‚ŠT¿Å‹ÕÂŒÓ諡׈½Ç|·ë¶¨ëºj°~s¢m`—ll›df†F=V,ND#‘]+`;,7Ab4SY6:\2*2?<&?i/RcDAT@WF$Ve2¸kI¢qF“ª]d¦LV•:™¤[á婱ô•q£oØ›aÏz‚–FÙ»fåð«ßö õΆ´dX‡A´ªh¤¨_ZT4v‹S´ÄÉÿΨ‹mg=zT=x¢e|U«À}¡Å‡§ÌÙí¼ÎðžžÂ{¨Ó–¸Û“ëè«íÿÆÝÿ¶ëùšª¶ƒÃ¨†Öÿ¶›å—øñ¸¼ðж|³Üˆ®ß‚™Çf¾ßp¥Æc¥«`½‹V¨n®Úƒ~·gœÍn‚™S^|En|eµ¾~ŒYutGpa=eW@tfGye:{}?t•D­^|‹FdR5WF0=H*6W3Mc;Va=dSF{dF~eA`d5aF4gP3`V5SW2sYD™lOpŒRf¡be–Ta†Is‚P’^a‡ZlƒSh{DnoQ‡‹d’j«˜x–•_fvT~kZ…qUskFiSHzmPVsEwj<puBŒ„Q³–q“|P‚fE}iM‰tB`e<mrJŠ•XyEkwFOk8D]5Ds@LyCJ~IT~MIuGHsH^vf£½s\—CFv7Gr=Bq2E`3IqFYƒp„´y{™sªØ‡Ÿép|ÏdwÁWX•5(J%8 ?P>ta“J]…P[MS<T‡F_UhžPh>V}M„–¯™hŒzY‚ƒN‘œ@k{Df“g~¯„œšh–y6ZU'So8oŠe•°}™®x“§kˆšOW[&/3#UJ/SgDdsLdq“«Žë¿pQiŠEt{5Vj1Ia0T^<ZnK`t>AI!,#15!3?!5>-?K4IS;E]9Bd9G[5=X0+F@oˆ„»Ý“§¿€x¨„†ÃŽ¡ÆµÅ‡‘«w—[qyFR:.-1'3,'6"*-1.J7(bE+R]=GnI4XG::@@A/S@)PS2[^@H]IMPKiX;gvFh‰`tƒfo‰mj–dY‡eNla=KDT82OA3RB<_J<NAhJEDN@LF<06&I%$KN&IYE6H;Q57m='›Q7l–Vƒ…€…|VU²ocˆmDxJHmGp]=¤t7R˜OQYLZf+Oh9WdCmX6i]?PxR`VG“M1mˆLK®r[’}azfqrOfŒYe…[YŽ`k^jZh‹fŠ…`¢¦[iªy/ed.H8CN&>d'BN#X_ iŠ?Qˆ[DUF6U4=V+I`1xf:€—Ru²m‰—v¸Ä]¿ô¥zã»vƒxht=TˆCP‹Jix8M}EF_RGQ;[X4V‚<Ji;JZ;IT3Gc39]28N2B[4PW0Qs1Sm2Wb-UO1ra2ur9co?lgFqmHrsN–{Rr´brŸq|‡LL†S1`?<D(K^-:V1NJ.D|7?U,?R!MO&NY,]S+C}=;_>_Z/Lz;Mp=9b9F:'Qe6CR?Q_5qo7W“;T‚@g†4S‡9M}.bt(5u3UH.OQ+D|G?Z<JO+ˆ_(Z¢UGGL]64k=:=;ba/P~UYvVMlH‚[HiZŠW‰½zj¿—€ŸbnuŒUWrSo}E‡‚X¤‘X[‚^aaFIi?FR1dZ4au;yk@X‘WIS=RM'RY-T]4G\2XT6rf0ŠvA‘ªV£ÊwƒÃ}Œžei¼kHqP]j>~p<po>QV6Ô`8Åÿ¶l·µ˜ƒD§ŒLyxHgsEW;”¦Tl£rž˜Kw¿m@ˆhI?+~I-\M?_C/pe5–Œ_™trjHulCÍ’bÝ®Œ´|\>qrA_Z4RV6”V8dY=dY<ŒkP“htŒ] Pƒ¬r¥¾{е‰s_qqLmˆUg—m^vTOZ5OaNMd9ˆg?Hs7`X-‚z\¿ÿ²¾×‹}¶uX„HžQŒ´md¢mš¢T{xI}Y5of5¸oUàÅ·þ–lÒƒ„zVzO£˜_d‘jMuPJ^8–ƒR;Ÿ`?R)hiIH[@Ji9XV<[jGZm7‚€Hoœb/…HJ8)¨ŽsAxFcO:[rLru[ƒ¨oª™t´€ÄÈ‚ãÓ„ÅtÇx¢P´¨YÂÆvµÿ·˜ü¡\«WH.O<&IH7’h¡²|æù³ªý¿VŒ[€mCvŒKi–H‹\ Ê§Ï˜Íö¶ºôŸ„µoÂí¦²ÿºÝÿ¸éÿ°åÿ¼Òü¤ßÔ‚ì³ÃâžÅò¡Ùÿ©|±[޹b©Æ_¢Ñ`®S”¡Zˆ¨mœ½q”´j¦Ñy®ï–—ã—›ã˜|Ö„s³zœ¬ÿ·yŸqF„LwyK“•g·l¢’Q{pBuŠC—qCn^7m_H„¡h]¥n_œ^YšeT‰XnŽk}¨liŒS_`>YI,VB/VH8XaDfg=gd6ncDv}Qu’Q_€@Wg/ˆ}Q‰Tˆ|TbpDOkJV…`rµot²_Ž˜V‚¡|Š®¦o…•noaqv\s…ObmGcuFbfFŽ[Fƒ]HlaRƒtY’‡XsyElrT†Nl{Stx\iqKRhAQlCVzImŽ[q›gi td§|r«|£Ï“Ï~{Ð}Ù„e²WGg8\zEiub‰Švz¡x¯Ô˜Î퇫àv¢Úom«Q@~:4Y)0H(NR4b|Mr´‹×o§Ot›buÇ{i¸X_ƒ>WƒW™ ~À«nˆ?cd/co-Qh:fdM}dNYS06H(5Q*Gm/Og7ixY‹œl|¢csŸRL|;5Y4CW/G^6KQUgzv‹¡qŸ„W—pDk~AU4Om5HV2DM7NaF`‚F?X.*3!/7'6@2-;2EN2CP3JX=MlJKqHRv;El=_~e¤¸y”ªy…´‹¶}“±sŽŽeu€]z€b•…`.=04@/>:+):&<-1$'H%3D$+C.B.(]9"Qf<2dC2KK828M?,_P0TcBMKIXRCzkB„‘Ysš~„ƒ‰Ši…‘jcœpPpkLRHOF>MG=tA=zF9US?MAA=;.MN1-J,h+-lN'ejG7SC4=CF/-§9# ˆA†§ƒœum€£`\©w|u^hŠQ^‰qU`?3C1H7&G_#LQ.TU/Ua@mX?_i>qsU‚cBŸzWž¬s€ã c¤»eSf[aBR]HnV6g™Knz`efHqrM…ƒUUyZKlMAlA@mB8g6DP0v_#YOA|c`Q7`^'[q4a~Db€R…†XsžU’kφP¶ð…QÚ½?fqSI']h.Z€C_€GZoAErFOtH_uGJ{RFc=Fc:Hf9;b:=J.PX)Ko?TkEUr,Ot8OY/XP+‡[*_m4i_3c`=YO:YA,Œn<„®^e¢g`ƒKlw?Wƒ@l€=eŸ;O›NXz;<n55R&3J4C":F IM#_e6R…LUiJUx=_p0G‹QWpIXƒRm‘Xg™UbU^‡-Z†/W…+R*R}(Ou&Zy(;w=Y_9U€Q@nB7C1vU+f£W]xK\L6iy?W‘[{ŽVu¶dkºi¨©rx¾‰‡¨o·ßŸªð¶p¯Œ~¢gn˜af|Ja|Fit<gp;ZX1oY(ˆW:YeA^sBbpIZ‚QexEJoA>_:?^0;\1K]9?D1@J#MA&\s1fm<d6v˜^“|Ip¦mWjG`j;ZV1ge.mG:‚ŠRî­meݰpŽN|~G‰a2^oEWh7¢¬Xƒ¾|z¢g“tIk¨dl¥u{“_w~Gs‰N‘}W»Ô “¸•¹|^°“QÛŽQ™ lUyNRF)gV1O`8gT3qL=XN>udA§†c¢ om“ZƒD»¥yÉ”nÍ¥z€Œbc¢±r‹“lQžwdpAƒ{Em|cŽ’qE‹YRV0¿lE½òª¦å¥„ÉŽW‡Dcp-op3o=š¥kY£yLaIUk?´€nÐœŠº€`ÇÁ‡†ÿщªtxˆX“{e‚—o^•bqj9i„GXn9—¨Xn²_Hg?QA9KOBNX2h„>]@\vF@Y8ÿvik“vdwt–xy‘mw‰d„H¨‹Q³Ãx–ŠPt‡G•‰L}£^gAj•?Ç®p²îu²lZ‚_c‰\V“_Œe†£i¿ºqί…Ûu}Ic‚?g’O|­s«Ì–ºÓ£Äý»®Ù¤‘̈µª|åã²ÜÿƸÿ£ãÿÁÂÿ¶®î‘êáÚÿ®ÄÓ–°æƒ—Q‚Kty7xj4_{Dy†V›¹v°Ït—Æi¥×‘ÊÿÀÐÿÃÈ랪΅š¿|§Ë•šÈvhIf_;\i?—xXŸ„_¡Ç‰ˆá‚… SŒƒQz‘F…~F„X‘¢b~žf–®g‘°{µ‚”®kzŸ[€§\h¦lh³td‰X]U7LV2Ta?VvE`\4k^<ec5NS7td;ˆB‰JqtAaq>hB¦S‹¾eoši“º—¦ï˜€»ou‡Tƒ}W~[{ŒVq‹Yl\j›mvšm}—tŒ«†‡²¥²ox’^q’jo’PesIarNbtP]sOSrKUnGh„Lp“_y¡l‹•`‚€aª³‘³Õ~§´mºÆu”—<=0C6!;J=oqˆ¥’³à©²Üsžµb±Ðg…ÀagŽVUƒJ@n.8Z3Pd‹Ã Ñuv¯RW…T£žx§¼_W‹BfrX’†T˜y<cV*LL)>I)Fa6Ne?txS‡‹I\i?Kc@Gl:9`/<TAdyYt”o‡®†²nkœRW…ERyK]k]p}tŽ¥v‚‘T^zMg{@Wv2Of9Q^9DY4H_Lh}SQqDD_=BX=J`>Wi>Za2EY+?X1QoNT€T^‹UTx>G^@mrMrh‹¶tŒ¶rЧ^czSfpXxzft™qKK/9A1A6,=@&-G-74)^/).H)$86E))U@$XJ6WP;<qG8_O;FEG?:@M:GA1p>,zm:uƒWiˆg^xhe`J|^HYxPV_UW?:WK8QO:NO;bC7RI<HP?MH/nS3AV0UL<V=5g>9<K8E;:9@.‡OB“tEbˆkªjbzIub“‹VlS6rW$99-0C2?X+YU2WM$IX=`R>nR6Œj=±…P•—hÌo¢Ï„FÖ¾Co„AOCGN2wO.^ŒA>ŽPZHEne5W‰UMkQP`;H_7PY:InELoBum/MŠF9xWGV1kT%ug,mˆBr˜U^‹ZufHjL¥F©²QQÞ©2cn=A-NK*Se8Dk:S\2bm0_‚O]uSSuII|TOtJIvK3P?<:!KEHe5Le?Rf'Ps/Bd;LS-G\&CE/KO'0>'98$u\-y NsŠ^io@MxI_W2Y^1j‰D{‡Ho¨AU¤a1A5F(1L,E5:PW+ex5TˆRXJX}Emw4z„Sz˜[pŒja]ELQ8SX-Vr'Ty'T'R},K{"Ot)Io$ZF[r4KB=nHLX>kn>f R?xRR1!‚z9w­d¥k~»mË|œÔ—™ÍŒÅè¡Âܪw´Žz’`fŸca}UX„OMk=Yl2Ea9=VDGV6\X5s~Ax•]†ˆ[aœdS}YUyNg‘\XzOTP8AQ6;O2?1G7#[l-ICpp>Y”XxsAhf@…eBZ{T?i>YN,Žh2¬Y¸ne»~qœgV–Lr`2TT)X^1¥S‹ŠQs¯v^ f‡<3µ°a ´¿”g­¤†™sXÛיýž…hV…p5€hAq[NWFZW5|S2©Ÿn`b^eOcW<tq9‚LotGŠ`Iw}j¢xF—^IqR‹‹R~ŒLok<£fBr{PZFgc@‹nI¢…\L‚T‚lF“„eÃà”±Ú“ŒÇ{T§jFt6Ib*^s6Oo|I˜hlƒ_îsM™yRz\7šeEö¡x„é¡Å„]Ÿa~{]a€TKY7r^.ve6ŠHx¥RW€Ec\IWeCgwJwPj¢U‰Îyhi¼”qw“d‡yQkWC`S7nT;US3u?-šXD‰lB\vClT=|ŒNT…FdO—ŒB³¾{†²€´rm™”^‰Ãj†Ôy|©Msv<¬™sµgaAr˜T—¼‰¹ê­Áë¶Êÿ¾²ì©¢Åy«{¬’lê䫸ÿ´Üä·ò‹¯Ô…Óã‘ÿÿ¶Ìÿ´¯[}t=[m/;`3Il7V~DiœN‹«^­\žËˆÁÿ¬Ìã—¥Œ\ ƒWˆ¢c—¤i³É“­á›”òša’[SZEpkK{‡n¬ÐžÕë‘À\iuS‚xO…hAmaA„hGzqB|a<‚kO‡vP‚mO…r^†®p§Ö¢ºÿÌžý²\’QIN6L]<HL0SY2w]5¥vO€‹Xiv@tm@}ŽLdu2T]+`a;yJŠ–U{—d£·…»Öˆ—œUmQ6hT;h[CejCciBme>noEog<plFrI‹jAuU9]dFsXnrDIM0O7)K5)D6.SL5WV-MF&o]?pI_ŠCGn7ymYNhw:}y7VI"#$?F9e†qóýꦵÂYs‘H‚‹YŒ±ws®pcK\z0CY9`zl˜Ò}‰¹n†´am™ARm3fT3o|;dr@jx:Pg2HV6PQ4Gc:e†CcŒGa€Qt„T_†Xc‰bnU[ƒJJ}SX”np¦†®x‹³q{œXgLenBWMKipl“aztMtzKw~@Yn7Rf>PwBRlCNiWk‰\]ƒPJrHOlC_c?vh3TW#JU=]&Fc:j€Uq˜aoPIm<9`<iPy³X‚¨_i„I[eC]UJ[gos§‹/3&/5&E:(YF-/V/6C5M>/WJ-AF5Y;3/D+?55pB.lnEt‡\UwlWPXP^?>N6Q62^F.cc@EsR4VJ=B,NH&NT1FL6X81Z9+a9,[O6[SD][I]eG>E=`E0iY%HmDHALg>2EX5hJD‡d;x‚YqhfVwQ`l]]gIZk<hd>JoE'@@-"3"D37Q$RB3YL%cI0HcD[TGzH4½f;¡zNàb½±e‚ÒŸL®œ?trPXC]R7amAS~CevOŒ€JM‘cInS@k>@Y:GY8DV4Kb7^p%R~A@oM=mEK]2hh1€JlŽ^g„VteFidCˆ€<ª³IPߟ;uw?\>:T4AO.=`/KX.h[$npC[|KTlD_`=`x;=kG4bG2T5DN)JX'Dl<R\*Ug,@g0D`2=`&Ab77S9;C-af/tyEaQ>^?bC&Dh4Ff3^Z5Yo8hyPzŽAmªLD«Y;ŠG6o82V*FQ(LX/b_7^w>d‰BPFbg0ot8jzHqeDW‚MQlOOsFSz4Y{(V}0S€1W|,V~'Aw&<Z&O_0f_Ai‡L^žma†blžM5‰SE=+sS'wH¢Y—­e¤Ï©ÚŸ½ò§Ÿ½’p–w^nKw”UQ•_R|NRv>Mg1XS3Sp<NH1]S8dŒWzZs~TokLpƒWmf€bf‰bAPA=-FB+-Q5@)!>I2]V0r8oMs RCdBKW1›U5ˆf;L^4K\5]yCn}Ckr<£W€È˜F¦c;H2FI0rm5|±\mvUšŽbcÊ—eˆnÆ›‚‡Ù¬é¶“Ä× ²ŒuäÛ–³¦x]yEPq<sfCwmHN6W[A„mFÙe_‰oª‘oyÔv¡bSg@VF3xK=ŠbKŒvN©¡qŒ£nYlHa_=TwNN]4qU/cf8ll=ia@lfE`tA¬lGlƒT {H³Åw©ÌŠ{µrI•QN:^v0fuL‹oFĆc„oOr^8afIe{Wž„aŽ€U¥\‰Ìw‚xJXY+de.X‰Mr8Um1Ta*kP.jd2klCu|U“°[ƒÓhªS·»l‘­^£}Q{O„ƒSXRDX[F–\Iim?QR7“XE€zU‚…R€e\†DfE ^`Š_‚–XtŽEgA*vU6ŠM‹³m·Û¥èœOK‰o9~®kiGƒ¦[°Ç¥ÐþÓÄÿÂÕÿ»­Ö‘¡m’_vŽR«bÑÿ­¬úž¤ð¥Ö«¶hÏÒˆÐÒurr:]~2^‘M„²j†«Vs¯Ry´P_yC}jgÑþ»Âì—ŠmA†iSi_€¯dt¯`›º³éªÅõªœèŒ|SwdS™¨š®á¥®Ã‘¸unŸd›‘czwSxdJ‘X?djGmdI_lMs_„{YŒ‹mÅ{ Ñš¿îÈÃþʈÅuNh=EE*19#5F,PM.SV2¶QF¤ŒN^h?mu?UV0LP+IJ*XM3dT8f\DjoL‘qNnwNU^DTaEYsAcX<ZV=\m9_e<\_8t[:wa5bR8Kb=VaGwtIh\7QM2>9(</#:26-!><"$2#!K20ggE[‰A<b9\^=>N->G--K&%?#/2;>AtŽ£ÛòÑûÁx‡ŒGVz9YZ—¾†œÈgkBNx19O,[`U‹§dy©_y›Viy5M]'6T-Kc9T‰KX‘MOŠJ[•Hq“Lc”Mc}Ek~Qi}_rZj–UqˆNw‰L_„_c”s®Š•‡Œ®q¤iƒ¨aiˆSMd<IYNd}hvŒOYg8Q[0SV3We1Qm7XrGhh>bjLsXsc~i„¡PYx6HY&FN8M 9W#=e8WmBcwSm…`j–VNvER\B{Dt›Mi”BPc:7DSBwx¼‰;6-F82J@4^F;ER><Y?DF>K<6^;-KB'IA(\O4qT:‹jA‹UJykIFQJF:DS>9B:VC4TX?4YE-C>=6"9D'QN,O\/BJ7P12l9*XD2U@9hP8F_A3@CG=.eP!EP/Z=:~N1pYD™THqOGhFAmX;]}FJ”bNj_SdCWZ=.j8.I2!?(##>%1P!<B/VL-u^4bc?PlHkXFxT6nh;XD­[>†Vm°{aŸ„FojUECYd3s]<‡†B‡›WR‹^HpH6WB>C/:U(A[5Kj0Zl(Z„G`tRN{RPfJro:lƒRiwZyqJTm?Mb<•i0«½QOÕ Exs8uC7>7?C"9W*JT*_\6R`1YgCRg;IeACX9MO&GI+@p9<rDIZ;8f.HQ0Fb&9U*G_(`h:Cp?FX6`k8_f<y‰D5zSAF+hT)WU1Zj8Sg>[X=]vAi‘Bx‹=ušEs±UZ·jZ£dDi?\M@K4]Z,`†=M‡GBu?bb4R€Ncb?VaDTl=S}<Vi<\+_†/R…4Uz.X€)U€(N}*V„BiˆJjQwGz±_o´yH–]<`=Ro<w‘W{Âqš½¬Á€µÜzÄŽƒ’qQ¸ƒ`Zpœ^b•d]”]N‡PT|AJsEXcA^vExŒVhŽVLV@A?+ioDmŠcruL`O4JS2<5)2.NW85XF:<.GY8MC6RY$da(a¨PO‘ZMzOM]9M_@Bb4g€9\ŽKFc2Ym1¯|FŠÑP³iHzGKd7rz>‹¯c‰ƒM¸Ÿt‘“}¹»vŸd¤aK³rU¤Œ]ž­l¯¹}y«si„RzlEkvP[[@T@/ŠjI›´|¥…eœ©‰èδ̪Œ­ã¶€Þªh¢x‡h‘d”§o¾¬qsq\ƒiKnu[\QEQZ3M]6_}\akKReF_l=Zx?[U.CS5sM:‹‰erž``Ÿe_žaS–TVn0o,sw=‘Š@l†HkV›Q¢‚K®tQ}nJœzR–›kjŸVFoBfl5‰ WSzCPb/EZ0=I+M_+\t<{|E”¥U™Ïwu V}–]wœMš{?ŠƒI¯£R†¨O…¦QŸpOŠ…^l¤o’vT˜­m£¨trŒ\YKn‘Uz¦]ŒŠQl£lfˆD>}87Y>l82‚•[º´|Âþµh̉NXŠ[e¶c‘¯Xê‹ûÿÌÖÿÕÐÿɯþ¬~ò¬lÔ…€Ñ€“ÚzºÙz½Çr¦·_¨±i‚µwµá”kDOP(@F)qiFŠ“Rj„Iku<pŽd[“e¨„ëê˜y„GK6,rz\z¤jˆ´eyšV†¯jÀà³»ÿ¹£åw hf‹X¤Š‡¡×”x¥lu¡Uk‰R‡R{IuZCc[O›‚м¤u”«†‰f¬v„¹t™Ð·ðÆÆû¶·d^X7XL.;?&CI.DF,OP8\b@–cFtyWcyK@D&Q@7FV;X^C^hH`fL_jEmr@ˆ}J‰’VrKdtE^[AZ]>ai<^k-UX3^b?kc;dd@jZ;hS>tc?ogTkxJ\c?GS?@D271"74$6G*$7 "<44tkMY}Be[H\qOJ‡QM}KIl78=(IEP˜¸ÿ좥„SwO^ŒTj“` N•“Cn—MSx8;>'ES>oŒM€W‡œJZu4A[:LrPTZo³lŠÄfy¥OpUoŠTsJcp?itM~ŽSpSgŒCY=U|QŠg’­yޏ‰¤Ç€‹ Qv‡N|˜et¤sfªg_‰bq‘rr“PR`8IT-?='KI/Ur?S@Vv2Nh=_nMj€Tvƒ_‰žYz‘8>Y!0E3M#;`5BsJKyHXpEf…SlƒQr~G]l8Gd0c|@qFW|ELx_v°k•ÀfIB8QK;NE?PMFRO=DZB:O?.:;4'.?"!O0PO+sK2ve8RtMJ[ELJ7[C8HL>\E?Z[:B]E%C=.B5:A.<I+HU8O`@DWFL75`8-MD3KJ<IB<@<4C>1AB0YP.WR-hH8l]>F\IKCELD4ID5cB=–e6n»cJ—rUiJDX:SU/As?/O:+*!A*GW&M_:Xa=T_9rR;cV5X`KlR@`U<`V@qV6xdA›€Lf§dH€oP\LJ`CV\E|i=a”GAsO8X83J.=?-=Q3Ge?Gg=in6jsGKLI;B)PV![l8kT9a\4mpGbdCIn?f4¬£Haà—d’€B™Q4[a<A#@U.?Q,?O4MW0Km1CkE5U=?^8=\7MC(QI%Ha2BhEDg8ElBJj3Ms4ju0;ƒLEZ=Rq8FT=ƒb2^ŽN@fJRT.VP*MK-ZX)Ha2Re5]b/\z5Y…Cq‚19ÇqªÇieÂLœuEoPgg8b•E\>bIn¢Q^–QZiF\s<YŠKPHYq>b~6cŠ/W‹6Y€5S{*T{*c~*e>[yHYa8^g3…Y6t£^Z¤]a€Mv \›³v‰¾{~e–ˆU‹¤dg…g›€Hjµzo_e¡eo“Yi”_e’Ymž[t©p{šhlƒZfL<b@5=+`\<pzPQbI2V8E8#5H%5? EJ(htJHoI[G2N`DFO>Hg&…Bw³uw¥c`”iOnL\`5c~E\z=AR(Pd-Y‚;{‚Q¡­_x´sS…KYy?bc4~«S„jE•_0zpA”ŒXy™js[=wh?t¢`ƒ¡l…¯m—­ns}E~xG‰yQCRAk?/½šZÆ¥p…ˆyÙ±‰òÙ­Ý»žûÀ®ÿ§…ÆÚ°¾»ƒŸ¤vˆ“_¾sJ”œˆ~²¤ur[Y`9Na8`f?‚€NtƒZgc<bBIyB<D)?Q9ŠwaŒlGšØ”žì©’ÜŸfÅwH~6Ih"Zk"Pc)bj,~…FY–Mmq5kzCusKªŽa’Y~K¦§^¢_“¦dU—h]Š[n˜b^«hO…TZIeŽ\‡…S‹ŒXW€L—m?e£_a„8ta*Œ¢KƒË_uˆHZ;ÇqÂÃmˆJ•q@¸¾tq‘VmŒMz™[z^kŒXz¯hhšdeSšLEkCnK6“•WÒԉߎ¥i§kªesœE¡jìÿÃöÿÅæÿÆÓÿÁÅÿ«½ÿ©·é†žßzœÂn™Îx‹´U{•U­²œ×|b—\Y‡QS€Ld…No{BZw8T|Ar{Y‹ºm‰§kœoZ†KBV6xU~¦dŠ´ju®T³yÄ仳薬ix_p™„ÁœÓ—¹sk“EWl=fr?xt<|€Hu^£Ç¢œ×¥—»„Ž¢]oDžŠb†Ìo„ºyÄÈ—ªÍyžWVV<]J9M>-RJ1NQ4ibBrgFd^@‰iU•[GQ/SK4~[8‚d;ir6hX7id?_tGgvJ}G’‘PiD^fAg`Ok{Jay:TmBa|L^gHmX>kR;aT>sjO{sf¬¾mz£`­vs¡SGP1:D4CG7ET4*:!.60TSR`~ILXDmdGut?^e4QG-JF:XUeš•’ï³mq†NbYr†]ƒ˜Qp–Fm Yv®`k’J@]8H_A\OpIl‡?^oEG€|hÆ–“Õz”¬e¢]p•Zh›ot¶awH^|2Cb-L[+X[4gs8V„HgYw‹Z¥–f¥®€§¸m€COp@b‹c˜º€§°jnŠlvš€¨ZW}ASz:AY1CI1Mi7[{E`~?JkESvIY~TmxHnv8Vg,<R$*E!5Y(?`;R€_sªb^“SpˆVf‚ONf@@U;B\:CbBevCz‚Kz’RžPˆ…PYS?RYGFTGQD;RH4WO93[D4JA#36F''>O%EI0YA,EV5HH9LL4ER2OG;]^5WYDNG@ZL:8[3@[@FX9Sb;UlJZtUNqOWKGo?2aJ2OSBJ?=F>/DK6;G2lM0he/wYA€U?vcB~WJu]EikPudU—tQVŠ`ir[Hq;HPC[`8TrB6}P326D3"JX+Ea;PX:MU/[U1uB,‚P4wvKTfZMOKVX5XM6rN7bZ9{_IipD]yYZvWdqFOyH=vH2X8:H(GY*Od<LxHUoFKq7 PE++$FFNi/8h;RD/aH]r9]kCG_=zQ0§”4c؈}–aªW;ˆ„LW;5X/LT)F\1Zc?]tCY‰HTON~VDsA>\4SK)R_4HgBg\7YQSƒRcm5hi5Z–N_ˆNMqAdrDt„NHŽ]@WG>M%EP'2I$E=$YR!>^)Ra']f0Y‹H\–F–>€¸\¢»g’ð…wÒ_°‚s‹\NžNO_+Y`)np.bJYŸSY–UN‘RTd>Qh/[y/d†7\Œ;S~5\~,W‚(W{+X|=9vKSZ2MFrKqŒOg£Un™cšY{™b[PMh1VU!MD!?B,‰i4_›qr‚Re‹SfyEez@f’Yv™Vy”gWvWZZ=_I<xF[a>Z‚NXsI`“cFc8dM9P5@T+kq?[œ_BG=bS0VoHYVd’Q²¢P{À|Œªl„·rGžaj}CU|EAQ%W_/SƒEmzAcV¶Àq{ÑŠ[…K_ŒFfv>n´V6cHLC&xX1k=•¹du Š€[Fq©lƒ­p}ºqd¤khoI{WŒ_\eQ’jP‘eƈaŠœˆË¿Ž±·–ÿlUÿ¡yÀ߯ª¯‘µžy“ p…¤t€zYʇn³eO¨vR_ˆYOmFunN‰Žgo¥qiuW|†UFb8TXDlWa~ffB-´…O¶Ï“µncŽGU‰CDt2?g(=d%Qp4v‚NS„Ub„OgI“c‚ow¡f—]¢•E‡™T„¤srU_5oY2¡tUˆ¶q‹Za˜enyOq†QYk@_[1‘œezS;b8nE&†|8r†Lƒ’N÷–\ËÔŒY|RXoBŒ›^q¢_xœZ†µs‹ÀzÃ|†³pw\qimœa`™E[l;s{>ª°Z¡âƒŽ¸v޵}‰¶ya¨N”ŽbÔú·Òá—àÿ°Õÿ³·ìˆÁî…ŸØy˜Ø}y•F~Jd}An{F°Ò‹§ºl¢±nn¥UgrR|Ô€kÄjS¡Ygh?uŠX´~‹±‡t¦vlžvX¢kgN©u‚Ê{l¤Q“°z¸×‚‰¬]zˆTiŠY­½›ÀÔ©ŸÙ›†¼q]sAb]8WyC`ŒHYEnˆO…žu¡¹”³}i¢nd™[y€S®o޽y|»r–¬rj‘Vi€rn²wW…PcjH`vLp|TrjSlsL|tSƒxHJV6HB3YI8p^<p`BN^>WcE\zU„|T|uC}kRusQp~Q†KgzA^uBbX–´x~œ]o…VlpNeW:wW<wYI£ƒi™ÃyŠ—d›TltM^uJmwJWX>OWGQoOcbJhg\Z}ahtSWY7DY44F*PHI…‡¥¼»¥˜]ž›s‡¶‚€½ih—Hg”d›°|¨»m™NŠyGpQwˆHc|B^wKRrˆÀ¬Ão„‡@XtGs”YuŸb‚³l›¹`–Dhz8Kp.>_.:\,@a0Dh>h„N~Œ@qOŽ”j®atŒ@MxG\ZyœiŸ^q’k²ƒTgq@q}@Ll;?d;PqE`T`•V_”L_{FVTh~Fel3@a,9[-3X/=`=>hO^Žk­Ås˜¤Qh‚[p|by‰b}‘Vw…Odt>ft<hj5\j,Q])BN1NV?4RBN2?99*9+/]9)VX3-aGDFHSK:CR4R?0NV0?TBOC7MH1LL5^S2Tk:FSFB;5\D6HW9QY@N];WcAXiH`tRcvZU^PmCDd@5JK:R7<V;+@K66C5dF&__,GT;V8.c=)sJ3—Q6vuJ{|\a€Tb_O^]:Uj4jX4Xg8~nFKŸP=eWS\>CxCDZG<P7GG1BM+RR.˜m6zuEphaYbKFOBGS>OZ4ZiAfxRx‚LkU[uWdpFU{FI|OJh@Zd2l‡;hcUNJsGFq0'mD0A4MJ!Hl9,`=FA*|Q"Z}3<iO5R@s?,ž‚5ˆÛ…„Óš€¹N¨†LkNDg=Ok2?d6>W9LI,nU/qt2l²Yj’Xj{Jsq;ca8JT4mP$V{0Qn@Qe5aZ)]‚8GoMMU0aZ8u{?L†UEkEFlB7W:1J'9B+7\);R#JV%k`)hp6dDm‘I“>°ÀS®Õ†£Ò}zèg©vG„PIe'Fc*L\(b`5|l=}¨TZ±gG•cCoD]h/]„3^@S‚<X}*Xy,Nu+eq4X”HZ›TZ‘cNcHbe7lJeˆPa~KYƒDBŽI3P./D<D?Z)|i5WŒqg‡RQW8D@&dPb_8q~Da]W\e‰Rd”Z[Si„U`Yw›UvŸfj˜b`aIxTn„F€¿{Sg\b=s‰@}\tPŠL|BroF“—N|kCp”S^€OKoATe6r„APwEXW5„}=£¸f_¡kFt>Q>+f`2v·\JkHQI.NS-^N.Ñv:¶sz¨{}”pŽ»~‚¸tfŸd‡QÉža™x^ {g´•m•xf©‘t˜¨…ĵ}‚¡xwK;ä€nõŸ†¿®ˆ¥sxUwrNF3z˜g’eœ{_rƒXev\„d¹‹t…°•y¢wiz`Z[3ŽjJŽmR\c>DoMrS5uŠLVO6MG)bS.O|:Iy<J~@b‡PeuMm{U_{Kqy:‹xF‚~L‘ l{Oe‰<o•=ˆ†PN]5cQ,^qBu|H]i@ch@szLlzJga?==*Q:+ÁpB’uJM~67d(WE*zl7D‰“L£šcjšXZ~D|”Pw”U…™Z”•T£ ^œÓˆ‚¬djrOv‹e{Ÿng‹Vg‰;UwG‰¨g—Ú|¢©p—ǾqkžK|€XÚðºŸÛƒÁÌ‚Ëÿ³˜ìœ«éšŸê“¹cSt7z~SVpL]{W³ÈyžVr˜cy¤bIu>’{Mƒ¯`‡¯k\—UmX®‘cŽª}¢}”Ï ŠËˆn«\ƒºc‡‹CgqA—µv”»bi{<cjBs›l¯Æ™¸Å¤¹€™¼q^m=o^6We+Zm4`r@lŠ^na‰¡zˆ¨sŒ­z~¢h_uDz’]…³v«hz—Vn‰YЍ€¥Êƒªm†›iy—h‰“f†Š_Ÿ¤x¸tw”K[k?Q[7M[>q_BtqFljD[jY‡ŒlsŒV‚Dos>jhF‚V‡—_h|EcoD„}jÙ§uºY«^…rFcc=XT=h\9ŽfNÇ•vž«„°Í|–S•ˆQ¤šp€¦wv°u•UVa9e]Hwqh‘YT\9moCNlDYnz¼¿¹ë¼|yYˆf›¦jŒ¤Yi{fz¥—³Ù—š¥Sfx<euF`uA^a@Yt[w§y–É€œÁrzš\_ŽW[’Qb’Y~„RwkK}xKfn5R]-He9Ej2Bg,=_,MrGbŽ=Vx3Jk4UzIvˆ<bv>UtB_ƒLrNv|@`nR|˜qŒ©TQh2IZ0Zn9WyDazFn†Rh…UzLbzI^…Wf‰:S]%>W#=Q+@_;WrG\ƒQrX´—W•Pd}Nncy‹_vUlˆB]v4H`28S-:V%5V/9dD5P9:@;3B3(765,)I/&]A0JW<HdNKNJXI>dY8UpGTY@KC6Q52N>*ON4Ga;HE9G@0OX7Gh=E\BLU?[_@_mDh{Vn|ZUZOdMA\P:GL@C:8H<6762.4'CC%QACM*JL2\Q5nQ5lVDvn>_FDhTQ^ICO2IJ)^H,mF&sY4mˆCl£gq·mY¯qI‹n=mIFR8ZZ-t{8z‚FssO„eSV_HHLAPX4ep<bŒRk†Ss…N_zQtxJlqC^}QK~TH{Jqd9šA„·xE•oJfAQn/3fH5:4IT=g1:[2=S*YM%ph0Pz^<V`]O«ƒ=°Úx—â†Ô°SžˆLSIOb6Pf/Cn,=P.IE#QF)kR,–zGo¡LVxLHf:>Y*?\,OU&SM)Nk=>s6^a6Z…>QŒMN„O_yRbŠNXrVZ]2Qt8@qJ?d7Bi8=a18N'JE$In5Sb5Se(Xp2€0Œ¤IŒ¨cÈÊkê\­€AyLGd3Cc$K\,GW2]k9`uAxZ>p•LQ“`WJi€?cŽ<Y‚<V{.Os1Op.Qx7jb5„7[¾YUjV{MRoAUsFZg>m–J9N0D(5H3R#IDlm1a^=zR5@.9I)Ig=Tt4qFsŽPw‹Z}‹Or‡Lm“F|Mƒ’VÀgr¯jkžfhždl¦b“b‰Ç€N‹hX\5cW-]U)l_2c^.N`/`_7^ŒQbxDq{?ea?P|K\p?d]1KwCOq2^i5Ž|7d“SEˆDLZ6q‡Owµ`]jMGM.FV3GY2{]0ƒ[>²|PžÉ~¢«‡¾t©zµ§|²„Ë™fÇrkz^Ì…i]¡‰Ã“deÛš†y^´xc§yT¼‚cmtSW7feF_V:zqA…Sp‡Ii€<rc<{_LìŸmŸÙº¯¹‰†fgnO™…fhh\—xU\{cv\AjyFIh>NW6mF-X9`y6n‰EhQ|k:[tCRhAIU-b_@ŒkC¢m9xIo¤[d•ChqFQi?]\2el?Xh:dqAlnMkcNShBjcBO_Co{_`i>p]7QŠ<Vp-]}1\w6hx1xBkŒEc]/TV(WDaH RA<0I0§XG_žWWT(ka9~Sg‰STI‡™I¦ÁiÀÚu°T˜¸o¢Ý‰Ý†j¤WÍã–‰Íz¼×“Ðÿ½勞Ãw¤²in\Q‚J„Lpœ[¶h Xu—kÂŽ“Ê~U†EgyAo…_w­“¿•ƒ«jk‘Qx‹`ƒžx±ÙŸ˜Öy³my»}Iy>cŽRš©a‘‡?RX-\gZt«…³¥j’ªc—›[’˜VXq>U_.BZ$Kf4_u:”R}PuŽVu‹[ƒ“{€±x_•]g˜aˆžgs‹CZV8nnH†‹Z’’`€˜€ŽÂ¡–ęбt¡¤eôñÿãv ˆB^^<]ZTjm`ikKojT}|\q‹f…}VoT‚‡ZTt@Kg8uvI©ŒW€E\n@v}[¼‚[tlI’pTpoGeTFnfLbiESR=žvh£¤j¹Ÿb”ŠTŠ™a§®n¿¬uߥe‰xGO^;T^Daxf† i^†T\ƒSi•{›·Èÿæ¸Ø­i‡—d™…O~R‰•{˜´–«Â»•YŠ}IgMYzUYrOb[n©z‘Ã‚Ž¹uy¨csŒcp|O‚vS„‘dzŽ\XnCa]8[b9H`>OwERr6Nd3>a9V€J`‚8I`-L^7Vt>]<Lt?S{=Wo:Sf4O\&EhCfd|“Xdn9BU)EY3Wj9Ua3Ne-R_>m{=Tt<[rNp…@Ab"6N#3M'>X/Xh3TN0SC1AR7TgD_R`Š\y”Zn‰DZo5Nl/C_26S,=J%6Q0QoDBD0DJ8GT<=K@+<6:2/M21hK4cg@qcQkYIgaH>YBG>8AI.P@4b@.U_@DaSPF=_I<ZTC[hALcEOQIWT?loCl‰WExeRDNhD8`O:QTBQE3@P49H@.C-OM+mQ%dU0\]>`X=d];XUAnT<Im3q_?;v;3BA:> 6I.@Q6|Y?…K«kްuy¼yT›uNsOLb.]a-Xc+TY3mS3gb8JVBUO3ck7d†Fb‡ZkvLdy:ut6ar?]j=S€ELxPIxM{wH¶šI`¹<olIU-Hg+"^I84+EW?c7A_55g5jW8š~3se[†cr•qŸžaªÀ‚·Ìw‚ò®I®ŸBWUDP5F[*6X.4G#9:BC$jC"`{=a{T?€A:X5P[/=h//R6FA+Ta.Yy=kžPy©\‘½b†Ô~ŽÏ€_ÇwMžpLkDQW,K_6NY-Jd1@d7<f7LY,Gg4F`3Ig+Rv;dwDt…C——M”º]}¨gc¹gI‰b=rME^2Kk<RoBhŸO^§^i¡Z}žQg£ZX‡Pfp7c{4W„;^†/UIG{BLu6Jv7fp;‚y9WƒCMd5W=>V;lU(b‡C4ƒA5L!6G-N>A \[*i…QN›[f‰I`žTP–Wbq>bc9dU3brKPmFVh7mp7Zr>vS8ƒJyÆpt¯p}·oƒ²u˜¸uÎ~Tã?c?P1FV%Im5Rn<J[6ke9hrBNxL^`7Y‡KT[3Cc1a|<Us@VxEIiJgGSKe…HršOn•]w®`VwRJ^=P@)Sq>h[4y\?ƒwRžÍ‡®Ì£ß’ŠÌ•Ü´{¶åšÇô¸‚pt{]zoR¾[@QWIÔ‚]°Ê™œÉ‰s‚a†gM‘aIdJ6zX=„uYw…^ƒ¿uk©i]c^TVYaqA·qF·À‰Œ¦€š{^mmO¬ZErU§ºwŽb^gKXw@Pj3]p4UqBU[_@_…;XQ\b4_fCGnKWYE‹qK]N-ad1PfAtfDeŠN{–FQuJ[U6gjK…Y¬µ¡ŒÈ©ŠikQo‰R–[†­io‡gK^<X\2L~0[~>Y}3Mx1xˆHU¸c5:#'(#*)7"@$7i72G’L+'4/PL[i,Xn2eo9ex2€^?mO˜ÁÅü¬Åú­xÚ}ÆÑ„ªìœ»ç޵Áq‹ŸTyŒCbr:dh<Wd:RQ(YU$vR*cgI—¯ˆ½Ó™™ºif}M„¶q€­„ÂÆ˜Ç›e‘ƒ:jk5btPy‘a–ºy‹·emœY| apžVz_~¨^`]0:C4w~{°Ò—m¾lk R[ŠMn¯fiµa_{<OP(Uf6Vx6wƒ7V\.eq>Sg>{€e…®vq¡h_}J|–WSy5Kc5[„MZ‚Ps€Z…š‹¨Ì¼¤Ý·¢Çƒ„RÛŒX¢„RxhJb`Mgi[‚lyjŠ›‚œozOy_:W_?sxJŠRg‡Qe„TjSk{I[pM‹Œm®‹ZvzZ€f…`st[†e…ƒ^j€]ƒ‚e³bŠV›€]¡h›œa¦—[‘’P‚…D][DUcV”ƒx‘¢„¡mpŽLˆj׳¼ÿÀžš]yJsr<b|\už†«¯y™PfiH^mL€{^t€Ÿq´n†³x޵€±{»ƒ¯z\›bRˆ_u¤p—Îy•ÁowLbmKeuJe€Haw>VrAQ~Ld‰Jkr@Ie,>[1Un<Xy,M]-NN:Na;Di1<X,AW?\|Qn~G_c7JT+:F)AZ4B\0Ja0AS+NO%IT-F`AX|=Fc(?V%8P%=['A`0@O/AM.A[1Gf8SsJj‚Vy’HZo+5A'JJ*BM*5I&5E&/>0?G>H:+MO/DP=HJBKM9-L<@=;Y>6RM?VOBLH>;I?D==P=/EJ,]K/V@`yShdUZ@;IH:ZQAZ]?9ZKX:<cG5qgDpˆTL‚cIc_Q[KmH<YO;\Q>Vh7>h=6L9RM2d^'b`<Ph?W]4E]?<Q;LL0K]1Xb>?bJ9V<R[5€a5{‘F}›np­sr£w…˜_LiAO[@O/BS&GY*CO#JW#m\(L^%TW5Xh8awFm€JS•VGjCDQ'ZVSa$`e7Z{ActHW}G…L—ŸTF–}3^\DQ*Ki*)iHFQ/QZ(C_8NS5DL-[I?›i.{“X~\‚£h³v´€·¶nÒ‰OÀ¡<`X9P2:D(<D2R%@O:X-dO6i\3H~JBhK:j3EU+=W.?W6M[+\p5{€=ƒ¾\Áy »vÈt“Ê}‡Ç~e¸pH«n<V9R;DH2H\4I\4Br>Df5>^2=\0^g/b˜GW“z_yIx…Nk–L˜©Wj¼uU‹WKT`“Zp©X¨Z~˜\i…Odq>_`1R^0Ca/A[,Wi+Pn-w}1[¤_GxKQj:Qt4Ha6Uo@?n;SQ,DvB;R>MH$Vv17j52P$0B2B5AYc'}›W…£ht“Sfj<VW4Re2Os/nx@[IZ‡F\šVkždw¸s{¸‡ƒ­z²m…¾m{®oƒ“\‹ºq¤·w«³s}ÎvH´wOk?`V0_ŠInmEP€>en7N˜Vl‚OKŒ[Kn6]ƒ6{z@_yXfˆQ\jGr†K[’QuŒI|•KluPs´Om“\MmGSK7UlA[r2yh?ªh—Õ‹Ÿ·{§Ð‹ºˆŽˆjÿ“m™‰‘v¥«šldYbJ?mK>Þ¥}¶Åš¦q„§lpc>Z\2Z`)y_1•~A­Äw¼Ìˆ™Æ‰˜ÏŒœÇ‰Æ_·‚p“l²Î˜‚sj–{VznMknVuv>„†BƒrDVcDNv>T\7McAk`8‹X]…Pcr5p…?hI„”amªw¦¦mmeBPg,hu4jQbhHdg?y–ISpCj[7Œ€W´šrÿĬ긖¡¡…•´Œ§¯x‡‹Z‹s‡V<wwPWf8[t+`}/Nu;k”Hz•M—´rRA:Y5.:/.-#&$"lSBND%K!1AFi1TILz4GW%aX1kŽFŒ»h¶ìˆÉîŠÃ剫äÄÿœ¹ô‘ˆ¡V`Y(EE#`Q/Cm>Le:Vj6@`,8T(;T9l}f˜«už£Tqm@}vc¥¨‡µ¶²’Tqe9^zHj~Z”Ÿxo›Z‹~O‚®\z²f¬\tDœ‰]˜¨d\\6VfO‘¬d°¯\Œ¹[|ŸSz´V‹¶X›ÎptÑnDŒ<HW2_d4\|/Ju0[^/C7)hpC‚ Sy¢Wm•Fx•H^™Ofªb‰Ë‡oÃra’Z‡¥°Â˜·Å˜žm€}c‚}a‰†S~kA…a<h@qO³~WÁZŠ|RamHYnJ^sF`uHoZo—op©zzÄ•„Ä”y¼‰®¯}’¨\“•l¦ h«™eg“’i¤‘h‹]ŽsSœjZ™^–\¢„eš•`”‡S„pJncKjkWs\„lÚr£‹cs—Pk’pá̮ݬi‡•W{¦[i^„›zš«e€y\dXc‹Lc}FhlS¾†„ÈÄ»rm•l¡s—º{Ž»«Ž™À‡¼v…³xÆp˜³g‚™WzŠaˆ‰[hwJ]xBnˆW~–Ok|<``3_f'@a5Ns4E_ 1</1"8:1Pd>Nk3<U;WxMYq49E#D=$H:'CJ4I]3HN*CQ'@U%:U+Ba;bv9Kc+@L ;I&?W-DU0a`0ZX+GL(J\:VsJa{OaŽOa{73W,%B&*9'3;"6<)?I4Lf?HJ-@K5=J>QA8WK;I[>:TC9EEC>?]E9wV7CnN-IL9/4P9)mR4b[CCaSCP?O0*OG/GZ>EN=AW6MQ>SC:tO8§xDˆZjƒdd~b[rLD[>IUAJ]<BY=<U0QY,Ze,Fd?JU?QQ2Mh<DdFO]Cah?b‰TP}nR_NUh<^[<‚I1žf6RzškgV:{a8FB57)76!4A(9='AP$M]&Lf#\e Vj&og1l|9B‡L4hB7T&NZgd*Va=Cc=IU<T[0~W9z„?N‰`>pSG`7Nf+@{=Gj?Qg55b:4P;:N+MP2Žb6u‚TkaD‹s6‚¤Q|¡s“£_™œpN¿„;lf2U34A$3B$<< TW"P\$H_<OT9OV%I|A8oI;J-?J#=O'SX+[j1g3‘ Q„Ê|ŒÀ}›¿p¹e}±d‚œWu«Xe»hQ«iVŽYF„SYyED€IDd6CV;Pq=qC„œFK§ˆaXGh|D€™T¸csºl€¹g}±^}¨\cQ^vCT„>Cl;9]"6M%8G>Y&Kg3Ku3Lv7s0X `BpIPj3Ou6[q>RuD;U2bh78SB@K%Ec,Nl19_02A$.D"+CB=or3‚¢]bzQAU0.D)9>!FA&ZY-JQ0YL1p`4šŠ<ž¯n¨¥d©—d´Àp‡¿ˆ‹}ItwGpŽRq›\w’WlˆR›tNŠ«V\Ã{j}Vt˜Tl­nWœ_h†Nq¢[‹°kdÈm[“VUwB£n:uR]Xc{HkŠOeŠKi~KlŸLp—Yyµ[išOy©Wh¬hDrMhn3ž•aàÙ–ˆt‹šW“¦kŽ‘^rŠ\mmT’sPÒŽcË—sn‚mcdOÝ‘kÚ­‹ Í•йzz]PU=TM%SH/QE,ƒo?žªkœnRŒpO¦qWŒgT\O„RKhQ¾£iƒ‘je“`œfG`‹VW‰Ia}DlwHKX6Hs>^nEJq5JU&W[,RR0NJ%\t4y—Z©¿wÌÜ£‚†I^l6V_.bg1pˆCauL_tXv}H_‹G|c;Ÿ©n¶µvéÀ§¢vı†ê­zŒ—Xsm?‰rGZT9·{WQn9Wr9S}@a}:qŽFƒƒ@—šZp‡RdW@NG25*+&,1.“™j4p7/)?G,­yï”D£I:X4GcGlxGqq1¢~I¥Ñq£å‹ÓÿŸÂð–¿vFi:382E-Fc:Pk=Mi<Ir8Ff2KjCVyV}“dzJR[8Wt^„m™}[ÁtHŒ\7lK2ŽlK{{W™©x|ÀoY—Tx¥f’Òvg“J]r:¯“Vˆ‡EtjJˆLw•Cc™CkŽ1mˆ=t•NqŸI€‰RŽ“sp¨[WxIZtFbs:i†=Wp:@\9P:^‹D^‹IWƒ@YHo¢i‘Ñ‹¥åŸ—ä‡vÀzu©bŒ‰Y™w_£}eyc¦ys…wTiY@XbV_w^ZkH[N;obE†mPktNlnLjrPr‚bs¢o†®{£´¯µq­Ÿm¦p“Ÿex‡P‚ƒL~|Isq@vm;ƒn@…eDŒvOtQdW°xjˆ™d‡”Rz‚JnIwe•m‰”g|Œ^tŽ_tˆQ˜uP’„Gk“Zì­}¯–[€’Vˆ­hƒšWwxEslY`ŒhtŸjq•NXu:^jR–™jº¦|ѯ…‰·f¢sm—–¾—˜Ã¢Ô€›Áv•ÇxºY–Nˆ”\¡¥hœ Xq‰D^x@ci=hcEggBh_,Y]$@b?QmA9R(#421;;(LX=Rh@G^CXuESf,8; )6*1+:J9Rb=Ef:I_2BY%:U(CY6Yl?Uh/4C$8F)=V.6N-<A+B=&27+<I?ZvV^–asQg‘UW“`T¡aJ–=<c/6M(9=*CO2FD+CT2-A8C31ZE,^N8O[@;[IBSFtHD˜]CGoO=IOGB:QH8NB8E>3<B029,T8-HF6GF5QL0cU9<kCHH=^L4{c3ŽwNsgVel`]yZZ„NQySKYACQ:CZ1IU+MQ+:O4Y8-qH(_o=H[KcP;{v;j–^XzqMUG?X+/O-FE)PU.OM5X?)CU06M63G2%@*/(EM!;_-@S4BT2G`/Kc)Gg&]M ]i"R€39v:@h<Xp2f<asF^c?TvGNmK_J9jf1UŽODvRHh>Uo+f‰BH€BOa9@\7H_?Rn6b{\nuMK‡PTi8mg(r‚9qŽ]{£^‰Ÿqe¡g>Œq8T=5S)4C,;AIDHS<H!2Q+UD(Yg+G…S:jD9S)7L)ST%Hv8nkD™‘DŒ­`‡¼vu·zpªqY•Xdr@…h+†<w­Wt©]aœ\]uGI{AOh@[p=\@b~L@I½\fpŸXŒ®_ƒ°`oMovAat=Jo@Jl5Oa8Lh:=j<4X(-H(8D$Ia,QqAYu5V{5ƒ†;O©`FmEOm/Zo1[{A5f2IG ;b82Q9=J%EW/Bc-1N*<82T%/H#KJ#y‡Eb†O>^59O+FV.N]=V]<HdDH_4HvEYq;‚z9i~Ff}?ss@¦B@—hFN0XJ+d]/e†IaG[j<U`4Žm-žB’Úvˆ×€…¸laŒYsª`€²o™Âso¬b€™P[©r™sDpŠKf‘]gŠK_~Ifs:b…F|¤S{¨Wg Zq•S‹¹f¬Û{L‹kŽw?ɶv©·‡n“b˜{@vHt|UŒWt¬w—“ež}Y‘|Z¤¨t¹Ü¡ÕÁ–¬|bĵu§kt–a>€KZ\4bW=ge7ŒJ…nSzcJhcFˆR?y]DH?mKCvfN„tLs`Hlw\{wNi³axžb]¥dmv<Mh<Zu=Nj-:K&CN+GN$FH#Ji/\}:–Ÿa÷²€¦”cYzQXt9L`@YM6qBYmDpaHd™aY‰Kž|HàŸcÆÄ}¨Í·±t¹Œf•^ˆZaW_|JjbL…~bqƒhi‡XcyNe˜Di’Cg›L‹Ÿ\‚“c[]>T[3-V00<$CB&SS)”„N=f4,M'dkH×ÿ”xáxešS‚Àzs̆X¥JMc8¥®pÌõ“ÄÞ}s™Ou€T,I-6P2Vm?Ge4=Q.IS1Xj>Le<[k@j}H{‰N[vVV‹`uˆf€ƒb‘wEtN%]V+FV;~MVd@uqZ•dtNŸ¸l…¤WW…MSŠjvªup e‘³z›¡hcv@b\4BH"A="aP3Zu9L^Ex’s„¢rnan…[eoInƒ:{~@_q@d†Wf¦e]›OW}9`vD‡Ÿx®ë™¸ä¢×„¤ÜŽŒÏzf™^ym†zj‰yeˆqTŠwdm†s}³sžo€|ihoU`cFrdCqgKxgCthKymO{}PjnRg|Lc~JlyK~rX‡„]_jCrgG\bALe8Ma8PsG`ƒPm‡V}[}„V‡‡X¡†W‰‰U†|^lrVhmY•}f“bo‚d}šmˆ¨d‚•T…~Kj…U£¢]ˆŠY„ŒSŠ–Pz~HaiLi‚f‚ªnƒ­cq–T[‹Lg}P‰…^„–U‚ybÇ¥¢ÈÊ·¤Ù¦¤Á¤µ‚¤Çz™Î‡¥Þp„±LeDjS™d~œLgˆCNyDFzK[{Jsi4^V%?U+C[DVoDPo::X-2D!<@)I@9TWAOmK^xBL^,3=(5F0CYAGe;Qb=aqG]o:Yd*?R/?R:Na>gr;WT/>M5He6Je7>W70J4/N;BcK[€XŠ‘Z}”W_ˆ`n›}—ÉŽÆ]c•FWy7;L/DS-HP/2Q58=35B.DI1SJ8Xg>ViMEdUY[SzWN^[MfTGTHDJ<=B?69:535-U;)XT0CEA=;6BI0_L5HXA=Y7?O+uO(•v;–_RvmYn`clc[DrQ7_ALK62K2KB*EV(:O5hL3MR3=@8FC1[H(f0Y[Ejo.>46(!FAP^+)a<416R:AZ*2O<7B1H*H":^%VM4`q;LrD9qOE];5b1;U1QS(Yr+Xy@d†EmCnw?c_:r_4ix@6vLDI;bP&Sw7QPIMjr9S”CFk>A]1EW6Xo<•…IT–nm€]F’S8[@JM,fc8wˆNQm¬{x‚a<žW@[J3B$&>('/3+6B;P!FF#H\-bY7PŽPG~`DY4;[6l]/{w9n‹Pt›Ty£Mƒ¤j’Æ~xß™_ËC¤bAlATP$i\*bt6>q8KW-Mg1Tr?d”Jn²`m¼m£³i~Ät¸lz \c‰RJr8Aj/Pc/Je7?i<FX2AT'Je;8d:8U(1Q%JG*Xk8L}ARe1Xj0†z9T©cCmCKm,Oa1=Z'8X$CO%@S+9L3>H!G^+:d/2O%>C(HX-7W1d_*j“OJvEHM(@E(UK'MS3iU5L`=eoCTb6Vf1^`:_zJ]uEX‹G}‡WL‘T<_@=K,JN)^V1RHZx8Mb9Ml0zV*µ˜M’ë„ëp®jzžW™²izÀ|alE‹x9cœgvƒ[|ŠRf›^[wIPf3b^1p’Mt«^u±_i¢]„ŸQ‡Äg½Ãyi|lœrA¸…[ËŸlŠ«t ‚R¢lC˜uNzb;¯›a±Ò“µ«tÂÓ˜ú¯‹ÿ³ˆcš|] r•”^|ƒMu˜ZkuFolKuM~‡IG;iM`gRjxaanTdbO`WLqrTWjDqT0j}XX[@“‡Jw‹hbƒDJy<O^0Q~D/H,C9GM.Fb,Qh.GX+|qQÖ¥cr;vh9W^7lt-ui.lqDo‚O^FbrTŠkOnrUz„[ˆu@™‹ZÚ©rÐyC¢†WŽQyL‚•Xˆ‚Ju{F‡pK˜VŠ^‡›Ut¥VeJX;ji2kpDO`ACW4LZ9DO8>]6:H4TxPE‰ZF|Oj†X ‘U³¨iŸÃmlR‡šH–Zw•Yqºi©­\“Vs_4OR0gwHBk?Qo>G_+8W0;c9Jc?XkBVs<f‡No‘Tf¤`‹ÊuÜ|‹É‚©¥odT55;0[H:iuT †Ya…EboK¹Šb³`lp2`yGp¦u’Ï™“à’¬x†–e‚s@`]6M\7@S&0BE=$Zg9[q>o‹Vq‚KfNt‰Yk~=ah9Œ…GdsL_P:u[7[Z/FB C@,|lZ®Ã‹žËˆŽÈ~®Ò‰˜Îv†µl­Ç…¡´k™Ÿb‚‚_˜|n›²‚¦ÈŽ²ãŸ Þ–—Ê{t‘V]|FVxE`b<g[Dgc>dgRglQ_|P^lCjlF{hD€e;m_<ib=vc>_]5Wd8gtG~sJ{„Ml|Om|Mf{NbtGfuQ”›p¡w¢”oµ™r’gy—a{Z†ŽT…Uy‹PtŠ[žlžž_‹ˆJhnAtSDyeKw\x—fy“^x‘Zn›Zg†Rr‘_…JY]:‰{iÿŸ‘ÿÀš¤¹š¶rÇ Û“³äw»ZgžM\ŠN|^}“[k•TbOfzDjn5Ye,E]3Q`9J\>S_>Uq@bf>WT1KU4IM;JLBaqPg‰LTp:@U2DL,G>/RG,NQ4Td?fx>Ma8BY3SY?_g?]i<MY7?W7A^0FX6RbBUjETrI^wM_zG_Uk–]ubl›s‹»mŽŸWfw8Uj7PX-:E+>B*AP2M\3Bm=ImHelF]‚Lb…\Yw\NgUZOEeR=UTEKDE`@>8P<:8;P;/ZF6CB7<6;?B0AO0;P9<E2CL3=L)mR#ƒj.™P<uMJhKFQDFTH@Me>ExE0UFTB8UV*NX;W\97Z;E8.9K,UD1~c9I„V)R_"'-/"G:J],3M57I/HD(DO1,M007++=!G37V$l]:|r=V‚QDyLKpUGoA=sJMb<WyCSoBHa4@[(?Q#QO p`(Jn:8eDAP,NY+]b.[}EW‚Ljy>FŒBAe8FX-\S6ƒCz blŸhf[=ŒK=[IPY0au=euN}hA_²jp‚jRŒO2vR'2++3/?"3H$?=%=X)HT(RO)ec5fBK‘_VuDK‚Ke{Nu‰Ky™Px«^€°[¦¸|·È‹©ñ—}ÒZ«i9pF5]0>a,Ae4R{;XHb¤Zx¢Y‹­bˆ«i¤_u†Ln…XWzDL^:@`2H_2Jn(Te/Kw5BLAkA?M*GN&=^,9T0:E!W\.Uz@Kv=B\,W`'‡3Pœ[Bi<Fj-9^06d'?P*7H-A@2F%;G!H^+/e(39@M#Ee5In@gq<Y‰EBa5<H#>F(?I)LEVB$^`8K‰TVk?p~IˆnS†cGdxAb‚Go‘\ZPFkKGX2AY-RX-NuOWk@V]1R_/_g,•¬P¼Ìs£á†zÛ…‚¶oŸÁ{PiUo8ya4jd6csBxˆTb‹OA`=QS,VN1zl:…©a‹Çqq½nŠ‹Hž®M´Øyo¦lq=§rJ©z]ˆ‰Oi°fŸ…Zy‡]iiC£“j㽆±½“šn¸ç°‚šn…gF‘U‹‰[zqPumF~yBja2ŠP6…ƒFpyT^hF’nM¡tP‹uYzr\™{_sl[qƒYJmPUS8lgNXlQžm7_zGR]1\r4T_1gs84a;BC%UZ/[šOLQY]M½Œilw;Ko,Ok.L]3Ll+Pm.a^3tiFg˜P™³}€Ô©d—ul“i]žkŒPŠŽInq3r\1n\7qfI€kN—pJjvPf|K—xQš¨zz‡Wr}@mEP>]†Md‚S[]CfiGdmNk`aŠlXaœ¨pŒËxu´iz¯hu¦jÄÄ|l¡Zu¤T|¡[‹¾v§Îtk‚Esš[7X,RM1iyI[ŸVNS;b=Hc;Qi<ZfFd~STu\boT€‹b‚˜e¬®y°ôƒÚÔq¶ÂbX³]csOnvP’S†L^ŠI\ƒW•Tƒ UFp0ZsC‰±q𨩾tz‚Nyl9rAn™PL{FBg8?b6Ee:cc?TEk…M„nN¡‰f|”_RJ,JF(r]@šxKif3J;(A</.@'18.\QN”‰k•ÒxÏw˜ÄvžÒy}Âo´Ãˆ†Ø€z‘ZtM‰sX–œwžÕ•¶Ú¶Ý©›Ø“{¾“lÁl m`…GZP;l[>^`Md|]nŒU_oPasQuxLjt>bW8Y[EctWhtUTsFes>Zj9\i;Ro=VzKc‚C^zJc‹f¡pµ¢iŠ‹j›hŽ©nЬhn’<[j-oi7y}Jtœbƒ§o¢¨e…QwwKjzJ_‡[ežvg’cfŒPy›a{¢^wSx Ts‡@YT:ir\~–Òž©¢ƒŠ¹Œ—щœÓ“¾×—Ìm»ec¨hc™nm¡sx¨pv‘Mbu<Ph5GP-KU2Hi?NlBLm6NpBNtAH]8LPAaW<UNB[kJqˆM_~CX_;DF.:7,KK*;D*GW:_hD\k>P]:UV5]`AY{J\yGsyF^v>K[=I]9Oa9PXDdkJYuFW|JdŒUh‰Ob•c¡]qƒGTZ1E^*>]-^T/CW.Va6ak@bLR„\pw\pƒV`‰_V…\HgSRB?\J4SX7XUHLRAIN@IN9CF7L88CH3AK;VL:AK:8H69A03C/BJ+VUC^)dA,X8.S27W/+`?,xU9\vDDvWK`ENI1G?5EA/G=0MG)AM3^S;myIA‹s<DY=<*<5(RU-?e8XK2>c8=Q8=@24E#/D'0C$G9^Y$]tD_„^W{K^rKT~HMcNGV:MR0C`7:g=<_75]25]*]V$Tc0JX;?g2J\9Qd9Wg8MqGToDby?@€FCX7FY3cZ<|x;tUY€RZ`DLy?JtQOa>`q:fŒOŠ…Gt»[c«^†U.„I&E8:7;N0<D*;@'?S,Eq7T\.UY)ms;_^gRt–Jm®ev¦r†§e„«kˆ°e™´ˆ›¾ˆ‘¹to¹tO hL…PTŽN[’Ph”SqŽPq€DnƒEkJg‚K[tF=d5][(L‡OH_EE^3AU)C`3Fi0Mi1YY-[m5FwDFlG@e>Cb6=k<Kj6Pd:Ih59d03F!RUvv3G’SCgA@d)Ha/Al/2X64?"(6(%7>IY'.f))@'NAbp3g¬RXZ@u?4N'<B8B#EC.;c4DH4f^7O†U•`8¸q?mW>[<%lc0Ÿ†Vc†\ftMPx?KH-JU(hd3SvSHo=VU/Nl4mq-xBzB¥}G”¶ZžÔydÄ{\iD\u6Nz@B\<b]0\~A^zEGA/SB$JL3egCrhCvŽMi‰Gy|J~vO’K\Inq=·‚[ˆ’sW¦Ïk˜Ž`—™l†ŒS§¿qÏ\‘ÈœjW±{`xº‚…[˜sR˜nsWhpJOuEZb9miGŒ™V™Yˆ°h‹¯jª¼w–³r‹­w¡k~”_gˆQMe<VU4_ƒV{yaQvEQg5Gc9Ll(O_&Oc7IY:Q]/t”AžÑ…{ݤ‡Wx™na‰^L•SY€K`š`Q|<Uq*UvDu}QqŸ\š„O·Šb¤´v™î°}ñ³d—^`ˆPij4`h7cL{|P‘~UŠV€‡Z‘°r’碻]_pL^yJNZ.N^/qtG–edq]ubUeaR„hZeNuZLŸyJ¯‰Sƒ…H„Œ]}œj¥®h}‘I`w7v¦T¢è”Àì†yI_u7v†J:d8MX6l‚L–²c›ÍdI†?L/ K?#F:j=+tj<x]6€Uƒ–_‹_¦¯g°Ósšó†ÆoqqSdwNk…O†T`~JmyE„ƒGj{DQ{4Io4vw>y{<n`+je,fv9s˜KyªPYLM~DYŒK[ŽNOU/fT4kBqcG»ˆq…©[7L,CC6bL4‘b6ŸZ7L]7I<3HN48N-GH/VA1‹gH“±j‘ÆnšÆ}Ìw’±~°Í•‰ h}Šgv”iˆ²wµÄ”«Ó•­Ü ³ç´Ç쮮ꕅ¸c`qSiua_[g‚Yo†Wjt^x‰`‚„^{“a\„cnŠkššfš’Rgs=SgI^xJT}BW{C`ƒBWj5KaFx„\|P¨„OŠ}YŒ~`}¦\ƒ–\v‹=Me5Ea>RlTv˜b}¦Z¥’K…N~‰RpŠX`‹enš`k†M^~Lu‹Q•_z¡iªh¡YN{DdmXskŽž{µœz«ª„§¶‘¤×‰­µo–ªh·ƒ‡Ä‰¿ŠŽ½„©¼pœ›Hbg-F[);M)?N3PcLewEWi=ZeT\KLlEH_@PL7MJ8daHd€EXn=U_?Vb=J[>LU/<L)C[8\tC{ˆAtl<[`;JU;djKqm;kW;y_C\nBS^8DU0;J3CN;PdGSxImJV}@\zAls?Z^@XT<]T1GU*CV,EQ3_Z<soAf’TFŠh^naoqUbŠRTŒ`=hRCF>QJ3Uc<XeOQ]QYZN<UH:QEKJ?DM>CQ<FO;7J:D>4A9,7G:9J4BK&=X#2H*6/(/&%E\0sA+i70YR9Eb<jQ5CP5@=:ZE.XI.pN7€WE€›_D•~AKgV<3ZK6Rm=JY>PU4@VA6D42<*9D+0B//D+HG+|W*^k:UnFFaDJ[;CW16Y99T1?K&A[,<Z2EQ*B[%?`+ef8PpGD[=Pb4RCSrMRkGNnH\uFYC?‚QMgDReFQsRWW>Uh8PbGZYBcp=F_buKr…Da€JyS6މ:]¥uUuVJj42qAKF0:^92>4KG"Sy>CrN@b5]_.xo+\MiP˜H}§i¤gt]…‰S“¡R•¥w}žss¡fu‘`l‘TjŽYl“RY„PMl<<Y.BN)[P"Yt0Ww<C„E7cBrR"JEEN95T$;H"@[-Mt5Kt>Mw=Jh=\T0h`+ab8ie<YoBFeEEe<C`9.^-8ETV%xz0W›\CwG@e.JZ-Lj7/X2(@1-!7>HN%6d-)C*A?'ySu™CU\?jA6G(7?!>G$W\5Ud>\~Ko€OZzRVT7VY+7I0:.$PH#k^?^g=`ˆVKLAK7Dc9bR5RY8FR,DW-K]*fh/Us1Dk._^*ЇF¯ÂfuçvZÄ{]‰W_y?_~;e‹NZoFR{O>hNMA-yc?iyNuxE|©Zm´Yš²Yr¥ikSYoG„ƒGÀ{P”‘Zˆ—^–¼g•‹XxzW˜~QvŒX¢^J²°w{phš…dŸžj™ši´˜b„ƒQtfN{pNdR~…Ly›\ˆZ„›b‘X¬dugº‚p©™…z†o|sVTyVXeKWjIx}Yj`K`<\`(Hx:Gr/Hh-Oe9Jg9Zy:ŒŸQÇÌ{u«jz;—qX{€cg b†«nŠÈQšXSu1gx@eeC†iOg©fY_=kQ-ºoDä]mžcp}Ob£qz¤t†–`ƒ{I‰{DwrH©…\Çø¨åÿ´uyCkzM^yCCS3QN9vAœšf¸p_‰lyp]~i]nZNceAoƒ>x­`gFzŽOƒŒCipAMmFRh<¶¹€Úÿ˜~´]dgMTkD`u9G_6U_A”ł◼QYšD0Z/3a:+O.7R4hƒRIv@t‡T~­o}ª`†§`œÅs¸Ý}‹ÚpfsFpuLyŽ^†Yb‹G_z8iBWs<Tk4Ep+HY)JY*LY&TY.\d/c„@vN[ˆLT]9p}FtƒD@`9SA4YK5gFAŸ_†r;KC,`N:^U5OH%V;#‘aCHX6NB-GP.8@-EB,XL2qE~¡Y”®g¨Än‹¤e¸³ž–ß ¢ª}™¸p¤n±|ŽÁšµu§ÅÁØž»Ø§ºâ™Çoo‘Z”nVƒYe`l‡S‡lO‹€o‚¤~Œ³“­uˆ–\o‚N^xN[xP€nN™jMowG[{Ff{HZ‚Ki~Qsw<jn:]mCw€SŠpP‚ƒO~_n‰MWjE~To„Jt‡Q”K„xC€„Pj]g˜oh©qc‡S]‚Sf›]{¬b{±nˆ±y’´jŸk”›_˜ds”ju’bw{CsvE~iºÈv¬^{­Ywžn”¶€ž¾Šµ½j±’Tsm6EP(H[-B[,HSAesWttF\aALQ=gkPg{Y\qKR`EIR@N]AXw?MkDT`Fb]Ez^Bn_4J[0Jl3Yt<ck:PV=K_@I_J[uLbxAKS7NV>VrCK\5IU,GU0M[<NhGTƒNd’?Yr7FS/:@)1F-HT8O^9HM1GS2BH7_Z6jiBg|QGySVeQtqEdOW„bOdUUS?_\@\hGfiQ_wVdgZeeWSfSEWNRK=RM6HL68H7PC0NV.5OG4?7JF*GR#<L+9B(6*5 &1E!%;)G' M9 RA.lW+Qe5QR3FS3aK.hE/¤`>†ª\G“†MC\Z@5VU8ThBO[@IJ3<F2<G0DO1=S7<J9:O9Da<6_@FL6;G$<U/EM+NS-Gd76N3D@.=Z+5Z03L,B=[]"Ux6RpIMd@bl5bsCS|PKoHO_D^fAgb0`>`‰Xe‹aBvc?M?UM-Mm6bdHlkDg†OT{KDY80N)Q=tVI[@XKVZ.Fy.Xr<4sC;E=fm9A•YRlOTŠUMxSi_+\y/bxF{~BqƒHe…KRuCgc=z~<e‡P\xT_tDYxPMd;Z_3bƒ@C‹PCk<:n13c5=N$IM%_a*Z|>C{GVgBHp9OO/-Q$6A$ZW#^ˆE]XW†R5hA8P+>O)LO)TT)TATE ZU&Lc;6o4;Z0JV(}p/P‘SEh>Ae(I_)HZ&0`-'D!':065E#JN Al)<Y2+Q/NO#km3YQDzL4G'3C MY(fc1rHy‘^jvKFhR6:*CD;X29[>AE-FS0aH1_c7NsGcY;HyFLlH>xNAc?Bm?Pk>Nx?Ys8Rˆ:\zA„¬\”ŠV©Îd—É‚yÐrO¶s\cAn}=yNmˆY\ lXŽ`}‘Zd—dh‹TpŽSe;…r9’–R€¯m_¯ZŒM‰‰P€†L}{A ¥]”–gšˆ^ŽNjgL¢cJ´Œa¬™h‘šc—˜Z£}[¥yS¯”Uj|i{gHdtI‚~O‡§kŒ›o“˜w…¢~ w–}æ©€¹°•‚Ÿ‰~”z}‡q‘uOt[zQ3DW7R[;FY6Oi-Wt1Sˆ?^ŠDk¢RhŸMŠ¡Wš®\R…Bai.„L“ºwqŽLŸ”Q‹€<V…BYz:Zu9gk>˜ˆjl͉ML=GJ4Na@oi9bwMr^”¤YµÂ„Ûl˜Z}wA†‚P¬«yÿÿÁ¿ÿ¥Iy?VQ+T\7PZ3\y>g}>¬ŠC‚HªU‡…gwl[l[Vg]GsH”¨\m¢ip—VUpI`pR”Œes²n€L§¯wi€J[k<gc=_e<TR,qY;·ˆ_£Æ`|§K|‚OWsUegOO_T`y”d^Pu†\š·y}ã€yÔp¢ØŸø‹¡Üyp’NpgB“Z¢–^jŽEX‡Mj†PRh=DT)Qf/?g)GS0LqJYŒNMh5Ij.t–c€×V¼udˆRUv;U[6Y90WG=b^W‹cO[8QS5mI=nP6KE/B?.oD@”~TAV.@G*:? 97#OE-bY?paL€K”U‡g°¥Ë䙢[r€HsŒS{œ^ƒ–WqŽZ‹¦¿áª¾ð§¿é –Î~€©aj„Tl…Vkkd”ii˜rŸ¸€¥¸u”£[€{[r{apcK‚oSˆ\ƒoH|U;bkJbxGio=ql?`kB[b9Ra>UjNq\—mrˆXs…I~uZ`†Q\q<{`2fk3xCkˆHwR„Œ\Œ’aŠŸkk£T_—WÁwˆÒt‰Èt†Âg{ŸWqSwWxœbƒ«k±Y`„Cc€Fa†U—¨_–°Gkƒ=`}X‡ »Î‰£¯ey„HfjChc7Oi3Aa9UfPt‹[n{BN_8[W:MbA\jQh€j^‘jPƒYnˆPeˆGWnCm[JreGrlGUxQO…FUŽFSˆHWf5BM7NN:f]EwyT“„Q_e9CX8Wf?Oe-;G)7M8LpER‹Mk˜Ji{>\d?BZ7AL01C3>\F[sS`j=Q_9KG7KS8IN8YZ5Dd?N^Bs[D_z@JwMQgNNc>L[F[[IfdHZeXTYSGVICH?<E6A@1IH0@B1GA-c?(HP2<M54>7>B.?E"KO#KW%/G6[>-8k18:7>,(A1'=<.QC.Q\,W`8LO2YF4wK8¨`AlŒYMqiYKFWV>UgGGIF8O8@M*FB+H<*VL2@a<KN@Q[<BaK2\?7W7<_3.Y6<:(I<.G%+0$8> L@ 6e*)U5KM'cY)Ro:Ic;LP,NP(Qd8JrGMQ:>Q0;X;GD$aZ&gqC[sS=bF<G5PY2Zo?_wLgl:VH:[J=O.)P2>C(lUH™F:`VDR#\X(`7NIi€Nq•Un§g…¦mm©|C—r_bCcƒ0]ŽJ]RKb3Hf4OFSŠUW‡KMwJOiF`x@@tOJK1TX,_j9H|FHa;Je3<j85[/6S*JQ%MX*Sg6LvD@oC9S-3J)7J)YV(^wA^xDUxM?m8:]17Q53Q-.M$1L%;P&FE%TM"Ye,GV)G\7hl6FO<Y6A_(9V&@A 4X#.O#0N*<B/IKK!Hm.B^05W9HX.Zu=fx7KŠD?c>Gb5Bd<TW/ƒT)YS0fE(M_<)52L6[S&W€J?a@@O1PL3_TCi„bwš_ežhi][‚M\wJWe?Qk0N`/m{AYŒKzLz´uXjB͉@xø¯”[zÄ^]¿ql\}yD‹t;w‰Nްq“±uj†^bc<ds?aŒOhrNwGtuP^oB’‰?oŸOf­\j}R¢•Y¹x€œ`qgEwkJtiJªw@˜NŠ[š•k’Z{yQ׈Xˆƒ}ª•‘e‘³z¢Îž¤À¡¡¬‘²ƒ‹¬—Œhª‚\щdyŸ}ŠwU™\K¡‰nLlOPK.BeBW`LCrBI^&Xc*cv8_a.rQ([x@``7…rMRjACh4‚†W|¯h_‚JgxGG^7ag:\~DVd<vpX”iI¯°…LšGlHB_*Yl8m˜nž°ƒy¦gÀ±fÎyWtc>l`<„‚UÉÍ–ÿÿ¹Ý|Ct8>Z>SjFbi;_Oj¡aazCro0x†;’ŠRŒeSyxQƒ€Vƒ§YuyKwnHdtHevL~«{·ë“’±doƒ^¹Æ’>a0A; E!c;5Sd?pU¤•sˆ™dm–E——j¯’lŽ^=gT»™„Ö‹t«u‰Ÿu¥¨q«p°d·Ï‡®Ü„‰™Iu…Ee‚Q‚xYĈ__›lk‹geuJAU1<N/9?$B=+AK6ƒŒm¥õ–S¥QPZ0†ƒ]­Ë‰‘ÐxV„AaFWv>RZFbh`Ž™}”œgddFgdQuggzbk]LXK;KF3±XNk~J4;(5B-9U2V`Af~PhtIn~Dg|K€{V†t[Í´”vÀkR…>Yn>eg>cuGr’h‰ÅŠÃèªÁÿ¸Ìü¿°ÿ¨‡Î”€Ï“kÈ•ƒÇž”ˆ‘¯r„“W…‡OkˆU`jO{^MocJjcW”yZŽvKe^HqzU\xKST=YK6[O:ZZJgiUu}MXhK«{d§“Xvy>fj<ƒnTpŽSY{DJr<[rFrvCgfArzS}…M}Nm‡Cn”]ŠÐ}—Êi©TvGh‚PWr8EM*YVAtvWƒI`gDaxIf€>t‰>dy1Ih@VƒJt|Y·’x¡ª„€²yn£in–Yd…DIq>]lRnˆ^Y€SMsDIj:I^AV`Knlkr‘{smi”Zb‹MUwIYkMdwSb„cy§ss³df—Kd•Q[{;ML3@X.>P7Z[B~m>a\9DQ/N];Yq77P+4U?[ŠLb‹Kfu;UX)<D;d[LonHC]QNmX[}`mƒ]apB0D39>*;E'LL06V1:N3VG.bW0\r=KzJRoMZsKQmQH[OEJI2K=:A8>B>DC2@E.5L5-I42:+71#>7#R@'CI'3A1=>)aK$BR%Z8)S[+'L:.1-<0SG)<J4B;;QE'Jk<MV;_P2f_>ŠcJXaN\LJgR9pjMOtUKIHIG8?c=AWAQN:RT8\`CfrJVqLBhG=^?Me;6n<'M:+?!+=$:-6+8I4NZ)Bt8Pi;>\:29+8:JB!MP&IZ/4Q5P/)BM'/WG9C'PL G^>7`I?L=PE2T_-Rh?VIerFN:7eY<I-1U):C3eO&OŽ74wWGQ-Ki,dd:c€:mŽMƒ•L”®h´ur«…Xi_ŒUh‡OiŠNA˜\<]<_S)j}<k™g\—dM‹XcqFNnG/V;BG&QQ&Rl;<Y4>K)JY$@_/7[.8R,6W)<T+TX%Pg1Ff<3^68O2:J(OR(Ny;WsGS„UF|L;d2?]4?Y<5U09F'3O#9S+G^+>Y*NT,KY7hp-H•O@[GA`/3\01@!9G!AP!4C&-?'4@@?Ck'BM-OZ6TeBQDTu7Ug,TI\m<Tc54M+584'P8eL1';4G4Q:!VW,CcFVB5sV>—l=wJ†yJ€ŽVXˆe[N9Sr?Og<FZ-Sk3n…G_G—“LJ‰^?P.ÞW/†ÚˆiŠcˆs3Š–B‰ÂnX¯oWa>iU*€Lr¾ŠPvaYnI“X[IVkD~hB[oFMq<`v7lo8R†´j Èp‡ÄovZ€]:¥‰\q³yyV~P•¢d¸q=ª~P˜„aà›pú¡~Á—w¶¡xÙ”`ÿxf¸w]Üm]Ò{d±•z‹¡k•—e¾•vy£s[~__Ht‚V;T?P@.JX:__AZ…XAyKWd>K‡D3U4GJ3`v?PEuU4RP,Nd,~p6lœU[ObT-LP.`n5Vn1nf,·lJWkHÇqnâ¥OTG_+~”g¨²ƒƒ„Uv—Y‡šVOkFX`=lkEŠYæ£xìÖqƒ^I[-xrMyÓ–m§uy˜_—°qb²bU‚Dc@ut6–r9 †<™z4’O[~GiZ2up@x¢XĵjŪdlŽS´¨ƒ°Á…E`2+;$/,#WH:ylZ–e½±ƒ©¸~j—M¦«eèT{i‚tÚî¥ÄÊ‚²’r¸¥‚¥ª{‘Ž\s^¶Ö¤ì‰jHpƒU‚˜c†„^™•Xž‘d”}Q_`6VO>B<&@0 N3$bJ3y]Dµ…Dp€:DI'[N-o\:vjFwmS‡boz[‚oU™sQ¢‘`¬¨e‹Xzy]’\Ã}pŽgiXJ]_Phx`¸ŠgBnNdtQpŽV|™VŒPspAfiDqŠ`uWrpW¢œŒ¤Ñ‡]†E[`7iT5d\8tpQ±ÂƒÀî­ãÿÒÚÿãÜÿå¿ÿËÄò¨¯Õ† ¯iЉVxŠ_pclŒf|–lksXŠlfŽ„bŠ\¤VŽtJsvQr|ZgvLidJ]ZOWO9cU@‚jL`9lS5kYE‹vMt`9sl@d^=ljSu†Wa‡P|}Nˆ|O„H‹‚M‘vFƒ‡=^~1[uM…ZtŸXZ€QRyR^‡X\S8j::K+?:+dM:W`;[l1Wj2X|C]†KL|Y`rUh~VZ{_®ž†ÀÀ…”©y‡—ZxˆKPr=ZrRu‰^q’\jE[b3RM7_fMƒq`†‘qk…ckzWeT^€MgqLZhUh‡v”ÀŒ’¿cuœTj‘Ie~;ET6SM6GL3AX1B]6IX0@I2?N5Xg;Hn?NsF^wFan;Va+8C/>"8I5maNt€Ol‡ThczŽo„“X>>*7>(9F,AF-4M)%F$?9!cT"mf9hm?i†J]ŽcMpWBK@HJ3NV8GZD;QDN>;AD-<H75A0*<*+:&35":4!=5'7;(:?%FF!F>Q;$?B)7K/GC0XJ1^_;4`BJA6K[-]SCxX?ƒb6hjEafUT[H[W=q`EuoNOpYL[O[M=zQ8[Hz_FnZF[`ISiHIY=N\9Nf?Lz:8]>1?09<!/L$*I%$EA?)GF&UW1Zv8=H4_A)F.0<(MC#>Q(6M-7?&]?"UL*4eL8D*QHJd<^nAGyP=SL?<(XE!Tv2RoHel46€SCB44b,2O5XJ'_z&;ZMS=Lf$^jGh|?sJ€žY«¤d©½rs¹šv›vhdSXlb5EŸO6dMAP+s="e†=bbMQEm?3R19L/AU0A^6@S/,M+:D!DZ%=a+?Y+:W59[.4Z.;W)FX'F])Hc/;_>5P.SQ'V}9duC[RGyP@g8?R,:G*0D$/6<BBP"H\(Af7Bc1PX5kw3`‰AGW?NV)9]-6O'5A ?K @K&,H)0A#DAGk/R_/jg5X}CQC?<T\/VG^†XGtK6bG.U8:;%K=$pU63C7F;>8#O,GH*:V=fF$b‹E`y>p~F‹˜TTfR[H0_^2Vg3Vd0nxI^O\o7}EC{YOZ2“H*•“LMŽ[Op2vi3x7{¼`I©dVj;…]7•žVd¼€’fr‘Tg€FVj9x^2Xj6Pu2ZKg‰Pk~@q^8«r?§Ó{jуeŽ^¬ŒT”“`‚uD•šQ£´x{· Ÿ€p‰s\ÍtO¨V;¿hL‘‡Q–¥{ ynŒaL[M¨kY¥uU‚xAº›cÄšx‡¸ƒ°{„pn‹hPuYC\@_H,dG*|X7Wg5bs=T—YN\8Se@dxB]x>Qn=8b5Ya1[s4l|2Im5IZ7JjERo=Ea*Qd+ƒa,SR*›N=ÊPmEX[3º›fesFRN-RS,ZJ,]L/€\7q‚Grr;•Œb°ÃŽqº=tBw€DÅÌ”÷¥‘Ù†‰²pƒ¬s}¤hxœNV€6jq4Wx+c4„MzLe’Hoƒ3ŽF„œUvU~}TІZoD>M.82.HODXuo™»°¯Ù¢æè§Ïð¤d£O™°kÖõ­ÆéšÀÈ•Áè¢ÐŠ–k¶­‹ À‹ƒše‘‹hÈÖ›µí‚„š\ˆqÊœp»¥kž†`ŒmJf‚FN\C_gF64&88*@M6VQCZ{U]¨UM‚EObBZwPQ€So€[˜”„Á¬–áw¢Zˆa‚™j—žb¢›V‹X­šc‘ŠdÄ“s—­†šÆ©•È¡œÆŽ±€ƒ´“°wœ¤]ˆˆXnnTg`I‚|R~pNvf¤»’«è„`†JRO4NA*HC(EH7†…v¿ðÂåÿòÿÿáñú¶Èà ¹m~–bx™bV‚Ji’f|žj‹‘c‹¡k{“i†ž~”¹xŠFdP1iF7v\CuxUly\|zd‚‡cnmHlX=tOZn8[L0JV@yqZz›ae–^nƒLqpKt‡k{«bk°j’¸cÀ[w­IkƒGdƒDZv1Nh1_~L{³n~Æum´dSzIs}`hdRŒP<d48E.NS6JjFH~`TŽaa•ok›„t§„vªr_—S]xX¬”o¥ `q‚MhjCWwAYvUquYccD[K<XL0JH7VfLvl^x‰sd‡\WeMXgJ^nNqmWuyds˜ˆ–Ò–ÇclŽM_‹EZv>V`8bP;LN:O[<Bn>Om@El<CeARo?VtFNsETj@Fl:BS/2L-2P7.Z<7W>HdAlpL‡|V|Œ^ˆ—gH@,EB*1@+0?*/?' 9=53DV:'q[-oŠDJŽ`@ePHF6QH/YP8IOA;KAB=164+;6)D;#@H01M1;5.19"/2!24!14D;I@ I<!XI)Ci5]a;gkA^yNHtRemCCl?EVH^T@‡X9W8g_EWVL’X?ŠnI…iX[cOVdSJTIWKG\N;aM<^j>MpKD^ATO6Vf9JJBb?=J*OM*IJ%;J$8I$;_*Lo9Gh>IU6_S-O„OL…J8uH7WBEJ.<P-.I,;;"Y@ \X..dC2>0IMHY;\P4J‡F5kU0@3KFPb+Lo:oj<=™^IQK7k23F4JH+ma,QœPJ^Me^)X‰Gf†d™X†¶w§ºvš¶t|œpY{V^]6@jPlT+K„,@fF2^,U6/p^*Z›]J‰L9]0D^,DX97H);F#:K$7C%;U/@a+9I%:> ;I&AY.8[18V-8X%C[&LX#9d3:T8XV+Sr4gyBTŒOGlN@j70[0+<%':)79@>; SX$Kx8:eBP\0Uo4Ks2Ag6A\1CE"8V-;C$;L&;E3J%3<NG&Rn7Kk7R]4^r8V‹MS‹M\ˆNp—`x­o{¼}gº†P¤}NœoS‡kp}_HYON=,9I)33"G5>R,g\5X—Q]c4~Ip’ZD}RIK7KQ$E`-xg8mŠRZ}?_g7m~=Qs:M]4W[1Šl;L<bƒ:Ss<UW+€h+lŸQ_¥g[o<m?“¹l~ÀŠ^‡Y]CMg3Vp5]ƒ<]„Du–P^‘U]jANtNˆ{Oµj—§vvY›‘B“”UrF‹FÙ_DójMÔ›o«¾™…Á¦‰‘†ˆ†\¡’Yè‡U»•j‚“u‡‰i’aeJbwH‘…S’w^Ž˜pˆ‹_‡mK~sH}\UbMpMJ]7WW8PlLbc:e˜KW}MZyFYn7Sa6`c8I|FgOL¤RDg'@Q"cX'ixFOm>Mj/I`,Uj8J[?nbZ‹Ã†PmCea&uh76R59A#HV2Uf<SY:[]GluRq’gªÓ¡Ãúª…ÇrYžFu•N–¾c¦Âc›²c‡ª^ †P‹—Tsx3jx2[r7^~CmŒL‚®l‡Çr¬]Yx8f{9ˆ ]€»}³ŒlÎ…?R)KD7efRŒqXtSëuYÕzOð\Î…WhGš³s×ú¥ÿ÷›ãóš¼ô¢¼î®—ù£Ëâ¹Ëø¨¡¢u“´°Ð‹›Îzš¼yž²m½–R±™f­–hp‚Om”Hdy;sp<ZX0m\>Œ‚jŒ™w˜›{­Æt ¨c¿¨ª¯u³yžº}ï©€ÿ˜uófÈ•k¦—|‰›i˜[“{QšQ¢Š]¦m–Ÿa´¢‚­É Ï–¤Ò— Çމ¨xˆ¨hˆ£hÁ¹l¨Ð€sŠbŠX†¦cªÈ„»å‰´äwÊyL}=9E6<ULL†‡ȶÆñº×ñªÌé¢Äñ¾Ÿî”˜`r…^o¥sl©lÅqŽ¿fx§Xy¯X‡’dŠ£h‡¢`ci:VI5`N;~jFy†a‰‹kŒ”t‘ž}z’f\vQqs\m‹SIuIc’]`”_†¤t޳hhšLiK“Œb¥»uׇšç}’Ù_t©Ab†7u„:Ls'=`-R{Jt®pÆd|®ZY‡YNez™vz­hOj6WJ*K@9Vjkc§ˆk¢{lšwr¥v£Žz²„}®r]—XX}X’]tXRˆNVˆNX‰en•x‹hLyLVa:DS8_iD]``o‘ŠšdgkHMeCKcGRhN`wg}Ÿ€¢Ä‡—±aiH`FTj?S`HccRYqOZCQuDWP\‘T]’WQ€QPXVJDlINqIApD:gMHwdR¦gP•\LORrFJg@WqE{vOT@'JA-36)(6%3"!-#-/*1V? ml3c†QM…VAlQY]C:`BBE>;E:6<3).):+=7"L7+E>/'966&$* -& (85AB fJ%OL5a_3aq:sjD`zQXuWolEivFOyN:uTMUF|U-_[3[T@ˆY?^ZC^VIˆWB‚nOkqc\`]WZMcbASwENpL[lEbpEZ_F:l@8R8:I1/D(6<(1: M>(h[(QF4RIRCtR&a‡Ob†ST‰TSŠSDiG>K=6H*@B"QH'`d:/c=>:/H[3]BV9+^s24†W7MM?O&QT.^j9|ƒKR›TOj]:lB7K<BL%lX3LŸGDqOvw;v¢W…µ|Œ²zy˜mpƒKn‹B`\AVAmC,2u]NO1Sk#8q?9P,SL5pg9_‹T:Z>U4=X#+];-9(1:3M%JN)Fc,8h5*B)3<!AG"=N.6@)5B'=L<[$CX+Ad.8\/OX,Vh.bz<W†JArWBb90f1&E)*<*:*78=FT(\a2?‚FE`2HU+Mi(Kv@;e?<?(=R,FI+?M 7F'5B!4L%HT-Ww6Jv;Ne6b{@d™PhTbxAh]9yf4‰RzŒ[ƒpP”a—ÃwäŠZÊ‘U•~>tUA?2FJ3MZ8ssJT¤ZWM3ƒy9V…QkO4MlCEq6PV,‚W4R~DXa3^h4frBH^E`V,ee:_yEY2_ƒ7Gk4@J!VT!qm9uŒIX¯`fm>¡}H޽xvÃx•Y_ŠD`Š>mˆOmzEw“Rp¢Q„˜Z‹©jœ¨mÀj“¥nSfpgEroIo’DgwPhW<}_B›lMÏ`GÔtZ¶¤}·ÙžÙ°¨¥ŒÃ€[š†YŒ€a~|b[k?ºy]¦Î¡¾°xqŒ[]mKUY>b^GjU@lZLYvJV}PacKpkLrb:s{FS|KLP5HN2WI7``?`W5{o9_™J:i+8GFW%d`6^Z7Qf8Zl2esBd™r~›r“¡wP‡MCl3Kn?@`DImBh„GeJ__8dgL®r¥²[¸Éi¸Ëkm›RlRn§Q|žHx˜H¹rgŸY}Z:\—XBW-PY-Oa2pp1|…A¦•RšœL~†7S\+c\5‚ˆPš—[»«}¢›Y6C ^71phQo}c\ƒiWŒuX‹fƒ¡b†“]j|GŸŽY¹½p°»r¼Ò‰Å÷›Éöœ¼àƒÍºtÎÃs›wU®Â~–Í€¼o¤¸r¹Ï’Ìu¯p®Ù€w¸si¨b]gBW]5Z`7a]2¥d6Ê~B›|M†pK€sQʲi´…U°„Q³–cÒ‘xÇŒvž|moh™wr›’n‘–aˆ|Y‰|d»Œlµ‰s«šx‹‡bªqX¤‰b¨œpªµt£aƒ—b|”[³•]ÿÁv«\›…U•¼t¥½u••Vµµ‹­å’pº…R·˜vرŸï ¶Äqª€K’{\±Å“Èí±¥ÎubzOZw]¯yŒÂl•´h’¶d•¾d„¶Wt•V~¢\p…UfXV€\bƒVe‰bt‘t}¤‹®•–» ‘¿Ž†©xt•h‡‹]fxJ€ˆbs¥[p˜]}›SlšDX„8`n4†yAŒŠP¥¤f™²Xwš@a:X+Jg=V+R^Bx…QwŒE_€Tqƒ|´‚n¦|Œªtv‹EWL+>8(?ILt†~y®rr¢f} €y±™ĉƒžuy•aX†nm ƒŒÇ{e­`c…N\Š_x•sˆ•v†Œ`VyLUkG_g?a_\”š´v…„V\qNKmJ=c@Kf_†¶–›Ýˆ‡¸`b™UdgY^Rahš}y´tn«SOy@[mOtkz©uh¡sh¡md—l]jX—s`¨hf¥k[—w½ƒÃjxœM^tKUeDRe@Q]3@7+G>(=>+/;/#8).2'33 A5XR)_e:moBYvMTqENpEJh@DS>1D1)7,83&G7"OB(9E0@C3"C0.'%)#0% @&X@'TK*:6&=;,KJ-LL+kR/bv>GiFeV:~u8ixI5gU>CAbM&US)aW7W]=wSHk[D‚fP’xXuj^_aNXcI`rAZhBewJ^…VQ~QRnFKK=:Q:7E7+G+(4$13C9ZD%eV/G@F|N~ZBaqHifEw‹IiSDŠWCjE9S7<A'PAFT/3Z:A@*MW5fDGG9ZX7O{B:iQ>L5EW+\W0wp9e’IX˜dC~N;YCFO.cl=`™On h¥cŒ±vr–{Yv]Lf=VU(`g$C€BVIE†W94€o>@5HL@w8IY3`j;cHarXGˆI8e:@P)1k1(N?9;&NV*Kh?@h4;W2)G&.97@3B)(6",47;>J J["Hr6=l;K^,Md)Zd3[†E?lMF<*6P'/X'.E& /&#96L['^wBW~F9o@>N$S^"L~?;c:BL(O^;;T8=R)1F$9I CQ(KN*\j6Ja9Vj/a=`z<P<Ge&FH(hZ+XsLQT)li3wY?‰lJ¥‚D®¤V•Þzjì¡f©efhfsQtiP` WDdJ‰k/G‰Pc=+V`0Gh.Me2\p?Mn<Sg5^j4ƒt9M‰RVY6[W4YW/Yk-Tp0@s65Q$LAVa6|c?s«Y]¢\pz=¥xE†½tqŸdc>ct5eb6fX/†o8m’IœY‘ž}‰¥q}–RJj›ex{ImŸ\†—Tr’euiIpY=mN5wQ6’sH }Hÿ‰Tÿ¡]Çÿã·ÿÿ¢þÑ¢Œi„zOy€]·‚oÿ’r±Šešd]a…^ux?wr7™Cjj7œhC_u]X|W_[Cd\1MNA[ACF0\<-S`JJA1SL4\y<<`,/R!INiT*i‚Gj»ge°cq£]Œ¥k‡¼‹ˆÅ‚Å…hí™lí mÇ•tÈ{e¡VpVl²zÂz‚Âgr‡Au‹9w†=fŠC‰Í}à„a‡Dko6•yGj¤Vab;w‚AIp:meE@j;ZG*ry5‹‘MqŒ>Wi7DH5RME[tG^C0£jVWU13N6]]Q‰ˆsµ‡o¡„}£…z§u‹¸mÁtc‰Np™L˜ŽQ¤¥d­ÎnÉÔr»Äl¦Äfºc•Âax·_¥¿xÁy¿nµi¸½u·ÅŽšÔ—£ì¡ˆÛ““ÑvŒ`ieMiQ8YNE`hOk’SbwIboM†…V³©e“W•€h¬•s¾›z㞀̨~Ф†¯¢¸ i’š\¤”_š^½˜_Ú˜dÑc¤rQwlHnkBd\=r\5qc>ojJlwXm‹l‘—j¦˜Y}h™¶t~˜KRjPŠ©”»ÿɳÿÔÁÿÃÃÙˆ›ZprDOnGMmUŽ«‘»ñ¡~­^UO=f}U‘©c’¾fz«[ˆ©WŠšMtz@kŽYŒµdy“gЏ…~¼€x¬wožv}©„Ž»™˜Æ©¨Ìœ¦µ‡š°l„™S€vGon<aU8qjPc~OYc<Ub6_`1Pa,IX+HR&JK"_O*pq2]z5Ie*:X&7N&4F"=C#JZ.KkIt’d¡g‰¨c…š_‰‘VW‚HGc7LhFs…d…µw„Äns¬q¤x›”gl}kbŠg—€q—t“t’¯^c†FW|Tc‰hrŽq}ŠhuŒaX|PWrDTm^o˜’–¹„Š^iv]Sm^KnU>]Y–ƒ´Ü†“¾ff¢fp¦{¹}xµ€q­‚€ªvz£be–MR{L_Y{‡a|Šg‚—t€žst¢y†³}‘³s„¤cošmŠ®}Œ¶ge‘HJf;K[Ele@K`6>:*E<)5?.+6(7=+1F+97)@<%JN(MZ0E_8O^8J]7Ia>=]><T91M46J/8H)GI(CI+DH,CK,.H(2I'.G&1G*=F,YG):M.FB,B;%4C)2F1>9'\V*7c4>D7WL&Tc'=d11K12F2PO0^W4UZ7eZ@ibPƒ_QˆpWok_\fU`pTZPciNqt@d~I`sX_~QVkLLR@>J91H7'A,'6".5>4<1 H1!`S#[t>s†LCxQ\]HouC^„JdpEQxD7xD,P7;A$Ea/1S5<;'ZG=`3E]=NP5VS1@f>AK7CZ+GS.cb-}‡?n°`O˜d@…c_Rn˜W}¢^|°o{‘keS`pRKnA>[;?b,VS&Sr-gtO—eJ.…n*98GC&In9Qd:[i@[v@OoHKi;1`9@P,E^,8qL]dPH^HKg<:k:4R/,K+,98?!.D$'*423C&1D%L=#Pa)K~<HrD=h3b`)WA2{M)73I4<k,%M; - &A/yd,EgAWk57‚<1T)SL A};@_0_P)vsE?zk=T42^99X0?g:IsLX|OL~RXz<OƒFXi=H‚:<k,@Y-_V.?c:HP.\P&aa>QH>[_;tX7§m6¸’T´ÊŒì²c¯ d\P{M<c}Y2M=IA-Ud/Ii1cj7R…DLP9PS,V^.la:fo>W€KFf?KV-Si+Z};C…M/M+E4![W0\Z<€}Ef©_eˆRc…I}>l¦jT›sRY6VX,Ye/u‰9d~C„v=”QxœYmŒLo|Eb„R|ƒR_˜K‡i=ƒ_B^eD`N?QNCoXHV†~K˜‚SÁ‘Tý‡Tÿ¤_ÿ阎¹ˆ”¶¢Žƒ³–l¢‹mß½ ~Ϧ­‡Tuu=jc@ns=cj7]q6wa1zL$€b?WeH[^1cƒ@DfEJO?[S9qsXmN?NT=Ju<@\2:g.Fj+^p.‹€@™§]q?Œ‰\Ždª‚\‰»x³œ^ÌË‹Ýÿ¼¾ÿÇŸì¤nÂn|‘Gš‘GŒ£Mm—?W‘?O~5Wf%k^%µ¯fËuMˆ6cj0i=‡˜CRq?qr?_ŽG~’Jjk1KT.lhDŒƒUhzQ\oMxbHhQ7Q\EXJ>†sVCK6nqN„•mŽ n’Äšƒ¿Œ²‰³{’¿oœ²fv§ZxTtF”]ˆ“i•§_‚©YxEyxHzN—Z£b•€]ŠyUŽŒiŒ°p±Ã~¾ò³Àÿ¶¨íœ´ÙŒ Áx¾©€Šº‡•¡l‡{E¨|R{yY\ƒYr~V¥›]“—jÄŸuÓ£wÍ‚VÊtHÄtMÓ~ZÄ•nºj”šY›˜L›‡J¥Vš€V¾Žc‡~MzkDek7OX3EF/QD1iYI•…ɦ̜n¦~€°…Œ¾„j¥zhÊ›¨ö¹Úÿ¿Þö¼Ïå©“Ò‰e¢kZcf‘jl™o”¶|¸È‹}Áy,R6XVBv”dÎi‹¯W€–@t}:VqEg¦[·jp¤w™¾’”Å•†¯|§}…®”´•¦¸’˜³p’“`¡av=d`8gc8UY0\]?qyVPNFl<F[0WK'FB)>>&4G"8<!ZJ/~z;Yw2Gi-C_&=Y&1Q'9P'EZ0Tg4bY0kV9wf?skDs`?ZY>PoKki~»~ŒË{z³po©d_]X…ji–wl¡wq‘jm”`uVb“FS|L\ƒ^gnnl~‹gh•]U…ANjTx…‡–°ˆ„”le{d[pbVsZNo[cŒl˜¾n‹°`f“[w˜w~§tz©v|¦{~ªmv¤Vl†H`oBVX4RP6WSHk{cuœbu›kw•sˆ¢e}ŽQe‡_|¢g‹§dˆŸS_{INgEdlET^;6>-2</2;+6F(2C+1?',8%,7 =: >F">V/?S5G[5Lb<Hv<;iB1QB0:4/9)+6')/&--$4)-.90"A:$FC+<F/9=+3H+@H%AC%;K(,E-F:'1`59==/@%?:"JM!E`+Ld0Gc8?e;Z[?q]6biB}bT€lZ{k\a\weUm…]UŠaasTbnJckN^eG[~MBgFDL<7J/2J-(C.&0 =.<6"%3,71&JT&cf3l{?\ŠXXƒWYmRdrEL„BY]<Nt7;rDS`=?F0VI29,A:AO'BR1<\:BS5=Y.;H31N-EF,UM)ym9v§Plžak–he–`_qRztCW§V[…^Q†SZqTKi=@`7AT6Ig.eb0‚„F~rZ*fT>C6HR9Hk>=T.NQ(Xd-Ci@EU8Ba-MU2eg6†‹IO`NeIOrPCnN1`4/K./:!7A":'1)C<3G(:C&77P7Vf-NB=vKW_8a>@„P+U@NG+Hj3/b9!JD 3*O:N`&Fa4R`4Kf,<s@TD#@x8Nk6sF(©_.Aƒ_N_?Oo@WtHp{MkŒLb†NU‚E_|@HqDUa1O€6Kp+Ak?Md5JD.FS):f:Y<(MO-Gb?HJ9X@%vX1°pAÁ¤h‰è«|¼ª†‹rN©giiBX‡DYV4dw:W‘G]€LjxGHsS`Z<^d2f_7Zk?u_>T˜h@a@Sm2sw2Y™QAyVHcDQtCF`>hN.ys2i—BfŽ@m‚Q—„Vdº†N†[VhEs‚;a™DSi8„Hz„Vf{W{«jp˜YbuFv‰Jf‰EjoC]lPfnTwxU“nZe—¤d”¶r—ÃsÃy¿{ Kµ€?Ä€;ÿ˜L¯£l¿«‹øÙ½ÿÚ¶††fhlD~tD`q2aY;HS<R6)I?%M\/lr9Xn6Qe*_f8AvCOU>eZFjQ`J5SM2Uh<Ik:Xt6JxENuJflArDXo?zpQk”a~oQ}’X’^º×¡ÒýÅÆüÁ«õ½ì’qÇkÀtk¯_jÅmi«TR«V:Œ@9]#pZ,jm3P`2em8…_sš\ql:rˆHr•Z_‘_L?,H6"g*i8 RGuU@R<pa?`jAmB{©c_«\Œ¥j¥È™¤à©°í¯³ô·­õ»ù¼”óÁ‹Æ”m’i^QHK2ŸRG®¥o„˜IqqIaYe¡`‚®q¹c‰p@N7ƒM>£–j”¨x©gÀ¹¿æ«Þ‘›Íu«¢d¬œ_ÆW§d9ymBƒ‹t€³Žvª€{•pq¬s„Ÿn€ d¢•_•¥m‘Ž^Ÿx[³‰Zš–U¦‡PœŠ_‹£h˜]€“YxIsfEXmL_d?dh>^V9QU7_cXŒ¡Š¨Êœ¸Ê¥ŸÓŸ£ì¥žî ¢â›µêœ¿Ý¢¿ÓŸµß¯²å¿²ä©Ñ“{Ä‚~³~½ƒŒ¸pxeQ¸ zZ¤fQoN}]©²Zs‘:W^&V\4^ZxÄzxºv‰³~£Ä¡È‹ˆ¥my‡cŒ›{Œ±}µ‡y˜WmpH…}Iew;cfAZ`6QM-ZS;geF{…UX‘GV`6JQ.J>0LK/BW6Eo=Dr3\w4ln+H]*DT/A[5@R//A/7836."E6&YD/NI2OD6FX=KhEh„`º„–Ñ|x´n}±eh‹]cˆ[c€WpYmŠ]z§\cOkŠKR†WXŽd]Œkn•rz˜lz‰Wg€EKjEd||’£}j•obbLi_VfZThQi{_’¬fªS_ˆTf^t”fr¤c{£j‰›Xw„QXq5GZ*=> /5 CC/Q]Djƒ[p›am˜`sPcESvGiRv~FhbC`J…xE€KYr< \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/lagrcv/test/pathdef.m b/SD-VBS/common/toolbox/lagrcv/test/pathdef.m
new file mode 100755
index 0000000..7a33e83
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/test/pathdef.m
@@ -0,0 +1,284 @@
1function p = pathdef
2%PATHDEF Search path defaults.
3% PATHDEF returns a string that can be used as input to MATLABPATH
4% in order to set the path.
5
6
7% Copyright 1984-2002 The MathWorks, Inc.
8% $Revision: 1.4.2.1 $ $Date: 2003/01/16 12:51:34 $
9
10
11% DO NOT MODIFY THIS FILE. IT IS AN AUTOGENERATED FILE.
12% EDITING MAY CAUSE THE FILE TO BECOME UNREADABLE TO
13% THE PATHTOOL AND THE INSTALLER.
14
15p = [...
16%%% BEGIN ENTRIES %%%
17 '/u/ikkjin/Benchmark:', ...
18 '/u/ikkjin/Benchmark/viola_jones/src/test:', ...
19 '/u/ikkjin/Benchmark/viola_jones/src/test/distrib:', ...
20 '/u/ikkjin/Benchmark/viola_jones/src/test/src:', ...
21 '/u/ikkjin/Benchmark/Toolbox:', ...
22 '/u/ikkjin/Benchmark/Toolbox/Gang:', ...
23 '/u/ikkjin/Benchmark/Toolbox/MultiNcut:', ...
24 '/u/ikkjin/Benchmark/Toolbox/MultiNcut3D:', ...
25 '/u/ikkjin/Benchmark/Toolbox/QihuiTool:', ...
26 '/u/ikkjin/Benchmark/Toolbox/QihuiTool/NNMF:', ...
27 '/u/ikkjin/Benchmark/Toolbox/QihuiTool/RGB2Lab:', ...
28 '/u/ikkjin/Benchmark/Toolbox/QihuiTool/SIFT_toolbox:', ...
29 '/u/ikkjin/Benchmark/Toolbox/QihuiTool/SIFT_toolbox/images:', ...
30 '/u/ikkjin/Benchmark/Toolbox/ShapeContext:', ...
31 '/u/ikkjin/Benchmark/Toolbox/ShapeContext/lap:', ...
32 '/u/ikkjin/Benchmark/Toolbox/ShapeContext/lap/CVS:', ...
33 '/u/ikkjin/Benchmark/Toolbox/ikkjin:', ...
34 '/u/ikkjin/Benchmark/Toolbox/interContourCutsAffine:', ...
35 '/u/ikkjin/Benchmark/Toolbox/interContourCutsAffine/source:', ...
36 '/u/ikkjin/Benchmark/Toolbox/lagrcv:', ...
37 '/u/ikkjin/Benchmark/Toolbox/lagrcv/test:', ...
38 '/u/ikkjin/Benchmark/Toolbox/lagrcv/test/result:', ...
39 '/u/ikkjin/Benchmark/Toolbox/textons:', ...
40 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic:', ...
41 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/TOOLBOX_calib:', ...
42 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/affine:', ...
43 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/calib:', ...
44 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/calib/TOOLBOX_calib:', ...
45 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/calib_bouguetj:', ...
46 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/calib_bouguetj2:', ...
47 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/common:', ...
48 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/disp:', ...
49 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/fact:', ...
50 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/filter:', ...
51 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/filter_hist:', ...
52 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/filtersQuad:', ...
53 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/io:', ...
54 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/matching:', ...
55 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/matching/pub:', ...
56 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/matching/pub/contrib:', ...
57 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/matching/pub/contrib/v5:', ...
58 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/matching/pub/contrib/v5/optim:', ...
59 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob:', ...
60 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/ncut:', ...
61 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/pyramid:', ...
62 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/stella:', ...
63 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/tars:', ...
64 '/u/ikkjin/Benchmark/Toolbox/toolbox_basic/textons:', ...
65 '/u/ikkjin/Benchmark/color2gray:', ...
66 '/u/ikkjin/Benchmark/color2gray/src:', ...
67 '/u/ikkjin/Benchmark/color2gray/src/TestImages:', ...
68 '/u/ikkjin/Benchmark/color2gray/src/colorspaces:', ...
69 '/u/ikkjin/Benchmark/color2gray/src/helper:', ...
70 '/u/ikkjin/Benchmark/disparity:', ...
71 '/u/ikkjin/Benchmark/disparity/result:', ...
72 '/u/ikkjin/Benchmark/disparity/src:', ...
73 '/u/ikkjin/Benchmark/localization:', ...
74 '/u/ikkjin/Benchmark/localization/result:', ...
75 '/u/ikkjin/Benchmark/localization/src:', ...
76 '/u/ikkjin/Benchmark/registration:', ...
77 '/u/ikkjin/Benchmark/registration/result:', ...
78 '/u/ikkjin/Benchmark/registration/src:', ...
79 '/u/ikkjin/Benchmark/stitch:', ...
80 '/u/ikkjin/Benchmark/stitch/result:', ...
81 '/u/ikkjin/Benchmark/stitch/src:', ...
82 '/u/ikkjin/Benchmark/texture_synthesis:', ...
83 '/u/ikkjin/Benchmark/texture_synthesis/MEX:', ...
84 '/u/ikkjin/Benchmark/tracking:', ...
85 '/u/ikkjin/Benchmark/tracking/result:', ...
86 '/u/ikkjin/Benchmark/tracking/src:', ...
87 '/u/ikkjin/Benchmark/viola_jones:', ...
88 '/u/ikkjin/Benchmark/viola_jones/result:', ...
89 '/u/ikkjin/Benchmark/viola_jones/src:', ...
90 '/u/ikkjin/Benchmark/viola_jones/src/Additional Functions:', ...
91 '/u/ikkjin/Benchmark/viola_jones/src/Code:', ...
92 '/u/ikkjin/Benchmark/viola_jones/src/MatlabFaceDetect Files:', ...
93 matlabroot,'/toolbox/matlab/general:', ...
94 matlabroot,'/toolbox/matlab/ops:', ...
95 matlabroot,'/toolbox/matlab/lang:', ...
96 matlabroot,'/toolbox/matlab/elmat:', ...
97 matlabroot,'/toolbox/matlab/elfun:', ...
98 matlabroot,'/toolbox/matlab/specfun:', ...
99 matlabroot,'/toolbox/matlab/matfun:', ...
100 matlabroot,'/toolbox/matlab/datafun:', ...
101 matlabroot,'/toolbox/matlab/polyfun:', ...
102 matlabroot,'/toolbox/matlab/funfun:', ...
103 matlabroot,'/toolbox/matlab/sparfun:', ...
104 matlabroot,'/toolbox/matlab/scribe:', ...
105 matlabroot,'/toolbox/matlab/graph2d:', ...
106 matlabroot,'/toolbox/matlab/graph3d:', ...
107 matlabroot,'/toolbox/matlab/specgraph:', ...
108 matlabroot,'/toolbox/matlab/graphics:', ...
109 matlabroot,'/toolbox/matlab/uitools:', ...
110 matlabroot,'/toolbox/matlab/strfun:', ...
111 matlabroot,'/toolbox/matlab/imagesci:', ...
112 matlabroot,'/toolbox/matlab/iofun:', ...
113 matlabroot,'/toolbox/matlab/audiovideo:', ...
114 matlabroot,'/toolbox/matlab/timefun:', ...
115 matlabroot,'/toolbox/matlab/datatypes:', ...
116 matlabroot,'/toolbox/matlab/verctrl:', ...
117 matlabroot,'/toolbox/matlab/codetools:', ...
118 matlabroot,'/toolbox/matlab/helptools:', ...
119 matlabroot,'/toolbox/matlab/demos:', ...
120 matlabroot,'/toolbox/matlab/timeseries:', ...
121 matlabroot,'/toolbox/matlab/hds:', ...
122 matlabroot,'/toolbox/matlab/guide:', ...
123 matlabroot,'/toolbox/matlab/plottools:', ...
124 matlabroot,'/toolbox/local:', ...
125 matlabroot,'/toolbox/shared/controllib:', ...
126 matlabroot,'/toolbox/simulink/simulink:', ...
127 matlabroot,'/toolbox/simulink/blocks:', ...
128 matlabroot,'/toolbox/simulink/components:', ...
129 matlabroot,'/toolbox/simulink/fixedandfloat:', ...
130 matlabroot,'/toolbox/simulink/fixedandfloat/fxpdemos:', ...
131 matlabroot,'/toolbox/simulink/fixedandfloat/obsolete:', ...
132 matlabroot,'/toolbox/simulink/simdemos:', ...
133 matlabroot,'/toolbox/simulink/simdemos/aerospace:', ...
134 matlabroot,'/toolbox/simulink/simdemos/automotive:', ...
135 matlabroot,'/toolbox/simulink/simdemos/simfeatures:', ...
136 matlabroot,'/toolbox/simulink/simdemos/simgeneral:', ...
137 matlabroot,'/toolbox/simulink/dee:', ...
138 matlabroot,'/toolbox/shared/dastudio:', ...
139 matlabroot,'/toolbox/shared/glue:', ...
140 matlabroot,'/toolbox/stateflow/stateflow:', ...
141 matlabroot,'/toolbox/rtw/rtw:', ...
142 matlabroot,'/toolbox/simulink/simulink/modeladvisor:', ...
143 matlabroot,'/toolbox/simulink/simulink/modeladvisor/fixpt:', ...
144 matlabroot,'/toolbox/simulink/simulink/MPlayIO:', ...
145 matlabroot,'/toolbox/simulink/simulink/dataobjectwizard:', ...
146 matlabroot,'/toolbox/shared/fixedpointlib:', ...
147 matlabroot,'/toolbox/simulink/dataimportexport:', ...
148 matlabroot,'/toolbox/shared/hdlshared:', ...
149 matlabroot,'/toolbox/rtw/rtwdemos:', ...
150 matlabroot,'/toolbox/rtw/rtwdemos/rsimdemos:', ...
151 matlabroot,'/toolbox/rtw/targets/asap2/asap2:', ...
152 matlabroot,'/toolbox/rtw/targets/asap2/asap2/user:', ...
153 matlabroot,'/toolbox/rtw/targets/common/can/blocks:', ...
154 matlabroot,'/toolbox/rtw/targets/common/configuration/resource:', ...
155 matlabroot,'/toolbox/rtw/targets/common/tgtcommon:', ...
156 matlabroot,'/toolbox/stateflow/sfdemos:', ...
157 matlabroot,'/toolbox/stateflow/coder:', ...
158 matlabroot,'/toolbox/bioinfo/bioinfo:', ...
159 matlabroot,'/toolbox/bioinfo/biolearning:', ...
160 matlabroot,'/toolbox/bioinfo/microarray:', ...
161 matlabroot,'/toolbox/bioinfo/mass_spec:', ...
162 matlabroot,'/toolbox/bioinfo/proteins:', ...
163 matlabroot,'/toolbox/bioinfo/biomatrices:', ...
164 matlabroot,'/toolbox/bioinfo/biodemos:', ...
165 matlabroot,'/toolbox/bioinfo/graphtheory:', ...
166 matlabroot,'/toolbox/commblks/commblks:', ...
167 matlabroot,'/toolbox/commblks/commmasks:', ...
168 matlabroot,'/toolbox/commblks/commmex:', ...
169 matlabroot,'/toolbox/commblks/commblksdemos:', ...
170 matlabroot,'/toolbox/commblks/commblksobsolete/v3:', ...
171 matlabroot,'/toolbox/commblks/commblksobsolete/v2p5:', ...
172 matlabroot,'/toolbox/commblks/commblksobsolete/v2:', ...
173 matlabroot,'/toolbox/comm/comm:', ...
174 matlabroot,'/toolbox/comm/commdemos:', ...
175 matlabroot,'/toolbox/comm/commdemos/commdocdemos:', ...
176 matlabroot,'/toolbox/comm/commobsolete:', ...
177 matlabroot,'/toolbox/compiler:', ...
178 matlabroot,'/toolbox/control/control:', ...
179 matlabroot,'/toolbox/control/ctrlguis:', ...
180 matlabroot,'/toolbox/control/ctrlobsolete:', ...
181 matlabroot,'/toolbox/control/ctrlutil:', ...
182 matlabroot,'/toolbox/control/ctrldemos:', ...
183 matlabroot,'/toolbox/shared/slcontrollib:', ...
184 matlabroot,'/toolbox/curvefit/curvefit:', ...
185 matlabroot,'/toolbox/curvefit/cftoolgui:', ...
186 matlabroot,'/toolbox/shared/optimlib:', ...
187 matlabroot,'/toolbox/dspblks/dspblks:', ...
188 matlabroot,'/toolbox/dspblks/dspmasks:', ...
189 matlabroot,'/toolbox/dspblks/dspmex:', ...
190 matlabroot,'/toolbox/dspblks/dspdemos:', ...
191 matlabroot,'/toolbox/shared/filterdesignlib:', ...
192 matlabroot,'/toolbox/rtw/targets/ecoder:', ...
193 matlabroot,'/toolbox/rtw/targets/ecoder/ecoderdemos:', ...
194 matlabroot,'/toolbox/rtw/targets/mpt:', ...
195 matlabroot,'/toolbox/rtw/targets/mpt/mpt:', ...
196 matlabroot,'/toolbox/rtw/targets/mpt/user_specific:', ...
197 matlabroot,'/toolbox/fixedpoint/fixedpoint:', ...
198 matlabroot,'/toolbox/fixedpoint/fidemos:', ...
199 matlabroot,'/toolbox/fixedpoint/fimex:', ...
200 matlabroot,'/toolbox/fixpoint:', ...
201 matlabroot,'/toolbox/gads:', ...
202 matlabroot,'/toolbox/gads/gads:', ...
203 matlabroot,'/toolbox/gads/gadsdemos:', ...
204 matlabroot,'/toolbox/ident/ident:', ...
205 matlabroot,'/toolbox/ident/idobsolete:', ...
206 matlabroot,'/toolbox/ident/idguis:', ...
207 matlabroot,'/toolbox/ident/idutils:', ...
208 matlabroot,'/toolbox/ident/iddemos:', ...
209 matlabroot,'/toolbox/ident/idhelp:', ...
210 matlabroot,'/toolbox/images/images:', ...
211 matlabroot,'/toolbox/images/imuitools:', ...
212 matlabroot,'/toolbox/images/imdemos:', ...
213 matlabroot,'/toolbox/images/iptutils:', ...
214 matlabroot,'/toolbox/shared/imageslib:', ...
215 matlabroot,'/toolbox/images/medformats:', ...
216 matlabroot,'/toolbox/instrument/instrument:', ...
217 matlabroot,'/toolbox/instrument/instrumentdemos:', ...
218 matlabroot,'/toolbox/map/map:', ...
219 matlabroot,'/toolbox/map/mapdemos:', ...
220 matlabroot,'/toolbox/map/mapdisp:', ...
221 matlabroot,'/toolbox/map/mapformats:', ...
222 matlabroot,'/toolbox/map/mapproj:', ...
223 matlabroot,'/toolbox/shared/mapgeodesy:', ...
224 matlabroot,'/toolbox/slvnv/simcoverage:', ...
225 matlabroot,'/toolbox/nnet:', ...
226 matlabroot,'/toolbox/nnet/nncontrol:', ...
227 matlabroot,'/toolbox/nnet/nndemos:', ...
228 matlabroot,'/toolbox/nnet/nnet:', ...
229 matlabroot,'/toolbox/nnet/nnet/nnanalyze:', ...
230 matlabroot,'/toolbox/nnet/nnet/nncustom:', ...
231 matlabroot,'/toolbox/nnet/nnet/nndistance:', ...
232 matlabroot,'/toolbox/nnet/nnet/nnformat:', ...
233 matlabroot,'/toolbox/nnet/nnet/nninit:', ...
234 matlabroot,'/toolbox/nnet/nnet/nnlearn:', ...
235 matlabroot,'/toolbox/nnet/nnet/nnnetinput:', ...
236 matlabroot,'/toolbox/nnet/nnet/nnnetwork:', ...
237 matlabroot,'/toolbox/nnet/nnet/nnperformance:', ...
238 matlabroot,'/toolbox/nnet/nnet/nnplot:', ...
239 matlabroot,'/toolbox/nnet/nnet/nnprocess:', ...
240 matlabroot,'/toolbox/nnet/nnet/nnsearch:', ...
241 matlabroot,'/toolbox/nnet/nnet/nntopology:', ...
242 matlabroot,'/toolbox/nnet/nnet/nntrain:', ...
243 matlabroot,'/toolbox/nnet/nnet/nntransfer:', ...
244 matlabroot,'/toolbox/nnet/nnet/nnweight:', ...
245 matlabroot,'/toolbox/nnet/nnguis:', ...
246 matlabroot,'/toolbox/nnet/nnguis/nftool:', ...
247 matlabroot,'/toolbox/nnet/nnguis/nntool:', ...
248 matlabroot,'/toolbox/nnet/nnobsolete:', ...
249 matlabroot,'/toolbox/nnet/nnresource:', ...
250 matlabroot,'/toolbox/nnet/nnutils:', ...
251 matlabroot,'/toolbox/optim:', ...
252 matlabroot,'/toolbox/pde:', ...
253 matlabroot,'/toolbox/robust/robust:', ...
254 matlabroot,'/toolbox/robust/rctlmi:', ...
255 matlabroot,'/toolbox/robust/rctutil:', ...
256 matlabroot,'/toolbox/robust/rctdemos:', ...
257 matlabroot,'/toolbox/robust/rctobsolete/robust:', ...
258 matlabroot,'/toolbox/robust/rctobsolete/lmi:', ...
259 matlabroot,'/toolbox/robust/rctobsolete/mutools/commands:', ...
260 matlabroot,'/toolbox/robust/rctobsolete/mutools/subs:', ...
261 matlabroot,'/toolbox/signal/signal:', ...
262 matlabroot,'/toolbox/signal/sigtools:', ...
263 matlabroot,'/toolbox/signal/sptoolgui:', ...
264 matlabroot,'/toolbox/signal/sigdemos:', ...
265 matlabroot,'/toolbox/shared/spcuilib:', ...
266 matlabroot,'/toolbox/slcontrol/slcontrol:', ...
267 matlabroot,'/toolbox/slcontrol/slctrlguis:', ...
268 matlabroot,'/toolbox/slcontrol/slctrlutil:', ...
269 matlabroot,'/toolbox/slcontrol/slctrldemos:', ...
270 matlabroot,'/toolbox/splines:', ...
271 matlabroot,'/toolbox/stats:', ...
272 matlabroot,'/toolbox/vipblks/vipblks:', ...
273 matlabroot,'/toolbox/vipblks/vipmasks:', ...
274 matlabroot,'/toolbox/vipblks/vipmex:', ...
275 matlabroot,'/toolbox/vipblks/vipdemos:', ...
276 matlabroot,'/toolbox/wavelet/wavelet:', ...
277 matlabroot,'/toolbox/wavelet/wmultisig1d:', ...
278 matlabroot,'/toolbox/wavelet/wavedemo:', ...
279 matlabroot,'/work:', ...
280%%% END ENTRIES %%%
281 ...
282];
283
284p = [userpath,p];
diff --git a/SD-VBS/common/toolbox/lagrcv/test/test_lk.m b/SD-VBS/common/toolbox/lagrcv/test/test_lk.m
new file mode 100755
index 0000000..c6ca701
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/test/test_lk.m
@@ -0,0 +1,74 @@
1addpath ~/Matlab/Toolbox/lagrcv/
2addpath ~/Matlab/Toolbox/toolbox_basic/filter
3addpath ~/Matlab/Toolbox/ikkjin/
4
5N_FEA=1600;
6WINSZ=8; %size of sum-up window
7NO_PYR=2;
8SUPPRESION_RADIUS=10;
9LK_ITER=20;
10IMAGE_DIR='~/backup/Research/ant/Transport/'
11filelist=dir(fullfile(IMAGE_DIR, '*.jpg'));
12flen=length(filelist);
13
14img_idx_cur=[1:flen];
15
16%subplot(1,2,1);imshow(Iprev)
17%/hold on
18%//scatter(features(2,:),features(1,:),'r')
19%%
20imgName=fullfile(IMAGE_DIR,filelist(img_idx_cur(1)).name);
21Icur=imread(imgName);
22Icur=rgb2gray(Icur);
23Icur=calcImgBlurMex(double(Icur));
24%%
25
26Jpyr=getPyramid(Icur, 2);
27
28[lambda tr det c_xx c_xy c_yy] =calcTextureMex(double(Icur), WINSZ);
29imgsz=size(lambda);
30lambda([1:8 end-8:end],:)=0;
31lambda(:,[1:8 end-8:end])=0;
32[temp idx]=sort(lambda(:), 'descend');
33
34%%
35featureIdx=idx(1:N_FEA);
36features=zeros(3, N_FEA);
37features(1,:)=ceil(featureIdx/imgsz(1));
38features(2,:)=featureIdx'-(features(1,:)-1)*imgsz(1);
39features(3,:)=lambda(featureIdx);
40
41imagesc(lambda); hold on
42scatter(features(1,:), features(2,:), 'r+');hold off
43%%
44interestPnt=getANMS(features(1,:)', features(2,:)', features(3,:)', SUPPRESION_RADIUS);
45interestPnt=interestPnt';
46scatter(interestPnt(1,:), interestPnt(2,:), 'g+')
47%%
48features=interestPnt(1:2,:);
49%%
50
51for iter=img_idx_cur
52 Iprev=Icur;
53 Icur=imread(fullfile(IMAGE_DIR,filelist(img_idx_cur(iter)).name));
54 Icur=rgb2gray(Icur);
55 Icur=calcImgBlurMex(double(Icur));
56
57 Ipyr=Jpyr;
58 Jpyr=getPyramid(Icur, 2);
59
60 [dxPyr dyPyr]=calcSobelPyrMex(Ipyr,2);
61
62 [lambda tr det c_xx c_xy c_yy] = calcTexturePyrMex(dxPyr, dyPyr, WINSZ, NO_PYR);
63
64 [newpoints status]=calcOptFlowLKPyrMex(Ipyr, dxPyr, dyPyr, Jpyr, double(features), 4, 0.03, LK_ITER, c_xx, c_xy, c_yy);
65
66 newpoints=newpoints(:,find(status));
67 figure(1);
68 imagesc(Icur);colormap gray
69 hold on;scatter(newpoints(1,:), newpoints(2,:), 'r+'); hold off;
70 drawnow
71 %print('-djpeg', sprintf('result/result_%03d', iter))
72 %pause
73 features=newpoints;
74end
diff --git a/SD-VBS/common/toolbox/lagrcv/test/test_lk_disp.m b/SD-VBS/common/toolbox/lagrcv/test/test_lk_disp.m
new file mode 100755
index 0000000..2d55fe3
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/test/test_lk_disp.m
@@ -0,0 +1,49 @@
1addpath /u/ikkjin/Matlab/Toolbox/lagrcv
2
3%Iprev=imread('/Projects/LAGR/logs/Test5/left_APIrun530-1/l24Aug05-abacination-1124876208.403311.ppm');
4%Icur=imread('/Projects/LAGR/logs/Test5/left_APIrun530-1/l24Aug05-abacination-1124876208.670013.ppm');
5Iprev=imread('img0.ppm');
6Icur=imread('img1.ppm');
7
8Iprev=rgb2gray(Iprev);
9Icur=rgb2gray(Icur);
10
11tic
12 [ features numvalid ] = goodFeaturesToTrack(Iprev, 0.3, 10);
13toc
14subplot(1,2,1);imshow(Iprev)
15hold on
16scatter(features(2,:),features(1,:),'r')
17
18Ipyr=getPyramid(Iprev, 3);
19Jpyr=getPyramid(Icur, 3);
20tic
21[dxPyr2 dyPyr2]=calcGradientPyrMex(Ipyr,3);
22toc
23tic
24[dxPyr dyPyr]=calcSobelPyrMex(Ipyr,3);
25toc
26
27features=features(:,1:211);
28for i=20
29 features2=[features(2,:); features(1,:)];
30tic
31 [ newpoints status pyr1 ] = calcOpticalFlowPyrLK(Iprev,Icur,features, i);
32toc
33tic
34 [newpoints2 status]=calcOptFlowLKPyrMex(Ipyr, dxPyr, dyPyr, Jpyr, double(features2), 4, 0.03, i);
35toc
36 newpoints2=[newpoints2(2,:); newpoints2(1,:)];
37features_out=features(:,find(status));
38newpoints=newpoints(:,find(status));
39newpoints2=newpoints2(:,find(status));
40subplot(1,2,1);imshow(Iprev);hold on
41quiver(features_out(2,:),features_out(1,:), newpoints(2,:)-features_out(2,:), newpoints(1,:)-features_out(1,:),0,'r');hold off
42subplot(1,2,2);imshow(Iprev);hold on
43quiver(features_out(2,:),features_out(1,:), newpoints2(2,:)-features_out(2,:), newpoints2(1,:)-features_out(1,:),0,'r');hold off
44%subplot(1,2,2);imshow(Icur);hold on
45%scatter(newpoints2(2,:),newpoints2(1,:),'r');hold off
46%sum(sum((newpoints-newpoints2).^2))
47
48pause
49end
diff --git a/SD-VBS/common/toolbox/lagrcv/test/test_lk_opencv.m b/SD-VBS/common/toolbox/lagrcv/test/test_lk_opencv.m
new file mode 100755
index 0000000..9cfd1ae
--- /dev/null
+++ b/SD-VBS/common/toolbox/lagrcv/test/test_lk_opencv.m
@@ -0,0 +1,47 @@
1addpath ~/Matlab/Toolbox/lagrcv/
2addpath ~/Matlab/Toolbox/toolbox_basic/filter
3addpath ~/Matlab/Toolbox/ikkjin/
4
5IMAGE_DIR='/data/insecure/images/ants/Transport/'
6filelist=dir(fullfile(IMAGE_DIR, '*.jpg'));
7flen=length(filelist);
8
9img_idx_cur=[1:flen];
10
11%subplot(1,2,1);imshow(Iprev)
12%/hold on
13%//scatter(features(2,:),features(1,:),'r')
14%Iprev=imread(fullfile(IMAGE_DIR,filelist(img_idx_prev(1)).name));
15%%
16imgName=fullfile(IMAGE_DIR,filelist(img_idx_cur(1)).name);
17Icur=imread(imgName);
18%%
19Icur=smooth(double(rgb2gray(Icur)), 4);
20%%
21Icur=Icur(1:2:end,1:2:end);
22
23[ features numvalid ] = goodFeaturesToTrack(Icur, 0.3, 10);
24features=features(:,1:numvalid);
25
26figure(1);
27imagesc(Icur);colormap gray
28hold on;scatter(features(2,:), features(1,:), 'r+'); hold off;
29
30%%
31for iter=img_idx_cur
32 Iprev=Icur;
33 Icur=imread(fullfile(IMAGE_DIR,filelist(img_idx_cur(iter)).name));
34 Icur=calcImgBlurMex(rgb2gray(Icur));
35
36 tic
37 [ newpoints status pyr1 ] = calcOpticalFlowPyrLK(Iprev,Icur,features);
38 toc
39 newpoints=newpoints(:,find(status));
40 figure(1);
41 imagesc(Icur);colormap gray
42 hold on;scatter(newpoints(2,:), newpoints(1,:), 'r+'); hold off;
43 drawnow
44 print('-djpeg', sprintf('result/result_%03d', iter))
45 %pause
46 features=newpoints;
47end
diff --git a/SD-VBS/common/toolbox/mex_template.c b/SD-VBS/common/toolbox/mex_template.c
new file mode 100755
index 0000000..b85683f
--- /dev/null
+++ b/SD-VBS/common/toolbox/mex_template.c
@@ -0,0 +1,58 @@
1//function W = mex_template(X,Y);
2
3#include <math.h>
4#include <mex.h>
5//#include <matrix.h>
6//#include "mex_util.cpp"
7
8//#define PI 3.1415927
9
10void mexFunction(int nargout, mxArray *out[], int nargin, const mxArray
11*in[]) {
12 //reading in
13 const mxArray *X = in[0];
14 double *pr = mxGetPr(X);
15 int *ir = mxGetIr(X);
16 int *jc = mxGetJc(X);
17 int m = mxGetM(X);
18 int n = mxGetN(X);
19
20 mxArray *cell_1 = mxGetCell(cell_input,0);
21 mxGetData()
22 mxGetNumberOfDimensions()
23 mxGetDimensions()
24 mxGetNumberOfElements()
25
26 //sparse array reading
27 int i,j,k;
28 double x;
29 for (j=0;j<n;j++)
30 for (k=jc[j]; k!=jc[j+1]; k++) {
31 i = ir[k];
32 x = pr[k];
33 //x = X(i,j);
34 }
35
36 //printing variables & debugging
37 int nnz = jc[n];
38 mexPrintf("nnz = %d\n",nnz);
39 double z = 0.15;
40 mexPrintf("z = %1.3g \n",z);
41 mexErrMsgTxt("Stopped\n");
42
43 //common functions
44 fabs(x) // absolute value of float x
45
46 //writing out
47 mxArray *W = mxCreateSparse(m, n, nnz, mxREAL);
48
49
50 mxArray *args[2];
51 args[0] = (mxArray*) prhs[0];
52 args[1] = mxCreateDoubleScalar(2.0);
53 mexCallMATLAB(1, plhs, 2, args, "sum");
54
55 //allocating, desallocating
56 int *ind = (int*)mxCalloc(n,sizeof(int));
57 mxFree(ind);
58} \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/Distor2Calib.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/Distor2Calib.m
new file mode 100755
index 0000000..a82f583
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/Distor2Calib.m
@@ -0,0 +1,391 @@
1function [fc_2,Rc_2,Tc_2,H_2,distance,V_vert,V_hori,x_all_c,V_hori_pix,V_vert_pix,V_diag1_pix,V_diag2_pix]=Distor2Calib(k_dist,grid_pts_centered,n_sq_x,n_sq_y,Np,W,L,Xgrid_2,f_ini,N_iter,two_focal);
2
3% Computes the calibration parameters knowing the
4% distortion factor k_dist
5
6% grid_pts_centered are the grid point coordinates after substraction of
7% the optical center.
8
9% can give an optional guess for the focal length f_ini (can set to [])
10% can provide the number of iterations for the Iterative Vanishing Point Algorithm
11
12% if the focal length is known perfectly, then, there is no need to iterate,
13% and therefore, one can fix: N_iter = 0;
14
15% California Institute of Technology
16% (c) Jean-Yves Bouguet - October 7th, 1997
17
18
19
20%keyboard;
21
22if exist('two_focal'),
23 if isempty(two_focal),
24 two_focal=0;
25 end;
26else
27 two_focal = 0;
28end;
29
30
31if exist('N_iter'),
32 if ~isempty(N_iter),
33 disp('Use number of iterations provided');
34 else
35 N_iter = 10;
36 end;
37else
38 N_iter = 10;
39end;
40
41if exist('f_ini'),
42 if ~isempty(f_ini),
43 disp('Use focal provided');
44 if length(f_ini)<2, f_ini=[f_ini;f_ini]; end;
45 fc_2 = f_ini;
46 x_all_c = [grid_pts_centered(1,:)/fc_2(1);grid_pts_centered(2,:)/fc_2(2)];
47 x_all_c = comp_distortion(x_all_c,k_dist); % we can this time!!!
48 else
49 fc_2 = [1;1];
50 x_all_c = grid_pts_centered;
51 end;
52else
53 fc_2 = [1;1];
54 x_all_c = grid_pts_centered;
55end;
56
57
58dX = W/n_sq_x;
59dY = L/n_sq_y;
60
61
62N_x = n_sq_x+1;
63N_y = n_sq_y+1;
64
65
66x_grid = zeros(N_x,N_y);
67y_grid = zeros(N_x,N_y);
68
69
70
71
72
73%%% Computation of the four vanishing points in pixels
74
75
76 x_grid(:) = grid_pts_centered(1,:);
77 y_grid(:) = grid_pts_centered(2,:);
78
79 for k=1:n_sq_x+1,
80 [U,S,V] = svd([x_grid(k,:);y_grid(k,:);ones(1,n_sq_y+1)]);
81 vert(:,k) = U(:,3);
82 end;
83
84 for k=1:n_sq_y+1,
85 [U,S,V] = svd([x_grid(:,k)';y_grid(:,k)';ones(1,n_sq_x+1)]);
86 hori(:,k) = U(:,3);
87 end;
88
89 % 2 principle Vanishing points:
90 [U,S,V] = svd(vert);
91 V_vert = U(:,3);
92 [U,S,V] = svd(hori);
93 V_hori = U(:,3);
94
95
96
97 % Square warping:
98
99
100 vert_first = vert(:,1) - dot(V_vert,vert(:,1))/dot(V_vert,V_vert) * V_vert;
101 vert_last = vert(:,n_sq_x+1) - dot(V_vert,vert(:,n_sq_x+1))/dot(V_vert,V_vert) * V_vert;
102
103 hori_first = hori(:,1) - dot(V_hori,hori(:,1))/dot(V_hori,V_hori) * V_hori;
104 hori_last = hori(:,n_sq_y+1) - dot(V_hori,hori(:,n_sq_y+1))/dot(V_hori,V_hori) * V_hori;
105
106
107 x1 = cross(hori_first,vert_first);
108 x2 = cross(hori_first,vert_last);
109 x3 = cross(hori_last,vert_last);
110 x4 = cross(hori_last,vert_first);
111
112 x1 = x1/x1(3);
113 x2 = x2/x2(3);
114 x3 = x3/x3(3);
115 x4 = x4/x4(3);
116
117
118
119 [square] = Rectangle2Square([x1 x2 x3 x4],W,L);
120
121 y1 = square(:,1);
122 y2 = square(:,2);
123 y3 = square(:,3);
124 y4 = square(:,4);
125
126 H2 = cross(V_vert,V_hori);
127
128 V_diag1 = cross(cross(y1,y3),H2);
129 V_diag2 = cross(cross(y2,y4),H2);
130
131 V_diag1 = V_diag1 / norm(V_diag1);
132 V_diag2 = V_diag2 / norm(V_diag2);
133
134 V_hori_pix = V_hori;
135 V_vert_pix = V_vert;
136 V_diag1_pix = V_diag1;
137 V_diag2_pix = V_diag2;
138
139
140% end of computation of the vanishing points in pixels.
141
142
143
144
145
146
147
148
149if two_focal, % only if we attempt to estimate two focals...
150 % Use diagonal lines also to add two extra vanishing points (?)
151 N_min = min(N_x,N_y);
152
153 if N_min < 2,
154 use_diag = 0;
155 two_focal = 0;
156 disp('Cannot estimate two focals (no existing diagonals)');
157 else
158 use_diag = 1;
159 Delta_N = abs(N_x-N_y);
160 N_extra = round((N_min - Delta_N - 1)/2);
161 diag_list = -N_extra:Delta_N+N_extra;
162 N_diag = length(diag_list);
163 diag_1 = zeros(3,N_diag);
164 diag_2 = zeros(3,N_diag);
165 end;
166else
167 % Give up the use of the diagonals (so far)
168 % it seems that the error is increased
169 use_diag = 0;
170end;
171
172
173
174% The vertical lines: vert, Horizontal lines: hori
175vert = zeros(3,n_sq_x+1);
176hori = zeros(3,n_sq_y+1);
177
178for counter_k = 1:N_iter, % the Iterative Vanishing Points Algorithm to
179 % estimate the focal length accurately
180
181 x_grid(:) = x_all_c(1,:);
182 y_grid(:) = x_all_c(2,:);
183
184 for k=1:n_sq_x+1,
185 [U,S,V] = svd([x_grid(k,:);y_grid(k,:);ones(1,n_sq_y+1)]);
186 vert(:,k) = U(:,3);
187 end;
188
189 for k=1:n_sq_y+1,
190 [U,S,V] = svd([x_grid(:,k)';y_grid(:,k)';ones(1,n_sq_x+1)]);
191 hori(:,k) = U(:,3);
192 end;
193
194 % 2 principle Vanishing points:
195 [U,S,V] = svd(vert);
196 V_vert = U(:,3);
197 [U,S,V] = svd(hori);
198 V_hori = U(:,3);
199
200
201
202 % Square warping:
203
204
205 vert_first = vert(:,1) - dot(V_vert,vert(:,1))/dot(V_vert,V_vert) * V_vert;
206 vert_last = vert(:,n_sq_x+1) - dot(V_vert,vert(:,n_sq_x+1))/dot(V_vert,V_vert) * V_vert;
207
208 hori_first = hori(:,1) - dot(V_hori,hori(:,1))/dot(V_hori,V_hori) * V_hori;
209 hori_last = hori(:,n_sq_y+1) - dot(V_hori,hori(:,n_sq_y+1))/dot(V_hori,V_hori) * V_hori;
210
211
212 x1 = cross(hori_first,vert_first);
213 x2 = cross(hori_first,vert_last);
214 x3 = cross(hori_last,vert_last);
215 x4 = cross(hori_last,vert_first);
216
217 x1 = x1/x1(3);
218 x2 = x2/x2(3);
219 x3 = x3/x3(3);
220 x4 = x4/x4(3);
221
222
223
224 [square] = Rectangle2Square([x1 x2 x3 x4],W,L);
225
226 y1 = square(:,1);
227 y2 = square(:,2);
228 y3 = square(:,3);
229 y4 = square(:,4);
230
231 H2 = cross(V_vert,V_hori);
232
233 V_diag1 = cross(cross(y1,y3),H2);
234 V_diag2 = cross(cross(y2,y4),H2);
235
236 V_diag1 = V_diag1 / norm(V_diag1);
237 V_diag2 = V_diag2 / norm(V_diag2);
238
239
240
241
242 % Estimation of the focal length, and normalization:
243
244 % Compute the ellipsis of (1/f^2) positions:
245 % a * (1/fx)^2 + b * (1/fx)^2 = -c
246
247
248 a1 = V_hori(1);
249 b1 = V_hori(2);
250 c1 = V_hori(3);
251
252 a2 = V_vert(1);
253 b2 = V_vert(2);
254 c2 = V_vert(3);
255
256 a3 = V_diag1(1);
257 b3 = V_diag1(2);
258 c3 = V_diag1(3);
259
260 a4 = V_diag2(1);
261 b4 = V_diag2(2);
262 c4 = V_diag2(3);
263
264
265 if two_focal,
266
267
268 A = [a1*a2 b1*b2;a3*a4 b3*b4];
269 b = -[c1*c2;c3*c4];
270
271 f = sqrt(abs(1./(inv(A)*b)));
272
273 else
274
275 f = sqrt(abs(-(c1*c2*(a1*a2 + b1*b2) + c3*c4*(a3*a4 + b3*b4))/(c1^2*c2^2 + c3^2*c4^2)));
276
277 f = [f;f];
278
279 end;
280
281
282
283 % REMARK:
284 % if both a and b are small, the calibration is impossible.
285 % if one of them is small, only the other focal length is observable
286 % if none is small, both focals are observable
287
288
289 fc_2 = fc_2 .* f;
290
291
292 % DEBUG PART: fix focal to 500...
293 %fc_2= [500;500]; disp('Line 293 to be earased in Distor2Calib.m');
294
295
296 % end of focal compensation
297
298 % normalize by the current focal:
299
300 x_all = [grid_pts_centered(1,:)/fc_2(1);grid_pts_centered(2,:)/fc_2(2)];
301
302 % Compensate by the distortion factor:
303
304 x_all_c = comp_distortion(x_all,k_dist);
305
306end;
307
308% At that point, we hope that the distortion is gone...
309
310x_grid(:) = x_all_c(1,:);
311y_grid(:) = x_all_c(2,:);
312
313for k=1:n_sq_x+1,
314 [U,S,V] = svd([x_grid(k,:);y_grid(k,:);ones(1,n_sq_y+1)]);
315 vert(:,k) = U(:,3);
316end;
317
318for k=1:n_sq_y+1,
319 [U,S,V] = svd([x_grid(:,k)';y_grid(:,k)';ones(1,n_sq_x+1)]);
320 hori(:,k) = U(:,3);
321end;
322
323% Vanishing points:
324[U,S,V] = svd(vert);
325V_vert = U(:,3);
326[U,S,V] = svd(hori);
327V_hori = U(:,3);
328
329% Horizon:
330
331H_2 = cross(V_vert,V_hori);
332
333% H_2 = cross(V_vert,V_hori);
334
335% pick a plane in front of the camera (positive depth)
336if H_2(3) < 0, H_2 = -H_2; end;
337
338
339% Rotation matrix:
340
341if V_hori(1) < 0, V_hori = -V_hori; end;
342
343V_hori = V_hori/norm(V_hori);
344H_2 = H_2/norm(H_2);
345
346V_hori = V_hori - dot(V_hori,H_2)*H_2;
347
348Rc_2 = [V_hori cross(H_2,V_hori) H_2];
349
350Rc_2 = Rc_2 / det(Rc_2);
351
352%omc_2 = rodrigues(Rc_2);
353
354%Rc_2 = rodrigues(omc_2);
355
356% Find the distance of the plane for translation vector:
357
358xc_2 = [x_all_c;ones(1,Np)];
359
360Zc_2 = 1./sum(xc_2 .* (Rc_2(:,3)*ones(1,Np)));
361
362Xo_2 = [sum(xc_2 .* (Rc_2(:,1)*ones(1,Np))).*Zc_2 ; sum(xc_2 .* (Rc_2(:,2)*ones(1,Np))).*Zc_2];
363
364XXo_2 = Xo_2 - mean(Xo_2')'*ones(1,Np);
365
366distance_x = norm(Xgrid_2(1,:))/norm(XXo_2(1,:));
367distance_y = norm(Xgrid_2(2,:))/norm(XXo_2(2,:));
368
369
370distance = sum(sum(XXo_2(1:2,:).*Xgrid_2(1:2,:)))/sum(sum(XXo_2(1:2,:).^2));
371
372alpha = abs(distance_x - distance_y)/distance;
373
374if (alpha>0.1)&~two_focal,
375 disp('Should use two focals in x and y...');
376end;
377
378% Deduce the translation vector:
379
380Tc_2 = distance * H_2;
381
382
383
384
385
386return;
387
388 V_hori_pix/V_hori_pix(3)
389 V_vert_pix/V_vert_pix(3)
390 V_diag1_pix/V_diag1_pix(3)
391 V_diag2_pix/V_diag2_pix(3)
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/Rectangle2Square.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/Rectangle2Square.m
new file mode 100755
index 0000000..a6bbbe5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/Rectangle2Square.m
@@ -0,0 +1,19 @@
1function [square] = Rectangle2Square(rectangle,L,W);
2
3% Generate the square from a rectangle of known segment lengths
4% from pt1 to pt2 : L
5% from pt2 to pt3 : W
6
7[u_hori,u_vert] = UnWarpPlane(rectangle);
8
9coeff_x = sqrt(W/L);
10coeff_y = 1/coeff_x;
11
12x_coord = [ 0 coeff_x coeff_x 0];
13y_coord = [ 0 0 coeff_y coeff_y];
14
15
16square = rectangle(:,1) * ones(1,4) + u_hori*x_coord + u_vert*y_coord;
17square = square ./ (ones(3,1)*square(3,:));
18
19
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/UnWarpPlane.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/UnWarpPlane.m
new file mode 100755
index 0000000..8addf52
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/UnWarpPlane.m
@@ -0,0 +1,54 @@
1function [u_hori,u_vert] = UnWarpPlane(x1,x2,x3,x4);
2
3% Recovers the two 3D directions of the rectangular patch x1x2x3x4
4% x1 is the origin point, ie any point of planar coordinate (x,y) on the
5% rectangular patch will be projected on the image plane at:
6% x1 + x * u_hori + y * u_vert
7%
8% Note: u_hori and u_vert are also the two vanishing points.
9
10
11if nargin < 4,
12
13 x4 = x1(:,4);
14 x3 = x1(:,3);
15 x2 = x1(:,2);
16 x1 = x1(:,1);
17
18end;
19
20
21% Image Projection:
22L1 = cross(x1,x2);
23L2 = cross(x4,x3);
24L3 = cross(x2,x3);
25L4 = cross(x1,x4);
26
27% Vanishing point:
28V1 = cross(L1,L2);
29V2 = cross(L3,L4);
30
31% Horizon line:
32H = cross(V1,V2);
33
34if H(3) < 0, H = -H; end;
35
36
37H = H / norm(H);
38
39
40X1 = x1 / dot(H,x1);
41X2 = x2 / dot(H,x2);
42X3 = x3 / dot(H,x3);
43X4 = x4 / dot(H,x4);
44
45scale = X1(3);
46
47X1 = X1/scale;
48X2 = X2/scale;
49X3 = X3/scale;
50X4 = X4/scale;
51
52
53u_hori = X2 - X1;
54u_vert = X4 - X1;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/add_suppress.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/add_suppress.m
new file mode 100755
index 0000000..a8a32c0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/add_suppress.m
@@ -0,0 +1,98 @@
1
2if ~exist('n_ima'),
3 fprintf(1,'No data to process.\n');
4 return;
5end;
6
7
8check_active_images;
9
10
11fprintf(1,'\nThis function is useful to select a subset of images to calibrate\n');
12
13 fprintf(1,'\nThere are currently %d active images selected for calibration (out of %d):\n',length(ind_active),n_ima);
14
15 if ~isempty(ind_active),
16
17 for ii = 1:length(ind_active)-2,
18
19 fprintf(1,'%d, ',ind_active(ii));
20
21 end;
22
23 fprintf(1,'%d and %d.',ind_active(end-1),ind_active(end));
24
25 end;
26
27 fprintf(1,'\n');
28
29
30fprintf(1,'\nDo you want to suppress or add images from that list?\n');
31
32choice = 2;
33
34while (choice~=0)&(choice~=1),
35 choice = input('For suppressing images enter 0, for adding images enter 1 ([]=no change): ');
36 if isempty(choice),
37 fprintf(1,'No change applied to the list of active images.\n');
38 return;
39 end;
40 if (choice~=0)&(choice~=1),
41 disp('Bad entry. Try again.');
42 end;
43end;
44
45
46if choice,
47
48 ima_numbers = input('Number(s) of image(s) to add ([] = all images) = ');
49
50if isempty(ima_numbers),
51 fprintf(1,'All %d images are now active\n',n_ima);
52 ima_proc = 1:n_ima;
53 else
54 ima_proc = ima_numbers;
55 end;
56
57else
58
59
60 ima_numbers = input('Number(s) of image(s) to suppress ([] = no image) = ');
61
62 if isempty(ima_numbers),
63 fprintf(1,'No image has been suppressed. No modication of the list of active images.\n',n_ima);
64 ima_proc = [];
65 else
66 ima_proc = ima_numbers;
67 end;
68
69end;
70
71if ~isempty(ima_proc),
72
73 active_images(ima_proc) = choice * ones(1,length(ima_proc));
74
75end;
76
77
78 check_active_images;
79
80
81 fprintf(1,'\nThere is now a total of %d active images for calibration:\n',length(ind_active));
82
83 if ~isempty(ind_active),
84
85 for ii = 1:length(ind_active)-2,
86
87 fprintf(1,'%d, ',ind_active(ii));
88
89 end;
90
91 fprintf(1,'%d and %d.',ind_active(end-1),ind_active(end));
92
93 end;
94
95 fprintf(1,'\n\nYou may now run ''Calibration'' to recalibrate based on this new set of images.\n');
96
97
98 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/analyse_error.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/analyse_error.m
new file mode 100755
index 0000000..7a9cf0f
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/analyse_error.m
@@ -0,0 +1,141 @@
1% Color code for each image:
2
3if ~exist('n_ima')|~exist('fc'),
4 fprintf(1,'No calibration data available.\n');
5 return;
6end;
7
8check_active_images;
9
10if ~exist(['ex_' num2str(ind_active(1)) ]),
11 fprintf(1,'Need to calibrate before analysing reprojection error. Maybe need to load Calib_Results.mat file.\n');
12 return;
13end;
14
15
16%if ~exist('no_grid'),
17 no_grid = 0;
18%end;
19
20colors = 'brgkcm';
21
22
23figure(5);
24
25for kk = 1:n_ima,
26 if exist(['y_' num2str(kk)]),
27 if active_images(kk) & eval(['~isnan(y_' num2str(kk) '(1,1))']),
28
29 if ~no_grid,
30 eval(['XX_kk = X_' num2str(kk) ';']);
31 N_kk = size(XX_kk,2);
32
33 if ~exist(['n_sq_x_' num2str(kk)]),
34 no_grid = 1;
35 end;
36
37 if ~no_grid,
38 eval(['n_sq_x = n_sq_x_' num2str(kk) ';']);
39 eval(['n_sq_y = n_sq_y_' num2str(kk) ';']);
40 if (N_kk ~= ((n_sq_x+1)*(n_sq_y+1))),
41 no_grid = 1;
42 end;
43 end;
44 end;
45
46 eval(['plot(ex_' num2str(kk) '(1,:),ex_' num2str(kk) '(2,:),''' colors(rem(kk-1,6)+1) '+'');']);
47
48 hold on;
49 end;
50 end;
51end;
52
53hold off;
54axis('equal');
55if 1, %~no_grid,
56 title('Reprojection error (in pixel) - To exit: right button');
57else
58 title('Reprojection error (in pixel)');
59end;
60xlabel('x');
61ylabel('y');
62
63set(5,'Name','error','NumberTitle','off');
64
65
66
67err_std = std(ex')';
68
69fprintf(1,'Pixel error: err = [ %3.5f %3.5f] (all active images)\n\n',err_std);
70
71
72b = 1;
73
74while b==1,
75
76[xp,yp,b] = ginput3(1);
77
78if b==1,
79ddd = (ex(1,:)-xp).^2 + (ex(2,:)-yp).^2;
80
81[mind,indmin] = min(ddd);
82
83
84done = 0;
85kk_ima = 1;
86while (~done)&(kk_ima<=n_ima),
87 %fprintf(1,'%d...',kk_ima);
88 eval(['ex_kk = ex_' num2str(kk_ima) ';']);
89 sol_kk = find((ex_kk(1,:) == ex(1,indmin))&(ex_kk(2,:) == ex(2,indmin)));
90 if isempty(sol_kk),
91 kk_ima = kk_ima + 1;
92 else
93 done = 1;
94 end;
95end;
96
97if ~no_grid,
98
99eval(['n_sq_x = n_sq_x_' num2str(kk_ima) ';']);
100eval(['n_sq_y = n_sq_y_' num2str(kk_ima) ';']);
101
102Nx = n_sq_x+1;
103Ny = n_sq_y+1;
104
105y1 = floor((sol_kk-1)./Nx);
106x1 = sol_kk - 1 - Nx*y1; %rem(sol_kk-1,Nx);
107
108y1 = (n_sq_y+1) - y1;
109x1 = x1 + 1;
110
111fprintf(1,'\nSelected image: %d\nSelected point: (col,row)=(%d,%d)\nNcol=%d, Nrow=%d\n',[kk_ima x1 y1 Nx Ny]);
112fprintf(1,'Pixel error = (%3.5f,%3.5f)\n',[ex(1,indmin) ex(2,indmin)]);
113
114else
115
116 eval(['x_kk = x_' num2str(kk_ima) ';']);
117
118 xpt = x_kk(:,sol_kk);
119
120fprintf(1,'\nSelected image: %d\nImage coordinates (in pixel): (%3.2f,%3.2f)\n',[kk_ima xpt']);
121fprintf(1,'Pixel error = (%3.5f,%3.5f)\n',[ex(1,indmin) ex(2,indmin)]);
122
123
124end;
125
126
127if exist(['wintx_' num2str(kk_ima)]),
128
129 eval(['wintx = wintx_' num2str(kk_ima) ';']);
130 eval(['winty = winty_' num2str(kk_ima) ';']);
131
132 fprintf(1,'Window size: wintx = %d, winty = %d\n',[wintx winty]);
133end;
134
135
136end;
137
138end;
139
140disp('done');
141
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/apply_distortion.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/apply_distortion.m
new file mode 100755
index 0000000..f5c5b48
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/apply_distortion.m
@@ -0,0 +1,137 @@
1function [xd,dxddk] = apply_distortion(x,k)
2
3
4[m,n] = size(x);
5
6% Add distortion:
7
8r2 = x(1,:).^2 + x(2,:).^2;
9
10r4 = r2.^2;
11
12% Radial distortion:
13
14cdist = 1 + k(1) * r2 + k(2) * r4;
15
16if nargout > 1,
17 dcdistdk = [ r2' r4' zeros(n,2)];
18end;
19
20
21xd1 = x .* (ones(2,1)*cdist);
22
23coeff = (reshape([cdist;cdist],2*n,1)*ones(1,3));
24
25if nargout > 1,
26 dxd1dk = zeros(2*n,4);
27 dxd1dk(1:2:end,:) = (x(1,:)'*ones(1,4)) .* dcdistdk;
28 dxd1dk(2:2:end,:) = (x(2,:)'*ones(1,4)) .* dcdistdk;
29end;
30
31
32% tangential distortion:
33
34a1 = 2.*x(1,:).*x(2,:);
35a2 = r2 + 2*x(1,:).^2;
36a3 = r2 + 2*x(2,:).^2;
37
38delta_x = [k(3)*a1 + k(4)*a2 ;
39 k(3) * a3 + k(4)*a1];
40
41aa = (2*k(3)*x(2,:)+6*k(4)*x(1,:))'*ones(1,3);
42bb = (2*k(3)*x(1,:)+2*k(4)*x(2,:))'*ones(1,3);
43cc = (6*k(3)*x(2,:)+2*k(4)*x(1,:))'*ones(1,3);
44
45if nargout > 1,
46 ddelta_xdk = zeros(2*n,4);
47 ddelta_xdk(1:2:end,3) = a1';
48 ddelta_xdk(1:2:end,4) = a2';
49 ddelta_xdk(2:2:end,3) = a3';
50 ddelta_xdk(2:2:end,4) = a1';
51end;
52
53xd = xd1 + delta_x;
54
55if nargout > 1,
56 dxddk = dxd1dk + ddelta_xdk ;
57end;
58
59
60return;
61
62% Test of the Jacobians:
63
64n = 10;
65
66X = 10*randn(3,n);
67om = randn(3,1);
68T = [10*randn(2,1);40];
69f = 1000*rand(2,1);
70c = 1000*randn(2,1);
71k = 0.5*randn(4,1);
72
73
74[x,dxdom,dxdT,dxdf,dxdc,dxdk] = project_points(X,om,T,f,c,k);
75
76
77% Test on om: NOT OK
78
79dom = 0.000000001 * norm(om)*randn(3,1);
80om2 = om + dom;
81
82[x2] = project_points(X,om2,T,f,c,k);
83
84x_pred = x + reshape(dxdom * dom,2,n);
85
86
87norm(x2-x)/norm(x2 - x_pred)
88
89
90% Test on T: OK!!
91
92dT = 0.0001 * norm(T)*randn(3,1);
93T2 = T + dT;
94
95[x2] = project_points(X,om,T2,f,c,k);
96
97x_pred = x + reshape(dxdT * dT,2,n);
98
99
100norm(x2-x)/norm(x2 - x_pred)
101
102
103
104% Test on f: OK!!
105
106df = 0.001 * norm(f)*randn(2,1);
107f2 = f + df;
108
109[x2] = project_points(X,om,T,f2,c,k);
110
111x_pred = x + reshape(dxdf * df,2,n);
112
113
114norm(x2-x)/norm(x2 - x_pred)
115
116
117% Test on c: OK!!
118
119dc = 0.01 * norm(c)*randn(2,1);
120c2 = c + dc;
121
122[x2] = project_points(X,om,T,f,c2,k);
123
124x_pred = x + reshape(dxdc * dc,2,n);
125
126norm(x2-x)/norm(x2 - x_pred)
127
128% Test on k: OK!!
129
130dk = 0.001 * norm(4)*randn(4,1);
131k2 = k + dk;
132
133[x2] = project_points(X,om,T,f,c,k2);
134
135x_pred = x + reshape(dxdk * dk,2,n);
136
137norm(x2-x)/norm(x2 - x_pred)
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/calib_gui.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/calib_gui.m
new file mode 100755
index 0000000..d591d03
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/calib_gui.m
@@ -0,0 +1,117 @@
1fig_number = 1;
2
3n_row = 4;
4n_col = 4;
5
6string_list = cell(n_row,n_col);
7callback_list = cell(n_row,n_col);
8
9x_size = 85;
10y_size = 14;
11gap_x = 0;
12font_name = 'clean';
13font_size = 8;
14
15title_figure = 'Camera Calibration Toolbox';
16
17string_list{1,1} = 'Image names';
18string_list{1,2} = 'Read images';
19string_list{1,3} = 'Extract grid corners';
20string_list{1,4} = 'Calibration';
21string_list{2,1} = 'Show Extrinsic';
22string_list{2,2} = 'Reproject on images';
23string_list{2,3} = 'Analyse error';
24string_list{2,4} = 'Recomp. corners';
25string_list{3,1} = 'Add/Suppress images';
26string_list{3,2} = 'Save';
27string_list{3,3} = 'Load';
28string_list{3,4} = 'Exit';
29
30string_list{4,1} = 'Comp. Extrinsic';
31string_list{4,2} = 'Undistort image';
32string_list{4,3} = 'Export calib data';
33
34
35callback_list{1,1} = 'data_calib;';
36callback_list{1,2} = 'ima_read_calib;';
37callback_list{1,3} = 'click_calib;';
38callback_list{1,4} = 'go_calib_optim;';
39callback_list{2,1} = 'ext_calib;';
40callback_list{2,2} = 'reproject_calib;';
41callback_list{2,3} = 'analyse_error;';
42callback_list{2,4} = 'recomp_corner_calib;';
43callback_list{3,1} = 'add_suppress;';
44callback_list{3,2} = 'saving_calib;';
45callback_list{3,3} = 'loading_calib;';
46callback_list{3,4} = ['disp(''Bye. To run again, type calib_gui.''); close(' num2str(fig_number) ');'];
47
48callback_list{4,1} = 'extrinsic_computation;';
49callback_list{4,2} = 'undistort_image;';
50callback_list{4,3} = 'export_calib_data;';
51
52
53%------- BEGIN PROECTED REGION -----------%
54%------- DO NOT EDIT IN THIS REGION -----------%
55
56figure(fig_number); clf;
57pos = get(fig_number,'Position');
58
59fig_size_x = x_size*n_col+(n_col+1)*gap_x;
60fig_size_y = y_size*n_row+(n_row+1)*gap_x;
61
62set(fig_number,'Units','points', ...
63 'BackingStore','off', ...
64 'Color',[0.8 0.8 0.8], ...
65 'MenuBar','none', ...
66 'Resize','off', ...
67 'Name',title_figure, ...
68'Position',[pos(1) pos(2) fig_size_x fig_size_y], ...
69'NumberTitle','off'); %,'WindowButtonMotionFcn',['figure(' num2str(fig_number) ');']);
70
71h_mat = zeros(n_row,n_col);
72
73posx = zeros(n_row,n_col);
74posy = zeros(n_row,n_col);
75
76for i=n_row:-1:1,
77 for j = n_col:-1:1,
78 posx(i,j) = gap_x+(j-1)*(x_size+gap_x);
79 posy(i,j) = fig_size_y - i*(gap_x+y_size);
80 end;
81end;
82
83for i=n_row:-1:1,
84 for j = n_col:-1:1,
85 if ~isempty(string_list{i,j}) & ~isempty(callback_list{i,j}),
86 h_mat(i,j) = uicontrol('Parent',fig_number, ...
87 'Units','points', ...
88 'Callback',callback_list{i,j}, ...
89 'ListboxTop',0, ...
90 'Position',[posx(i,j) posy(i,j) x_size y_size], ...
91 'String',string_list{i,j}, ...
92 'fontsize',font_size,...
93 'fontname',font_name,...
94 'Tag','Pushbutton1');
95 end;
96 end;
97end;
98
99%------ END PROTECTED REGION ----------------%
100
101if 0,
102%-- VERSION:
103
104uicontrol('Parent',fig_number, ...
105 'Units','points', ...
106 'ListboxTop',0, ...
107 'Position',[(fig_size_x-x_size/2)-2 -5 x_size/2 y_size], ...
108 'String','ver. 1.0', ...
109 'fontsize',8,...
110 'BackgroundColor',[0.8 0.8 0.8], ...
111 'fontname','clean',...
112 'HorizontalAlignment','right', ...
113 'Style','text');
114end;
115
116
117%clear callback_list string_list fig_number fig_size_x fig_size_y i j n_col n_row pos string_list title_figure x_size y_size font_name font_size gap_x h_mat posx posy
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_active_images.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_active_images.m
new file mode 100755
index 0000000..fc365a5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_active_images.m
@@ -0,0 +1,19 @@
1
2if ~exist('active_images'),
3 active_images = ones(1,n_ima);
4end;
5n_act = length(active_images);
6if n_act < n_ima,
7 active_images = [active_images ones(1,n_ima-n_act)];
8else
9 if n_act > n_ima,
10 active_images = active_images(1:n_ima);
11 end;
12end;
13
14ind_active = find(active_images);
15
16if prod(active_images == 0),
17 disp('Error: There is no active image');
18 break
19end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_convergence.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_convergence.m
new file mode 100755
index 0000000..c4b13fd
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_convergence.m
@@ -0,0 +1,48 @@
1%%% Replay the set of solution vectors:
2
3
4if ~exist('param_list'),
5 if ~exist('solution');
6 fprintf(1,'Error: Need to calibrate first\n');
7 return;
8 else
9 param_list = solution;
10 end;
11end;
12
13N_iter = size(param_list,2);
14
15if N_iter == 1,
16 fprintf(1,'Warning: There is a unique state in the list of parameters.\n');
17end;
18
19
20
21%M = moviein(N_iter);
22
23for nn = 1:N_iter,
24
25 solution = param_list(:,nn);
26
27 extract_parameters;
28 comp_error_calib;
29
30 ext_calib;
31
32 drawnow;
33
34% Mnn = getframe(gcf);
35
36% M(:,nn) = Mnn;
37
38end;
39
40%fig = gcf;
41
42
43%figure(fig+1);
44%close;
45%figure(fig+1);
46
47%clf;
48%movie(M,20);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_directory.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_directory.m
new file mode 100755
index 0000000..dc23149
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_directory.m
@@ -0,0 +1,97 @@
1% This small script looks in the direcory and checks if the images are there.
2%
3% This works only on Matlab 5.x (otherwise, the dir commands works differently)
4
5% (c) Jean-Yves Bouguet - Dec. 27th, 1999
6
7l = dir([calib_name '*']);
8
9Nl = size(l,1);
10Nima_valid = 0;
11ind_valid = [];
12loc_extension = [];
13length_name = size(calib_name,2);
14
15if Nl > 0,
16
17 for pp = 1:Nl,
18 filenamepp = l(pp).name;
19 iii = findstr(filenamepp,calib_name);
20
21 loc_ext = findstr(filenamepp,format_image);
22 string_num = filenamepp(length_name+1:loc_ext - 2);
23
24 if isempty(str2num(string_num)),
25 iii = [];
26 end;
27
28
29 if ~isempty(iii),
30 if (iii(1) ~= 1),
31 iii = [];
32 end;
33 end;
34
35
36
37 if ~isempty(iii) & ~isempty(loc_ext),
38
39 Nima_valid = Nima_valid + 1;
40 ind_valid = [ind_valid pp];
41 loc_extension = [loc_extension loc_ext(1)];
42
43 end;
44
45 end;
46
47 if (Nima_valid==0),
48
49 fprintf(1,'No image found. File format may be wrong.\n');
50
51 else
52
53 % Get all the string numbers:
54
55 string_length = zeros(1,Nima_valid);
56 indices = zeros(1,Nima_valid);
57
58
59 for ppp = 1:Nima_valid,
60
61 name = l(ind_valid(ppp)).name;
62 string_num = name(length_name+1:loc_extension(ppp) - 2);
63 string_length(ppp) = size(string_num,2);
64 indices(ppp) = str2num(string_num);
65
66 end;
67
68 % Number of images...
69 first_num = min(indices);
70 n_ima = max(indices) - first_num + 1;
71
72 if min(string_length) == max(string_length),
73
74 N_slots = min(string_length);
75 type_numbering = 1;
76
77 else
78
79 N_slots = 1;
80 type_numbering = 0;
81
82 end;
83
84 image_numbers = first_num:n_ima-1+first_num;
85
86 %%% By default, all the images are active for calibration:
87
88 active_images = ones(1,n_ima);
89
90 end;
91
92else
93
94 fprintf(1,'No image found. Basename may be wrong.\n');
95
96end;
97
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_extracted_images.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_extracted_images.m
new file mode 100755
index 0000000..fa7df87
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/check_extracted_images.m
@@ -0,0 +1,37 @@
1check_active_images;
2
3for kk = ind_active,
4
5 if ~exist(['x_' num2str(kk)]),
6
7 fprintf(1,'WARNING: Need to extract grid corners on image %d\n',kk);
8
9 active_images(kk) = 0;
10
11 eval(['dX_' num2str(kk) ' = NaN;']);
12 eval(['dY_' num2str(kk) ' = NaN;']);
13
14 eval(['wintx_' num2str(kk) ' = NaN;']);
15 eval(['winty_' num2str(kk) ' = NaN;']);
16
17 eval(['x_' num2str(kk) ' = NaN*ones(2,1);']);
18 eval(['X_' num2str(kk) ' = NaN*ones(3,1);']);
19
20 eval(['n_sq_x_' num2str(kk) ' = NaN;']);
21 eval(['n_sq_y_' num2str(kk) ' = NaN;']);
22
23 else
24
25 eval(['xkk = x_' num2str(kk) ';']);
26
27 if isnan(xkk(1)),
28
29 fprintf(1,'WARNING: Need to extract grid corners on image %d - This image is now set inactive\n',kk);
30
31 active_images(kk) = 0;
32
33 end;
34
35 end;
36
37end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/clear_windows.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/clear_windows.m
new file mode 100755
index 0000000..1eccbd3
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/clear_windows.m
@@ -0,0 +1,4 @@
1for kk = 1:n_ima,
2 eval(['clear wintx_' num2str(kk)]);
3 eval(['clear winty_' num2str(kk)]);
4end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/clearwin.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/clearwin.m
new file mode 100755
index 0000000..a04be67
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/clearwin.m
@@ -0,0 +1,10 @@
1% Function that clears all the wintx_i and winty_i
2% In normal operation of the toolbox, this function should not be
3% useful.
4% only in cases where you want to re-extract corners using the Extract grid corners another time... not common. You might as well use the Recomp. corners.
5
6for kk = 1:n_ima,
7
8 eval(['clear wintx_' num2str(kk) ' winty_' num2str(kk)]);
9
10end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/click_calib.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/click_calib.m
new file mode 100755
index 0000000..1a6d2d7
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/click_calib.m
@@ -0,0 +1,193 @@
1%if exist('images_read');
2% active_images = active_images & images_read;
3%end;
4
5var2fix = 'dX_default';
6
7fixvariable;
8
9var2fix = 'dY_default';
10
11fixvariable;
12
13var2fix = 'map';
14
15fixvariable;
16
17
18if ~exist('n_ima'),
19 data_calib;
20end;
21
22check_active_images;
23
24if ~exist(['I_' num2str(ind_active(1))]),
25 ima_read_calib;
26 if isempty(ind_read),
27 disp('Cannot extract corners without images');
28 return;
29 end;
30end;
31
32
33%wintx = 10; % neigborhood of integration for
34%winty = 10; % the corner finder
35
36fprintf(1,'\nExtraction of the grid corners on the images\n');
37
38
39if ~exist('map'), map = gray(256); end;
40
41
42disp('WARNING!!! Do not forget to change dX_default and dY_default in click_calib.m!!!')
43
44if ~exist('dX_default');
45
46% Default size of the pattern squares;
47
48% Setup of JY (old at Caltech)
49%dX_default = 21.9250/11;
50%dY_default = 18.1250/9;
51
52% Setup of JY (new at Intel)
53%dX_default = 1.9750;
54%dY_default = 1.9865;
55
56
57% Setup of Luis and Enrico
58%dX_default = 67.7/16;
59%dY_default = 50.65/12;
60
61
62% Setup of German
63%dX_default = 10.16;
64%dY_default = 10.16;
65
66% Setup of JY (new at Intel)
67%dX_default = 1.9750*2.54;
68%dY_default = 1.9865*2.54;
69
70% Setup of JY - 3D calibration rig at Intel (new at Intel)
71%dX_default = 3;
72%dY_default = 3;
73
74% Setup of JY - 3D calibration rig at Intel (new at Intel) - use units in mm to match Zhang
75dX_default = 30;
76dY_default = 30;
77
78end;
79
80
81if ~exist('dont_ask'),
82 dont_ask = 0;
83end;
84
85
86if ~dont_ask,
87 ima_numbers = input('Number(s) of image(s) to process ([] = all images) = ');
88else
89 ima_numbers = [];
90end;
91
92if isempty(ima_numbers),
93 ima_proc = 1:n_ima;
94else
95 ima_proc = ima_numbers;
96end;
97
98
99% Useful option to add images:
100kk_first = ima_proc(1); %input('Start image number ([]=1=first): ');
101
102%if isempty(kk_first), kk_first = 1; end;
103
104
105if exist(['wintx_' num2str(kk_first)]),
106
107 eval(['wintxkk = wintx_' num2str(kk_first) ';']);
108
109 if isempty(wintxkk) | isnan(wintxkk),
110
111 disp('Window size for corner finder (wintx and winty):');
112 wintx = input('wintx ([] = 5) = ');
113 if isempty(wintx), wintx = 5; end;
114 wintx = round(wintx);
115 winty = input('winty ([] = 5) = ');
116 if isempty(winty), winty = 5; end;
117 winty = round(winty);
118
119 fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1);
120
121 end;
122
123else
124
125 disp('Window size for corner finder (wintx and winty):');
126 wintx = input('wintx ([] = 5) = ');
127 if isempty(wintx), wintx = 5; end;
128 wintx = round(wintx);
129 winty = input('winty ([] = 5) = ');
130 if isempty(winty), winty = 5; end;
131 winty = round(winty);
132
133 fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1);
134
135end;
136
137
138for kk = ima_proc,
139 if exist(['I_' num2str(kk)]),
140 click_ima_calib;
141 active_images(kk) = 1;
142 else
143 eval(['dX_' num2str(kk) ' = NaN;']);
144 eval(['dY_' num2str(kk) ' = NaN;']);
145
146 eval(['wintx_' num2str(kk) ' = NaN;']);
147 eval(['winty_' num2str(kk) ' = NaN;']);
148
149 eval(['x_' num2str(kk) ' = NaN*ones(2,1);']);
150 eval(['X_' num2str(kk) ' = NaN*ones(3,1);']);
151
152 eval(['n_sq_x_' num2str(kk) ' = NaN;']);
153 eval(['n_sq_y_' num2str(kk) ' = NaN;']);
154 end;
155end;
156
157
158check_active_images;
159
160
161% Fix potential non-existing variables:
162
163for kk = 1:n_ima,
164 if ~exist(['x_' num2str(kk)]),
165 eval(['dX_' num2str(kk) ' = NaN;']);
166 eval(['dY_' num2str(kk) ' = NaN;']);
167
168 eval(['wintx_' num2str(kk) ' = NaN;']);
169 eval(['winty_' num2str(kk) ' = NaN;']);
170
171 eval(['x_' num2str(kk) ' = NaN*ones(2,1);']);
172 eval(['X_' num2str(kk) ' = NaN*ones(3,1);']);
173
174 eval(['n_sq_x_' num2str(kk) ' = NaN;']);
175 eval(['n_sq_y_' num2str(kk) ' = NaN;']);
176 end;
177end;
178
179
180string_save = 'save calib_data active_images ind_active wintx winty n_ima type_numbering N_slots first_num image_numbers format_image calib_name Hcal Wcal nx ny map dX_default dY_default dX dY';
181
182for kk = 1:n_ima,
183 string_save = [string_save ' X_' num2str(kk) ' x_' num2str(kk) ' n_sq_x_' num2str(kk) ' n_sq_y_' num2str(kk) ' wintx_' num2str(kk) ' winty_' num2str(kk) ' dX_' num2str(kk) ' dY_' num2str(kk)];
184end;
185
186eval(string_save);
187
188disp('done');
189
190return;
191
192go_calib_optim;
193
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/click_ima_calib.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/click_ima_calib.m
new file mode 100755
index 0000000..f0fd4ca
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/click_ima_calib.m
@@ -0,0 +1,230 @@
1 % Cleaned-up version of init_calib.m
2
3 fprintf(1,'\nProcessing image %d...\n',kk);
4
5 eval(['I = I_' num2str(kk) ';']);
6
7 if exist(['wintx_' num2str(kk)]),
8
9 eval(['wintxkk = wintx_' num2str(kk) ';']);
10
11 if ~isempty(wintxkk) & ~isnan(wintxkk),
12
13 eval(['wintx = wintx_' num2str(kk) ';']);
14 eval(['winty = winty_' num2str(kk) ';']);
15
16 end;
17 end;
18
19
20 fprintf(1,'Using (wintx,winty)=(%d,%d) - Window size = %dx%d\n',wintx,winty,2*wintx+1,2*winty+1);
21
22
23 figure(2);
24 image(I);
25 colormap(map);
26
27 title(['Click on the four extreme corners of the rectangular pattern... Image ' num2str(kk)]);
28
29 disp('Click on the four extreme corners of the rectangular complete pattern...');
30
31 [x,y] = ginput3(4);
32
33 [Xc,good,bad,type] = cornerfinder([x';y'],I,winty,wintx); % the four corners
34
35 x = Xc(1,:)';
36 y = Xc(2,:)';
37
38 [y,indy] = sort(y);
39 x = x(indy);
40
41 if (x(2) > x(1)),
42 x4 = x(1);y4 = y(1); x3 = x(2); y3 = y(2);
43 else
44 x4 = x(2);y4 = y(2); x3 = x(1); y3 = y(1);
45 end;
46 if (x(3) > x(4)),
47 x2 = x(3);y2 = y(3); x1 = x(4); y1 = y(4);
48 else
49 x2 = x(4);y2 = y(4); x1 = x(3); y1 = y(3);
50 end;
51
52 x = [x1;x2;x3;x4];
53 y = [y1;y2;y3;y4];
54
55
56 figure(2); hold on;
57 plot([x;x(1)],[y;y(1)],'g-');
58 plot(x,y,'og');
59 hx=text((x(4)+x(3))/2,(y(4)+y(3))/2 - 20,'X');
60 set(hx,'color','g','Fontsize',14);
61 hy=text((x(4)+x(1))/2-20,(y(4)+y(1))/2,'Y');
62 set(hy,'color','g','Fontsize',14);
63 hold off;
64
65
66 % Try to automatically count the number of squares in the grid
67
68 n_sq_x1 = count_squares(I,x1,y1,x2,y2,wintx);
69 n_sq_x2 = count_squares(I,x3,y3,x4,y4,wintx);
70 n_sq_y1 = count_squares(I,x2,y2,x3,y3,wintx);
71 n_sq_y2 = count_squares(I,x4,y4,x1,y1,wintx);
72
73
74
75 % If could not count the number of squares, enter manually
76
77 if (n_sq_x1~=n_sq_x2)|(n_sq_y1~=n_sq_y2),
78
79
80 disp('Could not count the number of squares in the grid. Enter manually.');
81 n_sq_x = input('Number of squares along the X direction ([]=10) = '); %6
82 if isempty(n_sq_x), n_sq_x = 10; end;
83 n_sq_y = input('Number of squares along the Y direction ([]=10) = '); %6
84 if isempty(n_sq_y), n_sq_y = 10; end;
85
86 else
87
88 n_sq_x = n_sq_x1;
89 n_sq_y = n_sq_y1;
90
91 end;
92
93
94 % Enter the size of each square
95
96 dX = input(['Size dX of each square along the X direction ([]=' num2str(dX_default) 'mm) = ']);
97 dY = input(['Size dY of each square along the Y direction ([]=' num2str(dY_default) 'mm) = ']);
98 if isempty(dX), dX = dX_default; else dX_default = dX; end;
99 if isempty(dY), dY = dY_default; else dY_default = dY; end;
100
101 % Compute the inside points through computation of the planar homography (collineation)
102
103 a00 = [x(1);y(1);1];
104 a10 = [x(2);y(2);1];
105 a11 = [x(3);y(3);1];
106 a01 = [x(4);y(4);1];
107
108
109 % Compute the planar collineation: (return the normalization matrix as well)
110
111 [Homo,Hnorm,inv_Hnorm] = compute_homography ([a00 a10 a11 a01],[0 1 1 0;0 0 1 1;1 1 1 1]);
112
113
114 % Build the grid using the planar collineation:
115
116 x_l = ((0:n_sq_x)'*ones(1,n_sq_y+1))/n_sq_x;
117 y_l = (ones(n_sq_x+1,1)*(0:n_sq_y))/n_sq_y;
118 pts = [x_l(:) y_l(:) ones((n_sq_x+1)*(n_sq_y+1),1)]';
119
120 XX = Homo*pts;
121 XX = XX(1:2,:) ./ (ones(2,1)*XX(3,:));
122
123
124 % Complete size of the rectangle
125
126 W = n_sq_x*dX;
127 L = n_sq_y*dY;
128
129
130
131
132 %%%%%%%%%%%%%%%%%%%%%%%% ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
133 figure(2);
134 hold on;
135 plot(XX(1,:),XX(2,:),'r+');
136 title('The red crosses should be close to the image corners');
137 hold off;
138
139 disp('If the guessed grid corners (red crosses on the image) are not close to the actual corners,');
140 disp('it is necessary to enter an initial guess for the radial distortion factor kc (useful for subpixel detection)');
141 quest_distort = input('Need of an initial guess for distortion? ([]=no, other=yes) ');
142
143 quest_distort = ~isempty(quest_distort);
144
145 if quest_distort,
146 % Estimation of focal length:
147 c_g = [size(I,2);size(I,1)]/2 + .5;
148 f_g = Distor2Calib(0,[[x(1) x(2) x(4) x(3)] - c_g(1);[y(1) y(2) y(4) y(3)] - c_g(2)],1,1,4,W,L,[-W/2 W/2 W/2 -W/2;L/2 L/2 -L/2 -L/2; 0 0 0 0],100,1,1);
149 f_g = mean(f_g);
150 script_fit_distortion;
151 end;
152 %%%%%%%%%%%%%%%%%%%%% END ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
153
154
155
156
157
158 Np = (n_sq_x+1)*(n_sq_y+1);
159
160 disp('Corner extraction...');
161
162 grid_pts = cornerfinder(XX,I,winty,wintx); %%% Finds the exact corners at every points!
163
164
165
166 %save all_corners x y grid_pts
167
168 grid_pts = grid_pts - 1; % subtract 1 to bring the origin to (0,0) instead of (1,1) in matlab (not necessary in C)
169
170
171
172 ind_corners = [1 n_sq_x+1 (n_sq_x+1)*n_sq_y+1 (n_sq_x+1)*(n_sq_y+1)]; % index of the 4 corners
173 ind_orig = (n_sq_x+1)*n_sq_y + 1;
174 xorig = grid_pts(1,ind_orig);
175 yorig = grid_pts(2,ind_orig);
176 dxpos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig+1)]');
177 dypos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig-n_sq_x-1)]');
178
179
180 x_box_kk = [grid_pts(1,:)-(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)-(wintx+.5);grid_pts(1,:)-(wintx+.5)];
181 y_box_kk = [grid_pts(2,:)-(winty+.5);grid_pts(2,:)-(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)-(winty+.5)];
182
183
184 figure(3);
185 image(I); colormap(map); hold on;
186 plot(grid_pts(1,:)+1,grid_pts(2,:)+1,'r+');
187 plot(x_box_kk+1,y_box_kk+1,'-b');
188 plot(grid_pts(1,ind_corners)+1,grid_pts(2,ind_corners)+1,'mo');
189 plot(xorig+1,yorig+1,'*m');
190 h = text(xorig-15,yorig-15,'O');
191 set(h,'Color','m','FontSize',14);
192 h2 = text(dxpos(1)-10,dxpos(2)-10,'dX');
193 set(h2,'Color','g','FontSize',14);
194 h3 = text(dypos(1)-25,dypos(2)-3,'dY');
195 set(h3,'Color','g','FontSize',14);
196 xlabel('Xc (in camera frame)');
197 ylabel('Yc (in camera frame)');
198 title('Extracted corners');
199 zoom on;
200 drawnow;
201 hold off;
202
203
204 Xi = reshape(([0:n_sq_x]*dX)'*ones(1,n_sq_y+1),Np,1)';
205 Yi = reshape(ones(n_sq_x+1,1)*[n_sq_y:-1:0]*dY,Np,1)';
206 Zi = zeros(1,Np);
207
208 Xgrid = [Xi;Yi;Zi];
209
210
211 % All the point coordinates (on the image, and in 3D) - for global optimization:
212
213 x = grid_pts;
214 X = Xgrid;
215
216
217 % Saves all the data into variables:
218
219 eval(['dX_' num2str(kk) ' = dX;']);
220 eval(['dY_' num2str(kk) ' = dY;']);
221
222 eval(['wintx_' num2str(kk) ' = wintx;']);
223 eval(['winty_' num2str(kk) ' = winty;']);
224
225 eval(['x_' num2str(kk) ' = x;']);
226 eval(['X_' num2str(kk) ' = X;']);
227
228 eval(['n_sq_x_' num2str(kk) ' = n_sq_x;']);
229 eval(['n_sq_y_' num2str(kk) ' = n_sq_y;']);
230 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/click_ima_calib3D.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/click_ima_calib3D.m
new file mode 100755
index 0000000..7718268
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/click_ima_calib3D.m
@@ -0,0 +1,482 @@
1 % Cleaned-up version of init_calib.m
2
3 eval(['I = I_' num2str(kk) ';']);
4
5 figure(2);
6 image(I);
7 colormap(map);
8
9
10
11
12
13 %%%%%%%%%%%%%%%%%%%%%%%%% LEFT PATTERN ACQUISITION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
14
15
16
17 title(['Click on the four extreme corners of the left rectangular pattern... Image ' num2str(kk)]);
18
19 disp('Click on the four extreme corners of the left rectangular pattern...');
20
21 [x,y] = ginput3(4);
22
23 [Xc,good,bad,type] = cornerfinder([x';y'],I,winty,wintx); % the four corners
24
25 x = Xc(1,:)';
26 y = Xc(2,:)';
27
28 [y,indy] = sort(y);
29 x = x(indy);
30
31 if (x(2) > x(1)),
32 x4 = x(1);y4 = y(1); x3 = x(2); y3 = y(2);
33 else
34 x4 = x(2);y4 = y(2); x3 = x(1); y3 = y(1);
35 end;
36 if (x(3) > x(4)),
37 x2 = x(3);y2 = y(3); x1 = x(4); y1 = y(4);
38 else
39 x2 = x(4);y2 = y(4); x1 = x(3); y1 = y(3);
40 end;
41
42 x = [x1;x2;x3;x4];
43 y = [y1;y2;y3;y4];
44
45
46 figure(2); hold on;
47 plot([x;x(1)],[y;y(1)],'g-');
48 plot(x,y,'og');
49 hx=text((x(4)+x(3))/2,(y(4)+y(3))/2 - 20,'X');
50 set(hx,'color','g','Fontsize',14);
51 hy=text((x(4)+x(1))/2-20,(y(4)+y(1))/2,'Y');
52 set(hy,'color','g','Fontsize',14);
53 hold off;
54
55 drawnow;
56
57
58 % Try to automatically count the number of squares in the grid
59
60 n_sq_x1 = count_squares(I,x1,y1,x2,y2,wintx);
61 n_sq_x2 = count_squares(I,x3,y3,x4,y4,wintx);
62 n_sq_y1 = count_squares(I,x2,y2,x3,y3,wintx);
63 n_sq_y2 = count_squares(I,x4,y4,x1,y1,wintx);
64
65
66
67 % If could not count the number of squares, enter manually
68
69 if (n_sq_x1~=n_sq_x2)|(n_sq_y1~=n_sq_y2),
70
71
72 disp('Could not count the number of squares in the grid. Enter manually.');
73 n_sq_x = input('Number of squares along the X direction ([]=10) = '); %6
74 if isempty(n_sq_x), n_sq_x = 10; end;
75 n_sq_y = input('Number of squares along the Y direction ([]=10) = '); %6
76 if isempty(n_sq_y), n_sq_y = 10; end;
77
78 else
79
80 n_sq_x = n_sq_x1;
81 n_sq_y = n_sq_y1;
82
83 end;
84
85
86 if 1,
87 % Enter the size of each square
88
89 dX = input(['Size dX of each square along the X direction ([]=' num2str(dX_default) 'cm) = ']);
90 dY = input(['Size dY of each square along the Y direction ([]=' num2str(dY_default) 'cm) = ']);
91 if isempty(dX), dX = dX_default; else dX_default = dX; end;
92 if isempty(dY), dY = dY_default; else dY_default = dY; end;
93
94 else
95
96 dX = 3;
97 dY = 3;
98
99 end;
100
101
102 % Compute the inside points through computation of the planar homography (collineation)
103
104 a00 = [x(1);y(1);1];
105 a10 = [x(2);y(2);1];
106 a11 = [x(3);y(3);1];
107 a01 = [x(4);y(4);1];
108
109
110 % Compute the planart collineation: (return the normalization matrice as well)
111
112 [Homo,Hnorm,inv_Hnorm] = compute_collineation (a00, a10, a11, a01);
113
114
115 % Build the grid using the planar collineation:
116
117 x_l = ((0:n_sq_x)'*ones(1,n_sq_y+1))/n_sq_x;
118 y_l = (ones(n_sq_x+1,1)*(0:n_sq_y))/n_sq_y;
119 pts = [x_l(:) y_l(:) ones((n_sq_x+1)*(n_sq_y+1),1)]';
120
121 XX = Homo*pts;
122 XX = XX(1:2,:) ./ (ones(2,1)*XX(3,:));
123
124
125 % Complete size of the rectangle
126
127 W = n_sq_x*dX;
128 L = n_sq_y*dY;
129
130
131
132 if 1,
133 %%%%%%%%%%%%%%%%%%%%%%%% ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
134 figure(2);
135 hold on;
136 plot(XX(1,:),XX(2,:),'r+');
137 title('The red crosses should be close to the image corners');
138 hold off;
139
140 disp('If the guessed grid corners (red crosses on the image) are not close to the actual corners,');
141 disp('it is necessary to enter an initial guess for the radial distortion factor kc (useful for subpixel detection)');
142 quest_distort = input('Need of an initial guess for distortion? ([]=no, other=yes) ');
143
144 quest_distort = ~isempty(quest_distort);
145
146 if quest_distort,
147 % Estimation of focal length:
148 c_g = [size(I,2);size(I,1)]/2 + .5;
149 f_g = Distor2Calib(0,[[x(1) x(2) x(4) x(3)] - c_g(1);[y(1) y(2) y(4) y(3)] - c_g(2)],1,1,4,W,L,[-W/2 W/2 W/2 -W/2;L/2 L/2 -L/2 -L/2; 0 0 0 0],100,1,1);
150 f_g = mean(f_g);
151 script_fit_distortion;
152 end;
153 %%%%%%%%%%%%%%%%%%%%% END ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
154 end;
155
156
157 Np = (n_sq_x+1)*(n_sq_y+1);
158
159 disp('Corner extraction...');
160
161 grid_pts = cornerfinder(XX,I,winty,wintx); %%% Finds the exact corners at every points!
162
163 %save all_corners x y grid_pts
164
165 grid_pts = grid_pts - 1; % subtract 1 to bring the origin to (0,0) instead of (1,1) in matlab (not necessary in C)
166
167
168 % Global Homography from plane to pixel coordinates:
169
170 H_total = [1 0 -1 ; 0 1 -1 ; 0 0 1]*Homo*[1 0 0;0 -1 1;0 0 1]*[1/W 0 0 ; 0 1/L 0; 0 0 1];
171 % WARNING!!! the first matrix (on the left side) takes care of the transformation of the pixel cooredinates by -1 (previous line)
172 % If it is not done, then this matrix should not appear (in C)
173 H_total = H_total / H_total(3,3);
174
175
176 ind_corners = [1 n_sq_x+1 (n_sq_x+1)*n_sq_y+1 (n_sq_x+1)*(n_sq_y+1)]; % index of the 4 corners
177 ind_orig = (n_sq_x+1)*n_sq_y + 1;
178 xorig = grid_pts(1,ind_orig);
179 yorig = grid_pts(2,ind_orig);
180 dxpos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig+1)]');
181 dypos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig-n_sq_x-1)]');
182
183
184 x_box_kk = [grid_pts(1,:)-(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)-(wintx+.5);grid_pts(1,:)-(wintx+.5)];
185 y_box_kk = [grid_pts(2,:)-(winty+.5);grid_pts(2,:)-(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)-(winty+.5)];
186
187
188 figure(3);
189 image(I); colormap(map); hold on;
190 plot(grid_pts(1,:)+1,grid_pts(2,:)+1,'r+');
191 plot(x_box_kk+1,y_box_kk+1,'-b');
192 plot(grid_pts(1,ind_corners)+1,grid_pts(2,ind_corners)+1,'mo');
193 plot(xorig+1,yorig+1,'*m');
194 h = text(xorig-15,yorig-15,'O');
195 set(h,'Color','m','FontSize',14);
196 h2 = text(dxpos(1)-10,dxpos(2)-10,'dX');
197 set(h2,'Color','g','FontSize',14);
198 h3 = text(dypos(1)-25,dypos(2)-3,'dY');
199 set(h3,'Color','g','FontSize',14);
200 xlabel('Xc (in camera frame)');
201 ylabel('Yc (in camera frame)');
202 title('Extracted corners');
203 zoom on;
204 drawnow;
205 hold off;
206
207
208 Xi = reshape(([0:n_sq_x]*dX)'*ones(1,n_sq_y+1),Np,1)';
209 Yi = reshape(ones(n_sq_x+1,1)*[n_sq_y:-1:0]*dY,Np,1)';
210 Zi = zeros(1,Np);
211
212 Xgrid = [Xi;Yi;Zi];
213
214
215 % All the point coordinates (on the image, and in 3D) - for global optimization:
216
217 x = grid_pts;
218 X = Xgrid;
219
220
221 % The left pannel info:
222
223 xl = x;
224 Xl = X;
225 nl_sq_x = n_sq_x;
226 nl_sq_y = n_sq_y;
227 Hl = H_total;
228
229
230
231
232
233
234 %%%%%%%%%%%%%%%%%%%%%%%%% RIGHT PATTERN ACQUISITION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
235
236
237 x1 = a10(1)/a10(3);
238 x4 = a11(1)/a11(3);
239
240 y1 = a10(2)/a10(3);
241 y4 = a11(2)/a11(3);
242
243
244 figure(2);
245 hold on;
246 plot([x1 x4],[y1 y4],'c-');
247 plot([x1 x4],[y1 y4],'co');
248 hold off;
249
250 title(['Click on the two remaining extreme corners of the right rectangular pattern... Image ' num2str(kk)]);
251
252 disp('Click on the two remaining extreme corners of the right rectangular pattern...');
253
254 [x,y] = ginput3(2);
255
256 [Xc,good,bad,type] = cornerfinder([x';y'],I,winty,wintx); % the four corners
257
258 x = Xc(1,:)';
259 y = Xc(2,:)';
260
261 [y,indy] = sort(y);
262 x = x(indy);
263
264 x2 = x(2);
265 x3 = x(1);
266
267 y2 = y(2);
268 y3 = y(1);
269
270
271 x = [x1;x2;x3;x4];
272 y = [y1;y2;y3;y4];
273
274 figure(2); hold on;
275 plot([x;x(1)],[y;y(1)],'c-');
276 plot(x,y,'oc');
277 hx=text((x(4)+x(3))/2,(y(4)+y(3))/2 - 20,'X');
278 set(hx,'color','c','Fontsize',14);
279 hy=text((x(4)+x(1))/2-20,(y(4)+y(1))/2,'Y');
280 set(hy,'color','c','Fontsize',14);
281 hold off;
282 drawnow;
283
284
285 % Try to automatically count the number of squares in the grid
286
287 n_sq_x1 = count_squares(I,x1,y1,x2,y2,wintx);
288 n_sq_x2 = count_squares(I,x3,y3,x4,y4,wintx);
289 n_sq_y1 = count_squares(I,x2,y2,x3,y3,wintx);
290 n_sq_y2 = count_squares(I,x4,y4,x1,y1,wintx);
291
292
293
294 % If could not count the number of squares, enter manually
295
296 if (n_sq_x1~=n_sq_x2)|(n_sq_y1~=n_sq_y2),
297
298
299 disp('Could not count the number of squares in the grid. Enter manually.');
300 n_sq_x = input('Number of squares along the X direction ([]=10) = '); %6
301 if isempty(n_sq_x), n_sq_x = 10; end;
302 n_sq_y = input('Number of squares along the Y direction ([]=10) = '); %6
303 if isempty(n_sq_y), n_sq_y = 10; end;
304
305 else
306
307 n_sq_x = n_sq_x1;
308 n_sq_y = n_sq_y1;
309
310 end;
311
312
313 if 1,
314 % Enter the size of each square
315
316 dX = input(['Size dX of each square along the X direction ([]=' num2str(dX_default) 'cm) = ']);
317 dY = input(['Size dY of each square along the Y direction ([]=' num2str(dY_default) 'cm) = ']);
318 if isempty(dX), dX = dX_default; else dX_default = dX; end;
319 if isempty(dY), dY = dY_default; else dY_default = dY; end;
320
321 else
322
323 dX = 3;
324 dY = 3;
325
326 end;
327
328
329 % Compute the inside points through computation of the planar homography (collineation)
330
331 a00 = [x(1);y(1);1];
332 a10 = [x(2);y(2);1];
333 a11 = [x(3);y(3);1];
334 a01 = [x(4);y(4);1];
335
336
337 % Compute the planart collineation: (return the normalization matrice as well)
338
339 [Homo,Hnorm,inv_Hnorm] = compute_collineation (a00, a10, a11, a01);
340
341
342 % Build the grid using the planar collineation:
343
344 x_l = ((0:n_sq_x)'*ones(1,n_sq_y+1))/n_sq_x;
345 y_l = (ones(n_sq_x+1,1)*(0:n_sq_y))/n_sq_y;
346 pts = [x_l(:) y_l(:) ones((n_sq_x+1)*(n_sq_y+1),1)]';
347
348 XX = Homo*pts;
349 XX = XX(1:2,:) ./ (ones(2,1)*XX(3,:));
350
351
352 % Complete size of the rectangle
353
354 W = n_sq_x*dX;
355 L = n_sq_y*dY;
356
357
358
359 if 1,
360 %%%%%%%%%%%%%%%%%%%%%%%% ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
361 figure(2);
362 hold on;
363 plot(XX(1,:),XX(2,:),'r+');
364 title('The red crosses should be close to the image corners');
365 hold off;
366
367 disp('If the guessed grid corners (red crosses on the image) are not close to the actual corners,');
368 disp('it is necessary to enter an initial guess for the radial distortion factor kc (useful for subpixel detection)');
369 quest_distort = input('Need of an initial guess for distortion? ([]=no, other=yes) ');
370
371 quest_distort = ~isempty(quest_distort);
372
373 if quest_distort,
374 % Estimation of focal length:
375 c_g = [size(I,2);size(I,1)]/2 + .5;
376 f_g = Distor2Calib(0,[[x(1) x(2) x(4) x(3)] - c_g(1);[y(1) y(2) y(4) y(3)] - c_g(2)],1,1,4,W,L,[-W/2 W/2 W/2 -W/2;L/2 L/2 -L/2 -L/2; 0 0 0 0],100,1,1);
377 f_g = mean(f_g);
378 script_fit_distortion;
379 end;
380 %%%%%%%%%%%%%%%%%%%%% END ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
381 end;
382
383
384 Np = (n_sq_x+1)*(n_sq_y+1);
385
386 disp('Corner extraction...');
387
388 grid_pts = cornerfinder(XX,I,winty,wintx); %%% Finds the exact corners at every points!
389
390 %save all_corners x y grid_pts
391
392 grid_pts = grid_pts - 1; % subtract 1 to bring the origin to (0,0) instead of (1,1) in matlab (not necessary in C)
393
394
395 % Global Homography from plane to pixel coordinates:
396
397 H_total = [1 0 -1 ; 0 1 -1 ; 0 0 1]*Homo*[1 0 0;0 -1 1;0 0 1]*[1/W 0 0 ; 0 1/L 0; 0 0 1];
398 % WARNING!!! the first matrix (on the left side) takes care of the transformation of the pixel cooredinates by -1 (previous line)
399 % If it is not done, then this matrix should not appear (in C)
400 H_total = H_total / H_total(3,3);
401
402
403 ind_corners = [1 n_sq_x+1 (n_sq_x+1)*n_sq_y+1 (n_sq_x+1)*(n_sq_y+1)]; % index of the 4 corners
404 ind_orig = (n_sq_x+1)*n_sq_y + 1;
405 xorig = grid_pts(1,ind_orig);
406 yorig = grid_pts(2,ind_orig);
407 dxpos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig+1)]');
408 dypos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig-n_sq_x-1)]');
409
410
411 x_box_kk = [grid_pts(1,:)-(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)-(wintx+.5);grid_pts(1,:)-(wintx+.5)];
412 y_box_kk = [grid_pts(2,:)-(winty+.5);grid_pts(2,:)-(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)-(winty+.5)];
413
414
415 figure(3);
416 hold on;
417 plot(grid_pts(1,:)+1,grid_pts(2,:)+1,'r+');
418 plot(x_box_kk+1,y_box_kk+1,'-b');
419 plot(grid_pts(1,ind_corners)+1,grid_pts(2,ind_corners)+1,'mo');
420 plot(xorig+1,yorig+1,'*m');
421 h = text(xorig-15,yorig-15,'O');
422 set(h,'Color','m','FontSize',14);
423 h2 = text(dxpos(1)-10,dxpos(2)-10,'dX');
424 set(h2,'Color','g','FontSize',14);
425 h3 = text(dypos(1)-25,dypos(2)-3,'dY');
426 set(h3,'Color','g','FontSize',14);
427 xlabel('Xc (in camera frame)');
428 ylabel('Yc (in camera frame)');
429 title('Extracted corners');
430 zoom on;
431 drawnow;
432 hold off;
433
434
435 Xi = reshape(([0:n_sq_x]*dX)'*ones(1,n_sq_y+1),Np,1)';
436 Yi = reshape(ones(n_sq_x+1,1)*[n_sq_y:-1:0]*dY,Np,1)';
437 Zi = zeros(1,Np);
438
439 Xgrid = [Xi;Yi;Zi];
440
441
442 % All the point coordinates (on the image, and in 3D) - for global optimization:
443
444 x = grid_pts;
445 X = Xgrid;
446
447
448 % The right pannel info:
449
450 xr = x;
451 Xr = X;
452 nr_sq_x = n_sq_x;
453 nr_sq_y = n_sq_y;
454 Hr = H_total;
455
456
457
458%%%%%%%% REGROUP THE LEFT AND RIHT PATTERNS %%%%%%%%%%%%%
459
460
461Xr2 = [0 0 1;0 1 0;-1 0 0]*Xr + [dX*nl_sq_x;0;0]*ones(1,length(Xr));
462
463
464x = [xl xr];
465
466X = [Xl Xr2];
467
468
469
470 eval(['x_' num2str(kk) ' = x;']);
471 eval(['X_' num2str(kk) ' = X;']);
472
473 eval(['nl_sq_x_' num2str(kk) ' = nl_sq_x;']);
474 eval(['nl_sq_y_' num2str(kk) ' = nl_sq_y;']);
475
476 eval(['nr_sq_x_' num2str(kk) ' = nr_sq_x;']);
477 eval(['nr_sq_y_' num2str(kk) ' = nr_sq_y;']);
478
479 % Save the global planar homography:
480
481 eval(['Hl_' num2str(kk) ' = Hl;']);
482 eval(['Hr_' num2str(kk) ' = Hr;']); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_distortion.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_distortion.m
new file mode 100755
index 0000000..a0f03de
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_distortion.m
@@ -0,0 +1,38 @@
1function [x_comp] = comp_distortion(x_dist,k2);
2
3% [x_comp] = comp_distortion(x_dist,k2);
4%
5% compensates the radial distortion of the camera
6% on the image plane.
7%
8% x_dist : the image points got without considering the
9% radial distortion.
10% x : The image plane points after correction for the distortion
11%
12% x and x_dist are 2xN arrays
13%
14% NOTE : This compensation has to be done after the substraction
15% of the center of projection, and division by the focal
16% length.
17%
18% (do it up to a second order approximation)
19
20[two,N] = size(x_dist);
21
22if (two ~= 2 ),
23 error('ERROR : The dimension of the points should be 2xN');
24end;
25
26if length(k2) > 2,
27 [x_comp] = comp_distortion_oulu(x_dist,k2);
28else
29
30radius_2= x_dist(1,:).^2 + x_dist(2,:).^2;
31radial_distortion = 1 + ones(2,1)*(k2 * radius_2);
32radius_2_comp = (x_dist(1,:).^2 + x_dist(2,:).^2) ./ radial_distortion(1,:);
33radial_distortion = 1 + ones(2,1)*(k2 * radius_2_comp);
34x_comp = x_dist ./ radial_distortion;
35
36end;
37
38%% Function completely checked : It works fine !!! \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_distortion2.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_distortion2.m
new file mode 100755
index 0000000..532ee9a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_distortion2.m
@@ -0,0 +1,71 @@
1function [x_comp] = comp_distortion(x_dist,k2);
2
3% [x_comp] = comp_distortion(x_dist,k2);
4%
5% compensates the radial distortion of the camera
6% on the image plane.
7%
8% x_dist : the image points got without considering the
9% radial distortion.
10% k2: Radial distortion factor
11%
12% x : The image plane points after correction for the distortion
13%
14% x and x_dist are 2xN arrays
15%
16% NOTE : This compensation has to be done after the substraction
17% of the center of projection, and division by the focal
18% length.
19%
20% Solve for cubic roots using method from Numerical Recipes in C 2nd Ed.
21% pages 184-185.
22
23
24% California Institute of Technology
25% (c) Jean-Yves Bouguet - April 27th, 1998
26
27% fully checked! JYB, april 27th, 1998 - 2am
28
29if k2 ~= 0,
30
31[two,N] = size(x_dist);
32
33if (two ~= 2 ),
34 error('ERROR : The dimension of the points should be 2xN');
35end;
36
37
38ph = atan2(x_dist(2,:),x_dist(1,:));
39
40Q = -1/(3*k2);
41R = -x_dist(1,:)./(2*k2*cos(ph));
42
43R2 = R.^2;
44Q3 = Q^3;
45
46
47if k2 < 0,
48
49 % this works in all practical situations (it starts failing for very large
50 % values of k2)
51
52 th = acos(R./sqrt(Q3));
53 r = -2*sqrt(Q)*cos((th-2*pi)/3);
54
55else
56
57 % note: this always works, even for ridiculous values of k2
58
59 A = (sqrt(R2-Q3)-R).^(1/3);
60 B = Q*(1./A);
61 r = (A+B);
62
63end;
64
65x_comp = [r.*cos(ph); r.*sin(ph)];
66
67else
68
69 x_comp = x_dist;
70
71end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_distortion_oulu.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_distortion_oulu.m
new file mode 100755
index 0000000..67d02d5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_distortion_oulu.m
@@ -0,0 +1,47 @@
1function [x] = comp_distortion_oulu(xd,k);
2
3%comp_distortion_oulu.m
4%
5%[x] = comp_distortion_oulu(xd,k)
6%
7%Compensates for radial and tangential distortion. Model From Oulu university.
8%For more informatino about the distortion model, check the forward projection mapping function:
9%project_points.m
10%
11%INPUT: xd: distorted (normalized) point coordinates in the image plane (2xN matrix)
12% k: Distortion coefficients (radial and tangential) (4x1 vector)
13%
14%OUTPUT: x: undistorted (normalized) point coordinates in the image plane (2xN matrix)
15%
16%Method: Iterative method for compensation.
17%
18%NOTE: This compensation has to be done after the subtraction
19% of the principal point, and division by the focal length.
20
21
22if length(k) < 4,
23
24 [x] = comp_distortion(xd,k);
25
26else
27
28
29 k1 = k(1);
30 k2 = k(2);
31 p1 = k(3);
32 p2 = k(4);
33
34 x = xd; % initial guess
35
36 for kk=1:5;
37
38 r_2 = sum(x.^2);
39 k_radial = 1 + k1 * r_2 + k2 * r_2.^2;
40 delta_x = [2*p1*x(1,:).*x(2,:) + p2*(r_2 + 2*x(1,:).^2) ;
41 p1 * (r_2 + 2*x(2,:).^2)+2*p2*x(1,:).*x(2,:)];
42 x = (xd - delta_x)./(ones(2,1)*k_radial);
43
44 end;
45
46end;
47
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_error_calib.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_error_calib.m
new file mode 100755
index 0000000..c7bf662
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/comp_error_calib.m
@@ -0,0 +1,46 @@
1%%%%%%%%%%%%%%%%%%%% RECOMPUTES THE REPROJECTION ERROR %%%%%%%%%%%%%%%%%%%%%%%%
2
3check_active_images;
4
5% Reproject the patterns on the images, and compute the pixel errors:
6
7ex = []; % Global error vector
8x = []; % Detected corners on the image plane
9y = []; % Reprojected points
10
11if ~exist('alpha_c'),
12 alpha_c = 0;
13end;
14
15for kk = 1:n_ima,
16
17 eval(['omckk = omc_' num2str(kk) ';']);
18 eval(['Tckk = Tc_' num2str(kk) ';']);
19
20 if active_images(kk) & (~isnan(omckk(1,1))),
21
22 %Rkk = rodrigues(omckk);
23
24 eval(['y_' num2str(kk) ' = project_points2(X_' num2str(kk) ',omckk,Tckk,fc,cc,kc,alpha_c);']);
25
26 eval(['ex_' num2str(kk) ' = x_' num2str(kk) ' -y_' num2str(kk) ';']);
27
28 eval(['x_kk = x_' num2str(kk) ';']);
29
30 eval(['ex = [ex ex_' num2str(kk) '];']);
31 eval(['x = [x x_' num2str(kk) '];']);
32 eval(['y = [y y_' num2str(kk) '];']);
33
34 else
35
36 % eval(['y_' num2str(kk) ' = NaN*ones(2,1);']);
37
38
39 % If inactivated image, the error does not make sense:
40 eval(['ex_' num2str(kk) ' = NaN*ones(2,1);']);
41
42 end;
43
44end;
45
46err_std = std(ex')';
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_collineation.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_collineation.m
new file mode 100755
index 0000000..809c309
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_collineation.m
@@ -0,0 +1,66 @@
1function [H,Hnorm,inv_Hnorm] = compute_collineation (a00, a10, a11, a01);
2
3% new formalism using homographies
4
5a00 = a00 / a00(3);
6a10 = a10 / a10(3);
7a11 = a11 / a11(3);
8a01 = a01 / a01(3);
9
10
11% Prenormalization of point coordinates (very important):
12% (Affine normalization)
13
14ax = [a00(1);a10(1);a11(1);a01(1)];
15ay = [a00(2);a10(2);a11(2);a01(2)];
16
17mxx = mean(ax);
18myy = mean(ay);
19ax = ax - mxx;
20ay = ay - myy;
21
22scxx = mean(abs(ax));
23scyy = mean(abs(ay));
24
25
26Hnorm = [1/scxx 0 -mxx/scxx;0 1/scyy -myy/scyy;0 0 1];
27inv_Hnorm = [scxx 0 mxx ; 0 scyy myy; 0 0 1];
28
29
30a00n = Hnorm*a00;
31a10n = Hnorm*a10;
32a11n = Hnorm*a11;
33a01n = Hnorm*a01;
34
35
36% Computation of the vanishing points:
37
38V1n = cross(cross(a00n,a10n),cross(a01n,a11n));
39V2n = cross(cross(a00n,a01n),cross(a10n,a11n));
40
41V1 = inv_Hnorm*V1n;
42V2 = inv_Hnorm*V2n;
43
44
45% Normalizaion of the vanishing points:
46
47V1n = V1n/norm(V1n);
48V2n = V2n/norm(V2n);
49
50
51% Closed-form solution of the coefficients:
52
53alpha_x = (a10n(2)*a00n(1) - a10n(1)*a00n(2))/(V1n(2)*a10n(1)-V1n(1)*a10n(2));
54
55alpha_y = (a01n(2)*a00n(1) - a01n(1)*a00n(2))/(V2n(2)*a01n(1)-V2n(1)*a01n(2));
56
57
58% Remaining Homography
59
60Hrem = [alpha_x*V1n alpha_y*V2n a00n];
61
62
63% Final homography:
64
65H = inv_Hnorm*Hrem;
66
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_extrinsic.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_extrinsic.m
new file mode 100755
index 0000000..5217351
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_extrinsic.m
@@ -0,0 +1,123 @@
1function [omckk,Tckk,Rckk,H,x,ex,JJ] = compute_extrinsic(x_kk,X_kk,fc,cc,kc,alpha_c,MaxIter,thresh_cond),
2
3%compute_extrinsic
4%
5%[omckk,Tckk,Rckk,H,x,ex] = compute_extrinsic(x_kk,X_kk,fc,cc,kc,alpha_c)
6%
7%Computes the extrinsic parameters attached to a 3D structure X_kk given its projection
8%on the image plane x_kk and the intrinsic camera parameters fc, cc and kc.
9%Works with planar and non-planar structures.
10%
11%INPUT: x_kk: Feature locations on the images
12% X_kk: Corresponding grid coordinates
13% fc: Camera focal length
14% cc: Principal point coordinates
15% kc: Distortion coefficients
16% alpha_c: Skew coefficient
17%
18%OUTPUT: omckk: 3D rotation vector attached to the grid positions in space
19% Tckk: 3D translation vector attached to the grid positions in space
20% Rckk: 3D rotation matrices corresponding to the omc vectors
21% H: Homography between points on the grid and points on the image plane (in pixel)
22% This makes sense only if the planar that is used in planar.
23% x: Reprojections of the points on the image plane
24% ex: Reprojection error: ex = x_kk - x;
25%
26%Method: Computes the normalized point coordinates, then computes the 3D pose
27%
28%Important functions called within that program:
29%
30%normalize: Computes the normalize image point coordinates.
31%
32%pose3D: Computes the 3D pose of the structure given the normalized image projection.
33%
34%project_points.m: Computes the 2D image projections of a set of 3D points
35
36
37
38if nargin < 8,
39 thresh_cond = inf;
40end;
41
42
43if nargin < 7,
44 MaxIter = 20;
45end;
46
47
48if nargin < 6,
49 alpha_c = 0;
50 if nargin < 5,
51 kc = zeros(4,1);
52 if nargin < 4,
53 cc = zeros(2,1);
54 if nargin < 3,
55 fc = ones(2,1);
56 if nargin < 2,
57 error('Need 2D projections and 3D points (in compute_extrinsic.m)');
58 return;
59 end;
60 end;
61 end;
62 end;
63end;
64
65% Initialization:
66
67[omckk,Tckk,Rckk] = compute_extrinsic_init(x_kk,X_kk,fc,cc,kc,alpha_c);
68
69% Refinement:
70
71[omckk,Tckk,Rckk,JJ] = compute_extrinsic_refine(omckk,Tckk,x_kk,X_kk,fc,cc,kc,alpha_c,MaxIter,thresh_cond);
72
73
74% computation of the homography (not useful in the end)
75
76H = [Rckk(:,1:2) Tckk];
77
78% Computes the reprojection error in pixels:
79
80x = project_points2(X_kk,omckk,Tckk,fc,cc,kc,alpha_c);
81
82ex = x_kk - x;
83
84
85% Converts the homography in pixel units:
86
87KK = [fc(1) alpha_c*fc(1) cc(1);0 fc(2) cc(2); 0 0 1];
88
89H = KK*H;
90
91
92
93
94return;
95
96
97% Test of compte extrinsic:
98
99Np = 4;
100sx = 10;
101sy = 10;
102sz = 5;
103
104om = randn(3,1);
105T = [0;0;100];
106
107noise = 2/1000;
108
109XX = [sx*randn(1,Np);sy*randn(1,Np);sz*randn(1,Np)];
110xx = project_points(XX,om,T);
111
112xxn = xx + noise * randn(2,Np);
113
114[omckk,Tckk] = compute_extrinsic(xxn,XX);
115
116[om omckk om-omckk]
117[T Tckk T-Tckk]
118
119figure(3);
120plot(xx(1,:),xx(2,:),'r+');
121hold on;
122plot(xxn(1,:),xxn(2,:),'g+');
123hold off;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_extrinsic_init.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_extrinsic_init.m
new file mode 100755
index 0000000..2e6d821
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_extrinsic_init.m
@@ -0,0 +1,151 @@
1function [omckk,Tckk,Rckk] = compute_extrinsic_init(x_kk,X_kk,fc,cc,kc,alpha_c),
2
3%compute_extrinsic
4%
5%[omckk,Tckk,Rckk] = compute_extrinsic_init(x_kk,X_kk,fc,cc,kc,alpha_c)
6%
7%Computes the extrinsic parameters attached to a 3D structure X_kk given its projection
8%on the image plane x_kk and the intrinsic camera parameters fc, cc and kc.
9%Works with planar and non-planar structures.
10%
11%INPUT: x_kk: Feature locations on the images
12% X_kk: Corresponding grid coordinates
13% fc: Camera focal length
14% cc: Principal point coordinates
15% kc: Distortion coefficients
16% alpha_c: Skew coefficient
17%
18%OUTPUT: omckk: 3D rotation vector attached to the grid positions in space
19% Tckk: 3D translation vector attached to the grid positions in space
20% Rckk: 3D rotation matrices corresponding to the omc vectors
21%
22%Method: Computes the normalized point coordinates, then computes the 3D pose
23%
24%Important functions called within that program:
25%
26%normalize: Computes the normalize image point coordinates.
27%
28%pose3D: Computes the 3D pose of the structure given the normalized image projection.
29%
30%project_points.m: Computes the 2D image projections of a set of 3D points
31
32
33
34if nargin < 6,
35 alpha_c = 0;
36 if nargin < 5,
37 kc = zeros(4,1);
38 if nargin < 4,
39 cc = zeros(2,1);
40 if nargin < 3,
41 fc = ones(2,1);
42 if nargin < 2,
43 error('Need 2D projections and 3D points (in compute_extrinsic.m)');
44 return;
45 end;
46 end;
47 end;
48 end;
49end;
50
51
52% Compute the normalized coordinates:
53
54xn = normalize(x_kk,fc,cc,kc,alpha_c);
55
56
57
58Np = size(xn,2);
59
60%% Check for planarity of the structure:
61
62X_mean = mean(X_kk')';
63
64Y = X_kk - (X_mean*ones(1,Np));
65
66YY = Y*Y';
67
68[U,S,V] = svd(YY);
69
70r = S(3,3)/S(2,2);
71
72if (r < 1e-3)|(Np < 6), %1e-3, %1e-4, %norm(X_kk(3,:)) < eps, % Test of planarity
73
74 %fprintf(1,'Planar structure detected: r=%f\n',r);
75
76 % Transform the plane to bring it in the Z=0 plane:
77
78 R_transform = V';
79
80 if det(R_transform) < 0, R_transform = -R_transform; end;
81
82 T_transform = -(R_transform)*X_mean;
83
84 X_new = R_transform*X_kk + T_transform*ones(1,Np);
85
86
87 % Compute the planar homography:
88
89 H = compute_homography (xn,X_new(1:2,:));
90
91 % De-embed the motion parameters from the homography:
92
93 sc = mean([norm(H(:,1));norm(H(:,2))]);
94
95 H = H/sc;
96
97 omckk = rodrigues([H(:,1:2) cross(H(:,1),H(:,2))]);
98 Rckk = rodrigues(omckk);
99 Tckk = H(:,3);
100
101 %If Xc = Rckk * X_new + Tckk, then Xc = Rckk * R_transform * X_kk + Tckk + T_transform
102
103 Tckk = Tckk + Rckk* T_transform;
104 Rckk = Rckk * R_transform;
105
106 omckk = rodrigues(Rckk);
107 Rckk = rodrigues(omckk);
108
109
110else
111
112 %fprintf(1,'Non planar structure detected: r=%f\n',r);
113
114 % Computes an initial guess for extrinsic parameters (works for general 3d structure, not planar!!!):
115 % The DLT method is applied here!!
116
117 J = zeros(2*Np,12);
118
119 xX = (ones(3,1)*xn(1,:)).*X_kk;
120 yX = (ones(3,1)*xn(2,:)).*X_kk;
121
122 J(1:2:end,[1 4 7]) = -X_kk';
123 J(2:2:end,[2 5 8]) = X_kk';
124 J(1:2:end,[3 6 9]) = xX';
125 J(2:2:end,[3 6 9]) = -yX';
126 J(1:2:end,12) = xn(1,:)';
127 J(2:2:end,12) = -xn(2,:)';
128 J(1:2:end,10) = -ones(Np,1);
129 J(2:2:end,11) = ones(Np,1);
130
131 JJ = J'*J;
132 [U,S,V] = svd(JJ);
133
134 RR = reshape(V(1:9,12),3,3);
135
136 if det(RR) < 0,
137 V(:,12) = -V(:,12);
138 RR = -RR;
139 end;
140
141 [Ur,Sr,Vr] = svd(RR);
142
143 Rckk = Ur*Vr';
144
145 sc = norm(V(1:9,12)) / norm(Rckk(:));
146 Tckk = V(10:12,12)/sc;
147
148 omckk = rodrigues(Rckk);
149 Rckk = rodrigues(omckk);
150
151end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_extrinsic_refine.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_extrinsic_refine.m
new file mode 100755
index 0000000..a4d066c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_extrinsic_refine.m
@@ -0,0 +1,113 @@
1function [omckk,Tckk,Rckk,JJ] = compute_extrinsic_refine(omc_init,Tc_init,x_kk,X_kk,fc,cc,kc,alpha_c,MaxIter,thresh_cond),
2
3%compute_extrinsic
4%
5%[omckk,Tckk,Rckk] = compute_extrinsic_refine(x_kk,X_kk,fc,cc,kc,alpha_c,MaxIter)
6%
7%Computes the extrinsic parameters attached to a 3D structure X_kk given its projection
8%on the image plane x_kk and the intrinsic camera parameters fc, cc and kc.
9%Works with planar and non-planar structures.
10%
11%INPUT: x_kk: Feature locations on the images
12% X_kk: Corresponding grid coordinates
13% fc: Camera focal length
14% cc: Principal point coordinates
15% kc: Distortion coefficients
16% alpha_c: Skew coefficient
17% MaxIter: Maximum number of iterations
18%
19%OUTPUT: omckk: 3D rotation vector attached to the grid positions in space
20% Tckk: 3D translation vector attached to the grid positions in space
21% Rckk: 3D rotation matrices corresponding to the omc vectors
22
23%
24%Method: Computes the normalized point coordinates, then computes the 3D pose
25%
26%Important functions called within that program:
27%
28%normalize: Computes the normalize image point coordinates.
29%
30%pose3D: Computes the 3D pose of the structure given the normalized image projection.
31%
32%project_points.m: Computes the 2D image projections of a set of 3D points
33
34
35if nargin < 10,
36 thresh_cond = inf;
37end;
38
39
40if nargin < 9,
41 MaxIter = 20;
42end;
43
44if nargin < 8,
45 alpha_c = 0;
46 if nargin < 7,
47 kc = zeros(4,1);
48 if nargin < 6,
49 cc = zeros(2,1);
50 if nargin < 5,
51 fc = ones(2,1);
52 if nargin < 4,
53 error('Need 2D projections and 3D points (in compute_extrinsic_refine.m)');
54 return;
55 end;
56 end;
57 end;
58 end;
59end;
60
61
62% Initialization:
63
64omckk = omc_init;
65Tckk = Tc_init;
66
67
68% Final optimization (minimize the reprojection error in pixel):
69% through Gradient Descent:
70
71param = [omckk;Tckk];
72
73change = 1;
74
75iter = 0;
76
77%keyboard;
78
79%fprintf(1,'Gradient descent iterations: ');
80
81while (change > 1e-10)&(iter < MaxIter),
82
83 %fprintf(1,'%d...',iter+1);
84
85 [x,dxdom,dxdT] = project_points2(X_kk,omckk,Tckk,fc,cc,kc,alpha_c);
86
87 ex = x_kk - x;
88
89 %keyboard;
90
91 JJ = [dxdom dxdT];
92
93 if cond(JJ) > thresh_cond,
94 change = 0;
95 else
96
97 JJ2 = JJ'*JJ;
98
99 param_innov = inv(JJ2)*(JJ')*ex(:);
100 param_up = param + param_innov;
101 change = norm(param_innov)/norm(param_up);
102 param = param_up;
103 iter = iter + 1;
104
105 omckk = param(1:3);
106 Tckk = param(4:6);
107 end;
108
109end;
110
111%fprintf(1,'\n');
112
113Rckk = rodrigues(omckk);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_homography.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_homography.m
new file mode 100755
index 0000000..fcc9003
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/compute_homography.m
@@ -0,0 +1,163 @@
1function [H,Hnorm,inv_Hnorm] = compute_homography (m,M);
2
3%compute_homography
4%
5%[H,Hnorm,inv_Hnorm] = compute_homography (m,M)
6%
7%Computes the planar homography between the point coordinates on the plane (M) and the image
8%point coordinates (m).
9%
10%INPUT: m: homogeneous coordinates in the image plane (3xN matrix)
11% M: homogeneous coordinates in the plane in 3D (3xN matrix)
12%
13%OUTPUT: H: Homography matrix (3x3 homogeneous matrix)
14% Hnorm: Normlization matrix used on the points before homography computation
15% (useful for numerical stability is points in pixel coordinates)
16% inv_Hnorm: The inverse of Hnorm
17%
18%Definition: m ~ H*M where "~" means equal up to a non zero scalar factor.
19%
20%Method: First computes an initial guess for the homography through quasi-linear method.
21% Then, if the total number of points is larger than 4, optimize the solution by minimizing
22% the reprojection error (in the least squares sense).
23%
24%
25%Important functions called within that program:
26%
27%comp_distortion_oulu: Undistorts pixel coordinates.
28%
29%compute_homography.m: Computes the planar homography between points on the grid in 3D, and the image plane.
30%
31%project_points.m: Computes the 2D image projections of a set of 3D points, and also returns te Jacobian
32% matrix (derivative with respect to the intrinsic and extrinsic parameters).
33% This function is called within the minimization loop.
34
35
36
37
38Np = size(m,2);
39
40if size(m,1)<3,
41 m = [m;ones(1,Np)];
42end;
43
44if size(M,1)<3,
45 M = [M;ones(1,Np)];
46end;
47
48
49m = m ./ (ones(3,1)*m(3,:));
50M = M ./ (ones(3,1)*M(3,:));
51
52% Prenormalization of point coordinates (very important):
53% (Affine normalization)
54
55ax = m(1,:);
56ay = m(2,:);
57
58mxx = mean(ax);
59myy = mean(ay);
60ax = ax - mxx;
61ay = ay - myy;
62
63scxx = mean(abs(ax));
64scyy = mean(abs(ay));
65
66
67Hnorm = [1/scxx 0 -mxx/scxx;0 1/scyy -myy/scyy;0 0 1];
68inv_Hnorm = [scxx 0 mxx ; 0 scyy myy; 0 0 1];
69
70mn = Hnorm*m;
71
72% Compute the homography between m and mn:
73
74% Build the matrix:
75
76L = zeros(2*Np,9);
77
78L(1:2:2*Np,1:3) = M';
79L(2:2:2*Np,4:6) = M';
80L(1:2:2*Np,7:9) = -((ones(3,1)*mn(1,:)).* M)';
81L(2:2:2*Np,7:9) = -((ones(3,1)*mn(2,:)).* M)';
82
83if Np > 4,
84 L = L'*L;
85end;
86
87[U,S,V] = svd(L);
88
89hh = V(:,9);
90hh = hh/hh(9);
91
92Hrem = reshape(hh,3,3)';
93%Hrem = Hrem / Hrem(3,3);
94
95% Final homography:
96
97H = inv_Hnorm*Hrem;
98
99
100%%% Homography refinement if there are more than 4 points:
101
102if Np > 4,
103
104 % Final refinement:
105
106 hhv = reshape(H',9,1);
107 hhv = hhv(1:8);
108
109 for iter=1:10,
110
111 mrep = H * M;
112
113 J = zeros(2*Np,8);
114
115 MMM = (M ./ (ones(3,1)*mrep(3,:)));
116
117 J(1:2:2*Np,1:3) = -MMM';
118 J(2:2:2*Np,4:6) = -MMM';
119
120 mrep = mrep ./ (ones(3,1)*mrep(3,:));
121
122 m_err = m(1:2,:) - mrep(1:2,:);
123 m_err = m_err(:);
124
125 MMM2 = (ones(3,1)*mrep(1,:)) .* MMM;
126 MMM3 = (ones(3,1)*mrep(2,:)) .* MMM;
127
128 J(1:2:2*Np,7:8) = MMM2(1:2,:)';
129 J(2:2:2*Np,7:8) = MMM3(1:2,:)';
130
131 MMM = (M ./ (ones(3,1)*mrep(3,:)))';
132
133 hh_innov = inv(J'*J)*J'*m_err;
134
135 hhv_up = hhv - hh_innov;
136
137 H_up = reshape([hhv_up;1],3,3)';
138
139 %norm(m_err)
140 %norm(hh_innov)
141
142 hhv = hhv_up;
143 H = H_up;
144
145 end;
146
147end;
148
149
150
151
152
153return;
154
155%test of Jacobian
156
157mrep = H*M;
158mrep = mrep ./ (ones(3,1)*mrep(3,:));
159
160m_err = mrep(1:2,:) - m(1:2,:);
161figure(8);
162plot(m_err(1,:),m_err(2,:),'r+');
163std(m_err')
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/cornerfinder.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/cornerfinder.m
new file mode 100755
index 0000000..9bfa51f
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/cornerfinder.m
@@ -0,0 +1,215 @@
1function [xc,good,bad,type] = cornerfinder(xt,I,wintx,winty,wx2,wy2);
2
3%[xc] = cornerfinder(xt,I);
4%
5%Finds the sub-pixel corners on the image I with initial guess xt
6%xt and xc are 2xN matrices. The first component is the x coordinate
7%(horizontal) and the second component is the y coordinate (vertical)
8%
9%Based on Harris corner finder method
10%
11%Finds corners to a precision below .1 pixel!
12%Oct. 14th, 1997 - UPDATED to work with vertical and horizontal edges as well!!!
13%Sept 1998 - UPDATED to handle diverged points: we keep the original points
14%good is a binary vector indicating wether a feature point has been properly
15%found.
16%
17%Add a zero zone of size wx2,wy2
18%July 15th, 1999 - Bug on the mask building... fixed + change to Gaussian mask with higher
19%resolution and larger number of iterations.
20
21
22% California Institute of Technology
23% (c) Jean-Yves Bouguet -- Oct. 14th, 1997
24
25
26
27line_feat = 1; % set to 1 to allow for extraction of line features.
28
29xt = xt';
30xt = fliplr(xt);
31
32
33if nargin < 4,
34 winty = 5;
35 if nargin < 3,
36 wintx = 5;
37 end;
38end;
39
40
41if nargin < 6,
42 wx2 = -1;
43 wy2 = -1;
44end;
45
46
47%mask = ones(2*wintx+1,2*winty+1);
48mask = exp(-((-wintx:wintx)'/(wintx)).^2) * exp(-((-winty:winty)/(winty)).^2);
49
50
51if (wx2>0) & (wy2>0),
52 if ((wintx - wx2)>=2)&((winty - wy2)>=2),
53 mask(wintx+1-wx2:wintx+1+wx2,winty+1-wy2:winty+1+wy2)= zeros(2*wx2+1,2*wy2+1);
54 end;
55end;
56
57offx = [-wintx:wintx]'*ones(1,2*winty+1);
58offy = ones(2*wintx+1,1)*[-winty:winty];
59
60resolution = 0.005;
61
62MaxIter = 10;
63
64[nx,ny] = size(I);
65N = size(xt,1);
66
67xc = xt; % first guess... they don't move !!!
68
69type = zeros(1,N);
70
71
72for i=1:N,
73
74 v_extra = resolution + 1; % just larger than resolution
75
76 compt = 0; % no iteration yet
77
78 while (norm(v_extra) > resolution) & (compt<MaxIter),
79
80 cIx = xc(i,1); %
81 cIy = xc(i,2); % Coords. of the point
82 crIx = round(cIx); % on the initial image
83 crIy = round(cIy); %
84 itIx = cIx - crIx; % Coefficients
85 itIy = cIy - crIy; % to compute
86 if itIx > 0, % the sub pixel
87 vIx = [itIx 1-itIx 0]'; % accuracy.
88 else
89 vIx = [0 1+itIx -itIx]';
90 end;
91 if itIy > 0,
92 vIy = [itIy 1-itIy 0];
93 else
94 vIy = [0 1+itIy -itIy];
95 end;
96
97
98 % What if the sub image is not in?
99
100 if (crIx-wintx-2 < 1), xmin=1; xmax = 2*wintx+5;
101 elseif (crIx+wintx+2 > nx), xmax = nx; xmin = nx-2*wintx-4;
102 else
103 xmin = crIx-wintx-2; xmax = crIx+wintx+2;
104 end;
105
106 if (crIy-winty-2 < 1), ymin=1; ymax = 2*winty+5;
107 elseif (crIy+winty+2 > ny), ymax = ny; ymin = ny-2*winty-4;
108 else
109 ymin = crIy-winty-2; ymax = crIy+winty+2;
110 end;
111
112
113 SI = I(xmin:xmax,ymin:ymax); % The necessary neighborhood
114 SI = conv2(conv2(SI,vIx,'same'),vIy,'same');
115 SI = SI(2:2*wintx+4,2:2*winty+4); % The subpixel interpolated neighborhood
116 [gy,gx] = gradient(SI); % The gradient image
117 gx = gx(2:2*wintx+2,2:2*winty+2); % extraction of the useful parts only
118 gy = gy(2:2*wintx+2,2:2*winty+2); % of the gradients
119
120 px = cIx + offx;
121 py = cIy + offy;
122
123 gxx = gx .* gx .* mask;
124 gyy = gy .* gy .* mask;
125 gxy = gx .* gy .* mask;
126
127
128 bb = [sum(sum(gxx .* px + gxy .* py)); sum(sum(gxy .* px + gyy .* py))];
129
130 a = sum(sum(gxx));
131 b = sum(sum(gxy));
132 c = sum(sum(gyy));
133
134 dt = a*c - b^2;
135
136 xc2 = [c*bb(1)-b*bb(2) a*bb(2)-b*bb(1)]/dt;
137
138
139 %keyboard;
140
141 if line_feat,
142
143 G = [a b;b c];
144 [U,S,V] = svd(G);
145
146 %keyboard;
147
148 % If non-invertible, then project the point onto the edge orthogonal:
149
150 if (S(1,1)/S(2,2) > 50),
151 % projection operation:
152 xc2 = xc2 + sum((xc(i,:)-xc2).*(V(:,2)'))*V(:,2)';
153 type(i) = 1;
154 end;
155
156 end;
157
158
159 %keyboard;
160
161% G = [a b;b c];
162% [U,S,V] = svd(G);
163
164
165% if S(1,1)/S(2,2) > 150,
166% bb2 = U'*bb;
167% xc2 = (V*[bb2(1)/S(1,1) ;0])';
168% else
169% xc2 = [c*bb(1)-b*bb(2) a*bb(2)-b*bb(1)]/dt;
170% end;
171
172
173 %if (abs(a)> 50*abs(c)),
174% xc2 = [(c*bb(1)-b*bb(2))/dt xc(i,2)];
175% elseif (abs(c)> 50*abs(a))
176% xc2 = [xc(i,1) (a*bb(2)-b*bb(1))/dt];
177% else
178% xc2 = [c*bb(1)-b*bb(2) a*bb(2)-b*bb(1)]/dt;
179% end;
180
181 %keyboard;
182
183 v_extra = xc(i,:) - xc2;
184
185 xc(i,:) = xc2;
186
187% keyboard;
188
189 compt = compt + 1;
190
191 end
192end;
193
194
195% check for points that diverge:
196
197delta_x = xc(:,1) - xt(:,1);
198delta_y = xc(:,2) - xt(:,2);
199
200%keyboard;
201
202
203bad = (abs(delta_x) > wintx) | (abs(delta_y) > winty);
204good = ~bad;
205in_bad = find(bad);
206
207% For the diverged points, keep the original guesses:
208
209xc(in_bad,:) = xt(in_bad,:);
210
211xc = fliplr(xc);
212xc = xc';
213
214bad = bad';
215good = good';
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/count_squares.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/count_squares.m
new file mode 100755
index 0000000..0e226c0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/count_squares.m
@@ -0,0 +1,74 @@
1function ns = count_squares(I,x1,y1,x2,y2,win);
2
3%keyboard;
4
5[ny,nx] = size(I);
6
7lambda = [y1 - y2;x2 - x1;x1*y2 - x2*y1];
8
9lambda = 1/sqrt(lambda(1)^2 + lambda(2)^2) * lambda;
10
11l1 = lambda + [0;0;win];
12l2 = lambda - [0;0;win];
13
14
15dx = x2-x1;
16dy = y2 - y1;
17
18
19if abs(dx) > abs(dy),
20
21 if x2 > x1,
22 xs = x1:x2;
23 else
24 xs = x1:-1:x2;
25 end;
26
27 ys = -(lambda(3) + lambda(1)*xs)/lambda(2);
28
29else
30
31 if y2 > y1,
32 ys = y1:y2;
33 else
34 ys = y1:-1:y2;
35 end;
36 xs = -(lambda(3) + lambda(2)*ys)/lambda(1);
37
38end;
39
40
41
42 Np = length(xs);
43
44 xs_mat = ones(2*win + 1,1)*xs;
45 ys_mat = ones(2*win + 1,1)*ys;
46
47 win_mat = (-win:win)'*ones(1,Np);
48
49
50 xs_mat2 = round(xs_mat - win_mat * lambda(1));
51 ys_mat2 = round(ys_mat - win_mat * lambda(2));
52
53 ind_mat = (xs_mat2 - 1) * ny + ys_mat2;
54
55 ima_patch = zeros(2*win + 1,Np);
56
57 ima_patch(:) = I(ind_mat(:));
58
59 %ima2 = ima_patch(:,win+1:end-win);
60
61 filtk = [ones(win,Np);zeros(1,Np);-ones(win,Np)];
62
63 out_f = sum(filtk.*ima_patch);
64
65 out_f_f = conv2(out_f,[1/4 1/2 1/4],'same');
66
67 out_f_f = out_f_f(win+1:end-win);
68
69 ns = length(find(((out_f_f(2:end)>=0)&(out_f_f(1:end-1)<0)) | ((out_f_f(2:end)<=0)&(out_f_f(1:end-1)>0))))+1;
70
71
72
73
74return;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/data_calib.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/data_calib.m
new file mode 100755
index 0000000..422769b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/data_calib.m
@@ -0,0 +1,92 @@
1%%% This script alets the user enter the name of the images (base name, numbering scheme,...
2
3
4% Checks that there are some images in the directory:
5
6l_ras = dir('*ras');
7s_ras = size(l_ras,1);
8l_bmp = dir('*bmp');
9s_bmp = size(l_bmp,1);
10l_tif = dir('*tif');
11s_tif = size(l_tif,1);
12l_pgm = dir('*pgm');
13s_pgm = size(l_pgm,1);
14l_jpg = dir('*jpg');
15s_jpg = size(l_jpg,1);
16
17s_tot = s_ras + s_bmp + s_tif + s_pgm + s_jpg;
18
19if s_tot < 1,
20 fprintf(1,'No image in this directory in either ras, bmp, tif, pgm or jpg format. Change directory and try again.\n');
21 break;
22end;
23
24
25% IF yes, display the directory content:
26
27dir;
28
29Nima_valid = 0;
30
31while (Nima_valid==0),
32
33 fprintf(1,'\n');
34 calib_name = input('Basename camera calibration images (without number nor suffix): ','s');
35
36 format_image = '0';
37
38 while format_image == '0',
39
40 format_image = input('Image format: ([]=''r''=''ras'', ''b''=''bmp'', ''t''=''tif'', ''p''=''pgm'', ''j''=''jpg'', ''m''=''ppm'') ','s');
41
42 if isempty(format_image),
43 format_image = 'ras';
44 end;
45
46 if lower(format_image(1)) == 'm',
47 format_image = 'ppm';
48 else
49 if lower(format_image(1)) == 'b',
50 format_image = 'bmp';
51 else
52 if lower(format_image(1)) == 't',
53 format_image = 'tif';
54 else
55 if lower(format_image(1)) == 'p',
56 format_image = 'pgm';
57 else
58 if lower(format_image(1)) == 'j',
59 format_image = 'jpg';
60 else
61 if lower(format_image(1)) == 'r',
62 format_image = 'ras';
63 else
64 disp('Invalid image format');
65 format_image = '0'; % Ask for format once again
66 end;
67 end;
68 end;
69 end;
70 end;
71 end;
72 end;
73
74
75 check_directory;
76
77end;
78
79
80
81%string_save = 'save calib_data n_ima type_numbering N_slots image_numbers format_image calib_name first_num';
82
83%eval(string_save);
84
85
86
87if (Nima_valid~=0),
88 % Reading images:
89
90 ima_read_calib; % may be launched from the toolbox itself
91end;
92
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/error_analysis.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/error_analysis.m
new file mode 100755
index 0000000..85feac5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/error_analysis.m
@@ -0,0 +1,182 @@
1%%% ERROR_ANALYSIS
2%%% This simulation helps coputing the acturacies of calibration
3%%% Run it after the main calibration
4
5
6
7N_runs = 200;
8
9%N_ima_active = 4;
10
11saving = 1;
12
13if 1, %~exist('fc_list'), % initialization
14
15 % Initialization:
16
17 load Calib_Results;
18 check_active_images;
19
20 fc_list = [];
21 cc_list = [];
22 kc_list = [];
23 active_images_list = [];
24
25
26 for kk=1:n_ima,
27
28 eval(['omc_list_' num2str(kk) ' = [];']);
29 eval(['Tc_list_' num2str(kk) ' = [];']);
30
31 end;
32
33 %sx = median(abs(ex(1,:)))*1.4836;
34 %sy = median(abs(ex(2,:)))*1.4836;
35
36 sx = std(ex(1,:));
37 sy = std(ex(2,:));
38
39 % Saving the feature locations:
40
41 for kk = 1:n_ima,
42
43 eval(['x_save_' num2str(kk) ' = x_' num2str(kk) ';']);
44 eval(['y_save_' num2str(kk) ' = y_' num2str(kk) ';']);
45
46 end;
47
48 active_images_save = active_images;
49 ind_active_save = ind_active;
50
51 fc_save = fc;
52 cc_save = cc;
53 kc_save = kc;
54 KK_save = KK;
55
56
57end;
58
59
60
61
62%%% The main loop:
63
64
65for ntrial = 1:N_runs,
66
67 fprintf(1,'\nRun number: %d\n',ntrial);
68 fprintf(1, '----------\n');
69
70 for kk = 1:n_ima,
71
72 eval(['y_kk = y_save_' num2str(kk) ';'])
73
74 if active_images(kk) & ~isnan(y_kk(1,1)),
75
76 Nkk = size(y_kk,2);
77
78 x_kk_new = y_kk + [sx * randn(1,Nkk);sy*randn(1,Nkk)];
79
80 eval(['x_' num2str(kk) ' = x_kk_new;']);
81
82 end;
83
84 end;
85
86 N_active = length(ind_active_save);
87 junk = randn(1,N_active);
88 [junk,junk2] = sort(junk);
89
90 active_images = zeros(1,n_ima);
91 active_images(ind_active_save(junk2(1:N_ima_active))) = ones(1,N_ima_active);
92
93 fc = fc_save;
94 cc = cc_save;
95 kc = kc_save;
96 KK = KK_save;
97
98 go_calib_optim;
99
100 fc_list = [fc_list fc];
101 cc_list = [cc_list cc];
102 kc_list = [kc_list kc];
103 active_images_list = [active_images_list active_images'];
104
105 for kk=1:n_ima,
106
107 eval(['omc_list_' num2str(kk) ' = [ omc_list_' num2str(kk) ' omc_' num2str(kk) ' ];']);
108 eval(['Tc_list_' num2str(kk) ' = [ Tc_list_' num2str(kk) ' Tc_' num2str(kk) ' ];']);
109
110 end;
111
112end;
113
114
115
116
117if 0,
118
119% Restoring the feature locations:
120
121for kk = 1:n_ima,
122
123 eval(['x_' num2str(kk) ' = x_save_' num2str(kk) ';']);
124
125end;
126
127fprintf(1,'\nFinal run (with the real data)\n');
128fprintf(1, '------------------------------\n');
129
130active_images = active_images_save;
131ind_active = ind_active_save;
132
133go_calib_optim;
134
135fc_list = [fc_list fc];
136cc_list = [cc_list cc];
137kc_list = [kc_list kc];
138active_images_list = [active_images_list active_images'];
139
140for kk=1:n_ima,
141
142 eval(['omc_list_' num2str(kk) ' = [ omc_list_' num2str(kk) ' omc_' num2str(kk) ' ];']);
143 eval(['Tc_list_' num2str(kk) ' = [ Tc_list_' num2str(kk) ' Tc_' num2str(kk) ' ];']);
144
145end;
146
147end;
148
149
150
151
152
153if saving,
154
155disp(['Save Calibration accuracy results under Calib_Accuracies_' num2str(N_ima_active) '.mat']);
156
157string_save = ['save Calib_Accuracies_' num2str(N_ima_active) ' active_images n_ima N_ima_active N_runs active_images_list fc cc kc fc_list cc_list kc_list'];
158
159for kk = 1:n_ima,
160 string_save = [string_save ' Tc_list_' num2str(kk) ' omc_list_' num2str(kk) ' Tc_' num2str(kk) ' omc_' num2str(kk) ];
161end;
162
163eval(string_save);
164
165end;
166
167
168return;
169
170std(fc_list')
171
172std(cc_list')
173
174std(kc_list')
175
176for kk = 1:n_ima,
177
178 eval(['std(Tc_list_' num2str(kk) ''')'])
179
180end;
181
182
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/export_calib_data.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/export_calib_data.m
new file mode 100755
index 0000000..39506a8
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/export_calib_data.m
@@ -0,0 +1,99 @@
1%% Export calibration data (corners + 3D coordinates) to
2%% text files (in Willson-Heikkila's format or Zhang's format)
3
4%% Thanks to Michael Goesele (from the Max-Planck-Institut) for the original suggestion
5%% of adding thsi export function to the toolbox.
6
7
8if ~exist('n_ima'),
9 fprintf(1,'ERROR: No calibration data to export\n');
10
11else
12
13 check_active_images;
14
15 check_extracted_images;
16
17 check_active_images;
18
19 fprintf(1,'Tool that exports calibration data to Willson-Heikkila or Zhang formats\n');
20
21 qformat = -1;
22
23 while (qformat ~=0)&(qformat ~=1),
24
25 fprintf(1,'Two possible formats of export: 0=Willson and Heikkila, 1=Zhang\n')
26 qformat = input('Format of export (enter 0 or 1): ');
27
28 if isempty(qformat)
29 qformat = -1;
30 end;
31
32 if (qformat ~=0)&(qformat ~=1),
33
34 fprintf(1,'Invalid entry. Try again.\n')
35
36 end;
37
38 end;
39
40 if qformat == 0,
41
42 fprintf(1,'\nExport of calibration data to text files (Willson and Heikkila''s format)\n');
43 outputfile = input('File basename: ','s');
44
45 for kk = ind_active,
46
47 eval(['X_kk = X_' num2str(kk) ';']);
48 eval(['x_kk = x_' num2str(kk) ';']);
49
50 Xx = [X_kk ; x_kk]';
51
52 file_name = [outputfile num2str(kk)];
53
54 disp(['Exporting calibration data (3D world + 2D image coordinates) of image ' num2str(kk) ' to file ' file_name '...']);
55
56 eval(['save ' file_name ' Xx -ASCII']);
57
58 end;
59
60 else
61
62 fprintf(1,'\nExport of calibration data to text files (Zhang''s format)\n');
63 modelfile = input('File basename for the 3D world coordinates: ','s');
64 datafile = input('File basename for the 2D image coordinates: ','s');
65
66 for kk = ind_active,
67
68 eval(['X_kk = X_' num2str(kk) ';']);
69 eval(['x_kk = x_' num2str(kk) ';']);
70
71 if ~exist(['n_sq_x_' num2str(kk)]),
72 n_sq_x = 1;
73 n_sq_y = size(X_kk,2);
74 else
75 eval(['n_sq_x = n_sq_x_' num2str(kk) ';']);
76 eval(['n_sq_y = n_sq_y_' num2str(kk) ';']);
77 end;
78
79 X = reshape(X_kk(1,:)',n_sq_x+1,n_sq_y+1)';
80 Y = reshape(X_kk(2,:)',n_sq_x+1,n_sq_y+1)';
81 XY = reshape([X;Y],n_sq_y+1,2*(n_sq_x+1));
82
83 x = reshape(x_kk(1,:)',n_sq_x+1,n_sq_y+1)';
84 y = reshape(x_kk(2,:)',n_sq_x+1,n_sq_y+1)';
85 xy = reshape([x;y],n_sq_y+1,2*(n_sq_x+1));
86
87 disp(['Exporting calibration data of image ' num2str(kk) ' to files ' modelfile num2str(kk) '.txt and ' datafile num2str(kk) '.txt...']);
88
89 eval(['save ' modelfile num2str(kk) '.txt XY -ASCII']);
90 eval(['save ' datafile num2str(kk) '.txt xy -ASCII']);
91
92 end;
93
94
95end;
96
97fprintf(1,'done\n');
98
99end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/ext_calib.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/ext_calib.m
new file mode 100755
index 0000000..04d6319
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/ext_calib.m
@@ -0,0 +1,152 @@
1
2%%%%%%%%%%%%%%%%%%%% SHOW EXTRINSIC RESULTS %%%%%%%%%%%%%%%%%%%%%%%%
3
4if ~exist('n_ima')|~exist('fc'),
5 fprintf(1,'No calibration data available.\n');
6 return;
7end;
8
9check_active_images;
10
11if ~exist(['omc_' num2str(ind_active(1))]),
12 fprintf(1,'No calibration data available.\n');
13 return;
14end;
15
16%if ~exist('no_grid'),
17 no_grid = 0;
18%end;
19
20if ~exist(['n_sq_x_' num2str(ind_active(1))]),
21 no_grid = 1;
22end;
23
24
25if 0,
26
27err_std = std(ex');
28
29fprintf(1,'\n\nCalibration results without principal point estimation:\n\n');
30fprintf(1,'Focal Length: fc = [ %3.5f %3.5f]\n',fc);
31fprintf(1,'Principal point: cc = [ %3.5f %3.5f]\n',cc);
32fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f]\n',kc);
33fprintf(1,'Pixel error: err = [ %3.5f %3.5f]\n\n',err_std);
34
35end;
36
37
38% Color code for each image:
39
40colors = 'brgkcm';
41
42
43%%% Show the extrinsic parameters
44
45if ~exist('dX'),
46 eval(['dX = norm(Tc_' num2str(ind_active(1)) ')/10;']);
47 dY = dX;
48end;
49
50IP = 5*dX*([0 nx-1 nx-1 0 0 ; 0 0 ny-1 ny-1 0;1 1 1 1 1] - [cc;0]*ones(1,5)) ./ ([fc;1]*ones(1,5));
51BASE = 5*dX*([0 1 0 0 0 0;0 0 0 1 0 0;0 0 0 0 0 1]);
52IP = reshape([IP;BASE(:,1)*ones(1,5);IP],3,15);
53
54figure(4);
55[a,b] = view;
56
57figure(4);
58plot3(BASE(1,:),BASE(3,:),-BASE(2,:),'b-','linewidth',2');
59hold on;
60plot3(IP(1,:),IP(3,:),-IP(2,:),'r-','linewidth',2);
61text(6*dX,0,0,'X_c');
62text(-dX,5*dX,0,'Z_c');
63text(0,0,-6*dX,'Y_c');
64text(-dX,-dX,dX,'O_c');
65
66
67for kk = 1:n_ima,
68
69 if active_images(kk);
70
71 if exist(['X_' num2str(kk)]) & exist(['omc_' num2str(kk)]),
72
73 eval(['XX_kk = X_' num2str(kk) ';']);
74
75 if ~isnan(XX_kk(1,1))
76
77 eval(['omc_kk = omc_' num2str(kk) ';']);
78 eval(['Tc_kk = Tc_' num2str(kk) ';']);
79 N_kk = size(XX_kk,2);
80
81 if ~exist(['n_sq_x_' num2str(kk)]),
82 no_grid = 1;
83 else
84 eval(['n_sq_x = n_sq_x_' num2str(kk) ';']);
85 if isnan(n_sq_x(1)),
86 no_grid = 1;
87 end;
88 end;
89
90
91 if ~no_grid,
92 eval(['n_sq_x = n_sq_x_' num2str(kk) ';']);
93 eval(['n_sq_y = n_sq_y_' num2str(kk) ';']);
94 if (N_kk ~= ((n_sq_x+1)*(n_sq_y+1))),
95 no_grid = 1;
96 end;
97 end;
98
99 if ~isnan(omc_kk(1,1)),
100
101 R_kk = rodrigues(omc_kk);
102
103 YY_kk = R_kk * XX_kk + Tc_kk * ones(1,length(XX_kk));
104
105 uu = [-dX;-dY;0]/2;
106 uu = R_kk * uu + Tc_kk;
107
108 if ~no_grid,
109 YYx = zeros(n_sq_x+1,n_sq_y+1);
110 YYy = zeros(n_sq_x+1,n_sq_y+1);
111 YYz = zeros(n_sq_x+1,n_sq_y+1);
112
113 YYx(:) = YY_kk(1,:);
114 YYy(:) = YY_kk(2,:);
115 YYz(:) = YY_kk(3,:);
116
117 %keyboard;
118
119 figure(4);
120 hhh= mesh(YYx,YYz,-YYy);
121 set(hhh,'edgecolor',colors(rem(kk-1,6)+1),'linewidth',1); %,'facecolor','none');
122 %plot3(YY_kk(1,:),YY_kk(3,:),-YY_kk(2,:),['o' colors(rem(kk-1,6)+1)]);
123 text(uu(1),uu(3),-uu(2),num2str(kk),'fontsize',14,'color',colors(rem(kk-1,6)+1));
124 else
125
126 figure(4);
127 plot3(YY_kk(1,:),YY_kk(3,:),-YY_kk(2,:),['.' colors(rem(kk-1,6)+1)]);
128 text(uu(1),uu(3),-uu(2),num2str(kk),'fontsize',14,'color',colors(rem(kk-1,6)+1));
129
130 end;
131
132 end;
133
134 end;
135
136 end;
137
138 end;
139
140end;
141
142figure(4);rotate3d on;
143axis('equal');
144title('Extrinsic parameters');
145%view(60,30);
146view(a,b);
147hold off;
148
149set(4,'Name','3D','NumberTitle','off');
150
151%fprintf(1,'To generate the complete movie associated to the optimization loop, try: check_convergence;\n');
152
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extract_grid.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extract_grid.m
new file mode 100755
index 0000000..0cf9abe
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extract_grid.m
@@ -0,0 +1,234 @@
1function [x,X,n_sq_x,n_sq_y,ind_orig,ind_x,ind_y] = extract_grid(I,wintx,winty,fc,cc,kc,dX,dY);
2
3map = gray(256);
4
5minI = min(I(:));
6maxI = max(I(:));
7
8Id = 255*(I - minI)/(maxI - minI);
9
10 figure(2);
11 image(Id);
12 colormap(map);
13
14
15 if nargin < 2,
16
17 disp('Window size for corner finder (wintx and winty):');
18 wintx = input('wintx ([] = 5) = ');
19 if isempty(wintx), wintx = 5; end;
20 wintx = round(wintx);
21 winty = input('winty ([] = 5) = ');
22 if isempty(winty), winty = 5; end;
23 winty = round(winty);
24
25 fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1);
26
27 end;
28
29
30
31 title('Click on the four extreme corners of the rectangular pattern...');
32
33 disp('Click on the four extreme corners of the rectangular complete pattern...');
34
35 [x,y] = ginput3(4);
36
37 [Xc,good,bad,type] = cornerfinder([x';y'],I,winty,wintx); % the four corners
38
39 x = Xc(1,:)';
40 y = Xc(2,:)';
41
42 [y,indy] = sort(y);
43 x = x(indy);
44
45 if (x(2) > x(1)),
46 x4 = x(1);y4 = y(1); x3 = x(2); y3 = y(2);
47 else
48 x4 = x(2);y4 = y(2); x3 = x(1); y3 = y(1);
49 end;
50 if (x(3) > x(4)),
51 x2 = x(3);y2 = y(3); x1 = x(4); y1 = y(4);
52 else
53 x2 = x(4);y2 = y(4); x1 = x(3); y1 = y(3);
54 end;
55
56 x = [x1;x2;x3;x4];
57 y = [y1;y2;y3;y4];
58
59
60 figure(2); hold on;
61 plot([x;x(1)],[y;y(1)],'g-');
62 plot(x,y,'og');
63 hx=text((x(4)+x(3))/2,(y(4)+y(3))/2 - 20,'X');
64 set(hx,'color','g','Fontsize',14);
65 hy=text((x(4)+x(1))/2-20,(y(4)+y(1))/2,'Y');
66 set(hy,'color','g','Fontsize',14);
67 hold off;
68
69
70 % Try to automatically count the number of squares in the grid
71
72 n_sq_x1 = count_squares(I,x1,y1,x2,y2,wintx);
73 n_sq_x2 = count_squares(I,x3,y3,x4,y4,wintx);
74 n_sq_y1 = count_squares(I,x2,y2,x3,y3,wintx);
75 n_sq_y2 = count_squares(I,x4,y4,x1,y1,wintx);
76
77
78
79 % If could not count the number of squares, enter manually
80
81 if (n_sq_x1~=n_sq_x2)|(n_sq_y1~=n_sq_y2),
82
83
84 disp('Could not count the number of squares in the grid. Enter manually.');
85 n_sq_x = input('Number of squares along the X direction ([]=10) = '); %6
86 if isempty(n_sq_x), n_sq_x = 10; end;
87 n_sq_y = input('Number of squares along the Y direction ([]=10) = '); %6
88 if isempty(n_sq_y), n_sq_y = 10; end;
89
90 else
91
92 n_sq_x = n_sq_x1;
93 n_sq_y = n_sq_y1;
94
95 end;
96
97 if ~exist('dX')|~exist('dY'),
98
99 % Enter the size of each square
100
101 dX = input(['Size dX of each square along the X direction ([]=30mm) = ']);
102 dY = input(['Size dY of each square along the Y direction ([]=30mm) = ']);
103 if isempty(dX), dX = 30; end;
104 if isempty(dY), dY = 30; end;
105
106 end;
107
108
109 % Compute the inside points through computation of the planar homography (collineation)
110
111 a00 = [x(1);y(1);1];
112 a10 = [x(2);y(2);1];
113 a11 = [x(3);y(3);1];
114 a01 = [x(4);y(4);1];
115
116
117 % Compute the planart collineation: (return the normalization matrice as well)
118
119 [Homo,Hnorm,inv_Hnorm] = compute_homography ([a00 a10 a11 a01],[0 1 1 0;0 0 1 1;1 1 1 1]);
120
121
122 % Build the grid using the planar collineation:
123
124 x_l = ((0:n_sq_x)'*ones(1,n_sq_y+1))/n_sq_x;
125 y_l = (ones(n_sq_x+1,1)*(0:n_sq_y))/n_sq_y;
126 pts = [x_l(:) y_l(:) ones((n_sq_x+1)*(n_sq_y+1),1)]';
127
128 XX = Homo*pts;
129 XX = XX(1:2,:) ./ (ones(2,1)*XX(3,:));
130
131
132 % Complete size of the rectangle
133
134 W = n_sq_x*dX;
135 L = n_sq_y*dY;
136
137
138
139 if nargin < 6,
140
141 %%%%%%%%%%%%%%%%%%%%%%%% ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
142 figure(2);
143 hold on;
144 plot(XX(1,:),XX(2,:),'r+');
145 title('The red crosses should be close to the image corners');
146 hold off;
147
148 disp('If the guessed grid corners (red crosses on the image) are not close to the actual corners,');
149 disp('it is necessary to enter an initial guess for the radial distortion factor kc (useful for subpixel detection)');
150 quest_distort = input('Need of an initial guess for distortion? ([]=no, other=yes) ');
151
152 quest_distort = ~isempty(quest_distort);
153
154 if quest_distort,
155 % Estimation of focal length:
156 c_g = [size(I,2);size(I,1)]/2 + .5;
157 f_g = Distor2Calib(0,[[x(1) x(2) x(4) x(3)] - c_g(1);[y(1) y(2) y(4) y(3)] - c_g(2)],1,1,4,W,L,[-W/2 W/2 W/2 -W/2;L/2 L/2 -L/2 -L/2; 0 0 0 0],100,1,1);
158 f_g = mean(f_g);
159 script_fit_distortion;
160 end;
161 %%%%%%%%%%%%%%%%%%%%% END ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
162
163 else
164
165 xy_corners_undist = comp_distortion_oulu([(x' - cc(1))/fc(1);(y'-cc(2))/fc(1)],kc);
166
167 xu = xy_corners_undist(1,:)';
168 yu = xy_corners_undist(2,:)';
169
170 [XXu] = projectedGrid ( [xu(1);yu(1)], [xu(2);yu(2)],[xu(3);yu(3)], [xu(4);yu(4)],n_sq_x+1,n_sq_y+1); % The full grid
171
172 r2 = sum(XXu.^2);
173 XX = (ones(2,1)*(1 + kc(1) * r2 + kc(2) * (r2.^2))) .* XXu;
174 XX(1,:) = fc(1)*XX(1,:)+cc(1);
175 XX(2,:) = fc(2)*XX(2,:)+cc(2);
176
177 end;
178
179
180 Np = (n_sq_x+1)*(n_sq_y+1);
181
182 disp('Corner extraction...');
183
184 grid_pts = cornerfinder(XX,I,winty,wintx); %%% Finds the exact corners at every points!
185
186 grid_pts = grid_pts - 1; % subtract 1 to bring the origin to (0,0) instead of (1,1) in matlab (not necessary in C)
187
188 ind_corners = [1 n_sq_x+1 (n_sq_x+1)*n_sq_y+1 (n_sq_x+1)*(n_sq_y+1)]; % index of the 4 corners
189 ind_orig = (n_sq_x+1)*n_sq_y + 1;
190 xorig = grid_pts(1,ind_orig);
191 yorig = grid_pts(2,ind_orig);
192 dxpos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig+1)]');
193 dypos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig-n_sq_x-1)]');
194
195
196 ind_x = (n_sq_x+1)*(n_sq_y + 1);
197 ind_y = 1;
198
199 x_box_kk = [grid_pts(1,:)-(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)-(wintx+.5);grid_pts(1,:)-(wintx+.5)];
200 y_box_kk = [grid_pts(2,:)-(winty+.5);grid_pts(2,:)-(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)-(winty+.5)];
201
202
203 figure(3);
204 image(Id); colormap(map); hold on;
205 plot(grid_pts(1,:)+1,grid_pts(2,:)+1,'r+');
206 plot(x_box_kk+1,y_box_kk+1,'-b');
207 plot(grid_pts(1,ind_corners)+1,grid_pts(2,ind_corners)+1,'mo');
208 plot(xorig+1,yorig+1,'*m');
209 h = text(xorig-15,yorig-15,'O');
210 set(h,'Color','m','FontSize',14);
211 h2 = text(dxpos(1)-10,dxpos(2)-10,'dX');
212 set(h2,'Color','g','FontSize',14);
213 h3 = text(dypos(1)-25,dypos(2)-3,'dY');
214 set(h3,'Color','g','FontSize',14);
215 xlabel('Xc (in camera frame)');
216 ylabel('Yc (in camera frame)');
217 title('Extracted corners');
218 zoom on;
219 drawnow;
220 hold off;
221
222
223 Xi = reshape(([0:n_sq_x]*dX)'*ones(1,n_sq_y+1),Np,1)';
224 Yi = reshape(ones(n_sq_x+1,1)*[n_sq_y:-1:0]*dY,Np,1)';
225 Zi = zeros(1,Np);
226
227 Xgrid = [Xi;Yi;Zi];
228
229
230 % All the point coordinates (on the image, and in 3D) - for global optimization:
231
232 x = grid_pts;
233 X = Xgrid;
234
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extract_parameters.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extract_parameters.m
new file mode 100755
index 0000000..035b97d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extract_parameters.m
@@ -0,0 +1,46 @@
1
2%%% Extraction of the final intrinsic and extrinsic paramaters:
3
4check_active_images;
5
6fc = solution(1:2);%***
7cc = solution(3:4);%***
8alpha_c = solution(5);%***
9kc = solution(6:9);%***
10
11
12% Calibration matrix:
13
14KK = [fc(1) fc(1)*alpha_c cc(1);0 fc(2) cc(2); 0 0 1];
15inv_KK = inv(KK);
16
17% Extract the extrinsic paramters, and recomputer the collineations
18
19for kk = 1:n_ima,
20
21 if active_images(kk),
22
23 omckk = solution(15+6*(kk-1) + 1:15+6*(kk-1) + 3);%***
24 Tckk = solution(15+6*(kk-1) + 4:15+6*(kk-1) + 6);%***
25
26 Rckk = rodrigues(omckk);
27
28 Hkk = KK * [Rckk(:,1) Rckk(:,2) Tckk];
29
30 Hkk = Hkk / Hkk(3,3);
31
32 else
33
34 omckk = NaN*ones(3,1);
35 Tckk = NaN*ones(3,1);
36 Rckk = NaN*ones(3,3);
37 Hkk = NaN*ones(3,3);
38
39 end;
40
41 eval(['omc_' num2str(kk) ' = omckk;']);
42 eval(['Rc_' num2str(kk) ' = Rckk;']);
43 eval(['Tc_' num2str(kk) ' = Tckk;']);
44 eval(['H_' num2str(kk) '= Hkk;']);
45
46end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extract_parameters3D.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extract_parameters3D.m
new file mode 100755
index 0000000..841c6ab
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extract_parameters3D.m
@@ -0,0 +1,36 @@
1
2%%% Extraction of the final intrinsic and extrinsic paramaters:
3
4
5fc = solution(1:2);
6kc = solution(3:6);
7cc = solution(6*n_ima + 4 +3:6*n_ima + 5 +3);
8
9% Calibration matrix:
10
11KK = [fc(1) 0 cc(1);0 fc(2) cc(2); 0 0 1];
12inv_KK = inv(KK);
13
14% Extract the extrinsic paramters, and recomputer the collineations
15
16for kk = 1:n_ima,
17
18 omckk = solution(4+6*(kk-1) + 3:6*kk + 3);
19
20 Tckk = solution(6*kk+1 + 3:6*kk+3 + 3);
21
22 Rckk = rodrigues(omckk);
23
24 Hlkk = KK * [Rckk(:,1) Rckk(:,2) Tckk];
25
26 Hlkk = Hlkk / Hlkk(3,3);
27
28 eval(['omc_' num2str(kk) ' = omckk;']);
29 eval(['Rc_' num2str(kk) ' = Rckk;']);
30 eval(['Tc_' num2str(kk) ' = Tckk;']);
31
32 eval(['Hl_' num2str(kk) '=Hlkk;']);
33
34end;
35
36
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extrinsic_computation.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extrinsic_computation.m
new file mode 100755
index 0000000..fbba78e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/extrinsic_computation.m
@@ -0,0 +1,185 @@
1%%% INPUT THE IMAGE FILE NAME:
2
3if ~exist('fc')|~exist('cc')|~exist('kc')|~exist('alpha_c'),
4 fprintf(1,'No intrinsic camera parameters available.\n');
5 return;
6end;
7
8dir;
9
10fprintf(1,'\n');
11disp('Computation of the extrinsic parameters from an image of a pattern');
12disp('The intrinsic camera parameters are assumed to be known (previously computed)');
13
14fprintf(1,'\n');
15image_name = input('Image name (full name without extension): ','s');
16
17format_image2 = '0';
18
19while format_image2 == '0',
20
21 format_image2 = input('Image format: ([]=''r''=''ras'', ''b''=''bmp'', ''t''=''tif'', ''p''=''pgm'', ''j''=''jpg'', ''m''=''ppm'') ','s');
22
23 if isempty(format_image2),
24 format_image2 = 'ras';
25 end;
26
27 if lower(format_image2(1)) == 'm',
28 format_image2 = 'ppm';
29 else
30 if lower(format_image2(1)) == 'b',
31 format_image2 = 'bmp';
32 else
33 if lower(format_image2(1)) == 't',
34 format_image2 = 'tif';
35 else
36 if lower(format_image2(1)) == 'p',
37 format_image2 = 'pgm';
38 else
39 if lower(format_image2(1)) == 'j',
40 format_image2 = 'jpg';
41 else
42 if lower(format_image2(1)) == 'r',
43 format_image2 = 'ras';
44 else
45 disp('Invalid image format');
46 format_image2 = '0'; % Ask for format once again
47 end;
48 end;
49 end;
50 end;
51 end;
52 end;
53end;
54
55ima_name = [image_name '.' format_image2];
56
57
58%%% READ IN IMAGE:
59
60if format_image2(1) == 'p',
61 if format_image2(2) == 'p',
62 I = double(loadppm(ima_name));
63 else
64 I = double(loadpgm(ima_name));
65 end;
66else
67 if format_image2(1) == 'r',
68 I = readras(ima_name);
69 else
70 I = double(imread(ima_name));
71 end;
72end;
73
74if size(I,3)>1,
75 I = I(:,:,2);
76end;
77
78
79%%% EXTRACT GRID CORNERS:
80
81fprintf(1,'\nExtraction of the grid corners on the image\n');
82
83disp('Window size for corner finder (wintx and winty):');
84wintx = input('wintx ([] = 5) = ');
85if isempty(wintx), wintx = 5; end;
86wintx = round(wintx);
87winty = input('winty ([] = 5) = ');
88if isempty(winty), winty = 5; end;
89winty = round(winty);
90
91fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1);
92
93[x_ext,X_ext,n_sq_x,n_sq_y,ind_orig,ind_x,ind_y] = extract_grid(I,wintx,winty,fc,cc,kc);
94
95
96
97%%% Computation of the Extrinsic Parameters attached to the grid:
98
99[omc_ext,Tc_ext,Rc_ext,H_ext] = compute_extrinsic(x_ext,X_ext,fc,cc,kc,alpha_c);
100
101
102%%% Reproject the points on the image:
103
104[x_reproj] = project_points2(X_ext,omc_ext,Tc_ext,fc,cc,kc,alpha_c);
105
106err_reproj = x_ext - x_reproj;
107
108err_std2 = std(err_reproj')';
109
110
111Basis = [X_ext(:,[ind_orig ind_x ind_orig ind_y ind_orig ])];
112
113VX = Basis(:,2) - Basis(:,1);
114VY = Basis(:,4) - Basis(:,1);
115
116nX = norm(VX);
117nY = norm(VY);
118
119VZ = min(nX,nY) * cross(VX/nX,VY/nY);
120
121Basis = [Basis VZ];
122
123[x_basis] = project_points2(Basis,omc_ext,Tc_ext,fc,cc,kc,alpha_c);
124
125dxpos = (x_basis(:,2) + x_basis(:,1))/2;
126dypos = (x_basis(:,4) + x_basis(:,3))/2;
127dzpos = (x_basis(:,6) + x_basis(:,5))/2;
128
129
130
131figure(2);
132image(I);
133colormap(gray(256));
134hold on;
135plot(x_ext(1,:)+1,x_ext(2,:)+1,'r+');
136plot(x_reproj(1,:)+1,x_reproj(2,:)+1,'yo');
137h = text(x_ext(1,ind_orig)-25,x_ext(2,ind_orig)-25,'O');
138set(h,'Color','g','FontSize',14);
139h2 = text(dxpos(1)+1,dxpos(2)-30,'X');
140set(h2,'Color','g','FontSize',14);
141h3 = text(dypos(1)-30,dypos(2)+1,'Y');
142set(h3,'Color','g','FontSize',14);
143h4 = text(dzpos(1)-10,dzpos(2)-20,'Z');
144set(h4,'Color','g','FontSize',14);
145plot(x_basis(1,:)+1,x_basis(2,:)+1,'g-','linewidth',2);
146title('Image points (+) and reprojected grid points (o)');
147hold off;
148
149
150fprintf(1,'\n\nExtrinsic parameters:\n\n');
151fprintf(1,'Translation vector: Tc_ext = [ %3.6f \t %3.6f \t %3.6f ]\n',Tc_ext);
152fprintf(1,'Rotation vector: omc_ext = [ %3.6f \t %3.6f \t %3.6f ]\n',omc_ext);
153fprintf(1,'Rotation matrix: Rc_ext = [ %3.6f \t %3.6f \t %3.6f\n',Rc_ext(1,:)');
154fprintf(1,' %3.6f \t %3.6f \t %3.6f\n',Rc_ext(2,:)');
155fprintf(1,' %3.6f \t %3.6f \t %3.6f ]\n',Rc_ext(3,:)');
156fprintf(1,'Pixel error: err = [ %3.5f \t %3.5f ]\n\n',err_std2);
157
158
159
160
161
162return;
163
164
165% Stores the results:
166
167kk = 1;
168
169% Stores location of grid wrt camera:
170
171eval(['omc_' num2str(kk) ' = omc_ext;']);
172eval(['Tc_' num2str(kk) ' = Tc_ext;']);
173
174% Stores the projected points:
175
176eval(['y_' num2str(kk) ' = x_reproj;']);
177eval(['X_' num2str(kk) ' = X_ext;']);
178eval(['x_' num2str(kk) ' = x_ext;']);
179
180
181% Organize the points in a grid:
182
183eval(['n_sq_x_' num2str(kk) ' = n_sq_x;']);
184eval(['n_sq_y_' num2str(kk) ' = n_sq_y;']);
185 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/fixallvariables.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/fixallvariables.m
new file mode 100755
index 0000000..b5808f3
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/fixallvariables.m
@@ -0,0 +1,19 @@
1% Code that clears all empty or NaN variables
2
3varlist = whos;
4
5if ~isempty(varlist),
6
7 Nvar = size(varlist,1);
8
9 for c_var = 1:Nvar,
10
11 var2fix = varlist(c_var).name;
12
13 fixvariable;
14
15 end;
16
17end;
18
19clear varlist var2fix Nvar c_var \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/fixvariable.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/fixvariable.m
new file mode 100755
index 0000000..2213431
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/fixvariable.m
@@ -0,0 +1,18 @@
1% Code that clears an empty variable, or a NaN vsriable.
2% Does not clear structures, or cells.
3
4if exist('var2fix'),
5 if eval(['exist(''' var2fix ''') == 1']),
6 if eval(['isempty(' var2fix ')']),
7 eval(['clear ' var2fix ]);
8 else
9 if eval(['~isstruct(' var2fix ')']),
10 if eval(['~iscell(' var2fix ')']),
11 if eval(['isnan(' var2fix '(1))']),
12 eval(['clear ' var2fix ]);
13 end;
14 end;
15 end;
16 end;
17 end;
18end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/ginput3.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/ginput3.m
new file mode 100755
index 0000000..56fe496
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/ginput3.m
@@ -0,0 +1,216 @@
1function [out1,out2,out3] = ginput2(arg1)
2%GINPUT Graphical input from mouse.
3% [X,Y] = GINPUT(N) gets N points from the current axes and returns
4% the X- and Y-coordinates in length N vectors X and Y. The cursor
5% can be positioned using a mouse (or by using the Arrow Keys on some
6% systems). Data points are entered by pressing a mouse button
7% or any key on the keyboard except carriage return, which terminates
8% the input before N points are entered.
9%
10% [X,Y] = GINPUT gathers an unlimited number of points until the
11% return key is pressed.
12%
13% [X,Y,BUTTON] = GINPUT(N) returns a third result, BUTTON, that
14% contains a vector of integers specifying which mouse button was
15% used (1,2,3 from left) or ASCII numbers if a key on the keyboard
16% was used.
17
18% Copyright (c) 1984-96 by The MathWorks, Inc.
19% $Revision: 5.18 $ $Date: 1996/11/10 17:48:08 $
20
21% Fixed version by Jean-Yves Bouguet to have a cross instead of 2 lines
22% More visible for images
23
24P = NaN*ones(16,16);
25P(1:15,1:15) = 2*ones(15,15);
26P(2:14,2:14) = ones(13,13);
27P(3:13,3:13) = NaN*ones(11,11);
28P(6:10,6:10) = 2*ones(5,5);
29P(7:9,7:9) = 1*ones(3,3);
30
31out1 = []; out2 = []; out3 = []; y = [];
32c = computer;
33if ~strcmp(c(1:2),'PC') & ~strcmp(c(1:2),'MA')
34 tp = get(0,'TerminalProtocol');
35else
36 tp = 'micro';
37end
38
39if ~strcmp(tp,'none') & ~strcmp(tp,'x') & ~strcmp(tp,'micro'),
40 if nargout == 1,
41 if nargin == 1,
42 eval('out1 = trmginput(arg1);');
43 else
44 eval('out1 = trmginput;');
45 end
46 elseif nargout == 2 | nargout == 0,
47 if nargin == 1,
48 eval('[out1,out2] = trmginput(arg1);');
49 else
50 eval('[out1,out2] = trmginput;');
51 end
52 if nargout == 0
53 out1 = [ out1 out2 ];
54 end
55 elseif nargout == 3,
56 if nargin == 1,
57 eval('[out1,out2,out3] = trmginput(arg1);');
58 else
59 eval('[out1,out2,out3] = trmginput;');
60 end
61 end
62else
63
64 fig = gcf;
65 figure(gcf);
66
67 if nargin == 0
68 how_many = -1;
69 b = [];
70 else
71 how_many = arg1;
72 b = [];
73 if isstr(how_many) ...
74 | size(how_many,1) ~= 1 | size(how_many,2) ~= 1 ...
75 | ~(fix(how_many) == how_many) ...
76 | how_many < 0
77 error('Requires a positive integer.')
78 end
79 if how_many == 0
80 ptr_fig = 0;
81 while(ptr_fig ~= fig)
82 ptr_fig = get(0,'PointerWindow');
83 end
84 scrn_pt = get(0,'PointerLocation');
85 loc = get(fig,'Position');
86 pt = [scrn_pt(1) - loc(1), scrn_pt(2) - loc(2)];
87 out1 = pt(1); y = pt(2);
88 elseif how_many < 0
89 error('Argument must be a positive integer.')
90 end
91 end
92
93pointer = get(gcf,'pointer');
94
95set(gcf,'Pointer','custom','PointerShapeCData',P,'PointerShapeHotSpot',[8,8]);
96%set(gcf,'pointer','crosshair');
97 fig_units = get(fig,'units');
98 char = 0;
99
100 while how_many ~= 0
101 % Use no-side effect WAITFORBUTTONPRESS
102 waserr = 0;
103 eval('keydown = wfbp;', 'waserr = 1;');
104 if(waserr == 1)
105 if(ishandle(fig))
106 set(fig,'pointer',pointer,'units',fig_units);
107 error('Interrupted');
108 else
109 error('Interrupted by figure deletion');
110 end
111 end
112
113 ptr_fig = get(0,'CurrentFigure');
114 if(ptr_fig == fig)
115 if keydown
116 char = get(fig, 'CurrentCharacter');
117 button = abs(get(fig, 'CurrentCharacter'));
118 scrn_pt = get(0, 'PointerLocation');
119 set(fig,'units','pixels')
120 loc = get(fig, 'Position');
121 pt = [scrn_pt(1) - loc(1), scrn_pt(2) - loc(2)];
122 set(fig,'CurrentPoint',pt);
123 else
124 button = get(fig, 'SelectionType');
125 if strcmp(button,'open')
126 button = b(length(b));
127 elseif strcmp(button,'normal')
128 button = 1;
129 elseif strcmp(button,'extend')
130 button = 2;
131 elseif strcmp(button,'alt')
132 button = 3;
133 else
134 error('Invalid mouse selection.')
135 end
136 end
137 pt = get(gca, 'CurrentPoint');
138
139 how_many = how_many - 1;
140
141 if(char == 13) % & how_many ~= 0)
142 % if the return key was pressed, char will == 13,
143 % and that's our signal to break out of here whether
144 % or not we have collected all the requested data
145 % points.
146 % If this was an early breakout, don't include
147 % the <Return> key info in the return arrays.
148 % We will no longer count it if it's the last input.
149 break;
150 end
151
152 out1 = [out1;pt(1,1)];
153 y = [y;pt(1,2)];
154 b = [b;button];
155 end
156 end
157
158 set(fig,'pointer',pointer,'units',fig_units);
159
160 if nargout > 1
161 out2 = y;
162 if nargout > 2
163 out3 = b;
164 end
165 else
166 out1 = [out1 y];
167 end
168
169end
170
171%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
172function key = wfbp
173%WFBP Replacement for WAITFORBUTTONPRESS that has no side effects.
174
175% Remove figure button functions
176fprops = {'windowbuttonupfcn','buttondownfcn', ...
177 'windowbuttondownfcn','windowbuttonmotionfcn'};
178fig = gcf;
179fvals = get(fig,fprops);
180set(fig,fprops,{'','','',''})
181
182% Remove all other buttondown functions
183ax = findobj(fig,'type','axes');
184if isempty(ax)
185 ch = {};
186else
187 ch = get(ax,{'Children'});
188end
189for i=1:length(ch),
190 ch{i} = ch{i}(:)';
191end
192h = [ax(:)',ch{:}];
193vals = get(h,{'buttondownfcn'});
194mt = repmat({''},size(vals));
195set(h,{'buttondownfcn'},mt);
196
197% Now wait for that buttonpress, and check for error conditions
198waserr = 0;
199eval(['if nargout==0,', ...
200 ' waitforbuttonpress,', ...
201 'else,', ...
202 ' keydown = waitforbuttonpress;',...
203 'end' ], 'waserr = 1;');
204
205% Put everything back
206if(ishandle(fig))
207 set(fig,fprops,fvals)
208 set(h,{'buttondownfcn'},vals)
209end
210
211if(waserr == 1)
212 error('Interrupted');
213end
214
215if nargout>0, key = keydown; end
216%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/go_calib_optim.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/go_calib_optim.m
new file mode 100755
index 0000000..ad19f64
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/go_calib_optim.m
@@ -0,0 +1,139 @@
1%go_calib_optim
2%
3%Main calibration function. Computes the intrinsic andextrinsic parameters.
4%Runs as a script.
5%
6%INPUT: x_1,x_2,x_3,...: Feature locations on the images
7% X_1,X_2,X_3,...: Corresponding grid coordinates
8%
9%OUTPUT: fc: Camera focal length
10% cc: Principal point coordinates
11% kc: Distortion coefficients
12% KK: The camera matrix (containing fc and cc)
13% omc_1,omc_2,omc_3,...: 3D rotation vectors attached to the grid positions in space
14% Tc_1,Tc_2,Tc_3,...: 3D translation vectors attached to the grid positions in space
15% Rc_1,Rc_2,Rc_3,...: 3D rotation matrices corresponding to the omc vectors
16%
17%Method: Minimizes the pixel reprojection error in the least squares sense over the intrinsic
18% camera parameters, and the extrinsic parameters (3D locations of the grids in space)
19%
20%Note: If the intrinsic camera parameters (fc, cc, kc) do not exist before, they are initialized through
21% the function init_intrinsic_param.m. Otherwise, the variables in memory are used as initial guesses.
22%
23%Note: The row vector active_images consists of zeros and ones. To deactivate an image, set the
24% corresponding entry in the active_images vector to zero.
25%
26%VERY IMPORTANT: This function works for 2D and 3D calibration rigs, except for init_intrinsic_param.m
27%that is so far implemented to work only with 2D rigs.
28%In the future, a more general function will be there.
29%For now, if using a 3D calibration rig, set quick_init to 1 for an easy initialization of the focal length
30
31
32if ~exist('n_ima'),
33 data_calib; % Load the images
34 click_calib; % Extract the corners
35end;
36
37
38check_active_images;
39
40check_extracted_images;
41
42check_active_images;
43
44
45desactivated_images = [];
46
47
48if ~exist('center_optim'),
49 center_optim = 1; %%% Set this variable to 0 if your do not want to estimate the principal point
50 %%% Required when using one image, and VERY RECOMMENDED WHEN USING LESS THAN 4 images
51end;
52
53% Check 3D-ness of the calibration rig:
54rig3D = 0;
55for kk = ind_active,
56 eval(['X_kk = X_' num2str(kk) ';']);
57 if is3D(X_kk),
58 rig3D = 1;
59 end;
60end;
61
62
63if center_optim & (length(ind_active) < 2) & ~rig3D,
64 fprintf(1,'\nPrincipal point rejected from the optimization when using one image and planar rig (center_optim = 1).\n');
65 center_optim = 0; %%% when using a single image, please, no principal point estimation!!!
66 est_alpha = 0;
67end;
68
69if ~exist('dont_ask'),
70 dont_ask = 0;
71end;
72
73if center_optim & (length(ind_active) < 5),
74 fprintf(1,'\nThe principal point estimation may be unreliable (using less than 5 images for calibration).\n');
75 if ~dont_ask,
76 quest = input('Are you sure you want to keep the principal point in the optimization process? ([]=yes, other=no) ');
77 center_optim = isempty(quest);
78 end;
79end;
80
81if center_optim,
82 fprintf(1,'\nINFO: To reject the principal point from the optimization, set center_optim = 0 in go_calib_optim.m\n');
83end;
84
85if ~exist('est_alpha'),
86 est_alpha = 0; % by default, do not estimate skew
87end;
88
89if ~center_optim & (est_alpha),
90 fprintf(1,'WARNING: Since there is no principal point estimation, no skew estimation (est_alpha = 0)\n');
91 est_alpha = 0;
92else
93 if ~est_alpha,
94 fprintf(1,'WARNING: Skew not optimized. Check variable est_alpha.\n');
95 alpha_c = 0;
96 else
97 fprintf(1,'WARNING: Skew is optimized. To disable skew estimation, set est_alpha=0.\n');
98 end;
99end;
100
101
102if ~exist('est_dist');
103 est_dist = [1;1;1;1];
104end;
105if ~prod(est_dist),
106 fprintf(1,'\nWARNING: Distortion not fully estimated. Check variable est_dist.\n');
107end;
108
109
110
111
112%%% MAIN OPTIMIZATION CALL!!!!! (look into this function for the details of implementation)
113go_calib_optim_iter;
114
115
116
117if ~isempty(desactivated_images),
118
119 param_list_save = param_list;
120
121 fprintf(1,'\nNew optimization including the images that have been deactivated during the previous optimization.\n');
122 active_images(desactivated_images) = ones(1,length(desactivated_images));
123 desactivated_images = [];
124
125 go_calib_optim_iter;
126
127 if ~isempty(desactivated_images),
128 fprintf(1,['List of images left desactivated: ' num2str(desactivated_images) '\n' ] );
129 end;
130
131 param_list = [param_list_save(:,1:end-1) param_list];
132
133end;
134
135
136%%%%%%%%%%%%%%%%%%%% GRAPHICAL OUTPUT %%%%%%%%%%%%%%%%%%%%%%%%
137
138%graphout_calib;
139
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/go_calib_optim_iter.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/go_calib_optim_iter.m
new file mode 100755
index 0000000..e3d22f6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/go_calib_optim_iter.m
@@ -0,0 +1,394 @@
1%go_calib_optim_iter
2%
3%Main calibration function. Computes the intrinsic andextrinsic parameters.
4%Runs as a script.
5%
6%INPUT: x_1,x_2,x_3,...: Feature locations on the images
7% X_1,X_2,X_3,...: Corresponding grid coordinates
8%
9%OUTPUT: fc: Camera focal length
10% cc: Principal point coordinates
11% kc: Distortion coefficients
12% KK: The camera matrix (containing fc and cc)
13% omc_1,omc_2,omc_3,...: 3D rotation vectors attached to the grid positions in space
14% Tc_1,Tc_2,Tc_3,...: 3D translation vectors attached to the grid positions in space
15% Rc_1,Rc_2,Rc_3,...: 3D rotation matrices corresponding to the omc vectors
16%
17%Method: Minimizes the pixel reprojection error in the least squares sense over the intrinsic
18% camera parameters, and the extrinsic parameters (3D locations of the grids in space)
19%
20%Note: If the intrinsic camera parameters (fc, cc, kc) do not exist before, they are initialized through
21% the function init_intrinsic_param.m. Otherwise, the variables in memory are used as initial guesses.
22%
23%Note: The row vector active_images consists of zeros and ones. To deactivate an image, set the
24% corresponding entry in the active_images vector to zero.
25%
26%VERY IMPORTANT: This function works for 2D and 3D calibration rigs, except for init_intrinsic_param.m
27%that is so far implemented to work only with 2D rigs.
28%In the future, a more general function will be there.
29%For now, if using a 3D calibration rig, quick_init is set to 1 for an easy initialization of the focal length
30
31
32if ~exist('center_optim'),
33 center_optim = 1; %%% Set this variable to 0 if your do not want to estimate the principal point
34end;
35
36if ~exist('est_dist'),
37 est_dist = [1;1;1;1];
38end;
39
40if ~exist('est_alpha'),
41 est_alpha = 0; % by default, do not estimate skew
42end;
43
44
45% Little fix in case of stupid values in the binary variables:
46center_optim = ~~center_optim;
47est_alpha = ~~est_alpha;
48est_dist = ~~est_dist;
49
50
51if ~exist('nx')&~exist('ny'),
52 fprintf(1,'WARNING: No image size (nx,ny) available. Setting nx=640 and ny=480\n');
53 nx = 640;
54 ny = 480;
55end;
56
57
58check_active_images;
59
60
61quick_init = 0; % Set to 1 for using a quick init (necessary when using 3D rigs)
62
63
64if ~center_optim, % In the case where the principal point is not estimated, keep it at the center of the image
65 fprintf(1,'Principal point not optimized (center_optim=0). It is kept at the center of the image.\n');
66 cc = [(nx-1)/2;(ny-1)/2];
67end;
68
69
70if ~prod(est_dist),
71 fprintf(1,'\nDistortion not fully estimated. Check variable est_dist.\n');
72end;
73
74if ~est_alpha,
75 fprintf(1,'Skew not optimized (est_alpha=0).\n');
76 alpha_c = 0;
77end;
78
79
80% Check 3D-ness of the calibration rig:
81rig3D = 0;
82for kk = ind_active,
83 eval(['X_kk = X_' num2str(kk) ';']);
84 if is3D(X_kk),
85 rig3D = 1;
86 end;
87end;
88
89% If the rig is 3D, then no choice: the only valid initialization is manual!
90if rig3D,
91 quick_init = 1;
92end;
93
94
95
96alpha_smooth = 1; % set alpha_smooth = 1; for steepest gradient descent
97
98
99% Conditioning threshold for view rejection
100thresh_cond = 1e6;
101
102
103
104%% Initialization of the intrinsic parameters (if necessary)
105
106if ~exist('cc'),
107 fprintf(1,'Initialization of the principal point at the center of the image.\n');
108 cc = [(nx-1)/2;(ny-1)/2];
109 alpha_smooth = 0.4; % slow convergence
110end;
111
112
113if ~exist('kc'),
114 fprintf(1,'Initialization of the image distortion to zero.\n');
115 kc = zeros(4,1);
116 alpha_smooth = 0.4; % slow convergence
117end;
118
119if ~exist('alpha_c'),
120 fprintf(1,'Initialization of the image skew to zero.\n');
121 alpha_c = 0;
122 alpha_smooth = 0.4; % slow convergence
123end;
124
125if ~exist('fc')& quick_init,
126 FOV_angle = 35; % Initial camera field of view in degrees
127 fprintf(1,['Initialization of the focal length to a FOV of ' num2str(FOV_angle) ' degrees.\n']);
128 fc = (nx/2)/tan(pi*FOV_angle/360) * ones(2,1);
129 alpha_smooth = 0.4; % slow
130end;
131
132
133if ~exist('fc'),
134 % Initialization of the intrinsic parameters:
135 fprintf(1,'Initialization of the intrinsic parameters using the vanishing points of planar patterns.\n')
136 init_intrinsic_param; % The right way to go (if quick_init is not active)!
137 alpha_smooth = 0.4; % slow convergence
138end;
139
140
141if ~prod(est_dist),
142 % If no distortion estimated, set to zero the variables that are not estimated
143 kc = kc .* est_dist;
144end;
145
146
147
148
149
150%% Initialization of the extrinsic parameters for global minimization:
151
152
153init_param = [fc;cc;alpha_c;kc;zeros(6,1)];
154
155
156
157for kk = 1:n_ima,
158
159 if exist(['x_' num2str(kk)]),
160
161 eval(['x_kk = x_' num2str(kk) ';']);
162 eval(['X_kk = X_' num2str(kk) ';']);
163
164 if (isnan(x_kk(1,1))),
165 if active_images(kk),
166 fprintf(1,'Warning: Cannot calibrate with image %d. Need to extract grid corners first.\n',kk)
167 fprintf(1,' Set active_images(%d)=1; and run Extract grid corners.\n',kk)
168 end;
169 active_images(kk) = 0;
170 end;
171 if active_images(kk),
172 [omckk,Tckk] = compute_extrinsic_init(x_kk,X_kk,fc,cc,kc,alpha_c);
173 [omckk,Tckk,Rckk,JJ_kk] = compute_extrinsic_refine(omckk,Tckk,x_kk,X_kk,fc,cc,kc,alpha_c,20,thresh_cond);
174 if cond(JJ_kk)> thresh_cond,
175 active_images(kk) = 0;
176 omckk = NaN*ones(3,1);
177 Tckk = NaN*ones(3,1);
178 fprintf(1,'\nWarning: View #%d ill-conditioned. This image is now set inactive.\n',kk)
179 desactivated_images = [desactivated_images kk];
180 end;
181 if isnan(omckk(1,1)),
182 %fprintf(1,'\nWarning: Desactivating image %d. Re-activate it later by typing:\nactive_images(%d)=1;\nand re-run optimization\n',[kk kk])
183 active_images(kk) = 0;
184 end;
185 else
186 omckk = NaN*ones(3,1);
187 Tckk = NaN*ones(3,1);
188 end;
189
190 else
191
192 omckk = NaN*ones(3,1);
193 Tckk = NaN*ones(3,1);
194
195 if active_images(kk),
196 fprintf(1,'Warning: Cannot calibrate with image %d. Need to extract grid corners first.\n',kk)
197 fprintf(1,' Set active_images(%d)=1; and run Extract grid corners.\n',kk)
198 end;
199
200 active_images(kk) = 0;
201
202 end;
203
204 eval(['omc_' num2str(kk) ' = omckk;']);
205 eval(['Tc_' num2str(kk) ' = Tckk;']);
206
207 init_param = [init_param; omckk ; Tckk];
208
209end;
210
211
212check_active_images;
213
214
215
216%-------------------- Main Optimization:
217
218fprintf(1,'\nMain calibration optimization procedure - Number of images: %d\n',length(ind_active));
219
220
221param = init_param;
222change = 1;
223
224iter = 0;
225
226fprintf(1,'Gradient descent iterations: ');
227
228param_list = param;
229
230MaxIter = 30;
231
232
233while (change > 1e-6)&(iter < MaxIter),
234
235 fprintf(1,'%d...',iter+1);
236
237
238 %% The first step consists of updating the whole vector of knowns (intrinsic + extrinsic of active
239 %% images) through a one step steepest gradient descent.
240
241 JJ = [];
242 ex = [];
243
244 f = param(1:2);
245 c = param(3:4);
246 alpha = param(5);
247 k = param(6:9);
248
249
250 for kk = 1:n_ima,
251
252 if active_images(kk),
253
254 %omckk = param(4+6*(kk-1) + 3:6*kk + 3);
255
256 %Tckk = param(6*kk+1 + 3:6*kk+3 + 3);
257
258 omckk = param(15+6*(kk-1) + 1:15+6*(kk-1) + 3);
259
260 Tckk = param(15+6*(kk-1) + 4:15+6*(kk-1) + 6);
261
262 if isnan(omckk(1)),
263 fprintf(1,'Intrinsic parameters at frame %d do not exist\n',kk);
264 return;
265 end;
266
267 eval(['X_kk = X_' num2str(kk) ';']);
268 eval(['x_kk = x_' num2str(kk) ';']);
269
270 Np = size(X_kk,2);
271
272 JJkk = zeros(2*Np,n_ima * 6 + 15);
273
274 [x,dxdom,dxdT,dxdf,dxdc,dxdk,dxdalpha] = project_points2(X_kk,omckk,Tckk,f,c,k,alpha);
275
276 exkk = x_kk - x;
277
278 ex = [ex;exkk(:)];
279
280 JJkk(:,1:2) = dxdf;
281 JJkk(:,3:4) = dxdc;
282 JJkk(:,5) = dxdalpha;
283 JJkk(:,6:9) = dxdk;
284 JJkk(:,15+6*(kk-1) + 1:15+6*(kk-1) + 3) = dxdom;
285 JJkk(:,15+6*(kk-1) + 4:15+6*(kk-1) + 6) = dxdT;
286
287
288
289 JJ = [JJ;JJkk];
290
291
292 % Check if this view is ill-conditioned:
293 JJ_kk = [dxdom dxdT];
294 if cond(JJ_kk)> thresh_cond,
295 active_images(kk) = 0;
296 fprintf(1,'\nWarning: View #%d ill-conditioned. This image is now set inactive.\n',kk)
297 desactivated_images = [desactivated_images kk];
298 param(15+6*(kk-1) + 1:15+6*(kk-1) + 6) = NaN*ones(6,1);
299 end;
300
301
302 end;
303
304 end;
305
306
307 % List of active images (necessary if changed):
308 check_active_images;
309
310
311 % The following vector helps to select the variables to update (for only active images):
312
313 ind_Jac = find([ones(2,1);center_optim*ones(2,1);est_alpha;est_dist;zeros(6,1);reshape(ones(6,1)*active_images,6*n_ima,1)])';
314
315
316 JJ = JJ(:,ind_Jac);
317
318 JJ2 = JJ'*JJ;
319
320
321 % Smoothing coefficient:
322
323 alpha_smooth2 = 1-(1-alpha_smooth)^(iter+1); %set to 1 to undo any smoothing!
324
325
326 param_innov = alpha_smooth2*inv(JJ2)*(JJ')*ex;
327 param_up = param(ind_Jac) + param_innov;
328 param(ind_Jac) = param_up;
329
330
331 % New intrinsic parameters:
332
333 fc_current = param(1:2);
334 cc_current = param(3:4);
335 alpha_current = param(5);
336 kc_current = param(6:9);
337
338
339 % Change on the intrinsic parameters:
340 change = norm([fc_current;cc_current] - [f;c])/norm([fc_current;cc_current]);
341
342
343 %% Second step: (optional) - It makes convergence faster, and the region of convergence LARGER!!!
344 %% Recompute the extrinsic parameters only using compute_extrinsic.m (this may be useful sometimes)
345 %% The complete gradient descent method is useful to precisely update the intrinsic parameters.
346
347 MaxIter2 = 20;
348
349
350 for kk = 1:n_ima,
351 if active_images(kk),
352 omc_current = param(15+6*(kk-1) + 1:15+6*(kk-1) + 3);
353 Tc_current = param(15+6*(kk-1) + 4:15+6*(kk-1) + 6);
354 eval(['X_kk = X_' num2str(kk) ';']);
355 eval(['x_kk = x_' num2str(kk) ';']);
356 [omc_current,Tc_current] = compute_extrinsic_init(x_kk,X_kk,fc_current,cc_current,kc_current,alpha_current);
357 [omckk,Tckk,Rckk,JJ_kk] = compute_extrinsic_refine(omc_current,Tc_current,x_kk,X_kk,fc_current,cc_current,kc_current,alpha_current,MaxIter2,thresh_cond);
358 if cond(JJ_kk)> thresh_cond,
359 active_images(kk) = 0;
360 fprintf(1,'\nWarning: View #%d ill-conditioned. This image is now set inactive.\n',kk)
361 desactivated_images = [desactivated_images kk];
362 omckk = NaN*ones(3,1);
363 Tckk = NaN*ones(3,1);
364 end;
365 param(15+6*(kk-1) + 1:15+6*(kk-1) + 3) = omckk;
366 param(15+6*(kk-1) + 4:15+6*(kk-1) + 6) = Tckk;
367 end;
368 end;
369
370 param_list = [param_list param];
371
372 iter = iter + 1;
373
374end;
375
376fprintf(1,'\n');
377
378
379solution = param;
380
381
382%%% Extraction of the final intrinsic and extrinsic paramaters:
383
384extract_parameters;
385
386comp_error_calib;
387
388fprintf(1,'\n\nCalibration results after optimization:\n\n');
389fprintf(1,'Focal Length: fc = [ %3.5f %3.5f ]\n',fc);
390fprintf(1,'Principal point: cc = [ %3.5f %3.5f ]\n',cc);
391fprintf(1,'Skew: alpha_c = [ %3.5f ] => angle of pixel = %3.5f degrees\n',alpha_c,90 - atan(alpha_c)*180/pi);
392fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f ]\n',kc);
393fprintf(1,'Pixel error: err = [ %3.5f %3.5f ]\n\n',err_std);
394
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/ima_read_calib.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/ima_read_calib.m
new file mode 100755
index 0000000..dbbc4e0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/ima_read_calib.m
@@ -0,0 +1,158 @@
1
2if ~exist('calib_name')|~exist('format_image'),
3 data_calib;
4 return;
5end;
6
7check_directory;
8
9if ~exist('n_ima'),
10 data_calib;
11 return;
12end;
13
14check_active_images;
15
16
17images_read = active_images;
18
19
20if exist('image_numbers'),
21 first_num = image_numbers(1);
22end;
23
24
25% Just to fix a minor bug:
26if ~exist('first_num'),
27 first_num = image_numbers(1);
28end;
29
30
31image_numbers = first_num:n_ima-1+first_num;
32
33no_image_file = 0;
34
35i = 1;
36
37while (i <= n_ima), % & (~no_image_file),
38
39 if active_images(i),
40
41 %fprintf(1,'Loading image %d...\n',i);
42
43 if ~type_numbering,
44 number_ext = num2str(image_numbers(i));
45 else
46 number_ext = sprintf(['%.' num2str(N_slots) 'd'],image_numbers(i));
47 end;
48
49 ima_name = [calib_name number_ext '.' format_image];
50
51 if i == ind_active(1),
52 fprintf(1,'Loading image ');
53 end;
54
55 if exist(ima_name),
56
57 fprintf(1,'%d...',i);
58
59 if format_image(1) == 'p',
60 if format_image(2) == 'p',
61 Ii = double(loadppm(ima_name));
62 else
63 Ii = double(loadpgm(ima_name));
64 end;
65 else
66 if format_image(1) == 'r',
67 Ii = readras(ima_name);
68 else
69 Ii = double(imread(ima_name));
70 end;
71 end;
72
73
74 if size(Ii,3)>1,
75 Ii = Ii(:,:,2);
76 end;
77
78 eval(['I_' num2str(i) ' = Ii;']);
79
80 else
81
82 fprintf(1,'%d...no image...',i);
83
84 images_read(i) = 0;
85
86 %no_image_file = 1;
87
88 end;
89
90 end;
91
92 i = i+1;
93
94end;
95
96
97ind_read = find(images_read);
98
99
100
101
102if isempty(ind_read),
103
104 fprintf(1,'\nWARNING! No image were read\n');
105
106 no_image_file = 1;
107
108
109else
110
111
112 %fprintf(1,'\nWARNING! Every exsisting image in the directory is set active.\n');
113
114
115 if no_image_file,
116
117 %fprintf(1,'WARNING! Some images were not read properly\n');
118
119 end;
120
121
122 fprintf(1,'\n');
123
124 if size(I_1,1)~=480,
125 small_calib_image = 1;
126 else
127 small_calib_image = 0;
128 end;
129
130 [Hcal,Wcal] = size(I_1); % size of the calibration image
131
132 [ny,nx] = size(I_1);
133
134 clickname = [];
135
136 map = gray(256);
137
138 %string_save = 'save calib_data n_ima type_numbering N_slots image_numbers format_image calib_name Hcal Wcal nx ny map small_calib_image';
139
140 %eval(string_save);
141
142 disp('done');
143 %click_calib;
144
145end;
146
147if ~exist('map'), map = gray(256); end;
148
149active_images = images_read;
150
151% Show all the calibration images:
152
153
154if ~isempty(ind_read),
155
156 mosaic;
157
158end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/init_intrinsic_param.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/init_intrinsic_param.m
new file mode 100755
index 0000000..94a5240
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/init_intrinsic_param.m
@@ -0,0 +1,158 @@
1%init_intrinsic_param
2%
3%Initialization of the intrinsic parameters.
4%Runs as a script.
5%
6%INPUT: x_1,x_2,x_3,...: Feature locations on the images
7% X_1,X_2,X_3,...: Corresponding grid coordinates
8%
9%OUTPUT: fc: Camera focal length
10% cc: Principal point coordinates
11% kc: Distortion coefficients
12% alpha_c: skew coefficient
13% KK: The camera matrix (containing fc, cc and alpha_c)
14%
15%Method: Computes the planar homographies H_1, H_2, H_3, ... and computes
16% the focal length fc from orthogonal vanishing points constraint.
17% The principal point cc is assumed at the center of the image.
18% Assumes no image distortion (kc = [0;0;0;0])
19%
20%Note: The row vector active_images consists of zeros and ones. To deactivate an image, set the
21% corresponding entry in the active_images vector to zero.
22%
23%
24%Important function called within that program:
25%
26%compute_homography.m: Computes the planar homography between points on the grid in 3D, and the image plane.
27%
28%
29%VERY IMPORTANT: This function works only with 2D rigs.
30%In the future, a more general function will be there (working with 3D rigs as well).
31
32
33
34check_active_images;
35
36if ~exist(['x_' num2str(ind_active(1)) ]),
37 click_calib;
38end;
39
40
41fprintf(1,'\nInitialization of the intrinsic parameters - Number of images: %d\n',length(ind_active));
42
43
44% Initialize the homographies:
45
46for kk = 1:n_ima,
47 eval(['x_kk = x_' num2str(kk) ';']);
48 eval(['X_kk = X_' num2str(kk) ';']);
49 if (isnan(x_kk(1,1))),
50 if active_images(kk),
51 fprintf(1,'WARNING: Cannot calibrate with image %d. Need to extract grid corners first.\n',kk)
52 fprintf(1,' Set active_images(%d)=1; and run Extract grid corners.\n',kk)
53 end;
54 active_images(kk) = 0;
55 end;
56 if active_images(kk),
57 eval(['H_' num2str(kk) ' = compute_homography(x_kk,X_kk(1:2,:));']);
58 else
59 eval(['H_' num2str(kk) ' = NaN*ones(3,3);']);
60 end;
61end;
62
63check_active_images;
64
65% initial guess for principal point and distortion:
66
67if ~exist('nx'), [ny,nx] = size(I); end;
68
69c_init = [nx;ny]/2 - 0.5; % initialize at the center of the image
70k_init = [0;0;0;0]; % initialize to zero (no distortion)
71
72
73
74% Compute explicitely the focal length using all the (mutually orthogonal) vanishing points
75% note: The vanihing points are hidden in the planar collineations H_kk
76
77A = [];
78b = [];
79
80% matrix that subtract the principal point:
81Sub_cc = [1 0 -c_init(1);0 1 -c_init(2);0 0 1];
82
83for kk=1:n_ima,
84
85 if active_images(kk),
86
87 eval(['Hkk = H_' num2str(kk) ';']);
88
89 Hkk = Sub_cc * Hkk;
90
91 % Extract vanishing points (direct and diagonals):
92
93 V_hori_pix = Hkk(:,1);
94 V_vert_pix = Hkk(:,2);
95 V_diag1_pix = (Hkk(:,1)+Hkk(:,2))/2;
96 V_diag2_pix = (Hkk(:,1)-Hkk(:,2))/2;
97
98 V_hori_pix = V_hori_pix/norm(V_hori_pix);
99 V_vert_pix = V_vert_pix/norm(V_vert_pix);
100 V_diag1_pix = V_diag1_pix/norm(V_diag1_pix);
101 V_diag2_pix = V_diag2_pix/norm(V_diag2_pix);
102
103 a1 = V_hori_pix(1);
104 b1 = V_hori_pix(2);
105 c1 = V_hori_pix(3);
106
107 a2 = V_vert_pix(1);
108 b2 = V_vert_pix(2);
109 c2 = V_vert_pix(3);
110
111 a3 = V_diag1_pix(1);
112 b3 = V_diag1_pix(2);
113 c3 = V_diag1_pix(3);
114
115 a4 = V_diag2_pix(1);
116 b4 = V_diag2_pix(2);
117 c4 = V_diag2_pix(3);
118
119 A_kk = [a1*a2 b1*b2;
120 a3*a4 b3*b4];
121
122 b_kk = -[c1*c2;c3*c4];
123
124
125 A = [A;A_kk];
126 b = [b;b_kk];
127
128 end;
129
130end;
131
132
133% use all the vanishing points to estimate focal length:
134
135f_init = sqrt(abs(1./(inv(A'*A)*A'*b))); % if using a two-focal model for initial guess
136
137alpha_init = 0;
138
139%f_init = sqrt(b'*(sum(A')') / (b'*b)) * ones(2,1); % if single focal length model is used
140
141
142% Global calibration matrix (initial guess):
143
144KK = [f_init(1) alpha_init*f_init(1) c_init(1);0 f_init(2) c_init(2); 0 0 1];
145inv_KK = inv(KK);
146
147
148cc = c_init;
149fc = f_init;
150kc = k_init;
151alpha_c = alpha_init;
152
153
154fprintf(1,'\n\nCalibration parameters after initialization:\n\n');
155fprintf(1,'Focal Length: fc = [ %3.5f %3.5f ]\n',fc);
156fprintf(1,'Principal point: cc = [ %3.5f %3.5f ]\n',cc);
157fprintf(1,'Skew: alpha_c = [ %3.5f ] => angle of pixel = %3.5f degrees\n',alpha_c,90 - atan(alpha_c)*180/pi);
158fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f ]\n',kc);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/is3D.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/is3D.m
new file mode 100755
index 0000000..ab00b3d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/is3D.m
@@ -0,0 +1,19 @@
1function test = is3D(X),
2
3
4Np = size(X,2);
5
6%% Check for planarity of the structure:
7
8X_mean = mean(X')';
9
10Y = X - (X_mean*ones(1,Np));
11
12YY = Y*Y';
13
14[U,S,V] = svd(YY);
15
16r = S(3,3)/S(2,2);
17
18test = (r > 1e-3);
19
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loading_calib.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loading_calib.m
new file mode 100755
index 0000000..a0f50d2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loading_calib.m
@@ -0,0 +1,10 @@
1if ~exist('Calib_Results.mat'),
2 fprintf(1,'\nCalibration file Calib_Results.mat not found!\n');
3 return;
4end;
5
6fprintf(1,'\nLoading calibration results from Calib_Results.mat\n');
7
8load Calib_Results
9
10fprintf(1,'done\n');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loadinr.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loadinr.m
new file mode 100755
index 0000000..91b6f89
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loadinr.m
@@ -0,0 +1,52 @@
1%LOADINR Load an INRIMAGE format file
2%
3% LOADINR(filename, im)
4%
5% Load an INRIA image format file and return it as a matrix
6%
7% SEE ALSO: saveinr
8%
9% Copyright (c) Peter Corke, 1999 Machine Vision Toolbox for Matlab
10
11
12% Peter Corke 1996
13
14function im = loadinr(fname, im)
15
16 fid = fopen(fname, 'r');
17
18 s = fgets(fid);
19 if strcmp(s(1:12), '#INRIMAGE-4#') == 0,
20 error('not INRIMAGE format');
21 end
22
23 % not very complete, only looks for the X/YDIM keys
24 while 1,
25 s = fgets(fid);
26 n = length(s) - 1;
27 if s(1) == '#',
28 break
29 end
30 if strcmp(s(1:5), 'XDIM='),
31 cols = str2num(s(6:n));
32 end
33 if strcmp(s(1:5), 'YDIM='),
34 rows = str2num(s(6:n));
35 end
36 if strcmp(s(1:4), 'CPU='),
37 if strcmp(s(5:n), 'sun') == 0,
38 error('not sun data ordering');
39 end
40 end
41
42 end
43 disp(['INRIMAGE format file ' num2str(rows) ' x ' num2str(cols)])
44
45 % now the binary data
46 fseek(fid, 256, 'bof');
47 [im count] = fread(fid, [cols rows], 'float32');
48 im = im';
49 if count ~= (rows*cols),
50 error('file too short');
51 end
52 fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loadpgm.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loadpgm.m
new file mode 100755
index 0000000..dfa8b61
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loadpgm.m
@@ -0,0 +1,89 @@
1%LOADPGM Load a PGM image
2%
3% I = loadpgm(filename)
4%
5% Returns a matrix containing the image loaded from the PGM format
6% file filename. Handles ASCII (P2) and binary (P5) PGM file formats.
7%
8% If the filename has no extension, and open fails, a '.pgm' will
9% be appended.
10%
11%
12% Copyright (c) Peter Corke, 1999 Machine Vision Toolbox for Matlab
13
14
15% Peter Corke 1994
16
17function I = loadpgm(file)
18 white = [' ' 9 10 13]; % space, tab, lf, cr
19 white = setstr(white);
20
21 fid = fopen(file, 'r');
22 if fid < 0,
23 fid = fopen([file '.pgm'], 'r');
24 end
25 if fid < 0,
26 error('Couldn''t open file');
27 end
28
29 magic = fread(fid, 2, 'char');
30 while 1
31 c = fread(fid,1,'char');
32 if c == '#',
33 fgetl(fid);
34 elseif ~any(c == white)
35 fseek(fid, -1, 'cof'); % unputc()
36 break;
37 end
38 end
39 cols = fscanf(fid, '%d', 1);
40 while 1
41 c = fread(fid,1,'char');
42 if c == '#',
43 fgetl(fid);
44 elseif ~any(c == white)
45 fseek(fid, -1, 'cof'); % unputc()
46 break;
47 end
48 end
49 rows = fscanf(fid, '%d', 1);
50 while 1
51 c = fread(fid,1,'char');
52 if c == '#',
53 fgetl(fid);
54 elseif ~any(c == white)
55 fseek(fid, -1, 'cof'); % unputc()
56 break;
57 end
58 end
59 maxval = fscanf(fid, '%d', 1);
60 while 1
61 c = fread(fid,1,'char');
62 if c == '#',
63 fgetl(fid);
64 elseif ~any(c == white)
65 fseek(fid, -1, 'cof'); % unputc()
66 break;
67 end
68 end
69 if magic(1) == 'P',
70 if magic(2) == '2',
71 %disp(['ASCII PGM file ' num2str(rows) ' x ' num2str(cols)])
72 I = fscanf(fid, '%d', [cols rows])';
73 elseif magic(2) == '5',
74 %disp(['Binary PGM file ' num2str(rows) ' x ' num2str(cols)])
75 if maxval == 1,
76 fmt = 'unint1';
77 elseif maxval == 15,
78 fmt = 'uint4';
79 elseif maxval == 255,
80 fmt = 'uint8';
81 elseif maxval == 2^32-1,
82 fmt = 'uint32';
83 end
84 I = fread(fid, [cols rows], fmt)';
85 else
86 disp('Not a PGM file');
87 end
88 end
89 fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loadppm.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loadppm.m
new file mode 100755
index 0000000..0c004fc
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/loadppm.m
@@ -0,0 +1,109 @@
1%LOADPPM Load a PPM image
2%
3% I = loadppm(filename)
4%
5% Returns a matrix containing the image loaded from the PPM format
6% file filename. Handles ASCII (P3) and binary (P6) PPM file formats.
7%
8% If the filename has no extension, and open fails, a '.ppm' and
9% '.pnm' extension will be tried.
10%
11% SEE ALSO: saveppm loadpgm
12%
13% Copyright (c) Peter Corke, 1999 Machine Vision Toolbox for Matlab
14
15
16% Peter Corke 1994
17
18function I = loadppm(file)
19 white = [' ' 9 10 13]; % space, tab, lf, cr
20 white = setstr(white);
21
22 fid = fopen(file, 'r');
23 if fid < 0,
24 fid = fopen([file '.ppm'], 'r');
25 end
26 if fid < 0,
27 fid = fopen([file '.pnm'], 'r');
28 end
29 if fid < 0,
30 error('Couldn''t open file');
31 end
32
33 magic = fread(fid, 2, 'char');
34 while 1
35 c = fread(fid,1,'char');
36 if c == '#',
37 fgetl(fid);
38 elseif ~any(c == white)
39 fseek(fid, -1, 'cof'); % unputc()
40 break;
41 end
42 end
43 cols = fscanf(fid, '%d', 1);
44 while 1
45 c = fread(fid,1,'char');
46 if c == '#',
47 fgetl(fid);
48 elseif ~any(c == white)
49 fseek(fid, -1, 'cof'); % unputc()
50 break;
51 end
52 end
53 rows = fscanf(fid, '%d', 1);
54 while 1
55 c = fread(fid,1,'char');
56 if c == '#',
57 fgetl(fid);
58 elseif ~any(c == white)
59 fseek(fid, -1, 'cof'); % unputc()
60 break;
61 end
62 end
63 maxval = fscanf(fid, '%d', 1);
64 while 1
65 c = fread(fid,1,'char');
66 if c == '#',
67 fgetl(fid);
68 elseif ~any(c == white)
69 fseek(fid, -1, 'cof'); % unputc()
70 break;
71 end
72 end
73 if magic(1) == 'P',
74 if magic(2) == '3',
75 %disp(['ASCII PPM file ' num2str(rows) ' x ' num2str(cols)])
76 I = fscanf(fid, '%d', [cols*3 rows]);
77 elseif magic(2) == '6',
78 %disp(['Binary PPM file ' num2str(rows) ' x ' num2str(cols)])
79 if maxval == 1,
80 fmt = 'unint1';
81 elseif maxval == 15,
82 fmt = 'uint4';
83 elseif maxval == 255,
84 fmt = 'uint8';
85 elseif maxval == 2^32-1,
86 fmt = 'uint32';
87 end
88 I = fread(fid, [cols*3 rows], fmt);
89 else
90 disp('Not a PPM file');
91 end
92 end
93 %
94 % now the matrix has interleaved columns of R, G, B
95 %
96 I = I';
97 size(I);
98 R = I(:,1:3:(cols*3));
99 G = I(:,2:3:(cols*3));
100 B = I(:,3:3:(cols*3));
101 fclose(fid);
102
103
104 I = zeros(rows,cols,3);
105 I(:,:,1) = R;
106 I(:,:,2) = G;
107 I(:,:,3) = B;
108 I = uint8(I);
109 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/mean_std_robust.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/mean_std_robust.m
new file mode 100755
index 0000000..0d18a62
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/mean_std_robust.m
@@ -0,0 +1,7 @@
1function [m,s] = mean_std_robust(x);
2
3x = x(:);
4
5m = median(x);
6
7s = median(abs(x - m))*1.4836;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/mosaic.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/mosaic.m
new file mode 100755
index 0000000..b056661
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/mosaic.m
@@ -0,0 +1,92 @@
1
2if ~exist('I_1'),
3 active_images_save = active_images;
4 ima_read_calib;
5 active_images = active_images_save;
6 check_active_images;
7end;
8
9check_active_images;
10
11if isempty(ind_read),
12 return;
13end;
14
15
16n_col = floor(sqrt(n_ima*nx/ny));
17
18n_row = ceil(n_ima / n_col);
19
20
21ker2 = 1;
22for ii = 1:n_col,
23 ker2 = conv(ker2,[1/4 1/2 1/4]);
24end;
25
26
27II = I_1(1:n_col:end,1:n_col:end);
28
29[ny2,nx2] = size(II);
30
31
32
33kk_c = 1;
34
35II_mosaic = [];
36
37for jj = 1:n_row,
38
39
40 II_row = [];
41
42 for ii = 1:n_col,
43
44 if (exist(['I_' num2str(kk_c)])) & (kk_c <= n_ima),
45
46 if active_images(kk_c),
47 eval(['I = I_' num2str(kk_c) ';']);
48 %I = conv2(conv2(I,ker2,'same'),ker2','same'); % anti-aliasing
49 I = I(1:n_col:end,1:n_col:end);
50 else
51 I = zeros(ny2,nx2);
52 end;
53
54 else
55
56 I = zeros(ny2,nx2);
57
58 end;
59
60
61
62 II_row = [II_row I];
63
64 if ii ~= n_col,
65
66 II_row = [II_row zeros(ny2,3)];
67
68 end;
69
70
71 kk_c = kk_c + 1;
72
73 end;
74
75 nn2 = size(II_row,2);
76
77 if jj ~= n_row,
78 II_row = [II_row; zeros(3,nn2)];
79 end;
80
81 II_mosaic = [II_mosaic ; II_row];
82
83end;
84
85figure(2);
86image(II_mosaic);
87colormap(gray(256));
88title('Calibration images');
89set(gca,'Xtick',[])
90set(gca,'Ytick',[])
91axis('image');
92
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/normalize.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/normalize.m
new file mode 100755
index 0000000..6dc7149
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/normalize.m
@@ -0,0 +1,43 @@
1function [xn] = normalize(x_kk,fc,cc,kc,alpha_c),
2
3%normalize
4%
5%[xn] = normalize(x_kk,fc,cc,kc,alpha_c)
6%
7%Computes the normalized coordinates xn given the pixel coordinates x_kk
8%and the intrinsic camera parameters fc, cc and kc.
9%
10%INPUT: x_kk: Feature locations on the images
11% fc: Camera focal length
12% cc: Principal point coordinates
13% kc: Distortion coefficients
14% alpha_c: Skew coefficient
15%
16%OUTPUT: xn: Normalized feature locations on the image plane (a 2XN matrix)
17%
18%Important functions called within that program:
19%
20%comp_distortion_oulu: undistort pixel coordinates.
21
22if nargin < 5,
23 alpha_c = 0;
24 if nargin < 4;
25 kc = [0;0;0;0];
26 if nargin < 3;
27 cc = [0;0];
28 if nargin < 2,
29 fc = [1;1];
30 end;
31 end;
32 end;
33end;
34
35
36% First subtract principal point, and divide by the focal length:
37temp = (x_kk(2,:) - cc(2))/fc(2);
38x_distort = [(x_kk(1,:) - cc(1))/fc(1) - alpha_c*temp;temp];
39
40
41%Compensate for lens distortion:
42
43xn = comp_distortion_oulu(x_distort,kc);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/pgmread.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/pgmread.m
new file mode 100755
index 0000000..c96ccb7
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/pgmread.m
@@ -0,0 +1,26 @@
1function img = pgmread(filename)
2% function img = pgmread(filename)
3% this is my version of pgmread for the pgm file created by XV.
4%
5% this program also corrects for the shifts in the image from pm file.
6
7fid = fopen(filename,'r');
8fscanf(fid, 'P5\n');
9cmt = '#';
10while findstr(cmt, '#'),
11 cmt = fgets(fid);
12 if length(findstr(cmt, '#')) ~= 1,
13 YX = sscanf(cmt, '%d %d');
14 y = YX(1); x = YX(2);
15 end
16end
17
18%fgets(fid);
19
20%img = fscanf(fid,'%d',size);
21%img = img';
22
23img = fread(fid,[y,x],'uint8');
24img = img';
25fclose(fid);
26
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/project2_oulu.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/project2_oulu.m
new file mode 100755
index 0000000..c5c4a34
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/project2_oulu.m
@@ -0,0 +1,53 @@
1function [x] = project2_oulu(X,R,T,f,t,k)
2%PROJECT Subsidiary to calib
3
4% (c) Pietro Perona -- March 24, 1994
5% California Institute of Technology
6% Pasadena, CA
7%
8% Renamed because project exists in matlab 5.2!!!
9% Now uses the more elaborate intrinsic model from Oulu
10
11
12
13[m,n] = size(X);
14
15Y = R*X + T*ones(1,n);
16Z = Y(3,:);
17
18f = f(:); %% make a column vector
19if length(f)==1,
20 f = [f f]';
21end;
22
23x = (Y(1:2,:) ./ (ones(2,1) * Z)) ;
24
25
26radius_2 = x(1,:).^2 + x(2,:).^2;
27
28if length(k) > 1,
29
30 radial_distortion = 1 + ones(2,1) * ((k(1) * radius_2) + (k(2) * radius_2.^2));
31
32 if length(k) < 4,
33
34 delta_x = zeros(2,n);
35
36 else
37
38 delta_x = [2*k(3)*x(1,:).*x(2,:) + k(4)*(radius_2 + 2*x(1,:).^2) ;
39 k(3) * (radius_2 + 2*x(2,:).^2)+2*k(4)*x(1,:).*x(2,:)];
40
41 end;
42
43
44else
45
46 radial_distortion = 1 + ones(2,1) * ((k(1) * radius_2));
47
48 delta_x = zeros(2,n);
49
50end;
51
52
53x = (x .* radial_distortion + delta_x).* (f * ones(1,n)) + t*ones(1,n);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/project_points.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/project_points.m
new file mode 100755
index 0000000..1823490
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/project_points.m
@@ -0,0 +1,276 @@
1function [xp,dxpdom,dxpdT,dxpdf,dxpdc,dxpdk] = project_points(X,om,T,f,c,k)
2
3%project_points.m
4%
5%[xp,dxpdom,dxpdT,dxpdf,dxpdc,dxpdk] = project_points(X,om,T,f,c,k)
6%
7%Projects a 3D structure onto the image plane.
8%
9%INPUT: X: 3D structure in the world coordinate frame (3xN matrix for N points)
10% (om,T): Rigid motion parameters between world coordinate frame and camera reference frame
11% om: rotation vector (3x1 vector); T: translation vector (3x1 vector)
12% f: camera focal length in units of horizontal and vertical pixel units (2x1 vector)
13% c: principal point location in pixel units (2x1 vector)
14% k: Distortion coefficients (radial and tangential) (4x1 vector)
15%
16%OUTPUT: xp: Projected pixel coordinates (2xN matrix for N points)
17% dxpdom: Derivative of xp with respect to om ((2N)x3 matrix)
18% dxpdT: Derivative of xp with respect to T ((2N)x3 matrix)
19% dxpdf: Derivative of xp with respect to f ((2N)x2 matrix)
20% dxpdc: Derivative of xp with respect to c ((2N)x2 matrix)
21% dxpdk: Derivative of xp with respect to k ((2N)x4 matrix)
22%
23%Definitions:
24%Let P be a point in 3D of coordinates X in the world reference frame (stored in the matrix X)
25%The coordinate vector of P in the camera reference frame is: Xc = R*X + T
26%where R is the rotation matrix corresponding to the rotation vector om: R = rodrigues(om);
27%call x, y and z the 3 coordinates of Xc: x = Xc(1); y = Xc(2); z = Xc(3);
28%The pinehole projection coordinates of P is [a;b] where a=x/z and b=y/z.
29%call r^2 = a^2 + b^2.
30%The distorted point coordinates are: xd = [xx;yy] where:
31%
32%xx = a * (1 + kc(1)*r^2 + kc(2)*r^4) + 2*kc(3)*a*b + kc(4)*(r^2 + 2*a^2);
33%yy = b * (1 + kc(1)*r^2 + kc(2)*r^4) + kc(3)*(r^2 + 2*b^2) + 2*kc(4)*a*b;
34%
35%The left terms correspond to radial distortion, the right terms correspond to tangential distortion
36%
37%Fianlly, convertion into pixel coordinates: The final pixel coordinates vector xp=[xxp;yyp] where:
38%
39%xxp = f(1)*xx + c(1)
40%yyp = f(2)*yy + c(2)
41%
42%
43%NOTE: About 90 percent of the code takes care fo computing the Jacobian matrices
44%
45%
46%Important function called within that program:
47%
48%rodrigues.m: Computes the rotation matrix corresponding to a rotation vector
49%
50%rigid_motion.m: Computes the rigid motion transformation of a given structure
51
52
53
54if nargin < 6,
55 k = zeros(4,1);
56 if nargin < 5,
57 c = zeros(2,1);
58 if nargin < 4,
59 f = ones(2,1);
60 if nargin < 3,
61 T = zeros(3,1);
62 if nargin < 2,
63 om = zeros(3,1);
64 if nargin < 1,
65 error('Need at least a 3D structure to project (in project_points.m)');
66 return;
67 end;
68 end;
69 end;
70 end;
71 end;
72end;
73
74
75[m,n] = size(X);
76
77[Y,dYdom,dYdT] = rigid_motion(X,om,T);
78
79
80inv_Z = 1./Y(3,:);
81
82x = (Y(1:2,:) .* (ones(2,1) * inv_Z)) ;
83
84
85bb = (-x(1,:) .* inv_Z)'*ones(1,3);
86cc = (-x(2,:) .* inv_Z)'*ones(1,3);
87
88
89dxdom = zeros(2*n,3);
90dxdom(1:2:end,:) = ((inv_Z')*ones(1,3)) .* dYdom(1:3:end,:) + bb .* dYdom(3:3:end,:);
91dxdom(2:2:end,:) = ((inv_Z')*ones(1,3)) .* dYdom(2:3:end,:) + cc .* dYdom(3:3:end,:);
92
93dxdT = zeros(2*n,3);
94dxdT(1:2:end,:) = ((inv_Z')*ones(1,3)) .* dYdT(1:3:end,:) + bb .* dYdT(3:3:end,:);
95dxdT(2:2:end,:) = ((inv_Z')*ones(1,3)) .* dYdT(2:3:end,:) + cc .* dYdT(3:3:end,:);
96
97
98% Add distortion:
99
100r2 = x(1,:).^2 + x(2,:).^2;
101
102
103
104dr2dom = 2*((x(1,:)')*ones(1,3)) .* dxdom(1:2:end,:) + 2*((x(2,:)')*ones(1,3)) .* dxdom(2:2:end,:);
105dr2dT = 2*((x(1,:)')*ones(1,3)) .* dxdT(1:2:end,:) + 2*((x(2,:)')*ones(1,3)) .* dxdT(2:2:end,:);
106
107
108r4 = r2.^2;
109
110dr4dom = 2*((r2')*ones(1,3)) .* dr2dom;
111dr4dT = 2*((r2')*ones(1,3)) .* dr2dT;
112
113
114% Radial distortion:
115
116cdist = 1 + k(1) * r2 + k(2) * r4;
117
118dcdistdom = k(1) * dr2dom + k(2) * dr4dom;
119dcdistdT = k(1) * dr2dT+ k(2) * dr4dT;
120dcdistdk = [ r2' r4' zeros(n,2)];
121
122
123xd1 = x .* (ones(2,1)*cdist);
124
125dxd1dom = zeros(2*n,3);
126dxd1dom(1:2:end,:) = (x(1,:)'*ones(1,3)) .* dcdistdom;
127dxd1dom(2:2:end,:) = (x(2,:)'*ones(1,3)) .* dcdistdom;
128coeff = (reshape([cdist;cdist],2*n,1)*ones(1,3));
129dxd1dom = dxd1dom + coeff.* dxdom;
130
131dxd1dT = zeros(2*n,3);
132dxd1dT(1:2:end,:) = (x(1,:)'*ones(1,3)) .* dcdistdT;
133dxd1dT(2:2:end,:) = (x(2,:)'*ones(1,3)) .* dcdistdT;
134dxd1dT = dxd1dT + coeff.* dxdT;
135
136dxd1dk = zeros(2*n,4);
137dxd1dk(1:2:end,:) = (x(1,:)'*ones(1,4)) .* dcdistdk;
138dxd1dk(2:2:end,:) = (x(2,:)'*ones(1,4)) .* dcdistdk;
139
140
141
142% tangential distortion:
143
144a1 = 2.*x(1,:).*x(2,:);
145a2 = r2 + 2*x(1,:).^2;
146a3 = r2 + 2*x(2,:).^2;
147
148delta_x = [k(3)*a1 + k(4)*a2 ;
149 k(3) * a3 + k(4)*a1];
150
151
152ddelta_xdx = zeros(2*n,2*n);
153aa = (2*k(3)*x(2,:)+6*k(4)*x(1,:))'*ones(1,3);
154bb = (2*k(3)*x(1,:)+2*k(4)*x(2,:))'*ones(1,3);
155cc = (6*k(3)*x(2,:)+2*k(4)*x(1,:))'*ones(1,3);
156
157ddelta_xdom = zeros(2*n,3);
158ddelta_xdom(1:2:end,:) = aa .* dxdom(1:2:end,:) + bb .* dxdom(2:2:end,:);
159ddelta_xdom(2:2:end,:) = bb .* dxdom(1:2:end,:) + cc .* dxdom(2:2:end,:);
160
161ddelta_xdT = zeros(2*n,3);
162ddelta_xdT(1:2:end,:) = aa .* dxdT(1:2:end,:) + bb .* dxdT(2:2:end,:);
163ddelta_xdT(2:2:end,:) = bb .* dxdT(1:2:end,:) + cc .* dxdT(2:2:end,:);
164
165ddelta_xdk = zeros(2*n,4);
166ddelta_xdk(1:2:end,3) = a1';
167ddelta_xdk(1:2:end,4) = a2';
168ddelta_xdk(2:2:end,3) = a3';
169ddelta_xdk(2:2:end,4) = a1';
170
171
172
173xd2 = xd1 + delta_x;
174
175dxd2dom = dxd1dom + ddelta_xdom ;
176dxd2dT = dxd1dT + ddelta_xdT;
177dxd2dk = dxd1dk + ddelta_xdk ;
178
179
180% Pixel coordinates:
181
182xp = xd2 .* (f * ones(1,n)) + c*ones(1,n);
183
184coeff = reshape(f*ones(1,n),2*n,1);
185
186dxpdom = (coeff*ones(1,3)) .* dxd2dom;
187dxpdT = (coeff*ones(1,3)) .* dxd2dT;
188dxpdk = (coeff*ones(1,4)) .* dxd2dk;
189
190dxpdf = zeros(2*n,2);
191dxpdf(1:2:end,1) = xd2(1,:)';
192dxpdf(2:2:end,2) = xd2(2,:)';
193
194dxpdc = zeros(2*n,2);
195dxpdc(1:2:end,1) = ones(n,1);
196dxpdc(2:2:end,2) = ones(n,1);
197
198
199return;
200
201% Test of the Jacobians:
202
203n = 10;
204
205X = 10*randn(3,n);
206om = randn(3,1);
207T = [10*randn(2,1);40];
208f = 1000*rand(2,1);
209c = 1000*randn(2,1);
210k = 0.5*randn(4,1);
211
212
213[x,dxdom,dxdT,dxdf,dxdc,dxdk] = project_points(X,om,T,f,c,k);
214
215
216% Test on om: NOT OK
217
218dom = 0.000000001 * norm(om)*randn(3,1);
219om2 = om + dom;
220
221[x2] = project_points(X,om2,T,f,c,k);
222
223x_pred = x + reshape(dxdom * dom,2,n);
224
225
226norm(x2-x)/norm(x2 - x_pred)
227
228
229% Test on T: OK!!
230
231dT = 0.0001 * norm(T)*randn(3,1);
232T2 = T + dT;
233
234[x2] = project_points(X,om,T2,f,c,k);
235
236x_pred = x + reshape(dxdT * dT,2,n);
237
238
239norm(x2-x)/norm(x2 - x_pred)
240
241
242
243% Test on f: OK!!
244
245df = 0.001 * norm(f)*randn(2,1);
246f2 = f + df;
247
248[x2] = project_points(X,om,T,f2,c,k);
249
250x_pred = x + reshape(dxdf * df,2,n);
251
252
253norm(x2-x)/norm(x2 - x_pred)
254
255
256% Test on c: OK!!
257
258dc = 0.01 * norm(c)*randn(2,1);
259c2 = c + dc;
260
261[x2] = project_points(X,om,T,f,c2,k);
262
263x_pred = x + reshape(dxdc * dc,2,n);
264
265norm(x2-x)/norm(x2 - x_pred)
266
267% Test on k: OK!!
268
269dk = 0.001 * norm(4)*randn(4,1);
270k2 = k + dk;
271
272[x2] = project_points(X,om,T,f,c,k2);
273
274x_pred = x + reshape(dxdk * dk,2,n);
275
276norm(x2-x)/norm(x2 - x_pred)
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/project_points2.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/project_points2.m
new file mode 100755
index 0000000..5bb1b91
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/project_points2.m
@@ -0,0 +1,312 @@
1function [xp,dxpdom,dxpdT,dxpdf,dxpdc,dxpdk,dxpdalpha] = project_points2(X,om,T,f,c,k,alpha)
2
3%project_points.m
4%
5%[xp,dxpdom,dxpdT,dxpdf,dxpdc,dxpdk] = project_points2(X,om,T,f,c,k,alpha)
6%
7%Projects a 3D structure onto the image plane.
8%
9%INPUT: X: 3D structure in the world coordinate frame (3xN matrix for N points)
10% (om,T): Rigid motion parameters between world coordinate frame and camera reference frame
11% om: rotation vector (3x1 vector); T: translation vector (3x1 vector)
12% f: camera focal length in units of horizontal and vertical pixel units (2x1 vector)
13% c: principal point location in pixel units (2x1 vector)
14% k: Distortion coefficients (radial and tangential) (4x1 vector)
15% alpha: Skew coefficient between x and y pixel (alpha = 0 <=> square pixels)
16%
17%OUTPUT: xp: Projected pixel coordinates (2xN matrix for N points)
18% dxpdom: Derivative of xp with respect to om ((2N)x3 matrix)
19% dxpdT: Derivative of xp with respect to T ((2N)x3 matrix)
20% dxpdf: Derivative of xp with respect to f ((2N)x2 matrix)
21% dxpdc: Derivative of xp with respect to c ((2N)x2 matrix)
22% dxpdk: Derivative of xp with respect to k ((2N)x4 matrix)
23%
24%Definitions:
25%Let P be a point in 3D of coordinates X in the world reference frame (stored in the matrix X)
26%The coordinate vector of P in the camera reference frame is: Xc = R*X + T
27%where R is the rotation matrix corresponding to the rotation vector om: R = rodrigues(om);
28%call x, y and z the 3 coordinates of Xc: x = Xc(1); y = Xc(2); z = Xc(3);
29%The pinehole projection coordinates of P is [a;b] where a=x/z and b=y/z.
30%call r^2 = a^2 + b^2.
31%The distorted point coordinates are: xd = [xx;yy] where:
32%
33%xx = a * (1 + kc(1)*r^2 + kc(2)*r^4) + 2*kc(3)*a*b + kc(4)*(r^2 + 2*a^2);
34%yy = b * (1 + kc(1)*r^2 + kc(2)*r^4) + kc(3)*(r^2 + 2*b^2) + 2*kc(4)*a*b;
35%
36%The left terms correspond to radial distortion, the right terms correspond to tangential distortion
37%
38%Finally, convertion into pixel coordinates: The final pixel coordinates vector xp=[xxp;yyp] where:
39%
40%xxp = f(1)*(xx + alpha*yy) + c(1)
41%yyp = f(2)*yy + c(2)
42%
43%
44%NOTE: About 90 percent of the code takes care fo computing the Jacobian matrices
45%
46%
47%Important function called within that program:
48%
49%rodrigues.m: Computes the rotation matrix corresponding to a rotation vector
50%
51%rigid_motion.m: Computes the rigid motion transformation of a given structure
52
53
54if nargin < 7,
55 alpha = 0;
56 if nargin < 6,
57 k = zeros(4,1);
58 if nargin < 5,
59 c = zeros(2,1);
60 if nargin < 4,
61 f = ones(2,1);
62 if nargin < 3,
63 T = zeros(3,1);
64 if nargin < 2,
65 om = zeros(3,1);
66 if nargin < 1,
67 error('Need at least a 3D structure to project (in project_points.m)');
68 return;
69 end;
70 end;
71 end;
72 end;
73 end;
74 end;
75end;
76
77
78[m,n] = size(X);
79
80[Y,dYdom,dYdT] = rigid_motion(X,om,T);
81
82
83inv_Z = 1./Y(3,:);
84
85x = (Y(1:2,:) .* (ones(2,1) * inv_Z)) ;
86
87
88bb = (-x(1,:) .* inv_Z)'*ones(1,3);
89cc = (-x(2,:) .* inv_Z)'*ones(1,3);
90
91
92dxdom = zeros(2*n,3);
93dxdom(1:2:end,:) = ((inv_Z')*ones(1,3)) .* dYdom(1:3:end,:) + bb .* dYdom(3:3:end,:);
94dxdom(2:2:end,:) = ((inv_Z')*ones(1,3)) .* dYdom(2:3:end,:) + cc .* dYdom(3:3:end,:);
95
96dxdT = zeros(2*n,3);
97dxdT(1:2:end,:) = ((inv_Z')*ones(1,3)) .* dYdT(1:3:end,:) + bb .* dYdT(3:3:end,:);
98dxdT(2:2:end,:) = ((inv_Z')*ones(1,3)) .* dYdT(2:3:end,:) + cc .* dYdT(3:3:end,:);
99
100
101% Add distortion:
102
103r2 = x(1,:).^2 + x(2,:).^2;
104
105
106
107dr2dom = 2*((x(1,:)')*ones(1,3)) .* dxdom(1:2:end,:) + 2*((x(2,:)')*ones(1,3)) .* dxdom(2:2:end,:);
108dr2dT = 2*((x(1,:)')*ones(1,3)) .* dxdT(1:2:end,:) + 2*((x(2,:)')*ones(1,3)) .* dxdT(2:2:end,:);
109
110
111r4 = r2.^2;
112
113dr4dom = 2*((r2')*ones(1,3)) .* dr2dom;
114dr4dT = 2*((r2')*ones(1,3)) .* dr2dT;
115
116
117% Radial distortion:
118
119cdist = 1 + k(1) * r2 + k(2) * r4;
120
121dcdistdom = k(1) * dr2dom + k(2) * dr4dom;
122dcdistdT = k(1) * dr2dT+ k(2) * dr4dT;
123dcdistdk = [ r2' r4' zeros(n,2)];
124
125
126xd1 = x .* (ones(2,1)*cdist);
127
128dxd1dom = zeros(2*n,3);
129dxd1dom(1:2:end,:) = (x(1,:)'*ones(1,3)) .* dcdistdom;
130dxd1dom(2:2:end,:) = (x(2,:)'*ones(1,3)) .* dcdistdom;
131coeff = (reshape([cdist;cdist],2*n,1)*ones(1,3));
132dxd1dom = dxd1dom + coeff.* dxdom;
133
134dxd1dT = zeros(2*n,3);
135dxd1dT(1:2:end,:) = (x(1,:)'*ones(1,3)) .* dcdistdT;
136dxd1dT(2:2:end,:) = (x(2,:)'*ones(1,3)) .* dcdistdT;
137dxd1dT = dxd1dT + coeff.* dxdT;
138
139dxd1dk = zeros(2*n,4);
140dxd1dk(1:2:end,:) = (x(1,:)'*ones(1,4)) .* dcdistdk;
141dxd1dk(2:2:end,:) = (x(2,:)'*ones(1,4)) .* dcdistdk;
142
143
144
145% tangential distortion:
146
147a1 = 2.*x(1,:).*x(2,:);
148a2 = r2 + 2*x(1,:).^2;
149a3 = r2 + 2*x(2,:).^2;
150
151delta_x = [k(3)*a1 + k(4)*a2 ;
152 k(3) * a3 + k(4)*a1];
153
154
155ddelta_xdx = zeros(2*n,2*n);
156aa = (2*k(3)*x(2,:)+6*k(4)*x(1,:))'*ones(1,3);
157bb = (2*k(3)*x(1,:)+2*k(4)*x(2,:))'*ones(1,3);
158cc = (6*k(3)*x(2,:)+2*k(4)*x(1,:))'*ones(1,3);
159
160ddelta_xdom = zeros(2*n,3);
161ddelta_xdom(1:2:end,:) = aa .* dxdom(1:2:end,:) + bb .* dxdom(2:2:end,:);
162ddelta_xdom(2:2:end,:) = bb .* dxdom(1:2:end,:) + cc .* dxdom(2:2:end,:);
163
164ddelta_xdT = zeros(2*n,3);
165ddelta_xdT(1:2:end,:) = aa .* dxdT(1:2:end,:) + bb .* dxdT(2:2:end,:);
166ddelta_xdT(2:2:end,:) = bb .* dxdT(1:2:end,:) + cc .* dxdT(2:2:end,:);
167
168ddelta_xdk = zeros(2*n,4);
169ddelta_xdk(1:2:end,3) = a1';
170ddelta_xdk(1:2:end,4) = a2';
171ddelta_xdk(2:2:end,3) = a3';
172ddelta_xdk(2:2:end,4) = a1';
173
174
175
176xd2 = xd1 + delta_x;
177
178dxd2dom = dxd1dom + ddelta_xdom ;
179dxd2dT = dxd1dT + ddelta_xdT;
180dxd2dk = dxd1dk + ddelta_xdk ;
181
182
183% Add Skew:
184
185xd3 = [xd2(1,:) + alpha*xd2(2,:);xd2(2,:)];
186
187% Compute: dxd3dom, dxd3dT, dxd3dk, dxd3dalpha
188
189dxd3dom = zeros(2*n,3);
190dxd3dom(1:2:2*n,:) = dxd2dom(1:2:2*n,:) + alpha*dxd2dom(2:2:2*n,:);
191dxd3dom(2:2:2*n,:) = dxd2dom(2:2:2*n,:);
192dxd3dT = zeros(2*n,3);
193dxd3dT(1:2:2*n,:) = dxd2dT(1:2:2*n,:) + alpha*dxd2dT(2:2:2*n,:);
194dxd3dT(2:2:2*n,:) = dxd2dT(2:2:2*n,:);
195dxd3dk = zeros(2*n,4);
196dxd3dk(1:2:2*n,:) = dxd2dk(1:2:2*n,:) + alpha*dxd2dk(2:2:2*n,:);
197dxd3dk(2:2:2*n,:) = dxd2dk(2:2:2*n,:);
198dxd3dalpha = zeros(2*n,1);
199dxd3dalpha(1:2:2*n,:) = xd2(2,:)';
200
201
202
203% Pixel coordinates:
204
205xp = xd3 .* (f * ones(1,n)) + c*ones(1,n);
206
207coeff = reshape(f*ones(1,n),2*n,1);
208
209dxpdom = (coeff*ones(1,3)) .* dxd3dom;
210dxpdT = (coeff*ones(1,3)) .* dxd3dT;
211dxpdk = (coeff*ones(1,4)) .* dxd3dk;
212dxpdalpha = (coeff) .* dxd3dalpha;
213
214dxpdf = zeros(2*n,2);
215dxpdf(1:2:end,1) = xd2(1,:)';
216dxpdf(2:2:end,2) = xd2(2,:)';
217
218dxpdc = zeros(2*n,2);
219dxpdc(1:2:end,1) = ones(n,1);
220dxpdc(2:2:end,2) = ones(n,1);
221
222
223return;
224
225% Test of the Jacobians:
226
227n = 10;
228
229X = 10*randn(3,n);
230om = randn(3,1);
231T = [10*randn(2,1);40];
232f = 1000*rand(2,1);
233c = 1000*randn(2,1);
234k = 0.5*randn(4,1);
235alpha = 0.01*randn(1,1);
236
237[x,dxdom,dxdT,dxdf,dxdc,dxdk,dxdalpha] = project_points2(X,om,T,f,c,k,alpha);
238
239
240% Test on om: NOT OK
241
242dom = 0.000000001 * norm(om)*randn(3,1);
243om2 = om + dom;
244
245[x2] = project_points2(X,om2,T,f,c,k,alpha);
246
247x_pred = x + reshape(dxdom * dom,2,n);
248
249
250norm(x2-x)/norm(x2 - x_pred)
251
252
253% Test on T: OK!!
254
255dT = 0.0001 * norm(T)*randn(3,1);
256T2 = T + dT;
257
258[x2] = project_points2(X,om,T2,f,c,k,alpha);
259
260x_pred = x + reshape(dxdT * dT,2,n);
261
262
263norm(x2-x)/norm(x2 - x_pred)
264
265
266
267% Test on f: OK!!
268
269df = 0.001 * norm(f)*randn(2,1);
270f2 = f + df;
271
272[x2] = project_points2(X,om,T,f2,c,k,alpha);
273
274x_pred = x + reshape(dxdf * df,2,n);
275
276
277norm(x2-x)/norm(x2 - x_pred)
278
279
280% Test on c: OK!!
281
282dc = 0.01 * norm(c)*randn(2,1);
283c2 = c + dc;
284
285[x2] = project_points2(X,om,T,f,c2,k,alpha);
286
287x_pred = x + reshape(dxdc * dc,2,n);
288
289norm(x2-x)/norm(x2 - x_pred)
290
291% Test on k: OK!!
292
293dk = 0.001 * norm(k)*randn(4,1);
294k2 = k + dk;
295
296[x2] = project_points2(X,om,T,f,c,k2,alpha);
297
298x_pred = x + reshape(dxdk * dk,2,n);
299
300norm(x2-x)/norm(x2 - x_pred)
301
302
303% Test on alpha: OK!!
304
305dalpha = 0.001 * norm(k)*randn(1,1);
306alpha2 = alpha + dalpha;
307
308[x2] = project_points2(X,om,T,f,c,k,alpha2);
309
310x_pred = x + reshape(dxdalpha * dalpha,2,n);
311
312norm(x2-x)/norm(x2 - x_pred)
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/projectedGrid.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/projectedGrid.m
new file mode 100755
index 0000000..561a7d0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/projectedGrid.m
@@ -0,0 +1,24 @@
1function [XX,H] = projectedGrid ( P1, P2, P3, P4 , nx, ny);
2
3% new formalism using homographies
4
5a00 = [P1;1];
6a10 = [P2;1];
7a11 = [P3;1];
8a01 = [P4;1];
9
10% Compute the planart collineation:
11
12[H] = compute_collineation (a00, a10, a11, a01);
13
14
15% Build the grid using the planar collineation:
16
17x_l = ((0:(nx-1))'*ones(1,ny))/(nx-1);
18y_l = (ones(nx,1)*(0:(ny-1)))/(ny-1);
19
20pts = [x_l(:) y_l(:) ones(nx*ny,1)]';
21
22XX = H*pts;
23
24XX = XX(1:2,:) ./ (ones(2,1)*XX(3,:));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/projector_calib.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/projector_calib.m
new file mode 100755
index 0000000..bb4ef86
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/projector_calib.m
@@ -0,0 +1,258 @@
1%%% This code is an additional code that helps doing projector calibration in 3D scanning setup.
2%%% This is not a useful code for anyone else but me.
3%%% I included it in the toolbox for illustration only.
4
5
6load camera_results;
7
8
9proj_name = input('Basename projector calibration images (without number nor suffix): ','s');
10
11
12i = 1;
13
14while (i <= n_ima), % & (~no_image_file),
15
16 if active_images(i),
17
18 %fprintf(1,'Loading image %d...\n',i);
19
20 if ~type_numbering,
21 number_ext = num2str(image_numbers(i));
22 else
23 number_ext = sprintf(['%.' num2str(N_slots) 'd'],image_numbers(i));
24 end;
25
26 ima_namep = [proj_name number_ext 'p.' format_image];
27 ima_namen = [proj_name number_ext 'n.' format_image];
28
29 if i == ind_active(1),
30 fprintf(1,'Loading image ');
31 end;
32
33 fprintf(1,'%d...',i);
34
35 if format_image(1) == 'p',
36 if format_image(2) == 'p',
37 Ip = double(loadppm(ima_namep));
38 In = double(loadppm(ima_namen));
39 else
40 Ip = double(loadpgm(ima_namep));
41 In = double(loadpgm(ima_namen));
42 end;
43 else
44 if format_image(1) == 'r',
45 Ip = readras(ima_namep);
46 In = readras(ima_namen);
47 else
48 Ip = double(imread(ima_namep));
49 In = double(imread(ima_namen));
50 end;
51 end;
52
53
54 if size(Ip,3)>1,
55 Ip = Ip(:,:,2);
56 In = In(:,:,2);
57 end;
58
59 eval(['Ip_' num2str(i) ' = Ip;']);
60 eval(['In_' num2str(i) ' = In;']);
61
62 end;
63
64 i = i+1;
65
66end;
67
68
69fprintf(1,'\nExtraction of the grid corners on the image\n');
70
71disp('Window size for corner finder (wintx and winty):');
72wintx = input('wintx ([] = 5) = ');
73if isempty(wintx), wintx = 5; end;
74wintx = round(wintx);
75winty = input('winty ([] = 5) = ');
76if isempty(winty), winty = 5; end;
77winty = round(winty);
78fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1);
79
80
81disp('The projector you are using is the DLP or Intel');
82nx = 800;
83ny = 600;
84
85dX = input('Size dX in x of the squares (in pixels) [50] = ');
86dY = input('Size dY in y of the squares (in pixels) [50] = ');
87
88if isempty(dX), dX=50; end;
89if isempty(dY), dY=50; end;
90
91dXoff = input('Position in x of your reference (in pixels) [399.5] = ');
92dYoff = input('Position in y of your reference (in pixels) [299.5] = ');
93
94if isempty(dXoff), dXoff=399.5; end;
95if isempty(dYoff), dYoff=299.5; end;
96
97end;
98
99
100
101for kk = ind_active,
102
103 eval(['Ip = Ip_' num2str(kk) ';']);
104 eval(['In = In_' num2str(kk) ';']);
105
106 [x,X,n_sq_x,n_sq_y,ind_orig,ind_x,ind_y] = extract_grid(In,wintx,winty,fc,cc,kc,dX,dY);
107 xproj = x;
108
109 Np_proj = size(x,2);
110
111 figure(2);
112 image(Ip);
113 hold on;
114 plot(xproj(1,:)+1,xproj(2,:)+1,'r+');
115 title('Click on your reference point');
116 xlabel('Xc (in camera frame)');
117 ylabel('Yc (in camera frame)');
118 hold off;
119
120 disp('Click on your reference point...');
121
122 [xr,yr] = ginput2(1);
123
124 err = sqrt(sum((xproj - [xr;yr]*ones(1,Np_proj)).^2));
125 ind_ref = find(err == min(err));
126
127 ref_pt = xproj(:,ind_ref);
128
129
130 figure(2);
131 hold on;
132 plot(ref_pt(1)+1,ref_pt(2)+1,'go'); hold off;
133
134
135 nn = floor(ind_ref/(n_sq_x+1));
136 off_x = ind_ref - nn*(n_sq_x+1) - 1;
137 off_y = n_sq_y - nn;
138
139
140 xprojn = xproj - cc * ones(1,Np_proj);
141 xprojn = xprojn ./ (fc * ones(1,Np_proj));
142 xprojn = comp_distortion(xprojn,kc);
143
144 eval(['Rc = Rc_' num2str(kk) ';']);
145 eval(['Tc = Tc_' num2str(kk) ';']);
146
147 Zc = ((Rc(:,3)'*Tc) * (1./(Rc(:,3)' * [xprojn; ones(1,Np_proj)])));
148 Xcp = (ones(3,1)*Zc) .* [xprojn; ones(1,Np_proj)]; % % in the camera frame
149 %Xproj = Rc'* Xcp - (Rc'*Tc)*ones(1,Np); % in the object frame !!! it works!
150 %Xproj(3,:) = zeros(1,Np);
151
152 eval(['X_proj_' num2str(kk) ' = Xcp;']); % coordinates of the points in the
153
154 x_proj = X(1:2,:) + ([dXoff - dX * off_x ; dYoff - dY * off_y]*ones(1,Np_proj));
155
156 eval(['x_proj_' num2str(kk) ' = x_proj;']); % coordinates of the points in the
157
158end;
159
160
161
162X_proj = [];
163x_proj = [];
164
165for kk = ind_active,
166 eval(['X_proj = [X_proj X_proj_' num2str(kk) '];']);
167 eval(['x_proj = [x_proj x_proj_' num2str(kk) '];']);
168end;
169
170
171%Save camera parameters:
172fc_save = fc;
173cc_save = cc;
174kc_save = kc;
175
176omc_1_save = omc_1;
177Rc_1_save = Rc_1;
178Tc_1_save = Tc_1;
179
180
181% Get started to calibrate projector:
182clear fc cc kc
183
184n_ima = 1;
185X_1 = X_proj;
186x_1 = x_proj;
187
188
189% Image size: (may or may not be available)
190
191nx = 800;
192ny = 600;
193
194% No calibration image is available (only the corner coordinates)
195
196no_image = 1;
197
198% Set the toolbox not to prompt the user (choose default values)
199
200dont_ask = 1;
201
202% Do not estimate distortion:
203
204est_dist = [0;0;0;0];
205est_dist = ones(4,1);
206
207center_optim = 1;
208
209% Run the main calibration routine:
210
211go_calib_optim_iter;
212
213% Shows the extrinsic parameters:
214
215dX = 3;
216dY = 3;
217
218ext_calib;
219
220% Reprojection on the original images:
221
222reproject_calib;
223
224
225
226
227%----------------------- Retrieve results:
228
229% Intrinsic:
230
231% Projector:
232fp = fc;
233cp = cc;
234kp = kc;
235
236% Camera:
237fc = fc_save;
238cc = cc_save;
239kc = kc_save;
240
241% Extrinsic:
242
243% Relative position of projector and camera:
244T = Tc_1;
245om = omc_1;
246R = rodrigues(om);
247
248% Relative prosition of camera wrt world:
249omc = omc_1_save;
250Rc = Rc_1_save;
251Tc = Tc_1_save;
252
253% relative position of projector wrt world:
254Rp = R*Rc;
255omp = rodrigues(Rp);
256Tp = T + R*Tc;
257
258eval(['save calib_cam_proj R om T fc fp cc cp kc kp Rc Rp Tc Tp']);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/readras.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/readras.m
new file mode 100755
index 0000000..fc1820b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/readras.m
@@ -0,0 +1,87 @@
1function [X, map] = readras(filename, ys, ye, xs, xe);
2%READRAS Read an image file in sun raster format.
3% READRAS('imagefile.ras') reads a "sun.raster" image file.
4% [X, map] = READRAS('imagefile.ras') returns both the image and a
5% color map, so that
6% [X, map] = readras('imagefile.ras');
7% image(X)
8% colormap(map)
9% axis('equal')
10% will display the result with the proper colors.
11% NOTE: readras cannot deal with complicated color maps.
12% In fact, Matlab doesn't quite allow to work with colormaps
13% with more than 64 entries.
14%
15
16%%
17%% (C) Thomas K. Leung 3/30/93.
18%% California Institute of Technology.
19%% Modified by Andrea Mennucci to deal with color images
20%%
21
22% PC and UNIX version of readras - Jean-Yves Bouguet - Dec. 1998
23
24dot = max(find(filename == '.'));
25suffix = filename(dot+1:dot+3);
26
27if(strcmp(suffix, 'ras')) % raster file format %
28 fp = fopen(filename, 'rb');
29 if(fp<0) error(['Cannot open ' filename '.']), end
30
31 %Read and crack the 32-byte header
32 fseek(fp, 4, -1);
33
34 width = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
35
36 height = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
37
38 depth = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
39
40 length = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
41
42 type = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
43
44 maptype = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
45
46 maplen = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
47
48 maplen = maplen / 3;
49
50 if maptype == 2 % RMT_RAW
51 map = fread(fp, [maplen, 3], 'uchar')/255;
52% if maplen<64, map=[map',zeros(3,64-maplen)]';maplen=64; end;
53 elseif maptype == 1 % RMT_EQUAL_RGB
54 map(:,1) = fread(fp, [maplen], 'uchar');
55 map(:,2) = fread(fp, [maplen], 'uchar');
56 map(:,3) = fread(fp, [maplen], 'uchar');
57 %maxmap = max(max(map));
58 map = map/255;
59 if maplen<64, map=[map',zeros(3,64-maplen)]'; maplen=64; end;
60 else % RMT_NONE
61 map = [];
62 end
63% if maplen>64,
64% map=[map',zeros(3,256-maplen)]';
65% end;
66
67 % Read the image
68
69 if rem(width,2) == 1
70 Xt = fread(fp, [width+1, height], 'uchar');
71 X = Xt(1:width, :)';
72 else
73 Xt = fread(fp, [width, height], 'uchar');
74 X = Xt';
75 end
76 X = X + 1;
77 fclose(fp);
78else
79 error('Image file name must end in either ''ras'' or ''rast''.');
80end
81
82
83if nargin == 5
84
85 X = X(ys:ye, xs:xe);
86
87end \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/recomp_corner_calib.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/recomp_corner_calib.m
new file mode 100755
index 0000000..0909c69
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/recomp_corner_calib.m
@@ -0,0 +1,119 @@
1% Re-select te corners after calibration
2
3if ~exist('n_ima')|~exist('fc'),
4 fprintf(1,'No calibration data available.\n');
5 return;
6end;
7
8check_active_images;
9
10flag = 0;
11for kk = ind_active,
12 if ~exist(['y_' num2str(kk)]),
13 flag = 1;
14 else
15 eval(['ykk = y_' num2str(kk) ';']);
16 if isnan(ykk(1,1)),
17 flag = 1;
18 end;
19 end;
20end;
21
22if flag,
23 fprintf(1,'Need to calibrate once before before recomputing image corners. Maybe need to load Calib_Results.mat file.\n');
24 return;
25end;
26
27
28if ~exist(['I_' num2str(ind_active(1))]),
29 n_ima_save = n_ima;
30 active_images_save = active_images;
31 ima_read_calib;
32 n_ima = n_ima_save;
33 active_images = active_images_save;
34 check_active_images;
35 if no_image_file,
36 disp('Cannot extract corners without images');
37 return;
38 end;
39end;
40
41fprintf(1,'\nRe-extraction of the grid corners on the images (after first calibration)\n');
42
43disp('Window size for corner finder (wintx and winty):');
44wintx = input('wintx ([] = 5) = ');
45if isempty(wintx), wintx = 5; end;
46wintx = round(wintx);
47winty = input('winty ([] = 5) = ');
48if isempty(winty), winty = 5; end;
49winty = round(winty);
50
51fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1);
52
53ima_numbers = input('Number(s) of image(s) to process ([] = all images) = ');
54
55if isempty(ima_numbers),
56 ima_proc = 1:n_ima;
57else
58 ima_proc = ima_numbers;
59end;
60
61q_auto = input('Use the projection of 3D grid or manual click ([]=auto, other=manual): ');
62
63fprintf(1,'Processing image ');
64
65for kk = ima_proc;
66
67 if active_images(kk),
68
69 fprintf(1,'%d...',kk);
70
71 if isempty(q_auto),
72
73 eval(['I = I_' num2str(kk) ';']);
74
75 eval(['y = y_' num2str(kk) ';']);
76
77 xc = cornerfinder(y+1,I,winty,wintx); % the four corners
78
79 eval(['wintx_' num2str(kk) ' = wintx;']);
80 eval(['winty_' num2str(kk) ' = winty;']);
81
82 eval(['x_' num2str(kk) '= xc - 1;']);
83
84 else
85
86 fprintf(1,'\n');
87
88 click_ima_calib;
89
90 end;
91
92 else
93
94 if ~exist(['omc_' num2str(kk)]),
95
96 eval(['dX_' num2str(kk) ' = NaN;']);
97 eval(['dY_' num2str(kk) ' = NaN;']);
98
99 eval(['wintx_' num2str(kk) ' = NaN;']);
100 eval(['winty_' num2str(kk) ' = NaN;']);
101
102 eval(['x_' num2str(kk) ' = NaN*ones(2,1);']);
103 eval(['X_' num2str(kk) ' = NaN*ones(3,1);']);
104
105 eval(['n_sq_x_' num2str(kk) ' = NaN;']);
106 eval(['n_sq_y_' num2str(kk) ' = NaN;']);
107
108 end;
109
110 end;
111
112
113end;
114
115% Recompute the error:
116
117comp_error_calib;
118
119fprintf(1,'\ndone\n'); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rect.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rect.m
new file mode 100755
index 0000000..ccac7a5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rect.m
@@ -0,0 +1,127 @@
1function [Irec] = rect(I,R,f,c,k,alpha,KK_new);
2
3
4if nargin < 5,
5 k = 0;
6 if nargin < 4,
7 c = [0;0];
8 if nargin < 3,
9 f = [1;1];
10 if nargin < 2,
11 R = eye(3);
12 if nargin < 1,
13 error('ERROR: Need an image to rectify');
14 break;
15 end;
16 end;
17 end;
18 end;
19end;
20
21
22if nargin < 7,
23 if nargin < 6,
24 KK_new = [f(1) 0 c(1);0 f(2) c(2);0 0 1];
25 else
26 KK_new = alpha; % the 6th argument is actually KK_new
27 end;
28 alpha = 0;
29end;
30
31
32
33% Note: R is the motion of the points in space
34% So: X2 = R*X where X: coord in the old reference frame, X2: coord in the new ref frame.
35
36
37if ~exist('KK_new'),
38 KK_new = [f(1) alpha_c*fc(1) c(1);0 f(2) c(2);0 0 1];
39end;
40
41
42[nr,nc] = size(I);
43
44Irec = 255*ones(nr,nc);
45
46[mx,my] = meshgrid(1:nc, 1:nr);
47px = reshape(mx',nc*nr,1);
48py = reshape(my',nc*nr,1);
49
50rays = inv(KK_new)*[(px - 1)';(py - 1)';ones(1,length(px))];
51
52
53% Rotation: (or affine transformation):
54
55rays2 = R'*rays;
56
57x = [rays2(1,:)./rays2(3,:);rays2(2,:)./rays2(3,:)];
58
59
60% Add distortion:
61
62k1 = k(1);
63k2 = k(2);
64
65p1 = k(3);
66p2 = k(4);
67
68r_2 = sum(x.^2);
69
70delta_x = [2*p1*x(1,:).*x(2,:) + p2*(r_2 + 2*x(1,:).^2) ;
71 p1 * (r_2 + 2*x(2,:).^2)+2*p2*x(1,:).*x(2,:)];
72
73xd = (ones(2,1)*( 1 + k1 * r_2 + k2 * r_2.^2)) .* x + delta_x;
74
75
76% Reconvert in pixels:
77
78px2 = f(1)*(xd(1,:)+alpha_c*xd(2,:))+c(1);
79py2 = f(2)*xd(2,:)+c(2);
80
81
82% Interpolate between the closest pixels:
83
84px_0 = floor(px2);
85px_1 = px_0 + 1;
86alpha_x = px2 - px_0;
87
88py_0 = floor(py2);
89py_1 = py_0 + 1;
90alpha_y = py2 - py_0;
91
92good_points = find((px_0 >= 0) & (px_1 <= (nc-1)) & (py_0 >= 0) & (py_1 <= (nr-1)));
93
94I_lu = I(px_0(good_points) * nr + py_0(good_points) + 1);
95I_ru = I(px_1(good_points) * nr + py_0(good_points) + 1);
96I_ld = I(px_0(good_points) * nr + py_1(good_points) + 1);
97I_rd = I(px_1(good_points) * nr + py_1(good_points) + 1);
98
99
100I_interp = (1 - alpha_y(good_points)).*((1 - alpha_x(good_points)).* I_lu + alpha_x(good_points) .* I_ru) + alpha_y(good_points) .* ((1 - alpha_x(good_points)).* I_ld + alpha_x(good_points) .* I_rd);
101
102
103Irec((px(good_points)-1)*nr + py(good_points)) = I_interp;
104
105
106
107return;
108
109
110% Convert in indices:
111
112fact = 3;
113
114[XX,YY]= meshgrid(1:nc,1:nr);
115[XXi,YYi]= meshgrid(1:1/fact:nc,1:1/fact:nr);
116
117%tic;
118Iinterp = interp2(XX,YY,I,XXi,YYi);
119%toc
120
121[nri,nci] = size(Iinterp);
122
123
124ind_col = round(fact*(f(1)*xd(1,:)+c(1)))+1;
125ind_row = round(fact*(f(2)*xd(2,:)+c(2)))+1;
126
127good_points = find((ind_col >=1)&(ind_col<=nci)&(ind_row >=1)& (ind_row <=nri));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/reproject_calib.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/reproject_calib.m
new file mode 100755
index 0000000..d3ad3d2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/reproject_calib.m
@@ -0,0 +1,121 @@
1%%%%%%%%%%%%%%%%%%%% REPROJECT ON THE IMAGES %%%%%%%%%%%%%%%%%%%%%%%%
2
3if ~exist('n_ima')|~exist('fc'),
4 fprintf(1,'No calibration data available.\n');
5 return;
6end;
7
8if ~exist('no_image'),
9 no_image = 0;
10end;
11
12if ~exist('nx')&~exist('ny'),
13 fprintf(1,'WARNING: No image size (nx,ny) available. Setting nx=640 and ny=480\n');
14 nx = 640;
15 ny = 480;
16end;
17
18
19check_active_images;
20
21
22% Color code for each image:
23
24colors = 'brgkcm';
25
26% Reproject the patterns on the images, and compute the pixel errors:
27
28% Reload the images if necessary
29
30if ~exist(['omc_' num2str(ind_active(1)) ]),
31 fprintf(1,'Need to calibrate before showing image reprojection. Maybe need to load Calib_Results.mat file.\n');
32 return;
33end;
34
35if ~no_image,
36 if ~exist(['I_' num2str(ind_active(1)) ]'),
37 n_ima_save = n_ima;
38 active_images_save = active_images;
39 ima_read_calib;
40 n_ima = n_ima_save;
41 active_images = active_images_save;
42 check_active_images;
43 if no_image_file,
44 fprintf(1,'WARNING: Do not show the original images\n'); %return;
45 end;
46 end;
47else
48 no_image_file = 1;
49end;
50
51
52if ~exist('dont_ask'),
53 dont_ask = 0;
54end;
55
56
57if ~dont_ask,
58 ima_numbers = input('Number(s) of image(s) to show ([] = all images) = ');
59else
60 ima_numbers = [];
61end;
62
63
64if isempty(ima_numbers),
65 ima_proc = 1:n_ima;
66else
67 ima_proc = ima_numbers;
68end;
69
70
71figure(5);
72for kk = ima_proc, %1:n_ima,
73 if exist(['y_' num2str(kk)]),
74 if active_images(kk) & eval(['~isnan(y_' num2str(kk) '(1,1))']),
75 eval(['plot(ex_' num2str(kk) '(1,:),ex_' num2str(kk) '(2,:),''' colors(rem(kk-1,6)+1) '+'');']);
76 hold on;
77 end;
78 end;
79end;
80hold off;
81axis('equal');
82title('Reprojection error (in pixel)');
83xlabel('x');
84ylabel('y');
85drawnow;
86
87set(5,'Name','error','NumberTitle','off');
88
89
90
91for kk = ima_proc,
92 if exist(['y_' num2str(kk)]),
93 if active_images(kk) & eval(['~isnan(y_' num2str(kk) '(1,1))']),
94
95 if exist(['I_' num2str(kk)]),
96 eval(['I = I_' num2str(kk) ';']);
97 else
98 I = 255*ones(ny,nx);
99 end;
100
101 figure(5+kk);
102 image(I); hold on;
103 colormap(gray(256));
104 title(['Image ' num2str(kk) ' - Image points (+) and reprojected grid points (o)']);
105 eval(['plot(x_' num2str(kk) '(1,:)+1,x_' num2str(kk) '(2,:)+1,''r+'');']);
106 eval(['plot(y_' num2str(kk) '(1,:)+1,y_' num2str(kk) '(2,:)+1,''' colors(rem(kk-1,6)+1) 'o'');']);
107 zoom on;
108 axis([1 nx 1 ny]);
109 hold off;
110 drawnow;
111
112 set(5+kk,'Name',num2str(kk),'NumberTitle','off');
113
114 end;
115 end;
116end;
117
118
119err_std = std(ex')';
120
121fprintf(1,'Pixel error: err = [%3.5f %3.5f] (all active images)\n\n',err_std);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rigid_motion.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rigid_motion.m
new file mode 100755
index 0000000..473405c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rigid_motion.m
@@ -0,0 +1,66 @@
1function [Y,dYdom,dYdT] = rigid_motion(X,om,T);
2
3%rigid_motion.m
4%
5%[Y,dYdom,dYdT] = rigid_motion(X,om,T)
6%
7%Computes the rigid motion transformation Y = R*X+T, where R = rodrigues(om).
8%
9%INPUT: X: 3D structure in the world coordinate frame (3xN matrix for N points)
10% (om,T): Rigid motion parameters between world coordinate frame and camera reference frame
11% om: rotation vector (3x1 vector); T: translation vector (3x1 vector)
12%
13%OUTPUT: Y: 3D coordinates of the structure points in the camera reference frame (3xN matrix for N points)
14% dYdom: Derivative of Y with respect to om ((3N)x3 matrix)
15% dYdT: Derivative of Y with respect to T ((3N)x3 matrix)
16%
17%Definitions:
18%Let P be a point in 3D of coordinates X in the world reference frame (stored in the matrix X)
19%The coordinate vector of P in the camera reference frame is: Y = R*X + T
20%where R is the rotation matrix corresponding to the rotation vector om: R = rodrigues(om);
21%
22%Important function called within that program:
23%
24%rodrigues.m: Computes the rotation matrix corresponding to a rotation vector
25
26
27
28if nargin < 3,
29 T = zeros(3,1);
30 if nargin < 2,
31 om = zeros(3,1);
32 if nargin < 1,
33 error('Need at least a 3D structure as input (in rigid_motion.m)');
34 return;
35 end;
36 end;
37end;
38
39
40[R,dRdom] = rodrigues(om);
41
42[m,n] = size(X);
43
44Y = R*X + T*ones(1,n);
45
46if nargout > 1,
47
48
49dYdR = zeros(3*n,9);
50dYdT = zeros(3*n,3);
51
52dYdR(1:3:end,1:3:end) = X';
53dYdR(2:3:end,2:3:end) = X';
54dYdR(3:3:end,3:3:end) = X';
55
56dYdT(1:3:end,1) = ones(n,1);
57dYdT(2:3:end,2) = ones(n,1);
58dYdT(3:3:end,3) = ones(n,1);
59
60dYdom = dYdR * dRdom;
61
62end;
63
64
65
66
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rodrigues.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rodrigues.m
new file mode 100755
index 0000000..9d55337
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rodrigues.m
@@ -0,0 +1,217 @@
1function [out,dout]=rodrigues(in)
2
3% RODRIGUES Transform rotation matrix into rotation vector and viceversa.
4%
5% Sintax: [OUT]=RODRIGUES(IN)
6% If IN is a 3x3 rotation matrix then OUT is the
7% corresponding 3x1 rotation vector
8% if IN is a rotation 3-vector then OUT is the
9% corresponding 3x3 rotation matrix
10%
11
12%%
13%% Copyright (c) March 1993 -- Pietro Perona
14%% California Institute of Technology
15%%
16
17%% ALL CHECKED BY JEAN-YVES BOUGUET, October 1995.
18%% FOR ALL JACOBIAN MATRICES !!! LOOK AT THE TEST AT THE END !!
19
20%% BUG when norm(om)=pi fixed -- April 6th, 1997;
21%% Jean-Yves Bouguet
22
23
24[m,n] = size(in);
25%bigeps = 10e+4*eps;
26bigeps = 10e+20*eps;
27
28if ((m==1) & (n==3)) | ((m==3) & (n==1)) %% it is a rotation vector
29 theta = norm(in);
30 if theta < eps
31 R = eye(3);
32
33 %if nargout > 1,
34
35 dRdin = [0 0 0;
36 0 0 1;
37 0 -1 0;
38 0 0 -1;
39 0 0 0;
40 1 0 0;
41 0 1 0;
42 -1 0 0;
43 0 0 0];
44
45 %end;
46
47 else
48 if n==length(in) in=in'; end; %% make it a column vec. if necess.
49
50 %m3 = [in,theta]
51
52 dm3din = [eye(3);in'/theta];
53
54 omega = in/theta;
55
56 %m2 = [omega;theta]
57
58 dm2dm3 = [eye(3)/theta -in/theta^2; zeros(1,3) 1];
59
60 alpha = cos(theta);
61 beta = sin(theta);
62 gamma = 1-cos(theta);
63 omegav=[[0 -omega(3) omega(2)];[omega(3) 0 -omega(1)];[-omega(2) omega(1) 0 ]];
64 A = omega*omega';
65
66 %m1 = [alpha;beta;gamma;omegav;A];
67
68 dm1dm2 = zeros(21,4);
69 dm1dm2(1,4) = -sin(theta);
70 dm1dm2(2,4) = cos(theta);
71 dm1dm2(3,4) = sin(theta);
72 dm1dm2(4:12,1:3) = [0 0 0 0 0 1 0 -1 0;
73 0 0 -1 0 0 0 1 0 0;
74 0 1 0 -1 0 0 0 0 0]';
75
76 w1 = omega(1);
77 w2 = omega(2);
78 w3 = omega(3);
79
80 dm1dm2(13:21,1) = [2*w1;w2;w3;w2;0;0;w3;0;0];
81 dm1dm2(13: 21,2) = [0;w1;0;w1;2*w2;w3;0;w3;0];
82 dm1dm2(13:21,3) = [0;0;w1;0;0;w2;w1;w2;2*w3];
83
84 R = eye(3)*alpha + omegav*beta + A*gamma;
85
86 dRdm1 = zeros(9,21);
87
88 dRdm1([1 5 9],1) = ones(3,1);
89 dRdm1(:,2) = omegav(:);
90 dRdm1(:,4:12) = beta*eye(9);
91 dRdm1(:,3) = A(:);
92 dRdm1(:,13:21) = gamma*eye(9);
93
94 dRdin = dRdm1 * dm1dm2 * dm2dm3 * dm3din;
95
96
97 end;
98 out = R;
99 dout = dRdin;
100
101 %% it is prob. a rot matr.
102 elseif ((m==n) & (m==3) & (norm(in' * in - eye(3)) < bigeps)...
103 & (abs(det(in)-1) < bigeps))
104 R = in;
105
106
107
108 tr = (trace(R)-1)/2;
109 dtrdR = [1 0 0 0 1 0 0 0 1]/2;
110 theta = real(acos(tr));
111
112
113 if sin(theta) >= 1e-5,
114
115 dthetadtr = -1/sqrt(1-tr^2);
116
117 dthetadR = dthetadtr * dtrdR;
118 % var1 = [vth;theta];
119 vth = 1/(2*sin(theta));
120 dvthdtheta = -vth*cos(theta)/sin(theta);
121 dvar1dtheta = [dvthdtheta;1];
122
123 dvar1dR = dvar1dtheta * dthetadR;
124
125
126 om1 = [R(3,2)-R(2,3), R(1,3)-R(3,1), R(2,1)-R(1,2)]';
127
128 dom1dR = [0 0 0 0 0 1 0 -1 0;
129 0 0 -1 0 0 0 1 0 0;
130 0 1 0 -1 0 0 0 0 0];
131
132 % var = [om1;vth;theta];
133 dvardR = [dom1dR;dvar1dR];
134
135 % var2 = [om;theta];
136 om = vth*om1;
137 domdvar = [vth*eye(3) om1 zeros(3,1)];
138 dthetadvar = [0 0 0 0 1];
139 dvar2dvar = [domdvar;dthetadvar];
140
141
142 out = om*theta;
143 domegadvar2 = [theta*eye(3) om];
144
145 dout = domegadvar2 * dvar2dvar * dvardR;
146
147
148 else
149 if tr > 0; % case norm(om)=0;
150
151 out = [0 0 0]';
152
153 dout = [0 0 0 0 0 1/2 0 -1/2 0;
154 0 0 -1/2 0 0 0 1/2 0 0;
155 0 1/2 0 -1/2 0 0 0 0 0];
156 else % case norm(om)=pi; %% fixed April 6th
157
158
159 out = theta * (sqrt((diag(R)+1)/2).*[1;2*(R(1,2:3)>=0)'-1]);
160 %keyboard;
161
162 if nargout > 1,
163 fprintf(1,'WARNING!!!! Jacobian domdR undefined!!!\n');
164 dout = NaN*ones(3,9);
165 end;
166 end;
167 end;
168
169 else
170 error('Neither a rotation matrix nor a rotation vector were provided');
171 end;
172
173return;
174
175%% test of the Jacobians:
176
177%%%% TEST OF dRdom:
178om = randn(3,1);
179dom = randn(3,1)/1000000;
180
181[R1,dR1] = rodrigues(om);
182R2 = rodrigues(om+dom);
183
184R2a = R1 + reshape(dR1 * dom,3,3);
185
186gain = norm(R2 - R1)/norm(R2 - R2a)
187
188%%% TEST OF dOmdR:
189om = randn(3,1);
190R = rodrigues(om);
191dom = randn(3,1)/10000;
192dR = rodrigues(om+dom) - R;
193
194[omc,domdR] = rodrigues(R);
195[om2] = rodrigues(R+dR);
196
197om_app = omc + domdR*dR(:);
198
199gain = norm(om2 - omc)/norm(om2 - om_app)
200
201
202%%% OTHER BUG: (FIXED NOW!!!)
203
204omu = randn(3,1);
205omu = omu/norm(omu)
206om = pi*omu;
207[R,dR]= rodrigues(om);
208[om2] = rodrigues(R);
209[om om2]
210
211%%% NORMAL OPERATION
212
213om = randn(3,1);
214[R,dR]= rodrigues(om);
215[om2] = rodrigues(R);
216[om om2]
217
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rotation.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rotation.m
new file mode 100755
index 0000000..87ee2fe
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/rotation.m
@@ -0,0 +1,23 @@
1function [] = rotation(st);
2
3if nargin < 1,
4 st= 1;
5end;
6
7
8fig = gcf;
9
10ax = gca;
11
12vv = get(ax,'view');
13
14az = vv(1);
15el = vv(2);
16
17for azi = az:-abs(st):az-360,
18
19 set(ax,'view',[azi el]);
20 figure(fig);
21 drawnow;
22
23end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/run_error_analysis.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/run_error_analysis.m
new file mode 100755
index 0000000..095e17e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/run_error_analysis.m
@@ -0,0 +1,65 @@
1%%% Program that launchs the complete
2
3for N_ima_active = 1:30,
4
5 error_analysis;
6
7end;
8
9
10
11return;
12
13
14f = [];
15f_std = [];
16
17c = [];
18c_std = [];
19
20k = [];
21k_std = [];
22
23NN = 30;
24
25for rr = 1:NN,
26
27 load(['Calib_Accuracies_' num2str(rr)]);
28
29 [m1,s1] = mean_std_robust(fc_list(1,:));
30 [m2,s2] = mean_std_robust(fc_list(2,:));
31
32 f = [f [m1;m2]];
33 f_std = [f_std [s1;s2]];
34
35 [m1,s1] = mean_std_robust(cc_list(1,:));
36 [m2,s2] = mean_std_robust(cc_list(2,:));
37
38 c = [c [m1;m2]];
39 c_std = [c_std [s1;s2]];
40
41 [m1,s1] = mean_std_robust(kc_list(1,:));
42 [m2,s2] = mean_std_robust(kc_list(2,:));
43 [m3,s3] = mean_std_robust(kc_list(3,:));
44 [m4,s4] = mean_std_robust(kc_list(4,:));
45
46 k = [k [m1;m2;m3;m4]];
47 k_std = [k_std [s1;s2;s3;s4]];
48
49end;
50
51figure(1);
52errorbar([1:NN;1:NN]',f',f_std');
53figure(2);
54errorbar([1:NN;1:NN]',c',c_std');
55figure(3);
56errorbar([1:NN;1:NN;1:NN;1:NN]',k',k_std');
57
58figure(4);
59semilogy(f_std');
60
61figure(5);
62semilogy(c_std');
63
64figure(6);
65semilogy(k_std');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/saveinr.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/saveinr.m
new file mode 100755
index 0000000..a176e39
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/saveinr.m
@@ -0,0 +1,46 @@
1%SAVEINR Write an INRIMAGE format file
2%
3% SAVEINR(filename, im)
4%
5% Saves the specified image array in a INRIA image format file.
6%
7% SEE ALSO: loadinr
8%
9% Copyright (c) Peter Corke, 1999 Machine Vision Toolbox for Matlab
10
11% Peter Corke 1996
12
13function saveinr(fname, im)
14
15 fid = fopen(fname, 'w');
16 [r,c] = size(im');
17
18 % build the header
19 hdr = [];
20 s = sprintf('#INRIMAGE-4#{\n');
21 hdr = [hdr s];
22 s = sprintf('XDIM=%d\n',c);
23 hdr = [hdr s];
24 s = sprintf('YDIM=%d\n',r);
25 hdr = [hdr s];
26 s = sprintf('ZDIM=1\n');
27 hdr = [hdr s];
28 s = sprintf('VDIM=1\n');
29 hdr = [hdr s];
30 s = sprintf('TYPE=float\n');
31 hdr = [hdr s];
32 s = sprintf('PIXSIZE=32\n');
33 hdr = [hdr s];
34 s = sprintf('SCALE=2**0\n');
35 hdr = [hdr s];
36 s = sprintf('CPU=sun\n#');
37 hdr = [hdr s];
38
39 % make it 256 bytes long and write it
40 hdr256 = zeros(1,256);
41 hdr256(1:length(hdr)) = hdr;
42 fwrite(fid, hdr256, 'uchar');
43
44 % now the binary data
45 fwrite(fid, im', 'float32');
46 fclose(fid)
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/savepgm.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/savepgm.m
new file mode 100755
index 0000000..0cee75d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/savepgm.m
@@ -0,0 +1,22 @@
1%SAVEPGM Write a PGM format file
2%
3% SAVEPGM(filename, im)
4%
5% Saves the specified image array in a binary (P5) format PGM image file.
6%
7% SEE ALSO: loadpgm
8%
9% Copyright (c) Peter Corke, 1999 Machine Vision Toolbox for Matlab
10
11
12% Peter Corke 1994
13
14function savepgm(fname, im)
15
16 fid = fopen(fname, 'w');
17 [r,c] = size(im');
18 fprintf(fid, 'P5\n');
19 fprintf(fid, '%d %d\n', r, c);
20 fprintf(fid, '255\n');
21 fwrite(fid, im', 'uchar');
22 fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/saveppm.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/saveppm.m
new file mode 100755
index 0000000..ece092b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/saveppm.m
@@ -0,0 +1,45 @@
1%SAVEPPM Write a PPM format file
2%
3% SAVEPPM(filename, I)
4%
5% Saves the specified red, green and blue planes in a binary (P6)
6% format PPM image file.
7%
8% SEE ALSO: loadppm
9%
10% Copyright (c) Peter Corke, 1999 Machine Vision Toolbox for Matlab
11
12
13% Peter Corke 1994
14
15function saveppm(fname, I)
16
17I = double(I);
18
19if size(I,3) == 1,
20 R = I;
21 G = I;
22 B = I;
23else
24 R = I(:,:,1);
25 G = I(:,:,2);
26 B = I(:,:,3);
27end;
28
29%keyboard;
30
31 fid = fopen(fname, 'w');
32 [r,c] = size(R');
33 fprintf(fid, 'P6\n');
34 fprintf(fid, '%d %d\n', r, c);
35 fprintf(fid, '255\n');
36 R = R';
37 G = G';
38 B = B';
39 im = [R(:) G(:) B(:)];
40 %im = reshape(im,r,c*3);
41 im = im';
42 %im = im(:);
43 fwrite(fid, im, 'uchar');
44 fclose(fid);
45
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/saving_calib.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/saving_calib.m
new file mode 100755
index 0000000..3f98a8b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/saving_calib.m
@@ -0,0 +1,95 @@
1
2if ~exist('n_ima')|~exist('fc'),
3 fprintf(1,'No calibration data available.\n');
4 return;
5end;
6
7check_active_images;
8
9if ~exist('solution_init'), solution_init = []; end;
10
11for kk = 1:n_ima,
12 if ~exist(['dX_' num2str(kk)]), eval(['dX_' num2str(kk) '= dX;']); end;
13 if ~exist(['dY_' num2str(kk)]), eval(['dY_' num2str(kk) '= dY;']); end;
14end;
15
16if ~exist('param_list'),
17 param_list = solution;
18end;
19
20if ~exist('wintx'),
21 wintx = [];
22 winty = [];
23end;
24
25if ~exist('dX_default'),
26 dX_default = [];
27 dY_default = [];
28end;
29
30if ~exist('alpha_c'),
31 alpha_c = 0;
32end;
33
34for kk = 1:n_ima,
35 if ~exist(['y_' num2str(kk)]),
36 eval(['y_' num2str(kk) ' = NaN*ones(2,1);']);
37 end;
38 if ~exist(['n_sq_x_' num2str(kk)]),
39 eval(['n_sq_x_' num2str(kk) ' = NaN;']);
40 eval(['n_sq_y_' num2str(kk) ' = NaN;']);
41 end;
42 if ~exist(['wintx_' num2str(kk)]),
43 eval(['wintx_' num2str(kk) ' = NaN;']);
44 eval(['winty_' num2str(kk) ' = NaN;']);
45 end;
46end;
47
48save_name = 'Calib_Results';
49
50if exist([ save_name '.mat'])==2,
51 disp('WARNING: File Calib_Results.mat already exists');
52 pfn = -1;
53 cont = 1;
54 while cont,
55 pfn = pfn + 1;
56 postfix = ['_old'num2str(pfn)];
57 save_name = [ 'Calib_Results' postfix];
58 cont = (exist([ save_name '.mat'])==2);
59 end;
60 copyfile('Calib_Results.mat',[save_name '.mat']);
61 disp(['Copying the current Calib_Results.mat file to ' save_name '.mat']);
62end;
63
64
65save_name = 'Calib_Results';
66
67if exist('calib_name'),
68
69 fprintf(1,['\nSaving calibration results under ' save_name '.mat\n']);
70
71 string_save = ['save ' save_name ' center_optim param_list active_images ind_active center_optim est_alpha est_dist fc kc cc alpha_c ex x y solution solution_init wintx winty n_ima type_numbering N_slots small_calib_image first_num image_numbers format_image calib_name Hcal Wcal nx ny map dX_default dY_default KK inv_KK dX dY'];
72
73 for kk = 1:n_ima,
74 string_save = [string_save ' X_' num2str(kk) ' x_' num2str(kk) ' y_' num2str(kk) ' ex_' num2str(kk) ' omc_' num2str(kk) ' Rc_' num2str(kk) ' Tc_' num2str(kk) ' H_' num2str(kk) ' n_sq_x_' num2str(kk) ' n_sq_y_' num2str(kk) ' wintx_' num2str(kk) ' winty_' num2str(kk) ' dX_' num2str(kk) ' dY_' num2str(kk)];
75 end;
76
77else
78
79 fprintf(1,['\nSaving calibration results under ' save_name '.mat (no image version)\n']);
80
81 string_save = ['save ' save_name ' center_optim param_list active_images ind_active center_optim est_alpha est_dist fc kc cc alpha_c ex x y solution solution_init wintx winty n_ima nx ny dX_default dY_default KK inv_KK dX dY'];
82
83 for kk = 1:n_ima,
84 string_save = [string_save ' X_' num2str(kk) ' x_' num2str(kk) ' y_' num2str(kk) ' ex_' num2str(kk) ' omc_' num2str(kk) ' Rc_' num2str(kk) ' Tc_' num2str(kk) ' H_' num2str(kk) ' n_sq_x_' num2str(kk) ' n_sq_y_' num2str(kk) ' wintx_' num2str(kk) ' winty_' num2str(kk) ' dX_' num2str(kk) ' dY_' num2str(kk)];
85 end;
86
87end;
88
89
90
91%fprintf(1,'To load later click on Load\n');
92
93eval(string_save);
94
95fprintf(1,'done\n'); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/script_fit_distortion.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/script_fit_distortion.m
new file mode 100755
index 0000000..c5e5430
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/script_fit_distortion.m
@@ -0,0 +1,39 @@
1
2 satis_distort = 0;
3
4 disp(['Estimated focal: ' num2str(f_g) ' pixels']);
5
6 while ~satis_distort,
7
8 k_g = input('Guess for distortion factor kc ([]=0): ');
9
10 if isempty(k_g), k_g = 0; end;
11
12 xy_corners_undist = comp_distortion2([x' - c_g(1);y'-c_g(2)]/f_g,k_g);
13
14 xu = xy_corners_undist(1,:)';
15 yu = xy_corners_undist(2,:)';
16
17 [XXu] = projectedGrid ( [xu(1);yu(1)], [xu(2);yu(2)],[xu(3);yu(3)], [xu(4);yu(4)],n_sq_x+1,n_sq_y+1); % The full grid
18
19 XX = (ones(2,1)*(1 + k_g * sum(XXu.^2))) .* XXu;
20 XX(1,:) = f_g*XX(1,:)+c_g(1);
21 XX(2,:) = f_g*XX(2,:)+c_g(2);
22
23 figure(2);
24 image(I);
25 colormap(map);
26 zoom on;
27 hold on;
28 %plot(f_g*XXu(1,:)+c_g(1),f_g*XXu(2,:)+c_g(2),'ro');
29 plot(XX(1,:),XX(2,:),'r+');
30 title('The red crosses should be on the grid corners...');
31 hold off;
32
33 satis_distort = input('Satisfied with distortion? ([]=no, other=yes) ');
34
35 satis_distort = ~isempty(satis_distort);
36
37
38 end;
39 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/startup.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/startup.m
new file mode 100755
index 0000000..aad0fa4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/startup.m
@@ -0,0 +1,9 @@
1% Main camera calibration toolbox:
2
3calib_gui;
4
5%calib_gui;
6
7path(pwd,path);
8
9format compact
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/undistort_image.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/undistort_image.m
new file mode 100755
index 0000000..d9a7574
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/undistort_image.m
@@ -0,0 +1,193 @@
1%%% INPUT THE IMAGE FILE NAME:
2
3if ~exist('fc')|~exist('cc')|~exist('kc')|~exist('alpha_c'),
4 fprintf(1,'No intrinsic camera parameters available.\n');
5 return;
6end;
7
8KK = [fc(1) alpha_c*fc(1) cc(1);0 fc(2) cc(2) ; 0 0 1];
9
10disp('Program that undistorts images');
11disp('The intrinsic camera parameters are assumed to be known (previously computed)');
12
13fprintf(1,'\n');
14
15quest = input('Do you want to undistort all the calibration images ([],0) or a new image (1)? ');
16
17if isempty(quest),
18 quest = 0;
19end;
20
21if ~quest,
22
23 if ~exist(['I_' num2str(ind_active(1))]),
24 ima_read_calib;
25 end;
26
27 check_active_images;
28
29 format_image2 = format_image;
30 if format_image2(1) == 'j',
31 format_image2 = 'bmp';
32 end;
33
34 for kk = 1:n_ima,
35
36 if exist(['I_' num2str(kk)]),
37
38 eval(['I = I_' num2str(kk) ';']);
39 [I2] = rect(I,eye(3),fc,cc,kc,KK);
40
41 if ~type_numbering,
42 number_ext = num2str(image_numbers(kk));
43 else
44 number_ext = sprintf(['%.' num2str(N_slots) 'd'],image_numbers(kk));
45 end;
46
47 ima_name2 = [calib_name '_rect' number_ext '.' format_image2];
48
49 fprintf(1,['Saving undistorted image under ' ima_name2 '...\n']);
50
51
52 if format_image2(1) == 'p',
53 if format_images2(2) == 'p',
54 saveppm(ima_name2,uint8(round(I2)));
55 else
56 savepgm(ima_name2,uint8(round(I2)));
57 end;
58 else
59 if format_image2(1) == 'r',
60 writeras(ima_name2,round(I2),gray(256));
61 else
62 imwrite(uint8(round(I2)),gray(256),ima_name2,format_image2);
63 end;
64 end;
65
66
67 end;
68
69 end;
70
71 fprintf(1,'done\n');
72
73else
74
75 dir;
76 fprintf(1,'\n');
77
78 image_name = input('Image name (full name without extension): ','s');
79
80 format_image2 = '0';
81
82while format_image2 == '0',
83
84 format_image2 = input('Image format: ([]=''r''=''ras'', ''b''=''bmp'', ''t''=''tif'', ''p''=''pgm'', ''j''=''jpg'', ''m''=''ppm'') ','s');
85
86 if isempty(format_image2),
87 format_image2 = 'ras';
88 end;
89
90 if lower(format_image2(1)) == 'm',
91 format_image2 = 'ppm';
92 else
93 if lower(format_image2(1)) == 'b',
94 format_image2 = 'bmp';
95 else
96 if lower(format_image2(1)) == 't',
97 format_image2 = 'tif';
98 else
99 if lower(format_image2(1)) == 'p',
100 format_image2 = 'pgm';
101 else
102 if lower(format_image2(1)) == 'j',
103 format_image2 = 'jpg';
104 else
105 if lower(format_image2(1)) == 'r',
106 format_image2 = 'ras';
107 else
108 disp('Invalid image format');
109 format_image2 = '0'; % Ask for format once again
110 end;
111 end;
112 end;
113 end;
114 end;
115 end;
116end;
117
118ima_name = [image_name '.' format_image2];
119
120
121%%% READ IN IMAGE:
122
123if format_image2(1) == 'p',
124 if format_image2(2) == 'p',
125 I = double(loadppm(ima_name));
126 else
127 I = double(loadpgm(ima_name));
128 end;
129else
130 if format_image2(1) == 'r',
131 I = readras(ima_name);
132 else
133 I = double(imread(ima_name));
134 end;
135end;
136
137if size(I,3)>1,
138 I = I(:,:,2);
139end;
140
141
142if (size(I,1)>ny)|(size(I,2)>nx),
143 I = I(1:ny,1:nx);
144end;
145
146
147 %% SHOW THE ORIGINAL IMAGE:
148
149 figure(2);
150 image(I);
151 colormap(gray(256));
152 title('Original image (with distortion) - Stored in array I');
153 drawnow;
154
155
156 %% UNDISTORT THE IMAGE:
157
158 fprintf(1,'Computing the undistorted image...')
159
160 [I2] = rect(I,eye(3),fc,cc,kc,alpha_c,KK);
161
162 fprintf(1,'done\n');
163
164 figure(3);
165 image(I2);
166 colormap(gray(256));
167 title('Undistorted image - Stored in array I2');
168 drawnow;
169
170
171 %% SAVE THE IMAGE IN FILE:
172
173 ima_name2 = [image_name '_rect.' format_image2];
174
175 fprintf(1,['Saving undistorted image under ' ima_name2 '...']);
176
177 if format_image2(1) == 'p',
178 if format_images2(2) == 'p',
179 saveppm(ima_name2,uint8(round(I2)));
180 else
181 savepgm(ima_name2,uint8(round(I2)));
182 end;
183 else
184 if format_image2(1) == 'r',
185 writeras(ima_name2,round(I2),gray(256));
186 else
187 imwrite(uint8(round(I2)),gray(256),ima_name2,format_image2);
188 end;
189 end;
190
191 fprintf(1,'done\n');
192
193end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/willson_convert.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/willson_convert.m
new file mode 100755
index 0000000..8946349
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/willson_convert.m
@@ -0,0 +1,89 @@
1function [fc,cc,kc,Rc,Tc,omc,nx,ny] = willson_convert(Ncx,Nfx,dx,dy,dpx,dpy,Cx,Cy,sx,f,kappa1,Tx,Ty,Tz,Rx,Ry,Rz,p1,p2);
2
3%Conversion from Reg Willson's calibration format to my format
4
5% Conversion:
6
7% Focal length:
8fc = [sx/dpx ; 1/dpy]*f;
9
10% Principal point;
11cc = [Cx;Cy];
12
13% Extrinsic parameters:
14Rx = rodrigues([Rx;0;0]);
15Ry = rodrigues([0;Ry;0]);
16Rz = rodrigues([0;0;Rz]);
17
18Rc = Rz * Ry * Rx;
19
20omc = rodrigues(Rc);
21
22Tc = [Tx;Ty;Tz];
23
24
25% More tricky: Take care of the distorsion:
26
27Nfy = round(Nfx * 3/4);
28
29nx = Nfx;
30ny = Nfy;
31
32% Select a set of DISTORTED coordinates uniformely distributed across the image:
33
34[xp_dist,yp_dist] = meshgrid(0:Nfx-1,0:Nfy);
35
36xp_dist = xp_dist(:)';
37yp_dist = yp_dist(:)';
38
39
40% Apply UNDISTORTION according to Willson:
41
42xp_sensor_dist = dpx*(xp_dist - Cx)/sx;
43yp_sensor_dist = dpy*(yp_dist - Cy);
44
45dist_fact = 1 + kappa1*(xp_sensor_dist.^2 + yp_sensor_dist.^2);
46
47xp_sensor = xp_sensor_dist .* dist_fact;
48yp_sensor = yp_sensor_dist .* dist_fact;
49
50xp = xp_sensor * sx / dpx + Cx;
51yp = yp_sensor / dpy + Cy;
52
53ind= find((xp > 0) & (xp < Nfx-1) & (yp > 0) & (yp < Nfy-1));
54
55xp = xp(ind);
56yp = yp(ind);
57xp_dist = xp_dist(ind);
58yp_dist = yp_dist(ind);
59
60
61% Now, find my own set of parameters:
62
63x_dist = [(xp_dist - cc(1))/fc(1);(yp_dist - cc(2))/fc(2)];
64x = [(xp - cc(1))/fc(1);(yp - cc(2))/fc(2)];
65
66k = [0;0;0;0];
67
68for kk = 1:5,
69
70 [xd,dxddk] = apply_distortion(x,k);
71
72 err = x_dist - xd;
73
74 %norm(err)
75
76 k_step = inv(dxddk'*dxddk)*(dxddk')*err(:);
77
78 k = k + k_step; %inv(dxddk'*dxddk)*(dxddk')*err(:);
79
80 %norm(k_step)/norm(k)
81
82 if norm(k_step)/norm(k) < 10e-10,
83 break;
84 end;
85
86end;
87
88
89kc = k;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/willson_read.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/willson_read.m
new file mode 100755
index 0000000..bbde63c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/willson_read.m
@@ -0,0 +1,59 @@
1% Read in Reg Willson's data file, and convert it into my data format:
2
3%dir;
4
5%calib_file = input('Reg Willson calibration file name: ','s');
6
7if exist(calib_file),
8
9
10 load(calib_file);
11
12 inddot = find(calib_file == '.');
13
14 if isempty(inddot),
15 varname = calib_file;
16 else
17 varname = calib_file(1:inddot(1)-1);
18 end;
19
20 eval(['calib_params = ' varname ';'])
21
22 Ncx = calib_params(1);
23 Nfx = calib_params(2);
24 dx = calib_params(3);
25 dy = calib_params(4);
26 dpx = calib_params(5);
27 dpy = calib_params(6);
28 Cx = calib_params(7);
29 Cy = calib_params(8);
30 sx = calib_params(9);
31 f = calib_params(10);
32 kappa1 = calib_params(11);
33 Tx = calib_params(12);
34 Ty = calib_params(13);
35 Tz = calib_params(14);
36 Rx = calib_params(15);
37 Ry = calib_params(16);
38 Rz = calib_params(17);
39 p1 = calib_params(18);
40 p2 = calib_params(19);
41
42 % Conversion:
43 [fc,cc,kc,Rc_1,Tc_1,omc_1,nx,ny] = willson_convert(Ncx,Nfx,dx,dy,dpx,dpy,Cx,Cy,sx,f,kappa1,Tx,Ty,Tz,Rx,Ry,Rz,p1,p2);
44
45 KK = [fc(1) 0 cc(1);0 fc(2) cc(2) ; 0 0 1];
46
47 n_ima = 1;
48
49 X_1 = [NaN;NaN;NaN];
50 x_1 = [NaN;NaN];
51
52 map = gray(256);
53
54else
55
56 disp(['WARNING: Calibration file ' calib_file ' not found']);
57
58end;
59
diff --git a/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/writeras.m b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/writeras.m
new file mode 100755
index 0000000..c7eb7bc
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/TOOLBOX_calib/writeras.m
@@ -0,0 +1,105 @@
1function writeras(filename, image, map);
2%WRITERAS Write an image file in sun raster format.
3% WRITERAS('imagefile.ras', image_matrix, map) writes a
4% "sun.raster" image file.
5
6% Written by Thomas K. Leung 3/30/93.
7% @ California Institute of Technology.
8
9
10% PC and UNIX version of writeras - Jean-Yves Bouguet - Dec. 1998
11
12dot = max(find(filename == '.'));
13suffix = filename(dot+1:dot+3);
14
15if nargin < 3,
16 map = [];
17end;
18
19if(strcmp(suffix, 'ras'))
20 %Write header
21
22 fp = fopen(filename, 'wb');
23 if(fp < 0) error(['Cannot open ' filename '.']), end
24
25 [height, width] = size(image);
26 image = image - 1;
27 mapsize = size(map, 1)*size(map,2);
28 %fwrite(fp, ...
29 % [1504078485, width, height, 8, height*width, 1, 1, mapsize], ...
30 % 'long');
31
32
33 zero_str = '00000000';
34
35 % MAGIC NUMBER:
36
37
38 fwrite(fp,89,'uchar');
39 fwrite(fp,166,'uchar');
40 fwrite(fp,106,'uchar');
41 fwrite(fp,149,'uchar');
42
43 width_str = dec2hex(width);
44 width_str = [zero_str(1:8-length(width_str)) width_str];
45
46 for ii = 1:2:7,
47 fwrite(fp,hex2dec(width_str(ii:ii+1)),'uchar');
48 end;
49
50
51 height_str = dec2hex(height);
52 height_str = [zero_str(1:8-length(height_str)) height_str];
53
54 for ii = 1:2:7,
55 fwrite(fp,hex2dec(height_str(ii:ii+1)),'uchar');
56 end;
57
58 fwrite(fp,0,'uchar');
59 fwrite(fp,0,'uchar');
60 fwrite(fp,0,'uchar');
61 fwrite(fp,8,'uchar');
62
63 ll = height*width;
64 ll_str = dec2hex(ll);
65 ll_str = [zero_str(1:8-length(ll_str)) ll_str];
66
67 for ii = 1:2:7,
68 fwrite(fp,hex2dec(ll_str(ii:ii+1)),'uchar');
69 end;
70
71 fwrite(fp,0,'uchar');
72 fwrite(fp,0,'uchar');
73 fwrite(fp,0,'uchar');
74 fwrite(fp,1,'uchar');
75 fwrite(fp,0,'uchar');
76 fwrite(fp,0,'uchar');
77 fwrite(fp,0,'uchar');
78 fwrite(fp,~~mapsize,'uchar');
79
80 mapsize_str = dec2hex(mapsize);
81 mapsize_str = [zero_str(1:8-length(mapsize_str)) mapsize_str];
82
83 %keyboard;
84
85 for ii = 1:2:7,
86 fwrite(fp,hex2dec(mapsize_str(ii:ii+1)),'uchar');
87 end;
88
89
90 if mapsize ~= 0
91 map = min(255, fix(255*map));
92 fwrite(fp, map, 'uchar');
93 end
94 if rem(width,2) == 1
95 image = [image'; zeros(1, height)]';
96 top = 255 * ones(size(image));
97 fwrite(fp, min(top,image)', 'uchar');
98 else
99 top = 255 * ones(size(image));
100 fwrite(fp, min(top,image)', 'uchar');
101 end
102 fclose(fp);
103else
104 error('Image file name must end in either ''ras'' or ''rast''.');
105end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/README b/SD-VBS/common/toolbox/toolbox_basic/affine/README
new file mode 100755
index 0000000..e578a74
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/README
@@ -0,0 +1,5 @@
1Top level program is "compute_AD.m". Use "compute_AD_disp.m" if one
2wants to display results as program runs.
3
4The testing programs are called "simulation.m" for synthetic images,
5and "test_affine.m" for real images.
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/carve_it.m b/SD-VBS/common/toolbox/toolbox_basic/affine/carve_it.m
new file mode 100755
index 0000000..1a44f89
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/carve_it.m
@@ -0,0 +1,25 @@
1function img = carve_it(I,center,window_size_h)
2
3[size_y,size_x]= size(I);
4min_x = round(center(1)-window_size_h(1));
5max_x = round(center(1)+window_size_h(1));
6min_y = round(center(2)-window_size_h(2));
7max_y = round(center(2)+window_size_h(2));
8window_size = window_size_h*2 +1;
9
10if (min_x <1)|(max_x > size_x)|(min_y<1)|(max_y>size_y),
11 disp('window too big');
12 center
13 window_size_h
14 img = zeros(window_size(2),window_size(1));
15 n_min_x = max(1,round(min_x));
16 n_min_y = max(1,round(min_y));
17 n_max_x = min(size_x,round(max_x));
18 n_max_y = min(size_y,round(max_y));
19 img(1+(n_min_y-min_y):window_size(2)-(max_y-n_max_y),1+(n_min_x-min_x):window_size(1)-(max_x-n_max_x))=I(n_min_y:n_max_y,n_min_x:n_max_x);
20else
21 img = I(center(2)-window_size_h(2):center(2)+window_size_h(2),...
22 center(1)-window_size_h(1):center(1)+window_size_h(1));
23end
24
25
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD.m b/SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD.m
new file mode 100755
index 0000000..a39acd6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD.m
@@ -0,0 +1,90 @@
1function [A,D,mask] =...
2compute_AD(img_i,img_j,center_i,center_j,window_size_h,num_iter,w,num_trans,Dest,mask)
3%
4% function [A,D,mask] = ...
5% compute_AD(img_i,img_j,center_i,center_j,window_size_h,num_iter,w,
6% mask,num_trans)
7%
8% A: Affine motion;
9% D: Displacement;
10%
11% img_i, img_j: the two image(in full size);
12% center_i, center_j: the centers of the feature in two images;
13% window_size_h: half size of the feature window;
14% num_iter: number of iterations;
15% w: parameter used in "grad.m" for computing gaussians used for
16% gradient estimation;
17%
18% num_trans: OPTIONAL, number of translation iteration; default = 3;
19% mask: OPTIONAL, if some area of the square shaped feature window should
20% be weighted less;
21%
22
23%
24% Jianbo Shi
25%
26
27if ~exist('Dest'),
28 Dest = [0,0];
29end
30
31if ~exist('mask'),
32 mask = ones(2*window_size_h+1)';
33end
34
35% set the default num_trans
36if ~exist('num_trans'),
37 num_trans= 3;
38end
39
40% normalize image intensity to the range of 0.0-1.0
41img_i = norm_inten(img_i);
42img_j = norm_inten(img_j);
43
44window_size = 2*window_size_h + 1;
45I = carve_it(img_i,center_i,window_size_h);
46J = carve_it(img_j,center_j,window_size_h);
47
48% init. step
49J_computed = I;
50D_computed = Dest;
51A_computed = eye(2);
52J_computed = compute_J(A_computed,D_computed,img_i,center_i,window_size_h);
53
54%% level of noise
55sig = 0.1;
56
57records = zeros(num_iter,6);
58errs = zeros(1,num_iter);
59
60k = 1;
61% iteration
62while k <= num_iter,
63 [A,D] = iter_AD(J_computed,J,mask,w,k,num_trans);
64
65 A_computed = A*A_computed;
66 D_computed = (A*D_computed')' + D;
67
68 % compute the warped image
69 J_computed = compute_J(A_computed,D_computed,img_i,center_i,window_size_h);
70
71 % compute the SSD error
72 errs(k) = sqrt(sum(sum((mask.*(J_computed-J)).^2)))/prod(size(J));
73
74 % update the mask, discounting possible occlusion region
75 if (k>num_trans),
76 mask = exp(-abs(J_computed-J)/sig);
77 end
78
79 % record the A and D
80 records(k,:) = [reshape(A_computed,1,4),reshape(D_computed,1,2)];
81
82 k = k+1;
83end
84
85[tmp,id] = min(errs);
86A = reshape(records(id,1:4),2,2);
87D = reshape(records(id,5:6),1,2);
88
89J_computed = compute_J(A,D,img_i,center_i,window_size_h);
90mask = exp(-abs(J_computed-J)/sig);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD_disp.m b/SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD_disp.m
new file mode 100755
index 0000000..f2e6c62
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD_disp.m
@@ -0,0 +1,103 @@
1function [A,D,mask] =...
2compute_AD_disp(img_i,img_j,center_i,center_j,window_size_h,num_iter,w,fig_disp,num_trans,Dest,mask)
3%
4% function [A,D,mask] = ...
5% compute_AD_disp(img_i,img_j,center_i,center_j,window_size_h,num_iter,w,
6% fig_disp,mask,num_trans)
7%
8% Computing affine transform for matching to image patches. Display results
9% as program runs.
10%
11% A: Affine motion;
12% D: Displacement;
13%
14%
15% img_i, img_j: the two image(in full size);
16% center_i, center_j: the centers of the feature in two images;
17% window_size_h: half size of the feature window;
18% num_iter: number of iterations;
19% w: parameter used in "grad.m" for computing gaussians used for
20% gradient estimation;
21% fig_disp: figure for display;
22%
23% num_trans: OPTIONAL, number of translation iteration;
24% mask: OPTIONAL, if some area of the square shaped feature window should
25% be weighted less;
26%
27
28
29%
30% Jianbo Shi
31%
32
33if ~exist('mask'),
34 mask = ones(2*window_size_h+1)';
35end
36
37if ~exist('Dest'),
38 Dest = [0,0];
39end
40
41% set the default num_trans
42if ~exist('num_trans'),
43 num_trans= 3;
44end
45
46% normalize image intensity to the range of 0.0-1.0
47img_i = norm_inten(img_i);
48img_j = norm_inten(img_j);
49
50window_size = 2*window_size_h + 1;
51I = carve_it(img_i,center_i,window_size_h);
52J = carve_it(img_j,center_j,window_size_h);
53
54% init. step
55D_computed = Dest;
56A_computed = eye(2);
57J_computed = compute_J(A_computed,D_computed,img_i,center_i,window_size_h);
58
59
60
61figure(fig_disp);subplot(1,3,1);imagesc(I);colormap(gray);axis('image');
62subplot(1,3,3);imagesc(J);axis('image');
63drawnow;
64
65sig = 0.1;
66
67records = zeros(num_iter,6);
68errs = zeros(1,num_iter);
69
70k = 1;
71% iteration
72while k <= num_iter,
73 [A,D] = iter_AD(J_computed,J,mask,w,k,num_trans);
74
75 A_computed = A*A_computed;
76 D_computed = (A*D_computed')' + D;
77
78 % compute the warped image
79 J_computed = compute_J(A_computed,D_computed,img_i,center_i,window_size_h);
80
81 % compute the SSD error
82 errs(k) = sqrt(sum(sum((mask.*(J_computed-J)).^2)))/prod(size(J))
83
84 % update the mask, discounting possible occlusion region
85 if (k>num_trans+1),
86 mask = exp(-abs(J_computed-J)/sig);
87 end
88
89 % record the A and D
90 records(k,:) = [reshape(A_computed,1,4),reshape(D_computed,1,2)];
91
92 figure(fig_disp);subplot(1,3,2);imagesc(J_computed);axis('image');
93 title(sprintf('iter:%d: dx=%3.3f, dy = %3.3f',k,D_computed(1),D_computed(2)));drawnow;
94
95 k = k+1;
96end
97
98[tmp,id] = min(errs);
99A = reshape(records(id,1:4),2,2);
100D = reshape(records(id,5:6),1,2);
101
102J_computed = compute_J(A,D,img_i,center_i,window_size_h);
103mask = exp(-abs(J_computed-J)/sig);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/compute_J.m b/SD-VBS/common/toolbox/toolbox_basic/affine/compute_J.m
new file mode 100755
index 0000000..80db273
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/compute_J.m
@@ -0,0 +1,31 @@
1function [JJ,mask] = compute_J(A,D,I,center,window_size_h)
2%% function J = compute_J(A,D,I,center,window_size_h)
3%
4
5[size_y,size_x] = size(I);
6
7center_x = center(1);
8center_y = center(2);
9
10[XX,YY] = meshgrid(1:size_x,1:size_y);
11x = reshape(XX,size_x*size_y,1);
12y = reshape(YY,size_x*size_y,1);
13index(:,1) = x-center_x;
14index(:,2) = y-center_y;
15
16position_new = A*index'+ [D(1),0;0,D(2)]*ones(2,size_x*size_y);
17position_new(1,:) = position_new(1,:)+center_x;
18position_new(2,:) = position_new(2,:)+center_y;
19
20position_new_x = reshape(position_new(1,:),size_y,size_x);
21position_new_y = reshape(position_new(2,:),size_y,size_x);
22
23[J,mask]= m_interp4(I,position_new_x,position_new_y);
24
25JJ = J(center(2)-window_size_h(2):center(2)+window_size_h(2),...
26 center(1)-window_size_h(1):center(1)+window_size_h(1));
27mask = mask(center(2)-window_size_h(2):center(2)+window_size_h(2),...
28 center(1)-window_size_h(1):center(1)+window_size_h(1));
29
30
31
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/find_AD.m b/SD-VBS/common/toolbox/toolbox_basic/affine/find_AD.m
new file mode 100755
index 0000000..3cccefb
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/find_AD.m
@@ -0,0 +1,82 @@
1function [A,D] = find_AD(I,J,mask,w)
2%
3% [A,D] = find_AD(I,J,mask,w)
4%
5% find the matrix affine transform A and displacement D,
6% such that SSD difference of I(Ax-d)-J(x) is minimized,
7%
8
9%
10% Jianbo Shi
11%
12
13
14[gy1,gx1] = grad(I,w);
15[gy2,gx2] = grad(J,w);
16
17gx = 0.5*(gx1+gx2);
18gy = 0.5*(gy1+gy2);
19
20[size_y,size_x] = size(I);
21[center_y,center_x] = find_center(size_y,size_x);
22mask = mask(w+1:size_y-w,w+1:size_x-w);
23
24[x,y] = meshgrid(1:size_x,1:size_y);
25x = x- center_x;
26y = y-center_y;
27
28x = x(w+1:size_y-w,w+1:size_x-w);
29y = y(w+1:size_y-w,w+1:size_x-w);
30
31gx_sqr = gx.*mask.*gx;
32gx_gy = gx.*mask.*gy;
33gy_sqr = gy.*mask.*gy;
34
35x_sqr = x.*x;
36x_y = x.*y;
37y_sqr = y.*y;
38
39T= zeros(6,6);
40T(1,1) = 0.5*trapz(trapz(gx_sqr.*x_sqr));
41T(2,1) = trapz(trapz(gx_gy.*x_y));
42T(3,1) = trapz(trapz(gx_sqr.*x_y));
43T(4,1) = trapz(trapz(gx_gy.*x_sqr));
44T(5,1) = trapz(trapz(gx_sqr.*x));
45T(6,1) = trapz(trapz(gx_gy.*x));
46T(2,2) = 0.5*trapz(trapz(gy_sqr.*y_sqr));
47T(3,2) = trapz(trapz(gx_gy.*y_sqr));
48T(4,2) = trapz(trapz(gy_sqr.*x_y));
49T(5,2) = trapz(trapz(gx_gy.*y));
50T(6,2) = trapz(trapz(gy_sqr.*y));
51T(3,3) = 0.5*trapz(trapz(gx_sqr.*y_sqr));
52T(4,3) = trapz(trapz(gx_gy.*x_y));
53T(5,3) = trapz(trapz(gx_sqr.*y));
54T(6,3) = trapz(trapz(gx_gy.*y));
55T(4,4) = 0.5*trapz(trapz(gy_sqr.*x_sqr));
56T(5,4) = trapz(trapz(gx_gy.*x));
57T(6,4) = trapz(trapz(gy_sqr.*x));
58T(5,5) = 0.5*trapz(trapz(gx_sqr));
59T(6,5) = trapz(trapz(gx_gy));
60T(6,6) = 0.5*trapz(trapz(gy_sqr));
61
62T = T+T';
63
64J = J(w+1:size_y-w,w+1:size_x-w);
65I = I(w+1:size_y-w,w+1:size_x-w);
66
67
68diff = (J-I).*mask;
69b(1) = trapz(trapz(diff.*gx.*x));
70b(2) = trapz(trapz(diff.*gy.*y));
71b(3) = trapz(trapz(diff.*gx.*y));
72b(4) = trapz(trapz(diff.*gy.*x));
73b(5) = trapz(trapz(diff.*gx));
74b(6) = trapz(trapz(diff.*gy));
75
76a = inv(T)*b';
77
78A = [1+a(1), a(3);
79a(4),1+a(2)];
80
81D= [a(5),a(6)];
82
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/find_D.m b/SD-VBS/common/toolbox/toolbox_basic/affine/find_D.m
new file mode 100755
index 0000000..1e42cb2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/find_D.m
@@ -0,0 +1,65 @@
1function D = find_D(I,J,mask,w)
2%
3% function D = find_D(I,J,mask,w)
4%
5% find the vector D such that it minimizes then
6% difference between I(Ax-d)-J(x).
7%
8% mask: the weight matrix,
9% w: window size for estimating gradiant, use a large value
10% when A,D are large.
11%
12
13%
14% NOTE: Because gradient values on the boarder regions of
15% I and J can not be computed accuately when using
16% a gaussian of large support, those boarder regions
17% of width w are not used in computing D.
18%
19
20%
21% Jianbo Shi
22%
23
24[gy1,gx1] = grad(I,w);
25[gy2,gx2] = grad(J,w);
26
27gx = 0.5*(gx1+gx2);
28gy = 0.5*(gy1+gy2);
29
30[size_y,size_x] = size(I);
31[center_y,center_x] = find_center(size_y,size_x);
32mask = mask(w+1:size_y-w,w+1:size_x-w);
33
34[x,y] = meshgrid(1:size_x,1:size_y);
35x = x- center_x;
36y = y-center_y;
37
38x = x(w+1:size_y-w,w+1:size_x-w);
39y = y(w+1:size_y-w,w+1:size_x-w);
40
41gx_sqr = gx.*mask.*gx;
42gx_gy = gx.*mask.*gy;
43gy_sqr = gy.*mask.*gy;
44
45
46T= zeros(2,2);
47
48T(1,1) = 0.5*trapz(trapz(gx_sqr));
49T(2,1) = trapz(trapz(gx_gy));
50T(2,2) = 0.5*trapz(trapz(gy_sqr));
51
52T = T+T';
53
54J = J(w+1:size_y-w,w+1:size_x-w);
55I = I(w+1:size_y-w,w+1:size_x-w);
56
57
58diff = (J-I).*mask;
59b(1) = trapz(trapz(diff.*gx));
60b(2) = trapz(trapz(diff.*gy));
61
62a = inv(T)*b';
63
64D= [a(1),a(2)];
65
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/find_center.m b/SD-VBS/common/toolbox/toolbox_basic/affine/find_center.m
new file mode 100755
index 0000000..b12ac7b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/find_center.m
@@ -0,0 +1,4 @@
1function [center_x,center_y] = find_center(size_x,size_y)
2
3center_x = 0.5*(size_x +1);
4center_y = 0.5*(size_y +1);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/gen_feature_s.m b/SD-VBS/common/toolbox/toolbox_basic/affine/gen_feature_s.m
new file mode 100755
index 0000000..3c113e9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/gen_feature_s.m
@@ -0,0 +1,17 @@
1function I = gen_feature_s(size_of_feature)
2% function I = gen_feature(size_of_feature)
3% generates a spherical features with size
4% of "size_of_feature"
5%
6
7ss = round(0.4*size_of_feature);
8[X,Y,II] = hemisphere_s(ss);
9
10II = abs(II);
11II = 1/max(max(II))*II;
12
13I = zeros(size_of_feature,size_of_feature);
14
15t = round((size_of_feature-ss)/2);
16
17I(1+t:1+t+ss,1+t:1+t+ss) = II;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/grad.m b/SD-VBS/common/toolbox/toolbox_basic/affine/grad.m
new file mode 100755
index 0000000..53bab55
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/grad.m
@@ -0,0 +1,24 @@
1% gradient of an image
2% coordinates (r, c) follow matrix convention;
3% the gaussian is truncated at x = +- tail, and there are samples samples
4% inbetween, where samples = hsamples * 2 + 1
5
6function[gr,gc] = gradient(image, hsamples)
7
8tail=4;
9samples = hsamples * 2 + 1;
10
11x = linspace(-tail, tail, samples);
12gauss = exp(-x.^2);
13n = gauss * ones(samples,1);
14gauss = gauss/n;
15
16gaussderiv = -x.*gauss;
17n = -gaussderiv*linspace(1,samples,samples)';
18gaussderiv = gaussderiv/n;
19
20gr = conv2(conv2(image, gaussderiv','valid'), gauss,'valid');
21gc = conv2(conv2(image, gaussderiv,'valid'), gauss','valid');
22
23%gr = conv2(conv2(image, gaussderiv','same'), gauss,'same');
24%gc = conv2(conv2(image, gaussderiv,'same'), gauss','same');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/hemisphere_s.m b/SD-VBS/common/toolbox/toolbox_basic/affine/hemisphere_s.m
new file mode 100755
index 0000000..5300183
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/hemisphere_s.m
@@ -0,0 +1,27 @@
1function [x,y,z] = hemisphere(r)
2%HEMISPHERE Generate sphere and transform from spherical coordinates.
3%
4% [X,Y,Z] = HEMISPHERE(N) generates three (n+1)-by-(n+1)
5% matrices so that SURF(X,Y,Z) produces a sphere.
6%
7% [X,Y,Z] = HEMISPHERE(R,N) generates three (n+1)-by-(n+1)
8% matrices so that SURF(X,Y,Z,R) produces a sphere colored by R
9%
10% [X,Y,Z] = HEMISPHERE(R,THETA,PHI) converts from spherical coordinates
11% to cartesian coordinates.
12
13% Modified from
14% Clay M. Thompson 4-24-91
15% Copyright (c) 1991-92 by the MathWorks, Inc.
16% by Carlo Tomasi
17
18error(nargchk(1,3,nargin));
19
20n = r;
21% 0 <= theta <= 2*pi and 0 <= phi <= pi/2
22[theta,phi] = meshgrid((pi/n/2)*[-n:2:n],(pi/2/n)*[-n:2:n]);
23r = ones(n+1,n+1);
24
25x = r .* cos(phi) .* sin(theta);
26y = r .* sin(phi);
27z = r .* cos(phi) .* cos(theta).*phi.*theta;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/im.m b/SD-VBS/common/toolbox/toolbox_basic/affine/im.m
new file mode 100755
index 0000000..6450120
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/im.m
@@ -0,0 +1,3 @@
1function im(I)
2
3imagesc(I);axis('image');drawnow; \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/iter_AD.m b/SD-VBS/common/toolbox/toolbox_basic/affine/iter_AD.m
new file mode 100755
index 0000000..50bdae1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/iter_AD.m
@@ -0,0 +1,26 @@
1function [A,D] = iter_AD(I,J,mask,w,k,num_trans)
2%
3% function [A,D] = iter_AD(I,J,mask,w,k,num_trans)
4%
5% find the affine motion A, and displacement D,
6% such that difference between I(Ax-D) and J(x) is minimized.
7% If k <= num_trans, only translation is computed. This is useful
8% in practice, when translation is relative large.
9%
10% mask: the weight matrix,
11% w: window size for estimating gradiant, use a large value
12% when A,D are large.
13%
14
15%
16% Jianbo Shi
17%
18
19
20if k <= num_trans,
21 D = find_D(I,J,mask,w);
22 A = eye(2);
23else
24 [A,D] = find_AD(I,J,mask,w);
25end
26
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m b/SD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m
new file mode 100755
index 0000000..314f140
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m
@@ -0,0 +1,49 @@
1function [F,mask] = m_interp4(z,s,t)
2%INTERP4 2-D bilinear data interpolation.
3% ZI = INTERP4(Z,XI,YI) assumes X = 1:N and Y = 1:M, where
4% [M,N] = SIZE(Z).
5%
6% Copyright (c) 1984-93 by The MathWorks, Inc.
7% Clay M. Thompson 4-26-91, revised 7-3-91, 3-22-93 by CMT.
8%
9% modified to
10
11
12[nrows,ncols] = size(z);
13
14
15if any(size(z)<[3 3]), error('Z must be at least 3-by-3.'); end
16if size(s)~=size(t), error('XI and YI must be the same size.'); end
17
18% Check for out of range values of s and set to 1
19sout = find((s<1)|(s>ncols));
20if length(sout)>0, s(sout) = ones(size(sout)); end
21
22% Check for out of range values of t and set to 1
23tout = find((t<1)|(t>nrows));
24if length(tout)>0, t(tout) = ones(size(tout)); end
25
26% Matrix element indexing
27ndx = floor(t)+floor(s-1)*nrows;
28
29% Compute intepolation parameters, check for boundary value.
30d = find(s==ncols);
31s(:) = (s - floor(s));
32if length(d)>0, s(d) = s(d)+1; ndx(d) = ndx(d)-nrows; end
33
34% Compute intepolation parameters, check for boundary value.
35d = find(t==nrows);
36t(:) = (t - floor(t));
37if length(d)>0, t(d) = t(d)+1; ndx(d) = ndx(d)-1; end
38d = [];
39
40% Now interpolate, reuse u and v to save memory.
41F = ( z(ndx).*(1-t) + z(ndx+1).*t ).*(1-s) + ...
42 ( z(ndx+nrows).*(1-t) + z(ndx+(nrows+1)).*t ).*s;
43
44mask = ones(size(z));
45
46% Now set out of range values to zeros.
47if length(sout)>0, F(sout) = zeros(size(sout));mask(sout)=zeros(size(sout));end
48if length(tout)>0, F(tout) = zeros(size(tout));mask(tout)=zeros(size(tout));end
49
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/norm_inten.m b/SD-VBS/common/toolbox/toolbox_basic/affine/norm_inten.m
new file mode 100755
index 0000000..8e8865b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/norm_inten.m
@@ -0,0 +1,11 @@
1function I = norm_inten(J)
2%
3% I = norm_inten(J)
4%
5% normalize image intensity to the range of 0.0-1.0
6%
7
8max_J = max(max(J));
9min_J = min(min(J));
10
11I = (J-min_J)/(max_J-min_J);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/pan.0.pgm b/SD-VBS/common/toolbox/toolbox_basic/affine/pan.0.pgm
new file mode 100755
index 0000000..2e7b5f6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/pan.0.pgm
@@ -0,0 +1,53 @@
1P5
2# CREATOR: XV Version 3.10a Rev: 12/29/94
3128 96
4255
5qquvvvvwzyz{}~€‚‚‚ƒ„††…†‡ˆˆŠŠŽŒŽ‘’“•–”–——›œž ¡ ­©¤¢£¥¥¥¥§¥§©««¬­°±²²¶¶µ´³²´³³¶¹»ÀÀ¿ÁÃÄÂÄÄÃÄÃÅÆÊÇÆÆÅÊÉÈÊÏÞËÄÃÄÂÂÃÃÀÁ»qrrsvxwxyzzz{{|~~€‚ƒƒ…………†‡†‡ˆ‰ŠŒŽŽŽ‘’’“”•–•“•˜™šœœŸŸŸ¡¡Ÿª°¥¤¦§¥©«ªªª«¬­®°³´¶¶¹·¶··¸¸¹¹º½½¾¿»¼¿ÀÀÂÂÃÈÇÈÊËÉÈÊÊËÎÍÉØ×ÈÆÄÄÃÅÅÃÂÃÀtuwuruzzyzz{}}}‚„„„†‡‡‰‰‰‰‹‹‘”’’““•—–˜——™š›žžŸŸ¡¤¥¦¤¦·¬§¨©ª¬ª­¬­¯¯²³³¶·¹¹¹½¼½½¼¼¼¾¿ÀÁÃÃÁÄÄÃÆÇÇÈÉÊÉÉÊÊÎÍËËÌËÍÞÌÂÄÂÂÃÅÅÃÁÃÂtvwxyxwwz{{z|{|}‚„„…‡ˆˆ‰‰Š‹‹Œ‘‘’“•—˜˜™™š›œžžž ¢¢¡¢£¢±º¬©ªª«¬®®®°³´µ¸¹¹¹»¿¾¾½¾¾¾½¿¿ÂÂÁÀÀ¿¿¿ÂÆÈËÎÒÔÖ×ÖÔÓÐÎÎÎßâÒÕØÜááááàÜÙÕtvwwyz{ywz}}‚‚ƒ†‰‰ˆˆ‡‡ˆŒ‘“”’“–—˜™š™šš›œœ›œžœœž Ÿ š ´œ•™š¡¥¨¬®®®­­­ª©ªª­¬ª¨¦¥¢ÇÕÃÄÅÅÅÇÅÅÅÂÅÆÇÇÊËËÍÊÍÐÐÑÐÑâÖÓÓÔÖ×Ô×ÖÖ××Ðm„zuuvvvurvuwxz{{{}€ƒ„ƒ„††‡‰Šˆ‰ŠŒŽ“•™šœœ›œžž¡¢££¤¤¦¦©¨§¨§µ³¢¦ª®±³®¢žžžŸŸŸŸ ¤§©©ªª§ËÚÁÁÀÂÅÄÅÇÆÇËÍÎÏÐÏÍÏÑÒÔ×ÙÙãèÝÛÜÝÜÛÛÝÚØÙØÓBUw…xz}~}~{{€€‚„„ƒ…‡†ˆ‡Š‹‹Ž‘“”““•—˜˜š›Ÿ¡ Ÿ¢¤¦¦§¦ªª«®®±Á®­­±³µ°¡šš™š™™›¡¥§¨©«¥ÃàÈÇÊÎÍËÎÐÑÒÔÖÖÕØÖÖÚÞàáãâáîéâæåçéåâÞàâààÝGcZW„}}~}~ƒƒ„…„†‰‰‰‹‹‹‘‘’’’“••–—˜œŸŸžŸ ¡££¥¨§§ªª«®°°°¯ÅÀ¨­³·µ­ š¡¢¡  ŸŸ ¤ª«­¯¨ÄèÑÏÑÓÔרØ×ÛßÞßââãæéêêêêéíòéëììîíëíîïïííêGeoxae“~€‚‚ƒ~„ˆ‡‰‰ˆ‰‰‹Š’“”—šššœ ¡¢¡¡£¥¦¦¦¨¬­®¯®¯°²²²²³´»Î·°¸¹µ­¥ œš›œœž¢¦ª¬®®²¸²ÇëØ×××ÝàáåæéêìëïîìïîðððóóöôðñóôóôôööõõóòîFakswvey‚ƒ„……„€ƒˆ‰Š‹‹ŒŒ‘‘’”•–˜˜™š›Ÿ ¢£¥¨©ª¬¬¬®°°³´µ¹ºº½¾ÁÁ¿ÊÓº¿Ã¹±«¥§­±²±®©©­±´²³´±ËñáßáãæèìðòõõõöøùøõîæßØÏÓõðïñóõ÷ùõôöîëççïIbjnpu|x_‹Ž„††‡‰ˆ„‰Ž‘‘’”–———›œž ¢¤¥§ª©ª¬®¯°²¯®³´µ³²´¸º¼¿ÅÎâ¡nbb_eq†¦Â¿Ìå÷ýýýýýüüüüýýýýþþþþþþþþýýýýüüüüçæ¼­®ã–½øúú§>¸áq±}̶Gbjkloqw|pn‹rcbbehq…‡ˆ‰‹Ž‘’”•–ššœžŸ¢¤¦©ª«®°¥Œ› “ »ÂÄÅÅÆÊÍÏÓ×ÙÜç«Õûúúü÷‹.ÃýýýýýýýüüøíüýÚÞîØüÝÈþþ«¨î–Ù»“ô臞‰fšb€’Žf0^xF_VYqH^ehkoopqy€f†ðþþþûä‹|”–˜–‹“¢£ ŸŸŸ¢¤§¨ª¬²±°°x;33>AV¨ËÐÒ×ÞáÌÆçñúã•ÄyÂýýýÉi5!q¸¬ŽcMi<2<3WWB=XFoZMqeHNtMdfV„wNi…v\uat}ˆŽc*dHY]ZtG]aced`C233++%)(*59:@7B>F>FEA=<\g^gb\^Ya][\PD83.2<Fgua?>X_=Hj?42)Wh3%GkgpD8€…€xb`vJQjFktVR|LvtTytLU{OdoU…}N]‡sSwZl‚Š‘[+e€IVYRqI[^___W?519+&'112>;9G<@;E8BG<:5V[FYYLPIHHMA4=A83:PMd{m@BdmUOi?$ByC!'Q_pS$l„‚|hSrJMqG^ugp‡Os~Rq|QRN\wM}€SYŒyQuPe‡’X#_€NQ_RpFX\]^YK512:)&(032>?9B=E:G7AJ@B;W\GRWHOHEJIB5>C@:4NQ^xp<5[njF€lJ, %pIQk]L*&X€w{qReNBnIGe’Ô¨Yj‡KayPR€XQ€Qu‚XQOtUb‰Ž”^%[QPcRoGUY]YNC445=)%+.01?98EAG=E6>H@B<S\KPY?LFKOKG9GA8>7BFRwvN\r>itK2WRJmRZ9(AepvPZ[BpVCf‡Î¨U]ŠN[zSKgU‡Pj‰bJ‘QpX\‹Ž”d%U…VPhNmFUYYTG>26;?*'+247><;HCM@I7<LCE:T[JKWAJJMVJMAGB394<GLny]#HpGY‡Y:!Eh-(ekhG'2zli{_UkBgfAXl³§YLˆWP~cO€qQ‚T_rM…†TlaZŒŽ”m'LƒYMiMrGVYVNC?368@.)+123?<9JEL@K;;K?D;QXNL\FOTQYOVKB@3:26FHg}o/
63oXKŒrJ*4r=UzhI'-%lzp|mWtF[n<GZŸžhIbO„nVSx]X~MŽUgkZŽŽ“u,H†^MoPqHTTPH?</4<?*),.+2><<I>J@H:;JAF>O[SM_PR]XVLSJ8>8565BD_v>)hiEwU-"lLGpcaHA$U~o~wRjLJrCCZ†ŒuDtsF}yPq„SmlT…MsY`tZŒŽ“~2CƒeMrRqIRSMGMXPF>A.**0.<C>APIR>L?9K;DEQ]XP`VS]\[OML5?C8?7BDX|~R[sBm‚_7[_"=cqfj_W;Is|~T\[HvRCa^DxGj…HqPg…W\yX‰ŠSe”e^ZŠ•„9@„kLrPmGOOIM[\MC>@+(*-,7>;<MDM=G<7G>GAJYUU_ZU^ZOKGP?IH2?5>GRu€e&KuK]”gH#DoNXhj]FE]jb|rvZRmIp_?fbCxV[‘NdƒQ\…[U…Qy‹W`”o[Š\‚‘”ˆA<qNvPmHOKFM[\NB>?)(,,+>BBDSHP@FA8ICG@F\WV]bS_\KLISOED2:4:FNpˆt85teTœhQ+*ENWOG6*+;PVm|x…kPpK`pVp–zuoZ–YW…_Z‹hP…PmŽ`[•{[“\}‘—ŽL;~wSvQiFIHDLXVJ@<>(''+)7AEESGO<GE;HBG@B_a[^^RTURVNWUGC3789KNh„}F*lxM‚zV3)7/5FHD:*"7JKTy~†yOiKQn69.bƒR„hR‡oW‡uT†Ve“m[–ˆ^‹]s‘–‘Q3t|PuRdDFECJTM?3 
7
8")+8ABBSFN=FD8HFHFB`a]^UONRRYRWVH=:787AA_‚ƒ`!aMd‘gN,!*5?>4*))(ATq~†„Q[VIt<6:RTq}U‚VV|a^˜x]^af‘–“V+nOoS]EFEELOB/&5?ABREK=CI;KLIH=b_\YVPMT[cZVVGDA4<6>BT}‡m+N|\[šf/"$');GGC7,%2W]l€ƒ^UhHk:+DE‡Z`ŽWw†Tr‡Vmn]˜ƒXŠ”byeb”•–\%h†QlV]GGHDJL;+.%%1'1-!<?BRIH>?L@GMIN@\aYTVVQWgaWPMKIC1:6<ES}|><€pY‚;%%"&/BPF<>9* ,NUVzƒmV{GW5 #FBuhZUj‹\c‹XiX“‹W}•epmc–•—c(^†Pf[[EEFDJH4$&(COEZsW.<CCNEFEAN?FQHM?Z_UTSZYc_`^QVTNI3726BKo‹ƒO+t}O<*-,2<@=71-*($%9GJn„}XlKD2";Dc}X‹^]‹b\ˆ^]ŒZˆUv—ijwd••˜k'XˆTbaXDDECJD+3N<.Av‚h:8B?NIDE>Q=GQDR:V]U^]`_`\^[M]VOI8868CIfˆ‰_!a‚_.')/3:1-35.+)#,DPFcƒƒbdY:1,;M[ŠXv\m\‹k[”\~•Wo˜pg‚a“–s(TŠUafUBCGBF:&&""$.ReV4 8A?NHDJ>O>DPISAP][dcb[ZSZfX`QBH?37/AD\„u0F~T.31./:?:'9DBGJW}…dVj@5"3@XXŒWo„^Ž}_…xY[n™bjžyjŒdŽ”—|+RŠ[ZlWDFGDA3+,!12'6FDIKJO>RBGUMUCQdcjfaWWT^gZXYFHK291<FW}’‚D6sC%8LPFFpmM,39j†t]qH'1LfT_d–\„_ŒY~egœlh¤gf‘”„4Q‡a[s[CDECB.'+ -3'7EFLNKR?QDGRDMDJadh[UVY_ecUMXPTM18*2FQwˆU+^..?Xga\o„d4+8i„~aoN$RvUpsaœasŠ\qŽ^wmcŸzj¥Ši’g‡”–Œ>K‰hZuWHGDDE.# 
9!"9HGJOLUCPEHRKMFJaf`XW^_e`^aUa^KI5:.,FLkd$I#:WRQXXiy|wz‹s;1/]ƒaf]%! DuZg…\˜g`ŒWhŒ_i}e™‚c¡Žje|—˜’EDiXzVEGFDC1-)%0ZdH')3;=HGEMKVBQJJTJNHHfc`WOjg_X]dXabOK674+EId‹p6 +!Njv„†„}}‚›v>-"S~ƒvŠ‚zˆ{šc…sbŽb`ˆfd„g˜a“o‹hx–••XA€s\[GFFFC/44,-ZkL+*0=AGFCILUHQLJPAMHA^ZX[OkcVXdfYX]LLA3:1>K^‡“„C $Tgmt{vuz{}‡”–|>%R|ž¦¦©¨«­¯²©pn‚hŠs^ˆqb‰m‹’Zz”kfr–“”]<vw[}_EGIJSK>AOUaga^bcehnppprvvvtw{xz{x~€ƒƒ„‚„‡‡‡‰‰‡ŠŠŠ‹Œ‘”šœ˜’v)+UL>516HZU?8?QhsE!cª¯°®¯®¯°²±²²²´³´´³³³´µ³²µ³´µ±°±¯±°¯¯®®­««¬«ªFFIL[bcfjlnoqruwyyz|~~}}„€€€€€€„……ƒƒƒƒ„………„‚ƒƒ‚ƒ„ƒ‚‚‚€‚zE:\?+)69:“|=.0BTx^28^nmkijiiijfffdbcb`aa`_]^^``_\\\\]^`__a`b`bdb_GHJM[XPNOQTTVVWYZZ[[\\^]]^_`aabbbbbbcdfgfggghikllmoppqqrqqrrsrB>eSLIE:[²˜C<LahjDZ~‡Š‹‹ŒŽŽ‘‘‘’’“”“”••——––———˜˜™˜˜˜˜˜˜—–•IJKK_kmmoqrsuwyz}~‚ƒ‚„†ˆˆ‰ˆ‰Œ‹‹ŒŒ’’‘’““”••—™›š››œ›ššžW.Ex†wft‹ £„aq‰œœg8Xž©¨«ª¬¬­®­®¯¬««­«¬®­®®¬««­«ªª¬ª««ª©ªª©©ª¨¨¦¥¢HHJKZddcfhkmopttvxyz}~}}~‚‚ƒ‚„†……†‡‡ˆˆ‡ŠŠŠŠŠŠŠŒŒŒŒŒŠŠŠ‹Œs@;kž˜ŸŸ‰¥±®¬¢´·bNp‰‰‰‰ˆ‡††††…†„„ƒ€~}{zxwwwttrrppmmihhfdb`_][VIKMLI5
10
11 
12
13
14
15 
16  
17 
18 5H]vˆŸ§˜‚‹Ž´¸®¢‰bW* #$$&&%'&%$&'%$##&$$$#$$$##$$#!##$"IIIHG=*
19  
20  (KUf~•žv1GCV¨´§—ƒvN$! -01*  ! ! ! ILLJLE2  
21
22
23   
24
25 
26
27  ;R]qŠ–vHE`…¨¨™ŠsF'&0/!=?B'   JJLJGB8(3>2,94>BB.7AB11< ''
28"5 $EXg€‘Œ~p€š©¤•ˆ|W5((..!!%GHN)   <YT:EBMXS\jcIM\kfKJJJIE?)5B42@;FKH3@IG9;D
29 
30#nf$!"
31;Xfx€’µ­š˜š‘†|yr:T¤‰47A3,MSQ*  $2 TigRMHYc]]ieMLbonIKLLIGB4DR;;HAVXY9M]^CN^'
32  "^Z%!"<iTIªœ<h–G:’œ™W7YcmZ<).+1LtŠ„{€‚=F†€Cy—o6…šs'  Bk*B]RSKSr|qWSRhxqnvq\et€ƒLKJJKGE:VeCK\TkokBcruL[q/
33
34  *m`%06$?hRJ§žBn—EQÃÈÈ΂0W`adw•–¥¡‡„otp5RŠt9^X7£Ê‡jßï­Ùæ1@1;QOQP`Š“|`d`„™‹ƒ“‰xŠž‘JLMLIHG;YoJUg]t}pEn}~L^o(  *n[,PdC M©™?q—DT½ÄÄÌ!EY\bYQZ^hy}|wcql3T“u.5ªÏ_¾Õ¨º¿×€/C5LPTXNi‘—‰qpoš£ŒŽ•Šˆš¨ŽIKMKKIG<\rGZg^zmDpz~Mcn%
35   /td0g|K  O¬—<xœBYÅÉÈÊ{?UXWL<4C_v{yyixo1\—w.;¯ÏzX º®È½áz>5*U{`<S“”€qs{¦ ‹’ІŒš¬ˆJLMNNKG>_uH\h_xfDt|~Ngk!  /t_$$&T¬’={ž@^ÇÈÊËz @U\iux†’’‚xzx—s3Z”s-AµËyj«´­ÄÁÛvO@2RRIQMx™“xst¢ž–Œ‚¦¬~KNNNOO_WesG_jbx‚fHw}Nnj  
365|]$##Z²’?—?bËÊÎÍpQdPY`inr}‡„|u}e¨š7V”u%OÀÏvl§¶¿»Ëz8HwgMeZƒ˜•xvr„£›•£¥•Œ¤¢rLNNNVgjYgvKegcy„gJx}~Qsi   !#3_O#>EL™¥­§\cOONWWRT]kqkozdÀ¯:1><"2LTSq«·¹ÐÙÀgM=FNHFIUŽ£‘qrq‰¥œ‘ œ–Ž–£œpOPRRdmkXfuQjhg~ˆjLzPxf
37
38
39#&!]½mOKIOY_badin\‚ùø¨G:6$<WZ_y• Â¿ÔµH^\EKEAA[“¦‘rrsš±˜“£™•”›¦›oMMPTellUewWqfa€‰lLz€~S|b  
40"$5—ÆÁŸOMMJFMXafdVlãùûûöÃs1#">WZb§ÇÇܬNRJDKB>Bg›¨qvv•­–˜« •—œ¥oMNQVgolUiv[sdc€‰qN}ƒ€S|b 
41 
42%%Ÿôêۼ׎GOPMKQ\\SSÖøùûûûûûû¸=&FX[f€¦ÍÉá¶\<R^MVL?s¤¬rwwŸ®”žªœ–©§‡pMOPWhnmNez]we_€ŠtO|‚|Zƒ^ 
43 
44$%J×ÚÛôè»ÄàwHMMLNOHZ«óøúûûùöûûûý¾l\]o•¡­×çíˆ>KWZOUOF|ª­‰uzz£­”¡¨›™œ¥¨~tMPRXjqlJb|e{eby†zV~„|[†\
45  
46 !$' ÷ôãäóòص»¢nILJG;q¦Vªöüüüû÷úûûúúúÉfqœ²kCY‚aDGZbOVWQ“²©†zƒ¬°˜©¦ž›¡ª§wzKMPXinkC[}awhbˆ|Y‡|\‡Z
47    $%>¬ôüüôèæôõë·—\{€S@F‡•b„å÷üüüûôõûûúúúúûç¾¥lY\Z<=5czK^nb³¥{}†­©–­®§Ÿ¢§ t{KMQXjojFW€fyqf„Œ…`‡|_ŽY 
48  '& KåôøüüüôêçôöôØžh]j<w¤‰v¾ïýüüüüùùûûúúúúûûûû°SPO5>7PŠwO|w©¸¤~€‚´ª˜¬­ª¢¡¨›pzLNOZloh>N‚csyh††[|‰}aY    %&NÐýûùüüüüôîìôööï·œˆexh´òú¿Îüýüüüûøùûûúúù÷úûûûôôôºG?5Lp^;^zµ·˜s€~•À« µ³­©««‘qwLMOZloh>F…cpƒm†’c~‹€b”_   '%8Ìûøøöõ÷÷÷÷÷ïï÷õõõ鼸ª—åúìãÊ÷úüüüüùùúúýýýóóûûûýýý§9><Sa`FZž¾¿˜sƒ¤Ë¨¨¶´±¬¬¶ŽvnLNPYmpi@AƒjhŒl‘’]{‡^j 
49$%6Ðûûøø÷óö÷÷÷÷ðï÷õõõõéÒßàãííúöìóúüüüûõöúúýýüòõûûûýúø±RJTXOFKEˆÁÁ‘w…‚«Ñ±«º³±®°´„}qIMNYknhG>~p^”k}—žbz‘’\ˆw!
50  )' Ÿûûûøøóð÷÷÷÷÷óîõõõõõåÖñòýýýýõéôúüüüûöøúúýýüòôûûúûúúÈxŒf\WVIH”ÅÇŒz…|²Ï´´¿º²«²³{…kMOOZoqhE9~`pwšžbv’•a€|* 
51 ()aÚäêûøøóðö÷÷÷÷óïõõõõõïÙîøýýýýøõ÷úüüüû÷÷úúýýõçóûúøýøú÷Ã`‰µ“›´£ÂÊ|„³É°¸Ã½µ°´¬q‚bNNP^ppiC0{a„yu¡jq“™l…4 %
52"*(ÙÚØñùùöõöööö÷ôòöööööêÜîõúúúúùö÷ùûûûûøøûûüüùëñøóñýêòûÕgaG]uV­Á¸‚‚‡‹ÀÅ­ºÇù¶º¦q‚SMNQ^qohI&jYfˆu•œqd“—szˆ6
53 ! !)+ >ÌïáÒßùù÷òôööö÷ôóöööööïçïôúúúúøõ÷ùûûûû÷÷ûûüüûêñøîïýòîöÑS‡Å_˜¨s¾Â²{†ŠÁ¿£¼ÈÁ¸µ´–p~JMMO_wwpcVapXWkWr{OKƒ‘fpk' $!#..!^ÄóáÈÙùùùóóööö÷õñõööööòëðõúúúúøö÷ùûûûûøøûûüüûðôøíñýðèñáef}rWh„ÅÂ¥x†„’¸¤ÅÅ¿¸·²‘x{DKOQbrrtwy|€„ˆ‹’“–——™œ¡¤¥¨ª«ª«ª©¨§¨¨¥£¡£¡žš”¥»ìéÂÑøù÷ìîööö÷ôðôööööôïïî÷úúúôñ÷ùûûûû÷÷ûûüü÷ëóøööýûáßû„GNBF7s»±‰gkwšÅ­¨Â¼·´¥†s?MPRYF997:<><>>><<;;:<<?@BCGKQTV[_bhmuz…‰¥ÊÅáÚ¸Ëøøõëñ÷÷÷÷òíöööööõëè×ðùùùôð÷øúúúùóöûûûûùîóøðòýýÖÎýîÔÖÖÕ×ÕÕÕÙÛÛÙÙÙÙÖÕÖÖÕØÚÛÚÜÚLNR_jkhilmmoqtttuuvussrpoommlkjigedbba^\ZXXUCҿȸÏÂóøöïñ÷÷÷÷óåðööööôéåÕóùùùôðöøúúúúøøûûûûúëò÷îóýüÚØýë—€€ƒƒ„††‡ˆ‰‹Œ‘’‘’““”•——LLQbrsuvy{}‚†‰ŠŽ‘’“”••–˜˜™šž žžž ¡¤¤¢¥§¥§§˜Ì×ÁÇ´íÃîøòçóöö÷÷öäîööööõéêâùùùùòòøøúúúúùùûûûûûîòøéðýüßåýüµz{ywvvtstuqpqponmlkkjljigHMMH2 "%*,17;>AEINS[aflqtx}v¹Í½ÉÄÖÅìøõéï÷÷÷÷ôäïööööõéãìøøøùíî÷øúúúúùúûûûûûù÷ôÁãú÷ÙåýýëÌÈÈÈÇÇÆÇÇÆÆÅÄÃÁÁÀ¾½¾»º¸¸¶ILLMB$ LÒâÎØÝÔ²æøøíî÷÷÷õòæî÷÷÷÷öïàòøøøøëéøøúúú÷÷ûûû÷÷÷÷ûôºåðåØñýý÷žƒƒˆ‹”˜žŸ£¦ª®°³´·¹»½¿Á¿IKKJD-  TÐæÕÐä×¶Ù÷÷êé÷÷÷õóæë÷÷÷÷öðäîøøøøéå÷øúúúôóùûû÷÷÷÷úùÜçßÖÑ÷ýýý“#&$# ! !  !!JKLIF7  PÐóèÎßÓ»Ööøîî÷÷÷õõêç÷÷÷÷öïàîøøøøòîøøúúúòíùûû÷÷÷òùòÎÕÕÔàýýýýÎC&$#"  !""!"""!"#"%$EJLHC;' ]ÔöñÔÚñÖõøñð÷÷÷õõéç÷÷÷÷öíÝðøøø÷îìøøúúúðç÷ûû÷÷õéïðÙÈÍÖáüýýýõw%&%##"!#"!"#"#""""#$$&'IJIHF?. uÚùôÜØÂ›Çôøòíöøøõõëæ÷÷÷÷øîÌéøøø÷íð÷÷úúúïÝöýýúú÷ìòàľÒÜàöüüüü¨2)&$"#$#!"""#"#&%%&)(()HJKGDA7$  &‹ØùöâÖÆ¯ÅñøóæôøøõõçÞõ÷÷÷÷êÞöøøøöëñ÷÷úúúïÞóøýúúôÞïß²«Óß×èüüüüâW,(%%%$"#$####$&&()(+.0GHJJHB=, @¯áùøé×À¥¸êøóéôøøõóåÅë÷÷ôðæÜóøøøöéï÷÷úúúèÙ÷ýýúúõàò衤Üèßäüüüüú‡$('''%%&''&%&&'(),*,/2FGFGEB?2 [ÌëùùïÔ¯œ¤Üòñçôøøòïã¿ßóòìßÝòøøøøòåñ÷÷øöö×âýýýúúñßôâÖðêàúüüüúÀ9-))('%'''&&((+---.022GHHGFB?7& oÜóøùíϦœ—ÍëïêöøöóïÛ»ÛïðæÛäöøùùùõåóûûüüûæíùùùûûèÑéÊ™©ÔöóÖêûûûüîn+++(()'&%&'*+--.04333FFFGFB?9*~Ýó÷ùó×§¤œÂÙáØòøõðëÖ·ÑëçÞßðö÷ùùùôäöûûüûéÈçùùùûùÔ×õ§°ËùñØêûûûüüŸ.-+*((')()+,-./013444FGJIGDA;0  "—âùùùõݵ±£ÁÖÑÎóøöïêâÃËæÞÕäñóôùùùïÞ÷ûûüûêÐëùùùûùäîð³·½ÚùùÜãûûûüüÛS5/++,+++-/./10362251DGGGEB@<4& B»ñ÷óôõÒ°³¢¹ËÊ´àøôâÔÖÁÆáââðêðòøùùïÛ÷ûûüüïÜóùùùùóØîâ¡¶ÛõùùíÛóûûüüü…)-.,,+*,.00122244444FFEEDA@=8- _Öôôíëôླྀ£´À±ÇÞÖÍÏÒźÔÜêóáìòùùùïÖòøøüüìëûûûúøèØõÑ›´à÷ùúõÞêúúûûû¹60,,-.../0334555553/BBDDCB?;6." yÐéèæÞÝìܵ›°À̹ÀÚÞÔÊÒǹÑàïðâîñòñ÷íÙõøøüüíéúûúúúçÛøÄ‘µæöùùöàáøúûûûîn-.-/../112333335421EDDEB@?<80% 6–á÷÷÷öèÃÓÑ•¨¸ÆÂÀÚÏÈÈÑIJÌäòíÛëóùùùíÚôøøüøàãûûûú÷ÔÙú¿Œ¶èøúúúèÌéúûûûû¥6.,/121134464543244ADECAA?<93' N—Ñö÷÷÷øëÖⲫ½ÈĹÒÓÍÐØÌ¬ÉëôçØîò÷õöÜÐôøøüôÓâúúúùïÓãô¸‰©ÑôùúúïÙìúûùùûßZ20012/233121132122@?B@A?A=:4+!d‡†ÏÍ·¼¼œ¥½®¬ÂÌȵÈÒО¿¨ÁæòãÕïñö÷÷ãÃñøøüöÑåùûöôïÜìö°˜¹ñøðíñæàýýýýû™/44314442034532441BABBCB@><82& ‚ÆÞô÷õÑ™”˜†˜³ÂĬ´³›‘Ÿ««¾ëòáÏßðòò÷îËîøøüøÔàø÷ðøîÝíö¤}Ÿ°äêæçîõòûýýýýúÐQ84443444222333121>@CDDCB?<93(DÀúÝ÷÷÷ùúÝŠb‚¯¬™‹“§n‚ž®ÃìòáÓêð÷÷öíËáøøüüÝäüüûûöàìç€t¡¸¼áúúýúìöýýýýû÷…88432421255422122=>@AABA@<94+"nݱ³Ùô÷캙”™vkwwy„œ¯¢yWp’¥ÐòÜÍéò÷÷õçÈØôøüøæîñìêéæÍæævp›±òúúúýý÷öüýð½‹U973222122233220252@AABCB@><97.#(®rH 9ltvpmb\ZZr™³¢T !&¡ËÊñòìô÷ïÎÓïöýîÞíåàëìçÊëÞnkœ¥ÖúúúûÝs2.BS@78423322312311221/11>@ABABA=<;72'(0&;_ggea\SQU]i™¯žSˆÆÌÝæôõõíÎÏëöýùè÷üûúûöâñÖfl–¡ÆÅV7@CDK<3443223322334443233110=>CCBBAB@<94)!  ""!!"""##%"#&'!(AW^_``\XY^XWb‚Ÿ“P%¤µÈñøöøøðÐÍáôýýýýüüûùôæñÒxmŒ—€Z8:>FNI:899:7878557677766777554>?@BABB@?<95. !!"""##$%%##$%%&((''(-5@LSWYXVTRKDI^`hz`5*, /“©´øüøøøóÑÑßðüýüüüüüøíÛîÎuaƒ‹X=;=DOYI889:9::999879::999:98886 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/pan.1.pgm b/SD-VBS/common/toolbox/toolbox_basic/affine/pan.1.pgm
new file mode 100755
index 0000000..9d57f70
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/pan.1.pgm
@@ -0,0 +1,59 @@
1P5
2# CREATOR: XV Version 3.10a Rev: 12/29/94
3128 96
4255
5prsrxxwxz{{||||}~~‚‚‚„ƒ„…ˆ‡‰‰‰ŠŠŠ‹‘’’’””–™ššœžœœžž¡ «§££¤¦¦§¨¨§¨««¬¬«¯°±³µ·µ³´´µ´·¸¹¼¿¾¿ÂÅÄÄÄÄÂÂÃÃÄÉÈÇÆÆÈÊÈÈÌØÅ¿Ã¿À¿¾¸prsttuyxyyz{|{{|~ƒƒƒ„†…††‡‡‰‰Š‰ŒŽŽ‘‘’“’“””“—ššš›žŸŸ¡¢¢Ÿ«®£¤¤§§¨©««¬­®­¯°°°µ·¹¸·¸¸¹¸¶º»½¾¾¿»¼¾¿ÀÀÂÄÇÇÇÊËËÉÊÊÊÌÌÉרÇÅÂÁÀÂÁÀ¼tuuuwwvwyxzz{|}€€ƒ‚„†‡ˆˆŠ‹‹ŒŽŒ’’’”•–•˜”•š›™šŸž¢££¤£¦·ª¨©©ªªª­¬®°­²²±³¶¹¹¹¾½½¿¼¼¼ÀÃÂÂÂÁÃÃÆÄÄÅÆÇÊÉÆÇÊÈËÍÌËÊÊÆÚÊÀÀ¿¿¾ÁÀ¿¼tuwwxxzyy{{{{||}~ƒ†…„†‡ˆ‰ŠŠŒŽŽ‘““••”•–—˜™šœœžŸŸŸ  ¢£££¥¡°¹¬ª«ª¬®®­¯±³µµ···º¼¾¾¿½¼½¾¿¿¿ÃÁÁÀ¿À¿ÁÄÇËÍÓÖÖ×ÖÕÔÒÑÑÑÏÞäÕÖÖÙÛØÕÓÒËuvuwyyz{~{z~~~€€‚ƒ……†ˆ‰‰ˆ‡ŠŠ‹Œ“••—˜˜š›œ›œœœŸŸŸŸ  ¡¡¡Ÿ››¡³œ—˜œ¢£¦ª®­­¯¬¬¬ª¨©«ª©§¦¥¥ÌÕÄÃÁÂÅÉÅÄÆÃÅÇÊÊÍÍÌÎÊÍÎÏÑÑÓâ×ÕÔÓÕ×ÓÔÖÕÏ_`k€{x{{zzywzyz{{{}~~€‚„……†††‡‡‰‰‰ŠŠ‹“•™šœžŸ¡¢££¤¥¦§©¨©ª¦¶µ£§©®³µ®£œœžžŸŸŸ¡£¦©¨«¬ªÎÚÁÂÁÂÅÅÇÈÈÇËÍÏÏÐÍÍÑÒÓÕרÙâèÞÜÛÜÜÛÚÚרÕ8:E[‡{|€‚‚}…„ƒ„…‡…‡‰‰‹ŒŒŽŽ’’’””˜˜˜˜š›Ÿ  £Ÿ¢¤¨§¨ªªª«¬­­¾¬­®±µµ¯¢™™šš›››œ›Ÿ¤¨¨©¬§ÆâÊÇÌÎÌÊÍÐÒÒÒÕÕÕÕÔÕÛÝáááááïæâäãäåãàßááÛ57@_WY…„€€‚‚€ƒƒ……‡ˆˆˆŠŒŒŒ‘‘’“”•––™šžž   ¡¡¢£¥§¨¨ª««­¯¯²±Ä¿¨­´·´­¢š¢¡ ¡ŸžŸ £ª¬­°©ÅéÑÏÑÓÓ×ØØØÛÞÞàäããåèèèëéèìóéèééëìêìííîê:9D`ny_i”ƒ€‚ƒ†‚‡‰‡‡‡Š‹Š‰‹ŒŽŽŽ‘’“•–™™™›œž ¡¤¤£¥§¨©©®¯°¯®±³´³³´µ¾Î´¯·¹³®¨ ›žŸžŸ¡¦¬¯°¯´¸°ÈëÖØÙÙßßàèèëìëëïííññðððòîïôòôóôóõöö÷öóí8:B^kryxc}„……††ˆ„†ŠŠ‹ŒŒŽ‘‘’••˜˜˜™š›Ÿ¡£¦§©«­¬¬­°±³´¶»½½¿¿¿Á¼ÈÑ·¿Â¸°¬§¨¯³³²¯¨ª®±´³´´¯ÇïÜÜßâæéìòôôöøøøøøóìæâÜÒÉ÷õóô÷ø÷÷îëôÝÛÚ8;C[gorv}wb‘…ˆŠŠ‹ˆ†‹Ž‘’“““’”——˜š›žŸ¡£¤¤¦ª«­°±²²²´²³·¸·µ¶¹»¹½ÄÊà ned_gx­ÇÊÙñüýýýüüüüüüüüþþþþýýýýýýýýüüüüûûÕÑÀ®¥ß·øúø¥0­çmšt9;D^iloquz~nq’xifdefq€„…ˆŠ‹’“•—˜™›Ÿ¡¢¦§§ª­°ª’Ÿ¥—¤½ÂÄÅÆÉËÍÐÓØÙÜç¨Õûûûü÷†1ÅýýýýýüüüüõèûüÚÞíÕûÛÀüýª¦ï‘ͺŒäØx—„^Ž[r‚‡ˆk4\|JSZ87A[gjknqtw{€f”öýýýû䀔–˜”•œŸžž ¢¡£¨¨«­°¯°°y962??XªÉÏÑÔÛßÍÇîñúà•ÁvÃøøüÃb0 n® ’WGa7-84Z`HA`Hu_NulKQwIaiTƒxNc‡w]uZm|‡i&[~KQ_8:BZdeffcK5850)%)09::B6BAIAGIEB>]linhbc[e_^aRC71/4=Eera?=Y_=He<30(Wd0$FkenD9„y_]wKQlImuVS|LvvSvrKT{MbqSƒ|R[ŠvSvUb€‰]$\KM`;;CX`cba[A2/41)&2-/=74C<?9G9AE=;5U`BVTDJBDEJB6<A7,4RNc{l?BenWOi?"Bu@#$M[lP'mƒyfWtLNsK`vkv‡St}NmSQ€MZ~Nz}UT‹{OrQcƒ‰b$XRIb:;CU^__\Q:226-%'/03=75C<C:D7@J??8V]DPVBIE@DI@2=A@;5NS^xn;9`lgH‚kH+$lBSi]I((Z~tzpNaQErKGe”Ú¨Wj‡L`wPQ€ZPOpZNŽOqV\ˆŒ’e$QVKl;=EVZ]\RF7559.+)32/:;9C>C8H8?H<?<TYFMY=MFHPLF9FB9?6DHRsuK ]p?lqJ5\UIiNX9'C‚fnuPYZBpWCg‡ÐªUZˆNYyVNjV†Qf‹kK‹ƒNi]YŠŽ”n(I…^Go<=DQYZVLA579<*'+1-4=66E@H=D7;LCE<TZGGU=GJLULL@DA5:4=FLpyZ HqH\‡X:!Fe)$agiG&0yjgz]TlCgfDZk³¥ZK†WM}fQ€tQ€W^tK‚ˆSgeW‹Œ“w.D€aJp>?EUYVQF>7:>A,%(2-6A:;N@KBL:7L?G@UYJ@XEMQP\GTF@@4:58EHh}m/ 6nXOmG*3q<S{jJ$)&lwqnUvG[n>FU™hJƒcLƒqV|ƒStbW…MzTcoY‹Œ’~3C‚iLq??ESURJA=46<?,)+2,6A<=J?H=H;:J?G=OVMK`NQ]YWIRI8?8875CF`u=)kiGƒqO,"nL*Vn]T)*T~n~xNiLKsDC\ˆŠuErtG|yOm„ShpUއLm’_\{V‡”†::}oLtA@FSSNFFTSFA@+*,.-;=?AOBO:F=6L?IDQ^WN]RP_YTKIJ2@D8<6FFY|zN]vFpƒ^6$^cDSYjlt;0@‚s|T]^GuRBb`FyGh‡Ko}NgƒWV|T„‹Wd—jY‹[€”ŠJ6xsMq@BFQQKL[[QD>A+)*+*7>>>LEL>I?7G<GBL\ZQ_YS\XKHBL;GG3?8@HSw€c$ItP_•hG4RgqgRJ]q{G&%5|rv€[RlHoaAfcBxWZ’OaR[†`V†Pu‹[`—u[ŽZyŽ”J2vzPu=@GNLJN]]QD<>+,,0+<>>ES@KDGC;GBHBF^^X]aP[WEKBRNGC0969GKo„q45teWjJERTOC3,7O_K*#h}{‡oRqJanUi†rwqW—]U„`WkR†Qne[–…Z]sŽ”T1t~PrACEJIFKYWLB>>'#(-*8>>@REM<EF:HBEEC`a\\[MOPMSITPED6847KMhƒ{E+mzO}_53CMKB.#6FKH3+Vƒ€‡{PiJOm69.aƒOjP†oT†xVƒXb•s[”\…]j‘••T)l‚Nl@?DFFDISQG>)
6 &':=@CSDJ>GH<HFHI@ab\VPJFNMVSVXG<<696AA_…^a~S6(#'3BJ</(*'>UC/ Gˆ~„ƒPZWIr:37Q“SnV}V~Tyf_˜{\”b|ca•”•\&a‚MeACEHGELUF6&6<@BREH;?K<JLII>caYUSNLRX`YWUEDB4;7?EVˆm*O{P'$&)8DIG;.'.S[E'2}„^RiGh:*ED„[^Vt†To‡Tjr\–…V‚•cqj`’“•b"[‡Oa?CHIGELQ?/1) -#+'&7=DTHI==L>GOFO=^\WRPUSYd^PKIHHC062;EP{‹}7
7=S*# (>RG9?9/ @VJ3'j~~ƒmUyGX1!FCujYŽUf†ZaXgƒYŽVz“ffub”•—k'UˆR]ACDEFFKL8'&#@UERnX-9BCNEDC=L=FPFL:X\RRSZYc]]YKPPOI3616CLn‰ƒL".),*-8A@;53/*%$8HH;R„}„~YmLC/#;Ec~YŒa[ˆ`[‰b\ŽY‚Vp˜mgc““—r%RˆWXCCEFHFKG-+OA3;t„n98@@QFEJAS?GRGR:S`W]\_b`W[[P]VNH8845BIf…ˆ`" #&+/40/78/,+%!8NE>#B„„‚^aW;2.9NY‹W~v]q^ˆq^•Ys•^lui‡dŽ–˜{+O†_UACEEFCE>''')',JeZ=!7A<JHFL>Q@EPEP?P^Ycdc]WOXd\cSDG>46.CF[„s4!!,42-.7;8)-<CJKJ26z|~„dXmB5$6CYXŒXn†]‹`…}Z‹]h™igŸ}hg‹”–0K‡eWEFFHHGE7..! %&34$2C>EKEP@THIULTAMbajebUUV`h[XUFIN2;-;FW}‘F%(4HPH=blQ49:1$f}w‡uZrF%.MjX€ee˜^‡^{]hc›ul¥…hf†“•‰?G„lVBDDEHFC1(-
8)2%0@DEKHS>SFIUFLCHachZYXW`fbUOYPUO19*2GPu„B'8Od`Ue€l<)51U†zƒ}`qN&QuTpwaœaoŠYm]tr`f¡i’e~”—’EAƒqWEEGIHEG0!
9#"6FEHQKTEQDERKMDEae^UR^^d\V[P`^KI3</.GNmŒŠB/LMEMTcu{zv…‘ŽzJ53/Bˆy€ƒ\aY  Dw[eŒ]–faVd‹`c‚h˜Š_š‘jŒcy——–J<|tXEFGIIIG3+(%+O`H'(2:>IIFOLU@NIHTKKDCe_ZTMkg\UXcW^^JH6:6+DGbЉ<@es€…††€~‚žŸ“|I0*3.2y}ƒs‡Œ…„|ˆ‚z›a„ue‘eaŠe_ˆh•’`Œ—k„hr–”—]:z}YFEFIIJI323()UkO*(.9AIDBKGOCNJKRCNHA^UT[Jg`WVbdZV[JNA5<0>I\†.Ehpx}yxz{‹™£ž„I'!,$#g~‚z£¦«¬®¬©®¥nl„gŠt[†qcŠh€Yu™fwii””i;oYEGIKLIPI;:GM[c^X[]acgklmmqpoqswuvwt{zy}z€‚†………‡†ˆ‡‰‹Œ’›“BKSG<69G[ZI@EUlwT(I¦±¯¯±²°®®®°±±±¯¯°²´µ¶µµ´³²±±³³±²°°¯¯°¯¯®­¬¬ªª§FEFILMYgiikoprvwy}€}‚……†…†„…††…††‡†‡‡ˆ††‡‡‡‰‰‰ˆŠˆ‡‡‡ˆ‰ˆ†…„ƒY-UM2)-88{}B/'8Xsi4(Imnnmnmlhhigeccecb__`a^^\^]\\\]^]]][\^^``bbceebFGGJLLZYOMNOOQRTTSUVYYYZ[[\\^^___^^^`abbcegffffgijiknnnonooqY(2`TGCA=K¦©K9>V_xwHPo…†ˆ‰‰‰‹‹ŽŽŽ“’’““•••———™˜—˜™™˜™š›šš™š›š˜HIJMMN^lqopqrsuwzz}ƒ‚‚„†‰ŒŒŒŽŽ‘’“”””““”–••–˜››œ›œœšn4Ajymeiƒœ¨†`_v“žM@‚¦©©ªªª¬«­¬¬­®®«¬¯­®®®®°°¯­¬®®®®­ªª©¨©¨©©ªªª©¨§FGHJKKZghgilnoruwwz|}~‚ƒ‚ƒ„………………†‡ˆ‰ˆˆ‰Š‹ŒŽŽŽŽŽŽ~M;aŠ—˜¡­¬«š­º¨wWj‚ŠŠ‰ˆ‰ˆˆ‡……‚ƒ„ƒ‚€€~}|{yxwvtrpomlkhffebaaa_\[YWTKMMLNMK8"
10 
11
12
13
14
15
16
17
18
19 
20  ,?Qt‰œ§š†˜ž·»´«”taA!!"$&%$&'''&(&'&'(&%%#%$"$$%#!"##"HKKJJKI?+   
21
22    
23
24ASd|“ ƒ>AGR¡¶®ž‰ve5"++!$" .12,!! "! ! JJLMLLKD5 
25   
26 
27 
283P\m†•|E?Ww¤®Ÿz¦ƒ*11''1/ =AB)  KKNMKKID;%->5-:3:@C.5AC52=  (+ 3 !?Wf{Ž~o{˜©¨™‹²~(00&%-. #$EDN+   8WX=GCMZTZfdIL]IJLJKKKJA+1D3,@8FKL.9GG64F    kj(#$4S`u‚“¿Â£šž”ˆ|œÄx3qq;S¤Š69G6*MQQ( +
29NeeRMDRd^]feGG[JJKLONMKE2>S@9LAVXY9H[]CG_)
30
31
32 \[%"$<hSF¨š=j—F:|\bmdJ1005QuŒ…|ŸÀt:ƒ?FˆDz™r6…œu' 
33 <l,=^SUMOq{rXUNdvpmwu^_qKKKKONMJE6JgLEbSmopC]rtORo,
34   &kb'-4%@gTI¦›:k˜CNÄ©caa[exp„„„´Ås:vq6RŒt8[|Z0ŸË‰gÝò›ªÜé”3A2:QPQU_ˆ•€hd]™‡‘Žy{ƒIKLLNMLJH:QoOOm`s}xFg|NWt-
35  (l`*QfDK§˜;o˜ES¼¹|[_d_Xccfx€x‡ÁËt;vl2T–x-4ªÑ‚_¾Ö¦·¿×„,D5JOSYQf–ˆrqj˜¤‹‹”‰ˆ”LLJKOLLJH=TsKToc{vFm{€N[r( 
36 +rc.g€NP­—<vŸG[ÆÉ™YWUPB9C]pwxv’ÅÆp<yq3Y—w-:­ÕY¡¸©É¿å~;6(Nt_<Rz’–€nurŸŠ‹“ŠƒŠ—LLLMNOOKI=XuITk_x€pEo{€Ods%  
37
38 -tb%&)!T­“;{ŸB^ÆÈŸZ[eqr~‰‘…xxo¥Åp=u3X˜u,AµÎye«³ªÄ¾ÞuK=.QQDOKv™“xrv{ŸžŽ•‰†žLLNPRQPO[V\zJWi`{‚qGu|„Rlq"  
39 3{`$"%Y±“>˜>cÊÃUYbksw‚ŒŠwx_’Þp:{s3O–v-I¿Óvj¥°¾¼Î€z7GuhLc[–˜{ts£Ÿ”¡¤ŽŠ’žJLNNOOUfkW`zL\ia|ƒoHv~Soo  #& 5bR$AHM˜¡pMNUXSSZhqlkx^›ër0QK-.<:#2NUQmª´µÏÖÀeO:FMGCHR¥”ssq†¥ŽŸž’Œ–¡PORRRSdnmYb|Naj_}†rJx„Tsj  
40$%  ˆyFLIQY]dhbgnvlÚú±=77*,43$8UZ\lŽ”½¼Ï¸IY\DNHBF\”¥oop’³š‘ š–“— MOOOORdnmV`|Sgk^~‡uKw‚Tuh  #%+€¸¦UKKHEJS^dda[Ëûûýñ°^/1:8':VX`|˜¤ÆÃÖªKPICMD?Abš¨Žnrq«—•ª¡“–˜¢NNMQSUgpoU^SgiZ‰{Mx‚„Sye
41
42
43 
44%%!¤çٺɒBJNMKQ[\WL·ûûûýýýýû«G9$ ! >W[bx˜¡ËÅÛ³Z5G_LZN@q¢«Šnvs˜°”™¬ž˜œ¥¤MNOQQTgpnP^Zni\~†}QuU|c 
45
46
47$& _×ÒáäÆÂÛyFKLKLNKO­ùúûûýýýýûûù¹K'%%EX[kœª×èîˆ<HR`RTODx¨®‰pwt™¬“œ¨™•ž¤©OONOQWiqoJRbul[}‡„Vzƒ„Z€a 
48  &'‡øõäîîÞ¹ÙÎpHLKFB[`©õúúüüüüýýýýü½<)HY[o™±g?W_BCUgGMZJŒ±¬‡wvz¥®•¡¦œ™¡¨¥NOOPQViqmEQ‚_nk\‰„Xz†„[†a   
49&' -”ðúúöêóóê™]svM>Azqv×ôúúüüùùýýýýüüüÊ…^^vœ¢jT[[;;*UzKYn^›´ª}x{©§’¥©£ž£¦ŸLMNOQViqkDN„bqt_…‹^z‰ƒ_‹_  %&AÒïúúúúõèóõóà¢f]kAjŸ†n¯êúúúüüûûýýýýüüüüùø§‚Ç¡nOOP7</H‰yKyt¢¹¦z}ƒ‰­¬”¨¯¨¡ ¤œLNNPQYkplFHƒbk~e‚Ž‘\v‹„`Œ`   
50%'SÔý÷ùýúúú÷ìóõõó½—ˆhzg«òúÓÖúúúúüüüüýýýýüüüüùùùõÖÀìë»D>.Do[6^t³ºr½«š¯°ª¦§£“PMMPRVjokIBilŽn~Ž•]xŠad 
51%'!?Ñøø÷ô÷÷öööôñôôôõ渲Ÿ‹‘ÝüííÛîûûûýýýýüüüüúùùúýýýýüÄÇØá¨7<3La^CV”·¼—l€šÇ¨¥´´±««µ”MNOQRYlpmK>€rc‘lx–^vŽ[ˆo  
52')`êøøø÷õö÷öööóïóôôõõëÔÖÝäðë÷üúúûûûýýýýüüüüúøøúýýýýüßÉÒì¨QEMTQFHB¿Á“s‚~¢Ñ³¨¹´²®­µ‰NMPOOYmpkN8|~`‘kv–at•^„z'
53  '&:Éøøøø÷òó÷öööõñóôôõõîåõõøúüüüüûûûûýýýýüüüüúúúúýýýýüùñùûYƒ[[UTG@‡ÅÊŽw…zªÏ´®¼¶³ª¯µƒLMNPPYnrlO6zŠ]‡tp›Ÿcn’—`z€- 
54   ))–ìïõøø÷ôõ÷öööõñóôôõõñæóùùúüüüüûûûûýýýýüüüüù÷÷úýýýüûü˵٠­a€²˜²ˆ—ÀÇzƒ|­Ç±´Â¼µ±³²uNPQPQ]qtlN+o‘`{}t›žmg•šmw‹7 &
55! !/MÈàáè÷÷ø÷÷øùùùøòôööõõóìðöööûûûûûûûûûûûûùùùùù÷÷ùúùúøùû¸OHnµlZFZ}Q¤Â¾„€†·Æª³Ã¿·´¸ªmNNMNQ]qtlP$a^]Žrvb•™xv9   !!xúæÙâ÷÷øõöøùùùøõõööõõôóôöööûûûûûûûûûûûûùùùùùøøùõóúø÷úàkD\‹P|Ã]’­p¸À¸~„‰‰»Ã¡µÇÁµ±²›lLNPRR_wytgYbs]XpYk~UF{ees, $!!6æèÕØ÷÷ø÷÷øùùùùóôööõõõóõöööûûûûûûûûûûûûùùùùùøùùôõúúùøùû¶™–RazrVi‡ÇƬxˆ‡’ÅÀ¸³­‘nKLMPS`rssvy|ƒ†‹‘“•™šœŸ£¥§©©«¬­««ª¨§¦¥¤£ ›°¼ÖðÛÏó÷øõõøùùùùôôööõõõôôôõöûûúúûûûûûûûûùùùùùøøùúúúúõëøð†LZ?HKDG:r¾±kny•Ƴ§Â½¶´¥‹wKLNPRZH9:99<=<>=@=::<;;==?@BGLORUY_ciosx~ƒ„€±ÄÏãоï÷øôóøöööõóöööõõõñóéó÷øøø÷ûûûûûûûûøøøøûûûû÷÷ùùôÓùùÜÑÑÒÔÔÕÖÖÕÔÔ×ÙÞÜÛÙ×ÖÖÙØ×ÙÚÜÙLKMOP^lnlllmnopsuuuwwvutsqpopnmmjhgeeb`__]\_»ÀÐÇÛÂç÷øõõøöööõðòööõõôïëÞô÷øøø÷ûûûûûûûûøøøøûùúûîñøù÷Ùúü¶x{}}~€ƒ…‡ŠŠ‹Œ“”••–—˜–JLMKN\nrsru{}€…‡‹ŒŽ’“•”•—˜—˜™›Ÿž  Ÿ¡££££¢£¯ßÆÚÂÚÐß÷øôôøõõöôîóööõõõðìä÷÷øøøøûûûûûûûûøøøøûûûûðòùùøâüüÕ…{zvvtrrqpprqpoommmmkkihgheLKJNOK:
56
57  $',048:>CHNTX^chd—æÉÍÇÂÇáöøôôøöööôíñööõõõîëñ÷÷ø÷õöûûûûûûûûøøøøûûûûÑßøõêàüüùØÉÇÅÅÄÄÄÄÅÃÄÄÄÄÂÁÁ¿¿¿½»º¸·´LMLLMNH*  }èÖËÚՏɸùõôùõõõóíñ÷÷öööðêöùùööòôûûûûúúúúùùùùûûûûÅÖöñÝäùùý¶o{…ˆ•™ ¢¥©®´¸·¸¹¼ÀÃÆÂLJJLJJG4
58 †ëæÇâá½É÷ùõñøõõõôïð÷÷öööïé÷ùùööíðûûûûúúúúùùùùûûûûáêëáÍäùùýÐE(%!KKLLIIH>% ˆíïÓÚÙ¼Îõù÷ñ÷õõõõðñ÷÷öööïç÷ùùööóôûûûûúùùúùùùùûûûúãâåâÞôùùýõ{&#!! !!!!" !#LLKLKIE?-  êóàÒÏ­Éóùøõøõõõôðð÷÷öööðçõùùööòóûûûûúøøúùùùùûö÷÷æÙÍÚÜôùùýý¯2&$#""!!! !!""!!"!#""$MKLMJFGB5   4¬ðöèÓÖ¥»ðøöôøõõõõñï÷÷÷÷÷ðâòøøööòôûûûûûùôúûûûûüüüæÏÊËÞàôüüûûì`+$#$$!$$""#! ######%'&KIJJIGEB:( N¾ñöìØÎ¶¿ëø÷òõõõõõïêö÷÷÷õëæ÷ø÷öôñôûûûûûöðùúûûûùíöâÉ»Îåéïûüûûû#)'%$"###""#####!#%%&%&)KHHJIIFC?/ lÒò÷ñßɪ­áööô÷õõõòãÈì÷÷õðéê÷øøöôòöûûûûûìåúûûûûùêùá°¡ÚíöðûüûûûÃ<+($$$'&&$#$$%$#$%&&&),+KIHJJHGD?4# …Þô÷ôäÁ¦ ÒñõòöõóïëÛÃâóòíááóøøøöòîöûú÷øõäòûûûûûîáùâ«—Îìøìöüûûûós(*(&'&&&&&&&&&'('&)*,..IHHIJFECA9(-¢æö÷õฤžÅéòðõôïëèÚÄÙñòçßç÷øøøõðíóýýýýùôúûùùù÷ßÓëÚ¬§Éïûåèüúúúú¨7-,)(''&'''')(&'*-./123IIIHEFECA<0 =¹ìõ÷÷뾬¢¸×èæñóïëçÖ½Óëèßãòøøøøõíêôýýýüïãöûùùù÷ØØóЫºÈóüïðûúúúúã\0-*)(''''('')*+,--0123HHGHHIGEC>4%UÙùöö÷îó¥ºÖÜàôõòìçÜÉÏåÞ×çòøøøøõìèõýýýýéÜöûùùùõâèôÁ¦ÀÓúüòçùúúúúû(,*+)))*+***+,-/223365GEHIFFDDB?7)kàúóñõí¶¡®ËÓÆæôòåÒÑÇÌáâäñòö÷øøôçäõýýýýöñúûùùøðÚïì°¯ÏëüüúïõúúúúûÈD0,**((*+++++./0344223GGHGGFIFCA</"ìøðëïïÑ»¤®ÂɾÍßÍ¿ÅËÈÈÙßêïîùøúúöæâöüüüü÷÷ûûúúøèßöÛ¡®Õõýûûòðûûûûüòz-,-.-)+,,-./131343343EDDFEEEDC@<2&3¬åìêæÜèëÆŸ©ÀÎÃÃÕ×ÍÅÐÊÃÕãðñïùõòóõåâöüüüüõöûûúúøãàøÐ™¬×öýûûòíúûûûüü­6.,---,,..0/023332222CCDFGHGEA><6-!FÁúúööóÚËØ©£»ÌÐÉÐÇÃÇÔÌÀÓçòñí÷ùúúöãßöüüüûïõûûúúöÜçú‘¬Ùöýûû÷éóûûûüüîk0/-/.,-./01212342243DDDEGGECB@<7."`¯÷úöööóáÞĪ»ÆÉ¼ÊÎÈÍÚλÓëõïí÷÷ø÷óÕßöüüüùèóûúùøîÛêò¹‹¦Ìðüûûûìîûûúûüü 1.-.--.-0/0223310110CBDDECDB??<80$,{w³Ù¼µ¿® ¯°§ºÅʶ¶¿Ç¼²º±ÆçóëèñóùùôÕÍôüüü÷âòûûòóòèõ÷¶‚”­àûúúúïÙòûûüüüÜZ111/./0110111310110BABDEEFC@?=;4)  7§Ïðúûí²‘–ެºÆº°¥”Š™§³ÉìôæÚêöôõõâÑòüüüøãíõôðõõñ÷÷ªy˜¤ÐííçÜÛìûûûüüüú’0200010011331110121D?ACEDEECA>;7,#lͺÎ÷ûûûûô®qy¢ ‘‰“§›qw’¢¼ìóßÜíôùùóâÌíüüüüòöûöóúúãîð–n›´È½ÝøúúûûûûüüüüÌM5331121/1220100220?=@BDDDDB@=97.%!¢Ì¯ÐñûŒ™ˆjrut˜¯¥~UhŠ¢ÆìÕÕëõùøðÝÇæüüüùëîìêíìäÚðìˆj’¤Ôýúúúúûûûûü÷ÍŸ`9431121212111100/00@=AAEHGDC@>:62&R¯…A*\qsrmaYWUk•±¤T#’ÊÚòóñøõçÉß÷úúñéñíï÷öíÚòæ€j Àþøøøøû¿j;=UG7322243122112100110-.?=>@CDEDCA><83* ,0$,Rfgeb_URU]h¨™S
59 ŽÈ×ÜïõöóåËÚóùúöôûüøøüöîøæ|b‘«›Çð¹X5?BIL;2222201232332111221011/?<=>BDDA@BA>;4+!  !" !""!$$%$'&(6Q\\_b]ZXZXR^yœ Y (œ¬ÁíõùùõçÍÓîúúúüüüûúú÷ñøÜŠo‡ Œ|Z:;AJOE7355356866544565565553311>=??BBCDCA@>950! "!!#"!""$$%#$$%%&*29GQUWYUTTLDEVWZeX9180>Ž£°òøùùöìÒÕæöúúüüüüùöñìõךry•M==AJTS<6799788768987677886676765 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/readpgm.m b/SD-VBS/common/toolbox/toolbox_basic/affine/readpgm.m
new file mode 100755
index 0000000..a5fd7f2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/readpgm.m
@@ -0,0 +1,26 @@
1function img = pgmread(filename)
2% function img = pgmread(filename)
3% this is my version of pgmread for the pgm file created by XV.
4%
5% this program also corrects for the shifts in the image from pm file.
6
7
8fid = fopen(filename,'r');
9fscanf(fid, 'P5\n');
10cmt = '#';
11while findstr(cmt, '#'),
12 cmt = fgets(fid);
13 if length(findstr(cmt, '#')) ~= 1,
14 YX = sscanf(cmt, '%d %d');
15 y = YX(1); x = YX(2);
16 end
17end
18
19fgets(fid);
20
21%img = fscanf(fid,'%d',size);
22%img = img';
23
24img = fread(fid,[y,x],'uint8');
25img = img';
26fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/simulation.m b/SD-VBS/common/toolbox/toolbox_basic/affine/simulation.m
new file mode 100755
index 0000000..2186a6d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/simulation.m
@@ -0,0 +1,42 @@
1clear
2
3figure(1);colormap(gray);
4
5%------------ Parameters --------------------------
6window_size_h = 40;
7window_size = 2*window_size_h+1;
8noise_level = 40/256;
9
10% define A and D
11x_ext = -0.423;
12ext = 1.232;
13A = [ext+x_ext, 0.2534; 0.3423,ext];
14
15D = [3,1];
16
17%------------- compute image I and J ---------------
18disp('generating I')
19I_init = gen_feature_s(window_size);
20[size_y,size_x] = size(I_init);
21
22%define image center
23[center_x,center_y] = find_center(size_x,size_y);
24
25% adding noise to image I
26I = I_init+noise_level*rand(size_y,size_x);
27% make sure all intensities are positive
28I = I.*(I>0);
29
30disp('computing J')
31J_init = compute_J(A,D,I_init,[center_x,center_y],[window_size_h,window_size_h]);
32J = J_init+noise_level*rand(size_y,size_x);
33J = J.*(J>0);
34
35
36%------------- compute A and residue ----------------
37c = [center_x,center_y];
38num_iter = 8; w = 9;win_h = [window_size_h,window_size_h];
39
40fig_disp = 1;
41[Ac,Dc,mask] = compute_AD_disp(I,J,c,c,win_h,num_iter,w,fig_disp);
42
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/sports1_11_28.jpeg b/SD-VBS/common/toolbox/toolbox_basic/affine/sports1_11_28.jpeg
new file mode 100755
index 0000000..39ebed5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/sports1_11_28.jpeg
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/test_affine.m b/SD-VBS/common/toolbox/toolbox_basic/affine/test_affine.m
new file mode 100755
index 0000000..41b48b9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/test_affine.m
@@ -0,0 +1,33 @@
1%%% This is a test program for Affine tracker %%%%
2
3disp(sprintf('This is a test program of Affine tracker'));
4
5%% read in images
6
7disp(sprintf('read in images'));
8I = readpgm('pan.0.pgm');
9J = readpgm('pan.1.pgm');
10
11figure(1); im(I); colormap(gray);
12figure(2); im(J); colormap(gray);
13
14
15figure(1);disp(sprintf('click on the center of a image window'));
16c = round(ginput(1));
17
18%% compute the displacement of that image window
19disp(sprintf('computing...'));
20
21win_hsize_temp = [8,8];
22w = 3;
23num_iter = 6;
24
25disp_flag = 1;
26
27win_h = win_hsize_temp + [w,w];
28if disp_flag == 1,
29 figure_id = 3;
30 [A,D,mask] = compute_AD_disp(I,J,c,c,win_h,num_iter,w,figure_id);
31else
32 [A,D,mask] = compute_AD(I,J,c,c,win_h,num_iter,w);
33end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affinityic.c b/SD-VBS/common/toolbox/toolbox_basic/affinityic.c
new file mode 100755
index 0000000..e48762a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affinityic.c
@@ -0,0 +1,186 @@
1/*================================================================
2* function w = affinityic(emag,ephase,pi,pj,sigma)
3* Input:
4* emag = edge strength at each pixel
5* ephase = edge phase at each pixel
6* [pi,pj] = index pair representation for MALTAB sparse matrices
7* sigma = sigma for IC energy
8* Output:
9* w = affinity with IC at [pi,pj]
10*
11
12% test sequence
13f = synimg(10);
14[i,j] = cimgnbmap(size(f),2);
15[ex,ey,egx,egy] = quadedgep(f);
16a = affinityic(ex,ey,egx,egy,i,j)
17show_dist_w(f,a);
18
19* Jianbo Shi, Stella X. Yu, Nov 19, 2001.
20*=================================================================*/
21
22# include "mex.h"
23# include "math.h"
24
25void mexFunction(
26 int nargout,
27 mxArray *out[],
28 int nargin,
29 const mxArray *in[]
30)
31{
32 /* declare variables */
33 int nr, nc, np, total;
34 int i, j, k, ix, iy, jx, jy, ii, jj, iip1, jjp1, iip2, jjp2, step;
35 double sigma, di, dj, a, z, maxori, phase1, phase2, slope;
36 int *ir, *jc;
37 unsigned long *pi, *pj;
38 double *emag, *ephase, *w;
39
40 /* check argument */
41 if (nargin<4) {
42 mexErrMsgTxt("Four input arguments required");
43 }
44 if (nargout>1) {
45 mexErrMsgTxt("Too many output arguments");
46 }
47
48 /* get edgel information */
49 nr = mxGetM(in[0]);
50 nc = mxGetN(in[0]);
51 if ( nr*nc ==0 || nr != mxGetM(in[1]) || nc != mxGetN(in[1]) ) {
52 mexErrMsgTxt("Edge magnitude and phase shall be of the same image size");
53 }
54 emag = mxGetPr(in[0]);
55 ephase = mxGetPr(in[1]);
56 np = nr * nc;
57
58 /* get new index pair */
59 if (!mxIsUint32(in[2]) | !mxIsUint32(in[3])) {
60 mexErrMsgTxt("Index pair shall be of type UINT32");
61 }
62 if (mxGetM(in[3]) * mxGetN(in[3]) != np + 1) {
63 mexErrMsgTxt("Wrong index representation");
64 }
65 pi = mxGetData(in[2]);
66 pj = mxGetData(in[3]);
67
68 /* create output */
69 out[0] = mxCreateSparse(np,np,pj[np],mxREAL);
70 if (out[0]==NULL) {
71 mexErrMsgTxt("Not enough memory for the output matrix");
72 }
73 w = mxGetPr(out[0]);
74 ir = mxGetIr(out[0]);
75 jc = mxGetJc(out[0]);
76
77 /* find my sigma */
78 if (nargin<5) {
79 sigma = 0;
80 for (k=0; k<np; k++) {
81 if (emag[k]>sigma) { sigma = emag[k]; }
82 }
83 sigma = sigma / 10;
84 printf("sigma = %6.5f",sigma);
85 } else {
86 sigma = mxGetScalar(in[4]);
87 }
88 a = 1.0/ (sigma);
89
90 /* computation */
91 total = 0;
92 for (j=0; j<np; j++) {
93
94 jc[j] = total;
95 jx = j / nr; /* col */
96 jy = j % nr; /* row */
97
98 for (k=pj[j]; k<pj[j+1]; k++) {
99
100 i = pi[k];
101
102 if (i==j) {
103 maxori = 1;
104
105 } else {
106
107 ix = i / nr;
108 iy = i % nr;
109
110 /* scan */
111 di = (double) (iy - jy);
112 dj = (double) (ix - jx);
113
114 maxori = 0.;
115 phase1 = ephase[j];
116
117
118 /* sample in i direction */
119 if (abs(di) >= abs(dj)) {
120 slope = dj / di;
121 step = (iy>=jy) ? 1 : -1;
122
123 iip1 = jy;
124 jjp1 = jx;
125
126
127 for (ii=0;ii<abs(di);ii++){
128 iip2 = iip1 + step;
129 jjp2 = (int)(0.5 + slope*(iip2-jy) + jx);
130
131 phase2 = ephase[iip2+jjp2*nr];
132
133 if (phase1 != phase2) {
134 z = (emag[iip1+jjp1*nr] + emag[iip2+jjp2*nr]);
135 if (z > maxori){
136 maxori = z;
137 }
138 }
139
140 iip1 = iip2;
141 jjp1 = jjp2;
142 phase1 = phase2;
143 }
144
145 /* sample in j direction */
146 } else {
147 slope = di / dj;
148 step = (ix>=jx) ? 1: -1;
149
150 jjp1 = jx;
151 iip1 = jy;
152
153
154 for (jj=0;jj<abs(dj);jj++){
155 jjp2 = jjp1 + step;
156 iip2 = (int)(0.5+ slope*(jjp2-jx) + jy);
157
158 phase2 = ephase[iip2+jjp2*nr];
159
160 if (phase1 != phase2){
161 z = (emag[iip1+jjp1*nr] + emag[iip2+jjp2*nr]);
162 if (z > maxori){
163 maxori = z;
164 }
165
166 }
167
168 iip1 = iip2;
169 jjp1 = jjp2;
170 phase1 = phase2;
171 }
172 }
173
174 maxori = 0.5 * maxori*a;
175 maxori = exp(-maxori*maxori);
176 }
177 ir[total] = i;
178
179 w[total] = maxori + 0.005;
180 total = total + 1;
181
182 } /* i */
183 } /* j */
184
185 jc[np] = total;
186}
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib/TOOLBOX_calib.tar b/SD-VBS/common/toolbox/toolbox_basic/calib/TOOLBOX_calib.tar
new file mode 100755
index 0000000..92ab3a0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib/TOOLBOX_calib.tar
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/Distor2Calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/Distor2Calib.m
new file mode 100755
index 0000000..a82f583
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/Distor2Calib.m
@@ -0,0 +1,391 @@
1function [fc_2,Rc_2,Tc_2,H_2,distance,V_vert,V_hori,x_all_c,V_hori_pix,V_vert_pix,V_diag1_pix,V_diag2_pix]=Distor2Calib(k_dist,grid_pts_centered,n_sq_x,n_sq_y,Np,W,L,Xgrid_2,f_ini,N_iter,two_focal);
2
3% Computes the calibration parameters knowing the
4% distortion factor k_dist
5
6% grid_pts_centered are the grid point coordinates after substraction of
7% the optical center.
8
9% can give an optional guess for the focal length f_ini (can set to [])
10% can provide the number of iterations for the Iterative Vanishing Point Algorithm
11
12% if the focal length is known perfectly, then, there is no need to iterate,
13% and therefore, one can fix: N_iter = 0;
14
15% California Institute of Technology
16% (c) Jean-Yves Bouguet - October 7th, 1997
17
18
19
20%keyboard;
21
22if exist('two_focal'),
23 if isempty(two_focal),
24 two_focal=0;
25 end;
26else
27 two_focal = 0;
28end;
29
30
31if exist('N_iter'),
32 if ~isempty(N_iter),
33 disp('Use number of iterations provided');
34 else
35 N_iter = 10;
36 end;
37else
38 N_iter = 10;
39end;
40
41if exist('f_ini'),
42 if ~isempty(f_ini),
43 disp('Use focal provided');
44 if length(f_ini)<2, f_ini=[f_ini;f_ini]; end;
45 fc_2 = f_ini;
46 x_all_c = [grid_pts_centered(1,:)/fc_2(1);grid_pts_centered(2,:)/fc_2(2)];
47 x_all_c = comp_distortion(x_all_c,k_dist); % we can this time!!!
48 else
49 fc_2 = [1;1];
50 x_all_c = grid_pts_centered;
51 end;
52else
53 fc_2 = [1;1];
54 x_all_c = grid_pts_centered;
55end;
56
57
58dX = W/n_sq_x;
59dY = L/n_sq_y;
60
61
62N_x = n_sq_x+1;
63N_y = n_sq_y+1;
64
65
66x_grid = zeros(N_x,N_y);
67y_grid = zeros(N_x,N_y);
68
69
70
71
72
73%%% Computation of the four vanishing points in pixels
74
75
76 x_grid(:) = grid_pts_centered(1,:);
77 y_grid(:) = grid_pts_centered(2,:);
78
79 for k=1:n_sq_x+1,
80 [U,S,V] = svd([x_grid(k,:);y_grid(k,:);ones(1,n_sq_y+1)]);
81 vert(:,k) = U(:,3);
82 end;
83
84 for k=1:n_sq_y+1,
85 [U,S,V] = svd([x_grid(:,k)';y_grid(:,k)';ones(1,n_sq_x+1)]);
86 hori(:,k) = U(:,3);
87 end;
88
89 % 2 principle Vanishing points:
90 [U,S,V] = svd(vert);
91 V_vert = U(:,3);
92 [U,S,V] = svd(hori);
93 V_hori = U(:,3);
94
95
96
97 % Square warping:
98
99
100 vert_first = vert(:,1) - dot(V_vert,vert(:,1))/dot(V_vert,V_vert) * V_vert;
101 vert_last = vert(:,n_sq_x+1) - dot(V_vert,vert(:,n_sq_x+1))/dot(V_vert,V_vert) * V_vert;
102
103 hori_first = hori(:,1) - dot(V_hori,hori(:,1))/dot(V_hori,V_hori) * V_hori;
104 hori_last = hori(:,n_sq_y+1) - dot(V_hori,hori(:,n_sq_y+1))/dot(V_hori,V_hori) * V_hori;
105
106
107 x1 = cross(hori_first,vert_first);
108 x2 = cross(hori_first,vert_last);
109 x3 = cross(hori_last,vert_last);
110 x4 = cross(hori_last,vert_first);
111
112 x1 = x1/x1(3);
113 x2 = x2/x2(3);
114 x3 = x3/x3(3);
115 x4 = x4/x4(3);
116
117
118
119 [square] = Rectangle2Square([x1 x2 x3 x4],W,L);
120
121 y1 = square(:,1);
122 y2 = square(:,2);
123 y3 = square(:,3);
124 y4 = square(:,4);
125
126 H2 = cross(V_vert,V_hori);
127
128 V_diag1 = cross(cross(y1,y3),H2);
129 V_diag2 = cross(cross(y2,y4),H2);
130
131 V_diag1 = V_diag1 / norm(V_diag1);
132 V_diag2 = V_diag2 / norm(V_diag2);
133
134 V_hori_pix = V_hori;
135 V_vert_pix = V_vert;
136 V_diag1_pix = V_diag1;
137 V_diag2_pix = V_diag2;
138
139
140% end of computation of the vanishing points in pixels.
141
142
143
144
145
146
147
148
149if two_focal, % only if we attempt to estimate two focals...
150 % Use diagonal lines also to add two extra vanishing points (?)
151 N_min = min(N_x,N_y);
152
153 if N_min < 2,
154 use_diag = 0;
155 two_focal = 0;
156 disp('Cannot estimate two focals (no existing diagonals)');
157 else
158 use_diag = 1;
159 Delta_N = abs(N_x-N_y);
160 N_extra = round((N_min - Delta_N - 1)/2);
161 diag_list = -N_extra:Delta_N+N_extra;
162 N_diag = length(diag_list);
163 diag_1 = zeros(3,N_diag);
164 diag_2 = zeros(3,N_diag);
165 end;
166else
167 % Give up the use of the diagonals (so far)
168 % it seems that the error is increased
169 use_diag = 0;
170end;
171
172
173
174% The vertical lines: vert, Horizontal lines: hori
175vert = zeros(3,n_sq_x+1);
176hori = zeros(3,n_sq_y+1);
177
178for counter_k = 1:N_iter, % the Iterative Vanishing Points Algorithm to
179 % estimate the focal length accurately
180
181 x_grid(:) = x_all_c(1,:);
182 y_grid(:) = x_all_c(2,:);
183
184 for k=1:n_sq_x+1,
185 [U,S,V] = svd([x_grid(k,:);y_grid(k,:);ones(1,n_sq_y+1)]);
186 vert(:,k) = U(:,3);
187 end;
188
189 for k=1:n_sq_y+1,
190 [U,S,V] = svd([x_grid(:,k)';y_grid(:,k)';ones(1,n_sq_x+1)]);
191 hori(:,k) = U(:,3);
192 end;
193
194 % 2 principle Vanishing points:
195 [U,S,V] = svd(vert);
196 V_vert = U(:,3);
197 [U,S,V] = svd(hori);
198 V_hori = U(:,3);
199
200
201
202 % Square warping:
203
204
205 vert_first = vert(:,1) - dot(V_vert,vert(:,1))/dot(V_vert,V_vert) * V_vert;
206 vert_last = vert(:,n_sq_x+1) - dot(V_vert,vert(:,n_sq_x+1))/dot(V_vert,V_vert) * V_vert;
207
208 hori_first = hori(:,1) - dot(V_hori,hori(:,1))/dot(V_hori,V_hori) * V_hori;
209 hori_last = hori(:,n_sq_y+1) - dot(V_hori,hori(:,n_sq_y+1))/dot(V_hori,V_hori) * V_hori;
210
211
212 x1 = cross(hori_first,vert_first);
213 x2 = cross(hori_first,vert_last);
214 x3 = cross(hori_last,vert_last);
215 x4 = cross(hori_last,vert_first);
216
217 x1 = x1/x1(3);
218 x2 = x2/x2(3);
219 x3 = x3/x3(3);
220 x4 = x4/x4(3);
221
222
223
224 [square] = Rectangle2Square([x1 x2 x3 x4],W,L);
225
226 y1 = square(:,1);
227 y2 = square(:,2);
228 y3 = square(:,3);
229 y4 = square(:,4);
230
231 H2 = cross(V_vert,V_hori);
232
233 V_diag1 = cross(cross(y1,y3),H2);
234 V_diag2 = cross(cross(y2,y4),H2);
235
236 V_diag1 = V_diag1 / norm(V_diag1);
237 V_diag2 = V_diag2 / norm(V_diag2);
238
239
240
241
242 % Estimation of the focal length, and normalization:
243
244 % Compute the ellipsis of (1/f^2) positions:
245 % a * (1/fx)^2 + b * (1/fx)^2 = -c
246
247
248 a1 = V_hori(1);
249 b1 = V_hori(2);
250 c1 = V_hori(3);
251
252 a2 = V_vert(1);
253 b2 = V_vert(2);
254 c2 = V_vert(3);
255
256 a3 = V_diag1(1);
257 b3 = V_diag1(2);
258 c3 = V_diag1(3);
259
260 a4 = V_diag2(1);
261 b4 = V_diag2(2);
262 c4 = V_diag2(3);
263
264
265 if two_focal,
266
267
268 A = [a1*a2 b1*b2;a3*a4 b3*b4];
269 b = -[c1*c2;c3*c4];
270
271 f = sqrt(abs(1./(inv(A)*b)));
272
273 else
274
275 f = sqrt(abs(-(c1*c2*(a1*a2 + b1*b2) + c3*c4*(a3*a4 + b3*b4))/(c1^2*c2^2 + c3^2*c4^2)));
276
277 f = [f;f];
278
279 end;
280
281
282
283 % REMARK:
284 % if both a and b are small, the calibration is impossible.
285 % if one of them is small, only the other focal length is observable
286 % if none is small, both focals are observable
287
288
289 fc_2 = fc_2 .* f;
290
291
292 % DEBUG PART: fix focal to 500...
293 %fc_2= [500;500]; disp('Line 293 to be earased in Distor2Calib.m');
294
295
296 % end of focal compensation
297
298 % normalize by the current focal:
299
300 x_all = [grid_pts_centered(1,:)/fc_2(1);grid_pts_centered(2,:)/fc_2(2)];
301
302 % Compensate by the distortion factor:
303
304 x_all_c = comp_distortion(x_all,k_dist);
305
306end;
307
308% At that point, we hope that the distortion is gone...
309
310x_grid(:) = x_all_c(1,:);
311y_grid(:) = x_all_c(2,:);
312
313for k=1:n_sq_x+1,
314 [U,S,V] = svd([x_grid(k,:);y_grid(k,:);ones(1,n_sq_y+1)]);
315 vert(:,k) = U(:,3);
316end;
317
318for k=1:n_sq_y+1,
319 [U,S,V] = svd([x_grid(:,k)';y_grid(:,k)';ones(1,n_sq_x+1)]);
320 hori(:,k) = U(:,3);
321end;
322
323% Vanishing points:
324[U,S,V] = svd(vert);
325V_vert = U(:,3);
326[U,S,V] = svd(hori);
327V_hori = U(:,3);
328
329% Horizon:
330
331H_2 = cross(V_vert,V_hori);
332
333% H_2 = cross(V_vert,V_hori);
334
335% pick a plane in front of the camera (positive depth)
336if H_2(3) < 0, H_2 = -H_2; end;
337
338
339% Rotation matrix:
340
341if V_hori(1) < 0, V_hori = -V_hori; end;
342
343V_hori = V_hori/norm(V_hori);
344H_2 = H_2/norm(H_2);
345
346V_hori = V_hori - dot(V_hori,H_2)*H_2;
347
348Rc_2 = [V_hori cross(H_2,V_hori) H_2];
349
350Rc_2 = Rc_2 / det(Rc_2);
351
352%omc_2 = rodrigues(Rc_2);
353
354%Rc_2 = rodrigues(omc_2);
355
356% Find the distance of the plane for translation vector:
357
358xc_2 = [x_all_c;ones(1,Np)];
359
360Zc_2 = 1./sum(xc_2 .* (Rc_2(:,3)*ones(1,Np)));
361
362Xo_2 = [sum(xc_2 .* (Rc_2(:,1)*ones(1,Np))).*Zc_2 ; sum(xc_2 .* (Rc_2(:,2)*ones(1,Np))).*Zc_2];
363
364XXo_2 = Xo_2 - mean(Xo_2')'*ones(1,Np);
365
366distance_x = norm(Xgrid_2(1,:))/norm(XXo_2(1,:));
367distance_y = norm(Xgrid_2(2,:))/norm(XXo_2(2,:));
368
369
370distance = sum(sum(XXo_2(1:2,:).*Xgrid_2(1:2,:)))/sum(sum(XXo_2(1:2,:).^2));
371
372alpha = abs(distance_x - distance_y)/distance;
373
374if (alpha>0.1)&~two_focal,
375 disp('Should use two focals in x and y...');
376end;
377
378% Deduce the translation vector:
379
380Tc_2 = distance * H_2;
381
382
383
384
385
386return;
387
388 V_hori_pix/V_hori_pix(3)
389 V_vert_pix/V_vert_pix(3)
390 V_diag1_pix/V_diag1_pix(3)
391 V_diag2_pix/V_diag2_pix(3)
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/Multi_Calib_oulu.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/Multi_Calib_oulu.m
new file mode 100755
index 0000000..62ca9ae
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/Multi_Calib_oulu.m
@@ -0,0 +1,12 @@
1
2% enter image names, numbers, ...
3data_calib;
4
5%read images from files
6ima_read_calib;
7
8click_calib;
9
10%go_calib; % the original version
11
12go_calib_optim;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/Rectangle2Square.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/Rectangle2Square.m
new file mode 100755
index 0000000..a6bbbe5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/Rectangle2Square.m
@@ -0,0 +1,19 @@
1function [square] = Rectangle2Square(rectangle,L,W);
2
3% Generate the square from a rectangle of known segment lengths
4% from pt1 to pt2 : L
5% from pt2 to pt3 : W
6
7[u_hori,u_vert] = UnWarpPlane(rectangle);
8
9coeff_x = sqrt(W/L);
10coeff_y = 1/coeff_x;
11
12x_coord = [ 0 coeff_x coeff_x 0];
13y_coord = [ 0 0 coeff_y coeff_y];
14
15
16square = rectangle(:,1) * ones(1,4) + u_hori*x_coord + u_vert*y_coord;
17square = square ./ (ones(3,1)*square(3,:));
18
19
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/UnWarpPlane.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/UnWarpPlane.m
new file mode 100755
index 0000000..8addf52
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/UnWarpPlane.m
@@ -0,0 +1,54 @@
1function [u_hori,u_vert] = UnWarpPlane(x1,x2,x3,x4);
2
3% Recovers the two 3D directions of the rectangular patch x1x2x3x4
4% x1 is the origin point, ie any point of planar coordinate (x,y) on the
5% rectangular patch will be projected on the image plane at:
6% x1 + x * u_hori + y * u_vert
7%
8% Note: u_hori and u_vert are also the two vanishing points.
9
10
11if nargin < 4,
12
13 x4 = x1(:,4);
14 x3 = x1(:,3);
15 x2 = x1(:,2);
16 x1 = x1(:,1);
17
18end;
19
20
21% Image Projection:
22L1 = cross(x1,x2);
23L2 = cross(x4,x3);
24L3 = cross(x2,x3);
25L4 = cross(x1,x4);
26
27% Vanishing point:
28V1 = cross(L1,L2);
29V2 = cross(L3,L4);
30
31% Horizon line:
32H = cross(V1,V2);
33
34if H(3) < 0, H = -H; end;
35
36
37H = H / norm(H);
38
39
40X1 = x1 / dot(H,x1);
41X2 = x2 / dot(H,x2);
42X3 = x3 / dot(H,x3);
43X4 = x4 / dot(H,x4);
44
45scale = X1(3);
46
47X1 = X1/scale;
48X2 = X2/scale;
49X3 = X3/scale;
50X4 = X4/scale;
51
52
53u_hori = X2 - X1;
54u_vert = X4 - X1;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/add_suppress.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/add_suppress.m
new file mode 100755
index 0000000..b9bcc57
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/add_suppress.m
@@ -0,0 +1,91 @@
1 check_active_images;
2
3
4fprintf(1,'\nThis function is useful to select a subset of images to calibrate\n');
5
6 fprintf(1,'\nThere are currently %d active images selected for calibration (out of %d):\n',length(ind_active),n_ima);
7
8 if ~isempty(ind_active),
9
10 for ii = 1:length(ind_active)-2,
11
12 fprintf(1,'%d, ',ind_active(ii));
13
14 end;
15
16 fprintf(1,'%d and %d.',ind_active(end-1),ind_active(end));
17
18 end;
19
20 fprintf(1,'\n');
21
22
23fprintf(1,'\nDo you want to suppress or add images from that list?\n');
24
25choice = 2;
26
27while (choice~=0)&(choice~=1),
28 choice = input('For suppressing images enter 0, for adding images enter 1 ([]=no change): ');
29 if isempty(choice),
30 fprintf(1,'No change applied to the list of active images.\n');
31 return;
32 end;
33 if (choice~=0)&(choice~=1),
34 disp('Bad entry. Try again.');
35 end;
36end;
37
38
39if choice,
40
41 ima_numbers = input('Number(s) of image(s) to add ([] = all images) = ');
42
43if isempty(ima_numbers),
44 fprintf(1,'All %d images are now active\n',n_ima);
45 ima_proc = 1:n_ima;
46 else
47 ima_proc = ima_numbers;
48 end;
49
50else
51
52
53 ima_numbers = input('Number(s) of image(s) to suppress ([] = no image) = ');
54
55 if isempty(ima_numbers),
56 fprintf(1,'No image has been suppressed. No modication of the list of active images.\n',n_ima);
57 ima_proc = [];
58 else
59 ima_proc = ima_numbers;
60 end;
61
62end;
63
64if ~isempty(ima_proc),
65
66 active_images(ima_proc) = choice * ones(1,length(ima_proc));
67
68end;
69
70
71 check_active_images;
72
73
74 fprintf(1,'\nThere is now a total of %d active images for calibration:\n',length(ind_active));
75
76 if ~isempty(ind_active),
77
78 for ii = 1:length(ind_active)-2,
79
80 fprintf(1,'%d, ',ind_active(ii));
81
82 end;
83
84 fprintf(1,'%d and %d.',ind_active(end-1),ind_active(end));
85
86 end;
87
88 fprintf(1,'\n\nYou may now run ''Calibration'' to recalibrate based on this new set of images.\n');
89
90
91 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/analyse_error.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/analyse_error.m
new file mode 100755
index 0000000..5bfa3b5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/analyse_error.m
@@ -0,0 +1,104 @@
1% Color code for each image:
2
3check_active_images;
4
5if ~exist(['ex_' num2str(ind_active(1)) ]),
6 fprintf(1,'Need to calibrate before analysing reprojection error. Maybe need to load Calib_Results.mat file.\n');
7 return;
8end;
9
10
11if ~exist('no_grid'),
12 no_grid = 0;
13end;
14
15colors = 'brgkcm';
16
17
18figure(5);
19
20for kk = 1:n_ima,
21 if active_images(kk) & eval(['~isnan(y_' num2str(kk) '(1,1))']),
22 eval(['plot(ex_' num2str(kk) '(1,:),ex_' num2str(kk) '(2,:),''' colors(rem(kk-1,6)+1) '+'');']);
23 hold on;
24 end;
25end;
26hold off;
27axis('equal');
28if 1, %~no_grid,
29 title('Reprojection error (in pixel) - To exit: right button');
30else
31 title('Reprojection error (in pixel)');
32end;
33xlabel('x');
34ylabel('y');
35
36set(5,'Name','error','NumberTitle','off');
37
38
39
40%err_std = std(ex')';
41
42%fprintf(1,'Pixel error: err = [ %3.5f %3.5f]\n\n',err_std);
43
44b = 1;
45
46while b==1,
47
48[xp,yp,b] = ginput3(1);
49
50if b==1,
51ddd = (ex(1,:)-xp).^2 + (ex(2,:)-yp).^2;
52
53[mind,indmin] = min(ddd);
54
55
56done = 0;
57kk_ima = 1;
58while (~done)&(kk_ima<=n_ima),
59 %fprintf(1,'%d...',kk_ima);
60 eval(['ex_kk = ex_' num2str(kk_ima) ';']);
61 sol_kk = find((ex_kk(1,:) == ex(1,indmin))&(ex_kk(2,:) == ex(2,indmin)));
62 if isempty(sol_kk),
63 kk_ima = kk_ima + 1;
64 else
65 done = 1;
66 end;
67end;
68
69if ~no_grid,
70
71eval(['n_sq_x = n_sq_x_' num2str(kk_ima) ';']);
72eval(['n_sq_y = n_sq_y_' num2str(kk_ima) ';']);
73
74Nx = n_sq_x+1;
75Ny = n_sq_y+1;
76
77y1 = floor((sol_kk-1)./Nx);
78x1 = sol_kk - 1 - Nx*y1; %rem(sol_kk-1,Nx);
79
80y1 = (n_sq_y+1) - y1;
81x1 = x1 + 1;
82
83fprintf(1,'\nSelected image: %d\nSelected point: (col,row)=(%d,%d)\nNcol=%d, Nrow=%d\n',[kk_ima x1 y1 Nx Ny]);
84fprintf(1,'Pixel error = (%3.5f,%3.5f)\n',[ex(1,indmin) ex(2,indmin)]);
85
86else
87
88 eval(['x_kk = x_' num2str(kk_ima) ';']);
89
90 xpt = x_kk(:,sol_kk);
91
92fprintf(1,'\nSelected image: %d\nImage coordinates (in pixel): (%3.2f,%3.2f)\n',[kk_ima xpt']);
93fprintf(1,'Pixel error = (%3.5f,%3.5f)\n',[ex(1,indmin) ex(2,indmin)]);
94
95
96end;
97
98
99end;
100
101end;
102
103disp('done');
104
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/calib.m
new file mode 100755
index 0000000..5b0fdac
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/calib.m
@@ -0,0 +1,74 @@
1if ~exist('instructions'), instructions = 1; end;
2
3if instructions,
4
5fprintf(1,'\n');
6fprintf(1,'*----------------------------------------------------------------------------------------------------*\n');
7fprintf(1,'| Main Calibration toolbox (2D and 3D rigs) |\n');
8fprintf(1,'| (c) Jean-Yves Bouguet - September 9th, 1999 |\n');
9fprintf(1,'*----------------------------------------------------------------------------------------------------*\n\n\n');
10
11fprintf(1,'CLICK ON:\n\n');
12
13fprintf(1,'2D: To perform camera calibration from multiple views of a 2D planar grid. \n');
14fprintf(1,' Set default size of grid (in dX_default and dY_default) in click_calib.m.\n');
15fprintf(1,'3D: To perform camera calibration from multiple views of a 3D grid corner. \n');
16fprintf(1,' Set default size of grids (in dX_default and dY_default) in click_calib3D.m.\n');
17fprintf(1,'Exit: To close the calibration tool. \n');
18
19end;
20
21instructions = 0;
22
23fig_number = 1;
24
25n_row = 1;
26n_col = 3;
27
28string_list = cell(n_row,n_col);
29callback_list = cell(n_row,n_col);
30
31x_size = 40;
32y_size = 20;
33
34title_figure = 'Calibration tool';
35
36string_list{1,1} = '2D rig';
37string_list{1,2} = '3D rig';
38string_list{1,3} = 'Exit';
39
40callback_list{1,1} = 'calib_gui;';
41callback_list{1,2} = 'calib3D_gui;';
42callback_list{1,3} = ['disp(''Bye. To run again, type calib.''); close(' num2str(fig_number) ');'];
43
44
45figure(fig_number); clf;
46pos = get(fig_number,'Position');
47
48fig_size_x = x_size*n_col+(n_col+1)*2;
49fig_size_y = y_size*n_row+(n_row+1)*2;
50
51set(fig_number,'Units','points', ...
52 'BackingStore','off', ...
53 'Color',[0.8 0.8 0.8], ...
54 'MenuBar','none', ...
55 'Resize','off', ...
56 'Name',title_figure, ...
57'Position',[pos(1) pos(2) fig_size_x fig_size_y], ...
58'NumberTitle','off');
59
60
61for i=n_row:-1:1,
62 for j = n_col:-1:1,
63 if (~isempty(callback_list{i,j}))&(~isempty(string_list{i,j})),
64 uicontrol('Parent',fig_number, ...
65 'Units','points', ...
66 'Callback',callback_list{i,j}, ...
67 'ListboxTop',0, ...
68 'Position',[(2+(j-1)*(x_size+2)) (fig_size_y - i*(2+y_size)) x_size y_size], ...
69 'String',string_list{i,j}, ...
70 'Tag','Pushbutton1');
71 end;
72 end;
73end;
74
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/calib3D_gui.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/calib3D_gui.m
new file mode 100755
index 0000000..ff24f6b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/calib3D_gui.m
@@ -0,0 +1,115 @@
1if ~exist('instructions3D'), instructions3D = 1; end;
2
3if instructions3D,
4
5fprintf(1,'\n');
6fprintf(1,'*----------------------------------------------------------------------------------------------------*\n');
7fprintf(1,'| Canera calibration from multiple images of the Intel 3D calibration rig |\n');
8fprintf(1,'| (c) Jean-Yves Bouguet - September 2nd, 1999 |\n');
9fprintf(1,'*----------------------------------------------------------------------------------------------------*\n\n\n');
10
11fprintf(1,'LIST OF CALIBRATION COMMANDS (to be executed from 1 to 5):\n\n');
12
13fprintf(1,'1- Image names: Lets the user enter the file names of the calibration images (max = 30 images).\n');
14fprintf(1,' It includes basename, image type (''tif'', ''bmp'' or ''ras''), numbering scheme.\n');
15fprintf(1,' Automatically launchs the next step (Read images).\n');
16fprintf(1,'2- Read images: Reads in the calibration images from files.\n');
17fprintf(1,' Does not automatically launch the next step (Extract grid corners).\n');
18fprintf(1,'3- Extract grid corners: Extracts the grid corners from the image.\n');
19fprintf(1,' Based six maual clicks per image.\n');
20fprintf(1,' The calibration data is saved under ''calib_data.mat''.\n');
21fprintf(1,' Automatically launchs the next step (Run calibration).\n');
22fprintf(1,'4- Run calibration: Main calibration procedure.\n');
23fprintf(1,' Optimization of intrinsic and extrinsic parameters to minimize\n');
24fprintf(1,' the reprojection error (in the least squares sense.\n');
25fprintf(1,' Estimated parameters: 2 focal lengths, principal point,\n');
26fprintf(1,' radial (2 coeff. -> 4 degree model) and tangential (2 coeff.) distortion,\n');
27fprintf(1,' and extrinsic parameters (6 parameters per image).\n');
28fprintf(1,' The final solution is saved under ''Calib_Results.mat''.\n');
29fprintf(1,' For a description of the intrinsic camera model, refer to the reference:\n');
30fprintf(1,' "A Four-step Camera Calibration Procedure with implicit Image Correction"\n');
31fprintf(1,' Janne Heikkila and Olli Silven, Infotech Oulu and Department of EE\n');
32fprintf(1,' University of Oulu, Appeared in CVPR''97, Puerto Rico.\n');
33fprintf(1,' Visit http://www.ee.oulu.fi/~jth/calibr/Calibration.html\n');
34fprintf(1,' Automatically launchs the next step (Graphic out).\n');
35fprintf(1,'5- Graphic out: Generates the graphical output associated to the current calibration solution.\n');
36fprintf(1,' It shows the 3D locations of the grids, and reprojects the 3D patterns on the\n');
37fprintf(1,' original calibration images.\n');
38fprintf(1,'6- sol. with center: Lets the user select the calibration solution with computed principal point.\n');
39fprintf(1,' This is the default case (solution retained after Run calibration).\n');
40fprintf(1,' Automatically (re)generates the graphical output associated to that solution.\n');
41fprintf(1,'7- sol. without center: Lets the users select the calibration solution without computed principal point.\n');
42fprintf(1,' In that case, the principal point is assumed at the center of the image.\n');
43fprintf(1,' Automatically generates the graphical output associated to that solution.\n');
44fprintf(1,' This option is sometimes useful when the principal point is difficult to\n');
45fprintf(1,' estimate (in particular when the camera field of view is small).\n');
46fprintf(1,'8- Back to main: Goes back to the main calbration toolbox window.\n\n\n');
47
48end;
49
50instructions3D = 0;
51
52global X_1 x_1 X_2 x_2 X_3 x_3 X_4 x_4 X_5 x_5 X_6 x_6 X_7 x_7 X_8 x_8 X_9 x_9 X_10 x_10 X_11 x_11 X_12 x_12 X_13 x_13 X_14 x_14 X_15 x_15 X_16 x_16 X_17 x_17 X_18 x_18 X_19 x_19 X_20 x_20 X_21 x_21 X_22 x_22 X_23 x_23 X_24 x_24 X_25 x_25 X_26 x_26 X_27 x_27 X_28 x_28 X_29 x_29 X_30 x_30
53
54
55fig_number = 1;
56
57n_row = 2;
58n_col = 4;
59
60string_list = cell(n_row,n_col);
61callback_list = cell(n_row,n_col);
62
63x_size = 85;
64y_size = 20;
65
66title_figure = 'Camera calibration tool (3D rig)';
67
68string_list{1,1} = 'Image names';
69string_list{1,2} = 'Read images';
70string_list{1,3} = 'Extract grid corners';
71string_list{1,4} = 'Run calibration';
72string_list{2,1} = 'Graphic out';
73string_list{2,2} = 'sol. with center';
74string_list{2,3} = 'sol. without center';
75string_list{2,4} = 'Back to main';
76
77callback_list{1,1} = 'data_calib;';
78callback_list{1,2} = 'ima_read_calib;';
79callback_list{1,3} = 'click_calib3D;';
80callback_list{1,4} = 'go_calib_optim3D;';
81callback_list{2,1} = 'graphout_calib3D;';
82callback_list{2,2} = 'select_sol_with_center3D;';
83callback_list{2,3} = 'select_sol_no_center3D;';
84callback_list{2,4} = 'calib;';
85
86
87figure(fig_number); clf;
88pos = get(fig_number,'Position');
89
90fig_size_x = x_size*n_col+(n_col+1)*2;
91fig_size_y = y_size*n_row+(n_row+1)*2;
92
93set(fig_number,'Units','points', ...
94 'BackingStore','off', ...
95 'Color',[0.8 0.8 0.8], ...
96 'MenuBar','none', ...
97 'Resize','off', ...
98 'Name',title_figure, ...
99'Position',[pos(1) pos(2) fig_size_x fig_size_y], ...
100'NumberTitle','off');
101
102
103for i=n_row:-1:1,
104 for j = n_col:-1:1,
105 if (~isempty(callback_list{i,j}))&(~isempty(string_list{i,j})),
106 uicontrol('Parent',fig_number, ...
107 'Units','points', ...
108 'Callback',callback_list{i,j}, ...
109 'ListboxTop',0, ...
110 'Position',[(2+(j-1)*(x_size+2)) (fig_size_y - i*(2+y_size)) x_size y_size], ...
111 'String',string_list{i,j}, ...
112 'Tag','Pushbutton1');
113 end;
114 end;
115end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/calib_gui.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/calib_gui.m
new file mode 100755
index 0000000..62a45dd
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/calib_gui.m
@@ -0,0 +1,81 @@
1fig_number = 1;
2
3n_row = 5;
4n_col = 4;
5
6string_list = cell(n_row,n_col);
7callback_list = cell(n_row,n_col);
8
9x_size = 85;
10y_size = 20;
11
12title_figure = 'Camera calibration tool (2D rig)';
13
14string_list{1,1} = 'Image names';
15string_list{1,2} = 'Read images';
16string_list{1,3} = 'Extract grid corners';
17%string_list{1,4} = 'Initialization';
18string_list{1,4} = 'Calibration';
19string_list{2,1} = 'Show Extrinsic';
20string_list{2,2} = 'Reproject on images';
21string_list{2,3} = 'Analyse error';
22string_list{2,4} = 'Recomp. corners';
23string_list{3,1} = 'Add/Suppress images';
24string_list{3,2} = 'Save';
25string_list{3,3} = 'Load';
26string_list{3,4} = 'Exit';
27
28string_list{5,1} = 'Comp. Extrinsic';
29string_list{5,2} = 'Undistort image';
30
31
32callback_list{1,1} = 'data_calib;';
33callback_list{1,2} = 'ima_read_calib;';
34callback_list{1,3} = 'click_calib;';
35%callback_list{1,4} = 'init_calib_param;';
36callback_list{1,4} = 'go_calib_optim;';
37callback_list{2,1} = 'ext_calib;';
38callback_list{2,2} = 'reproject_calib;';
39callback_list{2,3} = 'analyse_error;';
40callback_list{2,4} = 'recomp_corner_calib;';
41callback_list{3,1} = 'add_suppress;';
42callback_list{3,2} = 'saving_calib;';
43callback_list{3,3} = 'loading_calib;';
44callback_list{3,4} = ['disp(''Bye. To run again, type calib_gui.''); close(' num2str(fig_number) ');'];
45
46callback_list{5,1} = 'extrinsic_computation;';
47callback_list{5,2} = 'undistort_image;';
48
49
50figure(fig_number); clf;
51pos = get(fig_number,'Position');
52
53fig_size_x = x_size*n_col+(n_col+1)*2;
54fig_size_y = y_size*n_row+(n_row+1)*2;
55
56set(fig_number,'Units','points', ...
57 'BackingStore','off', ...
58 'Color',[0.8 0.8 0.8], ...
59 'MenuBar','none', ...
60 'Resize','off', ...
61 'Name',title_figure, ...
62'Position',[pos(1) pos(2) fig_size_x fig_size_y], ...
63'NumberTitle','off'); %,'WindowButtonMotionFcn',['figure(' num2str(fig_number) ');']);
64
65
66for i=n_row:-1:1,
67 for j = n_col:-1:1,
68 if (~isempty(callback_list{i,j}))&(~isempty(string_list{i,j})),
69 uicontrol('Parent',fig_number, ...
70 'Units','points', ...
71 'Callback',callback_list{i,j}, ...
72 'ListboxTop',0, ...
73 'Position',[(2+(j-1)*(x_size+2)) (fig_size_y - i*(2+y_size)) x_size y_size], ...
74 'String',string_list{i,j}, ...
75 'Tag','Pushbutton1');
76 end;
77 end;
78end;
79
80
81clear callback_list string_list fig_number fig_size_x fig_size_y i j n_col n_row pos string_list title_figure x_size y_size
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/check_active_images.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/check_active_images.m
new file mode 100755
index 0000000..4f09b62
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/check_active_images.m
@@ -0,0 +1,14 @@
1
2if ~exist('active_images'),
3 active_images = ones(1,n_ima);
4end;
5n_act = length(active_images);
6if n_act < n_ima,
7 active_images = [active_images ones(1,n_ima-n_act)];
8else
9 if n_act > n_ima,
10 active_images = active_images(1:n_ima);
11 end;
12end;
13
14ind_active = find(active_images);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/check_convergence.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/check_convergence.m
new file mode 100755
index 0000000..8602c39
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/check_convergence.m
@@ -0,0 +1,17 @@
1%%% Replay the set of solution vectors:
2
3N_iter = size(param_list,2);
4
5for nn = 1:N_iter,
6
7 solution = param_list(:,nn);
8
9 extract_parameters;
10 comp_error_calib;
11
12 ext_calib;
13
14 drawnow;
15
16
17end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/check_planarity.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/check_planarity.m
new file mode 100755
index 0000000..be0410b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/check_planarity.m
@@ -0,0 +1,41 @@
1% Check the planarity of a structure:
2
3X = X_1;
4N = size(X,2);
5
6%X(3,:) = 0.1*randn(1,N);
7
8om = rand(3,1);
9T = 10*rand(3,1);
10R = rodrigues(om);
11
12X = R * X + T*ones(1,N);
13
14
15
16
17
18
19N = size(X,2);
20X_mean = mean(X')';
21
22Y = X - (X_mean*ones(1,N));
23
24YY = Y*Y';
25
26[U,S,V] = svd(YY);
27
28r = S(3,3)/S(2,2);
29
30% if r is less than 1e-4:
31
32R_transform = V';
33T_transform = -(V')*X_mean;
34
35
36% Thresh for r: 1e-4
37
38X_new = R_transform*X + T_transform*ones(1,N);
39
40
41% If Xc = Rc * X_new + Tc, then Xc = Rc * R_transform * X + Tc + T_transform
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_calib.m
new file mode 100755
index 0000000..047cc7b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_calib.m
@@ -0,0 +1,99 @@
1
2if ~exist('I_1'),
3 ima_read_calib;
4 if no_image_file,
5 disp('Cannot extract corners without images');
6 return;
7 end;
8end;
9
10check_active_images;
11
12%wintx = 10; % neigborhood of integration for
13%winty = 10; % the corner finder
14
15fprintf(1,'\nExtraction of the grid corners on the images\n');
16
17disp('Window size for corner finder (wintx and winty):');
18wintx = input('wintx ([] = 5) = ');
19if isempty(wintx), wintx = 5; end;
20wintx = round(wintx);
21winty = input('winty ([] = 5) = ');
22if isempty(winty), winty = 5; end;
23winty = round(winty);
24
25fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1);
26
27if ~exist('map'), map = gray(256); end;
28
29
30disp('WARNING!!! Do not forget to change dX_default and dY_default in click_calib.m!!!')
31
32
33% Default size of the pattern squares;
34
35% Setup of JY (old at Caltech)
36dX_default = 21.9250/11;
37dY_default = 18.1250/9;
38
39% Setup of JY (new at Intel)
40dX_default = 1.9750;
41dY_default = 1.9865;
42
43
44% Setup of Luis and Enrico
45dX_default = 67.7/16;
46dY_default = 50.65/12;
47
48
49% Setup of German
50dX_default = 10.16;
51dY_default = 10.16;
52
53% Setup of JY (new at Intel)
54dX_default = 1.9750*2.54;
55dY_default = 1.9865*2.54;
56
57% Setup of JY - 3D calibration rig at Intel (new at Intel)
58dX_default = 3;
59dY_default = 3;
60
61% Useful option to add images:
62kk_first = input('Start image number ([]=1=first): ');
63
64if isempty(kk_first), kk_first = 1; end;
65
66for kk = kk_first:n_ima,
67 if active_images(kk),
68 click_ima_calib;
69 else
70 eval(['dX_' num2str(kk) ' = NaN;']);
71 eval(['dY_' num2str(kk) ' = NaN;']);
72
73 eval(['wintx_' num2str(kk) ' = NaN;']);
74 eval(['winty_' num2str(kk) ' = NaN;']);
75
76 eval(['x_' num2str(kk) ' = NaN*ones(2,1);']);
77 eval(['X_' num2str(kk) ' = NaN*ones(3,1);']);
78
79 eval(['n_sq_x_' num2str(kk) ' = NaN;']);
80 eval(['n_sq_y_' num2str(kk) ' = NaN;']);
81 end;
82end;
83
84
85
86string_save = 'save calib_data active_images ind_active wintx winty n_ima type_numbering N_slots first_num image_numbers format_image calib_name Hcal Wcal nx ny map dX_default dY_default dX dY';
87
88for kk = 1:n_ima,
89 string_save = [string_save ' X_' num2str(kk) ' x_' num2str(kk) ' n_sq_x_' num2str(kk) ' n_sq_y_' num2str(kk) ' wintx_' num2str(kk) ' winty_' num2str(kk) ' dX_' num2str(kk) ' dY_' num2str(kk)];
90end;
91
92eval(string_save);
93
94disp('done');
95
96return;
97
98go_calib_optim;
99
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_calib3D.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_calib3D.m
new file mode 100755
index 0000000..e761cd1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_calib3D.m
@@ -0,0 +1,79 @@
1
2if ~exist('I_1'),
3 ima_read_calib;
4 if no_image_file,
5 disp('Cannot extract corners without images');
6 return;
7 end;
8end;
9
10%wintx = 10; % neigborhood of integration for
11%winty = 10; % the corner finder
12
13fprintf(1,'\nExtraction of the grid corners on the images\n');
14
15disp('Window size for corner finder (wintx and winty):');
16wintx = input('wintx ([] = 5) = ');
17if isempty(wintx), wintx = 5; end;
18wintx = round(wintx);
19winty = input('winty ([] = 5) = ');
20if isempty(winty), winty = 5; end;
21winty = round(winty);
22
23
24fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1);
25
26
27disp('WARNNG!!! Do not forget to change dX_default and dY_default in click_calib.m!!!')
28
29
30% Default size of the pattern squares;
31
32% Setup of JY (old at Caltech)
33dX_default = 21.9250/11;
34dY_default = 18.1250/9;
35
36% Setup of JY (new at Intel)
37dX_default = 1.9750;
38dY_default = 1.9865;
39
40
41% Setup of Luis and Enrico
42dX_default = 67.7/16;
43dY_default = 50.65/12;
44
45
46% Setup of German
47dX_default = 10.16;
48dY_default = 10.16;
49
50% Setup of JY (new at Intel)
51dX_default = 1.9750*2.54;
52dY_default = 1.9865*2.54;
53
54
55% Setup of JY - 3D calibration rig at Intel (new at Intel)
56dX_default = 3;
57dY_default = 3;
58
59% Useful option to add images:
60kk_first = input('Start image number ([]=1=first): ');
61
62if isempty(kk_first), kk_first = 1; end;
63
64for kk = kk_first:n_ima,
65 click_ima_calib3D; %Simple version
66 %init_calib; %advanced vesion (more messy)
67end;
68
69
70
71string_save = 'save calib_data wintx winty n_ima type_numbering N_slots first_num image_numbers format_image calib_name Hcal Wcal nx ny map dX_default dY_default dX dY';
72
73for kk = 1:n_ima,
74 string_save = [string_save ' X_' num2str(kk) ' x_' num2str(kk) ' Hl_' num2str(kk) ' nl_sq_x_' num2str(kk) ' nl_sq_y_' num2str(kk) ' Hr_' num2str(kk) ' nr_sq_x_' num2str(kk) ' nr_sq_y_' num2str(kk)];
75end;
76
77eval(string_save);
78
79go_calib_optim3D;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_ima_calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_ima_calib.m
new file mode 100755
index 0000000..5197870
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_ima_calib.m
@@ -0,0 +1,218 @@
1 % Cleaned-up version of init_calib.m
2
3 fprintf(1,'\nProcessing image %d...\n',kk);
4
5 eval(['I = I_' num2str(kk) ';']);
6
7 figure(2);
8 image(I);
9 colormap(map);
10
11 title(['Click on the four extreme corners of the rectangular pattern... Image ' num2str(kk)]);
12
13 disp('Click on the four extreme corners of the rectangular complete pattern...');
14
15 [x,y] = ginput3(4);
16
17 [Xc,good,bad,type] = cornerfinder([x';y'],I,winty,wintx); % the four corners
18
19 x = Xc(1,:)';
20 y = Xc(2,:)';
21
22 [y,indy] = sort(y);
23 x = x(indy);
24
25 if (x(2) > x(1)),
26 x4 = x(1);y4 = y(1); x3 = x(2); y3 = y(2);
27 else
28 x4 = x(2);y4 = y(2); x3 = x(1); y3 = y(1);
29 end;
30 if (x(3) > x(4)),
31 x2 = x(3);y2 = y(3); x1 = x(4); y1 = y(4);
32 else
33 x2 = x(4);y2 = y(4); x1 = x(3); y1 = y(3);
34 end;
35
36 x = [x1;x2;x3;x4];
37 y = [y1;y2;y3;y4];
38
39
40 figure(2); hold on;
41 plot([x;x(1)],[y;y(1)],'g-');
42 plot(x,y,'og');
43 hx=text((x(4)+x(3))/2,(y(4)+y(3))/2 - 20,'X');
44 set(hx,'color','g','Fontsize',14);
45 hy=text((x(4)+x(1))/2-20,(y(4)+y(1))/2,'Y');
46 set(hy,'color','g','Fontsize',14);
47 hold off;
48
49
50 % Try to automatically count the number of squares in the grid
51
52 n_sq_x1 = count_squares(I,x1,y1,x2,y2,wintx);
53 n_sq_x2 = count_squares(I,x3,y3,x4,y4,wintx);
54 n_sq_y1 = count_squares(I,x2,y2,x3,y3,wintx);
55 n_sq_y2 = count_squares(I,x4,y4,x1,y1,wintx);
56
57
58
59 % If could not count the number of squares, enter manually
60
61 if (n_sq_x1~=n_sq_x2)|(n_sq_y1~=n_sq_y2),
62
63
64 disp('Could not count the number of squares in the grid. Enter manually.');
65 n_sq_x = input('Number of squares along the X direction ([]=10) = '); %6
66 if isempty(n_sq_x), n_sq_x = 10; end;
67 n_sq_y = input('Number of squares along the Y direction ([]=10) = '); %6
68 if isempty(n_sq_y), n_sq_y = 10; end;
69
70 else
71
72 n_sq_x = n_sq_x1;
73 n_sq_y = n_sq_y1;
74
75 end;
76
77
78 % Enter the size of each square
79
80 dX = input(['Size dX of each square along the X direction ([]=' num2str(dX_default) 'cm) = ']);
81 dY = input(['Size dY of each square along the Y direction ([]=' num2str(dY_default) 'cm) = ']);
82 if isempty(dX), dX = dX_default; else dX_default = dX; end;
83 if isempty(dY), dY = dY_default; else dY_default = dY; end;
84
85 % Compute the inside points through computation of the planar homography (collineation)
86
87 a00 = [x(1);y(1);1];
88 a10 = [x(2);y(2);1];
89 a11 = [x(3);y(3);1];
90 a01 = [x(4);y(4);1];
91
92
93 % Compute the planar collineation: (return the normalization matrix as well)
94
95 [Homo,Hnorm,inv_Hnorm] = compute_homography ([a00 a10 a11 a01],[0 1 1 0;0 0 1 1;1 1 1 1]);
96
97
98 % Build the grid using the planar collineation:
99
100 x_l = ((0:n_sq_x)'*ones(1,n_sq_y+1))/n_sq_x;
101 y_l = (ones(n_sq_x+1,1)*(0:n_sq_y))/n_sq_y;
102 pts = [x_l(:) y_l(:) ones((n_sq_x+1)*(n_sq_y+1),1)]';
103
104 XX = Homo*pts;
105 XX = XX(1:2,:) ./ (ones(2,1)*XX(3,:));
106
107
108 % Complete size of the rectangle
109
110 W = n_sq_x*dX;
111 L = n_sq_y*dY;
112
113
114
115
116 %%%%%%%%%%%%%%%%%%%%%%%% ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
117 figure(2);
118 hold on;
119 plot(XX(1,:),XX(2,:),'r+');
120 title('The red crosses should be close to the image corners');
121 hold off;
122
123 disp('If the guessed grid corners (red crosses on the image) are not close to the actual corners,');
124 disp('it is necessary to enter an initial guess for the radial distortion factor kc (useful for subpixel detection)');
125 quest_distort = input('Need of an initial guess for distortion? ([]=no, other=yes) ');
126
127 quest_distort = ~isempty(quest_distort);
128
129 if quest_distort,
130 % Estimation of focal length:
131 c_g = [size(I,2);size(I,1)]/2 + .5;
132 f_g = Distor2Calib(0,[[x(1) x(2) x(4) x(3)] - c_g(1);[y(1) y(2) y(4) y(3)] - c_g(2)],1,1,4,W,L,[-W/2 W/2 W/2 -W/2;L/2 L/2 -L/2 -L/2; 0 0 0 0],100,1,1);
133 f_g = mean(f_g);
134 script_fit_distortion;
135 end;
136 %%%%%%%%%%%%%%%%%%%%% END ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
137
138
139
140
141
142 Np = (n_sq_x+1)*(n_sq_y+1);
143
144 disp('Corner extraction...');
145
146 grid_pts = cornerfinder(XX,I,winty,wintx); %%% Finds the exact corners at every points!
147
148
149
150 %save all_corners x y grid_pts
151
152 grid_pts = grid_pts - 1; % subtract 1 to bring the origin to (0,0) instead of (1,1) in matlab (not necessary in C)
153
154
155 % Global Homography from plane to pixel coordinates:
156
157
158
159
160 ind_corners = [1 n_sq_x+1 (n_sq_x+1)*n_sq_y+1 (n_sq_x+1)*(n_sq_y+1)]; % index of the 4 corners
161 ind_orig = (n_sq_x+1)*n_sq_y + 1;
162 xorig = grid_pts(1,ind_orig);
163 yorig = grid_pts(2,ind_orig);
164 dxpos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig+1)]');
165 dypos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig-n_sq_x-1)]');
166
167
168 x_box_kk = [grid_pts(1,:)-(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)-(wintx+.5);grid_pts(1,:)-(wintx+.5)];
169 y_box_kk = [grid_pts(2,:)-(winty+.5);grid_pts(2,:)-(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)-(winty+.5)];
170
171
172 figure(3);
173 image(I); colormap(map); hold on;
174 plot(grid_pts(1,:)+1,grid_pts(2,:)+1,'r+');
175 plot(x_box_kk+1,y_box_kk+1,'-b');
176 plot(grid_pts(1,ind_corners)+1,grid_pts(2,ind_corners)+1,'mo');
177 plot(xorig+1,yorig+1,'*m');
178 h = text(xorig-15,yorig-15,'O');
179 set(h,'Color','m','FontSize',14);
180 h2 = text(dxpos(1)-10,dxpos(2)-10,'dX');
181 set(h2,'Color','g','FontSize',14);
182 h3 = text(dypos(1)-25,dypos(2)-3,'dY');
183 set(h3,'Color','g','FontSize',14);
184 xlabel('Xc (in camera frame)');
185 ylabel('Yc (in camera frame)');
186 title('Extracted corners');
187 zoom on;
188 drawnow;
189 hold off;
190
191
192 Xi = reshape(([0:n_sq_x]*dX)'*ones(1,n_sq_y+1),Np,1)';
193 Yi = reshape(ones(n_sq_x+1,1)*[n_sq_y:-1:0]*dY,Np,1)';
194 Zi = zeros(1,Np);
195
196 Xgrid = [Xi;Yi;Zi];
197
198
199 % All the point coordinates (on the image, and in 3D) - for global optimization:
200
201 x = grid_pts;
202 X = Xgrid;
203
204
205 % Saves all the data into variables:
206
207 eval(['dX_' num2str(kk) ' = dX;']);
208 eval(['dY_' num2str(kk) ' = dY;']);
209
210 eval(['wintx_' num2str(kk) ' = wintx;']);
211 eval(['winty_' num2str(kk) ' = winty;']);
212
213 eval(['x_' num2str(kk) ' = x;']);
214 eval(['X_' num2str(kk) ' = X;']);
215
216 eval(['n_sq_x_' num2str(kk) ' = n_sq_x;']);
217 eval(['n_sq_y_' num2str(kk) ' = n_sq_y;']);
218 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_ima_calib3D.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_ima_calib3D.m
new file mode 100755
index 0000000..7718268
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/click_ima_calib3D.m
@@ -0,0 +1,482 @@
1 % Cleaned-up version of init_calib.m
2
3 eval(['I = I_' num2str(kk) ';']);
4
5 figure(2);
6 image(I);
7 colormap(map);
8
9
10
11
12
13 %%%%%%%%%%%%%%%%%%%%%%%%% LEFT PATTERN ACQUISITION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
14
15
16
17 title(['Click on the four extreme corners of the left rectangular pattern... Image ' num2str(kk)]);
18
19 disp('Click on the four extreme corners of the left rectangular pattern...');
20
21 [x,y] = ginput3(4);
22
23 [Xc,good,bad,type] = cornerfinder([x';y'],I,winty,wintx); % the four corners
24
25 x = Xc(1,:)';
26 y = Xc(2,:)';
27
28 [y,indy] = sort(y);
29 x = x(indy);
30
31 if (x(2) > x(1)),
32 x4 = x(1);y4 = y(1); x3 = x(2); y3 = y(2);
33 else
34 x4 = x(2);y4 = y(2); x3 = x(1); y3 = y(1);
35 end;
36 if (x(3) > x(4)),
37 x2 = x(3);y2 = y(3); x1 = x(4); y1 = y(4);
38 else
39 x2 = x(4);y2 = y(4); x1 = x(3); y1 = y(3);
40 end;
41
42 x = [x1;x2;x3;x4];
43 y = [y1;y2;y3;y4];
44
45
46 figure(2); hold on;
47 plot([x;x(1)],[y;y(1)],'g-');
48 plot(x,y,'og');
49 hx=text((x(4)+x(3))/2,(y(4)+y(3))/2 - 20,'X');
50 set(hx,'color','g','Fontsize',14);
51 hy=text((x(4)+x(1))/2-20,(y(4)+y(1))/2,'Y');
52 set(hy,'color','g','Fontsize',14);
53 hold off;
54
55 drawnow;
56
57
58 % Try to automatically count the number of squares in the grid
59
60 n_sq_x1 = count_squares(I,x1,y1,x2,y2,wintx);
61 n_sq_x2 = count_squares(I,x3,y3,x4,y4,wintx);
62 n_sq_y1 = count_squares(I,x2,y2,x3,y3,wintx);
63 n_sq_y2 = count_squares(I,x4,y4,x1,y1,wintx);
64
65
66
67 % If could not count the number of squares, enter manually
68
69 if (n_sq_x1~=n_sq_x2)|(n_sq_y1~=n_sq_y2),
70
71
72 disp('Could not count the number of squares in the grid. Enter manually.');
73 n_sq_x = input('Number of squares along the X direction ([]=10) = '); %6
74 if isempty(n_sq_x), n_sq_x = 10; end;
75 n_sq_y = input('Number of squares along the Y direction ([]=10) = '); %6
76 if isempty(n_sq_y), n_sq_y = 10; end;
77
78 else
79
80 n_sq_x = n_sq_x1;
81 n_sq_y = n_sq_y1;
82
83 end;
84
85
86 if 1,
87 % Enter the size of each square
88
89 dX = input(['Size dX of each square along the X direction ([]=' num2str(dX_default) 'cm) = ']);
90 dY = input(['Size dY of each square along the Y direction ([]=' num2str(dY_default) 'cm) = ']);
91 if isempty(dX), dX = dX_default; else dX_default = dX; end;
92 if isempty(dY), dY = dY_default; else dY_default = dY; end;
93
94 else
95
96 dX = 3;
97 dY = 3;
98
99 end;
100
101
102 % Compute the inside points through computation of the planar homography (collineation)
103
104 a00 = [x(1);y(1);1];
105 a10 = [x(2);y(2);1];
106 a11 = [x(3);y(3);1];
107 a01 = [x(4);y(4);1];
108
109
110 % Compute the planart collineation: (return the normalization matrice as well)
111
112 [Homo,Hnorm,inv_Hnorm] = compute_collineation (a00, a10, a11, a01);
113
114
115 % Build the grid using the planar collineation:
116
117 x_l = ((0:n_sq_x)'*ones(1,n_sq_y+1))/n_sq_x;
118 y_l = (ones(n_sq_x+1,1)*(0:n_sq_y))/n_sq_y;
119 pts = [x_l(:) y_l(:) ones((n_sq_x+1)*(n_sq_y+1),1)]';
120
121 XX = Homo*pts;
122 XX = XX(1:2,:) ./ (ones(2,1)*XX(3,:));
123
124
125 % Complete size of the rectangle
126
127 W = n_sq_x*dX;
128 L = n_sq_y*dY;
129
130
131
132 if 1,
133 %%%%%%%%%%%%%%%%%%%%%%%% ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
134 figure(2);
135 hold on;
136 plot(XX(1,:),XX(2,:),'r+');
137 title('The red crosses should be close to the image corners');
138 hold off;
139
140 disp('If the guessed grid corners (red crosses on the image) are not close to the actual corners,');
141 disp('it is necessary to enter an initial guess for the radial distortion factor kc (useful for subpixel detection)');
142 quest_distort = input('Need of an initial guess for distortion? ([]=no, other=yes) ');
143
144 quest_distort = ~isempty(quest_distort);
145
146 if quest_distort,
147 % Estimation of focal length:
148 c_g = [size(I,2);size(I,1)]/2 + .5;
149 f_g = Distor2Calib(0,[[x(1) x(2) x(4) x(3)] - c_g(1);[y(1) y(2) y(4) y(3)] - c_g(2)],1,1,4,W,L,[-W/2 W/2 W/2 -W/2;L/2 L/2 -L/2 -L/2; 0 0 0 0],100,1,1);
150 f_g = mean(f_g);
151 script_fit_distortion;
152 end;
153 %%%%%%%%%%%%%%%%%%%%% END ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
154 end;
155
156
157 Np = (n_sq_x+1)*(n_sq_y+1);
158
159 disp('Corner extraction...');
160
161 grid_pts = cornerfinder(XX,I,winty,wintx); %%% Finds the exact corners at every points!
162
163 %save all_corners x y grid_pts
164
165 grid_pts = grid_pts - 1; % subtract 1 to bring the origin to (0,0) instead of (1,1) in matlab (not necessary in C)
166
167
168 % Global Homography from plane to pixel coordinates:
169
170 H_total = [1 0 -1 ; 0 1 -1 ; 0 0 1]*Homo*[1 0 0;0 -1 1;0 0 1]*[1/W 0 0 ; 0 1/L 0; 0 0 1];
171 % WARNING!!! the first matrix (on the left side) takes care of the transformation of the pixel cooredinates by -1 (previous line)
172 % If it is not done, then this matrix should not appear (in C)
173 H_total = H_total / H_total(3,3);
174
175
176 ind_corners = [1 n_sq_x+1 (n_sq_x+1)*n_sq_y+1 (n_sq_x+1)*(n_sq_y+1)]; % index of the 4 corners
177 ind_orig = (n_sq_x+1)*n_sq_y + 1;
178 xorig = grid_pts(1,ind_orig);
179 yorig = grid_pts(2,ind_orig);
180 dxpos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig+1)]');
181 dypos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig-n_sq_x-1)]');
182
183
184 x_box_kk = [grid_pts(1,:)-(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)-(wintx+.5);grid_pts(1,:)-(wintx+.5)];
185 y_box_kk = [grid_pts(2,:)-(winty+.5);grid_pts(2,:)-(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)-(winty+.5)];
186
187
188 figure(3);
189 image(I); colormap(map); hold on;
190 plot(grid_pts(1,:)+1,grid_pts(2,:)+1,'r+');
191 plot(x_box_kk+1,y_box_kk+1,'-b');
192 plot(grid_pts(1,ind_corners)+1,grid_pts(2,ind_corners)+1,'mo');
193 plot(xorig+1,yorig+1,'*m');
194 h = text(xorig-15,yorig-15,'O');
195 set(h,'Color','m','FontSize',14);
196 h2 = text(dxpos(1)-10,dxpos(2)-10,'dX');
197 set(h2,'Color','g','FontSize',14);
198 h3 = text(dypos(1)-25,dypos(2)-3,'dY');
199 set(h3,'Color','g','FontSize',14);
200 xlabel('Xc (in camera frame)');
201 ylabel('Yc (in camera frame)');
202 title('Extracted corners');
203 zoom on;
204 drawnow;
205 hold off;
206
207
208 Xi = reshape(([0:n_sq_x]*dX)'*ones(1,n_sq_y+1),Np,1)';
209 Yi = reshape(ones(n_sq_x+1,1)*[n_sq_y:-1:0]*dY,Np,1)';
210 Zi = zeros(1,Np);
211
212 Xgrid = [Xi;Yi;Zi];
213
214
215 % All the point coordinates (on the image, and in 3D) - for global optimization:
216
217 x = grid_pts;
218 X = Xgrid;
219
220
221 % The left pannel info:
222
223 xl = x;
224 Xl = X;
225 nl_sq_x = n_sq_x;
226 nl_sq_y = n_sq_y;
227 Hl = H_total;
228
229
230
231
232
233
234 %%%%%%%%%%%%%%%%%%%%%%%%% RIGHT PATTERN ACQUISITION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
235
236
237 x1 = a10(1)/a10(3);
238 x4 = a11(1)/a11(3);
239
240 y1 = a10(2)/a10(3);
241 y4 = a11(2)/a11(3);
242
243
244 figure(2);
245 hold on;
246 plot([x1 x4],[y1 y4],'c-');
247 plot([x1 x4],[y1 y4],'co');
248 hold off;
249
250 title(['Click on the two remaining extreme corners of the right rectangular pattern... Image ' num2str(kk)]);
251
252 disp('Click on the two remaining extreme corners of the right rectangular pattern...');
253
254 [x,y] = ginput3(2);
255
256 [Xc,good,bad,type] = cornerfinder([x';y'],I,winty,wintx); % the four corners
257
258 x = Xc(1,:)';
259 y = Xc(2,:)';
260
261 [y,indy] = sort(y);
262 x = x(indy);
263
264 x2 = x(2);
265 x3 = x(1);
266
267 y2 = y(2);
268 y3 = y(1);
269
270
271 x = [x1;x2;x3;x4];
272 y = [y1;y2;y3;y4];
273
274 figure(2); hold on;
275 plot([x;x(1)],[y;y(1)],'c-');
276 plot(x,y,'oc');
277 hx=text((x(4)+x(3))/2,(y(4)+y(3))/2 - 20,'X');
278 set(hx,'color','c','Fontsize',14);
279 hy=text((x(4)+x(1))/2-20,(y(4)+y(1))/2,'Y');
280 set(hy,'color','c','Fontsize',14);
281 hold off;
282 drawnow;
283
284
285 % Try to automatically count the number of squares in the grid
286
287 n_sq_x1 = count_squares(I,x1,y1,x2,y2,wintx);
288 n_sq_x2 = count_squares(I,x3,y3,x4,y4,wintx);
289 n_sq_y1 = count_squares(I,x2,y2,x3,y3,wintx);
290 n_sq_y2 = count_squares(I,x4,y4,x1,y1,wintx);
291
292
293
294 % If could not count the number of squares, enter manually
295
296 if (n_sq_x1~=n_sq_x2)|(n_sq_y1~=n_sq_y2),
297
298
299 disp('Could not count the number of squares in the grid. Enter manually.');
300 n_sq_x = input('Number of squares along the X direction ([]=10) = '); %6
301 if isempty(n_sq_x), n_sq_x = 10; end;
302 n_sq_y = input('Number of squares along the Y direction ([]=10) = '); %6
303 if isempty(n_sq_y), n_sq_y = 10; end;
304
305 else
306
307 n_sq_x = n_sq_x1;
308 n_sq_y = n_sq_y1;
309
310 end;
311
312
313 if 1,
314 % Enter the size of each square
315
316 dX = input(['Size dX of each square along the X direction ([]=' num2str(dX_default) 'cm) = ']);
317 dY = input(['Size dY of each square along the Y direction ([]=' num2str(dY_default) 'cm) = ']);
318 if isempty(dX), dX = dX_default; else dX_default = dX; end;
319 if isempty(dY), dY = dY_default; else dY_default = dY; end;
320
321 else
322
323 dX = 3;
324 dY = 3;
325
326 end;
327
328
329 % Compute the inside points through computation of the planar homography (collineation)
330
331 a00 = [x(1);y(1);1];
332 a10 = [x(2);y(2);1];
333 a11 = [x(3);y(3);1];
334 a01 = [x(4);y(4);1];
335
336
337 % Compute the planart collineation: (return the normalization matrice as well)
338
339 [Homo,Hnorm,inv_Hnorm] = compute_collineation (a00, a10, a11, a01);
340
341
342 % Build the grid using the planar collineation:
343
344 x_l = ((0:n_sq_x)'*ones(1,n_sq_y+1))/n_sq_x;
345 y_l = (ones(n_sq_x+1,1)*(0:n_sq_y))/n_sq_y;
346 pts = [x_l(:) y_l(:) ones((n_sq_x+1)*(n_sq_y+1),1)]';
347
348 XX = Homo*pts;
349 XX = XX(1:2,:) ./ (ones(2,1)*XX(3,:));
350
351
352 % Complete size of the rectangle
353
354 W = n_sq_x*dX;
355 L = n_sq_y*dY;
356
357
358
359 if 1,
360 %%%%%%%%%%%%%%%%%%%%%%%% ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
361 figure(2);
362 hold on;
363 plot(XX(1,:),XX(2,:),'r+');
364 title('The red crosses should be close to the image corners');
365 hold off;
366
367 disp('If the guessed grid corners (red crosses on the image) are not close to the actual corners,');
368 disp('it is necessary to enter an initial guess for the radial distortion factor kc (useful for subpixel detection)');
369 quest_distort = input('Need of an initial guess for distortion? ([]=no, other=yes) ');
370
371 quest_distort = ~isempty(quest_distort);
372
373 if quest_distort,
374 % Estimation of focal length:
375 c_g = [size(I,2);size(I,1)]/2 + .5;
376 f_g = Distor2Calib(0,[[x(1) x(2) x(4) x(3)] - c_g(1);[y(1) y(2) y(4) y(3)] - c_g(2)],1,1,4,W,L,[-W/2 W/2 W/2 -W/2;L/2 L/2 -L/2 -L/2; 0 0 0 0],100,1,1);
377 f_g = mean(f_g);
378 script_fit_distortion;
379 end;
380 %%%%%%%%%%%%%%%%%%%%% END ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
381 end;
382
383
384 Np = (n_sq_x+1)*(n_sq_y+1);
385
386 disp('Corner extraction...');
387
388 grid_pts = cornerfinder(XX,I,winty,wintx); %%% Finds the exact corners at every points!
389
390 %save all_corners x y grid_pts
391
392 grid_pts = grid_pts - 1; % subtract 1 to bring the origin to (0,0) instead of (1,1) in matlab (not necessary in C)
393
394
395 % Global Homography from plane to pixel coordinates:
396
397 H_total = [1 0 -1 ; 0 1 -1 ; 0 0 1]*Homo*[1 0 0;0 -1 1;0 0 1]*[1/W 0 0 ; 0 1/L 0; 0 0 1];
398 % WARNING!!! the first matrix (on the left side) takes care of the transformation of the pixel cooredinates by -1 (previous line)
399 % If it is not done, then this matrix should not appear (in C)
400 H_total = H_total / H_total(3,3);
401
402
403 ind_corners = [1 n_sq_x+1 (n_sq_x+1)*n_sq_y+1 (n_sq_x+1)*(n_sq_y+1)]; % index of the 4 corners
404 ind_orig = (n_sq_x+1)*n_sq_y + 1;
405 xorig = grid_pts(1,ind_orig);
406 yorig = grid_pts(2,ind_orig);
407 dxpos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig+1)]');
408 dypos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig-n_sq_x-1)]');
409
410
411 x_box_kk = [grid_pts(1,:)-(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)-(wintx+.5);grid_pts(1,:)-(wintx+.5)];
412 y_box_kk = [grid_pts(2,:)-(winty+.5);grid_pts(2,:)-(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)-(winty+.5)];
413
414
415 figure(3);
416 hold on;
417 plot(grid_pts(1,:)+1,grid_pts(2,:)+1,'r+');
418 plot(x_box_kk+1,y_box_kk+1,'-b');
419 plot(grid_pts(1,ind_corners)+1,grid_pts(2,ind_corners)+1,'mo');
420 plot(xorig+1,yorig+1,'*m');
421 h = text(xorig-15,yorig-15,'O');
422 set(h,'Color','m','FontSize',14);
423 h2 = text(dxpos(1)-10,dxpos(2)-10,'dX');
424 set(h2,'Color','g','FontSize',14);
425 h3 = text(dypos(1)-25,dypos(2)-3,'dY');
426 set(h3,'Color','g','FontSize',14);
427 xlabel('Xc (in camera frame)');
428 ylabel('Yc (in camera frame)');
429 title('Extracted corners');
430 zoom on;
431 drawnow;
432 hold off;
433
434
435 Xi = reshape(([0:n_sq_x]*dX)'*ones(1,n_sq_y+1),Np,1)';
436 Yi = reshape(ones(n_sq_x+1,1)*[n_sq_y:-1:0]*dY,Np,1)';
437 Zi = zeros(1,Np);
438
439 Xgrid = [Xi;Yi;Zi];
440
441
442 % All the point coordinates (on the image, and in 3D) - for global optimization:
443
444 x = grid_pts;
445 X = Xgrid;
446
447
448 % The right pannel info:
449
450 xr = x;
451 Xr = X;
452 nr_sq_x = n_sq_x;
453 nr_sq_y = n_sq_y;
454 Hr = H_total;
455
456
457
458%%%%%%%% REGROUP THE LEFT AND RIHT PATTERNS %%%%%%%%%%%%%
459
460
461Xr2 = [0 0 1;0 1 0;-1 0 0]*Xr + [dX*nl_sq_x;0;0]*ones(1,length(Xr));
462
463
464x = [xl xr];
465
466X = [Xl Xr2];
467
468
469
470 eval(['x_' num2str(kk) ' = x;']);
471 eval(['X_' num2str(kk) ' = X;']);
472
473 eval(['nl_sq_x_' num2str(kk) ' = nl_sq_x;']);
474 eval(['nl_sq_y_' num2str(kk) ' = nl_sq_y;']);
475
476 eval(['nr_sq_x_' num2str(kk) ' = nr_sq_x;']);
477 eval(['nr_sq_y_' num2str(kk) ' = nr_sq_y;']);
478
479 % Save the global planar homography:
480
481 eval(['Hl_' num2str(kk) ' = Hl;']);
482 eval(['Hr_' num2str(kk) ' = Hr;']); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_distortion.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_distortion.m
new file mode 100755
index 0000000..a0f03de
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_distortion.m
@@ -0,0 +1,38 @@
1function [x_comp] = comp_distortion(x_dist,k2);
2
3% [x_comp] = comp_distortion(x_dist,k2);
4%
5% compensates the radial distortion of the camera
6% on the image plane.
7%
8% x_dist : the image points got without considering the
9% radial distortion.
10% x : The image plane points after correction for the distortion
11%
12% x and x_dist are 2xN arrays
13%
14% NOTE : This compensation has to be done after the substraction
15% of the center of projection, and division by the focal
16% length.
17%
18% (do it up to a second order approximation)
19
20[two,N] = size(x_dist);
21
22if (two ~= 2 ),
23 error('ERROR : The dimension of the points should be 2xN');
24end;
25
26if length(k2) > 2,
27 [x_comp] = comp_distortion_oulu(x_dist,k2);
28else
29
30radius_2= x_dist(1,:).^2 + x_dist(2,:).^2;
31radial_distortion = 1 + ones(2,1)*(k2 * radius_2);
32radius_2_comp = (x_dist(1,:).^2 + x_dist(2,:).^2) ./ radial_distortion(1,:);
33radial_distortion = 1 + ones(2,1)*(k2 * radius_2_comp);
34x_comp = x_dist ./ radial_distortion;
35
36end;
37
38%% Function completely checked : It works fine !!! \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_distortion2.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_distortion2.m
new file mode 100755
index 0000000..532ee9a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_distortion2.m
@@ -0,0 +1,71 @@
1function [x_comp] = comp_distortion(x_dist,k2);
2
3% [x_comp] = comp_distortion(x_dist,k2);
4%
5% compensates the radial distortion of the camera
6% on the image plane.
7%
8% x_dist : the image points got without considering the
9% radial distortion.
10% k2: Radial distortion factor
11%
12% x : The image plane points after correction for the distortion
13%
14% x and x_dist are 2xN arrays
15%
16% NOTE : This compensation has to be done after the substraction
17% of the center of projection, and division by the focal
18% length.
19%
20% Solve for cubic roots using method from Numerical Recipes in C 2nd Ed.
21% pages 184-185.
22
23
24% California Institute of Technology
25% (c) Jean-Yves Bouguet - April 27th, 1998
26
27% fully checked! JYB, april 27th, 1998 - 2am
28
29if k2 ~= 0,
30
31[two,N] = size(x_dist);
32
33if (two ~= 2 ),
34 error('ERROR : The dimension of the points should be 2xN');
35end;
36
37
38ph = atan2(x_dist(2,:),x_dist(1,:));
39
40Q = -1/(3*k2);
41R = -x_dist(1,:)./(2*k2*cos(ph));
42
43R2 = R.^2;
44Q3 = Q^3;
45
46
47if k2 < 0,
48
49 % this works in all practical situations (it starts failing for very large
50 % values of k2)
51
52 th = acos(R./sqrt(Q3));
53 r = -2*sqrt(Q)*cos((th-2*pi)/3);
54
55else
56
57 % note: this always works, even for ridiculous values of k2
58
59 A = (sqrt(R2-Q3)-R).^(1/3);
60 B = Q*(1./A);
61 r = (A+B);
62
63end;
64
65x_comp = [r.*cos(ph); r.*sin(ph)];
66
67else
68
69 x_comp = x_dist;
70
71end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_distortion_oulu.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_distortion_oulu.m
new file mode 100755
index 0000000..67d02d5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_distortion_oulu.m
@@ -0,0 +1,47 @@
1function [x] = comp_distortion_oulu(xd,k);
2
3%comp_distortion_oulu.m
4%
5%[x] = comp_distortion_oulu(xd,k)
6%
7%Compensates for radial and tangential distortion. Model From Oulu university.
8%For more informatino about the distortion model, check the forward projection mapping function:
9%project_points.m
10%
11%INPUT: xd: distorted (normalized) point coordinates in the image plane (2xN matrix)
12% k: Distortion coefficients (radial and tangential) (4x1 vector)
13%
14%OUTPUT: x: undistorted (normalized) point coordinates in the image plane (2xN matrix)
15%
16%Method: Iterative method for compensation.
17%
18%NOTE: This compensation has to be done after the subtraction
19% of the principal point, and division by the focal length.
20
21
22if length(k) < 4,
23
24 [x] = comp_distortion(xd,k);
25
26else
27
28
29 k1 = k(1);
30 k2 = k(2);
31 p1 = k(3);
32 p2 = k(4);
33
34 x = xd; % initial guess
35
36 for kk=1:5;
37
38 r_2 = sum(x.^2);
39 k_radial = 1 + k1 * r_2 + k2 * r_2.^2;
40 delta_x = [2*p1*x(1,:).*x(2,:) + p2*(r_2 + 2*x(1,:).^2) ;
41 p1 * (r_2 + 2*x(2,:).^2)+2*p2*x(1,:).*x(2,:)];
42 x = (xd - delta_x)./(ones(2,1)*k_radial);
43
44 end;
45
46end;
47
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_error_calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_error_calib.m
new file mode 100755
index 0000000..f8d6fde
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/comp_error_calib.m
@@ -0,0 +1,40 @@
1%%%%%%%%%%%%%%%%%%%% RECOMPUTES THE REPROJECTION ERROR %%%%%%%%%%%%%%%%%%%%%%%%
2
3check_active_images;
4
5% Reproject the patterns on the images, and compute the pixel errors:
6
7ex = []; % Global error vector
8x = []; % Detected corners on the image plane
9y = []; % Reprojected points
10
11for kk = 1:n_ima,
12
13 eval(['omckk = omc_' num2str(kk) ';']);
14 eval(['Tckk = Tc_' num2str(kk) ';']);
15
16 if active_images(kk) & (~isnan(omckk(1,1))),
17
18 Rkk = rodrigues(omckk);
19
20 eval(['y_' num2str(kk) ' = project2_oulu(X_' num2str(kk) ',Rkk,Tckk,fc,cc,kc);']);
21
22 eval(['ex_' num2str(kk) ' = x_' num2str(kk) ' -y_' num2str(kk) ';']);
23
24 eval(['x_kk = x_' num2str(kk) ';']);
25
26 eval(['ex = [ex ex_' num2str(kk) '];']);
27 eval(['x = [x x_' num2str(kk) '];']);
28 eval(['y = [y y_' num2str(kk) '];']);
29
30 else
31
32 eval(['y_' num2str(kk) ' = NaN*ones(2,1);']);
33
34 eval(['ex_' num2str(kk) ' = NaN*ones(2,1);']);
35
36 end;
37
38end;
39
40err_std = std(ex')';
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_collineation.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_collineation.m
new file mode 100755
index 0000000..809c309
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_collineation.m
@@ -0,0 +1,66 @@
1function [H,Hnorm,inv_Hnorm] = compute_collineation (a00, a10, a11, a01);
2
3% new formalism using homographies
4
5a00 = a00 / a00(3);
6a10 = a10 / a10(3);
7a11 = a11 / a11(3);
8a01 = a01 / a01(3);
9
10
11% Prenormalization of point coordinates (very important):
12% (Affine normalization)
13
14ax = [a00(1);a10(1);a11(1);a01(1)];
15ay = [a00(2);a10(2);a11(2);a01(2)];
16
17mxx = mean(ax);
18myy = mean(ay);
19ax = ax - mxx;
20ay = ay - myy;
21
22scxx = mean(abs(ax));
23scyy = mean(abs(ay));
24
25
26Hnorm = [1/scxx 0 -mxx/scxx;0 1/scyy -myy/scyy;0 0 1];
27inv_Hnorm = [scxx 0 mxx ; 0 scyy myy; 0 0 1];
28
29
30a00n = Hnorm*a00;
31a10n = Hnorm*a10;
32a11n = Hnorm*a11;
33a01n = Hnorm*a01;
34
35
36% Computation of the vanishing points:
37
38V1n = cross(cross(a00n,a10n),cross(a01n,a11n));
39V2n = cross(cross(a00n,a01n),cross(a10n,a11n));
40
41V1 = inv_Hnorm*V1n;
42V2 = inv_Hnorm*V2n;
43
44
45% Normalizaion of the vanishing points:
46
47V1n = V1n/norm(V1n);
48V2n = V2n/norm(V2n);
49
50
51% Closed-form solution of the coefficients:
52
53alpha_x = (a10n(2)*a00n(1) - a10n(1)*a00n(2))/(V1n(2)*a10n(1)-V1n(1)*a10n(2));
54
55alpha_y = (a01n(2)*a00n(1) - a01n(1)*a00n(2))/(V2n(2)*a01n(1)-V2n(1)*a01n(2));
56
57
58% Remaining Homography
59
60Hrem = [alpha_x*V1n alpha_y*V2n a00n];
61
62
63% Final homography:
64
65H = inv_Hnorm*Hrem;
66
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_extrinsic.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_extrinsic.m
new file mode 100755
index 0000000..4b4d7dd
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_extrinsic.m
@@ -0,0 +1,123 @@
1function [omckk,Tckk,Rckk,H,x,ex,JJ] = compute_extrinsic(x_kk,X_kk,fc,cc,kc,MaxIter,thresh_cond),
2
3%compute_extrinsic
4%
5%[omckk,Tckk,Rckk,H,x,ex] = compute_extrinsic(x_kk,X_kk,fc,cc,kc,refine)
6%
7%Computes the extrinsic parameters attached to a 3D structure X_kk given its projection
8%on the image plane x_kk and the intrinsic camera parameters fc, cc and kc.
9%Works with planar and non-planar structures.
10%
11%INPUT: x_kk: Feature locations on the images
12% X_kk: Corresponding grid coordinates
13% fc: Camera focal length
14% cc: Principal point coordinates
15% kc: Distortion coefficients
16% refine: set to 1 for refining the extrinsic parameters iteratively
17% [OPTIONAL: Default value: 1]
18%
19%OUTPUT: omckk: 3D rotation vector attached to the grid positions in space
20% Tckk: 3D translation vector attached to the grid positions in space
21% Rckk: 3D rotation matrices corresponding to the omc vectors
22% H: Homography between points on the grid and points on the image plane (in pixel)
23% This makes sense only if the planar that is used in planar.
24% x: Reprojections of the points on the image plane
25% ex: Reprojection error: ex = x_kk - x;
26%
27%Method: Computes the normalized point coordinates, then computes the 3D pose
28%
29%Important functions called within that program:
30%
31%normalize: Computes the normalize image point coordinates.
32%
33%pose3D: Computes the 3D pose of the structure given the normalized image projection.
34%
35%project_points.m: Computes the 2D image projections of a set of 3D points
36
37
38
39if nargin < 7,
40 thresh_cond = inf;
41end;
42
43
44if nargin < 6,
45 MaxIter = 20;
46end;
47
48
49
50if nargin < 5,
51 kc = zeros(4,1);
52 if nargin < 4,
53 cc = zeros(2,1);
54 if nargin < 3,
55 fc = ones(2,1);
56 if nargin < 2,
57 error('Need 2D projections and 3D points (in compute_extrinsic.m)');
58 return;
59 end;
60 end;
61 end;
62end;
63
64
65% Initialization:
66
67[omckk,Tckk,Rckk] = compute_extrinsic_init(x_kk,X_kk,fc,cc,kc);
68
69% Refinement:
70
71[omckk,Tckk,Rckk,JJ] = compute_extrinsic_refine(omckk,Tckk,x_kk,X_kk,fc,cc,kc,MaxIter,thresh_cond);
72
73
74% computation of the homography (not useful in the end)
75
76H = [Rckk(:,1:2) Tckk];
77
78% Computes the reprojection error in pixels:
79
80x = project_points(X_kk,omckk,Tckk,fc,cc,kc);
81
82ex = x_kk - x;
83
84
85% Converts the homography in pixel units:
86
87KK = [fc(1) 0 cc(1);0 fc(2) cc(2); 0 0 1];
88
89H = KK*H;
90
91
92
93
94return;
95
96
97% Test of compte extrinsic:
98
99Np = 4;
100sx = 10;
101sy = 10;
102sz = 5;
103
104om = randn(3,1);
105T = [0;0;100];
106
107noise = 2/1000;
108
109XX = [sx*randn(1,Np);sy*randn(1,Np);sz*randn(1,Np)];
110xx = project_points(XX,om,T);
111
112xxn = xx + noise * randn(2,Np);
113
114[omckk,Tckk] = compute_extrinsic(xxn,XX);
115
116[om omckk om-omckk]
117[T Tckk T-Tckk]
118
119figure(3);
120plot(xx(1,:),xx(2,:),'r+');
121hold on;
122plot(xxn(1,:),xxn(2,:),'g+');
123hold off;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_extrinsic_init.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_extrinsic_init.m
new file mode 100755
index 0000000..207ea30
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_extrinsic_init.m
@@ -0,0 +1,149 @@
1function [omckk,Tckk,Rckk] = compute_extrinsic_init(x_kk,X_kk,fc,cc,kc),
2
3%compute_extrinsic
4%
5%[omckk,Tckk,Rckk] = compute_extrinsic_init(x_kk,X_kk,fc,cc,kc)
6%
7%Computes the extrinsic parameters attached to a 3D structure X_kk given its projection
8%on the image plane x_kk and the intrinsic camera parameters fc, cc and kc.
9%Works with planar and non-planar structures.
10%
11%INPUT: x_kk: Feature locations on the images
12% X_kk: Corresponding grid coordinates
13% fc: Camera focal length
14% cc: Principal point coordinates
15% kc: Distortion coefficients
16%
17%OUTPUT: omckk: 3D rotation vector attached to the grid positions in space
18% Tckk: 3D translation vector attached to the grid positions in space
19% Rckk: 3D rotation matrices corresponding to the omc vectors
20%
21%Method: Computes the normalized point coordinates, then computes the 3D pose
22%
23%Important functions called within that program:
24%
25%normalize: Computes the normalize image point coordinates.
26%
27%pose3D: Computes the 3D pose of the structure given the normalized image projection.
28%
29%project_points.m: Computes the 2D image projections of a set of 3D points
30
31
32
33
34if nargin < 5,
35 kc = zeros(4,1);
36 if nargin < 4,
37 cc = zeros(2,1);
38 if nargin < 3,
39 fc = ones(2,1);
40 if nargin < 2,
41 error('Need 2D projections and 3D points (in compute_extrinsic.m)');
42 return;
43 end;
44 end;
45 end;
46end;
47
48
49
50% Compute the normalized coordinates:
51
52xn = normalize(x_kk,fc,cc,kc);
53
54
55
56Np = size(xn,2);
57
58%% Check for planarity of the structure:
59
60X_mean = mean(X_kk')';
61
62Y = X_kk - (X_mean*ones(1,Np));
63
64YY = Y*Y';
65
66[U,S,V] = svd(YY);
67
68r = S(3,3)/S(2,2);
69
70if (r < 1e-3)|(Np < 6), %1e-3, %1e-4, %norm(X_kk(3,:)) < eps, % Test of planarity
71
72 %fprintf(1,'Planar structure detected: r=%f\n',r);
73
74 % Transform the plane to bring it in the Z=0 plane:
75
76 R_transform = V';
77
78 if det(R_transform) < 0, R_transform = -R_transform; end;
79
80 T_transform = -(R_transform)*X_mean;
81
82 X_new = R_transform*X_kk + T_transform*ones(1,Np);
83
84
85 % Compute the planar homography:
86
87 H = compute_homography (xn,X_new(1:2,:));
88
89 % De-embed the motion parameters from the homography:
90
91 sc = mean([norm(H(:,1));norm(H(:,2))]);
92
93 H = H/sc;
94
95 omckk = rodrigues([H(:,1:2) cross(H(:,1),H(:,2))]);
96 Rckk = rodrigues(omckk);
97 Tckk = H(:,3);
98
99 %If Xc = Rckk * X_new + Tckk, then Xc = Rckk * R_transform * X_kk + Tckk + T_transform
100
101 Tckk = Tckk + Rckk* T_transform;
102 Rckk = Rckk * R_transform;
103
104 omckk = rodrigues(Rckk);
105 Rckk = rodrigues(omckk);
106
107
108else
109
110 %fprintf(1,'Non planar structure detected: r=%f\n',r);
111
112 % Computes an initial guess for extrinsic parameters (works for general 3d structure, not planar!!!):
113 % The DLT method is applied here!!
114
115 J = zeros(2*Np,12);
116
117 xX = (ones(3,1)*xn(1,:)).*X_kk;
118 yX = (ones(3,1)*xn(2,:)).*X_kk;
119
120 J(1:2:end,[1 4 7]) = -X_kk';
121 J(2:2:end,[2 5 8]) = X_kk';
122 J(1:2:end,[3 6 9]) = xX';
123 J(2:2:end,[3 6 9]) = -yX';
124 J(1:2:end,12) = xn(1,:)';
125 J(2:2:end,12) = -xn(2,:)';
126 J(1:2:end,10) = -ones(Np,1);
127 J(2:2:end,11) = ones(Np,1);
128
129 JJ = J'*J;
130 [U,S,V] = svd(JJ);
131
132 RR = reshape(V(1:9,12),3,3);
133
134 if det(RR) < 0,
135 V(:,12) = -V(:,12);
136 RR = -RR;
137 end;
138
139 [Ur,Sr,Vr] = svd(RR);
140
141 Rckk = Ur*Vr';
142
143 sc = norm(V(1:9,12)) / norm(Rckk(:));
144 Tckk = V(10:12,12)/sc;
145
146 omckk = rodrigues(Rckk);
147 Rckk = rodrigues(omckk);
148
149end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_extrinsic_refine.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_extrinsic_refine.m
new file mode 100755
index 0000000..69474c4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_extrinsic_refine.m
@@ -0,0 +1,110 @@
1function [omckk,Tckk,Rckk,JJ] = compute_extrinsic_refine(omc_init,Tc_init,x_kk,X_kk,fc,cc,kc,MaxIter,thresh_cond),
2
3%compute_extrinsic
4%
5%[omckk,Tckk,Rckk] = compute_extrinsic_refine(x_kk,X_kk,fc,cc,kc,MaxIter)
6%
7%Computes the extrinsic parameters attached to a 3D structure X_kk given its projection
8%on the image plane x_kk and the intrinsic camera parameters fc, cc and kc.
9%Works with planar and non-planar structures.
10%
11%INPUT: x_kk: Feature locations on the images
12% X_kk: Corresponding grid coordinates
13% fc: Camera focal length
14% cc: Principal point coordinates
15% kc: Distortion coefficients
16% MaxIter: Maximum number of iterations
17%
18%OUTPUT: omckk: 3D rotation vector attached to the grid positions in space
19% Tckk: 3D translation vector attached to the grid positions in space
20% Rckk: 3D rotation matrices corresponding to the omc vectors
21
22%
23%Method: Computes the normalized point coordinates, then computes the 3D pose
24%
25%Important functions called within that program:
26%
27%normalize: Computes the normalize image point coordinates.
28%
29%pose3D: Computes the 3D pose of the structure given the normalized image projection.
30%
31%project_points.m: Computes the 2D image projections of a set of 3D points
32
33
34if nargin < 9,
35 thresh_cond = inf;
36end;
37
38
39if nargin < 8,
40 MaxIter = 20;
41end;
42
43
44if nargin < 7,
45 kc = zeros(4,1);
46 if nargin < 6,
47 cc = zeros(2,1);
48 if nargin < 5,
49 fc = ones(2,1);
50 if nargin < 4,
51 error('Need 2D projections and 3D points (in compute_extrinsic_refine.m)');
52 return;
53 end;
54 end;
55 end;
56end;
57
58
59% Initialization:
60
61omckk = omc_init;
62Tckk = Tc_init;
63
64
65% Final optimization (minimize the reprojection error in pixel):
66% through Gradient Descent:
67
68param = [omckk;Tckk];
69
70change = 1;
71
72iter = 0;
73
74%keyboard;
75
76%fprintf(1,'Gradient descent iterations: ');
77
78while (change > 1e-10)&(iter < MaxIter),
79
80 %fprintf(1,'%d...',iter+1);
81
82 [x,dxdom,dxdT] = project_points(X_kk,omckk,Tckk,fc,cc,kc);
83
84 ex = x_kk - x;
85
86 %keyboard;
87
88 JJ = [dxdom dxdT];
89
90 if cond(JJ) > thresh_cond,
91 change = 0;
92 else
93
94 JJ2 = JJ'*JJ;
95
96 param_innov = inv(JJ2)*(JJ')*ex(:);
97 param_up = param + param_innov;
98 change = norm(param_innov)/norm(param_up);
99 param = param_up;
100 iter = iter + 1;
101
102 omckk = param(1:3);
103 Tckk = param(4:6);
104 end;
105
106end;
107
108%fprintf(1,'\n');
109
110Rckk = rodrigues(omckk);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_homography.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_homography.m
new file mode 100755
index 0000000..fcc9003
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/compute_homography.m
@@ -0,0 +1,163 @@
1function [H,Hnorm,inv_Hnorm] = compute_homography (m,M);
2
3%compute_homography
4%
5%[H,Hnorm,inv_Hnorm] = compute_homography (m,M)
6%
7%Computes the planar homography between the point coordinates on the plane (M) and the image
8%point coordinates (m).
9%
10%INPUT: m: homogeneous coordinates in the image plane (3xN matrix)
11% M: homogeneous coordinates in the plane in 3D (3xN matrix)
12%
13%OUTPUT: H: Homography matrix (3x3 homogeneous matrix)
14% Hnorm: Normlization matrix used on the points before homography computation
15% (useful for numerical stability is points in pixel coordinates)
16% inv_Hnorm: The inverse of Hnorm
17%
18%Definition: m ~ H*M where "~" means equal up to a non zero scalar factor.
19%
20%Method: First computes an initial guess for the homography through quasi-linear method.
21% Then, if the total number of points is larger than 4, optimize the solution by minimizing
22% the reprojection error (in the least squares sense).
23%
24%
25%Important functions called within that program:
26%
27%comp_distortion_oulu: Undistorts pixel coordinates.
28%
29%compute_homography.m: Computes the planar homography between points on the grid in 3D, and the image plane.
30%
31%project_points.m: Computes the 2D image projections of a set of 3D points, and also returns te Jacobian
32% matrix (derivative with respect to the intrinsic and extrinsic parameters).
33% This function is called within the minimization loop.
34
35
36
37
38Np = size(m,2);
39
40if size(m,1)<3,
41 m = [m;ones(1,Np)];
42end;
43
44if size(M,1)<3,
45 M = [M;ones(1,Np)];
46end;
47
48
49m = m ./ (ones(3,1)*m(3,:));
50M = M ./ (ones(3,1)*M(3,:));
51
52% Prenormalization of point coordinates (very important):
53% (Affine normalization)
54
55ax = m(1,:);
56ay = m(2,:);
57
58mxx = mean(ax);
59myy = mean(ay);
60ax = ax - mxx;
61ay = ay - myy;
62
63scxx = mean(abs(ax));
64scyy = mean(abs(ay));
65
66
67Hnorm = [1/scxx 0 -mxx/scxx;0 1/scyy -myy/scyy;0 0 1];
68inv_Hnorm = [scxx 0 mxx ; 0 scyy myy; 0 0 1];
69
70mn = Hnorm*m;
71
72% Compute the homography between m and mn:
73
74% Build the matrix:
75
76L = zeros(2*Np,9);
77
78L(1:2:2*Np,1:3) = M';
79L(2:2:2*Np,4:6) = M';
80L(1:2:2*Np,7:9) = -((ones(3,1)*mn(1,:)).* M)';
81L(2:2:2*Np,7:9) = -((ones(3,1)*mn(2,:)).* M)';
82
83if Np > 4,
84 L = L'*L;
85end;
86
87[U,S,V] = svd(L);
88
89hh = V(:,9);
90hh = hh/hh(9);
91
92Hrem = reshape(hh,3,3)';
93%Hrem = Hrem / Hrem(3,3);
94
95% Final homography:
96
97H = inv_Hnorm*Hrem;
98
99
100%%% Homography refinement if there are more than 4 points:
101
102if Np > 4,
103
104 % Final refinement:
105
106 hhv = reshape(H',9,1);
107 hhv = hhv(1:8);
108
109 for iter=1:10,
110
111 mrep = H * M;
112
113 J = zeros(2*Np,8);
114
115 MMM = (M ./ (ones(3,1)*mrep(3,:)));
116
117 J(1:2:2*Np,1:3) = -MMM';
118 J(2:2:2*Np,4:6) = -MMM';
119
120 mrep = mrep ./ (ones(3,1)*mrep(3,:));
121
122 m_err = m(1:2,:) - mrep(1:2,:);
123 m_err = m_err(:);
124
125 MMM2 = (ones(3,1)*mrep(1,:)) .* MMM;
126 MMM3 = (ones(3,1)*mrep(2,:)) .* MMM;
127
128 J(1:2:2*Np,7:8) = MMM2(1:2,:)';
129 J(2:2:2*Np,7:8) = MMM3(1:2,:)';
130
131 MMM = (M ./ (ones(3,1)*mrep(3,:)))';
132
133 hh_innov = inv(J'*J)*J'*m_err;
134
135 hhv_up = hhv - hh_innov;
136
137 H_up = reshape([hhv_up;1],3,3)';
138
139 %norm(m_err)
140 %norm(hh_innov)
141
142 hhv = hhv_up;
143 H = H_up;
144
145 end;
146
147end;
148
149
150
151
152
153return;
154
155%test of Jacobian
156
157mrep = H*M;
158mrep = mrep ./ (ones(3,1)*mrep(3,:));
159
160m_err = mrep(1:2,:) - m(1:2,:);
161figure(8);
162plot(m_err(1,:),m_err(2,:),'r+');
163std(m_err')
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/convert_oulu.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/convert_oulu.m
new file mode 100755
index 0000000..726806e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/convert_oulu.m
@@ -0,0 +1,35 @@
1%% Converts data file from oulu to mine:
2
3load cademo,
4n_ima = 0;
5
6no_error = 1;
7
8ii = 1;
9
10while no_error,
11
12 dataname = ['data' num2str(ii)];
13
14 if exist(dataname),
15
16 n_ima = n_ima +1;
17
18 eval(['x_' num2str(ii) '= ' dataname '(:,4:5)'';'])
19 eval(['X_' num2str(ii) '= ' dataname '(:,1:3)'';'])
20
21 else
22 no_error = 0;
23 end;
24
25 ii = ii + 1;
26
27end;
28
29nx = 500;
30ny = 500;
31
32no_image = 1;
33no_grid = 1;
34
35save data n_ima x_1 X_1 x_2 X_2 x_3 X_3 nx ny no_image no_grid
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/cornerfinder.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/cornerfinder.m
new file mode 100755
index 0000000..9bfa51f
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/cornerfinder.m
@@ -0,0 +1,215 @@
1function [xc,good,bad,type] = cornerfinder(xt,I,wintx,winty,wx2,wy2);
2
3%[xc] = cornerfinder(xt,I);
4%
5%Finds the sub-pixel corners on the image I with initial guess xt
6%xt and xc are 2xN matrices. The first component is the x coordinate
7%(horizontal) and the second component is the y coordinate (vertical)
8%
9%Based on Harris corner finder method
10%
11%Finds corners to a precision below .1 pixel!
12%Oct. 14th, 1997 - UPDATED to work with vertical and horizontal edges as well!!!
13%Sept 1998 - UPDATED to handle diverged points: we keep the original points
14%good is a binary vector indicating wether a feature point has been properly
15%found.
16%
17%Add a zero zone of size wx2,wy2
18%July 15th, 1999 - Bug on the mask building... fixed + change to Gaussian mask with higher
19%resolution and larger number of iterations.
20
21
22% California Institute of Technology
23% (c) Jean-Yves Bouguet -- Oct. 14th, 1997
24
25
26
27line_feat = 1; % set to 1 to allow for extraction of line features.
28
29xt = xt';
30xt = fliplr(xt);
31
32
33if nargin < 4,
34 winty = 5;
35 if nargin < 3,
36 wintx = 5;
37 end;
38end;
39
40
41if nargin < 6,
42 wx2 = -1;
43 wy2 = -1;
44end;
45
46
47%mask = ones(2*wintx+1,2*winty+1);
48mask = exp(-((-wintx:wintx)'/(wintx)).^2) * exp(-((-winty:winty)/(winty)).^2);
49
50
51if (wx2>0) & (wy2>0),
52 if ((wintx - wx2)>=2)&((winty - wy2)>=2),
53 mask(wintx+1-wx2:wintx+1+wx2,winty+1-wy2:winty+1+wy2)= zeros(2*wx2+1,2*wy2+1);
54 end;
55end;
56
57offx = [-wintx:wintx]'*ones(1,2*winty+1);
58offy = ones(2*wintx+1,1)*[-winty:winty];
59
60resolution = 0.005;
61
62MaxIter = 10;
63
64[nx,ny] = size(I);
65N = size(xt,1);
66
67xc = xt; % first guess... they don't move !!!
68
69type = zeros(1,N);
70
71
72for i=1:N,
73
74 v_extra = resolution + 1; % just larger than resolution
75
76 compt = 0; % no iteration yet
77
78 while (norm(v_extra) > resolution) & (compt<MaxIter),
79
80 cIx = xc(i,1); %
81 cIy = xc(i,2); % Coords. of the point
82 crIx = round(cIx); % on the initial image
83 crIy = round(cIy); %
84 itIx = cIx - crIx; % Coefficients
85 itIy = cIy - crIy; % to compute
86 if itIx > 0, % the sub pixel
87 vIx = [itIx 1-itIx 0]'; % accuracy.
88 else
89 vIx = [0 1+itIx -itIx]';
90 end;
91 if itIy > 0,
92 vIy = [itIy 1-itIy 0];
93 else
94 vIy = [0 1+itIy -itIy];
95 end;
96
97
98 % What if the sub image is not in?
99
100 if (crIx-wintx-2 < 1), xmin=1; xmax = 2*wintx+5;
101 elseif (crIx+wintx+2 > nx), xmax = nx; xmin = nx-2*wintx-4;
102 else
103 xmin = crIx-wintx-2; xmax = crIx+wintx+2;
104 end;
105
106 if (crIy-winty-2 < 1), ymin=1; ymax = 2*winty+5;
107 elseif (crIy+winty+2 > ny), ymax = ny; ymin = ny-2*winty-4;
108 else
109 ymin = crIy-winty-2; ymax = crIy+winty+2;
110 end;
111
112
113 SI = I(xmin:xmax,ymin:ymax); % The necessary neighborhood
114 SI = conv2(conv2(SI,vIx,'same'),vIy,'same');
115 SI = SI(2:2*wintx+4,2:2*winty+4); % The subpixel interpolated neighborhood
116 [gy,gx] = gradient(SI); % The gradient image
117 gx = gx(2:2*wintx+2,2:2*winty+2); % extraction of the useful parts only
118 gy = gy(2:2*wintx+2,2:2*winty+2); % of the gradients
119
120 px = cIx + offx;
121 py = cIy + offy;
122
123 gxx = gx .* gx .* mask;
124 gyy = gy .* gy .* mask;
125 gxy = gx .* gy .* mask;
126
127
128 bb = [sum(sum(gxx .* px + gxy .* py)); sum(sum(gxy .* px + gyy .* py))];
129
130 a = sum(sum(gxx));
131 b = sum(sum(gxy));
132 c = sum(sum(gyy));
133
134 dt = a*c - b^2;
135
136 xc2 = [c*bb(1)-b*bb(2) a*bb(2)-b*bb(1)]/dt;
137
138
139 %keyboard;
140
141 if line_feat,
142
143 G = [a b;b c];
144 [U,S,V] = svd(G);
145
146 %keyboard;
147
148 % If non-invertible, then project the point onto the edge orthogonal:
149
150 if (S(1,1)/S(2,2) > 50),
151 % projection operation:
152 xc2 = xc2 + sum((xc(i,:)-xc2).*(V(:,2)'))*V(:,2)';
153 type(i) = 1;
154 end;
155
156 end;
157
158
159 %keyboard;
160
161% G = [a b;b c];
162% [U,S,V] = svd(G);
163
164
165% if S(1,1)/S(2,2) > 150,
166% bb2 = U'*bb;
167% xc2 = (V*[bb2(1)/S(1,1) ;0])';
168% else
169% xc2 = [c*bb(1)-b*bb(2) a*bb(2)-b*bb(1)]/dt;
170% end;
171
172
173 %if (abs(a)> 50*abs(c)),
174% xc2 = [(c*bb(1)-b*bb(2))/dt xc(i,2)];
175% elseif (abs(c)> 50*abs(a))
176% xc2 = [xc(i,1) (a*bb(2)-b*bb(1))/dt];
177% else
178% xc2 = [c*bb(1)-b*bb(2) a*bb(2)-b*bb(1)]/dt;
179% end;
180
181 %keyboard;
182
183 v_extra = xc(i,:) - xc2;
184
185 xc(i,:) = xc2;
186
187% keyboard;
188
189 compt = compt + 1;
190
191 end
192end;
193
194
195% check for points that diverge:
196
197delta_x = xc(:,1) - xt(:,1);
198delta_y = xc(:,2) - xt(:,2);
199
200%keyboard;
201
202
203bad = (abs(delta_x) > wintx) | (abs(delta_y) > winty);
204good = ~bad;
205in_bad = find(bad);
206
207% For the diverged points, keep the original guesses:
208
209xc(in_bad,:) = xt(in_bad,:);
210
211xc = fliplr(xc);
212xc = xc';
213
214bad = bad';
215good = good';
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/count_squares.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/count_squares.m
new file mode 100755
index 0000000..0e226c0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/count_squares.m
@@ -0,0 +1,74 @@
1function ns = count_squares(I,x1,y1,x2,y2,win);
2
3%keyboard;
4
5[ny,nx] = size(I);
6
7lambda = [y1 - y2;x2 - x1;x1*y2 - x2*y1];
8
9lambda = 1/sqrt(lambda(1)^2 + lambda(2)^2) * lambda;
10
11l1 = lambda + [0;0;win];
12l2 = lambda - [0;0;win];
13
14
15dx = x2-x1;
16dy = y2 - y1;
17
18
19if abs(dx) > abs(dy),
20
21 if x2 > x1,
22 xs = x1:x2;
23 else
24 xs = x1:-1:x2;
25 end;
26
27 ys = -(lambda(3) + lambda(1)*xs)/lambda(2);
28
29else
30
31 if y2 > y1,
32 ys = y1:y2;
33 else
34 ys = y1:-1:y2;
35 end;
36 xs = -(lambda(3) + lambda(2)*ys)/lambda(1);
37
38end;
39
40
41
42 Np = length(xs);
43
44 xs_mat = ones(2*win + 1,1)*xs;
45 ys_mat = ones(2*win + 1,1)*ys;
46
47 win_mat = (-win:win)'*ones(1,Np);
48
49
50 xs_mat2 = round(xs_mat - win_mat * lambda(1));
51 ys_mat2 = round(ys_mat - win_mat * lambda(2));
52
53 ind_mat = (xs_mat2 - 1) * ny + ys_mat2;
54
55 ima_patch = zeros(2*win + 1,Np);
56
57 ima_patch(:) = I(ind_mat(:));
58
59 %ima2 = ima_patch(:,win+1:end-win);
60
61 filtk = [ones(win,Np);zeros(1,Np);-ones(win,Np)];
62
63 out_f = sum(filtk.*ima_patch);
64
65 out_f_f = conv2(out_f,[1/4 1/2 1/4],'same');
66
67 out_f_f = out_f_f(win+1:end-win);
68
69 ns = length(find(((out_f_f(2:end)>=0)&(out_f_f(1:end-1)<0)) | ((out_f_f(2:end)<=0)&(out_f_f(1:end-1)>0))))+1;
70
71
72
73
74return;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/data_calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/data_calib.m
new file mode 100755
index 0000000..318ec15
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/data_calib.m
@@ -0,0 +1,89 @@
1%%% This script alets the user enter the name of the images (base name, numbering scheme,...
2
3dir;
4
5%disp('Camera Calibration using multiple images of a planar checkerboard pattern');
6%disp('Model: 2 focals, 2 radial dist. coeff., 2 tangential dist. coeff. and principle point');
7%disp(' => 8DOF intrinsic model ([Heikkila and Silven, University of Oulu])');
8
9fprintf(1,'\n');
10calib_name = input('Basename camera calibration images (without number nor suffix): ','s');
11
12format_image = '0';
13
14while format_image == '0',
15
16 format_image = input('Image format: ([]=''r''=''ras'', ''b''=''bmp'', ''t''=''tif'', ''p''=''pgm'', ''j''=''jpg'') ','s');
17
18 if isempty(format_image),
19 format_image = 'ras';
20 end;
21
22 if lower(format_image(1)) == 'b',
23 format_image = 'bmp';
24 else
25 if lower(format_image(1)) == 't',
26 format_image = 'tif';
27 else
28 if lower(format_image(1)) == 'p',
29 format_image = 'pgm';
30 else
31 if lower(format_image(1)) == 'j',
32 format_image = 'jpg';
33 else
34 if lower(format_image(1)) == 'r',
35 format_image = 'ras';
36 else
37 disp('Invalid image format');
38 format_image = '0'; % Ask for format once again
39 end;
40 end;
41 end;
42 end;
43 end;
44
45end;
46
47
48n_ima = 1000;
49while n_ima > 30,
50 n_ima = input('Number of calibration images: ');
51 n_ima = round(n_ima);
52end;
53
54type_numbering = input('Type of numbering (ex: []=4,other=04): ');
55
56type_numbering = ~isempty(type_numbering);
57
58if type_numbering,
59
60 N_slots = input('Number of spaces for numbers? (ex: 2 -> 04, 3 -> 004), ([]=3) ');
61
62 if isempty(N_slots), N_slots = 3; end;
63
64else
65
66 N_slots = 1; % not used anyway, but useful for saving
67
68end;
69
70
71first_num = input('First image number? (0,1,2...) ([]=0) ');
72
73if isempty(first_num), first_num = 0; end;
74
75image_numbers = first_num:n_ima-1+first_num;
76
77
78%%% By default, all the images are active for calibration:
79
80active_images = ones(1,n_ima);
81
82%string_save = 'save calib_data n_ima type_numbering N_slots image_numbers format_image calib_name first_num';
83
84%eval(string_save);
85
86% Reading images:
87
88ima_read_calib;
89
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/error_analysis.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/error_analysis.m
new file mode 100755
index 0000000..85feac5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/error_analysis.m
@@ -0,0 +1,182 @@
1%%% ERROR_ANALYSIS
2%%% This simulation helps coputing the acturacies of calibration
3%%% Run it after the main calibration
4
5
6
7N_runs = 200;
8
9%N_ima_active = 4;
10
11saving = 1;
12
13if 1, %~exist('fc_list'), % initialization
14
15 % Initialization:
16
17 load Calib_Results;
18 check_active_images;
19
20 fc_list = [];
21 cc_list = [];
22 kc_list = [];
23 active_images_list = [];
24
25
26 for kk=1:n_ima,
27
28 eval(['omc_list_' num2str(kk) ' = [];']);
29 eval(['Tc_list_' num2str(kk) ' = [];']);
30
31 end;
32
33 %sx = median(abs(ex(1,:)))*1.4836;
34 %sy = median(abs(ex(2,:)))*1.4836;
35
36 sx = std(ex(1,:));
37 sy = std(ex(2,:));
38
39 % Saving the feature locations:
40
41 for kk = 1:n_ima,
42
43 eval(['x_save_' num2str(kk) ' = x_' num2str(kk) ';']);
44 eval(['y_save_' num2str(kk) ' = y_' num2str(kk) ';']);
45
46 end;
47
48 active_images_save = active_images;
49 ind_active_save = ind_active;
50
51 fc_save = fc;
52 cc_save = cc;
53 kc_save = kc;
54 KK_save = KK;
55
56
57end;
58
59
60
61
62%%% The main loop:
63
64
65for ntrial = 1:N_runs,
66
67 fprintf(1,'\nRun number: %d\n',ntrial);
68 fprintf(1, '----------\n');
69
70 for kk = 1:n_ima,
71
72 eval(['y_kk = y_save_' num2str(kk) ';'])
73
74 if active_images(kk) & ~isnan(y_kk(1,1)),
75
76 Nkk = size(y_kk,2);
77
78 x_kk_new = y_kk + [sx * randn(1,Nkk);sy*randn(1,Nkk)];
79
80 eval(['x_' num2str(kk) ' = x_kk_new;']);
81
82 end;
83
84 end;
85
86 N_active = length(ind_active_save);
87 junk = randn(1,N_active);
88 [junk,junk2] = sort(junk);
89
90 active_images = zeros(1,n_ima);
91 active_images(ind_active_save(junk2(1:N_ima_active))) = ones(1,N_ima_active);
92
93 fc = fc_save;
94 cc = cc_save;
95 kc = kc_save;
96 KK = KK_save;
97
98 go_calib_optim;
99
100 fc_list = [fc_list fc];
101 cc_list = [cc_list cc];
102 kc_list = [kc_list kc];
103 active_images_list = [active_images_list active_images'];
104
105 for kk=1:n_ima,
106
107 eval(['omc_list_' num2str(kk) ' = [ omc_list_' num2str(kk) ' omc_' num2str(kk) ' ];']);
108 eval(['Tc_list_' num2str(kk) ' = [ Tc_list_' num2str(kk) ' Tc_' num2str(kk) ' ];']);
109
110 end;
111
112end;
113
114
115
116
117if 0,
118
119% Restoring the feature locations:
120
121for kk = 1:n_ima,
122
123 eval(['x_' num2str(kk) ' = x_save_' num2str(kk) ';']);
124
125end;
126
127fprintf(1,'\nFinal run (with the real data)\n');
128fprintf(1, '------------------------------\n');
129
130active_images = active_images_save;
131ind_active = ind_active_save;
132
133go_calib_optim;
134
135fc_list = [fc_list fc];
136cc_list = [cc_list cc];
137kc_list = [kc_list kc];
138active_images_list = [active_images_list active_images'];
139
140for kk=1:n_ima,
141
142 eval(['omc_list_' num2str(kk) ' = [ omc_list_' num2str(kk) ' omc_' num2str(kk) ' ];']);
143 eval(['Tc_list_' num2str(kk) ' = [ Tc_list_' num2str(kk) ' Tc_' num2str(kk) ' ];']);
144
145end;
146
147end;
148
149
150
151
152
153if saving,
154
155disp(['Save Calibration accuracy results under Calib_Accuracies_' num2str(N_ima_active) '.mat']);
156
157string_save = ['save Calib_Accuracies_' num2str(N_ima_active) ' active_images n_ima N_ima_active N_runs active_images_list fc cc kc fc_list cc_list kc_list'];
158
159for kk = 1:n_ima,
160 string_save = [string_save ' Tc_list_' num2str(kk) ' omc_list_' num2str(kk) ' Tc_' num2str(kk) ' omc_' num2str(kk) ];
161end;
162
163eval(string_save);
164
165end;
166
167
168return;
169
170std(fc_list')
171
172std(cc_list')
173
174std(kc_list')
175
176for kk = 1:n_ima,
177
178 eval(['std(Tc_list_' num2str(kk) ''')'])
179
180end;
181
182
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/ext_calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/ext_calib.m
new file mode 100755
index 0000000..d41d068
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/ext_calib.m
@@ -0,0 +1,130 @@
1
2%%%%%%%%%%%%%%%%%%%% SHOW EXTRINSIC RESULTS %%%%%%%%%%%%%%%%%%%%%%%%
3
4check_active_images;
5
6if ~exist(['omc_' num2str(ind_active(1))]),
7 fprintf(1,'Need to calibrate before showing extrinsic results. Maybe need to load Calib_Results.mat file.\n');
8 return;
9end;
10
11%if ~exist('no_grid'),
12 no_grid = 0;
13%end;
14
15if ~exist(['n_sq_x_' num2str(ind_active(1))]),
16 no_grid = 1;
17end;
18
19
20if 0,
21
22err_std = std(ex');
23
24fprintf(1,'\n\nCalibration results without principal point estimation:\n\n');
25fprintf(1,'Focal Length: fc = [ %3.5f %3.5f]\n',fc);
26fprintf(1,'Principal point: cc = [ %3.5f %3.5f]\n',cc);
27fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f]\n',kc);
28fprintf(1,'Pixel error: err = [ %3.5f %3.5f]\n\n',err_std);
29
30end;
31
32
33% Color code for each image:
34
35colors = 'brgkcm';
36
37
38%%% Show the extrinsic parameters
39
40if ~exist('dX'),
41 eval(['dX = norm(Tc_' num2str(ind_active(1)) ')/10;']);
42 dY = dX;
43end;
44
45IP = 5*dX*([0 nx-1 nx-1 0 0 ; 0 0 ny-1 ny-1 0;1 1 1 1 1] - [cc;0]*ones(1,5)) ./ ([fc;1]*ones(1,5));
46BASE = 5*dX*([0 1 0 0 0 0;0 0 0 1 0 0;0 0 0 0 0 1]);
47IP = reshape([IP;BASE(:,1)*ones(1,5);IP],3,15);
48
49figure(4);
50[a,b] = view;
51
52figure(4);
53plot3(BASE(1,:),BASE(3,:),-BASE(2,:),'b-','linewidth',2');
54hold on;
55plot3(IP(1,:),IP(3,:),-IP(2,:),'r-','linewidth',2);
56text(6*dX,0,0,'X_c');
57text(-dX,5*dX,0,'Z_c');
58text(0,0,-6*dX,'Y_c');
59text(-dX,-dX,dX,'O_c');
60
61
62for kk = 1:n_ima,
63
64 if active_images(kk);
65
66 eval(['XX_kk = X_' num2str(kk) ';']);
67 eval(['omc_kk = omc_' num2str(kk) ';']);
68 eval(['Tc_kk = Tc_' num2str(kk) ';']);
69 N_kk = size(XX_kk,2);
70
71 if ~exist(['n_sq_x_' num2str(kk)]),
72 no_grid = 1;
73 end;
74
75 if ~no_grid,
76 eval(['n_sq_x = n_sq_x_' num2str(kk) ';']);
77 eval(['n_sq_y = n_sq_y_' num2str(kk) ';']);
78 if (N_kk ~= ((n_sq_x+1)*(n_sq_y+1))),
79 no_grid = 1;
80 end;
81 end;
82
83 if ~isnan(omc_kk(1,1)),
84
85 R_kk = rodrigues(omc_kk);
86
87 YY_kk = R_kk * XX_kk + Tc_kk * ones(1,length(XX_kk));
88
89 uu = [-dX;-dY;0]/2;
90 uu = R_kk * uu + Tc_kk;
91
92 if ~no_grid,
93 YYx = zeros(n_sq_x+1,n_sq_y+1);
94 YYy = zeros(n_sq_x+1,n_sq_y+1);
95 YYz = zeros(n_sq_x+1,n_sq_y+1);
96
97 YYx(:) = YY_kk(1,:);
98 YYy(:) = YY_kk(2,:);
99 YYz(:) = YY_kk(3,:);
100
101 %keyboard;
102
103 figure(4);
104 hhh= mesh(YYx,YYz,-YYy);
105 set(hhh,'edgecolor',colors(rem(kk-1,6)+1),'linewidth',1); %,'facecolor','none');
106 %plot3(YY_kk(1,:),YY_kk(3,:),-YY_kk(2,:),['o' colors(rem(kk-1,6)+1)]);
107 text(uu(1),uu(3),-uu(2),num2str(kk),'fontsize',14,'color',colors(rem(kk-1,6)+1));
108 else
109
110 figure(4);
111 plot3(YY_kk(1,:),YY_kk(3,:),-YY_kk(2,:),['.' colors(rem(kk-1,6)+1)]);
112 text(uu(1),uu(3),-uu(2),num2str(kk),'fontsize',14,'color',colors(rem(kk-1,6)+1));
113
114 end;
115
116 end;
117
118 end;
119
120end;
121
122figure(4);rotate3d on;
123axis('equal');
124title('Extrinsic parameters');
125%view(60,30);
126view(a,b);
127hold off;
128
129set(4,'Name','3D','NumberTitle','off');
130
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extract_grid.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extract_grid.m
new file mode 100755
index 0000000..1e3cbdb
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extract_grid.m
@@ -0,0 +1,227 @@
1function [x,X,n_sq_x,n_sq_y,ind_orig,ind_x,ind_y] = extract_grid(I,wintx,winty,fc,cc,kc);
2
3map = gray(256);
4
5 figure(2);
6 image(I);
7 colormap(map);
8
9
10 if nargin < 2,
11
12 disp('Window size for corner finder (wintx and winty):');
13 wintx = input('wintx ([] = 5) = ');
14 if isempty(wintx), wintx = 5; end;
15 wintx = round(wintx);
16 winty = input('winty ([] = 5) = ');
17 if isempty(winty), winty = 5; end;
18 winty = round(winty);
19
20 fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1);
21
22 end;
23
24
25
26 title('Click on the four extreme corners of the rectangular pattern...');
27
28 disp('Click on the four extreme corners of the rectangular complete pattern...');
29
30 [x,y] = ginput3(4);
31
32 [Xc,good,bad,type] = cornerfinder([x';y'],I,winty,wintx); % the four corners
33
34 x = Xc(1,:)';
35 y = Xc(2,:)';
36
37 [y,indy] = sort(y);
38 x = x(indy);
39
40 if (x(2) > x(1)),
41 x4 = x(1);y4 = y(1); x3 = x(2); y3 = y(2);
42 else
43 x4 = x(2);y4 = y(2); x3 = x(1); y3 = y(1);
44 end;
45 if (x(3) > x(4)),
46 x2 = x(3);y2 = y(3); x1 = x(4); y1 = y(4);
47 else
48 x2 = x(4);y2 = y(4); x1 = x(3); y1 = y(3);
49 end;
50
51 x = [x1;x2;x3;x4];
52 y = [y1;y2;y3;y4];
53
54
55 figure(2); hold on;
56 plot([x;x(1)],[y;y(1)],'g-');
57 plot(x,y,'og');
58 hx=text((x(4)+x(3))/2,(y(4)+y(3))/2 - 20,'X');
59 set(hx,'color','g','Fontsize',14);
60 hy=text((x(4)+x(1))/2-20,(y(4)+y(1))/2,'Y');
61 set(hy,'color','g','Fontsize',14);
62 hold off;
63
64
65 % Try to automatically count the number of squares in the grid
66
67 n_sq_x1 = count_squares(I,x1,y1,x2,y2,wintx);
68 n_sq_x2 = count_squares(I,x3,y3,x4,y4,wintx);
69 n_sq_y1 = count_squares(I,x2,y2,x3,y3,wintx);
70 n_sq_y2 = count_squares(I,x4,y4,x1,y1,wintx);
71
72
73
74 % If could not count the number of squares, enter manually
75
76 if (n_sq_x1~=n_sq_x2)|(n_sq_y1~=n_sq_y2),
77
78
79 disp('Could not count the number of squares in the grid. Enter manually.');
80 n_sq_x = input('Number of squares along the X direction ([]=10) = '); %6
81 if isempty(n_sq_x), n_sq_x = 10; end;
82 n_sq_y = input('Number of squares along the Y direction ([]=10) = '); %6
83 if isempty(n_sq_y), n_sq_y = 10; end;
84
85 else
86
87 n_sq_x = n_sq_x1;
88 n_sq_y = n_sq_y1;
89
90 end;
91
92
93 % Enter the size of each square
94
95 dX = input(['Size dX of each square along the X direction ([]=3cm) = ']);
96 dY = input(['Size dY of each square along the Y direction ([]=3cm) = ']);
97 if isempty(dX), dX = 3; end;
98 if isempty(dY), dY = 3; end;
99
100
101
102 % Compute the inside points through computation of the planar homography (collineation)
103
104 a00 = [x(1);y(1);1];
105 a10 = [x(2);y(2);1];
106 a11 = [x(3);y(3);1];
107 a01 = [x(4);y(4);1];
108
109
110 % Compute the planart collineation: (return the normalization matrice as well)
111
112 [Homo,Hnorm,inv_Hnorm] = compute_homography ([a00 a10 a11 a01],[0 1 1 0;0 0 1 1;1 1 1 1]);
113
114
115 % Build the grid using the planar collineation:
116
117 x_l = ((0:n_sq_x)'*ones(1,n_sq_y+1))/n_sq_x;
118 y_l = (ones(n_sq_x+1,1)*(0:n_sq_y))/n_sq_y;
119 pts = [x_l(:) y_l(:) ones((n_sq_x+1)*(n_sq_y+1),1)]';
120
121 XX = Homo*pts;
122 XX = XX(1:2,:) ./ (ones(2,1)*XX(3,:));
123
124
125 % Complete size of the rectangle
126
127 W = n_sq_x*dX;
128 L = n_sq_y*dY;
129
130
131
132 if nargin < 6,
133
134 %%%%%%%%%%%%%%%%%%%%%%%% ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
135 figure(2);
136 hold on;
137 plot(XX(1,:),XX(2,:),'r+');
138 title('The red crosses should be close to the image corners');
139 hold off;
140
141 disp('If the guessed grid corners (red crosses on the image) are not close to the actual corners,');
142 disp('it is necessary to enter an initial guess for the radial distortion factor kc (useful for subpixel detection)');
143 quest_distort = input('Need of an initial guess for distortion? ([]=no, other=yes) ');
144
145 quest_distort = ~isempty(quest_distort);
146
147 if quest_distort,
148 % Estimation of focal length:
149 c_g = [size(I,2);size(I,1)]/2 + .5;
150 f_g = Distor2Calib(0,[[x(1) x(2) x(4) x(3)] - c_g(1);[y(1) y(2) y(4) y(3)] - c_g(2)],1,1,4,W,L,[-W/2 W/2 W/2 -W/2;L/2 L/2 -L/2 -L/2; 0 0 0 0],100,1,1);
151 f_g = mean(f_g);
152 script_fit_distortion;
153 end;
154 %%%%%%%%%%%%%%%%%%%%% END ADDITIONAL STUFF IN THE CASE OF HIGHLY DISTORTED IMAGES %%%%%%%%%%%%%
155
156 else
157
158 xy_corners_undist = comp_distortion_oulu([(x' - cc(1))/fc(1);(y'-cc(2))/fc(1)],kc);
159
160 xu = xy_corners_undist(1,:)';
161 yu = xy_corners_undist(2,:)';
162
163 [XXu] = projectedGrid ( [xu(1);yu(1)], [xu(2);yu(2)],[xu(3);yu(3)], [xu(4);yu(4)],n_sq_x+1,n_sq_y+1); % The full grid
164
165 r2 = sum(XXu.^2);
166 XX = (ones(2,1)*(1 + kc(1) * r2 + kc(2) * (r2.^2))) .* XXu;
167 XX(1,:) = fc(1)*XX(1,:)+cc(1);
168 XX(2,:) = fc(2)*XX(2,:)+cc(2);
169
170 end;
171
172
173 Np = (n_sq_x+1)*(n_sq_y+1);
174
175 disp('Corner extraction...');
176
177 grid_pts = cornerfinder(XX,I,winty,wintx); %%% Finds the exact corners at every points!
178
179 grid_pts = grid_pts - 1; % subtract 1 to bring the origin to (0,0) instead of (1,1) in matlab (not necessary in C)
180
181 ind_corners = [1 n_sq_x+1 (n_sq_x+1)*n_sq_y+1 (n_sq_x+1)*(n_sq_y+1)]; % index of the 4 corners
182 ind_orig = (n_sq_x+1)*n_sq_y + 1;
183 xorig = grid_pts(1,ind_orig);
184 yorig = grid_pts(2,ind_orig);
185 dxpos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig+1)]');
186 dypos = mean([grid_pts(:,ind_orig) grid_pts(:,ind_orig-n_sq_x-1)]');
187
188
189 ind_x = (n_sq_x+1)*(n_sq_y + 1);
190 ind_y = 1;
191
192 x_box_kk = [grid_pts(1,:)-(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)+(wintx+.5);grid_pts(1,:)-(wintx+.5);grid_pts(1,:)-(wintx+.5)];
193 y_box_kk = [grid_pts(2,:)-(winty+.5);grid_pts(2,:)-(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)+(winty+.5);grid_pts(2,:)-(winty+.5)];
194
195
196 figure(3);
197 image(I); colormap(map); hold on;
198 plot(grid_pts(1,:)+1,grid_pts(2,:)+1,'r+');
199 plot(x_box_kk+1,y_box_kk+1,'-b');
200 plot(grid_pts(1,ind_corners)+1,grid_pts(2,ind_corners)+1,'mo');
201 plot(xorig+1,yorig+1,'*m');
202 h = text(xorig-15,yorig-15,'O');
203 set(h,'Color','m','FontSize',14);
204 h2 = text(dxpos(1)-10,dxpos(2)-10,'dX');
205 set(h2,'Color','g','FontSize',14);
206 h3 = text(dypos(1)-25,dypos(2)-3,'dY');
207 set(h3,'Color','g','FontSize',14);
208 xlabel('Xc (in camera frame)');
209 ylabel('Yc (in camera frame)');
210 title('Extracted corners');
211 zoom on;
212 drawnow;
213 hold off;
214
215
216 Xi = reshape(([0:n_sq_x]*dX)'*ones(1,n_sq_y+1),Np,1)';
217 Yi = reshape(ones(n_sq_x+1,1)*[n_sq_y:-1:0]*dY,Np,1)';
218 Zi = zeros(1,Np);
219
220 Xgrid = [Xi;Yi;Zi];
221
222
223 % All the point coordinates (on the image, and in 3D) - for global optimization:
224
225 x = grid_pts;
226 X = Xgrid;
227
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extract_parameters.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extract_parameters.m
new file mode 100755
index 0000000..8e0e1f1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extract_parameters.m
@@ -0,0 +1,46 @@
1
2%%% Extraction of the final intrinsic and extrinsic paramaters:
3
4check_active_images;
5
6fc = solution(1:2);
7kc = solution(3:6);
8cc = solution(6*n_ima + 4 +3:6*n_ima + 5 +3);
9
10% Calibration matrix:
11
12KK = [fc(1) 0 cc(1);0 fc(2) cc(2); 0 0 1];
13inv_KK = inv(KK);
14
15% Extract the extrinsic paramters, and recomputer the collineations
16
17for kk = 1:n_ima,
18
19 if active_images(kk),
20
21 omckk = solution(4+6*(kk-1) + 3:6*kk + 3);
22 Tckk = solution(6*kk+1 + 3:6*kk+3 + 3);
23
24 Rckk = rodrigues(omckk);
25
26 Hkk = KK * [Rckk(:,1) Rckk(:,2) Tckk];
27
28 Hkk = Hkk / Hkk(3,3);
29
30 else
31
32 omckk = NaN*ones(3,1);
33 Tckk = NaN*ones(3,1);
34 Rckk = NaN*ones(3,3);
35 Hkk = NaN*ones(3,3);
36
37 end;
38
39 eval(['omc_' num2str(kk) ' = omckk;']);
40 eval(['Rc_' num2str(kk) ' = Rckk;']);
41 eval(['Tc_' num2str(kk) ' = Tckk;']);
42 eval(['H_' num2str(kk) '= Hkk;']);
43
44end;
45
46
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extract_parameters3D.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extract_parameters3D.m
new file mode 100755
index 0000000..841c6ab
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extract_parameters3D.m
@@ -0,0 +1,36 @@
1
2%%% Extraction of the final intrinsic and extrinsic paramaters:
3
4
5fc = solution(1:2);
6kc = solution(3:6);
7cc = solution(6*n_ima + 4 +3:6*n_ima + 5 +3);
8
9% Calibration matrix:
10
11KK = [fc(1) 0 cc(1);0 fc(2) cc(2); 0 0 1];
12inv_KK = inv(KK);
13
14% Extract the extrinsic paramters, and recomputer the collineations
15
16for kk = 1:n_ima,
17
18 omckk = solution(4+6*(kk-1) + 3:6*kk + 3);
19
20 Tckk = solution(6*kk+1 + 3:6*kk+3 + 3);
21
22 Rckk = rodrigues(omckk);
23
24 Hlkk = KK * [Rckk(:,1) Rckk(:,2) Tckk];
25
26 Hlkk = Hlkk / Hlkk(3,3);
27
28 eval(['omc_' num2str(kk) ' = omckk;']);
29 eval(['Rc_' num2str(kk) ' = Rckk;']);
30 eval(['Tc_' num2str(kk) ' = Tckk;']);
31
32 eval(['Hl_' num2str(kk) '=Hlkk;']);
33
34end;
35
36
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extrinsic_computation.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extrinsic_computation.m
new file mode 100755
index 0000000..8cf10db
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/extrinsic_computation.m
@@ -0,0 +1,173 @@
1%%% INPUT THE IMAGE FILE NAME:
2
3dir;
4
5fprintf(1,'\n');
6disp('Computation of the extrinsic parameters from an image of a pattern');
7disp('The intrinsic camera parameters are assumed to be known (previously computed)');
8
9fprintf(1,'\n');
10image_name = input('Image name (full name without extension): ','s');
11
12format_image2 = '0';
13
14while format_image2 == '0',
15
16 format_image2 = input('Image format: ([]=''r''=''ras'', ''b''=''bmp'', ''t''=''tif'', ''p''=''pgm'', ''j''=''jpg'') ','s');
17
18 if isempty(format_image2),
19 format_image2 = 'ras';
20 end;
21
22 if lower(format_image2(1)) == 'b',
23 format_image2 = 'bmp';
24 else
25 if lower(format_image2(1)) == 't',
26 format_image2 = 'tif';
27 else
28 if lower(format_image2(1)) == 'p',
29 format_image2 = 'pgm';
30 else
31 if lower(format_image2(1)) == 'j',
32 format_image2 = 'jpg';
33 else
34 if lower(format_image2(1)) == 'r',
35 format_image2 = 'ras';
36 else
37 disp('Invalid image format');
38 format_image2 = '0'; % Ask for format once again
39 end;
40 end;
41 end;
42 end;
43 end;
44end;
45
46ima_name = [image_name '.' format_image];
47
48
49
50%%% READ IN IMAGE:
51
52if format_image(1) == 'p',
53 I = double(pgmread(ima_name));
54else
55 if format_image(1) == 'r',
56 I = readras(ima_name);
57 else
58 I = double(imread(ima_name));
59 end;
60end;
61
62if size(I,3)>1,
63 I = I(:,:,2);
64end;
65
66
67%%% EXTRACT GRID CORNERS:
68
69fprintf(1,'\nExtraction of the grid corners on the image\n');
70
71disp('Window size for corner finder (wintx and winty):');
72wintx = input('wintx ([] = 5) = ');
73if isempty(wintx), wintx = 5; end;
74wintx = round(wintx);
75winty = input('winty ([] = 5) = ');
76if isempty(winty), winty = 5; end;
77winty = round(winty);
78
79fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1);
80
81[x_ext,X_ext,n_sq_x,n_sq_y,ind_orig,ind_x,ind_y] = extract_grid(I,wintx,winty,fc,cc,kc);
82
83
84
85%%% Computation of the Extrinsic Parameters attached to the grid:
86
87[omc_ext,Tc_ext,Rc_ext,H_ext] = compute_extrinsic(x_ext,X_ext,fc,cc,kc);
88
89
90%%% Reproject the points on the image:
91
92[x_reproj] = project_points(X_ext,omc_ext,Tc_ext,fc,cc,kc);
93
94err_reproj = x_ext - x_reproj;
95
96err_std2 = std(err_reproj')';
97
98
99Basis = [X_ext(:,[ind_orig ind_x ind_orig ind_y ind_orig ])];
100
101VX = Basis(:,2) - Basis(:,1);
102VY = Basis(:,4) - Basis(:,1);
103
104nX = norm(VX);
105nY = norm(VY);
106
107VZ = min(nX,nY) * cross(VX/nX,VY/nY);
108
109Basis = [Basis VZ];
110
111[x_basis] = project_points(Basis,omc_ext,Tc_ext,fc,cc,kc);
112
113dxpos = (x_basis(:,2) + x_basis(:,1))/2;
114dypos = (x_basis(:,4) + x_basis(:,3))/2;
115dzpos = (x_basis(:,6) + x_basis(:,5))/2;
116
117
118
119figure(2);
120image(I);
121colormap(gray(256));
122hold on;
123plot(x_ext(1,:)+1,x_ext(2,:)+1,'r+');
124plot(x_reproj(1,:)+1,x_reproj(2,:)+1,'yo');
125h = text(x_ext(1,ind_orig)-25,x_ext(2,ind_orig)-25,'O');
126set(h,'Color','g','FontSize',14);
127h2 = text(dxpos(1)+1,dxpos(2)-30,'X');
128set(h2,'Color','g','FontSize',14);
129h3 = text(dypos(1)-30,dypos(2)+1,'Y');
130set(h3,'Color','g','FontSize',14);
131h4 = text(dzpos(1)-10,dzpos(2)-20,'Z');
132set(h4,'Color','g','FontSize',14);
133plot(x_basis(1,:)+1,x_basis(2,:)+1,'g-','linewidth',2);
134title('Image points (+) and reprojected grid points (o)');
135hold off;
136
137
138fprintf(1,'\n\nExtrinsic parameters:\n\n');
139fprintf(1,'Translation vector: Tc_ext = [ %3.6f \t %3.6f \t %3.6f ]\n',Tc_ext);
140fprintf(1,'Rotation vector: omc_ext = [ %3.6f \t %3.6f \t %3.6f ]\n',omc_ext);
141fprintf(1,'Rotation matrix: Rc_ext = [ %3.6f \t %3.6f \t %3.6f\n',Rc_ext(1,:)');
142fprintf(1,' %3.6f \t %3.6f \t %3.6f\n',Rc_ext(2,:)');
143fprintf(1,' %3.6f \t %3.6f \t %3.6f ]\n',Rc_ext(3,:)');
144fprintf(1,'Pixel error: err = [ %3.5f \t %3.5f ]\n\n',err_std2);
145
146
147
148
149
150return;
151
152
153% Stores the results:
154
155kk = 1;
156
157% Stores location of grid wrt camera:
158
159eval(['omc_' num2str(kk) ' = omc_ext;']);
160eval(['Tc_' num2str(kk) ' = Tc_ext;']);
161
162% Stores the projected points:
163
164eval(['y_' num2str(kk) ' = x_reproj;']);
165eval(['X_' num2str(kk) ' = X_ext;']);
166eval(['x_' num2str(kk) ' = x_ext;']);
167
168
169% Organize the points in a grid:
170
171eval(['n_sq_x_' num2str(kk) ' = n_sq_x;']);
172eval(['n_sq_y_' num2str(kk) ' = n_sq_y;']);
173 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/ginput3.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/ginput3.m
new file mode 100755
index 0000000..56fe496
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/ginput3.m
@@ -0,0 +1,216 @@
1function [out1,out2,out3] = ginput2(arg1)
2%GINPUT Graphical input from mouse.
3% [X,Y] = GINPUT(N) gets N points from the current axes and returns
4% the X- and Y-coordinates in length N vectors X and Y. The cursor
5% can be positioned using a mouse (or by using the Arrow Keys on some
6% systems). Data points are entered by pressing a mouse button
7% or any key on the keyboard except carriage return, which terminates
8% the input before N points are entered.
9%
10% [X,Y] = GINPUT gathers an unlimited number of points until the
11% return key is pressed.
12%
13% [X,Y,BUTTON] = GINPUT(N) returns a third result, BUTTON, that
14% contains a vector of integers specifying which mouse button was
15% used (1,2,3 from left) or ASCII numbers if a key on the keyboard
16% was used.
17
18% Copyright (c) 1984-96 by The MathWorks, Inc.
19% $Revision: 5.18 $ $Date: 1996/11/10 17:48:08 $
20
21% Fixed version by Jean-Yves Bouguet to have a cross instead of 2 lines
22% More visible for images
23
24P = NaN*ones(16,16);
25P(1:15,1:15) = 2*ones(15,15);
26P(2:14,2:14) = ones(13,13);
27P(3:13,3:13) = NaN*ones(11,11);
28P(6:10,6:10) = 2*ones(5,5);
29P(7:9,7:9) = 1*ones(3,3);
30
31out1 = []; out2 = []; out3 = []; y = [];
32c = computer;
33if ~strcmp(c(1:2),'PC') & ~strcmp(c(1:2),'MA')
34 tp = get(0,'TerminalProtocol');
35else
36 tp = 'micro';
37end
38
39if ~strcmp(tp,'none') & ~strcmp(tp,'x') & ~strcmp(tp,'micro'),
40 if nargout == 1,
41 if nargin == 1,
42 eval('out1 = trmginput(arg1);');
43 else
44 eval('out1 = trmginput;');
45 end
46 elseif nargout == 2 | nargout == 0,
47 if nargin == 1,
48 eval('[out1,out2] = trmginput(arg1);');
49 else
50 eval('[out1,out2] = trmginput;');
51 end
52 if nargout == 0
53 out1 = [ out1 out2 ];
54 end
55 elseif nargout == 3,
56 if nargin == 1,
57 eval('[out1,out2,out3] = trmginput(arg1);');
58 else
59 eval('[out1,out2,out3] = trmginput;');
60 end
61 end
62else
63
64 fig = gcf;
65 figure(gcf);
66
67 if nargin == 0
68 how_many = -1;
69 b = [];
70 else
71 how_many = arg1;
72 b = [];
73 if isstr(how_many) ...
74 | size(how_many,1) ~= 1 | size(how_many,2) ~= 1 ...
75 | ~(fix(how_many) == how_many) ...
76 | how_many < 0
77 error('Requires a positive integer.')
78 end
79 if how_many == 0
80 ptr_fig = 0;
81 while(ptr_fig ~= fig)
82 ptr_fig = get(0,'PointerWindow');
83 end
84 scrn_pt = get(0,'PointerLocation');
85 loc = get(fig,'Position');
86 pt = [scrn_pt(1) - loc(1), scrn_pt(2) - loc(2)];
87 out1 = pt(1); y = pt(2);
88 elseif how_many < 0
89 error('Argument must be a positive integer.')
90 end
91 end
92
93pointer = get(gcf,'pointer');
94
95set(gcf,'Pointer','custom','PointerShapeCData',P,'PointerShapeHotSpot',[8,8]);
96%set(gcf,'pointer','crosshair');
97 fig_units = get(fig,'units');
98 char = 0;
99
100 while how_many ~= 0
101 % Use no-side effect WAITFORBUTTONPRESS
102 waserr = 0;
103 eval('keydown = wfbp;', 'waserr = 1;');
104 if(waserr == 1)
105 if(ishandle(fig))
106 set(fig,'pointer',pointer,'units',fig_units);
107 error('Interrupted');
108 else
109 error('Interrupted by figure deletion');
110 end
111 end
112
113 ptr_fig = get(0,'CurrentFigure');
114 if(ptr_fig == fig)
115 if keydown
116 char = get(fig, 'CurrentCharacter');
117 button = abs(get(fig, 'CurrentCharacter'));
118 scrn_pt = get(0, 'PointerLocation');
119 set(fig,'units','pixels')
120 loc = get(fig, 'Position');
121 pt = [scrn_pt(1) - loc(1), scrn_pt(2) - loc(2)];
122 set(fig,'CurrentPoint',pt);
123 else
124 button = get(fig, 'SelectionType');
125 if strcmp(button,'open')
126 button = b(length(b));
127 elseif strcmp(button,'normal')
128 button = 1;
129 elseif strcmp(button,'extend')
130 button = 2;
131 elseif strcmp(button,'alt')
132 button = 3;
133 else
134 error('Invalid mouse selection.')
135 end
136 end
137 pt = get(gca, 'CurrentPoint');
138
139 how_many = how_many - 1;
140
141 if(char == 13) % & how_many ~= 0)
142 % if the return key was pressed, char will == 13,
143 % and that's our signal to break out of here whether
144 % or not we have collected all the requested data
145 % points.
146 % If this was an early breakout, don't include
147 % the <Return> key info in the return arrays.
148 % We will no longer count it if it's the last input.
149 break;
150 end
151
152 out1 = [out1;pt(1,1)];
153 y = [y;pt(1,2)];
154 b = [b;button];
155 end
156 end
157
158 set(fig,'pointer',pointer,'units',fig_units);
159
160 if nargout > 1
161 out2 = y;
162 if nargout > 2
163 out3 = b;
164 end
165 else
166 out1 = [out1 y];
167 end
168
169end
170
171%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
172function key = wfbp
173%WFBP Replacement for WAITFORBUTTONPRESS that has no side effects.
174
175% Remove figure button functions
176fprops = {'windowbuttonupfcn','buttondownfcn', ...
177 'windowbuttondownfcn','windowbuttonmotionfcn'};
178fig = gcf;
179fvals = get(fig,fprops);
180set(fig,fprops,{'','','',''})
181
182% Remove all other buttondown functions
183ax = findobj(fig,'type','axes');
184if isempty(ax)
185 ch = {};
186else
187 ch = get(ax,{'Children'});
188end
189for i=1:length(ch),
190 ch{i} = ch{i}(:)';
191end
192h = [ax(:)',ch{:}];
193vals = get(h,{'buttondownfcn'});
194mt = repmat({''},size(vals));
195set(h,{'buttondownfcn'},mt);
196
197% Now wait for that buttonpress, and check for error conditions
198waserr = 0;
199eval(['if nargout==0,', ...
200 ' waitforbuttonpress,', ...
201 'else,', ...
202 ' keydown = waitforbuttonpress;',...
203 'end' ], 'waserr = 1;');
204
205% Put everything back
206if(ishandle(fig))
207 set(fig,fprops,fvals)
208 set(h,{'buttondownfcn'},vals)
209end
210
211if(waserr == 1)
212 error('Interrupted');
213end
214
215if nargout>0, key = keydown; end
216%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim.m
new file mode 100755
index 0000000..6eb1c82
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim.m
@@ -0,0 +1,60 @@
1%go_calib_optim
2%
3%Main calibration function. Computes the intrinsic andextrinsic parameters.
4%Runs as a script.
5%
6%INPUT: x_1,x_2,x_3,...: Feature locations on the images
7% X_1,X_2,X_3,...: Corresponding grid coordinates
8%
9%OUTPUT: fc: Camera focal length
10% cc: Principal point coordinates
11% kc: Distortion coefficients
12% KK: The camera matrix (containing fc and cc)
13% omc_1,omc_2,omc_3,...: 3D rotation vectors attached to the grid positions in space
14% Tc_1,Tc_2,Tc_3,...: 3D translation vectors attached to the grid positions in space
15% Rc_1,Rc_2,Rc_3,...: 3D rotation matrices corresponding to the omc vectors
16%
17%Method: Minimizes the pixel reprojection error in the least squares sense over the intrinsic
18% camera parameters, and the extrinsic parameters (3D locations of the grids in space)
19%
20%Note: If the intrinsic camera parameters (fc, cc, kc) do not exist before, they are initialized through
21% the function init_intrinsic_param.m. Otherwise, the variables in memory are used as initial guesses.
22%
23%Note: The row vector active_images consists of zeros and ones. To deactivate an image, set the
24% corresponding entry in the active_images vector to zero.
25%
26%VERY IMPORTANT: This function works for 2D and 3D calibration rigs, except for init_intrinsic_param.m
27%that is so far implemented to work only with 2D rigs.
28%In the future, a more general function will be there.
29%For now, if using a 3D calibration rig, set quick_init to 1 for an easy initialization of the focal length
30
31
32desactivated_images = [];
33
34
35go_calib_optim_iter;
36
37
38if ~isempty(desactivated_images),
39
40 param_list_save = param_list;
41
42 fprintf(1,'\nNew optimization including the images that have been deactivated during the previous optimization.\n');
43 active_images(desactivated_images) = ones(1,length(desactivated_images));
44 desactivated_images = [];
45
46 go_calib_optim_iter;
47
48 if ~isempty(desactivated_images),
49 fprintf(1,['List of images left desactivated: ' num2str(desactivated_images) '\n' ] );
50 end;
51
52 param_list = [param_list_save(:,1:end-1) param_list];
53
54end;
55
56
57%%%%%%%%%%%%%%%%%%%% GRAPHICAL OUTPUT %%%%%%%%%%%%%%%%%%%%%%%%
58
59%graphout_calib;
60
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim3D.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim3D.m
new file mode 100755
index 0000000..8cc5e30
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim3D.m
@@ -0,0 +1,264 @@
1% Simplified version of go_calib.m
2
3
4if ~exist('x_1'),
5 click_calib;
6end;
7
8
9fprintf(1,'\nMain calibration procedure\n');
10
11% initial guess for principal point and distortion:
12c_init = [nx;ny]/2 - 0.5; % initialize at the center of the image
13k_init = [0;0;0;0]; % initialize to zero (no distortion)
14
15
16% Compute explicitely the focal lentgh using all the (mutually orthogonal) vanishing points
17% note: The vanihing points are hidden in the planar collineations H_kk
18
19A = [];
20b = [];
21
22% matrix that subtract the principal point:
23Sub_cc = [1 0 -c_init(1);0 1 -c_init(2);0 0 1];
24
25
26for kk=1:n_ima,
27
28 % left Pattern:
29
30 eval(['Hlkk = Hl_' num2str(kk) ';']);
31
32 Hlkk = Sub_cc * Hlkk;
33
34 % Extract vanishing points (direct and diagonals):
35
36 Vl_hori_pix = Hlkk(:,1);
37 Vl_vert_pix = Hlkk(:,2);
38 Vl_diag1_pix = (Hlkk(:,1)+Hlkk(:,2))/2;
39 Vl_diag2_pix = (Hlkk(:,1)-Hlkk(:,2))/2;
40
41 Vl_hori_pix = Vl_hori_pix/norm(Vl_hori_pix);
42 Vl_vert_pix = Vl_vert_pix/norm(Vl_vert_pix);
43 Vl_diag1_pix = Vl_diag1_pix/norm(Vl_diag1_pix);
44 Vl_diag2_pix = Vl_diag2_pix/norm(Vl_diag2_pix);
45
46 al1 = Vl_hori_pix(1);
47 bl1 = Vl_hori_pix(2);
48 cl1 = Vl_hori_pix(3);
49
50 al2 = Vl_vert_pix(1);
51 bl2 = Vl_vert_pix(2);
52 cl2 = Vl_vert_pix(3);
53
54 al3 = Vl_diag1_pix(1);
55 bl3 = Vl_diag1_pix(2);
56 cl3 = Vl_diag1_pix(3);
57
58 al4 = Vl_diag2_pix(1);
59 bl4 = Vl_diag2_pix(2);
60 cl4 = Vl_diag2_pix(3);
61
62 % right Pattern:
63
64 eval(['Hrkk = Hr_' num2str(kk) ';']);
65
66 Hrkk = Sub_cc * Hrkk;
67
68 % Extract vanishing points (direct and diagonals):
69
70 Vr_hori_pix = Hrkk(:,1);
71 Vr_vert_pix = Hrkk(:,2);
72 Vr_diag1_pix = (Hrkk(:,1)+Hrkk(:,2))/2;
73 Vr_diag2_pix = (Hrkk(:,1)-Hrkk(:,2))/2;
74
75 Vr_hori_pix = Vr_hori_pix/norm(Vl_hori_pix);
76 Vr_vert_pix = Vr_vert_pix/norm(Vl_vert_pix);
77 Vr_diag1_pix = Vr_diag1_pix/norm(Vr_diag1_pix);
78 Vr_diag2_pix = Vr_diag2_pix/norm(Vr_diag2_pix);
79
80 ar1 = Vr_hori_pix(1);
81 br1 = Vr_hori_pix(2);
82 cr1 = Vr_hori_pix(3);
83
84 ar2 = Vr_vert_pix(1);
85 br2 = Vr_vert_pix(2);
86 cr2 = Vr_vert_pix(3);
87
88 ar3 = Vr_diag1_pix(1);
89 br3 = Vr_diag1_pix(2);
90 cr3 = Vr_diag1_pix(3);
91
92 ar4 = Vr_diag2_pix(1);
93 br4 = Vr_diag2_pix(2);
94 cr4 = Vr_diag2_pix(3);
95
96
97 % Collect all the constraints:
98
99 A_kk = [al1*al2 bl1*bl2;
100 al3*al4 bl3*bl4;
101 ar1*ar2 br1*br2;
102 ar3*ar4 br3*br4;
103 al1*ar1 bl1*br1];
104
105 b_kk = -[cl1*cl2;cl3*cl4;cr1*cr2;cr3*cr4;cl1*cr1];
106
107
108 A = [A;A_kk];
109 b = [b;b_kk];
110
111end;
112
113% use all the vanishing points to estimate focal length:
114
115f_init = sqrt(abs(1./(inv(A'*A)*A'*b))); % if using a two-focal model for initial guess
116
117%f_init = sqrt(b'*(sum(A')') / (b'*b)) * ones(2,1); % if single focal length model is used
118
119
120% Global calibration matrix (initial guess):
121
122KK = [f_init(1) 0 c_init(1);0 f_init(2) c_init(2); 0 0 1];
123inv_KK = inv(KK);
124
125
126% Computing of the extrinsic parameters (from the collineations)
127
128for kk = 1:n_ima,
129
130 eval(['Hlkk = Hl_' num2str(kk) ';']);
131
132 Hl2 = inv_KK*Hlkk;
133
134 sc = mean([norm(Hl2(:,1));norm(Hl2(:,2))]);
135
136 Hl2 = Hl2/sc;
137
138 eval(['Hrkk = Hr_' num2str(kk) ';']);
139
140 Hr2 = inv_KK*Hrkk;
141
142 sc = mean([norm(Hr2(:,1));norm(Hr2(:,2))]);
143
144 Hr2 = Hr2/sc;
145
146 omcl = rodrigues([Hl2(:,1:2) cross(Hl2(:,1),Hl2(:,2))]);
147 Tcl = Hl2(:,3);
148
149 %omcr = rodrigues([Hr2(:,1:2) cross(Hr2(:,1),Hr2(:,2))]);
150 %Tcr = Hr2(:,3);
151
152
153 omckk = omcl; %rodrigues([H2(:,1:2) cross(H2(:,1),H2(:,2))]);
154 Tckk = Tcl; %H2(:,3);
155
156 eval(['omc_' num2str(kk) ' = omckk;']);
157 eval(['Tc_' num2str(kk) ' = Tckk;']);
158
159end;
160
161
162
163% Initialisation of the parameters for global minimization:
164
165init_param = [f_init;k_init];
166
167for kk = 1:n_ima,
168 eval(['init_param = [init_param; omc_' num2str(kk) '; Tc_' num2str(kk) '];']);
169end;
170
171if ~exist('lsqnonlin'),
172
173 options = [1 1e-4 1e-4 1e-6 0 0 0 0 0 0 0 0 0 6000 0 1e-8 0.1 0];
174
175 if exist('leastsq'),
176 sss = ['[param,opt] = leastsq(''multi_error_oulu'',init_param,options,[],n_ima,c_init);'];
177 else
178 sss = ['[param,opt] = leastsq2(''multi_error_oulu'',init_param,options,[],n_ima,c_init);'];
179 end;
180
181else
182
183 options = optimset('lsqnonlin');
184 options.MaxIter = 6000;
185 options.Display = 'iter';
186 sss = ['[param,opt] = lsqnonlin(''multi_error_oulu'',init_param,[],[],options,n_ima,c_init);'];
187
188end;
189
190
191fprintf(1,'\nOptimization not including the principal point...\n')
192eval(sss);
193
194history = [[init_param;c_init] [param;c_init]];
195
196sol_no_center = [param;c_init];
197
198init_param = sol_no_center;
199
200fprintf(1,'\nOptimization including the principal point...\n')
201
202eval(sss);
203
204history = [history param];
205
206
207sol_with_center = param;
208
209
210
211
212%%% Extraction of the final intrinsic and extrinsic paramaters (in the no-center case):
213
214solution = sol_no_center;
215extract_parameters3D;
216
217fprintf(1,'\n\nCalibration results without principal point estimation:\n\n');
218fprintf(1,'Focal Length: fc = [ %3.5f %3.5f]\n',fc);
219fprintf(1,'Principal point: cc = [ %3.5f %3.5f]\n',cc);
220fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f]\n',kc);
221fprintf(1,['Pixel error: [click on ''sol. without center'']\n']);
222
223
224
225
226% Pick the solution with principal point
227%%% NOTE: At that point, the user can choose which solution to pick: with or without
228%%% principal point estimation. By default, we pick the solution with principal point.
229
230solution = sol_with_center;
231
232
233
234%%% Extraction of the final intrinsic and extrinsic paramaters:
235
236extract_parameters3D;
237
238
239fprintf(1,'\n\nCalibration results with principal point estimation:\n\n');
240fprintf(1,'Focal Length: fc = [ %3.5f %3.5f]\n',fc);
241fprintf(1,'Principal point: cc = [ %3.5f %3.5f]\n',cc);
242fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f]\n',kc);
243
244
245%%%%%%%%%%%%%%%%%%%% GRAPHICAL OUTPUT %%%%%%%%%%%%%%%%%%%%%%%%
246
247graphout_calib3D;
248
249
250
251fprintf(1,'Note: If the solution is not satisfactory, select solution without center estimation.\n\n');
252
253
254%%%%%%%%%%%%%% Save all the Calibration results:
255
256disp('Save calibration results under Calib_Results.mat');
257
258string_save = 'save Calib_Results fc kc cc ex x y solution sol_with_center sol_no_center history wintx winty n_ima type_numbering N_slots small_calib_image first_num image_numbers format_image calib_name Hcal Wcal nx ny map dX_default dY_default KK inv_KK dX dY';
259
260for kk = 1:n_ima,
261 string_save = [string_save ' X_' num2str(kk) ' x_' num2str(kk) ' y_' num2str(kk) ' ex_' num2str(kk) ' omc_' num2str(kk) ' Tc_' num2str(kk) ' Hl_' num2str(kk) ' nl_sq_x_' num2str(kk) ' nl_sq_y_' num2str(kk) ' Hr_' num2str(kk) ' nr_sq_x_' num2str(kk) ' nr_sq_y_' num2str(kk)];
262end;
263
264eval(string_save);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim_cont.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim_cont.m
new file mode 100755
index 0000000..9ff3f0b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim_cont.m
@@ -0,0 +1,142 @@
1% Simplified version of go_calib.m
2
3if ~exist('x_1'),
4 click_calib;
5end;
6
7
8% Initialisation of the parameters for global minimization:
9
10init_param = [fc;kc];
11
12for kk = 1:n_ima,
13
14 if ~exist(['omc_' num2str(kk)]),
15 eval(['Hkk = H_' num2str(kk) ';']);
16 H2 = inv_KK*Hkk;
17 sc = mean([norm(H2(:,1));norm(H2(:,2))]);
18 H2 = H2/sc;
19 omckk = rodrigues([H2(:,1:2) cross(H2(:,1),H2(:,2))]);
20 Tckk = H2(:,3);
21 eval(['omc_' num2str(kk) ' = omckk;']);
22 eval(['Tc_' num2str(kk) ' = Tckk;']);
23 end;
24
25 eval(['init_param = [init_param; omc_' num2str(kk) '; Tc_' num2str(kk) '];']);
26end;
27
28init_param = [init_param;cc];
29
30
31
32%-------------------- Main Optimization:
33
34fprintf(1,'\nRe-Optimization...\n')
35
36
37param = init_param;
38change = 1;
39
40iter = 0;
41
42fprintf(1,'Iteration ');
43
44while (change > 1e-6)&(iter < 10),
45
46 fprintf(1,'%d...',iter+1);
47
48 JJ = [];
49 ex = [];
50
51 c = param(6*n_ima + 4 + 3:6*n_ima + 5 + 3);
52 f = param(1:2);
53 k = param(3:6);
54
55 for kk = 1:n_ima,
56
57 omckk = param(4+6*(kk-1) + 3:6*kk + 3);
58
59 Tckk = param(6*kk+1 + 3:6*kk+3 + 3);
60
61 eval(['X_kk = X_' num2str(kk) ';']);
62 eval(['x_kk = x_' num2str(kk) ';']);
63
64 Np = size(X_kk,2);
65
66 JJkk = zeros(2*Np,n_ima * 6 + 8);
67
68 [x,dxdom,dxdT,dxdf,dxdc,dxdk] = project_points(X_kk,omckk,Tckk,f,c,k);
69
70 exkk = x_kk - x;
71
72 ex = [ex;exkk(:)];
73
74 JJkk(:,1:2) = dxdf;
75 JJkk(:,3:6) = dxdk;
76 JJkk(:,4+6*(kk-1) + 3:6*kk + 3) = dxdom;
77 JJkk(:,6*kk+1 + 3:6*kk+3 + 3) = dxdT;
78 JJkk(:,6*n_ima + 4 + 3:6*n_ima + 5 + 3) = dxdc;
79
80 JJ = [JJ;JJkk];
81
82 end;
83
84 param_innov = inv(JJ'*JJ)*(JJ')*ex;
85 param_up = param + param_innov;
86 change = norm(param_innov)/norm(param_up);
87 param = param_up;
88 iter = iter + 1;
89
90end;
91
92fprintf(1,'\n');
93
94
95sol_with_center = param;
96
97solution = sol_with_center;
98
99
100%%% Extraction of the final intrinsic and extrinsic paramaters:
101
102extract_parameters;
103comp_error_calib;
104
105fprintf(1,'\n\nCalibration results with principal point estimation:\n\n');
106fprintf(1,'Focal Length: fc = [ %3.5f %3.5f]\n',fc);
107fprintf(1,'Principal point: cc = [ %3.5f %3.5f]\n',cc);
108fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f]\n',kc);
109fprintf(1,'Pixel error: err = [ %3.5f %3.5f]\n\n',err_std);
110
111
112%%%%%%%%%%%%%%%%%%%% GRAPHICAL OUTPUT %%%%%%%%%%%%%%%%%%%%%%%%
113
114graphout_calib;
115
116
117
118fprintf(1,'Note: If the solution is not satisfactory, select solution without center estimation.\n\n');
119
120
121%%%%%%%%%%%%%% Save all the Calibration results:
122
123disp('Save calibration results under Calib_Results.mat');
124
125string_save = 'save Calib_Results fc kc cc ex x y solution sol_with_center solution_init history wintx winty n_ima type_numbering N_slots small_calib_image first_num image_numbers format_image calib_name Hcal Wcal nx ny map dX_default dY_default KK inv_KK dX dY';
126
127for kk = 1:n_ima,
128 string_save = [string_save ' X_' num2str(kk) ' x_' num2str(kk) ' y_' num2str(kk) ' ex_' num2str(kk) ' omc_' num2str(kk) ' Rc_' num2str(kk) ' Tc_' num2str(kk) ' H_' num2str(kk) ' Hini_' num2str(kk) ' n_sq_x_' num2str(kk) ' n_sq_y_' num2str(kk) ' wintx_' num2str(kk) ' winty_' num2str(kk) ' dX_' num2str(kk) ' dY_' num2str(kk)];
129end;
130
131eval(string_save);
132
133return;
134
135if exist('calib_data.mat'),
136 ccc = computer;
137 if ccc(1)=='P',
138 eval('!del calib_data.mat');
139 else
140 eval('!rm calib_data.mat');
141 end;
142end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim_iter.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim_iter.m
new file mode 100755
index 0000000..a076214
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/go_calib_optim_iter.m
@@ -0,0 +1,332 @@
1%go_calib_optim_iter
2%
3%Main calibration function. Computes the intrinsic andextrinsic parameters.
4%Runs as a script.
5%
6%INPUT: x_1,x_2,x_3,...: Feature locations on the images
7% X_1,X_2,X_3,...: Corresponding grid coordinates
8%
9%OUTPUT: fc: Camera focal length
10% cc: Principal point coordinates
11% kc: Distortion coefficients
12% KK: The camera matrix (containing fc and cc)
13% omc_1,omc_2,omc_3,...: 3D rotation vectors attached to the grid positions in space
14% Tc_1,Tc_2,Tc_3,...: 3D translation vectors attached to the grid positions in space
15% Rc_1,Rc_2,Rc_3,...: 3D rotation matrices corresponding to the omc vectors
16%
17%Method: Minimizes the pixel reprojection error in the least squares sense over the intrinsic
18% camera parameters, and the extrinsic parameters (3D locations of the grids in space)
19%
20%Note: If the intrinsic camera parameters (fc, cc, kc) do not exist before, they are initialized through
21% the function init_intrinsic_param.m. Otherwise, the variables in memory are used as initial guesses.
22%
23%Note: The row vector active_images consists of zeros and ones. To deactivate an image, set the
24% corresponding entry in the active_images vector to zero.
25%
26%VERY IMPORTANT: This function works for 2D and 3D calibration rigs, except for init_intrinsic_param.m
27%that is so far implemented to work only with 2D rigs.
28%In the future, a more general function will be there.
29%For now, if using a 3D calibration rig, quick_init is set to 1 for an easy initialization of the focal length
30
31
32check_active_images;
33
34
35
36quick_init = 0; % Set to 1 for using a quick init (necessary when using 3D rigs)
37
38
39
40% Check 3D-ness of the calibration rig:
41rig3D = 0;
42for kk = ind_active,
43 eval(['X_kk = X_' num2str(kk) ';']);
44 if is3D(X_kk),
45 rig3D = 1;
46 end;
47end;
48
49
50
51% If the rig is 3D, then no choice: the only valid initialization is manual!
52if rig3D,
53 quick_init = 1;
54end;
55
56
57
58
59alpha = 0.4; % set alpha = 1; for steepest gradient descent
60
61
62% Conditioning threshold for view rejection
63thresh_cond = 1e6;
64
65
66
67
68%% Initialization of the intrinsic parameters (if necessary)
69
70if ~exist('cc'),
71 fprintf(1,'Initialization of the principal point at the center of the image.\n');
72 cc = [(nx-1)/2;(ny-1)/2];
73end;
74
75
76if ~exist('kc'),
77 fprintf(1,'Initialization of the image distortion to zero.\n');
78 kc = zeros(4,1);
79end;
80
81
82if ~exist('fc')& quick_init,
83 FOV_angle = 35; % Initial camera field of view in degrees
84 fprintf(1,['Initialization of the focal length to a FOV of ' num2str(FOV_angle) ' degrees.\n']);
85 fc = (nx/2)/tan(pi*FOV_angle/360) * ones(2,1);
86end;
87
88
89if ~exist('fc'),
90 % Initialization of the intrinsic parameters:
91 fprintf(1,'Initialization of the intrinsic parameters using the vanishing points of planar patterns.\n')
92 init_intrinsic_param; % The right way to go (if quick_init is not active)!
93end;
94
95
96
97%% Initialization of the extrinsic parameters for global minimization:
98
99init_param = [fc;kc];
100
101for kk = 1:n_ima,
102
103 if exist(['x_' num2str(kk)]),
104
105 eval(['x_kk = x_' num2str(kk) ';']);
106 eval(['X_kk = X_' num2str(kk) ';']);
107
108 if (isnan(x_kk(1,1))),
109 if active_images(kk),
110 fprintf(1,'Warning: Cannot calibrate with image %d. Need to extract grid corners first.\n',kk)
111 fprintf(1,' Set active_images(%d)=1; and run Extract grid corners.\n',kk)
112 end;
113 active_images(kk) = 0;
114 end;
115 if active_images(kk),
116 [omckk,Tckk] = compute_extrinsic_init(x_kk,X_kk,fc,cc,kc);
117 [omckk,Tckk,Rckk,JJ_kk] = compute_extrinsic_refine(omckk,Tckk,x_kk,X_kk,fc,cc,kc,20,thresh_cond);
118 if cond(JJ_kk)> thresh_cond,
119 active_images(kk) = 0;
120 omckk = NaN*ones(3,1);
121 Tckk = NaN*ones(3,1);
122 fprintf(1,'\nWarning: View #%d ill-conditioned. This image is now set inactive.\n',kk)
123 desactivated_images = [desactivated_images kk];
124 end;
125 if isnan(omckk(1,1)),
126 %fprintf(1,'\nWarning: Desactivating image %d. Re-activate it later by typing:\nactive_images(%d)=1;\nand re-run optimization\n',[kk kk])
127 active_images(kk) = 0;
128 end;
129 else
130 omckk = NaN*ones(3,1);
131 Tckk = NaN*ones(3,1);
132 end;
133
134 else
135
136 omckk = NaN*ones(3,1);
137 Tckk = NaN*ones(3,1);
138
139 if active_images(kk),
140 fprintf(1,'Warning: Cannot calibrate with image %d. Need to extract grid corners first.\n',kk)
141 fprintf(1,' Set active_images(%d)=1; and run Extract grid corners.\n',kk)
142 end;
143
144 active_images(kk) = 0;
145
146 end;
147
148 eval(['omc_' num2str(kk) ' = omckk;']);
149 eval(['Tc_' num2str(kk) ' = Tckk;']);
150
151 eval(['init_param = [init_param; omc_' num2str(kk) '; Tc_' num2str(kk) '];']);
152
153end;
154
155
156check_active_images;
157
158init_param = [init_param;cc];
159
160%-------------------- Main Optimization:
161
162fprintf(1,'\nMain calibration optimization procedure - Number of images: %d\n',length(ind_active));
163
164
165% The following vector helps to select the variables to update:
166ind_Jac = find([ones(6,1);reshape(ones(6,1)*active_images,6*n_ima,1);ones(2,1)])';
167
168param = init_param;
169change = 1;
170
171iter = 0;
172
173fprintf(1,'Gradient descent iterations: ');
174
175param_list = param;
176
177MaxIter = 30;
178
179
180while (change > 1e-6)&(iter < MaxIter),
181
182 fprintf(1,'%d...',iter+1);
183
184
185 %% The first step consists of updating the whole vector of knowns (intrinsic + extrinsic of active
186 %% images) through a one step steepest gradient descent.
187
188 JJ = [];
189 ex = [];
190
191 c = param(6*n_ima + 4 + 3:6*n_ima + 5 + 3);
192 f = param(1:2);
193 k = param(3:6);
194
195 for kk = 1:n_ima,
196
197 if active_images(kk),
198
199 omckk = param(4+6*(kk-1) + 3:6*kk + 3);
200
201 Tckk = param(6*kk+1 + 3:6*kk+3 + 3);
202
203 if isnan(omckk(1)),
204 fprintf(1,'Intrinsic parameters at frame %d do not exist\n',kk);
205 return;
206 end;
207
208 eval(['X_kk = X_' num2str(kk) ';']);
209 eval(['x_kk = x_' num2str(kk) ';']);
210
211 Np = size(X_kk,2);
212
213 JJkk = zeros(2*Np,n_ima * 6 + 8);
214
215 [x,dxdom,dxdT,dxdf,dxdc,dxdk] = project_points(X_kk,omckk,Tckk,f,c,k);
216
217 exkk = x_kk - x;
218
219 ex = [ex;exkk(:)];
220
221 JJkk(:,1:2) = dxdf;
222 JJkk(:,3:6) = dxdk;
223 JJkk(:,4+6*(kk-1) + 3:6*kk + 3) = dxdom;
224 JJkk(:,6*kk+1 + 3:6*kk+3 + 3) = dxdT;
225 JJkk(:,6*n_ima + 4 + 3:6*n_ima + 5 + 3) = dxdc;
226
227 JJ = [JJ;JJkk];
228
229
230 % Check if this view is ill-conditioned:
231 JJ_kk = [dxdom dxdT];
232 if cond(JJ_kk)> thresh_cond,
233 active_images(kk) = 0;
234 fprintf(1,'\nWarning: View #%d ill-conditioned. This image is now set inactive.\n',kk)
235 desactivated_images = [desactivated_images kk];
236 param(4+6*(kk-1) + 3:6*kk+3 + 3) = NaN*ones(6,1);
237 end;
238
239
240 end;
241
242 end;
243
244
245 % List of active images (necessary if changed):
246 check_active_images;
247 ind_Jac = find([ones(6,1);reshape(ones(6,1)*active_images,6*n_ima,1);ones(2,1)])';
248
249
250 JJ = JJ(:,ind_Jac);
251
252 JJ2 = JJ'*JJ;
253
254
255 % Smoothing coefficient:
256
257 alpha2 = 1-(1-alpha)^(iter+1); %set to 1 to undo any smoothing!
258
259
260 param_innov = alpha2*inv(JJ2)*(JJ')*ex;
261 param_up = param(ind_Jac) + param_innov;
262 param(ind_Jac) = param_up;
263
264
265 % New intrinsic parameters:
266
267 fc_current = param(1:2);
268 cc_current = param(6*n_ima + 4 + 3:6*n_ima + 5 + 3);
269 kc_current = param(3:6);
270
271
272 % Change on the intrinsic parameters:
273 change = norm([fc_current;cc_current] - [f;c])/norm([fc_current;cc_current]);
274
275
276 %% Second step: (optional) - It makes convergence faster, and the region of convergence LARGER!!!
277 %% Recompute the extrinsic parameters only using compute_extrinsic.m (this may be useful sometimes)
278 %% The complete gradient descent method is useful to precisely update the intrinsic parameters.
279
280 MaxIter2 = 20;
281
282 for kk = 1:n_ima,
283 if active_images(kk),
284 omc_current = param(4+6*(kk-1) + 3:6*kk + 3);
285 Tc_current = param(6*kk+1 + 3:6*kk+3 + 3);
286 eval(['X_kk = X_' num2str(kk) ';']);
287 eval(['x_kk = x_' num2str(kk) ';']);
288 [omc_current,Tc_current] = compute_extrinsic_init(x_kk,X_kk,fc_current,cc_current,kc_current);
289 [omckk,Tckk,Rckk,JJ_kk] = compute_extrinsic_refine(omc_current,Tc_current,x_kk,X_kk,fc_current,cc_current,kc_current,MaxIter2,thresh_cond);
290 if cond(JJ_kk)> thresh_cond,
291 active_images(kk) = 0;
292 fprintf(1,'\nWarning: View #%d ill-conditioned. This image is now set inactive.\n',kk)
293 desactivated_images = [desactivated_images kk];
294 omckk = NaN*ones(3,1);
295 Tckk = NaN*ones(3,1);
296 end;
297 param(4+6*(kk-1) + 3:6*kk + 3) = omckk;
298 param(6*kk+1 + 3:6*kk+3 + 3) = Tckk;
299 end;
300 end;
301
302 %fprintf(1,'\n\nCalibration results after optimization:\n\n');
303 %fprintf(1,'focal = [%3.5f %3.5f]\n',fc_current);
304 %fprintf(1,'center = [%3.5f %3.5f]\n',cc_current);
305 %fprintf(1,'distortion = [%3.5f %3.5f %3.5f %3.5f]\n\n',kc_current);
306
307
308 param_list = [param_list param];
309
310 iter = iter + 1;
311
312end;
313
314fprintf(1,'\n');
315
316
317sol_with_center = param;
318
319solution = param;
320
321
322%%% Extraction of the final intrinsic and extrinsic paramaters:
323
324extract_parameters;
325comp_error_calib;
326
327fprintf(1,'\n\nCalibration results after optimization:\n\n');
328fprintf(1,'Focal Length: fc = [ %3.5f %3.5f]\n',fc);
329fprintf(1,'Principal point: cc = [ %3.5f %3.5f]\n',cc);
330fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f]\n',kc);
331fprintf(1,'Pixel error: err = [ %3.5f %3.5f]\n\n',err_std);
332
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/graphout_calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/graphout_calib.m
new file mode 100755
index 0000000..a3f7040
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/graphout_calib.m
@@ -0,0 +1,12 @@
1
2
3%%%%%%%%%%%%%%%%%%%% GRAPHICAL OUTPUT %%%%%%%%%%%%%%%%%%%%%%%%
4
5%%%%%%%%%%%%%%%%%%%% SHOW EXTRINSIC RESULTS %%%%%%%%%%%%%%%%%%%%%%%%
6
7ext_calib;
8
9%%%%%%%%%%%%%%%%%%%% REPROJECT ON THE IMAGES %%%%%%%%%%%%%%%%%%%%%%%%
10
11reproject_calib;
12
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/graphout_calib3D.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/graphout_calib3D.m
new file mode 100755
index 0000000..b7edf43
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/graphout_calib3D.m
@@ -0,0 +1,153 @@
1
2
3%%%%%%%%%%%%%%%%%%%% GRAPHICAL OUTPUT %%%%%%%%%%%%%%%%%%%%%%%%
4
5
6% Color code for each image:
7
8colors = 'brgkcm';
9
10
11%%% Show the extrinsic parameters
12
13IP = 8*dX*([0 nx-1 nx-1 0 0 ; 0 0 ny-1 ny-1 0;1 1 1 1 1] - [cc;0]*ones(1,5)) ./ ([fc;1]*ones(1,5));
14
15
16figure(4);
17[a,b] = view;
18
19figure(4);
20plot3(5*[0 dX 0 0 0 0 ],5*[0 0 0 0 0 dX],-5*[0 0 0 dX 0 0 ],'b-','linewidth',2');
21hold on;
22plot3(IP(1,:),IP(3,:),-IP(2,:),'r-','linewidth',2);
23text(6*dX,0,0,'X_c');
24text(-dX,5*dX,0,'Z_c');
25text(0,0,-6*dX,'Y_c');
26text(-dX,-dX,dX,'O_c');
27
28
29for kk = 1:n_ima,
30
31 eval(['XX_kk = X_' num2str(kk) ';']);
32 eval(['omc_kk = omc_' num2str(kk) ';']);
33 eval(['Tc_kk = Tc_' num2str(kk) ';']);
34
35 eval(['nl_sq_x = nl_sq_x_' num2str(kk) ';']);
36 eval(['nl_sq_y = nl_sq_y_' num2str(kk) ';']);
37
38 eval(['nr_sq_x = nr_sq_x_' num2str(kk) ';']);
39 eval(['nr_sq_y = nr_sq_y_' num2str(kk) ';']);
40
41 R_kk = rodrigues(omc_kk);
42
43 YY_kk = R_kk * XX_kk + Tc_kk * ones(1,length(XX_kk));
44
45 YYl_kk = YY_kk(:,1:(nl_sq_x+1)*(nl_sq_y+1));
46 YYr_kk = YY_kk(:,(nl_sq_x+1)*(nl_sq_y+1)+1:end);
47
48
49 eval(['YYl_' num2str(kk) ' = YYl_kk;']);
50 eval(['YYr_' num2str(kk) ' = YYr_kk;']);
51
52 uu = [-dX;-dY;0]/2;
53 uu = R_kk * uu + Tc_kk;
54
55 YYlx = zeros(nl_sq_x+1,nl_sq_y+1);
56 YYly = zeros(nl_sq_x+1,nl_sq_y+1);
57 YYlz = zeros(nl_sq_x+1,nl_sq_y+1);
58
59 YYrx = zeros(nr_sq_x+1,nr_sq_y+1);
60 YYry = zeros(nr_sq_x+1,nr_sq_y+1);
61 YYrz = zeros(nr_sq_x+1,nr_sq_y+1);
62
63 YYlx(:) = YYl_kk(1,:);
64 YYly(:) = YYl_kk(2,:);
65 YYlz(:) = YYl_kk(3,:);
66
67 YYrx(:) = YYr_kk(1,:);
68 YYry(:) = YYr_kk(2,:);
69 YYrz(:) = YYr_kk(3,:);
70
71
72 %keyboard;
73
74 figure(4);
75 hhh= mesh(YYlx,YYlz,-YYly);
76 set(hhh,'edgecolor',colors(rem(kk-1,6)+1),'linewidth',1); %,'facecolor','none');
77 %plot3(YY_kk(1,:),YY_kk(3,:),-YY_kk(2,:),['o' colors(rem(kk-1,6)+1)]);
78 hhh= mesh(YYrx,YYrz,-YYry);
79 set(hhh,'edgecolor',colors(rem(kk-1,6)+1),'linewidth',1);
80 text(uu(1),uu(3),-uu(2),num2str(kk),'fontsize',14,'color',colors(rem(kk-1,6)+1));
81
82end;
83
84figure(4);rotate3d on;
85axis('equal');
86title('Extrinsic parameters');
87%view(60,30);
88view(a,b);
89hold off;
90
91
92
93% Reproject the patterns on the images, and compute the pixel errors:
94
95% Reload the images if necessary
96
97if ~exist('I_1'),
98 ima_read_calib;
99 if no_image_file,
100 return;
101 end;
102end;
103
104
105ex = []; % Global error vector
106x = []; % Detected corners on the image plane
107y = []; % Reprojected points
108
109for kk = 1:n_ima,
110
111 eval(['omckk = omc_' num2str(kk) ';']);
112 eval(['Tckk = Tc_' num2str(kk) ';']);
113
114 Rkk = rodrigues(omckk);
115
116 eval(['y_' num2str(kk) ' = project2_oulu(X_' num2str(kk) ',Rkk,Tckk,fc,cc,kc);']);
117
118 eval(['ex_' num2str(kk) ' = x_' num2str(kk) ' -y_' num2str(kk) ';']);
119
120 eval(['x_kk = x_' num2str(kk) ';']);
121
122 figure(4+kk);
123 eval(['I = I_' num2str(kk) ';']);
124 image(I); hold on;
125 colormap(gray(256));
126 title(['Image ' num2str(kk) ' - Image points (+) and reprojected grid points (o)']);
127 eval(['plot(x_' num2str(kk) '(1,:)+1,x_' num2str(kk) '(2,:)+1,''r+'');']);
128 eval(['plot(y_' num2str(kk) '(1,:)+1,y_' num2str(kk) '(2,:)+1,''' colors(rem(kk-1,6)+1) 'o'');']);
129 zoom on;
130 hold off;
131
132
133 eval(['ex = [ex ex_' num2str(kk) '];']);
134 eval(['x = [x x_' num2str(kk) '];']);
135 eval(['y = [y y_' num2str(kk) '];']);
136
137end;
138
139
140figure(5+n_ima);
141for kk = 1:n_ima,
142 eval(['plot(ex_' num2str(kk) '(1,:),ex_' num2str(kk) '(2,:),''' colors(rem(kk-1,6)+1) '+'');']);
143 hold on;
144end;
145hold off;
146axis('equal');
147title('Reprojection error (in pixel)');
148xlabel('x');
149ylabel('y');
150
151err_std = std(ex')';
152
153fprintf(1,'Pixel error: err = [ %3.5f %3.5f]\n\n',err_std);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/ima_read_calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/ima_read_calib.m
new file mode 100755
index 0000000..09cef59
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/ima_read_calib.m
@@ -0,0 +1,107 @@
1
2if ~exist('calib_name'),
3 data_calib;
4end;
5
6check_active_images;
7
8images_read = active_images;
9
10image_numbers = first_num:n_ima-1+first_num;
11
12no_image_file = 0;
13
14i = 1;
15
16while (i <= n_ima), % & (~no_image_file),
17
18 if active_images(i),
19
20 %fprintf(1,'Loading image %d...\n',i);
21
22 if ~type_numbering,
23 number_ext = num2str(image_numbers(i));
24 else
25 number_ext = sprintf(['%.' num2str(N_slots) 'd'],image_numbers(i));
26 end;
27
28 ima_name = [calib_name number_ext '.' format_image]
29
30 if i == ind_active(1),
31 fprintf(1,'Loading image ');
32 end;
33
34 if exist(ima_name),
35
36 fprintf(1,'%d...',i);
37
38 if format_image(1) == 'p',
39 Ii = double(pgmread(ima_name));
40 else
41 if format_image(1) == 'r',
42 Ii = readras(ima_name);
43 else
44 Ii = double(imread(ima_name));
45 end;
46 end;
47
48 if size(Ii,3)>1,
49 Ii = Ii(:,:,2);
50 end;
51
52 eval(['I_' num2str(i) ' = Ii;']);
53
54 else
55
56 fprintf(1,'%d...',i);
57
58 images_read(i) = 0;
59
60 no_image_file = 1;
61
62 end;
63
64 end;
65
66 i = i+1;
67
68end;
69
70
71if no_image_file,
72
73 fprintf(1,'\nWARNING! Cannot load calibration images\n');
74
75else
76
77 fprintf(1,'\n');
78
79 if size(I_1,1)~=480,
80 small_calib_image = 1;
81 else
82 small_calib_image = 0;
83 end;
84
85 [Hcal,Wcal] = size(I_1); % size of the calibration image
86
87 [ny,nx] = size(I_1);
88
89 clickname = [];
90
91 map = gray(256);
92
93 %string_save = 'save calib_data n_ima type_numbering N_slots image_numbers format_image calib_name Hcal Wcal nx ny map small_calib_image';
94
95 %eval(string_save);
96
97 disp('done');
98 %click_calib;
99
100end;
101
102if ~exist('map'), map = gray(256); end;
103
104
105
106
107
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/init_calib_param.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/init_calib_param.m
new file mode 100755
index 0000000..92e14be
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/init_calib_param.m
@@ -0,0 +1,210 @@
1%init_calib_param
2%
3%Initialization of the intrinsic and extrinsic parameters.
4%Runs as a script.
5%
6%This function is obsolete with init_intrinsic_param called from go_calib_optim
7%
8%INPUT: x_1,x_2,x_3,...: Feature locations on the images
9% X_1,X_2,X_3,...: Corresponding grid coordinates
10%
11%OUTPUT: fc: Camera focal length
12% cc: Principal point coordinates
13% kc: Distortion coefficients
14% KK: The camera matrix (containing fc and cc)
15% omc_1,omc_2,omc_3,...: 3D rotation vectors attached to the grid positions in space
16% Tc_1,Tc_2,Tc_3,...: 3D translation vectors attached to the grid positions in space
17% Rc_1,Rc_2,Rc_3,...: 3D rotation matrices corresponding to the omc vectors
18%
19%Method: Compute the planar homographies H_1, H_2, H_3, ... and computes
20% the focal length fc from orthogonal vanishing points constraint.
21% The principal point cc is assumed at the center of the image.
22% Assumes no image distortion (kc = [0;0;0;0])
23% Once the intrinsic parameters are estimated, the extrinsic parameters
24% are computed for each image.
25%
26%Note: The row vector active_images consists of zeros and ones. To deactivate an image, set the
27% corresponding entry in the active_images vector to zero.
28%
29%
30%Important functions called within that program:
31%
32%compute_homography.m: Computes the planar homography between points on the grid in 3D, and the image plane.
33%
34%compute_extrinsic.m: Computes the location of a grid assuming known intrinsic parameters.
35% This function is called at the initialization step.
36
37
38
39
40check_active_images;
41
42if ~exist(['x_' num2str(ind_active(1)) ]),
43 click_calib;
44end;
45
46
47fprintf(1,'\nInitialization of the calibration parameters - Number of images: %d\n',length(ind_active));
48
49
50% Initialize the homographies:
51
52for kk = 1:n_ima,
53 eval(['x_kk = x_' num2str(kk) ';']);
54 eval(['X_kk = X_' num2str(kk) ';']);
55 if (isnan(x_kk(1,1))),
56 if active_images(kk),
57 fprintf(1,'WARNING: Cannot calibrate with image %d. Need to extract grid corners first.\n',kk)
58 fprintf(1,' Set active_images(%d)=1; and run Extract grid corners.\n',kk)
59 end;
60 active_images(kk) = 0;
61 end;
62 if active_images(kk),
63 eval(['H_' num2str(kk) ' = compute_homography(x_kk,X_kk(1:2,:));']);
64 else
65 eval(['H_' num2str(kk) ' = NaN*ones(3,3);']);
66 end;
67end;
68
69check_active_images;
70
71% initial guess for principal point and distortion:
72
73if ~exist('nx'), [ny,nx] = size(I); end;
74
75c_init = [nx;ny]/2 - 0.5; % initialize at the center of the image
76k_init = [0;0;0;0]; % initialize to zero (no distortion)
77
78
79
80% Compute explicitely the focal length using all the (mutually orthogonal) vanishing points
81% note: The vanihing points are hidden in the planar collineations H_kk
82
83A = [];
84b = [];
85
86% matrix that subtract the principal point:
87Sub_cc = [1 0 -c_init(1);0 1 -c_init(2);0 0 1];
88
89for kk=1:n_ima,
90
91 if active_images(kk),
92
93 eval(['Hkk = H_' num2str(kk) ';']);
94
95 Hkk = Sub_cc * Hkk;
96
97 % Extract vanishing points (direct and diagonals):
98
99 V_hori_pix = Hkk(:,1);
100 V_vert_pix = Hkk(:,2);
101 V_diag1_pix = (Hkk(:,1)+Hkk(:,2))/2;
102 V_diag2_pix = (Hkk(:,1)-Hkk(:,2))/2;
103
104 V_hori_pix = V_hori_pix/norm(V_hori_pix);
105 V_vert_pix = V_vert_pix/norm(V_vert_pix);
106 V_diag1_pix = V_diag1_pix/norm(V_diag1_pix);
107 V_diag2_pix = V_diag2_pix/norm(V_diag2_pix);
108
109 a1 = V_hori_pix(1);
110 b1 = V_hori_pix(2);
111 c1 = V_hori_pix(3);
112
113 a2 = V_vert_pix(1);
114 b2 = V_vert_pix(2);
115 c2 = V_vert_pix(3);
116
117 a3 = V_diag1_pix(1);
118 b3 = V_diag1_pix(2);
119 c3 = V_diag1_pix(3);
120
121 a4 = V_diag2_pix(1);
122 b4 = V_diag2_pix(2);
123 c4 = V_diag2_pix(3);
124
125 A_kk = [a1*a2 b1*b2;
126 a3*a4 b3*b4];
127
128 b_kk = -[c1*c2;c3*c4];
129
130
131 A = [A;A_kk];
132 b = [b;b_kk];
133
134 end;
135
136end;
137
138
139% use all the vanishing points to estimate focal length:
140
141f_init = sqrt(abs(1./(inv(A'*A)*A'*b))); % if using a two-focal model for initial guess
142
143%f_init = sqrt(b'*(sum(A')') / (b'*b)) * ones(2,1); % if single focal length model is used
144
145
146% Global calibration matrix (initial guess):
147
148KK = [f_init(1) 0 c_init(1);0 f_init(2) c_init(2); 0 0 1];
149inv_KK = inv(KK);
150
151
152cc = c_init;
153fc = f_init;
154kc = k_init;
155
156
157% Computing of the extrinsic parameters (from the collineations)
158
159for kk = 1:n_ima,
160
161 if active_images(kk),
162
163
164 eval(['x_kk = x_' num2str(kk) ';']);
165 eval(['X_kk = X_' num2str(kk) ';']);
166
167 [omckk,Tckk] = compute_extrinsic(x_kk,X_kk,fc,cc,kc);
168
169 Rckk = rodrigues(omc_kk);
170
171 else
172
173 omckk = NaN*ones(3,1);
174 Tckk = NaN*ones(3,1);
175 Rckk = NaN*ones(3,3);
176
177 end;
178
179 eval(['omc_' num2str(kk) ' = omckk;']);
180 eval(['Rc_' num2str(kk) ' = Rckk;']);
181 eval(['Tc_' num2str(kk) ' = Tckk;']);
182
183end;
184
185
186% Initialization of the parameters for global minimization:
187
188init_param = [f_init;k_init];
189
190for kk = 1:n_ima,
191 eval(['init_param = [init_param; omc_' num2str(kk) '; Tc_' num2str(kk) '];']);
192end;
193
194solution_init = [init_param;c_init];
195
196solution = solution_init;
197
198comp_error_calib;
199
200fprintf(1,'\n\nCalibration parameters after initialization:\n\n');
201fprintf(1,'Focal Length: fc = [ %3.5f %3.5f]\n',fc);
202fprintf(1,'Principal point: cc = [ %3.5f %3.5f]\n',cc);
203fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f]\n',kc);
204fprintf(1,'Pixel error: err = [ %3.5f %3.5f]\n\n',err_std);
205
206
207%%%%%%%%%%%%%%%%%%%% GRAPHICAL OUTPUT %%%%%%%%%%%%%%%%%%%%%%%%
208
209%graphout_calib;
210
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/init_intrinsic_param.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/init_intrinsic_param.m
new file mode 100755
index 0000000..eac21ba
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/init_intrinsic_param.m
@@ -0,0 +1,153 @@
1%init_intrinsic_param
2%
3%Initialization of the intrinsic parameters.
4%Runs as a script.
5%
6%INPUT: x_1,x_2,x_3,...: Feature locations on the images
7% X_1,X_2,X_3,...: Corresponding grid coordinates
8%
9%OUTPUT: fc: Camera focal length
10% cc: Principal point coordinates
11% kc: Distortion coefficients
12% KK: The camera matrix (containing fc and cc)
13%
14%Method: Computes the planar homographies H_1, H_2, H_3, ... and computes
15% the focal length fc from orthogonal vanishing points constraint.
16% The principal point cc is assumed at the center of the image.
17% Assumes no image distortion (kc = [0;0;0;0])
18%
19%Note: The row vector active_images consists of zeros and ones. To deactivate an image, set the
20% corresponding entry in the active_images vector to zero.
21%
22%
23%Important function called within that program:
24%
25%compute_homography.m: Computes the planar homography between points on the grid in 3D, and the image plane.
26%
27%
28%VERY IMPORTANT: This function works onyl with 2D rigs.
29%In the future, a more general function will be there (working with 3D rigs as well).
30
31
32
33check_active_images;
34
35if ~exist(['x_' num2str(ind_active(1)) ]),
36 click_calib;
37end;
38
39
40fprintf(1,'\nInitialization of the intrinsic parameters - Number of images: %d\n',length(ind_active));
41
42
43% Initialize the homographies:
44
45for kk = 1:n_ima,
46 eval(['x_kk = x_' num2str(kk) ';']);
47 eval(['X_kk = X_' num2str(kk) ';']);
48 if (isnan(x_kk(1,1))),
49 if active_images(kk),
50 fprintf(1,'WARNING: Cannot calibrate with image %d. Need to extract grid corners first.\n',kk)
51 fprintf(1,' Set active_images(%d)=1; and run Extract grid corners.\n',kk)
52 end;
53 active_images(kk) = 0;
54 end;
55 if active_images(kk),
56 eval(['H_' num2str(kk) ' = compute_homography(x_kk,X_kk(1:2,:));']);
57 else
58 eval(['H_' num2str(kk) ' = NaN*ones(3,3);']);
59 end;
60end;
61
62check_active_images;
63
64% initial guess for principal point and distortion:
65
66if ~exist('nx'), [ny,nx] = size(I); end;
67
68c_init = [nx;ny]/2 - 0.5; % initialize at the center of the image
69k_init = [0;0;0;0]; % initialize to zero (no distortion)
70
71
72
73% Compute explicitely the focal length using all the (mutually orthogonal) vanishing points
74% note: The vanihing points are hidden in the planar collineations H_kk
75
76A = [];
77b = [];
78
79% matrix that subtract the principal point:
80Sub_cc = [1 0 -c_init(1);0 1 -c_init(2);0 0 1];
81
82for kk=1:n_ima,
83
84 if active_images(kk),
85
86 eval(['Hkk = H_' num2str(kk) ';']);
87
88 Hkk = Sub_cc * Hkk;
89
90 % Extract vanishing points (direct and diagonals):
91
92 V_hori_pix = Hkk(:,1);
93 V_vert_pix = Hkk(:,2);
94 V_diag1_pix = (Hkk(:,1)+Hkk(:,2))/2;
95 V_diag2_pix = (Hkk(:,1)-Hkk(:,2))/2;
96
97 V_hori_pix = V_hori_pix/norm(V_hori_pix);
98 V_vert_pix = V_vert_pix/norm(V_vert_pix);
99 V_diag1_pix = V_diag1_pix/norm(V_diag1_pix);
100 V_diag2_pix = V_diag2_pix/norm(V_diag2_pix);
101
102 a1 = V_hori_pix(1);
103 b1 = V_hori_pix(2);
104 c1 = V_hori_pix(3);
105
106 a2 = V_vert_pix(1);
107 b2 = V_vert_pix(2);
108 c2 = V_vert_pix(3);
109
110 a3 = V_diag1_pix(1);
111 b3 = V_diag1_pix(2);
112 c3 = V_diag1_pix(3);
113
114 a4 = V_diag2_pix(1);
115 b4 = V_diag2_pix(2);
116 c4 = V_diag2_pix(3);
117
118 A_kk = [a1*a2 b1*b2;
119 a3*a4 b3*b4];
120
121 b_kk = -[c1*c2;c3*c4];
122
123
124 A = [A;A_kk];
125 b = [b;b_kk];
126
127 end;
128
129end;
130
131
132% use all the vanishing points to estimate focal length:
133
134f_init = sqrt(abs(1./(inv(A'*A)*A'*b))); % if using a two-focal model for initial guess
135
136%f_init = sqrt(b'*(sum(A')') / (b'*b)) * ones(2,1); % if single focal length model is used
137
138
139% Global calibration matrix (initial guess):
140
141KK = [f_init(1) 0 c_init(1);0 f_init(2) c_init(2); 0 0 1];
142inv_KK = inv(KK);
143
144
145cc = c_init;
146fc = f_init;
147kc = k_init;
148
149
150fprintf(1,'\n\nCalibration parameters after initialization:\n\n');
151fprintf(1,'Focal Length: fc = [ %3.5f %3.5f]\n',fc);
152fprintf(1,'Principal point: cc = [ %3.5f %3.5f]\n',cc);
153fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f]\n\n',kc);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/is3D.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/is3D.m
new file mode 100755
index 0000000..ab00b3d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/is3D.m
@@ -0,0 +1,19 @@
1function test = is3D(X),
2
3
4Np = size(X,2);
5
6%% Check for planarity of the structure:
7
8X_mean = mean(X')';
9
10Y = X - (X_mean*ones(1,Np));
11
12YY = Y*Y';
13
14[U,S,V] = svd(YY);
15
16r = S(3,3)/S(2,2);
17
18test = (r > 1e-3);
19
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loading_calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loading_calib.m
new file mode 100755
index 0000000..a0f50d2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loading_calib.m
@@ -0,0 +1,10 @@
1if ~exist('Calib_Results.mat'),
2 fprintf(1,'\nCalibration file Calib_Results.mat not found!\n');
3 return;
4end;
5
6fprintf(1,'\nLoading calibration results from Calib_Results.mat\n');
7
8load Calib_Results
9
10fprintf(1,'done\n');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loadinr.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loadinr.m
new file mode 100755
index 0000000..91b6f89
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loadinr.m
@@ -0,0 +1,52 @@
1%LOADINR Load an INRIMAGE format file
2%
3% LOADINR(filename, im)
4%
5% Load an INRIA image format file and return it as a matrix
6%
7% SEE ALSO: saveinr
8%
9% Copyright (c) Peter Corke, 1999 Machine Vision Toolbox for Matlab
10
11
12% Peter Corke 1996
13
14function im = loadinr(fname, im)
15
16 fid = fopen(fname, 'r');
17
18 s = fgets(fid);
19 if strcmp(s(1:12), '#INRIMAGE-4#') == 0,
20 error('not INRIMAGE format');
21 end
22
23 % not very complete, only looks for the X/YDIM keys
24 while 1,
25 s = fgets(fid);
26 n = length(s) - 1;
27 if s(1) == '#',
28 break
29 end
30 if strcmp(s(1:5), 'XDIM='),
31 cols = str2num(s(6:n));
32 end
33 if strcmp(s(1:5), 'YDIM='),
34 rows = str2num(s(6:n));
35 end
36 if strcmp(s(1:4), 'CPU='),
37 if strcmp(s(5:n), 'sun') == 0,
38 error('not sun data ordering');
39 end
40 end
41
42 end
43 disp(['INRIMAGE format file ' num2str(rows) ' x ' num2str(cols)])
44
45 % now the binary data
46 fseek(fid, 256, 'bof');
47 [im count] = fread(fid, [cols rows], 'float32');
48 im = im';
49 if count ~= (rows*cols),
50 error('file too short');
51 end
52 fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loadpgm.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loadpgm.m
new file mode 100755
index 0000000..9386111
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loadpgm.m
@@ -0,0 +1,89 @@
1%LOADPGM Load a PGM image
2%
3% I = loadpgm(filename)
4%
5% Returns a matrix containing the image loaded from the PGM format
6% file filename. Handles ASCII (P2) and binary (P5) PGM file formats.
7%
8% If the filename has no extension, and open fails, a '.pgm' will
9% be appended.
10%
11%
12% Copyright (c) Peter Corke, 1999 Machine Vision Toolbox for Matlab
13
14
15% Peter Corke 1994
16
17function I = loadpgm(file)
18 white = [' ' 9 10 13]; % space, tab, lf, cr
19 white = setstr(white);
20
21 fid = fopen(file, 'r');
22 if fid < 0,
23 fid = fopen([file '.pgm'], 'r');
24 end
25 if fid < 0,
26 error('Couldn''t open file');
27 end
28
29 magic = fread(fid, 2, 'char');
30 while 1
31 c = fread(fid,1,'char');
32 if c == '#',
33 fgetl(fid);
34 elseif ~any(c == white)
35 fseek(fid, -1, 'cof'); % unputc()
36 break;
37 end
38 end
39 cols = fscanf(fid, '%d', 1);
40 while 1
41 c = fread(fid,1,'char');
42 if c == '#',
43 fgetl(fid);
44 elseif ~any(c == white)
45 fseek(fid, -1, 'cof'); % unputc()
46 break;
47 end
48 end
49 rows = fscanf(fid, '%d', 1);
50 while 1
51 c = fread(fid,1,'char');
52 if c == '#',
53 fgetl(fid);
54 elseif ~any(c == white)
55 fseek(fid, -1, 'cof'); % unputc()
56 break;
57 end
58 end
59 maxval = fscanf(fid, '%d', 1);
60 while 1
61 c = fread(fid,1,'char');
62 if c == '#',
63 fgetl(fid);
64 elseif ~any(c == white)
65 fseek(fid, -1, 'cof'); % unputc()
66 break;
67 end
68 end
69 if magic(1) == 'P',
70 if magic(2) == '2',
71 disp(['ASCII PGM file ' num2str(rows) ' x ' num2str(cols)])
72 I = fscanf(fid, '%d', [cols rows])';
73 elseif magic(2) == '5',
74 disp(['Binary PGM file ' num2str(rows) ' x ' num2str(cols)])
75 if maxval == 1,
76 fmt = 'unint1';
77 elseif maxval == 15,
78 fmt = 'uint4';
79 elseif maxval == 255,
80 fmt = 'uint8';
81 elseif maxval == 2^32-1,
82 fmt = 'uint32';
83 end
84 I = fread(fid, [cols rows], fmt)';
85 else
86 disp('Not a PGM file');
87 end
88 end
89 fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loadppm.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loadppm.m
new file mode 100755
index 0000000..6dd7ca4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/loadppm.m
@@ -0,0 +1,101 @@
1%LOADPPM Load a PPM image
2%
3% [R,G,B] = loadppm(filename)
4%
5% Returns a matrix containing the image loaded from the PPM format
6% file filename. Handles ASCII (P3) and binary (P6) PPM file formats.
7%
8% If the filename has no extension, and open fails, a '.ppm' and
9% '.pnm' extension will be tried.
10%
11% SEE ALSO: saveppm loadpgm
12%
13% Copyright (c) Peter Corke, 1999 Machine Vision Toolbox for Matlab
14
15
16% Peter Corke 1994
17
18function [R,G,B] = loadppm(file)
19 white = [' ' 9 10 13]; % space, tab, lf, cr
20 white = setstr(white);
21
22 fid = fopen(file, 'r');
23 if fid < 0,
24 fid = fopen([file '.ppm'], 'r');
25 end
26 if fid < 0,
27 fid = fopen([file '.pnm'], 'r');
28 end
29 if fid < 0,
30 error('Couldn''t open file');
31 end
32
33 magic = fread(fid, 2, 'char');
34 while 1
35 c = fread(fid,1,'char');
36 if c == '#',
37 fgetl(fid);
38 elseif ~any(c == white)
39 fseek(fid, -1, 'cof'); % unputc()
40 break;
41 end
42 end
43 cols = fscanf(fid, '%d', 1);
44 while 1
45 c = fread(fid,1,'char');
46 if c == '#',
47 fgetl(fid);
48 elseif ~any(c == white)
49 fseek(fid, -1, 'cof'); % unputc()
50 break;
51 end
52 end
53 rows = fscanf(fid, '%d', 1);
54 while 1
55 c = fread(fid,1,'char');
56 if c == '#',
57 fgetl(fid);
58 elseif ~any(c == white)
59 fseek(fid, -1, 'cof'); % unputc()
60 break;
61 end
62 end
63 maxval = fscanf(fid, '%d', 1);
64 while 1
65 c = fread(fid,1,'char');
66 if c == '#',
67 fgetl(fid);
68 elseif ~any(c == white)
69 fseek(fid, -1, 'cof'); % unputc()
70 break;
71 end
72 end
73 if magic(1) == 'P',
74 if magic(2) == '3',
75 disp(['ASCII PPM file ' num2str(rows) ' x ' num2str(cols)])
76 I = fscanf(fid, '%d', [cols*3 rows]);
77 elseif magic(2) == '6',
78 disp(['Binary PPM file ' num2str(rows) ' x ' num2str(cols)])
79 if maxval == 1,
80 fmt = 'unint1';
81 elseif maxval == 15,
82 fmt = 'uint4';
83 elseif maxval == 255,
84 fmt = 'uint8';
85 elseif maxval == 2^32-1,
86 fmt = 'uint32';
87 end
88 I = fread(fid, [cols*3 rows], fmt);
89 else
90 disp('Not a PPM file');
91 end
92 end
93 %
94 % now the matrix has interleaved columns of R, G, B
95 %
96 I = I';
97 size(I)
98 R = I(:,1:3:(cols*3));
99 G = I(:,2:3:(cols*3));
100 B = I(:,3:3:(cols*3));
101 fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/mean_std_robust.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/mean_std_robust.m
new file mode 100755
index 0000000..0d18a62
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/mean_std_robust.m
@@ -0,0 +1,7 @@
1function [m,s] = mean_std_robust(x);
2
3x = x(:);
4
5m = median(x);
6
7s = median(abs(x - m))*1.4836;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/multi_error_oulu.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/multi_error_oulu.m
new file mode 100755
index 0000000..8657158
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/multi_error_oulu.m
@@ -0,0 +1,49 @@
1function ex = multi_error_oulu(param,n_ima,cc);
2
3global X_1 x_1 X_2 x_2 X_3 x_3 X_4 x_4 X_5 x_5 X_6 x_6 X_7 x_7 X_8 x_8 X_9 x_9 X_10 x_10 X_11 x_11 X_12 x_12 X_13 x_13 X_14 x_14 X_15 x_15 X_16 x_16 X_17 x_17 X_18 x_18 X_19 x_19 X_20 x_20 X_21 x_21 X_22 x_22 X_23 x_23 X_24 x_24 X_25 x_25 X_26 x_26 X_27 x_27 X_28 x_28 X_29 x_29 X_30 x_30
4
5fc = param(1:2);
6kc = param(3:6);
7%ppc = param(5:6);
8
9if length(param) > 6*n_ima + 3 + 3,
10
11 cc = param(6*n_ima + 4 + 3:6*n_ima + 5 + 3);
12
13 if length(param) > 6*n_ima + 5 + 3,
14
15 c_d = param(6*n_ima + 6 + 3 :6*n_ima + 7 + 3);
16
17 else
18
19 c_d = [0;0];
20
21 end;
22
23else
24
25 c_d = [0;0];
26
27end;
28
29
30
31ex = [];
32
33%keyboard;
34
35for kk = 1:n_ima,
36
37 omckk = param(4+6*(kk-1) + 3:6*kk + 3);
38
39 Tckk = param(6*kk+1 + 3:6*kk+3 + 3);
40
41 Rkk = rodrigues(omckk);
42
43 eval(['ykk = project2_oulu(X_' num2str(kk) ',Rkk,Tckk,fc,cc,kc);']);
44
45 eval(['exkk = x_' num2str(kk) ' -ykk;']);
46
47 ex = [ex;exkk(:)];
48
49end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/normalize.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/normalize.m
new file mode 100755
index 0000000..0a37378
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/normalize.m
@@ -0,0 +1,32 @@
1function [xn] = normalize(x_kk,fc,cc,kc),
2
3%normalize
4%
5%[xn] = normalize(x_kk,fc,cc,kc)
6%
7%Computes the normalized coordinates xn given the pixel coordinates x_kk
8%and the intrinsic camera parameters fc, cc and kc.
9%
10%INPUT: x_kk: Feature locations on the images
11% fc: Camera focal length
12% cc: Principal point coordinates
13% kc: Distortion coefficients
14%
15%OUTPUT: xn: Normalized feature locations on the image plane (a 2XN matrix)
16%
17%Important functions called within that program:
18%
19%comp_distortion_oulu: undistort pixel coordinates.
20
21
22
23% First subtract principal point, and divide by the focal length:
24
25x_distort = [(x_kk(1,:) - cc(1))/fc(1);(x_kk(2,:) - cc(2))/fc(2)];
26
27
28%Compensate for lens distortion:
29
30xn = comp_distortion_oulu(x_distort,kc);
31
32
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/pgmread.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/pgmread.m
new file mode 100755
index 0000000..c96ccb7
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/pgmread.m
@@ -0,0 +1,26 @@
1function img = pgmread(filename)
2% function img = pgmread(filename)
3% this is my version of pgmread for the pgm file created by XV.
4%
5% this program also corrects for the shifts in the image from pm file.
6
7fid = fopen(filename,'r');
8fscanf(fid, 'P5\n');
9cmt = '#';
10while findstr(cmt, '#'),
11 cmt = fgets(fid);
12 if length(findstr(cmt, '#')) ~= 1,
13 YX = sscanf(cmt, '%d %d');
14 y = YX(1); x = YX(2);
15 end
16end
17
18%fgets(fid);
19
20%img = fscanf(fid,'%d',size);
21%img = img';
22
23img = fread(fid,[y,x],'uint8');
24img = img';
25fclose(fid);
26
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/project2_oulu.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/project2_oulu.m
new file mode 100755
index 0000000..c5c4a34
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/project2_oulu.m
@@ -0,0 +1,53 @@
1function [x] = project2_oulu(X,R,T,f,t,k)
2%PROJECT Subsidiary to calib
3
4% (c) Pietro Perona -- March 24, 1994
5% California Institute of Technology
6% Pasadena, CA
7%
8% Renamed because project exists in matlab 5.2!!!
9% Now uses the more elaborate intrinsic model from Oulu
10
11
12
13[m,n] = size(X);
14
15Y = R*X + T*ones(1,n);
16Z = Y(3,:);
17
18f = f(:); %% make a column vector
19if length(f)==1,
20 f = [f f]';
21end;
22
23x = (Y(1:2,:) ./ (ones(2,1) * Z)) ;
24
25
26radius_2 = x(1,:).^2 + x(2,:).^2;
27
28if length(k) > 1,
29
30 radial_distortion = 1 + ones(2,1) * ((k(1) * radius_2) + (k(2) * radius_2.^2));
31
32 if length(k) < 4,
33
34 delta_x = zeros(2,n);
35
36 else
37
38 delta_x = [2*k(3)*x(1,:).*x(2,:) + k(4)*(radius_2 + 2*x(1,:).^2) ;
39 k(3) * (radius_2 + 2*x(2,:).^2)+2*k(4)*x(1,:).*x(2,:)];
40
41 end;
42
43
44else
45
46 radial_distortion = 1 + ones(2,1) * ((k(1) * radius_2));
47
48 delta_x = zeros(2,n);
49
50end;
51
52
53x = (x .* radial_distortion + delta_x).* (f * ones(1,n)) + t*ones(1,n);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/project_points.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/project_points.m
new file mode 100755
index 0000000..1823490
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/project_points.m
@@ -0,0 +1,276 @@
1function [xp,dxpdom,dxpdT,dxpdf,dxpdc,dxpdk] = project_points(X,om,T,f,c,k)
2
3%project_points.m
4%
5%[xp,dxpdom,dxpdT,dxpdf,dxpdc,dxpdk] = project_points(X,om,T,f,c,k)
6%
7%Projects a 3D structure onto the image plane.
8%
9%INPUT: X: 3D structure in the world coordinate frame (3xN matrix for N points)
10% (om,T): Rigid motion parameters between world coordinate frame and camera reference frame
11% om: rotation vector (3x1 vector); T: translation vector (3x1 vector)
12% f: camera focal length in units of horizontal and vertical pixel units (2x1 vector)
13% c: principal point location in pixel units (2x1 vector)
14% k: Distortion coefficients (radial and tangential) (4x1 vector)
15%
16%OUTPUT: xp: Projected pixel coordinates (2xN matrix for N points)
17% dxpdom: Derivative of xp with respect to om ((2N)x3 matrix)
18% dxpdT: Derivative of xp with respect to T ((2N)x3 matrix)
19% dxpdf: Derivative of xp with respect to f ((2N)x2 matrix)
20% dxpdc: Derivative of xp with respect to c ((2N)x2 matrix)
21% dxpdk: Derivative of xp with respect to k ((2N)x4 matrix)
22%
23%Definitions:
24%Let P be a point in 3D of coordinates X in the world reference frame (stored in the matrix X)
25%The coordinate vector of P in the camera reference frame is: Xc = R*X + T
26%where R is the rotation matrix corresponding to the rotation vector om: R = rodrigues(om);
27%call x, y and z the 3 coordinates of Xc: x = Xc(1); y = Xc(2); z = Xc(3);
28%The pinehole projection coordinates of P is [a;b] where a=x/z and b=y/z.
29%call r^2 = a^2 + b^2.
30%The distorted point coordinates are: xd = [xx;yy] where:
31%
32%xx = a * (1 + kc(1)*r^2 + kc(2)*r^4) + 2*kc(3)*a*b + kc(4)*(r^2 + 2*a^2);
33%yy = b * (1 + kc(1)*r^2 + kc(2)*r^4) + kc(3)*(r^2 + 2*b^2) + 2*kc(4)*a*b;
34%
35%The left terms correspond to radial distortion, the right terms correspond to tangential distortion
36%
37%Fianlly, convertion into pixel coordinates: The final pixel coordinates vector xp=[xxp;yyp] where:
38%
39%xxp = f(1)*xx + c(1)
40%yyp = f(2)*yy + c(2)
41%
42%
43%NOTE: About 90 percent of the code takes care fo computing the Jacobian matrices
44%
45%
46%Important function called within that program:
47%
48%rodrigues.m: Computes the rotation matrix corresponding to a rotation vector
49%
50%rigid_motion.m: Computes the rigid motion transformation of a given structure
51
52
53
54if nargin < 6,
55 k = zeros(4,1);
56 if nargin < 5,
57 c = zeros(2,1);
58 if nargin < 4,
59 f = ones(2,1);
60 if nargin < 3,
61 T = zeros(3,1);
62 if nargin < 2,
63 om = zeros(3,1);
64 if nargin < 1,
65 error('Need at least a 3D structure to project (in project_points.m)');
66 return;
67 end;
68 end;
69 end;
70 end;
71 end;
72end;
73
74
75[m,n] = size(X);
76
77[Y,dYdom,dYdT] = rigid_motion(X,om,T);
78
79
80inv_Z = 1./Y(3,:);
81
82x = (Y(1:2,:) .* (ones(2,1) * inv_Z)) ;
83
84
85bb = (-x(1,:) .* inv_Z)'*ones(1,3);
86cc = (-x(2,:) .* inv_Z)'*ones(1,3);
87
88
89dxdom = zeros(2*n,3);
90dxdom(1:2:end,:) = ((inv_Z')*ones(1,3)) .* dYdom(1:3:end,:) + bb .* dYdom(3:3:end,:);
91dxdom(2:2:end,:) = ((inv_Z')*ones(1,3)) .* dYdom(2:3:end,:) + cc .* dYdom(3:3:end,:);
92
93dxdT = zeros(2*n,3);
94dxdT(1:2:end,:) = ((inv_Z')*ones(1,3)) .* dYdT(1:3:end,:) + bb .* dYdT(3:3:end,:);
95dxdT(2:2:end,:) = ((inv_Z')*ones(1,3)) .* dYdT(2:3:end,:) + cc .* dYdT(3:3:end,:);
96
97
98% Add distortion:
99
100r2 = x(1,:).^2 + x(2,:).^2;
101
102
103
104dr2dom = 2*((x(1,:)')*ones(1,3)) .* dxdom(1:2:end,:) + 2*((x(2,:)')*ones(1,3)) .* dxdom(2:2:end,:);
105dr2dT = 2*((x(1,:)')*ones(1,3)) .* dxdT(1:2:end,:) + 2*((x(2,:)')*ones(1,3)) .* dxdT(2:2:end,:);
106
107
108r4 = r2.^2;
109
110dr4dom = 2*((r2')*ones(1,3)) .* dr2dom;
111dr4dT = 2*((r2')*ones(1,3)) .* dr2dT;
112
113
114% Radial distortion:
115
116cdist = 1 + k(1) * r2 + k(2) * r4;
117
118dcdistdom = k(1) * dr2dom + k(2) * dr4dom;
119dcdistdT = k(1) * dr2dT+ k(2) * dr4dT;
120dcdistdk = [ r2' r4' zeros(n,2)];
121
122
123xd1 = x .* (ones(2,1)*cdist);
124
125dxd1dom = zeros(2*n,3);
126dxd1dom(1:2:end,:) = (x(1,:)'*ones(1,3)) .* dcdistdom;
127dxd1dom(2:2:end,:) = (x(2,:)'*ones(1,3)) .* dcdistdom;
128coeff = (reshape([cdist;cdist],2*n,1)*ones(1,3));
129dxd1dom = dxd1dom + coeff.* dxdom;
130
131dxd1dT = zeros(2*n,3);
132dxd1dT(1:2:end,:) = (x(1,:)'*ones(1,3)) .* dcdistdT;
133dxd1dT(2:2:end,:) = (x(2,:)'*ones(1,3)) .* dcdistdT;
134dxd1dT = dxd1dT + coeff.* dxdT;
135
136dxd1dk = zeros(2*n,4);
137dxd1dk(1:2:end,:) = (x(1,:)'*ones(1,4)) .* dcdistdk;
138dxd1dk(2:2:end,:) = (x(2,:)'*ones(1,4)) .* dcdistdk;
139
140
141
142% tangential distortion:
143
144a1 = 2.*x(1,:).*x(2,:);
145a2 = r2 + 2*x(1,:).^2;
146a3 = r2 + 2*x(2,:).^2;
147
148delta_x = [k(3)*a1 + k(4)*a2 ;
149 k(3) * a3 + k(4)*a1];
150
151
152ddelta_xdx = zeros(2*n,2*n);
153aa = (2*k(3)*x(2,:)+6*k(4)*x(1,:))'*ones(1,3);
154bb = (2*k(3)*x(1,:)+2*k(4)*x(2,:))'*ones(1,3);
155cc = (6*k(3)*x(2,:)+2*k(4)*x(1,:))'*ones(1,3);
156
157ddelta_xdom = zeros(2*n,3);
158ddelta_xdom(1:2:end,:) = aa .* dxdom(1:2:end,:) + bb .* dxdom(2:2:end,:);
159ddelta_xdom(2:2:end,:) = bb .* dxdom(1:2:end,:) + cc .* dxdom(2:2:end,:);
160
161ddelta_xdT = zeros(2*n,3);
162ddelta_xdT(1:2:end,:) = aa .* dxdT(1:2:end,:) + bb .* dxdT(2:2:end,:);
163ddelta_xdT(2:2:end,:) = bb .* dxdT(1:2:end,:) + cc .* dxdT(2:2:end,:);
164
165ddelta_xdk = zeros(2*n,4);
166ddelta_xdk(1:2:end,3) = a1';
167ddelta_xdk(1:2:end,4) = a2';
168ddelta_xdk(2:2:end,3) = a3';
169ddelta_xdk(2:2:end,4) = a1';
170
171
172
173xd2 = xd1 + delta_x;
174
175dxd2dom = dxd1dom + ddelta_xdom ;
176dxd2dT = dxd1dT + ddelta_xdT;
177dxd2dk = dxd1dk + ddelta_xdk ;
178
179
180% Pixel coordinates:
181
182xp = xd2 .* (f * ones(1,n)) + c*ones(1,n);
183
184coeff = reshape(f*ones(1,n),2*n,1);
185
186dxpdom = (coeff*ones(1,3)) .* dxd2dom;
187dxpdT = (coeff*ones(1,3)) .* dxd2dT;
188dxpdk = (coeff*ones(1,4)) .* dxd2dk;
189
190dxpdf = zeros(2*n,2);
191dxpdf(1:2:end,1) = xd2(1,:)';
192dxpdf(2:2:end,2) = xd2(2,:)';
193
194dxpdc = zeros(2*n,2);
195dxpdc(1:2:end,1) = ones(n,1);
196dxpdc(2:2:end,2) = ones(n,1);
197
198
199return;
200
201% Test of the Jacobians:
202
203n = 10;
204
205X = 10*randn(3,n);
206om = randn(3,1);
207T = [10*randn(2,1);40];
208f = 1000*rand(2,1);
209c = 1000*randn(2,1);
210k = 0.5*randn(4,1);
211
212
213[x,dxdom,dxdT,dxdf,dxdc,dxdk] = project_points(X,om,T,f,c,k);
214
215
216% Test on om: NOT OK
217
218dom = 0.000000001 * norm(om)*randn(3,1);
219om2 = om + dom;
220
221[x2] = project_points(X,om2,T,f,c,k);
222
223x_pred = x + reshape(dxdom * dom,2,n);
224
225
226norm(x2-x)/norm(x2 - x_pred)
227
228
229% Test on T: OK!!
230
231dT = 0.0001 * norm(T)*randn(3,1);
232T2 = T + dT;
233
234[x2] = project_points(X,om,T2,f,c,k);
235
236x_pred = x + reshape(dxdT * dT,2,n);
237
238
239norm(x2-x)/norm(x2 - x_pred)
240
241
242
243% Test on f: OK!!
244
245df = 0.001 * norm(f)*randn(2,1);
246f2 = f + df;
247
248[x2] = project_points(X,om,T,f2,c,k);
249
250x_pred = x + reshape(dxdf * df,2,n);
251
252
253norm(x2-x)/norm(x2 - x_pred)
254
255
256% Test on c: OK!!
257
258dc = 0.01 * norm(c)*randn(2,1);
259c2 = c + dc;
260
261[x2] = project_points(X,om,T,f,c2,k);
262
263x_pred = x + reshape(dxdc * dc,2,n);
264
265norm(x2-x)/norm(x2 - x_pred)
266
267% Test on k: OK!!
268
269dk = 0.001 * norm(4)*randn(4,1);
270k2 = k + dk;
271
272[x2] = project_points(X,om,T,f,c,k2);
273
274x_pred = x + reshape(dxdk * dk,2,n);
275
276norm(x2-x)/norm(x2 - x_pred)
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/projectedGrid.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/projectedGrid.m
new file mode 100755
index 0000000..561a7d0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/projectedGrid.m
@@ -0,0 +1,24 @@
1function [XX,H] = projectedGrid ( P1, P2, P3, P4 , nx, ny);
2
3% new formalism using homographies
4
5a00 = [P1;1];
6a10 = [P2;1];
7a11 = [P3;1];
8a01 = [P4;1];
9
10% Compute the planart collineation:
11
12[H] = compute_collineation (a00, a10, a11, a01);
13
14
15% Build the grid using the planar collineation:
16
17x_l = ((0:(nx-1))'*ones(1,ny))/(nx-1);
18y_l = (ones(nx,1)*(0:(ny-1)))/(ny-1);
19
20pts = [x_l(:) y_l(:) ones(nx*ny,1)]';
21
22XX = H*pts;
23
24XX = XX(1:2,:) ./ (ones(2,1)*XX(3,:));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/readras.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/readras.m
new file mode 100755
index 0000000..fc1820b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/readras.m
@@ -0,0 +1,87 @@
1function [X, map] = readras(filename, ys, ye, xs, xe);
2%READRAS Read an image file in sun raster format.
3% READRAS('imagefile.ras') reads a "sun.raster" image file.
4% [X, map] = READRAS('imagefile.ras') returns both the image and a
5% color map, so that
6% [X, map] = readras('imagefile.ras');
7% image(X)
8% colormap(map)
9% axis('equal')
10% will display the result with the proper colors.
11% NOTE: readras cannot deal with complicated color maps.
12% In fact, Matlab doesn't quite allow to work with colormaps
13% with more than 64 entries.
14%
15
16%%
17%% (C) Thomas K. Leung 3/30/93.
18%% California Institute of Technology.
19%% Modified by Andrea Mennucci to deal with color images
20%%
21
22% PC and UNIX version of readras - Jean-Yves Bouguet - Dec. 1998
23
24dot = max(find(filename == '.'));
25suffix = filename(dot+1:dot+3);
26
27if(strcmp(suffix, 'ras')) % raster file format %
28 fp = fopen(filename, 'rb');
29 if(fp<0) error(['Cannot open ' filename '.']), end
30
31 %Read and crack the 32-byte header
32 fseek(fp, 4, -1);
33
34 width = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
35
36 height = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
37
38 depth = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
39
40 length = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
41
42 type = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
43
44 maptype = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
45
46 maplen = 2^24 * fread(fp, 1, 'uchar') + 2^16 * fread(fp, 1, 'uchar') + 2^8 * fread(fp, 1, 'uchar') + fread(fp, 1, 'uchar');
47
48 maplen = maplen / 3;
49
50 if maptype == 2 % RMT_RAW
51 map = fread(fp, [maplen, 3], 'uchar')/255;
52% if maplen<64, map=[map',zeros(3,64-maplen)]';maplen=64; end;
53 elseif maptype == 1 % RMT_EQUAL_RGB
54 map(:,1) = fread(fp, [maplen], 'uchar');
55 map(:,2) = fread(fp, [maplen], 'uchar');
56 map(:,3) = fread(fp, [maplen], 'uchar');
57 %maxmap = max(max(map));
58 map = map/255;
59 if maplen<64, map=[map',zeros(3,64-maplen)]'; maplen=64; end;
60 else % RMT_NONE
61 map = [];
62 end
63% if maplen>64,
64% map=[map',zeros(3,256-maplen)]';
65% end;
66
67 % Read the image
68
69 if rem(width,2) == 1
70 Xt = fread(fp, [width+1, height], 'uchar');
71 X = Xt(1:width, :)';
72 else
73 Xt = fread(fp, [width, height], 'uchar');
74 X = Xt';
75 end
76 X = X + 1;
77 fclose(fp);
78else
79 error('Image file name must end in either ''ras'' or ''rast''.');
80end
81
82
83if nargin == 5
84
85 X = X(ys:ye, xs:xe);
86
87end \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/recomp_corner_calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/recomp_corner_calib.m
new file mode 100755
index 0000000..e0af501
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/recomp_corner_calib.m
@@ -0,0 +1,96 @@
1% Re-select te corners after calibration
2
3check_active_images;
4
5if ~exist(['y_' num2str(ind_active(1))]),
6 fprintf(1,'Need to calibrate once before before recomputing image corners. Maybe need to load Calib_Results.mat file.\n');
7 return;
8end;
9
10if ~exist(['I_' num2str(ind_active(1))]),
11 ima_read_calib;
12 if no_image_file,
13 disp('Cannot extract corners without images');
14 return;
15 end;
16end;
17
18fprintf(1,'\nRe-extraction of the grid corners on the images (after first calibration)\n');
19
20disp('Window size for corner finder (wintx and winty):');
21wintx = input('wintx ([] = 5) = ');
22if isempty(wintx), wintx = 5; end;
23wintx = round(wintx);
24winty = input('winty ([] = 5) = ');
25if isempty(winty), winty = 5; end;
26winty = round(winty);
27
28fprintf(1,'Window size = %dx%d\n',2*wintx+1,2*winty+1);
29
30ima_numbers = input('Number(s) of image(s) to process ([] = all images) = ');
31
32if isempty(ima_numbers),
33 ima_proc = 1:n_ima;
34else
35 ima_proc = ima_numbers;
36end;
37
38q_auto = input('Use the projection of 3D grid or manual click ([]=auto, other=manual): ');
39
40fprintf(1,'Processing image ');
41
42for kk = ima_proc;
43
44 if active_images(kk),
45
46 fprintf(1,'%d...',kk);
47
48 if isempty(q_auto),
49
50 eval(['I = I_' num2str(kk) ';']);
51
52 eval(['y = y_' num2str(kk) ';']);
53
54 xc = cornerfinder(y+1,I,winty,wintx); % the four corners
55
56 eval(['wintx_' num2str(kk) ' = wintx;']);
57 eval(['winty_' num2str(kk) ' = winty;']);
58
59 eval(['x_' num2str(kk) '= xc - 1;']);
60
61 else
62
63 fprintf(1,'\n');
64
65 click_ima_calib;
66
67 end;
68
69 else
70
71 if ~exist(['omc_' num2str(kk)]),
72
73 eval(['dX_' num2str(kk) ' = NaN;']);
74 eval(['dY_' num2str(kk) ' = NaN;']);
75
76 eval(['wintx_' num2str(kk) ' = NaN;']);
77 eval(['winty_' num2str(kk) ' = NaN;']);
78
79 eval(['x_' num2str(kk) ' = NaN*ones(2,1);']);
80 eval(['X_' num2str(kk) ' = NaN*ones(3,1);']);
81
82 eval(['n_sq_x_' num2str(kk) ' = NaN;']);
83 eval(['n_sq_y_' num2str(kk) ' = NaN;']);
84
85 end;
86
87 end;
88
89
90end;
91
92% Recompute the error:
93
94comp_error_calib;
95
96fprintf(1,'\ndone\n'); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rect.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rect.m
new file mode 100755
index 0000000..d8b6366
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rect.m
@@ -0,0 +1,93 @@
1function [Irec] = rect(I,R,f,c,k,KK_new);
2
3
4% Note: R is the motion of the points in space
5% So: X2 = R*X where X: coord in the old reference frame, X2: coord in the new ref frame.
6
7[nr,nc] = size(I);
8
9Irec = 255*ones(nr,nc);
10
11[mx,my] = meshgrid(1:nc, 1:nr);
12px = reshape(mx',nc*nr,1);
13py = reshape(my',nc*nr,1);
14
15rays = inv(KK_new)*[(px - 1)';(py - 1)';ones(1,length(px))];
16
17
18% Rotation: (or affine transformation):
19
20rays2 = R'*rays;
21
22
23x = [rays2(1,:)./rays2(3,:);rays2(2,:)./rays2(3,:)];
24
25% Add distortion:
26
27k1 = k(1);
28k2 = k(2);
29
30p1 = k(3);
31p2 = k(4);
32
33r_2 = sum(x.^2);
34
35delta_x = [2*p1*x(1,:).*x(2,:) + p2*(r_2 + 2*x(1,:).^2) ;
36 p1 * (r_2 + 2*x(2,:).^2)+2*p2*x(1,:).*x(2,:)];
37
38xd = (ones(2,1)*( 1 + k1 * r_2 + k2 * r_2.^2)) .* x + delta_x;
39
40
41% Reconvert in pixels:
42
43px2 = f(1)*xd(1,:)+c(1);
44py2 = f(2)*xd(2,:)+c(2);
45
46
47% Interpolate between the closest pixels:
48
49
50px_0 = floor(px2);
51px_1 = px_0 + 1;
52alpha_x = px2 - px_0;
53
54py_0 = floor(py2);
55py_1 = py_0 + 1;
56alpha_y = py2 - py_0;
57
58good_points = find((px_0 >= 0) & (px_1 <= (nc-1)) & (py_0 >= 0) & (py_1 <= (nr-1)));
59
60I_lu = I(px_0(good_points) * nr + py_0(good_points) + 1);
61I_ru = I(px_1(good_points) * nr + py_0(good_points) + 1);
62I_ld = I(px_0(good_points) * nr + py_1(good_points) + 1);
63I_rd = I(px_1(good_points) * nr + py_1(good_points) + 1);
64
65
66I_interp = (1 - alpha_y(good_points)).*((1 - alpha_x(good_points)).* I_lu + alpha_x(good_points) .* I_ru) + alpha_y(good_points) .* ((1 - alpha_x(good_points)).* I_ld + alpha_x(good_points) .* I_rd);
67
68
69Irec((px(good_points)-1)*nr + py(good_points)) = I_interp;
70
71
72
73return;
74
75
76% Convert in indices:
77
78fact = 3;
79
80[XX,YY]= meshgrid(1:nc,1:nr);
81[XXi,YYi]= meshgrid(1:1/fact:nc,1:1/fact:nr);
82
83%tic;
84Iinterp = interp2(XX,YY,I,XXi,YYi);
85%toc
86
87[nri,nci] = size(Iinterp);
88
89
90ind_col = round(fact*(f(1)*xd(1,:)+c(1)))+1;
91ind_row = round(fact*(f(2)*xd(2,:)+c(2)))+1;
92
93good_points = find((ind_col >=1)&(ind_col<=nci)&(ind_row >=1)& (ind_row <=nri));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/reproject_calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/reproject_calib.m
new file mode 100755
index 0000000..86b13f5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/reproject_calib.m
@@ -0,0 +1,92 @@
1%%%%%%%%%%%%%%%%%%%% REPROJECT ON THE IMAGES %%%%%%%%%%%%%%%%%%%%%%%%
2
3if ~exist('no_image'),
4 no_image = 0;
5end;
6
7check_active_images;
8
9
10% Color code for each image:
11
12colors = 'brgkcm';
13
14% Reproject the patterns on the images, and compute the pixel errors:
15
16% Reload the images if necessary
17
18if ~exist(['omc_' num2str(ind_active(1)) ]),
19 fprintf(1,'Need to calibrate before showing image reprojection. Maybe need to load Calib_Results.mat file.\n');
20 return;
21end;
22
23if ~no_image,
24 if ~exist(['I_' num2str(ind_active(1)) ]'),
25 ima_read_calib;
26 if no_image_file,
27 fprintf(1,'WARNING: Do not show the original images\n'); %return;
28 end;
29 end;
30else
31 no_image_file = 1;
32end;
33
34
35
36ima_numbers = input('Number(s) of image(s) to show ([] = all images) = ');
37
38if isempty(ima_numbers),
39 ima_proc = 1:n_ima;
40else
41 ima_proc = ima_numbers;
42end;
43
44
45figure(5);
46for kk = ima_proc, %1:n_ima,
47 if active_images(kk) & eval(['~isnan(y_' num2str(kk) '(1,1))']),
48 eval(['plot(ex_' num2str(kk) '(1,:),ex_' num2str(kk) '(2,:),''' colors(rem(kk-1,6)+1) '+'');']);
49 hold on;
50 end;
51end;
52hold off;
53axis('equal');
54title('Reprojection error (in pixel)');
55xlabel('x');
56ylabel('y');
57drawnow;
58
59set(5,'Name','error','NumberTitle','off');
60
61
62
63for kk = ima_proc,
64
65 if active_images(kk) & eval(['~isnan(y_' num2str(kk) '(1,1))']),
66
67 if exist(['I_' num2str(kk)]),
68 eval(['I = I_' num2str(kk) ';']);
69 else
70 I = 255*ones(ny,nx);
71 end;
72
73 figure(5+kk);
74 image(I); hold on;
75 colormap(gray(256));
76 title(['Image ' num2str(kk) ' - Image points (+) and reprojected grid points (o)']);
77 eval(['plot(x_' num2str(kk) '(1,:)+1,x_' num2str(kk) '(2,:)+1,''r+'');']);
78 eval(['plot(y_' num2str(kk) '(1,:)+1,y_' num2str(kk) '(2,:)+1,''' colors(rem(kk-1,6)+1) 'o'');']);
79 zoom on;
80 hold off;
81 drawnow;
82
83 set(5+kk,'Name',num2str(kk),'NumberTitle','off');
84
85 end;
86
87end;
88
89
90err_std = std(ex')';
91
92fprintf(1,'Pixel error: err = [ %3.5f %3.5f]\n\n',err_std);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rigid_motion.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rigid_motion.m
new file mode 100755
index 0000000..473405c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rigid_motion.m
@@ -0,0 +1,66 @@
1function [Y,dYdom,dYdT] = rigid_motion(X,om,T);
2
3%rigid_motion.m
4%
5%[Y,dYdom,dYdT] = rigid_motion(X,om,T)
6%
7%Computes the rigid motion transformation Y = R*X+T, where R = rodrigues(om).
8%
9%INPUT: X: 3D structure in the world coordinate frame (3xN matrix for N points)
10% (om,T): Rigid motion parameters between world coordinate frame and camera reference frame
11% om: rotation vector (3x1 vector); T: translation vector (3x1 vector)
12%
13%OUTPUT: Y: 3D coordinates of the structure points in the camera reference frame (3xN matrix for N points)
14% dYdom: Derivative of Y with respect to om ((3N)x3 matrix)
15% dYdT: Derivative of Y with respect to T ((3N)x3 matrix)
16%
17%Definitions:
18%Let P be a point in 3D of coordinates X in the world reference frame (stored in the matrix X)
19%The coordinate vector of P in the camera reference frame is: Y = R*X + T
20%where R is the rotation matrix corresponding to the rotation vector om: R = rodrigues(om);
21%
22%Important function called within that program:
23%
24%rodrigues.m: Computes the rotation matrix corresponding to a rotation vector
25
26
27
28if nargin < 3,
29 T = zeros(3,1);
30 if nargin < 2,
31 om = zeros(3,1);
32 if nargin < 1,
33 error('Need at least a 3D structure as input (in rigid_motion.m)');
34 return;
35 end;
36 end;
37end;
38
39
40[R,dRdom] = rodrigues(om);
41
42[m,n] = size(X);
43
44Y = R*X + T*ones(1,n);
45
46if nargout > 1,
47
48
49dYdR = zeros(3*n,9);
50dYdT = zeros(3*n,3);
51
52dYdR(1:3:end,1:3:end) = X';
53dYdR(2:3:end,2:3:end) = X';
54dYdR(3:3:end,3:3:end) = X';
55
56dYdT(1:3:end,1) = ones(n,1);
57dYdT(2:3:end,2) = ones(n,1);
58dYdT(3:3:end,3) = ones(n,1);
59
60dYdom = dYdR * dRdom;
61
62end;
63
64
65
66
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rodrigues.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rodrigues.m
new file mode 100755
index 0000000..9d55337
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rodrigues.m
@@ -0,0 +1,217 @@
1function [out,dout]=rodrigues(in)
2
3% RODRIGUES Transform rotation matrix into rotation vector and viceversa.
4%
5% Sintax: [OUT]=RODRIGUES(IN)
6% If IN is a 3x3 rotation matrix then OUT is the
7% corresponding 3x1 rotation vector
8% if IN is a rotation 3-vector then OUT is the
9% corresponding 3x3 rotation matrix
10%
11
12%%
13%% Copyright (c) March 1993 -- Pietro Perona
14%% California Institute of Technology
15%%
16
17%% ALL CHECKED BY JEAN-YVES BOUGUET, October 1995.
18%% FOR ALL JACOBIAN MATRICES !!! LOOK AT THE TEST AT THE END !!
19
20%% BUG when norm(om)=pi fixed -- April 6th, 1997;
21%% Jean-Yves Bouguet
22
23
24[m,n] = size(in);
25%bigeps = 10e+4*eps;
26bigeps = 10e+20*eps;
27
28if ((m==1) & (n==3)) | ((m==3) & (n==1)) %% it is a rotation vector
29 theta = norm(in);
30 if theta < eps
31 R = eye(3);
32
33 %if nargout > 1,
34
35 dRdin = [0 0 0;
36 0 0 1;
37 0 -1 0;
38 0 0 -1;
39 0 0 0;
40 1 0 0;
41 0 1 0;
42 -1 0 0;
43 0 0 0];
44
45 %end;
46
47 else
48 if n==length(in) in=in'; end; %% make it a column vec. if necess.
49
50 %m3 = [in,theta]
51
52 dm3din = [eye(3);in'/theta];
53
54 omega = in/theta;
55
56 %m2 = [omega;theta]
57
58 dm2dm3 = [eye(3)/theta -in/theta^2; zeros(1,3) 1];
59
60 alpha = cos(theta);
61 beta = sin(theta);
62 gamma = 1-cos(theta);
63 omegav=[[0 -omega(3) omega(2)];[omega(3) 0 -omega(1)];[-omega(2) omega(1) 0 ]];
64 A = omega*omega';
65
66 %m1 = [alpha;beta;gamma;omegav;A];
67
68 dm1dm2 = zeros(21,4);
69 dm1dm2(1,4) = -sin(theta);
70 dm1dm2(2,4) = cos(theta);
71 dm1dm2(3,4) = sin(theta);
72 dm1dm2(4:12,1:3) = [0 0 0 0 0 1 0 -1 0;
73 0 0 -1 0 0 0 1 0 0;
74 0 1 0 -1 0 0 0 0 0]';
75
76 w1 = omega(1);
77 w2 = omega(2);
78 w3 = omega(3);
79
80 dm1dm2(13:21,1) = [2*w1;w2;w3;w2;0;0;w3;0;0];
81 dm1dm2(13: 21,2) = [0;w1;0;w1;2*w2;w3;0;w3;0];
82 dm1dm2(13:21,3) = [0;0;w1;0;0;w2;w1;w2;2*w3];
83
84 R = eye(3)*alpha + omegav*beta + A*gamma;
85
86 dRdm1 = zeros(9,21);
87
88 dRdm1([1 5 9],1) = ones(3,1);
89 dRdm1(:,2) = omegav(:);
90 dRdm1(:,4:12) = beta*eye(9);
91 dRdm1(:,3) = A(:);
92 dRdm1(:,13:21) = gamma*eye(9);
93
94 dRdin = dRdm1 * dm1dm2 * dm2dm3 * dm3din;
95
96
97 end;
98 out = R;
99 dout = dRdin;
100
101 %% it is prob. a rot matr.
102 elseif ((m==n) & (m==3) & (norm(in' * in - eye(3)) < bigeps)...
103 & (abs(det(in)-1) < bigeps))
104 R = in;
105
106
107
108 tr = (trace(R)-1)/2;
109 dtrdR = [1 0 0 0 1 0 0 0 1]/2;
110 theta = real(acos(tr));
111
112
113 if sin(theta) >= 1e-5,
114
115 dthetadtr = -1/sqrt(1-tr^2);
116
117 dthetadR = dthetadtr * dtrdR;
118 % var1 = [vth;theta];
119 vth = 1/(2*sin(theta));
120 dvthdtheta = -vth*cos(theta)/sin(theta);
121 dvar1dtheta = [dvthdtheta;1];
122
123 dvar1dR = dvar1dtheta * dthetadR;
124
125
126 om1 = [R(3,2)-R(2,3), R(1,3)-R(3,1), R(2,1)-R(1,2)]';
127
128 dom1dR = [0 0 0 0 0 1 0 -1 0;
129 0 0 -1 0 0 0 1 0 0;
130 0 1 0 -1 0 0 0 0 0];
131
132 % var = [om1;vth;theta];
133 dvardR = [dom1dR;dvar1dR];
134
135 % var2 = [om;theta];
136 om = vth*om1;
137 domdvar = [vth*eye(3) om1 zeros(3,1)];
138 dthetadvar = [0 0 0 0 1];
139 dvar2dvar = [domdvar;dthetadvar];
140
141
142 out = om*theta;
143 domegadvar2 = [theta*eye(3) om];
144
145 dout = domegadvar2 * dvar2dvar * dvardR;
146
147
148 else
149 if tr > 0; % case norm(om)=0;
150
151 out = [0 0 0]';
152
153 dout = [0 0 0 0 0 1/2 0 -1/2 0;
154 0 0 -1/2 0 0 0 1/2 0 0;
155 0 1/2 0 -1/2 0 0 0 0 0];
156 else % case norm(om)=pi; %% fixed April 6th
157
158
159 out = theta * (sqrt((diag(R)+1)/2).*[1;2*(R(1,2:3)>=0)'-1]);
160 %keyboard;
161
162 if nargout > 1,
163 fprintf(1,'WARNING!!!! Jacobian domdR undefined!!!\n');
164 dout = NaN*ones(3,9);
165 end;
166 end;
167 end;
168
169 else
170 error('Neither a rotation matrix nor a rotation vector were provided');
171 end;
172
173return;
174
175%% test of the Jacobians:
176
177%%%% TEST OF dRdom:
178om = randn(3,1);
179dom = randn(3,1)/1000000;
180
181[R1,dR1] = rodrigues(om);
182R2 = rodrigues(om+dom);
183
184R2a = R1 + reshape(dR1 * dom,3,3);
185
186gain = norm(R2 - R1)/norm(R2 - R2a)
187
188%%% TEST OF dOmdR:
189om = randn(3,1);
190R = rodrigues(om);
191dom = randn(3,1)/10000;
192dR = rodrigues(om+dom) - R;
193
194[omc,domdR] = rodrigues(R);
195[om2] = rodrigues(R+dR);
196
197om_app = omc + domdR*dR(:);
198
199gain = norm(om2 - omc)/norm(om2 - om_app)
200
201
202%%% OTHER BUG: (FIXED NOW!!!)
203
204omu = randn(3,1);
205omu = omu/norm(omu)
206om = pi*omu;
207[R,dR]= rodrigues(om);
208[om2] = rodrigues(R);
209[om om2]
210
211%%% NORMAL OPERATION
212
213om = randn(3,1);
214[R,dR]= rodrigues(om);
215[om2] = rodrigues(R);
216[om om2]
217
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rotation.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rotation.m
new file mode 100755
index 0000000..87ee2fe
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/rotation.m
@@ -0,0 +1,23 @@
1function [] = rotation(st);
2
3if nargin < 1,
4 st= 1;
5end;
6
7
8fig = gcf;
9
10ax = gca;
11
12vv = get(ax,'view');
13
14az = vv(1);
15el = vv(2);
16
17for azi = az:-abs(st):az-360,
18
19 set(ax,'view',[azi el]);
20 figure(fig);
21 drawnow;
22
23end;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/run_error_analysis.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/run_error_analysis.m
new file mode 100755
index 0000000..095e17e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/run_error_analysis.m
@@ -0,0 +1,65 @@
1%%% Program that launchs the complete
2
3for N_ima_active = 1:30,
4
5 error_analysis;
6
7end;
8
9
10
11return;
12
13
14f = [];
15f_std = [];
16
17c = [];
18c_std = [];
19
20k = [];
21k_std = [];
22
23NN = 30;
24
25for rr = 1:NN,
26
27 load(['Calib_Accuracies_' num2str(rr)]);
28
29 [m1,s1] = mean_std_robust(fc_list(1,:));
30 [m2,s2] = mean_std_robust(fc_list(2,:));
31
32 f = [f [m1;m2]];
33 f_std = [f_std [s1;s2]];
34
35 [m1,s1] = mean_std_robust(cc_list(1,:));
36 [m2,s2] = mean_std_robust(cc_list(2,:));
37
38 c = [c [m1;m2]];
39 c_std = [c_std [s1;s2]];
40
41 [m1,s1] = mean_std_robust(kc_list(1,:));
42 [m2,s2] = mean_std_robust(kc_list(2,:));
43 [m3,s3] = mean_std_robust(kc_list(3,:));
44 [m4,s4] = mean_std_robust(kc_list(4,:));
45
46 k = [k [m1;m2;m3;m4]];
47 k_std = [k_std [s1;s2;s3;s4]];
48
49end;
50
51figure(1);
52errorbar([1:NN;1:NN]',f',f_std');
53figure(2);
54errorbar([1:NN;1:NN]',c',c_std');
55figure(3);
56errorbar([1:NN;1:NN;1:NN;1:NN]',k',k_std');
57
58figure(4);
59semilogy(f_std');
60
61figure(5);
62semilogy(c_std');
63
64figure(6);
65semilogy(k_std');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/saveinr.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/saveinr.m
new file mode 100755
index 0000000..a176e39
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/saveinr.m
@@ -0,0 +1,46 @@
1%SAVEINR Write an INRIMAGE format file
2%
3% SAVEINR(filename, im)
4%
5% Saves the specified image array in a INRIA image format file.
6%
7% SEE ALSO: loadinr
8%
9% Copyright (c) Peter Corke, 1999 Machine Vision Toolbox for Matlab
10
11% Peter Corke 1996
12
13function saveinr(fname, im)
14
15 fid = fopen(fname, 'w');
16 [r,c] = size(im');
17
18 % build the header
19 hdr = [];
20 s = sprintf('#INRIMAGE-4#{\n');
21 hdr = [hdr s];
22 s = sprintf('XDIM=%d\n',c);
23 hdr = [hdr s];
24 s = sprintf('YDIM=%d\n',r);
25 hdr = [hdr s];
26 s = sprintf('ZDIM=1\n');
27 hdr = [hdr s];
28 s = sprintf('VDIM=1\n');
29 hdr = [hdr s];
30 s = sprintf('TYPE=float\n');
31 hdr = [hdr s];
32 s = sprintf('PIXSIZE=32\n');
33 hdr = [hdr s];
34 s = sprintf('SCALE=2**0\n');
35 hdr = [hdr s];
36 s = sprintf('CPU=sun\n#');
37 hdr = [hdr s];
38
39 % make it 256 bytes long and write it
40 hdr256 = zeros(1,256);
41 hdr256(1:length(hdr)) = hdr;
42 fwrite(fid, hdr256, 'uchar');
43
44 % now the binary data
45 fwrite(fid, im', 'float32');
46 fclose(fid)
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/savepgm.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/savepgm.m
new file mode 100755
index 0000000..397f028
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/savepgm.m
@@ -0,0 +1,22 @@
1%SAVEPGM Write a PGM format file
2%
3% SAVEPGM(filename, im)
4%
5% Saves the specified image array in a binary (P5) format PGM image file.
6%
7% SEE ALSO: loadpgm
8%
9% Copyright (c) Peter Corke, 1999 Machine Vision Toolbox for Matlab
10
11
12% Peter Corke 1994
13
14function savepgm(fname, im)
15
16 fid = fopen(fname, 'w');
17 [r,c] = size(im');
18 fprintf(fid, 'P5\n');
19 fprintf(fid, '%d %d\n', r, c);
20 fprintf(fid, '255\n');
21 fwrite(fid, im', 'uchar');
22 fclose(fid)
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/saveppm.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/saveppm.m
new file mode 100755
index 0000000..0062ee0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/saveppm.m
@@ -0,0 +1,25 @@
1%SAVEPPM Write a PPM format file
2%
3% SAVEPPM(filename, r, g, b)
4%
5% Saves the specified red, green and blue planes in a binary (P6)
6% format PPM image file.
7%
8% SEE ALSO: loadppm
9%
10% Copyright (c) Peter Corke, 1999 Machine Vision Toolbox for Matlab
11
12
13% Peter Corke 1994
14
15function saveppm(fname, R, G, B)
16
17 fid = fopen(fname, 'w');
18 [r,c] = size(R');
19 fprintf(fid, 'P6\n');
20 fprintf(fid, '%d %d\n', r, c);
21 fprintf(fid, '255\n');
22 im = [R(:) G(:) B(:)];
23 im = reshape(c,r);
24 fwrite(fid, im, 'uchar');
25 fclose(fid)
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/saving_calib.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/saving_calib.m
new file mode 100755
index 0000000..e0575e0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/saving_calib.m
@@ -0,0 +1,27 @@
1fprintf(1,'\nSaving calibration results under Calib_Results.mat\n');
2
3check_active_images;
4
5if ~exist('solution_init'), solution_init = []; end;
6
7for kk = 1:n_ima,
8 if ~exist(['dX_' num2str(kk)]), eval(['dX_' num2str(kk) '= dX;']); end;
9 if ~exist(['dY_' num2str(kk)]), eval(['dY_' num2str(kk) '= dY;']); end;
10end;
11
12if ~exist('param_list'),
13 param_list = solution;
14end;
15
16
17string_save = 'save Calib_Results param_list active_images ind_active fc kc cc ex x y solution sol_with_center solution_init wintx winty n_ima type_numbering N_slots small_calib_image first_num image_numbers format_image calib_name Hcal Wcal nx ny map dX_default dY_default KK inv_KK dX dY';
18
19for kk = 1:n_ima,
20 string_save = [string_save ' X_' num2str(kk) ' x_' num2str(kk) ' y_' num2str(kk) ' ex_' num2str(kk) ' omc_' num2str(kk) ' Rc_' num2str(kk) ' Tc_' num2str(kk) ' H_' num2str(kk) ' n_sq_x_' num2str(kk) ' n_sq_y_' num2str(kk) ' wintx_' num2str(kk) ' winty_' num2str(kk) ' dX_' num2str(kk) ' dY_' num2str(kk)];
21end;
22
23%fprintf(1,'To load later click on Load\n');
24
25fprintf(1,'done\n');
26
27eval(string_save);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/script_fit_distortion.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/script_fit_distortion.m
new file mode 100755
index 0000000..c5e5430
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/script_fit_distortion.m
@@ -0,0 +1,39 @@
1
2 satis_distort = 0;
3
4 disp(['Estimated focal: ' num2str(f_g) ' pixels']);
5
6 while ~satis_distort,
7
8 k_g = input('Guess for distortion factor kc ([]=0): ');
9
10 if isempty(k_g), k_g = 0; end;
11
12 xy_corners_undist = comp_distortion2([x' - c_g(1);y'-c_g(2)]/f_g,k_g);
13
14 xu = xy_corners_undist(1,:)';
15 yu = xy_corners_undist(2,:)';
16
17 [XXu] = projectedGrid ( [xu(1);yu(1)], [xu(2);yu(2)],[xu(3);yu(3)], [xu(4);yu(4)],n_sq_x+1,n_sq_y+1); % The full grid
18
19 XX = (ones(2,1)*(1 + k_g * sum(XXu.^2))) .* XXu;
20 XX(1,:) = f_g*XX(1,:)+c_g(1);
21 XX(2,:) = f_g*XX(2,:)+c_g(2);
22
23 figure(2);
24 image(I);
25 colormap(map);
26 zoom on;
27 hold on;
28 %plot(f_g*XXu(1,:)+c_g(1),f_g*XXu(2,:)+c_g(2),'ro');
29 plot(XX(1,:),XX(2,:),'r+');
30 title('The red crosses should be on the grid corners...');
31 hold off;
32
33 satis_distort = input('Satisfied with distortion? ([]=no, other=yes) ');
34
35 satis_distort = ~isempty(satis_distort);
36
37
38 end;
39 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_no_center.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_no_center.m
new file mode 100755
index 0000000..15508e5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_no_center.m
@@ -0,0 +1,19 @@
1%%% Selection of the calibration solution with center estimation
2
3if ~exist('sol_no_center'),
4 fprintf(1,'Need to calibrate before selecting solution without center. Maybe need to load Calib_Results.mat file.\n');
5 return;
6end;
7
8solution = sol_no_center;
9
10%%% Extraction of the final intrinsic and extrinsic paramaters:
11
12extract_parameters;
13comp_error_calib;
14
15fprintf(1,'\n\nCalibration results without principal point estimation:\n\n');
16fprintf(1,'Focal Length: fc = [ %3.5f %3.5f]\n',fc);
17fprintf(1,'Principal point: cc = [ %3.5f %3.5f]\n',cc);
18fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f]\n',kc);
19fprintf(1,'Pixel error: err = [ %3.5f %3.5f]\n\n',err_std);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_no_center3D.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_no_center3D.m
new file mode 100755
index 0000000..070d81c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_no_center3D.m
@@ -0,0 +1,20 @@
1%%% Selection of the calibration solution with center estimation
2
3solution = sol_no_center;
4
5%%% Extraction of the final intrinsic and extrinsic paramaters:
6
7extract_parameters3D;
8
9
10fprintf(1,'\n\nCalibration results without principal point estimation:\n\n');
11fprintf(1,'Focal Length: fc = [ %3.5f %3.5f]\n',fc);
12fprintf(1,'Principal point: cc = [ %3.5f %3.5f]\n',cc);
13fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f]\n',kc);
14
15
16%%%%%%%%%%%%%%%%%%%% GRAPHICAL OUTPUT %%%%%%%%%%%%%%%%%%%%%%%%
17
18graphout_calib3D;
19
20
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_with_center.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_with_center.m
new file mode 100755
index 0000000..2df9ba8
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_with_center.m
@@ -0,0 +1,19 @@
1%%% Selection of the calibration solution with center estimation
2
3if ~exist('sol_with_center'),
4 fprintf(1,'Need to calibrate before selecting solution with center. Maybe need to load Calib_Results.mat file.\n');
5 return;
6end;
7
8solution = sol_with_center;
9
10%%% Extraction of the final intrinsic and extrinsic paramaters:
11
12extract_parameters;
13comp_error_calib;
14
15fprintf(1,'\n\nCalibration results with principal point estimation:\n\n');
16fprintf(1,'Focal Length: fc = [ %3.5f %3.5f]\n',fc);
17fprintf(1,'Principal point: cc = [ %3.5f %3.5f]\n',cc);
18fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f]\n',kc);
19fprintf(1,'Pixel error: err = [ %3.5f %3.5f]\n\n',err_std);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_with_center3D.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_with_center3D.m
new file mode 100755
index 0000000..eb6f4bf
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/select_sol_with_center3D.m
@@ -0,0 +1,20 @@
1%%% Selection of the calibration solution with center estimation
2
3solution = sol_with_center;
4
5%%% Extraction of the final intrinsic and extrinsic paramaters:
6
7extract_parameters3D;
8
9
10fprintf(1,'\n\nCalibration results with principal point estimation:\n\n');
11fprintf(1,'Focal Length: fc = [ %3.5f %3.5f]\n',fc);
12fprintf(1,'Principal point: cc = [ %3.5f %3.5f]\n',cc);
13fprintf(1,'Distortion: kc = [ %3.5f %3.5f %3.5f %3.5f]\n',kc);
14
15
16%%%%%%%%%%%%%%%%%%%% GRAPHICAL OUTPUT %%%%%%%%%%%%%%%%%%%%%%%%
17
18graphout_calib3D;
19
20
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/startup.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/startup.m
new file mode 100755
index 0000000..aad0fa4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/startup.m
@@ -0,0 +1,9 @@
1% Main camera calibration toolbox:
2
3calib_gui;
4
5%calib_gui;
6
7path(pwd,path);
8
9format compact
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/test_3d.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/test_3d.m
new file mode 100755
index 0000000..9f442f4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/test_3d.m
@@ -0,0 +1,80 @@
1Rc_1 = rodrigues(omc_1);
2Rc_2 = rodrigues(omc_2);
3Rc_3 = rodrigues(omc_3);
4Rc_4 = rodrigues(omc_4);
5Rc_5 = rodrigues(omc_5);
6Rc_6 = rodrigues(omc_6);
7Rc_7 = rodrigues(omc_7);
8Rc_8 = rodrigues(omc_8);
9Rc_9 = rodrigues(omc_9);
10
11Rc_10 = rodrigues(omc_10);
12Rc_11 = rodrigues(omc_11);
13Rc_12 = rodrigues(omc_12);
14Rc_13 = rodrigues(omc_13);
15Rc_14 = rodrigues(omc_14);
16Rc_15 = rodrigues(omc_15);
17Rc_16 = rodrigues(omc_16);
18Rc_17 = rodrigues(omc_17);
19Rc_18 = rodrigues(omc_18);
20
21
22
23RR1 = Rc_1'*Rc_10; % should be rodrigues([0;pi/2;0])
24TT1 = Rc_1'*(Tc_10-Tc_1); % should be [dX*n_sq_x_1;0;0]
25
26Xr_1 = RR1 * X_10 + TT1*ones(1,length(X_10));
27
28figure(1);
29plot3(X_1(1,:),X_1(2,:),X_1(3,:),'r+'); hold on;
30plot3(Xr_1(1,:),Xr_1(2,:),Xr_1(3,:),'g+');
31hold off;
32axis('equal');
33rotate3d on;
34view(0,0);
35xlabel('x');
36ylabel('y');
37zlabel('z');
38
39aaa = [];
40
41RR1 = Rc_1'*Rc_10; % should be rodrigues([0;pi/2;0])
42TT1 = Rc_1'*(Tc_10-Tc_1); % should be [dX*n_sq_x_1;0;0]
43err = rodrigues(RR1) - [0;pi/2;0]
44aaa = [aaa 2*sin(err(2)/2)*.33*1000];
45
46RR2 = Rc_2'*Rc_11; % should be rodrigues([0;pi/2;0])
47TT2 = Rc_2'*(Tc_11-Tc_2); % should be [dX*n_sq_x_1;0;0]
48err = rodrigues(RR2) - [0;pi/2;0]
49aaa = [aaa 2*sin(err(2)/2)*.33*1000];
50
51RR3 = Rc_3'*Rc_12; % should be rodrigues([0;pi/2;0])
52TT3 = Rc_3'*(Tc_12-Tc_3); % should be [dX*n_sq_x_1;0;0]
53err = rodrigues(RR3) - [0;pi/2;0]
54aaa = [aaa 2*sin(err(2)/2)*.33*1000];
55
56RR4 = Rc_4'*Rc_13; % should be rodrigues([0;pi/2;0])
57TT4 = Rc_4'*(Tc_13-Tc_4); % should be [dX*n_sq_x_1;0;0]
58err = rodrigues(RR4) - [0;pi/2;0]
59aaa = [aaa 2*sin(err(2)/2)*.33*1000];
60
61RR5 = Rc_5'*Rc_14; % should be rodrigues([0;pi/2;0])
62TT5 = Rc_5'*(Tc_14-Tc_5); % should be [dX*n_sq_x_1;0;0]
63err = rodrigues(RR5) - [0;pi/2;0]
64aaa = [aaa 2*sin(err(2)/2)*.33*1000];
65
66RR6 = Rc_6'*Rc_15; % should be rodrigues([0;pi/2;0])
67TT6 = Rc_6'*(Tc_15-Tc_6); % should be [dX*n_sq_x_1;0;0]
68err = rodrigues(RR6) - [0;pi/2;0]
69aaa = [aaa 2*sin(err(2)/2)*.33*1000];
70
71RR7 = Rc_7'*Rc_16; % should be rodrigues([0;pi/2;0])
72TT7 = Rc_7'*(Tc_16-Tc_7); % should be [dX*n_sq_x_1;0;0]
73err = rodrigues(RR7) - [0;pi/2;0]
74aaa = [aaa 2*sin(err(2)/2)*.33*1000];
75
76RR8 = Rc_8'*Rc_17; % should be rodrigues([0;pi/2;0])
77TT8 = Rc_8'*(Tc_17-Tc_8); % should be [dX*n_sq_x_1;0;0]
78err = rodrigues(RR8) - [0;pi/2;0]
79aaa = [aaa 2*sin(err(2)/2)*.33*1000];
80
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/undistort_image.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/undistort_image.m
new file mode 100755
index 0000000..6393d78
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/undistort_image.m
@@ -0,0 +1,88 @@
1%%% INPUT THE IMAGE FILE NAME:
2
3dir;
4
5fprintf(1,'\n');
6disp('Program that undistort an image');
7disp('The intrinsic camera parameters are assumed to be known (previously computed)');
8
9fprintf(1,'\n');
10image_name = input('Image name (full name without extension): ','s');
11
12format_image2 = '0';
13
14while format_image2 == '0',
15
16 format_image2 = input('Image format: ([]=''r''=''ras'', ''b''=''bmp'', ''t''=''tif'', ''p''=''pgm'', ''j''=''jpg'') ','s');
17
18 if isempty(format_image2),
19 format_image2 = 'ras';
20 end;
21
22 if lower(format_image2(1)) == 'b',
23 format_image2 = 'bmp';
24 else
25 if lower(format_image2(1)) == 't',
26 format_image2 = 'tif';
27 else
28 if lower(format_image2(1)) == 'p',
29 format_image2 = 'pgm';
30 else
31 if lower(format_image2(1)) == 'j',
32 format_image2 = 'jpg';
33 else
34 if lower(format_image2(1)) == 'r',
35 format_image2 = 'ras';
36 else
37 disp('Invalid image format');
38 format_image2 = '0'; % Ask for format once again
39 end;
40 end;
41 end;
42 end;
43 end;
44end;
45
46ima_name = [image_name '.' format_image];
47
48
49
50%%% READ IN IMAGE:
51
52if format_image(1) == 'p',
53 I = double(pgmread(ima_name));
54else
55 if format_image(1) == 'r',
56 I = readras(ima_name);
57 else
58 I = double(imread(ima_name));
59 end;
60end;
61
62if size(I,3)>1,
63 I = I(:,:,2);
64end;
65
66
67%% SHOW THE ORIGINAL IMAGE:
68
69figure(2);
70image(I);
71colormap(gray(256));
72title('Original image (with distortion) - Stored in array I');
73drawnow;
74
75
76%% UNDISTORT THE IMAGE:
77
78fprintf(1,'Compututing the undistorted image...\n')
79
80[I2] = rect(I,eye(3),fc,cc,kc,KK);
81
82
83figure(3);
84image(I2);
85colormap(gray(256));
86title('Undistorted image - Stored in array I2');
87drawnow;
88
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/writeras.m b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/writeras.m
new file mode 100755
index 0000000..c7eb7bc
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj/writeras.m
@@ -0,0 +1,105 @@
1function writeras(filename, image, map);
2%WRITERAS Write an image file in sun raster format.
3% WRITERAS('imagefile.ras', image_matrix, map) writes a
4% "sun.raster" image file.
5
6% Written by Thomas K. Leung 3/30/93.
7% @ California Institute of Technology.
8
9
10% PC and UNIX version of writeras - Jean-Yves Bouguet - Dec. 1998
11
12dot = max(find(filename == '.'));
13suffix = filename(dot+1:dot+3);
14
15if nargin < 3,
16 map = [];
17end;
18
19if(strcmp(suffix, 'ras'))
20 %Write header
21
22 fp = fopen(filename, 'wb');
23 if(fp < 0) error(['Cannot open ' filename '.']), end
24
25 [height, width] = size(image);
26 image = image - 1;
27 mapsize = size(map, 1)*size(map,2);
28 %fwrite(fp, ...
29 % [1504078485, width, height, 8, height*width, 1, 1, mapsize], ...
30 % 'long');
31
32
33 zero_str = '00000000';
34
35 % MAGIC NUMBER:
36
37
38 fwrite(fp,89,'uchar');
39 fwrite(fp,166,'uchar');
40 fwrite(fp,106,'uchar');
41 fwrite(fp,149,'uchar');
42
43 width_str = dec2hex(width);
44 width_str = [zero_str(1:8-length(width_str)) width_str];
45
46 for ii = 1:2:7,
47 fwrite(fp,hex2dec(width_str(ii:ii+1)),'uchar');
48 end;
49
50
51 height_str = dec2hex(height);
52 height_str = [zero_str(1:8-length(height_str)) height_str];
53
54 for ii = 1:2:7,
55 fwrite(fp,hex2dec(height_str(ii:ii+1)),'uchar');
56 end;
57
58 fwrite(fp,0,'uchar');
59 fwrite(fp,0,'uchar');
60 fwrite(fp,0,'uchar');
61 fwrite(fp,8,'uchar');
62
63 ll = height*width;
64 ll_str = dec2hex(ll);
65 ll_str = [zero_str(1:8-length(ll_str)) ll_str];
66
67 for ii = 1:2:7,
68 fwrite(fp,hex2dec(ll_str(ii:ii+1)),'uchar');
69 end;
70
71 fwrite(fp,0,'uchar');
72 fwrite(fp,0,'uchar');
73 fwrite(fp,0,'uchar');
74 fwrite(fp,1,'uchar');
75 fwrite(fp,0,'uchar');
76 fwrite(fp,0,'uchar');
77 fwrite(fp,0,'uchar');
78 fwrite(fp,~~mapsize,'uchar');
79
80 mapsize_str = dec2hex(mapsize);
81 mapsize_str = [zero_str(1:8-length(mapsize_str)) mapsize_str];
82
83 %keyboard;
84
85 for ii = 1:2:7,
86 fwrite(fp,hex2dec(mapsize_str(ii:ii+1)),'uchar');
87 end;
88
89
90 if mapsize ~= 0
91 map = min(255, fix(255*map));
92 fwrite(fp, map, 'uchar');
93 end
94 if rem(width,2) == 1
95 image = [image'; zeros(1, height)]';
96 top = 255 * ones(size(image));
97 fwrite(fp, min(top,image)', 'uchar');
98 else
99 top = 255 * ones(size(image));
100 fwrite(fp, min(top,image)', 'uchar');
101 end
102 fclose(fp);
103else
104 error('Image file name must end in either ''ras'' or ''rast''.');
105end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj2/TOOLBOX_calib.tar b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj2/TOOLBOX_calib.tar
new file mode 100755
index 0000000..36d5de9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/calib_bouguetj2/TOOLBOX_calib.tar
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/Ncut_IC.m b/SD-VBS/common/toolbox/toolbox_basic/common/Ncut_IC.m
new file mode 100755
index 0000000..d612780
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/Ncut_IC.m
@@ -0,0 +1,26 @@
1function [v,d] = Ncut_IC(I,nb_radius_IC);
2%
3% [v,d] = Ncut_IC(I,nb_radius_IC);
4%
5
6if nargin<2,
7 nb_radius_IC = 5;
8end
9
10I = I/max(I(:));
11
12eg_par = [16,2, 21,3]; eg_th = 0;
13
14nv = 11; reg_fac = 0.01;
15
16[ex,ey,egx,egy,eg_par,eg_th,emag,ephase] = quadedgep(I,eg_par,eg_th);
17
18
19nb_radius_IC= 10;
20sample_rate = 0.2;
21disp('setupW\n');
22[w_i,w_j] = cimgnbmap(size(I),nb_radius_IC,sample_rate);
23w = affinityic(emag,ephase,w_i,w_j);
24disp('computeNcut');
25[v,d] = ncut(w,nv,[],reg_fac);
26
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/Ncut_IC_m.m b/SD-VBS/common/toolbox/toolbox_basic/common/Ncut_IC_m.m
new file mode 100755
index 0000000..146acf9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/Ncut_IC_m.m
@@ -0,0 +1,42 @@
1function [v,d] = Ncut_IC_m(I,mask,nb_radius_IC,sig_IC);
2%
3% [v,d] = Ncut_IC_m(I,mask,nb_radius_IC,sig_IC);
4%
5
6if nargin<2,
7 mask = ones(size(I));
8end
9
10if nargin<3,
11 nb_radius_IC = 10;
12end
13
14if nargin<4,
15 sig_IC = 0.03;
16end
17
18%%% normalize the image
19I = I/max(I(:));
20
21%%% edge detecting parameter, [num_ori, sig, win_size, enlongation factor]
22eg_par = [6,2, 21,3]; eg_th = 0.01;
23
24%% number of eigenvectors+ regulization factors
25nv = 10; reg_fac = 0.0;
26
27%% compute the edge response
28[ex,ey,egx,egy,eg_par,eg_th,emag,ephase] = quadedgep(I,eg_par,eg_th);
29
30%%% setup Wij connection pattern
31sample_rate = 0.1;
32[w_i,w_j] = cimgnbmap(size(I),nb_radius_IC,sample_rate);
33
34%%% compute Wij with IC
35emag = mask.*emag;
36w = affinityic(emag,ephase,w_i,w_j,sig_IC);
37
38%show_dist_w(I,w);
39%%% running Ncut
40[v,d] = ncut(w,nv);
41
42v = reshape(v,size(I,1),size(I,2),size(v,2));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/Ncut_IC_m2.m b/SD-VBS/common/toolbox/toolbox_basic/common/Ncut_IC_m2.m
new file mode 100755
index 0000000..9668b19
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/Ncut_IC_m2.m
@@ -0,0 +1,51 @@
1function [v,d] = Ncut_IC_m(I,mask,nb_radius_IC,sig_IC);
2%
3% [v,d] = Ncut_IC_m(I,mask,nb_radius_IC,sig_IC);
4%
5
6if nargin<2,
7 mask = ones(size(I));
8end
9
10if nargin<3,
11 nb_radius_IC = 10;
12end
13
14if nargin<4,
15 sig_IC = 0.03;
16end
17
18%%% normalize the image
19I = I/max(I(:));
20
21%%% edge detecting parameter, [num_ori, sig, win_size, enlongation factor]
22eg_par = [6,2, 21,3]; eg_th = 0.01;
23
24%% number of eigenvectors+ regulization factors
25nv = 10; reg_fac = 0.0;
26
27%% compute the edge response
28[nr,nc,nb] = size(I);
29emag = zeros(nr,nc);
30ephase = zeros(nr,nc);
31for j=1:nb,
32 [ex,ey,egx,egy,eg_par,eg_th,emag1,ephase1] = quadedgep(I(:,:,j),eg_par,eg_th);
33 mask = emag1>emag;
34 ephase = ephase+ mask.*ephase1;
35 emag = emag + mask.*emag1;
36end
37
38
39%%% setup Wij connection pattern
40sample_rate = 0.1;
41[w_i,w_j] = cimgnbmap(size(I),nb_radius_IC,sample_rate);
42
43%%% compute Wij with IC
44emag = mask.*emag;
45w = affinityic(emag,ephase,w_i,w_j,sig_IC);
46
47%show_dist_w(I,w);
48%%% running Ncut
49[v,d] = ncut(w,nv);
50
51v = reshape(v,size(I,1),size(I,2),size(v,2));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/affinityic.c b/SD-VBS/common/toolbox/toolbox_basic/common/affinityic.c
new file mode 100755
index 0000000..e48762a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/affinityic.c
@@ -0,0 +1,186 @@
1/*================================================================
2* function w = affinityic(emag,ephase,pi,pj,sigma)
3* Input:
4* emag = edge strength at each pixel
5* ephase = edge phase at each pixel
6* [pi,pj] = index pair representation for MALTAB sparse matrices
7* sigma = sigma for IC energy
8* Output:
9* w = affinity with IC at [pi,pj]
10*
11
12% test sequence
13f = synimg(10);
14[i,j] = cimgnbmap(size(f),2);
15[ex,ey,egx,egy] = quadedgep(f);
16a = affinityic(ex,ey,egx,egy,i,j)
17show_dist_w(f,a);
18
19* Jianbo Shi, Stella X. Yu, Nov 19, 2001.
20*=================================================================*/
21
22# include "mex.h"
23# include "math.h"
24
25void mexFunction(
26 int nargout,
27 mxArray *out[],
28 int nargin,
29 const mxArray *in[]
30)
31{
32 /* declare variables */
33 int nr, nc, np, total;
34 int i, j, k, ix, iy, jx, jy, ii, jj, iip1, jjp1, iip2, jjp2, step;
35 double sigma, di, dj, a, z, maxori, phase1, phase2, slope;
36 int *ir, *jc;
37 unsigned long *pi, *pj;
38 double *emag, *ephase, *w;
39
40 /* check argument */
41 if (nargin<4) {
42 mexErrMsgTxt("Four input arguments required");
43 }
44 if (nargout>1) {
45 mexErrMsgTxt("Too many output arguments");
46 }
47
48 /* get edgel information */
49 nr = mxGetM(in[0]);
50 nc = mxGetN(in[0]);
51 if ( nr*nc ==0 || nr != mxGetM(in[1]) || nc != mxGetN(in[1]) ) {
52 mexErrMsgTxt("Edge magnitude and phase shall be of the same image size");
53 }
54 emag = mxGetPr(in[0]);
55 ephase = mxGetPr(in[1]);
56 np = nr * nc;
57
58 /* get new index pair */
59 if (!mxIsUint32(in[2]) | !mxIsUint32(in[3])) {
60 mexErrMsgTxt("Index pair shall be of type UINT32");
61 }
62 if (mxGetM(in[3]) * mxGetN(in[3]) != np + 1) {
63 mexErrMsgTxt("Wrong index representation");
64 }
65 pi = mxGetData(in[2]);
66 pj = mxGetData(in[3]);
67
68 /* create output */
69 out[0] = mxCreateSparse(np,np,pj[np],mxREAL);
70 if (out[0]==NULL) {
71 mexErrMsgTxt("Not enough memory for the output matrix");
72 }
73 w = mxGetPr(out[0]);
74 ir = mxGetIr(out[0]);
75 jc = mxGetJc(out[0]);
76
77 /* find my sigma */
78 if (nargin<5) {
79 sigma = 0;
80 for (k=0; k<np; k++) {
81 if (emag[k]>sigma) { sigma = emag[k]; }
82 }
83 sigma = sigma / 10;
84 printf("sigma = %6.5f",sigma);
85 } else {
86 sigma = mxGetScalar(in[4]);
87 }
88 a = 1.0/ (sigma);
89
90 /* computation */
91 total = 0;
92 for (j=0; j<np; j++) {
93
94 jc[j] = total;
95 jx = j / nr; /* col */
96 jy = j % nr; /* row */
97
98 for (k=pj[j]; k<pj[j+1]; k++) {
99
100 i = pi[k];
101
102 if (i==j) {
103 maxori = 1;
104
105 } else {
106
107 ix = i / nr;
108 iy = i % nr;
109
110 /* scan */
111 di = (double) (iy - jy);
112 dj = (double) (ix - jx);
113
114 maxori = 0.;
115 phase1 = ephase[j];
116
117
118 /* sample in i direction */
119 if (abs(di) >= abs(dj)) {
120 slope = dj / di;
121 step = (iy>=jy) ? 1 : -1;
122
123 iip1 = jy;
124 jjp1 = jx;
125
126
127 for (ii=0;ii<abs(di);ii++){
128 iip2 = iip1 + step;
129 jjp2 = (int)(0.5 + slope*(iip2-jy) + jx);
130
131 phase2 = ephase[iip2+jjp2*nr];
132
133 if (phase1 != phase2) {
134 z = (emag[iip1+jjp1*nr] + emag[iip2+jjp2*nr]);
135 if (z > maxori){
136 maxori = z;
137 }
138 }
139
140 iip1 = iip2;
141 jjp1 = jjp2;
142 phase1 = phase2;
143 }
144
145 /* sample in j direction */
146 } else {
147 slope = di / dj;
148 step = (ix>=jx) ? 1: -1;
149
150 jjp1 = jx;
151 iip1 = jy;
152
153
154 for (jj=0;jj<abs(dj);jj++){
155 jjp2 = jjp1 + step;
156 iip2 = (int)(0.5+ slope*(jjp2-jx) + jy);
157
158 phase2 = ephase[iip2+jjp2*nr];
159
160 if (phase1 != phase2){
161 z = (emag[iip1+jjp1*nr] + emag[iip2+jjp2*nr]);
162 if (z > maxori){
163 maxori = z;
164 }
165
166 }
167
168 iip1 = iip2;
169 jjp1 = jjp2;
170 phase1 = phase2;
171 }
172 }
173
174 maxori = 0.5 * maxori*a;
175 maxori = exp(-maxori*maxori);
176 }
177 ir[total] = i;
178
179 w[total] = maxori + 0.005;
180 total = total + 1;
181
182 } /* i */
183 } /* j */
184
185 jc[np] = total;
186}
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/affinityic.mexa64 b/SD-VBS/common/toolbox/toolbox_basic/common/affinityic.mexa64
new file mode 100755
index 0000000..e60b4d1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/affinityic.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/affinityic.mexglx b/SD-VBS/common/toolbox/toolbox_basic/common/affinityic.mexglx
new file mode 100755
index 0000000..5edb5d8
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/affinityic.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/anisodiff.m b/SD-VBS/common/toolbox/toolbox_basic/common/anisodiff.m
new file mode 100755
index 0000000..b576d8f
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/anisodiff.m
@@ -0,0 +1,20 @@
1function [outimage] = anisodiff(inimage,iterations,K)
2% [outimage] = anisodiff(inimage,iterations,K)
3% Pietro's anisotropic diffusion routine
4
5lambda = 0.25;
6outimage = inimage; [m,n] = size(inimage);
7
8rowC = [1:m]; rowN = [1 1:m-1]; rowS = [2:m m];
9colC = [1:n]; colE = [1 1:n-1]; colW = [2:n n];
10
11for i=1:iterations,
12 deltaN = outimage(rowN,colC) - outimage(rowC,colC);
13 deltaE = outimage(rowC,colE) - outimage(rowC,colC);
14
15 fluxN = deltaN .* exp( - ((1/K) * abs(deltaN)).^2 );
16 fluxE = deltaE .* exp( - ((1/K) * abs(deltaE)).^2 );
17
18 outimage = outimage + lambda * (fluxN - fluxN(rowS,colC) + fluxE - fluxE(rowC,colW));
19end
20
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/bin.m b/SD-VBS/common/toolbox/toolbox_basic/common/bin.m
new file mode 100755
index 0000000..e2c3c90
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/bin.m
@@ -0,0 +1,39 @@
1function [i, nnbins] = bin(x, dx, x0, x1);
2%
3% [i, nbins] = bin(x, dx, x0, x1);
4%
5% Returns the vector of indices, starting from 1,
6% corresponding to the chosen bin size, dx,
7% start x0 and end x1. If x1 is omitted, x1 = max(x) - dx/2.
8% If x0 is omitted, x0 = min(x) + dx/2. If dx is omitted, the data
9% are divided into 10 classes. Note that outliers are not removed.
10%
11% Tested under MatLab 4.2, 5.0, and 5.1.
12%
13
14% 17.1.97, Oyvind.Breivik@gfi.uib.no.
15%
16% Oyvind Breivik
17% Department of Geophysics
18% University of Bergen
19% NORWAY
20
21N = 10; % Default is 10 classes
22
23if nargin < 2
24 dx = (max(x) - min(x))/N;
25end
26if nargin < 3
27 x0 = min(x) + dx/2;
28end
29if nargin < 4
30 x1 = max(x) - dx/2;
31end
32nbins = round((x1 - x0)/dx) + 1;
33i = round((x - x0)/dx) + 1;
34%in = (i >= 1) & (i <= nbins); % Indices are within range [1, nbins].
35%i = i(in);
36
37if nargout > 1
38 nnbins = nbins;
39end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/cimgnbmap.c b/SD-VBS/common/toolbox/toolbox_basic/common/cimgnbmap.c
new file mode 100755
index 0000000..1595b68
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/cimgnbmap.c
@@ -0,0 +1,189 @@
1/*================================================================
2* function [i,j] = cimgnbmap([nr,nc], nb_r, sample_rate)
3* computes the neighbourhood index matrix of an image,
4* with each neighbourhood sampled.
5* Input:
6* [nr,nc] = image size
7* nb_r = neighbourhood radius, could be [r_i,r_j] for i,j
8* sample_rate = sampling rate, default = 1
9* Output:
10* [i,j] = each is a column vector, give indices of neighbour pairs
11* UINT32 type
12* i is of total length of valid elements, 0 for first row
13* j is of length nr * nc + 1
14*
15* See also: imgnbmap.c, id2cind.m
16*
17* Examples:
18* [i,j] = imgnbmap(10, 20); % [10,10] are assumed
19*
20* Stella X. Yu, Nov 12, 2001.
21
22% test sequence:
23nr = 15;
24nc = 15;
25nbr = 1;
26[i,j] = cimgnbmap([nr,nc], nbr);
27mask = csparse(i,j,ones(length(i),1),nr*nc);
28show_dist_w(rand(nr,nc),mask)
29
30*=================================================================*/
31
32# include "mex.h"
33# include "math.h"
34
35void mexFunction(
36 int nargout,
37 mxArray *out[],
38 int nargin,
39 const mxArray *in[]
40)
41{
42 /* declare variables */
43 int nr, nc, np, nb, total;
44 double *dim, sample_rate;
45 int r_i, r_j, a1, a2, b1, b2, self, neighbor;
46 int i, j, k, s, t, nsamp, th_rand, no_sample;
47 unsigned long *p, *qi, *qj;
48
49 /* check argument */
50 if (nargin < 2) {
51 mexErrMsgTxt("Two input arguments required");
52 }
53 if (nargout> 2) {
54 mexErrMsgTxt("Too many output arguments.");
55 }
56
57 /* get image size */
58 i = mxGetM(in[0]);
59 j = mxGetN(in[0]);
60 dim = mxGetData(in[0]);
61 nr = (int)dim[0];
62 if (j>1 || i>1) {
63 nc = (int)dim[1];
64 } else {
65 nc = nr;
66 }
67 np = nr * nc;
68
69 /* get neighbourhood size */
70 i = mxGetM(in[1]);
71 j = mxGetN(in[1]);
72 dim = mxGetData(in[1]);
73 r_i = (int)dim[0];
74 if (j>1 || i>1) {
75 r_j = (int)dim[1];
76 } else {
77 r_j = r_i;
78 }
79 if (r_i<0) { r_i = 0; }
80 if (r_j<0) { r_j = 0; }
81
82 /* get sample rate */
83 if (nargin==3) {
84 sample_rate = (mxGetM(in[2])==0) ? 1: mxGetScalar(in[2]);
85 } else {
86 sample_rate = 1;
87 }
88 /* prepare for random number generator */
89 if (sample_rate<1) {
90 srand( (unsigned)time( NULL ) );
91 th_rand = (int)ceil((double)RAND_MAX * sample_rate);
92 no_sample = 0;
93 } else {
94 sample_rate = 1;
95 th_rand = RAND_MAX;
96 no_sample = 1;
97 }
98
99 /* figure out neighbourhood size */
100
101 nb = (r_i + r_i + 1) * (r_j + r_j + 1);
102 if (nb>np) {
103 nb = np;
104 }
105 nb = (int)ceil((double)nb * sample_rate);
106
107 /* intermediate data structure */
108 p = mxCalloc(np * (nb+1), sizeof(unsigned long));
109 if (p==NULL) {
110 mexErrMsgTxt("Not enough space for my computation.");
111 }
112
113 /* computation */
114 total = 0;
115 for (j=0; j<nc; j++) {
116 for (i=0; i<nr; i++) {
117
118 self = i + j * nr;
119
120 /* put self in, otherwise the index is not ordered */
121 p[self] = p[self] + 1;
122 p[self+p[self]*np] = self;
123
124 /* j range */
125 b1 = j;
126 b2 = j + r_j;
127 if (b2>=nc) { b2 = nc-1; }
128
129 /* i range */
130 a1 = i - r_i;
131 if (a1<0) { a1 = 0; }
132 a2 = i + r_i;
133 if (a2>=nr) { a2 = nr-1; }
134
135 /* number of more samples needed */
136 nsamp = nb - p[self];
137
138 k = 0;
139 t = b1;
140 s = i + 1;
141 if (s>a2) {
142 s = a1;
143 t = t + 1;
144 }
145 while (k<nsamp && t<=b2) {
146 if (no_sample || (rand()<th_rand)) {
147 k = k + 1;
148 neighbor = s + t * nr;
149
150 p[self] = p[self] + 1;
151 p[self+p[self]*np] = neighbor;
152
153 p[neighbor] = p[neighbor] + 1;
154 p[neighbor+p[neighbor]*np] = self;
155 }
156 s = s + 1;
157 if (s>a2) {
158 s = a1;
159 t = t + 1;
160 }
161 } /* k */
162
163 total = total + p[self];
164 } /* i */
165 } /* j */
166
167 /* i, j */
168 out[0] = mxCreateNumericMatrix(total, 1, mxUINT32_CLASS, mxREAL);
169 out[1] = mxCreateNumericMatrix(np+1, 1, mxUINT32_CLASS, mxREAL);
170 qi = mxGetData(out[0]);
171 qj = mxGetData(out[1]);
172 if (out[0]==NULL || out[1]==NULL) {
173 mexErrMsgTxt("Not enough space for the output matrix.");
174 }
175
176 total = 0;
177 for (j=0; j<np; j++) {
178 qj[j] = total;
179 s = j + np;
180 for (t=0; t<p[j]; t++) {
181 qi[total] = p[s];
182 total = total + 1;
183 s = s + np;
184 }
185 }
186 qj[np] = total;
187
188 mxFree(p);
189}
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/cimgnbmap.mexa64 b/SD-VBS/common/toolbox/toolbox_basic/common/cimgnbmap.mexa64
new file mode 100755
index 0000000..19eabe1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/cimgnbmap.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/cimgnbmap.mexglx b/SD-VBS/common/toolbox/toolbox_basic/common/cimgnbmap.mexglx
new file mode 100755
index 0000000..6f3bb32
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/cimgnbmap.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/density.m b/SD-VBS/common/toolbox/toolbox_basic/common/density.m
new file mode 100755
index 0000000..23d88cc
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/density.m
@@ -0,0 +1,133 @@
1function [rrho, xxvec, yyvec] = density(x, y, dx, dy, xy0);
2% [rho, xvec, yvec] = density(x, y, dx, dy, [x0 x1 y0 y1]);
3%
4% 2-D probability density plot.
5%
6% Input: Vectors x and y of equal length. If dx and/or dy are omitted, the
7% default is 75 bins in each direction.
8%
9% If dx or dy is negative, then the variable is taken as the number of
10% bins rather than a grid resolution.
11%
12% The vector containing the limits can be padded with NaNs if only
13% certain limits are desired, e g if x0 and y1 are wanted:
14%
15% density(x, y, [.5 nan nan 45])
16%
17% Output: The density matrix RHO together with vectors XVEC and YVEC.
18% If no output arguments are specified, DENSITY will plot the density
19% function with the prescribed axes using PCOLOR.
20%
21% Requires bin.m. Tested under MatLab 4.2, 5.0, and 5.1.
22%
23% See also bin.m for further details about dx, x0, etc, and ffgrid.m.
24%
25
26% 1.9.97 Oyvind.Breivik@gfi.uib.no.
27%
28% Oyvind Breivik
29% Department of Geophysics
30% University of Bergen
31% NORWAY
32
33DX = -75; % Default grid size
34
35x = x(:);
36
37if nargin < 2
38 y = x;
39end
40
41y = y(:);
42
43xy = NaN*ones(1,4);
44
45if (nargin < 4)
46 xy0 = min(x);
47end
48
49if (nargin == 3 & length(dx) > 1)
50 xy0 = dx;
51 dx = DX;
52end
53
54if nargin < 3
55 dx = DX;
56end
57
58if (nargin == 4 & length(dy) > 1)
59 xy0 = dy;
60 dy = dx;
61end
62if nargin < 4
63 dy = dx;
64end
65
66nxy = length(xy0);
67xy(1:nxy) = xy0;
68
69if (isnan(xy(4)))
70 xy(4) = max(y);
71end
72if (isnan(xy(3)))
73 xy(3) = min(y);
74end
75if (isnan(xy(2)))
76 xy(2) = max(x);
77end
78if (isnan(xy(1)))
79 xy(1) = min(x);
80end
81x0 = xy(1); x1 = xy(2); y0 = xy(3); y1 = xy(4);
82
83if (dx < 0)
84 dx = (x1 - x0)/abs(dx);
85end
86if (dy < 0)
87 dy = (y1 - y0)/abs(dy);
88end
89
90ix = bin(x, dx, x0, x1);
91iy = bin(y, dy, y0, y1); % bin data in (x,y)-space
92
93xvec = x0:dx:x1;
94yvec = y0:dy:y1;
95
96nx = length(xvec);
97ny = length(yvec);
98
99inx = (ix >= 1) & (ix <= nx);
100iny = (iy >= 1) & (iy <= ny);
101in = (inx & iny);
102ix = ix(in); iy = iy(in);
103N = length(ix); % how many datapoints are left now?
104
105rho = zeros(length(xvec), length(yvec)) + eps;
106
107for i = 1:N
108 rho(ix(i), iy(i)) = rho(ix(i), iy(i)) + 1;
109end
110
111rho = rho/(N*dx*dy); % Density is n per dx per dy
112
113rho = rho'; % Get in shape
114
115if nargout == 0
116 pcolor(xvec, yvec, sqrt(rho)); shading interp; axis image;
117 colorbar
118 colormap jet
119 xlabel(inputname(1))
120 ylabel(inputname(2))
121 dum = size(rho');
122 str = sprintf('%d data points, grid: %dx%d', N, dum(1)-1, dum(2)-1);
123 title(str);
124end
125
126if nargout > 0
127 rrho = rho;
128end
129
130if nargout > 1
131 xxvec = xvec;
132 yyvec = yvec;
133end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/find_edge.m b/SD-VBS/common/toolbox/toolbox_basic/common/find_edge.m
new file mode 100755
index 0000000..4299c29
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/find_edge.m
@@ -0,0 +1,24 @@
1function [edgemap,mag,th] = find_edge(I,sig,mag_thld)
2%
3% [edgemap,mag,th] = find_edge(I,sig,mag_thld)
4%
5
6if nargin<2,
7 sig = 1;
8end
9
10if nargin<3,
11 mag_thld = 1/30;
12end
13
14I = I/max(I(:));
15
16ismax = 1;r = 1;
17
18[gx,gy] = grad(I,sig);
19[th,mag] = cart2pol(gy,gx);
20
21g = cat(3,gy,gx);
22edgemap = nonmaxsup(g,ismax,r);
23edgemap = edgemap.*(mag>mag_thld);
24
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/grad.m b/SD-VBS/common/toolbox/toolbox_basic/common/grad.m
new file mode 100755
index 0000000..05fce39
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/grad.m
@@ -0,0 +1,28 @@
1% gradient of an image
2% coordinates (r, c) follow matrix convention;
3% the gaussian is truncated at x = +- tail, and there are samples samples
4% inbetween, where samples = hsamples * 2 + 1
5
6function[gr,gc] = gradient(image, hsamples,cm)
7
8if nargin <3,
9 cm = 'same';
10end
11
12tail=4;
13samples = hsamples * 2 + 1;
14
15x = linspace(-tail, tail, samples);
16gauss = exp(-x.^2);
17n = gauss * ones(samples,1);
18gauss = gauss/n;
19
20gaussderiv = -x.*gauss;
21n = -gaussderiv*linspace(1,samples,samples)';
22gaussderiv = gaussderiv/n;
23
24%gr = conv2(conv2(image, gaussderiv','valid'), gauss,'valid');
25%gc = conv2(conv2(image, gaussderiv,'valid'), gauss','valid');
26
27gr = conv2(conv2(image, gaussderiv',cm), gauss,cm);
28gc = conv2(conv2(image, gaussderiv,cm), gauss',cm);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/make_filterbank_even2.m b/SD-VBS/common/toolbox/toolbox_basic/common/make_filterbank_even2.m
new file mode 100755
index 0000000..937f9bd
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/make_filterbank_even2.m
@@ -0,0 +1,45 @@
1function FB = make_filterbank(num_ori,filter_scales,wsz,enlong)
2%
3% F = make_filterbank(num_ori,num_scale,wsz)
4%
5
6if nargin<4,
7 enlong = 3;
8end
9
10enlong = 2*enlong
11
12% definine filterbank
13%num_ori=6;
14%num_scale=3;
15
16num_scale = length(filter_scales);
17
18M1=wsz; % size in pixels
19M2=M1;
20
21ori_incr=180/num_ori;
22ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
23
24FB=zeros(M1,M2,num_ori,num_scale);
25
26% elongated filter set
27counter = 1;
28
29for m=1:num_scale
30 for n=1:num_ori
31 % r=12 here is equivalent to Malik's r=3;
32 f=doog2(filter_scales(m),enlong,ori_offset+(n-1)*ori_incr,M1);
33 FB(:,:,n,m)=f;
34 end
35end
36
37FB=reshape(FB,M1,M2,num_scale*num_ori);
38total_num_filt=size(FB,3);
39
40for j=1:total_num_filt,
41 F = FB(:,:,j);
42 a = sum(sum(abs(F)));
43 FB(:,:,j) = FB(:,:,j)/a;
44end
45
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/make_filterbank_odd2.m b/SD-VBS/common/toolbox/toolbox_basic/common/make_filterbank_odd2.m
new file mode 100755
index 0000000..0059dca
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/make_filterbank_odd2.m
@@ -0,0 +1,46 @@
1function FB = make_filterbank(num_ori,filter_scales,wsz,enlong)
2%
3% F = make_filterbank(num_ori,num_scale,wsz)
4%
5
6if nargin<4,
7 enlong = 3;
8end
9
10enlong = enlong*2;
11
12% definine filterbank
13%num_ori=6;
14%num_scale=3;
15
16num_scale = length(filter_scales);
17
18M1=wsz; % size in pixels
19M2=M1;
20
21ori_incr=180/num_ori;
22ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
23
24FB=zeros(M1,M2,num_ori,num_scale);
25
26
27% elongated filter set
28counter = 1;
29
30for m=1:num_scale
31 for n=1:num_ori
32 % r=12 here is equivalent to Malik's r=3;
33 f=doog1(filter_scales(m),enlong,ori_offset+(n-1)*ori_incr,M1);
34 FB(:,:,n,m)=f;
35 end
36end
37
38FB=reshape(FB,M1,M2,num_scale*num_ori);
39total_num_filt=size(FB,3);
40
41for j=1:total_num_filt,
42 F = FB(:,:,j);
43 a = sum(sum(abs(F)));
44 FB(:,:,j) = FB(:,:,j)/a;
45end
46
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/max_supress2.m b/SD-VBS/common/toolbox/toolbox_basic/common/max_supress2.m
new file mode 100755
index 0000000..05b5f11
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/max_supress2.m
@@ -0,0 +1,59 @@
1function NMS = max_supress2(data,ismax);
2%
3% NMS = max_supress(data,ismax);
4%
5% data: [nr,nc,nfilter,nscale]
6% of filter mag. map
7% ismax: 1 local max, 0 local min
8%
9
10[nr,nc,nfilter,nscale] = size(data);
11
12% set up the orthognal neighbourhood for each oriented filter
13if nfilter == 6,
14 nbr_template=[1 1 1 0 -1 -1
15 0 1 1 1 1 1];
16else
17 nbr_template=[1 0 ;
18 0 1];
19end
20
21%% for each scale, compute the dominate filter response
22canny_dir_I = zeros(nr,nc,nscale);
23
24for m = 1:nscale,
25 [max_Ori_resp_I,Ori_sca_I] = max(data(:,:,:,m),[],3);
26 canny_dir_I(:,:,m) = Ori_sca_I;
27end
28
29max_Ori_resp_small = max_Ori_resp_I(2:end-1,2:end-1);
30canny_dir = canny_dir_I(2:end-1,2:end-1);
31
32%%
33
34NMS = zeros(nr,nc,nscale);
35
36
37for m = 1:nscale,
38
39 [x,y] = meshgrid(2:nc-1,2:nr-1);
40 xid = x(:)+nbr_template(2,canny_dir(:))';
41 yid = y(:)+nbr_template(1,canny_dir(:))';
42 id1 = (xid-1)*nr+yid;
43
44 xid = x(:)-nbr_template(2,canny_dir(:))';
45 yid = y(:)-nbr_template(1,canny_dir(:))';
46 id2 = (xid-1)*nr+yid;
47 if ismax,
48 a = (max_Ori_resp_small(:)>max_Ori_resp_I(id1(:))) .* (max_Ori_resp_small(:)>max_Ori_resp_I(id2(:)));
49 NMS(2:end-1,2:end-1,m) = reshape(a,nr-2,nc-2);
50 NMS(:,:,m) = NMS(:,:,m).*max_Ori_resp_I;
51 else
52 a = (max_Ori_resp_small(:)<max_Ori_resp_I(id1(:))) .* (max_Ori_resp_small(:)<max_Ori_resp_I(id2(:)));
53 NMS(2:end-1,2:end-1,m) = reshape(a,nr-2,nc-2);
54 end
55
56end
57
58
59
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/mgrad.m b/SD-VBS/common/toolbox/toolbox_basic/common/mgrad.m
new file mode 100755
index 0000000..1d89c87
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/mgrad.m
@@ -0,0 +1,11 @@
1function [dx,dy] = mgrad(I,w)
2%
3% [dx,dy] = mgrad(I,w)
4%
5
6[nr,nc] = size(I);
7
8dx = zeros(nr,nc);dy = zeros(nr,nc);
9
10dx(:,1:nc-w) = I(:,1:nc-w) - I(:,w+1:nc);
11dy(1:nr-w,:) = I(1:nr-w,:) - I(w+1:nr,:);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/mpgread.m b/SD-VBS/common/toolbox/toolbox_basic/common/mpgread.m
new file mode 100755
index 0000000..7f964ab
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/mpgread.m
@@ -0,0 +1,25 @@
1%MPGREAD Read an MPEG encoded movie file.
2% [M, map] = mpgread('filename', frames) reads the specifed
3% MPEG file and translates it into the movie M, and colormap map.
4% If a vector frames is specified, then only the frames specified
5% in this vector will be placed in M. Otherwise, all frames will
6% be placed in M.
7%
8% M = mpgread('filename', frames, 'indexed')
9% Reads an MPEG file into the MATLAB 5.3+ format movie which
10% is a structure array. Each element has a cdata field
11% containing a uint8 image matrix and a colormap field
12% containing the colormap. The frames parameter can be [] to
13% indicate that all frames should be read.
14%
15% M = mpgread('filename', frames, 'truecolor')
16% Reads an MPEG file into the MATLAB 5.3+ format movie. Each
17% frame in the movie has a truecolor MxNx3 cdata field and
18% an empty colormap field.
19%
20% [R, G, B] = mpgread('filename', frames) will perform the same
21% operation as above, except that the decoded MPEG frames will
22% be placed into the matrices R, G, B, where R contains the red
23% component for each frame, G, the green component, and B, the
24% blue component.
25%
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/mpgread.mexlx b/SD-VBS/common/toolbox/toolbox_basic/common/mpgread.mexlx
new file mode 100755
index 0000000..1190192
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/mpgread.mexlx
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/mpgwrite.m b/SD-VBS/common/toolbox/toolbox_basic/common/mpgwrite.m
new file mode 100755
index 0000000..b1cb773
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/mpgwrite.m
@@ -0,0 +1,29 @@
1%MPGWRITE Write an MPEG file.
2% MPGWRITE(M, map, 'filename', options) Encodes M in MPEG
3% format using the specified colormap and writes the result to the
4% specified file. The options argument is an optional vector of
5% 8 or fewer options where each value has the following meaning:
6% 1. REPEAT:
7% An integer number of times to repeat the movie
8% (default is 1).
9% 2. P-SEARCH ALGORITHM:
10% 0 = logarithmic (fastest, default value)
11% 1 = subsample
12% 2 = exhaustive (better, but slow)
13% 3. B-SEARCH ALGORITHM:
14% 0 = simple (fastest)
15% 1 = cross2 (slightly slower, default value)
16% 2 = exhaustive (very slow)
17% 4. REFERENCE FRAME:
18% 0 = original (faster, default)
19% 1 = decoded (slower, but results in better quality)
20% 5. RANGE IN PIXELS:
21% An integer search radius. Default is 10.
22% 6. I-FRAME Q-SCALE:
23% An integer between 1 and 31. Default is 8.
24% 7. P-FRAME Q-SCALE:
25% An integer between 1 and 31. Default is 10.
26% 8. B-FRAME Q-SCALE:
27% An integer between 1 and 31. Default is 25.
28%
29
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/mpgwrite.mexlx b/SD-VBS/common/toolbox/toolbox_basic/common/mpgwrite.mexlx
new file mode 100755
index 0000000..770bad1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/mpgwrite.mexlx
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/ncut.m b/SD-VBS/common/toolbox/toolbox_basic/common/ncut.m
new file mode 100755
index 0000000..81fb52f
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/ncut.m
@@ -0,0 +1,108 @@
1% function [v,s,na,d] = ncut(a,nv,sigma,offset)
2% Input:
3% a = affinity matrix, hermitian, could be 3D, or a cell
4% nv = number of eigenvectors v
5% sigma = refer to EIGS.M, 0 for smallest, default = 'LR'
6% offset = vector, each for an affinity matrix, offset for nondirectional repulsion
7% W = A - R = (A + offset) - (R + offset)
8% Expected value = offset in affinity value * # of neighboors
9% Output:
10% v = generalized eigenvectors of A and D
11% s = eigenvalues
12% na = normalized affinity matrix
13% d = normalization matrix 1/sqrt(rowsum(a))
14% This version now accepts multiple weight matrices
15% the format of cells are good for sparse affinity matrices
16
17% Jianbo Shi
18
19function [v,s,na,d] = ncut(a,nv,sigma,offset)
20
21is_cell = iscell(a);
22if is_cell,
23 nw = length(a);
24 [nr,nc] = size(a{1});
25else
26 [nr,nc,nw] = size(a);
27end
28
29if nargin<2 | isempty(nv),
30 nv = min(nr,6);
31end
32
33if nargin<3 | isempty(sigma),
34 sigma = 'LR';
35end
36
37if nargin<4 | isempty(offset),
38 offset = 0;
39end;
40offset=offset(:);
41j = length(offset);
42offset(j+1:nw) = offset(j);
43
44d = 0;
45na = sparse(nr,nc);
46for j=1:nw, % simultaneous partitioning with multiple weight matrices.
47 if is_cell,
48 w = a{j};
49 elseif issparse(a), % only supports 2D indexing
50 w = a;
51 else
52 w = a(:,:,j);
53 end
54 if j==nw, % to save space
55 clear a;
56 end
57
58 d = d + sum(abs(w),2) + 2*offset(j); % single equivalent D
59
60 % modify matrix a to deal with nondirectional repulsion
61 wr = real(w);
62 wr = (sum(abs(wr),2)-sum(wr,2))*0.5 + offset(j);
63 w = w + spdiags(wr,0,nr,nr);
64
65 na = na + w; % single equivalent A
66
67 % if you want the rectified individual weight matrix
68 %if is_cell,
69 % a{j} = w;
70 %else
71 % a(:,:,j) = w;
72 %end
73end
74clear w wr
75
76% normalize
77d = 1./sqrt(d+eps);
78if 1,
79 na = spmtimesd(na,d,d);
80else
81 d = spdiags(d,0,nr,nr);
82 na = d * na * d;
83end
84
85options.disp = 0;
86%options.tol = 1e-10;
87%options.maxit = 15;
88
89warning off
90[v,s] = eigs(na,nv,sigma,options);
91s = real(diag(s));
92warning on
93
94% to make sure positive eigs always come first
95% [x,y] = sort(-s);
96% s = -x;
97% v = v(:,y);
98
99% project back to get the eigenvectors for the pair (a,d)
100% a x = lambda d x
101% na y = lambda y
102% x = d^(-1/2) y
103
104if 1,
105 v = spdiags(d,0,nr,nr) * v;
106else
107 v = d * v;
108end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/ncut_b.m b/SD-VBS/common/toolbox/toolbox_basic/common/ncut_b.m
new file mode 100755
index 0000000..d686981
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/ncut_b.m
@@ -0,0 +1,46 @@
1function [v,d] = ncut(A,nv)
2%
3% [v,d] = ncut(A,nv)
4%
5%
6% computes 'nv' of the normalized cut vectors 'v' from
7% matrix 'A'
8%
9% it computes the largest eigenvectors of
10% A*v = \lambda D * v; D = diag(sum(A));
11%
12% this is same as solving the smallest eigenvectors of
13% (D-A)*v = \lambda D *v;
14%
15
16%
17% Jianbo Shi
18%
19
20ds = sum(A);
21ds = ones(size(ds))./sqrt(ds);
22
23for j=1:size(A,1),
24 A(j,:) = A(j,:).*ds;
25end
26
27for j=1:size(A,2);
28 A(:,j) = A(:,j).*ds';
29end
30
31
32%disp(sprintf('computing eig values'));
33OPTIONS.tol=1e-10;
34OPTIONS.maxit=15;
35OPTIONS.disp=0;
36%tic;toc;
37
38[v,d] = eigs(A,nv,'LM',OPTIONS);
39
40d = abs(diag(d));
41
42for j=1:nv,
43 v(:,j) = v(:,j).*ds';
44end
45
46
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/ncut_bb.m b/SD-VBS/common/toolbox/toolbox_basic/common/ncut_bb.m
new file mode 100755
index 0000000..c9b7394
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/ncut_bb.m
@@ -0,0 +1,39 @@
1function [v,d] = ncut(A,nv)
2%
3% [v,d] = ncut(A,nv)
4%
5%
6% computes 'nv' of the normalized cut vectors 'v' from
7% matrix 'A'
8%
9% it computes the largest eigenvectors of
10% A*v = \lambda D * v; D = diag(sum(A));
11%
12% this is same as solving the smallest eigenvectors of
13% (D-A)*v = \lambda D *v;
14%
15
16%
17% Jianbo Shi
18%
19
20ds = sum(A);
21ds = ones(size(ds))./sqrt(ds);
22
23D_inv_half = spdiags(ds',0,size(A,1),size(A,2));
24A = D_inv_half*A*D_inv_half;
25
26disp(sprintf('computing eig values'));
27OPTIONS.tol=1e-10;
28OPTIONS.maxit=15;
29OPTIONS.disp=0;
30%tic;toc;
31
32[v,d] = eigs(A,nv,OPTIONS);
33
34d = abs(diag(d));
35
36for j=1:nv,
37 v(:,j) = v(:,j).*ds';
38end
39
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/ncut_e.m b/SD-VBS/common/toolbox/toolbox_basic/common/ncut_e.m
new file mode 100755
index 0000000..e06c8a6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/ncut_e.m
@@ -0,0 +1,36 @@
1function [v,d] = ncut(A,nv)
2%
3% [v,d] = ncut(A,nv)
4%
5% computes 'nv' of the normalized cut vectors 'v' from
6% matrix 'A'
7%
8
9%
10% Jianbo Shi
11%
12
13ds = sum(A);
14D = diag(ds);
15
16ds = ones(size(ds))./sqrt(ds);
17
18B = D-A;
19
20for j=1:size(A,1),
21 B(j,:) = B(j,:).*ds;
22end
23
24for j=1:size(A,2);
25 B(:,j) = B(:,j).*ds';
26end
27
28disp(sprintf('computing eig values'));
29tic;[v,d] = eigs(B,nv,'sm');toc;
30
31d = abs(diag(d));
32
33for j=1:nv,
34 v(:,j) = v(:,j).*ds';
35end
36
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/ncut_neg.m b/SD-VBS/common/toolbox/toolbox_basic/common/ncut_neg.m
new file mode 100755
index 0000000..89a1caa
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/ncut_neg.m
@@ -0,0 +1,45 @@
1function [v,d] = ncut(A,nv)
2%
3% [v,d] = ncut(A,nv)
4%
5%
6% computes 'nv' of the normalized cut vectors 'v' from
7% matrix 'A'
8%
9% it computes the largest eigenvectors of
10% A*v = \lambda D * v; D = diag(sum(A));
11%
12% this is same as solving the smallest eigenvectors of
13% (D-A)*v = \lambda D *v;
14%
15
16%
17% Jianbo Shi
18%
19
20ds = sum(abs(A));
21ds = ones(size(ds))./sqrt(ds);
22
23for j=1:size(A,1),
24 A(j,:) = A(j,:).*ds;
25end
26
27for j=1:size(A,2);
28 A(:,j) = A(:,j).*ds';
29end
30
31
32%disp(sprintf('computing eig values'));
33OPTIONS.tol=1e-10;
34OPTIONS.maxit=15;
35OPTIONS.disp=0;
36%tic;toc;
37
38[v,d] = eigs(A,nv,OPTIONS);
39
40d = abs(diag(d));
41
42for j=1:nv,
43 v(:,j) = v(:,j).*ds';
44end
45
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/ncut_sparse.m b/SD-VBS/common/toolbox/toolbox_basic/common/ncut_sparse.m
new file mode 100755
index 0000000..dc6d076
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/ncut_sparse.m
@@ -0,0 +1,45 @@
1function [v,d] = ncut(A,nv)
2%
3% [v,d] = ncut(A,nv)
4%
5% Assume A is sparse,
6%
7% computes 'nv' of the normalized cut vectors 'v' from
8% matrix 'A'
9%
10% it computes the largest eigenvectors of
11% A*v = \lambda D * v; D = diag(sum(A));
12%
13% this is same as solving the smallest eigenvectors of
14% (D-A)*v = \lambda D *v;
15%
16
17%
18% Jianbo Shi
19%
20
21ds = sum(abs(A));
22ds = 1./sqrt(ds);
23
24[id_i,id_j,W] = find(A);
25A = sparse(id_i,id_j,ds(id_i)'.*ds(id_j)'.*(W));
26
27%disp(sprintf('computing eig values'));
28SIGMA = 'LM';
29%OPTIONS.issym = 0;
30OPTIONs.isreal = 1;
31OPTIONS.tol=1e-12;
32OPTIONS.maxit=25;
33OPTIONS.disp=0;
34%tic;toc;
35
36tic
37[v,d] = eigs(A,nv,SIGMA,OPTIONS);
38%,OPTIONS);
39toc
40d = abs(diag(d));
41
42for j=1:nv,
43 v(:,j) = v(:,j).*ds';
44end
45
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/ncut_tmp.m b/SD-VBS/common/toolbox/toolbox_basic/common/ncut_tmp.m
new file mode 100755
index 0000000..b623ee4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/ncut_tmp.m
@@ -0,0 +1,45 @@
1function [v,d] = ncut(A,nv)
2%
3% [v,d] = ncut(A,nv)
4%
5%
6% computes 'nv' of the normalized cut vectors 'v' from
7% matrix 'A'
8%
9% it computes the largest eigenvectors of
10% A*v = \lambda D * v; D = diag(sum(A));
11%
12% this is same as solving the smallest eigenvectors of
13% (D-A)*v = \lambda D *v;
14%
15
16%
17% Jianbo Shi
18%
19
20ds = sum(A);
21ds = ones(size(ds))./sqrt(ds);
22
23for j=1:size(A,1),
24 A(j,:) = A(j,:).*ds;
25end
26
27for j=1:size(A,2);
28 A(:,j) = A(:,j).*ds';
29end
30
31
32%disp(sprintf('computing eig values'));
33OPTIONS.tol=1e-10;
34OPTIONS.maxit=15;
35OPTIONS.disp=0;
36%tic;toc;
37
38[v,d] = eigs(A,nv,OPTIONS);
39
40d = abs(diag(d));
41
42for j=1:nv,
43 v(:,j) = v(:,j).*ds';
44end
45
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/ncutd.m b/SD-VBS/common/toolbox/toolbox_basic/common/ncutd.m
new file mode 100755
index 0000000..cd5e8a4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/ncutd.m
@@ -0,0 +1,108 @@
1% function [v,s,na,d] = ncutd(a,nv,beta,sigma,offset)
2% Input:
3% a = (attraction + i*repulsion), both nonnegative but could be asymmetrical
4% nv = number of eigenvectors v
5% beta = weighting between undirected graph and directed graph
6% beta = 1, undirected; beta = 0, directed. Default = 0.5
7% sigma = refer to EIGS.M, 0 for smallest, default = 'LR'
8% offset = vector, each for an affinity matrix,
9% per_edge offset for nondirectional attraction and repulsion
10% Output:
11% v = generalized eigenvectors of A and D
12% s = eigenvalues
13% na = normalized affinity matrix
14% d = normalization matrix 1/sqrt(rowsum(a))
15% This version now accepts multiple weight matrices
16% the format of cells are good for sparse affinity matrices
17
18% Stella X. Yu, 2001.
19
20function [v,s,na,d] = ncutd(a,nv,beta,sigma,offset)
21
22is_cell = iscell(a);
23if is_cell,
24 nw = length(a);
25 [nr,nc] = size(a{1});
26else
27 [nr,nc,nw] = size(a);
28end
29
30if nargin<2 | isempty(nv),
31 nv = min(nr,6);
32end
33
34if nargin<3 | isempty(beta),
35 beta = 0.5;
36end
37beta = beta *2;
38
39if nargin<4 | isempty(sigma),
40 sigma = 'LR';
41end
42
43if nargin<5 | isempty(offset),
44 offset = 0;
45end;
46offset=offset(:);
47j = length(offset);
48offset(j+1:nw) = offset(j);
49
50% modify per-edge offset delta to 2 D_{\delta} = offset to D_R
51offset = offset * (2*nc);
52
53z = zeros(nr,nw);
54na = 0;
55for j=1:nw, % simultaneous partitioning with multiple weight matrices.
56 if is_cell,
57 w = a{j};
58 elseif issparse(a), % only supports 2D indexing
59 w = a;
60 else
61 w = a(:,:,j);
62 end
63
64 wr = real(w); % attraction
65 wi = imag(w); % repulsion
66
67 % if wr has negative numbers, treat as repulsion
68 % while negative numbers in wi is ignored
69 aa = wr.*(wr>0);
70 rr = wi.*(wi>0)-wr.*(wr<0);
71
72 % decomposition
73 au = aa + aa';
74 ad = aa - aa';
75 ru = rr + rr';
76 rd = rr - rr';
77
78 % construct equivalent matrices
79 x = sum(ru,2);
80 wr = au - ru + diag(x);
81 wi = ad + rd;
82 x = x + sum(au,2);
83
84 % re-organize, add in offset and beta
85 z(:,j) = x + 2 * offset;
86 na = na + ( beta * (wr + offset) + sqrt(-1)* (2-beta) * wi );
87
88end
89z = sum(z,2); % diag(z) = single equivalent D
90
91% normalize
92d = repmat(1./sqrt(z+eps),1,nc);
93na = d.*na;
94na = na.*d';
95
96options.disp = 0;
97%options.tol = 1e-10;
98%options.maxit = 15;
99
100[v,s] = eigs(na,nv,sigma,options);
101s = real(diag(s));
102
103% project back to get the eigenvectors for the pair (a,d)
104% a x = lambda d x
105% na y = lambda y
106% x = d^(-1/2) y
107
108v = v .* d(:,ones(nv,1));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/nonmaxsup.m b/SD-VBS/common/toolbox/toolbox_basic/common/nonmaxsup.m
new file mode 100755
index 0000000..d12301c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/nonmaxsup.m
@@ -0,0 +1,81 @@
1% function f = nonmaxsup(g,ismax,r) return extrema boolean map.
2% Input: g = image, gradient image pair [x,y], or [x,y,g] in 3D matrix
3% ismax (=1)/0 is for non maximum/minimum suppression
4% r (=1) is the neighbourhood radius.
5% Output:
6% f = thinned extrema boolean map, where
7% d (||gradient||) / d gradient = 0
8
9% Stella X. Yu, 2000.
10
11function f = nonmaxsup(g,ismax,r)
12
13if nargin<2,
14 ismax = 1;
15end
16
17if nargin<3,
18 r = 1;
19end
20
21i = size(g,3);
22if i==3,
23 x = g(:,:,1);
24 y = g(:,:,2);
25 g = g(:,:,3);
26elseif i==2,
27 x = g(:,:,1);
28 y = g(:,:,2);
29 g = x.*x + y.*y;
30else
31 [x,y] = gradient(g);
32end
33
34% label angles into 4 directions
35a = angle(x - sqrt(-1).*y); % [-pi,pi)
36s = ceil((abs(a)+pi/8)./(pi/4));
37s(find(s==5)) = 1;
38s(find(isnan(s))) = 1;
39
40% augment the image
41[m,n] = size(g);
42newm = m + r + r;
43i = [g(:,1);g(:,end);g(1,:)';g(end,:)']; % image boundary
44if ismax,
45 v = min(i) - 1;
46else
47 v = max(i) + 1;
48end
49i = zeros(newm,r) + v;
50j = zeros(r,n) + v;
51newg = [i, [j; g; j;], i];
52
53% k = index as the interior of the new image
54i = [r+1:newm-r]'+ r*newm;
55j = [0:n-1].*newm;
56k = i(:,ones(1,n)) + j(ones(1,m),:);
57k = k(:);
58
59% unit displacement vectors along gradient directions
60d = [newm,newm-1,-1,-1-newm]'; % for 4 directions
61d = d(s(:));
62
63% non maximum suppression
64f = ones(m*n,1);
65g = g(:);
66newd = 0;
67
68if ismax,
69 for i=1:r,
70 newd = newd + d;
71 f = f & (g>newg(k+newd)) & (g>newg(k-newd));
72 end
73else
74 for i=1:r,
75 newd = newd + d;
76 f = f & (g<newg(k+newd)) & (g<newg(k-newd));
77 end
78end
79
80f = reshape(f,[m,n]);
81
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/pair_dist.m b/SD-VBS/common/toolbox/toolbox_basic/common/pair_dist.m
new file mode 100755
index 0000000..3ea970a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/pair_dist.m
@@ -0,0 +1,14 @@
1function W = pari_hist_dist_fast(data)
2%
3% W = pari_hist_dist(data)
4%
5% data: num_im by num_feature
6% W : num_im by num_im hist diff
7%
8
9[num_im,num_feature] = size(data);
10mag = sum(data.*data,2);
11
12W = mag(:,ones(1,num_im)) - 2*data*data';
13mag = mag';
14W = W+mag(ones(num_im,1),:);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/quadedgep.m b/SD-VBS/common/toolbox/toolbox_basic/common/quadedgep.m
new file mode 100755
index 0000000..eda33f9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/quadedgep.m
@@ -0,0 +1,106 @@
1% function [x,y,gx,gy,par,threshold,mag,mage,g,FIe,FIo,mago] = quadedgep(I,par,threshold);
2% Input:
3% I = image
4% par = vector for 4 parameters
5% [number of filter orientations, number of scales, filter size, elongation]
6% To use default values, put 0.
7% threshold = threshold on edge strength
8% Output:
9% [x,y,gx,gy] = locations and gradients of an ordered list of edgels
10% x,y could be horizontal or vertical or 45 between pixel sites
11% but it is guaranteed that there [floor(y) + (floor(x)-1)*nr]
12% is ordered and unique. In other words, each edgel has a unique pixel id.
13% par = actual par used
14% threshold = actual threshold used
15% mag = edge magnitude
16% mage = phase map
17% g = gradient map at each pixel
18% [FIe,FIo] = odd and even filter outputs
19% mago = odd filter output of optimum orientation
20
21% Stella X. Yu, 2001
22
23function [x,y,gx,gy,par,threshold,mag,mage,g,FIe,FIo,mago] = quadedgep(I,par,threshold);
24
25if nargin<3 | isempty(threshold),
26 threshold = 0.2;
27end
28
29[r,c] = size(I);
30def_par = [8,1,20,3];
31
32% take care of parameters, any missing value is substituted by a default value
33if nargin<2 | isempty(par),
34 par = def_par;
35end
36par(end+1:4)=0;
37par = par(:);
38j = (par>0);
39have_value = [ j, 1-j ];
40j = 1; n_filter = have_value(j,:) * [par(j); def_par(j)];
41j = 2; n_scale = have_value(j,:) * [par(j); def_par(j)];
42j = 3; winsz = have_value(j,:) * [par(j); def_par(j)];
43j = 4; enlong = have_value(j,:) * [par(j); def_par(j)];
44
45% always make filter size an odd number so that the results will not be skewed
46j = winsz/2;
47if not(j > fix(j) + 0.1),
48 winsz = winsz + 1;
49end
50
51% filter the image with quadrature filters
52FBo = make_filterbank_odd2(n_filter,n_scale,winsz,enlong);
53FBe = make_filterbank_even2(n_filter,n_scale,winsz,enlong);
54n = ceil(winsz/2);
55f = [fliplr(I(:,2:n+1)), I, fliplr(I(:,c-n:c-1))];
56f = [flipud(f(2:n+1,:)); f; flipud(f(r-n:r-1,:))];
57FIo = fft_filt_2(f,FBo,1);
58FIo = FIo(n+[1:r],n+[1:c],:);
59FIe = fft_filt_2(f,FBe,1);
60FIe = FIe(n+[1:r],n+[1:c],:);
61
62% compute the orientation energy and recover a smooth edge map
63% pick up the maximum energy across scale and orientation
64% even filter's output: as it is the second derivative, zero cross localize the edge
65% odd filter's output: orientation
66mag = sqrt(sum(FIo.^2,3)+sum(FIe.^2,3));
67mag_a = sqrt(FIo.^2+FIe.^2);
68[tmp,max_id] = max(mag_a,[],3);
69base_size = r * c;
70id = [1:base_size]';
71mage = reshape(FIe(id+(max_id(:)-1)*base_size),[r,c]);
72mage = (mage>0) - (mage<0);
73
74ori_incr=pi/n_filter; % to convert jshi's coords to conventional image xy
75ori_offset=ori_incr/2;
76theta = ori_offset+([1:n_filter]-1)*ori_incr; % orientation detectors
77% [gx,gy] are image gradient in image xy coords, winner take all
78mago = reshape(FIo(id+(max_id(:)-1)*base_size),[r,c]);
79ori = theta(max_id);
80ori = ori .* (mago>0) + (ori + pi).*(mago<0);
81gy = mag .* cos(ori);
82gx = -mag .* sin(ori);
83g = cat(3,gx,gy);
84
85% phase map: edges are where the phase changes
86mag_th = max(mag(:)) * threshold;
87eg = (mag>mag_th);
88h = eg & [(mage(2:r,:) ~= mage(1:r-1,:)); zeros(1,c)];
89v = eg & [(mage(:,2:c) ~= mage(:,1:c-1)), zeros(r,1)];
90[y,x] = find(h | v);
91k = y + (x-1) * r;
92h = h(k);
93v = v(k);
94y = y + h * 0.5; % i
95x = x + v * 0.5; % j
96t = h + v * r;
97gx = g(k) + g(k+t);
98k = k + (r * c);
99gy = g(k) + g(k+t);
100
101% display
102if 1,
103%figure; showmask(I,mage<0);
104figure(2); clf;showim(I,1); hold on; quiver(x,y,gx,gy);
105%figure; showim(-I,1); hold on; quiver(i,j,ex,ey);
106end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/readpcm.m b/SD-VBS/common/toolbox/toolbox_basic/common/readpcm.m
new file mode 100755
index 0000000..ca736da
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/readpcm.m
@@ -0,0 +1,12 @@
1function I = readpcm(filename)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d\n',2);
6I = fscanf(fid,'%c',A(2)*A(1));
7I = I';
8I = str2num(I);
9I = reshape(I,A(2),A(1))';
10
11
12fclose(fid); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/readpdm.m b/SD-VBS/common/toolbox/toolbox_basic/common/readpdm.m
new file mode 100755
index 0000000..9a1068e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/readpdm.m
@@ -0,0 +1,8 @@
1function I = readpfm(filename)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',2);
6I = fscanf(fid,'%d',[A(1),A(2)]);
7
8fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/readpfm.m b/SD-VBS/common/toolbox/toolbox_basic/common/readpfm.m
new file mode 100755
index 0000000..48ecd78
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/readpfm.m
@@ -0,0 +1,10 @@
1function I = readpfm(filename)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',2);
6I = fscanf(fid,'%f',[A(1),A(2)]);
7
8%I = fscanf(fid,'%f',A(2)*A(1));I = reshape(I,A(1),A(2));
9
10fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/renormalize.m b/SD-VBS/common/toolbox/toolbox_basic/common/renormalize.m
new file mode 100755
index 0000000..5d84724
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/renormalize.m
@@ -0,0 +1,32 @@
1function W2 = renormalize(W,nstep)
2%
3% keep renormalizing until W is almost double
4% stocastic
5%
6
7if nargin<2,
8 nstep = 5;
9end
10
11n_node = size(W,1);
12
13for j=1:nstep,
14 fprintf(',');
15 % normalize row
16 D = sum(W,2);
17 D = 1./(D+eps);
18 W = W.*D(:,ones(1,n_node));
19
20 % normlize column
21 D = sum(W,1);
22 D = 1./(D+eps);
23 W = W.*D(ones(n_node,1),:);
24end
25fprintf('\n');
26
27 D = sum(W,2);
28 D = 1./(D+eps);
29 W2 = W.*D(:,ones(1,n_node));
30
31
32
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/show_edge.m b/SD-VBS/common/toolbox/toolbox_basic/common/show_edge.m
new file mode 100755
index 0000000..63b2f98
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/show_edge.m
@@ -0,0 +1,11 @@
1function [id_i,id_j,ids] = show_edge(I,MI,thI);
2%
3% show_edge(I,MI,thI);
4%
5
6[id_i,id_j,tmp] = find(MI);
7ids = sub2ind(size(I),id_i,id_j);
8clf;im(I);colormap(gray);hold on;
9quiver(id_j,id_i,-sin(thI(ids)),cos(thI(ids)),0.5);hold off;
10
11
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/spmtimesd.c b/SD-VBS/common/toolbox/toolbox_basic/common/spmtimesd.c
new file mode 100755
index 0000000..a98dc0a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/spmtimesd.c
@@ -0,0 +1,141 @@
1/*================================================================
2* spmtimesd.c
3* This routine computes a sparse matrix times a diagonal matrix
4* whose diagonal entries are stored in a full vector.
5*
6* Examples:
7* spmtimesd(m,d,[]) = diag(d) * m,
8* spmtimesd(m,[],d) = m * diag(d)
9* spmtimesd(m,d1,d2) = diag(d1) * m * diag(d2)
10* m could be complex, but d is assumed real
11*
12* Stella X. Yu's first MEX function, Nov 9, 2001.
13
14% test sequence:
15
16m = 1000;
17n = 2000;
18a=sparse(rand(m,n));
19d1 = rand(m,1);
20d2 = rand(n,1);
21tic; b=spmtimesd(a,d1,d2); toc
22tic; bb = spdiags(d1,0,m,m) * a * spdiags(d2,0,n,n); toc
23e = (bb-b);
24max(abs(e(:)))
25
26*=================================================================*/
27
28# include "mex.h"
29
30void mexFunction(
31 int nargout,
32 mxArray *out[],
33 int nargin,
34 const mxArray *in[]
35)
36{
37 /* declare variables */
38 int i, j, k, m, n, nzmax, cmplx, xm, yn;
39 int *pir, *pjc, *qir, *qjc;
40 double *x, *y, *pr, *pi, *qr, *qi;
41
42 /* check argument */
43 if (nargin != 3) {
44 mexErrMsgTxt("Three input arguments required");
45 }
46 if (nargout>1) {
47 mexErrMsgTxt("Too many output arguments.");
48 }
49 if (!(mxIsSparse(in[0]))) {
50 mexErrMsgTxt("Input argument #1 must be of type sparse");
51 }
52 if ( mxIsSparse(in[1]) || mxIsSparse(in[2]) ) {
53 mexErrMsgTxt("Input argument #2 & #3 must be of type full");
54 }
55
56 /* computation starts */
57 m = mxGetM(in[0]);
58 n = mxGetN(in[0]);
59 pr = mxGetPr(in[0]);
60 pi = mxGetPi(in[0]);
61 pir = mxGetIr(in[0]);
62 pjc = mxGetJc(in[0]);
63
64 i = mxGetM(in[1]);
65 j = mxGetN(in[1]);
66 xm = ((i>j)? i: j);
67
68 i = mxGetM(in[2]);
69 j = mxGetN(in[2]);
70 yn = ((i>j)? i: j);
71
72 if ( xm>0 && xm != m) {
73 mexErrMsgTxt("Row multiplication dimension mismatch.");
74 }
75 if ( yn>0 && yn != n) {
76 mexErrMsgTxt("Column multiplication dimension mismatch.");
77 }
78
79
80 nzmax = mxGetNzmax(in[0]);
81 cmplx = (pi==NULL ? 0 : 1);
82 out[0] = mxCreateSparse(m,n,nzmax,cmplx);
83 if (out[0]==NULL) {
84 mexErrMsgTxt("Not enough space for the output matrix.");
85 }
86
87 qr = mxGetPr(out[0]);
88 qi = mxGetPi(out[0]);
89 qir = mxGetIr(out[0]);
90 qjc = mxGetJc(out[0]);
91
92 /* left multiplication */
93 x = mxGetPr(in[1]);
94 if (yn==0) {
95 for (j=0; j<n; j++) {
96 qjc[j] = pjc[j];
97 for (k=pjc[j]; k<pjc[j+1]; k++) {
98 i = pir[k];
99 qir[k] = i;
100 qr[k] = x[i] * pr[k];
101 if (cmplx) {
102 qi[k] = x[i] * pi[k];
103 }
104 }
105 }
106 qjc[n] = k;
107 return;
108 }
109
110 /* right multiplication */
111 y = mxGetPr(in[2]);
112 if (xm==0) {
113 for (j=0; j<n; j++) {
114 qjc[j] = pjc[j];
115 for (k=pjc[j]; k<pjc[j+1]; k++) {
116 qir[k] = pir[k];
117 qr[k] = pr[k] * y[j];
118 if (cmplx) {
119 qi[k] = qi[k] * y[j];
120 }
121 }
122 }
123 qjc[n] = k;
124 return;
125 }
126
127 /* both sides */
128 for (j=0; j<n; j++) {
129 qjc[j] = pjc[j];
130 for (k=pjc[j]; k<pjc[j+1]; k++) {
131 i = pir[k];
132 qir[k]= i;
133 qr[k] = x[i] * pr[k] * y[j];
134 if (cmplx) {
135 qi[k] = x[i] * qi[k] * y[j];
136 }
137 }
138 qjc[n] = k;
139 }
140
141}
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/spmtimesd.mexa64 b/SD-VBS/common/toolbox/toolbox_basic/common/spmtimesd.mexa64
new file mode 100755
index 0000000..15fa9d2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/spmtimesd.mexa64
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/spmtimesd.mexglx b/SD-VBS/common/toolbox/toolbox_basic/common/spmtimesd.mexglx
new file mode 100755
index 0000000..7478fb0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/spmtimesd.mexglx
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/tmp.tex b/SD-VBS/common/toolbox/toolbox_basic/common/tmp.tex
new file mode 100755
index 0000000..0458ef3
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/tmp.tex
@@ -0,0 +1,16 @@
1Hi Prof. Geiger,
2
3 My name is Jianbo Shi. I am a graduate student working
4with Jitendra Malik at UC Berkeley. My current research interest is
5on the topic of grouping and perceptual organization. I have read
6many of your works in this area.
7
8 I will be giving a talk at NECI and David Sarnoff Lab on Dec. 8
9and 9 on ``Normalized cuts and its application to motion segmentation''.
10I am wondering if I could visit you and your lab on Dec. 10. I would
11very much like the opportunity to talk to you on varies topics related
12to the problem of grouping. Let me know if that is possible.
13
14 -thanks!
15
16 -Jianbo
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/vmquant.m b/SD-VBS/common/toolbox/toolbox_basic/common/vmquant.m
new file mode 100755
index 0000000..ab4eb28
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/vmquant.m
@@ -0,0 +1,112 @@
1function [im, map] = vmquant(arg1,arg2,arg3,arg4,arg5,arg6,arg7)
2%VMQUANT Variance Minimization Color Quantization.
3% [X, MAP] = VMQUANT(R,G,B,K,[Qr Qg Qb],DITHER,Qe) or
4% VMQUANT(RGB,K,[Qr Qg Qb],DITHER,Qe), where RGB is a 3-D array,
5% converts an arbitrary image comprised of RGB triples into an
6% indexed image X with color map MAP. K specifies the number
7% of desired entries in the target color map, and [Qr Qg Qb]
8% specifies the number of quantization bits to assign each color
9% axis during color interpolation. DITHER is a string ('dither' or
10% 'nodither') that indicates whether or not to perform error propagation
11% dither on the output image. Qe specifies the number of bits of
12% quantization used in the error calculations.
13%
14% K is optional and defaults to 256.
15% [Qr Qg Qb] is optional and defaults to [5 5 5].
16% DITHER is optional and defaults to 'nodither'.
17% Qe is optional and defaults to 8.
18%
19% See also: RGB2IND, RGB2GRAY, DITHER, IND2RGB, CMUNIQUE, IMAPPROX.
20
21% This is the wrapper function for the MEX file VMQUANTC.C
22
23% Joseph M. Winograd 6-93
24% Copyright (c) 1993 by The MathWorks, Inc.
25% $Revision: 5.3 $ $Date: 1996/08/22 22:09:03 $
26
27% Reference: Xiaolin Wu, "Efficient Statistical Computation for
28% Optimal Color Quantization," Graphics Gems II, (ed. James
29% Arvo). Academic Press: Boston. 1991.
30
31if nargin < 1,
32 error('Not enough input arguments.');
33end
34
35threeD = (ndims(arg1)==3); % Determine if input includes a 3-D array
36
37if threeD,
38 error( nargchk( 1, 5, nargin ) );
39
40 % NOTE: If you change defaults, change them also
41 % in VMQUANTC.C and recompile the MEX function.
42 if nargin < 5
43 arg5 = 8; % DEFAULT_QE = 8
44 end
45
46 if nargin < 4
47 arg4 = 'n'; % DEFAULT_DITHER = 0
48 end
49
50 if nargin < 3
51 arg3 = [5 5 5]; % DEFAULT_Q = [5 5 5]
52 end
53
54 if nargin < 2
55 arg2 = 256; % DEFAULT_K = 256
56 end
57
58 rout = arg1(:,:,1);
59 g = arg1(:,:,2);
60 b = arg1(:,:,3);
61
62 if strcmp(lower(arg4(1)),'d')
63 dith = 1;
64 else
65 dith = 0;
66 end
67
68 arg7 = arg5;
69 arg5 = arg3;
70 arg4 = arg2;
71
72else
73 error( nargchk( 3, 7, nargin ) );
74
75 if nargin < 7
76 arg7 = 8; % DEFAULT_QE = 8
77 end
78
79 if nargin < 6
80 arg6 = 'n'; % DEFAULT_DITHER = 0
81 end
82
83 if nargin < 5
84 arg5 = [5 5 5]; % DEFAULT_Q = [5 5 5]
85 end
86
87 if nargin < 4
88 arg4 = 256; % DEFAULT_K = 256
89 end
90
91 rout = arg1;
92 g = arg2;
93 b = arg3;
94
95 if strcmp(lower(arg6(1)),'d')
96 dith = 1;
97 else
98 dith = 0;
99 end
100
101end
102
103if (~isa(rout,'uint8'))
104 rout = uint8(round(255*rout));
105end
106if (~isa(g,'uint8'))
107 g = uint8(round(255*g));
108end
109if (~isa(b,'uint8'))
110 b = uint8(round(255*b));
111end
112[im,map] = vmquantc( rout, g, b, arg4, arg5, dith, arg7 );
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/vmquantc.mexhp7 b/SD-VBS/common/toolbox/toolbox_basic/common/vmquantc.mexhp7
new file mode 100755
index 0000000..c0e35c4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/vmquantc.mexhp7
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/vmquantc.mexlx b/SD-VBS/common/toolbox/toolbox_basic/common/vmquantc.mexlx
new file mode 100755
index 0000000..f79c1d3
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/vmquantc.mexlx
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/vmquantc.mexsol b/SD-VBS/common/toolbox/toolbox_basic/common/vmquantc.mexsol
new file mode 100755
index 0000000..f711a98
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/vmquantc.mexsol
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/writepdm.m b/SD-VBS/common/toolbox/toolbox_basic/common/writepdm.m
new file mode 100755
index 0000000..a8cba11
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/writepdm.m
@@ -0,0 +1,11 @@
1function writepfm(name,I)
2%
3% writepfm(name,I)
4%
5 [nr,nc] = size(I);
6
7 fid = fopen(name, 'w');
8 fprintf(fid, '%d %d\n', nr,nc);
9 fprintf(fid,'%d ',I');
10 fclose(fid);
11
diff --git a/SD-VBS/common/toolbox/toolbox_basic/common/writepfm.m b/SD-VBS/common/toolbox/toolbox_basic/common/writepfm.m
new file mode 100755
index 0000000..ee25fdc
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/common/writepfm.m
@@ -0,0 +1,11 @@
1function writepfm(name,I)
2%
3% writepfm(name,I)
4%
5 [nr,nc] = size(I);
6
7 fid = fopen(name, 'w');
8 fprintf(fid, '%d %d\n', nr,nc);
9 fprintf(fid,'%f ',I');
10 fclose(fid);
11
diff --git a/SD-VBS/common/toolbox/toolbox_basic/disp/disp_image.m b/SD-VBS/common/toolbox/toolbox_basic/disp/disp_image.m
new file mode 100755
index 0000000..4745d8d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/disp/disp_image.m
@@ -0,0 +1,19 @@
1function disp_image(img,sze,index,mask)
2
3%figure(2)
4subplot(sze(1),sze(2),index);
5
6if (size(mask) ~= size(mask)),
7 error(['size of image is ',int2str(size(mask)),' size of mask is ',...
8 int2str(size(mask))]);
9end
10
11img = img-min(min(img));
12I = 0*(img.*(~mask)) + img.*mask;
13I = img.*mask;
14colormap(gray)
15imagesc(I);
16%axis('off')
17axis('equal');
18axis('square');
19drawnow;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/disp/draw_box.m b/SD-VBS/common/toolbox/toolbox_basic/disp/draw_box.m
new file mode 100755
index 0000000..556afdc
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/disp/draw_box.m
@@ -0,0 +1,9 @@
1function draw_box(left,right,top,down)
2
3plot([left,right],[top,top]);
4hold on
5plot([left,right],[down,down]);
6hold on
7plot([left,left],[top,down]);
8hold on
9plot([right,right],[top,down]); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/disp/draw_box2.m b/SD-VBS/common/toolbox/toolbox_basic/disp/draw_box2.m
new file mode 100755
index 0000000..adec284
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/disp/draw_box2.m
@@ -0,0 +1,17 @@
1function draw_box(center,w_h,j)
2
3
4center_x = center(1);
5center_y = center(2);
6
7%plot(center_x,center_y,'r*');
8%text(center_x,center_y,int2str(j));
9
10l_x = center_x-w_h(1);
11r_x = center_x+w_h(1);
12u_y = center_y-w_h(2);
13l_y = center_y+w_h(2);
14
15plot([l_x,r_x,r_x,l_x,l_x],[u_y,u_y,l_y,l_y,u_y],'c');
16
17
diff --git a/SD-VBS/common/toolbox/toolbox_basic/disp/im.m b/SD-VBS/common/toolbox/toolbox_basic/disp/im.m
new file mode 100755
index 0000000..a707916
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/disp/im.m
@@ -0,0 +1,8 @@
1function im(I)
2
3imagesc(I);drawnow;
4pixval on
5title(inputname(1))
6%colormap(gray)
7%colorbar
8axis('image')
diff --git a/SD-VBS/common/toolbox/toolbox_basic/disp/ims.m b/SD-VBS/common/toolbox/toolbox_basic/disp/ims.m
new file mode 100755
index 0000000..2fb5f25
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/disp/ims.m
@@ -0,0 +1,3 @@
1function ims(I,nr,nc)
2
3im(reshape(I,nr,nc)); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/disp/montage2.m b/SD-VBS/common/toolbox/toolbox_basic/disp/montage2.m
new file mode 100755
index 0000000..fb04b0b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/disp/montage2.m
@@ -0,0 +1,17 @@
1function montage2(FI)
2% montage2(FI)
3% display 3D stack of images in a montage
4
5[N1,N2,N3]=size(FI);
6Q=zeros(N1,N2,1,N3);
7for n=1:N3
8 Q(:,:,1,n)=FI(:,:,n);
9end
10
11a=min(Q(:));
12b=max(Q(:));
13
14Q=Q-a;
15Q=Q/(b-a);
16
17montage(Q); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/disp/showmask.m b/SD-VBS/common/toolbox/toolbox_basic/disp/showmask.m
new file mode 100755
index 0000000..f301638
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/disp/showmask.m
@@ -0,0 +1,20 @@
1function showmask(V,M,display_flag);
2% showmask(V,M);
3%
4% M is a nonneg. mask
5
6V=V-min(V(:));
7V=V/max(V(:));
8V=.25+0.75*V; %brighten things up a bit
9
10M=M-min(M(:));
11M=M/max(M(:));
12
13H=0.0+zeros(size(V));
14S=M;
15RGB=hsv2rgb(H,S,V);
16
17%if nargin>2
18 image(RGB)
19 axis('image')
20%end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/disp/showmaskb.m b/SD-VBS/common/toolbox/toolbox_basic/disp/showmaskb.m
new file mode 100755
index 0000000..1f67ba2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/disp/showmaskb.m
@@ -0,0 +1,20 @@
1function RGB = showmask(V,M,M2,display_flag);
2% showmask(V,M);
3%
4% M is a nonneg. mask
5
6V=V-min(V(:));
7V=V/max(V(:));
8V=.25+0.75*V; %brighten things up a bit
9
10M=M-min(M(:));
11M=M/max(M(:));
12
13H=0.6*M2+0*M;
14S=min(1,M2+M);
15RGB=hsv2rgb(H,S,V);
16
17%if nargin>2
18 image(RGB)
19 axis('image')
20%end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/construct_w.m b/SD-VBS/common/toolbox/toolbox_basic/fact/construct_w.m
new file mode 100755
index 0000000..372b4b6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/construct_w.m
@@ -0,0 +1,25 @@
1function W = construct_w(centers,Ds,img_center,indexes,frames)
2%
3% function W = construct_w(centers,Ds,img_center,indexes,frames)
4% optional: frames
5%
6
7
8points = length(indexes);
9if (nargin == 4),
10 frames = 0.5*size(centers,2);
11end
12
13W = zeros(2*frames,points);
14
15center_x = img_center(1);
16center_y = img_center(2);
17
18for j=1:frames,
19 % x is centers(:,2*j-1)
20 % y is centers(:,2*j)
21 % d is Ds(:,2*j-1)
22 W(j,:) = (centers(indexes,2*j-1) -center_x)'./Ds(indexes,2*j-1)';
23 W(j+frames,:) = (centers(indexes,2*j) -center_y)'./Ds(indexes,2*j-1)';
24 % W(j+2*frames,:) = ones(1,points)./Ds(indexes,2*j-1)';
25end \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/construct_w2.m b/SD-VBS/common/toolbox/toolbox_basic/fact/construct_w2.m
new file mode 100755
index 0000000..b2939b7
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/construct_w2.m
@@ -0,0 +1,25 @@
1function W = construct_w2(centers,Ds,img_center,indexes,frames)
2%
3% function W = construct_w2(centers,Ds,img_center,indexes,frames)
4% optional: frames
5%
6
7
8points = length(indexes);
9if (nargin == 4),
10 frames = 0.5*size(centers,2);
11end
12
13W = zeros(3*frames,points);
14
15center_x = img_center(1);
16center_y = img_center(2);
17
18for j=1:frames,
19 % x is centers(:,2*j-1)
20 % y is centers(:,2*j)
21 % d is Ds(:,2*j-1)
22 W(j,:) = (centers(indexes,2*j-1) -center_x)'./Ds(indexes,2*j-1)';
23 W(j+frames,:) = (centers(indexes,2*j) -center_y)'./Ds(indexes,2*j-1)';
24 W(j+2*frames,:) = ones(1,points)./Ds(indexes,2*j-1)';
25end \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/factor.m b/SD-VBS/common/toolbox/toolbox_basic/fact/factor.m
new file mode 100755
index 0000000..635c29a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/factor.m
@@ -0,0 +1,50 @@
1%
2% Usage:
3%
4% [R,t,S] = factor(W)
5%
6% Function to factor a matrix of input data (W) into the camera
7% rotation matrix (R), translation (t), and the shape matrix (S).
8% Three-dimensional version. Failure of normalization results in
9% empty R and S.
10
11function [R,t,S] = factor(W)
12
13pts = size(W,2);
14t = W*ones(pts,1)/pts;
15W = W - t*ones(1,pts);
16
17% Use SVD to factor W.
18 [a,b,c] = svd(W,0);
19
20smallb = b(1:3,1:3); % Since W is rank 3, b has only three meaningful values
21sqrtb = sqrt(smallb);
22Rhat = a(:,1:3) * sqrtb;
23Shat = sqrtb * c(:,1:3)';
24
25G = findG(Rhat);
26
27if size(G,1) == 0,
28R = [];
29S = [];
30else
31 R = Rhat*G;
32 S = inv(G)*Shat;
33
34 % rotation matrix that aligns the reference frame with the first camera
35 F = size(R,1)/2;
36 R1 = R(1,:);
37 R1 = R1/norm(R1);
38 R2 = R(F+1,:);
39 R2 = R2/norm(R2);
40 R3 = cross(R1,R2);
41 R3 = R3/norm(R3);
42 P = [R1; R2; R3];
43 P = P';
44
45 R = R*P;
46 S = inv(P)*S;
47end
48
49
50
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/factor_test.m b/SD-VBS/common/toolbox/toolbox_basic/fact/factor_test.m
new file mode 100755
index 0000000..12ceb95
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/factor_test.m
@@ -0,0 +1,52 @@
1%
2% Usage:
3%
4% [R,t,S] = factor(W)
5%
6% Function to factor a matrix of input data (W) into the camera
7% rotation matrix (R), translation (t), and the shape matrix (S).
8% Three-dimensional version. Failure of normalization results in
9% empty R and S.
10
11function [R,t,S,C,b] = factor(W)
12
13pts = size(W,2);
14t = W*ones(pts,1)/pts;
15W = W - t*ones(1,pts);
16
17% Use SVD to factor W.
18 [a,b,c] = svd(W,0);
19
20figure(3);plot(diag(b))
21
22smallb = b(1:3,1:3); % Since W is rank 3, b has only three meaningful values
23sqrtb = sqrt(smallb);
24Rhat = a(:,1:3) * sqrtb;
25Shat = sqrtb * c(:,1:3)';
26
27[G,C] = findg1(Rhat);
28
29if size(G,1) == 0,
30R = [];
31S = [];
32else
33 R = Rhat*G;
34 S = inv(G)*Shat;
35
36 % rotation matrix that aligns the reference frame with the first camera
37 F = size(R,1)/2;
38 R1 = R(1,:);
39 R1 = R1/norm(R1);
40 R2 = R(F+1,:);
41 R2 = R2/norm(R2);
42 R3 = cross(R1,R2);
43 R3 = R3/norm(R3);
44 P = [R1; R2; R3];
45 P = P';
46
47 R = R*P;
48 S = inv(P)*S;
49end
50
51
52
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/factor_test2.m b/SD-VBS/common/toolbox/toolbox_basic/fact/factor_test2.m
new file mode 100755
index 0000000..3520122
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/factor_test2.m
@@ -0,0 +1,52 @@
1%
2% Usage:
3%
4% [R,t,S] = factor(W)
5%
6% Function to factor a matrix of input data (W) into the camera
7% rotation matrix (R), translation (t), and the shape matrix (S).
8% Three-dimensional version. Failure of normalization results in
9% empty R and S.
10
11function [R,t,S,C,b] = factor(W)
12
13pts = size(W,2);
14t = W*ones(pts,1)/pts;
15W = W - t*ones(1,pts);
16
17% Use SVD to factor W.
18 [a,b,c] = svd(W,0);
19
20figure(3);plot(diag(b))
21
22smallb = b(1:3,1:3); % Since W is rank 3, b has only three meaningful values
23sqrtb = sqrt(smallb);
24Rhat = a(:,1:3) * sqrtb;
25Shat = sqrtb * c(:,1:3)';
26
27[G,C] = findg2(Rhat);
28
29if size(G,1) == 0,
30R = [];
31S = [];
32else
33 R = Rhat*G;
34 S = inv(G)*Shat;
35
36 % rotation matrix that aligns the reference frame with the first camera
37 F = size(R,1)/2;
38 R1 = R(1,:);
39 R1 = R1/norm(R1);
40 R2 = R(F+1,:);
41 R2 = R2/norm(R2);
42 R3 = cross(R1,R2);
43 R3 = R3/norm(R3);
44 P = [R1; R2; R3];
45 P = P';
46
47 R = R*P;
48 S = inv(P)*S;
49end
50
51
52
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/factorizaion.tar b/SD-VBS/common/toolbox/toolbox_basic/fact/factorizaion.tar
new file mode 100755
index 0000000..133cdff
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/factorizaion.tar
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/findG.m b/SD-VBS/common/toolbox/toolbox_basic/fact/findG.m
new file mode 100755
index 0000000..9a6bd73
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/findG.m
@@ -0,0 +1,48 @@
1function G = find3G(Rhat)
2
3% number of frames
4F = size(Rhat,1)/2;
5
6% Build matrix Q such that Q * v = [1,...,1,0,...,0] where v is a six
7% element vector containg all six distinct elements of the Matrix C
8
9clear Q
10for f = 1:F,
11 g = f + F;
12 h = g + F;
13 Q(f,:) = zt(Rhat(f,:), Rhat(f,:));
14 Q(g,:) = zt(Rhat(g,:), Rhat(g,:));
15 Q(h,:) = zt(Rhat(f,:), Rhat(g,:));
16end
17
18% Solve for v
19rhs = [ones(2*F,1); zeros(F,1)];
20v = Q \ rhs;
21
22% C is a symmetric 3x3 matrix such that C = G * transpose(G)
23C(1,1) = v(1);
24C(1,2) = v(2);
25C(1,3) = v(3);
26C(2,2) = v(4);
27C(2,3) = v(5);
28C(3,3) = v(6);
29C(2,1) = C(1,2);
30C(3,1) = C(1,3);
31C(3,2) = C(2,3);
32
33e = eig(C);
34disp(e)
35
36if (any(e<= 0)),
37 G = [];
38else
39 G = sqrtm(C);
40end
41
42%neg = 0;
43%if e(1) <= 0, neg = 1; end
44%if e(2) <= 0, neg = 1; end
45%if e(3) <= 0, neg = 1; end
46%if neg == 1, G = [];
47%else G = sqrtm(C);
48%end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/findg1.m b/SD-VBS/common/toolbox/toolbox_basic/fact/findg1.m
new file mode 100755
index 0000000..f14ecc6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/findg1.m
@@ -0,0 +1,49 @@
1function [G,C] = find3G(Rhat)
2
3% number of frames
4F = size(Rhat,1)/2;
5
6% Build matrix Q such that Q * v = [1,...,1,0,...,0] where v is a six
7% element vector containg all six distinct elements of the Matrix C
8
9clear Q
10for f = 1:F,
11 g = f + F;
12 h = g + F;
13 Q(f,:) = zt(Rhat(f,:), Rhat(f,:));
14 Q(g,:) = zt(Rhat(g,:), Rhat(g,:));
15 Q(h,:) = zt(Rhat(f,:), Rhat(g,:));
16end
17
18% Solve for v
19rhs = [ones(2*F,1); zeros(F,1)];
20v = Q \ rhs;
21
22% C is a symmetric 3x3 matrix such that C = G * transpose(G)
23C(1,1) = v(1);
24C(1,2) = v(2);
25C(1,3) = v(3);
26C(2,2) = v(4);
27C(2,3) = v(5);
28C(3,3) = v(6);
29C(2,1) = C(1,2);
30C(3,1) = C(1,3);
31C(3,2) = C(2,3);
32
33e = eig(C);
34disp(e)
35
36if (any(e<= 0)),
37 C = C -2*min(e)*eye(3);
38 G = sqrtm(C);
39else
40 G = sqrtm(C);
41end
42
43%neg = 0;
44%if e(1) <= 0, neg = 1; end
45%if e(2) <= 0, neg = 1; end
46%if e(3) <= 0, neg = 1; end
47%if neg == 1, G = [];
48%else G = sqrtm(C);
49%end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/findg2.m b/SD-VBS/common/toolbox/toolbox_basic/fact/findg2.m
new file mode 100755
index 0000000..5a84b86
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/findg2.m
@@ -0,0 +1,56 @@
1function [G,C] = find3G(Rhat)
2
3% number of frames
4F = size(Rhat,1)/3;
5
6% Build matrix Q such that Q * v = [1,...,1,0,...,0] where v is a six
7% element vector containg all six distinct elements of the Matrix C
8
9clear Q
10for f = 1:F,
11 g = f + F;
12 h = g + F;
13 j = h + F;
14 k = j + F;
15 l = k + F;
16 Q(f,:) = zt(Rhat(f,:), Rhat(f,:));
17 Q(g,:) = zt(Rhat(g,:), Rhat(g,:));
18 Q(h,:) = zt(Rhat(h,:), Rhat(h,:));
19 Q(j,:) = zt(Rhat(f,:), Rhat(g,:));
20 Q(k,:) = zt(Rhat(f,:), Rhat(h,:));
21 Q(l,:) = zt(Rhat(g,:), Rhat(h,:));
22end
23
24% Solve for v
25rhs = [ones(3*F,1); zeros(3*F,1)];
26v = Q \ rhs;
27
28% C is a symmetric 3x3 matrix such that C = G * transpose(G)
29C(1,1) = v(1);
30C(1,2) = v(2);
31C(1,3) = v(3);
32C(2,2) = v(4);
33C(2,3) = v(5);
34C(3,3) = v(6);
35C(2,1) = C(1,2);
36C(3,1) = C(1,3);
37C(3,2) = C(2,3);
38
39e = eig(C);
40disp(e)
41
42
43if (any(e<= 0)),
44 C = C -2*min(e)*eye(3);
45 G = sqrtm(C);
46else
47 G = sqrtm(C);
48end
49
50%neg = 0;
51%if e(1) <= 0, neg = 1; end
52%if e(2) <= 0, neg = 1; end
53%if e(3) <= 0, neg = 1; end
54%if neg == 1, G = [];
55%else G = sqrtm(C);
56%end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/hotel.mat b/SD-VBS/common/toolbox/toolbox_basic/fact/hotel.mat
new file mode 100755
index 0000000..61ea6c8
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/hotel.mat
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/show_3dpoints.m b/SD-VBS/common/toolbox/toolbox_basic/fact/show_3dpoints.m
new file mode 100755
index 0000000..b6edfd5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/show_3dpoints.m
@@ -0,0 +1,22 @@
1function show_3dpoints(S)
2
3
4for j=1:size(S,2),
5 x = S(1,j);
6 y = S(2,j);
7 z = S(3,j);
8 plot3(x,y,z,'*');
9 hold on;
10 plot3([x,0],[y,0],[z,0],'r');
11% plot3([x,x],[y,y],[z,0],'r');
12% plot3([x,0],[y,y],[z,z],'r'); plot3([x,x],[y,0],[z,z],'r');
13 text(x,y,z,int2str(j))
14% plot3(x,y,0,'co');
15end
16
17grid on
18xlabel('x');
19ylabel('y');
20zlabel('z');
21
22hold off \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/show_S.m b/SD-VBS/common/toolbox/toolbox_basic/fact/show_S.m
new file mode 100755
index 0000000..5828696
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/show_S.m
@@ -0,0 +1,17 @@
1function show_S(S,fig)
2
3if (nargin == 1),
4 figure(1);
5else
6 figure(fig);
7end
8
9num_points = size(S,2);
10
11subplot(1,2,1); plot(S(1,:),S(3,:),'cx'); axis('equal');axis('square');hold on
12subplot(1,2,2); plot(S(2,:),S(3,:),'cx'); axis('equal');axis('square');hold on
13
14for j=1:num_points,
15 subplot(1,2,1);text(S(1,j),S(3,j),int2str(j));hold off
16 subplot(1,2,2);text(S(2,j),S(3,j),int2str(j));hold off
17end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/show_t.m b/SD-VBS/common/toolbox/toolbox_basic/fact/show_t.m
new file mode 100755
index 0000000..b475c76
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/show_t.m
@@ -0,0 +1,10 @@
1function show_t(t)
2
3frames = 0.5*length(t);
4
5ts = reshape(t,frames,2);
6
7plot(ts(:,1),ts(:,2));
8hold on
9plot(ts(:,1),ts(:,2),'rx');
10hold off;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/show_t3.m b/SD-VBS/common/toolbox/toolbox_basic/fact/show_t3.m
new file mode 100755
index 0000000..2766061
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/show_t3.m
@@ -0,0 +1,10 @@
1function show_t(t)
2
3frames = length(t)/3;
4
5ts = reshape(t,frames,3);
6
7plot3(ts(:,1),ts(:,2),ts(:,3));
8hold on
9plot3(ts(:,1),ts(:,2),ts(:,3),'rx');
10hold off;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/fact/zt.m b/SD-VBS/common/toolbox/toolbox_basic/fact/zt.m
new file mode 100755
index 0000000..3f88d21
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/fact/zt.m
@@ -0,0 +1,6 @@
1% the z' operator described in the paper (returns a row vector)
2
3function v = zt(a, b)
4
5v = [ a(1)*b(1), a(1)*b(2)+a(2)*b(1), a(1)*b(3)+a(3)*b(1), ...
6 a(2)*b(2), a(2)*b(3)+a(3)*b(2), a(3)*b(3) ];
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/91048.jpg b/SD-VBS/common/toolbox/toolbox_basic/filter/91048.jpg
new file mode 100755
index 0000000..6b2313b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/91048.jpg
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/bar2d.m b/SD-VBS/common/toolbox/toolbox_basic/filter/bar2d.m
new file mode 100755
index 0000000..76fa819
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/bar2d.m
@@ -0,0 +1,16 @@
1function kernel = bar2d(sigx,sigy,siz,angle)
2
3X = -siz:.1:siz;
4G = exp(-0.5*X.^2/sigx^2);
5
6DGG = (1/sigy^2) * ((X/sigy).^2-1) .* exp(- (X/sigy).^2/2);
7%DGG = (X.^2/(sqrt(2*pi)*sigy^5) - 1/(sqrt(2*pi)*sigy^2)) .* ...
8% exp(-0.5*X.^2/sigy^2);
9
10K = G'*DGG;
11K = rotate_J(angle,K);
12
13K = imresize(K,0.1);
14K = K-mean(mean(K));
15
16kernel = K; \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/barrot.m b/SD-VBS/common/toolbox/toolbox_basic/filter/barrot.m
new file mode 100755
index 0000000..bd7676e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/barrot.m
@@ -0,0 +1,22 @@
1img1 = gifread('color010.gif');
2img1 = img1(220:350,1:200);
3img2 = gifread('color-avg.gif');
4img2 = img2(220:350,1:200);
5
6sigx = 3;
7sigy = 3;
8siz = 8;
9angles = 0:19:179;
10
11[Imag1,Iangle1] = brute_force_angle(img1,sigx,sigy,siz,angles);
12[Imag2,Iangle2] = brute_force_angle(img2,sigx,sigy,siz,angles);
13
14tresh = max(max(Imag1))*0.1
15D = angle_diff(Imag1,Iangle1,Imag2,Iangle2,tresh);
16subplot(2,2,1); imagesc(Iangle1*180/pi); colorbar;
17subplot(2,2,2); imagesc(Iangle2*180/pi); colorbar;
18subplot(2,2,3); imagesc(D*180/pi); colorbar;
19subplot(2,2,4); imagesc(Imag1); colorbar;
20colormap(jet)
21
22
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/bars.m b/SD-VBS/common/toolbox/toolbox_basic/filter/bars.m
new file mode 100755
index 0000000..77eccea
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/bars.m
@@ -0,0 +1,39 @@
1function [filt] = bars(X,Y,ks);
2%FIL1 the first filter to use has the following specifications:
3%
4% real part: 2nd derivative of gaussian along Y
5% normal gaussian along X
6% This filter is elongated along the X direction
7% imag part: hilbert transform of the real part
8%
9% [filt] = fil1(X,Y,ks);
10% X,Y : index matrix obtained by meshgrid
11% ks : kernel size
12% filt : the output kernel
13%
14
15%%
16%% (c) Thomas Leung
17%% California Institute of Technology
18%% Feb 27, 1994.
19%%
20
21if(nargin == 2)
22 ks = 17;
23end
24
25sigmay = 2.4 * ks / 17;
26sigmax = 3 * sigmay;
27
28fxr = exp(-(X/sigmax).^2/2);
29fyr = (1/sigmay^2) * ((Y/sigmay).^2-1) .* exp(- (Y/sigmay).^2/2);
30nrm = 1/(sigmax*sigmay*2*pi);
31
32% real part of filter
33fr = nrm * fxr .* fyr;
34
35% imag part of filter
36filt = hilbert(fr);
37
38
39return;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/clip_image.m b/SD-VBS/common/toolbox/toolbox_basic/filter/clip_image.m
new file mode 100755
index 0000000..bf7b50c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/clip_image.m
@@ -0,0 +1,6 @@
1function J = clip_image(I,w)
2
3[size_y,size_x] = size(I);
4
5J = I(w+1:size_y-w,w+1:size_x-w);
6
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/compute_J_simple.m b/SD-VBS/common/toolbox/toolbox_basic/filter/compute_J_simple.m
new file mode 100755
index 0000000..e790601
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/compute_J_simple.m
@@ -0,0 +1,50 @@
1function J = compute_J(I,A,D,base)
2%% function J = compute_J(I,A,D)
3%
4
5if nargin == 3,
6 base = -1;
7end
8
9[size_y,size_x] = size(I);
10[center_x,center_y] = find_center(size_x,size_y);
11
12add_x = round(size_x*0.45);
13add_y = round(size_y*0.45);
14big_I = base*ones(size_y+2*add_y,size_x+2*add_x);
15
16big_I(add_y+1:add_y+size_y,add_x+1:add_x+size_x) = I;
17
18center_x = add_x+ center_x;
19center_y = add_y+ center_y;
20[size_y,size_x] = size(big_I);
21
22%a = angle * pi/180;
23%A = [cos(a),-sin(a);sin(a),cos(a)];
24
25[XX,YY] = meshgrid(1:size_x,1:size_y);
26
27x = reshape(XX,size_x*size_y,1);
28y = reshape(YY,size_x*size_y,1);
29index(:,1) = x-center_x;
30
31%index(:,2) = (size_y+1) - y;
32index(:,2) = y-center_y;
33
34position_new = A*index';
35position_new(1,:) = position_new(1,:)+D(1)+center_x;
36position_new(2,:) = position_new(2,:)+D(2)+center_y;
37%position_new(2,:) = (size_y+1) - position_new(2,:);
38
39position_new_x = reshape(position_new(1,:),size_y,size_x);
40position_new_y = reshape(position_new(2,:),size_y,size_x);
41
42J = m_interp4(big_I,position_new_x,position_new_y);
43
44
45[size_y,size_x] = size(I);
46J = J(add_y+1:add_y+size_y,add_x+1:add_x+size_x);
47
48
49
50
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/compute_angle.m b/SD-VBS/common/toolbox/toolbox_basic/filter/compute_angle.m
new file mode 100755
index 0000000..7a995af
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/compute_angle.m
@@ -0,0 +1,18 @@
1function [angle,mag,c2,c3] = compute_angle(I)
2
3[g,ga,gb,gc] = compute_g2(I,0);
4[h,ha,hb,hc,hd] = compute_h2(I,0);
5
6c2 = 0.5*(ga.^2 - gc.^2) + 0.46875*(ha.^2 - hd.^2) +...
7 0.28125*(hb.^2 - hc.^2) + 0.1875*(ha.*hc - hb.*hd);
8
9c3 = -ga.*gb - gb.*gc - 0.9375*(hc.*hd + ha.*hb) -...
10 1.6875*hb.*hc - 0.1875*ha.*hd;
11
12[angle,mag] = cart2pol(-c2,-c3);
13
14%angle = angle/2+pi/2;
15%angle = (angle>pi).*(angle-2*pi) + (angle<=pi).*angle;
16
17angle = angle/2;
18mag = sqrt(mag); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/compute_filter_fft.m b/SD-VBS/common/toolbox/toolbox_basic/filter/compute_filter_fft.m
new file mode 100755
index 0000000..359c6ba
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/compute_filter_fft.m
@@ -0,0 +1,84 @@
1function [filter_output,filters] = compute_filter_fft(I,sig,r,sz,num_ori);
2%
3%
4%
5
6ori_incr=180/num_ori;
7ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
8
9as = ori_offset:ori_incr:180+ori_offset-ori_incr;
10
11filter_output = [];
12filters = [];
13
14wsz = 2*round(sz(end)) + 1;
15M1 = wsz;M2 = wsz;
16
17%%%%% prepare FFT of image %%%%%%%%%%%%%
18
19[N1,N2]=size(I);
20tmp=zeros(size(I)+[M1-1 M2-1]);
21tmp(1:N1,1:N2)=I;
22IF=fft2(tmp);
23
24
25%%%%%%%%%% filtering stage %%%%%%%%%%%
26if size(sig,2)== 1,
27
28 for j = 1:length(as),
29 fprintf('.');
30 angle = as(j);
31
32 g = mdoog2(sig,r,angle,round(sz));
33
34 g = g - mean(reshape(g,prod(size(g)),1));
35
36 g = g/sum(sum(abs(g)));
37
38 filters(:,:,j) = g;
39
40 gF = fft2(g,N1+M1-1,N2+M2-1);
41 IgF = IF.*gF;
42 Ig = real(ifft2(IgF));
43 Ig = Ig(ceil((M1+1)/2):ceil((M1+1)/2)+N1-1,ceil((M2+1)/2):ceil((M2+1)/2)+N2-1);
44
45 %c = conv2(I,g,'valid');
46
47 filter_output(:,:,j) = Ig;
48 end
49else
50
51 % there are multiple scales
52 sigs = sig;
53 szs = sz;
54 for k = 1:size(sigs,2),
55 sig = sigs(k);
56 sz = szs(end);
57 fprintf('%d',k);
58 for j = 1:length(as),
59 fprintf('.');
60 angle = as(j);
61
62 g = mdoog2(sig,r,angle,round(sz));
63 g = g - mean(reshape(g,prod(size(g)),1));
64 g = g/sum(sum(abs(g)));
65
66 gF = fft2(g,N1+M1-1,N2+M2-1);
67 IgF = IF.*gF;
68 Ig = real(ifft2(IgF));
69 Ig = Ig(ceil((M1+1)/2):ceil((M1+1)/2)+N1-1,ceil((M2+1)/2):ceil((M2+1)/2)+N2-1);
70
71 %c = conv2(I,g,'valid');
72 %c = conv2(I,g,'same');
73
74 filter_output(:,:,j,k) = Ig;
75 filters(:,:,j,k) = g;
76 end
77
78
79 end
80
81end
82
83fprintf('\n');
84
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/compute_g2.m b/SD-VBS/common/toolbox/toolbox_basic/filter/compute_g2.m
new file mode 100755
index 0000000..ac27d00
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/compute_g2.m
@@ -0,0 +1,23 @@
1function [g,ga,gb,gc] = compute_g2(I,angle)
2
3if (nargin == 1),
4 angle = 0;
5end
6
7f1 = [0.0094 0.1148 0.3964 -0.0601 -0.9213 -0.0601 0.3964 0.1148 0.0094];
8f2 = [0.0008 0.0176 0.166 0.6383 1.0 0.6383 0.166 0.0176 0.0008];
9f3 = [-0.0028 -0.048 -0.302 -0.5806 0 0.5806 0.302 0.048 0.0028];
10
11%ga = conv2(conv2(I,f2,'same'),f1','same');
12%gb = conv2(conv2(I,f3,'same'),f3','same');
13%gc = conv2(conv2(I,f1,'same'),f2','same');
14
15ga = conv2(conv2(I,f1,'same'),f2','same');
16gb = conv2(conv2(I,f3,'same'),f3','same');
17gc = conv2(conv2(I,f2,'same'),f1','same');
18
19ka = cos(angle)^2;
20kb = -2*cos(angle)*sin(angle);
21kc = sin(angle)^2;
22
23g = ka*ga + kb*gb + kc*gc;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/compute_h2.m b/SD-VBS/common/toolbox/toolbox_basic/filter/compute_h2.m
new file mode 100755
index 0000000..e4cdcfb
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/compute_h2.m
@@ -0,0 +1,27 @@
1function [h,ha,hb,hc,hd] = compute_h2(I,angle)
2
3if (nargin == 1),
4 angle = 0;
5end
6
7f1 = [0.0098 0.0618 -0.0998 -0.7551 0 0.7551 0.0998 -0.0618 -0.0098];
8f2 = [ 0.0008 0.0176 0.166 0.6383 1 0.6383 0.166 0.0176 0.0008];
9f3 = -[-0.002 -0.0354 -0.2225 -0.4277 0 0.4277 0.2225 0.0354 0.002];
10f4 = [0.0048 0.0566 0.1695 -0.1889 -0.7349 -0.1889 0.1695 0.0566 0.0048];
11
12%ha = conv2(conv2(I,f2,'same'),f1','same');
13%hb = conv2(conv2(I,f3,'same'),f4','same');
14%hc = conv2(conv2(I,f4,'same'),f3','same');
15%hd = conv2(conv2(I,f1,'same'),f2','same');
16
17ha = conv2(conv2(I,f1,'same'),f2','same');
18hb = conv2(conv2(I,f4,'same'),f3','same');
19hc = conv2(conv2(I,f3,'same'),f4','same');
20hd = conv2(conv2(I,f2,'same'),f1','same');
21
22ka = cos(angle)^3;
23kb = -3*cos(angle)^2*sin(angle);
24kc = 3*cos(angle)*sin(angle)^2;
25kd = -sin(angle)^3;
26
27h = ka*ha + kb*hb + kc*hc + kd*hd;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/compute_ofilter_fft.m b/SD-VBS/common/toolbox/toolbox_basic/filter/compute_ofilter_fft.m
new file mode 100755
index 0000000..41989ed
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/compute_ofilter_fft.m
@@ -0,0 +1,88 @@
1function [filter_output,filters] = compute_odd_filter_fft(I,sig,r,sz,num_ori);
2%
3% computes the filter response of I to the set of odd symmetric filters
4%
5% sig = scale(sigma) for the filters
6% r = enlongation factor
7% sz = the radius of the filters
8% num_ori = number of orientations
9%
10
11ori_incr=180/num_ori;
12ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
13
14as = ori_offset:ori_incr:180+ori_offset-ori_incr;
15
16filter_output = zeros(size(I,1),size(I,2),num_ori,length(sig));
17filters = [];
18
19wsz = 2*round(sz(end)) + 1;
20M1 = wsz;M2 = wsz;
21
22%%%%% prepare FFT of image %%%%%%%%%%%%%
23
24[N1,N2]=size(I);
25tmp=zeros(size(I)+[M1-1 M2-1]);
26tmp(1:N1,1:N2)=I;
27IF=fft2(tmp);
28
29
30%%%%%%%%%% filtering stage %%%%%%%%%%%
31if size(sig,2)== 1,
32
33 for j = 1:length(as),
34 fprintf('.');
35 angle = as(j);
36
37 g = mk_odd_filter(sig,r,angle,round(sz));
38
39 g = g - mean(reshape(g,prod(size(g)),1));
40
41 g = g/sum(sum(abs(g)));
42
43 filters(:,:,j,1) = g;
44
45 gF = fft2(g,N1+M1-1,N2+M2-1);
46 IgF = IF.*gF;
47 Ig = real(ifft2(IgF));
48 Ig = Ig(ceil((M1+1)/2):ceil((M1+1)/2)+N1-1,ceil((M2+1)/2):ceil((M2+1)/2)+N2-1);
49
50 %c = conv2(I,g,'valid');
51
52 filter_output(:,:,j,1) = Ig;
53 end
54else
55
56 % there are multiple scales
57 sigs = sig;
58 szs = sz;
59 for k = 1:size(sigs,2),
60 sig = sigs(k);
61 sz = szs(end);
62 fprintf('%d',k);
63
64 for j = 1:length(as),
65 fprintf('.');
66 angle = as(j);
67
68 g = mk_odd_filter(sig,r,angle,round(sz));
69 g = g - mean(reshape(g,prod(size(g)),1));
70 g = g/sum(sum(abs(g)));
71
72 gF = fft2(g,N1+M1-1,N2+M2-1);
73 IgF = IF.*gF;
74 Ig = real(ifft2(IgF));
75 Ig = Ig(ceil((M1+1)/2):ceil((M1+1)/2)+N1-1,ceil((M2+1)/2):ceil((M2+1)/2)+N2-1);
76
77 %c = conv2(I,g,'valid');
78 %c = conv2(I,g,'same');
79
80 filter_output(:,:,j,k) = Ig;
81 filters(:,:,j,k) = g;
82 end
83 end
84
85end
86
87fprintf('\n');
88
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/dgauss.m b/SD-VBS/common/toolbox/toolbox_basic/filter/dgauss.m
new file mode 100755
index 0000000..207e781
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/dgauss.m
@@ -0,0 +1,16 @@
1function dg = dgauss(sig)
2% first derivative of N(sig)
3% cutoff after 1% of max
4
5 i = 1;
6 max = 0;
7 dgi = max;
8 dg = [dgi];
9 while dgi >= 0.01*max
10 dgi = i / (sqrt(2*pi) * sig^3) * exp(-0.5*i^2/sig^2);
11 dg = [dgi dg -dgi];
12 i = i + 1;
13 if dgi > max
14 max = dgi;
15 end
16 end; \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/dog1.m b/SD-VBS/common/toolbox/toolbox_basic/filter/dog1.m
new file mode 100755
index 0000000..e9f64e6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/dog1.m
@@ -0,0 +1,28 @@
1function G=dog1(sig,N);
2% G=dog1(sig,N);
3
4% by Serge Belongie
5
6no_pts=N; % no. of points in x,y grid
7
8[x,y]=meshgrid(-(N/2)+1/2:(N/2)-1/2,-(N/2)+1/2:(N/2)-1/2);
9
10sigi=0.71*sig;
11sigo=1.14*sig;
12Ci=diag([sigi,sigi]);
13Co=diag([sigo,sigo]);
14
15X=[x(:) y(:)];
16
17Ga=gaussian(X,[0 0]',Ci);
18Ga=reshape(Ga,N,N);
19Gb=gaussian(X,[0 0]',Co);
20Gb=reshape(Gb,N,N);
21
22a=1;
23b=-1;
24
25G = a*Ga + b*Gb;
26
27G=G-mean(G(:));
28
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/dog2.m b/SD-VBS/common/toolbox/toolbox_basic/filter/dog2.m
new file mode 100755
index 0000000..8446198
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/dog2.m
@@ -0,0 +1,31 @@
1function G=dog2(sig,N);
2% G=dog2(sig,N);
3
4% by Serge Belongie
5
6no_pts=N; % no. of points in x,y grid
7
8[x,y]=meshgrid(-(N/2)+1/2:(N/2)-1/2,-(N/2)+1/2:(N/2)-1/2);
9
10sigi=0.62*sig;
11sigo=1.6*sig;
12C=diag([sig,sig]);
13Ci=diag([sigi,sigi]);
14Co=diag([sigo,sigo]);
15
16X=[x(:) y(:)];
17
18Ga=gaussian(X,[0 0]',Ci);
19Ga=reshape(Ga,N,N);
20Gb=gaussian(X,[0 0]',C);
21Gb=reshape(Gb,N,N);
22Gc=gaussian(X,[0 0]',Co);
23Gc=reshape(Gc,N,N);
24
25a=-1;
26b=2;
27c=-1;
28
29G = a*Ga + b*Gb + c*Gc;
30
31G=G-mean(G(:));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/doog1.m b/SD-VBS/common/toolbox/toolbox_basic/filter/doog1.m
new file mode 100755
index 0000000..dd8e87b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/doog1.m
@@ -0,0 +1,32 @@
1function H=doog1(sig,r,th,N);
2% H=doog1(sig,r,th,N);
3
4
5% by Serge Belongie
6
7no_pts=N; % no. of points in x,y grid
8
9[x,y]=meshgrid(-(N/2)+1/2:(N/2)-1/2,-(N/2)+1/2:(N/2)-1/2);
10
11phi=pi*th/180;
12sigy=sig;
13sigx=r*sig;
14R=[cos(phi) -sin(phi); sin(phi) cos(phi)];
15C=R*diag([sigx,sigy])*R';
16
17X=[x(:) y(:)];
18
19Gb=gaussian(X,[0 0]',C);
20Gb=reshape(Gb,N,N);
21
22m=R*[0 sig]';
23
24a=1;
25b=-1;
26
27% make odd-symmetric filter
28Ga=gaussian(X,m/2,C);
29Ga=reshape(Ga,N,N);
30Gb=rot90(Ga,2);
31H=a*Ga+b*Gb;
32
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/doog2.m b/SD-VBS/common/toolbox/toolbox_basic/filter/doog2.m
new file mode 100755
index 0000000..a0511cb
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/doog2.m
@@ -0,0 +1,38 @@
1function G=doog2(sig,r,th,N);
2% G=doog2(sig,r,th,N);
3% Make difference of offset gaussians kernel
4% theta is in degrees
5% (see Malik & Perona, J. Opt. Soc. Amer., 1990)
6%
7% Example:
8% >> imagesc(doog2(1,12,0,64,1))
9% >> colormap(gray)
10
11% by Serge Belongie
12
13no_pts=N; % no. of points in x,y grid
14
15[x,y]=meshgrid(-(N/2)+1/2:(N/2)-1/2,-(N/2)+1/2:(N/2)-1/2);
16
17phi=pi*th/180;
18sigy=sig;
19sigx=r*sig;
20R=[cos(phi) -sin(phi); sin(phi) cos(phi)];
21C=R*diag([sigx,sigy])*R';
22
23X=[x(:) y(:)];
24
25Gb=gaussian(X,[0 0]',C);
26Gb=reshape(Gb,N,N);
27
28m=R*[0 sig]';
29Ga=gaussian(X,m,C);
30Ga=reshape(Ga,N,N);
31Gc=rot90(Ga,2);
32
33a=-1;
34b=2;
35c=-1;
36
37G = a*Ga + b*Gb + c*Gc;
38
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/fft_filt.m b/SD-VBS/common/toolbox/toolbox_basic/filter/fft_filt.m
new file mode 100755
index 0000000..25fa5f9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/fft_filt.m
@@ -0,0 +1,82 @@
1% script for fft-based filtering
2
3% set up filterbank
4make_filterbank
5
6% prepare FFT of image for filtering
7[N1,N2]=size(V);
8I=zeros(size(V)+[M1-1 M2-1]);
9I(1:N1,1:N2)=V;
10IF=fft2(I);
11FI=zeros(N1,N2,total_num_filt);
12
13% apply filters
14for n=1:total_num_filt
15 disp(n)
16 f=rot90(FB(:,:,n),2);
17 fF=fft2(f,N1+M1-1,N2+M2-1);
18 IfF=IF.*fF;
19 If=real(ifft2(IfF));
20 If=If(ceil((M1+1)/2):ceil((M1+1)/2)+N1-1,ceil((M2+1)/2):ceil((M2+1)/2)+N2-1);
21 FI(:,:,n)=If;
22% im(If)
23% drawnow
24end
25
26%%%% end of filtering part; the remainder is for reconstruction & analysis
27break
28
29
30% use pseudoinverse to reconstruct image from filter projections
31fbv=reshape(FB,M1*M2,total_num_filt)';
32fbi=pinv(fbv);
33
34% find principal components
35T=reshape(FI,N1*N2,total_num_filt)';
36C=T*T';
37[U,S,junk]=svd(C);
38s=diag(S);
39
40% synthesize using some eigenvectors
41synth=fbi*U;
42k=ceil(sqrt(total_num_filt));
43for n=1:total_num_filt
44 subplot(k,k,n)
45 im(reshape(synth(:,n),M1,M2));
46 title(num2str(s(n)))
47 drawnow
48end
49
50% synthesize at a point by clicking on coordinates
51figure(1)
52im(V)
53[x,y]=ginput(1);
54x=round(x);
55y=round(y);
56u=squeeze(FI(y,x,:));
57synth=fbi*u;
58synth=reshape(synth,M1,M2);
59figure(2)
60subplot(1,2,1)
61im(V)
62axis([x-M2/2 x+M2/2 y-M1/2 y+M1/2])
63subplot(1,2,2)
64im(synth)
65title(num2str(max(synth(:))));
66
67figure(3)
68plot(u,'o-')
69
70% show pseudoinverse filterbank
71if 0
72k=ceil(sqrt(total_num_filt));
73for n=1:total_num_filt
74 subplot(k,k,n)
75 im(reshape(fbi(:,n),M1,M2));
76 axis('off')
77 drawnow
78end
79end
80
81
82
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/fft_filt_2.m b/SD-VBS/common/toolbox/toolbox_basic/filter/fft_filt_2.m
new file mode 100755
index 0000000..9c84e96
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/fft_filt_2.m
@@ -0,0 +1,29 @@
1function FI=fft_filt_2(V,FB,sf);
2% FI=fft_filt_2(V,FB,sf);
3% fft-based filtering
4% requires image to be called "V"
5% and filters to be in FB
6% sf is the subsampling factor
7%
8% FI is the result
9
10[M1,M2,N3]=size(FB);
11% prepare FFT of image for filtering
12[N1,N2]=size(V);
13I=zeros(size(V)+[M1-1 M2-1]);
14I(1:N1,1:N2)=V;
15N1s=length(1:sf:N1);
16N2s=length(1:sf:N2);
17IF=fft2(I);
18FI=zeros(N1s,N2s,N3);
19
20% apply filters
21for n=1:N3;
22 f=rot90(FB(:,:,n),2);
23 fF=fft2(f,N1+M1-1,N2+M2-1);
24 IfF=IF.*fF;
25 If=real(ifft2(IfF));
26 If=If(ceil((M1+1)/2):ceil((M1+1)/2)+N1-1,ceil((M2+1)/2):ceil((M2+1)/2)+N2-1);
27 FI(:,:,n)=If(1:sf:N1,1:sf:N2);
28end
29
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/filter_bank_jshi.tar b/SD-VBS/common/toolbox/toolbox_basic/filter/filter_bank_jshi.tar
new file mode 100755
index 0000000..b43b49c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/filter_bank_jshi.tar
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/gauss.m b/SD-VBS/common/toolbox/toolbox_basic/filter/gauss.m
new file mode 100755
index 0000000..f0403ed
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/gauss.m
@@ -0,0 +1,16 @@
1function dg = gauss(sig)
2% first derivative of N(sig)
3% cutoff after 1% of max
4
5 i = 1;
6 max = 0;
7 dgi = max;
8 dg = [1/ (sqrt(2*pi) * sig) ];
9 while dgi >= 0.01*max
10 dgi = 1/ (sqrt(2*pi) * sig) * exp(-0.5*i^2/sig^2);
11 dg = [dgi dg dgi];
12 i = i + 1;
13 if dgi > max
14 max = dgi;
15 end
16 end; \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/gaussian.m b/SD-VBS/common/toolbox/toolbox_basic/filter/gaussian.m
new file mode 100755
index 0000000..509b129
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/gaussian.m
@@ -0,0 +1,31 @@
1function p=gaussian(x,m,C);
2% p=gaussian(x,m,C);
3%
4% Evaluate the multi-variate density with mean vector m and covariance
5% matrix C for the input vector x.
6%
7% p=gaussian(X,m,C);
8%
9% Vectorized version: Here X is a matrix of column vectors, and p is
10% a vector of probabilities for each vector.
11
12d=length(m);
13
14if size(x,1)~=d
15 x=x';
16end
17N=size(x,2);
18
19detC = det(C);
20if rcond(C)<eps
21% fprintf(1,'Covariance matrix close to singular. (gaussian.m)\n');
22 p = zeros(N,1);
23else
24 m=m(:);
25 M=m*ones(1,N);
26 denom=(2*pi)^(d/2)*sqrt(abs(detC));
27 mahal=sum(((x-M)'*inv(C)).*(x-M)',2); % Chris Bregler's trick
28 numer=exp(-0.5*mahal);
29 p=numer/denom;
30end
31
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/get_diff2.m b/SD-VBS/common/toolbox/toolbox_basic/filter/get_diff2.m
new file mode 100755
index 0000000..31f3ac5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/get_diff2.m
@@ -0,0 +1,43 @@
1function [diffI,corr,mag,theta] = get_diff2(I,J,w)
2% car: I
3% background: J
4
5% half window size
6if (nargin == 2)
7 w = 1;
8end
9
10[gIx,gIy] = grad2(I,w);
11[gJx,gJy] = grad2(J,w);
12gx = gIx;
13gy = gIy;
14
15% normalize
16sI= sqrt(gIx.*gIx+gIy.*gIy);
17sJ= sqrt(gJx.*gJx+gJy.*gJy);
18gIx = gIx./sI;
19gIy = gIy./sI;
20gJx = gJx./sJ;
21gJy = gJy./sJ;
22
23theta = cart2pol(gIy,gIx);
24corr = gIx.*gJx + gIy.*gJy;
25
26%[gx,gy]= grad((I-J),w);mag = sqrt(gx.*gx+gy.*gy);
27%mag = sI;
28
29
30mag = sqrt((cos(theta).^2).*gy.^2 + (sin(theta).^2).*gx.^2 +...
31 2*cos(theta).*sin(theta).*gx.*gy);
32
33% want to look at the grad. mag greater than 10, and corr less than 0.9
34threshold = max(3.5,0.1*max(max(mag(5:size(mag,1)-5,5:size(mag,2)-5))))
35diffI = (abs(corr)<0.85).*(mag>threshold);
36
37
38
39
40
41
42
43
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/get_diff_free.m b/SD-VBS/common/toolbox/toolbox_basic/filter/get_diff_free.m
new file mode 100755
index 0000000..f020fab
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/get_diff_free.m
@@ -0,0 +1,8 @@
1function [diff,corr,mag,angle] = get_diff_free(I,J)
2
3[angle,mag,c2,c3] = compute_angle(I);
4[angleJ,magJ] = compute_angle(J);
5
6corr = cos(angle).*cos(angleJ) + sin(angle).*sin(angleJ);
7threshold = 0.075*max(max(mag(5:size(mag,1)-5,5:size(mag,2)-5)));
8diff = (abs(corr)<0.9).*(mag>threshold); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/grad1.m b/SD-VBS/common/toolbox/toolbox_basic/filter/grad1.m
new file mode 100755
index 0000000..eca34db
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/grad1.m
@@ -0,0 +1,11 @@
1function [gx,gy] = grad2(I,ratio)
2%
3%
4
5kern = dgauss(ratio);kern = kern/sum(abs(kern));
6gkern = gauss(ratio);gkern = gkern/sum(abs(kern));
7
8gx = conv2(I,kern,'same');
9gx = conv2(gx,gkern','same');
10
11gy = conv2(conv2(I,kern','same'),gkern,'same');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/grad2.m b/SD-VBS/common/toolbox/toolbox_basic/filter/grad2.m
new file mode 100755
index 0000000..ea4ec0e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/grad2.m
@@ -0,0 +1,11 @@
1function [gx,gy] = grad2(I,ratio)
2%
3%
4
5ddgauss = gradient(dgauss(ratio));ddgauss = ddgauss/sum(abs(ddgauss));
6gkern = gauss(ratio); gkern = gkern/sum(abs(gkern));
7
8gx = conv2(I,ddgauss,'same');
9gx = conv2(gx,gkern','same');
10
11gy = conv2(conv2(I,ddgauss','same'),gkern,'same');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/m_interp4.m b/SD-VBS/common/toolbox/toolbox_basic/filter/m_interp4.m
new file mode 100755
index 0000000..314f140
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/m_interp4.m
@@ -0,0 +1,49 @@
1function [F,mask] = m_interp4(z,s,t)
2%INTERP4 2-D bilinear data interpolation.
3% ZI = INTERP4(Z,XI,YI) assumes X = 1:N and Y = 1:M, where
4% [M,N] = SIZE(Z).
5%
6% Copyright (c) 1984-93 by The MathWorks, Inc.
7% Clay M. Thompson 4-26-91, revised 7-3-91, 3-22-93 by CMT.
8%
9% modified to
10
11
12[nrows,ncols] = size(z);
13
14
15if any(size(z)<[3 3]), error('Z must be at least 3-by-3.'); end
16if size(s)~=size(t), error('XI and YI must be the same size.'); end
17
18% Check for out of range values of s and set to 1
19sout = find((s<1)|(s>ncols));
20if length(sout)>0, s(sout) = ones(size(sout)); end
21
22% Check for out of range values of t and set to 1
23tout = find((t<1)|(t>nrows));
24if length(tout)>0, t(tout) = ones(size(tout)); end
25
26% Matrix element indexing
27ndx = floor(t)+floor(s-1)*nrows;
28
29% Compute intepolation parameters, check for boundary value.
30d = find(s==ncols);
31s(:) = (s - floor(s));
32if length(d)>0, s(d) = s(d)+1; ndx(d) = ndx(d)-nrows; end
33
34% Compute intepolation parameters, check for boundary value.
35d = find(t==nrows);
36t(:) = (t - floor(t));
37if length(d)>0, t(d) = t(d)+1; ndx(d) = ndx(d)-1; end
38d = [];
39
40% Now interpolate, reuse u and v to save memory.
41F = ( z(ndx).*(1-t) + z(ndx+1).*t ).*(1-s) + ...
42 ( z(ndx+nrows).*(1-t) + z(ndx+(nrows+1)).*t ).*s;
43
44mask = ones(size(z));
45
46% Now set out of range values to zeros.
47if length(sout)>0, F(sout) = zeros(size(sout));mask(sout)=zeros(size(sout));end
48if length(tout)>0, F(tout) = zeros(size(tout));mask(tout)=zeros(size(tout));end
49
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank.m b/SD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank.m
new file mode 100755
index 0000000..2ff15d2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank.m
@@ -0,0 +1,63 @@
1function FB = make_filterbank(num_ori,num_scale,wsz)
2%
3% F = make_filterbank(num_ori,num_scale,wsz)
4%
5
6
7% definine filterbank
8%num_ori=6;
9%num_scale=3;
10
11M1=wsz; % size in pixels
12M2=M1;
13
14ori_incr=180/num_ori;
15ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
16
17FBdoog1=zeros(M1,M2,num_scale,num_ori);
18FBdoog2=zeros(M1,M2,num_scale,num_ori);
19FBdog1=zeros(M1,M2,num_scale);
20FBdog2=zeros(M1,M2,num_scale);
21
22% elongated filter set
23counter = 1;
24filter_scale = 1.0;
25filter_scale_step = sqrt(2);
26
27for m=1:num_scale
28 f=dog1(filter_scale,M1);
29 FBdog1(:,:,m)=f;
30 f=dog2(filter_scale,M1);
31 FBdog2(:,:,m)=f;
32 counter=counter+1;
33 for n=1:num_ori
34 % r=12 here is equivalent to Malik's r=3;
35 f=doog2(filter_scale,6,ori_offset+(n-1)*ori_incr,M1);
36 FBdoog2(:,:,m,n)=f;
37 f=doog1(filter_scale,6,ori_offset+(n-1)*ori_incr,M1);
38 FBdoog1(:,:,m,n)=f;
39 end
40 filter_scale = filter_scale * filter_scale_step;
41end
42
43FB=cat(3,3*FBdog1,4.15*FBdog2,2*reshape(FBdoog1,M1,M2,num_scale*num_ori),2*reshape(FBdoog2,M1,M2,num_scale*num_ori));
44total_num_filt=size(FB,3);
45
46nb = size(FB,3);
47for j=1:nb,
48 F = FB(:,:,j);
49 a = sum(sum(abs(F)));
50 FB(:,:,j) = FB(:,:,j)/a;
51end
52
53
54if 0
55k=ceil(sqrt(total_num_filt));
56for n=1:total_num_filt
57 subplot(k,k,n)
58 im(FB(:,:,n));
59 axis('off')
60 drawnow
61end
62end
63
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank_23.m b/SD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank_23.m
new file mode 100755
index 0000000..f9fcaa9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank_23.m
@@ -0,0 +1,40 @@
1function [FB,M1,M2,N3]=make_filterbank_23;
2% multi-scale even and odd filters
3
4M1=31; % size in pixels
5M2=M1;
6num_ori=6;
7num_scales=3;
8num_phases=2;
9N3=num_ori*num_scales*num_phases;
10FB=zeros(M1,M2,N3);
11
12counter=1;
13
14for m=1:num_scales
15 for n=1:num_ori
16 [F1,F2]=quadpair(sqrt(2)^m,3,180*(n-1)/num_ori,M1);
17 FB(:,:,counter)=F1;
18 counter=counter+1;
19 FB(:,:,counter)=F2;
20 counter=counter+1;
21 end
22end
23
24FB=cat(3,FB,dog2(1,M1),dog2(sqrt(2),M1),dog2(2,M1),dog2(2*sqrt(2),M1));
25
26N3=size(FB,3);
27
28% stuff for visualizing spectra of filters:
29if 0
30FBF=zeros(size(FB));
31
32for n=1:36
33 FBF(:,:,n)=abs(fftshift(fft2(FB(:,:,n))));
34end
35
36montage2(FBF)
37
38im(sum(FBF,3))
39
40end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank_even.m b/SD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank_even.m
new file mode 100755
index 0000000..8c8d802
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank_even.m
@@ -0,0 +1,40 @@
1function FB = make_filterbank(num_ori,filter_scales,wsz)
2%
3% F = make_filterbank(num_ori,num_scale,wsz)
4%
5
6
7% definine filterbank
8%num_ori=6;
9%num_scale=3;
10
11num_scale = length(filter_scales);
12
13M1=wsz; % size in pixels
14M2=M1;
15
16ori_incr=180/num_ori;
17ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
18
19FB=zeros(M1,M2,num_ori,num_scale);
20
21% elongated filter set
22counter = 1;
23
24for m=1:num_scale
25 for n=1:num_ori
26 % r=12 here is equivalent to Malik's r=3;
27 f=doog2(filter_scales(m),6,ori_offset+(n-1)*ori_incr,M1);
28 FB(:,:,n,m)=f;
29 end
30end
31
32FB=reshape(FB,M1,M2,num_scale*num_ori);
33total_num_filt=size(FB,3);
34
35for j=1:total_num_filt,
36 F = FB(:,:,j);
37 a = sum(sum(abs(F)));
38 FB(:,:,j) = FB(:,:,j)/a;
39end
40
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank_odd.m b/SD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank_odd.m
new file mode 100755
index 0000000..8103598
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/make_filterbank_odd.m
@@ -0,0 +1,41 @@
1function FB = make_filterbank(num_ori,filter_scales,wsz)
2%
3% F = make_filterbank(num_ori,num_scale,wsz)
4%
5
6
7% definine filterbank
8%num_ori=6;
9%num_scale=3;
10
11num_scale = length(filter_scales);
12
13M1=wsz; % size in pixels
14M2=M1;
15
16ori_incr=180/num_ori;
17ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
18
19FB=zeros(M1,M2,num_ori,num_scale);
20
21
22% elongated filter set
23counter = 1;
24
25for m=1:num_scale
26 for n=1:num_ori
27 % r=12 here is equivalent to Malik's r=3;
28 f=doog1(filter_scales(m),6,ori_offset+(n-1)*ori_incr,M1);
29 FB(:,:,n,m)=f;
30 end
31end
32
33FB=reshape(FB,M1,M2,num_scale*num_ori);
34total_num_filt=size(FB,3);
35
36for j=1:total_num_filt,
37 F = FB(:,:,j);
38 a = sum(sum(abs(F)));
39 FB(:,:,j) = FB(:,:,j)/a;
40end
41
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/mdoog2.m b/SD-VBS/common/toolbox/toolbox_basic/filter/mdoog2.m
new file mode 100755
index 0000000..25bc2f9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/mdoog2.m
@@ -0,0 +1,36 @@
1function G=doog2(sig,r,th,N);
2% [G,H]=doog2(sig,r,th,N);
3% Make difference of offset gaussians kernel
4% theta is in degrees
5% (see Malik & Perona, J. Opt. Soc. Amer., 1990)
6%
7
8
9[x,y]=meshgrid(-N:N,-N:N);
10
11a=-1;
12b=2;
13c=-1;
14
15ya=sig;
16yc=-ya;
17yb=0;
18sigy=sig;
19sigx=r*sig;
20
21Ga=(1/(2*pi*sigx*sigy))*exp(-(((x-0)/sigx).^2+((y-ya)/sigy).^2));
22Gb=(1/(2*pi*sigx*sigy))*exp(-(((x-0)/sigx).^2+((y-yb)/sigy).^2));
23Gc=(1/(2*pi*sigx*sigy))*exp(-(((x-0)/sigx).^2+((y-yc)/sigy).^2));
24
25Go = a*Ga + b*Gb + c*Gc;
26%Ho = imag(hilbert(Go));
27G = Go;
28
29G = mimrotate(Go,th,'bilinear','crop');
30
31G = G-mean(reshape(G,prod(size(G)),1));
32
33G = G/sum(sum(abs(G)));
34
35
36
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/mimrotate.m b/SD-VBS/common/toolbox/toolbox_basic/filter/mimrotate.m
new file mode 100755
index 0000000..7dd31a2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/mimrotate.m
@@ -0,0 +1,119 @@
1function bout = imrotate(arg1,arg2,arg3,arg4)
2%IMROTATE Rotate image.
3% B = IMROTATE(A,ANGLE,'method') rotates the image A by ANGLE
4% degrees. The image returned B will, in general, be larger
5% than A. Invalid values on the periphery are set to one
6% for indexed images or zero for all other image types. Possible
7% interpolation methods are 'nearest','bilinear' or 'bicubic'.
8% 'bilinear' is the default for intensity images, otherwise
9% 'nearest' is used if no method is given.
10%
11% B = IMROTATE(A,ANGLE,'crop') or IMROTATE(A,ANGLE,'method','crop')
12% crops B to be the same size as A.
13%
14% Without output arguments, IMROTATE(...) displays the rotated
15% image in the current axis.
16%
17% See also IMRESIZE, IMCROP, ROT90.
18
19% Clay M. Thompson 8-4-92
20% Copyright (c) 1992 by The MathWorks, Inc.
21% $Revision: 1.14 $ $Date: 1993/09/01 21:27:38 $
22
23if nargin<2, error('Requires at least two input parameters.'); end
24if nargin<3,
25 if isgray(arg1), caseid = 'bil'; else caseid = 'nea'; end
26 docrop = 0;
27elseif nargin==3,
28 if isstr(arg3),
29 method = [lower(arg3),' ']; % Protect against short method
30 caseid = method(1:3);
31 if caseid(1)=='c', % Crop string
32 if isgray(arg1), caseid = 'bil'; else caseid = 'nea'; end
33 docrop = 1;
34 else
35 docrop = 0;
36 end
37 else
38 error('''METHOD'' must be a string of at least three characters.');
39 end
40else
41 if isstr(arg3),
42 method = [lower(arg3),' ']; % Protect against short method
43 caseid = method(1:3);
44 else
45 error('''METHOD'' must be a string of at least three characters.');
46 end
47 docrop = 1;
48end
49
50% Catch and speed up 90 degree rotations
51if rem(arg2,90)==0 & nargin<4,
52 phi = rem(arg2,360);
53 if phi==90,
54 b = rot90(arg1);
55 elseif phi==180,
56 b = rot90(arg1,2);
57 elseif phi==270,
58 b = rot90(arg1,-1);
59 else
60 b = arg1;
61 end
62 if nargout==0, imshow(b), else bout = b; end
63 return
64end
65
66phi = arg2*pi/180; % Convert to radians
67
68% Rotation matrix
69T = [cos(phi) -sin(phi); sin(phi) cos(phi)];
70
71% Coordinates from center of A
72[m,n] = size(arg1);
73if ~docrop, % Determine limits for rotated image
74 siz = ceil(max(abs([(n-1)/2 -(m-1)/2;(n-1)/2 (m-1)/2]*T))/2)*2;
75 uu = -siz(1):siz(1); vv = -siz(2):siz(2);
76else % Cropped image
77 uu = (1:n)-(n+1)/2; vv = (1:m)-(m+1)/2;
78end
79nu = length(uu); nv = length(vv);
80
81blk = bestblk([nv nu]);
82nblks = floor([nv nu]./blk); nrem = [nv nu] - nblks.*blk;
83mblocks = nblks(1); nblocks = nblks(2);
84mb = blk(1); nb = blk(2);
85
86rows = 1:blk(1); b = zeros(nv,nu);
87for i=0:mblocks,
88 if i==mblocks, rows = (1:nrem(1)); end
89 for j=0:nblocks,
90 if j==0, cols = 1:blk(2); elseif j==nblocks, cols=(1:nrem(2)); end
91 if ~isempty(rows) & ~isempty(cols)
92 [u,v] = meshgrid(uu(j*nb+cols),vv(i*mb+rows));
93 % Rotate points
94 uv = [u(:) v(:)]*T'; % Rotate points
95 u(:) = uv(:,1)+(n+1)/2; v(:) = uv(:,2)+(m+1)/2;
96 if caseid(1)=='n', % Nearest neighbor interpolation
97 b(i*mb+rows,j*nb+cols) = interp6(arg1,u,v);
98 elseif all(caseid=='bil'), % Bilinear interpolation
99 b(i*mb+rows,j*nb+cols) = interp2(arg1,u,v,'linear');
100 elseif all(caseid=='bic'), % Bicubic interpolation
101 b(i*mb+rows,j*nb+cols) = interp5(arg1,u,v);
102 else
103 error(['Unknown interpolation method: ',method]);
104 end
105 end
106 end
107end
108
109d = find(isnan(b));
110if length(d)>0,
111 if isind(arg1), b(d) = ones(size(d)); else b(d) = zeros(size(d)); end
112end
113
114if nargout==0,
115 imshow(b), return
116end
117bout = b;
118
119
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/mk_odd_filter.m b/SD-VBS/common/toolbox/toolbox_basic/filter/mk_odd_filter.m
new file mode 100755
index 0000000..43ec7d7
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/mk_odd_filter.m
@@ -0,0 +1,36 @@
1function G=doog2(sig,r,th,N);
2% [G,H]=doog2(sig,r,th,N);
3% Make difference of offset gaussians kernel
4% theta is in degrees
5% (see Malik & Perona, J. Opt. Soc. Amer., 1990)
6%
7
8
9[x,y]=meshgrid(-N:N,-N:N);
10
11a=-1;
12b=2;
13c=-1;
14
15ya=sig;
16yc=-ya;
17yb=0;
18sigy=sig;
19sigx=r*sig;
20
21Ga=(1/(2*pi*sigx*sigy))*exp(-(((x-0)/sigx).^2+((y-ya)/sigy).^2));
22Gb=(1/(2*pi*sigx*sigy))*exp(-(((x-0)/sigx).^2+((y-yb)/sigy).^2));
23Gc=(1/(2*pi*sigx*sigy))*exp(-(((x-0)/sigx).^2+((y-yc)/sigy).^2));
24
25Go = a*Ga + b*Gb + c*Gc;
26Ho = imag(hilbert(Go));
27%G = Ho;
28
29G = mimrotate(Ho,th,'bilinear','crop');
30
31G = G-mean(reshape(G,prod(size(G)),1));
32
33G = G/sum(sum(abs(G)));
34
35
36
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/mkdog1.m b/SD-VBS/common/toolbox/toolbox_basic/filter/mkdog1.m
new file mode 100755
index 0000000..f1225cc
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/mkdog1.m
@@ -0,0 +1,20 @@
1function dog1 = mkdog1(sigma_base,size_w)
2%
3% function dog1 = mkdog1(sigma_base,size_w)
4%
5%
6
7%scale_base = 1;
8scale_base = 3;
9
10a = scale_base;
11c = -1*scale_base;
12
13sigma_a = 0.71*sigma_base;
14sigma_c = 1.14*sigma_base;
15
16dog1 = a*mkg(0,0,sigma_a,sigma_a,size_w) +...
17 c*mkg(0,0,sigma_c,sigma_c,size_w);
18
19dog1 = dog1-mean(reshape(dog1,prod(size(dog1)),1));
20dog1 = dog1/sum(sum(abs(dog1)));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/mkdog2.m b/SD-VBS/common/toolbox/toolbox_basic/filter/mkdog2.m
new file mode 100755
index 0000000..a78824a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/mkdog2.m
@@ -0,0 +1,22 @@
1function dog2 = mkdog2(sigma_base,size_w)
2%
3% function dog2 = mkdog2(sigma_base,size_w)
4%
5%
6
7%scale_base = 1.224;
8scale_base = 4.15;
9
10a = scale_base;
11b = -2*scale_base;
12c = scale_base;
13
14sigma_a = 0.62*sigma_base;
15sigma_b = sigma_base;
16sigma_c = 1.6*sigma_base;
17
18dog2 = a*mkg(0,0,sigma_a,sigma_a,size_w) +...
19 b*mkg(0,0,sigma_b,sigma_b,size_w) +...
20 c*mkg(0,0,sigma_c,sigma_c,size_w);
21
22%dog2 = 255*5.1745*dog2; \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/mkdoog2.m b/SD-VBS/common/toolbox/toolbox_basic/filter/mkdoog2.m
new file mode 100755
index 0000000..5db2877
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/mkdoog2.m
@@ -0,0 +1,30 @@
1function doog2 = mkdoog2(sigma_w,r,theta,size_w)
2%
3% function doog2 = mkdoog2(sigma_w,r,theta,size_w)
4%
5%
6
7%scale_base = 2.8814;
8scale_base = 2;
9
10a = -1*scale_base;
11b = 2*scale_base;
12c = -1*scale_base;
13
14sigma_x = r*sigma_w;
15sigma_y = sigma_w;
16
17ya = sigma_w;
18yc = -sigma_w;
19yb = 0;
20
21doog2 = a*mkg(0,ya,sigma_x,sigma_y,size_w) +...
22 b*mkg(0,yb,sigma_x,sigma_y,size_w) +...
23 c*mkg(0,yc,sigma_x,sigma_y,size_w);
24
25%doog2 = 255*5.1745*doog2;
26
27
28
29
30
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/mkdoogs.m b/SD-VBS/common/toolbox/toolbox_basic/filter/mkdoogs.m
new file mode 100755
index 0000000..e5796bc
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/mkdoogs.m
@@ -0,0 +1,15 @@
1function [doogs,index] = mkdoogs(sigma_w,r,theta,theta_to,size_w)
2% function doogs = mkdoogs(sigma_w,r,theta,theta_to,size_w)
3%
4
5doogs = [];
6
7angle_start = theta*pi/180;
8angle_end = theta_to*pi/180;
9step = pi/180;
10
11index = 1;
12for k=angle_start:step:angle_end,
13 doogs = [doogs,mkdoog2(sigma_w,r,k,size_w)];
14 index = index +1;
15end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/mkg.m b/SD-VBS/common/toolbox/toolbox_basic/filter/mkg.m
new file mode 100755
index 0000000..1fb1f7e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/mkg.m
@@ -0,0 +1,9 @@
1function g= mkgaussian(xo,yo,sigma_x,sigma_y,size_w)
2%
3% function G = mkgaussian(xo,yo,sigma_x,sigma_y,size_w)
4%
5
6size_wh = round(0.5*size_w);
7[x,y] = meshgrid([-size_wh:1:size_wh],[-size_wh:1:size_wh]);
8g = 1/(2*pi*sigma_x*sigma_y)*(exp(-( ((x-xo)/sigma_x).^2 + ((y-yo)/sigma_y).^2)));
9
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/quadpair.m b/SD-VBS/common/toolbox/toolbox_basic/filter/quadpair.m
new file mode 100755
index 0000000..96c2a22
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/quadpair.m
@@ -0,0 +1,20 @@
1function [F1,F2]=quadpair(sig,lam,th,N);
2% [F1,F2]=quadpair(sig,lam,th,N);
3%
4% For Thomas' ECCV98 filters, use sig=sqrt(2), lam=4.
5
6%N=31;
7[x,y]=meshgrid(-(N/2)+1/2:(N/2)-1/2,-(N/2)+1/2:(N/2)-1/2);
8
9
10F1=(4*(y.^2)/(sig^4)-2/(sig^2)).*exp(-(y.^2)/(sig^2)-(x.^2)/(lam^2*sig^2));
11F2=imag(hilbert(F1));
12
13F1=imrotate(F1,th,'bil','crop');
14F2=imrotate(F2,th,'bil','crop');
15
16F1=F1-mean(F1(:));
17F2=F2-mean(F2(:));
18
19F1=F1/norm(F1(:),1);
20F2=F2/norm(F2(:),1); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/smooth.m b/SD-VBS/common/toolbox/toolbox_basic/filter/smooth.m
new file mode 100755
index 0000000..5ef7579
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/smooth.m
@@ -0,0 +1,24 @@
1% smooth an image
2% coordinates (r, c) follow matrix convention;
3% the gaussian is truncated at x = +- tail, and there are samples samples
4% inbetween, where samples = hsamples * 2 + 1
5
6function g = smooth(image, hsamples)
7
8tail=4;
9samples = hsamples * 2 + 1;
10
11x = linspace(-tail, tail, samples);
12gauss = exp(-x.^2);
13%s = sum(gauss)/length(x);gauss = gauss-s;
14gauss = gauss/sum(abs(gauss));
15
16n = gauss * ones(samples,1);
17gauss = gauss/n;
18
19
20g = conv2(conv2(image, gauss,'same'), gauss','same');
21%g = conv2(conv2(image, gauss,'valid'), gauss','valid');
22
23
24
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/softkmean.m b/SD-VBS/common/toolbox/toolbox_basic/filter/softkmean.m
new file mode 100755
index 0000000..b9b4feb
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/softkmean.m
@@ -0,0 +1,56 @@
1function [cluster,var,mix,membership,lG] = softkmeans(data,k,cluster0)
2
3[n,D] = size(data);
4var = 1.0;
5var0 = ones(k,1)*var; minvar = 0.0001;
6mix0 = ones(k,1)/k; minmix = 0.0001;
7
8k = size(var0,1);
9[n,D] = size(data);
10
11lGG = [];
12ma = -1e20;
13in = 0;
14
15if (nargin == 2),
16 max_data = max(data);
17 min_data = min(data);
18 %step = (max_data-min_data)/(k+1);
19 %cluster0 = [1:k]'*step+min_data;
20 mag = ones(k,1)*(max_data-min_data);
21 base = ones(k,1)*min_data;
22 cluster0 = rand(k,D).*mag + base;
23end
24
25%cluster0
26for t = 1:3,
27 %rndindx = round(rand(1,k)*(n-3))+2;
28 %cluster0 = (data(rndindx,:)+data(rndindx+1,:)+data(rndindx-1,:))/2;
29 [cluster,var,mix,membership,lG] = softmeans(cluster0,var0,minvar,mix0,minmix,data);
30 eval(sprintf('mix_var_cluster_%d = [mix,var,cluster];',t));
31 eval(sprintf('lG_%d = lG;',t));
32 if ma<lG(size(lG,2)),
33 ma = lG(size(lG,2));
34 in = t;
35 end
36
37end
38
39eval(sprintf('mix_var_cluster = mix_var_cluster_%d;',in));
40eval(sprintf('lG = lG_%d;',in));
41mix = mix_var_cluster(:,1);
42var = mix_var_cluster(:,2);
43cluster = mix_var_cluster(:,3:size(mix_var_cluster,2))
44
45
46[tmp,vecs2cluster] = max(membership');
47vecs2cluster = vecs2cluster';
48cluster_iCV = inv(var);
49
50
51
52
53
54
55
56
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/softmeans.m b/SD-VBS/common/toolbox/toolbox_basic/filter/softmeans.m
new file mode 100755
index 0000000..b7e5068
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/softmeans.m
@@ -0,0 +1,46 @@
1function [cluster,var,mix,membership,lG] = softmeans(cluster0,var0,minvar,mix0,minmix,data)
2
3[k,D] = size(cluster0);
4[n,D] = size(data);
5cluster_p = cluster0; var_p = var0; mix_p = mix0;
6old_lg = -inf; lG = [];
7
8for iter = 1:30, % max.iterations
9 % E-Step + comp. incomplete likelihood
10
11 H = zeros(n,k);
12 for j = 1:k,
13 Hj = (data-(ones(n,1)*cluster_p(j,:))).^2;
14 if D > 1, Hj = sum(Hj')'; end
15 H(:,j) = exp(Hj /(-2*var_p(j)))/(sqrt(var_p(j))^D);
16 end
17 H = H.*(ones(n,1)*mix_p');
18 new_lg = sum(log(sum(H')/(sqrt(2*pi)^D)));
19 lG = [lG, new_lg];
20 if new_lg == old_lg, break; end; old_lg = new_lg;
21 H = H./(sum(H')'*ones(1,k)); % normalize
22
23 % M-Step:
24
25 if minmix > 0,
26 mix_p = sum(H); mix_p = mix_p/sum(mix_p); mix_p = mix_p';
27 for j = 1:k, if mix_p(j)<minmix, mix_p(j) = minmix; end; end;
28 end
29 cluster_p = (H./(ones(n,1)*sum(H)))'*data;
30 if minvar > 0,
31 for j = 1:k,
32 varj = (data-(ones(n,1)*cluster_p(j,:))).^2;
33 if D > 1, varj = sum(varj')'; end
34 var_p(j) = sum(H(:,j).*varj)/(D*sum(H(:,j)));
35 if var_p(j)<minvar, var_p(j) = minvar; end;
36 end;
37 end
38
39% cluster_p = cluster_p./(sqrt(sum(cluster_p'.^2)')*ones(1,D));
40end
41
42cluster = cluster_p;
43var = var_p;
44mix = mix_p;
45membership = H;
46
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter/softmeans2.m b/SD-VBS/common/toolbox/toolbox_basic/filter/softmeans2.m
new file mode 100755
index 0000000..8fd194e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter/softmeans2.m
@@ -0,0 +1,39 @@
1function [cluster,var,mix,membership,lG] = softmeans2(var0,minvar,mix0,minmix,data,cluster0,iter)
2
3if (~exist('iter')),
4 iter = 3;
5end
6
7k = size(var0,1);
8[n,D] = size(data);
9
10lGG = [];
11ma = -1e20;
12in = 0;
13
14if (nargin == 5),
15 max_data = max(data);
16 min_data = min(data);
17 step = (max_data-min_data)/(k+1);
18 cluster0 = [1:k]'*step+min_data;
19end
20cluster0
21for t = 1:iter,
22 %rndindx = round(rand(1,k)*(n-3))+2;
23 %cluster0 = (data(rndindx,:)+data(rndindx+1,:)+data(rndindx-1,:))/2;
24 [cluster,var,mix,membership,lG] = softmeans(cluster0,var0,minvar,mix0,minmix,data);
25 eval(sprintf('mix_var_cluster_%d = [mix,var,cluster];',t));
26 eval(sprintf('lG_%d = lG;',t));
27 if ma<lG(size(lG,2)),
28 ma = lG(size(lG,2));
29 in = t;
30 end
31
32end
33
34eval(sprintf('mix_var_cluster = mix_var_cluster_%d;',in));
35eval(sprintf('lG = lG_%d;',in));
36mix = mix_var_cluster(:,1);
37var = mix_var_cluster(:,2);
38cluster = mix_var_cluster(:,3:size(mix_var_cluster,2))
39
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filterQuad.zip b/SD-VBS/common/toolbox/toolbox_basic/filterQuad.zip
new file mode 100755
index 0000000..00e6141
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filterQuad.zip
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/1d_cut.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/1d_cut.m
new file mode 100755
index 0000000..46f865b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/1d_cut.m
@@ -0,0 +1,16 @@
1function [x,map] = idcut(data,cmap,nbin)
2%
3%
4%
5
6lc = size(cmap,1);
7
8data = data - min(data);
9data = 1+ ((lc-1)*data/max(data));
10
11r = cmap(data,1);
12g = cmap(data,2);
13b = cmap(data,3);
14
15[x,map] = vmquant(r,g,b,nbin);
16
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/Bfilter.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/Bfilter.m
new file mode 100755
index 0000000..ee086f0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/Bfilter.m
@@ -0,0 +1,11 @@
1function output = Bfilter(img,H)
2%
3% function output = Bfilter(img,H)
4%
5
6sze = size(img);
7
8Y = fft(reshape(img,1,sze(1)*sze(2)));
9C = Y.*conj(H);
10c = real(ifft(C));
11output = reshape(c,sze(1),sze(2));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/BfilterS.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/BfilterS.m
new file mode 100755
index 0000000..4eb4fd6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/BfilterS.m
@@ -0,0 +1,17 @@
1function output = Bfilters(img,H,w)
2%
3% function output = Bfilter(img,H,w)
4%
5
6sze = size(img);
7w_h = round(0.5*(w-1));
8
9Y = fft(reshape(img,1,sze(1)*sze(2)));
10C = Y.*conj(H);
11c = real(ifft(C));
12o = reshape(c,sze(1),sze(2));
13
14output(1:w_h(1),1:w_h(2)) = o(sze(1)-w_h(1)+1:sze(1),sze(2)-w_h(2)+1:sze(2));
15output(1:w_h(1),w_h(2)+1:sze(2)) = o(sze(1)-w_h(1)+1:sze(1),1:sze(2)-w_h(2));
16output(w_h(1)+1:sze(1),w_h(2)+1:sze(2)) = o(1:sze(1)-w_h(1),1:sze(2)-w_h(2));
17output(w_h(1)+1:sze(1),1:w_h(2)) = o(1:sze(1)-w_h(1),sze(2)-w_h(2)+1:sze(2));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/Ncut.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/Ncut.m
new file mode 100755
index 0000000..30c9b33
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/Ncut.m
@@ -0,0 +1,14 @@
1function [v,d] = ncut(A,nv)
2
3ds = sum(A);
4ds = ones(size(ds))./sqrt(ds);
5
6D1 = ds'*ones(1,length(ds));
7A = D1'.*A.*D1;
8
9disp(sprintf('computing eig values'));
10tic;[v,d] = eigs(A,nv);toc;
11
12d = abs(diag(d));
13
14v = D1(:,1:size(v,2)).*v;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/apply_image.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/apply_image.m
new file mode 100755
index 0000000..0791aa4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/apply_image.m
@@ -0,0 +1,38 @@
1function [aout1,aout2,aout3,aout4] = apply_image(gx,gy,wc)
2%
3% aout = apply_image(gx,gy,wc)
4%
5%
6
7[nr,nc] =size(gx);
8
9w = 2*wc+1;
10
11aout1 = ones(nr,nc);
12aout2 = zeros(nr,nc);
13aout3 = aout2;
14aout4 = aout2;
15
16%mask = smooth(ones(w,w),w);
17%sig = w;
18%[x,y] = meshgrid(-wc:wc,-wc:wc);
19%mask = exp(-(x.*x)/sig).*exp(-(y.*y)/sig);
20%mask = mask/sum(sum(mask));
21
22
23tmp = ones(w,w);
24for j=wc+1:w:nr-wc-1,
25 for k=wc+1:w:nc-wc-1,
26 tgx = get_win(gx,[k,j],[wc,wc]);
27 tgy = get_win(gy,[k,j],[wc,wc]);
28 %mag = sum(sum(sqrt((mask.*tgx).^2+(mask.*tgy).^2)));
29 mag = sum(sum(sqrt(tgx.^2 + tgy.^2)))/prod(size(tgy));
30
31 M = is_step(tgx,tgy);
32
33 aout1(j-wc:j+wc,k-wc:k+wc) = M(1)*tmp;
34 aout2(j-wc:j+wc,k-wc:k+wc) = M(2)*tmp;
35 aout3(j-wc:j+wc,k-wc:k+wc) = M(3)*tmp;
36 aout4(j-wc:j+wc,k-wc:k+wc) = mag*tmp;
37 end
38end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/back_proj.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/back_proj.m
new file mode 100755
index 0000000..47ac865
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/back_proj.m
@@ -0,0 +1,10 @@
1function BI = back_proj(PFt,vec)
2
3BI = [];
4
5sz1 = sqrt(size(PFt,1));
6
7for j=1:size(vec,2)
8 tmp = PFt*vec(:,j);
9 BI(:,:,j) = reshape(tmp,sz1,sz1);
10end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/backproj_outer.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/backproj_outer.m
new file mode 100755
index 0000000..b4560c5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/backproj_outer.m
@@ -0,0 +1,9 @@
1function v = backproj_outer(fvs,u,hb)
2%
3% given the eigenvecs of the hist.bin. features
4% computes the back projection on the eigenvects
5%
6
7[nv,np] = size(fvs);
8
9for j=1: \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/backproj_outer_chank.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/backproj_outer_chank.m
new file mode 100755
index 0000000..5e3eac9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/backproj_outer_chank.m
@@ -0,0 +1,33 @@
1function v = backproj_outer_chank(fvs,u,d,chank_size)
2%
3% given the eigenvecs of the hist.bin. features
4% computes the back projection on the eigenvects
5%
6
7[nv,np] = size(fvs);
8[nbins,nv] = size(u);
9
10n_chanks = ceil(np/chank_size);
11
12v = ones(np,nv);
13
14for j=1:n_chanks,
15 fprintf('<');
16
17 cm = sprintf('load st_%d',j);
18 eval(cm);
19 fprintf(sprintf('%d',n_chanks-j));
20
21 v((j-1)*chank_size+1:min(np,j*chank_size),:) = fh'*u;
22 fprintf('>');
23end
24
25fprintf('\n');
26
27s = 1./sqrt(d);
28
29for j=1:nv,
30 v(:,j) = v(:,j)*s(j);
31end
32
33
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/backproj_outer_chank2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/backproj_outer_chank2.m
new file mode 100755
index 0000000..084c150
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/backproj_outer_chank2.m
@@ -0,0 +1,36 @@
1function v = backproj_outer_chank(fvs,u,d,chank_size)
2%
3% given the eigenvecs of the hist.bin. features
4% computes the back projection on the eigenvects
5%
6
7[nv,np] = size(fvs);
8[nbins,nv] = size(u);
9
10n_chanks = ceil(np/chank_size);
11
12v = ones(np,nv);
13
14for j=1:n_chanks,
15 fprintf('<');
16
17 cm = sprintf('load st_%d',j);
18 eval(cm);
19 fprintf(sprintf('%d',n_chanks-j));
20
21 ms = mean(fh');
22 fh = fh - ms'*ones(1,size(fh,2));
23
24 v((j-1)*chank_size+1:min(np,j*chank_size),:) = fh'*u;
25 fprintf('>');
26end
27
28fprintf('\n');
29
30s = 1./sqrt(d);
31
32for j=1:nv,
33 v(:,j) = v(:,j)*s(j);
34end
35
36
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/binize.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/binize.m
new file mode 100755
index 0000000..d166cd5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/binize.m
@@ -0,0 +1,15 @@
1function [binv,bins] = binize(data,sig,bin_min,bin_max,num_bin)
2%
3% given an input data, and sigma which describes the uncertainty
4% of the data, along with information on the bins,
5% return the soft-hist on data
6%
7
8ndata = length(data);
9
10bins = linspace(bin_min,bin_max,num_bin+1);
11binv = zeros(num_bin,ndata);
12
13for j=1:num_bin,
14 binv(j,:) = erf((bins(j+1)-data)/sig) - erf((bins(j)-data)/sig);
15end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/binize_old.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/binize_old.m
new file mode 100755
index 0000000..d56d263
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/binize_old.m
@@ -0,0 +1,34 @@
1function [binv,bins] = binize(data,sig,bin_min,bin_max,num_bin)
2%
3% given an input data, and sigma which describes the uncertainty
4% of the data, along with information on the bins,
5% return the soft-hist on data
6%
7
8ndata = length(data);
9
10if 0,
11bins = linspace(bin_min,bin_max,num_bin);
12binv = zeros(num_bin,ndata);
13
14Largev = 1000;
15
16bins = [-Largev,bins];
17
18for j=1:num_bin,
19 binv(j,:) = erf((bins(j+1)-data)/sig) - erf((bins(j)-data)/sig);
20end
21
22binv(num_bin,:) = binv(num_bin,:) + erf((Largev-data)/sig) - erf((bins(end)-data)/sig);
23bins = bins(2:end);
24else
25
26bins = linspace(bin_min,bin_max,num_bin+1);
27binv = zeros(num_bin,ndata);
28
29
30for j=1:num_bin,
31 binv(j,:) = erf((bins(j+1)-data)/sig) - erf((bins(j)-data)/sig);
32end
33
34end \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/binomialfield.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/binomialfield.m
new file mode 100755
index 0000000..d83d96d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/binomialfield.m
@@ -0,0 +1,75 @@
1function [x,y,success] = BinomialField(n,sx,sy,ir,numtri);
2%BF_HardCore Generates a hard core binomial field
3% [x,y,success] = BinomialField(n,sx,sy,ir);
4% n : # points (default 100)
5% sx : size in x (default 100)
6% sy : size in y (default 100)
7% ir : inhibition radius (default 0)
8% numtri : number of trials (default 200)
9% x : x coordinates
10% y : y coordinates
11% success: whether success or not, useful when producing hard core model
12
13%%
14%% (C) Thomas K. Leung
15%% University of California at Berkeley
16%% April 26, 1995.
17%% leungt@cajal.cs.berkeley.edu
18%%
19
20%%
21%% Generate n points first and then reject those closer to the
22%% previous points than ir
23%%
24
25if nargin < 1
26 n = 100;
27 sx = 100;
28 sy = 100;
29 ir = 0;
30 numtri = 200;
31elseif (nargin == 1 | nargin == 2)
32 sx = 100;
33 sy = 100;
34 ir = 0;
35 numtri = 200;
36elseif (nargin == 3)
37 ir = 0;
38 numtri = 200;
39elseif (nargin == 4)
40 numtri = 200;
41end
42
43x = zeros(1,n);
44y = zeros(1,n);
45
46rand('seed',sum(100*clock));
47x(1) = rand(1) * sx;
48y(1) = rand(1) * sy;
49
50success = 1;
51
52I = 2;
53trial = 0;
54while (I <= n & trial < numtri)
55 found = 0;
56 trial = 0;
57 while (~found & trial < numtri);
58 tx = rand(1) * sx;
59 ty = rand(1) * sy;
60 D = (x(1:(I-1)) - tx).^2 + (y(1:(I-1)) - ty).^2;
61 if sum(D > (ir^2)) == (I-1)
62 found = 1;
63 x(I) = tx;
64 y(I) = ty;
65 end
66 trial = trial + 1;
67 end
68 I = I + 1;
69end
70
71if trial >= numtri
72 fprintf(1,'Failed to generate a point in %d trials\n',numtri);
73 success = 0;
74end
75
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize.m
new file mode 100755
index 0000000..b03616f
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize.m
@@ -0,0 +1,9 @@
1function t1a = colize(t1,I1);
2
3t1a = t1;
4
5t1a = reshape(t1a,size(t1,1)*size(t1,2),1,size(t1,3));
6t1a = squeeze(t1a);
7t1a = t1a';
8
9%I1a = 2*I1(:)';I1a = I1a-mean(I1a(:));t1a = [I1a;t1a];
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_hist.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_hist.m
new file mode 100755
index 0000000..9c7b68e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_hist.m
@@ -0,0 +1,29 @@
1function fh = colize_hist(fv,hb)
2% (hb = sigs,bin_mins,bin_maxs,nbins)
3%
4% fv = [nfeature x npoints];
5% fh = [nfeatures*nbins x npoints];
6%
7% take a feature matrix, and turn it into histogram bin feature matrix
8%
9%
10
11[nf,np] = size(fv);
12
13nbins = [0,hb.nbins];
14disp(sprintf('need matrix of %d x %d ',sum(nbins),np));
15
16fh = zeros(sum(nbins),np);
17
18for k=1:nf,
19 bin_min = hb.bmins(k);
20 bin_max = hb.bmaxs(k);
21 nbin = nbins(k+1);
22 sig = hb.sigs(k);
23 fprintf('.');
24 b = binize(fv(k,:),sig,bin_min,bin_max,nbin);
25 fh(sum(nbins(1:k))+1:sum(nbins(1:k+1)),:) = b;
26
27end
28
29fprintf('\n');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_histnb_s.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_histnb_s.m
new file mode 100755
index 0000000..61c81ca
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_histnb_s.m
@@ -0,0 +1,47 @@
1function fhs = colize_histnb_s(fh,Is,nw,hw)
2%
3% fhs = colize_histneigh(fh,fvs,nw)
4%
5%
6
7[tnbins,np] = size(fh);
8
9[nr,nc] = size(Is);
10
11st_sz = 2*hw + 1;
12
13nr_chank = floor(nr/st_sz);
14nc_chank = floor(nc/st_sz);
15
16fhs = zeros(size(fh,1),nr_chank*nc_chank);
17
18idx = 0;
19for k=1+hw:st_sz:nc-hw,
20
21 fprintf('.');
22 sk = max(1,k-nw);
23 ek = min(nc,k+nw);
24
25
26 % for each column,
27 for j=1+hw:st_sz:nr-hw,
28 sj = max(1,j-nw);
29 ej = min(nr,j+nw);
30
31 id = j+(k-1)*nr;
32 idx = idx+1;
33 for li=sj:ej,
34 for lj=sk:ek,
35 idn = li+(lj-1)*nr;
36
37 fhs(:,idx) = fhs(:,idx) + fh(:,idn);
38
39 end
40 end
41 end
42end
43
44fprintf('\n');
45
46
47 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_histnb_sf.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_histnb_sf.m
new file mode 100755
index 0000000..d0d60f9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_histnb_sf.m
@@ -0,0 +1,52 @@
1function fhs = colize_histnb_s(fvs,Is,hb,nw,hw)
2%
3% fhs = colize_histneigh(fvs,Is,hb,nw,hw)
4%
5%
6
7[nf,np] = size(fvs);
8
9[nr,nc] = size(Is);
10
11st_sz = 2*hw + 1;
12
13nr_chank = floor(nr/st_sz);
14nc_chank = floor(nc/st_sz);
15
16tnbins = prod(hb.nbins(1:nf));
17disp(sprintf('allocat memory for %d x %d',tnbins,nr_chank*nc_chank));
18
19fhs = zeros(tnbins,nr_chank*nc_chank);
20
21idx = 0;
22for k=1+hw:st_sz:nc-hw,
23
24 fprintf(',');
25 sk = max(1,k-nw);
26 ek = min(nc,k+nw);
27
28
29 % for each column,
30 for j=1+hw:st_sz:nr-hw,
31 sj = max(1,j-nw);
32 ej = min(nr,j+nw);
33
34 id = j+(k-1)*nr;
35 idx = idx+1;
36
37 %% find idx for the neighboring points
38 lis = [sj:ej]'*ones(1,ek-sk+1);
39 ljs = ones(ej-sj+1,1)*[sk:ek];
40 idns = lis+(ljs-1)*nr;
41
42 fh = colize_joint_hist(fvs(:,idns(:)),hb);
43
44 fhs(:,idx) = sum(fh')';
45
46 end
47end
48
49fprintf('\n');
50
51
52 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_histneighb.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_histneighb.m
new file mode 100755
index 0000000..6189cab
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_histneighb.m
@@ -0,0 +1,37 @@
1function fhs = colize_histneigh(fh,Is,nw)
2%
3% fhs = colize_histneigh(fh,fvs,nw)
4%
5%
6
7[tnbins,np] = size(fh);
8
9[nr,nc] = size(Is);
10
11fhs = zeros(size(fh));
12
13for j=1:nr,
14 fprintf('.');
15 sj = max(1,j-nw);
16 ej = min(nr,j+nw);
17
18 % for each column,
19 for k=1:nc,
20 sk = max(1,k-nw);
21 ek = min(nc,k+nw);
22
23 id = j+(k-1)*nr;
24
25 for li=sj:ej,
26 for lj=sk:ek,
27 idn = li+(lj-1)*nr;
28
29 fhs(:,id) = fhs(:,id) + fh(:,idn);
30 end
31 end
32 end
33end
34fprintf('\n');
35
36
37 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_joint_hist.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_joint_hist.m
new file mode 100755
index 0000000..e7844d8
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_joint_hist.m
@@ -0,0 +1,41 @@
1function fh = colize_joint_hist(fv,hb)
2% (hb = sigs,bin_mins,bin_maxs,nbins)
3%
4% take which histogram value and turn it into histogram bin
5%
6
7
8 [nf,np] = size(fv);
9
10 nbins = [0,hb.nbins];
11 %disp(sprintf('need matrix of %d x %d ',prod(hb.nbins),np));
12
13 fh = zeros(hb.nbins(1),hb.nbins(2),np);
14
15 k=1;
16 bin_min = hb.bmins(k);
17 bin_max = hb.bmaxs(k);
18 nbin = nbins(k+1);
19 sig = hb.sigs(k);
20 %fprintf('.');
21
22 b1 = binize(fv(k,:),sig,bin_min,bin_max,nbin);
23 k=2;
24 bin_min = hb.bmins(k);
25 bin_max = hb.bmaxs(k);
26 nbin = nbins(k+1);
27 sig = hb.sigs(k);
28 %fprintf('.');
29
30 b2 = binize(fv(k,:),sig,bin_min,bin_max,nbin);
31
32
33 for k=1:hb.nbins(1),
34 for j=1:hb.nbins(2),
35 fh(k,j,:) = b1(k,:).*b2(j,:);
36 end
37 end
38
39%fprintf('\n');
40
41fh = reshape(fh,hb.nbins(1)*hb.nbins(2),np);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_test.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_test.m
new file mode 100755
index 0000000..a9135cc
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/colize_test.m
@@ -0,0 +1,19 @@
1function t1a = colize(t1,I1);
2
3if 1,
4t1a = t1;
5%t1a = 1.2*half_sigmoid(t1,0.3,0.1);;
6t1a = reshape(t1a,size(t1,1)*size(t1,2),1,size(t1,3));
7t1a = squeeze(t1a);
8t1a = t1a';
9
10%I1a = I1(:)';I1a = I1a-mean(I1a(:));t1a = [I1a;t1a];
11
12else
13 mask = t1>=0;
14 t1a = abs(t1);
15 t1a = 0.5-t1a;
16 t1a = reshape(t1a,size(t1,1)*size(t1,2),1,size(t1,3));
17 t1a = squeeze(t1a);
18 t1a = t1a';
19end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compact.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compact.m
new file mode 100755
index 0000000..9863e0f
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compact.m
@@ -0,0 +1,36 @@
1function I = compact(img,ws)
2
3
4%ws = 2*hws+1;
5
6[sy,sx] = size(img);
7
8rem_x = rem(sx,ws);
9rem_y = rem(sy,ws);
10
11fix_x = ceil(sx/ws);
12fix_y = ceil(sy/ws);
13
14fprintf('nr = %d, nc = %d\n',fix_y,fix_x);
15
16%startx= 1 + floor(rem_x*0.5)+hws;
17%starty= 1 + floor(rem_y*0.5)+hws;
18
19I = zeros(fix_y,fix_x);
20
21yid = 0;
22for j=1:ws:sy,
23 xid = 0;
24 yid = yid +1;
25 fprintf('.');
26 for k=1:ws:sx,
27 xid = xid+1;
28 %I(yid,xid) = median(median(img(j-hws:j+hws,k-hws:k+hws)));
29 %I(yid,xid) = sum(sum(img(j-hws:j+hws,k-hws:k+hws)));
30 v = img(j:min(sy,j+ws-1),k:min(sx,k+ws-1));
31 %I(yid,xid) = median(reshape(v,prod(size(v)),1));
32 I(yid,xid) = median(median(v));
33 end
34end
35fprintf('\n');
36 \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_J.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_J.m
new file mode 100755
index 0000000..99b8b69
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_J.m
@@ -0,0 +1,31 @@
1function J = compute_J(A,I,size_x,size_y,D)
2%% function J = compute_J(A,I,size_x,size_y,D)
3%
4
5[center_x,center_y] = find_center(size_x,size_y);
6
7tmp = ones(size_y,1)*[1:size_x];
8index(:,1) = reshape(tmp,size_x*size_y,1)-center_x*ones(size_x*size_y,1);
9index(:,2) = reshape(tmp',size_x*size_y,1)-center_y*ones(size_x*size_y,1);
10
11position_new = A*index'+ [D(1),0;0,D(2)]*ones(2,size_x*size_y);
12position_new = round(position_new +...
13 [center_x,0;0,center_y]*ones(2,size_x*size_y));
14% we have to deal with out of boundary ones
15%
16bad_ones(1,:) = position_new(1,:)<1 | position_new(1,:)>size_x;
17bad_ones(2,:) = position_new(2,:)<1 | position_new(2,:)>size_y;
18bad = max([bad_ones(1,:);bad_ones(2,:)]);
19good = ~bad;
20% if new index is out of boundary, then set it to (0,0)
21position_new(1,:) = position_new(1,:).*good;
22position_new(2,:) = position_new(2,:).*good;
23
24new_index = size_y*(position_new(1,:)-ones(1,size_x*size_y))+...
25 position_new(2,:);
26new_index = max([new_index;ones(1,size_x*size_y)]);
27J = I(new_index);
28% set the "out of boundary" to zero.
29J = J.*good;
30J = reshape(J',size_y,size_x);
31
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_Lf.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_Lf.m
new file mode 100755
index 0000000..7cda523
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_Lf.m
@@ -0,0 +1,35 @@
1function dists = compute_Lf(F,cts,wz,nr,nc)
2
3gap = 2*wz(1)+1;
4hw = wz(1);
5
6nr = nr+1;
7nc = nc+1;
8
9dists = zeros(size(cts,1),nr*nc);
10for ctj = 1:size(cts,1),
11 t1 = cutout(F,cts(ctj,:),wz);
12
13 rid = 1;
14 fprintf('>');
15
16 for ri = hw+1:gap:size(F,1)-hw,
17 %fprintf('[%d]',ri);
18 cid = 1;
19 for ci = hw+1:gap:size(F,2)-hw,
20 %fprintf('(%d)',ci);
21 t2 = cutout(F,[ci,ri],wz);
22
23 dist = abs(mean(t1(:))-mean(t2(:)));
24
25 dists(ctj,rid+cid*nr) = max(dist,dists(ctj,rid+cid*nr));
26
27 cid = cid+1;
28 end
29 rid = rid+1;
30 end
31
32 %fprintf('\n');
33
34end
35
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_corr.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_corr.m
new file mode 100755
index 0000000..92f9da4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_corr.m
@@ -0,0 +1,10 @@
1function a = compute_corr(f,g)
2%
3% compute the circular correlation of f and g
4% at points around zero
5%
6%
7
8ff = interp(f,4);
9gg = interp(g,4);
10
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_diff.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_diff.m
new file mode 100755
index 0000000..72bfe54
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_diff.m
@@ -0,0 +1,36 @@
1function B = compute_diff(Ja,Jfa,hw,hnb);
2%
3% B = compute_diff(Ja,Jfa,hw,hnb)
4%
5%
6
7figure(1);%imagesc(Ja);axis('image');
8cs = round(ginput(1));
9
10B = zeros(2*hnb+1,2*hnb+1);
11
12scales = [1:5];filter_ids = [1:7];
13Jc = get_win(Ja,cs,[hw,hw]);
14Jfc= get_win5(Jfa,cs,[hw,hw]);
15H2c = hist2d(Jc,Jfc,scales,filter_ids);
16
17figure(2);imagesc(Ja);axis('image');colormap(gray);
18hold on; plot(cs(1),cs(2),'g*');
19
20
21for ii=-hnb:hnb,
22 for jj=-hnb:hnb,
23 J1 = get_win(Ja,cs+4*[jj,ii],[hw,hw]);
24 Jf1= get_win5(Jfa,cs+4*[jj,ii],[hw,hw]);
25 figure(2);plot(cs(1)+4*jj,cs(2)+4*ii,'ro');drawnow;
26 %figure(3);imagesc(J1);drawnow;
27
28 H2 = hist2d(J1,Jf1,scales,filter_ids);
29 d = hist_diff(H2/prod(size(Jc)),H2c/prod(size(Jc)));
30 disp(sprintf('d=%f',d));
31 B(ii+hnb+1,jj+hnb+1) = d;
32
33 end
34end
35
36figure(2);hold off;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_diff_patch.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_diff_patch.m
new file mode 100755
index 0000000..260b93a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_diff_patch.m
@@ -0,0 +1,34 @@
1function a = compute_diff_patch(gx1,gy1,gx2,gy2,I1,I2)
2%
3% a = compute_diff_patch(gx1,gy1,gx2,gy2,I1,I2)
4%
5%
6
7%ws = size(gx1);
8%mask = smooth(ones(ws),2*max(ws));
9%mask = mask/sum(sum(mask));
10
11%mag1= sum(sum(sqrt((mask.*gx1).^2 + (mask.*gy1).^2)));
12%mag2= sum(sum(sqrt((mask.*gx2).^2 + (mask.*gy2).^2)));
13
14mag1= sum(sum(sqrt((gx1).^2 + (gy1).^2)));
15mag2= sum(sum(sqrt((gx2).^2 + (gy2).^2)));
16
17P_tx1 = sigmoid(mag1,400,80);
18P_tx2 = sigmoid(mag2,400,80);
19
20diff_I = mean(reshape(I1,prod(size(I1)),1))-...
21 mean(reshape(I2,prod(size(I2)),1));
22diff_I = abs(diff_I);
23
24s_g1 = [sum(sum(abs(gx1))),sum(sum(abs(gy1)))];
25s_g2 = [sum(sum(abs(gx2))),sum(sum(abs(gy2)))];
26
27s_g1 = s_g1/(norm(s_g1));
28s_g2 = s_g2/(norm(s_g2));
29
30a = (1-P_tx1)*(1-P_tx2)*exp(-diff_I/0.1) +...
31 P_tx1*P_tx2*(dot(s_g1,s_g2));
32
33
34
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_diff_patch2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_diff_patch2.m
new file mode 100755
index 0000000..9d2b528
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_diff_patch2.m
@@ -0,0 +1,45 @@
1function [a,phi1,phi2] = compute_diff_patch(gx1,gy1,gx2,gy2,I1,I2)
2%
3% a = compute_diff_patch(gx1,gy1,gx2,gy2,I1,I2)
4%
5%
6
7%ws = size(gx1);
8%mask = smooth(ones(ws),2*max(ws));
9%mask = mask/sum(sum(mask));
10
11%mag1= sum(sum(sqrt((mask.*gx1).^2 + (mask.*gy1).^2)));
12%mag2= sum(sum(sqrt((mask.*gx2).^2 + (mask.*gy2).^2)));
13
14mag1= sum(sum(sqrt((gx1).^2 + (gy1).^2)))/prod(size(gx1));
15mag2= sum(sum(sqrt((gx2).^2 + (gy2).^2)))/prod(size(gx1));
16
17P_tx1 = sigmoid(mag1,2,0.5);
18P_tx2 = sigmoid(mag2,2,0.5);
19
20diff_I = mean(reshape(I1,prod(size(I1)),1))-...
21 mean(reshape(I2,prod(size(I2)),1));
22diff_I = abs(diff_I);
23
24[l1,l2,phi1] = mwis(gx1,gy1);
25[k1,k2,phi2] = mwis(gx2,gy2);
26
27ratio1 = min([l1,l2])/max([l1,l2]);
28ratio2 = min([k1,k2])/max([k1,k2]);
29
30r1 = 1-sigmoid(ratio1,0.35,0.05);
31r2 = 1-sigmoid(ratio2,0.35,0.05);
32
33s1 = [cos(phi1),sin(phi1)];
34s2 = [cos(phi2),sin(phi2)];
35
36angle = acos(abs(dot(s1,s2)))*180/pi;
37
38a1 = (1-P_tx1*P_tx2)*exp(-diff_I/0.1);
39a2 = P_tx1*P_tx2*(r1*r2*(90-angle)/90);
40a3 = P_tx1*P_tx2*((1-r1*r2)*(1-sigmoid(abs(r1-r2),0.3,0.04)));
41
42a = a1+a2+a3;
43
44
45
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_filter.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_filter.m
new file mode 100755
index 0000000..04e78e1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_filter.m
@@ -0,0 +1,84 @@
1function [filter_output,filters] = compute_filter(I,sig,r,sz);
2%
3%
4%
5
6ori_incr=180/num_ori;
7ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
8
9as = ori_offset:ori_incr:180+ori_offset-ori_incr;
10
11filter_output = [];
12filters = [];
13
14wsz = 2*round(sz) + 1;
15M1 = wsz(1);M2 = wsz(2);
16
17%%%%% prepare FFT of image %%%%%%%%%%%%%
18
19[N1,N2]=size(I);
20tmp=zeros(size(I)+[M1-1 M2-1]);
21tmp(1:N1,1:N2)=I;
22IF=fft2(tmp);
23
24
25%%%%%%%%%% filtering stage %%%%%%%%%%%
26if size(sig,2)== 1,
27
28 for j = 1:length(as),
29 fprintf('.');
30 angle = as(j);
31
32 g = mdoog2(sig,r,angle,round(sz));
33
34 g = g - mean(reshape(g,prod(size(g)),1));
35
36 g = g/sum(sum(abs(g)));
37
38 filters(:,:,j) = g;
39
40 gF = fft2(g,N1+M1-1,N2+M2-1);
41 IgF = If.*gF;
42 Ig = real(ifft2(IgF));
43 Ig = Ig(ceil((M1+1)/2):ceil((M1+1)/2)+N1-1,ceil((M2+1)/2):ceil((M2+1)/2)+N2-1);
44
45 %c = conv2(I,g,'valid');
46
47 filter_output(:,:,j) = Ig;
48 end
49else
50
51 % there are multiple scales
52 sigs = sig;
53 szs = sz;
54 for k = 1:size(sigs,2),
55 sig = sigs(k);
56 sz = szs(k);
57 fprintf('%d',k);
58 for j = 1:length(as),
59 fprintf('.');
60 angle = as(j);
61
62 g = mdoog2(sig,r,angle,round(sz));
63 g = g - mean(reshape(g,prod(size(g)),1));
64 g = g/sum(sum(abs(g)));
65
66 gF = fft2(g,N1+M1-1,N2+M2-1);
67 IgF = If.*gF;
68 Ig = real(ifft2(IgF));
69 Ig = Ig(ceil((M1+1)/2):ceil((M1+1)/2)+N1-1,ceil((M2+1)/2):ceil((M2+1)/2)+N2-1);
70
71 %c = conv2(I,g,'valid');
72 %c = conv2(I,g,'same');
73
74 filter_output(:,:,j,k) = Ig;
75 filters(:,:,j,k) = g;
76 end
77
78
79 end
80
81end
82
83fprintf('\n');
84
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_filter_fft.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_filter_fft.m
new file mode 100755
index 0000000..359c6ba
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/compute_filter_fft.m
@@ -0,0 +1,84 @@
1function [filter_output,filters] = compute_filter_fft(I,sig,r,sz,num_ori);
2%
3%
4%
5
6ori_incr=180/num_ori;
7ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
8
9as = ori_offset:ori_incr:180+ori_offset-ori_incr;
10
11filter_output = [];
12filters = [];
13
14wsz = 2*round(sz(end)) + 1;
15M1 = wsz;M2 = wsz;
16
17%%%%% prepare FFT of image %%%%%%%%%%%%%
18
19[N1,N2]=size(I);
20tmp=zeros(size(I)+[M1-1 M2-1]);
21tmp(1:N1,1:N2)=I;
22IF=fft2(tmp);
23
24
25%%%%%%%%%% filtering stage %%%%%%%%%%%
26if size(sig,2)== 1,
27
28 for j = 1:length(as),
29 fprintf('.');
30 angle = as(j);
31
32 g = mdoog2(sig,r,angle,round(sz));
33
34 g = g - mean(reshape(g,prod(size(g)),1));
35
36 g = g/sum(sum(abs(g)));
37
38 filters(:,:,j) = g;
39
40 gF = fft2(g,N1+M1-1,N2+M2-1);
41 IgF = IF.*gF;
42 Ig = real(ifft2(IgF));
43 Ig = Ig(ceil((M1+1)/2):ceil((M1+1)/2)+N1-1,ceil((M2+1)/2):ceil((M2+1)/2)+N2-1);
44
45 %c = conv2(I,g,'valid');
46
47 filter_output(:,:,j) = Ig;
48 end
49else
50
51 % there are multiple scales
52 sigs = sig;
53 szs = sz;
54 for k = 1:size(sigs,2),
55 sig = sigs(k);
56 sz = szs(end);
57 fprintf('%d',k);
58 for j = 1:length(as),
59 fprintf('.');
60 angle = as(j);
61
62 g = mdoog2(sig,r,angle,round(sz));
63 g = g - mean(reshape(g,prod(size(g)),1));
64 g = g/sum(sum(abs(g)));
65
66 gF = fft2(g,N1+M1-1,N2+M2-1);
67 IgF = IF.*gF;
68 Ig = real(ifft2(IgF));
69 Ig = Ig(ceil((M1+1)/2):ceil((M1+1)/2)+N1-1,ceil((M2+1)/2):ceil((M2+1)/2)+N2-1);
70
71 %c = conv2(I,g,'valid');
72 %c = conv2(I,g,'same');
73
74 filter_output(:,:,j,k) = Ig;
75 filters(:,:,j,k) = g;
76 end
77
78
79 end
80
81end
82
83fprintf('\n');
84
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/conv_trim.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/conv_trim.m
new file mode 100755
index 0000000..30d16a9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/conv_trim.m
@@ -0,0 +1,6 @@
1% trims an array to remove meaningless pixels after a convolution with
2% an r * c window
3
4function[B] = conv_trim(A, r, c)
5
6B = A(r+1:size(A,1)-r, c+1:size(A,2)-c);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/corr_hist.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/corr_hist.m
new file mode 100755
index 0000000..c538dc1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/corr_hist.m
@@ -0,0 +1,9 @@
1function alpha = corr_hist(hists)
2
3[y,x,v] = find(hists);
4mx = sum(x.*v)/sum(v);
5my = sum(y.*v)/sum(v);
6
7top = sum( (x-mx).*(y-my).*v);
8bottom = sqrt(sum( ((x-mx).^2).*v))*sqrt(sum( ((y-my).^2).*v));
9alpha = top/bottom;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/crop_im_fil.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/crop_im_fil.m
new file mode 100755
index 0000000..5472171
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/crop_im_fil.m
@@ -0,0 +1,11 @@
1function [J,f,rect] = crop_im_fil(Ja,Jfa,fig_id)
2%
3%
4
5figure(fig_id);
6imagesc(Ja);axis('image');
7
8[J,rect] = imcrop;rect = round(rect);
9J = Ja(rect(2):rect(2)+rect(4),rect(1):rect(1)+rect(3));
10f = Jfa(rect(2):rect(2)+rect(4),rect(1):rect(1)+rect(3),:,:);
11
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/cutoff.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/cutoff.m
new file mode 100755
index 0000000..58c6b94
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/cutoff.m
@@ -0,0 +1,13 @@
1function I = cutoff(I,wc)
2%
3%
4
5nr = size(I,1);
6nc = size(I,2);
7
8if ndims(I) == 3,
9I = I(wc+1:nr-wc,wc+1:nc-wc,:,:);
10else
11I = I(wc+1:nr-wc,wc+1:nc-wc,:,:);
12end
13
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/cutout.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/cutout.m
new file mode 100755
index 0000000..b80f27b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/cutout.m
@@ -0,0 +1,3 @@
1function a = cutout(I,ct,wz);
2
3a = I(ct(2)-wz(2):ct(2)+wz(2),ct(1)-wz(1):ct(1)+wz(1),:);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_Imask.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_Imask.m
new file mode 100755
index 0000000..dbd7fdb
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_Imask.m
@@ -0,0 +1,20 @@
1function Imasks = disp_Imask(Is,nr,nc,hw,masks)
2%
3% Imasks = disp_Imask(Is,nr,nc,hw,masks)
4%
5
6%hw = 2; %nr = 43;nc=68;
7gap = 2*hw+1;
8
9x = [1:nc*gap];
10y = [1:nr*gap];
11
12xs = (x-hw-1)/gap + 1;ys = (y-hw-1)/gap + 1;
13
14for gid=1:size(masks,3),
15 tmp = interp2(reshape(masks(:,:,gid),nr,nc),xs,ys');
16
17 Imasks(:,:,gid) = (tmp>0.52).* ((Is).^0.8);
18 subplot(3,3,gid);
19 im(Imasks(:,:,gid));
20end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_diff.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_diff.m
new file mode 100755
index 0000000..090c273
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_diff.m
@@ -0,0 +1,37 @@
1function disp_diff(H1,H2)
2%
3% disp_diff(H1,H2)
4%
5
6ns = size(H1,3);
7nf = size(H1,4);
8
9H1 = H1/49;
10H2 = H2/49;
11
12
13sI= [1,0,1];sI = exp(-sI);
14sI = sI/sum(sI);
15
16for j = 1:ns,
17 for k = 1:nf,
18 h1 = H1(:,:,j,k);
19 h2 = H2(:,:,j,k);
20
21 subplot(ns,nf,(j-1)*nf+k);
22 h1s = conv2(conv2(h1,sI','same'),sI,'same');
23 h2s = conv2(conv2(h2,sI','same'),sI,'same');
24
25 [is,js] = find( (h1>0) | (h2>0));
26 ids = (js-1)*size(h1,1) + is;
27
28 hdiff = abs(h1s-h2s).*((h1>0) | (h2>0));
29
30 xdiff = ((h1(ids)-h2(ids)).*(h1(ids)-h2(ids)))./(h1(ids)+h2(ids));
31
32 xdiffs = ((h1s(ids)-h2s(ids)).*(h1s(ids)-h2s(ids)))./(h1s(ids)+h2s(ids));
33 imagesc(hdiff);colorbar;axis('off');
34% title(sprintf('%3.3f, %3.3f',sum(sum(hdiff))/49,sum(sum(abs(h1-h2)))/49));drawnow;
35 title(sprintf('%3.3f, %3.3f',sum(xdiff),sum(xdiffs)));drawnow
36 end
37end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_evresult.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_evresult.m
new file mode 100755
index 0000000..e07556a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_evresult.m
@@ -0,0 +1,435 @@
1%fn = '134035';
2%fn = '130040';
3%fn = '334074';
4fn = '130065';
5
6%basedir = 'plaatje_data/olddata/';
7% basedir = 'data/'; nr = 49;nc =30;
8
9basedir = 'plaatje_data/';
10
11fname = sprintf('%s%s_eigvec.pfm',basedir,fn);
12eigv = readpfm(fname);
13fname = sprintf('%s%s_eigval.pfm',basedir,fn);
14eigval = readpfm(fname);
15
16fname = sprintf('%s%s_ncutvec.pfm',basedir,fn);
17ncutv = readpfm(fname);
18fname = sprintf('%s%s_ncutval.pfm',basedir,fn);
19ncutval = readpfm(fname);
20
21%fname = sprintf('images/130039.pgm');
22fname = sprintf('images/%s.pgm',fn);
23I = readpgm(fname);
24cutsz = 20; I = cutoff(I,cutsz);
25figure(3);im(I);colormap(gray);
26
27new = 0;
28
29if ~new,
30
31 %nr = 49;nc = 30;
32 nr = 30;nc = 49;
33
34%nr = 68;nc = 43;
35%nc = 68;nr = 43;
36
37else
38
39 fn1 = fn;
40 fn = 'test';
41 fname = sprintf('plaatje_data/%s_gcs.pfm',fn);
42 gcs = readpfm(fname);
43
44 fname = sprintf('plaatje_data/%s_gce.pfm',fn);
45 gce = readpfm(fname);
46
47 fname = sprintf('plaatje_data/%s_grs.pfm',fn);
48 grs = readpfm(fname);
49
50 fname = sprintf('plaatje_data/%s_gre.pfm',fn);
51 gre = readpfm(fname);
52
53 nr = max(gre(:))+1;
54 nc = max(gce(:))+1;
55
56 fn = fn1;
57
58end
59
60figure(6);
61for j=1:8,
62 subplot(3,3,j);
63 im(reshape(ncutv(:,j+1),nr,nc));colorbar
64 title(num2str(ncutval(j+1,1)));
65end
66%cm = sprintf('print -dps ncut_%s',fn);disp(cm);eval(cm);
67subplot(3,3,9);im(I);axis('off');
68
69figure(7);clf
70for j=1:12,
71 subplot(3,4,j);
72 im(reshape(eigv(:,j),nr,nc));colorbar;%axis('off');
73 title(sprintf('%3.4e',eigval(j,1)));
74end
75%cm = sprintf('print -dps eig_%s',fn);disp(cm);eval(cm);
76
77%%%%%%%%%%%
78
79ev = eigval(:,1);
80figure(5);hold off;clf;subplot(1,2,1);
81%semilogy((ev(1:end-1) - ev(2:end))./ev(1:end-1),'x-');grid on;
82plot((ev(1:end-1) - ev(2:end))./ev(1:end-1),'x-');grid on;
83%semilogy(0.01*ones(size(ev(2:end-1))),'r-');semilogy(0.005*ones(size(ev(2:end-1))),'r-');semilogy(0.0025*ones(size(ev(2:end-1))),'r-');grid on;hold off;
84subplot(1,2,2);
85%semilogy(ev(1:end-1)-ev(2:end),'p-');grid on;
86semilogy((ev(1:end-1) - ev(2:end))/ev(1),'x-');grid on;
87
88
89if 0,
90
91fname = sprintf('plaatje_data/ncutval_%s.pfm',fn);
92nval = readpfm(fname);
93fname = sprintf('plaatje_data/ncutvec_%s.pfm',fn);
94nv = readpfm(fname);
95
96figure(2);
97nvv = size(nv,2);
98for j=1:min(5,nvv-1),
99 subplot(1,min(5,nvv-1),j);
100 ims(nv(:,j+1),nr,nc);
101end
102
103
104%figure(5);
105%subplot(2,2,1);plot(eigval(:,1),'x-');
106
107
108if 0,
109
110fname = 130039;
111for j=0:20,
112 cm = sprintf('!cp plaatje_data/%d_%d.pfm plaatje_data/test_%d.pfm ',fname,j,j);
113 disp(cm);eval(cm);
114end
115
116%%%%%%%%
117fnout = 'test';fn_t = '334003';
118cm = sprintf('!cp plaatje_data/%s_eigval.pfm %s_eigval.pfm',fnout,fn_t);
119disp(cm);eval(cm);
120cm = sprintf('!cp plaatje_data/%s_eigvec.pfm %s_eigvec.pfm',fnout,fn_t);
121disp(cm);eval(cm);
122cm = sprintf('!cp plaatje_data/%s_ncutvec.pfm %s_ncutvec.pfm',fnout,fn_t);
123disp(cm);eval(cm);
124cm = sprintf('!cp plaatje_data/%s_ncutval.pfm %s_ncutval.pfm',fnout,fn_t);
125disp(cm);eval(cm);
126
127
128
129
130end
131
132disp_flag = 0;
133if disp_flag,
134 [I1,bnr,bnc] = proj_back_id(ncutv(:,2),gcs,gce,grs,gre);
135 imvs(I,I1>0.002,bnr,bnc);
136end
137
138if 0,
139
140 nv = 3;
141 A = eigv(:,1:nv)*eigv(:,1:nv)';
142 [v,d] = ncut(abs(A),min(nv,5));
143
144 figure(3);
145 for j=1:min(nv,5),
146 subplot(2,2,j);
147 ims(v(:,j),nr,nc);
148 end
149
150end
151
152%%%%%%%%
153
154figure(4);%im(I);colorbar;
155hw = 3;st_sz = 2*hw+1;
156ct = round(ginput(1));
157ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
158ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
159
160idx = (ct_chank(:,1)-1)*nr + ct_chank(:,2);
161
162figure(5);im(abs(reshape(A(idx,:),nr,nc)));%colorbar;
163
164
165
166 %%%%%
167
168 fname = 'test2';
169 fn = sprintf('plaatje_data/ncut_%s.pfm',fname);
170 ncutv1 = readpfm(fn);
171 nr = 30; nc=49;
172
173 figure(1);
174 for j=1:min(4,size(ncutv1,2)),
175 subplot(2,2,j);
176 ims(ncutv1(:,j+1),nr,nc);
177 end
178
179
180
181%%%%%%%%%%
182
183 id = 0;
184 fn = sprintf('plaatje_data/test_Aa%d.pfm',id);
185 disp(sprintf('A = readpfm(%s);',fn));
186 A = readpfm(fn);
187
188 cm = sprintf('[v%d,d%d] = eigs(A,12);',id,id);
189 disp(cm);eval(cm);
190
191 writepfm('test_eigv0.pfm',v0);
192 writepfm('test_eigva0.pfm',diag(d0));
193
194
195
196
197vs = zeros(size(v1,1),size(v1,2),6);
198ds = zeros(length(d1),6);
199
200for j=0:5,
201 cm = sprintf('vs(:,:,%d) = v%d;',j+1,j);
202 disp(cm);eval(cm);
203 cm = sprintf('d = diag(d%d);',j);
204 disp(cm);eval(cm);
205 cm = sprintf('ds(:,%d) = d(:);',j+1);
206 disp(cm);eval(cm);
207
208
209end
210
211%save evsum vs ds
212
213figure(1);nr = 49;nc=30;evid = 3;
214for j=1:12,subplot(3,4,j);ims(vs(:,j,evid),nr,nc);end
215
216I = readpgm('images/334039.pgm');I = cutoff(I,20);
217
218As = zeros(6,nr*nc);
219
220figure(3);%im(I);colormap(gray);
221hw = 3;st_sz = 2*hw+1;
222ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
223idx = (ct_chank(:,1)-1)*nr + ct_chank(:,2);
224
225figure(5);
226
227figure(4);nvs = [6,9,12,12,12,12];
228for evid = 1:5,As(evid,:) = squeeze(vs(idx,1:nvs(evid),evid))*squeeze(vs(:,1:nvs(evid),evid))';end
229for evid =1:5,subplot(2,3,evid);im(abs(reshape(As(evid,:),nr,nc)));colorbar;end
230subplot(2,3,6);ims(sum(abs(As)),nr,nc);colorbar
231
232%%%%%%%%%
233
234%%%%%% eig of the As over all scales %%
235
236A = zeros(nr*nc,nr*nc);
237
238for evid=1:5, disp(evid);
239 A = A + abs(squeeze(vs(:,1:nvs(evid),evid))*squeeze(vs(:,1:nvs(evid),evid))');
240end
241
242[v,d] = eigs(A,12);
243figure(1); for j=1:12, subplot(3,4,j);ims(v(:,j),nr,nc);end
244
245[vn,dn] = ncut_b(A,12);
246figure(3); for j=1:12, subplot(3,4,j);ims(-vn(:,j),nr,nc);end
247
248nv = 6;
249A = abs(eigv(:,1:nv)*eigv(:,1:nv)');
250[v,d] = ncut_b(A,nv+1);
251figure(1);
252nv = 4;
253for j=1:nv,subplot(2,nv,j);ims(v(:,j+1),nr,nc);title(sprintf('%3.3e',d(j+1)));end
254
255for j=1:nv,subplot(2,nv,j+nv);ims(eigv(:,j),nr,nc);title(sprintf('%3.3e',eigval(j,1)));end
256
257%%%%%%%%%%%%%
258
259while 1,
260figure(3);%im(I);colormap(gray);
261hw = 3;st_sz = 2*hw+1;
262ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
263idx = (ct_chank(:,1)-1)*nr + ct_chank(:,2);
264
265figure(1);
266ims(exp(-(A(idx,:))/(0.02^2)),nr,nc);colorbar
267end
268
269
270
271%%%%%%%%%%%%%%
272
273figure(3);
274hw = 3;st_sz = 2*hw+1;
275np = 20;
276ct = round(ginput(np));
277ct_chank =[];
278ct_chank(:,1) = round((ct(:,1)-hw-1)/st_sz) + 1;
279ct_chank(:,2) = round((ct(:,2)-hw-1)/st_sz) + 1;
280idx = (ct_chank(:,1)-1)*nr + ct_chank(:,2);
281
282%As = readpfm_id('plaatje_data/130040_AX.pfm',idx,2924);
283As = readpfm_idf('plaatje_data/tmp/134035_AX3.pfm',idx,nr*nc);
284
285%save dist_data2 As idx ct_chank ct hw nr nc eigv eigval
286
287%load dist_data1a
288
289set(gcf,'DefaultLineLinewidth',5);
290
291minA = min(min(As));
292figure(1);clf; hold off;
293set(gcf,'DefaultLineLinewidth',2);
294for id = 1:np,
295subplot(4,5,id);
296%image(2.8e-2*((-minA)+reshape(As(id,:),nr,nc)));axis('image');axis('off');hold on
297ims(-As(id,:),nr,nc);axis('off');hold on
298plot(ct_chank(id,1)+1,ct_chank(id,2)+1,'rx');hold off;
299end
300
301figure(1);clf;hold off;
302nvv = 6
303set(gcf,'DefaultLineLinewidth',1);
304for id=1:np,
305 At = abs(eigv(idx(id),1:nvv)*eigv(:,1:nvv)');
306 subplot(4,5,id);
307 %image(2.5e4*reshape(At,nr,nc));axis('image');axis('off');hold on
308 ims(At,nr,nc);axis('off');hold on;
309 plot(ct_chank(id,1)+1,ct_chank(id,2)+1,'rx');hold off;
310end
311
312
313print_flag =0;
314if print_flag,
315 fn = '130040';
316
317 figure(4);clf;
318 colormap(gray);
319 set(gcf,'DefaultLineLinewidth',7);
320
321 for id =1:np,
322 %image(2.8e-2*((-minA)+reshape(As(id,:),nr,nc)));axis('image');axis('off');hold on
323 ims(-As(id,:),nr,nc);axis('off');
324 hold on;plot(ct_chank(id,1)+1,ct_chank(id,2)+1,'rp');hold off;
325 cm = sprintf('print -deps dist_x1_%s_%d',fn,id);
326 disp(cm);eval(cm);
327 end
328
329 nvv = 5;
330 set(gcf,'DefaultLineLinewidth',7);
331 figure(4);colormap(gray);
332 for id=1:np,
333 At = abs(eigv(idx(id),1:nvv)*eigv(:,1:nvv)');
334 %image(1.5e4*reshape(At,nr,nc));axis('image');axis('off');%hold on
335 ims(At,nr,nc);axis('off');%hold on;
336 %plot(ct_chank(id,1)+1,ct_chank(id,2)+1,'rp');hold off;
337 cm = sprintf('print -deps dist_d_%s_%d',fn,id);
338 disp(cm);eval(cm);
339 end
340
341 % print eigvects
342 for j=1:size(eigv,2),
343 ims(eigv(:,j),nr,nc);axis('off');
344 cm = sprintf('print -deps eigv_%s_%d',fn,j);
345 disp(cm);eval(cm);
346 end
347
348 for j=1:size(ncutv,2),
349 ims(ncutv(:,j),nr,nc);axis('off');
350 cm = sprintf('print -deps ncutv_%s_%d',fn,j);
351 disp(cm);eval(cm);
352 end
353
354
355end
356
357basedir ='plaatje_data/newdata/';
358fname = sprintf('%s%s_eigvec.pfm',basedir,fn);
359eigv = readpfm(fname);
360
361ix = 1;
362figure(5);colormap(gray);clf
363for j=1:7,
364 for k=[2,3,4,6,9,12];
365 subplot(7,6,ix);
366 At = abs(eigv(idx(j),1:k)*eigv(:,1:k)');
367 ims(At,nr,nc);axis('off');%colorbar;
368 if (k==2),
369 hold on; plot(ct_chank(j,1),ct_chank(j,2),'rp');hold off;
370 title(num2str(j));
371 end
372 ix = ix+1;
373 end
374end
375
376figure(4);clf;colormap(gray);
377set(gcf,'DefaultLineLinewidth',7);
378for j=1:20,
379 for k=[2,3,4,6,9,12];
380
381 At = abs(eigv(idx(j),1:k)*eigv(:,1:k)');
382 ims(At,nr,nc);axis('off');%colorbar;
383 if (k==2),
384 hold on; plot(ct_chank(j,1),ct_chank(j,2),'rp');hold off;
385 end
386
387 cm = sprintf('print -deps dist_scale_65_%d_%d',j,k);
388 disp(cm);eval(cm);
389
390 end
391end
392
393base_dir = 'plaatje_data/';
394
395% cts are the centers,
396
397wz = [hw,hw];
398gap = 2*hw+1;
399dist = zeros(size(cts,1),(nr+1)*(nc+1));
400
401for j=1:1:24,
402 fn = sprintf('%s134035_%d.pfm',base_dir,j);
403 disp(fn);
404 F = readpfm(fn);
405
406 dists = compute_Lf(F,cts,wz,nr,nc);
407 dist = max(dists,dist);
408
409end
410
411
412figure(4);clf;colormap(gray);
413set(gcf,'DefaultLineLinewidth',7);
414
415ids = [8,1,12,5,10,15];
416
417for j=1:6,
418
419 d = reshape(dist(j,:),nr+1,nc+1);
420 d = d(1:end-1,2:end);
421 im(-d);axis('off'); hold on;
422 plot(ct_chank(ids(j),1),ct_chank(ids(j),2),'p');
423 hold off
424
425 cm = sprintf('print -deps dist_lf_65_%d',j);
426 disp(cm);eval(cm);
427
428 pause;
429end
430
431
432
433end
434
435
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_evresult2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_evresult2.m
new file mode 100755
index 0000000..46239ef
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_evresult2.m
@@ -0,0 +1,215 @@
1fn = '130042';
2
3fname = sprintf('data/%s_eigvec.pfm',fn);
4eigv = readpfm(fname);
5fname = sprintf('data/%s_eigval.pfm',fn);
6eigval = readpfm(fname);
7
8fname = sprintf('data/%s_ncutvec.pfm',fn);
9ncutv = readpfm(fname);
10fname = sprintf('data/%s_ncutval.pfm',fn);
11ncutval = readpfm(fname);
12
13%fname = sprintf('images/130038.pgm');
14fname = sprintf('images/%s.pgm',fn);
15I = readpgm(fname);
16cutsz = 20; I = cutoff(I,cutsz);
17figure(3);im(I);colormap(gray);
18
19new = 0;
20
21if new,
22 fn1 = fn;
23 fn = 'test';
24 fname = sprintf('data/%s_gcs.pfm',fn);
25 gcs = readpfm(fname);
26
27 fname = sprintf('data/%s_gce.pfm',fn);
28 gce = readpfm(fname);
29
30 fname = sprintf('data/%s_grs.pfm',fn);
31 grs = readpfm(fname);
32
33 fname = sprintf('data/%s_gre.pfm',fn);
34 gre = readpfm(fname);
35
36 nr = max(gre(:))+1;
37 nc = max(gce(:))+1;
38
39 fn = fn1;
40
41else
42 %nr = 49;nc = 30;
43 nr = 30;nc = 49;
44
45end
46
47figure(6);
48for j=1:8,
49 subplot(3,3,j);
50 im(reshape(ncutv(:,j+1),nr,nc));colorbar
51 title(num2str(ncutval(j+1,1)));
52end
53%cm = sprintf('print -dps ncut_%s',fn);disp(cm);eval(cm);
54subplot(3,3,9);im(I);axis('off');
55
56figure(7);clf
57for j=1:9,
58 subplot(3,3,j);
59 im(reshape(eigv(:,j),nr,nc));colorbar;%axis('off');
60 title(sprintf('%3.4e',eigval(j,1)));
61end
62%cm = sprintf('print -dps eig_%s',fn);disp(cm);eval(cm);
63
64
65
66if 0,
67
68fname = 130042;
69for j=0:30,
70 cm = sprintf('!cp plaatje_data/%d_%d.pfm data/%d_%d.pfm ',fname,j,fname,j);
71 disp(cm);eval(cm);
72end
73
74%%%%%%%%
75fnout = '130042';fn_t = '130042';
76cm = sprintf('!cp data/%s_eigval.pfm %s_eigval.pfm',fnout,fn_t);
77disp(cm);eval(cm);
78cm = sprintf('!cp data/%s_eigvec.pfm %s_eigvec.pfm',fnout,fn_t);
79disp(cm);eval(cm);
80cm = sprintf('!cp data/%s_ncutvec.pfm %s_ncutvec.pfm',fnout,fn_t);
81disp(cm);eval(cm);
82cm = sprintf('!cp data/%s_ncutval.pfm %s_ncutval.pfm',fnout,fn_t);
83disp(cm);eval(cm);
84
85
86
87
88end
89
90disp_flag = 0;
91if disp_flag,
92 [I1,bnr,bnc] = proj_back_id(ncutv(:,2),gcs,gce,grs,gre);
93 imvs(I,I1>0.002,bnr,bnc);
94end
95
96if 0,
97
98 nv = 3;
99 A = eigv(:,1:nv)*eigv(:,1:nv)';
100 [v,d] = ncut(abs(A),min(nv,5));
101
102 figure(3);
103 for j=1:min(nv,5),
104 subplot(2,2,j);
105 ims(v(:,j),nr,nc);
106 end
107
108
109%%%%%%%%
110
111figure(4);%im(I);colorbar;
112hw = 3;st_sz = 2*hw+1;
113ct = round(ginput(1));
114ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
115ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
116
117idx = (ct_chank(:,1)-1)*nr + ct_chank(:,2);
118
119figure(5);im(abs(reshape(A(idx,:),nr,nc)));%colorbar;
120
121
122
123 %%%%%
124
125 fname = 'test2';
126 fn = sprintf('data/ncut_%s.pfm',fname);
127 ncutv1 = readpfm(fn);
128 nr = 30; nc=49;
129
130 figure(1);
131 for j=1:min(4,size(ncutv1,2)),
132 subplot(2,2,j);
133 ims(ncutv1(:,j+1),nr,nc);
134 end
135
136
137
138%%%%%%%%%%
139
140 id = 0;
141 fn = sprintf('data/test_Aa%d.pfm',id);
142 disp(sprintf('A = readpfm(%s);',fn));
143 A = readpfm(fn);
144
145 cm = sprintf('[v%d,d%d] = eigs(A,12);',id,id);
146 disp(cm);eval(cm);
147
148 writepfm('test_eigv0.pfm',v0);
149 writepfm('test_eigva0.pfm',diag(d0));
150
151
152
153
154vs = zeros(size(v1,1),size(v1,2),6);
155ds = zeros(length(d1),6);
156
157for j=0:5,
158 cm = sprintf('vs(:,:,%d) = v%d;',j+1,j);
159 disp(cm);eval(cm);
160 cm = sprintf('d = diag(d%d);',j);
161 disp(cm);eval(cm);
162 cm = sprintf('ds(:,%d) = d(:);',j+1);
163 disp(cm);eval(cm);
164
165
166end
167
168%save evsum vs ds
169
170figure(1);nr = 49;nc=30;evid = 3;
171for j=1:12,subplot(3,4,j);ims(vs(:,j,evid),nr,nc);end
172
173I = readpgm('images/334039.pgm');I = cutoff(I,20);
174
175As = zeros(6,nr*nc);
176
177figure(3);%im(I);colormap(gray);
178hw = 3;st_sz = 2*hw+1;
179ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
180idx = (ct_chank(:,1)-1)*nr + ct_chank(:,2);
181
182figure(5);
183
184figure(4);nvs = [6,9,12,12,12,12];
185for evid = 1:5,As(evid,:) = squeeze(vs(idx,1:nvs(evid),evid))*squeeze(vs(:,1:nvs(evid),evid))';end
186for evid =1:5,subplot(2,3,evid);im(abs(reshape(As(evid,:),nr,nc)));colorbar;end
187subplot(2,3,6);ims(sum(abs(As)),nr,nc);colorbar
188
189%%%%%%%%%
190
191%%%%%% eig of the As over all scales %%
192
193A = zeros(nr*nc,nr*nc);
194
195for evid=1:5, disp(evid);
196 A = A + abs(squeeze(vs(:,1:nvs(evid),evid))*squeeze(vs(:,1:nvs(evid),evid))');
197end
198
199[v,d] = eigs(A,12);
200figure(1); for j=1:12, subplot(3,4,j);ims(v(:,j),nr,nc);end
201
202[vn,dn] = ncut_b(A,12);
203figure(3); for j=1:12, subplot(3,4,j);ims(-vn(:,j),nr,nc);end
204
205nv = 6;
206A = abs(eigv(:,1:nv)*eigv(:,1:nv)');
207[v,d] = ncut_b(A,nv+1);
208figure(1);
209for j=1:nv,subplot(2,nv,j);ims(v(:,j+1),nr,nc);title(sprintf('%3.3e',d(j+1)));end
210
211for j=1:nv,subplot(2,nv,j+nv);ims(eigv(:,j),nr,nc);title(sprintf('%3.3e',eigval(j,1)));end
212
213
214
215end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_evresulthome.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_evresulthome.m
new file mode 100755
index 0000000..208b86a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_evresulthome.m
@@ -0,0 +1,237 @@
1fn = '334003';
2
3fname = sprintf('%s_eigvec.pfm',fn);
4disp(sprintf('reading %s',fname));
5eigv = readpfm(fname);
6fname = sprintf('%s_eigval.pfm',fn);
7eigval = readpfm(fname);
8
9fname = sprintf('%s_ncutvec.pfm',fn);
10ncutv = readpfm(fname);
11fname = sprintf('%s_ncutval.pfm',fn);
12ncutval = readpfm(fname);
13
14%fname = sprintf('images/130038.pgm');
15fname = sprintf('images/%s.pgm',fn);
16I = readpgm(fname);
17cutsz = 20; I = cutoff(I,cutsz);
18figure(3);im(I);colormap(gray);
19
20new = 0;
21
22if new,
23 fn1 = fn;
24 fn = 'test';
25 fname = sprintf('%s_gcs.pfm',fn);
26 gcs = readpfm(fname);
27
28 fname = sprintf('%s_gce.pfm',fn);
29 gce = readpfm(fname);
30
31 fname = sprintf('%s_grs.pfm',fn);
32 grs = readpfm(fname);
33
34 fname = sprintf('%s_gre.pfm',fn);
35 gre = readpfm(fname);
36
37 nr = max(gre(:))+1;
38 nc = max(gce(:))+1;
39
40 fn = fn1;
41
42else
43 nr = 49;nc = 30;
44 %nr = 30;nc = 49;
45
46end
47
48figure(6);
49for j=1:8,
50 subplot(3,3,j);
51 im(reshape(ncutv(:,j+1),nr,nc));colorbar
52 title(num2str(ncutval(j+1,1)));
53end
54%cm = sprintf('print -dps ncut_%s',fn);disp(cm);eval(cm);
55%subplot(3,3,9);im(I);axis('off');
56
57figure(7);clf
58for j=1:9,
59 subplot(3,3,j);
60 im(reshape(eigv(:,j),nr,nc));colorbar;%axis('off');
61 title(sprintf('%3.4e',eigval(j,1)));
62end
63%cm = sprintf('print -dps eig_%s',fn);disp(cm);eval(cm);
64
65
66
67if 0,
68
69fname = 130042;
70for j=0:30,
71 cm = sprintf('!cp plaatje_data/%d_%d.pfm data/%d_%d.pfm ',fname,j,fname,j);
72 disp(cm);eval(cm);
73end
74
75%%%%%%%%
76fnout = '130042';fn_t = '130042';
77cm = sprintf('!cp data/%s_eigval.pfm %s_eigval.pfm',fnout,fn_t);
78disp(cm);eval(cm);
79cm = sprintf('!cp data/%s_eigvec.pfm %s_eigvec.pfm',fnout,fn_t);
80disp(cm);eval(cm);
81cm = sprintf('!cp data/%s_ncutvec.pfm %s_ncutvec.pfm',fnout,fn_t);
82disp(cm);eval(cm);
83cm = sprintf('!cp data/%s_ncutval.pfm %s_ncutval.pfm',fnout,fn_t);
84disp(cm);eval(cm);
85
86
87
88
89end
90
91disp_flag = 0;
92if disp_flag,
93 [I1,bnr,bnc] = proj_back_id(ncutv(:,2),gcs,gce,grs,gre);
94 imvs(I,I1>0.002,bnr,bnc);
95end
96
97if 0,
98
99 nv = 3;
100 A = eigv(:,1:nv)*eigv(:,1:nv)';
101 [v,d] = ncut(abs(A),min(nv,5));
102
103 figure(3);
104 for j=1:min(nv,5),
105 subplot(2,2,j);
106 ims(v(:,j),nr,nc);
107 end
108
109
110%%%%%%%%
111
112figure(4);%im(I);colorbar;
113hw = 3;st_sz = 2*hw+1;
114ct = round(ginput(1));
115ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
116ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
117
118idx = (ct_chank(:,1)-1)*nr + ct_chank(:,2);
119
120figure(5);im(abs(reshape(A(idx,:),nr,nc)));%colorbar;
121
122
123
124 %%%%%
125
126 fname = 'test2';
127 fn = sprintf('data/ncut_%s.pfm',fname);
128 ncutv1 = readpfm(fn);
129 nr = 30; nc=49;
130
131 figure(1);
132 for j=1:min(4,size(ncutv1,2)),
133 subplot(2,2,j);
134 ims(ncutv1(:,j+1),nr,nc);
135 end
136
137
138
139%%%%%%%%%%
140
141 id = 0;
142 fn = sprintf('test_Aa%d.pfm',id);
143 disp(sprintf('A = readpfm(%s);',fn));
144 A = readpfm(fn);
145
146 cm = sprintf('[v%d,d%d] = eigs(A,12);',id,id);
147 disp(cm);eval(cm);
148
149 writepfm('test_eigv0.pfm',v0);
150 writepfm('test_eigva0.pfm',diag(d0));
151
152
153
154
155vs = zeros(size(v1,1),size(v1,2),6);
156ds = zeros(length(d1),6);
157
158for j=0:5,
159 cm = sprintf('vs(:,:,%d) = v%d;',j+1,j);
160 disp(cm);eval(cm);
161 cm = sprintf('d = diag(d%d);',j);
162 disp(cm);eval(cm);
163 cm = sprintf('ds(:,%d) = d(:);',j+1);
164 disp(cm);eval(cm);
165
166
167end
168
169%save evsum vs ds
170
171figure(1);nr = 49;nc=30;evid = 3;
172for j=1:12,subplot(3,4,j);ims(vs(:,j,evid),nr,nc);end
173
174I = readpgm('images/334039.pgm');I = cutoff(I,20);
175
176As = zeros(6,nr*nc);
177
178figure(3);%im(I);colormap(gray);
179hw = 3;st_sz = 2*hw+1;
180ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
181idx = (ct_chank(:,1)-1)*nr + ct_chank(:,2);
182
183figure(5);
184
185figure(4);nvs = [6,9,12,12,12,12];
186for evid = 1:5,As(evid,:) = squeeze(vs(idx,1:nvs(evid),evid))*squeeze(vs(:,1:nvs(evid),evid))';end
187for evid =1:5,subplot(2,3,evid);im(abs(reshape(As(evid,:),nr,nc)));colorbar;end
188subplot(2,3,6);ims(sum(abs(As)),nr,nc);colorbar
189
190%%%%%%%%%
191
192%%%%%% eig of the As over all scales %%
193
194A = zeros(nr*nc,nr*nc);
195
196for evid=1:5, disp(evid);
197 A = A + abs(squeeze(vs(:,1:nvs(evid),evid))*squeeze(vs(:,1:nvs(evid),evid))');
198end
199
200[v,d] = eigs(A,12);
201figure(1); for j=1:12, subplot(3,4,j);ims(v(:,j),nr,nc);end
202
203[vn,dn] = ncut_b(A,12);
204figure(3); for j=1:12, subplot(3,4,j);ims(-vn(:,j),nr,nc);end
205
206nv = 6;
207A = abs(eigv(:,1:nv)*eigv(:,1:nv)');
208[v,d] = ncut_b(A,nv+1);
209figure(1);
210for j=1:nv,subplot(2,nv,j);ims(v(:,j+1),nr,nc);title(sprintf('%3.3e',d(j+1)));end
211
212for j=1:nv,subplot(2,nv,j+nv);ims(eigv(:,j),nr,nc);title(sprintf('%3.3e',eigval(j,1)));end
213
214%%%%%%%%%%%%%%%%%
215
216while 1,
217figure(3);%im(I);colormap(gray);
218hw = 3;st_sz = 2*hw+1;
219ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
220idx = (ct_chank(:,1)-1)*nr + ct_chank(:,2);
221
222figure(1);
223ims(exp(-(A(idx,:))/(0.03^2)),nr,nc);colorbar
224end
225
226disp_evresulthome;
227close(3);close(7);close(6);
228A = euclid_dist(ncutv(:,2:6));
229A = exp(-A/(0.05^2));
230
231[v,d] = eigs(A,9);
232
233figure(2);
234for j=1:9,subplot(3,3,j);ims(v(:,j),nr,nc);colorbar;end
235
236
237end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_groups.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_groups.m
new file mode 100755
index 0000000..d087218
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_groups.m
@@ -0,0 +1,13 @@
1function disp_groups(groups,ids,nr,nc);
2
3np = ids(end);
4
5baseid =1;
6for j=1:length(ids),
7 mask = zeros(np,1);
8 mask(groups(baseid:ids(j))) = 1+mask(groups(baseid:ids(j)));
9
10 subplot(3,3,j);
11 ims(mask,nr,nc);
12 baseid = 1+ids(j);
13end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_hist2d.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_hist2d.m
new file mode 100755
index 0000000..4313234
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/disp_hist2d.m
@@ -0,0 +1,15 @@
1function H2 = disp_hist2d(J,Jf,scales,filter_ids)
2
3ns = length(scales);
4nf = length(filter_ids);
5
6H2 = [];
7for j=1:ns,
8 for k=1:nf,
9 subplot(ns,nf,(j-1)*nf+k);
10 H2d = hist_I_f(J,Jf(:,:,filter_ids(k),scales(j)));
11 imagesc(H2d);axis('image');axis('off');drawnow;
12 H2(:,:,j,k) = H2d;
13 end
14end
15
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/dist_pair.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/dist_pair.m
new file mode 100755
index 0000000..1c7b2cf
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/dist_pair.m
@@ -0,0 +1,28 @@
1function d = dist_pair(idx,fv,hb)
2% (hb=sigs,bin_mins,bin_maxs,nbins)
3%
4%
5% computes the pairwise distance between
6% a point and everyone else using histogram binized feature
7%
8
9
10[nf,np] = size(fv);
11
12d = zeros(1,np);
13nbins = [0,hb.nbins];
14
15
16for j=1:nf,
17 bin_min = hb.bmins(j);
18 bin_max = hb.bmaxs(j);
19 nbin = nbins(j+1);
20 sig = hb.sigs(j);
21 fprintf(sprintf('|%d',j));
22 b = binize(fv(j,:),sig,bin_min,bin_max,nbin);
23
24 a = binize(fv(j,idx),sig,bin_min,bin_max,nbin);
25
26 d = d + a'*b;
27end
28fprintf('\n');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/dist_pair_chank.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/dist_pair_chank.m
new file mode 100755
index 0000000..96a0d60
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/dist_pair_chank.m
@@ -0,0 +1,25 @@
1function d = dist_pair_chank(a,fvs,chank_size)
2% (hb=sigs,bin_mins,bin_maxs,nbins)
3%
4%
5% computes the pairwise distance between
6% a point and everyone else using histogram binized feature
7%
8
9
10[nf,np] = size(fvs);
11
12n_chanks = ceil(np/chank_size);
13
14d = [];
15for j=1:n_chanks,
16 fprintf('<');
17
18 cm = sprintf('load st_%d',j);
19 eval(cm);
20 fprintf(sprintf('%d',n_chanks-j));
21
22 d = [d,a*fh];
23end
24
25fprintf('\n');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/doog2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/doog2.m
new file mode 100755
index 0000000..3ec22c1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/doog2.m
@@ -0,0 +1,43 @@
1function [G]=doog2(sig,r,th,N);
2% [G,H]=doog2(sig,r,th,N);
3% Make difference of offset gaussians kernel
4% theta is in degrees
5% (see Malik & Perona, J. Opt. Soc. Amer., 1990)
6%
7% Example:
8% >> imagesc(-doog2(.5,4,15,32))
9% >> colormap(gray)
10
11% by Serge Belongie
12
13no_pts=N; % no. of points in x,y grid
14pad_pts=no_pts*sqrt(2); % pad grid dimensions for up to a 45 degree rotation
15siz=6; % range of x,y grid
16
17[x,y]=meshgrid(linspace(-siz,siz,pad_pts),linspace(-siz,siz,pad_pts));
18
19a=-1;
20b=2;
21c=-1;
22
23ya=sig;
24yc=-ya;
25yb=0;
26sigy=sig;
27sigx=r*sig;
28
29Ga=(1/(2*pi*sigx*sigy))*exp(-(((x-0)/sigx).^2+((y-ya)/sigy).^2));
30Gb=(1/(2*pi*sigx*sigy))*exp(-(((x-0)/sigx).^2+((y-yb)/sigy).^2));
31Gc=(1/(2*pi*sigx*sigy))*exp(-(((x-0)/sigx).^2+((y-yc)/sigy).^2));
32
33Go = a*Ga + b*Gb + c*Gc;
34%Ho = imag(hilbert(Go));
35G = Go;
36
37G = mimrotate(Go,th,'bilinear','crop');
38G = imcrop(G,[(pad_pts-no_pts)/2, (pad_pts-no_pts)/2, no_pts, no_pts]);
39
40%H = imrotate(Ho,th,'bilinear','crop');
41%H = imcrop(H,[(pad_pts-no_pts)/2, (pad_pts-no_pts)/2, no_pts, no_pts]);
42
43
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/eig_decomp.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/eig_decomp.m
new file mode 100755
index 0000000..5209088
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/eig_decomp.m
@@ -0,0 +1,15 @@
1function [v,d] = eig_decomp(A)
2
3ds = sum(A);
4ds = ones(size(ds))./sqrt(ds);
5D1 = ds'*ones(1,length(ds));
6A = D1'.*A.*D1;
7
8disp(sprintf('computing eig values'));
9tic;[v,d] = eig(A);toc;
10
11d = abs(diag(d));
12[tmp,idx] = sort(-d);
13d = d(idx);
14v = v(:,idx);
15v = D1.*v;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/eig_decomp_v5.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/eig_decomp_v5.m
new file mode 100755
index 0000000..e0fab2c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/eig_decomp_v5.m
@@ -0,0 +1,13 @@
1function [v,d] = eig_decomp_v5(A,nv)
2
3ds = sum(A);
4ds = ones(size(ds))./sqrt(ds);
5D1 = ds'*ones(1,length(ds));
6A = D1'.*A.*D1;
7
8disp(sprintf('computing eig values'));
9tic;[v,d] = eigs(A,nv);toc;
10
11d = abs(diag(d));
12
13v = D1(:,1:size(v,2)).*v;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/eig_proj.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/eig_proj.m
new file mode 100755
index 0000000..78d5296
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/eig_proj.m
@@ -0,0 +1,12 @@
1function v = eig_proj(u,data)
2
3% fd = feature dimension, nv = num. of eigvectors
4[fd,nv] = size(u);
5
6[fd2,nd] = size(data);
7
8if (fd ~= fd2),
9 error(sprintf('size don't match'));
10else
11 v = data'*u;
12end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/eigs_decomp.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/eigs_decomp.m
new file mode 100755
index 0000000..7763124
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/eigs_decomp.m
@@ -0,0 +1,39 @@
1function [v,d,D,Ipara] = eigs_decomp(fn,num_eigs)
2%
3% function [v,d,D,Ipara] = eigs_decomp(fn,num_eigs)
4%
5
6%fn = '2.ppm';
7fn = 'images/130049.pgm';
8
9
10% spatial gaussian parameter
11xscale = 3;
12
13% half size of the neighbourhood
14xnb = 6;
15
16% setting the the HSV gaussian parameter:[h s v]
17Iscale = [0.008,0.01,0.01];
18
19Input_para = [xscale,xnb,Iscale];
20
21% compute the lower half the association matrix
22[A,D,Ipara] = compute_A_ppm(fn,Input_para);
23
24B = A+A';
25clear A;
26
27% eigen decompostion
28options.tol = 1e-7;
29num_eig_v = 4;
30fprintf('doing eigs ...\n');
31[v,d] = eigs(B,num_eig_v,options);
32
33d = diag(d);
34
35% to display the final result
36
37%nr = Ipara(1);nc = Ipara(2);
38%k = 1;imagesc(reshape(v(:,k).*D,nc,nr)');colorbar
39
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/euclid_dist.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/euclid_dist.m
new file mode 100755
index 0000000..cbf0734
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/euclid_dist.m
@@ -0,0 +1,22 @@
1function [A,mag] = euclid_dist(v)
2
3
4
5A = 2*v*v';
6
7nv = size(v,2);
8if (nv>1)
9 mag = sum((v.*v)')';
10else
11 mag = v.*v;
12end
13
14np = length(mag);
15
16for j=1:np,
17 A(:,j) = mag-A(:,j);
18end
19
20for j=1:np,
21 A(j,:) = mag' + A(j,:);
22end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/filter_all_files.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/filter_all_files.m
new file mode 100755
index 0000000..c1752e5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/filter_all_files.m
@@ -0,0 +1,29 @@
1sigs = [1/sqrt(2),1,sqrt(2),2,2*sqrt(2)];r = 3;szs = round(r*3*sigs);
2
3load filenames;
4
5nfiles = size(filename,1);
6
7for j = 48:nfiles,
8 fname = ['images/',filename(j,:)];
9 fname
10 I = readpgm(fname);
11
12 text_des = compute_filter(I,sigs,r,szs);
13
14 data_name = sprintf('filter_%s.mat',filename(j,:));
15 cm = sprintf('save %s ',data_name);
16
17 disp(cm);
18 eval(cm);
19 clear;
20
21 sigs = [1/sqrt(2),1,sqrt(2),2,2*sqrt(2)];r = 3;szs = round(r*3*sigs);
22
23 load filenames;
24
25 nfiles = size(filename,1);
26
27
28end
29
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/filter_output.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/filter_output.m
new file mode 100755
index 0000000..a489c6e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/filter_output.m
@@ -0,0 +1,38 @@
1function If = filter_output(I,sigs,szs,flag);
2%
3% compute filter output for all orientation and scale,
4%
5
6%% flag = 1 if compute oriented filter output
7if (~exist('flag')),
8 flag = 1;
9end
10
11
12If = [];
13
14for j = 1:length(sigs),
15 sig = sigs(j);
16 sz = 2*round(4*sig)+1;
17
18 g = mkdog1(sig,sz);
19 fprintf('[');
20 fprintf('.');
21 If(:,:,1,j) = conv2(I,g,'same');
22
23 angles = [0:30:150];
24 r = 3;
25
26 if flag,
27 for k = 1:length(angles),
28 fprintf('.');
29 g = mdoog2(sig,r,angles(k),szs(j));
30 If(:,:,k+1,j) = conv2(I,g,'same');
31 end
32 end
33
34 fprintf(']');
35
36end
37
38fprintf('\n'); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/find_bst_cut.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/find_bst_cut.m
new file mode 100755
index 0000000..c85cc2b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/find_bst_cut.m
@@ -0,0 +1,24 @@
1function [cut_threshold,max_asso] = find_bst_cut(fn_base,para,threshold,Gmask)
2
3basedir = 'plaatje_data/';
4%basedir = './';
5
6fn = sprintf('%sbst_cut.tex',basedir);
7write_command(fn,fn_base,para);
8
9fn= sprintf('%sthreshold_%s.pfm',basedir,fn_base);
10writepfm(fn,threshold(:));
11
12fn= sprintf('%sGmask_%s.pfm',basedir,fn_base);
13writepfm(fn,Gmask(:));
14
15cd plaatje_data
16!./find_bestcut
17cd /home/barad-dur/vision/malik/jshi/proj/grouping/texture
18
19fn = sprintf('%sbst_asso_%s.pfm',basedir,fn_base);
20results = readpfm(fn);
21asso = results(1,:);
22[max_asso,id] = max(asso);
23cut_threshold = threshold(id);
24
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/find_center.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/find_center.m
new file mode 100755
index 0000000..b5a127a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/find_center.m
@@ -0,0 +1,4 @@
1function [center_x,center_y] = find_center(size_x,size_y);
2
3center_x = 0.5*(size_x -1)+1;
4center_y = 0.5*(size_y -1)+1;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/find_cutpoint.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/find_cutpoint.m
new file mode 100755
index 0000000..5cab956
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/find_cutpoint.m
@@ -0,0 +1,13 @@
1function [cutpoints,x] = find_cutpoint(data,cmap,nbin)
2%
3% [cutpoints,x] = find_cutpoint(data,cmap,nbin)
4%
5%
6
7x = id_cut(data,cmap,nbin);
8
9cutpoints = zeros(1,nbin);
10
11for j=1:nbin,
12 cutpoints(j) = max(data(x<=j));
13end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/gen_filters.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/gen_filters.m
new file mode 100755
index 0000000..65e3c3a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/gen_filters.m
@@ -0,0 +1,47 @@
1function filters = gen_filters(sig,r,sz);
2
3
4as = 0:30:150;
5
6filters = [];
7
8if size(sig,2)== 1,
9
10 for j = 1:length(as),
11 fprintf('.');
12 angle = as(j);
13
14 g = mdoog2(sig,r,angle,round(sz));
15
16 g = g - mean(reshape(g,prod(size(g)),1));
17
18 g = g/sum(sum(abs(g)));
19
20 filters(:,:,j) = g;
21 end
22else
23
24 % there are multiple scales
25 sigs = sig;
26 szs = sz;
27 for k = 1:size(sigs,2),
28 sig = sigs(k);
29 sz = szs(length(szs)-1);
30 fprintf('%d',k);
31 for j = 1:length(as),
32 fprintf('.');
33 angle = as(j);
34
35 g = mdoog2(sig,r,angle,round(sz));
36 g = g - mean(reshape(g,prod(size(g)),1));
37 g = g/sum(sum(abs(g)));
38
39 filters(:,:,j,k) = g;
40 end
41
42
43 end
44
45end
46
47fprintf('\n');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_cumhist.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_cumhist.m
new file mode 100755
index 0000000..b05d680
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_cumhist.m
@@ -0,0 +1,9 @@
1function cumhists = get_cumhist(hists)
2%
3%
4% cumhists = get_cumhist(hists)
5%
6
7cumhists.inten = cumsum(hists.inten)/sum(hists.inten);
8cumhists.text = cumsum(hists.text,1)./(ones(size(hists.text,1),1)*sum(hists.text,1));
9cumhists.mag = cumsum(hists.mag)/sum(hists.mag); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_cumhist_inten.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_cumhist_inten.m
new file mode 100755
index 0000000..911b4e6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_cumhist_inten.m
@@ -0,0 +1,7 @@
1function CH_inten = get_cumhist(hists)
2%
3%
4% cumhists = get_cumhist(hists)
5%
6
7CH_inten = cumsum(hists)/sum(hists);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_hist.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_hist.m
new file mode 100755
index 0000000..d480a3a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_hist.m
@@ -0,0 +1,24 @@
1function [hists,bins] = get_hists(J,Jbar)
2%
3%
4% produce histogram output of the image J and its
5% filter outputs Jbar
6%
7
8maxval = 60;
9bin = [1:4:maxval+1];
10
11w = size(J);
12
13
14[hists.inten,bins.inten] = hist(reshape(J,prod(w),1),[1:26:256]);
15
16for j=1:size(Jbar,3),
17 hists.text(:,j) = hist(reshape(abs(Jbar(:,:,j)),prod(w),1),bin);
18end
19
20bins.text = bin;
21
22[hists.mag,bins.mag] = hist(reshape(sum(abs(Jbar),3),prod(w),1),[1:10:161]);
23
24
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_hist_inten.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_hist_inten.m
new file mode 100755
index 0000000..c8357c6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_hist_inten.m
@@ -0,0 +1,15 @@
1function [Hinten,Hbins] = get_hists_inten(J,nbin)
2%
3%
4% produce histogram output of the image J and its
5% filter outputs Jbar
6%
7
8
9w = size(J);
10
11[Hinten,Hbins] = hist(reshape(J,prod(w),1),linspace(1,256,nbin));
12
13
14
15
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_win.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_win.m
new file mode 100755
index 0000000..411a694
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_win.m
@@ -0,0 +1,10 @@
1function J = get_win(I,center,wc)
2%
3% J = get_win(I,center,wc)
4%
5% center: [x,y]
6
7
8
9J = I(center(2)-wc(2):center(2)+wc(2),...
10 center(1)-wc(1):center(1)+wc(1));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_win5.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_win5.m
new file mode 100755
index 0000000..e8404e5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/get_win5.m
@@ -0,0 +1,11 @@
1function J = get_win5(I,center,wc)
2%
3% J = get_win5(I,center,wc)
4%
5% center: [x,y]
6
7
8
9J = I(center(2)-wc(2):center(2)+wc(2),...
10 center(1)-wc(1):center(1)+wc(1),:,:);
11
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/grad.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/grad.m
new file mode 100755
index 0000000..6da0fbf
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/grad.m
@@ -0,0 +1,24 @@
1% gradient of an image
2% coordinates (r, c) follow matrix convention;
3% the gaussian is truncated at x = +- tail, and there are samples samples
4% inbetween, where samples = hsamples * 2 + 1
5
6function[gr,gc] = gradient(image, hsamples)
7
8tail=4;
9samples = hsamples * 2 + 1;
10
11x = linspace(-tail, tail, samples);
12gauss = exp(-x.^2);
13n = gauss * ones(samples,1);
14gauss = gauss/n;
15
16gaussderiv = -x.*gauss;
17n = -gaussderiv*linspace(1,samples,samples)';
18gaussderiv = gaussderiv/n;
19
20gr = conv2(conv2(image, gaussderiv','valid'), gauss,'valid');
21gc = conv2(conv2(image, gaussderiv,'valid'), gauss','valid');
22
23%gr = conv_trim(gr, hsamples, hsamples);
24%gc = conv_trim(gc, hsamples, hsamples);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/half_sigmoid.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/half_sigmoid.m
new file mode 100755
index 0000000..c187b6c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/half_sigmoid.m
@@ -0,0 +1,17 @@
1function a = half_sigmoid(x,offset,sig)
2%
3% a = half_sigmoid(x,offset,sig)
4%
5% a = ones(size(x))./(1+exp(-(x-offset)/sig));
6%
7% keep the sign of a
8
9sign_x = sign(x);
10x = abs(x);
11
12a = ones(size(x))./(1+exp(-(x-offset)/sig));
13
14off = 1/(1+exp(-(0-offset)/sig));
15
16a = sign_x.*(a-off);
17
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist2d.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist2d.m
new file mode 100755
index 0000000..3f4db0c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist2d.m
@@ -0,0 +1,13 @@
1function H2 = hist2d(J,Jf,scales,filter_ids)
2
3ns = length(scales);
4nf = length(filter_ids);
5
6H2 = [];
7for j=1:ns,
8 for k=1:nf,
9 H2d = hist_I_f(J,Jf(:,:,filter_ids(k),scales(j)));
10 H2(:,:,j,k) = H2d;
11 end
12end
13
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_I_f.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_I_f.m
new file mode 100755
index 0000000..a993661
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_I_f.m
@@ -0,0 +1,22 @@
1function h2d = hist_I_f(I,If,binI,binf)
2
3if (nargin == 2),
4 binI = [0:13:260];
5 binf = [-30:2.5*2:30];
6end
7
8%%% make 2d histogram bin
9h2d = [];
10
11for j = 2:length(binf),
12
13 [id_i,id_j] = find((If>binf(j-1)) & (If<=binf(j)));
14 if (length(id_i) >0),
15 h = hist(I(id_i+(id_j-1)*size(I,1)),binI);
16 else
17 h = zeros(size(binI));
18 end
19
20 h2d = [h2d,h'];
21end
22
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_diff.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_diff.m
new file mode 100755
index 0000000..6976c8f
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_diff.m
@@ -0,0 +1,30 @@
1function hdiff = hist_diff(H1,H2)
2%
3% hdiff = hist_diff(H1,H2)
4%
5
6ns = size(H1,3);
7nf = size(H1,4);
8
9sI= [1,0,1];sI = exp(-sI);
10sI = sI/sum(sI);
11
12hdiff = 0;
13for j = 1:ns,
14 for k = 1:nf,
15 h1 = H1(:,:,j,k);
16 h2 = H2(:,:,j,k);
17
18 h1s = conv2(conv2(h1,sI','same'),sI,'same');
19 h2s = conv2(conv2(h2,sI','same'),sI,'same');
20
21 [is,js] = find( (h1>0) | (h2>0));
22 ids = (js-1)*size(h1,1) + is;
23
24 xdiffs = ((h1s(ids)-h2s(ids)).*(h1s(ids)-h2s(ids)))./(h1s(ids)+h2s(ids));
25 hdiff = hdiff + sum(xdiffs);
26
27 end
28end
29
30hdiff = hdiff/(ns*nf);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_f.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_f.m
new file mode 100755
index 0000000..93f50a9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_f.m
@@ -0,0 +1,28 @@
1function h2d = hist_f(Ifs,f1,s1,f2,s2)
2
3
4binf = [-30:2.5*2:30];
5
6
7%%% make 2d histogram bin
8
9If1 = Ifs(:,:,f1,s1);
10If2 = Ifs(:,:,f2,s2);
11h2d = [];
12
13binf(1) = -100;
14binf(length(binf)) = 100;
15
16for j = 2:length(binf),
17
18 [id_i,id_j] = find((If1>binf(j-1)) & (If1<=binf(j)));
19 if (length(id_i) >0),
20
21 h = hist(If2(id_i+(id_j-1)*size(If2,1)),binf);
22 else
23 h = zeros(size(binf));
24 end
25
26
27 h2d = [h2d,h'];
28end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_in_chank.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_in_chank.m
new file mode 100755
index 0000000..74661b2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_in_chank.m
@@ -0,0 +1,33 @@
1function covfh = hist_inner_chank(fv,chank_size,nbin)
2% fh = hist_inner_chank(fv,hb,chank_file)
3%
4% (hb = bin_mins,bin_maxs,nbins)
5%
6% take which histogram value and turn it into histogram bin
7% compute the inner product of the histogram bin features
8%
9
10[nf,np] = size(fv);
11
12tbins = nf*nbin;
13disp(sprintf('need matrix of %d x %d ',tbins,tbins));
14
15covfh = zeros(tbins,tbins);
16
17n_chanks = ceil(np/chank_size);
18for j=1:n_chanks,
19 fprintf('<');
20
21 cm = sprintf('load st_%d',j);
22 eval(cm);
23 fprintf(sprintf('%d',n_chanks-j));
24
25 %ms = mean(fh');
26 %fh = fh- ms'*ones(1,size(fh,2));
27
28 covfh = covfh + fh*fh';
29 fprintf('>');
30end
31
32fprintf('\n');
33
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_inner.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_inner.m
new file mode 100755
index 0000000..6fd02b7
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hist_inner.m
@@ -0,0 +1,40 @@
1function fh = hist_inner(fv,hb)
2% (hb = bin_mins,bin_maxs,nbins)
3%
4% take which histogram value and turn it into histogram bin
5% compute the inner product of the histogram bin features
6%
7
8[nf,np] = size(fv);
9
10nbins = [0,hb.nbins];
11
12disp(sprintf('need matrix of %d x %d ',sum(nbins),sum(nbins)));
13
14fh = zeros(sum(nbins),sum(nbins));
15
16for j=1:nf,
17 bin_min = hb.bmins(j);
18 bin_max = hb.bmaxs(j);
19 nbin = nbins(j+1);
20 sig = hb.sigs(j);
21 fprintf('|');
22 b0 = binize(fv(j,:),sig,bin_min,bin_max,nbin);
23
24 fh(sum(nbins(1:j))+1:sum(nbins(1:j+1)),sum(nbins(1:j))+1:sum(nbins(1:j+1))) = b0*b0';
25
26 for k=j+1:nf,
27 bin_min = hb.bmins(k);
28 bin_max = hb.bmaxs(k);
29 nbin = nbins(k+1);
30 sig = hb.sigs(k);
31 fprintf('.');
32 b = binize(fv(k,:),sig,bin_min,bin_max,nbin);
33 tmp = b0*b';
34
35 fh(sum(nbins(1:j))+1:sum(nbins(1:j+1)),sum(nbins(1:k))+1:sum(nbins(1:k+1))) = tmp;
36 fh(sum(nbins(1:k))+1:sum(nbins(1:k+1)),sum(nbins(1:j))+1:sum(nbins(1:j+1))) = tmp';
37 end
38end
39
40fprintf('\n');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/histbin_fv_chank.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/histbin_fv_chank.m
new file mode 100755
index 0000000..8cf2a35
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/histbin_fv_chank.m
@@ -0,0 +1,14 @@
1function histbin_fv_chank(fvs,hb,chank_size,fname_base)
2
3[nv,np] = size(fvs);
4
5k =1;
6for j=1:chank_size:np,
7 disp(sprintf('|%d',j));
8 fh = colize_hist(fvs(:,j:min(j+chank_size-1,np)),hb);
9 fname = sprintf('%s_%d.mat',fname_base,k);
10 cm = sprintf('save %s fh hb;',fname);
11 disp(cm);
12 eval(cm);
13 k = k+1;
14end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hsv2clrs.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hsv2clrs.m
new file mode 100755
index 0000000..cfbb8b0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/hsv2clrs.m
@@ -0,0 +1,25 @@
1function [x,y,z] = hsv2clrs(h,s,v)
2%
3% function [x,y,z] = hsv2clrs(h,s,v)
4% if h is 3D matrix, output in 3D x
5%
6
7if (size(h,3) == 3),
8 s = h(:,:,2);
9 v = h(:,:,3);
10 h = h(:,:,1);
11
12 z = v;
13 xx = s.*v.*cos(2*pi*h);
14 y = s.*v.*sin(2*pi*h);
15
16 x(:,:,1) = xx;
17 x(:,:,2) = y;
18 x(:,:,3) = z;
19else
20
21 z = v;
22 x = s.*v.*cos(2*pi*h);
23 y = s.*v.*sin(2*pi*h);
24end
25
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/id_cut.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/id_cut.m
new file mode 100755
index 0000000..daf8f2b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/id_cut.m
@@ -0,0 +1,14 @@
1function [x,map] = idcut(data,cmap,nbin)
2%
3%
4%
5
6lc = size(cmap,1);
7
8data = data - min(data);
9data = 1+ ((lc-1)*data/max(data));
10
11r = cmap(data,1);g = cmap(data,2);b = cmap(data,3);
12
13[x,map] = vmquant(r,g,b,nbin);
14
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/im.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/im.m
new file mode 100755
index 0000000..6450120
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/im.m
@@ -0,0 +1,3 @@
1function im(I)
2
3imagesc(I);axis('image');drawnow; \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/im3.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/im3.m
new file mode 100755
index 0000000..b49e690
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/im3.m
@@ -0,0 +1,3 @@
1function im3(d)
2
3imagesc(reshape(d,size(d,1),size(d,2)*size(d,3)));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/im5.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/im5.m
new file mode 100755
index 0000000..7f1b16d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/im5.m
@@ -0,0 +1,16 @@
1function im5(data,nr,nc,mag)
2
3if nargin == 4,
4for j=1:size(data,3),
5 subplot(nr,nc,j);
6 imagesc(data(:,:,j)./mag);axis('image');axis('off');colorbar;drawnow;
7
8% image(150*data(:,:,j));axis('image');axis('off');colorbar;drawnow;
9end
10
11else
12for j=1:size(data,3),
13 subplot(nr,nc,j);
14 imagesc(data(:,:,j));axis('image');axis('off');colorbar;drawnow;
15end
16end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/im_vect.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/im_vect.m
new file mode 100755
index 0000000..d0a5b30
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/im_vect.m
@@ -0,0 +1,20 @@
1function a = im_vect(loca,v,scale);
2
3if ~exist('scale'),
4 scale = 50;
5end
6
7y = loca(1,:);
8x = loca(2,:);
9
10x = x - min(x);
11y = y - min(y);
12
13max_x = max(x);max_y = max(y);
14min_scale = min(max_x,max_y);
15
16x = scale*x/min_scale;
17y = scale*y/min_scale;
18
19
20a = sparse(y+1,x+1,v);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/imrotate.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/imrotate.m
new file mode 100755
index 0000000..167fd02
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/imrotate.m
@@ -0,0 +1,119 @@
1function bout = imrotate(arg1,arg2,arg3,arg4)
2%IMROTATE Rotate image.
3% B = IMROTATE(A,ANGLE,'method') rotates the image A by ANGLE
4% degrees. The image returned B will, in general, be larger
5% than A. Invalid values on the periphery are set to one
6% for indexed images or zero for all other image types. Possible
7% interpolation methods are 'nearest','bilinear' or 'bicubic'.
8% 'bilinear' is the default for intensity images, otherwise
9% 'nearest' is used if no method is given.
10%
11% B = IMROTATE(A,ANGLE,'crop') or IMROTATE(A,ANGLE,'method','crop')
12% crops B to be the same size as A.
13%
14% Without output arguments, IMROTATE(...) displays the rotated
15% image in the current axis.
16%
17% See also IMRESIZE, IMCROP, ROT90.
18
19% Clay M. Thompson 8-4-92
20% Copyright (c) 1992 by The MathWorks, Inc.
21% $Revision: 1.14 $ $Date: 1993/09/01 21:27:38 $
22
23if nargin<2, error('Requires at least two input parameters.'); end
24if nargin<3,
25 if isgray(arg1), caseid = 'bil'; else caseid = 'nea'; end
26 docrop = 0;
27elseif nargin==3,
28 if isstr(arg3),
29 method = [lower(arg3),' ']; % Protect against short method
30 caseid = method(1:3);
31 if caseid(1)=='c', % Crop string
32 if isgray(arg1), caseid = 'bil'; else caseid = 'nea'; end
33 docrop = 1;
34 else
35 docrop = 0;
36 end
37 else
38 error('''METHOD'' must be a string of at least three characters.');
39 end
40else
41 if isstr(arg3),
42 method = [lower(arg3),' ']; % Protect against short method
43 caseid = method(1:3);
44 else
45 error('''METHOD'' must be a string of at least three characters.');
46 end
47 docrop = 1;
48end
49
50% Catch and speed up 90 degree rotations
51if rem(arg2,90)==0 & nargin<4,
52 phi = rem(arg2,360);
53 if phi==90,
54 b = rot90(arg1);
55 elseif phi==180,
56 b = rot90(arg1,2);
57 elseif phi==270,
58 b = rot90(arg1,-1);
59 else
60 b = arg1;
61 end
62 if nargout==0, imshow(b), else bout = b; end
63 return
64end
65
66phi = arg2*pi/180; % Convert to radians
67
68% Rotation matrix
69T = [cos(phi) -sin(phi); sin(phi) cos(phi)];
70
71% Coordinates from center of A
72[m,n] = size(arg1);
73if ~docrop, % Determine limits for rotated image
74 siz = ceil(max(abs([(n-1)/2 -(m-1)/2;(n-1)/2 (m-1)/2]*T))/2)*2;
75 uu = -siz(1):siz(1); vv = -siz(2):siz(2);
76else % Cropped image
77 uu = (1:n)-(n+1)/2; vv = (1:m)-(m+1)/2;
78end
79nu = length(uu); nv = length(vv);
80
81blk = bestblk([nv nu]);
82nblks = floor([nv nu]./blk); nrem = [nv nu] - nblks.*blk;
83mblocks = nblks(1); nblocks = nblks(2);
84mb = blk(1); nb = blk(2);
85
86rows = 1:blk(1); b = zeros(nv,nu);
87for i=0:mblocks,
88 if i==mblocks, rows = (1:nrem(1)); end
89 for j=0:nblocks,
90 if j==0, cols = 1:blk(2); elseif j==nblocks, cols=(1:nrem(2)); end
91 if ~isempty(rows) & ~isempty(cols)
92 [u,v] = meshgrid(uu(j*nb+cols),vv(i*mb+rows));
93 % Rotate points
94 uv = [u(:) v(:)]*T'; % Rotate points
95 u(:) = uv(:,1)+(n+1)/2; v(:) = uv(:,2)+(m+1)/2;
96 if caseid(1)=='n', % Nearest neighbor interpolation
97 b(i*mb+rows,j*nb+cols) = interp6(arg1,u,v);
98 elseif all(caseid=='bil'), % Bilinear interpolation
99 b(i*mb+rows,j*nb+cols) = interp4(arg1,u,v);
100 elseif all(caseid=='bic'), % Bicubic interpolation
101 b(i*mb+rows,j*nb+cols) = interp5(arg1,u,v);
102 else
103 error(['Unknown interpolation method: ',method]);
104 end
105 end
106 end
107end
108
109d = find(isnan(b));
110if length(d)>0,
111 if isind(arg1), b(d) = ones(size(d)); else b(d) = zeros(size(d)); end
112end
113
114if nargout==0,
115 imshow(b), return
116end
117bout = b;
118
119
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/ims.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/ims.m
new file mode 100755
index 0000000..2fb5f25
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/ims.m
@@ -0,0 +1,3 @@
1function ims(I,nr,nc)
2
3im(reshape(I,nr,nc)); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/imvs.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/imvs.m
new file mode 100755
index 0000000..21dde73
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/imvs.m
@@ -0,0 +1,4 @@
1function imvs(I,v,nr,nc)
2
3v = reshape(v,nr,nc);
4im(I(1:size(v,1),1:size(v,2)).*v); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/is_step.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/is_step.m
new file mode 100755
index 0000000..4903778
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/is_step.m
@@ -0,0 +1,33 @@
1function P_step = is_step(gx,gy)
2%
3% P_step = is_step(gx,gy)
4%
5% determine wheter gx,gy(which is first
6% order filter output) is a response
7% to a step function
8%
9
10M = zeros(2,2);
11M(1,1) = sum(sum(gx.*gx));
12M(2,2) = sum(sum(gy.*gy));
13M(1,2) = sum(sum(gx.*gy));
14M(2,1) = M(1,2);
15
16[v,d] = eig(M);
17d = diag(d);
18
19% make the first eig_value to be the smaller one
20if (d(2)< d(1)),
21 tmp = d(1);d(1) = d(2);d(2) = tmp;
22 tmp = v(:,1); v(:,1) = v(:,2); v(:,2) = tmp;
23end
24
25ratio = d(1)/d(2);
26threshold = 0;
27gx_ratio = sum(sum(gx.*(gx>threshold)))/(sum(sum(abs(gx).*(abs(gx)>threshold))));
28gx_ratio = max(gx_ratio,1-gx_ratio);
29
30gy_ratio = sum(sum(gy.*(gy>threshold)))/(sum(sum(abs(gy).*(abs(gy)>threshold))));
31gy_ratio = max(gy_ratio,1-gy_ratio);
32
33P_step = [ratio,gx_ratio,gy_ratio];
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/ks_2d.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/ks_2d.m
new file mode 100755
index 0000000..cfac005
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/ks_2d.m
@@ -0,0 +1,20 @@
1function [na,nb,nc,nd] = ks_2d(cum_filter)
2
3[nb_filters,nb_bins] = size(cum_filter);
4
5T = 1;
6
7for j = [1:nb_filters],
8 for l = [1:nb_bins],
9 nc(j,l) = sum(cum_filter(1:j,l));
10 nd(j,l) = j*T - nc(j,l);
11
12 if (j~= nb_filters),
13 nb(j,l) = sum(cum_filter(j+1:nb_filters,l));
14 na(j,l) = (nb_filters-j)*T-nb(j,l);
15 else
16 nb(j,l) = 0;
17 na(j,l) = 0;
18 end
19 end
20end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/load_result.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/load_result.m
new file mode 100755
index 0000000..0ff328c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/load_result.m
@@ -0,0 +1,39 @@
1
2fnameI = '130056';
3
4cm = sprintf('load filter_%s.pgm.mat',fnameI);
5disp(cm);
6eval(cm);
7
8text_des= reshape(text_des,size(text_des,1),size(text_des,2),size(text_des,3)*size(text_des,4));
9
10for j=1:size(text_des,3),
11 text_des(:,:,j) = abs(text_des(:,:,j)).*(text_des(:,:,j) <0);
12end
13
14%text_des = abs(text_des);
15
16
17 %%%% cutoff margins,
18margin = 6+10;
19
20Iw = cutoff(I,margin);
21
22
23T1 = cutoff(text_des,margin);
24
25%%%%% reduce resolution
26
27
28
29T1 = reduce_all(T1);
30T1 = reduce_all(T1);
31
32im5(T1,5,6);
33
34cm = sprintf('writepnm5(''%s_f.pnm'',%s)',fnameI,'T1/70');
35
36% disp(cm);eval(cm);
37
38nr = size(T1,1);
39nc = size(T1,2);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/m_interp4.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/m_interp4.m
new file mode 100755
index 0000000..314f140
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/m_interp4.m
@@ -0,0 +1,49 @@
1function [F,mask] = m_interp4(z,s,t)
2%INTERP4 2-D bilinear data interpolation.
3% ZI = INTERP4(Z,XI,YI) assumes X = 1:N and Y = 1:M, where
4% [M,N] = SIZE(Z).
5%
6% Copyright (c) 1984-93 by The MathWorks, Inc.
7% Clay M. Thompson 4-26-91, revised 7-3-91, 3-22-93 by CMT.
8%
9% modified to
10
11
12[nrows,ncols] = size(z);
13
14
15if any(size(z)<[3 3]), error('Z must be at least 3-by-3.'); end
16if size(s)~=size(t), error('XI and YI must be the same size.'); end
17
18% Check for out of range values of s and set to 1
19sout = find((s<1)|(s>ncols));
20if length(sout)>0, s(sout) = ones(size(sout)); end
21
22% Check for out of range values of t and set to 1
23tout = find((t<1)|(t>nrows));
24if length(tout)>0, t(tout) = ones(size(tout)); end
25
26% Matrix element indexing
27ndx = floor(t)+floor(s-1)*nrows;
28
29% Compute intepolation parameters, check for boundary value.
30d = find(s==ncols);
31s(:) = (s - floor(s));
32if length(d)>0, s(d) = s(d)+1; ndx(d) = ndx(d)-nrows; end
33
34% Compute intepolation parameters, check for boundary value.
35d = find(t==nrows);
36t(:) = (t - floor(t));
37if length(d)>0, t(d) = t(d)+1; ndx(d) = ndx(d)-1; end
38d = [];
39
40% Now interpolate, reuse u and v to save memory.
41F = ( z(ndx).*(1-t) + z(ndx+1).*t ).*(1-s) + ...
42 ( z(ndx+nrows).*(1-t) + z(ndx+(nrows+1)).*t ).*s;
43
44mask = ones(size(z));
45
46% Now set out of range values to zeros.
47if length(sout)>0, F(sout) = zeros(size(sout));mask(sout)=zeros(size(sout));end
48if length(tout)>0, F(tout) = zeros(size(tout));mask(tout)=zeros(size(tout));end
49
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/make_masks.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/make_masks.m
new file mode 100755
index 0000000..d2c8ba7
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/make_masks.m
@@ -0,0 +1,12 @@
1function masks = make_masks(groups,ids,nr,nc);
2
3np = ids(end);
4
5baseid =1;
6for j=1:length(ids),
7 mask = zeros(np,1);
8 mask(groups(baseid:ids(j))) = 1+mask(groups(baseid:ids(j)));
9 baseid = 1+ids(j);
10
11 masks(:,:,j) = mask;
12end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/makefilter.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/makefilter.m
new file mode 100755
index 0000000..a768269
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/makefilter.m
@@ -0,0 +1,14 @@
1function H = make_filter(txture,sze,noise)
2% function H = make_filter(txture,sze)
3%
4%
5
6x = zeros(sze);
7tx_sze = size(txture);
8
9x(1:tx_sze(1),1:tx_sze(2)) = txture;
10x = reshape(x,1,sze(1)*sze(2));
11X = fft(x);
12figure(3);plot(abs(X).^2);
13
14H = X./(abs(X).^2+noise);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkf_t1.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkf_t1.m
new file mode 100755
index 0000000..256e609
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkf_t1.m
@@ -0,0 +1,22 @@
1function [H,h] = make_filter(txture,sze,noise)
2% function H = make_filter(txture,sze)
3%
4%
5
6tx_sze = size(txture);
7x = reshape(txture,1,tx_sze(1)*tx_sze(2));
8X = fft(x);
9H = X./(abs(X).^2+noise);
10h = reshape(real(ifft(H)),tx_sze(1),tx_sze(2));
11
12
13x = zeros(sze);
14x(1:tx_sze(1),1:tx_sze(2)) = h;
15figure(1);imagesc(x);drawnow;
16x = reshape(x,1,sze(1)*sze(2));
17H = fft(x);
18
19h = reshape(real(ifft(H)),sze(1),sze(2));
20figure(2);imagesc(h);
21
22figure(3); mesh(h); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkf_t2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkf_t2.m
new file mode 100755
index 0000000..c84482d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkf_t2.m
@@ -0,0 +1,21 @@
1function [H,h] = make_filter(txture,sze,noise)
2% function H = make_filter(txture,sze)
3%
4%
5
6x = zeros(sze);
7tx_sze = size(txture);
8
9[center_x,center_y] = find_center(sze(2),sze(1));
10tx_sze_h = round(0.5*tx_sze);
11
12x(center_y-tx_sze_h(1):center_y-tx_sze_h(1)+tx_sze(1)-1,...
13 center_x-tx_sze_h(2):center_x-tx_sze_h(2)+tx_sze(2)-1) = txture;
14figure(1);imagesc(x);drawnow;
15x = reshape(x,1,sze(1)*sze(2));
16X = fft(x);
17H = X./(abs(X).^2+noise);
18h = reshape(real(ifft(H)),sze(1),sze(2));
19figure(2);imagesc(h);
20
21figure(3); mesh(h); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkf_test.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkf_test.m
new file mode 100755
index 0000000..e8d0ad8
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkf_test.m
@@ -0,0 +1,43 @@
1function [H,h] = make_filter(txture,sze,n_c,a,b,c)
2% function H = make_filter(txture,sze)
3%
4%
5
6x = zeros(sze);
7tx_sze = size(txture);
8
9x(1:tx_sze(1),1:tx_sze(2)) = txture;
10%figure(1);imagesc(x);drawnow;
11x = reshape(x,1,sze(1)*sze(2));
12X = fft(x);
13power = abs(X).^2;
14
15figure(3);plot(power);
16len = length(X);
17
18t = [1:0.5*(length(X)-1),0.5*(length(X)-1):-1:1];
19
20top = max(power);
21if (c == -1),
22 c = top*5.0e-1
23end
24if (n_c == -1),
25 n_c = top*1.0e-1
26end
27
28nois = n_c +c*(exp(-a*(t.^b)));
29if (rem(len,2) == 1),
30 noise = [c+n_c,nois];
31else
32 noise = [c+n_c,nois,c+n_c];
33end
34
35figure(3);hold on;plot(noise,'r');
36hold off
37H = X./(abs(X).^2+noise);
38h = reshape(real(ifft(H)),sze(1),sze(2));
39figure(2);imagesc(h);
40
41figure(4);plot(abs(H).^2,'c')
42%figure(3); mesh(h);
43
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkg.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkg.m
new file mode 100755
index 0000000..1fb1f7e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkg.m
@@ -0,0 +1,9 @@
1function g= mkgaussian(xo,yo,sigma_x,sigma_y,size_w)
2%
3% function G = mkgaussian(xo,yo,sigma_x,sigma_y,size_w)
4%
5
6size_wh = round(0.5*size_w);
7[x,y] = meshgrid([-size_wh:1:size_wh],[-size_wh:1:size_wh]);
8g = 1/(2*pi*sigma_x*sigma_y)*(exp(-( ((x-xo)/sigma_x).^2 + ((y-yo)/sigma_y).^2)));
9
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkgaussian.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkgaussian.m
new file mode 100755
index 0000000..1213757
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkgaussian.m
@@ -0,0 +1,11 @@
1function G = mkgaussian(xo,yo,sigma_x,sigma_y,size_w)
2%
3% function G = mkgaussian(xo,yo,sigma_x,sigma_y,size_w)
4%
5
6size_wh = round(0.5*size_w);
7
8[x,y] = meshgrid([-size_wh:1:size_wh],[-size_wh:1:size_wh]);
9
10G = 0.5/(sigma_x*sigma_y)*(exp(-( ((x-xo)/sigma_x).^2 + ((y-yo)/sigma).^2)));
11
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkmulfilter.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkmulfilter.m
new file mode 100755
index 0000000..fe501b5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkmulfilter.m
@@ -0,0 +1,52 @@
1function H = make_multi_filter(templates,num_templates,sze,u,noise)
2% function H = make_filter(templates,num_templates,sze,u,noise)
3% templates are column vectors of template
4% sze is the size of the filter
5% u is a vector of specified value
6%
7%
8
9templates_size_x = size(templates,2)/num_templates;
10templates_size_y = size(templates,1);
11
12alpha = 1/num_templates;
13
14X = zeros(num_templates,sze(1)*sze(2));
15Spectrums = zeros(num_templates,sze(1)*sze(2));
16
17
18for k =1:num_templates,
19 tmp = zeros(sze);
20 tmp(1:templates_size_y,1:templates_size_x) =...
21 templates(:,(k-1)*templates_size_x+1:k*templates_size_x);
22 x(k,:) = reshape(tmp,1,sze(1)*sze(2));
23 X(k,:) = fft(x(k,:));
24 Spectrums(k,:) = conj(X(k,:)).*X(k,:);
25end
26
27if num_templates > 1
28 sum_Spect = sum(Spectrums)*alpha;
29else
30 sum_Spect = Spectrums;
31end
32
33for row = 1:num_templates,
34 for column = 1:num_templates,
35
36 A(row,column) = sum( ((conj(X(row,:)).*X(column,:))./...
37 (sum_Spect + noise))')/(sze(1)*sze(2));
38 end
39end
40
41
42epsilon = inv(A)*u;
43
44top = epsilon(1)*X(1,:);
45for k = 2:num_templates,
46 top = top + epsilon(k)*X(k,:);
47end
48
49H = top./(sum_Spect + noise);
50
51
52
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkpoog2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkpoog2.m
new file mode 100755
index 0000000..4bd0366
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mkpoog2.m
@@ -0,0 +1,29 @@
1function doog2 = mkdoog2(sigma_w,r,theta,size_w)
2%
3% function doog2 = mkdoog2(sigma_w,r,theta,size_w)
4%
5%
6
7%scale_base = 2.8814;
8scale_base = 2;
9
10a = -1*scale_base;
11b = 2*scale_base;
12c = -1*scale_base;
13
14sigma_x = r*sigma_w;
15sigma_y = sigma_w;
16
17ya = sigma_w;
18yc = -sigma_w;
19yb = 0;
20
21doog2 = a*mkg(0,ya,sigma_x,sigma_y,size_w) +...
22 b*mkg(0,yb,sigma_x,sigma_y,size_w) +...
23 c*mkg(0,yc,sigma_x,sigma_y,size_w);
24
25figure(3);colormap(hsv);
26subplot(1,3,1);mesh(a*mkg(0,ya,sigma_x,sigma_y,size_w));
27subplot(1,3,2);mesh(b*mkg(0,yb,sigma_x,sigma_y,size_w));
28subplot(1,3,3);mesh(c*mkg(0,yc,sigma_x,sigma_y,size_w));
29%doog2 = 255*5.1745*doog2;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mksgn.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mksgn.m
new file mode 100755
index 0000000..15f947b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mksgn.m
@@ -0,0 +1,10 @@
1function sgn = makesgn(sigma,sigma_x,sze)
2
3
4size_wh = round(0.5*sze);
5[x,y] = meshgrid([-size_wh:1:size_wh],[-size_wh:1:size_wh]);
6steps = 1/(1+2*sigma_x);
7
8fx = -1*(x<=-sigma_x) + (x>=sigma_x) + steps*((x+sigma_x).*(x>-sigma_x).*(x<sigma_x));
9
10sgn = fx.*(exp(- (y.*y)/(2*sigma))); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mksgn2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mksgn2.m
new file mode 100755
index 0000000..857360b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mksgn2.m
@@ -0,0 +1,9 @@
1function sgn = makesgn(sigma,sigma_x,sze)
2
3
4size_wh = round(0.5*sze);
5[x,y] = meshgrid([-size_wh(2):1:size_wh(2)],[-size_wh(1):1:size_wh(1)]);
6steps = 1/(1+sigma_x);
7
8fx = steps*((x+sigma_x).*(x>-sigma_x).*(x<1)) + steps*(sigma_x-x).*(x<sigma_x).*(x>=1);
9sgn = fx.*(exp(- (y.*y)/(2*sigma))); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mreadpfm.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mreadpfm.m
new file mode 100755
index 0000000..cf68a01
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mreadpfm.m
@@ -0,0 +1,11 @@
1function I = read_pfm(filename)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',2)
6I = fscanf(fid,'%f',[A(1),A(2)]);
7
8
9I = I';
10size(I);
11fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mreadpfm2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mreadpfm2.m
new file mode 100755
index 0000000..c01b25b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mreadpfm2.m
@@ -0,0 +1,9 @@
1function I = read_pfm(filename)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',2)
6I = fscanf(fid,'%f',[A(1),A(2)]);
7
8
9fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mwis.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mwis.m
new file mode 100755
index 0000000..95de8f6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mwis.m
@@ -0,0 +1,16 @@
1function [l1,l2,phi] = mwis(gx,gy)
2%
3% [l1,l2,phi] = mwis(gx,gy)
4%
5%
6
7sgx = sum(sum(gx.*gx));
8sgxy = sum(sum(gx.*gy));
9sgy = sum(sum(gy.*gy));
10
11tr = sgx + sgy;
12v1 = 0.5*sqrt(tr*tr - 4*(sgx*sgy-sgxy*sgxy));
13l1 = real(0.5*tr+v1);
14l2 = real(0.5*tr-v1);
15
16phi= 0.5*atan2(2*sgxy,sgx-sgy);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mwis_image.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mwis_image.m
new file mode 100755
index 0000000..c8e8b66
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/mwis_image.m
@@ -0,0 +1,25 @@
1function [l1,l2,phi] = mwis_image(gx,gy,hs)
2%
3% [l1,l2,phi] = mwis_image(gx,gy)
4%
5%
6
7if (~exist('hs')),
8 hs = 10;
9end
10
11
12sgx = gx.*gx;
13sgxy = gx.*gy;
14sgy = gy.*gy;
15
16ssgx = smooth(sgx,hs);
17ssgxy = smooth(sgxy,hs);
18ssgy = smooth(sgy,hs);
19
20tr = ssgx + ssgy;
21v1 = 0.5*sqrt(tr.*tr - 4*(ssgx.*ssgy-ssgxy.*ssgxy));
22l1 = real(0.5*tr+v1);
23l2 = real(0.5*tr-v1);
24
25phi= 0.5*atan2(2*sgxy,sgx-sgy);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/myinterp.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/myinterp.m
new file mode 100755
index 0000000..6d8f055
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/myinterp.m
@@ -0,0 +1,18 @@
1function y = myinterp(d,rate)
2%
3
4
5if (size(d,1)>1),
6 d = [d;d(1)];
7else
8 d = [d,d(1)];
9end
10
11lgn = length(d);
12
13x = 1:lgn;
14xx = linspace(1,lgn,rate*lgn);
15
16y = interp1(x,d,xx,'linear');
17
18y = y(1:(length(y)-1));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/ncut_b.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/ncut_b.m
new file mode 100755
index 0000000..c9eee35
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/ncut_b.m
@@ -0,0 +1,25 @@
1function [v,d] = ncut(A,nv)
2
3ds = sum(A);
4ds = ones(size(ds))./sqrt(ds);
5
6for j=1:size(A,1),
7 A(j,:) = A(j,:).*ds;
8end
9
10for j=1:size(A,2);
11 A(:,j) = A(:,j).*ds';
12end
13
14%D1 = ds'*ones(1,length(ds));
15%A = D1'.*A.*D1;
16
17disp(sprintf('computing eig values'));
18tic;[v,d] = eigs(A,nv);toc;
19
20d = abs(diag(d));
21
22for j=1:nv,
23 v(:,j) = v(:,j).*ds';
24end
25%v = D1(:,1:size(v,2)).*v;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/new_compute_J.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/new_compute_J.m
new file mode 100755
index 0000000..f4e376a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/new_compute_J.m
@@ -0,0 +1,32 @@
1function [JJ,mask] = compute_J(A,D,I,center,window_size_h)
2%% function J = compute_J(A,D,I,center,window_size_h)
3%
4
5[size_y,size_x] = size(I);
6
7center_x = center(1);
8center_y = center(2);
9
10XX = meshgrid(1:size_x,1:size_y);
11YY = meshgrid(1:size_y,1:size_x)';
12x = reshape(XX,size_x*size_y,1);
13y = reshape(YY,size_x*size_y,1);
14index(:,1) = x-center_x;
15index(:,2) = y-center_y;
16
17position_new = A*index'+ [D(1),0;0,D(2)]*ones(2,size_x*size_y);
18position_new(1,:) = position_new(1,:)+center_x;
19position_new(2,:) = position_new(2,:)+center_y;
20
21position_new_x = reshape(position_new(1,:),size_y,size_x);
22position_new_y = reshape(position_new(2,:),size_y,size_x);
23
24[J,mask]= m_interp4(I,position_new_x,position_new_y);
25
26JJ = J(center(2)-window_size_h(2):center(2)+window_size_h(2),...
27 center(1)-window_size_h(1):center(1)+window_size_h(1));
28mask = mask(center(2)-window_size_h(2):center(2)+window_size_h(2),...
29 center(1)-window_size_h(1):center(1)+window_size_h(1));
30
31
32
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist.m
new file mode 100755
index 0000000..f8dbd32
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist.m
@@ -0,0 +1,45 @@
1function A = apply_image(gx,gy,I,wc)
2%
3% aout = apply_image(gx,gy,wc)
4%
5%
6
7[nr,nc] =size(gx);
8
9w = 2*wc+1;
10
11s1 = floor(nr/w);
12s2 = floor(nc/w);
13
14A = zeros(s1*s2,s1*s2);
15
16yid = 0;
17for j=wc+1:w:nr-wc-1,
18 yid = yid+1;
19 xid = 0;
20 for k=wc+1:w:nc-wc-1,
21 xid = xid + 1;
22 c1 = [k,j];
23
24 yyid = 0;
25 fprintf('.');
26 for jj=wc+1:w:nr-wc-1,
27 yyid = yyid+1;
28 xxid = 0;
29 for kk=wc+1:w:nc-wc-1,
30 xxid = xxid + 1;
31
32 c2 = [kk,jj];
33
34 a = compute_diff_patch(get_win(gx,c1,[wc,wc]),...
35 get_win(gy,c1,[wc,wc]),...
36 get_win(gx,c2,[wc,wc]),...
37 get_win(gy,c2,[wc,wc]),...
38 get_win(I,c1,[wc,wc]),...
39 get_win(I,c2,[wc,wc]));
40
41 A(yid+(xid-1)*s1,yyid+(xxid-1)*s1) = a;
42 end
43 end
44 end
45end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist2.m
new file mode 100755
index 0000000..dc31469
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist2.m
@@ -0,0 +1,46 @@
1function A = apply_image(gx,gy,I,wc)
2%
3% aout = apply_image(gx,gy,wc)
4%
5%
6
7[nr,nc] =size(gx);
8
9w = 2*wc+1;
10
11lws = 4;
12
13s1 = floor(nr/w);
14s2 = floor(nc/w);
15
16A = zeros(s1*s2,s1*s2);
17
18for j=1:s1,
19 for k=1:s2,
20 c1 = [(wc+1)+(k-1)*w,(wc+1)+(j-1)*w];
21 fprintf('.');
22
23 for jj=j-lws:j+lws,
24 for kk=k-lws:k+lws,
25
26 c2 = [(wc+1)+(kk-1)*w,(wc+1)+(jj-1)*w];
27 if ( (jj>0) & (kk>0) & (jj <= s1) & (kk <= s2))
28 a = compute_diff_patch(get_win(gx,c1,[wc,wc]),...
29 get_win(gy,c1,[wc,wc]),...
30 get_win(gx,c2,[wc,wc]),...
31 get_win(gy,c2,[wc,wc]),...
32 get_win(I,c1,[wc,wc]),...
33 get_win(I,c2,[wc,wc]));
34
35 dx = abs(k-kk);dy = abs(j-jj);
36 sp_diff = exp(-sqrt(dx.^2+dy.^2)/4);
37 A(j+(k-1)*s1,jj+(kk-1)*s1) = a*sp_diff;
38
39 end
40
41 end
42 end
43 end
44end
45
46
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text.m
new file mode 100755
index 0000000..5cdb201
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text.m
@@ -0,0 +1,70 @@
1function A = apply_image(I,bars,wc)
2%
3% aout = apply_image(gx,gy,wc)
4%
5%
6
7[nr,nc] =size(I);
8
9w = 2*wc+1;
10
11lws = 4;
12
13gap = 10;
14
15s1 = floor((nr-w)/gap);
16s2 = floor((nc-w)/gap);
17
18A = zeros(s1*s2,s1*s2);
19
20sigma.text = 0.20;
21sigma.mag = 0.20;
22sigma.inten = 0.15;
23
24for j=1:s1,
25 for k=1:s2,
26
27
28 c1 = [(wc+1)+(k-1)*gap,(wc+1)+(j-1)*gap];
29 fprintf('.');
30 for jj=j-lws:j+lws,
31 for kk=k-lws:k+lws,
32
33 c2 = [(wc+1)+(kk-1)*gap,(wc+1)+(jj-1)*gap];
34 if ( (jj>0) & (kk>0) & (jj <= s1) & (kk <= s2)),
35
36 J1 = get_win(I,c1,[wc,wc]);
37 J2 = get_win(I,c2,[wc,wc]);
38
39 Jbars1 = get_win5(bars,c1,[wc,wc]);
40 Jbars2 = get_win5(bars,c2,[wc,wc]);
41
42
43 hists1 = get_hist(J1,Jbars1);
44 hists2 = get_hist(J2,Jbars2);
45
46 cumhists1 = get_cumhist(hists1);
47 cumhists2 = get_cumhist(hists2);
48
49
50 diff.inten = max(abs(cumhists1.inten-cumhists2.inten));
51 diff.mag = max(abs(cumhists1.mag-cumhists2.mag));
52 diff.text = max(max(abs(cumhists1.text-cumhists2.text)));
53
54 diffs = max([diff.inten/sigma.inten,...
55 diff.mag/sigma.mag,...
56 diff.text/sigma.text]);
57
58 dx = abs(k-kk);dy = abs(j-jj);
59 sp_diff = sqrt(dx.^2+dy.^2)/4;
60
61 A(j+(k-1)*s1,jj+(kk-1)*s1) = exp(-diffs-sp_diff);
62
63 end
64
65 end
66 end
67 end
68end
69
70
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text2.m
new file mode 100755
index 0000000..5c6e0d4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text2.m
@@ -0,0 +1,58 @@
1function A = apply_image(I,bars,wc)
2%
3% aout = apply_image(gx,gy,wc)
4%
5%
6
7[nr,nc] =size(I);
8
9w = 2*wc+1;
10
11lws = 4;
12
13gap = 10;
14
15mag = sum(bars,3);
16
17s1 = floor((nr-w)/gap)
18s2 = floor((nc-w)/gap)
19
20A = zeros(s1*s2,s1*s2);
21
22sigma.text = 0.20;
23sigma.mag = 0.20;
24sigma.inten = 0.15;
25
26for j=1:s1,
27 for k=1:s2,
28
29
30 c1 = [(wc+1)+(k-1)*gap,(wc+1)+(j-1)*gap];
31 fprintf('.');
32 for jj=j-lws:j+lws,
33 for kk=k-lws:k+lws,
34
35 c2 = [(wc+1)+(kk-1)*gap,(wc+1)+(jj-1)*gap];
36 if ( (jj>0) & (kk>0) & (jj <= s1) & (kk <= s2)),
37
38 ces = [c1,c2]-wc;
39 cum = compute_dist_hist(I,mag,bars,[ces,w]);
40
41 diffs = max([cum(1)/sigma.inten,...
42 cum(2)/sigma.mag,...
43 cum(3)/sigma.text]);
44
45 dx = abs(k-kk);dy = abs(j-jj);
46 sp_diff = sqrt(dx.^2+dy.^2)/4;
47
48 A(j+(k-1)*s1,jj+(kk-1)*s1) = exp(-diffs-sp_diff);
49
50 end
51
52 end
53 end
54
55 end
56end
57
58
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text3.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text3.m
new file mode 100755
index 0000000..a7ff408
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text3.m
@@ -0,0 +1,84 @@
1function [A,D] = pair_dist_text3(Cum,cumhists)
2%
3% A = pair_dist_text3(Cum,cumhists);
4%
5%
6
7s1 = Cum(2);
8s2 = Cum(1);
9
10st = Cum(3) + Cum(4) + 1;
11ed = size(cumhists,1);
12
13cumhists = cumhists(st:ed,:);
14
15np = size(cumhists,2);
16
17sigma.text = 0.20;
18sigma.mag = 0.20;
19sigma.inten = 0.15;
20
21lws = 4;
22
23
24k = sqrt(2)/2;
25M = 8*6;
26N = k*sqrt(M);
27
28r1 = 0.001;
29r2 = 0.001;
30
31c = N/(1+ (sqrt(1-0.5*(r1*r1+r2*r2)))*(0.25-0.75/N));
32
33D = zeros(1,s1*s2);
34
35nn = 1;
36for j =1:s1,
37 for k=1:s2,
38
39 id = j*s2+k;
40
41 cum_filter1 = reshape(cumhists(:,id),8,6)';
42 [na1,nb1,nc1,nd1] = ks_2d(cum_filter1);
43
44
45 fprintf('.');
46 for jj=j-lws:j+lws,
47 for kk=k-lws:k+lws,
48
49 if ( (jj>0) & (kk>0) & (jj <= s1) & (kk <= s2)),
50
51 idn = jj*s2+k;
52
53 cum_filter2 = reshape(cumhists(:,idn),8,6)';
54 [na2,nb2,nc2,nd2] = ks_2d(cum_filter2);
55
56
57 diffa = abs(na2-na1);diffb =abs(nb2-nb1);
58 diffc = abs(nc2-nc1);diffd = abs(nd2-nd1);
59 maxs(1) = max(max(diffa));maxs(2) = max(max(diffb));
60 maxs(3) = max(max(diffc));maxs(4) = max(max(diffd));
61
62
63 maxs = maxs/6;
64
65 d = min(1,signif(c*max(maxs)));
66
67 ids(nn) = id;
68 idns(nn) = idn;
69 B(nn) = d;
70
71 D(id) = D(id) + d;
72 D(idn) = D(idn) + d;
73
74 nn = nn+1;
75
76 end
77
78 end
79 end
80
81 end
82end
83
84A = sparse(ids,idns,b);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text4.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text4.m
new file mode 100755
index 0000000..83f3d49
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pair_dist_text4.m
@@ -0,0 +1,81 @@
1function [A] = pair_dist_text4(Iw,Cresult,cso)
2%
3% A = pair_dist_text3(Cum,cumhists);
4%
5%
6
7%s1 = Cum(2);s2 = Cum(1);
8
9figure(1);hold on;plot(cso(1),cso(2),'bo');
10
11ws = [10,10];
12
13lws = 3;
14gap = 7;
15
16J1 = get_win(Iw,round(cso),ws);
17Jbar1 = abs(get_win5(Cresult,round(cso),ws));
18hists1 = get_hist(J1,Jbar1);
19cumhists1 = get_cumhist(hists1);
20[na1,nb1,nc1,nd1] = ks_2d(cumhists1.text');
21
22figure(4);colormap(gray);
23imagesc(reshape(abs(Jbar1),size(Jbar1,1),size(Jbar1,2)*size(Jbar1,3)));
24colorbar;axis('image');drawnow;
25
26figure(2);
27subplot(2,5,1);imagesc(J1);%colormap(gray)
28subplot(2,5,2);imagesc(hists1.text');title('hist_1');colorbar;
29subplot(2,5,3);imagesc(cumhists1.text');title('cumhist_1');colorbar;
30subplot(2,5,4);imagesc(nc1);title('nc_1');colorbar
31subplot(2,5,5);imagesc(nb1);title('nb_1');colorbar
32drawnow;
33
34k = sqrt(2)/2;M = prod(size(cumhists1.text));
35N = k*sqrt(M);
36r1 = 0.001;r2 = 0.001;
37con = N/(1+ (sqrt(1-0.5*(r1*r1+r2*r2)))*(0.25-0.75/N));
38
39jid = 1;
40for jj=cso(2)-lws*gap:gap:cso(2)+lws*gap,
41 kid = 1;
42 for kk=cso(1)-lws*gap:gap:cso(1)+lws*gap,
43
44 figure(1);hold on; plot(kk,jj,'r*');drawnow;
45
46 J2 = get_win(Iw,round([kk,jj]),ws);
47 Jbar2 = get_win5(Cresult,round([kk,jj]),ws);
48
49 hists2 = get_hist(J2,Jbar2);
50 cumhists2 = get_cumhist(hists2);
51 [na2,nb2,nc2,nd2] = ks_2d(cumhists2.text');
52
53 figure(2);
54 subplot(2,5,6);imagesc(J2);%colormap(gray)
55 subplot(2,5,7);imagesc(hists2.text');title('hist_2');colorbar
56 subplot(2,5,8);imagesc(cumhists2.text');title('cumhist_2');colorbar
57
58 diffa = abs(na2-na1);diffb =abs(nb2-nb1);
59 diffc = abs(nc2-nc1);diffd = abs(nd2-nd1);
60
61 maxs(1) = max(max(diffa));maxs(2) = max(max(diffb));
62 maxs(3) = max(max(diffc));maxs(4) = max(max(diffd));
63
64 maxs = maxs/6;for j=1:4, sig(j) = signif(con*maxs(j)); end
65
66 subplot(2,5,9);imagesc(diffc);title('diff_{nc}');colorbar
67 subplot(2,5,10);imagesc(diffb);title('diff_{nb} ');colorbar
68
69 disp(sprintf('max diff is %f\n',min(sig)));
70
71 A(jid,kid) = min(1,min(sig));
72
73 %disp('press return to continue');
74 pause(3);
75
76 kid = kid+1;
77 end
78 jid = jid+1;
79end
80
81figure(1);hold off;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/patch_cat.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/patch_cat.m
new file mode 100755
index 0000000..0bf22c3
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/patch_cat.m
@@ -0,0 +1,9 @@
1function T = patch_cat(dotfilter,text_des)
2
3T(:,:,2:7,:) = text_des;
4clear text_des;
5
6for k=1:size(T,4),
7 T(:,:,1,k) = dotfilter(:,:,1,k);
8end
9
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pgmread.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pgmread.m
new file mode 100755
index 0000000..620408a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/pgmread.m
@@ -0,0 +1,15 @@
1function img = pgmread(filename,size)
2% function img = pgmread(filename)
3% this is my version of pgmread for the pgm file created by XV.
4%
5% this program also corrects for the shifts in the image from pm file.
6
7fid = fopen(filename,'r');
8
9for j=1:4,
10 a = fgetl(fid);
11end
12
13img = fscanf(fid,'%d',size);
14img = img';
15
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/poisson.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/poisson.m
new file mode 100755
index 0000000..99d49b6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/poisson.m
@@ -0,0 +1,44 @@
1function [x] = Poisson(lambda);
2%Poisson generates a random variable with a Poisson
3% distribution
4% Pr(x = n) = lambda^n exp(-lambda)/n
5%
6% [x] = Poisson(lambda);
7% lambda: the parameter for the Poisson distribution
8% (default is 1)
9% x : the output number
10%
11
12%%
13%% (C) Thomas K. Leung
14%% University of California at Berkeley
15%% Apr 25, 1995.
16%%
17
18%%% Notice that in this implementation, we are comparing log(Z) with
19%%% T. In fact, we can compare T = exp(-lambda) with Z, which will
20%%% save us from computing a large number of log's. However, when
21%%% lambda is bigger than 709, exp(-lambda) = 0, which causes problem.
22
23if nargin == 0
24 lambda = 1;
25end
26
27if lambda < 0
28 lambda = 1;
29end
30
31P = 0;
32N = 0;
33T = -lambda;
34
35rand('seed',sum(100*clock));
36
37while P >= T
38 Z = rand(1);
39 P = P + log(Z);
40 N = N + 1;
41end
42
43x = N;
44
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/poissonfield.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/poissonfield.m
new file mode 100755
index 0000000..8051867
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/poissonfield.m
@@ -0,0 +1,53 @@
1function [x,y,success] = PoissonField(int,sx,sy,ir);
2%BF_HardCore Generates a hard core Poisson field
3% [x,y] = Poisson_HC(int,ir,sx,sy);
4% int: intensity of the field. (default is 1)
5% ir : inhibition radius (default is 1)
6% sx : size in x (default 100)
7% sy : size in y (default 100)
8% x : x coordinates
9% y : y coordinates
10%
11
12%%
13%% (C) Thomas K. Leung
14%% University of California at Berkeley
15%% April 26, 1995.
16%% leungt@cajal.cs.berkeley.edu
17%%
18
19%%
20%% Generate each point in sequence and reject it if it's too close to
21%% previous ones.
22%%
23
24if nargin <= 0
25 int = 1;
26 sx = 100;
27 sy = 100;
28 ir = 0;
29elseif nargin <= 1
30 sx = 100;
31 sy = 100;
32 ir = 0;
33elseif nargin <= 2
34 sy = 100;
35 ir = 0;
36elseif nargin <= 3
37 ir = 0;
38end
39
40%%
41%% Notice that the average number of a poisson process is the
42%% parameter lambda. This is consistent with our definition of the
43%% intensity here. Intensity is the mean number of points inside each
44%% unit area. Therefore, in a window of sx by sy, we should get
45%% int*sx*sy number of points on average which is the mean number of
46%% arrivals in a Poisson Process
47%%
48
49[n] = poisson(int * sx * sy);
50
51[x,y,success] = binomialfield(n,sx,sy,ir);
52
53
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/proj_back.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/proj_back.m
new file mode 100755
index 0000000..069fe61
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/proj_back.m
@@ -0,0 +1,24 @@
1function mask = proj_back(I,hw,mask_s)
2%
3% mask = proj_back(I,hw,mask_s)
4%
5%
6
7
8[nr,nc] = size(I2);
9
10hw = 3;
11st_sz = 2*hw + 1;
12
13nr_chank = floor(nr/st_sz);
14nc_chank = floor(nc/st_sz);
15
16[x,y] = meshgrid(1:nc,1:nr);
17
18ct_chank_x = round((x-hw-1)/st_sz) + 1;
19ct_chank_y = round((y-hw-1)/st_sz) + 1;
20
21idx = (ct_chank_x - 1)*nr_chank + ct_chank_y;
22
23mask = full(sparse(y,x,mask_s(idx(:))));
24
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/proj_back_id.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/proj_back_id.m
new file mode 100755
index 0000000..9db322e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/proj_back_id.m
@@ -0,0 +1,19 @@
1function [vbig,bnr,bnc] = proj_back_id(v,gcs,gce,grs,gre)
2%
3% vbig = proj_back_id(v,gcs,gce,grs,gre)
4%
5
6nr = max(gre)+1;
7nc = max(gce)+1;
8
9sw = 3;
10gap = 2*sw+1;
11
12bnc = nc*gap;
13bnr = nr*gap;
14
15[x,y] = meshgrid(1:bnc,1:bnr);
16
17idx = grs(y(:))+1+gcs(x(:))*nr;
18
19vbig = full(sparse(y(:),x(:),v(idx)));
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/quant.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/quant.m
new file mode 100755
index 0000000..c2dfae6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/quant.m
@@ -0,0 +1,20 @@
1function [x,map] = quant(d1,d2,d3,nbin,ws)
2
3if (~exist('ws')),
4 ws = [1,1,1];
5end
6
7d1 = d1-min(d1);
8d2 = d2-min(d2);
9d3 = d3-min(d3);
10
11d1 = d1/max(d1);
12d2 = d2/max(d2);
13d3 = d3/max(d3);
14
15d1 = d1*ws(1);
16d2 = d2*ws(2);
17d3 = d3*ws(3);
18
19
20[x,map] = vmquant(d1,d2,d3,nbin);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpdm.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpdm.m
new file mode 100755
index 0000000..9a1068e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpdm.m
@@ -0,0 +1,8 @@
1function I = readpfm(filename)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',2);
6I = fscanf(fid,'%d',[A(1),A(2)]);
7
8fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpfm.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpfm.m
new file mode 100755
index 0000000..48ecd78
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpfm.m
@@ -0,0 +1,10 @@
1function I = readpfm(filename)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',2);
6I = fscanf(fid,'%f',[A(1),A(2)]);
7
8%I = fscanf(fid,'%f',A(2)*A(1));I = reshape(I,A(1),A(2));
9
10fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpfm_id.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpfm_id.m
new file mode 100755
index 0000000..5f5c4f7
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpfm_id.m
@@ -0,0 +1,21 @@
1function Is = readpfm(filename,ids,nodes)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',2);
6
7Is = zeros(length(ids),nodes);
8
9ix = 1;
10for j=1:max(ids),
11 I = fscanf(fid,'%f',nodes);
12 if (find(ids==j)),
13 Is(ix,:) = I(:)';
14 ix = ix+1;
15 fprintf('.');
16 end
17end
18
19%I = fscanf(fid,'%f',A(2)*A(1));I = reshape(I,A(1),A(2));
20
21fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpfm_idf.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpfm_idf.m
new file mode 100755
index 0000000..d7916e7
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpfm_idf.m
@@ -0,0 +1,29 @@
1function Is = readpfm(filename,ids,nodes)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',2);
6
7Is = zeros(length(ids),nodes);
8
9idt = sort(ids);
10
11idh = 1;
12
13ix = 1;
14for j=1:length(ids),
15
16 gap = idt(j) - idh;
17 fprintf('%d',gap);
18
19 I = fscanf(fid,'%f',nodes*gap);
20 I = fscanf(fid,'%f',nodes);
21
22 Is(find(ids==idt(j)),:) = I(:)';
23 fprintf('.');
24
25 idh = idt(j)+1;
26end
27
28
29fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpgm.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpgm.m
new file mode 100755
index 0000000..a5fd7f2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpgm.m
@@ -0,0 +1,26 @@
1function img = pgmread(filename)
2% function img = pgmread(filename)
3% this is my version of pgmread for the pgm file created by XV.
4%
5% this program also corrects for the shifts in the image from pm file.
6
7
8fid = fopen(filename,'r');
9fscanf(fid, 'P5\n');
10cmt = '#';
11while findstr(cmt, '#'),
12 cmt = fgets(fid);
13 if length(findstr(cmt, '#')) ~= 1,
14 YX = sscanf(cmt, '%d %d');
15 y = YX(1); x = YX(2);
16 end
17end
18
19fgets(fid);
20
21%img = fscanf(fid,'%d',size);
22%img = img';
23
24img = fread(fid,[y,x],'uint8');
25img = img';
26fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpnm.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpnm.m
new file mode 100755
index 0000000..ab78c2c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readpnm.m
@@ -0,0 +1,21 @@
1function I = readpnm(name)
2
3 fid = fopen(name, 'r');
4 fscanf(fid, 'P5\n');
5 cmt = '#';
6 while findstr(cmt, '#') == 1
7 cmt = fgets(fid);
8 if findstr(cmt, '#') ~= 1
9 YX = sscanf(cmt, '%d %d %d');
10 y = YX(1); x = YX(2); nb = YX(3);
11 end
12 end
13 fgets(fid);
14 packed = fscanf(fid,'%f',[nb*y*x]);
15
16 for j = 1:nb,
17 I(:,:,j) = reshape(packed(j:nb:nb*y*x),y,x)';
18 end
19
20 fclose(fid);
21
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readppm.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readppm.m
new file mode 100755
index 0000000..300f597
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/readppm.m
@@ -0,0 +1,19 @@
1function [r, g, b] = readppm(name)
2
3 fid = fopen(name, 'r');
4 fscanf(fid, 'P6\n');
5 cmt = '#';
6 while findstr(cmt, '#') == 1
7 cmt = fgets(fid);
8 if findstr(cmt, '#') ~= 1
9 YX = sscanf(cmt, '%d %d');
10 y = YX(1); x = YX(2);
11 end
12 end
13 fgets(fid);
14 packed = fread(fid,[3*y,x],'uint8')';
15 r = packed(:,1:3:3*y);
16 g = packed(:,2:3:3*y);
17 b = packed(:,3:3:3*y);
18 fclose(fid);
19
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/record.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/record.m
new file mode 100755
index 0000000..9626038
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/record.m
@@ -0,0 +1,6 @@
1load patch1;
2doog2 = mkdoog2(2,10,0,80);
3dog2 = rotate_J(90,doog2);
4
5H = mkf_test(dog2,size(patch1),-1,0.00001,2,-1);
6o = BfilterS(patch1,H,size(dog));figure(4);colormap(gray);imagesc(o.*(o>0)); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/recursive_cut_tc.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/recursive_cut_tc.m
new file mode 100755
index 0000000..a8c9362
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/recursive_cut_tc.m
@@ -0,0 +1,140 @@
1%function [groups,ids] = recursive_cut(ncutv,fn_base)
2%
3%
4% function [groups,ids] = recursive_cut(ncutv,threshold,spthresh)
5%
6%
7
8ncutv= ncutv_o(:,1:4);
9
10fn_base = fn;
11%fn_base = '130040';
12
13nvv = size(ncutv_o,2);
14nbin = 24;
15
16ids = [];
17groups = [];
18labels = [];
19
20load cmaps
21cmap = cmapg;
22
23j = 1;
24done = 0;
25np = size(ncutv,1);
26nv = size(ncutv,2);
27
28%%%%%% find the cut for the first ncut vector
29ev_id = 2;
30para = [nvv ev_id nr nc 100];
31Gmask = ones(nr,nc);
32%threshold = find_cutpoint(ncutv(:,ev_id),cmapg,nbin);threshold = threshold(1:end-1);
33threshold = linspace(min(ncutv(:,ev_id)),max(ncutv(:,ev_id)),nbin);
34[cut_threshold,max_asso] = find_bst_cut(fn_base,para,threshold,Gmask);
35disp(max_asso);
36
37id1 = find(ncutv(:,ev_id)<=cut_threshold);
38id2 = find(ncutv(:,ev_id)>cut_threshold);
39
40groups = [groups,id1(:)'];
41ids = [ids,length(id1)];
42
43groups = [groups,id2(:)'];
44ids = [ids,length(groups)];
45
46
47for j=3:nv,
48 fprintf('j = %d\n',j);
49 % expand the current level,
50 new_groups = [];
51 new_ids = [];
52
53
54 figure(4);ims(ncutv(:,j),nr,nc);title(num2str(j));
55
56 figure(1);clf
57 disp_groups(groups,ids,nr,nc);
58 drawnow;
59
60 %figure(3);
61 % for each leaves,
62 mx = max(ncutv(:,j))-min(ncutv(:,j));
63 %mx = std(ncutv(:,j));
64
65 base_id =1;
66 for k=1:length(ids),
67 old_groups = groups(base_id:ids(k));
68
69 v = ncutv(old_groups,j);
70 change_v = max(v)-min(v);
71 %change_v = std(v);
72 n1 = sum(v>(min(v)+0.85*change_v));%n1 = n1/length(old_groups);
73 n2 = sum(v<=(min(v)+0.15*change_v));%n2 = n2/length(old_groups);
74 disp(sprintf('n1 = %f, n2 = %f',n1,n2));
75
76 figure(2);
77 Gmask = zeros(np,1);
78 Gmask(old_groups) = Gmask(old_groups)+1;
79 drawnow;
80 ims(ncutv(:,j).*Gmask,nr,nc);
81
82 disp(sprintf('!!!!!!!!!!!!!RATIO= %f',change_v/mx))
83
84 %pause;
85
86 if (((change_v/mx)>0.5) & (n1>10) &(n2>10)),
87
88 ev_id = j;
89
90 %threshold = find_cutpoint(ncutv(old_groups,ev_id),cmapg,nbin);threshold = threshold(1:end-1);
91 threshold = linspace(min(ncutv(:,ev_id)),max(ncutv(:,ev_id)),nbin);
92 para = [nvv ev_id nr nc 100];
93 [cut_threshold,max_asso] = find_bst_cut(fn_base,para,threshold,Gmask);
94
95 disp(max_asso);
96
97 if (max_asso>1.2),
98 id1 = find(ncutv(old_groups,ev_id)<=cut_threshold);
99 id2 = find(ncutv(old_groups,ev_id)>cut_threshold);
100
101 figure(5);
102 subplot(1,2,1);maskt= zeros(np,1);maskt(old_groups(id1))=1+maskt(old_groups(id1));ims(maskt,nr,nc);
103 subplot(1,2,2);maskt= zeros(np,1);maskt(old_groups(id2))=1+maskt(old_groups(id2));ims(maskt,nr,nc);
104
105 new_groups = [new_groups,old_groups(id1)];
106 new_ids = [new_ids,length(new_groups)];
107
108
109 new_groups = [new_groups,old_groups(id2)];
110 new_ids = [new_ids,length(new_groups)];
111 else
112 fprintf(' keep ');
113 new_groups = [new_groups,old_groups];
114 new_ids = [new_ids,length(new_groups)];
115 end
116
117 else
118 fprintf(' keep ');
119 new_groups = [new_groups,old_groups];
120 new_ids = [new_ids,length(new_groups)];
121 end
122 fprintf('\n');
123 base_id = ids(k) + 1;
124 end
125
126
127
128 groups = new_groups;
129 ids = new_ids;
130
131 figure(1);disp_groups(groups,ids,nr,nc);
132
133 fprintf('press return\n');
134 pause;
135 j= j+1;
136end
137
138fprintf('total group = %d \n',length(ids));
139
140
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/reduce_all.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/reduce_all.m
new file mode 100755
index 0000000..d7d31f8
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/reduce_all.m
@@ -0,0 +1,8 @@
1function b = reduce_all(a)
2
3numband = size(a,3);
4
5for j=1:numband,
6
7 b(:,:,j) = reduce(a(:,:,j));
8end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/rotate_J.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/rotate_J.m
new file mode 100755
index 0000000..12f29b6
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/rotate_J.m
@@ -0,0 +1,30 @@
1function J = compute_J(angle,I)
2%% function J = compute_J(angle,I)
3%
4
5[size_y,size_x] = size(I);
6
7[center_x,center_y] = find_center(size_x,size_y);
8
9a = angle * pi/180;
10A = [cos(a),-sin(a);sin(a),cos(a)];
11
12[XX,YY] = meshgrid(1:size_x,1:size_y);
13
14x = reshape(XX,size_x*size_y,1);
15y = reshape(YY,size_x*size_y,1);
16index(:,1) = x-center_x;
17index(:,2) = y-center_y;
18
19position_new = A*index';
20position_new(1,:) = position_new(1,:)+center_x;
21position_new(2,:) = position_new(2,:)+center_y;
22
23position_new_x = reshape(position_new(1,:),size_y,size_x);
24position_new_y = reshape(position_new(2,:),size_y,size_x);
25
26J = m_interp4(I,position_new_x,position_new_y);
27
28
29
30
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/session.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/session.m
new file mode 100755
index 0000000..70fabbf
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/session.m
@@ -0,0 +1,4 @@
1t = rj(1:50,19:50); tt = interp4(t,1);
2sgn = mksgn2(182,2,[91,9]);
3H = mkf_test(sgn,size(tt),1,0.01,2,300);
4o = BfilterS(tt,H,size(sgn));figure(1);imagesc(o.*(o>0));axis('equal');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/show_cumhist.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/show_cumhist.m
new file mode 100755
index 0000000..fe82e64
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/show_cumhist.m
@@ -0,0 +1,28 @@
1function show_hist(cumhists,bins,fig_id,hold_flag,ct)
2%%
3% show_hist(cumhists,bins,fig_id,ct)
4%
5%
6
7 if (~exist('ct')),
8 ct = 'b-o';
9 end
10
11 figure(fig_id);
12
13 subplot(3,3,1);plot(bins.inten,cumhists.inten,ct);
14
15 if (hold_flag == 1), hold on;else hold off; end
16
17 for j=1:size(cumhists.text,2),
18 subplot(3,3,1+j);
19 plot(bins.text,cumhists.text(:,j),ct);
20 if (hold_flag == 1), hold on;else hold off; end
21 end
22
23 subplot(3,3,8);
24 plot(bins.mag,cumhists.mag,ct);
25 if (hold_flag == 1), hold on;else hold off; end
26
27
28
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/show_hist.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/show_hist.m
new file mode 100755
index 0000000..efaf899
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/show_hist.m
@@ -0,0 +1,23 @@
1function show_hist(hists,bins,fig_id)
2%%
3% show_hist(hists,bins,fig_id)
4%
5%
6
7 figure(fig_id);
8
9 subplot(3,3,1);bar(bins.inten,hists.inten);
10
11 %maxval = max(max(max(abs(Jbar))));
12
13 for j=1:size(hists.text,2),
14 subplot(3,3,1+j);% hist(reshape(abs(Jbar(:,:,j)),prod(w),1),[1:10:maxval+1]);
15 bar(bins.text,hists.text(:,j));
16 end
17
18 subplot(3,3,8);%hist(reshape(sum(abs(Jbar),3),prod(w),1),[1:10:161]);
19 bar(bins.mag,hists.mag);
20
21
22
23
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/showsmm.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/showsmm.m
new file mode 100755
index 0000000..1833062
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/showsmm.m
@@ -0,0 +1,45 @@
1function [T,A,M2,TAM]=showsmm(L1,L2,phi,maxM);
2% [T,A,M]=showsmm(L1,L2,phi,maxM);
3
4if (~exist('maxM')),
5% needs to know upper bound on M for given window function in smm
6maxM=0.18; % temporary
7end
8
9
10A=1-L2./(L1+eps);
11T=2*(phi+pi/2)/(2*pi);
12M=L1+L2;
13M2=min(M/maxM,1); % keep it from exceeding 1
14%M2 = sigmoid(M,maxM,30);
15
16matlab5on = 1;
17
18if matlab5on == 1,
19 TAM=hsv2rgb(T,A,M2);
20
21 figure(3);
22 image(TAM);
23 axis('tightequal');
24else
25 H = [reshape(T,prod(size(T)),1),...
26 reshape(A,prod(size(A)),1),...
27 reshape(M2,prod(size(M2)),1)];
28 M = hsv2rgb(H);
29 [Ic,map] =vmquant(M(:,1),M(:,2),M(:,3),256);
30
31 image(reshape(Ic,size(T,1),size(T,2)));colormap(map);
32end
33
34if 0
35 plot3(A(:).*M(:).*cos(2*pi*T(:)),A(:).*M(:).*sin(2*pi*T(:)),M(:),'.','markersize',15)
36 axis([-1 1 -1 1 0 1])
37 [x,y,z] = cylinder(ones(1,5));
38 x=x.*z;
39 y=y.*z;
40 hold on
41 h=mesh(x,y,z);
42 set(h,'edgecolor',[.2 .2 .2]);
43 hidden off
44 hold off
45end \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/showsmm_v5.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/showsmm_v5.m
new file mode 100755
index 0000000..937303d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/showsmm_v5.m
@@ -0,0 +1,34 @@
1function [T,A,M2,TAM]=showsmm(L1,L2,phi,maxM);
2% [T,A,M]=showsmm(L1,L2,phi,maxM);
3
4if (~exist('maxM')),
5% needs to know upper bound on M for given window function in smm
6maxM=0.18; % temporary
7end
8
9
10A=1-L2./(L1+eps);
11T=2*(phi+pi/2)/(2*pi);
12M=L1+L2;
13M2=min(M/maxM,1); % keep it from exceeding 1
14%M2 = sigmoid(M,maxM,30);
15
16 TAM=hsv2rgb(T,A,M2);
17
18 figure(3);
19 image(TAM);
20 axis('tightequal');
21
22
23if 0
24 plot3(A(:).*M(:).*cos(2*pi*T(:)),A(:).*M(:).*sin(2*pi*T(:)),M(:),'.','markersize',15)
25 axis([-1 1 -1 1 0 1])
26 [x,y,z] = cylinder(ones(1,5));
27 x=x.*z;
28 y=y.*z;
29 hold on
30 h=mesh(x,y,z);
31 set(h,'edgecolor',[.2 .2 .2]);
32 hidden off
33 hold off
34end \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/sigmoid.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/sigmoid.m
new file mode 100755
index 0000000..996f7fe
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/sigmoid.m
@@ -0,0 +1,10 @@
1function a = sigmoid(x,offset,sig)
2%
3% a = sigmoid(x,offset,sig)
4%
5% a = ones(size(x))./(1+exp(-(x-offset)/sig));
6%
7
8
9a = ones(size(x))./(1+exp(-(x-offset)/sig));
10
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/signif.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/signif.m
new file mode 100755
index 0000000..f49eefc
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/signif.m
@@ -0,0 +1,22 @@
1function a = signif(b)
2
3js = [1:101];
4
5
6if 0,
7d = (-ones(size(js))).^(js-1);
8d1 = exp(-2*(js.*js)*b*b);
9
10a = 2*sum(d.*d1);
11
12end
13
14d1 = exp(-2*(js.*js)*b*b);
15d2 = 4*(js.*js)*b*b - 1;
16
17a = 2*sum(d1.*d2);
18
19if (b<0.03),a = 1;end
20
21
22
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/signif_N.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/signif_N.m
new file mode 100755
index 0000000..82dc914
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/signif_N.m
@@ -0,0 +1,10 @@
1function a = signif_N(b,N)
2%
3%
4%
5
6Ne = sqrt(N*0.5);
7
8cof = Ne + 0.155 + 0.24/Ne;
9
10a= signif(cof*b);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/smooth.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/smooth.m
new file mode 100755
index 0000000..919b53a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/smooth.m
@@ -0,0 +1,20 @@
1% smooth an image
2% coordinates (r, c) follow matrix convention;
3% the gaussian is truncated at x = +- tail, and there are samples samples
4% inbetween, where samples = hsamples * 2 + 1
5
6function g = smooth(image, hsamples)
7
8tail=4;
9samples = hsamples * 2 + 1;
10
11x = linspace(-tail, tail, samples);
12gauss = exp(-x.^2);
13n = gauss * ones(samples,1);
14gauss = gauss/n;
15
16
17g = conv2(conv2(image, gauss), gauss');
18
19g = conv_trim(g, hsamples, hsamples);
20
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/startup.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/startup.m
new file mode 100755
index 0000000..8d38803
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/startup.m
@@ -0,0 +1,9 @@
1%path(path,'/usr/sww/matlab-4.2c/toolbox/images');
2home_dir = '/home/barad-dur/vision/malik/jshi/';
3path(path,[home_dir,'matlab/toolbox/io'])
4path(path,[home_dir,'matlab/pyramid']);
5path(path,[home_dir,'matlab/toolbox/filter'])
6path(path,[home_dir,'matlab/toolbox/disp'])
7path(path,[home_dir,'matlab/vision/vision94/tracking/'])
8path(path,[home_dir,'proj/grouping/laso']);
9path(path,[home_dir,'proj/grouping/eig']);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/swarp.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/swarp.m
new file mode 100755
index 0000000..60a4530
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/swarp.m
@@ -0,0 +1,9 @@
1function J = swarp(I)
2
3[nr,nc] = size(I);
4
5center_x = round(0.5*nc);
6center_y = round(0.5*nr);
7
8J = [I(center_y:nr,center_x:nc),I(center_y:nr,1:center_x-1);...
9 I(1:center_y-1,center_x:nc),I(1:center_y-1,1:center_x-1)]; \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/swarpback.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/swarpback.m
new file mode 100755
index 0000000..513bc25
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/swarpback.m
@@ -0,0 +1,12 @@
1function J = swarpback(I);
2
3[nr,nc] = size(I);
4
5center_x = round(0.5*nc);
6center_y = round(0.5*nr);
7
8cx= center_x -1;
9cy= center_y -1;
10
11J = [I(nr-cy+1:nr,nc-cx+1:nc),I(nr-cy+1:nr,1:(nc-center_x+1));...
12 I(1:(nr-center_y+1),nc-cx+1:nc),I(1:(nr-center_y+1),1:(nc-center_x+1))]; \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test.m
new file mode 100755
index 0000000..12470eb
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test.m
@@ -0,0 +1,110 @@
1
2fn = '130065'; nr = 30;nc = 49;
3%nr = 49;nc = 30;
4%nc = 68;nr = 43;
5%nr =49;nc = 30;
6
7basedir = 'plaatje_data/newdata/';
8if 1,
9fname = sprintf('%s%s_eigvec.pfm',basedir,fn);
10eigv = readpfm(fname);
11fname = sprintf('%s%s_eigval.pfm',basedir,fn);
12eigval = readpfm(fname);
13
14fname = sprintf('%s%s_ncutvec.pfm',basedir,fn);
15ncutv = readpfm(fname);
16fname = sprintf('%s%s_ncutval.pfm',basedir,fn);
17ncutval = readpfm(fname);
18else
19fname = sprintf('%sncutvec_%s.pfm',basedir,fn);
20ncutv = readpfm(fname);
21fname = sprintf('%sncutval_%s.pfm',basedir,fn);
22ncutval = readpfm(fname);
23end
24
25
26fname = sprintf('images/%s.pgm',fn);
27I = readpgm(fname);
28cutsz = 20; I = cutoff(I,cutsz);
29figure(3);im(I);colormap(gray);
30
31figure(6);
32for j=1:min(8,size(ncutv,2)-1),
33 subplot(3,3,j);
34 im(reshape(ncutv(:,j+1),nr,nc));colorbar
35 title(num2str(ncutval(j+1,1)));
36end
37%cm = sprintf('print -dps ncut_%s',fn);disp(cm);eval(cm);
38subplot(3,3,9);im(I);axis('off');
39
40ev = eigval(:,1);
41figure(5);hold off;clf;subplot(1,2,1);
42%semilogy((ev(1:end-1) - ev(2:end))./ev(1:end-1),'x-');grid on;
43plot((ev(1:end-1) - ev(2:end))./ev(1:end-1),'x-');grid on;
44%semilogy(0.01*ones(size(ev(2:end-1))),'r-');semilogy(0.005*ones(size(ev(2:end-1))),'r-');semilogy(0.0025*ones(size(ev(2:end-1))),'r-');grid on;hold off;
45subplot(1,2,2);
46%semilogy(ev(1:end-1)-ev(2:end),'p-');grid on;
47semilogy((ev(1:end-1) - ev(2:end))/ev(1),'x-');grid on;
48
49
50ncutv_o = ncutv;
51
52recursive_cut_tc;
53
54%[groups,ids] = recursive_cut(ncutv(:,1:4),fn);
55
56masks = make_masks(groups,ids,nr,nc);
57
58cm = sprintf('save masks_%s masks ncutv_o groups ids nr nc',fn);
59disp(cm);
60
61eval(cm);
62
63
64%%%%%%%%%%%%%%%%%%
65fn = '130040';
66cm = sprintf('load masks_%s',fn);
67disp(cm);
68eval(cm);
69
70fn = '130040';
71fname= sprintf('images/%s.pgm',fn);
72I = readpgm(fname);cutsz = 20; I = cutoff(I,cutsz);
73figure(3);im(I);colormap(gray);
74hw = 2; %nr = 43;nc=68;
75gap = 2*hw+1;
76%nr = 30;nc=49;
77Is = I(1:nr*gap,1:nc*gap);
78figure(3);im(Is);axis('off');
79
80%cm = sprintf('print -deps I_%s',fn);disp(cm);eval(cm);
81
82
83
84%masks = make_masks(groups,ids,nr,nc);
85figure(2);disp_groups(groups,ids,nr,nc);
86
87figure(1);
88Imasks = disp_Imask(Is,nr,nc,hw,masks);
89
90for j=1:length(ids),
91 figure(4);colormap(gray);clf
92 im(Imasks(:,:,j));axis('off');
93 cm = sprintf('print -deps result_cut_%s_%d',fn,j);
94 disp(cm);eval(cm);
95
96 %print -deps result_cut_134011_1
97end
98
99
100if 0,
101
102%load st_134013
103
104fn = '134013_t';
105
106I_max = 250;
107tex_max = 40;
108
109writeout_feature(I1,T1,fn,I_max,tex_max);
110end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test1.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test1.m
new file mode 100755
index 0000000..691b63e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test1.m
@@ -0,0 +1,175 @@
1
2fnameI = '130068';
3
4cm = sprintf('load filter_%s.pgm.mat',fnameI);
5disp(cm);
6eval(cm);
7
8text_des = abs(text_des);
9
10
11 %%%% cutoff margins,
12margin = 6+10;
13
14Iw = cutoff(I,margin);
15
16T1= reshape(text_des,size(text_des,1),size(text_des,2),size(text_des,3)*size(text_des,4));
17T1 = cutoff(T1,margin);
18
19%%%%% reduce resolution
20
21
22
23T1 = reduce_all(T1);
24T1 = reduce_all(T1);
25
26im5(T1,5,6);
27
28cm = sprintf('writepnm5(''%s_f.pnm'',%s)',fnameI,'T1/70');
29
30% disp(cm);eval(cm);
31
32nr = size(T1,1);
33nc = size(T1,2);
34
35% D = mreadpfm('D_134011_f.pnm.pfm');
36
37% figure(3);imagesc(reshape(D,nc,nr)');axis('image');colorbar
38
39if 0,
40figure(7);
41subplot(3,1,1);hist(reshape(I1,prod(size(I1)),1),binI);
42subplot(3,1,2);hist(reshape(I2,prod(size(I2)),1),binI);
43subplot(3,1,3);hist(reshape(I3,prod(size(I3)),1),binI);
44
45
46If1 = filter_output(I1,sigs,szs);
47If2 = filter_output(I2,sigs,szs);
48If3 = filter_output(I3,sigs,szs);
49
50I1a = cutoff(I1,5); If1 = cutoff(If1,5);
51I2a = cutoff(I2,5); If2 = cutoff(If2,5);
52I3a = cutoff(I3,5); If3 = cutoff(If3,5);
53
54
55
56figure(4);
57bint = [-0.15:0.02:0.15];
58id = 4;
59
60If = If1;
61for j=1:5,
62 subplot(5,2,2*(j-1)+1);
63 hist(reshape(If(:,:,id,j)./s1,prod(size(If(:,:,id,j))),1),bint);
64end
65
66If = If2;
67for j=1:5,
68 subplot(5,2,2*j);
69 hist(reshape(If(:,:,id,j)./s2,prod(size(If(:,:,id,j))),1),bint);
70end
71
72
73%%% make 2d histogram bin
74figure(5);
75idmax = 5;
76filt_id = 4;
77
78for id=1:idmax,
79
80 subplot(idmax,3,(id-1)*3+1);
81 h2d1 = hist_I_f(I1a,If1(:,:,filt_id,id),binI,bintex);
82 imagesc(h2d1);axis('image')
83 subplot(idmax,3,(id-1)*3+2);
84 h2d2 = hist_I_f(I2a,If2(:,:,filt_id,id),binI,bintex);
85 imagesc(h2d2);axis('image')
86
87 subplot(idmax,3,id*3);
88 imagesc(h2d2/sum(sum(h2d2)) + h2d1/sum(sum(h2d1)));axis('image')
89 colorbar
90end
91
92%%%%%%%%%%%%%%%%%%%%% three types %%%%%%%%
93figure(4);
94idmax = 5;
95filt_id = 2;
96
97width = 4;
98
99for id=1:idmax,
100
101 subplot(idmax,width,(id-1)*width+1);
102 h2d1 = hist_I_f(I1a,If1(:,:,filt_id,id),binI,bintex);
103 h2d1 = h2d1/sum(sum(h2d1));
104 imagesc(h2d1);axis('image');
105
106 subplot(idmax,width,(id-1)*width+2);
107 h2d2 = hist_I_f(I2a,If2(:,:,filt_id,id),binI,bintex);
108 h2d2 = h2d2/sum(sum(h2d2));
109 imagesc(h2d2);axis('image')
110
111 subplot(idmax,width,(id-1)*width+3);
112 h2d3 = hist_I_f(I3a,If3(:,:,filt_id,id),binI,bintex);
113 h2d3 = h2d3/sum(sum(h2d3));
114 imagesc(h2d3);axis('image')
115
116 subplot(idmax,width,id*width);
117 imagesc(h2d1+h2d2+h2d3);axis('image')
118 colorbar
119end
120
121
122%%%%%%%%%%%% smaller window %%%%
123hw = round(4*sigs(1));
124
125figure(5);%imagesc(I1a);axis('image');
126cs = round(ginput(1));
127
128J = get_win(I1a,cs,[hw,hw]);figure(7);imagesc(J);axis('image');
129
130Jf = get_win5(If1,cs,[hw,hw]);
131scales = 1:5; nscales = length(scales);
132filters = 1:7; nfilters = length(filters);
133
134figure(8);
135for j=1:nscales,
136 for k=1:nfilters,
137 subplot(nscales,nfilters,(j-1)*nfilters+k);
138 h2d = hist_I_f(J,Jf(:,:,(j-1)*7+k));h2d = h2d/sum(sum(h2d));
139 imagesc(h2d);axis('image');colorbar;axis('off');
140 end
141end
142
143
144if 0,
145
146 figure(3);
147 cs = ginput(1);
148
149 ws = [15,15];
150 J = get_win(I,cs,ws);
151 figure(6);imagesc(J);axis('image');
152
153 t1 = get_win5(text_des,cs,ws);
154
155 t1p = abs(t1);
156 %t1p = abs(t1);
157 %t1p = t1.*(t1>0);
158
159 figure(2);im5(t1p,5,6);
160
161 t1p = reshape(t1p,size(t1p,1)*size(t1p,2),size(t1p,3))';
162
163 t1pm = mean(t1p')';
164 t1ps = t1p- t1pm*ones(1,size(t1p,2));
165
166 B = t1ps*t1ps';
167 [v,d] = eig(B);d = diag(d);
168 figure(4);plot(d,'x-');
169
170 figure(5);
171 subplot(2,2,1);vid = 30;plot(reshape(v(:,vid),6,5),'x-');
172
173end
174
175end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test2.m
new file mode 100755
index 0000000..c70446a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test2.m
@@ -0,0 +1,220 @@
1
2%fnameI = '130056';
3%fnameI = '134013';
4fnameI = '134007';
5
6%%%% flags %%%%%%%%%
7read_image = 1;
8
9margin = 10+6;
10sigs = [1/sqrt(2),1,sqrt(2),2,2*sqrt(2)];
11r =3;
12szs = round(3*r*sigs);
13
14
15
16%%% image read %%%
17if read_image,
18 cm = sprintf('I = readpgm(''images/%s.pgm'');',fnameI);
19 disp(cm);
20 eval(cm);
21
22 Iw = cutoff(I,margin);
23 figure(1);imagesc(Iw);axis('image');
24end
25
26%%%% image crop %%%
27figure(1);J = imcrop;
28figure(2);imagesc(J);axis('image');drawnow;
29
30Jf = filter_output(J,sigs,szs);
31margin = 5;
32Ja = cutoff(J,margin);Jfa = cutoff(Jf,margin);
33figure(2);imagesc(Ja);axis('image');
34
35figure(3);
36imagesc(Jfa(:,:,1,3));axis('image');drawnow;
37
38Jfb = reshape(Jfa,size(Jfa,1),size(Jfa,2),size(Jfa,3)*size(Jfa,4));
39mag = sum(abs(Jfb),3);
40
41%%%%%% Joint hist. %%%%%%%%%
42
43filter_id = 1;
44scale = 1;
45h2d = hist_I_f(Ja,Jfa(:,:,filter_id,scale));
46
47figure(4);
48imagesc(h2d/sum(sum(h2d)));axis('image');colorbar;colormap(hot);
49
50
51%%%%%%%%%% Jointe hist of cropped area %%%%%
52%%% block 1
53fig_id = 1;
54[J3,f3,rect] = crop_im_fil(Ja,Jfa,fig_id);
55
56filter_id = 1;scale = 1;H1 = hist_I_f(J1,f1(:,:,filter_id,scale));
57
58
59%%% block 2
60fig_id = 1;
61[J2,f2,rect] = crop_im_fil(Ja,Jfa,fig_id);
62
63filter_id = 1;scale = 1;H2 = hist_I_f(J2,f2(:,:,filter_id,scale));
64
65
66%%%%% disp result %%%%%
67
68scales = [1:5];
69filter_ids = [1:7];
70
71figure(6);disp_hist2d(J2,f2,scales,filter_ids);
72
73figure(4);disp_hist2d(J1,f1,scales,filter_ids);
74
75%%%%%%%%%%%%%%%%%
76%%%%%%%%%%%%%%%%% smaller window
77hw = round(4*sigs(1));
78
79figure(2);%imagesc(Ja);axis('image');
80cs = round(ginput(1));
81
82J1 = get_win(Ja,cs,[hw,hw]);Jf1 = get_win5(Jfa,cs,[hw,hw]);
83figure(4);imagesc(J1);axis('image');drawnow;
84scales = [1:5];filter_ids = [1:7];
85figure(9);H2 = disp_hist2d(J1,Jf1,scales,filter_ids);
86
87figure(6); disp_diff(H2,H2o);
88
89
90%%%%%% difference in the neighbourhood %%
91hw = round(4*sigs(1));
92hnb = 3;
93
94B = compute_diff(Ja,Jfa,hw,hnb);
95
96
97%%%%%%%%%%
98
99if 0,
100
101figure(4);
102bint = [-0.15:0.02:0.15];
103id = 4;
104
105If = If1;
106for j=1:5,
107 subplot(5,2,2*(j-1)+1);
108 hist(reshape(If(:,:,id,j)./s1,prod(size(If(:,:,id,j))),1),bint);
109end
110
111If = If2;
112for j=1:5,
113 subplot(5,2,2*j);
114 hist(reshape(If(:,:,id,j)./s2,prod(size(If(:,:,id,j))),1),bint);
115end
116
117
118%%% make 2d histogram bin
119figure(5);
120idmax = 5;
121filt_id = 4;
122
123for id=1:idmax,
124
125 subplot(idmax,3,(id-1)*3+1);
126 h2d1 = hist_I_f(I1a,If1(:,:,filt_id,id),binI,bintex);
127 imagesc(h2d1);axis('image')
128 subplot(idmax,3,(id-1)*3+2);
129 h2d2 = hist_I_f(I2a,If2(:,:,filt_id,id),binI,bintex);
130 imagesc(h2d2);axis('image')
131
132 subplot(idmax,3,id*3);
133 imagesc(h2d2/sum(sum(h2d2)) + h2d1/sum(sum(h2d1)));axis('image')
134 colorbar
135end
136
137%%%%%%%%%%%%%%%%%%%%% three types %%%%%%%%
138figure(4);
139idmax = 5;
140filt_id = 2;
141
142width = 4;
143
144for id=1:idmax,
145
146 subplot(idmax,width,(id-1)*width+1);
147 h2d1 = hist_I_f(I1a,If1(:,:,filt_id,id),binI,bintex);
148 h2d1 = h2d1/sum(sum(h2d1));
149 imagesc(h2d1);axis('image');
150
151 subplot(idmax,width,(id-1)*width+2);
152 h2d2 = hist_I_f(I2a,If2(:,:,filt_id,id),binI,bintex);
153 h2d2 = h2d2/sum(sum(h2d2));
154 imagesc(h2d2);axis('image')
155
156 subplot(idmax,width,(id-1)*width+3);
157 h2d3 = hist_I_f(I3a,If3(:,:,filt_id,id),binI,bintex);
158 h2d3 = h2d3/sum(sum(h2d3));
159 imagesc(h2d3);axis('image')
160
161 subplot(idmax,width,id*width);
162 imagesc(h2d1+h2d2+h2d3);axis('image')
163 colorbar
164end
165
166
167%%%%%%%%%%%% smaller window %%%%
168hw = round(4*sigs(1));
169
170figure(5);%imagesc(I1a);axis('image');
171cs = round(ginput(1));
172
173J = get_win(I1a,cs,[hw,hw]);figure(7);imagesc(J);axis('image');
174
175Jf = get_win5(If1,cs,[hw,hw]);
176scales = 1:5; nscales = length(scales);
177filters = 1:7; nfilters = length(filters);
178
179figure(8);
180for j=1:nscales,
181 for k=1:nfilters,
182 subplot(nscales,nfilters,(j-1)*nfilters+k);
183 h2d = hist_I_f(J,Jf(:,:,(j-1)*7+k));h2d = h2d/sum(sum(h2d));
184 imagesc(h2d);axis('image');colorbar;axis('off');
185 end
186end
187
188
189if 0,
190
191 figure(3);
192 cs = ginput(1);
193
194 ws = [15,15];
195 J = get_win(I,cs,ws);
196 figure(6);imagesc(J);axis('image');
197
198 t1 = get_win5(text_des,cs,ws);
199
200 t1p = abs(t1);
201 %t1p = abs(t1);
202 %t1p = t1.*(t1>0);
203
204 figure(2);im5(t1p,5,6);
205
206 t1p = reshape(t1p,size(t1p,1)*size(t1p,2),size(t1p,3))';
207
208 t1pm = mean(t1p')';
209 t1ps = t1p- t1pm*ones(1,size(t1p,2));
210
211 B = t1ps*t1ps';
212 [v,d] = eig(B);d = diag(d);
213 figure(4);plot(d,'x-');
214
215 figure(5);
216 subplot(2,2,1);vid = 30;plot(reshape(v(:,vid),6,5),'x-');
217
218end
219
220end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test3.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test3.m
new file mode 100755
index 0000000..040ed3d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test3.m
@@ -0,0 +1,4 @@
1fn = 'lightsmall.ppm';
2nr = Ipara(1);nc = Ipara(2);
3
4k = 1;imagesc(reshape(v(:,k).*D,nc,nr)');colorbar \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_best_cut.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_best_cut.m
new file mode 100755
index 0000000..e04c6ff
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_best_cut.m
@@ -0,0 +1,12 @@
1
2fn_base = '134035';
3ev_id = 4;
4para = [12 ev_id nr nc 100];
5Gmask = ones(nr,nc);
6threshold = find_cutpoint(ncutv(:,ev_id),cmapg,12);
7threshold = threshold(1:end-1);
8
9cut_threshold = find_bst_cut(fn_base,para,threshold,Gmask);
10
11figure(8);ims(ncutv(:,ev_id)<cut_threshold,nr,nc);
12
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex.m
new file mode 100755
index 0000000..fc420c7
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex.m
@@ -0,0 +1,361 @@
1
2setup_flag = 0;
3cut_window_flag = 0;
4run_flag = 0;
5other_flag = 0;
6test_flag = 1;
7
8
9%%%%%%%%%%%%%%%%%
10if setup_flag == 1,
11I = readpgm('images/134035.pgm');
12
13sigs = [1/sqrt(2),1,sqrt(2),2,2*sqrt(2)];r = 3;szs = round(r*3*sigs);
14%[text_des,TIw] = compute_filter(I,sigs,r,szs);
15load filter_134035
16
17text_des = cutoff(text_des,szs(1));
18
19I_max = 255;
20tex_max = 75;
21
22TIw = cutoff(I,szs(1));
23figure(1);im(TIw);
24
25fts = gen_filters(sigs,r,szs);
26Ft = reshape(fts,size(fts,1)*size(fts,2),size(fts,3)*size(fts,4));
27Ft = Ft';
28PFt1 = pinv(Ft);
29
30temp1 = zeros(2*szs(end-1)+1,2*szs(end-1)+1);
31temp1(szs(end-1)+1,szs(end-1)+1) = 1;
32Ft2 = [Ft;temp1(:)'];
33PFt2 = pinv(Ft2);
34
35
36end
37
38%%%%%%%%%%
39
40if cut_window_flag == 1,
41wz = [30,30];
42
43figure(1);
44ct0 = round(ginput(1))
45
46t0 = cutout(text_des,ct0,wz)/tex_max;
47I0 = cutout(TIw,ct0,wz)/I_max;
48
49figure(3);im(I0);colorbar
50
51figure(1);
52ct1 = round(ginput(1))
53
54t1 = cutout(text_des,ct1,wz)/tex_max;
55I1 = cutout(TIw,ct1,wz)/I_max;
56
57figure(3);im(I1);colorbar
58
59%%%%%%%%%%
60ts = cat(2,t0,t1);
61Is = [I0,I1];
62
63figure(3);
64subplot(2,1,1);im(Is);
65subplot(2,1,2);im(ts(:,:,15));
66
67end
68
69%%%%%%
70
71if run_flag == 1,
72
73neigs = 15;
74
75fv1 = colize(t1,I1);
76cov1 = fv1*fv1';
77
78[u1,s1] = eigs(cov1,neigs); s1= diag(s1);
79figure(4);plot(s1,'p-');
80
81fv0 = colize(t0,I0);
82cov0 = fv0*fv0';
83
84[u0,s0] = eigs(cov0,neigs); s0 = diag(s0);
85figure(4);hold on; plot(s0,'rp-');
86
87fvs = colize(ts,Is);
88covs = fvs*fvs';
89
90[us,ss] = eigs(covs,neigs); ss = diag(ss);
91figure(4);plot(ss,'mo-');
92hold off
93
94figure(5);
95subplot(2,2,1);
96im(cov0);colorbar;
97subplot(2,2,2);
98im(cov1);colorbar;
99subplot(2,2,3);
100im(covs);colorbar;
101
102%%%%%%%%%%%%%%%%%
103
104ivss = ones(size(ss))./sqrt(ss);
105ivs0 = ones(size(s0))./sqrt(s0);
106ivs1 = ones(size(s1))./sqrt(s1);
107
108
109nv = 10;
110v1 = fv1'*u1(:,1:nv)*diag(ivs1(1:nv));
111v0 = fv0'*u0(:,1:nv)*diag(ivs0(1:nv));
112vs = fvs'*us(:,1:nv)*diag(ivss(1:nv));
113
114
115%v1s = v1(1:50:3721,:);
116vss = vs(1:10:7442,:);
117
118if nv == 1,
119 mag = vss';
120else
121 mag = sum(vss'.*vss');
122end
123
124tmp1 = vss*vss';
125figure(5);im(abs(tmp1));
126
127if 0,
128magx = mag'*ones(1,length(mag));
129magy = ones(length(mag),1)*mag;
130tmp2 = tmp1./(magx+magy);
131figure(5);subplot(1,2,2);im(abs(tmp2));colorbar;axis('off');
132end
133
134
135end
136
137%%%%%%%%%%%%%%%%%%%
138if other_flag == 1,
139
140%tmp1 = PFt*us(:,1);
141%im(reshape(tmp1,sqrt(length(tmp1)),sqrt(length(tmp1))));
142PFt = PFt1;
143
144
145BI0 = back_proj(PFt,u0);
146BI1 = back_proj(PFt,u1);
147BIs = back_proj(PFt,us);
148
149figure(7);im5(BI0(:,:,1:9),3,3);
150figure(8);im5(BI1(:,:,1:9),3,3);
151figure(9);im5(BIs(:,:,1:9),3,3);
152
153
154%%%%%%%%%%
155figure(12);
156im(Is);
157
158figure(13);
159clf
160 x1 = vs(1:3721,2);
161 y1 = vs(1:3721,3);
162 subplot(1,2,1);
163 plot(x1,y1,'.')
164 axis('image');hold on;
165 subplot(1,2,2);
166 x2 = vs(3722:end,2);
167 y2 = vs(3722:end,3);
168 plot(x2,y2,'.')
169 axis('image');hold on;
170
171
172figure(11);
173 subplot(1,2,1);hist0 = im_vect([y1,x1]',ones(size(y1)));
174 im(hist0);axis('xy');
175 subplot(1,2,2);hist1 = im_vect([y2,x2]',ones(size(y1)));
176 im(hist1);axis('xy');
177
178end
179
180if test_flag == 1,
181figure(12);
182 ct = round(ginput(1));
183 idx = (ct(1)-1)*size(Is,1) + ct(2);
184
185 cl = 'r';
186 figure(13);subplot(1,2,1);
187 plot(vs(idx,2),vs(idx,3),[cl,'o']);
188 subplot(1,2,2);plot(vs(idx,2),vs(idx,3),[cl,'o']);
189
190 tmp = vs(idx,1:2)*vs(:,1:2)';tmp = reshape(tmp,size(Is,1),size(Is,2));
191 figure(14);subplot(3,2,1);
192 im(abs(tmp));colorbar
193 subplot(3,2,2); im((Is+0.5).*(abs(tmp)>0.2*max(max(abs(tmp)))));
194
195 tmp = vs(idx,1:3)*vs(:,1:3)';tmp = reshape(tmp,size(Is,1),size(Is,2));
196 subplot(3,2,3);
197 im(abs(tmp));colorbar;
198 subplot(3,2,4); im((Is+0.5).*(abs(tmp)>0.2*max(max(abs(tmp)))));
199
200 tmp = vs(idx,1:5)*vs(:,1:5)';
201 tmp = reshape(tmp,size(Is,1),size(Is,2));
202 subplot(3,2,5);
203 im(abs(tmp));colorbar
204 subplot(3,2,6); im((Is+0.5).*(abs(tmp)>0.2*max(max(abs(tmp)))));
205
206end
207
208
209%%%%%%%%%%
210test_tmp = 0;
211if test_tmp,
212x = -10:0.02:20;
213sig = 4;
214d = exp(-(x.^2)/sig);
215figure(2);plot(x,d);
216
217ers = [];
218for j=0:0.5:10,
219 d1 = exp(-(x-j).^2/sig);
220 hold on
221 plot(x,d1,'r');
222 ers = [ers,sum((d1-d).^2)];
223end
224hold off;
225
226figure(1);plot(ers(end)-ers);
227
228
229
230
231
232
233end
234
235%%%%%%%%%%%%%%%%%%%
236
237
238fvs = colize(ts,Is);
239
240nf = 24;np = 0.5*7442;
241hb.sigs = 0.02*ones(1,nf);
242hb.bmins= -0.6*ones(1,nf);
243hb.bmaxs= 0.6*ones(1,nf);
244hb.nbins= 20*ones(1,nf);
245
246%fh = colize_hist(fvs(1:nf,1:10:end),hb);
247
248fh2 = hist_inner(fvs(1:nf,1:np),hb);
249
250[u,d] = eigs(fh2,60); d = diag(d);
251
252%%%%%%%%%%%%
253figure(12);
254 ct = round(ginput(1));
255 idx = (ct(:,1)-1)*size(Is,1) + ct(:,2);
256
257dist = dist_pair(idx,fvs(1:nf,:),hb);
258figure(4);
259im(reshape(dist,size(Is,1),size(Is,2)));colorbar
260
261
262%%%%%%%%%
263figure(12);
264 ct = round(ginput(1));
265 idx = (ct(:,1)-1)*size(Is,1) + ct(:,2);
266
267a = colize_hist(fvs(1:nf,idx'),hb);
268
269figure(5);
270cl = 'brgm';
271for j=1:length(idx);
272 plot(a(:,j),cl(j));
273 hold on;
274end
275hold off
276
277%%%%%%%%%%%
278
279%% use chanked feature vectors
280
281chank_size = 1000;
282fname = 'st';
283histbin_fv_chank(fvs(1:nf,:),hb,chank_size,fname);
284
285
286covfh2 = hist_in_chank(fvs(1:nf,:),chank_size,hb.nbins(1));
287[u2,d2] = eigs(covfh2,60); d2 = diag(d2);
288
289figure(4);
290semilogy(d,'p-');
291
292figure(3);imagesc(u);
293
294back_v = backproj_outer_chank(fvs,u,d,chank_size);
295
296back_v2 = backproj_outer_chank2(fvs,u,d,chank_size);
297
298
299%%%%%%%%%%
300figure(2);
301for j = 1:16,
302 subplot(4,4,j);
303 im(reshape(back_v(:,j),size(Is,1),size(Is,2)));
304 axis('off');title(num2str(j));
305end
306
307binv = linspace(-0.6,0.6,20);
308
309figure(4);
310for j=1:16,
311 subplot(4,4,j);
312 imagesc(reshape(u(:,j),20,24));title(num2str(j));drawnow;
313end
314
315
316figure(6);
317for j=1:16,
318 subplot(4,4,j);
319 plot(binv,(reshape(u(:,j),20,24)));title(num2str(j));drawnow;
320end
321
322
323%%%%%%%%%%
324figure(12);
325 ct = round(ginput(1));
326 idx = (ct(:,1)-1)*size(Is,1) + ct(:,2);
327
328figure(5);
329for j = 1:7*2,
330 subplot(7,2,j);
331 nvv = 2*j;
332 dist = back_v(idx,1:nvv)*back_v(:,1:nvv)';
333 im(reshape(abs(dist).^2,size(Is,1),size(Is,2)));colorbar
334 axis('off');title(num2str(nvv));
335end
336
337
338a = colize_hist(fvs(1:nf,idx'),hb)';
339
340dist_raw = dist_pair_chank(a,fvs,chank_size);
341figure(3);im(reshape(dist_raw.^2,size(Is,1),size(Is,2)));
342
343
344
345%%%%%%%%%%%%%%
346figure(12);
347 ct_t3 = round(ginput(5));
348 idx_t3 = (ct_t3(:,1)-1)*size(Is,1) + ct_t3(:,2);
349
350a1 = colize_hist(fvs(1:nf,idx_t1'),hb)';
351a2 = colize_hist(fvs(1:nf,idx_t2'),hb)';
352a3 = colize_hist(fvs(1:nf,idx_t3'),hb)';
353
354
355%%%%%%%%%%%
356figure(1);
357for j=1:9,
358 subplot(3,3,j);
359 hist(back_v(:,j))
360end
361
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex2.m
new file mode 100755
index 0000000..9e1d3e7
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex2.m
@@ -0,0 +1,136 @@
1
2%%%%%%%%% test histogram on gray levels %%%%%%%%%%%%%
3
4%load st
5%fvs = colize(Is,Is);
6
7nf = 1;np = 7442;nbins = 10;
8
9hb.sigs = 0.02*ones(1,nf);
10hb.bmins= 0*ones(1,nf);
11hb.bmaxs= 1*ones(1,nf);
12hb.nbins= nbins*ones(1,nf);
13
14fh = colize_hist(fvs(1:nf,1:np),hb);
15
16fh_inner = fh*fh';
17
18nv = nbins-1;
19
20[u,d] = eigs(fh_inner,nv); d = diag(d);
21
22figure(6);
23for j=1:nv,
24 subplot(4,4,j);
25 plot(u(:,j));
26 title(num2str(j));
27end
28
29s = 1./sqrt(d);
30
31back_v = (fh'*u(:,1:nv)).*(ones(np,1)*s(1:nv)');
32
33figure(7);
34for j=1:nv,
35 subplot(4,4,j);
36 im(reshape(back_v(:,j),size(Is,1),size(Is,2)));axis('off');
37 title(num2str(j));
38end
39
40figure(1);
41plot(d,'p-');
42figure(2);
43im(u);
44
45
46%%%%%%%%% try the joint x-I histogram bin %%%%%%%%%%%%%
47
48x = [1:size(Is,1)]'*ones(1,size(Is,2));
49x = reshape(x,size(Is,1),size(Is,2));
50
51joint_f(:,:,1) = x;
52joint_f(:,:,2) = Is;
53
54fvs = colize(joint_f,Is);
55
56nf = 2;np = 7442;nbins = [5,10];
57
58hb.sigs = [4,0.02].*ones(1,nf);
59hb.bmins= [1,0].*ones(1,nf);
60hb.bmaxs= [size(Is,1),1].*ones(1,nf);
61hb.nbins= nbins.*ones(1,nf);
62
63fh = colize_joint_hist(fvs,hb);
64fh = reshape(fh,50,np);
65
66fh_inner = fh*fh';
67
68nv = 30;
69
70[u,d] = eigs(fh_inner,nv); d = diag(d);
71
72figure(3);
73for j=1:min(16,nv),
74 subplot(4,4,j);
75 im(reshape(u(:,j),5,10));axis('off');
76 title(num2str(j));
77end
78
79s = 1./sqrt(d);
80
81back_v = (fh'*u(:,1:nv)).*(ones(np,1)*s(1:nv)');
82
83figure(4);
84for j=1:min(16,nv),
85 subplot(4,4,j);
86 im(reshape(back_v(:,j),size(Is,1),size(Is,2)));axis('off');
87 title(num2str(j));
88end
89
90
91%%%%%%%%
92
93
94joint_f = [];
95
96joint_f(:,:,1) = Is;
97joint_f(:,:,2) = ts(:,:,1);
98
99fvs = colize(joint_f,Is);
100
101nf = 2;np = 7442;nbins = [10,10];
102
103hb.sigs = [0.02,0.02].*ones(1,nf);
104hb.bmins= [0,-0.6].*ones(1,nf);
105hb.bmaxs= [1,0.6].*ones(1,nf);
106hb.nbins= nbins.*ones(1,nf);
107
108fh = colize_joint_hist(fvs,hb);
109
110fh = reshape(fh,size(fh,1)*size(fh,2),np);
111
112fh_inner = fh*fh';
113
114nv = 30;
115
116[u,d] = eigs(fh_inner,nv); d = diag(d);
117
118figure(3);
119for j=1:min(16,nv),
120 subplot(4,4,j);
121 im(reshape(u(:,j),10,10));axis('off');
122 title(num2str(j));
123end
124
125s = 1./sqrt(d);
126
127back_v = (fh'*u(:,1:nv)).*(ones(np,1)*s(1:nv)');
128
129figure(4);
130for j=1:min(16,nv),
131 subplot(4,4,j);
132 im(reshape(back_v(:,j),size(Is,1),size(Is,2)));axis('off');
133 title(num2str(j));
134end
135
136
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex3.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex3.m
new file mode 100755
index 0000000..2f245ec
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex3.m
@@ -0,0 +1,169 @@
1%%%%%%%%% test histogram on gray levels %%%%%%%%%%%%%
2
3%load st
4
5nf = 24;np = 7442;nbins = 10;
6fvs = colize(ts(:,:,1:nf),Is);
7
8hb.sigs = 0.02*ones(1,nf);
9hb.bmins= -0.6*ones(1,nf);
10hb.bmaxs= 0.6*ones(1,nf);
11hb.nbins= nbins*ones(1,nf);
12
13fh = colize_hist(fvs(1:nf,1:np),hb);
14
15nw = 4;
16fhs = colize_histneighb(fh,Is,nw);
17
18%%%%%%%%%%%%%%%%%%
19figure(12);
20 ct = round(ginput(1));
21 idx = (ct(:,1)-1)*size(Is,1) + ct(:,2);
22
23figure(1);
24subplot(1,2,1);
25imagesc(reshape(fhs(:,idx),nbins,nf))
26subplot(1,2,2);
27imagesc(reshape(fh(:,idx),nbins,nf))
28%%%%%%%%%%
29
30fh = fhs;
31fhs = sqrt(fhs);
32
33fh_inner = fhs*fhs';
34
35nv = 30;
36
37[u,d] = eigs(fh_inner,nv); d = diag(d);
38
39figure(3);
40for j=1:min(16,nv),
41 subplot(4,4,j);
42 %plot(u(:,j));
43 im(reshape(u(:,j),nbins,nf));
44 title(num2str(j));
45end
46
47s = 1./sqrt(d);
48
49back_v = (fhs'*u(:,1:nv)).*(ones(np,1)*s(1:nv)');
50
51figure(4);
52for j=1:min(16,nv),
53 subplot(4,4,j);
54 im(reshape(back_v(:,j),size(Is,1),size(Is,2)));axis('off');
55 title(num2str(j));
56end
57
58figure(1);
59semilogy(d,'p-');
60%figure(2);imagesc(u);
61
62%%%%%%%%%
63figure(12);
64 ct = round(ginput(1));
65 idx = (ct(:,1)-1)*size(Is,1) + ct(:,2);
66
67figure(5);
68for j = 1:min(14,nv),
69 subplot(7,2,j);
70 nvv = j;
71 dist = back_v(idx,1:nvv)*back_v(:,1:nvv)';
72 im(reshape(abs(dist).^2,size(Is,1),size(Is,2)));colorbar
73 axis('off');title(num2str(nvv));
74end
75
76
77
78
79%%%%%%%%% try the joint x-I histogram bin %%%%%%%%%%%%%
80
81x = [1:size(Is,1)]'*ones(1,size(Is,2));
82x = reshape(x,size(Is,1),size(Is,2));
83
84joint_f(:,:,1) = x;
85joint_f(:,:,2) = Is;
86
87fvs = colize(joint_f,Is);
88
89nf = 2;np = 7442;nbins = [5,10];
90
91hb.sigs = [4,0.02].*ones(1,nf);
92hb.bmins= [1,0].*ones(1,nf);
93hb.bmaxs= [size(Is,1),1].*ones(1,nf);
94hb.nbins= nbins.*ones(1,nf);
95
96fh = colize_joint_hist(fvs,hb);
97fh = reshape(fh,50,np);
98
99fh_inner = fh*fh';
100
101nv = 30;
102
103[u,d] = eigs(fh_inner,nv); d = diag(d);
104
105figure(3);
106for j=1:min(16,nv),
107 subplot(4,4,j);
108 im(reshape(u(:,j),5,10));axis('off');
109 title(num2str(j));
110end
111
112s = 1./sqrt(d);
113
114back_v = (fh'*u(:,1:nv)).*(ones(np,1)*s(1:nv)');
115
116figure(4);
117for j=1:min(16,nv),
118 subplot(4,4,j);
119 im(reshape(back_v(:,j),size(Is,1),size(Is,2)));axis('off');
120 title(num2str(j));
121end
122
123
124%%%%%%%%
125
126
127joint_f = [];
128
129joint_f(:,:,1) = Is;
130joint_f(:,:,2) = ts(:,:,1);
131
132fvs = colize(joint_f,Is);
133
134nf = 2;np = 7442;nbins = [10,10];
135
136hb.sigs = [0.02,0.02].*ones(1,nf);
137hb.bmins= [0,-0.6].*ones(1,nf);
138hb.bmaxs= [1,0.6].*ones(1,nf);
139hb.nbins= nbins.*ones(1,nf);
140
141fh = colize_joint_hist(fvs,hb);
142
143fh = reshape(fh,size(fh,1)*size(fh,2),np);
144
145fh_inner = fh*fh';
146
147nv = 30;
148
149[u,d] = eigs(fh_inner,nv); d = diag(d);
150
151figure(3);
152for j=1:min(16,nv),
153 subplot(4,4,j);
154 im(reshape(u(:,j),10,10));axis('off');
155 title(num2str(j));
156end
157
158s = 1./sqrt(d);
159
160back_v = (fh'*u(:,1:nv)).*(ones(np,1)*s(1:nv)');
161
162figure(4);
163for j=1:min(16,nv),
164 subplot(4,4,j);
165 im(reshape(back_v(:,j),size(Is,1),size(Is,2)));axis('off');
166 title(num2str(j));
167end
168
169
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex4.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex4.m
new file mode 100755
index 0000000..61f1307
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex4.m
@@ -0,0 +1,353 @@
1
2setup_flag = 0;
3cut_window_flag = 0;
4run_flag = 0;
5other_flag = 0;
6test_flag = 1;
7
8
9%%%%%%%%%%%%%%%%%
10if setup_flag == 1,
11% = readpgm('images/134035.pgm');
12
13load st3
14
15I_max = 255;
16tex_max = 40;
17
18I2 = min(1,I2/I_max);
19t2 = t2/tex_max;
20t2 = t2.*(t2<=1) + 1*(t2>1);
21t2 = t2.*(t2>=-1) + (-1)*(t2<-1);
22
23
24end
25
26%%%%%%%%%%
27
28%% for a given sampling rate, get the index for window center
29%%
30
31[nr,nc] = size(I2);
32
33hw = 3;
34st_sz = 2*hw + 1;
35
36nr_chank = floor(nr/st_sz);
37nc_chank = floor(nc/st_sz);
38
39id_chank = [];
40for k=1+hw:st_sz:nc-hw,
41 for j=1+hw:st_sz:nr-hw,
42 id = j+(k-1)*nr;
43 id_chank = [id_chank,id];
44 end
45end
46
47%%%%%%%%%%%%%%%%%%%%%%%%%%%%
48
49%%%%%%%%%%%%%%%%%%%%%%%%%%
50%%%%% F1 difference %%%%%
51%%%%%%%%%%%%%%%%%%%%%%%%%%
52
53fvs = 2*I2(:)'; fvs = fvs -1;
54
55nf = 1;
56hb.sigs = 0.02*ones(1,nf);
57hb.bmins= -1*ones(1,nf);
58hb.bmaxs= 1*ones(1,nf);
59hb.nbins= 10*ones(1,nf);
60
61fh = colize_hist(fvs(1:nf,:),hb);
62fhs = colize_histnb_s(fh,I2,nw,hw);
63
64A = fhs'*fhs;
65figure(1);im(A);colorbar;
66
67B = A;
68
69%% display %%%
70figure(12);
71ct = round(ginput(1));
72ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
73ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
74
75idx = (ct_chank(:,1)-1)*nr_chank + ct_chank(:,2);
76
77figure(3);
78im(reshape(A(idx,:),nr_chank,nc_chank));colorbar;
79
80
81
82%%%%%%%%%%%%%%%%%%%%%%%%%%
83%%%%% F2 difference %%%%%
84%%%%%%%%%%%%%%%%%%%%%%%%%%
85
86nw = 4;hw =3;
87
88tnf = size(t2,3);
89fst = 1;
90r_id = 1;
91for j=1:fst:tnf,
92 nf = fst;
93 hb.sigs = 0.02*ones(1,nf); hb.bmins= -1*ones(1,nf);
94 hb.bmaxs= 1*ones(1,nf); hb.nbins= 10*ones(1,nf);
95
96 fvs = colize(t2(:,:,j:j+fst-1),I2);
97 fh = colize_hist(fvs,hb);
98 fhs = colize_histnb_s(fh,I2,nw,hw);
99 A = fhs'*fhs;
100 cm = sprintf('save F%d A fhs',r_id+1);
101 disp(cm);eval(cm);
102 clear fh;
103
104 B = B + A;
105
106 clear A;
107
108
109 r_id = r_id +1;
110end
111
112
113%%%%%% debug + display %%%%%%%%
114
115figure(6);
116for j=2:30,
117 subplot(5,6,j);
118 im(t2(:,:,j-1));axis('off');title(num2str(j-1));
119end
120subplot(5,6,1);im(I2);axis('off');
121
122
123figure(6);
124B = zeros(size(A));
125for j = 1:31,
126 %subplot(5,6,j);
127 cm = sprintf('load F%d;',j);
128 disp(cm);eval(cm);
129
130 fhs1 = sqrt(fhs); A = fhs1'*fhs1;
131% im(reshape(A(idx,:),nr_chank,nc_chank));axis('off');title(num2str(j-1));colorbar;
132 B = B+A;
133end
134
135
136%%%%%% disp dist. %%%%%%
137figure(12);
138ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
139ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
140
141idx = (ct_chank(:,1)-1)*nr_chank + ct_chank(:,2);
142
143figure(2);
144im(reshape(B(idx,:),nr_chank,nc_chank));axis('off');title('B');colorbar;
145
146
147
148%%%%%%%%%%%%%%%%%%%%%%%%%%
149%%%%% F3 features %%%%%%
150%%%%%%%%%%%%%%%%%%%%%%%%%%
151
152%%% Joint Intensity with filters %%%%
153
154
155tnf = size(t2,3);
156
157plaatjeon = 1;
158if plaatjeon,
159 for j=7:tnf,
160 cm = sprintf('!touch /disks/plaatje/scratch/jshi/FJ%d.mat',j);
161 disp(cm);
162 eval(cm);cm = sprintf('!ln -s /disks/plaatje/scratch/jshi/FJ%d.mat .',j);
163 disp(cm);eval(cm);
164 end
165else
166 for j=1:1,
167 cm = sprintf('!touch ~/store/st/FJ%d.mat',j);
168 disp(cm);eval(cm);
169 cm = sprintf('!ln -s ~/store/st/FJ%d.mat .',j);
170 disp(cm);eval(cm);
171 end
172end
173
174for j=7:tnf,
175 nf = 2;
176 hb.sigs = 0.02*ones(1,nf); hb.bmins= -1*ones(1,nf);
177 hb.bmaxs= 1*ones(1,nf); hb.nbins= 10*ones(1,nf);
178
179 fvs = colize(cat(3,t2(:,:,j),I2));
180
181 fhs = colize_histnb_sf(fvs,I2,hb,nw,hw);
182 fhs = sqrt(fhs);
183 A = fhs'*fhs;
184 cm = sprintf('save FJ%d A fhs',j);
185 disp(cm);eval(cm);
186
187end
188
189%%%% reload data %%%%%%%%%%%%%%
190B = zeros(size(A));
191
192figure(3);
193
194for j=1:tnf,
195 cm = sprintf('load FJ%d;',j);
196 disp(cm);eval(cm);
197
198 subplot(5,6,j);
199 im(reshape(A(idx,:),nr_chank,nc_chank));axis('off');title(num2str(j));
200
201 B = B + A;
202end
203
204figure(2);im(reshape(B(idx,:),nr_chank,nc_chank));axis('off');title('B');
205
206
207%%%%%% disp dist. %%%%%%
208figure(12);
209ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
210ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
211idx = (ct_chank(:,1)-1)*nr_chank + ct_chank(:,2);
212
213figure(2);
214im(reshape(A(idx,:),nr_chank,nc_chank));axis('off');colorbar;
215
216%%%%%% disp Joint Hist %%%%%%%%%
217
218figure(12);
219ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
220ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
221idx = (ct_chank(:,1)-1)*nr_chank + ct_chank(:,2);
222
223figure(1);
224im(reshape(fhs(:,idx),10,10));axis('off');colorbar;
225
226
227%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
228%%%%% F4: Joint filters %%%%%%
229%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
230
231
232
233tnf = size(t2,3);
234
235nw = 4;hw =3;
236
237for scale=1:5,
238 for angle = 1:3,
239 cm = sprintf('!touch /disks/plaatje/scratch/jshi/FFJ_%d_%d_%d_%d.mat',angle,angle+3,scale,scale);
240 disp(cm);eval(cm);
241 cm = sprintf('!ln -s /disks/plaatje/scratch/jshi/FFJ_%d_%d_%d_%d.mat .',angle,angle+3,scale,scale);
242 disp(cm);eval(cm);
243 end
244end
245
246
247for scale = 1:5,
248 for angle = 1:3,
249 nf = 2;
250 hb.sigs = 0.02*ones(1,nf); hb.bmins= -1*ones(1,nf);
251 hb.bmaxs= 1*ones(1,nf); hb.nbins= 10*ones(1,nf);
252
253 fvs = colize(cat(3,t2(:,:,(scale-1)*6+angle),...
254 t2(:,:,(scale-1)*6+angle+3)));
255
256 fhs = colize_histnb_sf(fvs,I2,hb,nw,hw);
257 fhs = sqrt(fhs);
258 A = fhs'*fhs;
259 cm = sprintf('save FFJ_%d_%d_%d_%d A fhs',angle,angle+3,scale,scale);
260 disp(cm);eval(cm);
261 end
262end
263
264
265%%%%%%%%% load results %%%%%%%%%%%
266%B = zeros(size(A));
267
268figure(3);
269for scale=1:5,
270 for angle = 1:3,
271 cm = sprintf('load FFJ_%d_%d_%d_%d.mat',angle,angle+3,scale,scale);
272 disp(cm);eval(cm);
273
274 subplot(3,5,scale+(angle-1)*5);
275 im(reshape(A(idx,:),nr_chank,nc_chank));
276 axis('off');title(sprintf('%d-%d,%d',angle,angle+3,scale));
277
278 %B = B + A;
279 end
280end
281
282
283
284
285%%% disp results
286
287angle = 1;scale = 1;
288cm = sprintf('load FFJ_%d_%d_%d_%d.mat',angle,angle+3,scale,scale);
289disp(cm);eval(cm);
290
291
292
293figure(12);
294ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
295ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
296idx = (ct_chank(:,1)-1)*nr_chank + ct_chank(:,2);
297
298%figure(1);im(reshape(fhs(:,idx),10,10));axis('off');%colorbar;
299%figure(2);im(reshape(A(idx,:),nr_chank,nc_chank));%axis('off');%title('B');
300figure(4);im(reshape(B(idx,:),nr_chank,nc_chank));%axis('off');%title('B');
301
302
303%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
304
305%%%%%% reduction %%%%%%%%%%%%%%%%%
306nv = 50;
307[uB,dB] = eigs(B,nv);dB = diag(dB);
308
309figure(1);subplot(2,1,1);plot(dB,'p-');
310subplot(2,1,2);semilogy(dB,'p-');
311
312figure(2);
313
314for j=1:20,
315 subplot(4,5,j);
316 im(reshape(uB(:,j),nr_chank,nc_chank));axis('off');colorbar;title(num2str(j));
317end
318
319
320%%%%% Ncut without reduction %%%%
321[uNu,dNu] = eig_decomp_v5(B,20);
322
323figure(1);subplot(2,1,1);plot(dNu,'p-');
324subplot(2,1,2);semilogy(dNu,'p-');
325
326figure(2);
327for j=2:6,
328 subplot(1,5,j-1);
329 im(reshape(-uNu(:,j),nr_chank,nc_chank));axis('off');colorbar;title(num2str(j));
330end
331
332%%%%%% Ncut with reduction %%%%%%%%%
333nvv = 6;
334B1 = uB(:,1:nvv)*uB(:,1:nvv)';
335
336
337[uN,dN] = eig_decomp_v5(abs(B1),20);
338
339figure(1);subplot(2,1,1);plot(dN,'p-');
340subplot(2,1,2);semilogy(dN,'p-');
341
342figure(3);
343for j=2:6,
344 subplot(1,5,j-1);
345 im(reshape(uN(:,j),nr_chank,nc_chank));axis('off');colorbar;title(num2str(j));
346end
347
348
349%%%%%%
350
351
352
353
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex5.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex5.m
new file mode 100755
index 0000000..2b86e0a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_evtex5.m
@@ -0,0 +1,446 @@
1
2setup_flag = 0;
3cut_window_flag = 0;
4run_flag = 0;
5other_flag = 0;
6test_flag = 1;
7
8
9%%%%%%%%%%%%%%%%%
10if setup_flag == 1,
11
12sigs = [1/sqrt(2),1,sqrt(2),2,2*sqrt(2)];r = 3;szs = round(r*3*sigs);
13szs = szs(length(szs))*ones(1,length(szs));
14num_ori = 6;
15
16compute_flag = 0;
17if compute_flag,
18fnames = [134002,134007,134011,134013,130065,130038,130039,130040,130042,...
19 130045,130046,130056,130068];
20
21for j=1:length(fnames),
22 fname = sprintf('images/%d.pgm',fnames(j));
23
24 cm = sprintf('!touch /disks/plaatje/scratch/jshi/Fe_%d.mat',fnames(j));
25 disp(cm);eval(cm);
26
27 cm = sprintf('!ln -s /disks/plaatje/scratch/jshi/Fe_%d.mat .',fnames(j));
28 disp(cm);eval(cm);
29
30 disp(fname);
31 I = readpgm(fname);figure(3);im(I);title(num2str(fname));drawnow;
32 [text_des,filters] = compute_filter_fft(I,sigs,r,szs,num_ori);
33
34 cm = sprintf('save Fe_%d text_des filters fname sigs r szs num_ori',fnames(j));
35 disp(cm);eval(cm);
36
37 clear text_des filters I
38end
39
40end
41else
42%%%%%%%%%%%%%
43 fname = 134013;
44
45 Iname = sprintf('images/%d.pgm',fname);
46 I = readpgm(Iname);
47
48 cm = sprintf('load Fe_%d.mat',fname);
49 disp(cm);eval(cm);
50
51 figure(1);im(I);
52
53
54 cutsz =20;
55 I = cutoff(I,cutsz);figure(1);im(I);
56 text_des = cutoff(text_des,cutsz);
57
58 figure(2);
59 for j =1:30,
60 subplot(5,6,j);im(text_des(:,:,j));axis('off');
61 end
62
63 I1 = I(20:200,70:240);
64 T1 = text_des(20:200,70:240,:);
65
66 save st_134013 I1 T1 fname sigs szs r num_ori
67
68end
69
70
71
72%%%%%%%%%%% normalization %%%%%%%%%%%
73
74
75I_max = 250;
76tex_max = 40;
77
78I1 = min(1,I1/I_max);
79T1 = T1/tex_max;
80T1 = T1.*(T1<=1) + 1*(T1>1);
81T1 = T1.*(T1>=-1) + (-1)*(T1<-1);
82
83
84end
85
86%%%%%%%%%%
87
88%% for a given sampling rate, get the index for window center
89%%
90
91[nr,nc] = size(I1);
92
93hw = 3;
94st_sz = 2*hw + 1;
95
96nr_chank = floor(nr/st_sz);
97nc_chank = floor(nc/st_sz);
98
99id_chank = [];
100for k=1+hw:st_sz:nc-hw,
101 for j=1+hw:st_sz:nr-hw,
102 id = j+(k-1)*nr;
103 id_chank = [id_chank,id];
104 end
105end
106
107%%%%%%%%%%%%%%%%%%%%%%%%%%%%
108
109%%%%%%%%%%%%%%%%%%%%%%%%%%
110%%%%% F1 difference %%%%%
111%%%%%%%%%%%%%%%%%%%%%%%%%%
112
113fvs = 2*I1(:)'; fvs = fvs -1;
114
115nf = 1;
116hb.sigs = 0.02*ones(1,nf);
117hb.bmins= -1*ones(1,nf);
118hb.bmaxs= 1*ones(1,nf);
119hb.nbins= 10*ones(1,nf);
120nw = 4;hw =3;
121
122fh = colize_hist(fvs(1:nf,:),hb);
123fhs = colize_histnb_s(fh,I1,nw,hw);
124
125fhs = sqrt(fhs);
126A = fhs'*fhs;
127figure(2);im(A);colorbar;
128
129B = A;
130
131%% display %%%
132figure(2);
133ct = round(ginput(1));
134ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
135ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
136
137idx = (ct_chank(:,1)-1)*nr_chank + ct_chank(:,2);
138
139figure(3);im(reshape(A(idx,:),nr_chank,nc_chank));colorbar;
140
141subplot(1,2,1);im(reshape(A1(idx,:),nr_chank,nc_chank));colorbar;
142subplot(1,2,2);im(reshape(A2(idx,:),nr_chank,nc_chank));colorbar;
143
144
145%%%%%%%%%%
146save_flag = 0;
147
148fn = 134013;
149
150if save_flag,
151 cm = sprintf('save F1_%d fhs hw nw nr_chank nc_chank',fn);
152 disp(cm);eval(cm);
153
154end
155
156load_flag = 1;
157if load_flag,
158 cm = sprintf('load F1_%d',fn);
159 disp(cm);eval(cm);
160
161 A=fhs'*fhs;
162end
163
164
165%%%%%%%%%%%%%%%%%%%%%%%%%%
166%%%%% F2 difference %%%%%
167%%%%%%%%%%%%%%%%%%%%%%%%%%
168
169nw = 4;hw =3;
170
171tnf = size(T1,3);
172fst = 1;
173
174for j=1:fst:1,
175 nf = fst;
176 hb.sigs = 0.02*ones(1,nf); hb.bmins= -1*ones(1,nf);
177 hb.bmaxs= 1*ones(1,nf); hb.nbins= 15*ones(1,nf);
178
179 fvs = colize(T1(:,:,j:j+fst-1),I1);
180 fh = colize_hist(fvs,hb);
181 fhs = colize_histnb_s(fh,I1,nw,hw);
182 fhs = sqrt(fhs);
183
184 A = fhs'*fhs;
185
186 cm = sprintf('save F2_%d_%d fhs hw nw nr_chank nc_chank',j,fn);
187 disp(cm);eval(cm);
188 clear fh;
189
190 B = B + A;
191
192 clear A;
193
194end
195
196
197%%%%%% debug + display %%%%%%%%
198
199figure(6);
200for j=2:30,
201 subplot(5,6,j);
202 im(T1(:,:,j-1));axis('off');title(num2str(j-1));
203end
204subplot(5,6,1);im(I1);axis('off');
205
206
207figure(6);
208B = zeros(size(A));
209for j = 1:31,
210 %subplot(5,6,j);
211 cm = sprintf('load F%d;',j);
212 disp(cm);eval(cm);
213
214 fhs1 = sqrt(fhs); A = fhs1'*fhs1;
215% im(reshape(A(idx,:),nr_chank,nc_chank));axis('off');title(num2str(j-1));colorbar;
216 B = B+A;
217end
218
219
220%%%%%% disp dist. %%%%%%
221weight= 5;
222A = weight*B+B2;
223
224figure(1);
225ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
226ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
227idx = (ct_chank(:,1)-1)*nr_chank + ct_chank(:,2);
228
229figure(2);
230im(reshape(A(idx,:),nr_chank,nc_chank));axis('off');colorbar; %title('B');
231%figure(3);
232
233
234save_flag = 0;
235if save_flag ,
236 B2 = B;
237 save tmp B2 nr_chank nc_chank
238end
239
240%%%%%%%%%%%%%%%%%%%%%%%%%%
241%%%%% F3 features %%%%%%
242%%%%%%%%%%%%%%%%%%%%%%%%%%
243
244%%% Joint Intensity with filters %%%%
245
246
247tnf = size(T1,3);
248
249plaatjeon = 1;
250if plaatjeon,
251 for j=7:tnf,
252 cm = sprintf('!touch /disks/plaatje/scratch/jshi/FJ%d.mat',j);
253 disp(cm);
254 eval(cm);cm = sprintf('!ln -s /disks/plaatje/scratch/jshi/FJ%d.mat .',j);
255 disp(cm);eval(cm);
256 end
257else
258 for j=1:1,
259 cm = sprintf('!touch ~/store/st/FJ%d.mat',j);
260 disp(cm);eval(cm);
261 cm = sprintf('!ln -s ~/store/st/FJ%d.mat .',j);
262 disp(cm);eval(cm);
263 end
264end
265
266for j=7:tnf,
267 nf = 2;
268 hb.sigs = 0.02*ones(1,nf); hb.bmins= -1*ones(1,nf);
269 hb.bmaxs= 1*ones(1,nf); hb.nbins= 10*ones(1,nf);
270
271 fvs = colize(cat(3,T1(:,:,j),I1));
272
273 fhs = colize_histnb_sf(fvs,I1,hb,nw,hw);
274 fhs = sqrt(fhs);
275 A = fhs'*fhs;
276 cm = sprintf('save FJ%d A fhs',j);
277 disp(cm);eval(cm);
278
279end
280
281%%%% reload data %%%%%%%%%%%%%%
282B = zeros(size(A));
283
284figure(3);
285
286for j=1:tnf,
287 cm = sprintf('load FJ%d;',j);
288 disp(cm);eval(cm);
289
290 subplot(5,6,j);
291 im(reshape(A(idx,:),nr_chank,nc_chank));axis('off');title(num2str(j));
292
293 B = B + A;
294end
295
296figure(2);im(reshape(B(idx,:),nr_chank,nc_chank));axis('off');title('B');
297
298
299%%%%%% disp dist. %%%%%%
300figure(12);
301ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
302ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
303idx = (ct_chank(:,1)-1)*nr_chank + ct_chank(:,2);
304
305figure(2);
306im(reshape(A(idx,:),nr_chank,nc_chank));axis('off');colorbar;
307
308%%%%%% disp Joint Hist %%%%%%%%%
309
310figure(12);
311ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
312ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
313idx = (ct_chank(:,1)-1)*nr_chank + ct_chank(:,2);
314
315figure(1);
316im(reshape(fhs(:,idx),10,10));axis('off');colorbar;
317
318
319%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
320%%%%% F4: Joint filters %%%%%%
321%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
322
323
324
325tnf = size(T1,3);
326
327nw = 4;hw =3;
328
329for scale=1:5,
330 for angle = 1:3,
331 cm = sprintf('!touch /disks/plaatje/scratch/jshi/FFJ_%d_%d_%d_%d.mat',angle,angle+3,scale,scale);
332 disp(cm);eval(cm);
333 cm = sprintf('!ln -s /disks/plaatje/scratch/jshi/FFJ_%d_%d_%d_%d.mat .',angle,angle+3,scale,scale);
334 disp(cm);eval(cm);
335 end
336end
337
338
339for scale = 1:5,
340 for angle = 1:3,
341 nf = 2;
342 hb.sigs = 0.02*ones(1,nf); hb.bmins= -1*ones(1,nf);
343 hb.bmaxs= 1*ones(1,nf); hb.nbins= 10*ones(1,nf);
344
345 fvs = colize(cat(3,T1(:,:,(scale-1)*6+angle),...
346 T1(:,:,(scale-1)*6+angle+3)));
347
348 fhs = colize_histnb_sf(fvs,I1,hb,nw,hw);
349 fhs = sqrt(fhs);
350 A = fhs'*fhs;
351 cm = sprintf('save FFJ_%d_%d_%d_%d A fhs',angle,angle+3,scale,scale);
352 disp(cm);eval(cm);
353 end
354end
355
356
357%%%%%%%%% load results %%%%%%%%%%%
358%B = zeros(size(A));
359
360figure(3);
361for scale=1:5,
362 for angle = 1:3,
363 cm = sprintf('load FFJ_%d_%d_%d_%d.mat',angle,angle+3,scale,scale);
364 disp(cm);eval(cm);
365
366 subplot(3,5,scale+(angle-1)*5);
367 im(reshape(A(idx,:),nr_chank,nc_chank));
368 axis('off');title(sprintf('%d-%d,%d',angle,angle+3,scale));
369
370 %B = B + A;
371 end
372end
373
374
375
376
377%%% disp results
378
379angle = 1;scale = 1;
380cm = sprintf('load FFJ_%d_%d_%d_%d.mat',angle,angle+3,scale,scale);
381disp(cm);eval(cm);
382
383
384
385figure(12);
386ct = round(ginput(1));ct_chank(1) = round((ct(1)-hw-1)/st_sz) + 1;
387ct_chank(2) = round((ct(2)-hw-1)/st_sz) + 1;
388idx = (ct_chank(:,1)-1)*nr_chank + ct_chank(:,2);
389
390%figure(1);im(reshape(fhs(:,idx),10,10));axis('off');%colorbar;
391%figure(2);im(reshape(A(idx,:),nr_chank,nc_chank));%axis('off');%title('B');
392figure(4);im(reshape(B(idx,:),nr_chank,nc_chank));%axis('off');%title('B');
393
394
395%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
396
397%%%%%% reduction %%%%%%%%%%%%%%%%%
398nv = 50;
399[uA,dA] = eigs(A,nv);dA = diag(dA);
400
401figure(4);suAplot(2,1,1);plot(dA,'p-');
402subplot(2,1,2);semilogy(dA,'p-');
403
404figure(3);
405
406for j=1:20,
407 subplot(4,5,j);
408 im(reshape(uA(:,j),nr_chank,nc_chank));axis('off');colorbar;title(num2str(j));
409end
410
411
412%%%%% Ncut without reduction %%%%
413
414[uNu,dNu] = eig_decomp_v5(A,20);
415
416figure(4);subplot(2,1,1);plot(dNu,'p-');
417subplot(2,1,2);semilogy(dNu,'p-');
418
419figure(3);
420for j=2:6,
421 subplot(1,5,j-1);
422 im(reshape(-uNu(:,j),nr_chank,nc_chank));axis('off');colorbar;title(num2str(j));
423end
424
425%%%%%% Ncut with reduction %%%%%%%%%
426nvv = 7;
427A1 = uA(:,1:nvv)*uA(:,1:nvv)';
428
429
430[uN,dN] = eig_decomp_v5(abs(A1),20);
431
432figure(1);subplot(2,1,1);plot(dN,'p-');
433subplot(2,1,2);semilogy(dN,'p-');
434
435figure(3);
436for j=2:6,
437 subplot(1,5,j-1);
438 im(reshape(uN(:,j),nr_chank,nc_chank));axis('off');colorbar;title(num2str(j));
439end
440
441
442%%%%%%
443
444
445
446
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_motion.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_motion.m
new file mode 100755
index 0000000..91c97f9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_motion.m
@@ -0,0 +1,117 @@
1
2im_sz = [40,40];
3
4ob_szh = [6,3];
5
6ob_c = [15,12];
7
8bg_color = 0.2;
9
10ob_color = 0.8;
11
12mag = 0.2;
13
14I_bg = bg_color + mag*randn(im_sz);
15
16I_obj = ob_color + mag*randn(2*ob_szh+1);
17
18
19w = 3;
20
21v5 = 1;
22Js = [];
23
24if ~v5,
25 for j=1:5,
26 fc = sprintf('J%d = I_bg;',j);
27 eval(fc);
28
29 fc = sprintf('J%d(ob_c(1)-ob_szh(1):ob_c(1)+ob_szh(1),ob_c(2)-ob_szh(2):ob_c(2)+ob_szh(2)) = I_obj;',j);
30 eval(fc);
31
32 ob_c = ob_c+[0,2];
33 end
34else
35 nf = 4;
36 for j = 1:nf,
37
38 J = I_bg;
39 J(ob_c(1)-ob_szh(1):ob_c(1)+ob_szh(1),ob_c(2)-ob_szh(2):ob_c(2)+ob_szh(2)) = I_obj;
40
41 if (j==1),
42 [gy,gx] = grad(J,w);
43 end
44
45 ob_c = ob_c+[0,2];
46
47 Jw = cutoff(J,w);
48 Js(:,:,j) = Jw;
49 end
50
51end
52
53[nr,nc] = size(gx);
54
55for j=1:nf,
56 subplot(1,nf,j);
57 imagesc(Js(:,:,j));axis('tightequal');
58end
59
60
61writepnm5('test_motion.pnm',Js);
62writepnm5('test_motion_gx.pnm',gx);
63writepnm5('test_motion_gy.pnm',gy);
64%imagesc(J1);colorbar;
65
66
67inpara = [2,5,0.5,1,0.5];
68
69[A,D,Ipara] = cas('test_motion',inpara);
70
71B= A+ A';
72clear A;
73
74%BB = B(1:19^2,19^2+(1:19^2));
75%imagesc(BB);
76
77[v,d] = eigs(B);d = diag(d);
78
79k = 2;
80
81figure(1);
82%nf = 5;
83
84nr = nr-5;
85nc = nc-5;
86
87n = nr* nc;
88
89for j =1:nf,
90 subplot(1,nf,j);
91 imagesc(reshape(v((j-1)*n+(1:n),k).*D(1:n),nr,nc)');axis('tightequal');
92end
93
94%%%%%
95
96
97figure(3);
98T = readpnm('test_motion.pnm');
99nf = size(T,3);
100for j=1:nf,
101 subplot(1,nf,j);
102 imagesc(T(:,:,j));axis('tightequal');
103end
104
105
106figure(2);
107Gx = readpnm('test_motion_gx.pnm');
108
109[nr,nc] =size(Gx);
110n = nr*nc;
111
112imagesc(reshape(B(n+1:2*n,6*nc+7),nc,nr)');colorbar
113
114
115
116
117
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_motion2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_motion2.m
new file mode 100755
index 0000000..2959fa8
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_motion2.m
@@ -0,0 +1,127 @@
1
2im_sz = [40,40];
3
4ob_szh = [4,3];
5
6ob_c = [12,12];
7
8ob_co = [30,28];
9
10bg_color = 0.2;
11
12ob_color = 0.8;
13
14mag = 0.2;
15
16I_bg = bg_color + mag*randn(im_sz);
17
18I_obj = ob_color + mag*randn(2*ob_szh+1);
19
20
21w = 3;
22
23v5 = 1;
24Js = [];
25
26if ~v5,
27 for j=1:5,
28 fc = sprintf('J%d = I_bg;',j);
29 eval(fc);
30
31 fc = sprintf('J%d(ob_c(1)-ob_szh(1):ob_c(1)+ob_szh(1),ob_c(2)-ob_szh(2):ob_c(2)+ob_szh(2)) = I_obj;',j);
32 eval(fc);
33
34 fc = sprintf('J%d(ob_co(1)-ob_szh(1):ob_co(1)+ob_szh(1),ob_co(2)-ob_szh(2):ob_co(2)+ob_szh(2)) = I_obj;',j);
35 eval(fc);
36
37 ob_c = ob_c+[0,2];
38 ob_co = ob_co-[0,2];
39
40 end
41else
42 nf = 4;
43 for j = 1:nf,
44
45 J = I_bg;
46 J(ob_c(1)-ob_szh(1):ob_c(1)+ob_szh(1),ob_c(2)-ob_szh(2):ob_c(2)+ob_szh(2)) = I_obj;
47 J(ob_co(1)-ob_szh(1):ob_co(1)+ob_szh(1),ob_co(2)-ob_szh(2):ob_co(2)+ob_szh(2)) = I_obj;
48
49 if (j==1),
50 [gy,gx] = grad(J,w);
51 end
52
53 ob_c = ob_c+[0,2];
54 ob_co = ob_co-[0,2];
55
56 Jw = cutoff(J,w);
57 Js(:,:,j) = Jw;
58 end
59
60end
61
62[nr,nc] = size(gx);
63
64for j=1:nf,
65 subplot(1,nf,j);
66 imagesc(Js(:,:,j));axis('tightequal');
67end
68
69
70writepnm5('test_motion.pnm',Js);
71writepnm5('test_motion_gx.pnm',gx);
72writepnm5('test_motion_gy.pnm',gy);
73%imagesc(J1);colorbar;
74
75
76inpara = [2,5,0.5,1,0.5];
77
78[A,D,Ipara] = cas('test_motion',inpara);
79
80B= A+ A';
81clear A;
82
83%BB = B(1:19^2,19^2+(1:19^2));
84%imagesc(BB);
85
86[v,d] = eigs(B);d = diag(d);
87
88k = 2;
89
90figure(1);
91%nf = 5;
92
93nr = nr-5;
94nc = nc-5;
95
96n = nr* nc;
97
98for j =1:nf,
99 subplot(1,nf,j);
100 imagesc(reshape(v((j-1)*n+(1:n),k).*D(1:n),nr,nc)');axis('tightequal');
101end
102
103%%%%%
104
105
106figure(3);
107T = readpnm('test_motion.pnm');
108nf = size(T,3);
109for j=1:nf,
110 subplot(1,nf,j);
111 imagesc(T(:,:,j));axis('tightequal');
112end
113
114
115figure(2);
116Gx = readpnm('test_motion_gx.pnm');
117
118[nr,nc] =size(Gx);
119n = nr*nc;
120
121imagesc(reshape(B(n+1:2*n,6*nc+7),nc,nr)');colorbar
122
123
124%%%%%%%%%%%%%
125
126
127K = zeros(im_sz);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_period.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_period.m
new file mode 100755
index 0000000..2994d15
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_period.m
@@ -0,0 +1,58 @@
1flag = 2;
2
3if flag ==1,
4
5ws = [50,50];
6
7figure(1);J = get_win(I,ginput(1),ws);
8figure(4);imagesc(J);
9
10J = J - mean(mean(reshape(J,prod(size(J)),1)));
11X = fftshift(fft2(J));
12
13figure(3);imagesc(abs(X));colorbar
14figure(2);mesh(abs(X));
15
16else
17
18fn = '1.pgm';
19
20% spatial gaussian parameter
21xscale = 1;
22
23% half size of the neighbourhood
24xnb = 5;
25
26% setting the the HSV gaussian parameter:[h s v]
27Iscale = [0.01];
28
29Input_para = [xscale,xnb,Iscale];
30
31% compute the lower half the association matrix
32[A,D,Ipara] = compute_A_pgm(fn,Input_para);
33
34nr = Ipara(1);nc = Ipara(2);
35
36B = A+A';
37clear A;
38
39
40% eigen decompostion
41options.tol = 1e-4;
42num_eig_v = 10;
43fprintf('doing eigs ...\n');
44[v,d] = eigs(B,num_eig_v,options);
45
46k = 1;imagesc(reshape(v(:,k).*D,nc,nr)');colorbar
47
48
49end
50
51
52
53
54
55
56
57
58
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_text.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_text.m
new file mode 100755
index 0000000..4cc5759
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/test_text.m
@@ -0,0 +1,434 @@
1
2
3%case = 1;
4
5read_flag = 1;
6compute_flag = 0;
7load_flag = 0;
8decomp_flag = 0;
9hist_flag = 0;
10
11test_real = 0;
12
13
14if read_flag,
15if caseid == 1,
16 ifn = 'images/130049.pgm';
17elseif caseid == 2,
18 ifn = 'images/130055.pgm';
19elseif caseid == 3,
20 ifn = 'images/130056.pgm';
21elseif caseid == 4,
22 ifn = 'images/130057.pgm';
23elseif caseid == 5,
24 ifn = 'images/130060.pgm';
25elseif caseid == 6,
26 ifn = 'images/130061.pgm';
27elseif caseid == 7,
28 ifn = 'images/130062.pgm';
29elseif caseid == 8,
30 ifn = 'images/130065.pgm';
31elseif caseid == 9,
32 ifn = 'images/130066.pgm';
33elseif caseid == 10,
34 ifn = 'images/130068.pgm';
35elseif caseid == 11,
36 ifn = 'images/130070.pgm';
37else
38 ifn = 'images/130070.pgm';
39end
40
41I = readpgm(ifn);
42figure(1);
43imagesc(I);colormap(gray);drawnow;
44axis('tightequal');
45
46end
47
48%%%%% load %%%
49
50if load_flag,
51 fn = sprintf('load cresult_%d;',caseid);
52 eval(fn);
53end
54
55
56%%%%%%%%%%%%% compute %%%%%%%%%%%
57sig = 0.5;
58r = 3;
59sz = 15;
60Iw = cutoff(I,0.5*sz);
61figure(1);imagesc(Iw);
62axis('image');
63
64if compute_flag,
65
66as = 0:30:150;
67
68Cresult = [];
69
70for j = 1:length(as),
71 fprintf('.');
72 angle = as(j);
73
74 g = doog2( sig,r,angle,sz);
75
76 g = g - mean(reshape(g,prod(size(g)),1));
77
78 g = g/sum(sum(abs(g)));
79
80 c = conv2(I,g,'valid');
81
82 Cresult(:,:,j) = c;
83end
84
85
86fprintf('\n');
87
88
89figure(2);
90
91subplot(2,3,1);
92imagesc(Cresult(:,:,1).^2);axis('tightequal');colorbar
93
94subplot(2,3,2);
95imagesc(Cresult(:,:,2).^2);axis('tightequal');colorbar
96
97subplot(2,3,3);
98imagesc(Cresult(:,:,3).^2);axis('tightequal');colorbar
99
100subplot(2,3,4);
101imagesc(Cresult(:,:,4).^2);axis('tightequal');colorbar
102
103subplot(2,3,5);
104imagesc(Cresult(:,:,5).^2);axis('tightequal');colorbar
105
106subplot(2,3,6);
107imagesc(Cresult(:,:,6).^2);axis('tightequal');colorbar
108
109Cs = [];
110Mcs = [];
111for j=1:length(as),
112 Cs(:,:,j) = reduce(reduce(abs(Cresult(:,:,j))));
113
114 Mcs = [Mcs,max(max(Cs(:,:,j)))];
115
116end
117
118ms = max(Mcs);
119
120figure(3);
121for j=1:6,
122 fn = sprintf('Cs(:,:,%d) = Cs(:,:,%d)/ms;',j,j);
123 eval(fn);
124 fn = sprintf('subplot(2,3,%d);imagesc(Cs(:,:,%d));',j,j);
125 eval(fn);axis('tightequal');colorbar
126end
127
128fn = sprintf('save cresult_%d.mat Cresult Cs',caseid);
129disp(fn);
130eval(fn);
131
132end
133
134%%%%%%%%%%%%%%%%% decomp %%%%%%%%%%%%
135
136
137if decomp_flag,
138
139%writepnm5('txt_2.pnm',Cs);
140
141%writepnm5('130068.pnm',Cs);
142
143
144%I_scale = 0.0025;
145%X_scale = 3^2;
146%[A,D,Ipara] = compute_A_sparmul2(10,I_scale,X_scale);
147
148
149I_scale = 0.02;
150X_scale = 2;
151[A,D,Ipara] = compute_A_pnm('130068.pnm',[X_scale,I_scale]);
152
153nr = Ipara(1);nc = Ipara(2);
154imagesc(reshape(D,nc,nr)');colorbar;
155
156B = A+A';clear A;
157
158options.tol = 1e-7;
159
160[v,d] = eigs(B,9,options);
161
162figure(4);
163k = 1; imagesc(reshape(v(:,k).*D,nc,nr)');
164
165end
166
167
168%%%% histogram %%%%
169
170%hist_flag = 1;
171
172%figure(1);imagesc(Iw);axis('image');
173if hist_flag ==1,
174
175
176ws = [12,12];
177
178figure(7);
179
180cs = ginput(1);
181
182cs = 10*(cs-1)+w/2;
183
184%cs(1,:) = w+(floor((cs(1,:)-w)/gap)*gap);
185%cs(2,:) = w+(floor((cs(2,:)-w)/gap)*gap);
186
187J = get_win(Iw,cs(1,:),ws);
188Jbar = get_win5(Cresult,cs(1,:),ws);
189
190
191figure(2);
192subplot(3,3,1);imagesc(J);colorbar
193for j=1:6,subplot(3,3,1+j);imagesc(abs(Jbar(:,:,j)));colorbar; end
194
195[hists,bins] = get_hist(J,Jbar);show_hist(hists,bins,4);
196cumhists = get_cumhist(hists);show_cumhist(cumhists,bins,6,1,'b-o');
197
198J2 = get_win(Iw,cs(2,:),ws);
199Jbar2 = get_win5(Cresult,cs(2,:),ws);
200
201figure(3);
202subplot(3,3,1);imagesc(J2);colorbar
203for j=1:6,subplot(3,3,1+j);imagesc(abs(Jbar2(:,:,j)));colorbar; end
204
205[hists2,bins2] = get_hist(J2,Jbar2);show_hist(hists2,bins2,5);
206cumhists2 = get_cumhist(hists2);show_cumhist(cumhists2,bins2,6,0,'r-*');
207
208diff.inten = max(abs(cumhists.inten-cumhists2.inten));
209diff.mag = max(abs(cumhists.mag-cumhists2.mag));
210diff.text = max(max(abs(cumhists.text-cumhists2.text)));
211
212figure(7);
213
214disp([diff.inten,diff.mag,diff.text]);
215maxdiff = max([diff.inten,diff.mag,diff.text]);
216disp(1-sigmoid(diff.inten,0.22,0.02));
217
218
219if 0,
220%A = pair_dist_text(Iw,Cresult,15);
221
222r =4;w = 22;gap = 5;sig_x= 20.0;
223inpara = [r,w,gap,sig_x,0.16,0.2,0.2];
224[Cum,tm] = cAh(Iw,mag,abs(Cresult),inpara);
225
226[Cum,Nb,Nc] = cAh4(Iw,mag,abs(Cresult),inpara);
227
228
229B = A+ A';clear A;
230
231figure(1);
232c = ginput(1);
233cx = floor(c(1)/gap);
234cy = floor(c(2)/gap);
235[cx,cy]
236figure(7)
237imagesc(reshape(B(cy*Cum(1)+cx,:),Cum(1),Cum(2))');colorbar
238
239
240cutoff = [0.22,0.2,0.2];
241sig_hist = [0.02,0.04,0.05];
242
243inpara2 = [r,5,cutoff,sig_hist];
244[A,D] = compute_A_hist3(tm,Cum,inpara2);
245
246B = A+A';clear A;
247imagesc(reshape(D,Cum(1),Cum(2))');
248
249
250[v,d] = eigs(B);
251
252
253end
254
255end
256
257%%%%%%%%%%%%% trans_texture %%%%%%%%%%%%
258trans_text = 0;
259
260
261if trans_text,
262 figure(1);
263 cs = ginput(1);
264
265 ws = [40,40];
266
267 J = get_win(Iw,cs(1,:),ws);
268 Jbar = get_win5(Cresult,cs(1,:),ws);
269 Jmag = get_win(mag,cs(1,:),ws);
270
271 figure(3);imagesc(J);
272
273 figure(3);
274 for j=1:6,
275 subplot(2,3,j);imagesc(abs(Jbar(:,:,j)));axis('image');colorbar;
276 end
277
278 f= abs(Jbar(40,38,:));
279 g= abs(Jbar(40,47,:));
280
281 dot(f,g)/max(dot(f,f),dot(g,g))
282
283 ff = myinterp(f,10); gg = myinterp(g,10);
284 dot(ff,gg)/max(dot(ff,ff),dot(gg,gg))
285
286 cum = mc_corr(ff,gg,[-6,6]);
287 max(cum)/max(dot(f,f),dot(g,g))
288
289
290 center = [40,35];
291
292 f = squeeze(abs(Jbar(center(1),center(2),:)));
293 ff = myinterp(f,10);
294 mag_ff = dot(ff,ff);
295 mag_c = Jmag(center(1),center(2));
296 dy = 0;
297
298 cor_cofs = [];
299 mags = [];
300 for dx = -15:15,
301 g = squeeze(abs(Jbar(center(1)+dy,center(2)+dx,:)));
302 gg = myinterp(g,10);
303
304 cum = mc_corr(ff,gg,[-6,6]);
305 cor_cofs = [cor_cofs,max(cum)/max(mag_ff,dot(gg,gg))];
306
307 mags =[mags,max(mag_c,Jmag(center(1)+dy,center(2)+dx,:))];
308
309 end
310
311 simulation_on =0;
312
313 if simulation_on,
314
315 sz = [161,161]
316 SI = zeros(sz);
317
318 for i=2:18:sz(1),
319 SI(i:i+2,:) = 1+SI(i:i+2,:);
320 end
321
322 imagesc(SI);axis('image');
323
324 tmp1 = mimrotate(SI,90,'nearest','crop');
325 tmp2 = mimrotate(SI,45,'nearest','crop');
326
327 ly = round(0.7*sz(1));
328 lx = round(0.7*sz(1));
329 sy = round(0.16*sz(1));
330 sx = round(0.2*sz(2));
331 TI = [tmp1(1:ly,1:lx),tmp2(sy+1:sy+ly,sy+1:sy+round(0.4*lx))];
332
333 TI = TI+0.04*randn(size(TI));
334
335 %sig = 1/sqrt(2);r = 3;sz = round(r*3*sig);
336
337 sigs = [1/sqrt(2),1,sqrt(2),2,2*sqrt(2)];r = 3;szs = round(r*3*sigs);
338 [text_des,TIw] = compute_filter(TI,sigs,r,szs);
339 figure(2);imagesc(TIw);axis('image');
340
341 figure(3);
342 im5(abs(text_des),2,3);
343
344 text_des = abs(text_des);
345
346 text_des = T1;
347
348 numband = size(text_des,3); r = 10;
349 sig_x = 90; sig_inten = 0.15; sig_tex = 0.01;w_inten = 0.03;
350 para = [numband,r,sig_x,sig_inten,sig_tex,w_inten];
351
352 [A,D,Ipara] = compute_A_text(TIw,text_des,para);
353 nr = Ipara(1);nc = Ipara(2);
354 B = A+A'; clear A;
355
356 figure(2);
357 cs = ginput(1);
358 cs = round(cs);id = cs(2)*nc+cs(1);
359
360 figure(4);
361 imagesc(reshape(B(id,:),nc,nr)');axis('image');colorbar
362
363 [v,d] = eigs(B);
364 figure(4);imagesc(reshape(D.*v(:,1),nc,nr)');axis('image');
365
366 end
367
368end
369
370if test_real == 1,
371 sigs = [1/sqrt(2),1,sqrt(2),2,2*sqrt(2)];r = 3;szs = round(r*3*sigs);
372 text_des = compute_filter(I,sigs,r,szs);
373
374 text_des = abs(text_des);
375%save filter_3.mat
376
377 %%%% cutoff margins,
378 margin = 6+10;
379
380 Iw = cutoff(I,margin);
381
382 T1= reshape(text_des,size(text_des,1),size(text_des,2),size(text_des,3)*size(text_des,4));
383 T1 = cutoff(T1,margin);
384
385 %%%%% reduce resolution
386
387 Iwp = compact(Iw,4);
388
389 T1 = reduce_all(T1);
390 T1 = reduce_all(T1);
391
392% T1 = T1/70;
393
394 % writepnm5('test6_image.pnm',Iwp);writepnm5('test6_filter.pnm',T1);
395
396 numband = size(T1,3); r = 2;
397 sig_x = 20; sig_inten = 0.15; sig_tex = 0.01;w_inten = 0.01;
398 para = [numband,r,sig_x,sig_inten,sig_tex,w_inten];
399
400 [A,D,Ipara] = compute_A_text(Iwp,T1,para);
401 nr = Ipara(1);nc = Ipara(2);
402 figure(4);imagesc(reshape(D,nc,nr)');axis('image');
403 drawnow;
404
405
406 numband = 6;
407 r = 5; sig_x = 20.0;
408 sig_tex = 0.01; w_inten = 0.01; w = 2;
409 para = [numband,r,sig_x,sig_tex,w_inten,w,size(T1,2)];
410
411 [A,D,Ipara] = compute_A_text2(Iw,T1(:,:,1:numband)/70,para);
412 nr = Ipara(1);nc = Ipara(2);
413
414
415
416 B = A+A'; clear A;
417
418
419 figure(2);
420 cs = ginput(1);
421 cs = floor(cs/4)+1;id = cs(2)*nc+cs(1);
422
423 figure(4);
424 imagesc(reshape(B(id,:),nc,nr)');axis('image');colorbar
425
426
427end
428
429
430
431
432
433
434
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp.m
new file mode 100755
index 0000000..b932912
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp.m
@@ -0,0 +1,68 @@
1
2sw = 3;
3gap = 2*sw+1;
4
5nw = 6;
6
7for j=1:20,
8 l = max(0,j-1-nw);
9% l = max(0,j-1-2*nw);
10 rs(j) = ceil((l-sw)/gap) + 1;
11 l = min(20,j-1+nw);
12% l = min(20,j-1);
13 re(j) = floor((l-sw)/gap) +1;
14end
15
16plot([1:20],rs,'p-',[1:20],re,'rp-')
17
18
19%%%%%%%%
20
21bin_max = 1.0;
22bin_min = -1.0;
23num_bin = 30;
24sig = 0.2;
25
26data = 0.482;
27
28inc = (bin_max-bin_min)/num_bin;
29
30bs = -100;
31be = bin_min+inc;
32b = [];
33
34for j=1:num_bin,
35
36 b(j) = tmp1(bs,be,data,sig);
37 bs = be;
38 be= be+inc;
39end
40plot(b,'p-');
41
42
43
44bmin = -1;
45
46inc = 0.2;
47a = 0.1;
48b = -1250;
49ovs = 625;
50
51bs = bmin;
52be = bs+inc;
53
54data = -0.482;
55
56for j=1:10,
57 tmp = bs-data;
58 fs = exp(-(tmp*tmp*ovs));
59 ks = b*tmp;
60
61 tmp = be-data;
62 fe = exp(-(tmp*tmp*ovs));
63 ke = b*tmp;
64
65 bin(j) = fs*(2+a*ks) + fe*(2-a*ke);
66 bs = be;
67 be = be+inc;
68end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp1.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp1.m
new file mode 100755
index 0000000..db5dbc1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp1.m
@@ -0,0 +1,25 @@
1function d = tmp1(bs,be,data,sig)
2
3sig = sig^2;
4
5if 1,
6a = (bs+be)*0.5;
7d = (a-bs)*(exp(-(bs-data)^2/sig) + exp(-(a-data)^2/sig)) + ...
8 (be-a)*(exp(-(a-data)^2/sig) + exp(-(be-data)^2/sig));
9d = d*2/sqrt(pi);
10else
11
12a = (be-bs)/2;
13
14h1 = exp(-(bs-data)^2/sig);
15h2 = exp(-(be-data)^2/sig);
16
17k1 = -2*(bs-data)/sig;
18k2 = -2*(be-data)/sig;
19
20d = a*(h1*(2+2*a*k1) + h2*(2-2*a*k2));
21d = d*2/sqrt(pi);
22
23end
24
25
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp2.m
new file mode 100755
index 0000000..b361cdc
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp2.m
@@ -0,0 +1,17 @@
1function d = tmp2(bs,be,data,sig)
2
3sig = sig^2;
4
5
6a = (be-bs)/2;
7
8h1 = exp(-(bs-data)^2/sig);
9h2 = exp(-(be-data)^2/sig);
10
11k1 = -2*(bs-data)/sig;
12k2 = -2*(be-data)/sig;
13
14d = (h1*(2+2*a*k1) + h2*(2-2*a*k2));
15%d = a*d*2/sqrt(pi);
16
17
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp3.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp3.m
new file mode 100755
index 0000000..c1bffd9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/tmp3.m
@@ -0,0 +1,126 @@
1function result = erfcore(x,jint)
2%ERFCORE Core algorithm for error functions.
3% erf(x) = erfcore(x,0)
4% erfc(x) = erfcore(x,1)
5% erfcx(x) = exp(x^2)*erfc(x) = erfcore(x,2)
6
7% C. Moler, 2-1-91.
8% Copyright (c) 1984-96 by The MathWorks, Inc.
9% $Revision: 5.7 $ $Date: 1996/10/28 20:57:59 $
10
11% This is a translation of a FORTRAN program by W. J. Cody,
12% Argonne National Laboratory, NETLIB/SPECFUN, March 19, 1990.
13% The main computation evaluates near-minimax approximations
14% from "Rational Chebyshev approximations for the error function"
15% by W. J. Cody, Math. Comp., 1969, PP. 631-638.
16
17 if ~isreal(x),
18 error('Input argument must be real.')
19 end
20 result = repmat(NaN,size(x));
21%
22% evaluate erf for |x| <= 0.46875
23%
24 xbreak = 0.46875;
25 k = find(abs(x) <= xbreak);
26 if ~isempty(k)
27 a = [3.16112374387056560e00; 1.13864154151050156e02;
28 3.77485237685302021e02; 3.20937758913846947e03;
29 1.85777706184603153e-1];
30 b = [2.36012909523441209e01; 2.44024637934444173e02;
31 1.28261652607737228e03; 2.84423683343917062e03];
32
33 y = abs(x(k));
34 z = y .* y;
35 xnum = a(5)*z;
36 xden = z;
37 for i = 1:3
38 xnum = (xnum + a(i)) .* z;
39 xden = (xden + b(i)) .* z;
40 end
41 result(k) = x(k) .* (xnum + a(4)) ./ (xden + b(4));
42 if jint ~= 0, result(k) = 1 - result(k); end
43 if jint == 2, result(k) = exp(z) .* result(k); end
44 end
45%
46% evaluate erfc for 0.46875 <= |x| <= 4.0
47%
48 k = find((abs(x) > xbreak) & (abs(x) <= 2.));
49 if ~isempty(k)
50 c = [5.64188496988670089e-1; 8.88314979438837594e00;
51 6.61191906371416295e01; 2.98635138197400131e02;
52 8.81952221241769090e02; 1.71204761263407058e03;
53 2.05107837782607147e03; 1.23033935479799725e03;
54 2.15311535474403846e-8];
55 d = [1.57449261107098347e01; 1.17693950891312499e02;
56 5.37181101862009858e02; 1.62138957456669019e03;
57 3.29079923573345963e03; 4.36261909014324716e03;
58 3.43936767414372164e03; 1.23033935480374942e03];
59
60 y = abs(x(k));
61 xnum = c(9)*y;
62 xden = y;
63 for i = 1:7
64 xnum = (xnum + c(i)) .* y;
65 xden = (xden + d(i)) .* y;
66 end
67 result(k) = (xnum + c(8)) ./ (xden + d(8));
68 if jint ~= 2
69 z = fix(y*16)/16;
70 del = (y-z).*(y+z);
71 result(k) = exp(-z.*z) .* exp(-del) .* result(k);
72 end
73 end
74%
75% evaluate erfc for |x| > 4.0
76%
77 k = find(abs(x) > 2.0);
78 if ~isempty(k)
79if 0,
80 p = [3.05326634961232344e-1; 3.60344899949804439e-1;
81 1.25781726111229246e-1; 1.60837851487422766e-2;
82 6.58749161529837803e-4; 1.63153871373020978e-2];
83 q = [2.56852019228982242e00; 1.87295284992346047e00;
84 5.27905102951428412e-1; 6.05183413124413191e-2;
85 2.33520497626869185e-3];
86
87 y = abs(x(k));
88 z = 1 ./ (y .* y);
89 xnum = p(6).*z;
90 xden = z;
91 for i = 1:4
92 xnum = (xnum + p(i)) .* z;
93 xden = (xden + q(i)) .* z;
94 end
95 result(k) = z .* (xnum + p(5)) ./ (xden + q(5));
96 result(k) = (1/sqrt(pi) - result(k)) ./ y;
97 if jint ~= 2
98 z = fix(y*16)/16;
99 del = (y-z).*(y+z);
100 result(k) = exp(-z.*z) .* exp(-del) .* result(k);
101 k = find(~isfinite(result));
102 result(k) = 0*k;
103 end
104end
105 result(k) = 0;
106 end
107%
108% fix up for negative argument, erf, etc.
109%
110 if jint == 0
111 k = find(x > xbreak);
112 result(k) = (0.5 - result(k)) + 0.5;
113 k = find(x < -xbreak);
114 result(k) = (-0.5 + result(k)) - 0.5;
115 elseif jint == 1
116 k = find(x < -xbreak);
117 result(k) = 2. - result(k);
118 else % jint must = 2
119 k = find(x < -xbreak);
120 z = fix(x(k)*16)/16;
121 del = (x(k)-z).*(x(k)+z);
122 y = exp(z.*z) .* exp(del);
123 result(k) = (y+y) - result(k);
124 end
125
126
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/true_loc.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/true_loc.m
new file mode 100755
index 0000000..7bf060f
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/true_loc.m
@@ -0,0 +1,23 @@
1function a = true_loc(loca,g,scale);
2
3if ~exist('scale'),
4 scale = 50;
5end
6
7y = loca(1,:);
8x = loca(2,:);
9
10min_x = min(x);
11min_y = min(y);
12
13x = x - min_x;
14y = y - min_y;
15
16max_x = max(x);max_y = max(y);
17min_scale = min(max_x,max_y);
18
19a(1) = (g(1)-1)*min_scale/(scale);
20a(2) = (g(2)-1)*min_scale/(scale);
21
22a(1) = a(1) + min_x;
23a(2) = a(2) + min_y;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/vmquant.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/vmquant.m
new file mode 100755
index 0000000..ab4eb28
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/vmquant.m
@@ -0,0 +1,112 @@
1function [im, map] = vmquant(arg1,arg2,arg3,arg4,arg5,arg6,arg7)
2%VMQUANT Variance Minimization Color Quantization.
3% [X, MAP] = VMQUANT(R,G,B,K,[Qr Qg Qb],DITHER,Qe) or
4% VMQUANT(RGB,K,[Qr Qg Qb],DITHER,Qe), where RGB is a 3-D array,
5% converts an arbitrary image comprised of RGB triples into an
6% indexed image X with color map MAP. K specifies the number
7% of desired entries in the target color map, and [Qr Qg Qb]
8% specifies the number of quantization bits to assign each color
9% axis during color interpolation. DITHER is a string ('dither' or
10% 'nodither') that indicates whether or not to perform error propagation
11% dither on the output image. Qe specifies the number of bits of
12% quantization used in the error calculations.
13%
14% K is optional and defaults to 256.
15% [Qr Qg Qb] is optional and defaults to [5 5 5].
16% DITHER is optional and defaults to 'nodither'.
17% Qe is optional and defaults to 8.
18%
19% See also: RGB2IND, RGB2GRAY, DITHER, IND2RGB, CMUNIQUE, IMAPPROX.
20
21% This is the wrapper function for the MEX file VMQUANTC.C
22
23% Joseph M. Winograd 6-93
24% Copyright (c) 1993 by The MathWorks, Inc.
25% $Revision: 5.3 $ $Date: 1996/08/22 22:09:03 $
26
27% Reference: Xiaolin Wu, "Efficient Statistical Computation for
28% Optimal Color Quantization," Graphics Gems II, (ed. James
29% Arvo). Academic Press: Boston. 1991.
30
31if nargin < 1,
32 error('Not enough input arguments.');
33end
34
35threeD = (ndims(arg1)==3); % Determine if input includes a 3-D array
36
37if threeD,
38 error( nargchk( 1, 5, nargin ) );
39
40 % NOTE: If you change defaults, change them also
41 % in VMQUANTC.C and recompile the MEX function.
42 if nargin < 5
43 arg5 = 8; % DEFAULT_QE = 8
44 end
45
46 if nargin < 4
47 arg4 = 'n'; % DEFAULT_DITHER = 0
48 end
49
50 if nargin < 3
51 arg3 = [5 5 5]; % DEFAULT_Q = [5 5 5]
52 end
53
54 if nargin < 2
55 arg2 = 256; % DEFAULT_K = 256
56 end
57
58 rout = arg1(:,:,1);
59 g = arg1(:,:,2);
60 b = arg1(:,:,3);
61
62 if strcmp(lower(arg4(1)),'d')
63 dith = 1;
64 else
65 dith = 0;
66 end
67
68 arg7 = arg5;
69 arg5 = arg3;
70 arg4 = arg2;
71
72else
73 error( nargchk( 3, 7, nargin ) );
74
75 if nargin < 7
76 arg7 = 8; % DEFAULT_QE = 8
77 end
78
79 if nargin < 6
80 arg6 = 'n'; % DEFAULT_DITHER = 0
81 end
82
83 if nargin < 5
84 arg5 = [5 5 5]; % DEFAULT_Q = [5 5 5]
85 end
86
87 if nargin < 4
88 arg4 = 256; % DEFAULT_K = 256
89 end
90
91 rout = arg1;
92 g = arg2;
93 b = arg3;
94
95 if strcmp(lower(arg6(1)),'d')
96 dith = 1;
97 else
98 dith = 0;
99 end
100
101end
102
103if (~isa(rout,'uint8'))
104 rout = uint8(round(255*rout));
105end
106if (~isa(g,'uint8'))
107 g = uint8(round(255*g));
108end
109if (~isa(b,'uint8'))
110 b = uint8(round(255*b));
111end
112[im,map] = vmquantc( rout, g, b, arg4, arg5, dith, arg7 );
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/wismm.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/wismm.m
new file mode 100755
index 0000000..915e07d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/wismm.m
@@ -0,0 +1,26 @@
1function [L1,L2,phi,Txx,Txy,Tyy]=wismm(X,N);
2% [L1,L2,phi,T11,T12,T22]=wismm(X,N);
3% Calculate windowed image second moment matrices for image X and return
4% the following values:
5%
6% L1 is the larger eigenvalue (lambda_1)
7% L2 is the smaller eigenvalue (lambda_2)
8% phi is the angle of the 1st eigenvector (phi)
9
10[G1,G2]=gradient(X);
11
12GGTxx=G1.^2;
13GGTxy=G1.*G2;
14GGTyy=G2.^2;
15
16Txx=gaussN(GGTxx,N);
17Txy=gaussN(GGTxy,N);
18Tyy=gaussN(GGTyy,N);
19
20tr=Txx+Tyy;
21V1=0.5*sqrt(tr.^2-4*(Txx.*Tyy-Txy.^2));
22
23L1=real(0.5*tr+V1);
24L2=real(0.5*tr-V1);
25phi=0.5*atan2(2*Txy,Txx-Tyy);
26
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/wismm2.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/wismm2.m
new file mode 100755
index 0000000..ae62ce9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/wismm2.m
@@ -0,0 +1,66 @@
1function [L1,L2,phi,aniso,pol,con,window_sizes]=wismm2(V);
2% [L1,L2,phi,aniso,pol,con,window_sizes]=wismm2(V);
3% Calculate windowed image second moment matrices for image V and return
4% the following values:
5%
6% L1 is the larger eigenvalue (lambda_1)
7% L2 is the smaller eigenvalue (lambda_2)
8% phi is the angle of the 1st eigenvector (phi)
9%
10
11[Gx,Gy]=gradient(V);
12
13GGTxx=Gx.^2;
14GGTxy=Gx.*Gy;
15GGTyy=Gy.^2;
16
17[r,c]=size(V);
18
19min_window_size=3;
20max_window_size=3*round(min(r,c)/16);
21if (-1)^max_window_size==1
22 max_window_size=max_window_size+1;
23end
24window_step_size=2;
25
26window_sizes=min_window_size:2:max_window_size;
27max_count=length(window_sizes);
28
29L1=zeros(r,c,max_count);
30L2=zeros(r,c,max_count);
31phi=zeros(r,c,max_count);
32pol=zeros(r,c,max_count);
33con=zeros(r,c,max_count);
34
35fprintf(1,'Integration window size: ');
36counter=1;
37for n=window_sizes
38 fprintf(1,'%d ',n);
39 Txx=gaussN(GGTxx,n);
40 Txy=gaussN(GGTxy,n);
41 Tyy=gaussN(GGTyy,n);
42
43 tr=Txx+Tyy;
44 V1=0.5*sqrt(tr.^2-4*(Txx.*Tyy-Txy.^2));
45 V1=real(V1);
46
47 L1(:,:,counter)=0.5*tr+V1;
48 L2(:,:,counter)=0.5*tr-V1;
49 phi(:,:,counter)=0.5*atan2(2*Txy,Txx-Tyy);
50
51 % do polarity stuff here
52 grad_smooth_x=gaussN(Gx,n);
53 grad_smooth_y=gaussN(Gy,n);
54 grad_smooth_mag=sqrt(grad_smooth_x.^2+grad_smooth_y.^2);
55 grad_mag=sqrt(Gx.^2+Gy.^2);
56 grad_mag_smooth=gaussN(grad_mag,n);
57 pol(:,:,counter)=grad_smooth_mag./(grad_mag_smooth+eps);
58
59 % contrast calculation
60 con(:,:,counter)=tr;
61 counter=counter+1;
62end
63fprintf(1,'\n')
64
65aniso=1-L2./(L1+eps);
66
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/wismm3.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/wismm3.m
new file mode 100755
index 0000000..89c56ef
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/wismm3.m
@@ -0,0 +1,71 @@
1function [L1,L2,phi,aniso,pol,con,window_sizes]=wismm3(V);
2% [L1,L2,phi,aniso,pol,con,window_sizes]=wismm3(V);
3% Calculate windowed image second moment matrices for image V and return
4% the following values:
5%
6% L1 is the larger eigenvalue (lambda_1)
7% L2 is the smaller eigenvalue (lambda_2)
8% phi is the angle of the 1st eigenvector (phi)
9%
10
11[Gx,Gy]=gradient(V);
12
13GGTxx=Gx.^2;
14GGTxy=Gx.*Gy;
15GGTyy=Gy.^2;
16
17[r,c]=size(V);
18
19min_window_size=3;
20max_window_size=3*round(min(r,c)/16);
21if (-1)^max_window_size==1
22 max_window_size=max_window_size+1;
23end
24window_step_size=2;
25
26window_sizes=min_window_size:2:max_window_size;
27max_count=length(window_sizes);
28
29L1=zeros(r,c,max_count);
30L2=zeros(r,c,max_count);
31phi=zeros(r,c,max_count);
32pol=zeros(r,c,max_count);
33con=zeros(r,c,max_count);
34
35fprintf(1,'Integration window size: ');
36counter=1;
37for n=window_sizes
38 fprintf(1,'%d ',n);
39 Txx=gaussN(GGTxx,n);
40 Txy=gaussN(GGTxy,n);
41 Tyy=gaussN(GGTyy,n);
42
43 tr=Txx+Tyy;
44 V1=0.5*sqrt(tr.^2-4*(Txx.*Tyy-Txy.^2));
45 V1=real(V1);
46
47 L1(:,:,counter)=0.5*tr+V1;
48 L2(:,:,counter)=0.5*tr-V1;
49 phi(:,:,counter)=0.5*atan2(2*Txy,Txx-Tyy);
50
51 % do polarity stuff here
52 [P,angle_vector]=polarity(Gx,Gy,n);
53 quant_bound=angle_vector(2)/2;
54 % (quantize angle and pull corresponding polarity out of P)
55 % (perhaps use set-theoretic functions for masking out P???)
56 for m=1:length(angle_vector);
57 a=angle_vector(end-m+1);
58 old_pol=pol(:,:,counter);
59 Pmask=abs(cos(phi(:,:,counter)-a))>=cos(quant_bound);
60 Pmask=Pmask&(old_pol==0); % prevent pileup on quant. boundaries
61 pol(:,:,counter)=old_pol+(Pmask.*P(:,:,m));
62 end
63
64 % contrast calculation
65 con(:,:,counter)=tr;
66 counter=counter+1;
67end
68fprintf(1,'\n')
69
70aniso=1-L2./(L1+eps);
71
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/write_command.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/write_command.m
new file mode 100755
index 0000000..954a39e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/write_command.m
@@ -0,0 +1,8 @@
1function write_command(fname,fn_base,para)
2
3fid = fopen(fname,'w');
4
5fprintf(fid,'%s ',fn_base);
6fprintf(fid,'%d ',para);
7fprintf(fid,'\nrun\n');
8fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/write_test.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/write_test.m
new file mode 100755
index 0000000..e444c27
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/write_test.m
@@ -0,0 +1,38 @@
1
2I_max = 250;
3tex_max = 30;
4
5%fnames = [130038,130039,130042,130056,130057];
6%fnames = [334074 334031 334044 334003 334065 334000 334039 334018 334002 334029]
7
8fnames = 130057;
9
10for j=1:length(fnames),
11fname = sprintf('images/%d.pgm',fnames(j));
12
13sigs = [1/sqrt(2),1,sqrt(2),2,2*sqrt(2)];r = 3;szs = round(r*3*sigs);
14szs = szs(length(szs))*ones(1,length(szs));
15num_ori = 6;
16
17I = readpgm(fname);
18[text_des,filters] = compute_filter_fft(I,sigs,r,szs,num_ori);
19
20outname = sprintf('plaatje_data/%d',fnames(j));
21
22cutsz =20;
23I = cutoff(I,cutsz);%figure(1);im(I);
24text_des = cutoff(text_des,cutsz);
25
26writeout_feature(I,text_des(:,:,:),outname,I_max,tex_max);
27
28
29if 0,
30for j=0:30,
31 cm = sprintf('!mv plaatje_data/134013.pfm_%d.pfm plaatje_data/134013_%d.pfm',j,j);
32 disp(cm);eval(cm);
33end
34end
35
36end
37
38exit
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writeout_feature.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writeout_feature.m
new file mode 100755
index 0000000..5376d5f
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writeout_feature.m
@@ -0,0 +1,40 @@
1function writeout_feature(I,tex,fname,I_max,tex_max)
2%
3% writeout_feature(I,tex,fname,I_max,tex_max)
4%
5%
6
7
8%%%%% print out image
9I_min = min(I(:));
10
11I = I-I_min;
12I = min(1,I/(I_max-I_min));
13
14I = 2*I-1;
15
16j = 0;
17fn = sprintf('%s_%d.pfm',fname,j);
18cm = sprintf('writepfm: I->%s',fn);
19disp(cm);
20writepfm(fn,I);
21
22
23%%% print out texture
24nf = size(tex,3)
25
26for j=1:nf,
27
28 fn = sprintf('%s_%d.pfm',fname,j);
29 cm = sprintf('writepfm:tex_%d->%s',j,fn);
30 disp(cm);
31
32tex(:,:,j) = tex(:,:,j)/tex_max;fprintf('.');
33tex(:,:,j) = tex(:,:,j).*(tex(:,:,j)<=1) + 1*(tex(:,:,j)>1);fprintf('.')
34tex(:,:,j) = tex(:,:,j).*(tex(:,:,j)>=-1) + (-1)*(tex(:,:,j)<-1);fprintf('.');
35
36 writepfm(fn,tex(:,:,j));
37
38
39end
40
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writepfm.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writepfm.m
new file mode 100755
index 0000000..a831970
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writepfm.m
@@ -0,0 +1,11 @@
1function writepfm(name,I)
2%
3% writepfm(name,I)
4%
5 [nr,nc] = size(I);
6
7 fid = fopen(name, 'w');
8 fprintf(fid, '%d %d\n', nr,nc);
9 fprintf(fid,'%f ',I);
10 fclose(fid);
11
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writepgm.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writepgm.m
new file mode 100755
index 0000000..113cb18
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writepgm.m
@@ -0,0 +1,8 @@
1function I = writepgm(name,I)
2
3 [y,x] = size(I);
4
5 fid = fopen(name, 'w');
6 fprintf(fid, 'P5\n%d %d\n255\n', x,y);
7 fwrite(fid, I', 'uint8');
8 fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writepmm.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writepmm.m
new file mode 100755
index 0000000..675df93
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writepmm.m
@@ -0,0 +1,14 @@
1function writepmm(name,I)
2%
3% writepmm(name,I)
4%
5
6 [nr,nc,nb] = size(I);
7
8 fid = fopen(name,'w');
9
10 fprintf(fid, 'P5\n%d %d %d\n255\n', nc,nr,nb);
11
12 fprintf(fid,'%f ',I);
13 fclose(fid);
14
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writepnm5.m b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writepnm5.m
new file mode 100755
index 0000000..633fba9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filter_hist/writepnm5.m
@@ -0,0 +1,26 @@
1function writepnm5(name,I)
2%
3% writepnm5(name,I)
4%
5% I is a mul-band image
6%
7
8 [nr,nc,nb] = size(I);
9
10 fid = fopen(name,'w');
11
12 fprintf(fid, 'P5\n%d %d %d\n255\n', nc,nr,nb);
13
14 n = nr*nc;
15
16 J = [];
17
18 for j=1:nb,
19 J = [J,reshape(I(:,:,j)',n,1)];
20 end
21
22 J = reshape(J',nb*n,1);
23
24 fprintf(fid,'%f ',J);
25 fclose(fid);
26
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/doog1.m b/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/doog1.m
new file mode 100755
index 0000000..dd8e87b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/doog1.m
@@ -0,0 +1,32 @@
1function H=doog1(sig,r,th,N);
2% H=doog1(sig,r,th,N);
3
4
5% by Serge Belongie
6
7no_pts=N; % no. of points in x,y grid
8
9[x,y]=meshgrid(-(N/2)+1/2:(N/2)-1/2,-(N/2)+1/2:(N/2)-1/2);
10
11phi=pi*th/180;
12sigy=sig;
13sigx=r*sig;
14R=[cos(phi) -sin(phi); sin(phi) cos(phi)];
15C=R*diag([sigx,sigy])*R';
16
17X=[x(:) y(:)];
18
19Gb=gaussian(X,[0 0]',C);
20Gb=reshape(Gb,N,N);
21
22m=R*[0 sig]';
23
24a=1;
25b=-1;
26
27% make odd-symmetric filter
28Ga=gaussian(X,m/2,C);
29Ga=reshape(Ga,N,N);
30Gb=rot90(Ga,2);
31H=a*Ga+b*Gb;
32
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/doog2.m b/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/doog2.m
new file mode 100755
index 0000000..a0511cb
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/doog2.m
@@ -0,0 +1,38 @@
1function G=doog2(sig,r,th,N);
2% G=doog2(sig,r,th,N);
3% Make difference of offset gaussians kernel
4% theta is in degrees
5% (see Malik & Perona, J. Opt. Soc. Amer., 1990)
6%
7% Example:
8% >> imagesc(doog2(1,12,0,64,1))
9% >> colormap(gray)
10
11% by Serge Belongie
12
13no_pts=N; % no. of points in x,y grid
14
15[x,y]=meshgrid(-(N/2)+1/2:(N/2)-1/2,-(N/2)+1/2:(N/2)-1/2);
16
17phi=pi*th/180;
18sigy=sig;
19sigx=r*sig;
20R=[cos(phi) -sin(phi); sin(phi) cos(phi)];
21C=R*diag([sigx,sigy])*R';
22
23X=[x(:) y(:)];
24
25Gb=gaussian(X,[0 0]',C);
26Gb=reshape(Gb,N,N);
27
28m=R*[0 sig]';
29Ga=gaussian(X,m,C);
30Ga=reshape(Ga,N,N);
31Gc=rot90(Ga,2);
32
33a=-1;
34b=2;
35c=-1;
36
37G = a*Ga + b*Gb + c*Gc;
38
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/make_filterbank_even2.m b/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/make_filterbank_even2.m
new file mode 100755
index 0000000..f7f4527
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/make_filterbank_even2.m
@@ -0,0 +1,45 @@
1function FB = make_filterbank(num_ori,filter_scales,wsz,enlong)
2%
3% F = make_filterbank(num_ori,num_scale,wsz)
4%
5
6if nargin<4,
7 enlong = 3;
8end
9
10enlong = 2*enlong;
11
12% definine filterbank
13%num_ori=6;
14%num_scale=3;
15
16num_scale = length(filter_scales);
17
18M1=wsz; % size in pixels
19M2=M1;
20
21ori_incr=180/num_ori;
22ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
23
24FB=zeros(M1,M2,num_ori,num_scale);
25
26% elongated filter set
27counter = 1;
28
29for m=1:num_scale
30 for n=1:num_ori
31 % r=12 here is equivalent to Malik's r=3;
32 f=doog2(filter_scales(m),enlong,ori_offset+(n-1)*ori_incr,M1);
33 FB(:,:,n,m)=f;
34 end
35end
36
37FB=reshape(FB,M1,M2,num_scale*num_ori);
38total_num_filt=size(FB,3);
39
40for j=1:total_num_filt,
41 F = FB(:,:,j);
42 a = sum(sum(abs(F)));
43 FB(:,:,j) = FB(:,:,j)/a;
44end
45
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/make_filterbank_odd2.m b/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/make_filterbank_odd2.m
new file mode 100755
index 0000000..0059dca
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/make_filterbank_odd2.m
@@ -0,0 +1,46 @@
1function FB = make_filterbank(num_ori,filter_scales,wsz,enlong)
2%
3% F = make_filterbank(num_ori,num_scale,wsz)
4%
5
6if nargin<4,
7 enlong = 3;
8end
9
10enlong = enlong*2;
11
12% definine filterbank
13%num_ori=6;
14%num_scale=3;
15
16num_scale = length(filter_scales);
17
18M1=wsz; % size in pixels
19M2=M1;
20
21ori_incr=180/num_ori;
22ori_offset=ori_incr/2; % helps with equalizing quantiz. error across filter set
23
24FB=zeros(M1,M2,num_ori,num_scale);
25
26
27% elongated filter set
28counter = 1;
29
30for m=1:num_scale
31 for n=1:num_ori
32 % r=12 here is equivalent to Malik's r=3;
33 f=doog1(filter_scales(m),enlong,ori_offset+(n-1)*ori_incr,M1);
34 FB(:,:,n,m)=f;
35 end
36end
37
38FB=reshape(FB,M1,M2,num_scale*num_ori);
39total_num_filt=size(FB,3);
40
41for j=1:total_num_filt,
42 F = FB(:,:,j);
43 a = sum(sum(abs(F)));
44 FB(:,:,j) = FB(:,:,j)/a;
45end
46
diff --git a/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/quadedgep2.m b/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/quadedgep2.m
new file mode 100755
index 0000000..5041377
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/filtersQuad/quadedgep2.m
@@ -0,0 +1,188 @@
1% function [xs,ys,gx,gy,par,threshold,mag,mage,g,FIe,FIo,mago] = quadedgep(I,par,threshold);
2% Input:
3% I = image
4% par = vector for 4 parameters
5% [number of filter orientations, number of scale, filter size, elongation]
6% To use default values, put 0.
7% threshold = threshold on edge strength
8% Output:
9% [x,y,gx,gy] = locations and gradients of an ordered list of edgels
10% x,y could be horizontal or vertical or 45 between pixel sites
11% but it is guaranteed that there [floor(y) + (floor(x)-1)*nr]
12% is ordered and unique. In other words, each edgel has a unique pixel id.
13% par = actual par used
14% threshold = actual threshold used
15% mag = edge magnitude
16% mage = phase map
17% g = gradient map at each pixel
18% [FIe,FIo] = odd and even filter outputs
19% mago = odd filter output of optimum orientation
20
21% Stella X. Yu, 2001
22
23% This is the multi scale version of the filtering
24% For the moment the parameters are defined by default. See line 34
25
26
27function [x,y,gx,gy,par,threshold,mag_s,mage,g,FIe,FIo,mago] = quadedgep2(I,par,data,threshold);
28
29
30if nargin<4 | isempty(threshold),
31 threshold = 0.1;
32end
33
34[r,c] = size(I);
35def_par = [4,30,3];
36
37display_on = 1;
38
39% take care of parameters, any missing value is substituted by a default value
40if nargin<2 | isempty(par),
41 par = def_par;
42end
43% par(end+1:4)=0;
44% par = par(:);
45% j = (par>0);
46% have_value = [ j, 1-j ];
47% j = 1; n_filter = have_value(j,:) * [par(j); def_par(j)];
48% j = 2; n_scale = have_value(j,:) * [par(j); def_par(j)];
49% j = 3; winsz = have_value(j,:) * [par(j); def_par(j)];
50% j = 4; enlong = have_value(j,:) * [par(j); def_par(j)];
51
52n_ori = par(1); %if it doesn't work, par<-def_par
53
54winsz = par(2);
55enlong = par(3);
56
57% always make filter size an odd number so that the results will not be skewed
58j = winsz/2;
59if not(j > fix(j) + 0.1),
60 winsz = winsz + 1;
61end
62
63% filter the image with quadrature filters
64if (isempty(data.W.scales))
65 error ('no scales entered');
66end
67
68n_scale=length(data.W.scales);
69filter_scales=data.W.scales;
70%
71% if strcmp(data.dataWpp.mode,'multiscale')
72% n_scale=size((data.dataWpp.scales),2);
73% filter_scales=data.dataWpp.scales;
74% else
75% filter_scales=data.dataWpp.scales(1);
76% n_scale=1;
77% end
78% if n_scale>0&&strcmp(data.dataWpp.mode,'multiscale')
79% if (~isempty(data.dataWpp.scales))
80% filter_scales=data.dataWpp.scales;
81% else
82% filter_scales=zeros(1,n_scale);
83%
84% for i=1:n_scale,
85% filter_scales(i)=(sqrt(2))^(i-1);
86% end
87% data.dataWpp.scales=filter_scales;
88% end
89% else filter_scale=1;
90% data.dataWpp.scales=filter_scales;
91% end
92%
93% %%%%%%% juste pour que ca tourne
94% if ~strcmp(data.dataWpp.mode,'multiscale')
95% filter_scales=data.dataWpp.scales(1);
96% n_scale=4;
97% end
98% %%%%%%%%%%%%
99
100FBo = make_filterbank_odd2(n_ori,filter_scales,winsz,enlong);
101FBe = make_filterbank_even2(n_ori,filter_scales,winsz,enlong);
102n = ceil(winsz/2);
103f = [fliplr(I(:,2:n+1)), I, fliplr(I(:,c-n:c-1))];
104f = [flipud(f(2:n+1,:)); f; flipud(f(r-n:r-1,:))];
105FIo = fft_filt_2(f,FBo,1);
106FIo = FIo(n+[1:r],n+[1:c],:);
107FIe = fft_filt_2(f,FBe,1);
108FIe = FIe(n+[1:r],n+[1:c],:);
109
110% compute the orientation energy and recover a smooth edge map
111% pick up the maximum energy across scale and orientation
112% even filter's output: as it is the second derivative, zero cross localize the edge
113% odd filter's output: orientation
114
115[nr,nc,nb] = size(FIe);
116
117FIe = reshape(FIe, nr,nc,n_ori,length(filter_scales));
118FIo = reshape(FIo, nr,nc,n_ori,length(filter_scales));
119
120mag_s = zeros(nr,nc,n_scale);
121mag_a = zeros(nr,nc,n_ori);
122
123mage = zeros(nr,nc,n_scale);
124mago = zeros(nr,nc,n_scale);
125mage = zeros(nr,nc,n_scale);
126mago = zeros(nr,nc,n_scale);
127
128
129
130for i = 1:n_scale,
131 mag_s(:,:,i) = sqrt(sum(FIo(:,:,:,i).^2,3)+sum(FIe(:,:,:,i).^2,3));
132 mag_a = sqrt(FIo(:,:,:,i).^2+FIe(:,:,:,i).^2);
133 [tmp,max_id] = max(mag_a,[],3);
134
135 base_size = nr * nc;
136 id = [1:base_size]';
137 mage(:,:,i) = reshape(FIe(id+(max_id(:)-1)*base_size+(i-1)*base_size*n_ori),[nr,nc]);
138 mago(:,:,i) = reshape(FIo(id+(max_id(:)-1)*base_size+(i-1)*base_size*n_ori),[nr,nc]);
139
140 mage(:,:,i) = (mage(:,:,i)>0) - (mage(:,:,i)<0);
141
142 if display_on,
143 ori_incr=pi/n_ori; % to convert jshi's coords to conventional image xy
144 ori_offset=ori_incr/2;
145 theta = ori_offset+([1:n_ori]-1)*ori_incr; % orientation detectors
146 % [gx,gy] are image gradient in image xy coords, winner take all
147
148 ori = theta(max_id);
149 ori = ori .* (mago(:,:,i)>0) + (ori + pi).*(mago(:,:,i)<0);
150 gy{i} = mag_s(:,:,i) .* cos(ori);
151 gx{i} = -mag_s(:,:,i) .* sin(ori);
152 g = cat(3,gx{i},gy{i});
153
154 % phase map: edges are where the phase changes
155 mag_th = max(max(mag_s(:,:,i))) * threshold;
156 eg = (mag_s(:,:,i)>mag_th);
157 h = eg & [(mage(2:r,:,i) ~= mage(1:r-1,:,i)); zeros(1,nc)];
158 v = eg & [(mage(:,2:c,i) ~= mage(:,1:c-1,i)), zeros(nr,1)];
159 [y{i},x{i}] = find(h | v);
160 k = y{i} + (x{i}-1) * nr;
161 h = h(k);
162 v = v(k);
163 y{i} = y{i} + h * 0.5; % i
164 x{i} = x{i} + v * 0.5; % j
165 t = h + v * nr;
166 gx{i} = g(k) + g(k+t);
167 k = k + (nr * nc);
168 gy{i} = g(k) + g(k+t);
169
170% figure(1);
171% clf;
172% imagesc(I);colormap(gray);
173% hold on;
174% quiver(x,y,gx,gy); hold off;
175% title(sprintf('scale = %d, press return',i));
176
177 % pause;
178 0;
179else
180 x = [];
181 y = [];
182 gx = [];
183 gy =[];
184 g= [];
185 end
186end
187
188
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/convert422.m b/SD-VBS/common/toolbox/toolbox_basic/io/convert422.m
new file mode 100755
index 0000000..919e82e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/convert422.m
@@ -0,0 +1,27 @@
1image_current = '/hid/jshi';
2
3image_dir = 'vr05_5 ';
4pg_path = '/hid/jshi/422toppm/422toppm';
5
6cm = sprintf('cd %s',image_dir);
7disp(cm);
8eval(cm);
9
10d = dir('seq*');
11filename = char(sort({d.name}));
12
13for j=1:size(filename),
14 cm = sprintf('!%s %s',pg_path,deblank(filename(j,:)));
15disp(cm);
16eval(cm);
17end
18
19
20%%% change back
21cm = sprintf('cd %s',image_current);
22disp(cm);eval(cm);
23
24
25if 0,
26 deblank(filename(f,:));
27end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/im_vd.m b/SD-VBS/common/toolbox/toolbox_basic/io/im_vd.m
new file mode 100755
index 0000000..590cd9b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/im_vd.m
@@ -0,0 +1,6 @@
1function J = im_vd(I);
2
3J(:,:,1) = I(1:2:end,1:2:end);
4J(:,:,2) = I(2:2:end,1:2:end);
5
6montage2(J);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/imread2.m b/SD-VBS/common/toolbox/toolbox_basic/io/imread2.m
new file mode 100755
index 0000000..27a5e4b
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/imread2.m
@@ -0,0 +1,45 @@
1function I = imread2(fname,im_dir);
2%
3% I = imread2(fname,im_dir);
4%
5
6cur_dir = pwd;
7
8if nargin>1,
9 cd(im_dir);
10end
11
12%%% put on the necessary extension
13d = dir(fname);
14
15if isempty(d),
16 d = dir([fname,'*']);
17end
18
19if isempty(d),
20 I = [];
21else
22
23 fname = d.name;
24
25 %%% find extension
26 k = findstr(fname,'.');
27 ext = fname(k(end)+1:end);
28
29 if (ext == 'bz2'),
30 cm = sprintf('!bzip2 -d %s',fname);
31 disp(cm);eval(cm);
32 I = imread2(fname(1:k(end-1)-1));
33 cm = sprintf('!bzip2 %s',fname(1:k(end)-1));
34 disp(cm);eval(cm);
35 elseif (ext == 'ppm');
36 I = readppm(fname);
37 elseif (ext == 'pgm');
38 I = readpgm(fname);
39 else
40 I = imread(fname);
41I = double(I)/255;
42 end
43end
44
45cd(cur_dir);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/peek_pgm_size.m b/SD-VBS/common/toolbox/toolbox_basic/io/peek_pgm_size.m
new file mode 100755
index 0000000..13e54cd
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/peek_pgm_size.m
@@ -0,0 +1,19 @@
1function [nr,nc] = peek_pgm_size(filename)
2% function [nr,nc] = peek_pgm_size(filename)
3% this is my version of pgmread for the pgm file created by XV.
4%
5% this program also corrects for the shifts in the image from pm file.
6
7
8fid = fopen(filename,'r');
9fscanf(fid, 'P5\n');
10cmt = '#';
11while findstr(cmt, '#'),
12 cmt = fgets(fid);
13 if length(findstr(cmt, '#')) ~= 1,
14 YX = sscanf(cmt, '%d %d');
15 nc = YX(1); nr = YX(2);
16 end
17end
18
19fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/pgmread.m b/SD-VBS/common/toolbox/toolbox_basic/io/pgmread.m
new file mode 100755
index 0000000..49a35a8
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/pgmread.m
@@ -0,0 +1,24 @@
1function [img,header] = pgmread(filename)
2%
3% [img,header] = pgmread(filename)
4
5[fid, msg] = fopen(filename, 'r');
6if fid == -1,
7 error(msg)
8end
9
10head = [];
11good = 0;
12while (good == 0) ,
13 l = fgetl(fid);
14 if (length(l) == 3),
15 if (l == '255'),
16 good = 1;
17 sze = sscanf(header,'%d');
18 end
19 end
20 header= l;
21end
22
23img = fread(fid, sze', 'uchar')';
24fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/ppmtojpg.m b/SD-VBS/common/toolbox/toolbox_basic/io/ppmtojpg.m
new file mode 100755
index 0000000..ce47e45
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/ppmtojpg.m
@@ -0,0 +1,25 @@
1function []= ppm2jpg(fname,dlm,ori)
2%
3% ppm2jpg(fname,dlm,ori)
4%
5% dlm =1, remove the file extension from fname
6% before convert
7% ori =1, transpose the image
8%
9
10if dlm,
11 dlm = findstr(fname,'.');
12 fname = fname(1:dlm(end)-1);
13end
14
15fname_1 = sprintf('%s.ppm',fname);
16I = readppm(fname_1);
17
18if ori == 1,
19 I = permute(I,[2 1 3]);
20end
21
22
23fname_2 = sprintf('%s.jpg',fname);
24imwrite(I,fname_2,'jpeg','Quality',90);
25
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/read422.m b/SD-VBS/common/toolbox/toolbox_basic/io/read422.m
new file mode 100755
index 0000000..31a27f9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/read422.m
@@ -0,0 +1,45 @@
1function I = read422(fname,nc);
2%
3% I = read422(fname,width);
4%
5% read in a .422 file, need to pass image width, default = 640
6%
7
8% assume image width = 640
9if nargin<2,
10 nc = 640;
11end
12
13%% find the image size
14fid = fopen(fname);
15fseek(fid,0,1);
16fsize = ftell(fid);
17
18nr = fsize/nc/2;
19fseek(fid,0,-1);
20
21%% read in Ybr data
22data = fread(fid,fsize,'uchar');
23
24%%% extract Y, Cb, Cr
25Y1 = data(1:2:end); Y1 = reshape(Y1,nc,nr)';
26Cb1 = data(2:4:end); Cb1 = reshape(Cb1,nc/2,nr)';
27Cr1 = data(4:4:end); Cr1 = reshape(Cr1,nc/2,nr)';
28
29Cb = zeros(size(Y1));
30Cr = zeros(size(Y1));
31
32Cb(:,1:2:end) = Cb1; Cb(:,2:2:end) = Cb1;
33%Cb(:,2:2:end) = 0.5*(Cb1+[Cb1(:,2:end),Cb1(:,end)]);
34
35Cr(:,1:2:end) = Cr1; Cr(:,2:2:end) = Cr1;
36%Cr(:,2:2:end) = 0.5*(Cr1+[Cr1(:,2:end),Cr1(:,end)]);
37
38%%% convert to r,g,b
39r = 1.164*(Y1-16.0) + 1.596*(Cr-128.0);
40g = 1.164*(Y1-16.0) - 0.813*(Cr-128.0) - 0.391*(Cb-128.0);
41b = 1.164*(Y1-16.0) + 2.018*(Cb-128.0);
42
43I = cat(3,r,g,b);
44I = max(0,min(I,255));
45I = I/255;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/read422f.m b/SD-VBS/common/toolbox/toolbox_basic/io/read422f.m
new file mode 100755
index 0000000..0063000
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/read422f.m
@@ -0,0 +1,50 @@
1function I = read422(fname,nc);
2%
3% I = read422(fname,width);
4%
5% read in a .422 file, need to pass image width, default = 640
6%
7
8% assume image width = 640
9if nargin<2,
10 nc = 640;
11end
12
13%% find the image size
14fid = fopen(fname);
15fseek(fid,0,1);
16fsize = ftell(fid);
17
18nr = fsize/nc/2;
19
20fseek(fid,0,-1);
21
22%% read in Ybr data
23data = fread(fid,fsize,'uchar');
24
25%%% extract Y, Cb, Cr
26Y1 = data(1:2:end); Y1 = reshape(Y1,nc,nr)';
27Cb1 = data(2:4:end); Cb1 = reshape(Cb1,nc/2,nr)';
28Cr1 = data(4:4:end); Cr1 = reshape(Cr1,nc/2,nr)';
29
30Cb = zeros(size(Y1));
31Cr = zeros(size(Y1));
32
33Cb(:,1:2:end) = Cb1; Cb(:,2:2:end) = Cb1;
34%Cb(:,2:2:end) = 0.5*(Cb1+[Cb1(:,2:end),Cb1(:,end)]);
35
36Cr(:,1:2:end) = Cr1; Cr(:,2:2:end) = Cr1;
37%Cr(:,2:2:end) = 0.5*(Cr1+[Cr1(:,2:end),Cr1(:,end)]);
38
39%%% convert to r,g,b
40r = 1.164*(Y1-16.0) + 1.596*(Cr-128.0);
41g = 1.164*(Y1-16.0) - 0.813*(Cr-128.0) - 0.391*(Cb-128.0);
42b = 1.164*(Y1-16.0) + 2.018*(Cb-128.0);
43
44r = flipud(max(0,min(r,255)));
45g = flipud(max(0,min(g,255)));
46b = flipud(max(0,min(b,255)));
47
48I = cat(3,r,g,b);
49
50I = permute(I/255,[2,1,3]);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/read_cimgs.m b/SD-VBS/common/toolbox/toolbox_basic/io/read_cimgs.m
new file mode 100755
index 0000000..d5df7f5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/read_cimgs.m
@@ -0,0 +1,40 @@
1function Is = read_imgs(homedir,imgdir,prename,postname,digits,startid,endid,step_img)
2%
3% Is = read_imgs(homedir,imgdir,prename,postname,digits,startid,endid,step_img)
4%
5
6
7
8command = ['%s%s%s%.',num2str(digits),'d%s'];
9
10fname = sprintf(command,homedir,imgdir,prename,startid,postname);
11disp(fname);
12if (strcmp('.ppm',postname)),
13 I1 = readppm(fname);
14else
15 I1 = imread(fname);
16end
17
18
19Is = zeros(size(I1,1),size(I1,2),size(I1,3),1+floor((endid-startid)/step_img));
20Is(:,:,:,1) = I1;
21im_id = 1;
22for j = startid+step_img:step_img:endid,
23 command = ['%s%s%s%.',num2str(digits),'d%s'];
24 fname = sprintf(command,homedir,imgdir,prename,j,postname);
25 disp(fname);
26 im_id = im_id+1;
27
28 if (strcmp('.ppm',postname)),
29 Is(:,:,:,im_id) = readppm(fname);
30 else
31 a = imread(fname);
32 Is(:,:,:,im_id) = a;
33 end
34end
35
36
37
38
39
40
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/read_ev_pgm.m b/SD-VBS/common/toolbox/toolbox_basic/io/read_ev_pgm.m
new file mode 100755
index 0000000..3f7b69d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/read_ev_pgm.m
@@ -0,0 +1,26 @@
1function [evs,ev_info] = read_ev_pgm(basename,start_id,end_id,neigs)
2%
3% evs = read_ev_pgm(basename,start_id,end_id,neigs)
4%
5%
6
7fname = sprintf('%s_ev_%.2d.%.2d.pgm',basename,start_id,1)
8[nr,nc] = peek_pgm_size(fname);
9
10evs = zeros(nr,nc,neigs-1,start_id-end_id+1);
11ev_info = zeros(4,neigs-1,start_id-end_id+1);
12
13for j=start_id:end_id,
14 for k=1:neigs-1,
15
16 fname = sprintf('%s_ev_%.2d.%.2d.pgm',basename,j,k);
17 [I,info] = readpgm_evinfo(fname);
18
19 if (length(info)<4)
20 info = [0;0;0;0];
21 end
22
23 evs(:,:,k,j-start_id+1) = I;
24 ev_info(:,k,j-start_id+1) = info';
25 end
26end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/read_ev_pgm2.m b/SD-VBS/common/toolbox/toolbox_basic/io/read_ev_pgm2.m
new file mode 100755
index 0000000..b0cc3f9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/read_ev_pgm2.m
@@ -0,0 +1,29 @@
1function [evs,ev_info] = read_ev_pgm2(basename,start_id,end_id,neigs)
2%
3% evs = read_ev_pgm(basename,start_id,end_id,neigs)
4%
5% read_ev_pgm.m modified by SXY in Feb. 2001.
6% The first eigenvector is also included
7
8fname = sprintf('%s_ev_%.2d.%.2d.pgm',basename,start_id,1)
9[nr,nc] = peek_pgm_size(fname);
10
11evs = zeros(nr,nc,neigs,start_id-end_id+1);
12ev_info = zeros(4,neigs,start_id-end_id+1);
13
14for j=start_id:end_id,
15
16 for k=1:neigs,
17
18 fname = sprintf('%s_ev_%.2d.%.2d.pgm',basename,j,k-1);
19
20 [I,info] = readpgm_evinfo(fname);
21
22 if (length(info)<4)
23 info = [0;0;0;0];
24 end
25
26 evs(:,:,k,j-start_id+1) = I;
27 ev_info(:,k,j-start_id+1) = info';
28 end
29end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/read_ev_pgm_real.m b/SD-VBS/common/toolbox/toolbox_basic/io/read_ev_pgm_real.m
new file mode 100755
index 0000000..d985679
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/read_ev_pgm_real.m
@@ -0,0 +1,30 @@
1function [evs,ev_info] = read_ev_pgm(basename,start_id,end_id,neigs)
2%
3% evs = read_ev_pgm(basename,start_id,end_id,neigs)
4%
5%
6
7fname = sprintf('%s_ev_%.2d.%.2d.pgm',basename,start_id,1);
8[nr,nc] = peek_pgm_size(fname);
9
10evs = zeros(nr,nc,neigs-1,start_id-end_id+1);
11ev_info = zeros(4,neigs-1,start_id-end_id+1);
12
13for j=start_id:end_id,
14 for k=1:neigs,
15
16 fname = sprintf('%s_ev_%.2d.%.2d.pgm',basename,j,k-1);
17 [I,info] = readpgm_evinfo(fname);
18
19 evs(:,:,k,j-start_id+1) = I;
20 ev_info(:,k,j-start_id+1) = info';
21 end
22end
23
24evs = squeeze(evs);
25
26for j=1:neigs,
27 evs(:,:,j) = (evs(:,:,j)/ev_info(3,j)) +ev_info(1,j);
28 %evs(:,:,j) = evs(:,:,j)/norm(reshape(evs(:,:,j),nr*nc,1));
29end
30
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/read_imgs.m b/SD-VBS/common/toolbox/toolbox_basic/io/read_imgs.m
new file mode 100755
index 0000000..f84486c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/read_imgs.m
@@ -0,0 +1,47 @@
1function Is = read_imgs(homedir,imgdir,prename,postname,digits,startid,endid,step_img)
2%
3% Is = read_imgs(homedir,imgdir,prename,postname,digits,startid,endid,step_img)
4%
5
6
7
8command = ['%s%s%s%.',num2str(digits),'d%s'];
9
10fname = sprintf(command,homedir,imgdir,prename,startid,postname);
11disp(fname);
12if (strcmp('.pgm',postname)),
13 I1 = readpgm(fname);
14elseif (strcmp('.ppm',postname))
15 a = readppm(fname);
16 I1 = sum(a,3);
17else
18 a = imread(fname); a = sum(double(a),3);
19 I1 = a;
20end
21
22
23Is = zeros(size(I1,1),size(I1,2),1+floor((endid-startid)/step_img));
24Is(:,:,1) = I1;
25im_id = 1;
26for j = startid+step_img:step_img:endid,
27 command = ['%s%s%s%.',num2str(digits),'d%s'];
28 fname = sprintf(command,homedir,imgdir,prename,j,postname);
29 disp(fname);
30 im_id = im_id+1;
31
32 if (strcmp('.pgm',postname)),
33 Is(:,:,im_id) = readpgm(fname);
34 elseif (strcmp('.ppm',postname))
35 a = readppm(fname);
36 Is(:,:,im_id) = sum(a,3);
37 else
38 a = imread(fname); a = sum(double(a),3);
39 Is(:,:,im_id) = a;
40 end
41end
42
43
44
45
46
47
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/read_pmm.m b/SD-VBS/common/toolbox/toolbox_basic/io/read_pmm.m
new file mode 100755
index 0000000..9e2eed1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/read_pmm.m
@@ -0,0 +1,12 @@
1function I = read_pmm(fname)
2
3fid = fopen(fname,'r');
4
5[A] = fscanf(fid,'%d\n',3);
6
7I = fscanf(fid,'%d',prod(A));
8
9
10I = reshape(I,A(2),A(1))';
11
12I = squeeze(I);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/read_scan.m b/SD-VBS/common/toolbox/toolbox_basic/io/read_scan.m
new file mode 100755
index 0000000..6ad818a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/read_scan.m
@@ -0,0 +1,42 @@
1function [img,sizeinfo] = pgmread(filename)
2% function img = pgmread(filename)
3% this is my version of pgmread for the pgm file created by XV.
4%
5% this program also corrects for the shifts in the image from pm file.
6
7
8fname_header = sprintf('%s.h01',filename);
9fname_data = sprintf('%s.i01',filename);
10
11fid = fopen(fname_header,'r');
12
13
14done = 0;
15while done~=3,
16 cmt = fgets(fid)
17 if (findstr(cmt,'!matrix size[1]')),
18 nc = sscanf(cmt,'!matrix size[1] :=%d');
19 done = done+1;
20 elseif (findstr(cmt,'!matrix size[2]')),
21 nr = sscanf(cmt,'!matrix size[2] :=%d');
22 done = done+1;
23 elseif (findstr(cmt,'!matrix size[3]')),
24 ns = sscanf(cmt,'!matrix size[3] :=%d');
25 done = done+1;
26 end
27end
28fclose(fid);
29
30fid = fopen(fname_data,'r');
31
32%img = fscanf(fid,'%d',size);
33%img = img';
34
35img = fread(fid,nc*nr*ns,'uint8');
36img = reshape(img,nc,nr,ns);
37
38sizeinfo(1) = nr;
39sizeinfo(2) = nc;
40sizeinfo(3) = ns;
41
42fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/read_seg_file.m b/SD-VBS/common/toolbox/toolbox_basic/io/read_seg_file.m
new file mode 100755
index 0000000..a056ebc
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/read_seg_file.m
@@ -0,0 +1,36 @@
1function [seg_map,seg] = read_seg(filename)
2%
3% function seg = read_seg(filename)
4%
5
6fid = fopen(filename,'r');
7if (fid < 0),
8 error(sprintf('can not find file: %s',filename));
9end
10
11header_done =0;
12while ~header_done,
13
14 cmt = fgets(fid);
15 if length(findstr(cmt,'#')) ~=1,
16 header_done = 1;
17 cmt = fgets(fid);
18 nc = sscanf(cmt,'width %d\n');
19 cmt = fgets(fid);
20 nr = sscanf(cmt,'height %d\n');
21 cmt = fgets(fid);
22 mseg = sscanf(cmt,'segments %d\n');
23 cmt = fgets(fid);
24 end
25end
26
27seg = fscanf(fid,'%d',100*nr);
28tmp = length(seg(:))/4;
29seg = reshape(seg,4,tmp)';
30
31seg_map = zeros(nr,nc);
32
33for j=1:tmp,
34 seg_map(seg(j,2)+1,1+seg(j,3):1+seg(j,4)) = seg(j,1);
35end
36
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/readlines.m b/SD-VBS/common/toolbox/toolbox_basic/io/readlines.m
new file mode 100755
index 0000000..90bc944
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/readlines.m
@@ -0,0 +1,30 @@
1function [lines,indexes] = readlines(fname)
2%
3% [lines,indexes] = readlines(fname)
4% Read Edges points from .Ins file produced by "getlines"
5% lines: a num_pointsx2 matrix of the edge points
6% indexes: the braking point the lines
7%
8
9fid = fopen(fname,'r');
10
11done = 0;
12lines = [];
13indexes = [];
14
15first_line = fscanf(fid,'%s',1);
16
17while (~done),
18 num_lines = sscanf(first_line(3:length(first_line)),'%d');
19 disp(num_lines);
20 indexes = [indexes,num_lines];
21 a = fscanf(fid,'%f',[2,num_lines]);
22 lines = [lines;a'];
23
24 first_line = fscanf(fid,'%s',1);
25 if (first_line == []),
26 done = 1;
27 end
28end
29
30
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/readpdm3.m b/SD-VBS/common/toolbox/toolbox_basic/io/readpdm3.m
new file mode 100755
index 0000000..c21fc48
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/readpdm3.m
@@ -0,0 +1,16 @@
1function I = readpdm(filename)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',3)
6A(3) = max(1,A(3));
7
8I = fscanf(fid,'%d',[A(1)*A(2)*A(3)]);
9
10%I = fscanf(fid,'%f',A(2)*A(1));I = reshape(I,A(1),A(2));
11
12I = reshape(I,A(2),A(1),A(3));
13
14I = permute(I,[2,1,3]);
15
16fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/readpdmc.m b/SD-VBS/common/toolbox/toolbox_basic/io/readpdmc.m
new file mode 100755
index 0000000..37910b9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/readpdmc.m
@@ -0,0 +1,12 @@
1function I = readpfm(filename)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',2);
6I = fscanf(fid,'%d',[A(2),A(1)]);
7%I = fscanf(fid,'%d',[300,1000]);
8I = I';
9
10%I = fscanf(fid,'%f',A(2)*A(1));I = reshape(I,A(1),A(2));
11
12fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/readpfm.m b/SD-VBS/common/toolbox/toolbox_basic/io/readpfm.m
new file mode 100755
index 0000000..48ecd78
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/readpfm.m
@@ -0,0 +1,10 @@
1function I = readpfm(filename)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',2);
6I = fscanf(fid,'%f',[A(1),A(2)]);
7
8%I = fscanf(fid,'%f',A(2)*A(1));I = reshape(I,A(1),A(2));
9
10fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/readpfm3.m b/SD-VBS/common/toolbox/toolbox_basic/io/readpfm3.m
new file mode 100755
index 0000000..15ba959
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/readpfm3.m
@@ -0,0 +1,17 @@
1function I = readpfm(filename)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',3);
6A(3) = max(1,A(3));
7
8I = fscanf(fid,'%f',[A(1)*A(2)*A(3)]);
9
10%I = fscanf(fid,'%f',A(2)*A(1));I = reshape(I,A(1),A(2));
11
12I = reshape(I,A(2),A(1),A(3));
13I = permute(I,[2,1,3]);
14
15I = squeeze(I);
16
17fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/readpfmc.m b/SD-VBS/common/toolbox/toolbox_basic/io/readpfmc.m
new file mode 100755
index 0000000..2039002
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/readpfmc.m
@@ -0,0 +1,11 @@
1function I = readpfm(filename)
2
3fid = fopen(filename,'r');
4
5A = fscanf(fid,'%d',2);
6I = fscanf(fid,'%f',[A(2),A(1)]);
7I = I';
8
9%I = fscanf(fid,'%f',A(2)*A(1));I = reshape(I,A(1),A(2));
10
11fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/readpgm.m b/SD-VBS/common/toolbox/toolbox_basic/io/readpgm.m
new file mode 100755
index 0000000..7aaf998
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/readpgm.m
@@ -0,0 +1,30 @@
1function img = pgmread(filename)
2% function img = pgmread(filename)
3% this is my version of pgmread for the pgm file created by XV.
4%
5% this program also corrects for the shifts in the image from pm file.
6
7
8fid = fopen(filename,'r');
9if (fid < 0),
10 error(sprintf('can not find file: %s',filename));
11end
12
13fscanf(fid, 'P5\n');
14cmt = '#';
15while findstr(cmt, '#'),
16 cmt = fgets(fid);
17 if length(findstr(cmt, '#')) ~= 1,
18 YX = sscanf(cmt, '%d %d');
19 y = YX(1); x = YX(2);
20 end
21end
22
23fgets(fid);
24
25%img = fscanf(fid,'%d',size);
26%img = img';
27
28img = fread(fid,[y,x],'uint8');
29img = img';
30fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/readpgm_evinfo.m b/SD-VBS/common/toolbox/toolbox_basic/io/readpgm_evinfo.m
new file mode 100755
index 0000000..69f80ba
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/readpgm_evinfo.m
@@ -0,0 +1,35 @@
1function [img,ev_info] = pgmread_evinfo(filename)
2% function img = pgmread(filename)
3% this is my version of pgmread for the pgm file created by XV.
4%
5% return the information in line #
6
7
8fid = fopen(filename,'r');
9
10if (fid <0),
11 error(sprintf('can not find file %s',filename));
12end
13
14fscanf(fid, 'P5\n');
15cmt = '#';
16while findstr(cmt, '#'),
17 cmt = fgets(fid);
18 if findstr(cmt,'#'),
19 ev_info = sscanf(cmt,'# minv: %f, maxv: %f, scale: %f, eigval: %f');
20 end
21 if length(findstr(cmt, '#')) ~= 1,
22 YX = sscanf(cmt, '%d %d');
23 y = YX(1); x = YX(2);
24 end
25end
26
27fgets(fid);
28
29%img = fscanf(fid,'%d',size);
30%img = img';
31
32img = fread(fid,[y,x],'uint8');
33img = img';
34fclose(fid);
35
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/readpmm.m b/SD-VBS/common/toolbox/toolbox_basic/io/readpmm.m
new file mode 100755
index 0000000..88fe907
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/readpmm.m
@@ -0,0 +1,22 @@
1function I=readpmm(name)
2%
3% I=writepmm(name)
4%
5% I is a mul-band image
6%
7 fid = fopen(name,'r');
8
9 if (fid <0),
10 error(sprintf('can not find file %s',name));
11 end
12
13 a = fscanf(fid,'%d',3);
14 nr = a(1);nc = a(2);nb = a(3);
15
16
17 I = fscanf(fid, '%f\n', nr*nc*nb);
18
19 I = reshape(I,nc,nr,nb)';
20 I = squeeze(I);
21
22 fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/readppm.m b/SD-VBS/common/toolbox/toolbox_basic/io/readppm.m
new file mode 100755
index 0000000..b9dd566
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/readppm.m
@@ -0,0 +1,23 @@
1function [I,r, g, b] = readppm(name)
2
3 fid = fopen(name, 'r');
4 fscanf(fid, 'P6\n');
5 cmt = '#';
6 while findstr(cmt, '#'),
7 cmt = fgets(fid);
8 if length(findstr(cmt, '#')) ~= 1
9 YX = sscanf(cmt, '%d %d');
10 y = YX(1); x = YX(2);
11 end
12 end
13 fgets(fid);
14 packed = fread(fid,[3*y,x],'uint8')';
15 r = packed(:,1:3:3*y);
16 g = packed(:,2:3:3*y);
17 b = packed(:,3:3:3*y);
18 fclose(fid);
19
20 I(:,:,1) = r;
21 I(:,:,2) = g;
22 I(:,:,3) = b;
23 I = I/255;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/writepgm.m b/SD-VBS/common/toolbox/toolbox_basic/io/writepgm.m
new file mode 100755
index 0000000..113cb18
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/writepgm.m
@@ -0,0 +1,8 @@
1function I = writepgm(name,I)
2
3 [y,x] = size(I);
4
5 fid = fopen(name, 'w');
6 fprintf(fid, 'P5\n%d %d\n255\n', x,y);
7 fwrite(fid, I', 'uint8');
8 fclose(fid);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/writeppm.m b/SD-VBS/common/toolbox/toolbox_basic/io/writeppm.m
new file mode 100755
index 0000000..3d2fed1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/writeppm.m
@@ -0,0 +1,14 @@
1function writeppm(name,I)
2
3 [y,x,nb] = size(I);
4
5 fid = fopen(name, 'w');
6 fprintf(fid, 'P6\n%d %d\n255\n', x,y);
7
8 I1 = reshape(I(:,:,1)',1,x*y);
9 I2 = reshape(I(:,:,2)',1,x*y);
10 I3 = reshape(I(:,:,3)',1,x*y);
11
12 fwrite(fid, [I1;I2;I3], 'uint8');
13 fclose(fid);
14
diff --git a/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/Contents.m b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/Contents.m
new file mode 100755
index 0000000..3ddb232
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/Contents.m
@@ -0,0 +1,26 @@
1%Functions related to the assignment problem.
2%Version 1.0, 25-May-1999.
3%
4%Copyright (c) 1995-1999 Niclas Borlin, Dept. of Computing Science,
5% Umea University, SE-901 87 UMEA, Sweden.
6% Niclas.Borlin@cs.umu.se.
7% www.cs.umu.se/~niclas.
8%
9%All standard disclaimers apply.
10%
11%You are free to use this code as you wish. If you use it for a
12%publication or in a commercial package, please include an
13%acknowledgement and/or at least send me an email. (Looks good in my CV :-).
14%
15%Main functions:
16% hungarian - calculate a solution of the square assignment
17% problem. See HELP for a reference.
18% condass - calculate a condition number of the solution to the
19% assignment problem. See HELP for a reference.
20% allcosts - calculate the costs of all possible assignments.
21% allperms - calculate all possible permutations/assignments of a
22% given problem size.
23%
24%Test/demo functions.
25% demo - short demonstration of the main functions.
26% test - test/verification of the main functions.
diff --git a/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/allcosts.m b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/allcosts.m
new file mode 100755
index 0000000..ffdb8b9
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/allcosts.m
@@ -0,0 +1,17 @@
1function [c,p]=allcosts(C)
2%ALLCOSTS Calculate all costs for an assignment problem.
3%
4%[c,p]=allcosts(C)
5%c returns the costs, p the corresponding permutations.
6
7% v1.0 95-07-18. Niclas Borlin, niclas@cs.umu.se.
8
9p=allperm(size(C,1));
10
11c=zeros(size(p,1),1);
12
13I=eye(size(C,1));
14
15for i=1:size(p,1)
16 c(i)=sum(C(logical(sparse(p(i,:),1:size(C,1),1))));
17end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/allperm.m b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/allperm.m
new file mode 100755
index 0000000..b8d419e
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/allperm.m
@@ -0,0 +1,17 @@
1function p=allperm(n)
2%ALLPERM All permutation matrix.
3%
4%p=allperm(n)
5%Returns a matrix with all permutations of 1:n stored row-wise.
6
7% v1.0 95-07-18. Niclas Borlin, niclas@cs.umu.se.
8
9if (n<=1)
10 p=1;
11else
12 q=allperm(n-1);
13 p=[];
14 for i=1:n
15 p=[p;i*ones(size(q,1),1) q+(q>=i)];
16 end
17end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/condass.m b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/condass.m
new file mode 100755
index 0000000..82552e7
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/condass.m
@@ -0,0 +1,54 @@
1function [k,C1,T1,C2,T2]=condass(A)
2%CONDASS Calculate condition number of the assigment problem.
3%
4%[k,C1,T1,C2,T2]=condass(A)
5%A - A square cost matrix.
6%k - The condition number of the assigment problem.
7%C1 - The best assigment.
8%T1 - The lowest cost.
9%C2 - The second best assignment.
10%T2 - The second lowest cost.
11%
12%The condition number is calculated as the relative difference between
13%the best and second best solutions, as described in Nystrom, Soderkvist,
14%and Wedin, "A Note on some Identification Problems Arising in Roentgen
15%Stereo Photogrammetric Analysis", J of Biomechanics, 27(10):1291-1294,
16%1994.
17
18% v1.0 96-09-14. Niclas Borlin, niclas@cs.umu.se.
19
20% A substantial effort was put into this code. If you use it for a
21% publication or otherwise, please include an acknowledgement and notify
22% me by email. /Niclas
23
24% Create a large number used to block selected assignments.
25big=sum(sum(A))+1;
26
27% Get best assigment.
28[C1,T1]=hungarian(A);
29
30% Initialize second best solution.
31T2=inf;
32C2=zeros(size(C1));
33
34% Create a work matrix.
35B=A;
36for i=1:length(C1)
37 % Block assigment in column i.
38 B(C1(i),i)=big;
39 % Get best assigment with this one blocked.
40 [C,T]=hungarian(B);
41 if (T<T2)
42 % Remember it if it's the best so far.
43 T2=T;
44 C2=C;
45 end
46 % Remove blocking in column i.
47 B(C1(i),i)=A(C1(i),i);
48end
49
50% Calculate difference...
51mu=T2-T1;
52
53% ...and condition number.
54k=T1/mu;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/demo.m b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/demo.m
new file mode 100755
index 0000000..2d34e37
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/demo.m
@@ -0,0 +1,38 @@
1A=magic(10);
2B=A(4:7,4:7);
3disp('Cost matrix:')
4disp(B)
5disp('Calculating best assignment...');
6[c,t]=hungarian(B);
7disp('Best assignment (as row indices):')
8disp(c)
9disp('Best assignment (as logical matrix):')
10disp(logical(full(sparse(c,1:4,1))))
11disp('Lowest cost:')
12disp(t)
13
14disp(sprintf('\nCalculating condition number for solution...'));
15[k,c1,t1,c2,t2]=condass(B);
16disp('Lowest cost (should be same as above): ')
17disp(t1)
18disp('corresponding assignment (should be same as above):')
19disp(c1)
20disp('Second lowest cost: ')
21disp(t2)
22disp('corresponding assignment:')
23disp(c2)
24disp('Condition number for solution:')
25disp(k)
26
27disp(sprintf('\nCalculating all possible costs...'));
28[c,p]=allcosts(B);
29% Sort by cost.
30[y,i]=sort(c);
31disp('The three lowest costs:')
32disp(c(i(1:3)))
33disp('Corresponding assignments:')
34disp(p(i(1:3),:))
35disp('The three highest costs:')
36disp(c(i(end+[-2:0])))
37disp('Corresponding assignments:')
38disp(p(i(end+[-2:0]),:))
diff --git a/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/hungarian.m b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/hungarian.m
new file mode 100755
index 0000000..0b493f0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/hungarian.m
@@ -0,0 +1,464 @@
1function [C,T]=hungarian(A)
2%HUNGARIAN Solve the Assignment problem using the Hungarian method.
3%
4%[C,T]=hungarian(A)
5%A - a square cost matrix.
6%C - the optimal assignment.
7%T - the cost of the optimal assignment.
8
9% Adapted from the FORTRAN IV code in Carpaneto and Toth, "Algorithm 548:
10% Solution of the assignment problem [H]", ACM Transactions on
11% Mathematical Software, 6(1):104-111, 1980.
12
13% v1.0 96-06-14. Niclas Borlin, niclas@cs.umu.se.
14% Department of Computing Science, Umeå University,
15% Sweden.
16% All standard disclaimers apply.
17
18% A substantial effort was put into this code. If you use it for a
19% publication or otherwise, please include an acknowledgement or at least
20% notify me by email. /Niclas
21
22[m,n]=size(A);
23
24if (m~=n)
25 error('HUNGARIAN: Cost matrix must be square!');
26end
27
28% Save original cost matrix.
29orig=A;
30
31% Reduce matrix.
32A=hminired(A);
33
34% Do an initial assignment.
35[A,C,U]=hminiass(A);
36
37% Repeat while we have unassigned rows.
38while (U(n+1))
39 % Start with no path, no unchecked zeros, and no unexplored rows.
40 LR=zeros(1,n);
41 LC=zeros(1,n);
42 CH=zeros(1,n);
43 RH=[zeros(1,n) -1];
44
45 % No labelled columns.
46 SLC=[];
47
48 % Start path in first unassigned row.
49 r=U(n+1);
50 % Mark row with end-of-path label.
51 LR(r)=-1;
52 % Insert row first in labelled row set.
53 SLR=r;
54
55 % Repeat until we manage to find an assignable zero.
56 while (1)
57 % If there are free zeros in row r
58 if (A(r,n+1)~=0)
59 % ...get column of first free zero.
60 l=-A(r,n+1);
61
62 % If there are more free zeros in row r and row r in not
63 % yet marked as unexplored..
64 if (A(r,l)~=0 & RH(r)==0)
65 % Insert row r first in unexplored list.
66 RH(r)=RH(n+1);
67 RH(n+1)=r;
68
69 % Mark in which column the next unexplored zero in this row
70 % is.
71 CH(r)=-A(r,l);
72 end
73 else
74 % If all rows are explored..
75 if (RH(n+1)<=0)
76 % Reduce matrix.
77 [A,CH,RH]=hmreduce(A,CH,RH,LC,LR,SLC,SLR);
78 end
79
80 % Re-start with first unexplored row.
81 r=RH(n+1);
82 % Get column of next free zero in row r.
83 l=CH(r);
84 % Advance "column of next free zero".
85 CH(r)=-A(r,l);
86 % If this zero is last in the list..
87 if (A(r,l)==0)
88 % ...remove row r from unexplored list.
89 RH(n+1)=RH(r);
90 RH(r)=0;
91 end
92 end
93
94 % While the column l is labelled, i.e. in path.
95 while (LC(l)~=0)
96 % If row r is explored..
97 if (RH(r)==0)
98 % If all rows are explored..
99 if (RH(n+1)<=0)
100 % Reduce cost matrix.
101 [A,CH,RH]=hmreduce(A,CH,RH,LC,LR,SLC,SLR);
102 end
103
104 % Re-start with first unexplored row.
105 r=RH(n+1);
106 end
107
108 % Get column of next free zero in row r.
109 l=CH(r);
110
111 % Advance "column of next free zero".
112 CH(r)=-A(r,l);
113
114 % If this zero is last in list..
115 if(A(r,l)==0)
116 % ...remove row r from unexplored list.
117 RH(n+1)=RH(r);
118 RH(r)=0;
119 end
120 end
121
122 % If the column found is unassigned..
123 if (C(l)==0)
124 % Flip all zeros along the path in LR,LC.
125 [A,C,U]=hmflip(A,C,LC,LR,U,l,r);
126 % ...and exit to continue with next unassigned row.
127 break;
128 else
129 % ...else add zero to path.
130
131 % Label column l with row r.
132 LC(l)=r;
133
134 % Add l to the set of labelled columns.
135 SLC=[SLC l];
136
137 % Continue with the row assigned to column l.
138 r=C(l);
139
140 % Label row r with column l.
141 LR(r)=l;
142
143 % Add r to the set of labelled rows.
144 SLR=[SLR r];
145 end
146 end
147end
148
149% Calculate the total cost.
150T=sum(orig(logical(sparse(C,1:size(orig,2),1))));
151
152
153function A=hminired(A)
154%HMINIRED Initial reduction of cost matrix for the Hungarian method.
155%
156%B=assredin(A)
157%A - the unreduced cost matris.
158%B - the reduced cost matrix with linked zeros in each row.
159
160% v1.0 96-06-13. Niclas Borlin, niclas@cs.umu.se.
161
162[m,n]=size(A);
163
164% Subtract column-minimum values from each column.
165colMin=min(A);
166A=A-colMin(ones(n,1),:);
167
168% Subtract row-minimum values from each row.
169rowMin=min(A')';
170A=A-rowMin(:,ones(1,n));
171
172% Get positions of all zeros.
173[i,j]=find(A==0);
174
175% Extend A to give room for row zero list header column.
176A(1,n+1)=0;
177for k=1:n
178 % Get all column in this row.
179 cols=j(k==i)';
180 % Insert pointers in matrix.
181 A(k,[n+1 cols])=[-cols 0];
182end
183
184
185function [A,C,U]=hminiass(A)
186%HMINIASS Initial assignment of the Hungarian method.
187%
188%[B,C,U]=hminiass(A)
189%A - the reduced cost matrix.
190%B - the reduced cost matrix, with assigned zeros removed from lists.
191%C - a vector. C(J)=I means row I is assigned to column J,
192% i.e. there is an assigned zero in position I,J.
193%U - a vector with a linked list of unassigned rows.
194
195% v1.0 96-06-14. Niclas Borlin, niclas@cs.umu.se.
196
197[n,np1]=size(A);
198
199% Initalize return vectors.
200C=zeros(1,n);
201U=zeros(1,n+1);
202
203% Initialize last/next zero "pointers".
204LZ=zeros(1,n);
205NZ=zeros(1,n);
206
207for i=1:n
208 % Set j to first unassigned zero in row i.
209 lj=n+1;
210 j=-A(i,lj);
211
212 % Repeat until we have no more zeros (j==0) or we find a zero
213 % in an unassigned column (c(j)==0).
214
215 while (C(j)~=0)
216 % Advance lj and j in zero list.
217 lj=j;
218 j=-A(i,lj);
219
220 % Stop if we hit end of list.
221 if (j==0)
222 break;
223 end
224 end
225
226 if (j~=0)
227 % We found a zero in an unassigned column.
228
229 % Assign row i to column j.
230 C(j)=i;
231
232 % Remove A(i,j) from unassigned zero list.
233 A(i,lj)=A(i,j);
234
235 % Update next/last unassigned zero pointers.
236 NZ(i)=-A(i,j);
237 LZ(i)=lj;
238
239 % Indicate A(i,j) is an assigned zero.
240 A(i,j)=0;
241 else
242 % We found no zero in an unassigned column.
243
244 % Check all zeros in this row.
245
246 lj=n+1;
247 j=-A(i,lj);
248
249 % Check all zeros in this row for a suitable zero in another row.
250 while (j~=0)
251 % Check the in the row assigned to this column.
252 r=C(j);
253
254 % Pick up last/next pointers.
255 lm=LZ(r);
256 m=NZ(r);
257
258 % Check all unchecked zeros in free list of this row.
259 while (m~=0)
260 % Stop if we find an unassigned column.
261 if (C(m)==0)
262 break;
263 end
264
265 % Advance one step in list.
266 lm=m;
267 m=-A(r,lm);
268 end
269
270 if (m==0)
271 % We failed on row r. Continue with next zero on row i.
272 lj=j;
273 j=-A(i,lj);
274 else
275 % We found a zero in an unassigned column.
276
277 % Replace zero at (r,m) in unassigned list with zero at (r,j)
278 A(r,lm)=-j;
279 A(r,j)=A(r,m);
280
281 % Update last/next pointers in row r.
282 NZ(r)=-A(r,m);
283 LZ(r)=j;
284
285 % Mark A(r,m) as an assigned zero in the matrix . . .
286 A(r,m)=0;
287
288 % ...and in the assignment vector.
289 C(m)=r;
290
291 % Remove A(i,j) from unassigned list.
292 A(i,lj)=A(i,j);
293
294 % Update last/next pointers in row r.
295 NZ(i)=-A(i,j);
296 LZ(i)=lj;
297
298 % Mark A(r,m) as an assigned zero in the matrix . . .
299 A(i,j)=0;
300
301 % ...and in the assignment vector.
302 C(j)=i;
303
304 % Stop search.
305 break;
306 end
307 end
308 end
309end
310
311% Create vector with list of unassigned rows.
312
313% Mark all rows have assignment.
314r=zeros(1,n);
315rows=C(C~=0);
316r(rows)=rows;
317empty=find(r==0);
318
319% Create vector with linked list of unassigned rows.
320U=zeros(1,n+1);
321U([n+1 empty])=[empty 0];
322
323
324function [A,C,U]=hmflip(A,C,LC,LR,U,l,r)
325%HMFLIP Flip assignment state of all zeros along a path.
326%
327%[A,C,U]=hmflip(A,C,LC,LR,U,l,r)
328%Input:
329%A - the cost matrix.
330%C - the assignment vector.
331%LC - the column label vector.
332%LR - the row label vector.
333%U - the
334%r,l - position of last zero in path.
335%Output:
336%A - updated cost matrix.
337%C - updated assignment vector.
338%U - updated unassigned row list vector.
339
340% v1.0 96-06-14. Niclas Borlin, niclas@cs.umu.se.
341
342n=size(A,1);
343
344while (1)
345 % Move assignment in column l to row r.
346 C(l)=r;
347
348 % Find zero to be removed from zero list..
349
350 % Find zero before this.
351 m=find(A(r,:)==-l);
352
353 % Link past this zero.
354 A(r,m)=A(r,l);
355
356 A(r,l)=0;
357
358 % If this was the first zero of the path..
359 if (LR(r)<0)
360 ...remove row from unassigned row list and return.
361 U(n+1)=U(r);
362 U(r)=0;
363 return;
364 else
365
366 % Move back in this row along the path and get column of next zero.
367 l=LR(r);
368
369 % Insert zero at (r,l) first in zero list.
370 A(r,l)=A(r,n+1);
371 A(r,n+1)=-l;
372
373 % Continue back along the column to get row of next zero in path.
374 r=LC(l);
375 end
376end
377
378
379function [A,CH,RH]=hmreduce(A,CH,RH,LC,LR,SLC,SLR)
380%HMREDUCE Reduce parts of cost matrix in the Hungerian method.
381%
382%[A,CH,RH]=hmreduce(A,CH,RH,LC,LR,SLC,SLR)
383%Input:
384%A - Cost matrix.
385%CH - vector of column of 'next zeros' in each row.
386%RH - vector with list of unexplored rows.
387%LC - column labels.
388%RC - row labels.
389%SLC - set of column labels.
390%SLR - set of row labels.
391%
392%Output:
393%A - Reduced cost matrix.
394%CH - Updated vector of 'next zeros' in each row.
395%RH - Updated vector of unexplored rows.
396
397% v1.0 96-06-14. Niclas Borlin, niclas@cs.umu.se.
398
399n=size(A,1);
400
401% Find which rows are covered, i.e. unlabelled.
402coveredRows=LR==0;
403
404% Find which columns are covered, i.e. labelled.
405coveredCols=LC~=0;
406
407r=find(~coveredRows);
408c=find(~coveredCols);
409
410% Get minimum of uncovered elements.
411m=min(min(A(r,c)));
412
413% Subtract minimum from all uncovered elements.
414A(r,c)=A(r,c)-m;
415
416% Check all uncovered columns..
417for j=c
418 % ...and uncovered rows in path order..
419 for i=SLR
420 % If this is a (new) zero..
421 if (A(i,j)==0)
422 % If the row is not in unexplored list..
423 if (RH(i)==0)
424 % ...insert it first in unexplored list.
425 RH(i)=RH(n+1);
426 RH(n+1)=i;
427 % Mark this zero as "next free" in this row.
428 CH(i)=j;
429 end
430 % Find last unassigned zero on row I.
431 row=A(i,:);
432 colsInList=-row(row<0);
433 if (length(colsInList)==0)
434 % No zeros in the list.
435 l=n+1;
436 else
437 l=colsInList(row(colsInList)==0);
438 end
439 % Append this zero to end of list.
440 A(i,l)=-j;
441 end
442 end
443end
444
445% Add minimum to all doubly covered elements.
446r=find(coveredRows);
447c=find(coveredCols);
448
449% Take care of the zeros we will remove.
450[i,j]=find(A(r,c)<=0);
451
452i=r(i);
453j=c(j);
454
455for k=1:length(i)
456 % Find zero before this in this row.
457 lj=find(A(i(k),:)==-j(k));
458 % Link past it.
459 A(i(k),lj)=A(i(k),j(k));
460 % Mark it as assigned.
461 A(i(k),j(k))=0;
462end
463
464A(r,c)=A(r,c)+m;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/test.m b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/test.m
new file mode 100755
index 0000000..4c238f2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/matching/pub/contrib/v5/optim/assignprob/test.m
@@ -0,0 +1,87 @@
1disp('Testing hungarian...');
2A=magic(10);
3B=A(4:7,4:7);
4[c,t]=hungarian(B);
5if (any(c~=[2 1 3 4]))
6 disp('Wrong coupling!');
7elseif (t~=77)
8 disp('Wrong solution!');
9else
10 disp('Hungarian appears OK.');
11end
12
13disp('Testing condass...');
14[k,c1,t1,c2,t2]=condass(B);
15if (any(c1~=[2 1 3 4]))
16 disp('Wrong best coupling!');
17elseif (t1~=77)
18 disp('Wrong lowest cost!');
19elseif (any(c2~=[1 2 3 4]))
20 disp('Wrong second best coupling!');
21elseif (t2~=102)
22 disp('Wrong second lowest cost!');
23elseif (k~=t1/(t2-t1))
24 disp('Wrong condition number!');
25else
26 disp('condass appears OK.');
27end
28
29disp('Testing allcosts...');
30[c,p]=allcosts(B);
31cTrue=[ 102
32 127
33 202
34 227
35 222
36 222
37 77
38 102
39 182
40 202
41 202
42 197
43 177
44 202
45 182
46 202
47 302
48 297
49 202
50 202
51 207
52 202
53 307
54 302
55];
56pTrue=[ 1 2 3 4
57 1 2 4 3
58 1 3 2 4
59 1 3 4 2
60 1 4 2 3
61 1 4 3 2
62 2 1 3 4
63 2 1 4 3
64 2 3 1 4
65 2 3 4 1
66 2 4 1 3
67 2 4 3 1
68 3 1 2 4
69 3 1 4 2
70 3 2 1 4
71 3 2 4 1
72 3 4 1 2
73 3 4 2 1
74 4 1 2 3
75 4 1 3 2
76 4 2 1 3
77 4 2 3 1
78 4 3 1 2
79 4 3 2 1
80 ];
81if (any(c~=cTrue))
82 disp('Wrong costs!');
83elseif (any(p~=pTrue))
84 disp('Wrong permutations!');
85else
86 disp('allcosts appears OK.');
87end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/pyramid/091399fbn-jets.3.jpg b/SD-VBS/common/toolbox/toolbox_basic/pyramid/091399fbn-jets.3.jpg
new file mode 100755
index 0000000..b91732f
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/pyramid/091399fbn-jets.3.jpg
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/pyramid/expand.m b/SD-VBS/common/toolbox/toolbox_basic/pyramid/expand.m
new file mode 100755
index 0000000..64e9fda
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/pyramid/expand.m
@@ -0,0 +1,8 @@
1function J = expand(I)
2%
3%
4
5[sy,sx] = size(I);
6[x,y] = meshgrid(1:2*sx+1,1:2*sy+1);
7
8nx = \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/pyramid/gauss_lowpass.m b/SD-VBS/common/toolbox/toolbox_basic/pyramid/gauss_lowpass.m
new file mode 100755
index 0000000..87ad4f1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/pyramid/gauss_lowpass.m
@@ -0,0 +1,9 @@
1function J = gauss_lowpass(I,a)
2
3if (nargin < 2),
4 a = 0.4;
5end
6
7w = gen_w(a);
8
9J = conv2(conv2(I,w,'same'),w','same');
diff --git a/SD-VBS/common/toolbox/toolbox_basic/pyramid/gen_w.m b/SD-VBS/common/toolbox/toolbox_basic/pyramid/gen_w.m
new file mode 100755
index 0000000..b255751
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/pyramid/gen_w.m
@@ -0,0 +1,12 @@
1function w = gen_w(a)
2%
3
4if (nargin == 0),
5 a = 0.4;
6end
7
8w(3) = a;
9w(1) = 1/4 - a/2;
10w(5) = 1/4 - a/2;
11w(2) = 1/4;
12w(4) = 1/4;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/pyramid/reduce.m b/SD-VBS/common/toolbox/toolbox_basic/pyramid/reduce.m
new file mode 100755
index 0000000..6837e8a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/pyramid/reduce.m
@@ -0,0 +1,7 @@
1function J = reduce(I)
2
3[nr,nc,nb] = size(I);
4for j=1:nb,
5 tmp = gauss_lowpass(I(:,:,j));
6 J(:,:,j) = tmp(1:2:nr,1:2:nc);
7end \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/pyramid/session.m b/SD-VBS/common/toolbox/toolbox_basic/pyramid/session.m
new file mode 100755
index 0000000..9d0aa6c
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/pyramid/session.m
@@ -0,0 +1,26 @@
1%image_dir = '/home/barad-dur/d/malik/jshi/';
2%I = gifread([image_dir,'tape9/t9a1_L.40.gif']);
3I = pgmread('car100x100_0001');
4Io = I;
5
6B = [];
7
8done = 0;
9st = 2;
10sz = size(I);
11while (~done),
12 w = max(1,round(0.05*size(I,1)));
13 b = zeros(round(0.5*size(Io)),round(0.5*size(I)));
14 %J = smooth(I,w);
15 %I = J(1:st:size(J,1),1:st:size(J,2));
16 I = reduce(I);
17 sz = [sz;size(I)];
18 b(1:size(I,1),1:size(I,2)) = I;
19 disp(int2str(size(I,1)));
20
21 B = [B,b];
22
23 if (size(I,1) < 8),
24 done = 1;
25 end
26end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/pyramid/startup.m b/SD-VBS/common/toolbox/toolbox_basic/pyramid/startup.m
new file mode 100755
index 0000000..f86f9f4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/pyramid/startup.m
@@ -0,0 +1,5 @@
1home_dir = '/home/nef0/malik/jshi/jshi/matlab/';
2path([home_dir,'toolbox/io'], path)
3path([home_dir,'toolbox/filter'],path)
4path(path,[home_dir,'vision/vision94/tracking/'])
5clear home_dir \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/remap_angle.m b/SD-VBS/common/toolbox/toolbox_basic/remap_angle.m
new file mode 100755
index 0000000..09f8cff
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/remap_angle.m
@@ -0,0 +1,4 @@
1function a = remap_angle(theta,min,max)
2
3a = (theta<=min).*(theta+pi) + (theta>=max).*(theta-pi) +...
4 ((theta>min)&(theta<max)).*theta; \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/spmtimesd.c b/SD-VBS/common/toolbox/toolbox_basic/spmtimesd.c
new file mode 100755
index 0000000..a98dc0a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/spmtimesd.c
@@ -0,0 +1,141 @@
1/*================================================================
2* spmtimesd.c
3* This routine computes a sparse matrix times a diagonal matrix
4* whose diagonal entries are stored in a full vector.
5*
6* Examples:
7* spmtimesd(m,d,[]) = diag(d) * m,
8* spmtimesd(m,[],d) = m * diag(d)
9* spmtimesd(m,d1,d2) = diag(d1) * m * diag(d2)
10* m could be complex, but d is assumed real
11*
12* Stella X. Yu's first MEX function, Nov 9, 2001.
13
14% test sequence:
15
16m = 1000;
17n = 2000;
18a=sparse(rand(m,n));
19d1 = rand(m,1);
20d2 = rand(n,1);
21tic; b=spmtimesd(a,d1,d2); toc
22tic; bb = spdiags(d1,0,m,m) * a * spdiags(d2,0,n,n); toc
23e = (bb-b);
24max(abs(e(:)))
25
26*=================================================================*/
27
28# include "mex.h"
29
30void mexFunction(
31 int nargout,
32 mxArray *out[],
33 int nargin,
34 const mxArray *in[]
35)
36{
37 /* declare variables */
38 int i, j, k, m, n, nzmax, cmplx, xm, yn;
39 int *pir, *pjc, *qir, *qjc;
40 double *x, *y, *pr, *pi, *qr, *qi;
41
42 /* check argument */
43 if (nargin != 3) {
44 mexErrMsgTxt("Three input arguments required");
45 }
46 if (nargout>1) {
47 mexErrMsgTxt("Too many output arguments.");
48 }
49 if (!(mxIsSparse(in[0]))) {
50 mexErrMsgTxt("Input argument #1 must be of type sparse");
51 }
52 if ( mxIsSparse(in[1]) || mxIsSparse(in[2]) ) {
53 mexErrMsgTxt("Input argument #2 & #3 must be of type full");
54 }
55
56 /* computation starts */
57 m = mxGetM(in[0]);
58 n = mxGetN(in[0]);
59 pr = mxGetPr(in[0]);
60 pi = mxGetPi(in[0]);
61 pir = mxGetIr(in[0]);
62 pjc = mxGetJc(in[0]);
63
64 i = mxGetM(in[1]);
65 j = mxGetN(in[1]);
66 xm = ((i>j)? i: j);
67
68 i = mxGetM(in[2]);
69 j = mxGetN(in[2]);
70 yn = ((i>j)? i: j);
71
72 if ( xm>0 && xm != m) {
73 mexErrMsgTxt("Row multiplication dimension mismatch.");
74 }
75 if ( yn>0 && yn != n) {
76 mexErrMsgTxt("Column multiplication dimension mismatch.");
77 }
78
79
80 nzmax = mxGetNzmax(in[0]);
81 cmplx = (pi==NULL ? 0 : 1);
82 out[0] = mxCreateSparse(m,n,nzmax,cmplx);
83 if (out[0]==NULL) {
84 mexErrMsgTxt("Not enough space for the output matrix.");
85 }
86
87 qr = mxGetPr(out[0]);
88 qi = mxGetPi(out[0]);
89 qir = mxGetIr(out[0]);
90 qjc = mxGetJc(out[0]);
91
92 /* left multiplication */
93 x = mxGetPr(in[1]);
94 if (yn==0) {
95 for (j=0; j<n; j++) {
96 qjc[j] = pjc[j];
97 for (k=pjc[j]; k<pjc[j+1]; k++) {
98 i = pir[k];
99 qir[k] = i;
100 qr[k] = x[i] * pr[k];
101 if (cmplx) {
102 qi[k] = x[i] * pi[k];
103 }
104 }
105 }
106 qjc[n] = k;
107 return;
108 }
109
110 /* right multiplication */
111 y = mxGetPr(in[2]);
112 if (xm==0) {
113 for (j=0; j<n; j++) {
114 qjc[j] = pjc[j];
115 for (k=pjc[j]; k<pjc[j+1]; k++) {
116 qir[k] = pir[k];
117 qr[k] = pr[k] * y[j];
118 if (cmplx) {
119 qi[k] = qi[k] * y[j];
120 }
121 }
122 }
123 qjc[n] = k;
124 return;
125 }
126
127 /* both sides */
128 for (j=0; j<n; j++) {
129 qjc[j] = pjc[j];
130 for (k=pjc[j]; k<pjc[j+1]; k++) {
131 i = pir[k];
132 qir[k]= i;
133 qr[k] = x[i] * pr[k] * y[j];
134 if (cmplx) {
135 qi[k] = x[i] * qi[k] * y[j];
136 }
137 }
138 qjc[n] = k;
139 }
140
141}
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/afromncut.m b/SD-VBS/common/toolbox/toolbox_basic/stella/afromncut.m
new file mode 100755
index 0000000..ec014d0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/afromncut.m
@@ -0,0 +1,73 @@
1% function a = afromncut(v,s,d,visimg,no_rep,pixel_loc)
2% Input:
3% v = eigenvectors of d*a*d, starting from the second.
4% (the first is all one over some constant determined by d)
5% s = eigenvalues
6% d = normalization matrix 1/sqrt(rowsum(abs(a)))
7% visimg = 1/0 if each eigenvector is/not 2D (so v is 3D)
8% no_rep = 1 (default), affinity has attraction only
9% if 1, the first column of v is the second eigenvector
10% if 0, the first column of v is the first eigenvector.
11% pixel_loc = nx1 matrix, each is a pixel location
12% Output:
13% a = diag(1/d) * na * diag(1/d);
14% If pixel_loc = []; a is returned, if not out of memory
15% otherwise, only rows of a at pixel_loc are returned.
16%
17% This routine is used to estimate the original affinity matrix
18% through the first few eigenvectors and its normalization matrix.
19
20% A test sequence includes:
21% a = randsym(5);
22% [na,d] = normalize(a);
23% [v,s] = ncut(a,5);
24% v = v(:,2:end); s = s(2:end);
25% aa = afromncut(v,s,d);
26% max(abs(aa(:) - a(:)))
27
28% Stella X. Yu, 2000.
29
30function a = afromncut(v,s,d,visimg,no_rep,pixel_loc)
31
32[nr,nc,nv] = size(v);
33if nargin<4 | isempty(visimg),
34 visimg = (nv>1);
35end
36
37if nargin<5 | isempty(no_rep),
38 no_rep = 1;
39end
40
41if visimg,
42 nr = nr * nc;
43else
44 nv = nc;
45end
46
47if nargin<6 | isempty(pixel_loc),
48 pixel_loc = 1:nr;
49end
50
51% D^(1/2)
52d = 1./(d(:)+eps);
53
54% first recover the first eigenvector
55if no_rep,
56 u = (1/norm(d)) + zeros(nr,1);
57 s = [1;s(:)];
58 nv = nv + 1;
59else
60 u = [];
61end
62
63% the full set of generalized eigenvectors
64v = [u, reshape(v,[nr,nv-no_rep])];
65
66% This is the real D, row sum
67d = d.^2;
68
69% an equivalent way to compute v = diag(d) * v;
70v = v .* d(:,ones(nv,1)); % to avoid using a big matrix diag(d)
71
72% synthesis
73a = v(pixel_loc,:)*diag(s)*v';
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/dispimg.m b/SD-VBS/common/toolbox/toolbox_basic/stella/dispimg.m
new file mode 100755
index 0000000..4e419a0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/dispimg.m
@@ -0,0 +1,65 @@
1% function dispimg(g,fmt,lgd,cmap) display multiple images in one figure.
2% Input:
3% g = a cell and fmt is a 1x2 vector specifying the layout.
4% lgd = a string cell for the title of each image.
5% cmap = the colormap (default is the gray, -1 for the inverted gray).
6% ishori = a vector of 1/0 to display real and imag parts horizontally / vertically
7
8% Stella X. Yu, 2000.
9
10function dispimg(g,fmt,lgd,cmap,ishori);
11
12cellg = iscell(g);
13if cellg,
14 num_fig = length(g);
15else
16 num_fig = size(g,3);
17end;
18
19if nargin<2 | isempty(fmt),
20 m = ceil(sqrt(num_fig));
21 n = ceil(num_fig / m);
22else
23 m = fmt(1);
24 n = fmt(2);
25end
26
27if nargin<3 | isempty(lgd),
28 lgd = 1:num_fig;
29end
30if isnumeric(lgd),
31 lgd = cellstr(num2str(lgd(:),3));
32end
33i = size(lgd);
34if i(1)==1,
35 lgd = [lgd, cell(1,num_fig-i(2))];
36else
37 lgd = [lgd; cell(num_fig-i(1),1)];
38end
39
40if nargin<5 | isempty(ishori),
41 ishori = ones(num_fig,1);
42end
43ishori(end+1:num_fig) = ishori(end);
44
45for k=1:num_fig,
46 subplot(m,n,k);
47 if cellg,
48 showim(g{k},[],ishori(k));
49 else
50 showim(g(:,:,k),[],ishori(k));
51 end
52 title(lgd{k});
53end
54
55if nargin<4 | isempty(cmap),
56 cmap = gray;
57end
58if length(cmap)==1,
59 if cmap==1,
60 cmap = gray;
61 else
62 cmap = flipud(gray);
63 end
64end
65colormap(cmap);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/firstncut.m b/SD-VBS/common/toolbox/toolbox_basic/stella/firstncut.m
new file mode 100755
index 0000000..a22077d
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/firstncut.m
@@ -0,0 +1,67 @@
1% function [v,s,d] = firstncut(base_name,rec_num)
2% Input:
3% base_name = image name
4% rec_num = parameter record number
5% Output:
6% v = eigenvectors
7% s = eigenvalues
8% d = normalization matrix d = 1/sqrt(rowsum(abs(a)))
9% Convert Jianbo Shi's Ncut Ccode results from images to matlab matrices.
10
11% Stella X. Yu, 2000.
12
13function [v,s,d] = firstncut(base_name,rec_num);
14
15if nargin<2 | isempty(rec_num),
16 rec_num = 1;
17end
18
19cur_dir = pwd;
20globalenvar;
21cd(IMAGE_DIR);
22cd(base_name);
23 feval([base_name,'_par']);
24 j = length(p);
25 if rec_num>j,
26 disp(sprintf('parameter record number %d out of range %d, check %s!',rec_num,j,[base_name,'_par.m']));
27 Qlabel = [];
28 v = [];
29 s = [];
30 ev_info = [];
31 return;
32 end
33 nv = p(rec_num).num_eigvecs;
34 no_rep = (p(rec_num).offset<1e-6);
35
36 % read the image
37 cm=sprintf('I = readppm(''%s.ppm'');',base_name);
38 eval(cm);
39
40 % read eigenvectors
41 base_name_hist = sprintf('%s_%d_IC',base_name,rec_num);
42 if no_rep,
43 [v,ev_info] = read_ev_pgm(base_name_hist,1,1,nv);
44 else
45 [v,ev_info] = read_ev_pgm2(base_name_hist,1,1,nv);
46 end
47 s = ev_info(4,:)';
48
49 % read the normalization matrix
50 d = readpfmc(sprintf('%s_%d_D_IC.pfm',base_name,rec_num));
51cd(cur_dir);
52
53% D^(1/2)
54dd = (1./(d(:)+eps));
55
56% recover real eigenvectors
57for j = 1:nv-no_rep,
58 vmin = ev_info(1,j);
59 vmax = ev_info(2,j);
60 y = v(:,:,j).*((vmax - vmin)/256) + vmin;
61 %validity check: x = D^(1/2)y should be normalized
62 x = norm(y(:).*dd);
63 v(:,:,j) = y./x;
64end
65
66dispimg(cat(3,mean(I,3),v),[],[{'image'};cellstr(num2str(s,3))]);
67
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/getfnames.m b/SD-VBS/common/toolbox/toolbox_basic/stella/getfnames.m
new file mode 100755
index 0000000..4990451
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/getfnames.m
@@ -0,0 +1,47 @@
1% function [fn,dn] = getfnames(direc,opt)
2% Input:
3% direc = directory
4% opt = wildcat
5% Output:
6% fn = a cell with all filenames under direc and with opt
7% dn = a cell with all directory names under direc and with opt
8% For example, getfnames('19990910','*.jpg');
9% Set IS_PC according to your platform in globalenvar.m
10
11% Stella X. Yu, 2000.
12
13function [fn,dn] = getfnames(direc,opt)
14
15if (nargin<1 | isempty(direc)),
16 direc = '.';
17end
18
19if nargin<2 | isempty(opt),
20 opt = [];
21end
22
23fn = {};
24dn = {};
25
26cur_dir = pwd;
27cd(direc);
28s = dir(opt);
29if isempty(s),
30 disp('getfnames: no data');
31 return;
32end
33
34n = length(s);
35i = 1;
36j = 1;
37for k=1:n,
38 if s(k).isdir,
39 dn{j,1} = s(k).name;
40 j = j + 1;
41 else
42 fn{i,1} = s(k).name;
43 i = i + 1;
44 end
45end
46 cd(cur_dir)
47%[fn{1:n,1}]=deal(s.name);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/getimage2.m b/SD-VBS/common/toolbox/toolbox_basic/stella/getimage2.m
new file mode 100755
index 0000000..945ddd2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/getimage2.m
@@ -0,0 +1,46 @@
1% function f = getimage2(imagefile) returns a normalized intensity image.
2% If the file postfix is not given, then I will search any possible image file
3% under the IMAGE_DIR.
4
5% Stella X. Yu, March 1999
6
7function f = getimage2(imagefile)
8
9if exist(imagefile)==2,
10 g = {imagefile};
11else
12 g = {};
13end
14globalenvar;
15g = [g; getfnames(IMAGE_DIR,[imagefile,'.*'])];
16
17j = 1;
18for i=1:length(g),
19 k = findstr(g{i},'.');
20 gp = g{i}(k(end)+1:end);
21 if strcmp(gp,'ppm'),
22 f = double(readppm(g{i}));
23 j = 0;
24 elseif sum(strcmp(gp,{'jpg','tif','jpeg','tiff','bmp','png','hdf','pcx','xwd'}))>0,
25 f = double(imread(g{i}));
26 j = 0;
27 end
28 if j==0,
29 disp(sprintf('This is an image read from %s under %s',g{i},IMAGE_DIR));
30 break;
31 end
32end
33if j,
34 f = [];
35 disp('Image not found');
36 return;
37end
38
39if size(f,3)>1,
40 %f = sum(f,3)./3;
41 f = rgb2ntsc(f);
42 f = f(:,:,1);
43end
44minf = min(f(:));
45maxf = max(f(:));
46f = (f - minf) ./ (maxf - minf);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/globalenvar.m b/SD-VBS/common/toolbox/toolbox_basic/stella/globalenvar.m
new file mode 100755
index 0000000..1e61b61
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/globalenvar.m
@@ -0,0 +1,6 @@
1% globalenvar
2
3HOME_DIR = '/hid/jshi/Research/walking/stella';
4IMAGE_DIR = '/hid/jshi/test_images';
5C_DIR = '/hid/jshi/Research/Ncut_code_C';
6IS_PC = 0;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/jshincut.m b/SD-VBS/common/toolbox/toolbox_basic/stella/jshincut.m
new file mode 100755
index 0000000..d0f11cb
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/jshincut.m
@@ -0,0 +1,94 @@
1% function [par, rec_num] = jshincut(par,image_dir)
2% Input:
3% par = a structure with parameters for command_ncut.tex
4% image_dir = the directory where the imagefile is stored
5% Output:
6% par = parameters used
7% rec_num = record number in the NCut database
8% Jianbo Shi's ncut_IC is applied to the image
9% (If there is no .ppm format for the named image,
10% conversion from related files would be attempted.)
11% Results are organized according to the parameters.
12% Example: jshincut('240018s');
13% See also: jshincutdefpar; ncutcheckin
14% Set IS_PC according to your platform in globalenvar.m
15
16% Stella X. Yu, 2000.
17
18function [par,rec_num] = jshincut(par,image_dir)
19
20rec = jshincutdefpar;
21
22fields = fieldnames(rec);
23nf = length(fields);
24
25if ischar(par),
26 imagename = par;
27 par = rec;
28 par.fname_base = imagename;
29end
30
31globalenvar;
32
33if nargin<2 | isempty(image_dir),
34 image_dir = IMAGE_DIR;
35end
36
37imagename = getfield(par,fields{1});
38for i=2:nf,
39 t = getfield(par,fields{i});
40 if isempty(t),
41 par = setfield(par,fields{i},getfield(rec,fields{i}));
42 end
43end
44
45% dir and filename
46catchar = {'/','\'};
47catchar = catchar{IS_PC+1};
48
49% first check if there is a ppm file for this image
50if not(exist([image_dir,catchar,imagename,'.ppm'])),
51 j = getfnames(image_dir,[imagename,'.*']);
52 if isempty(j),
53 disp('Image not found.');
54 return;
55 end
56 k = 0;
57 for i=1:length(j),
58 k = k + not(isempty(im2ppm(j{i},image_dir)));
59 if k==1,
60 disp(sprintf('%s -> %s.ppm succeeded.',j{i},imagename));
61 break;
62 end
63 end
64 if k==0,
65 disp('Sorry. Attempt to convert your named image into ppm format failed.');
66 return;
67 end
68end
69
70cd(C_DIR);
71
72% generate command_ncut.tex file
73fn = 'command_ncut.tex';
74fid = fopen(fn,'w');
75fprintf(fid,'%21s\t%s%c%s\n',fields{1},image_dir,catchar,imagename);
76for i=2:nf,
77 t = getfield(par,fields{i});
78 if isnumeric(t),
79 t = num2str(t);
80 end
81 fprintf(fid,['%21s\t%s\n'],fields{i},t);
82end
83fclose(fid);
84%disp('You can check and modify command_ncut.tex before I run ncut_IC on it. Good?');pause(1);
85
86% run ncut_IC
87unix(['.',catchar,'ncut_IC']);
88cd(HOME_DIR);
89
90% check in
91copyfile([C_DIR,catchar,fn],[image_dir,catchar,fn]);
92rec_num = ncutcheckin(fn,image_dir,image_dir);
93%delete([image_dir,catchar,imagename,'.ppm']);
94%delete([image_dir,catchar,fn]);
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/jshincutdefpar.m b/SD-VBS/common/toolbox/toolbox_basic/stella/jshincutdefpar.m
new file mode 100755
index 0000000..4f07192
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/jshincutdefpar.m
@@ -0,0 +1,20 @@
1% function rec = jshincutdefpar;
2% default parameter setting for Jianbo Shi's NCut C codes
3
4% Stella X. Yu, 2000.
5
6function rec = jshincutdefpar;
7
8rec.fname_base = '240018s';
9rec.fname_ext = 'ppm';
10rec.num_eigvecs = 15;
11rec.spatial_neighborhood_x=20;
12rec.sigma_x= 10;
13rec.sig_I= -0.16;
14rec.sig_IC= 0.01;
15rec.hr= 2;
16rec.eig_blk_sze= 3;
17rec.power_D= 1;
18rec.offset = 0.0;
19rec.sig_filter = 1.0;
20rec.elong_filter = 3.0;
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/ncutcheckin.m b/SD-VBS/common/toolbox/toolbox_basic/stella/ncutcheckin.m
new file mode 100755
index 0000000..cd82ee5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/ncutcheckin.m
@@ -0,0 +1,136 @@
1% function rec_num = ncutcheckin(fn,sdir,tdir)
2% Input:
3% fn = parameter file name, default = 'command_ncut.tex'
4% sdir = source dir for fn as well as data files
5% tdir = target dir to check in, both default = IMAGE_DIR
6% Output:
7% rec_num = the number of current parameter records
8% The imagefile_par.m is updated if fn contains a new
9% parameter set. Data files are tagged and copied over to
10% a subdir under tdir.
11% Example: ncutcheckin;
12% Set IS_PC, IMAGE_DIR according to your platform in globalenvar.m
13
14% Stella X. Yu, 2000.
15
16function rec_num = ncutcheckin(fn,sdir,tdir)
17
18globalenvar;
19
20cur_dir = pwd;
21
22if nargin<1 | isempty(fn),
23 fn = 'command_ncut.tex';
24end
25
26if nargin<2 | isempty(sdir),
27 sdir = IMAGE_DIR;
28end
29
30if nargin<3 | isempty(tdir),
31 tdir = IMAGE_DIR;
32end
33
34rec = jshincutdefpar;
35
36% first, generate a parameter record from fn
37cd(sdir);
38[names,values] = textread(fn,'%s %s','commentstyle','shell');
39n = length(names);
40s = rec;
41for i=1:n,
42 j = str2num(values{i});
43 if isempty(j),
44 s = setfield(s,names{i},values{i});
45 else
46 s = setfield(s,names{i},j);
47 end
48end
49cd(cur_dir);
50
51% special care to extract the image file name
52imagename = getfield(s,names{1});
53catchar = {'/','\'};
54catchar = catchar{IS_PC + 1};
55k = max([0,findstr(imagename,catchar)]);
56imagename = imagename(k+1:end);
57s = setfield(s,names{1},imagename);
58
59% second, check if the target dir contains a profile for the image
60cd(tdir);
61if not(exist(imagename,'dir')),
62 mkdir(imagename);
63 cd(cur_dir);
64 j = [catchar,imagename,'.',getfield(s,names{2})];
65 copyfile([sdir,j],[tdir,catchar,imagename,j]);
66 cd(tdir);
67end
68cd(imagename);
69j = [imagename,'_par'];
70if not(exist(j)),
71 rec_num = 1;
72 p = s;
73else
74 % load par file
75 feval(j);
76 rec_num = length(p);
77 i = 1;
78 while (i<=rec_num),
79 k = 0;
80 for j=1:n,
81 k = k + sum(getfield(s,names{j})-getfield(p(i),names{j}));
82 end
83 if k==0,
84 if not(isempty(input(['Data already existed as record # ',num2str(i),...
85 '\nPress any non-return key to Overwrite'],'s'))),
86 break;
87 else
88 rec_num = i; % have checked in already, no update
89 cd(cur_dir);
90 return;
91 end
92 else
93 i = i + 1;
94 end
95 end
96 rec_num = i; % new parameter setting
97 p(rec_num)=s;
98end
99tdir = [tdir,catchar,imagename];
100cd(cur_dir);
101
102% third, check in data files
103% leave .ppm and _edgecon, _phase files
104% if not(exist([tdir,catchar,imagename,'.ppm'])),
105% copyfile([sdir,catchar,imagename,'.ppm'],[tdir,catchar,imagename,'.ppm']);
106% end
107
108% IC files only
109dn = getfnames(sdir,[imagename,'*_IC*.*']);
110header = sprintf('%s%c%s_%d_',tdir,catchar,imagename,rec_num);
111j = length(imagename)+2;
112k = length(dn);
113for i=1:k,
114 copyfile([sdir,catchar,dn{i}],[header,dn{i}(j:end)]);
115 delete([sdir,catchar,dn{i}]);
116end
117disp(sprintf('%d files checked in as record #%d',k,rec_num));
118
119
120% finally, update parameter file
121cd(tdir);
122fid = fopen([imagename,'_par.m'],'w');
123fprintf(fid,'%% Last checked in at %s\n\n',datestr(now));
124for i=1:rec_num,
125 for j=1:n,
126 k = getfield(p(i),names{j});
127 if ischar(k),
128 fprintf(fid,'p(%d).%s=\''%s\'';\n',i,names{j},k);
129 else
130 fprintf(fid,'p(%d).%s=%s;\n',i,names{j},num2str(k));
131 end
132 end
133 fprintf(fid,'\n');
134end
135fclose(fid);
136cd(cur_dir); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/openfigure.m b/SD-VBS/common/toolbox/toolbox_basic/stella/openfigure.m
new file mode 100755
index 0000000..e677014
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/openfigure.m
@@ -0,0 +1,52 @@
1% function openfigure(m,n,caption,isnew)
2function h = openfigure(m,n,caption,isnew)
3
4if nargin<3,
5 caption = ' ';
6end
7
8if nargin<4,
9 isnew = 1;
10end
11
12if (m<=0 | n<=0)
13 return;
14end
15
16if isnew,
17 h = figure; colormap(gray);
18else
19 h = gcf;
20end
21clf
22
23subplot('position',[0,0,0.1,0.1]); axis off;
24text(0.1,0.15,sprintf('S. X. Yu, %s',date),'FontSize',8);
25
26subplot('position',[0,0.96,0.1,0.1]); axis off;
27text(0.1,0.15,caption,'FontSize',8);
28
29subplot(m,n,1);
30%return
31
32if (m==1 & n==1),
33 return;
34end
35
36%set(gcf,'PaperPosition',[0.25, 8, 8,2.5*m]);
37% set(gcf,'PaperPosition',[0.25,0.25,8,10.5]);
38%return
39
40if (m<=n),
41 set(gcf,'PaperOrientation','landscape','PaperPosition',[0.25,0.25,10.5,8]);
42else
43 set(gcf,'PaperPosition',[0.25,0.25,8,10.5]);
44end
45
46% comment on PaperPosition
47% [a,b,c,d]
48% (a,b) is the coordinate of the lower-left corner of the figure
49% (a,b) = (0,0) is the lower-left corner of the paper
50% (c,d) is the coordinate of the upper-right corner of the figure relative to the lower-left corner of the figure
51% Therefore, c>=a, d>=b
52% Full paper position would be [0,0,8.5,11] in inches
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/showim.m b/SD-VBS/common/toolbox/toolbox_basic/stella/showim.m
new file mode 100755
index 0000000..10db297
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/showim.m
@@ -0,0 +1,36 @@
1% function showim(f,cmap) display real or complex image.
2% When it is complex, the real part and imaginary part
3% are displayed as [real,imag] in one image.
4% cmap is the colormap. default = gray, -1 = inverted gray.
5
6% Stella X. Yu, 2000.
7
8function showim(f,cmap,ishori)
9
10if not(isreal(f)),
11 i = [real(f(:)); imag(f(:))];
12 j = [min(i), max(i)];
13 [nr,nc] = size(f);
14 if nargin<3 | isempty(ishori),
15 ishori = nr>nc;
16 end
17 if ishori,
18 i = zeros(nr,1);
19 f = [real(f), [i+j(1),i+j(2)], imag(f)];
20 else
21 i = zeros(1,nc);
22 f = [real(f); [i+j(1);i+j(2)]; imag(f)];
23 end
24end
25imagesc(f); axis off; axis image;
26
27if nargin<2 | isempty(cmap),
28 return;
29end
30
31if cmap==1,
32 cmap = gray;
33elseif cmap==-1,
34 cmap = flipud(gray);
35end
36colormap(cmap); \ No newline at end of file
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/showncut.m b/SD-VBS/common/toolbox/toolbox_basic/stella/showncut.m
new file mode 100755
index 0000000..b1fe1f4
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/showncut.m
@@ -0,0 +1,92 @@
1% function [g,lgd,v,s,dd] = showncut(fn,rec_num)
2% Input:
3% fn = file / image name
4% rec_num = Ncut record number
5% Output:
6% g = a cell contains 1D, 2D and 3D embeddings
7% lgd = legend for g
8% v = eigenvectors
9% s = eigenvalues
10% dd = normalization matrix = 1/sqrt(rowsum(abs(a)))
11% an image is displayed
12
13function [g,lgd,v,s,dd] = showncut(fn,rec_num)
14
15globalenvar; cd(IMAGE_DIR);cd(fn); feval([fn,'_par']);cd(HOME_DIR);
16par = p(rec_num);
17no_rep = (par.offset<1e-6);
18
19[v,s,dd] = firstncut(fn,rec_num);
20[m,n,nc] = size(v);
21
22% generate images for display
23nr = 5;
24num_plots = nc * nr;
25g = cell(num_plots,1);
26lgd = g;
27names = {'r','\theta','\phi'};
28x = cell(3,1);
29for j=1:nc,
30 g{j} = v(:,:,j);
31 lgd{j} = sprintf('%s_{%d} = %1.2f','\lambda', j+no_rep, s(j));
32
33 if j<nc,
34 [x{2},x{1}] = cart2pol(v(:,:,j),v(:,:,j+1));
35 k = j;
36 for t=1:2,
37 k = k + nc;
38 g{k} = x{t};
39 lgd{k} = sprintf('%s_{%d,%d}',names{t},j+[0:1]+no_rep);
40 end
41
42 if j<nc-1,
43 [x{2},x{3},x{1}] = cart2sph(v(:,:,j),v(:,:,j+1),v(:,:,j+2));
44 for t=[1,3], % theta must be the same as 2D embedding, so ignore it
45 k = k + nc;
46 g{k} = x{t};
47 lgd{k} = sprintf('%s_{%d,%d,%d}',names{t},j+[0:2]+no_rep);
48 end
49 end
50 end
51end
52
53% fill in slots by image f and affinity pattern
54j = nc + nc; g{j} = getimage2(fn); lgd{j} = sprintf('%d x %d image',m,n);
55j = nr * nc; g{j} = readpcm([fn,'_phase.pfm']); lgd{j} = 'phase';
56j = j - 1; g{j} = exp(-(readpfmc([fn,'_edgecon.pfm'])/(255*par.sig_IC)).^2); lgd{j} = 'IC';
57
58i = round(m*[1;3]./4);
59%i = i([1,1,2,2]);
60j = round(n*[1;3]./4);
61%j = j([1,2,1,2]);
62k = m * (j-1) + i;
63
64a = afromncut(v,s,dd,1,no_rep,k);
65
66y = [4*nc-1, 4*nc, 5*nc-1, 5*nc, 6*nc-1, 6*nc];
67for t=1:length(k),
68 g{y(t)} = reshape(a(t,:),[m,n]);
69 lgd{y(t)} = sprintf('a at (%d,%d)',i(t),j(t));
70end
71
72% find parameters
73fg_title = sprintf('%s: %s=%d, %s=%d, %s=%3.2f, %s=%3.2f',...
74par.fname_base,...
75'r_x', par.spatial_neighborhood_x,...
76'\sigma_x',par.sigma_x,...
77'\sigma_{IC}',par.sig_IC,...
78'repulsion',par.offset);
79
80openfigure(nr,nc,fg_title,0);
81dispimg(g,[nr,nc],lgd);
82
83% fix
84subplot(nr,nc,nc*3);
85plot(s,'ro'); title('\lambda');
86axis square; axis tight; set(gca,'XTick',[]);
87for t=1:length(k),
88 subplot(nr,nc,y(t));
89 hold on;
90 text(j(t),i(t),'+');
91end
92hold off
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/startup.m b/SD-VBS/common/toolbox/toolbox_basic/stella/startup.m
new file mode 100755
index 0000000..262429a
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/startup.m
@@ -0,0 +1,18 @@
1globalenvar;
2
3addpath(IMAGE_DIR);
4
5addpath(HOME_DIR);
6
7path(path,['/hid/jshi/Research/walking']);
8
9tb_dir = ['/hid/jshi/matlab/toolbox/'];
10
11path(path,[tb_dir,'io']);
12path(path,[tb_dir,'filter']);
13path(path,[tb_dir,'filter_hist']);
14path(path,[tb_dir,'disp']);
15path(path,[tb_dir,'common']);
16path(path,[tb_dir,'textons']);
17path(path,[tb_dir,'pyramid']);
18
diff --git a/SD-VBS/common/toolbox/toolbox_basic/stella/test_ncutm.m b/SD-VBS/common/toolbox/toolbox_basic/stella/test_ncutm.m
new file mode 100755
index 0000000..c9b46ab
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/stella/test_ncutm.m
@@ -0,0 +1,38 @@
1fn = 'walk1';
2
3repulsion_test = 1;
4
5if 1,
6 f = getimage2(fn);
7 par = jshincutdefpar;
8 par.fname_base = fn;
9 par.spatial_neighborhood_x = 10;
10 par.sigma_x = 3 * par.spatial_neighborhood_x;
11 par.sig_IC = 0.03;
12 par.num_eigvecs = 10;
13 par.offset = 0.00;
14 par.sig_filter = 1.0;
15 par.elong_filter = 3.0;
16 [par,rec_num] = jshincut(par);
17 [g,lgd,v,s,dd] = showncut(fn,rec_num);
18
19if repulsion_test,
20 par.offset = 0.1;
21 [par,rec_num] = jshincut(par);
22 figure;
23 [g,lgd,v,s,dd] = showncut(fn,rec_num);
24end
25end
26
27if 0,
28 x = v(:,:,1);
29 y = v(:,:,2);
30 figure;
31 subplot(2,1,1); plot(x(:),y(:),'ro');
32 r = sqrt(x.^2+y.^2);
33 x = x./r;
34 y = y./r;
35 subplot(2,1,2); im([x,y]*[x,y]');
36 % mask = (x>0) & y>0;
37 % showmask(f,mask);
38end
diff --git a/SD-VBS/common/toolbox/toolbox_basic/tars/TOOLBOX_calib.tar b/SD-VBS/common/toolbox/toolbox_basic/tars/TOOLBOX_calib.tar
new file mode 100755
index 0000000..bb418a5
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/tars/TOOLBOX_calib.tar
Binary files differ
diff --git a/SD-VBS/common/toolbox/toolbox_basic/textons/dist2.m b/SD-VBS/common/toolbox/toolbox_basic/textons/dist2.m
new file mode 100755
index 0000000..f2d93e1
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/textons/dist2.m
@@ -0,0 +1,27 @@
1function n2 = dist2(x, c)
2%DIST2 Calculates squared distance between two sets of points.
3%
4% Description
5% D = DIST2(X, C) takes two matrices of vectors and calculates the
6% squared Euclidean distance between them. Both matrices must be of
7% the same column dimension. If X has M rows and N columns, and C has
8% L rows and N columns, then the result has M rows and L columns. The
9% I, Jth entry is the squared distance from the Ith row of X to the
10% Jth row of C.
11%
12% See also
13% GMMACTIV, KMEANS, RBFFWD
14%
15
16% Copyright (c) Christopher M Bishop, Ian T Nabney (1996, 1997)
17
18[ndata, dimx] = size(x);
19[ncentres, dimc] = size(c);
20if dimx ~= dimc
21 error('Data dimension does not match dimension of centres')
22end
23
24n2 = (ones(ncentres, 1) * sum((x.^2)', 1))' + ...
25 ones(ndata, 1) * sum((c.^2)',1) - ...
26 2.*(x*(c'));
27
diff --git a/SD-VBS/common/toolbox/toolbox_basic/textons/find_textons.m b/SD-VBS/common/toolbox/toolbox_basic/textons/find_textons.m
new file mode 100755
index 0000000..e7fa4b0
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/textons/find_textons.m
@@ -0,0 +1,46 @@
1function [centers,label,post,d2]=find_textons(FIw,ncenters,centers_in,n_iter);
2% [centers,label,post,d2]=find_textons(FIw,ncenters,centers_in,n_iter);
3%
4% find textons using kmeans for windowed portion FIw of filtered image
5%
6% to start with centers pulled randomly from image, set centers_in=[]
7
8% define number of textons
9%ncenters=25;
10
11[N1,N2,N3]=size(FIw);
12% reshape filtered image stack into a long array of feature vectors
13fv=reshape(FIw,N1*N2,N3);
14% (each row is a feature vector)
15
16%centers=.01^2*randn(ncenters,N3);
17% take centers randomly from within image
18if isempty(centers_in)
19 rndnum=1+floor(N1*N2*rand(1,ncenters));
20 centers_in=fv(rndnum,:);
21end
22
23options = foptions;
24options(1)=1; % Prints out error values.
25options(5) = 0;
26if nargin<4
27 n_iter=15;
28end
29options(14) = n_iter; % Number of iterations.
30
31[centers,options,d2,post]=kmeans2(centers_in,fv,options);
32
33% reshuffle the centers so that the one closest to the origin
34% (featureless) comes last
35norms=sum(centers.^2,2);
36[sortval,sortind]=sort(-norms);
37centers=centers(sortind,:);
38d2=reshape(d2,N1,N2,ncenters);
39post=reshape(post,N1,N2,ncenters);
40d2=d2(:,:,sortind);
41post=post(:,:,sortind);
42
43
44% retrieve cluster number assigned to each feature vector
45[minval,label]=min(d2,[],3);
46
diff --git a/SD-VBS/common/toolbox/toolbox_basic/textons/find_textons1.m b/SD-VBS/common/toolbox/toolbox_basic/textons/find_textons1.m
new file mode 100755
index 0000000..b192015
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/textons/find_textons1.m
@@ -0,0 +1,37 @@
1function [centers,label,post,d2]=find_textons(fv,ncenters,centers_in,n_iter);
2% [centers,label,post,d2]=find_textons(FIw,ncenters,centers_in,n_iter);
3%
4% find textons using kmeans for windowed portion FIw of filtered image
5%
6% to start with centers pulled randomly from image, set centers_in=[]
7
8[N1,N2] =size(fv);
9
10% take centers randomly from within image
11if isempty(centers_in)
12 rndnum=1+floor(N1*rand(1,ncenters));
13 centers_in=fv(rndnum,:);
14end
15
16options = foptions;
17options(1)=1; % Prints out error values.
18options(5) = 0;
19if nargin<4
20 n_iter=15;
21end
22options(14) = n_iter; % Number of iterations.
23
24[centers,options,d2,post]=kmeans2(centers_in,fv,options);
25
26
27% retrieve cluster number assigned to each feature vector
28[minval,label]=min(d2,[],2);
29
30
31h = hist(label(:),[1:max(label(:))]);
32a = h>0;
33a = cumsum(a);
34
35[nr,nc] = size(label);
36label = reshape(a(label(:)),nr,nc);
37
diff --git a/SD-VBS/common/toolbox/toolbox_basic/textons/kmeans2.m b/SD-VBS/common/toolbox/toolbox_basic/textons/kmeans2.m
new file mode 100755
index 0000000..0bd87b2
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/textons/kmeans2.m
@@ -0,0 +1,127 @@
1function [centres, options, d2, post, errlog] = kmeans2(centres, data, options)
2%KMEANS Trains a k means cluster model.
3%
4% Description
5% CENTRES = KMEANS(CENTRES, DATA, OPTIONS) uses the batch K-means
6% algorithm to set the centres of a cluster model. The matrix DATA
7% represents the data which is being clustered, with each row
8% corresponding to a vector. The sum of squares error function is used.
9% The point at which a local minimum is achieved is returned as
10% CENTRES. The error value at that point is returned in OPTIONS(8).
11%
12% [CENTRES, OPTIONS, POST, ERRLOG] = KMEANS(CENTRES, DATA, OPTIONS)
13% also returns the cluster number (in a one-of-N encoding) for each
14% data point in POST and a log of the error values after each cycle in
15% ERRLOG. The optional parameters have the following
16% interpretations.
17%
18% OPTIONS(1) is set to 1 to display error values; also logs error
19% values in the return argument ERRLOG. If OPTIONS(1) is set to 0, then
20% only warning messages are displayed. If OPTIONS(1) is -1, then
21% nothing is displayed.
22%
23% OPTIONS(2) is a measure of the absolute precision required for the
24% value of CENTRES at the solution. If the absolute difference between
25% the values of CENTRES between two successive steps is less than
26% OPTIONS(2), then this condition is satisfied.
27%
28% OPTIONS(3) is a measure of the precision required of the error
29% function at the solution. If the absolute difference between the
30% error functions between two successive steps is less than OPTIONS(3),
31% then this condition is satisfied. Both this and the previous
32% condition must be satisfied for termination.
33%
34% OPTIONS(14) is the maximum number of iterations; default 100.
35%
36% See also
37% GMMINIT, GMMEM
38%
39
40% Copyright (c) Christopher M Bishop, Ian T Nabney (1996, 1997)
41
42[ndata, data_dim] = size(data);
43[ncentres, dim] = size(centres);
44
45if dim ~= data_dim
46 error('Data dimension does not match dimension of centres')
47end
48
49if (ncentres > ndata)
50 error('More centres than data')
51end
52
53% Sort out the options
54if (options(14))
55 niters = options(14);
56else
57 niters = 100;
58end
59
60store = 0;
61if (nargout > 3)
62 store = 1;
63 errlog = zeros(1, niters);
64end
65
66% Check if centres and posteriors need to be initialised from data
67if (options(5) == 1)
68 % Do the initialisation
69 perm = randperm(ndata);
70 perm = perm(1:ncentres);
71
72 % Assign first ncentres (permuted) data points as centres
73 centres = data(perm, :);
74end
75% Matrix to make unit vectors easy to construct
76id = eye(ncentres);
77
78% Main loop of algorithm
79for n = 1:niters
80
81 % Save old centres to check for termination
82 old_centres = centres;
83
84 % Calculate posteriors based on existing centres
85 d2 = dist2(data, centres);
86 % Assign each point to nearest centre
87 [minvals, index] = min(d2', [], 1);
88 post = id(index,:);
89
90 num_points = sum(post, 1);
91 % Adjust the centres based on new posteriors
92 for j = 1:ncentres
93 if (num_points(j) > 0)
94 centres(j,:) = sum(data(find(post(:,j)),:), 1)/num_points(j);
95 end
96 end
97
98 % Error value is total squared distance from cluster centres
99 e = sum(minvals);
100 tmp = sort(minvals);
101 e95 = sqrt(tmp(round(length(tmp) * 0.95)));
102 erms = sqrt(e/ndata);
103 if store
104 errlog(n) = e;
105 end
106 if options(1) > 0
107 fprintf(1, ' Cycle %4d RMS Error %11.6f 95-tier Error %11.6f\n', n, erms,e95);
108 end
109
110 if n > 1
111 % Test for termination
112 if max(max(abs(centres - old_centres))) < options(2) & ...
113 abs(old_e - e) < options(3)
114 options(8) = e;
115 return;
116 end
117 end
118 old_e = e;
119end
120
121% If we get here, then we haven't terminated in the given number of
122% iterations.
123options(8) = e;
124%if (options(1) >= 0)
125% disp('Warning: Maximum number of iterations has been exceeded');
126%end
127