ltfat/0000775000175000017500000000000012612404251011561 5ustar susnaksusnakltfat/thirdparty/0000775000175000017500000000000012612404251013753 5ustar susnaksusnakltfat/thirdparty/Playrec/0000775000175000017500000000000012612404251015352 5ustar susnaksusnakltfat/thirdparty/Playrec/config.h0000664000175000017500000000105612612404251016772 0ustar susnaksusnak#ifndef _CONFIG_H #define _CONFIG_H /* The mx class equivalent to SAMPLE */ #define mxSAMPLE mxSINGLE_CLASS /* Format to be used for samples with PortAudio = 32bit */ typedef float SAMPLE; /* This controls type of polynomial resampling. * * See enum resample_type in ltfatresample.h for * possible values. */ #define RESAMPLING_TYPE BSPLINE /* This is a constant used to adjust the critical frequency of the * anti-aliasing low-pass filter. * The filtering is done only when subsampling is performed. */ #define FPADJ 0.92 #endif ltfat/thirdparty/Playrec/Makefile_mingw0000664000175000017500000000114312612404251020212 0ustar susnaksusnak# To run this makefile, you must provide your system specific EXT and MATLABROOT # variables on the command line e.g.: # # make -f Makefile_mingw64 MATLABROOT="C:\Program Files\MATLAB\R2011b" EXT=mexw64 ARCH=win64 ifndef MATLABROOT $(warning MATLABROOT variable is undefined. Using default MATLABROOT="C:\Program Files\MATLAB\R2011b" ) MATLABROOT=C:\Program Files\MATLAB\R2011b endif ifndef EXT $(warning EXT variable is undefined. Using default EXT=mexw64 ) EXT=mexw64 endif ifndef ARCH $(warning ARCH variable is undefined. Using default ARCH=win64 ) ARCH=win64 endif include Makefile_unix ltfat/thirdparty/Playrec/pa_dll_playrec.h0000664000175000017500000003162512612404251020504 0ustar susnaksusnak/* * Playrec * Copyright (c) 2006-2008 Robert Humphrey * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ #ifndef PA_DLL_PLAYREC_H #define PA_DLL_PLAYREC_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #include "mex.h" #include "portaudio.h" #include "config.h" #include "ltfatresample.h" #define VERSION "2.1.0" #define DATE "15 April 2008" #define AUTHOR "Robert Humphrey" /* The mx class equivalent to unsigned int */ #define mxUNSIGNED_INT mxUINT32_CLASS /* The mx class equivalent to SAMPLE */ #define mxSAMPLE mxSINGLE_CLASS /* Format to be used for samples with PortAudio = 32bit */ // typedef float SAMPLE; // Already done in config.h /* Structure to contain 'human readable' advice for each state */ typedef struct { int num; /* State numerical representation (single bit set) */ char *name; /* Name used to textually refer to the state */ char *startString; /* String providing advice on how to start the state */ /* if it is not currently active but is required */ char *stopString; /* String providing advice on how to clear the state */ /* if it is currently active and shouldn't be */ } StateOptsStruct; /* Structure to contain all the per-channel data for one 'page' */ typedef struct ChanBufStruct_tag { SAMPLE *pbuffer; /* The channel audio data */ unsigned int bufLen; /* Length of the audio buffer */ unsigned int channel; /* Channel number on the audio device */ /* that this buffer is associated with */ /* (first channel = 0) */ struct ChanBufStruct_tag *pnextChanBuf; /* Pointer to the next channel */ /* buffer in the linked list. The */ /* order of buffers in the linked list */ /* is the order of 'channel' data */ /* received from and returned to MATLAB */ } ChanBufStruct; /* Structure to organise 'pages' */ typedef struct StreamPageStruct_tag { ChanBufStruct *pfirstRecChan; /* First record channel within this page */ ChanBufStruct *pfirstPlayChan; /* First play channel within the page */ unsigned int pageLength; /* The maximum length of a channel in this page */ unsigned int pageLengthRec; /* The max. length of a chan. before resampling */ volatile unsigned int pagePos; /* The current position within the page */ unsigned int pageNum; /* A unique id to identify the page */ unsigned int playChanCount; /* The number of channels used to communicate */ /* with PortAudio. Must be greater than */ /* the maximum channel number used. */ bool *pplayChansInUse; /* Pointer to array type bool, size playChanCount. */ /* Each element can be: */ /* true - the channel is in the play linked list */ /* false - the channel is not in linked list */ /* Setting false means that the channel is set */ /* to all zeros within the callback. Any channels */ /* not included in this list (or set true) must */ /* be included in the play channel linked list. */ volatile bool pageUsed; /* Set true in if the page has been used in the */ /* PortAudio callback function */ volatile bool pageFinished; /* True if the page has been finished (all record */ /* buffers full and all playout buffers 'empty') */ /* Once set, this and pnextStreamPage are the */ /* only variables the PortAudio callback will check */ /* (none are written) */ struct StreamPageStruct_tag *pnextStreamPage; /* The next page in the linked list */ } StreamPageStruct; /* The top level structure used to organise the stream and all data associated */ /* with it. If more than one stream is required simultaneously use multiple */ /* StreamInfoStruct's with one per stream. Provided some way to indicate */ /* which stream to use is added to the commands, each stream should be able to */ /* run completely independantly with only very little work. */ /* For example, have a linked list containing all StreamInfoStruct's and then */ /* a global variable pointing to the one in use. An additional command would */ /* be required to select which stream all other commands refer to, and doInit, */ /* doReset and mexFunctionCalled would need to be modified slightly, but apart */ /* from that everything else should be able to remain the same. */ typedef struct { StreamPageStruct *pfirstStreamPage; /* First page in the linked list */ PaStream *pstream; /* Pointer to the stream, or NULL for no stream */ time_t streamStartTime; /* The start time of the stream, can be used to */ /* detemine if a new stream has been started. */ /* Configuration settings used when opening the stream - see Pa_OpenStream */ /* in portaudio.h for descriptions of these parameters: */ double suggestedSampleRate; unsigned long suggestedFramesPerBuffer; unsigned long minFramesPerBuffer; unsigned long maxFramesPerBuffer; PaTime recSuggestedLatency; PaTime playSuggestedLatency; PaStreamFlags streamFlags; volatile bool stopStream; /* Set true to trigger the callback to stop the */ /* stream. */ volatile bool inCallback; /* Set true whilst in the callback. */ volatile unsigned long skippedSampleCount; /* The number of samples that have been zeroed */ /* whilst there are no unfinished pages in the */ /* linked list. Should only be modified in */ /* the callback. Use resetSkippedSampleCount */ /* to reset the counter. */ /* If resetSkippedSampleCount is true the value */ /* of skippedSampleCount should be ignored and */ /* instead assumed to be 0. */ volatile bool resetSkippedSampleCount; /* Set true to reset skippedSampleCount. The reset */ /* takes place within the callback, at which point */ /* this is cleared. This is to ensure it does always */ /* get cleared. */ volatile bool isPaused; /* set true to 'pause' playback and recording */ /* Never stops the PortAudio stream, just alters */ /* the data transferred. */ PaDeviceIndex playDeviceID; /* Device ID for the device being used, or */ /* PaNoDevice for no device */ PaDeviceIndex recDeviceID; /* Device ID for the device being used, or */ /* PaNoDevice for no device */ unsigned int playChanCount; /* The number of channels used to communicate */ /* with PortAudio. Must be greater than */ /* the maximum channel number used. */ unsigned int recChanCount; /* The number of channels used to communicate */ /* with PortAudio. Must be greater than */ /* the maximum channel number used. */ } StreamInfoStruct; /* Function prototypes */ SAMPLE *convDouble(double *oldBuf, int buflen); SAMPLE *convFloat(float *oldBuf, int buflen); void validateState(int wantedStates, int rejectStates); void freeChanBufStructs(ChanBufStruct **ppcbs); void freeStreamPageStruct(StreamPageStruct **ppsps); void freeStreamInfoStruct(StreamInfoStruct **psis); StreamInfoStruct *newStreamInfoStruct(bool makeMemoryPersistent); StreamPageStruct *addStreamPageStruct(StreamInfoStruct *psis, StreamPageStruct *psps); StreamPageStruct *newStreamPageStruct(unsigned int portAudioPlayChanCount, bool makeMemoryPersistent); static int playrecCallback(const void *inputBuffer, void *outputBuffer, unsigned long frameCount, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData ); bool mexFunctionCalled(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); void condensePages(void); void exitFunc(void); PaError checkPAErr(PaError err); void abortIfPAErr(const char* msg); bool channelListToChanBufStructs(const mxArray *pmxChanArray, ChanBufStruct **ppfirstcbs, unsigned int minChanNum, unsigned int maxChanNum, bool makeMemoryPersistent); bool addPlayrecPage(mxArray **ppmxPageNum, const mxArray *pplayData, const mxArray *pplayChans, const mxArray *precDataLength, const mxArray *precChans); /* all 'do' functions return true if all input arguments are valid, otherwise */ /* false (triggering display of the list of valid arguments) */ bool doAbout(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doOverview(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doInit(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doPlayrec(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doPlay(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doRec(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetRec(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetPlayrec(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetSampleRate(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetFramesPerBuffer(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetStreamStartTime(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetPlayDevice(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetRecDevice(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetPlayMaxChannel(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetRecMaxChannel(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetPlayLatency(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetRecLatency(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetPageList(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetCurrentPosition(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetLastFinishedPage(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doPause(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doBlock(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doIsFinished(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doIsInitialised(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doDelPage(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doReset(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetDevices(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doGetSkippedSampleCount(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); bool doResetSkippedSampleCount(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* PA_DLL_PLAYREC_H */ ltfat/thirdparty/Playrec/Makefile_mingwoct0000664000175000017500000000014212612404251020716 0ustar susnaksusnak# Use GNU Make to process this file. # mingw32-make -f Makefile_mingw32 include Makefile_unixoct ltfat/thirdparty/Playrec/Makefile_unixoct0000664000175000017500000000100612612404251020560 0ustar susnaksusnak# Use GNU Make to process this file. MKOCTFILE ?= mkoctfile ifndef EXT EXT=mex endif ifndef PORTAUDIO ifdef HAVE_PORTAUDIO PORTAUDIO=-lportaudio endif endif include ../../src/ostools.mk ADDITIONALFLAGS = -L. $(PORTAUDIO) -I. -I../../src/thirdparty -DIS_OCTAVE ifdef HAVE_PORTAUDIO ADDITIONALFLAGS += -DHAVE_PORTAUDIO endif all: $(MKOCTFILE) -Wall -mex mex_dll_core.c pa_dll_playrec.c ltfatresample.c \ $(ADDITIONALFLAGS) -o playrec.$(EXT) clean: $(RM) *.o *.$(EXT) .PHONY: all clean ltfat/thirdparty/Playrec/mex_dll_core.h0000664000175000017500000001624312612404251020165 0ustar susnaksusnak/* * Playrec * Copyright (c) 2006-2008 Robert Humphrey * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * Header for mex_dll_core.c which contains 'core' functions to be used when * creating dll files for use with MATLAB. This allows multiple functions to * be called from within MATLAB through the single entry point function by * specifying the name of the required command/function as the first input * argument. */ #ifndef MEX_DLL_CORE_H #define MEX_DLL_CORE_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** Adds symbol exporting function decorator to mexFunction. On windows, def file is no longer needed. For MinGW, it suppresses the default "export-all-symbols" behavior. **/ #if defined(_WIN32) || defined(__WIN32__) # define DLL_EXPORT_SYM __declspec(dllexport) #else # define EXPORT_SYM __attribute__((visibility("default"))) #endif #include "mex.h" /* Macro defintions to avoid crashes under Mac OS X */ #ifndef max #define max(a,b) ((a)>(b)? (a):(b)) #endif #ifndef min #define min(a,b) ((a)<(b)? (a):(b)) #endif /* Macro defintions to avoid problems when not compiling with Matlab's mex.h */ #ifndef true #define true 1 #endif #ifndef false #define false 0 #endif /* Include this in _funcLookup[] to include the help command */ #define HELP_FUNC_LOOKUP {"help", \ showHelp, \ 1, 1, 0, 0, \ "Provides usage information for each command", \ "Displays command specific usage instructions.", \ { \ {"commandName", "name of the command for which information is required"} \ }, \ { \ {NULL} \ }, \ } /* The maximum number of arguments that can be listed for lhs and rhs in funcLookupStruct_t */ #define MAX_ARG_COUNT 10 /* Width of the screen in characters when displaying help */ #define SCREEN_CHAR_WIDTH 80 /* Position of tab stops - must be 0 or power of 2 (eg 0, 1, 2, 4, 8, 16 etc); */ #define SCREEN_TAB_STOP 4 /* Including this #define makes command names case insensitive */ /* #define CASE_INSENSITIVE_COMMAND_NAME */ /* Structure to contain information about a single input or output argument. */ typedef struct { char *name; /* the argument name */ char *desc; /* description of the argument - can be multilined * and will be line wrapped if longer than one line */ bool isOptional; /* true if the argument is optional */ } ParamDescStruct; /* Sturcture containing information associated for each command that can * be called from within MATLAB. */ typedef struct { char *name; /* Textual string used to identify command in MATLAB */ bool (*func)(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); /* Pointer to the actual function to call. * The arguments are those received by the entry point * function, apart from the function name is NOT supplied * and so prhs starts with the second argument and * nrhs is one less. ie the arguments are as if the * function was called directly from within MATLAB */ int minInputArgs; /* The minimum and maximum values of nlhs and nrhs that */ int maxInputArgs; /* *func should be called with. Use -1 to not check the */ int minOutputArgs; /* particular value. This can be used to reduce the */ int maxOutputArgs; /* amount of input/output count checks in the function. */ char *desc; /* Short (1 line) command description - not line wrapped */ char *help; /* Complete help for the command. Can be any length and * can contain new line characters. Will be line wrapped * to fit the width of the screen as defined as * SCREEN_CHAR_WIDTH with tab stops every * SCREEN_TAB_STOP characters. */ /* descriptions of all input arguments in the order they are required */ ParamDescStruct inputArgs[MAX_ARG_COUNT]; /* descriptions of all output arguments in the order they are returned */ ParamDescStruct outputArgs[MAX_ARG_COUNT]; } FuncLookupStruct; /* Function prototypes */ bool showHelp(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); unsigned int linewrapString( const char *pdisplayStr, unsigned int maxLineLength, unsigned int blockIndent, int firstLineIndent, unsigned int tabSize ); /* Function which must have its definition supplied elsewhere. * Returning false makes the call to mexFunction return immediately. * Returning true means the first argument is analysed and the * appropriate function called. */ extern bool mexFunctionCalled(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); /* These two variables must be defined elsewhere, containing a list of all the * commands which the MEX-file should recognise. See above and mex_dll_core.c * for more information on the fields that must be included within _funcLookup. * The order of the commands in _funcLookup is the order they will be displayed * when the available command list is generated (produced when no arguments are * supplied when calling the MEX-file from MATLAB). */ extern const FuncLookupStruct _funcLookup[]; extern const int _funcLookupSize; #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* MEX_DLL_CORE_H */ ltfat/thirdparty/Playrec/Makefile_macoct0000664000175000017500000000003112612404251020332 0ustar susnaksusnakinclude Makefile_unixoct ltfat/thirdparty/Playrec/ltfatresample.c0000664000175000017500000003347112612404251020371 0ustar susnaksusnak/* * ltfatresample.c * * Copyright (C) 2014 Zdenek Prusa . * This file is part of LTFAT http://ltfat.github.io * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #include "ltfatresample.h" #include /* This is an actual structure used to hold info between consecutive blocks */ struct resample_plan_struct { /* target to source sampling rates ratio */ const double ratio; /* Type of polynomial interpolation */ const resample_type restype; /* First sample in block global index */ size_t inPos; size_t outPos; /* Buffer for holding overlap, length depend on interpoaltion technique */ SAMPLE* overlap; /* Overlap length */ size_t oLen; /* Function pointer to the block interpolation functon */ resample_error (*executer)(const resample_plan, const SAMPLE*, const size_t, SAMPLE*, const size_t); /* Function pointer to one sample interpolating function */ SAMPLE (*interp_sample)(const double, const SAMPLE *yin); /* Filters */ EMQFfilters ef; /* Buffer, maxlength ceil(ratio) */ SAMPLE* ebuf; const size_t ebufLen; /* Number of samples to be used from ebuf */ size_t ebufUsed; }; void resample_reset(const resample_plan rp) { memset(rp->overlap,0,rp->oLen*sizeof*rp->overlap); rp->inPos = 0; rp->outPos = 0; rp->ebufUsed = 0; } resample_plan resample_init(const resample_type restype, const double ratio) { resample_plan rp = calloc(1, sizeof * rp); *(double*)&rp->ratio = ratio; *(resample_type*)&rp->restype = restype; if (restype == LINEAR) { rp->oLen = 1; rp->executer = &resample_execute_polynomial; rp->interp_sample = &linear_interp; } else if (restype == LAGRANGE) { rp->oLen = 5; rp->executer = &resample_execute_polynomial; rp->interp_sample = &lagrange_interp; } else if (restype == BSPLINE) { rp->oLen = 5; rp->executer = &resample_execute_polynomial; rp->interp_sample = &bspline_interp; } rp->overlap = calloc(rp->oLen, sizeof(SAMPLE)); *(size_t*)&rp->ebufLen = ceil(ratio); rp->ebuf = malloc(rp->ebufLen * sizeof(SAMPLE)); /*rp->ebufUsed = 0; This was actually already set. */ /* When subsampling, do the antialiasing filtering. */ /* This is not exactly 1, because we do not want to filter when * subsampling only a little or not at all. */ if (ratio < 0.95) { rp->ef = emqffilters_init(ratio * FPADJ); } return rp; } resample_error resample_execute(const resample_plan rp, SAMPLE* in, const size_t Lin, SAMPLE* out, const size_t Lout) { resample_error status; /* Do filtering if initialized */ if (rp->ef) { /* Filtering is done inplace */ emqffilters_dofilter(rp->ef, in, Lin, in); } /* Execute the computation */ status = rp->executer(rp, in, Lin, out, Lout); if (status == RESAMPLE_OK) { /* All ok, advance both stream pointers */ resample_advanceby(rp, Lin, Lout); } else { /* Overflow or underflow occured, resetting the stream */ resample_reset(rp); } return status; } size_t resample_nextoutlen(const resample_plan rp, size_t Lin) { size_t retval = 0; const double outSpos = ceil( (rp->inPos) * rp->ratio ); const double outEpos = ceil( (rp->inPos + Lin) * rp->ratio ); retval = (size_t)( outEpos - outSpos); return retval; } size_t resample_nextinlen(const resample_plan rp, size_t Lout) { size_t retval = 0; const double outSpos = ceil( (rp->outPos) / rp->ratio ); const double outEpos = ceil( (rp->outPos + Lout) / rp->ratio ); retval = (size_t)( outEpos - outSpos); return retval; } /* Be carefull, rp is effectivelly a double pointer. */ void resample_done(resample_plan *rp) { if ((*rp)->overlap) free((*rp)->overlap); if ((*rp)->ebuf) free((*rp)->ebuf); if ((*rp)->ef) emqffilters_done(&((*rp)->ef)); free(*rp); /* This is the reason why it is passed by a double pointer */ *rp = NULL; } void resample_advanceby(const resample_plan rp, const size_t Lin, const size_t Lout) { rp->inPos += Lin; rp->outPos += Lout; } /* INTERNALS */ /* This can handle any type of polynomial resampling. */ resample_error resample_execute_polynomial(const resample_plan rp, const SAMPLE* in, const size_t Lin, SAMPLE* out, const size_t Lout) { #define ONESAMPLE(outVal)\ truepos = (ii + outSpos) * oneOverRatio - rp->inPos;\ highpos = ceil(truepos);\ x = truepos - (highpos - 1);\ memcpy(buf, &in[highpos - (oLen + 1)], (oLen + 1) * sizeof * buf);\ (outVal) = rp->interp_sample(x, buf); double truepos, x; ptrdiff_t highpos = 0; SAMPLE* buf; size_t ii, jj, zz, *iiThre; resample_error retval = RESAMPLE_OK; size_t oLen = rp->oLen; size_t Louttmp = Lout - rp->ebufUsed; const double oneOverRatio = 1.0 / rp->ratio; /* Starting position in the output stream */ //double outSpos = ceil( (rp->inPos) * rp->ratio ) ; double outSpos = rp->outPos + rp->ebufUsed ; /* How many samples will this routine produce */ size_t Louttrue = resample_nextoutlen(rp, Lin); size_t Loutvalid = Louttrue < Louttmp ? Louttrue : Louttmp; /* Copy buffered samples + update out */ memcpy(out, rp->ebuf, rp->ebufUsed * sizeof * out); out += rp->ebufUsed; /* oLen +1 thresholds */ iiThre = calloc(oLen + 1, sizeof * iiThre); /* Buffer for passing values to single sample interp. routine */ buf = calloc(oLen + 1, sizeof * buf); /* First handle all samples which need overlap. */ for (ii = 0; ii < oLen + 1; ii++) { iiThre[ii] = floor((rp->inPos + ((double) ii + 1) ) * rp->ratio - outSpos) + 1; } /* ii starts here */ ii = 0; for (zz = 0; zz < oLen + 1; zz++) { for (; ii < iiThre[zz]; ii++) { truepos = (ii + outSpos) * oneOverRatio - rp->inPos; x = truepos - zz; memcpy(buf, rp->overlap + zz, (oLen - zz)*sizeof * buf); memcpy(buf + (oLen - zz), in, (zz + 1)*sizeof * buf ); out[ii] = rp->interp_sample(x, buf); } } /* Handle samples safely inside. * ii continues */ for (; ii < Loutvalid ; ii++) { ONESAMPLE(out[ii]) } /* Handle samples overflowing the output buffer * * ii still continues */ for (jj = 0; ii < Louttrue && jj < rp->ebufLen; ii++, jj++ ) { ONESAMPLE(rp->ebuf[jj]) } rp->ebufUsed = jj; if (Louttrue>Louttmp+rp->ebufUsed) { /* Some samples will be skipped. */ retval = RESAMPLE_OVERFLOW; } if (Louttrue < Louttmp) { /* Next iteration will probably access an uninitialized memory. */ retval = RESAMPLE_UNDERFLOW; memset(out+Louttrue,0,(Louttmp-Louttrue)*sizeof*out); } /* Copy last oLen samples to overlap .*/ memcpy(rp->overlap, in + Lin - oLen, oLen * sizeof * in); free(iiThre); free(buf); return retval; #undef ONESAMPLE } SAMPLE linear_interp(const double x, const SAMPLE* yin) { const SAMPLE* y = yin; return (SAMPLE) ( y[0] + x * (y[1] - y[0])); } /* y = [y(-2),y(-1),y(0),y(1),y(2),y(3)] */ /* Taken from: * Olli Niemitalo: Polynomial Interpolators for High-Quality Resampling of * Oversampled Audio, URL: http://yehar.com/blog/?p=197 */ SAMPLE lagrange_interp(const double x, const SAMPLE* yin) { SAMPLE ym1py1, twentyfourthym2py2, c0, c1, c2, c3, c4, c5; const SAMPLE* y = yin + 2; ym1py1 = y[-1] + y[1]; twentyfourthym2py2 = 1 / 24.0 * (y[-2] + y[2]); c0 = y[0]; c1 = 1 / 20.0 * y[-2] - 1 / 2.0 * y[-1] - 1 / 3.0 * y[0] + y[1] - 1 / 4.0 * y[2] + 1 / 30.0 * y[3]; c2 = 2 / 3.0 * ym1py1 - 5 / 4.0 * y[0] - twentyfourthym2py2; c3 = 5 / 12.0 * y[0] - 7 / 12.0 * y[1] + 7 / 24.0 * y[2] - 1 / 24.0 * (y[-2] + y[-1] + y[3]); c4 = 1 / 4.0 * y[0] - 1 / 6.0 * ym1py1 + twentyfourthym2py2; c5 = 1 / 120.0 * (y[3] - y[-2]) + 1 / 24.0 * (y[-1] - y[2]) + 1 / 12.0 * (y[1] - y[0]); return (SAMPLE) ( ((((c5 * x + c4) * x + c3) * x + c2) * x + c1) * x + c0 ); } /* y = [y(-2),y(-1),y(0),y(1),y(2),y(3)] */ /* Taken from: * Olli Niemitalo: Polynomial Interpolators for High-Quality Resampling of * Oversampled Audio, URL: http://yehar.com/blog/?p=197 */ SAMPLE bspline_interp(const double x, const SAMPLE* yin) { SAMPLE ym2py2, ym1py1, y2mym2, y1mym1, sixthym1py1, c0, c1, c2, c3, c4, c5; const SAMPLE* y = yin + 2; ym1py1 = y[-1] + y[1]; y1mym1 = y[1] - y[-1]; ym2py2 = y[-2] + y[2]; y2mym2 = y[2] - y[-2]; sixthym1py1 = 1.0 / 6.0 * ym1py1; c0 = 1 / 120.0 * ym2py2 + 13 / 60.0 * ym1py1 + 11 / 20.0 * y[0]; c1 = 1 / 24.0 * y2mym2 + 5 / 12.0 * y1mym1; c2 = 1 / 12.0 * ym2py2 + sixthym1py1 - 1 / 2.0 * y[0]; c3 = 1 / 12.0 * y2mym2 - 1 / 6.0 * y1mym1; c4 = 1 / 24.0 * ym2py2 - sixthym1py1 + 1 / 4.0 * y[0]; c5 = 1 / 120.0 * (y[3] - y[-2]) + 1 / 24.0 * (y[-1] - y[2]) + 1 / 12.0 * (y[1] - y[0]); return (SAMPLE) (((((c5 * x + c4) * x + c3) * x + c2) * x + c1) * x + c0); } /* This is actual structture used to hold info between consecutive blocks */ struct EMQFfilters_struct { /* Passband edge 0-1 (Nyquist) */ const double fc; /* Branch 0 filters params */ const SAMPLE* beta0; const SAMPLE* gamma0; /* For holding state variables */ SAMPLE** d0; /* Number of 2nd order allpass filter in branch 0 */ const size_t stages0; const SAMPLE* beta1; const SAMPLE* gamma1; /* For holding state variables */ SAMPLE** d1; /* Number of 2nd order allpass filter in branch 1. */ const size_t stages1; /* Coefficient of the 1st order allpas filter in branch 1. */ const SAMPLE alpha1; }; EMQFfilters emqffilters_init(const double fc) { double alpha, alpha1; size_t ii, stages0, stages1; SAMPLE *beta0, *gamma0, *beta1, *gamma1, **d0, **d1; EMQFfilters rv; /* Check valid fc */ if (fc <= 0 || fc >= 1) { return NULL; } /* EMQFcoefs is a global variable, defined in filtcoefs.h * generated by a matlab script genfiltcoefs.m */ const double* beta = EMQFcoefs; stages0 = (size_t) ceil(EMQFCOEFLEN / 2.0); stages1 = (size_t) floor(EMQFCOEFLEN / 2.0); beta0 = malloc(stages0 * sizeof * beta0); gamma0 = malloc(stages0 * sizeof * gamma0); if (stages1 > 0) { beta1 = malloc(stages1 * sizeof * beta1); gamma1 = malloc(stages1 * sizeof * gamma1); } d0 = malloc(stages0 * sizeof(SAMPLE*)); d1 = malloc((stages1 + 1) * sizeof(SAMPLE*)); alpha = -cos(M_PI * fc); alpha1 = (1.0 - sqrt(1.0 - alpha * alpha)) / alpha; for (ii = 0; ii < stages0; ii++) { beta0[ii] = (SAMPLE) ((beta[2 * ii] + alpha1 * alpha1) / (beta[2 * ii] * alpha1 * alpha1 + 1.0) ); gamma0[ii] = (SAMPLE) (alpha * (1.0 + beta0[ii])); d0[ii] = calloc(2, sizeof(SAMPLE)); } for (ii = 0; ii < stages1; ii++) { beta1[ii] = (SAMPLE) ((beta[2 * ii + 1] + alpha1 * alpha1) / (beta[2 * ii + 1] * alpha1 * alpha1 + 1.0) ); gamma1[ii] = (SAMPLE) (alpha * (1.0 + beta1[ii])); d1[ii] = calloc(2, sizeof(SAMPLE)); } d1[stages1] = calloc(1, sizeof(SAMPLE)); rv = malloc(sizeof * rv); *(double*)&rv->fc = fc; *(SAMPLE*)&rv->alpha1 = alpha1; rv->beta0 = beta0; rv->gamma0 = gamma0; rv->beta1 = beta1; rv->gamma1 = gamma1; rv->d0 = d0; rv->d1 = d1; *(size_t*)&rv->stages0 = stages0; *(size_t*)&rv->stages1 = stages1; return rv; } /* All 2nd order IIR filters are treated as type II transposed canonical struct. * This can work inplace i.e. in==out */ void emqffilters_dofilter(EMQFfilters ef, const SAMPLE* in, const size_t Lin, SAMPLE* out) { size_t ii, jj; SAMPLE startx, x, y = 0; for (ii = 0; ii < Lin; ii++) { /* Branch 0 */ /* Feedig output of one stage to the input of the next stage */ startx = in[ii]; x = startx; for (jj = 0; jj < ef->stages0; jj++) { y = x * ef->beta0[jj] + ef->d0[jj][0]; ef->d0[jj][0] = ef->gamma0[jj] * (x - y) + ef->d0[jj][1]; ef->d0[jj][1] = x - y * ef->beta0[jj]; x = y; } /* Store the partial output */ out[ii] = y; /* And start over with the second branch */ x = startx; /* Branch 1 */ for (jj = 0; jj < ef->stages1; jj++) { y = x * ef->beta1[jj] + ef->d1[jj][0]; ef->d1[jj][0] = ef->gamma1[jj] * (x - y) + ef->d1[jj][1]; ef->d1[jj][1] = x - y * ef->beta1[jj]; x = y; } /* Final all-pass filter in Branch 1 */ y = x * ef->alpha1 + ef->d1[ef->stages1][0]; ef->d1[ef->stages1][0] = x - y * ef->alpha1; /* Add output of the second branch to output */ out[ii] += y; /* Normalize. Would it be faster to do it after for the whole array? */ out[ii] /= 2.0; } } void emqffilters_done(EMQFfilters* ef) { size_t ii; free((void*)(*ef)->beta0); free((void*)(*ef)->gamma0); free((void*)(*ef)->beta1); free((void*)(*ef)->gamma1); for (ii = 0; ii < (*ef)->stages0; ii++) { free((*ef)->d0[ii]); } free((*ef)->d0); for (ii = 0; ii < (*ef)->stages1 + 1; ii++) { free((*ef)->d1[ii]); } free((*ef)->d1); free(*ef); *ef = NULL; } ltfat/thirdparty/Playrec/filtcoefs.h0000664000175000017500000000054712612404251017507 0ustar susnaksusnak/* This file is autogenerated. Do not edit! Generated by running genfiltcoefs(4.800000e-01,80) */ #define EMQFCOEFLEN 8 static const double EMQFcoefs[]={ 5.7517185398529978e-02, 2.0593303150519190e-01, 3.9220443469999550e-01, 5.6933878325357445e-01, 7.1391142834802357e-01, 8.2295835652084259e-01, 9.0427015365586971e-01, 9.6945815394314838e-01, }; ltfat/thirdparty/Playrec/genfiltcoefs.m0000664000175000017500000002765412612404251020216 0ustar susnaksusnakfunction genfiltcoefs(fp,As,varargin) %-*- texinfo -*- %@deftypefn {Function} genfiltcoefs %@verbatim %GENFILTCOEFS Generate half-band IIR filter % Usage: genfiltcoefs(fp,As) % genfiltcoefs(fp,As) % % Input parameters: % fp : Passband edge frequency % As : Stopband attenuation in dB [positive] % % This function generates coefficients of a half-band IIR filter % consisting of two branches of order 2 all-pass filters. The coefficients % are written to filtcoefs.h to be used in resampling routines in playrec. % % Note this function uses code from % % EMF toolbox for Matlab version 2.1, % Copyright (c) 2003 M. Lutovac and Lj. Milic see the halfbandiir % function below. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/thirdparty/Playrec/genfiltcoefs.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<1 fp = 0.48; end if nargin<2 As = 80; end do_plot = ~isempty(varargin(strcmp('plot',varargin))); do_check = ~isempty(varargin(strcmp('check',varargin))); % Design the half-band filter [b,a]=halfbandiir('minorder',fp,As); % Get roots p =roots(a); % Sort according to the abs value beta = sort(abs(p(imag(p)>0)).^2); % Write to a file basepath = which(mfilename); basepath = basepath(1:end-numel(mfilename)-2); [fileID,message] = fopen([basepath,'filtcoefs.h'],'w'); expstring = ... sprintf(['/*\n This file is autogenerated. Do not edit! \n', ... 'Generated by running %s(%d,%d) ', ... '*/\n'],mfilename,fp,As); betaString = sprintf('%.16e,\n ', beta ); fprintf(fileID,expstring); fprintf(fileID,'#define EMQFCOEFLEN %i\n',numel(beta)); fprintf(fileID,'static const double EMQFcoefs[]={\n %s};\n',betaString(1:end-1)); fclose(fileID); if do_plot figure(1); zplane(b,a); figure(2); freqz(b,a); end if do_check % Allpass filters beta1 = beta(1:2:end); beta2 = beta(2:2:end); A0b = [beta1,zeros(numel(beta1),1),ones(numel(beta1),1)]; A0a = fliplr(A0b); A1b = [beta2,zeros(numel(beta2),1),ones(numel(beta2),1)]; A1a = fliplr(A1b); % Reassemble back A0ball = A0b(1,:); A0aall = A0a(1,:); A1ball = A1b(1,:); A1aall = A1a(1,:); for ii = 2:size(A0b,1) A0ball = conv(A0ball,A0b(ii,:)); A0aall = conv(A0aall,A0a(ii,:)); end for ii = 2:size(A1b,1) A1ball = conv(A1ball,A1b(ii,:)); A1aall = conv(A1aall,A1a(ii,:)); end A1ball = [0,A1ball]; A1aall = [A1aall,0]; A0 = freqz(A0ball,A0aall); A1 = freqz(A1ball,A1aall); disp('Error between the original filter and the summed partials'); norm((A0+A1)/2-freqz(b,a)) end % % % As = 80; % fp = 0.1; % alpha = -cos(pi*fp); % alpha1 = (1-sqrt(1-alpha^2))/alpha; % betaemqf = (beta+alpha1^2)./(beta*alpha1^2+1); % % beta1 = beta(1:2:end); % beta2 = beta(2:2:end); % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % Allpass filters % betaemqf1 = betaemqf(1:2:end); % betaemqf2 = betaemqf(2:2:end); % % % A0b = [betaemqf1,alpha*(1+betaemqf1),ones(numel(beta1),1)]; % A0a = fliplr(A0b); % % % A1b = [betaemqf2,alpha*(1+betaemqf2),ones(numel(beta2),1)]; % % % % % A1a = fliplr(A1b); % % % % % % % Reassemble back % A0ball = A0b(1,:); % A0aall = A0a(1,:); % A1ball = A1b(1,:); % A1aall = A1a(1,:); % % % for ii = 2:size(A0b,1) % A0ball = conv(A0ball,A0b(ii,:)); % A0aall = conv(A0aall,A0a(ii,:)); % % end % % % for ii = 2:size(A1b,1) % A1ball = conv(A1ball,A1b(ii,:)); % A1aall = conv(A1aall,A1a(ii,:)); % end % % % A1ball = conv(A1ball,[alpha1,1]); % A1aall = conv(A1aall,[1,alpha1]); % % % % A0 = freqz(A0ball,A0aall,128,'whole'); % A1 = freqz(A1ball,A1aall,128,'whole'); % % fresp=(A0+A1)/2; % f = randn(128,1); % fhat = real(ifft(fft(f).*fresp)); % prd = 0; function [b,a,z,p,k] = halfbandiir(N,fp,varargin) % % HALFBANDIIR Halfband IIR filter design. % [B,A,Z,P,K] = HALFBANDIIR(N,Fp) designs a lowpass N-th order % halfband IIR filter with an equiripple characteristic. % % The filter order, N, must be selected such that N is an odd integer. % Fp determines the passband edge frequency that must satisfy % 0 < Fp < 1/2 where 1/2 corresponds to pi/2 [rad/sample]. % % [B,A,Z,P,K] = HALFBANDIIR('minorder',Fp,Dev) designs the minimum % order IIR filter, with passband edge Fp and ripple Dev. % Dev is a passband ripple that must satisfy 0 < Dev (linear) < 0.29289 % or stopband attenuation that must satisfy Dev (dB) > 3.1 % % The last three left-hand arguments are the zeros and poles returned in % length N column vectors Z and P, and the gain in scalar K. % % [B,A,Z,P,K] = HALFBANDIIR(...'high') returns a highpass halfband filter. % % EXAMPLE: Design a minimum order halfband filter with given max ripple % [b,a,z,p,k]=halfbandiir('minorder',.45,0.0001); % % Authors: Miroslav Lutovac and Ljiljana Milic % lutovac@kondor.etf.bg.ac.yu milic@kondor.imp.bg.ac.yu % http://kondor.etf.bg.ac.yu/~lutovac % http://galeb.etf.bg.ac.yu/~milic % Copyright (c) 2003 Miroslav Lutovac and Ljiljana Milic % $Revision: 2.1 $ $Date: 2003/04/02 12:22:33 $ % This file is part of EMF toolbox for MATLAB. % Refer to the file LICENSE.TXT for full details. % % EMF version 2.1, Copyright (c) 2003 M. Lutovac and Lj. Milic % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; see LICENSE.TXT for details. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place, Suite 330, Boston, % MA 02111-1307 USA, http://www.fsf.org/ error(nargchk(2,4,nargin)); [minOrderFlag,lowpassFlag,msg] = validateParseInput(N,fp,varargin{:}); error(msg); omegap = fp*pi; omegas = (1-fp)*pi; if minOrderFlag, if varargin{1} <1 deltap = varargin{1}; deltas = sqrt(deltap*(2-deltap)); Rp = -20*log10(1-deltap); Rs = -20*log10(deltas); else Rs = varargin{1}; deltas = 10^(-Rs/20); deltap = 1-sqrt(1-deltas^2); Rp = -20*log10(1-deltap); end N = estimateOrder(omegap,omegas,Rp,Rs); end if N < 3, N = 3; end fa = (1-fp)/2; x = 1/(tan(pi*fp/2))^2; if x >= sqrt(2) t = .5*(1-(1-1/x^2)^(1/4))/(1+(1-1/x^2)^(1/4)); q = t+2*t^5+15*t^9+150*t^13; else t = .5*(1-1/sqrt(x))/(1+1/sqrt(x)); qp = t+2*t^5+15*t^9+150*t^13; q = exp(pi^2/log(qp)); end L = (1/4)*sqrt(1/q^N-1); Rp = 10*log10(1+1/L); Rs = 10*log10(1+L); if N == 3 beta = nfp2beta(N,fp/2); p = [0;i*sqrt(beta);-i*sqrt(beta)]; z = [-1 (beta-1 + i*sqrt(3*beta^2 + 2*beta-1))/(2*beta) (beta-1 - i*sqrt(3*beta^2 + 2*beta-1))/(2*beta)]; k = beta/2; b = [beta 1 1 beta]/2; a = [1 0 beta 0]; elseif N == 5 [beta,zeroi,select] = nfp2beta(N,fp/2); k = 1/2; p = 0; z = -1; for ind = 2:2:N ind2 = ind/2; p = [p;i*sqrt(beta(ind2));-i*sqrt(beta(ind2))]; z = [z;(zeroi(ind2)^2-select+i*2*sqrt(select)*zeroi(ind2))/(select+zeroi(ind2)^2)]; z = [z;(zeroi(ind2)^2-select-i*2*sqrt(select)*zeroi(ind2))/(select+zeroi(ind2)^2)]; k = k*(1+beta(ind2))*(1+zeroi(ind2)^2/select)/4; end aOdd = 1; bOdd = 1; for ind = 1:2:length(beta) aOdd = conv(aOdd,[1 0 beta(ind)]); bOdd = conv(bOdd,[beta(ind) 0 1]); end aEven = 1; bEven = 1; for ind = 2:2:length(beta) aEven = conv(aEven,[1 0 beta(ind)]); bEven = conv(bEven,[beta(ind) 0 1]); end a = conv(conv(aOdd,aEven),[1 0]); b = (conv(conv(aOdd,bEven),[0 1]) + conv(conv(bOdd,aEven),[1 0]))/2; else % [z,p,k] = ellip(N,Rp,Rs,omegap/pi) % [b,a] = ellip(N,Rp,Rs,omegap/pi) [beta,zeroi,select] = nfp2beta(N,fp/2); k = 1/2; p = 0; z = -1; for ind = 2:2:N ind2 = ind/2; p = [p;i*sqrt(beta(ind2));-i*sqrt(beta(ind2))]; z = [z;(zeroi(ind2)^2-select+i*2*sqrt(select)*zeroi(ind2))/(select+zeroi(ind2)^2)]; z = [z;(zeroi(ind2)^2-select-i*2*sqrt(select)*zeroi(ind2))/(select+zeroi(ind2)^2)]; k = k*(1+beta(ind2))*(1+zeroi(ind2)^2/select)/4; end aOdd = 1; bOdd = 1; for ind = 1:2:length(beta) aOdd = conv(aOdd,[1 0 beta(ind)]); bOdd = conv(bOdd,[beta(ind) 0 1]); end aEven = 1; bEven = 1; for ind = 2:2:length(beta) aEven = conv(aEven,[1 0 beta(ind)]); bEven = conv(bEven,[beta(ind) 0 1]); end a = conv(conv(aOdd,aEven),[1 0]); b = (conv(conv(aOdd,bEven),[0 1]) + conv(conv(bOdd,aEven),[1 0]))/2; end if ~lowpassFlag, z = -z; b = b.*((-(ones(size(b)))).^(1:length(b))); end %------------------------------------------------------------- function N = estimateOrder(omegap,omegas,Rp,Rs) N = ellipord(omegap/pi,omegas/pi,Rp,Rs); N = adjustOrder(N); %------------------------------------------------------------- function N = adjustOrder(N) if (N+1) ~= 2*fix((N+1)/2), N = N + 1; end %------------------------------------------------------------- function [minOrderFlag,lowpassFlag,msg] = validateParseInput(N,fp,varargin) msg = ''; minOrderFlag = 0; lowpassFlag = 1; if nargin > 2 & ischar(varargin{end}), stringOpts = {'low','high'}; lpindx = strmatch(lower(varargin{end}),stringOpts); if ~isempty(lpindx) & lpindx == 2, lowpassFlag = 0; end end if ischar(N), ordindx = strmatch(lower(N),'minorder'); if ~isempty(ordindx), minOrderFlag = 1; if nargin < 3, msg = 'Passband ripple, Dev, must be specified for minimum order design.'; return end if ~isValidScalar(varargin{1}), msg = 'Passband ripple must be a scalar.'; return elseif varargin{1} <= 0 | ((varargin{1} >= 0.29289)&(varargin{1} <= 3.1)) , msg = ['Dev=' num2str(varargin{1}) ', it must be 03.1']; return end else msg = 'Specified unrecognized order.'; return end elseif ~isValidScalar(N), msg = 'Specified unrecognized order.'; return else if (N+1) ~= 2*fix((N+1)/2), msg = ['N=' num2str(N) ', order must be an odd integer.']; return end if nargin > 2 & ~ischar(varargin{1}), msg = 'Passband ripple, Dev, can be specified for minimum order design, only.'; return end end if length(fp) ~= 1, msg = ['Length of Fp = ' num2str(length(fp)) ', length must be 1.']; return else, if ~isValidScalar(fp), msg = 'Passband edge frequency must be a scalar, 0= 0.5, msg = ['Fp=' num2str(fp) ', passband edge frequency must satisfy 0 1, bol = 0; end %------------------------------------------------------------------------ function [beta,xx,a] = nfp2beta(n,fp) a = 1/tan(pi*fp)^2; for ind = 1:(n-1)/2 x = ellipj( ((2*ind-1)/n + 1)*ellipke(1/a^2), 1/a^2); b(ind) = ((a+x^2) - sqrt((1-x^2)*(a^2-x^2)) )/((a+x^2) + sqrt((1-x^2)*(a^2-x^2))); xx(ind) = x; end beta = sort(b); %------- [EOF] ---------------------------------------------------------- ltfat/thirdparty/Playrec/playrecinit.m0000664000175000017500000000165612612404251020063 0ustar susnaksusnakstatus=2; %-*- texinfo -*- %@deftypefn {Function} playrecinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/thirdparty/Playrec/playrecinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/thirdparty/Playrec/pa_dll_playrec.c0000664000175000017500000052417412612404251020505 0ustar susnaksusnak/* * Playrec * Copyright (c) 2006-2008 Robert Humphrey * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ /* * There are two different sets of functions in this file - the first are * 'helper' functions used to perform operations that are not directly called * by MATLAB, and the second are the functions referred to in _funcLookup and * map to commands in MATLAB. The latter begin 'do' to easily identify them. */ #ifdef HAVE_PORTAUDIO #include "mex.h" #include "portaudio.h" #include "mex_dll_core.h" #include "pa_dll_playrec.h" #include "ltfatresample.h" #include #include /* * States are used to ensure code is only run when it will not cause problems * Multiple states can be set at one time by using single bits for each state * If required more states can be used by adding an additional #define and * an additional element in _stateOpts[] for each state required. * * BASIC_INIT = The exit function has been registered with mexAtExit. * PortAudio has been succesfully initialised * The state to return to on reset. * There should be no method of clearing from this state * If not in this state, only execute code to achieve this state * FULL_INIT = The global streamInfoStruct has been created * The PortAudio stream has been created and is running */ #define BASIC_INIT (1<<0) #define FULL_INIT (1<<1) /* macros to manipulate the _currentState variable * OR together (|) states to complete a combined state test * ie ISSTATE would only return true if all OR'd states are set. */ /* Set all the states OR'd together in setState */ #define SETSTATE(setState) ((_currentState) |= (setState)) /* Clear all the states OR'd together in clearState */ #define CLEARSTATE(clearState) ((_currentState) &= ~(clearState)) /* return true only if all states OR'd together in isState are set. */ #define ISSTATE(isState) (((_currentState) & (isState))==(isState)) /* Variable used to store the current system state */ int _currentState = 0; /* Structure used to store human readable information on each state, used to * give feedback when a state has the wrong value. */ const StateOptsStruct _stateOpts[] = { { BASIC_INIT, "Basic initialisation", "This should have started automatically - something must be wrong.", "This state connot be stopped without clearing the utility from memory." }, { FULL_INIT, "Full initialisation", "Call \"init\" command to run initialisation.", "Call \"reset\" command." } }; /* The number of elements in the above structure */ const int _stateOptsSize = sizeof(_stateOpts) / sizeof(StateOptsStruct); /* Structure used to provide a lookup between all commands accessible from * MATLAB and their associated functions here. All functions have been given * the same name as the MATLAB command, prefixed with 'do'. The structure also * contains help information for the function, descriptions of each input and * output value, and upper and lower limits on the number of acceptable * arguments. This structure is used by mex_dll_core.c, and all fields are * described in mex_dll_core.h. The order of commands in this array is the * order they will be shown when listed in MATLAB. */ const FuncLookupStruct _funcLookup[] = { HELP_FUNC_LOOKUP, /* Add the help function provided in mex_dll_core */ { "about", doAbout, 0, 0, 0, 1, "Displays information about the playrec utility", "Displays information about the playrec utility", { {NULL} }, { { "aboutInfo", "String containing information about this build of " "playrec. If no output argument is specified then the information " "is printed in the command window." } } }, { "overview", doOverview, 0, 0, 0, 1, "Displays an overview on using this playrec utility", "Displays an overview on using this playrec utility", { {NULL} }, { { "overviewInfo", "String containing information about how to use playrec. " "If no output argument is specified then the information is printed " "in the command window." } } }, { "getDevices", doGetDevices, 0, 0, 0, 1, "Returns a list of available audio devices", "Returns information on the available devices within the system, including " "ID, name, host API and number of channels supported.", { {NULL} }, { { "deviceList", "Structure array containing the following fields for " "each device:\n" "\t'deviceID' - ID used to refer to the device,\n" "\t'name' - textual name of the device,\n" "\t'hostAPI' - the host API used to access the device,\n" "\t'defaultLowInputLatency' - device default input latency used " "for interactive performance. This is the value suggested to " "the soundcard when the device is used for input.\n" "\t'defaultLowOutputLatency' - device default output latency used " "for interactive performance. This is the value suggested to " "the soundcard when the device is used for output.\n" "\t'defaultHighInputLatency' - device default input latency for " "robust non-interactive applications (eg. playing sound files),\n" "\t'defaultHighOutputLatency' - device default output latency for " "robust non-interactive applications (eg. playing sound files),\n" "\t'defaultSampleRate' - device default sample rate,\n" "\t'inputChans' - maximum number of input channels supported by the device\n" "\t'outputChans' - maximum number of output channels supported by the device" } } }, { "init", doInit, 3, 8, 0, 0, "Initialises the utility", "Configures the utility for audio input and/or output based on the specified " "configuration. If successful the chosen device(s) will be running in " "the background waiting for the first pages to be received. If unsuccessful " "an error will be generated containing an error number and description.\n\n" "All channel numbers are assumed to start at 1. The maximum number of " "channels support by the device will be used if the maximum channel number " "is not specified. Specifying a maximum number of channels verifies that the " "device will support them and slightly reduces the utility's processor usage." "\n\nIf an optional value is specified, all previous optional values must also " "be specified.", { {"sampleRate", "the sample rate at which both devices will operate"}, { "playDevice", "the ID of the device to be used for sample output (as " "returned by 'getDevices'), or -1 for no device (ie output not required)" }, { "recDevice", "the ID of the device to be used for sample input (as " "returned by 'getDevices'), or -1 for no device (ie input not required)" }, { "playMaxChannel", "a number greater than or equal to the maximum channel " "that will be used for output. This must be less than or equal to the " "maximum number of output channels that the device supports. The value " "is ignored if playDevice is -1.", true }, { "recMaxChannel", "a number greater than or equal to the maximum channel " "that will be used for input. This must be less than or equal to the " "maximum number of input channels that the device supports. The value " "is ignored if recDevice is -1.", true }, { "framesPerBuffer", "the number of samples to be processed in each callback " "within the utility (ie the length of each block of samples transferred " "between the utility and the soundcard). The lower the value specified " "the shorter the latency but also the greater the likelihood of glitches " "within the audio. This has no influence on the size of pages that can " "be used. The default is 0 which lets the utility use an optimal, and " "potentially different, value in each callback. A value other than the " "default may introduce a second layer of buffering, increasing latency, " "and so should only be used in exceptional circumstances.", true }, { "playSuggestedLatency", "the play latency, in seconds, the device should try " "to use where possible. Defaults to the default low output latency for the " "device.", true }, { "recSuggestedLatency", "the record latency, in seconds, the device should try " "to use where possible. Defaults to the default low input latency for the " "device.", true } }, { {NULL} } }, { "reset", doReset, 0, 0, 0, 0, "Resets the system to allow re-initialisation", "Resets the system to its state prior to initialisation through the 'init' " "command. This includes deleting all pages and stopping the connection " "to the previously selected audio device(s). Generates an error if the " "utility is not already initialised - use 'isInitialised' to determine " "if the utility is initialised.\n\n" "Use with care as there is no way to recover previously recorded data " "once this has been called.", { {NULL} }, { {NULL} } }, { "isInitialised", doIsInitialised, 0, 0, 0, 1, "Indicates if the system is initialised", "Indicates if the system is currently initialised, and hence if 'reset' or 'init' " "can be called without generating an error.", { {NULL} }, { {"currentState", "1 if the utility is currently initialised, otherwise 0."} } }, { "playrec", doPlayrec, 4, 4, 0, 1, "Adds a new page with simultaneous input and output", "Adds a new page containing both sample input (recording) and output (playing). " "Generates an error if the required memory cannot be allocated or if any " "other problems are encountered.\n\n" "The length of the page is equal to whichever is longer: the number of " "samples to play or the number of samples to record.", { { "playBuffer", "a MxN matrix containing the samples to be output. M is " "the number of samples and N is the number of channels of data." }, { "playChanList", "a 1xN vector containing the channels on which the " "playBuffer samples should be output. N is the number of channels " "of data, and should be the same as playBuffer (a warning is generated " "if they are different, but the utility will still try and create the " "page). Can only contain each channel number once, but the channel " "order is not important and does not need to include all the channels " "the device supports. All output channels no specified will automatically " "output zeros. The maximum channel number cannot be greater than that " "specified during initialisation." }, { "recDuration", "the number of samples that should be recorded in this " "page, or -1 to record the same number of samples as in playBuffer." }, { "recChanList", "a row vector containing the channel numbers of all channels " "to be recorded. Can only contain each channel number once, but the " "channel order is not important and does not need to include all the " "channels the device supports. This order of channels is used when " "recorded samples are returned by 'getRec'. The maximum channel number " "cannot be greater than that specified during initialisation." } }, { { "pageNumber", "a unique integer number identifying the page that has been " "added - use this with all other functions that query specific pages, " "such as 'isFinished'." } } }, { "play", doPlay, 2, 2, 0, 1, "Adds a new output only page", "Adds a new page containing only sample output (playing). Generates an error if " "the required memory cannot be allocated or if any other problems are " "encountered.\n\nThe page is the same length as that of playBuffer.", { { "playBuffer", "a MxN matrix containing the samples to be output. M is " "the number of samples and N is the number of channels of data." }, { "playChanList", "a 1xN vector containing the channels on which the " "playBuffer samples should be output. N is the number of channels " "of data, and should be the same as playBuffer (a warning is generated " "if they are different, but the utility will still try and create the " "page). Can only contain each channel number once, but the channel " "order is not important and does not need to include all the channels " "the device supports. All output channels no specified will automatically " "output zeros. The maximum channel number cannot be greater than that " "specified during initialisation." }, }, { { "pageNumber", "a unique integer number identifying the page that has been " "added - use this with all other functions that query specific pages, " "such as 'isFinished'." } } }, { "rec", doRec, 2, 2, 0, 1, "Adds a new input only page", "Adds a new page containing only sample input (recording). Generates an error if " "the required memory cannot be allocated or if any other problems are " "encountered.\n\nThe page is recDuration samples long.", { { "recDuration", "the number of samples that should be recorded on each channel " "specified in recChanList." }, { "recChanList", "a row vector containing the channel numbers of all channels " "to be recorded. Can only contain each channel number once, but the " "channel order is not important and does not need to include all the " "channels the device supports. This order of channels is used when " "recorded samples are returned by 'getRec'. The maximum channel number " "cannot be greater than that specified during initialisation." } }, { { "pageNumber", "a unique integer number identifying the page that has been " "added - use this with all other functions that query specific pages, " "such as 'isFinished'." } } }, { "pause", doPause, 0, 1, 0, 1, "Sets or queries the current pause state", "Queries or updates the current pause state of the utility. If no argument is " "supplied then just returns the current pause status, otherwise returns the " "status after applying the change to newPause.", { { "newPause", "the new state of the utility: 1 to pause or 0 to resume the " "stream. This can be either a scalar or logical value. If newState is " "the same as the current state of the utility, no change occurs.", true } }, { { "currentState", "the state of the utility (including the update to newPause " "if newPause is specified): 1 if the utility is paused or otherwise 0." } } }, { "block", doBlock, 0, 1, 0, 1, "Waits for the specified page to finish before returning", "Waits for the specified page to finish or, if no pageNumber is supplied, waits " "until all pages have finish. Note that the command returns immediately if " "the utility is paused to avoid the system locking up.\n\n" "This uses very little processing power whilst waiting for the page to finish, " "although as a result will not necessarily return as soon as the page " "specified finishes. For a faster response to pages finishing use the " "'isFinished' command in a tight while loop within MATLAB, such as\n\n" "\twhile(playrec('isFinished', pageNumber) == 0);end;\n\n" "This will run the processor at full power and will be very wasteful, " "but it does reduce the delay between a page finishing and the MATLAB " "code continuing, which is essential when trying to achieve very low latency.", { {"pageNumber", "the number of the page to wait until finished", true} }, { { "completionState", "1 if either pageNumber is a valid page and has finished " "being processed or pageNumber was not specified and all pages have " "finished being processed. Note that page validity refers to when the " "function was called and so now the page has finished it may no longer " "be a valid page due to automatic page condensing.\n\n" "-1 if the specified page is invalid or no longer exists. This includes " "pages that have automatically been condensed, and hence have finished.\n\n" "0 if the stream is currently paused and neither return values of 1 or -1 apply." } } }, { "isFinished", doIsFinished, 0, 1, 0, 1, "Indicates if the specified page has finished", "Indicates if the specified page is finished or, if no pageNumber is supplied, " "indicates if all pages have finished.", { {"pageNumber", "the number of the page being tested", true} }, { { "completionState", "1 if either pageNumber is a valid page that has finished " "being processed or pageNumber was not specified and all pages have " "finished being processed.\n\n" "-1 if the specified page is invalid or no longer exists. This includes " "pages that have automatically been condensed, and hence have finished.\n\n" "0 if either pageNumber is a valid page that has not finished being processed " "or pageNumber was not specified and not all pages have finished being processed." } } }, { "getRec", doGetRec, 1, 1, 0, 2, "Returns the samples recorded in a page", "Returns all the recorded data available for the page identified by pageNumber. " "If the page specified does not exist, was not specified to record any data, " "or has not yet started to record any data then empty array(s) are returned. " "If the page is currently being processed, only the recorded data currently " "available is returned.", { {"pageNumber", "used to identifying the page containing the required recorded data"} }, { { "recBuffer", "a MxN matrix where M is the number of samples that have been " "recorded and N is the number of channels of data" }, { "recChanList", "a 1xN vector containing the channel numbers associated with " "each channel in recBuffer. These channels are in the same order as that " "specified when the page was added." } } }, { "getPlayrec", doGetPlayrec, 1, 2, 0, 3, "Returns the samples played and recorded in a page", "Returns all the recorded data available for the page identified by pageNumber. " "If the page specified does not exist, was not specified to record any data, " "or has not yet started to record any data then empty array(s) are returned. " "If the page is currently being processed, only the recorded data currently " "available is returned.", { {"pageNumber", "used to identifying the page containing the required recorded data"} }, { { "playrecBuffer", "a Mx(N+K) matrix where M is the number of samples that have been " "recorded, N is the number of channels of recorded data, K is the number of channels " "of played data." }, { "recChanList", "a 1xN vector containing the channel numbers associated with " "each channel in recBuffer. These channels are in the same order as that " "specified when the page was added." } } }, { "delPage", doDelPage, 0, 1, 0, 1, "Deletes the specified page or all pages", "Deletes either the specified page or, if no pageNumber is supplied, deletes all " "pages. Pages can be in any state when they are deleted - the do not have " "to be finished and they can even be deleted part way through being processed " "without any problems (in this case the utility will automatically continue " "with the next page in the page list).", { {"pageNumber", "the number of the page to be deleted.", true} }, { { "completionState", "0 if nothing is deleted (either there are no pages in " "the page list or, if pageNumber was specified, no page with the " "specified number exists), otherwise 1 is returned." } } }, { "getCurrentPosition", doGetCurrentPosition, 0, 0, 0, 2, "Returns the currently active page and sample number", "Returns the sample and page number for the last sample transferred to the " "soundcard. Due to sample buffering this will always be slightly further " "through a page than the actual sample being output by the soundcard at that " "point in time. For pages that record input, the sample number shows how " "many samples have been recorded by the page, up to the recording length limit " "of the page.", { {NULL} }, { { "currentPage", "the current page number, or -1 if either the utility is not " "initialised or no page is currently being processed (there are no pages " "in the list or all pages are finished)." }, { "currentSample", "the current sample number within currentPage, or -1 if " "currentPage is also -1. This is only accurate to maxFramesPerBuffer samples, " "as returned by 'getFramesPerBuffer'." } } }, { "getLastFinishedPage", doGetLastFinishedPage, 0, 0, 0, 1, "Returns the page number of the last completed page", "Returns the page number of the last finished page still resident in memory. Due " "to automatic condensing/removal of pages that are no longer required, such " "as finished pages with only output data, this may not be the most recent page " "to have finished. Put another way, this returns the page number of the last " "finished page in the pageList returned by 'getPageList'.", { {NULL} }, { {"lastPage", "pageNumber of the most recently finished page still resident in memory."} } }, { "getPageList", doGetPageList, 0, 0, 0, 1, "Returns an ordered list of all page numbers", "Returns a list of all the pages that are resident in memory. The list is ordered " "chronologically from the earliest to latest addition.\n\n" "Due to automatic condensing/removal of pages that are no longer required, such " "as finished pages with only output data, this will not be a complete list of " "all pages that have ever been used with the utility.", { {NULL} }, { { "pageList", "a 1xN vector containing the chronological list of pages, where N " "is the number of pages resident in memory." } } }, { "getFramesPerBuffer", doGetFramesPerBuffer, 0, 0, 0, 3, "Returns internal number of frames per buffer", "Returns the number of frames (samples) that are processed by the callback " "internally within the utility (ie the length of each block of samples " "sent by the utility to the soundcard). This is either the value specified " "when using 'init', or the default value if the optional argument was not " "specified. A value of 0 means the utility is using an optimal, but potentially " "varying, value.", { {NULL} }, { { "suggestedFramesPerBuffer", "the number of frames returned by the utility internally " "during each callback as specified during initialisation, or -1 if the " "utility is not initialised." }, { "minFramesPerBuffer", "the minimum number of frames actually processed by the " "utility internally during a callback, or -1 if the utility is not initialised." }, { "maxFramesPerBuffer", "the maximum number of frames actually proccessed by the " "utility internally during a callback, or -1 if the utility is not initialised." } } }, { "getSampleRate", doGetSampleRate, 0, 0, 0, 2, "Returns the current sample rate", "Returns the sample rate that was specified when using 'init'.", { {NULL} }, { { "suggestedSampleRate", "the sample rate used during initialisation or -1 if the utility " "is not initialised." }, { "sampleRate", "the current sample rate (obtained from the hardware if possible) " "or -1 if the utility is not initialised." } } }, { "getStreamStartTime", doGetStreamStartTime, 0, 0, 0, 1, "Returns the time at which the stream was started", "Returns the unix time when the stream was started (number of seconds since the " "standard epoch of 01/01/1970).\n\n" "This is included so that when using the utility to run experiments it is " "possible to determine which tests are conducted as part of the same stream, " "and so identify if restarting the stream (and hence the soundcard in some " "scenarios) may have caused variations in results.", { {NULL} }, { { "streamStartTime", "time at which the stream was started (in seconds since " "the Epoch), or -1 if the utility is not initialised." } } }, { "getPlayDevice", doGetPlayDevice, 0, 0, 0, 1, "Returns the current output (play) device", "Returns the deviceID (as returned by 'getDevices') for the currently selected " "output device.", { {NULL} }, { { "playDevice", "the deviceID for the output (play) device or -1 if no device " "was specified during initialisation or the utility is not initialised." } } }, { "getPlayMaxChannel", doGetPlayMaxChannel, 0, 0, 0, 1, "Returns the current maximum output (play) channel", "Returns the number of the maximum output (play) channel that can currently be " "used. This might be less than the number of channels that the device can " "support if a lower limit was specified during initialisation.", { {NULL} }, { { "playMaxChannel", "the maximum output (play) channel number that can " "currently be used, or -1 if either no play device was specified during " "initialisation or the utility is not initialised." } } }, { "getPlayLatency", doGetPlayLatency, 0, 0, 0, 2, "Returns the current output (play) device latency", "Returns the output latency for the currently selected output device as well as " "the suggested output latency used during initialisation", { {NULL} }, { { "playSuggestedLatency", "the suggested latency for the output (play) device " "used during initialisation, or -1 if no device was specified during " "initialisation or the utility is not initialised." }, { "playLatency", "the actual latency for the output (play) device or -1 if no device " "was specified during initialisation or the utility is not initialised." } } }, { "getRecDevice", doGetRecDevice, 0, 0, 0, 1, "Returns the current input (record) device", "Returns the deviceID (as returned by 'getDevices') for the currently selected " "input device.", { {NULL} }, { { "recDevice", "the deviceID for the input (record) device or -1 if no device " "was specified during initialisation or the utility is not initialised." } } }, { "getRecMaxChannel", doGetRecMaxChannel, 0, 0, 0, 1, "Returns the current maximum input (record) channel", "Returns the number of the maximum input (record) channel that can currently be " "used. This might be less than the number of channels that the device can " "support if a lower limit was specified during initialisation.", { {NULL} }, { { "recMaxChannel", "the maximum input (record) channel number that can " "currently be used, or -1 if either no record device was specified during " "initialisation or the utility is not initialised." } } }, { "getRecLatency", doGetRecLatency, 0, 0, 0, 2, "Returns the current input (record) device latency", "Returns the input latency for the currently selected input device as well as " "the suggested input latency used during initialisation", { {NULL} }, { { "recSuggestedLatency", "the suggested latency for the input (record) device " "used during initialisation, or -1 if no device was specified during " "initialisation or the utility is not initialised." }, { "recLatency", "the actual latency for the input (record) device or -1 if no device " "was specified during initialisation or the utility is not initialised." } } }, { "resetSkippedSampleCount", doResetSkippedSampleCount, 0, 0, 0, 0, "Resets the skipped samples counter", "Resets the counter containing the number of samples that have been 'missed' due to " "no new pages existing in the page list. See the help on 'getSkippedSampleCount' " "for more information.", { {NULL} }, { {NULL} } }, { "getSkippedSampleCount", doGetSkippedSampleCount, 0, 0, 0, 1, "Returns the number of skipped samples", "Returns the counter containing the number of samples that have been 'missed' due " "to no new pages existing in the page list when the soundcard requires samples " "to be transferred. The term 'missed' is specifically referring to the case " "where multiple consecutive pages are used to record a continuous audio stream " "(and so input samples are missed), but is the same also for output samples " "because the input and output samples within a page are always processed " "simultaneously.\n\n" "This value is incremented by one for every frame (ie one sample on every " "input/output channel) of data communicated between the utility and soundcard " "that occurred whilst there were no new pages in the page list. Using this it " "is possible to determine, from within MATLAB, if any glitches in the audio have " "occurred through not adding a new page to the page list before all other pages " "have finished, such as in the case where the code within MATLAB is trying to " "play/record a continuous stream.\n\n" "The counter can be reset using 'resetSkippedSampleCount' so to check for any " "breaks in a continuous stream of pages: add the first page of the stream; reset " "the counter; continue to add pages as required; if getSkippedSampleCount ever " "returns a value greater than zero then there has been a break in the stream.", { {NULL} }, { { "skippedSampleCount", "the number of frames (samples per channel) transferred " "with the soundcard that have occurred when there are no unfinished pages in " "the pageList, or -1 if the utility is not initialised" } } } }; /* The number of elements in the above structure array */ const int _funcLookupSize = sizeof(_funcLookup) / sizeof(FuncLookupStruct); /* Pointer to the only StreamInfoStruct */ StreamInfoStruct *_pstreamInfo; /* The last PortAudio error */ PaError lastPaError; /* Resampling plans */ static int playResChanCount = 0; static resample_plan* play_resplan = NULL; static int recResChanCount = 0; static resample_plan* rec_resplan = NULL; static resample_plan dummy_recplan = NULL; void clearResPlans() { int ii; if (dummy_recplan) resample_done(&dummy_recplan); if (rec_resplan) { if (recResChanCount > 0) { for (ii = 0; ii < recResChanCount; ii++) resample_done(&rec_resplan[ii]); recResChanCount = 0; } free(rec_resplan); rec_resplan = NULL; } if (play_resplan) { if (playResChanCount > 0) { for (ii = 0; ii < playResChanCount; ii++) resample_done(&play_resplan[ii]); playResChanCount = 0; } free(play_resplan); play_resplan = NULL; } } /* * FUNCTION: convDouble(double *oldBuf, int buflen) * * Inputs: *oldBuf pointer to an array of type double * buflen length of oldBuf * * Returns: pointer to an array of type SAMPLE containing a copy of the * data in oldBuf, or NULL if memory for the new array could not * be allocated. * * Description: Makes a complete copy of oldBuf, converting all values to type * SAMPLE from type double. The returned array must be freed * using mxFree once it is no longer required. * * TODO: change to use memcpy if SAMPLE is of type double */ SAMPLE *convDouble(double *oldBuf, int buflen) { SAMPLE *newBuf = mxCalloc(buflen, sizeof(SAMPLE)); SAMPLE *pnew = newBuf; double *pold = oldBuf; if (newBuf) while (pnew < &newBuf[buflen]) *pnew++ = (SAMPLE) * pold++; return newBuf; } /* * FUNCTION: convFloat(float *oldBuf, int buflen) * * Inputs: *oldBuf pointer to an array of type float * buflen length of oldBuf * * Returns: pointer to an array of type SAMPLE containing a copy of the * data in oldBuf, or NULL if memory for the new array could not * be allocated. * * Description: Makes a complete copy of oldBuf, converting all values to type * SAMPLE from type float. The returned array must be freed * using mxFree once it is no longer required. * * TODO: change to use memcpy if SAMPLE is of type float */ SAMPLE *convFloat(float *oldBuf, int buflen) { SAMPLE *newBuf = mxCalloc(buflen, sizeof(SAMPLE)); SAMPLE *pnew = newBuf; float *pold = oldBuf; if (newBuf) while (pnew < &newBuf[buflen]) *pnew++ = (SAMPLE) * pold++; return newBuf; } /* * FUNCTION: validateState(int wantedStates, int rejectStates) * * Inputs: wantedStates all states that must be set, OR'd (|) together * rejectStates all states that must NOT be set, OR'd (|) together * * Returns: void * * Description: Tests _currentState to ensure that all wantedStates are set and * all rejectStates are not set. If any wanted state is unset or * any unwanted state is set, an error is generated including * instructions on how to obtain the required state (based on the * strings in _stateOpts). * * TODO: */ void validateState(int wantedStates, int rejectStates) { int i; char *buffer; for (i = 0; i < _stateOptsSize; i++) { if (((wantedStates & _stateOpts[i].num) != 0) && !ISSTATE(_stateOpts[i].num)) { /* This is a wanted state which doesn't exist in _currentState */ buffer = mxCalloc( strlen( _stateOpts[i].name) + + strlen( _stateOpts[i].startString ) + 60, sizeof( char )); if ( buffer ) { sprintf( buffer, "This command can only be called if in state \"%s\".\n%s", _stateOpts[i].name, _stateOpts[i].startString); mexErrMsgTxt( buffer ); /* No need to free memory here as execution will always stop at the error */ } else { mexErrMsgTxt( "Error allocating memory in validateState" ); } } if (((rejectStates & _stateOpts[i].num) != 0) && ISSTATE(_stateOpts[i].num)) { /* This is a reject state which does exist in _currentState */ buffer = mxCalloc( strlen( _stateOpts[i].name) + + strlen( _stateOpts[i].stopString ) + 60, sizeof( char )); if ( buffer ) { sprintf( buffer, "This command cannot be called in state \"%s\".\n%s", _stateOpts[i].name, _stateOpts[i].stopString); mexErrMsgTxt( buffer ); /* No need to free memory here as execution will always stop at the error */ } else { mexErrMsgTxt( "Error allocating memory in validateState" ); } } } } /* * FUNCTION: freeChanBufStructs(ChanBufStruct **ppcbs) * * Inputs: **ppcbs pointer to pointer to first ChanBufStruct to be freed * * Returns: void * * Description: Progresses along the ChanBufStruct linked list starting at * the supplied location, freeing each ChanBufStruct and its * contained pbuffer (if it exists). The pointer pointing * to the start of the linked list (*ppcbs) is set to NULL prior * to any memory being freed. * * TODO: */ void freeChanBufStructs(ChanBufStruct **ppcbs) { ChanBufStruct *pcurrentStruct, *pnextStruct; if (ppcbs) { pcurrentStruct = *ppcbs; *ppcbs = NULL; /* Clear pointer to first structure before freeing it! */ while (pcurrentStruct) { if (pcurrentStruct->pbuffer) mxFree(pcurrentStruct->pbuffer); pnextStruct = pcurrentStruct->pnextChanBuf; mxFree(pcurrentStruct); pcurrentStruct = pnextStruct; } } } /* * FUNCTION: freeStreamPageStruct(StreamPageStruct **ppsps) * * Inputs: **ppsps pointer to pointer to StreamPageStruct to be freed * * Returns: void * * Description: Removes the StreamPageStruct, pointed to by the supplied * pointer, from the linked list. The order of the linked list * is changed by altering the destination of the supplied pointer * to skip the StreamPageStruct being freed. To ensure no * problems are encountered with the callback accessing the freed * structure, after the change to the link list order is made the * function waits for the callback not to be active before freeing * the memory. Although by the time the structure is freed the * callback may be active again, it must have been through a 'not * active' state after the change to the linked list, and * therefore can not have any pointers left referring to the * structure being freed. * * TODO: Add a timeout on the loop waiting to not be in the callback, or * change how this operates so there is a way to determine if the * callback has ended and restarted (which is sufficient to avoid * any memory sharing problems). * * Determine the timing advantages of using a loop without 'pause' * when waiting for a time not in the callback. This will be more * processor intensive, but may well enable pages to be deleted * faster because the point at which the callback ends will be * detected sooner. */ void freeStreamPageStruct(StreamPageStruct **ppsps) { StreamPageStruct *pcurrentStruct; if (ppsps && *ppsps) { /* Bypass the structure to be freed so it is not in the linked list */ pcurrentStruct = *ppsps; *ppsps = pcurrentStruct->pnextStreamPage; /* Having completed the pointer switch, ensure not in callback before continuing */ while (_pstreamInfo->inCallback) Pa_Sleep(1); /* Although the callback may have resumed again by now, * there is no way it can have a pointer to this struct * because since the pointer switch there has been an * occasion when the callback was not active. */ freeChanBufStructs(&pcurrentStruct->pfirstPlayChan); freeChanBufStructs(&pcurrentStruct->pfirstRecChan); if (pcurrentStruct->pplayChansInUse) mxFree(pcurrentStruct->pplayChansInUse); mxFree(pcurrentStruct); } } /* * FUNCTION: freeStreamInfoStruct(StreamInfoStruct **psis) * * Inputs: **ppsis pointer to pointer to StreamInfoStruct to be freed * * Returns: void * * Description: Frees the StreamInfoStruct pointed to indirectly by the * supplied pointer. If the stream is active, it is stopped * by setting stopStream within the structure and then polling * the stream until it has stopped, which occurs after the next * time the callback is executed. This method is used instead :* of calling Pa_StopStream because this was found to not always * work correctly (the callback would sometimes be called after * Pa_StreamActive reports the stream to not be active, and so * would try to use the structure after it had been freed). * After stopping the stream, it is closed and then all pages * are freed before finally the StreamInfoStruct is freed and * the pointer to this structure (*ppsis) is set to NULL. * * TODO: */ void freeStreamInfoStruct(StreamInfoStruct **ppsis) { unsigned int stopTime = 0; /* elapsed time waited in msec */ if (ppsis && *ppsis) { /* Stop and close the stream as necessary */ if ((*ppsis)->pstream) { /* Try to stop stream nicely so we are certain it has stopped * before freeing memory. However, if this takes longer than 10s * change to do so using Pa_StopStream. This may generate problems * with the PortAudio callback trying to access memory that has been * freed, but this is the best option to avoid the function hanging * forever. */ if (Pa_IsStreamActive((*ppsis)->pstream) == 1) { #ifdef DEBUG mexPrintf("...Stopping PortAudio Stream..."); #endif while ((Pa_IsStreamActive((*ppsis)->pstream) == 1) && (stopTime < 10000)) { (*ppsis)->stopStream = true; Pa_Sleep(2); stopTime += 2; } if (stopTime >= 10000) { #ifdef DEBUG mexPrintf("Not stopped after %dms - forcing stop!\n", stopTime); #endif checkPAErr(Pa_StopStream((*ppsis)->pstream)); Pa_Sleep(2000); /* Wait for this to ideally have an effect */ } else { #ifdef DEBUG mexPrintf("Stopped after %dms\n", stopTime); #endif } } #ifdef DEBUG mexPrintf("...Closing PortAudio Stream.\n"); #endif checkPAErr(Pa_CloseStream((*ppsis)->pstream)); (*ppsis)->pstream = NULL; abortIfPAErr("freeStreamInfoStruct failed to close stream"); } /* Remove each page structure one at a time. freeStreamPageStruct * automatically makes (*ppsis)->pfirstStreamPage point at the * next page so this doesn't need to do so */ while ((*ppsis)->pfirstStreamPage) freeStreamPageStruct(&(*ppsis)->pfirstStreamPage); /* Free the structure and clear the pointer */ mxFree(*ppsis); *ppsis = NULL; CLEARSTATE(FULL_INIT); } } /* * FUNCTION: newStreamInfoStruct(bool makeMemoryPersistent) * * Inputs: makeMemoryPersistent true to make all allocated memory persistent * * Returns: StreamInfoStruct * pointer to the new structure, or NULL * if the memory could not be allocated * * Description: Creates a new StreamInfoStruct and sets all contained values * to their default values. * * TODO: */ StreamInfoStruct *newStreamInfoStruct(bool makeMemoryPersistent) { StreamInfoStruct *psis = mxCalloc(1, sizeof(StreamInfoStruct)); if (!psis) { mexWarnMsgTxt("Unable to allocate memory for streamInfoStruct."); return NULL; } if (makeMemoryPersistent) mexMakeMemoryPersistent(psis); psis->pfirstStreamPage = NULL; psis->pstream = NULL; psis->streamStartTime = -1; psis->suggestedFramesPerBuffer = paFramesPerBufferUnspecified; psis->minFramesPerBuffer = paFramesPerBufferUnspecified; psis->maxFramesPerBuffer = paFramesPerBufferUnspecified; psis->recSuggestedLatency = 0; psis->playSuggestedLatency = 0; psis->suggestedSampleRate = 44100; psis->streamFlags = paNoFlag; psis->isPaused = false; psis->stopStream = false; psis->inCallback = false; psis->skippedSampleCount = 0; psis->resetSkippedSampleCount = false; psis->playChanCount = 0; psis->playDeviceID = paNoDevice; psis->recChanCount = 0; psis->recDeviceID = paNoDevice; return psis; } /* * FUNCTION: newStreamPageStruct(unsigned int portAudioPlayChanCount, * bool makeMemoryPersistent) * * Inputs: portAudioPlayChanCount The number of play channels that the * PortAudio stream will be configured * to use (should be same as the * playChanCount in the StreamInfoStruct * to which the page will be added) * makeMemoryPersistent true to make all allocated memory persistent * * Returns: StreamPageStruct * pointer to the new structure, or NULL * if the memory could not be allocated * * Description: Creates a new StreamPageStruct and sets all contained values * to their default values, including allocating memory for * the pplayChansInUse array (and setting all entires to false) * and giving the page a unique page number. * * TODO: */ StreamPageStruct *newStreamPageStruct(unsigned int portAudioPlayChanCount, bool makeMemoryPersistent) { static unsigned int nextPageNum = 0; /* Unique page number genearator */ unsigned int i; StreamPageStruct *pnewPage = mxCalloc(1, sizeof(StreamPageStruct)); if (!pnewPage) { mexWarnMsgTxt("Unable to allocate memory for streamPageStruct."); return NULL; } if (makeMemoryPersistent) mexMakeMemoryPersistent(pnewPage); pnewPage->pageFinished = false; pnewPage->pageUsed = false; pnewPage->pagePos = 0; pnewPage->pageLength = 0; pnewPage->pageLengthRec = 0; pnewPage->pageNum = nextPageNum++; pnewPage->playChanCount = portAudioPlayChanCount; pnewPage->pplayChansInUse = mxCalloc(pnewPage->playChanCount, sizeof(bool)); if (!pnewPage->pplayChansInUse && (pnewPage->playChanCount > 0)) { mexWarnMsgTxt("Unable to allocate memory for chansInUse buffer."); mxFree(pnewPage); return NULL; } if (makeMemoryPersistent) mexMakeMemoryPersistent(pnewPage->pplayChansInUse); for (i = 0; i < pnewPage->playChanCount; i++) pnewPage->pplayChansInUse[i] = false; pnewPage->pfirstPlayChan = NULL; pnewPage->pfirstRecChan = NULL; pnewPage->pnextStreamPage = NULL; return pnewPage; } /* * FUNCTION: addStreamPageStruct(StreamInfoStruct *psis, * StreamPageStruct *psps) * * Inputs: *psis StreamInfoStruct to which the page should be added * *psps StreamPageStruct to be added to the linked list * * Returns: StreamPageStruct * pointer to the stream page if * successful, or NULL if unsuccesful * * Description: adds the supplied StreamPageStruct to the end of the page * link list in StreamInfoStruct. Verifies that the * playChanCount in both the page and stream are the same before * the page is added. * * TODO: */ StreamPageStruct *addStreamPageStruct(StreamInfoStruct *psis, StreamPageStruct *psps) { StreamPageStruct **ppcurrentPage; if (!psis || !psps) { return NULL; } if (psis->playChanCount != psps->playChanCount) { mexWarnMsgTxt("playChanCounts in stream page is not equal to that of the stream"); return NULL; } /* Both pointers not NULL */ ppcurrentPage = &psis->pfirstStreamPage; /* Get a pointer to the stream page pointer which points to NULL * (ie a pointer to the pointer at the end of the linked list) */ while (*ppcurrentPage) ppcurrentPage = &(*ppcurrentPage)->pnextStreamPage; /* Add the stream page */ *ppcurrentPage = psps; return psps; } /* * FUNCTION: playrecCallback(const void *inputBuffer, * void *outputBuffer, * unsigned long frameCount, * const PaStreamCallbackTimeInfo *timeInfo, * PaStreamCallbackFlags statusFlags, * void *userData ) * * Inputs: inputBuffer array of interleaved input samples * outputBuffer array of interleaved output samples * frameCount number of sample frames to be processed * timeInfo struct with time in seconds * statusFlags flags indicating whether input and/or output * buffers have been inserted or will be dropped * to overcome underflow or overflow conditions * userData pointer to the StreamInfoStruct for this * stream, as passed to Pa_OpenStream() * * Returns: paComplete or paAbort to stop the stream if either userData is NULL * or stopStream has been set, or paContinue (0) for the stream to * continue running * * Description: Implementation of PortAudioCallback called by PortAudio to * process recorded data and supply more output samples. See * portaudio.h for more information on the supplied parameters. * * Iterates through the page linked list to find the first * unfinished page. If no unfinished pages exist, all input * samples are ignored and all output samples are set to zero. * Otherwise, the output samples are set according to the data * contained in the page, or set to zero if either the channel is * not in use, or there are no more samples remaining for the * channel. Recorded data is stored as required by the page. * The page linked list is descended until all samples within both * buffers have been used as required, even if the data is spread * throughout multiple consecutive pages. * * NOTE: None of the PortAudio functions may be called from * within this callback function except for Pa_GetCPULoad(). * * TODO: */ static int playrecCallback(const void *inputBuffer, void *outputBuffer, unsigned long frameCount, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData ) { /* Cast to stream info structure */ StreamInfoStruct *psis = (StreamInfoStruct*)userData; /* The current page within which we are working */ StreamPageStruct *pcurrentsps = NULL; unsigned int samplesProcessed = 0; unsigned int samplesFromPage = 0; SAMPLE *pout = (SAMPLE *)outputBuffer; SAMPLE *pin = (SAMPLE *)inputBuffer; SAMPLE *ps; /* A generic SAMPLE pointer used for pointer * arithmetic in multiple occasions */ bool isPaused; /* Used to get value of psis->isPaused so this is only tested * once at the start of the callback, avoiding problems with * it changing during the callback! */ unsigned int chan; /* Channel number being processed */ unsigned int tmpBufPos; /* used as a buffer location index, because * there is no longer one per buffer */ ChanBufStruct *pcbs; /* Check valid pointer has been supplied, otherwise stop the stream */ if (!psis) { return paAbort; } /* Signal we're in callback - this does not have to be the first * statement within the callback provided it is set prior to any * manipulation of the stream pages. */ psis->inCallback = true; /* Find the first unfinished page */ pcurrentsps = psis->pfirstStreamPage; while (pcurrentsps && pcurrentsps->pageFinished) pcurrentsps = pcurrentsps->pnextStreamPage; /* Only process samples from a page if not paused. * Copy pause to avoid problems with it changing during the callback! */ isPaused = psis->isPaused; if (!isPaused) { /* Loop through as many pages as required to process frameCount samples * break is used to exit the loop once enough samples have been processed */ while (pcurrentsps) { /* None of the pages looked at by this code should have pageFinished * set, although check it just to be on the safe side! */ if (!pcurrentsps->pageFinished) { pcurrentsps->pageUsed = true; /* Determine how many samples to use from this page */ samplesFromPage = min(frameCount - samplesProcessed, pcurrentsps->pageLength - pcurrentsps->pagePos); /* Blank all channels that are not in use by this page (that are valid channels!) * This might turn out to be quicker just blanking all of the buffer */ if (pout && pcurrentsps->pplayChansInUse) { for (chan = 0; (chan < pcurrentsps->playChanCount) && (chan < psis->playChanCount); chan++) { if (!pcurrentsps->pplayChansInUse[chan]) { /* psis->playChanCount must be greater than 0 to have * reached this point, so no need to worry about this * for loop never ending */ for (ps = (pout + samplesProcessed * psis->playChanCount + chan); ps < (pout + (samplesProcessed + samplesFromPage) * psis->playChanCount); ps += psis->playChanCount) { *ps = 0; } } } } /* Step through all channels that may contain data */ if (pout && (psis->playChanCount > 0)) { for (pcbs = pcurrentsps->pfirstPlayChan; pcbs; pcbs = pcbs->pnextChanBuf) { tmpBufPos = pcurrentsps->pagePos; if (pcbs->pbuffer && (tmpBufPos < pcbs->bufLen) // && (pcbs->channel >= 0) //always true && (pcbs->channel < psis->playChanCount)) { /* This chanBuf contains a valid buffer and has data left to use! * Step through the frame copying data. */ /* psis->playChanCount must be greater than 0 to have * reached this point, so no need to worry about this * for loop never ending */ for (ps = (pout + samplesProcessed * psis->playChanCount + pcbs->channel); ps < (pout + (samplesProcessed + samplesFromPage) * psis->playChanCount); ps += psis->playChanCount) { if (tmpBufPos < pcbs->bufLen) { *ps = *(pcbs->pbuffer + tmpBufPos); tmpBufPos++; } else { *ps = 0; } } } else { /* There is nothing in this channels buffer to be used, * so zero the output channel */ /* psis->playChanCount must be greater than 0 to have * reached this point, so no need to worry about this * for loop never ending */ for (ps = (pout + samplesProcessed * psis->playChanCount + pcbs->channel); ps < (pout + (samplesProcessed + samplesFromPage) * psis->playChanCount); ps += psis->playChanCount) { *ps = 0; } } } } /* Record all channels as required */ if (pin) { for (pcbs = pcurrentsps->pfirstRecChan; pcbs; pcbs = pcbs->pnextChanBuf) { tmpBufPos = pcurrentsps->pagePos; if (pcbs->pbuffer && (tmpBufPos < pcbs->bufLen) // && (pcbs->channel >= 0)// always true && (pcbs->channel < psis->recChanCount)) { /* This chanBuf contains a valid buffer and has space left to use! * Channels without a valid buffer, or that have reached the end of * their buffer, should not need anything doing to them */ /* Step through each frame copying data */ for (ps = (pin + samplesProcessed * psis->recChanCount + pcbs->channel); (ps < (pin + (samplesProcessed + samplesFromPage) * psis->recChanCount)) && (tmpBufPos < pcbs->bufLen); ps += psis->recChanCount) { *(pcbs->pbuffer + tmpBufPos) = *ps; tmpBufPos++; } } } } /* Either the end of the page, or the end of the frame should have been reached * Both might also have occurred simultaneously! */ samplesProcessed += samplesFromPage; pcurrentsps->pagePos += samplesFromPage; if (pcurrentsps->pagePos >= pcurrentsps->pageLength) { /* Page is finished */ pcurrentsps->pageFinished = true; } if (samplesProcessed >= frameCount) { /* buffer is finished */ break; } } /* if(!pcurrentsps->pageFinished) */ /* buffer not finished - go to the next page */ pcurrentsps = pcurrentsps->pnextStreamPage; } /* while(pcurrentsps) */ } /* if(!isPaused) */ /* Either the buffer is finished, or we've run out of pages, or we're paused */ if (pout && (samplesProcessed < frameCount)) { /* Run out of pages, or paused (doesn't matter which) */ /* Zero all remaining output samples */ for (chan = 0; chan < psis->playChanCount; chan++) { /* psis->playChanCount must be greater than 0 to have * reached this point, so no need to worry about this * for loop never ending */ for (ps = (pout + samplesProcessed * psis->playChanCount + chan); ps < (pout + frameCount * psis->playChanCount); ps += psis->playChanCount) { *ps = 0; } } } if (psis->resetSkippedSampleCount) { /* Clear the value of skippedSampleCount BEFORE * clearing resetSkippedSampleCount to ensure there is no * chance of reading an incorrect value. */ psis->skippedSampleCount = 0; psis->resetSkippedSampleCount = false; } if (!isPaused && (samplesProcessed < frameCount)) { /* Not paused, so increment skippedSampleCount */ psis->skippedSampleCount += frameCount - samplesProcessed; } if (!isPaused && (statusFlags & (paOutputUnderflow | paOutputOverflow | paInputUnderflow | paInputOverflow))) { /* Not paused, and we've not processed/provided data fast * enough, or the input and output buffers became out of sync. * Either way, increment skippedSampleCount so Matlab can tell * that something's gone wrong. */ psis->skippedSampleCount++; } if ((psis->minFramesPerBuffer == paFramesPerBufferUnspecified) || (frameCount < psis->minFramesPerBuffer)) { psis->minFramesPerBuffer = frameCount; } if ((psis->maxFramesPerBuffer == paFramesPerBufferUnspecified) || (frameCount > psis->maxFramesPerBuffer)) { psis->maxFramesPerBuffer = frameCount; } /* Signal we're leaving the callback - this does not have to be the last * statement within the callback provided no manipulation of the stream * pages occurs after it is cleared. */ psis->inCallback = false; return psis->stopStream ? paComplete : paContinue; } /* * FUNCTION: mexFunctionCalled(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * Returns: true, or aborts with an error if initialisation of PortAudio * failed. * * Description: initialises PortAudio, if not already initialised, and * registers exitFunc as the mex exit function if this has not * already been done. Calls condensePages() to minimise memory * usage as frequently as possible. See mex_dll_core.c for * information on when this function is called, including the * possible return values. * * TODO: Add seperate function accessible from MATLAB to disable * automatic page condensing if optimum speed is more important * than minimizing memory usage */ bool mexFunctionCalled(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { /* Reset error on each function call */ lastPaError = paNoError; if (_currentState == 0) { /* initialise PortAudio and register exit function */ #ifdef DEBUG mexPrintf("First call to function...\n"); mexPrintf("...initialising PortAudio.\n"); #endif /* In this case a little more than checkPAErr is required, * becase the terminate must occur before displaying the * error message */ if (checkPAErr(Pa_Initialize()) != paNoError) { checkPAErr(Pa_Terminate()); abortIfPAErr("Failed to initialise PortAudio...Terminating"); } #ifdef DEBUG mexPrintf("...Registering exit function.\n"); #endif mexAtExit(exitFunc); SETSTATE(BASIC_INIT); } condensePages(); /* Always continue processing if we get this far */ return true; } /* * FUNCTION: condensePages(void) * * Inputs: void * * Returns: void * * Description: Iterates through all finished pages freeing as much memory * as possible without deleting any recorded data. For pages * only containing output data the page is completely removed * whereas pages also containing recorded data have their output * data and pplayChansInUse freed leaving the minimum amount of * memory in use. * * TODO: Change to take a pointer to the StreamInfoStruct to be * condensed, thus making the function compatible if the utility * is adapted to use more than one stream simultaneously. */ void condensePages(void) { StreamPageStruct **ppsps; if (_pstreamInfo) { ppsps = &_pstreamInfo->pfirstStreamPage; while (*ppsps) { /* Move through all stream pages, clearing the play buffers * if the stream is finished, to conserve space */ if ((*ppsps)->pageFinished) { /* if there are no record buffers, completely remove the page */ if (!(*ppsps)->pfirstRecChan) { freeStreamPageStruct(ppsps); /* Do not select the next page, as this has happened * automatically by supplying ppsps to * freeStreamPageStruct */ } else { /* This conditional if is not required, as it is also * checked within freeChanBufStructs. However, this * will reduce the number of function calls that just * return immediately! */ // if ((*ppsps)->pfirstPlayChan) // freeChanBufStructs(&(*ppsps)->pfirstPlayChan); if ((*ppsps)->pplayChansInUse) { mxFree((*ppsps)->pplayChansInUse); (*ppsps)->pplayChansInUse = NULL; (*ppsps)->playChanCount = 0; } ppsps = &(*ppsps)->pnextStreamPage; } } else { break; /* Once the first unFinished page has been reached * all the subsequent pages will also be unFinished. */ } } } } /* * FUNCTION: exitFunc(void) * * Inputs: void * * Returns: void * * Description: Function registered using mexAtExit and called whenever the * MEX-function is cleared or MATLAB is terminated. Frees all * allocated memory and terminates PortAudio if required. * * TODO: */ void exitFunc(void) { clearResPlans(); #ifdef DEBUG mexPrintf("Running playrec exitFunc...\n"); #endif /* Let freeStreamInfoStruct handle the closing of PortAudio */ freeStreamInfoStruct(&_pstreamInfo); if (ISSTATE(BASIC_INIT)) { #ifdef DEBUG mexPrintf("...Terminating PortAudio.\n"); #endif checkPAErr(Pa_Terminate()); } CLEARSTATE(BASIC_INIT); abortIfPAErr("PortAudio error during exitFunc"); } /* * FUNCTION: checkPAErr(PaError err) * * Inputs: err the PaError returned by any PortAudio function * * Returns: paError the err value supplied * * Description: Verifies if err is equal to paNoError. If not, the PortAudio * error number is stored in lastPaError so it can be recalled * later. * * TODO: */ PaError checkPAErr(PaError err) { if ( err != paNoError ) { lastPaError = err; } return err; } /* * FUNCTION: abortIfPAErr(const char* msg) * * Inputs: msg the message to add to the start of the error * * Returns: void * * Description: Verifies if lastPaError is equal to paNoError. If not, then * an error message is displayed and the mex function aborts. * * TODO: */ void abortIfPAErr(const char* msg) { char *buffer; if ( lastPaError != paNoError ) { buffer = mxCalloc( strlen( Pa_GetErrorText( lastPaError )) + strlen( msg ) + 40, sizeof( char )); if ( buffer ) { sprintf( buffer, "%s \n{PortAudio Error [%d]: %s}", msg, lastPaError, Pa_GetErrorText( lastPaError )); mexErrMsgTxt( buffer ); /* No need to free memory here as execution will always stop at the error */ } else { mexErrMsgTxt( "Error allocating memory in abortPAErr" ); } } } /* * FUNCTION: channelListToChanBufStructs(const mxArray *pmxChanArray, * ChanBufStruct **ppfirstcbs, unsigned int minChanNum, * unsigned int maxChanNum, bool makeMemoryPersistent) * * Inputs: pmxChanArray pointer to mxArray containing channel list * as a row vector (chan numbers are base 1) * The order of channel numbers is preserved in * the linked list, and no channel number can be * duplicated (this is checked). * ppfirstcbs pointer to the pointer which should be set * to point at the first ChanBufStruct * minChanNum the minimum channel number to be accepted * (base 0, NOT base 1) * maxChanNum the maximum channel number to be accepted * (base 0, NOT base 1) * makeMemoryPersistent true to make all allocated memory persistent * * Returns: true if the channel list is valid and all memory has been * allocated successfully, otherwise a description of the error * is printed to the MATLAB command window and false is returned. * * Description: Allocates and arranges all of the memory required for a * ChanBufStruct linked list based on the list of channels * provided in the mxArray pointed to by pmxChanArray. * Note that this array specifies channels starting at number 1 * whilst the minChanNum and maxChanNum are based on the channel * numbers starting at zero. This is also how the channel numbers * are stored within the ChanBufStruct, and the pmxChanArray * only uses values starting at 1 to make it the utility user friendly * * Rather than returning a pointer to the start of the linked list, * this directly updates the pointer which will be used to point at * the start of the list. * * Note that if ppfirstcbs points to the start of a linked list before * calling this function, the linked list is not freed and instead * this pointer to the start of it is just overwritten! * * TODO: Change implementation to return the pointer to the start of the * linked list, or NULL if there was an error. Therefore removing * the need for ppfirstcbs to be supplied, which can be confusing. */ bool channelListToChanBufStructs(const mxArray *pmxChanArray, ChanBufStruct **ppfirstcbs, unsigned int minChanNum, unsigned int maxChanNum, bool makeMemoryPersistent) { unsigned int chanUseCount = 0; double *pchani, *pchanj, *pchanList; ChanBufStruct **ppcbs; if (!pmxChanArray || !ppfirstcbs) { mexWarnMsgTxt("Invalid pointer in channelListToChanBufStructs."); return false; } if (!mxIsNumeric(pmxChanArray)) { mexWarnMsgTxt("Channel array must be numeric."); return false; } if (mxIsComplex(pmxChanArray)) { mexWarnMsgTxt("Channel array must not be complex."); return false; } if (mxGetM(pmxChanArray) != 1) { mexWarnMsgTxt("Channel array must have 1 row."); return false; } chanUseCount = mxGetN(pmxChanArray); pchanList = mxGetPr(pmxChanArray); /* Check all channel values are unique */ for (pchani = pchanList; pchani < &pchanList[chanUseCount]; pchani++) { if (*pchani != (int)*pchani) { mexWarnMsgTxt("Channel values must all be integers."); return false; } if (*pchani <= minChanNum || *pchani > (maxChanNum + 1)) { /* mexPrintf("Channel numbers must all be between %d and %d.\n", minChanNum + 1, maxChanNum + 1); */ mexWarnMsgTxt("Channel numbers out of range."); return false; } for (pchanj = pchanList; pchanj < &pchanList[chanUseCount]; pchanj++) { if ((pchani != pchanj) && (*pchani == *pchanj)) { /* Pointers are different, but point to the same value */ /* mexPrintf("Each channel may only be specified once in a list: value %d duplicated.\n", (int)*pchani); */ mexWarnMsgTxt("Channel number duplicated within channel list."); return false; } } } /* Generate the linked list, iterating through the list of channels */ ppcbs = ppfirstcbs; for (pchani = pchanList; pchani < &pchanList[chanUseCount]; pchani++) { *ppcbs = mxCalloc(1, sizeof(ChanBufStruct)); if (!*ppcbs) { mexWarnMsgTxt("Unable to allocate memory for channel buffer structure."); freeChanBufStructs(ppfirstcbs); return false; } if (makeMemoryPersistent) mexMakeMemoryPersistent(*ppcbs); (*ppcbs)->pbuffer = NULL; (*ppcbs)->bufLen = 0; (*ppcbs)->channel = (int) * pchani - 1; /* Storing channel numbers base 0, whereas they are supplied by the user base 1; */ (*ppcbs)->pnextChanBuf = NULL; ppcbs = &(*ppcbs)->pnextChanBuf; } return true; } /* * FUNCTION: addPlayrecPage(mxArray **ppmxPageNum, const mxArray *pplayData, * const mxArray *pplayChans, const mxArray *precDataLength, * const mxArray *precChans) * * Inputs: **ppmxPageNum pointer to a pointer which will be changed to * point at an mxArray containing the page number * of the page added. * *pplayData pointer to an MxN mxArray containing the play * data for the page, or NULL for no output. M is * the number of samples and N is the number of * channels of data. * pplayChans pointer to a 1xN mxArray containing the order * of channels in pplayData or NULL for no output * *precDataLength pointer to a scalar mxArray containing the * number of samples to record, or -1 to use the * same length as pplayData (only valid if * pplayData is not NULL). * *precChans pointer to a 1xP mxArray containing the order * of channels to record where P is the total * number of channels to record (this is the order * the channels are retured). * * Returns: true if page added successfully, false if an error occurred * (returned after displaying an error message), or aborts with * an error if not in full initialisation state. * ppmsPageNum is only valid if true is returned. * * Description: Adds a new page at the end of the current page list. The new * page contains the play data (if specified) and is configured * to record the specified channels. Completes all validation * checks and completely creates the page before adding it to the * page linked list. In doing so, the output and recording will * always remain synchronised nomatter if there are or aren't * other pages in the list. * * All memory allocated and referenced from within the created * page is made persistent. If false is returned then all this * memory is freed up before returning and all references to * the page are removed. However, if true is returned (page * created successfully) then appropriate measures to free * the page must be made once the page is nolonger required. * * TODO: */ bool addPlayrecPage(mxArray **ppmxPageNum, const mxArray *pplayData, const mxArray *pplayChans, const mxArray *precDataLength, const mxArray *precChans) { StreamPageStruct *psps; ChanBufStruct *pcbs; resample_error rerr = RESAMPLE_OK; unsigned int dataChanCount, playSamplePerChan = 0, recSamplePerChan; unsigned int i, chansCopied, playResPlanId = 0, bufTmpLen; validateState(BASIC_INIT | FULL_INIT, 0); /* Should not get here if _pstreamInfo is null */ if (!_pstreamInfo) { mexErrMsgTxt("An error has occurred - in full initialisation yet _pstreamInfo is NULL."); } if ((pplayData && !pplayChans) || (!pplayData && pplayChans)) { mexWarnMsgTxt("Either both or neither of playData and playChans should be NULL."); return false; } if ((precDataLength && !precChans) || (!precDataLength && precChans)) { mexWarnMsgTxt("Either both or neither of recDataLength and recChans should be NULL."); return false; } if (pplayData && (_pstreamInfo->playDeviceID == paNoDevice)) { mexWarnMsgTxt("Unable to play when no play device has been selected."); return false; } if (precDataLength && (_pstreamInfo->recDeviceID == paNoDevice)) { mexWarnMsgTxt("Unable to record when no record device has been selected."); return false; } psps = newStreamPageStruct(_pstreamInfo->playChanCount, true); if (!psps) { mexWarnMsgTxt("Unable to create new page."); return false; } if (pplayData && pplayChans) { if (!mxIsNumeric(pplayData) || mxIsComplex(pplayData) || (!mxIsSingle(pplayData) && !mxIsDouble(pplayData))) { mexWarnMsgTxt("Audio buffer must be non-complex numbers of type single or double."); freeStreamPageStruct(&psps); return false; } /* Create a linked list of all the channels required, checking they're all * within the valid range of channel numbers */ if (!channelListToChanBufStructs(pplayChans, &psps->pfirstPlayChan, 0, _pstreamInfo->playChanCount - 1, true)) { freeStreamPageStruct(&psps); return false; } /* Clear chansInUse array */ if (psps->pplayChansInUse) { for (i = 0; i < psps->playChanCount; i++) psps->pplayChansInUse[i] = false; } else { mexWarnMsgTxt("chansInUse buffer has not be created successfully."); freeStreamPageStruct(&psps); return false; } /* Copy across all data */ dataChanCount = mxGetN(pplayData); playSamplePerChan = mxGetM(pplayData); pcbs = psps->pfirstPlayChan; chansCopied = 0; if (playSamplePerChan > 0) { while (pcbs && (chansCopied < dataChanCount)) { /* Float32 input data */ if (mxIsSingle(pplayData)) pcbs->pbuffer = convFloat((float *)mxGetData(pplayData) + chansCopied * playSamplePerChan, playSamplePerChan); else if (mxIsDouble(pplayData)) /* Double */ pcbs->pbuffer = convDouble((double *)mxGetData(pplayData) + chansCopied * playSamplePerChan, playSamplePerChan); else { /* This should never be called as the if statement above should * catch this condition */ mexWarnMsgTxt("Audio buffer of incorrect data type."); freeStreamPageStruct(&psps); return false; } /* Do resampling if play resampler is present*/ if (play_resplan) { bufTmpLen = resample_nextoutlen( play_resplan[playResPlanId], playSamplePerChan); SAMPLE* buf = mxCalloc(bufTmpLen, sizeof * buf); mexMakeMemoryPersistent(buf); rerr = resample_execute(play_resplan[playResPlanId], pcbs->pbuffer, playSamplePerChan, buf, bufTmpLen); mxFree(pcbs->pbuffer); pcbs->pbuffer = buf; pcbs->bufLen = bufTmpLen; playResPlanId++; } else { pcbs->bufLen = playSamplePerChan; } if (rerr != RESAMPLE_OK) { mexWarnMsgTxt("Resampling returned an error. This should not happened."); } if (!pcbs->pbuffer) { mexWarnMsgTxt("Audio buffer conversion returned NULL."); freeStreamPageStruct(&psps); return false; } /* This if statement should not be required (included for safety) */ if ( // (pcbs->channel >= 0) && // always true (pcbs->channel < psps->playChanCount)) psps->pplayChansInUse[pcbs->channel] = true; chansCopied++; mexMakeMemoryPersistent(pcbs->pbuffer); pcbs = pcbs->pnextChanBuf; } } psps->pageLength = max(psps->pageLength, psps->pfirstPlayChan->bufLen); /* This is only used if recording is also performed */ psps->pageLengthRec = max(psps->pageLengthRec, playSamplePerChan); /* Check to see if either there are more channels than required, or too few channels */ if ((chansCopied < dataChanCount) && (playSamplePerChan > 0)) mexWarnMsgTxt("More channels of data supplied than channels in channel list; ignoring remaining channels."); else if (pcbs) mexWarnMsgTxt("Fewer channels of data supplied than channels in channel list; \"Zeroing\" all other channels."); } if (precDataLength && precChans) { if (!mxIsNumeric(precDataLength) || mxIsComplex(precDataLength) || (mxGetN(precDataLength) != 1) || (mxGetM(precDataLength) != 1) || (mxGetScalar(precDataLength) != (int)mxGetScalar(precDataLength))) { mexWarnMsgTxt("Number of record samples must be a non-complex integer."); return false; } else if (mxGetScalar(precDataLength) < 0) { if (_pstreamInfo->playDeviceID == paNoDevice || !pplayData) { mexWarnMsgTxt("Cannot use play sample count for record sample count when no play buffer in page."); freeStreamPageStruct(&psps); return false; } /* Use the same length of buffer for recording in the same page */ recSamplePerChan = psps->pfirstPlayChan->bufLen; } else { /* Number of recorded samples specified directly. */ recSamplePerChan = (int)mxGetScalar(precDataLength); psps->pageLengthRec = recSamplePerChan; if (rec_resplan) { recSamplePerChan = resample_nextinlen(dummy_recplan, recSamplePerChan); resample_advanceby(dummy_recplan, recSamplePerChan, (int)mxGetScalar(precDataLength)); } } if (recSamplePerChan > 0) { /* Only process recording if there are going ot be some samples recorded! * Create a linked list of all the channels required, checking they're all * within the valid range of channel numbers */ if (!channelListToChanBufStructs(precChans, &psps->pfirstRecChan, 0, _pstreamInfo->recChanCount - 1, true)) { freeStreamPageStruct(&psps); return false; } pcbs = psps->pfirstRecChan; psps->pageLength = max(psps->pageLength, recSamplePerChan); while (pcbs) { pcbs->pbuffer = mxCalloc(recSamplePerChan, sizeof(SAMPLE)); if (!pcbs->pbuffer) { mexWarnMsgTxt("Unable to create audio record buffer."); freeStreamPageStruct(&psps); return false; } mexMakeMemoryPersistent(pcbs->pbuffer); pcbs->bufLen = recSamplePerChan; pcbs = pcbs->pnextChanBuf; } } } /* This should be used here to avoid problems with clearing the * zero length page and then accessing this! */ *ppmxPageNum = mxCreateDoubleScalar(psps->pageNum); /* Reaching here means the page has been created successfully, so add * to end of page list provided it is worth adding! */ if (psps->pageLength == 0) { mexWarnMsgTxt("Page added has zero length."); freeStreamPageStruct(&psps); /* Still return the pageNumber without an error as this is not fatal */ } else if (!addStreamPageStruct(_pstreamInfo, psps)) { mexWarnMsgTxt("Unable to add page to stream"); freeStreamPageStruct(&psps); mxDestroyArray(*ppmxPageNum); *ppmxPageNum = NULL; return false; } return true; } /* * FUNCTION: doInit(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * Requires between 3 and 8 right-hand side arguments (ie nrhs * between 3 and 8, and prhs with at least this many elements). * These elements store, in order, sampleRate, playDevice, * recDevice, playMaxChannel, recMaxChannel, framesPerBuffer, * playSuggestedLatency, recSuggestedLatency. * Where: * sampleRate * the sample rate at which both devices will operate * playDevice * the ID of the device to be used for output (as returned by * 'getDevices'), or -1 for no device (ie output not required) * recDevice * the ID of the device to be used for recording (as returned by * 'getDevices'), or -1 for no device (ie recording not required) * playMaxChannel {optional} * a number greater than or equal to the maximum channel that will be used * for output. This must be less than or equal to the maximum number of * output channels that the device supports. Value ignored if playDevice * is -1. * recMaxChannel {optional} * a number greater than or equal to the maximum channel that will be used * for recording. This must be less than or equal to the maximum number * of input channels that the device supports. Value ignored if recDevice * is -1. * framesPerBuffer {optional} * the number of samples to be processed in each callback within the * utility (ie the length of each block of samples sent by the utility to * the soundcard). The lower the value specified the shorter the latency * but also the greater the likelihood of glitches within the audio. * A value of 0 lets the utility use an optimal, and potentially different, * value in each callback. * playSuggestedLatency {optional} * the play latency, in seconds, the device should try to use where possible. * Defaults to the default low output latency for the device if not specified. * recSuggestedLatency {optional} * the record latency, in seconds, the device should try to use where possible. * Defaults to the default low input latency for the device if not specified. * * Returns: true if stream opened succesfully or there is no stream to open * (ie both playDevice and recDevice are -1). Otherwise false after * an appropriate error message has been displayed in the MATLAB * command window. * * Description: Initialises the PortAudio stream based on the arguments supplied. * If the maxChannel values are not specified, the maximum channel * number supported by the relevant device is determined and used. If * the framesPerBuffer value is not specified, the default, as set in * newStreamInfoStruct() is used. All other initialisation values used * are also set in this other function. * * Note that this also starts the PortAudio stream, so by the end, or * shortly afterwars, the playrecCallback() function will start being * called. * * TODO: */ bool doInit(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { int ii; PaStreamParameters inputParameters; PaStreamParameters outputParameters; double resRat; validateState(BASIC_INIT, FULL_INIT ); /* Completely clear out the previous stream */ if (_pstreamInfo) { freeStreamInfoStruct(&_pstreamInfo); } /* Check stream info structure created successfully */ if (!(_pstreamInfo = newStreamInfoStruct(true))) { return false; } /* Get sample rate */ if (!mxIsNumeric(prhs[0]) || mxIsComplex(prhs[0]) || (mxGetN(prhs[0]) != 1) || (mxGetM(prhs[0]) != 1) || (mxGetScalar(prhs[0]) != (int)mxGetScalar(prhs[0])) || (mxGetScalar(prhs[0]) <= 0)) { mexWarnMsgTxt("Samplerate must be a non-complex scalar integer greater than zero."); freeStreamInfoStruct(&_pstreamInfo); return false; } _pstreamInfo->suggestedSampleRate = mxGetScalar(prhs[0]); /* Get play device - <0 is no device */ if (!mxIsNumeric(prhs[1]) || mxIsComplex(prhs[1]) || (mxGetN(prhs[1]) != 1) || (mxGetM(prhs[1]) != 1) || (mxGetScalar(prhs[1]) != (int)mxGetScalar(prhs[1]))) { mexWarnMsgTxt("Play DeviceID must be a non-complex integer."); freeStreamInfoStruct(&_pstreamInfo); return false; } else if (mxGetScalar(prhs[1]) >= Pa_GetDeviceCount()) { mexWarnMsgTxt("Play DeviceID must be a valid device number."); freeStreamInfoStruct(&_pstreamInfo); return false; } else if (mxGetScalar(prhs[1]) < 0) { _pstreamInfo->playDeviceID = paNoDevice; } else { _pstreamInfo->playDeviceID = (PaDeviceIndex)mxGetScalar(prhs[1]); } /* Get record device - <0 is no device */ if (!mxIsNumeric(prhs[2]) || mxIsComplex(prhs[2]) || (mxGetN(prhs[2]) != 1) || (mxGetM(prhs[2]) != 1) || (mxGetScalar(prhs[2]) != (int)mxGetScalar(prhs[2]))) { mexWarnMsgTxt("Record DeviceID must be a non-complex integer."); freeStreamInfoStruct(&_pstreamInfo); return false; } else if (mxGetScalar(prhs[2]) >= Pa_GetDeviceCount()) { mexWarnMsgTxt("Record DeviceID must be a valid device number."); freeStreamInfoStruct(&_pstreamInfo); return false; } else if (mxGetScalar(prhs[2]) < 0) { _pstreamInfo->recDeviceID = paNoDevice; } else { _pstreamInfo->recDeviceID = (PaDeviceIndex)mxGetScalar(prhs[2]); } /* Check there is at least a play or record device */ if ((_pstreamInfo->playDeviceID == paNoDevice) && (_pstreamInfo->recDeviceID == paNoDevice)) { mexWarnMsgTxt("playdevice < 0 and recdevice < 0. Nothing to be done - initialisation not complete."); freeStreamInfoStruct(&_pstreamInfo); return true; } /* Check maximum play channel number */ if (_pstreamInfo->playDeviceID != paNoDevice) { if (nrhs >= 4) { if (!mxIsNumeric(prhs[3]) || mxIsComplex(prhs[3]) || (mxGetN(prhs[3]) != 1) || (mxGetM(prhs[3]) != 1) || (mxGetScalar(prhs[3]) != (int)mxGetScalar(prhs[3])) || (mxGetScalar(prhs[3]) <= 0)) { mexWarnMsgTxt("Maximum channel number for output must be a non-complex scalar integer greater than zero."); freeStreamInfoStruct(&_pstreamInfo); return false; } /* The supplied value is the channel number, base 1 * This is the same as the number of channels (even though we are using base 0) */ _pstreamInfo->playChanCount = (unsigned int)mxGetScalar(prhs[3]); } else { /* Determine maximum number from PortAudio and use that */ const PaDeviceInfo *pdi = Pa_GetDeviceInfo(_pstreamInfo->playDeviceID); if (pdi) { _pstreamInfo->playChanCount = pdi->maxOutputChannels; } else { mexWarnMsgTxt("Unable to retrieve maximum play channel number for device."); freeStreamInfoStruct(&_pstreamInfo); return false; } } } /* Check maxmimum record channel number */ if (_pstreamInfo->recDeviceID != paNoDevice) { if (nrhs >= 5) { if (!mxIsNumeric(prhs[4]) || mxIsComplex(prhs[4]) || (mxGetN(prhs[4]) != 1) || (mxGetM(prhs[4]) != 1) || (mxGetScalar(prhs[4]) != (int)mxGetScalar(prhs[4])) || (mxGetScalar(prhs[4]) <= 0)) { mexWarnMsgTxt("Maximum channel number for recording must be a non-complex scalar integer greater than zero."); freeStreamInfoStruct(&_pstreamInfo); return false; } /* The supplied value is the channel number, base 1 * This is the same as the number of channels (even though we are using base 0) */ _pstreamInfo->recChanCount = (unsigned int)mxGetScalar(prhs[4]); } else { /* Determine maximum number from PortAudio and use that */ const PaDeviceInfo *pdi = Pa_GetDeviceInfo(_pstreamInfo->recDeviceID); if (pdi) { _pstreamInfo->recChanCount = pdi->maxInputChannels; } else { mexWarnMsgTxt("Unable to retrieve maximum record channel number for device."); freeStreamInfoStruct(&_pstreamInfo); return false; } } } /* Get framesPerBuffer if valid */ if (nrhs >= 6) { if (!mxIsNumeric(prhs[5]) || mxIsComplex(prhs[5]) || (mxGetN(prhs[5]) != 1) || (mxGetM(prhs[5]) != 1) || (mxGetScalar(prhs[5]) != (int)mxGetScalar(prhs[5])) || (mxGetScalar(prhs[5]) < 0)) { /* Zero is used for 'Unspecified' ie let PortAudio choose */ mexWarnMsgTxt("Frame buffer size must be a non-complex scalar integer " "greater than or equal to zero."); freeStreamInfoStruct(&_pstreamInfo); return false; } _pstreamInfo->suggestedFramesPerBuffer = (unsigned int)mxGetScalar(prhs[5]); } /* Get playSuggestedLatency if valid */ if (_pstreamInfo->playDeviceID != paNoDevice) { if (nrhs >= 7) { if (!mxIsNumeric(prhs[6]) || mxIsComplex(prhs[6]) || (mxGetN(prhs[6]) != 1) || (mxGetM(prhs[6]) != 1) || (mxGetScalar(prhs[6]) < 0)) { mexWarnMsgTxt("Play suggested latency must be a non-complex " "scalar value greater than or equal to zero."); freeStreamInfoStruct(&_pstreamInfo); return false; } _pstreamInfo->playSuggestedLatency = (PaTime)mxGetScalar(prhs[6]); } else { _pstreamInfo->playSuggestedLatency = Pa_GetDeviceInfo( _pstreamInfo->playDeviceID )->defaultLowOutputLatency; } } /* Get recSuggestedLatency if valid */ if (_pstreamInfo->recDeviceID != paNoDevice) { if (nrhs >= 8) { if (!mxIsNumeric(prhs[7]) || mxIsComplex(prhs[7]) || (mxGetN(prhs[7]) != 1) || (mxGetM(prhs[7]) != 1) || (mxGetScalar(prhs[7]) < 0)) { mexWarnMsgTxt("Record suggested latency must be a non-complex " "scalar value greater than or equal to zero."); freeStreamInfoStruct(&_pstreamInfo); return false; } _pstreamInfo->recSuggestedLatency = (PaTime)mxGetScalar(prhs[7]); } else { _pstreamInfo->recSuggestedLatency = Pa_GetDeviceInfo( _pstreamInfo->recDeviceID )->defaultLowInputLatency; } } if (_pstreamInfo->recDeviceID != paNoDevice) { inputParameters.device = _pstreamInfo->recDeviceID; inputParameters.channelCount = _pstreamInfo->recChanCount; inputParameters.sampleFormat = paFloat32; inputParameters.suggestedLatency = _pstreamInfo->recSuggestedLatency; inputParameters.hostApiSpecificStreamInfo = NULL; } if (_pstreamInfo->playDeviceID != paNoDevice) { outputParameters.device = _pstreamInfo->playDeviceID; outputParameters.channelCount = _pstreamInfo->playChanCount; outputParameters.sampleFormat = paFloat32; outputParameters.suggestedLatency = _pstreamInfo->playSuggestedLatency; outputParameters.hostApiSpecificStreamInfo = NULL; } /* Open an audio I/O stream. */ checkPAErr(Pa_OpenStream( &_pstreamInfo->pstream, (_pstreamInfo->recDeviceID != paNoDevice) ? &inputParameters : NULL, (_pstreamInfo->playDeviceID != paNoDevice) ? &outputParameters : NULL, _pstreamInfo->suggestedSampleRate, _pstreamInfo->suggestedFramesPerBuffer, _pstreamInfo->streamFlags, playrecCallback, _pstreamInfo)); clearResPlans(); /* If the sampling rate is not supported, try initializing with fs=44,1kHz*/ if ( lastPaError == paInvalidSampleRate ) { lastPaError = paNoError; mexWarnMsgTxt("PLAYREC: Device does not support selected sampling rate. Will use 44.1 kHz and resample."); resRat = 44100.0 / _pstreamInfo->suggestedSampleRate; _pstreamInfo->suggestedSampleRate = 44100.0; checkPAErr(Pa_OpenStream( &_pstreamInfo->pstream, (_pstreamInfo->recDeviceID != paNoDevice) ? &inputParameters : NULL, (_pstreamInfo->playDeviceID != paNoDevice) ? &outputParameters : NULL, _pstreamInfo->suggestedSampleRate, _pstreamInfo->suggestedFramesPerBuffer, _pstreamInfo->streamFlags, playrecCallback, _pstreamInfo)); /* Initialize record resampler(s) */ if (_pstreamInfo->recDeviceID != paNoDevice) { dummy_recplan = resample_init(RESAMPLING_TYPE, 1.0 / resRat); recResChanCount = _pstreamInfo->recChanCount; rec_resplan = malloc(recResChanCount * sizeof * rec_resplan); for (ii = 0; ii < recResChanCount; ii++) rec_resplan[ii] = resample_init( RESAMPLING_TYPE, 1.0 / resRat ); } /* Initialize play resampler */ if (_pstreamInfo->playDeviceID != paNoDevice) { playResChanCount = _pstreamInfo->playChanCount; play_resplan = malloc(playResChanCount * sizeof * play_resplan); for (ii = 0; ii < playResChanCount; ii++) play_resplan[ii] = resample_init( RESAMPLING_TYPE, resRat ); } } if (lastPaError != paNoError) { /* the value of stream is invalid, so clear it before freeing the stream * structure */ _pstreamInfo->pstream = NULL; freeStreamInfoStruct(&_pstreamInfo); abortIfPAErr("Init failed to open PortAudio stream"); } /* Stream is open, so now store time and start stream. */ time(&_pstreamInfo->streamStartTime); if (checkPAErr(Pa_StartStream( _pstreamInfo->pstream )) != paNoError) { /* Stream cannot be started */ freeStreamInfoStruct(&_pstreamInfo); abortIfPAErr("Init failed to start PortAudio stream"); } SETSTATE(FULL_INIT); return true; } /* * FUNCTION: doPlayrec(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * 4 right-hand side arguments (stored in the first 4 elements of prhs) * must be provided containing the following values (in this order): * playBuffer * a MxN matrix containing the samples to be played. M is the number of * samples and N is the number of channels of data. * playChanList * a 1xN vector containing the channels on which the playBuffer samples * should be output. N is the number of channels of data, and should be * the same as playBuffer (a warning is generated if they are different * but the utility will still try and create the page). Can only contain * each channel number once, but the channel order is not important and * does not need to include all the channels the device supports (all * unspecified channels will automatically output zeros). The maximum * channel number cannot be greater than that specified during * initialisation. * recDuration * the number of samples that should be recorded in this page, or -1 to * record the same number of samples as in playBuffer. * recChanList * a row vector containing the channel numbers of all channels to be * recorded. Can only contain each channel number once, but the channel * order is not important and does not need to include all the channels * the device supports. * * Returns: true if page added successfully, false if an error occurred * (returned after displaying an error message) * * Description: Adds a page (containging play and record) to the end of the * current list of pages, returning the number of the new page * in the first element of plhs. * * See addPlayrecPage for more information. * * TODO: */ bool doPlayrec(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { return addPlayrecPage(&plhs[0], prhs[0], prhs[1], prhs[2], prhs[3]); } /* * FUNCTION: doPlay(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * 2 right-hand side arguments (stored in the first 2 elements of prhs) * must be provided containing the following values (in this order): * playBuffer * a MxN matrix containing the samples to be played. M is the number of * samples and N is the number of channels of data. * playChanList * a 1xN vector containing the channels on which the playBuffer samples * should be output. N is the number of channels of data, and should be * the same as playBuffer (a warning is generated if they are different * but the utility will still try and create the page). Can only contain * each channel number once, but the channel order is not important and * does not need to include all the channels the device supports (all * unspecified channels will automatically output zeros). The maximum * channel number cannot be greater than that specified during * initialisation. * * Returns: true if page added successfully, false if an error occurred * (returned after displaying an error message) * * Description: Adds a page (containging only play channels) to the end of the * current list of pages, returning the number of the new page * in the first element of plhs. * * See addPlayrecPage for more information. * * TODO: */ bool doPlay(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { return addPlayrecPage(&plhs[0], prhs[0], prhs[1], NULL, NULL); } /* * FUNCTION: doRec(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * 2 right-hand side arguments (stored in the first 2 elements of prhs) * must be provided containing the following values (in this order): * * recDuration * the number of samples that should be recorded on each channel specified * in recChanList. * recChanList * a row vector containing the channel numbers of all channels to be * recorded. Can only contain each channel number once, but the channel * order is not important and does not need to include all the channels * the device supports. This is the same as the order of channels * returned by 'getRec'. The maximum channel number cannot be greater * than that specified during initialisation. * * Returns: true if page added successfully, false if an error occurred * (returned after displaying an error message) * * Description: Adds a page (containging only record channels) to the end of the * current list of pages, returning the number of the new page * in the first element of plhs. * * See addPlayrecPage for more information. * * TODO: */ bool doRec(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { return addPlayrecPage(&plhs[0], NULL, NULL, prhs[0], prhs[1]); } /* * FUNCTION: doPause(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The first element of plhs is always used and so must be valid * (this is not checked). If (nrhs > 0) then the first element * of prhs must also be valid and must point to a scalar. * * Returns: true is successful, false if the supplied argument is invalid, * or aborts with an error if not in full initialisation state. * The first element in plhs is only valid when true is returned. * * Description: If (nrhs > 0) then the stream pause state is updated with that * contained in the first element of prhs which should be 1 to * pause the stream or 0 to unpause the stream. If no arguments * are supplied then the stream pause state is not altered. * * Returns a double scalar in the first element of plhs containing * the current pause state (1 for paused, 0 for running). If a * new pause state was supplied, the returned state is that after * the update has occurred. * * TODO: */ bool doPause(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { validateState(BASIC_INIT | FULL_INIT, 0); if (!_pstreamInfo) { mexErrMsgTxt("An error has occurred - in full initialisation yet " " _pstreamInfo is NULL."); } if (nrhs > 0) { if (!(mxIsNumeric(prhs[0]) || mxIsLogical(prhs[0])) || mxIsComplex(prhs[0]) || (mxGetN(prhs[0]) != 1) || (mxGetM(prhs[0]) != 1) || ((mxGetScalar(prhs[0]) != 0) && (mxGetScalar(prhs[0]) != 1))) { mexWarnMsgTxt("New pause state must be either 0 (off) or 1 (on)."); return false; } _pstreamInfo->isPaused = (mxGetScalar(prhs[0]) == 1); } plhs[0] = mxCreateDoubleScalar(_pstreamInfo->isPaused ? 1 : 0); return true; } /* * FUNCTION: doBlock(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The first element of plhs is always used and so must be valid * (this is not checked). If (nrhs > 0) then the first element * of prhs must also be valid and must point to a scalar. * * Returns: true, or aborts with an error if not in full initialisation * state. * * Description: Waits until the specified page has finished before returning. * * If (nrhs > 0), and hence at least one argument is supplied, * then the first element of prhs is assumed to contain a page * number. Otherwise the utility automatically uses the page * number of the last page resident in memory. * * Returns a double scalar in the first element of plhs containing: * 1 if the specified page is a valid page and has finished being * processed (note that page validity refers to when the function * was called and so now the page has finished it may no longer * be a valid page). * 0 if the specified page is a valid page that has not finished * being processed. This is only returned if the stream is paused * and is used to avoid the function blocking indefinitely. * -1 if the specified page is invalid or no longer exists. This * includes pages that have automatically been condensed, and hence * have finished. * * TODO: */ bool doBlock(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { StreamPageStruct *psps; validateState(BASIC_INIT | FULL_INIT, 0); if (!_pstreamInfo) { mexErrMsgTxt("An error has occurred - in full initialisation yet " "_pstreamInfo is NULL."); } if (!_pstreamInfo->pfirstStreamPage) { plhs[0] = mxCreateDoubleScalar(-1); return true; } psps = _pstreamInfo->pfirstStreamPage; if (nrhs > 0) { if (!mxIsNumeric(prhs[0]) || mxIsComplex(prhs[0]) || (mxGetN(prhs[0]) != 1) || (mxGetM(prhs[0]) != 1)) { plhs[0] = mxCreateDoubleScalar(-1); return true; } while (psps) { if (psps->pageNum == (int)mxGetScalar(prhs[0])) break; psps = psps->pnextStreamPage; } if (!psps) { /* page does not exist, so return immediately */ plhs[0] = mxCreateDoubleScalar(-1); return true; } } else { /* Find the last page */ while (psps) { if (!psps->pnextStreamPage) break; psps = psps->pnextStreamPage; } if (!psps) { /* page does not exist, so return immediately * This condition should have been caught earlier */ plhs[0] = mxCreateDoubleScalar(-1); return true; } } while (!psps->pageFinished) { if (_pstreamInfo->isPaused) { plhs[0] = mxCreateDoubleScalar(0); return true; } Pa_Sleep(1); } plhs[0] = mxCreateDoubleScalar(1); return true; } /* * FUNCTION: doIsFinished(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The first element of plhs is always used and so must be valid * (this is not checked). If (nrhs > 0) then the first element * of prhs must also be valid and must point to a scalar. * * Returns: true, or aborts with an error if not in full initialisation * state. * * Description: If (nrhs > 0), and hence at least one argument is supplied, * then the first element of prhs is assumed to contain a page * number. Otherwise the utility automatically uses the page * number of the last page resident in memory. * * Returns a double scalar in the first element of plhs containing: * 1 if the specified page is a valid page and has finished being * processed or all pages are finished, * 0 if the specified page is a valid page but has not finished * being processed or there are unfinished pages, * -1 if the specified page is invalid or no longer exists. This * includes pages that have automatically been condensed, and hence * have finished. * * TODO: */ bool doIsFinished(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { StreamPageStruct *psps; validateState(BASIC_INIT | FULL_INIT, 0); if (!_pstreamInfo) { mexErrMsgTxt("An error has occurred - in full initialisation yet " "_pstreamInfo is NULL."); } if (!_pstreamInfo->pfirstStreamPage) { /* No pages - they must have all finished! */ plhs[0] = mxCreateDoubleScalar(1); return true; } psps = _pstreamInfo->pfirstStreamPage; if (nrhs > 0) { /* Page has been specified */ if (!mxIsNumeric(prhs[0]) || mxIsComplex(prhs[0]) || (mxGetN(prhs[0]) != 1) || (mxGetM(prhs[0]) != 1)) { plhs[0] = mxCreateDoubleScalar(-1); return true; } /* Find specified page */ while (psps) { if (psps->pageNum == (int)mxGetScalar(prhs[0])) break; psps = psps->pnextStreamPage; } if (!psps) { /* page does not exist, */ plhs[0] = mxCreateDoubleScalar(-1); } else { /* page does exist, so indicate if finished */ plhs[0] = mxCreateDoubleScalar(psps->pageFinished ? 1 : 0); } } else { /* Find the last page, or any page not finished */ while (psps) { if (!psps->pnextStreamPage || !psps->pageFinished) break; psps = psps->pnextStreamPage; } if (!psps) { /* This condition should have been caught earlier */ plhs[0] = mxCreateDoubleScalar(1); } else { plhs[0] = mxCreateDoubleScalar(psps->pageFinished ? 1 : 0); } } return true; } /* * FUNCTION: doIsInitialised(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The only input used is the first element of plhs, which must * be a valid array with at least one element (this is not * checked). All other inputs are not used or verified. * * Returns: true * * Description: Returns a double scalar in the first element of plhs containing * 1 if the utility is fully initialised, otherwise 0. * * TODO: */ bool doIsInitialised(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (ISSTATE(FULL_INIT)) plhs[0] = mxCreateDoubleScalar(1); else if (ISSTATE(BASIC_INIT)) /* If required can return different values for BASIC_INIT and no init! */ plhs[0] = mxCreateDoubleScalar(0); else plhs[0] = mxCreateDoubleScalar(0); return true; } /* * FUNCTION: doDelPage(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The first element of plhs is always used and so must be valid * (this is not checked). If (nrhs != 0) then the first element * of prhs must also be valid and must point to a scalar. * * Returns: true, or aborts with an error if not in full initialisation * state. * * Description: If (nrhs==0), and hence no arguments are supplied, then all * pages resident in memory are deleted. Otherwise it is assumed * that a argument is supplied in the first element of prhs, * containing the page number of the page to be deleted. * * If nothing is deleted (no pages resident in memory or there is * no page with the specified page number) then 0 is returned as * the first element of plhs. Otherwise, 1 is returned as the * first element of plhs. * * TODO: */ bool doDelPage(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { StreamPageStruct **ppsps; validateState(BASIC_INIT | FULL_INIT, 0); if (!_pstreamInfo) { mexErrMsgTxt("An error has occurred - in full initialisation yet " "_pstreamInfo is NULL."); } if (nrhs == 0) { /* Deleting all */ if (!_pstreamInfo->pfirstStreamPage) { /* Nothing to delete */ plhs[0] = mxCreateDoubleScalar(0); return true; } while (_pstreamInfo->pfirstStreamPage) freeStreamPageStruct(&_pstreamInfo->pfirstStreamPage); } else { /* Been supplied a argument */ if (!mxIsNumeric(prhs[0]) || mxIsComplex(prhs[0]) || (mxGetN(prhs[0]) != 1) || (mxGetM(prhs[0]) != 1)) { plhs[0] = mxCreateDoubleScalar(0); return true; } /* Find the corresponding page */ ppsps = &_pstreamInfo->pfirstStreamPage; while (*ppsps) { if ((*ppsps)->pageNum == (int)mxGetScalar(prhs[0])) break; ppsps = &(*ppsps)->pnextStreamPage; } if (!*ppsps) { /* page does not exist, so return immediately */ plhs[0] = mxCreateDoubleScalar(0); return true; } freeStreamPageStruct(ppsps); } plhs[0] = mxCreateDoubleScalar(1); return true; } /* * FUNCTION: doGetPlayrec(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The first element of plhs is always used and so must be valid * (this is not checked). Additionally, if (nlhs >= 2) then the * second element of plhs must also be valid. The first element * of prhs must also be valid and must point to an mxArray (the * type of mxArray is checked). * * Returns: true, or aborts with an error if not in full initialisation * state. * * Description: Returns all recorded samples available for the page specified. * The page required is identified by its page number, supplied as * the first element of prhs. An array is always returned in the * first element of plhs, and if (nlhs >= 2) then an array is also * returned in the second element of plhs. The first of these * contains the recorded data in an MxN array where M is the * number of samples that have been recorded (if the page is * currently being processed this will be the number of valid * samples at the specific point in time) and N is the number * of channels of data. The second array is a 1xN array * containing the channel number asssociated with each channel * of data in the first array. If the page requested does not * exist, or contains no recorded data (either because there are * no channels set to record, or because the page is waiting to be * processed) then the array(s) returned are empty. * * TODO: */ bool doGetPlayrec(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { StreamPageStruct *psps; ChanBufStruct *pcbs; ChanBufStruct *pcbsBoth[2]; resample_error rerr = RESAMPLE_OK; SAMPLE *poutBuf; mxArray *mxRecChanList; mxArray *mxPlayChanList; unsigned int *pChanListBoth[2]; unsigned int recSamples, recSamplesTmp; unsigned int channels[2]; unsigned int recResPlanId = 0; unsigned int ii; /* SRC_DATA recData;*/ validateState(BASIC_INIT | FULL_INIT, 0); if (!_pstreamInfo) { mexErrMsgTxt("An error has occurred - in full initialisation yet " "_pstreamInfo is NULL."); } /* Configure return values to defaults, and then change if necessary */ plhs[0] = mxCreateNumericMatrix(0, 0, mxSAMPLE, mxREAL); if (nlhs > 1) plhs[1] = mxCreateNumericMatrix(0, 0, mxSAMPLE, mxREAL); if (nlhs > 2) plhs[2] = mxCreateNumericMatrix(0, 0, mxSAMPLE, mxREAL); /* No pages */ if (!_pstreamInfo->pfirstStreamPage) { return true; } /* There must be one element on rhs before function is called */ if (!mxIsNumeric(prhs[0]) || mxIsComplex(prhs[0]) || (mxGetN(prhs[0]) != 1) || (mxGetM(prhs[0]) != 1) || (mxGetScalar(prhs[0]) != (int)mxGetScalar(prhs[0]))) { return true; } /* Try and find requested stream. */ psps = _pstreamInfo->pfirstStreamPage; while (psps) { if (psps->pageNum == (int)mxGetScalar(prhs[0])) break; psps = psps->pnextStreamPage; } if (!psps) { /* page does not exist, so return immediately */ return true; } /* Found the required page */ /* Determine the maximum number of samples recorded by finding the longest * buffer, and then limiting to how far through the page we currently are. * This allows for different length buffers in the future. */ recSamples = 0; recSamplesTmp = 0; channels[0] = 0; channels[1] = 0; pcbsBoth[0] = psps->pfirstRecChan; pcbsBoth[1] = psps->pfirstPlayChan; pcbs = pcbsBoth[0]; while (pcbs) { /* Check for valid buffer */ if (pcbs->pbuffer && (pcbs->bufLen > 0)) { recSamplesTmp = max(recSamples, pcbs->bufLen); channels[0]++; } pcbs = pcbs->pnextChanBuf; } pcbs = pcbsBoth[1]; while (pcbs) { /* Check for valid buffer */ if (pcbs->pbuffer && (pcbs->bufLen > 0)) { channels[1]++; } pcbs = pcbs->pnextChanBuf; } if (rec_resplan) { /* We will do resampling */ if (psps->pagePos != recSamplesTmp) { /* Page was not yet finished, do something harmless. */ recSamples = (unsigned int) ( psps->pageLengthRec * psps->pagePos / ((double)recSamples)); } else { recSamples = psps->pageLengthRec; } } else { recSamples = recSamplesTmp; } /* If there are no samples recorded, no need to continue */ if ((recSamples == 0) || (channels[0] == 0) || (channels[1] == 0)) { return true; } /* This initialises all elements to zero, so for shorter channels no * problems should arise. Although on exit MATLAB frees the arrays created * above, do so here for completeness */ mxDestroyArray(plhs[0]); plhs[0] = mxCreateNumericMatrix(recSamples, channels[0] + channels[1], mxSAMPLE, mxREAL); poutBuf = (SAMPLE*)mxGetData(plhs[0]); /* Create the channel list, but only return it if its required */ mxRecChanList = mxCreateNumericMatrix(1, channels[0], mxUNSIGNED_INT, mxREAL); mxPlayChanList = mxCreateNumericMatrix(1, channels[0], mxUNSIGNED_INT, mxREAL); pChanListBoth[0] = (unsigned int*)mxGetData(mxRecChanList); pChanListBoth[1] = (unsigned int*)mxGetData(mxPlayChanList); if (poutBuf && pChanListBoth[0] && pChanListBoth[1]) { for (ii = 0; ii < 2; ii++) { pcbs = pcbsBoth[ii]; /* Copy the data across, decrement recChannels to make sure * the end of the buffer isn't overwritten */ while (pcbs && (channels[ii] > 0)) { if (pcbs->pbuffer && (pcbs->bufLen > 0)) { if (!rec_resplan) { /* Do just a copy if no resampling should be done*/ memcpy(poutBuf, pcbs->pbuffer, min(recSamples, pcbs->bufLen) * sizeof(SAMPLE)); } else { rerr = resample_execute(rec_resplan[recResPlanId], pcbs->pbuffer, pcbs->bufLen, poutBuf, recSamples); if (rerr != RESAMPLE_OK) { mexWarnMsgTxt("Resampling returned an error. This should not happen."); } recResPlanId++; } poutBuf += recSamples; *pChanListBoth[ii]++ = pcbs->channel + 1; /* Add 1 for base 1 channels */ channels[ii]--; } pcbs = pcbs->pnextChanBuf; } } } if (nlhs > 1) { mxDestroyArray(plhs[1]); plhs[1] = mxPlayChanList; } if (nlhs > 2) { mxDestroyArray(plhs[22]); plhs[2] = mxRecChanList; } return true; } /* * FUNCTION: doGetRec(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The first element of plhs is always used and so must be valid * (this is not checked). Additionally, if (nlhs >= 2) then the * second element of plhs must also be valid. The first element * of prhs must also be valid and must point to an mxArray (the * type of mxArray is checked). * * Returns: true, or aborts with an error if not in full initialisation * state. * * Description: Returns all recorded samples available for the page specified. * The page required is identified by its page number, supplied as * the first element of prhs. An array is always returned in the * first element of plhs, and if (nlhs >= 2) then an array is also * returned in the second element of plhs. The first of these * contains the recorded data in an MxN array where M is the * number of samples that have been recorded (if the page is * currently being processed this will be the number of valid * samples at the specific point in time) and N is the number * of channels of data. The second array is a 1xN array * containing the channel number asssociated with each channel * of data in the first array. If the page requested does not * exist, or contains no recorded data (either because there are * no channels set to record, or because the page is waiting to be * processed) then the array(s) returned are empty. * * TODO: */ bool doGetRec(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { StreamPageStruct *psps; ChanBufStruct *pcbs; resample_error rerr = RESAMPLE_OK; SAMPLE *poutBuf; mxArray *mxChanList; unsigned int *pRecChanList; unsigned int recSamples, recSamplesTmp; unsigned int recChannels; unsigned int recResPlanId = 0; /* SRC_DATA recData;*/ validateState(BASIC_INIT | FULL_INIT, 0); if (!_pstreamInfo) { mexErrMsgTxt("An error has occurred - in full initialisation yet " "_pstreamInfo is NULL."); } /* Configure return values to defaults, and then change if necessary */ plhs[0] = mxCreateNumericMatrix(0, 0, mxSAMPLE, mxREAL); if (nlhs >= 2) plhs[1] = mxCreateNumericMatrix(0, 0, mxSAMPLE, mxREAL); /* No pages */ if (!_pstreamInfo->pfirstStreamPage) { return true; } /* There must be one element on rhs before function is called */ if (!mxIsNumeric(prhs[0]) || mxIsComplex(prhs[0]) || (mxGetN(prhs[0]) != 1) || (mxGetM(prhs[0]) != 1) || (mxGetScalar(prhs[0]) != (int)mxGetScalar(prhs[0]))) { return true; } /* Try and find requested stream. */ psps = _pstreamInfo->pfirstStreamPage; while (psps) { if (psps->pageNum == (int)mxGetScalar(prhs[0])) break; psps = psps->pnextStreamPage; } if (!psps) { /* page does not exist, so return immediately */ return true; } /* Found the required page */ /* Determine the maximum number of samples recorded by finding the longest * buffer, and then limiting to how far through the page we currently are. * This allows for different length buffers in the future. */ recSamples = 0; recSamplesTmp = 0; recChannels = 0; pcbs = psps->pfirstRecChan; while (pcbs) { /* Check for valid buffer */ if (pcbs->pbuffer && (pcbs->bufLen > 0)) { recSamplesTmp = max(recSamples, pcbs->bufLen); recChannels++; } pcbs = pcbs->pnextChanBuf; } if (rec_resplan) { /* We will do resampling */ if (psps->pagePos != recSamplesTmp) { /* Page was not yet finished, do something harmless. */ recSamples = (unsigned int) ( psps->pageLengthRec * psps->pagePos / ((double)recSamples)); } else { recSamples = psps->pageLengthRec; } } else { recSamples = recSamplesTmp; } /* If there are no samples recorded, no need to continue */ if ((recSamples == 0) || (recChannels == 0)) { return true; } /* This initialises all elements to zero, so for shorter channels no * problems should arise. Although on exit MATLAB frees the arrays created * above, do so here for completeness */ mxDestroyArray(plhs[0]); plhs[0] = mxCreateNumericMatrix(recSamples, recChannels, mxSAMPLE, mxREAL); poutBuf = (SAMPLE*)mxGetData(plhs[0]); /* Create the channel list, but only return it if its required */ mxChanList = mxCreateNumericMatrix(1, recChannels, mxUNSIGNED_INT, mxREAL); pRecChanList = (unsigned int*)mxGetData(mxChanList); if (poutBuf && pRecChanList) { pcbs = psps->pfirstRecChan; /* Copy the data across, decrement recChannels to make sure * the end of the buffer isn't overwritten */ while (pcbs && (recChannels > 0)) { if (pcbs->pbuffer && (pcbs->bufLen > 0)) { if (!rec_resplan) { /* Do just a copy if no resampling should be done*/ memcpy(poutBuf, pcbs->pbuffer, min(recSamples, pcbs->bufLen) * sizeof(SAMPLE)); } else { rerr = resample_execute(rec_resplan[recResPlanId], pcbs->pbuffer, pcbs->bufLen, poutBuf, recSamples); if (rerr != RESAMPLE_OK) { mexWarnMsgTxt("Resampling returned an error. This should not happen."); } recResPlanId++; } poutBuf += recSamples; *pRecChanList++ = pcbs->channel + 1; /* Add 1 for base 1 channels */ recChannels--; } pcbs = pcbs->pnextChanBuf; } } if (nlhs >= 2) { mxDestroyArray(plhs[1]); plhs[1] = mxChanList; } return true; } /* * FUNCTION: doGetSampleRate(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The first element of plhs is always used and so must be valid * (this is not checked). Additionally, if (nlhs >= 2) then the * second element of plhs must also be valid. * * Returns: true * * Description: Returns a double scalar in the first two elements of plhs. * The first contains the suggested sample rate during initialisation * and the second contains the current sample rate available from * the hardware (if possible). Alternatively, -1 if the stream has * not been initialised. * * TODO: */ bool doGetSampleRate(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { const PaStreamInfo *streamInfo; if (!_pstreamInfo) { plhs[0] = mxCreateDoubleScalar(-1); if (nlhs >= 2) { plhs[1] = mxCreateDoubleScalar(-1); } } else { plhs[0] = mxCreateDoubleScalar(_pstreamInfo->suggestedSampleRate); if (nlhs >= 2) { streamInfo = Pa_GetStreamInfo(_pstreamInfo->pstream); if (streamInfo) { plhs[1] = mxCreateDoubleScalar(streamInfo->sampleRate); } else { plhs[1] = mxCreateDoubleScalar(-1); } } } return true; } /* * FUNCTION: doGetFramesPerBuffer(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The first element of plhs is always used and so must be valid * (this is not checked). Additionally, if (nlhs >= 2) then the * second element of plhs must also be valid and if (nlhs >= 2) * then also the third element. * * Returns: true * * Description: Returns double scalars in the first three elements of plhs * containing the suggested value during initialisation and the minimum * and maximum number of samples processed in any single callback. * Alternatively, -1 if the stream has not been initialised. * * TODO: */ bool doGetFramesPerBuffer(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (!_pstreamInfo) { plhs[0] = mxCreateDoubleScalar(-1); if (nlhs >= 2) { plhs[1] = mxCreateDoubleScalar(-1); } if (nlhs >= 3) { plhs[2] = mxCreateDoubleScalar(-1); } } else { plhs[0] = mxCreateDoubleScalar(_pstreamInfo->suggestedFramesPerBuffer); if (nlhs >= 2) { plhs[1] = mxCreateDoubleScalar(_pstreamInfo->minFramesPerBuffer); } if (nlhs >= 3) { plhs[2] = mxCreateDoubleScalar(_pstreamInfo->maxFramesPerBuffer); } } return true; } /* * FUNCTION: doGetStreamStartTime((int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The only input used is the first element of plhs, which must * be a valid array with at least one element (this is not * checked). All other inputs are not used or verified. * * Returns: true * * Description: Returns a double scalar in the first element of plhs containing * the unix time (number of seconds since the standard epoch of * 1/1/1970) for when the current stream was started, or -1 if the * stream has not been initialised. This can be used as an * identifying value for the stream, to help keep track of what * data was recorded using each stream (ie all recordings with the * same stream start time must have been recorded at the same * sample rate using the same device(s)). * * TODO: */ bool doGetStreamStartTime(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (!_pstreamInfo) { plhs[0] = mxCreateDoubleScalar(-1); } else { plhs[0] = mxCreateDoubleScalar((double)_pstreamInfo->streamStartTime); /* mexPrintf("%s\n", asctime(localtime(&_pstreamInfo->streamStartTime))); */ } return true; } /* * FUNCTION: doGetPlayDevice(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The only input used is the first element of plhs, which must * be a valid array with at least one element (this is not * checked). All other inputs are not used or verified. * * Returns: true * * Description: Returns a double scalar in the first element of plhs containing * the ID of the current play device, or -1 if either the stream * has not been initialised or it was initialised with no play * device. * * TODO: */ bool doGetPlayDevice(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (!_pstreamInfo || (_pstreamInfo->playDeviceID == paNoDevice)) { plhs[0] = mxCreateDoubleScalar(-1); } else { plhs[0] = mxCreateDoubleScalar(_pstreamInfo->playDeviceID); } return true; } /* * FUNCTION: doGetRecDevice(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The only input used is the first element of plhs, which must * be a valid array with at least one element (this is not * checked). All other inputs are not used or verified. * * Returns: true * * Description: Returns a double scalar in the first element of plhs containing * the ID of the current record device, or -1 if either the stream * has not been initialised or it was initialised with no record * device. * * TODO: */ bool doGetRecDevice(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (!_pstreamInfo || (_pstreamInfo->recDeviceID == paNoDevice)) { plhs[0] = mxCreateDoubleScalar(-1); } else { plhs[0] = mxCreateDoubleScalar(_pstreamInfo->recDeviceID); } return true; } /* * FUNCTION: doGetPlayMaxChannel(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The only input used is the first element of plhs, which must * be a valid array with at least one element (this is not * checked). All other inputs are not used or verified. * * Returns: true * * Description: Returns a double scalar in the first element of plhs containing * the maximum number of play channels, or -1 if either the stream * has not been initialised or it was initialised with no play * device. * * TODO: */ bool doGetPlayMaxChannel(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (!_pstreamInfo || (_pstreamInfo->playDeviceID == paNoDevice)) { plhs[0] = mxCreateDoubleScalar(-1); } else { plhs[0] = mxCreateDoubleScalar(_pstreamInfo->playChanCount); } return true; } /* * FUNCTION: doGetRecMaxChannel(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The only input used is the first element of plhs, which must * be a valid array with at least one element (this is not * checked). All other inputs are not used or verified. * * Returns: true * * Description: Returns a double scalar in the first element of plhs containing * the maximum number of record channels, or -1 if either the stream * has not been initialised or it was initialised with no record * device. * * TODO: */ bool doGetRecMaxChannel(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (!_pstreamInfo || (_pstreamInfo->recDeviceID == paNoDevice)) { plhs[0] = mxCreateDoubleScalar(-1); } else { plhs[0] = mxCreateDoubleScalar(_pstreamInfo->recChanCount); } return true; } /* * FUNCTION: doGetPlayLatency(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The first element of plhs is always used and so must be valid * (this is not checked). Additionally, if (nlhs >= 2) then the * second element of plhs must also be valid. All other inputs * are not used or verified. * * Returns: true * * Description: Returns a double scalar in the first element of plhs with * the latency used during initialisation. The second element * contains the actual latency for the play device, or -1 if * either the stream has not been initialised or it was * initialised with no play device. * * TODO: */ bool doGetPlayLatency(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { const PaStreamInfo *streamInfo; if (!_pstreamInfo || (_pstreamInfo->playDeviceID == paNoDevice)) { plhs[0] = mxCreateDoubleScalar(-1); if (nlhs >= 2) { plhs[1] = mxCreateDoubleScalar(-1); } } else { plhs[0] = mxCreateDoubleScalar(_pstreamInfo->playSuggestedLatency); if (nlhs >= 2) { streamInfo = Pa_GetStreamInfo(_pstreamInfo->pstream); if (streamInfo) { plhs[1] = mxCreateDoubleScalar(streamInfo->outputLatency); } else { plhs[1] = mxCreateDoubleScalar(-1); } } } return true; } /* * FUNCTION: doGetRecLatency(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The first element of plhs is always used and so must be valid * (this is not checked). Additionally, if (nlhs >= 2) then the * second element of plhs must also be valid. All other inputs * are not used or verified. * * Returns: true * * Description: Returns a double scalar in the first element of plhs with * the latency used during initialisation. The second element * contains the actual latency for the record device, or -1 if * either the stream has not been initialised or it was * initialised with no record device. * * TODO: */ bool doGetRecLatency(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { const PaStreamInfo *streamInfo; if (!_pstreamInfo || (_pstreamInfo->recDeviceID == paNoDevice)) { plhs[0] = mxCreateDoubleScalar(-1); if (nlhs >= 2) { plhs[1] = mxCreateDoubleScalar(-1); } } else { plhs[0] = mxCreateDoubleScalar(_pstreamInfo->recSuggestedLatency); if (nlhs >= 2) { streamInfo = Pa_GetStreamInfo(_pstreamInfo->pstream); if (streamInfo) { plhs[1] = mxCreateDoubleScalar(streamInfo->inputLatency); } else { plhs[1] = mxCreateDoubleScalar(-1); } } } return true; } /* * FUNCTION: doGetPageList(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The only input used is the first element of plhs, which must * be a valid array with at least one element (this is not * checked). All other inputs are not used or verified. * * Returns: true * * Description: Returns a 1xN array of unsigned integers in the first element * of plhs. The array contains the page numbers of all pages * resident in memory, arranged chronologically from the earliest * to latest addition. As such, the lenght of the array, N, is * the number of pages currently resident in memory. * * TODO: */ bool doGetPageList(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { StreamPageStruct *psps; unsigned int *ppageList; unsigned int pageCount = 0; /* Not initialised or no pages */ if (!_pstreamInfo || !_pstreamInfo->pfirstStreamPage) { plhs[0] = mxCreateNumericMatrix(1, 0, mxUNSIGNED_INT, mxREAL); return true; } psps = _pstreamInfo->pfirstStreamPage; while (psps) { pageCount++; psps = psps->pnextStreamPage; } plhs[0] = mxCreateNumericMatrix(1, pageCount, mxUNSIGNED_INT, mxREAL); ppageList = (unsigned int*)mxGetData(plhs[0]); if (ppageList) { psps = _pstreamInfo->pfirstStreamPage; /* Copy the data across. * Decrement pageCount incase another item has been added simultaneously */ while (psps && (pageCount > 0)) { pageCount--; *ppageList++ = psps->pageNum; psps = psps->pnextStreamPage; } } return true; } /* * FUNCTION: doGetCurrentPosition(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The first element of plhs is always used and so must be valid * (this is not checked). Additionally, if (nlhs >= 2) then the * second element of plhs must also be valid. All other inputs * are not used or verified. * * Returns: true * * Description: Always returns a double scalar in the first element of plhs * containing the page number of the current page being processed. * If there is no page currently being processed (there are no * pages, or all pages are finished) then the returned page number * is -1. If (nlhs >= 2) then a double scalar in the second * element of plhs is also returned. This represents the current * sample number within the current page, or -1 if there is no * current page. * * TODO: */ bool doGetCurrentPosition(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { StreamPageStruct *psps; if (!_pstreamInfo || !_pstreamInfo->pfirstStreamPage) { plhs[0] = mxCreateDoubleScalar(-1); if (nlhs >= 2) plhs[1] = mxCreateDoubleScalar(-1); return true; } psps = _pstreamInfo->pfirstStreamPage; while (psps->pnextStreamPage && psps->pageFinished) psps = psps->pnextStreamPage; if (!psps->pnextStreamPage && psps->pageFinished) { /* The last stream page is finished, so there is no current page */ plhs[0] = mxCreateDoubleScalar(-1); if (nlhs >= 2) plhs[1] = mxCreateDoubleScalar(-1); } else { plhs[0] = mxCreateDoubleScalar(psps->pageNum); if (nlhs >= 2) plhs[1] = mxCreateDoubleScalar(psps->pagePos); } return true; } /* * FUNCTION: doGetLastFinishedPage(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The only input used is the first element of plhs, which must * be a valid array with at least one element (this is not * checked). All other inputs are not used or verified. * * Returns: true * * Description: Returns a double scalar in the first element of plhs containing * the page number of the last finished page still resident in * memory (ie pages that have not been deleted either * automatically during page condensing or through a call to * delPage). If there are no finished pages resident in memory * then the returned page number is -1. * * TODO: */ bool doGetLastFinishedPage(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { StreamPageStruct *psps; unsigned int finishedPage; /* Check there is at least one finished page */ if (!_pstreamInfo || !_pstreamInfo->pfirstStreamPage || !_pstreamInfo->pfirstStreamPage->pageFinished) { plhs[0] = mxCreateDoubleScalar(-1); return true; } /* To get here the first page is finished */ finishedPage = _pstreamInfo->pfirstStreamPage->pageNum; psps = _pstreamInfo->pfirstStreamPage->pnextStreamPage; while (psps && psps->pageFinished) { finishedPage = psps->pageNum; psps = psps->pnextStreamPage; } plhs[0] = mxCreateDoubleScalar(finishedPage); return true; } /* * FUNCTION: doReset(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * No inputs are used or verified. * * Returns: true, or aborts with an error if not in full initialisation * state. * * Description: Resets the utility to the basic initialisation state, * including deleting all pages and stopping the PortAudio stream. * * TODO: */ bool doReset(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { validateState(BASIC_INIT | FULL_INIT, 0); /* Should not get here if _pstreamInfo is null */ if (!_pstreamInfo) { mexErrMsgTxt("An error has occurred - in full initialisation yet " "_pstreamInfo is NULL."); } /* freeing the stream info structure also closes the stream */ freeStreamInfoStruct(&_pstreamInfo); CLEARSTATE(FULL_INIT); return true; } /* * FUNCTION: doGetDevices(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The only input used is the first element of plhs, which must * be a valid array with at least one element (this is not * checked). All other inputs are not used or verified. * * Returns: true, or aborts with an error if not in basic initialisation * state * * Description: Returns a 1xN struct array as the first element of plhs, * containing the name, ID and number of input and output channels * for all availables devices. * * TODO: */ bool doGetDevices(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { const char *fieldNames[] = {"deviceID", "name", "hostAPI", "defaultLowInputLatency", "defaultLowOutputLatency", "defaultHighInputLatency", "defaultHighOutputLatency", "defaultSampleRate", "supportedSampleRates", "inputChans", "outputChans" }; const double samplingRates[] = { 8000.0, 11025.0, 16000.0, 22050.0, 32000.0, 44100.0, 48000.0, 88200.0, 96000.0, 192000.0 }; const int numSamplingRates = sizeof(samplingRates) / sizeof(samplingRates[0]); const PaDeviceInfo *pdi; PaDeviceIndex i; int ii; int numDevices; validateState(BASIC_INIT, 0); numDevices = Pa_GetDeviceCount(); if ( numDevices < 0 ) { mexPrintf( "PortAudio Error, Pa_CountDevices returned 0x%x\n", numDevices ); } plhs[0] = mxCreateStructMatrix(1, numDevices, sizeof(fieldNames) / sizeof(char*), fieldNames); for ( i = 0; i < numDevices; i++) { pdi = Pa_GetDeviceInfo(i); if (pdi != NULL) { mxSetField(plhs[0], i, "deviceID", mxCreateDoubleScalar(i)); mxSetField(plhs[0], i, "name", mxCreateString(pdi->name)); mxSetField(plhs[0], i, "hostAPI", mxCreateString(Pa_GetHostApiInfo( pdi->hostApi )->name)); mxSetField(plhs[0], i, "defaultLowInputLatency", mxCreateDoubleScalar(pdi->defaultLowInputLatency)); mxSetField(plhs[0], i, "defaultLowOutputLatency", mxCreateDoubleScalar(pdi->defaultLowOutputLatency)); mxSetField(plhs[0], i, "defaultHighInputLatency", mxCreateDoubleScalar(pdi->defaultHighInputLatency)); mxSetField(plhs[0], i, "defaultHighOutputLatency", mxCreateDoubleScalar(pdi->defaultHighOutputLatency)); mxSetField(plhs[0], i, "defaultSampleRate", mxCreateDoubleScalar(pdi->defaultSampleRate)); mxSetField(plhs[0], i, "inputChans", mxCreateDoubleScalar(pdi->maxInputChannels)); mxSetField(plhs[0], i, "outputChans", mxCreateDoubleScalar(pdi->maxOutputChannels)); /* * This is a workaround how to obtain list of supported sampling * frequencies. Only the ones in the samplingRates array are * tested. The device might be actually capabe of more. * */ PaStreamParameters* dummyIn; PaStreamParameters* dummyOut; if (pdi->maxInputChannels > 0) { dummyIn = calloc(1, sizeof(PaStreamParameters)); dummyIn->device = i; dummyIn->channelCount = pdi->maxInputChannels; dummyIn->sampleFormat = paFloat32; } else { dummyIn = NULL; } if (pdi->maxOutputChannels > 0) { dummyOut = calloc(1, sizeof(PaStreamParameters)); dummyOut->device = i; dummyOut->channelCount = pdi->maxOutputChannels; dummyOut->sampleFormat = paFloat32; } else { dummyOut = NULL; } int numSupSampRates = 0; double supSampRates[numSamplingRates]; for (ii = 0; ii < numSamplingRates; ii++) { if (!Pa_IsFormatSupported(dummyIn, dummyOut, samplingRates[ii])) { supSampRates[numSupSampRates++] = samplingRates[ii]; } } if (dummyIn != NULL) free(dummyIn); if (dummyOut != NULL) free(dummyOut); mxArray* mxSubSampRates = mxCreateDoubleMatrix(1, numSupSampRates, mxREAL); memcpy(mxGetData(mxSubSampRates), supSampRates, numSupSampRates * sizeof(double)); mxSetField(plhs[0], i, "supportedSampleRates", mxSubSampRates); } } return true; } /* * FUNCTION: doGetSkippedSampleCount(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The only input used is the first element of plhs, which must * be a valid array with at least one element (this is not * checked). All other inputs are not used or verified. * * Returns: true * * Description: Returns a double scalar in the first element of plhs containing * the number of samples that have occurred whilst there are no new * pages in the pageList, or -1 if either the stream * has not been initialised. * * TODO: */ bool doGetSkippedSampleCount(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (!_pstreamInfo) { plhs[0] = mxCreateDoubleScalar(-1); } else if (_pstreamInfo->resetSkippedSampleCount) { plhs[0] = mxCreateDoubleScalar(0); } else { plhs[0] = mxCreateDoubleScalar(_pstreamInfo->skippedSampleCount); } return true; } /* * FUNCTION: doResetSkippedSampleCount(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * No inputs are used or verified. * * Returns: true * * Description: Resets the skipped sample count to zero. * * TODO: */ bool doResetSkippedSampleCount(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { if (!_pstreamInfo) { return true; } _pstreamInfo->resetSkippedSampleCount = true; return true; } /* * FUNCTION: doAbout(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * No inputs are used or verified. * * Returns: true * * Description: Outputs as either a argument or to the command window information * about the version of playrec. * * TODO: */ bool doAbout(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { static const char *aboutString = "Playrec is a Matlab utility (MEX file) that provides simple yet versatile access to \ soundcards using PortAudio, a free, open-source audio I/O library. It can be used on \ different platforms (Windows, Macintosh, Unix) and access the soundcard via different \ host API including ASIO, WMME and DirectSound under Windows.\n\n\ A list of all commands implemented by the utility can be obtained by calling playrec \ with no arguments. A basic outline of how to use this utility is provided by typing \ 'overview' as the first argument. For more information on any command type 'help' as \ the first argument followed by the command of interest as the second argument.\n\n\ This utility was initially written as part of a Robert Humphrey's MEng project for \ The University of York, UK, in 2006. This was undertaken at TMH (Speech, Music and \ Hearing) at The Royal Institute of Technology (KTH) in Stockholm and was funded by \ The Swedish Foundation for International Cooperation in Research and Higher Education \ (STINT). The project was titled Automatic Speaker Location Detection for use in \ Ambisonic Systems.\n\n\ ASIO is a trademark and software of Steinberg Media Technologies GmbH\n\n\ Version: " VERSION "\nDate: " DATE "\nAuthor: " AUTHOR "\nCompiled on: " __DATE__ " at " __TIME__ "\nBuilt with defines: " #ifdef CASE_INSENSITIVE_COMMAND_NAME "CASE_INSENSITIVE_COMMAND_NAME, " #endif #ifdef DEBUG "DEBUG, " #endif "\nAvailable host API: "; PaHostApiIndex apiCount = Pa_GetHostApiCount(); PaHostApiIndex i; const PaHostApiInfo *apiInfo; int bufLen = strlen(aboutString); char *buffer, *write_point; /* Calculate required buffer length, being over generous to avoid problems */ for (i = 0; i < apiCount; i++) { apiInfo = Pa_GetHostApiInfo(i); bufLen += strlen(apiInfo->name) + 20; } buffer = mxCalloc( bufLen + 20, sizeof( char )); if ( buffer ) { write_point = buffer; strcpy(write_point, aboutString); write_point += strlen(aboutString); for (i = 0; i < apiCount; i++) { apiInfo = Pa_GetHostApiInfo(i); write_point += sprintf(write_point, "%s (%d devices), ", apiInfo->name, apiInfo->deviceCount); } *write_point = '\0'; if (nlhs < 1) { linewrapString(buffer, SCREEN_CHAR_WIDTH, 0, 0, SCREEN_TAB_STOP); } else { plhs[0] = mxCreateString(buffer); } /* No need to free memory here as execution will always stop at the error */ } else { mexErrMsgTxt( "Error allocating memory in doAbout" ); } return true; } /* * FUNCTION: doOverview(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * No inputs are used or verified. * * Returns: true * * Description: Outputs as either a argument or to the command window an * overview of how to use playrec. * * TODO: */ bool doOverview(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { /* To do this line wrapping quickly can use "^(.{1,90} )" and "\1\\\n" as find and replace regular expressions in Textpad */ static const char *overviewString = "This page provides a basic outline of how to use the Playrec utility. More information \ on any command can be found by using \"playrec('help', 'command_name')\" or simply \ \"playrec help command_name\".\n\n" "To simplify operation, all functionality is accessed through one function in Matlab. \ To achieve this the first argument in the function call is always the name of the \ command/operation required, eg \"playrec('getDevices')\" or \"playrec('isInitialised')\". \ If additional arguments are required then they are specified after this, eg \ \"playrec('init', 48000, 1, -1)\". A list of all available commands can be displayed by \ supplying no arguments.\n\n" "Before any audio can be played or recorded, the utility must be initialised to use the \ required sample rate and device(s). Initialisation is achieved using the \"init\" \ command, supplying the ID of the required audio device(s) as returned by \"getDevices\". \ Once successfully initialised, the sample rate or device(s) to be used cannot be changed \ without first resetting the utility using the \"reset\" command. This clears all \ previously recorded data so use it with care. To check if the utility is currently \ initialised, use the \"isInitialised\" command.\n\n" "The utility divides time up into pages with no restrictions on the duration of any one \ page, although with very short pages skipping in the audio may occur if they cannot be \ supplied fast enough. There can be as many pages as required provided the utility can \ allocate enough memory. Pages are joined together sequentially in the order they are \ added, with each page starting the sample after the previous page finishes. A page can \ contain samples that are to be output on one or more channels and buffers to store \ recorded samples on one or more channels. The duration of a page is determined by the \ longest channel contained within the page. Therefore if, for example, the record channels \ are 1000 samples long whilst output channels are only 900 samples long, the page will be \ 1000 samples long and the final 100 output samples of the page will automatically be set \ to 0.\n\n" "When each page is added, the channels that are to be used for recording and/or output are \ specified (depending on the command used to add the page). The channels used must be \ within the range specified during initialisation and no channel can be duplicated within a \ channel list. Within these limits, the channel list for each page can be different and \ each list can contain as many or as few channels as required in any order. All output \ channels not provided with any data within a page will output 0 for the duration of the \ page. Similarly, during any times when there are no further pages to process 0 will be \ output on all channels.\n\n" "Each page has a unique number which is returned by any of the commands used to add pages \ (\"playrec\", \"play\" or \"rec\"). When a page is added, the utility does not wait until \ the page has completed before returning. Instead, the page is queued up and the page \ number can then be used to check if the page has finished, using \"isFinished\". \ Alternatively a blocking command, \"block\", can be used to wait until the page has \ finished. To reduce the amount of memory used, finished pages are automatically condensed \ whenever any command is called in the utility. If a page contains any recorded data, this \ is left untouched although any output data within the page is removed. If the page does \ not contain any recorded data, the whole page is deleted during this page condensing. For \ this reason if either \"isFinished\", \"block\" or \"delPage\" indicate the page number is \ invalid this means the page either never existed or has already finished and then been \ deleted during page condensing.\n\n" "For pages containing recorded data, the data can be accessed using the \"getRec\" command \ once the page is finished (indicating the recording has completed). This does not delete \ the data so it can be accessed as many times as required. To delete the recorded data, \ the whole page must be deleted using the \"delPage\" command. This command will delete \ pages nomatter what their current state: waiting to start, currently active or finished. \ If no page number is supplied, all pages will be deleted, again regardless of their state \ so use with care.\n\n" "To ascertain which pages are still left in memory, the \"getPageList\" command can be \ used, returning a list of the pages in chronological order. NOTE: there may have been \ gaps of silence or other pages between consecutive pages in this list due to pages either \ being automatically or explicitly deleted as detailed above. To determine if there were \ gaps between pages due to all pages finishing processing before new ones are added, the \ commands \"getSkippedSampleCount\" and \"resetSkippedSampleCount\" can be used.\n\n" "The page that is currently being output is returned by \"getCurrentPosition\", along with \ an approximate sample position within the page. Additionally, the page number of the last \ completed page still resident in memory is returned by \"getLastFinishedPage\". NOTE: \ this might not be the most recent page to finish if that page has been deleted either \ during page condensing (ie contained no recorded data) or through the use of \"delPage\".\n\n" "Finally, the utility can be paused and resumed using the \"pause\" command. This will \ manipulate all output and recording channels simultaneously to ensure synchronisation is \ always maintained. This command can also be used to ascertain if the utility is currently \ running or paused."; if (nlhs < 1) { linewrapString(overviewString, SCREEN_CHAR_WIDTH, 0, 0, SCREEN_TAB_STOP); } else { plhs[0] = mxCreateString(overviewString); } return true; } #endif ltfat/thirdparty/Playrec/mex_dll_core.c0000664000175000017500000007062112612404251020160 0ustar susnaksusnak/* * Playrec * Copyright (c) 2006-2008 Robert Humphrey * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * 'Core' functions to be used when creating dll files for use with MATLAB. * The main function, mexFunction, allows multiple functions to be called from * within MATLAB through the single entry point function by specifying the name * of the required function/'command' as the first argument. The available * functions must be included in an array _funcLookup[] defined in an alternate * file with the number of available functions defined as _funcLookupSize. * * One such command might be a 'help' function such as that supplied below, * which must be specified in _funcLookup[] if required. To just have this * command, _funcLookup[] and _funcLookupSize can be specified as: const FuncLookupStruct _funcLookup[] = { {"help", showHelp, 0, 0, 1, 1, "Provides usage information for each command", "Displays command specific usage instructions.", { {"commandName", "name of the command for which information is required"} }, { {NULL} }, } } const int _funcLookupSize = sizeof(_funcLookup)/sizeof(funcLookupStruct); * (note that HELP_FUNC_LOOKUP is defined in mex_dll_core.h to ease the inclusion * of the help command) * * For a description of all the fields to be included, see the definition of * FuncLookupStruct in mex_dll_core.h * * Every time the entry-point function is called the function bool mexFunctionCalled(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) * is called with the same arguments as supplied to the entry-point function. This * function must have a definition supplied, which returns true to continue * distributing the function call to the appropriate function, or false for the * entry-point function to return immediately. * * If a command 'name' in _funcLookup[] matches the first argument supplied * then the number of arguments supplied (nrhs) and expected (nlhs) are * checked against those required. If these are valid the function is called, * or otherwise an error is generated including help on the command concerned. * Additionally, if the function returns false it indicates the arguments were * invalid and an error is generated. NOTE: The first argument to the entry- * point function (the name of the command) is NOT supplied to the * function called. That is, the function is called with arguments as though * it had been called directly from MATLAB. The min and max tests on nrhs * occur AFTER the removal of this argument. * * The function linewrapString can be used whenever text needs to be displayed * in the MATLAB command window. As its name suggests, this takes a string * and linewraps it to fit the width of display specified when calling the * function. This supports strings containing new line characters ('\n') and * tab characters ('\t'), as well as being able to indent the text relative to * the left hand side of the command window. */ #include "mex.h" #include "mex_dll_core.h" #include /* * FUNCTION: mexFunction(int nlhs, mxArray *plhs[], * int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * Returns: void * * Description: The entry point function for the MEX-file. Called whenever * the utility is used within MATLAB. Initially calls * mexFunctionCalled and, depending on the return value of this, * will continue to process the first argument supplied. * If no arguments are supplied, a list of all available commands * (as defined in _funcLookup) is displayed. Otherwise the * supplied command name is compared to each one in _funcLookup * until a match is found. If a match is found, the number of * arguments is compared to that expected (given in _funcLookup) * and if they are valid, the associated function is called. * If this function returns false, or no match is found for the * command name, or the incorrect number of arguments are supplied * then an error is generated. * * If CASE_INSENSITIVE_COMMAND_NAME is defined, the command name * matching is case insensitive, although a message is displayed * if the incorrect case has been used. * TODO: * */ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { #ifndef HAVE_PORTAUDIO #ifdef IS_OCTAVE const char id[] = "Octave:disabled_feature"; #else const char id[] = "Matlab:disabled_feature"; #endif mexErrMsgIdAndTxt (id, "PLAYREC: Support for the block processing framework was disabled when LTFAT was built."); #else int i; bool validFuncName = false; bool validArgNumber; unsigned int charCount, maxFuncNameLen = 0; char *namebuf; if(!mexFunctionCalled(nlhs, plhs, nrhs, prhs)) return; if(nrhs < 1) { if(nlhs < 1) { mexPrintf("\nFirst argument must be one of following strings:\n"); /* Determine the maximum length of any function name */ for(i=0; i<_funcLookupSize; i++) { if((_funcLookup[i].func!=NULL) && _funcLookup[i].name) maxFuncNameLen = max(maxFuncNameLen, strlen(_funcLookup[i].name)); } /* Display all function names and descriptions */ for(i=0; i<_funcLookupSize; i++) { if((_funcLookup[i].func!=NULL) && _funcLookup[i].name) { mexPrintf("%s", _funcLookup[i].name); /* Space out correctly, independant of function name length */ charCount = strlen(_funcLookup[i].name); while(charCount++ < maxFuncNameLen) mexPrintf(" "); if(_funcLookup[i].desc) mexPrintf(" - %s\n", _funcLookup[i].desc); else mexPrintf(" -\n"); } } } else { /* Return argument expected so return info on all available functions */ const char *fieldNames[] = {"name", "description", "minInputArgs", "maxInputArgs", "minOutputArgs", "maxOutputArgs", "help", "inputArgs", "outputArgs"}; const char *paramFieldNames[] = {"name", "description", "isOptional"}; int argCount, argNum; mxArray *pParamFields; plhs[0] = mxCreateStructMatrix(1, _funcLookupSize, sizeof(fieldNames)/sizeof(char*), fieldNames); for(i=0; i<_funcLookupSize; i++) { mxSetField(plhs[0],i,"name", mxCreateString(_funcLookup[i].name)); mxSetField(plhs[0],i,"description", mxCreateString(_funcLookup[i].desc)); mxSetField(plhs[0],i,"minInputArgs", mxCreateDoubleScalar(_funcLookup[i].minInputArgs)); mxSetField(plhs[0],i,"maxInputArgs", mxCreateDoubleScalar(_funcLookup[i].maxInputArgs)); mxSetField(plhs[0],i,"minOutputArgs", mxCreateDoubleScalar(_funcLookup[i].minOutputArgs)); mxSetField(plhs[0],i,"maxOutputArgs", mxCreateDoubleScalar(_funcLookup[i].maxOutputArgs)); mxSetField(plhs[0],i,"help", mxCreateString(_funcLookup[i].help)); argCount = 0; for(argNum = 0; argNum < MAX_ARG_COUNT; argNum++) { if((_funcLookup[i].inputArgs[argNum].name) && (_funcLookup[i].inputArgs[argNum].desc)) { argCount++; } } pParamFields = mxCreateStructMatrix(1, argCount, sizeof(paramFieldNames)/sizeof(char*), paramFieldNames); mxSetField(plhs[0],i,"inputArgs", pParamFields); argCount = 0; for(argNum = 0; argNum < MAX_ARG_COUNT; argNum++) { if((_funcLookup[i].inputArgs[argNum].name) && (_funcLookup[i].inputArgs[argNum].desc)) { mxSetField(pParamFields,argCount,"name", mxCreateString(_funcLookup[i].inputArgs[argNum].name)); mxSetField(pParamFields,argCount,"description", mxCreateString(_funcLookup[i].inputArgs[argNum].desc)); mxSetField(pParamFields,argCount,"isOptional", mxCreateDoubleScalar(_funcLookup[i].inputArgs[argNum].isOptional ? 1 : 0)); argCount++; } } argCount = 0; for(argNum = 0; argNum < MAX_ARG_COUNT; argNum++) { if((_funcLookup[i].outputArgs[argNum].name) && (_funcLookup[i].outputArgs[argNum].desc)) { argCount++; } } pParamFields = mxCreateStructMatrix(1, argCount, sizeof(paramFieldNames)/sizeof(char*), paramFieldNames); mxSetField(plhs[0],i,"outputArgs", pParamFields); argCount = 0; for(argNum = 0; argNum < MAX_ARG_COUNT; argNum++) { if((_funcLookup[i].outputArgs[argNum].name) && (_funcLookup[i].outputArgs[argNum].desc)) { mxSetField(pParamFields,argCount,"name", mxCreateString(_funcLookup[i].outputArgs[argNum].name)); mxSetField(pParamFields,argCount,"description", mxCreateString(_funcLookup[i].outputArgs[argNum].desc)); mxSetField(pParamFields,argCount,"isOptional", mxCreateDoubleScalar(_funcLookup[i].outputArgs[argNum].isOptional ? 1 : 0)); argCount++; } } } } return; } if(!mxIsChar(prhs[0])) { mexErrMsgTxt("First argument must be a string.\nSupply no arguments to list all valid command names."); } /* Provided we can get the string out of the first argument, try and find a match! */ if((namebuf=mxArrayToString(prhs[0]))!=NULL) { for(i=0; i<_funcLookupSize; i++) { #ifdef CASE_INSENSITIVE_COMMAND_NAME if((_funcLookup[i].name) && (_strcmpi(_funcLookup[i].name, namebuf)==0) && (_funcLookup[i].func!=NULL)) { if(strcmp(_funcLookup[i].name, namebuf)!=0) { mexPrintf("Using '%s' instead of '%s'\n", _funcLookup[i].name, namebuf); } #else if((_funcLookup[i].name) && (strcmp(_funcLookup[i].name, namebuf)==0) && (_funcLookup[i].func!=NULL)) { #endif validFuncName = true; validArgNumber = true; /* Call function 'removing' the first element of prhs, */ if((_funcLookup[i].minInputArgs >= 0) && (_funcLookup[i].minInputArgs > (nrhs-1))) { mexPrintf("Not enough input arguments specified\n"); validArgNumber = false; } if((_funcLookup[i].maxInputArgs >= 0) && (_funcLookup[i].maxInputArgs < (nrhs-1))) { mexPrintf("Too many input arguments specified\n"); validArgNumber = false; } if((_funcLookup[i].minOutputArgs >= 0) && (_funcLookup[i].minOutputArgs > nlhs)) { mexPrintf("Not enough output arguments specified\n"); validArgNumber = false; } if((_funcLookup[i].maxOutputArgs >= 0) && (_funcLookup[i].maxOutputArgs < nlhs)) { mexPrintf("Too many output arguments specified\n"); validArgNumber = false; } /* This will only call the function if there are valid numbers of arguments */ if(!validArgNumber || !(*_funcLookup[i].func)(nlhs, plhs, nrhs - 1, &prhs[1])) { /* Input arguments were not valid - display command help */ mexPrintf("\n%s - %s\n\n", _funcLookup[i].name, _funcLookup[i].desc); mexPrintf("Use the arguments \"'help', '%s'\" to see usage instructions\n\n", _funcLookup[i].name); mexErrMsgTxt("Invalid argument combination for command"); } break; } } if(!validFuncName) { mexErrMsgTxt("First argument is not a valid command call name.\nSupply no arguments to list all valid command names."); } mxFree(namebuf); } else { mexErrMsgTxt("Error obtaining string from first argument"); } #endif } #ifdef HAVE_PORTAUDIO /* * FUNCTION: showHelp(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) * * Inputs: nlhs - number of mexFunction output arguments * plhs - pointer to array of mexFunction output arguments * nrhs - number of mexFunction input arguments * prhs - pointer to array of mexFunction input arguments * * The first element of prhs is used, and should contain the name * of the command on which help is required * * Returns: false if more than one input argument is supplied in prhs or if the * first argument is not a string. Otherwise returns true. * * Description: Displays help information on the specified command using the * text stored in _funcLookup. Provided the first element of * prhs is a valid string, searches through _funcLookup until * a match is found. Then displays the help information on the * command including a list of arguments and their descriptions. * * If CASE_INSENSITIVE_COMMAND_NAME is defined, the command name * matching is case insensitive. * * TODO: * */ bool showHelp(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { int i, argNum; bool validFuncName, firstParam; char *namebuf; validFuncName = false; if((nrhs==1) && mxIsChar(prhs[0])) { if((namebuf=mxArrayToString(prhs[0]))!=NULL) { for(i=0; i<_funcLookupSize; i++) { #ifdef CASE_INSENSITIVE_COMMAND_NAME if((_funcLookup[i].name) && (_strcmpi(_funcLookup[i].name, namebuf)==0) && (_funcLookup[i].func!=NULL)) { if(strcmp(_funcLookup[i].name, namebuf)!=0) { mexPrintf("Found case insensitive match to supplied argument '%s'\n", namebuf); } #else if((_funcLookup[i].name) && (strcmp(_funcLookup[i].name, namebuf)==0) && (_funcLookup[i].func!=NULL)) { #endif validFuncName = true; /* Display the command usage on one line, nomatter how long it is */ mexPrintf("["); firstParam = true; /* Display left hand arguments */ for(argNum = 0; argNum < MAX_ARG_COUNT; argNum++) { if((_funcLookup[i].outputArgs[argNum].name) && (_funcLookup[i].outputArgs[argNum].desc)) { if(!firstParam) { mexPrintf(", "); } firstParam = false; if(_funcLookup[i].outputArgs[argNum].isOptional) mexPrintf("{%s}", _funcLookup[i].outputArgs[argNum].name); else mexPrintf("%s", _funcLookup[i].outputArgs[argNum].name); } } mexPrintf("] = %s(", _funcLookup[i].name); /* Display right hand arguments */ firstParam = true; for(argNum = 0; argNum < MAX_ARG_COUNT; argNum++) { if((_funcLookup[i].inputArgs[argNum].name) && (_funcLookup[i].inputArgs[argNum].desc)) { if(!firstParam) { mexPrintf(", "); } firstParam = false; if(_funcLookup[i].inputArgs[argNum].isOptional) mexPrintf("{%s}", _funcLookup[i].inputArgs[argNum].name); else mexPrintf("%s", _funcLookup[i].inputArgs[argNum].name); } } mexPrintf(")\n\n"); /* Display the body of the help for the command */ linewrapString(_funcLookup[i].help, SCREEN_CHAR_WIDTH, 0, 0, SCREEN_TAB_STOP); mexPrintf("\n"); /* Display information on input arguments if they exist */ firstParam = true; for(argNum = 0; argNum < MAX_ARG_COUNT; argNum++) { if((_funcLookup[i].inputArgs[argNum].name) && (_funcLookup[i].inputArgs[argNum].desc)) { if(firstParam) { firstParam = false; mexPrintf("Input Arguments:\n"); } mexPrintf(" %s %s\n", _funcLookup[i].inputArgs[argNum].name, _funcLookup[i].inputArgs[argNum].isOptional ? "{optional}" : ""); linewrapString(_funcLookup[i].inputArgs[argNum].desc, SCREEN_CHAR_WIDTH, 8, 0, SCREEN_TAB_STOP); } } /* Add an extra line if there's at least one paramter */ if(!firstParam) mexPrintf("\n"); /* Display information on output arguments if they exist */ firstParam = true; for(argNum = 0; argNum < MAX_ARG_COUNT; argNum++) { if((_funcLookup[i].outputArgs[argNum].name) && (_funcLookup[i].outputArgs[argNum].desc)) { if(firstParam) { firstParam = false; mexPrintf("Output Arguments:\n"); } mexPrintf(" %s %s\n", _funcLookup[i].outputArgs[argNum].name, _funcLookup[i].outputArgs[argNum].isOptional ? "{optional}" : ""); linewrapString(_funcLookup[i].outputArgs[argNum].desc, SCREEN_CHAR_WIDTH, 8, 0, SCREEN_TAB_STOP); } } /* Add an extra line if there's at least one paramter */ if(!firstParam) mexPrintf("\n"); } } mxFree(namebuf); } if(!validFuncName) { mexErrMsgTxt("No help available for specified command.\n" "Supply no arguments to list all valid command names."); } } else { mexPrintf("Help command requires a single string argument"); return false; } return true; } /* * FUNCTION: linewrapString( const char *pdisplayStr, * unsigned int maxLineLength, * unsigned int blockIndent, * int firstLineIndent, * unsigned int tabSize ) * * Inputs: *pdisplayStr pointer to the string to be displayed * maxLineLength the maximum line length (including any indent that may be required) * blockindent indentation to be applied to all lines * firstlineindent indent to be applied to first line in addition to blockindent * note that this is the first line of the text, * and not the first line of every paragraph. * tabSize size of tab stops (must be 0 or power of 2 eg 0, 1, 2, 4, 8, ...) * if not, will default to 4. * * Returns: number of lines required to display the text * * Description: Word wraps a line to fit the dimensions specified by breaking * at spaces where required. If a word is too long for one line * it is split at the end of the line. Tabs can be included and * will align to the next integer multiple of tabSize along the * line. When a line is wrapped, any white space between the last * character of one line and the first character of the next line * is removed. However, any white space following a forced line * break is not removed, although will only take up at most one * line. * * TODO: Do not add extra line if last line in string just contains spaces */ unsigned int linewrapString( const char *pdisplayStr, unsigned int maxLineLength, unsigned int blockIndent, int firstLineIndent, unsigned int tabSize ) { unsigned int lineStartChar = 0; /* index of character used at the start of the line */ unsigned int lineEndChar; /* index of last character on the line (includes white space) */ int lastPrintChar; /* index of the last printable character on the line */ int lastPrintCharTmp; /* temporary index of the last printable character on the line */ bool stringEnd = false; /* true -> the end of the string has been reached */ unsigned int thisLineIndent; /* the limit of the length of this line */ unsigned int lineNumber = 0; /* Line number being displayed */ unsigned int lineCharPos; /* Position on the line (0 is first character) */ bool tooLongWord; /* used to determine if a word is longer than a single line */ unsigned int tabSpaceTmp; /* temporary counter used to add the correct number */ /* of spaces to effectively insert a tab */ unsigned int i; /* general counting index */ unsigned int tabStopBitMask = tabSize - 1; /* Mask used when calculating the position * of the next tab stop */ if(tabSize == 0) { tabStopBitMask = 0; } else if(tabStopBitMask & tabSize) { /* tabSize is not power of 2 */ tabSize = 4; tabStopBitMask = tabSize - 1; } /* Don't even attempt to display if the formatting values supplied are silly */ if(!pdisplayStr || !pdisplayStr[0] || (maxLineLength < 1) // || (blockIndent + firstLineIndent < 0) // this is False all the time || (maxLineLength < blockIndent) || (maxLineLength < blockIndent + firstLineIndent)) { stringEnd = true; } /* step through each line, one at a time */ while( !stringEnd ) { lineNumber++; /* Calculate available length of this line */ thisLineIndent = blockIndent; if(lineNumber==1) thisLineIndent += firstLineIndent; /* Set 'defaults' for the line */ lineEndChar = lineStartChar; lastPrintChar = lineStartChar - 1; lastPrintCharTmp = lineStartChar - 1; lineCharPos = thisLineIndent; tooLongWord = true; /* go though to the end of the line, keeping track of the last printing character * or find a new line character if that occurs before the end of the line */ for( i = lineStartChar; ( lineCharPos < maxLineLength ) && pdisplayStr[ i ]; i++ ) { if( pdisplayStr[ i ] == ' ' ) { lineEndChar = i; lastPrintChar = lastPrintCharTmp; lineCharPos++; tooLongWord = false; } else if( pdisplayStr[ i ] == '\t' ) { lineEndChar = i; lastPrintChar = lastPrintCharTmp; tabSpaceTmp = tabSize - (lineCharPos & tabStopBitMask); lineCharPos += tabSpaceTmp; tooLongWord = false; } else if( pdisplayStr[ i ] == '\n' ) { /* Do not include new line character at end of current line */ lineEndChar = i; lastPrintChar = lastPrintCharTmp; tooLongWord = false; break; } else { lineCharPos++; lastPrintCharTmp = i; } } if(!pdisplayStr[ i ]) { /* end of the string has been reached */ lineEndChar = i; lastPrintChar = i - 1; tooLongWord = false; stringEnd = true; } /* Generate initial padding */ lineCharPos = thisLineIndent; for( i = 0; i < thisLineIndent; i++) mexPrintf( " " ); /* display the line of text going up to either the last printing character * or the end of the line if the word is longer than a single line */ for( i = lineStartChar; (((int)i <= lastPrintChar) || tooLongWord) && ( lineCharPos < maxLineLength ); i++ ) { if( pdisplayStr[ i ] == '\t' ) { tabSpaceTmp = tabSize - (lineCharPos & tabStopBitMask); lineCharPos += tabSpaceTmp; while(tabSpaceTmp--) mexPrintf( " " ); } else { mexPrintf( "%c", pdisplayStr[ i ] ); lineCharPos++; } /* Keep track of end of line if tooLongWord */ if(tooLongWord) { lastPrintChar = i; lineEndChar = i; } } mexPrintf("\n"); /* Now find the last non printing character of the line */ if(pdisplayStr[ lineEndChar ] && pdisplayStr[ lineEndChar ] != '\n') { /* Get to the end of the white space at the end of the line */ while((pdisplayStr[ lineEndChar + 1 ] == ' ') || (pdisplayStr[ lineEndChar + 1 ] == '\t')) { lineEndChar++; } if(pdisplayStr[ lineEndChar + 1 ] == '\n') { /* If at the end of all this white space there's a new line * include it in the current line */ lineEndChar++; } if(!pdisplayStr[ lineEndChar + 1 ]) { /* end of the string has been reached */ lineEndChar++; stringEnd = true; } } /* make the first character of the next line the next character in the string */ lineStartChar = lineEndChar + 1; } return lineNumber; } #endif ltfat/thirdparty/Playrec/license_playrec.txt0000664000175000017500000000227212612404251021257 0ustar susnaksusnakCopyright © 2006-2008 Robert Humphrey Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Although not required by the license it is requested that users of Playrec inform the author to help understand the distribution of the utility. ltfat/thirdparty/Playrec/ltfatresample.h0000664000175000017500000002143312612404251020371 0ustar susnaksusnak/* * ltfatresample.h * * This is an attempt for a self-containded arbitrary factor resampling API * working with streams of blocks of arbitrary lengths. * * How does it work? * * The approach could probably be called hybrid. A simple polynomial * interpolation is used when doing upsampling (ratio > 1). An anti-aliasing * filter is used when doing subsampling (ratio<0.95) followed by a polynomial * interpolation. The antialiasing IIR filter is designed such that the overall * frequency response have almost linear phase freq. response (less so close to * the passband-edge frequency) and negligible rippling in the passband (one over * stopband attenuation). * * I opted for IIR filters over FIR because of two reasons: * * 1) I did not want any external dependency, which basically rules out * all FIR filters already, since they require FFT implementation in * order to be fast. * 2) IIR filters used require only a handfull of their coefficients to be * stored (see "filtcoefs.h"). This is in sharp contrast with e.g. long * sinc kernel techniques which require storing thousands of coefficients. * See e.g. libsamplerate * * The IIR filter design used is taken from chapter V in this book: * * Milic L.: Multirate Filtering for Digital Signal Processing: * MATLAB Applications, 2008, ISBN:1605661783 * * The filters are called Elliptic Minimal Q-Factors (EMQF). They are derived * from a prototype halfband lowpass IIR filter consisting of parallel * combination of two all pass filters. Both allpass filters consist of * serially connected 2nd order allpass filters. Using a simple procedure * described in * Chapter: IIR STRUCTURES WITH TWO ALL-PASS SUBFILTERS: APPLICATIONS * OF EMQF FILTERS, * the prototype filter passband edge frequency can be changed while keeping (almost) * the same structure (two branches, chains of allpass filters). * * The coefficients defining the prototype half-band filter are stored * in "filtcoefs.h". The file is generated by a Matlab script "genfiltcoefs.m". * The header file defines a double array "EMQFcoefs" of length EMQFCOEFLEN * defined as a macro in the same file. The coefficients are the beta * coefficients from (5.36) from the book. * * The passband edge frequency is set to FPADJ*fs_target/2. FPADJ macro is set in * "config.h". * * * Copyright (C) 2014 Zdenek Prusa . * This file is part of LTFAT http://ltfat.github.io * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #ifndef _LTFATRESAMPLE_H #define _LTFATRESAMPLE_H /* malloc, calloc, free etc. */ #include #include #include #include #include /* The following defines SAMPLE, FADJ */ #include "config.h" /* Just to be on the safe side, define all mandatory compile time params. */ #ifndef RESAMPLING_TYPE # define RESAMPLING_TYPE BSPLINE #endif #ifndef FPADJ # define FPADJ 0.92 #endif /* Here we include a generated file containing prototype filters */ /* We use elliptic minimal Q-factors IIR filters (EMQF) from * Multirate Filtering for DSP: MATLAB Applications by Ljiljana Milic, chapter V * */ #include "filtcoefs.h" #if !defined(EMQFCOEFLEN) || EMQFCOEFLEN<1 # error Undefined EMQFCOEFLEN. Check filtcoefs.h #endif #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /* * POLYNOMIAL INTERPOLATION * * * */ /* Interpolation type */ typedef enum { LINEAR = 0, /* Mere lin. intp. */ LAGRANGE, /* 6point Lagrange interpolator */ BSPLINE /* 6point B-spline interpolator */ } resample_type; /* Error code to check */ typedef enum { RESAMPLE_OK = 0, RESAMPLE_NULLPOINTER, RESAMPLE_OVERFLOW, RESAMPLE_UNDERFLOW } resample_error; typedef struct resample_plan_struct *resample_plan; /********************************************** ************** Public API ****************** **********************************************/ /*! \brief Initialize resampling plan * * @param restype polynomial interpolation type * @param ratio sampling rate change ratio fs_target/fs_source * @see resample_execute() * @see resampe_done() * @return An opaque pointer to a struct holding all the resampling parameters */ resample_plan resample_init(const resample_type restype, const double ratio); /*! \brief Reset resampling plan * * @param restype polynomial interpolation type */ void resample_reset(const resample_plan rp); /*! \brief Execute resampling * * in might get overwritten by a low-pass filtered version * * Either Lin or Lout should be fixed to a required value and the other * one obtained by resample_nextoutlen, resample_nextinlen respectivelly. * * Note: When using Lout fixed, the routine might internally store more values. * * The function returns RESAMPLE_OVERFLOW if it could have produce more samples, but * Lout (plus internal storage buffer) is too small. The overflowing samples are * discarded. * * The function returns RESAMPLE_UNDERFLOW if the number of input samples is not * enough to calculate all required output samples. The remaining output samples are set * to zeros. * * If one of the overflows occurs, the stream is reset to avoid problems in next * iterations. * * @param rp resampling plan * @param in input array * @param Lin input array length * @param out output array * @param Lout output array length * @see resample_init() * @see resampe_done() * @return error code */ resample_error resample_execute(const resample_plan rp, SAMPLE* in, const size_t Lin, SAMPLE* out, const size_t Lout); /*! \brief Get next output array length * * The number of output samples can vary. Internally, rp stores a sample * counter which together with Lin determine length of output array next * time resample_execute is called. * * Use when input array length is fixed. * * @param rp resampling plan * @param Lin input array length * @see resample_execute() * @return next output array length */ size_t resample_nextoutlen(const resample_plan rp, size_t Lin); /*! \brief Get next input array length * * Complementary to resample_nextoutlen. * * Use to get "compatible" input buffer length when Lout is required * */ size_t resample_nextinlen(const resample_plan rp, size_t Lout); /*! \brief Move the internal sample counter * * @param rp resampling plan * @param Lin input array length */ void resample_advanceby(const resample_plan rp, const size_t Lin, const size_t Lout); /*! Free all resources * * @param ef pointer to an opaque pointer */ void resample_done(resample_plan *rp); /********************************************** ************ End of public API ************** **********************************************/ /* * Functions doing the actual resampling * */ resample_error resample_execute_polynomial(const resample_plan rp, const SAMPLE* in, const size_t Lin, SAMPLE* out, const size_t Lout); /* * Functions generating one sample according to the polynomial * interpolation technique. * Function prototype is SAMPLE fcn(const double,const SAMPLE*) */ SAMPLE lagrange_interp(const double x, const SAMPLE *yin); SAMPLE bspline_interp(const double x, const SAMPLE *yin); SAMPLE linear_interp(const double x, const SAMPLE *yin); /********************************************** ************ EMQF filters ************** **********************************************/ /* Struct for holding EMQF filter */ typedef struct EMQFfilters_struct *EMQFfilters; /*! \brief Initialize EMQF filter structurehttp://github.com/ltfat/ltfat/issues * * fc can be in range ]0,1[, otherwise the function returns NULL * * @param fc passband edge frequency * @return structure holding all partial filters (and their inner states) */ EMQFfilters emqffilters_init(const double fc); /*! \brief Do the filtering using the EMQF filter * * @param ef filtering struct * @param in input array * @param Lin input/output array length * @param out output array */ void emqffilters_dofilter(EMQFfilters ef, const SAMPLE* in, const size_t Lin, SAMPLE* out); /*! Free all resources * * @param ef pointer to an opaque pointer */ void emqffilters_done(EMQFfilters* ef); #endif ltfat/thirdparty/Playrec/Makefile_mac0000664000175000017500000000154112612404251017633 0ustar susnaksusnakifndef MATLABROOT $(warning MATLABROOT variable is undefined. Using default MATLABROOT="/Applications/MATLAB_R2013a.app/") MATLABROOT=/Applications/MATLAB_R2013a.app/ endif ifndef EXT $(warning EXT variable is undefined. Using default EXT=mexmaci64) EXT=mexmaci64 endif ifndef ARCH $(warning ARCH variable is undefined. Using default ARCH=maci64 ) ARCH=maci64 endif ifndef PORTAUDIO PORTAUDIO=-lportaudio endif include ../../src/ostools.mk MEXTGT=playrec.$(EXT) MEXSRC=mex_dll_core.c pa_dll_playrec.c ltfatresample.c LIBS= -L. -L"$(MATLABROOT)/bin/$(ARCH)" -lmex -lmx -lm $(PORTAUDIO) INCLUDES= -I"$(MATLABROOT)/extern/include" -I. -I../../src/thirdparty CFLAGS=-fPIC -std=c99 -O3 -Wall -shared -DMATLAB_MEX_FILE -DHAVE_PORTAUDIO all: $(CC) $(CFLAGS) $(INCLUDES) $(MEXSRC) $(LIBS) -o $(MEXTGT) clean: $(RM) $(MEXTGT) .PHONY: all clean ltfat/thirdparty/Playrec/Makefile_unix0000664000175000017500000000210512612404251020053 0ustar susnaksusnak# To run this makefile, you must provide your system specific EXT and MATLABROOT # variables on the command line e.g.: # # make -f Makefile_unix MATLABROOT="/usr/local/MATLAB/R2011a" EXT=mexa64 ARCH=glnxa64 ifndef MATLABROOT $(warning MATLABROOT variable is undefined. Using default MATLABROOT="C:\Program Files\MATLAB\R2011b" ) MATLABROOT=/usr/local/MATLAB/R2011a endif ifndef EXT $(warning EXT variable is undefined. Using default EXT=mexa64 ) EXT=mexa64 endif ifndef ARCH $(warning ARCH variable is undefined. Using default ARCH=win64 ) ARCH=glnxa64 endif ifndef PORTAUDIO PORTAUDIO=-lportaudio endif include ../../src/ostools.mk MEXTGT=playrec.$(EXT) MEXSRC=mex_dll_core.c pa_dll_playrec.c ltfatresample.c LIBS=-Wl,--no-undefined -L. -L"$(MATLABROOT)/bin/$(ARCH)" -lmex -lmx -lm $(PORTAUDIO) INCLUDES= -I"$(MATLABROOT)/extern/include" -I. -I../../src/thirdparty CFLAGS=-static-libgcc -fPIC -std=c99 -O3 -Wall -shared -DMATLAB_MEX_FILE -DHAVE_PORTAUDIO all: $(CC) $(CFLAGS) $(INCLUDES) $(MEXSRC) $(LIBS) -o $(MEXTGT) clean: $(RM) $(MEXTGT) .PHONY: all clean ltfat/CITATION0000664000175000017500000000120612612404251012715 0ustar susnaksusnakTo cite LTFAT in publications please use: Peter L. Søndergaard, Bruno Torrésani, Peter Balazs. The Linear Time-Frequency Analysis Toolbox. International Journal of Wavelets, Multiresolution Analysis and Information Processing, 10(4), 2012. A BibTex entry for LaTex users: @article{ltfatnote015, author = "Peter L. S{\o}ndergaard and Bruno Torr\'esani and Peter Balazs", title = {{The Linear Time Frequency Analysis Toolbox}}, journal = "International Journal of Wavelets, Multiresolution Analysis and Information Processing", year = 2012, volume = 10, number = 4, doi = "10.1142/S0219691312500324" } ltfat/INDEX0000664000175000017500000001204612612404251012356 0ustar susnaksusnakltfat >> Time-frequency analysis and Wavelets signals ctestfun noise pinknoise expchirp bat batmask greasy cocktailparty gspi linus ltfatlogo otoclick traindoppler cameraman lichtenstein ltfattext quadratic ambiguityfunction wignervilledist drihaczekdist quadtfdist plotquadtfdist operators operatornew operator ioperator operatoradj operatorappr operatoreigs operatormatrix framemul iframemul framemuladj framemulappr framemuleigs gabmulappr spreadop spreadinv spreadadj spreadfun spreadeigs deprecated convolve gabelitistlasso gabgrouplasso gablasso gabmuleigs gabmul framematrix iufilterbank iunsdgt iunsdgtreal tfmat uwfbtbounds uwpfbtbounds sigproc rms normalize gaindb crestfactor uquant firwin firkaiser fir2long long2fir firfilter blfilter warpedblfilter pfilt magresp transferfunction pgrpdelay rampup rampdown rampsignal thresh largestr largestn dynlimit groupthresh rgb2jpeg jpeg2rgb qam4 iqam4 gabor tconv dsft zak izak col2diag s0norm dgt idgt isgram isgramreal dgt2 idgt2 dgtreal idgtreal gabwin projkern dgtlength dwilt idwilt dwilt2 idwilt2 wmdct iwmdct wmdct2 iwmdct2 wil2rect rect2wil wilwin dwiltlength gabdual gabtight gabfirdual gaboptdual gabfirtight gabopttight gabconvexopt gabprojdual gabmixdual wilorth wildual gabframebounds gabrieszbounds wilbounds gabdualnorm gabframediag wilframediag gabphasegrad gabphasederiv gabreassign gabreassignadjust constructphase constructphasereal phaselock phaseunlock symphase matrix2latticetype latticetype2matrix shearfind noshearlength tfplot plotdgt plotdgtreal plotdwilt plotwmdct sgram gabimagepars resgram instfreqplot phaseplot blockproc block blockdevices blockread blockplay blockpanel blockpanelget blockdone blockwrite blockframeaccel blockframepairaccel blockana blocksyn blockfigure blockplot ltfatplay demos demo_dgt demo_gabfir demo_wavelets demo_imagecompression demo_audiocompression demo_audiodenoise demo_ofdm demo_audioshrink demo_gabmulappr demo_bpframemul demo_frsynabs demo_filterbanksynchrosqueeze demo_nsdgt demo_pgauss demo_pbspline demo_gabmixdual demo_framemul demo_phaseplot demo_phaseret demo_nextfastfft demo_filterbanks demo_audscales demo_auditoryfilterbank demo_wfbt demo_blockproc_basicloop demo_blockproc_paramequalizer demo_blockproc_denoising demo_blockproc_slidingsgram demo_blockproc_slidingcqt demo_blockproc_slidingerblets demo_blockproc_dgtequalizer demo_blockproc_effects auditory semiaudplot audtofreq freqtoaud audspace audspacebw erbtofreq freqtoerb erbspace erbspacebw audfiltbw rangecompress rangeexpand gammatonefir nonstatgab nsdgt unsdgt insdgt nsdgtreal unsdgtreal insdgtreal nsgabdual nsgabtight nsgabframebounds nsgabframediag plotnsdgt plotnsdgtreal wavelets fwt ifwt fwt2 ifwt2 ufwt iufwt fwtlength fwtclength wfbt iwfbt uwfbt iuwfbt wpfbt iwpfbt uwpfbt iuwpfbt wpbest wfbtlength wfbtclength wpfbtclength dtwfb idtwfb dtwfbreal idtwfbreal wfbtinit dtwfbinit wfbtput wfbtremove wfbt2filterbank wpfbt2filterbank dtwfb2filterbank fwtinit wfbtbounds wpfbtbounds dtwfbbounds plotwavelets wfiltinfo wfiltdtinfo wavfun wavcell2pack wavpack2cell wfilt_algmband wfilt_cmband wfilt_coif wfilt_db wfilt_dden wfilt_dgrid wfilt_hden wfilt_lemarie wfilt_matlabwrapper wfilt_mband wfilt_remez wfilt_symds wfilt_spline wfilt_sym wfilt_symdden wfilt_symorth wfilt_symtight wfilt_qshifta wfilt_qshiftb wfilt_oddevena wfilt_oddevenb wfilt_optsyma wfilt_optsymb wfilt_ddena wfilt_ddenb wfiltdt_qshift wfiltdt_optsym wfiltdt_oddeven wfiltdt_dden filterbank filterbank ufilterbank ifilterbank filterbankwin filterbanklength filterbanklengthcoef cqt icqt erblett ierblett cqtfilters erbfilters warpedfilters audfilters filterbankdual filterbanktight filterbankrealdual filterbankrealtight filterbankbounds filterbankrealbounds filterbankresponse filterbankfreqz nonu2ufilterbank u2nonucfmt nonu2ucfmt plotfilterbank filterbankphasegrad filterbankreassign filterbanksynchrosqueeze fourier fftindex modcent floor23 floor235 ceil23 ceil235 nextfastfft dft idft fftreal ifftreal gga chirpzt fftgram plotfft plotfftreal involute peven podd pconv pxcorr lconv lxcorr isevenfunction middlepad expwave pchirp pgauss psech pbspline shah pheaviside prect psinc pherm hermbasis dfracft ffracft fftresample dctresample pderiv fftanalytic dcti dctii dctiii dctiv dsti dstii dstiii dstiv frames frame framepair framedual frametight frameaccel frana frsyn frsynmatrix frgramian frameoperator framediag franaiter frsyniter plotframe framegram framebounds framered framelength framelengthcoef frameclength framecoef2native framenative2coef framecoef2tf frametf2coef framecoef2tfplot franabp franalasso franagrouplasso frsynabs base ltfatstart ltfatstop ltfathelp ltfatmex ltfatbasepath isoctave ltfatarghelper ltfatgetdefaults ltfatsetdefaults scalardistribute mulaclab ltfat/COPYING0000664000175000017500000010451312612404251012620 0ustar susnaksusnak GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ltfat/lib/0000775000175000017500000000000012612404251012327 5ustar susnaksusnakltfat/PKG_ADD0000644000175000017500000000036612612404251012600 0ustar susnaksusnak# Only execute it if it exists on the path. PKG_ADD also gets called from the directory # where the binaries are installed, and here ltfatstart should not be called. if exist("ltfatstart","file") # Start ltfat quietly ltfatstart(0); end; ltfat/NEWS0000664000175000017500000001017212612404251012261 0ustar susnaksusnakVersion 2.1.1 * New function for computing higher order phase derivatives: gabphasederiv * New function doing the adjustable reassignment: gabreassignadjust * New function for the Gabor transform phase reconstruction: constructphase, constructphasereal * New filterbank-generating function: audfilters * New generic quadratic TF distribution function: quadtfdist * New functions for reading and writing wav files (since wavread and wavwrite were removed in Matlab 2015b): wavload, wavsave (taken from VOICEBOX http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html) Version 2.1.0 * New general filterbank generating routine: warpedfilters * New filterbank spectrogram reassignment function: filterbankreassign * New quadratic time-frequency distributions * Octave package compiles on Windows (MXE-Octave). * Better alignment of wavelet filters. Version 2.0.1 * Included a test suite (test_all_ltfat). -------- LTFAT 2.0 --------------------------------------------- Main features of LTFAT 2.0 are the the wavelets module, the frames framework and the real-time block processing framework. Actual news: * Added dual-tree complex wavelet transform, general dual-tree wavelet filterbanks and $M$-band transforms. * Blockproc. framework now supports any sampling rate from interval 4-96kHz trough on-the-fly resampling in the background. * Fixed compilation issue with gcc 4.7. * Warning is shown if portaudio is not found during package installation. * Warning is shown if JRE is run in a headless mode during package loading. Version 1.4.5 * Added franabp - solving a basis pursuit problem argmin ||c||_1 s.t. Fc = f for an arbitrary frame * Wavelet routines correctly included in the frames framework. * Added blockwrite method for a blockwise storage of audio data to a wav file. * New demos: demo_blockproc_effects, demo_filterbanks, demo_wavelets, demo_wfbt, demo_bpframemul, demo_phaseret Version 1.4.4 * New routines for calculating Gabor dual widows using convex optimization * New block processing demos: sliding CQT and Erblets Version 1.4.3 * Added chirped Z-transform * Block processing demos now work in Octave (on Linux) * New zoomig features for blockplot Version 1.4.2 * The filterbanks algorithms are now much faster because all the algorithms have been implemented in the C backend * franalasso can now use the the FISTA algorithm * A generalization of the Goertzel algorithm "gga" has been added". Version 1.4.1 * Major change in the output format from the wfilt_ functions * Experimental filter backend added to handle filters defined on the frequency side. * Bugs fixed for mex interfaces compilation on Mac ---------- LTFAT 1.4 ------------------------------------------ The major feature of the 1.4 series is that the backend now also works in single precision. Work on the wavelet toolbox is still ongoing. ---------- LTFAT 1.3 ------------------------------------------ This is a development release. It is fully backwards compatible with the LTFAT version 1.0 and 1.2 series and contain bugfixes, but the contents of the "wavelets" subdirectory is in development, and the interfaces described herein may change during the 1.3 development cycle. ---------- LTFAT 1.2 ------------------------------------------ Version 1.2 is backwards comptatible with the 1.0 series, but introduces the "frames" framework, which is an object-oriented interface to the various frames in LTFAT. It does not actually use the object oriented features in Octave / Matlab, instead it uses a simple struct to keep track of things. -------- LTFAT 1.0 --------------------------- The Linear Time-Frequency Analysis Toolbox (LTFAT) is a free software toolbox (GPLv3) written in the Matlab/Octave scripting language. It comprises more than 200 different functions in the area of Fourier analysis, signal processing and time-frequency analysis. The toolbox can be downloaded from http://ltfat.sourceforge.net. The toolbox can be used for both educational, research and computational purposes. It has a backend implemented in C, which can be compiled to speed up all computational intensive functions. ltfat/DESCRIPTION0000664000175000017500000000155312612404251013273 0ustar susnaksusnakName: LTFAT Version: 2.1.1 Date: 2015-10-23 Author: Peter L. Soendergaard Maintainer: Zdenek Prusa Title: The Large Time-Frequency Analysis Toolbox Description: The Large Time/Frequency Analysis Toolbox (LTFAT) is a Matlab/Octave toolbox for working with time-frequency analysis, wavelets and signal processing. It is intended both as an educational and a computational tool. The toolbox provides a large number of linear transforms including Gabor and wavelet transforms along with routines for constructing windows (filter prototypes) and routines for manipulating coefficients. License: GPLv3+ Depends: octave (>= 3.8.0) BuildRequires: fftw3 [Debian] libfftw3-3, lapack [Debian] liblapack3, blas [Debian] libblas3, portaudio [Debian] portaudio19-dev Java Runtime [Debian] default-jre Url: http://ltfat.github.io/ ltfat/inst/0000775000175000017500000000000012612404256012543 5ustar susnaksusnakltfat/inst/signals/0000775000175000017500000000000012612404256014203 5ustar susnaksusnakltfat/inst/signals/Clar.wav0000664000175000017500000020005412612404251015577 0ustar susnaksusnakRIFF$WAVEfmt +"VdataµþµþÚþÍþœþæþòþÚþ¨þÁþþþÁþþÚþÿòþkþ¨þÁþÚþ¨þÁþæþÿÁþÁþƒþœþ<ÿƒþRþþþÿÁþƒþœþkþÍþ¨þþþþÍþÚþÚþœþÁþµþRþƒþHÿÿòþÁþ0ÿòþ¨þœþHÿTÿæþÁþÿ<ÿƒþkþæþÿòþÚþyÿÿÁþÚþwþÁþTÿ0ÿæþµþ0ÿ#ÿÚþœþÏÿ ÿwþ-þ†ÿ†ÿkþÚþÚþ ÿþÚþHÿ†ÿyÿÚþæþƒþþÚþþþ<ÿ<ÿÿæþþþæþÍþòþÁþœþµþRþ_þÁþ<ÿÁþ¨þ¨þaÿµþwþ¨þkþƒþµþÿHÿHÿTÿTÿFþ³ýaÿÃÿþþkþÿHÿæþþ’ÿžÿÿ¨þþþÁþÍþ 1žÿiýäý0ÿ †ÿµþµþ#ÿ ÿýkþ$1µþšýuýžÿyÿ<ÿËýÿ ÿÿ×ýþþIÏÿœþ¨þkþwþæþ’ÿÃÿyÿþþÁþËý]ý_þ<ÿ#ÿwþTÿþþ<ÿ ÿ0ÿòþ!þÿ0ÿ’ÿæþ’ÿŸTÿ_þ8ýµþyÿ_þœþ=’ÿƒþ þ<ÿyÿòþ³ý&#ÿÏÿ]ý#ÿz:þðýþ3Rþ#ÿ þþ×ý<ÿmÿžÿòþkþPýþæþÏÿæþÁþz¬ðý8ýTÿwþþ ÿHÿÿ’ÿÁþ¦ýœþÚþÍþæþ]ýV0ÿ¦ýkþèÿkþ°ü³ýTÿÿÍþ×ý:þþþúüPýþÚþmÿÃÿÍþÁþðý½üšýÚþœþkþÜÿzyÿ¦ýîüþ1Ãÿ-þüý ÿ= þ8ý#ÿIþþü]ý““ÿkþòþæþ¨þ-þÿ‡æþþ þÁþÜÿ†ÿÁþ†ÿþþRþÚþ<ÿnyÿRþÃÿ#ÿÁþÃÿFþkþ<ÿ·ÿƒþÿÜÿÃÿ:þTÿƒþ ÿæþ¨þTÿHÿ·ÿHÿÁþÿ¨þÿHÿ#ÿ#ÿ’ÿmÿæþaÿÿ_þÍþþwþ†ÿ µþþ¦ý-þÏÿ†ÿ¨þ“Ý ÿ¦ý¦ýžÿÚþ_þÏÿžÿwþyÿþËý:þæþþèÿžÿ×ýkþ<ÿµþƒþæþaÿÚþúüý:þÕüÁþµþRþüý þ#ÿyÿüýNü-þÏÿRþ!þòþ þ:þÍþ!þ ÿ0ÿ!þ:þƒþäýšý0ÿœþ³ýƒþ8ýƒþœþšý_þþ_þðý_þ¨þœþµþÍþÁþwþ!þþþ ÿkþ!þFþæþ ÿmÿÜÿ ÿòþèÿÁþƒþÚþ#ÿ=ÏÿHÿƒþ<ÿHÿ0ÿmÿþmÿz†ÿðýwþæþmÿÁþmÿ<ÿÜÿþ:þ’ÿÍþ#ÿµþÏÿŸaÿ#ÿ’ÿèÿÏÿµþÍþÃÿHÿaÿmÿ<ÿœþaÿFþÿ0ÿaÿaÿ-þµþ þ#ÿkþ†ÿüý:þ#ÿ#ÿµþ:þRþªÿ’ÿðýÍþèÿèÿ!þ¦ý¦ýèÿHÿRþÁþmÿüýþFþ¨þÍþòþmÿòþ¿ý×ý’ÿµþšýƒþ_þkþòþäý þýþòþRþŽýÁþ·ÿþ¿ýüýþÚþËý+ýÍþ#ÿòþ0ÿÿœþþFþÍþ†ÿ:þHÿ·ÿƒþ8ýÚþœþ ÿüýÍþœþÁþÁþªÿTÿþÍþÿRþòþ#ÿ ªÿ ÿ_þ0ÿ¨þ_þ†ÿ†ÿ’ÿ·ÿ<ÿòþÁþ_þ†ÿæþèÿnmÿµþµþæþHÿ’ÿyÿ‡’ÿòþÜÿÁþ_þRþHÿyÿèÿæþwþaÿ0ÿÁþÁþƒþyÿÏÿÏÿmÿþ<ÿµþüý¦ýaÿTÿRþœþÚþ:þ!þœþ0ÿæþ þæþ<ÿÁþ:þµþ¨þœþþþ-þFþþ†ÿµþüý¿ýwþµþ_þ þ!þÁþ#ÿœþüýœþ_þÁþ þ³ýFþwþ ÿ-þÚþæþÃÿþýþ:þƒþþþkþkþ:þRþ-þµþôÿ<ÿžÿÚþÿHÿÁþÍþ<ÿaÿÁþÚþ=yÿyÿÚþÏÿHÿ-þÿÿõôÿ þþÍþ ÿmÿÃÿyÿ ÿ#ÿÍþþþV$†ÿaÿÃÿ$mÿRþÁþ aÿòþI“ ÿFþ0ÿÏÿyÿ0ÿÿæþæþFþ-þFþ ÿ ÿÚþþµþ<ÿƒþƒþRþðýwþþþòþÍþFþƒþ!þDýDý¦ýyÿÚþ!þ³ýšý×ýFþðýiýÁþ#ÿFþËýŽýüýRþFþýšýRþkþ!þ+ýšý:þwþ!þuý8ý_þæþËýðý×ýkþðýƒþÁþ#ÿªÿwþþòþ¨þ ÿ Íþ×ýƒþÁþ·ÿyÿTÿ·ÿòþµþäý ÿ†ÿ’ÿmÿaÿmÿæþwþ†ÿmÿ$kþ·ÿVòþòþmÿ1$TÿÜÿôÿÍþæþôÿ=XÄòþþþyÿ=n†ÿÏÿÝ$Áþ×ýHÿ’ÿ×ýHÿèÿòþ·ÿ0ÿÿRþƒþ0ÿI<ÿ†ÿmÿþþ¦ýþþþHÿþüýÍþÏÿ¨þ+ýý¨þÍþòþµþþþ ÿËý¤ügüÉüüýwþƒþäý×ýšýRþ½ügüŽýkþšýýý¤üRþFþRþý³ýäýüý8ýËý†ÿæþ¿ýœþµþFþšýRþ#ÿæþ+ýƒþþþþ¨þËý¨þmÿËý!þ-þRþðýƒþ·ÿ=†ÿ-þýþþœþyÿ¸ÝÐÿFþЬ†ÿòþ·ÿÿRþ’ÿK3zžÿyÿmÿn¸?‡kþwþmÿHÿÁþŸß<ÿwþ þ’ÿÏÿwþ_þ=ÏÿþÁþ·ÿ =ÿRþÚþ<ÿTÿžÿžÿÚþ:þuýþÃÿèÿÚþžÿæþPýý³ýòþäýý:þÍþÁþ¨þÁþþËý6üýwþkþý!þ!þ8ýNüsüý·ÿæþýËýÁþþþý)ü¦ýHÿÁþðýmÿHÿƒþ8ý×ýœþkþ!þ#ÿ þFþÍþäýþÍþÜÿyÿ0ÿæþ³ý#ÿœþkþTÿÍþÁþžÿ=IyÿkþÁþwþ:þªÿ1zæþ_þƒþyÿœþªÿ3=HÿªÿÝ’ÿ<ÿ_þÚþôÿn1ŸyÿŽý¤üPýþ¬ÝaÿæþËýPýÍþkþnX0ÿFþÁþkþÿôÿªÿòþÚþ³ýwþwþ:þŸn¦ýNüËýþ#ÿmÿ†ÿTÿÿðýËý þDý_þyÿþšý¦ýµþýüÉüþþüýüýËýwþ ÿ_þ-þšý þèÿœþ]ýµþôÿðýŽý!þ!þüýþþòþmÿ:þ þ#ÿwþúüþªÿ$òþµþ-þýPýµþyÿ“I ÿüýuý¿ý!þþþèÿªÿ#ÿ†ÿÃÿþwþbÏÿèÿÜÿ“dÏÿ_þµþIòþÚþ mÿ†ÿæþªÿ ÿyÿèÿ#ÿFþÜÿèÿaÿðýTÿ=‡mÿaÿµþÃÿ ÿÿ·ÿ0ÿ#ÿÍþÏÿ1Ïÿþþðý!þ¦ýËýþþ¬ Tÿý+ýkþFþýHÿ#ÿÁþšý]ýýðý-þ¿ý¨þ×ýý_þ ÿ0ÿ·ÿæþÍþðý þÁþþÍþäý°üâüiýÚþžÿ!þŒüüXûÓû×ý†ÿ ÿFþßûÑúèùü·ÿyÿ¦ýøûú}ûäýVX<ÿæþ_þËý×ýz&Ïÿaÿèÿn“ГzÏÿaÿ0ÿèÿ?“ÿæþ þÕü8ýòþ aÿèÿÿæþòþFþªÿbÜÿ<ÿ$=†ÿ<ÿÐ5?éÝ3nz÷I’ÿªÿTÿIéôÿ!þ½üŒüËýÿ1Rþsü)ü½üŽýwþ_þ¿ýîüîü)üýµþTÿÚþþæþ’ÿ ÿüýÁþªÿ#ÿæþþþ:þPýúüµþÿþþŽý]ýÇûìûìûîü_þ!þBü'û”úÑúXûýýgüBüÓûìûýý¦ýµþwþ×ýFþ!þÚþôÿÜÿ$HÿÁþ ĸ3VÃÿèÿ·ÿnyÿyÿHÿwþDýDýýFþHÿÿ³ý!þŽýuýFþžÿnŸ’ÿ0ÿ_þþþ·ÿ5‰1¼+\Õ÷IÃÿ•‹Ð’ÿÿ¨þþaÿèÿwþýâü½ü8ý+ý!þµþý‡úûüâüŽýiý_þkþüýiý:þžÿIæþ#ÿ1èÿÚþƒþHÿªÿ0ÿÚþÚþäýŒüîüúüýBü˜ü˜üqû>ú{ú@û‰û¢ûêúVúªù’ùú¢ûDýýý¢ûÓûý¦ý’ÿé=mÿÚþ1éXn?¡® òþ!þµþžÿ<ÿyÿ0ÿþiý6ü½üäý ÿ0ÿžÿkþµþwþÚþ¨þyÿõ®AfA•éÓhCR-Mú¼º‡‡1Ãÿÿœþ-þ˜üNüÉü+ýiý˜üqû”úôùbúBüâüDýýŽýÉüýý:þ$·ÿÃÿÿyÿyÿªÿÏÿÐÏÿÿþþƒþËýÍþ ÿäý³ýsü®û¬úû¢ûßûJúTùyù#ùøùžù úbú¶ùÛù‡úÇûZüüü³ýkþ!þ0ÿé&é¡p¡Zí÷3ŸÜÿÿ’ÿV#ÿ_þŽýýŽýPý]ýüýý]ýýuý!þüýÚþ’ÿÏÿ·ÿ$•¡f×¾t×R#´×-t£÷fÕ¬’ÿ ÿRþŽýäý³ýúüÓû3ûÅú”ú'û}ûßûqûû¹ú@û)üPý¨þµþ³ý¦ý-þÁþzdKbÜÿ†ÿ†ÿ“A?0ÿµþƒþäý]ýDýü–ûÝú1úôùÃù<ù¨øFøË÷×÷ð÷ü÷ ùåøžùªùÛùÅú¢ûŒüšýyÿÜÿÃÿaÿé—7™ãr\¼pŸÏÿžÿI#ÿðýBüNüÉüÕüBüÕü¤üDý6ü@ûü þ0ÿªÿéI&Æ£9›þ# /%=žñ²wƒ¾ZÆ}1ƒþuýüýDý)ü'û>úÃùyù¨øžù’ù…ùªùÏùmùÏùoúûŒüýýäýœþyÿmÿ<ÿ=Ó÷Kp¡õ1$bªÿwþýÇûoúJúJúÏùœøøúö‹ööúö˜öÓõXõ¸ô˜öRø>úbúèùôù1úXûRþX‹‹ÆëAö¬V/¾üã9tëVªÿ ÿÁþþŽý+ý6ü3û@ûû¤üâü'û®û½ü8ýäý’ÿK‹M£ãƒøZ5'•Xn?î19A÷ßPý'ûù^øú…ùwø÷úöNöëõAöË÷´øÙø/ùúJú”úüPýÍþèÿaÿn¬™£õ31ÿÍþòþŽý‰û1úòø9ø²÷öqõ¬ô`ó´ò›ò;óþòTó/óló{ô?õ7÷åøúÅú6üËýHÿÝCªJq)ºq‰Çé#ï\MÐ1#ÿ þNüÓûÓû@ûôùmùúbúVú}ûøûPýwþžÿ‡£;‹ ü ¦ ã ! / … Ï T P LÄô`ºÿ+ýsü}ûúœøš÷öºõ?õnô ô1ôJôÄôÝôsöø9øwøÃùeû°ü×ýÃÿÄ}‰áPwwCb’ÿ þZüÝúžù…ù+÷ÄôÏóEòºïXï÷ï—ð5ðéîî?ï?ïñ‘óõ÷ü÷#ùèùúü0ÿA!ªÑ•)² Í T > V # ^ \ + îö#9fzaÿäýý®ûÛù<ù-øøøªùÃù úûü¿ý0ÿ¬?57 ` { » °Ž¤¢ ê ” è / k }yÜÿþNüÅúFø)ö ôjò²ñòtñëïððrðñÙò%ôßõ‹öu÷/ùû þèÿ?}ßfh›Ï“ t¼Kyÿmÿžÿ-þû÷öô%ôãñð&ïÛítë•énè“èpéÆé~ê²ëýì¬îðò ô°öú³ýhƒ“B – +0þku8RŽ F qRú?<ÿ)ü`ù^øu÷øFøã÷š÷÷ø¬ú°ü ÿ¸‹ï Bœ ê ú žÏWY¯{0šÉ> k X™}!þZüþøßõþò+ñ5ð¸îxíìíê—ê7ëûëGízî÷ï\ñyóö^øLûý<ÿôÿ¦ô“•ÄÛ;À›À×?ðý>úš÷AöÏó¦ñÄîãë=ètå÷ã÷ã>ãaâ·â’â0âÃâMä‘çtëVîòÓõ¦÷ôù×ý3 k – :aJ–¿ o>öËo ¿ ÄÏÿuý”úÁø÷ëõöôÂó‘óÛóÇõÁøÝú¤ü³ýZ \  DÁ·YÚcŠŠ”mµµQ4kL ¶ ᪼žÿü÷`ó°ðõî^ì|éóç]æùäíäÖåEæÎç|éjìõîò¬ôkøûÕü ÿÆ '¼ š   öƒÐäýbúáöÀò|ïÀì¡éEæ¹ãØàöÝÃÜ„ÛÚÓØ4ØàئÚòÛûßCå—ê©íòøõ#ùâüÓ®@ #FvØn­ëAdaÏ% u …®×ýÙø‘óð|ï7ñƒòñ7ñ›ò3õh÷°üÛfå Ç æuvï IÆ7 € Œ·§šFm {Nüåøö¨òóí=èä"á±ß6߯Þ*ßBßsßýàŠäzè9ìÓï ôã÷–û:þ÷…ë× 1 Bš°ge à ¿ é™<ÿoúÇõ7ñxíÒé]æ>ã¿àÜÜÙÙÕÓ{ѪÐÛÐÕÓ´ÕæÕ@Ø8Ú ÛßnèòHù-þBã ƒ à£d$)+ .?*¼%5%Î"&—¶"riîyÿ‡ú1ú%ú#ùô?ïÔêWãIâ“î!øøAö ún½îgÏe‚ù+&&›!n Â"M%£%""g>)ŒT 9)üöôéîëéÂçâå_á<ܹ×ÕÕÏÖDÚcÝÇÞÌàYäMêºïøõû’ÿüLš ‡ !c–ÔÔcy ÑÈ:þã÷üñýì|é0èæˆãÞÙÕÓþÏNÍÆÌ°Í™ÎPÎú;ÎwÏÒÖkÛsß]æVîøHÿ9# {D>b#Û(ª.­5:95,²&."é›SvÍðýVîpéhë3ïPñ?ï~êOåßõâ5ð¼^ ßÍçßq <á‚! oG‘"ß*Á-y(;"| A%…(v'v!|gZº)å¦ýÏóˆéÁáeÞÞÜÜZÙ×ÔHЙÎ/ÐüÔwÛäà6åaè´ìƒòªùРò HYÉË_ g6ÓžÿË÷™ñÿíQì—êè|ãeÞàØÔ{ÑÀÏíÍ$ËûÈCȥȃÉlÊIËÈÍÂÐHÖwÛqÞ@ä•ï¢ûã! ÍzC ÿ"ü,ƒ3±7U:9#4”/×,T(Ÿ °Èôfê æäe䛿ÚçKéûëWéíê¶ù´ L ´ à Žˆ]iG"´!—* ¼%P,ã,å'«#‰$'j'7&&$~zà ®“×kþ˜öGí4ä ÝNÙmÖƒÕ)ÓÙÏÎtÎÑ’Ö¯Þ½å—êÄî‡ôûM+ s¥µè>&ÿ6!þ ªuýõKïì?éµçEæã%Ý<ÖçаÍpÌÑË?ÌçÊïÈWÆxÄÿÄfÇËjÏ¿Ô6Ù„Ûß_çöôÝü ’”:#²,”5·:<Þ;_9<4%/p*ï 6Ù VTÿƒòñævàgßÔÞ:áåélí¡ï ò{ú!  Íâa½”&ƒ' #ÆK¯b#á+)1!-&Ð#Õ%ç(Ñ)Ù'ç"ñ F åé9ølí|ã!Û/ÖÔDÔ5Ó¨ÏÌëÌçÐèÖûßWé&ïEòNöâü# @z|Æ~~zÔZÑwþ¦÷hñ…íhë“è—äxáŠÞNÙsÓÍÏAÍÛÊåÉʶÊÉÄÅÂcÀ€ÂÈ9Ï×ÔBÙÜ’ÜBßhëXûD ê]h ©"3$¢*w3ý8Î9[=Ú?«:þ-b#c wþVúüáöÂçàØôÐJÑÕÙ,æOëóåøÇûøiŸŽ§ «¨'Ñ/,Æ$MÜd (#49-3›'± å!´'D,š,ã&,> ¡Úþ:þ¹úñò çsÙþÏ)ÍÐsÓÔ%Ñ´ÏÅѹׄáÙìZöôù6üéqÎÀµÀ½6@Π HùEòí÷éé_çcãÔÞ¦ÚþÕÙÏnË-ÉȾÈxÊzË^Éåß¿i½0¿ºÆÛÐؤÙÕÙ¨Ûâßçö+ mç€ ¦&k-V/D2»6m:³86Á3/€ 8о÷°ð¸îÄî¼êoÝ‹ÍOÂÈÇŒÙIîNüƒ¤u ¦ö$[ ]Ð+&L*F-q0o/1#çü,ž:=q6+ý!Š%^-˜1ò-Èô Ÿ_þú¸ôGí4䢨 ÐÎÒÔËÔÕðÔÔòÛÞéöüâü×ýw Þ[8†ÃŠeå #ÿƒòáê“èêé—äûßFÛ¨ÕÛÐÕÍxÊrÇ“ÅõŋDzÈȆÅÁ,½½™ÂúÍ ×aÜ”Ý(ÞpãÀì'õ‰Wù&—+P2V5g1R-¨-ƒ-G($A%"c½üVî¡é§æ¡ã@ä0â…Ö(Ç>À›ÏIè ÿw … w ]YÎE!‡)ó"½ã Û.è:O=9Ï.ÆQ$ù<íHÒA3ß$ D, 5g1 "e 6üúöúu÷Ùì,àÔwÏÂÐLØDà|ãŠÞ˜Ùo×iÚÂç¶ù¦R)ßî«$z¢:Mu uý£ð$èûå‘ç•éâå–ÞèÖÇÒãÎnËÊÈzÅÔÁëÀÖÂSÄ0ÅÄÁD½½±ÂGÊ3ÒZÙŒß|ãaè7ñü=¬ ŽW¦&--+22ö)fÿ>£»¹  ô ÝøØÉß|ãsß³Ú%×EϲÈÔßïk §D”Šk6v!--2î1u,ª.H44<6=]8ú+‰$f+ô:C©?,8‰01)l"À!õ#X$[¬eû²÷™ñrä4ÞöÝàÖß"áKãcã½ßûß|ãäÚç´òþþÀC® þNêÚÁœ”y ÷Çõ ìµç@ä âFágߦÚPÔÈÍÇEÃÁa¿§½½ó¾¯ÁíÁz¿½U¿zÅ5ÍÓ¶Ö˜ÙÎáGí˜öªÿd½L>rÿW ÷nÜ*ôà ¸žkøÆãÛÖØöݧà±ßøØ`Ð-ÏÔÞƒø„ã i#' «›'†446Œ1b/2S9æ?ÒA ?7V)…(€7ÄF¼HB= /C&G"fC GþøïÙòLõ1î¡éäæ|ã]àká³æYêóç‚æçŽæ2ééôrs¬7¾)6aŸÎ³8gÚ ’ éÈðõâÞß0âã«Ü?ÒÛÊÂĹÀÚ¾š½e»º’¹Ç»KÀ§Ã¾Â¡ÀEÃ'̪ÖcÝ,àxá~äýìÅú‘)·†< Nâr.Quià  ªÐýòø®ï.áœÕÅÑÁÕ–ÞÚá ÜiÚ,æú׆ë$¾ µ˜®$‚8õ@ˆA?;J5'6AdGñ>H4'6˜=>7É1Ù-é)%± aHe‡ôù¶ù1úÑô íMêMê•éQæ_çUèrä£ä*ë²ëÈêð²÷æþºÂw Ý ø ¨Ø(]’u3 å }¨þñˆã®ØJ×âÙÚ%×…ÐMÇØ½_¸î¶Óµ¶„¸à»S¾rÁ"Ä Ä‘ÄãÈ=Ñ#Üräñæ_ç‚æ~êÄô þ °]  L †ÞN"SÖ³+ üý#ùÄô)ðÐècÝÐ1Ë¢ÒèÜ@äÊëçó‡ ýl"t&r%¼%Ç*®0à<›JŸL`Eà<(<¿>S?U:¹;$@Ÿ@Ã:2“)á%C&°%!™B× °üÍþþþLõnîáêêÐèùê[ë"ç&ã]æMê—êlí¶óœø'û½üö 3 q ŽÅDõ4úÇ?øÌìià%צԘÓÓ=ÑÑ˸ô³-²ð±ô³Í¸©¾*ÂÃÄbÅ~ÇpÌ´Õvàÿçºé ç±åAêwòËý¶y { ì ÁeÜ_äÜ„‚~š“u÷¶óñ¾ë_çÚáòÕÊÈ=Å•Ì:á^øÛœ 1 eÝ#Ï(š2ô:Î9z:(BnLLxE¡A§>$:à6;ä>–<Ç6ð2Ñ),!aŸ#¸#xó´ åøeûòþ–ûLõƒò…íaèÈä“èÌìÀæšà¥åâ峿ï ôÁøû³ýV^ Üî2Ð@(]{Xû&ï£äøØ¼ÓÓòÏ+Î?ÌÇš½ˆ´@¯R¬L¯Õ¶n¿ñÂjÃ$Å|ÆÀÉTÐ Üjæ?é™åmâeäí¬ú÷wÉð ô _U›Å sŽKŒÍÕöóíÜèåæáœÛ=ÑÙÉIÅ—Ç ÝøüÞ4õÿˆ²&U:ØDbF&GlE‡FhC E?GÝFW;ê5æ9ÿ9T4ô4 3×,\&E![ z†#³ý0ÿßû9ò—ðZð¸îGçæ(êWé­Ý[ß]æÚá„ç¼ðõ¨øÃù-þ/# s·[– ½çÄŸB•¡ïká>×¶ÐßÒNÓRÏ}̀ȷ¿”´o®þ¬ª­Í²>º4ÁGÄSÄ.Ăà Å/ʲÔ$â&éGçÐâá„ç'õIÊ'w ô } êv»û*ì.Ðq ?˜öSí™åðàÍÛdÒºÆÊÂƕҟèp,Œ]‚¥ Ÿ#×,„9‰GGKÄL‡LK9D_?Ø>cA"?[=Þ;±7Á3¤1/. ($#©"ùM0ËERþXûHù÷ï&ï“î/ízèäæŒåÐâÏÜ~Þ÷ã(äëéáð?õø¤ürɦì.Þlpr€ fßöÒãèÖçÐÀÏìÒiÔÏ9ÉÂ.¸¨¬õ¨íªÁ²ù»Á€Â]ÀÂÁ(ÁÈÔ áñæŒå,àÞ4äòµþj‘3s´ €ìSІÆ* ¡ áü;óYêäæÿáPÔIÅ£»¼~ÇÞÝã÷! aâ ­* 5%#4l?HN{RÍPÈH:?·:ð8W;4BAH~B”5ð,+)Ê& )9'“ðH߃1žùð¸è€ë§ìÊëéÞéÃâÙÓØŒßräëñjò¸ôÉöü¢iQ0r³õdÐ#¸#óT·ÿÞé ×CÎÝËθÑ{Ñ^ÏCÈ€¼‰¯¾¥ß£+«š·6ÂçÄØÃ¹Àð½(»0¿ZÍìÞíêÞé6ßc×2ÝŸîaÿ{sqstÈ8§ä±•$È%`Bü?õÂíMêlçÉßÍ͸°­ºÏvìJ$?7 9!=#*S9ÖC LÃQyW W\I_9V5ˆ;ëAfH›JC×2 'º$#(ß*Á-á+˜R » þþ¬þøéœá›æ‰ï\ñ€ëdéxáÓ¤Ó€ßEæ°ð‰õ`ó‘ó5ö¶ Ÿ±Àró"Î"í%Ð# ÑÆïÓØ¾Î‹ÍÍoÑ®ÒCΛÉWÀ´²^¦™Ÿí¤²"¾*ÂhÂYÁ8½8·D·ÆÆWÝÖëìqÞ'ÒmÖ¾ë ÿö=ÛºÆÄ#ëâH ¿?¶(% h bD÷©í‚ì¡ïéÅ×»Áå¬!¬è¿¦Ú°ö ™U#h&$#À'Ñ).»6DœP\Ç_„\9Jy4®*†4OC‹N9PhCR-çE)%R-1Á- zÍ )1I;óÐâ*ß—ä¼ð%ôÙìùäˆÝ+ÎÍÏ©áEì¤ö»û9øÂóð÷rP­Y…"!ã ë$Ê& (5%o5öŒÙOÈtÈÎtÎXÒ!Õåϙ ´¥«œŠž%®»»ÃxĭƯÁg¶ô­¹ºÚló+ñ ÝÙÉÍ çúü£jž {mù3cV)[ {ï+?,Ï(?+ã÷;í íÙòñ€ßAÇç­í¤eµPγæ"®$ 'p$Ê&¢01/'0©9÷G[÷d bV2A. )–6ÆGyW²UÈúNö~êµáÕ€È×ÌæÄî¤üuýXõqõôù¸M¼%'…"7&ç( ) (G ß°ÇÂ^ÉÍÏÕðÔ­Æ”´&£x›:›?©š·Á‚ÃçħÃH¹P«Z°EÏÂó ùÃâÙɸňÝü÷º}H J ùù ¤+ü&©ÕOã,!-%Äeû‘íhë ôFøéEÏ ´¶§h«Ú¾%×Çõ޶"•**‡)ê/×2è.‰0â=×UpjEg©\øMÈ<á%‰$©9¹Xäa¬L¾&‚ë$F3®0ç(xÜÿé ò}ÛíV×¢Ø(äõ3û˜ö€å×ͦÎ#Ü2éÛùëƒø ò`óÐîØ?$ö)v'A%å'—+Z+"ª ½å¥È&ÀvÑÊRÏáÓ@ؼÍ䷤ʙ¹—5¤…³Œ¼WÀ†Å²ÈÀX©È¤~Áçíwþïë)ÍÈÁÍÕþò†ÿI˜°üRò •*Z+Ä’ÿ°DP,J/#(þ ??ï"çúðú+ñØy¹Éªž­”ºvÉ$â÷ïñ'´'w-Á37.k-5¥Ièc1o6f^V?Gª4%²&E£eècà<æ),.¦2ë*n¬ %:þ›Ü þ@ÞÑÑ<ÜXïÓû úðÞÎÌ<ÖgßlíéÕú{ôHùß™ é)u,ç(*Û()y(«÷¶Ö,Ãó¾ÌÃñÉìÒPÚÙÕÒÀò¬Š˜¿”:›Ç¯m¹"¾KÀÆlĨ²¶¡° ÜœþÁøÙÄ¿ûÈÚç°üÜÿ‹ä7 ÷ï¢ûáÇ0þ'œ ’ùƒ Ÿ#F3 .7 sÀœøÂç£ê÷òø³æ?ÆÙ¬Nª¬´ûÂiÔVô¨p$f%¶(Z1c;c5H.¢0x?žW—k¸iÜ]O?á+“#k3¬XÆjVR&¿J°%:3;.¶"4¦ d½üH ¤bîiÔüÔâåD÷Vúdõ"ç9ÕpÌӞܙåÁøÂüý°ööô#ÿ  v‹%É+p*®*{)*Ä)^!þ æãÈ ¾z¿ÿÄÎJ׎ړËB¶, «–Ë”v¦4µ‚½ ¿›ÃÆ6¼¥M¤zÅÂó“íêtÈI¿Øëõpd òø¦ñŽ{/.ñ3û @0@09'Ö'd®ïGçhñ¬úwò‡×eµÝ¨3¯U¿õËýàmÿ×&-'Ñ/_9ˆ;”/k-¤7‰MõcQmÊfìYÈH4™&…(‚Dkbb¯<Þú»É+0v': L¬£J µþóá^ÏÙ¸îXûù&ïøÞϪÊÁÕÌà;í³ýr6üöœøÂá¸)ã,•*,A+ó(À'»øþÕŠÁ¯»—Á~ÇþÏeØÃÖ¹ÀÀ¬™S•â™Ù¬±¶Î¾‹ǫѲ"¡ê®µÛ“)ü¦Ú ÀÊÈIèäýÓ¼¿îÄîgü§!ü21)B•õ¡$F3ú+ÆÓ /ûxç­é¢õ’ùŸèÆ®©x§{´ Å\Ô\ñDO&—+œ-F3H:ò3u,B1Ci[›m&j4_O¡;;(Ð#Š6úZWjPé#ì Tõ#3¸/?$¨Ÿ³ýð °AðÝ×’Öeä‹öqû•õGçyÖáÍNÓYÞýæ´øy!þË÷qõýT QZ%¦,ú+*=)=)*I#' GçOÈÒº[¼ñÃ$Ë-Õ#ܮ̚·;¡$–€“~¤a³Ì½”À$Å~Çý½û¥á¤_Ä/óX›ì9É"¾wÕÇõ¨¾®î¼öCñsª./ ü÷uý'b/q0÷${žf5ðCåëïÝú=ô{×ò²7¥¦«š½NÍíäjÔ¦&v'm.Ï4š8ö/°1F9Mfvm«cËU“F¨3+&Ý)þJ$iØaY6ŠËUê/i2þ'ŒÇ°˜üyJÉüÝ}ÒÒÝ îúø“îÜÜáͲΤٳà`íÏÿ ùyóP÷Ó±ã *!-)A+º*Õ+9-Âú'ØÂoº(ÁÒÆÍÏÙæÕMÁ{®¡—“½™y­¶i½ŠÁ¼ÇÚı¢\±0Üœþ‡ú×Ú|À7ÈŸè=yÍsŸî!þ`"ä2X* ¼ö&$w3‹+Úe J6üçÔêAöªù]æÄK©/§²ûÂúÓñ' l"Ï(°+u2©9 5ª.š2ÖC!\VoOlayQâ=3*ë$7Ž[ßj;QI#Å y‹%ð2--ï {}Úþèÿ¬ w ÿísÓßÒÞã¤ösü)öæ¦ÔfÍçÐ0ÜGçžùáüýÄôlóPýJ lt&,+¸)ö)²,»0ñ'åMÇ꺌¼åÃóÊÔÕÙÊqµ¾ŸØ”'’ë£×±4»v½ÿÄtȆ¿ù¤Ò£ØÃþòzëhÈæ¾‡×ÉöG¦®Ó éô-ò<ê/o/ °ö_þ¥‰0–0²&~•^Èð¥å‰ïÃù;óþÕ±—¤Ë«¥¼=ËápCƒ'#(Ï.67W;¦2ä2&;ÕNCf‡oCfÇYëGž4Ì'+hI™fkbÿ9 ¦ÿ /Ë2R'| Ù#TNüÝ ÑÝfðøûø©íþÛëÌëÌÅ×$âñìäý·ÿúJô7÷ÄÖÀ!É+Ù-s+-….y.….©÷BÓξ’¹z¿.Ä̬×uÔ§½ZªÍ•2‘4˜rªXµ½hÂɓŮ¯ŸN° Ý0ÿ#ù¬×0¿Ë¡éäýÆN+SíVM%¦2;(+÷9 Ù'i2+†Ñ ú"çë®õð÷*åKÀÀ¦å¦¶„ÄÏÐíè `"›'Ç*ö5Â?§8Å/T4CCä[=onŸc¸R©?1/9''6yWëjTG(âž|$ð2¢*}{yÿ¿ ¦ “îDÔVÑMä˜ö'ûJôaè¶ÖrÍÝÑÍÛä¼öBpú®õuýT §¶(Û.ò- . /Û.¤1\&h <âŸÅ«¹Œ¼MÁ—ÇfÓ)Ù|ÆÍ²Â›[“Ü颱¯»æ¾•ÆÀÉS¾A¤«¢Æ¢õ÷ºéÇùÁaÜü÷‰Üÿ² âÍòôóQ:3ö/ð ô“”2”/h&ÇZ§ì¥ådïôùÊñNÓ'¯¥ì¯õ¿÷Ʊ٘üà´' (Œ1¥=ä>1}0c;¦OâfëpniØ[¼H˜75+¬)*CÄc6f,>à »H.»0«#œÍ  ïRþq 3‚àßÌŒÙZð@û÷zî¢ÞíͧÉÖ0â*ëËýþ¬ôyó&]K$Á-®0>/X0{/í+®*G1ôÍÏš½H¹ÿ¾ÌÃéËÙáÓ(»¥]”ËŽ[™«i·â¼ÈÁáÇÒÆV®nœ¢¯ÿáÓøqÒG¾lГî!þwþÃèÿ9ì ¼+ž49'Dý/ùV ¦,ä2ò- Å éš÷æÖëöRøàä ½O¥b¨Í¸ÃÎÊëÑ ?$ '7,Ž8rB€7Å/Ù3ñDH]p-m_bÏQ©?0Ì'8XYfkS(k–%½1Ó*·îwÓû¸¶¸î#ÖÓ™åö×÷;óççHֲΚÔ<ÜÜâ%ôíÕûÇõmÿo Ø1)30@0g12/1$í¨ÛYÁw¸½ŠÁíÇÕŽÚµÄ߯J—y>‘¦¬´§½x¾Æ-ɸ 0¢™Î‰ûþ8àÈÁŸÅUâÛùnôÿX xíø&'6@03 õWð2Ñ/Ý#Ýèÿ2é¥åÆïJúpïK̼ª²¥²k¾íÇ6ß#ÿS (}*Ü4:?†:0Ï.è:sT¼kÄoŠeLY÷G¯6ç(1/AN_he_7Á]KÑ/Ï.E!Ô» áF øYÞjÏaÜAðTùø3ïŽÚúͨϿԥß|ïÕãþ÷èù·Õ% /51s1q022Ý)›ì²Èa¹Jºx¾pÆqÒÜÜLÒm¹Èž·Ý‹èœb®*¼i½,ÃÊÈrÁj¦„›2ºVîÈ£ðªÊÚ¾'ØôÁþ:þ%îöÂí ú146M)öìû0ß0+M´ …™ñàäÌìš÷ÄôÝŠµO¥Í¬Ê¼lÄÑÆïwÿ"¾&/.˜=|A25--Ï4®G±`éo7lO`)NÔ< /-'|;]ëj1LÎ" ,þ'–0 )ý-× l>ún‘~êÇÒ!ÕÞéð÷FøÕðÈäøÒÌPÔ–Þ*å“ôÝ\û®õÚþ×+L01Ž2_3Í-/ý!Åú?Òä½8·¿½OÂjÉ–ØÚëÀɪ]”¢ŒŒ“‘§s¶½Ð¿(Ç—Ç+±všb¨:ÛÝ®û’Ö,½éË(ê‰ûüýpÔÛÈê¨þ9'½7ü,5‹ö°¨'w30v!N?Åú‚æéè/óúëGć¨Ñ¨–µKÀÈÌàÏ÷'ö)š8 @†:+,Ó0Ð@‚[‘n3p*föXC/4'i2ƒP¡j©\)1·DÊ Ñ/s+†. Ǧ1 %ôËÚ¤ÍUâ1ôËýøõ(êæÕëÌ)Í@Øèâðéô+ýqõ<ùXg¸)X02Z1u20P2?*¿»äµÄs¶³·¾dÆJÑèܸË%´š¬‹¼ž¬®¯»§½“ŧÉa¿$¢ÜœÊÂXõÕ?éñÃÁˆÝ‹ö!þýå èrð|ïì25¨3ŽÊñòþ÷3®0*š+ £QìOåõîúJô¶Ö@¯õ¢®8½¾ÂÓ×÷õ£%Ù'g1Ú?õ@ì0²,â7ÉN]gEs^m`ÌJw9+¦&³> cÊlpG§þ Ãp*Ý/º$Þ+- û´ \æ™ÎTÖjì®ûÏùüñÚáþϪÊÕÓYÞÂçÓûåòøRò°üo$#¶.ä2 432H.R-ÿ%ô²Î0¹m¹<¿EÃÎ Ü7Κ·(ž¶Šæ›;­à»Ö¼Eà ÉÃ¥_›€¼üñ9‘í•Æ’¿ÉÙXõ1µþdHóî:3>5"ò»û­s12--aP ƒPñ»äÀì’ùø†Ü:²W£¬€¼™Â´Ï-òöp$v' .= Aa4Ï.¿8GKõcqãl`øMÈ<‰0J)È<^×l‡Lå!' )ß0™&-Ë öžù‡Ýïë¤Ó´ÕíêTù´øáð÷ãÒ'ÌiÔ*ßräló1Ó#ùGóðýˆ‰*0g1½12å-‰0K$ÚþHÖʼa³2º¹ÀvÉØúÙWÀC«)“ŒTM¤c´g¼„¾ÆOÈ#³š7¥žÖ0ÿ½ü±Ù$¿ÊèŒüXÏÿDáê½ün#e6Ù-#óϼ% 5¢0Q! ¬Íþ†èÄèÍòqûýì“Å›¦ ¦Ï³·¿ùÇ.áÊU`(ë*[7<@·:{/3 AàYIo¼qhsZ|G–6Ä)2/Qùk†]D2ÑÍ,!¤1F-¼¥ BA× ëõ8ڙΌßyóâü÷ëöוÌ×Î6Ù_áÎí\Pýö»ûÕMã&Í-Å/ß0 4R3–6--wÈä.ÄB¶>ºpÀ“ÅçÐôÜÂʪ³4˜B剹¨¬ô¹[¼0ÅjÉ¿½£žâ™MÁöÈÎçrÁ ÀöÝ÷Fþâü mºï÷ïB6Ï4uðþÞþ3q01)Ë9 åìç¡ï‡ú'õ ×Ý®•£®¯À$ÅÛÐ-òY3$& /WAMBü2ã,]8Mùe?pEmÌa•M;Ñ/}*ñ>Y_¡jëGéÝ ÈT.1¡$o8¬ ¢êú1ñ_ç™ÎìÒ ìªù¦÷Ýî<â¶ÐÊXÒ4Þvæð÷C#Ýúó¤ü2."Á-+2Á3·4T4X0Ý/›!7÷tΞ¹Lµ¼6ÂbËÍÛ‡×6¼b¢ Šÿ•¶§w¸.¾YÁ?ÆbÅj¬t™ ­óá‰fö+μ“Ñï½ü]ý—*äýêÙ….k9ª( ùAöÛ ;. 4@0O ¢ ÑÇõ¥åhëîöbú糽Ȥ¢©’¹4ÁfÇÚá‘&&¦,6=.E :P,¢0ùB†]õoqjgÛWrB¦2¾&H4ÓSvm8[ /{µ¶"Ï.L*"gÅ Çaÿ“°ÛóŠØAÍvàôó‰û{ôWé<ÖßÌÎLØxá;í äýÏóùî,¸)+2<46Š6N12¶(GðÚÀê´a¹¾KÆ+ÔmÜŸÅy­±“…ŠüŽ?£ð±Œ¼_¾ÆOÈ[¶EšÔž^ÏBüFþÍÛÖ¼\ÈSç/ù)üœþæ- ÷éwøÌ!’:i2ÇRò‘"3¢0-'cNü0è2é›ò‡ú¡ï“Ëß©™¥ˆ´µ¾ÞÀ×Ô'ûäù%ó(7SEÌ>ž.….Œ=PUMk×ríkž]ÔH†:°+P,÷GAk iÖ=8” |V/ž.û ÿ_öúà ôÿšàKÌuÚáð ú‰õ…í’ÜhÎ+ÎôÖŒßëé¬Âp²÷÷!j'ê/Á3ö56·4Þ5ô.à:ç«Åɶɶe»AÁƒÏÞ¨ÏÕ¶ñš‰Œ‡"›w¬¼ð½©ÄÉ0¿ $–M»Ùòjáê ÃcÀÇÞbôVúû# eúðÿí·@6ì6«™ñËý 2–0,÷` ²xí™åvìÍøÇõiÚD±|£®Ö¼ëÀ¤Í¸îov!õ##.•A D 5ü,P8KÿbQm5kÖ`!P©?w3ë*=©\Mk‘K$# àp*ò-$#õ%à 5BüEÓEì?ÒdÒé¼öš÷°ðæ-ÕÕÍ‡Ñ¨Û ãJô—“ýöuýô* +826467:3‡/!öNÍù}µ[¼íÁ$ËHÜÕÙ̽ý â•† •`§<¹_¾÷À&Æݪ’–¬Ôä/u÷õË~»æÕ\ñÏùú‚¹úxçrÅ/<¶(áöÕöÏ !-1¢0…"¨ÇÂó³æÊëö¶ùÿç:¾²¥Aªi½.ÄUŠݨ†å!•*8>RJÞ;ë*ö/ëA¯Y¼kÈq|j»Y¼B8º*82çK÷j_H4üÀ!,;(›âÇ kþœø ªù¿ÚÍ©áõÃùfðê¤Ù¡ÌKÌBÙOß ç1úÇp˜öš÷Ïr¨'1 5.9F9g1o/Û(ÀîÙ>À ´m¹Ž½µÄúÓÖߺÆR¬ˆ‘Cˆ¸‹Ÿß¯:¾¡ÀÇÈö´e˜Uœ^Ï:þ$PÚù»¶Ê•éAöš÷âüœ æöS"6=ò3lòåÒ$u21X*x Çû0èÆéRòûüñtÎ׫;§Ë·6ÂÞÀºÒþø§"×&V55H‚>Í-á+Ì>½Tõiõo—k·]íHÐ:/J/FíevgÐ@t+ë .H.h ؆˜íyùä‰ÌyÖ&ïôùNöï"á¨ÏbËÔ­ÝÂçþXVÑú5öòþ*¡$è.!37î7H4Ž2\,u¼êKÆè³ÇµQ½ÌÃwÏ€ßJѱ¶˜{‹Ó†Qš+«±¼.¾Ê¡Æ"¾„¡æ•<¹ñ™|é¡ÀG¾LÞö3ûbúúÑKïEìkD8Î9¯ºï3ûss1Õ1/.m tåì8æ/í’ùð÷ÞÝ1´ù¤°ÁÀÃvÉéèBùõ#o/xE~H¹5 ) 5I¿anohrÂhTv>Ù3•*§8^V-m°T‰*„‚\&+Ÿ#ù½!3 %ú°ü )ð¿ÔÑ鍸Ýú+ñç ÖçÊïÎÚÛÎá•ïÝq ÿ}õ²÷T n)+u2L6N7ì6b/;.Æ$øû3Ò꺴²Á¸«¿ãÈÙRÛ«¿£¤×Žn…Á?£ìµ:¾MÁÇ&Æ/­!•¥ÜÜ‹3ûöÑB¼Ò=îHù’ùaÿâVµçþá+=7,>ú^ò•¢*w3i2º$ò‹+÷½åé%ô¬úìÂħŸ¨æ¸¾Á<Ü›7&ú+ˆ;3G”;F-î1~BâZón9s†i}Y§DÖ7`(¸/O obÏ4c:Ø!ò-{)x c” †ÿ¿ý@ ø4ØGÊeÞöôý‰õ^ìqØÊ“ËV×eÞÄèÉü‹ŸôD÷¯^'ø0ö5H:_9¦2-3¼+LäÚ$¿¨²:¸˜¼vÃJÑaÜpÆ®}’ˆôŠŸÅ®£»Ž½$ÅÉË·g™»˜‘ʘü·Ü]½›ÉzèAö÷¹úÚ “è=ôõž:ò3¢&ïpñ!Í3Z11)i ¨þ†èóç5ðêú´òãή©Z¤c´—ÁíÁHÐdõ~&$ü&T43G(BÓ0-æ?sTÚhŸo^m[`ÙJ<×2®0ïCbIilE$˜Ú9-`.ý!”ÃÝ Ñ÷…éè9Ï Ö?ï®û÷;ívàªÐóʤӎà‘çßû%wbú7÷1š‹%b/œ367P8±770ÞéÿÄž³ê´€¼ Ä™ÎÞÑàµ÷—ÏŠ3†EšZª(»½¼OÂÇÁ¾¡Ž”‚·|ïhíêt«¿gß3õRøÙøsMðÖë€7³8ˆî¹úîŽ2D2%/. °Qì"çŸî ùÕöݨ²Ý¢¬®’¿ÒÀ~Ç:ç} d$#ž.ïCÝF46Õ+[7´JÁboIoŸcºSB@6ß*9øY§m¬Rƒ'- '!-%Ѝ‡úõ òðÔ`ЩçD÷´øãñ=èšÔ ËyгÚ&ãñ¬}³ýVôyù8¼P,R3î7S9Ø8¨31$%ú#Ы¹ž³­º|À…Ê+ÚZÙz¿Ý¢s†Ç’Ô¤D·:¾cÀõńľ«k•Û§àZîö¡Ì|ºîÓÈð¨ø´ød4û›æÆè.€=“)u÷õ¦ ,æ32Ä#Föôäæ9ì5ö1úÄè«¿E¦®©~»eÁtÂÚ?À!ö)˜=JÒ;s+ö/—B'YlPr¡j[1Fm:\,ú1‰Mtl˜`·4ò©"P,Â(„„%’ èÿ´øî–ûäÚAÍûß{ôêúlófê]Ú®ÌK̇×ÇÞâå úP )Õö7÷Ï9'P2â7;k9ð2â1s+Úa¿!²[¶[¼ŤӀß\Ⱦ«þ%…œ‰±Ÿú°š½z¿ÆÇ´Å—›RÏþyÿZÙ”ºÙÉ~êZöD÷üˆå ›æëõ!–<œ3;£ðÈ?$ 482?*"¨ êúýæ“è+ñ¶ù²ñ™Î)ª~¤µ(Áz¿ÀϺõc!&6hIÞA%/ð,Ž>ìS$iqÙm±`J=Œ1>/(Bb©h³DÜœd¤+Õ+¼õ¯µ‡÷…ƒØæ\ÎÃÖzîVúõÂí<âVÑÛÊ+ÔöÝåÝúß?üð÷К%X0}6Å;Þ;ì6Ï4Ï.Nç=Ū³ê´Ô»—ÁúÍgßþÏ{´Ú•7ˆó„t™íªÖ¼:¾ûÂ—ÇØ½CŸ±“»ôó! æ ¾ˆÀŸâ•õÉöîö¨ LÙìÌìe2;;˜ îgüÐ 3ä2Ñ/Ì1 ôÿÞélçÛí!øöúÙ°°Ÿ¢–¯z¿z¿¾ÈAê ñ! /ŸFŸF¹5®*u8ÙJÜcÑodpŠeTˆAm4{);³[vm¼Nf%žO%)¼+ý!’î 3û¤Îí)ÓbÑëø ùKï™å˜ÓÌçЦÚÞãõ•ö!þ\÷³ýÅE!¤+\2œ9z:9Š6D2^!Xõd̘¶¨²’¹2À ËwÛÅ× ½Ÿ¬‹åƒ8”t¥¸G¾¥ÂhÈçÄ1¨Š’Ó©~äóãÈD½ÚÀòøõ¤ö.ÁøÜèÛ1à<%ÄôƒøŒ0µ3+2´!³¸ ò›æ*ëöùCå»ù¤íªs¼†¿Â>ÝP"Ô+Â?›J9+ä2zFJ^…nÈq©hªW­AŠ6)+>5‡Rnož]Z1 LZ%\, '=ÆB` Œü úë7÷ØNÍã3õkøXï=èÓØéËdÌÝ׿à5ê}ûXZöøF _J)Ë2u8>;Á9ð251 )¡˜Ó»!²ð·˜¼Å’ÖeÞbÅl§uŽl„5S¡y³Ì½ëÀ°ÇMÇ ®“èœãÔ‡øû‰ÒùƒÏ‘íÓõõ_þkåÊå'û`(ä>q0PýRò¬ó(Á3Ü4Ï(¯Zöïåºé#óÝú¬î•Æ´¦v¦Ü¹¯ÁWÀ¼Ó>ú–ëÌ'Ü:?MG?Û.¶.KAîT„h`nk0]¥I=0ê/dG g—e >t ‘"í+ )·axs&åø íá®ÌPÚåòÙøVôíØà›ÏKÌFÕˆÝ4äÉö yèùžùñÐÒ$‰0ú7ñ>È<{5!3ð,¶ LÞ·¿Í²ìµq»ÊÂÑ[ßÑ˽°Y’‡¼‡Wꮄ¾ó¾SÄYÇš·[™æ•ÜŹúéèܹº‰Æ“èÓõ‰õVú¨} lçjò"È<±7 ‰ïÏÿUD2w3w-cw üèóç¬îøwò=Ñ׫Z¤ ´WÀ»»ÀÉõîB|°%J5nLØDÕ1-È<5N4ep•pSb\O†@k3ª(Þ;§aoJfiö)3*›!>Wißfö-NÚçRÏVײñ…ù®õ…ícãÏVË^ÕaÜêã^ø…süRønøÿ"m.46e<<Œ7'6Ó0ÞùêMÇÅ´”´R¸8½ÑËÖßÔϹ¿šçŠ-ƒ|—¢©B¼G¾ÀÃÌÉÁ ·4µãñVrêÆÀ«¿¿à¶ó%ôÇõš µÓï™ëD±7†:Æ?ï¢ûŒN1k3Õ1·L tìûå€ëîö²÷eÞóƣV®D½£»€ÂÊåâÖ ‰${/jDºG#4 )}6Jæb¼qr4eÏQx?25)L6eYurkV/(ú:‘(ü,A%½ +÷Íþ yóԴφèü÷åøÓïÌæRÕÛÊ#ЦÚ<âÍò‰áÚþÄô%ú:C 7,ò3ò9ž:‚8ž4Ë2 'Vú÷Ìøµ‹°ú¶ ½7ÈäÚܹÀ£qŒ‚r¤©¸"¾ÈÁÊÈíÇfªè|£à¨÷ÎÊ#¹˜Ó‹ðöõmÿ$+ý½åÜÿ,*=*ëõTó+ .æ3¨3"i•éôåˆéôúÐè:¾÷£;§Ï¹¿½·¿aÜ#Æ,!V)¹;áH]8¼+3UFk\prqÖfµV1F=ã,s1-PZqù_ê/cðÂ(Û.y("½J ûý¿sü®ØdÌæáÓõú ô…íPÚÂÊúÍ»ØÝGçü¿ ćô+÷ƒ .ü&1Œ7q<&;Ù3µ3P,Z¨Õ¼±F¸<¿bÅ!Õ@Þ©Ä3©%…ìŒó¡Û³s¼‚½¸ÅÉ…³k•"› Ñ†ÿÉüÕÓ0¹¡Ì;í\÷‰õ¹úLÞãÓõS"»<†4ß÷ï°r%š2Í3)½Á Ýú:çÄè+ñbú÷ï9ɨ̦w¸ÆÀ6¼Îu÷¹£v'Á9'M•A^-á+û=ÑRfk9sÌma]Ig=;.V)ˆAÜi m¹AK» õß*ö)¯e«B1ÀòLÏzâŸË)Ù²ñ>úÝôlíàßÌñÉÁÕ ÜâP÷\ ž¾÷ÓõfÃí%B1ø6½=±=6’40u.áû²޴O¼ÊÂJÑkáÍ+±€“f‡¼‡ˆX¯:¾Ú¾ÚÄÉY».›˜“»ÁTùA¢Þöº†ÅÌæõGó÷8òÒé¼ðY|;Ø8V ¸îTÿ·Ü4¢6Ç06T Ëý•éédï’ù•õ^Õ`­¤µÂּ߯ëe7 |$+2‹HýDì03*W;Oee¸oÛn±`Na@ö5+,Ò;M_õoXMc Y}*¦,I#cŠCnôÿ Kï…Ð'Ò²ëÍøøMð¯äbÑ‘ÊÒ:Ûã÷D ýqõ¤ü­ #-†4Š<=Œ7>5¸/"í\ÈÑ´#³<¹ÀÌÇÞ!ÕH¹ì˜´‰Eƒè–Ÿ¨4» ¾rÁ?Æ«¿¶¡V‘š±1îž^ì­À8½½ß}õõ5ö7 õjò(ê 7÷;_Æïú”˜1²2P2 ¤Ûí=è©íáö×÷óá³·™¥@¯Ü¿Ø½YÁõâo È^!å-ÂEvJq6Ó*8›Jâ`Înßp¯e+U„EY<,è4²UrX…(u0*š,ß$@‚,ÕNö]ý˜qõ®ÒéË]æ\÷žù7ñdéãÔ€ÈΌٚà¡ïI\ TÿÂó!ø°(*2œ9;88\2e0á% ú²Î·+±w¸G¾ÔÇÚ¨Û À.¡”‹¥‚V‘A¤š·³½U¿ Å_ļª’A¤ŒßÊ)öjÉÚ¸ ×`óZö3õXŸ8ý æ0Î?f+÷¸ôš Á-a4ô4á%aÄñòýæ²ëõ¹úûëùÁv¦Ó©s¼KÀi½ÏÖŸ_áX*z@NO=3*0CC>Xlƒs|jgZÀD÷;+,T.EJpÖfg7”v!°+T(œ°LûTóÍ aÿèÜÌÉ¢ÞRò úÀòûë ۓ˪ÊèÖcÝ£ä3ûÛ üö ôV™y(¦2a:=ô:!3e0*7^Õ[¼P±»µ@»µÄƒÕàÈÇX©„ꋳ 4µó¾$¿ ÅëÆî°ø’♸ÑIDýNÓ·¹åÏbîbôRòeû„5ñæÃù9'?×2òþñ¨ñ'¨3ö5É+ýú°ö§æõè¦ñúCñ‘Êݨ٦¹ºÃÇ»ÄËqõYf'µ9fN?A¦,)+_?XSÌgqIoq_¨J·@Ù3ð,.?±fÂnóEg½Æ¢**ŠK>¯ ÿ)ð¦ÉUèIËÕdï<ùló"íÎáÏ›ÉPÔ#Üvàþò× úÏùXõº·M%–0É7µ?Ö=æ3Œ1w-{ LÞÀº¯²±Á¸ÁTÐóáÎá°ö‘ó„{…x›b®Î¾a¿åÃ*Èa¹Š˜e’ÂJúfÝy¹YÇWé{ô5ðD÷{ÍÎçíðÌg=k9Í ‰ïbˆ2V5ø0§J –ûÐèWéÆïkødõÕ¸®¦i·ØÃ]½ùÇ‘í˜Yß$T4ÂKåDÉ1d*¹;NN|d nIoša9PˆA6°+”;Š_ÄoOK$H§‰*ö)!Hih5ö¦ýs‚ì1Ñ3Ò9ì`ù#ùïãÏÐnËÇÒ:Û ãbô^ îü÷ þÇó"š,Ù3>E>ø6m4/êYÇ{´Á²†¹ŠÁ-Ï,àÕÓ«¹o—á‡C‚Ô˜‹ªî¼n¿jíÆ½žÙ´ëïR?écÀÁ|ãöôÕðJôu ØXïìkú7ò9©ïûÔÉ1œ3ü2—bë è$îFø!ø6ß¶-¦ƒ²C©¾ŒÂœáîùЃ-õFÏKi8+'6dGÁ\ëj¤qåg/W„E=-Ã4‡RÂnÇYm.Þ:¦&G(©"–w ¨øøÃ ÷'Ø×ÎGç?õ9ø)ðé@ØßÌãÎŒÙkáïÿ< hø¶ù' é‡)\2»<Î?¹;'6T. ëõNÍk¸J´ ºµ¾ÖÈÚZÙ¾(ž1‹7‚”‘K£Ø·_¾ÀÚÄ´¦ò-¦|ã`;ó?ÆÞº_ÛGó£ðïñ!êåøSç´g1ì<$Âóƒø® œ-Z1T4•$Ã/úðaèíbôøóça¿‘§b®cÀk¾Òº…Öß¡ã,9DËOa:?*2zF±ZákåsákàYÄF[=ƒ-‡/ILÑo’c'6gn#Û(&S@v°‡úfö FþþÛ•Ì.á¬ôåøƒò›ì:Û ËÌÛÖ¢Þ§æèù# -ºõ‡ôþ'u2­;S?Å;¨3'0V)BÓU¹º¯µÒºÎÄ%×OßIÅt¥ÓŒÕyŠ™Ÿ–µ2ÀWÀnÅ|Æb®_[™¦ÔZ3û¾Î!¸LÒßïRòXïâüÃ4ä‡úó(µ?0eû´ò1`(¤1@6s+"˜éôSçëÍòVúëïùǧl§öº÷À&ºÍmùvŸ'q^(HÎ?Á3è.B«inûCršÊ +`(&­Š˜Vðƒ3|ãƒÉ»Øtñûyó›ìDà+Î\ÈîÓÝvàló- Ç`ù‡ô¼ÒÈ%®0Á9ëA$@ 5É1….ƒ RÛI¿²µq»jÃÑÑ_áÎÊR¬_vƒp†Äœ°I¿n¿³Ã‰ÆÑ´”ø’(Çuý?@ØÕ¶"ʧìÛóbî÷¢ àäÙòÈ"?46ï¬îºS"82@61Ê< òøµçëéZðÍøVô%Ñ«f¤·4Áa¹GÄìÔ$3$É7wPUFÑ/**=×Orepp¦rpd!PÒA46u,<£_åmVLý!a3*Â(£ÜÔ$›}õå ¾ëåÏfÓ²ë°öÇõpïæ•Ò"Ê ÑÙ±ßÀò3 Tÿ…ù†ÿǸ#b/g7ÆAB!96â1&ŸèGă²R²¿·.¾ÆÌÖßÑÑeµ •‰†‹«–¨».¾‚ÃOÈ„¾ˆƒ[¶´ò^åì»CÂæÄôëïbô  áêÔê­¹;=]&ïZüaB1_3/4¾ RrêçGíNö˜öþÛ!²£²±ŠÁ~»I¿Úá/ âO Ë2¸L‰M7ø*Ö7²I¹^ln…t‰jœVûCk9—+m4ìSõoeY×,Ï©h&T(""Æ2–# qõòø- ¸ôԲ΂æöøZðÿçžÖ"ʰÍØ‚à™ñ?¹ #ùmù¢ Ôs+Ü4n@ùB=Ö7Z1ëò ËŠµ±]·§½ÈÍÛc×£»û™hˆ€Š’í¤º’¿~ÁÆÁp£ŽŽÕª¡éfðÊÂÖ¼gßbôñ óë~éôéèš 5B=¯PñÛù¨è.°1J5b#„¸îIè^ìÄôƒø¯äè¹È¤1®¹ÀÖ¼­º¬×°* Å/®GjPF9V)×2HÁ\^mHt¼kÏWýD¹;‡/!3AN¶n³aª4ÅJÄ#¸)‹%³˜^ø}õÑiýÁÛAÍSá'õ!øüñíê˜Ù"ÊéË>×ðà™ë}ûà Àöõ¦ ·º*’4g=·@Ò;#4‡/Õ%üÑ!¸°@µWºƢؠÝjÃI¢ê‹+‚Žå ]·Á~ÁõÅUÅÕª+Žž„Û´øË ¹#Öúð+ñºï=Òæþ6åTÿ.æ?}*ßõ‡ôÉë*¿2â7¬)ç×ñäætëÂóôù‚ìÃQ¦‰©"¾<¿µ¸ªÐìûÊõÇ*l?ÀP£<®*œ-¯B¦Ui—qmš[OIÜ@Ë2Í-DAkbiû=Ãè"}*™&$·GÅû“ô‡9šàÌòÛTó#ù¶óÌìÇÞÌåÉÔ¨ÛõâÄôå N…ùdõJ±'–0Ð:íBŸ@Ç6Œ1}*ÓÔ¯»î°¶Ô»µÄ1× á€È“¨ŽC‚´‰íž>´pÀÁóÄpưa>—'Òrýyп·“Ñfð¨òî°üolˆãÁøþ'ÿ?î1Éüó{t&0É7J/£7 öôç¯ê+ñƒø7ñ`ÊÓ©©v½¥Â·¹ÖÈ òð£U#æ9ÀPfB/.—+Ú?ôQd-m“oÖ`ÝL¹AB7'0>£_ziMH!'´'é#EŒMz™AöÚþX|é¤ÍÔí‹ö¶ó`í|ã‡Ñ^ÉþϘÙgßçí< ¿ý÷¡8«#'096C(B§8ä2¢*¬ŽÚ>À ´±¶6¼ñÃÕÓiànËu«½vƒˆp±Ü¿MÁýÃzÅž³:•ò•É×ýyÿê×»¨ÏÝîüñÈêøNü 8æfö`"ý>>5™lóÍ…"è.2551ÿ ¼ö“èë¼ð÷òyÐÅ®'©¥¼ŸÅ ºlÄ£ê_@´!k9ªQëG`.ç(Ü:M[`­j“oÌaOCH:¶.³8@Y­jáN&„À'%WŸõÂ=ôÅú3nîöÑÔ¥ë)ö;ó©í±åZÓʬÑNÙqÞãël ®ùaÿ­""F-7¼BïCS9¿2•*‡ „á Å–µeµÜ¹¹ÀÀϵáçÐϳŒ“p†y„t™Ã­ˆÀQÃ_ÄÆÆ0¹M˜,½Ë÷r[ß»»hÈéAð2é¶óR#—êüñ½”;ú7… Êñ3_y.Í3Ã4t – ùççŸè‡îAöqõLØ%´®©’¹¸Å¼ÁÐâw c·µ3?MVL:3d**7 JúZ,gTnMe¸RDà<Õ1 5´P"hTW /µ\&%Š2t¯ƒ Ë÷“ô\ëõ‡×3ÒjæööôðUè}Ø®Ì#ÐÓØQàvìV6y–ûZüÇ *Ã4BlE¹;’4L*–ëÊÕ¶Þ´m¹Ú¾zËqÞÔ&º6™ôŠñƒ†–ë©ð½*ÂÃzÅ]½Ÿyw²‰ïñnèn¿âÂ6åôÀì¦ñm SÊñïN7<:F£ð þ:¨-16n#:!þïëÒéVîÄôföDà|ºAªŠµ©Äk¾ä½µÛ;ÿ¬/tIN73*J5°HŠYïfçnñgUýD›> 4ô4;KQgîZw3]Ëp$O&j!£z§PwøƒòÓúæÛžÐÞã5öã÷Cñpé×ÚbË•Ì4Ø áxí–ûH n úœøw ?ö)ð2 >¯BO= 5¼+ÊòáÍÚ¸…³¦·S¾É<Ü®ØU¿ÿ›ÛŠ‚q’Ô¤Y»±Â;ÄÜÅÞÀ÷£ŽŽ'©xç¸Mð§Ã:¾Ìà ôçíî{4D÷áêu T4Å;a÷ïmùµ-X0*79'@zûëóç/íÝôÍøÂça¿®©F²xÄŸ¿˜¼ôÖzY§Ë,SE;Qè:í+g1óETWïfÂnkÅX®Gý>T4ƒ3¥I³g`Ð:(N!¾&#™mºô¬úôówþ0ÿ ãÓ‚àñòqõ¦ñYê@Þ×ÎÈÍüÔ4Þédõ ý/ù•M™&ì0=,DÄ@É7-fkø‘Јº³î¶ÒºpÆNÙüÚ.Ä0¢ ‹Ò€‹ÿ¡ü·~Á.Ä•Æåâ©_§ %Ý´®õ^É(»ÚRòzî ìÝ|Dý"çŸ^-@<Ê&?õø *;.Þ5X*ÿVÈðGçÊë›òË÷7ëGÄ‹ªÑ®ÂÁa¹þÏÕüàg`(ˆAÏQ6=s+1/EBTÞdÀmAk)Z5H·@Å51/A2dàe?O¢b#ç("tHÚ·¬ ôÓIâÎæÛÀòkøƒòë]àÍÀÉ^ÕÇÞíä`óÉÉüö ]t& /ò9(BWA[7Û.%þþDÔâ¼<³6¶6¼Æ{×öݫŲ¥Žƒ}Œ, ¶YÁŠÁ Ä Å¯”‘k›+Ô3ÏùãÎÞº ×hñ|ïrêüŸínèµþ¢*g=u,’ùºõš ª(/½7….(wòÿç,ìtñ×÷3ï É!¬…­4Á™Ââ¶\ÈÑô»O&ý> R¹A—++,ÿ?²OSb²l/nw\ñJ¼Bð8V/=Ê`Kj‰G• A1)Z%2·Sصþ¼ð þÏÿç`ÐgÙ‹ðúöòìÃâ×΃ÉwÕ·Ü©ánîÂ+ üýfö¦Þ&#.s7&A A’4b/%)dwÛŠÁ²±T³¹¯Á}Òýà3ÌV®Ïó„Z‡ó›¢¯&ÀÂ.ÄIÅc´u”P”ÆÓûèÿXØ·¹ÍlíRòë÷àe zè‹ö™ 4/œ3e0¥u ‹öè¼êÓïëõ¦ñÂÐ'¯‰©¼µÄæ¸CÂÖëÑ«º$ :íN“Fü,*[=ÕN€`íkot`ÑLjDg=N1§8i[‡oyQX$³ß*b)û ÒùS%ëïiý ™ñXÒšÔë\÷Ñô|ïÌæÒfÇ®Ò#Ü~Þ=îÑo ÷ Z%Ã.–6&A—Bø61\,¨ ãÀÃk² ³<¹AÁ×ÎUâ¶Ð…³š”¼‡ç„B™­a¿pÀÁlÄoº šœêºsöhÔÞk¸ÿÄŸèÀòOë²ñ ö¥ëïЩ9î7¹ )ðÚ1/!3R3Ý èùnèé¬î‰õdõÙͲñ¦Ø·WƱ¼ÒÀ$â/ W×2óKbL:3+L6J,[¥fQmÞd{RØD±=+2–6çQºjÅX0‚í%¾&Ö ¹ÆÄy køéôRøøØ‘Њäööíð„ç¬×ŸËwÏîÙWãnîéB´@ûŽý l"-o5«@ãC«: 5², vìÌÉŠµÁ² ¸Á¾ÈÍ.á/Öq»–˜F‰™‚S••©„¾ŒÂ™Â Å¥¼ˆ¦Ž±$î²ççó¾[Â*åÂóvì‹ðœ § óÝîÞý8;‚ð×ý‚^-N1ˆ5Û"Pâü÷é çQìlóLõ½ß2º}©}µ¸ÅI¿_¾½Ù7*2Ã.fHøMÇ6l(s1 F!VÐcãl hVÿE„?Ü45"Kjg ^É7 ý÷$/(ý!ŠèKZüEòªÿ'û~ÞÂÐ<âõfö¼ð|é¨Û÷Ì‹Í'Øã í{úÇ uýJúª ~+i2ù<C,>à6á+ÊwòNÍw¸V´#¹Ú¾“ËŠÞúÙcÀYž”‹\‚ø’ï¥öº~ÁÂÿÄ”À(¤ŽÀ¦ã5 îÀÃξ½ßTóëÖëwÐRø²ëÙ w3·:“ñöúÁ+ô.Þ5&•Sí.çÀì…ó÷GçÆÀ+«·³éÅ£ÁÇ»Ô0ÿ4Qí+ DÉNŽ8J)0lE\U÷d×lÎhœVÐF A*7-3õFhfb£<ù€|$*º$ $·§ýbô&V©á¶ÐÞ`óã÷þò(êcݓˇ˅ÖSá ì÷ƒ ¤üš÷ çó(Ó0Ã:ÒAl?˜7m.ã kø^Ϻž³Ø·ð½ ÉÍÛUÜQÃQš¶Š9ƒÚ•K©v½ÔÁûÂÆæ¾E ¬—ê^?é¿KÀ|ãTóºé…í ò/óïëŠ6m:HXïšý89-B1»6Ò$¨PýÈêéèóí‡ô9øˆã£»Æ©ÇµpÆ0¿"¾6Ù÷a*k-GhOð8‹+ß0óEVÜcj¾f×UõF³>Ï4Ñ5 LŠe!\7¡Ž=#9'À![Ÿ¦qûË÷·ÿPýià°ÓýàTóõ^ò~êoÝ!σÏÙÕýà©íø- :þìûœ Ú)+2=€CØ>s7á+@Íò-Ï»ŠµÁ¸€¼ÈoÝÕÙŠÁ] ¤ƒƒ’t¥»£Á›ÃÆŠÁí¤ó§eäE&ï$Å2À±ßjò™ëÌì‘Üã÷꘤1 :|›òZüÛ(¦,Å5å'5bîaè´ìþò\÷:çÒÀ¬Þ´ÜÅKÀ ºÕÓaÿÆ–'*¾C‹NP8)ì0SEÓS’c5kåg^VH¼B˜7D2lEÔe"b;Ò¯$#n)Ý#E"µ[únôúæá1Ñ»Þ×ñLõRòÙìšàAÍ1Ë´Õ(Þëésö^  üh÷ß‚ '0K;4Bl?N7!-h÷Ï~»ö´Ú¸¿ÙÉHÜÏÜ*Âå âÙƒmr¤–»OÂàÁ8ÃÔÁĨðŽl¡ÇÞ‘õfÇ4»wÛ´òÊë¼êÜ–ûÿçC¶.·:¸#Ûóòøì º*y.Œ7Õ+ÿ¦ÆïpéVî%ôžù´ìUѬ²Æ"ÄJºEÏ úSõ&¹A R±=n)F-cA²O(_3jjŠY—HÔB‚8)1:?˜`ÆdÆA†É`"¶(b#ÌÃÊŸÙòþ]æ¬Ñ4Þåò5öðrê߯ÌQÉmÖsß8æ¾ñß\ úüD÷?gÊ&Ï.ÿ9~BÞAâ7;.G"ÅúÒi½@µ¸Œ¼MÇ¿Ú[ßÇj¦#ª„°] H¹ÌÄÄGÄ›Ã-¬#‡×Aö…Ê@»ŠØÓïëÂç]ýœ$ê3,Ü:¨'š÷yùe 1)Ù-ú7H.efðzèÌìãñu÷nî ÉÑ®P±_ÄSÄü·É{ôöoM%Ü@VR©?ª(L*,>¢Mÿ\óhhlÁ\¾I¾C|;É1œ9gZûf²Ix"€ˆ'Â"“ê$óZñìûE*ë¸Ñ'Ø‘íJôrð/íräTмÇNÓÝWãÂí¬Ý ÄÕö0%>/«:6CD 9Ã.«#×ýÉÓÜ¿¶Ø·¼¡ÆÙSá´É‡¨¨Ï„dŒŸ8·åÃÿÄÅUÅø¯Þ‘O™“Ñžù\ΔºmÖÆï§ìèsü_°Ièþn)M<×,‰û²÷# ×&7,»6B1µ¢ñòˆé`í¾ñîöºïÄ˺¯º¯EÃÜŹ‰ÆÆïðx "4<ƒPÔB°+ø*t=XMä[¾ffk0]ñJ]DB=#4œ9æVeÌJ%ý[ “)‰$Àx™ÆëÑôèùúýìÓØí¤öòxíàä3Ò7ȉÒèÜQàëéï¬ Æ÷¸#í+7YB‚D 9J/%ê×MÁǵü·ù»©ÄœÕäàçÊ™«J‘Ñ…ò‰Ÿœc´jÃÂÄÀÃSIJŒ“.•ƒÉPýŽýZÓÁ¸/ÐÛí©íGçœøáéòø‡#·:0Üÿ¼ö\ p$‹+Ü4D22u  ôaèëÈð¼ö9ò Ñ:²b®ÆÀ†ÅD·¾Â^ì_ÜE!&;‘Q¶Eá+ç(ò9GKk\Úh…n~_GKhC=+2â7žWZkSç(–]ƒ'5%÷–"O 1×ñ˜öú™ñžÖ×íêXõCñ$îjæ¼Ó^ÉÓÒmÜûßÐèë¬ ëh÷z"¼%m.à6ÆA9DÉ7b/´'ÅÝÀÃXµŠµy¹»Á•Òmâ´Ï²â“‡É‡³šî°ïÂÅýÃGÄqµÍ•ÏÜ¿´øõNÙw¸ÂÊhëðçôó4DÊë®õ?0:†4wòñ!k-ò3ò3÷ð 'õlçfêXï•õÛóÕR²íªŽ½íÇ£»ŒÂ†è6ÜIT4ÆMÔH /l(g7IÛWÒdák.bNE:?­5€7SÚh¿Uþ-œ (°%Ÿõê¾ ø °öP÷õ`óHÖ¦Ô†èã÷ ôðlçžÖCÈRÏ8Úà5ê» ´û0ÿm"D,5BEH:1Ì'Ï Áá­Æ³·â¶»âÂbÑ<âÝѽ¶’–‰Æ†EšÛ­|À³Ãà ó·g™ò<¹çóº[ߊ»ÈÒéÊñIèMðø <Ÿî‘ó» 9Ç6è íð}Àã,â1†4."gÙøaè2ézî{ôéôÛ:¸l­½¼ÉQ½Á¾.áÕ©Ì:3NNóK˜1j'Í3IFRVeñmf/Q$Fa@H4-3dM=iZP2He÷$ë$t c÷)ö‹køÚ+Ô§æ5öôó—ðê½ÙÈrÍ]Úvàýìµþ® d)ü‰û@ —d*ò3AQDÅ;ƒ3Ý)@OëõË>ºµ ¹Ä¿ÄË6ßÕ º6™mŠ„ –n¨ ¾EÂÑÄ:¾ç¡y¤°‚ì9çç.¾¯äïñêŸîáÉ9ò¶íäª4î7Áò’ÿu,%/Ñ5ë$Úý—êéè`íÙò)öÃâ⼦«]·£Çk¾Y»Ø7U[ü,‹HPÇ6?*ð2UFTÜcjmbi\U3G4B*7s1EfÊ`k9c]3$/(j!g†Š`ùóÐTÿÞlÐQà ô}õCñáê{Ý Ë¡Ì}Ø"á/í%ú> ˜8ýÛù< ­“)2û=9D]>'6,i/ó¼Í ºV´„¸„¾ÊoݘÙ迕ŋׂq’¦î¼ÌÃØÃóÄÁ‹¤sÙ¦ùäþ î£Á޽]à´òëÙ잆ÁøÖëÍ 3†:ÎñÓû†)+T.7ç(èÿÙì«è‘í ó\÷„çpÀ«Û³•Æ|À¸ªÐ¤ü")+UF‘Q:9'….fBÏQÄcÌm¾lÅXßGÐ@{5è.ŠB~eùeŸ@À¢¯&´!›>pYmùhñFþpäÑÑ>Ý9òõ£ð²ë]àÓÌÛÊTÖOßÖëZö# Áþ-øZ¨'g1±=§DB[7ƒ-4ð÷Ñ€¼·³î¶¥¼AÇ„ÛWÝ‘ÄÄ¢}Œá:“¢öºÄóÄbŀ‡¨°j ÝÝôëÆ–»µÛ²ñëÒéd¹îüéè^30Ò;3$¶óÁø*Í-67Õ+a\‡î$èÙìƒò÷hë„ÄR¬\±µÄŒÂ!¸Ì-øuoï&|AoRx?+H.MB9Pô]0irk.\JýDo;2Š<ÿ\Òd§D༛'§!„äÀptñ˜ü-õè¶ÐšÚ‹ð+÷-ò9ìÐâ/ÐQÉiÔÞ¡ã3ﺒ <ÿ÷…e&1/;ûCùB46R-=#µþšÔ ¿@µ·*¼“Å`ÖLÞȨ-…dŒhŸøµCÂÃåÃåÃê®@’›DÔ‰…ùÕÍ º`Ö°ð$îé¤ü¿¼Ÿè-þV)¹;}*`ù¼öH 9',Ü4m.Œö9ò è´ì¦ñ¤öVîÊê®X¯±Â‘Äü·¼ÇñòÑ2&$.?œP÷A¢*+,±=ßM^?jhl\^J„E¯è4 3OShÈ%Ûóø}  )Ù-67)+Üñëïµç¾ë¾ñ×÷ÊëµÄ^¬:²UÅíÁD·ºÌúö±gÄ)ûCÑRŽ>®*….’@!P½`~k¾l<]ÂKïCš8¤1 Aî`YeñDå!ýíá%´!ï„ ÈèÿÀò®ûaÿ,æ¢ÒRÛKïõòûë:áÍÏõ˜ՈÝMä÷ïÑò mÿ!øžë$`.<:íBMBg7%/|$¨þÔ½±Çµ6¼õÅ>×ÇÞÔÇl§ŽvƒÛŠ•”´÷À[ÂØÃ³Ãƒ¬×Žê— Ñû›Ï ºÕ°ð‰ïhëúüK‘éRþ3*€=Í-Ãù1ô+ ›'×, 5Ù-rdÙòñæ²ëñš÷ÓïÛÊ…­ò¬¹ÀÀÃÿ¸rÇñ4Æ$˜=åPëAh,á+ä>sNq_Mk1o‚aOIF¯ˆ^¸iÀJé#,ï&$Úu¡ì^ñò1ú¨*ë1Ño×líAö`óîOå®ÒEÉÓ†ÜÌà´ì¶ ‡wø)Ÿ#œ-884BíBÓ6¢0ç(øÝûˆ´Çµ»8ìтà—Íê®ò󄉆ʙ#­¿½2À€Â Äϳؔs“0Åeû@ØÜ¹¼Í îwò¯êÉö–c Ðè)öQ!û=ê5!‹ðPû ¦,¿282pT Zöýæ¡é1î'õ óÉÓš±ªÊ¼ÆU¹n¿tå ( ]8^PÊIö/*µ9"KF\Äiëp™fªQIF±=¤17FVëjqS?*¯eM%Õ%¯ˆ4Äm ;ó¼öÏóDÔsÓdé+÷bôÐîŽæwÕ7È/гÚOßùêc ÷ªùkþo"F-q6¯BDÁ9¨3,ô„ç\Èìµa³æ¸ÀÓÌŒßLÒ±¶”¢†ü‚H–¸¨³½YÁÊÂÿÄêº:›æ©¸¬ô¾ â[¼(Çé¦ñ•é9òB˜SíMð†’:8Ðîõâk-®0Ü4‘"uÓûpé¡é$î ôøõ%Ý·©.¸KÆ*¼Ô»2Ýö©É1ŸLLM25“)ì6hIÛW—eÀmGh½T‰G&A6Š6sNlhìYi2 ˆ£%O& MÃ)öqõƒÝú!ÛÑ2ã%ô=ô‰ï•émÜz˼ÍXØŒßì+ýà ®û‰ûì —ø*œ32A‘E¥=Ç6/£‡îxʦ·Í²_¸ó¾ñÉ[ßo×½¼[™¨‰‚˜“¦Ç»ÈÁ,ÃÂÄ‚½ùžê‹j¬7ël~ê ÀíÁäÕðKéVî¦ ÊñÖëË[72;>ÝîýNÕ+¶.7Ê&ªÿïëˆé¬î¸ôø­ã~»p©ê´ÆÆk¾m¹#ÖÏÿš@,‰G+OB7ö)3lETÁbûl‹k4Y›J;Eœ9{5\Iàe2^ÿ9]&$l( "@Çâ˜oúu÷ ÿ¥ßçÐsßÍò3õïñ^ì@Þ?ÌpÌÁÕÞÝ™ëwøÏ - !þ¹úð ûª(¦2i>vDÐ@§80¯föÐ>ºk²š·"¾tÈoÝþÛŠÁ£žçŠ5wŸ¢U¹Ü¿ÆÀ¥Â>ÀO¥âߣ³àãtñzÅš½@Þƒòãëíê7ôøÐèXŒ1¹;,!ñ%úäs+T.67Ý)"í‡înèGíåòu÷W髱ŸÅÃ&º°ÍZöè/( D¢S_?+,ž.õ@áNÅ^3j§ma]TK,D|;25 A^bhC ŠO&ý!³ÎÎO‹õ®û7éÉÓžÜðõñíêØàyÐõËTÖvà ç•ïÇÍ Tÿèùfi´'/ :C*C!9ö/"½üNÓ½ ´·Ê¼ßÆ–ØUÜÆÆ¥gƒƒÇŒ4ž}µ­ÀÊÂ"ÄåÃ^¬‘¹Ñ×M¼ö‡Ë6¼6ÙMðíêÂç×ýUµþ?é¬N+<:'Aö^ø )°+’4+ñUèjìhñsöåìYÇž­°ØÃÂÄF¸£Çñðµ|$Î?%RÒA-Ï.@3M][tf‹k4_LM3G§>%54<YÁbHf%”± Ì'x"̧(Ÿ…•õŒüP™ë3ÒLØ/í3õ£ðGíOå¤ÓªÊkÕÅÝõâ‚ìl@ ÓøƒŸ‰$¨-œ9€CÌDF90í%}@ØÆÀê´D·±¼‘ÄÙÕBßãÈÆ©k…„‹nœþ²cÀíÁ€Â³Ã°ø’4˜™Î-þúòÏêºþÕ\ñí©ç>úDÄèý(e;Z1G(çòÛ6ˆ´LµºÖºÒûßK̸®o‘…ú‡g™q¯ÀvÃÌÃ;Ä·³œ• •Æ%ú×ý ×[¼qÒ&ï¡ïóçºõˆø|éÙøI#e<:35þò`¥ ‡)¿2!3€ ’ 'õ‘ç÷éÛíÏóãñßÒ ³;­ÿ¾|Æ¿·¼ ãw Î[ ÿ9}S/K1/j'É7HVŒf®pûfuOØDæ?y4#4ÙPdj{XT.އ#¶"ÿèrZáðÝô#Éö×ÔÒ.çAöò?ïtëuÚ*ÈPÎ×Ú%ÝxçíüJÛùšý%¶"y.8]DŸFˆ;¤1=)¹ ÎáŸÅ¶a³ÿ¸ Ðâ5Ó6¶w•ˆÓ†–˜!¬õ¿›Ã„Ä“Åò¸Œ™ž½¼XõÝ Ýʼ?Ììfð"çüñ³³Eìôó o;7× üñÊUL*ø0>5Û"g<ùUèºé îÏó`óBÙB¶¬*¼Cȱ¼š½LÞ%¢ú1XM1LT4Ñ)6xER–_ÒjQgáTIÀDH:Å5íH aÍV·4Q.A%=#›§n*-øÄôzªùÛNÓíä ôªóéîWéÁÛz˲ÎPÚìÞ.çBü> 3-þÿ û +œ3÷A3G‚>5í+>¸è^ÉŽ· ´ž¹™΂àüÔè¹q˜^‰ó„$–%¨]½hÂŒÂ]ùº­æ%´Ÿîº@äξÇzèCñlçÐîÁ >—ð¾ñâÓ67„íð&A+%/5ß$ÚìûÈê5êÂíþò=ôöݺò¬>ºÉx¾y¹ÖHÿÃÒ{/ÛK´P»6ª(Ë2CO`€lOlÞXÌJåDm:ƒ3,D¥` ]÷;•OI#‹%MŽÐŠÏù‡ôÏÿæþ8àéÑBßRòãñÐîhëDà)ͺÌXØ Ýçç÷    pý¬ Ú(¤1ó?«FrBœ9þ-·Zð²ÎWº¹´ô¹AÁIËÔÞ}Ø$¿K¶Š‚'’Ò£@»±ÂSÄ„Äÿ¾&£RfªæCûë¯ÁMÁ«â\ñŸè‚ìn‚õlí  F39Ø ó ÿN?*u,ô4Ì'ýì«è9ìïñÇõåÄ¿y­[¶ºÆ­À ¹ÂÐqûY5+‡F7OË8ã&Ï.|A!Pˆ^‹k5kÑXUFfBò9Ï4ˆAÅ^a•A¯_í¼%Q!›«:žÿ¼ðÕüžÿ›æ•ÒÜÜÄîÂó¼ð"íÿáƒÏ‘ÊÛÖäà­éÝô´ Å Ÿ1úsýó(˜1v>óE¼BŽ8×,Â)ö{Ñû¼®µÿ¸a¿GÊJ݆Üåé¡ìŒEƒT¶¡Jº‘ÄŸÅxÄŸ¿7¥âõ¢Oß\ÊñéÅŽ½¹ÝáðrêíêC©{ú9ì5Z1ˆ;´!;óÑúš…(Z+¹5¢*Á)çí$èì^òîö|éGĸ®1´2ÆO¦·zËsö<:'ÔBåP=*`.«@ÆMH]nilÉZÊI;Eù<%5Ì>ò\cjD¥ ©j!/(x"ŽŸÂZó¬úÏÿçÓ·ÜKïõñ™ëkáƒÏñÉ ÖšàóçñN> ^ø{Ct&m.’:ùBCk9¶. "6ü²Ôa¿6¶ä·§½ÈÇZÙ ÝÆh¥×ŽÂ„+Ž¥ŸB¶¹À* ÙÂh«ž2ÛÖ õEÉ@»±ÙfðëµçwþFHÿ~êáË,&;¨'¤ö-øe b),25ƒ-[Jñ“èÙì¦ñD÷ÛíûÈ5°´²¸ÅdÆ_¸bÅVîà BÂ"Î?3S[C¤+Z+Y;HQG /L*©9‹HuUSb­jbfNÎEÐ@.9‚8ZN€`#Q>/Œ2²&Ð#ýÿ>óD'õÑôžÿ¬ô–ØÕÀæ‘ó\ñÂíçç»ØËžÐæÛ¥ßç箘{@ûéô9!ü,8hCpG|;o/º$w0ÜnÅ_¸š·@»ÂÄ+Ô§àúÍǯN“3†Ù‰›š½°™ÂÅEÃhÂá°D”Á•ÈJú¢ûšÔ»»éÑ‘íí0è^øe)²ë‡ú" :N1KõfÎ"J)Œ1¤1 “ôŸèOë®ïdõ¦ñ}Òeµ±[ÂjÉ£»pÀc㸱 S9ÀP²Iô.Ì'L6ÄFNTýaíke\OóE&A:97bLäaVþ3v¡$Â"Ú&«fæ?õÏó³ý´ø#ÜÍÕ‚æéô¼ð/íKé„ÛŸË Ð8Ú~ÞæPý ‰)üb<E!¼+ˆ5|A¸FÔ<˜1þ'ºeÞÄÅ.¸s¶Ã¹§Ã•Ò‚à/Ð’³©•'†‹‡[™¸®ëÀxÄGÄlĈ´–ö‘(ÁsöiýÙ€¼-Ïvìîæ¸ô0ž vìh÷÷9 3›ó‡ùç(ß0ò3;" ÷ˆé*ë&ï“ôÀòÙÕŒ¶î°~Á/ʽ¥¼†ÜßT Ñ5×O‡L3‘(Y6=F1Rc^Ÿi±fÑRºGýD=â7ÐFa]ÁVÖ7Äñõ#ÿ"ÀÿäK0RøtñšýmùøÞËÔ4äÏó òíëé4Þ÷̲ÎDÚ«ÜMä¢û ð TÿaÿšM+ª4ÔBAH„?Ž2›' â—Ç’¹Œ¶Åº‚Ã×Î6߉Ò·¡—ƒ‰A‡@˜ªa¿µÄ„ÄÃî¶Øš’»9ò<ÿ¯Þ§½1˯ê¼ðµçjò@ 6Ýî}õŠ[7%5# wòï)þ-ƒ3$DòøÆéë“îÀòjò6Ù<¹g°©¾lÊ©¾¼PÚnw8:3\OhO>5;({5ÊCP†]?jïfLSKGÂEe<ö5,D^ÞX.9Wçf%3$m¿ó2Tù“ôþ’ùðàÔâñíðIîåìsßß̤ÍgÙæÛ¯äoú' ³ý‰ KL*2pAMHé@m4¬)°ÊååÉܹ¶a¹|ÀëÌáwÕºñš‘Š=…œ•n¨a¿óÄ;ÄÀÃܹŸœwÑ´“îpcãI¿áÇSçÄî ç÷ï/ ’¼ðƒòû”5Ç6Íþòố(k-%5È%Ã6üYê÷éÂí;óõeÞì»g° ½Ê”ÀöºþÕ=JŒ‰0 LOî7´'ø0*CNNš[ h„hUÐFxEó?³8B_\U] >ˆÒ=#'2S.CŒü?ï6üÍþä¼ÓŒß›ò%ôïùêSáËÎIËBÙðàÚçsö9 Í Ý»û’ 4ë*)1û=ÀDz@46Ä)ì îfÍÇ»ìµ0¹ÆÀXÌßLØæ¾¡˜‡• ¦g¼ÙÂÁM»Â¡èl­_ç&«èMÁvÃÞã‹ðéí¢eörðŽR3î7ÃÀòðb)Õ+#4v'Ñ:þ´ìêbîóqõ2ㆿ)°JºËnÅŠ»žÐmù†+×I–Sg=v' .Œ=²I¹Xxh¥lü[ J“Fv>†4;#Q$FN+5+’:zF®SzcÈk§a{LAHAB@6·4¾OÜc¨Ph,ùëC&l"rx« !s‡îkøXÕðÔدêD÷EòzîóçÛÖ›ÉðÔßÇÞÔê¼ /Ïù„I#¢*6•A.E_9¶.O&o׆¿ö´·ä½ÇðÔšà?Ì`­”ɇ–Œx›±£Á ÄÀÃ_Ä-²Ž”0–ïÈÃùÝú+Ôî¼ÔÝîýìvæîöê‚ìßû•$ :#.+ýÏó˜Ý#n)1¬/=¦ ÑôŸèãëÆï ôÈð“ÑXµÙ²SÄÉ»ˆÀMä á<:…QCI{/{)ø6ÄFTóbÌm*f RI¯B³8î7¢M‚aøS˜1vi‘"!‚2­O uqõ¦ñBübôœÛ{׆è?õ™ñ1îGçÓØ“Ë ÑþÛîßÀæ-þ‡ LûŸÃ›!,Þ5ˆA$FU:ê/^'˜.áCÈk¸øµ@»âžИ߃Ï%´©•Cˆ!‰~˜ï«$¿,Ã[Â]Ã[¶Ô˜s“’¿¢õþ]ÚÖ¼¦Î€ëVîÎçõ<® ;íö“]8ð2“åò%£1)Ã.¿2!L wø÷é—êÐîÏó/ó‡×Ø·‹°Ð¿;ʽ¼B¼cݲ­óô4úN¬L¤1…('6ÌDÀP[`~kÀgoRëGåDˆ;†4¡Gkb±Z¤7Gù«#$Ÿ„œ¸ôó‰üWÝÇÒÚáÂóÂó‹ðÙì³à÷ÌÎÉÙ0ÜÖåDý» ð Žýüe ë¤+ 5£BzFq<ß0 )¦jæÊ·¹”´F¸—Á¤ÍàDÔm¹6™ˆn…”—¢©_¾ñÃ Ä Äw¸Î›a!¸rðVá"¾ Érê¼ðÄèïñ% µÄî¨òW˜77» ñ»l(-¨3?$µü5êYê¸î#óçóžÜ>º®¯Ø½nË÷À6¼%×-þ׈o/VLPO˜7ç(2MBºM_\niUiþVJÝFÖ=7QD!\¹X ;—ÀÄ#ë$†Ø>ßûÍòþ þ&ãÓÔÞð×ñ¡ïjìÿáåϰ͠×{Ý6åòøÃ y •PýÏ U*Z1Ú?WG&Aö5—+Š[ë¬ËºXµy¹eÁ¤Í¥ßÁÕB¼]š¨‰þƒý”À¦Q½]ÃÖ™ ºhŸÏR²Ìì±åëÀ£ÇÚç òdé3ïk 'ò\ñJ5P8ñ}†´'+3&-þQìÔêIî^ò ôàʼN°¼¶Ê¯Ám¹ÏHùœ,GK3S¯<ó(0|A®M)Z=im³[²IIF?46*= X’]¼B «j!K$Áû .÷IîHùÃÿ‘ç•Ò”Ýtñ‘ó‘í[ëàädÒË ×DàgåÛóm ˜-ÇûsØé)Z1Ž>ÝFCCP8,ñ´Ï§½Õ¶ ¹Ð¿"ÊmÜ ×a¿~ž'Œ`„s“ë£oº€Â]óÃÚ¾f¤žË«ñæ?ëéEÃxÄ»ätñUè¾ë¬Ôö3ïZü2ä8­9òaÿɃ'Ý)a4J).õ¶í÷éGíïñXõ~äÒÀÕ°>º-ɾÂU¹ÍöÑ ‚b)¡GVR¿>Ä)Û.ä>åJaW»e(k<]jJ"EŽ>7ˆ;Ta]«F&à!•$2òŒUÄñ/ù ÿMêFÕyÜïbô?ï ìeäNÓçÊòÕ[ßæ+ñ3¢ güN,y(L0ï=•GFMõF=F¡;á+·üñ¶Ðп˷ ¸8½£ÇRÛ_ÛjÓ¢¨¶„¹‘¢ ºµÄKÆxÄ0¿-¦ ‘Χ…í†ÿ$âWÀ9É$èXï›æXï ¿²ñ#óÉ#4Y6Téô#Œ^'7,o5¶(*šýÀìCëíƒò%ô­Ýì»k²G¾ÙÉÞÀ»»Ô®û@ æÏ."KwP¹;X*1Ü@‘KyWeñg¬XíHóE.?ú7O=TŠYfB&n…"“#nWmÄ×¾ñyùsü?éê×Bß¶í—ðítëÆã'ÒÝËòÕ’Ü â ôú¢ Ûmÿw ï;(¤1$@5H‚D³8 )•é—Í󾿷R¸¿zË Ý´Õ¾MžìŒÛ„]”^¦ ½«ÅõÅSÄe»] %‘N°¸èÍþOå÷À‰Æ~äÂíÊåjìö¶óòžg1Å5s{ôÕˆÀ'•*þ31)8wþ`í¾ë‡î-òyóÖß ¿…³Ì½"ÊíÁy¹Ï^øq :®*rHËO£q6‚DBZ\Uâ7n1#¶"Ö| (¢õAðûÛù‚à»ØåÍòõîáêéYÞ)Í…ÐôÜ¥ßåü– à ªÿT,!Õ+J5z@nFÖ=R- •ÃÜíÇg¼Ü¹û¼ÐÅsÓ[ßwÏœ²q˜`Š›L¯ŠÁ(Ç‘ÄíÁD±c—˜¡ÆdõwøƒÕS¾ÑÑYêáêŽæ¤öNÄpïÅú%5#.—øå !—%F-ö/ å ëõ~ê ìXï óºï¤ÓùD·ÐŮ̔ÀWÀàÞ3Ç _6OxK-3À'!3<@ J Xf¯e¸RùHbFQ> 5«@žWüUo;Â"íé#9!­šÿ?±”ú#óÕüÙøÌà{×ÞãÈð5ð1î^ì:á^ϲÎuÚˆÝäûÝ c Ð隯d*Ù3I@dG:?Û.À!×ÞÝÈ ½ô¹¼IŤÓsßlÐm³î™LŒPŽ0œ½°tÂÇÅjÃóû™O™zÅyóP÷yÖ|ÀDÔQìjì‚æ?õÝ …ðeûf 5¶.P!øu Š$š,ß0."¹ ÷EìÙìðyóðáÓJº!¸¡ÆßÌÞÀ»Á±ß“‡ §–6P LF3(×2$@ãIµV0c:bFP3G,DÖ=7C\U¬R9l"Wý!§!“òøÛóûøã¦ÚYä‹ð¬î`íìŽà^ϸÑòÛ ÝMä”úà à ݗœKÑ)<4U@éFG?/.íÐyܥȘ¼#¹½¼ƼÓàÑ'µ:›)8Ž«œ5°EÃÈ"ÄWÀü±t™M˜QÃò¾÷¹×pÀ?Ò5êë]æõÅ ¬áðßûaš2,jþø¿ £%²,ö/,!è ÷Eì/í‰ï óºï²Ô4»ÿ¸•ơ̭ÀKÀß’4ÆMûI3M%š2æ?ƒJ W d c´PßGÄF @g7A W¿UH:´! ‹%º$ñæ0„ÊÅúÍòâüú<âØ€åãñMð ìCëýà ÐTÐèÜ*ߣäôùk }ÓæO ¢*°1O=ÖCÊ=>/""¶äàQÉš½U¹˜¼ŸÅ¤ÓDàîÓŽ·„›ŽZ"›´¬(Á¡Æ"ÄrÁ¢µÐœ˜ ¿Mð`ùÚ0¿EÏáê‘íŽæjòÙ ÉÕðøÖš2V/®¼ö)K5%X*ê/¶"Ç Fø™ë9ìïRòZðXØÊ¼ä·nÅÎûµ¾8Ú_þ ¯ì0MÝL¢6%T.2;•GiUùegÕTG.Eû=Ü4@<U4YÚ?#Sï "äÜ AþïÝúßûéÙŸâð\ñ›ìEìÒãÓÒ\ÎúÙyÜÿá°öã ® ã#ÿ¹ x)}0±=åD§>ì0¸## ÿçPÎÀܹŒ¼Ä…Ðgßcך½ÊŸ#¶Š™‡¨Á¾ÒÆÆÀÃϹ¡ò•[¶ë°ümâ£ÁåÉŽæéîÚçßï5öôéôÇ}0¦2_ ô\ã&J)e0r%¹þýìhëzîò-òÇÞYÁü·™Â¼Í“Å©¾7Ô¶ùÁ S,£HÄL:9‹%/.M<3GÓS’cgXMHGÎ?à6ÿ9`Q¬XãCÌ'¡ý!Â"ÂÎFÖ—Rëï>úüé ×îß1î^ò î/í—äÓÒ®Ì)Ù»Þ£ä‰õh J þ O9'ž.Ô<³D&Aa45%k…í#Ð ÀºB¼vÃf͈ݖØ4ÁS¡èj‰–£¤¯»éÅ|Æñý¼º£˜“Ñ®*åPýÎç©Ä5ÇYä3ïÄè‘í³¤ö;ó³30Ï4Ú ôV³ã&l(N1^'sbî£êíòÏó”ãÄ8·>ÀΰDZ¼7΢õž „d*G×Oq<9'ú+W;ÐF‰Sæbxh}YºG1F&A8Ú9ªQ:\¡Gt&Ô‰$ŠÆS@Yïkøþþ‚ì…ÖœÛìGó&ïzîSç Ö¸Ë>×âßýæÙòu ¨?˜ü(²&;.o;ÀDÈB'6C&*-òÓÂ>ºöºAÁÎÊðÚ8Ú‘Ä\¥€“ôŠ’–Ô¤»2ÆßÆv󽨦ð”fªàýëKÆjÃ]à&ïaèåìHoúhñ… ‘.–6„AömÿM%7&Å/)"éîKéë÷ïGóÊåƱ¶³½ÝË‹ÇM»‡Ëüñ É´'ýDÀPz@J)É+D8—B¤N ^Êf]ÙJ•Gÿ?676ÄL¯Y-J7,aO $Y·œ~ îðÏù½üKïX؆Üëéƒò îVî„çê×rÍ#ÖÞÝ]æÕð!š ªÿ˜Æ+&Ã.ž:ÌDxE<:¬)¹ö!ÕûÂ<¹·¹ÀñÉÚÜWÆó§k•HŠ•?£a¹lÄzÅ8ÃU¿ªæ•/§„Û'û‘íÈÖÂß|ï÷é~ê·ÿßû¼ð ¦, 5ŠÕöüý%ù%&e0ë*Ráð—êlífðƒòÀæ÷Æ®µ4»›ÉÈà»ùÇ`퉈%~B#Q[C®*¢*[7*CANÇ_g~_…KÒGB«:7K¤ZéLÛ.2¼"KòëÓ ð}õüÊñ»ØµÛÿçïñGíì.çúÙKÌ7Ô߀åÂ홎ü 0ÿ„A%¨-:9,D Fc; )£-øÙÕEÃcºÜ¹ó¾ýÉBÙWÝ^ɪ•F‰–’À ú¶.Ä߯ Å Àɪڕ÷£J× úfð¡ÌÃ%Ýï•é•éœþÍ#ÿñ *e6«#úþÏM%—%Ý/--Ønwò~êvì÷ïGóÜèÙÉú¶|ºãÈÊÈ*¼­Ævì¤öÝ#.?ÀP€C¤+Ñ)s7ŠBõL][e†]¨JëG9DK;Å5rH”XVL‘.·¥ d$ &ÒF^ò÷Pý¦ñ˜Ù¿Ú&éòbîíÜèBÙ ËNÓ¢Þ÷ãQìgD ËýT%Ù-Ž8YBGE·:V)§ÓûàØ=Å»º¿ûÈÑ×ìÞ‡Ëþ¬c—…Šˆ‘™ŸÇµÎÄÒÆýÃ|À ®­—x¡NÓÃù…ó¨ÏëÀÉÙ¬î¯êpé6ü-)Cñút&Ñ5&güü1#5%Û.þ-ÎL`óÞéïë?ïwòíêÍØ·«¹È Ê¿½0Å“èJÊ ·:ÉNÂEþ-=)6KAK¿[¥f§aºMIvDW;è4UF¹XðOð2•S"h >û¿ÄŒyóöôý‡ô„ÛNÙäæ òŸî‘íºé%ÝÕÍÓßÿáé$6¨ èÿì`"D,6é@;E­;Ä)»ûÙ¡Æ¥¼öºa¿¥ÈÏÖÞ¡Ì ®˜Ñ‹ôCŸ¹´ÄAÇ‘ÄÒÀJ®˜Ôž¾Î÷‡ô¸ÑAÁV×"ítë$èÃùuC×ñ%>5Û(wþqû» ç"ß$`..UB ôÔê^ìïEòìƒÏ2ºJº€È®Ì¡À›ÃYä^ü~Á9RP~HÇ0/(m4æ?IX4eÌa¤NH F,>¹5YBæV¸R¢6t Šx"± »mµÀŽ3õñüø*ßøØÊå&ïlí"í[ë€ß¦ÎoÑŠÞÉßOåüý¶ ‡7·* Ä)y4 @]DÐ:d*=-þÛ߯Q½ž¹î¼÷ƃÕß/Ð<³¥™®ŒÜrž²›ÃáÇÄ¡À¤°Œ™nœ^ɇô‰õ¤Ó¹ÀÍÕÀììzèRøà ›×ñmÿØ!c5+,£úH j!®$u,þ-Mœ Aö*ë9ìõî ò;í¢Òì»ÞºÖȤÍeÁAÁàÓZ—ý8ÀP×IŒ1&°1B=‡FªWfpd9P£HFÔ5å'°14< F¢S¿aaFPH$Fi>Ç6x?ßSöR ;d$C b#ÿ"_Ÿ©a"üåòûåøÆã}Øêã÷ïºïÌìëvàåÏlÐôÜ*ßräTùF … —²Ú~Ä)u2 >åDi>ž. 2ݲȄ¾¹º‚½?Æ‹Óß3Ò·Þ/Þì¯íÁ(Ç0Ū³k›³šGÄ\ñö1×ÒÀÝÑÒéáêŒå¬ôž ‡òŒü· 39-#mùÍ Š?$¤+¬/ñ!Ñ !ø´ìÙìïÀò|ïœÕ½ˆºíÇáÍÀãÁÞÝ m ¥ƒ3‰MK7¨'N1 ;vDÃQ±`GbÇSJÔHÚ?Š6€= Q¶Q ;á%!«#,!r[šÀG˜ürðNüš÷|ãuÚeäïï¾ë¥ëèâqÒbшÝqÞmâ’ùË ’ ªº‘(g1Ô<ïC"?y.2ÓÞ É󾺽WÆÔ¢ÞqÒ¤¶còR·œö®AÁÇIűÂ{´|œØÃÓïqõ4Øû°ӣêë"çßõ# =‘óËý0˜1D,žû# 4«#ö)þ-E!Ñ køýì‚ì¬îïñŸîüÔØ½s¼-ÉγÃ÷ÀþÛþþ €Ù35N/KJ5Z%X0W;`E=RkbdÇSÈH«F"?Þ5Þ;;QUi>%í "C Š ·Ú ÿPñêúørä}Ø”ã|ï+ñÿí"íã®ÒEÏiÚÜÜÐâùò ® wZs(˜1¥=.E?è.!_áçÊ󾔺Q½†Å?ÒìÞáÓ ¹àž‘PŽŽšã«ÁáÇ•ÆÃ‚·CŸ*™ ¾;íã÷ÝÀÃ…ÐUè€ëýæ;óú‰¶óÝúЉ0è.× ²÷‡ŽI#)/3$ü1ú,ìíê"í¼ðpïÙWÀ¯»ÇíÍxÄè¿)Ù8ýž 1óKLP8t&%/†:ýDXSècëd‹TÒG¸FQ>ž4·:S…Wµ?é#^!C m(I¯ÄVîû´øjæ6Ùtåáðåòýì,ì>ãqÒòÏ’Ü~Þ†âœø¿ Ñ jXî …(0*=ýD"?%/¼¬õâIË&Àźg¼xÄ`ÐWÝðÔM», 4’PŽ:›C«¹ÀÉ‹Ç_Äܹ0¢Œ™Ç»Êë¨øqÞïÂPΓè^ìïåðq ‡ô%úa”/b/# öçäZ%%)1/“#ü¬ú´ìÖë î+ñðËÚ&À>ºÄÅÎØÃv½mÖ¦ýîØÉ1ñJ“L7Z%å-¡;nFTR-MH?Ma:T(þ-†:;E Q~_dƒVÈHõFé@¿8a:ßM¦U€C(Î"“#_ާÀ—¬åòFøÛù£êÚUâ?ïlózî^ìÆããÔEÏøØOßgåÂóö' Vb` -'--Á9íBA 5K$> ¡é+Îè¿|º½åÃ!ÏÞ׈À•£“}Œ˜™=¨]½÷ÆMÇ;Ä(»ß£—´²å1úå„Ä7ÈWãíÀæSí9q D÷®õ#w-g1¯}õr h&ñ'b/7&ÔHÿ¬îëbîEò´òœáåà ¹*ÂáͰÇ_¾¸Ñ!øm Á‰*®G)N­;ù%)+[7ÔBRPâ`£eÃWH®G?ø6ð8 QeYlE (“,!#õè t =ðû¬úÔêê×ðà íÀòXïð]æ¿ÔÍÇØàÞâåô» bFþu r&Ë,µ9¼B2A>5?$w=î%Ñh»ì»â¼͹ݵÛbÅ"§_•}ŒÅ—C¥¼rÇȩĚ½;§a–R¬*ßÛùé(Ç&ÆFáGí èÀìg>ú‡ô¢ š,Ž2sömÿ4º$&Å/ó("KÆïë;í—ðÙòŒåÈ º4ÁÎ/Ê<¿CÎ=ôF Û(,DCOv>ó(p*¯6Ì> Lž]MeNZ+I®GMB]8N7¸L4YH5+Æ[ …"r¯ž Að÷@û§ìÕÙ˜ßìRò&ïõîaèôÖNؚͮà6åÈð gZÚþ‹­f%¨-k92AÐ@6—%…óDÔ.Ä»»öºeÁÝË0ÜaÜȺ©˜»Œk•Т©¸«Å£Ç ŵ¾X©&—º©„ÛƒøhëÙÉUÅßÊëçùê=® ‰ûôów *i2i²÷†ÿW$%ª.‡)ÜííðëÙìðüñvæÉWº†¿pÌ Êx¾Ì‹ð˜¥t&BNz@Ï(•*Å5a@LF\­d¿[åJ—H(BF97þJžW-Jy.ù!n#  M€ { ló/ùqû¦ñœÛWÝdéãñVî¸îÄèâÙ¾Î<ÖqÞOåÝî×9 =)x«#š,½7KAABÖ7Ê&xëõ’ÖGÄöºM»ÆÀ¶Ê8ÚÏÜÈժܖ¸‹Ë”Ÿ¢#¹ÆYǩĆ¿ï«(˜û¥1×#ùëïÆÌñÃÏÜÌìIè?éýì ðýƒòbñ'Í3!/ù½ü¿=#•$þ-p*£Í^ò‹ê,ì‰ï´òõè'ÌÒº¾Ì=Ëÿ¾¼ÇOë¬4ë$„?!PDË,ª(Ï4æ?ûIÑXIc<]xKßG*C©9µ3 F’WNNú1rfÐ#€ êÿ†pÁEò?õ¿ý ô#Ü Û“è‘ófð¸îáêÝÎüÔvàcã*ëð ªÿ`î…"‰*ž4ñ>ùB³8ƒ'£'ûàØIÅB¼»|ÀÀÉôÖ%ÝÆÌǯýšæ_•G¡'µxļÇçÄYÁ7±Ú›n¢jÏõ+ñåÏÖÂZÙÀì~ê¡ébú} ºEòƸ#-3r%šýÇû– ´!U#+5+vºõÊëEì“îñ(ê´ÏÔ»½ÎÊZÍ2ÀzŽåC: æ9dME#.Ý)Í3Q>÷GÁV bW^ºM›JnFŒ=6›D7UpMœ3!™ Ä# " ½I±˜öD÷uýh÷ÞÛEæñÝîïAê>ÝÏãÔqÞàIè³ýª  blB9!Ñ)36=(B©9)+~1UÜ£ÇO¼¹ºÀƒÉÙÕ4Þ Ð”´S›uŽL’ùžÉ°ÈÁÄųÃAÁ¦±_›ëÉGó3õšÔYÁ²Ôhë*ë†è²÷¢ ;CñŽýr\2L*Ó¨øÁ ï %s+ã,õƒ +÷Öë…í•ï^òî+Ô¥¼Òº\ÈáÍ÷ÀÀßd!÷Y6'M|G¬/—%°1ï=®GyWMed-PíH“Fg=Ž2ÿ?ÞXFVð8Èó‘"¶"ŽU ©÷Ñô3õdÕüšà¬×¡ã7ñíðMð¸î$âhÎçÐ<ÜÏܱåšý1 ÏÿÜÿµ£ )ú1½=6Cÿ9‹+l"Ó$â€È»»Ü¹’¿¥È3Ò[ßÓ]·k›šŽüŽ<œR¬YÁÆÆÄhÂØ·§ Qšõ¿Xïôù ܈ÀÏêéîÞé{ô# 9 ¾ñ÷@ü2L0u ºõ=l®${)y.ã  yùÖë¥ë‘ííð5ðÚ_¾ü·ÿÄ!Ï„Äÿ¾@ذü  €¤1IL“LÇ6þ'L0ê;ÿEgTÐc~eßSAH3Gñ>ª4Š<ÉTðU:3ü&NhñXÒ>ÀË·’¹ÂÄËHܽٳÃë£Y’ ‹¹—*¥êº$ÅzÅSÄ󾸨Ԙ°÷ãsüYê™ÈÀÉ€åºïWé©í7Ó +÷Àògå-_3†1ô†ÿ•$‹%‘.™&6zpïë¬îhñ ó¡ãµÄË·0¿XÌ(Ç ½ÕÍyóÍ c‹+dGüO½=Ï(P,‚8ùB¾O~_Œf˜Z²IÄF³>V5±7\OêXÂEÂ(G2›!a¡x@f‡-òûµþ/í¢Øöݧì/óðï§æmÖ—Í@Ø8àUè´òb ;ðýh ÔÕ%-Ž82AWA}6J)¹ëõÓÜ¿·2ºÂËšÚ„ÛÇX©U–'Œm–“¢„¸xÄ|ÆóÄtÂ…­–˜¨¦Ú úzîzËõÅšàïŸèˆéFþ°¹úÕðîÉ+c5Æøõ°üœ•$‹%o/‡)z²tñ7ëlí—ðló0è9ɳ·½¼¬ËlÊ8½YÇSísf%ÆAP£BÇ*5+±7«@ÌJ«]Eg­^GKÊI,Dð8 4åJNZJ+nÊ Û" ©6Š0ßïÏù$5ðc×Ýtë¶óï¶íUèàØ‡ËJלáãÀìƒsZþX¸#¤+¤7ÞA,Dò9Ç*Ðßûֱ¹U¹†¿ÌÉÅ×öݟ˨¬”—{‹–’¥Ÿ@µSÄÐÅåÃAÁ'¯£˜Ú¡¤ÓœøƒòïαÂÛ$îÞéaèXû¿$ñ9å'6ß$Jú3ûgÐ#5%/7,âqnôÈêÀìXï‘óãë΄¸ž¹*ȧɘ¼åÃzèÏa #*=uOxE-¬)ö5a@{Lm]vgg`IL5HC†:@6 Jä[O0UW…"""±_FI -ò÷z{ô³Ú4Øå—ðXï¡ï¼ê<ÜZÍuÔ–ÞÖßÒé¢ ‰8ýÀ‚Î"í+Þ5?6C.9)+,! Û?Ɔ¹F¸Ì½ÔÇüÔß\Î+±¯˜{‹Ù&±*Â†ÅØÃÊÂ^²˜™zœË®õ}õÔÂc×"í5êÂçåøPÈð #Ñ5ß*I¶ùy v!‰$ü,-  ÷ëÖë=îEò¶í3ÒJºÍ¸ÒÆÑËWÀÖ·âáä¥ P8¤N~Hâ1)w3½=°H W·cxbåPRJpG³>B7DyWR»6À!f=#G"³]:Hföóâü9ø»ÞÏÖÒãZðºïzîtë6ß/Ð'ÒþÛJÝûåý  ƒ ôÿô* +Í3ñ>Ee hºä“Ï(¢0t=*C=ì0¼%þ gå¬Ë ½¸Ê¼AÇöÑ¢Þ¨Õ]½¡Ï¤µ›5ª8½ Å‘ÄvÃa¹Ú¡Y˜ô¹5êù½ß§ÃÎaè‘í0èjò ª ªóh÷˜1D27÷ÍÖ%‡)è.$#_ŒüÙì[ë‘íúð+ñôÜMÁ#¹ÄhΫÅS¾sÓø¶ 8Ó0‘KpMw9²&R-î7£BwPäaOf²U÷GéF?Å5W;ÇSXYWA%ç¾ $#o8Š•ðìû¿ýç\Ô(Þ©ítñXï…í¡ãÓÒ×ÎÚÇÞ6å²÷# » åyÿà ‚V)X0~<C˜=®0$É^ìÀÏξ_¸£»³ÃÕÍ ÝرÂh¥É“sŒ™/§Ö¼ŸÅzÅØÃŒ¼¥¥c—×±Þã/ù*副SÊ*åxíSçŸîR® ÷)ö’ô.k3sö£<r%Ê&y.)%ö·ÿÐîCë íðïñâbÅm¹÷À‰Ì°Ç<¿1Ñ®õ Ÿ+¸F®M½=é)Ï.S9B?My]ˆdZjJÔH÷AØ8ð8ÆMuUC`(d!Ý#?èäÜÒïñBü¿ý‚ì®Ø¯ÞhëCñóí…í§æÛÖÏ]ÚàÊåñò=Ç ëÏÿå t&Ë,æ9ùB?Aè4h&[°ðoÑ»ÁÒºO¼ÃéËDڱ٫ŨÁ•¢Œ4˜~¤<¹‘Ä«ÅjÃÁ¾©¯˜T­[ß¶ùrêƒÉ¼ÇaâIîýæ ìÓD1úªóV á+ä2Ôîö=Ô‰$ß$-²&uZPñ™ëåìKïòùärÇH¹Ä¿ºÌÙÉI¿¬Ëpïø#(9D7OAL*)+Ç6.?+I½Z¡dæ\ÙJ°H±Cè:46AHðU7Iò-ù,!ç"÷èSHÒ6ðœø:þ\ñìØwÛÚçðnî¡ïÖë݃χ×Dà¡ãïô:ƒ b}Á=#f+±7WA•Aq6+&0D÷ÍÕÌÖ»­º~ÁéËÚ·Ü…Ê-¬¡—dŒa–£³·lÄdÆÀÃÿ¾!¬±™…§ ×÷Iî÷ÌÂÄ%ݶí?éë0ÿuýò“)Ï4l"ûþ°û ó"ü,Ñ)à Gó5ê¾ë&ï^òõèºÌ»"¾ŸËéË ÀÈ«èÃ$ñ>NïCu,b) 3â=÷G¹Xˆd`ÓMhI›D<­5IFRVNË2ÈÒ."ã MÿSIÍ‘ó¢õ6üÉöÝÚíäúðŸî‡îÆécÝ#Ð ÖBßÚá~êŸÉ ’ÿ ,"d*y4›>•A*7V)&ÚþµÛÐÅ­º·¹&Àʬ×6ß×Ξ³äš”‘Ò7±6‰ÆÄ—Á\±„›ÊŸ̇ô}õuÔCÂÙÕãë¾ëpéÏù°›Êñ‚!4“)nHùÙ !%í+•*ýË öáêEìÐîüñ^ì3Òì»ÅºáÇ}Ì>ÀÔÁ$â‹ô^!<:5NÂEm.×&Z1=rHqYOf:bdMzFCCa:Ù3§D4YRH4d§!G"ÀË Á)öÝôþþHùWݹ×(ä+ñíð÷ï7ë¯Þ×ÎìÒÒÝeÞ„ç’ÿZ9 Hÿ2!º*œ3_?€CŽ8¢*Q!nóáÉ€¼†¹.¾MÇ®ÒBß)Óò¸šŽFÄœç­ÞÀÇÐÅÃg¶ùžÂ›€ÂßïwøÚûÂÒ~ê…í©çÏóþ  òûΜ3¶.=‰õÝWr%)+--( èùQìhë`íñÓïeØä½œ¸nÅÓÌO ¿ZÙý)Á3=L¥I5+&J/0:›DXSac¹d¬RnF;EQ>%5]>áTVg=3$± "έÚÊ8ü?ïìûBü*å%× á‡îñî ìMäsÓ“ÑÏÜ6ßäèùÏ L 3]Ï(ì0Q>›D¯<%/‡#ò jæÑË"¾«¹]½pÆçÐÅÝHÖ ¿G¡ˆ‘Õ›—ªý½&ơƛõ¸x¡»˜è¹ê ùáçÄ¤Í çåì:çüñD o XõPýºµ3‹+¨øË 7 ®$¢*,?ª 9ø¥ëtë©íñ=îFÕ‚½oººÆºÌŠÁ¡ÀmÜkþuÔ@6çKH½1›'»0K;`E)T†ccd{RùHÿEï=Ü4Ú?½TºS;ç"Ij!Î"_ÃîÀcú‘óÉüßûKãqØÐâßï‹ðïáêðàoÑdÒaÜ¢ÞQæÑú C•¢*½1=—BÜ:ò-Ÿ#R åGÊY»î¶s¼ÐÅÒ,àyÖG¾j œìŒ³šáªn¿ÒÆ|ÆØÃk¸S¡š¼¥ë`ùßÌÃüÎéçíKéjòh å ò÷†Z1q0% Ñôû—%Ï(Í-‚!i–û ìëÛíñíð<ÜÞÀR¸tÂ÷ÌnÅÆÀòÕø Q˜1åJÑLÚ9T(ž.Ë8CFPù_(eV¼H„E<@u8€=#QBTÎ?—%_¡E!µ>[ÞdlóbúÁþ(êÕÙìÞ™ë7ñfðïQæ¶Ö¸ÑÚÅÝOåNöD ê ϸè ]`(0M“)F-7Ÿ@{L<]ˆd}YÀJtI£B :0:•MÕTÊC*• ;"«âmznüñ úýÀì±Ù¹ÝêÈð¡ïzî_çqØžÐ8ÚàÌæ…óß+áÄ× ™&T.m:ÞA @’4C&q9òÕÓÒÀ¹WºÃá͜ێڋǪ —âe˜‹¤ ¹§Ã ÅïÂ,½d©î™ ­%Ý×÷ëé;ÊíÇ¿àlíéè핉 Vú1ôå +¨3l#ù{$#¡$²,h&ä+¦ñ7ëûëéî²ñ¥åjÉ|ºÄ¿ëÌIËYÁçÊ"í BE'•A5NB,•*Ü4àtCò9'*ÄÚþ0Ü(Ç*¼@»¯ÁGʃÕÝCÎ@µaœޝ’íž}¯z¿ÿÄÎÄCÂ!²|ý åÉðwò¨ÕdÆÙÌìCë2é¦÷ª ƒòz! 3ª(¬ùã Òx" )¸)„9 ‹ö*ë¾ëSí‹ð€ëZÓÎ¾Ž½-É5ÍûÂ6’ܤüÉý!:9ëMºG²2›'51;ÌD'Säad…Q÷GåD_?7"?‡RTà<«#S€ tS]¶ù´ò}ûöú†â%×ià?ï-ò¦ñÙìÃâ®Ò‰Ò%ÝOß_çý3 ê AËf•*¿2˜=CC†:á+± ôIâÉg¼H¹k¾tÈÉÓ~ÞÓêºïŸªµÆÏ­­ÀÇ&ÆhÂ4µãŸUœÁGíöÜzÅBÓrêÌì0èÛóNJ´ò½üä\2¨-q?õþ‚•$ )ú+~X žù¥ëëÿíhñ?ïÙpÀ»?Æ7Î0Å&ÀôÖúV |š2ƒJ+IL6C&….96ChO(_õcT&G$F|A³8<×O¤T©?M%A"©z€†Sÿñöúäý?é‡×LÞlí9òKïÎíÊåœÕÝÑæÛ[ß æÍø gªb ©'*ú1»<Bq<{/®$3 Üè®Ì.¾ ¹â¼ÆÆ?ҥߔ×|À£Ñ‘Ž·œfªä½«ÅÜÅhÂk¸Ð¢vš ººéyùxá„Ä)Íçç$îéè²ñ'm nôAösö/1u3õ¼%7&¤+Ì!µ½ü§ì‹êçí+ñ¼ðÒÝhÂm¹ÊÂÍrÇëÀ}Ònôd©—+ŸF/KW;n)`.š8¡A%Læ\ˆdYþJ\IvDo;Ã:ªKR¯B‰*t € ´!³ä Ÿ¬Àòèù¤ü‚ì6ÙÞëãñ÷ïIî"çøØ=ѵÛâõè ôVà ¤J â'^- 9a@›>Ï4Ù'ûlóÔŠÁy¹€¼ÿÄhÎþÛZÙ$ŧF•øŒÔ˜f¤D·*Â_Œ¼p©ýšÝ®ÞD÷Þé1Ë;ÊYäMðÒéSí' …ù‰õ-Á3ùfö¨þ Ä#®$—+Æ$€5¼ðÊëçíÆïíðä*Ȉº¡À)ÍlÊ<¿´É—êPå'àB{Ló?X*A+{5a@ÛK©\OfÜ]åJ÷G DO=F99J¿U™Iy.dõQ!MÒ¥s„q åòbúDýwòÚ6Ù™å®ï3ïKï­é„ÛÏ×gßÊåÆï!i¦ ’ÿ=ié#ü,8z@?A67=) ‰û)ÙÀÃ>º ºÊÂÓÌúو݅Êl­ˆ—@Œ •9 ª³ÖÂ¸ÅØÃn¿‘­,šh¥ÕÓö7ñ‘кÆ>Ýíºéë8ýTÿòñ'25&$ügügS"«#Õ+ç(Yºõ™ë›ì¬îüñêÎ4»]½ Ë“Ë(ÁzÅãbð“#ì<øM E‰0¸)3à<$FRVÞdb‹N~HóEÚ?g7¹AÑRPØ8Â"KMAS˜QQ¸ôñHùö6ßNÙŸâ¬î÷ï|ï¼êûßVÑDԘߵá¸èmÿø m )0 +’4:?CS9)+C ZøÞÇq»Ú¸Î¾CÈ°Ó ÝlÐŒ¶ó›\ŽôˆÛ­ÀÆ Å~Á´²ÞYžpÆZðÓõŠØÄuÔëé9ì£êð÷> lÀò ÿáT49- ÷Ld&$ö)¤+&… ¦÷ëìVîñxíkÕð½cºÆÆÎ"įÁiÚöú@ ÔÇ6ÆMOI{5¸)2 :GESb¯ePUÙJ|GU@P8?HQþPà<²&(£€ ±Á¢@ùÅúÏóÑúÁø”ã¬×³à¶í°ðï9ìaâøÒÓyÜ4ÞQæ‡úÙ ‡ FµÛ(2Ö=tC~<0% [åóÊÇ»¸ð½ÄÅÐÃÜ‹Ó[¼Ø ‘0œp©€¼QÃÄÃ͸“¢"› ½ùê+÷ÅÝSÄlЭé1îˆéÛó+ ^ ô>úš2¢0V ˜öx¼%`(h,Ö ŽZülíïëÛíhñð¿ÚKÀ0¹›ÃëÌÆKÀ+Ô)öP ‡/ûI…Kž:Ñ)Å/ý8|A3MÍ\ÿbƒVÊI°H6C|;Ô<ºMåP„?n)û ;"U#œ¯Ú©jò}û‰ûŸè®ØÇÞëðÎí€ë÷ã#ÖçÐÚ(Þâå®õ%… ‰ZL ï›' /£ p®Ú£%¶.m:CÆAÞ5f%€¬ôRե·¹Š»ÖÂõËøØPÚÔÇíªˆ—øŒ|—W£6¶åÃÆÆ_ÄD½Ó©§šã«DÚ?õ¼ê̋ǽßìççvìèÿ{ Lûô¨ ¢*<4«ÛùHÿT"Ÿ#Õ+#(¹›¦ñÞé²ë‘íZð[åÊM»U¿nËÂÊ—ÁÈ"çºñ'&AãOñD¸/+<4M—BS9d*KîßMÇêºy¹U¿ÈDÔcÝqÒò¸—žè“¯žÃ­ ¿‘ÄjÃÀƒ²CŸ Æ îÍò×"ÄðÔíêì­é+÷Ù ¨Ùò_þÒœ3Ë,çôù² ÒI#`(º*|1 Ùø‚ìtëSíMð›ì9Õæ¾e»•Æ)Í©ÄtÂ8Úªùò «25bL¥I5þ'‡/‚8­AüOña6f!VåJMHABÿ9Ø>!PÅRG?¨'£,! "‚ €ÒðýÙòJú ù6åÑ×*ßÌìrð¬îýìeäFÕÓÒyÜøÞÀæbúÍ ¢ %âÂó(1Š<(B|;¶.Û"- :ç3Ì ¾U¹ý½ÇÑÑ ÝÙÕ’¿3£}’ú§šÎ§êºÃµÄÂð·=¢,š ¹ÀæÓõ€ßzÅ7Î_çÂípéRòÓ ‰õåøµ1°1×P÷w4‡#£%ë*›!uý íÒéïëõîïWÝ8ÃêºåÃÎÖÈ*ÂLÒyó¯^-¡GÌJe<*å-€7@ªKy]ûf[ L9JçEÔ<Á9 J}SÎE-¥ ¥ ñ!ä.ÜÕCñ<ùNüýì–ØyÜdé¦ñ÷ïóíÚç6ÙªÐPÚšàjæ…óXu² Ë ÆC&k-ÿ9ëA„?’4\&¥‘ó5ÓAÁܹǻGĦÎÛ®Ø=Å;§¦”'Œ÷—ߣî¶ÂÿÄÖ¼b¨›}¯@ÞîöÜèÀÉ€Èèâpï‹êõîZL Ùø{ô» -:3½îöƒþoé#õ#+¡$ñáêÌìßïñ(äOÈ|º¡À¤ÍÂÊÞÀÊ•éÕ'`(€CÕNKA!-á+Ã4ä>I¤Zf~_dM°HtCÔú íûëVîEòKïªÖk¾cº0ŸËÚÄÂ’Ö1ôRˆö/TKÌJ”;°+¦28Ä@Ju[èc[ZsNÂKvDQ>Þ;ÒG/K?ü,$."O Þ¢­SÎ!õôù+÷£ê×Ú âïëÆïjìíå@ØÓ¨Ûß™åföJ{ ¼Ï¨Ì=)»0Èã,ª.Ó6µ?IZzc.\VLjJóEÿ?Ð:“F¢M‚Dô.j!C À!Ú€,†3 Jô<ùoúðFÛ†Ü_ç&ïÎí$îIèmÜìÒgÙàÞä¾ñ^6{ žc ¯Ì' /œ9ˆAÜ@Ö7(¢-òZÓ À_¸ˆºïÂtÎÏÜÙ=Åb¨ –ê‹>—°¤Í¸åÃ?ÆGı¼…§EšN°ßöSçGÊSʆâ§ìÎç©íX# P÷ßõúü,:3Š<ùK@."?$\,ù%š£\ñ*ëënîZðIâ•ÆÃ¹ˆÀßÌË,ÃÄËnèôÿ·T(*CPO‚DÅ/D,ä2Ã:DîTæb,aOEJFÐ@ý8ÞA¢M›JÑ5d$h ~Ü·x§U@Ïóõã÷nô6ßþÛ»äõîGíóíWéÉßsÓ×*ߥåõî£i² .$T. 9~BCœ9v'ØsöØxÄÇ»£»£ÁbËÓØPÚ"Êd¯æ›ËŽ’–0¢ê´ŒÂŧÿF¬Â›©TÖô ìáÍÆÆèÜ¥ënè²ëƒþc ýôq 'ƒ3û üþþRj!`"Ý)C&Æ%ô7ë7ëSí°ðQæ$˯»z¿¬Ë3Ì_Ä€Èã¦ýN¡$Ì>×OFä2*Õ1§8cA;Q[`ØaªQGKWGWA˜7à<9JK;)Ì!Š8Nñ±3û‘ó#ùßõýà³Ú|ãÄî5ð‰ïOëáÓ9Õà@äë·ÿ  V žL‚!ã,¹5Œ=?A<:n)€uýyÜYÇּܹܿÀÉ<Ö#ÜÍÏǵ*ŸÏ]”"¡±†¿;ÄįÁk²¾Ÿ°¤ÆÌßïïfÓ2ÆÙìë¡é×÷! =çóÂ"ð2(bÃù9 rx"Û((¦ ˜öíê[ëçíúð—êѳ½:¾çÊ9Ï5ÇÆæÛ’ùH j!:9°N—HJ5^'‘.–6é@AN*`ncSáHHCCÜ:<ƒJN6=þ'[ ù [±¹Êœþúð%úbúÄèÚ±ßëõî|ïXïŽæ×ÓyÜÅÝÈäû1 sÛïiU“)2(<ÆAH:P, ª«â Ê¥¼P·˜¼MÇðÔìÞüÔû¼å yõœË«ý½ÆdÆ8ÃìµS¡CŸ»Á²ë¸ô#ÜzÅ?ÒÜèÙì|é{ô+ Ý óû¥Œ1y.! P÷¨ŒS"C&{)áËÓûìëéÌì¼ð&ï±ÙÂâ¼fÇ9ÏÖÈ Ä¶ÖNö½0™I×Iž:…(¶.à62A"KÍ\d'YƒJI§D8>”;IuOB®*4± ò  ÄÛãñyùÛùÌìüÚiàAêCñŸîxí.ç×Ú°ÓüÚ»Þ*åöL)Ù wÛ K—%k-«:fBû=N1 #Ñ 9ìçÐ(Á~»S¾ÆÐyÜoרèò•Éù˜¼¤©¸ÃbųÃ@»E¦µ›¹´†âöCåïÈ•Ìä ìÿçÝîhò ÕöÕöæ+,ê/Š˜öõS"I#“)¶"B)áðë ì&ï)ð ááÇ_¾0ÅãÎÂÊ]ÃÏïë¡LÂ(CÝL¡A¶.#.æ3<"EµV†cÔ_´PéL«F„?Ž8BÂK•G5\&Ì!O ý,BéNöföü÷òÔÞ@Þýæð¬î îpé.á×Û³à³æï&Ne ! i."*6†@ÒAÖ7å'ÉÓõ ×;Ä[¼‚½©ÄÍZÙ¬×(Ç…­ŽšuŽÜ–ó¡Ï³I¿EÃQÃä½—ª„›ã«Ø›òÆéÆÌ\È˜ß íÒé…íÄà üÑôR )2K3û=ÚÖ ï&z#µ1ôQìýì3ïáðûåŸË޽CÂÈÍÆÌ Ä²Èpã»ûÛ …"€=fN‘E:3P, 4 ;*CêR"bacÇSN¥IhCm:a@“LGK§8´'Ø![ ·LâkÕönôèù…óðàwÛ|ãÿí&ïÛíÈêŸâƒÕ×¥ßaâYêÍþm Å ÏÑÜ­¸)y4"?±CÞ;+©æþ{ÝÖÈ„¾ù»pÀɼÓÕÙÍ’³¯ž ‘–’¹ç­î¼*ÂÖ”À˜°fž¤®Ì?ï•ïÔÔÇÜIî9ì™ëûÏ ló9“#39'$¹úþ ï ü&j'iÙ œøýì´ì=îCñtëXÒ†¿Ð¿ËͳÃlĨÛ+÷ffP8)N‹H8\,¦2¿8ëAÕNÞ^zcPU‘K¡GrB(ûI=Lû=)+!KI&Žš™ ·ÿôóßõ3õäæyÜ«âåì3ïÿí7ëÃâ<Ö9ÕÞØà„çÏùš 1 %‡Rµ}*H4›>ïC<å- "¬”ã˳½·¹½GÄôÐ×Ú#Ð&º`¡o‘‘?«€¼ÌÃóÄCÂ'µå ûŸûÂÔêƒòDÚÇ´ÕÈê¾ëéèÑôøETóþB1,ü÷öG # '=)ˆ)Ýú;íCë;íðÂí{×÷Àâ¼ÆÆKÌÐÅ~Á¤ÓüñVóH4¬LKŠ<+L0Ó6Ÿ@EJ_\ˆd6Z/K+IxE?¹;fHíNtC×,7 [ Žò,ð]ÏúðòøôùÂíFÛìÞõèrðbîzîõè†Ü‹Ó.Ûß ãÇõ•DT ;¬ ª(1¯<¾C¿>2p$ž 2é²ÎÚ¾„¸Š»ÖÂPΚÚiÔ­ÀץؔüŽ:›ª§JºÃ0Å€Âð·•£cêºäæÝôšàíÇ-Ï8æQì èñ'P =ô’ù `.ê/8RøTÒ´!$J)™ ÃyÿÓïë,ìóíóí_ÛïÂq»ÂĤÍ7ÈÔÁ!Ïnƒ-ÒGÆM Am.o/46±=åD¨Väaæ\ÆMlKGé@ 9£BÛKbFÉ1&$›!€ G슳†½Íòð÷Ãùëï„ÛÒÝSçÆïzîbîUèWÝqÒBÙûßOå#óþà c ´^ WR'¸/Å;D2A}6&aðÓYÁoº»AÁÌîÙoׯª–˜PŽ»˜Ô¤D·[ÂÚÄûŠ»=¨&w²*ß1ôŒåjÉÊèâîÜèŸîÆF \÷•õ-¦2ŸwøÐñ!¸#Ó*Z%ýáhñë í‰ïZðkáëÆY»ÂëÌʧÃõËSç-þ†‡)C\O›D1+R3Ð:vD®S‚aà_OÀJÆGD4×ßæ îIs]¬š ió"-67Ÿ@àB«:/(µ´øÉÙxÄ|º0¹I¿´ÉqØ8Ún˘°†œŽŽk•À ü±Ä¿_Äľ¦«x›¨BÓ—ð~ê!Ï\È>ÝhëÐèë8ýT DýëõP þ'w3""îü:þúh !Ä)'¥°?õOëhëçíðvæ?Ì]½ÆÀŸË¬Ë ÅÔÇàú¶ 1#ê;O?G'6Z+28õ@íN4_µbTªKIÎEg=]>\IÑL€=?*Q!zõû™_aÿþòã÷øõ,æiÚ âíÈðŸîfêèâ^Õ5Ó Ý©á‘ç)üò L ¬èfs+ô4G?‚DÈ<\,SþþÒÝ~ÇÖ¼Wº·¿ÉœÕ³ÚÎú¶Q Ñ‘“Èž=® ¾jÃÃпs°÷b¢ñɸî‹ð¨ÕÇ”×ê—ê¸èøh A ô—O 82ó(úbú (…"T(Â( ú/í™ë"í£ðhëøÒп0¿åÉëÌ?ÆxÄŠØÄôn„Å5õLIô:,É1ê5i>OIÁ\ˆdZøMÂK‡F¿>0:xEÙJ Aò-b#¯a¹³Üõ/ò¦÷söÈê<Ü<âêïÌìjì€å¤ÙfÓ’Ü*ßêã²÷ÓÑ N1+]Û(Ë2Ö=™C=%/E!ÇÖåfÍÜ¿»»:¾éŇѳÚ?Ò,½­£”µñšI¨”º»ÁÂcÀµ‘¡¼ž·¿÷éyóµÛ2Æ%Ñlç€ë è‘ó'nçó˜ü»Ñ/Ù-/ ù'Àó"ù%1)ù!Ëý?ïì íðnîNÙ ½YÇÎÊȧÃßÒºï®D9-ÒG Kl?1/°17±=„E’Wkb©\-P¾OlKC$:ÆA¾I™C1•$¶"À!:s»äé> -ò²÷/ùIî”Ý¥ßèzîlíåì.ç·Ü¿ÔÍÛŽàUâÀòï1 ¨ ªX ›'è.Ë8 A„?#4%½Iî'ÒÂù»i½lÄwÏiڲԌ‘§W—_š¥[¶Ü¿tÂÒÀ©¸7¥Æ]·’âÀòðàùÇ÷ÌŠäQìUèMð+ ÷Hù',30' ù¦µÀ!Ä#n)À!¹™ñïëýì)ððqÞÿĘ¼Ä²Î‡ËÅ¼ÍÆéäý¦l(±CÕNhC1ž.¹52;rBÓS¿aÔ_FPLMƒJjDÎ9¿>íHIF”5Ì'¶"£xÉŠûÿ½nô ô¨øñ¯ÞˆÝæVîåì=îìµáÕÓ'Ø.áYä•ïZÇ Ó …P x$´-œ9ÒAA[7ß$œ‘óÑ×=ÅD½½Ã}̘Ù×—Ç9¬ýšy€™¼¤µ¡ÀÎÄÃì»p©Ôž±ÁÛtñæ}ÌbË.á;ínè‘í¬ã #ù÷“)Ç0àJú®J¼9!Ï(•$Ujyóïë‚ì“îðã^ɾ.Ä‹ÍÌŸÅbËOåýsh&Ú?LMàB515+þ30:n@uOô]Ò^CO´JÊI„E<‚>IOI±7'¶"¾ M’,™†ü÷ ômù=ô$âöÝÊåÄîÄîÛíë·âÕ‡×xáæ‚ì0ÿÙ   Ѳ 8`"Ë,6¿>Aÿ9 (S´øiÚ2Æ©¾[¼Â̻آؑʱŸ@’Ò—Ý¢æ²ÀñÃľ ®[ŸáªÔ5ðÈêÙϾȷܥëUèrê®û ü‰õº‰$Å/íÕü¿ýŒ€ ñ!l(C&e•övììÐîMðØæáÍÚ¾ÂÆÌÕÍÆÆÉÖßþøw §!’:VLUF25A+ì067x?ªKü[¯_ÏQvJÊI¸Fï=<.EIˆ;Ï(À!¥ !€³ø£ dô!ø÷‚æ2Ý¡ãGí¡ïéî,ì ãÏÖãÔßÈäÄèûœ L qôÖ ², 5–ÀÇ»ð½‰ÆfÓÁÛÕÓξ ¦ž–±“~ž¾«Y»jÃ;Ä*Âg¶£¤|£ŒÂ¸èðuÚȼÓçOëKéõ?ÙNöRþ»/.¼+ð ûfiC X$þ'rÕgüÝîëvìbîÖë>×Ãn¿tșΑÊfÇ’Öñ÷®0fHãI=,y. 4o;hCúTÅ^YŸLªKßGÞAm: AKGrB¤1&!ùØ]ÖÚ¬ nô`ù÷‘í«Ü½ßGçï‡îõîzèöÝüÔÚLÞmânô›Ý Nâ&/9«@g=1Ì!¨ ë`йÀ»»_¾(ǺҹÝÛÖåú©Ç˜T曩ˆºÃÂÄÃy¹¦¯žœ¸«â9ò.ájÉÏàäãëÿçðö%ú»7,b/2ªù²ðO 1#J)l"e—ð¼êÖëï?ï(Þ‰Æ ¿YÇþÏ)ÍÉÒ€ëyÿ%ø*.EÆM¡Aö/d*o/ 5½=jP–_^ÉNIÎE­A8ê;ŸF•GÖ7¶(‚!Wó µkóäAöúðNöyóUâBß8æ/í¶íQìKézâ×}Ø]àêãzî¡Ó ¨^ à 8;"ú+Œ7Ð@Ú?7$L dï+ÔØÃξ:¾SÄÀϨÛ1×ÌÉɰYž}’Eš´¦8·™Â•Æ­Æ:¾ø©OŸF².ÛºïåëÌXÌ,àYê›æåì7 ¹úÁø® v'y.|BüC¢ Ì!›'z#Ú;1ô[ëhëçíÐîÿáVËÂÔÇþÏ—ÍÇëÌûåýäÙ'ÿ?ÑLYBX0y(Û.ž4Š<çK[ ]‹N\I¡GD&;¯<ŸFHä8G(G"[ Y4FØ,a×÷‘óD÷‡ôä@Þêã™ëÌì¶íÖëˆã×Ñ׳à£äìÿe Ë B9!+ª4Ö=†@i8M%¯\÷+ÚÄž,½8ÃÍÕÙ!ÛrÍ ´„¡‚”Ê™£¤c´™ÂWÆÀÃý½‘­9 h«}Òéî~ê‘ÐùÇÚéÚçëÉüw #ÿ¼öÎ"ô. mÿ1Ë7 9!×&ë$–øAö‚ìjìIîrðaèHЊÁ ÄPÎã΃ÉçÊ,à`ùD ¥ w9ÄL¶E¢6Â(o/R3è:HsZÇ_sTKtI‚D¡;Ë8ÖCOIû=,‡#! Ôˆ]Äñ>ú°öUèUÜ·âéÎí§ìì6åiÚªÖûßUâÌæ}û X + fw“*˜1œ9¿>w9Ï(»æáGÊÜ¿8½AÁåÉªÖæÛ{Ñ>º¤ –Ž”£ž%®ý½_Ä_ÄeÁæ²ÿ¡ï¥Étë©íÙÕÇ ÖŸè£ê(êË÷‹?“ôI¶.y(yâü` Ä™ ë$h&¬ ‡ú1îì/í‰ï€ëkÕQÃÂ'ÌÂÐçÊÈ+Únô^ R3^J‰GÜ:Ç*b/¿2&;„EyWe_yWÑL¶KnFŽ>‚8cAHé@ /%€ YQiÖÿÑÙòþø®õìqÞæáéfðdï‘í€åÁÛ Ö{ݘߗäîö … ¦ ?P'/ 9U@ê;`.* }ñæüÎíÁ8½>ÀùÇÒšÚ)ÓĿΧ[™Ö“žº© ºØÃ0Å]ĸ¦ó¡ý½íä)ð­ÝûÈ?Ò³æ¥ë|éþòlnÉö¿ý«h,+,' Hùyr!+&™&ô >úSíEì©íAðÖëÕÊÂ6ÂKÌ´ÏïÈ­ÆÙéô"Ž2\IÚEú7¸)Å/è4Œ=—HìYì_²UKÀJ=F?o;ÀDûIÂ?,!ëO ³ŒØÀCñP÷‹ö¥ëWÝ¡ã¼ê÷ïóí§ìÔä8Ú ÖÇÞSáOåh÷ô´ ºé+äª(o/8ñ>$:œ-t ¤ èÎÀ6¼2À\ÈÔcÝFÕܿץ†–Ç’Ažfª¼xÄ_ÄÞÀ]·7¥G¡ý½³æ´ò¢Þ¾ÈÏбåãëÞéÏóÝøîöøû.u,Õ+{ œøÂÔØ!$å'MŽýXï9ì=îñXïÏÜÆpÀjÉ ÑëÌdÆ5ÓÐîÓµ-ÚEJŽ>)+)+¢09C:V³aµ\dM J©Eÿ?]8¡AKÝFR3“#­pØ,» ¢ ´òu÷¾÷hñŠÞiànèñï=îdé»ÞPÔ.Û±ßgå›ò¾ì  ‘ §Ä#,7§>û=ƒ3Î"kRòãÔ€Â@»ä½“Å^ÏæÛÙ£Çw¬äšR*™h¥¿·§ÃÐÅÃì»®©fž\±þÛó&é¼Í¸ËFá´ìéèÛíR oú÷ =) /´ø†È !(õ#ØÊ9òCë§ìÝîrð»äKÌÀ©ÄΗÍYÇÎ:çþËO&ñ>xKŠB¢05+1§8$@ƒP4_4_9P`K(HtC : >(H÷Gs7ƒ'À!—Uœ[N‚<ûøõÍøôóáêÝ8æðíð5ðOëÎáüÔ%×kávæýì1 < #NÅán)k3=Î?Ç6Ê&¹)üÛ«Å]½¿½_ÄdÌö×Ûι´íž’·– B°U¿ ÅñÃÀ±Â¡¨Οîdï×Ô€ÈiÚÖëáêrê´ø µþçó™ý!03$#ÿ‡ú´ “O 7&h&8k \÷Êëjì1î‹ðëZÓ(ÁeÁ3Ì´ÏOÈCÈÞTù! ¯8bL‡Fê53*Ñ/#4¥=éL|^TKçKš8Ð#©IèiÂáö¨òHùAöæáœÛpãIîñ?ïÒéšàãÔ¶ÖàŽæGí¸‰ Ý …'ç"H.*7x?•Aæ9“)êÇûkÛlÄe»½¼ÔÁ$Ë–ØÚŸË¿±Â›µ<–ý ²WÀbÅÅÀ ®Ažë©ßÒ×ñéîÓÙÉ0ÜhëÆéÖë½ü¨ wþ3õöº$s1!âüNü ÞE!j'&™ÉõYêáê1îPñÐè›Ïý½Á¾ÙÉÄË0Å£Çà#ùò E!†:ILbFì6Ë,\2e6Ú?'M’]ýaúTõL™I€Cc;4<‘E|GÅ;f+""Æçœ4'[‚8ýÑô÷ôó™åJÝõâQìXïóíëÜâ”×>×îßWã÷éLûÕ øZÈÉ+y4±=C¯<í+ÂVgßÙÉ<¿û¼—ÁÉuÔîÙ+ÎP· ¢˜“.• 1®¥¼hÂ8ÃAÁþ²Î¡Ê¥/ʲë‡î1×ÀÉúÙ[ëùê£êåøu )öá* ö/ã&¦Éüž Kv!&+&Øô oúIîì`íßïëÓÀ<¿^ÉÓÌÒÆ‘ÄèÖÀòã8æ3TK7Ic;+ß0J56=Hš[acŒZNNLMÒGÖ=*7&A°H Aô.$#4é>>¹k T5ðú^øáê¿Ú*ßGçÎí;íéîèFÛÓÜeÞKãË÷ø˜m ?)[`(É1<ÔBñ>B1x"^ Wé-ψÀ6¼ÿ¾KÆHÐ]Ú¼ÓŸ¿ã¥µ•<_›§¸*Â$ÅÃÁ¸¦;¡¿½Öå/óáSÊéÑÎçíêªóÑNößû†ž.ª._Åú¶Ü¥ Û" ( !%0ÿ‰ïáêëÂí©í Ü$ŧ½Åë̲ÈGēѓî÷F,©EjJ8>þ-025È5¥=¨Jœ\O`‰S"KrH™C0:9 D+I»<¢*O d$è[L­Æmÿúð¤ö÷ççkÛÚá[ë|ïIî[ë£äZÙþÕìÞ÷ãçç3ûÙ )h š 0ÿ)i2~׃ÉÙ|éëé•é ùã dõÆf‘.²&++ýž ·Ê á%+&x oú©íë î£ðëfÓ¯Á~ÁÑËüÎ^ÉMÇúÙ'õ3·ô4ÂKGµ9*/3Þ;nF4YÖ`/W¶KJ.Eq<˜7~BhIŸ@….Ÿ#r0z µ·J;óôù÷(ê„Û„ápéñ)ðõî æâÙ\ÔôÜßÈä ùºJ ˜¶ì €T(»0«:cAÒ;¨-Y}]ærÍÁû¼’¿ÇBÓ„Û˜Óz¿ñ¦W—¯’Òfªà»và Åû¸ץ=¢z¿›æ¦ñŠÞGÊÉÓ¸è;íõè;óçªøõNüÒò--Ý ù;Ò9!p$;(Ê yFþéî—êQìdïŸîÚÛUÅ«¿ùÇÎ"ÊƤÓïXÚå-&GJ½=-/.2ÿ9DU€`D[NLéFU@Ú90@F¡A2&™ ±,€çÛ •õ¼ö'õpï±ßšà ç;í/íKï†èÞÝžÖµÛß»äGó+ö J q3 ’%´-D8©?±=ü23$‰ …í¢ÒÊÂû¼0¿õÅüÎ!ÛÖ$Å™«³šÞ‘«œþ¦³·*ÂÎÄQüªå B¶ÔÞ²ñ@ä?ÌÏYäípé÷ï‹ã Ãù ú•*;.ý{útŒO §!E'´!øëñtëãëzî‰ïâ"ÊпŸÅËÎÓÌÒÆÀÏ£ê0ÿT9' AñJI@ /+,2D8?AžQÅ^ \pMÀJdGrBè:’@÷GvDÃ4E'ï ë$*4äösö“ôö¦ñšà@ÞÌænîÿíóí&é.ámÖÙœáxçúðpo ö 'å kn#\,ˆ58> ?Y6£%cdõsÙKÆk¾:¾ÌÃÍÇØ‡×ÀÉi±hŸ€“Qš‹¤Ñ´AÁzÅSÄ©¾=®b¢Ý®-ÕõîdéÏÐ=ËŠÞtë?évìPýu 8ýkøš A%ž.·½üVkr &Ð#1Jô¥ë¾ë…í?ï§æãΡÀÖÂZͰÍÇxÊWãîü6M%=ÄLC2)ö/6i>LM’]4_ðO™IWGB 9Ò;(H²Ik9/(ï ÒëCÿŠ­ÜûómùÇõÈä·Ü4ä´ìïºïlí£äÑ×ÛÖ³àäAêRþ” BßááÓ*µ3<„?P8À'2ÉüJÝ¥ÈÁ¾*¼»ÁÌ–Ø:ÛúÍ¢µl¡Œ“è–Ý¢#³YÁ¸ÅÅYÁ¦±0¢Ó©Ï‡î©íkÕÉÚê•éë@û\ èÿ¢õÊt ^-#üýÏ Y)%%±9 ^ø§ì[ëýìÐîÐèXÒtÂEÃNÍþÏSÊ˘ß<ù5Â6þJ¸Fú7+o/ä2œ9¶EoXˆ^gTGKIÊC­;F9CÐF<,®$!?>»Lµ6úñòúÑôµç%ÝOåÖëdï‡îÙìtåšÚôÖÉßÜâ_ç”úøô ˜É< G(0Ø8ñ>§8V)6é„áIËŠÁx¾àÁ˶ÖaÜ?ÒŽ½À¦à˜—„¡3¯Ú¾“Å“ÅÃ)¶×¥v¦bÅIèçíÚSÊèÖÄè—êÜèøõÄ+h÷“EP,ƒ'ìû it õ#í%0' 'û‡îë/í3ï ìÝ×nÅ™ÂIËyÐÝË Ê³Údõô~ß0G|G :•*\,X07KAqSÁ\FVÝLÂK‘E*=g7Î?nF?e0&""(â]Nxó Àòü÷?õÈêŠÞpãÆé‘íÎíçíGçôܬ×êÝâßÐâõ¶® { Í wÔ%¨-B7?÷;;.·^¯äPΧÃëÀñÃÂÊÔ#ܼӊÁZªW~˜0¢-¬oº,ÃµÄ¾Âæ¸Î§r¤x¾|ãVîôÜ/ÊLÒ6åëéGç¨ò… åøäý:é)Ñ)Z°ü”MÀ!Z%º-Íþíðûëì`ívìœÛ£ÇÃçÊ{ÑÈÍªÊ ×)ðõeº*—BºGK;h,3*¬/Ñ5Ê=7O±ZX¢M1L5H¡A:[=íB:?¦2*M%[ Eɹo¹äáö÷÷¶íŽàÎáŸèGí…ízîAêµá)ÙöÝŸâÔäjòè ‰ T :êÂ"ö) 5g=K;1 R ÀìÔ«ÅeÁʧÉBÓmܶÖ7ÈX¯¥ŸÜ–Ÿ}© ¹;ÄÒÆ"ļh«¤‚·Ýï”ãÎÙÏóá‹êç®ïr5Åúûަ&+,ýþÔܯÒ$¥ ìÓ9ò²ë^ìóíÎíØàŸË‚ÃÖȑЦÎSÊìÒ£êšýì ù%?¥I ?ª.…(R-1U:lK±ZâZP KÎE,>L6œ9BrBq6+&$MGÔÔ±[búföœø°ð>ãâßÖåQìIîéîãë«â»ØîÙ*ß@ädï F à *b)’4=8>%5Û"¿åò¹×íÇtÂŒÂ€È“ÑæÛ»ØÊž³é¢—÷©Ë·QÃAÇUÅ&À½°¾¥w²>×õîUè¶ÐXÌBßtë|é î¨þßâüòø¦ I#¼+Î ÿ•úÿK&$ý!U‡•õ›ìÊë íîïååÏñÃYǶÐTÐ…ÊtΗäüÇ &$·:ÈHpAø0ï&Õ+â1m:fHÃW½ZsNºG§D@ú7i8ÔBÝFm:J) ·«ˆNŠŠ«ýòZöõQæLÞÔäGíºïpïQìåðÚÚ·âÀæãëiýž ¤Ë F oÞJ)g1µ9O=»6ß$W°öwÛ-É»ÁëÀdÆãÎÕÙÛ×ÎÁ¸ã¥B™2 §}µâÂ*ÈÆÆ~Á˱~¤ò¬ ÐÌì™ë¿ÔËuÚ•éAêìqû‹ôÿ9ølù—+ñ!3Áþ1 |ó" "WZ÷Gí^ì1îKïaèìÒçÄWÆåÏXÒ̓˱ߒù "S9;KEË2º$V);.'6ñDXW^ RI‡Fl?o5ª4(BíH˜=-«#fçŒÇ&$´òkøÝôIè¢Þä9ìÆïdï&ï‘çkÛøØšàkáSçû^ š^ •³±\&¶.Ö7€=à6È%_wþ,àŸËOÂ<¿›Ã¡Ì%×àÞþÕ>ÀÆ©æ›Ç˜é¢°°cÀ¾ÈÉ0Åü·Û§I¨dÆUèÝî_Û$ËyÖÄè¥ë—ê˜ö%‹÷žÿù)+Ù'3û®e¡ "Ò$ } ¹ú`ífê9ì1îãë½ÙáÇ$ÅZͮҗÍóÊwÛD÷h ó²2‰GŸFq6+&À'ð, 5U@bR¤ZÑRrHÄFëAè:Ñ5x?1F¥=²,S"ºKS›3-ò÷²÷ýì»Þ”ã™ëÕð‹ðï$èˆÝÝ×¢ÞæáÌæü÷dq þ ¤Ž±&-ˆ5”;*7 )@MÖåÀÏÃ>ÀjÃÌ/Ö~Þoׯç­CŸ€™&£o®µ¾5ÇfÇ;Ä꺫§«¿Þã÷ïÌà—ÍÓå²ëÒé‘ó^X'û:þ›'À'ø êúÛœ~ !X$éPŽý®ïOë§ìVî§ìcÝ"ʩğË5Ó/ÐåÉ^Õñ…õ²,ÖCH|; (O&Z+P26=mQH]YþJICæ9Ó0ê;HCCö/"ˆÄQ¯gÜÅ ñã÷’ù7ñÇÞÌàÄèëïÿíVî5ê§à’Ö%ÝØàÆãÙòÀî)B  «Î"Ä) 3¹;m:..öëZÓ?Æ(Á¾Â"Ê•Ò0Ü¢Ø^Éɰj Ò— ë©a¹ÄÅtÈ=ų½ ®§m¹YÞ5ðæ`жзâëéèZðë‹üßû6Æ$=)îgü9¢d(p$™ 5åò^ìÌìÛííÚáÕÍÄÅ=ËÓ`ÐSÊîÓ$î¦*Ä@OIŽ>š, (u,ä2ˆ;“LBZ6Z®M+IC>;Ž2Ž8àBëAü2ù% õEš˜î_ª’ùøõ5öïñ0â,àvæï‰ï—ðÈê âÝ×ËÚî߀åð®+‹ô Qã ç(i2è:c;B1Òw Vî^ÕÆÁŠÁÔÇ‘ÐòÛ4؃ÉT³£@˜™ŸªÜ¹ÐÅQÉrÇAÁ×±V¨ú¶³Ú3ïlçÑÏ.áë“è=îaÿÇýoúm ¸#*(äý¼!_2é#9!RVô›ì²ëvì¶íÒãÏŸÅýÉ}҇ѸË=ÑdéyÿÚü&Ì>lKcA /\&f+‡/]8ÔHY‚[ÉN°H9DÒ;Œ1T4B„Eä8{)C £i*ûýò ú¦ñõñ@äûßlçÝîßïÆïÙìräÙ]ÚUâæ…íÜÿ¢ ò# y 6|¨'‰0„9(<’4§!  ñJ×ÈÃíÁfÇÀόيØrÍŽ·Ù¦_›Ôž“¨·"ÄÌÉ*ÈÖÂJ´d©š±Ó§ì•éðÔÏBߣêdé‚ìâü)ìûîï b)Ÿ é– §zŸ#…"föíëûë§ìEæ'ÒÒÆ ÉÑÑéÑçÊ™ÎÈäDýÕ3$†:ÊI£BB1ù%•*‡/î7ÂEäUXYOIzFØ> 5ö5 A,D]8J)""•ñiˆê»aæþÄôõñò¥åÉßjæéîCñ¼ð´ìä³Ú+Úæá½åtë®û ì u ƒ e|å'm.7>;4x"H¦÷ Ü;ÊùÁŠÁ|ÆïÎÉÙ<ܨÏź©èœžÀ¦eµEÀÈ5Çjä¶ß©“®—ÍíêGí–Ø+ÎæÛíêëìÛù?ëÃù×0‡)l"C×ýœ Œ«Î"b#Èúø;íhëì$îWé¨Õ÷Æ÷ƃϋÓÏ^ÏÐâûþ ¡%5tI1F”5h&#(Z+Ù3A‰S[ôQ-JpG @Å5R3 ?åDm:b)Ö _ÿ˜aeݶóLõ•õtëvàgåýìðïÂíµçöÝÚ³àÃâÎç-øu ×¶ ò _¼%í+Ü4·:H4$àûßßÌxÄeÁÄ'̪ÖmÜÓÒëÀ`­ŒŸaœ¥ü±ëÀ£ÇÈbź²«Í¬tÈ$èÿímÜíÍqØ$èrêÆésöÛ›'û­E'«#ß þ¦ Mé!ó"âô ûï7ë¾ëÙìÆé®ØÉ£Ç9ÏDԲθËôܨøÁ Üi2nFEÞ5%-'D,<4z@êRâZöRI®Gn@46Œ1>“F½=ú+ñ!Æ £iì8Tó/ùRøÌì~Þ ãë)ðÈð‹ðÆéÅÝ×Þáçþø² ð úÈÆ$á+†4«:c5ƒ'z?å™Î[Â>À]øË-ÕêÝJ×=Å;­ÖŸŽš­£{®$¿€ÈûÈzÅû¼¯ªn¿Iâðÿár͉Òùäjìëçóãé–ûúüyh&/(Í6ü;âÜ÷U#?¿ý‰ïÔêhëÌìjì6ß?Ì«Åõ˘Ó/ЪʱÙÉö\ eã,~BGE¿8E'Ù'Õ+ü2i> QY5TIÔH<@*7¿2µ?G>¾,ó"árµltfat/inst/signals/greasy.wav0000664000175000017500000002703412612404251016215 0ustar susnaksusnakRIFF.WAVEfmt €>}datað-`û`üûàûÐü0ýàý üÀûðúPû û°úùø@ø0ø ÷Ð÷@÷÷÷`÷ð÷0ø ø@ùÀùû ûÐü`ý ý°þÐþ°ÿÀ°` `` p ` P ð `@ 0 € à 0`°ð° @ÿ ÿÐÿPÿðý ý€ûPû ûpûPüù û€ùýðúpüàúpûûPü°üÐüpûÐú úû û ù€ù°ø`ùðø€ùPùÀø ùàø`úúÀú`ú€û0üý0ý0þpýþ@þ`ÿ ÿÀÿàp€ðÐàp 0@ð Pà à P ð Ð Ð0 @ðà€àÀ°ÿ pÀÿ°ÿpþ0üý°úþ€ú û0úPúü`úüðùÐú`ú0û°ûÐûPú`ûÀù üÀú€û ú°ú@û°úàû0ûûàúàú ûûPû°û@û`ü°üPýÀý ý0þ þ°ÿÀþ ÿ0ÀP ð@PÐ °@ €p àà Ppð° €P€À€àppÀ þÀý@ýÀûpþðùý€øüÀùûûðú°úðúÀúàüðúpüàúðû€üàûPýàú°üPû`ü`üàûü`ûpû üüPýü@ýàüÐüÿðýðÿþàþ°Ðþ€ÿàÐð`0ð€ à P€`àPÀà  ð€`Ð  `ÀýÿüPþ0ü@ý`üàúÀüû ý0üüüüýPý üýpû`ýûðüðü ü ýÀûàüÀü0ü€ýPü`ýðüÐýÐýpþþ0þàÿÿ 0ÿ`pÐà Р°P°Ðà°@p€`p°0€À` 0à€ð€0À`Ð0°ÿÿÿÀþ@þ€þ@þ þPþpý°ý€ý°ýðü°ýý°ýàûÐüÐüpýÐü°ü°ü üýÐüpýÀý0þ0þðýpþ`ÿ ÿ@ÿÿÀÿ€ÿ°0ðÿР Ð`À À€` ð ° Ð00Ð0  ð€PÐ ÀÐ0P°Pàðð@ °00 àÿðþ ÿ`þðþþÿÐþ`þðýþ0þ þ@þþþþ þ°þÀý þ@ÿ@þPÿ þ ÿþþ€ÿPÿÿÿPðþÀàÿÀ` Ð`0@€À0ðp``ðð€°°pÀÿÐpPÐÿ°@ €0àÿ°ð`°pp0 `€``Àаp` P à0 àýÀõÐñ°ëÀæ0ë@ò`÷€p @`@  à pøìðçé êpïàù@ €€  ðú€÷P÷àö`ø ýÀÿ`PÀPàþ`ûàù0ú0ûýÀ `Ðp pPû€ô í€ì°íñ@ôú0ÿ0°0@ý0ý`üÐü ý0ÿà° °P€0°€ÀÐ0Ð0P0ÿþþÀý þ @P ðÐÿðý þý úü°ýðÿÀð°@°€þ`ýpüÐûûý@ü ü`ýÀýàüðý°þÀþpþ@pp°@ðÐ@P@ÿÐýðûÀûüÀü0ý ÿ ÿðÿ0þàþàýýpþ0þÿ`p àðp0ÿþPý@ýÀýÿÐàààÿ°þpÿÐÿ`0ÿÐÿPÿ ÀÿÀÐ0ÿPÿþàþÀÿ`Ðà@ÿ ýPýþ`ÿP0à` àPýðüÐýüûPüpüðû`ýàÿ€€P€ þPüùPùüÿÐÐ0@@@@Àüû ûûý°°àà°ÿ ÿÀþpüû°ýþ`þPà°P0 þpþÐþÀýý@ÿPÿÐþ`` pÀ0Ðþðû ûûÐú`üpÿP°€ ÿ €ÿ@ÿ€þ`ýÀû€üPÿ À ÿPÿàÿ0þ€üàþ ÿ@  Ðð€°Pÿpþ°ààÿÀà@ÿ°ýÐÿÿÿ@ÿðÿÿ þ þpÿÀþ°ÿ°``Ðÿ@ÿþ0ÐþÿÿpÿP` ðÀ°þpüù`÷àõ€÷ðúÿ°ð0€ÿþ`ýPûÀûü0ÿ 0@àpàýPúpú€ûPýpÿðÿpP p @ð ÀÀà0P@ð0  P °ð@ð üø`ö0ø°úÀÿ°0°à0ý@ú÷úÐü`ÿ ýþPü0þ ÿÀüÐù`úûúýÀûPü0û€÷àõÀöPúÐû°þþ ü°ûú ú€üÐý€þ°üPýPþàðP°°P @ p 0 ` € ÐЀ€@ àð°``àp€ý0üü û€øPôððÀî°ïð€îàípî@îPòó€ó0ó€õp÷øðøùPø ø÷P÷pùÀüýÐûüþ ÿ0Ðþýû0ûÐûþ@0ð€ @P0Pð€`  p   @  p `pÿ û@÷ôÐñàððñññ ò óPó0óÐñÀò°òpóÀñÀóàø à0üàùðö€öÀø0û`ûPúpøpõ0õ ÷Ðù ûPúpø°õ óPòÀòðó ÷àùÿ@ 00à !ÐP ð ÀÐp0@àp àü`÷`ô ò0ñpòPô`õÐõöõÐó@ñ`ï°íPî`ðô÷àü@°Àp þ0û`÷€ó ïîpð°ô@÷ÐùpûPü@ùö`ñðî°ë@é0êPî°ñõ@ø0` €`! "!ðð    @@ °°Ð@ @°€ÿú`÷@ô`ñÐðÐòôÀô@ópñïì0ì°ìàî`ðópöú`þ€€Ðþðûú`÷°ôÀôö€÷øpøàöô€ð°íPé0æpå æ èðéì`îó°ý``pà"0$ &Ð#p'€% $à0p 0 àpp ð€pþúÐ÷àô óóðõàõ0õ ñ€ï@ëÀéPé ë`ì€îÐñ0÷ü0°@ °þ°ù öõ€òðñÐóPöð÷ø øPõàð@ì@çäàâäpæÀé€ìñ°û€Àð $#@%p 0' &°(°$à%#ð#€"à#p àp @`þÀú@úöðópñó0ñ ðàêé0åÀå0çðë0ï€ò°ô`ùý `Àppü°úùpøpöpôPòðÀï îpíðèå à`ßÐÞPâÐã°çèPõÀ°€(à( ,p%* *ð+@)`(Ð&ð%&à&ð&   0þðü@øàùÀô€óðÀòÐð`ðÐêàç°âðáÀã@é`îÀó`÷0ü ÿ0 Ðÿú`÷ðö÷÷ðöõ ñðíê æ à Û0Ù ØÀۀ߰ãðãî þ`Àà$@-À* )°&`/`-@1p-à0À,€/0*P+!0€ ÿ ý@ú€ü@ú`õPð ïpí êÐæ`ä°âÀâpæÀëÐñö`ø úpýp @ÿ0û`úPø0ö`ô`òðíÐéæ áàÛp×àÕðÔ°×ðÚ`Üàpò€@. +À+à" - /€3Ð2 6p4°5Ð1ð.@' P ÐÀþPþüÀþ€÷PðPê`ê`äpã àÀãâàè ìðñÀóö°ôÐøüðð0 Ð Ðþ`û0ø`õPññÐìêàãÐß`ذÓðРÏÐàÓ°Ô áÀ÷p°ð#p.Ð&€% 04€4à= ; A@:À;p0 -€ðp@À€à°Ðøí@áà0àÀà€àã@æpçêpëPìàë`í°òPü @€ 0þöõàõ@õpõ õ@ðçpÜðÒ Ì Ê€ÍÏðÔÀÓæ û0 à"`$ @à#0< B HPA A5€4ð(ð)ð àð  ÿðø ëãðÛpåPèÐëçpæ@â áPâàå°è0ï€óàüÀ ° 0°ý0÷÷ûÐý`ú°õ îÐâ0×ðËÉðÈÀÏàÐ ÖÏ€Ý0ñPÀÀ`$€ !&p@ÀH M€B@@ 4 6P,1#À Р ð àþ0õç`àPÚ@æë íàä àÀÛ@Üðàçðëòpõ0ü   ðþ`ûÐû°0ù0ðpèpÛÐÒÉPÌPÍàÔ°Ð Î@Æ ß ø@@@'À@°1pI°RM D 9520 /°%`0 àðP 0ö ëà Þ€ãÐñ ïðèØ@ÖðÔ`ßÀç°î`ñ ôÀô`üp°@ðÿÀýý  €úï`è0Þ×pÍ0ÍàÌÒͰȀÂÀá@`#pð!@@0@8pV`\ÀO=€/à.205 8@-P@ @@ 0 ò ìàæçÀéðò èàÞà΀հۀêî`îPê€ëí@ü° à@pÿpüðùðþðÿPûPñ0ë€ÝàÒ ÈÈ€ÍÒàÐ@ Űé @#0 `!@Mà_ Z>@.&07P:D:)À @@Pö`î`ë€épïÐîPâP×€ÑðÞðçðî€æPß`à èpöÀà  `öðö ø°þà€@ýñÀçÐßÐØÔÐÎàÎÒPÐÄпéà '0pÐÀ!€Nà_ÀX€4€#@#`<DPG :0%À `` ðPú°ñPì íÐìpðàæ`ßð×áç`è ÞPÜäððù0Pú òpøÐú°ô`î0ê€äðß°ÖpÒ@Í ÒÀÌPÂÄ€öÀÀ'€Pðø0À0@`@^ðFP@ð( SPTJ(à *p+àóç íÀô üöÀçàÙ°ÕàáÐç`æ@Û€Üæ°ððôàö€ô`ò°òþPþÀô óðï@ôÐìæpØÀÖ0ÏÀÖðÒÏð»äÐð+Ð ÐöÀ÷p 4S`b@ ð)pR fpC$€Ð`8 6@0êä ó° Ð0ýÐá°×àÕ€ç°ð°ëpÙðÓ ß°ï@ò ñÐìÀîñ°ùÀûùñ ðÀò ø€ðâ0Õ@Ø ÛPÞ0×PÌ€º@Ú`03@æàí@@XÐaà0  3P^0o:`ù€,ÀE°4°pß åÐ €ó€Õ@Ô0ßÐòàö@épÓ°Ì`Üðïó°îàç`éëàð`ó õõðò ïÀíPå`ß@Û`ãÐâ€ÛÐ΀ĠÊÐý-P+`ó€ßPú`. Uà]>Ðð`&pTÐiàK °÷0  2 B°6ð€ì çÐð`À÷ Ü Ø`ä0ó°õ°êpØ`ÏP×àèïðë æÀå@æ@éÐîÐôÐöôÐê°ä`áÐãðãPæàãÀÖPÉÐÈ Ø P, épØ€ 0BX K (` Ð=0^ÀZ05€PýP!ðGAÐÀõ0ü0àÀ ë@Ûâ ñÀ÷°ñpáðÓpÑÛ`èî°èßÚÞ`èPô°ôPî@äàß0á èÐìä Ýp×@ÔÐÌàÖÀú6$Ðï€È@°G€a@@0$`€0@0f€S1 ð#ÐQ @@÷ÿð`p° `èÀÝðç0úPõpì€ß ÕÀÑàÜ æpë@äPÜ ÒpÜÀìÐõ ìÀã ßàààà`ìpè0äÔÙ Ñ×€Þ ,À5@€¿pôpDðbpGð!ðAÐbàN02@ààJ`M €ø ÀPÐP€òÐÜ@ä ù`ÿPî€Þ@Ó@ÒàÜ è@ìßPÖ@Ï ØPï0ùpé°ÖÚ ãÀäpë@è0ݰрÔàÕPÔÿà?ÐàÙ@ư*àYÀW0*À°P2`[àZ1@$` p€/ R8à@ö ð PÐß0Ýðô ûðàÐ`Í ÚðìÐîpàÐÏ0ÇÕ@ê°øí°Ó°ÎÐà@éë ä0ÝÀÕÐÓ°ÔÀÓ B°°ÑÊ03°]°J@"ð 0: Z`Q@*`'Ðð00ÀPà4÷à °p @ààá°øp Ðû`à@ÍÎðàñðêp×ÐÉ ÏPØ`ìò@äÐÍ@ÑÀâé€åâà×ÀÑРÓðé`3ð) Þ€½0ð\pJP$P  1TpQ0,+@%`#FPFp`ü€`P$ðà ðæâðô€ Pæ€Ð`ͰݰíPé ÚÌÑ@×PæpìàäÑPÍÀÜ é ç°âÀ×ÐÒàÍ€Óé2P&ܰ¾€à^ðCÀ pÐ40ULp$, -0P%ÀDÐBP p  'p0èÐë0ú ðý ãÒ0ÑâÀëæ€Ô0ÉðÐÛäÀå`Þ@Ò0ÒðÞ@á å0ÞÀÕ`ÎÀÒÞðP)@üË0ó@CàJp(P`&ÐHPO€0 %05 *Ð! 20D@,` @%À#°pîî€úàÿú€ê ÜÐÕÛPã0åÜÏÍðÕß°ãàÞ0Ö°Ñ ÚÞäßpØÐÔÝ€ Ð ÿÖ ô4pC+ð°p&ðAÀLP2ð'à0€/P'.à<0pà@#Ð"@ðpîàøÐàùÀè ÞpÙ`ÜàáÛðÐÐÐ0ÓPܰáÐßPÖÓ°Ø`ÝÐã0ßðØÓ°ÖàÞ  PüÝÀþ-À7,À&p@F°/@/P3@.@$0082€     À PöÀñ€ö€ü€õ ë°àpÛàÙ@ÛÜPÜÐÖPÔ Ñ׀݀à0Ûà×àÓPÚ€áðâ ÚðÖpÕ ëà ô ëð`&p)'à!0-@= 5/=à3`&0" 2`8ð0@P Ðà`÷Àõàõø ï@ëÐä Ý ×`×ÀÜðÝðÚÓÐÏ@Ø ß°àpÛØ×@Þàá â°Þ`Þ`Ú€õp °þô€ý`ÐÀ €$p#Ð%P.€2ð.6:0*€&P) 2À20&Ѐ0 `üÀù ö`ò°í í æÝ@ÚðÙ0ß Þ@ÛPÔÐÕðÛ`ßààÜ@Ü Üá@à@ã ã0âÐÝpõ€  üö þà0`°@&p- .ð)ð.€6À+&ð#@/ð.0&p`° þPüùô€ï€î€ë°ä Ý Ù`à°á°ß°××0ÛÐáÀáÞÐܰàâàä`åàç€åéåÀÿÀàÿø°PÐ@pP(-@-@!-À-%Ð! °'$0!P`Pà `ÀþPù`üðõ0ï î0ì çàÞpàÐáÐâÞ€ÚÜðÝå ãPã0ã å ê@ë`íàïðð ï°í@ù€ 0ÿPà0P!° p"P"p!€ °ðÐ0 p p  ``þü ú`õÐõÀñpí€è0âàà0ä€åÐàáßàâÐêÀçPìÐíí°ñ@ô0ö`÷0û€÷€ý ú@P ÀðÿàÀРP Ð`ÐpÀ@°°  `À  ðÿÐû@ùðùPõPö ô ïÀî çðépíÐòì@é`ïÐä`ôPü ö`ýòüöÀðþаú°þÐýPõ pú Àÿ   Pý@ 0 ðà 0 P ` €° À €P  ð p ÀÀÐ À`Pü÷ÀøüPø°ùðð ì î`ò`ìàûpõ ðûôPøàpúPõüP ø@àù0pþPýpý@ûÐ @ÿðàÀýÐ ÿÐPàüЀ  àú°ú€ò0úú  õ`  °û õ €0úÐ õàþ0õ€€ÐãÐ 0ê0øþÀîÐû@0íû` Àð  °ëÀýÀßp€üð÷ é   êP€÷@ê` ö@þÐ0ú ôþ€ PöÐ`°öP Ðà@íÀ à €ó@üp€àõý ïP @ûÐ÷àÐëýðè0€úðìà Àä`  Pç@@ þÀ °Ðþ pþÐÿÐ@ñà`ø áÐ-`èPô@Ðçð €@ð@ P@ÿÀ ô`€ç À °öàð0ØÐõÐõü`P òÐ €öPüPpàPþàÀáP@þ°óÐÀþû õ@€óppîÐûÐÿüpù ð€ðù@öpôpPöp@@ßаûPøP €0î€ç° öð€ é°àúð÷°à êÐ`æp ` è (PëPþРçP`ê0 0ð ø@€Ü 0ÿÐép €ë°0ü@@PàÐ+ÀÓ€ pä  úPþö pàç øp`ð ° èPàñ0ð `àp  ðèÐùðpßíàí0$Ѐ%`ã°Pù€ë0àòðÀÀíP À÷Ààò ÐþPóà0õ`0@ä °ö00 î` ß ûÐúðý@ô " ä   ñp Àã00ô°àã ñ  à÷@ ðþ@ ûppÿ ýðð€0ðÀûàÀÙ`àùïÐ 0ÿöðÐÿÐô0 PàÐ)Pñ€ó  ã ûùàú`ÀëPðàüñÀPð0ýà°ôЀ àô°@øàpëì` €º05ðûÐäð @î@° 0àÓð-Àç€ððPæ€ `pì€pÿðöð@ë`ÿP#°Âð7Ðê ê€=€¾pð @äp€`ô° õ00êàýÿàü°ý @ì°@àîàýp Ú0 ÛP;ÐØ °þPõ@â î@€ ýðù åÀ5pÎ`0  è0ÀÐôÀÀ€ôÐ `ó ö€àåpÀý@ ðÙ3Ö`þp3à©ðBàúÐÍð4ïÐõ@óPPý°ûÐôÐ!Pß@ °äPùà&PÕ`Í(àìàî *0ʰ!À0Í`; ÙÐЀñP pòÐpí@ ÐðÀþ`íú`ÐÛíà 0õðø PóPêà Pñpÿ€ Àöðü€@ÝPÀ °Ù@Pòpÿ ïà〠P`Æ€H°ÏP  ù0 0@ñ 0æ0ÐÐÃ8ðæ æ€:`ÏPàÀæÀ)°Ö0Ð êpÐÞ@ PñðPîÀ°î@0 êP0é`ôp# Ü 0Þ "Ðì0° ðáP€ÝP8ÀÑPàPá  ê° P°Üp!°×à€pÖ00ö0è@.@×p ÿÀò``ê€Ú°ý òP õ€ùpëÐÀõ ðP €ã ÀPäPó€þ°ï°€€ïàÀù0 þúаå0pâP `àê ì pâ@ @€ìÐ`éPÐüàõ€0 ûÿÿ ó°°ñÿ€pìð àö0ó`ôP°ò`@ó  @åPÐøÐü Pã ðÿ€â°2Ïà` pØP Ì =`ìPß >PºP& `È > ×à àѰ.°ãýp€ïPûPPí00PÚ/ÐÜ€ðìPPöø@Pû€ê#0Ü00÷@Þ@)pÞ@°õðßÀ0°Õ@ €çÀÀ é pì €°ÙÐ'çàöpïÐ÷ààë`0ê€@ÿ üÐ ðó@í 0ÿpöPP ð`pç€ `ç€*àÍ(`éPö0!€ëàü€  ÏP7 ÖðPðÎà3°ØÐõð0Ú@0Ø@ @ú°êÀ*`Ù  ÀÕÀ `ÿðîà ÀÌÐ,ðâ`Àùpà0öÿ æàðß"pï0æP/ îPï€.ÆÀp€¿pEàÒ0þÀ$0Ý00`ãðùpì€(pÏ€úà÷Àó@@è0°êàë% ìààñp ñÐpå€`°Õ õÐñ0! ëö`÷°ï `0ÙÐ)°êPê€!Pópð€PÿÛ9 Ï p`è@Àü ø #°Àà0ÿ°Ó + î ç0&Àìðùà êüÀþÐÐ`ë€!0ãP`°ôðp`ö `óòP`Pòàý° p@ï@æÿÀpÞ0ëP€à0ÿ`î  ÀÐØp pèPPæ øÀ °ô° ðå@pôÐpè@ Ð0ã ° pÜÀ5Ú€û8ÆÐðpÖ`Ppüï 0PúÐíÀPô0ü°ð .`ËðA¨à7PpذpßP Ð `÷ðâ1Àî ßP.ï`é(€ßð0û ýpÞ'°°ß@  ò å4ß@÷@÷`ÿ€ô` ö`èð'€Ú€ÀPãPà@ÏÀAà×@í@+€ÒÀàÿ°ô ðî  ÷ ø !pâ É*Ðôðä)àÝ0  ÀŰCPç`îð@°¢@?@¹NPÊ0pðÛ0,Ðå0 @û0ÀúÐëÀÿ0€ß ÐÔPàðÿñP`ìåp0@âïÀ*`Ñ0 pìP` ðûPÀþ0óÐ`Ðßð Àá Pèp €ô€öð üðé°#pí0ô #àå çpÀ0è Pðâð4PÊ`ÐùPùÐ °ýÀã°(@í°óðþ0áð% îàÜ3`å°ó0*Ï@pÓÐ=ðÙ0÷"@ØÀ Ðé0Ûàôpç 3ÙP@Õ"Pø`ÿ ôppàÊ`5 Þû % Ñ€  àÛ€! é0 €øPø 0çp`øàþÐ ê `ä Ðì@ýàÐå  úý@ý° pùù Ðø°ð "Àñ`Àó@p àã  ÅP40ïàå #`çð úP€èðPî0` áÀ°ð@ù `Þp `õ€Àÿ ôàðð°Ððþ€öpß °õ€ ò à÷Àä°/àæÀppòPð€0`Óà`÷À0þ°ü@0ô ò%`Ëp€Ê-0è0@ø0ö``ì@÷0öpõ+àóìpÐÐõ 0øP ñàö°°âàö@ø@ðîÀ0 ÿPô° `þÐï' ×P ýêààí À÷àö`ð`pæ @ Ðó€àìÐÐÐ"€ôë0/PÎp+Ö0Àö  °î ý0ð øÀ0ï ê`ûp°Ü°  ãðpö ûpñÀÐ ÐöÀþ@`÷ òÀ ÐPòàúñ@pÀö@þ°õ0 p  þà€ü°þÐ ý`û@ïÀð÷àø00 àô àý é€ù@àí0ôЀü€@ õ û@øÐõàðû û@Ðò ýÀú` p`è ùÐ ÐÿpàýÐùP  ðê ùÐpö@@øpý` ðìp0 ü`þ `@Àÿ€øPà ù òð0Pàà÷ùà ÿÿàøp€ýP@ü @ õÐüÀÿ°€ü@`þ ü`÷PÐÿ°ý0ý€€÷àýðý€ð ÿÀù@ÿ°à€0ÿ°øPþ0Ð0ÿ àÿ@÷ ý@ ÀÿÐû€úÀþPPþ0ÿþþà`@ðþàü üÐàÿ púðþ`Pþ`üàÿ  þ`ý° úðû@üüàÿýPù@ýà0ÿ ÿý úÐþÿÿPàÿ@PPÐ0à°°0€ÐàðÐP °€  p€ Àý°ü`öðóÀñÐó@ò`íëðèàçéPê€èæ0æ ç æÀè`ê`ë`ì õ``þ ÿðà@ `! % , ,€*à-à1@+@&À&(€!` ðÐ À ÿ0úðõóÐì åÐá@ßðØ@Ö`Ö0ØàÔ ÔàÐ@Ò@Ô`ÔÐÏPÌÐÎ ÐpÒ€Õ€PpïðÕà3@4@+@@ 2@R @Ð&= ?0( "`74p(p!€€ÿ0`"  ôðëpópþ€÷ã àêàçÞ€æ°ïÀâðÓ ×@âðêë€à`ÑpÔðÙðÛÑÀÌÅðP%ðêp¼ êp;2#ÐÀ&ÐXP>P P'`F@*`*Ð5Ð `$  €P'  ÷ðëðú À  í`ã ö ÷ æã€÷0ñ Þ€à êPì éèpÞ°ßä€äàÖàÔ0Ï`ÑÎ``àí°ÅPé)À)"°`ÀB°B€"°8@&`+1à!ð°úpð põ ñðõ €0ûàå@êàõ`ô°ëó ô`ëðêPñ€ð0îÐòíãàæpêÀèðàðØ0Ï@Î0×Àêð@ý Ý€ÔPp€( °Ð 'ð; +ÀP.0'Ð `!À)€P 0 p@ÿ°ò@ò üà`õ€íïóÐï°ï0òðÐñ€õôPðó ÷àòï`íàë°épê€áðÕÐÓÐ×à×í`pû€ãâÀð#ðà $P/&€"°+€'#  @" ÐPÀÀ ÐÀð0  Àøï0ö°üðõððpï@ñàñ`ó`ðÀìÐñø@ù@ö@öàôÐôðõ óð í@í0ç@Þ ÙðÔØØñPýÀç å`@!à@€@!`*p!@!€*+ &€!€€€à€ ü@þà ù õ ö`úô`ð0ì0ñ@õ õñ°íðôàùàúùðöÐôàõðòÀñðîî ëPã ÚàÔpÖ Ø@áàøÐùPëpò`à€ðÐÀP'P&`"P)ð*À'À$Ð` 0pü ý€0ýPö0ôðö ùÐóPî°é@î ò0öàô°ò0ò€õàùüúðùùûö óPî@îàëÐæ°ß0ÙÐ×Ð×Ú0ê°ü°€öõÿ€ ðÀ°ð&@*@"ÀÐ!&P&€& #`°p€€p°Ðÿð÷€ñÀñàõ@÷ó€ííàï°ñpòÐòôö ú€ý`ýPûúPûpûà÷ôñðàë æ€Þ Ú°ÙðÚ@ØÐáóÐÿpýÐûÀ p ð°#+à) $"P"!Ð!ð#€ @€`0  ÿÿpðÿ€üð÷àó@òðò òðíÀíðïòòô ô ô0÷Àû þ°þÐü@ýPüàùõðòÀïî0éåÞðÛpÚÐÙ°ÖÐápð ý ÿ@€0 ð À #p+À,P)Ð&$ !  Ð@@` 0þýàûÐøÀöÀõÐ÷ ö òì°ë`í°ï ð ò õ@ùpû@ýðüý°üýPüpú÷°õóPðë€ä@Þ ÜÛÚÀÖPÚ0êõ0ý€ÿ  àp0@À€%ltfat/inst/signals/pinknoise.m0000664000175000017500000000277712612404255016374 0ustar susnaksusnakfunction outsig = pinknoise(varargin) %-*- texinfo -*- %@deftypefn {Function} pinknoise %@verbatim % PINKNOISE Generates a pink noise signal % Usage: outsig = pinknoise(siglen,nsigs); % % Input parameters: % siglen : Length of the noise (samples) % nsigs : Number of signals (default is 1) % % Output parameters: % outsig : siglen xnsigs signal vector % % PINKNOISE(siglen,nsigs) generates nsigs channels containing pink noise % (1/f spectrum) with the length of siglen. The signals are arranged as % columns in the output. % % PINKNOISE is just a wrapper around noise(...,'pink'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/pinknoise.html} %@seealso{noise} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . outsig = noise(varargin{:},'pink'); ltfat/inst/signals/gspi.m0000664000175000017500000000313512612404255015324 0ustar susnaksusnakfunction [s,fs]=gspi() %-*- texinfo -*- %@deftypefn {Function} gspi %@verbatim %GSPI Load the 'glockenspiel' test signal % % GSPI loads the 'glockenspiel' signal. This is a recording of a simple % tune played on a glockenspiel. It is 262144 samples long, mono, recorded % at 44100 Hz using 16 bit quantization. % % [sig,fs]=GSPI additionally returns the sampling frequency fs. % % This signal, and other similar audio tests signals, can be found on % the EBU SQAM test signal CD http://tech.ebu.ch/publications/sqamcd. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/gspi.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_SIGNALS % REFERENCE: OK if nargin>0 error('This function does not take input arguments.') end; f=mfilename('fullpath'); % Load audio signal s = wavload([f,'.wav']); fs = 44100; ltfat/inst/signals/lichtenstein.m0000664000175000017500000000312312612404255017050 0ustar susnaksusnakfunction s=lichtenstein(); %-*- texinfo -*- %@deftypefn {Function} lichtenstein %@verbatim %LICHTENSTEIN Load the 'lichtenstein' test image % Usage: s=lichtenstein; % % LICHTENSTEIN loads a 512 x512 color image of a castle % Lichtenstein, http://en.wikipedia.org/wiki/Lichtenstein_Castle. % % The returned matrix s consists of integers between 0 and 255. % % To display the image, simply use image: % % image(lichtenstein); axis('image'); % % See % http://commons.wikimedia.org/wiki/File:Lichtenstein_img_processing_test.png. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/lichtenstein.html} %@seealso{cameraman} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_SIGNALS if nargin>0 error('This function does not take input arguments.') end; f=mfilename('fullpath'); s=imread([f,'.png']); ltfat/inst/signals/lichtenstein.png0000664000175000017500000131121612612404251017402 0ustar susnaksusnak‰PNG  IHDR{C­ pHYs ð ðB¬4˜tIME× ! 8¯u IDATxÚ´½[¬m[vÔZïc®½Ï½·ש²+qÙ•8±cò°!Oç„¢€!â%"~øFü‡O~ùäøCá+ÊO‚!H X (8Ê‹Øq•S¶ëu_çì5Go|ô>ÆsíµÏ½eÈ®«[çî³÷ZsÍ9F½·Özëü½ÿö+zB bkl*Hš9é€ "öЛÀu«`ô&8óírÑæ|ØÚ¥¹SN8á”$‚‰„ Þ½kïzÚ£ ] €$ÉÍiD3v!ÉØ‰¡ˆ$;Ø 4)@€›In„@η  ”$ 0$FPBvPpPްèˆÀ¡‡"fF`‡÷PDìûÌ —Ð#èrsISðißß\÷kWpË+!C±Í¸9.œ¯{G$0c¸Š„ |Ï×À Fö€À%å‡ÀòÅ|²y%óË3#™5¯V!ÂM"(­>QDÝWÀÌå-ÎÿÖx»üN>©ü#õ›"D‚hˆyU=?òxfÇglÞ‘bP]ÂùÓ:悦ãîW-!ÌO-IAÀæ}XïI,?_«#ÿ6D’  SýÚzÙ’šyþÙŒ†0«{¢î] ’fjùHƒµ‚#–×dnBÔ=€nÑ”ŸAN:Õ nF#ŠÑ›û¶mîn„³n{ï½+Þ\õf·×;ÞH¹aaî€ÈF ³î%7šé¡ñ±Ùcã£ëa³Kóft“Mt°»©96·­Yóp70BF‚4@¡ýöq‘7k‰ª'èî$–m^?¶þÊúç±t Õ_­¯pZxc[Ý>£Z3Vñ*Bp€ãõc%›‰VÛ“$ËÎÜò±öÞ÷еÇÖ»õ!ÌáNiFš(@†9È\K–/k¶¾,ò’Þ¼yÓ °GtÁ‰h¤B' ˆ€‘0À]Ø;ö`0Û%3ù›ë5‚¡èÁF5·Í)3B]ÚC¹žIF0 v)Ž;G#:) ¤ŒJŒˆ¨G€yH$¨ÈÇc»`¤“yÔÕÒ"­"˜Ñ¹i¡Ô ŠÌ]f–odʸ@ÓX„fÖZ)PÁR ƒéîê ÀÀZ|€p0 pC33e¤œk’Êc¹>1•ŸwŸ¥A±Öç8òÆr¿Urç`="ðÂW†ž±Íö@0GX_^¤¾Cbì–¹èO;*ã€ò´{—ŒyÆßl¿Œ¿b>ís°0#`‰.|Ưq÷HØMñ™Çò*l$Q÷n{ý…Ž?÷Ûè#©GÔ*9^±ö{Þ‚(‰4§5ƒå¤ÌØÌM$·ææ^Ÿ±éÖzôíCä6 .4/#OJ£e”[^Q7˜!!Bì]¬L¤Á"¯Ä­ysºÓl|2Íu7ïnò€çß?nu³ØrYÎde=æF›@KN£›Çñü-»'ÆZœ¹×§ 0³¦:ºŒ#"Ü€!™Ä ÌFÚ4Z^1óen2˜›ËÓØ —‡‡¶‹®]]ˆÚ34º¨ ¼Ñµ÷˜Ñ*‚×]׎2²Bò¸öØ»mŽ-Ð[3#qíPfTeZº+v!* Kö€“ ÉÍFí„rñÀÖÅPÞh‹ˆ‘¶R!)šIr§Ãrdô%6$dKn–EAt¢„ùüÌ ² ‘ŸBu~ÀÝs×Em! B€ÌÌ*q33„Öx!# 4¢ÍáÌ‚À" ÉÝa#"³¯gTäÑV±¯U­yP€ø,gš›dýÖmæ[•Õ‡”ÔLÍÐÜ(vh‡ö²Í}ò|[Îïë|k"vºP‚²î;~8žgms×ÿk¤á¤†nëîE½ ¤±iŸ¿×úÃfV ÇG0b"3Û¨£ú6å¬Ïnù¡ªÒžåZ}ïÙ‡Åí³+Ó=”)TPˆÆ€as†Ø²º§Ì´967§e¹”ö8PŒf¡žÉ_ÏÈБ•äiÇc1À3ÀÍœ¼8/n!Ô…Ø÷0ÊÙš¡©B¿ÃÝÌAÃÜ•’Ö¤8àZ˜>/Q?WÄmïWp÷YÏteMSž÷~‘ëi]…à_fDZTOµH*¹‰<»+ém ôZrBYb$ªC¬/~ú¤]cK¹µkï‚õЮ¬´¥QA‚FZïÚ£‹a%Ùe=Е©–ºc³Jzœ°ž×Å=ô´kÛÑ\"º°‡ <”ul!†Ì¹¥Ph #È.' Š‘ßA‰ÈŒõÐJ´'B»B”:Õ`[ÆÅ¼a‚Í´+£¿ ¨¢OBDôL¥!Ò# Ì{=¯ÿXR9_*G’N4ÇætƒÙbùsõ G&˜è´<[‘Ï$,3_®ñŽ@=Ø…=wŽF²0–æÈôíHœ "µ™Œ÷‹ãâ¸4ºãIŒ]}W¨' šŠ|¹ÍƒÞ‚­ÏÝu— ˜Œœ”üSs¾B]ž=Åï¡9_ùéµÌLaG:7o~÷a3YæQ¤iÞnŒ ¬,~A$x\úŒ5ÍKʵp2iåb­¨è˜ ÍrôOaÂeó®²¾«S‚eô'éÔF<6Û :@„)G34ªNÖšµÍ‚ºS–§3àé@aC†ãªnäqÊc0Îf”üÖÇNVP|©Hå÷Pj½ªId £™˜¯kPsë.˜8Õ Ë$I(Í(©‡™ÐÁ‘‚×A1_³P ª—t»,—÷j=¸-fJ$tˆdŒnèJ’èÊHœg|Bóꃋ *ùÒ=òD¤.¢«=C‚.52·„² V­3É`MóPI‘ûeîÇ…p …÷¦#Išµsž®="(9Ãàf™C!@&p¢læÃ è,ª%‹”ºÇ±êÄz€ŸÅ¼ÃÄÞ<0×ÊÌIHša3ÛmÉžÇ/X žèž'á P¶.N¥ ]ìó2wÄ2Ãìðm´K bѨF>X<^ðªÙCƒ7¶Fƒ´ã©ãZü˜ ð6&ݦc ð–=öáö)ðý=4ö%¨÷(È8cÄÏßt”tóÅïQº/_çx|µp¼—qýæLž¸P µœÎ¨DíÁ±bïÃÓä]ÁZ'’ª ÒwG®-‰•|æÅÈh ln-´ !íy+Fñ]˜’›½8p5g£6ǃñâÜ fðFwë’]6ºÅ€›Nd†}}:/ *ÇvÌ€S7O‰<Ü·8ç“Êëhs£P¸Ků0Ñ]¦áÌÜh¥1ÎXÖa–†ëeĤ£3$ÐÂfÑ`õ9Î@¦nN¿çû¢uÍ{Ò}ˆj,…Öfó) »e¶h»LÑ"aT$œ)t© ó„Œ*#5=9c‡5ƒ;A‘¤h"ÐóXS)\ îPÕÆ¾‰»Â>‚ Ýõ‹È:eˆAXœ¹ÄÍ)±`Ä^Å;N5€µf€" rljáéY í½G¤®h>°†¤÷“£HÚ0¯Üpl#š³™œ§ gà§Vý€™ù`‘‘Ë*•KP%§€a¢e@OZßÌ»ñîG¦ á m4›Á~~9Ç€ÇñZRT_Ž.ªôÄP3vCwDØJî©‹MÜ ž“"à‡Æǃskt7wÒ$4 š«¹f]rçNgܪÓ8ÿ\n…ÒUZC‘ÀÏ–VAäǸ—‚Ü—™Ý|'µOÏ–àJ»96>k­q¼µÈÒ0›·ŽËÑ2+€;‡Ó<ì`Écî“L;˜e˜e˜F2{<…̬ Ž¼× ¡‡‘Ø‚Fy z<À"°Èü½K;àP˜\l&7&¡Pß3¥7˜ÑŠšMJ]ìdÕCCŠCYÒ¿1ÈÐ:G3“¡gÖ_'QbqY{¢p*© \Ý 7ì9 1ó ùTC2—(–ÅjPrB@÷<4…ªp`‰µ8e†-‰Ç‘ç%ž^"±^UJË­4¥N’gýb„± L˼_‘„·7cAY¯ ÖÊ­šÚ†ˆAêÑíÝÆw7¾ÚlkÜÜaF¯{Dt“š,€:ud‘~Ä€”FaqÎdˆý”Ñ/¨íxŽœ ˰ó‹èó&e;Ó°/æøš·¨OTà! žßÉ•EaÜňYüX¶`ŠŒ²¼-xU‘M)y¬±@:™¿¥\­¥džXBÅÌÌ~µ HS Ê¡ É:b© €"õBltZÈdQ¼ …dqŽänØ)º*t@ê±c‡=Â7 !šÉL­Ñ` ƒLôª0`òÜ}ª> !Ú¼ÁÜm~ õåi® F„*Jsž(Ô‚ã-â«YJõÕ¤¹€ƒ"^ÒøÛħ/•€/Á:Žp|¨Ôt#’ÐU Oòhˆ!*8JifÁ©ª,@ õM!q›tV-Ž‹þ-ûhÎvˆ 7k(/iÁר‰‚‹½x•è„§0 VRTöou³E¦T­—HYÎ’ A1•,‘¼b%<¢-)¸x€—µ”GpÑgD±CÆ+z(ÞDßt1*?kd›Ð<xòs–:LJì±uÈb¨Õ1d×µ`‘,œ%)cÑóNR‘èç¬ óHÛC» eþ"φ3£SͰ Y¡V=ÒdF (Iñ˜bhÀÙÉFu**iöܵ‹ŒáDsÕøî…ï^ì±Ys3)#{c 3læh4CÁ€]»¸B°yú¾„Öø6y‡Îz¤”÷¼¡”ùÖ›ºìÓQÄsPn‚Âí{ΣÍîwW¬ŸËÈ)g‚TÑ8“fŸŒÍŸ|L…ê ”µ$”uÂié#à¸j–Š0Ï•TWdÀ7±ÞüÈz”ŒPK†;@Ã,£‡TC fb@³Òå%s=ÏãPr¸T2^%ôžVd`Ž“^Æ;,ÜKØËAÌûc<)TçÙnñ{¦û9e*3ÿЪA½P(¾”ˆ”ê<¾ï.ä\Ú3fü+Rš˜„gàŒòqˆJX½_£ô©?@îz˜£~n§>ˆ”NG¡õ] hbíCj4•ìˆjú˜œõ5òøS'}¶=Ž“Pãbz^™E׊¡€Ë‘yqäeGx¸l 8)8ìBA:và°FçÞ±§ÀfdÝN´DÆS`À¤4ÏÓ5½Ef@)"Â}/­yi°«çkªE′Ûe€ÿA$ìc˜O½ï(þD˜©Y3§3evˆjW¾ŒÙÝÃÁÐKD“Y„RÀÔC^Í«AÚÀ(É<¥lfÍxiºlњܛ™™e2EHFº»E˜³ÑÔQ„LJ"¦êyã"Ø_ÒðÙÆ]HgÕöÜÅ;½Í‚ ZEÀQ‚œð¨;u÷Iæµü°ÞZŒ–ÁOªZ%P#lË ólJÊüZXAâQ`e t{*Ëäd9jiŠ„D3ý̪gbÊB>Ž” ˜Y£Ê ²X‘!«€¦j©ë©’ È]#ÌØ² AÜC$›M8 ¹Á5‰²zÝ©ÔÔ³ƒXã ¸m Y ²ç:NNظ{o§Þ¾_mŠƒ›%ë"ë\Iß)ñnòŠÉ© 1e7™ ›†ö}hO–b-ù3'Š—Dkψp€}í\ Ly6Úš4$üÕoP*6QŠåS±G\KªJ²NMF!6% B²Œœ¶â*‚à©ãÓŒuR3&YRGe…B£(‚U\ÒO7@¶ƒ{ ø"è&{™}ÏB\ƒ‘²˜Ñ™fÕäÅÀ:&ÞV‰Ìèé¨ÒÏ&e @hïPx)£óAF„ºxíÙ5m O5·Ö°m4¦0å+¡QN6«X†F»¦´I0»ozßc†Æêàͱ™5³ÍÙ\Í{k1Ó±$Cz pÛˆ˜©IRÑ£ „²¶nf¾”„½EÁò6pÿÿÎNÔê+?]ÔaZ+ѯ(ñS”Czé'cSã±äðC/_øŒ}'Ö6‚•üÍ–ß¡¸Íפn).ÑŠ£(ûȵò³¢U™ @€ºæ™HP†»‘Ꮋ¸‡ïì!ƒÂ4ÄÙAì@—ºÔO]!uÊ3ë1íP3øV%gvùt7ÔžûŸ_lþ:÷ªs½CK9÷’æ7vŸvN¬Å§ºtRýo'n–Ì!Zµæ€áÜ™£ªäI¬Lâ|Âé¸JƒðgŒ]¿Ð-hâ$ÿ‡’ç¨ YÏÞ³ŒwfyŽùȼbIwªßsÅA†˜q< ÎdË2É:³ßÙ<ñ*·@¬J‘uI‹®R+‘=pqäÇ30•‹ü,¸º’ æ!ÔIR4js]Ðp0Ü’†Vuw.QÖïse¤›DAöªGeâ\ ‹L°ª0 ˆ°rÑ :­™.ÍeVvV6|fõ“Ÿwʣؚb%i‡Á¶1Ü,ÂH¶Œ-«2‚$ÜäF7n­5Wud*µƒØ;ŸºRÚ”ŸšÎ=ÕÚ—à²véAI †àsØŸ èÂ%-á©0?;.p!±3d/T€žÙ÷< ¸i›ê.®ÇÁq‘Ãkb§=ÍSòèîáD±ëv iNëfluFÏR=‚éÅ”7–Õ¥R…꣌<"l¼û"ršúsA”Yú@êcV´L$‡%Ï“½ÒI¥5[|+-²OÂÓ>*¼yáH&J× wÒ•±6S#ÐÐŒ‘¥d‡ ŠzaÌ• ÉMÆP®U—nSþÓ;LO½(q %BºfœÅ¿ÜõM½ð§Õ÷\Ïw;N5š&¯áÎçÇÒ¶V:mÝ,Ù8þ™c%í¯ow€£¤ˆßÙ«_©>'Ê¡Méì ™Ì¤„ÓUh4ž!›€=SõSõ“­8ÕûÐÍ6È NPèÝ: šU>ƒˆ@ ‡NGHã*ö”TÚPD¯šÂä}±Ìë@;ä4<"""‚ˆQJŽP$%φŽtƒåÚÏTéºÅÒGæâu²¾rS¶¬#xŒŽ¼ÚP 1h&&$ëê¨2œÍ<—oÖ©¯]e›A($3#£4´„À¾`+Ò)CÈÈÓA@›³38áž¿$A©ì’É"Fïv¦ ¡½Û›Ž½kdÿRºë› ²kȘíé²Ù³tr˜¨Þ•â>îlÝcãî¤y\XÞ”êGÙ®?nY_<Ï+y®x'Çä9Á|Æ4Ïv™I-` ŒãŸÕó š£›Á‘ø[)Ê#tå* Ú†Ü`fº¢‹×8ø•çhÔ|¤x¥Kwi8¢pô-ÔòÈVt*úØ ¡ Øhž«"-$½ïi Šè¡kÀƒeR+Ÿ Ëv·UóIú ­bb8…ŠŒ:nº9kŸè8G x£Î´ñŒ˜§žŠÛ§™·A„¸=¨ó ó!øœwö(ò2­šËôž"Eÿ§ Îa72ÎW•:]•&ó[ú¸†:2Ò—, êˆÆ´|8qÎáE5¯œCfòŒð.!tD˜0a. 1Zè 4Ócó4í¡;¸¯»];ön¢I!ì{éV§¥›#¡}÷”£6DiFÏ@TŠfbÃ(€bÙÉÕƒh ’Q͹›Cä!% Žêö­ƒdzÚX&àº×;>žÕÔäà‹ƒ&¤[Ùªàôó“wà pf^Cv’@?°NˆfôfßâÑÍbãþ™™;3A¶*²ò˜QÊCz诿×]×]Y¤‰FÏž`6Ÿ%£÷"O†û%«jþ³`@ül½:/™ù<·D}Žü΋¡aÙ‹/~8‹­EÆ=ˆ9Ò͇gŸ{K8¢÷žºi;ØU 7‰7 ˆ’ŠÝ8<¯.™˜ŠÓâ¨ÂÒCLÑ££÷KIFÊœ+. µÔÍl4š§S˜L0£ƒ.õ8j‹H‹S:‘¦;ds¸Ã™¾r,K¢ÊÐ Rœn%Kjy2VÔ2ÝÊ|q«¦?¢ñsÀ)ç}‹<øR€*Üñl®nn‰§,"nøÞÛ;âX©UÒ!Œy-鮆 ëVĬ¹`gŸÜMVÁëüÅvZþ\`ÈÑ[‡™=Ã"a¤tZ0[Má„QÖ^5>næ„r5Íh¯=®W=¯k(B{°„»… …Á2gÏÖU¥BºÞpÊði?Ö>:A0²ÇX[ßlÅpm÷™ë—›[”´Aû”Ð÷µ 9$™·ü&ÛΜ_ñ~‡Gæ³Ãg®X$[¤!3X‹ò0û¡"¼äCv—g6®ƒHÓìÁ;! “5#V‹ï@ND:ÑÚÈDºLÈvÐeóÝZŒ„$ƒR(ªÝÜ·Ææ¶9ZzBTASÞÔK‡ƒ0šñ«ˆÓ©V>eÒUŸ÷Æ 4õ—k¸Ó´9÷éàôÒq¾ÆŸeÄoiX”û5Ê ~¯›zÛ‚é‡òj2“Z*K”‹8ŸUQe§b|œZ›²y@3zµ ’‡ŽlÔ7RÇ¥9Z =ƒr³fÚˆ¶µ‘ëÑ2†:/Í.9Z`è–Ó·ä1Лžd¯w¼Ùã©“; ¼ªB'¡À³ ceôŒygíùWíh8_âÉâCpƒCØMd e–ïÁq‰é0@ju5zS²DŽRYúÿ8ñ)æhŽ#?)™FN*˜ÝEÊf}”N;€N™' @@×D‡Ã-ÜÕ+ ›)‰\œÍ¢YlíÝ‹?43viöl©i²â9pÈÓ3ƒÖ©¿‚-´sQyÌ®F2VáÐ=b ¸*ôì6nèÜ’r¥\r-ZòBåcµ&™/tËÂD¤$ÍP“\ r’I§ðå#h‘ ¢¤"@¾¦´°ÁÙ¯šNÉš±F†-uTT\íQ(®$SO¡çÅí²ñâ¸îVÈ»o”á&3YITòJmlNx»€×÷O‚OW]w´®.KÙ€†onY¥Ìc-(«áäN‘YÜ{.Ò™œÀ¸<Oý“/(1PÕ »4™#ëÇi9äF)€µòÚA›—äIYØN!lL IDATÙï<Þ+¬W’-1HX ÝlØ4Òé¨ÞëãVõ…GsŽ%3¢eŸÈ^^à >2*{Á´¡’†–4‹YEÅ=Sˆ!F7 1îa{Ï—C‡k;IEµDç§7"ÔÍüh%ZÛâsž‰rk‰·M[Z¬¼Òv8Lp@³÷r´…!ö[¦o€>\³¸S]ÂgHGœgV{¼©ì0Rî>Çâž2K3ö^^¼ÃÒy·BHòŸbúÍŒP‡X¨ú‘t#=š©ò‘H*«N ›"~(z…zWz¶u2Ò&=°9ÅØC½ˆ¢jI¥¢_m|uñf±¿Úü½K{gÃfuëø‚%2™ö쪳€HÅš×eÍrÊ*{a*\Éì6¤¾„!>OÕo拾gM„c‰N80@­|A:Ǹ„žõ 2<¥ç½1 ô®-mìU6:™bb,]gMRž±rC'š~ ƒ>Õˆµ`ŠvÛìÎÅ£àÔ “R-8ðà|¼Øecóløªáèœ9%=&iÃ%€RÆîÆ—7¶Þ®Ž§]O×x ìÁ=X“ &wèܪo¬ŒhËbÊôo×ÇgDüËçe¤¨ˆcM5z GPÖJL¼°àVm yb“À ÃiîLln-tLj,BÙoG‰ ó0¼Æ)4©ªÃa&ÑÌÜ}Jãóû;"—‹4@Òá e£­ Ãh%=¬Ò,»Š+y•-lÁ=ÖºùdTÆß|Ñ6í¦Eë™ñ2¤ó<“_úìóœ~YŸÊ·¾ìÛQ‚{ß侇€5k¢J¹…wžš€[•Òs¯‹»MO„}¢Ð«öÖÁÞWr90Á ¹3ZXæ°d΄SÖ<Ûš]š=^üâ±±=’¯}kIq¯m'Öa†£ëhHY´ôÜê¹:à¤üyæ'qÚ¬@À”Ö`Ñ”OgÏ{¤AÅ+yÄ£z$æòÙí1-“ƒÏ4§7/‹ÁXÖA†“ ’æü;f?Ýí•Ë6ÿkf–ÐÙ¼]í†r\퇎ÅM­QMjnn[ãæ9 òØ–ä.XCIã3ÙÐåÐL„K¹c3îÎ'ÃÒ»žv9mïºÚÛÇ:«*èj½—΄‹D::`îZz½`Õ”‚ˆ(N³«ÅÒtã‰[ UÊ:áDÍ–‚sÉ:ïãÝ^NÎÞSž&Ùùœl’LMØBhõйsjõ”=nˆ™»{61Ì ‹ˆ=º1Jp‚ôGÙRÄna”åçM‚¦r¨Vbˆ ^ƒ½ßM®³1ß»qqÀ¼íá:? ¼ÕÁmuL¸ëè{7óÆÃç¥3C‡{t¼| Ÿå}W?¸œ,¹¶x:+3#ÐaIP´)Ï£ÖæU½…¦Ú â°LÔ3$ìVãBXc—õpËaT‡íe¹]•1üÞ\Þ%7JÔ«fáèu*¯­røÐçùî­É͉º?ô:³ !žÉ{FHoP£sOÞ³£_ÇI·¼ù‹&Fè1è½çm7CÄ3Gá”Ó,ºSN?léÑ ‘¼×?±¶C¥só1^,ŽA®¥ XÆTV«QÍ-qÞ=$ƒ¯3Z-‚Ü#iÛn©)-¶SɈ}Œø ƒŒa–ªG„›®;w#{Ï âÒè­ÑÀk*ÍJLI~qŸ÷ܽø¹f/„nk½EÍêf²ñÍÈ zaÈg#½Öê1ϲי4ïYdW¸v¹ÂGÜ"f+ŽŒX{÷Ó6}ÎÄo²|*ƒ¿ó¬Ô‘ÜÇ¥ðiïÑ5LîFÞ4öÏAÿô1ôVqì!úœ®§tÍc ¢Ï(Ù÷ —Îc£Ý'‡?CóØgÛ÷úuׂô¹b‰/}=o0Üõ¸”Ò™:,øE`‰4œù8}.¤*›sh”¤èÑÓ·¾ìK÷áX¸÷Œg&ÇuA]Nõ€YŽŠŠi5:Í)$hæ­Š’ÃUÃPŸè´ªàÔ¦Q]Œk€Ôª±Cž½)E®G‚¡“#Ú³Þ±+-‘™ç«Æ™Í—Ûñ„äSØ5T™Ï—®£Nv®IWmqãsY´$·“Œ"'ÉŒ2*‰OYï¤Sò ¬º@3íAK³xÍ“30ÅdߊÙÝ®¥ŠªéqŒÈ á5zTq ‘ršÁd–ñÌÁ–§­Q¬vt•ß,.7c„ZèMàÉì¤ÑëlO“ÉÌÇ6X•`u˜Å ÎuN,"fc˜p¹?•E„“”W—¦FßC;­êR°'¹ ‘fYÓiÓà}ÊжeÌ ý2iB„ç€õœ†šZÍápæ ë+ÖðšÈvyšÏŒ¯së9¾ÒX®*ãæ(n£ƒ=òÖ¤û’è ä˜âÅ#Æ,é<¨‡Ð ³Í— 0û†x˜]±c Ò˜ny?‚/Üé)9]Ó=[Ä3#å+{Ãè)°£ºž0‘ÍÓâ\@6Ñd;½é}8hVJíXç5tË±Ò §ñ%XÑáSR½â¢˜Î¬ ð˜x<89®”ö ™–aYŽäw&ξ ºŠ1.61B&œ0<ô*j§›çpné&}ŒÑ^tæ{EžôVÑqý¨A`aR'¯äTçuC<õL^:V í9¡%ã<•dcê6 ˆ|¾ÒqP/‹⸤Ñꦘ´Ò1¤ŒcUŽÐÞCÒúº~í¤ Pˆ¢‡ÅÞ±‡]÷òÅ*³¨õË„Çáîr÷ô½6tD—ÜølÔõô6Öð€¶¢ ªë‹éJôpË9x´üfÛË“qV=¨ØõÌ™±§ Õ-G©¸NRÜE‹‰«,¤4ÎôÙÊu$Â%Yº`޾„EàNÏÑB!·žÞQ=n{¦kñi‰¼¬ÝcÞ‘ÍTk´MÓÝ0Ͳ'§5qúÔê3Ã*»’ätlvÝ u –çÇpA½e’Ú³å8¿#§ËeH}Ú‹ t5¹•6Oe 2»”V–BF4·–š»á t6K¸‘\ÛTâëÎ'Ý’½¢^àœB³Wó¤Ò<ƒÆ‡¸þLÊ$kˆ@¤3ãÞ¹w]»žz¹`T¦¨÷ÉÎ¥frƒ³‡±ñSÖÑ\3Í‘ðÃÎzŸÖû˜èÿ˜ U?sñ¤Ö§Ë­,]ç‰<Õô2©öêBÀ„T§è”@•ƒ1ì2Ë!ÀÂjŒ!Bh©;´ ÂË´öV'qV)x[/ïioÂ; &õýX$Z\PÅÄ8ÒaŸÕ™â–ŒX& êÑÓiLàÍr±¦lg¨¬NK×£Øìj»#»!#»‚ŠTC7ìNsS3:uÔÈ1% úûÄ8´r#?N±£yƒ‡uêSncÌJËþÏ1vzæ¸{Ý«H„§d³*ÛJCÔ© ‡/ůUÔ†~ÇÂ|è{زnTÓÏ Š3´ú2Qü¶Pw@| E¸ ±¦A/Nñ]qêSB㉤g½¨·´°I'vöíl¶–¥µ?`õR˜cˆg$=¤ñϬ´|ÌÕÂPôb{§ Gòê𚊪ÈÉÀ¨^áX¤nhÎÆôÉ–žÝ±õ#Œ;¼r§ˆSg†’H4A]G§…MV!â¹­ÿ¹1ðlÁ„ƒÉ,„k”¾óºkîת­3• oª{›cCl~°‰ IíÌt+ ¦5Êß}®bÑ>΄ùZ^Ï…!A[ÚšƒýÜ¿ˆ—i°2 EW@-2„ö¥^.·€;$UµŽžþAŒjk‹Ž©r¥—÷ƒEÚ›È\:®2T ãMþÅÊÃnðbÓuï|t?cÛtÈ·S{Sh- ²9‡ ÌùH*í²^…ª™±Ai¡¥÷ˆ$ë=]Ó5´†ÐZõmÓÍbid35S34Oá @ºY„r÷ATÛ!ÓÙãÀê²ØÐ1âí˜f+Ù²8O«DgÏŸ¯z­-HBºÁMéNrÄ‹ãgýÒYpðÒϤчˆèÿŸBÞ©HŸÏ™yÆLpô%éüR³ÛŸe6ÈmˆgÇ9zåì=Á;4ƒ„soÝgú€/ò1Ëf™ÞÀY ˜ó¼cP,MÀl—žÕ§\>—sQÏ€Ø{ Ì·ƒž'§u`îÍäÐHü(ãÍy™iÄš@h™ p7÷Eƒe>ŠÍi9qT‹øŸñBhŽê›­ji©’suºp \÷²Ì*ûRKäì{Í5WeSÒf!FÈÒC 5_uŒ ï•áØœõ ºŒ{+7ƒOrK¹£ûëF“ùOGœ¬=óNA ‚9ø6 ³¾‡Â ‚rJJ¬½;9”G<%ý52)io2ÊB’º±“2v{ 4ƒ†\»¿vtbÌ<²“"˜Å—`½ÈTÍŠ‰ >6އ€Q¦pÁå0‡#9‰ÙIJ­ÁÍ,h‚…Ôû ³ îtÈ(c¸•£šË‰Ø…ÝÔr–¯¬ö }CkjBÀµ¹Þu¸ín½YßL"šó>íï5ûâ¥õ ¿uŵ÷wMºÊ:·P3x³Ç«n°0XgÕðÚÑw³ëð™\  á°“µ’ÇàUÖÌ×#å¼"¢* ;šf““¤…Å&¡2œl}¬¾NO4¶Y ­á¦Œ&p¯åöÄàµéŸÕXÎ{b`µ&¬Ít£'í„Âç¯t,+|‘ŠÕrò©…<Ïe ¦ç•Ž:&^ РȜӨ8„ZG‡ç_…Ú¦£ÂB^Z gï“&‹óÄ™{_-q 6©A­Õ 1üEÒ"®LÓË@íÎÚÊi’NŠ¢C†“[^%°¦ä§ h&§ï2Æ–£R#´Ia%Žot(ŒûÅ´Õ¼âé´x¯ÅOÃ6ˆ윎Øá ¢n~?H~¬"|6ãlµäìÆÆ4·­!±b°=,Äî¡€í=®ëŽèë Ççêø™}õÆd ÑÛ^c¸3/MPš$ô4]IžšÂ†º½c¨¬‹Ý=­ç¨‰¥S,‚½×йö銈œ ±œ`™­ì{ŸÝ›C"¢Û®ÈUkoƒ»2Ë f8âËó÷u³~ÅF£ökŪؕJ[Út¹1¡kU—·á[Îó…Ç©±ï»dnt:ÍÌš“]=æå(ž5a}ToãŒ4Ío£_º7l´uMdû¤=>‘ûÇßúUì_|÷rùÊ—õŠ¯Ñ¯Íµ_ßHß݈oç;_Ðßýç¾ðJïû×?üö?@ûÜÇßþðMàáõ“>ÿ¥÷¯ú¾kÿAC{j]x¶î”wJÅ 6û†L*‘H¨/m›Iæ%M$c…çq 1sTýód¦OúX»wºaÖ"o…Ë_Ýü3þb ¦þÿôùaßvå‹c9-åÄa=6úÈÂ8]lïÈœø²µºen+ãSV+Þ«½L5º½†µ°–j´/Óhan ºbO™Ñ£;³’r <ÐÝ•f–fî–]Á«Ö Ò;_à\5¶ÂzaPMÔãþë®VPåvt°x£ÓŒ†3÷0ñƒtqï¸öÈ™]ػƈ4‹áÊ5«uØxÎS ¤Þ±sÖ4ÝË{®¬YWŸÒ‰øØêŒTÑ.ó©ösМ-xRɇ,ËwkÏeò‡^{<ŒUS(¡‡%¨ÙQ5sŸ¼(WE©eÚ囚ƒu>F^h‡Ã-^5w²#¤a}\. Ù?v±wö¬X‘ó„ÇEñ,Þ× QÍ@°½çl2%“eX¶Ò†˜­ÚŠL‚̪Û›K‹+6ÊŒér‹íñ“/}þõ{í“øø;ïnµþm}üÍï|ãWé[qyõ5ûàòn{|õñß{µ‘n]Ý÷«zï½÷>|ÿ‡¿ýtýƒþý?ûGþ—¿ôwÞ|÷×üÊ.o¾ù­¾óÝï¾ùîöÉ~ÏåK?ððøôÃï\ù—þþu¯?<†®ëqÇ+ÇCGzXëÇžÑáâG¸è'A¨¯Ž+gãD DòùpÑy?‰ûSv×>€TmÆ»(üÛÅܼìÂÐãô+ÏN”¡ó;šNÇ@Ü£žïØ1ÿ¼abÙk®jƈ>¯ÍÆië5󨦋zþ$Ð{`Á€«Ë^k§iÂ;ê¹1§íYƒ˜–¡õ#ØÂn# ½±Y™Ox‚–w7š¹Õ` °÷ØÃ^K×kò\=bï•\grR@*µº›ÄNå×òš9”ƒ -Š­˜ؽãEǜǒ˜)$µÃ)œ3‹–s»xíxŠ<£Ð-{tX©srOkr„S¥¸Îd„è9¸Ì[§“ ³Äp6%%½f.‚H e™Øíå(78CÅfÖ~=°)s䆪çišðV¿É€lŒfܧgâ8c¬›I” S®p#hcų ®áS›zDíd YO( Šˆbm†T`†‰$»Œ&FµÔåΞà{€{XM @ô@ˆž¬XDDÀY¦27g¸éâŸcúq<ëK!¼û)ÖNÃT ÚcHƒ=´÷”•ÀϽuI­üW™®ÿÓ×%½Û2Iîv2†Èƒ7ˆOSÖ¦f׌@¢ÌòéÄ bކ£ŒG …²ù@ ÑàéåÃK91FØT¤Wª6êÊþäè°P\¥ó’H'ii5ºÖ` ÓrgC³œFÌPfXBIƒ˜r]"¢›ktQ"à¹!Ñß!/ì¯.ŸüíŸûÙŸþ™¿²üø…÷ß{ï7}M|qU‡©«=ø; zjòK„û;Ñ´wíjîfŸßß³¯~ÿW.?ýOlÿúOüŽøCê_ýáßü¹¿þWÿæ/üÂ/|ã¿úfÿûßþÆ/:¾ôûÿøŸþèµ}ãÛãcÿÎëËæŠNE’Ö"v„=™|Ájœcƒ]éTPÆx†4è”y>`h¨Wm<µ`¢Ëø­RÅÓÁ4]7ÖÙ-<ÍÏî8sdú„ÝÀE3‡OP×VÕeý/›‘ÕŠîÅ>Qõ‚h ;ÕѺ¾Ü|™ÍÎ/ÕrË|¨7ÖQ’ÒŒObúö!SkRéÔI+:„{)®—Á$çôÛ£pç’ãš ±ewºy£Lnïn|ܬ¹9Z«ÀŸn%¥XKÚÙÌ͈B»€mkc6Nf"ˆšAä0zEzÁ¿a哆:î@zG³ˆæ¼Á²s–5Ó­caºíÂJ¸˜-ž‘¿–ˆ³²(Ë,“]êâSàM·7ÃÆÁ†¶0ø¨PDè|/³C‚aÃf ¡”÷%ÄJ¤F8%@‡A°ci×,ÜÑY†Á#'6½`‹F…ÓÍ}dza­†¼Þ¶7¾Ð ?DŸoÍ›È,Ë®ôÙ)d‘‹ ÍrM-¦ Òæ‡Þ[eV°FsC ºJ²^î2Ž›"œFOµ,ËÚ¼4‹lO u3Âé·æÈ?äݾh§éÁô^ëï¼²w/o~à û+þÚþÁ?úøÿ?¿ô¯õû~ãû?þ÷~é—~ûþèOü±?eï¾+]ždÈGÌØ]ýÒ”IÊõz§¸8ØÚõúôôæi¿îý©¸î×ýÍëO^¿v{ðøª}Ò÷?xúú/~ý[¿âöý?ü[þÌ¿ûc¡kÿà;|çÿù7~îWåãï?þ©oøá_û¿þÏÿéÿÇêïr½¼Æ;Üú¾÷¸ªãêÖIF348fˆ=_…b¯foMŠï¶Ý¿ÇçÛí»0Ýèô¶.ß—Å<'uç)“ÎqÛ™™/þž>‘ÎIH(à<ÙXgSÒ„\ t‚jLé„ç8R#%v5EïdÙ&}"5Û¹ëÃ&²tR¾íǼsÍQçƒÙfhˆ‹óâzÜxi¾¹5ƒQt‡ÜÍ 6¦øÖèbX¹Ø—m§¹Ùf>”£4GϦe§ÎÂ#‡d‰Ü‡PfõõƒÓ”d9ª1¨0œº5ÓJ¯úc×—ÒZùp}07ã(J.Xº› ÒkZ¢Ö´ˆd2R9™Óg¼ê3SZ­íFËs!T½2ˆh(QøpKõ÷1•d1’l'ÿÑãf øÑJ[Øaÿthø,?y2ΜÆf‹#ÂA‹“ú„,ÑÌR]àJê[³Â&­‹¥¼Ù>†åÝ©™$@g¯a/Q)cd/—ª“ïèúaN4ÊBżYD\¯B%ŠÍØLfˆìèèDNV3n›ï_||ý•Ï]¿ÿOÞk}ù½7?ÿsíáúæüÔú?õŸ~õwüä7~åüÿ‡‡ËƒÄ]Þß|ôm³æˆ½'êeÉêg§"¬÷nÄI³­ƒdôèûuÝŸèö»ò:öÝ Ÿ|¸Û›]Ÿ|òæÕç_ùüл_ìàK_}ýÑïá7~ß;?ññ«¿øßü\¿òÅ/}íáý¯~ù+?üÑý£¶?‰o]ñQØŽÝd‚ t”¥åILÏ9ïŽñŽåÃ]ä0g]Ó%>žÄº‹œü-^²px>õâ-çÓ!´Ä§~³ NFC£ÿ†+cñ¼*âýÜѳB*Üj©—ª¨çÔ?P\¸íD†ÚFvaϪ·,È|£,ùoÞñ¬²fØŒ[Ócã+çC³Çf0g…râ¦ˆÈ I$Ý—€i‰a„\››7¿”­JË»³ï»$'Í9hçr©œg6Í3ý†Ôg˜(J‡€QqN=›ÒxT‡÷Ë’Lj™2TOM{ªNz9´p%Ûy²!Z$&¬ 9‡vR Ùe×j ‰-O’”þ”ßX•ŽŠc,VÚ5ŽùÇ,ßúø¥Ðƒ;-½ÓQh ­<åƒ`¼$">›ÛâdJŠt(-žýìñ»¸RX˜T³Æ0xòl Oò!´¯3ï7&Ëá¥î{ö¿wïÒ5zWÖOQ(™>$àæÜtÙL[“»Ü3Ànìb|äG_xøð‡ÞûÕw>ú;_}ÿûÿü}—‹ýkòåk?ÒÞ{|ìŽ×ú•>úŸôýõë‡wÞ»F¸WI¯=ÚÇ;Ÿ{ØC{—Ó4¶ÞõôæZÝÜ€¹=<<ªGïæFÆþ`Û~½Ú¥ýÐý6¥u´bÝã¡wqwÿƇßüÆÏü%òñwÿîßòoý›üÿø_ÿÖÏÿ“¿þÝ_þÙïûä«?õ“¿çû¾ÿG¿þÍös¿øñßý§ŸüÊëWP£.Ζ¼Ç¬³ôiù÷´V38.óv?Uás® ôKΗ/kùÝ2Üv à.Ó;¥„/5Í Å{µu6¥gC¸çêœæ7›XÅ­œXaPp쇎adwßô%N•çqFƒèFš»7sOñOPae¿è¨ñTµ¹I‚ÉbUšÑ›7¸µf®]2EêF×°+I¯‘ž‰\v`r UÒ˜Ú©o¬[¡C 0û¡Žºÿp|+µŠ^Î^ÞÓ¨õ‚ΊíÄýšý–©Ü¯È†“w¡Î­»xÞx8ì ù u‡ ÿj "É ³c®hU5v4bŽÊ¬Éˆç3l8QŽÛS°9ÝÑbÔ¡vž™À£Å—¶~ÿ¹’ré×XDD•Þ`êèL3Y~ú¡}F)zP;ÐC„ÜPÓã žsãl 2JUN=³ò&Œv‰ANÛ"³& ØÂzÇ“¸wìe¹R,t12x«0ÍÌŒfl °§kj£vòh¯ì[[üüçßü‚}óÿ…?øþäðýü?ú{o®o¾òÛ~»¿ó…€ˆîÐesoHÓÖA±a{ŠëãcËF4·üBÛâ§G< šcß"z`ë 2ÚöÐøŽ=n¯ýsïÐ5È·§×¯ í)žþê_ùË¿ü·þ¯ÿä?ÿó?ñGÿÅßõSÿò·¾ñí¿õ³ógþòOý½Ïý‰?ýgþø—ßÿëãgÿËÿê/Š?Éí‡ÀêjÝ#»aiª:zä`·±‹76mwÝnûÙŸpg€îHo=´dpw3ôÓ™Á; ’·„{Mª‚\†ÃÜwõaËÄûð$X «ã¦¸+¿© Ö)Š lnÍ/)’ÏL1²'“ ÉÍùãS«+›/‰u*Æ)Ö3C  â'³øî”Ó<­–Ê¿‘=ÒB«f~b€65‰{XË—Æ…5Ì '7¦ÃO”¿Žëö~ IDATzΛéa¤Ì#Ô"ölU™ˆä6#¬¢l#§ŽÚS]92AÙc&h GH‹ï'f.¯E؃Ãp‰ZÍQR´â X„Rbý¯Òjêóô²ÕT#åBò|Ý~¸ŒwEɉ$ØÂÍ$Á³…ÕP–¨uè–L‹JC5™½f8r³‘f–M¯Î¶Úr 6ž Õ·tH¾`Ã{UÓ¢rÚüê¹™b`¾ {®¸ˆI4“†-fÅi|®áÖ™ ˆYÓ¸“B·¬¡EÛã)}üA*Œrã¥ñbtÊ“78iš• ]ÀÐ\ïû¯ý¦wüÕ«¾õóûâ?üÏþüüþ?¼ëã×ÿàçp}zzzýÎãçC.Ö<®Oï½G÷ÞCPµt…µýé‚×ï¾[a23Ù剸äúÍöÝ¿ûê£_þ-_ûQq\ö§zssÛCAïOÅë[ûѶ˫ëþ† ââhn½±]?Æ—¾ÿkÛ¾»ùö…ßðÅ?ú¯üK?ò#_ó‡‡ïÿ¡¯vã—~Ãvùæÿýæëÿ¨ýàïÃk¼úÍ´N#He¢WÓ?ß Î9>‹å2^LG_ÂgòO~ Yu»ùÖ·¿·’y÷žÍª¿U¾½õª8»Ì^‰ü«m{µ™3LiÂÞÿ_ÞÞì×’ì:ó[ÃÞç™7³²†¬¹Š,YÔH‘š(k`7)Ê-[rK–Û†ÝÜlØ€ 4àÿ@/ö»_üb?y’Úên´Ñ¢Ú-J„Dq–(ŠcYóœó½÷œˆ½Ö燵wDœ;d%aË ‚àPyï"v¬áû~ŸO"Þ¶¿ 7MGHx áq<«¡Ÿ‹³š7BZF¼ù4™Ú4RVœ¤ÂD¬2Cjb¦½k}s"œDcbª£ +U›©£¢ó½¡ uÛ¢h ´èmÊ‚ææ9äóêyt ,'푱‚¢žA¸pJ‹,â&^À|er›ûG JWã“§mUNR>!{b™?¨q°ÞZÅB,¢¢¡¨’{e2\*TÕC´ BP!«ËwQFIå ×¹Ÿ “ªD½«™s’N%'Igî²N$£žÞ¸ïr»NPõ“ÙÉ·LØfX†³šo%Ò’£… Bš4` ~ÁÕ£zΪ+fYü:¡N’ 'NÄÙ©t‰’²hØ!ã'5Í HH™Èf_o>ºþÆOýèÓùøO¾ûÚýï{ög/=ò´åa¸½Ž±‘¸„Í InßNn)Ìt,"Ì‘' tGewØéF÷Ñ|dÈR1$=z÷õŽ_¾Ø¿³g8ºõï^QQg”RÌlµ»ÂxýÖŸ³›ïô«ßŠpb*ÇëC¥”“&ÑÝÕ*çœRÏÜ»¥·_{{Ü­öVcOóݯ\6?ÿw~ãà•_ýÄ/æ¿ýÝ×ÿįýÍ¥§>A—ž=D·öå ®8?Pa1Ä8g;zf¹ps/á*“àôD›N’ݧˆ¾wÉO?s4ú¯ŸP+ážGOgÿºPŒ„¨Z%îÄ•¡€ƒŠƒk€œD~èä•–6þÖ(R„›8açÞ•ˆ‡'¦$Í€’ªÊ£˜Ä‘›Á B#19©Š3‹Š¨€ÆÔé v„¦šw2‡ƒýT¶€³rL´ Mß9Á°šo¡.©µ8°¨§3«©‰WØÆ8MG4Mø¥1/Ã6……9»ùºbsPjtÓ^Û(ª@‹êbfá8w"”fF«ÆÞ>VCånc®xÔ"‡‡ˆ¨„5¬¾Ý¤Ô+Ë´Cbž¡)Ðs€%% Ô “(ºD]⬔î}°{Þõ}—‹~ö»ùm9Üì‘ ADU©SÛ¹'0w‰äbra°s" õT\Ra–‹,?fv§Dìäᜬ¡¹0)y$ÍìYÿG ‰¦ÅÞÂ8 íIJ_<üË'.á“¿õéÍp´wñÃ^-4(Æ$ºêw6‡CJ‚#Lïä”E˜UDÍJhŸÉñè#W»OÿÆë×/_Þ!*î0wwŒ;/<òÔOþ K>òÃï|í‹ïûÈ/•âÅÝ»®#ð…^Ÿ½xíµ¼öý/;ï€^œu[[Óé Z8x{EGmâ¸Å[^ÄΑ-“}—g€9„\£F#OÂ]¢^™˜;ãQÙ £Qb§ÒžFR›°v´ËÌ"ÐIˆ†ÏŠÅ2C…s'Ò'V1Sa8 ŠT™<µõFD&•¬¬¨”&:fÉ_‹VXT˜K"%LRNÕ:Í[ g›2Ùã³ðe¾I$’·ü½è×_P³ ;Ï€…4>fa2„¦\€-Ùy'Ū²-I¨¬>0ÇÏ7¸Á hxOªúb£ØÀ}L©& ÐBÀ"…},dîFLp©¾8qìÈ™9… Q™#îÀ‹š“;‘¸ÄsZyäX!q ]iTd€3‘Š«rҘαH )j€Æ€ša>˜o‰eTNj¤Ï) |¡Ö­ˆÂӀ泇/lm­œPu¯Ö ÁÌÈ,«¶-f§âIìnQäI(‰6: ¥zjÜ{ˬp^Â5•TIVRvRþ{¿ö[û=5ø!{!Ù…wÂÎâ…Ím wIìf“ºmo\ßÍ»Q;%rh§`6z$q «…Q,•në <ðÅ\U¤”ÜÍKyö£?÷ô?*&_øÊ¿öÒ÷~üi¥±˜VÙŒ]ŸéxóùöÏ>ðs÷.L (f«½Ý¼êXè§ñ—/>þЗ¿ü¥½½ƒý‰ë;ßü½ßû½ç¿û¿úÚ‹ëüÌ•$¹ô,åd|†'àÌ]Î/—]:?ï÷œ>`¿Üûn`k3Q¡S|ÞÈ~òšQƒ n NødÑr¦A–Ò¦3÷aíUL2™­­'FíCVdEÎÄLPÎ*î\œ,§â0H8¬¼1xaQ,4 uu'±ˆáN[A7â¬%abá ;†5 aËÊáÀT*Äu 9‘ \ÏÄ ÕœŽæ8—ArraÓµ):¯Òp£ AÈJ5IDæ-@^a‘˜Ã{ë^OB)iaø¯˜:rg ïƒ3ùdß’ZÙµ½/A<¤á`¢Ô ¤ß[}GÌFðƒÉ˜-”Ê æºì±‡9ÂTIA*¬J,ä@ê´rk¼’íÄÁÆÊÌÎîL ÑB"GÉi>)L˜0Ø ma¤Ñ'F|›•i_×®_+±PZ$Ô¥… û¬îù=»þsWO( ÿï,óØÏ;1±¿AߦÍ/Z æ\¿6Ô[PZ„£vjݳ²$³·´+V™|ñ¼h·â«À.\.ô·êC—žþÑg†qS¼ôÝ®;»“³©R8óûބНA¥#òÇ>ðÜüøÇR¿ïÒ‰Ð8¡¡+C gbAÐŽÊXDÕÝK)VŠ£hì{„ˆº®rO`“ =f 7þðúîÁ›WzHS*F@q÷Ÿù…O\Èýwÿú[¯¼øÎ/þöowû:á;‡ÇLº›»œøàÁ+E¤ïwHäÆ8‚õæµ£KŸ¼zéè/¿|ó;Ÿ=ø±‹ª™ôgX¹Î€œ}ö ¼;Ïíôtþ=‡O§×ª§¬ÈQýÉ”XpîĉyN_<ã!{Q‹n{N>ǯÏRC6‚;›…S¯Ü'Ùéd·—L«Ì"!+b$«ÞÀ1æv÷˜E¤‘pq°¸ÏQ"."Ÿ÷‘86.oÌiÂÁÈè–˜íqû˜Œšø‡x±`çi÷óÐhL igC"1›­3&'%sÚy£eO¡E¶ÉþO {R‹4"ŠÃB2¿2Z°Oعjfb2UÀ*ácX~ÝýS¦€3Ç˨áXë´Z·)Šus˜c•8çjËkÓHugsw3Œn›Bcè¯EˆYØc£D!¼regr¦$° o"jwbRQe k’"´æÌ¬U_†˜ºUÜ^‹;ŒÏ0M¼œ­×Î"KëLÎNÁÎT=Ó¶ç~Á˜iICۜŜDR OµŽ›ls}7½ÒšI —$BJûÙ ï*šeÝ;e_ÎO˜IÀçN£ÓúÚ›_?øÐc÷=ùwc’Õjw(‡e³Ûå×^{ ã@œ \ ’ê…û)Ê›IfLbæ‘ÌN¾6ƒp'’É­øšQZý5•±G"C)cÊ+›#;ˆ5íï_Þ¸>üÛÿà~ëë_=^¯÷®¸ù¸ÙôY/ÞÿðOÿæï|쓇~óh³mŽ´»êyð·vW/¼y|lFä#DÜ•‘W{ßÿgûwÓÅG¯ó±9êÅG‹ö™:–{.ýe8g%°¼œÎÔÕ`›Vtš ¶Qá*uŽ Qº[Êë±Ëgè¬ {ZŠÔ°Pæ–p@JÔ%ÙKÜiê}ÖUÇ;têz@bj¸f¨îYªÊÓ¤6Å4ÊAç*^@qýHˆ‰ØxNvg^ SË6pQV‰sŸSàd,{)‰’¸ÎC¼eçµà8ß…¨”æÇ‹¼.a.ܱMÀ¥ØœyYSQ uœàõ”ŸÊ@¯à¤šƒÌÙ‰§aR|›<Ûÿ¹é‘¨ò#¸‚}EøL÷XœÚzÙÜÝ-lXÌ Œš¾ËMêC$L}–ÝL{™sÑšÔ.5/V*ŽâF;<×%Ô™"<¡H…TœX*I?ó”9ãQ x¥‰HÊÈêY©KÓŒÊ`¡*U"an¾ÚŤ'-M¼5Öœ +8osuÊã?Ïú·£óÁ"X [P< ¤þÂÈW­VÈJƤ˜Ù®Y6hz‰ Ñ8C#cÙ£È"Qް(æñq;Ei6oƒ¦®0z§asçŽG&£¦™ÜlLäÅn^¿¥yçþ«Š*±ÀÄû&6O^˜¨0‰¤€u4M̆xÖÁaî¢ rÔ´ Ãv¥˜¦šÔh`éwŽ×w¾ðüÙõGý…‡Äñ݇_üÕ_ÿuíú䣹£éر¤;+ˆGÙ¬×]êÌ­ëòÛo½ñͯ-_yˆµëû®íâ¥Ë/½ðjÚï/\¹ÿçŸùÐÃO~à«/mþæÕBP™\–wÕlÉ>N^$g×Ñèt[°%ñR8Ìxï|nLëWÚÖÏ_ØòYWôiCOLåéx[57faeö×D8^dep%×ÕDÀ>ñ*§U'™m•¸KÓå)˜“i1Õô7r gPâL‘ F@P‘6ö"˜M1£UÿãàHGbÀl}hs§FŽ–kš«¶ܸ Øã4nùzájo:¾›¨š G7Ì s8Sݵt= Xˆ’Ò*ën‡ýžw;DÄQ—)+R°@̤uúUï™ƨѦSSkP#Ø~Ö lQ5ß–·†—÷úö-½”âM{xžýb @˜42á(lÐŽZûA¦T#æ ¥&TŒ!!„º_Ü3Kf$öN$)¥L)AU#ÜQ³ÌàSU8åbaòâ‰TLeùAE!Ú)øÇ1³tÒ?põ zäQ÷RXjVBYG¥ûÇ¥=SÕ ©À<æûš!aÛØwÙÊ`(bM‰8WcwŸ›¯77÷÷ü¾½½/|þOû¯]}[@¿ö[¿©IÉȆ\އCeKÉÚw`†Qíêã~ôã?ÿßÿwÿíúÈÏ~òÓ7o+)%fNÒ{Òë7ÞzûÝïþÕ·_ïû´]Øë‚0vÎ|c«âÞª¾çàŽí“׃óú¡cA:h×hl‹§Ë]PËÑOtÂUOËÀóÔ8zÞ0Jæ·V9Úíám''$ë,Vai °zRŸ(¤)ÂÈB½xÒ”•{å¬è’ ÚëL ̰ºÕ ÇÀ*g°FüSÛ-d(d Â:µk‚€Sˆ݉HED%‘LÎXs‡8ØH˜EÉÝI…³¢Wî’¤p2µì¶È¨âª‚i™‚Û}¢×,'Ô‹½è²âp>:{ÁûÃýIª!‰$¡$ÌÉ=DWfn±â%W!© ‰þv®Ø™4Þ¥wrRÉÌ)qÊáÚÖ»åÜ´_59ùÍhÆä&ýC}àÁ'ž%øÀÃá;/¿pðГÌl[Rõúäs[„ªÏà°ø…U, ¥‰p)%pá*Š ¡µaœi€sÊ$dfZâGñ8 TÆÝ~õØ“üÿèg¾ñ̶»ò|øÆÍr¸ÞÙÛ;Öî°q8:\o†ã®Ë;‰ÉbOîÚíþÜ'ÿÍgžûÈ—¾òÕïç¯._}ðúÍÃ[׎²¦>ÉùèHÆ#}ç{/É#/î}ðqK@BçgÞ£Hta±ùá.ÆÙÆ«sÇ/õHàÓ˪SõÍÙ¶¬¥†ç=m'†W¨KR²Ê‹ùCÙ2S§”¤Ê,˜) ² tJ]â,Ñк® 5¼·bÁRªB¬âD;J¬ÜgJÍͱíØx@0¥d*Ü eqÇÔg¨ÄµB¨!w“*Eá¶.ŠRUQ;ËÌVU$QqŒ…¬8·J­®U±ë-E"Uñ$¡$J‚¤\ãæ,<„¾1èAܰwMZÜø¬{fúKs¨Ë‚]å8ç†d>O#4Ë÷;òxZÇ‹Ô&©°rvh"MP¦Tï^<–êz! EÕ8.d,"ZŸ{fN3sw#qLðàš¦ š¤¥mm…$)ßÊ BÏ^nÝÙ;¸òÀƒÃÀ©sóð.š£ "°jdJ†›Í Í"ÞRÍbVKf%ìlª›Ç" e,¥H—E³›9e€Ça˜Ú2qß}ß9Ô§žxüêï»}븠üë?üÌG>úÑý‹—Š›uyG$wÅ ˆT$§¤2ŒãŇùø'.¿ôòVÝî î¬toG €°æ´³»ÿ ?ù±—6{HtÙ™™Ç-}ä¬Ó™_'äçíÓ :µnä™þ¬)×X–äñsÔ÷m7°Åc­½ý·ZJhu­³ÄÇrÏ‚½Nö;锄¥86Å@HdJÈBý„?‰“†—uÚd‡…ÑÌ-ТI©$G-.Z'ð†„|´ž‹A`-&—Z.U%Bõ˜KhªëwE+D B²ÈŒïŸ#Z¶ Ãè(FîÄJÂËáÉÜe<¯#ÎM{"ˆ³0¥U“Ï•W‚Ž¥Â©rÒÀÄ.M`åKþ¶¦ÜNÿZ$«Ïú}â0ÖÆ###2 þ]X”âü©zÙim‘ˆº]æ>Ó^Ÿº¤*•õÖp‹äÏ lÝ9ªuûÒ%uo~ø˜@¶ØŠ[ þ+Á«<%T°£é*;êl£e:×-ŸýP!*[ügÕAØB¾È{P«å:æ,¶`vf…Ö¸//B`Õ”X•rµ)F‹Êêf<(sÒˆt÷Ã#Å”æCÔÅ×h—·*Ó µª¬ªœî&ëã|çF"JœÐ]¸üð…+„1'U->"cv¢$’yífÓó.H*îÅ"=ÂÜà^3¸›¡RTrò›4ú˜»@qKGJ-Ð)ÿÎðÛ…ÓÑpûí7Þþò—¿òñã—X+‰KD×›Û£»§œ»®Øp¼>çÑó±“ö;Çw†NóÚï|ÿÅïܼúþg@Æ:üîöïÜæGþ?}åùwîìÜ]ÂÓZN9/&>M¤…å0°á@8Iôœƒºæž“·õD8_Æ© „ÈYÛüPXÃ&Þ†ÊL+ ž̉¨cé”V2Îî§.¥ƒ=XIŸÀ¦`(2Œ¦Â½r$™R(B0¿Û‰ÑÔÉ56¬âh1H’ªÁʪ2ŠyqÖˆ¼mËÞ¦na”™èÌñE«(X¢‰PPŽÊYæÆ¨kØb(Nf(Nî>!ˆ“3ÃÌlb!äkRßÅåѺ$qe€c_ÅBÂSìW¹Á¨Qá&ýòLbAM'e ~@$ªdÆâÆfͽL‚†aö$Òeʉ:Õ¬P2‚wÌ«^úžúÌ]+C™&Ë6ÜCx²UýL¾‰ÙRÔï`{lçV0…Lœ;&oÅ«Gµ‘„¥Ú|A-ÁRÙxz#KDÑ¡ÔÉÇ)‚ óvó¼ÈµhìA®ý¤Á…ä.Æý³Ü7Ë’"½&`µù@sø¶$IÔJÞN´u6 ‘TX¥Lê?Q[ð¶G„QÖ ¸3•¸ˆ½><’"ÌÒ&ÀêÊ…ßGHÊ"Öìmjd(ft1¯:4ѰI*S*g"åžÜ‹ ÌDbD9ưĞT N0w˜,Nšã@QÝ1/Žª³ø8º" °oieF¢~ä{ýNÆõ?wp_ʽi͇ãÛÃ0¬V;ÒÐ#wÖ¢]/vçæÍ>+¿ÿÁzüúñù¿yQ úÔeýçßøÒ÷¾ùíwý—-=Ã⺴pFÓ4VäYhK¨…tG•¸˜™Ô Ûl|¶SšN×õ-ì$žâiq4øB¶ ؤœ:¸P¬W8R¶Þk~Ueguç$¾ÔHH•–WùB]M%Í»î&ì&¸Hñ˜ö²²ìeÝ_ÉnÇ9y'å^ddAêH8A«°^€s& Û/L) &-&–Õ+!ˆÈ‰•VìÊTD6„œ‰g'ip4xH1½þ<%’øy!v"¥À Hd~»Ã½‘»¨’Br‡¹;¨ft;È-¼R‘ ‚Iõ3Uü`Cb‚:‰,kJC…„ÙB̤mfæ”æ9tk®j• b`8f&Nó6Ãë¤ µÉi2w 1yq(â„1®èhQUJ*9qNÜKPà\™s²¾ãN%³ˆ˜HÛ™/Àµ•Є()'bNK®Î -59âCåêa‹ˆ…ÄrvP`³½=›¹F2¸8ã’cCÓú¸»Æÿ‡ðèóÿ«¸n´µRMüŽš¤\…¤µ&D&ñ6h«Ö–h™ ¨DªùMÅð•0o>(BçGsÌɹ dÍìL=Ʋ¾õ¹ùOŸûÐÁÅîω†ñLuÍ[4\Œ™¹”’s®‡œØU`$/,q¬’!ˆî‚v2ÚPy3.*fqŒ ÇãH[#”žy¥}¿¾ukµÓi"?<:d¥ý ûpçάz||œR7Çe4¸Ž£‘‹våp}¸·Ÿá:•ƒƒýw®Ý¾rÿC7Šr18Ó÷¾ûÖŸ}ñµ÷rEé‡Ç>ß è‡ý³Ðþ­ÿi²Dª|û8++mŸ…¨cfF\`ŽP˜ºŠ®:Úß‘ÝÌ»£põ*»¬:Î t,®œw®u…ʃ‘›pœ¾Á*ò¥Éž[eÊ8—„H™Òpmìÿ“ÙO3•csiñ IDATmšÑ;³P˜F0À:§¤J´¾hfÞJ˘õG Ô3%ª*ÕŒåÔ¨²+¸ÁK›ƒ!*Á;ˆp— %LmÝ X“W&DXŽ#>6·ä8Ù±-•Ípì]?™ *•(z#eÊô¤êÛ`v!Ò¬)`bI´–=ÒM'0pnÓmáI͉_”×'¤Æ­¤£ZÄÔÑLª=Õ³h­BÕS[çt¶Ï´^`qkòY+ÁíRcwK›^¸ûÅ)@VDf.[OÀ£0á)¸ºÊŠeï3¼0Ö&}¾]á5#MÄתe mg:9[fØè·oÞîw÷À\ÆQHKSJíÃe4˜u\‡Ý"‚°‹$u7"¤¤fÅSð"3Ì kœþ!âNfĬªb6ÂH!r³Ñ˨©ƒ³p‚[×eÀ‡aí>v}ÏFÇëã LDrÎ;;;D´9:ŽÀ˾KeTÇÐu|ëpc£ïÝ.e¸ví©AT_|þ¥‡¯¾?í>ç{°¢Ë ûd–^Rh9j/Ën»¦ù4aí.œiMÆt2Nû¤Ó9ò­N<'_þü=öü1„ õ€HuÚªp•— ÂLÂÕÕwº×ûÞŠ:­üxã*ïv:¤$,^I Ò(Ç'ÇM¬&ëÈÕ’RÏ,Ö$K9Ö+0‚(רEÝ[þ!FlµŒš„xu\j¢ A"©“S4U)0Ç@â’¨Áú8_ððɆ<LìHž–1W @E76®=jF€X¸Õ<Ö Ó©Íi¨[N,V%"D°ÑFó«¾ÅŒ9“<†JsT@PÅœ,ÆoÂÒâ%eAŸ¤S(™@Ä%v¿]ÑH“!¥zåCLº¶¨#æù§ ‰çƒR&3úÙBnþÓEfGÕ‰µƒÈ‰ê™pÆÝu/B4ñ/1Ágš‚™Éªá\„… †rCµƒ$ GpÈfÑå®ÏçÛ¦îúg’”cƒ«ñH€²^33ó”Ž2Žà¢ü¢5s*Áq,n’“–2˜m˜S)Ä\™wy• œ4“mt÷B¬¹K^8uÝj,£°Õu·•ý½ƒõñ‘ùº.§áèØ ­Kß÷ý*_{éufIšŒ8‘dðÛoß|ü}?õÆî>Øú·Q_c;`Ù.œ.@ß³ÓÄržûß“Ÿý.×v`hb./Yh¥P•ð”ej¨5r4+÷\è¥Sžü)JÛê’˜„ÎQBvŠV»“ÌJlÑñVp¬cªíæÐG®%`µ^©³y…óÈäô!U!æ$Å•1ŠO¢®pucrúº%^©öJ;Š^T«â:ä9s}:ÅÎל[&fg! jB;àˆXï :T™)O">É›áF—Ó/I+Ôš.¨:„y 9`N%ÀmDS>W”…j:<$¦<>ûX"Š0t¯‰9U8'á.Dº9Ñ/³Ö1QëˆÍ¶§ |P7-‹Òyš†2¡Šƒç.o[kP_~ æ¥ÆÁ ~­”p¯‚F,¾[¯£!oóV´À ֞¾˜œ! ⓱á¢pHµOPS|ÒAOVxžßìX’âøþ„BëIJ`S¤dÁbr®¢ JÂ@mˆO“AÒ²e>nj,aææàó0§"“‹Ð¸J·518ïXÙ×a'ãÒCyÇ2QØ «öà‘ØÆ±¨ªH¶2а;'Iņâ#<\{P¬<‘&eÖ>­È`ÜY`eÈX “+e&Ê ÆbÞS1ltœwWæ.J™÷DÇ’:¾@hl†¾¶ãc³”öÃÀG›2î]8(~‡hs|XÖÇÅŒUIH \P~âñí½^.¨ìI³3ñ¶Öß§ÒéD(-B°i+þÄC‘ œ¬÷§³xRŽ1™niˆö-õNõ2(·¶·f¤l©6c•Öl@KXRÆÝNUÇqìH™áꥀYî†.e`!ÞY¯GFÖdIóÀe3 ã8 Ã&ŠÐ‹‡‘n 0‡#õ«qÃ>zãg1ýÿûg)(šët·˜:u½-ÕÕë/ç²€ª«)ªD’”³jÊŒ,è•V™³J{ôE¯ÝšTJªÔ%N‰UXš^syûDôŠ*W7û,f{UúG„µÈ~q«,÷@,M[Ù."œCï€Ã݉«{>ØgÉ»¾àhÀáÚÝÂPÕòr#»½Æ òBëQ‘"Òw´»â^™˜’+óDXZN¥Ú|ƒY+ëjÂs ôM3ý­0ßlKÇ*ÿ5Y~ùMO›JðèA儬æÄUL Ö÷}2ãÓç5>QéUúÄ]â,œªè¨~JS¯3Mðë¦UQâÞbÙf£U5Tµ4ÊI,ÔH°Ä ¯ÂÍ-,*ó$“­ÑîD¡ §íx‘Ha–inæaù¨ÓÓž gé 81º=3Z:„˜DMòÈiùõcAy;Aìš~”r yŸÄ3WDU €¡ø`nS°ƒ¹ƒ½ZÒ«gž/7z¶æGþ|!2—X™dê.eIǼ!xÚ\Ú³+o½~óúôø‡*FîÅÆÜKÀB¦äfv"'.Li,ƒ&%¨¤”S”à@T˜(çNUÿìÏ?óê·¿ûé_ý·.=ü”;YÍ(Ub¦Û×Þùòç>ÿ¡üØ•G)ª rtô ¾ïò®—ÁÖëÝ‹÷­7k&]§,}¿::ÚX•ÒioDÅI)™9wë㵊Ãpxç™4˰#ÿl,ÃX6”,‚*˜øl ñùóý÷·Ý}‡<å˜ÓV²öyLÐ÷N¥?ý€YÀC¼¡Cž•û¬9IfÎlY$ :ö$¤¢µæ¦yÌuVNæÐ¶Ó¤pæÊ{g~¡… !`“«E æ+ÛF„ˆX;up³ (qŽ"ÚCqoÔÄãÉ%+e!Eq¨§&me01Û)d_íQˆ^É\TyýËéÑÌîÄTåùrèÁ¹m;ÙÜ„gŽ ³cÎñZÌ1ÈY‚ýà Á¨c$xÖ¸¤ífwÚNž˜è“[–¦à¯1‰pR锳Ð*INPA’@ÿ`§5®7à‰YzU¸´[Ã+­‚ÑF\­lçøpª Pš 3”"ŠŸšMYÛ çiwÍËÍÒ—’;$¨ƒº–ƲŒ­'eZ¬yiiäùaë5"ò­Nÿ½á`K2×U[×»M Œiµáp"H€28#¦ã2‰^Ñ©íÐ|÷5"ˆƒF ­%jÃ%ÂSÞ3b`I`Ùá´*âP8°“©ß¹²sùq,\óRйï45P!—RTUUT¬$é“fNrx|ë›ßzþÙg~dµêÜY%£u}—²¼üÒóúÿûÛßûÁÑ˯ýýÿü¿Ú»|ê»a\$J”°^ßø'ÿóÿøÕÿû³ßüÀ|â7~û‰g?è®y‘•¯^ÿÿòÿ¼þ»¿óŸü£ý‹‡ã¡ÓŽY7ð!rfërwëøNêHS*‡E˜KSÊ Æ`µ³Ú¼õ–²ºS™•[·n¢änüóËöYºØ*-'ÁÑ ÎjFñž‹¨»‡VÞÃÜ1QTá,Ò%é’$aabQf°€Å&TQ%¼\3ÄåT¡y¾ˆ*ÃÒSÏàsÜlX„ã=õxoÔ¶Œ^Ý­<ƒ+”áâB8;HÈI‰ èuŒ°2¢)ƒgýÏdÕl(Í¥á g2U>5ЋUðâ0÷Û^5¦´Àg.BËpóEÔ¤ÃcLßNÓ¢»XUCÃà4º ‘ÕXuÄ”„÷rž‹Uú&R’¬Ú'I\íÙáË ;Ûô¢Ýc«M`2v8¼B¸.D ›…{ªDnVÕɘHE(!©}€óB?ê[®™Ì°è·<¶GWÏ€K¤EÔ_ ÃÙpæývÂñK‹@˜‰î¹¼–«ÉjZl»ém·hû/õ¼e P¶(3‘OªˆT°jôå;ÂðÀÛ1"ÐŽ„¬Ú¡˜Œ„gÍÃE7nºµ™ƒ[˜2›O¡ñÊjŠ ·ŒÂL–‘Ø¡ê.+íû´òâ©€$8뎄VÍÀ!JbüøŸÿÁÿò/~ÿ÷ÿî/ÿÿè¿üo8¤Í-JÉ5åèÏþøßy퉫ÿÄ<÷ü7¾ðáŸþM](•E™¾òÕ/ýK_µãr|ý7¿ÿ­«]]]¼b22±G3îþúKŸÿ¿ú#>´Ïÿë‡?þ+Ÿ’´"›eÖ¤B¢iµ¿AǬݭÃ[€õ½vyuãÆÑ¥KÇ«ÔÂ’ˆ$­vöŽX‰Dj<$Õ芭‹mÕÅtN‘¾-Y‘Êi¡yÛW3ÜO_xt ³|æÿ>ÛqÂXfÀÂeÒWÐØr2#†Ú‰)«$åà+CXÈU¼ ÿY˜”­©6k™7mÍ@bΑ_-D*K±Æ6Ün¦È䵟ˆ: 8–oðäÛ—‰9yrc¶Yí,x |<àKÞ`߯b1ô³èdm‹‚’ ³Jp¹¹Kܧú< ®q³Ï\nF:ĈÝê>þKŸ~ú£¿„¬bÆ›¯¿òòw¾}ÿêòoþ‡ÿðýýØ›¯¾|ãÚ»/ß±$ÊÃæ/?ÿg²^?ñècÏýäÞ÷ॷÞyõв£tÝ¥®[¥·Þ~û«_ÿâÑíõžöG7î¼õÚO|ଠTÌ»¾[¯×nwg·Ø­Ô­Ü,wÒ¯úqô£;ë”ÃãMqÑWÌs/*²‰´Mÿ[öow«X¹N~˜²?ŠX˜"¯ÄB)¹°4!«"‰$%nÃÒ8^ãrG˜mÜ]B.#¼ÐwOxfϲY®kê%}‹ïñ}-gÒSƒß(Ñ%€Šy1òªx@̬TXëqÉDp÷“(ߦmk¤P§ª’k¾šÞÕwê†.’=¢")l«¤SP¹¶“2ò"À "–³OÁ¸\«as/†qiÙau¨âH ‡9Ç‘¾e¡ìR ÷ãPÕ·L5³ÅaÅt]oCno³½‹Ðêħ µ1û‹Nœ;!óm_^mYš±n2'WA,5\/d‹õÀ[Y. e5Ü£hžê›³ødÒ{NK—JÒÓ)€§…ɧÁË©.Ï)ñuà"U: ,ê€ME¯z)1Zs*ÂY%³Œ"3ƒ!d¨±×j>èÅÛŽ¸`¢f,ñyqUñ¢-1u»7w"ììô]— ÙqJÙ V 5#˜8IJëÏüóÿu}ëÖoþ{¿+yŸ¡I˜Ø_þÁ÷ש»h‡w¾ðÙÏ>óS¿02D»$öú¾‡Ã;ûé_|úc?_:½üàÕ›·ÍG3æa<¾yíõw^yåþýKŸúõßøÙ¿÷É[7ÞzçúM–Âp³„¾ï¿ûÂó¯¿ñÚå½ "i}ûh¯_mևŇõf$¨ª¤®“~÷Ë_ùâ‹ÏûŸú5fYoŽÝ,§nPK"9ëñÈl$ Üm¢Ýz H¼xñmâìpó-Eá63jÚ0˜èlaþ™6à3oÝ32'xáT¸‹}¡šý½„$Üf>A †%–¤È± LT)#ÂRã£yQ0ÍEºÛàSmÂqùaj¤­Τ«Nó±F<>ùຜ¶6lɱªë—Üim(<†ÓÈL)6ÇÁw‚EÎ"àâ-Owœ B½jm:9Á¦°U½¸‚·1bgãE¿__·TèfàwØÁî±ìå…âbJ}¡Êg –Ìmà 6T®Ðy×XRr®éǺ mÁ±©ùà =Ð’&›zµ}*¡B‡Ï±NÄItñ„ÑeU™ŽÌ@=Oã3*c=aáìÓ®RßuýkÂgíæ¦Tø²[ãzgrº'›îÖ¤én·å]nZª!5ÌMÁÂŒKȦ@¤ðx›&Uñ2UaÓì7R™VI=ŒÃO8­O8×çbKÁU\¾\-j['&G‰u®0\`1µèòÊ/|ëëñýÓÃ7ߺ¯?øÄoý®)³ùfstXK«ƒ2Œ¯¾ð}ŽS'nbvôÖ«/ô;?ñ©O±ö¶E»½ z´^—RRJâúú˯ÞÞ<õÄÓ?õËŸ¢n¿ß/MбEDDxóæÛoܼy¼Û]ÜU¹}ý̓ +IéøÐ‹#)oÆÑÝßüÁ ÿÛÿô?dúØsÏ]yô©Az‘ÍÑñ Ͳ·»2²ÃãáðhД†[Xú]É]˜<ˆSóÀá.Ày_=Kà{*kO·wa·èB¶ÿâ¶§cÍ“eeÒ–Â’ÿæ°åĪêI=)T Âª"©Ú•­Zr¡Y’æë¤é؉0ÛEQFgŸPç•®K{æ6àrÎÈ›p·g˜$*ÎÀ­x˜¸K@i&cŽ]ñ뱯¥‰-ÂÒ0„j¸ƒýêä;DØv·èˆ·â¶% °0-æs”ˆãì.D”þõˆDŠ[UâTe{´p§Î bt·d:ZX\«nPY˜|t©B,2kQ#:ªÙ0JÃ@À¹g]UÙ×ñ#©6A¦Ã‡TüóºT¿4âQä¤ÕÌŽ0Lã yðt¥ ûÙ®˜D ›‰º¯ôê€%ðÖgÉs†qmqšïs‚3Ðéêã„ãwkÆÅ1b¯&÷n£œÔ‰Gtñ|TÌ–I Þ”5\ EIbør¡v¢Nœ^;šdµuÐh7•·h²jOŸÜ¼€F¢ˆ•¥+ ¹Œ$;V6 ËÑ·¾øÙËþؽïéÇlܘfU6‡ë£;IS×wžú[ïÞØßÚÑ‹ë;ÇkZ+áÉÇŸ¹põ±¡0yv6e¢Rls\Öb²~ã•dÓ~ø#éb_ÆM‹$1ÖÇ·öÀ‹?øÎÛwÃÑf8ØYmŽooÆ£ ;\àËëÛ¯‰E³|û¯¾jÇëq67YŽŽÊªÛ½½¹ÍÑíÍÚEr×÷]wtxØöù«LR½èälb[xÎýV‡þ ß®ý9NáÖw·€¸ñ¤¥{Nz[,~Ûòæd©ÑW˜²¦ˆX¸j½™(B}4†«²°XMà %•jµ—%T½òjLUq¡EЩI-n˜*{&Ô+d!Ëg–öV9­F£òSØ5ZÂÌ<ÔYt5N“½f¹Ïå:€°‹’(‘dFÊÊ¢Êln<%úÖmf…ĉ…IëmFK ᆲPEî‚0D 6긵a#É59g†1„$?<Ä`óˆ½Dñú¢ŽÒ¦OAsÃâ~æöò˜5š¨w´ÍÕž¤MäæÎ`iüÔ‡b°ÍÛ_TÕìœ2æ'4ƒ „AY˜@®æÚÄX7 Ót Uƒ/N&@ÌÎ*› 'g”ºü&·Í„>&š({^¿LÈ–†ÖhË;fq$šŒèm×°ÕEÌà„ ¿· nnBâþAøsÔ\[‹=i­O­Ødù Ç<õ•¡›Q¨6BÌv:œzºÊ‰N™¶’žhršr3j7앪¨²Û&wÉ\V«Õ7þúÏéöç>ú+²³Çć·n^ûüÔoÿÖŇžXon¥n×%¡”Òw¹ËùˆäÆ­Ûo¼üâ“øP9ºµ¦v«‡Ÿy‚$‰`ÌB¢ÄÉ!)­D°‹>ô#?ÊJãúØJÉ]gB7Þ>ºs+ï=H¯¾òÒ8š¤þðèÈ.RÎ{{û—×8\¯×}¿"‘Íæøå—^¾zõÑÞFw»xi×ËñFq<Üß¹vã›ßøöc>™òàªÂ¢ÅÍ%f 9uDˆTA'¼‡¸sÙžôƒNYÏk|Ç<á“üI–«ˆ0úŒ’j&‰’OÃØ@@>#ZÉÒ¢cCñ"µ [ËN. ‡6ªq=0›p[hk¼ƒ6ç5ƒC¯lí·‘õÓÓÔçŽ7¢òò“ãEŠˆå¤4Óg÷4W‚f—HYœ"ìP\œ n #¹9×Z+1eQ•ÚaŽ˜áÌk6aqjù_4­Ç)Í}Q€ãìØš-K5:‹0ÂK!ˆÍeQÝÏ B¾š‹Ï?ðä vV;Å`q Ê)Ÿò&™¬iæ½A¥çªƒPx_=LY± Ê” ʱPÇóÁn^L[ÏÙ3ÙÚN¤aJDì±Ï$&8TZ 4BâЛx|NûY9´å¨hš%8¥fŠ«§ÿ,-Zjeæû´Ìø¥³’O´ð\•ä-³!iQªûöá õ»Äàp›ð‹€:7DI h’ù✩ñ‰~…Ϥ`æ\M³ªœ»”“c°")÷ã¸þÚç>óÆwþ执žÛ{øýåøöÍË.<ý#?yðØûòxxä¥ CbE×uã8ö¹Ë«Ýõ›o¿üêSú`ÎÞ9§¼ê®¸[×áqݓԥΒ®RÊÂéýÏ=wõɧî܆ù~·Ÿ„•dïâesy套"Lm,åððï;Xí\^õ›ÛG7oÞÌy“ûÝ7Þ~õÆ[—/(uÝêêCSyçÚ[ïè»ÕŸþÉçÿò‹_ÙýDõñ'7ë5Á£1r/kæ5$U¿âÒ§¿¸ªÎÞœ5¾81Ìašµb÷l9ÄRPvOUH£ÐÏ!_-›µ¾$¯IÒNnÄ ¤ïÈ¢1‚°ŠæÈÙMµfªD'›4Í-Õt‘ˆŽ:GŽŽ>ƺ“·®2ìÑ/Kué„hjç­+w®«Ô­™…âi´°jƒ‰]&ñпŠcSx 9r½*•š…ûD@…Àl$ó HðQ±ˆE(¦çæ,ŸÖl§ßµµÍh Ý@¥&±HtiUû±ÅF˜ãDϸ®ø=&Õíùé­ 7ÉPU˜–Þ÷1'œ‡{‚bÿ"Êg2 9˜ŒÿƒFìS„ëËÛ rjÕFæ4˜W:(5g@ÄúTêM«kÿL…Iæs¾š ˜žXÄ÷f+Ë2õBÛÅ]§!Œy³€{­ÌmxMÖ¬ø©xE¦¹™°†,}¼Í ®% ÕÚ,vHì3ôºN…æXâ3Î_4žç«Û· u@™D)‰{—RwóÖÍ»ÔÉ«ßþë_}Ú…ÇÍñÁîÞÕ§žñ|™GÏi<*£¦ÄÃÈÌ—/_nÞÈwŽ`×^yÕÙ¨ë²IßåÕÞŠà¥ÙpÜ¥UÊÊ>Úpl4ŒÜ3éÓÏ>kDÇëµ w]ÞulvV;;{—¿ûn$1°ùz½áÝ} ·¯ßØ]X×_|µÓ®ïv.ìt»{Wûyw30dgçεÛ_ûÒW;#_>xåÕ×®ÝÑŽ’êóáë/x¾Nî·¼¯Ò±ôáKÆY–®%Ùí‰çÄ~8â,Q塞óÎ~Šð4Ÿ­ÒIGäÊ«=Db ƒf)DÅë(…]YɹÅIsÐä1 ™ÏXPoÿçÈô`‰ùÂ4¿n›6³’E«>ådñIlÏi£žX¶±L(Ýv•`FŸ¥nÀ˜à…Æ66×ÂTœ@HL+•UâN+¨²8{U•VQ!b+KN hhÂí‹\°M[Üz®¡1¨O^:±¬¢§µFZÕ¿dPÒ¹Æo: ÕÙ4VN‰“7OÏ Âuš™`2²ÅCµ&,J`—‰ÙU¨ëÐ „ÙÁfn æÇáWuvi3¤u‚×ݯƒJýè`R^&íFÜ'«ëoP¬¬ã?OñÏ4§ :É7F<`Z' >•Õ×®K IDAT>ë+x’±ÕKoV_h“ä„£{Z–·Óœ–-ÚJUÿTT†mÒa¶®˜• DJ¬\S\Ø#zuž‚ôN”Q[¸™S-bäÇòÒ Xc·âÚ0QeI†‘h,ÈëÃw/ìßÿ¾Çw³NõòCî^¸/ÑŽÓ˜;]©@¨ëºû¯ÜÿÖÅk7¯—Ý w®½ñÊ+/ %IÝæÎ»»ýÎ…ƒ}2Zåã2Žet;/âfVŠŽ*xè¡F_ÀšU²•ÑÝÝ\®_{óÆõ› 5¢c´aµ›r¯ 7› µÑV»:nFUΪzÿ#÷Ç›õ›o¼Ñ_zà;ß{ÞÜ»]2{ôá¾ò¥o°tlŽÄÅaF×®¿6¼ùý´³·{ñÑ+ï‡dšîž¾VœµwÃv›Ø²¬ÐrÍ«œˆ˜˜Ï©æ›0Õð F ß*g£ Ó„G\ £djÚAS’xÕ Dº¹¸;×¶ÆLå-J"3¸‚˜É "†°ÌBÄe™Õ)íÂôÂXaÎ5€%®J¶Ö'>UpÁ}ôúr—³¯^7I–§‘´Ô­pÈLªGˆ‚€`OÂ’h7ÚÊØˆ§b4 $ê}–,5!52mqF‡^%ü·^k÷Ó âðF¡jé݃R@1DÄX'¹êöAî4ê@3Ù…±½/™òR˜„¶A ¼°`Ѳá[šc‘§ëg9‡nó¦6ŽD,ªK‰¥æ?‡´Þ•Ð'Þɲ«ÄÄ£ù`§€läe„òVê§f}ãxh‡;@êîAΑåÎØÇá­Áp ¾™{›°!" ÅF ]+“á.-糬© &ÛF”[ÇÕ‰êm9Š!drM»iž·4¡ý¯¢×¥k-p¤jãf)Çô5hmHˆsxö$þÅäTÀÓ*a-áêÀ›Tî2ý\KìIÝwL.âY(£™ã¥¾ýØÕ÷C÷†ãw/ßwñÂýû<ñäfŽŽETV{©ßO¬%“²‡2ã”.§”Yxgw•”^{ã5˜Ã ³\ͽqodDFFdo§™´]Ui«Ü. °ê !°P‰Ä ¿!ê‘WÄ;B ^4R ”Ê*ŒUUnªÒNgF:ÓÎ&ú¸Ý9{ï5烇9çZs­Ýœs#Ó¦8 eÞˆ{Î>{¯5לc|ãkFS„S†C úxx«€_6c²s™ÓbÎ’o3”m'9W\™Iì¤.\Æ«(9))؉ÉE NªÅ9!‡Ã"W«$Yh d µ@ S&Æ·’eYÓé+±?y¸ìí`³;Pµü‹Œ²êAŽ,Ër«j½ lÉe»³ôè˜V%+šÊ¤4(Ô`ÙI äfIÕ(#þDÆj”Ü5+OÍ)#"ÍÎÏRy‡9D©¢æyìIppVá¹·íŽmÙڙǜWVù™5.Òç—N“wy{¥ÍÕ',ÏÇÊ'Í^qGªæš˜Ötµp(`^ žeh° äÄJ&]–wù8†6²lÁ4›ÐVl ‚³:Á)ÃSŒÙU‚ešQt´xMA|ì1M˜²·’/hÙ9Ìrf¶ÕÆòá.Kw"*6ãž»ÆcŠeó³6ŽðªÒÁ6·âFVÓÔè%jNì`dæD œ¥õ%3ºè½Ú•çD߃çzDe“4‘ëÿõ¿üÿÖoþ½O}ùáGïÿpuquuyñø3Ÿ{òì9Y\­.®<†ˆ‚Ìs–žä³ý•‡B'!øºó«Mn^ì^<ó`æ»ä¶7tìd&ЭSLýæB DÔñúá£×S,Ét¿ß‹`ncÜ qûôɺÛ)‰²D ­Ü‹¤~}µROž?{ñì& tA¾ð“Ÿ]­;&úà·;Üìâ“÷ŸoÖ/.öýf½¹¸|°–÷vßÿÎwæÓòàÒ••Òæq÷ʧ_qqïˆ&NqSE^ÌêºDŠª*óÿ8uÏIÇ$¥ÓFC˜'ÿL*yTÌ·nó¢œ@êFƒ-Õ†ÒSÓ9{æÇˆrôsžº|ÇìtiYxyDßrôl.”ÆäÀÜ–Asiq­Ž¦oÖâ VŒYŠlÈÑ5@\]89³röSsró!yŸH XÍ2Äoލ–ÇÈSßbÚo#Ç&»cdÇ­º…g1“¡l.28«>xtgß~Ô0âù —ÅK6îGS“!=¦,Qþ#Ëj=:Jv, B°• yfä\„˜É´<¸ñd7¹ò¸äš?ÇxngÀV¹>{Ò2ü8«W 5-Ð×è˜:=©ðcæ°ŽTìÌ« sÎÜôÙ[û¤y©5ûž°!ªÙ{ùPå²G®úÁža¾ÜLœ o4äÖPH»ÌÁ˜soê0âäf9¸9'ÁÕùÍt:?¥\¤ãm毾þú³›èWºÃãO½~yq)›k‰{õ¡»4a9Kr“~5ì÷àýª¿~py}½±xsµît¿»yúìñ[oìºxðPV«¤ƒ¥È̪`l.¯ iÏI¥Sb1rò® Nd—×]¿¾Ü\ã6>N´ÞtfvÍôäD!H˜BwóÁÓ0àúâò§æ+Ÿûò[ªQRüà½ï¯×ï½ÿÔ£n>êd³Y_n61í5í†ÛÐGƒFÍq¶€á"8`“êÑ ÐÑýnù ÚB0H §³c¬o^ðˆÃÄáܯ©*JæJ äqs¯TI0sW²á˜ˆ(ð8ºÈekV:y²‰Ú p1@ñɦq$ T1×Ô²ølCožç ¨å’ͬcúR;0_[ø)nSõO/íì(,Z.8n¶ø!v0±sv[Îß“”`6¥â­Ï‘(d0‚Z&W×é·°»«”rŠWA€ÍG3zP6 ÍšMÏôk›h*hZ‰¶k´­N~\…ÊíÆíÇÕ¬˜,`a¦]¨€·¯´˜ëä 'ÏŠ³ ¹<•,š7cµbø@ŠÿO"¶JEtL©…¹ Îì`¦’ÍΜÃ}jæªÀÞ‹z8[Ì•5ŸòÉ |” ­M®Vø¬¨AèS ̸Üýà©U+†³UeîhÌ9 u|þ¤po™›ò;¨9"<ÓjB&ÿŸÿÜW Û~så舶qØqÒnµQ‡dF03²ŒÛz½~ðàJÓNÒð`Õ=¿yñÞ÷ß}ý ?½êýâõÏðjíª!pJ©“e^6 Ž×›Çëºp è¦Û€5Æíºß\ôk F÷›¿ñw~ò+_ýôg?; »g~dHˆÈºõ¦_uÌá£wÞùü[Ÿù›¿ô˯¿ñªÑ‹aˆéæÙG?ÙE½½½!¦¾ë׫• ÙGôüÉÓõf$D@~êÙ•K7ŽS‹Üëµñ^³Ý|Î?(hFYR“ÁП\of¿ó¸ŽÆÓþŒ£ŽA99N+zÎî\F¨¹äŸ¶¦Rû[©ò‚rsõ%.<¦é  <3.à »hA}v"§ÒªZ¥ñøq¥—:O(e}ë$çc€OÉmÙŒ‚ˆ='ÕÔ=0YŽ!bÃ¥ìnœ©kÆÅ— ‹óH«Bxà:ƒ Z˶Ñ<ȹùÌ5nTÀPm€¢ßxQŠ"*ç5æ’zµaRt£‘ÄH® iGU±æX 3Šï4 |HšÌ!å úl¦˜ÅÁìN®¦JìÎN7”Äœ2/BµÍÈ‚053Ï©ˆ3kAL´EoÝ5Zw­C‹ppTT¸Ï]DŸ-íá²_3-Ò/tYAÖ¤­ÌxÉ eID¶Èƒ!{JR(öu£w ì^\ŸÙ&+Œ0Ö!@qæÿ±âŸáY(7šdTn »;LQ‡n6D͵ªP#9KŽ%¦.A÷ì}F³t^!Ï©‹Ë-¢qa>U/õIeÖÖÕ…ÖOàQypз®#’ñ ²Rþ›ÃœG^rëP9Íý 8¹ˆŽO (‘Å}úô§¿ôλ¾ÿÁ‡?õZ/p0K„~µÑUCåüu2U½¸¸"ÂÕåã¯ýÒ¯¾õæãM˜øêÕ7“½â¶c€]5‰™ ³:°¨9³›Å”¹2\ØÓ>®W—n´ÝÝ~ð­o>:üþ?ý'Ï^Ü8‡}2»¾~õ?ûÏÿþ«o}š¨¿ºx´î;³áÙó'iµÂíîýŸ˜Û[ßÝì.V—«õšWk—Õ?ú‡¿óœLiµ Ò‘ï‡ú0t­üêPW1Bm ÿ™ãc$?dmÉ–¸§]•”6q2€ѤLeD¦ ¸º*©@³Ùx†ƒÈ;F1YdJ»#©3*¹íÄÈ›fÅæ >Æ Eõ#K•Û6›[—ùà àð‘¼?õe>ýɽÌbËŸý\b«2H€Ñ±qº¤œ)!Q_ GUsOêàÑó æš—^³…¤„ãû‰™‘‘e!ï¢ôÄnögžÂh¨u£h Y®,ƒû¯¨c}èüj€Š­ˆnª…£¤äp‚ºKÃv ÌÌYk†‡Ê°L¨4rb~6€K1DÆÈóÏ#]265›`¶¥ÌfÅ+Ô1iÙlzîf$yð³¿}…7‘7`æ€ì™ç"A¨tLÌ^<ª8s9ø2¹Ö>\'EY Ìú*b|©sàó‰ Zü³kæ'©Oõl4&$P}¤:(ž>U4ˆY à\µZf¶!¼qa¿ù+_¸~°Ž: :@B/«õå•‘CýÅóæº^_ÈêÂ)çêé$£ ûáúÁµKè6×ë«G—EÝ3wìBî¡[å·éŽBJ)çBhr °yJóÙ⮦ÄÂæ•o}ãë¯^\ý{ÿáðæ›Ÿ×ÛARêè‚m÷rscÿÊßú*‡.EMÑáñâö_ÿúp»ûôkŸ}û[Ñ…þâêÁúútýÛß|{wë½Èõõfu±¹M—OìµH'sœV]M³L®SCu?6w9òüüñH4é ï ù‹Ã¦õS@­¼¸¦2ÑHLt'­QªcaʹÒrFyÔ« ÔaU&”Swçç“5 /¦ìŽ©fµðϨ%¤@ ™ŸÇ¤°²82«ðh«,/g²ežDñ¹†;LɈ‹«ø¦äý? u³_5/®yJfc3ËôÑ*Ór3dth©Z:5W÷˜1Œ1Ý œÀgñ²óͧ]EŒ1—Zï‚Nç‚i,ó×_.?†ÔÁél0ÿÙÖã ¤$e³$‡)±:’Q*÷æÅÔ(©—?Ëb.µ%ªý›A¢yVGu5J36â’ýål†Dœ/`_çí3Æy<“ É)‡\%£d”zìŸpú<mü‰)—E¨Z'ÏÌJ(M©+°-k &©yëU[>ábäå/}Š¿(d ä×ä•f­ «Mæ? nø¤QhþwD̦‰ÎD“ÇagÆ««Í£O=xòäYŒ[[­A®ªžìêú¹v]0'wUò‡ApWõõ¦ôðAØ\ CÜ̆ÈèÜ äqÈ·Û½&“»«jv¯658˜¤ 3íöFî”A a¹H—W¿ò[¿õó¿øËôÿüþýÑ?ûþ;ïÝÜï½÷ƒÿóÿ_ÿßp°š÷Ñöˆ-}æõO=¼|ð»ÿðv··ëõeÝæâÊœ¶·{0¯º~µê‰dˆÅ`Ì¡™ð‡Zib¤¾ßGØ4óçö¸³-f/ù56ÞЛKrçØG–,,Ó TÄDAŠ©ƒ³8úvÝ.¹¬ r!Æä”Ù5 ±cÕ‰¼XmÛÔlfV9Î9˜á0ÒfHéãÍ0whn®S P+€Èhsc‡W«’ËkETa˜‚ÍŠñr!5™»3£Ì”Mã ”œ32Álæ©8€Ö ­sš×Ÿ8_÷œs‰ì,A…Ra²q_û¯Ì… ]#á«Àêe¿œŽ˜. W'W–y7T§Y¡ÊìîÉœJ¤9¬.g*a¡pSw©.ÙþÚÜU-iÎŒÍþzÄ1çÄ‚*`õ)ÍœL-™ç¡oæCfyX™‰Žˆì‘&Q0š@üÃm FV¸ÑeZÃ>ó¢º"Y³40ˆyΉE]%¾Ønn Š¿¸VÈŸˆ„Šw.’+Zê,Zg%©ÝŸ¡ÁýN°' 7 %9sÎ(h ÷KÃn&”D~øþG—o<îÂê¢Ûì"ž=ÿpsÑI¸àÐßd‘ fE"]¾%\=zlêFdºctäSO¤$SÌ9@GÌãÂÉ4À£9¼ï¥tˆ;æNú•úàÊ Ø­×möú"<îéïþÖßø;ÿêŸþñ¿ø“?üç?üÞ‡÷>N7{™Æ¸: ",ýF©{üÚ굯³©ïD=Û³gOÕbè6]Ø ÛîÓ~§+ €3sƒøÚ_ ´6çµ#¸…Ö¤b»ÖðúG³³Éÿ>> ‡F„ b ÏJÑv4f"d/bdÇ#2£¨Î  Þ1&m|@KÊ¡:ƒ@"pÎá+)ùÐVÝåªÎ+âú ˜¨1# p¡vº“+>Ï­::.¬ÜCSϬ `êL 5ñj©øó•ÃÓh«åiY³@Çz¿“ì/›õkù°Ìu 9—#ÅçÃZ¤|^´Ð^MzÃ;J™£Ö°Ù)\û öœÊ+¢ä¾üõ?}ç§îÓ›ÍÕöfœ4¹¹„ æÄ ”TD¨ê¨iP5q÷ý~/"Õ2«Ÿ@f‰Õ¨.!€<%£î€%MˆD8Hï N˜’¬»ã’“Ão‰ø­/ùϾµ½yH(Hg´œ@›ÍŠ Ã®/Ĥ_ýÅŸÿÖÛߢ­6Ôu~sskÚ¯Vf ýêÉ“mÔ޺к”,ÆQÛaúÿîk 7=ó6COÌ-ˆ5«ZH¡ ¦P°h¦–x&-a2ä¦ðb¸;»gÆš;ï(cÍ›H6¢˜D0圻™«×áøu®?;FBžÓóü°äº”MYç5þKT­™\£ÈÈ žÕäÝ’ª—\&0´DÎà°`αyF-2@²Wø½ZÆqà4åxî[þ·„4ToùO¼Pm¤ß/&ÌÖ¸9aZiFÎ…ˆœ~˜™'#¶‘,é^s¢Vô¯!É•3ƒÇݬBßÕÒgQrSZ\×øøšo¿B›ß„9“z$SS¥ŽJ“efmUç©{æøQ`A³ê{•½S«½j‹¾T®hî¨5²"¼-òŠËÚ”ÒA¸Ï›ÌÙ¯§RnE“ãùV¾õçÏn?Þ^¼Ò‡ÍÚ(½òèÕ°Z›S´˜ã‹ò¾BÈ¿+_÷aØç„3ãwsŠphJ,%_{·ßBxHº¹¥1‘Y¤´g&5ƒ³»»&£Ý]Žúq Ã0ˆ$'Jn¼êVre7ÛQã~·,1íw»­ðj¿½ýøùÓ«WüÜWæ»oÿ`µê.®ºÐAdÅ¡'&u†.ùuÊná4™èïÜéwvfëG½ED!8%ßkÉ|‡Š¿…¼ÇÎ~\TÀt2!v"­Õ³™G2!Ɉh(®Žä 8A©Êi”¹ñXfä?Tê cÚJàJSCÀ• —…Fã‡*¾)mÉRIZ&G6æKc¦#£³œœ©ªyZxÄ[“øœÞ3™å¸D&f†8yÔl_<¥/€'ÛÀŒK09sÚ™º;p4]â袚qqŸMŸÜé¸Zp!0øDÐââ­¢‘.…Hñ¯Î’%x¥Õ\‡Wß½2Þ@®–á )yåyBÊ™V~ÏDfe6ÍöÔeÕ‘­R¥¿Å»÷ħO²pŸCYŠÛrQ—úäpÎö†j[gµ Êý&ÉHòÂ¥›šõQuÅhÈ ”-MhÔ·UKF+¦Ç]ÞýaÂ镜` äáé ¶öÊ—{IÛÂ¥¹m‡]²Ô1 Ì¢šÜ=tÁêW¦¤)Vª){KCÜ)ªF³”‰@•¯eAÄTÍœj&ÂEE{5%–>_˜õl¦ÃºnånÃöˆ5ÑIݶû<±°šîo¶··7ARàõÅf-½öéW¿ûíï]^\íks·ßùÎGH··»íŽR¿ñùòOãSÉ?çkó£ŽÍ ï¥cÝï™WÚ¾Ær—<=Ú–"ö„gKvWcÍîf&Ôe—òìm˜7Íò3åóÌQf÷bOî0©Ð+3)çN;Ÿ>”Oj$N‡Ü¸ŒÔ’Êý¬]ؘ]³0Ѫ€¾ç„KÔÙsÁôá³0ˆ\˜¢YL™X5S/·µ¼²ó¤°¸'vßw0s—Šˆè^ö #S{,ýj£k5α¹;\²Âˆ3'>YMG«e1“Iö”Í\X£F"á þ»gô©èP8Ë9l2鬿*Y*œuh°; ÂL³¾¬ÇgY¨Ù]Eµà ƒµ5~0cf%'7B®˜Œ G¢”AN™*?n­ÿC£Æd¢âêSŠfNåtŒeÑïÖ<½RÈéAtx«¶gϨ4ŒH2a‰r¬Fa†Š‹ñ¶[ÛWî­Õ+áùM}òdEüùŸüù÷]’BV&³pÔä®Ì26KYª ò>ôÌ9Ô³CS‚%]¯V+[ÝžõÙfÙÅ88‰»1yžˆ¸C&¶9;EÝ TC(t¯póâ,ìi`‘8àââzØÄ) é£gÏ´ë^ùìßøã¯«¿ýåºï÷n MÏoÜ.µ»`·ÄsÂ(Yòð8®@ÒŒ‘ì‡mvÐbt£}Ü3ó£«ÕjPÿÊW~bƒÕ7ÿüÏ$\¬×Ÿ îšt·OI.7.²˜ÔPß“ÕÐ9|9°õèQñRÝÀ}ÚÙ3}ɱ¨ú¼ŽKõÙ~¯:‰1{"ˆç O‘GûØš¶.<œ™ÜùUQ2† ¤šÂÜN¹PÓ­}v¼.›Ü©*¾ Æ£{œÖD sèâ>õñ%3sXY h5Ï …ɲʉÔK;žãÔÍ¡¦f®Ùð9gÍ3“s.÷+>¯ Ìï$õºýÿøkôŸ:à­—þ® IDAT`dy(-DùÞ©Þ-ß`9Íç Ölnç㼿®ÿ¼í.Íàî9”9J¿-þó} †È9Ì 3ĶX3V} U±x>’¬Ä#äÅׯ ­@røP­‡>íuíyãov0o3?ÛÑ?ù³÷ù‡Ú߯_øÌçÿõã·Ä,åar`X˜Eˆ`Þ±8©ÅÈ”baê V¦Q­&gHpP`Q37£$NàÀs#‘^UE„‰,ÅÌâ`æ Y`B!ÛaP™‘ª›ñ0ì ¾^÷PÛmwëÕÚºnõäÉÇÒuļ†u¿Úíö_}nøü»I·-#uà:ršzCˤìêÖ8ä— iÖ,•Šz¤Ó¦NΆŒ»Äcv6dŽ‚Ê4µ­r[ †SwgX1)ʧ›vY¨s*ªÍ1ž5”N°D0‹}÷CC×ú€•ÙrV7ÁÓêÙÒ„œœÙ:±\_\¬ß|#üì¿ö5–½Gs3æ@$jq—RßwÉ’9@,¡Weup–’¥éfÕ_á© Ä!¾×½Z sÐ)¢»›†UwežÆÌ)%"ÀBbÖt(“‚=œ!Vg^)»»öá"îyvf{FÏ"Ýj³Û ŠízÓo>ܸÛïw»mè.6—áÕ׿óÎ…p·‰«&×LÌæ`6”œeŒ#Džfïæõ|÷QM•=Ý‘¢š¢Y––Í‹WŸŽ XSïI ù¿™-í‹æÝ\Y…‚Û ¨<]àI`ÎÊsuÏ¡äN¤”’Ií^y2±Ì`c÷Ÿ[>5X‚5³XwføBå$\Cq½£=*9qöFž¿•UZ§ˆ«q7Ùë_‹Ñ…äð–‚F9œ)s3(U4~• šw]Î*VÍ:A‰‚ñ,˜+|ü¤žLÊTYº\´ ¹›é!§™LΫƒ¤g„ŠfNn¼˜8£Šñ¤lkØkÅrŒ %çŽ>à¤|&ô4cÝà#r–׌¦ØC÷üUb :9ÿ·xÇÉcÊAŠ‘I_ܱ*Õx² äz¸˜{jmê/èäæ®I€údF"yf6z^:ÍñT¯a˜rä#s¾x…sW˧cžO/IšIÏAÙŒ¯åAxqö f꘾ø¥/|êÍ×USRK¦0é;“fK,"¶qlSäÌ¼ß Œ¾™Àd|åÉóç1îY„Yöûèænt»ýª#x'ScëF~èY¨}(ÈÅaU·À¤½zæÜ¹bggöýú ;R«2í>Ÿ©^̧Ô[ÀÂÈÂcõ ©ß™O?ù;f6’ÂÉÙ@Vv^@]aÈ £pæ°õÂ!Y—îŸ[ž’yµt© +{bë±+fg§"ÍžJjž,kž'ymñ".®‘6…jç3ƒ8©+e%8!9R—•ápî-’Ñ,‚Û—nêuø=‰•giynEŽhtßQ_A4š$5rs&ÇÖÑ~2ÎÛÔÖÜcæšwΣ?ì•gÌÌ{°õßZkl'?ç°qpÏÆßÏÆqTÎ&Nð±Æ; ¾ÈcŠäl®Ì`áÑA»z»µ“ºé¤Í¾Kå®Nq|ò_…ÅoòÃñÔåó†s¦î®ZYÆÃ Ó¤xyU´ëØ6/KÉö¤bÌNF=uŸëѯ„&#”³­¨0BµõèᛋޑÛjÏ"ÿt£ÅÌ]„Ed +_”@ŒÀ ¢˜!{ÕdÍc Ò‰ZT€œ¼D]Xçx–ÌôA¿Z »["#b5M‘‚9³¸cp LtJ‰ÜIÁdj¦ÑÌw»DdCR'cÆÅæ&ì¶ûm{»cÈzHD-&M$ÁD‰‘@«&ë/W¾M¡NŸ>Ý)T†n;}™ÎLöfËÙÂÞ£¹» 8ïÔNÅÄ« ]Õjؘ¬7fÉh ŒUàU@¸ LÂÙ^ÙOpˆ™Å ¥9{ĸ›9jÒaæÀÜÅáyü[-Ó­)KÍM½˜q +Ùè›6'ÍÉõZ,w)j>úæzAüáàPª;ÿdÒ›K!~Š¿ql•rAeüþmÄñÚ⯬Ôuû)~³{«#’(Þ¤f>¬µ¸ãåYÔR$–-ÙÁS4‹˜M¤Æ0d7D6R4VS§Óþ8›×÷mÃb@š—FIÄ,²ÑdÆæz‘ÉPuüEU`™ÔìïÛ^b (0•gÙ‰@B©ƒoÖ½™¸œÀÂuBJîÄ•÷ùõ4*SGl$íDØ)ªå¢¾c^ç,ËLèÊAjÎæÌ†ª™¹ùÎÔ\YÍ¥ïÜŒyoˆ,AX…4—39 œ’Ýu—ÌŒÄæ^÷ÏÅI‰Ì™…³+ÅTÍÈÒ8¦ÊÛºO±ThB/ V§Î¢~%ëõŠœˆÄ9Y0%xÈÊAgÌ1F€H6ˆà®ëÊ™DÁÉî:¨fB—Kƒ PKeÊmÄ@ž¥’jòÚ• ¨¬É‚j!Bìv»œw†p§)Á¹¦ÌPŠÆÒ9¥«ëë›Ý ê1F8í‡}ßõª 0¤§øüßþ³~ñ…»{åÝj¬_Î#'D…"lȾðúþ×¾öÙ¯ëÅó=)yÙ8Ûˆ°Ó>B‡¡=‹Ò/ÛÉœÚM&D~^rž,dfÙhà3iÒ” &F¬*ò­ÓšGÒÛY\µBƒ‘¹'+šA! BÁ ™ˆc”Å»IH­$ÄR±Â‡ºf0')4_c¯™\°cŠ ¨ï'÷­í‘ÌêÑjR‘Ÿ KUŸë$%c´„ÈOIGmY—öcî±]wÂÑg,¤Î#9À‘-þÌîêõ1Š«Kg09j¤›åG¾ëc¢Á2XËỲ:iu"7Ëð 2>Îáž°×QŒjaÛ}/¾T=ˆ‹4;r²íbàRûÿ’©Ø÷š‘vx¥Ú€$Ýn£!Œ&FéÌ/oÂbýpuu ŽL¢ìÉØ©w A:*©p…:F¤1Kf‘Hfõ¹Q±v)%bÍL 7ˆt„˜9d1F¥”„×  $ 9ÌE‚vH®ãŠ3¥ûz½Þno$¬Ì³~ +§• f¦ªCÒ~%q¿ßï‡÷ªºî×/n"Xòr¥=É6y|òaº½zò©W‚¢ãŒ.Ügäž->˜ˆÙ;µ5ˆ0QÇݚ܂D 71íC¦YÕ ÌlÈÍ} @I“©@]×k"‚q¿Z­2 ˆƒcڋЊ@Bzí/YâªiÐMxÓMJûí6HºÎ „Ýzµyþü˜öûýÍvëà Üuãín¯7·ÉÌdì”"I׿þf’GÙ°ÜÊÌdaª•s3§Û!Ô}ª¾ö3»ÝÍþ{ï^ôb¯t„ÛÛÇbûÕnÐd¦êˆÞ't‘(J„“ “P.”²3À‘ÏÚÔ£©³kûI½ñoOFÏóú 9eYoqhD Óê›z 0H\ó:„SòrYmt)Ÿ"ÛûX&öXá ´ú·‰ý]~…RüLé±YFv8q%0©P>qе”ÉùÅ=ã¸p°A°à齩w!'þ¶žàt‚FwσâyÁXÞ›5Ú3_ì¨çÏh Ñl«Çü¬æ9e¹§dÔ¬ˆ<ï<†Â´3äöÊñ5ui;Î@{÷¼è öóŒ§Ù<}þtgÃ:ªx|,?—‘ânK6Ty$ÝJŠŠÄ®Ž¸òYêì$™1…Úºû)‹Zl6 Au¢ÀÞ R±_m„;wf뺵jt#î;åÈzóüéíåã×XÖÙ#Ú=Û®˜j Ì@æÑ5:A„E:;,¦”'ªFÄÂ; û„;s0uoo?þßþçÿNtÿæg¾ð ûß$2ó:"ï4¦¸OAVqˆ!I)õ}ïŒÛÛ[ ‡÷[ApMLnnÙ“7&}X»ÓÜ©ôÕÊÒLÒ›¯¾òÄxûøöõpû«¿ø©¯|ÿo|î;?±}cˆë]ü &¹Uyo»zwwyã•”"œÝýýþä¼£ ò)Äp÷v›aò¸£^1 æÆÖ9i1 «cÜbT±”4U{SOÕ98R`Ì㛌æÜæ%35é¨ÖežÑºÊÐ8Å5 é³(ÿ!§JɃ¿Å!”±ÜCîzGkó»gÆE4陯 Ú—ÅF¦ì=ªvŒz7$EÔjîçRb?ÿ³•;‡ b9¾cxrWÊÇ}FyGÛÀö]¶„ÔꦘñJn&´ÖQ4¦†3‚Ç,Œ¸ZLfC‚çq*O¹C'¼o<ÆX›H#œ”Ë–ŒX¸3º tÌôüãïþWÿÅòÑw?üûÿåsõð5`0‹`"RÀû>¤¤D¤6yà•Yò r£/Sµ B3ëºÃf¡ÐñGüðúïÿÛn·ÿ÷ÿÞüàá«?yOLMu9ÔÜÕD„³û¨Èfsy³È»8hŠ)F¹‚zoS‹Ú Xs–Â0A‡ö4òÿø»·]Ûõæf·?÷Öó_ÿù·ßûèFõ1­Þ½~ðø¿ð‡yñôÏl¿çäp^.ßådøÞ€UÖ’N¶§3Sd?1{8„BT<‹:ž’RG’Œ¡ð…Šœ½g0BQc•Áîô¦RÜ皬NM˜]™C,˜£EÄØ ¡x†Õ›æ[ $b¡‚?Q·ÍÁ}¬ŽJ1Za Ï™‘S¾A < Ì h±w-f¤ÞdÉŸc~;?Á´éÔ.|ô¨[,Ýs/uÀ‚S±‹õ{ -(Ø1ÕpÅó:q¶›;7þ=˜ MÓˆaö“ÛÑXMÐLûïím\³àYò ÔÎp·¢äÏ ÄÆFªèífwéÀ± ñ8$U…935v#0Kv{ËЮ„âvÿ÷ñ÷Þõ}ñ33.@ܘ·‘DÀXkr– JîB l¦9ZH8$K 3d½^ˆ:lï>}öþÇþ ]ý­ßøw ª{bBOî`ÑdžÍæÔÈ9Æt{»£¬%Žff»ýöòêâé‹­#‰šf¹èóÜi—‰¹=KÞCÅ"ÀCçëËíƒ'þpˆÏÜo6=\»í–ºÍç¾ùÎú÷ÿÅíoä…_ ’qé¼;‰ó'Ui.}ӎѽé<¼0¯¯"²½`m\ë;ä $!è1Nµîv“Í62jÔ&¶” b¹i³¼ÚOŒÈnåæÓ(˜)`æòíÚõ.Ša£¿ÍæÒŠC⬟bì,.àë2:âÖüåwÞˆ5ê$f5ΤS‰ç› ,`±“žcÐÝy×GÞ‰Oö@>3H¦…ÌâP¼<ZÏ,õÔmPÜòø:ô5m_ê>–ýù¡ðvH3¿õÅnöƨ ›µ>îà^ÍS«\¢-ÆURËšˆöéÈÚA8 (˜‘$IBl•;Œ|!•2˜'*ÖAü{ùÍ‹ð@ßüð[zùÚkûa/ùw…Ü;hÖ;36D0lÌÒuÌ♑ˆÄ¤L¬™Ù‹Iz÷ý^ßþúôÄ_zóÕ‡ ˆÂâ¦ðÔ¯ºíö¦[Év¸¡è®„aHIÓj"Äèªa7Dédx±c–äƒùŠ…)¥sÈ€ª8êIPof´eE†£ƒÛ :°©vô'«þ'o\_]õןú½?þôW>¸í÷‰‰£:è´Â'¼;»Õf¡>²ýÄ<`>5ðÙ‚¬ÓÞÆó\3 £Õo¯ˆe5'÷všÑº™`f¨À¹Rcð<èÚ÷†ü0] ?Å"Ç8÷ò¬þ=˜î·|Èó8ÁjhN;i75_”ù-(~–y´ÊžŸîåx;´>¦Þj‘FoFw3}ÉÜÁé{úÉKzøÑŽ’kª-èbãõ—Ml çœ{ê>Y—tO¼¬ˆp/p6i³nùÄ-oÓˆrféĬjÍŽÈ9gô}¿‘>G¶z5O5§ììh–•ùž$ûÁwÞÞ>{ÿ‹o^Sü˜™WýÊ-ZòÖ y4»à1.V£¹£ë:U%¢ エª©g7±~µ±>×7^]ýÔ—û÷¿ýöµß^™ ë ìÓ­SL¶ïz2iØm‡ÛÛÛ~ݱ”¤Î¤ñòâêÅvkNf t,ODÖ±%¾oöo9´ßï.åò³øï}¸ß„›xù|¿1„äjp☛?ƯE—}ä9ÓÇûðî¹ÚØßŸE!êòù}“kïù4½ìCzjï>óPÿX~õý¾V^°Ó®òà9»ÎlÁ÷y‡GwÔSœæ—ÿȇËò¥vh]GN݉åøû(ÿùñKü$g§ÀÁr’s[‘‹ZÛaŸáù¬Ïa”í„°Z­ ÒuLnji2Ü 7KîDH‰p¨Œ\l.ž=}qób—íw5Y^¢ªÚu»K7‹QYœœb¼e‘€u×uIfVUwí:Ùï÷¹Çû]ï~´ûÎw?¸}þLX˜9„ø¢1aj1Æ««+J»ç1¦ívŸ©bš|Õ¯Éw !O€‚Q'S"ØK€ñ„ËÃË ôÂìÝÛõÖƒBˆÉr” UÆqn¼ÿ´éLepç·ù£Ä4 î#Dj”óð6¤{¶ŒÇpSŠ»Xõ 8¶aMžgr ?4»ãÜõ ǹ8ô•|ù¹ÃÄ“ÓëÐç[¦ÕîtÔG¡ržÏƤ,Ÿ¤ó%þŽUu3 Øíw"ççÈË—8¼ï»Õ¶ ·{Ô©9û‡g6æÓG;δ9³ðøÀ¥ùüÆØAÞýâÇ.ûK–ã  ]~8Zxñ_ä"gõãvNgšå¥ÝÿÔ­û‚¶p «=ö+NâB3íæÐÛ¨m™õãðÌÅ@iºÙä¬Ä,«°¾òèÚüæ·¿ñè3_VÀœÌ]OR¸¹™™…à@b¾$¸%_]ÁÖ—9Û&ƸcÎÎ(ŸÑŠß6ÚV~QôÍçsVÃY}¾—šì¨—Ãay;Ú·^q91˜¨ÆËpõHÈ%Áé 5¾|6â¦qî”AÔ™”¿Z°eÅã]íøŸÍÄ_›¾ÍÕ3ÛÅÈ(7V£J³(7÷SroYv¾;åã ¼jfÇìNÎÕ|標.ô[ë‚ÅŸÿ:¿ÐÄ!{xvK÷£µ €u`x|úá»/ŒìZ”S xAcÇÜEÝuTv]×uUÑP¾Ú LÉ3 Ã>ç°÷Ý*HÏ,TÜÞ5ûbH&ùö}éÈ‚F±$"»õ¡KÃPŒM- ì&Ìëõ&‡Ëgòååf³Ù »áý÷Þ5Ùát_ˆ³E áÈ;ÄÜv—‘â 7!¥/±H^êžæ¯—Z /ÿ#ŸpÑÞóCqóuGµ‹—F‡ïÿÇ•|ê•Ïø÷ìêW:<3cy;Ž^·±C‡ßqËã|_pƉŒ¹’7¦vê\i{˜=‰ÓKñÎeðW´%ž¿Já|!߸l:N£™~¶'¸„ï(&{ׯ —uw3œ¸Ê'}eG”«*WŸùÒÏX î"Å šEË0wðx賆!¹ÕŒ©|ú0çÜpÕRÑ3³™9»™iu(²â$–¡ü§ìª]è i‚ùêêAßﺚ,QoáêFd¾]N®öûUßGMû”D‚i¢.¬7òäÙ- î¾»yÞ ö꜃w¨döasåÆC´Å݉…ü’éÓQøøÃþ1§_sïÜK¬áýª‰\ò=<úæ\66¬ŒòöÃJík'ÖùIôýç¹°˜M_Ðó± Ö^¨6÷°¤>•ÜqòÞQ0ý<Ü4*jz„«mÂá‹,ǧDR³uÇž¦MþYüÔy;Šc8Ã$8¶öp¨68ÒýàGšK-†²‹æf1io{µód‡Ü'µk1eºë”hŠúë.Ø´zíøÆr?ÚÑñ :øðìí?ùN·nêî)¥ñˆ1ŽŽ4nfšÜu·»CL‘6›92°dz˜©&S9s6…dMÉTa³ŒA…À))sçáˆpéTSöëRÕ ½{"ò¾_:Q‹ê[†»šÆ4쇫։qˆiÈú2U‹ipOW×—îÞu݃ךÜxaüÐŽÆî¼Qî½<ûÕ_òæíKŸºîÞæòÓ9÷½ø«]KíŠÊ¥ÛeAÞù«ôïÓFPSžÿH•ãKÜ‚—¿°?–×ñÓòb$òãú˜ÌÓ?ÿƒ8‡ã—Âb±kÿÕm€?zӤ𠌙m ŽÅãØ,%óÒ=RÐG@õ˜ËŒ§“™µÉ‹ÈŽ{îL(ÒËFph$™²IÉ‘õ8áXš£à°œ m’¢ÇIßxÕºÐ'Kž¡ª8€]óœ·M˜aG”ó’ÐUÄÍ+`¦ÓTŠ&[âhß°XmÕø4åÕòeV¯Íµ¬f–ÁŒúÛíØfºdx´Ó¿öÑhÇx˜ (x^,{3£}%Ñt@§$]EfïcÝ<Ó4b?ˆjŸÚÆQÃ;ŠÃóy‰³˜˜½šëà éç0L¢Á¯æªÒñꘂ٠5­] ˜n´;lœÙçКÖ&iÖXµ ¯Væh Ov±#BÐvyå·Äß;‰³ù"´'S~Íð/gpG°ò=ìXXÉ`šûýWÇq2e ¿ÁXBPU/”òœ_iDžê±u÷‚-RÚ‘Åò¼˜™9‰doR3K‰ (w¸CÕr|æ~»w÷:äx‡*KpÃw¿û—A:féWkwÞǽR‚t} ¦Æ}H noo7›+'brU‚sÇë¾ïW«‹Aa:qNËGþÑòË+°Hž›ÿã÷.÷ïý£oÿ…]~åKƒuäÄ0‡ÿ5,Œv~‚œWæãÓË.ËlôÓ6õ•i‚Ÿ°'fð!–Ýžçûà_¾uHùÑ»0&æ7âòâ'רÑÜ+8¥àßS^ðRR‰3ï'¾ƒ3Ä;:Í=œ-Pª‘GÑæ8·¯3žNÌÜr'Ý?Ž2ÞŽñM›0P“å›ÛyÚÉã]. &Z¯×äA¯.BJÑ]K—b™ðE,î;†‘¯V«ç¦»Ýn¿Ý”œÙÈ lªÂ”Rrˆä´fRs·aHœ½aÌ]Ñ•œO)¹S«Î8 Q¤D¸[o®™Ãª=}aÔ QS25RóD®`çàš®/¯V«þãí Üö»Ûn³Ž·öüÙs˜3MÄÀZ&ÆÎòÎöÔ«ÖýàÅOÒ®çlú#ˆó¸ŠÎ“g˜ÙšHá£ZžÑàó(ñiñP4ÿ…Në*Ä\…ô#‹¼ÙYüüx¯ºFχ Á”ˆÒÐuŽ%¹Ÿ›·5ûñ ý.—Ð2BðIPÀ8mœWœÜ9 /ÝŒ&Úm¶Ùè&xJ°0çjúôOR^Ýë<–Åä/S ­ EÂf}éRTµ­7wK®ZãÖ ¤95<& ë«nsÍý†×ã#*,ˆHö`fÕÁl`éa—éÖ¿…i×~±÷œýÜößÜ·ï 'ÁeÞm‰áÎ*ëÈ4q%B‹˜3¹åmµ’9‘0àFLÜÈ[uK Ø4}Â{‘ì±Að{óŽw³t²#ÁvSaG»„ËïÈòõe½uÅi:}¢Èw´¾ƒú nhÕ!'Á‘\W±£¨O¼—R"?:uÃ-Pt©ö!Ñ»¡[œN35jþÆ% ÖfJÜm™ëíÄ`h½“¤¡i»¥¹Xóø~CΩaÿšr©ªÎNÎDE± „©à›ÕR7›ó"&,¹©BÍìª*A„Ĭ±=0wâ¦A˜„ˆD¤)mJDØ,ç\+ „¢ˆËåzõì){ªš’ÔÆD>U›œ«”²ˆy €B¨N77KQ‚¨êjµº8;Âó—Ëm ;³»í¸Þæáv¯ÄO'Φž×ÌmÃW%LÛøv½OÉèGIs>¤S­R³ÝR‘æÍñÙ‰Õá„['·[;­Êü8[šý_²ÛYÖJîn—Éäá=($}TŒNª ¢A£ï1ùl–]§Þ€t$¬]Pk pÝšyj[?‰æ ƒ€b/ª~Bê LPôú¦‘ãªyþƒªFÓIÀL£@Ï †]þ=ËV¾]H­– ªšÀ,’r*¤¨ëš™EÆ—sÎäl®±p³¸ Û„üâ’ªŸ}tùè.ˆÔÜÁÔ³jƒùVíMØÛË™™A*ªªªf‚«&"s²éf½yàþ6\úW?¸O¹v×”“›‰ DƒH™y]Wk2wµ‹»wîšYJIU%„‹ÅE• @ ÑÌ›€:ÈåÞu±WgÒ¯Ü@×IÑëuÞ¬2/©ÝdÚõ5m2²9¥,½ûQDÜ‹4Ç ®m«Á¨§dZÖq`Ÿ?]óîâÄïYã¸ãL£4£ç-6%4Û80*sòÁA´Æ¸Ó}Gu–ö¯o¸„‡ÚŽ]Uà‰7¸ó˜"ê\w2±[rë,s «££Ãì“@åäx:ßaw¨‰oA›É&ùî>G ö² ìǰªÑæÛžcÐvB~î$Ÿ¹©­ŸüD´¿—RcÉÝ× ‰0vr3¢ªªZï֜لƒ{¢)­ ¾¨ë$BÞùÒ×~…îž?¼ûÁϤ\©ªª“…ƒ»»ÎZ5ˆ¦&ÌNB¾‹n$ƒ˜9çDdj‰EÌf›j“rþÍç·¾ñWÿú[—exûëD1„ ªœ_,ÎêÊW«¥G)Ä!TurwY­VEŒOž>Y­ëåjÉÂD”ó:«1훘 ÖÜ=UZ¯p¦Ö ~<|œ­/pÅ0äb§¨~w¿UUÈœëõœÍÀ®É¹Ë2•IMڟͧ>§Æ¸cšñÐðÎ\vˆÀ=ÍÓËÈ;¸Í,€6/‰–q>zlFîøZN_¤‡tƒü ú«}gN~úÔ=ݘ~:ùòÞx5ê cÑÚ+ƒc°ŠÐÂü-–Žv>yP[Wêêí®qèžæ€>©9Z:S£}Ö•Ù …ëöžîìá"F€êê<¼ÕgyS\ã"œL$˜‡à`‘âç~î—¯ï°\®w/=W®ÆÒˆë'@̈ ¦ªJm£xjr/ HhêDÝLS®†ÈŽ‚'A E¸÷¥_ÄùGç——KãúûcØMZÔõ†Q¢SÅ‘ªU®7ɉ݉gwž={^.. R,ëëõZB4…åL´F¡NJ&(önÚ[T~h¡µý™S{MyC$¢l‘¼)r2ê Ÿö­2þ˜§¶xß]û¥úTõ‹Oí [4¹Óèn#êxœÊ޲¡=U8¡Œê'­*¦ä`¸3ô a_ƒK ²%LfØ>fÛÿØ):Nínèðyg;1£¶w°W"™,EØ>5~9­‘¸·c¾s¾éy$GQš~Öv38õó$ë×ùœàÓ±\sâ~äÎõ1 ÖÿþD‰¶·…èMÓ©“¾IÀ܇€ævÛîý9‘ƒÑQ`v©u"ë[Ç(Àì¦?(†»Uº„ž¤¢`¢Îçõ|_[…K AXX•×nScDÚâåAÕSJæ®Ùï}åË!Ä”“»¹«;Ì šˆr8™ˆìÚ=Ì=4 M—€HÜT+³` ‚™¨s®«ÍÇsÎWWWÏž~,NÞ~ŠECw…ÔUƒ.› åìçgg±,69-—ëÏŸ-ÎÍèÕõ+U­ëÔ°Â.»5Ôöt+¾¶¯}&Rôæµ²ú%|sýò“³´¢Åù9‚ÁzjmØ`Þd ]Ø®sVðsÙÀ@ÈŽé]{ïý};tš; &ÙŒ -§CêGcídß[k]˜hd Ó±">bþu‹«7+:Ølwƒ8¹a«4´åjyU &[oLZt~`³a ë0£·|zœŽ£4šîo3 :“Ð'rtßãÛ>Ájúµ»½³©²Ó9#éSðœns;õj¨“âéŽ]Kè‰?Á[4SI¹ªëäfB]ÕEQh†š…ÐÈkäV›ÌÌ$ġo3°®jprL›9'îFÈ`0ñn»kô$¨hT³9åªb4æY)×QâÅÙ…o%Œ8ÜøèÞƒ·Ìt³Ú€¡æäFLU$±,n®+¸0£\«õªÎùúÕ‹Ëó>þôYñòâòE¸!W¦ºµ¶â>ï@í¸‹gÑŠª—gxµÜ”´ªÈ[̹tmûï”§K˜ý ÷öS¦Ü+¥9Î '(õû¼àûð#Æ'ܸ »×%Kº×öƒPí)ˆÍœ_Û)u®Ãd÷½æéû%Š“Ù†wŒX[Û÷Iì«o—v ÍcÁããhÔ ßœ$¸̽¯þuxHŸ°–0Ž æ Õ£L×-ÐäùQ˜üÃ[™ÕÌqè}.kö@ai>k±XHëÍ*†HUgæÖ ù㹌(†Eεªj¶œ@)b¬ª¥™1Jß TPÓ çÌÂdÆÜd$€ ‚ØÌrÊE“ÆšK,Uµ©ju)”\ÜB:×cNf . "TÕfys–w=zõòÕj½dæã³Õ•ªJàœkB`í÷ÿžÙ¬àZ“)ypc­(o„« çÍ䟓åAi æûq:GÕýQÓ 4?ÓŽÕŠõ/uJpóæuòD$ú\ºpqkÖ tÌæ¨îäá#Íì<0±†1H šïÛô 3Ì ^£ÿ(à>+vqÚžþ™½Ù~³õØ]>Ê GýÞ`¤tQZëKboª :x”MÈcq9xcÐpÖN ¯¾+Y»`·Ê-0"+HBrv骳‘­fNcÞBäd w±gS„phSˆVš<æžÄ%¹q(ˆšRŠE©MA(ÔrR‚¸©ætg‘ ªIˆÄ$î–Õ-§ZÉœIëªs6c°;›%"‚çÉ-¥d‹Å"„@ä¯^½4CÒÌl›Z‰ƒ:àìFš4çšÎ¼5jÁou¬¢~{`'‚)“؆֯èì¼®ž²&89Ø`peìmSË}¾zHÆgšÈmgõØx÷M?¬=9øó©Yº¯Âæ¾c°Ÿ`ZÛÿÑ œ@‡’÷ž]‡pÚm¬-d w'ÜÓ¾ÅTÀ8d³Ç©|sf3®¼ÇÜÆÐB¯zdhnûp·G½Ç(]?3òAÕfܳ®>8ÌGöçF¿ê´ë =5 &|C{¥;ý´ƒÆõïÕ;'Z¢/^;Ñ ÜZ ô¨ÓÉ„½e0œf#ü©åÚ¿ï™óD…‰ ú{®Äá¤gç2œ·S¿×9<#s7¯ª³·Á˜¡¹nLçCÜêkÞüo ƒ ¦‘,©e¡˜ ¡a'7×l¶(/ëºrGJ9ÄÆ†’¦²,Õj·TCˆØuP±Zà(Ü`ê¹×".Ôx¹®à\oÖEQ1$²T›pd‘«æ ¡¼¸¸^­êDÙ\ÝĪÍzGöogÇ’§ÕŒsU6…gÙ:XU^ÜRW×0…4†˜„ÿ¡BÃ9‡Æé>`,`´GŽÏ—a &ÿ\zÑrûàƒÆÝɧU‹Oqz ý[ÃŒ°ù~[Â|ôÚÙtl@_w,wÈä#ŽÁ‡­=窧Z%ò]“×^ ¥¿£Ó²ç“(õ T¡ÓÉÔ1ÛœòãœâEpÄtYÞ/æcÿIìd4t²Þˆ~¯=8ì¹ÛëàöÞD'W÷ùÄäIJ¯«3›ÒŽ1ç@†ƒÇÀ‘E÷šÒ½†SúÞýñ«ž&%‚™ÕN PwkTለ9², ¥QP‰u(!wÏjäÊ­–bq÷d{K!„¦Ê³ù°”’H AŠR܉Ì ¢µk`æ ÒN(7Ä‚«zEŽ¢,Í}úò¿¥&¹1Ù^{ïP ™ 'g7Í›«Eï=¼¿XÄ´|.^3©³o «­7ŒiÕ‰™ ›zFfW¢yÒ=c°Çõ÷ǹ*õn«àBÂåGw‡NÝúž¢8ˆMMíæ .øX¿á¸Ýü$.qÊ:·®-¯6š]̉‡O0N`8‡›°fÊX¿oˆëËÛôæÉ)Œú|±lÇé~P1Õ­íËÛo~ð¦vŠ%¹‘2Ú}Ûö´çvjïùÓÐïì°ýpùÁÁ˜Ègð<ß=y£v‚N³«zÄ_úÛ+Õ&XMÉ=†BM›nÊ\CŒÎÄòúÓ§úûË—?|úøéû_ú× å»_ÿî½Oñ®ë`i6"E •jmYA!ifSÈÉ€F<Dzjã*œÍÌÍ!ÛRQQg 1Õê)¹“nu=µ!“Ý‘’ž_œWÕ«1K7±Œe¹È¹zøèáfC‹²8;¿óüÙˇ÷1Å­W+¶Ò'¾- ïHBtJã|G 9–‘®b”åÍM´¬WÁ*uUä„kh󉹃}›Œ)¿©ùÂÔ³1ÛG²˜À-»òî#p|OL´!êˆÿ¦Fò}ÀªƒLaö=%ZÜê){[P]moFßþ”;©ÐÿÚ’´î4µ¡NŽá.ีâ^‹Y ÔvB8Ç–N©ÏôÌmEq&;9fP~¿UC"00‡ë!8Šeô.˜Èš¸ ZW¼Gt—Âîº>3§» ñ˜*¨·ÆŒŸŠÀý“ö„€Åg2•Îu·Î¢]扈À¶õmèsÍ|&SOd¦µJò†˜m6F– [S¸Ñ2¤›?ÿ¿þ;¥ûúŸ½ÿÞ:üé?½¼ÿèñ·þÙ¿ô7ßùÚ¯½÷­ÝMAâ$àÀ–„`@rªÊ£°{"‚› Ä‘h«Òl„@H))›»›s­d0r55S îfž F„œÈiÎ`!ç î—w.S•aA„s^¹æ»÷ï]¤32`Ü„ÙݽÖ;Ä/v ánœÜȃ®±~*wxu}M\®VWE½ñ2¸8Ãw‚Г«p¯î¦QÕvw`»äö*RŽ@s¾’}P}†S¬Õ=ØÕ•1Mo^Ó½²ãÇôõ¦¡6ñѼ¼»D¸=|4  ónBïNhJ"Â}>Æß½Lsçѯñ|ãQÛŒ9$6'¶#?P62Ìóv’ÍÇwù^.µkƒ­¿° QcåÄ 0·áΤ§TÚ©|@zç½wwÔ©ñ$ije <ïYs[ß×Wº­Œâë]£›Ú¾½Y‚]XK"¡édru2ì BE˜YÈ@ˆtýÉ·>úgÿÓ?ü3þàkõM½¹ÚÜ)×OŸ=\œãÙ_\U¯ÿáïÿâ?üÏ¿øµ,J6­]béfDB”  ”×! ¥J¸$FlZ²Ì2³¸±»WÕʼᔼ©æL–Ý(Pq½©œ”9„œ2€œ(TUBX¯×ËÕ*¡Èq³ª ‘ÜHØ~©û!}±Nݰufž×¤ka)ËxÎ5YMžñÆX“µ#žWÙFÈ-¸=îwPJá'TwÅãŽÖ×ûdЭž4ªëøíÜÉqm#©ŒSˆ°žoÉ­°{‰E+}-Êñÿûì¸ÓýI~[êD@ì5Aé}׺¿Ó¹•‚è!F§ç4z,â8ƒmÑ|&Ž8AÒ}PÔeögïͧ©<ôœ iWÀ wsÏnØ-+Kh>ÈÌÀ"ë«O¾ó“ßûß~ô»ðΣŸÅƒ¯~ã?ü·ççE¹¸øä£O¾ù{±¸üøÃŸž?úâÿùßü×ßø;ÿþóïÊÝG='“xwÍ(„³¯V«UY”ºmK‚à08™«B„²\)¶´pš³°$Ë9Õ‹ÅyÊUε™šº[h ˜8›ÕuÝÜö»wnnVPÒšby±\½›yG—y àÙ­OèÖ5¥d±šPµÅО IDATªÖ«ª•éFHÓN¢™†A~x’øhKÝ—„O• {‡EIV 5&¶`Þá^Û‰8ͪõ¨ãžÑ‘ézØé¾[®wŠáß ÿhÎ÷ã€^÷â‡c»qçœGM‹©6Õ°¶ ·Öfµ+a¦¨ÿôKMv¥u/;–£ þÐð瘻C©?Ð 6~e~{|lpÚ…¶ðÕ·é½·–7‡ù¦]Yòqôj´Ns¯ÎcP$;×ë1}»ú°FêÀÛ8D XaqV †{3íUY@Zmž|çŸþÕŸ~÷¢øÒÏýÖòÖßø +ÎÝ€‹_öþßzñÇ¿«¿óëg¿òðáÿ×¼~ùêçÿþÄ—¢e˜¥ Ur%p,‹s"*Jä\»e3a$0‹;YµÉ¦âfÂÈä!H]£,΂df°ƒ…C”T“&Z”‹õF‰˜ánÊÌEQ¬V›”’-ʳå˪‘Q15À¹©gðq!†R‹» ²Æ5Àꥰf­Í”ܘ˜¬vR¦xPåt‚øñ‰'~8oÙªRˆÜi|øððÿž–㎉èQ"…>œ:çÝíJ‰Ú‹›ùØ›ŒN^=ê0C£°m@F·ËKúÝ‚~z0n›çØÉ{O­è?á3©-™Xêô.hª£mVÏ`âŽ7†ß~Vì2çŽ]ìù¸°-ñ»ô.À4Òm}¨ØÔGŠi:˜íÙÙ^;,bgŽnMhÝ:6FƒËîN @ñ"w30(Ьxû¬J3mÜq!ÌËBD+Ó?ûÝßÁ´ÎůÿÿÕåW¿¡Lõ橃8Kqñè×þƒ‹÷¾òƒÿå¿Ý|üñY,®¾ý'T¯ÿêoÿg3U…›iíîÏ9Ç dbwV«cÈ@T¥Àì‰L¸Qd·”…ÌÌ™ÏÝBS$¸k Roª”̉ˆ-§Z@U]Ÿ]^Þ‹EªRRºsïîõêI]gÍ©bÊL 2Ж%nžûpÛ·.7Db¬n¨_-"‹3)£lVf›㱡ñᛄ/¼ƒ°÷ân†OÂÄN]„þ²ÙaWÃ!2'ļñîþ°áÉg4æè‹/ ô±¸áœ[Î\ÓÙ)¿vàG#æ'^ªûWfF~$XÜý91H¡ƒ>£­cHª§Dۼݩl8-÷Ž:ý°_kî‚p¼ñx`ÏýMOÚQkôôY;šB“ g|jÝ*2:zôµñ7núع ù˜ ~͆ºI怙݌fiú€›bW?ùžþøÂ¿ù÷,”…Áò&K–"ÃÆlÎѲhEêòÞ¯|áïüƒ_œ ŒNCÑÓ|Ú2K{ò™¦Úí×7¿]p'Ë{ß`B/ž¯wzó ©ýý¥¼7b‡pnKNÚ—Ú1¨tøÁÅä>ûN»Ùm;â·¥ö£›9C™(ü¶‡æ*öd·÷8™®›ŒïYuo‘Qš’ÞªêÆèÝæÔ{>`›YnEh;ù‡u ¢áíaa çN¨ nIsöÂL2-Bbæ&(Dc{ùýqõÃ'ßøÿyñ葚§´&Ç"Þ5ÍA‰õfýÑþü _üRQÞ…Œ·~ù7Þù…ß©>þiõâÓ{Êëoóå{¾ZºÖD7°ÔRU­幪’7eJäUµ6ÏðlDfJ‚zÉEíä¢,Öëe¶$±ˆCpwKµ1KÎŒXÄëW/Ùé­o}òìÊR®Í„ qˆ7¡šVAëð@}®vvBɉ ¥_‹ÄE . BÍ*¦š  ¦t˜‹ÄÍGÍ~Œòo®impgÞH\¼µþkõm0Í ºQßÙb‡ûó)»E¯*á$¢²gGEئé[ø~À;6šõˆ›î̇ïÀ|àæˆ¹BÆ–« ‘†"OSÓžñûWÔëUÆq8it¥@ síJM '‰õÏž-¶ ÔŠØÓP+­Scããôhµ£C-t7l°mÝvÝa[µQp#¾µ¾Ù‹fºÀ}+í›lFxÛŽ0k½ê›‰Þs¤G/ŒØ]ÅyÞ™K½\xˉ vO­¹ã÷dí¨*Ðigû)½”Û¥#MÕ ìBÊÅæåð¿ÿÎ;?ÿίþZbb©>~ü½}ø-Eb!lþàO¿ÿý?ú³õÏ-oDœlå÷æ×ÿÝ8JüøÇ?ùñÿ«Â",œ5›)¨E äm °÷D.E¸(Š¢X4 >F±ìR,œ…™CÆW@D4ëf³I©&÷ÃmtOuíDwïÞ¹¼s˜„clå‰nt5 ëV_3Õ9+žmQ–1KKUãfܼíÁ];%þr‚1!ôyÌö1XxZ6?°Ð©77wÙ1ìïä@þ=w©[íŸ ½qø1·ÀÂëêç?æø€fžÎý¶´Ç1ŒþļÄ;ÿ»í#óÒrÃÓ&“Nö4_ÜÙÅg'=—¢IL'iþ߉ÍÙ¼‰[1ð-eæ°¼Éçml–͵ªVj‰4›&&cxýñwýåõݯþ*½õžº.WÏø£o~ü“¿xñô ãÕËÇ?ùñ·¿õ§ß\>{úñ‡ßsªÉÔ‰}ã7ìáÛ׫å£ôÉc²• 5Ø‹°"JõÚÝC(»˜æìÖÈÏA3£¨ÖÂ%I²hä,˜¹Q©«ëº,K"R³jS59Ù¦ªBˆ"áææêùó'‹3IuÝø ·2¶-œ:¯ÈÖ ]=¿*Pq®Rªë\Õ–²W+϶©ä4¯3ÆRÊÀM£´]¾gL»Ñ!õ1tàxŸs8‚³OÖ&œ®,6^ç­ÖˆØ‰;éÆœºÜ\¯ÙÔ(јð›ÃA~07àXÇ1|?I„=PÊ~Úÿäitþ(ÞxŒtñÉBš\éèûû Ï`täÐ0þЦ²Ná ÷èÝ%bÇwKcC˜Ûž¢Ÿa®ðÈÞƒ<»Ê'×[WïúÁõnB¯ Mj^›Z±¦«þ˾gïþõ_3–Âò?~òÉãõ‹úÞ/Üyû}ýðßùÞw¾ùÿ÷Ÿu¸÷íËGïÐRôz5$GGiâ~¬û°oDZl/ò9«@¾ù\ÚÕ Z\š¼ˆ»ë­i§Žì2n)œ¶#œà¼½K¢êÎ. ÙasÏ ÆŠ)CÑíéJ]‘ºøÛBr̘œŽÝÞÈ®·Lûs£}©÷N´Ív´Å¾4¹#,Þ°'4r7{kÓ^F¶åvZÃB줰J¬TÊYtAQÃåWéå“pþÖÙÛ_TPZ>}òчŸ<»þö¿üæ[ßýòמ‘Ÿ|ú?ù‹ÇýäÓÿǾû+íW×Ï?zððmc/ï|å‹ËEYžå‚ÓãÇòWî“€=€ÅTÅ\RÊ &·”6uY–^’¹ S€CÖÙÕ%†Èjqh•©®˜Q1g.\=0[ÜHÌNiµ®TÁ(ùÉ/Þý@Î.˜üãOòìųÕÕêÏþð›ßú¸zöãçÏúÑO_>þèª(î&»ûÝï}üòÙ«\¯ÝÈ,ßy o½uõѳúñ³åã'²-㜵añ$„Åâ,„`î"1†Ðt:´u,9³Ys”Š˜ÂRy&™+#À¤”ÖëõzS¥”«*U›š"âäuJëÍz¹\™ˆbˆªÙ½ë÷á'¾_Ø&W/×ë*©Q!(ÅàQ ìi M ÏÖß"¶ ÃàáÔwzwzIÌíóÌbt]rèañ¹ç<…ê8<¼[ó©Ü’¿ÖNy$ê"œíIÙoFÁÌ! ª_»''¦/¦UB ~OYpÖ ‡±¹¹"‡°šã’ëƒ#±“Ý8öqÜÞú¬‰zÌ,„2k $J`¾||ÁááW¿f,Ý|úô§äöƒoÿ¢¸óþÃO× ¼|±¹~u}ïþ»÷¿òô•mª¼^^]>x_±q//¾ô¾~ó{«›ëOº ‡:Õ *Š2i%!¸ @!€ ©^ƒ´qÁ33S·,ª‘17ÕuZ§ªÖJ¬ÈIÍÈ”lªÕb±râeÊiS­ˆˆªæœSJW×WîŶÉ9ÙP×gü>÷L× +WɦUªË³E(21ȱ¾yu×k=x­¹]làa4³h¦CãÑ,Mvho†7aÌtØÑ~6$o´5f|½1%ÉÙ åŸ$ò<ãcu+ôæ€ }ÉvwÀA‘ë°É§QGŽí»y»@Ÿ<ìÜ}³]©Ös¬Å?hå!#Õ½lÏlp‚ç8¦¡4ù¢Ç‹hl7ù~w5 ˜¤NÉè`J´ÂD-¹=Oáato´>1ÀÎÿÿ÷åý `b+|ÓÍCŒ ¦$g@ùô‡¯>yqñÎûÊRo–Õfyóì哟~òþ_~µÄÕMRÊÕÍõÛwÂâò<¡|újyuý2mÖ–=ÛÒ¹8¿üJ¼xïÎ_ùú·.רëLAðñ‹©Š4µ€Â,¶²ªÚ8’K°³yJ.N\ –-†"H$âåòÚ,¹¹H̉˜¢HŒ!äf <~üøÃ?TÍ rs 2)q|h4Í]—AÖŒâÞ½{‘ÙMŒ‚«7ÈUÓ®vÛó´mâOæhÀ‰òjÌ&Ý™´rãµÉ€Ï›3ëF…or©îa68žp'}æÍ~¦i ÍxŒÏß°ã/}Ë:±.h"ß½ý"ê¾‚ÐœÝ í°$n0s q7GG"Ïg¹Së»`vÓ>§=À“/PÚãþÜ©`ížàÁþq,ß©ï ¶.cç÷Ûqë¡Æåä€y À(2›­Yja'2$N–‘êûï~ùî;_1èfý¢^å«Ï¿ðÎÝ›š®?ýôúÝû÷ªÍòíG¿ó© ¯rŠžÌ-1¹'#ݼýKÿú{_ûrQ¤,Ù2‘ŲÐl¤dɺqÊZgAdv2"ÛV¥Q$©ÎfžÙÕÍ)”Ni“*…ÈF@ æåze`®×«d.c²?y~}³LjÁn×nôõ±#jt²\};À̤≪«3Ußl®<dY„ܵ®ÍV/³+@Üur™ïêÖÑ<`¯QÔÂÊ{£š¶·ƒia"ÝVfwþ³dµžÃxÔz4ɶ²{KÞn?É»rgÃÈ®¯]ÓÆhãðpÒUj6¨ïÿ{ºç¶04´ÁDŽâî ÃÍÞ“üžZ£žè§o#F– ã„~BÍm9ͦŒ{ÉþQ ÞU™B'°ÛŽoýî|ì‰÷}ú6,}ð³ÿÀðcQ~w€š£¡”1ÍÉa̰öX¸Ž†¬ïTº„îd­A8àÐå4¡Y±{M8ÄNcÒ€z.âØ.Î ß„nÄ„?ÓT|Ñnîn"è¾Fø ©LìØ§ÍõàC ”nJX³ˆÚYKòëO>üþF]Š3'}ñüÓõ¦Z.—¼ÿîïÿɧÄç1„²ˆ!P¸¼ãO`àçÏ_ºº“9[ª\½†„,p­BS 1xÎÖì»® !ä\9eìjŸÌ]‚0H“šˆcŒiSÅj#s‹…Ô›Ê4…€r!Ž\,Böœ*%ÐåÅÅõf­9?{ñêÅËW7×7u]{2×_JgòNx¶Ëwf,DÉêXC]xª«”´®+s%'ËkÕ¶a^/ ;J¤ßÀ¼K-îÃÃôÆÐ{ !˜0í0šPß7]õkÌÆ’Hj€N¼vÔßË¿ø-ìµi^ÎÁ°×®Äx™£[vá!]÷×xÝcÇ¡v¹CÇakåÃÚ”Žòã›Õ~tŠÍ= ª“ç¥Dw¯u6îÏ›‘»œÏ >›™ù¤šÐ•˜ø sÕʾSýìê±PÇìwܲ;qÂO‰óÍLeoå<[-æAú6P¨Æ<ö:eСWÞrïÛÔÂ÷fMéVeõ:ç\š±/)½êúÞ»ïQx]ÕbÊ9ß¹¼KöL¸8;[H‹‹‹WW›ó‹G gE44p>œÈªºVÍ墙eÕ\;…& @j9ƒ¼ªÖëõM™C(±_¶û.©SÍîBD¦–s¹(³“š¯WK5 Í)” u;??W£ªª4¥åÕõêzÉ ››—ŠB2]ÊVçÎ âý‰|ûC…'öU,m¨\œgÍ›ª63 Á@–6ÈìŠÉ&·¶#TÛ Æ} ÇßM×N^Ø™W¶SÞø4uÛSº¡7¦¶Œ6f„GGÍ®'Õcz¸Œ}®6æ”Ób@“øh‹þ­H ìÿhïÙÛ)AÙÙ)ÇÇg¢þIðzàA6ªÙŸux>=˜˜ R_sRHu’´Ø'Xã jTÝW*ÃÜÇm¦˜×AvÞôF5r÷09)ÇT]OOqÿk(ܾA[š ²µô˜\í L5“¼ßø®FlÒ¼³§wËB^IÆJÂ0&YÇlÆ÷~ñ7ßzë‹Î€åªZóâ¬\ÈYŒ‹¼DEÚ¨r^×/Ïbi枪µæJ­fá"u]»»©*œ˜€`ž«º²¼Á¶cZ,»;›¡®3¸öx^U•™æœE$¥”src!«Ö•³0¹¦ìj«›¥Á”‰8%-bQ¥ªªÒÕ««»—wn®¾·¼¹¹,/—«ë´¶G]-h~sASƦ~9±¯t­®æD¨ëZBQENîìÁ3¹ƒá3[áç•cv¶c:Fé/é[;ñúÁþ’ƒŠi§>Z×ÿö4rð'xºIjqzÄf­:°ßúH£éN´ÛO˜ƒC}«)ç³ïsûÐáÎŒ¶Ÿñø¸aútѼÁï‡NÈ?eÿ;ÎeÐæz<VÌôOuÆîùÒ î~>²ãi˜zÀwfr €ÑŠÇœ²l˜¸…†û£ÞæLØ•077‡˜ÈŠ !¹©«“ËZ  ;¿ø÷ÿShª-R&"­…KJ‰ï>|@rÖ¨ 1‡Åy‘…êͺ(c 'r*‰=©9‰Ã³[Q‘wW2Íʸ`îÄLp,³›if‘™æTWEYäj…(ˆ‚ìeˆDŽ1.ÔÈA,ì€:n–+222sà›—/=›Ü)…‹¥^-7é<Ю™ª„ A ÆâòM65!uÊÊD~qQçMÊ©7Ë•(ô™o;o_»påƒÕ¾EÔs‘[¥«ýäÙÏê"ÈÛÉhý^ªÝ\:²¿÷~e›@ O»rùûÐxÎ¥çÛÛºŸ-ˆ»-Ýß í¥j¶§}„uëú;/î#Ï2oÉÞÖ ÆCÞ› Ð¤žô¶Òfµ¦ }%¢}zá3ÉÎW€¦'ÂÃäl{éÚó$d݆Îût Ü$¥˜ˆÏ˜ Yö…j-À5¤0ž•c]Uwct»4åÉט©û~朰€ŽÒZiÒñsSÓßդ뒳oDŠGAŸwñ͆šÛN_0SFprfá ·3 äÉ’­ê,€!çºÚ$†3"a)×›e\”±$°’kNUEë W"¡˜¥UNÌÜ= %¦kr7 Â,¦T…›‚¸YÁ F£„ EQ’ÓÙù¹æX$ëj£U‘Í=[J9=¨'bxrvSÓëW/b *UiSÁ bq¾Þ|rV^ž‹ô§ïL/’³Ãˆˆ$¯ƒVBbV ¡ÞTäfIÙ%ç ’à žŠIÛëgÀ:ÅS¢ÂÃ]jƒà½[ 4\„½ÏY«÷/…A}ÂPÝ3 twÿܘ½AŸ &KÑq"ñŽÙ9ZŠbÎy°· s¼ƒ´6j|l¯è¹ñ¸÷¢d b~½ì}¾É¥Ï “½æíI[Ÿy'ÔqÐ{Ë~p>÷+fÆ"Þí?‰™Ð~±M阾yÁ–û‘DÔ%‡1À1Oœ‚å ˆî´bBSXœD5«¦œSˆÁ½)Q’’‰’yV­ÖËpËËóºÊD(J‰œ]$xÊ L$­L‡f—xND,¤J \”¥…RrÕD†H™Œ™EĨ©\rX Gl$LÍë”ê”j£ädN"AÔ\ɲk.R6'©ªº™p†‘¥ÎÙËr²™c[ÂìÉ6¯d³.ÎB §ÅY™ªuµÉ¤Ñ•Ä+N+Pîf¼‡ñŠ®ŒÌm×îhJ‚´#é“56§Oï>\3ÛH|âŒözŒl8}¡Qß|ÏO[×ӌΘ,ßo=tä9z«(x‚Êûßj2ÌÃC©Ô j2»êëæbô6'5ˆƒW¿<ÅM^2Ý„ Ì/Â~€p*Ìv“y °þI Á÷,T{†¢ËkŒ¥+O$eRûQC+.Ñx‰4åÆÒ…¢–˜Í\UÁÂeyvv~4k.àîš’f#GZ]ÇH,!gYÝTá5øÌv›]yVæ¬R”9×Ì¡,/Rbá¢(ræ”+†˜™ÃEBˆˆÍ)8”T{â@(Y°p‡»XsËš«M" %âP² $³Øy,Ý=…„À"ln)·½êèÀƒïî v°«¥x^g]«AÂŽI)xIO+¿"K+ª¯á5 ÁSøõ˜ûúX‰;™ÀpúÆ×s榌ûŒs€ðÑÛ†Oã¦ÍÛjÁÑ.Öu{Ý‹‘õÝ9cœÎï`†éQÓmqckŽk\òÞWðiÙ.>G´î2+˜sÓrî:&»'ÍÀÎOЛÂ_;ÞØê@=d©\Œ«u¨‰‰;iš-Ôqëè¬{ÖM::uNW²~Á,º˜â¼j7Z@o*½ú«ÔÜ>Zf¶ºÊnL`²DÐÀ¬nÌÂ*ÂwM`:»¸`QJ)4¿"ØÙyQˆ±A„C²dîî™H›œ3ƒM¹!gÏn q3Ëf¦!D&Ȳ®«Ê”ªº635Ë)‘c”ª®Ád æ¢ÂÍ]$,¤X­7‘à©Ê`‰Å¢ÊÚÈ vr27%G£ZÞ)5ŠùÙaFм)|ùÎ{9@¯V¾ð>qq÷½óM]¿·Ì÷.ï/Ÿ}|.µ#Z1(îFZcòP¸:m¢>±Mß:—ŸþÄÉOê ˜ØóÄ¡Ô!Ðæ&îv?v ž«»ÙM ä}5Ÿ>dÐ"ÐnL! IDAT%¼MuxÒ[iíkf]|½µ[Æÿhi˜‰Ž_tή†šë£cûOtßï~‡H“ñQ=âN|¢¨—úMÀ6"LÒÜÞ!|è«:-´8¬½´Nb:QêvÊ¡2ø [çhr4jnÀÖ±sW*;æ¯;“Þ·æB3UC‡£oôV>tH0ùÌyŸãg¸)œß¿³ýòh Ivâݵ}È~•gÞVºìóІ¡ A²Q &M托ĘWµß»8‡:WU&g/‹â:¥»â’á¤P¯AdJ`qÏ Ø45eF,qAD9¥"HJ&„˜Á®&å¢ÙF³jSÊ`6F‘lªÚÝ Ö(Õ5£`âª^9ÕQ˜£¨ÊæMç›, ìlÞˆ›7^--¥á2pJ!=¿^ž•å«å’\ëFgª|pïnºxrÅç%é5§+-Þqg'X·3küÖfü0d§ÚˆNFЦ°|ý¨ßi(Fƒj…³¶%ÅÌz¤Ô`k€OB(#P®ÝÀ;¿o°®YèîT=ß²þë÷4mƒ¦ý!4ØÔzï¾ãÏ[b'CjAï)¼sg{¥[2ߌávi›ƒ¹-ô÷=áÉ=¶ÍEZ\¹óÑ£c§%<ˆwǯ{§ÁÈ:³‹w ©»úZ]UŸQ6Ð©ÅØß-èˆN·Ýdð;¡»žÀûÞ´¿Nöú~ý ýÃ| <…ÊyÛÛ9ä;1I~’Y"(± 3Sd5w@˜5;™™zNÙ½ñ×-ÖUm­ ÆÅõ2Ý{TÈ*Bš½TÄM‰‘œÍ䦪DT×9H !˜™DhªÜ]U£UÝT›cˆ1ç¬îÌB¨ëº‘ˆ@T§™@˜Ù]C9»™ç\¯×ëÕ*YÓ+Åp#æH³L÷fÀ “;¾Æð²ÚðõŸ?¼\šb³^‡¼J•;×Ë—¥^×—÷ï.Ÿ=dzF~OËû¹A‚à~”sn»½r6ã„¿îLûËÔr ƒê›S©Ãd­'ÆÜõH…î6êS9ʉB[óÀ9víMC¬cP,¾-·C¿`¥ŸÜŸ€w(5Á\Pø&Ìe·t zü„‰¶€£<Äiu®Ý¸Üý8ÉqÀæ$ŒþÝ7xtŒæÔˆNϵ'çúa—‰Ó·ûá¸x§‚ŒàÜÀ±Þ‡Ú½Ÿ‰Î,n’ÒÚŒÈ 1¯à‰Íy»—æœs¦E 'òÀrÓzuÄ™…ª´n4ýSJAbc3¿»mB=×k1ÕÆÚ…vŠ4"áâü¢•¼!¢œsÓ½UE]צ֌¤ˆ„P¨RUWØÎ ƒÎÏ£… AbcFŽÌaGØm€N¤ñ6Œ5Îu\}x‡?bMëÊDÂÝ®^¾*ÊÅŽ ­šÖ7¯*3ª—øôÛçw¿HeTÜa‡SG`w:I°y¿òÝŽmN›E'ÎÞêÇügËóg+ª1µçßSÊfÅ<ÎÜÞ¼+ñÄ ýèK[¦Æg{Åø)Mã}Íãî#Ú¼­‹„ðÔÃ!m2c7 :þ¶}KûÛŸ_ëhsçW}¾©¶Oy20K`S&  >VŽ[îï»ê& F'ª{?ȈúѺˆ.ÖZ˜?B»ÍÞõÝÍ;–que)Š¢¬6ªY8ušDV88!Æ2Jä⮊L`/ A ¤Is94æL€ “e%c‡ ³;©f³B„ÍjµÚAbó.D˜ÈͲi&u7Ú¬k7RUr'g×:­7f–ëìîjŽÍº^¯+‚U©.bQLãüzõÒ4›6q›Qãz?zOÞz“vjÒ –ß]ÄëMÅY™SJggg–õæÅóõê*nëÕ*ºz¾®®¿_Þ¹\‰mó/wïËŠL½ø>ïç>ZŸG¥ß1n௾í62g¯}#ÍbéojCÌé–ØðXŽ=4q—Ãt¬wèó%~¤rg"¶>qèÆ…¼Ãb_o6Œ¶Jmªbz ÕÓéc¨³óÙ÷ Rx£9ɼOfd[»nÞ•9&ë"FL7o¹¦—zsXocæ ñF+[VÙ:Ø\×ï[¦%ß5Œl‡Ÿ½ÓAà)ùY⽜i§öá@—è”ÖJb'‹Œ< A!u3cÒ\s ÜT̳³6P`ä§*ç‹l¹"§”ჱÓ]ç3\8ÁÁÌDJ˜-È´ˆ¹LFKpáp¸/’RòæÁa…×I“²kà|ùÖÂ=¥ªòêÅù¥òâù’<\_ßIJ¨¯–™P„$rJu󞯗Wõê ìn&ÆÌ Ldm> .¸“Æ&g89‰æ¸ùþÿ)¯SŠ~}SñJZW¡pf[—ÙRJ f2S×äšAA¸ˆ!rXlhË¡¢T¯ JT•ÅšdEã]ÿ!<ç÷P‚¡ùL¿™=¿uóʱ–Àä0sòË‹lâV‡’Ìt9†î€“J‹ü¼X}x†OÉDø!ÌÙ%Uë»÷ÏÁA¹æ@ ’â<²¯×•»ËõS~þƒ¢x;ï9Å74œ~§æAÍÉiànŸ!@|xŠ~Ö™|8c˜¼“)£`Ü&räýæy0;ßVœlü;÷Y»ÒoªfNŸ¦ña›ñéÚ¶Š®>™Æ¥oeƒÜüãLÆ@Ìê°1g:hõQÈ}ä¾m]™ª”˜Å³¨ŒÎhEÌV&÷ý^25:][ŸÉÃyÀÈ£sžš[AÆ5L)™gn”¼EB˜EŒEQ§š…½ñÊ­ë\¯Ï‹ªŒäFfYm{Ù!"͘'‚×utqv‘Ü•f.„ƒ“›Y]'#$MRpN~çêùˆ‚"W|yçÞ‚è ’ J”—7›œ|yýÒÙ ÄŒõ:-¯7@y÷þIpf„m¤Ã¼«¸j•[‡)*`[Åú' } p…‘—÷g—/_>‹9À<åàåÃM®¥¼0]KÁf™,]}ü½G÷¿¨á¾òù)ûo¿ô„ݢ햲ìº{Ý"'¨ËM"ÝÙ^C:™õÓ6©¹Ê‹¹’ÓÖñ£û¹­-Ôt Jšoofr[ìœ~8arߟ¯˜à·­»ILrýobò¥Ì1…“—:ýõMêö¸ï®;cÕí*c;sTM5"LÎùÞ ¸:¥&óÑ£ƒ­/œH²ï ‹owÆžÄ8™ûAÜw½hìnÝB®¶¼ óÅH'ø5T´nx'÷j“r6‰˜‚ÚMQ” NIc(˜X)¹ Ù½ª²æ|¶(˜9b†®ïžÕ ¹9ÆÄD‰"LQÔ’›m=ù À†]¿ñ u½a†€aV«©„ ÝÔÄPÏ‹¨©ÊæLÊ54Ê]Óão6k%Jjiy-«%g½i|$Á´Yob,ËÅÙ'OŸjv'7²Ð©o@?ÁïNkòg«Øž•gøø±<½^=¹þÁæ*™Å›ëeŒìDªFNMs1îÞ»|ðàG)D±y‹ŸA±ðS <º4š[·ldWÕ«´òúoÔûß;ºÍ\š‹Ë>Û¶õ…ÙµròwÇ ¼ã×}›”Ëýt“zÞsúmÝÜgùÑ÷Ç6dŸQÊeN>«I¹[MÏ/›lîj.Åi.šæ/ í,,}¿óÑ^xߨoO= lõê›èÓï—.DDa÷·ˆwv!¼Ù3ó4) žW!çé ñ§eXyŽëê:¥jí¾1-D„Œs‹¸(ä ÌŒBõ&À1 ‡úìaX[]ݸ¥œßÊË·<?£Å“«¹§\'MgáZ!ÜÔ˜StÓ\­%DñàìÙXØØk&²l1˜iNÂ0B`s[;îh–››¼^gÕ´Y;<:i,`–s2]Þ)Ý©<£üñ’­77eJæ¦Dæ ù™{³`Y²ë:lçdVÕ­;¼yè¹lM  E eI¦LÓ–¶dËápØÖ§¿üë?…ì;¬°Êv„m)dG(‚–¤d“4D‘ l4Ðè×èáõë7Þ¹ª2óì½ýq2«NfeÖ­× Ê|Æ{÷Öyòœ½×Z{-l€Qça5*€ÎOßüîwŽ>|óôt!¡ ŠX˜Ùb.hh/½üìÉÉéýûÈù³“Ù‡Ìl fà½@Õ*÷Y¨’…Tµ1eάÌLÕ̲,«ªÊ¨$ÂX\•ÁSŽL•‚‚Ës_,8Ï 7EqjDÞ@ʲ̲l>›;ï»Fb1­4ÏÚ:«|¹úKË<>-v§—ËΊ9yŸ”½â([ÌgÅü4ϳ ˆÄ !_ÌÏÞyûÍמýºßÉŒm[/ƒôiÙ˜Kº9µ>–9ð'¯$ë¶4ØüŸÀ›ýGögý²¯Ó3+ˆ<=>¶²ÿ(>-\„ ‰tŸ~øÿãFt?‰[ÿ¹¾ƒ·»5å\¯ï¶ÐßÐ@oèyìÉK ìTNÒÑ,{õ+jýuß´ ,Kd,h;¯7lÙAè†õ¶¡ºVßêT$ÀŸ¾Ë­™‰Ä„/2‚²¨ª! ¢è¿=nµÕŽ<$ÃøãzfâRµ*¬jIªF¹jÎS®¢¦ì¼CÄ*T޽©ø²"37ÎÝK?öÒÞô@qä¼g†éþUò“Qæ2DÈv˜Á³X#¹ñÞ¨ªfWG¦Q cÃÌTÌT*BäzøPTMãù¤Ì„ˆ‚´züáwŽÎo\»õéQ>==;D2PevjÌŒÀÀDUy4ÊÇǧ³ª¬ˆ9æºCj\Ž€H„¤-÷I"`Äl÷Ùÿ37n¾.‡oéÑ›áüá[oG”Eµ* ¦ÓÑ/|ý'ÿñ?ýÝ£ã9”\–í?só™?¸ñcù¥•ú ÀI½ÓûzŸ„Â&[ g°~MPoÂî˜~òemKôvË'bèXª/€¡ã[?B~$·e°¡ÿd°?-ÎfÌ}…ïí.`Pý£Ýõœ!€#ˆfkͺ¥Þ¬ŸF;0ö–P­©TìÆ‹/û’¤m¥¶º 4lÊeX%Õb3÷Ø[?u/m;™*Xn…ƒÚjÙÿæ;%#a«/BL*¬ÕD¨ªm6ÎV$Çjš7þu8’æi]‘|é¹Ù]ÕdÓz+O Ë5!†Ëk%)ÉÑr|ÁÆE':JjRﯸY‰ÚìÖunøÀìuçS±­l€´u8)´BiúMU‡ôè<è×ÁïiÌi:ÓѼ67è©™jz0E¬lN ŒôFÁ]ÀY÷Å[ÏÙo’5çRÛ`}Ź «I0>ØG‹ã ç2ì™c6À¢,L%r%R”¼ÏÌ@ æR2导ú%r‘WÓH¼©•*R[Ÿ)¨ŠDÿ/ÄûTè%(1JÄâE„ÙÅŒv•j0E1;ϽSÍLʲÌÔB3&çÕùw¿ýkÏí><¼÷à‡ßýþ—ÿôs¡Âb¶ ÂQ>ªP­ªfˆ¤Vzr»»93š¢TÀ™1#²÷-ãþ–ê0Db>;>Ÿ~áõÏü?ÿü»N³›/}áåÏmg'v4íN`þᣡíî\ºzc4th¦ÛëзY$ë÷¸¼·ŸX»`XüäaµÙi1dÏ”üvŒ…m£Iϼ E%>Í¥¶¾°³îõÁ­íÇPèYcˆèÂ…Ñ«ûT5ü#O£õämS] `_Ð_ö)\/ñ\ü¹šÉÁQO¸ÚA z37 `=(çEòê¦Ü}ÄõzC£šžÑš“Ž¬­GZ…„ ½ZÂãÓÐ~Q»Öj†…H9tADE*Ab Ð*#€`L«m–0!‚š ‚j00E0S dtl†LÎ,Ä3 2D ªªt<É|df°pî²Z yž#¢sóÔ&£ëßûÁü×ÿæ:'£òÒWÿ̘HGãŒ˲TF‚IÎeQ!€¢…Ü‘T%š‚ThÈ8ž¶ u\ÒtÚ8“Pb9ùùÛï?>Aµ·;þɯ¼ò³?åÑG‡‡gùñ»~g‚7ü®|ó?~x‹P±n6‡äŒÌRR¸ÿB-]ç·ê¶Lµ‹El†€{“ Ú}°Á¹FÉ/¬œeÁZPÏУ7@bµA¦ŽÇ@úß­ˆvÀ¸ÖXŠålàrFÄÒX=°Æ 7€ÛÛƒ{ešˆ[šùlU"¬‰ªmüá ^¤'çryeºÝÃ6†KëáÛ@Ý›¢­Y„¥êÉ Ÿgf&Ö¿Xë ¨}SëÝyõR½•¶í†X¾×jh{*Lèd=µô ÖÇÇèýÇaƯÜ|Ûfs^-€n3€€ æ qÙ5ŒwÑø‹šn ) 3UD@mr²W;ÂjV ðS’M?ðè®FÀÌ–¢˜ÃÊ8›HùTS\«5bKE€¦Ë¾€—ZÙ¶€u@IK&uÖ!1yä’„"ÉyD‚ QÄ,Õ Ò(*‰ò ²ˆ¨,ûDeϪj µ¹´,˜%T3×> •!x#ŠcY‹F P! ÷¾,+Dd6|åõ×þÊø7ÿé?üÕ¿ð¯ÿ;gåâøèÉtgŠ^ýÈžÎBU…ãǎ)˜8t7n<óµ¯OïÛøƒ·?8<™U†¢ê4,O:Ì?Ö=€AÝØƒè|1ƒêÚ•K/½xý[oüð÷ïÿ_7n\ºûþ»…ÝÔÙ¹(ä ¼SÐÚú£iPm¨òè­’0Ám[¡çëC¶M!Ú3nš«„ˆdŒÀº¸‰Õ¾UÐql¶Œº»Dê;,[DƒÕ  ›uÝÕ»Ó‡ßVšØK´ÛH²“lŸ´«IN„–Á@‚õ6zþºµqHÃr¶8$lý¿{ ääÇÈVN¼1Ô¤D,OëÄ2Ò:tK;Tgõv4èEœ¾Új¦°q"‹ fyq"ÃjÍåNïÐu^vë…rºhi-qh5Ôû\'„ãÁ€ ˆdH¦•ë @#$K”FI—šeiïì5€« îȺ¶«ÀHŽC,–RÕ–Ÿ¥™HEÔFR¶|~Ó[K8hKÉ[?ýE¡e ‰L¨@̬bˆ$*ªÁ µþ<¦!H´?&QA4Fˆ“!b"â DªªŠ?¢ ê¤_rH(L‘ã`º¡‘2g¢ å¢Àù㣳óÂÜhšìã¾=ŸžŸŸ! w.ón4š:vÙÑéé÷~ðÖåk7>7¹þ7Þ<==WÓ/¶dÃñj  z>Ÿÿðƒ{Ï¿ôéo¼qÿª?ºÿ} ç“KÏe£«J5QU6c¤Æ³-Ä»¨×FÄÞ®¯î[Ç>{Ttù*ìá /_“)(X3ÐÜô•{§™%L­­¬•™N‰7" ‚ûm [@þOÝí$פLìÖzÇ-l K¤d{\T†k^o¶•u+€õ;l}o’éJ˜Í:Œ… |ÙÆ ¶)Yw©¹°´AU¨µñmÔu1tìó*ÁžçÚÌ^ª«úßGC"&’›¶³C8 LRÛ^’½‚Ü•d¢6“h{‘7N‘ZÈ󜽩¨‰ª)‚˜Id˜)ˆ ¢÷>„ÊÌ ÌB–yQ1Õ¨:gˆA2 1­*H†JH„†ˆDU*"!tÑ‘Ô0!sÔí8ŸyAU*¥œÏýtzôäèøÑQYV€P”e±(ó22Ãýý=S‘PUUY,Î}–ÝûènYT³ùÉl®^¹af?zçÛwku+“Éâ•7@;›—o¾}ïd‘]öãêñÇÅ$S,ëʉ™c»¢¬ëcu!˜kIDû«iÃö¡e°®Ú Ó,X þÅ¡‡¢®$/J½¯!¥áÔš´êJCr:Ÿ­›zu”I×N{ ¶Þ3¯#¾Ø 1m?%°~©×õõÅ ÇÚŠŠkõ5¸ámñoñÃÉ©d«(‚¥wlÄÙÓ[Ü;_¶ÍÂfëÿ²å qÝÊt&{áËM·úüÔ>6ŒEKͰñ‰o­ÑÕ<â ™B²½•øä†Cµ=¸û¯[Ú,{ïU+ *Œ$šg4Š‹ÌmY–D¤fŒˆAK2¥xÐDÂÏLM͹,„`FˆhÑpVL‰˜c}@ä= D)£ÃœÅp OìØWº¨d–v²l#vÎOPð>øæ?û6}š5 IDATÚüò¥ç¿ðŒóŠ"ˆäˆHcß!µæ€ÅvIµö$7BõF²kÐk"¾¶Yï d‡J÷ SþˆÝ!XLlý{Çw»ø…-}|Všð”^^ÏçZ%Û¦ ]í^º >¿™Eÿ|\2: nÔ7;Š[lͶ̰Mv™§Í]¶‡:rzý¥¥€€•’‘?¶}fÇßb›×é8H÷ß<ìâ»Ñ«Ù4h‡þa— H€$»q©¸5µzê{pñ´ëãV²±mf‹zd\¸vˆ÷"}'oÒ^+\NÑ‚€!¶3·ƒƒR©2¢ØÒ2~`¥â6½wohΦ){1‘PiçÌaç’Øhf¤‹»0 ‰±˜:f3"V5ƒ` KCD 2!¸XòWUI¤„} 5TÁÕ|=… ªF ì|¢-1°cS¨DÊJÐ3£‘#vNmADγaUI©V±óÄ`h‹ÅiYÎUÅÆã|¾˜ˆÏ˜xGU‰Ð9fvEQ,…jå}V%‚³èä!IéÁ™ †6f6…`U…Bã©ß»Î ¸kÇ3Ïæ=1§á?­ì½ÖTð¦Å’v²v1tÓ&¦ñ©  ÖúDܼå5&Õ ®ƒÀSAêÐêí¾ˆm\m˜àEä‚óÉ.¦†×¹áí²åÃj½ú‚ ·c3Ô)¢ÿqοmXðOPšµ¡Õ­»RàE”@]¤­÷¬çmg­÷œ›ä۬˥²u9 fj°J5I[pBÚ¬(ohߦíʼnޘXJ°Šy€BõÈ.Š2!ATìxŸƒjœDP…à˜@,óNDBmi¯ÈäÑÄ ˆ]H$,<;ÈA‰¤qõ>C j *–å”噊€ª`JD 6$gŠ.Ó³³ÓñxÊì§ÓÜy?Ýܽû¤(ʨ„2U"¶•^85æí«¡Ñ•À+ehhµ+‡ CC­ pÒ8z~(sf¨¾¹è•—= °¡ÞX¼ÅÚî»,ùÒÔï:ð.¶ÎÆò<íímx] 1ÕÛ|—4É}­+Ìáé½z¸‘¬Þìwá»ôZU»6Ó„ ,Íl½ÖÊm\©@ ¡ÕhµŸ(Z¥Å7 ê‹Ú¢>!–¥íªu%N¨j«¿\ÉõŒVÖÝÃ2Œæ®Â‰×Ò csÁ„¸·7eG!8bPSb6PÕ •ÉGb Õ@ÕÔÌ;nîš1¹L¤N|fd¢ŠL™”‹ ÁÙ±CR¡ Œˆ I¡A ©ò|7"o@@643E©Ì± RP@ÇÔŒ0·¦M-í#æ` RŠâü’Ÿx?vLX­“5‹‚˜"YO¹ƒíð~Kzl¥˜w$šˆË¼³­¯¿§XÃHbŸ¤Öë›FØ ÁmÀ³­ºÍèvÓO„ÖµsºÒ©m.ÚÐÅO1™ô{ÙfX&ѶŒ…Û”ûœ?|۱]2Û˜{kÐñë»°#¼ Ýì!6”û¦¥ZƵoçÊž@›ÉT «U6Ð!‡ò @m¥§¡Ä±´öCjß×ud³=Ý»>¥‘pÈͦ¯Öcëk þ±]>´µd€€bhŒÍ$Gg©# +‚£l̈bêˆ 0 fUY[ ›‚!;ß°z1a€™ëbPbT jÊ좭!0‡ì½çª  ¦"bZ™¤² €€€ DÀˆœcË9ÿþ‡ïþêÿü+9Y˜ì¾|ãªø Pž«ÌÜÈœc$>?3ðd´ãÈI©„1™jEF¦`HõvJJ¶ª°!å¯Ð(ŒÑÅOáµ³ñM#t^ÏÝâªy‘’˜ ¨fÛP«·W™«Ýì—–©»k¬•Q‰Â[›<ðˆJAجü¾êr')»pÙÃuV*d*û¢°±ƒ£nïfÑ \Ûžà¢<™‹¹ ìn1Âm΀”{:ÉÖÕ[zVKcÎ ¬¿ Mú” OƵ¬½³ÒÀe_ƒÅ¬ƒx/KðB¦. CÉñ/gÀ2ykýFooÀsáÉÁ‰qwÍá!õ»Ý­ÔiÑ*½ý®Ø‹ uþ´Ûoú•Í¥Êúß #rÌ’ïÞ±ú[:¨Fu Æÿ%_3y_¬›ƒXE¸(‚ Þ{ǹ÷cÇ#¦ €˜)šzB2›câSÇèªØü%21f™ß$ ªê]†È¦‘FVSe"UEU@Ë­Êpâî?zû×þÞ¯\;ØùÜÚy¸týàwþÙ7f'gR)‚ñ*è<BUU€Z”ó,÷O?ª*)ÊJ59`ìYX—MjI,€˜Èةۻl×®•;•ó,¼Ãåo}æ[mòv¡ÕŸî,<Ϻ7ÎTÈžê;ÁO½«½óßÛ|ÂÞ£eÝo ó^Oõ.ûÏ–Úî Ïò'Ĭ/¼øp‘NÏVÛÞÓžj½meÑK6éÚÐÎúRœ1O÷{¨†ú16·ráæ·ïL!:la½5u÷çŸ&‘9µ†mßÂeÕo­6LÓtȵ²¥GâG«ÐjëX7¨ˆ(>!*¢0+¢S „lH³ÙùÞÞ‘#r`¤rŽT«vUÕò,SUfTQ%t!„æÝ¤^[¨°X,1Ë2GÊeªhh´ÃHäÀ‘F£ýé‡wßø_þûÿzŸ`âoÝ}ï×^úÔ÷Þ|ë;ßþ&¢üù¿ø—Ç“©H¨òlw/;99ÍòñÑá“ù|æÑW!LÆÓª¬ÊjH N « J­M†ƒMÐÀÌBnâ*Ñ÷î~ôü§òìè Þ›³}XTÇŠà˜e^%„m®÷nˆK¦Ÿ6÷£õi±â d™F9R¯äñ¢§`}ÜŒ#1´C0ôÓr›EŸC^oŒÌÐ+l†žûÀ:Û,âØró²7¸(c Óö±!±¾@¡Í"”§¢g U!¯¹úQãm3T¦l–§ Ù–UçR&·feílU×-,¡“c1Èä?††©!‰ Ù¼lÀ7ûU;«¿³žÚtµæzÓ¥v1ÎX­À¾®³c‹'C4ï ™Ø±ˆ"åû£‘ˆ¨©šsÞ@‚Ç.6‚  ÜØT ªˆ©)EÇs"®aiQ3%vÌÌ` ¡fç]cMŒì³\ƒP<³8Mv÷î?ùàWþËÿüÖÔ쨸gn=7~õÓŸ½óöüÎoÿæÉùÉ_þ+¿”ùqòtV˜ˆe•å9*Rl>ÌfªjÈ"ØGëÜF¬ÙÒ¶a‡a‹}¢‚–&ßúö»—®^½â«òûRÎÞþÃw?ýéç—á¦Q0Š5޶6;Ô;¿µߪâY½Teàš\ržh½ÏÇ+aSAü¶ä×€x#u¡ùŸa­ŸH‘ÔîÞmÖ² %BÛð‚Ûmޏå÷íÞÚAkK÷ƒ4«g|Û¸AöîTk÷±ÿ@±¡U”êƒð©œÈaÝdᢓiãàŠÐ\¤\ʈlKð«–úï@âÁPÿãÊÉ¢¥ºˆê[ëbj88ï—„‰iï3nuÅ.J@hi)çš‹mÔb“ÕHI£ÙÕ„ŸÖwót¥n#ÒÈ(PP³B-&]x³ ÐT¹8 *P54—yÄÚ)Z-0¨ÀÒŒ:•’” 3Ÿ™jH*¥†ŠkÿVQôLD*AT•É¢bGFÙÃÇoÿço]ë­ëWNNõåû±³Rr7oLUž],Šw¾ÿöÿú?ýÝ¿ð/ýË·_xåh6_œDÙd„Ävv~²3@¿(æ„u4g«DرՃ֢õÄÜrúv5™½ŒÁ*D`öè`øö½ÅåÓ‘}óÿw>ßÇ|³ f ˆçËQë›…é½Mä( òª¸^ÏÖ™ «§‹RVV“Éš4ÌL”È4 ± ¡­²P(õŸ5KÆÛ6i›¶oÄÞgÕú‹–CYêÛ;ˆÛ|*mƒë,¬ÎÅ£®·iÕ(‘¨Ã–cLzµw|k5}^Ø*ÛÓO«ƒìk¯ K­.ÓÀR@in%h{§¯ÇëÒ7µ¾«g}»ôCmÏÉ·6MGU’jÒ¨»ƒY¢-/©6ׇÁÌöHàj`Óâuƒ• Ʋt Jª[#23tdËõ±Ñ9Ü@q?­øiaÍå4%£"‚a|L.\L‘™åb]O_r!ÑÃ|FUUˆÖ\ŠH $)‚h齤®\·1T”Å¢(Ï';»ÈRX&fh&Dª’B‚T™s`B è¹ „H!Ìs‡ÙÊGŒäŒäôøþõ·þ³ÒŸøÙ¯|ÿw&Ó+Žv÷Çž/ïíïïeA䣇Gï¼÷þßùoþÛ_úåís_ú‰ñN^- ®Â¢Xœ#9ç8æ2Ôc¢[˨f hœ¹Ì±wÞЋ“饃+Ï÷ˆ'¦†uù­¨¸ª=µƒîµîæL´6¹V!˜˜û3[_â¾ROá¶Q®Ô™üi—âvvÁ=ÅÚ[r$R‡8\OpÜl‘¿^ß3Œ¼õëý·új½Woû_ŠÍé­ðdÓÚŽ÷ãù?ÝÏÃ@¤Ïæ/ÅHM}³i€ª]aDk)ˆ‡n½\‰š€ˆÀ:óÅØ‡t£JØ=ó-Y”@‡Ciòë9òÖôR㘢ƒ´¨(o:Á@‹ófGê³d±Ú}Œ™Ù9F´ªªÔ*0ŽÅ‰Aðç#3Ä ¶¾Ę̂–eY–{$Rª5SŠH†&ŽQUÙ²©æÙXƒ‚÷¾(æªJD9˜ 2)à;o½Sž,þä/þ¥Óоø³?·;Ý}çÎ2·®]?ØÍ§Óñ•ë_ý½?üÁ›ïÜýƒßãÎÿâßÿãOýÙ¯™êÙñ±òxg‡üÄ9çØ•¢RXB€¼[c¶}ÁlU2F)™ˆTób/Ãn^.‹ÓÓ‡oì_>Ÿ}”—õŽ1Õµ>6kÞ^=è¶]¬1\Çñ[ð™q´PR14ì$ž¶B¡#}*{K‰äàÄæ Ø6ûr¼º¡XºQöÂߘ(ÇÓPª6íËÕá2ûÜ@Óœ™ ¼nÚ–Ð¥‚¶¸ìf)ü KÕP/Ó³akVÕ&N«{=× û6JŒ 7Rwµb-9À6Ë{’;ˆÍ3µzd Ó«Úé+ê/ïÚdé`BÓò%ù±¾p२î¸VC8ÃÉÑ­CϺ¹TM…G÷~@r•Úð!­Þ7ÖZõz"+ê×ê7ÝÛ`³ *ªBHDÐ$,PÅ(›‰û®Q’y¯Ì*ë ©–5©”LÕB<‡ˆH @-„`È–g>@¢ù*TÎ#ˆÀËÏæxÿdñs?ùÕJÏÍÊçž~VTLJ~pxíÆÍé¥KŸÿükÿÝßýF£Ã§¿ö¿ÿŸW'û/¾úÊx4`ÄQ>?>> UB033¬ ‰Õ"ÂM`%Æ`TâÒ>ûÒíg®å¿õ{¿ù½vëy¶7 #SÓe:ö¨€!©p·òkì€Ɇ@ý¿b`*Üoر_<¼0Ë»[S·ÎÁo“®výD9àƒJ’ND ö¥÷wfkóÚeǵ.7(&·/ð{·Ôõ_¬?›É¦V ?Ñ…åØPÏ]~Š/ÑÔõˆIºõŠÕ4K1ª-ºÈ•åörHfd$¢H¿­17HDΰ”a«‰›•Ú8>äË9‰t5¬"žÙ„ÈY$iõ²šžEf º¢jm¹W¶Ž;xÚ¹v¦$04¨}…€bét‚R&(4—›—dœ©ð F6Xjª€ ‘PÑÊb´“5ׇ2? r®† @„jUÜ7Ø9T-­™÷WE `AE58ç23dG!&UPvLÕžæÌˆX•%1B¡f!96¨É#•Õõ[WŸyåÕòèôý;ožݺu»˜}´;=øè½zï¤zÿô±àN”™îêå¿úoüÛ¯ýÔOœ+Ze2)Ê3Õj</æ#bolHѵ†¥-´ÐW¼q‚58¼œ9ÿʧn¾s÷ƒS¹òâg®)ÌsΛ!!×&ó‘¿i›1iߊ·ÄpCUäÖ¯Œœ;’B`Œ•BÐÕÔ  Itt>iõÙNÑ3X)Í:{YZÏnÔéæ‚nù3íÞ Z¶"éW^}ù$©|M±mk¬ªZ|V3;µ ¯5ŠÉ5ŒbÕ‘ˆ™ZWì7ìÅ­[k™Ú_¿•¤¸úá–·ãÐôòŠ€\¦†,¯aš.©½£TÔ– ½!—í´ˆ¡ÖP›×̵)AÈ€ 7°Ô=·`©ƒŒá¦1A1ÖW+»‘ÁÙi#3%0¥®ôÅì4~<)ÂúŒ N饺´Þ¦‰VUj¼¼-…6ÙEic±Å9OëâkBD ð‰Ô@‹b¡jˆjâ½pª ˆ1¾EUD$–ÿªèý­P­D "MX£=\| çœ6¶øW¡Š1Áf5SÉ”sªAD˜b=íœûòO}åí?ü¡Ç£ÝÉ~yþè‡w>8?«ÆEQŒ&—h´;žŒvÆÙ_ý7ÿÕ?õ ?ïäÑéùÑh2ŸÍ4Tû»ûÎPDê,CD4rL ¤OS›9ç‚–âÊ{Ggo~P¼øú_t»WŽ÷çºøŽgpŽj©ÆÅ‹¡S'ê¨ñ&õ"Q¤¬.Ášø øöuT^ÚÑ7§Ò6+çc׳CLòÐK #×+’ãÂ$÷¾v\•¢}—ÁW¶¹˜mÞÿF$®VÛô”Ýà„uûâvs÷–ÞA#Ûö)xÊÔ0M˜îæÍØulñ×tECGô’F Ñ‹f‡ËsbéÓ`ýÒl\·†ßÜec›_®Q] 7¬aE¨Ž^…­ÑÖ•>¶AÖÀÈ‚w@ÎaYŠªheÄ•TŒ€yU‡-Y  ÅQHÐ:C¸NúrÎ1ób± Â霋_E$¨jÆDD!”eá}L@5ƒ8[fV,æ“ÝÑÝwï>úèþô3³“`“ñNº¿»wåú3sËf³Ê]½z9 <9=íäÌ´;¸ZU-ŠÅ|>WuÚTÕê‰][Ñ!i1J&kÄìï¾}õ…¯ìLçó÷…F™Î‚”lŒTÔXÕûÎD†UyÔ}7ŽÅoF<Ôê0Çúm—p)bºÂSÔ¢9/¬m¯:Úä9Oéâ§RF®WýM'A°Ý¸Ã:7€½nÒÍã°ã޹ 3Q\­ÁÔÖ;¦¨Ñ^¤½@ùæŒxë1wÆÍø [m öS Ÿžºøó·)§ÅÕeŒ7òL¸ö¤t¾‚aûó$“ÀG€3¸¼kvdÄÄ=tsIÞU ÐǨây²aC{Ä#] Ô”íÒ°UÍ7CÓ ±÷þÅØëžKm„²ŒÇ¯ ÑD*ÔP¹Ì³ó`ι„ÙyïÅ"rr`Uô&pœ›HL9:ÇÕ6ÚÕB2ˆ¢$PÄè°™#ÎUKŸ‘w>)R¨*ËÌgA¤ :Þ™~îs—¯^ËGÇÓÝ Quxøä­÷GG%®DP*ÔÐç¨a±˜iŒIC8Ø?ØÙÙ9Ÿ;ç@% #†µ:}EÕrMj‘O²ƒk·3?ª½ó2ÀËÁõ‰ê.€hcšë†e¥ÆÀÒæ(°¤3C¼¸¼Úôœ$a¶éu¢V‰@7Å] uOåS ¶alsdX#gÀ­áû´s²íçÛ‚a»¶ë‡Ûl [ÞÍ(N¡–i´}œíå_Hò-#&®”¶ö"úÅ-ů£MôRå˜ô»+=±Cl@¬„23ƒ:÷ÊRY" ( ®ô6d±YMJgÃ#´êñ4ê:Žñbj–v$±Ô¯KëÖˆjÇ‚4QE!µÆzcN´Ñè³éùT@É–¢³«$€TAD{•ˆ$A,fÓ"xS V9*Àì !kÐÚijG#fª‰$TÞ9Õè°ƒª ¦D̪AµŒ7GÔ9ªK9ó@6BGœóƒ]fEžóãÇ÷?º{w2ݤGGä<¡ÒN¾—9®æóÓbŽŠcÌž„ª”‹bwwº?™8HŠ€> PDi$Z\ºRqNF@Fd¢Œ¦;×/MC(wµÌ§†œÏË9¡T4ˉLI• Ð(Dâ#Ù­@†Š&ØÀň`ïyc —Èçµ ÐÔz¦¨É•SDDs埑qŽ”Õá ÈÆ`Ö$pÛŠ «Iäæc‚¥=nòDJ i½GWXušd¢Q#&鯅×l颢c™@ܿި;ØXç6µtš_?hQ × ÊJµ’]“/B1 zùµ’­ÍÐ0ö°óKáÐêZÅ^À°ws7lWý‘˜Y¯ñÙVn©_ Ó¾¤®©MS euk°_]&–pãvqc×9k9ÝÍ:‘Ö™­ë0%¸úõ[hoý›¦¸dùUAdùNÐÈ]ó£ÔiuÕÚƒ±¨Ë 9qé2J‰Ä¢aù£„-¦4ÿ ¬;ò³¬7‘h½¡kT@ËG\·/[¶€S‡ÔMF`žÉ;2 ª†HQ,˜ "£SuHNDÁ X$s$ª¦@%xŸE¶€Jy°X(€Åð‘P…Ì1„нóÌŽ‰ÙÐya>Ûýûï{õå—•ÆONOh^VWv§*e¥ÅîîÎÉ|ÁÎÍgó³ÓÓóósF,ËÒ{ï¼øèaY"B¤„Y}rN!~†¸r¢-##SC$‚Ò9ñY©åÙ¸<™ˆ\¿}å3¯¿¶mGŽŽ¿ñ›¿c26X( €wyÃ’°TŒG lÁc ä…Mv–÷®³)¤#5¡ºBØb|ˆÑ9iÈ72@T0PD4彬“A­žÐeHIü<òñæ„»ÿi›EÉߨJÁ Hk¨Q}õ@ž6n7Ö1nÜé¶TVgÏ&ª}¼*»×+íB~r¹wÔ=A§XèƒlÃíÙâsbÍ”à6ãPiÑ£¾Ýº½HÞÕÉ×Rä[£.µ˜X5†Ý„DkŽâ5UÚÒ7‚è4nýµÆÃÌšéÑ(KN³†6è ­w´>S‚>øo0ÞúBdWcÏf†`LÀÞ±A`vDhfL˜YUDƒ¨: @ Ïœ!©È‘ãÌ!€ŠÈ9 ¢•cR˜g€ A4DhETãrê̸Á1sP…X¢™ Tv~Æ~ò¥¯|õ…gŸ©,;<:T)ˆ :9|÷½;¥›–eÁìÎÎÎ"S}éàÒá“Ç‹Åbww¦;;Î9@0U£f„P£›«E£~ŒÓÐu¥¦±^CP2#õVåZf¦Åg¾øÂW¿úÅŸùÚŸðÓ‘§Å¢¼óÖ½ßúÍ`F¡ROry\ÜÊ™2àŠ¢œÏ3L’ñbo<ÏÇ“o¿ƒùþ—K%á²úï`]ÄÆ%GQ`d›XUižIÊÁM •(€‚¢Å¥»rèתoÈ–I]õ{+ú˜0aQÔж/ìðC®¢«uÞØXõ ØMŵ¤èz%ªÛ׳}Q̰êzÑ`7ÓÏ.„éa8A~ý‡‡’ Ö­™:×’1¦Ö,öHËz7å ¬ÃS1ÌØû ç­OSuN¾ö°zGÜÉÕ[Þ#´¨‘P·åQ‚hDËK°$¾¬Á€«Õøv’H?뤑õkd ¸-Þc+´ý°ñSýpóv“Qž2“E‘CP@r.úõW`æ]î8S1µ ªÞ;…Å»ï½QžÍŸ{ùÕÝK7ÊJÑÎUÕ1{À2„™#¶C¤¢ "ÄŒ¨ Š¢êÈ)j=¥%B†b¦Ž¡{ï­;Ù(Û=˜>šŸI1òèa5Ÿ[¹ØÝÙ¡ UP…/]ºBȲ DÍl2™0sUUׯ\¹uûöÙìâ0ÇY•#8$0Y^5ªu 9+ &Ë\*Ú?¿ü©Ç{g‹Ùìt1ñÁÁÔBùäü½¼y÷O~é‹?ùóŸµì½{wïWåbo7{<ÿðñƒühŒfû—÷ž»¾óÎÝ¿û{‹òStéêSVÓ­°§þ§7IÆA¢«Ùµðövò“²œWVª«Ì P_Q‰Ch2Óq·´ IDATÖø@Zët&­j™iMQÕµ^ÄEÛñsûõoY¶@¯aç'Çëvdû4ÊV£ «“IAÓ;¸ù³õb½_mçچØr|w{òcË?ña‡ÒfÈiÝò2©N–r\׌Ê£Á"@‰5¾Ì,2L\ÔK.Û%j0D$’åQÊÆQ9Ku¥Ÿ@XšÇÞÖ&?åþÓŽ“$}Põ]YaÄ&Ãj—Ð:êœ"AF&U©D…JiæL5pæG@¬Ìbœ£Ü{ÿßÿýß-ÎU1{éÓ?>¹ô¢J`6@TCÔÎ"("0×ñ A*Ç.Ú¥1qQf6@¾<Õ|0“0/çšOòÝ Þ¿w—`nÎNŽ(ܺñlõø”AͱŸççG' êò±ßO¦î{ßýÝ»o¿??V¿»˜9Ð#ã iŠ0w¨1.Ä<YEPåWóÅáŽ?y|tï —Û×^¹ùü'Oììì«X¥0=Øyöù«‹w¿ðéÛ_ÿs?'nqïÞ{zúd:ɨ˜Ÿ~t|øÑùœ8v§ÏÜ oþàÝÇO®\;{´{ðrîV÷æñ® ´\Pjf¢Ý±vÖÏÒì,«¦Œ°3¯zÕŸÿ‰Ï>~ôþiÁÇÅäû§/Ü]ŒMtõ:Øê†ûË@¨ hE£.åëÏŒ%+Wà/5tòë†m#ûdsLù¸¦'K=âì 5ZNR„^4i%žK⨖ʺ”´ìh–RñOó1–žaQ5¤ë_ŠÔ*›ñf,j™S£‰O[ÇÎs ’(Ùê`lOý/³‹`5ˆ±´ûÅu"–’|cMÆfKPÅ~v™?Ad´øÛ´ÁmÉav¥Xé,×J™²ÔF¸¾ ÑPk©l†Õ=°È:-Gm0±c³èB&¦q I²u ;8ØêÔšnk­ ²zÌ Ó@Ü7Ü¢Õ‚®5q·÷ÜÎ.xE6$GOÒ FÚ32Ÿæ½$*‹=‚#eÎÈe *†Æž½ƒÇ>üޛ߹óö~ï½âh1™ì¼¼wËù¼,Ï ÍÐ!æˆ$˜±C35³ …™dYBFD®ªªDDœóÎeHÆDuÁkv~~~~6G­n\™ÌOߺq…0Ü{çÁ«¯¾x~|¨ªŒ^ªÊ‚€„P‹¢X8ïvvw…ôðèôý£ßzò¸·3ž/n\»¡&™WÅGp´`{»9Q(ªãrqîÙ˜Ìå¦6' ×vOn\:üð³£K—oÞ¼uc¼?µÅ¢š-F£<Ÿds—ålšùlT½õæ<PaýR\p=1á,“mlívX‡ï٨ؼÝQâr¯‰@r=™wƒ}tsjÕ£8€èÚ¹‘œ^MnÉê»Ñ ´´•fK£=áÇØ£×Ù›•U\Ç¢n‹]~ú·›yÞpk„ˆ&Œz°· U¡HXV D0 ÌŒd"Uµ)bY–ï¿ÿÞéÉüwî\ù”ï÷{ï>ûâËû7^`¦€Ñ ŒˆL,>`D0j&° D*ɲL-0EË9Ddb3Û½¼·“g³c¸vóÕ+×o(–ðê•ë×ÀOM‚Z6rWoÞ,Ô<ñh”)1Úý»ï?¾gv:™”…šMF;{çq|,³âñGo¿õ€B¡¡@-ãŒØ1;B¸´¿÷êk_<[ÌŸæÙEªjÁDe± ¢ª¨NNNv¯ìåy>9àW~æK7o_ÕbþðÉ“Üy¦ì³¯½¸;q™·¢8_E©…TóéÎ.Ž&>÷a- cOƒÔÎ>‰#ín(«AQ^‚!hXVbèƒ2@¥-yº½ûGògóÆš¥âp°É°Éܦ^ç!±ío°ùZÊFl#sÛs·cá.zx—XѦd› t·áÀ1=P!Q—nÑ'õ¾é…ÃË[Cé'ÙpYZG nwVOظ]ôaÕ;`+®ÍšõäÜ–åŠl¨Æå‡j®Õ€—AËot9Ðv:ä§Ñ÷·¦ç7»èîö9ØÐND õ\t3RÎ<Î LC(UJUcoZ!(1åùh¼çܰtO/Ž,Æ–»«·§ïÝyXœ—&Bœ£–&A !¢z³*¢ÅÔg£ ‚€D¤bˆ.ËPÌ Ñ›:1¬ÈÔ#¹ÌËèàÊõ—_þÌùÙÉѳ/¾â˜NŸT祆ÅåËûè19~òhçú¥(H aá¼ãqvûöµ'g‹Îga‘gÓÊ wGžgåý?û¥Ÿ¸²?98]¾rûìÊå+;—÷p F2ÊF“ÉÁ£ûýð½;¿ûÍ7ÞþÞ{~´‹´gòP-Œò¹Êbv~:Í&·o_ºüÌUUíïŽÇS©ŠçŸ»\ââäᡉžÎw¦Ïß~Ùóo‹ zŽk"† ƒÔ4@c•…kå@=Uœà¹ËÄø–ó š") ƒ:¨˜pä‹Ãã÷ F+i@"¬œ# °Ë0ð¸7˃M`%¥SèÉxZsж¶mo¢ÕKÿ%êµX#þ¬vcÖ†€~XÿÓÛgØ5N#Ä“œçVÜ A¶æºú½µV¦ït¬™[3~ÃUTZ›¦zŸZZuõ…“›êÔ»¥-¢-;€žD¨_°†h[-¶ÉewkZ×ôÉÕ®‰% vÎ ÓKRoƒ”ìÑÖx¯¯T’]³¢ºÕеUÝn×\¥¦¤˜®_´rúZ’<ÍÞâ}½ôZo•‘<Æ+$n›~¢Ÿîïö>¶(Öþ'ÔFÎ_¾4E4rAMÈÀ{_3T1b&v`\!„£',èɃû/ܺüa™ŸÏ`¿r'G3©J7žŠYɘ1#˜©šZT!;'&b’y&"•`jB03°,òÖ1÷˜¢ðÁ°˜³óÓ±¤ùù£{èÀçþîïŸ<<Ê÷.Ñø2„2xï€D „J hg2>??eGì\–gìæ„„Ä@UP Lp°?ú¥¿öËϼò,èÑìø‰ï^¾:;=파Ȉx¼ÿ ìœÞ[§åâ\\6uçq”Ce3ŽPôÝw?ò{û9UnÄ×_¼í½g™Îý‡<ª &&>CO–añ¨(92Ε¼*.ÖñÚæÖ=“î+ñC1³zÂ|rÍN¿2ºwó¸Ú;ûpŒ?uLû ‘Óì˜ËÌï‹êÔÕhBŠ/Ðþ"ÝVòDíCGaÝç=õplÉÝé‚öÞSo+†=q˜K ¼El~ðËÿÖ¿ëò,sŽÙhʳ˗öwvnŸ?ž/Α+—U•”åé}·c<Ow'7/_þ'¿ö¼uçGxëë?s㥊ÅiuRUgêÚüîé{‡óÞœÜ|%{á³a÷šçkàrÅÈ£pQüzç HÎÚý2þ{ ÅÑüèøÛ¿þ©ƒ¿qÿ2~.# ФÀÉ3ikœM['´c‘¢^3m^7/i[µËë’ž-÷qM6£m$<÷ÿø”FßòGÅ‘\ÄÙbç–¥ÑO]ycûŒÙéÃ0¤Þ]u}ñôÚ=Å—mÒÖŒÅúÜÔšFe=ê§ä‘À%«Î’ÁG´Ö±c)Pƒá̾Obµ½~"y“ûb(Ú˜õI1Z'7©g½¶µ«Ã@³8ÖNùT úÿ±ö^±–eG–XDì½¹þù÷ò¥ÏÊ2tEÓ4M6IµÚÍôM«5I€F#@Ї€ùÖ—ý ‚ô#ó£/™0ÐŒF-5¦[£©&ÙÍb±|eVú|þúc÷ŽÐǹæ\÷ÞK²³¢Xy͹Çì±Öе¦šî‚­•cë,(DÅ 1˨ÔÚ/܇D‰(ËE€z½á°o1¡ç‰K³§Ã­c`DCZr—+ÔDÄ"DŠ­0¶ )dÂ,͵öÂJ‰@{’bT„¾o­íœžžžxF·¶nUvoÂÇo¿™å|pxfUøøÑ‘¯åîkßÿÞŸ|üäƒn·ßít:¾ :gþ׿ù5 hµàã{‡Û£ƒÇñ0FÁ,Ë6« #I2<=ò>øäÝÿñ¿ÿo‘¼s®y•¯ëwªž?öºlÅŠÕ)/¨ïä¹×íÅ ]žÅV¢œƒøìqC +[wîüí_ùöK_þWþëÿâ¿yûG?ü î·mÖ¯8F&Jmœ‹M’8»æ?P›{påóªu MÆ‘R, lI4 Ž9&˜Ko_$Ž…G¼•b¿«®œ®ýöýöwý«ßF½ÅHÆ„Q(£§#lgVr7JNoÂÑjM“‰Íò\0šwe/˜lc°‹#ÌÌ”–/Zè_T®Y^Ô~)z|i¼l½“UŸ7)GÛ¯´Ô—IèwrÀYë‡ÒqN”µ°HËŒ h€˜ß‹/¥aSfnËD²Ã¹³P2{Š)˜¤&ËÂí8“Q"MFbýò8=2=S³Ú¦qØû´\>¯öŸ¼¹°¼¢‰T€GŽË%Êh Ùcé9Öè¤ò- %z—Êzf'KAxNu$¿ % Ñg,¢ع|öèqƂĵê°}üäÍŸ ?ÿåO­¯U²œ}m?~tvÒ5¦®TÅh´©ÕjÊ MX÷êµoýk_ýú¯©fKÒ,N³k/&ãA­Vm )<Úx^ͯl°å›Ws7xpÿRàùƉDÃXAžå'§Ï™¢¿ö»ß¨Øëwmœ†a%M†yJž1•jíäd€ÊÄ2ˆÎz¦û0~v¿výsÞþëØØWA "# ÓËÄ2”¼²8E…ˆ„9ˆ€f’ª^»Ôûì½Â&4$L£ñ™"ì‹é±‰QÊä&Q³éaóu|éÞ›ƒÚÇcS¥v¡tœª´ªÖô¥-r r—ÑŠ# Ç‚|vÓXÑyË%$9øB Py5Xeº°̇³àF)rþYQ¥ÿ>·]•?Mf¿”WˆšxFæ?þUâβu’Ì25Ëò*dF€.å%m<ÁK8“ü<¿iÕÊhp·XEGFw´ÄØÑ6.-AIÊ’K‰`—þÊ[ùåôåJ²€ÂeN´°²Ñ,ˆušþef±sÅÒe{”¹aŒéÿ%r^A€ÌE€M N=`pÆSÎ¥6/ΜRÊ9Ƶø!‘RZ¡´£°BWØH(ò„ÅZ €,¬5‚ Öšœs¾4kÿóÿí9~~ÔîFA¥žÅ%Ž£ÁíW>…d·“ìÑ£§it<8<ºÿñýÝ¿V'lí57·w»gmôê5v7ü­çG'Gí?øgøïýý¿ ûlóõ¯~á+Aóú07aÕ;{øCDQDŠ÷ôéã4w£[[ï¾÷óh…a-:ëvúd÷î3ûþûQ”ðÛo~ðþ¯|®¾·Öëž§vvÖú@ÆÇ(:"ÅÌ €ÎAÀ^Ý«‡h¢³NXwÿƒûÍíê›W˜ÐowcƳ«×÷ªz¿ŸžµíLBåü³{Iïa~öIóƧÂõ[n;SáQ$"Éj/Ȳ· ‰+r($"¹úÓà²ñè%­/Oã9 2Z,'q¶è;ç[¦ Ç2nx"1e-”\ÏçÙ„_lÞmÕ˜ÕR?¾s(EÙûex݉”Ú§%Z'\Ÿ3ª+&æýÚ~ÉýlÕf¹ø»q&rGf@™ÒÀ –ž©mžs— ÀˆXŸ-m .ƒKc›8dCµãôÊQºÈJÈÆ)©EþË4!¢ˆ9É^y¾„//±â›ý-RzrÆÔÝèv!Bv¶Xî…”ÖÈ…‰Á9ðt8ÏËÙ²ƒŒý„ÙzÔ÷Lack5‚eB'b”°E…ֱͭ3ÚÁ,MœµVk_D†Ãø7~J¦aª¡ ƃÞéúön½Ù Bõèþ£½íMñ+¨ýÇŸvÛ=¶.Íݵ›7ž>|ÐëÆšüª§ë¡g]ÝØòÃЇiæ~úÖ½o]½á…|ÔŽr¯’ÚL‹Í’X5+äù"6É3ô¼„«a«ÖªùA§Ý®TëµF#ô¹ßÎŒGÊ÷ÀÃ$s?}ó^”fÀR­×_¾ý’ ™ÂZËk6´ï>»O…'Ý»A÷‰9Tªßm7ö¶ œ¶Ïúý½½k{ÍýõæÑIç0²mçTžeÏ~ݯï½V¹ñš´nQ¸º†EŠ€È½Ç…Ç` Å23¨ÑKœËmf³#C—‘¥Í¼¤|©è{à9c¬*¤ ƒ¡‹•68Gw•¨˜xÊãJm³,òv¸‘7¹óeå·_ð¸O§èe•tgų¹dL/=;ÿ%¤mþCq…/Új¡Ñ/º²ãõÁx]F¸øŽšÁÜVIF€Ðäî§l/´ì œÄÌ…@ ÈB³ºÏ î¶äK™-ˆ¸¤ÀWd|Òø\1¤ƒÓ€P#2¡ðÍ/³1ªà hoZˆ€²œ“\‘ŽÓÔó$O3ÔZ‘¥BæœïR­©ÖÚôjëíý,NºgOÏŽ¤µ±Õn·³A/ÏR"Ïhqº¾sí•Í«ë;{œU.Vˆ‡C+‹TÃ*º ëòuÿ‹_ùÂõ›7|-Iœ¶ÖZëZ7wkì×MÛi¯×Ãõ+ÛуÇußô;Ȳ4=>y#<ù°±q£q틸ùWÖˆ&jjjJõˤüRš²LÏŠd6ånG€ùhþlyzKÁŒWØêút%‡¹ÊœKMº”0k$.2D@O¾·ô$Îe™¬”dLüØA¨œz]"0©$|f„+u¹.ûhÎÒä+kž{û´×™+á—:`Ÿ“ü<^|hr®¨„, ͬ4ãq&‹ys}Ìù¼Å²[b–ÊXÄ&p+÷$ ™A„I ÏçYn³œšŠ5üR–„uŒ¢p˜Š#'DFD*b·HƉLŤ‰üˆKˆ=xð¦/YckkswÏ‚&òÕF…=}ðN³ŠZÙ½«ÛýÞ@€”©×ÞÕ+­Gï}rcïZÖŠ<9x~ÔîEµf«„Ètã¾äÖÙdÈVâ^ôü£úþ§Ÿú6n*Ýʘl‘¯;æÕf¦ “?$‡ À! iž÷|És \£7†VTç«Â/ÿguŽülüQi þ—ùF\†ÓŠœ£-ÅÅ£}ÑTÎI8Ìåßwaôe°”1n\ì<+?âüÀ¨éôò¹®Ñ‹ÆÔçÿ÷e;\æÃ±È!Y¸ˆ8¶À"¢‘3ká’{¹k§/¹œ;˜7çÂ0w@“#&t„  ç-rˆ¢’B ”ñÌB9ïIx&6’y¼Ý9A.âuAܘ9X8*„Yéwù\/=™ÉR(…!§ØpâŪ c2"BrlYˆu⊿* ÿÑçqÆÖ )` Ok£•g4‘°Ë9O­‘ždïLâ„YÐ1[çlV_ɼä' IDATÖZXÛÞùíßÿ½ýÍЧŸ½ûÖzkçáÃgÇG~ÎÛ»;Y–v{gïkô’aß(ËÎöziœðÉI_¢ago=pyG Z‘Í-ˆ´šÍJ5Œº=aC*+)£Bêv»k•*)åû'ñÙáó?ýÎÿ«<ïk¿ùíJ¥Z«®ù¾çùÞöÞÍúFK}ç‡"±ãÄ9q.ïvû ËIDÒ4‰ã8c6eíÉ)ÂîéÙÚzÓ2öņզÍsÎûkMuzt±Þܬ}ê嫟w†®6š èSŸ~EëP> uýϾóƒçÿYÜ{°yç«ûŸþõÓ¼:ÀŠC ±tXæK2 "“Š C̪ê4¯žÙý øyFYß´ÌJPVyÍâåœÎQC.]ìD`ü¤ Î3„¸‚ÓX$¢J²\"#LæOÇtÊ_„çk7ê_Zµº-¦ \rÐgÕ‰]¥%]‘ô'K:”K@=“¥ci±¿4•lîW [VÍßM¬qæW­é ÕœuǬ¡ÞØU&…ìù~…ºhGŠÝcUœÖüd]ùÈŠTó‘ ÐôX5æF¡FE„ˆQ•P W•r<±Íl>Ön²Ýñ(vŒDs×”ˆdÎòcfäc–&¹˜ ÐZ‘Ö¤˜sÎ1¢sl•ÒÌJ18ì‘2Æ B,ÄyšöƒŠB¶RD®6È‘¬è0ØåÅYæ˜Ù‰8£ 30‘Bç M$K³d8ç˜Tm};Š…8O,´šë$œÅƒ,Iý†çâ\¬ÍÑ’õ9µ•jÍ5êÚ7í³³0­5×7m’$vÌQšÄñÀ9'žïèF½e‚zuRŽÙeiàûÇÇ_~í›_Ý¿º§•Ñ•Z=ÏzyîWû¾§TXÍìH¬u¢µŠÎ+¾ÓDB¤”…©vû§íÓ§qg£Õ#ëÒD˜³aÇ÷Èf>P£Ñôï¾tÛV7ëM¿âéÝ+{ƒL´ñ4ªz³ÕÚÚê »à’0„°ižrØMº±«ÄGyûŸšãŸ¯¿ôÍúÞë]l&¢ŒDyå€CAeˆClo©vÓ<ÝmÙ®zrëË·†Ê<éw>:‰Ï² R ÁÌ ÍVVŽãçKtÉç Fó"ÅÑ3ÈËá²Vdé"D圙ea|åtšÆjÂ%Kî%@ú¸£¸°X¦-í/ÏÃ/Û`ûº4°±h8#@\þá/3Owçü™­nLkPANÊÔ±ê¼Æ‘…Yƒh€R¢ÃènÆrhýqTö•Ö“Àl@7ÊChˆ4¡&!à"@[£FADRdƒË8ê}4²\`¯# µ°¸qŒ8|+8=+fGÓmãHÊ©,F£ü2FôFC^彥ܠ§BÔ¥_‘"Ç”»ŒGÌ¡–€„ D C›§Bâ@@'‘1µ$É@$IQ´OÚ€£ ªžñÁÅ,Šs¶Vk¯øbçr@BÒ™cOkD"+Ö( BsrÒ©Wi{oL$¹@ƈylÙwÕ LzmãI¥RívN =+y' ŸÄ¥y&ë[{ ÙY§ï,W ZEæ‚,•óÁ¸ó¥WHv¬œƒD"„¬ˆ &Q\ð¤a³9v‹÷ñ*$nÄïç$ÇÉ’À"ì¸È—‰€P™ XŸEh4Á&£ÚÑvG#÷X5Ž Džú ÊÈöÔ-pѲ:`rY+îZœ{Ý]DÈDà #Òì@)OÀŒsÌV)íyÞxÂÈ[Dd $,Ä ÕªOÄ„Æí¬ÍóÀ*瘔1F§IJDJií{®8$D;8 (eˆðÑ£‡Äœ=x^kU5âö段¶A¤}6Œ†öú[©MS'µÖFݯv{ݨßs.ÁjH.hÇG93ƒ³Y4L£¸×é¦ÃÔ÷üa¿_Y«x!K~ƃþÿýýÑ¿õý‡a½nÓ”²$Í»ÖvkÓÔ&Y¶q% e4xÕJ0¾R ™™9Ž¢õõÍAûþzHŒËræã£ÇHÖ;®V=Ï«ÕjÚ—ÚN2tºîRŠÚ'½‡OWÂfcg{cs­ßí­·¶n¿t'¨T®\»:Ì¢~÷lÿF₟¼sÐï¼/$NlU²Š_Rã íî?¿yvð…Û\¿ùëGk_îZˆ `å¡3¡¯´kû„­«•æf§AÅY©5¶·7½;í·ßy?t2D_FòŒI9Á|ÀŠÈ™¨ï¥Ü;Ëüúxù9c7†KÇ Îó ÿZr¡3Ýõ­¢–æ­ŸïØX,”K©Ès¢Z‰–rݽêŒá̧¿ ±2·¾1 Îy!Ãé°§sþdÀ¤NŸ¨°–jXÿ"±eæB/qÊÁKðܹbf ‚±NFÔ7£OÔ/¨7ˆ–бT 20“Hñ@ äXÆi}‚c!(ŽD|“^›Ç&ã¼¼xÁuFS«!)*öƒôÉÇ÷l£DÉ ÛjÖÛݳÇO?\· ë ³Y¨€mŠ9±!Ž6·ÉîÆKb…»ynœMºZ‡•ÐGJÖÃ+y&:Ô*O«Æø"šâÞðÁ¹øwþõSm\_k„yž6[õ£Ã£ÕÖÎvœ¥)¥8ʲ³(óæ8gòÂ\ûœ‹C/Ié““¸?¼wû,ÚºòÞæÍožè+i¦ QÞ?eàúÆ–sX(F”SyØ (Ð^X5¾7ž\$¿²˜o)[=_T(Ž”²²%¤‰C0¾p»re+øçù‰3ø«‹;_Uó^îÅ+7­¥m%ãHpI¸ø²q}3Ž¿@ã²HÁ‹ê…ÿª®èE¬ é2ŽFeÇ7„…;AH€F‘Ÿ’e9 €‰[ÇúÖ±EÄ0~­LR‡æÌe.RÑш£%µŒíf’:méa™ƒ€–U…©ÞXÉËT¸øþ­†I³:q !“h…ˆ‚ hs›zž±ŽkY&©cëXXy E²ÌYÃ;±c&Ð!ˆV¤Ù¢0+ € 0Ç,©RZ£F©“’ƒ“lØ`–žï­ï ‡}çÜÞÞ^4L’!ÀàžïÓéY§?HlœïÔ×Ïü½ÍÍÓãLC¾^kÖjõç']q@*ð•E—0ŸùÌg¿õ×ÿn?>¹wÿƒðÙÑÓƒ³a¯ïrm³¼Ÿræ¤ žVkÃ~7Íój‰aÝßKbl¬íÕÖ6mÆ’&}›8Öõ\¢”EƒR¾ßîuYBŽ6Ê"åQ×ß*Õ=–3¡ÑÊ×!§;qæj:>lï¾úµÚñ?ûøíw¾ùw^=>:ì÷Ž>;;‰yÏëu{§ÏîÞº±µ»kt5uâ\vsw8ŒÎ jCPqyJÊæXyÖËs9î{WÚ‡û·µÒ¼{@MOrkÓöY'ɬ!KiÔÕ’ù‚a³&™Ó*ÐÆG pˆ ¬‘pBÃlbû9ÙTã/@³•ç¨ÅK2NƒåKö?€vüÅÏË.A½Œj:ªÃS‰dYê\VˆËŒ{o¶?›jºÆÆr ãÓ°$fÆQúרúr[1.IPžœªZúêQ !ŘŒ'l/¤¼–éÙï•Ñ–$=KﳋqÛ¯¿±Í ˆ°vPˆ÷Q ‹ Å‘Íx1fh„µÖAºL¹h»¡õ¾¥,^_Ûp4iB9M­B_%`™- :f.0-¥4kCì0ÏsD@ â,Ç·_}Åʼn²ÒëõœsÚhÒrÖ> ×6«aÓèÊÓÞc6~’DÚ¬7+ŠvÉ(]­¨0Ц{vv°¾½_i6E£#H]:¾ûÑÛï¾óÞñããîi§szæ’,‰â(IypZýÔKD®¹uÝ«EƒxèÕ×׌Iã¼Rk¦6á(­åƜŊ1^.œô:]0Mȹâk²ìœ²Iìò¡Êã¾s)$lmµOý òñ{ ;÷w?ÿ’öô½‡?}ùèë> ïôÖŸÿàÇyN ê8Ê“Nï³wo¿ú7~› ›$92)רêjmûñÑYo0jß÷dV2 è$±ýƒÄ¥ù0>Y»òÒËÛ¯=ÏGjSˤ~³®ÃÀ÷="QJç Êó‘50±ˆ “µ&C6(f©!ó*‘õD_p—ìÖ!º$WŸáœÇKøÄ¬lï%+‹ #»sµ­ó8‹àã;4‘9NÞ2W~-¡:–©ïÁ¼ô3G2k^¹ÆL…õXÞÏ ‹ªqöØ~ùŠ&Êš²˜g:»PlK³ap/¬*‰!ÌÌWÏŒd§²jŽÇF8«WFA"WšOƒ‰Ìq. ©ØWe>lbµ*„`:H…Í.0–÷‰^)Rø2ùÀH$BPðØÈ"€ Y c„Âñ Œñ•"ç2†ÑcgsãéŠÏ{k™Ç®ºfrÎÙ9ksDÒZãè§8'™VÊ: Š”sˆ¤$Ëa ¤X‘ ªµ I%¬ÕœÂ~; ‚€™3›“¥zc½ÝI*TªA»}:èõ7÷vr¡©‚BíU*ÕF|/Ø¿rL؆HÄ"oÿäGÿÝ?úOÎúƒg'dµ6GQµV½¶»ÑjV²hãÕϾÆ<´½øøé³+{ý,fç¢Ì¶ò\q.+Êak”&q(R¯ÖòÌ5Â*AW)`Éó¸×>ŒLuÛ&h(‚z€ „ª¢”?¬ þ‡ÿò¿úÃ?øÃÞI’$•ÁovÔZøòÏ|÷_¾õÖ[÷­§ˆ´Êò¯}®†&“ÔYŒ»)³«×Ã@Q»ÝÛnUm’ç Yš¢ÏSIjE›ˆƒ;öÕ&ËÁGøèþöîÞæM½kL+dÖ…£³y6dI­(b%`„ŒÕ Àh…G’9¹ÌLÀX)—Ô5.³BÁ’xÝÏW·â–ñ$—,׆ÉÅ8·¾Î-†8Q^Íš.­Ðj®d ß@ =V< ŒúGœDŒÍ¡4Œ(0™ æoš©yé8‹fΪ\ŒpÙÆsÞÁ©Pb ÏŒ« ö×…Xp!áü`áyœgœï “ÈÙZSü‚hͬ9s•8´bWœ…œ¢SÖZô ¸ÔæÜZÛ0^%!&Où&ðÖ7¶œµ93¥ Ù1)AFdpY¦”NAØWMžˆ¸4I=ßsΡVy’5O\?Ég'‡ûWï(¯nZWoù½Cß×gÝÁáãƒöñó½ôÚÖÕÛg2b”ŒÑ*_Œ‡÷>&å=üèɰ/ åö+;7¶¼JýÞûïûU›åÃZ­îù~X1›×v IœÝ{ï¡Ò•½ÛâÕêè²,é’1©ÕHZ˜•±Ì‰eÖ‰ÑÔjºÌ=ÑØ‹ãy$,LõÄ:/==~vP S¦¬Ú¸®U΢  ÿð?ÿGÿôúƒt¿ÿÿÁ°ûXyxtz°}çßþb”öŸ?éžUÒ&={r¬ýV»—‹Ò›ÛÛ ÚGG&¨Ü¸ºÓhÖÞþàc$¥…źL+Í Rk‡¹úä°ãyX äì€ÿäÿüáÞíMÑAye³‘%§:R­½Ú¿ÿk_IE}øá÷[µJ=$ßOœ ßù‹£æÝßãzƒ dWY†}pI9Ž 'y®(ˆ²´¦£eÞp È“@˜Q— ãÛ_Êi4nE;ëJòðU¹4ë&j&å3#Œ‘f­ñ„e<¾ƒ#%‚¨IÌÀx,tyÈû*áâŒ(~â 4ÆãQPP@ÁÅî¡3 ”A!(pÿ%8· s ½“‹«¦t ʤ'›“䌒&Ò– ÅgÒ~xš[‡“±ŽIì/‰ãX:ãw9j7¹dѦGˆÏt¢4Î!bGvžéYÜîGþ 8º-‡g#¶æ¥Ùwà4Cd? <žùŠAŒ€/ìü?ëÆUš¨¦™Ç£Äßà$(ú&$`aÏxrVD,ÌìœC£´"ràÝ|éõ0¬z~„5CªX\šu@kOD²,aRHZ”0";h=£…À:çHO7¹<íw‡¡©šý,‹ÁX‘è¬7융w¶w}ã»Ìíîµ|/ˆ{ÃwÞù`go·U*• Íl·ýÉp0¬56”6asÎ[ÛëÖº8:»ucûÚ[ƒAúìÙ³õF˜h0Áš_IÒÓÀ3[1 µè4Îss­ŽìrBB ~o¥Nž£d0èn®5¼f ´‡*ô ²$ñX&5 Œ5«ËX¿å¶še(cå|Ö¥]èËA` mòpÙdò¯.£"²º9 :¹òr…rþšþ è¦p‚¶ÏÆpÍ炬ê2qz XþD€W  Ï–.ÍÊYŸ—‚eçOLßdæ8 ëE,'/&€_*äaAÆ[:/ås*¤˜È‰t„ çÈ!‹!y~‘£ëòÔ•Ýý;€ [I'N$K’¡V@J³sÌBDDªèpìF–sDEDX›8¶HÅK‘<å SšAœ‚4nß¾ãûµ$M?&êéƒç^ n^¿1SœûÄÍj’…ôøþsíÕFãîË·òïfúÿûî_:‡*Íl»}‚šúƒôÃO{½¨ßë??= ýšgóþé—¾ôUϸáð¤ÕªuO\™ÀT"¡HC©0Ïœ°ÛlÖLžg,Y«âm5¯ JšdT =Ϩzàrüô—¿–G™25S¯öz'uÈÛÏš ¥Ÿ<=¼ºX­5Q?YoÖ*až@øµ_ýÂwÿð©A¼ríÎÑƒç Œ€œÙÆÖzGî Qo^߿һ§‡·ö·»ÃçG§XimÐ9ç4xŽñá“çÛ[[ÛW:Ý_kT²8þáŸþä7~óÕÓNçèùÉ{ï>zÔi¶*i Ô><ûþ÷ÞÍÕ=;«ìå Ìù‹×$loÉÝŽò¢5Êܲ»4‰e.•oÕ4*—–á¨+C¿W!‡íq>ZJ޼«Ž gÐ×™-“'6™HcÁ ЊA¹ÜÆ3ÑÍÁAÓCEž˜NÊE\ì ä¬Ì²ž“ `’qBxIqÁÜG•_¬—ZM• `ø¥ÃÙ¬µ.r€ß—°Ü3}yjÒ*öx Ur©+4Ê’R,`„­5FgìD!‰iè„Hkgsç¬o´ËeQ9'"¢²XÑ……#Ž&ÆŠàK…“(""`c|­ wy±£<ƒštîò8·¨='bó¡Ëœ Eq²Öjõ\·Z êaƒ%ÞÜÙw^U{Рк¼ZñŒÑÛ[Ö:&ÚÜÝÈ¿ø+_Òÿû?þ?ùðì´OÎó*žVa§ÓÈo^½®Õ²´ûßùþæfó‹_ß‚\¥É°}zh´K­R*`×­µOØkµÂkWo#ÊpØ%¡/|õ«?ÿùÛ?}óÍ(î?䎾zõµ^oåOÙzm߯5ž~ôSOrÌõöî®Rö¬ÓñªiúéúÖuÆþéFš´+ù­—®Ô[­£ÃÎá³Ãõë;M¿âÄëÓ«-MprÚ9‡ïïn4z½~òµŠîDygH¤Y1(ÔÏO†Ãá›»žÉ{A­úÞÏî_Ý߸s÷ÖïüÍý—?}öÃï¾yëÖÎoýõ/!¹ýôãz£EÍÛW_µé…{ûâ´Æ+õ*<䢇hŃsÉgW­xù…l²“ÍnóUÚYÁuŸ¿7Ìc;N®äÏ<>Æ•äÊO¾PWË`ú6YX ÌFy^°“­b¼çµ¹C='hÕ½ju]&tœ`ø4"s¸Hn/Ý0#)¤Ìà38à|‚0Má 2†Ü–÷r¹D㑸™k?¾µd±¡ÆqÐÊ(Cf:ÂR˜OÌ—ú¥ö'g Çi #®´R  ”I$¶J)"‡ µv¹³™°µÎ8›Ã ÄIaæ&("hH ›‡ ”(Ï÷˜4›T6Ú/ÞklJ䀨± |/Žc¥µAÏ<ÄÎÙ¹Þ0Å&Q´ÑX;~üÐyí4‹Ž\»z# B]5¾‚ŠéjS·*ˆ3;èôNÎú»[;û[A«Aè:ØÞj‰`’Iè¯5[×Zë~½µe žöþƒëúãÛ¯½žkÏÖÃêž‚ŒIª)o#KzF«Ô:N¢wo}ã[_hm6³dÐ>>ØÜ«¢Í·ßfòõöõ—q?K:ÂAt÷ Øp?V IDAT¬#&qô¤¹ÿjkûv–t’^÷tÐ{~ß_¯ÄQäœôµ½+¾ùøgïtÚ'•µõ'Ÿ<ͳìîú?hƒRŸ'½ÎîZm­ÖPІÃ~ÿ¬¿¶¶Öl€VÊf'ZXû¡u9³QŽP ’ìÝmmUïÞ¾Ùk·?|òÇüokokgí3µ‡÷ìì·R r%ôˆ¡º±ãÕ׈T1–=6~-ððÑC1ER'‚sœÍeÂ’ð~¶4â4Û¢OÂ@°ì ?¸Ëæ_acñG9Š ŒnÈŒ3Ð*äz²òlP»LmÔÎÙÔFc +ÂPÆa<åÅal[THóIfuJ“KÊïÄeÄêLNäLlmÁ9›ôâãaꭵΪþKw_æz ÈrÚ£Œ¼¡Kö_z-¨VlXaPþ ×©Ö*Ê£þpà;ýÄ&¨VßzóÍÞ€ú“ÿÝÜ审_SègüêZP ’¤+"Ã(²i £<þ$ô\®É·÷v@H3k?h¸th™*µ†ËäìôYÒ?"µµT•huÛÑÑáÉÓno½¾¹»ûä“gÌùvk/¥ä•×^ùò¯|UU‚£ÇgY~tpšç bî>øTš]¶¾GÍkWª9/ ¿þÅ+çI>¨6êoýøÍçŽ8UÝAÇ‚8 kéÉqœÄ÷nïm¼rëN”Gßý£?ùûÿÁ¿i´vØ>;=m¯y•ª ñ”Ë4#‚q˜“À¨&áàHÈ, (Â0…zq^§³ƒ»’«Ôm/Bº´ÀLÍì$ãGéR"ôéc5n³ôPŠ˜õÕ¸Åôù]jÇvþ±ì58«?r‘RÞ fýëÊ‚ÄYЬ¤]ÌžY³çOûx¥^ÜĤ|1e EßeW—Åî¢ò,RéW˜<«XY:‹›L2±Ìäý 肤.†‡¹ò Ù´Y”ëÎ5,ËÑÌ÷sœz^L$,½~³%ü¨xMf^ØÒÎŒ”R&ϘôÖŠYÄ +Çày"Z› BnYÄc£MQ¡1 8ç´ÖDÊ9`¢Qô¦Í1¢bÌ„™}ßë¶Ÿþ¯ÿøîvºÌT·‚°Öëõ˜Yƒªøç›$‰mm…!g18BFosm݃üÁñó´›J7Ú®6Užzž–L”¨z8:xtòˆƒí»/íïí?}û¸3ÿš¢\òÁÙÁI÷ÄdqšÄ©ÖƱKlœ&‡µ0xlòÓ·ÞQÏž<xïÞ«¯ßÌ’ŒP2†8jœ¥4A€¨kµÍzcç¬ÝóTsXǾd¨›$^­â¯írFÝvª|5̲(Oo_M)${÷Çï{‰U½XjÍ+.KZkõ“ÓdØM]ÞÜÚ¬†aœ%išÆQ4èõmn¿ô¥O5×¶H/ªyöüIg•ÔÂZ+ÖF¶›ÛõzýŸü“e¨>ÿêëITÿè“GQî„(Ë夛¸ìàÚèôi÷g?yÿó_û’ËsÎÅ3Õµýx˜WªjGhvU "v³e ⊚cE):›WºÑœ'z™¡ç£3·ý²Mc&Æóéø¨÷91¿K­ê^6³ø¬Z 2–Ò²°÷,âã2¿\<¾0§]…N/–¢8^¶J5ý̈ÀR –í¸—ÑªÎµ ˆ¨iÖaJ—CIË…¸Š ž=¿ç©æ˜¥±ÇÈJ½óÒá䕜Äxåò Û9`阋/öf±…ÈóÉ9h'º\Dbf&R$"ÖZVd;"$…"ŽäyŒH€¤µ&"'òÆyr:ý5cÌY»-)hÔ«½N·Çvëf”Çi…a!$Ib|–XÒA¯‰rÿøh¯Þ"”ã³#ß ¬®æà<Å›õú“GO=€ƒ÷ÞíÚð[&ܬ¥(‰Qyû ²\WÂ͵-³£+•€Hüuœ:T¾ñªÝhø“7Þ¬ÜÜÛH†mk¯¿‘ç*Ï£a·«}]Õahm^Ü^Æ«Õ6n¾º~˦I68b%ÏOœX£}Ïø.cÕh2ÂjÍ¥ÊxÙþÍ;ÕÖ~uÅ>þóïÿ™åZÊÞ¾÷çßøßJ‡ç’æFscg7Ër^ÏÁåëUOe6ËYóã£úFE0=;xŠŒÕêüŸý§·^¹Ñîµ%uIÒÖAØj­2Ú œs"yyæúbêÃ<=;:l¬×@¬ô´Jâa.ìµÓ³g•À †qfÓZMõÛÇ– ¢û÷?î«Vèþƒ'ƒ“Ä\Z­ïZÆJuƒ£ÞI%ÔÏdyr<}œÄÅqTwuZAÅU=S»²A¨Z‚½vãæ»o~§J•V+ÔÊ`že·¯îî¬Õwc›‰é&®÷øyk­ÑHõ¿ø?È“¤µÞdÛ瘻']ë*R €BP˜¨(,ŒÌÑy Ú<†ò};2íÁY1å\æöha¾ðéä*¦¦.¡KÁÏ⟲Ùíbû¬`UÆ”ƒÌå29ðq:ñTó=›¦9«×œ-®–s¤Ó ˈ¹œ/,,Á貌ŸqÍÀUz*XÌà2æuV›¾œ•µf‚³€Ä|çL|¢TLfÉ À%eÄðn.?wG¿MK ¤Ò]56ö!,æ.±íBÆò©Z̵€yÞ/„}WÚ‰,öÊrÉmaœEŒ3½ûd&NŠôJM@k£Ybk-(Af7ŠÐÁ…ÄìF³×(Ås̨ŠA/fp¤g ŽD,p–%ÝÎóΓÇOx^ DiÏoNžwr›! &•uN˜¯Tµ² iµÖÁ%‡Oîí¶üƒ‡÷×ï~:òÍúÕë{õ¦^Á@äiÖyþHwj*ŽtR Œ¯•[Û>=9È]S1€{ôì9gÉãÓƒ­×R{²¶û~£²>x|ßZ¯Ö¿§í³ç÷zgÇ{w>]ñƒn¯ßؽEZò(J³TТW1iœû˜ï]»…:þìÄCßf1a†:òø0ƒzµÀ0‰Îó¢jÅö¤ÝéõY4œ¶‡Ñ0 ª)! -Q2¦Ì6 ;§(P«·®ïë ˜¦MÓa¿“§‰§õÖÞÕÈòÉñA½QDi­VÝÚÚ¸uûÖÿòCNÕzS÷:ídØÝÛÛ#`¸sãJœÙ‡OKŽU¿½ÿþƒJ­2ì·o\[7ÆyVª•$K²,B—ƒ‡€ÁRaœÈV­PaÝ1Ç=–ôésJžÑF°Ü:¸ìi(«ûãÅåoY[ÌÓ[z&7D¦°é¼èo5X „™ÀÑ,Œ¬ˆ¦ö½Ó[¨.²RŠúaµEYžWµ@Sðm^$³ÀÿÞp—¨=Ë ÑØÁRæÂr&££%:~¾}!"(0NW¤rfÉÒéeÐè,ª’¡’C)2~YP\ÊŽ{ÓÑ]]þ\¦¢pعÑ´<ísic¹˜;ºú.ÇKfÂ] ü öä¨ !çy!ûADçŠTwaRTüKqelž#1DHÄ*w™c‹Ê9›!“3XV€/¿òÙ¿ûoü½?ù£?®Wj• Rm5Œgzݶ"Z߬$quφ@‚¾ï×L­®Œ *Áò³8/PJ©h0|üøÉg¿úRš M Mò,‰¢E‰ }U­×7üÀ* 77nÅQì{RHž¥y}£j9®×Ã4(ÍYžôz®Õlå6}üäß«5ëqtj^õÖáÑÉáÙ0ŠvÐ9j'ÉàñÃ'l*œÛ¾ËbH»Õ'2ÀL˜0*b8p• 6€Î‹-×HcWó±qæ ¶í«Ðå Ì °e5ÈTHô¦ÅýrqtkÂKµ,4u×9O§4ñ\îÀ³™Y¶‚œ‹\tÚG†ð|­ê%ðD¹”æõüÕiu9àNÊÒƒé[f6!\>¬¸z¾ÌµÜ‡AdNç3—j]FHÿÞÞ,Ö’,»Ûû 1Çß}cÎYóØÕl’ÝÍ¡›4!²ACÖ‡ ›– Úücþõ§áÃ,À?"(Á dX(["E“Ùs7«ºÙcUuUV•™/ß|ç˜ãœ³ýq‡÷¾{_fu“zYY/ïq"bŸ½×^{­y;ú©î•ÿª³ö¼Œ¨ÁÏ/Ö8ÁRDÆ@—iš«÷á”Ì?­ C4Ji.8€.ËBpnŒf@†$b%"爜1Á@£AMÖæs/ÜþÔñÍk»éxØhîÝÝÞTšä{»A­å¦6N²,ÏŽg3“íuÚïþøÇ››–ßÙ»u“„¼w÷Á÷?Ÿöca­ÖÛ;¸õæ«­NkûÖí“w4Úà2Í]ïðÃ÷ìΖ²”2ĸm4Õ[ÍAÿèìä0‰ò­½°Ù®2nPomtÉ€µZ«³ ¼0tu¯sÍ8uÁ)†ýCq288yô°¬¯ôûg§„v<8ãNÛueGïÿðÛÏß~Ñâ|<3ñ@Û6KT¼½Û±lß•ú£üè»ßü.rÎCE÷?¼ó™_}Ãv&<…ÚÉF]£ŒWkÚ¢„°æ£Js#:[ÍqäXª,Ò¼È2£ŽÝvBßæœŠ2ql!ëõú–%vv¶“8;:Ùo6B×uúÝÓv=ØÜìôããÓ>3AvO{ï|í;ׯïŒO£·Þ¸ælmy#CG:‹rŒë’ø“'…¿÷EÃ›Ï ÎCpžŒ/¦œ+VÓ½ŸÝNžÍ²fùßÍŒÿ²DüÃÊ·WЉåDíB(ª¼/Ègè‡Ás˜ƒ­{Ì/1¢™'¯X½|‹Z ˜\Ø's‹65x‘ãTiÀ¬³]º¦U~'>µ©°‘­þ¢ªV¦0fq€ ôß”>•¬Ÿ­@È–7X^¯ÒçcU½%JVxÓ«¶ÑO’àŸÛþ"N¸”Êjž½·ÛTDŠsI€ˆ!è²dË<")ä,q™«!=³öFC„È€3΃É/Ma´¶mfñ³“žkC©3ËTêR—Í–·wíÊ`¬ã~ªŒ*c ºl…ͳ‡?6'g·ÛVb²í[¼¾ñÑ÷~øýo;Ê“Gýh4®nšDŽÇ$ÛÛÜtÓ”YÔ¨×c#²tÐä !GæÄ™BËJÓ¶|¿QWnQ:n`»VõFÝvmÛ¯1KEIüö7¿#¹ýê/|V-maŠ8IÎL–CI÷A½-¤ F›Ò¼õÆËÛÿä7êÛ§gÝF§dmm>¯ l¶°Àóö?üñ?|¿{:b2œÈ«òÞû …ÖÈ„¶ëŒË“øLr_ºÒ'mîÝýÉèôøl˜ÚÞèx´È£h8ˆÓaÿÆÕí×Þ|ñ _ø€N³´(3"ÇÉæÆ RŠN-/Í0Šý0ÔZG½ãV£µ¹që¬;88;¾²»ñóŸþ\÷h?öm™²üqÑ=ÙÜê¤*-òIºN˜¥Ãƒ‡ÇÞ_ª½Éšu˜y‡-ÀKXøôxUÅzĪé)Ì=%ç>]”|£êÓ²T Ì"Ìå);Í>äülªÝês„d‚1ÛfÎÚ«ú‹ ;ãNçG‰´R©JS\/áâS‰]×Eôÿ|'£™ï °YiD ý†™4ÁÒ¡Ì6µ)…(a¸¼d°xQ/I©©6—ï²Ê¹WÚT͈±Ò2‹u%7ÁÙ<š%ÿ \ÃkŠL7œ…è_iwà2ãêB«e†;ÑìùÊZòÙÿ¬28粫f%#&9œÀá|§eݺÙÐØ(Œ6F€šˆ!€AC¹MÀ8c‘1Á9ŸØ~!c„ ' aÒ5`ˆ…. pÁ©(Gý³h4R9o6lW™ÓÓc›{¾ãJÇnŸží+ÅLYwÐ-'(Ž{6w™·Û­£Ãý÷?|/Óêèàäæ­[wï~$mà6%Q6>‹@ð°—Ý££Ü¨ÜÆ.…uÆ­°Ö‰²œ3“ÍÎÆ5Q÷Š(VqOr"(ò¬—&EVQšgO³Lªâ?ÿÓ»ß_¢ÔQ÷3¿ökh9XNN’Zÿéïþî•ë7ûÝÃþÑ g®‘þxEÔÚ ¿öi@Æ,ÛQ¥bF5šÍT—œTžt÷?º×ífÃ×6ˆÄ$p÷á£CǧÝãZ+pÉGpüÐ÷ú(‰-U+‹ »_ûúŸõ«ßN2ãÍ’`¥|·Ùú…·>óæ§Q:¶*â,Ï-Û \-{0!da­G£¾ã7‚0ˆ“šÍ¦Ñ:ž…®|åÊf­S{þçÞxÑ<÷sÙgÿôùý'ÝÛ/>z‚ ¹µ»[¤ãƒÃî¾ûá8mŽz‡æ5Dà HUåiy°ë)ˆ.¦ÊÞÁåq1½EÀ©ŸèÅ&,³Î¥"–¤çijqÕþä$@[ ®Fçgœî‰ITÕ«s³Š|tî5ïOÏv*šH@#€CŒ¦ò¿„k3úyp>p4Y¨JzJ3ÔÞ˜ŠÑìß•&Ÿª`&xZbƒ/äÐçTH83¨¡eš<ëõ,ΤÑy%µûW[åsùEC˜™ŸÀLÕnæÍ3‹±“#gÓÀÎŒ1b-7êoãg’ëŸÖäÿn</VO+w‰œ%0­´.4ð©Ü¹†@\0Î9Uj" -ÇfÌf(ŒÊ'þ¸0sê iñ²,µ6–%AiÆ$ãœ3fÊ,ëng³µ9?v]îØ¢Ù¬cNÏú€Ü²me˜pkîv ÞwÓñ /¹ÛgQ”¤¯¼öf»]ó]úÕ/~î¯ß~ûþ£¶¶7$¯çb\’ç8–ÎUÔÏdZÚ5¬×˜ä§ªÞòãî0-ÒV«Îê0”ƸöÍ<Ïó<ËóbA™?úþ÷¼÷>ÇnP;¼sçýÀã—~)Q%Ha8´¶[K×µ­«^­ÂÃðN ò¬8:xÀö=|O á(FЬÜ?<ÆJeCA(κQ÷t0qÁfŒ´J’†ùŽï2–&ŠœðêÕë¿÷ß¼XÛºý¯þÕ¿NKÖÙÚáVc@†~½æ8Ž•‘e©{½¾k“´¨ t#âF½Ðï,‹ûF‘”V«Õ‡£^Ï y:r—•ܲj Ë©ÿÎþn>«Þ–i‘u?Ëó;wðÃývãºSïL´ðæéàÜÌÝüÌž~+u®.·«}†§æz«?—«^_ üAÕ)+®;sëqúépí¢±§hÍ‚—“îË­´Ø\;bÕÉVŠ“ŠîÅaê¥à Û¬)7Eõƒ¨ªóWáõÓ³!‰síïsÔ|y5y]oà²/ºdÞdÉüýröñJ= œ»MpÜî?x¼u­n1¡õtc˜èÁCd€1@†‚k3óFf&NÉ3O *ËŒ8G"`ˆ„V†;ls{ãÊõ+—£Q’¥¢Qß³l[ƒ=÷ò|„õv§Ü*s£Ž2u0Š8 B;°½~<Ì¢’3~óÖõîÝ{÷'ñ§?ýÒx<–Ìe= 0 ÂV«¸²¥É¸\Ômß­ýQW`:¦2slŠË¸ÖØ‚Y¶=ê¦Ýƒ£"g×_z½ö(@r|øäñO>,“Òñ}/²¼xtçþíW^µZ–åF—¶g‘Évv6¥_Gi§qRª¬,Kä¸4„ñpØÉHºN:iÒÒnž•™:íELXœM þ b”gú`ÿøùWnÙŽ‹l2 Šñ(µ\Ÿ»~­)¥4ǧ'¶»ù¥¿ÿŸœõÒ¿ú‹¯:~Í Â$87œ†X”¤ÇÝ~Y˜F³éÚz4Ž%°Z½iŒIÒ”KÙ¨Y– ºãv«ý~1ܹ² LõO•`ý³±ÐN®¨vc§qsâ³ &X0,²€l×wÂ:Ÿ¦¤8S$¨"æ qí’x±)¾È•\÷,<³8#ÎèÔËPþ:-ûù(]€\ì<ÅÓêiJJ•`!-›õ–ï„NS•yLdúݳ¦š"ÊÓ„¡I²ŒI§È¡Vk e:ìöú^C”EÂ9÷BLÇY¿?Ç9¶ÖŠ€ äT}ÿîÃ×?ý*çˆPÚ\K×¶µ1Yšy>«+Y’ãIoø©7_Ñ;ßûAȘÀ¢ZÃåÜÑ–íøA‘úCå›Z­m4 ãXá†ä*'œÉF­“¦cmJDZʢؽy•x~÷Ãü°)kÚõýzà1-Êh<UæJǃ8÷Q’3ÎX…éGÕÍÌ·Æp¾\êIb*¹-RedôbVÉÎæ™#¬aIÌŸšiýl&'káÕïœÞŸú8³K3Üå*Ùœ1ÉfJ=ˆ+*€ù²¯cI-e‡PU~ZÚ^½X9Ùù~ÊæôÙõ‹Öûê±m"@\•"ÐÅöòÓ® 3k)œs{P±À¸'ÆfÕë’7([“˜˜…C¤ ¡ˆWtBèBaJU ì"?lájág–p±ÿr±?Ζ僖ùÁ³vB¿œ¼™æq‰I!g.q£sÆ•ÒÀ@#BÆsFqiÙ†rm šƒ$´€%¸cŒÔ2m îh D& A $ )8çŒúó ð˜æO[È7[ÁéÉI:4Çg'íZ`>zÀ¸f–{Ôøâ˯mÛš9Âæ¯¾ú¦mYQ©USh”iÙYÖK£~góš´±Ñj>ÚïF1½õ‹_,u4$ñh¬ r×c`¥™A9oY®®Uf¥”ÒvP¤ i;FxÞÝÓ0Ë ËÃN zÇ'ž»!šŽŽ¼Áƒû é{ÂuUÿ‰ë¶‘ùÜ‘ËaÉeØð­,Ýcžm¨Ïö(Ge™ΈhÒ††ËQÃÓûy>NÓ-Ëk:ý~—ó¦.ñì8âÌ€ Ïc/¿úœç»NàüÕWÿº, 4hcúág*/T¡ ¬‡ž¥‡ýX8¯J©þpà€qÃFVêqÜul×õÝáèŒëòå7žÿôg?óö7¾þãï|¯Öl5oÞÖ¦4e:ˆºI…õF£ ‡gQÿȵì-MŒ#3qÑ`¦&4é?Û3ËV@¤Yâ À+tµ)ã :¢²8^;ͧŸa3™´‹Ü<³>–E`q$m…ÄB…"nhuzu¹§ãEšß%<¥ Þmf°øbCyr‚‹‰ü¼îŸÉ¨­ —z2y®5} Ü|»bDzòŸy`G$cªl¹Goª}ÜJ ?‡‹Þ>Äfæõ;šYgû2@œY£O,Âù­7ù™Ÿ—XÜ–×휟 ¡ží`‡ðýÜsnB ÏÓG¨ IDATÉM`å§üB#dr‹pdÈ9Sº$B4–6À Ÿ¥ĥ΋ˆ1ΘcpɵINv·6®n_¹‚iÅTY*DbyQDÄ…‡û»–-Xežô²4ol5y@§Ý³/ùƒöÖ.“švv6LA?>¶ìÆÎµ‚0Tã,ËF¶%HZëF­®â”£l4jY 6Ë3Uóh<•JÏJ‹BX"/É­u˜Ý̳xØ;i6ê&¬µ7wÑò²B—ÆBôǧ,ëuG-2Ípk»ÓÙÀ²¿ŸûeÔ•akÁö¶¯>×íDñ06³Ò6¥"“[–p}?`~øQo4DåGýcËèÈ!F†ŸtǸä ç½}ÎÄãýC&êèðTkuõê .Œ¦Èã¡íZ'gCÂå)jµëÇOòW^¹•kõµ/ÿµVÈÍ3çÑá‚Âò\†:R·fo4Úe™ŒO{\ðN­y™Æ%ÞhÔŒbõF““ÉÇã“ý'§G»/¼üÊ‹¯¾ùoÿï?úçÿÛ?+ÀJ¾8¾ÞØÊû……ïƒäú5˶2ÒlmƇfÉÔbÝýFŸ45ÆEth.øi•¦ÏÇO÷ö‹ìÒGUó Nv^Ü\Z£\Ä”.¯ ž±.YêOTÐò ef3Á2ì)Å C6ç}U9¯OÕŸ¶ÃaÅQÍOùÙ­FW@@+µÄÛKt?.ñù\©ªq ¸¿x«ý—é“ Õ7¯rß®êMöK3§ZCÎCƒùOƸQ…bRZÚ¨éXµaÒyôÎGý>SŠKÓٻŌ D(1fTn¤p ˲Œ ADi’ÔšÊЂдív®·¯JÏu}žJFÚÞ()*§¶[‚›eYذ£]á–ElÈ. f·êv£¶6Úx3¿zyÿÃ<ƒkST\~ýlÓ?ç"e{‰!2@ø¤ ÏRÜк Þ…XJZYÛ¨^.σ'«µ¾P°óÌ9©´ æcέ\–5=×TgH³ƒ¦ói3ÎUïôYãèBq·bG«Ô]æÂù58Ÿ˜e•ôá\`v*p5y*Íx|†!YR1!ù˜,™º70¥•Òç'@0‡aÔ===88>{ç»ï}ÿ;ïÿÞýŸÅîn¨Qrn4im ãR1d¸R(,™Ž¶ç sìšGà¦ã²øu×:~ðí-#Ý2Kk{»0 `aÍEy¢ò8©7Za³6Šâl˜À·¯]½±}rüA¯;ŒúG­*¾6¯r~”4jáñáûŽp¬°ÖñÊR˨2/Àõ\R%˜œIåZ‚Q×v¯¨2éßÿñîï{Ñó76$ìîíiœ¡íx±aNØ"ÛOF9æq½±éÔœ"‘yfÀ\'zTþ¸²W%ƒÈœãsFÜ ¥HcXp(b8Û?‚7^ÙØ¼ÒØhGÃÒílÙÂP)]‹†9Y<ˆ¥N[­¶Ñ2»ûàðÞOlÈšu_§#ˆÇY"‚FGFc9åÂuYBu³BdI:oÂìŸD` g>£@dæ¾³§yÐd¤f"òëœhdŒv~àòÃùå«nlTÕAš•5Œ1B2f²7Ma«…ÀE" ®˜ øcd U*†§T3nÙ4“Ðφ£!®áz^2\AgZU°9£c¾ÆH„D` ˜•¨JiÛ€¼B ÎC@‚³axr4xòèøáã.(ù­o¿ÛÚÞ¨oŒ˜Ý,‰ ÆŒ%]C"# D6Ž"› à˜û[»MLÖ|2QœæÒqËBÒ»;7d ûÇÞáÄ{½ÃÝ]ÏâgyÌÆ&¬5Ë­ºÕÙØlw¼'ûï†}ÁC/ ŽÏúõN3Í“V{»,m˪åYÁØpùFFœ²J'ÙáqÞl׎<ËŒ –ôG*MêS‚Ù½~sWàéàtg<lV"‡â£¼+{E:,³$í·6öjíí¼[ÒÉÓÔè"-’º+óD†AËÈq‡ýSbÀ%ì–FHNŒqCP+¥-G0ùGw>ú¥/}Þöü2Ûv‚ÀG’™.,FXRp`(0Ö6±@ !YÙÚl×7ÚI2æÜxž-¤Õè´:W Oˆ½½Z¦K£´/Â‚ß ˜´ìöÖö8mJyôøQIä5Sè©À9–ì4ôj¼ÈÜ­ºCIsóÅÜøI–d#ì4:£²¬±3é„ÁaPdc$$D…0ÖASsƒ¤€äO F_þ–Ÿ±ÔžóÜù‚“Ò'ƒéiÕñ\7eåuµ‹ †Í©¬ÏL'} Éðpp†¬2.öÌ +‘CÍ,[fS®æ|t »àšvyÿrí ®?tÆgæ‹H _QùÞESøjcaAkp4cŒˆŒÁLòZ©bò)¥6%C 1‰i2ˆFC­ò­½Ý¤ÜIF½~òðúí›a'4R¸HȘF”Œ[Z—EQض-¥Td2f7|˶eQ¤œ[¶_c6Déa©)JƦ46çÖ6w,£˜°Âv'l_ž-Ó$Ò*\j$°] ÄéYׯ·ÜZh±"ïk£Ûµ†e9$Œ#šÇÝQZ<Ì'E6t,a ;ïgëììäšâþ 0úÕ·^·kNY2¥ŒÛ¨C–0VpG€a¸É@Ç£´ÕØ)uþ×ß{÷úïüüôméÑ)i‡3ns­F‘ôâ(Ö*—Æ*ñÝZèÖÁ 3‚‚J×!h!c0Cö8gÇGƒ"Bˆ¼Hó¬‚1^ØnKåÂ2)WB**óÍZØë%éh,³l;IÛµmé ÁNÎT¡Æ£A÷ôqÒKœÀeyõúQ`8JËæR¢–ša¡Žüè]uûJ™Œ˜ã éKÏÖŰ,µÒ•0ª÷ßë½ýÍw~û·këú•½ÃMƒ|ÜõdasUQ-h…Ñiyðè0}ü~xeÛ8§k9o(Ÿ‘›±*=ÿ;ï§áÌw’ iødc=K¼ŒOÚœj‘.ÂÏë>a>õwÓ™ Dø‹ª)øQñ[œ¦’ƒ>ÑÅ~]/úÌ žR±Lü‹fÈœY—‘`°$7Qõ[¯$ÂÓ6ÀdØ ñÜ:Ùœ§*¸zCfHUeš ¾ÎÕ¥g‚Ó¾#vî,³f^ñ|âÙ¼š}û9uªÿ³Àô™lu `*]…Sº.Î1;šØ˜"Íqª÷Í”6ÄdZ+¤ ƒtN4å¤Ó2ê“êrœæ™ô¹òÂíè°î3.NÔÛ"éÆe>в­½+:ë;ŽÛ¾zÍñ{ƒ³}ßÒ$ĸܾqCvðƒŸ¤£ˆÔ•lûÖ¦ãÕÒ<õ•ÛÆ¨á8 ÂöæöƒÔÝLÚõ'ñAù_ú_ŽW©Ñy”ô{ÝÞÙÙ0ÓªåÜàÄMN÷îôßÙùñîVóÁG£n.™+áX˜$c?¬eyä…õÇ'Ýw¾ùîVýò+ø“þ}O½"ƒçGö–buޤ™DªÊ”Íeß&N¼4G2”d*ZVÕ@b*¢¿´È"_æ‡Lzªlþj¬ªšMe¿»ËpÐbÏvAr¾Ú@DZœ¶¯¾}+,Æ*+©ª·¿*qÁºæÜ~y5<…!Ì 1®Äh2!1Y[3¬“{°bäS¡ÝðI§¶¦ø ?çs…iãaZÚḬ̂BµÁÕûqua ͦ©p©7Cs-9³¬þÇ«¯š3 Lå~ª˜µ%ÕªÁã]éÕ=[X°ÆÃ)…qºw•{ºüª×Ó³›§5å/þf²Û £hf §PŬŸ4¹o ¢(ËR9™é0Ê”ˆDEÖvÙ ?âÈ2q:êuOýF͘²TY–ÆPäãxÔ-”NÓXù–´˜ lox<üË?ùÊïü£ð ¿ðùA/j5:õcZÝùðîöÞ-eòÏ?÷ƒÝûî;w¶®>÷+_ü•Ïýâþ×¾uï/¾ýÿôàuÿÚ/p¯A€+í.–´WÞ–K*&ôÔþܲUäl žàWÖµp «„g¼;žúЭԺXEê¦ÅnßLz} cøIRö…u&¾Æ²qÁ®y‘½RUf]!qº²yŽUù†OZa"^È.”¸2°W›Fb%Óvz°] K@ùê[éÖ¸DõÄJ‹êý[ùK%±VþfŠtHÅi³*…R%Zä®$BÆNi×Ä ‰dÙŽÅàúÍÍÝ={XÚv­5÷þÍ¿ùma¢x¤u‘e™Q¶´¤ä¶Rl{ïú«¯¾X mÇvT¡À,‰ð7u®ŠL2© Äiš&êø°»µ½çx5ÆE‘“´¼âÕÆ(Š™”e^(!8•–áFé²4DÜmn]õšÍÇûO¬8k6\øv{c¯(μ_º‘FñéñQxAà$9ãäqÇ Æ?ºçYVYäAX³@¸‚3rœzYÆp ¨7üQ’}íÉáÙMGøw~p÷á²Þþù^þëïWHÛ’Èx{{g0î[\*@~txJ 9 ƒ ÉÎ9›ºçΙ&y÷îÃ_“–ë—e®‹¹ßcJâi„›Ñ(ÎË! F.yP«gE>'ÑøÌäy3lrת‡õͺos˱ 5|ßÖ‚fóáÇOFýxgw£³±{¯ˆ?÷ùϾöÚ›ƒÞ‰î‹·^õˆ‰ï“†F 9‚qÊGÇÇZšo÷£OúåúFóúµEv|üxk·³{u/.ÆI‘ÛVèeŒ‘‚kímûñ{w°ù¢ô´”ÁU$3‘Ñ:|¨òp!,Òö׸׮ŠþUéù‰HW…Bó,üzš'ø‹ÂïÏ¢¹vÉ?].×|Iä©XœÃå € ½ÃêÛhi7¦¹¬WÅÏœˆ §  ®îž. ˜ª-è¤ÎX°}†›G­Ë¹žçt¯Eɺ•½Õù¾+ÖFÌgK V-+Á*ƒKŒ,VL¸Ìå3Ö”´H,wŽže†¥:LqñØfÌi¦™žYÀŸçB bˆh MJe ä•™ ݳ“`ëõ¹pü¤×I…þfšR ØŽ mΑÛ’IóBßËâ\çäÚ–äÄ(aûÝ–œüø:–ú¶ÊYwZ× l8ŽÏ 7‰Î=/°,iùžíÈf«^‚#ìPºŽqk»·eQ¤yâÔ!°}"ŠF”•\  å׃À»GW¯]¹qýf³Y#Ê6·¯©’»õZÒß×åx8¥±±ýZ­<ùøñÿ»¯hÅ·›µo^É:ƒÁ0+‹GwN£Ï²í=X1è÷T‘*KΩ£ÓáÁÁqž[®çIÆ*¹ä•VŒs bŒÝýèýR÷ólw‡¬A—ãØovÂF-‹‡ZHžæÃèñ˜J…ŒÉ 67ܼƒ>1¾ÕÞh„›'¬¹ž=:;4¨ÆÑðñþ£Vs£Y •žÃäO>®u:®$®nk²›Í&‘Žó{…2¤{½ÕÝfÇ®ûµ“ñ@;íƒþàõöÈdi–;žïº usÇG§®P:K†£ÔލÕYPß~îEhï2zÎ̼ð¨U…Ö¡ŸMvíY aªòÐ+?æ§”™üÛjK<åè“ÕE Ù Ö+ËÍÂåè4o•Så ®è’Îh4ç ’©ì÷ìgY„uÿÊàÜ‚4<ňDuc¡óQ Z´ÁAX¨– ËY=“Ø:ûV:¿Óª·«FÏÛä³ã€ffª€3O˜J­³ Þ9™òãšç†6•Ë]QÄ€%¹m˜Û.ã¤-ASÎY©²LÎãH†Œ&Æ ŒÑȹ0D *@e¥¶ ±ñxèJŽàpd½10°ëW±\¡$Ê%Óe•,qdáúu/xÎm ÆãQCa«¹ÛÚÚ><<‚v¶·Z­úî•Í(fY~à×ã<òj¾'[K¯ÐÂöˆKvvz`sN¤lÛ!…y‰Âò½z裟gY»Ùnt:©ŠÆg£øìƒ-â$ ÉÄï}ØÏÊí­[Âr[;Iš €…6;tO=,qøä¸n;fcÌ‹øãGÛMog·ÍtžèøGßý&÷^¬0+«f{®6Š9Aøÿýå7JâšPØ6s,$ |ɺ'=·@)%„|üè0>9ñÂzF4õ ˜f‘Û¶«Š8‰i<.’8ËtG¶#m‹7¶®¹Î·ü49%e—…øÖW¾ü7o7‰²Þ`˜«2I3,Õ÷?ü÷xö°{xßs•ºZÓîµë¤iÐfY”å#dÁx4Vy*€rdŒÀñx¬Ótäï~[=wÓÖúùÛÛ›­k¼©îÝýðäøM¢^oÔƒÚí+[¡cÜ{tíù½›Å¿gùM`™aÖ0p!×&ZáFDhpÊ3dK/8åGbçzöHxn Rá.ù¨¯óÛªòÜÍ$«¥Y%rÞªÃEÜÖàQçs;TÅ—£ ÍhA0y!«]É;Z(€pibvª4Íè—–á9PuùaÓÉ&6ñ```ÁÆgv†ÍhJÒ‡\È*›hQkÓ,l7(–6‚é)Tí *t˜I›‰•Õ”—¤‘´˜_?˜ÕŸ Ëu~°ËòjÕ]·\˜!¨\6Xá[~˜‹hÍ7¹Ñóü¾Á…ã’Ûá(äY’FEVªtä0–f¥R”§c¹v{[Zœsnù Çby1<::Ù½zýññO6nïèÀq}m0Ïò¼€FsóôlT” 5ÄŽË­²§‰go‘'užJËÑeºWC ¨ßGÔ¶Óö}?‰»ÉxP$ãF­ †ÝST`lšÔ44 IDAT4ŽƒšÇLéºvždŽŸë²ôlI€y¬‹Òòl,AÃn¯æ…I©‘*3KÚÒh$NGãAVÆÏïnmntú½î“'‡Ê”y–×mûù7^F;ôüÆ_}åú§“¤ué”­Ímà!(°d©” šÂo KyËF1ãðGÿö›a«ö©7_DE©̲a4Æ,ËkA­àøÑ{ï6Û[µæf½J[Ä£S.¡HY©ÐÏÇùâoÿÇ/½þÚþƒ»yf¾þ×ß;üè.×I»µqû6AƒHqý~·ß?­ÕZI2N³Ä<.<×µ ÏsËFƸg{¤â4‡¾mÛö Ó”eßùúÛ§¿wûÖU×vããþ·~ðãN{ëñÉÙµW^þÌç~þõ£çøõ·ÿÿý{}{û­Ïº8bà3f‰Á|‘¨^Tç(ö¢säS}ÞçƒÄfó4\ÖsCð‚!ãÒÜÀì9]Mÿ_,hV°Eç3FÕ 1 ,— ­€¸d*ââŒÂ4Œæ2A3+Ì©ÙãJL{~1H†•cYñÏLÒ…5fô—4ÿ—zœtA™MLP*\¤\]Xßó«Í×õîëq+üÄ#­yå<‘™5o+;^µËÏ>d9-èÜ‘.M26™)«n2¢|"æ£cDHdŒ1BB(´6@¶”µÐùâoþæõ6’hL%ïzLgA-ˆ³¢{ôdûêfI‚²û÷îݼy½ÓieY¢Œ9=}T¦\ ïêõ[&ŽF'ªð»nÒR2+°ä4!*ê)e¤#ú?Ri÷ø´ÕÞŒ’Ôá¶Ö8秇O¨Ðïï½ë·_Ìɱݚ_óúÃÈ\×µÓxT„ã±££}?¶·vmÞæŽo¤] m†v’PBæ9ŠLzµh4*ŒÛÜêHi?||E1gÎd¤e§EùÁÇûÚíkÛ›íZ:zÑÛ_ýîÍWž/Á|ùËïüùŸ½[êZolopÁ¸2Z•%2ÆmÛRæ¦DΙçqjFø/þÄü#ýÆgÞj4võÒaž!GÛp.¸ô¼Àq¼Îæ¦RÊö0‰†ãž$öðþ~«z³1è÷™ÕH4¹õðö+Û¿ø÷¾ôÿë?íöΞ{ùÆæëWã8 ÏêuWÛ®e‹$ÎȈ8*šM0†ˆÀ¶íé£Â™c3Û“çi’·†ÝƒÞQúñ÷Õ‡ÛM0JF#‹ŸœöÇñoþöß¿qóEqýv«¾ùþñ× ¯ýíFƒ“¼v“Í”ØÏo@DSq˜q’—çW°¢Ó@DfÐÚx4{êÌp]HZ*ÚËìÙâ­ÁÇÍÊ&Ç"XKÀ9â±Ôð=Úô¬8;-d³¦$[t»\;1§x.ð®ðY‚á³5cVšüLWNŒI&‹9-4ÅRN=ïm¯›[éJ± ³_9-\QvÍ÷¼s3å§lh“íé’q†¥BdÙ?±"ã ‹åözÎ+eâ¸PFΕQÆœ !c&Â8-öˆLiŒ²lDz8S|øäÊó÷{éϵC'<@¤³ad9ÖíŸó<·ÛMùªp 2ªˆ[¶ç€Ã—R+á ßu|ÇéÅ#Bùxÿaج[BÖšÒèXYÈ…àn½±Õè¨+œs¥˜19'Œ£8’¾× kƒÓ”Á×Þ|Ó ¥Ý `VÍ©5²<ëõºžë ÌL G©*2ÊOM::Ž{;užŒQœœtµ2Ê(Ì “¢ v4ˆ¢ôîNèlÖüN»¥ ~åϾUºÎéQ"Dóìh¿ÙÙà‚‚¢È¸à‚ådƒ” 43F¡ ;ðÓH=9>û?þðOþq«ýÆgj–ä®–ªt¤Vyf;öK¯¾Æ¥­UVdc±]I‚#ßÙ»öäà” {ÜÎ5X Ý­½[7?õ_ý·ÿ¤wôAEÑ`G…*+ <#lG£$ÍŠ³Ó“f³^oÖ²"#­‘8c˜㠉͠ÙÙy®HÊ‘KÒ*))”ç:Æ(aËa”åÊ0É:©»»/½üf^Þ?½ó½ƒGOv^ùÒÎËŸ ‚`L“™ÞÛl§g·&«ˆÃÌoLó¹+ªxèNÉÖhÎ @ç”ës>IåÆg¸@½h¸^ª(ð¬¢h/$ºÏDÉÆ '“ð’’bŠ ,PwäL×ú.¢%3瓊<ßBEµôI³­ÒLF!pÖÅXY Ñ š<^°RŸõØ~Z$U¢KÂxUcƒ*Ýh><†TÙGçÜX¡x:›˜t `2m¢*¯Šç†ŽK©=®Oh 5;‡ç*)9-×s»çå6Κm°Z>½æ˜øÈÏ3Ž%ìh~Ì?r©„¬þ¯Ñd9€1Œ35˜©Î,h­5çd¥`´Q¤J°QZk"a[ž1š1(5ùA¨lÁ q†¢³Õ.U6‚^¯Ço7[A«çéÙÃSUè½Ý”6pcŒ®Õn½Å™g¹eÙA£´[c-׃q’sâ–ëÛ®cç·­<‰ÆÃ´Dk«“—‰Ö…9i‚Têlà{ëZа($ìw‡v-,Š²Ù’Lb4äIiò¢PyžE¾çµ6vý^zú°|¼}óFž Ê<)xÝÓ¤Aˆˆe©P"DÀúht!Òò÷ß?ðö®¢¨íß¿ßÚh£íIéB6#‰42^)P–°Š,3F¢Q™œ¥ðÏþå樂ñÚk¯×ZY–ñp<HËA.ëu‡Èpɼz$±DÁ…´=çúë­VË‚ãžQÔ¥w?º×Ú»~í…¶)½á°ëÛÜwe<‹Óxï{ýà{·®ßÜ“HˆäùrïàFiÍxÚcj­hpÖç>ì4wNÎÒ ‘sÎÂß9xuôìP5âH•ZJIŽ[KRúÖ’çùZYd\éâþ½ßÏYU*¨'ãiÖÚ¦g"‘©²ÿàýgo6¿$ƒÆ'©¥.~Ã×BÒçYÄsœêÅ<Çéìêš*¡êX]öiéI€tž¯y¥زšvëYs^sû™ ¾UŒtÅk>I–8^°½«X½`Ÿ[1„´ œ~b$uí@´Ö!½Xnun¨ÀA ¯@dÈ* óÚ¬¿Z^Ðó Û%÷¿Úo^RT 1Öè§+&Ó­,|…*TÑ5ë’@Lî¯nÙVKB¸J7{8VÛYVÑÌâz`9爎ȱ™U—sÄJ!8c@Ä9㜠ΠbY–B†õF»ÙŽÒ|2-É9gµÓÊ"Œ4 ýϾõúW¾ò ßú7”)wðú½t”&E2Êí㌶fFƒÑ%À<Õœ£³Nk«U9„ C`ÆZáI/kͦʲdê}ëþBzÁ¯üúßs¨ÉäX*ß—ãa2éöÒiÑÚØ˜N'HpíÚµf«9'À˜QqT«£Öy©­–øìî§^×¥–¹‰LHÉŠ2ŸŒË~wœ& YÄh €qc³:›$÷ò“;w®+ÃËþ¸(‹F­ã<ßdÒó‰XisßçÓÂik8㑱– ×==ÜÙ¾ÅÁx89}6ùÛ~ØïÇE^p;³`£êdæ­nŒUÆ28¨ÁUfè½^ðyG=§“?TíTi!Îý¶×ekþ «Öpf tþWq¶ƒR ›ÞÓ…‹–#µµí„®Úªš/5¸ϯX[á|D]<ƒð¹<š—Ùœ.Zt)C%Zñ#¯€n.õlˆUj]ªþhEó¿,f5¨Zß@Ä„ Ï/âëÒ´4oX¢/D3çýsÐ:V¶ [9ž²ÅVÉ-âò=«n.AYèý€±„@¡0‡R0GNîÈ2æcÆYÄ-YÎ\Y*«³Žˆ˜ižkæŠ,aH€…ÄõšŸ&ÉÑãwnÞøÔ¤gkQGH§t d76Zžø–û"ðýˆK?¢z>ʘsÓQ\VßÜ)mˆÌ“u?›Žìãû22Û{ûÌY¦Š¼,‹©R-*“ iAµÆröôèéæîFk‹“ЏV¶ˆêu^¯MùvVS6Ü×&L‹üô(Ñ9‹ZM=ICá{`ÂÐSšuŸ%qCÖMQ“‘Ÿª<‰ –;G†•ÜcE6}çÝw¾ò«_û¯|íéQŸ¸|ôñ‡ã~7$÷Ÿ=D*QÖÚƒÅ9pä€À’›9Ǫ¬†Îc‚{BH.¤ôCßó2t$D ¬øWÿןv¶¶á¿btôO%ZЊ2¬·4aiu6Ýûð£nwØÞÝmu¶ºg)8Þ¬ gŠ/ãËßü{_6*9;9â†@z1"眵›[òGüîÿx{gŸË:q’d“L;dB ]©M;ŠEà½öö×ßÿßUº„þ(I™ô’´äB¤Ó$)Ç!''ã_ÝÚ—8&-€56™ŒÃx¼¹Ûzã3w?øéÇyÆîx¡çÙ%›áòÈÃ+˺ª|ÀÍ /˜IÓÂIæ<•b!š\ àŠxÈå_\ÕÇqq¹³Vå^«Ï'Xù[°µ¾Ä­A çã¦Ö_³ÏekÁ/UðcþVGnÉrš§‰U’ÜWQ¬ˆt—¶y+ÿ†Š=Æ’I¿nHSÙg¶`k ´sÂíËÚp¹‡öËÏ·W6-!4ç® † ~J%ce »À®©ÀDçAà 'Š'ƒÏ7é¾0¶Ãç/vŽmO.¶™ëÖF´Úç¿\¥4,ào¤ÈC¸Ö"9²³¤r©6 ¬›uÁĹ Ág­çqé¡ïG@Àà 0d8Ÿ±FÛ¼@iL6ìкV³ÅR™$IHÔ¶t‘KäF•‡ÞÉ# ~r6°Ê]¿¹ïÕZzjžwüôC]Rx¡ÙtÐh•ß¼q0FÙpDΈ@TOƃ4Ÿ6ÚZÍzصֆa¼wýìÙá£ãÇ÷êõN½¹Õny6JÓé$Ë»AC´“,ÛhÆè#o{ûvÔˆÏÎŽ›^4îv¥ÄZ³ÍƒZÜBçœÖ®È’f#˜ôFNÀ`tl¬* «KŸIÿì¬÷ÿüßßšèüÉç*+¬ÑÖ*k­›é> ±ßÑ9àhå½A Í8.†$ dÌCdR”’¨åÿøOþ‡”¾úŸýÃú^{zrOJ!„Ȳ,j´£¸¦ŠÜcN'ãûÉöÞ­V½þèÉ“z# |@qé ¶,Ëm§çÈ°ÑØâ¼ùÁ½“þ˜¿þ©Ý<·ÃQ’Os ƒÎ!—€ªxú·ÝÃn·ßïŸt™9.‹DH‘$IÅJ•q£Î6w¶_½{»ûø}ôÃ8ð²=Çïá²qäÅúK†MWÞè*ÿtËo1_^0Îò^–,#d³î€1DFÎZ®Jc­6F{ž‡ˆ 9ã\pn¬åà1TˆHqG`­SÊ0`µ0²6õ8ŽG×nl F}ðaÖëíý Þ©{!rÖjoL&iž;•C;Š”ðÞN»›7o áƒsˆq¸vë§ã¾Ñ ý d¶ÕÞÌ lnlCa$ K¥±2 7øf­Q¿vcg0t»#c2éÉF«>øGOž£öF'+Mž—ݳ£Ææv69ŒüR˜‘Ê)¬ÕÂiŠÜ­z e±¿×†ÎYNÔ¨7†£1€áX”i6 šQ=Š"ëŒ5"𤯴ýþ÷ÿV9 ®äÎc%“9–³ˆ@àP0 #GˆHœƒô”6Ú8"Æ@‚#ÒŽ1à\cK¼pöþÑñ?û§ÿd8Må7~ÚҙµÖ ÆPxþÖÎ~1žUhçž>øxwÿV-ÏÎúœÌ­[×_Dõ6C^déx¢ÚÛœµqÆY.Ùõwz½áѳ“½ë×£¸s†ƒB@/™"R¾Ûbcz’éñ´(̵»ÿïÿö¨ÿŒ!ÛÚÚÒZw6cmt½ÕÞ;¨O“^,öÁqÏó„`Î9ÏZJ¥'‰Id‚¡s€WL/!™„•A­/÷Õup½œ_?ÀK”Ÿ/Ä'.6 Warð\î&}’YüËpNªú©ùa ƒ/G玪,U—7z*YYÁñ…÷íÒ-üe®ôE÷ðªpÃY·vé²ìà $ÇhîêpÅiyaYð2§~IÐÕ_ê™TÁ]•¶àåýʬíñˆ*8€«N—påg0·¡œû¤Ð\¶4Ëê !%‘ô$çŒãŒ¯M µáœ“C΀µÆr °† Uø,Ž¥‡ã ÝîŒÇýñxÕÚœI+2'•âž”aš$q—,ÚØnžöŽGã¢Ýj×ë cÜɳãÍíNÿä8Œëíí¤ßC7î¼9QeÜ®wOŸnm6½ >êZêA½Ù ¨U{|ï½Í­Í(Â0xíµ7Æ£Ñ4L&§ggÇ€âäôdgw׋"O §Št8ÝnùãÓg !™sFgåDªG&fÎq‰- –L3O¹N»aTéµ¼"KLVF^¸³uú] øQ†>"QÐäD$ú£ã¦Å©*R rï•Ûw¿Ø~ðÁǾûAÿ¤·³³{°¹7MÒtÞî«7n´7ÌYFéXåæÿøÝÿsø¿øÕo~£ÞÙÌ{1w…s†d}›X,dZÀL™:£Û­Nïäi^¤5´í,¬o9d¨4­yjQ¥¬¦ Üð¦Ç.ÕT`¶KRÏå¡/<ÉhIéa•X=\O_Ãá°²3UíÕªdø*¼nª¼Nru«¼³Uÿ™s 5]¡TX_¯iAr©tBkÜ?¾¾ÓU“ŒÊÊhgSƒK%ªUÒ:bñ_ý+o¼¸O°—AÙ Ç$bmÀÕœçcñr3cWZ-]¾/qž¹´ïò³gÕkÃË÷É1‰1xQŒðмš¾­9~,m2=cè8"cÄ9gB¢"Ë•Vžà”#£UAŽù^‡3$Á$:Dçî¾ùæõ­v‘›¬,ƒXšRçÙ´‹fC$ƒÜ |€P¥JJ›§[f¦Ðƒþ°ÑÚŽšµ½ƒ7ßütpV1Œjq8ÚÙÜò|¹ë•É`<ì÷DšìíH!UNFÃ[ŸýL:=s: ‚ÀZ3—ÚÐdüìì¬{ýz-™ŽMZ2„ƒW_ ú+‘›Œ‡úg¿ð¶SÖ“b§³§òQ¿Áx³µyÚOúÇ]UŒšÍ†ÚTÛ)óé0×^PF(\î ˆVxïß?éMóÛw§É¤´c£ A^(ù¸ß9üãößv6óGmluOÇÃ¢Ì ­m¯;yç‡Ã zóÓØêpDÃE4Œ¹Öûû¯Ýüë¿yx||ö¯}: –XüÓ{gÿËÿÚ“œ¾ø…Ïþ×ÿÍ? õ‡9“,2må†nÈ©¨Vó_L³l§³ñôÉ£k{›7÷´³bRk6†£éd2­Õb!ˆ¸;üðÙïþîï¿ûÁÓ³›Ð·ßúìgïüѳgGµ¸Æ8^¿~mc#Ÿ$Óñd:šLÞùhòê­ÝZ1&ÿþþ? ùkÿùo„õ†É2ƒ¼(”ÉæÔŽ$$!—œsd¾3¶, pÄ—,¸ ßö«‚/mùç‹ýò\U´0<ÇOOÿòÅéb»q—¾`9¶1±_ð£žýüimÒµø¡_N~½ ©¬i/ëºsU¶Ëò/O-}™àâŸáÅÏÿ³²ƒfŒžƒZ–WpÕÌ.Ÿè›Ž…‚f5fUF)i¸± IDATŸcÖȪò]´UN'\(&fŸÌñ }ÞçùœG VÒpf6*³{¹~ Ït`œ|ßš¬±¬³h,9ëJÎ…ð#$àØÌ.Ö¹PÈo}6Œdž©³Ó¬«7êNòXªÓ³Ãétˆ®•æ#Bÿìщ;M¬ ‘åªTƤÉ+¯¿‰È¦eŠ}?ìözªT½ãÓWîÞilïŸõÆýÇQyo6[9c€0IºFO¬3ïýð§·n†±Z:ÉŠÜ4íÝ¥ÓiÿìàÆÍÎöÖƒ´£¸,ò´È!*rz3I hïÆ«Ú¨£§OFýQ2-;›»‚ "։شÌU:"Š£úGÈS­¬Õ$:;{Úü°Óé¨2Œ¼)å¼ór*•Üî]oƽGUÉ÷ïî9ÊTi‡ýôþGg†ØO>üi«yb7¥Ò8þèÁƒG%kœRÅtšlnî4ÍÎF‹Iyœ—Ãiö·OÒýÍÛûËfƒkÃÿßýÊÜ|ã7¿ù­³%Ø’1‰X:g‰ÐãÂj“OSŽŒ#JÆçæˆsÏIZ2Õ—½öËT6U:Ê ­/1®$€:Zp%V]ûÅ™Ït ¸J™µæ2ÍÎ'M^ñ9öe á^gxµn‹^‚“CpÑ»á%ôL‹swoæ/ù|Z ‘[ѬxÎ.ð0s•dJ\½ËÌû Æè¦Àl%%pK£ÁY70<»t×B"¬”Þ´8Ð%½Ï|kqçÂáØ²Ba°’63Z€;Œ±ç=ƒ{šØœF†³XÆ‘ØüÒ ãHÈ¡sŽ3Æ<©•žR0äœG  ²d‘cä{»;{"ŒÉçF“²º#dïô Á©'ÃaÆin ·ÛÛ[4ÇMã €±Ðf c…a\ko4…ï§Ù4ëߺýJPo± €ÈFe²VcQ¹ÖfxÞwþòo¬yq£îÈ¥Rzœ³Ø¶÷@øãÉôøÉ!ßÙZ1ÏMïð¨4.x½Õïöà¬×jlcYQL§ƒf}ƒƒÒ*‰ê~® Áqk³ETçaÕk¬,þúÛßÝ»ñVm#Tù8Kú¦=xg;þÒïäyR(ŒK¬o$ ¤¦L&9jöÁ?¸þê­04ºHƒQ-îüÕ÷>"~óÇ?nï\ó"qIÜ1Ÿ£ñ·¾õg§îGsï Ÿ½Vo…º,¸Ri:ÕªÆy‚OÆ}6-Š´Ló©ÚvÓaÒˆ:Ó,!¯(”õB£³Uäyùe‘(.ˆùÝÓ¡dÅÆæ&3ª^«_¿³ÿêë¯ÝóL*)Ua‰„äVÛ<Ï?y(…ÔõÎŽ¢f£1÷ÞÒËܹ±)C©Š@OÔŸÿñŸ"c¿ôõ/E~d( £§cÙÙÓÊt̾”RUä`3– ÑQšE±Wû[ö2eàÅb_æ Pñ=ïÀó âŠãV]©Æ.äç,i+­ [©þ“ðkþÓEݼԹ]ª_vÇÜrIüDμàlu€àV~@³ú|ï](g;ÉÒk„æd+sPd ÛµÙ˜’á²+óÊŠ}w3¡Væ³/>‡Å¯a-ç•; 8‡‹¡‘­N%—ßBv˜GUÏ‚´Â 9Db ˆ0¹Áw.%ÐÎ!rÏ Cu=l3 Ž1ß¾ùöÖuB†È Ÿ¦£?ÓTø+¦ÓšfkŸã‘ÛŒ›LxqÑ F£ñp¬J•¦q#òx`YƘW¤y-Ì‘ k^¿{¼±}íæÛÛ[[Ý£#U¸ÑXïßx}šÜoÆâÝ?"€w¾ÿ.èð×óïj¡„ ýî;?j·Û7nEþä£>ýé×öö¶úî;ªU*B›g‰u@I®‹4usÆié¢H .|­™ñøžÜb¸wëÕÞÉaToO&E‘Ö}ð=ï£އ#/&EÑÁÁÁF©Ê¼Ô¥.OOÉf`'ùhê¡wØl{¢xšΦaMlo¼¢­É'Ó{÷º§Ïˆ{püÙ½‡¿ø[¿<ìQi‘;ç‰qÇ8éçE:R¥ªÇQ©’ñàȯDz&„îDqÝY;!GD±ïGa­åüfÝO‹bè‡2ì´ƒÈó"þÃ~÷øÙȉ˜Œ;0®µVJ Á‹êƨdØ+§e­Q{ã­7ãæç¿ûí¿>Oôµ¿Õi·‚æfXùŸý»¿*uñ•¯¾Í„ˆ¼&2nËq- -óœqHŽ£#šhsætŽÖùX¤à¤³œˆ¬+$#â¾F‰(¶Ä-ƒÈªñG‹˜ÜµlBçc+l Jsts' 6ãÁÐÜNŒØB14}Î3¤æ¹œU…U…°pÎs¦Ú‚/»|¨òŽð«*Ló•ó~Å'’ÖêVwéˆ|¦ pÖ^F–ÅŠNÂ-DûWòpΛŒ.Õ.¨9¯é‰èbñþœHÄ*Ur™=îP5@ba5º ùàyºiÌîÛLì@@ $£@B j ­´ekÇ›•ê䮞±Ï`ñåÉ®/i‹¨š Cë†FxŽú»ªtÖæÿaó…~>³Â—75D†„ŒpîëIËÐDr$%'g,‚è‘E•Y’ÇÎ(¥”µy© ­‚§ÊÒèRérñ%4ê4úÊé‘UÚ%£1yB@Y¤Z—Æa½¹È²i>AFBz!’ò, FqÔˆ‚Í㳞QBg¡Ôx²ÙÙªÕZÓÑèðáGÓ|ôÃé/åK¿öë¿üWö—ÓÑôñaßÚÖf«Æ<¿î³¿ýîÌ—¾òy¥ÇÖJ«Ói6qŒ[ÆY²Z%Ã"Þ~­ùÖ7ÚS{yP‹Â\©“³Áo|&™Ž?þøã ªß¼}W‘o—Ú¯¡ݺýã^(ëv6é †g±åYÞôGÃTúaûZ§<ˆzÃéO~ðã/~é _ýêç>zÿñá#¢-e¼{ùºöÊN§ÓŽ•.§IRd¶,ˆ# €û̇=ê÷K#î†î'7^ùTYY>MÓüÞ½§ãLÔZ›ÓinúÇÇ[ÁQiDéÉ(޳i d8‡Ñ°«”jÆÑx0TEéGCD / Ã0ÔY˜¥^·;B0†^ÀÉ•Öha„1¹¢HR_Î9+=EaY”R2Î=fü´,ó4ÂöþõÛÏ…¡ßïöÿðþÍævÓ–°ÙÞÞ&“¬¼y½ƒN£ò¾÷ïaôËßÜTF9c¥ä,"GdRŠÚæöÎ7þNSD½ìé¨fXä… É57c¤B4ýñððߦ·¿x[ÈA®¥ÆWBË_~Ñ9G·dpÎftÁ¸CœY2,K`| SÏKI2ë`e¢=oÂsû@•PÄfœuÒÑ¥ÁîÏçÚ¯@Úõ÷.Ïv9mwÎÃ2+·ô‰^}ô—ôVº ^ËøòaŘ*ŽÜçÔÚÏi,ªÌšZ=;1Ép래³jpi; > ¹êÙ¹'Åž/X˜¾"²•tcö_KU¡ -Ííøg›§ñ°¥eÅvøÉwH@slƒÈ9"â•)œ#)C!£üÍ_?}|–N@•5Ï«òx(Àç\HæÇ…ÒäÉÈ÷£¢Ì¦¹KŘœL'†Xx°óøä˜qˆBßRäEAØŒ‹"1Êô{ã0 çžßÎ)²ªÚ«·Û$E#öòÉ€! {ùÉà0 vöji2<9é|Ï¿ýêMéóV«†Ì~ôþ»?øÛïí«¿´±»{|2øéû1»vó`ssÇùÜ1×Êfcüì°Öh1éYíÞ| ȫΞ=õj‘%U¯GiZZ qÔð‚v:/hp°zm–;“$›èÕÞûø1g¼Ùl^»v€$É£ã!XDç$_°øèã,) è’£à¬, DO©’s ë¨Ñ¬Ýºµ7™ ö·ƒ0j‰6èbض·Û~£lîÞ½~7Ï&ÌŒ§Y¡­ÕyÆ„ŸªoƒZ­ÕhiŠ`k5OzÿýjÍÖ÷¾ÿîµ½ë·>uÝ"çÂ{øèPÈöT×mÐIM¦¬œ$6ô^»³#kAY&ï½÷£W^¹ù»¿÷ǯ~ù—ÊÍV¿?™$“FTo67jq ®ÜÜÞòü Ö´QHجE“A·¾!8£ÊÖöFƜֺ2ν““gèqÔŒe^P#²aºÂç\¦eæ{üÓ¯Ý. 3u9ŽnÖ£Àó¤£9gŒZi]úA臡ՙ'¸ É"2£ŒVŠsp"$¹„cÌ9e”r( @°ù”‘BÐÆ'$jåÊœK‹¤^oìÜDôœ.3U`QÜTFnlÝ!£b:̦c(°t !6–£}äÜXÍ…à ¤5ÊI&ºÝÞ$µÛ(ô=ÁFƒRÌ‘áŒYã´Ê”ÖÃá¤^o6jÞÔQ³zÎþÕÿö/˜Ïÿâ/DͰ¶±‘‰ÀäÓ'µwv‚(0é”l©NŽŽ8Gð¸LüZ¸»õf\oÏ~t«¿ä¥Ñã¹åàÅÖÁ«Åk¡÷º('X[ÐÏ©¥^n¸qf£U¿âÚŸw@Z(ð+ê§Ê¸wµ]aú£å×C 'NKWY¾´t…^©\«ËÙÔ§jé‰çöU¼\ý38X¼Œáósnì…mc>a{y HØ%êÏæ…=!C@»âºÎvÃùxŸÍ‹BZN瀀¡[Ê…ÙjNIK1áy{î•ý `¸Èa´’¬Œ£fq¨sàW³8hieû €2G«ÀúuõwÕP «MY5‘qÎÁ‘snáÕÈÞ~û+““³G?qIH"Ì—Â÷92"³ÑdØlÇù$rÑfÌSyqýæ5í K“q7›r>NI‚Z‹H”yF¨ý¸NÖ ûg(Ë͵ëûqsV&“lœŒÓŒýäÝãk;÷®¿rÓã^šëFcëñaÒÚ<qÆH ù4E1îv¯íÜ̳²Ti¯Ÿ¤¹¿)vÞùñý¯ã®ÈdØïÔÛíÎçĹŒò†çEÖ0Ð9+µƒ±1£~?Š;Y¦sE^Ðìlð"×IšXel’µÛt’p¯VjÕ?=«5šV«F-êD‘-Œ2åÍ[[@†È)¥ÑCž`\Zp–°½±‚¡ÏëM‹œYkˆˆ ŒEµFÅíp*9Ÿ¥/Ì"—‘KB6ô'½3[py®€Üälè…œ€ á„ÀÝýëýq¾±±ºPe\0ôœ­¦¥+É–¾ÇÈ•ŽX´8êÍfEyžÏp/çœçûLzÎòZ­Vdf<™t:›Ù4)¦iÕȕڔÎZÆ8çhŒ&ÇÆãq¢„/üíVK–—ýù;¿½¸1*Laåp8‰;Þу¡q^{sÓ±eáÈ™ ˆ¿÷ß}c÷Æka­5eãæ-7\ˆ*§µH¾ʼn,ª¼Ù‹rXh/Ä­kžÕ!¾­¬ƒ Îëm–?g·>{_TúÌUx9t©ð•h–7~ +¿‚^›E­‡|,¸ót‰UÎÚ¿¨M©ª[>oÉ–Á—WÉsLNjƔ/¹M^fYvyÈÏRð¼Èš—Γ8÷J"‹¢˜Íˆ•´â.|h©²[0•g>ÊŒ˜«Ìϳæ7Î-„`«X $`Ëmcï@€@‚æÃ"b4«öÐzW³ê7fOr¢FÄ«(!!:BGÌ_BÞâ%½R–ƒ7Ƙïûä´1–,cÜ9»o½™ÅÎÆî°ß½q÷†srG¼HÏÂÈÿƒ'"j‘tYZ´šmgU:M;aÍ¡ñ¸¹ÿ¸ys‘Mu¦m°zEyVH.jQ¨Ê<¢Çi:ìõ²ææVƒÇw÷nüOÿó´¶>}8·n5²"©5Ûg?¸}ÿuŸÐ”„ȸá•iæ3ÿÉiowwÿÏþì?ì]»Ôå³gÇV½á^™Ž»g]ñÎN4Œ'IÉ1ØØÝ5Ö¸²Ì ¹k;û5›gÌæÚ ÞÒ™šf§žßB`E1ît÷ƒ˜§É8ŒÑÌ— Y:MêaH¾Ÿ9f!r¬µžçqÎ !0\øy !ò"ÅRƒÌ”R8k l¦¦¸“& |Î8 zžW–¥‡–ƒ3ÆFÍ’9¿ާ‰-'"Š›»;½Þq6è:ÕsŒol]+KŽÆŒ”¶Š'c_Æ£îI³Ó~ œ•ÎkÑRTÇ"Ï€qV›Æ˜4ÏA[flQžù¾ßét—œ‰0Œ5ždÙÀ)]–e ¡-ˬЧÆv™i4âÂñÿý÷þpZ²0êŒÏúÝnŸ•q+äýnöØËj ÜÞ 6Z›\úŒÕ„ÿèû?8»ÿtZ¤Ãs˾$Šp•Di ¥¼dÌ>›­bXeݤ …]þ!¸>º-\u&¨X4âÂÙ‚]½’VË+„TºâÒÎß«µëtP5€YÂç,I·0%pX½$|!þó(žCazù5ý“鈄>Cȱå‚ïæÖl­T¥¶söÙúÏ–u8Ÿ Þaᨽ°âvÀiu¯Ý"‘-œ!€ÍªŒUÌÂØ2™š‘›Õ ³J„æ .œhæ²½Å!‚cóAG‹îB„é’…KF°#"$$8*ÉJ5'¿Î°gI²lœNC¢M:ì9ëÞ?<äà®t6w6Ðs‚a«Ý¢ÈZ·6·¹^-²Zo¶7€1k€‹ju,ÀbÆ­ýñÉ1i‘§ÝÍv£µ±ÿѳTë"ÏÍtšMºz’¯¾~à„|ú¨w÷v«T¹_òlZ£CÓí åT®Ë"›H]ÂÙi¿ÕiÇxëöVžŽ–v“­ƒHú¾"›§I÷§÷X^8¥ µ±·—LÇi6&’£A/®×Àqo¼¹½«túìðI ã¸æ{B”škÝœ¦EܬÓÉÔGðb¢†Ê×}çL©Ê3¸, CãŒ9kœqD@¹‘ŒsGÎ9"ãÈ8@ "å²ä,À#Y£´Õ Y(½@FAmÛé±R¥çéq6²²æÀX=UV3Žœ„Üó³tʺ¯Ê4ËR3œI&£ Vã¡*µ|.}BMÎÕ5‹Pª’1‰ÜFI:d5 aÉZd‚‹€1Ëdé…-k­Ö:'ΑÑ‘Y2,Í DJ‹Ñ`8íʃ¯|ê­OmõúÚˆ´?~øäÙžª^ì˜ïzÅ^{xýÕW»}-d¬yøhÉ(žw€»Í U!ÖJ1û²‹ÂÊ6qa…²pêÇ…hfm5\*eæ¹³]¥Ô¦õ<ð¥É U&9´ËWt´K**-[Õ ¦JxÎ-uu8ªpXç3ƒÙÂÍÖâÈ×nºd¶Uéw–0UÀ‹Ê[f¹ÍKl€*²§—õ}ž:uÝDi‘I¸ºw3^ÊÅ\•ŠX .‘/T3»À…‡Ca͆é‹:}u–¼ª>$Àjˆ˜ÏÑpŽÖV öWºƒ•Å缟À™RªÚž®• –*‰Õ´zFóÄ µ×.íWŸ³z.<­`Æs=eÍ—üjGFË­‹#„¾`œ¶Ö™yP7:£ŒVÚ9@£^—‘}åÆî ×}üðHøqøý³‰'ã"MÀêÍN œ5iÞªÊ?Œ¼ îÊÌcˆ!·Òa )’Aßóý:o66šŽ‰,+^»sW“^·Õþ\CF"O³'O”RwÊR~i½¹ÅêM;œe¥µ9µ;^^&Òç·6®ÕÚ›¦§³2?:éß~}ƒ3Ì“Š1=¾÷Á£‡’T}úí·eàŸœž<"òFãñk¯Þ–>§"g®åñ²œŽt@bœO™ Ã(n7q#ÛØØˆ¢gr<èJ!k4c–3Ã9CDOzBš©©œµg±â.(Ðç˜u@ ¤¨ž{³N"¢ï "«¬Ö@ŽAkkƒ8ò ]öNŽ *&IÖÕã¦!ô£…oóœ ßÈZ£ã”^~Ĥßl·ÒLµ:/ qÏ !WŠ˜žÔ:ó`8ìçE¦Ë’3†œIÎJ)0ϲ\c3p–µZ›ä\–eÆÚR+c-2f­eÆåeù¬8íö†Vgs«Ùé”y^:8ë&iþÑ^zpç3¯÷¦Ån1éFÓ0ð˜lY¥—Q*376º<þžã¾‰/Lí›}÷ç?3¶þJšI#ÆllEýeb» IDAT·ãœÏ³ÂK{Y",»œÖR-Êm ^T4­q¬ZÚÏ~ýŽÜŒÅ~Ù²‹—¶T´6`XñO/ÍU^¤œUOígÉt¼d(„ˆçûëÃ"VYòÖ©ýxIœòúS™ÿ¼¦ÙdQhóÐb³s.®?fœ1cVxÊ‚p K‘[Ά`±ƒÅ*Á-t6²™5¬‚ÛÊ&àו‡°ú.@ÕuÆÃeTšë†qæ·È箋P¥².T¸Ê«ž*CÑl1\˜¹3RäûœÑ44j O5¥²pçõ×~üã÷¦©ÔÝÓC!Â8Œoß¾svvfœÛØÞ9ì6vwƒvì—Rµ¶TÜ–ÙpÐ' Ú8ÚI•þé¿#Â8@¡ó4•~xÖM®ÝÚTZ•ªÌJ6IµÀ LJæôíë[Ín’¥õf#M¶ol*7êl5üΣ¸ÞÎíN:ŒF‰QÚZ$±bZ ”o¾ö††Q”O‡*›ÄA”e†;;:=¬E—`Š$ˆýë7_~-O{“a7d(P÷v2“òƵ„”agg¿µsÍ+TAœ+¸‚îð°¹¹S¯×'½þ4™ÏŽÛ­Øm'£g¾ÚA º=Ô³ÚXYU:!`>gP¯×5à$5΢uŒ˜ážaÒø~ÀUfá­cYš{A0gÖµQÿY»Q$Ï’‰3Ö(\8b–¹Wß|%¤v05¢ûô¡ÉÆD+¹k8§³ÒyÜsà&yÐÜ Âza::3FE~ýÆ+ãB‘%çLˆ~«ÕâèŒÎ´‘D^«]CÖÒd2–~q‡`¬qei9žåìî¯oø÷K£¥ &„‡D·a™l@*˜‰tы̙bØÏz'µÎÞ {æ,É0 9ö6v÷³4+‹‚Œ|öð‘ç…AT'ÀÒQ™çµ¨ÈÚç L6ɸ2/ú£J//Aú\` ÈÄqzžïàÈ‘Ñ*Ÿ­œóÙoÉ „Cò¤Ç¬‰EEÑd2aŒ•Eé´µvóÎ+wÊžtŸ==ºvmçë¿ý_ýú¯}ý÷ï÷¼÷ñÉá“7>w÷àZȸ'Ë,ãý4\ t^I“aJk™·³ÏÁss¤K?‡Wþ§û$#æO:(¿Bɵr©tà. ÖãYØÅ”ÃõªúEFoW­Ï©ôéEk÷Uwæg~šÏ?¸¸œ]ö9bî12/Ó f±)³´ƒ a+\ èŒ-8:È+Ÿë*¯?.I °iå „3'’¥êq¬€ô¸¾jãe6¡KO“ê„h9ía«AÖ<{ØÍ/ö¡5ΕqŽ¡ CÉe¬µÄ¤u€yž,uQ¤EÐhÊI2!úa4õ&£áá£Ç×nÜpe™^õÕ<™œ>z?KØlmƃÞpø¹Ï½­óé°w’Nú±g‚(F§¦ÃÂóZÊ€ØÙÛ5䬃Қd2iD- àK0wV…æ³Â¯’\‘åEj¬.¬2ÉØ ïÏóâ|Ï‹C„ ¨²ÉÄ C>ZáuZy9œœ`ý×ö®]»ÿþÄG€ûׯ7Û;ÈYò8j&YÂýÀèüÙÓ§I¦Zš6®Ÿ¦h¬ãÈXii-§Ó¢,ÁÙÒÔB­ÈRA¨-ë3dÁ ;³ÓÚ+û×÷uŒ¬`ÌcÜMœ™_ùæ/xT|÷ß=‘‚€P/ ©¢† ™Ï¹dlxvœ'SÏ÷ý`Ëfœ‡œ©L;gú#PD‘@î”­JN+˘t\ˆ"OÓÁI©Š¢ÔN÷¥¯-Ñ4Ë<ÁÉèþ`HÄ ÌixÂhÊòRi‡ˆÜ T™ÙÿŸ¶7i’,ËÎÃÎ9wz“1GfÖÜUÝÕݨîFƒ&L4ÒÈd2-ø ´Óo¡þ\É´‘™°’Q¤š !h°¢š«rŠ9||㎃{DdVå¦2³<ÝŸ?¿÷Üot>K2ïC]·mm{½ ­µEÑkÛVJÝY—I’ZµÞýþûE¿Ùß==;úïÿå¿Ü ‹$ŽF"ÂgŸ^ }8™Îí&¡ Ö!22" f¼ÖÈãlÏëUßü ¦½¹ÜßÎî¸6ÆÞ&H_§·¬Cù›Ù\tƒ¬Çß¿fü¿¯Ü{øƒÂz^k¹¼’iÜž÷‰ïoCx c¸S+w`•»´;«ý+ú72JqƒYfx¨€}ýa™ 6ŒkŠCþ¦Uþî-}E©ÞG˜®Ò6˜YÒ]릙ñ¶Ía¥¥¹rØF$›ü:Ýn€×ŒÒjé½Ú¢ñÖ½€t“o…7Ôxã¤àõ¸¹5Žè¾5ã w£d@dæÀ VWŰÚç®këySXÆ«:Ȩ%乌9Rd@„‚|Ày]‹ÒJt‚:)•HÈíbqúìéh4Z,fè½äØëëÐ-]»@Û@´÷M»|ÿíw?yú²®Û¬7Ìf³t÷°îêrºPˆ> ¡µüÉÏÐË@ºT ÉË¥ûéÞìo©¨ƒ« x n–í‚Xu­ùòrØØ³à¥!ïýãÞÉHÃ\eTŠD1/;_E@ß•É`dž ¥$¡º6æé8Ëej Ë­·Þû`9ŸçýÑ`\H=bŒ±]<}ñ¬?Ú²‹™V¬µV&Ÿ-Ê4Oò´çœWJ+¡ôd6ÙÛë F;]uÝd¹ð±b Ö: ^z!Øûc¿Èšª‰]]ΧÖ×pPdYÑúˆ ö¶þñ?ÿùŸýÛ3myJ%ˆI3ˆÖÅd0Žu9›^*•ôzÛtHe»N°d,@ʶ½â$/صm] Ôy’†ÐÅh™¹j-*!Uô†F}­§¨#D­Bjs¶>"çÞÆÚ¦®+%³- Ó+Qáôò´)ËèÙÛ&º@(}צEN‰–’êºÊ= –U­’$O{Á9ï½I“4-ÎÎ/ž•:Y¤iúxÿ@ƒøä׿mÛ.ÕsÓOT"p\K|¯ÒÊ£{mÝ¿YpøáÑ”×±ò{p÷½¾õõD†»Ï„qcGᇵI›qÐkln­ñž[ obºÝ·âº}‡ÖÄï|o¨¿þþÆuFá¾ ú–Ìønšœuˆ6v¾)˜Ú¯çÍx¥|¹Õœ®á3ˆ¯âî3:¼i»|¹¦@o§ƒ9®€ûx3[ßÂJ2ÆÔMIš°×ëyoc^$Ö©2Û9Aѹ®®—ÇÇGZ¥>Æ nìWG/r“õóþÎh;Z<;^Œ¶úF)€€è‘¼6df³5lÂZÏëÿVPÌß'6yÇ›)õA±üõ"o%M|ָǿ«¦òá/7¯™!¾ŸùNÙÔÄßÀ¶_i>¥á­væÕÏrŸ0¸cï]0#'7WÛo°6¬uBâ€æÁÕ|}<¿jÞ«a»w|ø§œïZ¿ÙñÀAø¦Ž`ã ôŠoÅ•ˆ-ƒÀqd Žˆ!FBHcRi”” P ¡ H ¶w¿ãA޶vÁ`8LòAÙ¸¬ß?xçE&8wyqšd©Ñ¦_Aïþð§ÞV‹é9;ÈóŲZ̖˘%9“!)ƒçÀ¾f·üñ‡ÿEcAóñ¸ÿâl‘()©ÑZ )Ik‘f&ÓIÓØÆ9‚ø½wt¡‹|ptt2ö”’ÀšÈ,'‰”E×vRÆzf]µ¡Ÿ;!Šv¹ì\¹Xd½Áp0z½õ¹VŠ{Û£Ó£ÓÉÅ45Z+l»¿›'©¹œ×£Á¨^^ M¯¿Ó" ÛÀbÞ(-…ÞWJAðèZ×Õg=UJºÓ/Š­¾€Cëj1„ðòéÓÿñ_ý+@Q~]/ÿ0¼¯1ˆè„L‘%ÔÍòüùÓ,Sy‘jCaÞB´uIùxÏGvP6vÚ¹iÑ3Jö–uGumÓrô]»ØÞÙ™O;–R!pkcSׄcä‚s!k;ÝÏ] Ͳ”$´H„¨麹D×a]*#Ó$é‚ ¹ÕÔ^H-Cà(©Å¢ñ I«4Mc€cšu¯_tï3DnÛÎ-«:Mó^Ø”îêÆ|5øã놇ÿnÍ›QÒßAþ- MðzæóU¨ôµvóöûÍ@·ÆÓ{ÄçwVâ+ ó g¾º²æ5‘DëÆà›EdÝ»=÷iy¾wóñ;t!<Ôùš T~káª×öUãîÉ­k¹™·¼Ô+7œë]âæ¼:‡ÜÜu¼y®I(|µ® o?Ò[%ïÝ|׫ÂßëÎÌ›[½†ÞáÊ_vŠÂ‚yeõXm~,ng†àã‹gϋĨ,G ƒ áƒÓD‚ˆ *#¤v‚¤p!¶Mí]øáG¿ÛÖ ŽÞ;Ÿf…IR2¶íª<Ï2QHM¨ž~üÉÙÙôýÿ#.ŠèÛ“£çý\.Ü93ùÑ¢8½¼<|k×6µó 2ûû²®m$L{©)_–‘ "픥kÈz]dŒ–˜£÷ÖE§”æHRh©t`Ê’lgk¹]NfÌ€Ú¶Ê25È{Ìxyv©"œ•ËúÍwú Ñ{W•Ëb9óÞK‘çÚñ0]Ö‹ËËËÄŒ¡C’”l­•Ö#¤Z”‹¤—"ÆBŒq8Ú!µN¬m…:ÉÛ¨2¥êÊzööv¼w%‰Ì{¿2CFÀ€ìÁ ÁXjíƒUZçYÚ.;£²,íGˆs»T”Ú®­*o Çà;×:ë¤TÕ¢J’pòü9cjÒ¤†ý\`·œOB@#×uËÁG¢¬ÈCDî¸j\‹„À‰o]tŒ(‘=9'T„I’‘ÑiÑid)°nZ"S–Keò©m[`Ÿç#,‹4Õ&ÑuÓ6]GDŠdìB`ßÙÚÎê…AÎêÃÇßé£ÔpwáXKx¿+b¼s–]±Ôñ• H\S6Þ‘ês¼¥ÒÖfÓõñ<^¶w8ØWÌ­kèõÆv5Çk#Þ—hÞñ›=ÄÖ><„on ›ÇŒ‡ˆñÕÚ±qè¸-J¼|ñµ\ðöâJDÄpˬ/߸yÌáµì*x8ᬡ@wÜØ6îÃFèµ. \Ñ¿ nOoöù5Ï ^¥Þp¼õïm¶ðÜÞÞ\ÿįèB¾l»**[“ym6[ÜÈöï¼%\-ÀŒ(®p¶U-Æí<°Š’‹#"cÄ(#GL+‡ójd"{.&­æ1âà#à•C:¶Í¼^žùN¡=Þ5Z+)rzöÅÉÖv1 ÚB»hìRhêe¤±7ÜC&é£Ñ`y|tvt®Éq´Ý|ê—‹d뉱*«È¡µJ 7(8ø6ràÁ'•'k.°ÊŠ=và­ “Ér'+ªªÞ»®m‹mïct€ñr:ëm—¥BùòøtëðШ©õlIb°µ½S.´ L2ØÙ!,8€³… ¶óÏ¿þ4RШ½WÞzm Msôm½¼¬@xºœ%®Üßy2ŸÍ«Z¨$—Fô†£·¾÷}“ˆ¹Q¾›Ã·žZ™®±³ÙÌ{¯“” àIÒü“·‡uY 1ÏÔ:Y[ØxGàIêdëÉ¡³myºÌtš¨±Så‹çÏ«ºdà¦^dRg’@£4äZ§…Ìú¦k!ÂäôŒ9&ýa^h–ÒÖå,UH(\´CIˆÈZ—‹:1fÚœû`‹ñÀwœ'ª±S@ŽéöÓ#li#gg§yVHZ?9F‚qÑï¬OŠ´Ôº ¡DÏž¤2‰é½Å².ŠV¡ÕmÄBÉ•%!‹‘N‡vQbDfìÖ½²WH&n‹cŒ|Ç:{KâÅoZùj–½}X\³©;çïõ•ñåÌý¥ÿfpŽ7èî Îk¨ÝøÀî­ kWHw:R6àâ‡ÑÝJÈï‚õéü*h‰á60†×w·Æ|â°1“®ïtkJ户¼Žä×ÄjÜà–¯\wö£ëN܈¾¸ƒÞÇxÛ‰õºJÈo¡c…ÛÑ~õªáüÁ½à§kçØ·ÃØnÓ@‘î°Fývˆ Y €¿âدÊ4€!p@f r•…À€˜ Ä*}³'dbÉ€L MlòÜcKì"ª‚”‘âéÉi‡ôæ›ïÇCgË‹“ãéÉó~ðý˜b¿—rôÕb6¹8M’€“$ ÂLæ³d¸ŸöD39着Wä/ž~±óÆÞV­mþú7ÿy0 !ó~Q×µh’$FF‚º«›àËÖ]ÌGY±˜ÏQø´‹1*Š>Óøä`+ ›Ž²j¹ìYŒ1z¾¬•$Dl=ÃÂÿõ¯óÞ÷ž>Ù1©``Û1€±5iòøÍ÷›ºU ÝÁ&É[ïR“ Æ{FH«†-U]5Ï^LlÛ( ï½÷ø«/Ë/žž ÕoZç[—£÷ÑÖjgûZ…®CÒ£íƒÎ ¤óURŒ,ƒ ˆ“^1JMUV³Ú“^ÙNL‘dJG[ÃA_Iv¶•Z ™i)µ’£¼@MWwn&@K%Yët¼/ŠiüêÓ/–³E/×MûÆÛoT“~_ÙªJ3ãšêù³/wö•ÑÌBë¾…· Šªs>j…쉑ÃéùäÑ£CDB¤Iª0’[ÄÐè¼GƒmA¢Y4Æu25NK –ˆœ³*zpÖG Öy¯+ë@ ˆ„P¤¥hc“f¹6YÓY’ “Ä0¡tÎ$H>øGÿ|¼÷¶NBæ1Þñ}må¼â‘üûìÍ@üM™wµ3ßJºÇá] 7njd¯¾é¸ÙSöݦ¯‡Y¸0¼ƒ™¬S¬¦ä.N~w–E\Sÿ>sb½}ý5Àëñ%¹Qˆs;ž;ê1ÂéÛ÷®þá·p»ÞËÅÞÜï"Ükk»»'­Â¨!X晡D×¥n«¼8 ¡A`äiÁ# #+Šý Ql# @fŠ!¸U˜5 Œˆ´Ò¤{OŸ|üÅïüîOÉ;ߨ®m5‰¢H™‘2¸Ð6–#½BÁ(&sÏdbd×µO?û4€~çýÎ./!°J³'ï}>[´UY×5)‘÷zRhA„ÌÁ¤²]Z“¨QøÿüoZΛŸýñO³12öÙ§³ií¼èÆGgÓÅdFR08¤¬Ëó\ˆ~½¬Ýù°•åÆÐÆD ö¡ AèÓy°,µŽ]ã”u´<ŸwUž$©AªÚýý~o Ø.\Ìcp9½)ë–Ó41É í¼Ô)’Èû=ä½ÌÔõ²óÁG@¡€Ð†N^T¥Nò…gÆÔu£Ú‚gìˆB’ª&tmH‚Ìt7ã+“,KéyЂW°1°`XXŽ"gÚäyŸ¥+ëZ‘ˆBK$ ®keÓ­þèà0ÝÚ¬8¬è§+4÷õ¶#"âoZw\Sn—Ýõ@gþf7¿r­j\ÿªòZÝÊ«œ_*«ZB¸ß€tû°xϾ°ž›öhíWïmw"¾õÄnºçÖp°M Ë7½îº-ëŽåí5‰¯¦¿ïvÁßläk7ç¶Fn|0k²üoð"^ë)¿ÕXñ0U‹·ŠÏu±çƒöꛨçÛbH\ûgŒàb˜;»1×É„¤ë]„aA¬ ¥pÁ!BÁÓ鬑½÷ÈŒDhÚåsf¡†"b ÌN0RJ+Xf`ADBF6?ûÝßüÆ.Ç–».t®×ï<:”R—åBRR•ÓÎÏ8H ¡ddzüÖ63#a]—&íIÕcS ¶Éº‰ñÞ#_-ºfiS·Íñl>ao(ƒ÷‚À)©OŸ¿ ˪FðÄe$UuÎûV ŠÎ³÷6[%Uð€±ìç*ïéÞhÞø~! Þ×ϾúÒ•Óål¹»ÿˆÙ†. ‡ç_?½{ï¤Ã¬­+%DÝv*Kcä¢s>xï³Öc|à$K;×åy‘IÚEWôv´@¤H0ˆU*úõ·s5Ÿ­E |åÎæ?¼/ÿ»“–»^ y³´mÆE âm¶ãŠA\¥öo È›ê?~íU] ú«`á«/:ojîïP{‰î7^ú#ø'¼Ç*¬ÞàÍF´þ>î×g®ÒI_o}X{û7î„ÄâñxM'À}©üÝ«zÍÞƒˆr†A+›‘ïv‚­%ÂÝPÌ‘W1¢+ûß}£×û¬é‹p£¯ùª(ææÁ„H+¼fµ1ઽ9GdÉ€@ˆQxÁö***2ƒ¶ ³¯ÊË_2?Öoÿ1g!²ð!ðL»_/–¦·õc´ŸIвÜòs9Xé+—m¼ÌÅXø  ãÜ–'åüÔû È@ðÎEwßÞ®Õš’¾”Pk¢À|¼Sµ-H¡•ðMÒ9 Aô¼ŽÕôY5uÒh¥[Ï'ˬŸa·˜ûPÇØVÕ””©ê ƒô³ùt¢)ÆL*fȱ±d½8üþši“ôƶdé¼µÖ¾|v´u°?¯—1è­Û~ &ÍjWum|úÙÉÎþ“ïÿQ2$ÏŸí>~Çim…Œ˜äòH£Èçép ÎN&G—£í¾¯ëEÕt'GÄ’¤¹8ŸúŒÖÓóó^a:Hr°]h3œL&¡m‡ãÎ’EÓœž/~ù›ŽÎN_¼¨[àh?üÁ»½,3¤%ʺ*w¶ó"K³¥³³Å¢d¾ÈûË_ÿÇ¿øÅùÉ™” ˜˜©®jf—ކYÑ?ØÞE¥§åìãÏþv˜ªTõó^AB·’óéeýÕÇ{ƒ'ýÑ?ɲÖ3Ù‹ÁAè*p±ª»¶«§Ó‹éåÉÁþc­sÛF´Ul§!†|´“çÄNð]hí¼¬æÊì…»+¥›ÀÀVxK:=9?ÞÞÛ QÊvéXÊб§b–eÞ{Ò2(Å(†…ìlmJQàjióÞ×]™ÆÅhYWi’j)0Ä$K[kUG$ bb¢pKDÞˆÿx³©œ×9ÍçÇõ#¾2,s…@¯Ëµ¯î¼ÄÕìÅ‚×öº¦'™o€„[Æâ>s»ÆL¬]ÕîcBfºæ x#Ä‹®× †«8³kç2aM?òðn)è’q]Gx‹Ô#Ýø–®4‚7oäºÉ ¸'X³_]eÌñ&¡}ƒ’߯-o’ûëü6­Ÿp=^áFFÅ7»ÉZvÅ&}{8¸ÚÔ¿™¸>2<äb춸 IDATW¾j‰¹ Y{¹ðí$M›ùã|Ã\wØ!^åC¯v ¸Î"eGqõDÛÅí|úrI>UCCa)|22—l§]}ášç¹Ñ:D©µ§½´ß.'vyüüôâÉ÷wý™\yz^ÿò`ü;½ñ°­Ž–“çŸÕý'žÖUÙÔŽ]£kÛÖ¹0ÞÞzüè0rŒAtËe¢“É|B³«Ôç¿ù•@¬ËJ)åÙ$YÖu³ƒý÷Ò´góåEU z {ŽÎu²• &óÓ¼HCg˲€ÞyoÆAö8œON϶vsçÅ6®>9?zën}ÝÎ:»Mˆ‰Ðøï¿ìng³É´—1†^aê+ãfÜÝéç™ô“7æÓ‹ÁÖ6,dˆ±•6j8ì?{ù2KDÓ¶Óù" 4eÙ/úÁEï.%€šO‡ƒ~¦ò"/fåÜaÜÙÞ ÁNfe‘Ê$•B2¦EþÎãGÏ¿øüǾýøG&ÉÎÞîÞ»ßÛ:~vòÙ'_=þô§?û!ºŠ­ë:7ÎQeïÿä÷¶÷ß|Úv4È’$Mgÿù׿¹xþ¢öqÞÚºm^~ùâølâ}tu88Ø“ùŽñåÅìôü¸+gÿçŸýÙóßý·A„èZAÔtMhVb6›×uŽGƒC´®j¬/²Ìd™ä ¥JEÀ¼×·u=gËJÇ}@¥ !¤”A”‹jÿ‘(Ë)¶ËQ¯Iòòrª´YEV”B!¢%œƒÅ¢d ”)©8Db€‡½~W×¹1‰1`´sN+í½×…&øZíûkPÝû-‰ÿ?ýZE†]åã¬â„6=_׎­ø÷~¥«š¢» %\ù¿^£¯Ò_nÐÈß¡`þ!”›_[ù]‘¥›Ïîµuó7ŸãßìßѺ9sÜÈmþ>o決5nßãËï­òëä0¯k¼Ö ‹éºL ˜=2"²…èŪ},Šè=ÀI}ùïEsÁ|utœ¿·ÿäç -©·2ËÂÉÅ׿í^¾¬öÏ?CÔ™_œ²('2Ê<ù¾a:ù,ùæöÖÑ‹{EÓ•§i¨”‹ùùÿû.«²l{°óx¹¬êºÉó$´V ±{°ë¬­f“í­íùdFäÚ4³m™§Ùáþ wÞì ~úÉT“H•HeF²ëÚº,Lšè”ÆàšŠœC$·Ÿ¤ÃmëQÈDksUDÀòL¿ûæáb9ÃèQ%JBg[É"2 ’HJ¤i‚Š ´M·Ú)‹"SûCå"Š@)ɲì"\VU¬íª²©Ï÷?>|óÍAšuMyøäÑÖÎAÔùr™EïãÑÙ 74¹ZúÈÂÀ 0™Ì$¡kÚ~V¼ûÁÛ}[•é(m"ïHü£ôŸ½|ñ·¿øÕ|ÆŒ´³Ÿ†6Ts«uúëîc‘! kƒÖÍòÏÿrY7¿þů‚µº§z½¢ßïò[ïYŒû}¡Ò/¿>]°¡]XâO¿zöÛ¿úåOÿðçÀ¢™/ˆ\>.$Dç’$Ñ‘QHÙ#ÀH y–˜$;~úõÅùt>&Z2Jmj…WÊ,ƒJJ¥4ì:·2„·õÌ`¢Éù´×ë9BˆøòÅ ­`4î#¤Î€Q(å\H¥†B`qØïwuëëF`ß·$$2k©²T‚‘#_·“Þäù>Ž7qö×hrÖN·óéÚÀøeçUëÀZóCÉ|·Ìäæ"cŒ| ùp˜Ýš¼ð*™×}<´.ªáµ'YUhgÿó×7ý¯i7ו¯›@ú+n>0û®kÖõ]×X“üf/źI‹7Ú 4Ï^NðŠ/‘«ÿ\¿¾ïí^!3ëXÕJpCW¢¯¿£bˆ®ƒÄ¢çàWGï–‘!Í‚ˆ¶œ_&’8ºØ-›î²—׋ó™«JVÉîèÍr~f§¿ÜÌ–/ÿÝäüWõìèèt§×ÑØ#ò<›MÆ£­­ž­ËÓòrVþÍùË¿ÙîûvÞ+ô÷•Æè¹iEç2ÇÌ6b¢‰šó²DÔÙ¸ŠÍ`¸å½³å,•ôò˧]ÓîízEöáGVó%Ç<”٨𠘨l|#Fƪq{2k]l«n4E޶©·í™b$MÊу~š¤ˆ(seÊ0× ä:CÁB‹$Û45˲a!f‹ŽƒÒu–!Zo]ºç„@æcXVA5Y–gÓ¥©ã`?hÞù4íoíí RÒÛo¿}tÌ{™6HÛuµ˜6Užƒ½'Ëùt÷±Œ¾3)a(뮬OÎNºŽ·}Cˆ!h•UËù³§Çãá )ôVÖûÕW¿õ5>zôáûf£ííÑÖÞö^vyqÙïvv·|€‰™„]ÛJ%Ëê½>BËmgC°e5ŸL§¬³Ë—/ÿí¿û^œ¼”€4ój nP‘[tm lûoþ§ÿù'ðsABP‹$A 0T$}"Q•o»­ñ¸mIX–ÍÉÉÅÙñÉl:CRë‚õÖ€j­#IRÉÖ¹Õw©m[û½‹1°JS!³ñ`pÜ4Á9gŒ©Ê…èeå¢:^.?~WHÅŒÆ$Þ{- IHdÆà‰ÙHI Þ…DCš¦Î/ ]e¶᫜««Fï€A~ݔ÷ÒBþ–Ãæuî?rÜpž®æs7ñḚ̂´=ðMT'ßÕ)};ÑÑ:Éq'ôô»Žóë ûôwJ»»ÿ†ðz±\©Œb ×Ëç?dáÌÚ1â‘‹ oŽQˆ@˜ QDÀÀ@€W½í„![BÀD¤È$€ĵ‘*^å]g‰µZ/^'9®K}i%ÑH„6Ts_iÙ‹J…fÞuÞìf‚‰57îâ"*ãÉe›É—–2Ò[ÅÎ&‹_Ÿ¾ø›ÑÐ üòòùi}ñbkï½ô§Õ.û£­›j>O¦õ¶1˜×Sò5]Ô>3ö{?È¡Z´Ì¢£«ƒŽ@Ô}Vhö!2E)ðéWO•DbÄèj¯t¶¬ìüùÅeo´UW§³Ù‹L"J¯ÓÑ–ÑYÞ_¼Ìl?zãàÑÞÙÙ˨r=õ’,_ö"© R9Ø=Hó,À”:×IˆÑÓçÓÄWÊ‹ÐùnµT–óaºÝV÷}`a­CÞÇéÙåcs8;™§¢èÚ „æâø`œ †çÏŸ=ÿxwo LgZçÒTÎ.Nœ³éå)Éœ ¸Éù‰1òÃüàìü$†Àm(LÒTsH2iг‹e»œUÍF*K{g/N?úÙOÆÞ ¡c”’L·,£ƒñöv„¸¨[%„ï¼TYˆ~6ŸçÙh±hGûzE¯\,M"¬sVËÂÚ*IÒ?ù“ÿå|¶t1kÜÜZ«Ù0yˆ&‘²’A¶1üù_üÅW¿úÅ;½Ýt³Ù¢2É–^È•sŒF‡ovõBQ7mÙIYªíƒÃÝ:Å_¿ðmSô"d‚4P%t¦eO‰* %TPÉ-Ïʶ¶u×VÚL'¾³½¼è-ëÊ$Æhš¤k›èÉsé¹ëj!1D¤èCðNk•Žò”†Þ¢ÑîJ!£T&‚ò%eA‚("_7šFŒ¼I¤­OÉ›Õ|7Ó[€Û@”xãC¥«®Õ+Ä™c¼¡€ãµŽ’„^'ð¬ªDðº=ñfÜ¿ ×ÚÉ ù¶âœåõl.„›·ñ¶Œ[¬ ²|e3‹·€8‹kWBw%«ß ^O8ŠŒáZ±~uXý!òº7B¬;¨7ŒÍÀ7Éô›Û " |…ÚŠW®.ÆHœÛ#ÎuÝš„ëô= Xc&hÍ…pf|<ºõuÐÚ–‘x¥†§5ÐLFZmà+ŠD 2D ‘I*`aknm¬,¢IŠÂÅàc ì’:R‰¼)MAÒ¼fûZ /×›'®"ɯj<…:Ö3;}YÍžëd'ÙÞ n™¦yÓÌ3)$RWŸ½üÕöþJæ.ØTïL»DHŽt~1ûOIÆLÛ*hlÓ±\V6¦uSˆâøóóíq‘©d¸=Œ¸ Á6®ï)ST¢1Ói.òáÑéS_µ®éÀ;k˜YJ ˆÑ·í\‡B²û{J@ŒˆFIˆq2wB;:dƒSZ %"ÉMŒÂƒ=“àuoä"ŒÆÛˆ•‰Ú`šúº™M΋¢·X,zEN1‹D!F`fg[gÛ®n5A×Ät´ËNr×HŽûÛ=帟ֵ•B†(óÌ,:GDRÊ'Oö»ííÞbQm‡Ì‘™ƒ~U6Ï?þ´žÏ£~míñËÕ´ ·užÔ;:>Î=èľñä?½„ºíëFÛ;eY&:g“4‘mí½ÁÊÓº­îBÓvÎù´ÐóÁ;’Âu-r¨+›dÊo;›iÛV'Š1Æè£ï zo}]ׂ¤wÞ:'Õí’ˆ…”B¨þ`/Bæ§e5ŸµØKò­¶© _§JÙ¶‹N§å¿þ×òøû“ÉñÅÅ,Mz!tMg# µNrp IVtÖ°Àø/þÅ=äu}âÛÎVe©¥"‰„1†¢2F–Z纨Îf[[;J§] P¶O”çP: ó, ¯:DÙ¦!8æ ¤\%¨`–eM¬œu:O,ûh”Þê©F\LÎ!Iè ûA ÄU3óu #®1Ý•0®òn¯«u¯ŒU›ˆÐ5@€üðT‹WKÃu> ÞAWð ÝV„¼†™¸Fî`ÙbMcXRW2• oº"ï˜u‰î©7×w†qÝ«Å÷IѦäõÙÎß}Hÿ†ÿ»oóÊ—»ïƵV—5'ðÊ+ ‰Q7Ü-CkI¥ "bˆ‚ÂÒ-¾^œ~mL?½¡ ´Òídòb(u²Xœ,[uðîGz ÕMI #?˜Èkar·?5!”‹¹ ]‘*½mÊ™uq°ÓŸ|éL±Éìô%%óíýVŽÞ±ýX‰éùå ŒiUÓ0Φö.Z!Õô쬛£c`‰“ŤaNz™N³´·S—]µ¸œžZ™þN‘ïNOþâíƒG[ï>6R‹‚ îìï'Y}p‰âäô™ÉzZ ­¦ÞÖRg{‡Ïž½LÒôøäy’ƒï}¸\œMÎ1†^¿—¦ÙÅÅ¢­›Ñ£GûýÅäd6iPýÞ¨—ùù’©¥Ô•Ó‹´§¥Äj~n›¦tMªR™PŽÀ4ã~Z/]’Ð@fF»ªåä"A(¢ˆˆ‘¹ifB*#¥’D‚HQ¹˜£ëckýòôr6+ %1ëZ%“ñÖŽkêr^íçÉr~1³^¶\T§g¶ë>ýôÓþp0Þ潬­YiãE,Ë&B×u'…ö.ªˆ‚’°±£è„pmÝJ»h•Ô1B`îº&‘Ô5KIpÖumb „#xÎ:ç"£2IÎ]° ¥Å£·ïüâYyò·ÛÉ€B L.ªÿãßÿÕù±2†`™9r$¡HêªnêÆ?zÿ£Á[7ýò‹O~{v:ÿÁï}úõ$ !xTÔv­=k;k­µ¶µØÖ­­ªV’ ¶¢«…‡€€ÖZë\šg7°ŠBJTJte”VZ­¢y”RR i´ f©ž¥#HeBDVe*FŠ!^qW@Á´o%˜·\Ù™6s%ïöõòƒz!€Hxwi p]»È@Lë:PÀ‡áD¾‰4`†•{fí\‚1òz`ÜmœÎ5X¿¢nœ®žjƒØX·eñí9äÆ ë c+¿já†W$N¾†6xÍ_¾Æ½uS;¸á{Ø|†+-齚—WýþÛxß82Ò-nU#C¨›šˆ´Ò(ciË#7+U>'­ïfÂôôiW , £-F‹Ùpÿ9,g·Ù¶œub8fŸ‡àçÕLDmK—(W šjúÅ0­þËÿê £~ù¿PJïííðÃwçu@h‚¢ëlå‰éûùåóQ®•Š¡[¾ÿþ›¿þÍo _¹¶ \ì+½6é£÷ß?zÜ,š“¯¿VIÞËÌé³/ÔÞ6IAZzh[_öhÀÀF0%"zG‘ƒe!0€ŒÑ'JC ‚H#zG<¹XP¢§ó™³6Ĩ”J·çmÛyïq6­X©j2™'Yµóä108ï·÷v\WåÂUZíóç/~ô£‹^šôÇËé$¸X-Êä­])cÓV,H6Ë:„p¸{Ù¹íA~Ö]Î/_¶R“…ÜAÎÙó³‹áVÖ“:†Õ„ »Òú­1fA‚ÐMÝú胷Ui—‹CbLÜ´M$MjP°÷ž#0¯z}‚bãbK¹zÁ’'ýÔHm„Ò"ÑEQTu‰…Œ¢sÞ³ÛÛß3Iѵ^³]6öÙÉ|¶ü,/Þ\.=‘VJ0ù¦-3DˆHÄ™Yc]ÔY¦µ‰.Ør.5‘Én:%Uël×­ ™™C‘CPZ9|è”Ja] 'ÏŸFãvQÕH[ãæè#ЪÃzuÚ_!<7ÿ+5äµRòª¹ñÚ¤J+åá]UÆÆ8w‹Î¯W%¾[ÂwsXf­Ä~qÕÍo=>$Hò rà«s€X[Ö¤ŸtÕ²»bV ÞÕ!᦮nŽ:ü±–ô€H€¯Pþ !ÝY…îëmâZ3×}ÑÎýÒ±¿ÃYa…{¿f=¼B~ð›‰ÍÝ—cä;¡Î+{ 2>˜’*‘£µM×”©E¯bM]›¸Iûü«.P¿—6õQe/œwyïMù¢^æf£öE:fU¸‹™Ù6“§vábäV•—$s ¶¾ílÈóm©&\Ýp‰ ‰WEíxBIc2îJ“ç'§== †ÉÅ©"ïåËn^¶UŒœ™¤k¦óã¯eR¹Ò..:ÛVÃAbU§CÕú9WÝå¥Çã~ªAÔvÚå2<Ú\9ç’~x÷Ã7ž~vz^;Ô2¶ŸT“éÞ›‡ž£=&“˳íñó¯ÿÖÅP·^èí$­•QZeˆ!tU‘¥,“´ÎU'Gý,'©²Á®ÐIšå!šL‚”…JDW7åâBèÞッÎúí­­ÖÅùåéöo‡=þuW“g!M‚D.´˜Ì-póÖùªìIb\4Ë¡ÙbÐè é:§£Cä\稚r¹´À°XœeEŸ= EOÇСxq|vy6AŒ&雋§'Z«Þ Ÿ$YU6]SfïÑn>È».Øl“t°³³7™œ%9´ËZwôì|´»G*c¡ßýÁåä’L’D¿÷f¿7ܲv@@‘v†˜ª4Ë]F¦È ²t ¢è5éÅÅ$M¼ëx‹xÝÓªãzµ´"lFÜö'!ÓåÏuüMMøõ+Þdš­+Õ¯2mVSíÍÎÁ·Äì:‘7+ ®Úwã OëÀ=¯ç•…5GÔ³ÑÆ=zHþ´±\]«Þ5KóuïËÛ‹p/Xôžkê^U2Þf)3?Pjs×ä|OP{K·à ;sEЭi¯Ûo’w‰ùÚE-=ØÄiËåñóÔõl³$»X¦¥j;nÛFö­„Hh¸•W˯]ýŸ2LÒ4ña€`ò|QÚ%z:}1â¶.çFù¤6±ßßz_°Gnb`æH¤(à*Žˆn\ 8!®>à@)¥¸=Þ¦¦™¦i‘¶‹Ë“ÏÒ|°uð®oëž àl°“Ƨé­]•†~º×-—f¹\tÎRTå¼­æåhÔ÷]×Ï{‚t¡Èr«ñ0Qãôr6íôOžÍÎî`ç`,â2¨TPh¢ïþàûŸÿÍÇ2Ϻ#Ro0jjÑ4M`½·lÛÙìlkgëøè¤_—“yžŒAÔmÛô{ýñxôâ rõ2޲^*´ÕìÅÓ¯÷·w¶­ë„RÛíù|ÙK{¹Lºem«æäb²ÿøÍD©¦nº¶],ÙP3Ѳ®[ÛJà\Së[öXt]!Z;C¨÷¶tÀVŒë±C¦¶+£¾üü…wqw+°EžO‚Mdlë.wa:¹Df ŽÑ[ÛÕ¼T’½#ŠY–6­ô«ô4ÏH ©­÷À‘šºeˆD^J©d£Ñ©ŒÖB£õöÖP‘BRŒ>„pÝ[‡wÂÖ—ˆW§À?8rÞFªãše‡àN‡ÞÃOx¯zï6ë÷.Ü:WoW+z «žÌXó⮿åï8z¯‰\¾ƒöÿƒÕ á!SÀ«ƒ†øu»¯¬Råð[äF¼ænžßð(uób×þ»ÛZÖÕüÒ—gXŸñ‚"+v¶v W€i@3Ú9œ4©TTƒ¿$®[–Ræíâ’ %ÚDÀlÑ!uŠ!,ìåìòåóŒh¼·×?xK‹¸} ¤R"VM¥MA2R ";™cð!­£Éu.„µ®#Z<ªg—B·¾½<ñ¹kâ 'w?¤þ;_~ò§cØ™-.–U÷û§ççç‹^o¨“~Äbÿ m¦‹ÆG!UçðÝ0d\µCítœKˆeí–KÝ7ÕrRyG4³»¿w~yÖëuj–UÞÏ˽Ûv:QYÞ³ýAšjçýùùD›ôôôbk«W×e9½4Æ€HÊÙÅΣ‘ðÕW¿]žMÚ¶ÝÙ3àtQ>zœfýõù9O†ãA–ôœuÝÎÊÆÙºª»Á¸å<ê$‘iöÙ¯ûÁÞ®ëœuuèÀBVèlogôÙ_ÿ‚šžÖ¨ ½è€Y „Ÿüèp/Wÿñ?üUgâÅ$ÏϪà0Md^ Æ(‘éÖî“l{\T;õl’Ù Ýa€ÑÖ¸n[-ó­Ã·|pmSGgc4Lµ†®R“Ù¥÷€ô‹.ÏtŒaYw>ÍRA´(/_oöŠ|à8°¯)¼GŽ1"ˆª²Î"!xïH ÇPÖ—ÞûŲ P*RJ„дm»*£&RÞµmW! Á ÛºŒn£o³ééKïœgv®1Z{1ø6FÁùf1mƒÓ„ÇÏ_2#ó—Ÿùä­÷•ш¨U‚(HPµRóàcAÚ¶¡Ht×TÁu18fvÎyïc”ƤÖÕR¡T@ä£ë¬gyžÛlÓ6iÒÓŠbd¡$KÌZê,É¥D"¢²ÎÆÐÉœ@`¾«›\×ßïÿ& øjæ¥Qý^ÐCËúkJk_µ½>ÂlýâïÿÃû¤Â«šÐ_ñä¯,$¸ÿŠ÷•?ts´A¸I^AQ¸’³¡y k¤…øöù?W×+}_`w‡±¸N]Ãû·7ÁŸõ×’©6,ü’#„ år)ûhÛùd–b]½øÒHᣭê³ù)Hщtç"Yíý§¿RÐôL"‚JR¹|ñÜ$™‡Dö¶ƒÌLè¦/¾=y§î¸@ÊdÄ)#’oZ;U¦§²¢ØÕÕË=ˆb¼ç™„l‰' µÉ‡ýùå'ÇÆSµxIh·ÞnÎ'©±¼H)í&—e6ÈXÂ§_WÖ2$ÃÞnä)èóAVVSóÿÑö^=’¥I–˜Ù'¯t2Eee‰©éžêîÙ™ñ° øÌŸÀWbÿA€ 0œå6¹ HŽì™ê®Î¬ª”‘¡\^}?eûà!<"3«›$˜H$î.®g˜Ùwαs”¾\uþ´<<ÈGÓÉeU¤÷ŸÕ¶Zl ž÷*X•ŽTš_ž¾0U)À²àxPƶ]»ÎÒÄš’¼gL±àe|õ“ãW¯ðÁF#ÊŽÓ$ Çç—ùl?ΑL6›úòüÑðàáñÊ?ð¶[—ãz2ž]”Q¤ò|R,7q<&T¦«%ª$&ÇãÞXŠÆž „`ªõ ÎX|ЀYÒ-¾©ço;6™}ùsç[Ô6´æ›gÏ÷gŒ“Þƒ.†N ¶æöÝü"ÒÒƒóâ$ÍFÕ¦ëÚêÛoþnÿá]×µbŠ\Ì»ÆFuˆG¸YÎS=Ð Ú ²xÜð2Š3¦÷ÉhêC#£¤7.T‘fR!œ¹4Ê‚-÷èlKýY6ðdx &uŒF"#:~¢„þõô/œ©c.¢ˆpœOú`­óL©@‚ú^08zøÄY+T¢“¤ØœËMf JbŸ')c¼îÛ°´ífµ™„(M´×€ÁÕ¶]÷0Æ…lz×Õ ‘GJ)Žžs¼\,†ãÔãŒAo‰¨˜3Në2á´^^ô­3½iІ3Ql Ó´¶YÄÙpzx$‘‡±uÒQðlcÊ:.K# |9œ¢J8–MW4›*Ͳºkfí0M ‹ œgsȸu-2âˆhúB0!ïM\àÀ%猇¾oS,ù6Ž7ES••ä©ëZð.x`(¹¦tðyàx;ÒvoèÁ’[-66tùx,✠΅Dg'ŒÅ­S.ØX1ó6 2¾X^?>JÒAßeÉôƒ@>«6«³w¯T¬\"“`]ç=h­\pÞ{­uÓ´€ž¼gœCG@Îç\J•Ä çœ@Q`.2ä‚qÅy!#dÜ Fªœ#îïj^É[B¸g®uLJy{Û6`×÷íÎP|åÃK€H„Âã ÞZô¢¿#Py?Ú÷JtŽ;é¶ïw…÷ÉÌ;eëJNz_»nww¤>;ÆÁwÜÙབྷuÇ ¯ió›IáJst׆ߋ\ßå³o ¼²9ÚEâ`‡#Ùµ‘îP5t#ÛEü8Á{ÏPaÇЛv³Þv¾o¨x¢°cÁ´ëóÆ`W?zû _œ—ï¾+VËÉ£§LÅÙ`,ãÆE*e±lÊŽ‚/Š‹t0iZ‰y f<>LûŠ*³þ¾\½t¦ŽÒìòíš\H"EÅ™:?_¬7åì0'#y²ÿÍ÷/?ØÏRÈ3¨‹ŠÌ„Ë<´¡gf#)ׯ££rqÑÏ—*›Þ…ÞùD/¹+jß8,»Ã8ÖÈ‹4®–§3=$éˆ1F0«º®6^Æm]˜`‰3šŒ¤÷u»qÇ£½Ï>9xsvÙ¶(µ¢,]×Öž,Æã-”Ñòrî ™M’\r­C—Ä‘S1‡” .4h­ƒlUv}oûº^ÎO½+½k@p4žÍÖeßU«õb%™—ÅZŠx8eeçŽxÕ4o_¿áy’îMfÑ0ãRú¾í¼oÛÍòümß÷ャOã¬{óó²*ÈŠOŸp”ZðÙ,QÚ‡ñp<ÝŒ.b¢Q1©<ý28cŒ1km>ò’‰Í¦ÖFFQúéç³át/° Rõm’1.T×uËù¸6I#†MUU˗뽃Cà<BŒÖΘu®.J.Iê±Ôy]$ˆóx¸7Nšõ’imƒkë)Ù›}ðŽÔÉÅ÷‰óuÙÈxê¼÷žœµl0+ð]Ô›²l-W1H)¡×«åòr‘ÄÙjÞñMä])…À }Óˆ¾ë¬åΘà(Xçm¨Šy<ð‚YBb‚M'É Ï’Ñ‘ÒzÙY炯šÎX¤Ö‡‡ß¿ë?ÿä+_/ÚųË×ßK#²8‰òÁ ,Kë¼’,Ò¼jYÇ€B@ðÐÕNµuÎ{O€PpÁÀ3Î;@¡µFDÆÐ“w>P@OĹ0¦E¦¥äÖ‚sn«RJo1[ë,2&¤Œbéü6{]!òóù÷F8ºÚؽ7ÚßÕéGŒ v¼'¯Â]q×e÷Úéñºò¿7xâíMéŽUû§ûð±ÌÂäƒïT(ú‘·óÁpzD¼™Óñf›`çúl{À=Øçý ±?Ï÷¯¶án8š Óªû}³ˆ{AðøA`êŽÄêÖ.ùš¾VåâÎÃë-oO§¿ýÇ\:Ë7Å;'ÓqgšŽ­0¸\EeY%:b¤´Ê—•M‡‘ñ¾[Í'Cw2ÿaÂ$†ùÅKìÛd˜5uÅq–Ø yt©"+Øè'_ÿâïþö¯#6˜è;׺؅,Ï™[~o_0}ÔÈI>ÙϦŸËh¦ð]Ñ_,Åô!‹vñOÕùüáñC¦u‹ÞœÎCºFÞ¯ëRÇl»€ SͳÑxÇ¿yöÆ5Œ“±ÿäÉÁbqJL8+:Ã{pe[›~0˜ .pnTÁ´‹D'ÓéA竲ڨdPUM²¿ä‰h½Þ$IÂæç¢^­»®Âo–ç³É8ØÊt¶)YëM }[6U`4<Ø”b¡æ'oO>}úصõëg¿æÎL†ƒv2I­ËÍòáÓ?ʦlÕq·xôôóÖƒÎ#%Pm\·!?î}ÛõÕ çY$‘û¦¯ú¾VÈ8K8=˜qLzb¶7Ä™ÞD\6=1ÉóÑ~]¸EïºHó² BDH̶¦X¬y1ΑC”Ê£ý§œñª)A+oC– X°†œ›/irÄ‘ óz“ŽG=õ>ï÷ÆVU‰ÈYÄ!ß¶¨Åb³ÚEÂ2k: â8|¶Ÿ3v<´€o5‚ÁwºH±8ʼ@9Ÿ¯ƒ-CŒ“­7eQƘ¶1i22̇žóE“qLíêîäl1I£fá=Èh4͎˦íéŒï{ßv.‰ ÒŠ•­ß ¥ sÞ÷=" !ªªfdÐ’mÓ…÷P–ÍpoÊ8c­u!ç\¤88笳Ûÿ$B"d( ”Ô„2@`Î9!Ûnö‘ßÊP Æ8 äŒG΢÷>„À®¼é–ÅÅ;ÔäøÛ\~·0îÜ^Ú´cPC€èï×WýƒðÎÚ{yÿ  +ènÛò׉²p7³ì~_)åF@ˆ¸s2¸ê÷@öÝNö~àÁÝçýžþ#IÅ÷úùݸ4¼sÜÀÝOm7û“ÿN, ?rr¡÷Pf¡ÓÑå|=9:П~÷·èM4ž¸²l̘¦(òÀd4ºèa8>Ò:Ë£t~ùöõf¾îz7ƒ¼.kã»Ï¾xòÛ‹@õ­·¡±mÄ/_þã/'°°+8]f2ÍBL¶nÞ½y=€Q6ÒEzDB$Õü[SÌm˧3ýàÁ篫'ÏÕ—U ìNO_Û¯;3™‡¦éeß»áäáÓOž”eÀûPKžj)€Œí›Îô18~òÉåù™FÉgÁÛ<‹‰d°T,×sçÜtoo2?xÚÚ¶:}SvCî¼X.–Ã\h©’(Ú¬VÃñ¾wÁ›^÷m[Û$ÆY*TD"ɇ‡‘Î÷][d@G⧪œ…­ONß÷EQH QÄ·Š> Á*ŸL#L—:V/^¾üîù÷ÃAä\è¶›wß~{â°MÓ § sï|K¥ ®aÿü¬|rÄf ¾ÞEY”“ýq¤} ÛõŽ€»`l[òÐx@Oض]$”5¶iš+{¬8b(ÛÆ›€Ä€è{Ó £¾·ZkÎùà8"j­}0Î9¥"p.·öZŒ¡ ²Î…Ö´Z %Õvªi›$ŠØumrž8Gk ²h»1sU_ïÇ!Þ˜?ŠÝ_ÓŒaǘÝüȉóÖ£î9ï3x/{ ïœ n7Ð~z w«çŽ‘Qxß^áCc~خÎuM£qÒ>ŸŸÊxØ/~Û/æ6CZ†eís5Èšˆyªh~¶Ø4Ö8Z7ŽC›?^rë‚1mœè4׌3ïêýýÉê¼w´îƒíýÈO†JGqá}’ Œë¬GÅ#‚‚õZDIÆxpž˜âž+Éóá€=‘N&КFr$I¹)8ã(qÈÆ§ykÕuÛµ&ËRçÍjù6Kb̲üÊ‹ãp:ÐYnýÖBr³X¾šì;Ö/ß¾ò-ýáÿyí…àÑg_|Î%ðDóÃÃFr²w "-…B&´ŒlÝfÉ€CÏ$O€È[Iê\SWKNn0È¥”œQ'mÓ¥±jë¶.ëX'ž|öèó¯ºÞ2ÃÉ‚ŸŒfgo»¾KÓ !ºÆ÷²L™à}ðùø¨©ËårúÞ[JòD§y~!t̵p¦cÞ¿}ýüù·ÿ²zþ=—IíÚ®íLkcÙ¶¤`(†¢±†€':Û?˜ý«ýgóeyvq¦täýãßÿÝb¹<<8¼xw~v±)×­N†:lÎ.‚!x@ ²}ÓFƒÃl8±äëà_]®Ëf1P—dzÁ'Ÿp[w‹Ðù M¹$_ÔÆ:g üví çœ Æ:²!Φ„ŠÚQç‚# .86Ì}ׯ‹&1΢(aÜ!ãBJÖûQà\z猩"w•—bŒS2 !x-, GôŒsÎ4m‹Lzo€Ppήv¼vV÷)ÜELÞúöß‚?xåóe2 Èï7è6ÝL‹·û³WÐÎÍyOù›îwm°@ïÁCt§ö^â î()°[b§«!»~ðûnÌ ®ìͷψ¶¿7° ÞìAìŠ÷wû]­ ÜæÖ º{¸Ø©š÷òîo›ÇÌÿÇ¡*Àû^Ò´KïãÇ”£¸ó"h7ü ÞÃìî˺ðLï7%QÅp8 ׄºÆó,bë²’yhÂE\hä~6í¦@¥­Ì°A:´Ý»£Y¾)¼ŒëMD±®y‘ŽI ¥Æ(Ô~½*ɃŽX±~a^ÂÁ§?N›·¯¾ûáÍË$妭<=yþ¿÷—gÃñ,”IÀÞ ºbÕVï‚[úà‚í×oª~°Ùå‘´ZRmè뜲,KãŸÿÉþãomº:ÏÄp,ßž½a¨¢9ˬA©4òb¹Ì|Ü¡Ió½r=¯v4Oß>{YVkÎ(ââhoÅ2QÌÛª#³žŸOöfÉpd}°]¯â8@hêR…ÐU¶íÌhr¤öíz˜%zNVq\,.´Ì¸”uk÷]ßPpZ¤Y<€# XÛqœ(|uö®_®m0žš”{ëãÉè¿ø¯þË®)W›Vj=˜|ò‡ü8Úyßš~<{ȃ®Zj¥lW•MeãHk€ GéññÑružDr’g 0²œÃx2̲h8LÎÏ/•Že¹·Bz(È Åã¶÷>ýiè+–$q"ú¶.&¹ÔZÅgˆ¾p0m%Eï×A¼›zî0/ºx܈ïéªâGGípÃ]ßìJ㧺Åm¶ýãzŸk‡a·PËkµ)¶Ûð~|æÇ&úÀ²Ûî(üñ€ÆBIÛ] äWë’qsÕVuWVJŠmNWqÌT¤%C@ëújS1®ƒ'!«ºÐôíºnÇ£Ô–åI.=¯æß<{—̦ˆ€3Œq&¥*–•Þø†8cÈyÖØ‚ä"VZ2.¿²‘!ðÎûà9gBÊ4IÛåŠÈ()<2B €qðÞ!œ'DäL†Q "é9¬5J`¸ŠÁº“%BÔËßÜó¡Ò¿k¿ëÖÏw9€ÛÛ?Tvê O¿õÎ!øøÊÕ‘Þk7>ð·BL¼£•¹m¶ìÊ›áö¾€÷}n3(‰îåo­ðñîÉh>£ä'| ‚Þ[Û5`„%¹ßäÈ!îÄS~„#¸Š·¼fn¶TÇûu¿§Þkq÷ïouˆUeòt ³|½ny2LTÌ"Ò‚—:µ8  J©¢)ã4GœíºÎ#B@ßZJ)Á¹LÄ»·¯­õ¨Ó,î³wüˆÅÿhY—dÆ×£0(L£>?Þól~úbɘђ"Œ¡3AY˜¶Þ ¥ŽG:X·©+ï5–% #ãƒGnʪ-6½R¦ñéËù«7‹á0íqÒYûÙ烺­‹I£#W¿Õ,äI´—)¯ÔÅjÞ7u=%ZD"ÎT Þ®Vø6O#‰Çö]…ÎVͺmËÍü SjœŽ4±<&Ó‰3›Ó“ïí¤ô\è¦j‚ë¹N'‡_|÷\7Þž¼9)×ÕüôJ«ïõ·­ÍóÑòm’$¹ëZ¡Ä`¶÷öù¯É÷ƒá¨šŸéÉ£Q>j×Uidììô”P ½ÃãTIMqUU®ÐQ+i­—‘œM?!æ°4¾~¹¬Ö+É»¶î@dÀäh˜1uÛ¬—RÆÞšÐcšÆšÁÞxÄ áq||ptþât~²~ðé‡l8˜ˆHu¶ €L'ÎBÙùt8^5긨ÖIÄ#%¹ÉXY]]4mK¤ý²ª¼+gDÐu=cáûß>ÿæïÿÆÛj¢8ÎÒ8‡Y®ÅÍeL/½rN­WÍ¿üòo¾ûÍég_ýl6c/_¯Ö‹µkK⤄X^¼EzçlCÖ»ž)©J쵌µÄ$Ž‚#àÜ“CÈ™÷¬uÊ®Ìrýv]”O¿8šžüðjyyfMÙu=£Zë¼!Ž"g<9 [1}Áz«c¸ŽO8cÁ[jÚFî¼óÞ[4\cz! Ö!•R»•à…w3né„p•rÿÙ¯H˜­õ­/õpûì»Ç¹jïd³ã.Òt¹x“(ü¾ÁÆ•m,½Wùo91 Á¹L”%2ÍÇIlWå0NPÉ¢m£X0ÓhÅ¢Qì9ŒpYuB%¾í9™ JÆBå×—½åÉäLhž$<¯Û7¿œ=ùêíÛ(ô~S,@„h4†l(ÛMåBºÞ„(ZŽóåª÷:g*øöÕ‹ãGûÁáò²ð‚-]?êýçO˜/…lÄ´ŽŠõ¦·Fií-‚ÁI*“<]­ÛÁ8ÃÎ&êËÅ©@{v¹IGª±64®¸(³Qî™<Ô›u‰®­Mc«Î>x8Ö¿øá Ñ÷å×ôÅåÅ»öâL‚·íJ+¨»v<ý‚‡øäõ?±Î:ëà !W6›ÚËGº©Ö§'?<:Ú_lM¹./.ßEù?ýšÙ®˜_„®NÓA±\2ÛåÓñäÑQÛ•Ð;‰"?”ÔÛúüäí Kwóó· CoÂ`8“Ašœž>Ó.pBÃE±Œö6í¹)*GÈ¡* 㬒zOlÀÍz>gQ”4m &™d2é¬ÚTÎyÌzMƒÉÞþƒãÉÁ^ª›ú»çÏ=†Ð¸à… ¤>üâgbp9Ȉˆ\˜¦JY€ét2ÖIBœ¯Ï^bݦ<Øû©’©æj2È|ÀÕå"kçúT}ß P„àP¨º®£¬ï;_–Ft®)»r]?™´u!¨(вYÛ·ÄÈ8ΆœK罂ò½ "‚ý½} Z×Íb~ú’ƒ©ç«,E;š )‡^ºON¶úáÙ¿ÌööªÕzîÎóZ(Áxð®®‹½áþþþdA®rÁY »Öñ(’qB@\žóšÓ…iÁÔk2Á= –ñWËúìì2)õPW«¾] Ö e“ëÍ: @[“†€ €ï%Ó÷.b¨[nÖ/„TJÇ:$‘*øÀQT-¬^.ôÙꋯ>ûùO¾üÏþÍ/Þžÿꟿ©W•o;TÒsdR2BÉ;œ ÞA Aj¥´TR‡°Ý겜1b ¤dŒ…Pr¥É`hÀº@RJ‘gŒ9ç²,Ó*œA°Œq!„”GD†:’Dž# ܪ_ض  7Ö ·yÙ;S0ÞEè:Q…v´‚·Ã Ûú³ë¢Š7ð÷®ŠüÖJþV»‚¿[õˆ×42n…:×'•@p“~…»Ôïn‹¡k¥ÑÖÞnÞ,þŽâ÷q›¸öáÙUˆþþ(ü¨àz†îl\=Ôý# ~Ài~vÛxèGx…Dï@Y7Y=ï¯DÀ‹ø³ˆø«¿ú_ñ䓈§X9_ÇѨ©JVÓr]&éX¢€fÓRP“RÇI<4®bȳaºY—‚ºªâÉ~´ddßwµpìòâ»7/_˜úHí?x|°ÿ9Oø³W PÝl6xórÕ¬.˜DQ¹¨É…QΕrŠ»qža-ÚÖS–+ëb=ß½)ºà$÷sÛcÑ›Åd"§“˜3Íg_¿H™¥ú¼\£6ô£i,]J,ØàU½¿7#ã‹bI L¯/Óá~[£,ç\–MßYX/kp0¿¸üýW¿ø7_'TU5SBŠÒt’$™@Ü?~, .æÓñ~²7J¦ãó‹ãÑþÞƒwßO’ëhrtpüÓ?þši¹÷ä'C±Z¸¾Ïq$.Do›GŸ|9žzÓvó“·ÐÕ‚¬3&å“iðn<›žœ]ƒÆyO«]È´–’{oš¦µgs-#Ýš>M9ÓeÇ0@h{g{r®‚k)‚7}U¯û®O³ÔëÛó±%>H£bqÙ–ë<Ïòé,RYœqëúÍü|2=O4c]YöÅçeYVMS·• .’)–&A3Œ¬é9FµT¼,‹½ƒñºªžÿö;Ó´3Ãá̶ï0,DYµÞ6YÇùtø¿º\¯jÆ2®0@G}c»Þ9p8‹QpÁ%´="yïB`Hœ3qü 10ÝVoŒwÖ·M_W Áã8¶®'±‹ÿùï¾ýÃoöóŸŒÇÿüjÏôûëªnœ=9[£ý‡3¼oÛ´Þ:o,dŒ "`BJ‰B€¼ßnùJ)»® úÖ(K¡¼wþÊYÈo5-Þ{€€!lGOÁ…⢷Þ[L€ ÆPI"Ú"ȸ 6ôW[MDžîø¯Qú­ïñA ÛÚÇ]~ÚsºÊ #€èº"1D[¨zË t"GBö~i מ;"¢«Ýµ­AÁMÁv×óç†n½>p í¼IºUðw9mÞ+èw¿ÜÕ³þ^nEï󴌸ñ±Øo‰‡ûVÚa?vÛ]#LáýõhØñå¾·ªvc»~N»¼Æ–bž]·V v“G$œoÞœ¤‚úô rÊ*_·‹Áx,Ô¦õRÆ’á`~ö„nr|¼)+æ]>‹Ca;¶¬‹ªµ8¯£ôhq~Ê‚YÝ›õêZŒ¹R žüýéâÕ§_þýæé£áüì5|Õ›5Uu–§ ŽI%bSÖUÏ›.4}Û·…t”Nò{õ›_G{LK…}Sg{&4zHÒÄ;‹Áð½ë)ïBÓ¶@éL§£¦®Y°éäÓºÙWgŠÕË 0.ã8JÓ||¨¢h³<+//|“£‡Åú$S,É8掎ÎNçÐ[Óú®ñ€2蘧Yš$C LóüÙ÷o^¿Y³ „dI¼¿\4eY7Uß5}¹éÖË®©Q©‰Žâ4Ó@á7¿}ST$£œ‰˜‘3¥%â8Ët¤Ò$‰ã¥Œ÷­d¢Dä=¹à=äɇÃÑáëo;ç‡Ã=)¥50š|À:f+Sé„®ï½íön4mL,&lsñÝåÜ}¢÷¦MÞt0È'O¿¿xý#¾^]ï‹D°õe߇ðv¾Ž³4›$ë¢ë­ËǹLøâôªÛý½|‰“‹s&ñàÉ'½;]oÎ…•M L4Ö×)Šn³1ÍååXÓóï//WΆ¤1U W†AÊZj’Ñp0Ë›™LGuÕ—k8yþÝÁƒƒ½³6¡Æ¸MÝa@ßö£8!šºëžÿö›0sÖ˜®…ÒÁìàxЙ õÎÙÞy§¢˜IUnVmÓtmµZÏ¥ŠÆ{—m±Êv}ãK1MÙº’gýÇ|¨¾ûí¯ŠËó4ì?øìÁƒã$š6NF*ß,ç¶µëùr$³ºn»² CÛn4CW®N_¿¤ ßSÃáÁ2ß(%T ÆJ±Ÿ¦CÓ™j¹FðBg›¢hŠr0šŽ'ÇHîrõ.M˜¸Z–å²,±k;üßþ¬­ýfµàÇÓýŠQS×2ÛKF¶oW · dßû¢ì'Ó‘gb½*ö“X€É3e mÊå`<ªË†Kfëf]¸Þ#BŸdñ}ýG'oWþ_ýÙŸ}6N‹b)…¸ ÁeUûoŸ¯ÿù›MÕ³Õ²[¯š¦¶œ§BJ@G*V–ÞZ7 ‘w”Fq2L†CÛwœsÞ°ªáÞFF±µtÎ0’ñ¾o‘Á5"ù`=pWyÑýy%OÎMÂϲ<šÌ˜‹H±­CÆ­cL)B0¾Ó‰V±Ô2f\"@d‘ómÅfˆûLqõ›ü¾–á-(ä}ø ÍU1ÚI Û>`¶Åm«>!ú€ÛvÖ½Ž)»å¯yÈÛÈ—ëqš<Þøö®Å©7«[72$ÚE–>hß×uí©ID×1õá¦9^ÇvÑŽ…ÒÕ«ÝŠn†î-Ð-X½~qÇúô:™¶}ekìÁðzk!°[oX@";pá\fºÑ¯2b°í—¸¥ö¶+èï@jþ†ÂAÜ¥ëÃÖüuwWù† Û3Ó ·s¾à‘Tžˆbýå>X\\*™:¦Lðm××uÏ‚7.Œ'û‡"EƒAÛmfûÓýñJÄjYÚWº4Ŷ,L·,³á,Îs¢Æe™lšj³~;4_ÿbÈä|s-˜óöt~i€ú€"Š£X6¡RðbÝ2 dµë²ÎóqU¬ëM=ÌUÝ.7 qÑZƒLæùÈô}Um´”Ïž///3Ù÷ 0²m%ôà³ãU¹Š"äWy: ”ùhàÀyïxÕº´}‚ã| "ÁØ<ÃãÉâü¬^¯2㹊/_=åÙÅùiYnʲÆÎSÛ™Ùt¯,WóùåÞl#0²Ã<â‚GQªU<™M™€§S뻳7/Co8ʇ_>Õ£Ë,Ÿ0äËË ­äÃÇŸ2g™î*“ec)=˜Š‹Þ¤ †Bò®mÈSë!#g»H3dÖÚз]Ók]\̃íö™Ò*ÎâXÖuÇišt”§i.¤žì?Pqæ¡bDQEi6ï%ùÀy{yö.‹EÓ˜,;gÓ`2-—År1œî{rQ¬ÖE§CëÀë\äi’ Ò²ª{ãËÍb±Øßß{üÉcÆ6?ýúÑÁÁþd2|üd<³ÁHŒ¦±Šâgß_ΗeòŸ{³ËÒ+;ìÛßxæs§˜#32³æb‘,v“Ým¶ä–%¡ -À0`øAzðŸ2 =øÉðð`hhˤ–Õ£ÈnŠMvM¬¬œ"3¦7âgþ¦í‡;Ä,Òp࢕qãœU{ïo­µ×jt{{}ƒDMhÇE±ŠŒ±®ëÚ(N™PRH`ÔçœöÞ*¥dæýQ÷†1JBc; +6’s‚Ž.€8ÊK˜wŒí\kì¢nÎÎ/_¾xõüëošÖô#JÅøê&£¬—…QÐÕåüú:ßzGœÑýá«°ët*ç”pδ֔R @RJ…Œóå:ê’~·Ö9£=¡’¥ÜÛ;ç1àÉh÷„ËÈã 3Z~,«!l¶c–3ò*ÓýZI¹üZ·Y7ÝþØÖÆ,§NJ3œ!lͬ%ýòmqµF€Þ;¿eQ·„zÐ{D·ùbXIE×ÔútB) %ŽQ¤àÉòDë×J¤W¼7dé=qê.é„UL# ˆ°fÂ)àrN^ŽÊtM×Â*GׇŒ»?ñpßrgsa”p ‚zÆ3 Ç@R%@ ˆ$ HN'Œ!!ž.od L’ÍsXÝ,¤à<2 PpàœpF# Èò0±™ÖDº€®²âV¿»ÍyçÛÅ»Uˆå9kÙýéZ$„0É„ET‚2£‡{1qÖë$Ü–eÝèƒÃ]]ßóˆckë±Ñ“éô,ŒE/ ëzÄ.&ó¦€~¾ïÐ7·×’v]5õŽÖ¾¢Òë®íʲšwÄv'¢£½´m‹Ùl1½^´MËÚ;ZĶÑå¢(f#*‹r]Öý¾@f£4°Æ€"Re·×wfØãj³èò Ò¼w=¹VB]OÊÛ_ÎÚƒ£Þ~ÿxÿˆ{Ïë²Ü± 4º4ÍmÝu]ëAä½v̵®©ª¹ïi|$qõwûÖ¦ömé©£ï>~4ÚMlg4U;:|(Ô /í´aR¥ù0LÒ|¸›ö†‹ªjšª˜ßûà Ûrnu­åTƒL‰ª+ˆñ;G> nÎÏMÛQ.¾÷a1»üæë¯ƒ a<2hëºØÙEYn Lo&Wg“ãã‡7“7 MšGLb]OÇço&·ÓÁhÏ9¢ÛN"ËvN_¾ZÜ\8¤"Œn'×{{û­õ·³i¯—Žvϼ§‚áL¦ùžPQ’çÃÝ¡÷n2[È8F:Ó(•¨03ÎÜÞžÕu1Ìû¦n.Ï·;‡A”0îŠùU%åbÁ(§2®ëÊ9ì vvwºº6]ÝKÂ8”i¿gÁ3¥¸ ‰S@ÐØúÑ£ÃÑ ¹º¼øò³×¿üÛççÓɤûì³Ó§O¯ÿìÏ¿øË¿üj¶ ƒÑlqm:ÇY µ AÜN'x{scÛ®ßïGi†@»º! d º¦ò–2!˜ä2aœDi¦¢0¤Œ(©$çÖÚÁ`HÃe•ãˉ¡àa+¤÷. lÝWÑ7~©+Ý$Y®ÎO”,wƒWx9A¤w¡™d9Ü/± „Qª8•$„@BÀ3à”HJóœ"d€@‘Q @9eœ¢¤DP””0J  @)¥%œQΨäp¢H < @9F #(9 Üt„%æCWYÍ¿1WV2B.»ïöZóº5GŠ£4ée49½u”(g­£6]Sº—O_ìô³ $7×®éò$Ȥhó&QÓÉ@¢K(‘æ²( ã\)n<4ÎÌ®gÑ,èå KuË4ÙQŠil‰íÚëlm- ²^ñf„£[$l’Zkã$fÆ ¶ÖÌMÕ>;}^è*b"ÉÓãËÙÕ7¿øÙGŸþ~~œ£ƒ¢+Êé¤"ßÛ'ñp2_ĦfA@Ô°ktFDYTW“ë4³´Òu)„×E’4Ì#§g,H£¼o:Û¹¹Ÿ…°Ó ùñÞå¹üßÿ×ÿùÍó%hrB°ìlçГHFúüų¦¹Ö*ôºNÒ¨«K°. LH)£$ÓfÑ8‚½AŠÈ‰²\*ÅY.Цm½ Ö8$Jó@mÙqßs½duK§ÂtD¢‰¯Èr`£Œ¡†­sn^_ΟߦŸ|úÎû'u×1BIãÁ0G™×8h$­6ÓQ2juå‰àLÅQè´—L•UG¡÷ÎYŠF•µÆagäõ ét¸à IDATEJ—ÈÒú¬ëÖ3ܼ˜d²ª+¼7ººédÆ ŸÞ¼ì(¥Àyg¬sBFùp ©*ƒÖ£&•¤žbÕµ‹Î‘ÛyWV…qš ž$³4vD#²0è…>{sí-XçöîrEn¯nÁЇ'GŽúÛÅ\Æ*KD¬DSÔ]犛YÝ45ºñ¤jêÖh[4d|¥§3ßy+%½Ì¸ `q"$ã³ñÔSW¶…÷úädg2.š‚Í®Ý__3Ã<-f3ƘGv5¾âÀ“$‹ 'M×]^ÞVe§yœfB©8š¦Tˆ'‡û½ƒÝÙü¶(&]ç£~ÿé—?Ÿ>ŸO¦<Ì;#ÝUÕíØ´•íšr^‚H†Ã½,‘ŒYÎ9•aÜë÷‡;„`Èb±ˆ„¨·U9q”÷{ŒJJ„nË®.»ºúð£OŒÑž@”en‹ùÜÛNqPBJ®æe1íq!!M“¤—÷½qºTD9 ž­Å`k]“'¸Ä¦`Ó € ”!a»{»Qr åÉÃ'W-nÏ»Bû{e¥½‹8 ººY,ªùbžå½ñõu?Ï“4BκVúŠI>.tk]ša@;ÓÖ… EÐë…‡²£>¸!š~°;¨\’]]̦WõÁþn¡+Âåhw? ¨@º˜T΃bÜl( “À¶^ò¤0õåù årï8bqyÀYæ§gôõYÕuîƒ÷ÕH¢‹Ëj<)ŽŽªy=¿®lÇme«ªe!Ga=#Öµœ#Zâ=RA€y`hŒnµvV g>~ç$ßQº)šj.YšîW7gÕí ²8Ím’„PΓ¨5Å9°¦éŠ’¡‰C¢¨«Sg´óÖš¶­ÊGGÚ¸›Ë7À©Û²ZÌøW¯žëÖìíFq<ÍÓ$ãŒqɳaÞµÍÏòÓ,‹³,Ò­Ó*‹^¼xqu~uqqýçòÿR¦YÊ…°¦3º1mK‰7MÝDÑQUu¯OŸJŸ¼“ïô]S‰0·u=\JAÎgÔ9l~ö×? X0\ïìeaÀ­ÑÖ¹F»¶k¿üòoûýþô¦Èâ–×ì¼÷Î-/oûꀧ€ëR¸|¦½Ç­`µ-†W öÊ Â:@OMf¦25¢¼¾š0'­!^8&BJ;c²Q.0‹ÌƒŠ¤¥FEÜ!ESW]˜$ÔÙO¾óþãŽÛ¶ÕËó^’ç³ñeSµ6ºóY^ž¿ ”J’½¦#<'÷‰°a¢N_~óùÏÿvw0dTXÝ1@ʰ*‹ÅlþÕg_œŸ¾Ùßëe½¤³ Ác$q‚0“Ë7Õ¢ T"åBµµ­ªf0ˆ±@J÷²Œø2JøtróÿáÏóE[–Y>ࡊ×EwöúõäföÅW/›JÏf³´—…IÈ™`L wFaå¼i,cy…·7W»‡ü~]W³›)“r>»uΔ‹Eœô¸´LØÿøçÕO‡ÿâÿôÍU‡|8ìsɳ¼ÿå/?}öòòôMk KõÁÇGÖ`ØÛ¢ðWŸÿ][Öã«We9›N¯‹ù$Ë{ç×A”v¦LçaØ+7ïíœüòóo&× N¥pÎ J€8> ælºª™Ešg* ÎÁ`gO.8’€±6Oò¢\X‚Y>Œã”0.ƒ˜R.¤’¢Šáêöž ‚ m:DÏ8œvM à=q€À‰rŽPÁ­3ŒRâ„âq¨øÁÑþt1»O@È$Ͱ¦®Ã0*àÎ:*©Ê;í¬WA@»N@*PReU )7J £ §€Zí8•ˆÎK‘ —k‹†õçnüRt³*»$;ý …^jæ­÷Ñ#ñ°b‹—Jžõ —åv¹„ºœD‰_%­À²žxô+º_V$rgãì—+[Ùñw: 'èÑX-›¥Hˆ#β¼,À; ûrùk³‡µô“zfÉø;Ì#xËõ:‡èxBn¬J7‹eËmh d5/K3®b¿l^£!¿ŽÖ¡+Š{½;Á!Aï¼uÞº•'®ö€×Š-«§ „]ÑΗ5z}þX®ÚáAZ^ Â[©HÀ/ŧ€#°äa¶Œ”`µ±Öùõ“¼ÛÇ[&LàRÝ»Zo¸Ã¥ç‰;::ˆCeʳËóç‹ò¡íÚN·Ú97¯ÞwÅ´JT¬Ë ˜ÅAõ„ó›ÝPKÆCå´¶Ô{)”1”`¸àêÑñ(RL2…Z~ýËód˜úWgW`™Á¶j“ëËf6žvEÙ #g4Ejt:0UE^=îíFZÌ> X[{Î!³®ðDý]ò胃¦vo^ž°(€Êë³b¿?¬ê:¨‡ï×UK%më†u2UAЋYè¶rÎ¥yÞ´M$UQkm@ ûѾ—Ž2kÖ­4ëõ¬ÑMcT’‚@]O®Ó¤Ïx8 ûƒ\pGâÅóo~ù³¿½|=AÏâ<^úÂóy]—_|þ™Ñîìl|3/ŽÓLéÎ3ªŒvÓi‰LäÃüw¨TÞÖÚÏó‡ÇÇœ3âm[5œI ¸/‹â³¿ûHð¯ÿøOf“îèø$Ë“ ’¯_žO§óW§çUíŸ?»Ö–Y«FƒQ×Ö*UÐs„QIšú{»G»½sX•­J&%e €×íï÷f·“ ÈþÏ?þ3„áîÁ{‹Ùâèppüè ×Ï6gW½Áè/þæËlðžÆÁ;ïìÇ1óSãó³/ñs¢;Ó´m­Gý½Ó/)ÞbSUÎcœ¤’u=2˜L»Ï¿xÉh€¸Š8“©Ö‘AT¢Õ]Ýïå„2&ƒ$ÍŒéêºÔ¦5îå}Î¥à²(«Á`'Ëz@Q ˜ÝNC%uWúòvîÍ{™ àŒ N9G‚à¼,Þ;Ê' €Ö5ñu¹˜–Å´œÏæÓ™5z>_Mæãi,â$É;m£(¤¥’ÎzÂc”xÏ€´qέµÖZ!8,¹?.D…ŒQ.˜j ì“$‰½Q~ Làz†|kDÝÆgî}zkÖ_ƒ3«Í¢ Ȱkì]Y¹­ÿ›U£Ui[Ñ“oŸ3üÖt¿q+]úUxï¼ß”*Š˱ۢ÷¸’çÀ üX ™6[¬ð6γÙHx é‚PÖ-¯p«–“{6Ö¸2ÄÆµÍIJðûÍ}m•(ÀZdµضã#—…{ë1nè \õ+ßl ”Q ”.ÿåà±:tyÞï z²Í@ãݽC†Ö?âÎÛ{sXµ %­¾<ˆ8¿éñËŸµþÏ`uzÛ>~1Á%ž£!¶ÀrJœK³^D··×åb®¤˜Í¯9ïv¿ýÉñ ›îóÞ ¸¾™ÎøQ†Ì´zÐlGºº T°¨[Ê9 B%•B__¯©O^?»íj;ÌÉßÝ–³“G‡ójV˜'‰”Íïüèý½Ýx´{®Ÿ}yéÁ_ŒgLôFûÅüƘæìì,ÍB >ôÇÅŒsg ={¡Ëy«ìí$Ú–çó¶Zë,O»Æ»–77 1ßóÓÉ,Žã€…õ¤î LI “LPåùWõ«É­~òî£, Šâ¶«Û«‹qÛêÏ¿|ñ‹Ï_!ÏYïx?圙ÎÄašfEo.NogcFu5¿¬ËÙÞîÎíd|uy1>;¿|}Æ8 Ò)Ÿ]aú/þå¿CÒ—l ›òãß¡(‹öìÍEö¾üòÕÁÃOöŸhÝíï¥q&„’Σ='Õaöò^ÞóÛ[ÉyœÆ"ˆ€éÍÄ;§\€}sú:L‡?ùÉ—»‡Í+o»æäd—P7 ž=ý¦mUáéUc1;»¼|rr˜„…'q1ÿòg¿(n¦Y$ºº-«öðèÁh´GG‚F·¡mÚ%+‰è ù—ŸÏ^°À{DY%a”&“$µÖ·ºóè8A!DÓvÔé½!Þ FÓy[·*PIžå½^¨cÌt:!hº²özå|ÑÕÍâv^,Qoƒ(rè¼wŒQ¤ëºª.=¥ÈpB€qÁA pʤ`R2JÑï-ز={sþüÅó®3\ÒE´ „!„"åYžúaïØñ 8xñâùÁaŠ6ÿê¡„´>-ýàÑg_œó¦Ù;9F’íGhªW/¿R,šÌ@’¥YÓµTH$ÔƒŽ‹Eu«ÁzoÎÊ$ ßÿôz~þÅ/Ï žÏ+££ßþÁ»×“3.öž½~ÕKÂÁ¨7i2SÖ…]usü@?NäîÎèåxüõóŤâ4¶ï\ßÔ—SmËîfÚ>}~#c^·^žiZÌ[$D0pŽ*®˜ã¯n£@&AxvzΙGn`>݋٠MþÓéy48 e„¶fŒDQ@9 ¶Æ8*¢Ó7ÏCN®§ï` ò~‡–C—¨°(ÖZkAÉÐXÍ8Àñx,dòóÏ^õ÷¿Køîóç‹<)xoôÍå\ÅÙ³—“Oô_ÍŠù¯¾xóÞIÐÛí"ÊÅî̼¸<}þ* ÃTXk겨m÷`|ñf1/…ÇŽâ<í¥ñÕÕx>+»ûHÃÇï~ZÜŽuÛތǻÑqS·WW×;;ÒxÐÛÛóŒC+ç³Bžé''¡`mQÜÞÜ&qÊžiв~UÎàœœ()‚]!¸iýz<Øë{ïëºBcÖè@ ¤¨X•Ƙ\ж­ ±è¼í £±c@Á(Ñ(zÃ#*‚íì¨Ê»àšX¹ o> K¸å,ï×Àˆ_Õ!ð+Àxù©»à€Ü÷Ô<›ºå°°e<°Ì-Øtš•ge!´õ­GOÖnpëmX[Uâz‹w;ª·€šÍË{â×PõÞãꙺòvX/…m¹Þ¬–Öø5 °\XY+“"¿¾a‚Ä#]±+Ê_¾–g£•¨_±/d3æ¯`¢‹Kœ'n[-ŠÄ9â–eu›Þù%ÜËSÂÎÚœöV9eë¹"‘ׄ2®ÀÜ4'Ü@…÷>K6‡³Äapu}Ó°wßÛùò«¿Ó­$+æó…¸øîwžÜTóyiCÜ,ÀølÑekÎÏÞØîõ|ü¦¿ß3Žt„KQ:-Ι!‰"à`'xø(´¹ϯÇ3)íî¾özW“›Ù¢è Äÿó£‡ÃJW‡Žç‹zñò²?Ú½¾®˜õ_N^JÈÃ7¥sqÕ4T*2î>8þð§ó×’SJ—Të²™iUœA§îÈäæ Lµ…98Ø;oÎËfƱ±ÖV¤þh4He ŒÏóT;ɵy¯µ¤î%ƒFˆ¢*‚Ú+B„v ^œ]fÃzQ8 œspFW B\§óªjµì )#Œ1ÈiÛqPêÝw?š–” JcÀX$§·SBüôæ2 㲜ß\Ã^I‰L9‡ކù¼TêÊwF2 X˜Ù_|½·¿Åa”¾¬Ë þåÿñÇÏ_,’ô¡JƒÉeU^Ìòél6 ÃøÏÿôo8÷N>bRÖ¾9zyx°sDñlÒT‹ñ„çÐ.µÈGè1¤4ᆊ|»™Ü*Ñ{õüõ“w>ÜÝ?pÖvšqv9ï#ÅÉ‹gÏŸ¼;<~Ÿ).8iƒ´«ôÓg/¯®_ƃ÷‡ßy÷?´EÍõ¾¹¾ý¿ÿ{7‰Š{ŒµUQú(•2DDE”R@n­íŒRÆyn¬.B(Õi3›M›Ör¦”T·“ •J£¬—3$]UJÉ zFH’ÄxÜÛÛç„z‡Ö›®Ó‚‹ÇF ¥H“0à‚3Î(!„RÒ:s[¸¦µ®3µÐÖa¨ B«µGôÎ:Ç(!Îj*BB#Þkk)ç”1!„1]DRHš¢T€¤%+{f¨›Ú å¼¥Þð€w1ðßò®Ä;Ïäí…¿‚ÿ¿e,¼–Å“¾%*ºB¬ÿIW+ZðëQ©5õ&w`Ó'îr#·“å`åä«Ê·b=¡dãaý¶8Õ߸Ùþ<íÀE¸gÿãïY‚®˜†MÔÖz`¿Û¹‚­ãÀ:š ÑyXgv­¦ùuóD²´ŸÀmÞa;bl“D°1õxÏt)[…UÞòÊ7‰®ÍâÖ¡l›_õ†oY¶aÜÛdÝ6ÀöáîÞ±ú»"±yžŸ]7-ÂôƒÇ'¡þ: ƒþn¯wЗ…ëµ¢©Z¢‚§/§ei©t'Ç£8ìgéàôâìñãGÈ«ÓÓAœ„ªØËû¶)Ó0þá§ÇW·Ï?zÿÁƒãðòbn|5ÜK¦ãY1û÷ ,æqŒ'“ÛëêàÁžë‚ÖꪫLEÆ3ÝSó£Ã>Pñz<·H²8º¼¾¾-l¯·cLS6sÒ褟L‹6í¥õ´Ó­í¬ÖŸ¼óàé³3gœíê×uI(]× ÆŽörÚ~÷ÝÃEeÆvj[ýó/_ýøýã?úÑwÇm»¨6Œ‰ê›²ÛíüÛÏ?ç!g¾½¼@”Å4MOæÓ žM)ÔA”$<ŠÁµŒs&dc1íïýÿüßøÑþã4ëý§Ÿ½lË݇'ÿðúæ6Œ“õ¯þïÞðaΩ®/ÏNgçø{¿÷ŽŠsÞz™ìõ?Ù}TÌ )$e. %{Á`ç“ßéÞ{â±-+NÄùéåãóþe•7±G_•ó4 ãG½çÏ.ß{¹B½íf¤nkBc,Í2g…u\fÓ‹v¢,C‡à3朦”;oªnqöÙ¯fã«££èÓßþ­ƒÇï%HÛ´óY1ûòë¯ó,ÙÝ=ÚK²HæÁ-f ]E´)kŠç¯n«E;,zôÁûç§O_þê‹L†ÝþAÙ.Î^¿òŠÊ¢ñ®m’(žÍŸ`ÓTQ4MõbÔ¶,JÁ¹1-"–å çBF±TAYÎ]cnRBIÕ5œÉ¼?@DN)!¸xQVUå9 qÖ „³º3ºÕåü–Šc¿GˆY±(:$Ž BÀzt@ÐyBœð„1ƌՄ8`ÂH I¦m…b@=¥ªë*Î)” ê¶3ºÍ‡ÑRŒhŒ±ÖŒ¡ÎyF(§VSk-‚áŒk9çL2«iFK ‚’MÁAŠ€oål ð7ågé6ñ–L~ƒNü¦Lùmâ¯Ý6¸ϸ:ó)ïáÿ#¡eóÎ[âýµœi¹Ë»x·T¶·=ö7MðmäWp×#7s4wïÉxrŸÌØJ3†u(ýäºËÀÜüÛ]”¾θR‘»ú¿šÝ—?Âáji ÁzlÅ®Ñíh³¥Ç7¹ós—Ô¼d_îÀ¢·Ã2é]¦3á9€««J ¸@ÃõÕ×Â8Žj§Ç/_µm „Pµåíüf~Ý‘Ü. UÅXw”sðÓýà ñâñÉ÷.OŸÇ—·ÓæÙןñ0`>–ŒJ"P»Þ=ŠGêôÕÅbáw‡²-Ã\ADMAlœI|nÍîÞp7'ïL:s¸ IDATï<{}›ŽB`ëA¦ªzQuä`oçz|{pÜß9ìwÏΧS§1 côhŒúÙëуá¬]”m ÙÚƒHüèï|sõò¿ÿoÿ1–7ÏÏß9zg´3xúìéUyÓ‡H×§T0Σð§_¾þêtÞ:4³¹YssET°óàptxÈÃdïÁã6µÎ©Pf’)%ªEÃ(­ÚnQw]ÍѳO¿û‰ˆBÊh Å,Ï¿ûp|Ý}ÿÓß~ïÃï#gÆ5³aLM±hMŒ™5'Îè¶Ò¥Ak;NÀu]qu‘ŽrÆYW׺.çQîíìjMÿÑù‡Çï„IˆÐÍ‹Š‹yxv~V•u˜„°0H•2ÖbW7h­sZÀßFaH)5Ω$ˆ³„QLÓzï“,cœ9cœGo½Œ´u•ö{„SΣ Ñ!XDÏ…§”‚Œ÷–1æ岦!Œ#÷Ô;ôÞ‡!_jRœ7‚òùtÆ)ž"pÎÑYo` ­ÕL ¶žs8c<1c”s΃o¹¼ÿÚzúpò-Œx¯alðëí’ŽoÙÉܰ¹;ókÒ€ï]¶²^ü¯Eêï÷$ðßrâ_6€ßƒõVP%n×ý­Cõ3l]ÖæËßÎçZG%oÀ–UË0œ»>³¶;B„­{Ü„2Þƒïïߨ2xç^rü¬“¬VñΞ”¬B‡7áiˆ„lŽo ¶Âac<Šo…U.¯ ï´GðTP©Ôb:ï¯g7æ ^†½ ¿Ûóâ,xôξmt¨ÌãïíŽFý—oìÓçc¤³˜Û4 ¤°Q$F;*-:w=»°¢Óš*5 ¢t@`næžðÚ[a˜õšv\éj6/‡ÔúÅIUqµŽðŸÿíÙ¼ÒÆ2íMgŒò½“¬˜—¯¯ºFI<ž]æC¿×Û»zÕ^O*VíÜéšÞ^ݯ÷wä8ï“g“úßé?ì??ÿæ—?ý»wö2ìæIýHþð·÷ùÍÍ››f·?è´»ž›ëó³³Â¤O¤‹Yù÷þè¿vÿàw­qép¤­¶¶5FqÂ(“£ØNÇgÞË…à)&áoýèÓ4; ¢ÁëFgØõwÒýÔcxšÜNç%áhI§Ñù¢¢œ1é×¾Ó¯/OßD*æ\…Q¦QQ–ÞZÁ㼿32­s\pKät^~ñôOZS+‘ÜÜ\EòÇ?þ>#Þ¡·Þý›ÿë_Çó8ë—‹2$öŸýÓ?ŠÃ¨ªÍW_?½º|pÕî1.QkÄëŠÒš¦º ˜ªçåÞÁ¾kKçŒqÖ R=ýÕoÙäò ¬‹wJ2Ê8àôÕéÙó—„Jm]qëH­8Ð]WÏ+]-b´­«ŠéÇÞÛAoÔ¶þáÇ—¯_ N¸Puã»ÆÚ¶Žâ0"¡hu³P*R ‚»º¼=yüDÅ9AF‘2*×àÜÅËWJ2.E†Øj&@„Q0,ðžyBœÕV·Œ3t$MbÁežõ©ó[tˆÖ‡™°@tˆV N)eÀXÛiJQ ¸Ì¯²B̹Ö#å”+ÉŒçÖcûÅ7Îz°M+F‘`@ zÊäééySºÛiChÓtUÃ)0Bç„ Gؼh>:¡JBÕV’Á¸) ²®õh #n=Pí ñP5M)l5zà* Ô¡s]kŒ§‚ ÝY΂®6‚r)…¢\f±ótgÏwBËaþáïþgY–“vau'’¾”‘Œ8ö?úîG?ÿêUœüÊbàa<Œ ¥½ñ€ÖB¦a*ÁŒñÖk¸¼8ß ö÷ŸL®§ãóIÖòÑ0y«µÒ;}[ ¥˜AƒÀ;r{užöâ­5]C9PN€x”œSF‘ЋËIÛT¾ÿ^…@-!ÆzMA9×ržt­¥Œ5MM€WåœsP‚w<¥ (eœ9Ò.½^TãÐY‚“œu¶å”Õå<ŠÆ¡16–2‰“ 1Ú;ç¼¥Ûñ^«5[ÜöÚ¿+w¢L wÞô°³ã$›}ØM©„m òkd$t•„€ßÌÜ-/Ý àkÒšâæate•F<-„êm†M<0nÐ Kã¹ål•Q¶ö%÷|œïõ•uÜo÷ONì­ÓÕæ6ïeîiŸ–«¶”¬SÖÖ‹Ðp/—ì®yÜ·(ÚR³Ò5Dµê9t[êú–ö÷-§£ûÉ«µ»l†ªä  p÷¶›B8 G‡½,“œ6%4U5LØÑAÌž_Ì{Y?Oå«—¯¨9í’ON¾yzúr¼8zT<^,кWÕüµu–õ‡Iv~: ùàA½nëÆù«³›8IÉþ_ÖÞì¹®4¹ËÌo9û]±ƒ$X¬"«ºº«»¤–FÒX¶åpÌÓØ~òàÿÍá';ì;&F¡OŒ¤™ÑÖê­º6.Hìw?û·¤îp%…cøÀÁ âœs‰ü2ù[NN.JÁÛ{Ý –ô&/¶EØL“:ºš¼u.©›V)Rmí¦/_ÅÁ°åš½¬+òòżÉË^wëñÁv¯·â·‡Çà“ý,ŸYÒ B¤¸˜—]-gï£Ï¶ß}ýÛ§Ï6~{~hüŸþ䳟}¾Ušñ÷gþ2çWLJ_|²ñ{?:üú²±þ`o[²5‹ü_ýËé¤úúðÒ[A\³+ žOΣ‰’ˆÀS̲~GzŽ„H´"ÿR7ëzÏù¢fÐ'oG 4ä€ÊY.ËÒ3L„”ççcÙ4RÊK*X̦Ý$ÃGÉÕÅEˆÉÅI¹¨ƒ8Ã$MzuSK&SVIΰõÞ7à …¬B’ oŒTÂ;¼Ve"zg%mîî_.6:]ëP ïLDQS› óêõ×ÝÎ *K!‚Bjs¸1ºXlonN§ã@É$IÈk-§I¢” ‚P…z1™nnl…aDÊ;7l֌ΕÅlÑéôâ0,æ‹4M;ÝaëeS—E>N•FÉÉñëñè $J!E$h-AB*$ᜳÌ,„ Aä­"ŠÔ" €™­1I’„a0ÍFWÏžÿagПŒ‹ùtœÄ©w®›EG§Z‹ ‰7Õãébn­ŸOg›fƒà½sˆÒX³4îGBD1›¯^½­ª"ŽÓç/ž!“5èˆ(_äÝ^R—yÖé#û Î JÕÔF%©Va¤Àyß )Ñ[”*@)¤@ÁÈBˆº5EQtÚ0\® –µ³ª*ç,8k‰$·Hý¬ÿßG¸Ã"_Èø¹+íÒ=õÀÝ%>œîn•—‹G·`¯n—˜ùÝK]”n‡‘{ ý‡Ãܽ÷wsNn÷¢÷ÌïøÁ×> ’~ *Q ¸ö,g |j»÷ à2oâÖõaI…ûìþûÞ ytí ÏRÅßeÄ>dÇ~ˆ{dãÛ+ç55°ïÛª­ÐÊLt6ºãÑ…€(L„ufw«?èÄB×4 ÕMâ‹«Ùdjzánh‡gWHZ óäÑÞËÃÑÑÛª×ï>z¼ûëßüº;Œ»ƒ­<[çò²– ïlö¼lÆó|¯ÝŠc6¥ßÝ9ÍKž¡ÒyžO¿˜Uàëª,Ò·52K¤|Ö6lãÚúñþPéÅÏÿèIÓœwS}vNÊ3ôú©ôãƒ}7]ÔÇ£ÍÏžïœJ9x¼ûGOé~õM?Êþ‡?}ñì ÿ÷¿:ì'ñyÙΛðݘšü~Þø“ùdC79ûñAïà1MëèÍ»üãq»3›“÷óñäÝéˆ ã0ëeÎûñdJ: ­uÝv…B‘µQh•‘Tùˆˆ‰ ÷Ü.•>ZÈ>Љ­+)–¨ª²!uœh0aÚ3¶íîxc’$!¡)´‰‡8¨PJ%-¸,KÒ4«êºÓïM¯®¢4eDç|‡Z‹nwã,?ïeÙl"• C-$2Bkkkÿ‰¯H/ÉX£Âp°»ÛIvEô6R%C­e^N¦ãÒh[ë½'-$:Îâ}Û6µ©”ÚYR¦i*TÆQS–mkLë•#`cêêòrìLQŒÆU’VU‘üèyÇÞ·Þ±& ãNw0ŸÍMYH‚y>×Q/Š•bYˆ™‰„Xºê;KËÀ‰Qkˆì³,‹¢ˆ¬©‹ÅÜ6&Í2 u5.‚@üäÉ“P‹é¹Ö‘ôƾ;Ԋ¬3ØÜOâ$o*¢%i¦Ó¼( ³šÎʲ®•–Rj­dÛ¸ªª²Ì¶u%º=dìÙ{!TÛçXzªë¬Ïl\TewÑØš¤RI¼¤ZëÚ¶]>½÷Zk(„ D·ÐíuÛ‡8ï+¢úýÊ?PÐ×Ý¡ÝG!üš_Ð}ïHÖ™2kŠ-‹þ†Cz§€®U7¾‡;ÝË»…O˜‘èÚ­g™¾€È·Äüu­ßåÝ?®ý®¯~ÔßõøÚåÝbA·»á÷¤ÉóZЭ½á½˜ ßDþÜ? —†ØïÝä¯ç*ãûríùá{|+CfUÑ|ô¬/b]LÜ»·W­ñ•èíÅÑé—¸·ŸÏ}´_–?ûãÇÇGǦ™gißNGÕ"-xK ºëÏzyÿ;HïYxÑïEi‡²N·ÔÑëy¹˜µ:Àáfº(Ê^/ýîåkïúù_·.?8(ûÝ«îü*לj_¾<ºXä^ÆÚKÁƒAÔ‹bY.ÊéÔ ˆÇOÓî0=~{¶»'Qvr4Y,p:oº±DV–F´vwo˜¦IèÞü‹y ûó‹ß…Š†Ý¤µc6qg0·ÓNoè ËËË:H"〭íÇ¡dt¬ŽŽ¦/6Úˆ‹é„PÁÇ»ƒWG§žîoÒ¯Ïξ>š>Ûè%½(NêîFèI}ó›+†ó­íýéÅå֣𢭿úÇ©ÏÅÓG›PÍÓ'©”Š5é(Ó€`œ³Ö š3CYw‡G¯_$Ÿ Ô€Ð6U‹HABù¼Ž¢ÈÛ™É{S×õbž ¡Gã D×41À‰Ö˜³ã×ýÞ \Ìâ8 'ǯ‹²yüÉóÉW¥’²#ÒHy‹@2Ô³b¡HäW3°\!zfc +mOçcëÑYhÀ›¶l›9__½ýÞzQ8Ÿ¾™LGQÚcøîà£OFðí¯ñ·¢ñýS˜v3h½Ï‹J½µýèüôâÑ£ýÃÃ×’Q– !Qxètûä/ØC§³«ñþnÑxtBˆÓó³¶ñp£QÝÛÜБ"ª‰Û4¼ë.Fo^žv:½ŸáÕ|žç50[cm‹”Bm[çlÓÔa¨•R" ÔÞ£ ’Jㄈ•`dë…GD Ëy’J -$ é¥ôij-ø4K„2 k¹Ye©5mëØ¢` ñGG‡Ëúóæõi'KÒ Ù ã]Û¸Ùh‘„‰enœi]hY¶¢ °Î·U[»N–":FðRHopdk‹zÅŒg·Ì ìÙ»J¨ÀXh‡@ %{¿t|ók\?~Ï®ví3x½,?%ÀÁ5×b{ý-3˜ï)ëh¯šâ5¾†Øo{a¾©YÕ]?³x-W^·ŸÌ`¯ùM«})­þf}!DÄÌ~/¿ÒH3;äuˆã½GÑ:öBK‹|¢¥DÀóJ"¼ºˆÕÍ® 4ö~õ‡5ZÔJ˜v÷l`$¾ÞàµÇß`é7úà›Oú@X+²ÑJ.q …¡gâûÙ½®Õ)[Ò[5ÿÁ|jåh¿ßï|¶Yl—…+dìÛcù›8¢(ãÞhüÖœ¦O÷‰L]¢ÎÀy¹¨¢…óÇÓé£mÙítŒkOÆ…’¤Âêº××̾7ˆNÎNúƒÎç?{±˜¤Y”‡÷Ó´£ŽŽf®†Ÿ<>>y£äàŷ뺞¿{³7TÛº ’ÍÓñUÑŸ|6H´¨§£9pÐ4üìÙî—ŸEóïÛÕ›Q¯s~z1ŠÒï±êõ‡§‹<ÝÝ8_4¶˜,.?ÞˆCìv³a†y9é÷áGOÏ+ód§Æ 0ØëwZÛ*Ü/LLùÅä¢ÿè“ã‹éå袜L~ôìÙöãÍÉh”&Éd¢sž=£ì3(¥¬qÎ{k벬Ø;ç›@†ž¥sdÚÜÖ•±FÊ•mñ ¼ïs‡^ ì}€çüÀ¾ø¯=Ç{pЇ¢hØžá6}ƒ`¬íœï×\­l½!>¾×èCî7ôùe²ãM‚¿ N¿§¬OQt—–³>c­?´Û›]âšÆŸÏïñ]–>ü ×ÇÊsâú éÚžâßë½¼u¦ÍÞ>{±µ¿¹=Y§—WÝN¸ßt>š|ùù³ÉU»ûñó¿þû×t‚Ƚ=ÝHÃáæfÔ‘7‹¼nwþÛ?ûøí»£·oÏ’(!­³ž¾š”£Óñö ¢9xºÙØ<Éâq19<|W\4ƒý0‰OÎ ¸pÞ'(ìÅèt{[ìï'ã©»<µU1B5™·¡áÉU­ufJ(ê}Y•ew.Çã0èŽ&“O?Úíáfÿw²äØŒ\ÎÅN~û­m”agööâù_ ^ôÞM¾Å4ýîeõýW¿«‹bç`³7H©•+æ—y=š™¦Îvú§§cu˜±®›¶©//ÏAÖã««P(H{6Q@žc¶Îzp(¤R*‚y‘Gax1» ÃQXë™A*!5–‹‚2¦i „rÎ4M%Eçñ£ƒùôrt>÷ž•ŽÂ$[…oÛ¢¨77·ÒnTµU–ÅŒÀlëªpÎ(%ò<mŒuÎ:瀱mÛ²,tE!„@OàIR€ÔÊ ní"ˆÒGŸüø áb:Öî?ùäüìmg°Ý}ÔoÚb0ì¡q5ƒc@ö¢©Jt<õl˜šÖZç„@OÐEÙ6 (hì¬E)€”*ènô«¦ Â8ÈzA µåd<ºD¥‘ýÞöŽÚŦÎûƒ(„(Z&‡¤¤Ò @©P!Õ2ð HsŽy$ÃHkZ˜¢’WTCðB’÷–Dà[ëeS›0Š‚ TJxo)%${oš& cBÔJ )ÐÚLë„@ö`ðHÌ^ y@ç¼AÒ(¨;è'I’¤MGya²,T%[[ÕU›†qD ’žÙ,‹þæ¶÷àK¡Òú:òÖ1;²B8öMÛVM'íê@+-I‰ÀD$¥òìD¥K…Æ:’ ²jc)RÂ#ÄQ€äüÊ_’.åûh=4Î!‰¨Ûͤ”ìMÅ€Ü4µ÷mœÄ¾mfKD왽d¦º­¢„D!W·„׎ÿwm×þÿÿBx¯l oò¸h½²ø»«a¾[úð. ÁkàÏ-Ví:ʼ¿v IDATïʯîMÞ/—D‚`m£‹„´4żõX¸Osz¤y *ºŽTÿpªúÛ½MÃ55ˆ€—°Òj»pÚ}°|½ƒÅàz ØêÝ]jìÜæVÂñ Éì÷°¾Ö¦åÊT<ÛKºéñ™==©ÃФaÄ’/ÇM¯‹;›[KP¸Ÿ|~ÐVE 3ÉÉq¥dÔ6þìè’ƒ¶q%’š\]þÝøËO¿x^™A½peÙÄEqÇ×Ê¡Tˆ`Ûš³úÉÁ Ó¡P‡ãi‹z·n0íP¯×w%LæYÕŒ¥ÒuYµM¥#ÑëD[½žu¥Dlëvp°sr^JÄ|V…c­| ýýìâr¶p©±>).Ÿ=ýHa©Ë^$ËÅÕöfòýÕIè‡_š‰ün_&ßœ^ÚÆ<ÞnïfSÝ2Ó´œO‰‹wÅÅœíéÉÌ72J«jtzz4¡5¾­ºý^¸™ô¶šÆA’fë|j-z[·uô,a¨U€£P[ct Ð1)dÌ:ÃEe†iÔäE*ád’$j‘ -’lK­„;ûû“«ó(Œ½“Õ|ºµ»ï¸ev‡I¥ÓÉ,í&——IÚ ‚œs‚ôp¸{rtÒÛêO§£@(hDbhúÝ0ŸÕÄóÅ»wÖ‹" %0/ÀcSÒl>bÕì&i,(ÖâX`Ëva¡Ñ‘*óE7JE8ÇLº.Kô¡1‹´7 °Ùz†Š„TZ”^Ö òÝáw›[{§§å¬Ü{´O2&'‡Ãí²möŸì÷7ûQ¨¬}¤ŽßÍ“u[c—`މ=h©€mUν³¡È¬u„bÞÞ*ÁнW„$ÐÂbˬŒi™˜…w`€±^”ЉX¹Ö"8!É:€š=²„à04N°MÒ2/“¿ŒµKV¤i •Aà–ሠ¥²F"sKlc$¢&!"!´1µ÷v¹©B;O(UJ0{†Ñ1zÂåzp^xÛ®ò­ùÏÒî nÕo·¼~‚wè/´4O[çëà5‡óÚàM^—M-— ´ìTýµßôRݵü˜®cÈ<®­%ÖÑ$¼%ÆÓ¸Úñí:Wáïàh™²4ðtgù½nR+ oD¾«¿oÍ·e{uÉ„ü`x‡ ¬×a“+NðRð%V¢;À„ àøk\o$h}Lè¯WÅâ–ëÅÌé†ÔkVö ÀþÖèæ_[sZÔ~-Z‡W’ƒuÏ=Ï>Ý|s4Ù(h¾(Ò0觉uœõ·ÆØäåùh2g7íH)0WÒ^\Îê”9oo÷ç‹#£¦¡¶M8ؤówßIŠšÉ”g›}“XQ–Ûû™ÇfžOß~ù4ŠlUÍªÒøÖS1x’t;ƒW¯/¤!š×ß̲,lr;› DÔ/æ¥mÚF7!U•©æËOö§³™aY#Î1šžq*ûqçâ¢y“NÞ÷q¡ Œ‰Â>s‹¿7¯®fÃGOJc*cÈ,Û“ñ,t>éõ?ú¸^ªÓÓÖü§ÿ÷¯÷˯w·6þ»?­[®ªÜZ¸ÍíõNO߿Ť(æ¡PÃí.‚l«µð¬Ë4MÆ£ED„ÈŽkO.dU׀γ £Xkë@Ê Ï'uU8ÛÉùd”v’0Ò·¾^äÅÜt³LiµLkiÓÔF먓'ê÷ûžÙZË.ª+ö«*ïtRï}†XµÞ5è2õÉË·ZE³ÙY/¹éoj„."{×8km¹°TÓyO¸´@Goy>/ªÅb,É7Æ4ÞygÁYW–EÓÖBa[7®µÊ¸¦iMëÙS–$¾×1ÌUž»nsøêû½a’Dó¶ôûÅ"/Š<Ë2)eÓ4A€óùÙ›7GQ¼å­³Ò.«‘pÎ--”w-`lÁƒwš¡¶”sLDÆ:çYnê¦`‹hH(¼gJ&Ëž-(¼³Ì@(­k*'Ð 8@@ä<׌Æ:T„+KÏ^ Êëd]¥‘C"ÌŠ2°µÖ{/„ÈA#¨•9ùô³:RÇ_k —EË,æÉPTÌGl¬ŒdHì<[Z,y¾J.9Ìçsç=amx<žIïfÓV°ŸMçuUÝž5†…%BGˆÄàÚjQ×E[—!4¦E¿×sÖ9k—A¡B¨"/ ©m[¶¦ª 3#fÚyS5ã\ƒKô\ ˜ºNdš†ýrVT%u{*oÇiªLÝL'#%CE€ÞÛÖuÞ´µÐ‘N“îèj¼½Ý¿º“ou œóBhDêt³ê»cÍ@Ц‹Éæî&¢0Æ›†ãn'’¢®_|úSF|ñÙÚÅåÅÅE¼1 ÂðíÑ1HÑ4MÛ¶a‚a9ã¼ñ¦5„(¥"""ºf™ µŽh¬TE6‰ n8.Æš¥“»®ÑJ¡k-D¤T HzǼÆÉ‹â@J ,ˆÐ8‹×±Þyk™2f/‰—À$ëVƾÀž ‘rÃP™¶±Î2ƒ³NJ¹üaB aÖÉjÛzç£(¨›Ê{!HZlˆÈÂr±!È{oŒ t@RK‚¢X±æ­)>oÿK¿cpGãzà¦%íäÆyবÐ5G‘  —¶ÂtÇóú¡kˆC€XJ^oŽ¢k<†QÞÂÚ„Kàί|p–6·ö•´¼üJêÌ„DKÞ‹ ô+C‹%n¿š&<ߎ;â®+Î 7YýŽëq¸Ž¼¬½i½´òšUÞþi™4Fx½A¢¥6‚‡uû¡›lûÐk‘3®ÙºÝd˜­½Gwœ7C­œþA[©?Þ³ëY¥ÈÜjîndäbíü•ÿwï6¶¥tE,4¢:²-Ë­'ÙVì<þç¿{ÕI÷¬kŸì<;|÷&I ­ÖJ@JÆIœÆ›'G!ei8èwš4…¸»=_´t'¯Ïh>Ýøb·ô 77ÆÀn¿ÿæÝ; lTÏkE½þ_ÿ÷1ÀÞ“­aòѰœ\±c–|òîmÛp븪«^cÿÇÏÿõŸ}þztTÓÆälñúâ]95ú'?ÿ¸Ï7“@7E+CHÒý~ˆÁöó‘ôvƪZ<ŽÃ %šbwº:ŽSÂñ¨,¥©¯ž~ö±™—¦ðq¨J 7§%FúFQ×ã¬lìôe&çW5e)‚Òa „WB½=¼R[a/ë BÆÖ3fY&ÄØ9'ˆ,@GË7Â9*‰¢®/Y¯;¹¼LâNw¡±i½¤$ŽSY,lÛ•qQœ(u” VZú&·ƒ)Ï‹tлšLv‡·vaŒ%òQŒÏg¡ÖÞ{kmeLËȤӬW·í¬œ„Jybã› ô)¡J¢€Â,.®jçŒ1­sN\,Š0Œ&㉔‚ Å‚Z똹Èç ^Ê‹Eªù|êœ'”àd vöö Ò$ÄÂùqÓ£ tÎ=zü8¯ËÙøêìì¬qþÿ›ÿüW¿t C,ŠE’u•’×B6Ö,û;…Ø6N19ÌpÉòd笣ÕÒL#iDEH•wˤ(LÝzë€CµTû;ÇÖYá+² RB´è €#öž@¬¸xÞ3 Ì!Df$–;@kíµ¦Çyn h™Í›$ÂZweµÌ \f ïJ´áAÞÀt¿B­•×Äÿ€×åõºÝ£u˜Wݱ¿fºßðiéq³Œ®½]l®ËÝ!!­¨×m²¸G@ºÅyVÅ <ºyn1"öp_QÆK##Zi®/‹—öù·žÍÌâý“Ê­móû¶7!ëkÃÄh3xs7è×Br–<œe®ÙÇÁúï×óDºÉly¯²iYÿo©Vˬƒ;ç×Êdbu /³ iËÿ þ …|í.'ÖY@®>zú ÂI?­²¸à®ÔͼœÂiÝX‹ÃÃÉÉIÞíòɻˢ ··7“$VÂwºYÙ„UQÚJOfúíUјêüð0Ÿcº½QŠÚÈŸ_ÎŽþqþû?ÝžMM[Ç`^H‡Ád6»¸,žl¼<¾ª¦¥ÒHçqÔk«|r±p…Œ"(N:Q¢“È7’ÙÙ©ªÂöÝäâ4‡~?ùôiw2¾r•_̬¦³âÉæðéÓ½Å7o~ù»W?;ØÙš\VÍ·ß^H•D¾º¨´$ÁÅ©ÞN÷Ѷ/¿;ìoíbUŠ@t‹2:Y·ûöt6^T¨}Æ’T Ò82舄TI-ŸìoµenÚš(@ìȺl¼m;bDOD‘èx[ÔÎ T^.HP]5®ñ:à€´’±#/“žgêèìj’f]ï¹·ó8Ÿæ®,HPÕ‰­õƶ¶-m[©æ‹iª¦­˜½ ‚ÔªÖO¦³)•M¡%;ÞI©µƒ€‚ÀYWôÚ:ÃP*¨À;pl<úbˤm-B%köÖ±’"tÞ8ËÞY†•±Ü8°Îv=ID I²˜¶\\ÿÇ—éÎ^o8l­‹Û‹Iž‘°T9jc­ýÝ@3 I‚TÔëõ§nÞ¶Î;ç$O€-9çw† ÊÎÖî3çZa›çÌ~™‘.DÐ6SfC&A˜óH©4íØLÈJ’‘B†P)È:‹H„‚—äR¯•Ú5FIf\îGðV‡Á븾+^¼`)_XC,OPÂås[ã¤â2qŒi©q`D^.ï=¯Ívò‹Ÿœœô$«¸º¨Ï/ΓDloDÐçtzQMòÙçŸ=R\îî<>ù‹Wh]]•¾I&*jÆÍ“Ãòwß¾sw¨¬)7¶RcmS5úä{·˜Ø,JÞMÜ©úü‘µe5Ë'—Ó( ­­$ŸÌóY½¿1Lû~R4g'3!¼o½³X;àP\žÖúÎþýW_ùâMÓIîté¿|¾Ÿ%âå÷¯ž<¾ˆþ÷¿øÅÅÌçõd^üccÚÝP课aÆýa,„*Û¦)5ÐÎ0>¿*¹)/¯faÒUvÞ6Îzй»“†X¼øøéùù/Û²øøÓOLí)JUnlFÀàHÄq§áº¿ýTnB9¹¨¬±Æ¹Ú’ÖÚº®…yž òE±ðÞ-ý}몬ëRQØ:£3Nà¬gÄå|‚àwww•qˆRÇIGº®›0‰‘ˆ–„)•÷,„jÛ–I(!eÅm‘ËPƒ·R9fo‘Ö*ë0ËY¾(«²eèö–q1_äãIP/Æ4Fk<³ó^z0ìž\ö¶ú£QÑp°£¤š·çyØßÓjd õ{——gÛÙò?œa«É^o³»“ô\[] g¢€M]d¸3Øk¬Oã¼1ì³áK ÞÊ$’qÔÝR )˜½‚¯™‚ˆL´Lœç ˆT,MQJ©V…€A)ÀΙÆäBxÏеm»ì§¬µËFÚ;GLìApÞ³Ôp é0 F²$¢‚<"Il=2:çœu7Î UÖZ !#‰~é\¶„;ØKˆžY)ÍmÛ¾·òÞ£”²mkí²åAèœcpÀLD×y¼f¶s«ºZ§GÞŒëgúv”ï¹=¬XŒèÜš‹ŽXã^ŽfmíX‘ž^æú_?=_õz: CYUÊÙÕìéó|©æ‹~¯ÃÌ­³R*Dʲ¬nÛ¤3¸<;£¸®Úªn£ÖúímrBÄIŠ€À <ŸNŽ_~¯ƒ8í%ÖV‡ß¿¾<üäç"k~ù‹_-Yìùb±ÿô™ch¬-›:/œgβ®1.I24f6›ÕÕp1/Ù˺ªº¢°¾íõzD\Ue]ëÔù(Qa? PÁÉñ«³Ã7±ðñ`Ãû’½ùÝùdš#{­å?ÿCÏFQkÌl6Cdç3,˽‘Œi˜€ÀM'Bj7'ɰ|Ù -X.‹’ó¶­«.337M㜳Î2ÈÅ"OâIH$–j%"#€í²Ñ&B©$ ´Æ1 ðÞ¢'Aš=['…Xfì({ ï½\š“b¹°ˆRÏÂ!A€HÆ8B@ìÑzçÙ+‰`2,!^)EãÝuˆ¿öñö~®~W÷ã¨Ö×”7æxcž‰÷d> [—Dùðqû€Ã„÷ì¯2Z¯^kç3û–CÝ#ªþ°Üé{jt£k[Õkº®Å|×ôú‹óCª«‡¾l÷wȼ†æ þ3¥sïsvZ:HÑM"Ãz*ÍM’®ç–[ÙÞ‰;¼™Ä10Q2ÜÒÄ&LÕÅhôö¤þò'O•?ö‚LGíWß\&ÝÔÂ7v£³“vú,˜D´ÿøG£Étc7èöáüôU™×EQè³0ÿéÏ:{¶~ýK@›>9Pu3~úxÿ«oß]]¶A7pÎ6-½|yÞ`k,O ×:»xgÁõÎîÆùˉ¯ÄtÜRqÈÿÕ‹ýõÑ·žý»¯^í=Ýè€çVþöäT4ávwð‹ß|½°xq±P²»™¥³Åùøòbà©»7•Ýû§ó,’Ó¦ÐJdŠkE_þÑO;¯íï¾>VR½=¾šÖ@]ùýñÛó¢Œ:C)ÀÖE”Ä‹ÅÌ´&é&Ç©5– ÔØ­æE³¸œŽæýM~Dµó ¦,Kë\„ kC)³“Rx¶ lMz6ŸaP×EÛÞõ˜mÓäl|9è¦V€PÖ¹±‚d‰È-®¦ÔÀl½+ŠÆ{ï¬BÔuGiYÍ˲fuÕXÇ“é¬n*Ó¶,ØÇWuUÓ(AÞ6£ñÔ·ý´“>ÞÞ½<¿:¿8ÛÚÚÚÞè6†úÝ4LC…¢H8ÏH÷šÚIмÀÈ\kX•<ŸÕEQÓ Akkœ%ìv»a¢ç·¯¾ßÝ~ú|&o›æ|1í±&Ñ(j‚€’«YÞ40_ †X鯱$lÛ6J3Z±,HvÎ+­¥"ô(L[ˆÔ4Ö'$"Ó:`h[+e¨eb Hçœb¹#¤0„”hØGB""µÍ²éf)—]°r–”sµ PJRJzïá¦`zouÖyG(HðîFÞz#ØçåˆAhL+„d©$" ï€#böž€±¶¶FÅÑÂõ¡•[Çf¢¢öݱx¸iŠÑ{ºW¼~Ø`ò®føNôÕ‡¾v…hãZŒ×ºÕÎ*pÿùJ‡ € <|–óë(Ø8øÛ=ö{‡‹ÿB¿– Ý=9Å=’þ¸;Y 7èÙ*òòAÜÁZ6$®‘‹pýŽQJ’³¢ áw¶b†f1ãª,?ÑŸŸ†AìPØÖšÚDñã|Õ%0ÔÍ,Îåùø¢ìwþüÿ¾ˆÒ¤ªê:¯‘ƒvÞ<Ú {L$éÑùéxºxº?4-Û:Ìç•°1 ¦“ºõhÁÏKŸ ’Ö–ˆóÑl>®…ÕXœÕíxêÁS2€ª¬+㦳I=Â~”}q°ýj:É[š^¢äþýg•/ÇÅ£žíu²AçÛ˼»µÕÿì tΟ-Þ]åõž!È‚7ÓEƒ* ½Œ•…àWÿéåëË õ÷yÜu¹½·©š2Ÿ«nw@ëbiøèàñ¼©æù¬­ŠÖÙ´×µŽÙ’ŽdÒ7_ýîêâ\SÔÛÞrÞÓ\žåµu³ºÌ’޼ɡåÅ|VOfãEõîp„½õZªÊ4P·Nð|‘ÚAy‡ÜVͼe+šÊµ‹I@T4œu·Bå‹(ÒV֌ޑþî›oƒheÃFyÉ®©Ò$’n/Õýç¤[QÍë‘L£Ú”lÛápË#aë¶®[ÏB_Ì.O.³X&ÝtcoH dL)ÅR:ˆ¹$HŸòâßýÕ?llEY|þîrc¸3Î; ~ôâqšú½½o¾ÿ.ë _ b’¦—'o¿ølsc¸õ ÂÐT‹ie›l±Ÿ†BŒój¸+²ÞÖ7_ýöõËcc¹˜ÏzÝôñ'ŸZS\½:{$ïŒõlØ6 HjTRÀPG^†(´l‹Ñ#£óÞ±g 윧º2$•q¤ %™Pº*[ßZ¡„óà=0»ÆÖ dcZã˜Y¶ny´Zj D&gÃÆ´eàd!„@ž¼e ^j¶n¼’Y¥Årk¨€Ñ1y’Öv¥F*ëz.H)A–ýTñB#oÛÖêÔˆ%÷ñ!+q]ûÐù^•¹­&¼ž/€ìÙ_7Ý7¤”Û¬˜{ÄwHoëヶ”èO¿õãûÌz±2vÃu•–ƒëhÝ–5ëÌÈÛ–ùÆ ó‡„Ç÷ç¡Ü•Xó-ÿõAfÀõîõß{°öbZOtX>ßÕrf-·øþÅ_S­n|}xµ^Ÿ î°?ï Ìn´{ˆ€Ä€àíµð××<òäªh¿šLö÷>B N~÷vog¨ÛP_NË·§¦( ÓÇO¾úÍ[2ÜïôTÄGGßFa¼˜ÎÇ—6L#­U¤¨`WUÖX.®fi ¹ÑõÌŒO§;Û½óiS͹œº,‹z›ªmd—WaH"–ó»3׆ѴhJyôuÉŠ¬qÝa´÷<ˆ:ƒ²\àvv2HÇSû·¯^C¤Ý,Ôì&—禣^ýæuOëÞöþð£Ýÿíß¾<´¥Øeù¸``ï«0€£Q¥EÚïuFófQÃÉ›×Ožôz6‘ªç#ÅYtxr5»¨6 ìle‘—³ñù¼*YXO.óY>ŸµŸ¾ÑúÓñéÅå[ƒxkûñb<êt´ üÁóƒ¿ü›ÿSé^š¦uYGQ”OFÏô,îʽƒá·ÿë_PðDj>›uºÝùtúâ÷~²µ³íd‘1+ãfs³Ñë7®Y”…äb”ŸœO>ûâ™ üôÓçÿæÿùËáî®'ª+ÑØ¦þìç?úüË/ÍôÏÿé{8>Nãßûòs°3ô7vËV ’I–¥J¾ùök ÁdZ&IÜëïO'3á¡—d(Q¨y¯•åÜY?ŸÂP̦c`ð¾•&áùyUuÑ^-›gã™ASWQ¬ò:—uºÃO2ŒU·äÿì÷¾T`$ûåüþ‹Ï>w\k”½^×?l‚ÒÆµ2PK,¤$)™È!yöÖy" „hêZ+¥­´òÌÞ±À ‰à³,‹ã*^zý3°T† ØXg™fV:d$–‚Œ]2½3cX+ àLÛ:ã¥PÔzÏÌÖ9k{‚…ð숅B’³­ B¤¥@é¨ôLa¬l8Îzï¡PJ-»ßºmU FѶõ5_Õ¯Y­Á{Ù#?(»å{­%®W÷5¸KjÒ?et_»ö IDATãã—–÷ï ˜=ó’çx?—ø^ÛÎï±9â÷]¯g­»Ý,þm÷?©ø½fVý—Wè[¬h¡’w3ðV*ü‰^ËúùÍ ~%{ϱ*¿þ®2•ýÿH{¯ɲ,Kïì#¯4ín.CG¤ª•YÕ%¦gz0ÍžæC>$øøÆC$ _‚ˆ™fƒ]3]ÕÓ¥+U¥ ááZ˜¾vÕQ›æa®2³Á"7»÷šÇ>笽ö·Þw³ÈÔg_]ÌœóÕÎîþ ðB\Ùn© ýdçxp­¬ò~¯ùå§»Ã3·ÒîNµ÷…ÃÇ;ÇB[ítsœmtFÉÜ™N£y¸[Ý}cíèùrZ׺šš´MÓÕš2#©’m6óúçÏg§ÑHÐ`4¬g£ÁÆÖƳâ`:ßZr¯GLæ v§«®„»ãÉî8×^œ>y¶}g5U>œ0Í‹rxœB–¤Íþ£^s4=«Çã÷Þ{”'qNv{ûÅÌ¡/êœiçüøññÑQo¥7%’ÖªÕ8œœš,ët׸%[íM]Rõ6ÚŽ8[itŽO#[÷7xBW )%Í+]×µT4›ŽÃP¥de}eî*B¡Ùn N=jç1Lƒ0iã[I¨wh:ýn«×’22u*N­k=ÏJoD]L´RBCFJ08›ŒJ]:cz/™TÄÙÊ&T²¾ÆqLE­·¾¦g|m›Í•öÚ-ôfo÷ùÊJWHZ”•ÓÚ•µâL‹Œ5L¹ RFÞ8£@<‡žpJ­É%¡‚Zä…v”Ç©èÅ0lr)†Ã£l>ÜçŰÊkÖßX7¦þþ{ïþäÇÿj÷ðäïÿáw¥AöÒM±T(%@‘sª­©ë’P&•ôÚ,ÊçÊÙšR‚=`³Õ¨ê¢E»ÖÚ(ŒcÆ⩵†0bF´Î£w@HΈwŒ"q– ­ªý¢‚[ ŽÎ”)@Ä1J¼'˜”¡óÑ;kÙË6#@Ñ{Ë8uÎ;c•RFe97µã@_VKc ¥)&¬?w„À‹>æù˜+âu†–›à—piß}[†–ï¤D¿Üe/G´ß\áZ„òÕfïr¿á»èN×*T߬“oK‰¹¥wá»àå§péù\zÙWt¼ž ¾ aë"ôê•oL°¡Â/—£Ê®!;y$ËQ̱|žëÉÙóÑC HîÄo>ÛŒSغ»‰~>:8«ŒÎ<¥­,£…Qy®£®Åš½G¤ã”Rh±ÅQÔ<—‚y∷uYUyÉY`uŤw€àè\^3‡Äˆ7N[´à¢¾Òó2+ƒ Šâع:¹UY•ål†Ž„a£ÝéFqè$s P¢O$« *¥|^Šy¨%¡y™§q4Ž’ ty!ï¨ Ì¼Î'“£Ãƒ8RŽF)G5ËóÁéáàäl¥·ùÆLHU3æ:AÔ¶%ÐØõ•­ƒý£Í­ÕÓÁa#ÊÂT¥v¾ö¾ê¶7GÃ¥ÐLÓáQÇ‘6© ”Ve®(F)ÃfÚÞÛÝÝÞìVÙ$/²n»%‘ˆPY@rNYw%Ù¸µöë~1È8Ylx)e$zƨâ<@ôÖj ($§ÿpÇä(x 4˜L2Nò(J#Á¤ „5ó@À<ÓH ”1#å»bë^|zlâ…Ìn?hóüéãaHã*ŸçEi1Ì‹l†óYq2ÔÆ’XÒQŽ*dŽ?|­s8>v¦n5W¢HQÆs&]/(lª’³Á¸ÝJ×û H¸>õ¢“ìim›M—™0jLsÝÙ­fÜæõÞl6¯ƒÁ¤|ø½;“càtgÿÙ½w¶*Ç8µîß9;—EùýŸ¾~<8Oñîë÷Ï&#?ŸÆÀÃ8z÷ƒä£1kÁ'*HšQ©G8¢¨Ñd²ÑQY»^#É*[Ö5‘$í·^ëIEßúÞg‹YíÆG5#AE««½þÚ»„•ÄÕ8ïôR Ü9:œT“YÆ9·•OšÃ¼²E (EkuÕí¬‘å¼"ÈèºòV3(Þyã~U{.y1nµÖ»Ô‹– R&o¿óúöÆZ†¶*SNÀã8š jc™ñ¾œY‹i²òù§ŸÔÛ[›íNÇ–u·ÓÒ½€Ú9EIà´÷fúÎûo¼óî›’ql•—ºt¨§Vtïl¯RÊ€ã)î²l.á ˜–.JU9jô:–øÂL©HóY¶ólw˜L¢ n¯tæEVL§aÜä‚ï<ýrxt’MçT‰Xð~¡GoVko £Ô[n-†àuí¨÷‚£õÄsd”HçQ×µ!&n¦Þ£b=:ëÁ1¦EÄXåÑj Œzê¤äÖ à,EB­§À¡„2 –ëå„:g‰#è´÷=AƒÖ[[å¥IÓˆP'ŠšX©äœÕ 8 Ä/蟌YЈsÚ9ÃXȹpÖ;[!Zo‘1é½óØ—i"Ëuà’àsÕsrÁú"‘E¸ÀË¿ˆóôK&£kd%€ ‰W=‹KÇò‚pL.1*/w&–BáÊRË Œå\Ý"Ã.uðS¯z'K¿@n,ªþ|T/»>áÂfáBKwQ=ºobqË^’ÎW¸—ë6, ¬]\Õ–Æ/^…'ã2ô¢?÷|Ò È¢¿é K±}q[ÈÃ|VºÃ¡›ižåYQµgÚPkë4ŽŒ­ÏNf€01Ëò/?º™o5Ó­èáúgŸ}QW2cª a*4ºŽ#þàQVŽNïÞº×]IK3MŠ•~ ‘t2B•ÈÚ™/Ÿæc¤”ܽ÷{¾Ý:›­g»ÓýáÙ4ß¾µ3ðˆ³lb+?Ïè¼"M‚ÍXÒ¬~÷îj6ûúìôNÚï5C”§+u1ÍέSµþ;oÝí=Ýߟ”';û<ŠÚS÷ùñTîeÛ«t«)Áû‡ƒÓ/jOeÏO>½u»÷»žÉ¸´’eÅãLåÙY x^μJ9M®G£,L»Æ:mÍÙáÞÉñ¤6:ËÆ”²Õþ½¸±ÕlÆžä“iõñ>ú?þ÷_gãñ?ý³Ÿx§ىR¨ÀDŠæåTÓÑpú?ÿ0JbëÐ<{ºOeî¬sV3‚ï‡*Zë÷ÕɘPgm9)ò6'ß{÷-J9îÊ¢Ó ÇÇgü|žƒ£wnmˈw‹b:-‰Í󢍿HY[êü|^žœ<ëµÚ[[›ÃÑ©w&À{ßí¬“¯µ6ý~ÿöv?é4‰1 =RQ–A£·ºYfÞyç­­í>çœsîÔÞx3ÎÒDQE{k+g'#¼ªY£‘´z›YE­Þæ ƒ|<äQpxpØé´6ï´ŒÃÿðéÙñÄ;(ó¼ÝëEi£˜#4A̳ už&£†@4Ú ±Ö1‰kJ f¼BPÃT !™'Œrï‰Ê8[ê:RŠºk¬7Öî GDïCÆ›ÍæÖŠ HL]9‡Z×ÖIÂÀ¹€ w€DP> ”I¥½µµ'‰'àR`à¬v‹c³F ƹ¬jíœ5Æ"z‚½ww†FÎIø²¿‡øM»òe{øEÉuI ×n™¿ Ïùê%,ü«ð¼¬K\0ï_-m—@Ö@nvò\“|ÃÓÀK¹7žÎ[´/5“oêàµòεŸÞpÁeªÑ«¼´W 7}ÊçËÕEWîRgû"Îâ¥Í /-_/ßÛ×¶b£qÉÔêh5’t÷ÙŽA%­^'b–e‚1Fjmm%JTR£ËgÏw¦³õIÚ‰w–xãÑó©)YØIžíìX+ë5ê“ñLƒ­*3A´zM£³$ЧYª½ÖÞß;"F¬­NÝPD ²fû·G{ÊÈ\ÛÖj¬©½Ù9}’Ê C‹ã1u¾NªaÐhÄh¼e£¿Ûyöλ·ðÞ»ÿí_ý’%Šqyô|ÒX¿“˰eÙøùîqeÌí÷´»“Ù´xö>£"¨Ëy¯…1ã@¥¤u6!¦ÒΣ­ òÃýÙh4þê‹çA«Ã¸8>>UJŒt­¥ŒÓªúÜÔL(›¤lcóѳ¯¾œË¿ý›_=ûzÿÖÃ;\y`€„ÙÊÖÓDî=Aæç“ãÉ O޼sÖ" ~òO~¼²Ò™Í&¿ýòS§½äìÖ­Õf;yãwÛÁEÈW¡œg£_üÝÏX«ÑéÞÝB.<mÊ8yúÕJö5zÁ\k­ûüÉîñÞóv«¤Óª,áèH^Œ‹<BâXæ·o¿ý&UÊj+¢uT2)€Ë€± Œ’ûîpÎs-c0d"’ ›J^ey1Z]±°Õj·z«w²Ù¨Ð§I;]Ýì+¥¸‚(䌆qúÇß}òýŸ=ÏE˜¬€±R¨F£EÍã³YESÊ”upx<‘±J;1#ÄiL _UBÖC CéêÒ/ðÌ\rQ*¬³žpç&©tÆÎg3ˆbéAÄçœ1F)uÖ¢$”Rá¯òÒh¯¢ÆÆúÚÑÁŽâ)x‡ Á#§lQJc*PœDG¼óè¼C‚ ¸ôžXë€Ò8Ž´&èÏáÑ»EuÿËØùF³‹q¶ïD€^–æ¯U¥_ý Åo7núÒËx€k“– îEÄÍ2„ù ^óÒn}¹2-07¸_«Ý$ý³.t—Ý[\Âý¿ ø.Óõ7x]Çû<¼"‘‹y;WoùêÜRòÒ^øöËË9"–eÉ¹ëÆ‰¬ªjofòÙ(QÉûü(VÉôäètž‘P­¤i*¸EâÂ0˜Ï§ggÎIL›¼‘Æ*•¹)¥`hù~»¿ùzøÚ›÷‹yIiZ•úùÓ£þZƒ0›V+­Îx\¸Éœ©¨½.Ÿ5Š®6φE§ªk¼„í6åCà±öÕÆúÁÁéë+g§‡ý·;±ì|¼{‚Ô¬4S9¥BDfšç£éÛ?¾ÿñ×e#iDõFØžN·¶"$g§CÔê£v²‚UórœçIø .Ê,î8@gl¿¿á\i\f¬TZ EYv;Ý:·§T¦D4u…™ž¿ñp3 #Y¨¢ÛqÍfÓ¡xöü¸¿ÚÙ^í¢)oݺuR ˆ­´ÍNÏæÓ™i¥¼l'›³Áèõõîýš®­%a3z²{zz2‹¤ JÐ|üáã;qóŸ½óÖÝ[«_~ú%oEÃyy<›°êOßszü|{+­}°‘6Vwvx–×.hY«?+M˜6öN¦»Ó~¿Çˆï¯®SB©ÏãF™.Nn½æÃF“ â0ŠZ½þÚú7ÃÑgöÖ[וÑQÜŒâÒy6:"–ý­öëï¼îÑ{á)gÞ9/Ñï Œæ…sˆu]T~–íßÚÞØÙ›z[<~|üÞ~ -‹™Tìöv_H>ÛÓ“Ñ<+~øÓ·¶ï¯U…Œª¿ý»ßïìœþÛúÓ½þÚÏ«ÚäÎ9 Â:ç,0.+='¥ˆãØP-8ç]m¥NÊ0‹bî¼±ÎFItÿÁN™,j¦ƒÐ'€¡÷EQ’N[p`­ x´Þ ΀© !P×:Šb Ò;Ê0ŽÅ|.¥RR¢w5†qÝ‚tϹP*¬]îô=²},E'Ò›w¸‡ž`1 ½$_KÅ¥”ø‹jòÕ:×B .•ÚóU®â'®¸Y.8ó/¼Çõ,Ÿ‹õ÷JŠÙ·öE_Úžà*éšçÆ×y)rSLq™ÚC.9w.Y¬àÕ/¼Hû\ìÎÙ£xÈtÝ£öŸB ®ç^]Zñeìš’—vêÑz4”‚ „"ÏæVIôÞàˆRÅŠ+Ë”…%@³1åBR<Yð@—Ì «]ž6“¬Ì¥Æ“£'ÎVgÛ’F‡¬‰älçë} JÒtïÉ(ú^“«ðÍ7VzDë,‡R*G»Ç‡ÃÁ¨¨&ÎÎÄSÛkÉz3ùÍÁAÂ[‚¹2Ó;“B6ÚÙtº{ZüáÇÛißyûÞݽçg%íNj aìP\¶ºòhpì4# ×··BZSú:÷Àï>zCJbLÍH@!dR²§‰ ÈJJjAÁºzƨšM† Ùií8tí5b‹ùí~scc£»Òγ©h´«ÚQ ÎyS͇§GôÑl8¹ûè g‘8ÅQÒHªY–67Ü9›¦i³Ý-¾ªEÄe©ƒ%"Ÿ¹_üìW ñ¯ÿt0pP (£.›”¨'È$bÑ‚2"Â0!œTÞY!g]Y—++Ý¢(ˆÑ“|Þê´5ùdÊAI.Nô™t»}ÆäÉé‘Ö˜„ÁI6 fs<iA8åè<—4B£ E)„ÒùA#i!•­NR̦i3Õe!”œL§Y–qÎ+³Ùp<8ˆ“Îtš+©Îmµƒr>-Ê’PIž%/µP =·Þ0ÁeR TQïR>›çQ˜R«0"‚ÕµóHU(< €¥ÜÎ¥”ßxÀU ˜ ŒAERF‚ºV§—Óvo“‰€s¨˜ƒ$>Ce´Aj™@ãÐX©½ÎË:Ž#$ÚS¤Âf=‚­}* <;IÅÊñÑ ³vëàp8Ï뇷ã&Ób2›­®¦A&á`œh[:ötwžö7Ò~Ú³P¢á§§§¥±‰Ù`Úž±¨{͆_OŽŽÎ¨‹7û-"Íáp4"áƒwýñë§Î8ÞJöNOíi^YzäžÏ§Oh%×Z2p|:!«­f;==>ë¶‚Í^gmcɼ<!ã÷^ß ><žy”·î2.«ÚÔÚ>ßó­÷¢Fzt°ÿ|gwmu}ûòÇú£ét’E5¢xEªàìà( ‚ÓÑ(M›TÄÚJ=Ï)¡Å¤ùd IlL¨5_ÖÌk0H…¨ò)AÝé­†”••&ø$ ½G‡^[ë´-æÓ$ið@-B|­³ 0B©§´* !„­ma5DWÔ9 ·yMQ¥qL9§¦vNsKˆGBˆ¨BÍÐzê ŠÀBÓ´YWž !Þ3AÞÿ'´í7±fYV¢‘NN²4íU•—3Ä4MšB‘Óƒcc&ífG¢j¯öŸƒå»÷V˜5uØ<Èqz|’¹ªÕ糚׳º!Õ½î¤æjõätÖ­ááû“`‚^üƒ÷_;Ù?ÖR€Á¤¤”­…‚ô;õ˜híLL‹Ñááá‡Ã¤›m7:]kÜÁóý{kÉû÷7G³i#*¢M“ˆ(jmî ÀÇ£Ùlš[Î6GÍNÓ[³»»÷èáëžáóçûOwžGRزvVKÁkc=VIš Òí[Ûq ‚¸‘Už82O©¿sï~»Ñ^I¬&T*ÿ'?þéÊÚÆáþ×Ù¼J‘ÊZ;Í D pÌUÅÜ3%C«=ñ課žgÞâJ¯Íél6űì¶û;‡§N*9NÐÑÚÖívÒj´£HÕõœRJOOŽË²žgE„¶¬§ãùÚÚºÖuÚlh«OO%#ƒãÓ^e>›†´®ëJ…žL6nmÒFÙ:ï¬4"•6ãï;‡¸³S•óÕµUÆB\©€ »ˆ<B)‘em¼sœJ€Rf©BpFjojã´POWV{qÚʬDzÖÔ::•RÆxî=zoacŒ”’"â¸àÆXN£']QÌa‘¶¸H0€WAUøBrXŒ‹!\+pÃ2Ä1‹ûÂv¸¼]½©@ƒÇ ´r}´À1ú*?î:éü²ˆ±dmºÖÒŠW+Ù·$ÝSoö¦f\Û¸âºÁ«BÓ‹(´W`µ—N¤sºÜ’EçºwÇ«sË5ú&ØÑuW¸ü¬¾¥\Å@²PFJ¨( ¢ Z%‚@¦ &Ÿ\œ¯MAk«–BIQÄ#8Ï£ž2ºwûAe»™¶rÅ‘´•ž ïƒ4 ’èìtç³"L(ZE; IDATÂÁxx:[‹1  Çg³'_FÙ”jýÎöÆ­ðaÂæÖìùɨÚ^ É£Óyî$«ÊÊúÊÓù£NºRbUz’¤yåÎFÅñáÐ&§¦×¾ÿöë[­Pvr:›ÅÔàö£ÍƒÙøùÓy§wÛƒ²ƒƒqOE›‰PÜnÜi˨1˜t¹êE©R©{:ŽwÓ(¹}{»¿±Ý]éì=3•]YéÉ€ŸžŒúë·îݽÏ9KâÐ{}ûîVeꪦ*hqI7o­S©åœgu]•y6 ŠRÉ€¨0HÓÈÛ¹. %(Qio<Óy–ßÞØl¶šœ+꜇Z;Ò[ûø‹?~òûßèãFš¶;ŒQá˵՞1šR$hgÓ,ŽÆYo­d¬*r@B 8È( Ã8Ü}~Èd§iU'§Ã8i[‡ŒA%L(ãÈd’ͧÙd0$Ö)©BÅFÃQm}³•Ìf£(Mú ”ív#ŽbëL»ÕÊç%H”·ZÝÛwï¶»í@…„3ŒšñÑáÞáÞqíˆóÞi£óÒììžMʬp”K©c¨bL Î8cÞûª(Ð[Ê8"Z­c2‘X'D€ŽR 2!‰›Ue²iÞëv‹ª`Œï‰5I:ïA UÀÀ‡J2 €„2º÷|¿®LÒLeDa¤‚ˆ1‘&iš$Íf£ÑJ£(••Êó\W•Ñ­©Š¹ä4n¶zÎhk­¥Œ£'JIk½RJH° Ú“ Püp4ŠÂ4›çBªª®ƒ8æ‚K%ëª$T¶VÖ© /TŸs6 ¾ª‡„øsãýò¶n)!øËúÌr°úK)ä\%¹„àÁܸ,$_g ½¶J_²£À‹½0\i_óz6pí”Ù͇š%ÙÉ…¡Ù‹nÕKàçW—W½—†Ëåÿ_íM,Úø *¾À«·r³xumøúFÅ…ŸŸ;§m]U”ÓæJ»ÕhPO(£œq­µ³v æ}À˜,µ‘¶®5õvŸ¾ÿQ¦sŠL± Œ”TÂÂaBPÁ=AÊj$Þõ„rÑ3 aÄ”Q. pï)¡DÂ!:O(] š"Ž€a¬\„;¾úý’¤â^í¯—Ýñ°Ü¤¯èaçØH¼FLXòÐ¥£ƒ¿PcéÕšõ¢§ðê\r‘Û¼0S.J;%°8j¼ôª3B(!þŠRôê{—ÞË/Ѥo¶]Þ8BK Ë ¸ÁKŠ×ž^¤ƒ½úúÍöÆ­0|çÁk_üoƯßYÝa.ÕŠÖj™Í†L]5CÍ4Ãa]Êv;ŠäÝ[ Åñ­í{11³˜}1›nÞÖÚò³½ JÏ,”ïýàƒ;¯½îÝiî§[¶ª³ºzK{p®Î¦F'IFQ¤íôí÷ÞUŠgYöä˧ŠËF·õüàY>›­u6»­(mmGgÖÔa¬€PÁ±˜Õ©ßÿþY©GÏží×yпÕÏMQ•¶Î˵õugªÙ,œ–„§M%9Ï+zrÌXh­mµZeYz„B¼$jœçu­iàâv+j|À(ö¶n[]Ì&ç1§‘ÑPU•Š£Ê:¤Ÿ;‡µFÁ¤@\maœ0£åÖRtÎVÓñøô䬮 ŠqIÐ":ïíþóç“Épmkµª&E>ÜYk«|ªëš ¤at6ÏÆÃV»IQÎ'“Ѹ»ÚïôWŸ9]íotWº'»ãÁéþÎîgŸ=TãôôlprVukµÇóUU—“ùüèäxã,0ZçE‘4Û*HÏÆÃ¼ôQ ïÞÞ’\<{ö$ã­[·Þÿàwï> ‚xoÏ£7 z]ž8ι³ž’2ŽHœ÷\ç­”1m6¹€Xäsç54P!^%cŒOp„QÄ¥,«ÊÙZÉÐglÍŽŽ€­Û›a$z­KJ å@%pÁQ$ ÓÚRÆ)c@ THF(Ñ<ŠH¥PfjLÉgTQJ꺢Lã‘XË€H)¸`‚3 (EÐ,¢›xÜì\pG’˜Ï/ø^xeÖ/É ‹@Z¸¶^còÊßUPn²Å¥·Fº<—{y³ý¢ÜÀ‹t^¸ ÔC/a–lW!×Nœ{.¯ÃÒ½d{1Šq•·q!óÊ wáÊ/+^¶ôsËíÙå`É}‹¸È¡ »+mâÃgêÈêiåœLﶦ¥™VŽHÜ9<5…¯òQö‰µÚ²w‹®÷·v÷ƒ„ OFÔ§›?W­†µðøñW¬Àh8·åï:ë=ÐÅÕµnýíGŸŒ+õæ×¾þíû3µžl¿ÖýdšiR­½}wûlþßÿÍ'4ϲٻ¼Sùê³ÜÍŽÝ^ËZ6;=éJQ•ñ~ppTOÊ Z’À8]8+›±¬J¢ýÞÉIgíÎãÝ£ÿåþß²ýé×ÿkmÍ/õû/?=Üß9ÜèýçëýÍí»w='ÿã÷W¿ø›ßL­4Ÿoôûí­Õƒ“ÃÏ¿xþoÿÍÏv2E… ð_Ýþ/¢$ +f+üþêzüùnÄÿê_Óíwu§gÓO>þêÁ½ûišN&ÓñhR×ÚX¦””ηâà‡|/P˜¼šO¦Ã ´zºœsÚjcurFÈñánÒh¤³œ ¨Å~« ‘ æílV–ÕlpT7Ú½$Tá[ÀÒ“Ý'‘ Û·×îÝ{D9%ÞÏÆ“áÙa”ÈÉðh6œÖއàñüñ“{oÝg`ÇÃç0HÃV+ér< D2©8 :Õ4ö&}ùÅÍ8Ù\[Ÿæe(E«Ûøõ¯ÿÃG}­µæ\Rþ"³£¬ªkɤ6–JÔu¤JÓØÚšRF)碮õ|6¯k5•÷Æ9…1çRJFˆ+«*N¢,íNˆB¢« £@‘\ z$F)¾x÷(R™®-`ŒïÔÐÑ/bf*k ñȇ¥œq)…=aŒÏó¹1F* ÀåµÎÑÛºv˜OÐ9«‘rå¼óÖ+ÈpAŒxY·.ýÛ÷‹à0O.Ù—­&”2<ד.Äx]v«ÃµÂË+l^ÜÙ.R鯰½Õ°´€¼¬ýByedÄ‹½ òª}‘úà/[ ®8jð2”hy\¯È/þˆâb©‚çQfÄ£;¿ a2É…Í &&D⼩ªR E)å\\¸)\Xf_d ôþ/ y1ò"ìU+e±ˆúÅË¢Gäý"]u„ ¶®ŠªÌõüÙÎN£Ù-uí¡Aà…'Þ|óu ~¬§ŸïpN¼/•”:àuU&QØêÈgSMôÚ«ýÍUkê2Ÿ‚3qÍN»ÓÉóiYŒ£í÷ÕÆÚjVk¦‰Õ¤˜—´ÓÛÛ©6ÙtZ4’´´®ÒŽú Ê­µ,ŒUÉÝÌûgOþì{÷î%_>|¶3›ÍÅáþÀÎqýÍÎV¶ú‰²Vüö_F&j«kcw>Ú¨œoqRûã¬!§Ìøÿïv áwºÑ[›Ñ““âûo¦ÿ™5„ÒD•º&®ž–¹F{ðlO5SÆe³³†ˆÎŒOvò²*PIÔŒ¢ãÃzv:R*ht¥Ñ®Î&Ù¬¿z˳ˆHvp|¼»7ï¬lÿôÏ~‚wïõgÕñï?Úùõ/?oD+ñ—?n¯´‡Óq{”¥ÿìÓ½ýƒbm}ûŸýéãØ=y²óÚ÷ÞOéoýÑ—OŽÕè¯÷Šr‡¯¿øˆé¬€|^q–˜¯Pb¥â½~"&Ãv68fu'óÚg•5•‰âvÚìÍxZe’ñÉéi´¥eYs©(<ñ ¡g>’²Î&>HÝUÇ;ÄúÁžõ¦ü`8ve†Åˆ÷Í€ø¹¦òÓÇÏ~ó$S”¢eQ7`xtÐ[íÖ¡$CÇ$¯j«ËŠ2:Œ§³ZGˆ“Qs2;ʲjœUIBWA$‚¨1™Ï{+Ý´•fÓúÉ—{¡ŠݿϨß?Ø}ãíÉxòáïÿH}ôçù/Þ|w“ iêÔÆ=}¶Êà/þòŸ7R hËyµ¿ûüùñî_ÿõ¯4[à§?þàέý³Ýᤠ”Ë ‰Òf³Õ<9 !£”m‹@Ð àóYÁ‘Ké:§4LW¶4Öñl÷k­mGZ›Ê‘¹¡a£·W6z}m\¢B f8Ý}õÉd<µÖ¾ñÆk  Ù&”P @„Vëʽ÷Ç?˜jžÏ,ጂ)ËGwî|½3*‚µõ•ÍÍ~­«8¡N—œÐNge2= ãÐ{’4“0BïmÄqrðܳ˜S*§u5Û ]§ÒºÈ²2+9RÎ$0ÄI¹˜ç”ŠÊXã<ãR—¥s„H$€H=.ò¾«­æŒ{í}mÏÓi¡]†BB ªLX ¾ÖU •ÖˆŽk]{$’ ë=8â)e”R£'ˆ£µÖR©ÿ°7{®4Ë®ûöÞgú†;cFNUYS»zP±«IФ,’–#–­°#zô?å?ûÙOvxPÐ&)µ,‘Í&›Ý5WÎfÜù›Î°·.2Y•E!ò!\àó³öZ¿Å „EîÅ‘R¤H¥•RZiBFåÜÕy1ƨ´VF'¡&x²šCÄS^ˆ6 ˜7~s”Ä15œ:ŽÅµòðo Òµ™ž¼žMßGŒy]¤–WçUáýbr½båûüˆ¯U|~tÝù{@z¥hÁ+Mc3¦üG>oT©ð‡!Ëw뺮/áÕbYÒ+}_^®zÓ„6Ñ9|ñA"(@(k?¤«\îæ*¦EDǸ8?‰±Ër‹hËÞpz~BÛ%ßè5ÑLíÝЦ0´Au²ðF(ŠÑ¯ÏŒÖ1Å®óe1*òb½šûnJõúź[µÉ†£¶M«ÕB! ƒ ¹¼PÚÐz5—Ô*Q< ‰scBÐ1«œ6hNŽrÓö·ÚPïµ*Ogg]l½QˆttvS‡’åк<Æ©\”¯«¦k8€ñŒÍºk9FYsJâë-;û{ÃÁöÉùùr=K]£Ïmì{³Ùò«Ïd:³ŸÿöQ¯ßoש_šÃáéñt>_eÄ{0ªÚæ›õ£vÆ·ÇE¥Ïœì–ý"“Å¿?>ßåQ¶=B”Ùl1nM/»%ÈçÏÎ]ä·Þ:\®ãt9{v1oãÅÄRSÇ/O*H8Þ˜]ñ:mµËîöxë 7dKŸÎë®ñ^k­´išFkm]1éÝê öµëéT ·°ììC;Ÿ^äN“BQð7ÿéïR~øÁŸü¸ZÿÕÿû‹O~þQÛÈé³ùíƒÛþø½Us²åëfNº8;¼^ÅýíÝ­IV·UYLÊÜ6aýøÁi³ FÒÞnÿÞ8¸½ûðøÞg¿ùBaé2N¶lî|â2/»1FZ6í“P_üì½/MµœçEo8Þ*‡;ãÞDbóäáR¤ õ£Ü–FÑÎ;yµœ[­¦—Ó¶õ?oÖÜ…öæÍz2´m|ÕVÒí½óááÛ?Ê\¯i›jqù>Çb0vyáŠ<ï 0û´ouîäøèøW÷«[·ªú¤(R1è »ù޵*ËÊ”bë«ñplöõªÜꉀ¢”¼×JÛ,Ÿ®Ônºê~ñõø¨«’ÛÚ-ˆ9I«Ä¥„Œ¢T«ª–èó<‘,Ë5¥b pb¶pθ"s r[×OŸíÞPJyﱪºÙɽ¼_ìÜ9l«Ú)‰sk«¶ÛȦJ K4¤1&FT„dŒ$%ˆZ[…¨@S EYY±ZÍCZ• (ȇâ" Qº®u®Üxu¬µNSjÀLjefÃŒE¤…•¤ØÅõzyÙÏzdè»êUYؤzˆ¯ì>¢Þ˜ÒºÞ3óZmä›þÿˆ-ý:ÿzEå÷͈ˆ™ñº6òz‚ ¯cð Ô¶×äò7Ixÿà`g¿|øõÉ ä¿=î&¥«Ñ˜¢Ð^ním¥“ÅÚŽºÞ¨Ÿ¿=ÉÊÑiçU,ûåt~D“²8um3 ¬ÒF{[ˆìözÛÛOžzüÙ—_|vr2½¼Xóô™Så'?ý'ÊBjåò¢rÙà³Ï~ýÕ3ç&wßzkÐwwß¿5ÞíŒÿúWÿöóß~öÎáÁGîþøG~òÇ?íîÀ/óùe'lΫçÁµžEÀ—»ó?F}yK¸I¸^´û‹Ëk/u-ž¨Þ|ÞÿžZ­oÝ®Z'äM›ï.ùåèöÅóL¾åÜÍ ¼A/}ë‰&Â)ÅN#"pS-€ZIzÐßQM}é}“8zß5¾QVsÐMë­ƒ&´¢ÕÆ(Bf]ˆ]ËíʽYxW!Šb/!¤ˆ:yFPŒ–A5¾³V!i­ RÒ® ÂS ¾ ‚d“ÚL"i•H!h´vˆ( I‘a@Ô™#cD­ïŒÚƒ“³'?gJLrY¯í¼k_Ͳ¼/Tù&¸¬ʹŸ§iæptôôþã ‚F2ÊŒ†Ãr<î–³ùI=ÇÐÆƒƒýÌêÝáÍÙ“.¦³Ûoåõêbg2ˆ]vò|al0ýìôÓY¾;Tôªß¿ýÖ?ýûOîÿ‡¿þ²]S6.ì¾û'ï¼}yzùÙ/¾¶I·Ò¹³“æë¯¦QËÝ»éNOŒ2«ÍÃûç—õû;ãe•ž4í’»®5êÓ§÷ÁÙAáJ;ûôó_}:¹õ®B[ öjöO¿|:l‡7ÛÏN¶p²Xó°Ú~öa esì—ÓÇYQœžžž<¿0Š~òÓ\žY;lÓªQES´¦jš®å‹ÙúÏÿòÿû蓟ýÇ¿ù´f, «Ãóçg…Í–‹£¬Ÿ‡Øj¤Äd·>,ŸŸ£ÖÜlZ‡î~¯Ì¿¨V³jYezµ®ç‹Ù´Wô1§Oó|6uyï‘?°ûãl|ãb}éÛz0¬Ö³¿ê÷?{ˆnðÉ}°œÏÎ=\_NÏÏ$ÅÁ¤¿˜ Ú*eúƒÂû¸¼<ßÚÞ­ë÷ø Z‰6V_LO ,0Ë“[yb×à²&$Ÿ°‰I µ·ƒ^ÓÍ/Ο…ØÚ²ì '1z¡@ ½"¯_Rq_9Mq£è|ËiºéCf¢MeJº½Ó $mF;oNS;Jù®ëBj#¢` ­Qz¹®bì¢RˆŠBJ‰Á8g,6mkmÆ´!aŠ,ˆl-‰Pb 'áÄ,ŠC牀¥%H ¡,²è½ I æØvQ8ù Ê1&vÚLAŠ$LA<‚0¥2סëœs̬zvhŒb‘ÁdºN‰h’¶^*ÑVçÖº®ë4@iœ~ûÆ^Ú”¸ìõ³Ìpò¨ìÑÑ“‡¿dô ®Ù\Û·´JËålg2öeaµSy/»ycOÛØòz~¹P;¼ýÎ «©æÑL›vpg\úg§G§—ó|0RJßz÷Öe\·{]“ýÃÇÆÑ÷¶“Ñ¿þíñeeö‡£Ÿ¼½³3ÉM·F»_^žmÝÞ-ûÚeúþ£{£ñVžaYR–:Ó…¶Y]¼s{lœ {»ã|{h'MúhÝ—[ßüáÿs[Zgýíí/û+R¦(‡µOçGçÏžííßúáßûùü^4곿ÿ|PnݸuãÁý‡Uµ~÷÷ëj=ê÷ë¦:;»HQ–Ëùí»‡MÝÔëVëììt:½\özƒ>~[g¼^µ³Ëiðê/þ↑+ؾqøîüøùêßýâ7ÿáßÿf>õY>´YŽœ1!¤Åì(Fɲ­¶YìN¶Ë^ïÖ^ï¿ÿ7ÿòwÿè“Ã;7ËJ”»˜NOŽž—Έ°s€3g¬1D¶—Ìæyn&“aÔ›Í/óyQö³S§ÃÛwnÖõZDŸÍÏŽoŽÆýõú²íx¼}¸uðÖ`ïVk;i3˜ìß~çÝÁΖOQbýªWèҰVÒYMÖÊÙÙÙ[ww=uùüùbUÍ.Õb~q1sÅx²wÓæÃpzôl~~öàëû÷<'Ó·.·V‘Â<ÏCäÆ{ i™”RmbHJ6¨´jšF‘RJmD‰¡‹1ƉÈe¹2Š%)@f ópØ!6M“çyJ©m»ó‹‹,ËÞy÷-IRNF+Del¦­"D*ÊžµÈꊈµ†6“ ­uŒ lH]牔ÑvcÒÔÖëò<1*¥5%N›½Æ{¯µá1+'¦|GW¹æî„ è5»§\÷_âuŠýkjû5æ·Þà»ïÙŒ 6’½Èk¶Âo½ø‹™ÄLŸ×_ð[ÝÅß•n^ÿf¾­íÈ÷¼½éÖ"ß~2âk„¸·’¿[s $ Œ( 1‰7Ô%?­–çYXºÖ“R‚¤ˆØwmHIPŒµ>ÆÄ`´¥¢­ƒ’d3^F$$Ès9¥1‚°°1Š”I™a‘QîÈÒZém›ÌÁKŠ‚¨„ÅÈ’bæÍ߻њ ØYMšRŠ!$aH]̳‘8‰ÚMº®SÊõúc¶Ú„66ëV¡AĘ|ŠiÐïY^£AѤÓ]W+RŒðìùãuµ E!(m3ì|0Vk£!µ„Ü¥J“ÁE}¹ZLwt¾k{]êe ⟭(JdØJéÃ[C´ê·_œ&=ïo÷Qó¼óÍüøèîÍ2¥f§?h+¿ôÝÎí]åèî^¯$øúÑùô´í¢;c˜.WGÎÎŽ.ëÜØô§vv1­ëö·ïfÞ¹³· ~:›Žår9¯*|öäHY»®%ÕþãŸÿî`<´®ÐýâéƒÏ (@jRª–«<ËŠ¼ÿÖû‡Ûãb\œ>}îìðý¾··¿ûÙŸnß8Ø»sç¶ÑYŠ<ÙöGY X‡˜ªª3Úü7ÿí¿4¥\LÛšFÃùüâë/ûÏÿìOÿËý'ù8{÷ƒ÷CH÷¾¹¯T6oÛL3û~Ù»8??w®tÙ°­gVicLAÍ?ý“z“2/Š®‹ç糦‹‹Å’»vgoÇå:Ët]¯­µ"©(2v™Ë¬[ÍgQB—ü“OSðêÝíáÁîdggbL¦(©Û÷§ç'=²yV ×·:ÇÑöÎ`¸Sö‡ÆÙ.¶g§'ì›è×[[ËÙT€·†Yé"ÇÔ•y^æŽÅ_>øüÑy–ç{Û“ª;·n¼u#ë“Q?VóG…€OŸ]‚*´¶ˆ)Æ…”Ak«µvÎ-‹yCTŽÑ§ÈÌHdDD)rÎi­CˆE–¥äÛ¶u΢sy½÷SÚÚ,¥”R0†šÆc´ÖP½ÓÓsëÌíÛ‡Jm2XŠtÆ Ii¡ÒÆh—Ç‘¬÷€h­ „B@iÛ&Æ("mÝøÎ÷úmmBYö´1>vÚhNh2C†HiçlQý~_)5›N½—ý;h‹7ë?›ƒ0¼2ÿ¿Lm ß_w_–®oÙ¯H^ Hß5P^ßL é…ò-Ûè·ôô Ÿâ *ñŸíŸùÞÞ×ßÚ¿å{Å¥×~\|ý'síõ6wŽ ªáúƒßHO»NFBô¾™Ö«³Ø,}ÓÆFÛÙÚ,!j¥ H+ @yŸ@2³-¡ '–M´Pk£ iHˆÀ €1²HˆJ³BŽH€]¤˜} ifð1CŠ¢”1šŠ|³í£V¤ÔUv;´Mî´µ4'H œ¶ è}PJ«|øÖéñE‘l< e±E9öGDS§”ÚÚ7~M¤ì ?r™-zùÖdì¬s…É\žgƒ;7ß)%wºïLn–ƒQÑŒ&[®tÚA¯¿µs8ÞÙ§=^ßððo>þø£~o›Dǰõ~tww½\þñûï}P4™>¹l\?»ùAïóÏœOv·2m\N¸z:¦ÚY¡3^þèÃ?ûê ÆMnéÖÝ2·ÚDíë4[6Ê…ÁÀ-¦óÔ9+代0 ¸ìøôòrÖœ®iéwÞíÿÑÇûÏO§mPŸ|òÓ¢çÃæøþ? m–e.¬…8RãmÛëÓ`»$f“§‹3¥!%Ѥ۶Ž{™s7nç6ÏKš­ÎB‡£þááÁ çÃêìä9½ýÎÇ:ÃÛ·n½õÖdÑéxrôì`ÿÐeyU5Új PH áÞ½O9 ‹ ÑÇAÙ˲ìƒ;Ûÿõ¿þ§6×êѽGËé¬icdÚ™ìlm·…»Ó“Ó®ñZ+DL)­Öu[•`{oçÙÙéу“éùÅb:ýј[ÌsÓtµÖ I †ÐĶ£ÅÒ·u×®æ91‰*²¾¯šj9K¡½¼8ðÕ×!¤í½½óËó"ïNÕËSë\ÝuM%‹‹³£Ç_dÔÛ»ó¶ÉTU­Ú J«®½°9X Ò®O.>êGN¢8cMôMŠlžD’ïB”Ínn­uP˜@$TÊŸbôâœK‰Ëêzí»Æ{/"Z›˜"ˆBDb$ð¾2L]7"l­ET?6Öܾ}ÃÖ 2&ç»c`@B"¥‘E ˆ* ¤Ä)Ïri»®iZï½÷RdŒñÞƒ@µ®Ë^_cŒUÚøÐ†Ø)e”r Þ§N2ë67ëìj¹1Ûû·D盓úw!k›Í 7$yaEDxUÍûÝCôwNÐðÆÓ÷·ç‚Wçú7¾áUÿ8¾N0úždÀk7’×+ßBûÇêÞ©•ïFÉ^Çý¼dâ_ÿxѺž;#@! ¾^œTë³fVÂ"BZ™¥íA­lÄ#  "Š$"i¥‘@­q€I+­È £0pa%ÌHŒ(1Rbdщu—$„‚(LMH#€pL-br!Nl´Rˆ"ŒZ¡5*ÆN)”DšèŠ6+¢BhÛ6²˜(ª Ëë ó,×u=­ë©B•å.Ä®Wä;»#›…h B?wyCrçÖûoß}«iWÁCÙŸ¨LXlµîšU»žÎ¬³º,kµO¿¼§VI7ÔVi{o‡”ýÿê÷¬é:m ‰t<_4‘R>,¸ÊloË­Ò|szñË'«ö{»7ƒ%6ª íl¶Z­ðæ¶öšº´`|·êúÅèæ÷\oâìÈ™~¯nmMf‘ϗ룣sØ?ܹ\Î"+¥ì²ªÝÀÅê%ÿô£ŸŽ‡ƒÁÖn1èÿí¿û?yÙD“ÓSäP­—ëɤªÅéãcNz¸u°ª¦ç'GÕbÕ´>„îÙãGÖå“WØÌ™~>©WÍz½8¼y0ëÁ¸míåƒòþ§ŸWÓÙÝ»ïìîïue¯Èœ~ðÕoæÇG™u‡ïý`0Ù^Îfš¬5yðÝùÙs@L)'¥\"±vzÙG?½Ë’?xrï³o.f3£ Sôìd+“äŸ Ê^×4€Rry¯©ºÔuƒ­ÉíÓ§O./æ!¦íÝí¢_€‚ÀJëÞbÙä™ Iê.Y×{øøùt¶çYa‹ÒeÖi0N71Ð/þüßW ŸNBÑŸåç+`BU„¤Ö§û£¡ËlhÛµ'@ûèÞ½{Ÿ}óôþÃõåâÓ_y~±H"_ß,ì²¼”¦ª­uÚØÈ£çHÖ)E žS‡Rˆ‘Ai½¡AáÈ)cƒ÷Öáh•±Úic8Åè;cLµnQ+FN]P¢SlSð¹m›³“) lMõz8’E}ljªÌšår0ŠDQ ¡mš6Ëu×¥ÄS´N;çŒÍbDƒ¨¬Ë‘´2Z+QD’‚H2¤uŒJlÛµQº­Öyû•~‰]¸î…¿JKñµ&|eQÔÀ$H(ˆ(6€¹hSƒ»‰ɦÕì¥esu¦ÍM…6[ ½¨-Ûp{^W^ÙöñÅ&ŒßÊǾ<˜o®¯ö_|ÞW%›¶|ñå_;õ _ ôòÕBAˆ€®¾}FD MJ IIR$ŠD¡AP’B[£ ˆ„j¥%A$J¡ºðme7'vd­­€Ž"‚hÉiEVSH]Y˜AJB1 &gs¥´1*ϵUVob… €AºÎÇĨ”RÀ"Þ'ï™Iˆ²Äàƒ—„ D¬tŠŒ PóæH,›8 HL"rBMì,J ÅŠd$á͇m¦Az¹l`Ñ\p} ÈrÉ" ”"$ ‰#'D+>ÅÎwM“i r­ˆ£wNk唑B¯§Z?]­*—)™VªÔ±s¯ýâ¼ëŒ?:?¿<9¿X=¼H¬Ìä¼’ÿçÁ/çÓu²ã˜?¸˜=›vƒf9T)q÷ðæpç–˜üpà°}î³xtöô|ÙìLúƒñaÉÃÖ×ÏŽ?{Þ4ãõí­Ö{[ûhhvNÓùáîÞ­Û7f«elƒ2VkHoöó“£ãÅbîÍŸ>>JýÎÛë&¬×öó{¡ßdE|TÃñ¤7ì¿ûÞ{<ïæ37¥M†[7Ö;?].õîáÛmÌòõ²]ÎWä …ÐµAD‹ó¢(„)_Ò¶ï:cd,ÊžsV€&“QU/WOç,õbÞX§WËežg][c ½~öÖÛ7ŽŽÎ|—H‘1¥5†H)¥”u1ùºjº0z~:ëŽ}]ûw~ð£w­vn4›®OÏž~óÍ}MrëÖmBðm£|2Yá sÀÚ³_T½bxûæO?ýºWö.NÏg3µ»»?ò|>ß‚ÒäŠÓÙ¥é•Fe‹jRuj9O©Þ’çÎýÙõ/l¿ë;ë‹Vy¸mM¶˜^d=;Ûš…ªÚ˜jÖvІÔâ÷oïÔoǤ€ùÖÆ¡cì?}"¥(uã…tˆÑ(c´QàŒs¦iül¾è ­Uç½1NSgŒÞ{cÜb>ÝråyÆAD$Ï\»¨ó,WJ1Gƒb¢—¬ c4!ÆÕjÅ1Ö]øÍ¯“iòM+ˆ¨P+%Ì„ „ŒÕ ¼ëM”vš($O*õú}BÇy‘SÛÆÐã‰6º©Û®‹¡õÖXIEʲç; $IZIl­å$5«%AH™sÁd  _Øi^¸S^„½F†-U/±ÿ¯:[pãôyÙ~µÿòK€½hwáo¥Yñe—Ø·ªÊñ ½´¯C" ½ï¾ðÐÿg˜6¯D|”oç¾ -¿Yè*¾*UT×ᧈ¸YeŒ‰@ 6~XVÈÂSDIÈ^‰,L„mÕDŽ™ÓÍê<´5 j­C`‰P]µË´>"Vˆ H@˜€‚pŒ¢ħ¤ eQcçQ”b$d–Äb "ãò£"Ôÿ>ˆfÍ ‰Ç$²E2„ €1F‘„еÀhe1¥˜" ¦”RR¤Œ5­h¬1i-&IL¯ôAAHŒPÈ †c‹‘}BÆ—ŽƒaÏ: ËY šCÕ/]ל„®µý,…ºö­o¬_¯V‹£úï/Vó†£X‹ÝÊ­qv9Kš4ÐNKƒ¿ü›Ó|ŠÝAÒqvc¿Ž½õ¹Dð’êõây³8ª–éÖVëæèùÅplµî½uûGƒ¼(Þûð½o¾nÚóUl”UåÛom:×{Å`1Öm·nª|ÔüîO>¦ËËùÓçÇOŸ?jšÙWßþúê•årµÞ?¼Söú¡«î="¢­sýr ¬Ë|è2—y|øð£ïllx2GGËAo?¥g.7y¡%vU³, ·^_*¥lÖeŒs–´ÊÅ8¦ÝÃr´ƒõÊZÊóqë×U³²9íìí´‹Ëíɰ×Iâpz|Á Sjo¿sw8Ùýúëo!¥°˜_ܹ}ðÞ»o ĪõÞûËËóÏ¿ø|Röo‚ÒqïèÙ©RÊZ+Ñ?=jVÃíƒÛMU óüÆÝÛÓÕ ê¶lm1`^ô¬u1¥ºZ³@T8ÜÚ Õ äÃL97lë(Oï™9{¸=øúÁs" ,Á¸,+ bÛ&Ö‘@TJ÷‡ã^ߥ”ŒSÆ:f.ŠŠH1&ÄiógIˆ)ñt:Í2×ùúìdÖµmo4)‹e€­uË圓ò!XíBç)€ >k£$°–€½/J§9²‡&°!˨ƒ‘¯Ÿ;gªz½^UÌ>ÄhKI|ÛÀÙÙƒô‡CB%bô[[“¦jÀƒ€HêÆRˆ)¦¼Ÿo¡—g{æWe`¼â©ÉK®àUÌêÊêÿRAJÂñEÎtCpCBÆÍÁÿe"ì;êÊ ªÌËÂDBzckîK¢ nÀôÝðÔùV⛳_/éfø}´"axýÑ…(ˆJ„•&¹â=h…‰„}ëη¾m 8øn]/P!‹OÉs«”‡ˆ( Ä€œ@”"äe#‘$1&­ ©Í]…5–ÐÇÐøÆ²"¥è‘Àd†PBŒ ÚZ®àƒ‚* HL>ÆUžÛ†Yi@)ôQÒÉ"áU£äưq@Ř’E˜D¢R Hb#KdeÔ~1!!E@k´(Dhƒ(¬Aïîíe®´ínÛ¼XÍ×ͺÓd+Diò­|ùŧÇGgâµuEknºØøf½lçg¾nBV•EQøÔ,–ç[)W¦ì—dY)ºbÈ có|•/ÂÉ?y2;?;?9ºØ‚ôþÞØKúɇ·é³)]®‹AÎŒF£ÑÀÇYQæ„}›‚âi]·¡‰½^^äÎi‘°æÔä™1V'Ã?úá‡~¸pÀ"mÓÕU»³Uİl×Ý>úñïÿéŸõÆÃ¶Yë¨Æ“íŠýìüt½¾py3áÙ(©‹Q†“ƒùå9¦Ðï“í¡+ì?x?³&vÞ«´ò¡©ªºmü7oÜÎóžËÜbvî#Š267’¨WDèôü~»^O¶vÈØ®‹)HÛB½^µƒÁðôâ$Ä@š'Rc( ýÙŸýñîÍ1ûN‚4]ìê*´õb6ëš®tEŒq±œ‹„(Òtq1_t6úiÅûÔv=çþð÷Ç?úɸ×ëÛí­ímE¦È;û»¨ôt¾r&·ïóá{w×Ëó"3Û“­jÝ‚.ò~UB­ƒ±ë:“÷»´VY¡Ûfí}5–½Òrê€cŒ]ôËÒN²ÕÙñzy4Ÿ”¹sYf\¾xãÇ?ý1’:=Ÿ)ÛSZ ³Õ ‰Ú¶J´Î´¶Æj@TÚK$"DF¥´ï:DA"­µ³z1[0ƒ (¥6ƒVƒÅp8Fb¬îºÚ9|¬×Õ|¾R †ÃÂäŠ2•™uƺœ´%£@ AèªSÇÔ v÷w•6Þ3+›÷3Wí\SÕTäåd´%)ù®m»nÐï` aÐï)EκàS QXH)V4õŒÕuÓÅuÞ/GÛ¤thq»0%ÿR­g@`NˆÀÂ"L›h/§|]Õ"Â)ïAÄw"L)ŠpJ‘yƒdÍ!¥´¢l¼¤)Å2Εä%ÓÿÓ]@ Ø8aåŠbö¢ç;€k†«N´ïr„®wž\çnnÖ~-Ç%ˆðÚŠRŒÄCŒÌŒ‰%JÖ$qµøÑ'£á¸í|UÓ=`„íí‡ØÅ Ñ @­CQä%¦$xßö{cÛ´«,ÓeîÖ‹o¬F­H´ÕyncŠÉ7Œ”^ùÄQ¢S¢´©›°½»›õe¹X‰é»ñÞXQÑZYŸ ÏR¢GÀ¦õÀƘ¢Kv¹-zde3cUŒ¾®ƒ+Ê‚å2´s9;=ûü«ÇGÇu‘õÚŽ9 •Ùt¾(Ë~ ‘#iPJ[‹Ö¦ºZ;M¤õUál³^Õ«Öf9*C¨³ÌÆœ+6"$FÅŠ”VC‡„ÊXÔ&+l9(’°! *M±8ab!„È Â seb2ÊQMÓF#É ;ë©§yæŒÓÚ*e‰œÍC[½~™Y‹Ö©X€Q±ZÀ&n2«BˆŒˆH ÕUÓJÛ¥ØXÔNÅDMÀh )E“¡{‘ùLVoR±:D ’´11Æåbþrdj´Ž1l‹ùÜÝ61ÊsBÁ¶ñÜ­Û´i3^,戊PI ÆZNI)¥¬2Æ8g…E‘"TÞwZ›;$L/èü„(²yNˆl7HLj£e©«$ZzÁQÃx­´æŠ M|5ݸJû¦ƒdNxeÓ…PÓÙkO-¦ä}W§Ø!bŒa½¨€³Ü(…ܦÔ‘Ñ XyŒ1" )F"VšHX|‰Á+¢â“„¶|Šb ‹ÀÁ·V«ÂˆàŒµH䤴"cQ$œ|è„A¡DDÀ$‚ZT‘Iª˜8hm‰ E$­psó‰,J­Ñwb 4Æb I¡DHÀ¤È¦Ä)±1HD€Stšô£ócKØ6•‰ÌÊ,ª¹¶J¼Ü!$BñÀ¢¶‡}Ct±\ *b†Di¶œ LÊ )šlow±[\¬eœ÷¸ AENŒ¬”Ó†}´( i+1•ùÙEn£(ÒYaòª(@ILö†oÝ~öøÁåÉ3 û¶¿µ·ûøÞ7Mƒ|±®Æ[ãñÖäé³³çÿâë/žü‹õ'ÿÝÿ°ûèáó§OΘõ:I;_|qïÉÿü?ý/ýäÝŸüÞïÿìþÙoýååù¹¶½È„R¡@Y”€\:½?²C·iKж(NΞØFìÁÎéÅ¥¤¶YUs”^ŸÏON³|’‚ˆ—Ggãᤠêf Âûû»Î•÷ïßsNc2—§$mS›)í\^ˆ0W0N˜™Èr2&s™*&»;õ³§:“íýÛÆÚUÕ\\¬ ¹á(qžJ›& …Ý[wv’ŠÕº«ªÆf?ë×mcXÌ.ŽŸÝ+ò5¶«æ[#s÷ÎAQØùbúÿ×_ÿíß?:;jR4!FI ‘Ï3m”QVöw~öñþó ÇúÎa¯_ö>¯žèÁÀw>vñò|9«UkmÑuÝÑÓg‹i¶µ;޶nܙΖ™U[[½ÞÀ‰8f9)T`u^ô8´U¢lg?„îüôyʲñðp¹îNOæ]‹Åºìe½^/„.DW^)2¯Èü­07ëóÐue>êZž/æyfV«of¦ä5VZK*‹©Sš–Ëi …‘Y¥1 ÃMñº1ºÊOÃÔZ6NÑÕÄØvË5‘ñÞçÃáwA›9î÷ûD”’„Ю×kcÌd2ɬ2F›Ì¬W³þ°ß %ö‹Ì7µM•#¦©µQy‘eeÞ45'aa$ÒIP"fI’$‰rL)aˆ?BEÈIˆ´ËH ‘u.øöå€W)Eéj¯ô¾3†ŒÍ…•ŽÑ+¥7•°@êj@, ”ºÂÓ³€(ßF""¤è=phÖK¢¡F]Yï«Dš '­Dj$”"dYFš9 €ÒÚl·¾ëŒµ´1"!2 ÉÆz š@˜Ó RófPñ.ô²ð„@! !0‡b“8¥M«;bŒ‘ˆDBkHKWBæÍ#G)¥Q)µñ€¦SŠ¢€RŠ˜]å¦cŒÂ˜RrYÆœ²L“NiÌ PmˆÞÇDŠDJÌœ’J‰P)µyª)¥X@ƒV€„„9±6¤•’tåÝ _œbŒ™¥ »‚Y”0^ý“„zóˆb 7ðÿŸ©÷êÑu»®ôfXk½á‹ö®½÷Ù‰'’©Œ&¡vUíâF·Û1R3›8.Î/K\pͤYΗ§/^/Ç—›ØÇ+£4m%ÅrVðVå!Í·W~óZÍR üÆA»˜sõö½ûoœœÜ9þé/ñÆÃûwîßÿïÿ»ÿ±Ê|çÖÑÇ·^¼´÷OR’º^>»ÎÏÏþÿå_=?]M>yþÝ6ýî÷~˜~öw¿ ¢Z]]~óúÆüF7öóÊYîÆq´¬ÈûÝ7>øn7¬G–³'Oo ¯¯?z¶Ý¤Í|2OhT×o½ý.ˆÜ99_]½zöaãOga³ÙžŸ_Ü8¾c†US­wÝñÑñj½US< íf½kŽæEŠ :›M^¼x’£xª;EMÙ&Óc-²ÙmÕ :Ϫ€¥Ü>™}û[_]íÎw}Ùõš5aÊž«à–‹¥¤‚ŠŸ}ôñ¼­Þyûh6!bø‹ïÿÍ÷ÿòGçgQ2´uÛÏ5p;ão|ãí÷¿ö¶gÿÉGŸþâ'ÿÝßýìé“ïw¿õÞ·>¸y²8˜×ýòÉÙéùó§ëƒƒE¿†˜Ž]Ü-./77ï67nß9º}÷|õs§ÒT^̼‡7îÞ:}qöúåëãÀ®V»ÄfÓz:醤*ílÚö‹›'7ûa|ôäùn//ºùti ¥$ç™ÔT5%ÉyÀ½•ßÀ!©*I%W¾Z_¬º>®W—Uå‰(¥Ô4mzÓä‰Ýâ¨1)Ê\¥¡'â¡–mUTû±›z'¢9e*íYÓ°¡1ŠãªDp3´<:´ÊÏf³ÍåZÅÆ! Ã0™´D´ñ&“‰å>Ǿ„:ð8l¥hUùPù’‡"@½ßW’ZI)…Šˆ!ö‘QRV2%ð.H‰UŽ D9æ¢ÀX‘eß .kV•šÍ©^c5™èÿGsUÙC¤Cp ÀfTDRAFV æ½F™ÙL‰p_MÏŽÕ’H ¾2˵gfºvöí»SJ"²bj¦EUœ7+EU ©‰@·ÛkðÑ`)É9VUìÑ;¿oˆˆŠ)sæ˜Ø;(R®?3tMNV"þ²#Ѥ”$–ѲÄ>—ÄÞ›J1çœs®ä$À²—„å‰Á†V¾|‘EÄ“gÀb–÷œ¥)Ί™aU5|#_’¨–ë\®©)%³![_ØK2«= *€Q0ò>  1¢¨8æR`sΛšj† E²vž©Êþq$)FREv$–¼#P ²J`·ÏŽy†$ö#DPÕBû=]Ã|8_¦h™È19eƒ*µB<:‹‚Y ©l7«‹³‹ãã…¯ý݇÷b)ëÍVS®¸YÎŽbÛù6±j|í ÛE˜ C¿X̱qÁ™NCí§³8¦«‹¾ˆø)ÉÔNfÛh:(¨ä4J‘÷ŸgD0™-fßþàîÁÄ÷çë?ü“ïÜ?Îiì¶;çq>}¼Üœg‘ƒ¦úÓ?þý¢«RÆËË«R"ÒÙ¬=–¥Ô&ü'ÿâþùô÷?ÿ9áikɪ¶ q,+ó0¬WmÕÇ(håÉçŸ>yô",ÚÉÄÏçÍåÅêd1¿óà¡=sç/?ºukî*3tÝÐSPôôììèøærº|ñê™ ôðí‡ü)sELÓÙâòòÌQÙ­WçÛ2¤ã;'««KÏ56UKšïÓ¶H–sA²œ äÌf@E…ˆ  35󮀦 ¨f„ØcÛ.2‰j7LèçœÐ$ç20ZR1âRŠÚu  ±‚!3‚å$!xU£èm1fòΫ!¨ácj5"®ŒÌ@MÙ ‘œÃP7Z<ªfÕ”ó  Ä{l¾™ª9&DÔ’Åù`€¦*¹( €¦`ÅIzˆd1;W9#v"j 1'çLÍò¤v„ˆÆÅTAP IQ)Šèœ·V1ç’¯3H€ÈÕL’ÖÍœW3‹±ä¬Î·ûÕŠ‘=’C`‡Aò5ˆª$™OfM¨<ÖÃÔª ÞmWëÔ ²C¦1ÇU×å-§X ŒãïÂv³»}rçá»ïD‰ë‹ ÔÌP€[ΖËÅ|9kfµòúÍÛã­#fG·¸Yµé.TR™5óÉÁñäèä?ùu‹áOþÅöÒ¯×c]O³¯)ÿúçQ´ÿü¿ø“êÀ~üƒŸ|öɳ³Ë€EÍÓðî‰ß¬¯x”;Óºò|tòàÃò=cyòÅoúÝ.:Žrãöí‹W§ë³™ÝñÁ¼[_vqàPu誻®/E6W›ó×§Îû\’óN ü¬ž¾ýλ·ïÝ»º8 „}×Ç"7ŽNfG s ¢ì L Èîjuuq1™MrIŒ¼¾¼8}ùª®›”FC;?»0C眨Èð½o߸w²:_)ì;_ÆXr1Õ¦mÅJêÇ÷ß¿xäú¾û·ÿæ¯?ûô¢Hurçè·¾ùÕR´®åà¨zõòòwç·_œžþOÿÿ–d¿÷½ïXJ›uÿõo¾óùã×eÔËÍ“cW{#w÷Á»÷ßz¯ÔÈøøéË—ONc¿þþWUSðtMW'6áûÍ®ï;",YšÙdÛ.ԇLJÞyTºÝzµÒRò8vÁÏÎÏb,a2;ªÚ){‡†Á·uU#¢ó"“WÈ¥H·Ýi‰®®%å~סš0Ó~®Ī ãA,øÚ…zÈ#!HŽÎ+%ŽãÎû*Ä´Y¯Î^¯XˆS”n§Ã±äݸ:_§¤uÓz¤±ëK,‹é̦Á1©©s༕oÚºª½åòâ"¥8™LrÉ€¾r¾*jÈn³s&£IÓz€$V²25Ä 4>æ´AVd‡óPUe6©Á¸dñ Ê WˆÎÀÅ´ìojˆ¢ú½+ÌÞ”ØÕ´˜¡€)šÓuèL3!€‰P¨jÙK¯H {SÊõ{ˆˆÞ ÂÖ‹0;ôû;BÚO¨¨HÄûÊ‹X.Š Dê À1F“>Ç¡ä!Å>ÇrˈÅ$¦îÊÊ`Ò› žEˈfRT#" 5PbTçö:Ä~ò6 U$DÄ$ Z²”¦¦j"Èx½{¢wn¯D!Y¨¼*¡YI)K.ìœ $5A`+Vr.¥ˆ"•RØù/YtV4í¡ÄΤ1;fA42ó"PMMDSÎû¯BÎÑ;nêœ31tä˜ö‡#QÉÅTiÉ{혘ÀÌ9Þóï\6Dƒ¦®)8ŒšBðÎy!gLÎ äì¶“†ÉT•=/æ‹Ý®ÏYÐ@¶}ÝNŠÔ,fÕÌÜ;Ó Ç·ï4mõâÉãñõ&x2Ý•ó³»~œLfÞ‡‹ËÝ”ëõåZm0— )Š9ä‡÷†&”’ˆtŒÝË'/°]Ýxïæë'ç?ùøâÙöW7œL¦œ‡h)¾q»:^L²•"c;½ùö»œ§³ËÕ/sVöuðÕÙå‹«]_$Qί>^ýøñ§¿úœKsó¨­¨:¿\ÍÜ[¢wÕËWyҶ㸞´-"j]7í¤’Él¾ëv9ÇE;9:< Õè'"C3t°Ù]ìÆ\Š:D&¨BðÄ&²¾Z­Ö;M¼œÏSŠ8ì*ïëù|yÓuÃxxt H°$‹S”Òeèæ-Épñâ¥gßw÷aµY C@QQU%dgÀ„Ûa£˜8æà«€-”a(cJ96óº©gË£iÊò—ßÿéÓG=Ãä+o-ÿÙþî“g¯þõÿþýþÇ¿í<û;ï%ëþâ/ÿîù«êßþ_¿yç»ßú­¯¼¾³…à¾øäeŠŸß¾{û³O>}ã­wŽ‹H~öèÙdºxãöÛoÜxó`1#¯ËÃi3¤|ÝÓ²§âÌÚé‹«óÇ´™ÍBðÊ VW›ÅbQ×µu^oܺñ¹\ÔÓÙcw¶ÅÔÆ4®W¬š>8<Ì*€<›M׫.KÒRªÊ÷Û"%×uµ°üÞÆ¾ßœsGÇÇ„XLCp]¶ù|º[—œÖu5öÍlÞˆZJ‘}ÍLÍgÓ±s>%»zqZaãν§o®Ö©F¸sï6{nfÍꪯª€¨|ɉL½ÙóÏ}ñE;¤n¼uÿ1©ˆQZf4äÓ‹nµ‰2¦›'xt0Ë9¦¸5t@¡ªjªe;›¡k+-@ÙîÖ„uÓTuËÃЫE­‚sž(Ž£Šy׈¢'$0¦½•…T•™¨d! %íó¢(`ûÎyº~­¡òTRñÞØ^{Üw’ùàÓ öåäXUmÿ¨•¢`ì… @EK.Y¬y0fœ‹–‚@DÎïwSPSbÔ*`ðâH@T¤ŒZ”C"…L»Øw1Rž$yöZ„ r.¢(…LXIö"*Q‹%P%S"3Ë€$jì\ 5u¼Wâ÷ôÝsÜPDÊþœB`¦R²ªŠ*d$F0TÅ”‰Š:'Åh¢ 2(HÞ#‘¨òuÔaßfF±$FkÛŠTTuïª2“ˆ(ûT39rL{Æ”s²×.öªLÎ¥(€ì£r¥-Å™ó E¨”\×Í!EÑÔ\Qh목+cê‡8Žã®ë§“™gD,ƒóVy:^Ì'³j±lªÆ¥”‘ÊÁá4'QɇÇÁן¾íoß©=ö›uÇÉ|6YLèÙ³“'“I}uõ¬Û®–sKEÇ„TU¡Ñ´¾¸h=!=¹yãwߩՋ—/wÛMå]ò³§òßþê' -äf®««n¾8\LŽ£Ôazøâã_n×ýèónŒPq¨ƒBé»tv¾×Ìæ³Ùü°ß¼nši{0;¾¹rÁÆÕ°:[•,Áé¢õ¿~ñüreËÚW5ìå"3›LË]êÃE= Ýt:±4²#…ñÞƒ¯\]Ž*ÕG¿9[ß"Ýöj»¾¬B8?;?¼±œ/gݶ}v:o|–RyõüåÛïxëîíW¯žU“æÑG¿yþôÉ›o-4¾ßîf“ÉâäÖüpÙw}S£®×jq±œîvÙWíþîYŠ Z"Ýu»~·Š} 0ºag³iò¾ë7ÌÖmדÚm6ã£Ï^|òñEåÞÇ÷¾úàìüõÉÉÉw¾û¡™š•㛋ŸýâóO>?¯gow¥û7þ×ÿõóŸÜö`ž§÷Îo'[yñìy5]Öm;ëÕúÊ›h‘*LçÇSÉ[Ø»!":SM)ãcwý¤Ogõñ¹€­VÝn½™ÏÛó7œsˆ‚ ¡®›­Wkð » ëîöÉ­Xp³[Q; cµ”R"Ôº® ÛmERQ uFûÊ‹q1b¨ªjÒ®×ë®ß±Ã"I$·íb³¾’¬Á7`¤&γÈãTÐWä‚!úv|ºx9 'Í´l×Ç_¿xj÷àí‡ÅŠZ–MSç’ÍdÚ´ãvwqþ:T™W«m=_ŸÜÞ¬;fdSUÃ1»åÑÝ~½î†ó££©ä|SÛvÑ´3€+ÅQઠØw©n*¦:'1*¦”S.õ$ eSžL*ç´ä4Ž* &„ È Ì–Ê^™0C-Ìät)3UÙ{.ÉÐ2°g-‰P÷Q[¦=®’E "‡`H¤¨…È__ãQ È̼GÀRUžØ4bdçLM!R0&B@T¥k+¼!™8vjb ¡A„"äR´dD b¯šU°d`dR‘¬àô:õQLKÖk¡öK2’™ÅŒL 0«*#!¢ê¾bÅCUQIf:©+BFÓ¢b† EöÏqA PÎYŠª(1¨™ˆ"‘'bt¦*Q²)’cÎQ™; V5‹):v_–Îö()ŽŠ'&&$¶UÅœƒ¶Þ+%šS MP°à™Ùy_LQ¥23SQ34E5!ÆëºPÜ·+#"å"ž]`'b¢j×p@Çäû®ó^PE˜Ú¦6Ì&VW>ÂlQÏæ­*2޽ÚñÑ´®¨ïÓd1oÛzÚÌ·]FMí?þÕG?úáßkž^œûÀP´ïwÕÔßë­WO;+“ª38raR¿“&´§ÏRî €=ø cî³ÄTD³b•‹ÁP‘`;Y,–OŸ]ýÅü·GãÓ³«—ÏOc²¢–µ<{ñòÑŸß8ºÅóÙôøäá“—Oc,&ÈÕsmÙåmN¹:Ð6îöí“7‡|\ûRÖÞ»€RôøøæG)ŠÄaC—WC/óÇ¿þd2–ó“åÑÁ8”Ùü g=8œÝÖ±«BãC5Ÿ/»íºÛ\}íý·C>ÿücDšÔíÉ­“,ièw±/yL“j†q3nV›:Ô -R‘Ó³óÐNÈQ3ñ>4ª—ÁWH VH³ 9ãÈHžÉÔTGe¾ 37[_Ë86Ë“‹Ëþg?ûÔ¹iÊÃ7¿óîùzýïþê‡ÿò_þg_ûúƒ2nbLFöù£3ö3 4äüôé0 ÙùRrþðïÜ{ëþO~òñãOß8¹_y \r±Ù´Þ¥ŒbˆŒ½Ë©°C$ÇqŒ‘‰*’Æ8v)mÎ/Ÿ—±/æ³ãÕ«Ëí0|íý¯¯×ëª ³År³Ým6±ƒ®Û‘ÉÁ´d1Éî-ÿø¾óÿîÇÛNx·ÝÅÉ#WmÎYÁPݘûb¬ª:§TJaÇ„Xr6Õœ²äBè }¨Õ4¥hâXªŠÇ¹’P[v„B§çSfÂÍòäÄûÐÇT^<®ƒKy÷ä‹G—ê[·Ž8—8ŸMO_¼ðN«Êú2¼<¿zóhaF³éÁåùE7&,ªsýäõi? !È.æÍf U ìÀJhæ‡o<ˆ»µ'ˆ›µ¯\=«\5öålØùjT€ÉÁl†ÍæAAéáÃ÷ÞyÿýÏÿúøÆâæÍƒÐ·¾„m?iêéÑü³ñüÅ3(rxó.:_M«ÍÐoêºê‡íb1“؉ŒUãë*”É|6›¯V›œûRj$SË€HÀ¼_Þ7ç¯kK)Åb¦RÊÐõÓvczöüEL©™4‹ù’kÿƒ¿ùôõ¹ÿ«¿úÑú§ßÁs¢‹õúp~»m»>uˆ<ÕŒ¡ Ù’~ð7ÏÖÃÿóï³:/oÿݧÿôÞ MU”ûQ«frr÷6lWç±ßQ]×®2+ÊLËYë¯:}zúh¹X€«HÂÅÕ®n÷úüîÃ)f7 ƒêl:ß\^µ³pûžÉkɼ÷æ'¿ùû'_Ÿwݶ”¤¦u¨wëÍáá἞0201g¦H®6hÚm#9_¢R·\Ý4o¼q0­ªËM7»}c}µaçÇm_íUH¤tÛþòt5=ž’@@vÎ笫«ˆ…ŠsΞAã8ö;×L±¤‘ízP#ˆIfëM_×}ì2¢åÒy¶1öjCÓ4]K±åriÖ1ón;˜`Ûp,ƒãZE²"„Ðj&4?©49-(–ÙÄ¢g4ÉÅ®Gxb P14dS£¨šJAË{¨t¨«} ×Ì¡j‚©#"5-*%!;2D±Â¦¬Dl`yËLRР1- (’bÉû±”UAÌ! ¹Ä̦VD$fPvÎ+˜x")â]‘" òÞFc„d€JEÌxouWU•½îÀjhV÷>A$# @êÆ±ª}Ö”cFqÞåœD®TÞ92PaÏP”ö‡u»~õ1ç“ZªZÕxd@r`E‹ÆÒxWUMJ)¥d MÝ Ð¤b³LÀf& H& Ž B1D%4ðl†ÀŒÆT,;`Õ‚,ªâö~°/C$Epïš5d$ /›Ú ˆXBD2¯ûH`Îârò86ãNÛºòÞ›Ójè7Rz†jÚ,çú“;ó¶ž±k&‹I¨ kä¶æKë‡4D)R€ò×ý°¾ÿäü¹:¶ËËó«õåó»Uƹj²IQ•PEBÕܹû»圽›ìŨœòîrëÛ:¥ óv¾:[M Ôév³Ù­w“ɼªÏ_Ÿ§Ñà­»7ïÞ:üéÿû~xÿÍ·2ZhëU·f˜ö›Ý£ƒ;‹Éó—OÏ®Îv»8CÔ¦©SïÖ»þ—?}>ŸOæsœ4‡§—+¯Ì¦°Ù\„Æ/§7®^¾@•ÅáÁý»íêù³µ/‹ÁðnC}ßݹý°Ûí¬r“åâf> ¡eä}¬„Ñ’„€‹åÄ$Æd93ì‡NåZªª›f×ugg—Óé¤ïº7î=8½:ôø Êñ‹ç›Í¦ŸOË0Âúè ¹{ûægŸŸzæo|÷`&vÌâjþåß~öül˜Ô·~ô£ß|ðÛG7)§¡džNŽgÓÖ´ß­»ŠK.¥vA,—vžÒêôõfЮšv1kbï¶#0*D'%3ûqŒE†ùb:›Ïêª2)9Žcé=ó“ÏžŸívW—±YN&mU×mÓT«œC𮔌ZD¤®h3B.…v»Ý¾7 ÆqTÕÍfÓ4m£wu#5{#9"QpÃ0Öu[R6ufÁÀO¦í¼é½‡à&³g(ÈÄžûbæ½'¦Ó×/ÃÜ#’ˆUU hŽÃ«—/Th>_¨É>4»ç zès¦¼ÛõUJƒsÁ9.bˆœrŸ‹Lêùw»Ýè+8!! #˜ïÀojžIŘŒ4Ó>³†ÆŒˆ9›iŽã8 ª+h¥ìG`%p>8Õ„–½cBs6DeG&…ˆE”É¡YF(DÄ{Þþo€‰Ù‘ˆ˜ ìmªŠœq•fVfDt¢¹¨Öõ¤dM" LJ[ùk+jÎ#»Jó5œco5ªëÀŒc™ŒU÷ðm!òÄ„Ld&¥ˆsމMMU4ò"rM/B`&DU¯&ª¢PñþÎE€`BØÿ™¹àsÖ"ê<ÍÎ…œ…Ô ª"FT(sjÙ pôóÞÕõ¬XJ9ù@9Šª¨¥ªÌšsbñm7±ëûƒ¥ÁÌ÷çg"9årúz}qÑ bLGÇ·Ò`ƒ"Ÿsî»<ô=‚활”Ô‘EI’Ð*UÍ9§¤€%çty¹–b€‚N¥jj­ëŠ*øÊƒûŸ>y´ÖZ„ð¨]®æ‡3u®ß¬Ög¯×³°Ûm6§‹ƒ[ü|±¼Zí4•ªÐ´® Ítrv±ÃœSŒ''·oÞ¹/9ª 7oÞ8:º‘s‡>çÞ,Š#:"Ç~6««ŠËéWn½ñúåëó×¥©î5ˆä£Rd´¢)¢Ò4­iêûuíªùd6ŒR…©•Þû@“ɤë:)ÊDÌ ËƒÃŒ„èŸ=~DVŽîÞŠ»¾®ªùb~¹[‡*ì}>0€2CÝV49d$6@bšÍ§F’¥ òl6ó û-d?ÔpL}£~è7¡f$ðèÑ{?›ÏÇ!Žý€ Ž]ת Pœ*9¦’S.E»>±ó!L†!:Îiƒ46¥@×oˆ ˆë=(,v;çÃr9c§*ã(Þ…”RLÅùC 8†@Éúà]ìºwõ´mk¨·»¡˜š‚wF$ì‹ãjÐêu//‘Š©™cÚ£ùz9›ûÝŠq‚ÆÒYíùp1Û µí²™MÀ Nï¼q(Ф1YÎeZ·ÁUM;kÇË|y¾ª‰x²XÝr&ۮêù­o¼÷ûÿô›ÿÛÿúgýZ_¿x¹;;÷k_m–s·µ eߺÿÞ½7~þ³ÇcLOŸ>š¶“£›o¬VW›!®ºƒHãÖðÅ/¿8h9èv}Zú\OfI*Öåòêŧu*Tµy¾Z—ÙòbL¥ÏC¿~>\´6œív¸à›iÓ†þêûÖ£ïëÖd-zyzYWÍÁÍ[›ÍæìôÕb±8<^d¡æ£ãƒm7¬7ëÝ®óÁÇh«Ë-"11  $EÆXò4LŠòa[yhÏ7™€UÝv3NªIÝBY¶›UIcjB•ãাÛî^­.èö'm+ëíî­ê¤šínÞst‰ÎwuíªöØð’ÆjuÞ™çõfÜܸsûòrûðý·† ’£µYŒÏw—]I³ä*´V@Ôbébµ("œï¶mÃ(Éd¶»v1›.¦ãv÷êÙǃÜ<¹5ñuÎ}=›ªUgç'7ÞxïíWÏÿ‡ïÿôr­BÍR_|¨TÙáÄ4Bãó'çóÙ­7CÊè†R&‹YÓ†\zD½&‹bLÙWíé“/._<>¹s‹rA Lù¨Es…š/Î,_wÃ.´«·ïn8hÛõî*"À.*Œ‘›nXmz­PiwñH!€d©¹mýÉùù~ÿPê4N{OIµ¨øv{–R˜¦Cª’¯?€±˜Ô\vg`Q¹–yj]ËMoR¤èÛo>ÿ,>yº{õÝû]³Þ>~Öo·Ó¼g´®ï8ucU{|ù¨iíîîš¤º~ïwž\]ß¿ýP”5„€ÀÏžñ«ËçZ懇»Ãþ†Š•ý|{íMk(÷÷§y¾ï‡GØ]•èýþ®Œesþä_ù×ÿÍný³?ÿ³“Ô¾¿8óý~q±Þmw=9ž&5»{Ø7)_ìbL¹ÌëõæÃûû® ó<^œms)CßÎóÉPwÛñ4V1p.%7M·Vå4眧iz8ì5ïͻȽiUó<#bh»”R´êÙÝÌN£0ï×H“»Æ:•¡[‹–_üüçôGÒÍÍÃíá4ׯýx<2ó‹ïÑþå‘,Ÿüý›_Œ£nº.íª¡ÆblUGDoÛ4…ÉÔUÛHfx¸»ª¡Ù¸è݇w§Ó¾ˆúì¡ÀþúÊNüõÏ¿zûöÆv÷O/ÆûãËoÞ¾xñÁC:#º©¨AA®ã˜‡þܼ|xs±mÃ3÷PjiÚ6‹X 1&VM-K×(ÜÝßö«u›†¶íErd MËhÇ©:»{ŒQ`Q—81 zŒäÌ"¨(¸³¹.ÅU1C¦"!åœÛ®ó¬»Ýn¼¿%&@\&Êœ‚0>F3ó)Wu,b‘£™£Õy:€´mfZkĺ=ï"•Ä«¹dFP«`Þ6Ø$3˜§HëUSʉƒ…È1%&@’ZÀKVô†Á}™p¢÷¥ˆVQðÓj¥K;¬ªšSRˆàÁœÉºPˆ@…QÉ…8ªÃ2ò6ÓxÙ'293b&5[ìÓÎŒªEU—àAU ¤Ú¯»KTŠ˜š‘›# ¸»ÆE9/kÍ%b´< —x"Ký(À1õeDì‘¢Z15LÕ…ÀS4)33:830³¨TtkRK!E8{´5/µš³ˆ9PŠ! gðZË¢CCtÕÊ!z Ü„&iÃ¥¨¹9/OaCUSw3w ìJü±©§*1F[^K!R`bfP³¿Å,”íå·×,©Iàæô‘ðƒ Š ¾L¬ÌÜMÿÞáC„m—Jv7 H*nÕtÎÁ°8ɲ)"ªPÆ›7Šqˆ"Å›·7duÕÒå³Ýãí´Þî§o®^÷21_žŸuÛ~žNlã42n„ RëÓÃ}™úé¢EA!5âÄŠÀ-¥öæöªm†Ôô"9…¾O­™1–Û»·ëõùÙùöÃÕË2NΡˆ´]‡ˆ†æd‘½mפÛÛ»ùCºžNO7›ê‹³þb=¬³hß4Mêj5nâí~üæç_·é<5ëgÏÏçéˆdv˜¶1üä‡_¬{—‹á8ó8» BÓ¬Ÿþý»/«Jžˆjù½Ÿ6gÍÃi¯À—¦]Ji®ó—¿ñÃ/¾üÑë7Wzš¶g»8t_þèGW/ß<&|þÙ¿zõ®á|»êÖÅXÌ9¤O?}Þ¶­HÙlVjúÝw/_¾|õôés)õažD$æÄŸþà‹¾;;ŽýW»,âÜ1—j"µVæÐõ«#*ƒQ—Â2ST±¶m†”NóÙ §Ò÷›äÈœŒu»é7}פØ6éÃÍmJ¾ú1_å2;ž‡´1§¦ÝÝÞݤÆç ¹cG><Ô»Ó\ª ÄPÍTÜL‡Ãz½]Ûu7ôi®åt,ÓTÕìü|˜N‡Øðn;„–ŽÇòp/ó> ÿåÿóÕÓOð£ŸþˆÛðæíøõ7/^¾º DÒDh ªâ¨«>˜Q™§CÎEµABS ¡1Umû&†¾ï‡Rj͵R!¥˜ºÄŒûýa·Ý‚‡Ä€˜Jõ\räÛ¨z0Óåöv/Äôpx†cÛµB\žŽL§i Zñö–)¦¦©µ~tÐI)%A›4"Rͨës7‹î BhæéD 9g𕫪T)ašO‰=²«¥‰è( &¨«u›’ *ÈSC]› ÜmœÆ(Q¤1Ep.E·AD*ðH¾ŒnbÇM£PDŒ0¨IÉÖŨ ól„‘8¹»ªä9‡CÀ6 2˜šj°ZJLIæ\™!˜ ˜¸‡Èfb&¦¶äOr.F "•)¹s`# bE]86Ì,Õæ9‡™":¸þKù¥£ ª„Álý"ÛÇ+ш„ NˆHæ!Xe‚ۅ͘eµbŽy³Z*ÃÇÓb£™™Ï¥4MPÓ˜ÈÕI (†åÒM!¶À4ômɵ‚:¡¦\Åœ ÈQch8‰Öñx „‰ÜAªfwM] Œ"U­ªþšO#}tùˆ!¨bdNªú‘Å„l®‹©Ì”›¦©R”ÙSC„„ªcÉ6Wг¡É,'ÀãéÁÝâ [26¤Û‡‡fÖFá8Èóì‚ Éôðö~u~¢}ï³ç—φ?û?~.ÓÜ8ÏÅ‘²P”Ó|7Âê%[y0B\ŽJã P³´`êñ4ßöCӼ̯¶«UÉÓX56x{ìûÕŠwmo"x˜« ©ËmÓÖYŠûím¦p0Uœòôæý»ïqëFŒ» IDATÉM«R7¿ñ‡¿}w´7¯ÞÕIÅ3rsœôo¾½úó¿:Š£!Â?ý§ÿÅOÿùóïÿÇÿÑ»wÆrœ®îÖ«ÍÙ—OͦӡÊ)ì÷'s´1 él÷èáöÕó‹ÕµÞÕéÕßý¯ß–ªíúõîþþžn†gŸÕéÔ¯6«>õ]¯ÄëÍF]Cê’Ô†æÀ®2"8(5!u]s~¹ÚïoÝfâ0Ęóœ 'uLŒ)†¡ŠR4÷˜´kÉÌTgꢳǚ@J„€K»Ç ˆÒ¬«U¯Zc"ŽàcjˆIóTÈ!DàÀfTL˜c*•ÑÀ¼ G-WLä^µÔRÉÛÞ=b ¢êæ! °‡d.ŽæîNKÚ>¸Q©*"ÄÙ(ÍÉȬ&f"`udÂ_Æ\¤6)¨Jˆ æ‘©Š,ëPw !ª‰ ; T@`N¥T`uWFvW×Tc“D¬ª[Q$2ÆS.*Øôd>T—äæÕMÝQ%ƈn רóá y$3 H‘QÉb Ì 5'ah;qˆMœ¥‘ŠEÂ.F3@p1™TÇÈ ªILÜvlꀂç’9ÄH³Øìª1 lZ–ò4"4æÜ„Á‹›@@P¯®™¨AžsB`®s]ÌÒfÊÌȨîÊ1ô¡ „àD´xÕÀÝ Ú&F 2Ûq<~ýí ôþú i–<šâ˜i?«ŽãM?ÿýöYYµm{:ÍWW{r(jbÔ\k š%ŸNG–ЉeZ·Ç|÷мmH-€ßnÞ¾{ÿÅ—?ìRð\^ýêÕÐ ÝnµY­‡Ô¦ÔnV«ã±i(ÆÍ:ÎÓª¹¸92uýºÔš ½yý6¿xÓö5hïon‡õ*Jÿùg_¸a)•C¸½¿k†³Ôo§ÒÜÊN±…Zržç¶éW›³"}z^áæîÁ”η›féN%©àiÕäÈ,¥ ]ë¦!6UÍÑÜkÎÛ‹•£Üß؈yæTÚyVBÈ:§‘tèâ4—òúÕz» 1ql©ÁïýÆ>¼ÿõ¯^ŸFùßÿôÿúꛫ»‡:l©gD!„ ~­!C«jbL­#3PhÚ6ç*"µJ×õˆDè%ë\ a3Nc,’!v˜"‡ä"¥JjZSM)MEÚ¶=;_ÝndAšÃÐ÷åtð¥w –":Af"ŠÀHŒ¼Û ·µYcŒ¿Æ#‡ɲLÛõ™»!ª‡*VkpSQW÷EÝD¤Öª¦¢8¨ëñ˜Ë(F̉8.àd;M‰bŒµjhÈ"sÕ ´˜:„@Ä"ŽàÌH´IM­RJ¦˜˜É̉Ü]æ±2RÓ$S;<Ö«‹•<†&ò4 ÇqŽ «"M&‹@Ñ"·ZsˆŒ.î&VC`PeŒ™‘\œÔ 4T%‹"6M"\¨æH„Vܪ”CŒ šššY€¦ie‡PUj­U•™Í‚v37e\ˆ € Ð)²!¡™‰H£Š¹³©—"µ–¾oP´e ×ú1Tc$FS­æ%„”f­b\ 3U+îÆйª;q) ˆe®ˆˆU„™!¥šˆ‰¹SL̈Nfž³8 ¡Ä`Ä@Æ@@\ÍÜ™9ÅQ¬†Ä,fŠ,ˆ,–ã@„Kœ‰Ú¦ÉÄ©êÌ쎵ª˜›³@ £¥Ý€ŒKuÅÑœº&lVëïoˆ;0jýÛ¯^©W:úÝùãO/¶mÇÎoÞ¼øyÞî~ù·?ÿöŽ(ÅPkE­ÕÁƇ­NÇy³Ý4ëöîýÕêüü²l‡‡‡ýÌL]×¾»¾ª&ÓqÒÉò<‰éq>­ÂÚPSÛ|÷â»Í}_¥Æv©Ës=î?ÿìÉñáag‡üÏÿç£Ö±æ<ÏyݧÏ?üþÝûZäÕË×?úÉOTìýÛ›Û{¿=d7#¤Z²Á 4ºÑ°j]J¨¨›7Çâ×·uÕmÊtš²žŽ'Œéñå“1ñæþîðpJ”¦ãña›˜ðúêþô0;ãîlóù÷¶sáíC-…6}'5OÇp "8„pQ9¹-o)"Øl ¡ —?CXìæ>Ï3qX¦".»íƒfQS5G 5W XU?RS93ºY5eÆÍb5E31QTwZ¸?"BÀ„ènD)DWsˆøq¸  ýÐÐTERŠ}é…-\S]ì‹EUU— â*ž5QÄ¥‰í>º€”˜À)h ¼Z·Ó¼><8Æ6öŽ|÷Ÿúé¿ýoýÑïÿá?¶«ñ°Ÿçün¿ßßÞ§n¸¹94iµ¬Ÿ›¦Á†#”’sV§q*••C\uŸ5ßÿðáþñ³´½Ø C{uwÜÉñòÉ'¯^½(³ñz8{rþ{¿û•©€Î¹ªÀï\^”<ž§ïnOûSwqö8³Šô}‡Ì77ûÝfÍ© ,EòÕõ<éѽn/ž9·ß¼xóîýíóÏÎÇiº»½™îN!æá ZÒyšÔ5¶mŠë‹ÇëbÙʦc¿|þÅûßÿ—o_»ÕE@M1lVýöbÃCÊÇã<–R™y\ÁÊuwhbúê«—ëuóùçŸ>þìÛO`ûa¾åûk#Ǧmw_|q< æÝùêp¸¿º¾5M´êoÇã\Ë0¬Åøüñ³¾¿ùù/ç§÷ð~óúÃiÊ˲¨Ôl"-¡L§#(­Vk—R‹š¹K`B.9›I­sdîûU?"äñén•ó¶-˜sjDyüÍý¸oÏK=0F•<9b{óîT&}¼ÛwgëÝÃ~ñ¼íÚ„¤M›â\E%¥žB¼;M-Äh”ˆmÔR𔥅aX»ƒCTsQAJcÕ¢23î›¶†-°öìÉ~óGBÛqŒs‘bhqJ©•ÃJ¤ªAÏ+ñ+1b5ŸröÀæb—¿_‘©‚f äíÛ¡r¾¹zoå¸ÖæPDÛ¶ŸÇã1Ĉ"‚Àî„Ê "¾ëûÀ|{<&B”’G¦¾Ü0UØm/ÄJžçYÊÜʧ; úÏ“VÇÈ1Ä`É_sd0 ³/¥èjQ!OutjKå¸H „µ–&5ª>žrˆ¤¦&FÀœtXEfŽ1‰˜;¸ƒJÍYc⥧ªÓTš&!j`t Z2ˆª AŒ1µ €&÷aËìy2LM ¦ˆÊDDfÌLóhÎ[SXHm Tßlñ‘êÂ*ÄœbX É?~˜"-MWD'¶ªbØÔDÜÜÐ œ‰Í—U11ôÀpDUqˆà$Rð×”¢_ëáÁÝ‘ÐÍÝ@BˆêSÛqLh¦¢Ò¤X¤ˆVZjVˆªêRžš©A“âеH‚".î€ÁL³Jˆ± ,ƒ2W7·ªhª›àn)EžkQÉÛžÕ j%prª˜Õ%1¢”šœ3»K­C`Ì Ž¼`ÜŒ  Œìꎘ €˜LK´ˆé×ýg±¦i÷‘Bi›œÍ9 3ar"'à6&°bX9:©ÔYÇ’Ö¢RI±çÕ®=ÿî›—ëÁ~øŸvC_£]¿{E îî®Ç}mãPÅ hÛ¶Æbcɹ®¶k‘Ò3[™Ëì:>|wúðMyúô{:×°éi>äMÛmÖÛóGNófž=ÿì—/^^?È ‰“Øn.†~3އO?ùÞáxÜ?ÜpÓ¸Aß]Ï©OHŽ¹Ô‰¯ns1è۾»¿y8ÜΟ|ñÃ9ÏM¢‹‹g7ÓuÓƒ:ô ]\ærº¿¿>>އÍåóËË‹óŽé¿þ¯þ»_½_ß¼—ò*µqµÛmbC1ñ'OÏŸ~þ˜“\½y³íWHºÏ•¸OÝ0f9_­¾»zöÙã‹§Û‹UÛ4áý›ë†Ë$¸¿;žöùpw—«`c7ûýûÿíúË/¿Ï#'>M |ÿ'ßG•»›ë&¹HɳÔâ1F7T` ‘ £¨Ú¦'àÃñ!uÑ­VjŒY[~öìÓ/¾üÁãçöé;,¾i‘‘[¿=Ôø;?þÔ7¡u5“Pæq\'üæ«ãoþþ¿ú»ÿÚ:0—)›y?([×­r1«Ú”ùhÜT…†®M]?æ¹Î¾j»ívsœoúË'›ó*¡µMK77ïãñT„0ôÍnuΩmúa»Ù͹ü¶Ë~ò“‡“ßìó_ýåϯÞÞ2bhb×·Ó¤% ňèèŠlhEgpN=‹›RÛÓTœ`'™ŠÂAƒ¸Çëw÷m2&€R[¢i·뇶kÛ®ÇÑJ¶ZQJ-fŸ=)Y-yÊs¥ØtWY«G‚¶µ…°OcÔ%µ „9Œcn}µZCaÕJ:M)4 Л–sƒ!1¸W@AT« RÓ©³ŽcF›·mjC§`¡‰€TóìbjV¢µMçÇûœbÏIÅ3A* ±M-E™i‰Ð̳(‚j #“š«Q)º¹£Š0"•"R]MúžX!æ\´ù¸ÿDU1ç˜HU¦cmû–"8x'Z ¤¶àæ¨Yõ¥gŽNfd98 ‹Q©TÈ0¢€sTCûø<_0¢¸HÀˆƒ.fC$3‰1˜BW@0‡¢UD¢»´‰CrDR³Z¬mš9O92€.§g73Š #BÉ,†F\ «€i%tPl}i —BL5f­Î 1a‘Š¢æžcb‰Ì¡¥*ÓG¤¡x›’ÛÒ; Hhµïb+Å(WSgS4Ž ¦Žø‘éo` nÀ$Š ¤ŠH€ Llf(pª’)jÛ³Vv¤2Õ% ‘[w^:rŒ L)2©Xž¦Ã~»;ŒûûI1®×ûßÕÜÍ÷ïï~ã§ÿÛæúý‡ív5N¢ê5OëM°È38lŸ>Ùœmc Û›ëñ4Qe„ÈSì©I-?ï9ÐnsÖÇnžæ9—O>{ò·?ûåÃññ›÷×oßÜ mÃMZãh«Õp{ÍŒmÇ9O9k¹i6]·›ò©z=³®°ÕÙ_Ýî¥L‡q<»xzÓ˜™‡Äë³³ÃÍ0tëáìÑn>ÕÛÛ»o¿þê]JÏv—m>9;ûtšNwWWûc¾¹›Ï.všëk½}xG·û›aÜîºÇwäZ¦×ãf–øêÕáÝÕífÝ®‡Õù£ ÷rñh{õîêéù9D.êO¿8ÿêëö?þÿ"w‰þ³ÿü?í#?<äÍöLÅ¿ùåW]E ‰9H•BŠ‹nhêfz:TØTkDX ý§‹‹óíÙ¥cxsuÔ$¹³¹‡@ûÃÉ*FîЊ;¤®¯ª1t}ÓxÍÇ“®Ökbn8žmz7ÔBŒÇÚ*²€ä›6 †SŠ©ïûh<^_>9{ôøò›o¾ÍeüÁ“‹O¿Ü¡û¬æÃ8Ÿn¯nÙÛøÓO?9Û À1 Ãp9 µæ¿ø‹¿}{5¯Î>‰M$bŒ) YIMÔœçV¼PÑÁÌÌ OÇ“©™¡S0T ±éÛz* «Š.á–’³©ÓÔv™¢@Uçõ:an˜ÛU h‘½ï!Ö¬fd®™S×·ÕÜÌÚÕj8ÛÓèÆ€6N£1#‡à"®æfKEÔÌHe¶°ÜÏJŒL ÄUAD€1v}8f¢mlNÓZ+¢#£G&&6w˜¦¹d‰›†9@­UL-8 3”RRlÌŒBÀY*ÌÓ !2QqçÔ¤¶Iµ–D4NÅ”Ü=ÔÚ¬;«–‹VqDcfèh)rј\Á]MÅM œÑ}‰ÕR`.µbà*•\Ñ Ày‘7‚-ö‡…`¦ªmÛ:˜˜  »Ç@FK•IQuiÑ@tòEï*ʼ|ì" ÆÄMr èË×½»×*cžeI )…@¦–óDH!¢*!.œK­Ö¶äôßnM–lL¤ !º™ˆ@$tC7͈0’›““Æ‚ªa$t!:rpàÀªöñPbVk]®jüØ©ƒ@¡T-¢¶¨4À\—»aÁ5ñGe&ˆ ‚ q¬U‡iÊ«®%ªáòübž\ PÛÄ’mëSä´’˜µm+µ²ãüáOÇ|óÿçŸíoÃ~?M —Ÿ=9>Ÿ_>Îe"Âqž»>Íu ¡!6Âp,¥1îûÕz=(úñxZí6 f¹ãªo¹Ýrèöcàfµ" ½½¿#´—/¯Cèøƒ§© ×7¯ò(ÛÝÑJv Ì\Ììöö¶Ö²ßïcâr•\äþþ¡MÍa¤ÿôé_öíë«›Óɉþ _ïÎ7«Õþ˜‡a¸zÿ! Lã¡mìx|„ÝÅÅ æ¹Jï›–BiÛ¦Kqh“…ïÞío^ßÄ€»M#Ë>ö»¡ëç’åp_Ÿ}ò¼Û\0ŒMÞ¾{'úôÓ/ÔNó$))8³u]¯jÌ´[õ›¦}9¾|¸{J,ÖLä4rû¶dº½»éÆà¯?¼wlÁÕæ‡ñê°ÿã?þÝËç».Rq®õÅëã×?û»ÝºÿÇÿî¿y¬eËon?|ýË¿[÷»ïÿä7ïß—Q§®-zøÕK]õ±YûÍý1gÓR‡vKàRòǤEŸ}ö TÛÛý!†è¸Kñ‡?ø|®÷楖ùþþ¾i7w~ÿð0~û훦[‹ÿuºÖ‰²‹óaØô/~uªµ´íK]–c&z8‚åuç»óÇÃj;)]˜g5¡®éK.© @LÄ}רÒo¥ *UJj’ƒd Zkêál³Z¬:3§®†U2+„Èó<·m;ÎóçßÿRL¦ÃûÀsÎÕ²eœÛ!î?|;÷.¹T!‚cl|š=g¬Šä’Å0[ÚID‘kÍMß;xŠ-Ljcjº˜e6ŶªdwÈâ8OÇS×6Ųsdè]ÉXri‡¸„Ü j×!÷Íaœû!^S-™¯7ífN§ù4ÕÛÛ)&†@˜!%’ s©±‹ZuH}q™§9Æ–Êû°ZÕ2™Ò<àPÁc ±TÑI]<´¸ ìé4˜nWƒ«ÔZÝ82Ï&¸# ˆVU3´Du¡¸Šš2" jš±€+`Q-&ÊÜÄDÌ®VWÀ’>dfQud6·ØÜM Pª/ˆƒå8¥ ðë•/˜ÃbY"JRÍ`y1@âÐæ¹;#«›ˆ1 #s×-%["ª 1$S50W7r# ¯R#Æi,HLË!Ü)ðòæ332öêFÔižë’¬Y CŒTe"2 K©ÄÑÁÕ”)2E7ȵ¤È±]Ч X0Q@@!ˆTgFØÅTŠ,!«¥æ*ÌXJ1`3 ˆT@t⺾e’ÀRçÉÁB?l7g³è#¡Ëååy®wÀ”ç‰'Dö,¹Ì*9¦nžäêÃ]…‰‹Ùi²‡«Ûßûƒ Û~†Í>º,¥ÊxšËdùdMŒRçÛ—¯›&¶C«Fׯ¯ó<&ÆaÕžºd*MÃ^¿Ÿ§0ô+_ñû÷ï¡áh:ŽD|Øï¯¯ooïoœ@r~rvÖr:އ¨IÃþîîð°¿x¼9}ê·+l_’w&áÃý]>MúÂúæõ‹Uû÷º}´z÷p*ÙO§S¤F]úÍêá8þÖ£Ü×þç¿@1˜rêWMÑòÍ×/~ñ˯îoOÃj՜̊X9Ü”¿÷÷w¢Þzˆ¡ï7eÄý›÷ Í(6"aÝ÷Ïž}2¬ÚûÛ÷§S<Û\–:"@ I²“«ª÷ÛÑó\˜ Ô™â,ÎóôÙgÏùíõ8Ž777fB‘ÉêÙţϿøìúæýþº»»›ŒˆcpE­M»kyñæz7ë0lÚ®7+^&Äb?¬pÿp4é Q¥†D€(âyÎDDX1†ÐľMýÐ!ÕÛû° !uî16mž¦@~šgG§`_ÿêÛRJàxwso³Üß|hVqÉêñt#Gb6P"xóöÕæl5ï».=yþtšë‡w}f>‘¬%UŸ\Š–|<ùôYžešÊB¿Ú¬7Û¬¿ IDATVÌ¢\b ÄÈA,Γz—Óîɹ ?n‡Õ]>Ý]¬no®3i?t~¿w€âêà)'7G"Œœbl˜µŒæ›¾–ªµÄM{v¾ãÀ!ÀDˆEŠ­†uÞ37 ’U†ZG «ýÝ-`ˆ¡qœ2ˆ®ŽÀðíÍx*Ô®» õáx ØÇ\Å×Û6uíqš­ITòiž=W_­F8G‡c>5MêZ Çyïb×w¢•"³U%dŽÑHE+Óòý .Àò|j’CÕbDà„ª¢6@GÔ&R`ˆDê jH¬ DÁŠƒJ˜È~Yˆ ¢¸«¡ S£êÕ4¤®æ$Uム†ǽHED @jNd€îLQÕ‘‰QEÈk2W#Ž`‚Pû>åRÆÓ(´‘Ýh*bîÈqÊ¥ ÉÌ´BÉÕÝÕ<1—¬ R‘CçY¨2":˜ä”¢;¢T@[¶YÜB St¯Ó(m—NãÉÚ&6M¥Èâ¤WPˆ‰ yétJ]´kâ…ˆ–,o€ ¦ LÊ&æ°ÔÕ£Vs§˜Bv•BdUD²­ú!HUd7ÖÙJÀ¨ E*¹·mbŠÓ1ßÝŽMìÑ=FöýýíýA6Ã65ý‡Û›wWï?¼mËô ¬â°¦ùµžoùÆPë,¡c¬)‚LŽ~¿¿cŽ›õfÕ·›³õÃtïî¼JP>kךO?ÿò?þáÿGÕ{5Ù–gzi>³Ì¶eNÓèf7Hº‘F£+Q¡¹…îúR(Ò„ŒáÌ’@³mŽ©cªj»e>“™ºXôjWìµ×g2ó}ž·ï^qNUvÛëÕf}Ç×v!61›RsŽWëuìã¦ÙnWâ=¯»øù/‡éå‡)ª¢/^<5r›Íö§?ùâÉ‹g±wÛýîáÙÀ›¨obÓ÷¿ü—~ùÕ¯ i ‘»¾yþb{û¼†á—ÿô2yÓ¬ÖûÝjçi®¥ÔÙÕê}Ø_]Õ"Çãår\ »«[Hsºœ©i¦\ ôt¾üÅÿñŸ~ú³O™¦:Qµó0Í_}5þúëÐ ™=ÔšhÕµ„fz}½“Z 1åÌD„®;ž§¯~õýåòðúÍ]ÕÆ²&BñžbÓl·»ó0˜ ‚U“²Û¬6›!¯6; ÿøøB¸¹¹%jD ¢¥È.x_²xLÅD*;tŽS•¢•U˜ÌŒDHU €KUï¼Öb‚ö‘C$ˆ !xQBð*U™©cF‡¦ˆÈEªŠ ƒI€’+¡9Š*ÂÌR«.Îg"@40ö,U–>-‚ˆÔZ–±Îe²“˜K-¦¤VˆŒ9˜2aðÁ°.][ujÕ9ŒÑ!¥T‰Œ ,OÐTk©f@¢º H½wf˜æ¼ ˜ª*9rµV@«Ebã–fíR£grܰ-úyž‰ÉyB4@@¤’­¤êØ™¢û—oþy.SVS(èðI{]/hBŠ‚ 层—Õ*´±†óãcV„šêþææ<&˜FeGåý‡×÷÷ÓXoo¯ …¦ïÏ—®Rüöj—jbO^”‘»®»\ ñ“ýv·Ù¦Ó¹õíéýXDO—a囜¥ëÂþjUKvÄ:NÔSÛuçãÑ»°Z­ÖöþÃ}¿j6Wk²åüðú~gdxÿþ­ÕTUAí‡_ÿËTìf»||„WXu¾»{«Õ©bãâþz·ºZŸ˜§a` û{9<Þxúô³Ýõ'û~wóðæ{>K·íF˜[mo¯o«U¬™×«õñx®UÇØôëÕxJ¥Î³tufúÏóí¯¾úþßüëŸÜþÑ®mãöz[Tú¾¯Õ”ñý‡‡«Onj×w›Õz<Ÿš®cæR¦woÙ÷ÂçÚ—¯î¾þõËóé¼ÜtAt¸ŒmÏìÈ¡g‡>øÓqd‚ͺo»îúæ&•z< ‡ããœ+ —Ë´Zuʨ¾ Ì!4­_oºúLJó4 ®ëþÉí?þñªë~ñ‹&öoïîΗ´Ýî§á^̈1³d·ÝïBÇqÜ=Ùû¦~õ„}„¤ õÃû—&§¶!föÞ{òyžñ÷¿<æ¯õòõÝHîj½_¹ÈçÃØ4]­µkAÕÐ2;h@ Ëúª ‘Ôš³æœE…œ‹ëå<ŽSªyãݺwΛws·Ô06¨Ml˜ýj{cüZmJŽ{$-)ñf½C 4Ï—ÓÙ3Œ2›N—ózÛûò\š®óm$ÇÓåjdªµxÏf&ÕÀ(ç¼ê×!øœ³”J N¼ä\=33sÓ4%ó<3Ljý4KÀ¦~}7¥1´}Oà²oñx~äЋúÓˆùÕ¸î|Û¸šJ¿m+€™Ÿ.Û¬{&À¨HÞÔƒQ͆DŽ<^Æ)6U¡ˆTÕ¶Y‰XU3ôUÁ µ¨w J©hF.øè ³‘xïUIÕ)ú¥¿Š¥.ú-5f/Z *˜O ÄÔ;],еJ•‚PEŒ9”RDêB.#¨„¼\#L-x4‡l µTï})…‰šÖ MÓäZ ²Z !*Tf®u±¥“-ó KYæ·y( $rjÎ@½£4§$¹i(@žSŒ¾QEç‚÷<:1©(¥T5böþ£øÁŒ£€äTͤiˆÝÒÉ0È9^æV™‘èã[Œ °Øƒ™|Ó¸EÒ ˆŽ«3uĬ033k-µêŒLº¸Ù1@U”Z¡ÖRE1Ƹ´DKl<Š €©šˆŠ¹ÈçÁÊ‘€M/÷ôÊV±›†i*sÓ¶«õ*i³oŸ<¿¹ÿð:àªVHÃøüé‹ÕvûîáæZ29nb£‡1„&l·»þôê’çD†î>xrJàºà*\ï¶0ç)ôm.U‰ÛÍ$Õ¼vm+exóÃ]Ûn]Û4ýM ‘k©d6œ.µP¿Ù|Tbnº–‚)ê|}}sx˜Ï3<|ó¶q²jñ³«nØtSÁãñžæB¯ïî^=ÜalÚ?ú£?~ùÕwù2ÍS×s³Þ·0uÜ ãI ?ÜOSÊ·Ÿ>ëV]Øö½ÇÝvûÿø×^ü¾„¸jÎÇ##Ð4åZµ ѳ°ëÛµ2ÌPëp0RÉ*Gzýêþúiª2̷ϯ—MÜ o¯Ÿ0sÍ9§¹ªß­VIëù|>‡ËåB³ts¼÷ÈìûÆ…¦éÄçb޵áÕñ  ˜›Æ\ç’@E‡aPÓ\Êv…ˆÃé䨙A'B?fl»† ¦qTÕœKÆáòýù4\_ߌSëC{¬ÕdöÁ³öë¹Ø´½–9W½ÿp>OWW»Ÿ>S‡wÿôú—¿üÛOžýøöÉó)›Æ§qÀr‰–¯vWÛý~g·Ú^³s’ó0¿üùÏÿØàÛ7w§ç7Í?ùì4êßýÍWœK1­Ñcð‹¦MƒsVU«˜š.€°RëGÓ¢h&Tl‚'eÞ\]… ›«þÉÓí8Ö›®i#'smºm¥vš“únHj­Mˆ=¯6HmŒmàaH‡ãRí{ëw¡¤ ]שjž§À,%Ç>xÇN‘U‰ ›¦efDv¬Ód¦µ€†ÀK¿"†¸À/K­f "låj¿:ÞÏ÷i;Lec×DZè<¤uÛ…Ü4@æÆ§"Õ21ôÀM„œf­>çXLsm0–j†¾T‚"䪪–¢9 òÇS³©2:´êf2td`TÅÌ”HgMj`@ ÎyF'Š¥V"" ¿Ñ‡1‘-«|)ÅO¤H†Ì\kYÒŽ ¬ÆÐú\ç\G0`ê‚ ÈG•.rJMÓ,æ€Ñ­@@S&¤ZÓÿ»Ô.òó¥W€,ªÅ ³((ƒS53Ç5çjÕ¦\›™)ÍÅL‰ÑTŠÖ ÄDd9%gλ¼cÆRJ‘ÌÌHàsžUÅ{&Bòª²äÿ–./{’ špKfXw‚ˆ"8ï• ÐÚà Ô¡C´¬VÊœÍÁG¨"Fç"Z’²$¿B9'"̹¨.‚H%r‹ŠY¬"¨'çÇ®ñ€KX á25çÏž=i^­b-¨‰¤ÓøðÛW©Úª[«”q'&ï*m×ëÝMŸ`¾\ÆwoP_òøê‡Wë6«}š2 †vû­š‡éáþ^Õ¦iÞmwišÙ‡ÕnÛ®WÀkžÛšõÖȺUss³Kó@@Ñ5]ïƒi}öäI×·Ud¸ÌÓ”¼çUáüx:ŽYø|¼h¾ —ÍÕÕöæ¶]ïZßtkóäiªu³Ú9ŠÃy||÷Nj.¢ÝzãBÜ_]¯úT9=k­äÐÀæ4«:ƒ˜¦òðî=·m#&Ã0xO¡ )MçÇ#ÅEË0\x¼äéRh»ÙóÍ7Re³Ús@³¡(bU›hªy»]½~ùýëï¾uÜÜ^Òorù¿þ÷ÿÓüù‹›ýíS5xxxpÞß?T­ìPÍR*¿þ——hò?ýÏÿ®i`šR×ïˆãáñÐ4Œ&ÄŒ.¼ýþ‡ÃñküfBd£Ô¨Ö\Ê<ç&­Ej-¹ ‘S¼{ó¾_µ×7»ãã9Ϙf ±mï}¸È¥îOïß¾ýìóÅ6t«5sRÁì‡ï~¸Úï^<ûd.Àh¥Öà™ØÇíÕ»Pª:+*šR!vè¬í30ï8¥y³Yg)È4ç:¦JÎ/¸Uq,Äu½êDešgçÈtÈÃ\† ×›¦m)Í3!˜ÎŒØF×¶\m -sÃݦ/>°U(cM—Y$µM|4Àª´L˜iJ4Í– Ͱ#@3#4Çl ¥T@$ò*¢ªRE³¨ ’µ]$ÔZ‹¨1~ä,P«ÖZ§eòÐL ÌLÙÀ¼'fP«Eêœ3éÂs^Ü/H("Ìd&ÄùÏH€Hµ‚ ª*‚ç¼sÁ³iVÜò_! þfÒŸ´ !(¨š"2ªÉpGÕåà¨"™¤Z-%8n›ˆ°HU ?™9&B5-€€@¬UÄ1‹ŠZÍ¥Ššˆ.Ýï¦mŒ Cœ†%‹€Æª@̵j%r"†èÍp j¨*±« ÎѼ÷ˆDDH&’ Š&Yþ–ó‰UUëÊ#ÂEMoÈ`‹¯¦¨ œ¦à=‘3$óÑć—jš!¡¨”>ÈXåRòår9 —Ããñ¡¨¬ºÍ—Ÿ}þáþ-û bMhÈá<›m·Ý­Ö»ÕWÿüS,%Åàs®Ó˜D«T¹¾½Î%§±Ô¢sÉsJýje¦]߉JÎÙ9×vM­Õy÷áþÑņjž¥æããÃpšÆËüáþ~žë4Ìi¥”qîŽ#"æœOÇt>NiLZm»Ûvmûõ0k17剘ö»«C·áRiœTk~xx|õÛù<ÄwW·±Y­·U MÌšUÊxÀ\ͳ§Ïš¦éšÛNµJž¯oöW7ûëë}¿jUu{µaÆÇ·÷Ñ5ÈÄ„)O¹Êáá"¥vë 5M“§@šŸ>ßyçqê7ÿò}öù“ŸÿüË·o^å*i®¦pš.ãœS2JIš¶†sI‰£sPåÅíæÙçŸ ã!M—èšZÔ9FB@k»¦i£ˆJÕ¥qÄŽ·Û½ô}£µŠ@Ó4·On‘Œ].—aJ¥HpnÌS*s .FM/³LÃàÈå"çËåÍÝÝááhb×7»Õ*ÏÇf½Ö*ãå4O§ï¾ýúÿï¿›NÏ(«ŠxÏëV-M»+¾z²¿œÓñÎç)—Ò£GÀ¯¿þöïþö+vîÏÿí5Nãø?ÿú4–Ãa.Ô:?|x›¶iú_ÿê—išV«ØöÄc*C\Æ?šæqU¾i£^DAÝ»»Çyi»Œú©!¹’'‘Ä iÊŽÂû÷žö©L‚o¤””Æá|! *¥i›¹\¾øÉÓùRÎYïžlv«íþ*͉Ýáý›’Š’óìœ#d0DƒÅ &¦S®Y0€‚”Jf`¹ëün»™¦ÙÀš6–\ÇZÕÄ©Hß“HE¦ì½w!VÃÓ¥$³,–»&’øéx"Ì¥ ‚ÓEÝ Ì„• Š‚Úò,™!ºà™™™ˆ‘´ZJLÖ%ý«Ëd9-H4ç „= ²SDU­R™Ù#2ñr¨‡e ¨Öòî˜}T""1!Éb]64@Dfr„¨RlÙSÐ1{ÏKñJÕTŒÍÔyÇÀ"šEŠ.¢OCÏHL †VM¥j­â²C6€ºÜ1DÉØ¡hÕuVPu¿Àr_B•ÂO~ïÇbÙ9„‡‡ï_>Ü櫾{ñôêÕ«†ÀÉ<‡•;áüøöáÛo^>}º?ÛÑy2©€L©Nis™Zß$«êé2¬Öýª]ù&6]7cœ¹í;E`„®éèúZÍ  Í< §ãT†WN$—’îïMcÛ­˜i³éÔr×hÓó|Ìiœ%8—æìœ¡¿ ñz»¿?ÆID û¡i™àù§·¿þú`Š›Î]7¯OGDW+œŽpì#&9³§,uÊ…ûnCèW›µARÓåB ¦ZKJSʳ÷¡iº÷wïs”¹‹ì}³î{1ý€‡$%粡ˆI•)•< ¬Ããã‡Ú?û£?ü³ÿúO6ë¾ÌƒÉõ%Íbä˜ú>d1v+æi~ç½cÇ€ˆH̬93;ï"ŠØå2ÄØäRÁ‡Ð4ZkN¹_­K^ ZBF÷÷*–3Ö*`qžæiœçU¿]†‹Däp>u]$ç§y>ŸîÛ~"êË0{¢èƒUÒâ>ÿìw¯nns•í¾Oã!„^ €`JZµ6Íj³^}óÍWŒÝþÉ.D_j2kž=¿…t<â#:zz³ÿäíýa»ëcãp§»7oÁÈ ç¹”,¯_ß9žÆúÅܶÛi85MSj5PB­H`jä™É«‚ ÌøñÖojK#ç\‹t±Ñ²Œ…83È©zßyßxï‰dž³ÈhÄŠhýj='UË—Ë…™éÝ›w!>»¾Þ¾}÷‹¿ùµÇ~½__¯¢ó)åØ6«Uû¦BN)v-jÅ2×¶‰9evˆdïßß»K²<*š€)€/XüÕj1°ªŠdÇXRÎYÛ.6¢£RÒpJÃä‹uš>ZÑ:+Úýãè}©Õ9ÂRCç(¥l@¥Î¦|g&¥Tffˆ^ ªØ"4ƒRfï}ß7@ÍRjB“%s….:0ÓÜÄV4{¿A–±h5STCµê<—’B¤ì…¥ !ª-ˆ@ç\­Õ€ÀýšÕZ£G¨Âr¼]Ê8jµR¤‰ K­ª¨V ÌÄ“4@qd†àJÉ ˆ è˜Ì™¼ Ëéâ €ZÐUT湪IëÑH–Š?€u],D¢ ±™1*;rDfâC(¥ 1ƒª’,¤j¢Z˜ˆqáÙâ"–¥Û·´—Qn–cctRI؉Hp"Bˆ"ŠˆÌ켩‰š‚™Ñ’Y3 ]x¥HŽÈ(Ò<%·|ÒÇ ‹0±a¿ßN'ï’>}Ú¬»&çóx÷òU·jÓµd$Šðòõ;öëùxÚ¬wyv'Žn³»C$ èµõ”çHm¼+1¸¶ .„ïøÁ…&ƶ-¦‡Ë‰Ñ‡1Õë§{@¹\.77×ÃçùBäŽÇGïÜz÷WHÝ_oL‹ç˜Ò¼Wbô¼»½6{dt«nˆWÛ®ë"(59§>¶77»ãû÷i8o;bóΫižÓépÌã´Û^÷}ƒdÃx2«@bf—ËårO»«‹ÎTøþñx:‡ÐŽ»ÝþæÉ>´.•”KýúW—’ WnB'A˜òå÷o§‹”Ò6ðÃ׿œóÜÄp}sµ½ÚŠÀV߸¾sÍÊU¢˜±‡K…>eñBà¶õ9ϵ 1£ ”*-ù&çHÕ³gô®ÕJ¹–\Õ…5§y.! ÷Î7Tª"pUs@ ÆÎ©IJ“c&‚”§Cð1²HQ-ŒDªšà²,¢iYʬ*ª£GŒ)åRJŒÁXÓ„Rf"–lU*9Ö’™ @UícÙ ‰œ}œ‹"R‘E™²hËLÅ;p¬) ’3©`‹´ Ô\ˆˆ cÃŽØ¡©Ô߰ꉱ(1 ä„(”œÚÎ/F/}Ϊ ìP*:çéãU†Ô9 f¢޹V£Ô)ü8ÒJĵŠ÷Þ@ˆtyO™XDj­‹ÏNDTÍ9'Å‹*p®f&ĆΊT".ZEÅL½¹&ºcNZ+5QѢΩ*ì8Dšç4u¿Í°Áow„¯¿ý>FFÃñœª*’¥¤§ƒXÕ¦Oç“—ßýò|z<Æ­¾S~÷ît<šÒýý!Íæ„ˆfDÏ\kDPj!RϸÛ]e-’çËá0/>ûQìºý~¯UwbjfÛÝÆ³3®é›–ËããýgŸ~©`ßÿêÇó8!ðz·‘˜c×Ó8)LAd¾ŒˆÐM«®9 6Ñ;çß¼;ð‡÷ßýðM.n½ ¾I¹¦šŒ1•éîîû'Ï_Äfç]L)ð•<¼~3–Ë»û²¯»ÝÕõœÅ5Úõ™™ðþé“~ݰǽ~Q´Ò0Žá„{·r]Ó Ò<×óa¬Ø€ký_þ§¿ÿöý¯ö“ÿìO~ÿÿað"“o“§7oï?¤yRu5YJyšFïýóçÏÆybŸ«º’Q’¬úööÉ:Oåáápx<ŽÃÛÖ±SÑ’ó<çØ´!8f7Ï#3« 1É‹ûqJÓPÔBl»ÛÛ›W¯ßzòM!ç9$ ïVÑ9(©n·«\ 6xûd}>Ûfóì٭Ѭ55Û5šOŸÞêR*ÎòôÙó›ÛÕ³gÏç”D¤v8Á0ç‡÷ðô9åüX‹s¥íCÎiqg#ù¿ø‹ÿ×ý7oß=:· !Nã˜Çœç\Í¢k }ð­y¿&‡‚ÄŽSv.—âcÈsMƒŽ¤Š”â×|¶:q$v€FŽ‚µM4“œ&"w}µ?]·ªEó4UŠ‹€ È¦T™±Ôa‘ƒæ9{ïcUó¾Y>@$‹d&‡àS*ÁcÇgS&FÄ=:牬֊`f²l¨ËšLˆX¥Ú²Œ©!“åRú7àb‹T33óUˆK­`B HÆ ‘HE¤Ô®oÈ5îÿ³ú ‚ "¿øÕËÎù2§¢ ŒÁS)À—á)Pè=7^ÕËYÚn“†ñ/ÿýÞÞ:rÝp™šMhÍÆãapΙͫuos ìŸ?{òù—ÏgK¯_Þ9þĹPÍîÞ½ßî¯c·îÚˆ*w¯^[¾8v»«Óqž³KiLs žÆtiÛ¸ß{r ŽC¿Z¯7]ׯÆé@‡ã©mZòÍxÉÃãó&UB× ÔîúörÿÒ*<{ödžµ¢Î?<œ‹&Qa…i¼Œ—Õz³S$ö 6Í´˜×›ëÝ~'iœç¹®šÆyò-Ãc·¾"„4­>¬×"ùáÃ}tZ‹<Þ-·.çT]îYÝ_Òéïßó%ÿþÏ¿ˆMüôG¿7ÕôæÝË»·ï¿ýê•sÍzÛæ*MDÒ¼Ôñ«^ÄAE=Rº*³i(5±K±µ” @­®š@ĥʞMb–óÍíf½q%ªOã¹ ºØ…bpÆ€LX@@p¤hmWácd•ÉFGflÜ D"Z“94Ôa&t¦%äsQDö†¨iVï03¢òr.`ì€I¦d@š]T©ÎaÎ¥Ö\…ü2ße¶ *Ñ‘¢•ªUÌ*;10TQ"3™ÒÄÁ³Ú‚j6"r!ˆ¤VD„I–î5GW‹–ªµ*33 ± U´*hQ`J–<šŠ*`® VUœ Côd=;çT+•"NU…Ì–Š­cOD΃XEFB#BFT"V0EÏN¤š “_JRºÀ‘ˆ¨‚*fEU(„â½sKÏ ˜©Ô:Ï© ÑTÛy.žÙ!ƒˆ¢š"Tb ÎñBÀøí°´2À¬ˆòbš@ÁÙ«Ô®ë Ép*¹¤BЦèÛæáá2 ¹‰+µê#:ß/'4g… 'ûþÇÿþOþËK%‹ ¤ZÏçiÕ¯¤–á2çóýû÷—ó‘x‰Æ ]†AU§qLó\Ewû«âj³aB4˜ÆyÓp™rJ󔹨ô†árJ*!4C:7ÁCöaÕ®ºóù|ÿîþtΥ̎\òt™ˆxž‹ç°ß]«Q):Oóx>E”Uo_< ëUšO>z|wÜlú›'W¡õã0€Õ<ç‡'vw»µ¦¬9aI0ƒcóCl(Òóχó8ɃÅU<Oûýæí‡ïî^~{W&¼º~"ªsK-).¢×Ããqyà`àÀ¾üü“?ûo~z¸?~õ«¯?|80…åÙÅn®÷Ž`ÊslÂf»I)™É0\Æq ©VJ=Îg"/Ó4oOŸíWkÿöí›ûLn³]µ]3MiN¶Zí™cÛwUç‡ïh·k"—ãý‰]óâw~÷öG_no^lbC˜†CϧÃ%pcªÎÁÓ/œ§RR®BäWÛëõî“Õö Ù™ññ˜¾ÿîÃé„.ôMÛMØìn½oUÑûÖ@¤$öì›Fd@f13躵:$“å}Qωm'‚ Ý\Ýùá7›ö+£xODD(&f¨‚KsûcOCÕH?š è#èµ"#:0R0‚%'¦ÊÄ @Ä‚¸  мã ç<3‚y\ }ʈŽÕRC¿ÝácCšv}·î[©ªåÂKàZÇË…\ðìn®÷ ¦äѹvÓ—‰ÑY•íͶ[‡aLMÓhÉešÓtŽM‹àì»^½üá‘? —^îïCšJ†áèB`ßTC$¾º¹jWmJÉûúèçTûõJþäÅmI—ûo§ã§ŸþHRÝ_ícã?Ü¿[mVªæ\; ùp4ó<={vs{»{öâé§?zqss= ãétÇ!ø®ë6¹ˆª1 ›@Ȉ:Ïóp¦aF|<_ ‚÷-38×ôýö‡WßÍ“lÖÏÛ¾}óúM™`µê›¾õmgŠ>›—ß J†Û'OO§Cëñ2Ÿ›  ÇaR«ëÝæúúÉe˜Ðêp¼ßîzÚï¾}Ú´¡[UÍäXÔJ™˜ÚÕªiúq”®ßv«û¸Z¯ÇËEJ“¶u5çyÆËipηýêñt0›/§DâÛàºfÕ¢Þk…¨¤yš§,5õ+Þ_w»]¿Û®ÛÕ.úPUhwu{ótM(5Íy¾tMçq{¾×ñ47´¾kÖì*’µ}ïC_ksZm6ìœ÷ˆ±sÁ{Çì}øôÅsïI4ow}ß(xBïœsÄdf´¿Z…hÌDèŽÇ:gÏmã\‹DkvÄMK͆.e±qžT)ð*2\’Î9ÏL€8WeïÉ÷¬jÁGBN©xœóU…=ñ¢X1•%ç%ÌØ4¾i¼ Ã¥ëâj&êÒa5Ab3VÀTfö™ªT#b"&tŽ.+ `Í9Ø!ªc‡È¼lP`€ªfRÁ¹{âÇ TäàQke$çübFGpK5»”ÂÌj@äj]‚SH`D¼X$Íð·#0 CˆÑìcºj…Z@Œœ+µØœªw)tM ¦iž™1¨Ž@T\44Bc"4$p„aÁ!~ôÔ*¦¸ýq¹ ªÂÂARUEB rDnAQ# 2WQD1«DŒÀ"êØ©š©9ï'&GÄ€Œè/F: å@¥Öÿßð›˜Y0}~½{~}íÈÏs2TZ®Ò¥F&€'Ÿì1Àx8æ”\Ë\š“cŽ9blùx˜ú¾ó|AP&@ÚWo>LcM©”Z@˜•:ºãÃãf½iÛ¦m»?øƒŸ¬7’0Å#˜9vã4—’nž\ÇЀU‚‚ Ñ?{ú´ë;1íV}ÛµìY5Y-÷îÛ§ŸÜn6yLƒh•Ín[Æ1)@Ó7ÿôOÿ§¡–t:†éRkÙì7®ñ.ÒÝÝK‡öí¯ýWÿá¯^¿ºSqp¹œ>¼]wÍÝû·¹ÖçŸ~:_rÉ ˆ«M#\]oб4]WU~ô;Ÿß>}z÷tëÖ{o¢9 ¿ÿå~ò³/¼Ó¶iÚ¾ý½ßý±#ÚÞ;ïÚv•K½¿?°ˆ —Ë8œKͦÀØê§Ÿn?ùt…Çi^õ[3 ¨”|:> Âîj+ª§óðáýãiã38žÏU$6-;¨ŽÛ;»{õ¶d%vÈpóä:gy|¼ Л».—é“O^©ã4]=yâ[†ãn½W5v8O¨Åõ Ùç£NÃõͳõf{9VÛ]õëÆ^ÿëï¿}uuµ#”ý~·ZõÓ4çáB25=Súê«ï]äõ¦Ÿ&ÙÞ\ÖZ3ô]<›YUPmrB·n hš¦yTr×{¤L¬D˜g‘ªäxš¦)<žwÛfLCE˜çñáýC».ÀÓOÜýû»átÊM¤nEûë~µêæyn‚±ÍæJÄW)Þ¦}š@•óêˆÇ‡C™s)' !vǨÆR‹sÎ!qÊ‚säHÍVë‚ÌiT$P•l Däªbß÷ì¼ä\†S&ŠYÒáñƒ‹IhÊœ2—’ ±@H‰æ\lÒe”š´ónÌØr®¥æYD€8%É’›Ö!8rÓ4«ªúè}ð¦&¥”,%£*ª`)jL RKÎä(D¿èzDÄ1ÙG„)‚|äÔ£‚±g@(µ8þºÞ£Ù¶%»Î›&3—ÝæØ{ï¹ö¹*CB(@1ø ÔTˆ¡©žzêÈ@)ˆƒ% ^½zîÚã¶[63çœj¬[E‘’N{7ö>œ™cŽñ ỦИš¡:ÈÄα×EÃÏÎ?—™˜©Â’sn± QJi‰¯‚ª‰xv‹œ²lž™ÙLV( €™‰Šc爳€Úç{¹áÒ%€Ä3sΙE‘‘0ŒstÎûàÐMCÇ”sbfbO„"bª ¢Jb  žù3¡̘‘WÕeÂýÞõO„ËÇÀ̲¨ª.‰0f4‘Lˆ4ω‰™‰T ™T…؈ÀÌ4‹ó^ÄLiy‹ €‰,µ KâLA ²óøŸ¿ lÊ ryµY5Çɳó쪲(Ë¢t¡¢âæé5‹’÷‡”ÇÍY¹ßÓ(–É9Úž—Àúx×ç±WJ\«õæ~¿ïû1Žyž%« ¤¹ï×Û —¬ÎÒ4:t9‹«üÔMŽaµrÌqèÉSðލµã©3%3D‹ŽmÕ6ëU#–‡4+HÕT9'yx<}úp{z¼õ®¸¸ÞPÉÏ^¿ˆ¹CÒÇÇLJ»‡ñ4Ò(ý4ïögÍæÅ«sŽQð鳫U¡d)ɇ·ŸJ¬êª•$›Ë¢,¶gguSÇiÆœš¦ZŸŸ»ªÌ)‰hÝÔ—_ºç/_ãŒbewGUó%t}bµœç¡{yÑü“¿üæêÉ:ƒÍÙ¾ÿî§8¤þ4uXmÚ"”·ö»]7Å™É㌈ýÐcFôÈž4ýéW×o¾z!*!T"Bó<8.Ì ïç÷nOÇîÇ~~ÿþ΀‰—«@H‰H»Å=‹¸àbŽ vz¸3ô¡^e„4d2Ѳ(ú~µlZ×íõå¤9Ž£d‹qp®Ú^> …'-›zLj:ÜÝþ¡ÍQ¿ÿîLj¥/ @ô)é¾ëþÍ¿ú7Ç»ýzßÛ·¿ù©ïçØ•grh$YŠ*°/Dpc»®“Œgëà½$¹ýôñññãÍÍE»íº<œŽ¦þtì™3â|}µÚݾûůç4?ìwqJéÑŲX; _¼ÙXß窠/_¼|ùåÛß½}ûãÇ” ÆE^E!MBe¬äŒ%FTs +¹8“ŠÖuEH&–¨ˆsHDU͈Y¢‚™d5¤YTUT58_xD0dö*æØ)#0‘¨Ä˜$sŠF†„ž€$ !à’Õ4Â焤‰x±Q3$!¦ –rv˜‚Cð¤–@ÑÀ‰m„jÆ’‚cCKK /‚¨;R[¸Éø¹ëܪٜ@ÅP,[FG99BbâPP“/ƒ¡eIE(˜Ä0rȪŽÙ±“¬fûG?Gù@„Ò\Ö¤Êíéˆ?ÿüçö+SpìÙ“Èsâªøªi·çX¦xqµŽc™S´³J– >”·Ç@X@S¸úææù›_>SÆß~ÿsÝl÷û!Móp:UÕv:ÈúìÉMUbÝ”··K’þé³+hVUÊ“Iˆó@ŽÑt·ïRÇåþнþòµ1±±#ûéþîÃÃõÕUB|<ôìðçZ׫¨äCýôòÍ—_>ùí÷?÷Á=ìö8Ùßþí¿›£†º)Úö4-$ȶj6Íz³ÙVÃØ8:í§yÈ9:ÏEÕz–ïo—ªyîÉ;EP"êúÓR[R7«iì‡îa呟=ß¾z}3Íý‡Û÷u»ÙlV—çÛÓáXn{çŠÓñ …CÄãñc¬ëaÓÔì9)Ë PÏ/Vûã.É®º² ¡hO§Ž½ça½'"žÆq® RNš¢„à›ªŽyV™½}Té)Çèhá’Mó©(ÙÄúqVÀq:Ū ëà;ç |qûð€,ׇ»9ºãîñôüåÅåùù‡woéêê©'®šs#®›Ê̆®§¹å7¿ü¦©›²†·?þ¶;u¡ºXÕk·Íf ô˜³x´³XÎ9’%Q×uf‚»¼zâÈÆ~jŠvÓ$$Qűǜ`J¯¿º@Jï~èäÕókd‹qû¡öµ@¡œÆáÍ×߬+\­×ï><¨Êœf#433T$èúÓNž 5êúy³Þîw·ºòEÚ¦ÄAÇN%MÐQ æ~lª¦-ª~ˆ.g»¦hƒ Á›cNc(<3ìv;ï¸)*2ç”ÒhÄâŠÊ ?OÙì<ÄÅx˜¦P°'X¤—º.eN`¦y/j¶`ÉΓ¦h* ÄœE˜Œ™–S̈Ÿ ¹T%‹+˜eY:L`± ô¹öÄ{çØ@€0Š˜Òçƒ Ä{‡ÑÀ}†»IYªW‰Ø1˜-',.ìM!€%Ž+"Yá]ûЖ(–#Žyrè%© 0¨" ~.Xb ÐSð> BÖ¼ ™™)ƒ!¡f0avÎy0\²Wäœ[ä¦Ï›i3Ǽ|Ûß/¢åês*k™ ¦ „¤`„´ÐÀÈù9)¡[šÛs3 ŽU…#/›3³¬È‘¢&ÃådS¤E£SEÄÿäða¸xÚnß½¿þìx:Ü}sVrÔ'&ÎiI¨“0»ªª7›³aìUFÇ!ǨB¾$ÜÔMJ³waš3­›–½óEá\(ç8´«ó"4Uy^­B² ªO?|ÿ.Îî»’ݾ}Û=×U£šº¢2Å'‚X–õöë¯ |~œz…x}½ýòÛg§©>IÐùÂYP‰ãȆã< ¢+« ªÞ{‰óœâìêzµÝ:B‘Q‡~ž¦¡()”JÞU­n/°i×·Ÿ— ˆæd:eœçØõó¦júÓP7WšÇo¿ý¹Õ“§—¡Z}ýÇê¶x¸{جVçç-*üôÃ;Ãü‹_¾š'Ý?Ƙäñaÿðpúî»}S¿øâËÃî>Žý<&3è»GÉÑÙ¶ÝUʲªÊátèÇDzDô¬0ʤ³lší§‡ã¾? ù²9)ß~[¯_|¸}ÜÆIOÇy÷á“Æôp8¢«¦±œt½­ãeµ]]îîÞ]¬VmÛ’wÓœ../ž¿ºzöêìÝÏ?y_·F,»}µ Åe9Nƒ30 1Y¿ÛßþôÃæâºlšÃqo)ú‚ëuËŽUµë»²,¦ñÔwû§×W) 9ïK^¯ëqèD"{ZoVÇÓnž¿ˆ&ŽÂg58æyØÿÓÿòÁ뤴(¬ã˜k·ßíû¾?NÝip\¨Ø©¦!ŽÃ¼t}.^‘§ÏŸ^?if±%øbž#"•¥Ë’TɧÇǾïꪊ£æ$ì¹ Æ!xï(´Eµ®ÈÈ 3*›U=ŒYµÜRUmËÎ9îç´¹xz~óªÙn†þ±Û Î}|ûv>ܧ±h7Õæ¼\59Í…cQpN®Ÿl½¯T Õ‰ Î2yœœ#€±ßß:³¯~ñê7ßþö7ÿða„Š"ŠHbC$DW°if$GÎØ{0‰lj³'7[t3q"½¯nëZ-¸àVm{ûvóâ%’/¸~óêæŸý‹öí·ÿ˜Æùâ,l/VÕºyþòuœ‘‰ß¿ûyžæÍjÝw‡ªíªÞn7ßü⛳‹‹'7O×ÛæíÏ߯ÖÕŸþÙ¯²¤ª ¿úó_ýão~û°Ô ÝlE´.¼ónSw˜ išÕªöÞÌ$&òÞ³wîñî® ¼n«yÌc/õ¶Ùu}Ì0O˜3‡P»S³òuƒÓ4¡©ÝBÕº3HÎ"ʞ궨[¾¼(Òñ˜Æ‰W­/ë ŠÎ ë²DUs¨•+œKRä0ÆŠBÙ9Ê) SžâØTARô«A³g–˜Ë¢‚¢fEòD4‹É<;F1Se5 ¶˜gÑŒàYA³d0’è ƒ÷PQÊ@YÔy"²œ-e[?œ) ¹“ª¡:5‹ª¢Ùiö""j†ÀÌL ‹XBÞyP@Ç(š Œ™˜É‘9ÈdFhÀžqÅæ”…È©q¶lfËU rLˆæStHÎTÐ8gó!² ¨¢"fÏÆHÈ9"FP³Ïû7P4ïÐ(QVP@#ÈfˆL¢FL‰ˆ3!’#¢fFCdçùsÀX1 q¨©-¡.CCÉ‚†’Èta_)"°ÓàÀ“%•~GŸ—À¨ü½ÑÊH¹0¼Z…?û“›ªtèò_ÿ‹?ÿ÷ÿá·§ƒµT<¿~¦QêªÜ\”Ã8ªAJiž‡qè™pžÇiJ…/rç|²qÊ£¡x¦(ºý4öúòÅ%» Ðǹ/+¿Ý®ë¦Íã8M]Ò™ƒ\?Ù>}z1 Ýý‡qN/^}åÊuÝ”®òß½ë»áìùeÎéíï>tû©?eÙ®×gü»ïêûñÐ=¤4¼xñt·¿ß¬6ŽÃñ4æ<‡¶]—aõïÿÏßœöÓ‡w¾ûîò4<}zÓ0÷Ãùú,IlWÍpÚ?Ü~"DçqUe³Ý¶ëõ0Œ9¦à‹…Óç‰ÐaUÕ›íÙãý§¶ UU @»jO§nê'_†ÓÐv§ª,ýâ6˜‡g7›¢2 Ü"ÎC<ìúÇÇ{fªªª(Š‹ËíãîN îïj6Œ'Õ ¯šõÙÕúÍ×"˜ó<ãÒ§ºè­Ó8÷ý8Íãª]mÖ븀ÔÙÈ©s¼Y¯ ï§¾'T3¡¬høäâ  ãÐ !KŠì´n‚ªJÖo§)šÒë7_\?yÚTÕOßÛ»Çyè=CS—M]¯Ö›SwLqJótqqæËP”…¤d@À˜%?>îŠÂŸŽÇ¢ô,ç±-ŠÒù‹g×ó¿üÝ÷ß“…¢ªsŠ¡(˜‘È™aN1„²\\¡@`UQ ݨ»£+˶Y­Ø® W_Ÿéþ¡ï3&jWÍ0åÃãè zöæÙ7ß|ó¯ÿ׿9=Þ]<©Ï/7M]5uyórgûøîãxÞÖ¹oß¿³9>yr5LýaÿPúû¿ÿ÷CïÞ}Ì)‹È‡w0ŒñpÏÏ/éxØoWÕþq§bf¶9[mÏϤ]UÞ¹Â0výaŸcܬÖóØ%;öìŠ~Jf,êæ¤XUUY‘妠Óæ‰Dmµnæ)ÅIMÈ£#Ôu[Ö“eÉ£ ŠbŠYUÎÏ bË“mšÊ³:1c"I”³’C`QHeéU­Èr¶qŠÈV7Î9[¼¡ËqÀärŽ’3xD Ç–•hN`8OS,Ê’‰ç92[Yz"TÐyojÁF ) öÄ9ÊÓHÔÙÔ„NÄr‚,P÷¤s ÙßL+=ª˜‚yç@rþƒŽ½˜‘@U  ï @Ae¡ó–\(²DC0L);Ç€ê‚gd$$ÕÈž ÉŒ @41;DvŽÙ#-%e¼tiŠ˜-¼#[ðËÉ ‹Ii)±F$%\L²ÄÄøûƒª2+€å¤Ž–ré”–žw&,BPP´eGL(šUÕI T @ Ðlñ™‚ÁÒƒˆÓ4}‚áª5—5 "µŽõÕ‹¯¿y¢(è,Ôô·ûó¿|ýåå“s3yóêÍ‹×Oºî“d# 38:2`"_x@èS7§iY|«JŠª‚M㦹¯ê5yF„Ýýýþ°Ïóxq¹õ•Ûlë/¾|ñâÕÓdHYžÜ¼3‘8¦ñío×õåÃñtûáöþÃ!NyšSŒŠV«uðA5اOwY¬;v…WO®ÖÛPž…Âãœ2“ŽÓ4 ã‚1Io^^¿z}FÄf¹¬ 0CÄ,)gYJ¸E4Ƙ³‘¦\·Ù¶Îù_üêOü¦¹½¿cŽ2Æ¡Ÿç)fIÓ<)U•/ ÄB3xWä”÷!ø‡OÞÿüCpxuqVUåõÓg)Åî°Ûí÷ÃØ‹ˆŠ¤9m¯ž¬×g2EË ºn`ô9çàƒ€(YQT v8švûoÿÝ÷¿ûî1›¦§œEMR` 0jDpŽŒæiF >DÔ‡‡ÝÕõÙù•¿¹¹>ìû4i[7/^>½½ß}ö\þâW¿iþßþçÿéÍWÕºxöôYß çªuwDZïŽëËm}¾¹~}óôÍó1Žý© Î9Ç&hæ)ßÜ܇œº~Üí*Ö÷CS•MàÛDÔ—Åúlu~~æ<") CïÚªI…§íYS–.FíN)T÷°;’/+&žúãv]­/]œbê;3x Á1ZöLã4uL 1ÏÆê¼+Ø­V„(¡t¤Y f˜c’$¡ôF*¯¶há˜HVQAbv$EU²:çÔ$Š …Ò- B‰9NÑq`òK@—‰ù3g“Ñ9VÅ-„2N“gO€š¥¨ aFP‘l9kŠ"b®,Œ”½#ö‹«ÔT1ä$*†ÂsÎјˆ¹*ü^O7³Åߢjˆ`ö™3ê–»4šãÏíe ug ¤AL ¿X E Ȳ¤ÏÎ"ˆ™ÜCÍ’—Ü–™!ñ‚™ÉQM;rÌË᪺t* ĬL°ÜËUÕ13,_VUTTð35À„™½ f`UŹ’ ‘¥y–hËDY¢ˆ bŽuJ޽gv YMÁ@x©_VÕÿ4ðÿøS0KQæÉWäkŽIÀêßþö-+ýËÿî¿8ÆâO?íþq§X°÷ª¹ª*@C§Y¢6Í6§)ƈ žJb‚9FËMºS:Ò|”˜Š"l.Wì@Ž}׆ÒWOž\~ÿ›oç?ý¯¾ÙíOUذ…4O ~šG³)Îéòê 4«ÚžÇ™ˆxèGØlÚýît{{c¬ªuLñþþñööA’ª™ct¤yŽ9KÕ6›óuSWK^w³ÙŒýǹ)}U ؼ9+ãÃ~N©èg9uãáÔe…„0çqÊ(¤l„œrrÄMU8§h#9ˆYØ ‘‰ˆKŠ”¸¬ŒYÚº¬Bµc?%¥PTMãŒTÌR¶ªÚÌs4˪Z”ÐR²¬˜’ pQ”ìÕÌöûb´¥–‹@™CNBŒÎ3çœÁйÂÍ`§(f jsLÓŒˆÐ0ç…~ªˆê+çÊÏwåŦLD /gKɘ‹”2’[Næ™ b ÁƒñÒžejLKE09É*š—Š]D DµÏ1„ßG®À9f 2 @B—32@bÇ. ;c&ú|ÏHDÄä˜]ALȤì0£CXÜ™@ÈÌn‰.Ã’{@r\ãRÚ(êÈ-/˜%¯°d÷lw’""š‚wÅg8¶*¡sìbÂò{—Ú5Ddç P‰@U’¨ª(³¡â’/€ÿ°<l™ºôêéÓíYùó÷œo³å¯¾~ù×ÿüŸþ|÷ýé1qÑþ_ÿðÝé4çˆ)&Éš&#¥Ò³÷~Îã0ç4–¥dÉ̲,áCŸÒ,izóüF“õ§£YdÆýcwqýl{y~Øw?~ûñ‡ß¾÷þe(ÖÏ_¼<¿,·ç¡ªÙ…0t‚Âe]ÝÞ} Ï.¶ÝÜN·qîÓ8霓ì ÄÔ§ÓM§ÔK¤yžŠ2„ªH9Os2¥ãýCpP”!¦TOž¼+²€Å4•uá‹°ßïû®/‹ª([á4Ìû­›F³è”{1©nÏjotûþ^ Tâ¯þè—¤öñí‡Óá¸Z·9Mïú¾?úñƒsEVM–×ç1&İ{蓦‡ûOç—çåù=iÒÂ…˜gçÐ$×Uí)¤,¾pmS!ÃùùšÀî>>¤Œêý0å8MÎ;W8H‚”•Ó ³Aé½g‡’y’«Ëb&öa ~š‚Ñî8Žsð4Gï–pĤ¾ Õ*ôS—rV3YÈ„¢ÙH Ï9i9’s¾(ÐåPº ÁÀTD2s)b>x@ˆB LcŒˆHÀ΋_€–y@„!³QŽä\Š’˜³‰Ä©,ˆ-„É’ WJ2Ì‚CÔåžî–¥#Ç~Q´ñ÷àúÂ)¢ h@Äœò"§€-N455RMY `!˜(ˆf`@5AT3ldfà ¥`ˆ.0’"2€3bÈLFž#Z`ΣÌŽ€ PÁ)¢¡ÁÒ¨–5g¤¥5aٽ’I6FV¤Å´1F@´¥@’jF@͈@™@h1Qé,¨YÄMˆ½Ct j9eÈšcF"'¢H€$()ͼì‚ÿßÀ U¥Åò¾~þõ_§y8uS˜Oi³9{8¦^gKïß¾ú8 ñ°ï¼se(%¥”&6TË}f “¼p¯¹ófsqùdLó8uYLS\]lËmûôæåÃí~æü¹½83Ã÷?Öëu½Þ Ãl Ïž_U%ÕMƒäïŸ>݉Âñx¢(¼ãqœÈyrn³jŸ¾xñøx·{|c_+ûiû¢â³Ën:fž§‘A^½|î¼/ªb޽X7a»ÝîAQ`s¾b‡„ð¸{4•8QŹƱªÌƒãêõë¯Ò c?dfR[¸ç˜ÒâðÅiꪮ¯Ûùßÿ7Ož­È HöŒd¨¹.Wq–Ó©ûøñýÝý±Ï™`0N½dA¤EJ»yvöòõyŒiê3P‹)šbÎê9Lj˜bœçÉ×uxýåM]{ò.f¹yù¬^·èxšãv³m›f)%mÊ¢(]7ì—Ž[Æñx:yçcŒÞû¬šÒgÐô8MÃØ§8äÍf²»í¶}zsyw÷É,7Ávãñ”c:ìs?H’ÂUˆˆ”òçnðd¯ß<ÿõ¯ýîݸPK㋪T5UõÁKLΗb:ŽÃÃý§ºª–öFˆiÈy}úðüù³/¾xó¸{Tá~H1ëªYð0Å¡ïâ”Ì`sÖVUÁDUY‡ºtmÅhsžû28tn5Ì:¦„ä çÕ¤^5Må›U=L“ãÂS9O£¤$SƒÙ¡”äÄUÊÆ1#`4Ķ­sžbŒÞ;bK³¢q˜² ].ËFU‰!«¤œg癘Y…Eˆ}Ðà ŨL´(ËDL "š“!xQQKê=12(›r›§à˜üçH±EMEr(‚’I>ïœ3QECt¨ìÙûÂyïrV[À;*Þ“h–‰ˆÝgh¢-WˆÊLHÈÎ ’•¥PUI1!Ò‚uYÒ¶¿W~TEb4Ðl*€ê›"ψÀEð¦ÈHDÞ‘i^¬hàœ4DcDeF…¥Þ@–G‰c‡ÀÁçLÓÂb3Ñ…=‡ô¹8Í–½«ˆ, 9 bÏ–É *¦bºÄ ²ÄåW sY”Ù{çPÅ»åjª¢h¿Ÿ’èˆÙ–\ å½+SÊãƒûÃC0¹ªVÿâ¿þ‹—_mú¾ûþ·ïnû~÷îÙó·»=¤0§¹;ŒÞ—ŽËºnU$ç9Æi'ç\ÒyÌS&H’M´à²*ÊŠ$½¸~öìå«ãпÿðŽ@_¼~Yn¶ó˜N‡ÃõÕ“PÖX•m]‰äÇãiÿx»~»n_Þ<}÷öíýÃéýû‡Ó¡{ÿáý8ƺ¬Ul¦ñÔ¯Úó¯¾ùå‹/ªªD†¡?Æa8;?/}™£±‚T'‡!óÔ·m=Œ#˜>>îbRQÇÁy™¸J.\(ªª¬ŠyìˆÉ.xߟú¤ÒÔÛy8ôÝQ3%158Y¢™¨Í1²s9K…ˆ¢YYºvU ŠÈôõ7_Õu Þ•b’e „)j×›ívI“î÷§iÒ˜L—KL–Sâ™.Ï›/¾ºî‡Ñ£W&®ËF@RÒªjˆ@T¢H žÑ,äqp§P„óËËÛÛ;Í’bL9ÀÔÝã.ÏSÙV®a1¥UemÌÔ´eQøÜ8öÝñÀŽê¶F{|ܧ˜¬i˶© o^¿¬}š¦ÓáPu(˶Ù8Wdäe½Þ–¾hjw}}ýw÷ë·oOèC’Y…BY,ý’3: ÈŒF„eY"bšÓÃÃmÊCÛÖÞ{1‹qPIÓ8®ªµ»²†9Þ¯ºýlIÚož^MÓpóäÅfuvÜwOž<ÌÈöñýíí§Gc®šúâüòq·¯ê ú®O9—uýâõ«jÕÞ?<6UñÕ—¯êª§éçÇýqNYîoï‡SØï™˜¼?¿¼¬o*m[# ;+j†ÓcU€i&®oú1YÏ1ºà8¸àAU»Ã°»?¨ÊªuUå¦~B/_>Ô"OQÇÑïãîqD2%PHÞcN±*VŽK$ÒP´S‚”µ(j@´P8$ÎY˜Id©rtódiï°®¹ï&Ífj¡t‹£_'ºdT!Ç‹,H"D„Åcöy·€°: …=ƒg@35 ŽMÅ…L M=1“Sûý–” 1ˆfÃ¥º Yá3I‰Ñ¼#Ó&ËáÊ~YF¤”>+?h HHž–ÅŽ*âç ábjuÎ;GÞ"e1†´,£ÍT3{VÔ”3"¨yç—bµdºð„‰Ã²Âÿ_ ŒÀäi»þú‹«ßüð÷ßï¾ÿímH_óË_üåŸüëÿãï?}÷pÜŸ¦ ¼/œ#"=ìëu 9iBˆ³FB̹ ª®ªÍºUݾËÉî÷»¤qS¸4L)êa÷°{¼½ÛÝïÇ©©V·ïßwÞ•.óÜnßýôÓo¿ë‡¸?¦¾Ë´ß= #,‹2K6 ³Íuå‹îpØŸ:öÎ’\n./ž½ºx\o×Ã<º¦m àÔUábÌ]%CwêW«5R±^]¡Šq2Cï‹Sžãê켬 €„èBQ£y×nZ¼^^œ½úâËÐTÍY#M33çœ·Û "Æ¡(J^ìŠÎ!!Ä9ßê?}z|úô ±9ÑÜ6¥¦™Euèãݧãñ0„Pxm›òxŸòY¤ ŜǦm‚¯-ÆyG"qf(MÓl·çsœB ¾ýé® k&`9Óñ8ÞUò|BÊDô«_üéöb ŠM½N›Uu÷îöb{õé㧦 9Ncw L§þx¸¼<{óæeYøaw„lÎ;@»Cýt·ïG%g»»[‡V–¡m×U» mY•4t§ª*œçmNÎ33>{v½=Û~øt¡5¤,sßOŽ(æhÁ4cޱní鳿â¼ûc[UвŒãX•ªÄiØ®WLìÁAÕúàÑcs;œSŒÑ䘽h4Ní¦Ñÿ›¯7û±,Iòólñå,wˆŒ\kë®Þ¦{0äP#B¤ H$@³ @OI‰ÀPšžéž­»ºªr‰ínguw3ÓÉjq pò)€Ì8¸ˆDø17ûÙ÷©ˆñ£D vãTúËlEªÈf€æªè\œ*ä$¥(˜CàRŠxŽ`Ôw=*Æ ‹dæhÆ`Ï5)’ÑP-Dª¼gæXU(Ì”s^j À Bež¥"I‹1F4™™S!‘eÖº¸ÞªyÊ"†ÌàDUMDsd$†ó\æ<+€sÎsʦà½W+‚ KS@˜ÕDƒcf%ÏÈZD#˜9$4Cv€ ž áÿ@ :çÐPÅDha”:3@Y0ì-iÉ*è€yï~¿©8~^Â\ŠU`µeDhË¥EU¥0S""ZÆ ÆdfKÞ4ªèò Á”ÈÄ ýðËU˜‰É3`±…“UN,ÕÍ?< ?Ž•,Á<wçÃ1ûØxW½~÷æûOþð•qµÛÖM`OÎÅXµ%•yž»t1,Y’!32Û7W¯÷ïÚ¦âHJŽcu8>æiX×»œ.Oýe˜K*(ÙæÃãýÜ]RžÏC§:ºóe:ô‡yTöÛz·;<}8Ÿ²dAè·Ûjê»þðø(ªcɵ »Ý–kï=ÁË7·òÓýÇîpú‰BKäÇICµ6uý¥Ë’ëf•‹X®Ûúr9ÍÃXnn¯‚w]7¯Ö»œò<ŒuåÁWÄ$9—”Öë58ÎÑ8öýåÒ´m]ÕÞûóéÀÎÐÉÛBq†Y0œŸŽ_¼{Õ4®ÞTÇã™/§ÃÐOóPΧááÓáÅ«Ûzµ6Ãqì år¹LÓ¼L‡Ò<¿}µÿùÏÞ„X¹¶}÷ùgˆ8Ž#Óâø,»Ý&KÓÈ޹貯Û&{¼RÍ×7ÛóñÔÖ›XGïë’QvÇ<ÃTÔ˜\t—óÅ_ýèç?„qèó<å)‰˜…ºjÛ*8[µõÒ.Xoª&TZ°(û°ê‡4òŒ± IDATSŸú¤6Š€æƒ0+‰±²[ÀÉ(€H®ëË_ýõïïîêÖW•c?Mƒ™9ŽVŠCfdI‰É0§ jŒ`Zî>ÝçqžšÖm6ArŽçÃD–ß¾ÝÓ…¡½ÙošÊÐäÝÛÏ…ùûßýn{½9ŸO××»ÇOHÒe˜ŽýÔuçôW¿úÙÕÕ~½Ú¼y÷®Ÿ.ÃØ•œæ~<<Ç!=>Ü?=><<\Ηãép‘|ãæ±«í÷mÕ®wZ’©4U žˆ‘cyy³Úo¶ßüá}7f5užDŠfŒ• Qr‘iê_¾ÚÝÞ6sE¥]¹@¾$§<¤Ù°D¶›Í  JQ̤dZˆÿ>TÄØÄ-SP5PAZ dðÁƒ"šyGZÄQÕ÷ÉÔBô²µuŒ¢§l0¤ˆ­È4§T–쩈8ç|ˆˆ€Á…’³=R`YCQ¡EᩦàˆÖ©&眔¢j‹‰ åìxÇ ¨HF€"ZDe1x¿]ŠeB'ÅP@•œ÷Ž€ªÈ4BR5•¢¡Š .=YÞyˆ¤‚KÔ^Õ£÷,ET°dX˜¦ XÛ1-DZ)ý±cÿ,k1$öŒù. .¡U1FcGP—К"( <£Qµ(.3 3uÌŽØDˆ€;œc{¶ÀËÒ`"0@d.b*à]5"WЍ©,V™’…Ù óƒÔ>þ“À42&£qާ¡ŸTÍÜããùÛoî£ß…º®W®]5ùááQ•‰†aóèª  C¢2ؽ‹ ¹0“GðLD.Ô±u‹ wÕ¦<<#œÔ$›¹b¨–%ãvÿb}µOO€þõÛ/ëÐh)Ã0ªêv½]ow\w9X’tÿýÝØõÞ8<·õÕË›×ÛÝ59Ÿ³*° uN2u§ëýº®ããÃ]ß]œ÷èÔ$«kJ ÌõÃ0OcôìƒCGfùðð T?}øT¦¹;.çN ‚á~¿ëúsÎSUE1©ª¦nVU[±sÄ®]¯}PÏåõ«ö럿ñm f»MÍœ®¯oBUX»j|4‘t:^†KæN—IÕˆ‘òííöÏÿõÏ_~öîææEp|<q}sûúå¹;Ïyšg ®eŽ*P 03˜´uc†M[û€iÎ)iæ‚Æ*z:T>¤©ü_ÿñÿùîý“óµØÐO€Êì]p8Ã!Üm·Ó8ÍÓ„€Uô9Ï€y»­Ë ›zÙ÷½5 à¨øi{\ºþ`=ûU³ùâ§_]Ÿæbe˜ºo¿ûÝz½Ýo¯¾ý‡zÕ„×›Íoÿî·ÝÐÿô'?Ë©üíoÿöp8—Rê:NãxýâÍv·N³œs6¸œÎežs)†$¥¬Ww¼ß¯Ÿž>šÌmÓçÛÆ½¾ÝÿæoþnœP± aU¡ŠQ«SÊsžæy2(UƒC7Þ?ô—‹ 4MÝ ãñ<ˆ‘)¶õêñqøön,nóx?¨zö|¾”S?çÂuU9ÑÈ@„%óØA߯PrqLªp9¥¡S‘ý²uUW^d6³\,‰)„DÄyç˜ ”Bp€V²h‘gêþâ{d‡@ó\–`¥š¨Á” A ‘DÊ3„€³_xŸ!VUt`*fóœœ#IIJôÁ!1:O ÊÁ&30v”’ä ÄHHBˆ1!¡. OsÎ#âÒÅB0r.‚÷¡ˆ‚!ç\€Ñyg€ËÙ¸4è ŒÁLEõ¹CHDË7.ë€ö¬óc&X¢S¦Š‹ËxÁ›šˆHÑg ÒòŠ(¥(‚!:æÅy *²Èà—¤?›˜slKg QÕ ˆˆMmiÑ’¯US‹±&"‘Ô4ØÔLðO…0?øcŸ÷È#rRÆÔõIŠG¨TÙGª¬£Ç«Ø’+§§S)e. ÑP`) 8P•TæiN]?æ¢ãVõjšN9&o XdâþjÓMCPBpH‘âj»u_µ»›W7±rÁ{Tž†¼Ùì×mÅ„sV1a±²Þ¬cïïîëp½D·@ m¯êõ:¶ÕÓÓCÓ4ÙlÊÓãýÝåx‡’‘0ÍsyñòUÆB»ýÖëH}ðÜÔîîã÷`6Ï#¨cLiºaNâ]P‘Ô®ª®»°‹«ÕÉå”T”=‡Ê(ü‹?ÿ³Ï¿þrµ½ò‡á 2ãº]ÕmSµqwµ‰1 ý\s>ÍE8™˜I`£×¯öÿö¿ûÓœ†ãqêïxµjÇ9ùàç4wÝ%8f²í¦iÛx¹\橜ϗ¢«8ÏÓ¹;Ðz{=¦¤ι$ÙGÿôñ~ž§íí¾]oÖ« "…ººóù|V ÕöjçT²¨–Ræ)å,ã”æ”Æiš§ªW×Ûý‹M]‚Žý8O}c²UãN 0Åë›×××7•sñþþéñér÷xòM» ±b⪎DdŠóx™çq¹A7MÛu—œSJ3 Ã0_ßl^ܼˆÌcwÎ: ŠªŒÃéñpOÎõS›'èÏHŒ—ÃáæíÍãÃûîdH|êOõ¦išf¸t§‡Cwì~ö‹Ÿîö;G~»m‘•¸ÊI÷ò'ÊŽnnn˜ ãøý·wÿøßSî—¦nª¶u3ÏsÀBàºæq¸¬W+ïÝõ~wÿéîÓÃåþáýïÇît黻çïÏ—{yóúÝ”Š¯šínïk§¤ˆç$Mú¾ëûq½mÓ4öÓ4Œ—sžÒ<%U,Sš‹#WÅÒäœ#äõ¦ç±NÙ—‡»ÃÓ'ïí_þË?ÙíüåtÞì¯ú¹üýï~>‡Óù0÷M ÆIºa6 €îæÕ«fµ½\ú¢Óæf7öƒ%) 5Ûõšº‡Sw<|üðþññ¡ëºÓÓ)O³¤9:_rB0™§agÞl¯tœG"|ýö6eÉ‚¡nªª&GÜÍË0fIéúÍ 5”"s.ÀLìU%¥e¦æ½'¤ÝfCMìˆ9圳”y~÷ù«fªèVÍj³©öW•M™SDfÁq–›—¯É…ªªª¦.’Sšþ×ÿí?õ“¯V]Ÿ|lV뵊ŽS¿\¶ËœBˆ`DìmúiÙ‘‰.}ÒåˆÉ¥Tmå6Wnowãxº~±OIî¾Ç»ÃP¨VÎ î_ÞtcwèÎcTK«àÜuc»õ£¯¿ºn3QÞ]­¾ÿþñû?|òÎ]]mïïŸ.—Ã49 :zz:~üðxw÷¤bë¶Ç®Z×€PUõ89çàÙ;&ÂàbôU “ð4Cãn¿ë†ž˜Wë`Vºn˜g-êºnSƒBŒÙl»ßˆ ¢té ¹ª¨´+j桉Ñ5±v&¿¾Y´ÔÔ¸T¦j è5gS410ɦ9‰¤¥õ@$18Õì!$#Ç €Îyµ¬DèˆMUEy‘2š! ²s²èK—R‰Ù©b ")K“ª¼[–’žk^€eUˆ]-’0¸();çsQ043"2Õ  EÄÌ™‚wPrvªæ‹¨ª,ôc-Š©ˆ¨dÉf@èa9Ö‹äª Î-Ã!!âE ì=1/Æ]³E¶…˼zY³\Òøä Œaä™ZA6‘‚êi1—™"¢!)`aòª‹VL/Ù$65!¦…!j?Èh Ò\ Žš™!-¹&$"%@`Ç‹E胪ºÀ…rΰxʈÈ9g¦ËEDÄpršEÊy  ÍÕ±å`S€Ð!9¤¶jBp_ÿâ+rZ7çÜw#( 9-%M½jr¾R(jæVÕš|È’‡áâ˜w« xV›«R&ÂD‹–¤š Ù,bˆÞ‡*ç?½¿‹Áo÷›¢rz:öçnNérÖÍf·Ý…ºúx|ì§³Ãr½Ù½zûªH®c|8\Æù4L²›æî<… Žó0Ëd–ÍŠ§¸ÛßÖ›Í8fº^·ØN÷-“­ªØV•¯=1» 2›Aðîjí|m`>:5[­×9¥4M ˜ ûqœ‡óÓÓÓéøTæ~öÓ¯þ‡ÿþ/úñ“ó(PÀaãb}<¿þË¿]­®€«‡ãåáéüÝï?~ÿ‡’e·ÛCéûÝ~?vã8 ÝÛ«ö_ÿ«Ÿ }ÿí·ß óœs»®ûKÆÀr*Íê…‘W£nCÞí¯L!—¦nûXùo¿û0']¯ÖŒèB˜³ö—óáãÝjµš-µÛëb¦d/ݰj7Î;v®i×ÛíVÍš¶çiÕVU] Ó4M…M¶ .O'2- *†sߟºñ<cbð.T #”<¾ùêËo>ÿû¿ÿîÒ¥ºm²XšKÉÙUµP):Í“ˆ‰sä\ÞÅèÑØ¹šØ÷ÝXWíJË=ä4}ûÍ÷–‚eBÉWWÕ8ÎÇÃã¥;¹\¦#:]R™­®WŠþ³ÿ´;$Ì$f„ñ7¿ýýþŋϿø¢dùðácžSqÎ9¥9Ïzx¼ ý4tÝÃÝÝ4×/ÖWÛVUœ§ 0¯W+Ɉ¯_^õ—8?yµZ_¿ØS?ŽƒwV.ça³Tà\Ý®ûË,Ùå©l6¯V‡ãt: !¯âe(Œ^§© ÀŒ›Ð¨ÀáP†ócô®n<¢H†RpNʤð˜l.È‹R.&bëUê輇™ŠÐÂà$fpŽƒóRò”gD&fv„äÌPÕÒT—d=ÄU‹s䨗lÊl~šR)£g6Q13Uf6Ã¥§¢*Á“™–\æ)« «™Èlì)ç² =™P2J@T€’p‘º »”‹¨±G"ѪŠf fλÂéÄ¥p|6¢›AÊiY%Dbâå³>›ˆžÛ)Ëߘª),;hËf²äB€„‹%Á/qSB‡hÅ ƒŠáÒÁ×åGÀË Âä10T32GÈ™‘ ‚ ¢å”e±†!#’©h)†H$¥HÉ!8x!¤JQ4eÇùŸy"ÿåç_0¦yLZ `h]ÅÞ]½Ø¢·"©ŽlÈK8h)ãØ%Qç’–È+Gզݴ͊ƒcïÑhU¯KÊÓ4©€è$åâcœE³&B*˜Ò<Scl×ë•ÓŒˆÐ #¡›‡iì‡ÓétI3Xqª”±ë:É2Sºä4V1^_ߨДbó Š¸ì"©ßo¯}‚wŒÄÒ”rÊÓ”×ë+)ó<\ÖmKÁÏ)—"Ä#»’åñxA´uÛ:v&ê½.:±i7ûýããáîî®”fj°Ý^ï÷ëûûo}ðYä³/¾!9®ëv³ÿõ_þUwîB]Qð!DSò.¾ÿþÃåx$r‡TäééçüÙ«Í_ü›Ÿ~:ßùzÅ¡ñ!†èm㯮Wˆbl¿üåOØ!#Åœír:7•[µõ~¿¯ª&V«fµ#˜ÆÔ64¹¾ºÚß\íooc[+X)¹©¨®$tDqš§"²È&LKëTì㧇HT‡â¹‡òt8?ûûÇîðt™Çé|:ÄÄJ‘ì|8Ÿ;mè.Ÿ®^_ý‡ÿøë_ÿßßN3 ¹RÒÐ÷ ~FGPµMUWÌCpÞãèƒT3Ly(erˆH Zâ<ŒóØ}øþý÷¿ÿØŸs™ç47¯v …”«Æ½ysóp…ÓœÓ4k¡ionn/ÃøõO¾6³í~÷æÝ»®“ÿðïÿêõ»/›Mûøx<‡§ããªnRhÜûïÃØß?|/ã8 ÝëW»ÛÍ~[Å@|t¤ÛõF’ìöUšNjÖ¹;÷Þ6[Ò~8 #!eQv®ª°nqH‡¡ë6«¢ÄHC7Bñs/Á@êûÒŸ§º®ªÆ Àè‡4pÍj8÷E1ÄÍxβ Ù=Oi66®2sÔbÁ1“:2@ Gj0¥Âì˜XE²©™Y}H©¨™œS Þ/GŒˆ€aš³8ÆCšË4¥EBbâÌ–½¨”D …ÀÎ9QBT5PúM)¥DL)SiZψÀ9B`ÇŽÙ<ÉEdÇŠ&*L\òótÁ;5-*’BðÏy'¢”Šª?cC§çÝI&ï=˜yçTŠþÐZÉ uY0±sÞT;]YŽ/'r´ôóÑ› ²È¢øA9©‹Ž’/Çýâ\ÆèäóÎ;tŽ –‚¥df4ï=sÉea[<{͘L¼£=³S‘eÙ­H@fGÈežsËŽÅ?ó 0%po_¿Ô<ΗÉ7¡¾¹½ùâëw¯¾¸y<Ü—n·iØÇÇǃ&±d z™.3 ³@¡ õv³ß]]ó䜄¦]UUíØ³M»(Ýp˜Ò8'K¹(˜€Ë®°7H ¶^íb¨sÖ¯n/]§Eïî†i£¥XÌeJó„h¨Êæ^íW»ÛæÅ»m³¬+÷øøÐu£$ŸsA€Ç§ƒ)Ç››«UÛd•Ø6ã0ýûÿãÿìΓ÷®>¸ÐõÃÓáþúºþ³?ÿùTæû» ÌuÝ`€ã)7W«›Ý¦®æªÒª€ž‰MÊv]97‡.½|÷é^Œ7›«~˜R*mÛö}Ïd¡rUS31Fº¾¾2+Dê锇Ó0ÏÅGÖ•»¹¹êÓ¸ÞnóÌI(®èêfõl®·YäÒOO÷3;¬"9ÏUŒ Àô¹óÖÔL˜‘–cn±V)åœsÌLä‘ç”§)‡PùÀ"Âì ‰sQ«ë†‰‘HÑrvq!ù 9Ï‹‹wû”g%})%™4#)–“!";hG  ¢Hì<•LÇìb19òŒ¢EM 1–T¤ùÀªRÅÈÌ)¥eÓ˜H±çÁï¢afrŽÍÔ”–űeM Tl:),3Ø?ú[þHùÿ²o*¶ãŒHÆäp€™¹eN  j(¢Á{0碚!àb¹\V˜Uay(-зœ‹÷a™üÑ3 ‚Ìy0È"„Î!©Q)E|X¬ÇÊlˆÿe„‚IpñË/Þ©eš·ëÕözwû٫ϾzõÕŸ|>ÏÓáãÓvÛ À0LÛÕvJeNcÑ”,£#S4ETCäÝÕ~˜'É¥]UÛ«uUû"s1iWíåô4§„¾R5¥@Es±Š»Ùܼûâ3ç,F? C‘üxy¸ôÇãñqLÜGDÛmv&j*›Õêj».´íNÀÆyš¦±õÕË+A9_º¢œE­¤Ê‡ýõËn¼,íHU¶®ks1„àœc‘â]pÎ;OHŒOO&ª¢ëv5ŒÉšg‰m¬šZUû~ØlwçËY¤¨Új¿k7ëÃá©ëû@ÕT+ïkùéÏ~|ýr۬ע´Ý_‰ªÌ90÷çÓf³ººÞ‹)Aže‘ 4Õ·ß}w9uιªªÎ—sªMl?{w#`¤©4<žŽUíÐa×)“€ª©Bž‡œ†ínåÍ)¥”§±+)Ÿ>|×p•¦I›à†œ|¬µÀ< ËfMISÎÂJ)jYe$°¦j¦9í¯ö·/®^Þ^5më|À*Ò\æÛW?«ÖWu½Š>(!´ë66=«Ñ0NäÙžff‡òñÃùxNˆæyrè ¤h™úaûnÓ®<Rnš*Í3“÷!ÆÐ: 1x4UôÇ. ݉Uºóøx÷TE~ûîºÙÇϾz5ÌcžítÇ¡©×Á¯¾ÿîÃ8Žó\$³šªÉÐwǧ‡ßý¾;=üöoþÓ8vˆ)M§»y89‡f³ƒA5ýö7ÿxÿ¾›‡òt¹ÿp˜JþñOßþøëWiºLÝSqγ¡¯«¨2Þ\¯Ò48W|ºÌ×›ëO–1rÎiïqµY b p}?8ÇM[§Yúþ²ÞÔÝeä Øfßî®ÝíËQSÎÇãÓ„“GõÇÇ4ç"³S¥¦Å¶uY²* YÖ9Mì8r,h&Rš‰snžgUsÞ™¢Š•¢E‰©°ã¥~G@‰U0SïØÀò’vŽàùö€>À“v²œþK:lé°1QU…œÌ ¹RBð΄@!åhè°ØâSf*DÈÌÞ;)€è‰ ©ýQ·¢"K%n =bqÄ ©š£h1%f·[HŽÈ圉 œçEHà˜—SsyìÂV3]ž§*HÆËþÁBèZøkff Ž“"©¡ª©4S201%&ι¨¡0*01‘7ÕR–mÓÅ&ÿƒ+†@Ô Œ¥˜¨™‰sd" Ï7*BbE´œåŸ¹ª9ð?þêóóñiÕ´77Û¸ »ý¶©+c.ÃáÓÓ‹«ë9å4gïB7dGVdN%“3„ªýn;¥TÕmB™'vPW.ÖÑyöŽ/çã»Ï¿˜æÂf¤ªZ²‰©Ü47?ùÑO~ò«mwU³j{Éyµk~ñ‹ŸI.—®$&ÎYš¦e牰nc*åÕÛw?þÅšu5OCš¦ÛÏ?ÛìöW7·?úú'yžç¾#0d7•A,#‚yµ›í~µYMy$"Íe!¦bŒëêêÅMÕ¶Ýñ˜òLˆ±j sp.Í“‘ø‰C³ÞŒÓPÊÜ6!Ä ¦}7Ìã¬bju¬¶ÛöÍ›«·ŸÝ¾¼}Q5Uš'Í¥ A£'‘\5õõ‹PŽüú³·§Ëy³ÞæTb¬½ç§§;™Ë¾YýòW_?>k§«¶™Æáó/>ÛßlÙÕÝ`ÝTDYÚ¦ÍYW«Š8×måC‡É{ÿæ³Wã0b–}]¥Ü4³Iž& µ!çTmè§œgE‰9§©]5LœrFïÖëí8ÎsšÍŠJ~ÿá=zGý05B•‰Óp®ššÙµ«ÖE¿Ýl®o¶›íêúæz·mC,U /_¿þæ›ß÷d@R5*’ý°ZmÛ¦F(ÎYU7~¦yÎu»­b{9Os"zxúèYÆqÜmW¿üå—ã|tÑ_Ýl>=Íɯ_½>]†?|÷1—"ª*ps}+–e³nrš<(ÈL$7·›¦B.cw¼›Æ!åb"šÆÓÓQf‰ÁÓýýÓÃë/×?úÉÍí‹j·¯dzú_\_9ÊÓÔuçéÃÝy,¸Zï‹“cäiœJž›&"ùaæ¹ TZü4M1:›¦©hò>ª©,‹)}7ß}¯†>‡³iQÑÊ5)Åóiºœ“”n4ÑÏ“Ìäƒ(ˆŠóÀ˜P¡ˆ¨0/e=,ãåd)E Ï¢ Á{ïÌ9eQ­[*Æ…— PŠ-ËJ ž ˆœ‰ ‘Y… ˆˆÐL‚wDh!c`Æ<Í9'@BfçyÇi(Î0°%Ž©Ë×¥ˆ(‘[²ó„Àˆª‚L€³sË¡¨jÁWDŽš)ÆÄfº< DÔ9çÙ!=Ï6~0¥›©ÃbæZ X€à3ea©›mñXÐs§‰ž§© îús~!>/1w5# 5S"&r€`*ôÜÔn !ýhBT3ç)£u IDAT<Àb[{Ø-;nàr¶RŒ+% ¨£.—*]²í†dÞûæ`hL »Õúî»ûRdœNÝåØ/eF*I?¾ÿp³»!Ueþðû;ï1Ôî<æ°òXyŠs$-¤ PT§Ù"çE¡¤2OSžçñrñ‚×M]Ežf¶¢Õ¾|»}AÎI¨ZòµeS˱ª‚o@ãvu}ss»ÛoWÛv{}…! Dxóæõ~þ%BUâëMU·—KßÔõ¥?xfF?ŒCÖYI€D·Ôþøó¯5Mc W»MÎzî¦iì,•ôx|yöq1û°Ñ;ž§1VÕåÜûØTM£’¢sÎǦ©Sšr.OçÔOf`ÈýÛW·¯_m^¿Ù´«)E¯h9zËzÿðØ_:[¯V? ]ÏU|óÅçŸ>~zºè»¡Š œNO&°]ùÿéù¯fH—nô m膇Œ¢«š˜¦9Fÿáý{É@®&çÇÓ<©ãºYµû›ëÇO÷:‹ò¦åuK.6ëµR¬ëƳ©)SåBADãà=;PB»Þí§2{}1‡iF‡ÔÖ«ë›[öÕ²ÄÞ¶•s®iW»õš‰º®C&½¹ns)…aÏWMµÙ¿üÍo¾ýî÷Ÿ|ÓÖúg?CoOOŠ„–¥j¶¥”41'Ì ÇiNCD÷O¹vûë¢ðt÷QÊáÍ»MšÎ!«—Û*`êûËð¸xÔ uøÚlBhÍ ŽáõËkµi¿ß°cç}³jR–9åͦbÒ¦j1¶›ý‹·Msu<\æq„’bpˆK¹ºÞ½ûüÊäq>?Ò<Ôõ¦©Ö›u¨BLÓÀUÃÃÓX.ÇófÕÞ\í‡qˆ±´,i˜,g'ËÉr† ©))ÃÀ¢RßTUšåé~sUí^¿»áÀÎ-)Pì»d>ÄU0¢ÇÃØnøº­Hu’<ˆ”‚hd†E3:G@ ¼2QÀ‚(‹A=gYŠV3Ë–< ;.ˆà¸ªkC@V Ë%kA)JÞ{çü<@ÇÌŒŒFŽ™J™ 2Ó1^(=eÉÆ“sÑ‹e#ð!xï½'Íyá8Ç`ŠfŒ1øèÙ¡𢙉zç‹(¨DGÀH¹HÉâœ[º=Hd9Í €Þ“cTÅÅ”gžPõ;rÞ‘s(ˆ²´š€‰ÑHTŠ[¨>ö ÅÖÛÀÍÊ2ð03D{®«pÙ4FPbDÇÀA@ Áðò^Y†Ôf¼„§LEuIv>×ÿK6P @”`¹ƒ0eCFF. f ÇÞ;dûg^J€¸ œSºyù=Ç*>=<•‚ͪU•Ö0iBö]—žîŽí¦òÔO#eÏq¿¿j«z¦#õC¿Þ®WÛ-97 S mžr@§sÙoV¿øÕO«ÝêÛ»Nlíâë›·äè³2X)Ú4««ý¶H|¬ëº©çKGIÏŸNç®ï‡áñ|±JʧÓÉ{·Z5®†’Ë4Ûœ¹è dfÀFNˆ”æ4‡*šÃ1ÍOwݹ/%—2]]ïêè‡îòIèWÍUÝ6e*c?¹PÕ•SœÓIÉm]åyn«†M£4ŽšZ^74ôÇ~8Å@1ÖùŸ~ówû~š¥Y·¿üÕ/þñ~TµKyÎÉÎçáþþ<õÅ «¶zóÅ[×w˜81²s´Þ´ëM»Þ¬5—èývµZ5Q%ÆÐ;¥a†œí||ª"¾¼¹y:º<(Pp¾ñ̪…‡q>™s€ÍÚÅHý¹877W‡Ã,‚¡cŸ5+OíÚƒ˜Çè#º gM"ãf]›)ŒÃT…H@"h1‡J*ÂѹR ‰YJ% ¾2@]²ôÈK\Dˆ9®_‡b¶¬3©zçLlìgç(¤©às/ÚÍ{^DŒª†@0Ï…Ùb`1ú¥€ý!ïU)#0TU0dv ¼"§ä™-¢s‘L–,ÑFU±B\ôëdVŒP™½c"`B~n=-¼eóŸ=X䘙ٛ*š‘*±!fQ@Q¢€ª* 21(ÀV€¥yd¦D°ü—7à³¶riûˆ¡)ŠZ.ó"áQ|$Y. ò«-cdƒå5öGjÃ20Ä¢j€d`@$¦FËF"RB£0;RÕ:xþ Ï~`5¼Þ­A­Þì6/oRžžîî «bBÄM[‡Öå$ŸÞŸÞóh¥l¯®/S?Ï'Fa¾Ì9OCSyˆ™]tCM]Åiì5ËÔÓ8JJÑSµ­¾ºûtxòˆ¯¯^ HÎù<Œ÷‡À"™çép<§9/°3[ívä}žç4Oß}ûa˜ÊJ³n¯nnšÕ† d½YÕM5ÎÇþ|^¯Ö>V—Ë ÈEŒmh_¾xÛ:®êãá€Â¯ß¼5†+tÄV„ˆ†q¾ê‡1ÉÔO&BŽÉ¤®›y–<¥U»Rж­ÇG)¹ë»ËЪ¥ÒTÕþº‰uèÇtiK™KΩôíÚòùÐXÊ*FYl³®KêæéìœI™Q  É…èCŽÒ8Îý”G½ ÌeŽU‹NhœÄ@$e!¤ãé€ ’„‰Ô ¢›‹\.gÐTUÕå2ô—©Ž+-ÊH :!ûYIi§­;˜Ã_ÿúwß8«¹zÕ”ãÓétìE´ª*P6ôhvxøTL™c–Ô´¡nbJƒ¥‹ÇËñéýéñ»ŸÿìÅ_ü«¯·«êf»nj7NCšäô4<ƩǧûóÛÏÞ8¢2 «:¶MtŽÄr‘¹­Ú§‡Ãª]çKw®ªÆ»zžRU×çcW ~õ“ÿÅó_“óßþáýªmJ[UÞ{)b&†ÚÖ5çyxy³Öµ›¦•ú~RYÝýãi·ßo¯ÖÓ\TØšº .FßÌc*&ç"R|)ÈŒ¯oçÝ*“–Û›ºK߇»"¸¬ººÙ”„—'™2¸ÊV«œkê@ˆZ”S¢E A¼ã:BŒÞû šPȱSbQHYœ¨ÍÎ;XÀKOýrê ‘©I0]ÞÁ9)˜ՊÃsñº$‰ çœC4Ø{/EÕhY°ZjgcÆåB蘵©Ú€3Q"B‡K7Ì~x‚™‰XÎ%çœs.©":öÌŽŒ¹ÿ—¯÷èÖ$»Òó¶9&Üç®OWYU ¦»©v ¸(RâDcMÄ ¥ÿ)jÀÅÅn Ñ@€ªÊJwÝgó·q«GBçèæ0îZ7Ή½ß÷y2Ò¼Ô’±ì=«j ™pÞ¦J‘D„d²B‰)1Û$¢*:#:g‰.ÌÛÞù)˜Y2Ìi€üT~Ú3&É2ÛZižû$Õ,šˆç¯ÃL"ˆ‰(¥Ä†‘ÐRMÆ"ýóâaçÏ•gEÌ I2 ŠŠ0ól45+ÒSÿ g_üÿ€žEóªÎö¥_T9öíþ˜"ÙÂCÞÛc·G1o¾ú(£qžWg»‡”zR´è¬O†XªÆ,×eL¢ˆ®ð*0 Ýp:¶»¦njÙ¦øÝÝ»÷Û»Œ ¨yˆ ë’X“€ÚSkQʺȪÖ:ÉÂh »²Èª)fÆ~é?úéæò¬ÛÓá0õ#!æœNí©Y6ÝiGYVËõ4 ÇÓ!‹2¬èɧ1…iʨ@à¿8¿!o÷Ý‘ÄH’ãþðîí{(J·^7Ó4&”  )Ç0§cß÷‰•ÏΗÀÉ(+ m×û!XKT/K a;ãr¹¨Ê²ªJP~óæ}ŒùóÏ~è¼?;ßìï†vŒoßßþö«oâ$"è w}ýìÇ[T²»}‹P­7ëó³UJc³¨VgÛ]~¸ÏŽ›ªv)aœ ‚RSl–ͪ*ë«Ë«º.‘\YÖy ’eFÕŘlQ¯/×cœb’fÕ\\=ËY² qR~BŠäMRIY¦)¦¬!2\”Üívû¾Ë)RÎD@«åT _UÍbA MAEQ«ðÐ ÌVE´ª–oÞ>|ýí£-êÿå?üû¯¾ür÷x\,׫õ:Åœ3X뫲ÌaR„øøp·ÝÞiÔ<\®ñÙ9¿z¶üÑo~øÃ«fiRœB?ˆ¤,0 ƒ+ˆ !”Îj˜úŸüì1÷µ/¼·ã4.׫4£qÎö}ÏÆŽmJâKK D¶ïÛ·oÉÒó—¯Þ¿½««*„Õ ‚÷f “hܬëËMã"朦²öm7H¦,4eîGéGQF_¸‡Ç=‚³HuiQ¡©êaìE ÆÜõ]]Ÿ÷=:¤°2ár½Š,›Å·ßGË`%‡iL1ùB&ß4’úBQ²„T•nì‚5Þ;ë ì—KïŒ2¡¤9X6D¦Ë)iÒœrñE¡D¬Ö11©`œ&cŒ›'0 a˜4)ú¢`fU0lRšÊÒYË3Æ™É8o˜AfÈbŒQDÉ ÷Θ9†3óæ\|fžie$ 3}:¥èŒ3ìbŒYf®”E YsÊ2¯¬1®ðˆ4…˜531ÌÐKdU ˜DU³Šˆ¨ÎG³ÍYe6ª‚s¤‡Ù¤˜æ/f5ç¼fÊOgâÙsÀ†æÖÕ¬<ƒ'—À“f¦.ÏÙÍù˜˜oÕÿ¼$@$Á ¶w RraÔ²eéo^?'‡ç—ë³Ë Y Å”1g6جëMéMU[Å|8úSOŠEQõÇ~µ,‡q²¶”˜šeaLf Öcíþp臅*ß\^}rþìÙ±?ý)§¼X®^¼zæ+˜ºöÝÛw»ý¡¬1u*ɲµŽß~x È1&òÞå4E9ŽÓÝíæÌ…ë{¬ úáÏÍb¹ªÙ„îowM } §ÝntS÷úyUoÖ²Û”£°&tLVËÊà©…±…óÌÈ˼þôå׿û¦®Kfsqul»ee­Ã„‹Â-7kQv…Ÿ¦¢©jSÃøÖ땪Û°·¢½³JŠS‚Œd,’U´Íæ‚lùåo¾}óÝî'üGeŧÇÞùú³/>¢Ç»R‹‡ápاÓátØåpÿ'?;ûÙO6¯žo,ãjYÅ0 }š«‚«r~!D’c7„I«¢I…÷«eÓiYú!$¬ëÍîî0ŽmQ™¤YA‡a(›²^,bÊSL!LahëÂ[ÝÝ~X­—¢6 œ ÆóbQ:ÒEi<£+i:ÀâÍí±DÖ-Ö«¶sNŸú 5:kV‹F$+)ìèýÛÝhB HÓõ¦ †qTƒÃåÚÇôp¨¿üí1LAhø“/–ñUa ÃdI‹ Î.VS˜PÔ° }¬ÖrJ¡.ÊÒÆdSä4qÎyŒaŒÂTäœ%GT–Ö9b£ÖaΓ 0;Ã4{µrNNQQÉÙ)ˆ(ÇÆkY!OSRE"0lT@ó\…Ubr*b Ï+ýSŒ˜$"T2ZcgØ'‹$k0† ¢”¡°%( fU˜RÖŒHž"dÁ˜!C&Ø4ZÇ1$V19¨7 Ù"òR'ƈ4«$ŸZjÄœ%‰F6ŽÕ2¨Œ@@š`6¹ƒä„ªˆÊ,ªYu€"ª}?F›ßûl˜yn !@ŠIŸÚ4†4}˜Éˆ œ"óL¢a6"€d0ePAT‘ÌD(¤52+“!ô L„Ãü©˜0g%´x ¬O]¼9¿`›êÆÝ\§Þ|w¿Y»‚BŒÏŸ¿Ú>î<Û»S˜`±ª¦±EMq€Áz.jß›$ù´ßÇ£c³}ܾÚ>+ˆáiê ’EÌÄ] !” ×› H`C hmÍ)«rÓíÇÛiˆÄÖ:; ƒˆ€JUÄv¹Øx_”eES”<%ë­ó.¤XUUߟ†ãq’¦±Ûß1+®êõ³çÏÕB¹jl].VËÝn÷ñã;Ë´¨Ê4Må·Ç‡“÷«ïw’s´†˜4Å”UÛ¡G‘Ò¹q캶uƾè§i·mQýÅÅ‹åõ:IÌqòÆœ­WËeyu½!–ëg73Ú{û°[­@õ…3–USΡiš¢ô}?¾w—Eu¿?H…dùâGϯ^={ÿþÝp:îwSHç×gŸþì/þü‡¥ *±Âýõ&æ}×]^^1ù‹ë›)¦¡ï ãº~hÛÁZŸRÚí¦0UU‘bLcÚÞ=Nýк³Õ¦p~¿ÝR ¡ë5‚Qb¸¿è».¦0…ˆÀ¢ˆd¼wLéÅóËq8í·Ëš$w«Õ‚‘¶·S?Á‹OŸ#ÓÙÅYQÖ§6Ýßí_œ_<ÿúëߟ}Êl‡>ݼo» )mïÃÔ•ݬÝëO/^¼¾ø£?zv~Æ(#e<<‡Óvw|ÜŸ0—¡›|¡Ó¨ýIÝa±ZYcœ¥DòæÛ÷û‡cm«íéжB\)ˆ3ÉyâHlœ5Ó4Ä8eIˆšR’(l(ŒãÃÝ­hlVåÕóËîÐi嘒BrÖNí8t47Õ¢måý]ÿxzõìf ­Âðŧϗ…uÎî‡z±ô¾¡CMrjCYxŒ§›bSv ]èÇ¢À«×Iyÿ~R ÿöçÏ>ûÔ\ŸÉ»ïvÛ£!2j=ûÒ¸2Gi…¤Ä¬ŠýЕ…™†Ö[§9çqSŠË¢ôÆ *;­+o™‰xFf,ÂÔ#¨ªU$¢œ5eD4Lư”qœP$'晸ƒ9dTÁ%gT|rwñ|‹É9'"I)" QF4"˜U(Fÿ+D2èÌ@"²Æ°±¦RÎÌf¾q;k™Ÿ°D, 9K–4_´çpÄü"fĬÀ"‘(Ì0lg ÄÓåHç ;K~R ÌrÉY«"ªŒÈ<`™ç?Í€Œ9Dô´õ ï’E²Î…†þó4ûRefC,"³Œ~ÈȌ†6vΤ"1&“³ÌsC,ùI!ù}iáI53l€²ª¤œæº2Ï‘$1ðþ  êý~×ú»ß½9_7Õ¦lšz¹ò¯?»iûñ׿ú C>?¯D'@^^4í)}vó:}9†–˜ W.›e„Üžö)v1LGì {M *Ðö-êä T1–em@í‰Â,YWñv—ªALEqšº†±“@VÄQA½÷ˆè¼Ë¢§}ÛÔ‹²*µ®ëeÕC9°1\,g÷Û.ô½¤4GÑ ï“ Çv[4U–\ùÕÃã¾kO’äñöÞk ‰ä8õMSæœRbI®®×ûÇUáN§>N}œÒb³\­‹ØÇ®úØùÊÞÞï‹b˜©L*»Gˆaµ¬jzþâòübµX6å¢(ú°?ŽmÛ¾\mªaè­-ÎÎÎRŠ*Úu-‹Ì,Z!EfVçøç?ÿÓÄáâr][ÿüÕM¹(Ÿ?¿4œû}Ìéêú\àt<ì“l’±ß¼yàÛöÔ·—›õùj}<ÎÏ/Õ:°%TEEOñ4:ô]ˆ“húÕ?ý÷(Ð4Uâ”bPMÖŠŒñññ®ï[”|ÈZU«²ª¼óiš¼÷uY~óÕ—(Ü5¸ÚlêE•[¸º¾A ýé€ÏÏ<耄u¦éáúæÅ/þîŸ&ÃnšòÃÝáÝûÓ8ö}¨+w¾©š˪¼\Û—/ίŸ½Ô ÷‹ÿl˜ûüí»ƒ« fB˜\Ø' ®»>ƒ¥ÃöXøB%†02AŒ«Å©¬›õvumg‘Þ0¥ëó‹ëËõö°CÃ1¦È@DÞÕŒ4öc8‘¤.=!†„9¡ªr{ê 2(zjƒáRbt WëÅÐίÖëÅâñ~"Û›gÏëÅrì3 a ›³E½ÄãYJµŒÓ–xHÕßÿ#rÆ»ºîßTëUõææåía{±iv§c]®—õ" óØ¥œ‘mчª,JïfµZ—Ý>Ìõ%‘XÕÖš¹ä1³–Ñ`¶ž»a°lcÊC¬uÎÙ¡O1bf"6Ö¦)*k C(ÑYCŒˆê<«ª1¦Ä†æ)Í<¤ œÒ\ìšcòªÊD sÄ •bHôDW› YV%JU´ÖŠL)"1;7£3SΚQ$JN h,«ªs,€4—jsNÎXË&¥ ’PT@#)~‹|¢tbΙȨ‚*"¦$9)¢xï™1Išã›D(€sø‘@•ȪêSöÿŸk’‘Ù|¿çМ@¾·›=­¯5 ¡ªç"ôd-V6‚D*jDtNåQŒ -ƒÎþz˜ÕIˆhÌïÁ°Ë’f Ð¬0Ë9+<Á!,ÍGýKRø§…œRœ¢s½^ñG?,ꦰøç?ÿ©hþö›·›esy¹ØnSÔ‹W—‹Íwûmˆ‰Y© Ã1LCÎ(Ä„ÆY UU÷ý U&dLY íf½9îO–¬#úÁZã ÙÞ<±Ø¬B˜ û¢,«²Z-ÖYd˜D!8o³HŽˆ)M ÉzC¨…5IbiœbQÔa LÑ,¼óÇc×MSÈ!¤þx:ì¶ûëËgeÙ(Ò8NŒæ|}.1…0Š$c)† E±¹¸¸N9‚°7Î0—e‘“|òé«õf§øâåk[Wë›óœSN»GD†ÝQ†ðãÿäòùõù¦.*"’ן¼¶MÙ£7#‡Ð?qÝõ‡Ãîx[—MmËrsqv¶YË:³Qcú4ù…·•A¢8%g‹OðEQÎZ S:ìvÖ˜q W—gW×\™`½9K1÷][—î|yIÇ®úþË/¿:»øì¿ýõ?öã0íݱʲ^6ÕП~úÓ]ßTçç\;-íd5¶覆ß}ã-пøŸÿןþå¿yõúU]{…±¦ãv?mw[Ëþüâ*…h*_\œ_Ø‚]EÕ²¸»Û÷Ã(ét:ŒÅÕ¦f#š³!^,𔣍2[Cnè¶.Çqªœºþ÷¿ûVS2†BS"F³ljï¨CÎr2‹¦ðÞHæwßíºÉŠYÆlv»-1Cȱ_5…Á´ªR“¶©kOåbùqK»°<m¿\iåH s 6ãéå'Íç¯Ê«‹zL)K“$OÆ`üŒ€Ö!“‘œNÚú—Kds<ößþþã¯ýaŒü›_ÿ&EØËWŸ__×ü³OÚÃí‹ËÕùu‰nw¶ hdQ9M)NátÚÞ½o½¯£¤W¯ÀLú¹¹úôâùÞ¼»|x<îö’r˜Â²i4K$С›@™‘޽͒NY¥+ê"$ÉщÀn¿“ÄÎÖ ¸¬*bPI£¦,).›²v¬9Å8-›ªp,ÊÞׂ3tjˆ&ˆ’p?¡kÖÝvû#gÜb˜ (±¤Ì„¶=õ‡v:õ´?€ä•¸ª ‘gs¸ÙˆçV w (S¬Š*Lº»ß5¥}óáñî„ê¸.LŽª€Eé c@‘Û6ŒÓè½SJ‰"æP¹² y (ÉFqìXÁ0 "KU%²Öb`C b­Q‚(‘s"fbH)ÌœŽ”4ŤÄTX1DY³(¨ðÞ§(ÆV€À™rJS@ ‚Y®‚"’Š¢šRN¢’@t¾7[‹€Š)dT$2ÈÙ@¦”Mʉ4 H&ç Y– 9%É™f­‹šœÐ0±Á¬“ÄŒ}ÈYsD$BÇ4ãí3(€å˜,#ÌJ6ˆ„yÞù¢( )bΤ`æD,ÒÓ¤ž‘E#b–œQ$«ÎÑ^ CH’0'„ ÊÈ,¢‚02 Ì’‘P“0¡hRÍ„ *ž¬JVMY%Å8¯à0!<1¥ÿð€8?ÙºZÜl.$E_Õr-Y_=ß<{yþÛß|ü‹ÿñO>Þ~üû_þöÙ‹—g‹Ç‡íÛïÞ†0Zc,ù•„úÙ/>ýá«Sxx|ÈIue¼A2Ž%Bt¾h\T5‘›‚”­Óé¢8çšÕ"©TeU•õ³g/œó*€ÄlìLd-˦*—1GI“3 CL.DEÔõælš‚wŽ0LC7ó’R+†ìæb³¹Ø\=öxÿÃðì“Áè]¯× ð¸Ý~a¬!¶mÆßÞßJ_=»`gïï ñÕõõئvßÇ”ü²¦©¬b3NÁ{?ŒÃápC¦.ŠóóÍåõ¢^вÂq:,VËzyæŠÊeÌ!J:?¿®W›w÷ïÞßßx¿^w$äqÛ]QxkÜv{”BCøïþôxùéM 9ôýŲùâ‹«óóšÂ(Ÿ}zq±ÊSÿ8t¨X3¾zqî¼Ûnºþ 6'B óó‹º.|aîv»œréËËë³±=¼ó-2[}|xøðîýÝíC˜Âf½²d@ñââ"*Ë‹ÃétPD$¤œól {¢³Ñ“„%g!$"4†¾¯8k˜¼`ùpbR"2ֈ̠Œ`A¦BÌ©(=OãÄÆÏjùZ„Hd™$³±ÖÌc\ÎbŒÕ”­e$Ì1 ¨dÉ)γ”æ`ŒfI"€)E™';9išÒÌYFÃè<[ËY$ea&TP²  ª³„rÎ)O*™9§©(̼oN)8k˜ ˜Hf/ M1"@F„‰È’±d-BÍYŠ¢ !Å™Áç”À0ˆ™®Yª)T ‘‰ŸÀ¢O[¹» ‚JD&ç(šxþÀ™QÔ’ˆðéÚO¬$ÂÙ &³D €hžàd " óø‘Tt®˜¡Â¼ ž}$y¦ÖAÊY@­uóVÆ“£fë,迈ƒV ÊØXºº\GûÖ­³¾²Eqšâo~ûч1üúŸ¾µ¼¬j¾»; qè'UeKUE‚sÅÕåy»Ý™ì®ô™A…1&——7aL¤¶ð¥7”e˜b›§`Œõe¬g›Íæüª¬ëa8Mcwj)…”£¸ÂWUU…ä¬÷ÇÃØ9HÊì˦¨Šýát8r Þ_Ö)CY6‹ÕzˆÃ8Œ$„ˆIäÍ7ßBÂÕæ*)Lck,´mŸ¢f‰ É{.K×î‰ÕW^wS 9W8S»®= §¾?ŒC»ïÛmáR<;ß$¥Ãþ€Y šÒ/âͳó¿üË?³%.–eûîx(Máy8n·í¡¿º¼èÚÓý‡ÛºYóíïoÚ1j˜FÉœR>ìv9 {§ «U½yVïN§C³(«¦¤íal;Γ÷ý0ìO0{{·;žòñu]UÖ:b†þxÚ•UEÂ:Ê'[TÆÛÕ¦Æ#—ÍÆÔuÙ¬«W›«aÊίœ¯¤iλöï~ù×ç—7‚Ä.žGUóòù'ÖyTÕqÖëÆ¹úþÃíÃÇwÏ/c»ºacâi½_:»Œ19›rèþß¿ú¥åÕöîúþâ¬a&_4>~,Y/VM]ÕÝ©ƒ¤Ã»!7WÏ_~òÉÐß[ý€ïÞß2()Þ½{Ø\¾0uõÿüÕmwûÏôé”äqß²õöó?º³†q§ˆ)—λ–|Å\nï÷†u²h§6ZDÃfèÂiw¬ªfœbŠ:vaèFÍÒ³:W0QrÌaŠÑ™jšt #16ËÊzS6uµØìOqH|êGaá¦4nÑo>>4C¤g¯Y3þî÷Ц(Ýtš6Íèà´ª0L'ëüeQ¯Ú~húæÛ£뜉ÓÉ»¼ÙlD’ p?䘑 +ØS;º‚ÈÓe –A¸ØG5†‚f`0¨œsé3Æ“&A´¶ÈICˆÞ•ƺœsJ“±<+S΢šstÖUU=Mc˜Â,öEÒŒ1'Ò$Þ»”â¼ØÍ™‘Dó\-0̌ƲeNã$€ÌFs2 Æ€äSV"$„˜â<˜¶„9'U0†ÙE BÃ1‹A˜«9‘dP6$3)DfÍÂÆdÑ”S–$†]J2™ÈcD™)k’YZeg Ûœ¿|*çY-† H**  j@ ᬣ$2†çÄÑ šõ™*¨Æ˜yú/šE„ÉP@É<Á· ¢ÎÇÅL«3ÆHÎs;Áû´Ì0†cJ€Dÿì krÖþªªæùòl“%îîÛCשïÃíþkûuÓŽývÛ—{ýÙÕ8Œ»mâ ¨¤ÞZ_”Å&¦Â—®Ú¸²öŠxys}~yÖ[Ôœ$€R “b(êB)Bj‘ × Ù¦YVëK6.NC<„Æ $HÂLÊœ)$$ÉIc´Æ°u…÷ÖÑ0ôÛ‡m„”rd óó :EU SØÞïÆ.öÃtuuÅ„·w»”IR^-ê”SVúøñv½Z¬Î}ןRJÎû”Çã±õ¦ÈÜ}Å~á”e±ñ ¹j6ÂKàYïXž]­ÑXgÊäx8¥C§Ñû’$ÇCŠhKÛw‡Ð·ÝñÎ;ð ¦'•§På0ôBP.×ã~ûÕ·¢îÇ_|ql7Ï^ªä¿ù›²~U¯ÏêUsýâ"æQUîÞ|øío~µ?Ü/6‹‡»÷·ûa´Ö[¹¢º¼¾ìúã»·ßýêŸ~W._;ýö÷oïß~<ž?ûÁ«¾oOíñâ¬f“Miº¡O“sÍ‹~¡ýÙO>ÿîÝû”$å²(–›å‹OŸûªùê×oÿáÿ`tzõ|C8µÃùMY,ü×_~]W5{X.Vï2Øc›oß$eæ¸?lC_ù²´aŠ `IUûÓéHëå"¥b¶)¦öxpfþófï]?õ¦âES…~ˆ’ÎΛuS•®,ˆASÇéq½²ÓpêêÓzÈuLõaoo©8i2¦[VÖÓPÃÙ¼¿ãAh‚NY‡)uƒ°iêU…(¤i Ú¶ÚâЇ)à4Š(Ça2Ì ªäU)æœeÚ\T`C±°uS0heMLQÐdQÀ”¬±)jŠ’%ªŠ³žÐ–µÌ¬ašˆ !ª3h03Eg¤pFrQë _Ú¢bt¥¯œEË„¢ s”–˜@X2E ˆSÌd˜‘ KÉÀ9‘A2 ¨1 †¬Ñ!°H&ç- ZgA5„Àó/AØ›RA}ºkKLÖXb"6@c`F€<;Úg|³" ÌUhPBš#OŒßk‰!+)!°fÍH¤@ JßÇ¡0çYbd”’ADYqIrÌsë9+ˆ ™¹ëÆÆBb@&BÁ0F0–…$'B0@'F`DDHf1¤ª²ä,†ø_8@IÕ@ÊùÔS–)ÄdBwê¼ó§±0EUœ_¯½)îF èDZt%„8C{:-×Õ‹W×*©o‡år!§©¿º:aarD¶(lU{¶S– Ñ”U]-–eådºÓ¾ Q›3ˆ1!›åbÙžÚ~R 9¦”SQ•Öðþð¸Ûn‹¥)„ ™MŠš€r–r»ïWõª®L¼X”ìè݇w zss¾\V`s~6ã³ëkÉz:ö†³E˜ä´o%å0NÞW)NÎ1H6èØ[.e ÝØËËeÆrÊÛÝNEšª)ˆIW+ûüÅ ãÎ6çM]‡И·ËÅù'Ÿýh»Ûî¶w7×ëÂãÃÝn³9+K·{è¿þÝ{ ®ë¦q,*ÆSSâåe9uMýzéV‹b¹,–Ã4ž>Þâ¨ÂxØ>>nwŒf÷¸OýÐM¤4õƒ“1TWÅñthûhœUãáôøömÁÜî•-ØúÛÛ;Éâ½W‹«óåúì÷¿ý¦^,ϯ/chËÒí§7ßÞÝ?l‹Ò•Ãí¯õ·Þ½»ÿøðÿo?ŽûoÞ|ûöÝãíÝþááñáã‡Ýö1ÆéÝÛo@âj½zóþã×o>þÃßþýîþCˆÛüèÅgŸ½þê˯±]ÕM?†ŒöñáAþ·ÿøÿ÷ÿóÿ8mñ×ÿ-ÅáÅó‹ªÊ›õÊpóìùÕrUÿ§ÿ뿾{sÿñýÛ›«…µrhÇû]kŠðøpwÿv¿(˲°õÂOíÕÕ·>LcߌÑË‹3bÌ cÃ4M—W×)Ê0LeQgVË…fÇ‘‰ëªÀi €ÜO#—UÙµƒ® ¿l D‡!‡qé-B®WgMsØß<_žNi˜ÔþrS5žê¢J¡s&lµÄKo²Þø›7fÉÙí¦ŒXÖ®¬LQdƒ>MÔ·«eQÕÜlš,±ô$9¨(Oƒ°N΀c }P£EmC\¡MS0 oxŒS*Š‚Æ)¨ðÐGc<„¼+Lvž­c@ebDÈ91Ï^軎”+k–%y£Õ•Ö8&k 1“5€š2Q‘""¨f”,Þ[d(J(Y"2ƒ¢„9…IŒ”r2Ö‰*fAàœ&†lPœç,ªÌ”sT‘9z?g¦… e‰Ö•ù Ì,’ Q@f6‰¢™s33ãPAsÎ* ¢@Ī˜²<År5‘Ù"IL4ãUežûÏ47$Ì)«BŒÑ;8ë‘1KRH€ óLITg|éœ$˜ñ€`2!‚!N)!@La–>>©ÁˆtîgÌœ"6l­Í’EÅ8¶–­AÄ?0úž4„ŠÀ€šµ¦IU‰Œ$ÉSpÖVM5å±Û÷‹º©Wuwì¾ùún}¶l»Ö‘U"¬ëZbZ,jU8<nßÞÆëUIŒ’ãýý}Î$gèþÙÅÚx6ήVb;“÷&åÂȬ‚¹ï†fµòUÊã0]œ],ëÆ¶Ÿú±ësL«õ*‹ŒCW”ÖY;MaÎYBTc‹˜@$瘷†~ôÞ§¶Û]]/µiê$Ù8wØísÌ’°,êiÛSÛîûi›²t†‡¡SM†ÈYcÈ圌A $ Ýзm›býз]?N–]å«óóM½°E¡Ÿ~þr±lއýñÔu£tcw¿%tÍb“ ïîo!”©,LÓ¬þý¿û·ooÿîo¿Ǹ^¯CH]Û‰"1‘„Ï?¹þŸþõŸ$‘±n\U§ö¡©Ëwß~h‡<WÕ×À£J–²lвFÔ¡¦I‡q‡6 Ýæò,AÎÍj¡ ýÐ àÙõÕ˜8“©˜‚n·‡Ýn‹¦\,u³úÛ¿ûUµX]<»h*WUþí»»OÞSÎýãÃûÿòWÿéï~ñËo¿~ûðñ0ôÓ0Æ$8!Z,çUY×eU”å8 ûÝ6§ÔÃþЯ–›¿ü³õêåÅ_üëÿä§Ÿ‹èzuq|÷æãË×?@[¼¿ý’¶ûÇÏò“¿ùë¿m‡Í²* &ëªî»ì ¦øO¿úö«/{yáÿø_Dˆ§AÉVË3WXwÞ¬ûc[/{R¡¦ª.ÏëׯoVË ¯Võͳ g©°6MBÄýNÇО&b\­š®íD„»Óq¦ªjÊz‘²E™R¶dꢞ?êCßè4N¤À ŠÈå²”­úbüä&?ß<^/>®‹ãî€!´ǦÀ¦ óóÒ—ñÕóÅî˜Û6^\AŠ=šEVÆa±0WWÍýí!MüúÓ«ˆ9kv…©K{v^¯WK&BX4´^ÖÀ“³ð4„¦,Ó88k†aÚÞ[vÞÑ”“H†ŒŒ†‘¬a2è³Æ0qH)Lašù“̦(‚9Å€JÕH‘ [œéžTPÑ4Œªb`2)FÉÑZcŒÍIbÌQbQÙy°/"3"Í’!b ÔœA@ôiÁJúÿñõf½•fYzÞöð g>$ƒ1åœY]Ýê¶òHÐo0 ÿR]úÊ€ †§nCRuueVedƒÓ™¿qkùâc,Kn^ òâì½×zßçŒ)ε7–IbžäŽS õ”BPPqÎ"‚µVDˆ™©ðÖ°aÄ”Ò$'N1‹hŠ9'a6–­Š@Œ‘Ù$TÄœa’fPJ™Èä<±^H 29ìÄhžúb8e«¦~ eIHÊJbzMLÝ3žZ /Sx@͆˜À°!0Š:9Ŧ8Ó¤Õ4†³jHIATD,Û,yJº2b– „ì줶Œ’#[k§ÖÐûs™ Ar¶dÉø>GdÊ1jŠƪrõ²ú¦n׋õí»ÛûÇûCH]ˆ½Fãl9Ÿ/ˆD‡.—4H$„ddg6›Ms¾\.—¬c–ÑRQÖŽÚÒ•'¢ÃaG˜›¶­ë XûÐ:gÙ™$)‡4t=ÞžoæA⬨AµiÛ~ªÊÇ8Nz0@ BNcÓJ†t¼\.§†€²&ceµ^_.!1dæ‹N"ûÝ.ÇY‡¡5n®×„iºÕbqØíû± ãà¬Ú¡Ï™òÆS×5Ýc&à„5§˜rJêŸ/Œ1Ù9Þn®Øjs>Ö³åúöýÒf±ùö›ooß¿iǾi.¡dÍ1ç|8<ýøã‡õ›ïÞÛÒ¶€*gþö¯~øÛ¿ý‹Çç]5[±«óªºJ@C.gWoúÀqÄYeß¾¿Q¶‚.ªXÏΗËõ­-]9ãÛ÷¯Z ‹Õº*+²Yrð¥+3£– Xc»Vú>!’HnÛ&Çá˯¿üùãçǧãÍ›÷¾ªî?}üåç_ާ¸8ŸŸ>}úùñþÉUëÕúúë¯ÿr¹¸½ºz}uõz½¾}÷þ{¥kz ;_])9WÌúA† ³r.czóîÝ—ß¼©ûÍo¾/ ·Ûí¿ýî;ž)4Îû¤ÊŒ$V÷¿þ_÷ææ6¶ƒ!;tÂD15úã/‡}cr}÷íz±J¶²OcÈe¦øêæv9߫咒Z‰x½ßÜXÀ( UYª†ºù¬ê»ŽÕ !fÁÓ!5—®šEÉ’!Ea§KÓ çvD6…+@Q“ Ñ€9ÓtïDï\È8fî#ÅŒí8\š<Že¾ZÚÒ‚3ë][-–UNýùpŽƒ~~’KÛÏmîö_¼½Ú\g0ºÍþØJÄÕ|Ö C;€ñæùð8«Ö ”€R’œ›à=;È©^VÄ ªqˆ cáhYš’“3†È0›0ƒ@L\)G&pƪsd-ú‚ oU¢aUUFI ‰%¦ÆÍ!Î9¦ª(b d I@$F“É:ŒI”¬aoMQÖpJ2 ÑHJ‘AYQ «ã—–€5Æ;ˆ€ ŒAãØ8cHXsáI!Ai*Ã"ÀTòÞ#²êhcU°vÇ'cø¥W)*"€L‚2†LÎÈDÄ# Q2eEBc™ 9§ŒÈ“¢ ¡ˆ8oq¢1«jÖ)—ƒˆˆÖÚé0 §4i$§ýÀ ìˆPT-ZP1TYÄ„hBJHD )ÌÀŒÎº—áÔb 2¬ ”'jžAÕ¤’@ ½‚1$öÞÿÇЗg *±°7žÐ*ز¬ ѱq(¿ùÍÛ¿ýß?ï?=8Wr÷w»1¨ç,¢™4‡¾ a 4IrH¡k/d¸^ÎêÂßnV•wÈ6F!Æjæ|]¦”,Od ä¡ë/§]UÏß¾¾}us}¼U$ô®.JÞl71Y&g¼÷‹Å2GýüñÎ`RNIØXÀ·ïÞ"b{>—Eª}h“v9kNh||Þ‡!3ü2’Æ0Ô³âîáî´dHEiOmßžÎms9Œq„˜$«É ŠªÞrmj·Y_ÏÖ«ÍÕµ-}ÌaìG†1À²¬ƒÄÃþpÜ]>üt÷æÕWËõØ¢úôñ“Äô|ÿ¸Ø !eIûݱš­ËÍçO³†ºžívçqègóÊì›Óf欳äªý1UåëêÇŸïÆX”ÅÂgL.Ëlܾgåy½\­·A"zƶ°öÒ<±Áõê†l~óf]Ϫ¦éÆ!HJ…Óå¢D¢.ĶëÈ㼣ܼy÷ûø{c)n IDATwûçûætºö—»çöâ¬!›«7ß~óÛE½°°lÎi»Ýî$j™´§=v1 1ާóaº0ä»ÏOoß½oÎÃ¥I><žŸO¿üéO‹ºýq.³ùì‹o¾²¥}|ø\;»žÏ÷Ï÷!Œã@¿|ü`!ÁÕz•Dž>Ûóå˯®~ûý;‘nß탎ÞÞ^¿zþø`YÍæñØlWÕÛ›Jõ|nû†ºöÖkí8Œí¹KQ4¤Hl‡0vcK–Ê¢\Ô³¾¹xkʲÆà¼?>bÀ1$rRÖ–™D„¬µÖ„˜Šœ°(êÈïÃû3}~â?ÞÙŸîHÈOw'ÃLÖ`®rn}ûÆñæwÿØ…8X6É2µM{óz9F85…NÕ&ÒÙÂÏ>g€œFc€˜ÙðáÔ=ï»4ê¦**“Áaj†Æ@ζÔ÷QÉPV¶À”!j‚˜¢5ÌÌ ¨Î8P`ƒ"BdTÀ”ž²óìœÕ% ’sT6JvùĘUUrbÉ9KN9*(刘‘²ñˆ4©“P²¦œÁ2’B&¢ìÙ"iQb®M)$•˜•Ø‹*L† "FfƒÄ â¼Qd0«fIdH@%«fd„qÌŒ– O@LÀŒ¤“irJè;‹9FšÎDQ±ÖLÞUù5¤9çI(ÖZ0&.£yQdPE}© @Γ. §X'ˆ0;k ‘*7A $ ± HNé×¾N&ž¢ª“¾~š¥¬Dˆª¬Yr Gâé8úO÷€@Ñ“{uuÅÌÃBD’É1ܼZݾ¿ùÇ?~øøðtl.û‡æÒ1›! 1Ñ<«ê¯Þ1[Ìû®)O–a;6´½^+Ã¥kBˆ1¦Åb>_Ì«Ùüùá Ò’ä®Ûsç} L¡ë~þÃCÛ•¥‹!/—Û$éþñž‰T“Cè/ç‡Ï÷iŒy)σÀ ™˜š¦ a,} 1¦¾ë£ÊäP—”µ»\zûæÕjUǘÇ1B7tûýÞ“Õ„çvÜϱRJ!E@Ñ¢,ÀZoÈzëœq– ëŠÅvõÍo¾GGóÕâÓç瀼·Ì%}÷æ]Æ!„зÃþqRš-Üæzñ¼?Üß}<íwÓ¬.ono/MƒJχóÏ?ß÷MXnjdz~Þõm[U…5ºY–ÿÙ_$tãÈÖÞÜ.cîrÒæœn¶¯Â0 C»½š7C·ÛJW®·7«ÍÕé|ÌÒÝáü¼óVK¨ÊyJPåéxDZðÎ8ƒ”PÉ&I¢b™ÏŠª*2`?†_>ü¹ïºóátÅÂ×}wyus»^ožwOÇÝ!' Ãx>?…íû¾(J1–Ç”|YÆš¦•›ÍÍóóåtî·×¯î>>µ]>5¡i›¾»xJ±;>?|ÒœO§ó¿ý¿ÿ½7”ÇØ4íÝÃçã¥ûé§§aèf…Aï±^ž$RZfÆs?`a-Ïþíßý~µÊ¹_~yë¬Ó\d‘Ø·"c{vuQ8¤d­† J†ìùtnÚ®¬H\Ön¾ª·Û-õ]Gˆˆ‘«9‘ΊârîR–jVÇ!IRUè†NrtÎ ýCÐ1™˜° )$ôµW¬†PˆÎÏÏ­ôŸ7Ëôݳý/³ª­ óá§|¾p]ºßÿlƒ!)RÎRQZçi Ò÷b s$@nš^Æ¢f0€Ž²Õ”Ã8ªH]•!ÆÐEEbAËÞCJ–5@¤"Xø RŠ]yÆ‰ËÆL¾ôlÀ& Æ(až†½ Ù“H I(¤ix9 €ˆÈÎZÓõÔœUfTT2S@à (mˆ ™0Žl ‘A UqHi  ³`PA˜ I¤ b¬%²Ì˜%[g@§nCP É 9g™>ÙŦJ”ð”uA-ŠÂÙåWLN6†’HrÎN’KfdÒ /ALª  é%´óÂQfC/ ~A÷"ªä :ÉZ0¥„HˆüR»%šØD¹-3²)Lh¹_-c8­. [˜˜ SL&¸£JÀ—3 eÒ§˜ 3ê´»Fš–Àÿiä ɉ¢A aØ4ªÂº¾ZÌ—ï¿~_.gOû»û'AMcmßgÈ “EÅåb9æÇÑzs}³½¾Z/gõÛ·¯ßýÕÕÛ×Ý0ƾyýj·ÛŘšS“Š ±9žÎ…/ ›Ë¹ëÆ&ÃÌ—–ìÓî)ÄTÏæ)¥¶ms$ùá—cׯšã¹mOýØ>÷j,µÇN%á¤ÿ‹ã˜R:ŸÏ}ß[WÃi^¯©ïÆÂy&:œO)ë娮·W§î²¬f_¼ù²®×]È€y³XÝ\¿"cak­sÅõõuéŠCYVÆø À…]n–mß4ÝyµÝ>>œ4öÛyÞ¬ò£"¥ÍÍ2޹iF犛›µwt8îDZ¾¿ŸUÅ»wob ý8Þ嘔Ì?üÃûæÝM‡ó©iÏC×·ÎÈ_ýö«¯¸%EÑ«W›ºÝîá°Û½>ïvM{¹½½) [/··ïºn\¬Vý8æOû‡º?—Ël% æxëõM Q ••»º¾ñ†î<"8cŽ»wfãÓîrR 14ÒŒqµ~úÆhŒI1¶M#YÆqxÞÝ+ÃÐì÷;ïKPãëj}µ²… )W­7·§süðáþ˯¿õ¾üéÇŸ…L½\uñþÍMs|†<œÎ{C®9u œBˆcHY“±ï¾ú~½x‡NtL9!jU–Ìf¿?c¢“¨ö©ÏÜ^vá¿;ÌjûúíÖ—$?þãÏ—ãYs.ç5WµwUU•‡Ãîrnç7›µ HÜ#±Ä<:_vçKÛ aV›¢tÞg *-€ÖuÍl·sbQU ‰­KIuÈöxNEµèS*BŽLÃØÍË_¿?^mS—ÕÒ‡üäœû~[Të»"›æêª2¬D`½3u¥¢ÉTµú!¯Ës3(º!ÈpÉmsÞ,êÊSU’uvH ä‡rLeQöÇœ4†1§‘A ³±®» qˆ*JìQ² õH†bNé¥x¨”b6F­eks †8ެÀUUX‹Ì9ÅžÕxçpH)‰xï½±–LTLŠ1 ¡a´¨$ƒfQB6†@!c,)Šh"&b«1“€ˆf͈0gèˆ Y ç‰  €À’ub®©ªÄ<¡ò™”8#%fÈ9ƒJŒƒqäc^2©Ì–ˆsÊ9' šöµ¿¨ä©†* ²Lú‚—~•ˆ¤œ§AKJ‰ˆ˜I^`—:µ@A³dDÌYàW ̯;ZAkí„,üóO© ‹DÄ /èTAÑ ÈSß,¥DLÎyÌì½ÿÿAAÀÔ[#I"’"Z6›Å¦í.ßýö[tðóïì.1‹cS¾YY%kLahšã‡cÊÉ&Žýz1_­–ÄLˆ9fCZÍ|×¶†m[ë|ˆ)Iº¾Ùn6³ÂÛ¡"_t9—›õ¶¬Pž3ÄÆ¢¡¢ª­-ÙxWVÕl¶¹¾]Ü\÷].-‹âx<5—KÓ4"cL)‘1lr3IúÁ2SÌy¹¹ªë9Düö7¿9v—áФš¡Y߬‹²ÈCDe¬ge]W"@ I$Šê˜®Êâr< ÝÅF´Íá°ªÏÿå?_ŽÝ©íqLì«¢šÕ]+Ïgï‹¡o ›ªªg³Ùîñ2*PLúôü¼Y¯s–nŒÏ»ÆûÂÔvýù4ä(Ö1Süí_|™y¸t±(IÒý‡G͹®ªûOÆ™Ív£¢)‡œ r]U—®ÇׯÞ|¼~8ï÷ç>Æz³¹úÓŸþxwwWUÕç»{b Cÿpÿøøt¹ÿ|¿{<¤ §ýáùù2·ýÈ)ŽEU?7­õ§þ¸ësÒœ´m»¶mǧ…Üžú«í櫯¿LQWëUÓS )æõöÚWóû‡cR]¬Äx>Ÿ67Û¯¾ýb5+@ªîçnHÏÏ'ã¨bÃ]yI¹ZÌK;?<ÝÍ×Y‚CÛ°µÇó%%!²]F±úÎö|z~ý؇<¿{÷úa†a±XH6óÙl¹\/ç󚙈u/— x:œÛneUšÍ¬1Æ;G(…£Õzæ<9GãÐXËÞù_~¹G²ˆÖ˜ɆýˆQ€œa® ZÉ%Ì×ûÏþRg«q~{õ¿üÇŸºõͶœ×‘«Owæ–!õbй*Šqlв|¸ GÛ-WåÜx¯ytr½0 ¡$Mã± eåÊÊ2¢7ØtñؙʿYœñ—ó¥žW †ù²¡àÔM—C$¶…ä Š"êœ)õcLYÐ ¢bb Ù:ðž5)E lûVÂà˜a§ †3¢jVôU!9AÍ¹Ï @DÆ!†1p ’%3¹W  j­¨8Y4å¬J–UpÂò˜)R¤‚"ê¼!œ‘03+¢6“­ AE&'#+Ĩ)‚µ¾, bÀý™‚wÅDGd˜ÖkRÊaŒÌÌ<)|õeŠhˆI‰ ¶*yJý§”½dOMb$b˜ÚÆLµ2bš¦A†íýÕ9Cˆ"@'ª!*`FB%PŠ1(Ê9gï}Î )N­5ý'h 8I h6„`ÐCFAüú‡o2ëáxñv¶Zd=ö¨TxFt—Ô^]ßœ.§4Ž}ºÐ¢%†ûd$Iøñl¬u®ëºª,Tó8Ffs˜Í­urišOŸÛÓÙ B7ŽJ \q›vìYJƒ¶*˘ÃaPQëJÈ}²‚”T‹zdB?¤0d §Kß\Î :JBtÃx¶†CŒ’…Ñ@±ØÌ­™¥ÔûbFÆW³ùóî¹ë›ßÿþ,›ùr=4'dQérÌŠØu=;#¢,¨}0j±¬Êq}å•R–³YÍ"»ÇÝåØªé1úoßÌV—pê‡>uCR“?|<­W,J‡Ãe6/ªbâc¨f³«|SÖåÇÏŸwý|1ß?\º~̲¼ÞÆ®[ÑH4}7†¸/ªµhºáO?M@Ã?üôÞsix>«Tô°?-Ö›Ùf}n:‡ÔµÑXƒe}÷¹ïNÞ°­‹Ø¤øÝí¥}|xèÚÁ¹ÚùyHE.±oëz÷»æúúL¶Cç°<šÓ®I#ÕâÒîŸ?%8C&¹¹}WÏflŒqýù¸ëÛÓj»|÷ÃÊæéñ<cáL›E½vžâØåqh.MìmsyõæûöOÿ.„!'jú>\ÚS"`1«þîÃÿ¦ÂChîù›¯^¿z½-™º~\ÌëÇÇãþs¿Z_u)þéã¹oÅx.g¾(¢î·hÄ••€Iç¦&’_~ù¹®æi4Û=ö]ßõeá«Ê)ªåívhï?ïRJ„ž.ȦR0¶†˜ÄZ¬†¶Ï­YæþBø†îcÿø/þù-Qù?ü›»Õê&Œáó£ï;©ˆé6C D´ÂoÞ.º®%Ò{”:Í@³.×KC© 0Æl=\Ý,ú|À{M…3B¦¨qiaÈYTÇ‘†¶Ï`³Š/ª(9_šìЬV²B;2¥¢rY“ÚZ6`‹r×¶À±5Š9…˜ƒJÞWA¢è`ÐJr)æ˜Ä:›HRÂn l FE³%—cB"ö5:Ëô‚X01Ž’€É Li˜8¦¨ªÈ”$ëbÐIU!'@!µÊ΄1gPUç ™C¼s 4‘ùU€Ä˜¦¼ !UÊ‚’5ŒCÎà¸Jqº#²(H–˜6$ $Y%kB˜EÈY&&¼DQ$KÎjiê‡%‘dM1&@UbÖ<™ÛET Í3"á´‚V`å k'85±sÎ1 ³!2"SÍW3ª"ÄœU-OH8“²ä~´®êA9E4¦ø§`pSšU@™'ª0šÒÕ…÷³eSÜïOÇþx„.EË\’—s°®•ÅríŠÒ6d³Íf}»YÝgk«íöÖXN)lÖ 6&œN—Ð%~ûîö|Ú•Eyw÷Ù‡ÀYòÕ¦”²ž;G¿üüËzu5[mv`]R™UF¸]/|é7›m×ËYUå O»SRŽ™Ú>´]Û6½söÕëÕW_}QZ¹ÚnšK¯ÊeU‰•Y‡v¨«Â:pžš®Ùíí0|º†°¨Cß®T¶;ƒäº*%W8ÃÆ28‡aŒÄœ2\.!gq¾JÇëºf£ãØ!`NÙ´V®®|×÷šN¯_~øÁ”äÿîÿøøðhSúöfãvû{âœõXåéÜÇ0 ôÞ«år¶ôlåéùùævËFS Ûë5îvǶé‹Ew9’óy5Ÿõ!)9ÎÃ@ &Ic’ª²ºº®Pãiß÷=hʳ²l‡0†¤’YsU—ÆSLIEDs 9 ‰@é½c(E&ÁŠ™ÉˆJ;k8¦ÄÆ0ÛJY ¦<¨aCH`ØT8VMŒÙZt†P“g U‰bÙÃ")%‰ D~ÕOJfTy1à* jÌ ¥8"ÁDÎTUF$…œåW-0†˜H2Œ!¦$ˆl À¯&œŒÄ¢JÌH ˆ¢Êl€˜³@΀hÈ0L—zQÈ/ˆ`"A$PT™”g@ß@DÅ0fI1E"Œ‚/ú „ND‚B6ˆ9¥”‚÷{zÀä0l&,y~™ iÎSŸÁ2 OO „”bL‘ˆ‰ÿ‰"Øÿë{– ( étÒçËqX-ê²´§ã¹ª*ëìííë²óÕ0Œ¯^¿ê/íùŒà¼[•uùêæê믾²e •óºšÏ«Ùr{sò¨D‹å¶žÏ,¿Ô+Þ¾õßÿÐNŽðêúÆ›B³JŠ Ä0ŒmÒDdÖóªªù«×·\4Ä–Öë5. >Ÿ±P2E=#¶óy=_ÏËy娼÷í|±ñ…Ÿ/æÆ`Qx"^,IBÛŸAsYz_¸®k4&ÉÊÆ3³dL!…/ § Î9ç˜ÀŸC¬fó(âÉ猷:H×¶Cر§S¯Ÿö}ÄÚۥ汭—w_|µx~gËã¬õÆ—ÉöCÜ= g KL3]Ça¹¨­/Çóa·ÎÍwß¿Ûܸͫªo[dÿÓŸî†ÙÑ¡=4ùéO]×·}Š 6vwºlo^­¶[EvÖ¯VsoM{iÇK¼º¾ÞÞ^o^ÝŒCÇÜv Ù_Îa¶Ø,×WïîÙòÕæ«/¾ú*@ˆã‡ñ‡¨©¶?þø! ¥”ƾcܬ–L2·æÍ›×ëëõõÛW³zfØ÷ÝøùóƒóøæÝ»ùb½ßï»þ2üõ_ÿõ¹kú¡-¼O1«êÂÕõr17eåDÑšâ¿ù—ÿ ŒýÓÏ?g`ë¹^š›·«z½X¸*‡|õÝ7~±züüÜŸ»ãþTÕ %“Çs %¾wc/ÇÓ¢ô³ÒSÖ<Ë0/«ãÓ±pÅñØUUYÏìrUÍ›Õö¢ C;Œ].Ë…*Œã`-ª5ZUv¹¨h$ºAAMß§®É]|Q¥91#Bb€××›í²tn̺GLlªÂ„í&|û­|ù…>=ÕÍðþúýUêNÝ¥7”¾ÿnýý×»Í W«ëãyCò%)"•!‚Hö… 9*bˆ8Œ`]1«ÌbQjî !¤Ó%ÇèsÂ!aŒã0#Å¡­*²6ˆBÊÅåÒ-Ê¢rF Yç꺰¬€Ø -Ù”3¢v*&%E„8ö Ir` -AzɃfœ¬(C¬"öŒf;oÙ0@ˆÁr†yºaªŠ¢DÌE,£`Ɇ¤ô–QSÌN…sB±Æ°Q€Œj„-"‚² ç*R&k$fÄ”â4nÉ/Eb~A3OÄ9 «ˆwŽ‘…„TÙüªg!ù•¿À9³e攣1ˆ„ªJ¨’ AE”ˆˆ "¦©ƒ6 åA€ +@Ö,‰ÀNå.0Š„¨¢bøåµ‚D¾ôŠCˆ¿Ž@rÎD“¾m É1«(±&Faƒª ’…$Ë?A¥?÷ 2$ cª¹²N•7×ëÕzv÷ùÞ{W×3b’}á]aѪ„Õv•Á:[0![زIÞ¾~[Åz³xu»šÕÆ2‡0:ëÞ½ÿêÕ›7W¯¶‹uýêzí]yûæÍÍÛëÅöêtîó®pÕliØUEuuû t¢àê—_¼ýÅ›Ùv9›Õ„S5†™ˆß¾¾Yl–eáqq½®—óÂpUWcRN1EDØïvÆpÛ6ç˺¶Ef+YûKÃLCèû1¶ÊITrÃ1'R$gcŠRÌK26÷qˆ£ñ~l2—woâÀlÙpiíñ©KCžãøæ‹îóÓåÒlÁRÈÑ·\nõã/ŸÚËÙròóyz<^TâÛw¯>~~Χýórå¾ùîµs’b(lýó/wûY£Ÿž ‰â˜Á:·@Õº˜‰àõõ«”bŠÒ÷C]Ù§ÇÇÓ± CþË¿ù-Y~ýúËŘ²²¹ºÝïÎï¿x×t—›WorÔ¤åâwÞ~Lm½ùâû¦ïs$Î"W×WÆ£ŽÃÃß½¹rÞôc÷ðp×\†¦éΗã·ß¿½¹Y+Ûÿóïÿí¿ÿû¿_ÌgÆñýç÷w¨PÕõ¬žõýE·ÛõëW›ç§ç¶ n¶Ù~ÿ›ß|þt7ö±=>Ï*ßô]aëaˆÝ8䇿|||¾ìΨ”3–¾8¨æ¸käæj™Bº¸ÚeIUaÏŽ(õÉ ]/—êګ/<¢ÌçEJÃ8t³²Fá¾DB5ãív±Þ¬Â˜0Çΰ³¶P@I9“±uµúÔ´Cèûx¾\¬£ëíòzµ”âþ¸ë{½¿oÊJ7ëŒ÷Ÿ÷Ý©¿(¾îÚýlaËYž/¸oÂ_ÿ•}û¶mOéÓ96‘=GC‡Cæ EYÍÇ—¡·!r×Ç®i»æðý·¯ú¶KϽráJÓ Q"‘°sESY•@ZU³§ÝÉzo1 µGk©ªkç b4ÃØ#¢™.‹}E kN†Ô²Ì*C¤® ÈAb0ŒÎ° a¨­Ÿ ÿDÈH¨É²!Àì-dFÊšœ5’Å'’ñÏ ­¶Älˆ‘¬eÕh #"`ÎBÌCfšö¥ª9gcP!‡”QYA¬EBbr„Œ@9KΊÈ1¼De¼3¾0D¤ªLÈ9+ÀÄíÑ?/`_ª¹ð’,6™Y½/+MÔjDch2xýÊ{CœàãªYej_¤œ™³“"‹€aœoŒ`ÄDM!EUÅœdÉ!Ðì{é¾áŸ;¼@ˆ– 5#dÔ\XfPÃh^ B@J ÿ_è¤+›†_ÈDð"1˜* Ä´š¯EàÍûÛŒéx8ë,Ä<.·«wïÞö}ûþ«×eUΧ.o-)œÏ@F¤ãáÔµÝz^¼~½X¬üÓÓs{écÄ1³¯JãÙzã‹õ«›AÓãÓ!gu†WË9³_.Ö¾(+æëÕ¥=cK¬å¼Bgno^=~~°dŒ³ÖºÂ+d@Ùn7ÇÃÞ0ùºt¥µLC€Qbœ(¯)clß÷‹Ù,EúdG•¾¿Œã¸\oãÔ8SÕY&C)†åv#(IRQzfî/gP 1uù^6_›«!û<ž¡BÔ»ÇýñÊV³q\ž›ÇÇG㸿\*kæÕüéá8›-–óº°TøbVÍâ(Çý¥,œ5NÑvÈq³® Ç)†ÄY˜É©/ÌlV""JØ?~–%Àb¶¬«ÒVUmU‚óžˆCˆ€©ë†Ãá,¢)Œ‹Å‚È\.çª,c¶ÅÎ3 IDATÊcÔ¶Ö{f™ÍŒJM¾.DœÀ2d?†ûÂ4Ã%œö—ñŸ¯.Ýþûß.}Ynn–QÆÙrs÷±ù›¾»´{(«õ¦šWÏÏÇ¡Ç~€¬¹*"%á¶±cºTØçzFcÛ‘†õbÉSÆ8DˆÔ]Æ!¦jl¹?tc7zGÎC6°òíû\UEÌ)&ad•LÄaȊȤÞRQ˜”’B 1YD!OäάÈÀSu+CF”“%0Æ(ÈôAOšRœR.½ €²À˜â$QÅœ'c0 cÖQ•EP‰Ps6LIFuÖÁä~ˆ9eAÀ—HŒ)gÉ“`%ålØ*€‚…›jR„:‰ÓU€qBçHfžðøU-‰L0 R 0YD¦W9œ“Ë7kND²fQ@˜EAAEAEI­e‹¨¢¢šAbÀÉ2/™X”yæLP&"bRPD…é—‚‚ˆNUa&&$R6Œ„ )%ÑI…Šÿñðòň–Y’¢0#¡Ñé/$ÆBbÚ^-Û± £Z¤¢ðÛ›«>ôAòáx>ïÎ_|ýe{¹žv¥Ÿ5Mo­CbÃFPl º^Vÿìo¾­ÖÕÝç'Ë3¦"E!IÉ9ç+Dã˜ú!µ‡î´ÛI žšË9æ„Dƒ„_>ˆq¼¾¹.gUŽa÷ðtÿ˧Õ|QÌlUW Ð8? —v¤ ý8f *ÉYs8Ÿ.ýX—ó±ïb×1‚µ¤Ç!lÖkïÔZîÚ bêÊY7u>¸˜U9GEeË1æ¾»îÚV³0RS sºɰ¡ßþÆm¯ÌÇùÃÏ-â¼o³šK}Æä{­ÙÕ#…û¹ á²?îžöwÌ´X,¬¡¤éÜ5]? ½.×·\Ôçã)§Ø5íWon›²¹ô’ªT«å©m7›ëõ|}uµZÌüx>·Ç0öCÊ¡‡¦mš«««qÇ>ÌÛ!S7¦ÓñTî´?ŠšvHY¥ï†ÃþôÝ7ßZgBŠwŸ”ðþ㮲U{zúüéüñcû?ÿOËêš‘«bVc ïEÒ|1g¶Iâr½ ËÍr¹^|óÃ7QǾ;¿º¾"ç½_|ùõìŠÍfÛµ—Ýó³wÅ·ß~—tû® ?ýãÏý8¼}ÿf÷p¿~÷:ÄôîÕ#üåӇLJ'bZmןw÷ã0Î+?t[ÏŠÚ|~|h‡|}µ^/K <[¬žvûaû!…¤cˆ]ß( dtVú’2(Àv»"LÎkбp~èOUQXSîvmÛIQ•Ûu½™ÏÙØu>›G…ýé(9‘Q¤åj­¨"ŒeI§ã1DuÕÌFDSêÊBTMß)ê|L”‹Ë`†Î>>ïÀ—?ý!<=£Ú°}k~÷÷þî?í÷› Kt7?ÿ4Üý¡¸y½ª—tßÜ}nà EéWë"í8樠hŒ·CÚ.ð‹/kõhŠŠÔwƼ/†.1åÒÖEéû~š’. ?+‰YHÅ$‰HÑ8á¡k‰rÖÕ´† 0еè½U¥¬DÆÕuÍ1ƒ3&ÄÔÅ1‚’õl}Ì‘ ¨pÌ(¨³!VBÁÒŽ·†˜€RÎ È"aVK”‰BÖ©Ü DŒU2*†$‡Ñ’Q_†?$9‹f% &QQPkÜD Ê9hQ3°1œTÉ |qÙ{WdÑÅ""“E`&FäÉ#09%çüò’É¢‘1AF΄‰Q1ÆAÀ±›– ”“I’#áäÉ„€`SJ“NPqÂCÓKJ_cŒ™U‰ˆ$çIk™UU”€9‰ª*¨2³*†”þƒ`¢3¢¢()ÀËúCQ™% öìî·¯n_u]“²ìž÷ý¹µ¥ÿôá"NÕ|‰dŒó̶¹4×W×’sQ¸Åz)ŠÏ¾}}å=vÝa6s××KÚsz~Þ?=íºc¯‚·oÞº™ÊªœÞˆÞ[‰’Tõ¬šÍ¬·}ßVua=c{<µ‡ã%¦h)Êr¾œgÚ¦›2mMÛ“3VrF&®ª²m[J9]š=³‰#ˆ¯À–HcQ8æä¼ÕâØxÏ)&+š½·1Œ„x}µŒiìÇà —¤ùÓŸ½«ÍX–®ªsµÌW¯K…LOÏ÷/ Ÿœn·öý—ËÝa8œpHmÐÞûšÕŒ¾üoŸŸò c¿ÿዺ¡7ëªôÎÏê?~ø°^oöO@b½u¦Ðäœ/‹W×Û±¿,ÕjµÔL ~LRÎ+k}׎Mw6ÖîçÛ7_l¯¶ÎøÃóárº4—Ãï÷»¡mbßqàÜþö›È¡¹ÿEûùõÛß̯fÿõ¿þWn^ Ã0ôýv½A@U !\.—óå’’0kãØžOMßGäáëÛq¿ß/«§»»çÝ) Ž!69Ó§_öDU;´ëÕj÷ù~qµ( ÛSÆŸ~ü¥9Ÿ‡¶}Ú=Ûùz=Kã(IŒ íxXo×óªj/mŠVÔ6Mhû¾ž[U†|9÷ ZÍ*6¨YHhµ\°q»çSUúå¢*ŠÊùº±˜Ï—›¤ï›®½ô¥¯ŸwG.Š~$Êx”€ [¯×Þû§ÇCÛ h]©`NçK]WÎB]Ùº4 R3ÿôÿPõfK–eÉyž»¯aOgŠsN•UÕ…FOh4`$h”I$o(“™3½‚îô¤I¢(É@bwèFuWUVUfdÆp¦=®ÁÝu±³@)n"nâØ‰¸Xëìßýÿ¾î4„vÅ‘mQŸ V÷{Í\´~÷ÕÞamÍòìâòæååï¾Lƒ±¦ï†¹%AdSbkÍGÕ§5Y¢!Õt¸?V«&å‘Çþl}v<îÏ6,+¿Þ,5!„v¿'²¾nêºò쟆Ö|òÓ)¬}ýúLGD°À&v‡ggÆ`Ù”ëðpâïÞ·S\¸b½hÜÍË«»»÷Ķ^œûåj»v¨­ïNÇÛ——ýþ`ÁlΊ¡Oc–wï›fuºº<¿ô¶œ:~ºïŸö ]5KO’mO=eŠîï‘üöú<§ì|E¶Ü}Ìòô´_Ö‹æ¬9;[;cÒ4)Â’Úÿî¿çý,õýÕ»» Ú¥/õ‹/¾09¦þÔŸŽmU•ÃØ²° .«öØ´ç—Û‹‹Ò7íi,«æâò&Nc{Ø•MsF$θ\nBLO!Äÿëÿüë§Ý!íîwátüå?ùÅ¢©ïªÂ[[¹ªòÎä꺬ê"“âl®n>¹¼}ÕÓ4t9ðÐçºYEæ¶ïvû“ªÆÜw!MRÔÅöbå g«ºYÕ€™9—…ºqè'Knllû¡›FEcÛvôe½XoîÞ¿7¥¦N%oÖ7B9iZ¯Îwû}ׇiÒ²ZœÚ¾(ê‚pX¯ ïÐTEáUÙ§œdºGf˜úã¢?ÛÐf9¬—ã¿ü/7„ýÛwïÛnr¦°Ü•fÜ=Èqhþþë÷YòE3þÿÍÏž]¬ t›-Ozê“5ÚøqQä÷wíÞ´cÀ¢sÕœ5÷§ŽC^-Öí±Æ!¦\2c¡YxÎ1ÕH¦ª´ Œ@};ÆÔ‘±°(Èž&V Ä(³$Ñl¼•¬S‡ÕÄÉ–ÄÊPT ²žÀ+G2¨B<§7øÌIŠÎƒè¬1‚ŠœU-FN³6ç˜S6Î JŽcímY{É U5±Ãì U5(º¬Ö嬈hœ!2,"¢†€ˆTfµ:«JQzÎY­u€”s•ÌjŒ·„,‰È¬˜™‘Hg+¯°á¼Y4ËXf‘¯q„8·ÏÀƒ*$cŒŸÇÊÖ ©AEÛnDJ(ÊL€H¨ªÂ?ÀDsbaʬŠ@–>Âæ,Ínf!P5Æ ÀL(Š)!’wÎÌ9’¢€DŽ0…çbƒ)¼ÿ8y!c©$u}], G’³!‹H(à,AS”¨ÀŽüúl{y{$…S„÷ºÝÔvÁ`é_nW}×yëÑšÝã“2÷§h^¯Ö P^„šÅ ß~wç-üä'¯_½¾Ü¬šÅ¢>¿Úz@ìû°lÖ®®†iP–E]7ËŠŒ©›š¬a„ÌÞdlQµ/+4”E½ñE¹ð%¡‰…[AÌièZB_”e×÷Ûí9 ¨ˆó6¦ièÇ›ëë§8Ek|]×e鎧=‹”ÕRÕ„¼/xJ/>}˜ú¾=Øl1ôC•±ïK[(u8 ŸÇs®‡Ô÷©s†Óû]{’Ò7y’EA›FŽ]üöÛwÇÞíùî 9ûih×ËÅËׯvûý×_}·¹¸cw»{ÌÒïO ²X;Êl³„S›¾üã·Ó”ãÈ&@iÊýñ;Æ1<¿Ø:ãSŠÆa!½»{hcï–˜R>:ð´l–æí»÷—/Ÿ]\\Å”žvû Óáx¸»{»Z,0ËÚ /nîL‘þæ·æñ°IB1vïßÞõ‡ãi¨ª&g½¹½¶–†~4ÆííímUW‹ÅªsŽºÚoÖ!ƇW/o¯®¯w{È)ß?îÌŸýòÏú¡=Û®¯o®·7Ý©}v}þ³?ÿ±2ñÅëª*÷‡“kš8ãé´®êO?ýQNºÛµŸ}ñóÅâUS]îvOãp:<퇖¬=¶Ý8oWîw›³íÐ’PÏ/7@ÒrV⪰˜ÕZŒ!¬—g†Üpl-Qˆyˆa{}ó§?ÿÕ›¯¿+Êòæö¶{Wä13ß<ûÑ_üå/SJ¿ù›¿¢<§®ìúNMS¶,HrJ1”EaÈ„VO‡v ‘üªX]Æ .·éÓשÇÌŸ=‡Õ¢‰©].J“é¼ çké&<Åå‡Ãôùç·?yíc÷áw¿}w<œÀ˜¶¯È/ ?{¾ŠÇüý“°\o–ˆUCH’¡pu׆±M³8œÚ 8† IË((¤Ò»ÒæiQzQN‰™¹(¬ñ´\Ö9‹²šÄÙ•¦©JgÈ{›D<ˆÁ²©bÉ )Vµ#+†”Är&´©GÍøq”J€V(KÀƒŠ2 ‘¨1*ʉ#G°¤™ ç|>Yg¬#åqQúŒ`Ã0¡ªÅ)ç`Ê:™‚œ@3ÏH%cŒ±”Í,mõ®°†ªªDU Ö±K)e"Od@Q‰<€ý8bD$EÄãjú!9Ÿ7…€UHsdTESzªd(«ˆ‹~Ç ¢6A™æ­$ž3z"#HF‘Ð Z”yC†™‰,θTQD#Cn^Jš]¥ hI‰D•X S:ÿ‘û†( dD—’óÌâåº(—ËUމATªÚO}§™»ýÑ tSÊQ½÷ŠùØ>å(gç×››‹SÛ§E³Zž­#OíþÐ>µ}ú)§X9ÿìæYQ›Ô‹¦ª·Ëuݨá$yì‡~»SKFÁ©©Ê². o}휷̲”E圃 JdV‹eJ ;_L”Ó'"âp¹ZfæªZ¸²Èsž”cÊ‘UD¸®œHB#eå-ªO“s¨¨O»–9uãØ”Kžt˜&4æ|»i»½³žY8¦4%4Uàât6>þùªÏ>¯¾¾BWŸÒO~übsS<ÜcìήnnOmÈP&&µ "õ1ÐHc†cy~óòüòFŠâûw÷/n_¼{÷ýØõ÷ïÞ½¸½,“Í‚©»¸X-×W7õjû¿ÿ‡ÔWçuY¿ÿðX/n|¹z÷þ±¸¾¼r…Ìßÿ]E²¬7—E±ýãW_÷Ç¢ôC˜¦™g··‹EST…pr¤¥³ÞqŠeéÓÅÒ«ª/ë1§Ý±%Km·»¸¼dVïŠíÅÍæúÙËÏÿ{ûæÝ¢Ù¼ÿØ,šîpâ‹ÊmϪ¢"„ÌÁ{« ëÕB4ÇÈjüÍý12²b YÂi±x÷êe¸ÝNµï~ü§K/:†ðâSk˜_¾Øþâ§ÃÕ–¾y+»®>>pè ý‡]ê&àNS±C•ót{áú}z€È‘…!À4BÎXе…0ZcÁ9‘™7«M]˜«Ë¦,Ù:u`¸ŸLš†ÄI (+@]8à˜ÆDU‰eå²uÖ‘· †\•ÄhÎV™c"À0ïŒsìM–Ó¨”b@ÌQ…ÈYñ‘uŠš™Ñ‚%å,1±(¨%D &“D4MÖ08cKRTä½CçHùØ‹„èœ8 ÷®^äÀL$£‚5ä¨DC\•d>î•"Šzk Ra6d@ "©E1 ÆÐŒØÌ9…(h, d޳„kÎø­±JUPÉ‚1…™N•3¡™ùÕ@ ¬ Õ ¤óE"˜Õ!€ ÏÞ.cˆœˆVˆTY5!JÊB`=*  f0³9 -’I‘Èšy23‡æ’1 ŠªJ¶„Hb\ágã§‚`T]UÅÅv‘SÈ!ÆYr,h­WÁ~  (™SØï‡¾`¹ÞTg‹¶í}ß7Mcºãba‘‹‹mÎy ccá}Q5¶*mY¨ê‡ï¾•Œ3·ŸštU–¹IŒošÅ”²/°r6§ ª"ÒÄ CÔ˜LÃpr FÁc³£ó&牳˜¢¨-aþÈ^&ë ä"UÌ ÖXÎ1”֧ĉÙz–ȪŽ|a‡„!‰r˜#Ž ‚–…gaunšsmšÑÊ–Eœ³Ö"Ìœœ¢l 2‚’IÌ931gC³æfú¿€™ÏSkIËÊ£QB%æ™Ê ªì,!’uF„f}ü‚™JM†fz¨~„îÄÆ‘Š|„¾©"€ é=X$cìju–™sN1å,*êºn‡I"f_ÚÅj‰d†S«™}Yâr¹p…§ááñ)e&c0 §)†éÛ·ÝúÛþwh·×‹Ëgpñ|ùíû–5_?ÓõÆÞ=îXÒåÖ¼xÉý¸ÿîí¡íO9LaQêëÛõ©í¿zó!&˜ú¡;öÞÔ–ðp|Z¬êjY Óôí·¿ÿýw!g8OHÆ”ÍÊx||<<>»¹¾>ã”$uS•ïÛ]©)—°(›Ç·–à¸{<_o6Ëêâr5Œí~wе¨px:ÎWÛÀq|:-~ûeñæÝN˜]fq…÷Þ¿xñbè{áÔ4Íb±aZ¯–¿øåOÉbHIT‡ñ´?ìžÝ¼8ZWø²ª¼1o~ÿõ²Ùf5C—ß~÷I?yýªºív}¶]w‡Ã4´ß¼ù*f2ýéts{{q}ýþÃãû‡Çíùe(?{~EÃ0œŸ¿xñÙ—¿ûæí7oŸßn/¯ÏïïO |8œBJÂB”½gKbÁ]L#v¡ërJœrŽ)O-’CD2 šcôN§‡§ÝããÓn<¼zÔœò4–¦S×ÔÎ{LûSalSçà½ûIX—Ëb±ô9§iŠ žÁ*9_6ûà ÒÙò‰<¼îíbí¿þªz:ù?<¬û•D_¹üþMs:IdmVùæÆk~úä5­×)fd­S¶Ç^Ç€œcaMfU?ý4¯7²ÛÙ¨<Çë!NÖ4ƉÀSâ¬9k•œq÷íãn´®hE’a”¸^×Þ°QpEQxWàœRŒ’Ù±HÊ&E’)¥X¦óM½ò.u=9 Þ:‹U颤œ4Å,*)©õK Ìhœé¼Ÿu>©…AEbŽ9G' Yb†¤`!)”kO‰#—#PîMŠ)eï,sÇ‘³¸ª6ÞD8®>‘A!s²D’óÜPETdUQ4S ÆÙ¢,43«úѸk¬ýÇòל“#¡1&¤¨óP7 :kÑA`K„ÎUa™™jsM™yvÂ;‹ y6Èsþ8Ùzyóù³ú¼®·KaÝn¯2€!›R<»ZWui-cÖçgÖco¿»N¢ÍQø)‰k|1}r®LœIyµ\0ÃñØy_û¢4±3Ýš IÑæâ7çg pÚíUSU- -k ]; £sEU53*†¦‰†1tíÆRÙlÐh”8Ä1çŒ99KSš†'àŒÌSÎd "‰hɾ­ÞÝW»–Ú˜’fSú‡®Å­¥ÏVg[ÿá)X+?ÿ™ÿgÿl=ŒíÃCò–¦_߬~öÙöíûÝýnL X(…ÆÆôöÝ»q ¿üå/ßvǤ=¦vÏqÊMU2W71çÃq·8´§‰T§¡;;_~èŸ:˜cןLA«ó³J î:·Ýn› u4äfÓtã~Ó»O‰cSU¨FÖ7—_ýñô÷K÷Çéí©›Íæü"³ŠS@Uå”ÊÒ]\\:狲,«zs¹ã”Xˆ@$~òêUNØŸúºªãß~ó$œú:z÷ækkÌëÿhJã·ßûì“÷»¿ÿæßMSÈ™ß÷ÍéþÞ×lÎMÙ4‹•朆áûïîV«æâj¨÷wO÷ž@èÿ·ÿŽcØžÎã÷ïî93gð…/ª’9º²$ÇÎÚ¦Û€Xy IDAT^ß\UÌ©ï†ív+ÀÃ0EÒ\‚œÙ`ñÉó׫Æòêêþáîxê²8cŠÛëë݇»E]X‹Öšr?Õ¥©—U”Snšªðf³©—ËZ•EIÑ”u=¥ˆäöû=ÀXTõÃ=wÇ»î«õ]Û½ûîÈ¡á0Âd Øž†aÝœ-¼^Ÿ™õrº¼Å)ÑúM{÷ß½?$£¶†u­¹kùùæ¿þWÅO~|ùÕ×»/¿.sI„Z–%!ÅYµtµ5U?$c¬/È{Ì)ŸNéOhk[º1Äý½GS(¬Œ!†19QC  ÎZo½Å"Lš#7W+߬¬¤±TJý¨ÎPQpŽÖˆ«hš˜3ª  Qt¢¢U͵+hbÎ!$c" ¨1`%k´µZË<)-¬B§®õ¾ôè ˜ ‰¬ä½ËœYxQ.˜YU%g`1Dò±P „8¯Í "¨6)¡0ƒHæ#{“pöÉEÄy¬jæÃ×:ûÃÇpâ ”ó¬w!#¨¬I„Àxo¬#áò‘婪,ˆH9e"ÉÆ°ŽæG‡1„¹HlÍÜ6À,Ãó5ïÍo#çdÍü<¡ÀÊécƒ‰ ¡Í™Q0gF$C@æÞÙŒ5Æ© ‚1…/@P•”€Å1õˆ”³¬1œƒ!´3ŠõÙúâæùºzÎúã/^l^Tß}ù¸ˆ¬…-!‰h¶:bNèW 6ÆX>í»<K`u…?îv$X8+˜ˆ¶«…%Üí‘PúnÈ!ïw»öÔ“‘#O×ëÅ¢ñ¾‘4 Óz}¶Úl›5yw<žºÓŠ ™O‡ö©pâ¡ãºÜ¬VÛašž½z~†0iß$Ü”'ÍsŽ!wÝH¶´Î¥÷¥W«$šÆÌL„Îz"‹ DHyµX´ãÆSSxB§jCžÐ Eä‘R¤©©m7&×ûÇér¹©«úá¾ü}+C%ƒžS¢ñÝ}?$ùüçK-ðáíél]ºÁø Q_}šã1Lã«——!´¿ýÛoÚ.L“ö}Bc ²aˆŠ>K˜a8 Ö»Š,‰Xøt7¬W›ÛgW&ꊪå¢!’³ei¸¯Ëòئqà~<µ­M}y½^­MD±;fó¶åû6·Ïo_þhšò0tÞ:_z0q±®«²Ü=Þc2¾Âûwo8%PXÔ‹aèSo¾üî7óëÛ—ÏŠª‡ÀšŸ½º¼»¿7X¯·®.š¦üão›¦|ûâ“ÃîøÿúoŸz¾Ù>wÞÖ«¦jjÎÒ†ºôƘ§§£mVÏŸ­~óÿü§.ö‘ßxøõüõ—ÿ÷×7Õ»§‘€†¡µÖÅ çêª\¯›¦®®¯Î®®W›õÊ/duV„>+Ú¡ëú®mOJdŒç”Bšú®[ûbQËõY½:爘ééÃÛ²d$Œ)‰’‚9ÂØgQ­šPbÊ)'†i½\„1¤˜ËÒ{ïúaȬ§¶GRÖ †R’²X’à*Œ©ÕQŸoõ_ÿ«Ë›K|þê’ ¹±B2|öÅúþñ!áòÕç—(Ò îâOŠ¿üÛãÝawôO÷ùûïþÝ¿?þî+êlÚ¼ðÒEEN4FµÃ‡qT•£Z—Ñ4}?1h½ô1ñ©ËŒ¢&5ëæ4Ä®§ÓT¦)¯*Q[•ÒO£³V5«ÄºVOìE¥ÏY\™…•Á}ÇÌ`m]7¦0…ÄVY‹Â‚æªôH(-4"RS¾ðÊA9 H,Xãó4>|(E]½ÎÜK!„! 9*üŠyЙ˜Ÿ"JF²‘½AÙ¨:@‹„ªˆFР±2X“…Y³µàŒåÄÌŠ`‘%’AP&T5„œ…3«0‘‹¨*d•½G`Vµ2£–A­ "!‰Ì®6§Lä,+0è|òÂÌó— sš=ÇwD¤úŠc`2:—ÊŒ!R@õ Þ¬ŠÂ¨%ý¸Q )eP À̳nRˆôÿߘÿA*QP£dQLª‰™%e–œ0C]U?û‹ÏÚñX ÿ«ÿê/Vþ×ý›§Ç(L‹e9 ”bÈeY^<ÛDžˆ’f’$ˆbaæœÙ"ˆ±TÕMÓÔÓÔwmÇYPñâb«Šm×7Í€bˆm×·§±ï¦‘q¶0®(›Æ’ƱËaYÑ: ­hÎ1Å1*C?E_5§Cÿý7ß jL1çüþînÿø´=ßö]«š5ç$¢àŠ ‹Eßw€ˆh%óÕå% åa®ŸÝ²HìOl 9öÌ£“&I""¡’q. —5,k'"¢zû¶ýðž?Üå€1æ4Žùû?åÚï»$Å© ®pwÚeSŸÝØ÷ýCbQî§t¿ cæ(™‘hQÕ9¥qœ|EΘ‡÷‡(FzÜ\›0)ìG¢ruÞ Áö)ôÈN¶Ë~¿»º8‹Y'Æi˜ë¦2 Uö¦VûS §ÓíMmüH¾¾}þã_ÿúÞ½½ïûa{vfŒ©ªDøéñɹ*¥ÈŸîïº~AíÛÁ:'–>ÿÉO‹ÊNmÓ¬Í:ÅX×õ'Ÿ|Ú¶mÝ,6›õ4×WWÖ];L}Zm·›Eó«¿úU½®›õîpÚíž‹ªªš¾Ï֚ݻ7ý~Ÿ¢¢+žžŽóþ*?»½>»Íjs~±)¼Í10(_^l “€§º0MUxïÑ[ã‹7oÞ¯®7¶ö§¶Ÿ"“)Î7›ÆráÛ&C§vYŸ-ìªôV™«zs¾Ù^\L1²²õÖ¢¢2‡±?;; ‡!”erJ,(´ƒ·´^5*z8w»½¯/b¼àìšE!jÏÏëÛyõ"?F?þÑÊÚ÷Ï>cj×Û€žvóõuyz,Ú½ùäu¹ûð¸\‰K)ÒÝ”ËÀíbseΫNÀ-ôWÿôeÿ8vÝ$‚Æzë]Ji†¢(LQ¬f©ë‚P½ó9溩ªª$çBÊ(ù™+ÏÊ2- dÑ8E „˜• DE“f´âËL†SN‹PT6«XïBŠó E´…3FTæÕ"CÖY@•” ¢"«Ïš²€1ÖXëÙ£’rŒ5p 1)AQ‘’‚8o-Gµ‚CH¶XF¡˜PEKç@ EEE„ìGG£µ`F‘1ªüŸ³wk­ª #×¥«Y¢Ì2g;ˆ4o3 Ï9:ƒË|‚ÏV`cÉúÇÊmÎyN“x~72ÓdÆ9Ìô¡¹î5s~tÞ@"DD0Æ"Í^Q@7K ;[pQ€œó,*øG”Åüóüâÿù˜=Ñ€–Þ£!ÎUa–Z¢±¾¨¬³Õ ùÓŸ¿n– ý_ýÕ/ÖÏšÿ¿ýõáIú6ù‚ú>°Š%gœ9ÖœmkÒ¼{8‘ÐÛÌI9ûÂeŽq×ë³zQòéó¢v§ÓI³^l.Œ3çWãŸöÖšåª)‹ÉæÌÃ8"’ Àz¹»þ¸ßqÎót>¥4¥©nœd.l1œ)kÖ²*LacN)¥EU­Wëqèë¦$ý0±¾(Y@½óeéëºDZo'²f }U¸‹ç7ËÕú‹}A$w»#isÊ)¨°$$!KÂjÉ–E™„}ME–|fF4CfVµÄ7Ë|µ)>ûäÙp“”x³Êäþ1“¡Ç§Œ°^­¶ÞºÓ&5FdŠ©›8*)‰’a%@DÑÂz@`É)¤„³e•ê._,úv*ë‰/šâ´?rtj͡ߦ·Ïëj¥X¼¿ßö»,üç¿úg áÔ}8Û,ÚC:L“÷%'¤¶=Na$BT*ËêúöÂZëB„oþøææÅ­¤qs¹RcíûûÇÊWeY†>¼¿Æczÿö}*—ËÇ‡ãØ¥ª ‹‹²*áÙ³uYiéi½\y ËEuy¾Z7¦p†ˆBÌÆÐÄ21~÷ö®X5—××1KbÝlUa¼5!Ç‹gÕÏÿéM’ÓÔ»»§®sUÑf½µ—çÛÅ¢†ÓjQ­Kè­™{¶ªj,Œãc"EÈ:Ž-Yœb‰cä ™Zµ¯›®ZõŸ¼\¯ÁÔÂwïß…žW›hñî]ÓêÃ÷C„Åc;ìtÿ”'|ûM cõî-¿ùjúιòÿD7WöåOªãÚìïÛÝýIØæ ,œR 1ÎG‰G4ÆÄœãIA$ hŠ©©ÖÚ§Ýiwh3Èv½^iÎl Ö ©f².¦Ty/h‹Ž!æ«Ò)¨2§8KЦ¦™Û#)kÉÊs>"1&P`%QÀ“ö!³ˆ!òÖ9kŒ!äT@6Þ‰+›ÂÚb £¾ðh]Õ¬ QH2DD1&*ù²A"ÎE,¡%1„¬¢ ‰çZ­µö£•Á9‹Îcgn(â åWA@Ä™Á™ËΨ UA£„ÂLœ0‹‚1D‰@æUQP"£   "3Éça¯ü@wþÇØGDT`Ê3‹* «Â¬ æœ$ePCàˆX˜YÈ8¤¿""ó50_'óËÎl»ÿ|XcQU ²4M‡ÉˆõàUUQ熜óEŒ\Úª®Ð[ëAo^l—ÏV_~ùö›ß=‚ZÅ<ޱªKcÊó‹óÛ×k•p÷~lsœÂöjm -«zs¶±ï«jYVÞXÍÊݱëcœïÇ6¦T7f³®ë¦8;;ec ¥ 9LíþÐ÷a˜¤,kÛó32¸X– øøþÉY÷üÓg§ÃI™ËÂ7õ8MFqQ׫õ’%/—MŒÁ9çËÒå,46Æ®×Ë”SŽ|sõvÝ1OƒõÅùÙÅÓýãa÷0ŒaJS›O'é• bAsÐ …q„’ŒqHaJcÔ “©–t{[¾z½þêÍé›·ã1pXRúü sýª><ÅÏ¿¸îÛD`+—Æö”$·œÔú¹8Àh¼h ¢€Ë*FYÐÚ"†¬ dœµØl›d2ÇÎ×h?¾mÍÄSÛ=ÛÃ8Ž¢"`N»©?å8ÉþôT7 fÚî­‘ÍzÙ&aé…û°Z<‹JíËbUW+ã¢iêz±XTç›ïßÝŸÞLÃiµZ¬Ö›®ÈÖ•«U¹¿ÿððýÃá|á·çBc†¶ªÝ0L¨ß?Þ…¡ÿ‡ß}9ŒÇxýü¦vö“×/O§ƒ·n÷°ßnnUùþþíÕõ¹ñÔ’ÄU‹Åf=²»?®×þæú|ì&¼{û)__n—MYfœz$¦x:ôÓØGnJÕb™b– ¥s…£ÕÒ®¾.›¯¿y;„§O~´9œ: ¾Û뇧ÓÙ¦Z/pYÙÝc·{x@΋ªXÔ.ŒAÊÂ[d°,]QšÂ8jšfŒ‰AÐ[,²VKj¼GÈci©ñ+£öû÷Uéù³âÅ«áõëÛÄḇÃÑ¿ùn:íÙX=ßÜÞ^ÃÔw_}Ív㯮7O'Ðbsóÿô?_óýéþø›–û±‰Á¥H!d[PL1„èœ+ŠBãè<ùÒ‡JïÊÂÆ0:ã‰Ì~,mQ²JÓ¬Ža8Œ½CC,…CM‰mb%K¦^xgEãT‚VhÊ¢`Tp¹Ä b]ޱò¾ªjEËIfbå\P"£¾´D†Y$ÅLL%ˆ…¬À(l5dÀäªzy6tÓbÑT±ßÎTuå¬Å 8¡‘ÒºÒ‘5ã¬%ÖÌ…·Õ;3Å„Æ¤ÌÆZ²Ao9¥™â™ãœÊç¹y¥ÈY¼/$‰%ˬY”åƒ*"8‡€À’œcÄ`ÁþKМ“ý¡ß;wÈ"à,FH9kÀÌlçŽ~ï½È¼YJ"‚ ˜#Î{¥`]–Ì’gŸrV`EÐÞ±ÙópÏùe™ÙZkй0?0*QC¢* ´\6 E@Txî\ß\Ô WüòåEÓï~óåéÕRH) ãfݘÂÖ›úå‹çwYHH7Ë-êtÞºàfµ GMS·ûÃØ¶ýU-íO÷†àöæjÙT ²^/WKï‹‚ŒuÎY_–EY…”i¾C>ßnJošEy}{M€ÇÃÎ;ë—õCÎâÔ ãÐÔ UòeÑO§0ŽÇ§Ô‹Æ–…­J2&§œr.ªjµÚ(èrU…)¬V‹³óõ8öuå»îXE;v2p¨–À"yë9eCXÅõÕÅîxÌJÎb]•S˜@bÔ1Áû‡pwL©tÍf鉆ˋåjé¾ú®ÿö-'G\Ú•¡FQ“ÎídDgŒU5hEfOU´EN…' c"§L0Ž9´È£==ÄpaŸNÇÔ°ßOÉby^µýpl‡ã¡O,Û—W¥3aØyÕÂ:ZìŽqê‹`±9Gã ¿^”õùE-Ä«³MS—Ëu½Z×1M1¦År™9žo>ýÑÉø™El©…u)àã>·!6ëHW›³ËëËÇïß¾-ìb¹Ù.Öõ·ÿðæë/¿K‰Þ$Ãùz)ÜoÎjÍŒ@ã0TMµ=?;œvW×çDfœ’)«Ûg/‡Ó7_Ý¿úäÕ'?zuõ쵨=Ûœr]•몪kZ.ÍfS/Ïš§ýaš ˆ1YCqè+çE¤õÊuíIãpêÈZçmYwï÷‡VÛþî÷ß —ËjÕxt–r„ý¡Ç9[cB !EÉÜ4UÊ“/Íá4•UÍ9pÊ1ŽËM½ïNû.%’ŒÓ˜bŠI¤¨6C7>Ü%/^¾š÷i:JŒµ/HRuj£-¤jÔZx|ß%ñÛÛòÙm¥·Ë…UwÜïBà÷ïâ÷S 1hl'±³ªC´œQƒŒ«M- 9ÇzQ[çR–”5Ƙ˜3 ¨CĪt®ö]”Ò¥‹òDLP×½€/K 1Xd@8CÃÐxÊYՕΖn)«e¡€RX•¤Ó )&DD3÷´J¢YóF$;FM‚ÆW¤Á¤¾$,œ‰§*”ÍšS˜Â‰ iˆÆ»ÒP&*\JÙ±Þ”5Y‡ÂJBÈuá¼59±1ÞZ#£ñ3!B2 +"ÌßÈXœÂ!SHh Š2~Dú£ÍIrE„‚x–ð’• †ÈÍ4p1gÕì¬wΨ°s¤ÂÖ¢,úqT­ŠTÁ‚ŒGÈäs–™›I$)1èLB%Uà̬̊Ì3Ù,2¯” +* HÖB$"0sÎô±Æ,b­5Æšâÿ3PU"£ª’ò'/Ÿ/Í8Ÿ~öÉbQNc¯(ˆsFùìó——·[Ô¼=_?µÝoÿæ÷/ž}¶Ü,?ÜßkkJ_Õ¾tC¿ÿîë7 Ôœm”Lß…8e_ú®m9kU-«e3Cwê†~xÜ˲®|)šëº>ßž-—Ë0MeYC!L *€²\Ö9%^®«õ¦0ž2 ŠX„Ï_B ëÝÛk+ST—W«ÅR$Å<àv{f=°Àîþ8ü¿D½I“ìÙqÝéý÷?ƘãªêU & ¶h”ÑÔ’Y[O&ëUoÔ«þ¬Z´Ú¤&E$ÈB¡ õÆÌŒ9þÓÜ{ÔËEäõp?çüÎi\­¯ŒåiS–áÔiÊ9Fí»³äôöíÛÓ¾ë÷gMÙ–"¸ÒTMá'¿jÚDÚOžH3PD%&ëǘsô:)ò8€€kîë4yIãÄ N¦¤}Ïûmp ».Ž™°¶îz}Í6‡MQúïã[E¬!1Œc¤ !#DÍ RNIØûdÈäçã8Ž1«™$CAESejYmzûzGdª²™¦0o|¼Y¬U¸4åyÛM瑲pÕ´Ÿ¼úl±¾º¾¹{vw›Ótu»žÏ¿ûú›†ù¢}ûîMQTc?Ueñ‹_ü|±œÇ˪(Kç}!Eµ=ú¾GUIÙ{íÓ‡÷ïSHÇÃîÃÛׯ¿{óê?zõ£Þ}úìúîúþÅ­Ìq¿a2Ûí¾ªšûçϬ³Ã0®d¢¶i¿øò³ÅüŸþéwßþþ=cúó?ûáj¾ÜîOøöÛ«õÒ } g†a0Ä÷·÷›Ç]]•7/¨¬9_:k-YbVДú“Ìgë,SâÇœ§´ž]ç^äÎYLF$ìÀU[1FD>œ{c«±›Œ)úqt1«@H† {xÚNu}?NœÁÑv1o3n›Å4v?ù“Åú¦ÿ®ùõ¯Mš‹OO®qå<Ï–öîæ“÷ßûïºÕÌ,›4Ÿ›ÇÝfs,›öý»ñý[úÇßèfÏõb9™¼E>ýrqîl]Îq1¯ÛÆ!aH BJH<Æ ÀÄ›2g$¢²r“?㹪šÊ9„¼^ȇƒöZsň”<›(ÌÝ4.æ3•JÝð#-Sš 6qœÔ-£Õƒ7ÎV•eÆ‹‰Q%ŒIÉHD- 9‰%Æ&ÖDrŠ €CDA¢”åj=KC¯’¹( ³\Œ•x!õ#+­d6V|HÈ&¦t©ùE¤ z@áp`¸¤n˜å#ÚM™YAbÆRUX§‹»èò)€1ÉÙ°I¢9EËÄ„ B„„”RL1Zc‘ØX‡ "Êl2‘ƘБ˜@ €±„H)E"VÑËeIA‰(‰Š( ª*䌆‰Y2^Ž~)eP#-(2UÌYðã¸(©ªÊÉ{PX5Í—Ÿ}ª«¦Õ”RUWÖ (I_}úò‹¼2xR ‡î»|÷ù_.Öí»÷ïC/ –ØZÃÙw9¤¬”SŠùtüîì½+n¾ûÆ‘b6ha ®$㇩SSe›ÂÐTM uHÑX( CšFH$@l¬"ÄÊ©RI$ÆsÒÅ|æ AÓ̈ö½Ì¸^+MÖé|Q7³!t>Û²°)ú 0Y5Ý0›×eS·†X0P Ʋ´¶¤”²H&æ¦i¬M޲€+ *hÎ%Cà }_rvœD2"ҹ뉌1%@J)²uš¦©(«.&bR%"[¹¬Iز(±)¥Ë/ýn—s;]øs (ª ™È:çˆlM"–ùò<ª*1ÓG½XD?Î%V"¼è®eáœa•ˆ¨ Z–…Š@V&N1©]W…¬š(ƒ(£23†„ø‚œÓQ^Ê 2RUB`C¤Y‰X$!\ÌKæŸg¬ÂeÙäœѰQ@UÀ(Xk§àA}º½šW­íýÐuc]Ì&ŸÇ1:W9ã~ü£¯~þ‹n²bŒñû·çmxùÉ]Ôé÷¿ÿÎ÷ÚÌÚºm¦q]]·€DJÃæ`uN‹›[?…ÝÓãõÍ ÈépPá›ûgÖÙ7ßÿᢼŸ»Î97_¬fóù0 ã4°dUUç¬sÆ9“Rb¶~ŠÎ:‰I“hýäc!ChÐ)P½\Çóµ÷)§Ü}w}ùégEiö‡÷ö«ŸMÓ¨ÊÖ9D‡IºáÜu} ’38Ì!LW·w?û“?~óÝÞ¼ÝþÕÿôïÿ‡¿øÕßÿýׯ¿ÿðôac^­K£1µí¢÷ iX^Í1iZSÆZ’ IDATͦ_þÕŸþÕ'Ŭûù/®oåpè4­·»Cà¸zv›c@k„Á6<¿YÔË%ÙjêǢDzlš²ŽYF?˜‚Úºö!VMÈÇs/³fFèžö9kÙ¶ï·ÎU¨!Z.RpDUÙÈþx.ÊûÓy¶¸¾zö v›cÊqµÝS¬Â8ëûðìþêÅËÕë7ïþú×µÏzŸ6ïéq7 A³t1§ûëýÃÉ”€l)FÝpŠ>@ŽÁ§Qœ¨…‹Y­-P‘Dë’ªBˆòäc–$™Ãdºóp½°­ ËY»ÙB`ª(qAÖ±%ƽ¨`ŠšÒ"ËT:cK;*„‰I9ÆÞ•V³$ciŠ‚‰RLA‰EÍÄB²€Žµ@b U;åÁ”ÂHF’Êä,ÅàÇŒ„lŠ&™2iÖRUd¶“ÏY“q ¨9D‘, $‚ 8çl™0¤xA# 2ª€ªæ ÀS PŠ?6mQÌY,T`6Æd$"Î]•È̆Yr$F TP5lrÊ!$U`ƒÌ$rÁ‰ j6VrÔÊÚK$M$‰$ÌYs²œ4b̘°0ÆÐƒU…‰LŒéŸCdl­Í9"©h¢ËÚƒ ìœÐK #°f/-š…Õ›Õüöù­…YÛÎm× "Ø:€¢r‹e³;î»Szÿú(QÖ׋Ýãî÷ß|¯dî?½)Ê6¦1k}º©d{÷¼E›br\¼}ÚZkA©®Üfû~:¥›«µµTÕ…O)«\ßÞ¼üäÓv± !==<†)øIr†rŒYü¦ó¸ÛŸ}”Ó®…qˆ‰À-nžß»¦|÷úmê˜ÍèC§§7ã±gf E„õzR6Ž3A&ÉݹwEÉLÇÍ®BtF¸(OýØŸÇi]-o¼â®ŒÃáñÔ­áiJ>)²–¦_¾úì믿9ŽEÑäŒeÕ[dA?Þ÷ÆPŽh–‹2„n ñþäç7/žç ÆØY;ë»3bËdÍb9sVýñð÷ó×ãtzöòÙÛoWW«“-Ýñxjš6æpûj6;‡¢¬·»ãé4SÛΜ+V«ÕàO£eÕ¼|y¿yÜÿíý›7«å²=ž¶o?öCQ›»û¥ÄD†'‹²UaÈLã¤*“?µ4Ëüwû‡ïþîñ'Ïù—_]ýãë†P›Æ¡-†¶®^}õ¹·ù˜»ŒüòÅgã˜3ΛãºmêÊ5uÙ5ÈX˜¢ÛI`Š)'µŽnn×ãèÇ)>mÎïö§S_Öë)èÔŸbÈDÑf¨Ã¸]Í\S¶ÌÔ…8\L^R–qð¬Uzµ¼9œÎÿôÍæ7ÿ0îÅ›ïïÞ÷cd`žÕfµšqA]×OçìܺZUS8Å“a5`€I]AUU¨RÊšäb‰„4y±Æ&É1&B¢'ò¯^,Ö5“¥‡ÂjŠh,_ÚÔÈ•-mN9Æ0-gÎR4N¡0×/_ížãy0hˆ˜LÆÑæh ;’’Åhs®©Œ±H˜s$”\F-  árÌÒ·ë«Qs”i:GK‘Hªj¦Ì`fN\E%d„T:BÎbP5²ë, ©PJ €Àh 3ÍU$£¨Æ”DI3„UÒ¥àL³¶* @ĉ5æ( šT“ (^ ASFØRÌ"(Y-’+L’$ È¬Šš/gz&Q&B$äD„†@ÃÅ%„"d-@Œê âe1BEP´Öˆ&DÉ99¾´#2¢AdÅDœØ€!'*KC,l [g៻ÄŠs×.¾øäúù³ÕŸü«Ÿî¥µEÎr>u9gglÊ0ÁûôðôîÝ›§ož=¿Ÿ]Wß}óýù0Îg«Û÷»¶áë›9&¿^¶¯~ô¬j‹ÇwgM Á×õ ”†a$¼Û q SqÖ¶³Ö‡p:Ÿ7›Í¦;÷4ùi6Ÿ!Âä§ãñ¼ß&gmÕF°9CŠ‘ÌõÝ}3›)Pˆ³-‹þÜaÆY;Ÿ¯ç!úºªEô"GIãp¶®PAɧýáñí‡þ<º¢ÍA5 ô]|¸¾ºÎ9‡8Íf͇Í 2`éjCL¹ûô–~ðùlÆ?¼{@c:²f»º*‹:ùX|ýMèCsûjV-èpDs½¨‚ÏÇäÆ.wSQ [R5DÎIVÑ‹Ÿ AÔC%Çœ5©1,d¼(̬‰4©.+«r»Ûùaâ)š1ÄõÝí«~uØ>Δe™2„ÂãÃÓ»wÁKÝÔ i>«Œ¡?þå/ÛÅ¢‡à§ó±ÞW¥+JÇ„³ùQ% o¿{ýöÍ»?ùÅÏ›v1›-«º}Üì­«÷ûsQTÇã~^—aˆéx<¸ÂYËÖ¹º®ÏçóÕÕAöô}Ú¶›ï¿}÷ðúݼ.TÒ8uÓ8ŽÃË—ÏïnWÑŸëÆ®¯Öã8§íöP”õ4ÍŠ@US†à÷÷Ç÷¯õ¼siD?¥ÿôŸ>D)ɨ&X¶Í²mEcßUµÞ?îŸ]ßO}èºqØo¯5SÎÉ?íöA⇇nѧLÎnwΙ”uè§¡÷oß?=n…«¬kØØãa£˜\E@^)7E\4EQ"±(ðxèO§˜bª¾»[–•ó2 yGU²­UƒÆ)cÊF5ÞÞÎÙàèýÕÝœ0$Ãð{‡ªÑ‚ê4&Pj›J4+`ˆc¶…ˆªXV[°†]af³êzYÖÔ’¢5–ˆì0a&CÎõ>ù²ÎHü˜§Î«@H\îŸö¡‹˜M!Ą̈$¹,Y$†”Ù5 v•Ÿ’‚(ƤȢ‰“J–„ŽI$Ëd ç½÷f>J1ö)Û¢jëÆ9F¼°nX% çŒDF$ksÕœ„˜²1eN‚Jš•-#ÒE½`Ô¬¡Ëµ'gÑKP‹€HErÎ’R¾pÖŒ1)gFvÎ (@f@´ê%¡K¨ÖHÈIø#ä!gDø˜1F%¤K£—hD"5D¢‰™˜­*#@6LlˆŒ2“!¨K"H A€2©¨&ÉÈ`¹ÔKV6˜äRec ª ]6€ 0ªr&«º\U¥‘õuÕù-2OSßùq˲TÅ”Ùe߇ݾËTò¬­oo®gëâõ·ï>ûäK[Ø¢¬N‡áúº-LS0Œ…£û7‡ÃññÝn‡ýþÑû|uwîOIÄÕòv†Æiš&ò‚aŒéº3¶³ùõí]Q–Ö¹²®º¡SX,×¶*o-®(ûsï\ys÷ €RÒqôÇÝnìW” @E›ùr¶Z6³:å˜bŠ!2…uÞP63c i˜&$\ÌØNý䈟ò"çì}tΩĪ(RNOÛ=â%E$`“8-Šôlmާáá‚”C"Íöì•UR€5øîh©-ü”Æ)(´+öy¸û´nî°¾¶Ëõ¬?ô…ræ4$ª Š \Ü]—á£ÚªA¤¤* ŽÙÆ"êæÎÚÈä ŽíjµJ9—e§àAE$}·Æ÷‡¾_ÍæìŠ¦Y>>waš>ûü‹åzýîíÛ® ×ïŸbW7WwÏï|ÌUµ(ªV!Ìçskíl6¯šrN7w7É‹µŽ ã0tç›ÛÛ««õ‡×è?_¬\Q<|x:ëª5gØíUSMýñÿûÏÿ™2\Ý_‡ÛÛcþÅÎüîû×*rsuu<œºCw>Éòñp8u§Ñ‡óñTfµ¨«BRáÓ©;‡ÅrQÖeHÓùØuÝ(Yuiœ ˆkšA n¯ÿúoß¼}½_´µä QÎçc>Þ,¯?|¿]4%¨¼~óÎ_-Æ$wÇn5ÅUÕ^Ý~òòÙ§÷§Ófäñá´ßŸ-ÌfÓ7å|¿;–•­ ”|ê˜sU0Ãôâù³§ÍîÃã›Û»eLqìã¼i–Ë"ÊèS3ݼºz<œ¬i¦þ°^´¤R”u°%&ìç‹Ùé8c†sHýôÿÇÿµ®ó»?%_®=„„UY)ààc?@, .,†)Š€qf c–L —…Ö Þ¬®$Eç pÙ!gîN¾` BÑKôRáþ¾Í9õCR)R„qŒ¢eYÌÇýI"0“«Ì0ö9 "¶«`Râ1Š¢E`öÃ~ÐèƒÆ)iŠâs2†²m*ÆbF?NDdš†ŒëÏìcUTu{>wC7¨d$4®œbB CN‘U4¥„hbÈDÀl‰.°«sTP²¢\8ɨ±œs€KÙ "d ˆ È«šQYD.®œ³ãÒ8#’EEP‘Ò”À'0Æ‚JÎÑZV½€ð‘ çtiwQcèþ½dž1ã8 1JfkÔ!JâœA ÑH”YQ!c¬ŠÄÉ\*„™)¬aU%²ÀÖÚËRUPu`Ú²lZNÝz5û>?=vˆ&¥Øý~6fÉÀeËHóYu>Ÿ!Æ?|óáG?ùIr!ÅIÜß­¶OOûÃÀD’óèãn³?ï|áªÅ¢]¯ïçë¥+Ì騭¯n}êA4ŽI“ºÂÅcŒªZ ®®n¢ µ•Ÿ‚1‘M!Ïæm5Ÿí¶{F¡»®ï.³=øXXw:ÏÇÓõÍm”¬¶nV·7’Ãñ°ŸÆ‰‘s2LŽsÎ’´q!Z¬WSeU` Õ¬G¯ Àäü|ч§÷[Ë&KÜ6¨ðñü'€@$’'ï=<iLMLSÙȪ)½÷?ü|9tSïÁˆŒ® õ½Ä¨ÌuÔ1ö âù4u]jgðò¹3 6ZR Á‰bV1ÌF èª*K‚ ”A1’©ªäÊñÂQÍp}sý«¿ø‹ÝÓfè»~ïŸ=O!ª¦š¯ÃpÎ)¼ÛνG£‰(;.ö›ã8ŒaòW··×·7u]‘úÁYþêÇ?xûáªÚªª‹˜F6f>_Ę—«5äŒ ®v*\•¥÷"@Ž)¥óùxÜ>ýä§?åÂþî›ßNÃðÓŸýìq³mÛ*çï¿ýæÕ«/O§©µlìb±šFßõ3_¾Çãi¶˜µ;žúqôŬúì‡?@ä”`µ¾~xÿÎqF™žÝßz?E5 Sˆq¶¨•ÂlQEïÞ>Ƙ‰ÙYžÏÝ8†>Lï÷;U„dªºv…–U1Ä0›-‡Swwß v›ã¶ŸÒÃûíb6CƒûMsýÉ¿ú·ÿÞ”FGýê'?ûñ/^Ï*Íùñýy·‡+Y¢’Ä䜟6Õ˜ÂmQ4Ïn®Åç7¯σtýÁX©kdž×óyÕÐü0ºaà.Æ©ž,ç°ßlsŒ—~Û«»U¤ÃËÏnºÃ1ÄȦÎA5ïµöß}7v§ØÔ¥u¬ªÎ•ѧc?ƒHraKECã4ù)c/೘³ `lY ) kTeÐÂØ0…RS¹±ï²RÊE]Ï‹J$ù$!K=OEé .È8y”4Å Œ€"1D̹à‰¸Ê¡d$?459cðB†MŽP‡iÈ“¯¬-Œ ºaPfSVbá"#eCŽÐ°1!FqÖ‹ªhŒqÎèˆ)/æxBµˆÀ8E¢‚2 8ǪúÏ­,p9Ð0‚JbË6Å()ƒÊ¿ô¾!3ÄU)%`È ä=¤Ì^IE2h®J+šˆ.Ô~Š113@FB‡ Y’j¶¦ÁýV¢!Ô¤’!©‚ %'YsŠD€D"¬@ ‚—N1s¡Eˆh"""›³gã@þ³ðß7«üêÅ [ȰÝýô‡?ùüg_Çiózqo,ªä»»[ ]¯WÝéHÌõ¬JÓ‰¾ø£?š/W®4(°ßÇÎÙªªB:ìÏËÕÕbÕLᜳÄBÒ²œUñîýö“üñv·Ç]eq>›wç”L³¨Ÿß]Íš Ç)Mõj6õG"`vçódªÊ-Vóë뫦©ç³š ïOýÂW%×`‰šæZ"øØ‹ÙŸÿÕÿ¾¾º5ýÿü¿×·×¿üÕ/Šª|ñâ‹üí·›Í®nZ?zkíãfçÇ ò¡÷TÌ‹²)Ç8üݯ÷æõΚòæ~9›ëÕb^·Yuc9ò0R»hÏü1Äz¶P´@²Ø¦¸Z4ãÐ?ûtO[if¦ýäõ—¿¸{xOŠ’BJYÉÀ4‰Æ¼œ•eiGÎýÈl³Š5F3Ä 2¹Ò†BeiC˜˜cÖËe<œA³J¾8ãcàÍ6¤ä&ï}ôeU¦˜ú¾§², ’‚ï›ÊÄ >ŠZ£SŽMå '›çܔʶŸÏmQQ°EQZK¾kÁ£$EF@ƒ Sô©16 SJiʦ\,PÔ@æÂÚgF&N1ëåVAf4Ì!ĬP\iù’{E¸<íÎ1J)©(£º‚@%¥BÎ’¬cQecðÂê¹¼Ëjí¥ ŒAÍ9EMˆrgÉ)ƒrQD$"8&'’‰RÊx¹¡2cŒˆè²Tä¬Dœ“+!€bΪ €¤Š„t9ã#¡Š"rNÑCH9g&R•cÎÐd¤”EˆüËøhRuh×íl>wiVó›Ï~þÅ©ÛÞ˪½yvÓwÓöé”l–ËÅãæ1ÅTW3?Hžß' ›ùZ™úÁ§Ã÷Ça˜ŠÊæäûs×´-Z¢g/ïÚ…Õ‡!„§±—)–UY¶e»h (§|ßEÄZÛ»qbŠ*YSôcƒ÷~x|x'I™)åÉή†¾ï÷û]ßu›Íæ¼?­¯ooîŸ-WëÊí¬ÎÙŸw›þ|Š1Û²JÁ§1ëyRu!‚+A(£Ø8Œ¡´ ªÞ‡7ß¿/\5ŽÓlÖˆHضÇ~¼¸$KIæùý}YÔÇcï%9&À”µ;ûÁ«í»3(++PÖèê|ûYŘjgâ4IF@MYÒ8 ‚àêêÍïÇi¤ˆ™•‘(©"RF’Ô2‘(1)f€¤b­›•Mö¡­J”,ªâ8 |ø°=lŽ…-ËÒmO‡ó1¥LŠûSï'°,€†™.ߘ(YàîÅ˧Ͷ©‹¢*¶»“±õÓv¿Ýíc–åjQ”Æûú»ï—çãÙ˜ÆÁO¾ëñ“Ï>d‚ýîôôðD¨ÎÀl±\®×Þ7µ½X®®®Ç€V®üäÓW¿ùúsˆ§íñ§¿ü‚¾~û]=¡)êÚY·XV€BXX[Ïgglôqè|Šè\³;<¾þþû_þê/Ûùüñ»ïˆu¶œÛnÏÃÐÌ–|:SBU)¯Õºr&kÎ)¡Þ\ÏW«ÖZ[Ôõpš»Ãz}5ùH]]†äb’èóaw°Nn–«>nügüó_ü›¦(‡Ãáááíã‡ÇO>ÿÔUUY/~ûëßþþ›o÷ÇópQ0ÆÔcÕ4óõÜÖõ|}« 1ôÆtÖÎ>}ùÜs{s½\,ßxøo¿þýæñô“Ÿ½Øl»íŽ÷Ç´}:ÞÝ\ŸÏ§‡Ýù̵ܼ\£í»ã»o»›Û/Þ¿~8…ã~øùŸþ|³}˜Ž~y³òiêNþû¢a”›»EïÏÃ01›ãé¤Y½WÏCYV!¥8åó~D±T`3··w×›ÍÀv§a½lÿÃÿñïž}²zÿþý䓱l-3We5oWW× @II˜9„’´ílz?t˜c¾,mÝÔ9)M[)jSÊ9ŒrJhŒ{ÚltºÓá¸?ìG?tÇ3•eS”Ín»õƒWÁùw¦¾º¹£\a}úíf8ž,[èÇ¡m®š¦¦Á:Þ<=ÍšÙÓv;¥ð‘­¤T»fV­ºóSŠA1*rB“È:FC, €H@Y²@hŽçž9.ê¢*øØ%DBUÁŒ¡§ßû413 jõ* 4«È%,N$ Θ,’/JL³ªZ–ŪnU“Žc7êþ4 Ã8¯k0x?æ”r^ÏçRRæ 2B%#Àí|nÈJ†¢,cò^bL™L“2z–Ë¥1ÔÎJ…ðøøƘ"nw§Ãá°?œö]YÖc?¶ûãþ(Dçs—BXÌëûç7¦pïÞ½ùöëß|ñùËÃa÷âÅ'‹õU?ŽëÕ:øÐ.–Àæñí“#{ûòÅa·†¡-ëåbY5  ¤%¢•ÌcïA¸;ŸÇ1O^ë¶ùì‹Oß|÷Ýýýí|9ÿúþ¡Ÿúª­‡àý¹žÕŒö°ÝúÉŸÎcˆ“z?U]-–†MáÜ|^…qàÂ$[A½¾[‰sõ5ÄÉ,AÒY¹zùù«Ÿüò_/æ«§ãq7 ýaøâ‡_¢Áò¯ÿËßlŸ61ì^ŒÝ$Qªyûù~ôçù¯?<¾¶lϧAÁÔU•s|ö⦕_}q›½y{Ø&Õ¢.+[oº!aÒ¦nëÅÓãÃq;’ÅŸÿêGûÓ¦æêýwÛÊñ»o·Oï;àŒèÞúæoû1„¯þt>C×aTI‚©=;Õ”Cð¡,Ë#ΠeÕ/’Á’É1ƒBô©è\±(afBYÍF]Scruˆ¹´¸œšƒu•€c[Ȭ€ªpUQVeµÛœ¬!À † Ș†4" [ða@KÉC>†ÜnªdÀa:ï7S€hZeiFÏEÕT†Të¶ACÄj ÉSFW”Ĉ çÄ‘QSC–PSô’…Ȩd˜¼WBcR@U›s&ƒ €h€.)\É™PÁ‹ãòj^ºUU5BˆYÉ\è9ç ÁœÅX&BkMŒñbÒ¿ðÿU…ˆ™ " 0¢øg ‚ ˆcQ&vY²¤t<\SÖÙq€œå2 ÆKåJÎH˜Bd2†íA¨9MY@ÅUAIÉ1ÝÜÍWwËø»¯¯nn¶Û#~þÙ*ÁøûoÞì·>guF>ùìnyÕ*©Bêúc–ØÎÊ£÷êåùíý~ü²(Íæñ)ùøÃŸ}‰&Ý?»m›ùû÷…1……ç/׃?>=mˆ¬*‰hŠRšÆa½\U“?Ç4N>^V­œòñxFì§ÁlfånwðSºœ·T!%à•À”E©ˆT·³õÕêîîšHsÎóåÜ…îNg@ž|’”}?Ä—×ë0¥Â–h“@®\»üÀ IÑÖU»jšªª›²(\ÞZS¹z³Ýy¢ Ï[ͼZ̪¹H>ö»Q}" P$ U¹ –€HP.†MŽQœmÇ}:n}U×ýõcºP‘˜ÔX% jT ^>NÔ È¥± 9園EŽ!°hQÝ8¤”ʉhL©´üÉý=‰ô>ŽŠˆðêåóýáÀÎÉ¢*u•µIRH¹­[TIz<œ†~xñüÓ¤(˾ïfóæêú*%9Ž)†ª.®îÖí¢1®úâËsáêvV×MVC˜¦X:c>ÿäÙòz½^Ξß.mñæÍ÷7wÏ”L×§Ãáx8ÝÞ?£Âùn@ɶ5! †ËS;kãÙ¼ÎI‡> š)ö†)çàœqOÛûêÕWoþðÁ§üÅ—_ýö¯ÿz±˜KÎP–kD´ IDAT¶tEžH‘ݨ:ù,>.êº;tÃÙŸüèYùéñ0LADæËœƒ÷§áöz¹Ûú^LŒFf_þà«Õõ󦪧a||Ü:[þîïÿæÅ‹«O?}.!|ÿõ×)Ų©ÌùxНîVõ¼ý⫯ŽÇýw¿û}wîÛårµnb^½út>_ívOoßìó›¿ŸÏ¥®|Ó„Å|Q´ªj˜žÝ,«¶§Óå øáÍ[–úéÍ„Yÿ—ÿù‡ñ|˜¼#Æ,N›qûV¯noî_ëkUïï—§ p ÿî?üä݇‡¾ã¾E:çÆqTT* æèA“a®+W:ã U%,›¢¢t]»óñ@ÌY(‰Gï,,V•)LݶJ6$ÔìÌ+†œƒ $"ŽUºE­2QuÛö;D$*ÅKBÖÙ’ëÕy8w6KLÉ"ç"÷uY(YÒ rJ’2©©ZS5BÕ, _¢­ˆ”D1&œ|Ѳ´¢™ÉŸ.xgBe$›3 XFG¬I0™¤Y(%ýh¥g£Ö°1—ž^Bà“ˆ03IÎdðRÉ›Œ½äÊáãÓ EÁ1øœA2(€)¬¨ 3"8kHMÎ)%@‘K…—¤”±Ä Y ¢J¸œ¹.<$¼äC‰ˆˆsVÄK.øã|‘¢($eFrÖiÊÖba-ª2;ç@PA@pì»Âà~ôêß~ÿáÝãasdПþâsvð›_}ÞÇõÕ²ptss}s»ôqüì‹O†óñÐ’¦¤d•¿üäå/ÿÍÏm¯¿ûdýü‹ÏliÊ¢1ç»›@ùä³gÆâ~·ÿüó¯ÊªN§aªÊ’ˆN§Ã‚ŸzB¨êjÖΪ²¸Ðïˆ ` Ãàûó8Mþêö®®gu=4ãüäUTs‰*€`fËUÓ6oß¿;uÇ‹HÒÔ³àCÊé< ’qÞÎW³YY²+Ì~»cŶ­SÎW·ÏšykØ”ó%—¶ªCŒ>Æ8k1úœö§!cc„Çó4Œ}Â)gB U&%MYˆôÂï¡ XÐH¦áq œø<¤ xég#D"fÔ†¥Bhl‘S(k2Ž ¥Ä¶’ä'ÃLDYIU3ú>¨Œ~˜ÏH²—¬MY†nÇiT‰¨•sñqªv–BÆŒFùzÖ<»½I€‡Caªå|ÕÎËèCŠÙØ2ù<_®ê¶±–ŠÒÔuiØc]—Emf«Ê¦mWËÕm‚œëYí WW›º]®g’SUÕC×7›§w$kÊ"†ñåó»ª,Þ¿zÚ8ß·Þf9 Á#RbÆöÐ ²Ò}D†öÐsJãz}× ­V:ÓyUM«ùä~·&¥)Ï„£ŠAtÎ Áùè]7´&ÓýÐvm*SH 2yUV‘ãqÏœ(@ "ˆQ>C}>KD…Žr":>ö! F(\ ]•“i‘•V³BB”ˆ9a^gc !BâA+…‚$„œ""F–É1%”'ON¤< ¹ÈÐ3‰J Î,1âéüT),2îš=R1[-Æ. C5ÏÚv{vñXgSZž-æ§«Üšª²D<›Ïfóél> !hÞj}ûñÓphNOW’bì‡Å¢2¦HÛî1^^\ ±r¯«Éz³}ÿþf:]œžž¸q,ˉÖÙ8vYQæYU“‡ÛûÙ¼òÞ}º¾ IÆ!XU»Ñ©D)x7Ä\gF%";«¦xäeb¼˜TOW)'—Ujˆ.ŠBÌ»!v½GÄY]3é12¿0 Ã^Å~Q„Ê„õºõLÆ"3zKVËÕéÜ`löC— ÎfdËÈhQ¥¾‹Á³Ñ6Ë]×CgjôE_Ôíæ#&w.a5éú0öÎÚš¡@0!m­HôQˆTžé<£0&NÂ"¤ˆ4*E„jÆ”¢Òêx¹Òư€Ò€”òB@LC"Z+bN, ©ã‚„H…åÈÒaŽ!€ Ñ  „"³²Pbn-‚"ÒJ¯öÇ™ŒˆøÑ!¥ 1 Ç€àÏmŽ1¨Ï絈V0"±ˆ€ãd‰ˆ’Ö&F!BˆÆhV X’RŠŽÕ£~^€‘Èqz„ª´Û @éêdé»Ñ˜üg¿øÅéÓ'!º³ÓÅýfû›úqhÑj뜛N«“³¢ª³¢Ê¾ÿ§ßm=¢F@,My²œv›ç_Ü®ÙKpm]kà°Ým¶Ž™™“±öìòÈø(Ú«p¹\Ì—s‰>^\] Hf2«éôü$ ;7jňnèm2ml?¶Ú$%˜|×'…XæE^”Cï ®Ëöвg±?´r,ªgên¿ñ>އ¶žÔÆ*‰1F')ì×k²êä2Å`)mnßwíXO¦Ûý®é;BeˆPàduúèéÕíæCïG 5©1&?ãÜŽ‚ã„P@Á!þù• ’”4'Å~uR_œŸyÏ>D/q= )"$$•‚aÑ`µ—P«õ¶Ýu."z‘€"„ xä_…˜<«”D‘6ÖnšMUäeU×Õääd9Ž./ó“Óå‡w/.?¾(K;M«ªî]׌VE™‹ϧ³I5UER¾ïÇO××)†aèc‚qÃÐå¹™,aýp·XÍV'ËåÉB—˳g/^ >þôÓ[I©k›Ýb1¯ë2„ñ¿ýuß7³åÉÅÕËÄQbŠDÒíïÎV‹nßôM£+ŠyYÕŸ>} .â«GgíöÁp”à…±ëýýݶéB9™i“ARqýz³7Y6x7ŒÑ9F¤ù¢`ñ"¼Û0y‹¬Ÿ¿üvº8!e”¦'O¿àèÆn÷×ÿÃxõõϪª|ûÓo®?nnï\VÛý./«¶éû¿ýÕ×ß~õl³ÞTu>_LÿóþÍt:³¶Pd»öÝÛ]d<¿šhÍFX¼7ŸnÂÍCóñÓ°Ûû¸‰4­·»¬Î(£ÇÏŸ]¼Û”geb?[ÕÊÄç_,n¯oˆ )¨_®ò°oº†I— 1†&m? à© ,„x GýaâX• ãRœMÕ¢ðÊû¶i]4*ò™õ‡~|—¦c²d‹1úÆÉ ”ˆqœNr×,%ÍImdh ú¶m¼ ˜0¢j©¬ETUU¨(¸Ũ$pDI†À*0 »6 "d¹"ÅJ‰ÖXW…p"RøÙ…"Æ Ö€˜%E"Ì^Ìm€nt,`9V|I!he˜áØO2ÚÇËX”(E13¤(täz¡çA‹2¤†"•3‹1‘Xb`D À€"ÕŸíH¨D¢„ „„`´"­*Â?›ÅðóÒ[XÍò*¦˜DøóäAab#<«jçFFÇ< l÷ýÛ7÷nàI[£ûf>ÏW«ùf¿ÿéïúA£ $³ß5n¾üêUÛw¾w®ïÇnV)ä¹Ý5­ ,"‡ëëûO×ûÄ*Ëu?ô};rä‘s Uaëºd‘C×ô1qQ–)…±Ý™L—õt:­5Êa·+ÊâòÑEQ¤Ñ˜Buq¹º:¿$M£µ¶DQy9ŒMJà\@ÀÑ UQ 'вk÷,’™|2›(ÌñþþöîúÄè¼ä“zZåu•)âè0&fÂ]ÛÔrtFäU}}{›ŽÀ'@ø¬æÁôßVíŽ]H bHúA@PhE(B’RDÚöM_(ë ú(I bB@J€A ‚d ²ÖÉs"!Ѐ: 3' ¢¨0¶Èía‚("(Šœ9 I | _¦túûÀŸ±nÇSX|HÆê#úHö×Z#*fÈ2«4ZkŒÑZëÄéÏÝ/"Ê4 'fD:žþJiø,¥‰Ç'ÑçίŠHt|U‰EP= i•kxƒ °!°Y€ãÚTelbN‚ ÀÄJs2,Ñ»årÖ¶ûÕjÂØ÷㡺."˜¡ßu]7©§—«¢ÊÞ¾¿¾~{¢1V!rb(̤o‡Ä\Åýím½FXž.³júp·Û¯7'§'óÕbŒ±šNwM{×… $µÀŒûA«ÂLrÔ†mshšàÃØ»Áy<ì·çg«GOŸÚÑ(RˆÍ¾WŠæË‰Éºv¼º:¯§Å0úí~ßv}QU dm†(nìB‚¬(bŠ>ø0$)ðØ2f>_,óÌ,ÍnÛ5»àUV—Åí§ÃÐïÛÖw!ÄÈMߪÏ+x´:oZ?úd­I)"1¢0°×Ä„ AKú?ƒˆ0€DAÔb8A‚¨õ}ö‡ñâääö°÷I’¢IÉQDˆ¹¤ÓiþÝ_¼ÜlZ“ ˜£y¡°0# Mg‹fY‰ø0H Ín7 #hº¶ß73U¾|õõÍúf2+ŒB¼¾¾§I1‡{ïÝjµ"Çåb¡”U`“ ÜÉù¶i7÷»]ÛîYØf¹‘àŠBn‘bÛŽïß¼ºî»¿üïŒ-Þøxr²º¿¿[®fýÐ!))mf/®Ù,g‰y©B4›mo¬.jsyuqóiÛºo¾yu~vöîÛóËþáæS5™>ÿòËÞ^Û2w®!œØãÅåS"‹ÿÙw¯Öû]ßí¶CfË`³Ù—“œHwÍÛ’Áœž]=züôôâr~²ˆ1ÂÃæSYÏX©¬¬Êzy~vÆ1þé¿Ù®?ùÁ k/r{{P˜=y<›ÔÛÿø?}Ó7Ç÷ÃõÝ6"/VKDÌKmR6 '—ó*[䙚Χ¸Ù­ÏÊÔÝO.­s‡ªÎëi¾ÛíÆÁ¥ä?¹º~s#…@8ØŸ|qÞnÛ]?©V¶ruY4q3FùñO­1PWTgzu–UuAäfsÊUªs»ë|H)·´ªðBª3úb‚µjSJÑ(À^ ÚÝ÷@a4&ß ý# º±,Êè]YU í0¦Î‰„˜Aˆ]Ç&ATéU>_f{b§KòÚDc{—” RjÜQß( apG“ÛÆsí#G§™±2C1zÆŽ.Ób¦ë*3Š «H‡¼´Ãà0$V¨‘‘ƒp:*x•2ˆJ)-,Þy"ÑDÀ HpbaÆ”ø09¡S"#‰“9¶«!qR¨µ2J)aa6Z ÷!¥£×C8ö~=©„!DŸeÔ GÎ ¤˜RLBG&Ž)‘0ÛÈL¨´þ e`Ò€”‘™£³HŠQ)ÅIˆôq„%ÀH rcˆ`Q\ÌãeÍcò‹ÂN¦Õ¯þíß qøñrí8_$…›us²šóó—Ó“ºw½w¼=Ü]¨¬É9` ”[ ÔÂ/þꛯ¿{Þ¸!¡ì÷û‡›u·;…=:#KUWy‘{C`"Ê “[«,Of&£aì·ë$4Ú8?îvûØÇI=¥»n„ÆqØí»0x£htƒëxØí­QÚ˜¶·›5¶Èò¢(2«Psè;C I $›,æ‰bÓµ"†Ñ°ÍtÞ÷ãÝÝ]Hh²“ó‹‹qŒ*a”*/¡í[ï# NfÑm•÷‹h²À@¤5pE`‰8ZDÍþ<é“ÏS<¢ã%Å3G! Ê´Î@åd5©ÜjI‘J÷mF‘Ä *ŠœD'HY™UUqw¿w•ÈQRüy±9 ÈË'_<òl»{HqPI)TD@‚ãdRf¹ÝõcrQM&“z1ïºN!¬VQd³Û5Í¡Ès–@JËùr¹ÝØ4¡Þß|úUàTO§Dêì´žÍj,ó 4>}ùòÍû÷üíoþÍWDúþaï\ß>L¦«<ËRòÖEDçç'›õC™†Šàü~ûâ‹‹,3GÏ­‹˜8ú‘%–ÃîКË'ÇãÇ×÷‡‡‡‡g_¼üæç/CÐݰ~ì»p‚GÏMfUïÚÓÓ3´RêÝO×ËYµÛoh1.„QA1„qÇ”ºýþîìüìÕW_ ]ûî‡?¾}÷ÇÅòBiÜ»‘¥ëÚAvë‡ÝîNk5z×»þ~3Ä(«é´oZ|ÿv·ÝÆÇÆ;Dùôôôt²(RìÙûºœ`°ÓÙ¤mœ&_/4*IÜ-u ¤UÑ:…˜¹Òr¶º|ýúc:´./§1Èú~ûÍ/^ù ŤÚÜvwï7ͯ&õ4ŒMmùb^Ïk Ò šH™ý´ ‡1e¾8«-)*0ª:ŸAòý eyZ–ØÚ¥Â2;jè¬|òd:aÜtéa3(]—³IBWäfó°V¢úÁøХ$œZ°Þ±j:¯­ö‹Œxhˆ 4Èñ0¶^¢ ±m5FÅa #÷>yÖM3ÖK;YÔ»ÃÀm?UËÉ£ëÆ$ÅYö™N>x¥¸ÌxZcpÐ4Ĥ"KFVňI±@D‰etAŽN•X´5„¬Õ±_e#ƒ@D%ˆ¢0' mQë’Ø €$Ç"—(…1ŽZkD8š­° ^”mˆH!ê™™thÄãõbŒ”¡5ÊhÅ‚)ñQ"æŽ3eÒ”  !ˆ"ÑÂI„E F>VÁ€£¤È"Hʤ$"¢ ’IIŽvq`Tª4Ù1$Šq™O~õ7ß=4»®9+ m²O×÷¿ÿç7€öôôd}ÿÀA]^®þúï¾Û6ë?ýî}–• Üz}Ф”¢>&‹v¹Z²†¶;DNý/~ñ¶üöÍI‚‰1!)e²\iƒÈ QøÎ¹~û¾Èh2™L§ó,³u] !¡Ê²`L©Ì«f³‡$óÅJ$ö‡›”úÀluŽdº>>ܶÉGRÐm×ŽÆØ²¬Žo v]ë]Ð&G„œ1%N¦YˆC3ì9b¬ÊI^•˜©‡õmˆ~V­–Ëy>«ýØAì«BµM_•µ6¥$Û¬Ì3>™×}7aï:EdȨ\…)œó^BŒ@Qà¿9šÿe(©ø¸ñY9[Ôsˆœ‚J rÆ‘)]œÌ !„ˆ¤€¾0bDÇpw»&a¥Ññb"Â1&ÿÿöß=y²Ün¯ÛCŸ¡×ï92Gb°J £WDÏŸ>UD¶.Ÿùb¶˜Ÿ^œïMJ©,JM'õ¤ªK‘ðpwëZÇMשÌVÅäHò¸¸¸ð~ì‡AiS–µ¶v³Ýí÷û*·/^^¹8®vóÙ‰1v6ŸD‘tzv2 ï^Æ>^$RJ„7›û¯ÎKÞ™3“›±iÙÇÉd\Ø5ã×?ûˇ»{_Eòð¯ÿû_ž?ºÔ %Fæúf¯”)s=›fue‹<Ûï¤üêÉãÍþcÛ4FÛ<›M¦gJƒUJK¹†±›Í&ÖÐÓG}³úýýíöoÿõ¿‘Íúï]ßlëåʇq}÷ã—/Ÿ·Mãbº¹ïCˆ¯¾|¶XM¿ÿÓ÷WO¯¸(¦Þ´»õ./«rZ޹±~2ÉbNfSP._f“k¶‰Ç $®VgƒóÎÞ6³‹Õâ°ó›‡~¹œ÷C;[ª/¾~~¿~Èót}Î&Ÿ}_בLôê±>ì[#¹F2Õåæ¶ë£mÚ6ùT䍮cLûÎ ¾Ë³áą̂,_MŒ›RaÌàEìDYôQÿóïïFmeæ³AЈ©ºaHAõ®i¦³é¤Ì„µj|MJIN nì÷›ÜÐl2é†Ö%É'eœjÔ¨$£ùtj,;cm Uùlf¹o½ëxhœVØ ²Q†HÄ’R3pKÖ’FkÌ8ð0xç;”¡©2#’’p’dŒac †SÊóüø@®H Ò 5Z+@­ k£Ai"$⣠Dëcó€A{ú-åIʲ£|Ž9"DPJ‰HJ‰è(FB•RòÑi¥@@XXX„#ãéÏg DDf9B|ÀXCê9M þEH‰$œ>g–Ikf ¥T®Œ ¢0ËÌ–¯žŸo‡Cߎ!Ħëßþð¶Ù÷½K‰­ë‡0“jòâÅå«o_üôþÍëï?¾|ùêãí‡Ív°J¥b®ò““Õzs;ŸTÛûý|6Kùøñ“×ÿü›Oï?8¼¤qHZÑÏ~þ‚™…BÛö?þéþÍ›v¿Í@ßÚZ­”&C¼8?Ç~·¿k}·Û…þ=„pš’v#jSÎqb¥´Òz6ŸÿæŸ~âh‰8Æß}ýÏ}ž\>v­êÚŽê0YØ2×Ožyi\'ûm‡Ä³S/òwDŠ‹óI?ÿòñ¤Æía;¸ Óð7ß=®H‡þ¾Dl:”IàÜÑÎçCôÑG+Š_=Ïñíéþð6A†S¶8=mý0­*ïÇ„”î¼*'“ä\l¥4”¥”­ô´, ä±=x;Ï*…®m}1E½^¯û>õ]*órjYQ[h+¢8§ÁÉ>°˜Ë¼ºîêbUX•/çeH¡wÕ±ö$¢”ù—:•5/1xP¢ Ïz­ôñ_G$‰°s!2Ç£> @ Èç3]àHðg­uŒIk¥&ï¼÷>·FSJGß/‘ŽýQ¤2k@Žß¤‘X“Òê3¥?¯ˆhüórX‘"RÇ…wŠ¢?û„•&ac,]•Ú°ƒ$愘1ž/K}×ú,/ûÑAD@ “õ#ŽÝküú›çgËbRýðãO×onêÉôÝõ‡Ña¦‰%yDbÊ”²$Éù~7œ]\¶ýnýð°[÷šêízr²<»šÙŠÜ0pŠÖäãÈ:³6/ç«úìrZäz»ÛLguYe]çöûfRWYnLž'"!œÏçýètž %Á¢š7»6rŒì“ï9…£²Ù0¸Bž!¤¬0YžµíÐw£ó±;‘صwƒ¡|±<ß7‡Ä!7ùjy¦ ‰ûmò¾Îf§' æàûÑ­RPyV6û}™[€ž!°ïL’ˆûÔ¥’¤|ò‘Qpõyw# ‰Žùãÿ¨eFþü.‚ÖÆXåãÀ*FŠˆœ‘"AN ˆV!%ð€é8M:VNðX3HÖÒ± bQM•MÌøøqO ž¹9´»¦‰e=Ùï›nè#²ˆ¢÷ANNNÊ¢xöüÙ|¹„ß¾y“›ìíOo•QOŸ=}xxøøþãr1evÓéìдE5µe齚. c(«J)U×µ1F€ò¼GŸEJ|uyQX#á×ÿåþðý?ßÜÜÝ=l_<ÿB)[–ån·~xx˜L&ÓÙlðnRO•¢ó‹Ó~8l·‡¾]çü8^¿k5d…ÊêZ”ˆ•J™y .¸õfûÏßÿ£fuqq »[,êáîbÃ`ÉôƒëÇáù«õôüÑÓÓ_ÿxû±ýî»— ñää¤.ëÝnWO³i1Q!)Eúîãu ”Œƒ;½X²„ïÞ¥ÄU¥L]Mgó«ùéïþë÷Ûý>ŸUÓjšü«¿úöӧ뇛ö·¿~hôÅ·¯®›Ìm·ûy5É­-ŠlZO_ÿðÓv³…,ÐýP¤”o÷‡Ó«zu^ X¥Jçân×l·ûåj±^o×÷.bgM™ç«õʽøú|Z›f×T3óïÿ—_ ;áÕ«éŸ~{ß7¡˜b옅g?{|·±lMr¥’Ø5nè={[ÈÕR+ÿ)´ãâ¼êÚôñ®÷ÕzÐwŸ¶Ûõz?©f9é0†Õ¤Ìe6Þ|âÝ&ä@J°\ΨÈÄ;à”œàèmðbT̺0Õ4×?¾ìÌVÊ*YܾÀÉéÕó/ö·k?]”CƼä“e(´RüdÅFK7†³iv¢F‘2«œó"¤Sƒ`í¶›,ÃÙÌVŒCÛžA§„J!¢ñn,"p\¦Jâ$ÌŠ1kH0€à1sB$‚¼ó!Ë da­f&‹Q(I I§tTc¦DJ>÷…AkƒŸÙû (Z›”’÷ž™µ1ˆ¨4ÙÌ"HŠB`¥ˆYˆð‘V¤8qJ‘”BT€1F‰ÑçEÌ€À#j#bE<i£‘bf¥µ©ç«¹óΧ@0#ªŠú~·ßìÛ1` .9¥²(S:9=ùöçOQ¹ífüÝ÷?4Û12oö†¨ˆ© ièƒcïÁ3,.æ'Ë®í6½)Æñ«o¯®ž®L†Ã! Ûé,k¶]óÐç6tÍC®³é|b Þ+Eœ¤k‡üè·8©2?4Á»ýfgÆÞõ»í:7úüìA]JZÙ‰œ÷Ìà|LœR !HžÕH2©'å¤râjß…ºXeÕôîpx(hVµÎ‚±ùaÛ‡¾ŸÔ¥ ÞÞÞHLaäjR3°Î$ŸU€ª°ysè0+8·‡¡NÌ)!fÌ$‚,PBФ0!‚0 éh&┑àÑZÄ`@i–L©ù´F„žåS"@Ñ"Z¤@M RÕUã½0(Ç1€°0 ²Àñ›†1Ä4ºnôƒˆб‹Àˆ‡a”àÿöWKº¬§'ë통šžœ^=zº\­ ¶‡ít²Û›„2_¬Rè<â|:ë»qº¦Ý‰`™ç“ºª«Rë,/JÔjð®ïÆ*Ó‡ÍýõÇõön÷p¿“ßÜ|zõêÕlur~~¥ ù0–å‚d³]+%"!$_Tå8»]Ÿu5­ÚvqÓ:S˜OêÙûwo9…ùêÄNk•–ê<ŸÖ““fs7© è2¯—už!©ûûˆq±˜²Ðèâååi1©/½øýïÿ˜QÈTÌ´±zvzöd?Þn=ì‡ õj:׎ÞK.Z Äíö~³Ûõ.í‡õ|¹pýÃÿóýïV뻇ݾOžÝûý´Î&6‡AgyÚ:´ÖÆ)qŸUúâéÙnûQ’ÏË i8Ùµ2™ÕZÇÌN€Ë™‘bTן’pY×·ûà8˵2pry"÷ÛÞ`‰ÿø»Z™à‡Ö©¿úúë»ûuŒ€¤E¢f®ó"²[v‘Á(cµJœ 3[À˜jBCßýøúáýõ³„} ¤"RI(žS~\ΦÀ°~Ø JU«¯¿}vþher}ûé¾ïGR©m‡RLÜw!¥Ðû¡Ë­®óRiÓõ›kE ‘»ÃÞ}ýdZ*-»ÃÁfå0$`;©¦‰Ùù1³ShûViœ Þ#CtcP¤•¦¢¨DAô. Î{þä»ûä[Tµ²`MÞ·;ß“j9º$i­mJà}ð£IÓim´ÑJÇú~ÐÖ‰]ß($M¥¦•Q‹åâj>Y¹f¯´ 1&uTq²h2d ÙÀñ8ÍgæÏL†”5Æ §²Ìºš0öÞ‘Ö 0r$@+hjAEFï‰(x”bIe¨4 ¥4Å$À’çf±˜vý pL ƒauqzY—¹Q‚/./º®»ýxã]¿»_Ï—W/¿¼,íÆK*Ê8aVýñ÷¯o®¨®Êg/.'“ª(ªõÃþõë?jM6ÓU]&]Ÿ>ÝuíØµîþ~ûÓošýæù³Õɲ̋›Ûk›©ªb¿ß¥”¡(JEjÜúöÓ¤˜p¤äq»?äV/çsçýýz—’̦‹Gžj­­QÝá°X./=ª§åâdQÏæ—Ožî›fsè^¿~O:Û»”Ž1v»ÃÉÙé‹çOs«o?|ÈŒêú¦÷M‚ÁG»==9/ŠR·‡ƒGýê/~…¹Ýß6Ûýn¿Æ>ðŽSøö«/ß¿}ÿÿï?x6O^ýÅúûÿõððiýé]ÛL‘$i;ï]˜N'Óé´wa½~°™^.§†;îû„¶†¢M†qì©¶[—’.ë²m›»»›ù¢˜Ng·Ÿ¶Óz0.WUïú¦9¤ä¿ùúÕÇ×ïïoã›wŸ¾øöªšÈû޹UËÎõJÙp·kPfŒJªÙöÃ4D©ëÚ%ö ­Å²œÜ¬SLöý‡û[U’"³¬B]F´ƒó>Ž_~ó2F@‰®.Œ¶¨÷ƒS¹¥L©~ˆ!2 Þw¨Âê|ŠHZåž‹®Ôìûà Y;8ô`(rã$„îuå¤(& ›‡ÃÇÅ鼚*׿tÉdÙkß»Û6^·Né|1«3ö~×÷¾q¥®ìtYŠ.‡¨›¦Á§U¼Gk@Ð ¦}B"e*TǰNJ) “BGƒ‹1ŒÖc$$A¢¨´(Â_VŠˆHÆØ Å“Òr\Å‘JZŸô!Æã`Xˆ´÷Bh1„‚) ǵ>Š?)ÖARD€Â(¼±cdIˆ À€Œ„,xDÉÉ1ù‡€1Æ”Ž«Fõäì|·kõr¶Z®j ¼¨&“Yî“!¨iY ``à\e³zº:›üðï¼'`–£°1"U AX$ðè“‹F[AH./W—W«ÅÉ‚Q»6&*ʼmý8xeõ8ŽãpÈrÅ÷»~9 ˜Ú¦×J!ân×±Ä,WóÅrSLàÛm6>„¶o]߆àµÍ«r2)­Bu iKÎùíæ@ “@Qüáa«´Im{ð£ãàÉæ‹“²ÎÆÖõ‡]9ËJeÔ´²Ì²^ïƒO’$³J)H1Y¥Çn¸½½ !1Èèû˜üb¶üúËof‹Åt:©j{{ûA'£PUÅT|ô€  ©ålÎ>DdAøŒˆBadP€> œEðn #(RHŠƒ<‰ÉÏ«óÇO¼÷)ÅãjˆP‹@" ˜$#ZTµ$ö‰A)• ¢V’¼w‘?+Š¢|üøþÍO?|xÿ¦.‹Ýv»]o>¾{×í—'«õ7}vYÌDTfl9©êõa.-f«àRh¬ >}øpóæ§wEžo7Ûap1$CÊNÞóÇ7Ãa÷å—_¼¸Œa !02C*Šœ¶m|(˼w·÷×ï>imÖ›]LÂHšÔn»õÑíšÃÅù…±f‡ýnïºÆM AgyÓwuY Àn¿y÷ö£¶ÅÍÝýl6)jó‹¿üùíÇójšYZ,þáÿû/¾2cÇÅjz¿y¸ùôbвN¨”­"¤ˆúé˯ÿÍÿøwï^¿nšî(§1FmÖk×¹ÌLr“ÕËË÷ÿçå¼ÞÝ|ÜmïªÚÖÅd¿íBäûÛÍ×_~yõ誇»Û»¢ÈŠ¢ÜoâÛHWh2eBQJ±Ï`m6 &Ói–å}?ô}ûìù'ûP¹V©(Õl1éÇîñ£ËûëkòýÞ±Ðnw¸ù˜úFa¿o²ªèúPåUQàógµU¡Ì‹ÅÒV“Ò2­Ëah¬æó©>›€øŽ~¼ëO=~ôøìÅ“I™a=­|òJW9ÏtžËèônû0«UÓðúÀ*/EA–©¢(†>:ŸAn “Ii,+ÊG_uûas×…oú¤u^TÓnd²*7Jã0¯¬µû®µÅ0ÛîJ«¡mü¡wM )©É€ÊèyH¢­iš&ÃÑãn ‚TNçy™'‰ƒçÞ…óÓ•Dß·=éÜ%=k¥€CHÉe(qˆÌ,Z{UG¬€R¤µŠ!*BJ‘QA2«‰éèDcsø˜ë&4€ ¢Ñ  ó^iUDÈÑ&ǾBž"Š1*­µR‘ÂÑò­ŽÿÂLj?¢1:¥”bJ‰ÒÿOÔ{‹g÷œsÿ~ß“„,ÏÙùB"" R!q`a¨? ‡å¸ÑñúHkR×'§eQÃüÉGŸÌ¾Û<<¨Ï^U¥ÝÜoR‚ªm ǘ$0(B[f³yLI302|øÏ!ˆ龜÷ÒÄÑ€Ô¦ÌM)õ¢ZŸ®›¦* kóbß÷÷·›¾‹OK267™>9kŒ­TF@Úf 癈X@Q)h@)Fel­>?_'–nèµ›‘!BÒUÕe›‡nŠ‘´Š»ÝA˜¬É]ó¢2:3F™,Ë2›¼ÛÝ=e(Ïs“Uav„P-WY®Ã”Ä'%æÕ'é\vOOFg„F©Ìh­4{?ÅÈs?LÓBD¥8EçÄ©-Û¦ZÌ>¤$EaîoäJ£€¬V'~Š!ú‰‰ñÒÕ‡pQË#Š@€" #X  P (ZÙcba-`IK?Ó4<¿¾8Y¶’Â8{D%€ÁՙĈÌsŒ¢p‚DÄŠH%ÅfÇn  fAvÁã¸ÚÜÞݾ“œ#ÖÏ®–§×MQçãî0}{»½¿»›“ ‹Ö䦡®ËÍýݦï†a¦~F4™-„I#Ûª9La臢(ïïWMö‹_|y˜†1/ÊÕúäätuuqª”žg—å¹Ä±€´Z^›Ü²âÕÙ顟æi>[Ÿ¬N[›©ýá°=;?y|x¨ò\aH̤²¾;¸~´ ýMn**R$qµ¬ËÊ–¥zÚÜÖËåÌêÀfæüþ±ï÷ó´Ý¸1 C4y½}zäà×˪.•ɸ©§‹Ëüõ›‹UpAR0(˦9ì:Rª°Tg\ØÛÌ{Õ÷*rPŠTVEÓº1ZEÓÔ£R=g*•&ήÒ4ŒÜ»Êër;t¹i’KÜφ©}yn—õòô™wq÷þ†d^/¬Eg%"Z^,í¢až,Y‰(f*‘ÂØÉó®ãqT Š0)L€h$%Lœ€ŽN"@F[BâÄZ«ã1Àãæ`µaNZ£ÄÞBMh˜="¡€ h°Öh­8Eï}L`´&aIQŽ!kmL Ř²¬‰./¨(¬µšg¹Ç3; +"-"1ËÅZ)BRFeðó  ³(e™Q@1 !B…‚@J«#fX„Eˆ“°Duvr’›|ÆÃн¹GL×——ñâáþnîC‘·¤ôxNž)DfŸpvarádµdŸ€â¨Iå¶yFQÄJ#À7€Ê€%¹9yÑž”¶ õIvý¬ÎËlæ‡Û÷]ï¶#ϨTYYQdÓBHeU÷ûÁX‹dB€yŠ13k£½÷‹fc’KkÛ²±uó´ÙKä'$Õ,—³›¦‰YDÌk£²¼4™5¹ÒÀ’b? “›0kÊlY&ŸbS€“Å©QÖ'gë*Ó´¸\øyØï6ËŒµ‚yŠÑOÓ¼X´Ã¼ó‘¬@…Q IR¢æý4îg‰h´ÞïŸ8 ˆæââYݶŸÿôgÃÔí[!BÅ 1 ‡ãÙàˆÏLîCEZ ( e $„íª^®ó² )xŽ )‰Œ’†î6›m× ³‹ Š „9ÒœRø‰ • ~HË‘EõJ¡•À)&Å ‚Jâ~¿{ýÕ7oïoo¨ò}?F*_¼ül·{üþûïÙà€X`G"šÆ9oKe)ø±ª[q}¿¹à¶››õ*¿¾8a¢¬§ÝÓbµ<»º~ºy7GGZÓ8'¥-jÓ€&7õ㡟=잯/Vyá'±ó<7M£d¶hš6$ŠŒ!Ê<û~¿-«£Šeö´¹›¶»O>ùŒ.ªŠƒŸ\ww¦éöá~·ŸrkOÚ…Ÿ M;»áðø¾ë§óËçßýî×/^¾xþüòû×o<àÃý»óÓõöaÐzÙ÷OíIÆŽó¿úÓ¿¼¹}óoÿòÏàFÀ´ï‡›Ûm7C^-ŠLïû0';'·ÝïKYÔ*ïC’˜Wº)­Áb…‘"‘Et‘c ÞßÞ×mÛïGLüñÇ×w·71$Hðüâão¾~3L}Ug›Ç~“²ù*ñ>70ngÑf¨¬¶ý<£ÒeVè¬d“óe[4¥4§UßuOCì’î=·ËÕöÞ½ßvì5z9?9mO×Ùk2Ïê"Þb û÷7f´ÇÑ/—íÙré»Cçœi¡’„RÚnzPƒ³…‰¤2!q¬š²]ä¶PÞó°ñµ’‚ÄÀNŒ®Ûu˜B˜]VÚªm´ÖFBw»ÝNy^¸«ë’`NBúhEˆ)ĘDÁ  *Å IýùO~(’]—„†Ùå”ýø‡ŸÿègŸ&Á¼h³²Œý0úèD¡1ºH!‰D"N)ÒrÙ€ÕEwò 2fd‹"ÇQ!ØR7mñüzùég—ÚªÛÛûn7¦”i*Æn@­¬UÇuÉ÷ÃqRÞÏóÐûý!ÅÔÝ4Â|º>+‹rè;çÝ8NÝ¡¥tA …ª(*0–ŒEb"Í ™E«‘ú®›Æ˜@eÔÐyQey§æ "M½Ÿ&'“2ûû‚öÎ×uŽ˜üìæÙ›åyhÜŒDšˆëe[´Íî°ËmÃa ã¶ôq2:#‘E™½º¾@àýã{çúÎP$AB<&ÔŽbˆ”’NiAºPŠA”6æÙ³)¦2oŽ?£ƒw‰Ñ#y$F`„’ þÿé¢còDà(>•? ˆX’H"ˆÂ¤ZÊBD°ÝRd•Ò u–çõÒæÕäÓÓSÇ ³<ËŠŒCÜÞ?f6/ëFe6Æxww“[ŸžTUñƒ/Ð.›E]ûàoooß~ÿÖ;‡àSëªDÁ`vþ»o^7‹¥6öݛãä ²$N½A»Û÷_ÿþußÏÌdTE¤nÞ¿ ÁMã¼\,f?7ÍÂùCL,‡}7Œã8öš’"yöâ¹ÖªŸ§E»üöw_Ÿ.ªEUË|?a¢÷ûù?ÿãß?¼{K^•Y‰ #Ûqf¼}“¹zñé—ú“/þçÛ~zÚ¾øâSk”Ñù¸O7oÞ¾|qýÅç_¶3§ìéæ¡óéÕõæa·ßÓ—_þ§‡‡Ga¯}LºX.N®ÜfK!ÉÔŒD!›éÈ,"EžŠHŒ1F4Æd1¦irÂd­V$1z  Rä' ˜lFƱ†Ç$ˆ”¢7F%aƒ" ,"I€>ЇŽ0yeµM)!›ü¡T@Š(Q†Dýä³ÏòÊ S¢·]g‘>}ñlušÏ>e$Ms§É»ùx}d”)³<„É' Rb…B ‹j¡,Žƒ$F&aQ@•-¬ÑÁ¹ÜZ›[¥äúbqyÑñfÓ=Þ}n nî’¤Ó±Ú¦ ¢¼‹ Ì h¬>9i6™Î¢C7Ì~.êrœ¼2¹29Cš†qžïýfß pnÕjÙ:—‘·m›åÙ4ÍEV C#“1@¨•²dA¤.ËÍã6¸˜Y[”eâ˜z“ IDATÄÍãÎíG›U®Ì "UYt‡í}(ëzuz:vÞÏQiÅÂM»¸~ñìáá®´E–çSŒ„9Š^.Obr³ë Éöé᫯~ i^Ô•1‰F¤ãè÷ƒjîÃr¢¥ÍtL)q‰ÆäeQÏ“›\8tCžWY™wÎͨáq½?¶Âà¼9@@ÔÇûEúÐ? ¥P3"’ˆÖúx Ä EhDdfmL»:#[deå# êªh„#¿ýîûäùâêJ[÷;¥ðË/??Y7ea”%kuYäÛÝ‘.‹zvCSÛ>zQÕåäüÃÓ¦ëFcŠ»»»õÉ¢ë÷Ÿ~ñÅ‘VÒmwïÞ¾™§Íúä´ïÝþ0°(ED:{xxjš:/táÙ³gÛý61äy©Éœ®O÷ûC_—v}²zóö= ÎóêÕóWÿöoÿŽnî¿ùí›ä• YûÙ>óãáiû(:yÖõ‡z±Ðª|óæÞdíjQ_­óÏ>yáºýÔ._¼:;;­ËfÒæþFRêöcJ¤Lñëÿ_ü—¿ùù_ýÅÿõßþÛa Ëõùþð~Ü?jÈ{Hg··w™Í6›Ç—/ž[k”ÊAmæ³ól˜3€”% yQiÒ¤‚VˆJÍn,sÝþãžc?Mnµ:Ùn·¿ûêMH¤Lî|H^ @iJsv ¸qYÁÉÅõùj±†ÑÍÃ8u„:SõÜIV¯ï¶»>ŠÈ(ˆ|e™} q&7;EÚh"ñ³ŸBDï!ÏŒÑ!­ê¥ÊhŽdƒÄ‰è¤jm¦½wã0ÕmµhÛëóáR oÞuoßí9ÉÕÕª¨²˜€H‰$—x»΃2@ˆ$€\få4ÌûÝ!ÅT·e?€ÊfU`L“Q˜U=Nc¦­Dð)ÙL¯VÕÅå²iëÝfÓ4%Q$ðMS"€xÑ ËB+â཈päC×#Sñ0N)¢È0ì€Ó8Ì(Ú3’º¸º"›Çû¼0W—çÌpØïdêû T ó;KfY5qÓ? Ž“wS„!Nb•U¥m{Ÿ XÂñ~\²IÄ0«”„ x°fµ:ív{Ì ›†ýØ£Â\a½jgöœ„>ÌyPøCùKÔa%xŒ©ÁqU hØLøÇãq'f6lW‹Ó„TVU5sŠÑ+‡ÃašÆqìnºÃ”·‹º®Pø°Ý>=í/.O¿ü“ÏŠÊ®×m’pqy53‘0ã»·w§g à8ã0E] ãTäm×ûÝÓɲ\Ÿ/òª¬êæöýí·ß¾Ë˲6§g—Öèvµî†>ú1A).mUç(bôÑey™ÙÂ͈æÙPw kS”í¾„ª¨ÇaŠI®?}ñ/ÿã7÷wûÇ1eYešq÷ðÅÏ>ÿò—À|ý»·Éa )D&^,—çëöæûoóÛß~ÿÝ÷ŠU}òlœzTäyt³²¶Yµö"e¦©ËçŸ<[4ůõõŸýâ¯öýS™•¿úׯæ )ºi8l´V~>bPÔbu>tC™­!¯ŸU:+\š€±­ÚazHÑgyÑÔUpƒÁx~¾ÐÆöÃÍÍ ³É å™±Z’Ãήj OqVéÕbUäYVÐ~x ‡Î+SdVS=ì¶_~z1ñ¸:7/ÖÄnØöJ²b}R¡›‡~8t…Ó’>~Þ¦iW˜ê¾Ww»ùdQ£Æm7[?î&)EÔÞ!±´M6ºÇy^é¬ta¡ínH!i£1zOÄØ"Q6Ρ®éú6@þЂÁ ù¥ ùy{7ÌÇòG‚ÈŒ’’Ãj±þë_þÕéÙÊÍs¢åêäüò2„e:@èãÉê\Y5;{ß´‹««««g볋åùù¹!åÜxØoMC&S¹Y,Ë“E§ùôt}Øm~þóŸ„Éí‡ÝnóâúôG?|uþ|™W'·»×¿ù:ø¸Z5.¸åÙ Õueµ!FmUŠãɪnë&Å8öƒ¬LžÅÃㆴŽ,ý0%Ãл0Ÿ­W˶Ե €¶Y4 ó]æÙ›ÜþýßÿÍÝã÷¿ü¯w}ý‘ŸðŸÿéW1¡OpèÆy?þüY^Q÷¸;={NÊ”«—¯ÚE–’/˺;t‡í¦ZVÏðq^•o¿ýõ»oÞúófùÃ/~øÝW_³ãwïî§)Ì£ŸÆ‘cÈ »Ÿ†!eó«ç/ŸnÞ§(³·ËëOAJ8¡1Âɱ ˺iüa}Ú¾|ùìë×ßÞ>”ÒUah aÑÖq8˜–§ AÊ•&Þ>ìŸîw‡ýìgWáßýãŸ?Þܾúx•ç ]S M•jþêOž¯‡É¯^<ï¦ÌÍás¶¨]Lcp9J«ûŒóÀ¨#ŽëëZ)È5ZKySn†‘eR` ñã——‡í]˜g"m³ÒjÝ´U„|8­éôRU¥Ë“k Ì3̤[¶e ú-…ÝvOº`ž3âàFeÕòl1öCA‚aðú~˜} S@¡²ÌW9Dï§aþÁgW,Óؓ͜Æ‚R:¦8Ç„L9jBÐ9!$AÁ(˜Ù<«ˆ%2‹Ñ"!²Q‰xIBDJ K Ñh¥"Ð •±d=¾¾Q–›ÄI€5ƒ&ñÞf`¢£M^Ym€Y´5’©£«>Æè«€…XÂh5HL!A $‰Ek0¥”8Å(‰‰Æ)¥Ž-v … ’ HŒ ¨~ùó¿úôòqûø›_}‹ _|þòùËÓ]·C¤ËË‹›ûûǧÎù0ÎÄ\®OšW'ªiÞcèG¥H„˺Úì·“sðá¥#¡€&‚Ì£(­—Ëš9ÝÜ݃VBæé©¿½Ù…¾~±ŽiœzgMelÆu¹X4 ²ÅC–gÚØ².l¡‘”›9zPYN„ B˜Rʲ¼ºõúlµ\Wu“g6qrn.Šâé© Q¦9Ì>eó" !"#(hÛÅ8 1¤¥,í°ÀE4R*¼Òêâ¤ùzÛ»¤€ÔH§‹“çÏžüéËû‡›ÃaÈtžÛl¹¨šÊÌS?ŒS? ËÕ²È ­L»XØ,ÿèÓO@Üéi­(­*ku‘[TdÏÎNoßÿî›oâ4eQ¾x~ÉÑý°:i~ô姙Ʈsýhßíã1t²\^Ÿ—U#ýaØlöu[Ÿ®êÆ*ÄÄÉfYd†v±ä$ã8.WKï]žÙo¿ûV+½Z.RØ-VÕbÑÖeÓ¶‹ªYµíêîý»ÓUõõïÿmöÝŸþügM»šGÿOÿô/‘Ù¥X7«Ãb½¨êâ×ÿú+åòù³²©›¶­›çfæ§·wß~óº*««ëg‡Çáõ׿ßí¼ÉƒÛ¯õ¸ï¾}ûÝb½póì»]d•µÝèD¤)òõºé6!P¶¸,ÛšƒKaöÞ±H^5ìç1·4M[‘0Žnã›ïn²¼~ñì*¸‘"pŠnÊ »:Ƀ Ã^S<;9MÞUmVj‡ý!t‡ç/Îú¡ú9Ì©É÷?_>~ýÀ]gÍÓŽß¿v›CŠX7xº^ùÉ4g6ÓSÒœêLþƒæÕÇíÍ›…„ªªÝîFØÍsnt]ÈÉRSN×kÏ"w@@¬5À|<‹¨“k­´61DfN1åy¦­N‰ R˜]psUEn¦ÙÅDÂ’4¡ŠÂ €‰Rš"32KJb­±Ö« Ji "(L)2 Ò ‚ úßþá?׫ìw¿ÿúÛ¯o ¢ÿü·?¿x¾šü¬•µYö´Ý“?º“BUº(¤¨‰û9rÜîÐõÀ’æñ0O1ñQX’DCbB²:$q.æEÝ®ÎófÓI’¦iÖ§­±é°Ç)6«å{K¶Ì$kô8ÌÆØªÌ‘‰™ˆ -—õååz¿ßOcšf—…# ‹÷>ø9²Ë2»ßò¼Fm’2’®Êüôt•RŠAê¶Îs\˜‡‰HkH hSh­½£ã"_ !„4»@yU”eŒa¿ÙÒ«³3é\[›X–mÛv*SÊ(ï|Šñ´]ÿø‹?ñaØ÷]IñCcN@™ Á*Bö áÚ&A”À0çXbR^؇`H¹É"݆"+”D ­VY–ïÿ¸õÊùˆˆR  $fV€D˜€Q©à«ÇmŸŽ¦y©”¾\?»¼º<»XŸ¬µf¿Ûí´¶ËzÙí6ûÝ}ß=cÿÉç?¼|~µZ-Ž óËËóË« £xšÆCJÁM^k’????úxµZ¥0Æî°m—«›÷÷?øâ¢;=]ž¯ûÃÖó·ßÜŒC?ùá±{ô>ò°ëŒ sˆ>$t1]_?¸¿ICßGáf±ô‡Á9ئqê»}QåïßÝk]^]žžWn§a4ÚØ¢Ú†²¨îÞ¿]µÖ*š¦éù«ç?ùÙŸŽÃü¯ÿãß¼Ÿ/.×—gC?¢VOOßÿâϯž]OÓÜVU–‰p 2ÿüÿ?÷÷ã8O‡97ʲæäúÕgŸYÖ‹fèÇ×o¾¿zvysó®ë'TÚdùåÕG]ï ÆPè§ÑGiÏ.42"[£¢‘SUë”`7CYÆd}çRPûý`³$"#*ÒœRQd'«•ÂpóîQd¡µ)¬Õ&åMl #÷‡2Ãyr›Ý-µm«sTEöÓÝ»íÅe ˜ç¶’³‹Jñøò•ÎLz÷íƒUna³2Çeg—ê6mÞïтƼ¨÷‹¦®r#a.r^,ðtY==ìÁåóó²°Ooß-–JH©Åªó®¶: \¹Áz.ŠFñŽ#3š¾{T!i0Á¡ÒÍöœçèF`¯@YVfÕf&M&Í1¤§ý<Ñ&2@T”¥Oч„XDÑ %¯óÈ 3Ñj¥uæQ!ŠÒJ[ ˜œ’¤¤5¡Ñƹ@š´ÖÆ(@b¦î0%Pc@£-":?£ †HÈÖê,3ˆ"€"lŒ‚ãŽ@Ý­ŠŒÕ AJé •”¬"à)¢,#æ8ù$X 2 ˆËb´F+¥0„¨”:ijÌ BI,L¨ˆ8AðG|D"ά"$õ÷ÿËÏêeþû¯_ß|¿-Iÿôç_,/š±©>Äýa™» ˆa¤úÆ„âc(ÊòÕG__?º,m!QÂñW@R" £%ìÃóÇQ°!²@V€IÁQ(ÆIø  ÐJ¡ÔË󫪬³<ÏŠ¢=Y†0¼¿ysyyI`Çqj—ÍùÅ)ª›ÅŸýå_ÖËež“1¼hëW¯®ó\mw÷¤, aJ¹]ÔüÝwo›ÕJ嶺äÃbYPY4Ÿñr±ÈŠ¢x|ÜýÓÿÿ†aºzy•[^­êׯ¿µ›¬ ³|ÿm^¶yYùĤ$ûõW¯9Åýö°>?Ëò|F üæ»ïû¾Ï¬uóÌ“÷÷w{fþë¿ù‹¬j6»¡÷žÕv·KŒuYýöWÿz蟲¼:¿|ñÔw/_œß¿ýþÍëoûÝÓ'_#ûÃÓÖZ;ŽÃ?øèdY¾}óíw¿= ƒÀ<ù•ùæ×_'$ {x:œ\^~þ“ž^¼˜úÝË/R’ñàÞ¼¾1¤ ©èÓÙzy}¹>Ylãì瓳åÕ‹KJnµÊó Ù¬ÈC iö‚º¨ò¦¶1Ìã!õßlv/_||ÿ¸™¢wC„<¯m®9AŠ¡]TÛ‡§÷¯Ÿ´.m£¬Õó0…Ëçíùyéý~}R™Ç»N4f «-À¸Œ]c#ÿø¿ÿÙvö#§ló×óøÌ+cgç8»8ëhØõ@m–/,£¢²½y"hpÁ]œ7Z2u“»žî»õÉ¢.ÕöývÞUf†áéù'Wû©7>ûèôÛg–çU›q¦93&ëÓœ?mDhòÂhã"+­ˆÙMc˜ûÒRt±ÛšÒ(lƒ\·ÍÁŪ(½óeQ–(I[ªÂ²"6ŠªRE™’(aÔâý1hŒá@a4¤¦¬•2VkŽÉ‡ˆÊPŒr¼ÿ )Ì3£P¤ 3"!`Œ¬”)"hNŠHèÆö”D)RL)ŠRQøXÐZ¥ãæÍ)„ðG?`L”¤µÑÊ(´6¥¤Is` I Eމem¦ 1 +ÆsH)ä™Õ™?lˆX¢"h`ÒD$( Õ_~ùóËÅ›7ßnî;vñÏþìó$Ó<¤àÓÓÓvš|YÖÃ0n{P¼7¦°™–ESiCÃØ eÑ‚¤È¼>¿\®ê~7ZRÁ£0ˆF!„èƒÍí4O™ÑϮδÕO;7…¢)ý!yévóý»'v±.²åÙºnJ›éÇǧPMã¤Q‡!ùˆ¢Âœò¢*«R+ƒ ½›«ª¼.³ºÌûÍcÌòìòúr»iš­-bˆ™Ò¤ŒLÃ~qÚ¸èû1y0¤ …SžçU]úàÄùèÃÉzb˜Ë²cšÅEÑ6eS½«”`EØí71ÍŠ(&œÆÙ+ExquV/WÓäÜm­‘ª,‡vq±ßÏy‘^=?kšúåGŸ2ªÒ¶ãaö‡‹õ©2¢ÔSðˆÂš$ÊqØòÇDÈ1쉄ø!_%¢KkSJQ$H‚Än×)kʪrÞWU5ŒcŒ©(Š<ÏùåËË庱¹-êú׿úíî~c_¼z¡1ºá¡Y-ü]7ËeJi·yzõò#FøøÓWU+~¸y÷›ß~³{Ü<»hÏu]jMFÁËëuFb5ùäïïn%¸²(šU¢|öåŸ,V‹yWç˳«YV{màÍ÷oûn:ú¢¬^¾|q{óÞj|J"ÑûÃa ~ú“ôý&Ëñt½@•“.£ŸæÃ>%*KS”*/ÌÐÏVwÛÓ³ó‡Ããâb•D¦Ñ'f²„ˆYž»Ù§ ªJçH³éì¢n@˜Æ9uP—§›í¾®2cNĘBô¯¿»½}ÿúo~9‡7ß|Æè&ó´›«“A9VíÕÊ¡1=>íÞ¼9`Þ&Àëëë®?ÔM;cd®[+hØ”®wÏ?z9Þ=¢C7d¥ŠÜÏýÑf¤¼ßõBAF7oŒ5Öêû»ý¾7³O«† :ŸHiÂ\µÅ¢ÅO>j×CÀLéº.¢„‚²™RÜ‹ö¤Ì ‰½E ±?9Ë|ò)Ä(†&Ÿ( c]çD¤t†¦ÈN! “AFÊ"«(iö>¥ •ÎbJ¤uŒ‘ Y£ˆÀ ‘–H‰# ö^Žoñ1ab¥²@H H ÀZkFÂ,ËRHÞ$@"RÚ ª# Z€áØØ=šHY|”‚"LÑ  "()E­s"u¬ðĘ9·–cÔ ­1ZYP”XˆˆY)Rˆ(J#|hî’RúÉg/>9¿¹û¾ßNã!üø§Ÿ »›w›ýv<ì{›Uúi³;t‡À¼cæ¸^‹eqy}Ûí @“^\å%íö) € QôS‡€Fèի벩Æin«*sxóÕû÷ß?ÍCš'B²VµËJ[åSpS0J ‹&•b8æ³V'ëíîpè»yž•²!SÆZsŒ=ÍSæÉæYè=‚ªëºiJ£Ô¡ë ù©^Ö@:8N3i"­³²M›§Ç±ëŒVU] 3Ÿ„±,ã’€`7tOOO™2† 9ïýŒÈ 5@&L63yV"ãæi7;Z.Ö1cTJ©Êl®µCºßîç„H)T¢ à³UݶYwØO~à~÷›9ÆÐÖY“ë²lŒ­9Ê0¸Ívg2S· ­t6öÎqBMB ñC޽â¿,<âA>àcYD{”¬›všfF‹ªª‹¦i6ª,«õúd¿ß~þƒ…?ùÑgËu«ŒÝì:ìº1:wrº´Ô,,•í8Ny–Àþp(ªruºîûîÍëïÖ‹SÐà¦I\º{xüôÓO÷»ßvûîán;Ïé›×o’g‚ð“Ÿ~^döæîn}v~wÿío¾ùåù…*rÁr=*ýÕW¿ÚlŒÑ˜Wù§Ÿ½,,î7!xçeš!xGçæÐ´«”@‘IÑ‘CûÝæaø_ý¶^T@¸Ý͉›g¦ï¾»uÞ„ÙABÝíôƒê*'…UY5mQzPàÅ7UY¥6ÙùÕõûw7gëŲ±C÷Ø'Ð>rY•ïÞ¾M‘ÏÏÏ9F­õêtýúõ×Þ¥Ýa>½¸"NûÝöìüôü¢îǧÙ–Ë&3µwìÝÖ (k±,ô~¿M‚)0VïnÞýp~¾^ž6e[þþ«·J™SSWˆ©,m]¥6¯Œ%à´E7…Þ]={Žˆu^äùb×õMSÕmuHOÛÆÖóaBÕ=ܽÝÝq©0šGïêJ‡dæ0DÂèiê}·Ë7\ÖeJ¾Ìón×͇Ñuˆ‡ë³ÅfqvuØïó¦Þ¾¿£<ê\¯–Åź89Ñ(é°VìûA£ EA¨Þß=Ù"TJò¬yÜûa H¢ Ì3ß”“m«`v©wàTn²r»wOC“—º´Á32‚$ç\Ñ–^ÒöiØï¦D¤2£ ƒp ’P™Ù‹g•¼@—D+4.‰O ”5 ‹Ü„RJ>E­•!öy‘#@BÁ„}L"(’X8$HLG™£)<@GdJr\vEOˆ11CÑûhŒI)£G™Ù IDAT‘“"Ř81!&ŽHGbÐ ­bLÌÌÇDPJŒ"Zi«´V¨’÷1 ƒHðQk£×š”B"$RÇ¿/ê?ýüçÏ?9ËJýîûû§ûéòêŒ mwÃíívvs»h‡éáá)@J0ÏlVÐéºY­Û—Ÿ¼(›æîf|09ï³¢™¦ng"ŒÄ,¬XmE!…”2ckýàœËˬï÷ã~ ƒÌcœB"e˜‰(+K¬ ¥½a0Ú‚@? Þ{¥Í0ŽÎ»˜Œƒ s´¤Êº™#oö]^TÊš9øÃÐk̶›mŒ¾ªŠû›P¤â()¥¡¢¡óë+Ð:"h£‡¾×Ú˜Ìï§y cä,³E‘w]?ŒsÝ4ÓØIä«Ósä0N)dNÆd.ÉGŸý %°6¿¾>ÚÜÞܾ'J'§u¡ß ËÅÿdê=šmÉ’3;÷-C}ÕÓ"_ŠJP`l39à„þä6#4Ñ(™UY™/Ÿºúr+÷œ—ÆŽQŒNL"ÎŽðý}k-.ÀMßF€ PâçXîqéièÜ£§SæÓß¹´Þ®?}T<È4ø¶™,—‰¢R2² !¦“‹»‡5‚üøáÓf³žÍçB›Åüdhû}ÓØ¢Ô¶Ò›fÇ8±Y.Ar“Yɨg³²ëõèyqRVß^?È€Ÿ¹ÞÞ kx´†óLRôU…±€Òx¶TÏOW»Ûáîf‡Â:| ¶0Qg$«2ë]ä2L_=žUlU°E®•@+qµ¬ƒ¢×íȲn5ÑlZï6’êúF +A«ù¬¹ßXmÏVõÐï÷cÚÎOæ÷WWnM9Ùîö˜‚¤$l\œÕ£÷m&ãÙ²Œ ‰Œ`TÈç'u]`¤$ŒQm¥ò*ËŠ"¥a’ëMç}ˆœ dö> Øj‘eXT"“£ÒÚ,7Âè¶O~Tãt¡Šªà@@˜•%¡m1¸ÈœR…”RRŒ)'– (¸,S‰cf-‘Ú:ç„€ÄQÊ£A‘91¢â³ž@2 ©´Àô™ñ$½OD •eˆD €y^Ç>?ûÁ!E®ªŠ˜þg§ãPH€-yt 0¯+Wñ1RúÜ×ÑZ%NBa"R ydØaŠýfVJÿl‡gù¿ýË?Ÿ?Ÿåµú÷ÿíÃMûæÍËÅÉtðýnsÈsc2ù§ïl­’µPO?ºxºšÏªzšÉ íðñíUf³ÙªÚm÷>ˆ¦Ù kí˜BJ”£’B0“–*%Ž©ëÜìdµX͚͡;„r±HF$P°*%]ŒÑk£EsHC‡Î÷mPZšÜ*c”6Yf'“RJIIAV(›gÖ?†0ú"+(%&¶F+%Cˆ‡Cß#¿zólZ•·W7~ «å*„Ð ƒTPH©ú¶-мœÖ‡Ã!7ÆG×µnýr9K1*elVÌæË뻈¸Z-÷‡mQHªjSŠÑánó°^ßcoPù4€„8J?„Ùl5™¯fóS%¹m6’ñXÅ‚£ZPr %Úth8Lãà‡a$äëõ}ë†F@–ýÐ+-«Å¡=:œâ1õó?ôs'àsÍ7‘–êly²¹yxóÅ›Ýv;›Í)ÄõýƒB!•|ØnûÆõ#Z,ê¿øË¯¿ùå×yeº¦O.îw[£-`êÚÍØ7Ëe---gF"³¬è”"3gY¶Ýn‹ÒR3-nïú±oú@¤üÐOk{u}ÿ§ï?MæËó‹åæáòÑÅ €¼‹ÕéÝzçΗ§ó“Õe³ß÷Û#ŠTÕÅjµøî»ßlÖ·Á¯^>ä·Ûíl1Ç´Ùµ.Ä!…´ãàœs´¾¹¿üt— ^=>ÿ›¿ÿ[ˆðÓÛw‘©¬Ëǧ«?þþÿü¿þÓd>¹¾¼™TUžËóÇëÍa{»¥!¤äSRˆ¼_7Uµxôâ%jM)ýñwÿíí¿¿»¾6¢"gßSŠjÊnl·ëý®Û·Hÿðý÷‘|Q•½óËÅÅÕ§«açË=¹¨-p!ÊÕÄ ß½x6»Æ!56·U×F?V‹¢*•P³Éd6½ûñc]”õT·‡}¦¬ÑFKYe%’£@‡n]Vùt¢7w‡Ò.QXçêñã™@/ 7H cÍöÐ ¹Æ“Y¾»ßeUáÌp»Ýg¥MBtž7ûÝÈRhÊ1NܰÕÒÌ [ÈhD\LK-e»Ù'KAË:ú0ÆîìɉuqHcZ,ò“eŽ<úÁï7nýlf&sH˜iï$PŠãNE×î›DÒ¹~6ÑRÓ¦ënwA Â6äALbý0Ö“ÜFNT•&ˈɻÎ)HÞÙ¶í‰è“XLs)1ŽÑHe3Kt$–)äµ’‘i£dfæ(–‰D‰0øDŒÎ'L‘ŒÖJ¡ÒA`€ÉI­ÛÖ¡Ð ‰)Xk:FX V„$°R¤­´Võ¤tnØíw…ÍN–K!D7:!$"(#ëI¾ZÌJ«¥„n×\~ø”[Íɽ|þˆÈõDû°«ªl2™†„c;@ž3Ì‹Ì0…~ìºäJuúèq7ŽefnÿðÝŸ^ñÍdV]_ý”gòübYù§«ë};œ\\œž?Úía¹o=%ZÌs­äl>E ”|UÛºšœŸŸ,WeÓí@r³Ù…HY^§)ñt:·6ëÚ°Jý~o²©PùÉÙéjyr·^¯·Cp“ÙìÝÛ·ë‡z^>{ùìþæáßþßÿ¯éÇ×ñm9ï¶Íúaëœ_,WóÕÊa³>e(UŠQHE„!tÓª¸¹ºkšÃãÇOÞ~ÿas×ïwCßõ‚*Ž™H*ôÍn³µVìÛ$¢Ô¢ë{­ëÛM³ë:OQ)í0¶y%¼0èÝv—¹ ÈKÿô›Åõîp@-¦5xõü¥‹°éürQBÄh•¯$d%d¹ ý¦R …F¡Âf·ŸåÕIUŒ]ë‰Ln Ûl|¦ât*ŒîóÂM*H½¾º ˜™ÎeB* ŽnZÕns]Årt¬´Q֪̊¼Ú7n}H‡´È4³J1·¶mÚä]‘WBÊz^E`JØî{­T^Ò(àäc`cùN#¦³"G„˜ˆH Êcp„赊J %”ÒH¥} DcL)j)Q§(G³Š Æ£‘( FJcü¹ÞÏR R„H‘ˆBŒþ8^Ff£u!Æ(…óp&©Èy½# ¨PjT‰!…Ñ—YGâ²,ªÜ %Pe”T 3ž/*cM;¸äq\ä´8”“2/ kµÀ„Š'ó‰)„P¢m*!‘ô1’εÉ,3JL)Ç"“å¼Çp{yï·<[¶úÄ)ùélâ‰ØZM) Í(ŒU»ÃA¡27F«Ãn»ßoûÐö$ã,¯ [Æ0Ô“ªƒ b/€äâì"+ó¾;L–å¾]#â|r6™–Ei­ÖÂÍíûÑ·(AäºTRLÀ„”꺽ï/¤lšCVV.KÑ¥Ä2Šóåé_~Ýuády±îï?£ýð3IâØ[Gd(Ä „(Hd².d S—ÕÅù) 5]]|û_ƒïß¿u.®æ‹zR­÷©´ÖF>~rn2óþíO?~÷ýå»·wU=)2»¹¿¿½þTùr97šWóruº”¦ žˆ  ©²êöòR¥½„Ûüî~h]^Y¾ÈŠz:ÓYVÙ¬2íaszzb3“oo6uU¿|óâþþþ°ÙB³}ˆ¶Èº¦c"ïG¦(¥:·\,…ôÊeò²žk[0‹›«5“©&óáarZC(³(…7åüÉËÓë—)bL|8´WWW§§Îù®iš¦}󿛇ÛÃOo¯ÏŸ?^ž/ž¿x©tööíJód^6M]߯ÎÎů¾ùªšMN—+7?.µÍ÷c‘UùÉÙr·moo÷Ÿ>>„$óùäËo_ÿðÝ÷B€4j³u‹Ùôú抒Ì4<}º¨-¿˜N»®q>Y…F›ÅùéííÞ˜¼¬g½ ûÃþõM×_]=|ñå—7W÷›»-€D™5ûía¹š*Ù'b úºÈêªn®wÁ%ÛÄÅØûl*gç:1­ïƒ¶êdUNs;¯ôÇw›rv‡ÖÇÁ7M¢wC[¡St:g©hrjwýn²È». ;탷†S±´w7‡‹ÞjBlnÖ™F!B=©´²]ß»àªBHÀËbQÍNæ™”¡ëa·íw-mÚÔö#¡^w©gµ>4óeÝÆÝZD/h/¿\Dwà8jDŽIJÝ¡ëIÃBdu¡‹,t»19c”V7h‰IŠ|2‰nôm#„cr‘@Ê%•P )£3Í¥UZeý˜%F VR#óLƼãàŽwF–JaŠI(˜„@É …ÔÚ¥("°dDAÄ(J‰´–F ud·¤ˆS ˆ‚‰Sb)1©ÏîFþ —&’Bh%…@ਵBh£Q3+eé8ñ@™RB$Ä”ˆ•’œY£>z>0Ç?DZ*ù÷_~ñË¿ùE1ÉÞ}x÷ݯ¿ÿòÍ×õTWUvr> ©_o‡mÊí|¶šöýAA¨ tà €—«ÙéYý×ûÝph¶ççÓ÷ß_L#p@ð «ÂTV©qܰ–YJ”(E’*iŒ6Áyqµ¬$œ5JHF1҇måGÌå¤\¬¦eeS )Ū(§óB[Ž.!KNœ—&SF õ¼ÊËjè—Pj#uôc=«´‘Cçºv¬ê è»ÞN+© }‚8 ah[-P6m×Ϧ ››Åj’(uC߸ÆáÀˆ… ã(;|"å…y0ÊÖåìp躡sntÎñéü„ÒH1”yåb¿ÙߣT‰” 3©êaìH¢ô΃Rj‡u]ìûÈ,‡u·ë¯>ü8©D–›ÁÅw®…¶ÓI¥¥@]“ùäÝ<™–@‰l–ß\oöÛ>ÏÍ£g»nà„>¨Ã¡g¢º.@ß÷D´X̵ÉÛnd„zRûaÌm“ˆ`îîÖ™2MÓ LéЈvßžUQ™²wÍú~ÛwQ |ûÃw뻓ICÚz­ërròþý5yñüâäü„=IC¿"µÝYZ“£¿úæË‹GgB‰íf{wù~ªceèþvØÀš ½ÿ1¯ªÞ;©õó7/^¼|öÝoÿp|w¢d¢»û›bfùïþúË¿úå—Û«"ÃÙã——·üþ-NKƒ@ÝÀ!fûõz9/þð§«é<‰ô°Ûd™ÌÑLg5Cøpùaô µ‘y6?YÖV­ Žr[ßßív‡–´r"N'òñÓ:²Û>8k+®´|2-äï~Üj-b 15à•’§yå;Ný0/laÌ¡q.ùÑ OjÝ0 #Á‰Ðœ, ~º‡ÁV17e5»ùp}\.çJãÇ«û»m·ºx®˜Iû‡ÏŸ|)yç½÷Qo·g“:›Ÿx™­÷íÚ¼wááa{Á^di\æ†á`1hIàa;”Ö(R,,H™YZåZØîÆ.±žä¹¹PEEIÒ#j,JQ–񾃤àHª< —¼T)ºÑ(Ç!¶ý ‹“2ÞEßmºnȬÎr)?çÝ¥B)IH¡´”Jh!¥1¥˜%–R1pD ÿcÔŸ¹]„̘ˆ”6D$„b F`¢)’”JjBAB±T …B±ó™€0„H””–DŸ„’Zi­5 ©E¤ÈÌ(Df  ùíãG_ýòËrV´C÷ÿúû±M1Ž6SË“eÓ¶W—íêéY=Ë7•É R²F_<:ÏK8ìGeËOŸn9Æëë}@ŒBJ$Р%ƒ€˜’—"Ël~v6m»màDˆZÛàƒO!Ì<[ÍEŒä|à «òæàR€àS×÷ynQ%¢ ¤¤H)dlcŠÄ…01TjðƒVê°oÜè꺲E>ìÚ±ŠîÐ+mmi‡afkD¡ólqvBˆÖØ®=Œ¾ ±gHÄ”eV¤ÏÿnœdJ1âÀ( Åx:û|JBI¡…7†˜¥¶!A×õBŠ²È­Ö4†á~½66WFtc;(ÇRŒ‰Db%•$J©(‘óŽ„FT ˜scžà³§/ç³zìÖ¯_;rºÙ7!Š %FÎ%HYåev¬ìú!XÄ4:ŠÐw…ÒÚ*e˜ÈfÊfÆûB*òÐê@T1rHÞ»@ž‘¡,2ïÇ1‘H€ì\,l.…ÒVƒˆÒj›Bô. ÁëL:ï↱ícãbOD…-K¥‚ óÅjh% ÝmäñÞ,l‘\J ÙÅ>qO JY¦Ø¸‘DòaGÜ–µÙwãv¿R>Þ¯×c##ŠÌÖ1¦ÈP #£d…Ò3 Fí#'Z­NÎ/.öÛ»f¿yüôƒèºŽ‘…†JHd‰ˆ@À «|þêÙ—³Ù²ª²Íþ·¾ïöÍn+(幺_¯#%GÙѵÉ_½~}~~±~X Cˆ“Åd¾,Æ<‹em ß=<Ü=Üßg¶\­Î¤>D›g!Æ,ËUÔãW¯VŸ]Ý®üá=^<¾ÚæêòQY)ŸdY~{»vc'^}qaux¸Yc”mëXh¡òÔ Ãr1½ººÌaõܳGÏÚí¾È`º¨ å~7ØÌN¶i6E•!*#Ô8ŒÎ;¥„Â|»o¤e[TZW]—†&j¡&zñj¹Ý]I`Å`@fF »1D·:ŸÍó…Ðf‘Mv›>fs•©×ÏçHc’VØõ#x6sËY¾œfÈj? ™Wánzr²¹Û¸ö&Ïl5Ÿ„]ãµVÑùq8 ãGb¯ïß}PŽÆ>,ç'4®]·Û±kÆBåUQ ÈcRnƒcTÒL¢©ç$Ypгìý½¶ÊHJ)›—UUfyî|pT•Í+2¸ÈÌn褑™*g3eÔîî& IQŠHA°Ž¾®Dt#$’VF ¢ó‘¤PBˆ$¥8pL$Œ¡cЇ9‡ÀŒY–!ç€ ``ædŒæÏ/ZÉ#ñ˜" Š) fŒ1«ÁO”¬±È ሠ@Lü.Í@Æ­õ*C¤„2&Q()‘Åqè"P2àç÷¹*ê_|õ…šÛßþøÿ×ÿèÛh°<[žJ-vÝf½îî/÷u• ¥î¯®ÐÙÅêÙËÕt1e„—ëÖ0v^5ø~%fˆFe(RÔ‡‰¬²OžLVÕ® [?‚ˆ¤„˜0 ¾¨µ÷ã°s}Óö~ì|ÐåDZ ’Ê"C¢Ý¶=úD,B`ÖÆƒaœÔUÓú‚VIr6YÌM&{ߣϳ““V)m´RÎ;J©.ê]Ó2ÃжY™Õ´ª {?6¾RH€‚õÉü\™Âd*øÁuC×o†¾1…VÇEdarÊ'G"2Õ±Œ‘RŒ È…±sã8Æ*+`=`:Žg@s6Ÿœ¥˜Rê’äã‡"J)…”ò¢L””E¦Pf¹ÖE^WšÛ"3'Oß\}x—bPH-rFŽyfI"¡*†\æOŸ¾Îª$b×´V¡QpÌ´Šä®nî"ATB! ‹zYΟ¼üú¯þñAòáö:º6&žNæ³yNi,ò,3zF?læµ9;}õêÍ×Y­ëi5zîGÿ°ßxO›Ý~¹˜eÆlî.ïonf³)HÈ3ÙuýýÃVÉìÑ“³‹gg½óVäW®&“òâl~2Ÿ$çð‹×¯f³I=)²óñòÃlj՞ùù“GJbB™|¸½|¿]ßuÃð‡ïþtº:‘E–eñæöúêêaè µ–ZåUñôù—''ËÑ9£õfwsr²š×Êj™×?ýônµ\Üß­äb¹ZΊ§æ»ÍýnßÿôÓ;ÞHÛI º0©‹Ha2)QJ•å(Ä͇O(Tä¬È*’•ø-¯ IDAT™ê:WäµrßÒšû›‡Ã¶‰Q&ìÿÓÿòôòã]·óEaþóùÛ“ÓÅáÐΞœï¯îTQ—y5X üüâÉ~»9l7ë›»äRòîoõíåÇ«»usñäõßýÔ5;PÝt1)ô²ë›}Ó;ß›\„04kgTQM8£3YV–YUñdAÉR\ÆîìB[ð¾‡Y¡–V ˆÝÚ‹™¦¼2 {õÈPïÛ.9ßÙéi4Rjµš%îŠ%ŠËÛ6b•-N={öéßçF¾xùtècˆmV€½uÛgOjé»ÇËÙ¾CG"ˆpw7¦äó2cO ‹zÕ‡Á‡HŸ¿>}ñʼnv ÒdB¡Ê+(-.g6Þ7*&+KR8:i0'„>ÊCã‰"2EŠÕtâQ “I)ýèÛ†Y3{# ¥™Š\$à1Z­ÒE¤$ ¥•ÒÀÌìŠB JÑ ÆPŠ)% !ÏT–q?„”°0Fi-RŠÇH$"­ ªDG4¡BJ‘C8j;d"R !呦”:ö(£BŠ#²BK’’ 82 i…ÔF %EJIH ­ÕÇbxIÇíQHÒøøå›—ÉÀï~ó»?üö%)…<=™£‚ía»Ûø‡Û}–«! ëûÛGç§Ï_=6uÞuáúr}ýqóá‡õön¿¹Û áöþ •vD…B4›02 @#evñx¾z<{¸Ýïî½ó@I4ÓimrAèÛæ!õKlUÍN–óÓ9ÍçUfUˆAàÈ}; `h‡cÕmzH!HP.xëÑ3k#ˆs›?*¥cHnJ Z¯w]tÃéÙ‰.P¬”ïÛ®ïü:/"Kb†ùd¡µ Û¶u>Fîµ²''PêÝбLKÍgYj‡”è‚#ÔH&79‚$…dò>TyõèôL ŒãAœT•ó”XJ)C £c>ŽpŽØ¸œÎ¾úú벪ž=þÕ/¾5u©3=H¡å_üý?¾ÿðãn³G¡ñh‚ `L„Q„ÄAÀÉ´š-§Á÷‡ý:ºAJ!‘6»æÐ4ZcžkòHÔÕ"·Ó¬\)?~z}õ©K1 æE®%—Ö"ƒPòâÙcTJ¨¼œ.«yRÜÜš¶‹)*¥SГj>›/ªªJÉc˜¹(ådV5íh³úÍ×_J)ÿøûï>üôÓíÍ]ÛŒpC)î6›ÇO½øâU¤T•Y$±Ûî‹LEß¹NˆÅ|EÑ­ïo¤TÚÖóÅ|zïRßù1¤_¸ËtFEaŒQRLjíÜçùéê<‘Œmßûí–RHLŸï6í?ÿó¿üÝúÛ·oßÝßlßÿøãÅéY„"º¾Ý§äµÊ”e5T1¤wßýY õ«¿ý»Ùj±ÝÜvM’¨îàÝÝþí_¾zñîÏßcT›MÜ»ë¿ÿ/g7W›Û(„ýæ/ß<óºo_\Ü\~â&͸ÛÞ^]_ißþêùË7Ï(ä—ï³¼X]<þóûOgÏ..oÚ.ž?žüÍ?}Ñ9ÛXiÕïÚàYHá}j>·Xd&ͬ 𮲲(Ó/õŒÛ-º1+h6+”ÀZ3¶Éb|õ¸œ„±Œ^Ç¡»˜Jy ²ât¡! a+ï©i‰¢šåùÉTÁÚ¨‹3Öts³9{ú¬ëÆþæz™Åö°¿»Û™BN&Ø<{¾æ–NfÓ@Ø8_•þì¬RÜüÕ—'»õõrUi“G†PU íphS¤|2µõtR°ÂÍfï{, ²!“,̳g k iœ§ÂØRJíO‘°Ê¥Í I!Œ Áw‹Q ©e´D,¬”¤ŒB# pì=BÒSäD$5SJ0Œ!±ÔJ<Ž^³Ä @%¥1ÆD¤U&¥¢‰?g¯9lDôÞ RJLÄ R™cÆI‹”Àû¤5#âÏ¥L‰¼"%dB c¥ëØéˆ‚ˆ”B©$AJ)›gG8¼RÇEнwˆŒ’§(K”Oƒ‘¿ÿõwŸ>­‰dfò²²“i•>}Úö‡þä|2ø¾ÙNW“—oošÝO?]ÿöw?¾ýñªÝvF©n| ƒÊ¤KŽQHŠH<"+©%'(r)´øøþ~»i¥Ò)‘¦°ùòdvñì5ûaD©c@Aru±Ê+iM2“I­ŒòÑeÖä…M”(Ä~p ¥÷b,óltóRwk3‹ä#STR¥@eYc×ëM–åõ¤Œ!L&ÓÞ97Œ›û;=Fï©MÈ$Ä1*›åEbB)Mf$Úùlqç£#É"ŒËªØvÑ ôÊÕda¥L]ô(¥n R¦àc!%% 1ˆ)€`À#¼Ž 2Ïë©DŒ1š¦m{Uä/?Þß^cÄêÑËÍÝÝb²(Ê ¥Xæ:QBZ€`!!’ž<©'“®9lלâ$¯œ‹‰ùòæ²!ғǾýêÛ¶éb )¬öÓÍûïøÓÝýuHQûšý&8Ÿ(Ζ‹õv­­”)¡2¦È ìûŽ™ÎÎ)]í6÷n6¯³Lç™íûáòÓåb¾,êüpèÿðÝE1+êZ qýáãÍíÕùÅIðC qR—c߸öPÔåd±p10…aà?ýñ{…~2›J-&“IHôþÝV‰Ùt1‘bHBè›ë‡2¯ºÎm6‡¬.³,ëû~»ÙÌ&…÷ƒ”xqñxÓåì~½ cüö›—}ßúcâÃþàÓøÕ/ÞÜ\¯óß~³œOŸ=t¿}óõ/Ÿ¾~ùpwÕ7û“O²(‹Gç瓪 ~lšVk <Ö¹üÓï/CÄÞµO]|ÿãÛó§O‡¶ÚÍêtÝ­o” ?üñ¾Ð3mÌùÓ³ó'§ï¾ûÍ¿ýû¿‡1 !8¾ºúP²ÈÌ“×/Ξ<{÷ÓåÕÍ­°Åt~®ó,/'}9Å<JÉÝ&¼ÿîJÄ(AɈØyQZ5ùª²Lã«—g“¹qa+Ù›ZÌŸ©j¢šŒ_™YVÂY ÔìÅò´ZÔjlC *½¼˜š¬ )µƒO÷ݸœÏj;în·Cßö£ÕØ|† Ò¢P&ËPf¨øþ¦q^ Õ™²“ùvëˆ5§Ø ïñìqÆxÌ_¾yµïÛ1uËe-‘NN¦,Özœ«zUgÙ¤Ý7JÚ]3¦˜„U ÆàÀùq`VM‚H˜¤Àà2²È™ó¼ôíÀD@©ÈuiµûI(#Œ“RS¤\ªˆY@bŠQ&JchµÑR™Þù$3E© ¡J$Ad¦cdBÈω~¥”G®œN))¥ˆH+ „Ì‚¥¤ŽºoâˆH(ÈhApfÌx,¶©Žé€„BóqyB Äœ(ðÏ0H¥$W/f‘$¡ ‰ŒòùÉy ŽTE½Ù5ãÀ”’’,¶Ãøéãz5[~õí³‡íýæaÿüéÙ‹W§ýÐÜÜlï6m?†ó“Ùütvu{׎ÉT†0¤(¦ÜšzR¼C¹`މ‚wC™KkÇÞcd¸\Lm™Ù*D›ÛÛ~ˆÑ3°ìvß­wq¤i]ˆQ[;™•Å$3™úa=ƒˆ1j)YV ™Â€IU= Ÿ8%D¦”únœÏ§!:†¼ÊIˆãkÂÐ HÚ ŽM®Bê€A)–VZ>ŒÄT–eóîÐIŒ£÷LZ›yZíã((J „¶ïÂqÿ"2 ­´H”‚'bè¥cAˆ(Hƒ(Y ›åéÙéz½>?½øê›o€h}{ûpu»¨ç·ÝØö™1wë­>úN¤ ‘0¦$QeºbÒe¶ ‚ÛõÃÐöƒ‹Úª}»³VOêâÍ«/d‡v{zz68)m»+J£2‚˜—3ƒ"F?_ÌŸ¼|6?]žqŒÍ~Dóéìþf=öÎd`¬qšC4Z_TLŽ5‡=3cÆ‘‡15ÍÈÓù\Iù‡_ÿÇj¹ø?ÿ¯ÿãòòÇ¡3k «–³:!¦@Öš¾oÝèç“eJÌBgU]Oëív;ƒ5F ¥% R‰^~ó‹§U•½uu¹yõúéti'óI·soÿôöÕ›g«óÕyºztvþ ’wcs~vnŠŠ9kæ8]M_¼xäü°YÌ'ßÿáÚŠ2m\HÓÕêù“Çe¥¿ý믄?ýùÃåÛm»Á }ß<}ùÔfôÛý®¯î RQL•гIQÕÅ?üÓÿ.Ìüý»?m›];¤åë—¯~ÿÛ?û!HhÉ?þîòáf! ~pÞÏæåt!‹’§Ó =>}£„•›6îÚîãå¥@IŠl‚ÓJÞìöBðã’i—g«×m±È#Çíô$ÝÙ\æ}ï\â¦w&G)5šq¶ôÊaäÝÖÇžêÌäYy»ö`³ÃP¾ûÿý·?>lzfîº$ Íp6)«LžœN¢û^xêQX«…H ʼ,ºÚ”ã‘ÁE/J«Nª,øQI!„ÐZBJÔz!3R §¥g”ÊÌØL"AŠ…µVƒt#i­Qǧ’”‘Äœ@d " !$%J,•Fm´@£2 D¡”$¦#™ÄCÌó<1¥”˜!r!!%«¤–¨ ‹&R¢B  Ç|8çyNÌ)Q@AÄQ )…ÖñX p €Ä˜CDùÕ—¯nï U½üæY3¬?}ÚJ£¤ïÆ››ËÍ®{úôéßœ¯7›‡«ýë§Oÿò—¯dFw7÷Íz€(ó²¬îöCC ²râCÆÁy$Bd¥1Cfò§/Ïl®67{!€E@N‹ùôáþ~è{ïY³€cô>EÂyb”:³};ŒÍ˜‹ÂèL(>ì7¾¡±¨+$æˆR©<ƒ‡ëK)¡^T«åtØ7®K1¡ÎDQ?Œ”0/…ÖHÈXZò¡?´&·&ÏŒÍiw¸I‰bTQP2åyŽÂŒƒã„Ñû]ÓÞ£wŽ‚2«gOÆîÀÉ)!&"ð¡É'PÀI00áç"nBHÈ(¤ð³¡êZi-œ 3–ÁÇÜÿùþéå¯ú4Jcš]ûéz¿ÛÁAäûÛë«Ýz¿»S碠43 …¨Áf¦œÎªé¼Òʄȫӥóƒ2X”Ùþ°B2h7¦ý¶íºÁËѹé¬l‡õ0ôBJNWgÓùB){qñd6›ÏW‹rZPrZŠùbõ°ÙŒÁ­.Î&“UJ¢m{æ¨$uÂð‡_ÿ›¤M¼¸Xm7Í퇫ûû­”v}sûñ“£Ôzöõ7_ÞÝ]v›ÃÉâuž½–eÇy®ª•v<ñÆî¾Ý===3 Q¬`Ó$öwÿX0 –8P–AJ‘;Þ|òŽ+–?œ&µÄ®µj½ïóÌÊ*ß·}ïÚ¯~ôzpzhÃv½SŠ^}ñj¿ÞRQNŒÎ».F&R…÷²mï<“T,Ⱥ4ôÓãýôš""Îç'“Éüã‡Ïžž,ç‹ä™Ÿ¿¼Øoî¾ÿåûnßÿÍ¿ÿ‹/¾úê¿þ—ÿñî»7É”b¥s¡ôtžFïäõûß²sZ›8¬]¿·cåTмëÖûmûáýI¶Ý¨ËI× yVœ?¹øá7ŸmÖ+yÓ÷ï¾ÿMU ë=vãá›?ýq;níp˜.häúñþòò©,²IN]ÓCÄ_û §À¼ûînߌ?~œ¦È„ÎäÁŬÎkCï!õU)2¶cY•1@ç{.…õR üü«ËêÄÄV°¸Ì'§ÖF¿ÞA³qc;ŒHÅ|>¤ÊY§‹rß‹éD9’Ådó°v«.±¨–°8­fùäîö§õ,“ù~×_¿Ûö‡å™HCûñns …]ÌUò«Ÿüø¢Ý™ì¶-&ôCÇ)h­›×-o«É¤Þ­7Óœœœ‰If×weIZØýBÈk#ú&Ì–ui`Œ¹EE‰ÁNÎ;°‘e–A@´m¦edÉÒô}ŠJED=ؘM´ œMÒ—¯OînÚ.b¦+ݤÔ.‘Oƒ³Ö 2À,UT”"h“'ðm;²Ë“C`ÈœcNÄȱbB‚ÈD”˜}t&Dì=&R!¦<¤¢É=@ÁŒYH0 È¥€{ç("ùè‘H œw1ùÈ (¥6(¢„xÔ|Q bŠÇ" !ð±I €b "’œ  ñÃןÝ^ß>YÎ_~ýäæþþýÛ‘ ÞÀ®Ý[O/.¿üêéáÐ}|ûpº˜½üü|ßmß¾¹õVU.gã¾i Efë#xN8F-•Áûà¼zq¶¾yˆf‹åéùYÛ4MÓ¦””Ôóù":Ï€y] &—R+¥soihC r·îBQgm×]@&‰­£Äu=mZ»[·'§ÏDßo‡¶#A*3UY,³õj, †T•ÓÑù~?B"mòqtYVyçDz˜:ïzF ÄLêZO5ß;pÖ `ƒGBBâdXðè!òÙù¹Oɺ"c"ä˜Rˆ„©Ž¤'‚H˜AÂ#”-ûÎÇ#ÑA(N11$D-Ì“óç§—/î¶›¬,ØâýíÃÃã]^eCtcßE™"&Ž.1é,÷>pH‚àù‹&Ë¥¦j>Iˆ›Õ:9»\TË“²ª #¦±mBŒ»¾ozÛ´MŒáòòb{?t…ÑӪ̔´ƒÏ•êšÃöñ‘CšÏC·ŸæJI’Ê´]_ÖÓ,¯½‡Ý¾³6Ji¬µëíÐwç§‹ºž)-Î/Îo¯w›‹îùË1x× eU*H7ïÞ\\­\ç™ÁzhÚÅb9™×‡&lwëõöòòâú惷v±<Gÿø¸ ÖrŠ\pÎ5mk]ȲIÄÄm7Xë|œ0F¨ëi× ŒÑ;‹)ƧOŸàzuoÇæÕë×ïÞ¼Y?4ëíæêŹ”æŸþñ;©Ê2ÏÀ÷ѺÛëû¶íÚ¶3&î¯ß½Ï Á8xë“üa¿êš~wè½}7u©3¨'¥6âdY·»Çîph÷áv{r~#ÀÁ¥1Ž—OžÎêìübz¿¹nû¦®&ÓéœI|ýã×ý8@Ja~q±oÝúnß캢..ŸŸ®‚¯¾zöäËi5/›1¶c ¾õ10£RÙ~¿÷®Ÿ/«bª§Åò¬òÁ­7ÝýãˆZÈ*ŸÕl¨ÊºkõtZ\>©8’WB‘ 2›Þ®#©êöqGùd¿îóe]ÇùÜ\_oÊj1ŽþÐ{RF²#‡DC5_lÝêq[åüê\žæêó³)7+/u*ꊠØlZe¸,•=ÄÃÖŽcÒJg¥¢ÝõmH)0TÕéúÞÛŽadbJIjÃ15NšLA’$:!ªª¤}çlB™Ud²CïìÑ; ÑÛ„( Fö@Q4ûq° ”†•¤ˆã8Øä“!³2Æ”„4x?æeÉ$ƒà1Ïæ cÌ8¶‚Ш…¯kmŒääªIæSòLHºëúè½ÑÚY—W&«Ež)ÒØ 2 U=½-ËÒ¹a¿Ý+aLYJRÉs×0ãèBJNê*Ïó¡¬=z@„”’ •)ŒÌS#£„”¤T $'AÊ<£ÄÚ˜ÑM×DH PFq^»Ÿ|]mïT:ÓJ&æð ÆyìkáhPŒ’Ó‘ÎZ‰ÌhçCŒJf åfs·¹¿éÛþîn¥´~ùê³nh¬³FgRè#ÓŸrôž#k ¼ÐWWO§‹I5)«I}rzzqzöáÝ[!‹—OêIeŒº¼8/ë‰ÒfÛ´1ź*_¾|©”Ò:+s)‰N–'‹Ùü&ú¦*óââd^”ÙÝÍMð.¤$UFd¤ÊûÑîöÍ¡í¥6̘«ºœOër2¯ª¼Ùí¾ûçïËÒL•P´~ÜíÖÛ¯ô?¶ûíýÓ—»ÇõÇ··Bfƒ÷E1³}$)ÚÎívÍv³Ï³|µ~<=™'Ææ0H°^?†bJ£‹$MÛ RëOc‘ˆbôGÝ’ÖºëZ“«<ˤUUú”êºzó»ßD7¼þÁËùÏÿá[à§óÓ»ûÕ?ýâW_þà˫Ϟmï×ww€òäüIY–ÓiýþÃoö›CY(Aѹ¢(Šªk†Õê.±ˆ};!#»åùüÙÕ“»ë›É¤T£‡Cƒš-N ‘ÊÒÝÞ>6öìRgdÇ8ô6ËL^æû~Ü´MŸbŸTæˆP€øtÍ!"ˆ½³.Å@J³?´.XL˜Bº!2k©†ÁÖÇž’³)„n?ôv!ýH(òB'@‘Cð1qYWý8ºèm°vt$£°w½w>tÃ(ö»¡¤2¦;tÉ30iCÎõŒi2«ctUUì÷; ’½E"B‰­…Ô1yeÒ¦4-«Lå„EŒ)Û”b]#„„! Ï?ºòÿñ?œèDß½wà°)&$ &NG0çÒ‰& $H¬Qd9‚„öÐäÐÊ£ÐUµ¸|ò‚v‡U7ö6E€Œ‰#“T"O³òù˧/>»Zoׇ¦™Ïgц")º|z6)K:?»¨§ÓÓ§Ï­ó—çgÏŸ^L§3¥¤÷~¿?0&Êäõ`=J1?™_½¼š-¦å4[œ/<Ç̨3¹Ù¶›Fª,«ŒÉtžg‡æ0ôNeYY1ØÑ…ÌȾ9D—òB½þúÕ¾9öýð'ߌãÐöúÅþqww½Z­w«Ýa»±íÞ9ïšÖúgÓs’’¤Àív"ö#•}ÿö.Š„²¬RÆdY]ÏúÞ£1¦ë†˜eRÑ÷mQæóåb†£Râär™¢ßo6Áú¿ø«¿øõ¯¿ýùÿýMQ|õ“¯°Ûí~ô£×‹³¹tØ>¶Ch_Ňë‡f%ɘBÇèIfåäth[Ž´Ù­‚"¸@Œ£ë/ž_ ’×o®·›]9){ëK½è†@ÑïNNgﮯO.'ý×?¹zúl¹¼Q~ñÕŸ(ªÄÙÅ©Já¿ý§ÿüùó*Ë~õËoïÞߨÁo;ß\LNÄÀ«õšHšVª"«êl*òb’çz¸&M²ÚïÛœt¥‹¶íN./J…o;-Ôæ®£2º»„¬‹‚•}Ü4»}—•vŒö~ŸFžO–ýói¾ÀñåÓ¬šÃ¢J‹šw‡»Uh7½?Ø®‹6&(U-0ßïö¶í¤I9óÞ5=NçW·ßüÛéë×Ó›;»?¸«µ’Ü÷Ƀ•=}‚/_]¢4‡Æ5{»Ý‹ÉÙ²Òa:ÅÓgÕ˜ª]/º>ˆ³ù (bbcŒcníTé8Ž­µåì¤ÖÉùÑ“IÍ‚¬ÎzІ˜ ÏŒ¦Ñ¨w,¢Ë$'ÄŒè{ "3FÓ[ß´#£D 1²‹) B2Y¦Œ 1Æ@$)À˜"¦)yä„€(IÅ)IBd%CðÁ‘‘A!„PB¦˜ ¦à]öXH‚aŠ ‘¥ ¡´`©4ƒ@øtÀ$bÆÄL‚Ž–?¤ˆÌ„ÓÑ >©É:¼÷ɽ~ùôûëo>®@ L †äó«Ëfôëñâr9™ùbºÙ®?ì¼ÕB«]ß¹”ÉßÓæÅ8!™…ž}€”#ƒF–‘Ù Dœ·Á…!„:+æS ¨ 9éš80C{[G‘IDAT8ϤíG ÉHA(¥ÊbIRJ‘g9‚B!E&&‹Éz³>lnBïµÎt%'õ´ï{¢”r2Éۮ͋R›"…äÆ!&žÌÃ8Ž®EŒ Ĥ˜—õ"2Xð(% )yë- Œ8 €È‘bŒ –´ºé>ÜŒ÷½ð(`H A"JÀüa/2 D*‹êˆ(A)]bcT!EìÖOŸ ÷1“WUYïÖ÷¢´Î&ð’SÂÀ£À£y”!ⳫKSøï?Bãh÷÷ïYf™!e} ‰IÈ¢.¶»µQµíí³«Ó“Ë*/¤u×_}ñõÿP QÂ<{ù|±\(£ÊIQŸLŠIŽÈÉC"/óåÅ"‚þò9¶Mßîûö°'•Œ”T× m×ØÃÆ{W׳‡ëÛjf.Ÿ=¹½¹×ÚL¦ÅéIµÛÝg™8=]ÜÞ¼›vl›ØîšÍ®1Õ¤šÖë½wbšÖí›Ah©,3©Uä}à”Œ1œRf4&ŽÁ`”¹ °šd “²Ã „3¦&áöû{m²õçÿúçÿËwo®_|ö SüÅ?üï«çgOÏo®o²¬ÐYq}óq·¾w}¿}\—‹ÙÙä좜œôcÈò\Õ“Y׌1¸Íê±kÇÉtjŒ|ýõsIøá·¶Û®ïÚäùÝÛÇÕãjµz0¾üìòÃõÍ¿ùÓª2aìçÕlhÓ›_}[å'Úð³‹Ù¡¾þñMfÓ¾k~ûëßJß}¼]ï­s˜§ü¤¬¤deªïWãa}ýþqs3lïö®³JeÒlW;ë‚c"X±eÛ´«ocÛÝ0ÂtyeÇÕpn=>¹¤·7×¼<¥÷WÏ£ógèò ióèª%…l¡P¾5ãÐ üè 0%YÜ[Êò²YíH•>q?´1ö…VË‹ÙÞíŽå«‹²ÄñãíÐtf:2õcë°u—/Å\ÏNr2aYv­{zy*ePRbJä‡]£I“1'ÀAjUÔ™*ñ0ª’„RE®“ŒÃÈkë4¢ô“”!\nŒÖRš8&Ô,ÈzJ ˆPöq…2– HJ; 7DÆ1ϵ]d&)’‘A–D=– 9€Ÿ—:7ºÈHdFbŠ#Û£°„“C;&ç#2 `ˆ,µTJ0{úÞ‡R"!!±$ #Å c`AJ¦ä1EA‡ ¤ !€r4J3ƒ÷ñø,!„Þƒ!!#°8£s)Á´®ÞÝ>>¬HG}JÌ c:;]®WÛí¦¹XL?ûìbv¹\?nûëÞ˜\3‰YÀ1ôȽÂÆF¤˜”ÑPD•F£…°C›e¦, mIÀ`G¼<›LOòõj5 £ ´ƒCbDPJ‡2cæóY×÷ZË,SR‹¦o"g¹X,fÌì¼3F ¢w±šLŒ*1Éq´v° ŒNJpJÀ8/º¶-«Êäùn·s>¤„™(ël*¤ŒÎ§È)&­ecŒ.ËLpNVeA6$ R²#Žb¼nñûGºi¤'BADLˆ ÄHD 115xlà2û…À# Ðc´édvBBåòääùæpѶÍfu¤¬?Âô0Ç- Špô: ³'—,ùæf3›Žýáþí;¥MU—už_>»†~¹\t}³o6ãàÖ«‡,“U=wÖUUaŒì{ûñãÅŲ(DŒMßïL®µÉŒP¹Ò]ÛåUÙÆýº ö›ý·¿øå‡7¿›Í¦WçÓå$$“º–MF6Ƽ¬nooí èæÃƒ–ù«Ïw›5ÚFRúæ›/–óºm‡¶†~$©.ž>É«"¯&]Û§Ä!„¦é£”¦žN›Ã‘¬ >GF;Z)D‘™Ñvœ¢”2&^..´*‚ó1:¡$ØoÖy&š®3™ àgO_>®¶û·ÿýË/_}õÍç÷··¯^~öüù³”ÀŽé»_ÿîñq{Ø÷Þ‡àom‘çÓÅ\"5Mwyy9$—WõèÃcìH å5™N 3yûæ#s"í¶ÛõzÛ í`[!éôôÔzþê‡ôòùÅéIñ“?ùòÿô³b5™£p]VÍ.ž<}ûæ]ß'§Ëó³“þåw÷Ë/E #JE{7 ÂéüŒ 1îãi.¦yJ"]ßI¤Ì© T=/ãpxØ¥Þû³‹­Ûݾ?dff#åÆœMåvµżw=² ³Ìä.Në0ºÇ¦•“âüb¢ µ^_Oë¼JbžæÝ³“ªÏ†W—Ò®’‹íã¼¹mÞ½» fSê\…$‰ÑÓÈ¿?…¡J)¦`ˆˆ ‰‘ J‚ÄA<=ìš>Fˆ.¬÷m;Z!¥FÄÄ||FöÎ ƒkÛþb>ýüõU6Íß¿»¾þ¸J¬öÃ!àñ•ù“‚ü_DÇöƒBšÏf£™AjT’@Œ) âéù‰.$IàÑY©…ÎÕýÃÍv³§$ØÀ4™Lbdç,sG»Û71EctL‘‰#©„D2™¨ëúáþñ°?@â¶£Õt\>1¨JQÏfÅd²}ÜžÌOBŠMÛ£cR+!¥Tªo{aD^èŠÁ $-¤4™NF7Ä)Û!ø¢,ú¾ã8ôŸ_”¹‚qdÁ2BJ"%„¬DBN‰éHh«Ê*ŤŒ GÆëÀœâ'\8 údz  Ö›^åEV›Åršiùxÿ,ó¢Ñ+“c‚”˜‘$ )x_k¹8»PFOZ«›¿ ýpñä9(uóáÚ§¤•*Ër:èL®Wëf¿«ÊJ #¾xþd¹¨!òÅż®õ~}ï}G§“¹fý¸~¼»¤õf»Y¯ïo?ÜÝ¿Ûn9Æ×¯>{þòâÉÕ9ÄD³ÙÄ»^`@%g'ËÏ?­¥Þ<>>ÜoÆ!åù4zË n>Ü !ÒOúgûÍãápèWäEÛõ:ÏPP7†Ä)ÏËÝ®ŸÖÓ¶íGëCH„ÐwCb €%‡$òLg¹yžimºn°–·›pdö ¨o›ªÌ%‘ aRיκ¶ÑY¾]o./O×l÷™Ê»¾‹n>Þ*i•Pùd¶¨«ruÿ—…™2Ëú¾ßï;úIžÝ|ÿæýoÞ Ì´”ÖÛ¼”¯¿zÆŒ™}øx«¥ê»v:›…˜HŠƒÑz>YZ“éÜèbüç_ýüÿýýß·ÿâ? l›ýðžqÖ÷mO(Ο]\^\üìý¬ï…L|¥h·|ïlË)‚µnôM¤þÕWWÛ]SO!µÃé“ÅvÛ­~òÚÞ,f*¦P8öû«W™Â|:¥e"êB<¿ZÔ:팞vkŒç%ÝÞÔzwï×;wýýõãR¥Òº Ä!q·8Ÿi™®N ¶Û"3×ï¶ýèä™×…žN«<Ïʪ¬‹~6íöû1Åá~n׆`§ývè÷öɳKDìV Æd Èzç§‹ª’ì÷óRvŒ$ì'*r_ähP œR$en4´Ý0DDE„™"©é¤n÷{cL p JøÌ ‰S´6ZïZkMYK¤Û»’2K¥ŒÒ)ŒÂ>×(97¶Ý(„LÉÛ!4ûaÀZ¶6°õ‰‰¤¤’”2„ „’RBNèƒOBd­´IÈDÈ1F)µÖ†¦”b )0 @$OÈD(Ž;u€ãÎ[kG"õ{ÏÓ9' QL‘ˆI )b DÈ‚ˆSŒ1ˆ?úáW«Õ$±g½RJ4‘ÃØŽ>ÄPhúìÅ¥Ôôý›w¿{?D ŒH” }â–þËwäpHé˜ B@%µÔ¦w}do„9½8™.'ûnÆÀu?Äq ²’@ Ã`½OB `RÒ©¼ÈËEL8Z›åƘ|èl–eR¨®u)Ð087DÓ‡±kd¦(+¤@)¥DG‰ú~ˆÌ ÉåRQJCßùà‰Dtã˜bŠ>xïcJJ–RÔ6Ž¢ÞE)H¾k{‡k F`I¨’?™(C>ðlY yç9ñïc ÇÞ×§pœš( ìÎ/ÏʪúÁ7?8{v2Ÿ/?¼½YßÞKi´1Î[¨AH È@@ ¶ÖZJÕ5‡›÷7œ†æ°ÉdEÅ´Xžjeœ³ÃÐ?®b ý06ûÆŽ>FH|xryàç³Zbœ/òql·wëÌTõd1 Žm $Q»=,ó“Ëå“««Ùübyr±8©¦3“!Q./Ïbì£;HJ„€º¦mˆ±íí‡ë‡§W¯Î.O÷‡fµÚÿå¿ù³Ï¿xqýîíÇ·oûÞey-¤–*ŸÎB)•׈<~69»½þÈ RiŒÁ*™I™g…‡Þh9ÓiVÕ†1*©œó‰QkÃ)yßNgyQL•‹ùŒ@Ĥ9Éh·»í'P ÝÀHÞÞ}ûßžœ,†Á"cŒ~2ï»!+j©Yïhñôâìò¬ë!tŠ0_NÞÿ½³au°²ÔJÂøêùr1_õò»ß}¸¿^ù!ev»½RZªt–Fî6Æ€Ø&J7׫4äçOŸF;ömœÍ‚¨mšåbÙ»pvzþ?ÿîïö‡>DÆ”$‚˜RÊ3a„ÙBd¦xvy²;2„¬T“ZTÆÝ¿øby¿ÚÈ‚~òÇË×W“×ÏNçgúõ‹ú/L··Í^ÔÙò4ÏÍ|¦™FãåÉò»·ÛOKõã¯OVÛQ%¡ùòB¼~=Gm®›ZVýæ0Ž¡³ì¢(òZ®WΈœ„ˆœT’B(E²;´ÞuÀMVæß¿—̓«—óoo}Š t¶ÎÊè‚È”.IbpÍ|ê›É(^.ðÅ™¼»?”u•å™Ör»>T3º¸È£?äµ­ Q^>ÿ¼ÙÆ'/Ï'UÕIy‘ç˜|L˜ RfÔt>aö£Ý0$è¶³‚TQÔU9ÑE^8ëó¢h†6!Ô“pDHU1‰QYJ‚T*×¼O/êÞŽ!qIk}T| !'` ž0¤¨”6Z ™RòDGd´‘#‚ò¨I‰°R€"'æ‚tˆ P¸6¤ÀYÄ„ø{8"§#^A‰#‡91"J!P¦ÈÿÁÉ#y'IEND®B`‚ltfat/inst/signals/ltfatlogo.m0000664000175000017500000000326112612404255016355 0ustar susnaksusnakfunction [s,fs]=ltfatlogo() %-*- texinfo -*- %@deftypefn {Function} ltfatlogo %@verbatim %LTFATLOGO Load the 'ltfatlogo' test signal % Usage: s=ltfatlogo; % % LTFATLOGO loads the 'ltfatlogo' signal. This is a sound synthezised % from an artificial spectrogram of the word 'LTFAT'. See the help of % LTFATTEXT. % % [sig,fs]=LTFATLOGO additionally returns the sampling frequency fs. % % The signal is 7200 samples long and recorded at 8 kHz. It has been % scaled to not produce any clipping. % % Examples: % --------- % % To produce a spectrogram of the logo, use: % % sgram(ltfatlogo,8000,90); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/ltfatlogo.html} %@seealso{ltfattext} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_SIGNALS % REFERENCE: OK if nargin>0 error('This function does not take input arguments.') end; f=mfilename('fullpath'); s = wavload([f,'.wav']); fs=8000; ltfat/inst/signals/signalsinit.m0000664000175000017500000000164412612404255016711 0ustar susnaksusnakstatus=1; %-*- texinfo -*- %@deftypefn {Function} signalsinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/signalsinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/signals/cocktailparty.m0000664000175000017500000000326412612404255017236 0ustar susnaksusnakfunction [s,fs]=cocktailparty() %-*- texinfo -*- %@deftypefn {Function} cocktailparty %@verbatim %COCKTAILPARTY Load the 'cocktailparty' test signal % Usage: s=cocktailparty; % % COCKTAILPARTY loads the 'cocktailparty' signal. It is a recording of a % male native English speaker pronouncing the sentence "The cocktail party % effect refers to the ability to focus on a single talker among a mixture % of conversations in background noises". % % [sig,fs]=COCKTAILPARTY additionally returns the sampling frequency fs. % % The signal is 363200 samples long and recorded at 44.1 kHz in an % anechoic environment. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/cocktailparty.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : James harte and Peter L. Soendergaard % TESTING: TEST_SIGNALS % REFERENCE: OK if nargin>0 error('This function does not take input arguments.') end; f=mfilename('fullpath'); s=wavload([f,'.wav']); fs=44100; ltfat/inst/signals/bat.asc0000664000175000017500000000545612612404251015446 0ustar susnaksusnak0.0029 0.0024 0.002 0.0024 0.0015 0.0015 0.002 0.002 0.0005 0.0015 0.0005 0.0015 0 -0.0015 0.001 0.0015 -0.0049 -0.001 0.0063 -0.0049 -0.0083 0.0127 0.0068 -0.0259 0.0059 0.0386 -0.0405 -0.0269 0.0474 0.0151 -0.063 -0.0093 0.0659 -0.0073 -0.0684 0 0.0728 -0.0146 -0.0752 0.0029 0.0771 -0.0024 -0.085 -0.0063 0.0698 0.0264 -0.0908 -0.0254 0.0605 0.0669 -0.083 -0.0542 0.0347 0.0845 -0.0391 -0.0903 0.0078 0.0737 0.0474 -0.1108 -0.0449 0.0513 0.0903 -0.04 -0.106 0.0049 0.0684 0.0776 -0.0923 -0.0801 0.0366 0.0742 0.0537 -0.1113 -0.0591 0.0508 0.0718 0.0376 -0.1196 -0.0503 0.0527 0.0679 0.0449 -0.1128 -0.0566 0.0508 0.0654 0.0659 -0.1084 -0.0732 0.043 0.064 0.083 -0.0771 -0.104 0.0205 0.0737 0.0762 -0.0068 -0.1357 -0.0234 0.0762 0.0557 0.0771 -0.1216 -0.0918 0.0532 0.0728 0.0723 -0.0156 -0.1436 -0.02 0.0835 0.0498 0.0947 -0.103 -0.1279 0.0405 0.0908 0.0415 0.0732 -0.145 -0.0898 0.0757 0.0786 0.0439 0.0459 -0.1646 -0.0591 0.0903 0.064 0.0415 0.0425 -0.167 -0.0522 0.0869 0.0581 0.0322 0.064 -0.1626 -0.0718 0.0903 0.0679 0.0156 0.0972 -0.1479 -0.1138 0.0786 0.0884 0.0088 0.1069 -0.0942 -0.1675 0.0396 0.1069 0.021 0.0464 0.0327 -0.2012 -0.0376 0.1138 0.063 -0.0083 0.1172 -0.1265 -0.1587 0.0684 0.1138 0.0083 0.0244 0.0742 -0.1958 -0.0674 0.1152 0.084 -0.0205 0.0547 0.0088 -0.2139 -0.0059 0.1362 0.0513 -0.0327 0.0747 -0.0322 -0.208 0.0405 0.145 0.0278 -0.0435 0.0728 -0.0215 -0.2021 0.0444 0.1426 0.022 -0.0557 0.0513 0.04 -0.2031 0.0146 0.1455 0.0317 -0.062 0.0098 0.1226 -0.1719 -0.0596 0.1387 0.0723 -0.0532 -0.0342 0.1206 -0.0396 -0.1738 0.0718 0.1255 -0.0137 -0.0625 0.02 0.147 -0.1489 -0.084 0.1284 0.0742 -0.0542 -0.0449 0.0811 0.0894 -0.1924 -0.0083 0.1348 0.0259 -0.0684 -0.0215 0.105 0.0483 -0.1895 0.0283 0.1279 0.0083 -0.0693 -0.0176 0.1128 0.0566 -0.1865 0.0176 0.126 0.0103 -0.0728 -0.0132 0.0918 0.1035 -0.166 -0.0229 0.1279 0.0278 -0.063 -0.0205 0.0532 0.1431 -0.0923 -0.1108 0.106 0.0684 -0.0449 -0.041 0.0254 0.1025 0.0586 -0.1646 0.0146 0.1128 0.0059 -0.061 -0.0073 0.0454 0.1138 -0.0093 -0.146 0.0703 0.084 -0.0239 -0.0527 0.0122 0.0469 0.0908 -0.0029 -0.123 0.0679 0.0732 -0.0293 -0.0469 0.0181 0.0347 0.0542 0.062 -0.1182 0.0254 0.0811 -0.0068 -0.0444 0.001 0.0347 0.0234 0.0688 -0.0088 -0.0767 0.0703 0.0352 -0.0322 -0.02 0.021 0.0205 0.0088 0.063 0.0186 -0.0596 0.0444 0.0181 -0.0142 -0.0103 0.0083 0.0137 0.0098 0.0303 0.0635 -0.0312 -0.0166 0.0322 0.0024 -0.0083 0 0.0098 0.0137 0.0176 0.0264 0.042 0.0015 -0.0239 0.0142 0.0039 -0.0039 0.001 0.0093 0.0103 0.0166 0.0229 0.0239 0.022 -0.0083 -0.0151 0.0039 0.0059 0.002 0.0039 0.0146 0.0181 0.0156 0.0142 0.0137 0.0088 0.001 -0.0054 -0.0005 0.0029 0.0083 0.0103 0.0132 0.0166 0.0122 0.0078 0.0103 0.0098 0.0049 0.002 0 0.0044 0.0103 0.0107 0.0093 0.0088 0.0083 0.0078 0.0063 0.0049 0.0073 0.002 0.0034 0.0068 0.0073 0.0093 0.0083 0.0083 0.0073 0.0078 0.0063 0.0054 0.0029 0.0024 ltfat/inst/signals/linus.m0000664000175000017500000000303412612404255015512 0ustar susnaksusnakfunction [s,fs]=linus() %-*- texinfo -*- %@deftypefn {Function} linus %@verbatim %LINUS Load the 'linus' test signal % Usage: s=linus; % % LINUS loads the 'linus' signal. It is a recording of Linus Thorvalds % pronouncing the words "Hello. My name is Linus Thorvalds, and I % pronounce Linux as Linux". % % The signal is 41461 samples long and is sampled at 8 kHz. % % [sig,fs]=LINUS additionally returns the sampling frequency fs. % % See http://www.paul.sladen.org/pronunciation/. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/linus.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_SIGNALS % REFERENCE: OK if nargin>0 error('This function does not take input arguments.') end; f=mfilename('fullpath'); s=wavload([f,'.wav']); fs=8000; ltfat/inst/signals/otoclick.m0000664000175000017500000000331012612404255016164 0ustar susnaksusnakfunction [s,fs]=otoclick() %-*- texinfo -*- %@deftypefn {Function} otoclick %@verbatim %OTOCLICK Load the 'otoclick' test signal % Usage: s=otoclick; % % OTOCLICK loads the 'otoclick' signal. The signal is a click-evoked % otoacoustic emission. It consists of two clear clicks followed by a % ringing. The ringing is the actual otoacoustic emission. % % [sig,fs]=OTOCLICK additionally returns the sampling frequency fs. % % It was measured by Sarah Verhulst at CAHR (Centre of Applied Hearing % Research) at Department of Eletrical Engineering, Technical University % of Denmark % % The signal is 2210 samples long and sampled at 44.1 kHz. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/otoclick.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_SIGNALS % REFERENCE: OK if nargin>0 error('This function does not take input arguments.') end; f=mfilename('fullpath'); s=load('-ascii',[f,'.asc']); fs=44100; ltfat/inst/signals/cameraman.m0000664000175000017500000000314312612404255016305 0ustar susnaksusnakfunction s=cameraman(); %-*- texinfo -*- %@deftypefn {Function} cameraman %@verbatim %CAMERAMAN Load the 'cameraman' test image % Usage: s=cameraman; % % CAMERAMAN loads a 256 x256 greyscale image of a cameraman. % % The returned matrix s consists of integers between 0 and 255, % which have been converted to double precision. % % To display the image, use imagesc with a gray colormap: % % imagesc(cameraman); colormap(gray); axis('image'); % % See ftp://nic.funet.fi/pub/graphics/misc/test-images/ or % http://sipi.usc.edu/database/database.cgi?volume=misc. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/cameraman.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_SIGNALS if nargin>0 error('This function does not take input arguments.') end; f=mfilename('fullpath'); s=double(imread([f,'.png'])); ltfat/inst/signals/ctestfun.m0000664000175000017500000000245512612404255016221 0ustar susnaksusnakfunction [ftest]=ctestfun(L) %-*- texinfo -*- %@deftypefn {Function} ctestfun %@verbatim %CTESTFUN Complex 1-D test function % Usage: ftest=ctestfun(L); % % CTESTFUN(L) returns a test signal consisting of a superposition of a % chirp and an indicator function. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/ctestfun.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ftest=zeros(L,1); sp=round(L/4); lchirp=round(L/2); ftest(sp+1:sp+lchirp)=exp(2*i*linspace(0,2*pi*sqrt(lchirp)/10,lchirp).^2)'; s=round(L*7/16); l=round(L/16); ftest(s:s+l)=ftest(s:s+l)+ones(l+1,1); ltfat/inst/signals/batmask.asc0000664000175000017500000000625012612404251016313 0ustar susnaksusnak 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ltfat/inst/signals/traindoppler.wav0000664000175000017500000114546012612404251017433 0ustar susnaksusnakRIFF(ËWAVEfmt @€>dataË{õ>òäò0ô¼ýS¦iý¼ýbþ%û¼ý: ”=DúËû5îý¼ýú¼ýˆWˆµþËû­ÿK­ÿ%û]ù¼ý”ýˆDˆÐ Ð ñü0ô0ôýW QîÿÃüþñÛ: Ð Ð Ð Dqüóðì0ôSù Qê%û©úÆö¸øµþý… ýD¼ýK­ÿ%û¼ýŠóÃü… £]ù¯îú+ £¼ýl÷¸ø0ô!öúÿSËû0ôúïúïŠóËûSý: ˆ£=øì¯îÆö­ÿqüDQè: Æö{õ0ôÆöÆö]ùþþýùêÛýiý0ôÆöÃüùD”: : … l÷Šó{õ]ù=ÿ­ÿñ¦K5î=¼ýü¼ýýWHß î5ùW£DúD£”v Ð £Zÿú¸øÃüqü]ù©ú­ÿDDÛ: HZÿ¼ýú¼ýîÛSK£ýS¼ý%ûâý]ù]ùqüù5Ð !öÍêóð!ö¦¸ø]ùSˆÿ%ûS­ÿ­ÿþqüÃü]ù%ûþþÃü¼ýÿxûÆö0ô0ô{õ%ûK¼ýÿß HDêñÃüÆöqü£gWøúïl÷îê¼ýËû©ú]ùÿùý£ÿËûþÿüŠó!öê: ý=ý££bþbþÛÐ ß H=¼ý©ú¸øZÿ=: ¦úÆöqüW:   : iýÆöúSž­ÿñDêþDDµþqüÃüKý”5K]ù¼ýüñÛß : Wž©ú¸ø©úøóðcí™ñ¦Ð : iýäòóðøiý:  ù{õ¯îcíø¼ý£ˆÿ{õ6ècíóð{õbþH£Kâýý™ñóð©úW v îùKËûüDýžËûËûqüÿµþ%ûþbþ>òcíŠó¼ýý”£: £©úµþÃübþÛ£5­ÿWß Ð : ==þSqü{õüù£: ”: ˆž¸øÆöbþDH… HùÿâHWiýÆöøÃü©ú—žÆö¸ø¦ýDZÿHH”ñù]ù]ù©ú©úS=£S]ù©úâWËûl÷¸øÆö]ù¸øZÿ%ûäò0ô]ùl÷óð¸ø¦55¦bþ¼ýµþ5ýDúÆöÆö{õü£: Wß ß iýóðécíxûâ£Û­ÿ¸øbþ”: —Ãü]ùÆöúž¼ýú­ÿv  Р£úŠóŠó5—ÛÐ … ÛÿDˆ”£: £­ÿÃüÃü]ùbþ¦=Wý=êù¦5î…  5Ëûäò{õ]ùµþµþù—=Æöøqüî êl÷¯î!öZÿWÿ¸ø]ùžñ0ôcíÆö¼ýê—”H­ÿcíŸåéÆöñW¦Æö¯îcíú5¼ý—£l÷ÆöÆöËûiýýâ  ýüóð{õ¼ý£ý=©ú]ùøÃü=ùÿ=”HžDýËûÃü¼ý©úËû©úqü5… DqüqüWèÊ+ ¦]ùùÿ©úËûþ£v gHK©úÛHÛËû0ôÃüiýÿÐ Â ùþKþl÷ÆöÆö—…  : úïcí!öÛ: … W%û¸ø]ùËûbþ£Û£—”£5äò6èì0ôú¼ýWž0ôŠó0ôÿˆËûÃüÃü]ùcíì™ñù… ñ]ù©úSÛbþbþl÷Æö¦: îüŠó0ôÃü”v v K!ö{õ5Ãüøú=ˆDW£­ÿ©úqüÿùqüäòl÷ÿý”£ß ýËû%ûÆöê£: Wv ß HqüÆöÆöþùHv ˆ—]ùŠóÕô=… : : Ð £ž0ôÕô¼ýS¦âý]ù{õþîýÛ”=D¦]ùøÛ: + =ÕôcíóðqüWî: bþøcí¯îäò{õ{õ]ùý©úÃü£gÐ ž5qü!öcícíóð{õÆöúžžÛ—iýúl÷]ùZÿ£Sµþ ß ¸ø{õ©ú£v + ß þúïcí%ûDù{õ]ù££D]ù]ù©úiýýâH=WýWWý=Dýÿñ—KiýÆö¼ýù: ”: + îÛqü0ôl÷bþ5£:  v : : qüÆöÕôÆö¸øxûbþâß ÛøúïäòDv îKZÿZÿ¼ýøþDþú]ùqü¼ý¸øl÷xûÃüÃü¼ýˆý­ÿ¼ý%ûü­ÿ¸ø¯îúïø¸ø]ùø]ùêHW—žZÿ]ùøøÆöl÷ê… £µþ!öxû=H”£îÛµþ]ù]ù¸øúiý££ß £êbþKWWÆö¯î™ñµþß ÛµþÆö]ùê+ Ð : ­ÿKZÿñ£ß ””D©úÕô©ú—: £:  ËûÍê¯îÕô¸øúÿý£Dúýý: âSü©úqüù©úÃüñHÐ Ð £ýýl÷cícíŠóŠó¸øž5=¼ýúËû£: ”ñ¦=Û¦%û¼ýúl÷¸ø%û¸ø{õúïúï]ùD=Kµþü©úþÛ… ”£5Ãüø™ñÕôW—ß £Zÿqü¼ýâ¸ø0ôËûS5=Û­ÿâ£Ð … bþý{õl÷©ú¼ýHv H­ÿþ%ûüñ¼ýZÿžµþÛÐ ýËû­ÿù££SýDHÛDžDü¼ý—ñÛùµþùñúqüqüËûú©úý¦ê: Q£]ùóðÕô¼ý£W——êqüÕô]ùqü%ûËûý£Säòcí]ùKÿ¸øýbþüø!ö]ù]ù¼ý©ú¼ý­ÿÿÃüùùùbþ¦]ù¸øøüý©úž­ÿ” Qýø0ô¸ø¦ý%ûÿÛˆµþµþâ… HiýŠó0ô%ûêK5{õÆö{õýýa: ¼ýxû¼ý—ÿµþ¼ýÿ­ÿÿùÐ  ß þ!öl÷0ô©úý£WžÿùKžžúúqü£  â¼ý¼ýqüý: KÃü¼ý¸øÃüDZÿÆö!ö¼ý=D¼ýl÷qüþ%ûñ]ùÆöóðÆö%û¼ý+  Ð ]ù!ö{õÆöóðcíÕôiýDñW”—]ùl÷]ùÆöúý—£ÿ]ù!ö]ùqü: QQ: µþqü™ñÆö%ûˆêùžúµþúxûÐ Â H—=D¦üøÿâ5ž%ûÃüÛHîµþ©ú¦”£ñ¦qü=£SüÐ v : ùËû­ÿZÿ©úÆöêÛ¦ú©úW+ ¦Õô¯î0ôÿ””ê—HÐ ”qüÆö]ùÃüøúbþß W]ùZÿ==ÿ]ùÕô]ù©úl÷!öø¸øËûˆgD™ñ6è6èÍêóð©úD蔦¸ø{õÕô©úÆöbþê—Û… : ­ÿ]ùî: : ý]ù]ùl÷]ù¸øl÷%ûW: : —]ù¼ýùù¦£v W]ùÆöÃüÿiýý=ý££ý: ß Ð ß ˆ¼ýxûù=DZÿDÛDqü¼ý¼ýDˆ: ß KÆö¸øiýüµþ5ÃüøÛbþ]ù©ú=ÛêýýH”ZÿZÿÃü%ûÆöl÷bþˆÛSÕô0ôËû=£Kú]ù]ùl÷%ûZÿ=—¸ø0ôÃüSbþDbþËûŠó™ñ¸ø©úl÷]ùDùîD—: 5ø0ôŠó%ûWÐ : H—ýËû¼ýùÛiýbþK5µþü]ù%ûH”=©ú0ô]ùø¼ýDýD­ÿùß … £W¦]ù­ÿ” Ð qü¦: £D¼ýËûýÿúü¦££bþ]ùl÷µþ££”DDÿ­ÿžKþbþþ¼ýÃü¼ýî £­ÿ]ùl÷l÷¸øüxûÿÛZÿÿþ%ûÃüHžÆö¯îäò%ûêK!öcí0ôž££Ûù]ù!öŠóóð>òqüúþ5HîW: 5¼ý¼ý=ùDúÆöÆö!öl÷Æö©ú£”…  … ¼ýóð¯îÆöµþ—Û=âÃü™ñl÷Zÿ: ­ ÿÃüZÿù: … £ý]ùøÿß Ð ¦]ù0ô0ô]ùS”Ð ˆž=¸øl÷]ùü5î£î¸øˆ £l÷óðµþˆÛ¦ÕôŠó]ùÆö]ù£Â ß ]ùäò©úµþ%û0ô©úžDˆ%ûbþÿqüúïìý£+ WZÿÃüËûÆö!ö0ô!öl÷]ùbþñâùqül÷øSˆbþú + ­ÿl÷óðÆö”Qg”DÃüxûxûÆöÆöäò¯î{õ=… £Hê¼ýÆö>òúˆ: + ýZÿù¼ýêÛâbþDH££: ýÃü¸ø%ûúiý£žqül÷ñH£ü¦Zÿù­ÿý—ꣵþ%û0ôKè: Ð v ]ùcíŸåÆö: ß úïÍê¯îqüWê¸øŠóÕôl÷qüÿDß D]ù!öÃü©úÃüWê]ù©ú©úcíSäãøDHÛZÿbþÛÛW… —©ú©úKiý5: îv 5ù]ù]ùxûxûž£ÛÐ ÿøóðl÷5¼ý5î+ Æö¸øúµþiýËû£: H… gˆ=%ûþ: … î: WüÆöl÷ËûüD%ûüH: £Zÿ££: : bþ0ô™ñ¯î{õDÊQî5H£Zÿ¯îÍêÿ­*ÊÆö¼áêæóðcíqà«ÍØÞA: ¸øŸåSäHóð"¾¹Àƒ7Ód*ÚpÕpÕ>òø”ÙÒZ + jì46èSäqüØ øpÕ-›ZÿjPîKÊpÕxûêæ«Í¶ª¼ýÓd£IW+ }È6è©ú"¾"¾c%]txZü¯î£éìãÑ-›ÊÓdÓdc%Êø3þ-›ÿ•3JUG?6èqàÚÝ%ûùÞAqà"¾Ê/oJU¼áÚÚD*ˆ¥u†]¶ì4‹yxZ­äò*QضªBÐPP]ù¶ª¶ªä¯«Í£I£IÚ"¾:¦_:Zÿäòc%:¼ýÑu†H3¸~xZgèU2øÚ0ô"¾Oõþù'q࣋-›ô¸&"]t‹y¶ªËÊ­0ôã¸ø:aˆ¥u†£‹ÚÓd¸~¦_ƒ7góðDøBйÀƒ7"¾£‹¹Àl÷ G‹y¦_ÚÝu†Ñã G£IJU¸~jêæu†u†"¾xZJU êæ6è{õD‹yÞAŠó}Èô¸u†u†óðù'/o¸~jÐ pÕBÐ: U2ñì¾/JUä¯u†u†¯î¾/j¸~£I£­c%­¾/Ûu†u†«ÍOÃ]¶HG?ÞA¦_G?­ÿÚÝ£ˆ¥u†6èjj/oJU«Íÿ•ˆ¥Z ã£IÞA}ÈH"¾3:JUPÞA]ùu†u†âù'¾/P™ñpÕW¶ªv jøpÕú¦ä¯ÿ•£‹¶ª*]t ÆöxZ]t£IU2âˆîæÅu†H¯îxZJU'-¦_ÞAËûOÃ"¾ù]¶ä¯ÿ•Ê/ojú¶ªø¯î>òc%3óðu†«Í G¸~±<øãu†ÚDaJU¸~3H¶ªÚQ£Iƒ7¾/¾/žZ Z Wc%Ø]¶Øì4JU¾/:]tÞAÚ]¶]¶Z "¾-›ìJU¸~£I{õ3ÞAóðô¸u†ÍêJU­]¶BÐ%ûc%ƒ7 ¾/ÊpÕl÷Qìqàu†©ú:øHÑJUj±<ì4Ód=qàˆ¥u†ô¸jJU¾/gu†u†}Ⱦ/ G£I¶ªHøj:±òJUØÚÝxZJU!öù'… BÐØæÅqàÞA¦_cíu†Ñƒ7¾/é¾/ G'-¾/&"JU¦u†u†c%¸~Pøˆ¥u†ÿ•ƒ7U2/ojBÐu†ÿ•xZxZ: ÞAÓdÚ¶ªu†Ñ¾/ GBÐ%ûJU/o£æÅBÐÊ*æÅÿ•PHÿ•¸~P0ô GPŸåô¸æÅD±<Úu†u†c%jæÅ-›ì4JU±òÐ bþø£I¦_êæu†ÿ•î¾/*]ùÚÞAêæ]¶Hc%WúøÓdJU}Èu†BÐ*cíÚÊJU]tSäu†ÿ•JUjù'G?ÞA¶ª¶ªˆ¥ÙÒ¾/ ÙÒ¶ªU2v BÐô¸QP£I"¾-›™ñ±<ÊËqà¾/ GQØK S䈥Bо/ƒ7¼á"¾Ê/oJU]¶-›øJUÛÙÒ­ÿc%Ód}Èu†OÃÓdG?aÞA±<ÊÚ]¶þG?ÙÒu†Z P¸~'-ÿ•-›c%xZ0ôg¾/*ä¯Hêæ£I::èÿ•u†]¶ÞA¸~JUæÅ3U2£æÅãÊqüÙÒÙÒ”-›ËÞAG?Êc%::3¶ª"¾*gOÃ-›ô¸*ÓdÍê]¶ß £I£IýSäÚÚÝØ"¾ÚU2¾/:&"BÐu†ä¯'-Ód:êæ"¾ÿjc%-›HBÐ'-Pc%*:ˆ¥u†¶ª:¸~Pc%c%Kÿ•u†pÕ*JUxZãu†cíù'ÚÝ>òÓdJU:ÞAZ ¶ª… qà-›"¾:xZ GÐ c%ä¯u†"¾Ód‹y¹À¶ªv jøØ]ùÊ… Šócí: Ú]¶Ë©ú G]tHpÕc%ƒ7éSä6è™ñÞAÊZ æÅÿÍêÚʃ7±<:DµþÞAýu†u†Új‹yÞAèú£‹u†BУIJUxZ¾/-›-›Wƒ7¦Õôc%ãpÕpÕ™ñpÕæÅ=îêÞAJU*ÚÝóðäòãããU2ø6è]¶u†¶ªÞA¸~: GjµþæÅBÐpÕ­K£‹u†¾/¸~¾/ 6趪ŠóG?ÊŸå3c%ØBÐG?£I«Íô¸qüc%3Ø]¶>ò ø¼ýÞA¸~JUæÅu†¶ªµþÊc%Ód Gc%ä¯u†OÃ/oÓdù'JUP™ñZ u†pÕJU¯îu†"¾JU]tU2êæ¶ªæÅ­c%: *Û¶ªÑÚG?ÓdÊ0ô&"'-BÐu†ÿ•v ¦_]tÊZ ©ú GÙÒý!ö6裩úèG?ÛH]¶::Ë£¦_±<ì4ú¶ªu†ÚÞA‹y*Z Z é: GU2 GÚÿ•ÑŠóJUÓd&"bþì4趪u†u†*¸~¦_ !ö&"JUÕô"¾ô¸£‹BÐPÓd£IHu†u†ý‹y/o¾/ ù': ˆ¥-›µþ:¾/Ð u†u†: JUãÃü¸~£Iø«ÍÚDÿ•u†Ð xZúï&"±<¾/"¾u†Ñ±<¸~ Gcí5ì4Pbþ]¶¶ªZ Ëc% G¦_ß u†-›ù'¸~Ód: ¶ªcíì4qàÿ•6èù'ƒ7c%Z pÕ:cí¶ª­ÿ¦_£I G&"0ô¶ªu†ÿ•¸~xZ±<ø… ÚÝu†£‹ÓdJU £‹ÿ•*£IÆö&"ù'©ú¶ª¶ªø:pÕ]¶6èP¸~ä¯pÕ ©úÆö¸ø!öù'ÞAêæ}Èqü¹À]¶Õô¸~ G¾/ù'cíc%3ËZ Z úPJUù'U2¶ªÿ•êæ£ID>òúãc%jù'pÕËûDìÿ£cíÿ•u†Ë£I¸~¸~JU¼ýÑ£‹Úa¾/¦_ÞA]¶£‹HØ:ƒ7£I¦_ GxûpÕéÚÝ{õ"¾u†ËG?JU¯î¶ªÃü¾/U2ÞAÐ ÿ•ÑóðÞAG?Q6èBÐê—ä¯ÿ•Øa¾/£IJU G£IÚÝ"¾Sä"¾£‹¹À­JU Gʈ¥¶ªG?*"¾¯î¦_JUc%ì4ÙÒ]¶}ÈH¶ª¾/¸~JUù'«Íÿ•Ú¾/PJU]t¯îu†u† /o£IJU &"a¶ªu†u†BЭc%:¦_£I>òæÅµþ鶪£‹cí/ojÞA]¶u†ãxZxZµþÚã6èSä… ±<ËûBмáÛqàúïÚÝÚc%JUÊKJUèæÅu†ÿ•Ð jK¾/ƒ7è>òÑu†"¾3¾/¾/j¸~&"]ù}È䯹À}ÈÕô¾/xZqàu†¶ªÞA¸~ÞA±<ä¯qàÙÒúï±<óð¹À6èúïQ}ÈZ : U2JU:G?:ù'Íêu†u†ÚÝxZ‹y¾/ýúï>ò]¶Ñ5±<¾/ß ìžÞAÕôÊÿ}ÈZ ä¯'-PBÐÑÊ/o¸~ì4¯îÆöcíBÐØÍêãÃü]ùHPU2ÿ•¶ª G G Gƒ7ø'-ÿ•u†ˆ¥âJUÞAU2WBÐHøP£I]¶Z úïU2'-=gµþØæÅ¼ý'-Úu†ˆ¥¾/¸~‹y:!öÚ݈¥u†«Í '-ÞA£IBÐ0ô0ôô¸¹Àþ:*Æöì £IèæÅä¯êæ{õÕôÞAG?èô¸ô¸Qc% 0ô"¾Æö G'-Ëû:  —ß QHu†ß j¸~jc%ÚÝ«Í"¾æÅ©ú¾/èÛ£"¾óðQøqüaHJUG?{õBÐ-›¹Àù'ÞAÛ©ú}ȶªÆöì4xZ£I£IˆHˆ¥ý: GPÚBÐ"¾ÚÚBÐËþ G‹y G=Æö]ùËu†Z W£I:¾/¯îOÃQl÷DÊ­ÿêæêæ”äò-›Z ø/oU2æÅpÕ¶ªpÕø¦_JUÞA:ä¯Ñ䝿Ņ êƒ7±<'-£6è%ûæÅH¶ª: /o¸~‹yv ¶ªØ˫ͼáè*&"æÅˆ¥BÐÞAJU£Ij:Ñÿ•Bо/ÞAJU™ñ]¶'-—Ëû¯îô¸¶ªÆöÞA G'-*ÍêدîSäËÚ­JU£IP>ò¶ªˆ¥SäÚÝô¸ÿJUjPâÍê£ãØÆö™ñìqàˆ¥OÃ'-¸~±<¾/c%ÃüBÐ"¾ã5©úì¹ÀÊ Gj¾/£‹u†Sä£IG?ÞA/o±<Æöu†Hcíc%: ¾/äòÙÒ¶ªZ Ð JUJUô¸¶ª*U2ê£I&"ØBЈ¥Ëô¸u†éj¸~ÞA:ß c%cíHÿ•¼ý'-BÐ'-¾/xZq࣋Bо/èù'ÞA:>òÿ•"¾cí3Ø G?¾/gSä­ÛG?ÿÿ•S¦_¦ô¸Êý ¯îc%xZ©úu†HS¸~‹y¸~*pÕu†ÿ•bþ­Ð cíc%¾/]ùÿ•™ñc%ÊBÐÚÝËûDPc%]¶êæÿQ­ÿS䶪ÚÝ*JUG?ÙÒô¸©úbþ: óð£Iù'"¾ÿ{õ¶ªu†"¾jj¦_c%W«Íô¸6èqü¶ª"¾ÚÝxZj]ùÿ•cíø3v ì3'-BÐÿ•pÕ&"¦_G?aÿ•u†-›ƒ7¸~¸~ƒ7êæ¶ªæÅÍê: óð£ù'*ÊãÙÒØpÕØpÕc%ÞA/o G£IaæÅæÅ"¾ÚÝÐ óðä¯6è¾/U2ù' Dì4ƒ7… Z ¶ª™ñ*U2þ]ùBÐ'-D£é-›ô¸‹yxZc%؈¥Æö¾/: ÑæÅ'-jÞAU2]ù¶ªpÕä¯BÐʾ/JUÞAG?Úu†ÿ•BÐì4¦_KHOÃ>òì4ÞAxZ¾/ù'&"ÿ•H-›cí:Wc%c%Ûþÿ•u†ËJU¸~jøÿ•ÿ•ý'-: Ú¸ø'-£IîÚ¶ªBÐgêæÚÝøPÞAø6èBÐQ¯î¹Àÿ•ô¸Â /oJUù'a&"ÿZÿ]ùpÕ]¶BÐÚÞAJU/o*ã]¶u†¶ª”Ód¸~]tÊZ ô¸0ôQý6èBÐù'D"¾ˆ¥¾/±òØêæÃüÐ £IÞA}ÈøHß éãSäpÕK Gø]¶Z úï£Ijj{õOÃl÷DD"¾äòóðƒ7Ûóð ÙÒ{õ¦JUxZ¾/©ú}ÈùZÿˆ¥u†ú£I¸~ÞAø%ûô¸ÑæÅ&"JUÞA¾/ÙÒˆ¥«Íýac%ƒ7æÅŸå6èBÐóðʾ/ÞAÆöô¸óðcícíÐ : WøK¶ªãã¹ÀÞA]tc%ãOÃ«Íø ý¶ª«Í G±<: l÷ˆ¥¹À6è­JU¼ýOéúc% G¾/¶ªêæiýß 0ô]¶Z ÚÝQƒ7±<£IU2ø+ ]ùä¯pÕU2xZ¦_ÊHu†ä¯ÞA¸~ÞA::ZÿŸå"¾BиøZÿÚæÅiý G±<©úô¸Ú¯î:JUÞAG?ÙÒu†]¶ñG?ù'DWBÐ+ Õôÿ•Ø£I¾/'-ƒ7Íêqà0ôêBЈ¥¼áù'JU£‹ÿ•¸~PÚÆöù'ÊÚѶª]¶ù'JUJUÊ}ÈOÃÙÒì4G?¦_P¶ªu†¶ª£j GÞA{õêæÚÝô¸-›¼áÞA3aøcí«ÍBо/'-æÅ"¾DPÓd6èu†-›­¸~JUU2]ù-›¹Àì'-%û6èãc%&"pÕã"¾¾/ÞA G0ôô¸3ƒ7 ]¶Ø0ôÞAù'D!öéËS6è6蔩ú£IÞAÓdìBÐZÿêæqàcíè±<ì4-›u†æÅ±<¸~ÓdjÕôÿ•ô¸}È'-ø˹ÀÊÊìÿ•"¾'-ÓdJUa6èµþc%]ùÑu†ãÓd¸~£I]ùu†u†BÐxZj£I¯îô¸Úÿc%5âc%K㈥ô¸*ß ô¸ÚG?JUxZ:£SäBÐæÅÚÝ—6èÙÒ«Í!ö GPQ-›pÕ:£I±<3bþ6è£OÃu†"¾QxZJU£Igÿ•u†êæP¸~ G¶ªä¯øÞA¾/qà6èþ¾/&"0ô!öéZ ÿ•óð¦_ÓdjU2«Íÿ•ÿ•Ð ÞAjÞAqüѹÀ"¾µþù'JUxZãZ pÕù¾/î¼áîÆöúï '-¾/ˆ¥OÃ6èPJU¼ýô¸-›W: GiýãcíWc%øcíu†]¶BÐG?ÞAJUÞA ù'ã¹À]¶]¶óðU2:ÚÝBÐ}Èô¸:j!öù'l÷øa"¾ÑæÅa¦_/o«Íu†Ñ!öJU¸~¦_£IæÅu†ÑDxZ G GDô¸]¶"¾"¾Ú&" U2:JU0ôqàiýW+ qàÿ•6èa£IèæÅ¶ªHxZÓdPg«Í]¶ãøc%pÕÿ•pÕ¾/¸~U2"¾Ú¶ª&"ÞAP­è¶ª¹ÀìcíìKP±<+ ùÚÝÚˆ¥«Í‹y¸~G?Ÿå£‹¶ªÚÝù­G?ÞAøZ u†"¾ÞA¸~JU¦_&"HH]¶*¦_&"ÚÝ"¾c%:ýô¸-›¹ÀÊj GµþæÅpÕBÐøîæÅÆö&"jÞAøZ u†¼áƒ7£IcíæÅ3ÞA£I>òSäéÿ¼ý”cíBÐãÿ•DÞAj&"3JUQ«Í¶ªæÅQØ]¶: ¦_‹yu†u†ÚÝj¸~Ód£I]ù¹Àÿ•]¶Úè&"aJUZ u†æÅ¦_¸~ÓdŸåÿ•ÚÝ&"U2ÿQqà¼áÐ ŠóÍêÙÒHô¸ÞA¸~/o&" ]ùOÃu†ä¯H±<¾/ä¯6èÊ£I{õÚÝ%ûc%ø£ú]ùÍêÙÒSäWS"¾£I¾/pÕ¶ªQ*ÓdD¶ªBÐ5ì4ß ¹À"¾Úc%JUP G¹Àu†ä¯ø¸~jc%£cíÚÑZ ãƒ7U2cí0ôÃüËûl÷: U2­دîcí cíêæêæ:ÞAg: ù¶ªÑÙÒ'-‹y]tgZ æÅ]¶c%ƒ7:G?+ ŸåDäò¶ª¶ªŸå GJUì4Ãü©úøQ¼ý¯î!ö"¾þÕôgóðÐ >ò ¾/Æöäòã *¼ý]¶ô¸ £IJUc%ã-›H¶ª&"j¸~PW¶ªæÅÚ: ¼á0ôgHDóð¶ªËä¯ÛJU/oÓd¦ØËæÅ"¾Õôc% ˆ¥]¶]¶­¦_¦_]t£I±<]¶u†}Èúï:éóð£Ð ì4bþäò]¶¶ª6è£IjÞAKOÃ"¾ c%ÚÝÑÚÝU2/o:Ð Ë"¾]ù¯î>ò*ÞA:£0ô«Íˆ¥«Í­ÿJUÓdØÑ¶ª6èÓd¦_¦_ G Gˆ¥£‹£‹}ÈêæØ&"xZ¸~jc%Ëu†u†5xZ¸~JUóðu†ä¯ýƒ7!öù'«ÍZ ¶ªÊ G G «Í¶ªW+ ÞAù'ñؼý'-… pÕu†£‹5xZJUù' l÷«Íÿ•OÃØýU2£IPù'㶪ÿ•]¶â:¦_¾/鈥%ûƒ7:WÚ}ÈDß Kÿ•OÃ]ùj GÊ6èêææÅ"¾0ôJU‹yÞAÿ•u†Ø£I‹yÞA*:qàä¯"¾ÙÒ}ÈÙÒpÕaÐ *+ {õÚÝøW&"žô¸cíè:ˆBÐø™ñ6è¹À©úʱòÚݱ<¦_ Gä¯OÃZ "¾ÚÝG?ø G]¶ÚJUÓd£Ic%xûÚæÅ"¾£‹cí£IÚBÐ:£I±ò‹yÓdÞAÕô]¶HZ =ƒ7¸~£I¶ªô¸¼á5j¾/©ú£‹Íê6èv ì4ô¸0ôËÞAj:±<6èêæ6èÚqà}ÈD5c%pÕÿ•ÚÝ'-Ód¸~£IQŠópÕØSäHÙÒu†qàøÓd‹yc%ÚpÕÐ Säìc%Êù'ü]ùêæBÐʵþiý*Ûúä¯BÐãÕôJUj Gc%Ñ䝿Å3£I gÿ•ÿ•6è­ÿxZ/oD£"¾"¾qà: ÞA"¾ÿ•øc%¸~G?ìÿ•}Èóðß ì4v ÚÝpÕ¶ªúa¾/ÞAc%H ¶ªæÅØqàPW}Èäòc%c%£IqàúïcíBÐã”D¾/"¾ËÚæÅxZƒ7P G”ØãqüÚݼᶪéì4P¾/ô¸Z 0ô:jJUa¶ª¼áÿ•JU'-'-=ß øBжªZ ­PÕôv G G:ú£‹ËcíÕôƒ7:ÚOÃH]ù¾/P]t±<ÊØæÅ¶ª>ò Gc%cíHÿ•¾/ÓdÃü¾/¾/ÆöÕôØ«Íÿ•ãÚÝSä¾/ù'ÞAP £‹ˆ¥ý: ÓdÊÚŠóøé"¾"¾BÐè¾/c%Õô]¶ˆ¥&"*]t*Šóì¯îÍêæÅ{õ£ ß ¶ª]ùU2… SêæŸåD£Iƒ7¾/>ò}Èu†"¾±<¸~ì4&": Z u†¦¼ý GDÿ•ìQ:ÓdU2 ÙÒÿ•ì—ÞA:-›¶ª:Ódƒ7ZÿqàèØ}ÈW©úaÐ ô¸'-"¾ã&"6è£I:&"3ƒ7£BÐ"¾ÿ•ÚÝ=ù' G*pÕÿ•óðSäøÓdóðpÕÞA ¾/6èÚÝqàÍêóð]¶u†ä¯ß ¸~¸~¸~G?6裋BÐ]¶DPDÚˆ¥ä¯©úæÅ:'-U2JUÊþÍêU2 ¼ýä¯u†ÙÒéÞA¸~G?Qˆ¥BЯî*PæÅZ þ¼á¾/'-µþKþŠóBÐc%"¾qàæÅPJUJUc%£¹À£‹ô¸BÐWU2ì4&"üÐ }ÈæÅZÿjG?ÓdÆöOÃËcí¼á}ÈóðQQ¦_±<©ú-›}ÈaP¸~ÞAÿ•u†ËóðÓd‹yè¸øÂ ]ù6èž}ȶªŸå¶ª&"G?¾/JUc% «Íÿ•6ècí£IG?HZ ¶ªBÐøU2ì4c%£6èÚÿè Gƒ7¶ªä¯-›cíjU2ù'Ñ"¾6èxZ¸~±<ÚÝu†"¾]ùêæc%&"'-ÞA¾/l÷u†£‹cí6èJUP:c%ÞAÐ ÚBÐ}ÈæÅãÊ6èOÃu†pÕÞAÓd¸~ÞA0ôé0ôŠó: è6èóð¶ª"¾¸øø±<úÚBУJU¸~]taØu†BÐK¾/jŸåÙÒ%ûc%Šó¹Àúì¾/qüBÐ £JU:îô¸ÿ•-›ÞA Gc%£‹OÃÊÞA¸~P ËÚZ Z ¼áÚU2¸øß G?Ÿå™ñ¦qàù'P&"3c%Øÿ•H¹Àéƒ7ÞAD'- '-䯟åD]¶ÞApÕDß DÊv ¾/6ècíÚß l÷Ѷª¼ý¾/¸~JUŸå¶ª¼ýqà+ ì4: 6è"¾: Êøxûããl÷gÊQG?ƒ7¼ýô¸-›Ë'-£IÓd Gl÷Z -›cíg G:¹À©ú””±<øø: 6ècíOÃ{õ˶ª£ G]tj3iýqà]¶BÐSäŸåÆöýÚ'-ü¼áÍêÚÞA±òÚP¸~¸~P… êæu†æÅäòÚÊ>òµþ+ «Íqàañý±<ù'&"ÙÒ6èùÞAîqà]¶HùÚÊ6è GÊ:PéÍêÚ*6èÚêæ&" Gÿ•ÿ•ˆ&"¦_jJUù'âpÕ"¾qàã䯶ªBÐæÅÞA* j:óðBÐÚa¾/c%ØOÃÑâÆö5xZ¾/Æö"¾ÿ•óðJUj£I¶ª"¾u†ÚÝPƒ7ÞA>òv G?BÐu†"¾]¶ù'c%ÊPW6è QÆöpÕZ 6èÊ!ö£IBÐl÷£Iì43¹ÀBеþ¹ÀOÊó™ñJUJUèÞAô¸BÐ]¶ËûÞAU2'-cíÐ ¶ª*¸ø%ûÞAøãBÐQÞA¸~Æö]¶u†]¶ÞAƒ7jj¾/6èÆöcípÕÐ ãBÐÙÒˆ¥"¾ä¯ù'JU‹yjc%ÙÒ-›&"BÐcíÊ«Íc%¸ø &"6èH}ȼý£jPø&"Ú… 6èu†ø¾/ 3æÅÕôqà­ÿãÍê0ôPƒ7óðÐ 0ôùÊ&"Ëûäò-›u†BÐÚÞA¦_'-£I£Iã¯îµþ¼ýOÃu†u†cí­£I¸~ƒ7qàu†ÚJU¸~JU䯈¥cí¹À!öß H­ÿqàêæ øJU”ýŸåÚÝ”žc%”: úïãÐ U2Ð ™ñÿ•BÐ*ÙÒ:¸~]t±<«ÍZ ô¸ØÚ¸øøÞA&"—£l÷—ÚÝóðc%%ûËÚOÃ7/ov aæÅŸåÊÚ&"ÕôPqàOÃÚÚ£IŸåù'ø¯î¯îSä:JUãu†ÿ•ÞAØÊJUJU£I: BжªÊìZ ä¯ÿ•+ G?£QÍê&"Úô¸!ö G¾/+ ©úô¸: ù'ÙÒU2ß ä¯H-›ÞA¾/ £I&"ø±<£‹ÛJUaU2ýqàKSäÿ•u†Úݾ/*£IÓdì4Íêéø*Úu†]¶]¶ÓdP: … :: øúï*Kÿ•"¾ÙÒc%óðQU2ËÚqà”¸~¾/v W]¶DʹÀ¼ýÚÚÝÙÒ0ô'-ÓdÞA«Í¶ª-›Ú:ø¸~/o&"¶ª"¾]ù=¶ª}È}Ⱦ/ÚÕô]tG?xZì4!öä¯ÿ•µþ-›Ê*ÞA5Íê&"c%Zÿ¶ªBÐ*Dé"¾cíJU¯îOÃ]ùDŠó*G? GSäu†ÙÒ¹Àÿ*a0ô0ôù'JUPpÕÿ•u†+ ¾/6èxZU2… *üÙÒ­Ê«ÍBÐ-›ØÞAß *¸~ô¸u†Hù'j: QæÅøBЭÿ3Zÿcí"¾ØBÐaÚ* ø GÙÒ0ô GÊø¼ýv ù'ä¯u†u†¯î!öƒ7c%ÞAxZ G:&"ù"¾u†>òˆ¥ÞA:úï]¶—Æö¾/ƒ7ØBÐô¸'-xZ'-cíÙÒ-›ÚÝ3}ÈJU0ô±<]ùæÅãPgD ô¸¶ªÚø:j¯î¹ÀHæÅj… xZjPƒ7Úˆ¥ä¯¸ø-›¶ª¶ªÊù'±<'-U2¸ø+ ]¶Õô:æÅOÃô¸U2Ód¾/¸øËû: éÚOÃô¸ÞA{õ è:]¶ì GÚƒ7c%:ÞApÕHu†cíJUóðl÷¦_ƒ7: GÚÝu†¶ªƒ7JUU2îËêææÅ”**ã-›Ñ±òBЯîPÞAÞA: ƒ7c%¹À¶ª]¶cíÞAQDiýÆöú0ôSäã­qàKèÚÝ Gù':c%qඪ"¾™ñ&"&"æÅ¶ª-›£ÞAÞAG?ù' ÚÝñÐ 6èQÚݹÀ]¶cí­ÿ3Êß :  ±<*0ô6èô¸Z !ö>ò£I¾/&"&"SäÚÙÒv DÆöÚ0ô ø*Q]ù üžBÐBÐä¯«Í GÞA*:Ð ¯î­ú©úèÆöBÐØæÅQc%î]ùBÐ5G?¾/ÞAøSäSäOùÀ¾/ƒ7&"Ð þØË"¾Säƒ7:úBÐä¯'- G¾/ì4cíñÛ… ¶ªu†Ñ©úÞAxZPc%­ ÆöæÅ"¾¾/Säqàô¸ãŸå—­U2c%ù'v HÚZ æÅ: ÙÒËìãÊù'U2… >òؼý&"3ˆSäqàêæÆö* GžZ u†¯îÞAJUÓdc%Zÿ bþcíìqàSäÙÒô¸pÕÐ ì4ÞAa]ùã­U2۫ͶªBÐD±<¾/6èãÚSäÊ*è%ûäòóðÐ 5¸øø­ÊHìÐ Êqà䯹À%û'-ì4]ùîQc%ÊêæOÃæÅóðµþv KîâqüÛèQ!öæÅÚÝþ'-:ìOÃô¸cíc%c%ýêæÙÒúï+ &"c% ]ù¸øÕô©úËûZÿãÚÝÚÝ6è{õʾ/c%: âñ”£cíæÅ¹Àqà]ù: øWß Ê­Häòé6èÚÝ!öÐ : ¼áêæýø'-­0ôÍêìÐ ø: ŸåÙÒqà Dè!öcíü£ø*3ú6è6èŠó5Ð ñóð¼ácí5Ê'-*Qø¯îùÿZÿÛ>ò6èéú3Ê… ©úcíúïZÿî0ô]ùüù: &"Ð ùéêæqàóðóðúï¼ýÆö£ý… ß H5]ù5+ qüÕô6èéŸåóðDÊQ Æöêæ6è©ú£ Êýì6ècí £ú¯î¯îËû=]ù¸øÆöW­ÿž èiý0ôóð!ö¼ýêÐ Q”ÿóðËû¼ý £{õøê¦¼ý%û£W+ Ûýß ñ0ôé>òHèHl÷ÕôZÿÐ =úïÆö øóðcí]ù: v £… î%û{õqüHQÛ¼ý6èÚÍêiý {õ¯î]ùgèÊñãã6èÆö0ô]ù]ù¼ý+ è: ”úúïúïúH—ø6èŠóÃü¸ø¼ýÐ : Ð ¸øcící¸ø]ùÕôøˆî£Êß l÷{õ]ùHKóðã¯îWQ: äò¼á{õÿH!ö¯îbþýaa¯îÍêÍê]ùWø£!öü—ß ÊÊ ücí¯îóð5êýÿaÊÐ ­ÿäòŸåÃüß … !öŠóÆöµþþý ”0ôl÷Õôø­ÿóðúïZÿ… ”Êv ÆöcíÆö: óðêæ0ôñl÷ÆöZÿ… … µþ%ûøHv qüú]ù]ùúÿHµþËûóð¯îWÐ ¦cíSä]ùÐ ”W5þ>òúïäòø”: Dµþ+ 3Ð ý”¼ýcíÍêéóðüùú]ùxûK øÊHø¯îÆöK%û]ùqü££v  µþcí™ñù… ž]ù£ÿ… ˆ]ù%ûøqü=¦ÿÐ  Ð … =™ñSäãÍêþß v iý: £ 3agÆöêæqàì¦5]ùìÆöù¼ý”aøDiýþül÷>òqà6è¼ýÿ%ûD: êbþ¸ø]ù—DËûêæúïÆöH33è… ]ùŸåSä6è¼ýqü!ö©úêÿ”Qú!ö©úù: ú¯î¦£W”Ð ­ÿŠócíäòþW¼ýøÐ Ð  : Hv Dì6èÃüè—Æö>òÕôZÿ: aaÐ ­ÿ0ô{õüW=ý: î+ %û6è6èø+ 3þþñýZÿÿ¼ýýxû­ÿþcí{õHÊSWK!öìé{õDHâW=5úqül÷SäŸåäòDêø%û¼ý©ú=HcíÚÚìß v H£Ð ZÿbþxûZÿ£©ú%ûý¼ýxû¼ýDß : ]ùqüÛˆÆöcí™ñÆöKgWÐ : KˆÐ Ð ]ùcícící]ù¼ýqüÐ … þbþ¼ýýŠó{õ¼ýùâêW  H­ÿýÿñH­ÿŠóìúžñ: ß W]ù{õÃüS+ ”iýxûZÿÐ —cí¼áÚÝóðŠó0ôH … … £¸ø6èŸåãcíbþ+ =0ô!öDúÆöÆöÆöl÷Šó¯îxûñ£ùÿùSiýD£Wúø¼ý¼ýÿñˆîDiýäò!öÆö>òìÍê­ÿøc%&"­”¯î¼ácíñ£Ûl÷óð0ôD”… : HD©úiýHÊv S¯î¯îúï]ùÐ … ž%û¦îß £ˆWWÛ: 5qül÷Šóúïl÷¦… Wl÷£v ß ß Ð W©ú0ô>ò6ècíóðÆöÐ øÐ iýÆö¯î>òÆöˆ+ ”5{õ0ô0ôl÷¸øcíêæcíqüÐ : äò6èÆöøDñqücíéóðÃü££­ÿ£: ß {õŸåSä0ôÃüW£ˆù£: ”úŠócícíqüß QâSÆöÆöÆöµþ”îHÛþËûµþËû¼ý=”W]ùúÐ   + ©úúïŠól÷­ÿ”W: âÆöÆö¼ý5ß 5ýHî: v ýiý¯îŸåúï%ûñËûÛ: … £ñ¼ýúï0ôùˆ: £xûìóð¼ýüµþ”Ê”qü5… ñqüúïì6èécí]ù + þ©úÆö!ö!öŠó¼ý£=¼ýl÷]ùl÷0ôÃü… ”ˆ=­ÿ¼ý¦©ú]ù©úÆö0ô]ù¦:  РýÛÃü]ùl÷qüÃü¼ý5”ñ©ú0ô{õüDHß Ð ””Wqül÷©ú©ú— Q: ý¸øóðÆöú: £ž­ÿÃü¼ýˆW: ”W£WùÃü¼ý¼ý©úøÆö]ù¼ýS¼ý©ú]ùùW==â—Q… ñÆö¯î6ècí>òúêÐ : bþÃü¸øø{õÆö©úqü: ýS]ùÆöúüiýÃü!ö0ôÆöÆö­ÿ””£Ëû¯îóð]ùê H­ÿ0ô>òÆöxûDÛW”Hî£ñÆöŠóäò¯î]ùñ Qv ùøÆö¸øþ©úÿÛ£: : Û¦{õ¯îóðµþ+ 3ÊÊ£µþ0ô¯î0ô%ûâ”D­ÿþž££ê: Ð ß ­ÿ{õúï™ñÆö{õ¼ýž5: Dµþÿ⣣WµþÆöäòcíÕôËû5W”ê¸ø0ô¸øDîHîêËû]ùóðcícící¸ø5ñqüDW£=¼ýiýËûÿ=¦0ôìúïÆöqüý: HKKWß ¦ù%û0ô™ñcícíäò¦   ”: DD¦%û©úÃüZÿHÃüÃüËû¼ýýH£”WÃüÃü­ÿùÛîž¼ý­ÿ£ý… : ”£Dµþ%û{õËûùËû¼ý%û!ö]ùWgÐ ß žl÷¯îŠó©úÃüžþú¼ýDH: Zÿ©ú¦î5=Æöcící]ùZÿÛ5¼ý¦ü]ùËûÆö©úÿù¼ýÃü¼ýiýñ©úäò¯îÕôîýˆ+ WËûSÃüiýý]ùäòì¯î Ê£ZÿËûËûúÆöúþÿý!öcíÃüHv : bþ­ÿˆ£  ¦øÕô¸ø¼ý©úÆö©úýÐ … g… HH£]ùŠó]ù= … Zÿ]ù©úxûÃüqü=ß ”Ð Â … W5%ûl÷¯îé¯î{õµþˆîQ+ £êÃüËû!öÃüÛùWW¦¼ý©úäò¯îøDv … ˆ¼ýÃü¸øcíì!öqüK¦KWiýqü]ù¼ý­ÿ¦ñ©úäòúïóð]ùµþñH: £¼ýóð!ö¦”: ýüÆö™ñ]ùþž£v Ð 5qü¸ø0ôüÿ—W5£Ûiý¼ý©ú]ù©ú£g v µþ¯îìóð%ûâ3ÊgýZÿ¼ýSÃüÆöŠóóðäòl÷S aøè… ¦øøËûùÛâKùbþxûl÷>òÆöý”WWÛW—qü=: … HùúóðÍêÍê™ñ%ûñ£ÛˆHß î5=â!öÍêŸåã¯îËû5ýDDWêùS¸øZÿ=ù¼ýÆöóðcí™ñäòqü”… … : K¸ø¯îÆöÛWùùêý¼ý¼ýúñD¦­ÿ%û¦5£­ÿÃüiýÃübþ5HS]ùúñ Ð ýbþÿxûl÷êý: â]ùxûµþ£v Ð Ð £Wý=ýÆöäòúï]ùbþ”Ð Ð  Kxû—¼ýÿDù¦êñHbþ]ùäò™ñÆöýÿîgèQ0ô¯î¸øùÆöóðl÷þ꣈¦ú0ô™ñl÷©ú©úþ­ÿ5ZÿZÿÿúÆö0ô{õbþÿ­ÿÛââ¼ýKùKW£ù{õ>òŠóúï{õù¼ý=+  + Û%û!öÆöîÐ : =Dxûiý©úúËû¼ý]ù¸ø¸øÛÐ QQQÛÿÃü£ÛËû%ûl÷Æöiýýv QÐ Ð … ýS©úÕôäò¯î{õýùiýÃüÛÐ Ð ß ñ—ˆñ%ûÕôúïÆö¸ø©ú­ÿ¼ýQ 5ÿ¼ýËû%û­ÿø0ôl÷ü£bþú!öl÷Õô{õ]ùþùê%û{õÕô0ôÕôýˆ”Ð =bþÆö0ôúùW: + £bþþ©úxûø¸øúù¦K££%û%ûZÿúÆö%û”: v ”£xûÆöÆö¼ý—ýµþbþÿÿD: ”ýß è Wêxû>ò]ùùÿ£Q+ Kþ¸ø!öxû]ùl÷{õÆöü¦WH”+ g: Kÿ¦qü0ôÆö%ûZÿêDúÆöqüÛˆD¼ý¸øóðäò]ù¦£Ûˆ: ”ˆ¼ýú¸ø©ú]ù0ô0ô%ûùü!öÆö]ùøúý5D5: îžÿ¸ø!öóðcíäòqü£=ñ: : Ð … ýD¼ýŠóóðóð!öøËû¼ýñ+  è £ñÛ­ÿ©úÃüÿSù¼ý—5WžWî: ”: HZÿl÷0ôÕô]ùiýñß ègHDDÆöÆöl÷äò!ö%û¦êþiý: v … îbþ™ñóðÆöúËû!öÕô0ôiýùWß v £Kúóðéóð]ùD—¼ýÃüýl÷bþþ¦Dê=ÃüÃü¼ýµþóðêæéøñ:  Р£xû%ûùý%ûÆö]ùÃü­ÿ—¦êÛ¦ýêˆý0ôcíÍêcíxûÛ: Q 3: W¦ýÕôäòÕôÆöþµþD: îv ý5”£µþ]ùäòóð0ôl÷xûv v v g: Dbþxû]ù¸ø0ô0ôl÷]ùËû­ÿ””£ß ß Â øÆöì6èÍê¯îøÐ èHùú©úúµþÃü]ù{õ]ù¸ø>òúïìéŠóý+ 3ÊQWü>ò¯îúïøùÿqü©ú!öbþâ”: îâZÿ©ú]ùl÷©úZÿZÿýþ=£¦ÿ—” Qß qü0ôcíóðúïcíø=v èèv ù]ùxûøZÿW£: + Û¼ý¸øú¦ÿWÐ Ð =¸ø0ôl÷D£=ùbþýùSÃüùËûËû¼ýñâÿSW5¦ú™ñcí¯î]ùžQ=úŠó>ò0ôüWW¦xû©úüËû©úqü¼ý%ûø]ùÿKKZÿÃüxûäò¯îcí{õHÐ : ýD©ú]ùl÷!öqü¼ýqüZÿîÐ … : µþ©ú%û]ù©úËû¦ž©úúK=ÛýDK¦ZÿÿñWZÿËû]ù©úÃü—”g : —þ]ù]ùê£Dbþ]ù]ùž  : ýZÿK: … ”WKS¸øÆöŠó0ô¸øDÛ=Wv èWü¼ý¦DâËû>ò¯î™ñóð!öSî£5žùâ£KÿÃücíãÍêøµþW… Ð … W¼ýü£WÃüäòìcí>ò¸øxûýþ]ùø—: gîžqü]ùiýñß ýqüÆöŠóŠó]ùê£ýäòl÷bþˆ: £­ÿbþµþ5%û!ö¼ý£H: Ð : ”£%ûäòŠó¸øZÿ£Ð Ð îêS¦žžH: HâúŠóŠóÆöbþW£î££WH: : ýZÿÆö0ô]ùµþ——l÷{õ0ô]ù£v Ð + : ý=”îâ¸øóð6èêæcíÆö]ùqü: … +  î]ùcíÍê6è¯î]ùbþÃü¼ýžDDÛîÛùl÷l÷]ù]ùÃü]ùóð{õ]ùùý£WHqü©ú%û¼ý¦žýSl÷0ô{õøËûÿÛ… WüøDiý¸øÕô¸øüýg3 £Û55iý]ù¸øÆö!öxû¦Dý  : îHîâbþ©úbþ¦ËûËû%û]ùúµþ: Ð  ”¼ýÆöcíóð]ùÿZÿZÿ%ûþþ]ùú­ÿ: …  : ¦]ùÿÃü¸ø©ú%û]ù©ú%ûÃüùDbþÃüqü]ùø]ùËû©ú­ÿýµþøÆö¸øüýž¦qü¸ø¸øxûiýÛÐ Ûqü%û!öÕôøHÛùWWÛSqübþù¼ý——ùýxû¦ÿÿÿÃüxûýžýW: ýù©ú©úÛ£îîv îùZÿ©ú¼ýù55”W£W¼ý0ôúïÆöµþ: £—î”: + â¸øÕôÆö¸øxûW££¦©ú!öúïóðÕôiýÛ ”êüÆö{õóðóð!ö]ù]ùýýâZÿÿùDùÿÿ©úÕôcí¯î{õÆö%ûKý+ ß  ”¼ýäòcícícící{õÿHv Ð %û¸ø©ú¼ýñËûËû¼ý%ûÃü55ÛDþù£î5ý=DÃü]ùµþZÿ©úl÷Æöß ß £WK£+ : Ãüqül÷ÆöøËûKDH…   âl÷cící0ô]ùÃüµþD55Û¼ýKWÐ ß ÿÆö0ôÆöÆö{õ0ô{õqüKùú©ú££ˆž%ûäòóðŠól÷qüÛW£DWýýýóðéããcíøHQ : W¼ýÃü©ú©ú©úËû]ùø!öäò!ö]ù©úZÿ: Ð ÛS]ùl÷qü=ÿÃü¼ýˆÐ  : ýµþüqüŠóÕôžQ+ : Ãü™ñÆö©úK£”g+ QÐ D¸ø¸ø0ô!öl÷Æö]ùK… Q … WZÿ££bþ]ùl÷Æö­ÿÿ¼ýl÷cíäòbþ”Ð èÊ WêKl÷ììŠóµþZÿ5¦=ÿúøÕô]ùž=£W=µþø0ôÆö0ôl÷¸ø]ù£ZÿD=ËûÆö{õúïÍêcíóðxû+ 3gl÷øø£”H£žËû]ùÕô!ö]ùÿâ”… ß Zÿ0ôúïóðÆöÃüîQQH¦ùÃüÆö]ùZÿ¦=µþ¸øÃüˆî­ÿ¼ý¼ý­ÿZÿKÊèß £µþl÷0ôúïÕô]ù¼ýS== HââÿüµþÆö{õóðcíŠóü=QQ: Ëûù£Dxû0ôcícíÕôK … 5£”£¼ýÕôäò{õÕôÆöÆöø¦5ñ—ËûËûž5H5­ÿÆö¯îcí!ö]ùl÷ü­ÿ5KêDDDâZÿ—©ú¸ø!öý=ñ%ûl÷qü¼ýÃüˆÐ  v HWZÿ©úÆöÆöÆö!öü: + HHWHW£ß ”—KDqüËû]ù{õ{õ]ù”   РÛ=¼ýÃü]ù¯î¸øâ+ : : ”Û£W£ê­ÿ¼ýËû]ù¸øúïìäò%û—Wß Ð  £S¸øl÷]ùäò{õ¸ø]ùÃüËûÃüDWbþµþˆ—©ú!ö™ñŠó!ö¼ý”… î5©úúïcí!ö—gîWl÷{õúý¦úÕôÕôÆöÆö%ûK: Q5£5Diýxû]ù>òÆö{õ¸øü©úSH£H 3Ð DýÆöóðÍêóðÆöÃü”3 : ˆ­ÿËûú©ú0ô!öl÷]ùÛv gÐ £Ð  îâZÿxû]ùøóð>òÆö%û¼ýËûâW£v âùDµþÃüÆö¯îóðŠó!ö¸ø¸øê… … Ð : KZÿ—iý™ñcí¯îŠó{õqüDžSþÃü¼ýSý¼ý¸øÕô¸øÃüDDµþüÆö©ú¼ýùâW£ñiý©ú©úøŠó0ô0ô]ù£ÊÐ ¦¼ýøŠóóðì>ò©úñ+  Q… … £ž%ûxûiý%û{õì6èóðZÿa­ Wž]ù0ôÍêÍê0ôøqü… Ê: Ûµþ%û¼ýËû]ùËûÆöóð{õl÷xû]ù©ú­ÿ£+  : µþ©úZÿxû¯îécíúïäò]ùß v   Р”žøúïÍêãqà¯îqü—bþqüâ v ”—þ{õÍêãã>òÛß : Ð £¼ý©úÃü­ÿ5Û=W—ül÷0ô{õ%ûÿDÛ+  v ”—µþÿ­ÿú¯îììŠóqüZÿâ: gD­î%ûqü©ú>ò6èŸåcíŠó¸øþîøQ: ¼ýÆöÕôcíìúïµþß v Ð v £WWžÿÃüWZÿµþú0ôúï>ò{õþD5W: Ð v Ð ”]ùcící0ôiý%û>ò>òŠó0ô%ûˆ  WùÃü©úúïì¯îŠóÆö¸ø¼ý Ê­£]ùúïéŸåãêæúïbþv 3Q: =âbþËûüqü]ùÆö0ô¸øýž5£ß g Ð ˆ%ûl÷Šó{õl÷Ëûiýý%ûËûÃü… 33è ”üøúbþ=bþ]ùŠó{õqüþê3WúóðÍê6è¯î¼ý: £ž£… 3QêÆö0ô0ô!ö>òóð™ñÆö¼ýâ: £žÿþ£Ð … Wù!öcíÍê¯îÆöýú!ö!ö]ùÿñH”: W=ž%ûìSäãŸå0ôâQa­ÊQ: ÿÆö0ô6èÚÝqàìú5ß ÊÊQ ¯îŸåÍêÆöÃübþZÿ¦55HÐ Â Â : Ûbþ0ô¯îé6ècí]ù5+ è3: =5v v —=bþµþ——ý©ú¸øäòÕô]ù©úîQÊÊ3g%ûóðéÍêcí0ô¼ý”:  QÐ —©úÆö0ôcí¯î!ö¸ø©úbþDîg… £: £K]ùäòäò!öÆöÆöÃüˆHˆKÿýqül÷{õ]ùúøqü¼ýÿÿüÆö™ñ{õ%ûH3g£ùù%û>òcí6èì>òþHÐ ”… : ”Hýý¦Æöìì¯îl÷… v îWî: : : ˆúúïcíl÷äò0ô]ù”g+ Ð Qv : ¦Ãü¦: g=µþ¸øÆö0ô¸ø©úËûbþîÐ : ß Q W©úÍêŸåécíÕôbþ£: v  : HÛWKqül÷ú]ù]ùl÷¸øKK=îÛ=qül÷øþùbþl÷¸ø¸øø]ù­ÿ5: : µþÆöcíóðÆö]ùýý%ûiýùÿ]ùäòŠóþDêWH+  ß êËûøcí6èêæcí¸ø£v  QQgÐ Hbþ©ú¯îcí]ùZÿ£K¼ýˆH:  : Wž­ÿÃüþ]ù©ú¼ýZÿÃül÷ÆöµþÐ Â v ß ýß ÛK5êZÿiýÿê=þøl÷µþDW: QH%û{õ!ö]ù%ûl÷!öüHv … 3Ð ¸øéé>ò0ôl÷©úiý¼ýžî¦Ãü¼ýZÿžiýÆö{õ0ô¸øSþËûxûÿDî: HWÿýø0ôcíóðÆö¼ý=K%û0ô¸øËûø¼ýÛ èÊÊ qüóðéêæã6èìø¦5+ 3Ê3 ÛýŠóìúï¯î!ö]ùZÿ— QQQ: ”Ûüóð¯îóð¸øD£+ gHDÛ£… ˆýµþúÆö%ûñKî: Hø¯î0ôD: gg”D—]ùóðìéÍêl÷êÐ Ê Ð : W]ùóðÍêìÍêcí0ôiý£v  Ð : ñ©ú™ñcíäòÆö]ù¸ø]ùxû%ûD£QÐ DÕô6èêæììÍê¯îµþß Qg”¼ýZÿ£ + îiý]ù©ú]ù]ù!öóðŠól÷xûñ… … Ð Ð ß ÛZÿ]ù6èqàÚÝ6èü ø&"Dèv : ù>òSäÚqàóðÃüW­­5!öêæãÍê]ù: : Ûÿ¼ýZÿ: ß WWÿ¼ý]ùÕôÆöxûl÷äò{õ©úÿþ%ûÃüêv ÊÊQK0ô™ñóðóðcícíééóð¼ýWg3Êý0ôêæqà¼áã6è0ôýgQQQv : ”Û]ùìÍêécí]ùDDSêý+ : SD5W”Ûÿ{õcí¯îÕôxû£Ð Ð Ð : ˆHýSøŠóÆöËûúÆö>ò!öqüÛ a&"D3 ­ÿ]ùÆöÆö™ñóð0ô¸ø¼ý£ Qî=5l÷{õÕôÆöúbþý 3Q+ îâ¼ýäò¯î™ñ0ôø]ùËûZÿDÿqüùµþÆöäò¸ø¼ý55—5Zÿ—êýËû!öúïcí{õü—Ð ß ˆü]ù¸ø]ùóðcíóð0ôµþ: 3v £bþ¸øäòúï¯îìcí¯î!öqü£èÊ3 £ýýD©úcíŸå6è¯î!öÿ: Ê­… —bþ¼ýþÛ5iýl÷Õô¸øËû]ùø©úxûWac%DîËûl÷0ôúïcíÍêcíóðqü”QÊÊQH]ù!ö¯îŸåã¯î©ú”Ê+ ””ýüóðqàÚqàcí¸øž+  5%û0ô©ú=D©ú0ôcící™ñ0ôl÷úÿWÐ QgD]ù]ùøÕô!öl÷™ñ¯î0ôËûž+ 3ÊQ: ¼ýl÷Æöü]ùÕôúïcí¯îÕôµþý ÊÊg£µþqüÆöé6è¯îÆöþîg … v v  Ð žËûÆö™ñúïóðŠóþ£WSÿù ø&"D3óð¯î0ôóðéóðþ: Ð QQH¼ý%ûÿxûäò¯îcíÍêóð]ù£­ø5D—µþ¼ýÕô¯îÍêì>ò©úž—ÿù£ îÛ­ÿ]ùqüËûËû%û©ú©úøÕôÕô>òóðø£ + £—qüµþ¼ý%ûÕôŠó{õ™ñécí©ú£Qaø­: %û!ö>òóð0ô!öl÷ÕôËûKÛWâ£Ð H©ú>òŸåãÍê©ú… èQgß îW££HWÃü0ôóðcíÆöüÃüK۔Р… v + ” ÛÕô¯î0ô0ôúï!öê”Û۔Р: 5£ß =qü¯î6èéäòÆöú£ èè Æöóð™ñcí{õl÷]ù©úþDÿžW£WZÿ¦Ëûú]ùÆö0ô]ùDW­ÿl÷™ñ]ùÃü:  £¦ÿÿÆöÕô™ñŠó¸øžùþ%ûqüiý£ÊQ­ÿóðìÍêÕô]ùÿbþ¦=îÐ 3 … úxû]ùŠó{õ!ö]ù¼ý£gÊøè£µþý¼ýÿ]ùìSäŸå{õSî 3ègKWH+ … ÿÆöŠócící¯î{õù—H… ”3v {õóð0ô>òúï¯îóð]ù¦”gè£Zÿ©ú¸ø]ùÆöÕô0ô¯îcí¯îäò]ùêW£… + : iýéãÍê0ôQß ÿý!ö0ô¼ý£ß : ù]ùÆöÕôŠól÷þü!ö>òø¦v Êß ýóðŸåqàêæ]ùW+  : ”: ýÿD”ÛSÿúŠó0ôl÷KaD3 W: : Zÿ¸ø{õ]ùbþüäò{õ]ùv  : WžZÿÃübþùKÃüÃüD%û0ôøÛ D©ú{õ>ò™ñ™ñ™ñ]ùþùZÿ—: ££v … Ð WËû0ô6èqàqàäòWH—Zÿ]ù!öÿÐ QÛ¯îÚÝØSäúÛ…  Ð Hâú]ùiý¼ýÕôìcíóðäò¸ø¼ýâ+ : Ð Â ß îDËûZÿÿâÿ™ñóðäò]ùˆÐ  g: : ÛD¦]ù>ò{õ!ö0ôìcíiýÐ a&"c%&"DÊý>òSäqà6èŠó]ù=­ÿþý3Ð ¼ý¸øÆöcí6èóðø­ÿ¸øüD ]ù0ôcí¯îììÕôl÷iý¦µþ]ù%ûDÊQ ˆ]ù¯îé6èéúï{õˆÐ : âWêý™ñêæcí]ù©ú¸ø]ùÿâîiýú¼ýþ]ùøøŠó¯îcíúïÆö¼ýÐ è3Q: H­ÿýZÿÿqü©úqü¦ýKËûú¸øS: è3”ÿÕôóðŠóqü­ÿËûêKDý=¯î6èìcí!öêù­ÿÃü=: : v £ùÿêÿü­ÿxûÆöŠó!ö]ù5£”v ß Ð ñbþDHž0ô6èêæé¯î¸øZÿÛž{õcíxû ­a+ ¼ýÆö¸ø¸ø{õúïÕô]ùÆöý: gD¸ø¯îŠó%ûÃüÃüÆöÆöËûÆöc%D­ÿl÷0ôéóð©úl÷ì0ô]ù¼ý¼ýˆÐ v Ð + ”ÃüÕô>òËû¸ø]ùZÿ—î H­ÿüQ­Dø0ôóð¯î0ôl÷þÛDËûZÿ: Qv W%ûüiý©úúï6ècí¼ýÛ… Ð : %ûýDDúl÷0ôÆö{õ0ôîÐ  Wqü]ùøüÿ5Û%ûóðcí0ô%û¸ø]ùú­ÿÿê—£=ù]ùÆöiý¼ýúŠó>ò0ô]ùv øÕôóðcíÆö]ù]ù!öÆö0ôiýÛ” øa êxûŠóÍêŸåãêæ!öîQ  Ð Û¦: îKú]ù©ú¼ýÕôäòµþÐ … £=î…   gHúcí¯îÕô©úÃüD… î£DDxûµþËûDH =Æöú%ûl÷>òø¦Q”ÛK¦­ÿqüø0ô>òcí0ô¸ø]ùSˆQaÊß ©úøËûÆöúïcíóð{õ%ûŠó™ñÕô¸øZÿ: 3­Ð úø©úÆöcí¯îÕôüÿ]ùú┣bþøW ýDÃüøø0ô¸øDµþ!ö¸øxûˆ”v ”HâqüøiýÛKKˆêùxûËûþúxûž: èQDÕôúïŠóiýˆ+ Ê­îqü©úZÿD¼ýl÷©ú¼ýqü¸øÃüKÿú]ù: ý:  : : ýø0ôŠó0ô¸øDW££î­ÿ]ù0ô>ò0ôÆö]ùqüÿ%û©ú%û¼ý: Êß ­ÿ{õ]ù—]ùŠóìÍêcíø+  £Ãü{õŠó!öÿýÕô>òø=Ð  =óð0ô%ûþH gÛl÷>ò>ò!öÆö0ô>òÃü£Ð ÛÃüÃüüÿ=£”Wž¦ýêÿbþµþD5Wˆ5ùþZÿÛˆ]ù{õ{õ©úW Ê­Ê… ¼ý©úê£K]ùóðcíäò©úËû%ûËûS=Hv Ð : 5KøËûñ]ùcícíÆöHQ3Q+ KÆö{õ0ô©úùÿ©ú{õú¼ýxûÆö]ùK=H: îÐ : úcíêæêæ¯îÆöµþ¼ý¦êbþþÛ5ýúÆöøËû¼ý­ÿ==—¦ñ£îîqüúÆöcíêæéÕôK: £: Ð ýµþÃü¼ýqü£Ð Ð Døüžù¦ù=W£W£v Ð KúïÍêSä¯î©úñg­Êg Q Ð WËûl÷l÷©ú©ú{õúïécí{õW Ð â!öcí{õ]ùqüW: ß Ûqü©úÃüqüâù¼ýqü]ù0ôé6èäòŠóµþ: + ýøZÿýDbþ%û]ùl÷óðcícíŠóøâ: Ð Ð ê¼ýüÃüü]ù{õ0ôŠóÆöl÷{õ¼ý£  Ð + ÛêêWî¼ýŠó6èêæäòúüþ”3: ”îH… HKËû©ú]ùþµþ¼ý©úµþýÐ è ˆµþú©ú¼ýø!öýKxûiýÛÐ £ê… QQß žÿÆöcíécí¸ø£HêH… HWî: ñÃü!öìÕôÃüÿþ¼ýKÛSD££Ûbþ]ùÆöŠóSä6èÍêcíÿ:  îD©úl÷¼ýýHH: ZÿŠóóð]ù%û¼ý%ûËûžWÛ: £ÿÃü]ù{õ%ûÃü]ùxû¼ýW : ZÿK5W£îÿ]ùxû%ûýxû¸ø¸øþêÛ…  HK¼ý]ù]ùZÿ­ÿZÿ£ Ê3Ð : Wü]ù]ùiýZÿÆöÆöÆöxû£ ”¸øýW : Û%û{õcí6èì¸øH… ”: … HS]ù]ùÆö]ù>ò>òÆö]ù]ù!öüH… î£5ù”… K{õ{õ{õ>ò¯îúïÕôü]ùxû£Ûùþþµþù5ýýê¸øÍê¯îÆöqüµþDî 5ÿâÿcíSäì]ùH ß Ûüiý55ß Ð Kiýiý©ú¸øl÷%û©úÆöxû5Ð g… ”+ îÃüqü{õ¯î]ù53èQ… Ð —úËûZÿWK¸øäòÍê¯îbþýÛiýD5î—: gZÿK­ÿýÿ]ùøÆöÆö¦: ”S¼ý¸øüúqü£ýýËûÿqüú0ôúü0ôúïø£… + ZÿÆöúïÕô{õý5Zÿ0ôcíÆö£ Ëûþ££ñËûSêžWbþÿl÷ÆöþH Q£µþ{õóðcíÕô©úqüúK=£ñêÛß : ÃüµþÿKËû­ÿýµþ=S=5£: ýK££H]ù!öžWS¸ø0ô5 3Ð W¼ýiý¦îß ê]ùúïcí0ôDÐ  ýúÆöD: + ñÿüú%û¼ýqüþú]ùiý ß —µþ]ùÆöÆöl÷{õÆö¼ýZÿùqü!ö0ôSÛÿZÿ]ùqüùÿiýÆö™ñøK”ÛS!ö>òóðú=ý¦%ûÃüÃüiýqüýËû©úÆö¸ø¦ß —+ : 5îýSùý¸øiýñ¸ø0ôÃüWžýÿ!ö0ô5… …  + : v îZÿ=qüZÿqüÃüËûÿÛ=ùS©úiýþKÃüH+ êqüµþ ß ­ÿ©ú=Dµþxû=5HDSÿbþbþqüKbþqüµþ]ùùS¸øxû©ú]ù¸ø¦Â Qß D—l÷>òü—D©úóð{õ¯îŠó]ùˆýÿù¼ý%û%û]ù©úl÷{õËûµþWÛH=žùbþñ©úxûÆö©ú]ù0ôÆö¼ýžS¦î: £K£gˆ—]ùµþËû!ö>òúˆH­ÿ]ù¼ýD%ûüÿ£ g… ùÆö]ù]ùúËû¸ø¸øøÛ g ÛZÿÕôÕôl÷þ5v Ûÿbþ=Û]ù©úbþÐ  Zÿ]ùiýˆ0ô>òÆöS=iýÃü¼ý]ù¼ýÿxû{õ>òiý v ÿúü©úýþ­ÿâ¼ýùž¦xû™ñóðcíúïúïÕô%ûW  KZÿD5¼ý©ú{õK: Û]ù{õ0ô¸øøÿ=KËû¸øiý%ûú=µþ¼ýqü5ÛÃü¸øZÿ=Dµþl÷=: … Ûù£… Sµþ0ô{õiýž””… ýD£+ èv žú{õÃüÛ£=—¼ý¦£”£iýËû¼ý=5Zÿ™ñÆöñD5—WÆö¸ø5: WDZÿ]ù¸øqüW£bþÆöcíÍê¸øµþWW5žñ—£ˆl÷]ùl÷©ú%ûúúóðŠó¸ø¦=ùiý©ú©ú¼ýñ5ÿ¦H”êbþ]ù]ùÆöZÿ5ùüú!öþ—£Ð =xûÆöxûùùqüþÃüD=îWñù¦ˆ5¼ýDý£=KK¼ýK£: ”bþ!öúWHDýýî¦l÷l÷l÷êÛDZÿqü¼ýùH”  … Ëû]ùÆö0ô!öÆöÆöÛ… =­ÿKÃü¼ýž]ùÆö0ô]ùýÿübþÆöúï!ö¼ý¼ýµþ¦: HúÆö{õl÷¸ø™ñú¦£=5Ëû0ôÆöH gWú0ôcíl÷]ùþbþiý: ß ß DÃüøl÷qüK: Æöóð0ô]ùµþWÐ Hµþ!ö0ôþDùDýWWÐ : 5iý¼ý5Wµþl÷WQv bþ]ù¦WD=bþ¼ýü]ùDýDˆîÐ  : Diý£ý¸øl÷0ôóðÆöl÷xûSSH… ˆ5ý¦g v îþqüø!ö©ú!ö©úý£øl÷DýÛþˆH=ÿ™ñéúïÕôxûµþ©ú¸ø¸ø™ñ!ö=D=µþxûýÃüŠó]ùHHžqüÿÿbþ¼ý!ö™ñl÷­ÿ¼ý¦î””qüß îµþ0ô]ùHSK:  Ð =úÆö¸øÃüú¯îøiýKD Ð ¼ýùµþˆ=¼ýžWµþ¦ž+ Hù£ Ð ýqü{õÆöÕôÆöý5H”: £HýWµþl÷xûý£žÃü©ú¼ý££qüÕô{õúbþ©ú¼ýÛWâÿµþqü¼ý¼ýÆöäòl÷=£ùZÿÿ¼ý¸øbþ¼ýúÆö%ûýúl÷l÷ÃüHî+ ýËû¦ù©úÆöl÷]ùÆö!ö¸øZÿý: Hžiý0ô0ô]ù¸ø¸ø¸øñ££ÛâµþâZÿD£WDqü¼ýþqü¼ýž55Wê­ÿñDýÐ QHbþqüüøl÷©úý£ú©úZÿ£Ð … £ñ­ÿ¸ø!ö¸øËûÃüÿ¦ý: £… … ýZÿÆö{õ­ÿW£Ëû]ùiýDZÿù­ÿbþúú%û]ù0ô]ùËûÆöÆö]ù¸ø%ûW: £ýÕôú¼ýµþˆSøäò0ô­ÿ: ”Wqüäò!öµþ­ÿbþW££µþýËûËûKˆ­ÿl÷ÆöÛ=ÃüÆöŠóÿ”ß KKžµþý]ù= ”qüÆö>ò]ù¼ý]ùl÷Sß Ð ýñ꣣ˆ5££=ýbþZÿùD¼ýDW5bþ¦ÛWKD5£=Kqüóð!öÃüWW¼ýüÃü¦ùÿDSxûÃüüøÆöÃüžWW¼ý¼ýÃü¸øl÷]ùxûDžý]ù%ûKÛêùµþýDS%ûÆö¯î¯î¯î%ûÃüqü5êùxû!öøñê%ûiýÿZÿžK%ûÃüqüÆöúÛ: g: ñÆö>ò0ô!ö¸ø]ùW… + ”KDDêH££: —µþ]ùÃüËûý£: : îÐ Ð £ê¼ýËû©ú¼ýbþ©ú¸ø¼ý—5%ûù]ù¸øñî: v îS]ù¼ýiýâW%ûúž£W¼ýøŠóø%ûùKbþµþú¸øqüÛ”­ÿµþ¦¸øóð™ñúDÿZÿúŠó!öžÛ]ùxûµþ]ù]ùŠócíÆöÿWß  K©úxûS©úÆöbþDHD]ù¸øµþ—Æö0ô!ö©ú⣔£HHñÃüˆîîùK=5qü­ÿ: H£=â: Ãü{õµþ£gÛ­ÿžDKK=Û: + gýøZÿýK¸øl÷ú©úÆö]ùžDêß + ˆSKÿZÿ¦ÿDSÛ=µþbþùSúl÷ø©ú¼ýqü¸ø0ô]ùqüDµþ]ùiýˆý£Æö>ò!öbþ]ùl÷Šó0ôüZÿ­ÿ]ù©úÛ£l÷{õ]ùÿËû¼ýùù­ÿZÿ¸øbþß ˆµþ]ùÃüÃü¼ýúˆ: ý¼ý{õ0ô©úùˆ—”Ð £bþ0ôÃüÛxû¼ýâ: v îý=£µþµþ]ùËûß è… ÃüËûS5: î: î¼ý%ûµþýµþÆöÆö¦v £Zÿˆ”iýÆö¦HˆÃüúül÷©ú]ù£ÛÛþ=­ÿžùâýý]ùÿ]ùÆöúï>òÆö£ß ¦µþ¸øúµþˆZÿ%ûŠó0ôú¸ø¸ø©úZÿž¼ýýÛµþqü]ù©úÃüÃü©úþ%ûl÷!ö©úñ£5”ñýxûKÛý%ûú©ú{õÆö” Ð =qüžùÛ: Ð : %ûÕô0ôÿ=¦¼ý]ùµþ£ß WxûÛ£v Q… ­ÿþµþD”S­ÿ¼ý¼ý%û©ú]ù¼ýˆ: ß ž¸ø­ÿÿ¼ýýùµþ¦üùâ: Wÿîv ­ÿ!ö0ô¸ø¦êýl÷Õô¯îŠóÿ£”¦%ûø0ô>òËû=£ùËû{õÆö%ûW%ûÕô{õD ˆøÆöµþ¦—DþÃüqüøÆöµþ£îýñDù£  %û>òäòÆö{õŠó]ùËûê H¼ýKS¦µþl÷­ÿ=bþ¼ýñÿ5Kî+ : îÿÿ¼ý¸øµþ£… : W”: H”HüÆö¦Û £=ž¼ýüñqü0ôóð>ò%ûqüê+ HWS—ý¼ýËûKÛž¼ýÆöŠóäòäò¸øZÿ: £Zÿ]ù©ú¼ýµþñù%ûl÷©ú¼ýËûüÿHÐ âqü0ô¸øZÿÿ¸øÕô%û55K]ùÆöÃü¦5ù¸øóðúï%ûýZÿDWñýW%û!öÕôþ£ DKˆDýÆöµþ+ v v DÿËûËûxû¦ˆþÃüKKý5Kú]ùK£HˆùÃüqüÛWÐ ­ÿËûüDZÿ¦Ð v â!ö©úÛ”5=êËûµþÃüúÆöbþ%û]ùú: + SËûñžñK£”%ûäòŠóŠóÆöÃüÆö©úËûµþü]ùÆö¼ýù+ : úóð0ôqü¦µþúÆöŠó0ô]ùñÐ + ß £D=]ùìcíþÛýxû¯îÍê!öâîâZÿùÛ: îxûø{õqü£: ]ù0ôiý…  ß ZÿK¼ýbþWýK¦: + µþ¸øý=%ûø]ù=ß Qv ­ÿêýß … £¼ýùùÛ©ú!öÆö£Ãü¸øþqül÷0ôÕô: v : ¦ÿW”ý£ˆl÷¯îúïËûbþ{õŠóiý : ñSüZÿ¦­ÿ5KbþÆöø¼ýKù{õ©úK­ÿ¸ø]ù¦Zÿ]ù¸øZÿqüÆö{õ¼ýqüžxûÃüÆöqüqüSêHÃü¦”Ð £þ­ÿ=ZÿÃü]ù!öµþß ”=ZÿÿW£5ýxûüù££ùÆö¸øˆùxû©úiý¦=… Hv W¼ýbþ©úñžZÿ]ùø­ÿ: : Ûµþµþ: ß H5Ëûù=êDñKžý=â”ýqü©úþSW££ËûËûbþÿSþµþñ©ú]ù©ú¸ø]ù%û¼ýl÷úïl÷ß : žý{õl÷DîW©ú]ù]ùúHÃü™ñŠóäòxûqüÆö{õËûžH£âñÿËûiý%û%û¦ÿþ­ÿW v SŠócíø¼ý¦HW”ÿ¼ý¼ýÆö]ùù£ž©úúZÿý: îWD¼ý55£ÛžýDiýÕôÃüÛý£WWêî¦ù£K¸øúDW£âùËûqüDîDqü]ù©ú­ÿ—”££ˆËûZÿDqüKñùËû!ö!öÕôÆöžÐ ­ÿŠóÆöê: ”þøxû]ùÕô0ô¸øËû]ùÃüDñþú]ù©ú¼ýÿ%ûúW—Ãüóðl÷ù­ÿú]ùÿÃü]ùúÛÛ—WKÛWHW—ù¼ý]ùqüýâZÿüþ%ûbþ¼ý—5=D£Wù]ùúZÿ5ÃüµþDžW5Ð v Û]ù­ÿ… Ð Â ê: µþúñ5¼ýl÷ÿ£î¦DüSý+ £ù©ú™ñ!ö]ù%û—S5KÛ: HbþcíÕô¦žÆö%ûÛ£=%û]ùZÿ5KDW]ù0ôl÷%ûl÷>òÕôê ýKqüÕôøDâ­ÿ]ùÆö¸øÆöcí!öøÛ—iýâ¼ý]ùÕôÆöÕôqüñÐ ýiý]ù©ú=HW5øúï©úK£… ñ5ýÃü—µþ]ù%û: Ð v KÛ¼ýÆöÆöüDîW5H: ¼ýDHÛ: WÛž%ûüÃüž—ùD£: žµþ=îÛ!öÿý: ül÷0ô©úñW:  gKóðÆö¼ýDbþ5£ý©úøú©ú0ô©úWDiýl÷>ò]ùqüµþøøËûø%û]ùÆöqüùø¸øxû5”: ÿÕôŠó]ù—âZÿ]ùÆöqüÃüÕôý£Ð g: K%ûÕôäò0ô¸øý£ZÿDD: v ¦ø0ô¦”£—”Ð žþ]ùµþ”Kê£v … —ÿ: êËûxû¸øüê… £ÿbþK: v ”H%ûøøZÿ£5: ž{õŠó>ò¸øùÿüqüÆöÿ£=55­ÿDSÿùDv £]ù!öÕôþZÿÕôËû¼ý%ûäò0ôxûøýžµþñþž—¼ýêÃü]ùúÆö¼ýS]ùúêW: £µþ!öZÿqüÆöÆö{õl÷¼ý5H¦ñ”: ñ©ú©úDv HK¼ýÆöiýîHîZÿ¼ýùiýµþ5¸ø¯îÆöß Qg£%ûùÐ HµþäòÆöñùÃübþµþ”+ Q£Zÿ©úWžD5DZÿl÷Ëûý£”£žKˆùù%ûú¼ý¼ý%û¸øúbþKDZÿ­ÿ]ùÃü­ÿ]ù©úD: £¦úÕôËûDü{õ>òcíøbþ: : üäò¯îK ˆâ¦ÿ%ûúiý%û¸øúÃüø¸ø%ûD¼ýDÐ Ûµþú©úZÿýîÛùD­ÿñ©úäò{õþDÛÃü%ûùý—©úl÷äò!ö: H%ûú!ö¼ý∔ Ð : : ­ÿü¼ýZÿùùî: H+ QHµþøÆöÿ­ÿK©úDWß ÛÛùËû©ú>òøü¼ý%û]ù¼ýñËû¼ýDÛ£5DZÿDž¸ø0ôl÷0ô—êÿSü¼ýúÃü¼ýD­ÿ¸øúþžýKZÿ¸øÆöÕôÕô¸øýþ­ÿ=ß 5WþÆöcíóðÆöê=££Û£Kˆýúþ¦Sµþ¸øê¼ýDêÿDêDHDqüú­ÿý: ùSÆö¸øDî3… %ûcíÆöËûqüKý£+ H: : Ð + =¼ý¸øbþH Рù¸øÆöÿýÆöµþâSÆöŠó5Ð : £ñqü¼ýZÿ©úl÷]ùiýK]ùÆöl÷ú¦£¼ýÕôcíøýù¼ýóð—Ð WÃü{õÃüµþDý¸ø¼ýÛ£þÆö>ò0ôˆv ß þÃüŠóÕôüù£øŠó©úê¦SÛ—5£ HÕôÕô0ôÆöqüDµþÃüß Wü!öqüî… Kùˆ£â©úÆöý ß âSl÷µþ5£”WDKH¦êê=££v … þcíSä6èîÊøZÿóð¼ýùâ%û!öþWÐ þùˆ!ö]ù­ÿžý©ú%ûúþ¼ýÿâWÿ¼ýø£ù­ÿ­ÿˆxûäò]ùù¼ýl÷l÷]ù0ôiýýñÃüqüSñ¸øcíÕôî=µþóðcí¸ø]ùÿˆDDbþŠóóðø… Hø%û¼ý5ÛZÿùý Ð óðúï!ö%ûiýÃü¦Hîâ©úiýµþˆ: bþ­ÿùZÿÛDýÛÐ žS­ÿSÛ£:  îý¼ýýâbþqüqüž¦¼ý]ùêDÐ ¼ýDWDWü%û5Wqü%ûü5ý{õý%ûËûH ˆÆö6èl÷+  ]ù]ùùqüKqü¸øqüùø]ùü]ù%û0ô]ùÃüDÆöúïÃü £l÷ŠóÕô¦KîîêÃüËû]ù%ûK¸ø%ûâýñSbþêß ñ™ñúïÕôKËûñ: £K0ô%ûD¼ýiýH£î⣼ý]ùø]ùH£îµþÃüÿ£Ð ý¦KÿHKÿ: £bþÿ£ —¼ýê¸øÿSâêµþ—xûþˆ£ýýiýqüDK©ú¼ý]ùÿµþ]ùËûü{õÿîg… Æöúï0ôÊQ: Zÿ%ûiýbþì0ô]ù%û©úqübþ5øbþÿúµþ0ôóð0ô]ù—ýµþóðcíxû3¼ýóð>òµþâÿ£H]ùÆöÃüÆöl÷]ùWÛ{õxû¼ýS¼ýiýþ: ññxû¸øÆöñHñ¦µþHß WD=ÿ£+ £ù%û©ú>òÆö££—qü: Ûµþ]ùÿÐ ß ýÕô5£: ¼ýäò£H=ß ÛžÆöl÷ËûµþµþDß žiý5”ÿ¸øqü!ö£êÿâ%û0ô!ö¦Û]ùÆö¼ý¼ý©ú]ùxûŠó]ùxûK¼ýþ­ÿýäòéøž¦xûqübþ=+ ñ0ô{õbþ: 3—™ñl÷þúøbþ¦âùþúSùê©ú]ùbþD —]ùÃü¦: K0ôl÷ÆöüK… H=bþqüü5qü£Kß £Hv ”D—: ”¦¼ý=£îiýZÿ¼ýî=Ð £0ô{õl÷©ú£—Ëûž£Dñ­ÿ]ù¸ø%û­ÿþ]ù¸ø”Ð Wcíúï¼ýúž£îâWqüîý©ú¸ø©úZÿbþž£{õ{õóðÆöÆö¼ýúZÿµþ]ùøZÿ¸øxû]ù©ú>òÆöv Êî0ôÆöxûýž]ùžîK: ú{õÛ… Õôú]ù¸ø©úÕôqüúHQK5S£ê¼ýˆñ5Wý£Kxû]ùDÐ ”]ùËûú+ ÿ¦ˆ¼ýcí%ûÐ + £­ÿWýÐ v £¸øúïl÷5 Ð þcíl÷H¼ý¸øø%û ß WÛŠó¯îÆö¼ý”ž=ýµþµþÆöúïóðýÐ ß Zÿú¸øÿùK%ûñÆöóðìcíbþW5âbþóðóðŠóýî]ùbþâ: ¦üùl÷üDý]ù­ÿ]ù%ûžW: 5ÿxûú=¦øÆö]ù£Ð þ: £ž0ôóð¦¸øúÛ£ß £iýþüâ=âùQ: K¦… : : + ß DŠó{õ¸øDêýDü¸øDKúÕôiýH3 : qüø¸øúüÿÃü¼ýiý{õÆö£W5: : S{õ%ûZÿbþ%û©úÃüÛWµþù]ùüÿþxû{õüú]ù]ù0ô¸ø0ô]ùD… : ]ù™ñ]ùKWDqü%û­ÿ=DÆö{õ>òÆö£>ò¯îøW”: ùS¸øøµþWýH… Wâv  ¸ø]ù]ùø0ôÃüùDž£D5]ùý: î¼ýqüÿ… xûZÿ… … Ð £úcí0ôW=]ùqü=]ù>òý—¦]ù¼ýQý%ûqü©úKKbþž… v ß qüxûµþÃüÕô¯îÿ: xû{õ­ÿñüú©úý3ß bþ>òÆöÃüÿZÿú0ôý¼ýxûiý=­ÿŠó]ùÿÿúïóðøîÛþWùZÿùxûü!öqüþ5ÛHg: Hÿ¼ýÃüÿ¸ø0ôµþ¼ý©ú¦]ùüËûÃüžWS¼ýÿK£¼ýÍêl÷S… + Ûiý=ß  Qý]ùüî£Ëû¼ýÛ””5ß ýHDÕô¯îÆöW… žWêZÿ©ú>ò%ûqüqüÛ5D: =Ãü¼ýÿý—bþ%û©úKS0ôäòóð]ùµþbþ%ûÛý©úËûWñ]ùxû5¦žýZÿ©úÃü¼ýqüÿÿS0ôóð]ù%û]ùiýø!öK””qü%ûêZÿÃü{õ!öŠóóðËûK£¼ý£%ûl÷â WÛD¸øiýZÿ­ÿZÿWKÕôÆöÆö©úÿ==: : £: £žWµþ%ûù—v H”Ð Æö%ûH ”úøÛ: ¦]ù%ûËûËû¦DâùžZÿµþW … Zÿ>ò©ú5ý5: : £úïcíÃüîbþäò=Ð Dž]ùÿžDß  ”]ùìcí{õ©úü£Û—µþ{õÆöúïcí]ùSbþxûú]ùËûÛv … ÃüËû]ùúDúxûDñ¼ýøËûžù¦: ¼ýDbþücí>ò{õl÷¼ýHS5WKD¦%ûâ£Ð Ð v : ü””žËûŠócíŠóñÐ : µþýDÐ Ð ¦Zÿˆ =¸øÆöùW55ýúÃü£KZÿÿÆö¸ø0ô=ýÃüZÿl÷ŠóóðüÃü]ù]ùDž=ˆß ß —©úÛl÷>ò¸ø¼ý£5Ëû: îHDúïŠó>ò{õ¼ýxûËû{õÆö!öl÷¼ýWWü]ùÃüK£: ¦úï{õü©úKKÛêZÿqüZÿ]ù™ñ­ÿ¼ýµþqüüDß 3QD%ûñ]ù=¸øËû==: 3 H+ %û0ôÕô%ûqüøbþDß Â Q ZÿÕôÃüÛ Ð ©ú!ö—Û¯îÍê©úQbþŸåÙÒêæDG?'-ý6è¼áäòDèã"¾cíPxZß ËÚäòú3©ú}ÈOÃG?]t£IpÕBÐóðØØ«ÍéæÅ*¸~¦_ÚÝ }ÈOÃ]¶ÆöÙÒj£I춪äòqàpÕ¹ÀóðS G¸~JU!öÙÒÛqà"¾ä¯¶ª¹À£¸~/oU2ø­¯î]¶æÅô¸cíU2¸~ÞABÐ"¾ÙÒØOÃÐ qà!öì4¸~PãSä+ "¾"¾-›Z Ÿå/o¸~£I&"a3Ø}ÈOüáDJU£IpÕ-›ô¸Ø ±<&"cíxZ/o&"”ì4"¾u†u†u†¹À G¸~jc%ÿÚ«Í6èøß c%'-:¼áu†ÿ•{õ Gƒ7QËÙÒŠóƒ7ÓdJU¾/v "¾u†u†u†ž¸~¸~]tì4óð"¾æÅäòøÿúï!öã"¾Ñ«Íù'£Iƒ7”ÙÒ]¶é G¸~xZù'èØÑu†-›— GJUjxZæÅ"¾êæqàô¸ô¸Q ø]ù &"'-U2裶ªˆ¥«Í*¦_P¦_*ô¸u†u†}Ⱦ/]t¸~‹yì4qàô¸Ÿåù'c%£¼á]¶u†u†"¾&"¦_JUÆö}Èä¯>ò'-¸~¸~j¾/ä¯u†u†ÿ•ø¦_j]t¦_¦OÃ6è*ß ¶ªu†ˆ¥]¶ÙÒ¾/¸~‹y¾/ø '-"¾-›¶ªæÅv /o¸~:¶ªu†u†OÃì4¸~¸~jîÿ•]¶&"¸~P¶ªu†u†¾/xZ:ÙÒ"¾ô¸Ñ6èP¸~/o Gù'S¸øÑu†]¶æÅÐ ƒ7P¾/©ú£Ód/oÐ Ñu†Ñ«Í'-¸~]t/oø"¾u†ÑžG?éc%ËûÚÿŸåDÚÝÚìJU¸~ÞA"¾u†¶ª:/o¸~ƒ7Su†u†}È G¸~ÞAl÷BÐHHæÅP¸~¸~]t­OÈ¥دîË™ñ¯î¼ýˆJUÞAêæ"¾Z ÚPýãcí=øJUJUæÅÿ•"¾ùcíýä¯6è5óðÞAQH0ô¸øQøjÞAŠóZ ]¶ÿ•]¶ÚØ£I/oJUv QÞA趪u†ÿ•”¦_¸~j±<ˆ¥u†ÿ•¸~ Gqü-›£‹"¾Ú]tj£I¶ªu†u†{õ:c%PÞAù'3bþ6ècí]ùÚÝOÃj:¶ªu†¶ªÙÒÚݸ~¸~]t'-Úô¸iý Gƒ7ÙÒ¶ª-›OÃqà­xZG?H+ ¾/Pµþô¸ÿ•æÅì4ì4P¼ý{õ Æö˶ª]ùU2Ÿåcí'-ƒ7K GBÐOÃæÅZ JUjÿ•-›BÐ6è¦_ì4j&"«Íÿ•"¾'-ù'{õ-›æÅÊãU2 G?ÞA:: JU}Èu†u†"¾­ GxZj6趪u†]¶ GÓdì4Q-›ÿ•6èxZxZøÚÝ]¶6èv }È«ÍDý±<Ø: ¾/ãý£I/o¸ø¶ª-›ã6趪Dù'G?£ISäÐ ø:ˆ¥¶ªqà3:BÐÓd¸~JUBÐÿ•ÿ•ì¾/*bþÆöøŸåã¦_¾/D¶ªãU2ÞA¾/Z ô¸]¶Õô£I&"‹yJUøÑ£‹Ú£I‹yJU>òÑu†u†Ÿå‹y¸~¸~¦_ÞAÚ"¾}ÈÚÚqà"¾Ÿåéù'­: pÕô¸>ò¸~ø -›]¶Q¾/]tÍê¹À}ȶªÚ¸øKù': ù'ˆQ5!ö£¾/æÅøxZ:ô¸ÿ•-›¯î c%ÓdJUJUxûcíóðˆ¥u†Oþ/ÞAxZÞA]tîÿ•ÙÒÚÝ]txZÐ Hu†u†ÚÓdJUxZ:&"u†¶ªZ  Gƒ7U2JU¾/+ ¶ªcíOÃQ>òÚÝ£I]tW¶ªu†ä¯"¾£I¸~‹yJU¹À]¶qàc%£Iß ËcíOùÀØP¾/:¼ýSäW«Í¼á"¾Úù'&"]tƒ7¾/Ð Ú"¾-›Õô "¾Øÿ*­c%D¸øqàÆöÙÒ¾/]t±< u†u†}ÈpÕ¾/£I]txZÿѶªjÚÝ"¾ÿ•ãHÚ0ô: xZ/o£I: ƒ7øæÅu†£‹BЦ_j/oýˆ¥u†¶ªxZ]t¦_K6èÍ궪::£IqàZ Z l÷ÚÝZ Šó£IüÞA¼ýÓdƒ7+ "¾0ô]t'-ÿ•u†BÐÆöêã¾/ÞAÞAc%ì GJUau†u†«ÍËDƒ7¦_¸~c%]¶u†"¾ÞAÞAc%"¾Íêv ÚÚÝèaQqàqà&"Pèÿ•ô¸: c%:ÞAÞAì4ô¸u†u†Â ]tjOÃ"¾Hu†K‹y¸~¦_øÃüãBÐô¸ØqàQ5qà'-ì4Ð ØØß ¼ý&"«Íô¸Ê>òbþjP:Æöô¸BÐÐ -›¶ªÙÒ!ö&"ƒ7JU£I­ÿÙÒOÃã±< G£I&"«Íä¯"¾u†qüù'£IPêì4¦_æÅ]¶u†ÚJUø‹yÞA3HÑ"¾ G¸~:Ð ¶ª-›HóðÓd¸~‹yÊËu†]¶"¾qà±< xZ G¾/=øÚŸåÚÝÙÒÕôÊÚÚݹÀÚ"¾æÅ¾/‹yjJU!ö}È'-ìæÅ£‹¶ªBÐÿÞAc%0ô6èŸåPjÙÒ"¾¶ª¹Àèâ GJU¾/cí]¶Ú6è¹ÀËÙÒ G GJUj ÿ•u†ô¸øJU¸~*H¶ªu†}È*/o¸~ÞAÑu†]¶ì4JU­cíOÃqàc%%ûc%Šó¾/ÞAP¦_Øä¯u†ä¯Ú0ô±òcí£‹ñ¾/c%è0ôU2ƒ7Ø"¾­Ód­pÕÿ•Sä¾/*bþu†u†… DG?¸~ÞAù'-›u†æÅéJU G£IÓdèÑu†¶ª¾/ÞAì4"¾Ú±<0ôW£ID-›ÙÒì4Ëîu†Ú¦_¦_‹yʱ<: ãu†ÿ•ß jc%Bжªô¸pÕZ èc%ÓdxZêc%jpÕZ Ú­ÿô¸æÅBÐjJU3Z «Í/oîèË«ÍÞAì4ø Gc%Úô¸¹ÀÊJU-›u†3ì4JU¸~£I]tÚÝu†u†ÿ•jj G¸øøüpÕÿ•JUÞA¾/ã­c%æÅˆ¥¶ªË{õ:ÊP/oþˆ¥Ñ6è¸~xZì4HH¶ª"¾ÞAÓdì4 GU2«Íô¸¶ª"¾ÿ•l÷/oÞAG?Zÿì£OëÍBÐ&"øg}ÈpÕG?«ÍøOÔì4úïSÞA'-U2ä¯BÐéýHù'ÊØÿ•H… ¸~jƒ7£‹BÐúïBÐJU¾/ÞAPc%qàæÅBÐu†ˆ¥ÚJU]tÞAg* GS¶ªu†qüJUÓdG?Ñ"¾BÐÙÒ±<¦_/oÞA{õˆ¥ÿ•êŠóÞAè: Ãüu†ˆ¥øWc%ýl÷Ód¸~Øÿ•ËÚÝ£c%{õQìýøêæÿ•Õô¼ý¾/ GžQ±ò¦_¸~ÓdæÅô¸!ö53©úä¯*/o¾/]ù¹Àô¸H¶ª JU¸~ÞA*«ÍÚÝ}ÈÑa:Ód¾/]¶}ÈG?ø¶ªì¾/Pc%… BÐWv ì4ù'ŠóÚÑ"¾Ê¾/"¾ŠóÞA/o¸~ø¼áÚ¼ýpÕ"¾ÿ•6è: GjHq࣋¶ªHø¸~£I {õ!öü"¾qàŸåc%Wú5èOÃ6è!öHù'ß óðcíÚ©ú'-¾/£IŠó¶ªæÅH¶ªc%JU¸~jÚ݈¥-›ØóðÊ+ ÞA]ù*&"èpÕô¸pÕè3c%ÚÝØËÞA­ÚÚݾ/ß ”¶ªô¸øÊ*¼ýã6èã¸ø£WG?P'-BÐu†Z ¶ªcíÞA¦_xZJU¾/¯î«Íù"¾óðBÐ]ù… :ÊŸåu†«Íxû'-/ojîc%ä¯}È ±<ù'PÑÿ•u†qà¾/]tÓdJUß ä¯Ñù¼ý*:ÃüDØ"¾u†«Íì Gì4G?… %ûÚ: ØÑËý&"JU*ô¸-›c%/oc%U2:úæÅÿ•Z Ú!öc%U26è«Í¶ªä¯]tÞA¾/ƒ7&"aÚBÐÑ"¾óð'-JUxZ:ô¸u†¶ª­/o£IxZ¾/Ëu†ô¸QU2ø&"«Í¾/Êä¯u†Z ì4¸~xZG?Úu†ä¯ììù'c%ƒ7£I:G?+ ¶ªu†pÕÓdc%Ê]¶î±<Û¼áZ &"¦_ì4U2ÞAÍê¹ÀZ ¼ác%Êù'c% cíqà}ȼáÓd¸ø"¾¹ÀÞAù'¼áu†£‹¸~]tî¯î>òqàÚݶªìÐ ß ÞAÞA¸øˆ¥u†BÐ G¦_ÞA}È£±òÐ ±ò6èËÚÝDü6èô¸Ÿå¦_¸~c%6舥BЃ7ÚÝOÃpÕjP0ô«Í™ñî êæ==ô¸pÕ*ÞAJUÃüô¸ÕôJUìæÅä¯ÊÞA%û"¾Õô G¸~JUÿ•u†£‹OÃÞAJUxZÓd¾/-›]¶qà*&"ˆ¦_ãu†u†¶ªj‹yqà䝨è±<ø Pa"¾ÚÝqàË-›ô¸jJUÚŸåì4xZÍꈥÿ•Ú:£Il÷ÚÊÍê-›ìc%£U2:: BÐpÕc%*Ú-›ä¯¦jƒ7"¾"¾£I/oô¸ÚaÞA¦_Sä]¶¹À"¾¯îÞA¦_ÚÝu†u†Úݸ~¸~¾/ì4‹yc%]¶u†u†a:G?%ûýÐ ™ñÆöa6èBУ±ò«Í}ÈÞA±<¾/Ð Ú JU*¹Àu†"¾c%JUc%D0ôÚÿ•Ë::¦_Pù'cícíHu†Sä±òqà:ø!öqàÚË™ñ*ùæÅ¶ª«Í]t¸~U2Ú¶ªa/oD]¶¶ª«Ící: G¼áŸåù'±<&" W¼á%ûì4JU"¾u†u†c%¸~JUêìÚæÅpÕ”::D}Èô¸6è0ôø'-QÚô¸ñDøÕôã­±<£Iì-›ã­QBÐô¸Säƒ7JU춪æÅù'G?ì4*HBÐä¯ãÞAc%䯈¥ù'xZxZ5¶ªBÐý£K}È]¶Ø=::£I*Qô¸ùc%cí¯îl÷!öBÐô¸æÅñj¸~*]¶¶ªýÊËû£Iß Z ¶ª5:ø±<ƒ7Ëô¸ÚG?ƒ7æÅ-›¯î/o¸~Íêu†¼áPaäòqà™ñ'-iý¸øgÊ]ù¸øPÐ u†u†«Í¾/JUù' :£Iaù'ÙÒOÃø¦OÃ"¾}ÈÚÝŸåìÓdJUèÙÒpÕPJU¼ý¸øÚݫ͈¥Z ¸~P«Í¶ªHc%ÚQ£I: ˆ¥ô¸]¶ù'è+ '-¾/c%¶ªu†}È&"]týÚÝJU=ʹÀˆ¥6èÚcí£IP¯îä¯ô¸&"¸~JUÚ0ôc%ãä¯"¾ÚÝèc%©ú0ô¦ý¯îì4G?xZÃüÙÒÙÒé6èBÐcíøPG?™ñ6èc%c%Úˆ¥¶ªøc%éêæ¦_j%û"¾âDæÅÿ£IÊ}Èÿ•}ÈQ‹y GBÐqàÊ£Zÿ0ôpÕ”ÊÍê£ GÊBЈ¥êæì4±<"¾ËQ£I-›u†­‹y¸~:Ãü0ô¶ªH"¾ˆ”ÆöÐ :&"c%øpÕã£IiýÑ"¾æÅóðqàŸå¦_P:v "¾Ÿå­c%ÙÒã]¶"¾Ëì4ì4ãËcíì4]t¾/ÚÝÆöc%î䯣‹6è£Ij:Æö"¾-›ÚÝU2ì4BÐä¯cí¸~xZø-›æÅù'*xûOÃ6è¯îiýã… G GPJUÚÿ•Z "¾*Pc%¸øl÷Ð %ûøúÞAÞAóðä¯ä¯qà:l÷ˆ¥]¶ÞA¸~jÃü䝿Å>òU2:%ûÑZ Sä]t/o¶ªرòD… Hqüã±<Ê㶪­ÿc%:xûBÐæÅ&"* ¯î&"c%:6è"¾H¼áBР&"¼á£‹Ë G¸~JU6èÃüù'{õä¯êæc%Dä¯ÿ•Ë£I¸~j ]¶Sä«ÍüìŠó™ñØpÕ±òc%Ê%ûæÅSä3… èHK G¾/¯î0ô¼ý¼á"¾óð£IÞA¸øu†-›&"¸~Púï¯îýóðK'-—ÿ•£‹%û£Ijì4ÚæÅ¼ý]ùóð%ûŸåÆö"¾pÕÞAÞAÞA&"óðc%JUBÐu†HÆö¾/l÷!ö:jü]¶6è:¦Úµþ3ãÿ•ÿ•P/oG?qà«ÍU2*Säã&"*æÅu†ÿ•£IxZ!ö¶ªØJUø6èDúïÿ•]¶ GPPÆöØù'¾/ÿ•HW±ò*aÆöÚÝ"¾˸øù'¾/*î… ˆl÷­+ æÅu†-›ý£I]tÞA:&"úïu†u†ÙÒ'-c%ÚÝÍê:¾/Ódc%ü—cíÚÆöq࣋u†¹Àƒ7¸~‹yÞABЫÍcíÍê3 !ö%ûU2óðä¯äòÚøÆö¾/ GÛ&"¾/ô¸u†ä¯¦_/o GøgØ}Èü G'-"¾u†ÚJU£I]tÊSä]¶BÐÿ•Íê ¹Àü«ÍÕôxZ‹y£I:S«Í}È£‹Z óð:PÚ¯î6è«Íâ±<£I:}Èqà¾/㶪-›Ø*¾/&"c%øÃüØ0ô'-ÞA}Èu†u†ÚÝ/o¸~ÞAæÅì4±<OÃu†ÿ•ô¸ÚP¸~¾/ø6è¼á}ÈqüæÅBÐÞAxZv ¶ªBÐÊÓdJU™ñBÐÚÐ êæ3c%¦Ëu†êæ­ÓdxZ&"6èÍêÙÒÕô£*îéÿ•ÚÝ­£I*j G]¶u†HË­ÿ&"xZJUÞA'-]ùì4ƒ7OÃH¹À*JUSu†"¾¦_JUOÃ}È*'-'-¾/æÅu†Ñì4¸~Êô¸Z BЃ7£I0ô0ôJUⶪH PÓd*6èæÅ'-Í궪qü¾/«Í}Èä¯ÿ¦_‹y'-a GÚu†u†BÐPJU£u†«ÍÓdÞAéQÚãZ u†]¶jJU]¶ÿ•ì'-¸~Póð¼ýÞAéZ ÿ•cí£G?v c%G?¾/¶ªô¸*Z ÿ•«Í‹y¸~Ê}È ÚÙÒè:Ë£‹qà‹y¸~P*cí¶ªÿ•«Í¾/jG?æÅZ ŸåG?ƒ7ù'ŠóØÊÞA{õBÐ0ôýiý=«ÍæÅêæc%ì4ÓdjWHËDŸåÿ•"¾ÞAJUø=ù'ýD¼ácíìpÕ-›u†SxZJUʾ/ ÊÚæÅúïîúïqà"¾ˆJU"¾-›]¶:JUgBЃ7c%Íêä¯ä¯±ò£‹"¾DÞAÓdQ]¶"¾JU£IØu†Ñ¦_‹y£Iv 6èýìËËBÐù¦_ƒ7£‹u†¶ªø]tJU±òcí'-ÞAÓdÞA"¾-›Ú=±<Ód £‹u†ØÓd¸~gÍê… &"¼á]¶îJUø¶ªu†ø GÓdÍê]¶—3c%êJUøZ H :Q6è¦_¦_æÅu†Z &"±<£I¹Àã£Ij«Í&"¶ªHˆ¥¾/‹yÞAÿ•u†Êj&"ÚÝÚÝc%xZì4ÙÒZ ÚpÕô¸Sä/oÓdˆ¥ˆ¥: ¾/ G=JUjËu†u†ø¦_jQj±<ÿ•Hcíc%—¹À}È­¾/:a:ù'Ñu†¶ªJU¸~u†-›ÞAJUJUù'6èËûøSäÚZÿäòÕôøaˆBЯî:jS"¾ÕôU2¦_QZ HäòK'-JU/oÛ¶ª¶ª}Èqà]ùÚÐ JUÞAÐ 3{õžØ­ÿPU2u†u†qàjj‹y­}È"¾æÅ"¾ÿ¾/üqàSä&"c%SäæÅpÕ¾/* BÐBо/]t­£‹u†¶ª¦‹yÓd*… "¾OÃDJUxû䯣‹­±<ƒ7—DU2Úä¯pÕ¾/èæÅBÐæÅ¾/xZ¦_¾/¾/:¹À¶ªä¯¶ªÚÝ'-øÓdäò¶ª0ô]ùÓdÞAù'BÐQJUÚÝu†£‹£è/ojÞApÕZ ô¸©újj"¾u†"¾ÞA: ¾/êæÊ¾/ß ü  ¶ª¶ªBÐâƒ7G?JU&"ÚÝ-›pÕpÕ&"c%ì4¦ŠóSä=:ù'v ¹À]¶pÕ±<:ŠóæÅ]¶"¾ã£I¸~JUéZ pÕKU2ýcí-›ÙÒ*¯îì U2£IJU0ôu†Z "¾Øù£Iƒ7ÞAÞAc%¸øBЈ¥£‹… JU'-ã]¶ô¸=]tc%Kcí6èŸåÃü*”cíæÅ]¶ j‹y—u†¶ª&"D'-j­Ñu†Õô£I¦_¾/+ c%¶ªBÐøé-›OíU2JU¦_¾/JU: u†u†]¶ G Gcíu†ìxZ£I'-aU2ýqàBÐDÃüÿ•u†}ȸ~jÐ -›¶ª¾/ ]ùÞA¦_… æÅ]¶pÕÿ•¦Ð P G:"¾ˆ¥¾/øˆ¥ä¯BÐ/ojJU]¶BÐ>òÚãPˆ¥u†¶ª¦_jÓdÞAÓdæÅu†-›]ùjG?}ÈZ 0ô'-ÞA… l÷5£ãÚÝ˾/&"c%úZ Ñ™ñÞA/ojWHä¯c%ÞAóð¶ªBÐc%*xZcíc% Ÿå]ùè+ ˆu†Ñè:ÚÝ:ÓdxZJUäòpÕ"¾qඪ}ÈÚ Gj GìHSäʱ<3¾/ƒ7Qìÿ•BÐøD¾/JU6èu†u†Ê¸~/o¾/£‹u†ãQj GqàqàØ6èc%ìHÑc%:ÞA:ƒ7¦_Wu†-›ÚÝ”qàæÅc%Ÿåƒ7:¾/ÚæÅBÐÊacíÚæÅ6èæÅ xZ¸~ý¶ªÙÒ­ aãæÅ]ùÓd ÚÝÿ•äògù'¾/ GjZ u†¶ª:j±<P¾/¾/㣋¶ªÕôG?%ûŸåÚýÍêæÅ±<j‹y]¶¶ªˆ¥'-ÞAß Ø6èìÚÝÞAÓdPä¯-›cíJU*«Í¹ÀéÚÝqà¾/+ P­ D3Ø]¶«ÍúãpÕ«ÍJUÞAjc%«Íüô¸ä¯ÚÝÛK:¯îÚÝ*äòc%v ˆŸå&"ô¸"¾ˆ¥ù'*ÞA/oé-›H}ÈÞAjù']ù-›{õ¯î… ù'óð&"ù'c%>òÑ}Èø3Z !öxû j¾/¦_… ÚÝÿ•Ú GèZ u†ÚDJUJUÞAJUÚÝu†Ÿå Úêæø GÃüâê¼áOëÍÞAì4c%ô¸±òì¯îOøøãiýU2䝿Ÿ~ Géÿ•ˆ¥¼á­ÿ'-ü&"D—!ö'-&""¾ä¯øSô¸"¾ØJUJUxZDK"¾«ÍÊ­¾/]¶ÿ•"¾'-+ '-Ód¦_v Ú«Í]¶c%ù'%ûÚÝpÕZ g&"£I/o'-¯î¶ª6èÆö… Р䯹Àv ¾/¦_jÚÿ•¹ÀpÕZÿ GP£}ÈýÚÝ+ &"¾/Ê趪u†BÐBÐaJUPÞA¯îúïBÐ&"ÞA6è˶ª¹ÀpÕÚÝD:¾/Qãè¸øÿG?iýÿ•u†Ú¾/:¸~£Iøÿ•BÐ}È]ùJU£I¹À£‹qàl÷¾/qüÞAì4pÕBÐÚ}ÈŠóóð]ùè G¸ø£I­¶ªÿ•Ú ‹yJUˆ¥Z qà«Í£I¸~¸~G?æÅu†ÑèìSä]tÞABÐgäòØÞAxZ­ÚÝˈ¥¶ªúÞA£I±<ØcíÊ'-žô¸«ÍBÐSä"¾ÊÓdc%±<èù'… ˆ-›ÚPU2¶ªHÚÝÚÝ”j/oƒ7æÅBУ‹v ¸~úï"¾"¾]ù­JU¾/-›}Ècí v ¯îì4g¾/¶ª¶ªÛ¸øiýxZ¸~ƒ7]¶u†u†&"xZ G¯î”¶ªcí&"£I¾/G?Úÿ•ŸåBЈ¥¯îJU±< Gc%KQéqàãþ0ôÿ•ä¯ì4¦_£IBÐBÐv ƒ7c%£¼á]¶ì±<éÚ£Q£Ia¹À-›jJUô¸Ñ™ñÚÝ G¦_iý¼ýqàBÐÚ:xZ]ù]¶Ñ0ôÐ JUjjä¯u†ô¸BÐaÓdÊ0ô:0ô¶ªcíc%ù'JU*OÃѶª]¶qàÞA¸~iýOïîK£IJUpÕ-›ÙÒG?:OÃä¯ÚãgÞA&"c%êæZÿ¾/pÕu†ÿ•«ÍJUj­]ùÞA%ûÆöqüÚݦÚÝ"¾pÕc%H¾/óð”%ûÙÒãU2xZ]ù}È"¾éß Ê'-‹yÞAÑu†Z pÕ]t¸~ÓdBÐш¥ä¯'-‹y‹yì4ù'¯îˆ¥]¶Z ä¯Æö¸~Pa+ cí ƒ7£I"¾¶ªüêæ6èøWÚ¾/Ð G‹yضªô¸óðúïÐ Ð ¾/a Ÿå£qàˆ¥'-:c%ù'䯶ª+ *U2qü"¾6è]ùQc%c%ˆ¥u†ô¸ì4ù']tPG?ˆ¥¶ª]¶ŸåÞAʶªô¸¶ªKì4¸~jaOã‹u†cí¾/è GHQSô¸æÅ5xûc%¾/]ù]¶{õ”ÚÝ… HxZP: OÃ]¶"¾Šó¾/:DSäÚÚ… £Iì4'-ƒ7Šó¹À}È"¾ÿ•ù'ÞA'-U2JUß D¸øØãýã䯹ÀU2]txZêæˆ¥¶ªBÐc%:¦_£æÅ¶ª]ùÊù'H¾/ì4ƒ7Säu†Hß ÞAJU{õŸåSäêæc%ƒ7£Iè¯îô¸{õJUpÕu†-›¼áPP£IxZ¾/ô¸u†Z ¼áqüxZ6èÚOÃqü G c%Ê6èÚ-›ô¸pÕ]tJU]¶éÿ­&"{õÚù'W"¾¾/pÕì'-'-ø]¶Ú6èjj-›u†ä¯Sä¾/¸~Ód£Iƒ7]¶¶ªBЫÍ"¾­ gc%ãDÛJUÊDBÐÙÒ*ÞA"¾ˆ¥{õ¾/Íê£I£I£I:-›u†ˆ¥pÕP¸~]tc%ÿ•u†BÐxûj¸~ÞADêã¹Àÿ•Z ÍêU2j'-Ú0ô%ûùP'-OÃÿ•ګ;/JUã]ùc%ù… qà¼á£0ô}Èô¸ýÊ‹yƒ7QËÿ•Z 0ô¼á G£Ic%¯îé"¾Â …  cí+ qà±<P£u†u†«Íc%¦_]txZ Gã"¾OÃË0ôêê*]ù¶ªÿ•âH/o¸~ÞAqàˆ¥-›¹Àv '-­PH¦Kc%BÐô¸: 0ôc%U2Õôäò *æÅ%ûK£g£ÊÊHÍê"¾]¶Ê£IqàÞA3Säcí¼ý=&""¾ä¯Wóð¯î ƒ7K‹yÊÚÝ0ô qàOÃ"¾]¶µþʃ7JU¸~裋H"¾ù'¦_JUBЈ¥¶ªBÐG?3ÞA±òÙÒÛJU'-èJU0ôãqà¼á"¾: ù'ÃücípÕÃüJUJUØ}Èqàbþ±<¾/ÚÕôæÅØ*:Æö!öƒ7ÚÙÒØ”xZ/oØu†-›Z óð]t¸~]t GpÕä¯"¾KBÐBÐÆöU2Hþ cíU2ƒ7ãÚÐ Â ¼áæÅÊÍêc%*£ÆöpÕ]¶Úc%©úÊ'-¦_'-ˆ¥-›æÅxZ*ØÚÝøÚæÅOÃZÿ6èùxZ**H]¶iý£IÃüu†u†]¶G?Pj&"Ð %û¹ÀpÕ*è™ñô¸ˆ¥¼á!öýj¸~P¦£‹u†æÅ¾/øƒ7¾/¾/¶ª"¾BÐÐ ø ¾/P"¾£‹Úô¸Íê¸~¸~Pø]¶BÐÐ :ô¸ÚÝc%>òqà¸ø£G?JU‹yQˆ¥¶ªÑ]¶ù'jU2D:D:: u†¶ª… qàî­ÿãÞA GaD6è¯îô¸ÆöÞAPJUBУ‹Z žؾ/:JU GÚÿ•6èèÞA… ÿ•Z ù'ÚÝ}Èêæ&"è]t±<]ùøóðu†u†«Íøêæj]txZZ u†ÚÝä¯G?¸~ù'Ãü'-æÅô¸U2&"ñ: 0ô¹ÀÃü”æÅÚ&" G:ÚÝ"¾cí*”: ÞAD!ö"¾ˆ¥ÙÒU2¯îÚÝù'øÞAJU £I¾/¶ªHZ -›Ð £IÓd¸~ÞAæÅ£‹qà˃7±ò¶ª6è&"/o£Iù'cíÚÚÝÊ䯣‹ìóðì4 Gù'êZÿŸå:JU{õ¶ªÑ¶ªƒ7ê¼ýc%ƒ7£I5"¾ä¯æÅ¹À6èù'G?g GÞAÿ•ô¸æÅ£‹D/o]t¦_Ÿåu†ä¯ã6èJU/oÓdâu†u†æÅG?/oU2ÿ•cíÚÚß c%ÞAÞAG?aÚÑu†¶ª: c%ÞA GJUP¶ªHÚÝË GG?qàg«ÍÛj£I鶪ÙÒBÐÞAô¸BÐÓd6èô¸è¦ê±<ü£I:Ë䝨£qü¼á¶ª­ÿî­Ód¸~¦_-›u†Z ¹À£PJUjjæÅu†-›Bмý GÞAqà­pÕ]¶jËìêæ'-䯶ª'-xZ:ø-›¶ª¼áU2a¦]ùæÅÑÙÒ: JUÞAPÊ+ cíÙÒô¸ÚÝüŠó"¾qà+ G?jß Õôù'"¾ÚÝ©úêæ6èì46è£G?Sä0ôcípÕø¦_žˆ¥ô¸Õôc%/oG?ÚSä-›ÿ•: ù'G?JU¾/úZ &" GÞAZÿÙÒæÅÚ¶ªŸå±<%û GPxZK¹ÀZ êæÞAJUøZ Z «Íô¸U2‹yJUj±<ÑÚ¼áu†Ú:ì4xZBÐÙÒQ+ ËûÆö¼ýêæ¦SÐ '-ÿ•"¾è>òJU'- '-­ã"¾BÐOÃêæÙÒ¾/¦_'-«Íÿ•"¾«Íj£I6è}Ȉ¥qàÚPÞAÞA £ cí-›u†OÃÚÞA‹y:øÞAQ-›]¶¹ÀË GJUù'㶪ÿ•«Í:JU]t G: ]¶]¶Ÿå3ƒ76èZ æÅÚ Gc%£IJUg¾/¹Àˆ¥ÿ•ÍêH¾/c%H­U2PËô¸BÐô¸*:‹yâ ™ñì3Ø"¾ˆ¥c%ù'ÞAW"¾!ö6èì4Pì4qàBÐÍêæÅv ­óðÚÝ>òƒ7óðì4!öô¸BÐ aJU‹yPÿ•u†ÿ•ÿ•D‹y]tjÓdøH¶ªOëÍqà£I3Íêä¯ä¯Ëû G¸~D"¾ÚBÐß îcíÚÝc%qà­P+ Ú"¾Ë ÞAc%Øc%¶ª"¾™ñã:HD:xZÛ"¾æÅØÿ«Ív : £IP­ô¸BÐxûˆ¥3DG? G3S**ìóðÚèPéu†Z !ö: :¸~¸~ÞA]¶ÿ•H6èì4ÞA&"ÊK"¾¶ª]¶: ::ÞAgù' BÐOÙñËOÊóQ'-ì4ÞAÚ«ÍWì4: DBÐã-›0ôJUJU£êæÚÝËì4}ȶªÚÝP*ÞAPˆWÙÒZ ˆ¥ÚÝ6ècíÃüÊ::¸ø]¶BÐ+ bþƒ7'-P'-Ëu†ÿ•é µþÞA:: ˆ¥¹Àc%PÓdÕô¶ª¶ªu†Ñc%¸~¸~j¯îÚžýHÿ•Æö¾/ƒ7xZ¾/™ñʫͶªýc%­ÿc%Ð ¾/Íêÿ•BУIc%±<]ùÚÝÛËûSä3ì40ôˆ¥iýÃü3ècí5*:+ ¸øcí!öô¸ä¯Ð c% G¾/üÞAxZ¹Àu†ÿ•"¾£IÓdÓd£Iì4ø£‹ä¯pÕxûÕôéÐ  Ñ-›aJUxZÞAÆöˆ¥éW£QiýÙÒSäØ]ùÙÒ"¾ÚÝv j]t¦_ýBÐHH-›v ¸~j!öóðóðúïpÕä¯]ùì4ù'”¾/Ð cíøøBЈ¥ÚæÅS¦_£Iìé c%¦_ÞAæÅBÐBÐ>ò"¾Sääòc%U2:JUl÷æÅu†Ú:¸~¸~xZBÐu†-›H¶ª G£IJUJUƒ7l÷qàl÷]¶u†bþ G¾/ì4: «Íé… ©úqüc%ø¼ý}Èô¸qàóð}È'-¸~j裋ÿ•æÅqàÞAU2è*ß Ë­OÃØÚc%JU3]¶"¾£ô¸©úSä­¦_ GbþÚÝÚ]¶Z 0ôc%ƒ7bþ: äòÚH¾/±<ØæÅu†Ë£5:‹y¦_ضªä¯ZÿÐ ÚÝ0ô:c%Ÿåcíqàÿ•â=­j¸~*ä¯ä¯æÅúï6è Ê*ù'Øô¸Šóc%ÊP£IBÐÙÒ"¾ä¯¾/¸~¦_: æÅ"¾ £-›"¾'-¾/­:ƒ7ù'ací"¾¶ªãOÃ}Èc%Ód£I!öSäpÕäòèˆc%ÞAÞA¼áˆ¥ÿ•ËcíÊKÛ¾/aqà¼ác%ì4U2HÃü%ûÆöu†ä¯0ô:£Iqà*]tcíu†ä¯¼áÞA]tJUù'ô¸u†Z >òc%øiý¶ªOÃHÞAÓd]ù«Í6èŸåß éµþ&"ÚÝ6è&"c%ù'BÐpÕ:˼ác%aÿ•Ø&"/o*5'-ÞAÿ•u†ä¯¼ý:JUJUaU2BÐ]¶¯îÞA”ô¸¼á%û£I:ä¯}Ècí'-P:G?W¹Àÿ•pÕî£jPˆ¥ÿ•]¶ÙÒ G¸~jÊÐ ¶ªÑÿ•bþU2PxZøŸåúæÅ¶ªØqüG?¾/=&"xûÚcíÚãÚqàc%ì4Íêô¸6èQƒ7P Gžô¸ÚBжªèc%W©ú±<'-«ÍæÅ}È*]tÞAË6èpÕ]¶ô¸BÐæÅ:±<:JUxZ]ùô¸u†ô¸KxZJUG?cí]¶ÿ•¶ª%û¾/j/oØŠó䯈¥qà£IJUjG?ä¯ÿ•ˆ¥Zÿaø­ø£ù'!öØBÐ:Ódc%OÃ"¾v ô¸ØÕôU2:xZú}ÈØØ]¶¼ýÓdÊÆö"¾Úƒ7'-&"góðÙÒúïcíSäŸåêæ&"'-Pø«ÍÚÝì4Ÿåˆ¥ô¸¹ÀÞA¸~¦_c%Hu†Z ¸øj¸~JUZ ¶ªpÕêæqàÞAì4”­ŸåH6èì4:­ø¼ýqü0ôŠóSä: 6èiýa&"6èæÅ]¶éß µþP‹y/o*ô¸ÿ•"¾: >òã©úQ­%ûæÅqàxZJU¾/&"æÅZ *¯îBÐOÃãxZj Úì%û]ùŠóQc%:"¾Z BÐ}Ⱦ/¦_¸~JU«Íu†¶ªì¾/¦_xZƒ7ì4¶ªu†ÿ•ãÓdpÕ!ö &"Ð ÚÝêæ­ÿ¾/U2Ð ˆ¥¶ªäòêqüµþcíPj¹ÀZ }ȼáJU‹y6èæÅÚÿ•Íê­&"c%aãè£Iì4ÿ•ÑÐ øÚÊ”>òÞA:>ò¼ýãÚÝË>ò:j:éô¸ÿ•"¾ß ‹y¸~µþZ ÑZ c%]t GG?£‹Z æÅ¾/jJU: 6è6èä¯SäG?Êì{õ¼áÞAjcíu†Z ÚÞAxZjÞAc%ô¸¹À"¾Úµþƒ7þ£ô¸Ú}ÈŠó¾/jj GêææÅìÿBÐß øÙÒSä]ùÐ ƒ7qüý%ûêæù'êæ&"G?5 "¾]¶¶ª!öl÷PJU GÚu†¶ª{õ¦_¸~JUqàBЈ¥£‹©úZÿc%JUpÕ¸ø&"äòÚcí%û±<PîBПåËûHpÕ Ð :¸~JUÛHu†Ú G¸~/o}Èÿ•ä¯"¾¼ýc%H¦_ GÚÝcí¶ªÊÐ ýxZÐ ÚóðéDcíiý£ÕôDéc%JUéBЯî6è*P3: Ð qà¸ø]¶qàÐ øc%PG?OÃ-›ÿ•qü¸~j'-ô¸£‹Ø:iýúïµþ:ÞAæÅæÅ}ÈOÃýJUƒ7'-ÞAKä¯]¶¶ªô¸¦_¸~ G¹Àu†Z DÞAPP'-æÅ£‹ýiý¾/]ùBÐ}ÈÚ­v  0ôÐ D±<£Ic%-›"¾cía6èÚOÃpÕ£IxZ¼á]ùìqà¦ÞAù'­gBÐ BÐ]¶«ÍJUc%¹À¶ªøƒ7£I¾/0ôúïêæ£*Æöøä¯ä¯ :JU G]ù"¾"¾¹ÀÛ:¸~‹y«Íu†¶ª]¶ ÓdPc%]ùæÅ"¾Ð ì4U2£BÐOÃOÃ}Èc%JU%ûÚBÐýJU£Iô¸]¶qàÞA¾/ü6è䯫ÍQ&"g: qà&"'-ìÙÒÚqàøù'Íê£ÊÍêËóð0ôŸåÛ Dc%DBиøÚBÐ6è­ÿQ G¾/óð: Ú¯îSäé: jƒ7ÿ•u†"¾ JU¸~j&"¶ªu†¶ªìj:¼ý… qüãÚÝÚpÕ¸øƒ7:c%ÍêþQl÷ÙÒô¸>òøÞA¼ý¶ªBÐ3U2JUÓd]ùØOÃpÕ™ñ  GQäòÚÝô¸3ä¯!ö G¾/ GPÛpÕÚBÐêæ¼ápÕô¸ñì4xZG?{õ]¶Øqü:JU:3Û-›ÿ•¼á©úv ì4è6èu†]¶v ¸~¸~ÊOÃ"¾-›ÙÒ'-… øaì¼á :ÚÝÿ•ÚQ¾/£I GÆöéOÃÿ•pÕ%ûW¾/£I0ôKcí¼áøv ì4ù'Úݶª]¶óðÊ&"ÞAä¯é6èD… qü6èH'-ÞAcíÚËØ ¾/óðÍêýHPj¯îÿ•u†ô¸'-¸~‹yƒ7—«ÍóðØ0ôîøDSäøú¶ª™ñ¾/Ód£I… ô¸æÅ¼áƒ7­cíqàZÿc%Êì4]ùZ ÿ•"¾ß '-¸~/o±<}Èu†ÿ•6è'-£Ij¼áô¸"¾ØÐ ÙÒ&"JUU2Æöø¶ª]ù¾/ƒ7Úÿ•¹ÀqàqüJUʫ;/:JU”"¾]¶qà­qà-›"¾U2JU¸~G?"¾Hÿ•BÐPj¦_£IÙÒ]¶¹À]¶¼ág&" WÍêÐ Zÿ:ÊZ ÙÒc%:jì4-›¹ÀÚ'-ÞAãÿ•ÑØa¸~¸~‹y{õu†u†ä¯ÞAj6è¾/£Dƒ7OÃä¯Ë'-ù'Ê&"ß æÅýJUüBПåÕôJUø"¾¹ÀQ&"þ3Q©úc%Íê"¾6èagU2: l÷¶ª£‹Úc%'-xZxZ'-… ÿ•ÿ•ÚÝDê䯼á¾/Ódj*Ñu†¶ªxZxZJUþˆ¥¶ªþ&"aQQS䣋u†]¶ÞA¸~jc%æÅ¶ªô¸6è¾/JUWÙҫ̓7%ûu†¶ªü¾/JUxZÞAù'¸øæÅZ ¹À%û¯îô¸aÞA£I:qàÚ6è&"&"øúïcíËOÃ6èc%G?ˆÙÒ*'-Æö"¾¼á%ûjÓd5cíÊÕôOÃãBÐ6èß *U2/o¦_-›u†ô¸£I¸~¦_'-}ÈH¶ªã3ì4ZÿËÕô­ÊSäZÿøJU¼á]¶ä¯SäH6èc%­ac%c%&"0ô-›ÿ•æÅc%j¦_ùóðØô¸6èv : ¾/¾/ÕôžÐ ¹À-›BÐß ÞA: DÚÝæÅ¸øƒ7]ùBÐBÐ}È j¹À«Ív *£Ic%6è«ÍØ"¾ä¯qü&"¦_xZ‹y¼ýHu†£‹äò]t¸~¦_Ú¶ªBÐ%û ø c%Æöl÷DQcíô¸ÿ¾/ÞAù'iý«ÍêæÍêÊ*ÚݫͼáBÐý”ù'xZJUÞAæÅu†Z úQ&"D ¾/¶ªˆ¥Bо/ GxZóð"¾Ëøa"¾}È=: G? Gv ÙÒBÐÿ•]ù:JU'-ÚѶªæÅÿG?/o±<ô¸"¾Z «Í&"JUÞA¸~:Úô¸£‹ô¸óð¼á6èl÷G?£IJUPøu†u†]ùP‹yÓdØu†¶ªÚ¦_U2gÚ¸øqà¹ÀpÕè¾/:±òä¯]¶ØÛU2PJUù' ¸øÕôô¸Ú]¶؃7¸~]tPæÅu†£‹Bбòcí0ô«ÍÆöúï£I£I0ô䝿Åc%&"­ü!ö¼ý'-&"qàpÕ¹ÀSä£I6èä¯ÃüPP*c%aÙÒ«Íú… ô¸£‹qà¸~P%û«Í6è:g¾/P¦_Ê-›u†æÅU2c%ì4 G}È£‹£‹”Ód¸~ÞAÚˆ¥¯îqàJUJUÞA%ûZ HÆö£Iv æÅæÅ]ù¾/£IU2… :Ð ¶ª¶ªÍê:”ä¯-›èø£a*:c%¼áÚÝbþÐ è"¾"¾]ùBÐÚÝËû¦_:ø}È}Èøƒ7ÞA6è¹À6è=©úcíÍêÊ㈥¸~*0ô-›¹ÀZÿjJUJUc%ô¸H¶ª=¾/ÞAúOÃæÅ0ô䯅 ¦_ GÞA¾/ËËË&":D}Èé«Í]ù±ò}ÈZÿqà]tJU㶪]¶Û¾//oc%ô¸ÿ•]¶U2JUJU¼ý"¾qàˆ¥¹À¼ý: GÞA¶ªˆ¥Úý:Ód:þ}È"¾æÅG?3Oã‹ì4ãù'¾/:Q:0ô"¾¹ÀÃüé5ÚÝþ £I—ÚcíÚÝ&"£Ic%æÅ]¶-›&"Pì4ñBÐì4©ú6èÿ•ø/oÊqà¾/µþúqàpÕ0ô6è™ñÞADˆ¥u†¾/ÞA¸~¦_£I&"0ô]¶¶ªµþ*D}Ȉ¥Ñ©úù'&"*ÓdÞA%û}ȹÀ3U2]¶æÅ G!ö6èþc%BÐ"¾qàjc%úïã&"æÅÚݾ/'-Ë]¶ÆöPU2"¾ÿ•cígƒ7¦_3ì4èZ -›KÚÚ¶ª” G: BÐÞA£I GQâŸå˶ªÑu†:¦_¾/:U2­"¾Z ¶ªJUjj{õZ u†ØÛù'ì4D+ ä¯ô¸ì4aBÐ«ÍæÅc%c%*:U2ø}Èiýÿù'æÅÿ•"¾ÚxZP/oîÙÒ}ÈÙÒÐ µþÚúïè±<ì4:Ëu†ô¸JU¾/c%¹Àý£IžÍêËÞAêæì4U2™ñä¯ÿ•Kظ~ G¾/Ð … ÙÒ¶ª{õÊJUJUæÅˆ¥u†¼áóð¸~PJU:"¾ô¸¼áDô¸ä¯Z ¸ø!öU2DJUúô¸£‹{õ£I¸~øØHcí'-G?c%Ð ÚÝ"¾¶ªécí: ±<&"ø0ô… Úù'v j0ô]¶]¶DÍêÑOïî'-c%£I]t±<¾/%ûä¯ÿ•£‹«Í6èxZc%ÞAc%ýOÃcíì*:£IOÃu†u†ÞA G¸~xZÿ•ô¸"¾0ôHÊc%*+ Zÿø3qàKgSä¹ÀZÿÞAÓdÛÿ•u†¦c%‹y:c%ŸåcíÚþU2 Úô¸ˆ¥Ú£ÞAù'­ÃüBÐpÕÐ 3ãOÞaì4”3™ñ]¶ˆ¥¶ªÊ GJUù'Ð ÿ•ÚÍê*üì4ô¸u†¶ªù' Gj'-3¼áêæØ: ¦_µþ]¶£‹æÅ0ôU23ÙÒ&"£IÞAa£—äòˆ¥Z ¶ªP¦_ù'W¯î-›¹ÀBÐ GJUG?KæÅqàg£I&"”ÙÒô¸ä¯Bо/xZæÅô¸ˆ±<¾/±òJU£IqüÚÚK}Èì4G?WËûcí©úù'U2cíOÃÊ6èýÿ趪cíóð±<ÓdxZ£IBÐÿ•"¾æÅ£ù''-::]ùpÕô¸¼áæÅ©ú}È:ÞAj±<­G?óð䝿ŝî Ø"¾£‹Õôì4P¸~ÞA¼áu†ˆ¥BÐxZÓdc%¶ª¶ª"¾êæ¾/+ ÆöÊpÕc%c%'-ÞA¾/ä¯ÙÒ-›BжªDÓd]tøä¯ô¸]ùÐ Q˸øQ:þqàê"¾Zÿ{õ¼áô¸ä¯JUì4:ÞA G'-ú¶ªu†ÚýË*:3æÅô¸aÙÒQJU‹y¾/]¶ä¯ÿ•&"5H¼ýU2G?êæ«Íˆ¥ÞAjU2ìu†¼á¶ªøÓd¸~ÞAù"¾ˆ¥Dß ô¸£‹ŠóÞAc%ÆöÐ ¦_jäò䯈¥Ú]ù Gc%ñqüBÐBÐ ŸåÚÝ—&"c% GÛÚcíc%"¾¶ªŠóƒ7ÓdÐ "¾Z £¾/WBÐDô¸>òʱ<ÞAËû¯îJU]ùHu†ˆ¥+ xZ G¸~/o±òêæ¸øøPxZÙÒ춪Õô©úŸå¯î¾/ÞA¾/ÛBжªæÅWÚU2]tÓd¶ªu†6èý*c%ÞA©ú£‹u†™ñU2ƒ7G?/o6èu†¶ª¦xZÞAæÅu†Æöñ±<©ú0ô¾/ýì4c%0ô¸øqàu†ô¸&"H£qüø¸~:ä¯H¶ªÊJUŸåBЭÞA­ã]ù*DËcí… 0ô¶ªô¸JUý«Íù¾/]t¾/ÚÝKÍêZÿ… 6èOÃÞAì4êæÿ•¶ªD:'-JU¸~aZ u†¶ªÞAJUøƒ7ÞAËu†ˆ¥ì46è"¾*Q£:±ò è¾/ñ"¾îc%¼áÚÝBÐc%£I£I£I£‹¶ªããÚÝø*Êô¸SJUäòxZ'-¼áu†u†êÞAxZÐ c%JU"¾%ûQ£‹HØU2£¾/ÑBÐ G¾/W3G?xZ­ÿ•ˆ¥:”êæä¯«Í:±<عÀcí‹y«Íˆ¥ƒ7'-:{õƒ7JUD-›ÚÞA‹y¹Àu†¶ª*Pc%â¾/jjBÐ"¾OÃ"¾ä¯ÆöJUJUÚô¸0ôG? Gø&"&"ì4ÙÒu†u†::éêæ©úÓdƒ7¶ªÚ'-P3æÅSäa«Í}Ècí :]ù"¾Ê‹y—Z -›pÕG?ÞAøÆöÊ]ùß ž򾁦ªcíÞAa«ÍêæÞAU20ô"¾êì4óð}Èì ÕôW¼ý¾/ù'¼á¶ªì¸øc%ØÆöD øËû£c%Hý'-£IHu†u†Ë:£Iž¯î¾/¾/%û:HcíZÿ"¾éc%¯î¶ªÍêÿÞAJU£—èèêæ]¶Íêúý GæÅèSäOÃ… a: GÐ ä¯SäDù'"¾v 6èÙÒã:*ì4ˆ¥u†'-'-¾/î©ú:ÞA­¯îpÕæÅSä]¶Ú&"Æö«Í©úÚÝ&"]t:>òè%û*ä¯u†«ÍÊD3­'-¯î-›"¾'-JUG?ã]¶Ÿåø¹ÀæÅ¸ø&"*™ñc% Gl÷BйÀ6èù'Ê=ÚÝ]¶5ÞAøBÐêJUiý-›ä¯Íê¼ý¾/èc%JUv ÙÒÃü+ '-¼ýZ ¶ªcí{õqü'-]tóðæÅcíc%'-SäKBÐóðc%¾/ÊBÐ}È£PËûÚ]ùä¯ÛêæW*Zÿã±<ÓdQ™ñpÕè:ZÿHu†ËÊ Ga*¾/&"P6èqüæÅ¹ÀOñ<ì4cíu†ã¾/¾/*ìQù']¶u†QG?£I¶ª¼ýBÐì¼ác%£þô¸¦ì4£>ò}È:£Igˆ¥-›±<ù'Z -›ÚÝ­JUýc%xZ¾/éc%JUc%u†u†ÿ•ù'ÞA:¶ªBÐÞAj… ý¦*ÞAqàä¯BиøÍê>òø G¹À"¾¯îPúô¸ƒ7£Iô¸«Íô¸ƒ7j: úï… j¼á-›ä¯iýDc% ¾/OÃô¸‹y ¶ª¶ªpÕÞAG?æÅ :xZ­ÙÒÍêpÕãSäÚÝÊÆö¸ø¦_Q­ÿ"¾Íê:¾/Æö¶ªô¸ù'£Ic%0ôÚÝì ÚúïjqàË£‹ˆ¥c%ýc%c%±<ø]ùH+ ƒ7æÅZ ¶ª¾/­"¾ˆ¥cíPÞAÞA*ìãBЯîxû£ß è3&"]ùä¯OÃcíc%JUø"¾«ÍWø/oSä]¶¯î­ì4ãqüZÿô¸ãµþÞA:Hcíþcí ì4¾/'-ˆ¥H¸øZÿ6èaxZ bþÞAc%aBЈ¥-›"¾Ë3xZ¦_æÅô¸ü¾/P… OÃÚݾ/'-ŠópÕêæ5¦%ûc%ZÿépÕæÅ0ô/oøÚ£Û0ô¯îøc%BÐæÅéããc%Õôø:øqà¯îÊcíqà"¾¼áÊqü* HSäú:P¸ø-›£‹]¶ '-ù'c%pÕˆŸå£IQcí SäÙÒŸål÷G?&"ÿZÿÊÆöÍêúï:  ¶ªBÐù' Íêì4¾/cíîc%JUÍêô¸¶ªSäqüƒ7ô¸ˆ¥qà:JUƒ7QÆöË˃7:—ÚÝù'*!öˆ¥ÿ•èÍêÙÒ¾//oËÚ±<£ÊÛ—øä¯u†æÅj G:qà]ù:éô¸¾/:ÓdpÕu†Oøø£ƒ7«Íã¼ý… '-G?£I¹Àu†pÕ­BÐË]¶óð/oxûô¸Ÿå¯îƒ7PŸåpÕiýÊ:Šó: "¾"¾!ö”ÞA}È£‹5JU&"£IÚÝÐ ]tqàÑÊ!ö&">ò]¶ÆöÞAùÚ]¶6èÞA¾/… ¦_c%ô¸ô¸Ñc%j : äòèQþù'Qù'ÿ•Ñø¼áÞA£IQÆö]¶G?ÓdPô¸u†: ƒ7±<îóðþ"¾"¾3ÚÍêØU2Ú¼á­pÕ&"0ôaƒ7qàæÅ¼áʵþÚSä*P«Íÿ•ØÞA£IgOÃêæ 6èWG?JUìpÕc%Hu†-›'- GxZJUZÿ5pÕÐ P'-u†u†&"ù'ÚÝñcí¾/ÞAìæÅì4ƒ7ÞAعÀ: &"êæOÃÍêPãZ ”ÞAxZ£IBÐ]¶¼á6èéc%¹À+ ¹À¾/±<¦¶ª"¾Pc%*:¾/舥ˊóîŸå¶ªpÕÓdÚŸåÓd Gv '-Íêä¯ÚÝ]ù!ö'-Sú&"Æö¶ªqàU2‹y GcíZ ˆ¥­ÿc%3ü Æö… ­PÍêä¯OÃã¾/cí"¾G?ù'ñ… pÕø:Q6èOÃÚ¼áù:èÆö: cíþ3SäŠó: -›ã=—±<¦_Ëû-›"¾SäÞA]täòæÅóðêæ%ûÕô­ÿ ÊJU ô¸Z Sä¼ýè:c%&"¼ýW±<36èéùDqàÿ•u†Ëj:Sc%ù'¾/èèc%&"æÅ䝯öSÚÝqüWÚ¼ýúïZÿù'±<¸~Ÿåô¸éZÿÞA:«Í"¾ÙÒŸå*'-é6èÙÒ¼á øHê£Iù'ÿ•ØSäU2G?c%¶ªÿ•!öÊÞAPD'-]ùÚÝiýqàÚ݈¥]¶DqàÞA6èìPÊ%ûƒ7¾/:"¾u†pÕ]ù0ôˆÚÝ0ô]ùc%±<ãcíK±òPBÐ-›ì]ùU2JU죋ËûØ—JU¾/]ù}Èêæ±<£Iˆ¥£‹]¶&"øóðãè:£Iäòô¸!öù' «Í¶ªu†pÕDP£IÙÒ™ñv ì%ûË«ÍÞA¦_"¾¶ªùæÅ¯îc%… U2ì4ì4æÅOÃKÊ>ò ¾/¯î¶ªZ ¸øjÞAô¸pÕÚÝ:ÞAHDÐ ­µþêæ!öcí]ùØ«Íô¸BРU2¦_‹yÚ¼ý}Èʸ~¸ø-›¶ªž&" èƒ7cíBЙñèƒ7øQ¦ˆ¥]¶ŸåÚÝ£I*Q>ò ãK*cí!öc%ù'óðô¸"¾žøì46è]ùùæÅæÅBб<jøã}ȹÀD:êæÿ•¶ªŸå£I¾/OÃù'¯î±òúïêæèS6è¸ø*JUêæØDì46è+ 6èÚ]¶-›6è­xZ/o/o&"l÷u†ø: ã™ñ™ñèc%«Í {õc%xZ+ ÙÒZ "¾H&"U2]¶3¸øß :ÚÚ G­ô¸èSäÍê… SäbþøWc%&"W£Iˆ¥-›¹ÀøÆö: v Ód£I6èOà ÊÛÑ}È}È0ôc%JU"¾Sã«ÍJUc%”Pˆ¥"¾&"DìDU2c%]¶u†¶ªâxZµþBÐJU:£‹xûã¾/xZQù':ÕôÍêu†ÿ•¼ý+ &"¦_ GBÐújãSää¯"¾l÷™ñËû&"£IG?'-¾/c%Ëu†Ø G: pÕÞA}È:ˆ¥ô¸ÞA:JU«ÍQ*ß ØOÃSäqàÊ:¾/*¶ªu†pÕÞA'-ù'ÞA‹y-›}ÈSäU2*Z ãÃüqàZ ØD:PjèŠóÚH¶ª0ôW±<¾/ÃüP!öu†ÚÝJUxZ¶ªBÐ{õÊDÿ•l÷: '-ñÊ£I¦_ÿ•ÿ•£I£ÚÝ"¾ÞADqàcíaÃü‹yÙÒÑ™ñ6èÊpÕ¼áJUc%™ñc%*ô¸£‹OÃcí:… j£‹6èBÐG?Qcíc%ZÿÃüHÕôž&"µþHÆö}ȶª«Íì4ì4]ùQDù'qüWHø'-Ë}È: ¶ªpÕ!öÚÝÞAJUP6èãô¸"¾¾/5Sä”'-BÐqà£c%c%«ÍpÕWW + ìä¯0ôH'-cí!öìÚ&": ÊQÊŸå}ÈÚÝÛDQÊqàÿ•BÐÚÊ:£Iƒ7c%qà%û鈥Ëcíø3aù'BПåDúïì4: pÕqàéDÍê>òKQBÐÚ¼ýÆöƒ7: K*¶ªß  ù­gc%£I3ô¸BÐOüýcí3è&"WJUÍ꣋úïÚþc%­øÚÝÚ>òc%c%¾/"¾Ûqà úÙÒâ:Ú6è6è-›&"ŠóÞAÿ£{õ]ù=éqà: ø±<6èÿ•ô¸Ú]¶c% Gù'&"W: BÐpÕ™ñpÕØv ¹Àóð=ß *JUP}ÈúﶪР:¾/žcí¸øé{õêæãÆöâøW=ñ£I6èô¸éqàù'ÞA'-Æöÿ•æÅŸå&"±<èì4ù'qü”!öµþqàéOÃBЯîãWU2­ì4 G±<3H䯫ÍãÐ bþ¯îÿv QŠóËô¸Ð :::£úïcí6è0ôüZÿŠóâc%ÞAüZ ÙÒäò*ý]¶èiýËûì4gƒ7c%êæËÚìÚÝSäŠóQ3 *ʶªô¸Æö—'-èÞAýZ «ÍóðÊù'úïc%QÍêµþÆöcí: }ÈQ OÃô¸qàˆDì4¾/bþŠóW!öa¯îéÛ"¾u†Ú… PxZì4ÞAU2… BÐ"¾ì£þÿ… ¦äòô¸]¶ U2 G¯î'-=ù>ò ñH¯îéWÊqàBÐSäl÷'-&"ê'-l÷BÐcíãù&"—c%Ê6èô¸BÐÃüèøù'*­ýÚËqàñÚ{õg Íêã6èµþ c%ÊWÚpիͼý èaQø¶ª"¾Ÿå ±<ù'è£bþcí¼ý”S£úï £Ÿå«ÍBÐÆö=]ùc%c%ù'£îZÿدî ]ù6èOÃqàÛâÊ3¾/ƒ7µþ¯î6èŸåÛxûÊÐ cí¼áØÆöWñ*c%ù'ñËû%ûøô¸ã{õc%¾/W¦ìpÕ¯îc%'-ì4 ÿcíØóð¯îZÿ=úBÐæÅÚݼýc%¾/ì4&"… âúïqàóðìêÛ>òÐ 0ôÚ6ècíäòiýø*ÊÆöŸå¼áêæ¯î¼ýH£Hã{õ]ùÕôZÿÊaÕô¸øã{õêÊžl÷©ú{õ™ñËûËû6èˆýß è3óð¼áSäËûÐ gø óðcícíîÊQîÐ gÕôóðŸåóð£KQñù]ùñÃüÊD ”¸øSê]ùcíÆöqüß ËûøÕôcíZÿQDDWcíéÍêH%ûéÕôóðã™ñ5ù'D]ùl÷ñ—Wqü!öóðêæ¼áQaW0ô0ô0ô%ûqüDüÊùcíúï{õÊóðÆöê]ùãÍê0ôbþD­]ù]ùãìÍê{õÛ™ñxû¦øú+ ý3Dbþ ùúcíãcíýDøúïéµþa : 5Ãüùøè]ùŸåÚÝŸåŠó©ú èH 5âäòcíl÷0ôÐ ÊñKäòóð—ß c%­ÿóðÿ¼ý¯î3äòÕôÛøˆKê£ß QÿÍêSäcí{õ¸øH=ZÿêZÿÕôiýxûqüHýDiýDìãÚݼý™ñ!öýD{õÆö£ac%øHÚÝÚ¯îéø+ ¼ýé¼ýÆö …  iý¸øµþ£Õô©úÐ £übþÕôùqüýbþ]ùZÿl÷cíÆöù'… ÛÆö]ùKW¼ýÐ ú0ô0ô©ú]ù: : øc%ß cí%ûóðøÆö]ùHˆ¼ý—+ ùü]ù: Ê+ ]ù=ù]ù>ò+ ý”Wüãqàì¯îîù'¾/Ð Zÿú!ö%ûÐ 6èÍêì]ùúéüÿ5ÊÐ Q©ú>òäòóð¸ø™ñÃüµþµþâ©ú¯îã%ûÛß þ]ùóð6èÍê5!ö%ûÿ6è¯î¼ýH+  Ð Ð H: ÿü0ôl÷6èSä0ô¼ýSñg%û: agÆöŸåÚéú 3… Šó—Kú ø­ÿl÷0ôúïµþqü v v ü£{õ¯î{õÐ îˆSþÆöS­ÿ Hl÷SDñäòü : 3Ê™ñcíËû0ôì¯î+ aèî¼ý™ñóð¯îóð0ô¦—ùÛ… 50ôW¦Õôúï6èþÆöqàìÃüøaQD¯îÆö]ùK ­ÃüSäéã6è6èäò]ùøc% ýýúÆö{õúïü=]ù¸øž]ùúïþiýQW]ùÛv ¼ýqü]ùýß úÆöÍê0ô¸øÆöW­: Dµþl÷0ôú]ù—Û£µþ5Ëû]ùžc%a: + K¯î6è¯î0ôž: µþ=l÷K: : QaˆŠó>òÆö>ò¯îñý5ˆ”¦0ô6è0ôgQÛ%û¸ø>ò>ò™ñÿ  ñÿ0ôqàŠóŠóÿ µþ=—©ú!ö6ècíÃü©ú: ýùK%û©úZÿZÿúÿâcí™ñ££ gHiýž¯îŸåã]ù 3èß D]ù0ôù£îZÿK—µþýcí¯î>òHÐ : îl÷©ú{õþDH%û]ùl÷ñß —v Ëûùþ0ô­ÿýøß ¦cí>ò!öÕôŠóýß ÊH]ùˆv ÃüêÛúøÆöì6ècí£ èÐ ”ýüóðóð0ô!ö0ô™ñóðñ ”îqüäòìµþù!öZÿ{õ©ú—Æöþþ©ú{õiý]ù£v : ¦êâ]ù>ò!öóð¼ý—3â¼ý]ù{õbþZÿîW… ž!ö%ûÕô­ÿÃüâ—iý©úqüÛ HgÛD D0ô¯îŠó0ôüQ: … ñ]ùú£ß ß Û£5êËûqüâxû{õþSýHÐ Ký£êñ¦+ + µþl÷ÍêÆö¦ñDÿìÕôZÿKîÊÐ W QÛ™ñqàãóðýùúß ýxûùÆö©úÛ¦ýÆöqü%ûW”Ûäòúïl÷%û©ú¸ø{õ¦ÿl÷¼ýþÛv l÷!öH… H£bþcíÍê0ô¯îD îÊß ZÿÍêSä0ôËûxûùv + Sbþxûbþ©úD  : {õiýH£Dú]ùÿ¼ýø%ûâWËû ­ ”iýì¯î¼ý5 ùúú%ûKîžHQ K0ôcíŠóýËû¼ýˆ£v D%ûËûäò!öñýxû¸ø: Ð â!öÆöl÷¸øÕôÆöµþˆiýýv … £©úäòÚÝSäúïñQQî£qüóð¸øø!öüž——%ûZÿ¦ÕôúïìÃüîH5ý]ù%ûóð0ô{õ%ûÐ Ð Zÿ©ú%ûý0ôËû%û0ô¦3 Q3”0ô™ñø0ôúïl÷— Êè v ]ùóð]ùŠóZÿ”5Q£WKxû­ÿß î=©úl÷¸øSÐ : Æö0ôøxûv Ê ZÿúÍê¼ácí¸øúï©ú: : ÊH¼ýËûÆö!ö0ô]ùñqü¦£µþøqüúÆöúl÷Šó£ îžÆö¯îóðqübþl÷©úD£ Wl÷¸ø¯î¯î]ùúÃüHWWÐ ù0ô]ù©úËûþýËûùß Ð î%ûŠóÆöl÷þ¼ýÃüþ—££5”¸ø­ÿ¸ø]ùñW£%ûÕôÿ£Ð ¼ýËûù: îxûcí¯îÕôµþ+  Ê+ ZÿËûÕô>òqüÕôú—Q”©úóð%ûDDiýÿú]ùv : £ ýl÷úï>ò]ùù£ê¦žüóðŠó=WâêD¼ý©ú0ô%û££ÃüDù%û¯îììŠóÕôl÷ê ­Û¦Æö™ñ]ù]ùŠó¯î0ôcí]ù Êv ýžKùÿ!öl÷=WDDxû]ùqüDú©úþHÐ ”ù0ôÕôH Ð : : qüäòÆöú—ññ5+ îùý: HHW¼ýËûiýÃü0ôqü gÐ : K¼ýbþý%ûËûübþùþKýµþËûÃüùËûúÃüZÿ¼ý+ Û©úqüD%ûl÷©úÆöÆöÆöcí{õZÿî: W: îñ¦þ!öcícící{õl÷K: :  : l÷!ö>ò¯îóð0ôÃübþD: H:   qül÷cí>ò%ûž­ÿËû%ûQÐ þóð™ñê: W©ú0ô>òüÿùD: : úËûDWùùxûbþâv ýþø0ôÛß £î=µþý5bþZÿ£l÷øñ=£… gQQÍêêæ6ècí¸øâÐ £îDW  =Û5S¸ø6èêæ¯î]ùâ”W=5H: Ð Dóð>òxûÃü{õél÷¼ýê+ Ð : ËûŠó¯îcí™ñ¸ø¦H££—!öÕô]ùµþ¼ýÃüqüÛî… … bþúïìËû¼ý­ÿKËûDqüøÿ : Û¦Ëûµþˆù¼ýµþø0ô0ôÆöý Qß Ãü]ùËû%û]ù™ñìZÿQÊÊîKÿ—¼ýúýxûêW5î”… £úcí>ò5Ð Ð ß žËûóð{õ¼ýbþÛHÿùqübþ­ÿüxû%ûž5îv : ÛþÆöäòcíSä6è!öZÿˆ£: Ð Hv âl÷™ñcí0ôú=£ýZÿ!öxûZÿÕôcíéø5”W… ”üÛËûüW+ + 5©úÕô™ñcíŠóý¼ýD£ ”Zÿ%ûDqü!ö]ù%ûÆöñ””Ð Ð —]ùäòúïˆýgî­ÿ¦¦Û==Šó¯î]ùñ: 3… 5]ù0ôøZÿHWµþ]ù©ú5Ð v Zÿ{õ]ù]ùž+ µþ¦Zÿ¼ýøúýDî—¼ýÿÃü]ùxûqüÃül÷l÷—Ð £: =ú0ôúï>òäò!öúÛWÛWýžÆöÆö>òl÷ÿú{õ¸øZÿ5: £þËû¦SDbþ™ñcí™ñ¸ø£v … ê55S5ý: ¦©ú]ù0ô¯î¯îqü¼ýžý£êñ”… Ð Ð v : ñ%ûý%û0ô6èì]ùD… : £Ð : Qg£Û©úúqüýËû­ÿù¦£ýZÿqü¼ý5£: : DÛDµþÃü©úÕôÆöÿD5ñùâ—ÿqüiýiýl÷]ùWÛµþ]ùxûž£âþSÃüÃü%ûl÷úÆö0ô¸ø]ùZÿÐ HK¼ý¼ýÿiýl÷Õôøø{õ¯îÆöþDÛg Ð ¼ý0ô0ô]ùÆöÆö>ò0ô­ÿ¦Ð £ù]ùúñ­ÿ¦ùù{õ6èl÷: QQD©ú©úqü¼ýùýÿ¼ý5: H”£=v =l÷]ùµþSDKD: úþWÿž5WÐ  ß WS]ùóð0ôÆö¼ý¸ø{õÆöDv Hùýv : Ð Ð —%û©ú{õ]ùËûÆöcíÕôÿ=£=ñDÛî5µþµþùþŠócí]ù©ú]ùqüêZÿ]ùøÆöÛß ùbþ©úäò¯îúïÆöýê: î v ¼ýÆö>ò™ñ™ñóð]ù5Sqüâ 3Q£ÿþÕôúï>òýSþÆö¦î£=: HêÛ£Hž©úÕô0ôÛÐ î£: DËûÿùê£HýD—ýêËûl÷SSžý£Ð î: ýÃüê]ùÆöú>ò™ñŠóqüß Q=5îˆWê¼ý]ù¸øÆö©ú0ô0ô{õ]ùiýýžÛ: ”ù¸ø0ô!öøqül÷µþDbþü]ùÃüÃüž¸ø%û=”­ÿ]ù0ôl÷øÕôËûú©úD£+ H¼ý¸øbþñú]ùäò!öbþüÿ=µþý: … … + Ãüý”D¸øäòÍêì0ô%ûD… QQß :  Рýñ­ÿ5bþ¸øÿ]ù]ù]ùZÿ£… âD: HÐ ß +  H]ùóð0ôøÿ¸øúH££=¼ýžž]ù]ù—: Wþ©ú¼ýiý=—W: Zÿl÷!ö™ñ]ùÆöø—ý5¦qüâ… £ø0ôøÃüü{õÃü¸ø0ôø™ñËû: : £¦%ûü0ô™ñqüâ£Æö]ù­ÿ©úµþ££”£%û]ù¼ýËûµþµþýÿqü¦êž£¼ýÆö©ú5Ð + ýqü¦©ú>òl÷bþÛKý5+ ß ß : ß HþúËû%ûËû%ûËûbþ£î Ð v ˆ¼ý]ù]ùÆöúSD©ú©úbþH  ££Hñýl÷0ô©ú¸øl÷l÷µþKDý… : Hþ]ùbþñZÿ]ù©ú%ûÃü!öcíÆöÃüµþqüýÿýÐ ””%ûcí6è¯îÆöóðóðóðl÷êH£: : ñZÿËûËûâDÆö{õ¸ø]ù]ù£ÛñÿH¦%ûþZÿ{õÆö¦—ùâˆD5Û­ÿžKˆúDÛ¦Ký: ß DÆö>ò]ùîv : êDqü¸øþHß Ð ˆü{õÕôþDKù¼ýKâ—qü%ûK: ß ˆîWDiýS]ùµþ¼ý]ù]ùøl÷¸øÿ… … 5£ê]ù™ñl÷©ú­ÿ¦¸øø>òÆö%û]ùZÿÛîß H¼ý0ô¯î™ñÆöÿ{õ0ôµþ£ÛD¼ýÃü­ÿSý=%ûÕô¯îäòSHÛÛùˆ—ùÛÐ : Û=]ùóð6èìÆö… … Ð + 5ˆÛ£ÛWþÃü¸øúˆ… £ý©úiýñ: : ¦©ú­ÿÛWÛ¸ø0ôÕô”” Р£Dø0ôZÿDù%û!öüqü¼ý£v … ”¦ýxû%ûl÷¸ø]ù¦ùDùâ… êÃüžS%ûl÷l÷%ûZÿ©ú¸øl÷ÆöqüþKiý]ùÆö]ù£DÃüø¸øËû©úµþbþ©ú]ùúÿ]ùqüµþüúþˆ… âÆö©úú]ù£v Ð Wâ¼ý¸ø!öø%ûþSúqü+ g H5WKZÿ­ÿ%ûúH… îÃüiýH£ž”HK%ûüµþbþ]ù¸øúÛèQÐ Û]ùqüÿZÿø>ò{õ©úúËûDK£”£îîÐ ý¦]ùÆöÆö!ö]ùÆöl÷l÷%ûÿñÛ”ñù5£žÿøl÷iý]ùóð™ñ0ôl÷¸ø¸øúÛv : ÛDbþŠóÆöqüZÿñüÆöøý : êqü¸ø0ô!öÃüS£ýú0ôÆöËûˆHWîWqüÆö%ûù£HWËû¸øø]ùqüÛ£:  … ©ú]ù©úÿH: £W¦iýø­ÿ£Ð =W+ : £î=ZÿøŠó0ôxûDß H”WW£ñ©úÆö!ö0ôl÷iýiý: Ð £Wêñ%û0ô{õøÿˆÛÿqü]ù!ö]ùK5”îDiýýÆöl÷¸øÃüÃü©ú¸ø­ÿ5ÿ¼ýSžÆö¸ø]ù%û¸ø]ùËûZÿZÿ©ú©ú¼ýâî£DDKñÿl÷©ú¼ý0ôóð¸øbþW5£ ß DqüËû%ûùbþ5­ÿËû{õ™ñ%ûH£Ð ß £Ð WqüZÿÿD£=Zÿù=ùDýß ”ý=DD¦ýKiýZÿñ=ýbþ©ú­ÿWDZÿýþÃü­ÿDD¼ýZÿÃüü­ÿ¦ž=££ýËûü£ýKl÷0ôóðŠó!ö%ûµþDÿDKl÷äò]ùˆùbþÆöÆö¸øiýùâ5ÿ¸ø©ú¸ø©úêµþ0ôÆöúËû¦”: ýñýúýDê55qü>ò0ô¸øK… ”5KÃüDHÛDñüþ¼ýý¼ý]ù¸ø©úD  v Ð Ûxû{õÕôÆöiýW—=W: =D£î: ÃüÃüÿqüý%ûbþˆ¦WHWW£ý—]ù]ù¸ø¦ÿ]ù0ôl÷Ëûýv  £K¼ý©ú]ùbþ=ùüüÆö!öÆöcí>òÃüWWñÿùùbþÿýúl÷ŠóÕôl÷0ôËûD£”DÃü©úøxûl÷ø£¦ËûÆöÆö]ùù”gQ Ãü]ù]ù0ôl÷©úqü—êùDZÿZÿ¼ýîÐ Ûÿ—5W£¼ýqü¼ý¼ýD”£ù­ÿ¦¼ýDS¼ýH 5Dþ=” ý]ù]ùú©úµþ=£ý55êül÷ËûKýWWÛÃüKžËûbþDqüxû%ûÿZÿ=ËûµþùžÃü¼ý=D¼ýÆö©ú¸ø!ö¼ýqüÃü]ùäòxûKâ©ú©ú%û]ù%ûËûqüÿµþl÷qü——©ú¸øqüâ¸ø™ñl÷Dýü”: Ð WDùiý¯îóðÆöþWžWêZÿÿˆß £qüü­ÿ£: ÿ”žZÿZÿ: : WžSD=¦­ÿKKú]ùiý”… £—DâÛ—Ãü¼ýKiýSêW—ž©ú!ö!ö]ùKýH—­ÿ]ù]ù©úqüýSê£Hž©úäò>ò0ô©úñÐ v DbþÆöÆö¸ø]ùl÷úïäò]ùËûêùùDùúÆö¸øbþ=—ž¼ýËû¼ý]ù¸ø0ô©úDîÐ : DÃüúËûËûZÿZÿ%ûÿÿžµþ©ú¸ø]ù%ûW£… : £W­ÿËûbþÿÆö©úxûÛ£ý+ QQW­ÿ]ù]ù©úêHWDÛ: Ûbþ]ùúqüWv £DËû­ÿ5êî£D¼ýqüDÛ£Zÿ]ù©úËû%û©úZÿê=Ëû¼ý=Zÿ­ÿËûµþ]ùÕô]ùDú]ù¼ý¼ýËû©úZÿD¦Ãü]ùÿ%ûø{õŠó0ô©úýú¼ý£H£WùiýËûùiýiý%û™ñ0ôxûZÿ=55bþSWKÿ5ñxû]ù¼ý¼ýµþDˆ£qüÕô]ùZÿý: Dbþùñ—ýî£Dù­ÿ=Dµþ¼ý—£¦DZÿZÿù¦+  Ûñ—Zÿ­ÿ5K¼ýúú­ÿKÛKùÿùâ: ”žú0ôl÷: : Zÿ©úÃübþÿþý%û¸ø¸ø­ÿžZÿD—ùµþÃü]ùqü©úl÷{õøñH£KúÆöl÷{õqüZÿbþêiýÆö¸øiý]ù¼ýý: žÃü©úbþ]ù]ùüK: ýÛW—¼ý¦—KËûÕôŠóøµþW5â—£: ©úµþ5­ÿ©úÃüK££5ZÿÃü%û¼ý£”… ”Û=ý£¼ýøúÃü¼ýÃüqüê=¦—H Q: µþÆöúïú¦ÛKÃüù£: =âWÆö{õ©úZÿ¦ùÿKêÃüµþù¼ýÿËûbþµþ©ú©úÃüD¼ýü¸ø]ùúËûø]ùÿDµþ%û©ú]ù©ú{õ{õ{õÿ5âù¦ZÿSDbþú¸øËûËû©ú¦]ùÆöµþÛ: Ð … ˆZÿ]ù¼ý©úiýˆ£­ÿúúþÿýWùÛWžùDKž=ù5­ÿÿZÿâ=£5ÿ: î5£Ûñxû©ú­ÿSbþµþù£=SÃü!ö0ôiýý+  î=Zÿ©úž­ÿú™ñ©ú%ûl÷]ùbþ=WîÐ ˆÃü%û%ûxûxû©úÕô¸ø0ô{õ0ô¸øZÿÛîÃübþüÕô{õø©úúøqüD=Û=Dù]ù¸øqüH£Sqü©úúø%ûùýqüÛ”… £W£WZÿqü0ô>ò%ûÿ¦£: … ”=ÿžZÿÿ¦=þÆöÃüµþùDDê: + HDK5£=bþ©úl÷¸øqüù꣣: ­ÿ¦­ÿ¼ýËûËûZÿSý—Dý”ß : þZÿ%ûú]ùl÷ŠóÕô©úDWýDùbþqü]ùËûqüž]ùÆö¸ø¸ø%ûñî—%ûiýúøÕô0ôÆö¼ýiýµþ=—úËû]ùÿýÛZÿ]ùËû©úbþqüÆö]ùýZÿ55ù=H££%ûiýñ5¼ýÆöäò¸ø¼ý¦H”ß HD5Û=Dù¼ýSž¼ýÃü­ÿ=£W£5W£D—W£ý5%ûDH5ÿ¦¦­ÿl÷¸ø¼ýâHýübþDù­ÿqüÃüùZÿ¼ýˆH=bþZÿÛHµþ%ûøl÷øúï>ò©úD¦Zÿ¸øþý—ž5Dÿ%ûÆöÆö]ùxûþâÃüŠó0ô¸øZÿ­ÿøÆö©ú©ú¼ýËû¦”£5ZÿÃü¸øþùù¼ý¸ø!ö%ûžÛêÿ£î£”qüqüËûþýWD¸øÃü©úÿK=Ûîv + ””ˆqüÆö]ù©úÃüýqü£: :  µþúÆö©úÛ%û%ûùWß î£H=bþ©úÃüSDZÿËûø¼ý]ù]ùZÿH”££5£5¦Ãü¸øËû!öÆöqüâÿÆö!öÃüZÿbþžùxûÃüµþý¸ø]ùÆöŠó!öÃüùýK]ùÆöÆöÆöZÿ­ÿÿþbþ­ÿÃüqüKKW”HDiýËûµþµþl÷ÆöÕô{õËûWß : ”Ûùꈩú]ù0ô]ùþþDß ß ýDiýZÿDÿÛ… v êÛý5¦øø©ú¼ýþñWêêý+ ”âþ]ù¸øKKKµþDW: Û¼ý%û©úqüKêÃüþýß ý¦Sµþl÷]ùl÷]ùËûKqü{õø­ÿH£5Kø>ò!öø©úËû%û]ù%ûqüñ]ù0ôäòÆö©úDêKK5bþbþµþ=KKžÿþqüËû¼ýxû%ûËûËûøÆö¼ýS£=WWˆÛKùDKñùS¼ýbþþùˆW=ÿêêÿKâ¦ê”HH£ˆ=5ýËûþÿ¦££î%ûqüZÿ=ÛWSxûúÃüÃübþSqü©úiýêîýâKZÿñâKµþl÷¸øl÷äòóðÆöøËûýZÿþÛD­ÿ¸ø0ô¸øø©úù%ûµþùùùý]ùµþ¼ýÕô{õøÆö]ùqüî+ HWˆÿ©ú]ùÆöîWW%ûl÷]ù¼ýžH¦D£: —D=Dž—£5žžùñþZÿ=WêÿqüËûqüž£îWîÛ£: : âSbþ]ùÆöl÷úxûqüÃüÃüâ… îH: ž¼ý¸ø¸øbþDKÿþÃüxûüê¦qüꦼý¼ýñ=WÛþ©úxûbþ©ú©úqü]ù>ò{õ0ô{õZÿüÿ¦WýÛqü©ú]ù]ùÃüDül÷l÷!ö]ùµþDDâKù=SËûqüDþþËû%û]ùËûµþqü]ùxûþž”: … Wžbþ]ùqüËûiýü¼ý¦ùî”ZÿîÐ êDS££—==£HÛKZÿZÿÿKbþl÷qüùùµþý”: =þqüùKD—%û©úúDê%ûl÷WýDiý©úÃüËûZÿxû%û­ÿµþËû]ùl÷úüSDêþµþËû¼ýùZÿl÷ýýqüµþ¦ÿ¸øÃü¦££ñxûl÷]ù{õ]ùqüüúúbþ£HWDbþÿ]ùÃüËûµþDD—ÿñÃü]ùxû]ùžWýÛ­ÿ£”D£ýD—ÿZÿ¼ýÃüµþKÛ£: … £ˆHùÃü©úµþ55: %ûxû­ÿµþËû]ùø%ûSÐ Û5: H¦%û©ú]ù¸øÃüqü=ê”êbþù¼ýÃüÕô©úqüiýùÿiý]ùÕôÆöÃüü¦âý]ùÃübþþ!öúiýøqüqüÆöÆöÆöqüiýµþS£=SSDËû¸øÆöl÷øÿÛ  ý5êxû­ÿµþËûù¦KÃü¼ý¼ýÃüñD£… + WK©úbþÿDžñZÿ==ñÿ=W¦ùS=ˆ=ˆÛꦩú%ûqüùÿ=Wù£HâüÃüüËûqü=£Ð … £þµþZÿ¼ýøú­ÿ¼ýËûqü¼ýµþÿýSDÛD£Zÿ]ùl÷äòÆöÆöäò¸øxû=ùýù­ÿbþD¼ýÆöäòcíŠó©ú¦Kùbþ]ù!öSD=”Û=ËûqüýþÃüú]ùWÛDþùÛ+ žÿSW£©úqüÿ©ú%ûý¦5žñÛH: S]ù]ù¼ýêW… £Ûß Ð Ð ê]ù]ù¦üµþD¦ùWýÛ=D¦¦ù©ú!ö!öKDWÛý££H¦¸ø¸ø]ù¼ýDÃü]ù%û5ýK¼ýÿž=D=S©ú0ô0ôøˆêqü{õ0ôø©úZÿDHâÿ]ùÃüÿþxûø]ù0ô]ùÆöùDâDñ]ù¸øËûýùH­ÿÃüqüZÿSbþú%ûÃüÿ]ù©úÕô¼ýýv gDÃüþñùù—Û¼ý¼ý¼ýýùK5£â=ÛW: WýWDDZÿSÃüËû£H: : ”þ{õ©úSW=]ùÆöiýZÿqüZÿú¼ý=Ûþqüiý¼ýÕôÕô¸øýWSþµþµþ©ú]ù©úDž¼ý¸øÃüù]ù0ôŠó¸ø©ú¼ýDÿ%û¼ýÃüýD¦]ù]ùþ©úùþꔣWˆ=¸øú¼ýž—xû©ú¼ý5ùÃü]ùZÿDÿÿžžùÃüDê5DKv  %ûüK5DDqü%ûÿþqü­ÿ=: v  îâùbþK… ˆSÃüDZÿÃü¼ýýú¦=Wù¼ýÛ©ú¸ø]ùiýµþ¼ýÿýD—=Zÿ¸øø%ûùž%û¸øüÿü¸øú¼ýbþbþ©ú%ûµþ]ùÆöøÃüqüqü©úúý”Zÿ%ûóð!ö©ú—5Ûžý{õÿWñüúÃü]ù]ùxûZÿžWDËûl÷l÷qüêHH: SüiýâDýHß ¦Ãüþÿùýî”: Ð … : Û]ùbþ¼ýZÿWZÿµþbþqü]ùqüý: ß £—ËûžÿqüiýZÿ¼ý©ú©úýžDýÆöýù­ÿK5ZÿbþZÿD=5ˆ¼ý%û]ù©úZÿDKÃübþ]ù¸ø%ûZÿÃüø©úÿËûµþD¦¼ýµþ¼ýü©úÆöÆö¸ø!öøÆö]ù©úâß H—ùµþÃü%û©úbþµþµþDWîâbþ­ÿâþü¸øl÷¼ýñ¼ýÃü—KDSþÿ£WÿZÿýþß £ù%û©úqüî… Ãüý: W£WˆWKZÿSWˆùýµþ¼ýø%û¦££: ÛùùH—Ãü¼ý¦¼ý¸ø]ù¼ýÛW¼ýÛÛùüúZÿÿˆñqüÃü¼ýqü©úµþZÿ—Ãü¸øÆöúËû]ùiý¼ýÃüWKÿùqüúäòÕô¸øÆöÆöýµþµþÛ”ÛqüÆö]ùD£—ÿZÿÃü]ù]ùê——þ¼ý¦ýxûµþµþiý¦5=bþµþùÿKýÿ]ù>ò!öµþ: W=ùZÿËûKÛ5ýHß 555ý5žÿDÛ=ñµþ­ÿÛH£Kžê£W¦þSiýËûiýµþÃü¼ý¼ýüDµþÃüÆöµþêß ñÿ­ÿ¦K¼ý]ùÆö{õl÷üW­ÿµþ¸ø{õøiýúú%ûÿÛýÿqüÿ¦Ëû]ù{õóð¯îl÷D: Ð ýbþý¦5Kxû©úúþW: Wü¸øl÷]ùÆöÆöÿ]ùZÿ£ýÿþ©ú¼ýH : ”Wñxû]ù]ùbþDÿñÛ+ ß Â Ûü]ùqüqüD=””Wˆ”Û=üù¦¼ýÿÿùxûqü—HÐ ñúø¦—Dˆâ—W¦l÷{õ¼ýùùñÿ©úl÷¼ýÿZÿ]ùxûDêÿÃüþ¸øú©úþžê­ÿžÿZÿ¼ýZÿÆö™ñ0ô©ú5Kiýžêý¼ýüê¦øøbþžÿqü{õÕôÕôËûZÿZÿ£êWˆD=bþÿú¸øËûxû¼ýiýËû%ûl÷]ù­ÿ5Ûˆ”Wýˆâß 5bþµþ­ÿê: QÐ + WùùDâZÿ©úl÷xû£”¦­ÿ©ú]ùqüˆW=WDêl÷Æö©ú¦ùþÃüžxûø¸øÿ¦¼ýübþW: =Ûþ¼ýl÷]ùqüËû¼ý¸øxûqüK£Zÿ­ÿý]ùËûóð]ùµþ=ýîÛùÿ%û!ö]ùbþñµþ¼ýbþÿˆ­ÿ0ô{õl÷qü¦âù]ùÿø]ùDDÿDbþK£5DÕô!öøþSD5žÃüSbþHD£ËûÃüüâ”î£HHZÿ=ýâùSýÛK£”ÿD—Ð ýqü¼ýÃüÿbþˆ: ß ýD5”îù©ú¸ø0ôl÷ÿÛùxû¸ø=ùSÃü­ÿWZÿiý]ù©úµþ¦£ýüüDþËû]ù]ùùêþK¸ø0ôcí0ôýê=K©ú%ûDâ©úÆö¸ø©úžZÿµþl÷0ô%û5W¦ÿê5£¼ýqüø]ùiýü%ûˆâžúøZÿžÿZÿüþêžDÛDHK=£DDZÿý: ñùKžDýß Ûê—H”êqü%û¼ýÃüÿD¦W: : £ÿµþ¼ýùñD%ûµþqü]ùËûêH£ñ5µþ¸ø0ôiýSK]ùúHÛ55Hµþ]ù{õqüÆöøÆö¸øµþDK]ùú%ûÿK]ùúï0ô{õ]ù¼ý£Kÿ¦K%û%ûiý¦ùDKqüÆöóðÕôqü5Û£ß HD]ùqüxûú]ù­ÿ—¼ýiýÿˆý£ùËûD: îSl÷S: + ”K¦¼ýù%ûËûñÐ … D­ÿñ=D£: Û=ý¼ýý%ûÃüú¦žê5xûDÃüµþˆ: —ü]ùqü¦5âH¼ý”££Kø©ú¼ýÆöÆö©ú¼ý5£=qüµþ%ûqü!öéìäòËûÛýˆÛâÿËûê¦l÷{õxûxû¦þÛ—ˆ¼ýý©úÆöÆöÃüW: ýÃü%ûø]ù%ûü5… =K]ùÕô©úù%û££+ ¦øiý­ÿÃü¼ýÃüß DxûùùD¦5££ÛˆKH£Dù¼ýKÿêù”g ¼ýËû©ú¼ýiý¼ý: îS{õýKqüß WùSµþ¼ý]ù¸øqüüýÆö!öž… î… î£ˆµþ]ù0ô6ècí0ôK£ù¦©ú]ù]ù©úZÿêˆ: ýúï!öê£=Dl÷óðóðÆöqüiý£ÃüŠó!ö%ûH+ =ˆââÿbþ!öúbþ­ÿbþqü5qüÃü¦HýÛµþ]ùÆöqüÛ…   £¼ý0ôúï©úÛÐ v : ùËûž££HÐ ýù!öÆöýÐ : WÛñqü©úl÷]ùÛ£%û©úüKµþø£v D¼ýÃüù¦qüqüS%ûþâžHWbþZÿýKiý>ò0ôüH£ýÿÛËûøýÿÃüþø{õ]ù]ù]ùxû: ˆ©úú%ûÕô0ôiý=: : H­ÿÃü©úqü]ùÃüqüxûiýDK¸ø!ö©ú: =Æöäò0ô¦Wß £=ùK]ù™ñ{õ0ôS”—Ëûóðêæ¯îZÿ”: H¯îÍê]ù Ê3v Ð Ð … £]ùÕôúHHWâþµþZÿþÆöqü: £¼ýqü­ÿ¼ýžýÐ ”Ûqüøl÷ÃüþÐ : Û%ûÆö%û¸ø]ù¸ø%û%ûúþî”â­ÿ©úøúùêqü>òl÷xûýD: âiýøqü—¸øóð{õ¸øiý%ûóðóðž: … ”WHÛ]ùÿþËûbþµþÆö0ô0ôÆö!öÃübþù£ùDWÐ î¸øúHÛµþùüiý=”gî0ô{õK… 5Ãü¸øÿDù=©ú©úžÐ ”””¦êWÃü{õ!ö=W=xûqüýv  ˆxû>òÆöDbþ=£”ÿ—WZÿS©úµþ£Û=ý: ùqü©ú0ô>ò]ùbþW: ü]ù: ý: ùSËûøÆöÆö0ôúï¯îŠóÆöZÿý¸øâß ”ÿÆöÆöl÷{õú]ù©ú©úÿZÿ—Û5ù£ß âü0ôäòÃüÆöóðl÷SWˆ=ˆ¼ý]ùDHv =êl÷l÷Ãü©ú—Zÿùµþ… Ð â¦DÛùWñêiýóð™ñäòKWHß + ÊÐ : £v ¼ý%ûžSµþøµþýˆÃüýý… bþ0ôóð™ñÆöÿKDKžSHÐ îS=bþ¦]ù™ñúï%ûÛHHˆZÿ5Ãü¸ø!ö%ûÃü¸øúŠóŠóóðÆöúÿbþùù¦ýú¼ýˆZÿ©úËûxû>ò¸ø5øžHW¸øÃüHÐ —ÿü¼ýÆöl÷©úúýK­ÿâÿþ¸øø¦+ ÛDqü{õD… … QgWˆÿWîµþøùDZÿ¼ýKKÛñH : ¼ý]ùl÷0ôŠó!ö%û]ùúW££5ý5¼ý¼ý=¼ýbþ©úµþµþD£¦¸øÆöµþ èÛ¯îŠóZÿ5DýD£Zÿ¼ýü©ú©úÆöÿ5µþ0ôcí0ô0ô]ù¦ê%ûø]ù¼ýîg… HÐ ¼ý0ôìú!öÆöúï©úZÿxû]ù¼ýùÃü¦… £âùÛ¼ýÆö¸øÆöþâ>ò]ùv v ÛËû>òÕôâ… îùùW£ýýÃüñ¦¼ýWîÛËûËûqü5”… : … ¦ËûbþWß ß D%û]ùÆö¸øqüZÿKËû{õqü£H=ÛHâ¸ø{õSH¼ý>òì0ôþZÿî£SDZÿZÿHH©úËûl÷µþ¦ÿZÿê¼ý%û¼ýÆöµþv : úì6èŠóµþZÿZÿý5Zÿ]ù]ù¼ý5¼ýÆö>òøýý£HS]ùø]ù]ù]ù0ôÆöqüS¦þêS¦­ÿ¼ýñ£ … ˆÿÛî ýSÃü¸ø{õøDWv Ð ý£Wß Ûü©úv Q£=øùùÃü]ùqü©úÃü”: H=¦qü%ûñ5¦”D¼ý!ö0ôÆöžDžqü­ÿ©úxû{õ]ù{õËûZÿËû©ú”gý!ö©ú¸øý%ûùD¸ø¸ø]ù0ôúïbþÿqü%û£iýú¼ý£K©ú¼ýù¼ýê  ý©úäò™ñl÷µþ]ù]ùÃü¸ø©úùˆÐ : v : þ¸ø]ùZÿ¼ý]ù©úËû¼ýîDbþžZÿ¼ýbþˆ: v ­ÿøÕô™ñµþÛHÿ∣…  =¼ýËûÃüZÿHH”HQ”¼ýÿ£ùž¼ýSD5žùµþÆöŠóŠó0ôÃüùH£bþ©úËûËûÛ”WKý¸øøüDÿbþ©úÆö©ú¼ýxûÆö¯î¸øiý¼ýî=DËû¸ø%ûø™ñÆöùHWÿµþ0ô0ôqü£HKý”=iý¸øø%û]ùúÿÿ: : ”µþ¯îóðZÿ5£ùÃüZÿl÷ø=”ß £qüÆöl÷ÆöD%û Ð ]ù0ô]ùbþDxûÿþDD¼ýˆ Q … ß —Û—ÿ¼ýÃü➸øøKýž£þø­ÿ: ùùZÿ5Ð ù5£5]ùÕô>ò©ú­ÿ+ £â¼ýÕô!ö]ù©ú!ö©úâÛ­ÿ>òŠóøÆöùÿZÿú©úüú]ù%ûùÃü{õøú—ž¸ø{õ¦bþ¼ýùK]ùÆö>ò]ù  Û]ùl÷ÃüÃüý… :  £ú©ú¼ýW={õúµþDHWqü©úÃüWß WÆöúï™ñÿÃüµþ gHµþ¼ýêv ß Û£: ¼ý©úxûÆö!öþñ£v : ß £]ù©úî+ … —qü%ûl÷ŠóÆö¦Ãüøøø©ú Ê: â¼ý¸ø¯îäò¸øžÛ£KSqü%ûÃüqüý¸ø0ôúÆöúî: ¼ýÆö©ú¸ø¼ý£: H¦¸ø¸øÕôúï]ùiýüËûÛ”ž—5ÕôÕôú¼ýbþúÆö¼ýxû{õÆö+ … Dùîˆÿù5ýl÷¸øý£ê: W­ÿ¸øl÷¸øù£5­ÿ¼ý  ”£þ=bþKžý©ú Рý¼ý¼ý%ûÆöWDD”žîQ¸øl÷S¸ø>ò©úîÐ úÕôú%ûµþ—¸ø!öKî==Wµþ¼ýÆöl÷Zÿ—: ¼ý™ñÆöK]ùÿýS¼ýñü]ùüÃüýý©ú!öúï!ö¦KÆö¼ý… Sµþ]ùüß 5%û0ôl÷­ÿKñZÿŠóÕô£Æö¸øÛ”=Õô{õ]ù%û©úÃü¼ý: îî=%ûü©úZÿqüËû©ú¦  5=WÐ Dbþ]ù%ûÃüñDSÿSWù=ý—=ˆ¼ýÕôl÷£3+ ÛÆö0ôSµþ%ûÿù¸øËû%ûÿ¼ýH… ß =¦ÕôÍêéÆö¦—¦Kˆñ=W=%ûÆö0ô0ôl÷bþÛê¼ýÆöËûxû%ûiýˆ¦¼ý]ùÕô™ñÆö{õúêß KËû­ÿÿâžD¼ý0ô©úH  + ˆÃüÆöóð{õúï>òÆö¸ø£îg ýxû©úñv µþÆö%û©ú™ñ©úWW¦Ûiý¼ý­ÿ”+ £: ý¼ýß gK]ùÕôqü5Zÿ=ù¦ù—Ð Ð Ð Húø0ô!öÆöiýÿñ—+ Wäòäò]ùÿD5xûSÆöêµþÆöÕô=+ £%ûËûDSž©ú©ú]ùKú™ñqü5Ð ”þ%û0ôê]ù%û©úÿÛ>òŠó¼ý—”ZÿÆöÆöqü©úWýˆ=D¼ýŠó0ô¦ê]ùl÷êê: â : ùžÃüÃüËûµþýDS%ûËûú]ùqüÛÐ âžËûèˆ]ù]ù!ö]ù¼ý£” ý]ù ”­ÿüüø”­ÿZÿ¦­ÿZÿËûqüÆö: ß Ûü0ôú!öŠóH£­ÿÆöxû”v ž%û¼ýËûËûbþ]ùäòqüiý¼ýÕô>ò!öÆöÿêž©úÿWDþ—5qüÆö{õù£>òÍêÆöß îÿþ]ù0ôøµþúD ýqü©úú¼ýËûý{õÆö{õKý¸ø¸øüÃüž  îýÛââDZÿWž%û=WD¦Ãü¼ýž£Ð ˆ Êgý{õ¸ø+ gþúµþ: ýýÕô¼ý­ÿZÿqüù¼ý0ôøÿÃüK£DÕô{õ=—ùZÿ¦=bþúøñ5ÿ¼ý0ôcíŠóµþø{õ¸øWDl÷¯îW+ : S]ùøl÷¼ýýZÿ%û5ñÃüÿ£¼ý©úÃüÐ : þqü—Zÿ¸ø{õÕôqü¦©úD… ­ÿËû¸øø!ö%ûËû=£: úúiýSD£¦££ñˆ… 5]ù0ô¦: ”¼ý™ñ0ô£ Sqüiýqüþ=ˆWâÿ—žDbþ: ˆWñg… ý=âl÷l÷l÷Ëûøü—ß ÛüxûµþâÐ £¼ýbþbþ—K5¦qü©úl÷{õÆö£ 5Æöú%û©ú!öäòþýýüú™ñ™ñ™ñÕôâÐ Wýêùêqü¯îìÆöWâ¸øÃüÃüý£Ð £ÿ™ñ0ô©úü¦Û£úÿ!ö>òÆöý Ð £ÿñ%û©úqüµþÆöú£ýQ: ü¼ýúbþÿ¼ý]ù{õžÐ : =Û=: l÷þ­ÿ£… Ð Ð  Hýê]ù©úýDýÿËûýÛDWÿ£êK©ú0ôÕôl÷Æö¼ýþÛý: £DZÿiýZÿiý=!öÆöÆöÆöÆöÕôÆöüùžùýD££iý¸øÍê!öSÃüiý>ò>òÆöËûùþxûùSZÿ”… 5Æö]ùZÿËûxûbþ£Ð ß S©úiýl÷žHñ!öþ… £ž=­ÿÃüÃüÿ%ûÕôl÷!öÛK=+ 5ž¼ýËûÃü%ûú5Dÿl÷ÿ… … Hv ß ù—Ð … WêÿýS©ú©úDñ”ÛÕôäò©úÛÐ Dø¦xûýß =S­ÿ¼ý!öxû]ù{õ]ùqüîv WýxûDDþ”ß Ãü]ù!öÕôŠó]ùŠóÆöl÷{õŠó¼ý£: £âÿú]ùÃü¸ø]ù>ò¸øóð©úù£: úl÷iýùß îýþ!ö!ö©úúZÿ¼ýD⣼ý!ö]ùSD­ÿËû¯îxûH : ý%ûD­ÿS¼ýß : ýbþËûù: ”ê¦úübþî ü]ùýý qüäò¸ø¦ýµþÐ ß 5]ù]ùäòúZÿÕôŠóÆöDÊê%ûÆöl÷¸øcí%û%ûî3… î=xûl÷ú™ñ¯î>òZÿ!ö¼ýü£”{õÿWÛqü]ù©úS{õŠó¼ý]ùiýÃü©úâ£Zÿ—HWZÿüú¸øú¦+ ÛiýÃü¦Ëû££Ãü>òúâý©ú­ÿ: Q ]ù0ô%û5žüZÿ=¼ýDqübþ¼ýî”: ù¸øäò0ôÿ¼ýÛ ý©ú0ô=  gÃü¸ø¯î¯î©ú£ÊÊ… qübþ]ù%ûúÆöÿ%ûùW¦îµþ%û¼ýî: ]ù0ô{õÿ£ £=bþø0ôü=Šóì]ùW]ù¸ø]ùÿ¦qüâËû¯îéúDDý%ûcí¯î©úìÆöˆ£xû­ÿZÿl÷¦: Ûµþ­ÿÛD¼ýiýZÿ£¼ý”ègSl÷©ú­ÿ>òìÆö: =¼ýÛDWÛ Hbþ]ùóð%ûú¯îúïÃüD£Â ß î%û îKý5£HD©úµþ… =D=ú%û©úž=ñ%ûêÐ =3 ùý{õ©úHÛ]ù{õ6èì©ú£: W5 ý%ûqüËû+ : Dl÷¸øýqüÃüø©ú0ô]ùÆöîþùiý¼ý©úËû%ûÆöêæéxûß ””êù¦þñ©ú!öÆöúÿD—ø0ôÃüˆHùKîîDDqü0ô!ö!öùÿ+ Ê… iý!öúï{õ5ÛxûŠóqüÐ : 5¸ø6èé0ôÿ”QW©úxû{õD+ ”Êýñxû¸ø0ôl÷Õôqü: è ýÆöcí¦iýDê5£: £â=W5µþÆö{õÆöS: … Kúüäò£ˆ©úbþøú]ùZÿiý]ù>ò0ôÃü]ù©úÆö©ú©úK: v ¦0ô¸øµþ¸ø]ùbþ¼ý=: üÍêêæ!öDH—bþ%û—Qýÿ¸øcí¼ý¦W££ÆöZÿÛDÕô]ù¸ø¸ø¼ýø úóð%ûø¼ý©úú¼ý—þù5ß =]ùýqüÛ: Q¸ø¦ Ûîxûÿ£ñÐ ÊHý­ÿqüHß ž]ù!öù¼ýDqüøKñcí0ô>òì™ñ©úù üD£êùÃüø: v Q ¯î0ôìcíìÆö”ž­ÿÆö]ù©úWÛ=Hß —]ùiý£Æöì¯îÛg¦Æö¼ý—ø£Scí™ñxûêù: Ûñ¼ýDâl÷!öÆö¦î+ ¯î¼á6è¸øÂ ”!öÍêÍêú: … ”ýŠó%ûiýW5Ûß ÊîZÿ!ö¼ýúïqü—… —Qøc% ¸øé!öÃü£îýâK]ù%û0ôl÷ÆöZÿÐ : W… ]ù©úî: K0ô]ùiý­ÿWÊQì6èiý£ýÃüÆö%û= gêÆö>ò!öl÷µþóðÆöbþ!ö{õ™ñÕôbþ£]ùqü0ôÆöúùý£­ÿ©úý: ýD0ôúïóð]ùþÆöÕôþ”W v W%ûKýùiý!ö¸øqü£xûù5ø™ñ%ûZÿñùú¼ý… ÛîK5Wl÷Æö¦bþ£ÿg qüÆö™ñxû¸øžˆÐ Kv WùS©úµþˆ Ð ß SÿZÿ]ùcíŠóúïÆöñv ß qü6ècíZÿD… ”µþùgDl÷]ùcíÕôD úÕô{õŠóiý  HZÿñ” ©úøÿ5ÆöÚÝؼáŠó—Ð Ð £Kqü%û¦Æö¦ùŠó{õ£¼ý]ù>ò¦5ùˆÛ¼ý©úñ¦l÷Æöø©ú…  Zÿ©úÿÿxûbþQžÕôø Zÿ¦âHÃüK£Ûýî¼ý!öÆö… + £HiýäòWW£DiýÐ v ù­ÿÕôøÐ l÷ÆöËûcí>òžø iýWñ¸øµþüž: ””]ù{õ0ô>òxûbþ­ÿD0ôóð%ûî©ú{õ©úQ—qü6èl÷ÆöZÿî©úS ÿÆö¯îÍê%ûWD©úqü¸ø©úxûøÃüÆöÆöñqü¼ýiý… gDÆö¦££: ]ùú¸ø¼ý5­ÿQQÊ”¦¦xû­ÿß ¦0ôêæcíú¦Šóêæ>òß Ð Hß  üDÐ qü%û™ñˆDžÛbþxû¼ý+ îß … ZÿW!öqàcíqüÐ W¦=¼ý!öýˆÊ… ¸øcíý­ÿl÷ÿ>òúù: v ¦SŠó©úˆ3Zÿ¸ø¸ø0ôúHŠó­ÿqül÷ÆöŠó]ùµþW ©úcícíêæäò]ù%ûWÿ”… £SäŸå0ô5…  РbþóðäòiýµþÃü… îÐ 0ôŠó: µþˆZÿWÿbþxû{õìäò¯îŠóê3Ð úÆö: Hñú>òÕôóðóðú­øÐ =µþD£ Ëû0ô0ôì!öbþ 3Ql÷WˆüÍêóð¯îúïùî3: !ö¦%ûxû: øÕôú5 ¸øüžß qü!ö{õqü5!öËûÕô… ­ÿ]ù¯îŸåKv Hß + SÍêcíÆö%û©úÿùW]ùÍê!öý£™ñ™ñ=žg£ÿ­ÿú{õø£=ËûÃüËû: v QÛ: Ëû¸ø]ùŠó0ôÃüKýÛÐ qü: îiýü]ùgËûcíúïqàl÷]ù£ß H: W¼ý]ù¸ø3ˆ©úDl÷l÷££¦ 3Ãü!öZÿ3Hß è âËûiý%ûDWž55qü¸øÆöqü… £Õôóðú¸øcí¸øS0ô¸ø£èîËûóðDgW©úúžüÃü™ñéãSä0ôbþv Ëûóð]ùcíxûH Ê ê6èŠóüH£ŠóiýQýÕôZÿ=bþÿ+ ”¸ø¯î]ùäò££ž£Zÿ: ý©úúï0ô0ôqüD5žS%ûøÛʦ6è>ò¸øµþbþ Qîúïcíîgñ¸øqüQ+ W”êµþþ]ùþ: ß Hv óðéäòÛ3: £Zÿ—¸øcíZÿ£WHñ¼ýìã]ùýg: >ò]ùóð¯î0ôß  HÐ : ú©úúï6èâécíZÿ]ù©úK£µþ­ÿúø{õl÷ß ß ø>ò¼ýWK]ùqüQiýcíóðl÷©ú%ûøüüŠó­ÿ£”Ð : ß H¼ýSùÐ ”=%ûŠóß ß ÿ¼ýñÛñ¯îcí™ñÕô5£: ©úþZÿîµþ: £ýÛÿž ZÿËû%ûŠó… : ˆv Zÿñ0ô: : : {õú¼ýžäò]ùqü¸øú]ù: … gügÐ ž Qv ü>ò]ùþiý¼ý­ÿDl÷%ûüýÛiýú!öéÕôýDêµþbþÃüøŠóqüùW]ù™ñ¼ýŠóü{õ]ù%ûøQèÐ Dqü6è¼ýÐ ˆ£cíìŠóì6è¼á¯îùqü0ôiýbþîHQˆ­ÿ¦ c%c%v ¼ýµþ ÿÿ%û6èäòü  qü¯îäòg3ý=]ù!ö¸øÿ: gùcí%ûS£Ëû©úóðúþ qüŠó¯îú©ú¼ý”Q”Wñ¦:  ¼ýÕôÕô{õ{õ + î5: Ð SüZÿ£—žóðéäò¯îcíúïÍêž&"ÊîóðÚcíiýW{õ6èêæ™ñ£  … : …  Ð ”äòcí6ècí]ùäò6ègZÿH]ù]ù©úgÛZÿÃü=ž&"Q£+ âúïÆöì]ùú!ö>ò=Æö” H!öäòcíÆöý gýîD%ûüSqüúïúï”ʈóðSäcíKß   QÊ žcíø—£5… {õ>òñ… Zÿ{õÆöÐ Õôóð=­ÿ¼ýéÍê”gÿSêæcíúïD£Ëû: aýcíì>ò— Ð úïŠóÚéÆö ÊD™ñ©úŠóìbþþ]ùüß î]ù¼ýD]ùé¼ýK l÷: ]ùŠóÆö6è0ô£ £þ5Ëû ]ùW—: ™ñK”£ècícíóð gÃüDxû èWQ l÷l÷{õl÷ÆöÊè£ø6èóð¼ý­ÿÃüxû+ HÆöl÷Ÿåìñ… Êèa+ %û{õÆöDß ]ù Sñ­ÿqà0ôcí—…  : ÿ—¼ýxûóð¸ø©úv gî5©úúïŸåqàì¼ý=gß ÿìéãŸål÷v Û{õqü ac%¸øK£ŠóóðÆöžxû¸øé¯îÆö… Ð : êæ0ôiýHQQl÷bþî£þ¸ø]ùüiýDÐ KýóðÆöHýÆö£v : ]ùËûDÕôÿÐ QÃüqüQQ”éãŸåÆöù  =âl÷Ãü]ùüQÛÃü¼ýø]ù0ôÕôÆöWý: ­ÿÆö¸ø™ñóðÿäò©ú%ûK¸øÃüÐ £äòìÚÝËû ÊÐ Õô6ècí]ù5Ê£™ñúï©úËûµþÛSäòcí¯î©ú¼ý]ùv ­ÿH: ê¼ýÕôžKcíóðZÿ5D>ò¼ýˆ{õé¯îiýýZÿ>òWøDKžˆ3KKÐ µþžHîùl÷Æöøbþ]ùÐ Q¼ý]ùùl÷ø¦: … ©ú]ùÆö6èúüäòêÿ ­Zÿ¼ýŠóQ…  D¯îÍê%ûâZÿ aZÿ¸øâQýóðŠó0ôiý­ÿÐ ­3µþé6èúïóð£cíµþÛ¦¸øµþWÐ ­ÿqüäòäòì]ù£”ã©úDiýËûŠó5Šó0ôý0ôøäò]ù¸ø­ÿÕô”v £H!ö]ùŠól÷ŠóbþùñÐ : Õôóðcí: ýÿiý©úîHbþSHß 3+ Zÿ¼ý%ûýÛžêQýcí0ôý: Zÿúú0ôÆöú]ùÐ ÊÐ Ð Dî]ùþ£Q: ]ùìŸåÍê{õ¼ýcí¯îW: + £3 µþ0ô>òúø]ùcíZÿ£è£Û{õŠó!öúï]ù£Dˆ©ú%ûÿ: ]ùñÆö¦¼ýcí]ùl÷¸ø£: ÛW: ­ÿ]ù6è]ùÐ ¦¯îäò%ûùqüñ… µþ©ú©úÍêBÐqàËû QaÐ ©úxû3¼ý%ûxûK]ùŠó]ùW&"Dúž™ñäò+ 3+ Ð Q3qüZÿ­ÿQÊ5þ¦©ú!ö]ù… Ãü£{õ6ècíxûøø0ôýÐ + ¼ý­ÿüÐ Û¦Q£ ­ÿ£]ùñ¼ý0ôSä™ñHÊ3ß ©úóðÍê6èÆöóðé¯îÐ … ÆöÛ3qü6èl÷ú£èWß ¯îÆö­ÿ{õÕôl÷žÿÆö5£ËûÆö{õ©ú{õ0ô™ñcíúïZÿ­ÿ­ÿù+  ”ß ß ¼ýÕôÕôµþ©ú0ô”ÛÊH%ûêv  ¸ø]ùß + Ëûcí+ : Zÿ… ýÆö6èÚŸåéÆöäòHèQ£iýbþ… H ]ù©úH5Q]ùúïK: ü”… qü!öú©ú”]ù]ù¸øêÐ … giýÕôì¯îŠóv  + : ]ù>ò>ò{õÆö]ùóð0ô6èý—µþ¼ý£aèH—qüÛ¸øŸåqàÍê­ÿxûÛÊ£óðcíÛýžýÛ=bþ0ôóðú… QbþóðŠó£îþcíŠóSúž—=Õôñø: ÊÊ3ÛÆöúïùbþ¼ý: ¦¼ý£!öSW… + ]ùqüWZÿ¯î­ÿ Q £Q+ D£úÕôÕôÊ: —=v W¯î6èäòÿùÛ£: cíl÷Šó=ß : Ð ¦]ù+  £úcí6è{õ+ £žcí>ò©ú ø5¯îêæcíóðÕôü­¼ýúï0ô¯îcícíÿ£ù]ù¦Diýµþ{õžÛÆöcíÃüqüýv îZÿSä¯î6è6èñ ÆöÿW: £… ñ]ùDqüËû0ôúïÆö5W£ Ê: Ãü£ß —]ùÆöcížÊ¦Ëû­ÿÐ ˆý¯îêæcíZÿ3Ð l÷¦: ül÷]ùcí0ôþ­èv žŠóécíS Æöcí™ñ©ú a”Hl÷µþâqü©úý]ùÕôqàÚqàqàcíHaóð0ôýv Wüøqü3¼ý6è¯îD™ñcíÍê!öiýóð%ûìZÿžS”¸øéW£S£… Ð ýÛDD+ =ýü{õãêæóðËûücí™ñÆöS]ùóðÃüè3£v ù'£¦ýùW—ú¼ýúÆöóðìóðþH£]ùýñ£]ùãØp՞РQ: Êø­Dl÷©ú6è¯îŠóµþažl÷SäãÍêñÕô—3qücí¼ýñùQ£6èêæÚÝý—l÷Æöêæ%û]ù0ôø¦3ÕôúïŸåÍêäò{õ¯î™ñéˆ&"ê{õéÚݸøù… ÛèWäòbþÆö£¦Ëûµþ… èWŠócí0ôZÿHiý… D33—Sä>ò©úÐ ü£… 5 3Hˆµþ¸øý ­ÿÿécí:  aø… qàSä6èýDQDì—  !ö]ù=”qü¼ýËû=v 5äò6è­ÿüÐ ={õêæúïµþÐ =ß µþÊžqàéŠó¼ýþêÍê6èµþ+ ÊQ QŠóÃü”ùÆöÍêŸåêQQ0ôSäŸå=ÕôýËûâúïúïØqàDDW£øxû+ 3êéÆöHl÷]ùËûDSÆöóð©úÚŸåþ­¾/ø*v … üã0ôcíØBÐâ¾/ GÞAäòBÐÚì pÕÑOÃj¸~ GU2BÐZ qàWÓdéu†Ê¸~P”aÚÝ"¾æÅSä'-£‹ô¸/ojß aè¼áÚæÅì4Z ÑÞA]t裈qàÆö"¾Ú]¶Z :¸~±òÓd GÞAxûu†¶ªŠó*ÞA"¾ ±<ÞA䯈¥H££Iô¸ÆöJU'-BЭc%ÚcíæÅÞAˈ¥0ô:jxZÓdxZDÿ•¶ª!ö: JU"¾u†ÍêÞAä¯Ë&"/oxûcíxûèJUl÷ô¸Dä¯"¾ÙÒ:xZ¦_¼áÿ•6è¯îÞA趪 ô¸óðOÃg±<Ð SU2£U2䯣‹ؾ/JU:c%xZÕôu†ÿ• Góðè"¾"¾ G‹yiý¶ªBУPƒ7ˆÚDZ ¶ª¾/*]ùc%ÓdÚÝqüѶª:jj¯îÿ•"¾äò'-aóðì4c%ÙÒ£v ì4ã䯣‹*ì4ÞAxZ¾/"¾}ÈcíÊJUô¸ô¸¦_™ñ6èóð«Í±<jùÚÝé*ÙÒã£IQøúïJUÿ•u†}Èì4xZ]tÙÒ䝯öU2ÞA¶ª«Í¾/ÞA/oÊu†HÑê]tJU¾/c%¸øËûþô¸SäQjÍêu†ê涪]¶PJUP/oiý"¾K6ècí-›qàZÿqàÍê¸ø¸~øu†ä¯3ÞAJUÓdBжªäòÐ G—æÅŸå­ÿ>ò¦_©úô¸Â ÿ•Ð Gã!öù'/oóð-›cíóðv GæÅBжªêæóðÞAjj3+ Dÿ•Ëä¯Z Q¦_jc%£I]¶]¶êæl÷ì4¸~jpÕu†-›pÕG? GJU«ÍpÕŠóÚ¼á!öØù'DÊÚqà¦&"ØcíÍêJUJUu†£‹Ë:JU GG? pÕˆ¥ŠóÞAPOÃu†«ÍZÿ&" GÍê"¾£bþÙÒÊ Zÿä¯6èžQóðþU2U2±òØô¸"¾ü¾/*ŸåH¶ªÚÝ3j‹yÛpտŠJU«Í£‹ŸåÞAU2G?æÅu†¶ª¾/ÞAÞAù'é¹ÀóðæÅé&"Ê­3 ÕôH«Íä¯ËÞA‹y¸~ƒ7u†ÿ•0ôž'-xZÊì4Sÿ•Ñ}Èc%c%JU¸~ß Ñu†BÐG?/oÞAˆ¥ô¸0ô G¦_P¶ª]¶"¾ù'ƒ7ÞAJUØ£‹cí'-Ûêæøj¹À¸øÑ¶ª££ÚÝÞAÓdÞAâcíäòZ "¾ÿc%]tu†ÙÒ"¾Ú:JUÓdjé-›}È0ô G˶ªc%/oJUËu†ÑBÐÞA]tjâu†HÆö¸~JUWù'cípÕ"¾H"¾™ñJU&"æÅµþžÊxZãØ"¾ô¸U2JU Gÿ•£‹qà¦_xZJU'-¾/ã-›˃7&"£ô¸-›éjc%"¾JUóðž¾/¾/'-¶ªÑØÊcíDù'P]tu†Z ÚÓdDù'JU£IBЈ¥«Íì4+ }ÈaJUjpÕHÑÿj¸~*Ð ä¯u†¹À'-j*±òÞA¸~JU¸øu†u†«Í‹y/o:&"6èÛ"¾Ñÿ•¶ª:Ð 3ß Q*¼ýãZ ã¦_j]¶ˆ¥ÿ•JUJU:WÍê™ñˆ¥"¾ÞAJU G¹Àu†u†ä¯&"øÊJUJUÚÝ5'-: ÞAˆ¥u†ÙÒ'-óð¼á­JU¸~úu†Ú¦_£c%G?jÐ êæpÕüÿ•"¾¾/¸~”ÿ•ÑÐ ‹y¸~3a«ÍËOÃc%PJU­Ñ£‹BÐK«Í]¶øj]t:*c%xZŸåu†u†é GÍêg GcíÑu†c%]t GOÈ¥¹À ]ù:jJUä¯u†ˆ¥ÞAxZU2}ÈHDxZG? ­S䶪}ÈcíU2ù'"¾{õì4cí«Í¶ª G‹yÓd: Gúïô¸u†u†l÷DÊj¦_BÐHä¯JUPøØBÐg=µþÞA¦_ùÚæÅù:Ú-›u†ˆ¥xZ¸~£IG?"¾¶ªOÃOÃ*jjJU]¶]¶Ñqàä¯ì4ƒ7 æÅ£øG?ì4¸øZ "¾BÐ6è­]tj&"u†ÿ•*Ódˆ˶ªì4ÞA5ì¯îcíxûu†¶ªÿ•c%/o¸~/o¦æÅ¯î]¶ô¸Šóc%ÞAc%DÑ{õpÕ Q:]t¾/ì4v g¶ª¶ªä¯JUøÙÒÙÒ"¾æÅæÅc%JU¸~¦_OÃOÃ-›D£I‹yÓdcí-›u†¹ÀË æÅŠóù'&"JUU2gÞAÆöH£‹Z Ê¸~JU¼á£‹ô¸c%­::D]¶¹À©ú3ÑæÅZÿÞAc%Z 0ôîSäc%JU¾/xZù'ÿ•¶ªÿ•ËûxZxZ¾/c%Ð ¯î}ÈÑ"¾ô¸G?‹y¸~jÚZ 6è: ¼á+ ÚÓdJUô¸u†ÿ• ¸~¸~xZv Ø£‹cíÞA¸~jô¸¶ªÿ• ì46èæÅ-›ƒ7Dqà*ÞApÕä¯ä¯ÚU2JUJU£IxZØ-›"¾¶ªKæÅK Gjc%0ôÞAØô¸BЯîP"¾ˆ¥Z ÞAjxZG?… !öä¯}È'-JUD-›}È*]tãu†ÿ•ú‹y G¦_jÞAÙÒu†u†ËxZ£IÊÞAù'6èu†æÅ}ÈjÓdBЫÍOÃÞA¦_ GJU GøÑ£‹OÃxZ+ ¶ª¶ªúù'¾/ú¾/'-OÃZ ¹À'-/o¸øä¯ú5ÞAÆö]¶«Í Gƒ7ì4+ U2'-ÿ•BÐ{õÃü«Í/oj «ÍØé£I3ˆ¥ì¾/ì4¼ýpÕ3£IÚ±ò'-ÞAc%ZÿÚ]ù ƒ7cípÕµþ0ôØl÷qàË6èU2ÓdPU2OÃä¯ÍêÆöî3HÞAWæÅ"¾¶ªË­ÊxZ¸~ÞAø™ñ"¾ã¯îcíìÚ"¾ä¯aU2 G£IÐ ÆöÚKÞAP}ÈZ ÚÝþù'êØØÆöJUÞAHË-›ä¯5 G*ÞA*%ûÚOÃô¸qà¼ý¸ø¯î GÞA ¦êæãóðÚìÊWÚØc%£IG?øqඪ¶ªé¾/ø­ÿ Zÿß ¹ÀZ "¾­U2¦_Ód3ÙÒˆ¥ˆ¥ã:ÞA:ýHBÐÚSäÚÝËû 㶪èPÞA G£I¾/ìعÀ¼ácí!ö]¶-›ŸåÞAxZ±ò0ôÚøgøÕôcícíÆö”Dc%v óð6èéèÊ0ôÐ ”6èl÷úï¼áqàØ+ * GÞAc%óð%ûqàpÕ0ô]ù6èØcíÃüø¾/'-£ÿcí0ô6è£ß Æöqà%û¼ýÊQ%ûøñ©ú6è: g6èýìBÐÆöÛÍêQù'*ÊÛî]ùØOÃqàúDÐ Â D£+ ËûcíãËûqàËûQ£  ß v 6ècícíêìÙÒ¯î{õ¾/abþ”âSä™ñÐ Û0ôqàìl÷ÿîc%3: úï50ôæÅêæóð%ûü&":ù'5Æöÿê £qüúï¼áÍê{õ0ôÛÍêËû+ '-ß Qø… ýÕôäòêæ]ùùé{õµþbþ0ô0ô ýÍêâ%ûø¼ýv úqàڟ垸øÆö”êúïxûbþóðbþSÚØ0ô3'-&"bþÚ6èHDóðì¯îK—0ôŸåÍêžl÷ £ˆ”Hqà™ñ!ögc%c%{õóðüäòcíóðìéäò©ú3&"Êèýl÷>òãêæZÿ ù'ù'ß µþÚÚÝãZÿú¼ý ù'U2êóðK: Ð £ýŠóÚqü ¼ý¼ý¦ú3H!öŠóñHèD]ùóðqàxû]ùèQˆŸå«Í6èú Ê РDìÚóðbþ qüxû­ÿž”ÆöÃü0ôéÆö{õêæ¦: l÷aøW… ýŠóŸåŸå6èÐ W]ùÐ … ýý+ óðv Dv … ¯îØ«ÍÚݸøÐ øc%c%ÊÍêúï!ö鏸KÆöµþÛ=£ 3 a£ùß êæ>òóð¯îWÐ Ê5­ÿÃüSäì ­QD—™ñ%ûH=µþ+ : ™ñêÍêcícíþQÊÛ£êÐ Q¦Sä6ècíZÿ¼ý£KWWÐ xû¼ýWÕôDÛäòŠóqàŸå{õ3&"¾/ø]ù¼áŸå¼ábþDKóðóðóðé>ò+ + ÊÐ Qê6èqà6èþ ¸ø©úóðiý >òcíˆêùH”0ôÆöWè”þ=¸øl÷¼ýêqüéµþ5Ê—îþŸåóðQgÐ ÿÆöZÿDøÊ©ú]ùQ3ücí©úQµþ¸øéýž”'-­Ð =óðã0ôWÐ 3Hv !öéÚ5øÊv Ãü6èêæl÷­ÿ£  D6èéŸå{õH&"ñcíZÿþ¯îüø”ÊWŠóÍêéìøÐ ß úï]ùQv ¦cí™ñ{õÐ … ø0ô¼áéý—QÃüÆöüóð¸øD>ò{õ+ Ð ÕôDg =©úúï™ñ0ô5Sµþ”îxû]ù: ­­µþ6è¼áŸåÆö¼ýžÃü: ß &"ʼý]ù!öQøÊÆöÍêäòÆöß Ð Q¦¯îÍê0ôcí!öaHÕôl÷… èè+ + £ãÚÕôóð%û£S: ”—úê3 îµþ¼ý¯îÕôcí{õSl÷{õ ø£l÷ÿÆö%û—þ0ôÛîxû™ñ]ùÆö0ôýÃüÐ g{õóð¸ø£µþÃüúÆö£ýŸåqàÆö¦g+ =Hñø]ùv : úD+ bþñóð0ôãúgžqüÊ: l÷0ô W¼ý!öø5HW a£qü¯îþêŸåSäÆö ß è&": ¯îcíêæž3: 5Ð HÆöÍêÛH¦ß ýiý£Sú¸ø ”£cíý”]ùúïúï©úÐ iýøcí6è%û3ß =l÷!öóðé]ù”­êìŸåqü{õ0ôäòËû 5ž­ÿqüÆö¯î]ù£ÃüéSäì: H]ùZÿÊÊ©úcí{õ0ôxûqüäò5””Sú—ŠóÆö£HZÿø¯î¸øSüüW  ”¦£]ùäòŠóÕô: gQH¼ýˆbþ>ò6è£ Diý=ˆZÿú©úQ ©úý£¼ýŠóüî: : Û¼ý£aß £l÷!ö¸ø¸øìúïiýWËû%ûv 3£ýý]ùúï6èÍêÛgâ¯î]ù”Û©úÕô¸øþÆöøK5¦Õô©úž—µþQÐ ÆöcíêæcíDWµþxûxûýýÕôÿ©ú6èé]ùüÕô—v ­… qüW¼ý¸øúïéÃü”W]ùÿv qü]ùäòóðúï]ù QÛˆ¦Â èK¼ýZÿýqü¯î0ô­ÿê¼ýùv W0ôÍêŸå!ö—+ £ýß ÿSý¸øÍêÕô: ß —Ûµþ5ÆöDþÆö>ò™ñbþÐ Kúß ˆÿ©ú—+ H0ôìSÐ ]ù0ô]ùþ0ôÆöxûg£]ù>ò>òqül÷­ÿSýˆÆö¯îù]ùéÍêÃü裸ø—Ð qü¼ýŠóÆöÕôÆö0ôˆ HˆZÿv D—þÕô]ù—ŠócíýQýäò]ù=ß ˆ= Wcí6è¸ø£èñúDg £HHWxûìÆö­ÿˆ!öxûÐ ß Â : : î©ú¯îüÛHêbþý=qüÆöž ]ùl÷îÐ Zÿú%ûÿžËû£ZÿKâ™ñcíWv WÕôéÿ¼ý+ ˆ0ôÆö>ò0ô¦H¸ø>ò%ûÆö]ùµþ££©úóðŠó%ûl÷ˆ Dqü{õ¸ø%ûl÷Ãü¼ýÕôËû0ôžDD©úß g””žqü{õ6è¯îqül÷Ëû¼ýH5þ… … … £5xûŠóýù]ùÆöxûqü ”Dù£+ D£ñHÿ%û]ùÆö]ù—Ð Ð 3£¼ý{õÆöúDÐ î]ùúïùîS=£v Q: ¸ø¼ýÆöŸåü—¸ø{õø¯îÃüß è­ ©ú{õóðÆöxûêæéŠó%ûúï{õ=£ß =D: £]ùcí0ôcíqüêqübþýcíŠó¦î5¼ý%ûúùZÿiý¸ø%û: £¼ýý: ¦—¦l÷Õô0ô¦H£îø0ô©úê+ þý5£: Ð þ©ú%ûÆö0ô]ù¼ýñµþ¸øHQQèv gv øqàì£: Ëû]ù©úÛß : D… KËûþ: ”—]ù©úbþ=… Hß —%ûÍê©ú ¦¼ýl÷]ùÃüZÿ=î… ”µþÆöÍê6èŠóD: ùK£HbþÕôcí{õDžÃü¸ø>ò0ôˆ{õ0ô©úiýbþ£­ÿø¸øÃü¸ø££ÛÃüø]ù¼ýžD]ùÆöxûqüZÿQÐ ý¦ùqücí0ôÃüú{õ­ÿ¦—£ÿ]ùl÷+ … ýZÿ=Hú]ùbþ¦©úÃüÿ©ú]ùÐ aß £ˆø0ôxûWSøø­ÿ¦=” !öø¸øÆöl÷µþWùžâ: ý—úcí]ùD””bþÆöäò©ú5ýH£žqüÆöl÷ø!öl÷Ký5¼ý¸øŠóqüD]ùDêDýµþl÷¯îøú©úú]ùÕô¸øÆöiý£î … ß âl÷>òÆö™ñÕô%ûKýß ù”£KKÕôŠóËûñ%û]ù]ùK+ Ð =ž ­ÿ5W: ¦ý™ñqü5qü : qüËûbþùÛýß  Ð £¦!ö]ùÆö©ú£ÃüÿîH ˆ{õäò>ò>òù]ùbþ=ž¼ý£W¼ýËû¸ø!ö{õ]ùxûêê¼ýÆöŠó HÐ v þ0ô0ô©ú0ô{õú>òúê­ÿ… £Zÿ¸øl÷Zÿÿ¸øcíì%ûZÿž””üÆöäòüZÿß Ûÿý—%û%ûµþqüÃü]ùñH­ÿ©ú—Wqü¯î{õù”+ Ëû]ù: ¼ý]ù… Qgî%ûl÷©úbþDÃüqü—ÿ]ùˆ  g5Zÿ­ÿýùÐ Dù¼ý=Wþ!öùžWÆö{õ¼ý: : ¼ýüS=K£: —Æö>ò¸ø… ¼ýžÛ+ ¦µþâ¼ýÃüÆöÿ—žqüúŠó0ôµþ5… : ùìãcíóðÆö!öùý¦Ãü=þ¦úÆö]ùüúl÷¼ýù©ú—ê : ©úÆö¸ø>òúù”… =ýøÛÛHîù”£ZÿÆö¸øH©úÿDîÃüâ¦Hýñ]ùžîÛâ¦xûÛñ¼ý¦D—D… + £¦ÿD¦øóð{õ%û%û”ÿ+ Ð ýbþÿËû%û­ÿü £”ùSüqüù£ý¸øÃü—þÕôl÷!ö¼ý¸øK: 5£üÆöW=ŠócíÕô¸øäò]ùK5þ%ûÆöÆöDËûiýùDSZÿÕôqüSbþý¼ýîß ]ùqüqüDqüžDSxû¸øiýùÛÛêÿ0ôÕôÆö]ùW””+ Ký: =%û]ù¼ýÛHD£WˆÃül÷óð©ú¼ýËû¦: g£Q â5ËûxûxûµþKKZÿ¦bþl÷xûøKH: —%ûÆöqüD­ÿ: ”Dß : 5ÿÆö™ñ{õ©ú¼ý£—ÿÃü¸øü¦¼ý¼ý]ù¸øqüùþ©úZÿ%ûl÷ŠóäòóðóðSžW5âß H]ùÆö!ö]ù©úÿqübþ{õìóðÃü+ ”:  èv ©úxû0ô]ùŠó0ôÛ… î: DZÿ5%û¸øSµþÿ¦]ùKDùêÐ HZÿÆö©úž: Kiý+ Q: £5]ùÕôŠóZÿDùiýS£5î… v ß D5ü¼ýZÿóð0ô¼ýüÆöùDK¼ý—Q H­ÿžiýùµþ=HËûl÷xû>òúï¯îìl÷âH Ð ž0ôcí0ôxûiýS¼ýbþ0ôÆöÛê¦Ãü©úÃüøqüÿ¼ýbþDêK”µþÍê©ú¼ý%ûËûü=ß ž0ô0ô¼ýÿêþW£H¦ÿ%û]ùúï¯îÆö: 3 ]ùl÷¸ø]ù¸ø]ùµþv ý5Ð øèKñ£ÿ!ö]ù èýÃüýÐ Â =­ÿ]ùqü©ú%ûS£KqüqüxûK£Ð : Wü0ô%ûùKýýýWHü{õ0ôøÃü¼ýâîS—ž%ûýýêËûÿqü0ô{õú]ùµþbþ… Wÿ¸øÆö¸øÆö>ò©ú!ö¸øqüiýl÷—Ð ü>ò¸øl÷{õ­ÿµþHÛ… £qüD]ùxûˆ¸øÕôŠóÆöþKý…  gÛÆö¸ø©úúïZÿÐ Ð ÿ¼ýý: ÆöŠóÕôžÛ: D5Qß S”+ £žKDù!ö0ôµþ—ê⣠”bþÆöiýD¦=žþ©úÿµþ¼ý©úZÿWî¦Ãü©úËû£”¼ýùDùZÿËû¸øùùÃü—{õ¸øùž]ù%ûbþµþËûøøÆöSÛùžxû%û]ùú]ù>òóðbþHHÛDµþ]ùóð™ñŠó©úÛâ¼ýËûSSñüþ£ý: + K£DÆöø©ú¼ý©úxûøÆöÐ Ð Ð : ˆâúbþ=ÿbþùHH=¦Zÿ¼ý: ˆÛ—5ž£: : ý¦]ùcí]ù%ûýñ¸ø¦+ ”ˆúý: ÊÐ üùþ0ô¯î]ù5ß : ¦]ùâD¼ýbþKµþùqüýW]ùÆö{õ0ôqü¦K=DÆö0ôÆöúK£¦üÕôcíÍêxûÛiýl÷¸øKý©ú]ùW£þxûÆö]ùqü¼ýS—ú¼ýWW5ñDD5%ûl÷ÃüýøDWÛâWbþñÿê5W£%ûqü= Ð ¼ý¸øø£W¼ýbþ5£Dqüê=—Sbþ5+ v Zÿ]ùú0ôxûî : iýúxû£êiýÕôÆöDîÐ KWK=¼ýúl÷­ÿD=¸ø­ÿZÿµþ¦Ûýü™ñ0ô©ú©úDDZÿäòÿý©úùZÿ=ž¦ÆöÆöúïúï©úîêbþ—ø©ú!ö¼ýËû­ÿ£Ð … ž¸øäò0ôl÷ۣРî5%ûiýÿü©ú£Ð Ð l÷ì™ñ%ûêiýêÛ—úøDùñù5£: ­ÿÆöüWWžWù%ûl÷þHg  îýKDZÿ: Ð ¦bþ… Sžÿ%ûß : ÃübþþÛˆW¦þúcíŠóbþ: ”SKD¼ýüÃüÆöúýDÛþ¸ø]ùî”gÐ ]ù0ôêæ6èúâ]ù©úl÷¸ø©ú©úD¦Ð £W—µþýýµþ]ù]ùüZÿZÿK]ùóð%ûˆSýÆö%û™ñÕô]ù0ôqü¼ý£… £Ûîîžóðóðµþ¼ý¼ýKüý%ûZÿD­ÿiýZÿß ß £ýv + : DøDKñ: : SËû0ô!öD£5”ˆqü!öÃüKÛîv 5ý0ôŠóøDÛZÿbþÿ¼ýúžµþiýî: =ÆöxûüÿxûøøÿZÿÿù+ g£ññ¸øúï0ô{õ©úl÷µþK£ÿøøZÿDZÿqüµþ]ùú0ô{õ¦­ÿiý]ùÃüê”iýH+ Zÿ0ôl÷ý5]ù0ô¸øø%ûâˆñDH£µþþ0ôqü£ ­ÿžýÿDW: ý+ ==xûäò¸øl÷qü££  g£¦êqüËûDbþµþ—££¦£¼ýËû{õ©ú£: —¼ýÛýýl÷l÷bþêDÃü%ûþúý%ûHH þqü©ú%ûú™ñþqüÿZÿ=qüú]ùÿùqüþø]ù¸øl÷%ûâß … Ð ¼ý{õ™ñcí¸ø]ùÆöøúˆžqü¼ýqü%ûøÕôúñ£=Ëû%ûDKú0ôxû:  £==KÃüüêýKúþS¦Ëûúˆ££ý=W… ùü©úbþDùWµþ: … 5qü%ûüýÆöø©úù¦Û£îý£ýùS£Ëû©úÆöú=”… ýý£¼ýúþ¦qüËûúKS©ú¸øËûW=xûÕô]ùËûÆö!ö]ùËûüËû]ù>ò]ùˆµþ¦l÷Ëûú%û]ùËûýÛ£—Æöcící{õ%û£SSˆ: ù¼ýHÐ Wbþbþý­ÿù¸ø©úŠó¸øúýKþqüqüS£H¦l÷Æö=£Û­ÿøÿDW=îž”£—D]ùµþ=Dú%ûKW=µþþ¦£îÐ =ˆ5Dý¼ý£Ëûü]ùÛÛ£ß ß £Ûiý¸ø%ûùÆö6èóðËûD”: ]ùäòÆö%ûK]ùÛbþÆöÕôl÷øËûžqüW£Wÿµþúµþ¼ýËû™ñŠó!öDWˆˆD­ÿøÃüøl÷ÿ: Dü™ñ{õqü!öñµþýµþD¦ß HÃüµþxûüD£©ú%ûiýbþ5£WÛDµþ¼ýD£HKîîÛ­ÿâbþSÿZÿê©úqüâKD=ß £úK£îS¸øiýZÿZÿ]ù¸øýDµþ—”: Ð ”qüÛÛùù]ùqü]ù¸øñµþ%ûÕô©úž=øl÷ÿ­ÿHWZÿÃüüóðÍêÿýÕôqüùKýüÛDiýKø]ù%û]ùËûýZÿËûqü]ùl÷H£Ûµþ!ö{õ]ùbþ: : Zÿ¸øü%ûý©ú¸øß ÿˆ—£ø>ò: ýÆöiýˆKê—Ð : : D¼ýú¸øËû¦ß 5­ÿl÷iýˆ =iý¼ý¸ø©úý£+ W  îÿ]ù]ù¦£££Wqücíúï%û=ÃüÆöÃüüZÿDùiýK=þùÃü%ûqüžâ¦ÿµþµþ¦Zÿˆbþµþ]ùqüÃüø¯îÆöübþW©ú]ù%û0ô{õ—g£D¯îóð!ö©úâß ß ê!ö6èŠó¸ø%ûqüþbþbþÿ=iý]ù0ôqüýSDùùêý£: ùl÷iý¸øúÃü: : Ð + : D¦ù: ZÿqüKv  РWËûqüýbþbþ5HùDîùüµþý£5Ð =ýDýêxû©úÆöÆöËûÆö]ùZÿD©ú%ûüâ=: g: îZÿ]ùl÷DÛêùËû¼ýˆ¦ú0ôéÆöËûxûúÕôóðÃüß KZÿH: {õø]ù¼ýú!ö©úl÷ü]ùùËûñxûúñ¼ýZÿ{õÃü¼ý¼ýH: W£W¦ËûýDDñú%ûµþâÐ DWîK£+ ”]ùúï]ù!öqü5=DÐ Â WDþžî£=5—xû©úýiýiýÛbþ¼ýµþ¦bþîHýSžbþˆËû¼ýiý]ùSß ß 5ÿñüøÆöúúï0ôqüýÐ HWKžDÛËû0ôl÷ÕôúÆöËûúÛùZÿ={õcíú¼ýŠó>òýZÿÐ =ß 5Wêù¼ý©ú©ú©ú]ùqü¼ýËûbþiýâüµþ©úø]ùxû­ÿ£+ K%ûñ¦ÃüK£âù%ûbþâÐ âqü­ÿêýbþžÃübþÃüH: … ¦]ùµþýËû%ûbþÛâ£: ”=D: ß Ð ©ú¼ýD¦ø¸ø­ÿß —S¸ø¼ýž: Ð úcíÆö©úqü©ú>ò0ôWH… £â%ûúüqüñ5Æö™ñóð!öü¼ý>òóðµþîîËûµþD]ù0ôóð©úWÃü]ùù{õËû­ÿ]ù{õ!ö= £©úÃüñúÆöÿ£HScí¦£5qüÃü£ îbþ©úùW­ÿ¸øóðÆöùÐ ùbþž£H+ îiý¯îéÆö¸øK: —: … Wþÿ¸ø¼ýý”””D—£Q£âÃüqü%û%ûÿ=¦ˆZÿü—Û555ý¼ýbþüÆö¦ß ù­ÿËû¯î!ö0ôÆö]ùþ¼ýµþž£Ð H]ùüÿl÷ÍêìÕô¸ø¦5S£êxûþ: !öqü£­ÿ©úµþ¸øÆöZÿù: ¸ø{õl÷â£5SSü{õ0ôqü¦ + 5¼ýóð>òùl÷{õÿv v Ký¼ý]ù>òÆöZÿ£ËûÆö5D”Ð Ð bþŠóüW Ê+ … %ûüñž—Zÿú¼ý¦¼ýú%ûZÿ©úËûêWñ£ù]ù”ý©úÆö¼ýH ¼ýäò]ù0ô¸ø£¦Ëûý5ù]ùSv £¦Ãül÷{õ©úbþÿˆýú¦¼ýbþú¦¸ø¼ýúÆö0ô™ñÍê™ñŠó>òÃüËûê =úüîHZÿóð¯î0ô]ù¸øž­ÿW¸øü5: Û£%ûZÿ”Û=]ù£ žÆö]ùDW+ : HDÃü¼ý­ÿWî£D¼ýl÷ø>òý£: £¼ý¼ý: —­ÿ: QQ£Õô]ùø!öüËû%û]ù]ùñ3: üÿbþ]ùµþÐ 3ß ”£ˆ¸øÆöø]ùÆöÆöSl÷qü]ù]ùZÿiý=W©ú¸ø¼ý¦Ûµþqü”ñøËûÃüÃü%ûZÿñÆöËûÃüµþËû%û¼ýÃüþúK0ôúï>òl÷êñ]ùü0ôúïiýv … DHÛqü%ûñ: îqücíÐ … iýËûxû]ùqüß QÐ Û¸øŠóúñ”ý£µþùýß Û=¼ý™ñŠó©úDùxûÃüúW: … : ¦qüüß ”øüß : Sóð{õ©úžH”ß =¼ýþ{õŠó]ùñ©ú%û%ûýâD: þ©úl÷Šó£D=!ö0ôäòxû ÿ%ûú¸ø%û]ù{õ¸ø]ùüñ¦]ùcí!öß ”xû>òÍê¦Dù5H:  £¼ý™ñÍê¯îþ Ð ß qüËûcíêµþDËûýø¸øÿv ÛZÿcí¯îÆöK¼ýþ5+ ß ÛS žù!ö!ö” ùþˆµþ]ùSÛ=D0ô¼ýHê¦ÛK¦”£H+ ZÿŠóËû: W5W Wñ%ûbþcíSäìcí­ÿ££þýDK£0ô0ô¼ýî©ú{õ]ù©ú{õÆö{õ¸ø¸øl÷þ¼ýZÿîK!öìl÷: è ââ]ùþ £â£=iý¦¸ø0ôùµþµþýóð!ö©úý©ú:  Ëû=îK­ÿ­ÿ%ûýWß £ùqü™ñŠóqüîZÿúiýqüý£+ … êZÿ”Ð W ß qü0ô©úñ£… ü!ö£¦: âýÆöqüúÿ5Û©úSZÿÍêéÕôøÆöZÿâýxû¼ý… îübþWù¼ý¼ýxûú£¸ø¼ý%ûDqüˆ¼ýþ£Ð ýÿxûÿ]ùÕô%ûµþóð%ûúl÷]ù¯îŠóqüiýñ0ôiýµþÃüý=—bþäòKÐ v ]ù©ú]ùùÿäòé]ù=” : =£Êâ¸ø™ñSˆQ Ð W¼ýøüÛ”ˆêüZÿÃüøÿWZÿxûˆ… Ð Ð  : Ãü0ôÆö]ùñþ>ò¸ø+ øÆöÕôcíÍê]ùiýSÛv îl÷ËûËû: ¦bþµþ£¸ø¼ýøÃü]ùÛøúKW5l÷ü+ ß 5Æöl÷ÿ¸ø6èÆöËû£”DµþbþÃü0ôäòŠó]ùß ß îÿžý¸øøúïÆö]ùý… =Æöµþùúäò¸øú… ñ¼ýDß ñøñv žZÿDv ¦Íêóðþ: Døˆ: K¦ž=+ Ð ê¸øÆöþµþ: gß + îâHW­ÿ©ú­ÿüHSÐ Õô¯îóð{õþ{õÆö£v ÊHèî%û©ú!ö£%û0ôúïl÷iýZÿß ž¯î0ô0ô£Qâ—äòäòÃüQÐ —6è¸ø]ù!öcíøùÆö™ñ¸ø0ôÐ giý©úù]ùìŸå%û… ß ©ú0ô!ö{õH©úDµþ¼ý]ù£¼ý%ûKž… ”v žäò­ÿ]ù>ò%ûµþ¼ý£Ð  bþ¦äò]ùù… … øqüÕôµþ—: µþ”ß ø£bþÿžW”ß WüžËû— ý—]ùÿ]ùøµþýÛxûäòÕôµþ… ”=ˆ þ— â{õÆöÐ Qqücí6èâËûóð!ö¦: úÆöcí]ùµþññ Û”øŠóóð£ù>òÃüD0ôSÆö=î]ù¸øZÿøúˆ” ¦5l÷ùž{õxû]ùÆöQîÕôÛÛýÆö{õ: ¼ý]ùüHžÆöø¼ý£DD5Ûqü¯îÛ ”5Õôÿ: gâ3©úcíêæøÐ Ð HZÿ: v ”þùÐ : + %û5Ð Â £xûxûâµþ¯îÆö¼ý©úìü: ý]ù0ô3ÃüSäbþ£=ZÿÃüê: ËûžýW£©úl÷Æö ÿˆÆö6èÆö¸ø0ô!öù”¸ø: D¯î6è]ù¦: ©úÃü… cí{õ¸øùÛËûiýžúïl÷Ëû¸ø: ú£ÿ{õ]ùgèµþ¼ý”üìiý5”úïúv Ûñì¯îÛ”H3¯î>ò>ò¦¼ýgK©úl÷¼ýÐ Qg£©ú©ú5Ð ]ù0ôÐ îî%û…  ¦¼ácíø3… úqüW¸øËûäò: 55µþøžDÛ£5%ûWÆö­ÿîËûl÷µþWHÆöxûúñcíóð£Ð Ëû!öD]ùÆöqüv … 0ôü]ùú¯îDùê{õžiýþ0ôËû Ëû©úŸåé”Ê: l÷ýâúïø¦øß Ð üDSÿÿ­ÿËûùþ—ýDøŠóKžl÷µþ>òQ]ùËûîù]ùÆö … ­ÿîÊ+ øÆöbþgHÕô¸ø¦©úø&"D¸ø£: ììî ËûÃüñ£iýýH: üäò{õµþ¸øøqàÕô… ¦: gv %û]ùÛHéÕôã6èäò£Ê xûêQ ¸ø>òÃüK¼ý©úbþWÿ>ò>òµþîÆöêæ¸øê­¦0ôbþŸåúïúïý: l÷©úŠóÐ Æöú0ôbþˆbþ”úZÿ: ß úbþžDiý]ùß øHÛýZÿžÊ­ÿ]ù%ûD: ÍêúÐ üQý: óð¦ñþñù]ùäòéña Qñ]ùW¯îxûÍê{õß ”Hß {õêæcí¼ýÐ Q0ôýbþÆöiý”ÃüZÿl÷£”£ß … £+ ú]ù=bþKDÃüóðêæÆö¼ý ©úóðZÿ¸øúÕôµþøcíóðcíú: µþý¯îóð]ù èH0ôl÷WÛµþ… Ãü: Kÿ]ùxû>ò iýÛ££l÷!öµþèˆ5K ê]ù êêæD: ÃüÕô¯îµþ0ôcí£Ð êø£Û{õ¦a­ÿ™ñÆö©ú£ß ­ÿZÿù aøùˆcícíóð0ô… ñäòóðŠó  … >ò¦0ô¦… ZÿŠó0ô­ÿ”ø… : 0ô¯îúï5]ù™ñbþŸå¯îøÐ ­qüÆöW>ò%ûþÿìcí¯î]ù]ùú£v äò5øqü”%û]ù£Ð %ûéÐ Ð H¼ýß … ©úBÐì¯îúˆ ù%û¼ý­ÿ: ˆýqü=Kâ¸ø¸ø¦: Ãü: H©úcí>òv 33Ð ™ñÐ µþW©ú%ûì£î… 5qü Q=îˆ: Æöµþ{õäòW%û: 3{õbþ¯îÆö—]ùþˆ øv î… Õô¼ácíDW0ô{õS K!öú¸øÕô>ò:  ¸ø¸ø¸øž£äòl÷6è¯îÃü]ù… l÷D”a¸ø0ôZÿ]ùÍêD¸øÃüÕôîžäòKWxûÐ ¼ý™ñbþµþ0ôäò]ùÛgóðbþWˆ%û0ôù¸ø¯î%û=£µþWZÿ©ú©úÿcíqüÛ= ÛâÆöiý]ùÕôý6èîèµþžâW þýú HÃü]ùúï{õ]ùg­ÿqüDÐ ]ùìù: øäòéóðù!ö™ñýl÷Æö: !öø]ùiýì©úóð0ôž¸øËûÕôµþß Û”â5iýÕôŸåêxûZÿ¦Ð  ¦l÷¯îß îŠó6èãÕôŠó>òHú: : ýl÷ÃüÆö¼ý%ûˆß 0ôéÆö]ùóðú6è+ ¦: ]ù]ù{õþag¸ø™ñÆöÍêbþñ¼ýgiýîø¸øÊ3Wø]ùSÐ Dcí6èÆö0ôñbþiý¦+ %û+ žî£ÕôÆöýˆ%û!öˆÃücíqüî3â… ¸ø££¼ý]ù]ùSÆöWZÿÆöÛþ¦Ð ­ÿúï]ù5ú0ôäò]ù%ûÛâóðúïcí{õ ]ù¼áqàÍê5Æöqüýa*=Æöø¯îqàÆö]ù¼ýÊÆöcíú Êc%ß äò!öÚÝêæH*D %û¯î¸øñ>òý¼ýqü¯îiýäòl÷KüDîW0ô™ñ¯î£”Ãüiýa­HúËûµþýv £þÆöcíß ¦ZÿHDiýÍê¯î¯îýcí©úì: Ê]ù3î=!öQ£ýÆöcíì6èˆ3 … ÊWSÆöH6è%ûZÿ©úéÕô{õ—ý©úDQiýÛ{õ]ùì¼ýÊ]ùú¼á5Wéé gWSóðl÷6èóðDÊ—… cí6èSäž: ýqücíÃü”+ cí>ò¼ýúï¯îél÷Qÿ+ c%*ý™ñ6è]ùD+ žúïl÷äòúKúc%Q™ñîˆ&"£¼ácíZÿüqà¯î… Ê l÷%û: v 3ÿÍê¯îóð©úÍê6è¯îøˆ3&": ß Sä%ûÊŸåcíqüóðäò6èÍê£WÕôìäòZÿZÿÛSä¼ýñqà”¦ËûcíãýÐ gcí6èÛH5>òcí0ô: è+ Ð ¦cí¦äòóðùaqüÚØÐ cí©úÐ Ëû5Æöî”: 6èÍê0ô™ñ]ù¦™ñ”KÆöµþ>ò%û©úúÕô£ ­ÿiý £HÚÝ0ôãaùxû]ùÕôù'ÊÕôqàâ¸ø ÊúøµþãµþS0ôž  îýî0ô«ÍæÅúï{õbþʦ¸øQ­ÿqüŸå!öý¦Ð ”ìqàcí6èŸå©úD… ”qüß ÊK¸øì鏸©ú¼á: ž¼ál÷… %û5cíø{õ%û >ò6èµþÊ3 6èóð%ûŠó¼áxûß Æöv —0ô{õøK£K{õ+ : ZÿäòñÃü ]ù©úHù' ñ ž 3ß øß aQùóðüÕôŠó5>ò>òÆö: 3Ð Â £¼áìúïqü£ž£ˆ¼ýâ … úïÍê”ââ>òéúï—: gÍê™ñýiý¯îqüúµþ]ù: ʵþäò0ô3ʼý]ù]ùŠócíú ­ÿóð¼ýDÚÝ6èÕôþ£µþ{õDʵþ: ©úüÐ ]ù é™ñã]ù¼ýµþø0ô: £Êù'3l÷ÚÝúïúïHgÐ Û£¼ýé6èQ: ý£”{õbþ¯îýÊc%+ Æöì: âa&" ]ùiýËûúïúï]ùÕô: óðW QÚ¼áøîý: + ™ñcí5èþ5]ù0ôýÐ ß … aʦÚÝ0ô0ôêæ6è¼áî¯îÃüaøß 0ô+ ÃüÍêÚ¼áâ… 0ôÚÝêK… £— ß 0ôÍêqü™ñŠó—øú£'-3Ê™ñÍêBÐBÐÆöÆöµþ0ô£6è¼ýÊ+ Q]ùÆö cí¯îcí0ôø3%û0ô©úbþúiý0ôÃü%û­ÿ­ß ŠóWxû” qüqüWD Ql÷!öËû¼áúï %û™ñ3Zÿ6èÆöÐ èñÐ qü{õHËûÚÝŸå¯î!ö… äòxûÊèÃül÷6èÐ ê… Sv ø¯î£]ùµþ: Õô0ô>ò… cíúøÊSääòÃüÿ!öþW©ú ˆSääòãì: Ð óð: Ûg£5ì>ò ¸øK 5>òŠóüxû¼ýý£ñ0ôóð5ý0ô0ô… + ý: Ð av W: %û¯î0ôbþHˆW!ö”… Qc%”™ñŠóñýì¯îÆöQ ™ñ©úDl÷Ãüÿ: cíÚêæèÆö]ùbþgv ÆöKÊQÛèiý¯î%ûÊú”QDSäSäc%xûÛ£3… cí]ù£D0ôSäcícíÙÒŸå{õÚ>òŠó¯îäò”3¸ø!ö©úDˆ>ò =øŸåã ©úýÊa5Íê>òú… Ê0ôýýîã¼ýaZÿcíqàþøbþÕô>òêæcíãÚcí c%ø©úWH]ùß þ ÛÆö¦c%èý%ûÃüÛÕôcíÃü!ö: QÊDäòÛÊ* ¸øÿÕôì{õÐ : =0ô£Šó… bþ56èãcíùc%Ð 0ôã%ûgW0ô]ùÐ ”]ùS3Ê”ÚÝìóðSqüH]ùêæóðîHúúï¯îÿ{õ{õóðDbþ¸ø™ñ… v bþD]ù%ûèˆl÷xû¯î{õÆöüüÿÚl÷: g 3èc%ÛäòqüùãÛqüWß bþ%û ¸ø6èÊQÆöØSäžl÷£0ô騸ÚÝÍêa ”žŠóóðcíBÐäò… D¦%ûcív ÊÊø&"D%ûîâS%ûÐ {õé¼ábþ=5Døé: ©úSäÍêêæ¸øS¼ý¼ýÆöìcí¯îóð0ôcíäòQø: ]ù£¯î]ù]ùß ­ÿìcí>òžãËûÕô: Ð Û£Søì0ô cíúaâ: äòãêæiý¸øSv 3è­ÿŸåŸå6è6èµþ ¦ì¼áSäÊW0ôÃüèˆÐ l÷êäòqàBÐl÷: … £øîèÊ*5>ò¯î]ù0ô™ñýc%úÆöýäòÆö3­øiý£0ôiý¸ø6è0ôñÐ : 0ôêæÙÒÆöÊî©úøËûqü!öiýØÚÝÊc%Qqü]ùl÷bþ £ÆöÆö=DËû  + ­ÿÆö0ôì™ñ]ù!öý0ôé¦ì>ò¯îv g úïcíž: ü¼áÚݼý­DW+ cíÚŠó!öÿv c%úãÆöËû£ù'xûéÚBÐDxûóðˆÐ ü]ùQ&"è*¾/øcíéÚúÚ—ý¾/ÊÃü¼ýÆöãOÃ… '-¾/ú!öÍê]ùcí>òé£D6èÕôüa¦]ùcíóðúïËûU2­Ê£úïøHÛqü¸øÊʈ: ñéŠóÆöŸåÍê6è!öÊ=%ûé=]ùv c%Dcíqàêæ… Ð Ÿåé cí%û0ôSäúl÷µþ  6èì qàËû©ú0ô0ôÊîÛúïý¾/&"ÆöBÐSäÆöcíÐ Íê{õcí6èóðv £ÙÒZÿW&": {õ]ù¸øžacíøøŠóÚÍêèÿîÛŠóÙÒ«Í6è &"c%SaúïÚÝl÷3gD3{õÙÒ0ô¦úQÆöbþSþñ56è>òèâìqüŸåìúï* —]ù%û™ñ£: ]ù0ôg¼áÚóð£S¦]ù… £DqàBÐÍêWµþžîZÿäòÚÝ>ò&"ˆl÷ñ¼á©úKî%ûŸåŸåcí: Ð ýcíý­ÿÊ K¾/¼ýbþý¼ýâ£ìß QW3qàcíøZÿæÅŸåcíøøˆñ… ÊÃü꣔iýH… Wêã0ôÍêqüH£êæÃü+ üþZÿ¯î6èDg c%ŸåpÕü{õúï6è6èSäZÿ¯îÿÊÊùøÿúQ %ûÆöäò>òóðBÐÐ ýQ6èÚÝËûÚÝŠóÚc%+ ãqàD­ÿ: 3Zÿ¯îZÿˆè¼ý… ]ù]ùøˆWýÊžµþÚ]ùDÕôl÷úïÙÒcíSäqà¾/Dâ™ñÚ¼áéS䏸øžWùžø+ ýüµþqà6èl÷gaß èQ: a &"—ÿ Û6è£Êc%3K6èÚWv ŠóWQ¯îgìµþl÷óðâ]ùcíé+ Ê'-øµþ]ùiýcíxûÊž¯îgØ]ùcíÆö¸øD£iýÆöˆ l÷gîø: {õ£¸ø¦&"%û+ ü épÕl÷c%:*… éÚBÐËÚÝýÿ{õ: ß H«ÍÚìv øÊñã¯î3¯îÕôQ3U2ù'*ñŸåÚùúSäß '-  é{õ øD0ôqà>ò+ ø™ñ3èóðxû+ WÚÝ3 úÃü]ùDSäß Úcí]ùcíÛþgýqücíS'-ÆöÍê¯î¸ø: c%:&"êÚÝúïžúŠó6è6è¯î0ôc%'-ß Õô6è©úBЯî¼á™ñqü 3£ÚÝ鏸ÛDŠóÆöÆöÊÚãU2ÆöÚÝ]ù «ÍÚ­ÿ ¾/W ÚÝÚãv &" 6èÚÝÍê: Q¼ýZÿãÐ c%:0ôóð%ûSÆö¼ý¼ý: 3ÿ™ñ”Æöéêæ>òþÊÊ'-:!öWŸåKÚÕôýè±<ù'£ŸåØpÕãæÅêæêæÂ *&"Wì4ÃüÚÝÚÚÝ0ôK&"úQKù'ýÚ=ø­ÿŠóøÐ 0ô­ÿ úïÍê¸øqüµþóðKcí}ÈúÊì4úïcícíÚÝ"¾ÙÒƒ7*c%µþ”cíqüäòpÕŸå0ôÊc%”{õ>òqàÍê+ *¾/l÷ÚÚÝãiý0ôÃüv ùÛ&" c%KêæH6è6èpÕÛŸåSä Êèø£üÚÝ©úÊg{õÐ abþ¼á­ÿ0ôýcí3ƒ7¦>òìWêæøŠóž6è{õ!ö&"¾/HÛ+ Šó: ÛD¯î£Ð 3v OÃOÃ: øóð Hcí:  Ð ž¾/Ãübþ%ûqà>òqü]ùÚÃücíãaDqüäò ]ù{õqàpÕéè6èêø£ãÚÆö0ôqü3Ð ¦üÆöqà¼ýŠóiýÕôD:èKDù'Ð {õ6èSäBÐÚ}Èóð!öHgù'&"øêæ©úÚ]ùù''-ˆ6èãÚËû{õâDH6èÐ : Q]ùúïÚËû¼ýÆö&"&":c% ˆÍê}ÈêæK¯îSäc%'-ì4©úŠó¯îÊžêâúïÍêOÃËóð%û”Dù':ø]¶"¾ÚÙÒÍêxûD… ©úcí… Q ”D0ô}ÈHóð Ê'-c%þ=©úcíóðQÐ cíã6ècíŠó!öWøcíècí>òß ÚÚÝþc%qü¸øÐ úïBÐ{õ*¾/ÚÝãxûãHø&"v ­QÚÝÚÝ6èU2ÞAËûcí: ø¯î]ù¸øäòãŸå¦xûiýSÐ ÊÊ6ècíêæùÐ Ëûúï ÊÐ ¯îaÞA¾/Ú"¾ìÛñ£v QúïqàBЗ­:è«ÍêæŠóý¼ýÆöÚÝqàãqàa GäòSäØóð¹Àqà©ú£IP:DSäêß 6èìËÙÒãèa6è&"øc%'-KcíéÆö¶ª¼ýcíÊU2c%Êø ÚpÕ"¾¯î0ôúÊŠó}ÈBÐqüc%%ûÊ£c%¹À Säß qàŠó>òøG?:Ð ÿø¾/µþSäúïù'µþc%èß Úóð0ô”¼á]ùúc%ø cí6è¼áéÚúï6èÊüW&"gììH!ö6èS—ˆW©úã£Ê¦]ùÚÝ*v cí ¾/ËûÕôÊý…  Íêè]ùÚ: l÷ìÐ ¯î>ò>òµþSäÐ Ê ¸øã]ù: *ÚÝÚ—qü¼á”*:Ð ÃüãÚÿc%Sqüß ÚÐ ã™ñ>ò!ö£0ôU2úKâøxûÚ6è]ù6èúc%¾/+ Êqàÿø:£ISäŸåcí cíSäÚÙÒc%­cí{õì}ÈQ£: ÚÝãWQ]ùø™ñ¹À6è™ñì… èÛù' ÚÝ”óðpÕêæËD:ÊH"¾ÍêDóð"¾qàÛÊ!öýéÞAc%c%Ú>òcíô¸Úqà ¸ø”Êù'&"+ ÆöpÕ¼ý=pÕéèËûêæýØcí3­èqüÚÝiýÆöÊZÿ¼ýìcí{õÆö¯îS¸øø: Ð âÚ èD+ ™ñäòóðé{õ™ñZÿÚñ+ ãä¯BÐ: g'-¦6è¸øŠó*]ù«Í… :¾/QÚÝØ”c%… ]ùé: 0ô¾/H=äòÚÝcí3Ð 3ÚøæÅ6è%ûãqàBÐHèaÆöÊê'-: !öÙÒÙÒ¼ý0ôÚÝãÆöKÛ 6èâ ÊêQc%bþÚ]¶pÕ6è0ôQG?ì4ù' ÆöÊ”óðêæ0ôÚ¼áÚêæ]ù£ˆpÕ: 3a&"™ñZÿ]ù{õ¾/ÞAËû¦"¾üêæ>ò3¾/*žËæÅcí©úäò:Säß Q'-ß ¼ý5W¾/ GÙÒqàéØÚã ÆöžU2­ƒ7!öä¯0ô: aæÅBÐxûÐ : Ÿåóðñé*iýƒ7”ù'>òxûÆöcí¸ø©ú¾/¾/U2Ð ØcíØô¸æÅ"¾Æö&"ß ø™ñ6èÚqàèÚÝ%ûãc%ƒ7âÚøÊù'6èÊBÐÚÚÚݾ/6èóðbþø36èPcí5W£ÞAú>òî: ÿBÐìƒ7©úŸå: æÅÆö'-µþñÆöóðS+ c%­Ê£]ù©úSäÚÝQÚݼý­'-£pÕv 3ÆöÍêÚÚ JU:c%ÞA6èéô¸¯îDƒ7ÊóðKý¹Àýc%%û”øãÙÒcí£HÃü¾/}ÈË"¾qüÛù'Sä}ÈOã{õìK'-ìÚÝQ0ôÛÛ Êù¼áêæpÕø”éýc%*”îcí: ¯îÐ ù'ÛÚã«Íô¸ä¯0ôÆö**µþc%ÙÒêæQDß Ë!öù'c%Qcíø: øÕô: SÙÒ0ôóðËû'-ô¸¼ýù'¾/é: ÊÚèø*úïÆö6èHÚaDÊîDÊŸåU2ÚÚÝêqà6èÞA¯î¹Àã Säcí±<¾/Qìqàcí0ôDKc%êÆöØ6èÆöv ¯îQ£50ô—™ñ: "¾BÐÊv Hø0ô±<6èKúï ù'¼ýqàµþD«ÍÙÒ”=­Æöqàýƒ7qüØÙÒOÃèóðü¯î¸ø­0ô&"ÊBÐË=c%U2”ø¸ø0ôÊ*… "¾ÕôŸåÍêóðÍêH: Ûñ: cíè&"3—ÊÿcíæÅæÅ¯îÍêl÷Ê ¾/ž: : ”Úéè… ]ù¹Àß &"cíbþ:QSäl÷øêæ6èÙÒBÐWDÐ c% {õ™ñ… øSä­xûc%¸øcíêæcí: ÆöÕô DËqàc%qüÕôBÐa¯îBÐcív qüK*Ê>òÍêýc%qàù'6èäòêæqàBÐìBÐÙÒ0ôÊÊ!öÐ xZc%ÙÒ¼á+  "¾Sä: ÞAÞAùè: OÃæÅ™ñøSäÚø:ú'-ÊQBÐiý¦Ð êæ©úù'ˆ¥ý¦ß ù'¯îÛ­¯î¼ý™ñóð£Bо/&"¸ø©ú!öQÚiýøqà£ÙÒ'-&"ØÙÒcíóðHÊóðG?3{õ¾/+ ù'Íê"¾'-qà6è¯îäòKñÆöBÐcíPc%0ôcícíÚŸåêæSäµþSä£I Ëû¼ýóðþñl÷«ÍæÅæÅcící¾/”:ü¼áä¯êc%'-DÚÝè: : bþ£”™ñK ƒ7êÙÒ¹ÀKÊc%ý3ØÙÒÚÝãúìÞAù'*¼áô¸cí¾/Æöcíêæ0ô6èýÍêæÅcíÊD::±<Íê"¾ä¯¯î'-'->ò}Ȉ¸øD¾/­äò¸øBЃ7JU¦_v ÚSaÆö aBÐѶª6èW±<&"c%îãÍê ÿ*ù'¦Sä"¾6èSäæÅü G?U2=­ÆöóðQgpÕ¶ªÚ5øÚÝ"¾&"©úÞAù''-æÅãô¸ýÛ {õc%'-èDýÚ¼á}ÈQž&"Q¦æÅ5>òQ=ãqà… ¼á¼áß :¯îæÅqà6èÚ&"Úݼá]ùÍê¸øêæ'-c%ù'¦¦Õôóð0ôÊWHÐ ù''-ì4ùaH—ŠóBОÐ D¾/cíÊÊãè¼á¹À¼áHøØ"¾ÚÝ'-DŸå6èBÐýž3¼áêæU2Øqඪ¹À¾/¾/ê:”ÚÝpÕ™ñ é0ôÞAc%"¾"¾OÃãHG?G?&"l÷ÙÒã£ÚÚÝØa + cíì”}È©úÊ&"*c%ß úïóðô¸¶ªýZÿØæÅv {õ]ùgúï¦ýcí'-è”óðúÐ … l÷«Í]ù:D¯î:¾/BÐãÙÒŸåˆZÿc%êæ­ÿ*Zÿø¸øÃüì4ÞAÕôãcíóðÙÒ6èÛÊcíÛÆöóðpÕ©úU2 Gøacíl÷é6èpÕSäµþ¾/¦Zÿ{õ5£I¾/ê6èŸåcíÛÚµþ¼ýù'¾/«Í¦ÚÝbþ]ù6èì4'-¾/ÚOÃä¯Ëcí¸øØÚÝ: ú©ú*DÊpÕã c%ø™ñ}ÈÚÛP Ð ƒ7&"0ô"¾¹À¾/3Õôô¸ÙÒÚù'xûµþ£>òøc%è™ñø >ò"¾©úù'¾/ì4ÚãúOÃÍêQ£IÿæÅqàiý:¾/g¾/éêæã&"]ùì"¾Ÿåýýÿ¾/ÞAÞA Gc% &"BÐæÅa&"3ì¸øqü%ûÕôÚc%ÿÚÆö6è]¶Ú©úÞA:ãŸåÚqàév ÞAÞAU2¾/ÚÝîü a«Í­Ê"¾ÆöÊÚÝOÃ]¶Úqàì :P'-—]ùÚ Ëqübþqà0ô:c%ß }ÈOÃèU2Ê{õ£Dè'-ø¯îÆöÐ  ô¸a¾/c%ÊŠó0ô¦¶ªcíêÙÒ6èéU2ß Õô0ôƒ7G?ìä¯Ú{õpտŨDc%!öÍêè v Æö£IBÐã­¾/c%ì4ƒ7Scíê­ÿqà6è¸ø+ ¼ýÕôpÕ&"ì4ø… Q䯙ñ{õÍêêæ™ñl÷­ŸåpÕ6èÐ Ð Øqà«ÍQêæØÚG?­±<¦KBÐ{õQG?{õSäÆö'-WÚÝW+  ˼áž±<*ãÚÝ'-JUSBЫÍø¦!öBÐ3*Õô&"DÚSBÐ+ ÚÝæÅ>ò­ G!öH¦:v ã3Ð Ú¶ª£‹qàBÐ:Ð ÿ©úù'ì4Ê: žPJU&"aW­cíéiý ýì]¶£ãÆö0ôqü Ú¯îZÿè]ùÚÊ6èß ¯î5Ú*ƒ7ÊóðqàØ]¶ãè­é&"øØH™ñËcí{õ¼ý¼áBÐ]ùÊ£JU£I¦>òbþbþËæÅv 3ù'Ú&":óð6èWÚ6ècíU2c%qàÚÊÞA3ŸåS䏸ÚÙÒ¼á'-­«ÍØ” c%üé"¾ØqàÚÝÚU2Wc%l÷êæËû3ù'0ô"¾ÚJU]tøBÐBÐÚcí£ÕôDcíSäPß G?&"¯îóðS£v : 6èúïÐ óð]ùc%cíc%Ð 6è"¾óð££%ûêæ}ÈÙÒ¸øDÕôŠóß 0ô¹ÀêæÐ ƒ7ÛÚÝ­ÿ¾/QÚæÅaî G?:óðé™ñ¼áÚQì4ø6èl÷¼ýÚÝqà{õ GÓdc%óð¾/ضªéŠó¸ø=*… øž{õ: êæD±<êZÿËØSäù'æÅBÐZ Ú è*]tì4KKýÊÚݹÀø£IJUD±<c%cí«ÍìÚ>ò £Ð l÷ÿì¾/ÞA+ ¹ÀpÕñß ýDÍêOÃBÐ"¾cíý«Íêæ'-&"… ì4¾/ƒ7cí¶ª£c%3BÐþ6è«Íãv Ê£ G¾/ ÆöÙÒ"¾øOÃ:­øÚݸø0ôè£&"Ð —0ôÚæÅqà]¶"¾¸øêŠócíQG?ý¾/¯îOÃBÐØ: óðl÷ƒ7ãæÅÙÒQaäòù'¾/xZD"¾¹Àô¸=BЦ]ù:‹yÓd£IÊúéÐ ËÍêPc%:=-›}ȯîcíc%¾/3… cí… U2ý¶ªOÃæÅa}Èô¸ô¸ØÛ£I™ñØ™ñããì4ØÚ]txZKã]¶ô¸0ô*c%Ód]t G 6è6èÙÒ 6ègcíù'óð¯îÚÝÊcíÿã '-:G?6èÑ-›OÃé"¾ø*Ód{õÚ­ÿƒ7±òBÐac%ì4:ããBÐ6èÙÒîé¼á"¾æÅÍê6èQQG? G¾/U2c%±<øÚÍê¾/ÙÒô¸6èêæSä ÙÒcíÊc%D:£ÊÊÛ­ÿÊ6èéiý0ôËûÚÞAv øËû>ò«ÍæÅ}ÈxûÚÝÚÝØê­ÿÊèŸå©úbþ*úúïîÆöŸå"¾6è]ù>ò G?­ƒ70ô]ùSäqà«ÍÚÆöʼáD*ù'ÆöÚä¯Êì: ÿÞA}Ècí¯î¼ýxûè¹ÀcíøÍꈥÚ>òc%a'-¾/ 6èÆö=>òŸåãÑ­—D G¾/U2Æö{õv ÆöÚ SW Æöô¸úóð}ÈU2ƒ7”JU¾/0ô"¾îül÷ŸåÚ}ÈâSägG?ÞAÊø:DæÅ¶ª0ôc%c%¾/: G¼á}Èä¯BÐÐ 0ô£I}È£‹Ë0ô¯î”ÿJU3ÞAøqüU2¾/Íêqà}È*Säÿ•æÅ]ù G£Iø: ­ýžiýì4ÚÑ ù'±<ÚØÐ ñ­BÐô¸ÚqüBжªä¯SäêæWBжªqà¼á:ì4£IÐ ¼á+ Ð Øcí£QÚÙÒè Gú3ʦì cícíØÚc%¾/:3¾/î6è35ËÚZÿ«ÍØOÃø¾/ÞAJUŠóBÐÐ þDÊ]ù¯îÙÒ Pé: ù'G?Qøqü"¾¶ªpÕ'-úïÚÝqüú*6èô¸ì¹ÀÍê¾/c%D6è]¶BÐa£IÐ ƒ7BÐécí¸ø£Ëóðù' :U2Q: ù'Ÿå¸øOÃ: Qiý ÛcíK U2è¸øÙÒÙÒý«ÍÙÒa±òBÐÿ•Oæ_:l÷êæ&"Øô¸¶ªä¯ÚÝì4¸~¸~]txZúZ ô¸jÓd]tÓdJUÞA*¶ª¶ªu†£‹-›a‹yÓdxZP:æÅu†u†ÿ•øG?pÕÑ«Íóð£jêæZ ¶ª¹ÀJU¸~/oJUô¸Ú:xZ u†ÑZ ô¸¦_‹y/oÓdxZÊ]¶£‹ÑZ '-/o¦_ GæÅÿ•ÿ•cí¦ãÐ ]tÓdJU£I¾/H«ÍÚÝ-›BÐcíZ Z ä¯ÞA/ojxZPc%u†u†ÿ•ä¯ÞAÓdxZ­Ÿåꈥ-›ˆ¥"¾JU]tjxZP:"¾ÿ•ÿ•-›¶ªæÅÓd¦_ùÚDxZG?ô¸¶ª¶ª6èÓdÓdxZÿæÅˆ¥ÚîúïËô¸}Ȧ_jÓdxZJU±<µþZ Ñÿ•ô¸£IJUJU'--›Z ¶ª"¾Ê*j£IJU£Iƒ7ˆ¥Ñÿ•ÿ•¶ª£ù'¯î¼áqàxZjJU£Iøu†Hÿ•ˆ¥æÅì4/ojJU£Iµþä¯ÿ•ÿ•Z Bи~ÓdJUG?BÐô¸ô¸-›¶ª}ÈjjJU]ùä¯ä¯™ñJU0ô¶ªä¯ô¸S¸~]t¦_0ô¶ª%û'-¦_*Z ä¯W/oxZJUÞA: Úÿ•£‹ÿ•ˆ¥ñ¦_JUP GÚ݈¥ˆ¥¶ª-›¶ª… ‹yÓdJUPG?>ò]¶ÿ•ÿ•ä¯:¾/iý]¶ä¯ÚÝ/ojJUì4]ùpÕãqàxZ:¼ýƒ7±<ø-›Ñÿ•ˆ¥ì4j¦_JUÞA*OÃÑÑ-›]ù GxZP*Z Z ¶ªDô¸qà]t]tj¦_: ä¯ÿ•Z *Säÿ•ä¯Ëj]tjxZƒ7-›-›¶ªOãIÓd+ ]¶©úÆö"¾ä¯"¾6èJUÓd/ojxZPÞAóðÿ•Ñÿ•Z ÚÓdJU'-ÿ•¶ªxZÞAÚÝÙÒè:U2¶ªæÅ¾/BÐcí]ù"¾¶ªä¯˸~]tÓdJUƒ7]¶£‹-›¶ª«ÍjÓd*j:Q­ÿ¶ªˆ¥"¾Û¦_JUxZJU±<¶ªÿ•ˆ¥P±<ÞA—Z ÿ•ô¸jJUƒ7ÿ•Ñÿ•¶ªÂ ]tÓdJU£I ]¶Ø"¾Ñÿ•¶ªì4jxZJU G¾/Z Hu†"¾c%£I£IU2£‹u†Ñ-›BÐ]tÞA¹Àô¸PJUaOÃqàì4qàêæSäZ ˆ¥¶ªæÅ G¸~]t GŠóæÅSä:øjÓdJU GS䈥Ñÿ•Z ä¯ž¸~/oÓdJUÞAô¸Ñ"¾ýPaWZ -›¶ªcí/o/oJU¼ýÿ•-›OÃÓd¦_P"¾ÿ•Z ÚxZ+ ¶ªä¯"¾Ód¸~/o¦_¾/Í궪-›ˆ¥æÅ/oj¦_ G-›¶ªOÃ]¶"¾Øù'j¦_JU Gýu†u†ÿ•]¶Â ¦_ä¯ô¸Ð ¸~j¦_JUÞAOÃu†Ñýcí¶ªÛjÓdJU&"-›Ñÿ•¹À]tÓdJUƒ7Z Ñ-›æÅ=îxZÓdP¾/Æöä¯cíU2ä¯ÿ•ÿ•Z "¾PjÓdJUóðÑBÐjJU:Z -›ˆ¥Ú¦_jJUxû¼ýÿ•ÿ•¶ªc%cí£IÓd¦_Pø BУ‹ÿ•ˆ¥˾/jjPÚˆ¥%ûä¯OàxZjÞAêæä¯!öâé: ±<P GÓd¦_Pqü: ÞAÞA¾/BÐHu†u†¶ª±<¦_JUÞA«Í"¾ƒ7ÿ•]ùæÅÿ•Z ñ¼áä¯Ú6è¹ÀOÃ%ûj¸~]t¦_øÚ"¾£I£IxZø¶ª¶ª}ÈJU±<±<ù'"¾]¶"¾JUjxZ*'-¶ªË£Iˆ¥Z ¶ªý¦_ÓdxZPÞA'-BУ‹-›£‹-›™ñ¦_£I«Íÿ•ô¸6è±òjÓdPˆ¥Z ]¶¶ªÙÒ]tjxZ¯îô¸qüpÕÙÒ"¾OÃÚ£I¸~/oÓdJUPÞAØÚ:Êu†u†Í궪Z ¶ªÙÒjÓdxZJU:¶ªc%'-¶ªÿ•ÿ•Z ä¯ jPÙÒ]¶Ð ¾/ÞA Gêæä¯ä¯:ˆ¥ËÞAÓdÓdÓdJU G5ˆ¥ÿ•ˆ¥WJUÞAJU¾/¶ªÿ•ÿ•ä¯ÞAjJU&"舥-›ˆ¥£jxZPG?}Èu†¶ª]¶Ø"¾¶ªô¸ãG?jxZBÐ"¾ÙÒ/ojJUʈ¥ˆ¥¶ª"¾ß /oj¦_JUÞABЈ¥¼áä¯Ëaì4æÅä¯cí‹y¦_JUì4ÞAc%±<¾/­Ñu†ˆ¥£‹ÿ•ä¯è­JU*cí:ùu†ÿ•Z ÙÒ*j G]¶Ñÿ•¶ªOÃJU]txZZÿ]¶ä¯"¾¾/¸~/oÓdJUÞA"¾ÿ•¹À¶ªË jƒ7pÕ}Ⱦ/JUÞAÚÝZ øjJUa¶ªÿ•-›¶ªÛ¦_ÓdxZJU:"¾ìÞA0ôH¶ªZ ¶ªÙÒä¯]¶¹Àú¸~¸~/oÓdP鈥¶ªÚÝ… DxZD-›ù'Z ËÚBЯîBÐ:¸~ÓdjJUøZ OÃ-›ÚÝ:xZ£IæÅ£‹ÿ•ˆ¥OÃÓdjxZøô¸¶ª]¶ÞAgBЫÍù'¾/ƒ7ù%ûOÃÃü¸~ÓdJU Géÿ•£‹ÿ•ˆ¥6èj¦_JUÞA¶ªÿ•]¶ G±<¾/v ¶ªÿ•ÿ•ÙÒÛØî¦_ÓdP GU2ä¯Ñÿ•ˆ¥ô¸P‹yÓd>òBÐ&"jxZ G6èæÅÿ•¶ª"¾ˆ¥¶ª"¾c%¸~‹yj£Iq࣋ô¸Ú݃7/o¦_JU:£‹Hÿ•Æöꈥ¶ª]¶K‹yj¦_… £IJU G:u†u†u†Ñˆ¥êæjj¦_JUã-›: ÓdJUG?-›Hu†ÿ•Z "¾ž¸~¸~]tÓdJU¾/Ñ£‹äòcíÿ•Z ô¸3c%"¾æÅBЦ_¸~‹yj&"ä¯c%/oJUG?Ñ£‹-›pÕù'U2]¶¶ª¶ª"¾W]t/ojÓdJU G™ñ¶ª-›ÚÐ "¾>ò¶ª¶ª"¾ GJUýÕôÓdJUJU£Iù'£‹£‹Ñˆ¥ãj¦_JUWô¸-›¶ª¾/ÓdxZÞAÿ•ÿ•ÿ•¶ªc%jÓdJU GJUÞAÿ•£‹ÿ•BÐì4JUƒ7v ÑZ U2Ð ¶ªã£ÙÒ:¼ýÿ•Z ä¯ ÓdPJUèì4¦_£IQ£‹£‹ÿ•HJUJU]ù-›ÿ•¶ª"¾JUÞAÞAøþ¶ª}È ¸~jxZ G¼á"¾ô¸ÙÒô¸-›Z ¶ª]¶è¸~]tjxZJUÞAÚÝgÞAì43ÿ•u†u†u†ÿ•"¾]tjJUÚ£I G¼ý"¾£‹Ñ¶ªì4Z Z ¶ª"¾xû¸~¸~]tJUDØúïxûBÐË6èjc%Ód]¶ä¯èóðô¸"¾Bо/¸~¸~/oÓd±<Õô"¾ÛÕôô¸ãä¯ä¯]¶ËÞA¸~/ojxZJU GG?ì4-›u†u†u†ˆ¥ù'g-›-›ˆ¥ô¸ÞA]tjxZÞAæÅÿ•ÿ•¶ª}ÈbþÞAj¦_±òÊv u†u†u†u†£‹¶ª«Í/o¦_Oþ/JUJUPÞA¾/ÿ•u†u†£‹ÿ•ˆ¥]¶BÐ]t¸~¸~‹yjxZPBÐ-›Ñÿ•ˆ¥¹À£I&"¹À¹ÀÚj¸~¸~¸~Pc%«Íˆ¥]¶ê£I¯î¶ªô¸}Èظ~¸~qàãÓdƒ7¸~]t/oÓdJU GWu†u†£‹ÿ•䯱ò¸~‹y/o&"ÿ•Z ]¶Ê¸~¸~jPZ £‹ÿ•ˆ¥OÃJU]t/oÓdJUÙÒÿ•ß {õu†Ñ-›¶ªqà¦_/oj¦_U2P:ù'¶ªu†u†u†Ñ䯦_¦_Pu†u†ÑéjjxZU2Ê«Í"¾Ú]ù*: Du†u†&":ÿ•u†Ñÿ•¶ªxûcía¸~¸~¸~¸~/o¦_£IBÐu†H-›¶ª¶ªä¯"¾6èqàù'Ód¸~¸~]tG?ÿ•ˆ¥¹À/o‹y‹yjxZ±<¶ªu†Hÿ•Ú¸~/o­úï¦_µþ+ JUU2-›u†u†u†¶ª¦_jG?ˆ¥ÿ•-›]¶Ód¸~‹yj¦_£I0ôˆ¥BÐÞA­ÿ£‹u†H£‹ÿ•¶ªÍê]t¸~¸~/oÓdJU£Iì4ÿ•u†u†u†Ñˆ¥ô¸W¸~‹yì4䯶ª"¾cíùxZ¸~‹yjxZl÷]¶ÚÝu†-›Z ¹Àj/où'ˆ¥ˆ¥¶ª¼á/o¸~‹yJUc%jJUc%D:%ûHu†u†u†£‹-›]¶äò‹y¸~‹yjJU G¾/u†u†u†u†-›¯îø‹y]tj&"£‹¶ª«ÍJUW£‹-›ˆ¥OÃ"¾Ú G¸~¸~‹y¾/"¾ô¸¾/ù'¯î="¾qà©ú]t/o]tjxZPŠóSä"¾ÊHu†BÐË3Z ÿ•Z }ÈÞA]t]tj¦_JU GQu†u†u†Ñ]¶µþJU:ÿ•¶ªæÅBÐÞAÚZ OÃ7¸~]t/oÓdJUG?c%ô¸ÿ•u†"¾u†ÿ•-›¶ªcí¾/‹y‹y/oxZÕôu†ÿ•æÅj‹yjPä¯u†£‹ÿ•¶ª¹ÀÞA‹y‹y/oÓd GxZÞAÊu†u†u†Hÿ•pÕjj]txZÿ¸ø”P:¶ªu†ˆ¥ù'cíÿ•ÿ•BÐ"¾Úݸ~]tQu†-›¶ªä¯æÅ¸~¸~¸~¸~jÞA¶ªÚ¶ª¶ª*ÞA ˆ¥¶ªä¯¹ÀÚÝBУI¸~¸~¸~‹yjJU u†u†ÿ•Ÿå¹À¦_Ódýä¯cí¯îÞAJUxZJUc%ÑHÑ-›Ø: ¸~/oÓdJU G3u†u†u†u†ÿ•䯃7ÞA¸~]tjJUÐ ¼á£‹Ñ«Í£IPÙÒ-›ÿ•æÅÿ•"¾±<¸~]tj¦_£ID£Iu†u†£‹Sìô¸¶ª¶ª«Íc%JU¸~¸~j¦_ÞAÑu†ÿ•cí]¶Ú]t¸~/oÓdPOÃu†]¶u†-›¶ª]¶Zÿ¸~¸~¸~]tÓd¾/Ñ}ȼáô¸JU£IZ Ñÿ•¶ª]¶—¸~¸~¸~/o¦_ô¸­¦_:qàu†u†QQ¶ªÿ•Z Úä¯cí/o¸~¸~]tÓd¦u†£‹"¾ˆ¥¶ªóðj¸~¸~Ód"¾Z ñ:JUÙÒä¯D GÞA*a!öô¸é… u†u†ˆ¥¶ªZ ¶ª}È‹y‹y¸~‹yjxZÞAÞABÐu†ÑÊu†u†-›ظ~j>òÿ•pÕ"¾]¶ÞA¸~¸~¸~jP-›u†ÑÚÝ"¾ù'Ód‹yÓd&"G?Hu†BÐxZHH-›]¶:¸~¸~‹yxZ G'-æÅ0ôJU¾/u†u†u†u†£‹ô¸qà¸~¸~¸~Ód"¾u†]¶ù'Íê«ÍË‹yU2]¶ÿ•'-ÿ•ÙÒcí¸~‹y¦_‹y Gˆ¥HpÕc%"¾ÿ•¶ªÚ G Gj]taPèK}È"¾c%xZÍêä¯è¾/èƒ7j:P:¶ªu†u†u†u†ÑSä¸~‹y]tjJUÞA}Èu†Ëÿ•ÿ•u†£‹Ø-›ˆ¥ä¯æÅüSä¼ý¸~¸~¸~¸~¸~/ocíu†"¾]¶©úøJU0ô£‹¶ª: ä¯3¸~¸~¸~¸~¦_{õu†u†ÿ•cí Gj¸~JUjxZ¾/¶ªu†u†u†ˆ¥”g¸~‹yjPc%qàu†u†u†Hÿ•䯱<¸~]tÚBÐô¸ì4¸~¸~jc%ù'PDHu†u†u†ÿ•]¶ù'3ÑZ "¾c%j¸~¸~¸~jÊ™ñãÿ•ä¯Z ù'c%©ú'-j¦_ì4u†u†u†u†Z îj/o¸~¸~Ódãô¸ù'ÞA£IBÐcíìBÐÿ•Ñu†u†Z 3Ód¸~]t}ȶªJUè&"¾/èì4jxZ­ÿæÅÿ•u†u†¶ª±ò¹Àä¯ÍêÞA¾/êæØÃüäòˆ¥]¶«Íä¯ÿ•BÐ&"… G?xZ¸~¸~/oÓd±<]¶ÿ•Z … ô¸u†u†Z BÐZ l÷‹y¸~¸~¸~jG?Oöªu†u†ÿ•jqüU2U2æÅ£‹Ú¶ªø¸~¸~]tjJUóðu†u†u†u†£‹ˆ¥¯îÞA:¸~¸~¸~P£I: u†ä¯£IÞA¶ª¶ª"¾±< GÊc%!öBÐ:]txZOÃu†u†u†£‹ˆ¥¾/¸~¸~‹y‹yÓdl÷pÕƒ7ÞA]¶u†¶ªØÚÝ-›u†ÿ•ÙÒŸåù'ÙÒÕôj¸~¸~‹y0ôOÃÐ ¾/ø±<jJUBÐu†]¶u†H¶ª¹À-›ô¸Â jG?… êæj¸~¸~¸~Ód*¼á©ú}Èÿ•u†u†u†ÿ•"¾ÚÓd¸~¸~¦_j/oJU Gêæu†u†u†¶ª*æÅ䯫ÍÐ %û0ô GJUj‹y/o GæÅu†u†u†¶ª¶ª±<¸~JUOöªˆ¥¶ªÐ JUÞA©ú G¦_ƒ7¾/JU¸~¦_DøÑä¯ä¯u†u†u†ÿ•ˆ¥ô¸¼ý/o¸~¸~¸~¸~]txZQ¯îÿ•u†u†u†OÃÞA«Í¹ÀQì¸~¸~¸~/oè3BÐu†ô¸"¾HBÐæÅBÐ G¸~¸~j¾/±<Ú}È"¾ä¯ÿ•Z >òʸøŸåv £I¼á¶ªô¸Pø¸~‹y±<ÿ•u†£‹{õBÐ]¶£I¸~¸~¦_Øu†£‹… U2é"¾ÿ•BÐ-›ˆ¥¶ªc%jƒ7¸~¸~¸~/o¦_Êÿ•u†H-›u†-›&"¸~¸~c%ÆöÚÝô¸g¯îØÿ•}ÈÙÒJU0ô&"]t¸~¸~]tjG?úïìú£‹u†u†u†¶ªÿ•ˆ¥"¾Ú¸~¸~¸~¸~¸~jj'-¶ªÿ•æÅì]¶u†H-›«Í]¶BÐU2¸~¸~¸~jJUô¸¶ªÿ•"¾ì4xZj¦_ìÑu†£‹ÿ•Z Ú]t¸~™ñ]t¸~*aä¯ô¸&"BÐZ Æöî-›u†Ñ¶ªù'j¸~]tÓdJUÞA­ä¯BÐÚ>òxZZ u†£‹Hu†ÿ•ˆ¥ô¸a¸~¸~¸~¸~¸~]tjPÙÒu†u†u†u†ÿ•¹Àèj‹yjP‹y:ä¯u†£Û-›Hu†ä¯xZ¸~jjjþÞA¾/-›u†Ñ£‹¦D0ôËØWcíxûZÿJU¸~j‹yJU]t Gu†u†Hu†¾/âÿÊpÕ:±<£«Íÿ•OÃZ 6è¸~/oÊcíÐ ]t+ JUÞAˆ¥ÿ•ô¸ÞAæÅu†ä¯¹Àj¸~¸~/oxZSäu†u†u†u†£‹ÿ•"¾cíÞA/o¸~¸~¸~‹yj£I™ñ¯îô¸ÿ•"¾u†u†u†u†-›ô¸™ñ¸~¸~¸~¸~¸~/o¦_c%£‹u†¶ª0ôƒ7ãä¯Ñ£‹£‹ô¸aÓdjv ¸~¦_êÙÒ>òc%]t¸~/oPqàu†u†BÐcíHÿ•"¾]tJUc%/o¸~JUæÅãu†u†ˆ¥'-jƒ7îc%£«ÍZ -›]¶P¸~P+ c%¾/G?JUÿ•u†"¾¼ýä¯ô¸¼áãæÅ¹Àù'£IP¸~¸~]tÓd¾/ÚÝÚu†u†u†u†æÅ¸~¸~j¦_ô¸ä¯¶ªu†H䯾/ø]t¸~¸~ÞA… SäÚ ¼áì4øOÃu†£‹Säu†Z cí ¦_£Ij/o3ÍêæÅ]¶æÅ*JU¸~*ÙÒ]¶ä¯"¾«Íÿ•Šój¸~¸~¸~jÚu†u†HÑ"¾îxZ¸~¸~¸~ÞAé™ñ: Ú¶ªÿ•«Íô¸H¶ª]¶ì4]t¸~JU/oƒ7¾/g*«ÍÚÝ"¾]¶ÿ•¹À«Íc%*JU Gù'¦ÚÝ6è©ú©ú:U2 u†u†u†-›Z æÅv ¸~¸~¸~]t¸~j ãô¸u†ä¯ÚÚÝŠóBжª-›¶ª}ÈH*£ÙÒÚøj‹y¾/¸~]t/oÓdÞAqàqඪu†u†u†u†£‹¶ªƒ7¦_¸~¸~ÆöBÐBÐU2£I¸~¾/c%âØÿ•u†u†ÿ•Úqàóð%û‹y¸~‹y¸~‹yÞAÊBÐHu†u†u†pÕ¦_¸~¸~G?:£IÆöØøË&"ÚZ u†Z 6èU2£I£—pÕZ c%ú0ôBÐæÅÚ/o¸~¸~¸~¸~jù'£‹u†u†u†ˆ¥"¾6èã:£I]ù6èÞAj:xZ¸~]tÓdP]ùu†u†¶ª¶ªˆ¥«Í¶ª£Wì4PpÕ¾/ƒ7xZ&"Ë-›Z u†Z c%{õÞA¾//o¸~‹yj±<: ˆ¥Hu†u†u†HZ Dj¸~¸~¸~ÞAÐ ©ú¯îÍêBЩúƒ7©ú"¾u†Ñ-›Ú£I¸~¸~£IDZÿqàã… ¼á"¾"¾¯îÙÒ"¾3'-3¦_ÞA¾/U2¦_ÍêZ ÿ•æÅäò£I:­±<jj㣋u†u†u†u†Z + Õô ¸~¸~¸~¸~¸~è©ú¸øø䯣‹¶ª]¶Z ÿ•Z æÅ±<¸~¸~¸~jQÚÝc%jDqàã]¶-›£‹6è£IÞAJUʈ¥Z ŸåÞAæÅu†ÿ•Ÿå¹À¸ø¶ªpÕ¦_/o¸~‹yì4&"júïHu†-›BÐËä¯ù'ì46è™ñ¸~£IÓdÆö"¾ˆÚ"¾¾/㶪 򾁣j¸~¸~j:ÿ•H}ÈËu†Ñ«Í GP&"*Ê£â-›£‹Šó‹y¸~¸~xZBÐ]¶]¶¶ªÙÒ¶ªÙÒJU GJU"¾}ÈÆöqà«ÍØ­ÊJUÆö£]ù*¦_£Ic%JU£I&"pÕ™ñø0ô¼áæÅu†u†u†£‹Z ì4j‹yP©ú Ê3qà]¶ÞAjÊËûãpÕÿ•ÿ•Ë"¾j¸~xZì]¶ÚÝä¯ÿ•Ú"¾ˆ¸~¸~jJU¯îÙÒBжª¸øpÕ!öSäÐ ÿ•ÑÙÒÞAU2¸~ÞAÓd'-©úZ u†ÿ•Z D¸øG?¾/j¸~¸~ÓdQqü]¶: ã"¾«Íÿ•ËÊæÅpÕgÊU2øƒ7Ódøa¸~‹yøÚbþ£Iqà6趪¹ÀŸåì¯îÚ¹ÀpÕùP¸~ /oã©úHÛÊK¼á&"¾/ãýu†u†-›ô¸Ë… DP¸~Ód¯îÿ•Ñÿ•&"'-ÆöJUj¦ã 6èãj:Zÿ"¾ä¯¶ª£‹£‹pÕD¸~/oc%Šó'-«ÍêùÙÒÿ•ÑBÐDÓd¾/Pú:JUÞAJUJU¾/¶ª£‹u†u†¶ªÿ•ä¯]¶JU¸~¸~jc%¸~¦_ù'pÕpÕ¶ª-›BÐ0ôÐ ]ùÿ•¶ª¯îË*jù'pÕ-›ˆ¥/o¸~JUÊKc%jj­Z £‹¹Àˆ¥ÿ•ä¯ì4G?c%:Ë-›Z '-­ÿÙÒø/oj¦_Ódv ¯îcíu†u†ÿ•¶ªô¸ÙÒ*6è:xZ¸~jG?ù'>ò}ÈHHu†ÿ•]¶: c%g¾/¸~¸~¾/Ûúïóð«ÍÚÝpÕ:JU£I©ú"¾ÿ•ш¥BÐêæ"¾¹À¾/¸~¸~/o‹yPxûc%ƒ7¶ª¶ªÙÒBÐ]¶+ 3ÚÝÚ&"ô¸u†ÿ•ìä¯Úݾ/¸~¸~¸~¸~/oècíêæ]¶"¾éêæu†ÿ•BÐ]¶”/o/o¸~¸~/oÊä¯ÿ•Ñÿ•䝨&"P/oPƒ7£I P£]¶¶ªã'-ù'G?-›u†Z ÿ•䯾/¸~ÓdÞAjPD µþ"¾u†}È]¶ìa0ôZ ˆ¥"¾:G?JUÓdj¾/ÞAóð-›ÿ•u†ä¯ˆ¥Øô¸"¾c%‹y]t¸~¸~JU33ì"¾ÿ•u†ÿ•äò¾/¦_j Giý¹Àu†H"¾æÅ­¸~]tJUÓdÞAƒ7Q舥H"¾Õô ÞAÚæÅ]¶Z «Í«ÍBÐxû"¾"¾"¾ß ]t¸~¸~¸~]t G±<ýæÅÑu†u†u†ÿ•cíJU¸~¸~¸~jZ ]¶ô¸ä¯Æö êúïô¸ÚÝ*Û&"±<:*ÓdÆöZÿqà'-¾/øgÛêæu†u†"¾c%BÐæÅ¸~£I/oÓdBÐÙÒóðéä¯ËæÅ]¶pÕ'- G­«Í: «Í­ˆG?âOÃä¯Ë}Èî¸~¸~]tJU3£"¾Ñu†u†«ÍK춪¶ªQ£I3£IxZiýÚÝ"¾¼ápÕ"¾Šó£IÓdxZ¸~ƒ7¾/üDÚô¸u†-›-›}ÈÚ±<Ód/oc%ÚÝãÍêÚÝSä¯î'-‹y GÍêc%qü'-ŸåBÐÑÛÞAP¦_qඪZ K£xZSæÅˆ¥¼áØýÿ¸~¸~¾/ ÞA+ Úqà3ËÑÊì«Íl÷c%c%G?:pÕ¶ªæÅˆ¥u†-›úï¾//o¸~¸~¸~¦_ÚBÐÚÝ]¶¶ª¼áÚÝ]¶l÷¸~*¼áøOÃu†Hÿ•ä¯ù'¸~¸~¸~¸~jÞAa6èpÕu†u†u†u†u†ÿ•ÚD/o¸~¸~‹yJUÚu†¶ª}Èäò£I¸~JU=pÕgG?æÅæÅýˆ¥-›¶ª¶ªø:j¸~¸~&"úïô¸¶ªu†ô¸ ñ6èä¯c%j¸~jD&"qüô¸ÿ•qàqü£Êbþcíé¦_P"¾ˆ¥”ô¸ß + qüêæŠóÞAJU GG?/ojPBÐZ ¶ª¶ª¶ªÙÒ}ȼác%ÞA'-BÐÿ•Ëc%&"¶ªˆ¥ ¸~JUj:'-é+ v Z u†u†OÃ]ùÍê&"Ód¦_™ñ¶ª«Íxû: W]ùBÐËc%‹y/oø¼ýãîiýô¸ÿ•ä¯ÚÝcí]¶úïSä¾//oÓdÙÒ-›«Íè¦_‹yc%Ú"¾ÚÚÝß â£I£Ižô¸ÿ•Ѷª]ùù'¾/±<jÞA¯î6èô¸ô¸: ¶ªˆ¥Æöì'-/oPaÃüBÐ!öJU±ò&"ÞAƒ7xZxZÞA"¾u†u†u†Ñ«ÍÞAP¸~¸~/o:æÅÚݹÀ"¾BÐý鈥Ë©ú”¾/±<¦_¦_H}Èÿ•]¶éU2 G¦_jxZãBÐ"¾ÿÐ 0ô0ôø£ÚÝø«Íÿ•"¾ô¸­¾/*c%!öQýiý«Í%ûg/ojì4æÅH]¶ä¯ÿ•Q G¸~'-xZÞAì£Ð ÚÝ-›u†u†Ñ]¶ ¸~‹yÞAc%JUU2 ÊOÃD&"xûŸåô¸BÐHu†¶ªè pÕ䯶ªÚ¸~¸~¸~¸~jJU­Ú-›Hÿ•]¶"¾êæËŠó:G?j Gì4¯î]¶¶ªZ ¶ªSägì4Ód¸~¸~jø:Kä¯Z ˆ¥¶ªÿ•ƒ7Pý*::JU33u†u†u†ÿ•øÓd£IcíÞAJU±òKqübþ'-ù'ìô¸-›Z "¾ /o¸~¸~¸~¦_¾/OÃô¸qàBÐu†"¾æÅ¶ªä¯ú*¦_PP¦_ø©ú"¾£‹ÿ•qàƒ7 GJUì4H©úÿ•u†Z >òqàU2&"£IjÓd'-­"¾¶ªHˆ¥u†Ë6èæÅ-›¹ÀÞAJU¸~¸~¸~:6èéñ&"óðH6èãæÅHZ ˱<ÓdU2cí:øã]¶>ò*¯îÆö:¸~¦_™ñ}ÈpÕÿ•£‹ؼýóðìØ:]t'-U2/oÿ•ÿ•ÿ•ÿ•BÐZÿU2JU‹y:ÞAËûBÐÚÝì4JUøWäòô¸ãÕô¶ªô¸¶ª«Í£Qˆ¥ä¯ù'Ód¸~¸~¸~¸~Ód "¾"¾«ÍÑu†u†ÿ•QÍêæÅP]t¸~ÞA Gù'qàÚÝ"¾ÙÒÞAì4 Gƒ7>òu†u†u†Z "¾ÚU23xZ¸~¸~‹yPÚ䯶ªH¶ªŸåˆ¥¶ªxû'-Íêxûøc%ÞAÞAÚ±<*P©úŠóÚ: ÊBÐ]¶u†ÿ•u†-›ÆöÚÝDÞA]t¸~¸~j£ù'Wqàˆ¥£‹Hu†¶ªÊÓdÓd:­6èWî3'-3ŸåØ'-¾/úãØËÚè¯îìpÕÞAU2øJUJU&"ÚŠóW¶ªu†u†Z ]ùì4¦_jJUÓd/o0ô6èýä¯"¾BÐß c%cíæÅˆ¥]¶Ú Gj+ ]¶¯îþ33£c%øÞAîcíʶªpÕ0ôóð]¶%ûóðOÃùÍêOëÍ:¸~JUʾ/ÚÝä¯Oüáì  ¼áQ+ µþÞAHéÚl÷¾/K"¾u†ˆ¥]¶!öiý¦_ù' G? GÚcíÚÝù'écíì4øOÃ"¾¹À£‹éù'óð G¸~¸~ƒ7­ØæÅ¾/ä¯ÙÒ6èÞAè&"g¶ª£‹¶ªÙÒZ ¼ýJU¸~¸~¸~£Iqà¹Àˆ¥±<£Iu†u†£‹OÃ&"­‹yÞA¹Àä¯]¶Úì4ì”ì4¸~¸~¦_ÚŸå¼áÚ£‹Ñ¶ªÑÚ&"ÆöøæÅc%¸~¸~¸~‹yJUqüÿ•-›u†ô¸u†£‹¶ª G¸~Q˱< G&"QÓd‹yJU*l÷æÅu†ˆ¥+ 㣋¶ªÚÕô:ø‹yJU±<é¾/u†ÿ•ÆöP+ :… qàZ HË/o£IÞAJUù'¾/v "¾-›äò6è}È£‹Ú¸~¸~îËæÅÙÒ-›ã&"bþ*jJU±<«ÍÆöø¹À6èÆöcíc%ì4QÆö]¶u†"¾ô¸Ú*‹y¸~/oä¯ãqàŸåBÐæÅ}È"¾ýŠó'-Qÿ•"¾¾/¸~‹y£I GG?Ú}ÈÚOöªu†ãOÃÑqàG?¸~Ód£IP Gäò%ûÿ•H-›Ñã:¸~¸~ì4ÙÒˆ¥ô¸ìÚݯî'-ù¼áÚÝSä”±<¦_/o]t¦_ƒ7JUBÐ]¶"¾u†u†u†H-›‹y¸~¸~‹y G6èþa¶ªô¸ ù'OÃøøÚu†Hô¸xZ/o¸~¸~‹yß ¹ÀÚl÷ÚÝ]ùpÕÚ݈¥u†u†Z :¾/j]tbþxûG?‹yjU2+ BйÀu†ˆ¥øì46è-›Ú£c%c%&"]ù3ì4c%… óðZ ÙÒãcí¶ªêæ6è G¾/:P Gˆ¥BЫÍ"¾u†ÿ•BÐ*Ð ]t¸~¦_aU2¶ª"¾ñD6è¹ÀŠó:ƒ7êæóðqàä¯"¾Ûcí"¾-›ÿ•ä¯éÍê&"aU2PÞA¾/BÐýËÕôcí6è!ö:ÊÊããJU=Zÿ: ÚËc%U2BÐ}ÈØ-›¶ªBЯîÊÞAÓd¸~ GG?gã«Íô¸OÃô¸æÅ}ÈÚÝŸåØJUqü£I£I¸~¸~/oc%¼áÚô¸¶ª"¾¦qàø䯶ª'-æÅ¹À¦ÍêÊg'-ÞAxZJU¾/ÚÝÙÒ: ü¶ªô¸:D]¶Z Ñÿ•ˆ¥-›]¶G?¸~¸~¸~¸~/oxZl÷¶ªé%ûóðô¸u†Ñu†£‹¶ªÓdxZj¸~jG? GJU'-Zÿ£‹u†ˆ¥Z ˆ¥Íê:¦_&":ãDc%&"¶ªˆ¥ô¸øZÿ'-JU¦_xZ3«Í]¶:'-¯î"¾ˆ¥u†Õôø}È]ù Gj¸~jÞA6èæÅ-›¶ªSäËÊc%£Iø«ÍéHêæ6èƒ7ÞAÞA]txZ]ùHu†u†u†]¶Ú GJUPÞA¸~j'-Íê«Í£‹ˆ¥BÐ 0ôËæÅBÐ5£I*c%îøƒ7JU:ÍêpիͶªÙÒ¶ªu†Z Ð c%ƒ7*JU:øWŠó:ÞABÐäòu†u†-›ˆ¥*‹y ÍêxZ'-­ÿ¸ø¯î G"¾-›]tU2äòcíæÅÿ•"¾OÃ-›-›ƒ7JU G¸~¸~:¾/ù'ì4èu†OÃSä-›äòžJUJUèîiýÑÿ•"¾¸øqàcí¦_¸~ÞA¸~PP úÚÝ-›u†u†ä¯Ñÿ•Ëj¸~¸~j¸~j GæÅÿ•Z £‹u†Ñ¶ªÚÝæÅøD¾//o'-ì4¦_&"±<£I£Iø¹ÀÙÒu†¶ªÿ•Ñu†ËÆöKøJU¸~¸~j¦ØæÅÿ•Úãù' G ­Íêaa}ÈãcíæÅ"¾"¾ä¯>òpÕ"¾c%jjxZxZ Gʶªu†¶ªqüæÅ: l÷K'-£IÓdúBжªË"¾ÍêxZ GJU¾/… "¾ˆ¥¶ªæÅ GJU¸~jøg«ÍîG?'-¯î-›u†u†£‹}ÈSä]ù!ö‹y¸~/oj¾/èù'­ƒ7óð£‹OÃcí£‹u†-›¾/¦_:JUxZÕôæÅþÚÝŸåÙÒZ î3PÓdZÿZÿ*æÅ6è¾/ÚpÕìcíZ ÍêD"¾ž+ Ód:c%]ùÑÿ•¹ÀBÐBÐËqàÞAJUc%]t¸ø%û*­ô¸ã3¯î}ÈZ u†Ñ}ÈŸåþj¸~¸~¸~¸~ G£¼ýÚÿ•-›˶ªÑ¶ª£IÞAU23ˆ¥ˆ¥¾//o¸~jäòÚÝBÐæÅ¶ªãæÅˆéHOöªÚQÓdj¦_xZÞAjì4OÃÿ•u†ÿ•pÕÚÝ£ÛËû]ùñc%]tPÿqüÚÝ"¾u†æÅc%P&"U2 G¦æÅ¶ªu†ÿ•ÿ•ÚÝJU¾/ GU2£IJU:è£é¦ G GDÿ•u†Ñÿ•u†6è!öÕôSä¯îèJU]t‹y¾/ÞAƒ70ô]¶ÿ•£‹£‹H]¶øù'c%JU/o‹yì4D -›u†Hˆ¥Ø G¸~¸~ÓdG?ýZ £‹ÑcíÚô¸BУI£I Gj*±<Šó¹ÀæÅéBÐÚæÅpÕì*: GÞAJUJUJUøÙÒ"¾¶ª"¾6èä¯]¶BÐc%&"ÞAPìZ ÿ•"¾ìÞAj‹y£I/ojJUZ u†u†u†u†ä¯cíG?j]tj¦_£I£I>ò"¾u†ÿ•ÿ•ÿ•£‹OÃ}ÈU2 G&"xZì4Ód¸~¦_:… ô¸u†"¾ô¸ˆ¥pÕl÷ô¸¶ªÙÒ'-JUPJU¸~Ód£I*äò-›u†-›v £óð>ò¹ÀÚì{õ*jýæÅãZÿ6èc%£IÓdøJU: ÙÒpÕÆöBÐä¯u†ÿ•OÙñaJUc%¾/¦_¸~¸~xZ0ôü¶ªHu†OÃSä¹ÀSäQG?jÞA­&"ú-›BÐqà*¦_£IÊž¶ª]¶Zÿ0ôŸåù'Wù'JUÞA­ÚÝqàpÕ¹ÀØ=Säl÷ÊøÚ݃7P™ñì4*]ù"¾BÐÆöØ]¶g*¾/ GÞAøcíÚÚæÅú¼áø:ß G?ƒ7­ÿØ}ÈÙÒÚä¯cí±ò}Èâƒ7øÙÒô¸u†u†ÿ•ÕôÚ:ac% :JU‹y¸~c%*cíBЫÍ]¶u†u†Ñ¼á¦_jjƒ7Qóðc%:Úžc%>òÞAc%ÚHu†Z £‹Z óð:‹y¸~¸~P*D>ò"¾u†ÿ•a G/oPÆöxûøã¼ý6èÿ•u†ˆ¥c%+ H£IJUÓdÓdP¾/ã]¶Z ¹ÀÑÿ•"¾6è£I¸~¸~¸~Ódƒ7óðHu†u†£‹ÿ•Bмý:£IJU]tj/o*cíŠóÙÒã¾/'-µþpÕpÕ¶ªu†u†ˆ¥£Q±<*:Ód]tø¹À0ôù'JU'-Æö}Èu†u†ÿ•… ýÆö=:¦_Ód]têÿ•ÑOÃÍêäò:£I¦_PÞAý¶ªÑÑÿ•«ÍÆö: */oJU/ojø¾/+ BÐpÕHu†£‹¶ªìc% GU2¦_]tì4¾/c%Û:ì4D¼ýSä"¾6èì4øcí6èô¸u†u†ˆ¥]¶l÷¦_¸~]t¸~¸~Ód:  ¹ÀpÕÿ•u†u†ÿ•BÐË  Gj‹yxZ*ÚÝZ ä¯D¾/xZjˈ¥£‹ÿ•¼ýP&"Ð ¼ýóð+ xû'-©ú 6èHQ¹ÀBÐ-›Z ããJU¸~jxZ¶ªZ ]¶Z Ñl÷c%DU2£IJU{õÿ•ä¯"¾BЯîc%è¸øì4ÊW:ì4ʶªu†"¾èÊHD£ù'øJU‹yÞA6èä¯ÿ•Hˆ¥OÃ6è'-W:£Iì4îQµþî:3pÕD+ ÚÝ£Ÿåÿ•u†u†ô¸JUÓd¸~¸~]t:cí: l÷ˆ¥¯îŸåBÐÿ•BÐ*ÃüæÅ"¾v xZù'D&"Úøv }ÈqüQµþc%ƒ7£IÍêcí]¶£‹OÃZ ÚÊñù'Pƒ7ÞAc%a {õcív &"æÅÿ•ÿ•-›Z ÙÒ]ùÚ GÞA GJUPjjc%}ÈÙÒQ!öô¸ÿ•u†u†¶ª: GjWJUG?cíÞA3ô¸-›¶ªˆ¥Úäò±<¸~¸~jxZÚÝBÐÚ¼áÚÿ•£‹ä¯Ãü&"QÕô¾/'-qüŠóƒ7£Ic%ì4Ód/oc%ÙÒ¶ªÿ•u†Z ]¶¶ª¶ªaS£Iøƒ7]tÓd£I±<>ò]ùPîÊ0ô¶ªqàÙÒÿ•u†u†u†Ñ¶ª¾/¸~¸~¸~PJUÞA0ôu†£‹"¾{õ:£:£IÚ¼áø*6èZ Ñ-›¶ªÚQ0ôG?j:£6èqü WÃüù'JU: ÚÝZ ééSæÅÿ•Hÿ•óðBÐJUc%‹y]txZ¸~¦_cíapÕBУ‹ÑBÐù'øaø%û¶ªH£‹ˆ¥Dù'PøU2ÞA±ò"¾"¾ä¯qà­¾/xZ¸~jƒ7c%3ÚÝ"¾¶ª}ÈÚݶª¶ªô¸!ö/o¸~¸~j¦_g¶ª£‹ÿ•"¾HD ¶ªBÐØPPxûÕôÚÝ}ÈÚÊÞAU2ÞAiýêæè£IgDbþ"¾"¾ÿ•BÐÚø:­HU2£æÅ䯟åÙÒOæø¸~‹y‹yJUv «Íô¸"¾Ú>òæÅu†u†"¾cíU2¸~j¸~‹yJU£ÑÑu†ˆ¥ÿ•"¾cí  GPÓd¸~¸~JUãÑÑZ pÕ"¾&"±<:%û: ¹Àä¯"¾xûýJU/o3c%G?c%bþ]ù"¾¶ªZ "¾ÚÝ”c%è”ù'Hì4c%ãqàcí]¶é&"DJU¾/Û¾/øÚÝä¯"¾Ñô¸óðv *JUj¸~j Gøÿ•u†u†£‹Ú G/oU2™ñêæ>òQè«ÍÍêc%&"üÚÝæÅ: WñŸåÑOã‹ÙÒù'xZ¦_JU: xZPJU”Íê6èZ u†H}È]¶è¾/… 3ÞA‹yù'&"™ñ¹Àa]¶cí&"­DøP6èpÕãèÚBÐËÑ"¾:µþc%:¸~v cí>ò¾/©ú'-cí&"BÐô¸ä¯"¾ÿ•¯îcí}Èc%*¸~PÚU2ÞAÓd±<¦_Ód±<«ÍÛ-›u†u†£‹ÿ•3¸~JUG?¸~xZcíËBÐBÐÚÝZ "¾ÊÆöl÷ Gøƒ7:±<]ù£‹u†ØÆöù'ÛBÐæÅqàc%ÞAø*«Íúc%'-&"¹À¼ý'-3aOöªÿ•-›ä¯ø­ƒ7&"ÞAÓdPƒ7JU G¾/¶ªˆ¥¶ª"¾]¶¼áâ ”£I£I£ˆ¥u†ÿ•êæÞA¦_c%: c%£ì4 Gù'ˆ¥ãu†Ëø£IÊD ŸåOÃPÓdJUŠóu†-›Z -›æÅã G:Šóƒ7ì4'-ø!ö!öñJUU2/o‹yJU£ØæÅ-›ô¸Hu†ÿ•æÅʯîƒ7 G¸~¸~ÓdJUQiýŠó"¾"¾BÐÿ•¹À3ì40ôSäÐ JUjjSu†"¾¶ªä¯Ê6èècíÃüÊ'-xZ:©úä¯ÙÒô¸:xZËû¦êææÅ¾/þÙÒÑu†ä¯æÅbþÞA¾/ Gì4ß ÚêæÙÒZ c%*ÞA¾/*BÐv «Í-›"¾êæŸåæÅô¸ÚÚa¸~¸~PjPîÆö£ù'BÐìZ u†¹ÀÑpÕg‹y¸~JUc%™ñ ¼á]¶"¾qà: c%Ð ÞAÞAóðÆöØ"¾ì™ñÍê: ]t/oÞAøß Ú&"þË£‹u†¶ªÚ0ôiý£Ê Gc%¾//oJU:Ð äò0ôæÅpÕРʼáô¸ 6èß ¯îS䶪ÿ•æÅ™ñ0ô¾/Ód¸~¸~¸~ÓdÞAgÙÒ-›-›Ñ"¾ÿ•ËDØ6èãBЃ7JU:*U2 G¯îOÊóU2!öÚÝøøHä¯-›æÅ ±<ìéì4*l÷ž¦_jJUäòu†u†u†u†ô¸0ôJUj/o¸~¸~¦_ÊŸå]¶ÿ•-›]¶BÐPJUÞAgƒ7£IOÃu†ˆ¥"¾ô¸pÕÞA¸~ÞAøÞA:v cí¯î: ãÿ•ÑËqü£I G3c%c%øØ"¾"¾Æö¸øì *¦_U23¾/Êéä¯]¶ÙÒ}ÈØøù'¸~/o£I"¾ÿ•qüä¯u†u†¶ªøc%¸~¸~j¾/ìqüˆQ¶ªOÃô¸}ÈãcíQøcí: ì4/o:ÙÒZ «ÍÊU2£IÞAÞAèÕôô¸¶ªÙÒ«Í£‹ÿ•&"£I£IÓd¸~£IZÿ£ÚBÐ]¶ÿ•u†ä¯ñËûJUÞA GJUÞAùcí0ôSä«Í]ù: ¦_ì4 GG?ÊúﶪæÅÚOÃÿ•¶ªý¾/JU±<­¾/&"±<jÓdÞAÚݶªÑ¶ªBÐ6è¯îpÕW]¶cí±<ø6èô¸"¾úì4]tPxZU2&"èŠóô¸Ú¶ªu†Z úïc%ÞAÞAc%HG?±òÕôêæ]¶}ÈÍê РqàSäúï*pÕÚBжªÿ•Íê£ÞAJU]tJU:£IÆöSä¯îÍêÚÝêæ5ô¸æÅ«Í+ Æö]¶ÚÝÿì4±<:éqà]ù*JUÊ>òèýƒ7øpÕ-›u†Z ˆ¥ÙÒÙÒG?¸~¸~JUøqàäò¶ª"¾ˆ¥"¾؈¥éc%¦_xZ±<:ì4qàô¸­ù'åæÅã: =ØpÕî¾/ƒ7£µþ¸øBÐóðxZj¾/JU£IqüËÚ]¶]¶]¶ˆ¥Ð ÞA­ G£IG?¯î¸øêæOÃu†6è&"*U2 Gj:&"ß ]ùô¸ÿ•"¾¼á: qàKî5£Ð ÊèBÐ>òÿ•]¶ãJU¸~JUÞAØ6èŸåqàý]¶Ñÿ•¶ªJU¸~jÛʶªä¯ìüBÐýù'£I±<P¾/c%«ÍÍêBÐä¯ô¸¼á¶ª3ƒ7JUP G±<ücíæÅ¹ÀBÐÚÚ¹À: JUì4ù'*'-ß ÚÝ”úÚé¹Àø±<'-ÞA&"ÚúÕôúZÿiý-›Z ô¸ì£I¸~¸~¸~ÞA{õŸåô¸"¾«Íêæîصþƒ7£Ic%Dqà¹Àêæ¸øÙÒ¼á¾/Q&"£Ij¦_a3Í궪u†Z "¾ÚBÐ˸øD3ƒ7ÞAì4xZDl÷èØ}È"¾-›ì3ø¾/­æÅSäKSä­êæc%ÞAPU2JUÓdÐ ]¶u†u†ÿ•ˆ¥"¾æÅ}È{õÓd¸~¸~/oÓdxZˆaËÑ6è6è"¾æÅúï¸ø{õäò¼áúBÐqü£I&"¼ýä¯BÐ: ÞA£IPÓdì4U2þBÐÿ•u†ÑOÃæÅ]ùPƒ7£IG? ¦_¾/:øÙÒu†u†"¾ÚÝ:JUc% µþ+ U2Ð =SäæÅqà c%JU±<úï0ô}ÈÚÝBÐ]ùæÅÿ•ô¸™ñ­±òø: !öBÐËÚÛOÃ6èDÊÓd¦_¦_*ÿ"¾OÃãqàóðãBÐî3ƒ7c%¯îÆöÚŸåBЈ¥¼á”ù'PxZøJUÞAÚ݈¥ÿ•"¾0ô0ôbþ&"ì4P£cíqüH£OÃOÃ"¾ÿ•ä¯qàèì4ÞA£I]t¸~±<ø©úÙÒˆ¥ÿ•-›ÚÝì4j¾/cí¹À¶ªË: %û¾/Ð OÃ&"±<£IJUPÊqàæÅÿ•æÅÚžG?QúSäÃü¯îüäòcíqàì'- &""¾æÅcíU2jÓd'-ÞAqü"¾£‹¶ªŠóBÐÚØ ¾/±<¾/±<*Íê6舥¶ªHÿ•ã*JUJU]t¾/Ð êæ¼ýì¯îêæÚ{õŸåDãÑ-›ãÐ &"xZPÊé]¶Û: GJUÞAG?¼áÚæÅu†u†OÃóðèU2JU¸~JUÛ'-BÐô¸¶ª¶ªBÐBÐ{õc%‹y¸~'-*¯î]ùØ"¾Úƒ7&"ÕôŠó&"cí%ûËû6èqàqàúÃübþ6èß ù':±<¾/¾/¼á«Í"¾æÅØã{õc%¼ýËû©úc%ž­êæô¸êæ¯î*jj:*ý¶ªˆ¥Ñÿ•䝿ÅP]t¸~JU]ù¹À¶ªä¯-›Æö¸ø¼ý¼áæÅ]ù: ÞA  ù'ÞA¯îÚÝÐ aù&"¯îÛäòÆöÍêHÙÒ¶ªä¯óðÚ¼ýgc%ƒ7G?¦_Ódøß "¾¶ªu†ÿ•OÊó G]tJUƒ7Hé"¾¶ªOÃËqüc%c%”U2ÞA£IÞA£µþÚÝ-›¶ªä¯ÚÝ… £¼ý*øƒ7£ISäúïv pÕBÐÚBÐpÕù'0ô* GPì"¾: W'-::Ð OÃOÃæÅÑ-›-›æÅù'ƒ7JU]t‹yÓd:KpÕpÕ]¶]¶]¶ÙÒ"¾ÚÊŠó¸ø :£IHó𦈥¶ªl÷Šó¾/£Ic%ÞA ÙÒqàBÐæÅ¶ªOÃ!öì4j¸~ GÚ"¾Sä¯îô¸qà'-"¾ÿ•pÕƒ7£Ic%ì4ì4gô¸æÅþc%jì4£IU2¼ýé-›ä¯pÕcíæÅ **¾/PÓdqüÚÝ3ÞABÐ}ȶªæÅ]¶]¶«ÍZ ƒ7JUÞA¾/Dxûqüì4ÚÝqà :JUJU]ù¹ÀBÐãqàÙÒóð¼á£Šó3j Gù'BÐ-›bþÿ•£‹0ôÐ U2D… }Èß '-¸ø{õóðŠó: Gäò¼á”¦H򾁿Qcí+ Øüýv xûÙÒbþ3£Iù'aÍêêæ"¾ô¸BÐqàãóð”&"qü¸øÚÚß :ƒ7xZƒ7DcíÚ]ù}ȶªæÅÚc%xZ¸~jaî&"âBÐä¯-›£‹ÙÒ¾/aÚô¸"¾¾/G?ÞAj¸~JU G&"øü-›H}Ȉ¥"¾gG?JU3ÙÒˆ¥Z "¾«Íù'£IJUì4ù'G?¾/&"ù'èBÐô¸æÅ>ò6èË-›ÚÝ6è"¾ƒ7ƒ7ÞA:+ ýl÷… øG?&"!öˆ¥ÑZ cíøDêæý«Íø3éâÞAj¸~jD¹ÀZ u†ÑHˆ¥Šó+ ¾/ÞA/où'D*¾/ÞA6èpÕHˆêæâWèÍêÕôžã"¾ô¸BÐcíù'ù'±ò£I:îéæÅ"¾]¶6èŸåÍêæÅú£Iù']ùÍêøÚݼý3&"¼ýÚÝ>òPÞA:ù'-›«ÍæÅ]¶ØÍê3¦_ì4ŠóÚBÐOÃcíì4qàÿ£IÆöc%c%£IP0ô: '-ä¯Ë}ÈæÅŸå]¶ èQ5øc%G?ýô¸é¸ø6èÚ"¾]¶c%¸~¸~JU… ¹À"¾¶ª¼áù'&"¾/JUU2c%6è¼áaô¸Ú£{õ SäÚ%ûìý+ &" ì ãæÅËæÅß ¼ýêæŠó G£I&"JUÞA¯îä¯ä¯ä¯HøóðÞAÞAÞA¦_JUÐ µþZ Hu†£‹ÿ•"¾ÃüG?¸~/o±<éæÅ"¾«ÍÛc% Dc%ø* Ÿå0ôÚÝBÐæÅÿ•]¶«Íê£IxZ:ÞA:U2BÐæÅ™ñŠóSäØìpÕÚÝÚÝÚÝ&"ü¾/ GP±<úHÑécíýl÷:JU£IÞAJU: 䯹À"¾BÐä¯}Ⱦ/G?'-PÐ ùcí6èÍê"¾{õÞAÚ"¾¶ªËG?&"±ò: ŸåÚÚÝŸåc%ÞAaSä¼á%û G?ÞAÊø¼ý¶ªHu†ä¯ÆöWj‹y GWgêæSäô¸æÅ5ÞAÞAøc%6èBÐ]¶£‹-›ÙÒqüJUJUì4 Wù'c%D]ù¯î䯶ªÿ•æÅúï'-P]tjc%6èþQÐ cí¦¦Ð ¯î]ùóðBÐBÐ0ôa3U2Æö™ñ¹ÀBÐ6è6èø¸~¸~xZQ}Èu†ÿ•"¾!öîƒ7G?­ýÙÒ£”­qü"¾OÃ"¾¯îc%¾/U2c%ÞA£I£ˆ¥ÿ•"¾¶ªæÅ5ZÿaG?ù'G?PjÊ™ñµþ%ûÿ•u†u†ˆ¥ég:JU¦_PjÞAqàBÐä¯"¾¶ªæÅaU2JU "¾OÃ]ùÆöÆö£qüƒ7 &"'-*]ù«Íô¸ŸåÙÒ W ­: QG?¾/qàËóð{õù'ì"¾¶ª]¶ŸåJU£I£IÓdJUc%úcíBÐÿ•¶ªÚ—ì­S3=: qàô¸u†-›BÐ'-¦_/o‹yJU¸ø"¾}ÈBЦµþ”ø¼ý]ùô¸]¶OÃÚÝ«ÍÙÒ GÓd G: 6è©úc%ÞAøS¯î"¾Ù񾁦ª¶ªZ ô¸*ÞA¦_G?£IJU¾/]¶ô¸ÿ•ÿ•ˆ¥BÐ&"JU]t¸~P=æÅ¶ª"¾«ÍæÅ}ÈD GxZxZ/o Gqà6ècíìä¯u†Ñ"¾úï±òÚÿ•¹À6è}ÈU2Ê ¾/c%øBПåù'ÓdÓdì4£I«Í"¾Ñô¸Íêqà0ôbþ6èqàøPóðøýxûÊúï*±<éÕô¾/îéËûô¸ÿ•"¾BÐøjxZÚ6è¼áqà¾/g©úƒ7¾/£øÚ]¶ÿ•ô¸ÛÞAbþJU±<Šó¼áÙÒ™ñËcípÕBÐBÐØc%ÞA¾/cíc%iýcíË*­c%ÞAD::”ä¯u†]¶ÿ•êæ¾/G?c%êæOÃãìgQ±<øù'G? GcíBÐcíä¯ã{õÚ:&"Ëûcí«Ícíè0ôØxû}È]ù'-JU¾/ýécíؼáSä'-JUJU G&"ƒ7êææÅæÅæÅÙÒØŠó䯼áOÃóðúƒ7/oÞA¾/ì4ÞAÞA¦ÿ•"¾qàÚØÙÒ0ôG?©úÐ D¯î… ù'úv ù'­&"êæ]¶Hä¯ä¯"¾l÷c%j‹y/oÞAcí}ÈBÐÿ•"¾"¾äòÙÒ£cí£P™ñã!öèa*v Ûøa&": øc%HãêæŸåBÐËOöª{õŠóÆö­óðƒ7jÓdPgÙÒBÐ%ûÙÒ{õ'-¦ãBÐBÐä¯Z "¾6è:JUì4ì4/o¸~ÞA%ûé㶪H¶ªô¸¯îSäêæù'xZ¦_ÓdÞA¾/ŸåqàæÅ¹À"¾ÙÒcíÚ: :c%WBо/*]ùDì}ÈÙÒ*£I£I&"ÍêæÅ-›ä¯ô¸æÅBЯî: : GÓd¸~PW«ÍqàBйÀD£a GÊ£ÚÝ]ùÚÑÑ0ôøù' G¾/U2l÷S­îpÕ6èÚÝÙÒêæpÕ]ùãù':PG?£I pÕBÐêæ¶ª"¾æÅOöª>òÞAJU±<¦_G?¾/Ð bþc%WŸåÚBÐ]¶gc%ƒ7¶ªBÐô¸ùÊ&"ù'xZPc%ß £:äòu†£‹«ÍSQ'-¾/ã… ý6è—­&"0ôøµþÛóðiýÆöKÊøß ËOÃBжªÿ•ã±<£I/o/oÞA:qüÙÒÿ•ˆ¥cí£Ú"¾Ú{õîDâÐ c%ÞAì/oPv qàcí¶ªÚBÐøô¸WÚÿ•Ÿå:c%cíËûÆöc%JUJU%ûŠóýý3OÃøþæÅ 0ô«Íƒ7­êæËÙÒ 0ô*G?ì4:&"£I: ËãÍêBЈ¥úïñ£IxZS¯î«Í: qà¾/JUù'¦_:DOÃu†u†]¶øjjÊSBÐ}Èó𶪼á¦_ÚZ : :JUã]ùÊ3ô¸ô¸c%j]t3v iýOÃ}È6èæÅ¶ªØøøqü}ÈÚBÐÆöÓdPøÞAxZ Góða¾/ýqàØHu†Ãü}ÈcíµþcíÙүøG?ÞA£I'- G:ãä¯ä¯6èصþ¼áƒ7äòc%Q¹Àˆ¥¶ªæÅ¾/øÚÝÚÚÝ'-±< GÓdxZƒ7Šóu†æÅù¼ýG?:ùBÐ"¾ è¼ýÚéPÊóð-›æÅô¸}ÈÊÓd¾/*:c%ù'bþêæÿ]¶ÛÐ KBÐJUxZ-›ÿ•l÷Ð aê:JU™ñqà&": Ëž"¾£{õxû:ÿ«Í¼á]ùc%P¾/ãØ!ö¹À¶ªcí"¾6èHÍêêæ¯î:'-:ƒ7c%ìô¸ô¸]¶cíþýù'ÞAiýêæŠó¶ªÿ•ÆöÙÒ3£ù'ƒ7¾/c%ÞA'-]¶Z ô¸6èl÷+ ƒ7&"BÐÚÝ*ÚWã"¾3—ÙÒc%Ûa3c%£IÞAcí¹ÀæÅqà¯îcíÿ•é!ö GÞA:D£èOÃæÅqàìèù':ÞA£I©ú>ò6èÚݼál÷3:BÐcíW'-ŸåÆöqüc%­ÿã%ûúï&" Úú£±<Ð WÚÝô¸Æö—!öS䶪ãÿG?øŠóîcíØÚéãDèj:*Q¼ý-›u†ÿ•ÚcíSä ì4c%ÞAj—«Íêæóð=HÙÒ"¾}È6è6èãúï¾/ýÛQì4PxZ¾/]ùÕôØBÐËqà cíÚBÐÙÒQ]ùÙÒ¾/ G¸~]tƒ7Ÿåÿ•£‹£‹"¾¾/µþ GZÿÚÞAG?qàqàË"¾ˆ¥H G:DÍêøqü G­Ê{õ{õK6èOÃ6è}ÈÊøØ5:þãÊQüÞAøø¾/úè]ùÚÚ"¾Æö]ùã: ù'H±<Zÿ]¶ä¯6èéqàQv 5øÞAP3"¾éBÐô¸žÐ %û­=%û: BЯî¾/ƒ7Kv ¹À"¾ˆ¥ô¸a¾/ GJUxZU2¾/0ôBÐÚÝ䯅 ¯îè'-éSäZ øl÷Ð 5¦_ÿc%JUÞAPø¶ªÿ•u†ÿ•ÚqàéÆö… GPxZ]tƒ7ÿ•ÑOÃì4ô¸ƒ7U2DU2ì4Ú"¾]¶Ëì¸øè6è±<ÞAéÚÙÒ£ÞAjjcíËóð¶ªÑ¸ø¶ª]¶ƒ7ÞAa£I ¾/=BÐ'-+ ÆöÚc%:µþêæZ ãBÐþ"¾"¾gÿù'¾/ˆPóð"¾"¾ ÆöU2ÚæÅè±<{õ±òÚ™ñÚ«Íä¯Íê6èQ¹À«Í{õD þ 6è0ô©úÊJUG?”OÃ˾/v ±< GP'-¼áHÿ•]¶¯îîgDÞA­¯î¼áBÐBÐÚ-›-›0ôU2xZjÞA::*Z -›£‹ÙÒÚæÅ¾/JU6èÚÝcí˱<ƒ7±<¯îéBÐæÅãÍêÊ'-¾/P G ŠóOÃu†BÐH!ö]ù±<î… U2¾/ô¸pÕÚÚô¸Íê:ù'ì4xZjJU&"Úô¸6èqàÿ•u†qà:G?ñ*ÞAø¯îìBÐ"¾Ëcí£IÓdÞAˆ¥Ú¾/ÛÙÒ©ú¾/­G?¾/ŸåBÐô¸ÑHÙÒúï¸~£I="¾æÅ]ù¹À]ù©úP*¦_]tì4óðBÐÿ•Úݼá"¾}Èqà¯îô¸µþ¾/BÐSäâÞAÊì4c%ÊýJUc%]¶BÐqà"¾&"}ÈHä¯êæ:ŸåJUU2JUc%äòÚ0ôJUù'cíÛcí"¾"¾]¶ãËûÞAPƒ7JUÞApÕ]¶Úݼáqà{õQc%: Êô¸ìÚqàãZ 3ÛG?xZÓd G G¯îæÅêægã6ècí'-U2]¶ú3¼ý]¶cíÍêl÷c%¯îúïD'-+ øPÆö3ƒ7 GÐ ]ùpÕ䯈¥OÃ]¶Ÿå¾/ G¾/£IÞAÚØ%ûùР ʾ/D!öSäOÃ]¶ÚÝBÐ!öÐ Ê­ÿù'£óðãÊú"¾úï0ô”c%=6è îʱò¾/¦_¸~xZÞA¼ý©úcí%û+ èæÅ¹ÀÍêã ¯îSäéË*Ëû èäòýÚ"¾¹ÀJU G£I:ÞADBÐ!öÆöHZ êæBÐÙÒ+ &"ÊU2ƒ7*]ùQÚÝÛ:ì4ß *¼ýô¸ÿ•"¾óðãøÆö­JU¸~ÓdÓd:ã]¶Úqàã6èZ "¾6èêæ GÞA£IÞA&":U2­c%žBÐô¸OÃØúýÿ¾/0ôÚÝ©úcí"¾cí… >òqü&"£c%c%BÐù'øˆBÐÐ £I:ì4iýOÃpÕÙÒãG?ô¸ÚݹÀÆöè*gø'- ê:¼ýc%ô¸Ë”"¾Æö'-cíÐ عÀ£IæÅ&"Ëu†ÙÒpÕ¸ø¸~xZ¾/£IýZÿ ¼ý{õØ"¾H"¾BÐ6èóð±òƒ7øU2 G­äòÚˆ¥u†ô¸ä¯êæJUj:JUJU¾/ì4qà«Í6èÚÝ3£‹ˆ¥Z ã è&"G?/ol÷v cíØÚqàã™ñ¦ÆöøJUJU3}È]ùæÅ䝿ÅÙÒu†ÙÒHxZxZ/o¸ø¶ªOÃÙÒG?ƒ7*c%+ ]¶"¾ãô¸æÅäòóð™ñ:v ÊPÞA GÞA3pÕ"¾ô¸£‹u†pÕBÐËúÞAJU G£I‹y¸~xZDæÅÑæÅÿ•u†ô¸Æö¦_U2¼ýŠóqà䯅 ”c%ÞAJUÞAPÞAÞAc%"¾Z ãÚÝêæÙÒ¶ªØWgD G£IPv *: BÐÚÝ"¾æÅBЃ7¦_¦_ýÿ•æÅ{õWËØÚÝpÕjjxZc%-›ÿ•¹À£‹ä¯]¶SäÛù'¦_j‹yÞA*  ¦ËHô¸¶ªÚøv óð¼áêæ¼áù'ÞA¦_jì4}È"¾æÅÚݹÀÚÝ}Èô¸ä¯ê¾/>òÞAÓd¸~¸~P¾/ËÑu†-›"¾¶ªéóð]t‹yxZ¦_OÃÍê6èÚÝú5Ê:BÐl÷ÞA'-óð"¾ùæÅ]ùÚqàÓdPDDqàêæÿß øì45ø¸øqàxûÚÝ+ ¾/ÞAU2Q¶ªu†u†ÙÒÙÒpÕc%P¸~JU£IU2 «Íô¸æÅ¼áu†ä¯cící£Ij:xZÞAW]¶u†u†¶ªZ Sä3:: ±<ŠóDG?¾/xZøä¯Úµþ ¯îcíÚØô¸ãÊ: 䯶ªu†BЦ'-G?¸~¸~¸~j G%ûcí"¾ÿ•ÿ•ÿ•]¶Ú'-øG?jP6è'-䯹ÀêìÚ/oÓd±<Pv Úä¯u†ÿ•Ð qàäò0ôîÆö­P¸~/oJU/o GŠóu†u†u†u†ˆ¥ÚÕôD&"¦_ÞAÊ/oƒ7ƒ7ß ÕôžæÅãÆö!ö:%û¼á㶪¶ª]ùxZSäxZjG?JUxûÚ"¾£‹u†Z pÕä¯}ȼýQQÍêJUJUc%øóðbþ«ÍÚìäò3ø%ûù'Ð ÊýcípÕ¶ªìÚÝãîqàâóð¾/ÆöÚÝä¯ô¸¹Àʸ~¾/:JU±òß =c%é{õ±<øxûˆ0ôpÕý=¶ªOÃK*îJU£Ic%ø: ì4ÞAÍêô¸BÐBÐæÅÚ¼ý3ß ­ÚHPQ: Ú}È *¼áô¸ù'aqàØ Íê:µþÿiý*D¾/BÐOÃÚ]¶©úóð0ôÙÒæÅcíèDøÊî3Â êæÆö䝸Ú]ù¼ácíDSä* Ûüóð]ùˆ¯î"¾Ÿå Æöƒ7/o GÚŠópÕqàµþOÃÚ¦Ú*'-H … U2DKØØŠó6è6è{õDU23l÷Ql÷&"U2]ù:&"žýQ«ÍÍê"¾iý¾/6èîù'6èýØ+ cí6èqüøU2ù'{õZÿl÷"¾«Íü±<Û… KÐ ù'ÃüÙÒß ÙÒBÐqàÚSä¯îpÕg£ø Gc%ø'-Æö¼ápÕžøúïÆöxû6èù'6è]¶}ÈÚ­ìŠóc%øøÙÒqàýBÐ c%P£I¦!ö%û: =%ûU2úæÅô¸ô¸v ýß ÞAß Säêæ£IJUæÅÍêúc%æÅ«Í&"£IG?pÕZ ]ùc%ý¾/ÞA&"aãpÕOÃô¸éù'… qàqàZÿÞAc%øþÐ gÃü]ùØcíì4ãúÚ: âæÅ¼ý&"JUÊæÅD ÚÚ]ù]ùDcíSäBÐG?:*ü{õêæÚ¾/G?6èËûô¸SäËûQ&"v BÐÆöêæcíÚ¸ø]ùüã™ñù'ÞAg%ûl÷¼ýãS­W>ò'-… >ò]¶ããgg{õÊ cíÛc%:ãÚSä]ùcí*¼ý¸ø¼áîc%Ð Ø”ÆöÚÝ GùÚ¹À{õÙÒqüù'QŠóHc%c%øÊ… î0ôæÅBÐß ÚÝóð3: Ú«Í ]ùÍêÐ ”ƒ7:™ñÐ æÅÚiý©ú£qà&"apÕÙÒ5±<Ð £éãÊG?øµþô¸ØØäòc%ÊÊ6èÆö*üžñ{õ6è­ÿÐ ¹ÀDqàBÐ}È*G?qà6èqü+ ¸øÚÝQ±<¾/ OÃqü]¶ô¸Ð 0ôU2>òÆöóð'-Æö'-ù!ö¹Àãîäòã¼ýøÛýãWc%™ñì£ÆöˆU26èÿ•}È*ž­xZ£IqàÚÝãG?cí¶ª3ììÍêxZc%óðìÕôÐ é«ÍÍêOöªÚݾ/ÞA-›]¶*j&"Ê£I¦_ù'ì!öä¯ä¯ G'-c%Q«Í}ÈØì"¾}ȸøžØ:Pcí&"¸~jŠó˃7ƒ7OÃË}È«ÍqඪSäžQ'-µþì4ô¸xZc%ù'ø©ú&"ÙÒÚ… gOÃ"¾ÚÝúïU2Ú¾/-›ìZÿÚ3P+ é]ùÚ*c%U2ì40ôU2ãŸåOüácí¼áqàŠó«Íäòv £Ióð{õ&"]t}Èâ]tJUúÍêøù'æÅä¯ýúïqàÚݹÀBÐv c%Æö꣫ÍU2‹yJUù'xZ Gâ؈¥ÚóðÙÒ¶ªBЊóêæøDù'¯î±òc%0ôÊî"¾xûÿBÐWÃüÊBÐZÿSäô¸™ñc%¦«Íø¹À"¾BÐØÚÞAJU'-Qãc%Ê: ÍêWèËOÃÕôqàøäò}È£IPg©úæÅ3:v ã ¯îqà'-v Ð £"¾}ÈOÃì4«ÍxZqà}Ⱦ/¾/ÊSä¹À{õÊpÕQ!öpÕG?¾/c%£Šóù'ù'¾/Íêø BÐU2øÚÝ {õæÅ­ÿËbþl÷DÃüì"¾ìÿ•êæã>òÞA&"¸øcíì«ÍZ Ð g¯îc%Ð BÐÙÒÞApÕþÿ­¸~c%ÚÝJU… OÃÚ­ÿ&"øU2¾/OÃ6èpÕô¸Qcí6è ÞAÚÝOãOÃDì4êæ¾/: øv HËpÕµþã£I: G?Æö0ôcíbþQxûøä¯ úïbþG?U2OÃ]ùì4˹À 6èQ:èù'ag¯îù' BÐø G"¾c%æÅpÕÚQŸå Æö&"!ö3 %û¾/]ùìÙÒ—v c%¾/øØcíc%: Ëû«Í]¶¶ªê0ôÙÒù': : µþ]¶ÞA/o3ã”Ø"¾cí}Èÿ•Ú¾/'-ä¯{õ:3D"¾èj G"¾™ñG?ÞA¦ô¸ ±òøÞA£éÚcíîqàBÐBÐêæù'ÞA¯îêæ”c%ì4©ú¾/U2Ÿå«Í6è âc%ß øÚÚæÅÊ: %ûqü©ú&""¾úïj]ù¶ª&"¾/c%'-¾/µþÍêZÿÚÝ6èæÅ}È%ûø&"{õ«ÍËæÅã¯î­U2>òý£IÊæÅBÐä¯ù'ù'¾/D]ù}Ècí£ âpÕ=Sä꣫ÍãÚŸå"¾ÚJUg ìäòÆö c%U2£I GÚù'¶ªBÐ]¶6è6èÆöKc%Ê… W¾/ÞAß —3øÙÒêæÙÒ"¾ÕôSäÚÝcí qà6è… ù'* ¾/3ã: l÷ ©ú6èìËß éqà¸øøì &"øß BÐ䯞™ñ: èß ŠóþÚ6èÑÊù']ùl÷ù'úã&"ù'*£H>ò«Í+ ì4]¶ÚÝÊø¶ª0ôŸåÚ—ØcíæÅQÓd¼á­¾/±òZÿì4ù'ÚSc%pÕ¹ÀpÕ: èQÃüBÐ>ò%ûý£I:*Dãé ÚÚÝDã"¾£c%Ð ÙÒÊêæD£©ú:l÷aé{õÚݶª"¾Ûcíÿ'-â ˆÙÒø£óð—ì&"6èÚ*¸øô¸0ô0ô䝯ö£ãÍêv ù'¾/SäóðÚ¼ý=&"Êc%: }Èêæ£HBÐâøØô¸S¾/øß £0ô&"Íêø­l÷OÃ"¾!öì4ù'¼ýÊc%æÅ©úqà&"ì4:ØÕôƒ7SäBÐDÚݸøËûqà]ùù'c%øqàøSäcíÚ ß èl÷Ð Säîãè¾/l÷qàóðžÙÒúù'óðÙÒSäc%ÙÒƒ7D¸øø'-ÚÊ6èéÛ"¾¹ÀŸåì4&"pÕOÃ!ö£Ð 3xû6èˆÙÒpÕÚD: WóðBб<¾/Säc%c%óðÙÒ¯î­: Sä*+ BÐÚ{õæÅaÍê 5c%{õìúïì4ù'Êc%ÚÝóðcíBÐc%ÙÒãäò­ÿ{õ:ì4 £I¾/cíãÆöc%™ñ¯îø=ËÍê¹Àã'-ì40ô'-:U2ãÚÚÝß 0ôqüêÐ øúï¯î3c%ã6èDì4>òé¼ý±<:… æÅ­ÿË: Zÿc%ƒ7: ]ùæÅÃücíúïØãØ]ù¸ø¦DÊSäìJUQú0ô—ظøÙÒúïBÐU2:cíØQ&"Ê>òqà6èù'¸øãžù'ücíÿøqà3ä¯ÚH£¶ªcíÐ èDÊÐ êæÚ0ôQ&"*ì4ãæÅ£¦_bþpÕQè¼áîÙÒ:ÞAî«Í¦a6èxûÆö6è3SäÚg Sä«Íc%'-ýäò¼á&"KÊŠóËêæµþ—xû©úóðD&"HÊc%­ÿî3éBÐØaDË}ÈÊì4ÚÚÝgBÐâÍêqàU2ù'BÐÊøØU2]ùOÃSä6èa'-iýÚÝËø6舥+ U2cíÊaJU£IÃü]¶ãêæؾ/gÚóð ÍêaJUJUŸå£‹Ë:ØZ ô¸"¾”¾/ãBÐÕô]txZ­c%U2xZ—¶ªOÃqà¼ý"¾OÃì4ÞA6趪¶ªÛ £ÚÕôÞAøÊgDU2xZÊc%±<¼áæÅêæÙÒÙÒÙÒÚÚÿÚÛäòù'¾/QìbþDc%ƒ7Ø£‹¹À Gc%=qüØóðØBÐZ êæÍêˆì4£éJU­cíô¸]tÞA3BÐ:c%«Íu†-›: c%ƒ7}ȹÀŸåpÕqàJU¦_JU£I:5¶ª"¾Säc%±<ˆãÚÝ”!öæÅÑóð'-þÚÝŸåqàÚÝOÃ6èJU‹yJUì4QÐ 3&"-›}ÈêæÍêBÐ"¾"¾™ñÆö%ûÊ6èc%ì46è¾/]tWU2*¾/bþ­¸øÐ ž"¾-›úïãÚóðÚÝ!öÓdÓdQêæBо/عÀÞASäc%Ð :ÞA GBÐ]¶Sä'-æÅcíHñ !öêæÞAG?þ¦c%ËûBÐÿ•BÐ6è}ÈqàpÕiý&"ß ¶ªBÐ'-jxZä¯ß £IqüÐ é¯îZÿ::ÚÝSä±<:ÛpÕ¶ªì4ÞAG?춪ô¸0ôæÅÊv ƒ7D*ËØ0ô™ñóðÞAgŸå¼ábþÞA¯îOÙñHc%:­ƒ7­ÿ6è¼ýJUúÚ ¯îÿ•ä¯}ÈËc%aÙÒ¹À*ÓdDj Gýß JUJU: ÿ•ä¯-›u†ô¸6è: Û0ô… —  GÊù'&"¦_¾/:ZÿÚêæÍê>òOÃ}ÈÊS䶪iýÐ cíÐ âÞA¾/%ûÊJUSä"¾BÐpÕqàæÅËß ¾/øD¯îß ¼áæÅø'-¾/Øý¯î¼ýØæÅÊÞAøxûl÷ £0ô¸øÕôÆöÐ … ÞA'-pÕËDù¯î!ö: ¯îiý­QÛØêù'ÞAŠócíì4ì4ÙÒÑã¾/Døv ÞAƒ7ŠóµþØóðØâQèÙÒ ý ”Ú"¾ÞA¾/HW GaBÐBÐÐ j&"Ãü"¾¹Àú}È]¶úxZ SäèW>òa… £­ìqà£ãŠó«Í"¾ø£I{õOÃúïgpÕ5 éãÚÝì4êæpÕ%û3{õÐ SäØêæãqà¦ãBÐãqà ÞAãl÷… ¼áèäò%ûäò£µþ6èŸå¼ýýÞAŸå¦>òé0ôc%ÍêcíSä Øc%øpÕl÷D¯î]ùé&"¸øÚÝì&"£I”]ù— ­­ÿcí6èDØÆöxûQß ­Ð PDËÙÒpÕ: ù'ÚÝBÐ"¾Wƒ7éZÿJU'-+ 6èjê±<îÚ¶ªãÚ¾/ä¯3Ú-›ô¸u†ÚÞAÞA!öù'£IPSä-›*JUqàÆöŸåDQØÚÝÆö: aHÚG?Ñÿ•D&"¸~øcí‹yÓdÆöÙÒ G… H-›ô¸ÚÝÐ OÃu†ØG?¾/䯦_PJU: Êî: qàgU2øêæì䯈¥¼áæÅ¶ªãÞA£IøØã‹yÓd=¯î­]¶Â c%£jJUä¯u†æÅÞA>ò«ÍKÊøøÆöÍêúï6èZÿ ¾/ì4Hc%¾/ ã]¶OÃl÷£I£I¸ø6èØ6èÐ DâÐ ø}ÈÍêpÕã*¾/춪óðOÃæÅË ƒ7±< GxZ¦_U2ÆöÙÒÆö鈥Z ùKÙÒ}È-›ˆ¥æÅDÊ G¦_ÞAù'&"éÚc%"¾êæêæÚ"¾êæèèÐ Ú±<ƒ7ÚÚÝŸåþÊWl÷]ùøì4cíBЯîäò&"6èSä6è¯îüŸå&" Gÿ&" G:ù'ø«Íêæ숥'-è6èBÐÆöÚc%%û­ Gì4aŸåS&"BÐæÅøÆöSä>ò£ù'ù'¼ýpÕÞAì4OÃOÃ'-G?QÙÒ"¾¶ª«ÍÚݶª3 ø W¯îjÊÞAù']¶pÕ¶ªÚÝ㈥cíÚÆö3pÕ¾/c%ÞADc%U2qàÿ•U2:'-&"êæ«Í: 鶪]¶Šóø¾/«Í«Í G?¾/c%U2ÞAc%”ÊìÚÝÿÚˆ¥]¶+ žÐ 6è Gø}ÈÐ ÊU2:Sì¼ác%S££I}ÈÕôc%ÚÝ}Èóðc%ÞAè+ ƒ7ñËbþgËø™ñãÕôZÿq࣭ G™ñÊ£ø©ú«ÍBЭc%: ¹ÀDÚQpÕ… ¼ýã]¶}Èýì4 qàÚÝc%&"cíbþúïÞAHþ}È &"ì"¾ÚݯîcíʸøÞA±<0ôÚ"¾>ò&"ZÿÕôBÐqüãOÃbþƒ7'-!öcí£g+ &"ÞAqàv cíÊ: cí¾/«Íéù0ô]ù«ÍaóðéOÞ¾/ý¯î{õù'óðä¯: ¦_c%Úcí­Ê… Ø0ôóð±<&"aóðÚÝî3èSäqà… æÅ+ c%Ëû… U2{õù'èqàØ”*µþpÕZ ±òaüãóðË*ì4Æöc%­ÿ¦c%ÚÝc%cí]¶BÐ"¾«Íc%JU3"¾* Gøêæc%éÚÝÙÒÊU2Ë-›D… ÞA: GU2ì4±<6èøBÐ6èDÚÍê䯣‹]ùäòãD±<£I䝸ÙÒc% GBЦ_£Ø]ùSäDÚø­ÿ¾/ÕôÚì4ãpÕŸåãBÐÊ'-ñqüc%ÚÝ­Ð 3]¶{õä¯"¾™ñËûÛ«Íì4ÞA:ˆìÚÝ*è*Ú™ñÞA}È0ôìÍêêæØ3™ñcíqüˆ¥¦Û}È{õc%ù'ß ø6èÞAÊSä6èÚÍêæÅ¼áiýÚúc%¾/aÞAqàÚDø±<3]ù Bжªô¸ž¾/Säâ: ËûÍêæÅË:ù'Õô3&"'-Ÿå¾/âô¸ù'ÚpÕBÐ6è Gþc%: Ãü¾/Ê­BÐiýù'!öÆöÆöBЩúé]ùµþÕô5&"Ð Hù'6èÙÒÍêêæ©úD&"SüéêæúïÊÚÝéÙÒbþÚ*U26èÕôŸå£c%ꔯî«Í¼á6èäòóðÊga¦… ýl÷ìæÅbþ­ÿÍêŠó¯îv ÿ}ÈË]ùî¯îv ­ËŠócíø¾/cíž]ùÆöZÿäòøc%«ÍcíŸåÚHc%ø©úø]ùý6è¯îÙÒ¾/Ê6èêêüé¯î±<%ûã±<: qàãÍêýSpÕéê*£I+ aaÚÝSä{õZÿùQµþ£6è0ôpÕŸåìl÷: &"ì4êæ—ì4&"ì«Í!ö¾/Ÿåþ¹ÀãBÐcíÊ­ÿêæxûŸåæÅc%Êg¯îµþÃüø=¾/6ècíÿÊ… žl÷*øô¸SäŠóÙÒãÛQ¦6è{õÙÒQ3ù'qà5&"Õô]¶ÚU2¾/ý”6èÕô䝨0ô U2ÞAÞAéæÅ!öƒ7c%HBÐqàc%ùéD"¾Íê6è&"c%êæc%øaêé¼áqüµþ­ÿcí{õcíÊqàcív ñþa*Íêˆø qàcíØ… 6èg±<ÊÐ : èãäò !ö3¾/­ÿÚ… 6è%û'-ß : ÙÒñêæ:ì46èpտŨ}È”*Ð óðSæÅ]¶ù0ôU2jQÊóð¹ÀqàîêæËæÅÆöÚ؈±<ÞA &" GøêæËcí«Í™ñc%ãÚÝ]ùŸå:v 6è}ÈŸåù'¾/6è*ؼá: è:Ð êæ"¾«ÍOÃý G+ 6èZÿù'=Ð U2c%Æö0ôÛÚqàcí«Í}ÈãØý”ƒ7ì4ã]¶ÆöæÅ: 0ôÙÒµþU2ƒ7bþøø3 ãcíîù'ˆ«Í-›0ô¾/cí”PQ'-6èÙÒäòä¯g üóð¯îãBÐãcíxZ±<"¾ì¸~ÞA"¾pÕÚÝxZ&"æÅÍêô¸BÐÚÝóð6èêæ­Ú G£IxZD*6èêæäòSäÿ•qàc%&"¶ªô¸¶ªQv >òøv ÙÒ GÞAG?{õìJUPcíŸå Ú6èêæä¯ÃüÐ ¾/3HŸåØø þøß 0ôSã]¶¹Àú&"&"*¾/QÕôã*JU3]¶êæì4v ô¸Z Ú£ˆbþ­ Gù'Úݯî£I&"èÃüSäýý6èêZÿ¯îô¸éè>òcíbþÚÝcíBÐv =é:]ùËìc%c%JUƒ7cíÚÕôÚÝËÚ{õÍê"¾ÆöcíH­ÿ%û¸ø±<ècíÞA¾/G?£úïãøƒ7bþ"¾SÚ"¾ÚÚÝcí™ñâ&"Ú+ Úãß ù'¾/6èØüø0ôäò%û”ú£Øþ'-Šóä¯ã¾/:: ÿ±<'-Êbþqà6èŸå: "¾æÅ™ñúïÛqüc%bþÊÐ ¾/'-ø¾/3Íê]¶BÐcí¼ácíʼáüŸåU2©úÚÝ]ù™ñ£I'-BÐÚóðÞAÞAÚ¼ý óðSä0ôØ«ÍÚÝÐ … ù'Ð ˆ±<:ÚØ+ žù'£â }È"¾Íê¦BÐæÅýPJUcí¾/èìÚ¯î]ù©ú«ÍÚÝì4: ì]¶Ð ¾/£U2è¾/ÊHÆöc%ìcí£Ÿå­ÿ¼á%û'-'-a ­óðÚÙÒBЃ7'-0ôêæìÚÝ%ûèÞA 0ô Wø33ñ]¶¶ªÚc%c%î!öÍêÆö&"êæqücíÆö¾/ÆöÐ KcíDcíBÐ{õD6è&"c%ãD+ úÚc%ýŠóBÐã]ù aþä¯ãpÕÞAøˆQ{õ6èc%ÚÝé: «ÍñÞA úïHÐ ”äòBÐîaBмá&"è” W¹ÀÚU2BÐOÃË *«ÍBÐ&"Ð ]ùc%]ùøc%]ùDcíóðß ”KpÕØÊ¼ýʼýì4g&"WÊ6èƒ7ÊÚÝô¸ÊýøDµþDæÅ©úqàqà™ñ­¾/ñcí3aˆ¾/c%äòêÚÐ pÕØ]ùøŸåpÕß ý:cí6èù¼á£6èÊ]ùäò¯îøóðÊÐ aŸå¸ø¦Úãýø:üBиøµþ*DˆOïî”Úݾ/: êæ ™ñDD¯îBÐ6è]ùÕôqàØóðW±<=BмýBÐÊqüpÕèì4îBÐU2a¯îþ"¾ì¾/cí¾/©úä¯Ë£¾/¾/:W%ûcí0ô0ôOÃÚÝ*îþ*ÊOÃWc%¸ø±< qàc%U2qàýÚ꣟å}ÈÆöóðù'Ê6èÍê… øÞABÐcíêµþ6èÛ¯îÞA'-*¹ÀcíýOÃ]¶«ÍæÅüG?aÊ:Ú=ãŸåèˆxûäòBÐÚÝqà]ùäò]ùù'£IDG?ô¸u†Ê¶ª]ùc%Ð êæÚ>òŠóøéDc%ÛÊæÅ¶ª*:ÕôÊiý0ôäòÿ•%ûcíØ"¾ì­ÿ¹Àß /o GDD¾/êP'-BÐqàDø"¾6èBÐiý£ÆöÚ¶ªô¸«ÍU2¾/ G¾/]¶pÕ: ¼á"¾"¾ìã'-¾/¦_ Gêêæcí G:¾/bþ]ù£&"pÕæÅ}ÈpÕpÕ]¶ìBÐj±<¾/ƒ7óðƒ7aÆöæÅìŸå¶ªZ }ÈæÅOöªOÃ&"ù''-ÞAÕôG?‹y'-£I±<ß ¾/«ÍpÕ-›æÅ"¾}È™ñ˶ªÑu†Ãü:&"±<£I G%û:óð¼áKc%”+ c%… {õ"¾ÿ•ˆ¥¶ªËûc%: : a GaÞA¾/ÞA&"Û䯶ªSäxû'-ÚÝÿìPÆö¯îù'DóðOõþc%øìÙÒØ"¾ÞA+ ÙÒ ÞAG?ý3ËûúïÿDÞA'-Ð êaÞAÚl÷ÙÒÚô¸D!öè¯îBÐ'-6èÐ &"iýì4BÐÚÿ GJU]¶Â gì¸øø'-6èæÅ¹ÀBÐ3BÐ!ö%ûqàãâ3xZ±<Ð Æö6èîv QìQÙÒÚÝæÅDŸåÍêÚ:éOÃDc%±<¼áSqàãG?ž"¾ ÚÝäòÞAÚÝDU25æÅæÅ!ö¯îã… ::ú}ÈU2JUgß : Ð æÅóðƒ70ôø]¶Æö+ cí«Í­Íê%ûýSä£DÐ žË!öqà*”ì4&"ÚÝqàËÚÝß :6èQcí]ù&"ø*ÙÒ¹À{õ¯îÊBÐqàbþ0ô¯îDÍêìQ£I: KèÚÝæÅ]ùqà0ô]ùÚóðýaé: Oí¾/Q: c%c%c%ì>òŸå"¾pÕžK¼áèì4ùK¯îl÷£ãQcíÚKØ3&"v ÚÝ: =¹À:ÓdxûÐ ±<£ÙÒ6èÚÝ ¼ýêæø¦_Ø£øÛÙÒ䯣JUcí"¾¾/JU«Íóð GñpÕ}È}ÈÞAPÚÝÚÝù"¾WQSä0ô¾/ì4SÚ¯îæÅ* G&"êæ&"Íê]¶"¾D0ôÚÝì4v ™ñŠóqàý&"Ÿåÿ•jPü¶ª¯î—ˆ¥}ÈS3jì4Ð ÙÒãã6è¼ýSäG?"¾cíóð pÕ¶ª±<*JU{õˆbþc%qüZÿ+ êæ£«ÍŸåˆ¥: ÞA¹Àc%¾/+ ß c%'-'-ùØpÕ£"¾"¾]ùù'ÿqà¾/êæØÂ :P¼á}Èù'ÞAK!öì4øÆöØé3ì4ÞAŸåqàæÅƒ7:6èpÕ£JU±òØ+ «Íã«Ícíƒ7*c%c% Gc%a/oc%Ê>òBжª]¶l÷6è¯îWãËæÅqàÆöiý{õqà­QÞA*Ê䯼áúïxû'-Šóì4qàÍêÞA!ö­ÿc%P¯îèøž!öô¸OÃ:Æöcí«ÍSäÍêî¦qüÞAã«Í¸ø­SäËý£5ËOÃÚBД±<ì4ƒ7D"¾aJUƒ7¦_:c%ìcíäòqàÆöc%æÅóð"¾]¶]¶]¶-›pÕH Gø¾/&"+ £IJU G Gc%ñô¸æÅضªOöªŸåqàOà ¾/ù'K £IDQâøxûpÕ¹À]ù0ô}Èäòcíé Gù'Qñƒ7QS£¾/ÙÒ"¾Øêæ: gqà ÕôØÞA6èQß æÅˆæÅÚ}ȫ͟åÊ™ñø:]ùU2”ÊÞA¾/±<ÛÕô£aä¯+ OÃqà"¾ÚãiýÞAÊæÅì4ß K¾/HJU}È}È£I¦{õÙÒ>ò G¹À£6èØKØæÅì4ÕôÕô0ôèøÚÞAêæì:¯îƒ7 G¯îìqü5qà*qüÿ•Sä¾/qàc%ÊãU2¾/]ùý: ã]¶Íê6èÃüa: qà*¼áù'ÞAÙÒŸå:]¶ƒ7BÐÐ ÙÒˆ¥ÞAH]¶c%ù'}È&"äòýqඪ!öPæÅîƒ7«Íc%PBÐ>òÊéìóðSä&"{õ: H'-”Ú*Êêæø¼áø¾/ãýaæÅ6èÆöqàÚæÅ*PDpÕì4æÅÚU2”c%… !öv ¦ÙÒʾ/"¾ˆ¥3*c%¼á¶ªOñ<£I: *ØÐ DóðŠó£]ùÊ"¾ˆ¥êæÞAøG?ã5ÿ"¾Æö  BÐÙÒÙÒ™ñ¦: ÍêpÕ ì46èv Šógù'Q… £Iêæ¶ª]¶æÅ¶ª %û¹ÀÙÒ¾/W:ì4]ùù'cíé±òËØ}ÈÐ ­£êæýÞA:ìc%øBÐ GñÍê6è©úcíÚ©ú¼ý­¼áæÅ '-JU6èô¸ƒ70ôø]ù™ñSDv c%cíé¾/¶ªQèc%¹Àýc%ß ­BÐé&"¼ýÛŸå¸ø BÐD¾/Íê:ÞA>ò Øô¸¯îì4ÕôËBЗګÍì4D+ >òùøŠóBÐBÐ0ôÆö” ÞAc%Hدî:!öDqàqàú: ý0ôG?îéØ!öiýúŠóDúül÷: cíc%¾/BÐÚÝ'-G?c%óðqàqàHcí"¾Ë¼ý¦_QÆöG?Õôg£0ôÞA+ U2 ä¯úiýZÿêæã™ñËûÞA'-¦ÞA¦Õôéäò¸øÚµþ¯îìg¦­©úÚ6èù'c%]ùpÕcíZÿæÅüì4øc%¸ø6èñcí—0ô*ŸåÍêÆö¼ý"¾Úqà… ÞAýG?Ûß Ë£äò=ÆöÙÒ>ò£HŸå!öSäÚÕôv 3Ð Êè"¾"¾Æö*êì4îîv ÚÝô¸]ù'-BÐQÊ æÅpÕ­ÿÚøì46èc%3¶ª*pÕý{õcí±<£æÅèØÚc%Ú¾/¾/øúÙÒl÷ÆöžÊ&"U2äò0ôÚì4cí5Sä”0ô}ÈÕôøô¸ÚÝG?±<ž>òäòv JU6èé'-:£IÐ ]¶µþÑu†¦îóð¯îDÛ]tP&"ÊÚ6èÚô¸"¾ô¸*BÐÚìÙÒé­U2]t¦_ Gˆ¥ÚÝqüÚD£ÞADÛ"¾BÐ"¾… ãô¸ù"¾±<:ÚJU&"¼áù‹y*Ú£ô¸ä¯ÚêæÙÒæÅ'-S]tJU&"ÿ]¶ô¸ÞAPÚÝSäü"¾&"0ôpÕ6èÚc%ù': G*"¾Íê+ + ˈ¥BÐ'-¼áô¸â:¾/JU±<jc%-›¾/JUG?¶ªæÅËÚêæOÃÚ¾/­¾/èc%ù'>òù'¸~ì4¼ý: ¾/ÙÒÿ•ÿ•0ôÍêãÍêúþ¼ý: !öÞAJU/oÊÞAù'&"øúïcíZÿÆöÑu†6èÚ¶ª"¾ËBÐ&"JUÞAÞAøÊG?]ùƒ7ÞAJU6èZ ÚÝ£cíÑ]¶"¾cíU2æÅKì4ÙÒ"¾Ê¾/±<ÞAØâæÅù'j/ocíæÅÍêa… BÐqàÞAìô¸«ÍBÐ… ÚÝ>ò'-ÞAìBÐOÃø¦_0ôì4:ƒ7øæÅ3jxZHÚÝŠóÚä¯u†ô¸ä¯&"ä¯D¾/”ˆ£Iì4c%xZc%­Sä+ c%0ôSä«Í-›«ÍpÕ¶ªÚ£'-&"6è¦_¦_¹À¶ª™ñ:qüêèù'™ñcíÊl÷êæúc%Q"¾6èÍêÚ¶ª"¾qà3ý6è­… þÚÝU2ÞA¦_PDÚÝËóðúúBÐ}ÈÛìþSä­ }Ⱦ/ß cíìg=¼áD>òäò Gÿ•¼á6èÊPø6èêæ]¶æÅBÐH‹yƒ7"¾âËxZ¾/ù'&"ãJUØÚÚÝU2'-¹À]¶0ôù'ß cíc%Øãc%ˆJUø:ÙÒqàè«ÍæÅ¹À-›ÞAaÐ : c% GæÅæÅ3'-êæ"¾]¶+ JU3þ/oãSäJUé¼á¹Àä¯øÐ :ÚÝ"¾>òý¼ýcí}ÈËÚ¶ªÿ•a6è¾/JU£IJU :£©úègø¶ªÚÝ'-ÿ•ô¸¾/JU3£‹BÐæÅSäaøéƒ7©úìP¾/¦_¯î]¶BжªZ pÕ:­ÿ… ùè G GPæÅ}Ⱦ/ÞAø ÞAÞA"¾u†"¾ã«Í6èž GÞAc%]¶ä¯Zÿùø*¹À"¾ÙÒSäµþÞAÊèÊ£Ic%¾/PÆöŠócížØSä]ù… £ŸåØKÚ¼ýQèÚݶªÕô ÞAÊv ¾/]¶"¾¼ýêæêæéc%U2 ¼ýýÛñžBÐÿ•䯹ÀÊÚ¾/!öSä*>òËQù'&"Ëûù'èQ¾/Ëc%*gOÃcíîSäÛ¶ªØ'-ÚÝ!öˆ¥-›¦_ÞA¯îŸåÓd5ÛÚÐ ƒ7¦_ÞAl÷qàcíÚcíæÅæÅOöª¾/"¾"¾Ód KJUÞAÞAc%ÙÒ"¾c% GéxûÓdJUèý]ùä¯úæÅß ÿ•ÚJU"¾'-£IÚÝÙÒ"¾«ÍÞA óðÞAD'-䝨BÐ"¾}È'-ÙÒ}ȹÀÆöäò G¯î]¶êæ£êæÊÓdÓdWa:]¶¼áŸåË6è+ aZ -›pÕô¸æÅ3: æÅ3G?µþP]tù'Q¦_c%«ÍS 0ôÚ݈¥u†¸øÓdÍêÿ•©ú G-›Ÿå/ojÞAJU:ä¯BÐÚZ £øìG?Ódä¯ÿ•:QÚ Úìc%øô¸ ¾/ˆ¥c%'-¹ÀÚÝJU¾/ì:'-: ÊKpÕøÚÝBÐËêæ£IøÚÝ ¼á}ȯîaqüÚc%U2ì]ùä¯v ÓdU20ôÚÆöÚ©ú"¾Bо/gæÅpÕêãýÞApÕ/oa"¾£IÊÙÒ±<: … cí¶ªËú¾/Ëÿ•"¾ì4ÞAä¯Úƒ7BÐ*PcíÞA*êæ6趪¾/æÅQ3Ñ­:aã]ù¾/èSäDl÷5'-Ú"¾:'-ÚÝ'-ì4Qؼá&"qàô¸c%*}È«Íìc%ÊpÕl÷ Gß æÅ'-BÐxûÚÝÛxZ*©úúïg¾/c%Úž3¸øSä¼ý£I«ÍŠóì&"… úïƒ7ß }Èãþ¸øêæþ¼ág"¾KBÐZÿ£I¾/é£IÛæÅqàc%ùóðô¸Ú]¶ì4OÃcíêBЃ7ÞA G:3gãì4qàÙÒ"¾¹À>òŸåìØ+ G?ÍêâÙÒÊQbþHƒ7W{õµþ㈥:v ¾/æÅ­ì¼áýBÐÚÞAG?BÐHÞABÐcíŸå¶ªä¯ƒ7 pÕäòc%ƒ7Û¾/c%æÅ©úgêæ]ùÞAÊ}Ȉ¼ýÚBÐ"¾˾/éÆö¹ÀqüH£Iîøù'ÞA0ô¼ýjSäÍêÆöpÕËc%£0ô6èø Úcí: gcíô¸HêæÍêÙÒÙÒcí­Ÿåر<Ë  %ûU2ÞA: : ©úG?ÞA™ñv äòpÕÚݶªxû¾/ÿ•l÷c%¾/þpÕÚÝP!ö"¾è¯î«ÍqàÊã—>ò6è«ÍŠóKl÷l÷]ùU2:î&"é&"JUcí¯îˆ¥ù'ì4l÷îHZ ÙÒBÐ"¾3µþ£I3cíù'DqàÐ l÷èJUø%û¯î”]¶qà&"¾/0ôÚÕôHqàÛãÞA Gì4Íê]ùÊ+ }ÈØHpÕ*«Í6èù']ù:ÞAñ:ø: a­0ôHÚ3ÚÝpÕÙÒîüƒ7:­Û¹Àã: BÐÚÝ}ÈBÐSäæÅG?ù'é¼áéc%&"éÞAÚ3c%]ù>òŠóxû"¾ÛúïÚÝÕôv Ð 5Qô¸JU+ OÃc%ù'éBÐ]¶: DæÅ¼ýSäù'žì”ƒ7]ùÚÝæÅpÕ]ùÊÚ©úÍêÆö6è£I*… Ð G BРäòóðOÃãU2ãã ÃüæÅ0ôÆöîøÊD¾/&"ÚÝ©úµþ—pÕqàcíÐ g5Íê—ʯîOÃ6è&"]ù:Hìc%ì4pÕ¶ªiý±<"¾Ú±òÐ £I£óðúËêæ­µþpÕ©úâ¾/ƒ7¼áù'Íê¾/qàˆ¥ÙÒÛãé0ôý«Í"¾:c%ì'-£IÛ¾/ø6ècíU2Û=Ø6è:{õ]ùÚÝäòùU2]ùþŸåãHÛÚ… JUÐ Úì3l÷}È«ÍSÆöiýø GÊøù'ì4ƒ7µþâpÕQav ÙÒ6èóð"¾BÐ æÅóð'-—D£I&"… BÐé:{õùDØÚ&"BÐÚÝÊÆöa]ùúï¾/¦Æöcíc%"¾Ð qü"¾ã±<äò: øpÕÚÝ6èS G}ÈcíÕôqà"¾l÷žü]ùQD¯î¼ý¾/5cí¦3¼á£!ö¾/”=”=5ÛÊýžÚ>òÚÝ­ÿqüQø6èÚ%ûüD*ÙÒS+ úpÕéc%>ò©ú3ÚÝ]ù&"Êéîc%Ÿå3ãDø*óð%ûì&": ËOÞcíc% ¼á¼ý'-óðŠóBÐì::ÊÙÒ øæÅQøÕôô¸: gè>òSä JUépÕ:ÞABÐÚÝv ™ñ*}ÈØä¯øãÚgƒ7¸øìùÍê&"c%øŸå6èÚÆö±<©úOÃÆö¾/ c%µþèQÚÚÙÒBЊóŸåì4øØl÷BÐØìc%ÞAËûŸå­Dã'- G BÐÙÒ*qüÐ ]¶qà%ûØpÕÞA: }È{õ£I:0ôÚƒ7Ð ä¯Ø* GBÐZ JUpÕ"¾óð:žÊc%™ñ*+ ÿcí!ö"¾Õô0ôÙÒø: ™ñc%]tjqàD]ùñqàô¸}ÈéÓdcí¶ªæÅ&"JUÚÝ: ÓdPþ¶ªÐ ¾/u†u†¶ªJUSäZ «ÍaÚˆ¥æÅ™ñ¦_G?xZ¸~ø¼ýl÷æÅ¯îJUc%£‹H¶ª0ôc%… ¶ªSäø¯îU2a GSc%ÆöBЊóøÚÝúËô¸ŠóJUQÙÒ"¾aJU¸~ÞABжªBÐWcí]ùÓdcíä¯ÿ•Ñ0ô«Í Gj:/o£cíJUxZ£Iú… ÿ•¹À"¾£‹"¾Sä{õG?£gÞA%ûBÐ:¸~xZ«ÍË3 Gضªu†ÿ•cí%ûæÅ¯îj:5æÅê*ù'6è6è£6è&"ƒ7óðBÐèä¯u†BÐ&"éã3*cíß *'-c%cí}ÈæÅSäÚÿ•Ÿåv GpÕ¦_±<"¾pÕÞAxZSäô¸úï¾/Ú}ÈÚóðÃüâc%ý}ÈÊ'-ß Æö ­êu†Z :/oãu†Úqà*æÅè'-c%Sä}Èù'"¾Úqàù'¾/ÞAqàù'îß j±<úcíÿ•øc%èãæÅô¸ÚÝWãØ©úJUxZ GqàÚì4/oü!öqüDc%Õôä¯cíêæPèˈæÅŸå¾/: l÷'-ËÕôÞAŠó… BÐʃ7]ùù'ñéì4­ÚÝÊãÆöô¸]¶óðØpÕìãpÕÊ*U2ŠóDÞAêW—æÅ£ÚÝæÅv ÙÒ-›&"cíg*Ê£: JUBÐÐ £øÚ}Èc%Zÿô¸ÙÒc%pÕBÐ6èêæÃü*PPpÕ*'-aãpÕÚ—]¶0ô'-óðÙÒ{õÆöaãèžîU2Zÿʟ制ªBÐc%ÞAÚQóð6èc%ì4ÞAPŸåBмáÚÝØG?QÊ"¾OëÍc%ÚÝÐ ã*±<>òæÅ䯶ª3U2ƒ7:úïéaóð}ÈËûæÅ: ¯îäò£I%ûpÕãî¸ø3G?ìÚÝæÅ… 6èÆö¶ªÆöì4ÍêSäaù''-l÷¼á "¾6è'-=æÅÙÒ¸ø—ʾ/:êæÅ©ú G:Ð HBÐ-›ÆöŠó䯯îËû"¾ £l÷äòc%qüaúÞAc%Ú iý]ùSä{õ ac%]ùBÐêæ:3Рʼáèý¾/Säù'pÕ]¶¾/Íêóð ¯î'-¼á{õqà+ ÿì4”Æöé'-ŠóÚý5úß cícíýOÃãc%*Æöˆ¥ƒ7&"a*:c%ÍêØ%ûc%DBÐZ ¹Àqà«Í±<¶ª¶ª‹yP*£g}ÈjÆö䯭PÚl÷BÐóðSäpÕ-›ÍêJUÿ•!öjÓd+ pÕÚ¼áJU:ä¯Ð jc%6èèêæóðñÚ¶ª!ö¶ªpÕ±<*ÊÞAøBÐ6è:c%/oÐ ô¸ã: ÚS¶ªÐ  ù'6èô¸ƒ7JUù}Èì4 ØæÅé GJUJUŠóBÐ!öÿc%&"ÚæÅ"¾ÊBмáÙÒ¶ª¶ªù'jÞAž&"ÞA£IèBЗ™ñ¹ÀD&"Dˆ¥ÿ•0ôOÃìÚÝÚì4ãË&"¦_¾/]ùÚ䝨c%OÃô¸P G]¶ä¯ˆ¥¹Àô¸£æÅ6è/o¸~PÞAì4 øù'Ø]¶Z ¶ªæÅù'™ñÙÒñqàˆQèŸå!öJUSä"¾*¾/6è£DBÐËä¯Ód+ {õ¦_±<ì]¶c%c%-›ä¯ä¯¼ýH"¾Ëû£Ic%]txZc%¦_¯îÿ•Êc툥óð¾/«Í"¾ýîêæSäépÕèqà]ùŸåcíù'­¦D:±ò­qàúÚ㶪pÕ¯îWbþì4¾/­úØqà: ùŸå0ô!öÚÐ þËì: ¾/BÐìýóð::*SZ ä¯¹ÀBÐìDG?gèU2WÚÝ… + ØãÐ Æöv è'- «ÍiýÚæÅ¼á… qàU2éãDäòj£IóðJUD}È£c%ˆ¥Ñ Ø]¶ÞA£I!öÍêcíô¸&"¦_”Æö¸~ÞAc%ø*pÕ¹À]¶Z ÙÒ"¾¶ªøè¯îù'c%é­ù'ÛHƒ7©úãc%SäpÕŸåQSäŠóô¸cíc%ù¾/¾/-›6èÊÞAÞAñùBÐô¸l÷£BÐ"¾}ȸøcíHG?ƒ7ÞAø«ÍÍêaê«ÍU2:ñ*ÍêŸåÚÝ"¾"¾îiý}ÈÚ™ñ¾/PP¯îJUÊËÐ Â c%3DSä¼á>òìqü… ¾/Êì4 ]¶¹ÀSäÐ pÕZ qàù'Zÿù'ÞAG?!ö£+ H5]ùäò䯯îù'êæQcí«ÍiýŠóƒ7Dv ø: îãËû0ôæÅ"¾xûÍêÊ£*c%… 6è:¾/—6èÿ•èô¸: éãÑêqà:ì4U2¾/¾/]¶"¾SxûãÚÝÐ ¾/ì4ˆž0ôêæSäÿ•H… cíÚÞA ìèì4JUU2¾/ øU2è0ô… ¶ªضªÿ•ÚK6èÊÆöŸå&" G:BÐBÐù'c%ŸåG?¾/%û¼áøäòóðSä… Õôÿ•U26è 6è0ôêæèãl÷Q­ÞAÞAÆö¯îSä ÚÝ"¾ *DŸåpÕDä¯î£ß qàÞA¦_c%v ÿ•*: u†ØæÅ"¾êæ0ôSäù'Dc%£IG?*Húv ¾/Wl÷µþˆ¥¶ª"¾ô¸cí"¾U2¦_]tc%:ƒ7BЈÚÝl÷}Èì4—ä¯óð£‹Ëñêæ'-Ø6èƒ7ŠóWbþP‹yPüqàcí%ûc%]ù¦ù' ô¸]¶: ÞAÚìÍ궪BÐ0ô¾/ÚÚ£ýÞAxZc%ÞAãìäòÍê"¾*ŠóQpÕQÆöóðÊU2JU'-]ù%ûc%c%HìZÿ : «Í¶ªZ iý ýÞAG?Øqà­øÿ¾/¼ýêæ£}ÈÚ"¾qàî Dù'pÕØU2ƒ7JUì45cí”+ ¼ý"¾Ëêæ6è"¾Säcíµþêæ]ùaäò­%û£>òv :+ ¾/±<Z qàW¦ã¼á]ù6è"¾Íêêæ'-ß ¾/Dì4'- Gc%ÛSäìéã"¾¹ÀBÐ}ÈÚÝžìjPÞAc%æÅÙÒÐ £ãÿ¯îŸå¼áæÅ¹Àù'G?Pc%µþ… ýqàù±<&"æÅc%%ûcí=êæ ì£ô¸ýÚÚÝK '-¸øäò¾/èU2Q©úËû*­æÅpÕ"¾ÙÒ¶ªpÕóðÛ56èD:ÞAì4c%«Íß Ð ù'0ôÚpÕ!öcíãcíÿÃüqà¾/{õÍ궪æÅ c%ÙÒcí: qà¾/c%c%—ÆöÆöãÆöÐ v pÕ¹À¼á5!öÕô¾/+ ô¸}È'-ÞAì4žcí%ûQc%¹À¶ªØ>ò¾/ýv c%ÍêÙÒ'-øéÊóð£æÅ}ÈÐ ¾/¸øˆ¥é G¼ýÚc%¾/£pÕãS¼ýSØcíóðé©ú”­ÿ]ù'-c%%ûù'è'-ÚÝ«ÍÍêØÆöñÞA:OÃBÐpÕäòú'-c%+ ŠócíµþæÅ!öl÷BÐú!öì”6èH3JUÕô óðîBÐø pÕqàpÕBÐÃü¼ýñ Ha]ùŸåù'v ƒ7ù'ãêÊ&"BÐBÐæÅô¸Ÿå'-… xûËì4êæîDc%Õô ˆøãc% :£cíKa:Ú"¾ô¸:¯îÕôú: 5'-Íê*±<Ð &"¯î3ˆ¥]¶+ '-ÞAqü}È"¾ø¾/&"ŸåÚä¯]¶Â ÊQ{õù: Zÿ]ù"¾Úݱòƒ7ˆ¸ø"¾¦aØØ"¾D¸~ƒ7Ú]ùóð6èµþÿ•Ëc%øbþ3DSäqàiýúøù'ú: DÆöqüˆG?ÊÚÝË}ÈZ ÞAW¾/ìa:êæBÐìÚ:  v xû¾/ØÚóð3Ú3ù'ãØ&" ä¯'-G?ýÚÐ ™ñ˱<Õô0ôÊùŸåÙÒÚ±<ƒ7ÞA 0ô{õÆöv 6èãä¯ä¯éU2”c%Ÿå'-QùQè¸øñÞA­ Ÿåqà䝸6èÊÚl÷cíø6è¾/G? 6èBÐÚ¾/Ëû¾/}Èô¸¹Àì£IPøô¸]¶Ð 3øƒ7BÐø—… øQ¹À©ú c%ËÛOÃcíµþ:¸øãâU2ÃüÙÒ%û6èbþl÷¸øæÅ]ùSäc%]¶xûß + WÐ ÞAj:ËØô¸­ƒ7äòQÍêؼáÙÒÞA±<ýþ­Ð : óðø '-: ã"¾ÕôÊc%&"Æö"¾ÚSä'-aÓdÞA£]ùÚÝqàcí{õ™ñ3c%”¼ýúï¹À¹À”… ©úDpÕãDʱ<Úý«Í±òù'JU: BУKÙÒ]ùv Ê: "¾Ãü6è¹À¼á:ÞAÚÝãQã£I:3épÕÍêBÐxûß /oóðô¸¶ªc%ã¹Àú±<ÚÝ"¾xZ GWÙÒÚÝDô¸Ú: GQì4ÚÝ%ûù'¾/v ä¯ê«ÍSäD¾/ƒ7㈥™ñ­:¸øDÐ ÓdÊúïêæîÍê6èBÐ]ù]ù£ *WBÐ6è™ñʱ<ãcíÐ pÕ­Ð Ð }Èéc%ƒ7ãعÀ &"Ú]¶ÙÒpÕ{õÆöÚG?ù' BÐ0ôÐ ù]ù¼ýa]ù¾/=]¶è SÚýqàä¯5ƒ7¼ý"¾qüU2c%*Ãüqà>ò¸øñ6è6èãG?¯î6èدîÞA¾/ÊBÐBÐqàDæÅÚ¼ýÊ G*JUŠóqàˆQc%øqàBмáG? &"0ôô¸æÅ«Íì4¾/ GSäñQøô¸H¾/c%îÙÒaG?ø”Øß Úݾ/WæÅŸåäò¯îÞAÞAcí™ñãØcíc%£ËûÞAêæé:ÕôBÐ&"Ë”Säóð%ûøóðÚcíÊqàÊiýü™ñÚÝÍêÙÒÊ%ûSäÙÒŸåìG?Sc%cí qàØùøÚã]ùù'ØpÕø:ì4™ñÚÝÚÝÚÚ6èµþ:: U2qàpÕ¯î  Рì4ø«Í}Èc%c% óðv äòóðìÞAØqàU2©ú«ÍÛ>ò0ôèZÿƒ7=¼ý"¾Ú'-ÞA Ë"¾"¾DøJUì4™ñô¸"¾£I±<ÙÒ"¾ƒ7¦_ß Z Ñ£Iƒ7ã¸øä¯µþè GU2ß }ÈØèW3K"¾OÃ6èâÛ±òÚ¦c%jì4Êøø6èóð¦ä¯qà]¶øÍê]ùÐ pÕU2—Ûì4ã­ŸåøqàþSäZ 0ôæÅWãéHQÞA3&" : 3îa:¾/øpÕ6èúïc%úqà*cí¶ªÿ•Ÿå ÚÝcí5øÊJU”ù'ÞA*óð­ƒ7=c%ÚÝ«ÍBмá]¶îu†"¾:c%ì¾/:G?æÅ-›'-:c%gÕôóð"¾êæÚÝ]ù6è ìc%ÞAÚÝ="¾äòDß WãpÕêæ5ß ˆæÅÚÝËûbþ&"¼áÚZÿ¯îa­a3Qì4H: ¶ª¸øÍêqàß ÙÒâ'-¼ý¼á6è*c%ÙÒqàgc%ù'3èqàì4cíÚÝcí"¾ˆ¥"¾ýÞAÿSä>ò jÚÙÒ:&"'-è™ñv ¼áúï5£OÃæÅaìÛø:ÞApÕ¯îú˾/ƒ7Ð BÐDé%û¯îæÅ0ôêæaî*JUÚpÕ0ôU2cíæÅ䝯öc%ù'SW}ÈÚ}ÈÊJUÞA¸øä¯c%]ù+ ÍêpÕî Ú¾/é OÃóð ­ÿél÷øÚؾ/¯î«Í«Íê Gj!öDøØÚÝ£IpÕ-›>ò¾/Øã5ãÊËûc%gÚÝpÕcíÞA¾/DxûBÐËÚÝc%ÙÒg'-Ø&"ʈ¹ÀæÅ=:ˆìG?Û}ÈŠógc%Õô¯îÊU2cíúï!öÍêa]ù¼á¾/Ê 6èµþ6èÙÒì4ÊˆËÆöqüc%¸ø a*ô¸qüÛ¾/ÞA¼ý=6èÕôqà0ôc%¼ý"¾óðZÿqàÚ*c%QèÆö6èHóðQ&"bþÊ6èÊ Gqàév ÿÚ­ÿýiýpÕ䯃7ÊÆöÍêóðxZÙÒÊéÃüãc%øH"¾BЗÚ&" Gav ãæÅ6ècí­ 5cíc%DÚÝJU]ùÍêîÍê {õÙÒý: "¾ÚqàÚ: ù'JU¾/6èÊ&"øù'¾/qàÚÝÚc%"¾]¶ì4v äòÛƒ7¦ÙÒøxZ¾/ã"¾W£Ic%ÚÝ}ÈpÕq࣠«ÍU2PúµþˆÛD]ùl÷ G&"­&"}È©úãG?l÷OÃãéÚÞA!öæÅu†­]t죋äòPÞAú¾/xZBÐ«Íøß ù'xûÑOÃpÕô¸ÚÝÑ+ ø¶ªî GW&"£jJU ß JU¯îDì4%û؈¥BЭÿÕô: iý6èZ «Í]¶gì4úïÓdÆöÊÊqü G3"¾ä¯î*&"¶ªù' G­ÿ:£I&"ÞA%ûãâÍ궪]¶U2é¾/'-%ûúØÙÒ%ûOïî:Ÿå{õÞA¹ÀÙÒ0ôŠóÊ6è-›>ò0ôZ îD±<±<±òŸåÕôŸåÚÝÐ 6èô¸ظøJUJUʼáÚ: Í궪êæ G*ÚÝÚʼáÑÙÒÚÝØô¸%û G¦_jJUDøqàpÕpÕpÕ%ûä¯Z Úì4cíSäG?jJUÚÝ0ôací"¾BÐ GG?¸ø¶ªc%ô¸ô¸ù'Hcí"¾¾/xZù{õƒ7'-]¶cí'-a!öæÅ—c%]¶Ú«Í— Gc%c%ƒ7ÞAÙÒËÚÝøxZJU"¾"¾ÿZ {õâqüô¸ü£c% GÞA OÃ*±<¼ýÙÒ™ñ”Šó6èâ"¾D G *éc%Ê{õØýqà«Í"¾Z :SäØJUÓdéqà bþiý©úW*¦_xZ!öãæÅ¹À"¾ä¯ô¸ãþÚÝìúï—SäÞA±òÚ5¯îÆöÚ¦_U2èý&"… ±<è'-¾/æÅÍê}ÈÚ}Èã%û£v ÞAWÚô¸Ø: aPPÞAxûqà¾/ŸåÙÒBÐ æÅô¸0ôÞAË6è 30ôJUj ]¶«ÍØSäOÃSäÃü GÊýqüøƒ7è¹ÀBÐ0ôãúï6èBÐÞA… ]¶"¾£Ic%éc%SäÙÒ«ÍÚÝ:¾/ãæÅŸå{õ«Íù'PÚ]¶ÞAP¾/Õô£Ê±<þ¸øóðÍê"¾êæ«ÍØêæÊÊ]ùl÷qü%ûø­cíì4ô¸"¾éÞAJUac%pÕQß Øì'-‹yäòô¸"¾ÚÝU2'-¸øžpÕËD ”*ÚÙÒl÷c%Šó”¶ª/o£IæÅô¸£IG?Sô¸îc% OëÍQØì'-JUc%qàì¼á ž5¾/qàv pÕ: U2]ù"¾SÆöBÐß øüÙÒW㣈¥ÆöD5=5­¼ýÚcíÕôì4ß :c%«ÍËø*BÐÆö*™ñ}ÈDã¹À¯îùxZP0ôæÅÿ”ÙÒ{õÚÆöG?ÞAQiýc%ƒ7ù¶ª¾/«Í}ÈBÐÊ]ùóðø¾/ÚÝ"¾èJUDÐ Õô&"xZüÙÒpÕÚSÆö]ùpÕؾ/¾/—qàDø—{õ0ô c%æÅOÃÞAc%D3ÞAD]ùƒ7cíWZ ø¹Àˆ¥OÃä¯c%jD GÐ G?Šó¼ác%©úÙÒ]¶Õôì4ØèÊ:"¾-›ÚÝÆö: "¾ä¯ˆ¥ÊQSù'JUù'QOÃpÕ]ù£IÞAj¼ýBУ‹>ò*ÚݶªéPJUÊÐ æÅc%æÅ¶ª¶ªÊ¾/¯îU2JU±òìÞADéŸåêä¯SägæÅæÅ±ò0ôBÐÃüD*êæù'ÊÙÒ ÚÝËD:ìBÐ>òøµþc%:&"ìŸåa Gc%ØÚÝÚÝ… £ãäò¸ø Úóðqàqüì%û ¦ƒ7*øW>òŠó%ûâl÷óðxûÚÝä¯qà3DÚÝüù'*ùcí­qàg££úïÆöãcíÆö: ]ùSä3c%qàËSäqü G¾/£Sä3&"*î¾/ùcí6è䯔qàZÿqàpÕcí:  : *:D6è%û3±< ìOÃBЦqücí=WcíQDÍê}È>ò©ú'- *3øÆöÚBÐÊc%c%ÚݯîËû: Ð cíø¼ácíqàÚú 0ôù'QDì4ß ÚÝÞAÞAD!öÚ"¾]¶iýKÚÚÝÚÝ: {õ¸øäò¾/:Ê*¯îÿù'ì4êæìúïýÙÒZ ì&"øäò"¾ : ô¸”a” è%û>ò±ò… BÐÃü£ˆ>òcíqàa G*£HÕôøøcí]ùbþ—{õ>òʯîZÿc%c%Qqà¼áŸåBÐãK¼ýÐ c%îÚpÕ£ù'¾/Qóð0ôî¼áaîËûHÊ£ô¸ô¸æÅóð6è0ôqü c%èäòÐ ¼ý%ûcí6裣ã{õBÐÐ cíl÷ÊÞAãZÿêæcí>òøøÐ øépÕìéøóðpÕHa Úݯîc%ƒ7c%qàæÅ£:äòÆöQîpÕ¶ªqüc%JUÊ"¾ú'-±òÚqàþ3 0ô+ qüÛóð%ûžÙÒ6èc%èÕô%û­]ùèÞA¾/óð6è]ù… ­ìøîêæpÕ6èÆöKWaD]ùSQˆcíŠócíÍêv Ÿå0ôæÅ]ù:a£™ñØqüþþ*­ì0ô=èÛ}ȼáÚÝ0ô!öñ>òŸå¯î ÞAì4*”DWc%Õô±<3 ØÙÒ¯î6èîŸåDcí«Í]ùì{õÐ :KÙÒ: &"U2Íê:l÷6èDÛÚ¼ýì¦ß + ÚpÕù'Ê6èÙÒÚBÐ'-ýBÐËûqüäò£­QD—¸ø%ûU2Êøãêæ]¶ãÆöß þqü±<­c%øì4aèþSäÚÕôËûpÕxûpÕì4Ëû«Íúïéqà"¾ØÚÚÝóðŸå3Æö*£IÞA: … *c%æÅæÅ¹À«ÍãúpÕqüóð{õG?P¾/ý]ùúïcíêæ{õØ: îúïBÐä¯ã'-ÙÒÚÝÃüúøÞAc%a¾/Kcí'-c%3¦ËË"¾æÅ!ö&"¦ø&"üc%: *ƒ7”ã«ÍËÚé«Íý]ùqà{õ3H G:'-%ûÍê]ù£U2¾/ñæÅÚãìê&"]ùHqàÚØ£üSäD¾/6èøc%¸ø6è¯î36è«Í6èãZÿÚÚÝ6èZÿÊ*&"Ãü]ù3Êý… ø3ÍêH¯î6èpÕˆ£êæâcíü qüqüŸå{õ'-øÊŸåß bþ”%ûQ©ú¼áØ3SäóðØ6èv aø¼ýv  ÃüW&"*H¹À!öcíŸåÚÝaþ+ —abþ”&"c%ŠóSãÚŸå”'- ©úúïÍê: ˆâ0ô!ö¸øcíýl÷ÿ­ÿ£äòZÿD c%ù'Ð ÆöÍêSäêæ5ø6èã™ñóð%ûWxûÃüÐ îèØ0ôËûúïcíqüËBÐ>òêDa£BÐýc%ø]ùøS óðËûúïÿcíÚ{õcí+ xû0ôQÆöè>òW{õ{õ¯îÆö]ùÊQ¯îýcíÚêæpÕÿH¯îl÷c%ñc%5bþìqà¼ý&"a=BÐÚÝaD¸ø: £Qù'+ ©ú%ûüÚqàZÿÍêÿ ­ù'Wqàýµþø]ù0ôé0ôD: Ú©úcíú£ K]ùŠóè©ú¸øŸål÷ýúÛîa3=ÚÝ}Èl÷ù'Ð DØüÚÝqü¼ýÕô”{õW¯îcíÆöµþêqàâ ø”¾/µþqàÚ¼áÊKø!ö{õé¯îxûîäò… þù]ù¾/%ûîÚÝbþŸåˆZÿcíl÷xûúÿ]ù”èW”cíÐ ø6èß óð ã]ùZÿ56èÍê: Ê 6è”: '-&" Ÿåêæ+ â¯î: 3”ŸåéìÊúß l÷êæêúÆö: Q: HÆöÐ ©úêæÛžžÍê©úÚc% qücíÆö ýß 3£èý£Šó!öÐ ¼ýSäÚ0ôü™ñêæ{õÛµþ™ñ+ Ð … iý{õ£5… ú0ô¦cíŸåúïéaÆöãqà£ý: ß ¸øÂ ý 5¼á—­ÿ”6èìÆö”ËûúÐ ¼á¼áß c%Døµþ” øˆD]ù­ýBÐ6è¸øc%Säúï]ù”£—£­üxûìG?Ûg: úqü6èBПåù' ÚÝÚÝøgè0ô: ÕôŠó¯îýl÷éÚ!öcí0ô ¦Ð … 3QÃüW>òÍêè3ø6èÍê¸ø™ñ6èøì}Èøøl÷؈ø¯îú{õè… qàêæ¯îqà¼ál÷H]ù Ê… DQî%ûc%c%: ¸øãÚݸø%ûêæZÿäòü]ù¼áž èùéèc%: ø+ a… äòäò]ùl÷6è!ö¯î  ýãÕô Ê6è™ñŸå>òxû0ôøýÕô6è6è£ÚÝŸå%ûbþì%ûêQŠó… aD™ñÚÝ: {õ6èÍêãÆö¾/ˆ0ôóðéýÐ >ò]ùìãxûD&"0ôcíü0ôÚãg*Q=ŠóqàÍê­&"êæÙÒ%ûù*DîBÐpÕcíQúÃüÞAƒ7l÷ìúïqü 3+ pÕŸåìŸåêæ6èqà… Qù'&"­ îÊøQ6èOÃêægÍêxûÐ ¯î]ùaøì… : ¾/&"0ô¯î­ÿ¼ý0ôé… Õô¼ýøÊ£óðóðžcíDqàýýDac%v DË%û: DÆöäòcíêæìúˆÛ+ >òã0ôÍê¸øƒ73Ð ¸øcíãZÿü£WcípÕpÕÍêD&"WÛµþ '-óðÚ{õ+ Ð %ûî… cí>ò>òÛ: : + :  cíêæ™ñDê©úé+ Õôqüž]ùø3DýcícíøqüÐ cíÆöÃüè*îDÆöóð©úêæcíQøƒ7c%úïãv cíqàDÊg=¼áäòÐ >òcí0ôHêæÃü: ù­ÿ þèÐ 6èl÷]ùQÛøÆöäò¯î¼ý{õ]ù ÍêÍê™ñÕôcíDDK3­ÿSäŸå 0ôÿSÊW£Ú0ôóðÕôÛ: ýóðêæ ì4ù'ß Úcíãµþl÷*gÚSä è6èÚÝBÐxûß Zÿa£úÚ>ò ¦D£Ÿå0ôñQ>òSäxûSä¼ýäòQQc%£úïóð¼ýÊÊÚ>òü]ù øbþÛøø]ù SˆQñ¼á¯î]ùâˆúï0ô¦ÊqàÿgÚÝ]ù: èúïQäòl÷6èv 3aS0ôÍêqà=Æö&"£ÊÙÒÚݼý­éÆö!öß ìSäžÐ ù'c%Ð =¯îÆöã]ù]ùþÛ6èý£¯î]ùc%£¯îæÅß Êø0ô¼ý]ùW6è6è0ô D™ñ©úagÊý]ùËûãÊøcí¯îcí©ú0ôÞAÛ]ùcív ¾/cíÛ­aýÚÆö{õ0ô]ùˆø ý… ß a¾/øùOïî!öÚÝpÕÚBÐøqà¼á™ñøc%:c%ù'&"G?îÊ­gêæ"¾«ÍéóðÚÆöcíqàúïpÕ&"ˆˆa3 ì£úêæBÐ+ qàêæxûl÷£â3c%&"c%Æöc%c%øùý0ôÕôøÐ BÐ>òqà]ùãŸåÍê­ÿæÅìæÅ¾/Ëûcí¯î*U2øøc%c%øýúcíß žqàøZÿcípÕ5ß %ûã—ù'iýÚì6èqà¯î¯îêæDHc%ýúqü3!öê¦ø3¯î ø ø&"¦êý£ˆ3 bþ£>òÍêäòSäËé­ÿ¼ý”{õÊ=qàËcíøóð¯î—Ê è3 ø¼áÆöpÕ©ú0ôÐ W{õ{õóðþ{õèc%êùépÕæÅ=0ôÆöìãóðúïc%£Ic%DãÍêÕôqà 0ôÚÚÝóðgc%H0ôøÊøÍêËqüc%>òBУ£­*c%øÊ0ôؼáBÐ c%¯îø£pկ7éŸå… cí]ù ø}Èóð: {õD¾/0ô¼áé&"+ ÃüÚÛ: Íê]ùã6èâ'-iýZÿîQQ Ãül÷èÊcíŠóqàüé¯î&"a+ óðæÅÕô¯î%ûù­{õ!öŠóóð&"Ê”: ýéäòÆöÍêéúÚÝWÕôäò¦âñ ­+ … %ûaµþqà­ÿÐ ãã]ùQ&"QÐ  øˆ¸øýÐ ø ”]ù6èì ùÆöcíñÐ v Dý¸ø©ú­ã0ôcíKþŸåêæ%ûZÿËûì Kóðýè¼ácí]ù è… … ¸øqàÛø£*xûËûúïbþcíD5ù'bþãý6èÐ + 3 —qüÚÕô %ûcíÕôã¯îè¯î6èQ¦]ùQÛêÿøqà0ôÙÒÍê]ùÊ©úý¯î: ß ]ùäò”ß cíÚKÿ… ­c%l÷øé¼ýÚ6èQù']ù6èW­úŠóèäòøß óð­ÿl÷ý¯îÚÝŸåžÐ cíˆé©úˆiý¦¾/øýþêg!ö”ÿiýÊSã6èZÿŠóÕô5îžýóðxûŸåQ¸ø6èøÍêÛù­Dþ”þÊž¼á¯îSä+ £éHc%äòÆöø6èì0ô+ Q6ècícíÿ­gì Dß ¼áóðˆ­3¯îäò!öc%è: v èÐ ¯îÚÝ؈£+ 6èc% ÚÝpÕÚ3îø%û]ù­ÿ ­Q¯îSäóðg ­g6èóð6èÍê5Ê&"ø¸ø”Ð £cíì0ôÚÝØaîÊüŸåø=è3 ìBмý¼ý%ûêæýüäòqü­ÿ : QéÍê꣊ócíÃüSäÊÐ Q=… DÐ qüÍêøÊ6è¼ácíËûþ£qàúï]ùQÐ : £]ùî™ñêæóðDÕô6èH=äòl÷KÍêÃüÆöl÷cí ìì”—Ð qàÆöl÷­ÿc%üSäù:£6è” : úïÚÝD: ØSäüøø5qà >òþÆö: Q”ì: ÊQv l÷Ê&" Ëû>òÊ©úv ÿÍêè6èÙÒãÐ ­óðl÷îÐ ”: 0ôµþ+ ù'aì­ÿ éØÿøD: ãÚÝÚgHZÿW­óð¯îcíÛˆÆöqücíÚ%û%ûÆöãg >òqàWø¸øäò¦ñQäòú%û3Ð ÆöqüéŸåâŸåß SîDäò©ú¸ø¾/0ôصþ£éév Zÿ¯îˆù'3£µþˆ¼áý3£Säé6è¸øèDÆöDîÐ c%l÷µþ:øèù'0ô¸øcíQK¼á«ÍÃüÊùbþQýÆö: 6èŸåóð6èZÿÊQ3]ùüÚ0ôäòWÛ­aDÆö¸øÿÊv Ÿåäòúï]ù : + ãØ{õv v iý©úìS”cíbþl÷ß ¸øóðžqü”Ð Ÿå©úÆö: úùó𣠩ú¼áÆö: ]ù: : žóðìBÐWø qücíî3Ð xû=îÆö: Ê!ö%ûiýcíã]ùWK¯îÿ: v 0ôcíäò ¸øµþK©úø¼ýHÐ c%Ûãÿóð­îDúï¼á©úSä+ ­30ôÛÐ !ö™ñÿ{õØóðxû äòÆöØÛƒ7 D6èxûÆöBЊóÊc%­]ùÚÍêŸåèÊý: 6èqàÚÝ£3HÙҼᣊócí¯î©úD>òaÊý¾/Ð D¯îéÚß ¯î¯îñ  6è©úHß ©úý+ êæ6èžpÕpÕÚ: ¼ý>ò£*:qüù'ø¼áqàÚÊÚl÷!ö£Êþ:  6èÐ 3ß êÚÝÚìãýÚ¸ø£IŠógøcí0ôc%ÍêBÐÚãpÕúbþ Õô]ù¸ø£+ iýèžiý0ôêæg… ìÙÒóðDcí  £ü¯îù'Säcíäò¸øcíóð¯î©úpÕãQv ÿQÆö¯îÐ KÊ+ ™ñ6è: &": éìDcíì¦3è êæ{õ{õìHÐ *¾/¯î¼ý6è0ôüc%Wýl÷Zÿ6èÚ£Û¸øã£ Ð 6ècíþ è£øèQZÿBÐxûù': Sü5cíäòèqü!öóð£a*ß Šó¼ál÷pÕ”ß : øcíéËûã¯îÛÊß øqüÚcí Ëûø=ÆöŸåêæóð+ ÛiýS6èZÿÊcíúÍêùêæ: acíÃü”!ö¼ý&"ì4HqàÙÒSäqà6èSä%û*aì4ãÙÒ«Í£3—ØBÐ*&" Ð Íêêæ™ñBÐcíÊBÐèaDZÿÚèÞAúË{õãÆöøÞAÊU2c%Wµþ>ò0ôv BйÀ"¾¹Àãú ¾/… 6èÐ a '-¦_:Ð aˈ¥ŸåæÅËž¦l÷ c%ù']ùæÅÿ•êæcíéù'G?¦_Ódc%]ù6èqàøù':*¯îìOöªŸåÚÝØBÐúïô¸l÷"¾¯îãU2 ]ùÊPì4cí¼ý=Qß aù'ìêæìÚÝã6è«Í}ÈqüýqàÚÝùxûÛ>òÚÝcíäò¼ýêæ%û&"ü&"cížÛŸå 3U2Ê gÙÒùìØêæü!öì 6ècí6èêæ5øóð¸ø­ÿÊDý øÊ>ò™ñSä¯î%û™ñúêæÛ£: 3Û£U2£]ù>ò: cíìžcí6èpÕøž ¦ÚÝóð=cíÿSã¦ù'Úóðv &"c%'-qü+ 6è£Æö¯îéHîl÷ÚÝ=äòÍê6èW­ÿì0ô: 5]ùqàÚÚ'-  {õýþ µþµþqü]ùóðدîqàêæúK3­ÿñãêæ£:µþÛ … êæúïQê£âgé6èc%­6èÍê¼á… S¾/3Ð ÆöÚã™ñì… l÷iý%û¯îŸå>òÿQ­ÿäòäòqà3ø0ôù'DèúÐ iýúóðé]ùÊêËÙÒÚÙÒß ­ÿDù' ý: iýÚÍê: èú!öóðBÐæÅ ù'ÊÚ6èóðc%iý0ô£ZÿÚøl÷žcíÚÝÆöþ:'-ñqüv >òqà}ȯîZÿýÿ6èèß 3ˆKc%v ŠóîäòDâ”éËû¸øcícíS­©úQDc%Úêæ6è¼áQqüÃüý=]ùýééã=ýŸåv QèÐ Dóð{õ6èÊ]ùãcíc%Šó6èóðÿW'-øÆöÍêcíl÷ÆöWüZÿƒ7ý]ùýqàŸåpÕìl÷ aÐ Ð WpÕØ!ö¾/Ð 0ô%ûÛêWaýÕôóðqà”0ô>òqàìgù'ÊKÕô¯îÐ ñ]ùÍêv &"­Êqà¼áBПå*QÆöý3c%{õÆöÊQóðqàÐ D>òË+ ©úc%QÆöpÕ—v Ê%ûÕô¯îèU2c%]ùêæ©ú6èø6èc% WŠó… cí¼áêæÍê¯îÍê¯îý­óðÆöù' ­&"Æö6èØ"¾H&"Ëû¯îcíWÐ ø£”{õ… ]ù6èBÐqàäò+ D cíØãcíÙÒ¼ýì4µþŸå¯îQžµþ6èÍêHøaaóð¼áùiý Zÿ™ñcí{õqüZÿSŸåÚ¼áã”Hèú… 3µþÚqüqà :U2c%¾/&"ìHÆöxûâˆ: cíÍêã¸øãDø{õß ¸øWñé6è3â£ìÚÝìcíú&"µþÚSäv c%Ð âµþè¼ýÆöcíãÍêqüß ú: c%cíè¯îÐ ýè%ûÆöùÕôµþˆŠócíÚÚÝv ýêqàãžiý{õÃüâ ù!öDúï3Šó*5&"ã6èBЙñ*&"è£Ëiýqà¸ø=c%Êv cíŸåÚ¼áØü¯îã—c%±ò­£üÊD™ñ¼áêùHãgýì43cí¸øî: óð©úÚÝ{õúïîñù'ì4èQµþÙÒýQ ©ú”óð¯îSäúïWŠó æÅóð%û­ÿ&"*­ÛÚÝWxûaÕôqüÕô]ù6èBÐóðý+ øê0ôŸåqàéƒ7QäòcíxûÐ ]ùñDøêqüqà6èl÷gŸåÆöS¸ø¯îÍê£&"QaSÐ ñéÆö&"%û¯îDŸåÆöÊ]ùé=  ã0ôÊSäì¯îgú0ôBÐÍê*ÛW'-'-ˆg£… ÃüÚÝ6è3èß ¼ý¼áSäqàÿv úï… c%*ãl÷: … cíì= %ûSä¯îHËû0ôÛ'-QËûäò!öýÆöqüúƒ7Ð : SäêæqàÛî: Ê+ W¼áSäÙÒø3!öé6èÆöøÿŸå%û£cíÚúHÿgDù™ñóðžÚÙÒÛc%ùqàìê&"øß >ò%û5è­ÿ>òãýqüÚóðìcíÃüÞA: ÕôµþD©ú6è… v %û£l÷óðø™ñZÿ… ¸øã!ö—ß êäòÐ øÆö%ûqàì=&"¦ÿ0ôý0ôÍêÛxû ¯îqà¸øùýýù'&"… : cíúïú… Õô6è6èxû3ß qül÷¸øŠóóðˆac%cíBÐ}È]ù êæ *&"ý«ÍãóðÆö”>ò: ñóðêæÆöúïcí­QÊD¯îSä¼ýèQÛ: ãøaŠóŸåú¯îcí£ÿDüD0ô©úD>ò]ù”ù'ˆ"¾¼ýÊø£ÚÝ>òèúïÚgÆöbþÆö=úïQèø H™ñcí!ö!öHH â6èäòèè¸øl÷ =c%{õãäòù'… óðÐ øøcípÕì”Ð ø=ãØ… ù¼ýãqüâŸå£{õ—0ôß ©úþúc%ÊäòÚÝcíãqüúïæÅBÐ0ô¦Æöé]ù­¾/+ v BÐìø>òŠóø'-ÆöúýˆÃü¸øSäè6èþêæÙÒÃüHÊ=gègêìDêù'DÚÝóðäò©úc%¯î5¯îéDµþâÿÕôÆö0ô¦”ÊQ6èÆöv WÊ'-U2{õDóðÕôµþcíŸåÍêqà'-: óð6è¯îW: £øqà]ù Æö+ ʼápÕãè6èØ£¾/a™ñ0ô:  £{õQÙÒ!öcíÊøäòBПåóðBЊó%û0ôøÆöŠóqà0ôDÊl÷+ xû£ÙÒÙÒcíU2£ÕôqàÛËû ¯î¼ýÕô3îÃü!öŠóaùãóðc%D«ÍqàDKÍêêæ­ÿùS%ûß '-ãSäóðäò¼ýÚÛÆö!öv c%5{õñÕôâ¾/Q©úl÷øKì¯î”ˆ&"ê6èBÐ3£c%Säýqü¼á¯îøaÆöqàSääò¼ýc%ì4*ØOÃìêæ5êæËûè¾/QÍêSäiýµþÍê0ô6èøø=ýgSä ÿWžóð¯îóð3ãcíé: Êcí¼áxûÐ Êc%*'-%û&"él÷êæóðÙÒqüÚÍêÚÝBÐîóðgc%cíèã&"Ê{õÊQ0ôîž=øqàý¾/Dcící&"éÐ äòÕôc%!ö¼ýÍêDŸå øø¾/äòãæÅËß KÆöcí¾/: qàúüéSä'-:ƒ7éóð«Íêæ3ù*qüÚ¹À«ÍcícícíøQÊècíóðÐ QDQ”ˆSäÚSäè&"Ð Øé­ÿ¸øì4Sä%ûé= BÐ6èøcíBУ­ÿß è&"bþv Ð ÿÚBÐãþDùÿ—¦Ÿåîì4 0ôqà3G?£Æö óðpÕ"¾BУc%:&"­ý”5qà¯îpÕô¸"¾óðÚ©úù'±ò6èúïéŠóÐ Bмáäò6è0ô¯îØÊDSäKù £c%—Íê«ÍBÐ{õÊqàø… ù'ˆ … cí}È+ þìÊŸåãqàØ%ûãÆöì4c%ù'ß èWÆöÚqüîÿ­ÿêÆöìú©ú]ùÊDËã=qà+ 6è­U2c%ãŸå: ±<—cíÚ3ýø*qà¾/Úv 6èô¸Øg'-Dì… ÚäòéDì4* ]ùÊîêæúï%ûÐ + QÆö6èñDâOÃÆöxûìäòc%¾/¾/ù'3cíüÚÝÚŸåÙÒg­ß øÚÝc%ØØ£:¸ø¸ø6èbþß :5+ cíìcí"¾qàÊ£îiý:¾/ÛOöªBÐêæƒ7U2ʱ<¾/ß ¶ªËÃül÷ØÚÞAÓd6èù'¯îæÅDÚÝÚÚ!ö3ù'¸øl÷c%>òbþG?'-ŸåæÅéD¸øaÞA!öÚÚÚÝ5al÷qü0ôqàîø'-3üSä¼ý3±<ÍêóðøBÐÍê&"¾/æÅæÅä¯6è:xû¾/¾/è"¾æÅ{õ*óðÚKù'ÛãÛU2ÞAqàéŸåg¯îæÅÚ:KcíŠóHl÷Qˆ*JUJU: Êô¸ô¸]¶pÕÚÝaøŠó"¾Ë&"&"ù'Ð *ì4ù îì4l÷ã"¾ãÚZÿ}ÈŠó¸øÊù”c%ÞAWì¾/:¼ýOÃ}ÈpÕß äò™ñ&" ì4ñ&"ÚZÿâ¯î¼áWcí0ô6è]ù&" Ð žaˆ¼á!öµþŸåÚÝÚ'-U2QµþH+ øl÷ÍêZÿ ìQ=­"¾qàæÅqàøØ'-üÆöÊ3­:5"¾é éÛ6èÍêúïÕô!öúè3ñ"¾"¾­èaúïÆöèù'{õÚóðaÚÚ]ù'-*ÙÒOÃß c%Q©ú3ËûÚÝÚÍê3ø: ééÚ>òÃüZÿÃüÊ©úÚ6èËûxûÊ&"âúïKG?ÊÐ ÚÚÝ6è6èú'-:ýØcíc%¯îBб<ù'¯îÙÒêæ¦BÐÕôQø3ÊãaQÊÐ … *cíã{õÍêÕôß v ÚSéäò¾/Êqà¼áÆö£­£a: 6èÚéaÊÍê£+ ©ú©úv ¦DQÚã]ù]ù¾/a£qàÙÒ*¯îóð Zÿ{õúïØúïŸå]ù6è>ò6è­ß *¾/:qàOÃÙÒúïbþ DýcíWã=30ô6è£Ê©úñ¯î]ù0ôbþèî¼ýÆöaZÿ&"BÐél÷øýÛKcíSäîî*3”ÚÝqü¾/£+ … ŸåüÕôpÕÐ ­%û=cíøc%3a* —]ùqà6èì6èc%ÚèÊaÊŸåqüã6è¦*: bþ!öcíÚÐ  ƒ7óðBÐúïDÚÝcí¯îÚ0ôDv '-DÍêÚ¯î*0ôqà]ù£cíèQÚ™ñ¼áWìÚÝ©ú£ GÍêŠócí­ÿâ¼áÕôc%ß  : üpÕ!ö&" 6èDãù'SäÚ¸ø3ì4ñÍê«ÍÊÕôý]ùQ¾/Wä¯]¶úïù'ì4ýøéù'úïK0ôgÚÝv c%v ø­aDG?èÚ¼áãËpÕqà… agé­ÿQ­ÿqàø££IŠóÆöêæ&"Ãü¯îBÐøÍê]ù%ûø©úaèØÚgÚÝÕô:¾/xûpÕÙÒÚÝHSäD&"«ÍŸå¼áè*Ê cí+ cíÐ ZÿêæŸåêæù'W£I*Ð Æö¹À¹ÀŸåÙÒÙÒý&"âæÅØË+ cíì4ø¾/£Iv ø™ñc%'-Úݼá3]¶-›Úc%D>òîc%êéÚl÷ÊÃüZÿËû¾/­ÿµþÛÚQ qà]ùa&"QóðqüH&"0ô%ûóð¾/*c%qà]ùücí qàéÙÒ¯îqàËqàècív bþèŸåZÿ'-cíqüüøäò6èˆèÊÊÚ: %û¦WÊ£ãÚ0ôäò>òv !ö>òóðîüóð &"6è+ ™ñSÕôSäý¸øqü­üŸåqàùêÐ ¦]ù%ûqàìgµþ¦ žøÐ c%QøpÕóð Øcíêæ¯îì&": cíÚÝúïÚÝê JUDèìQîpÕ= c%0ôÚŸå3>òè¾/ÕôËæÅBÐ 3SqàZÿScíÊ*Ûø¯îì4î ZÿSäiýÕôÐ Ð ý£3êæËæÅøþ¯îʃ7”ÚÝóðBÐaKù6è: ù'­ú6èß 36èô¸OÃúïøé™ñ>òäòcíQþŠó3ƒ7ù'ÃüéSäæÅ6èÛ0ôpÕø¾/c%¯î¯î¯îËûäòì4êŸå¸ø]ùì4ù'Íê0ô: QÚË6èÐ :c%¾/{õä¯Úݼýì4Ê­ÿK™ña¾/óð Úݵþø: BÐæÅcíÊ{õ: ¾/G?*ˆÚBÐ%ûv øcíËÚØÊc%µþOÔø ­c%™ñ«ÍóðãZÿÊ+ úï%û%ûBÐBÐc%¾/QØBÐHäòæÅ{õ­ îæÅ{õ£&"øÊ6è¼á!ö” ŠóxûQìg¼áîH”óðËûÿÕôSäÍêèù'Ð Dacíóðãl÷óð&"c%­¾/xûýä¯ÚÝì©ú!öµþ]ù”ÚÝÙÒ«Í{õl÷ì4 G GU2BÐýóðBÐéÍêý&"QÓdì4춪ä¯ì4¸~ G3BÐ˹Àqüø”ÚŸåã6èãÞA%ûpÕ6è: ì4v Zÿÿ¯îl÷0ôBÐpÕøiý3SäÚÕôýWÐ ­ÿ­xû}ÈúïËc%ÞAJUƒ7c%±<]ùOÃä¯Ú©úU2iýúïcíÙÒqàW5c%ñc%ß ÚÝ+ U2ýpÕì6èücíø ù'Säƒ7ß æÅÚÚÝúø GÚècíóðù'U2ù'-›Ë©úÊØóðc%ù'ÙÒ]¶=‹y£IóðæÅ{õƒ7¯îØpÕ>ò*Ð Êù'¾/G?Šóqà¯îH:¹À—: : µþ"¾úbþ¾/ù': cíÐ ê—]¶]ùóða ­*øcíãKc%5c%¾/]ù ]¶Z ¼áÚèxZc%0ô!öÙÒOÃv éù'øQ¯îpÕ¼áÐ G?g±<6èʼáqà¹À>òÚÝÆöýéÛ­ÿBÐc%êæ>òqàéü¼áU2ÊQBÐâ'-ìcíù'6èìô¸SäæÅ±ò WQqàc%±<£cíäòÐ £qàøpÕaêæÚŸå¸øU2agƒ7¼ýêæØ0ôJUÓd ô¸}È*£IQÚ6è}ÈùpÕ¯îÊì4øóðBÐÊé%ûl÷aJUc%îÚÝpÕøHÛŸå6è%ûñc%&"£ˆظø¼áý3ãOÃ"¾Ø”ì4JU±<{õÃüß "¾BÐ:­Q BÐËÚ¯î&"qüqàýù'ãäòcíã0ôqà£Æöêæ!öéêæèÊù'c%SäpÕqüüøc%iýqüÆöú6ècí¸ø5£­qü¼ý¹Àã*ÞAÚÝcíZÿ*æÅæÅŠó0ô”¾/iý'-ËãaÐ  l÷qàÍêg¦'-øäòÙÒ¯îc%¦cíêæ}ÈÛD BÐ5ý}Èã¦_c%&"ŠóãØ™ñÆöØø”&"v Úc%è BÐË3¾/ì«Íß ŠóË}È”£I”ÚæÅ £Ic%6è¼áxûøìqàùgè*­ø¼ý>ò«Í6è¸øpÕc%Íêîìóð6è¹ÀiýÞA'-%ûþ>ò—c%ÚqüÆöÆöcíýOëÍ: 6èÆö:¾/Ð ÛÐ 0ôqàù'ù'ø}Èóðž+ «ÍSäc% µþËÚ­pÕãU2U2c%c%U2H¯î¹ÀÐ µþ>òƒ7ì4>ò0ôDpÕ… ¼á™ñ!ö¾/SäËSä0ôc%™ñcí Dv ÚÝ«Í3a­ãù'%ûqàóðcíc%v žQ£æÅ"¾Øì4ù'Ð >ò¾/6è™ñ™ñ}ÈãìãÊèúÙÒ—¾/ÞAbþ%ûÊDþ*”ø«Í¶ªBÐêæŸåcív ±òÞAÚÝìúúï&"Kƒ7ù'&"ýSäBÐ… ø}ÈÍêcíqà: óð þ%ûDaqàbþù'Ãüêæcí”:!ö­K¸øc%%ûé£6裼á6èìÊ{õv >òÚŠóHc%øì4úïDóðø0ô'-âì˼ál÷¦Ê cíDý¯î¦W{õ]ù ­ÿúÚSäK”Šó¾/ø: qüúïêæý¯îÍêcíc%ùÍêóðÆöýÚÝÍêDø ÆöæÅãÛŸåxû¾/øæÅØpÕ6èø]ùl÷¸ø­ŸåÚSääòŠóS¾/øƒ7ÆöÚÝÊQ>òK%ûµþîÊ%ûã6ècí=WÚ0ôÙÒ:ù'{õøbþSäÆö­c%êæ«ÍÚñ—µþ¾/Æö*xûêæêæaHÆö Р… v ØK¯î6èŠóÐ £øSêæ؈xZ™ñ™ñß *£¯îbþ&"c% Ð ÕôÚÝqàBÐñ¼ácícíŠóQãÕôKß îèD%ûcí6èÆö¼áH aù'¯î¯îøêæìñø¸øÚÝô¸ã¼áØ &"Ð Íê… bþD3Æöþa£¾/úïæÅBмý*âèÊÆöêæ¼ý¹À¹ÀÆöÊìÙÒ:U2¯îÙÒø:ø¸ø¦ñ¶ªSäÊcíì ­ÿ+ —Qî3Úµþʱ<£iýg0ô!öèúÐ ™ñ6èŠóÛ&"K ]ùéÚÝl÷¯îÍêêøbþ{õqà¯î*c%l÷¹ÀSäøúïcí6è}È{õ:l÷*¸ø0ôèiýã¼ý: ß *µþ™ñÚýÕôpÕK… ÊÙÒpÕê]ù: cíÚŸåZÿŸåW±òqàêææÅcí¾/6è&"ãÑpÕø¾/±<c%£ù0ôcí«Í3D3óðDÙÒéêæcí­G?äògcíˆù'¹À 0ô6è ƒ7qàóðãpÕâxû£IU2éÙÒ6è:'-BÐæÅSäÆö… —]ùµþ%ûv l÷£D:ƒ7£ÚÝìÙÒãìø¸ø3a¼ýøŠóˆ!ö6èéµþc%0ôOÃþƒ7cí"¾ñc%ì4:ØŠó]ù>òÙÒc% ±òD¾/Ú¸øc%{õ6ècí5qüãÚµþÕô… + qü©úQ죾/*ƒ73¹Àä¯pÕc%Qµþcíqà™ñËû¾/Æö3c%óðØZÿÙÒqà]¶cíD: U2c%: {õ©ú!öv qüã>òg]ùQ«ÍÆöBÐÿDÞAÿÊcí¸øìêæ5qà™ñÛD]ùÆöZÿ'-ýÆöÊ&"ÚݹÀÛ6è ì4­KúïWBÐqàc%­'-¯îÐ c%ŸåØÚÝZÿ ù'Êcíé]ùSÊ: qà"¾î*DU2Ð ØÙÒÞAî¦ÕôbþÚ: ÊÚBÐOþ/ˆãH¦'-ÊŠóOÃP­aqàÙÒÊêæüÙÒSv è Ú"¾¯îÍê+ ì4Zÿ&"0ôÚc%c%U2OÃcí¹À6è0ôèqü"¾Úbþ Gc%: ©ú­ÿù5Dl÷ÿêØcíËû£ù'l÷ÆöÿÊìãa ù'Ð ÕôèÚÝÍêÍêH6è0ô>ò«Í¹À'-]ùc%P:óðãÐ ùýý'-*øÚ䯟ågqüÊúŸå]ù™ñ™ñæÅúï¾/ƒ7¸øýØÊ¾/%û¯îDø—*QbþÆöécí¼á¯îDŠócíˆ ý&"BЈ¥BУIù'æÅæÅì£êæKZÿÊ”qàÙÒì­: Ÿåµþƒ7aýóðÚø™ñŸåýøWäòÚã­%ûô¸ˆ¥ÍêøÞAqà=µþcí­ÙÒSJUì4Øúï aã¯îÊ !ö3ÚÐ :bþãã=ÿ Ú'-!ö%ûQ5*qü0ôùcíDc%™ñúï}ÈÚÝHÕô—î &"0ôZÿúï&"èŸåä¯êæ+ óð6è«Íc%¾/é¹À{õcí: … … gøŠóþÊÚÝÙÒÚ= ì4¾/Q: ™ñÚŸåBÐaúïÊß ãعÀ¹ÀãJU±<«ÍÚÝpÕèñè&"Pl÷aD!öSäì4ñžäò6èv {õ%ûÚÝÙÒÐ … ¾/­ÿÙÒ¼áÚîqü£ÿqü¸ø¯îÆöc%ÞAWaøBÐÚ"¾Êv !öè%û«Í6è¾/* GÕô¼ýc%­qàƒ7]ù: 0ôÿ¹ÀñúïÚýW¾/¾/Ú]ùì4%ûKqà"¾­qàSù'iýóðBÐBо/øÛ:ù'BÐ"¾QæÅ™ñì4 GʼýÙÒã + ”G?K­úïÕô䯩ú:øÕôÛHËÍê"¾¾/v *BÐäòl÷æÅ!öø0ôOÃ6èpÕ­xZU2Ÿåä¯êæùÞAÐ cíù'¾/ýÚÝÙÒÚÝDa>ò]ùc%:ù'qàˆ¥: ØøBÐqàpÕ¯îÕôv '-Êag0ô*ÚÝc%­: ¾/ã¼á”l÷]ù0ô{õ¼ýSä”*c%Ê}ÈÚݹÀÿl÷ý:l÷Íêv Q… 6èU2&"Úcí£ì'-­ÿOÃÍ궪ãóð'- îpÕD*qü**'-ØéæÅ*cíÚ¸øS£IËÙÒ]ùl÷ý6èÕôpÕ­cíËæÅ¼áù''-¾/êæÅBÐ6èc%­ƒ7JUÙÒqàu†6è­¦_ù'pÕJUÕô>òŸå£c%"¾ÿ•«Í¾/ c%Íêù'ÞA%ûÊÊŠóqàBÐG?P¾/¾/ ä¯6èÚÝBжªý ÚÝÚaÚÝæÅÃüæÅÐ *cí0ôqàß ¦_:U2ÞA{õqüµþÚ©úqàÐ 6èØaù'ظøØÆöî!öæÅ3'-:OÃúïäò *Úÿ•úpÕ¦]ùZÿ:ÙÒô¸l÷£Iì4qàqàã¾/Ð øÙÒDù'&"™ñ¹Àÿc%]ù¼áOÃDžè¶ªBо/Q£«Íè±<ÊÐ ÙÒÚ3ù'qüpÕqà&"©úúïÍê”ÞA&"JUc%D¶ª¼á¼ýÐ Êêæ"¾ä¯©úG?µþêæã%û]ùaK G¹À DèP:ì4žô¸KÚÛ±<Æö:ÚÝl÷U2ì4"¾ã"¾c%ù'ô¸óðèêæ'-¯îÚc%±<Ð ÿ '-JU6èÚSäêææÅŠóÚêæc%&"ÆöÚ™ñ '-ß BÐ"¾qü¼ýøÐ + ˆ¥ØÊ Šó+ :Æö¹ÀÍêã¯îU2 D… "¾cíDDæÅÛÊ'-3pÕÊã˦Šó%ûSäè0ôæÅqàì4c% ™ñÿæÅ¦3U2ì4ø¾/0ôpÕ0ô©úaaÚ"¾þ¾/ãøù­ÿÛBÐcíÆöQcíg&"©úqüêS䔸ã¾/±<ß ú+ ÙÒc%é£IqüÿÚÝžÆöØgÚÝèÍê"¾ËÚݾ/£IQÚ0ôäòèËcíƒ7£Ód¯îêæOÃã!ö'-£I­¯îˆ¥ô¸]¶”êæøc%:c%"¾­¾/D"¾BÐJU¦_:ØìÚÝcíøÚÝèDèS]¶è™ñä¯>ò"¾Û¦]ùcíËû˾/a:"¾¯îØ£c%JU¾/ÚÝô¸: >òø*:gBÐ鏸*… é6èùóð¼ácí¾/ø¹À"¾µþ]ùK+ ÞAqàÆöæÅÕô>ò£pÕl÷Ê6èƒ7îPU2ã]¶qàÐ + ¸ø¾/ËqàúcíË6èU2:¼ýãøÚøWŠóaÊ0ôþaø+ ÞApÕˆ¥]ù¾/¾/èÚËÙÒ«ÍQ¸øcíbþ-›6èÚøWƒ7Ú]ùqàø±<­ÿZÿæÅä¯pÕl÷Hˆ'-ùG?ËÐ ¯îU2£I6è"¾”Ú>òc%ýÚä¯"¾: Ûß aaJUaì4qàSäÚ*pÕúU2Šó¶ªøc%3—&"0ôì4Æö+ : Õô}ÈBÐBÐ]ù¦_¾/Sä!öU2c%"¾=&"­ÿ=: c%c%¹ÀøÂ ¯î*6èÚÝ>òÊРʯîîìÚÝ+ 0ô±<Êù'cí™ñ=Ú݈¥«ÍHÊù'DËÚBÐ6èýÊî Dqü«ÍS™ñ­Ú]¶¹À¾/c%—W… è­ì4 G趪¶ª6èc%—ù'Sä”bþô¸OÃBÐpÕ*±<úPJUqàcí}È: ¯î¸ø­"¾Íêa%ûpÕÚÝ&"c%øBÐ"¾: … ™ñQ¾/HcíóðÆöÐ ¸øÊQ'-ƒ7ÊÊ]¶6èU2ø6èìæÅcíÙÒqü'-«ÍZÿc%%ûé¾/¸ø6è¼áøxûÚÝ—PD¶ªæÅcíxZÞA}ȶª¶ª"¾ƒ7 G'-ø"¾¹À¶ªãÞA:ø­ÿÆöä¯cí]¶Ð 6èƒ7ù'Úcí!öÚÝqàñc%&"G?c%ÚËãæÅèžâU2&"BÐÚ¸ø£Iƒ7qàÙÒæÅ"¾qà GjîÚ”3«ÍQñ±<3&"v èpÕÚÝØýD ÍêãØýäòÆöc%c%qàã>òù'P iýñ¼áÚÙÒÕôP/oʶªô¸¶ªl÷H Gù'Sä¹ÀÊâ¾/H¯îù'óðl÷qàqà:ÞAúÙÒBÐ"¾qàäòø¾/øˆBÐpÕØÍêæÅZÿU2ì4c%cí¹ÀÚüêæDß ©ú¸øæÅéJU QŠóÚÝ0ôãÍêÊÐ ©úøcíl÷"¾ÙÒì4]ùU2G?ý6è-›qàÊc%ÚŸå¼áÞA!öèøÊ]ù: óð:øDæÅ”l÷ÕôÍêÚ'-aî… æÅ6èóð Íêc%c%K0ôÚqà&"ã>ò ¾/ Gè”óðÙÒãß ì4¼á™ñÙÒÐ 6èG?Õô«Í>òqàÛÆö::­äò6èÆöŸå"¾*Ð ]ùg­*="¾pÕc%U2ì¼áÙÒƒ7"¾Dóðêæùa6èÍ궪¶ªBо/:+ ããËûcíQî… ƒ7£¾/”ãW¯î£OÃÍêêæW0ô6èŸå¾/&"Êصþ ¯îþ ¾/cíŸåÍêø£ID¯îØ0ôß ­ÚæÅcí0ôâé'-bþcí>òÊÐ ÞApÕBÐè:c%ãÊ:U2ÛÚÝãƒ7­Oöª6è±<cíã±òËù'¾/Æö!öc%… BÐæÅêPýäòÍêêæ£µþBÐK"¾ GQ¾/ÊØ: Ëù©úU2Ÿå!öJUÊ}È]¶Ú¾/ì4Ð é«Í¯îÕôØZÿ­ G6è-›ŠóÚÝcí ƒ7JUãäòŸåH]ùc%ÚBЯîBÐØ&"&"0ôéSäxûU2c%Säc%'-K6èqàø£óðé"¾ìBÐ3ƒ7ÿl÷úï Góð¶ªÚÝ3*+ c%óðcíéøúï£I%ûl÷ÿ•qà"¾ÕôQä¯:‹yÚ¶ªBÐc%¦_ÍêØpÕ&"}Èã]ùU2v ãýã>òa¾/¾/øqàô¸ê «Í­ÿ¾/£IJU¯î£‹BÐì*ƒ7êæc%ÞAKBÐbþ"¾BÐ}È: Úñc%JU{õ*ÙÒÛÚÚQ&"U2”cíµþ¾/"¾ÚÝ™ñ£Iß Êˆøc%øpÕpÕ¶ªcíø … Ë}ÈæÅU2ì!öqà­ÙÒ«Íì4:K]¶ØŠó]ùÚQG?:{õÙÒêæÍêÊäòìÐ î* ¹Àþ«Íqàa*«ÍËqàJUèãÚݱ<¸øqü£I£IêæcíBÐxZ£}Èã¾/%ûêæpÕ"¾ä¯øÐ D*Ð ÚæÅØc%D¾/èv ýqàc%¾/ÊDÊ3ÆöèËû˯þÚÝóðæÅ{õ ì4cíQ£Iƒ7BЙñô¸c%ÍêÊÞADü"¾ÙÒBÐêæŠó&"&"]ùqàŸå­ÿ BÐóðpÕÕôc% Gù'Q¶ªÕô0ôU2+  ùSä"¾ÿ•ãS:ÛÚ6è è"¾:ýŠó=BÐBо/±<ì4*Ú«Ív 0ô&"ƒ7'-BйÀãc%6èä¯HOÃ}ÈÞA GÞA'-"¾=£Iù'Q]¶ì4v Úìù'¦D6趪]¶«Í£I¦_]ùa­䯞£I'-±<ÊSä]¶ù'>òŸåS*qüxûBÐ6èô¸l÷PZÿ«ÍØ«Í%û ì4v Ëûÿ3ÞAc% : ™ñžÞA©úØñÚ}Èô¸qà Ë]ù6èc%&"¯îOÃø£­3ì4Ð Æö¶ªãc%¦_ÚOÃØ­cíÚÝSäÛècíúl÷}ÈÚÊ'-äòô¸¯î«Íc% GjîBÐ-›Bб<ÞAG?0ôØÛBÐ… :3DBÐä¯él÷ËûÕô¾/aD«Ígc%c%¸øÊ £IÞAÞA… ãѼáD䯸øP¾/bþÆöZ êæSä}È0ô&" £Ic%}ȼáø¼áé'-JUÞABÐÚ«Í3­ÿ}È­ÿjÊqüpÕ: :Êä¯cíPƒ7Ú6è¸øBÐ«ÍÆöpÕj G*èì ã䯶ªýc%g'-cípÕˆ¥ÍêqàÚÝ]ù¦_¸~xZBÐô¸]¶ÚZÿéø'- GËSäØ6èæÅ"¾¾/qàƒ7ÞAj£ÿ•ô¸c%ãèÊù'ù'SäýÙÒ+ ¦ 6èqàäòÚÚ DjÞA¦_&"Hˆ¥Ú+ ØBÐ{õpÕ6è*ÙÒù'«Í*éÚã"¾c%xZjÊèHìæÅä¯6ègøÛúﶪŸåúïø0ô: ù'Ód Gxû"¾ÚÝHÿ•ØBÐU2c%:êæØãóðúïÆö6è™ñU2Ód±<'-:6èqàÆöô¸ÙÒ"¾¹ÀpÕqàã%ûÞA¦_j3*pÕ]¶ÿ•!öQcí GúïØãìô¸Íêì4&"Ê:JUøù'ÞApÕqà-›Z Ú™ñ>òË3c%ì4c%£JU:qàæÅ”Šó}ȯîóðË{õ0ôc%DÊpÕ>òì4jì4DµþÃü¶ªÿ•]¶Ë©úSäæÅËý£IÓdj  GÐ èù'D0ôpÕ䝿Åô¸"¾¸øOÃêcí{õøøÓd±òúïøÓdÞAPqü0ôß ±<P/o:6趪u†u†Ñ"¾¯îSä¹Àgƒ7*P¾/: bþxûóðäòHƒ7Êù'è3!öqà6è c%c%™ñæÅBÐ]¶ãOÃÙÒOÃ6èóð¾//oj GÐ ãcíWPG?]t:: "¾}È£‹ô¸¶ª]¶æÅÓd¸~Pô¸-›ô¸Øxû GJUP G0ô6èc%¾/ØÙÒ]¶}È3G? Gc%Sä-›ä¯0ôã: ¼ýýÊþ*êæ¹À]¶"¾xûxZ‹y¸~Ód3Ú݈¥­ÿ¼ý”DBÐä¯Z ä¯¶ª]¶pÕ cíß G?Ód¸~¸~]tJU]ùSäúﶪu†ÑÚèÚÚÚÝþÚD… c%: '-xZ]t¦_+ øÊ"¾]¶ˆ¥Ú}ÈÚÝgƒ7 ìä¯ô¸ã‹y¸~xZ¾/5¶ªOÃô¸ˆ¥éSäcíýÚÝ£IP:]ùÊËûè±<ÞA£I3SBÐu†ÿ•-›ô¸Z }Èj¸~£IcíæÅÙÒ”c%j¸~Ód&"èú"¾ä¯-›Z ô¸Úˆ¥]ùÊ”cíêæ/o¾/üÐ ø U2xZøãBйÀ"¾BÐ}ȯîì0ôS­ùÊÚÝãKÆöcí¾/¾/5Êqàqü±<äò=é!öËûøJUG?Ð "¾Hÿ•Šó6èU2]ùèU2%ûØ]ùBÐÚÝ £I GJUJUaý¶ªÿ•ˆ¥BÐOÃì4JU G {õ£‹¶ª™ña£Iƒ7 GP­BÐ0ô«Ící¸øÊ¾/:cíBÐô¸pÕüæÅ™ñD}ÈÚÝÐ Ð ¸øøˆ¥¶ª6èJU¸~¸~‹yJU!öêæBÐ"¾"¾­: "¾ä¯"¾ÙÒ¹ÀBÐúß iýqüc%G?ÞAxZPjÊ"¾cí¾/¼á¶ª¶ªÚã䯶ª¶ªãÚ'-£I GG?£IJU±<: 0ôžqà"¾]¶BÐgW6èÆö'-'-}Èÿ•¯î £I£I GÞAì4OÈ¥ÿ•HOÃæÅŸå¾/c% G&"c%Ëûbþ±<ÞAc%JUjU2ˆ]¶-›Z u†ÿ•æÅä¯: ƒ7c%±<øSäÚ”DÓd¸~¸~j Gâô¸u†-›ˆ¥Z ô¸þ­*­ÿpÕÆö: aøc%c%Dóð¾/P:ý0ô"¾¶ªˆ¥qà¯îQ3Ú%ûl÷ŠóÐ ”ÊÛ¾/ÊÐ øÚ}ȶªqà¸øì­*G?PÞA cí䯶ªÍêOÃ"¾K£Ic%36èú>òÚBÐþbþÞA:£I£IÊì"¾ˆ¥¶ªêæÂ Õô&":ƒ7ÊÚô¸ÚݵþÆö”:'->òæÅcícíBÐ]ù¾/PJU£IPP=ÿ•ÿ•Úì£&" ø}ÈZ qücí"¾qàãéU2:¸~¸~jƒ7ì4ˆäòÙÒOæ”Ú䯈¥ÿ•ÿ•Säcíc%£IG?&"c%:¦_¾/­*c%qüÍêô¸¶ª«Í™ñÿ"¾¶ªŸåBÐU2¾/'-Ódj:6èô¸-›u†u†"¾ÃüP:c%U2ì40ô]¶"¾ß G?Døù'xZÞAQ¶ªu†u†u†ÚÝK&"3Ð Â  … DøP GPj Gc%Oöªô¸æÅu†-›]¶Ëqà¼ýc%Pc%ø¾/aþʱ<¸~¸~jJUʈ¥u†u†H6èD'-ÚÝÿ>òøU2c%JU±<&"6èøBÐìã¼áaWŠóKù'¾/Ê&"Ú¶ª¹Àãâ¾/±<*úô¸óð6è˶ª¼á&"PxZ£ GG?ƒ7¾/Ÿå¶ªH¶ªÿ•bþJUc%BÐä¯ÿ•ˆ¥¶ªÓd¸~£I­¼ýèì4¶ªÚQ¼ý … G?: ËûcíËËÍêøQ3axû㈥¶ªØc툥 Ód¸~/o:=Dè'-¸øæÅBмý"¾}ÈpÕØË>òÃüDØ*&"ƒ7/oJU/oJU ™ñ"¾Ñ-›ãøÐ ÚÝSää¯âê£>òD'-PU2U20ô… ÛÍêãqà"¾"¾=c%™ñc%:{õ"¾¶ª Gjù'U2ú]¶-›u†u†¶ªæÅqàPÞAƒ7:*g­: ø:±< Góð­pÕä¯ô¸]¶Hu†-›ÚJUJUDêæ Êì4P¸~¦_Pì4óð-›u†u†¶ª¹ÀÚ"¾6èîÞAʼá0ôQÞAU2”c%&"¾/£IHâÙÒˆ¥£‹úï *ì¾/ÞAOøø!öÚÝÚÝæÅ”ýÞA6èøc%Æöãô¸Ð ¾/¸~P¾/&"«ÍZ ¶ªØKHäò: é6èÚ݈©úŸå&" GÞA GU2U2bþúïô¸ÿ•]¶éÍêc%&"G?… ËóðØÙÒã U2D Ÿå«Í©úé ]ùŸåc%::c%: pÕ]¶"¾0ôúÍê}ÈSäZÿÚÙÒêæìì£*xZ¸~Pø&"D: 6èØ"¾ÿ•¶ªÿ•Ëcí36èÚŸå­P±<'-U2±<Ód¦_Ê0ôä¯ô¸]¶6ècíÃü]ùË6è]ù+ ¾/ è¾/G?ì4Ê5æÅu†]¶>òc%:QÞAU2 ã¼áSä:Ð *£Iì4 "¾u†Hÿ•]¶iýù' ß a G£Ic%::èQc%cíÿ•u†u†ô¸]¶æÅSäHG?JU G Ÿåã+ ÞAJU¾/0ôÍêcíýú¼á"¾¶ª"¾"¾OÃqà±òqà{õß '-±<… cíÊÊÆöÙÒSäqü… ¯îc%'-0ôß ììù'¾/¦_JUÞAøýˆ¥-›¶ª¼áæÅ«Í]¶ÚøóðÆöŸå±<c%ÞA£I/o/o]t/o G]ù]¶u†u†u†u†¹À±<:¾/ýì6èpÕ{õ¾/ÞAxZJU::&"Ëÿ•]¶Ë}Èô¸cíýKqàcí£&"žH­ÿÞAÓd G3]¶£‹HHØ GxZƒ7c%%ûžSäî¾/ÞA'-ã¹À: óðêæ%û]¶ÚæÅÚô¸-›˾/¦_¸~]tÓdxZPÊcíÙÒDBÐ-›"¾ËBÐ"¾"¾"¾ÙÒH*JUJU GJUxZÞA3&"Ð pÕ¶ª¶ªìù':Ê}Èÿ•"¾]¶BÐgJU¦_U2£I¸ø"¾ä¯¶ªSäé{õýÞAjJUîãcí{õÍê6ècíêæ ¾/©ú"¾¶ªÑ]¶«Í: G G¾/ÞAù«Í¹ÀÕô¾/JUÓdJU¾/!öÚ]¶"¾ô¸]¶Z "¾BеþZÿ£Ij£I+ ÙÒOÃBЫÍóðP£IPÞAã]¶]¶ä¯iýU2Ð Æöäò£IJUJU}Èÿ•¶ª«ÍÚÝÚËûqà5&"­P:±òpÕãæÅô¸]¶ˆ¥æÅÆöa¾/G?U2ÞAU2 ÚBÐÊP*ß Ú6èËqàÙÒãþÕôêæÚÝéøJU GP«Í䯈¥ä¯ã¯îqàcíU2 GPìêæ¼áúïÊaU2±<ƒ73µþ"¾]¶u†u†«ÍZÿË©ú:ƒ7ÚÝcíG?ù' G‹y‹yJU ¼áô¸Hu†H¼áÕôÛ: c% æÅúï£IÞAH*ÊÞA/o¦_¾/Úu†u†-›"¾SäHÊc%Ê: v W{õ¾/£I/oÞAqàä¯-›¶ª«Íã>ò'-D­5ù'qü¾/±òù'¼áæÅÐ ÞA¦_:£I±<Ód¦_xZÞA: Oã‹u†H-›BÐ"¾Ð ­ƒ7%û'-JUG?ø ÆöãäòøU2Õô}ÈZ "¾êæD GJUÞA*6èÚˆc%WqàÚú+ ¯î: BÐOÃ"¾"¾*jÓdP£Ic%±òKcí¼ál÷xZG?ÞA¾/ä¯ô¸g:¾/&"ìãä¯]¶G?xZ:ÆöOïîæÅ¼ýÆö!ö¸øµþpÕæÅŸåcíÊG?P:ƒ7JUG?36è]¶¶ªqàW«ÍBÐqà¯î¹À¶ª}ÈúïG?D>ò0ôJUj¸~‹y£I¾/«ÍÑZ æÅؼá6èéÚOÃô¸OïîxZjÞA™ñQ Gjc%ÚÝ"¾¶ªËËô¸c%£I"¾%ûÞA£¯î:ì4:ì43Z u†ÿ•ÑZ }ÈùJUJUÞA¾/ÞAÞAJUÞAD0ôÙÒñ&"¯îÚݟ別£‹u†ä¯ØËv ƒ7xZaKèPjJUÞAJUc%Úé"¾6èæÅä¯"¾u†]¶ŸåËûƒ7P'-Ÿå'-D5ÚæÅÃüQ*6è>òcí}È0ôqü ¯î¸ø*ÞA©ú£ù'3}ÈZ u†u†ÿ•Ÿåc%ÓdG?¾/øc% G&" GÓdU2¾/cí¶ª¶ªZ ÿ•ѶªŸåPì4'-Úä¯ÚÝúïß ÞAPj¸~JUc%ÚÝ«ÍÙÒ]¶BÐqà¼ýøÊ¾/ K"¾ÚËûÞAgÚÆöʾ/cíãÚÊc%£óðËû¾/ G¦_U2>òô¸]¶BÐBÐä¯BÐZÿÛ¹À}ȹÀ£ÞAP GxZÓd‹yÓd:ÆöÙÒ-›H¶ªêæ«Í-›ÿ•6èËûc%3øÊîgÞA¸~]t*pÕ]¶Z ˆ¥]¶ËQì4¦ý0ôúø£ì4c%î­óð !öBÐ䯶ª¶ª!öù'¾/:ÞA±< GDúïqü*±<îÍê6èã¼áä¯Ñu†¶ªOÃäò£I]t£I*xZÓd/oƒ7îÚØOùÀ Ð £¶ªu†u†«ÍêU2PG?c%PÞAa 3U2øBÐBÐ6èÚêææÅÙÒ«Íé­ÿÞA Gì4Êqà-›-›Íê}Èô¸qàÊ G¦_±òc%U2Ð üc%­ô¸ÿ•ä¯"¾êæc%3qàÚÝØWQù'JU¸~¸~JUƒ7ß ¯îã«ÍêæËÿ•ÿ•SäKÙÒÙÒ"¾¼á%ûóð ÓdxZ¦_ÓdÓdxZ¾/ÙÒ¶ªÙÒÿ•ÿ•]¶ì î: ­øcí}Èqà]ù: gŸåpÕ%ûÛ*øúüÿêæ¼ýÞA/o£I¸øì]¶¶ªBÐÐ PÞA­ÿ}Èu†Z ]¶Sä  Q]ùÓdPJU£I&"D0ôcící¶ª"¾æÅcí5¾/¾/S]¶u†ô¸0ôc% GG?:*3S¾/£IµþÚÝ]ùéã¼áÆöÚU20ôpÕ5c%¾/qàØ>ò£Z ˆ¥qà GjU2Ê:ÊSäŸå¼á%ûù'ƒ7øØOÃØ]¶ô¸¶ªØcíô¸]¶¾/ÞA::ƒ7]tJUacíD¾/Ú]¶ìÆöZ -›OÃqàô¸}Èiý*6èSäß ¾/¸~U2¾/*©úÚìÊ]ùBÐô¸ˆ¥ÑËÊ G¸~xZÞA¾/: óð¶ªZ ¶ªæÅ¸øì4ì4Ð Úä¯ã '-­JU:D£îß Zÿ¶ª¶ª¶ªŠó%ûä¯"¾c%PÊÊv :ÞA¾/ÞAÞAc%Ê>ò­ÿpÕØBДóð«ÍæÅÆö:Ð ¼ýqàÚ䝿ŏø±òZ OÃ"¾pÕ— GÐ &"cíô¸Úä¯ß ¸ø3v :ÞA£I:¾/ ø3pÕ]¶îpÕ¶ªØä¯ØÚ¶ª«ÍÊ£IxZ¸~£I£I:­ß æÅØ+ ÚÝìcípÕæÅù6èãÆö6èBÐOÔJUJUjJU­qüÕôóðô¸¹ÀãxZ¾/qü¸ø]¶êæúïù' GÊÙÒØ… ŠóÚÊU2c%0ôÚu†Z "¾îc%P¦_:¾/SäÃü: aù' GxZùpÕ]¶Hu†u†ÿ•ÚÊg¾/ì4ÞA:'-]tPc%ÍêBÐø6èË cíË"¾¶ªä¯BÐxûBЗ¾/c%qü ­a¦óð3ù':ù'äòøl÷úô¸ÍêÚñ0ô: '-:ƒ7ËѶªÙÒBо/ÞA*ÞAHÐ úï]¶BÐ&"P G±ò­ñžiýæÅ¾/Ód±òqüùÙÒ]ù3qü xZ¸~¸~JU'-6è6è]¶ÿ•£‹Z æÅêóðØãýÞAù'ƒ7: ìqàÆö±òcíc%G?c% ]ùBÐu†u†"¾ý””v qü%û*]t¸~¸~¦_±<”-›ÿ•]¶6èÚÝBжªô¸Ú0ôì4:xZJUØä¯æÅúïƒ7ÞAJU G±<ÞA£I ]¶Hÿ•OÃã6è: ­ÿÙÒ«ÍúüÍê&":JUÞAc%&"ù'ãpÕÚËûÆöüñac%0ôÚÙÒÛ«ÍÑ"¾¾/¸~¸~JU!öÑu†ÑËÚÝcía¾/è¾/PPJU£I*… ãZ ¶ªu†ˆ¥"¾ØKÐ c%*¦ÍêÚüPÞAù'ß æÅ6èQøì4U2™ñÚÝ"¾}ÈÚÝÍêÚÝÍêÚîc%G?PóðBÐcí¯îæÅžè£I¸~JUc%þ"¾ô¸6èæÅSäpÕÙÒqüÕôÐ ƒ7ÞA GÊOÃËæÅ]¶cíQÿÞA¾/ÞAP£IÐ 36èØ&"ì4ýæÅu†u†u†ÿ•cíj‹y¸~JUÃüô¸}Èì4 G*¼áŠóéý+ ù'Ð ìZ ]¶¶ªô¸"¾è/o]tc%µþøZÿ{õ™ñBÐ]¶¶ª£‹æÅ5ÊÞAJUÞA¦_ GPý«Í-›BÐãÚ™ñý'-¼áZ ä¯"¾êæG?ÞAÞAãä¯ËÚc%¸~¸~¸~jcíæÅOÃ}ÈË"¾æÅË]¶ˆ¥Æöì4P:£þ&"c%ù'*ÞA:ß  qà¹Àä¯ä¯ÙÒìSß ß êù'ƒ7'-G?ã«Í"¾éìSäQDqüÚþ¦_¸~Ódg«Í]¶ÿ•ˆ¥"¾a3èøc%äòéæÅØaÊv Ð HŠóâ'-è:JUì40ô£‹ÿ•"¾ãžèóð¼áÕôä¯"¾pÕPƒ7ÞA:QqàpÕ]ù£¾/'-—­ÕôOÃ"¾ˆ¥"¾cíal÷ŸåÛ/o]tJU0ôæÅu†u†Hô¸ÞA¸~‹yj£I!öùc%ˆBÐ]¶æÅ"¾]¶"¾Õôùcí¯îÍêèa*]t£IÞAÞA*>òô¸OÃÚcíZÿQùô¸u†ÿ•ؾ/j£IU2jæÅ¶ªqüWÊêÚÝéã*::ì4PD¹Àÿ•u†-›:­ˆ…  Ú>òøqàÚæÅcí}ÈBÐ Ód£Iì4ÞAjÓdc%qàÚÝ3ضªæÅˆ¥-›u†u†ä¯:jJU óð¸ø6ècí±òQgpÕ¼áŸåqàäò¾/ù'¾/Kcí U2]ùÛÙÒì"¾ô¸ÍêÞA¸~xZø+ ZÿÙÒ}ÈÚQg]ù6ècíqà%û5äò£¦ýãµþµþÞA£I/oÓdc%]ùæÅô¸u†Z BÐäò>ògÐ ­Zÿ£ ¼ý6èqà]¶-›-›ØÞA¸~¸~£IúKÚØËpÕé-›]¶¯îì4ƒ7£ãæÅ¼áóðD£I¸~jJUùcíBÐxûÆö¼áÚÚÍêqàqàBЙñ!öäòc%ø­SäÊg… aÊø£Æöµþ¯îbþ6èÿØعÀ}È!öøÓd/o:ýH]ùBÐËä¯ÿ•ÿ•cí£I¸~‹y£Ic%qඪÆö¾/ÞA:©úÚÝZ £‹Z ô¸pÕSäúxû: Gù'DÞAP Gì4:¦BÐOöª-›}Èã}È"¾ô¸Ÿå£IxZJUDÙÒ䝿żáâc%JUj:DÿÙÒ"¾BÐÚݵþSäÿ•ä¯OÃ]ù&"*¾/'-c%: iýÚÝÐ ù'ì4pÕ¹À6è]ùWøèHiý: Êî6è¯î¼ýóðl÷qàÙÒæÅ>òcí%û'-JU'-KÚÝBÐ3xZ¸~¸~:cíÿ•u†u†ÑÚƒ7jj±<Ûäò”îÕô¹À¹ÀŸåø¾/ƒ7”bþî3c%Æö]ù­ì4ù'gæÅˆ¥¶ªˆ¥æÅì: Gì4ýÚ}ÈæÅéù'xZJUJUƒ76èÚÝؼá%û6èô¸u†ÿ•Úc%£IcíêæpÕæÅÚ:¸~¸~xZ£*aèøÙÒu†u†u†ˆ¥ä¯êæ¾/ÞAÞA±<:c%SÞA£IÊ㈥䯶ªÑÑãP¸~¸~ƒ7Ê{õô¸ˆ¥ÍêxZxZ”ô¸ãD OÃ]¶ÚìØ}Èäòì4¸~¸~£Iøè{õø"¾BÐ GJUK¼áOÃä¯ÿ•Úóð&"l÷µþ %ûU2¾/ƒ7ƒ7:PÞA'-™ñô¸ä¯"¾"¾ÿ•u†¶ª«ÍÍê±<¸~¸~£IÚOÃ"¾cíU2£I GÆöBÐæÅBÐéèø£I&"Ú"¾"¾ýÞA6èêæÚØä¯ÿ•"¾U2JUc%ÞAÞA±òãÚ«Í]¶ÚÝc%U2]t/oƒ7ž¹À}È]¶Õô±<ƒ7*äò"¾ô¸BÐ… *'-ƒ7ž6èØpÕµþø ¯îúï£U2'-G?:¾/::µþBжªæÅØêææÅBÐl÷¶ªÑBÐÞAP/oxZ¸~P£: '-±<*æÅÑu†u†u†£‹BÐÞA‹y±<: Ê'-ƒ7JUÐ cíÆöÙÒÚpÕý¸ø Úô¸¼áîØÍê¾/ýqàóð*ê&"ÞADÕô£‹u†Z Ê±<jjÓdU2¶ªÑ¹À0ôbþÊP¦_±ò"¾æÅ>ò]ùµþ¾/ÞA'-™ñ0ô:xZ£!ö«ÍÑu†"¾¾/qüŠó{õ=«ÍËSJUjøÚÕô­ÿãÚËSäaJUjJU¾/¼áÿ•u†Z "¾Úav *øDZÿW*Décí]ù6è&" óðÆöÆöÍêóðúï&"c%¾/ø&" úúcí… Æö}ȶªÿ•-›ÚH GÞA G:G?ÞAxZÓdxZÊæÅ¹ÀæÅä¯-›Hu†¶ªSäU2¸~ÓdùÚÝæÅø£IJUÞA:¾/èZÿD­3¸øØä¯ˆ¥u†¶ªZÿc%øHîÚÙÒPÞA£IJU±<™ñ䯶ªBÐú©úBÐÆö*¾/ß ÚBÐîD¾/BÐÿ•u†Hô¸BЯîc%G?G?]t¸~j&"qà¹ÀÕôù£ÆöqඪHÿ•¹À¾/¾/ì4Õôô¸}Èè¸~¸~JUúSäþQ]ùøDÚÝæÅß Íê«ÍÚÚ«ÍpÕêæWù'c%g6èÛaøac%:ù'G?PU2ùÙÒˆ¥ÿ•ÿ•æÅ3c%ƒ7:G?Í궪"¾ãK]ùøø:ƒ75Ð £Ê:ù'ÚÝÚù¦Ú]¶¹À¹À]¶}ȃ7:c% GJUc%"¾¶ªÚQÊDG?JU ä¯ÿ•䯙ñc%ÞAJUøÆöæÅ™ñ: úïBÐH£‹BÐÐ Â ¯îì4¦_JU3ÊU2£IG?>ò£+ ìÙÒu†u†ÚqàéÙÒêæµþÚpÕÛƒ7ÞAƒ7'-ÞA* JUjPc%ÕôØHu†u†"¾ÚÆöž*£I¼áËúc%j‹y‹y G*þæÅ«ÍØìÚˆ¥£‹ä¯&"±< G*žÊD¯îéP Gô¸H-›S: ™ñpÕ P:¾/£I‹yxZpÕ-›"¾éêÍêWÍêþóð¶ª"¾>ò—Zÿäò!ö!öÞA±<¦_±<æÅêæJUècíø]ùÿ•u†ˆ¥ '-=ÚËBЈ¥ãÿ£I¸~JU¾/Sä]ùú¼ýD­£I"¾ÿ•Ë%ûqàêæÚÝîaU2qüÆöBÐÚ¹ÀÿÞAU2P¾/'-'-xZ£IÆöu†u†u†qàƒ7ÊBÐ-›ˆ¥]¶BÐ]ù G¸~¸~¸~G?]ù¯îqàãúï­ýúãã}ÈZ ]¶ ¾/èG?£Iì4DÚ"¾}ÈÚŸåÍê¾/'-ŸåD]ù ù'&"ø¾/ƒ7ÕôæÅ«ÍŸåüc%ÚØéž]¶£‹Ñ-›Q£I]t±òØ6è™ñʃ7D¾/Kã:Ð êæé¸ø:xZÊÚHu†Z l÷a:¾/ÞAG?ìË6èú'-:j]tÞAÊËûpÕ䯶ª"¾óðú¶ªu†ˆ¥©úèc%Q±<¾/ø'-ù'ÞA&"Qù'JU­!öؼábþ-›u†u†¯î]ùúqàØZÿ'-ÞA±òpÕqàBÐ6èBÐ:j¸~G?¦_*Û]¶]¶¯îZÿýcí6èæÅ£‹-›­ÿøÊ6èG?¦_¦_ÞAéÚÚÛ±<¦_¦_ÞAqàÿ•¶ªéBÐÙÒBЈ¥¶ªãG?:Pjjêä¯"¾£IxZÃüÍêÚÝQ: µþËûl÷Û0ô¶ª¶ªä¯æÅóðâ]ù¾/U2ýêæãˆì4U2£I G:óð]¶OÃc%&"Ú"¾Dø6è]¶OÃÚô¸OÃ]ùÞA Gc%ß :cíÚ]ùÚݶªæÅ!öU2j‹yÞA¾/æÅHu†«Íì4:!öÚpÕÚÝqà: øƒ7c%Ð &"îìä¯pÕ3c%±<ÞA£Iøêæâ£æÅô¸cíæÅ"¾ÿ•¶ªG?­3xû+ ù5'-c%ÞAJUJUÞAØxûß ]ù¼á}Èä¯Hu†ô¸óð­c%ÞA G Gù'ÙÒ”ì4ÞA*øì¸øæÅäòÊÆö]ùpÕØŸåqà¹À¸ø: !öÙÒpÕ: gÞA G¾/¾/&"Wcí]¶ÿ•¶ª¶ªc%¸~jJUc%qà"¾ˆ¥¹ÀÚÝÊÞAJUøÚݹÀ£‹ÿ•6èD­5}È0ôc%¦_jÞA5ÞAP¼ýô¸qàÞAJUqàu†ÿ•Z u†£‹]¶:P¦_ G: GøéÙÒ… U2¾/+ ø&"c%ß ãî”"¾ÑHHêæ'-ƒ7G?ÞAñ: : èa=:xZ:Æö!öBжª£‹ô¸¼áø*'-Û"¾ÚÃüSä!ö: ¦_¦_ÞAc%­ê戥ˆ¥¶ªúïù'Ód¸~¦_­ô¸u†HÚóðpÕ>òWÊg£Iøø… DÚ¶ªHøJU£Icí6è>òúÃüú : GØ-›£‹]¶!ö3£"¾æÅSä: ±<PèD G:&"c%¾/ÛQ ØÑ¶ªˆ¥u†u†æÅ&"/o‹y]tSËqà:c%©ú*U2óð]¶&"ÞA¸~ƒ7ÙÒ«ÍæÅÿ•u†¶ªa]tÓdpÕô¸SäŸåýƒ7G?¸~]tJU¾/ضª¶ªä¯pÕÚcíqà&"è¾/¾/v ËOÃÛqü¦Ê£I:ù'OÃØæÅ"¾"¾ÚÝÚ݃7/o¸~j”ô¸-›}ȯîþ&"D6è䯶ªæÅ3&"Ð  þpÕؾ/‹yJU—¶ªgù'qàc%ÞAúïZ ÙÒÚæÅä¯BÐÚxûxû%û Gì4a¾/c%øÚÝúï£IÓdø"¾]¶£‹-›ˆ¥óðDQ G?:ËZ 6è: øJUjì4óð>ò&"c%Õôú0ôÚÝ"¾Ú¯î춪ÿ•"¾ÊÓdjj Gƒ7ÙÒˆ¥ô¸Ÿå: SBÐì4P£¶ªô¸ÙÒú:: G£I: ]¶¹À¸øƒ7BÐô¸qüU2ÿ•"¾W‹yj+ Û: DG?Pc%0ôBÐÿ•qàqàØÚúBйÀcíqàÚÝúïajPQ­Ú Z è‹y¸~¦_BÐ"¾¶ª¶ª]¶u†£‹æÅDù'¦_ÞA¾/!öÍêø ¾/G?Ódß H ضªä¯¹Àш¥¸ø£I/oP+ BÐÚBÐË{õJU¸~]tä¯}Èqàÿ•OÃBÐ: ÓdjG?:"¾Ø6èø "¾ÑêÓdG?c%: qüqàÚ+ ÆöÛè{õQÊ'-øƒ7c%úô¸ÚQpÕ-›ä¯ú'-D"¾¼áÚÝqàcíø¸~¸~£IÊcíqàqàpÕ&"jxZcíZ ÿ•u†"¾}ÈËSä{õø:U2 è3¾/¼áˆ¥æÅ¾/ÞA:: ¾/Ód&"”¶ªu†Hô¸¾/ GóðæÅ}È}ÈÙÒþÞAÞA¦_xZj*ýÑZ Sä: cíêæD¾/D+ cíÕôÚ«Í qà U2]txZqàÿ•OÃ'-î>ò BÐ6èÚc%ÓdÞAîDG?øúï]¶«Í OÈ¥ú:¾/aæÅu†¶ªƒ7/o‹yDÚ"¾Sä*U2 GJU]tù'pÕZ Z ¶ªô¸Z ˆ¥¶ªæÅÞA£I]tj:­óð™ñ¼á>ò±<ƒ7ÊBÐ"¾¹À-›ÿ•Z Íê¼ý&"c%øpÕÚKì4JUÞA*3™ñ"¾¹Àô¸øÞA­ ÚËÚÝU2êBÐ]¶}Èìù'ÞA£IP: ¯îÚÝÚË{õøÐ qàä¯è GjJUÞA:¾/Sä"¾¶ª£‹-›¯î&"v ”30ôæÅæÅ¯îG?'-:jÞA£ÚÚ:JUø«ÍBÐqà6èæÅ¶ªÚÿ: OÃBÐpÕ>ò£I¸~‹y'-cí«Íqà]¶Ú¦_¸~xZQ{õ>òæÅHu†êæÆöÙÒä¯Íêv ¾/c%øƒ7D¾/ƒ73 ©úæÅæÅ6ègÛl÷Ãüúïã¹ÀÚŸåSäBÐæÅ: JU¦_£Ic%—}ÈÚÝãø'-:D"¾"¾Úiý£IJUU2ñ}Èô¸Ëãcí%ûø±<'-3+ ¸øÚOÃ}ÈHl÷æÅD¾/P£Iù''-Pì4úï«Í¹ÀÚÝpÕŸåÿóð"¾ˆ¥}ÈÚÝù':/o£I­a]ùOùÀ©úJU¸~]t6èZ Hˆ¥"¾ã«Íý6è ­+ PPc%ÙÒŸåø3'-::ù'ÚÝËZÿc%£æÅ-›ÿ•æÅŸåHÊpÕú±<¦_£IU2DÚHu†SäÞA¾/cí"¾Ú¾/¾/¾/ƒ7ÍêBÐËìæÅ䝿Å:ÞA*Ëû=Ð ˆqü>ò©úpÕØø&"¾/£Ij¦_]¶u†u†ÿ•cí¾/JUÞAãpÕ+ æÅOÃîJUxZ¾/a ÙÒä¯pÕÆöj]t¸~U2]¶u†HOÃbþ Sä>òpÕäò3P/o Gcí¹À!öcípÕBÐG?‹y¦_Êã£3cí"¾"¾ÚÝØBÐBÐúï6èóð+ ¾/¦_¦_Q0ôËûÐ ­W: ©ú—øcí¹ÀÙÒ6èäòËÙÒóð¸øäò6è­ÿQc%xZ£IêËÚÚÝøpÕˆ¥Ñ¶ªÊ‹y¸~‹yPBУ‹HѶªiýjjù'BÐ}È ¯îBÐ]¶Æöý¾/PÞAúïØÕôÞAjJU*qà]¶¶ª]¶"¾cí¼ýDŸåä¯"¾Ð JU¸~¦_:ÛóðŸåùß ƒ7ÞAxZ'-ì-›u†ÿ•ããä¯ä¯qà¾/±ò¯î¶ªˆ¥"¾ÊjxZøúï«Í-›¶ªBÐß ¦_JUPøìqàŸåã6è¯îBйÀ"¾qàâG?j¸~U2¼ýBйÀËqà ì40ôØÚOÃËãù'ì4ìÍêîU2'-Æö6èâì4£IjxZ*]¶u†u†ä¯aÍêËØãSäJU¸~£Iʼáã: Ê: %û!öËû S]ù}Ȉ¥ä¯BÐØÙÒc%jÓd±<üøËû­ÿ¯îaì4ì4ù'Ð ã]¶ä¯pÕ c%ʯîÍêùqü¼áéqàcí3JUxZÞAcíä¯ä¯6èƒ7D6è«ÍæÅBÐè¦_¸~/oÙÒHu†¶ªŠóU2ÞA*äòËOÃÚ ÞA'- KãSäBÐÚÝc%: G*BЈ¥«Íqà{õʈÙÒ"¾}Èß ƒ7&"Ê©úSä™ñ­*&"¾/ÞA ØØcí5Ëô¸ÿ•u†ˆ¥ÍêÞA¸~‹y:êé6è6èJUÓdÞAxû]¶"¾­ÿ3êæËæÅ"¾ÚÝî*3äò©úa¾/**ˆ*ì4xûä¯ô¸¶ª¶ªÿ•«Í:¸~¸~ÞAÍ궪ô¸«ÍÚì4ÞAÞA3Øÿ•ä¯SäU2*ÊÆöÚ¯îW&"ÞAƒ7ù''-c%{õ«Íˆ¥«ÍÍêì«Í}ÈpÕŸå¯î™ñ­ µþG?Pƒ7Õô¼á!öac%èý”&"%ûBжª"¾cíŠóˈ¥]¶ô¸cíxZ¸~¸~P… ÍêÚùµþl÷…  a!öéóð êæ¹À-›Z ÚQÞA£I:ã¼áîäòÚ­JU£IÚæÅBÐæÅä¯cí G‹yjJUW¶ªu†u†ËG?JUPøÍêÚÝŸåqül÷c%U2øÚ݈¥Z "¾c%¦_¦_JUc%êæØÚ]¶cíÊø]ùìÚBÐìQQSäæÅã3¾/ÞAc% ùD¾/c%£ÚÝËqà¼á¸øSä¹À-›ˆ¥ÚæÅiýÓd¸~jc%qàBÐÐ *¾/øcí«Í¯îqü¾/&"Ð "¾ÿ•Ñÿ•¶ªéP¸~/oèÚÚì]ù Pj£IaÚÝæÅZ HæÅU2JUì4Ð Ú¹Àcí{õý%ûU2¦_ì4¸øˆÆöqü©ú=Ûcí"¾¶ªØ0ô‹y¸~j-›u†}Èù'c%]ùã6èÚžWøaDØOÃl÷â3ÞAJU±<Û!öQ:Ê}Ȉ¥"¾6èüúæÅ«Í}ÈÚ0ô'-ÞA£Ijƒ7Û6èOëÍcíQ:¾/%ûpÕóð6èæÅ£‹ˆ¥¹À}ÈD¦_¸~¸~ Gqඪ]¶Ÿå :JU:ìÿ•-›ØDù':+ 6è¹Àô¸SäqüÐ D¾/êæpÕ'-ì4G?ì4 ¸øù™ñä¯"¾"¾BÐ5PjjU2Ú«Í]¶æÅ c%'-c%&"ø"¾]¶>òU2G?c%¹À¶ª"¾æÅ­jÓdPU2âÕôóðÚK0ôv ãOÃæÅ¯î{õ¯î%ûÚ6èýù'G?*îv {õ: c%DÐ :Ð ÙÒ«Í]¶£‹u†u†"¾Ód¸~JU&"Ð ]ùŸå©ú G'-c%{õêæ«Í¶ªBÐ… &"ä¯Hÿ•]¶”xZxZÞAø£ÕôÚÝù'j¦_:Æöä¯ÿ•£‹-›æÅ3JU*£&"c%: Ëä¯ÚÝ*Pƒ7&"­âBÐÚÊóðæÅä¯"¾ô¸ã±<¸~]t GÞA:­¯îBÐä¯ä¯Úø3BжªÚ&"DÕôÙÒ6èWD]t¸~Pù'ÚÝBÐ%ûÐ cíéÛqàÿ•ÑBÐêæ ú£î'-‹y]tc%ØÙÒBÐì4 xû©úžøWîBÐZ £‹ÿ•-›¼á£I¸~jþÙÒ}ÈKU2£I G±<ì4cíBÐÿ•ˆ¥"¾­JUÞAµþæÅ䯶ªæÅ6è: ƒ7ÞAG?:0ô¹ÀpÕDÓdG?ÙÒOÃã¼á"¾ÙÒxû­ƒ7JUxZ¾/ÙÒ-›ÿ•Íê+ av âúïQD­ 6èã"¾ô¸BÐJU¸~PãØ*ÞA¾/îìÍêÚBÐ]¶Z "¾pÕ¦ è ±òU2JUPPc%BÐ"¾ÚÝBÐ"¾ô¸]ù£IÓdøóðqàìÚ¶ª-›Úì4¦_‹yJU: ­ÿÛaù'øS䶪Z Ñ¶ªæÅäò U2ýú!öc%Ód‹yxZc%6èæÅÚéÊøø¾/¾/}È-›£‹}ÈØOÃ}È ì4:c%U2:* ÞAPù'6èØSäÆöø3øˆBÐu†u†ÿ•ãP]tJU*”H¼ýøøÊ±<ì4 ]¶Z Ñ«ÍÚ¼á: ʾ/ GPc%cíô¸¹ÀÛ: ÿ3î0ôø6è}ÈæÅ6è«ÍËóðÞA¦_ GG? c%]ù¦ê: "¾ô¸OÃÚ©úøÿÛBжªä¯ÍêG?Ód‹yJUc%WpÕ*:>òpÕZ ÿ•ˆ¥¶ª«Íac%¸øDDJUPj±òÊù'ÞAÊS0ôæÅ}ÈÚÙÒqàxûãSäóðÞA]t]tP=æÅˆ¥Ë6èÕôHèèÚ"¾ØbþgÍêˆqüý­ÿ¾/JUP”Æöl÷ß ì"¾ÿ•"¾ãÐ qàÚæÅô¸ÚøJU/oj±<µþ­ÿóðÍêäòD: qà>òìضª«ÍéØcí"¾«Í]ùÞAÓd¸~j: ¹À¶ªÚÝÊW>òpÕ"¾Úbþ£ŠóñZÿ3Êc%&"£­Û0ôqàŸåbþ: Šó3*ÙÒ]¶Ë&"øƒ7ì4*ŠóæÅ¼áäòøHêæÚøÊŠó3*ƒ7>ò]¶ä¯æÅv £IJUG?&"ýcípÕä¯˸øgäòÚÝ}È«Ící™ñ *¾/c% + D¾/èéÚHa­ÿäòÆö6è춪¹À«ÍBÐBЯî£I£I£!öc%±<*ìüÐ èl÷Sä}ÈéÚÝÍê6èß cíÙÒ6èêæ3U2DÊ'-JUù']ùbþcí}ÈBÐ6èãQ]ùã”ñSäÊù''-]ùl÷é+ ÍêìÚÊc%D*!öäò6èÙÒÍêÊ£I &"ýùc%]ùÚBÐ!öÚýãøþÍêóðcíè£G? Ga&"… cí¼áÚ©úW6èæÅæÅãß Ð qàæÅcí: *c% GP*{õÚãÍ꣯îÐ äòÚÝãÚÚDì4ø«Íô¸=:Êqàìì4Êg£ÍêØËBУ±òBÐÊžèøý: pÕ«ÍpÕxûäòêæ­'-0ôóðqàìñ±<ì4]ùŠóæÅô¸%û¾/:ù'óðØìŸåøøc%WµþW£K£ø6èqà]ù­ÿ*è øÚBУÞAiýcíÚBÐDÊÊÆöóðpÕ0ôèè *ˆñéã}ÈOÞ:!öc%ÊêæÚqüÊ £cí"¾¯î]ùóðêæø±< G¯îÚc% £éæÅQ±<Ð ]¶ô¸ÍêHl÷Ëýù'=­—Ê OøøÞAc%>òÕô­ÿØpÕô¸cíÞAQÛ¸ø«ÍBÐD!öÞAQcíã"¾¼á GÞA:¦ÙÒqàiý­©úÚÝKcíQ0ô'-: ¼áìˆ0ô6èv úïøø¾/Ÿå}È!öËû'-ÊãOÃÚÝac%èc%èÚ]¶¼á0ôø: : c% GpտūÍc%¾/£qüñQ ÚËéac% cícíÚÍêËŠóg¾/: }È"¾qà5Êc%ʱ<ÆöŸå"¾æÅãÆö+ U26ècíÚÝãWøgúïcíʾ/£ì!ö*c%¸øÙÒÚêʸøŸåì £ÃüÚø­Q6èóðì4&"­ÿãŸåÿø ©úÚÝv WZÿê'- ¸øBÐK£ýúÊW¸øSä: øZÿl÷©úcíØQa&"c%ý¼ýØ0ôbþ3¾/&": ¼ý>òBÐÚÝ"¾Šóc%ÞA*ŸåqàS¯îúïcí6èì4ø5µþW—6èÚîÙÒcíŸå!öþµþcícíâ>ò=H6èêæÊ!ö£g¼ýÚÝúïúl÷6è™ñžÊìóðØ™ñß 3ø… él÷cíZÿèa Æö6èqüÍêÙÒW:c% cíBÐÚl÷ ­ÿ: Gaã}ÈÆöcíqàD£c%g: 0ôcí£… î: … 3ÆöSä0ôÆöQè­ø}ÈØž­ÿ3gQÐ ìÚúÊ:Q6èÕô £%ûBÐqà¼ý3äòú±<ÚÚ”gÃü¸øž*¸øpÕÚ+ ýìcíŸå+ ñZÿ{õŸå'-¾/ cíóðø6èqàøîÊgÊHpի͹ÀÚÝ 3øU2Wqàqàì­c%ÊcíéìÆöqàŠóøƒ7üpÕBÐ]ù­Wc%&"G?ÚOÃÚcí—™ñ­&"ÆöÕôììÃül÷ù'­c%îÍêþìØã… c%ì4¾/µþÙÒã!ö : žøD¦úïcí¼ýã6èñ'-â3cí=Ð Øcíʾ/c%ß ÍêBÐÙÒBÐü*c%èÛ>òÕô{õcíý Êcí{õÚD!öÆöZÿ*îì"¾!ö¼ý£èH¼áÚS&"¦êæ¯îÐ c%ùìÚ6è­Ëû]ùbþc%Ð ŸåpÕãîÐ v D*v BÐãÐ ø©úŠóñ&"+ ¯îSä6èÛD—3è6èÚ5Ð ø+ S£ãBÐî©úîÐ G?: pÕÚ!öQøù]ùc%ÚÝcíqàÃüø&"Zÿ!öÿø6èþ>òÐ îŸå0ô5 £äò0ôÃü]ùH™ñ¸øýv ¸ø… ¸øxûß BÐÕôú0ô0ô3c%]ùÚ>òì­ÿýóðþ¼áSäZÿâ]ù¦£âSg D­ÿŠó6è%û£ãÚ… : êQ… žqà]ùv £=v W]ùÙÒÚÝã+ Ð Ð Íêî­&"c%cíúïÆöéêæêæ&"&"qüãDD­ÿÚÝê%ûøøÛÊÆöcípÕØÍêß Ê'-* Šó¯îl÷úÆöiý0ô3]ùŸå]ù>òv Æöiýl÷= : DÊÕô¯îSä+ —cíãcíBЯî :&"úïéóðéãúøøˆSäÚÝcíú]ùËûúcí¼ý£ Æö6èv v ¸øKÚÝ: DüpÕ6èóð+ K¸øüù'Ð : ýv ¸øÊ6èÚ¸ø£Û™ñøøØØÙÒ­ÞAc%5ˆaSäcíéß ù'£=£¯î¯îcíÚÝqüQÛc%al÷óðÆöbþDø£ß BÐpÕ6è%ûD¾/¾/cíØSä]ù{õÆö¸øøHÆöÃü… ©ú]ùËûl÷ gv ÕôSäý ™ñ>òì6è¸øé øµþ*KBÐùìÆöcíüSÆö]ùìbþùiýêæÛ]ù+ £+ iýé>òcíHäòqàìÞA¾/Q¯î¼ý]ùBÐ"¾6èʾ/—Ÿåìcí øg6è£ù'ø©ú3c%êóðBÐ}ÈØl÷ý£ýÊ'-*Û£ã+ ­ ¼ýQ¦{õ}ÈÚ¸ø3ø>òa+ Êâ5 D: êæØqàž£Íê>ò©úÊD!ö—£: cíŠóÐ :  ©ú0ô>òWããxû—gHD¸ø¯îÚSäÆöÛ¾/!öäò£QüˆcíÕôãì¸øÃü'-Q: éË{õæÅÿKøc%c%ÃüÕô qàü l÷5: þäòÍêê¼ý!ö6è©úý”… ß 3 ùŠóÆö0ôÐ Ð ÊèD¸ø]ùcíÍêÿÐ D5]ù6è3iý©úQøc%ÊcíBÐÚÕô øc%ù'­ýêæÚÚÆöD”: êæqà©úv øÊgù”©úß ¸øøÙÒ]ùv êÕôîŸåÚS&"U2%ûBÐBÐÆö{õ3aÊîŸåËÚpÕÕôù'G?l÷êæcíóðDµþÍêêæŸå¸øqü¸ø>ò!ö¼ý… ¦&"ŸåpÕ©úW&"ýŠóêæ¯î"¾ã'-ƒ7ø{õ”¦óðÙÒ]ù¼ý… øî­ÿ0ô%û6èìÙÒ”c%'-*5ìéÆöúèa Q” ÚÚ Dóðúïþ­¸ø¼ýø™ñø ­ùì6ècíÚWø3¯îøbþ”6è­ÿ¯î: ¼ýÊâãSäWQ¯î¸øÙÒ©úc%©úøø{õæÅBÐîµþcíŠó{õÊZÿ­ê0ôæÅ«Í™ñß ù'&"c% ÚÙÒÚÝ]ù¸ø3ø:c%Sä˯î>ò: ýóðcí !öiý=5a0ôQËûBЭÿ3£Ø+ ÍêcíÙÒ™ñ¾/v  c%ùÐ H'-è£óð¼áqàÚ6èÐ 6è!ö: Šó… ac%îcí+ qüø©ú!öÐ Íêô¸cí+ =QÃüøÿú6è: HQ ŸåÚÝcíOÃWøù'Ëûqà£âÚ5£ý=0ô+ ¼ýË0ôcíø Æö0ôqàìˆbþ”©úµþWv :ñæÅô¸¼ý5cí©úQþÚiýHZÿèQZÿ]ùóðŸåêæÊèî=úïþbþÛv ž]ùãìîDˆóðqàÿWýÐ ýc%ÆöqàD—: øÕôÆöŠóÆö ­”¼áúïù”èZÿùDÐ ¼ý¸øäò¸øqü¯î{õúaß a¦ÚÝêÆö¼ýóð  6èqàêæl÷v ]ùü ú£Ð Û3: cíýÚÝ6è0ôúïýü]ùñŸåÆöÊÊÊîÆö{õž0ôÆöÚ«ÍŠóHýKÐ Húïù]ù!öù£âúïÚÝÆö™ñgc%: Ëûì” ÿcíã¸ø+ qàÛÐ êú Ê=K”5þÚݯî ¯îŠóéóðZÿ{õ”ÊøQ'-qügv ¼ý]ùÊúqà0ô… '-v êæ¸øa øéù¸øŠócíúQÛ6èécí¯î0ôbþù'¾/gBÐ0ô!öQSÊÊ”Úݫ͟åÿ—qüî ¼ýìدîDù'­Zÿl÷0ôW¼áêæQv KÚc%… ÚÝÚÝÚݸøß —ýÊDî… £üxûl÷žÿaÛ¸ø!öqà6è”Dcí=ÿžqàØý'-­”Ð 3 ÆöúH&"øýÚ6èÚÝqà©úgʾ/%ûúï6èÛU2v äò v ñ™ñ£: %ûÆö]ùHÿZÿŠó™ñl÷Hè%ûñÐ KécíŸåžÐ ”µþùã¯îé5a: D0ôÍêìãcíc%'-QŠóÆöSÐ ¼ýÆöÍêÚÝÐ î£]ùúïóð—qü{õW¸øH+ !ö>ò]ù”¼ý]ù ”óðŸå¼ýóðüÕô£­ø: ¼ý]ùqà0ô>òîñ!ö]ùóðDÊøÃü]ùÐ v ”¸øv Ê… ŸåãÚÝéÛêˆ&"c%QìBÐ>òøß øÆöˆZÿâß ÛýÕôcíÛ£!öˆQD¼ácí£a Õô¼áÚÝ: S=¸øÛ£=Dóðéiýø{õÕôäòâÐ èD>òÙÒóðl÷êKÐ &" cí6è êæÚqàv â&": Šóóðl÷v ß £… aóðÚ6èS+ Ð Šó]ùøóðù3Ð ]ùZÿSú™ñqàãÚÝ0ô Ê&"âÐ ú6è6è]ùÊQ”óðæÅÚÝ]ù&"c%bþ6èl÷ÛÛqüÐ Q]ùýøKéBÐ=&"D­ÿø”=Zÿúï¸øQˆ¦ø¦cíìl÷QÊ&": éêæúï{õ6è%û]ù D=ÕôìÕô£â”ÊWüêæÆö Sž©úÃü3ÚBÐÚËû… : v … äòÚÝ!öSc%Ê: øÍê0ôÍêêæ6èiýäòl÷qüK]ù{õl÷î3îÚcíÆöqü ÊóðãSäaa¾/&"ÚÝOÃqàZÿK+ v ”v úïcíDè&" úcí gÍêcí0ôÐ … QH]ùúïµþÐ WÕô­ÿ5: úcíécíDÐ ø£¼áÚ­ÿøß Ð è&"Ð éÚÝ]ùÕôl÷â: Û ”Sä!öBÐqàÆö¾/”6èé¼á6è… ù'ù'ÚËqà: —úïÆöîD©úì­ ac%cícíý3K6èŠóÐ ”¯îqàcí£{õÚÕôîKî+ v Íêù øøÚ%ûÆöül÷6èQ£Zÿ¦6è”DKÛ¸øqü… v øqàpÕ­ÿÊ Ê ŠópÕqà: &"ì4D©ú{õ6èÚÝãËûgß 3ß óð¸øúã6èˆþ'-&"0ôcíÚÝ%ûWâ0ô c%: ÕôÆö©ú¸øÊÚã5™ñ0ô¯îÊ óðøîaúÚݼáDD 6è%û¼ýÚ: ZÿÕô6è¼áÆöWøSäÐ DÐ ¸øl÷ÆöH{õ6è3ÊD*óð¼áÚÝÆöHÐ ß üOëÍãøW ù'c%ß iý… Õô%û: ø™ñDHÚÚø&"U2­… ]ùqüžÐ Íêcí DéÚÚl÷ìî: &"c%Ãücí”øQØýHÐ Ø%û©ú©ú6èŸåc%KøÍê¼ýìcíè a—ã6èóð¸øŠó£3üÚêæbþ+ 5™ñî5øéîÃüêýŠóqàl÷]ùäò¸ø ÍêSä­ÿŠó¯îqà: ±òc%”DØËcíÃü: D]ù+ úZÿì: qüî'-+ ãÚúc%Ëûcí]ùÆöiýv =¦Æöž¦ê0ôÕô­ÿøã6è¦+ ʸø ÕôSڈРgQ¯îóðSä¦%ûKÊv éÚ{õSäDÐ îß &"ù' ÚÚÚ¸øüÆöD¾/*a>òBÐ!öèÛ¸øxû%û™ñqàøµþ0ô£H*Ð øéã0ôù'­Ð Ð ”äòØØKac%*ýø0ô¼ý: ÊDî0ôËûÙÒæÅÚcí&"cíÙÒì*… ¾/a6èÚBÐK]ù ÿ­ÿbþì%û: ÊìcíÍêÃüâÿÿcícíÚìSäøèóðäòiý]ùÊ+ : îÿ0ôêæl÷Õô¼ýèêv Õôcí¸øµþcíóðD&" l÷3Ÿå6èŠóøKD¸øì6ècí]ùìÆö ¼ýÍê3DÊqüéÚÝ: >òÐ ègéæÅbþ¸øéÐ ¾/QÊììøê0ô>ò aóðÃü—qà+ c%ø0ôé¯îÍê¯îcív Êv ã&"Wß Æö £DÐ è… ÙÒãÙÒqàÿúïËû W!öùD0ôúïg¾/äò]ùZÿ6èãì]ù­Ë6èŸå>òý{õéµþ… èê­ÿS”Ê—£µþDìÍêcíl÷0ôã&"Ê]ùÚÝbþc%Êv Ð ©úéSäSäü+ + 3èÃüW ˆcí™ñiýâ¯îìúïäòÊ è£¯îHQSäìÚÝc%&"cí}Èìè&"Úì&"ƒ7*épÕÿDZÿŠóèîÚOÃÙÒýÐ >ò¾/ù'¸øìøÐ 0ôËý Ð l÷¼áÚÝŸå… ¼ýqüv l÷£Ûl÷Ð Q: : qàpÕ>ò… ⦯îv =þŸå¼áˆÙÒãDù'&"ãØ£Ê!öSäl÷ÊH ÛÚÆö­3©úã0ô]ù0ôDiýóðÍêŸåv Q©úìpÕÐ Â =ÛH£Hü­ù': WxûSD ­ÿãSäÚÝÚÝúïgúï©úc%ß  žÊ {õô¸}ÈøÂ ¼ý5Wa: 6è{õÊ—£: Û0ôŸå«ÍêæµþqàSä£Õô0ôS”Ð îžµþ øã¼áµþ¦úïiýø ÚÝŸåWÊËûú£™ñ¯îé¼ý¦ Qú ß èÃüSä0ôbþþqàŸåúñZÿ þa©úÐ Õôé6èø¾/ÆöpÕéø3îøý£úcíSóðˆ+ Ãüqü3D¼ý£v ÆöãóðS3ß 0ôÿ£]ùqàãì Q: HgHìxû ü¯îÚâúËûŠó>ò… îa ¯îŸåãÚcíã£cíì”: Êiýú0ô]ù… ì4… ™ñ™ñâ=ìÚpÕ¼ýùóðéxû!öÐ ”+ ¼ý¼áa*&"£Šóäò­ÿãÆöxûcíÿ + —ŸåÆöËûóð¸øÛî=… aø]ù­ÿø¸øè­ÿäòcív ê­c%3l÷éüZÿ ©ú6èZÿÊîbþúïü ù¸øWSäxûúïŠó: D5Ð Q]ùÆöcí­ÿÐ úúï>òøîl÷ÚÕô 5WH¦ úäòý 5!ö]ùcícíýÿêæã : ø™ñóð6èiýŠó]ù—ÿÿµþ]ùcíŸå£&"&"ñîcíãµþè£=µþãÍêl÷ü”ø&"HBÐãQ­!ö¼áŠóÊcíc픣©úÕô>ò¾/c%”£3… {õÚú&"*SäÙÒãóðÍê™ñâèÊ ¸øSä0ô… ƒ7U2èÛ¸øêæcíÆö¸ø™ñ%û¼ý%ûcí{õøHqü™ñŠó]ùˆqüúbþ¯îl÷xûiý¯î¸øî*±òÆö… Êú”cíév ¦=%ûÛcíý­Dcí¯îäòŠóÚ¼á{õ£ ¦éW QZÿú5DúcíŸåqü]ùSäú33¸ø%û£ >òãcí%ûã>òS: !ö0ôÕôêbþÃüüD3ÊbþøD Õô¯î: îÚÚiýHÚ¸ø”­5cí¦3âxûêgQÕô5c%0ôäòúïËûøÆög3úïÆö0ô©ú: D=ÙÒ!öúDÆö: Æö £¯îxûß ñW=Ð : qüý6è6èqüWóð>ò­W6è0ô £… Ëûéxû—+ 3ˆv äòã¯î%ûãã6èSý!öñü]ùv î%ûK: Æöý: Wiý¼á]ùîZÿÕôSäŸåñÞA'-3!ö!öØÍê0ôxûa: 6èìÆöúïg+ !öÕôËû3ã… *: úcíøÛ«Íúïø¾/ß ÚݯîúÐ + ¼ýxûÚÝcíÕôè™ñcíl÷¼ýøî: + øc%ÚÝêæ>òø¼ácíÐ  èÐ qàÆö &"SäcíøêæqàãK0ôËû+ DÊ]ù{õéú DÊSäÚ¦ 0ôóðÍê: ¦ýäò!öæÅÚÝ— 0ôDŠó… : c%HZÿãqàŠóW gÆöÚ¼á î&"6èêæÃüß a+ c%ÊD6èpÕÍê£HcíÙÒ¯îbþÍêÚ!öc%¾/ : Q¾/ ùv gþŠóÚÝãø¸ø>òÍêcí™ñ­”¯îKac%a™ñ%ûˆ¸øÕô]ù™ñÊc%: pÕÚÝH6èpÕŸå5ž­ÿ0ô üqü aW ž… Q cíqà«ÍìqàŸåéµþ£v ™ñÐ ž: Ÿå—D©úQ0ôýÆöcí0ôì ù'+ QHêæK£ùv ÆöpÕ6è6èÆö!ö{õD3ø:c%éSäÚÝ™ñcíWDÐ ãcíúïÃüîWc%ù'l÷¼ácíüãÍê: a&"… c% ñÕô]ùÿ {õÕô¸øcíñ™ñêæ>òýxû6èèø¸øc%Zÿ{õù!öÍê+ ¯î]ù£ìý ÚËûl÷6裭W ìÿ žúcíQ]ù¼á­DóðÙÒ¹ÀBÐ: ]ùêæ¾/cíÍê%ûÿì4pÕÆöžD*ýËûÆö!öÆö}È”Säqà: ©úØÍêùøÚÝl÷—c%DâµþäòqüÍêøÕôèaî ¸ø£˼áóðv :—ý­ øã: ÞAî={õúïß xûìêæxûéŠóúïêQ£c%&"'-éìqàúÆö©ú: äòÿcíØÊ{õÚxûø3cíBЭ: Sä¯îv Dc%!öpÕ¼á{õc%c%èìóð ÆöÚÙÒ"¾óð5&"]ùýìH­pÕ:¾/êæSäãñ™ñ¾/v ¦pÕ™ñ¦ñ0ô  Ð ãÚ=ÛúúïØ0ôc%ÊÕô«Í” &"ø£S—ýú%ûpÕÚ øÃüã”&"6èqàQ'- ŠóÐ KÐ ÿéHWl÷cí ù'0ô!öýèÕô"¾óðÛ6è”c%ì46èÚÝ­ý£*¼ýãÚÚã]ùÃüÚŸåa ]ùc%êæêæêæQì4îWD£Ëãú3D—ËØú6èK3ÿa óð£êæúïß þóð£Q£ÚÝÐ *BÐÍê¼á3Dgv üñÚÝ™ñcí”™ñÃüé6èìÿ&"Ÿå]ù… pÕ£:3èpÕãP¾/ æÅ0ô… èÙÒãl÷c%¾/pÕ 0ô¼ý0ôD&"ÃüýìúxûHìBÐK­ÚÝÍêýZÿ]ùú'-D30ô©úóðpÕ6èqà¼ýýèDú¼áêæQ: : ¯îÛv ù'BПåµþÃüÕô¹ÀOÃø¼ýQbþKèÃü¼ýþ3ʈKµþl÷qüéؼáø: ”3]ùÐ 6è«ÍS™ñcíîBÐ: c%ÊËûèHÛcíã'-v è¯îãîÊóðãâøZÿxûèQ Õô­… Sãl÷!ö'-qüÍêÃü ZÿBÐÊ: ÊÊü—¦ËûÆöØü+ : µþQýSäóðDýcí¸øZÿ&"Æöqà>ò3ú3¼ýc%úSäé!ö¾/3£žK6èl÷ÚÝØSäÐ =ì]ù]ù&"µþU2ZÿÚãiýSýæÅpÕ: &"&"ãì=cíSäS䏸øcíl÷QaµþŸå: ê¯îqàú3 Êÿ¼á… ŸåÛHþKÍêSäcíxûv : ¦0ô£”£%ûèQêŸåSäóð0ô濐ӿµþÍêøÊìqà&"*ãì!öøcíêæè3ù'D¦­'-… Ëû™ñùãpÕÚSä —SüµþD… ýcíÚcíèc% qàì¯îÚÝä¯ÚÝ: c%¾/ÚBÐÍêÊc%… a­bþpÕcía0ô¯îìÊ­ú+ l÷éqà¼áÕôóðéÂ ß v øž>òî: qü££>òýÛú%û6èƒ7'-óðÿZÿ: l÷ÚÝÚ: ø3Õô]ùŠóZÿÐ + D ìã… žü{õqü >òÕô6èµþ&"øøqü¼ý=îʾ/aZÿ6è"¾«Í0ôl÷W”Ú ­µþèÚÃüD3c% ŸåËBÐ%ûøÛ%û3]ùéBÐÆö­ÿgèâ{õ{õù&"ÊK¯îl÷Sã6èóðâ{õ©ú”¾/qàÚô¸6èÊ&"… Û£ Ú¸øÛ£a£Šó¯îcíµþ ÆöcíZÿèýÆö: ÊKpÕBÐÐ géã>ò!öèèc%­K¼á6èÿcíì]ùU2ù'Ëûóðã]ùQ0ôQv cíÚøa¾/c%úäòŸåéãbþ ]ù6è>ò%ûù' 0ôbþ0ô0ôD£”ÆöŸåúïc%D]ù¼ýÚÝŸåÚW &"¼ýZÿcíBÐpÕD££ÚÝØ KúïÊv *”ÿSäÕôéÊ:%ûÕô¹ÀiýgŸåÚÝ{õø]ùH{õ+ g: äò]ù >ò5âùal÷>òŸåÚqà!öÿù'QËûŠóúïýc%ø3QKŸåDìãK: Šóóðñbþl÷­ÿß DDÐ c%Û{õüè£Íêqà%ûã0ô]ùcíóðÕôóðc%&"K—]ùÕôHqüÕôúï”ÊÊ>òŠóêæÚݦWagSî¼áÚãSß Úݫ͈”ê¦QU2ù'Ø"¾ž¦ù'úqàcíH¼ý}ÈÚÝ*a!öúïÚè ¦ŠóqüW6èqüKc%0ô"¾'-øpÕ6èñøScí+ Ð 6èóð{õ{õ3&"Wžc% ÚÝÚ>òÊ}ÈÚݵþÿÊQ* >òÕôDèèýøWÍê¸øpÕÍêHqàcíÊ: é0ô0ôl÷ù'Šócíl÷'-”ÙÒäòƒ7U2xû: ¼áúøHéÚÝSä£{õ6è*êææÅÙÒ{õQ¸øÚÝø¼ýî'-øù'ÛgúËŠó£ØpÕãD¦Úîýc%¼áúï53ècížØÂ l÷­ÿÊþ iý0ôÙÒ0ôaDü¼ý: ÆöcíŸål÷DµþóðâD¾/ú]ù£0ôž{õù'ÛÚÝãÃü¼áäòHcíÐ Â £c%'-!öv c%BÐ]ù*… êav ì]ùxûBÐËÚ0ôWc%óðú&"l÷ÍêÆöÊÊÊc% HD>òØŸå>ò­&"¯îæÅÚÝW… BÐBÐÍêc%=üD qüÙÒ¯îG?£¯î—]ù”ãìSääò]ù¦Šó{õ™ñÊqüqà­­:  £W¸ø6è™ñ!ö0ôDv WpÕéèc%l÷äòóðãËû£©úüqüÆöìcí¾/ÞAù'¸øñ]ùl÷Ÿå: xûcíqà]ù¦èv Zÿ= 3¼áúïãc%£¼ý c%ˆñ c%WŸå«ÍBÐÛQã+ žÐ ü—ø5™ñ«Í3ì4Ð K6è{õËûîQqàÚcíÍêúï«Í«Í0ô+ c%5bþaHãþ£c%ÆöÛ¦µþ¯î}ÈQ=ß ¸øÕôiý+ óðBÐÚÆöÞA3¸ø èc%cí}ÈpÕù'­”6èêæÊl÷Úä¯ÚÛ'-­ÃüËûú6èµþbþîDËûúïâ¯îxû:úÐ úc%ýØ}ÈÊ'-… cícíc%aùéÐ Sß ]ùÛè{õ6èÚݯî!öäòc%­ƒ7cíqà¼áqàaì4£%û£6èScí©úSäv —ãžù'øÕôÙÒã>òþ{õŠóýaîóðÐ ÃüãDcív ý+ K¯î6èQS%ûÆöcíÛBÐìâøè¼ýÆöø™ñô¸qà £+ '-¸øH3”xû}ÈÚݦúcíã]ù*øqàqüØñÊ… =0ô: &">ò6è Û{õÚDƒ7QcíÊß ”Ú˸ø3—3c%G?: ]ù!öÐ Û¹ÀZ ì¾/îŠóÚÝ&"D¼áù'c%SŸåÍêµþ¸ø: ¯îìù êæêæqü&"ÕôcíbþQ âýbþ£DØÚSäãÆö]ù… 3Ú—QøîBÐÚÝcíøøäò{õl÷Ú: µþÚaS: óðîqüiýSŸåv pÕ}ÈZÿ:3ü qüv v qàÃü¾/øÊæÅ6èbþ5%û¯îù'6èØqàøD¯îqàÊù' cíäò c%žêæcíÊc%Û3­v âqàÚÝ£3gÚcíÚ¯îÐ aøóðÚ+ 3QØŠóã©úéŠóDc%øùøÐ  l÷Q!öSäcí6ècíiýDBÐ"¾ãZÿîãQ5ÍêW: óðKù'-ŠóOÃÚÝc%U2!ö{õøø üêæcí™ñBÐOÃóðËûøpÕ}ÈpÕý ø­G?cíÆöÕôG?ƒ7ƒ7ß ÚÙÒ«Íù©úóðpÕÚ: Wéƒ7 ¸øpÕÆö… ê0ô: *{õ™ñžÆö©ú ß øÞAÊqàÚêæ¯îÐ ]ùSäKú c%6èÚÙÒ+ &"ÆöH¯îËêæc%ÞA&">òqüÊ: Ëcíäò&"øŠó¶ªÚqü¾/=Šóß £Ð ]ùèZÿ>òŸå¦úï]ùÆöÐ ÊcíÙÒæÅ%ûÞA™ñBÐì­ÚݣРcíóð¦ùÃüÍêQ0ôËû6è: G?D… ˆóð!öqà}È&"géØqà'-”£Sc%™ñÚÝ6è”ù'>òìÃü£ùÍêµþ: øqàþÐ &" : g&"ìêæ¼áâ”&"ÊýD]ù6è0ôÆöè3ÿËúï ú6èÍêg >ògQ%ûÐ Ð ù'ý… cíØüêæ«Í¯îÐ ÿÆöÐ c%gìbþú HÿÚÙÒøc%êæBÐ6èÊcíÚÆöŠóèù'ʯîúïäò¦ùŸåŸåäò¯îW]ù: >òµþWU2U2… 0ôxûZÿééøcí0ô¼áÚÝ3 øSäÕô&"ù'&"=éµþÃüg+ ãcíKl÷Íê… èÐ Ð éêæøcíññž: : úìQ=úv 裩úê™ñ>òÊqü6èúc%Íê«Í6è… c%ñ3Ê6èqàŸåbþbþSä+ =v cí¼áÚݸø  *Ð ­xû¯îŸå£­iýcíŠó6èäò{õqàÆö3>òécíÙÒDcí¦v ú£žøøqüü—úïKóð6èSäQ Æö0ô ™ñã0ôØqà: øÞAÐ KDv £ñ0ô î Û6èŠó5 ÛŸå0ôìÛ—]ùK£&"ú+ QÆö{õËû ­Q6èì6è]ùaýÕô0ôóð c%£úWãØ&" G:Säô¸øZÿQpÕpÕcíH£Ð &":ãË"¾«Íù'Q£H5èÚ¹ÀQì4Qì}È3¾/™ñÚÆöDU2£Ú¹À6ècí]ùØHù'ù'ô¸qàìc%QD'-­Zÿ£äòÚÝ]ùÚ{õÆöÆö ÆöÛcíQ]ùùêcí: :øž«Íqà±<µþcí¼áÚÝãZÿþß ¯îc%øÛèa HóðãÕôì3aÛÙÒZÿl÷ã µþøQظøß v %û3é«ÍSä*&"Ð ýBÐúqàøù'Dóð{õýBЗqàaý5¸øÍê­ÿß Íêc%&"Dý6èqàOÃS䏸­èÿãìÆöÚÝW0ô'-ÆöµþŸå+ : ÙÒì¼ýÊÚÝJUé"¾"¾Ÿå]ùþ: 0ôÊîcí™ñaÞAiý¯î­c%+ ¯î3£ÛcíìBÐýH=iýé>òqü=Û­ øîÚ0ôÐ aDù'DDØ]¶Qc%Qv ÿ ýÙÒóðc%U2&"cíØcícíÊüÛ©ú!öÆöÆöæÅ%ûù'è]ù¯î6è3DD£ÆöÛÐ ¼ýÆöù'ÍêØé¯î¸øÆöøcíØcíbþÆöcíù' ËûqàÚÝóðl÷ß óðìÛß =µþHSä{õ: ÕôîŠóHúïÚÝ>ò*±<6è}È&"¾/üÆöìaqücí6èèÍêiýˆcícíÚÝù'ß Ÿå¸ø”¾/6èãìÞAc%žÕôpÕ5ˆv c%øËû™ñ¦”0ôqü”ÿWcí¸ø”0ô¯î + ÊqüŸåÊ:'-èóð%ûÚݵþ!ö¯îæÅÚüZÿøD«ÍÍê¾/U2ÚÝ6è Gƒ7QŸåøß ”g™ñäòÙÒ}ÈcíøD6ècíæÅ>òZÿüø3úïóðýø¾/WD"¾qà¾/Q{õ6è¸øQ&"ÙÒ¦ ”Ø­ÿ0ôìÚß Q: BÐÚÝW *øBÐãQù'­¹À"¾v KHÚÝÊ: ˆóðDÞA%û]ù SäSä¼áÐ 6è™ñcí&"ƒ7ÊÚÝÚ­'-Ëû«Í:Ð Ëû: qà0ôÛˆ6èÚË'-6èã: **ZÿÚÝÕô*gBÐqàcíKZÿØè ý¼áæÅîø'-øÚBÐ ±< WÚDìqàèù'óðØì£]ùÙÒc%OÃOþ/U2*úØÞAŸåpÕÊÚÝ"¾pÕc%:ãêæ©úÞAbþ¶ªOÃ5£IóðÙÒQ£IJUËêæãóðbþ"¾æÅù¦_PÚcí&"óð¶ªcíø&"0ô&"¾/Ÿåô¸­ÿÐ ÆöWøÛ]¶æÅHß Ódì4Sä«Íqà£I'-ô¸]¶xZäòæÅñËûG?£Úl÷pÕ!ö%û]ù: îÚù'£I!öÚÝ¯î… ÞAxûBЙñJUqàpÕËûêæ:ãqàÕôg]ùÚÚ{õg ƒ7£aiýééô¸pÕ©újc%H Ÿåóð6èé¦&"Ð cí¼áýúc%%ûÚÝŸå{õØOÃQ3qü«Íù'WÚú*Qcíì­úÐ : žKqü¯îpÕãÍê*… ÚÝBÐüãÊù'U2G?'-Ãüä¯BÐDù'â+ ÙÒcíÚÝbþÊù': ØÐ ¯î!öúïHø£ãD*èÙÒÚì4¾/Æöµþúïù'ãã0ôˆ]ù5øì«ÍÃüÊæÅ¼áÆöSäÚÐ Ð *a!öSäêæóðc%Êcí™ñ6èÐ ýúïcíŠócíËû£èÚß Ê¸øg&": óðBÐc픊óî]ùBÐé: Ð êæø¾/D¯îêæýù': 0ôDl÷¸øêæ0ô”é™ñ3'-qà"¾: c%U2H©ú%ûÚ aU2£™ñúïÚ­ÿ"¾¼á”Ê Gù'ÙÒÚÝZÿ'-óð¯îQÊù*cíøô¸"¾5W6ècí­&"ʸøãS©úˆ!ö + éSä óðSä Ê—êæýìQóðŠóv D=Øã+ : «Ígc%Ð pÕ6èxû&"aþÚŸåc%36èãÚݱòÐ ­c%"¾ˆ¥þƒ7gqüÚ&"qà¼áêÊc%™ñpÕÚÝîù'Ê£qàÚÝžZÿµþc%èýäòØ£ù'a6èæÅqàc%èìBо/6èËÚÝèì40ô!ö­ì4ã&"*ù䝿ţ£ID¯î¶ªOïî!ög]ù'-'-óðcíŸåèD*c%:%ûÐ gÚÝ«Ící:cíÚDŸåãÚÝZÿù'ÚÚêÆöaéD6èêæa3DØ"¾Zÿ6èµþ Ê6è¼ý¸øˆÆö©úÿ™ñýù'ù'c%Ú}Èav Q«Í}Èg3ÚÝ"¾  6èù øß >ò: ý… ŸåqàŠóýÊ­v êÊã>òóðËûâ6èÚWâî… W¯îÙÒqà£'-G?ù'éSäãÐ Êc%HHpÕ¹ÀÙÒˆ ÞA{õêæêæ”… … *:c%Ø}È]ù0ôÊQ3«ÍOéúäòÃü”U2W: Ú¼á+ cíèè0ôÊiýé¼áóð0ôµþDÊî]ùêææÅ«Í]ùiýÆö5ì4c%ø"¾úï5Kóðêæø&"ø©úêæxûóðÚÝÐ ¦: ™ñ0ôÕô¸ø6èÆö¹ÀŸå3c%c%ñÙÒpÕ]ùD¸øüù' WHSäcíD{õcí¼ý¯îÃüÐ l÷¼ý>òÊãÚãüÊv  3>òÕôÚÝÚgc%v &"óðpÕpÕÚ*P3ù{õÚÝËÍêý¦_ì4]ù"¾êËûÆöµþ0ô 6èÐ ü]ùc%ìpÕqàc%:øµþæÅpÕÚ£Ð Ê êæÙÒ6è:c%… c%6èô¸"¾c%&"îcíã0ô6èãóðÐ üÚ0ô'-Û&"ÆöÚÝêæ0ô>òÐ *úïæÅŸåÊ ÍêH%ûÐ Æöqà­ÿ: ØÚÝ36èBÐc%øØOÃã¾/aÞA]ù춪OÃÚ'-c%G?Ú«Íô¸+ Zÿù'èc%P¾/ù'Øcí”ÙÒpÕʃ7g£ÆöÐ ©ú6è©úQ£I&"ý¯îpÕ¶ª"¾óð ¾/c%¹ÀØý â¯îâG?ìc%ÊìcíÚô¸Šóù'ý6è¾/&"óðBÐcí*ƒ7ÚÝæÅ*Ð £ÚBÐ: U2BÐØOÃl÷'-'-øv 3¯îˆ¥êæv 0ô… â±<Ú¸øäò¹ÀOÃ]ù:øcící¾/èêæ­ÿ0ôãÚü±<±òcíêæèc%ãÚèËû]ùZÿ3DQæÅÚÆöãv c%”ÛWBÐqàSä ù'+ : pÕæÅl÷ 5¯îDQqàBÐâóð¼á6èâ ñã g&"KxûËûc%cí¶ªBÐã&"¦_¾/Ú­ÿl÷æÅ{õ]ùU2&"êæ¶ªpÕ¾/±<'-¸øÍêƒ7äòÚÝÚÊ5cípÕé óðU2BÐBо/c%ÊÞAé6è*ÞA'-èÚBÐ6è«ÍÚv c%óðÆöÚ£ÊÊâxûãWÞA¯î¶ªžJU&"è6èã6è­££l÷¸ø¾/%û"¾¶ª6èŠó6è¼ýa«ÍG?Ú™ñWÆöBÐU2'-cíêæ6èô¸ã: ƒ7«ÍŸå"¾Ê­¾/c%bþxûÚ؈c%D*¼áä¯Zÿ:µþƒ7+ 0ô¯î6èéDýÊU2Úÿ•«Íù'aÚìÆöì43 ì4 GÕô«ÍBРʼýc%&"£æÅô¸üÛW¾/ÞAÍêÙÒQøÃüæÅ GxZÆöæÅÙÒ¹Àcí3ù'&"pÕbþ”ÚØ&"U2+ ËBÐcíè:ýØÕôÆö­êcíÊã¸ø¼ýÚiý>òãqüþ¾/0ôËûúóðžÊ"¾D ã¼áÙÒ¾/£IâØ­ÿ Õô=ì¦SU2Qqàcí{õ¹ÀæÅl÷'-ù' "¾ñÆöac%c%£:Qô¸"¾iý ß üQc%Ë]¶W: ÙÒ6èè¾/JUPqàä¯"¾ýù'H¹Àj+ v êÚÝþ”­ÿÐ Ê>ò¯îµþ: ù'é}È}ÈøÐ c%qàqà GU2&"Sä"¾*¾/cíÃül÷qàc%ø ]¶ÞAÚøÞA*HÚÝÿ•ô¸ÙÒÆö¾/ù'0ô: až™ñÚ«Íß iýÞAjcíé0ôŸå¶ª¶ªƒ7c%æÅBÐH¾/£Iø¯îŸå¼áãBÐŠó¸ø¾/:æÅ}ÈÊŸåOÃô¸c%Pù'DqàØêæ"¾ÚÝúï‹yÞA¾/¶ªãÚ&"]ùéjc%ãØBÐéÚ©ú¾/c%qà&"óðÊ!ö«Í:*£ŠóËSä ý”­BÐcí"¾>òƒ7¾/6èDÚì ÞA:c%ÚæÅ—Ð xû… v :ØÙÒ¶ªì!ö—qàBÐ6è6èêæ'-c%¾/%ûHóðc%c%xûæÅQ*ÆöêææÅ'-3Häò]ùcíOÃÿ•%ûÊ… ¯îã]ùÊ&"äòúqüc%ø±òøiýúäòø¾/¾/>ò”g%û­Ëû&"è¹À}ÈÿìBÐóð¯îHxûc%DãÊÍê"¾ŸåQl÷: ì4óðµþÕô*ŸåŠóxZ0ô]¶¶ªl÷ì4¹ÀÛ*úã"¾"¾c%c%]ùBÐ:S+ Ð G]¶pÕ{õ¾/ÍêÊaì4ÿãééBÐ}Èúž:cíµþ©ú W£qü!öG?ù'øcíìã™ñpÕcíPc% BÐ]¶øxZZÿ]¶0ô'-*}ȼá*c%WBÐÚ>ò3Qø éBйÀH¼ý¾/*Kcí}È… 0ô0ôc%ËÚÝ&"ˆqàù]ùé¦Ð øc%Ú¼ý¯îŸå{õ0ôü]ùŸå>òì4!öÚÝBÐ!öqüËW: 3Zÿqà6è£%ûKÐ «Íƒ76è¾/£Iì4Ú]¶ô¸v µþæÅÐ ù'H}ÈpÕÍê±òŸåüÿ G3ÙÒ{õù'ÕôäòDøô¸%ûÐ v «ÍŸåÊ*ù'ããgè=­:þÚÝ"¾Íê¯î¯îW­5c%}Èqà¾/ù': ¹ÀãøxZ+ "¾ÙÒøÂ £>òKŸåcíiý=Ð ¸øÊˆúï+ ÕôÚÍê6è­ÿ¼ý6è¼ý£¯î5c%c%6è¹Àcíc%žéD>òqüŠóìúg… ÚÝÚ £øý­ÿÊÚqà'-DHÐ : êæ0ô0ôã]ùU23Æö6èÙÒ5žÍêÕô¾/&"óðóðìù3ýú * óðê&"&"cí¼áÐ  Ð óðüÃüµþêæìäòQ Ú6èÃü a… üc%3Úêæ¼ýcí!ö¯îQ&": él÷éóðKñè&"+ —5Zÿäò”µþ¼á6èý=Ëû¼áóðl÷ØpÕa*v Ëû%û¸ø6è ì4î]ùÍêã­ÿêcíÚÚÝWèg£Šó{õc%Ð cíÙÒÃü{õ¦êæƒ7c%{õæÅÚ]ù£ì Dc%äò>ò¯îS>ò¼ýqüâ¸øøø%ûêæ©ú”v ß ¯îñè3î¯îÚÝÕôŠóã£&"a£Zÿbþ¸øøý=«Íø 5DBЫÍß øHŠóì: £QSäSäã6ècí ¾/'-óð«Í6èøéÆö¯îc%U2Ú¹ÀÚ­úqàîD: cíêæøÐ ÛQ>òÚBÐÕôù'c%QÚÝpÕqàDù'Ê'-:ÊBÐæÅéêèŸåÚcíÿH£cí{õ5c%*ÊŠóÕô+ 0ôéÆöËû  øqüËûüÊîÐ 0ôxûÚÝäò&": ùW¼ý]ù¼á>ò!öa… … ¼ýúï óð: : ù'%ûÕôú¸ø]ùD%û£ РîÕôæÅ!öQþcíÚÝÚÝ”: èg”¸ø¼áŠóèŠóxûv … 0ôqàþl÷: ÙÒŠó c%Æöcíì{õäòÚ+ c%ÙÒÙÒŸåbþ¦¸øÃü¾/Kèè£ãl÷qüQ6èSäqüÐ ã0ôÕôÃüýìcí… ¾/ì%û3*cíž6èúø*øîËûcíÍêxû­¯îqàSäqàÚÆö3DÐ xûU2ì4ùÐ Û]ùQ­ÿ™ñþQ: ]ù]ùêæ]ù]ùéæÅ>òc%3]ùè]ùµþ{õ]ùù'D+ úqàìþÕôØxûc%­6èì5ÊãÚÝ]ùøÚãBÐ]¶qà¾/Ÿåqü5™ñSäÙÒøø: Ð H… ÚÝpÕøÊpÕ5&"Õô©úxûùg+ ŸåŸå%û£cí%ûHúï6èŸåîc%*c%¼ýµþŸå™ñQŸå>òß ¼ý'-c%>òSä55¯îäò£¯î6èÚÝSc%D3W­ÿˆaìKÕôc%=aèéô¸BÐóðc%è—l÷ÆöžâWóð &"Û ù']ùqàcíØêæ=™ñ¸ø¦úD3!öé¼ý£¾/aýì­ÿŸå­ÚÝÙҟ壣… ¯îâ3cíÍê0ôéqà6ècí£™ñøac%cíèÕôÊêÚ%ûÕôÚpÕBÐÚøƒ7ì©úHúï6èŸåQc%*6èégaê¸øÂ £IbþÙÒ ÊÆöã6è6è: Æöêæ"¾pÕì4¾/*cíÞASä¾/úïêæÛêæÍêÛüãúïÛ&"ÊŠóµþSŸå{õ¯î£c%Ð Øã¾/QBÐcí¾/'-óðË©úU2ÊÚìè{õQîG?a«Íô¸SäZÿcíiý: ”HS0ôú¯î… óð©úÍê­øÐ cí¼ýãê{õÛ: ø ÛèBÐpÕãÐ g0ôìäò ­: SùQî¯îÚ&"¾/c%W£¼áŠóZÿêægSäcí… ñäòè>òéDÊc%ù']ùcí]ù ÆöËóðúø¼ýµþìè%ûqàèQK&"qü"¾Wø¾/gêæ©ú'-ß ã>òúî«Í]¶Úè±<ù'0ô ”6èì=”ÞA&"pտŸ: qà˾/ÆöW¯î6è ©ú©úÕôücíØOãJUƒ7¼á«ÍØ3øÍê6è%û¾/!öô¸æÅ¦£IiýØž:]ùËìß *£Ÿåú: Íêóðc%­]ùqüŸå¯î:  qücíBÐWøúïcíZÿDì4óðSä3øøqüŸåýøþ¯îW¾/£Säã©ú: ø6èìãèøâ: cí­ÿcíQv : ¯î™ñýqàÊÊ6è0ôc%µþúïÙÒ>òG?*c%éÆöl÷3üBÐ 0ôøŸåìl÷ËûqàêæQ­30ô: qüŸåÚÝóðiý%ûv ÿgŸåé>òqàãH*©ú ù'QËûqàì0ôÛ&"¾/¸ø¼ýÚ!ö¯îqàãbþ­cíê™ñQ3™ñêæ”èèʱòÕôÚÝl÷QHWÍêqà£S+ Dqü¼ýÐ úSäv v gÊ]ù øcící ]ùþß äòBÐ6èqà6è—a&" ùø>òbþøÊQBÐÍêS¦µþŠóäòÆöl÷”óðÚÝ¯î¸ø6èèG?­Ð WQcíqà6èùS¼ýäòBПåbþÃüž0ô… ÊDÆöî6è3v : Úiý*QQgÊqüéqàqü+ cíãêæúøxûóðÆöø*ü£DaDƒ7ß øÕôã«Íìž¼áÚqà&"éÃü—ýÕôì**v Šó™ñêæ}ÈÛì4ù'*0ôãóðÆö™ñxûÆöŠócí¦ØÚÝ £Æö£g £3qüÕô]ù0ôóðÙÒÚÝóðêæqàcíñc%D{õ!öâ ÿ0ô¼ýì4Ûl÷Æö6èÆö6èqàãîQ]ù]ùÊD*óð53ù'HìãêæQÊcíÚÝ0ô—H¦úïž”ü: ʾ/ ¦äòÍê¸ø*Ð Q©úQúóðÍêcí6è5c%'-c%>òÚÝìWZÿ3¯îv : ÛW6èÕô: ¼ý3… *SäÚÝêæ£iýúÍêg­ÿâÚˆ3: óðêæbþ0ôÚBÐÆöc%U2ZÿÙÒpÕ D—£øQ0ôÚcí%ûÆöËûÊ£ÚÝÚÝv ß : {õ™ñcí”ü £3: 0ôóð Q!ö6è6è ø… qàã«Íäòg*­ÿHäòÍê£ù'Êß µþÆö¼ý>ò0ôµþ'-aø¼áýQ£Zÿêècíqàú+ äòécíËûÐ ZÿxûQ5&"ÊDc%­âêæ]ù«Íêæ>ò]ùêæäòÚÝù>ò­þaQ&" øéãéŸå{õc%D¸øpÕÚ… Ûl÷Zÿ: ]ù¼ýQøêcíË0ôýþ3%ûÊH l÷ÚÝpÕ%ûÍê3c%£¼áqà{õþcíÛ£ø­]ù+ ý … ÛqàÙÒÿ ]ùØHqàcíH±<±òÕôl÷cíããË]ùý­ù'©ú™ñóðG?U2ù'H¯î0ôúïZÿéÚpÕl÷ì¹ÀØDÞA3ß ŸåÍêac%ì4ù': Zÿ6è«Í«Íqà3ÕôÙÒãWcíøèZÿBÐãã¼ý+ 3=]ù]ùóðcíéÊc% ©úcíÿã]ùâù'úêæŸå=Ð '-*žØ£: l÷Ú+ c%Ð ˹Àóða”6èŸå±<Íêúø: Õôžß øÆöbþ¾/­¸øØìóðWcíÃü]ùß bþiý0ôD+ ]ùv + £ÙÒì­:c%Íê]ùØý%ûžÆö =]ù0ô6èŸåãËûÊ3 Ð Ð c%¼áþ ­Šó¹ÀBÐ: éÚÝ6èÛÍêéQ”+ øèîg™ñ©úÛèúïéÚú6è6èäòÃü: úØÍêÊKì6è: a*¾/a0ô¦H©ú6èl÷¼ýÆöÐ a 0ôÚBÐ}Èãv ì4ù'3¯îÚØl÷&"¾/3ˆÊÕô0ô£&"=æÅSäø âÛý舩ú£qü©ú!öñß Q”îQqüÍê¯îqü!ö0ôêæaÐ qàqàì4ÕôËûv ZÿÙÒÚcí¯î%ûcípÕóðDKÛ¯îÐ ù'DÐ cí™ñÊÐ  ÚÝ0ô¦BÐpÕÚÝl÷cížHù'”¼ýß ¯îêæl÷]ùv !ö¼ýéÆö3: 0ôŸåìgøØêg­ÿqàêæcíÐ ËûÍêè*&"ÍêŸå¼ýÊSäéÃüHØìKQÆö”c%ù'Q3¸ø­ÿ Ð 6è—Säþg=: ]ù6ècíbþ{õ+ ß ¯îÚîDÊ{õÆöÛøø: WqüŠóøqàã©úgøÃüÊèýqàËBÐäòÛ3î{õß êgqüHÐ ß ù]ùqüDQúïããqà¸ø6è: xû0ôÙÒcíù'c%qüãêæñWc% ÚÝSä—èc%ÚpÕ%ûÍêØZÿÊc%ß äòDÊ%û%ûÚÝqà¯îÚ=H­ã: Q!öËûxû '-¾/:WéBÐ bþÚêæµþ¾/xûÛß 3êæÚD : ™ñ¯î5øóðé6èDÞA'-c%ʦäòcícíBÐÚ{õÚÝ™ñÚÝÆöHÊÆö=Ð DÊî™ñúïêæêæZÿ£ÚÚpÕãc%aèÊHØÆöcíÆö{õ: ”aÆö¼ý… ¸øpÕ6èËqà%ûc% : c%£Ú0ôZÿèa¾/ épÕ]ùÐ úß *”"¾ˆ¥Ú:ùgÕôÍêŸå!öúïÛ'-6èêæãóð0ô: úïîDøÊ: óð¸øúýø”ã6è6è6è+ £ÆöìÐ ø¯î¦£—aÐ ©ú6èÕô&"ù'&"Ÿåì0ô: 6èêæ¸ø: ìÚ¯îÃü¼ýcíÚ™ña£Ic%ìäò¸øÊ!ö¼ý… :3"¾¶ªÍê:ù'úOÙñý>òcí¦&"pÕÚã0ôˆ—Êèqàcíc% G&"c%üÚ«ÍBЩúµþËpÕù îøèµþäòñqü{õD:èÿ0ôa3ìØBÐ>òQ'-ƒ7: 6èÚÝBПåžøýZÿÊv ÊÊîËØø*: ¯îcíD¾/¦6èD©ú¹ÀqàýKÚŸåcí=¾/:c% gŸåدî c%Qiýv Ø}È«Ící¸øÚß : c%ÆöQÍê{õqüú3Æöêæ¼áBÐpÕÚÝóðaÞADß ÚÝcíøcíêæ+ *ñ¼áØ­cí©úÆö*W¯îß '-øxû¸øóð©úÕôÙÒ¼áÚÝW Sé¦3: ZÿÛÕôU2c%WãŸåúñˆÛãÚ6èÆö3a¾/ì4'-ˆæÅØD G'-bþãqàÚÚcíù'!öŸåãc%U2ø¯îqüÃüŠóéúèé"¾úïv ü]ù0ôxû36è¼ý'-¾/&"¯îÙÒìl÷ýl÷¼áqàÚÝÙÒÙÒ¯î3¾/: Ð *c%+ 0ôD* éì6èêæÍêÚBÐÚŠóWèDý:v ÚÝ &"c%î¯î%ûéÍêiý©ú¼áÚÝžù'øäòÚÝùÊ”Šó]ùîž: cíêæÍêýÐ èqüµþ=úl÷Ø!öÊU2Ûµþ  HÿÍêã¯î&"îHv ­]ùÚOÃSäcíÊè ­êcíWv güìÛóðúHS­ÿêWâcí"¾0ô ¾/¸øéˆì4Êäò0ôäò]ùBÐBÐãÐ &" Úóðèß ØÚÐ '-c%ýiý£ñ Ð ÙÒ}ÈæÅ¼á: ¾/*: cíß D6è0ô þ¸øêæÚqü!ö{õêèH=0ô:  óð… —H… ãÙÒúï©ú*gù'aµþìü6èv Ê6èúïc%ýãÚÿcípÕµþ*ù'v Ð c%¾/¸ø¯îø­:: óðé”iýÚOÃË«Íýøaa©úl÷H îäò{õ v ãéì0ô¸ø{õýSäø{õSQSäÊ+ ãìŸåŸå ¸øäòØãóðgaqüØÚˆÞAG?Æöúï©ú+ ŠóÚÝÍê”D6è>òéSäÍê: :¯îóðqà>ò+ U2QóðZÿãcí­£ìŠó0ôØ%ûÊ3ý: c%ß {õÚݵþH{õ'-â=øì>ò{õ¯îã£c%g—iý]ù£æÅSäù'acíqüèc%*5©úúÊê©ú¼ý¼áŸå{õ”æÅBÐêæ£ 3¯î™ñì4'-pÕÆö ±<±<¯î«ÍØc%£: ž3éÙÒ«Íqà3ÚؼýÐ ¦Sä5c%ì"¾qüJUì4qücíìc%¼á"¾ÙÒ¾/ù'ÿ&"cíì ËûúïÚîÊ5 Ê&": ô¸¹ÀZÿ'- ¾/Säxûé¯îZÿ{õ>òc%ÊäòÛBÐBÐîG?£IK¹Àé¾/øâúïD3xûãËûµþc%øî¾/*£cíBÐ¯î… é«ÍcíÚÝiý”ý Gÿ¶ª«ÍµþÓdjÛÚ]ù*Õô}È0ôKÆöÐ Íê&"ÃüÚÙÒüxûéc%QQˆcíØqà0ô{õP£IŠóËpÕãʾ/%ûBмáqàa{õØcíÐ Íê&"JUÞAóðãžèÐ ÆöÕôD3K èäò™ñóðÚæÅQ GËÙÒã3 ]ù: ÞAƒ7]ùìa¾/ýÚ0ô0ôQÐ îSäþ  ¦þ0ô­ÿv 6èøäòêæŸå—ù'… ÕôøÚ¼á£è… ž&"ãØñÕô*D]¶Ë6èU2±<©úúï+ ¾/ÆöæÅqà &"øäòQ!ö>òÍêø0ôã0ôv £BÐÚݵþWDì4è¼áBÐl÷ì4ñ™ñ3øùæÅä¯ '-cícíÆöD&"éØ*:ÊÙÒBÐ]ùc% ÿ6è0ôéÃüqàZÿl÷ýРʾ/øÕô… D3­¯îÚÝÙÒqà0ô6èÆöÍê èWì%û©úgÊ+ ¾/ÞAÚì0ôééÆö 0ôÆö¯îŸå¯îÐ : v ù'øêæ"¾ÚÝ{õcíêÆöâÐ Qêæÿ H]ùKWØÐ *3}È"¾6è èÚÝÍê… ÞA>òéW0ô0ôìóðêæÚ©ú­{õÚ£¯îÙÒÆöÊù'óðc%U2©úØ%ûù'ƒ7Ð 3cíÙÒWxû«ÍÚÝæÅã{õpÕD­>ò>òøè ÞA±<êÐ ì%û*ß cíqàÚDqàú: ¸øŠóqàqàø: ùÙÒc% Gý0ôg¦¾/ƒ7Ð ÚÍêcíQø>òqàØ6è0ô!öQHSäèýŸåüúýc%©úæÅcíƒ7”Kiý«ÍËcí*µþ>òbþÚÚÚý]ùóð3ÆöÚH]ùbþ]ù6è Ð úï}ÈÐ ­ K*¾/úïKþÚqüêæHã¹À!öÞA™ñ]¶cíÐ &"ø£øÐ ýÚl÷U2ý>ò6èÛc%… ¸ø èÛ]ùZÿcíŸåØžüaƒ7%û¼ápÕÍêŠóc%c%3'-óðé}Èxû¾/Ð Ëûc%ì4 GpÕ¶ª"¾Ð ÙÒ}ÈãÊ: %ûWU2JUÚˆU2øê]ù]¶c%*éÿ•䯾/U2óð]ùU2øÙÒô¸"¾ý¦äòÞA&"Ð «ÍËêæÆö£'-Ûc%ù'«ÍŸåcí3}ȶªˆ:¾/>òý6èô¸"¾”­'-ý=ý™ñŠóþc%Ð bþQ¾/Ð : >òpÕÚQÍêÚ>ò{õø¾/5v îÚ݈£¼áŠó]ùù'ÛÊ©ú>òâ6è&"”HÍêBÐÆöýWèÐ ¾/WÆöÍê!ö6èé6èqàÐ ­Ð éqà­U2a=%û6èß £ã6è+ £Ð : pÕóðìîc%6èŠóóð¯î]ùW0ôÆöÊéŸå]ùcíóðóð{õc%ù'ÆöêæØ6è¸ø5… {õýWêæÙÒóð  qü: + Ð èúïøÆö]ù5{õ6è>òÚæÅBÐè£IêQ £¼ý­ÿèø=ÚÝ6èxûl÷cíSäÆöøS… ­… Õô”èß ¾/”ÚÚãóðQ—cíâƒ7aÛ+ 3£Êÿ{õ£ÚÝñ¦óð]ù=ÿ+ ÙÒBÐcíW£Ãüâù'35]ù£Døø… =Øcí+ + ŠóÚqü0ô¯îcíø: ™ñÕôìÚâW]ùÛc%0ôWý0ôÙÒʾ/Ûù'”pÕc%ÚÚqàÚÝ ê¶ªìøŠó0ô c%¾/äòüWŠó+ ÙÒù'óðU2 ¼ý6èQU2… gBÐØ6èúïô¸ÙÒ5ù' ÚÝéU2ƒ7¯îþ¼ýc%ìpÕ¸øPøÐ Sä%ûWúïóðËûÐ + ø6è£ù'îË6è«Í>òýß c%èøÐ ©úØ… éè¼ýè¼áãËcíìîêæ­c%6èpÕîDÐ BÐÆöÛ]ùãÍê¾/ÊŸåpÕîav ­ÿBмáŠóÊéêæ¯îÐ g¹ÀÚÝ'-Q5%û*v ú]ù¯îc%c%éæÅËýqàSäì4&"êæŸåø¯îóð”ß pÕ—ÊÞAaqà0ôQÃüµþËûêæ]ùØîÃü… &"èÆö™ñSäéDžù'ø6èãß v W: ]ù©ú* ]ùµþa3ÚÝÕôÆöØã c%ù'BÐËû>ò{õè¸ø!ö©úùè&"Ð žþ¦cí{õþ5óð™ñ­ÿËûH©ú¸ø: ¯îý: ]ùa3ÕôqàBÐØäòWüqü{õ6èé+ v a*Ð cí0ôèÊÚÚÝDüÆöl÷ˆß Íê6èü&"&"ÕôØ: óðîv : v ¼ýŠóD]ù¯îÍêl÷ú6èÛÆö0ôˆ Êâý: v £Qa'-£QDé¼áúïø¸øSäæÅã33Ê©ú¦””DQî&"l÷{õxû¸øqüÚbþ%ûÆöBÐÍêù W©úè DbþWêæóðWù'gH¸øÚ¯î£0ôcíØ>òl÷ê=!öl÷KÊ £3ýéZÿg… èÚpÕì¼ýcíÆö{õ™ñýqàiý&"¾/žãéø35é6èúïóð6è3ù'ú¸øìââêDžµþý3DÆöŸåKŸål÷ýžcí”ìl÷Ð ýÿ3­qüâ&"èQâ µþ6èæÅ죣™ñýÐ £6è¯îQqüâÐ ÚÝ>ò3QúÚcíРʼýQQÕôBÐSä£ß äò¼ýÐ écí¸øµþ—ÃüÐ øg6èqàBÐ DøécíKäòÛ… ™ñÐ HÛ: HqàÍê¯î>ò©úÚÍê©ú”©úùÛD3&"DÆöìúïgøìÚ¦óðì™ñÊiýÐ Úµþ]ù&"DÊaBÐÐ DÞAc%S£KæÅËbþ%ûv Ãücí]ù*0ô: ÙÒ&"ƒ7aÚݸøÆöŸåóð«ÍBÐý*Ð óðqàêæ¾/l÷žQÊažc%%ûŸåÃüß ]ùøpÕÚÝÙÒø{õ¸øqà%ûß W0ô6èÍê0ô¸øø¾/:!ö¦ÕôúïÊî3 ¯îÍêêææÅ]¶!ö*øSŸål÷Ð ˆQÐ l÷gbþã=Æö£ÆöŠóêæ¯îî c%ÕôŸå¼ýÊäò©úÐ ÊêæóðÆö3Íêl÷0ôˆèîŠóâùÿãŸåù'èDÚìì4ƒ7óðéÚÝî­ + ]ùÛKóðÊQSä¯îžÐ H¯î¼áÚÝQÍêpÕù&"£ü: øgøé¯îiý äòl÷ZÿÐ *H¼áqàé*xûæÅÚ¼ý… bþ¯îý&"Úäò ¾/&"ÚÝ>òKÐ ÚÚÝpÕúcížÆö¦ù'¯îêæâø£øè©úxûŸå¼áÚpÕ ì: 3£gÆöýcí—5ZÿèÆö6èÃü6èžqü&"ÕôÃü¯îóð6èäòþý ]ùñÃüŠóDèZÿ: ýWÐ úbþ¼áèÞAqàOÃ6èî­žÚÝqü'-'-c%l÷pÕ]ùÐ qüBÐÚbþH+ «Íqà¾/£Ic%éÆö&"bþÚñî&" þÚÚ]ùäòZÿËÚK'-¦ %ûî¸øŸåìù'HËû¼á Ê l÷pÕÆöél÷>òì'-ÊóðêæÙÒÚD­3êÛÆöÃüSä¦c%… ØÚÝHýŸåDv >ò¼áùÊŸåD 3: qàâʵþÛÃü'-ŠóÚ—Êcíé G?èìSäÚ!öÚÝúÙÒ{õSäH¾/Q+ … Ð Íê]ùD… ]ù0ô£aDv Û… ¯îìóðóðè­ß Û]ù¼á©úé0ôQcíiýQþŠó>ò!öc%=6è{õc%©ú«Í¯îÚcíÆö­ÿv è¼ýc%0ôîZÿxû£H =Æö}È0ô&"é¼áÚac%xûÙÒã¯î£cí{õèè%ûê ]ù6èøÊK¸øÐ ¦ì¦]ùÍê£óð5¼ý ž6èËû3gú¼áZÿxûqüa56èÚÝÊc%qü¼ýÆöøD 5Ãü¼ýÐ Säß ¯îÚØãc%:™ñÚ¯îìBÐW3ø£î+ ŸåØZÿ*±<ãBÐQHæÅJUJUSä"¾SäqàSä}ÈÕô”Ÿåã¼á ŸåÐ é}ÈU2¦_ÞA"¾ÚÝ: þß gÚÝãìŠó”ß ø¾/ÚÝqàQ:Ð úï5KxûÍê]ùSäcíýqüÆö]ùãµþU2QZÿúï&"éù+ '-úÚÝ Døì4Ð ˆ¥æÅ3ùÆöËêæù'¦_&"Zÿã]ù  Û&"QÍêHýŸåOÃ}È ù'&"ÚÚ™ñqàÚÝÛÞA¾/6èóðñQøÚ”ÛS£&"ƒ7cí"¾ìýù%ûæÅŠó Sä6èÕôýBÐcía&"ì4µþæÅDÊ&"3ú!öØãñÚÝúKgýÚÝpÕ6è: xûŸåé£é&"ƒ70ô¸ø=Ð c%¾/c%Ð v qàÕôøø5ÙÒ¶ªDóð™ñü%ûóðøèè&"+ cíÊ úÚÝ™ñîøÛ3©úÚß ß c%ýcícíÆöqü«Íüéóð—­:WÍêÆöäòãØýJU'-­óðóð+ Zÿã3 ØBÐøÕôìÚ+ ”{õ¾/üH SäØì Р©úúïcíÆöcí]ù¼ýÊþ©úêæqüa6èÆö«Í6èc%QãÚÕô¾/a©ú!ö£øS™ñcíäòËÚ: ¾/: cíÐ : qà£âÊa&"”!ö”¯î"¾Øî=ß ý¯îÍêiýD&"é6èþ&"£>ò]ùcíóð£+ ÿ= gÐ óðqü¯î¦ýÐ =]ùc%£0ôøãŠó&"0ôÛ3%ûµþcíËû¾/ì˼á­ÿc%cí™ñ0ôÚÝ!ö™ñÛÐ >ò+ bþÊ*ãÐ &"c%cíØãþêæcíäòÐ {õãØ«Í'-:G?%ûúïBÐ6è¼á6èÊZÿ©úÐ ¸øß ”Zÿ]ù èýŠóÊc%gÚÝã D­ÿþ: 6èpÕÚ«Íú¼ýHxûÐ ÆöÐ £+ ú DÊè”iýcíóðKêæD©úúqüQìSäúï!öv QùÊqü{õŸåøúïêæÛ: ß : ø ¯îóð%û53KúïÕô©úKÛýŸåøèa+ ÚÝé ™ñúïqàŸåÛD6è6èˆDDgùÕô­ÿÃü”Õôì{õc% >òÐ ÆöÆö¸øŸåé&"Ð â: DÍêóðèŸåé6è]ùH¯îÿ!ö¸øbþèWé]ùß Ð ”&"ˆŠól÷*U2î6èqàcíSäúqàÚcíÆöiýÛ>òÐ Ð ac%ˆc%ø&"3ýù3¼ýÆö¯î: ËûìcíèxûË}È]ùŠó©ú0ôú0ô ” + ì Q0ôÕôùDß v Ê3]ùÕôcíù]ù6èäòÿcí: Æöl÷Ð ÿ]ùµþcí{õÆö¯îÃü!öøêÛ­­ÿÆöµþÛžSÆöý úïÍêŠó™ñcí©ú©úêæÆö0ô… ©úêæú6è]ùù­èDù'ÊKýÍêŸå ”iýHè0ôŸåóðl÷0ôÊDž™ñ¸øì6è]ùþc%&"Ð ­ÿ=ìcíèHl÷5c%3cí6è¸ø¦+ Šó™ñˆS ¸øóðìóðg]ù¦cíúï… Ëû3 + ø%ûý: … ù… ”¸ø0ô]ùøóðiýâbþ6èZÿ]ùú]ùìÍꈈ{õý¯îÐ îWŠó: ù ý%û”: qàãóðWWâQóð>òþl÷cíóðbþ: ø¸øÕô£Qqüóð¼ý>òÍê©úÊ *­&"Ëû¯îËû¸ø­ÿ3: Hl÷Säãcí: c%ýþcíÕô¼ýÐ Ð ]ùãSä>òHQÊ&"¦Ø«ÍÙÒ¸ø&"¾/ Ð  ]ùÍê6èD¦ýè ÃüSä6èäò£ZÿâZÿêñÆö¸øŠó鏸 : %ûËÕô0ôiýWl÷¼ý:  ­ÿ0ô>òý … ÍêÆöW¯îã>òúïÍê0ô¦aâ­¾/­¯îã¯îŠó—úï¼ý+ Êl÷cíãß S: : + ¯îÚÝÚÝøß ÊÊ3qüÐ {õ”ñÆöñÊgÿʦËûŠóÆöúïìc힣+ ˆBÐÚD  ””î0ôbþ: ù'¾/Wúïcí6èÚqàÐ 3Æö6èpÕÍêÚÝ{õ­&" ¼ýW3êÍê0ôl÷”ý: ¼ý]ùcícíW£xûúv v ˆcíqà—âŸå]ùè”0ô6è6èóðDóð]ùg =KžÛÕôHQDÛ¸øÍêŸåú”Q!öóð 0ôcí%ûÐ iý¼áqà3РʼýŠóÍêè… !ö]ùl÷ʃ7c%]ùŸåcíSäÍêSD¾/èqàÚ6è è: 3* 0ôØqàäò”3 ñ¯î%û¯îŸå6èKa+ ùµþD¾/D5!ö%û!ö¼ý0ô¸øv ¦qüÿ%û¼ýøµþ¦… &"ÆöqàÚÝpÕÚÆöÃüÐ … ¼ýqüÆö]ùiýQH5ø3¸ø>òK¼ýÍêcíü£6èìêæãÚÝ6èbþèî­QøÊîúgHSéŠóZÿ¦” ¸ø0ôl÷{õÐ Êa %ûŸå¼áÚÝÐ &"ù': ¼ý¯îSäæÅìÛQDø+ DÐ KýK¸øiýúïüúïâù¼áÕôîˆ0ôé… Qèbþ3øîW6èSäKˆaËûcíŸå:  Æö¼áÕôQ ý+  äòêæê&"â cíxûcíqà]ùêü{õZÿl÷øŠóóðŸåpÕÍêHß  èËûêæžèè]ùÚÝãîÊ&"+ K0ôËûBÐ]ùH©úŠóúïîÃüìÿ!öÕôHÿDÐ 3¾/Ð WH è3:  0ôÚ"¾ÙÒv QÐ žK!ö%ûãè Qß £Ê&"¯îŠó¸øøÛÃü¼ýµþ%û¯î]ù0ô]ùqüþèqüé™ñ{õWµþù{õŸål÷Æö]ùìú¸ø*U2ÞAì4qü6èÚ6èv ÚcíÚpÕËqàäòù'è6èpÕÚøÞA¾/H¦ˆŸå«Í6èc%¾/Ê6èqàÚÝØêæžÐ ž*ÞAaäòÙÒ"¾ÚÝù'a—Zÿéèù'ˆÚÝOÃô¸: :c%ø¾/¾/؈0ôÍêÚýèiýSù'¾/S%ûÍêúxûÚqàã™ñ©úŸå&"¾/ýqàü¾/c%bþÊèù'qüã¼áÚ6èóð6èã… *©úDúv ˆÊÊèqü6èóðÍêäò¼ýqü]ùýÕôc%£qücí!ö: g%ûZÿÛêæÚÝÚSäiýQŠóŸål÷DæÅ¼áa: 6èÊÐ øÆöÚD­¼ýé!ö*H6è]¶cí0ôêæQU2èpÕظø&"±<:ì4=>ò£ÍêOÃÚ: BÐæÅø­{õ©ú£ù'ù'êß 3a: óð]ùW­Õô]ù5¾/c%: ÚBÐêæSWÛ]ùúcící¼ýÕôµþ6è¸øø±<*óð6èDqüŸåÍêþèß ¯îl÷£56èÚÝÆöÊaÆöqàÿ™ñ6èÚ¯îÛ3 ¸øÕô0ôKK£Ê¼ýóðÚÝécí ÊîÐ óðcíú5£ìì{õ3ÊìãD3ùqàÚìÊScíîèDøäòÆöýˆ!öÐ £v  6ècíQaèxû”5bþäòÚÚl÷WÚ¼ý]ùµþŠóñHù'aêÚêæ]ùîD&"ì4G?&"¦ãì¯î¯î6èìêæ5 K¯îäòì¼ý¾/g]ùÊÃüSä¼ýQ&"  ­äòqàÚäòŠó¼áéÚîÛHè]ù3øé]ù£c%Ûl÷¹ÀBЯîÆöÿ]ùêæúï0ôÚÝBÐ5ʃ7]ù™ñ%û {õ+ : =µþóðÚÝÚ+ Ð óð0ôéý5D­ø ÿìcív  6èQêæ6èŠóHa©úQÊHú™ñcíµþ&"ù: ]ùDì¯îŸåý: äòS]ùÐ ¸øv Ê%û飸%û]ù6èD pÕ0ôc% îóðqà{õÆöxû™ñÿ]ùß î5: êæóðcíîÛgQ­ÿcí¼áŸåcíýc%ø]ùãÚÝÚZÿ¼á¯î3Ð —ˆ]ùHéÊ­HQÿâé6èØpÕpÕú:—SxûqàSä3âc%'-g 6èúêæþ>ò¦D5ŸåäòcícíŸåWaú¼ýøW”a=épÕÆöD=¼ýW3¸øcíl÷¯î6è]ù­ƒ76èéóð Æö6èaÊêl÷5­Íêüãxû3iýW&"ùîWÊäò0ôþ¸øcí0ôxûl÷îúW­ÿZÿ«ÍH­&"cíì{õqüKl÷Íêl÷£>òêæqàúïß ac%™ñÍê¯îbþÐ + —ÚÍêêæcíã6èì­g¸øqü ”D”>ò6èŠóè&"DW cíØØ™ñ­ÿ0ôgW¦êæcí3ù'Û¼áøD6èÚ!öv ß Õô¸ø­è>òqàDʣʭÊúSä>ò0ôgÊ&"ŸåSäcícíî… … Diý!öú™ñì%û5£=øñýQø¹ÀcíDKÆö=â6èBÐÆöÊ þøa+ þŸå0ôv ãêÆö¼ý0ô+ ]ù™ñ£ØqàŠóŸå—g%ûêæ”¾/ÊÕô{õDxû]ùHäò: ”QúÕô©úäòãÿ]ù: Ð 0ôì : ¼ý6èø&"Êèiý+ ž6èŸåQ!öúÕôÍêHc%ü¸øŸåß 5£ý¸øH{õbþZÿ5£Ð úÛý533¼ý!öþSäØHÐ {õcíqü: úïÚ%û¾/­£K”îv  gžÚ0ô0ôÚØqà¦!ö>òÕôc%­]ù6èÍêÐ ýß … Û0ôiýÊŸå¸ø¦v QüËû%ûÚ}È!öxûv c%c%a{õãÚÝOÃBÐD… ã¼ýù'ÊêæÚ¾/ýù'èÕô !ö%ûô¸6èüÊ!öÚêæ0ôÐ ã6èW!ö:c%ù'ù']ù¼áBÐ3£ÊD+ qàpÕ"¾ØéÊ qàBÐQÞAQbþ&"êæ0ô¾/”0ô336èqàiýc%úﶪ}ÈÕô'- GpÕcí BÐóðøƒ7:U2ÚÝÍê¸øæÅ}ÈæÅÚÆöècíî'-ý:ýù'ËûýpÕÚ50ôä¯6è3¼áSä0ô6èl÷­ø Zÿ0ôìˆÊDî¯îiý:óðÕôŸåÚÝ0ô{õñ:aQD]ù©úBйÀìøBЫÍ3U2l÷¸ø ù'ÊcíZÿ¼ýgc%D3SäãÆöÆö]ùäòýQúïãäòøì QžŠóÍêqàÍêäòH:¾/iýØBÐ0ôpÕ¼ý Gƒ7: óðl÷BÐÚÚÝ™ñ: ß qà¯îù¦¯îS­ýäòî¼ý… ÃüÊäòWÆö!öüêæ¯î0ô=Õô: Íêcí=Šó!ö: + cíÚÝÚcí QD¾/Æöèqüùêæ>òøÕôŸåÚù… cí¼á¯îÆöËûÆö øv ¾/*”Úqüèøÿê3+ qàêæcíóð… é… ÿÛÊù''-Ëûú]ù¼áêæ6è]ùÐ âúïéÊù' cí]ùHÆöqàØ ù'¾/£äòÆöý0ôÚÚqüß =3: ŠóWÚݼáWQêæcíèé6è5£¸øQqà«ÍÚ=Scíêæý3%ûãÆöâÃü+ £%û>òg… {õ!öù DSä™ñcív Ð ]ùDóðZÿžèèèËûÆöØÚ­ÿ 5 ]ùâî™ñ”%ûè¼ýSäBÐ QU2¾/Šó{õýÚÛQ£¦ ß îl÷{õ%û¦bþÿ™ñ™ñƒ7U2©úÚSä+ ž6è¾/Ð ãqüÿì6èqà¯îW©ú0ôã¦ß &"'-”­óðWøcíìcípÕ>ò¾/3Ú¶ªÍêÐ éÆöU2U2QBÐqàÍêäò… Ð ” Q]ùì«Í{õ c%øËûèÂ êæ¯îÍê: &"óð¯î3è!öÚ]ùÆöóðÚxû¦ýøbþW]ùgøH6è: èS¯îäò… 0ôl÷]ùQéóð… ¦âgƒ7ø!öé˼ýóðé­”ÚŸåqü­ì4Û­QpÕ¹ÀìÍê­… Æöýãóðß pÕDîaÊpÕäòÊ*ÚÿÊø ¼ý%ûÚ6èúï6è¦ÚÐ a0ôcíè£ø”Wgc%ìqàÊK˹À"¾ž6èl÷¼ýì4ÞAƒ7ø”Dcí>òS䣃7P¦æÅãBÐBÐqüŸåêæ«Íʃ7 G3]ù]¶ËÙÒ ÞA{õ'-D¼á: ž{õ£èqàóðÕôؾ/'-óðcíWQaú6èD*Ê6èS!öãøÚÝ&"üµþæÅ6èøø­Ÿå¾/&"ø£™ñ©úc%&"Ÿå*Æö]ùêæcíSä: 5ZÿËÚÐ 6èì'-a óðêæ6è3âÊ]ùÊüêæbþñúïîc%¸øÚÝ™ñ6è>òqüì¾/ êæÚBÐ!ö*c%ýS6ècíäòÿaU2ŸåBÐcí üîèbþž3Säcí]ù]ù 0ôKg U2¼áSäØîãøâæÅQø£gê0ôqà¼ýÐ £ý3žqüÙÒ0ôÐ ­:… ]ùÛxûDÚÝÚÝ£c%è: Õô Õôù0ô­ÿ£KÕô™ñg™ñêæ™ñcí¸øÕô]ù*Õô{õøù'… ÆöSäSä + êæÙÒÕô3éŠó=g£ãŸåQãìcíµþËûäò: ©úµþì]ùÕôDQ3øQý!öcípÕag6èêæþqàcíÛWè a¼ýøâaQãcíæÅqàúéa DÊ: ™ñbþ3£ß D3ãÕô: cíHóð¯îèqàã”ú”c%Zÿ]ùÛc%v Säv Ð WÊÍê6èSä gù'ú  îl÷cí£¸ø¸øúóðøèô¸«ÍÛHqàbþ””ý£Ð ÚÚ+ ÊÊÚ¸øDÚŠóäò¼á裯î™ñìóðÚÝ0ôèù'cíQQ0ôžß aîÛbþ&"Ð qàcí ÿÚÝäòpÕ¾/… pÕ£Ãül÷ÚÝ0ô3èß Ê]ù£H©úã”Da5S%ûZÿ£ÚÍêcíqàcíýQú©úqàÊ:v  üD H: QSäÊ+ £ Ÿåúúïäòþ£úïÚÝqàè5WiýÐ ¾/ úcí%û]ùa0ôîHqàÆö­ÿÿÆö]ùbþÆöù… ù: Ãü¦cíSäcíl÷+ ébþø¦qàbþ™ñÕôZÿ£Dc%c%3©úSäìØ£ £iýÚÝøc%ý6èÆö]ùß ™ñ”Q… ÃüóðÆöH¼ýcící6èÛ£üñèc%£ÿ¯î5cíî©úŠó5cíì¼ý>ò]ùc%”êæø: H>òÛ¾/Dãqà6èüß žøÐ ýÕô”ˆ­Šó£—©úãêæêãpÕ: ¾/¸øì¸ø”+ Æö­ÿHµþ¼ý6è%ûî: : úï{õ¦ óðäòÚcíìSÆöDÍêBÐDÊêŸåÊ l÷ŸåìH î”ý3cíêæcí a—ÿK— ¯îì ø3qàãêæµþêæÙңʼýúï¸ø¾/ž+ ø¼ý0ôß * 0ôéqüHcíÚ¼á: Øl÷ÕôHKø¦ù'¾/¯îcí¸ø¼ýHýù'gKD™ñØùqüHQÐ ééæÅÚÝù¾/U23«ÍÍê©úK£­Ð  äòZÿúïD]ùqü6èÐ Æö¦â¯îØã™ñ¼ýú¾/îøcí¼ýÊl÷úïžøSäÍêÚ{õ3… ËûÚÝêæ>òDþHv cí”î¦ a¯î%ûÿZÿÊÊgÍê!ö¦£=éŸå¯îã]ùW+ ZÿHÆö­ž”… 3=þ6èß c%øýýøH0ô¯îÚ¸ø”ß ¼ý”£ê>òcíQ%ûØÆöâÛac%Û£… ­ÿ¼ýãøýSäÚÚ¼áÐ Ð î™ñcí©úqà6è%ûÐ : %ûžÕôÍê=… Ð é}È6èÍêqü: ã{õˆý=Zÿ{õ£ËûÛ èHcíqàl÷%ûÃüc%¾/l÷Õôéþÿì¦Zÿã6èóðbþg{õc%D£ÆöKéÚÝcící:  ¼ýxûWÆöµþxûl÷S33+ … ù'Êé6è¼áÿù'cíÐ Â ñbþŸå¦­ÿúDýù6èWKŠóŸå0ôêæ­ÿ­ÿQ WµþK… ùóð!ö&"Ð ™ñ©úBÐÚÃüî56è¯î£Æöž£qàóð]ùD&" éBÐÐ Q裯î6è0ôZÿcí6èD&"ì4 !öÿÆöŸåÚÝc%5Úý]ù ãÙÒcí™ñ>ò0ô3ÊaóðHv v ýËûóðSä]ùQqü0ô6èŸåÿ3c%+ Íê¯îÆöcí0ô c%gK a èQ]ù©úéS¦¯îì­ÿ©ú¯îµþø+ ”ˆc%D&"¯î>òcíÕôŠó… ¯îîÚÚÝøîW£Wø©úúï3­Ð äòxûóð!öéêæ£Q” ÙÒBЩúv aù'úqàŠóãùÿžÍêêæaHÐ ”­Ê ùcí¯îóð6è㦭ì4:WcíéÆöcíóðcíúï%ûÚÛ¯îËؼáDŸå&"c%­&"Qý]ùú­ÿ™ñ&"0ôSä}È©úQ­Ëû{õ¾/DÍê«Íã%ûéêæ­¾/'-Säqüqü3úï¾/SäêæúÆö iýSal÷øß ¼ýÙÒäòŸå¼ýŠóß ücíQ¸øì鏸žƒ7ø: 0ôŸå ÛÆöúïÊ:™ñŠóÆö¯îêæpÕ}ÈÚ£53aúïQØ©úÊqüÛÐ 0ôÚ}ȼýÊc%ÚÚø£: HØpÕKZÿc%î+ ÆöHÙÒqà G?c%ÚÝÐ ú씸øpÕóðŸå¾/ÓdcíËc%]ùؼáQÛóðß W­ì4—ãÚÝD… ù¯î*ù'óðSä0ô0ôù¯î ß U2G?cí}ÈSäÊÆöéýýÐ l÷cí¯îc%]ùêæ%û:D¸ø{õpÕ0ôŸåæÅÚÝl÷ý&"ù'¾/£ãúïãSäÚóðþ”èc%HcíÍêìv â­ÿ¸øØc%c%{õ>òøÚBÐóðÍêì6èc%Æö: *ù': ¼áØî0ôô¸éQ aÃü]ùÃü¦úïóðžc%ì4]ù¼á: ÆöpÕÚ+ ñ ÍêÐ ­* ìÙÒ”K5ÆögHʼýcíÍê­  ù'ÊêìpÕiýŠóÚÚÝHêæž:c%ÍêÍêZÿÊ™ñ£0ôãiýÊDDÊúïÆöúïÙÒŠó+ Sä6èúïø”óðóð3ã—¯î¾/DÐ —Ð ùpÕéŸå¼áÚÝ%ûéÐ Æö0ô'-žpÕ>òèv g&"ÆöÆöcíÆöBÐãäòQËûqüÕôDøc%DQ©úì£%û¯îÆöú+ Šó¼áúï&"+ ÆöS: ¼ýcíKù£gÐ ¯îÊU2øØ”Ê: ž£qü™ñ ýËû«Í6èWâ>ò¸øñl÷>ò”äòã¼ýø£¼ýÐ {õ¸ø !öcíÊÐ KÆö¼ý %ûÚ]ù¸ø6èÚÝ>ò+ g£ìl÷g*î: %ûZÿ©ú6èDcíÐ ùéãúïv äòBÐ6èQ3Êè¯îqà+ v {õñ&"&"6èpÕÆö¼áÚÝÕôZÿ¼ý0ôþñóð0ô… … + QÊ+ ”£Sä"¾Ú!ö0ô : WÊóð£&" Dqü™ñ«ÍQal÷0ôù'äòˆD3 l÷ÚÝcíéØ3c%+ £%û” U2ÙÒ¶ªÚl÷óðqà&"*xûØ&"Wì4c%: ŸåÛ¹Àqà£Úqà+ êæ¹ÀØc%Õô«Ící'-Diý+ Êãˈ¾/­ÿÚÐ 6è6è0ôKH 6èÆöS¼áiýêæÚÝäò£:ýì4HÚ… ÚÝqàWžc%ù'¯îÍê¸ø”&"cíBÐiýc%Æö"¾«Íäò©úÐ Ð øê&"£èc%'-Ëûúï£ãÚZÿc%úïãóð Ð … : ŸåêæýÊQ+ 6èÚHiýqü 0ô6èÕô]ùÛúÆö&":£ã"¾Ø—=¼ýqü:£I¾/ؼáÚqü™ñ6è£: ŸåãÚØbþD”ø&"ZÿqüúïÍêØÚÝ"¾óð¾/U2 Zÿ™ñ{õ… qàpÕv aKÚøbþäòqà¼ýbþ©úì]ùa3]ùK: 6èÊZÿúïµþ™ñýÊ£”óðH: + ­5Úî]ùcípÕ&"øî éäò­ýýv 3v ã6è]ùÚŠó­ÿ%ûW+ ß ]ùÚl÷S£ÊÐ øýÚ{õv =ŠóxûÐ Zÿñ¼ý¼áãqà¯î0ôqüì¦â¸øcí£QøQß … ÚìÕô¼ý: þž0ôÚÝ¯î¸øc%xûž£úïÚÕô¦+ c%… ñ”Ëû3ú¯îêægî%ûñ=SäÙÒ{õ{õ!öþ­ 5:  ¸øÆöQ bþ: óðŸå{õv ß : ÚÆöQèúÍê6è6è=£­£Zÿâ: Qiýì£{õ%ûKøDÊ: bþ!öØBÐÆö Ê K: v ý>òäòùý¼ýiý ꞸøüÆö¸øÕôâ—óð¼ýß ™ñÚÆöžêæ¸ø v ZÿSîcíSä>òÐ W0ôúÕô¯îý¦cí6è]ù ¼ýSÆöS¼ýŠó ¦ÛŠóv ú—ˆ aè™ñèäòpÕØžQ]ùãŸåý]ùÿžÊÊ+ ]ù¦—Ð ýÆöý3Õôñúï­Êž!öËû ùZÿHÊèK¸øWúqüîD­ÿøÆö]ùZÿŠóH:  þ+ ÊÊcí{õóðµþ¼áêæ0ôD%ûW=iýcíqàcíÆö£ß cía3Ð ø v ©ú6èØã©úü6ècíH: Íê6ècí&"Ð … ÍêˆÐ iý0ôÆöH5Ú«ÍØØD¾/*Ð Ãüiý¼áqà£ã+ c%èã©ú¦­éÚÝÂ ß &"l÷èü—Úqü¯î6èøþqàäòqü Ð  0ôʃ7” ¯îü  è0ôñ—úÿËqàéc%: iý: ì]ù6èqü &"è£: Æö iý3=­ÿËû]ù ]ùžìÚãŸå¼ýèäòS… gg¦Â Õôêæß ýøÆö]ù{õدî¼á¯îùß ß øWØÍêÿäòýD¾/c%SäØñÛÐ {õÚ£øÍêéäòóðÍêcí]ù¾/3v QêææÅcíäò&"¾/D56èBÐQøÚÝþQDìì£%û… ß ìSä]ùÛqü£¸øè ø£pÕËß ÚÝ: äòãÚݾ/c%©ú¼ý&"Ð Ê: "¾ô¸cí: SäÚÝúï£3: þ5cíýÊÆöqü¦Ð  Ú飔gcí6èãc%ß BÐ: *ØÚÍêK&"&"ØŠóêæ™ñý¼ý…  6è{õÿD ©ú3ÙÒãÍêÊ6èêæÐ øˆQÐ æÅã5 èñì>òˆ 3 ì0ôÕô­K+ éêæ  qàŸåù'c%ñÐ ¯îiýa*óðêiýc%: úïÕô©úcíŠóø{õcí=aß î%û0ôÐ éß ÚØÊDQK™ñøg>ò¯î]ùbþ0ô]ùÍê>òóðØý6èc%… cí£%ûŠóÐ  ¯îìD­£qàæÅô¸6èî&"3éýcíã ˆ%ûËû>ò™ñv 5… '-: ¯îããcí ­*ÊŸåÚÝ}ȼý”Qéüâø: ¼áýîŸå6èéqüc% GÆöÍêŸå —6èñ”HþÕô РQ©úñãÚÝúï Dv v Ëû5Êü…  bþ=óðì+ Ú«ÍéU2¾/ ËÐ 6èÐ U2&"äòìqüêæÚÝl÷ ÊÊ­éOÃÚÝñHl÷úÊÆöÕô ÊóðSäÍêÍê£&">ò>òì WóðÚÝScíÛ—êæSäé&"]ùØÚcíóð6èWù'&"cípÕÆö¾/îè: £Ûä¯üÛù'¯îÚpÕ¸øúïØîì4c%  Kùì3&"¸øl÷qàqüD… þéxûúþÛèc%Q«ÍþÚù—é]ù ø!öc%ž>òÛD&"ÞA¾/ã}ÈbþæÅ!ö¯îøúï%ûúïcíÙÒ%ûù ÚÝÙÒÛüv c%'-3è¹ÀÚv Qß Šó%ûóðÚBÐæÅcíÐ èäòèù&"µþ]¶™ñ… ù'ãËûù'ÆöŠó}ÈqàøD­øâ… D: êæêæ¼ýc%é£v ÕôÚÝcící=Ð c%úSäóðøÞA£ZÿHƒ7ÿ6èîóð!ö6èþa G¾/ÚpÕÚÝc%Ð ä¯cíHP'-0ô0ô6è6èG?ÿÕôø¼áñ­ÿÚÝc%Êóð¦üñ6è6èÍê6è¸ø'-™ñøˆBÐ"¾­c%K!öc%qàBÐ6èì%û &"ù'¾/Æö}ÈBÐãØé«Í GèÆöˆ¥Ø&"ãSäaì4ÞAŸåÙÒBÐ6èÍ꣔¾/JUÚ3¯îÆöÚcíñ G ê¼áBÐ"¾"¾ã6èD£c%JU¾/cí«Í:¾/¼ý… ʾ/G?"¾ä¯ÍêBÐiýZÿêæù'ø îHQv : î¼ýW3Ê: Úݯî}È6èËû¯îÐ ©úHÊD*äò¦Â ÚÝ H™ñ—ØóðWñÙÒqà>ò™ñHÛWøúc%'-*ß qàËËcí!öÊ:¸øìÚ6è5DØW­ÿúïpÕìÐ ±<¾/6èW óðpÕ6èóðêæ}È*'-¯îépÕÃü¼á + U2G?¾/øØBÐpÕ]ù3WÃüqàúß Ê5+ ]ùcíµþ!öþ c%*îZÿÚËcíÊÐ Ÿåqüù'¾/%ûñù¸ø ÿã: µþŸåqà6è: ù'Dêæè'- {õ!öl÷!öêæ{õ¼ý¼ý¯î™ñÚݯîQúÆö]ùøþ]ùŠóbþìŸåv ¾/H¼ál÷]ùWcíÚÝ©úù'è¯îŸåqà+ ÛSä!öiýÐ ÚÝl÷­ÿ… ÚÚÝWÊ ÛÊóðgÛŸå"¾æÅñc%3äòcíü £: v žžËûH©ú6è¸øHcíŠóúïW!ö0ôKÊ+ ã&"Êèéóð:3ÙÒêæìóðþSäÿýQ¸øþ”èv 5ÿBЫÍÿ: 0ôµþ: ­0ôŸåùúc%6è33óð¯îÆöÊc%ãŸåè­Ëû¼áüÐ 3úï즩úËûD£ˆv ¼áŸåý&"a0ôÚÝãô¸Sä—WâÍêžøHl÷cíã]ù]ù{õù'ì4iý¸ø0ô5”úï3qà6èéÚóðÍêl÷gêæÍêøc% HZÿ'-­ Kcíúù' "¾¼áÍê'-c%ã0ôH bþËûéU2¾/¦Úøµþ5ŠóÚÝÐ Â £î3Ûêægˆ¯îóð­3£6èÚÚžýø”: =… ÕôŸåìqüÃüËûiý6è{õ: : èv  g!ö©úýøˆ"¾OÃìâŠóµþñSä¯îc%âúÚÚìÐ c%øDú ãÚì HËû{õêcíÚãcíQÊÊäòqü­­!öSäÚÝc% ÛìDø… ìóðÍê¼áóðD ]ùcícíÐ ££î ÊÍê¯î]ùùÐ %û ø©úKK¼ýÆö6èBÐóðS&"c%K6èéÐ aQ0ôóðxûù'qücícíW%ûcípÕ¯î: øÊì"¾ô¸ñU2Êaé6èÍê5ñ6è!öQD{õŸåî&"ÃüqàBÐ6è g”3úï¼ápÕ«ÍÚÝ”S™ñÊù'øŠógÊ qü]ùø­!öBÐÙÒþWiýêæ3î0ô«Íxûãù*ƒ7­ÿé¼áÿ]ùúʾ/¾/óðcí]ùDcíÙÒäòÐ ÚÚÝD*a6è㣭ÿêæ=¾/øpÕSä+ W WÆö ¾/”Ÿå¯î£¼ýqàÚÝqüQ0ôcí£Ê©úÍê¯îìø ]ùDaøóðÚÝgH%ûÛãpÕãŸåãpÕZÿøSäÚÝ6èÕô: l÷­Zÿ™ñgÊøúæÅqà©úéÕôH­ÿÃüêæ¼áäòäòˆèÿ{õDù'­ 0ôZÿ0ôËûþ¸øý*&"óðãpÕcí0ôˆù'ÞAøìÍêìËéD&"ʼýÍêøê: Æö­¾/0ôúï!öø0ôŠóÚBÐÆöl÷ŸåcíDê=SäâU2:ÊþŠó+ ¼ýìv gH”cípÕé6è£è Ëû™ñ0ôcíéÚݾ/:­: 0ôâãOÃÿÐ ”ÕôqàŠóúï¸øø¯î6èóðÆöqüè!ö0ôã™ñß ¸øBÐcíHcí6è¸øÊù'a+ è]ùBÐÚSäùD Wóð£aaù'cíÚÝ5c%è>òß QÊúïóðpÕóð+ =5î é0ôúÐ ¦ÛÆöñ*&"c%WµþcíØqàbþ'-'-¾/qüqà6èpÕcí: ãÚžHŸåÚì+ ¾/¯î!öU2c%aóðËÙÒÆöc%c%SäŠó3 qàOÃæÅ… U2&"ø}ÈØ >òpÕ«ÍÍê&"c%ìŸå&" G:%û6èúï!öý0ô¯î+ øH6èpÕóðaHKcí%ûÃüÐ 0ô6èa¯î]ùŠó+ ©ú—l÷gDÐ ™ñóða3 SäpÕÆö ­0ôv qàéß 6èÕô+ a­bþØcíc%D¯îµþýcí!öø¾/¾/*ì"¾BЃ73Íê>ò©úcíqàc%¾/c%3: ãìcíÆö©úÛc%U2øäò¯îÆö%ûÙÒô¸ãúïc%óðBÐqü:èãpÕBÐ!öU2*:qü6èBÐ6èãÙÒÚ6èH¼ý«ÍÚýù'Õôóðø G¾/+ Ð aµþcíìóð0ôéêæ™ñ6èQ G56èKÊÆöBо/ÙÒÚÝ%û'-ì4ÕôŸåG?¼ýØ>òøøBйÀøc%¾/qüìÕôî¼áóðQʾ/{õÚÝóð3: DËûìZÿÚ݃7ì4ÊBÐô¸ô¸0ôÊ!ö*¾/*KØ0ôa]ùÙÒêæ¹Àl÷øøýøä¯Ÿå&"U2£BÐÚù'£Iô¸æÅK&"K-›¹À¾/c%]ùOÃËcí¾/&"âÊÐ góð¶ªØú¦£cíqàÛ&"úóð&"*&"W>òø¾/ìÚÝpÕ*ì4cíÚدîQ¯îµþ£ƒ7v Qñqàäò¯îBÐÚ: D'-cí+ ”c%=0ôÚ6èÛ%ûQ¾/&"ZÿËpÕø Õôøù'æÅ¶ªÚÝ­c%SŸåSäc%¾/Û"¾Šóù':îcíÞA:l÷ô¸BЭÿÊóðSä: v ŠóBÐcíc%ø%ûSä­ÆöqàØäòŠó6èBÐ{õ'-±òÆö¦ý!ö D]ù«Íô¸qàSäqàîZÿ*c% =Ûß %ûè­¸ø]ùóðÚô¸BЯîúïv SãéÐ : ac%Ê3>òä¯]¶©úa3&"D&"DQÚݹÀóðÃüø"¾Øžøø]ùDbþø3xûŠóúïSÆöZÿ>òè: 6èÚÝ—­3Ð ac%ÊÛÆöúïØìpÕÕô¾/:gãqàóð5øèÊô¸Z úÞAøOÃl÷Ê—âµþ*a: ÆöÐ ì©ú ¯îØcíHêæÙÒé èß óð33­ÿ6è±<ø¯îËô¸æÅãÆö¼ýËû: Ê]ù£3úï—: v äòcíÚݵþ… ãÚìDc%Ãü6èøƒ7&"êæäòß ÿ©úÚÝ0ôÆöD©úóð… SäpÕ: ÞAU2v êæ©úc%QúBÐpÕÐ ¾/ÊÊ Ê¼ýqüÚÝpÕêæSäSäDù'*øê¼ýÊ]ùäòøQóðpÕéøÐ ß êæøø!ö èWÕô>òâSä¹ÀBЭÞAããSäiýìpÕ ±<¾/¾/DúïcíÚSäcíWÕôËûìWé¹ÀqàìÛ '-Ð Úäòýbþ!öêZÿ5Ê5ÚÝ!öØÙÒ6èé­Qv  äòcíÚ6èƒ7ˆýÃüØô¸ØŸål÷Ûc%øQ —ÍêBÐÕôÞA¦_&": ÃücíüÚÝÚÝD¾/ BÐÚžqü]ù &"&"SÚß Q&"£ŸåîQpÕqàµþ:&"ÆöpÕqàüÚ¼á]ùG?P­Ëqà£bþ%ûÚ«Í%ûÊ… qüóðQ*­Ð Ð … c%QæÅ}ÈSäâÐ }ÈZ ãc%ÆöÛËû0ô&"óðØž”6èÙÒêæèÊ0ôBÐc툾/¾/*gWKWøW ã}ȶªË­ÿÐ 0ôêc%î£!öúïÐ ù'c%0ô6è0ô&":+ %ûîêæpÕpÕäò ­: bþù'ƒ73ÚÝqàKažì… qàqà ÞADêæcí!ö©úZÿ6èv &"Æöbþ£W6èêæqà]ùÊc%]ùêKêæ6èŸå6èbþ¾/Ð øÍêBÐêæÕô!ö©ú¸øl÷£]ùqàDQQøã䝨pÕcíì43Q6èÚcí&"'-!öDÕôW­ìÚ0ô­ÿqà«Íþc%'-Ð l÷H&"âãBÐcíè'-£ÍêHcí"¾Úúï'-P:¾/ù']ùËã¼ýqàQ{õÿÐ Ê&"gHBÐÚ: Ð ãè:&"QØäòß ÚýJUc%«Í¶ªÚÿ™ñËû: ¾/'-ù'ì¯îŠóiýÚÝÚîäò: &"£øÙÒ}ÈŠóù'êæpÕ£'- "¾BЩúapÕÛaU2c%: 6èD*¦cíËBÐ0ôîÚqüc%ÞAãËêæ+ éìQZÿÚa&"­{õDß OùÀ6èKc%*c%&"6èþýKSäÚBÐ6èâ3iýÐ äòÙÒ¯î… JU£Iì4 Gß Øqàqà}È0ô¸øóðã¼áø£I… Úúï]ù¼ý¾/g*¾/¾/úï"¾ÕôÛÚBÐêæß ¼ýÚü£I¦_¾/+ ÙÒèóðæÅ¶ªpÕø£ÚÝqàa&"D5 WøÆöØÚÝ6è—&"*Qé!ö0ô«ÍËŠóžêæô¸óðDø… úïqà6èDì4aQʾ/'-]ùcíiý iýÚØOÃä¯ÚãéÊc%Ê:ÞA:ÊÊqà«Íéc%èqàêæý!öé"¾ß ™ñ: KÕô&"¾/c%H™ñê… =­ÿSÙÒpÕ]¶cíÊ:±<3: *U26èOÃØý£ÚÝÐ ¾/¯î : £ãÚÆöø¾/Ê{õËcí c%ž]ù6èiýùóðóðqü5+ a£cíBÐÕôù''-KÍê}ÈBÐæÅ"¾l÷'-±òÛ¼ýDÛ{õ¯îc%3óðÍêÃüêÊ­&"cíé¯îØ«Íã3­G? G:QÙÒìiýúÍêéSäøÊc%øØBÐBÐÚÝWcí0ôgƒ7±< øQaqà¼áBÐÚæÅ{õZÿ!öDÙÒ:*ù'ØæÅ¹À3ÚÝ6èé­ù'6èêæpÕPèÐ ì>òQqඪô¸ÞAÊpÕÚÝ3ƒ7ß v 6èƒ7ÿ6èæÅ]ù{õÙÒpÕóðcí0ôaúï6è¼á¦_]t Gc%0ôøß è£úï ]ù*}ÈZ ¶ªØËÙÒ>ò£ÞAèù':¦_ƒ7 G¾/cíZ ä¯6èúÛ«ÍpÕc%é¼ý*ì4¾/qüDÙÒèËcíøêcí¾/ÞAƒ7qà¹À¹À"¾{õU2¦_JU'-ô¸"¾"¾qàÍêcí¾/cí G]t*ß ]¶æÅÙÒ¶ªÍêŠó'-5Êø>ò øqü>òc%¾/éŸåxûêæù'K¹Àì6è¾/]ùSäô¸: è: ù: &" óðˆ¥úïÐ µþýúïc%DÊÚØÚÝHäòÚ: ý¹À}ÈG?c%­xûJUÍêìcíl÷ØpÕcí… v ]ùÚÝgÐ *G?:c%éä¯]¶Ð c%>òý¯î£IaÚÝã¯î: qàcí: '-c%qàBÐÚÐ Êc%: + Êcíµþ ÊìæÅ}Èóð3óð3èøãŸå ÞASäè¾/c%>òˆ¥ä¯ä¯¯îæÅ¯î*Ód£IÊ«Í}È ãÙÒÚ”aU2'-U2D bþž"¾«ÍOÃÚ¼áÚÝÊù':£&"JUc%pÕÿ•«Í c%ÚÝcíÆöøÐ pÕ¼ý”QˆÚÝpÕʃ7&"Ûv 3ù'ˆpÕäò%ûñ}ÈØÕôýøÊß %û c%v úýQÆöBÐqà>òc%ÊÊ… £ì6èD: %û¸øÛß  qàÍêÆöSäæÅÚÝ—*gZÿù¾/øc%]ùSäêæÚóðÚqàúïac%¼ýgcíË}ȼá«ÍSäø'-¾/Ð gc%ø¼ýËûgù'ÚݹÀÍê+ éŠóËûÕô+ cíã6èZÿŠó£ÛÊ£v aʯîŸåSäøÍêÆöìù'ÚúÊQ££Ð }Èóð]ù ø¦ìãpÕŠó: ʾ/¾/6ècíiýl÷ óðþc%ÊQ0ôž0ô¼ýcíOÃúï&"øýÚcíc%äò!ö¾/ÍêéÆöOÃBÐäò­ G: Ÿå0ôBÐSäÍêÆöøù'¾/¾/¾/3ËûqàZ ¶ªÙÒc%­DÛÆöéÚÝ鏸ì4&"v cí3]ù6è6èóðQ: cíÚqàWÊHž&" ø­0ô… K}ÈË”ƒ7Ø"¾ËKiýxûŠóÆöì4: ¯îc%3U23ŸåŸåSä g{õóð%û=BÐqàý&"¼ýHÐ ÛÊS­žÚÝqàžDè˼áÛ QÆö¾/ú]ùcíÛÊÕô¼ý¼ýqüß ¼ýqà«Í0ôcíß c%¦_G?”SØÚ}ÈpÕpÕìc%¾/¦0ô&"­ýWñêæZÿv ¼á: ìêææÅ"¾6è—ÙÒ+ ¼ý3Ê£qàÆög&"… éøµþ«Íxû>òS£6è: iýxûúïýg'-]ùÕôêæ¼ýSä: £øqàêæÍê­6è… v Ð ¯îÙÒD'-c%+ ]ù”3ÕôÚ¸øÚÃüŠó©ú­iý¼áã'- ”qüóðÚ]ù6èÐ Zÿ«Í"¾Ú±<:ù'Æöl÷ÞA3žÚéHˆiý'-D: îBÐæÅ0ôäòcí©ú%û: 6èHWWê©úÚËû¾/c%3SäŸå0ôùpÕäòúÍê™ñ: ŠóèQBÐW­î úãÕôˆ D: ÚÝËô¸îH6èéØŸå¼ý”G?ÞAc%: ì4£BÐØÍê3* æÅ{õËû¯î6è3&"v ãß aÆö6è¯îâè©úÚ}Èß &"±òØBÐóðxû0ô­ÿøQè6èóðÐ ƒ7¾/: aß ù"¾ô¸]ùg%ûqàBÐîc%HØùþaù'ÊcípÕ"¾ãµþ&"U2£c%!öÙÒBÐÚ­ÿËûˆ!öZÿ3iýÍê6è þäòøDÆö: ±<±<ã}ÈË"¾Úø­Ê… ­ÿÐ DW c%þ¼á0ô¸øéBÐô¸ìQÞAP±<+ qüÃüÐ  pÕBÐcí3Qù'¾/cíæÅ¯îƒ7ù'Ð *۫ͶªæÅãWù'c%U2&"c%ß ]ùãÆöQøÛŠóŸå6èæÅOÃpÕùÞAc%::*ËÚݫ͵þQµþ%û¯îã6ècíBÐ}ÈÙÒcíc%c%3aQµþêæŠóù'¾/óðÚÝÚ¶ªBÐý£™ñbþc%¾/Êêâqà6èBУøñqüWù'¯îØcícíúãóð¾/'-­xûúïäò: Ëûãaù'ã"¾BÐøQøù'ÞAøÚæÅÕô¾/ì43ýËûýúøù'£6èÆö™ñýqà"¾ìäò&"£IG?c%ÚÝŸå ¾/{õÆö¹Àˆ¥ËÍê©ú'- G G'-qüµþ>òŸåBÐ˯îµþß £ý: &"Ð Ú¶ª"¾µþù'D:D­Ð ÆöpÕóðžþÆöÚÝ!öÊúïÚãê*ù'v Ð qüiýaúÍêBÐÙÒùøQa3úïqàiý{õÍêã¸ø>òÊúïBÐÙÒqü­c%èÐ : îãÚŸåîc%… äò+ Døqà ¾/ì4ì}ÈŸå… &"Šócí D þBÐél÷W: £øc%ÆöýSZÿD]ùc%… 6è¯îŸå>ò6èpÕøêæŠó5Šóêæ¯î*U2]ùÆöÊÊ0ôã0ô¾/D]ùcí¶ª¼á]¶ä¯î¾/ÞAcí¾/iýÆöD'-ù'㈥ì: : ØÆö GOÃ%ûØ:¼áÚÝÊc%: * bþµþÚ]ùÚbþBÐ= ãcíxûø£þcíø* &"c%ÆöþÚØBÐÚg3'-êæKc%>òÚ>òÆöpÕ죾/:ÞAcíBÐxû ¸øxûW¾/Ð Oöª"¾ø£IQ… 3DŸå Ê>ò¸øBЊóÕôˆ¥¯î*ØãŸåv £Iù'*JUQSä6èÚ{õØcí}È!öêæÐ ƒ7&"]ùèêãÚ&"6èæÅ]¶Ð G?KBÐOÃ%û ÊÞA::aqà}Ȉ¥ô¸ÚÝbþ]ùc%µþé>ò{õ3cíì¼ác%µþc%JU£IËû"¾BÐ!ö{õOÃäò… qüóðaµþÐ 5øl÷6èÚÝæÅ©úaPJUJUøüøú!öBÐxû”6è]¶%ûøG?ÞAô¸6è­Æö}È}ÈD¾/xZc%JU&"򾁿… Õô]¶BÐÞAÊ'-ä¯BÐbþæÅùBÐèj¾/cíÕôc%£Ic%«ÍêæÞAQ䯈¥]¶&"£«ÍÚKù'c%ýµþñpÕDýa¾/Ãüäò:{õæÅBÐÚ'-ÚpÕêD˼á!ö{õ¸ø¼áŸåU2ƒ7¼áãqà:¦_qà"¾"¾*JU0ô¶ª©ú¾/ì45ÙÒG?c%cí¶ª«Í¦øËéxZÞAcíô¸ž*¦æÅúï±<¾/ÚÝô¸ß ß £xûËû¾/¾/6èÆöêæ¾/ÞA v é]ùQqàæÅ¼ýpÕúÊ—'- ÚÝpÕWÐ c%Ð qà+ : U2ì4Ha¼ýËqàæÅQýóð«ÍBÐÐ '-c%©úaZÿ¯îú Ð >ò0ôBÐÚŠóýêæ6èúèß žcíù'ø… pÕŸåcíÚÝS]ùÐ Q>ò¸øU2%û«ÍØ"¾ãæÅÚµþ±<:îW0ô'- G¾/ÕôŠó6è«Íúïý™ñ0ô¼á¯î… þãqàcí&"è”33Ð Ëûì4ÊZÿ”ÚÍê¹Àô¸¯î¾/:£I­þ£KìqàØSä6èúï: c%ì4pտţv ÛÆöÊ£I£IµþéBÐÚݼýqüqüaø{õã0ô™ñpÕóð*ß £c%:ÊÚËBÐùÍêŸåqàqüžøâ ú]ùŸåHý: 6èýc%5qàÙÒ>òóðÊŠó¹ÀڣРøé ÊDýø£3é0ô6èø%ûæÅÚP ÙÒBÐ]ùc%ø©úÆöc%Ê !öÕôøÊxû>òø¼áß D: úúÍêKÊÐ èÿ¯îqüHÊ­ÿ%û¦îÊÊÛ6èãËûl÷l÷Wè… þ6èøc%iýÚpÕÍêý­ÿÐ c%èÿ>ò{õÆöé¼áéêæé¯îÆöøc%giýl÷= ý0ôŠóúïqüS¼ýøacíêæ>ò{õSäBЊóÕôŠó0ôqà]ù3ø Ê%û!öÚØQ*ø: Ð êæ¼áãÚŸå0ôÛqüì4:è]ùéÐ g]ùì4èعÀìµþäò]ù”3&"Æöc%… l÷]ù™ñ”êæéZÿQDW!ö3DiýŸåËû­ÿgDc%0ôóðcíŠóQýcíÆöß … DŠóµþ&"3!ö6èQ… ™ñãØ—v &"Õô¯î™ñ… ÚŸåc%ý: Êc%: úï6è!ö¯îêæì{õã6èl÷v ”: DèW]ù0ôpÕô¸ØQÆöqüˆ: xû6èl÷ Ê6èìèù'äòÙÒSäùù'ÍêžÊ0ôÙÒ"¾æÅ¸øg{õac%U2%û«Íl÷*¾/ãxûè ŸåqàÊù'{õpÕ6è3ì4D¼á}ÈpÕúï3Ð ùÐ ©úµþWüÃü¦v =]ùìùè!öQD]ùã6è ÊÍêÆö6è¯îqàúaWÆöâqàãìøÞA*Û¯î]ùWg6èÙÒ¼ýD¼ý©ú¼ýžÊùpÕÚÐ ù'Dl÷ü!öÆöÍêÚÝþc%c%3cíÃüÐ : ¼áBмá*ß HèZÿ¼á"¾ã­ÿ&"­W{õø:  6èÕôücí¯î3”5SÛ¯î6èŸåÿÐ Ð ß Zÿ¸øŸåbþè=îDƒ7ù'Zÿqàóð¯îé!öÆö… Wù]ùl÷Qc%ñúÐ Û¯îžÍêÕô!ö¯î *¾/Ê™ñâóðqàŸåêæäò¦ÊâÕôµþÆöqü6è¼áÆöøG?+ 3 êý6è5!öêæóð«Íóðc%Zÿl÷]ù5äò˯îQèµþ©ú3”cíøý úïãâg­ÿéý±òøÚøù'!öBмážø>òË%û:ÞA'-óðóðÍê}ȫ͸øaaDqàØ6è6èBÐ: c%c%îÚqà­ÿv ž>òø¾/g6è]ùìéÚØ{õù'c%¼á"¾Ëv èè­: ÚpÕÕô+ ê GÊÚæÅúïÍêì¸øxû:¾/l÷ :Dî¹ÀæÅäò c%Da cí{õß : !öÛÞAƒ7qüSäé¯îÚÝ>òøÊqà™ñù'Ð óðß 0ôâ&"v ÆöÚô¸BÐBЫÍU2::'-c%5BÐBÐØÐ ¾/øDDBÐ"¾ËÚãÍê—QU2ø'-øDÿ¯îqàD: Q3êæì 0ôBÐBЗ¾/Æö¯îüµþQäòcíäòpÕ”&"… êæQÍêÐ ìù'ÞAîêæ&"qà: úô¸Sä¼áqàø… Døê úpÕÆö&"ÊÐ ìµþc%ù'¹ÀÚãÙÒ&"G?ÊøZÿ>òýù'DóðÙÒÚø¼ý¯î0ôQDØØóðù'a… ­ÞAc%+ ÚBÐÚÝÚÝÚÝBÐÚÝìDg—Sä+ c%ƒ7&"Ê—Ð cíéã¼áÚóð5ì£þ­ù'ì4øÆöpÕÚÝéæÅ}Èc%&"cíqàñÐ qüøµþêæDU2:ù'î¼á6è}ÈæÅcí©ú£SäŠóZÿ¸øqüÚÝú%ûDù'žÐ HqàÚÝÕôv ¼áì±<&"ãô¸0ôøÃüêæÊ+ cípÕøì4£QaÊ£ÿÚýÍê¯îU2Êüøì«ÍÙÒþaì4ì4úï ­ÿÿñ>ò{õ¯îpÕpÕKU2Ð cíÕô5Ê0ôžDÊ3äò!ö¯îãµþÊqü™ñŸåpÕ>ò c%c%£%ûW ÚÝô¸æÅŠó£Kc%­ìSäÙÒêæqàÚÝéDʦ¯îÚÝãÕô0ôaÚl÷: Õô6è¦ù'QÐ Q%ûÚÝBÐÛqà«ÍSäøã+ ¾/Êøcí GG?3¾/U2¼ápÕBÐúïÚô¸pÕî*6è{õËû:ÊÐ 0ô¾/¾/Íêbþ]ùc%øcíéô¸æÅ{õ0ôc%ƒ7:Ê6èúDãÚã}ÈcípÕ¦JU:QSäÚøÊl÷Íê"¾ÍêèÊéZÿD'- >ò©úäò{õBÐÙÒ6èHSä]ù: c%c%:]ù}ÈæÅBÐ6èl÷¾/'-øÕôqàÚaK!öqàêæc%gøÚqàËûa Gc%ì™ñcíÍêÙÒè'-:­g"¾Bмý*¾/µþã{õéÙÒŸå c%v cíæÅèJU£IQ¯îþˆËûpÕ}Èø”]ù™ñÆöÛ>ò6èø'-âHac%*Šó¼á¼á>òSäiý3ù*c%”¯îì¹ÀpÕ>òÐ Q>òHÛ—l÷ÚÝì4U2a£cí䯣‹ãG?… HÚÝÊÞAž"¾ø¾/ù6èæÅ6èÕôÐ }ÈZÿ*épÕ˦_:øÚÝ&"BÐÕôø¸ø… gãBиøl÷!öBÐêæ:ì4Ð Ø: : ¾/ÛÐ ù'ãä¯BÐÐ ¾/¼ý¼áHc%BÐÐ  iý򾁵þ G*"¾cí6è: èDqü¼áÍêã:è­Û­ >òô¸¯îÕôÚZÿ{õc%c%øÊ'->ò]¶¶ªÆöì4c%Q©úÛBйÀc%ž&"6èŠó¾/qàÕôÚݯîŠóŸåSäŠóc%ƒ7ÊÙÒìÚD¾/Ð : óðÚ¼ý6èÃüž©úcíKÆöÆöG?±<¾/6è{õîQÚ”­'-ÆöÙÒ«ÍOßåÍêgÆö6èÕô3&"­c%]ùHÚqà"¾"¾]ù6èc%ø¾/¾/¼ýBÐÚ¯îÚÝÊøýØ"¾Ú­ÿÊÊ… &"¾/xû]¶¶ªþƒ7î'-ß ÆöæÅ0ôƒ7'-cí™ñ­ÿ¸ø}ÈÆöøÍêOÃ]¶ãÊ&"ù'ÞAPì4%û™ñøØä¯ä¯cíK­úï6è¼ýø žø­qüv èÙÒˆ¥BÐÚ¸øøâ: cí¼áÚD¾/aÊêæÚÝŠóóð¼áäòîèHìý¾/D]ù©úÍê"¾æÅcí¾/c%ÊÕôOÃìÊU2âé: QSäBЭ*¾/qàŸå6èK: 5âýóðŠóÕôécíâ&"ý&"U2ÊúïÚÚüH '-ƒ7Æö©úH&"”ÙÒBÐ+ *3Zÿã6èËû: '-ù'ù'ÚÙÒì0ô¼ýl÷HQÊÆö  &"è©ú¯îŸåËŸå ]ùSä{õÆöÐ W0ôW&"ÊSäéñ30ô¹Àä¯cí 0ôÚév : ž3£IÞAÚÝæÅÕôcípÕÚqàŸåqàü::ù' GÊÆöËû ¸øŸåØpÕè'-3úcí: óðÚÝ6è£Zÿ]ù”&"Ð ÍêBÐÕôU2U2Kcíúïß Wa”óðÙÒŸå>òWúì6è6è±<ˆ¼ý©ú!ö6èBÐSä QäòÚÊ£I:øü%ûã¯îêæ¦è¾/>òBÐBÐÍê6èpÕqà¾/¾/WD¾/©ú¯îóð©úWa!öSäBÐãæÅ¹ÀKì4c%Ð bþÐ øc%™ñÚÚìÐ iý¯îùc% øãÚÝÐ ¾/Ú«Íqü3¦: ¼ýÊéBÐÚÝøùóð ¾/*ùqàÆöv úËûcíÆö>òèù'Ê>òéÚݯî]ùø3Êè©ú%ûÚÝ£c%ÞAc%úcí¸øgqà… Êv úï¯î+ =6è¸øcíéãÍê: c%c%­ÆöZÿ3S¦Ûc%Ð 6èl÷â¯îÚÚé: Sä«Í]¶BÐ>ò­ù' G£IÞAø>òêæag™ñ]¶Ñ"¾: ­ñl÷cí: Û¯îbþù'c%ø¸øcíqàŠóøüqàø: Scíú]ùî=øø£IJU*cí"¾"¾ãøéóðqüêæ¯îÊ'- Gc%gl÷ì6èìiý:Ú"¾Ú… &"¦Íêß Dß éÚÝSù'0ôŸå3ƒ7¸øóðøèSýˆøcíËpÕúÿl÷]ù ø¾/ÞA=Säú%û”qàØDè¦WQÚÝìß úïÆöÍêcí S­ÿÃüÚÝ!öWž>ò¼ýcí­ÿäò6èîÃücí¯î5¾/&"øqàÚbþËûóð6èóðÕôxûŸåúïè­Û{õÚÝxûù'¾/þcíé6è0ôêæ6è©ú¸øÊøc%+ ÆöÙÒä¯BÐø*U2­üBÐBÐqàD:ø=¦Q=ÛÚÝÚÝ Ãüù'ù'3ü¸øcíBÐÙÒ]ùøù'5DQ¾/BÐSäWc%ú™ñqüSäBÐ6è'-ì4{õÙÒ«Íé&"ì4¾/¾/H]ù—µþ£žqàÙÒpÕùžv £¯îÚÝ0ôDltfat/inst/signals/greasy.m0000664000175000017500000000456112612404255015660 0ustar susnaksusnakfunction [s,fs]=greasy() %-*- texinfo -*- %@deftypefn {Function} greasy %@verbatim %GREASY Load the 'greasy' test signal % Usage: s=greasy; % % GREASY loads the 'greasy' signal. It is a recording of a woman % pronouncing the word "greasy". % % The signal is 5880 samples long and recorded at 16 kHz with around 11 % bits of effective quantization. % % [sig,fs]=GREASY additionally returns the sampling frequency fs. % % The signal has been scaled to not produce any clipping when % played. To get integer values use round(GREASY*2048). % % The signal was obtained from Wavelab: % http://www-stat.stanford.edu/~wavelab/, it is a part of the first % sentence of the TIMIT speech corpus "She had your dark suit in greasy % wash water all year": % http://www.ldc.upenn.edu/Catalog/CatalogEntry.jsp?catalogId=LDC93S1. % % Examples: % --------- % % Plot of 'greasy' in the time-domain: % % plot((1:5880)/16000,greasy); % xlabel('Time (seconds)'); % ylabel('Amplitude'); % % Plot of 'greasy' in the frequency-domain: % % plotfftreal(fftreal(greasy),16000,90); % % Plot of 'greasy' in the time-frequency-domain: % % sgram(greasy,16000,90); % % References: % S. Mallat and Z. Zhang. Matching pursuits with time-frequency % dictionaries. IEEE Trans. Signal Process., 41(12):3397-3415, 1993. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/greasy.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_SIGNALS if nargin>0 error('This function does not take input arguments.') end; f=mfilename('fullpath'); s = wavload([f,'.wav']); fs = 16000; ltfat/inst/signals/Piano2.wav0000664000175000017500000011705412612404251016055 0ustar susnaksusnakRIFF$žWAVEfmt D¬ˆXdataž  ýööòððçáßÜÙÙÐÍľ»¶¯§£™ŽŠyvjcXMD90& ÷æÛÑÄ·¦›ŽqcUF7+ ûÿíÿÝÿÎÿºÿ«ÿœÿ’ÿƒÿpÿ`ÿVÿEÿ4ÿ$ÿÿÿüþíþÙþÇþ¼þ­þ þ‘þ‚þxþlþYþNþAþ6þ#þþþúýëýÜýÑýÇý¸ý¬ý ýý†ýzýoýdýXýQýCý:ý8ý3ý)ý#ýýýýýýý ý ý ý ý ýýýý ý(ý$ý(ý/ý3ý:ý=ýAý=ý:ý7ý.ý)ý.ý+ý/ý2ý2ý2ý/ý$ýý#ý ýýý ý ýýýýþüþüýýüûüýý.ýCýdýý»ýåýþ?þJþ?þ;þFþaþlþdþ]þTþTþhþ…þ­þÕþøþ!ÿ?ÿ]ÿ~ÿ¥ÿÝÿJs—½Üóý *?MT]X>&   ý÷·5’ÿÿ•þ0þÖý–ýsýFýýóüýiýØýIþ·þ'ÿ”ÿíÿDÊŠske]3Ð)3ø”Š ¡4¿AêÑåóçÝï A’óC¬ª£ÁðAU+›Âà 1Cÿlþ°ýý¤ü4üÆûoûNûû:ü)ýþýaþBþçý ýšýºýÊý»ý¯ý¿ýþÿF™ë\ 3 F j;m  Z % ­;øÿrü ùöyóOñ¼ïðîÛî^ï“ðXò/ô”õ6ö²öÎ÷Pù»úÌûvü›üüHûúàù ùû÷ùöhö`öÓöøþùÌûýgÿŠ BBÎAŸ›ŽoÿFýjûÂù&ø³özõ±ôôÛôFõÞõ$÷Eù…üа¤W ÖòÉ&`Sˆa ) œ&Œû÷«ò îñ驿7ä­âÒáÙáã€åÓèÛë^î‰ðfòÉóÌôÔõ9÷#ùûïü)ÿ`0 Dê©[y!:'K-Ô2 7=:~ÛûÜŠßþâ»æêaíˆñöÌûoé,í 'D.t4£9>ûAŽD‹EöDÃBÆ>g9[3d,$ÈNøÔÿöNíRåJßrÚœÖSÔÔÕ²ÕÁÕLÖç×AÚwÜvÞ°àøâ;å¥ç!ê›ì5ïEòöŽúaÿp’ ñ`Å (ø.n5";T@;EfIõK|LL’JmG•Bë´#ú%´%J$"ý E³ Å6ûÞòµêšâ0ÛIÕãÐAÍ"ÊGÈáÇ È1ÈÌȼÉ)ÊÊÙÉÊaÊFÊûÉWÊ­Ë)Í»ÎSÑ&ÕÔÙ»Þ»ã@é‰ïö þÿ[®ÿ').r3Ð69†:Å:ž9B7ò3W/¡(+ Ž ÆúGñ†éqâðÛkÖ–Ò&Ð9οÌåË®ËÛË;ÌÙÌ­ÍÖÎgÐKÒoÔãÖÚ:ÞiãðèCîÑó\úLï¥\;'ý/¤8ù@5H¨MµQU…WµXÞX3XnVæR™MíFP?7B.e%—Ðl 7aþù~õÁòOñ§ð>ð ð‡ðÂñäòió®óuôæõº÷Ìù:üRÿúß Ÿ,À6$+q2:ÉA IO UŸYD]à_«aÕb­bd`\5V(O¨FÈ<ã1’&Býå§úÄñ*ê§ãÞ+Ù_Õ–ÒжέÌfÊ<ȆÆÅxà ˜ÁÂ`ÃRÅÈ˛ϼÓDØÐÝOä-ë|òŽúóé è œ#’(h,&/—0”00/h,("MŽœ ÑùöÁíNå]Ý­ÕîοɠÅ¿«¼¿ºæ¸ú¶µW³±c¯ž­Ã¬¹¬­ý­Ç¯?²µk¸¼”ÁÃÇ%ÏÏ×dáâê@ôØý‡èªô!¸)i0m5‘8¢:³;D; 9-50!*e#EB `ý¯öˆñ1í|馿¼ä]ã^âÒáeáïàwàà2à­àGá-âØã1æwè•ê5íñöýû¹b Çgã#d, 5Ì=]FSN5UÏZN_­b•d d³b!_>Z'T¹L(D¾:Á0r&_¸ WÕüJ÷óØïíµêÄèJçèåeäèâÊáZáwáàásâ0ã8ä»ååçÆêºî ô úprìúˆ +)‡1—9MA‹HO—TñX¤[³\.\Z>V”P0I@–5N*•­íÉû£ñªè³à£Ù‡ÓmÎ4Ê^ÆvÂP¾“ºw·¹´j²¬°¯Ã®®e­t­¯²K¶»£Á¡È–ÐzÙïâ™ìyögJ o7&û-f4Q9=h?ú?P>¤:L5Q.¨%onïøˆíNâØ ÏVÇäÀT»£¶Ä²Y¯@¬©«§µ¦“¦û¦B§N§†§q¨Rªõ¬b°Ï´XºåÀYÈÏÐ;Ú'ä@î¯øroW°#--Û5Ä=sDISMqOÇON8JiD.=Ø43+u ¡ þ^ô-ë:ãÂÜ„×ßÒfÎ(Ê™ÆÄÂsÁ«À À`¿Ò¾½¾4¿6ÀÞÁ\ÄÈÇSÌ)Ò Ù¶à é"òü®x1 'å1M<åExN=V+]°b>f°gMg+ea [WSZJ,@Ï4~(õ5Âzü#ôì/ålÞØ§Ó±ÏŒÌûÉ“ÇZÅ{à  Á>À«¿Ì¿ôÀ-Ã(ÆÊGÏýÕ½ÝMæÇïCúrÀ6'2”<~F‡O}W*^7cGfRgUfpcö^ÍX½P¼F1;/ #´3 ˜ØúŸòëtä$߯ÚâÖcÓ…ÐqμÌ˗ɤÈ5È1ȯÈéÉôËØÎÍÒŸ×%Ý¥ãWëô8ý˱Áó$Ë.88lASJkRóX«]ç`¬bÁba„]úWCP”Fz;ñ/Â$¹Ù’Lû*óìæáùÜçÙÈ×5ÖÓÔŸÓåÒjÒßÑeÑMÑÒrÓEÕ¤×èÚ?ßxä]ê<ñaù\Î rNq)È3D>¢HRn[ cWi^n&r­tMuŒsOoÞhÔ`˜WSMöA6f*5A¯ +øéð‹ê(åÆàMÝYÚ•×ÕÓ_ÑáÏÀÎ'ÎάÎÐÒ¹ÔHØÝ:ã1ê¼ñ×ùƒ¨ W¡ *|4>…FN&U‰[` càdJd‚a}\„UMPCi8‘, RyûeðæƒÜ5ÔͼÆÁ¼Ë·ú³R°¹¬¡©7§¥l£J¢Ñ¡%¢V£Å¥¤©ª®€´ãºÞÁàÉ ÓNÝ5è\óZþñC9t&±.É5Š;Q?Ê@.@º=u9837+Ñ!šÜ èõ±ê)à'ÖÚ̧Ă½'·–±Ë¬€¨ƒ¤Ù ¹›Ð˜Ö–•˜“°’¥’ç“–-šFžä¢Š¨{¯w·`ÀBÊÕlàÌë"÷ƒð 3œ#Ú,î4n;@BCŠA&>"9Å2G+™"-3,û}ñŠè£à¯Ù‡Ó1ÎuÉÅ Á ½âºª¸d¶Ä³=±¯°®Î®é¯á±®´F¸£¼ÞÁ1È¿ÏØâ5ìÛöîW ñ£$07;äEmOIWg]ÍaKd düb¨_ÙZ®TFMÜD¾;.2K(kOK iÿ7ù«óôîëè?åUâAß;ÜdÙãÖÕLÔQÔÕLÖEØgÛÆß(å_ëzòºúÙu _¹!—,œ7ŒBJM‚Wö`5iæoöt«: 5.™%(°e»úHïŠäÆÚ Ò3Ê)Ãã¼·ž±¬¼§B£.Ÿˆ›˜Å”2’{xýŽL™õ’>–hšWŸ¥è«â³ö¼Gǹҥވê.ö«Ñ b!‡)0º4…7V8u751†+Ž$(„mAþ)ôžê÷ácÚ|ÓðÌåÆ{Á™¼ü·³^¯n«ÿ§ ¥²¢Æ }ŸûžJŸ‰ Ð¢è¥©©%®c³¨¹cÁ“ÊØÔÐßFë&÷W³òÔ'3=|E LìP)T±UbURSÁO¤JÐC¶;Ó2€) .¿¤ ÿSø>ò¶ì¢çÑâ.ÞæÙïÕ#ÒžÎËÎÈmÆñÄŽÄÅ-ƯdzÉpÌ1ÐÕ,ÛsâÇêþóëý‹í¹œ+P7rB„L-Ul\/b7fxh,i1hGeX`¦YÃQIÈ?á5,¤"®<Š «hüoöÜðÔëSç ãÃÞŠÚ…ÖñÒÐ*ÎÍiÌRÌ—ÌcÍÏ”Ñ)ÕÜÙ´ßZæ²í$öÉÿG ?¡ (,B7rAqJ@RèXH^öaÝcøcb^jXxQKI @ 6å+ä!%Þ+Üýö0ïüèSãìÝØÓ´ÍËÈlĤÀ³½»Í¹r¸«·±·—¸fº½ŸÀBÅìÊnÑ Ùëáì&÷ïðŸº%)0Þ9¥B7JNP¸T:WÈW‡VœSæN€HAÕ890ƒ'Âòw ‘aþò÷Dò*íBèaã…ÞÙÙ¶Õ@ÒfÏÍ5ËÙÉÉÌÈ;ÉfÊiÌ6ÏÉÒ×Üúá3éµñBûô_Û(L3\>ËHPR¨Z a,g%k%mñl´j™fØ`àYüQNI÷?S6q,¬"‡9Î önü"öüïêYä!ßNÚÛÕßÑ4νʬÇRŤÒÂ\ÂÒ¼Ã/ňÇËÐÖ?Þ÷æŒðÕú½Õ¼'&0…9BaIOõRçTÐTÁRO7JD§u6N.ü%„ šþø­ñ‡ë†åÁß0ÚÕDÐôË$ÈÆÄÚÁx¿z½Æ»`º™¹½¹îºU½ÜÀaÅÎÊ:ÑŸØ3áëÔõ o ̨"¾,6g>vE KÊNRP—OMI$DW>¾7w0É(!^  ’nþsø˜òí³ç”â¬ÝÙ¹ÔêмÍÿÊ›ÈiÆVĜ§Á­Á‹Â:ÄÂÆÊlÎÐÓoÚCâKëXõD— ؽ!W,“6#@€HDOüS§VnWeV¶S­O†JUDE=’5„-l%åZRùÖòŠì@æößÚºÔúÏÃËÕÇ ÄzÀL½Êº¹ý·º·M¸¬¹³»‘¾–Â÷ÇËÎ×…à¢êPõgº S¿"Œ-D7›?:FêJÃMÒN.NõKCH>CE=Ë6Þ/…(î d" }þý€÷úðê¡äJßjÚÚÕˆÑtÍÉéÅ¥Âۿ½k¼Ñ»É»;¼L½X¿¾Â’Ç´ÍöÔ/Ý@æ-ðèú:ðÅ;)Ç3=ðDNKôO­RƒSšRPVL GB·;£4V-'&/Vˆž °þü›öžðë ædá ÝÑØ§ÔÀÐmÍÇʹÈ%ÇðÅÅ“ÄñÄKÆÃÈyÌ_ÑF×ÞâåÉîÄø³Fš&Ÿ1ã;EÊL§RV·X3Y"X¢U´Q‚LlFÿ?g9ž2¼+Æ$ÕÔ©™Êoû§õMðëñåÐà ÜÏ×ÔíÐ5ÎÞËÀÉíǤÆÆbÆ¥ÇäÉÍÑÖ\Üáã”ì`ö< ´2#1.8‘@G÷LÔPÛRSQ€N)JØDè>|8±1Ê*³#=x¹ P]þÝ÷ÑñõëæPà·ÚvÕŸÐLÌwÈìĘÁ¾Ü»ã¹±¸B¸Œ¸…¹A»û½ûÁ8ǃÍõÔÁݽç©ò.þÅ øn)­1â8n>AB\DÁDlC@Á”8R2o+U$S~Å ƒ.ýñöñªë‘æ¬áÔÜةӺÏ*ÌäÈÿŸÃ8ÂPÁïÀ(Á(ÂÞÆÆÊ×Ï~ÖtÞ¹ç òòü AWñ(ª2ù:–ANF!IOJ J|HÞETBÍ=+8¨1«*Ž#€…’”òùÂóçíCèàâÑÝ ÙˆÔ8ÐÌ,ȤİÁR¿~½*¼_»6»¡»®¼–¾ÑÁ^ÆCÌ”ÓÜåéï'ûä¸F$)Ì2Ñ:A{EYHëI;JKIøFMC˜>^9Ð3Ó-v'× {þ £nlúÁôzï†ê¬åíàoÜØÔIÐÍjÊOȼƒŭÄ'ÄGÄMÅeÇŸÊÏâÔãÛätíøŒ‚ ?'®1ª:7BpHSMÇP‹RªRaQÆN)KÎFÃA<6È/F)"ñIÊ ìüX÷òåìËç¬âÇÝgÙ•ÕIÒ}Ï"ÍË8ÉóÇKÇNÇ"ÈÊüÌÑQֺܺäWî5ùîÓ@Ú&£0‰9'ACGÓKáNlPˆPDO¿LCIE0@É:É4Q.ž'Î ßøW !? úõ–ïê´ä®ß ÛÕÖ Ó´ÏÃÌʪǧÅ;ÄíÃÄ ÆYÈòË>ÑYØáëúõoè &Û"©,V5Ø<CºG¾JGLuLaK4IF'B›=8Ò2‘,ö%/z,$ C‚Ùú>õ´ïUê0åYàÜ*Ø—ÔÑâÍËäÈVÇDÆÅQÅŽÅÍÆwɰÍrÓÆÚ˜ã£í‘øß5Xä$–.27~>_DÇH·K&M*MûKÎIÒFðB;>¸8ƒ2ì+4%~éX o’ÿ”ùšóéí›è¯ãßÚÖíÑ]ÎrËÉþÆJÅÜÃÎÂFÂ…ÂïÃÑÆ3ËDÑ÷Øñáìõöt•#7-¹5õ<°BºF?IŠJ¼JÄI•GRD(@:;5H/§(ð!dÄF°,ûþô-ï‹éóãsÞÙÖÓϸÊèÆ|ÃxÀʽA»í¸·ëµâµ·s¹d½öÂʈÒÜjæ1ñ2üü%O9"Ä(ü-ö1£4õ5645<3"0ñ+Ò&!Ba_4 åŠüYöuðÚêlåàáÚÂÕªÐËË\ÇvÃú¿ç¼ º‰·)µ³|±a°°º°Ç²`¶œ»NÂQʲÓ4Þ‹éLõàø eóV([/5ž9=7?@?„=~:Á6’2í-À(4#o}š ô‘_û2öéðŽëaæ–á2Ý$ÙgÕúÑéÎÌtÉÜÆoÄeÂÁ¿ÀvÁ]äÆnËÚÑÈÙñâíý÷Fp2#³+j3<:þ?tD†GI4IHÿECQ?;Z6÷0+%õ€ä J¹#ý÷=òíèzãQߘÛØžÔ)ÑáÍÛÊ3ÈúÅVÄ•ÃÄÜÅ É®ÍÞÓ”Û°äáî²ùŽT"ñ*¬2W9Æ>ÖB^EvFTF+ECF@œ<8Ô2--V'r!‰˜°ö U™þÂøó”í“èÿãÆß¿Ûï×_ÔùÐ¥ÍaÊKÇ€Ä\ÂÁ§À0ÁíÂ0Æ*ËÓÑÚKãNí½÷T¸ µB )â0q7ˆ<#@ƒBÅCóCìBÁ@™=£95Ó/%*+$3[´ ¶®·úýô‹ïSêYåºà†Ü¨ØãÔ"ÑvÍüÉÇÆóÉÁ¿;¾È½Š¾ÎÀ±ÄFÊ\ѳÙ÷â×ì*÷Ѓ êœ Q)ì0`7²<Ö@®C'E€EÍDøB @9<Ä7Ô2»-p(ö"S”Èó T«úSõnðñë³çãsßoÛ×ÖÓAÐÚ̳É䯀ĨÂgÂmÃÆ-ÊÌÏžÖŠÞ“çƒñüÔLL•$-m4—:?pC4FËGHGúDB“>‚:ö51Î+|&û 7?.C Ž7þ.ùnôíïëJç!ã'ßMÛ×âÓ!ÐbÌ É†ÆÅíÄÆhÈ!Ì[Ñ Ø4àKé'óýI²r%ˆ-Å4;P@QDGiHH¶GËE C¯?æ;²73<.÷(C#OD?a Çކû‘ö¼ñ,íøèå>áEÝÙÔÔÃÐÍõÉ’ÇƾŨÆìȓ̭Ñ9Øà-éóLý‚rã¿#å+319*>ØA:DQE!EÖCÁA ?Â;8å3R/>*Ÿ$³ÄåK ç/ý øAóÖî²êšæaâ Þ¹ÙiÕÑÍRÉ;ÆíÃ’Â+ÂçžÈÿÍ×ÔùÜþå”ï ùÑÍ PH ƒ(Ð/ 6;¤>ë@ßA¥Ay@˜>3ó@ÔAöA\Aÿ?ß=í:/7ã2;.")°#ý8€æ ~Yvýòø³ô„ð0ì©çã~ÞïÙmÕÑÄÌÇÈCÅx¸À8ÀÁ{ÃWÇžÌ%ÓÊÚMãZìÐõƒÿ8 ¥¡#t*Ý/ô3ø6 95:f:±9-8í5ÿ2l/,+]&,!¾ý MåþÜùõ}ðæëOç·â ÞŒÙâÔ"Ð^Ë•ÆÙÁs½¬¹Ð¶ µ„´[µ§·h»†ÀÓÆÎ$Öß™èò£ü?éz÷p"Ç&ÿ)*,`-±-*-Ë+ )É&_#dÔÏR• ìpÿ/ú/õoðÙëNçÕâgÞþÙ•ÕÑx̨ÇÃÂú½z¹jµî±W¯é­Þ­N¯ ²ãµÔºïÀ@ȽÐ'Úäî øWä ˆ%½T"÷%š(/*Ã*„*•)ü'¯%™"Î^rL/ /kþü½øôðÁìéwå³áÍÝÄÙ ÕjÑÍËȤÄþÀ?¾§¼9¼ß¼Ÿ¾‹Á¿ÅfËrÒªÚÜãÈí9ø¯¬ ¹•&Œ-}3Q8<®>v@cA{AÕ@j?*=:6ž1Ì,Ý'Ø"ÊÖd ç¾|þ*úßõ…ñíìèËâ‰ÝØÔNÐGÍËÝɳɩÊáÌzЛÕ(Üñã¹ìö­ÿN ÅÄ $€+ø1_7®;?A0CD3D]CAÑ>_;j73&.þ(Ô#× ^ÓQ ؆Zÿûö¦ñnìÿæƒá9ÜE×ÈÒýÎéˆÉÈŽÇ^ȬÊ{ÎÅÓ_Úâ¢ê¾óIýèO*L!x(.¸3 8˜;T>'@þ@á@á? >n;8Á3ô.þ)%÷àÛm îû”÷ßòÉíuèã§ÝØÐÓuφËÈ~ÅéÃ…ÃŽÄ ÇðÊNÐîÖ˜Þ(ç~ð.úÑ- Çzc$­*80Ö48m;„=Ì>(?r>·?ê>Ñ=ë;B9ö5!2Ì- )$/£“ À ܶCýøzóPîéèãÊÞ¦ÙÔ¸Ï{ËÈ|ÅåÃcÃ%ÄpÆOʬÏWÖÞfæSï~ø~ n -&¯+c0+4ý6Ì8“9f9O8q6å3›0,í'ÿ"#Yf ¨èÌüSø®óùî(êåÃßUÚÕ<вˎÇþÃJÁ´¿r¿´ÀvèÇ;ÍÔÜÒäÈí²ölÿçîkfÅ$]*"/ö2É5²7µ8Û88|6õ3–0,(L#‘'!W’´ º¹»þŽú ö+ñ ìÓæ¡á~Üc×TÒƒÍ9É¡ÅçÂTÁ Á8ÂÿÄSÉÏÖòÝOæýî½÷UÂÞ¡è%Y+ñ/°36|8u9ˆ9³8Þ6ÿ3@0æ+^'ê"•M ÞÒ ä øã‚ýÔøõóôîÒé’ä8ßâÙœÔyÏ–ÊÆ>Â\¿¥½U½–¾\Á¡ÅAËæÑHÙ%á_éÄñ:ú†s Ó”—º#(€+7.*01ß0u/ -Ú)&ö!™ƒ%þ þ äû™÷ómî‚ébäBß Ú¶Ô]ÏÊÄÄÉ¿?»q·©´E³c³µB¸Â¼RÂåÈ^ÐhØ¿àGéêñgúü ­µ2#!X%Ž(¢*’+t+h*~(Ð%"½ÅÍé"w ìkÜ$ý?ù+õéðnìÈçþâÞÙÔîÎÇÉçÄ«À\½7»fº »*½´ÀtÅKË ÒˆÙ¤áHê óÂûò± òÓR 6&C+m/¡2Ø4ü56.5q31(.Ê*>'°#5 ÈmÀYÙ 2G5üÎ÷UóŒînéä°ÞyÙÔ@ÐíÌÝÊ=ÊË Í?жÔnÚ;áñèñaùˆ’ x 5 ï&-ž2X7&;ï=°?c@@Ð>¶<ö9Ö6r3Õ/ ,i(Æ$6!˜ßê×à ° sXüh÷'ò™ìÄæÔàÿÚÈÕzÑ;Î ÌõÊË—ÌÏøÓkÙÖßáæGîöõ°ýYá @Uß!Ê'-ž1-5¾7-9…9é8f7)5A2Ú./+q'Å# :LLFB %î˜ÿ3û¯öÑñtì—æ\àÚÞÓ"ÎõÈgÄ´À+¾ï¼$½Ð¾ÖÁ%ÆxË›ÑWØŠßç›îAöÑý!@ LÍd#'·)Y+á+S+Ö)©'% "Ü„£CÏ ? ™ùrÿýûwøšô2ðGëûåaà™ÚÛÔ=ÏñÉ ÅÁ÷½¼Œ»¼Õ¾`ÂþÆ–Ì Ó6ÚÃánéKñNùI) ±¶'ì#ð(í,·/^12Å1Á0/â,C*w'š$›!fùz%: 2ÜéüAø-óËíQè¼â+Ýâ×/ÓTχÌìʛʞËûÍ”ÑTÖùÛIâéxð3øûÎvàÞ%C,Å1O6â9l<ç=T>Ó=—<æ:â86½3Ž0-{)Ô%Q"ûÈ©kÝï ± «úÌô¦î€è âÝØÐÓŸÐÀÎ?ÎÏøÐøÓþ×þÜËâ1éòï÷]þú¼ Z”A#N)Ÿ.õ2689 9…8_7¾5›31.* '‰#9  ùË : ö.òúQõfïUé6ã2Ý•×ÈÒøÎ2ÌÊÊÝÊòÌ'Ð3ÔÙ…Þ¤äLëmòÆùDÏ^Á›©$Â)Ê-Á0§2°3ÿ3°3Ä2"1Ï.û+É(‚%9"ö­vbiZ …’E•ûcö›ð{ê<ä Þ+صÒÓÍÕÉøÆeÅÅðÅÞÇÊʵÎ|ÓÙ߬å¡ìöó¤ûv, ŒGÑ#‹'h*†,ì-}.0.$-€+S)´&¾# D"@VVI 0Ò¤ü«÷Bò‡ì~æGàÚÔ©Î ÊmÆÒÃVÂÂèÂìÄæÇ¸ËIБÕ~ÛïáæèoðQø;ã÷Oà³Â#ï&,)ƒ*+ñ* *Z(&J#] Q6ñø-{ ¬7þäùõ“ïžéaãÝëÖÑÌËGÇÀÃEÁä¿´¿¯À»Â¥ÅDɌ͌Ò_Ø ßtæ@îöðýx‹ ¸”!Ð$:'É(g)$)3(Ã&Ô$k"§Ìó8¥&¤ x •QŽ*ü:÷¼ñÈë¡åeßfÙØÓØÎ’ÊCÇ Å3ÄaÄtÅ>ÇÝÉYÍÀÑ/×wÝ^äÈë•ó™ûvé Ó*ñ#;'~*Ï,D.ô.æ.!.¤,œ*B(¶%#M ®&º_y¬| ¸MFþÍøóòÚì¥æ‰à×ÚàÕçÑôÎÍê˨ËYÌÎÐýÓfØÆÝüãêêQòÑùD‘¼„žþ!¨&‡*›-Î/1š1O1L0©.‹, *N'$ª!ך<Î p U͸ýý÷ªñë äÞÙ/Ô#ÐÍÇÊpÉóÈ=ÉmʦÌÐjÔ³ÙºßUæWí§ôü\] ø”P!6%G(ƒ*Ó+F,ÿ++)•':%’"Ñ$¶k&Ê9ƒ !$ÿ‰ùkóôìaæîßàÙ}ÔÝÏùËÖÈhÆÉÄÄlÄÒÅ7È‹Ë×ÏÕÛ´á±èùïO÷Žþ™> mâì $A&§'a(i(¤')&.$ô!ªSµp[Y1Â Ø \0EþœøXòÀëNå3ßzÙBÔ—Ï–ËQÈÝÅMÄ­ÃĆÅûÇrËÝÏÕÛ¸á¹èÖïýöþ ­ Àœp’"è$Y&Ü&œ&Å%p$®"— Müº£±ËêøÇ þ o ìý2øòÝë¼åÐßJÚ<խл̆É&Ç¿ÅVÅåÅxÇ"ÊÓÍ|Òþ×Þ­äŸëøòoúº¨3<ºŽ‚#&Ç(0*×*Ã* *É()'I%C#7!AuïŸLªx£º «"aúô¦îÿè¯ã¿ÞhÚÁÖÁÓzÑЬÏnÐKÒÕÁØ]Ýàâéöï'÷xþÍ I.!°&s+h/“2Ü4A6æ6æ6W6>5¶3Û1í/.{,+ï)Ã(e'”%#Ý×=,œ «•¡úõô§ï±êæâÐÞrÜ Û†ÚïÚMܲÞ(âŽæ°ëyñÅ÷lþYQ "¹þÐ%í*=/¿2t5e7•89³8º796L40201.š,Q+*¢(Ý&¤$Ü!sX‡!q ¬ËþØøómíGèœã‘ß3Ü”ÙØ××YרÐÚîÝûáæævìyòÓøgÿ ¡ ùÞ6÷"'k*-Õ.æ/*0¢/Y.„,{*(º&$%³#V"!¡ç‘‘ì³ø ÔN{û}õ“ïÎéFäßXÚ/ÖÇÒ'ÐcΌ͸ÍéÎÑ*Ô Ø¤ÜïáÙç*î³ôEû¾òÆ ÖüŒ]"C$%%4$ê"P!‚®•`G]JÆ·  Ñý´ûö=ðJêVäƒÞùØÏÓÏæÊfÇÀÄÃK‡±ÃÎÅÒȱÌ\ѧÖ~ÜÊâUéÒï ö üÁ  yû“D)yA¼;Û°¦­°– / Z ÿ«¶ý6ù6ôØîGé™ãøÝrØÓΒɰÅzÂÀ¾¾Ž¾û¿M‡ŭÉÁÎÔÐÚCáÆçOîÛôQû;m ò¥m9*±ØÍÅËøGžÞÙˆÞ³ ó ™«Iþrù:ôÃîéƒãÞרîÓuϩ˪ȄÆ(ÅžÄÿÄpÆþÈ—ÌÑHÖÜ(âèMïö°ü:‰ |ÌHà;! "R" "y!× / ”}öQs/s6x7 ÂåÇþvùæó9î´è‰ãÒÞ¨Ú ×óÓ—ÑЇÏЪÑ5Ô®×Ü%áÎæÞì>ó×ù †B©“È!$z'Ï);+ð+",å+S+ž*ü)o)ð(m(Ô''&Å$ê"v rêép Isûµõ2ðîêæáŒÝIÚÏ×1Ö”ÕùÕf׿ÙúÜìàuåê>ð6ölüåv å žX 0$'()V*Î*¼*Q*¸))>(v'Â&&a%g$#Y!6®ª Êÿ Ã>üÌöñrë(æ(áŒÜzØÕ®Ò1ѱÐ+ÑœÒíÔØÕÛIàCå²ê¥ðýöƒýd dÌgÎ º"ë#$”$E$´##«"H"×!A!z hó |Ò• àÂlþêøPó»í=èëâìÝkÙ†ÕTÒùÏšÎEÎñÎxеҷÕ~ÙìÝã¬èÁî/õÒûþÙ vÛÊ ð!t"•""`"!"É!c!õ u Õ •£ñ0ô ^wAþÎø=ó°í9èíâèÝUÙcÕAÒеÎDήÎüÏ"ÒÕ£ØûÜâÑçî§ôHûµØ“ ŸÔ †7Næ  æ”6×oûzȱî<S- š³‘û2ö—ðâêCåéßùÚ—ÖÜÒñÏåÍËÌ—Ì.Í·Ð^Ó#×ÅÛáèæ5íÍó…ú+t* CŸ3kQ Ø ý ã ° ˆ l I  ¡çßbZǺN{ F ¡”ÿ3ú®ôïžéOäeß Û ×íÔÓ×ÑuÑëÑ9ÓbÕfØ7ÜÎà æìkòù°ÿ$) Ž<*`êÒ!#Ñ##$?$E$?$A$A$?$%$Î##ß!3 #¤©-<æ 0¤ýñ÷'ò™ìqçÂâ¨Þ'ÛWØLÖ ÕÔØÔùÕç×®Ú\ÞÖâ èâí/ô»ú!4è §‰¦ ·!Ì"d#¡#¤#•#›#¬#«#Œ#.#Š"£!Q œrÐÏg† ¨äúüôïyé)äYßÛw×~ÔAÒÌÐ)ÐPÐ@ÑÓ®ÕFÙ·Ýíâ­è®îÅôÙú·+ t&-z ³j·è  Ñ12×*)Äé‹ ¡ 0:Ôú.õqïÈéSä.ßsÚHÖºÒåϸÍ9ÌdËfËaÌWÎ8ÑÕ¬ÙÿÞÍäíê&ñ;÷ý ¸$ Ä¥×zª‚%®1²#gk)Ÿ×±6b!Wõ ÷ekÿ!úšôæîKéúãß¹ÚÜÖÓÁДÎ.ÍÌÔÌûÍÐ/ÓB× Ühá9ç[í›óÙùãÿwt Èm]ŸG…ˆd$Ð[È ÉMœµk¦X‹2H Õß‚þûø}óî éQäà;ÜîØ1ÖÔµÒ4Ò¦ÒÔvÖ«Ù®ÝqâÛç»íÞóú?“ w Ñ Å ?!;"#Ã#6${$Š$s$6$¾##ë!} ¶r‘õU Fù‚ýøµò¼íé¸äÉàMÝyÚYØ× Ö ׄØÊÚÞâ׿2ìò#øYþj" [öê&Áݤ!#T$B%÷%ƒ&ï&@'k'X''•&ã%ä$s#~!ÿò>çë ’/ÿßù£ô‹ï²ê/æâ‚Þ…ÛBÙÄ×-×uר¤Ú›Ýpáæ]ëñ÷ýìa7 cñå^Xãù¶ H!ª!ç!þ!þ!Ü!™!!U :¶¦ò‡uæ ö½PýÎ÷Mòåìªç¨âøÝºÙÖÓ´Ð#ÏgÎΥϧщÔIØãÜ!âÛçÐí ó(ùNþ7Ò á pŠRÀØ®XÜ3iyuVš¾agÖ­ø ËBvýkø2óßí—èã¨Þ,Ú֒ұϗÍVÌéË[̵ÍÐ^Ó³×ÍÜpâ`èaîKôúQÿX j@©ª\Ðñ¦:·(y¦ Er…pìð ‰ÎÆþ›ùbôïîéûä`àAܶØÈÕ~ÓîÑHÑœÑîÒOÕ¨ØÝÜÊáBçíÇòsøçýþ¶é ¤òÔXu6”§Š9 É N!Ð!I"”"""!‘ˆ÷Ð%™ оvü÷šñeìwçÙâÞèÚÌ×gÕÖÓ-ÓÓÜÔ@×Ú²Þpãè îóëøþ ¢ÓúòŒÈªTî‰(ÝäõÔÛÝ5 `ý ø¦òNí%è?ã°Þ}ÚÉÖ®ÓMÑÒÏTÏÓÏRÑÁÓ#×NÛ#àbåÖêMð¯õÙú­ÿ!? jiåÛj«ÉÏÆ±“_ s s û ™žqió $èú¾õ¡ð—ëÄæ4âÞ]ÚP×Õ˜ÓÓÓÕ‘×êÚ ßÄãÞè)îróøxý2ºó ¼Éú„Èõ0U `!H"î"G#L#ß"ù!‘ ¢'qG» éêÅýˆøPó-î;é‘ä>ànÜDÙîÖ€ÕÕ‹Õ ×‰ÙÝ4áËåê–ï”ôùxþ%~t ¬Äuê3c ¤ E!²!È!Š!ì ßFKý8~ °°ÿ ú~õCð ëæJáùÜ.ÙÖ£Ó4ÒÚÑ›ÒfÔ×Ú{Þ÷âÃç¹ìÁñÈöªûU¯š èVf"ªé7`[,Ê  ‘ˆþç5øGB ÷n¨ÿ¨ú„õ[ðKëeæ§á?Ý\Ù6ÖüÓÃÒ—ÒrÓ8ÕÓ×5Û$ߊãBè?í`ò€÷zü6x â Â1L9®2™ñ7U E!ú!e"v" "!s>„b×Û‰ ÷.Cý7øóØí·èØãZ߃ÛuØ[ÖEÕ6ÕÖ½×0Ú\ÝábåûéÖîÏó×øºý>Xû , ûq–x+º3Éçõè œ!ó!Ð!'! `=šnÚ÷ M—¨ü€÷ò­ìZçTâÔÝ Ú×ÕÔéÓºÔkÖÔØçÛŸßÝãˆèƒí“ò{÷#üˆ’,V žãá§>®…âý  ì Ý N 7ž~Ó²7aK ÿ`gü$÷¯ñ@ìç+âÝÝ?Ú×ÐÕöÔòÔ¹ÕHׯÙáܺàåÇéµî«ó˜øFý—Š% y jñÅm‘r¬ ´!"è"î"~"}!èÌ:O„ + z~ÿ>úËôTï%êzåpáÞŠÛÄÙÛØÌØ˜Ù3ەݬàxäÎèuí1òäöwûÕÿðm )€e¸AºX }!t",#†#\#¨"o!ȱ$*á?9 Æä‘þûøkóúí×èäôßyÜ¿ÙÓײÖWÖÞÖJؑڣÝAá1åséãí^òÐöû'ÿ×$ “ Ë Ë©aõpæVºõè¬j¨d z @ ^ 2Œý øœòí“ç‘âÞ÷Ù‚Ö©Ó›ÑmÐ&ÐÌÐGÒ€Ô[×ÊÚ¬ÞÜâ5ç´ë-ðuôjøÿû<ÿ'Á ï ¡ V¦8¸ &ßÔ‹²p¾ ž ä?þ7ùíóˆî8é äEßÁÚºÖSÓ¢ÐËÎÒÍÁÍÎ!ÐgÒSÕÛØÜÜAáÓåYêÁîó÷Îú$þ»CB " ó È©…:Ÿ§Q”uêÉ2;¿¯  ãY~ûoöLñ(ìç@âÑÝæÙ­ÖBÔºÒ Ò%ÒÓ«Ô3×jÚ)ÞKâ¯æ.ë¸ï5ôsø\üüÿ\a u š ¡©¹À²}vo÷ ò{·˜ø^1}U Ð üõö®ñvì‘ç-ãhßHÜàÙ9Ør×׌ØQÚÌÜëßã·ç ìqðÛô(ùPý=ÒÿÒ d ½ê.QrcùE!9"ä"M#k#>#»"Ì!H .†gáò‘ Ë·†ý\øWó—î?êxæZãás߬ÞÁÞ¯ßsáûãç¢ê…î­ò÷cûžÿªhÒ è ¨a”È 5 "¾#!%;& '­'(K( (J'&Y$4"•m¼Œÿ î Vû3öiñ í8éæãÉá÷à áçá€ãÎå·èìíïõóøCüU2©É – l¦Ô7Q2Ô 9"s#‘$%-&|&l&&>% $c"3 P¢lÀ Ë›Zþ&ù ô0ïÄêêæ¿ãRá¸ßðÞßçßáÀãœæõé±í²ñÐõäùÉýl¿°Q ¾ Ýïœ5µý!ß!r"º"¤"4"c!* zLˆ2WR UÿÊùwôKïpêæ#âúÞ›Ü ÛFÚJÚ ÛÜÇÞ–ááä’è‹ìžðšôSø¯ûÁþ—Uø‚ æ @<ã|óKkFÐê…¾r¦Vu ) Ñþàøóîéè äÆßÜîØ™ÖÕKÔQÔՑַؘÛßïâåæÊêîòXõø›ûwþ3ÕY­Ø è ÞÀ€fˆt€“=‡P’OƒC Š\ÊÿÕúœõZðëæBáÿÜ\ÙmÖ>Ô¾ÒõÑøÑÖÒ“Ô×IÚÔÝœáƒåZéí´ð5ô÷Îúòýß¡6·& u Ÿ°—Tæ>jXX=©“  lÒ Æ\˜ÿŠúQõ&ðHëÖæÖâ_ßsÜ,Ú¤Øú×/ØFÙ9ÛÔÝóàzä%èÝëšïUó÷—úÿý6>$Ù o Þ<ƒŸ”c ž D$ ¬ á ¯ ë>jN¥s ËÌ£þsùnô–ï ëáæ0ãà¨ÝÜJÛyÛ†ÜGÞ£à~ãæùé€íñ­ô3øŸûáþìÁw – õ*òÁkè5P5Âê˜ÕŸöÍš C!êû¹ö–ñ’ìËçeãoß,ܶ٠ØO×f×>ØÅÙÛÛdÞBábä´çë}îÄñãôß÷Åú¡ýSÕ.p§ Ë Ë ­u2ÚZŒoü-tqçÁøŽ ™ 7ŽÆûÌöµñ–ì™çÚâƒÞÄں׆Õ2Ô¶ÓÔïÔ€Ö£ØHÛ\Þ¯áå{èêëTï±òçõúøïû»þvÞ B nˆƒK×*.ëb5_ã¼½ ô†ÕþîùèôÐïÌêæááXÞ—ÛÙPØ×× Ø(ÙäÚ>Ýöß÷â7æ­é.í«ðôh÷¡úÎýäÈ b¹ý#àrÕ  œ ¿ R P½ŒÇÏÇ ` ˜ÿ/úãôßïCëç“ãºà¨ÞkÝûÜCÝ=ÞÑßñá‡ä{çŸêÐíñvôÓ÷#û_þzk3Ù d æeÐ%D@ÓgÔ "ï"s#}#÷"Ñ! Õ+m; ‰?àûögñ–ì[èÑäÿáëß’ÞÞ?Þ2ßÉààâbå%èë=îñÕô&ørû™þ˜zF ¾ bèL±Àªz7 Ð!2#,$Ÿ$Š$ô#ì"{!‚óÌ-f p6èý³ø¸ó"ïëžçáäéâ»áKá–á•â$ä!ætèë î1ñwôÊ÷ û0þ>A/ Ñ ˆ&¡õ*/DP!,#½$ì%¼&0'8'Ç&Þ%v${"ïÑÇ Ç{Pû`öÈñ­í4êmçqåGäÓãüã¾äæÆçýé–ìiï[òfõyøƒû†þg>ð ¸ OªÔéþ+'ó!à"ç#$Ú$¾$,$##”!p²Q]å á¡Xü ÷õñLíCéèåGãZáà|߇ß'àZáã!å‘çDê%í ðëòÉõ³ø¨û¤þ„9» O „ °×òõ¯2sl}z  ¢}®Le XLúû”öVñrìè$äèà]ÞŒÜfÛæÚÿÚ²ÛÝãÞ$á±ãVæéáëÜîéñõø!û÷ý®>´% õ Jˆ²¼Œ#v‘mõ¯±î?û&Í øÿ»úoõCðfëçSã/à¨ÝÃÛ…ÚÚ:ÚÛƒÜ[Þ{àÏâ^å%è ëî'ñ<ô6÷úÉügÿòpäM ­ CP2årâþqjïùkAv"C ÝÿÍýwø2ó"îjé1åeá%Þ—ÛºÙ¢ØH؉Ø\Ù¤ÚMÜNÞ˜à'ãóåÞèÞëâîßñÌô§÷jú ý¥ÿBØ`à ø¦V6ÂØcqùôJû wœŒüf÷Mòaíµèkä«à˜Ý/Û…ÙŒØ6ØnØ+ÙXÚ÷ÛýÝTàäâ°å¨è¹ëÁî¹ñ•ôb÷/úýÕÿŠ$¤ U Ž­±›fú<›Â}µSK… ¡ÛÝýÑø¸ó´îûé¿åâ$ßÍÜÛ Ú ÙÉÙvÚ’ÛÝ ßRáíã¿æ—égì:ïòÚô§÷kú ýÆÿcëU¡ æ &aŒ’SÖÁê-Ç¦ßŽÄ |ÖéþÕù¹ôÖïKë(ç˜ã§à`ÞÅÜÃÛJÛWÛîÛݺÞÊà$ã­å[è%ëîàðÄó¨öŽùlüCÿý”Š  uÚ"<#ÞiÏþÕ76ÅÇ8D x¤¬ýºøóó„ïëLè™å{ãåáàà†àÊàšáââ•ä—æÙèVëõí¦ðjóIö=ù;ü4ÿ܉( Ä b÷vÌñïܳf ä!#»#$Ì##£!Ø0b |Ÿþýùºõãñ…î»ë‹éôçüæœæÍæ•çÕèêrì—îéðfóöÝø½û þr.Ê] ø –0µLuŠŸ› l"$z%’&C'p'',&·$³" ¾Ía©¸ ·Í%üÓ÷àónðˆí0ëxébèíç è°è¸éë©ì…î¦ðóõ=øäúzýÿÿŒ#ÃY Î 5„¿íþïÕŸ2!r"M#Å#Ý#ƒ#Ÿ"!ö'²²;h ovŽüØ÷xórïìëñè—æéäÝãlãtãÞã¨äÓåbçPéŒëõí_ðØò_õñ÷’ú8ýÙÿoþƒí 8 pÌú#ï€ÆÍr£Poê®ÈC?Ê FxýÂø@ôýïìÃèæä¯âÑáRáVáØáÙâKäæ)èfêÌìaïò¹ôw÷?ú ýÕÿ‘(œû Q ¥ûDŸŸo cw+ a u))†3 «êþAù§ôkð¿ìªé$çåã–â%â;âÍâÏã1åææäèëVí¶ï5òÕôŽ÷Uúý´ÿ/ a ¼ Y“¬®‘K×.=ñ+Ŭãyˆ&U Vp†üÄ÷Ló6ïŽëeèËå¿ã;âCáÙà÷àá±âäÂå¨ç°éèëVîíð ó^öù¹ûAþÁ>¤ o Ç AYKÔnÜó……èÂÇ ) ƒ»ÿçú@ößñÓí;êç|ägâäàà«ßßßà‚áÍâbä<æ[è·ê=íáï”òHõê÷‚úýÿxéR ¢ Ï ÛÓÎ˸c±˜þyW£S_ÛÙ k·ëý,ù‰ô&ðìbè/å‚âpàôÞޔݑÝôÝ´ÞÉß4áüâå@ç©é0ì½îIñÍóBöµø3û¾ý;™Êáô 7 [a9Ó! ‹”üGåÝG 2É(þrùÀô.ðÙëÌç1ä(á¾ÞåܔۻÚTÚ]ÚÍÚœÛÅÜ?ÞàâVäÇæ;é¥ëî˜ð6óâõ„øû`ý§ÿã a¨í & F9ôi„?~.:¢] QAüþˆúö¦ñ€íÇéŽæÏã áïßÃÞ ÞìÝÞ£Þ•ßûà¼âÉäçLé›ëî–ð=óöõ¤øEûÉý2ˆÎa » aŸÁ¶~þ2ú@ÜÆÍÄ ø¥?äû¬÷½ó%ðüìYêGèªætåžä/ä7äÃäÆå$ç¿èˆê€ì¥îüð}ó#öàø¥ûQþäeÙ;š sÙ8„¼Ø×«> `!þ!"”!„ ÛžÈk¥; ·0ÑüÉø.õò@ïãìíêjélèèè™èwéžêìžírï€ñ½ó'ö§ø,û¥ýj´ÿU µ W–Ð2SEóH ;!¹!²! !× ³Ðk–Z ÜVíÿÉûê÷\ôñCîÎëÚéjè‚çç&ççJèKé“ê&ìüíð\òÆô:÷§ù üiþÂ#Šã1 u ÀaµøÐ;= º «  f>Ðì» v.óÿêûøkô"ñ@îÛëûé¨èÏçbçiçÀçfèZéê5ìî8ðrò­ôõöLù°ûþ…åAâ < –ä5…Ôú¨ùä` s þê3ÐÖ[•• wCü øôDñuî(ìbêéHèÙç½çüç¦è³éë¿ì–îˆð¢òàô@÷£ù üwþßC®Y ¤ ÷cÎ.|ŒbûNN è ú j ,H¼¼K O»ÿû÷Ñó’ðÝí¢ëÚépèmçÞæ¿æ ç¸ç¹èýéë@í2ïKñyóºõøŽúý{ÿß/vÔG ¾ 7¥ù)=*ëh} $ ŠLn)âJi Eû²ÿ™ûÊ÷_ô_ñ°îlìê-é;è·ç“çÒçuèmé¦êìÅíï}ñŸóãõ5øˆúÊüÿþ.c© o Ó )yÀ)1 'Pï±Ø€´ 4ßý‘ùÈõ@òï]ìÿéè“æ€åÜä¥äÒäOåæçYèÝé›ë˜íºïæñô7ö[øú¶üÿþH’ÙS ˆ »í"ñX2‹Tšež9CÒ  òÁüWø_ôžð,íêWçþäãšáààîßà‰àFáNâ¢ãCåçé-ëJípï ñàó.öˆøçúGý¥ÿó.tÕG » ÏüpfÉŒ¼R] ú BF'þúö'ò…îëèeå3ã‚áGàsßöÞÍÞúÞ{ß`àŽá ãºä—æ•è®ê×ìïZñÂó=ö¹ø#ûzýÁÿ~ ¡ - â鬟£é)Óõ¬ :XpüøÀôñÈíÚê[èQæ·ävãââçá!â¸â«ãìämæ)èÿéìëííðgòËô/÷‰ùÍûþA™  ¬ 1’ËË€ØÈ<2LiñË O ™´»þÒú÷‹ó[ðí.ë3éšçZæ{åÿäåä;åþåçaèÛé}ëGíEï}ñØó;ö øòúAý‡ÿßGÁG æ Œ0¼-u}LÊ×]Iˆ/Qü8 ˆÄ à÷tüù ö[ó ñïgí!ìGëåêøêeëìÿìî€ïñýò õ:÷vù¹ûúý=}Ãs ì qû{êI”Â͈ Ü!¬"ì"¡"Í!j ‚<öTol a‚áþ‚ûføõóÏðïÄíéìvìYììðì¡íŸîçïnñ-ó õ÷ ù û ý ÿ#J‡Ê  DˆÏb‡gù¿Ýw€…}@ B :Hsý½ù:öúòüïeíAëéDèYçÄæƒææææ“çŒèÈéFëðìÃî›ðuòWôJöSøgú˜üËþþ4wË) Ž ÿU€iò µåšÈeeÛÒl ÎN…ü¾øõñ[îŒë,é(ç“å\äããÖâüâ~ãZäŽåçÄèŸê…ìîðµòèô$÷lù·ûþU°¡@ ì ˆE?Ü" |b©Xj=/í kÐ+üùçõójð2îiìôêÐéøè}èSèƒèéê.ë–ì-îãïÁñ¾óØõù÷/úpü©þÛNœ ¯ OêeºãÚˆÝÍ/ñ»Ø…ÔÈmæ C˜úƒýWú€÷õØòõðaïî0í¥ìxìªì)íñíùî0ðžñ3óíôÂöÄøÙúîü÷þóú^Å F À=§Gkc5ä ®ÂLSø8¤ 7oÈ_ý*ú>÷˜ô6ò)ðuîíìxë8ëKë±ë]ì;íRî§ï=ñüòàôÙöÄø¨úü…þ”ÃmÆ ( ýpÏó·g‰$<Ôø¦ßµD ¨ óQÒþwûSøkõÁòVð<î|ìëêxé$éé[éâé·êÛëGíêî±ðyò@ôöê÷ßùäûþ2o´“  ª<¶ý“¸`9c¦Î– zÕ7·üaù2ö)ójðñíÎë ê¤è“çÊæ<æüåæŽæ`ç{èÌéHëÐìiîðãñ¹ó¢õ÷¤ùºûçý'ƒú1 È 3fDÉô§ãœÅ^n( ¬4´ÿ>üÑøqõ9òDïžìSê`èÀækåSäƒã ãüâQãóãÜäûåFçµèFêðë¬íïeñZó\õl÷˜ùØûEþ×’V ³ )fWò-øKIõÈ& B 3Êtýúäöçó-ñºî”ì±ê é­ç©æûå°åÂå/æêæèçéqêñëíHïñòòÔô¯öŸø¦úÆüÿ’:÷´ p ˆÏÖß³ºØbv8¨Í ° aô†7ý ú÷\ôàñ˜ï“íÛëuêaé¬èVèYè¬èFéê%ënìæí…ïAñóÅôŠö_øFúPü‚þãh¸e ü €ã"-ß#à®Í…Ϭ!F Ç_ý¯þƒûøÈõ/óÔð½îðìëlê¸éPé7éhéâé©ê°ëðì[îåï}ñóÅô‚öWøQútüÂþ:Ñv Ä aø„Þåx“+Mþ6ó=‡©Ž Q ¿’ÿƒüŠù¹ö#ôÑñÌïî¹ì¬ëíê€êaê™ê!ëñëíEî©ïñŸò/ôÉõ€÷RùQûƒýËÿ(–œ K ´8}bàö•Âu¤Q…C›´ k 3úÎÿ°ü²ùäöIôøñôï4î½ì™ëÄêJê%êYêÞê°ëÅìîTïÃð5ò¹ófõ>÷7ùHûpý¥ÿð_÷¶ ‡ V ŽÍ¼Hq-s.jC }­­ ‘ \Ô°ý´úç÷Põúòéðï”ícì‡ëëÛê ë“ëbìWíaîï¼ðò¸óqõ;÷ùûý4ÿ‰º‚ W $À2eSñ/E5ç*¦îô Å”udþwûµø-öçóÖñð}îJíxìììOìÇìmí<î+ïKð–ñýò‹ô+öÓ÷”ùeûeýÿZ0 ÷ ž5£ÔÄX‚-Y2ùQCÞ=`V :îïþücù×örôDòbðêîÔí%íÒìÈìýìjíîÓîÚïñjòÑóLõÉöWøýùÒûÜýˆÉ{ $ ÈT¹á²#+ÄÞyŸLž–2™ Š iPLNþcûøãõcó.ñ\ïéíÚì!ì°ë„ë›ëòëŠìbímî”ïÓð%òzóßôgöøú!ühþÜnʉ >Ð9g@ºÀI\ý.õM=Ö7a x ƒ††~ýúŸ÷êôòoð«îHí0ìVëÏê“ê¦êëªë‡ì‰í¥îÇïõð>ò ó5õúöæøûú=ý¡ÿ.Ò‚8 á |è Ô:8ÏòšÌ‡È±U  F`dVÿJüUù†öùó²ñ¼ï îžìyë¢ê"êøé&êžêNëìíîïDð”ñóšô^öPøsú¶üÿ£LÕ n}<¡˜%8È×m¦šLÑ ' MI.þßúâ÷õˆò.ðî,ìŽêJébèÞç·çÖç.è·èié7ê#ë)ìGí…îðï‡ñBóõ÷TùÂûZþß§V â >U)¡©5DÌã›$ ¯ Ukgÿlü‘ùÓö2ô¾ñqï^í“ëêéHèèçÙçè„èéÐé¢ê—ë°ìçí@ïºðSò ôîõ ø]úãü˜ÿd7 a Ýš°8EÛ ì}½ªF © Ýú?ÿkü¯ù÷Œô=ò*ðcîòìÝë*ëÌêµêÙê*ë¬ëVì%íîïGð…ñÜò^ô öö÷úrüÿþ¡Uâ ¡ FÄøË+ttV?Éé¼N« ä 0Ieý’úÐ÷2õÅò¡ðÓî[í<ìpëêê­êŸêÆê#ëªëPìíöíæîíï&ñ”ò5ô öøNú«ü'ÿ¿p3ö   È ìqO®›,hW … é2oŸþÉûÿøOöÉó‡ñ–ïøí®ì´ëýêˆêYêfê®ê%ë¿ë|ìGí%î#ïLð£ñ/óêôÙöìø$ûŒýäñƒ y€,€eñ&ëMEç5=À N » NþÜûRùýöèôóñMðTï«îLî1îTî«î5ïÏï}ðGñ3òKóŒôö”÷FùûýNÿÅn< ñ ¥(iVùE5ÀÛ‰Õ¸=v}GÚM – ÁãdþÛû}ù`÷~õÞóò}ñÄð_ð9ðLð€ðÒð=ñÑñò}ó“ôÉõ÷~ø úÉûÅýòÿj Ãx  ŸðÓS€L¸±EqKÛ,0õ‡ é %Lz·ÿýtúøßõâó3òÞðÞï5ïÁî‡îjîrî©î ïžïSð.ñ"ò*óMô‘õ÷ÈøÅúývÿ ´Zä Q Œ™fãÄ ŸåÓrÕíà ` Î'tÉÿýúý÷›õ„ó¸ñ=ðï9î£í=íÿìôìítíøí©îuïSðDñEòuóÚôwöYøŠúìüÿ*݉) ³ 7£Ð–ú Ì8S™¿ž\ ó sè=–ÿøü{ú;ø7ö†ôóõññCð½ïuïfï–ïíïjðñªñbò/ó&ôFõ£öHø7ú\ü²þ.¹V ${–jåËCm>´ÍŽ0!ä | ôM”ÜJþçû»ùÔ÷"ö±ôrójò£ññ×ðÅðæð1ñ–ñ ò“ò/óïóÕôýõg÷ ùðúýIÿ¨(Á\ ì ]—‡.Ž¥ißù¼.æY’ˆF Æ ByÉÿ/ýÍúœø›öÕôAóéñÏðùïmïïïïIïïêï[ðïð­ñŸòÌó7õâö¾øÆúýtÿ «JÓ + G,Ó8K mrrˆ]è& Ò N¥ð?¤ý$ûÑø›öŒô©òñšïî°í!íÖì¸ì¶ìÈìøì?í£í4îýîôïñ|ò ôÓõß÷$ú˜ü/ÿÆRà 1 ( ÝJ]lw;¸ìÃDy ] þrÍ~ýîúuøöÉóªñ½ïî²ìëÐêDêâé©é‡éyéŒéÐé5êÁê}ëeì…íâîƒðoòžôþöŠù,üËþXÝI‰• O ³ Âÿ1¹üé t ¤ ŽEÎB¸þ0ü¨ù,÷Èô…òjð”î íÎëÓêê†é"éÝè¼èÊèüèPéÇé^êëì@íÃî’ð§òíô]÷êùüEÿºC˜ ¬ w ì ¹!8ùWYûB N ( ߃¡ÿ#ý«úUø'ö2ôˆò'ñðïcîÓígí,ííí?ívíÉí8îæîÔïñòKôEö†øìúý.ÿÁhç  Ê?qax…6p^8 Ö]ØD¿ý`û5ùB÷—õ"ôãòÍñòðZðùï½ïžïœï§ïÇï!ð¢ðZñXò‡óþôªö˜øÊú3ýÎÿŠIú‡ è û²)givvR<ãKƒQ ó mØTìÿ°ý›û³ùû÷{ö9õ2ônóÚòmò òôñÚñÚñþñWòÞòšó„ô¦õ÷½ø²úèüZÿì‘>Ó C €•|1¶ ¶ü”ÚÛŸ#_S¦ + ²Fò·ÿ¡ý½ûú›øf÷sö¯õõ“ô)ôâóÀóÄóäó5ô®ôUõ2öJ÷¯øXúMüþà_áX° ð  Û‡ø'‚¦‚cip}O÷ ‚ þvöŠ<þü$ú}ø÷ÜõÛôþóEóµò>òîñÂñµñÈñògòøòÈóÞô;öñ÷ëùüvþÛ?”Ôü  ÛpÿjÖø×tÁ¸P¥¸ ™ X üŒÿAý ûù3÷¢õ7ô óòñeðÖïgïïõîâîðî!ïzïðãðòxó7õ3÷]ùœûãý+n«ßþø ³ *_Syª*lUü ` ‹ ‰]¯NÿýüÍúÂøæö9õ¹ófò=ñ=ðkï½î6îÓí“íjíWílí¬íîÄîÉïñÇò­ô¹öàø!ûtýÒÿ9¥- & è tÈåÈh½±O®»xð - ; ÂhÒþ¶ü¶úæøB÷Êõôfózò½ñ&ñ±ðbð%ðöïßïåïððVñkòÄó`õ÷ ùûUý«ÿŽò0 J 1 í|ÖíÀI}jVb!›Ê ¼ Ž Bë›[6þ,üLú•ø÷œõiôió—òòñeñéð~ð&ððïðï-ð±ð‡ñ—òÓóFõõö×øßúýcÿµû/C8  À ;ƒA¼æÏlµ°S¬ É ¯ k·h.þüú2øyöïô›ó~ò–ñÏððpïÌîAîÚí£í©íñírî1ï%ðPñÀòqô`öoø¡úÙüÿMn{m? ç Z š žjJFóVb! • à Ç©‰]<ÿ$ýû,ùh÷Ïõwô\ókò‘ñÃððOïµîAîøíßíøíCî¿îxïyð¸ñ9óóôàöõøûIýÿ²ÛëਠC ´ ô Òb°µjÃÄs Ý  %$ܬÿƒýjûsù²÷'öÏô¢óò‡ñ’ð±ïñî[îãíŽífípí©íîÒîËï ñò>ôö øú;ügþ™˜z:Ü O • ¯ Fª¼y×Û    o ¤¨a-ÿ ý û?ù£÷3öæô¯óò…ñ–ðÇïïƒî î»íí—íÝíjî9ïMðžñ-óèôÙöìøûCýÿ¬ÈͰl  x Ê ðäîñ—ðä ‹ ð $ (Õ²²þÑüû‰ùøÄöˆõfôoóòËññ‰ððÒï´ïØï0ðÈð›ñ²òô¢õf÷XùhûšýÕÿB\a@  ­ =¨áÔq¶­]Ì÷ÚxÖ ó ç ͽ¹ÐTþ¶ü;ûæù®øŽ÷…öõ­ôäó8ó¦ò:òòò@òºòsóqô«õ&÷Øø¶ú¿üáþ0FG)  å ¢@°Û¹T¥´…5¢ð  ([§ÿþŸüJûúãøÎ÷ÍößõõPôÀóPóóóWóÓó“ô—õ×öUøúþû þòÙ µ † 7»éˆðá[€PÙ)] q v ƒ”²ëD»þPýöûºúùzøu÷Šö²õõôfôôÑóÑó ôô9õ2ö{÷ ùÅú›üxþcP=+ â ¢ 5—ÇÅ8’ŸIª¶ua– ´ ÂÎçQžÿþƒüû»ùoø9÷ öþôôGó§ò.òßñ¼ñÛñEòúòþóHõ¹öSøýù°ûtýMÿ0%ð»` æ W ¢Â¨Uª°_µÈŽ f œ ºËã.sþÊü=ûÈù_ø÷²õ|ôdó`òyñµð ð…ï'ïï?ïÁï—ð­ñöò^ôèõŠ÷Fù!ûý ÿê¿~+Æ G Ë ¹eÈÒŒóÎ ^ à )>T»þ ýsûàù_øñöœõ^ô/óò&ñ<ðiï®îîËíÅíî£îvïzð®ñ óŒô:öøòùçûØýÉÿ¦{L ¶? ¤ Ü Õ ’ÿáWŽ x ) ¥ Gƒ¾Qÿ©ýüjúÜøl÷öÔôµóšòŒñð¥ïñîuîCîWî©î9ïùïëðòjóõô¤öhø=úüúýØÿ·ŒUÀK ­ Ü Æ e¿Êˆô  û ¥ ( å:’ïCÿ•ýùûjúòø•÷LöõÄó‹òXñHðkïÇîcî9îPîšî'ïòïúð>ò®óBõ÷ö¿ø—úpüPþ,ຑN ï k ³ µ|õ%ÿ‚µ  ^ ü ‚ ø`¸ gÔÿPþäüŠûBúòøœ÷Pö õàóäòòqñþð¾ðÈð ñˆñEòBówôÔõY÷úø¯úlü0þûÿÄ›vJ Ë ` Í ÕGa!•Ǽ‹ : Ç : ˜ðG®&­ÿIþäüyû ú¤øM÷öüôô8óžò=òò&òvòóÆóÏôöY÷ÓøUúïû‘ýBÿú”k4ð —  ˆÇÀj¹®V¿éݱ M à $ zÖA¹HËÿPþÑüYûæùwø÷Øõ²ô¸óãò@òÓñŸñ¯ñþñ“ò\ócô‘õàöHøÆùUûòü¨þg.ï«o) Ö o Û éw·³måè †  †û’­ÿ7þ»ü;ûÊùbø÷Øõ¼ô¾óëòHòÜñ²ñÌñ*òÇò óžôÄõ ÷oøïù‚û%ýÚþ‘BÉœi + » ;åî©!O<û ž 1 »JÙgù… ‘þý‘ûú¤øE÷öÑôÀóßò+ò¸ñ”ñ²ñ òšò_óMôgõªöøsùöú{ü þ¡ÿDÎd  Î Ù ¬@Œ8ž « u $ ÂYï} Ÿ#þýûú›ø/÷Ïõ€ôLó:òVñ¶ðVð5ðRð¡ð&ñßñÍòëó*õ…öß÷Iù¶ú8üÖý‡ÿD Íz{ É à ¾ W ¤ J ³ æ á » ‚;ä’>ÕqþþŽý'üºúRùñ÷Šö.õäóÄòËññð>ð&ðHð¢ð:ñòóDô…õÛö3ø®ù9ûÝü”þY'ô·i – ó  ­ Ã3l s a ? Ç{$Á[õŽÿ'þ»üHûÔùhø ÷Ïõ½ôØó$óžòQò@òròëò›óvôvõ‘ö½÷ÿøWúÇûRýðþ£\ å«d è ê{·ž;—ÄÊ µ Š K úš:Øz $ÿ–ý ü‚ú ù®÷hö=õ:ôdóÉòròbò”òó ó^ô7õ7öQ÷}øÅù*ûŸü#þ»ÿaÒ†7á m Ê è ¿@mLèQŽ š † V ºo¿UÜNÿ¸ýüzúêøf÷îõ‰ôLó>òeñÍð~ðtð¢ðúð…ñ6òóôõJö÷ìøgúåûý%ÿÕ•d%Ýp Í Ý ¥ " U O ‘ ä   úáÆ£s+Ê[àþ\ýÖûFú¶ø5÷¾õ\ô.ó:òñ ñÚðãðñ‹ñòÜò¸ó±ôÈõ÷ö;ø•ùû†üþºÿuJð¨, m o , ¥ à Ï u ï 7 a { ƒ ‹wPÍ&¼þAý¿û7ú¶øO÷ öóôôsó óÞòîò#ó‡óôÔô­õ¤ö»÷çø$úrûÔüJþÞÿ’_:Öw è & )âVƒbÿj³ è  ! !  öÁ…:åròÿ]þ½üû†ùø¾öœõ¹ôô‘óTóBó`ó³ó-ôÑô õö÷—ø®ùãú0ü¥ý?ÿó·‚Eú“  F @ ÷ [ySø u Ò  > K M C/ç¤Pã]ÿÊý0ü™úù¶÷{ösõ¨ô ô ófóPó~óâómô$õõõÐöÀ÷ÂøÜùûvüúý”ÿ?úºw+É 5 e F á 8K)Ù a Ä : S g mk\6û¤/žÿÿýaüÆúIùó÷ÈöÓõõcôñóÂóÑóô‰ôõÀõ{ö@÷øù0únûÅü7þÊÿl+÷Å‚ w œ | l‡e‹ â M q  l(½0ÿãý8üœúù²÷söSõbô©ó*óîòëòóoóæórôõâõÉöÉ÷áøú_ûÆüXþÉ•_ ”ñ  ÷ œ  (  Ê \ Æ  V ±ÎßÖ¡JÕA¥þýtûäùføýöµõ›ô¹óó©òvòkò‰òÐò9óÆóvô=õö÷,øcù¾úEüïý´ÿˆ]+Ø\· á Ä m Ò û ï ¯ C · ! | Ï  NeY!ÈPÈ3ÿ–ýðûXúÈøW÷öõ1ô—ó*óòòäòóAó¦ó/ôÑôˆõOö3÷5ø\ù¬ú*ü¿ýgÿ!ç˜4¯ü é ƒ Þ ü à • / ¯ " ’ úNxl2ØlíÿTþ§üûúUùÄ÷_ö(õ'ôUó¶òIò òòòfòÉòKó×ó„ôLõ:öI÷øßùdûý´þv3ã{üCQ 0 ¿  ÿ º ` Ž r°Úîå»otÿÑý üsú×ø]÷öóôõó2ó¦òMò'ò1òbò­òóšó1ôãô¯õ›ö«÷ëøMúÎûvý)ÿè«\ä Ø k µ Ï À ™ a  ¨ $ … Ñ#$»A³ÿoýÕû>ú¿øo÷BöHõ…ôùó¢óyó~ó óàó>ô³ôAõíõ¹ö¨÷¹øóù[ûÝüsþ"Ý¡_ Ò Õ ™  p – œ ‡ W « 0 ¥  a ‹‰] ŽðN þöüTûÍùpøE÷Oöˆõùô£ôuôuô‹ô¹ô õnõèõˆöI÷/ø;ù`úªûýŸþIÙ–,Žº ¨ ^ Þ 3 ` a G ¿ l š Z vm;ßeÉlþ·üû”ù;ø÷öWõÆôcô-ôôô>ôvôÔôPõîõ«ö„÷zø”ùÕúEüÝý”ÿT¯,s‹v - ¯ þ & 0  Ò š K â ] ­ÖÙ«XÜH¥ÿûý]üÒúdù#ø÷:ö—õõÂô‰ômômô˜ôßôDõÈõ_ö÷ã÷×øùùJûÌüwþ1ë˜#™é ç –  Y | ‹ Ž z Y + ç Š s §«†:Ê;ŸüþdýçûŽúlùzøº÷÷ªö^ö2ö+öEö~öÙöE÷Á÷HøòøÈùÍúüeýíþˆ.Öxw¾ Ñ ¤ F ´ ù ( < B 1  ì ¯ Q × 1 ^ g <èiÑ'{äþpý#üû úDù›øø»÷Š÷€÷”÷Å÷øPøªø+ùÙù¯ú¯ûàü7þ¬ÿ0Ég÷mÂí à š 1 æ  ( 1 0  õ ³ R Ó ) V U ¶(}Ê#™þ.ýáû¶ú®ùÍøøŽ÷6÷úöàöÙöæö÷5÷‰÷øŸøkù]úwûºüþžÿ+¹7£ßøã  ) Õ  " 0 ,  Þ • 3 ± þ´4ä:ÿšý üŽú#ùÝ÷Æößõ$õ¢ô<ôöóÉó®ó®óÈóô_ôßô‚õLöD÷`øªùû¡ü.þºÿ9›Ñã‡à!RhpkOÔd¶Ç¥PØJ³þý{ûêùkø÷ßõàôôróîò”òLò"ò òò>òyòÖòTóüóÌôÏõýöSøÊù`ûûü‘þÉãÙ©Xç\¯ï!Fdsk0¼+ÖzxÿçýRüÅú\ùø÷öSõ·ô7ôÜó ózójóróšóØó7ôÁôqõQöb÷Ÿøúû#ý´þ?¶ :J8¯0šøB Ó )  Ù g ¼éç´[ÛH¬ÿþ›ü?ûúùøøM÷«ö-öÉõ„õSõ5õ+õ=õnõºõ1öÍöœ÷›øÈùû‰üûýtÿÛ(k‡…Vûzá:ŠÕ Q o g 7 Þ^«ÃŸRäN°ÿþzüû¨ùpøc÷~öÀõõ›ô5ôâó©ó„óró}ó óíócô õíõ÷9øŠùöúküÙýIÿ¤çùì«FÑM»,ç+R^C’íö²B¾8ÿ«ý4üÐú†ùkøv÷Ÿöñõ\õæô‰ôAô ôâóÑóÛóôTôÛôœõö¤÷Øø+ú™ûý‚þ÷ÿN‚Žp+Ù~ +¨ l ¶ á ì ¿ ` ÍþüÑ~¯Dëþ¥ý‰üˆû¨úêùNùÓøoø&øì÷»÷•÷÷§÷ê÷Uøòø¹ù§ú¹ûìü;þ¥ÿ†à/ ø¸i    & «  ƒ â & J D  • í  ü Ço‘%Æ{RÿFþ_ýüýûrûûúú.úàù®ù”ùŸù×ù/ú²ú[û0ü8ýgþ¬ÿ_¨Òéß¾…3 Ò ^ Ü ] Ï : è  (  ¿ 8 z ‚ \ Ÿ,¬(µ\ÿ(þý,üdû´úúùùø„ø.øö÷Ø÷Û÷û÷HøÂønùMúTû}üÂýÿAo†ƒg:î$°;ÆC ¶ " { · Í ´ d Ó  í¥BÂ>»ÿNþýäûäúýù+ùjøº÷÷™ö.öÔõ‘õoõ_õyõÓõ^ö÷ø0ùfú®ûïü3þiÿ†rC¬Nåz¡:Â7 ‰ ± « e íC`N¤'²KÿûýÉü´û»úÛù ùPø®÷$÷¯öIöòõ«õˆõ‰õÁõ1öÑö§÷Ÿø»ù÷ú2ütý²þÚÿóðÛ¨gºXø :ÑZ ¾ ÿ  ÿ º > ‹šp¬7Ñpÿ!þóüØûÍúäù ùMø§÷ ÷‚öûõõBõõõSõ¾õ_ö+÷ø.ùWúˆû³üÜý÷þûÿëÆŒ:Û‚+Öƒ)¾<¤è ü¸4mrF¦Héÿ–þVý'üûú5ùkøµ÷÷göÐõFõÕô…ô^ôfô¤ôõ¶õˆö„÷“ø²ùÝúü7ýTþ`ÿS*ò°r7úºv/ÒdãC x x 4 ¯ðå¯hÄxÿ:þý ü!ûLú‚ùÈøøk÷ÍöIöÜõ‘õnõ~õÉõEöïöÄ÷°ø½ùáúüBýgþxÿnX.úÊ›g,è X ° ? ¤ Ö É ‚ ÿ I \BÁgÄÿnþiý}üœûÆúú;ù‚øÕ÷9÷ºöhöEöQöŠöñö„÷Dø'ù'ú6ûPü`ý]þMÿ,þΗ\ÔNÜšC Ê $ J 6 í k ­´”Tý LÒþ¶ý¶üÆûßúú.ùWøŠ÷Õö@öÉõvõPõXõ“õ÷õ•öc÷HøFùUúVûPüCý,þ ÿçÿ¹~=ú¿Žg?à‹ l ˜ Ž G »öÿÜ”:á‘Tÿ,þýü,û?úYù}ø§÷Ûö+ö“õõÐô§ô²ô÷ô}õ-ö÷è÷ÛøÔùÐúÉû·ü¡ýxþ?ÿÿÿµj'ð̧}G °4‹­™;©ÕÒªa ·tÿEþ/ý'ü!û&ú6ùLøq÷ öâõ3õžô)ôäóÓóþócôüô¹õ•ö†÷ˆøùœú¤û£üŽýdþ6ÿЧŠnaPB(û±? § Ø É z í%)岊kUKÿEþCýNühû…ú¯ùàøøo÷ÛöoöEöTö—ö÷®÷pøTùMúTûeüpýgþRÿ.Õ¦}V?4-2+  ú ¿ \ Ç û ð ¤  G U M ?-þòççõ $ÿ<þ_ý{üªûîúXúúùÈùÐùújúýú·ûŽüzýsþiÿT:ä¬t=ðÔ»¯ ¤ ’ x O ›øâtÊ ñ ø é Æ ˜o?þöðîéÿÚþÑýÔüîû(ûˆúúÙùÑùú]úäú’û\ü+ýþÚþ§ÿj+ä™PÇ–kC( ÷ Ú ­ ^ Ö  Ä B º ¿ ¨R!ùåÙÐÅÿ²þ˜ýƒüwûyú”ùÂø ø¨÷h÷f÷˜÷ó÷wøùÛù¡úlû4üöü¬ý_þÿÃÿ{9ûÃ’pZRG4 ¥  D < ÷ z ÏöòÚº’r]SCÿ7þ(ýüûýùòøù÷÷`öÊõjõ5õ:õyõæõrö÷Ô÷œøaùúÐúŒûIüý¾ývþ0ÿ÷ÿʬ¡¬²·¨o±¯súKksoeUMNNÿNþPýIüAû7ú,ù/ø>÷gö¯õ.õÚô¼ôÔô$õžõ:öõö²÷nø2ù÷ù»ú{û4üìü•ýFþüþ¼ÿ——›°¿Ã°|!˜ÏÊö>]d`PA+ÿ þýüêûØúÆù«ø¢÷¯ö×õ*õ¤ôWôIôrôÐôUõöõ¤ö\÷(øùøÂùŽúPû ü°üQýþýÂþ™ÿŠŠ‘¡´¸¡p†¶žKÅ?QURHBEBÿ:þ.ýüûäùÍø»÷Áöæõ2õ²ôrônô•ôòôgõöõœöQ÷øáø¤ùWúúú–û8üÝü‘ý]þ>ÿ+.>Wjsl8Ô:aO ‡á A_r†”£°ÿ­þ©ý›üûdúDù,ø+÷Oö¢õ3õùôêôõPõ¶õEöñö¬÷jøùÈùdúûúû+üØü•ý]þ>ÿ59QrŽŸQçIgNþÙEkƒ•§·ÅÿËþÇý¬ü‚ûQú#ù ø÷Tö¹õQõõ õ/õŒõö¦öW÷øÉørùú¶úQûùûüRýþéþáÿê 7eФ¡l ] ‚ g  £ Qƒ¤Éä '?PEÿ(þýáûÎúÔùùøBø«÷H÷ ÷'÷c÷Õ÷nøùÙù”úVûüÅüpý!þËþzÿ6ìì,eœÍç Õ ¡ 1 ´ ¦ o l ´ ë  It™³¸ª‘jA)ÿþý;üyûãúú[újú§úû™û6üÛü†ý.þÒþkÿ/Í~?8c « µ ‘ D Ê 5Ç H Ý  D i Š’†nFÝ£lÿ<þ$ý!üJû§ú/úúùóùú`úÅúBûÍû\üäünýôýlþíþvÿ®jE;Ml­»¯ ‚ / ± è w Ò  Yƒ™–ŽwL ÞÿŸþ`ý+üûúDùªø=ø ø ø2ø~øçøkùïùtúóújûßûNüÅüAýÊýpþ6ÿ2Je†•g ‚ ¶ ¬ v  ©zÉþ(BMH9åþ¥ýgü$ûòùÜøä÷÷…ööòõúõ+ö}öâöY÷ß÷døáøRùÂù+ú˜úûÂû{üQýEþQÿdŽÂîóš CT<«8°_ÊçðæÅÿ‘þPýüÒú¤ù“ø¤÷âöPöûõÔõÓõúõFö¦ö÷Š÷ù÷_øºøù}ùóù…ú3ûýûÙüÑýàþIƒ¹ÔÉŽ%‡¿Î´z#«%‡ß$NkzdGÿþÔüˆûMú,ù&øE÷‘ö ö¹õœõ²õíõBö¯ö"÷÷ñ÷Mø¦ø ùwùõùˆú,ûêûÆü¿ýßþa¡ÙîÚ™-šÎåΑBÚYË!g½¿®ŽÿXþýÕû¡ú†ùø»÷÷—ö[öOöyö½ö÷÷ß÷7ø•øëøIù¨ù úvúðúûJü.ý6þaÿŸä!CP;ü’:I7 ºUÕ;”Ô ëºÿ|þ/ýóûÁúŸù øÁ÷÷¯öwöyö›öÕö ÷o÷Ä÷ øzøÎø&ù}ùÑù7ú´ú[û*ü$ýAþvÿ¹ÿ?kv`´#h‹Šd+ÔmìV¤ÐèáÉ kÿ0þïü¾û¡úªùáøSøøÛ÷Û÷ý÷2øyøÌø(ù‚ùÕù!údú£úîúTûÜûŠü`ý]þzÿ¬ì/`{a¯ ] ~ x ` / åŠäFRI'ù»ÿþMý?ü[û¬ú0úÛù·ù¯ùÊùþùIúœúëú3ûoûœûÌûÿûEü¤üýÎý¤þ˜ÿ¯ÜFitNþ… â  6 0  â ’ ) ¤Mw‘l2æ–ÿQþ$ýü?û‰úýù ùhù\ùsù£ùÜùúLúyú™ú·úÐúöú7û•ûüÉüý‘þžÿ½á!$ ÎhÜ-k‹|Iø• ˜ð.L?È{ÿ2þýëûîúúdùáø˜øuøsøø¾øùø+ùUùzùù ù½ùàùú‰úûÎû¨ü ý¨þÊÿõ#67Ëcß>xœ¥‘`É]Ò0`lW*óÿ»þ‡ýeüTûfúùù˜ø[øBøPøuø³øõø(ùYù{ù‘ù³ùàùúƒúýú›ûeüVýdþŽÿÌ?`gMÅUÆ < K F ) þ·TÉ>J/ Ò•`ÿ:þ%ý:ütûÜúpú3úú/úRú~ú¡úÃúÔúãúîúûûLûœûüü`ýBþKÿ_{Ÿ¬«œw3É;ÆåïïÚ­aìR”®ªŽ_'ìÿ¸þšýŒü¤ûëú[úúÜùÔùèùú$ú>úNú[údúkú{ú’ú»úûtûüãüÑýÙþðÿ/J[X3ó‹^¨Öø ôÅsûd£½º˜f+éÿ­þƒý}ü•ûßúdúúîùßùëùúùú&ú7ú>ú>ú:ú=úMú‚úßú_û üãüÔýÕþðÿ/Tk_8òŠé0 e ~ { Z  ¬`…Œt;ÿ¹vÿNþLýnüÆûHûúúÉú¶ú¯ú·úÍúÎúÒúÆú¬ú™ú’ú§úáúBûÇûpü:ý$þ)ÿDl’£¥‡N˜Šä+ \ x t R  Žø<YZ4ú°c-ÿþýPü®û3ûçú»ú¨ú§ú¯ú°ú¦úƒúXú3úú úúLú úû®ûtüZýZþrÿŽ£¨Ÿ}Eï†~à+]vl?ô†ç':á—LÿÒýºüÃû÷úWúßù”ùkù_ùUùLù7ùùõøÉø¦ø‘ø†ø›øÌøù ùFúûüýþ3ÿDH7Ñ#²/Ÿð$A;ÕhËúɆEÿþéüÖûòú7ú¨ùJùùðøÝøÍøºøœø~øUø*øøì÷ä÷û÷3ø•ø!ùÙù²úªû²üÂýÑþÔÿȬ~>ò˜,¨c¡ÅË·oøXzƒrIÒþ ýü~û°úú™ùIùùùøÝøÉøµø“økøDøøù÷â÷Ù÷÷÷;ø§øAùþùáúÜûïüÿýÿúçÃ’U•÷CoxYƒÕ ôÉŒKÿþ ýü_ûÊú`úúèùÈù¶ù§ù‘ùrùUù(ùûøÜøÌøÍøëø6ù®ùQúû üýþÿ ðÕªo%ÉaïhÆþ í§0¿Ë²}Aöÿúþ(þzýóüŽüMü üüïûØû½û–ûoûBûûìúÒúÔú÷úJûÉûlü2ý þðþìÿêðçßÁ•`Éz ¥  i œ ¥ J Ó + NJ$î·Šv¥ÿ÷þlþþ¯ýxýPý+ý ýÝü«ünü%üßû¨ûû}û¡ûïû_üòü ýhþGÿ5*߯v0è–:ÊC á  ü Ò t Ü)Ø’MÿþþdýÌüTüùû³û~ûNûûçúúHúîùŸùaù:ù=ù]ù¤ùú™úJûüöüÙý¾þ¥ÿNÝŸ[ £/°i’–el ª”d/äþÜýîü#ü~ûýú—úMú$úúÐùù]ùù¿øsø3ø ø÷÷ø5øø ù³ù{úVû:ü ýþäþ¼ÿ•g(ê¡Pö•!”è%÷ó#(ᵘÿ†þ†ý¤üêûTûëú£úsúRú0ú ú×ù™ùUùùÓø¢øzøoø‚ø¿ø!ù¬ù\ú$ûúûØü¸ý þ‰ÿh= ÍŒCû¨GÙQ«ÚÔ‘ v™›ƒ`9ÿþ(ýzüöû™ûUû!ûòúÅú˜úaú&úãù ùXùùòøëø ùXùÁùCúðú´û…ü_ýFþ ÿ߯z;û¸s$Éeå<gRžû+A=%îéÿ ÿQþ¾ýLýóü³üüTü%üöûÂû{û0ûÝú’úUú0ú&ú?ú{úÜúYûôû¬üoýAþÿèÿ·ˆM Æ…E¿|à éž#|¨²œvQ=Flÿ²þþ¤ýCýýüÂüŒüYü üÕû~ûû¿úlú/úú÷ù úHú¨ú(ûÃûvü8ýÿýÍþ˜ÿ_ÔŠAþÅŒQ¥lŽz4¾3+ܾ®·ÿÖþþ~ýý¤üXüüåû¤ûUûû¬úRúùù§ùhùAù=ùXù˜ùþùzúûÉû‰üQýþÕþ–ÿIùµtI!÷¾t•ðÒZ¨ÐÖȳ²·ÔÿÿcþÝývý ýàü¨ülü+üßûû0ûÔúvú'úòùÍùÅùãùú‚úúú’ûGüý¾ýnþ ÿÏÿw9ýΰƒZ'è‘z †2­ö 7‰ÿóþxþþÎý‰ýIýýºü_üýû–û6ûÕúŠúLú.ú'úFúŠúðúwûüÌü}ý(þÖþÿ,à¦o>å´‰Fìh¸Ñ¤C«ìþôçì5ƒÿëþsþþÂývý#ýÑüvüü¡û7ûÊúaúú½ùù‚ùŸùÜùFúÆúYûîû†ü#ýÃýhþÿËÿŠMöÖ»™a–àøÔzì/Xghhv›Úÿ4ÿ©þ7þØý†ý3ýßüü!ü¾ûTûèúvú ú¬ùdùEùFùlù³ùúúûœû4üÕü}ý'þÖþŠÿFòÜλ¤r#¡ò ì‘T}”£®ÊþJ´ÿ4ÿÍþrþ!þÔýƒý4ýçü…üü°ûBûÜúú]úUúkúœúäúEûºû8üÆü`ýûýšþ<ÿãÿ™\.ûïÚ°då4 K ( Ê?‡²Ëãý#dÆ9ÂY²ÿeÿÿÆþhþûýýý‰ü!üÌû•û†ûˆû¡ûØû+ü’üý†ýþ…þ ÿŽÿ'ÌL# öÙ²p p¤ ]å<h~‰¯ØjÙÿXÿéþ‹þ:þèý‘ý)ý³ü2ü³û3ûÅújúúàùÅùÐùîù+úúãúPûÂû;ü·ü8ý¿ýTþúþ¶ÿ†lWN:ÐhÝÎV«Ý 7cçÿCÿ¼þKþôý§ýZý ý«ü?üÌûTûÙújúú¨ùlùIùAùUù†ùÑù/ú’úÿúoûáû\üÛügýþ¯þlÿS?3+û¾`Ëøç’r¬Û,X—íÿ`ÿïþ”þBþ÷ý ýFýçü}ü ü•ûû¦úBúîù®ùŒù‰ù£ùÔùúsúÔú7ûŸûü{üøüƒý'þÜþ§ÿ…rkndP«%°4ŠÃò9lµ™ÿ0ÿÑþ‚þ.þÒýzýý£ü0ü¯û9ûÊúaúúßùÂùÆùäùújú¿úûûçûRüÅüGýàý‹þEÿïèúî¶<«‰<º Ag†®ðH¯;Ïÿrÿ ÿËþxþþºýPýÛüeüöûû3ûìú¾ú«ú²úÝúûVû®ûÿûYü¿ü/ý°ý6þÊþpÿ, 4QV8ú‰ÚøÞ‹ Y’½ì(pÉ9¿Xó›?áÿvÿÿŽþ þ‰ý ý”ü4üäû®ûŸûœû¯ûÒûü;üüÔü/ýŽýôýdþíþ”ÿ[EHavŒ‰m+±  ô•U‰³ãgÆ7ºEÛn”ÿÿþ þvýèü\üßûwû*ûöúØúÍúÔúòú*ûnû´ûüRü¬ü ý‚ýþÊþ™ÿŠªÂÖÚà Yk<àQ¤åLŠÜ;§&¬;ÎÿZÿåþdþÖý>ý§üü–û#ûÃútú7úúúú0ú]ú—úÐú ûNûœûþûwüýØý·þ¬ÿ½Ù ,ÔZ¤°ƒ(¡ýE‡Ð(Šökùˆ´ÿ>ÿ»þ2þœýý{üðûwûûœúIú úëùàùèùú&úHúoú úØú$ûƒûüŸüVý2þ+ÿ:[˜¡†>Ãé}Ö(àE»DÙr ™ÿÿ–þþ‡ýûüvüóûnû÷ú—úIúúúùùþù ú!úBúgúŽúÃúûrûôûüRý:þ<ÿUy›·º–B´ðé¶\ÙI¡÷W¾7Á[ù•&²ÿ:ÿÂþBþ¾ý/ý¤ü ü¡û2ûÙúúyúfú`úfúpú‚úúÃúîú'ûwûßûYüýÉý­þ¶ÿÍý,GL´J>ÿ¤$ŒãF²'¯EØl•(»ÿEÿÆþFþ¾ý4ý½üNüðû¨ûtûQû=û6û0û6ûFûVûnûûÂûülüéü‰ýQþ:ÿ=[Ѝ°¥gûRzp-¼4œtìpó§>×gøÿÿüþwþðýiýûü˜üEü üØûºû«û¡û¡û¡û¨û°ûÇûçû üNü®ü+ýÔýŸþ‡ÿŒ§ÆÕغtøG^<é{ô`ÍC·(«6ÁXî…ÿúþhþÙýQýÑü_üùû û_û,ûûÜúÃú´ú§ú¡ú¦ú¬ú¿úãúû{ûþû®ü‚ýwþƒÿ›¿ØÙ¾wú;E$Ùvÿûvù‚§?ßsøÿzÿôþhþÜýIý½ü?üÒûtû*ûëúºú”úyú`úRúMúBú>ú>úNúvúºú!û°ûhüBý:þMÿvŸ¾Æ£J¸ðôË¡!››.Íl¯JØÿ\ÿÙþKþÂý:ý·ü>üÕûsû,ûèú²úŠúlú\úLú:ú*úúú/ú`ú¬úû«ûeüFýEþaÿŒ·Ýß§J½ú è¥Lãoó…¾c ¯Qï}ûÿzÿþþþþ’ý#ýÁüwü4üüÕû¹ûŸû‚ûeûLû7û3û9ûTûûÑûCüàü§ý™þ´ÿßE_Z,ÔJ‹ ‰V ²XøšJþ¶g°>Â;º6®,­ÿ>ÿàþ”þXþ!þ÷ýÒý°ý‡ýaý=ýý ýþüý%ýdýÑýnþ6ÿ&5Uv›¨MÚ2\X'ÔzŸ4Õ‚.Öz¤+ª$™ yòÿvÿÿ¬þaþ!þëý¶ý~ýLýýèü²üüVü8ü+üAü}üàüsý2þÿ*BNCÆ>£aŸ,ºLè†%ÂWãjîdÙÿBÿ©þþ’ýý¶üeüüÌûŠûJûûÔúœúdú*úóùÂù¨ù¯ùÕù$úœúEûüý!þ>ÿ[g[4ÛQ‘§”`»a °[¬Wù—+´ÿ0ÿ¤þþ‚ýýŽü'üÆûtû.ûðúºúŽú`ú.úõù¶ù{ùLù#ùùùLù§ù7úòúØûÝüôýÿ7QU,ÙU›²§B÷¬Y ¿w/ç—>ÛcÝÿZÿÑþQþÜýnýý²ügü,üùûÎû¨û}ûBû ûÍúŽú\ú5ú ú$úRú¶ú;ûêûÂü¾ýËþéÿ åŒû6TN+ú´jÊ{:ô¡Eßkîqòÿlÿóþ|þþ³ý`ýýãü«ü}üIüüÑûŒûEûýúÃú ú˜ú°úçúNûáû¡üƒý†þ¡ÿ¾ØáÅ‚r¯ÉÁ™_Ç=ù¶k®=ÊNÆ?¼ÿ?ÿËþgþþÃý‰ýUý%ýóü¿üzü,üßûŒû6ûîú¶ú¡ú¶úëúTûäûŸü‰ý•þ´ÿÕòóÐŒ…ÃÚˤl,çªn(ß•Eå}…}øÿ{ÿ ÿ þIþÿýÅýýVý#ýàü•ü?üåûŠû9ûòúÍú»úÔúû†û/üýÿýÿ+NjkL £ MkoY;ë•`(è›BÖ_ÜWÍEÌXòÿ™ÿQÿÿÒþ”þIþòý˜ý.ýÆü\üöû¤ûeûNû`û¤ûüÊü ýþÿ¨»ÉÁ˜?Ã!XlkV:óÇ–c$Ý… °0ªŽ Ž#Êÿÿ6ÿúþ¾þsþþÅýdýòüwüÿûŒû(ûãúÉúÝú$ûŸû?üýòýíþöÿݘ7¬ú#22èÉ£vCþ·gû† ï_áÿiÿÿ´þgþ(þåý ýUýýü›ü+üªû!û”úú½ù}ùgùùÈù=úÝú«û’ü’ýþ¡ÿ—u,Æ:†¶ÌÌÆ·Ÿ}c; Û—Fèuïcáÿiÿøþ•þ:þëý©ýiý.ýìü¡üAüÎûTûÍú:ú²ù:ùÝø¢øø«øûøsùúðúßûßüãýäþÔÿ¤[î[«áþôåÌ®‚Jö—*¯5¿ÿRÿôþ™þNþþëý¿ý•ý`ýý»üNüÎûEû»ú:úÆùnù:ù(ùJù™ùúÊú™ûƒü}ýxþlÿJ²7¡ê6FJJFEA:+Õ7Õp=çÿžÿoÿKÿ0ÿÿïþ»þsþþ¬ý2ý¬ü'ü¨û7ûãú¬ú£úÊú#û¥ûVü)ýþÿÿÿè¿y’÷=j‚‡}vseL%ò°_ûŒ¦9Ív2ûÿÒÿ«ÿ{ÿIÿúþ£þ,þ°ý$ýŒüöûoûúú¦úsúkú™úúúŒûCüýþðþáÿÈœ[ùvÔ=Qexƒ…‚t\9ÁgÿŠ”'ÆDóÿÏÿ¬ÿvÿ/ÿÐþcþáýUý½ü!ü‘ûûÃú’úúÅú0û¾ûtüQý.þÿ î»s wÊ2Ret…ƒxdFÐt•¯Hó·ˆgJ(Êÿÿ$ÿ²þ.þ¡ý ývüîû}û7û!û0ûwûäû{ü7ý þôþéÿÕ¶~+¹(Ãô(;ELL?!ðªRìzú¬\òȨI¬ÿ>ÿ»þ'þ‚ýÔü2ü¥û3ûèúÎúÜúûƒûüÅü ýþcÿA ÆhðY²ô$Lez›–xM°FÕWÜlЕhAíÿ·ÿoÿÿ™þþ\ý¬üùûUûÉúWú úèùóù/ú—ú(ûÜû£üxýQþ%ÿãÿ•0¬d¡Òù6NengM%܃#¬>Õ{1óÿÉÿ¡ÿƒÿlÿGÿÿËþgþãýFý¡üóûFû¨ú ú®ùhùPùhù¬ùú²újû:üýãý¯þlÿ®&ˆØFt¡Èäúúܦ\”'Á[ÁÿŠÿeÿQÿCÿ-ÿÿáþ‘þ.þ°ýýwüÕû6û¡ú!úÂùŽùŒù½ùú™úAûüÕü¯ýŠþ`ÿ"ÔkìW·;w®Ý* ýÂw°JÝ/뻟Ž}X'Þÿÿ ÿ{þØý)ýtüÉû'û£úFúú ú9úú û¥ûYü#ýòýÂþƒÿ:Õaß=Š×Y˜Ô ò¶h ¤7Ù{5ëÛ;¤w2Õÿ`ÿÒþ+þpý»ü ülûëú’ú]ú`ú…úØúTûðû£ügý0þóþ­ÿ[ïuã9ˆÕR‰½ßòïß»/Õn°j/ýëÛÊ®…=ÚÿZÿÂþþ_ý«üýûdûçú’úfújú™úóúrûüºüzýFþ ÿ¼ÿ]òoÝH«P˜Ö9X`GÛ‰+Ís(ë»™„vkW3ú£&–ÿéþ'þ\ý’üÕû6û²ú[ú+ú*úQúúû¥ûJüûü°ýaþÿ–ÿ‘jÉ r½An‰Ž}P ¹fʼnW0ï»bèÿRÿ þÝýýIüûèújúúãùÛùúNúÃúYûýû£üQýôýþ ÿ¥ÿ"”ù[·h¾ÿ6TYAØ•Jý¶[HEITXL6ý›"‡ÿÒþþFýƒüÕû=ûÃúoúNúUú‰úèúcûöû•ü:ýåý‹þ-ÿÁÿFÁ6¦wÝA™ß$(à¤_É\7(',6;2 Ä]×7‰ÿÐþ þPýüüŸû]ûHû]û ûü†ü ýÇýnþÿÁÿ]ò„‚ÿô_ÁY‡c0î RÈ”techleMÆP»U‰ÿ»þ÷ýFý¬ü:üùûáûöû,üƒüýültfat/inst/signals/ltfattext.png0000664000175000017500000000326012612404251016724 0ustar susnaksusnak‰PNG  IHDRX‘œ’áwIDATxÚíÝm¨eUð;3:YÃè4•"¦"ƒÄ !ƒ„„`B‘Á€…B‚FI6˜T ¨ô"¥øÁD1?˜¥É€DE£R†h&J š0Ým^pæÆ0œgÝ{îÞç¬3/k­=ü~ŸÎY{¯gõÜ?÷^Î>/ss@! áØW<2Çi©c±µµï¦zûÏL›ª¬\¿¸à·Ó¦*kÏ-.øò`ÚT…`åûØÒŠ›†Ò¦*+ßK+>4”6U!XÙVîZZqþ}iS‚•ísã%¯H›ª¬l¿/ùÛ´©Š¢ôX/VôÁ¯ß;þ³=pÖ0ÚT…`åÚºü·Æ­ÃhS‚•ëÅÑZo½5ºµsmªB°2}<Özà¸yÉ ÚT…`eº7Öºøâ¸ùÈ ÚT…`å9iñß¿£Ûÿ}ÿÚT…`å¹2–ºmnsíÚT…`åyj´ÒÁóææÎ=8º·}mªB°²œ±´ÒÝ}fqÌšoS‚•åÛ±Ò–CwÓ ³¾7€6U!XYþ6ZhïºCwOÛ3ºÿ÷´© ÁÊ‘ž`xòðÀÏcà²öÛT…`åx(Ú|xàó1ð“öÛT…`e8e~´Î§µÞ]Û|›ª¬ _ŠuâU£÷ÇÐõÍ·© ÁÊð»Xç“£¡M1ôÇæÛT…`MwöÑ2¯¦ÁWbíó[oS‚5]º‚óÝ4xk ÞÙz›ª¬é^‹e6¤Ásâ²Î®•·© ÁšêÒXeÇâá§cø³·© ÁšêÑXå†ÅÃ_á'oS‚5ÍšwF‹ì[¿xüÔ¸¬³g]ÛmªB°¦ùJ,²mé'âÀ×ÛnS‚5ͳ±È–¸"¼Ðv›ª8A‚5ÅQ¬q~™_½ôȪÅ¡ šnS‚5Å£ÈÃã‡î‹Cw7ݦ*k²ÿŒ"Ÿ?vQzsUËmªB°&ûLÔèxI_º¬³¹å6U!X“=5n_~ð–8¸möÊåÚT…`M´.ž¬êºÖ|v\ÖÙ÷á†ÛT…`MtC”x¾ëðö8|SÃmªB°&úS”ØÚu8=yú—†ÛTÅ ¬ãô€/ˆöwþ­[û¿8á¢vÛT…`Mrw,ðT÷ éûûÛmS‚5Áª7c«ºÏHŸKº{õlµ+n«Áš`sÔÿOÏ'$/ŠÞ›mS‚5Á¶¨ßûAX÷Æ)¿n¶MUV¿Ä',\ÚwÎ'â”÷ÎlµMUV¿oFù×ûOz9Nº¹Õ6U!Xýþåïè?éæ8é•VÛT…`õJ/^XØØÖGãM‡éݬMo«ÁêõàÂŒ>ú5 l«Áê³úß³kþ”l«Áêsõ¬¹ZX¸fÛ*E°úüfö`ý~Û*E°zœu`zÆ<§ùm#X=n™ž£å¾Óü¶Š¬;§Çh¹×šßV1‚Õí’#ÉÕ„K?l«ÁêöH”ÎxŸDúòGßV9‚ÕéoG髦Ÿ}aœüΚ¦·U`uº.*¿ó¬gºý妷U`uÚ•šszúÜÈgšÞVA‚Õå¼xÃàÂ9çoHdCÎù•¶U’`uù~Þ}RÖ„çcÂÞVI‚ÕaÅëQøGy3nŠ ÿXÑì¶Š¬ŸN…3Ÿ˜:3]º¼Ùm%X~uwåþþIÿí?Öì¶Š¬åNMïo¾'wÎ×bÊžÓÝVY‚µÜ–TwSîœî‹9[ÝVY‚µÜŽ(ûjþ¤_Ťù“Šn«¬…5Õ±ãóؘÊÞž?ëš4kcþ¬‚Û*L°–¹ëˆ"²&ýcvW“Û*L°Æ­|#ªþy–yéûÞ8Êom¬Ú;.?ô½³½·ysš—u¨ð¶J¬qO¦ªçÎ2oõ|ÌûeƒÛ*M°Æ|(=oðÜl3÷®Ÿmfm'Xc¾‘ŠnmæåiæÍm«8ÁóRÔ|ïôÙf®LÂöRsÛNÿE vÄài]IEND®B`‚ltfat/inst/signals/cameraman.png0000664000175000017500000011257312612404251016641 0ustar susnaksusnak‰PNG  IHDRy÷ºtIMEÚ2N›¶ IDATxœì»ÛÏwÝu4Ƙsíçy_ûó)±±'m’ˆ&1¤ÐD@T …6Nœ¸B\V‚H´À \ T©ÄHT´Bâ –rQ¢^T4 Q[(%jhs §9çäDvœ|ög§÷Ù{Í1¸Ø¯áŸàîÑOz~¿½×škÎqZüo+S®„ /Ó½—-'(›(sÊȲ’F¢²:A»L>† M¦2Ã80¬­r h¸‘½6ÊC¦§w”Ö.Žhk¯F6Ю]£8µ X5r*Âáµp6 /„®”zV¦—cB}¥R5#rlm8•ÔcÌˤT ›¸ßÄ.”"ÄÈFʉ5À(˜ÁöMÅpÊœA˜:’k]ìx•iJeÁ"uY¦lWƒ=æÝ«ŠDä’Ø‹é&…J–ÜÚÂΪ€tWõ Ó "UÅúXcd!H@ jV ‹³‹i у(n!LE€ †Ì"ØàT`V¨0 ¡: ©P‚Ùa¡B »¨½la©éI9¡Êd` K»ÈÉtt™Û“ kL˜L9Ñ–¶Ä¹ßl'6æå>—#ÄLœÿ¿êcFqÃAb•7,†W& _€çöv¯#›W°iì‡+†ã¾:•Œ§ho¢’ÅÉP<ÜŽ¸ÈäF*T]d³€jR,‚š"ÊE5*…€M·Å5"B2j3™ØÄÓai+åH  [ÀT™<èI]«N`0©ï&ྴqØÍtVñ°öAU‘xÖV‹¥*`ºžM§H%Õ^¢U³¨Ã/°ZfšÔÞˆÀ¢R °bäv…¡CP!)5ªì.¤…!Ò »Š3C°ÀÄFxäÐ`XHÍ8!›F½u UweÂ(”ENQ ç’«05. vSÙî(ꂘˆ4"ÊSB'¢RaQÅ&:Ì:«XƒŽ(R„HQ"BD»“$BBÌ@ÂŒv1’É ¨Q›qY’M*¡á0èÔ†ƒ‚õMWPn^”®ãg¡ÏŇÙÏâ}T:1 ¸çŽRPÜW“@©×ßéóù~Ù÷ÂUŽÂäjD.™YA¸ìeêÔ¦‡ ÔµFqy×P+¦„]h+C“¶Ê¡hõ%šsœí³‚9ìÞÀ}e?>é\^Í™:ëÉÂÙµ=ƒúøÔfõɚΤDòÚÏf]…;ÝGãu[N!S“‡ëÞ¤p–á'Èèªà voÌd8ø>¼›¼vd6Ï{6窘WíÔ‹ÚÁÞ,ÎLH°‘eR,ÓœBÝ•¤:#ãÅã•Ç)ä`d9«ˆg†(õ±° ®Hð 9å© +ä€àÖÆØÛŒÂ­ a0vLƒ ˜ÜA„& ÖŽnÚb4Qv!1U#h ™„ ÀpÖPiƒ"x#ÚŒJm²7¢FS 4Ñ™"P 2Ê6«+Aì…Úš~¢{¢®ï.À£«,ƒ ²Ù)¤åÊ"ˆQI‚Ö— FÂ@w1À„KvEÑX¸©0LǤd“ C1‚KÚvm3•á Ì.eeºÔCB’5’Mõ O8ŠRHF¤8(ÖÔ.X1,Zõ][ž1ÐD™C ´„µu2Û›vÕŒ.Á ·Œ”Ã… ÷^q‡bOWIéH(‹…bË5éJÄòjçÀªèH÷¢”ƒk±šT³°TÕ»ÐL¥€\Q/ñÏšÞP{iª¸ `%FaOõ)„åkMç¬ïƒÐ­¨$)]Q•‹…®fZ| MTçÈjî:JTWÔåÂ!rETD¦åªÍãõè•ôqî²]!Œ !¦hÅ#]‡kW‡á EâF‰™“ªP» íç£6Z,]‡IÆ´˜”-4†Cmp¹þ¸„{E3Рɵ…„ ­TØ €ò"îç ªÁ‹² ½!™ŽCª]œ $Æ(€˜û¹BFIÒ1¬-X1è08å`Óƒ8†"ƒx&ŒÚ÷Xy«îŽÊ}*ÆÄC)ôD‰³»f39Sß'4i©(R5êÊJ”ÕY@T‡‹JÐ$˜*85zo’ UÄH¦|C¦MdYÉ()¢^ôa/ç^önÃ`j 4Œ!†: 6 ¦¶•6¶¼Wnk€v*v&’-DÈ&ää, G¸šQ}œr¶‹—"8K@a÷®`ÎK“PY“ôˆÇ…ä%íyþÌÜ"K€ƒP÷z¥†$íÑо€Ô¡0ÄÔ…8Ñ0œÍͱý¤‹s™«ö .NÍÒA„ âøz<5®][$\p›Öî’L³R©JC€:b »Ñ$"µêcY¬h`Ð±ÃØ±7JD912È…Ôl(¼2Üh¿¸YQ1´fAX0)LMzj7Õᦒ”Rð’Dº7ÅÈJŠ-‚)…Šf!TA¦p#|³PŒ@QË@§Êñ‚ÀÀî@pdâ®)Ä+çÖ€@ÚDÅšðòx'Ay¯¢ kµ 2Æàf6U|˜Bu|,I’fÈ{šsƒ%£†¼´9Ð0‘”ÃR*‹7ƒá{r·#v'rä1Ñ÷—D€R.h Æbx,f¬+"“¢2DËys ,jR´4D¬QrùØÅ]6pºfÖ¥K©ñ0 ÎŽ £¤®ÅX6ËB¼€â=®cÐÌ„%Îz’Òâ>B˜*׈ƒòCØ× b·K~¸Šs\y`¨‹êŽ·T#·§Î °ÎÊš:¸—0Eß_nÉh´0Ì®Q0¢U mMíÞ]F}ŒîšÂC´TEpÁR¯äP*”X…Ââ‘,ªƒ*·ˆÕ.É4äþí‚åcj*!š†Sgg¸i`?€P A$1p²®H‚qà¼Îò¥( slnB—0uÂÇÄ(†fclÚ“džhxÂ0Ó7$gÆõ=E"¥€QÜ$mô&xhtoeBO[ÌHn@ÑÌBRW„žˆÚ£{|ÑÄpú ˆq¿‘1àdžs_ŒÝQ.Ø `ƒ‡b0†tÊä´#ÁBŠˆ§, 2r؈Ìé€`¡À¹+ÑÁ•@Qfà!0ÔP«WB!Éáì °6ç áÓ*ÊeËI& †4·dÄâ «2 ¶fLa„«kJ¤ ñ]íž  c!ªñhj‡ocâ­8¼èøi{f$¾pra{26ÚRIIÕ‚®ú7U‚Íð’@¶X¬2£À•Eƒ ý$’I³‚ò ÔØ©ïÑø1”¹Ÿ–Ê–2œàêDp@aöã¾jCf™S3$²GššAm\—Q/©ü]‰· µgP:1²“ÚðuȘÄXY›œÇA5!3J«—EÁ@Ì ®‡Ý`£wŠtW‰{],&`®Ãà¤rªï²!¢L¨ yW=˜¨Ð 3ÀÝ蔢ÝXèj¯½›«!öB—Í.¥B¥Jb{uW•J9X”Tn¹Ðiˆ[ ¸XŽ%,h§†+UŽR)—î÷KÉTÜŽy%LC ClkBÕHÇÍdéiÎË`voëLs;´+Q#2£NLíp’!° ¤ ÓYW"o×$Ž5–7ï&mp"UA*€A åU2(‰Kš,d]B€huˆÑY 6ÂŒI“Oö`T©0çÆpÏ5‚šÈa{.Üðæ>ï6ÉÓ1áñ*Oaµ_ªÆõØ]ÕZÍ>ÖÝbQn€™6Ô90¹ý^P t%§qÏGÝÂð˜ØcW 7ĨШ”<x à‚LEd!øZE—$]°ÓB4 â `Z†| ï39š(ÄK·5èÁ¥Ün ïñϤÒHÁdÝÅ›uè|ѽ´€F§ÅÎ „‚¹ËéTP£Ý@T©Ör£LÝrX 9ȽÜÓ’ŒÒXrb̬³ A)á"ɆQˆ¥zã,õ¹¼® ¹%ž×J.™ÜŪ³¹Ë½«ÎÈ«¡¨‘l4i°$œ“âÊ,¨Ác<«shæüÅøbúÙ7|ô«Þû‘çÏR±+0Ye ö>,H¶¥ôµÌlå"0·XhZ[¸µ\u ëæ6#Kœ °Pž[)#©y”)Û˜~ÁuUœâÃÁrqÔ/séj—Ýz@,öÜØSC¸I×Õ@ÊÓáyðB‡©Í”qÖLøÞ/Õoþo?þÛO;  ¢¾âëÿÙoÏØ–k`‚4€¦¯šÈ¨ Äõö²jÀ ¾mI†°F3+@\Ñ…:1†•lQÝš7(ð*š˜Y6ÿ’%J›zk„P5…Š×Õ!ñòÁ)FSÜn‚»ŠŒ[;}¯³*—œŠà¡>û—~âÄÃÛg€XxåÏ~ÛÞF¦6è—60Æ»/G™º\Ç…<œxëYi\»g·öxËßSUlp,NójlÈÚ=¬‹©]#c]²0õÝiE½TÕå’JLª[îv§‚4¦ŠÍaÈR<œÖnRnº.éæ-¦¦ú¬Y4+•_ùs?6_l)Ôùw_ÿ¨6w³†éÀRMÒÂÀ©L*®ë~ t*© ˆ­ÒÈÜ®—wfг¼ËÈø¥ÅŸÂî;”{]îKת3uÏnäŽ]Ýp{ €ŽáY€wÝ¢Cl‚1¯áæ]Fž?)¶lÍF2s?úç?ïÚîŠ`‚€ˆáÿqÌÁ}Ši’Ü;WÎ&ëeB$ª€.Ü@ ÌAD"Rµ³Èb§Ã€E×tóZH ,ßL• o‹ d}7ßm'ì¡"´'1‹3·«.ÎKqQ³hH¸ÝR±N I–ˆåR®7êg/Õ©­fãVŸÃýïùÐgž~ýÝ St£®ˆåÊ&»è{X ö-¸øÖh i1¹Q¸3¯u ˆ ŠR¼£ Ñ(@#²þ¤µ†)ˆn¾˜ ãW0Ú´,ÀH`šÄ÷({ÝÁÆ@S8“rM\÷SŠ}¼öCçŠt¥àúå‡oxñ3ŸþÆ”ÀH€¦ vŠ×BµHZ©°@ÕÊr WÄÚØ›x°Ú@S‚Ð(aU‘>ì]¨ÃJ)âU«ÈV§ ­ª7ÿWl' BV‚2o¯×'?øìüûßúÐÆ°%t ¶Ày8a$n¤MËi¸ÒwáJ†êeÑ•1=¨©d9½Ìu2Œ]»j¨aöJTŸú¥*ͶRz@Ý9&¥ +r-à‹BÅ5„ö € t… \!H™!8ºToüG¯o¼´6YÄR`@üÔç>û¥zÿsU:˜ëŽulc÷$™¡ {ÓÌ¥v`Xvzö ²·®LÂu1†O…ÉÎbè°  ëJRßÛ½Y‹ ?îÒ)ºÉ6n,†Uì€ÄæÁQÅYaBGTÑ…¹ã»2DÞZ‡þÃß0n¶A%ê –|îóøÒ;¾D&± …Í„SŒ ÚRLó«¦Ã,CNèXEB–„t€R¾Ü¶d ‚BŒPZ{¤RÍU`­ ã¹ÕRj‘ ¶éJŽ‚ê¦6á5€—t©1†V—ãÇžJ"ô°~ìSºwÉ™.i³%%Oo|î§7GLŸ×¤BLÙ“I¤‹3„í+gfví¤^Wì ð̦ÃÉ9®•2oÍv*åØ;Ø|`!›bÀ“(îú˜v%š„” ½aFgåªÍ±Ã0›}˜À½ àh˜#˜Nœ rGÿ€s+†þç_¼@ ‰l\Êø¶ºùðáðb¥örñNBŒI2Ѭ§Ç –%N7nøv©NBªðq–˜ÆÊÜ.da ˆº*C™­IZ •.tîæœ@£Ûá¼x±OÙ(i&k^@5S c2—9¬‹¡š„݆`¶Ñ¦~Ò_~ÿ—±1f]œàžÊxë·~è«_Y³•v™.7 y*¬!ÚB4ËH¹o9r?äî6—4€axËC±5·úì”§;¸Ù)LËdÔªªÅq‚ càžŽÁCŸWŠ«Â ‘¦Õ·«”BA°onÊ®"0¥×/ÿßþ#¡@WàþÏñ~òµ` u›¿l™‘K&7h¼Ì‘S¢íûë&&`ó ¢P€âr›ŠŒ¨\F1XÑœsáB飉=º|ý¤8‚QÙ Yb]ÑRÚ(ÇUËL×fåHì/_¡ÑH3T`¯_¼ˆ0·À–AæË5A0žM¬yœ[çí+ÓÞ„°1È6hP}!šöPzÝaêèI2 ¢Ù»÷÷ó©y‹¶¥Ë×R.LL^^< º,h#§àYÑL…ØyÈytžDà Ó@5·ébIu*êzö Aˆ—ï ÜøùˤèÎ…ùšÇϯÞÁSOñ¼Ã§Ü#Äw<šk=á+W&F`0@ƒŽB{9×ì‘{:ëbäÝI_=Ä£0(ÈÕ™Û™1»­A”P«xµÛÆfÑ7Ž#_qÐ†ÇƒË ´oóCÃ’ OÏo{ âñºo4èx¼?­ïxx†j‡.ŠNDr \wB}UGÉÜÈe‘$`:÷Þ‹"Ýâ…ÃBQ%ðHQÕ‰˜™ÞàÍ‘w­:u§¾Ï‡¤œ…µog'ȺÓB­Ù¯ÔS.w’#eÖÔ@0~ñ&¿¼;!Áð–™õükŸÿøIƒyú›oêù×|Ãû ÷Ù謫fY“J€Ñ â]Ž! F˜ %çª;¾{G3æád˜æS‘Ú.:ë–Û ³°…Ýìž Hª]OtϺ ˆa—Ïì«‚Q˜+åeëW¤qjƒèiå\ë m „~ ´å<äû;yYêÌcN¼l‰\ïøÀ+_õ-¯|ês9P¯þêwþôküè+ÿçZ¥ë°Ë¨ñbÅA¹hƒXºŠÑ®«¨yˆ¶«³ÉÔÌҵʕ}g\÷ºVfÝÉ >­]ªÜ·ùŠ—tñ/Cëé  sE»ŒòeݩǬ0„b°B÷î¾îh¤Ñî›x)­D‚8$JÿË_ügøÑo~ãï}ñ> |öý‹ßü¬žïù«úð¯~öïk=>ßÇŸØð½Áx«·äí¬—¡¿™ã’k3!V†˜u6›"É`Þ¼öòÔ €HÍÏOé–Q˜f.†FÒsÌ–€³ŽÑ†QIM›,3½¼ËQ†¨ )Ly«¿,ûðø%íø—ÖÏÿú×ü\šþÞo}_¯¿Å?üɯxõ3Ç«Õ5/¸ÿúW½øŽwž‡¯Š‚Lq\ Ù£]Ü©âÜkÂÁuß c °µÄÄLV®Åm)†pª÷Úaù\iÄgõëãé!Ó&ª™4Ž t(:ž‚ûÕ$úHÔ TÅ!%‰ëN>AGþ£_—íïøÓ}Ͻº_ûg¿åë­ÏýÔ‹~×›ÿÒzÞ£¼÷ó¯}æ›xªpÃ@nAU¾{&,JŒ˜¤/5šlÝÚºÑ4TO’g<2„lkÌÜœ&Ø!1µàrjÈ@‹ýµ7ÉI×¥¡”ÚhÖ.F,sX=eW\ï 2§3SCèEߪJÏËD¯Ï{¿òù™WÏàCÿÞû^ìWÿïßzý×^ûÖþg¾îë¹/Þ•ùÍ~dž•ëíõ2·U®d+:É-fbÖ¶ƒœP3ÞñêåÙ)/𑵉a™ª³#§AèÙ ÖîÙ óxq~Rª­Þg%D*ŒNñô|4®e# 4ÌEd—ÊÅúìß½nI Ôçk?ôþoûÚ¿ú¿ƒßüÞzû³?ýÙÏýîkׯ~Hêçü¾?ò£Ÿ5Ç¢~ögû=ïþl=|ôýo™wÐJVR•‰Tï[óß+³› D WQ/Q?•ã©-%{4F‰6pØR›Áëj¼u$½YÊ^{úDï4SvŽ3; ›è˜mu‘J]Ëœ2AºFIÇâßzCå{ ൧/¾ãÕoÿÒ·þƒ'?'Ö‡ÞÔo¼õÞæñï¼ù·óþßüâ/]Ô€ ýG>ô×’ã/gHZÓ–‡2qß´ÁæÍ L¶Íe™‰]¡±\P¤Lÿt¼ëáÿàUü£¿óÚïÿ•/¾æÙõÕþû¿g¼r}ðÃë{¿÷m]h"…¡²ûf>Úí$Ú¸P;Üå5‚€qùn½·„àå—éÎML'PÕå–°k® Q:£Ô `»úžÅܽ š³ÐNê¬Êã—~úgòÅ_}Hï|öô[Ù PC‚D½ã«_ûÒÿ­ãC×õœìµ©óÝÏæµOÝÃ[Gsù=¯þÌ?ñ®ÿüóßñ¯þ›ŸþÄ'~£:~æ/üùÿâíÿòßýÈ÷3–.WÓž ß·ö¤0ÐUmkß7–Ë—Íy<]¬à¡dÝa_îÂÙ`S ͵k32›V:(Ò"à]§Ê¼dÀ5&Sîõsñ·@–åŽð·ÑSt ½óƒ®þÊëªùÁ÷Ëûɺø°|êõ_þÒûùðüÙ›‡ƒŽ— IDATþÀççŸy8¿òþ•¿ðKÿÃðw¾øcà'‡½ãeõÔ ¡‚¥Ý&–WHîX±°:+µ+¨òSÝqó)®åÂ&QýtÔ'éŽBÖ¨Fµ°J 4,ˆÍÊ*ƒž,0P+ŒÖ§þãÏÙ!Ê&sgëq‹>ÿdÞE½ò•¿ú±›ýÐ×:´*_út?üã‡~âkì¾ö{¿øúù§Þóßñ³þÔëÎ?÷ö¯Eê7ö7#¤]¸Ð÷hnEwð$º³Uî„Ð÷Cq…`¶åK) Æ‘ðâj›íKB°é‹×:^°Ä³f…¹ÉP ƒ¾ …!?äíÿìu 4ŠÑ}w¥†|ÛÊxç·ýCäáÝßö==¼÷sëx®ëÇ›y÷õækú@⇿é‡Àw>½ø¾ðšÞxýêýŸÊ÷|çÿןÈóõÁ÷‹?ù-¯Ì¤j¬øÙÎ!®‰Çç¯B•0ã€#2B"övOš Ö¾êѹf âG×Ù,x?X9Î…DŠÀu›z­È#a0é}LQ&¾œô*Î;ÿ»ß})úî;ÃÉÖ}Ú?ýŸüòù¬Þù-_üÍüÎõ9/kòéw}é Ÿyø½ïüc?ò¾Ï^ú3?ðo|¶ÿÿ§þá·þƒy>Òyåûý ¯|U=ñá7VÄzÑûnúSÛÚpÞ~›sØåLj‹ V¬:S”a ËĺsmntÚhRž2}ßúQ:.3·Ã¿ëÿaê݃-;¯úÀßo­oïsîí¾ý–Z–lY²ü~cãàg060Á‚I%©À’03L&3@Â<¨!C¨$2†É3ˆ1` cÆ€ñC¶å§„-YÖ«ÛR«[÷qÎÞßZ¿ùcíÛæ”JÝ]¥*õÝgë[ë÷Z³µeÍ› Rs òÚpÏoT<—¬Ð’b€‰¤à]ùÎ7®i/¹éñçKÒ šÖó:⮾àÉëgζnG/º¸óç5Ýv÷àÀ¯~×ÁÓÎåáµýÿØ¿üÄÕó;wÜAe °”—"- ¦Í4¥yd+û|¶>» ‚  jØ6lÝ£“‘ÌfÚzºše¢%DM`%•œ éÀ{“AV’ˆÊµ‡™ÌÚô£GŽÊýž´¤@¹È 0­yñë?д4mi¹}x»í‡çv,?qcþþæ9/ ˜óž·™»ñ=$ù»¸÷¶a¸íóüŸë6žÚ;´n»“ &™’(Ëm M.%Dº˜ GKe²LcröÅž-©r-‚a™Ö¼.<‹*›“7¥LÙ ¤`ôÞÍÐiÕ\§hfp˜½å!dQO¥4–(žVH@ÛÏo¾ôÁÃÃy3O[ý±hç´šŸ¸é¯ºÿ£ß*yb˜þÈ™¹9zßšÉÕÞ×½í­ÿŒWþ[Ï<ï?m¿æÝûïûcà¶ÿË“žÆ¶U›ØºKcveƒ—¬pÈÒÒzëdc Å¨ŒC ˜w&:Qx@ 9æÖéê4ë@°Ì›f‰>À+EÀ–™Öͬ±Ú6 óöî_›¡ÅøÊXv“bÂ:õǰóßü†õýk“‘P<>4ë8wáÒŸ}öe2µ ¥î–v½ï¼þù'Þ³¹qݾñ¹çÏì¾qÏþv¼xÓ.ÞºsD@áAÆf€Ïæ §M0†ÚL‡e›†ðÃ3¬«¥†. ï I\ðÀª™ ¤' ¢s È0£!9¤ƹÁ>ÊÿôÍ€¶¨[)"—£$8uE€â_ú–çݽ{„‚ú#GO¾xóÙñþ;¿ü+Eo†ìhq~»Ûý%ùÌÓ^|ÛkÛÓV7^‘oå›}÷A3QcWÐ3YêE¶´nÆèMÝå0 ŽDŸÙC˜Ú’ÑJ2ÂZÔ°u Së„çJöL¸1•¶dÆ”U‰4öfrM#cõŽŸ>Zà©zé%"Œ$CÐÁôGö†Go½²»÷Èɇ§„¸ºÉÓÃsoz](|5±£kEÞxíÜ<üÌ»Ž¶¿ô]ûúŽ“§¾û‡ø†>úà]Âú«iÂ’µ†Í>­¢Œi ¼$ë„@8†D¶ð$%ÒL  ŽÉÞ„ÖÝ,¬›iƒuw“9g–2§±[¶ntA a4­\ã¾y£òg…fˆ`i*™æx´°Àéÿõ•Oyò}#Öçž(5éö/’ã:™„Fc DŸ{ƒãÞçÝ÷œ=h÷½å9\»ò¶ûô+WúUÈ&›½·b#!Î6q’$ëC0„.Ñ’Ew’HLt¡¬VŒÌ,ŽD ˜›Cš‡Q£Ô€$ ‹U7“0Ài(ot r0iÒ0¼ãßo)õ•ó¯îQèè}W.îž×•iÌøld @¿òÐ#<÷Æ Ú¯÷½4g ÜLï„ùŒkç÷pâ3·ì=: ¯Ö»_‹Øé¡ú+ex’žÍ(šY4ƒY7ë «TF£ukÑ2,Àd"Z7ôfj4MxgGŠNÄViÇÂù0ö‘“<\ì–FÃÈ·þ¿GH˜)…ê 0+E¯3`<üºOü*O~z=§JäK0¿êÔ­ÏDå¼oî™ 7§^ôä[Þu4Lùú“û³¹YÇÄ”ÁækKf Âe„& ½þ?´@›M†¤Éá ãLJ-ÒKçNQ’²ô†žlYv ï£ ™5·ðR_ymfpnæóÈ Á4ä?ÿ¶^<%–- óëßYáV®_˃Ÿz,¶öÀ¦äpÆ¿1•k ïÊ%4r¾ð”ÏÿÚÏ~¼øÚ¿ñ–éáHŒlf@¤œÓÐ>[Í€b0'7q6yzvG“2XÚl¤ÆY­Ã4„uÑ„°ås³ð áRNœ·=#¥A®>EÌsL Ð+©tívÿ?ÿõId9£@÷Ù%IH@™ ¹µiÈ_¾‹~r÷ÁwNÆ"~·5Á’ºøÐ­Tgö;úçíå—žzÇýY>z-“‘‰ìR£2oäN÷LËfT&ÓÊ‚­ìæ>xf ÒéÖ†škGÆép4xq‰dEt¥i°.+F×Ó{#–Ò–njÔ0ýÖ¯?^™t bI.s°H¥,þ@ŽÜÙ|îÏ¿xøô•Ã×]ý´ÏÇ´ð#[Q½ /ÿÝKg¯ ÉÝð;{ß¿>Ú§¯§ûá ï V•hÝ5—ÂÃS`Oƒ‰Ð0[¸±3­[„[§iv-*m;†sÆìæ&4óDÛÂ’Ù@$M¢)=³;j¤LCD«öÁÛþ(ëç½^ô*ý @Å# B°\Aý‘þðÇþÚ}8úrÜù’€EkÏ9÷ûßññžqxxâÙƒ¹fk‘'ÿô)ã5zqÌ ¶TobXH.˜’•L Ñ$dÀ¥nisS˜¦ÆÈÒ—©±LjÖ+¬ 7‚m·|[?ié•Wd ÎF 4šýð½ýØLê€rJÆe (5ƒ Ÿ»s>÷–¹¹u^øŸ_ŠLn²ýÝŸxÓ ŒžóN¾r+„mmTÀ˜=ÿßÀ-W'nlsK‰Æn† îª0&AœËi8;›(çlÙBŽ”E›]2d!̳ÍèmÔܘj•°c½Ø”†y” b!5Zë?öhË™§U.-!tL(0ŠB¥ò´Lì¿|͹¢§n|Ó;ßú9ÍÉÙ?zÛ¥¸ü`´þÄ“ÿö §Ÿü+ 9öï¹Ø Î`&ú Êh†–ƒd’¦H1de:À±:§!„ Ö‡ 6 ΄oIŸŠ|«€KµÃ::É0‚LZwªu#Á¶ùÉU–¬z¾*˜Éj„Žs=¸´¥Ïˬ_.¼ØgoøÑwüì‚4<Û>sñüêÅSÞüÎ×|Ó*ÔZzâ9|ú®9î{ìJ³¡Sžá€wg µ>›z55ƒ’ã„4#Ì©aª¤Ž¹ä?@Ú(ƒ aT·’ê¶ÓfíÆ$$dfë€ K[Â,†xóŸe¹ê——=­:k‰B—£¬·Yâ^£µíÙìü|èuRÚþ ¿çâ]¯ü*£îü»î¾u\ü§ëù›ÔE»ð¤óšÍdaÉÈ0y¤‰TE>™©¡‹–L“Ì3e«ö´•†ovÁ2Ý„€Ê‘°ÖeìT6)ÌÃ$€ê¼+æÈ`S›úÏz'è{?ˆŸù\ZK«oôg^‰°|àæ©dØôÃw<û‡ Ù˜­Û Ì8Yú”Ù½¤ ©·ž-­—+ © ªM€-åa¡ì^‡3舖¡#­Ù1ªWêQ4ã$EK$š›þŸ?ëË“¬ˆ‡ [Šzÿ“„'J…V%@ 1'ôÈ„ÇÀñûvßt¨¬i›¸üà =ãúëÛ÷Ö'ÿß;æž÷@N_щô)a ¬w¹0×”ÍN$º\¤˜¹JV͵ÃÂ- ©Â=MÎ^x1‘iY—ͨÐTn: ´N£Ï%–^½í³@cö˜¶Óvš{BÊÄñ›,(Ó>Rà‰ðx"Œ€5Î'ÿò£U7©¤ü5˜.!6ÿñm—5ÏÓÏý‹|ú÷„}ÙKgD°[†RsVD[ô€`¦È"ò3éRŸ`l‚fT¨LÀ*éÒÜ!æÃ€¥HóH£\M60Œr`¦©,[B&3hÍ>ø–s“*Ó>3#2@õ•·*ˆÆ,m¤[¥ 3#Í’ÞþÞÓú}Zc*9 €ÞovæëÚï=ÿ¿ÿø »»Æs?öŠï¯à;«§KÒ‡q¦äæD nck dÊküpëÍ[¦Q2OÐŒ9x³2|t‹6 ==(kžÌÑPÚ«¦>ö¤ÉX¬z°×i—A´iðƒŸ;Žë*p´êüü,DH¹Ý2.a$0%ÜÒ¦áï¼úGßDE}OÂåûŸ{æè¥¿úÀ?¨]ßÚ+ùþÐF“N}·2傸W×lQµz2)Y&$,ݲ¢WêF뜳øʲºvËToìØeéƒ/Z+]i­ºjèÞ†Ÿ»+0UµF š»c¾Kj„•' $ Äñà¢âåßüCHgVç°Ô ÅÞï}àóŸ¼ó{_9èà3ÿôN¿1æÔ?¼mJ8d'#M–µ³%¡„—$Æ2;Q:_!d]LSEHÙ:@#„–HCáIÁÖ’µÇÁ,d³”‰ž­[Švÿ»eB–Ü£² ½%Kû“)RÄB‹iAÇ*Á³Jà«þÖ|¸\`[„$ßùÚjï {ÞÑûþÁ«N?þæÉû¥Õ8¿æåS³žáØ$ɧ*tލ"Uk8ÒÂÉô.Uc@ì *¶õ Gœ`ê õ´°É+ç¥{ëÎ ÚL/qéLë”ú0 aMl¿0UtCA@01…*:ì:´Ð¸^Khf%þ”øÊøo>œUcëÇ äçpû3~ ÀY¶\Ù|Èç~sŸH¦*3ØRJf­ƒHªº$'S"E "õZGSj½mD¢u3@‹ÉZ0ôTÎ °î¦"S Q²`¹¼¯Ý-A‚™ù0 C3#Ió6Ô+(Q‰Úô ã_R…!UÄÀ×|ÿO½/­^Y!âØDPlï…NBÉ@}³k d]¡,à¥6Á RsÍäð°æp¡„hît63Z%¡2¬&SöER¾O˜‘ip5y˜’¡ì.¢!å¡% X9Â}G)Aæ­-# hi@:h\¬¡Ujg ÍH³ÿË{WÔÒ¡â[?A|øßæ‚®etrþäÇÚ¨°%§‘d ƒuv„¨îÍÃz‘E%.n ÒGZ«9È{-΀ÉIpðh¦ÎP¥{¢Ï¡:£#]*ߢxVfDö9"!6[Nýòþ/Øh1Å)AzÚ›þÃÛ£ÑË]ÑŽƒÎ}ŸI BÞ¦ì™Ù8m0 2·&Ŭ/—JApGäÆaFú‰†¥CK…‘N‰™e5’ ¡¾Œë¨3³ÍMÊ–H£º'c Á$,„A½´*ÐKuvYé7 n^û“àÚ÷UBC 7ýÐ[uÓˆÀ‚o`aPÁá;öh 1¸²}Fë)RýÜÍi´\âý*.7L–^Ùd <97zø…½ù±c¬”kšNVr-cO2å™iY  +2GÄe&$ÓÕYbÊþÔu}›Ù{—`ÒÜ››Ñ0´a0pIþ]œˆkËM€LéÌ¿ÿÀÏïkÞN=2S•#XAxÎK68º0m¥ÌF€˜‘TbîT@ÈòfÂà€F§u ¼ÙúÞ™‹]A[ú?%ÝFÊšÞhÞŒhp7s6"W n¦ÔÊTñc£p§š‹sˆvê%P<@$½µqhn„™hfC+øì £®U»d&NýÛ{ßü¨y1ÍRÙ{°††û‰}m†µ£¬‚òÃO AóÕ•Ù! B ©D§f& Ø€²‘´)¥ŠPHÔD Ò©ê˜iÑ—f¦¥Rðo˜²ŠPH_ÒodÞàxæ̼>æ Vê_а{ʆ¥¨UïƒD]!èëï]ÿ«‡L$a¤‘º©Ô8zöY¹ýæÝS§Níö¨&”í9*Ÿ4’„u&R’)Mßc2ùæ¨Ù¥ƒµéÚµ¹Aµ]¤BP´”gÕgZµú!›Ë«Fû7ÀhÓà½Rì²åëN Ÿ\ß¼”¹"ýRÕù2°òµ± @д“ÝþÙs~ðÓ:®ãõŸåi{ÕþÞ˧ËßqËßyà nûì$OÜ|yÇr½Ð<ŠˆWÒ˜ I€ÝÿðQ>ñÐիת„ÃD•nf9HVYZ‚U½–KR±z­“’UfdJ›b¸‡)‡ôùµŸ}×õ;[ˆäuЯ )d,æ“@¹ƒ×ñêÕ{°~Æ¿þdVhË¿0TÞÍgO|ßÇÖÿ9>ý7ÛÅ[/‰Áa¶Ðã2µ.›MPÐܲŒáRx¹þùý+O~x{í¨íŽ’è a9Îô–°° !,<ÝgPP&sÈÖÇyÜŒ‹¼´uËô” Iï´Tz~Ó£V1ÁÇxÝ8¶LµQѤÊõJä©7®~b3Œß–½T=öJbÂraˆa¾suÚ¾îë?þÞs%°Coöƒe©À–rv³H0¬Â:vJ§oòK¸ù”‘Öı eïì&d¦8¤$½%ï®Ü®ÚNX®ÂÓ!Âvººû¼š)ã?ùñ;‹\¾8.¨ECÊ–›6h520Üúª?ÿðQÃ~‡Bæ¬N µULpêÖÏšN5n¹ëÕŨ³Û`»ß: 269JÄ[á)WZ@œ]iSžyi÷õÍWÌùКTY¼¤ÀÎnQéËÄ™j’m‡LÎÖmìÉÿÔ­)XôžZ*ͽ¶dCšÃ湫n­ëg|ÑAAK)`´U%Îój¯x+”œR†ŠÀ¯2 ˆ>èäÎΕíðÚGæË_û[W®@ ç¿ýéA Ëx`–å@-P1X­øÚ¿} ’ mžJåQ±o)¡·°a˹¥Ò^*$¿Î)3—×f OäHx˜·TS3“çÎ ?q×»\ãñA:feó[†½ÜìÏɦæ¹ÏÑ#š×HuÝJ®ˆÍþ•­ú•?3=ëýWeCØûßoïÚÔëĨøÈÂ3j¡ œn`mÄ0÷e£deLK¸LÝT©Ž2 fY!¾Ùü…‚Ó¡4äÀHš3eæ 0ÓçÕK?z$¹´ýË; (1èó–•A¤5¿ùüîθ7™#$3#`˰XÉ¿ª1<ÿrU×mîÝòÀª·ÖßskxÒªõ©rC¯‡Üó¨µ[Ûó'!°‘îÜH Éf ­‹@]‹(y‘šHS¼šýk*²Ö”–1AH!&‘%•²}âñš ÷/Î’RþÀª÷d…©®`ÀP}í1b¸ ÇN)ŽŸõmïê™q´Q>ñÚóïÕ“®¶ï|^Ï€^<<ʵ-¯$)¦‹É9·ç"˜™}Ÿ¥Ø ÑjG™`”hY9ú/CRt5 f"A›ZO÷D Tùm‘‚…E^ø®Ÿúp‹–Ÿ¾¾Äž.B^YRÚ–c»õòÕºî ã–ß ìø%Zrtÿ¾k{êåþÔ¬a˜è »†§Eþ„wJdXÏ Ë„ÊÆçå›»Ñ(¶Ä´J ÏÚ–V’¤É1»¿ô.«ò’ݼ’Y%a³QÑbçeW8VFázGDˆRkv<CâzWJÎÝ܆ã-µ0%)Úßÿ‡³ð3“Oî;—ö™˜Þ™OFíu!˜š.ç€ÃóÜfÈÉ8¤5Á* jT«É ²n&µ´$)¤e;ŽK˜%[»gÙ’Yb @ÍÔ!¬¾íÜï.ø±J¢Tšܸ$¯šÈ6À‚hó®õ«« àøý¥»¤Ýú_@¶'m¯‰î.Üvõ‰÷m†´¹Y$D·„]NëÖæ!¡²‡¥¸,$™A¤yf†YB2ÃLÓ›Du™eȼ'2îo$,Ñ(Ϙ³‰"ÃkúEâ,Ó_tëgžÀ¢‚[Ú~Š¶â©¥Ùµ½QÛq=¬6óæhuµVqIÊ«@ZÕø­Ÿ|pÈ×ÿó¯8øŒ »«ƒ¾-mÿÄ3BP°ªl†”6@dZÝN!ö'nLa4ä!déNÕÆ Þƒ‰Î  Pã·S.7‹9Ò‘‘¡ Í \Ú™”JÏ{ü•ÿiŽq½ªEˆP‘ ™ÂÚ¶°Ì;]¹zâÊÔëÞ\îÏz–·<ùÄ“pÃ-ßtóM/»)æ«W¡þèý3>áÍéFIµæÑh13Y ›àÑI7ës¨¿ÛI¨E«C²ÑÜU‹ëµþn¶(ÿ唥Á›5)‡l-•ôt¤kùX¨YëöVΫDû Üq ‚èøm¬·CßZP~ÐØdU¤²€Ô©Yi2<ÿÀGxQçÏ_ÏÝŸ yfîúg6MˆeÞÕfŠ&K (×f¢ lûÑNíÆç:å¤ =HjÌT›V»mcvës¦ÓfÍ‘l½G¤R´„A³–Šp ÏB„¤’ Ö'ÿÒí. Ïy0m“Í9D%š¡BVRÊOêýÑ3î} ùj5¬véì· ^zòþ{9½f㎨‰Õ¶X’“К{WHÚ!,‰ö2 ‰A™¤GjÝ%‡q6È;h­àœe™ÁÕuL±Y³fEvóO©ì ¶ Ÿõ1sw+ˆ€òÄfÊÖc>švN¬3b gü—úi’öü‡ÅamÜ»ÚHžøŽ¯ø«†iÞù=ú ¦O‡»` IDAT†RE˜(öBe4›;=ÞY¶([Ò›ôú‚СZ$‡”Üi4ŸŒ°Gª`[§IiAY‰ÖQEŽJ%†r£ºõGꈅZ>4²”B¤ Žm SjÞ_¯O¿ð´_? K|¬•h·í,Ô&âÌ¿¸cû £áÓO賃ŒÔP‘jÕSL7-ð‚#Ý: š„÷`C´HrÉö 3š%ÒŒÝ`i ¢|t³Ú¾U¹‰ Aá­7±¨p8CFóˆ6À Ø?<î«—1³ÖlYW„„ÜÆ cŸ×~øÄ%ìœà±‘×EdKÛ0Þ3)£÷0lñ¬¸qê»/‘WÃ/Šì“‰ê•P¨¤IÑ#g„‚‹ML‘3 ™KCØ0yF©´yæÄØ€¬‘‚gk#ZñÔÄÜ2½{”*Tª{ xªá¾IÇII „)T m@9a·ç9wÛø‘iµdc-Rˆ.ܧesˆo^õM+åì_ûþIŸºpÏ£§ΩàcôÁ‚íxǽÉÒȲV³US봤ϵp›®ðpXV0žºH›€¬¼ÂFQq¼ß׺êêfJ¨h&‰îãÇô—0/(3#Š%7 (ó<ãð °ÙœÞ´qÞn¦ì¸‚pÇ+ìú#ÄS>©‚§Z{Ò·¬zù”;¨ÇÎðWZ€atZª2K7-¨¨%ÜR(æyšºˆH™­¼VÚ:þ*U”áJƒš)+ö§È}s?ahaÁ g-˜ŽpcœgKu%?…ë/@•ñã› ò ¥âP§žÚî>ʽ;nÚeLÊE> ¯ûöW4㧯xX+ÒÌÝ:zÎ_éìû§þüšÍ,FqH˜œÍb,ÈÊàhš¯š;ÔÜ€˜Q™ŠFš«õ*± ›j½¡Ëk]‡èhLSt8FÓ;:1©!$'ЍûÜæØ )ÁD&!CB‹£ÕþÑç/}öp÷Æ=¤,YëèÛ_;“‚Ï;ÒqEaEf8!}ÑÐgnݾ«ÑS.jpgƒ!ÊꨙGPs!bI‘ö±“pÓ-7ÜxqÕ=“Ñ“9×~Ãyù{GXhM+.hµÃéŠ(y¾»…ÜÚ7ÿÄÀŒã§P”¨¢¶FUŸh˜¶¶uÄöàè‰íù½³­a¸ã\æ·ü·§ üïï–È“n\ Ž0öö:²ïï¼#œÁ(ö®GïJô(K¢ˆ ÍšÓb+SdCRPS„"ãNVÃxêäzo”“a0OÒÍ5ÀD#HöÚ~Œ&J0 <žlõæ’>?Ƕ^¿ÏŠ#ÎŒXrè=™ºáöä´½ö˜ßø”u‰ˆ%|udï_ö=Osð¤g,̱>YöŒ/[SŸ~æcŸLt”›.#A6³¨ÒØ*¿ªwŸ“sÈ•r×Î wóÒµñì-7ÝtCde‘BŒ('‡Y2™#*Ÿ Õ4HÍGe¬E¥Þ|üT~¡‹Yð±ãß’Øš_2JÅÕÏŸ>7¦úfwóX1a4ŒÏ eNOùç¯]‘öÒ; 4Gf ôpHœÇWÛ6ü&sŠÝÝÕÀmt¢#3¹RFE[°7Ö2ØÝ­Rã¡6ŽÜÜóy£+zš²Yr&,3ŒÖ˜-Jv¤àó‰–¡NHìÙddäÊ?„¿| àx¤]ŽÍ PïU=ÎGøYl…+<¦_e³Dï«o¿ïÓÀëß©[^þV«<2)Î1o|ÏF¿íž«ç|µöFFl6Û¹ ióîJ"ajÉÁšZŽáN5š²œñ çæ²vâ¼? !VX2/…–0Z.ê݆*f64ÑŒ$¼¹KCQÏØleý#È¥û»n8vʘB³qlÅ~ÏÍ{;>L-€]Ѐ¹_|gÃüS]¿¥nKEœ}.tõ¼ýƹ {«\ïºáâ…]ƒ(Ëà=s^ÉNRs¤A•º—©xø¡‡®äüè¥ËW/oke¶É?–Mu/ydvƒ&ºÀÚ…Å ¢‘Qëâ¶·_1oK÷ïî^èpi2I÷âɺãРؿr-`ÈMÔй‹°lêÆGö…+}}a 8‚Q8¥êÓÄ}çß½ïBßöÍÏ^¼`‚qÄ¢H†„G=Rj4d¦’  ¥úÎ8ÎÝWhÃ`Ù(™BÙy`ðÚ脃%q±$4~±‚L2yW‚/þ(ž*A ºG&©L×|éò³îÏùÚ‰w¼qšƒµ‹êôº?|á´+0d<¨½q3IM†` É­\K™æ\¦88é³L)ÃÃLÉôdZ¶ C Hc·†„ÐÐE“‚J§¼MÇj8$ÈzÛkÏ<€\º»ŽéS Rñ;á7Î%!lºä³ß­çUs¹ŒÒ¥¦ƒÏ=Üž÷ÞÇqß³îþƒWIæé1®žgÂ#•¦h„˜Y8Sími$‚„RË`•ƦL‘-å¦4Š-=AÈœ4 Ó¬¶URÌ-½XÚ,³ñ¯Ccµ]qù¢)Ò§ÈñÀg*×I½š˜°WF ìÍ4]ÛMó¶Þ–ñHÌN`;ßù€ŸŸŸýgÚî´·¿0ÕVãÆ” ò —Êf~¢ÕFzIc²L>r ‘µM­å° :Å—„3–݃lT¢Ë\è9$)ï-Án]Bºi2ø•ß)Qi =‚ÚÆ‚š0Ës]*Ëz˜º)aç‹ ë$Ú »óÖÏk‚7‚«&6ϦM¬vNÿµnô±ó÷ïß1û8#ŸÓ]ۃɄٺ5´í€˜i‰h ¶úJÒ!‡™| YÛ´‘^BQ›Måó1Cëfs" ½…P¦2yzé\³Yû¥Ãty÷EXý¼_Àºf‘æËµo\H <ûäL5E »+€‹wçéqn ·ÈP ì}µ»wj}ò¹wêà™—ù§YÒŒñøj¯zæÁQï‘HcÌ–-Ç9K—' ÛZ¨&‰F)æRpuTl¸’ô– Y¶ýܶs°­k/M ‰(ý!’d{Ïq¼˜¶ªþÚR}á"%©Ö ‰â„ÑðÕ1уÙmü d/ød>5Dv D múÔƒ×xtéê΋>ÒóÞS¸gtOÆõîpº9°»±°IÚд]«L¢öÑÒ>9HF†–‰ IÉ¡Wüxwy¯ýxíÑ,æW¡ý³;1x¥nÐa}±Ú ¾ú­ƒ:ÓË´Sų̂eIuk‡èèx‡Üq¶~®ïè §\ÛØ> òU?Ž/L²ZZ¢àcŸ³qÔÅ›àÕ^ùÓ¯ÅQs7¤cn6|w~hŸj'G1È•)ÇÊ•fºænIõð4ålm´9K7‡ð̲ì>ÞæˆH&0mbšvÚ‰q§\Â-¢%ɳ]{WÖqgá¿a„]güÌYá5”„NZSЋנkµF«Õáä­WðÌP"»ÍpnØÙ»á”ÛÉ×ýB艓ïþû†ùàpeA÷lRR«ó;^J÷4Á¡˜F7eËð”‰v8†˜ÞmN$“ÒÔ [ò3Ëc“:lž³Vœ¥t1”`ê¬}õÛWeDô$ÌhJ]á ˜·ÚdQ¨‰‹w®ûÿzâô©“g.œ9¹û©.9·v0²Ü À•kk´göÖ'Wþ’3ÐO=¸sµÞÜóÉGŸØÌ9Oê½ç4¯/ìöBdÜÚôâæ™RÏŠ3 "‘}°$Z# k®&ÖîËâ)¬Å¾]“HÛ[k˜MY†|þ¶ŠöPك̎¡Í´ºjÅ|ÎøB €Ê+´ÛÏåÌiÌäî;Ižú`ž3$Ì̈yÿêΖæÚ³N¼üíÚpüåWÅ'ï܇îêÑQþPñùi²û1³ÔäÃd¬fFº²…–ȆFš)·9ë„ãºYƒÉ¢€Ã¡ïüJ”(  5,dRÛG¶*]­¨Á<Ö$tö+×§žlét†«¾þÿÖ—ÝÂìH¹°ÂZÛygÿȇÈ-l´îø˜®¾òÁßøÎ'؉ÃlóÄ#{ÄÉÜßíôaå ]læfÉ O!EŸ;tåAî6mvÒÚÜ„¹‰–cÛvƒ²Å*\ìJYN««]OqZ]0?8<¿Îѯ}èÒ1êQÚ.[PZÍC,÷‡wa±T`‰ò~Õ 4 Àï=ìß‹gôm­2Ì«á@ë׎æí®M«žgÖ_óqå‡Î¾÷ЬÀxÐVæ›ÐveÂé3›íЉLvë`L@z§˜f­ÛÐÍV±j'Žl\ }Ô"C­ucgÃÖz‡'\'‚ úv;ÛÚÛé“|àòÞ@øÙS?œÇÍüñ0E ™a­"³¸/››_¿꼘’ V“¼–àò“A5n‡›WN7­¤6›ï yÒ¼sjoâþ#<ýâCxè¯þÉ»¾ÎK2¸ âNî©2f×8žÙ–Ùcž Y6:E-ê*Ý]èhÇLI±&AÃÙ'i] mü(ÀóŸoŒ®]>¼9¶¹¹vò7(G<-Í¢Ä-•.ì-Ð|[š2ÉR–®|ÙÐkv’÷H|ÖoçíC—²–)£oVÎÕè}rå;7ÄËN\ÃCÏüØ»^ЃuY­þš›"btS?<ÚäÞÊwb;À0˜VŽFGƒz¦Oìù\;€ƒ+ô6K¾Úf»¨«ëÚ¯>ù¡ÏŸØž{â‘'ëÔÕ{.=xˆKëUøös¿›×;Üå ,Í‹RεÆ±võÀH*e²”¢}LzÈíC„½ê7ð¬ÃÜÉf¥/ÇΛ.{üAæµ£Ëû·D‡mü…rÔw2ÀÖs¥Ùˆƒí©•íl»¼¿Ú¬†¶Š6°AÜq“ÍCÆÕЕ#Ç~âll>jlæóöñ±í®=Ô×ãfnÛWÆ=W’yʸüŒ;¶—ÏýÿL½gÌgéuvÎyÊ­ÿöÖé³³½’»Ëå’\J,*dË– H ,Jâ‚$ނIJ”ØPlK¶ ز%èƒ,#‘@X6UhQ)Q,â.WÛÈÝöμõ_o{Ê9ùpÿï,gæÃ;óíÞyîyÎùµcZz¨îL•¢êÔýÑ_ï…$­QÆ» :‚¾!ô@( µðÚ4 ¢a2oUðØ¿“Çia§ç•R pè4"°9D(]=üº“wƇt!æ  3‹Å!Blc©ÀxªÚbs€Z³V¤Ð$$ZÅJŒš æ "Bðúž¶àÚ°åîœÛNqWôµ‹©/¹¶îƈW︫~9³Í¬Þ½ôÎÞŒ‰è*¿‡Ÿ>ÿZrÚôÝ€8&E^"’€ ‚¨¦àÈ€ QÙçˆÙ¬ œž´w< °¸ý&Í‚Mdh›U2Üõºœœ=úO?A•×%/X—õA%ÓÛX€ãý£ýj¼30h5±Ú"¢‘&"EÌÄ^¼X_{ÖWO€†×Þèž<óöž†—©Ij,–£°úÆ”BÓ.‹pqtâ]+ ³>"°?§½>žÊû:w Ž‹`Ñ }v¥ H Œò™¤ƒ£TÅçE`rèÿRúC’èêxÏ_[4‰ J d)Ä”Ä3¶ÂŒ˜YbM<ζ³nÿ`u¸µ8½¬=`‹sø–“Ð1#+ ®fG`?ŠÜ„±§ƒdý’ûbýO} 0L€ëtY"Æ^6r1p%©-? €÷¼*›ŸÂÕîñÖï‹Ƥ|n%«;ǯ½¨}†Ž/Þs´çÏ?ó[µœÜsëÿ›w®^˜^«VžÜä·?˜û.&›BÅ~Q$NŠ ”J¬RŽE|ˆÄÀMŸÀLâ¸rMMžȦî¨Ù_­P/9B¬¹ït¡Gª…D 'ûÐóÈý=x:¬£ôÖú§'%éá<¥×³#‚Èßù.‰^i$¬æðä×ù}†“ •ˆ¬¢bÄÌgIV«d(I>Ì2›dé#/7Ù›£yµ“71 H|ùÑÕ«¢››¯ÝaÔåh{¼¹ÃÊÔhbÐDzáH@iW³údEuw‡òQ®S·ßèÄ…œ5¢ ô6 @Ž$=ìT ¬¸ ô[¾MçØk)î²E²® Øß´‰ñì >vÞ)dâ}ˆÿ™ÌcÙQ«½@0³?\l—óbN–g·%ž9SÍá}ß\Èñ=ï¾>À,Å´Qi…2ÚÊÑãõ/~ý°Cƒ†ÒÑùûÏžÏB/”&  tꉅ¸ƒã£iê‚Uaéé`<ˆUÒxF@»>Bb èG¥“!A{ç´þÃÚÝc¢ýó ¼W {ž¸7»‹ôûޏ Eɯi!DAAÒ,`î;’[û³q­) EGo w^{ø>v”s¦á(˜ºƒô¹Ï‚‹ö?|P¡2*INÂüª_¸ëÿñ¯B@ è·_ÙzäÑó…LtŒ 2Fô¢xµp ¤A³²ÄaVOÆ¢›NM ¨¢%:˜H¤$ (`¤L¦Ðç°®‹Àé³ÛKé=QëƒOk—õé•!€¶Æ\wž¨€7°ág,%²VH&ïPµ's¹×Ð 9öáŒkžùB#û›×?µ‹Å¸à˜ gçõ§@²$†öæí¯<ðä=c£[ÑhrÀ¸½þÒÁ†UH JŒ–°,­&-Q]“š|^•u.BVš¼MViLË;í]2ÖûEú“ë‹O€‰×È­Åà=H(Ô·Q¨mŒ»¹€ZâîÕ}|õ¹€ž¸ˆ¾ÝÃéÃíF'±>Y¤Á/h:n›P6>êËPÇHóÔK°JOÞü–¶ôø%(”ÙW^¹ÿÉÇ6„‚á~ýµ„fï7j»a=ƒHDRÛ¥(}X_‘íÕøD–ÛËíÃa“XqÕdqfosYÎGÓ2{™i½Ýx…ïU}XK†×ª*AÀ÷Ú賉RãìÁ½ÕM"ü2<ùZ¼ÿ¼4E~ôã|õ:ÿù…Ãç>ü‰Ï®¦B™Eöa ›ÚïùK/‡£ë¥P¦…=%^-ºˆÇ·" B D"döåwÞüÈå¡Á¨|´Ý7^ÛS¹R@U$Q•®­ŠÜˆ(ƒÂà sT®i%¬£Ú­òÆ*rÍòm‰°N@øv&üî_°ï‰pÝ"Þý8î†.g?^¡$|eVçSûŠÂ'~Kù.î®nuoþɇ—tàFüsçÛ›®Uu6Aš‡6dþÔ+€Üv!4^%¼tŒ' ßÓ2 ‘€QC˜}õÚ‡?¸<­ÃìÆKoUÚ9Ë‘‹®%àæ Q†¼÷‡zÁ ¶úŽÔRÛ*[ W1ZêºÀÔE•ÛÉͺ§yàt¾Gü¶2·'î)1X_ƒðÞM(Œê±BGe»sCã2ÿ¬€Ð~NžŽ>ÕT½ù·¾ù§«ó6ÌåÎá½ï{™“­dÐ4mô@<^.ÜÓ(á(_mpçÛÔyávÚO˪AÐFDÕ}{@P°ÿ™o~âaÅÂô×oçÃvY£A“šà ŽöØ )=ãátT…!Ìôes©.ï…ý 7Ù„˜$ªiJ7Hõ¤ †´Žl§w¬‘ÁSYO ­‘²¾-”SüîGò‘«Ñ"q¤áþÞýð®\Ay@—½¾úș߼5š.¶Òóçþð­ðï¿99—æ‡7ªº©rë;÷ÛNn\¹>@Q± ¾´ÈKñ“ÑPI`& ¢(-Ý7ö>òẃ—_—,ÓÞ`t†÷Eð´%GJ¹ ê®é¤ 3}lƒúÀ?…:˜9wÕòÚ`1Œå*å”òY$Šüøôk?mŽ×‡à.A²¾%{`OØ3"e¶­aëÝO—'›ìõo8©ï¿ñëÏd?ú󰺳‚ѨžêÎ]Ý/}råM‰]º kIí±Çtò¦¬ºÄ·ÁkÃ5ˆŠ5›xô¹w?raÿúAMŽKS†Î ×Äj1íëp"ªnBDz ¬këÃÂG •q Y)“* PÐ~ "q qÓ©ß³¯ò§Ÿô†H!^¿…ßÖ!À‡¯\BáCnØ/:üäWÂ3·nË­PÝ÷øÿÃgŸ}ë©['/.Šò_ÿýÏü©Ž£‹¡:wï¤{ãÍù…¦~ÿ["w¶Žï‚NóQ“(24D °ìLžmgšL–~žûÚ ¤„c/]Óx7Kí.@Ð3CÄïõ (ïI Œ`þ³à÷üºü˜þ½›VŸP/€‰ʳ˛aªñ—þÏŸúWÕ»sŽv12ムçÊpáâUð¤¾&‡£+|î²›ØjØl/`¬]±ÂË÷.Æ<çÒO»0Àn³è&›Ë…9Ø.oÔÆbŠt™l¯b5m™‘¢@섨¼×:X¢ºUî:Æ®•°#VY·|·oä©öë~×,øivÎZr ½vâô}¬Uq (?f„úûAǯFxê-¹onE¹Í'_ÚŸXî ¸,ñ§~â7öšAôw(>Ú˜j•}ê׬F7Ÿ{ŸËæ.,‚+aeÎNÓÁ QÝ…37t0éÆq5,‚±¹‘’pÓ°-L-÷ÝH,ËÊ„Ð-W@°ÎZa!Ö<¯=YîêÅ·ÒZ“޾˜ CÄpuk§#ÀiHØú{‡ÓÏá½_ëþY¾­K„‹x‚- fù ÈìÊêcgéÍ¿;ù-Oƒô‰‹‡ €÷˜_ù©ï½õÀæµ§q›Ld·woÊbwzãÉ¥ö‹Z|ˆ>˜Ü×ÁcJ¾¾NA‘ÖÇ%«¼ö4ðǸÝÜJâ[„Ä[q¼5Ð)¤F#qìXéA!G»[CqH)|iëJ¼/¬zû÷â{ºPÁÞ¬Nu;ˆ€B{õèÿìçÁ»˜0tÿÜÇÎÛsnod|r"€g®…äõ[!==só@m\zøb"hAa~°{þ~îGÿm•£ëÎOФ©Ÿ?¶ù8{ññ4ê8V]GƒR‘cb΀HÙN`Ц—Ê!$èóqâ8Šè‰¶DÄP`I(F7.·ájbÂê¼:2•,gn–çÓs­½} O½þØ{°{]@oçé¹QîU"§˜Pÿg],øRjQSv–a»Hñk>þçqâ7?èõo=ðÇO¿±^{þ‘”4)c“Ÿÿ…ÿáÓ "Y” k„dç«3™ßwíöÓ>Da@Bg!‚ŠŒˆ: Hb" ‘X¬(BˆX)ƒ¢8ë5Ž`PP”®Û{.¹#™$+Ÿ¥Ù Ê Ÿæ6îת(뮎ûÝö,‚H(Âö†m<µÃ¬%!Á§·Y«è]-ÙM¡g~›/ ÿR}pÙ PY0ˆ?ÏÿÇ/üÍO³31 Fûìç8¬Ì×>¢G…ÂD€šŠ!¦~jì! )“(P@ŒŒ‘@ŠÄ€Àb½DÑ‘@ ¡Þ¤³Ã=°«ŒWä9‰¾¹.é\ë«ü^»€¼þ¬A"’×â·ÙÂ{uLtÒ3L –c”¿€ôà;rÙGùÂs|¥Ð}ï¬ÄpTòhú³¿üCŸ‰ ©áÒˆ°î Ž÷/ßz{WH‘<ƒŠJ‰aDDƒêÔ$@H ëÞH«,G…1 ¹œ$’°GŠ¤Çª­B‚ )BT¦D6{]z´—N¡Øg#ˆâˆBp:ù¬û%ê­Ü5H Bæ]@y-€q i¶€á^m>× @ ر@-ÂÀ´ÿä—¾çO@!@m#™Áû¿1¨/üOµSˆÄ„11³ h# F-ŒU’¶,QDA@ÂBTBà8hР% ·&òç=`Ö†‚÷¢O$Е¢ì¥fýhk©;œJÂ`mãسÁrª a’Ó¦A€D ¬œï-InÜÝwÉe-_}üýßÚ²á©/ÆúÂÕÏe9‰"À€Þ¾ÿ?ù/?þçÑ 1DÕ†Õ IDAT2DŸúºãù䩸 „SǤq  C%(1"÷—¨ÄDa‹¡pÀĬM´–¼V! FRà £Ž^”xƒt U€˜ÎÄÏÂ{×þ©ªòa½ôh- êŸUÿbån'p~Ü*Q1q *>+@ðèKq£¤ççß1ú“]É.Êù'®Àû€cG½A®{Øýô¯<û@Å" x÷Ê7yqîè÷Ø»ˆd¹‹œ­ƒ×lciÅ2EqDÒidp\ŸDÍÄ:Ýu •ïŽh¸¥6goÈÇélýˆë!`}·Á·áB§ÏÚ Ê}äÝ©F¬WÊðÃ:DgÕB¯ <ý_Pñ3?HbPŒF)…  úD>ô—?ù+ßñ Щ¨b$×"¤|æ¢8ƒÂ*Š7QIÀÜ)À'As0‘+Å #‹‹V»Î'¹òAPGeHq&Ž@«ôj¿ª©O§¼Ëw£ô»qzYDú×j9Õ‡ܵü WyŸˆXÆâ¶;¾%—–´ù’  Ø b `<òüOýŸ+Óõ{Çãã_ˆ¡K_|"xˆ!A}—…ÀÑ;*z FH 3¨|‡AQÔ‚‚5ÒÍâ´D‚ ¶˜€­œò„H@šˆa~Ðg²ROmõ­ÿºÓ{&ì›?‚u¢4â©(àôÎüÞ§½gP6XQ«w6ên½vô¡g^ÉzUfÿùH´+ ¬¬wF1×ýç~vñR `ú’Èñù;oŸã Ñ`ˆk%àÒ+!Œ Ïì“ÂÈèXE ©pªØ²ˆ¶Áפm”‰ºÿ@àÐヌ1¦o9Y?rÏ„áÚ7½r®?½ùEÝUÒõ[ŠPÔÓÑs§Ä8ƨT|àý¯…‚>?øH¶Ç`‘CˆÄÈp «?ø¿üë·œBdP”ÜÿFp^}¢õ µÞjÒäœ&M çÔFòàXÈ)éx4ZÙ(*v±_ÒaSê2¬¤zFÍÈú(TEEÀºÔ/DX#®}Y»;ݬW õ96}1ìÇ_^³fÒƒG( (CdÉ€Úg@øäËrñ£û?zM è-QbÈø¡VNsƒh"<ûÕÿûþÏokÓ #ÂG¿ r4|÷¦Ò>(”®¡ŽÀåJ¢C¼–H ˜Eˆ¨LDIT 1Z+ˆRCÒtit]-]Df«%JŒ‘)xE¢öQA²¼ºtÞ³»â)!~íZ_ö¼îùønùï·®à£v¢° 0­¾ûÿ‹Oþ±}öü§µcŠÀ¢5 óÀ+² É‚ˆöÉsŒÿ?]k=!£·îp—/Ÿš,…•ŽâTp0ÕLÔÚN•½ˆ? ˆ€  b •âØ!‚Âm+FAC†TÔ¢u1ZDé˜=±‡.Áæf»þ¿\«ÝÖO }{#§èözÐõ*þýôryÔ;'D1J¹žDïÞô Ç×¹9xà“ËUF‰òÄ#³fd8°ŽÎ'‰ùØï~ì7î°( :yö3‹ôÍ0#Ñ¡UƒÜ¥›ÎF¥¼U+PºlÛ„¼B«QX¢S”eìH#Ø&óÁD¯Ä‹$Je ZÍÚíAwgš¹Î¢™Æ€ªüË(€vû¦ägžÙ_!†ÖV ìƒO£†˜hoBÓ–Cë ööÇÓÇèÕS×ANòL¢˜NÒ„Míc&®”[w@`T ˆµ ƒZrЦãjBg¸m-ùQ~!iÛóÆ&¬-š¨=d} y]8ñˆ®ðø1ûE/‚~}¸ù®öc]{ÑXßõÇ@zÉ›ãå2)<0 Ù7Îú†“'.}nÓrÀD[SIk¦¨¼” `H£b.bktâJÞ(þÿëψ Éh|ÛÉêùO¤rj*­5R®ÚRj°’:¬¶-³ÊbN^¯Eع¼ë41"6ÑSiÍÜà´(ç^f–¬W¡õ‰h"3á84l§ž½ôé¿7÷õ°/¾gê ÓT õ¿ž¶Ž€ð\ÊNéšQØyeÓÛ(O}#Rùv:„Ä f•2¯c*:8Ð.i+Ój2€‰1õþõ÷ÿ(?ùiæEò§¢0yY4>²OÝze¢6Þ·@QêÈM¦A!¢¸¢s&—ÖϽaWQ‰5¶­!Ú°d£•D•D*ѹ ‹†A@Z>ÿcéµÈÖˆ8 ¬PÖ€ õ ¬MöëÜ3º'Kõ‹3W.ŒóÉ8s Àûþ,šKO¿Z#C±6 £¦Ðê½²iš¥yh’,Æùå'~·N<6@¬²ö«… N·qX/«ªj‰Øà¥j‚¯ª¨|žo•–ÊÉV" 2“æ©ÊŒÅ‚ɇÚj¦IqÏÅsHš¡©E%€YÕ°ÅÖÛ"}ÿ3Ÿ;à»ÓÏ©i “Hÿ“œ–þ5a$İ¡%ª%¦-ÆÔ²ÏGAQÏ~F6?bolá  Aë‰|ÄŽœrà2š*C ½ÅèD:T$FÝWÿô/?ógÖë§¾ØÛ/~Tu>‹…ˆ!–ÄÍÓ•™ëA´A„ñB;)À( dmHÂ(O A#­mäÍ©AÖêcè à :DÐ:s¶®sÐFeÃ3ï7kL¬‡{€û;¸–ˆ 0 "¸{6@žz¬³ Re‚ó ¦òw`ø~uùàß¹ÛjÕxÇvc¯Ï†¤B‚œsŒ ÊØ qÉ`JÀmUð_{¦;û².—e‰RF5Y ‰·:Q6 « { Η¬:o¬HGMLɸ%S¢2elb0æ!F£N©Cm+OE’ƒñìb‡ÊEè’Q é3Oþ»wh-ùì­ÀÔŸÕ=Bñt6–Ó¾IÏ›p¬F¶¦blÃ; ÛÕB=ÿëõ …•ma›ÓÉÃ.KQƒK$õâMŠ]ÈbÝažû¸bÕá¯þýÛ=o‹û_qN©?ø¥ÀhjÌFâ¤à2Úš£6[{ñä5jŽJl]¨ ¡;Þn”שW]êf&`”ŽÖ4‰s›šu;HDüÒ`Œ’¥s^9iˆH¿,OEÜ¿‰~Êš_ß„kýPr¶Ö~EÖ‡dÙNt ðøkÞ|ç-\Õ…M\²åm^8Œº“.³Üá ñ@18hòÞ%ꨟýò?úçÝë݇¾åežÝZŒ”]á¦Çy´œ»6NFÀ,!wA1Í„YØ’’ƉîÚØ)FL—Çè‘$ÑIB‘R]ŒTdK+Š¢æULB¾ˆTámLEÇDó:±×ãôÁSèç.O~ʉ î^Ä$!—;íÏþUxöÞxÿ™,3sÖ4¤V! ¸ÓÖ‰µ¤#Ѝ•Ã!² ‰cŠyXmDe«„õã/þ“¶z½¬¸ׯ|²µƒvª».ìɶkh™´ÚDï!5ª•2¶Ý<&»MžD!› M·J#² zµr4tD%¡ölœ¢Ôq^¯±ÕA)k©MPŸ½Ù’Zó ¸F°àz«m?2á© öAi«6 zp¢«/0ªç~†?Ú*R3o©IdéaUd±Xê¥•× O¼°æ©îjWf-²‹Y±µïé§ÿ%¾õÜïWrϿגÃR#ä˜z‡¤\‚–›A]RãlŽMh•.;ªSñYpØ$]@§â`ê¤^–AÛÀ!ŠW'„Uª*È1joŒÏÚ ¶j[€¨î}“…û°N\GÎâº*ðÝQ©G„úSðáÖeЕƒ°ZiݺtpþÁ§.#þÈ+:q ‹m1˜7mb“ƒÒ•+qúž¼9Ü€à7|š¶Ö"‡1Åíbö¡/þÃ_Œé—7~àïÞ{xÒP§­Ik7•*’¥É”ËG V‰eÓÜ.lÖQ+²¼Yu*¶CÍŽâB}÷Ü-ƒt>„‚WNÉʉd¢ªÔ‹o¿ÄÙW Ò‡éIï…€Ò÷½oŸzÛ¤þ˜m°ÖÒ²_…úèõæ§¾ïÊ/>ñüÒAR$vY–™¨“±5ŠR›$ªð\°µT¤&ƒñàŒ.ÔÈ7“$í¾üÖn}ü­Á•óü…̰¥ šèfÎ&±"Öªa[ ¬2Ñ(ÃA ³V¼Q˵Kd"îÆI£ñ¤qlH](ŒH6Ó bƒ¤ËP)ËaÌBÐJc[Ù9iNAqP$B(ýW„×+í&”ÉÂê`£)WCß5'ŸX¡sŽ•v€«Bk-yãªf™x¿³²àV1¯C*.“ˆÆyã cÛ´*Jú]_;Ø>»yðõ/¿ôÅ~ ©ªÔÎŒZp¥žÓ&.؉_.V©Þ™¥éôÉÎÊb:oýf£ª#ÞÚÖ[3uJiõ‡dÁqÁ¥6èe§iâÆ@”¦†UÕÛ·X€†ZÏîÃ2‹(Ekk­•`zšT>v‘8q‹I“.]W¾öz»úÆŸ=¯?²Ý%¯ «êyPi=#%$ñ¸PG«PElrj¤F¨Ž‹ªÉ•8WyckËE|é÷þô‹Çnï£Ð€Wtshë”æÜJT£Ö³N¦€E<@šg0v’ ²Ê8•²¤a:0ew ¦®ZêP±FÀ„7B¹ð õU4 óìló Šsi™tw2aˆ¨5aXoÁ¥¬Ö—0>2ˆ ðDÇ ÑI~]¸ZÕgþÞ«ýãçU`T>§„GuS›ÈxÛfºr8Pu×ʼn6ØŽž!Æ•¶v«¶~ë苇*xX¯ï¨PäºA¨¢®!ßäÃÁT-À[3„¦9¿oeTMV†bSúE—Ž'cšû4¦i§ ‹ËA§>©Yî²A熑1tJp£ÖI“”(3ÌÞºFÀ PÏaùõªèˆ¨_ˈ؇¶‚ ý5Kµ§dRgí°N‹ø‡ ÿ×_š¦¸!Nue­‹SÔ&ÍK%¤€ëE¨J Ô«Ð&»°˜ €‹êZÑmØÕáȰsOTdp*Y*<šwÇv´2g½‡ ‡:ÕѪUnüebÙš‰m8Q$Ôz_Ñþ‚Ëw:S¥M+åÉIªJôºV:N“k~cû$SZ—gíD¬[©˜µÊš2×Ý7.ns\˜ä„/ަÐn½ô~©æ4ZÄ+Û˜Ÿ›ÏhH¶Ãý”òá!:½œÃª da".Ög‡óã8:¬”»Ù4Šo…i¦·…}*¬†û—Y䣔wÒÍ3g:·”uŸXgˆn2ܵ®#4BD$ì·ò¸/mŠÒÅf¸u“om|ŸùonÔÄ+É ·Ä@jغæÞ :îLÉWÛS].¦Öbë7¥<±uј°ªÃád»‘A³zæs"‹ä¥§&ÆÌ[ˆ@G©9ws¼É\*uhBªº¼jêÚ”ÕŒ³3ûؙڷS©Q¯æ’³+fÙñô­ p^Ï!4ËnH³<«.„á!XGeg)Fj<›õ¢®†ÚåVŸ,|W €¼ÎHàØïsaTf“j5,º:mM“ÔÃÿ?°:ÞÂíšN°3S·Ðgç Ígp~±÷W<¼õl¸ò‹é^Š*‰v´<©ìjšBBÆ’ȇ¾²”úÌÑ«—ýf¨v«TKr’‹¬Ãñ‚R‰ã&Ë’AíWc>ëíÛ‰pÜLv†ßT¡¾SÞ9šé›º±™mÎÅl¼©|·'¨7÷7Ô±ÙßÈŸßç†PK”¦((·¦~M…žÎȽJ¦Ÿ ú ±Û:>˜LOλ4¹}§Ä€rû&g'oèí³¹wa/[Mótõ­¤LÁÖqçÞŨ2x¡^€j6RZ›A#–ìç;Pd@]Ý™â"ô³jóÒ£óädt²öÓݦ²ó eJYk”2ɨ’3Ô©8×#LuÖ˜©Æ´“rUMÎ/ýäõK:è¸È"¹ºõÅíaš‹òj²2ÍPüIödDHÇ6%gËàV=J†ïqpZNÙ“{+{°Ý4(–4"IÞ,iÏÎ^½Z“ðÙÿÒ‚þßÿß›»WnÚûï¥Mvb禫éaíëi}à¦8ÿVrr^Ý…áloãpS¯’4A•¨w6§¶¶·FÛ.úH;;÷ö¸ìºG›‘ÛzWeÊeÆ›±¸ÑhP„Y“$ƒ-Ha°å³3ÃaFgp]i›b0Xò¨É6la†`¬úï².fauÖYôËAznêVêbW¯²Ñí£W”2DŠ|¦]´¾‹—é‡à®”,7xûÆL½ñúÞLv¶ocsðŠ„áÿò«Ó§ÏÝ.5wÜÔI}Hõ»d³&gF%ïÎ+;M1oKÙ\ø±›ÙsÚ ¦g͙úœÄã‡3Ã3ƒ—9¸7Í+7ˆvèëçu`b‘[½y‚àOòÎ(}þè`¾¡Qûâ•O¶N\¾J’Ä6úÀÅá,Ózè5’ø&Ç& ó0n_!yÜt"ˆýüCQg«Ù¥s&i›ÓäÂu ¸—éÁÞ´i?pd ç+êÞݼcJíÚíÕ¡/ªÙªW­­2¶yk9|ßÖjŠyÝ´xbžxöK-¿;¸}|Ž â^’‰9©w9¸,Ì“2· eáRsþzeW“¡¿ê|4·p0_"¶iæÛšŽ¬ZŽ·²%pJE£ÍûÎïvÊf¾9@»â`®E@èC§£DÚ•aãÁ¼÷ 1ÏÄ’B‚®¾4[–Û­¤gÏG]üæ=û_`º}~üâÃL¨9†«¼Ø>ðëÛÃrs_ÂÔ4Ç÷KšÅ›Í‹Y1~ð^¦A§!º•¹‘Uf•½37á]Qïì=ìÿíµnnn5''ÞEux|†'Ç—ªi5ÜÙ˜ìJwfœ­²*»gãø–™/´=¬o ²a,n7»êûZ8«¬”°qk:¸Ÿ·òc5,¸­Ò+CÀ­´ÙúÆ£H"‘±Ja¨Eùௗ_YèµE ‡J)CH16ü‘I~¸Y°[‘,Ë#1/r÷=þŽ'ÿ|ÔøÛ»æ²AÛ œ8äÕdûr<¾ÈÛÐ .¤Û×õØD†dÔAq2eÙíf[ÛÁÕ™²’T£,­ÚíÊ%ͽ[/¥?òK߯a¡ÇöLûÔ,•˜¨¼jWúpgÊó «pœ]&ξÑPQUã–7Wçì¶Ú:™,ïlhŽ:¤m¶§C; ס[¤oÊOΆ›Tª¡¢!‚ *]4íC“ÖˆÀœûèiQ½eáDi-¬¶|ZòU9ì|¢n }çk1 ÞãèÄÉjƒt½Ê.´£ÏÜÖçÎÇÕ®¿±Õ\âJQ6éãaÌ"½«ù¤@ÈÏ¿û«³üÎÄlÜÞ”"§ñcçÁ›¯ëZóÒ‰ºÿõ!ßLÒ*ëõEl„PtHÛ!ϦåC×x³Xž3nµ±[tœ~ø¦n6¯o,Ô³Ôbµ²Ç6Ý?Ç«=Ïç²úØ+×n;L›ùõ« (ÍAL¢ˆBˆ‘"|x¡_Ye–@@›0[¥•F±J¶Ï$•]´`ÕB|ç€òÇÿ·'~è‹/œ+gs+-®¼{¦ ùMÓÄæÎîIwýp,m6ñ>ÝjÛ¨–îD-ŸzWßöLÿIDATÑÆÃé b,’j0„å.ŒÛP¹ª½î\MŒš‡%ØhΆ“Q7ÚqEOp6ÛQ®]rÅÛ:vȈ›RO–º¬ç"éà¾yi9Ú"õ×w»Ý¸å†]¹m]톺œ7¹Q8ñ-ÁÞ¸|¹R)éE”*2QàŠçšûÞöt-ƒ³>JLj Dþò…|x´¥g8ÝAÁÄo,‡ÿôé§¶>òßÞÞ¦ •lΕaX¥Í`‹ÊN'YSùáÁüxóÝ*ßjmÍåáRÍüå<$‹Ý`ï¤ã§¶ÚL¯ºÕhy|퉷f×m§hîÀöm—Í—ti£;·Wîl^‡d:ã·ÆÝ†1·Tqë°^žluÝø¤³Íq1g›+¯^”n—WwÒéþÒnÇ;p÷©yËÚçt9ê’&P«âN/2Bç]Pqâ÷àÖ‘íÉá1*b·Aݡޚóåo ŸlK³º·”ޤF³ÕrUXÀËÌÕaj—“z±uÀÉôЃöùbƒîëÒîŸujdÛãÁJWWwær\ góƒnƒiö³ÑöñžözçKŸöÚá›_ïomž(ô'¹L§¶zG›ÛïB;ø–¨:Z¬lµ‡oLfBµÜó龜z_7³ö¥uúPÚcóèÛ“X‚,ùŒ²Õ„—3£ÑîÜÛM­J  RIÆ„¦ t^›LöujQpH馪=ÄÉÜ™ËA¯š‡æîþ8šÃû:³ñ¡D«½u_ùJ2É+©wf纃ä>CY£GÙµìî —™Lö9ž9;Y¤×òn#Ù8³˜´&= ýå{j:Ø99SZ©óùCo_bÆçÞìþæm&/ÂœZHü(ÃqÞUwæ7àwÇ“›;¶8Ñ)ïLzeñм,ö³ê9áÎÁ¹®Rß±XÑ\r}›šz ×’ÜÿÿåùŽd×aŸÏvï9w¿uk鮪ÞgzŽ8äP4-ɦ¬Hl¶Éóä¡‚  ÁÀ±"J”g8kOoÕUÕµß};›ÿp—Èï1>àû~  ^ƒéìY˜*þûŠCÝ*@¨eh¡´TêgB/W¦I+íq ­¥VØÕ Ô?¨­$î}«Áˆ óîü»A­}Kj%é®àùR¦m*3(Ýi»þؘ¡º'y×q›qÅÂß6±31ãÇgW&,^AEªV¸€x«AR#”¸Ñòµ9úþÇÐM6ºiÁ^èÎ'’Cª·†Õ*F[ J~К„îLÖÍÒ2¿â0-;~˜ºÌÃi¤DÉX©\iáβrnÂ]‹zß6„‚56„…”èÏIOf„"Ï“\HL”Ô@úÀ bT5y¹€Þ|`g‡Ðш’ÆÉc;êkOî`µãÆœ…X5€¤M„„O–¸v†Ú^ˆ¦-{—\$冬^,ʾZì¿wb1¾ÚRÓàîüñ{£ý|0»m¾ã­Ó% þ^‚øzÎâî6¬xeo¶y-ó6Yâ$%¹Ñ®ÃqYǃLׇ „…HàBý<Õªz`î浪³3_6êé¦Üå¿BI#4"¦ j€ÿ…erwÅA°e\hŠ¥›„ »£4jMã£TSè!7à××~²´G“m.¢|nùB±)Ž’)¥=ùn5·ð*÷ Ý ý(K9q+ `⧪8vy{Û|"P/°.¢»Sˆ•ˆ²¦±&ÝBë˜å–Õ™la±‡„-jP· ¯§ÑL€Æë݃¤fEè6÷#Ûˆ’2LbitV²rmÿck+Û`g:^Zõ)¨å4eÄ¿ÓòÝâB˜H3%—Ð4 ¬µTœŽóŸ~¤Ô ÂW@©„<¯4y;­ëeu,UÈ‹ðóç_¹ò¿n¾xí/šE±‹Œ»È¸c–EÍv‰ÝNÜ:-FrÈ"²+›ä(+Ñ+ÃÏÌ#®t$Áq™eÄð«Q_©]rÿÙ-ênÑ^¹úÊ? > iÇßdWóšÃ0Ö²¡IÓ%gÝŠ»Hú¼ÚT÷}Tʰøã+tØàÿÔÁ©¥“ ¿m ¤ðÜ'– °nŽxÛG¿S+jP%Z l‚*‰¤>>ª<²}C-Hd P`¥À„ûê¨êÒädÒtJ¶Ûò¢ñ~î?1ô·ç•Ôb3ðš”f§ñÔÊŠÖœyùùb1DŽëŒ š'ŽÏjÂèùÕ‘Õó.Ëyݦ³.ÖÍraÄF;½Ý‚ƒ)·&ý¬£§Ùd£=m—IbÕt³¯<1©íL˜Æé£ia—R73¼ó{º©Màg¸÷{¯Ÿî›küië3àï¯$ËN™¥a*‰'T©LíÛÿSRÈÆ@U Z6®…†òÏ5:­oÙêBB¬´ÔH))!;‡àMf/y§Ó8ÃÖûÄN^bÿ'ý3<ù×ìõætÎpÝÑíxtuØ4ÑèmVá —M"g Ú rg 4ô‘‘¦kuåá佨‹ª‰ÊAZsRCL"Ï&÷lÊš_˜“òÚîï‹‚_o8sÆÓd°çõ˜€»4÷à™†´ÉœÁÆÞ_Ž@ñf ¼½qñ¯ö ÖÏq:m´Ä˜·Úe­×@쪵OcûŸFÂ4 y«¤|ÑÚä[õ½e"[À9Z¤´ÖþO1¶ DÐ@ƒeßÜî‡úåÛ/¬t]iÇЃm=,ÖE0#dùÞ:¼ôÅ5)w¹Á\_û®Ý„S×ñ¦5Ð97ú]ÖF D_t'[eîº ÏŽ¶‹œì,w©\¬³qààÊàVðTG öËAÒiä5«±É V²ÖÜÁlø+Cc4Oî­hO%Ô"ªäQ™(7œ§U76¶¿&âSŒÚV!fVZiïyP,ÂÝÇV@þ»¡ÖÒ}0™Ž¬-­Cµc.=¨N_ÝuNÎO:ð7ð°©½¬¶5Ö~vpï¤ÅÞÎè~ð;mÔ¤¨¢"åÌàí4€‹tË»uLm§›4²[VÐ~¶gå6ð2ch„èÕÁþp F1 “¢þSÒª±Wô㘛£K£jµ,¯$"m£é†:éÍTn<ÀøWdÉ“ì ‡Ôöæ^æiE †–¸· ¬:ÿ5¦ŠKB™‚kbW\½ì‹î?;´lA¦J¥´ÖJÿMz:çC¥š–´ýÛw«ÞÓ£Gžø5Ìêô†¬ÂGU­7Fh\˜ صãAS«aqÆ™èùô—Äý ã?!›ð„úQÇ(„w3ë}Ü*½n‚(<½Ó:p/`ýb8cÈÞ WpY¹ltƒ‚[ ÚîÇ¢â]°ð:ì¢Wís¸(+Ó#(¿Ò[ºÃ#ÚàOuFÀêðhUÜäæ=÷{jÆ®ãç‘ „Žfñ ¤LrÈ0V¢ÑÊ«¹?5¤Uúä[W M)TPþ;Ñ€cõD¤Àw‚×pQmß5¯zò£™©µ;22ãÖýÙÁEß>­’¼ëÔÀÂ¥›OžÄÕõsAð~ª9ÈÉ‘{Ç'RÍd[lâ.AŠ×Ó.Мmx AÏøHŒÏåuïîl^Ó$kºÕF³Ûk¨³'ïùöQø!TS8 è®DNã+ܬí}’ôðßEWcrß+¢½ 0@FeÐä‘竤ã^;ød*ÔhC,…Žjµñ\+?.éÿvާ-ƒý¿ã%sîNpˆ¬ø[30oâkêýĈ� ©ôʸÛù~¡`žð-€·9ÔÄ/eBF“cWÀ榘)é7‘˜|⃺—–½«Ë4½±ì4F,\?ƒ.3 ðñ¯zï¦U¾—t¤¹·&°2·omÁ0¾Âã n, L}Øî=î“ö6hžo]TøF¥ :íÕσ«Ã¦QP @kcwW»Â¾’£^c,¡P˜¨5¸óàiwEpð‡j"išÔ¶)Á@)  ö¦(£+Z¤±‘›mvÝõ¿Ü; ¯¾õjéÙø0¾Cz9üÀÌtÏm“ÃÊMV{²·m–-°p/n˜7ì ¼é&‚–×°÷¶·žŸ«Ë€›7è`~»õ–ý¨gO–þÆ-RëîSñy7j!õ³fú£~ýÐØÒGf:•Ý¦sÛ,è.øE-vî®F²ŠDnEÿ|:Ó#yLE­r ¶r_·’pI› #«ÍÞ`‚a„—¡áÓwÜqûè÷ë‘LêzSB£Ú;Êðbvï–ˆ&ÕfÑrÔSÿãòLw R.‚ ^Ÿ‡·64ÊÂÇ^Ü$ÇüÝxÖ¡ô‹ ¬[‡X–€4Tüð#™Œj·.™ a0ɇ°.ilwoŸ¼qÊÖàj´?.·îö…h­Äí%».L²©¯Ež°Õ[„MòÛ¥~væ÷š+M%`i—ÍñßóµExw¼¸Ó‹]v_è9DS%fpåUõŽ0¨¹ÔÔ‚­2B¨ý*ÌmÒ\.<6Ñ&¶MÏS5ࣟ‰ù°¼ŽšqÏsظ¼I:ŸÛê·2oN:UHa?Úw/Û¾=vgÀ¬¯£˜”X’-/œî½÷™ŸÏzÚ(No|/ÛnY½IFFÄŠÛ!]òlfZ¢uðC,[xv˜Çvˆ´´½è´Í÷Šm*Æö«6—¾ê´+‹ìÆQ vÊ5û¨£æŽàùÛ¨{ A8¼Â;WÔÅ€ÂÄ;kZ‚^¬YKéö‚˜âjj%¹£$z¡‘í·Žþ°Ð°­JÎ…D&óÛ\ùOsÞ¸ÜOÂi ÔêV9?<2Ê߬#L‚{90¼×<|¼uŒTŠÏ osºLã]½·Ž®öq‰V òèVè–nºÈŒAan/šÁëˆ!}r¾ ÅlX² GŽv óSŠªÁª¿6ßûˆM‹vj­,°\i'NVö’‘ñx+óƒ½íxƒÖÈ#±_örç@©)þåY‡FÕÁ¾O-óª]äãµ÷hÆéó³?Î0ÁJIePB„j}Qÿô(ã?ÏÒÖ›Þ´¾…ȲS¸Ð}ç‚ ̾€E^Mlöuï/~Ë€)‚¢o²uÓ5‘‘ &ƒÝVNÇq3cÙ_*¼CzÏȶ¥›fV»~úöƒmÿ´Žmy9UÍ@ƼAÊ?Àq}qŸ†w¢}:^®®V‡¸RÕÖ»s˜„åUlÞZîÔ™e›˜ÚIô³¤Ä»/»kW»üŸãk)Ìz?m²Ü´Ä²ŠÛã+Ã}Û<àÿ'¥¦@(ÍAmõà-û— ¹"D 4,Òùý|¹XpýläŽEÊ‘Z¬¸eÿêÎõ¾ŒÀÛ·{ΕK‡¼o£ï˜{í¨¾`9 ½V•†À˜ie\å¾LqU€=Ò¥¥UW;.ýüø.Ú*çô)‘‹¸+ŠuL‰ø)ù:þ^ñÇÕAb'–-Çá&Í𾓋é"Î%cd9:ÿmÒΊ…kØ}ƒÿ~ÇÜ·Ý´"ÏûûOút™tÃv±÷ õþSj©V#Ã@@׎øý㻲 _hNM A6_nòª©Kà_Fi¬¤MÜöAlæWI÷àÙaWý¯¶cIc–N§÷²“ð*G@ceª¬®ü°ù”Þwá¶ì×öÆÿx¦½{Òxæn…ØP^÷FCí„­„– ˜k³PiÏîÀ~è}Ôíóáý»Ð>2ʲÐí6ëwu:ï/:¤å£–²Ã¥/ùŠmbüç/Ÿ¤lÂô¥á #Ðe.¾k‹:/y©ª.uvÁôUe&Ð09Sø³Àl’û÷íG­„Ôº¾i5¡¿>Y‹AëÑÛ¿ª¼ÏG§®ú Í£wÉ{`ñÝ¡¬Ô'J“®‘«‡ ›‡ÓJ\“ªM;Õé‘ýõ¬?o|ZæúÊ${órV\a¶+q,$%–¶ Fë2q½96Šá>ïZ¿gOŸí’K³<ì|¸õ̿잢Í?CÎ(‰Å*4X1¼ƒ}ÞÂv­9 ={68°öFU–Y›øò—£)ñãEç*ޞ˚×Ïà7fs»·«¬ä¬ê‡Q°:3-Π:œ&8zZ½¬œË¹âd×^õæŸdÞõKåKºÙ“"(yü`¹jÇÑaÄöä¡0ð;|%>ÝâÙ­svÛq›HæVú™¡1Þõ45· 8A Øëâ'GôZ M $„RФ5üìláeöÉ«ü¤Ïü¸ý° úŸuÇðýËM²èZ.[TëÞd­îò5²¶vÑê½F3wéÈ1 Š$?vtŸj[6ÝÛŽµVºd'DFý7ɳ\™ÃKºçËøÊ4³&í`í`r–ç ˜~í½ó3ó¼R;WY«æT¡A×ñCZƒ‰1ßkÖ{-g˜_aóਥ)þ0?_T}Ë*EÇÞm3mŸÊ;½Râá[òbÚJI Á’˜³ßvÁ¼;}/€bl­ ˆ7 ø‘{kŽDÙJL¬puɽÓÃ]ðÛ S à“¥ˆïœÓ¨f–Œ[÷Þ³;|X¼ñv`Ýe®Mç>ÜUp~uT¹k`سãaYÙ¯ƒq:Ž£ï¾&[kYÇÔ¹àôf¢¯Mgø‘ËÇõò+Ž×Sðdæõxú% ݦÈp²ËÖ‘’,°‡Gî«)Ýùø4_Q^!ðÿùþ A±sÏlI!IEND®B`‚ltfat/inst/signals/ltfattext.m0000664000175000017500000000323712612404255016404 0ustar susnaksusnakfunction s=ltfattext(); %-*- texinfo -*- %@deftypefn {Function} ltfattext %@verbatim %LTFATTEXT Load the 'ltfattext' test image % Usage: s=ltfattext; % % LTFATTEXT loads a 401 x600 black and white image of the word % 'LTFAT'. % % The image is assumed to be used as a spectrogram with 800 channels % as produced by DGTREAL. % % The returned matrix s consists of the integers 0 and 1, which have % been converted to double precision. % % To display the image, use imagesc with a gray colormap: % % imagesc(ltfattext); % colormap(gray); % axis('xy'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/ltfattext.html} %@seealso{ltfatlogo, dgtreal} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_SIGNALS % REFERENCE: OK if nargin>0 error('This function does not take input arguments.') end; f=mfilename('fullpath'); s=flipud(double(imread([f,'.png'])))/255; ltfat/inst/signals/noise.m0000664000175000017500000000654612612404255015510 0ustar susnaksusnakfunction outsig = noise(siglen,varargin) %-*- texinfo -*- %@deftypefn {Function} noise %@verbatim % NOISE Stochastic noise generator % Usage: outsig = noise(siglen,nsigs,type); % % Input parameters: % siglen : Length of the noise (samples) % nsigs : Number of signals (default is 1) % type : type of noise. See below. % % Output parameters: % outsig : siglen xnsigs signal vector % % NOISE(siglen,nsigs) generates nsigs channels containing white noise % of the given type with the length of siglen. The signals are arranged as % columns in the output. If only siglen is given, a column vector is % returned. % % NOISE takes the following optional parameters: % % 'white' Generate white (gaussian) noise. This is the default. % % 'pink' Generate pink noise. % % 'brown' Generate brown noise. % % 'red' This is the same as brown noise. % % By default, the noise is normalized to have a unit energy, but this can % be changed by passing a flag to NORMALIZE. % % Examples: % --------- % % White noise in the time-frequency domain: % % sgram(noise(5000,'white'),'dynrange',70); % % Pink noise in the time-frequency domain: % % sgram(noise(5000,'pink'),'dynrange',70); % % Brown/red noise in the time-frequency domain: % % sgram(noise(5000,'brown'),'dynrange',70); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/noise.html} %@seealso{normalize} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Hagen Wierstorf and Peter L. Soendergaard. % ------ Checking of input parameter ------------------------------------- if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isnumeric(siglen) || ~isscalar(siglen) || siglen<=0 error('%s: siglen has to be a positive scalar.',upper(mfilename)); end definput.import={'normalize'}; definput.importdefaults={'2'}; definput.flags.noisetype={'white','pink','brown','red'}; definput.keyvals.nsigs=1; [flags,kv,nsigs] = ltfatarghelper({'nsigs'},definput,varargin); if flags.do_white outsig=randn(siglen,nsigs); end; if flags.do_brown || flags.do_red outsig=cumsum(randn(siglen,nsigs)); end; if flags.do_pink % --- Handle trivial condition if siglen==1 outsig=ones(1,nsigs); return; end; % ------ Computation ----------------------------------------------------- fmax = floor(siglen/2)-1; f = (2:(fmax+1)).'; % 1/f amplitude factor a = 1./sqrt(f); % Random phase p = randn(fmax,nsigs) + i*randn(fmax,nsigs); sig = bsxfun(@times,a,p); outsig = ifftreal([ones(1,nsigs); sig; 1/(fmax+2)*ones(1,nsigs)],siglen); end; outsig=normalize(outsig,flags.norm); ltfat/inst/signals/cocktailparty.wav0000664000175000017500000261271412612404251017603 0ustar susnaksusnakRIFFÄ WAVEfmt D¬ˆXLISTINFOIART James Hartedata€ ”ÿ’ÿšÿ¨ÿ¥ÿ˜ÿœÿ”ÿŸÿ‘ÿ‘ÿ–ÿ”ÿ”ÿ’ÿ—ÿ”ÿ˜ÿ‘ÿ“ÿ’ÿ”ÿ—ÿ ÿ’ÿšÿÿ‘ÿŒÿ”ÿ‹ÿ™ÿ˜ÿ‘ÿÿ‘ÿ’ÿÿ—ÿ—ÿ›ÿ’ÿ—ÿ—ÿ˜ÿ“ÿ–ÿ–ÿ–ÿ˜ÿ•ÿ“ÿ”ÿÿ£ÿ”ÿšÿ–ÿ™ÿ—ÿŸÿ™ÿ“ÿ”ÿÿ•ÿ‘ÿ”ÿ•ÿ’ÿ“ÿ’ÿŽÿ’ÿŽÿ“ÿÿÿÿ“ÿ–ÿ—ÿ˜ÿ”ÿ‹ÿ’ÿ‹ÿ”ÿ“ÿÿ“ÿ“ÿ¡ÿ—ÿšÿ–ÿ˜ÿ›ÿ•ÿ™ÿ˜ÿ ÿ›ÿžÿ™ÿœÿ–ÿœÿ–ÿ ÿžÿ™ÿšÿœÿ›ÿžÿÿšÿ™ÿœÿ›ÿ¢ÿ–ÿ ÿÿŸÿ™ÿ£ÿ˜ÿžÿŸÿ¡ÿ¨ÿ¥ÿ£ÿ¥ÿ¨ÿ±ÿ°ÿ©ÿ­ÿ¤ÿ±ÿ¤ÿ¬ÿ©ÿ¨ÿ­ÿ¬ÿ©ÿ°ÿ°ÿ­ÿ¯ÿªÿ­ÿ¾ÿ¼ÿ²ÿ°ÿ¯ÿ³ÿ­ÿ°ÿ«ÿ¯ÿ¯ÿµÿ«ÿ¯ÿ°ÿ¬ÿ±ÿªÿ´ÿ«ÿ±ÿ°ÿ°ÿ±ÿ°ÿ¯ÿ¯ÿµÿ¯ÿºÿ³ÿ´ÿ¾ÿÇÿ·ÿºÿµÿ¸ÿÀÿ»ÿ¸ÿ½ÿ¸ÿ¶ÿ³ÿ¸ÿ´ÿ·ÿ·ÿºÿ½ÿ½ÿ¼ÿ»ÿÁÿ¼ÿÀÿºÿÁÿÀÿ½ÿÀÿÀÿºÿÄÿ»ÿÄÿÁÿÃÿÆÿÂÿÇÿÈÿÉÿÉÿÆÿÇÿÃÿÒÿÅÿÎÿÈÿÏÿÆÿÐÿÌÿßÿáÿÖÿÎÿÏÿÉÿÒÿÓÿÍÿÒÿÏÿÖÿÏÿËÿÎÿËÿÏÿÎÿÊÿÎÿËÿÓÿÙÿÏÿÌÿÍÿÐÿËÿÏÿÎÿÑÿÔÿËÿÍÿÎÿÌÿÇÿÍÿÎÿÊÿÏÿËÿÍÿÍÿÎÿËÿÍÿÌÿÊÿÒÿÌÿÒÿÒÿÝÿÒÿ×ÿÈÿÑÿÍÿÊÿÑÿÌÿÌÿÎÿÍÿÒÿÑÿÏÿ×ÿÊÿÖÿÐÿÔÿÍÿÐÿÌÿÒÿÏÿÎÿÑÿÕÿÑÿÌÿÐÿÎÿÊÿÌÿÉÿÌÿÊÿÍÿÍÿÌÿÍÿËÿÐÿÈÿÑÿËÿÊÿÎÿÎÿÐÿÌÿÍÿÈÿËÿÈÿÈÿÌÿÅÿÒÿÓÿÏÿÏÿÌÿÈÿÎÿÒÿÍÿÏÿÄÿÎÿÈÿÊÿÓÿÊÿÈÿÎÿÌÿÈÿËÿÇÿÌÿÉÿÐÿÆÿÇÿÃÿÅÿÅÿÎÿËÿÃÿÈÿÂÿÉÿÀÿÉÿËÿÕÿÏÿÄÿÅÿÈÿÆÿÇÿÄÿÊÿÆÿÈÿÇÿ¾ÿÉÿÀÿÇÿ¾ÿÅÿÃÿ½ÿÄÿÃÿÂÿËÿÄÿÁÿ½ÿ¿ÿ¿ÿ¿ÿ¿ÿºÿ½ÿ¼ÿ¹ÿ¹ÿ³ÿºÿ¸ÿ¾ÿÀÿºÿ½ÿ³ÿ·ÿµÿºÿ³ÿºÿ´ÿ³ÿ¶ÿ¸ÿ¾ÿ»ÿ¹ÿºÿ¶ÿ¶ÿµÿ¸ÿµÿ¸ÿºÿÀÿ¹ÿ¸ÿ³ÿ·ÿ·ÿ·ÿ´ÿ¼ÿ¾ÿ¹ÿ»ÿ»ÿ¸ÿ³ÿ²ÿºÿÀÿÀÿ»ÿ·ÿ±ÿ¸ÿ¯ÿºÿºÿÂÿ¶ÿ¼ÿ²ÿ·ÿ³ÿ»ÿ´ÿ·ÿ·ÿ®ÿ´ÿ³ÿ´ÿ»ÿ³ÿ»ÿ±ÿ·ÿ¯ÿ·ÿ¸ÿ»ÿ°ÿ¸ÿ±ÿ±ÿ¯ÿ±ÿ­ÿ¬ÿ¦ÿ±ÿ±ÿ¬ÿ©ÿ®ÿ¯ÿ¬ÿ³ÿ®ÿ°ÿ¨ÿ¬ÿªÿ´ÿ«ÿ¬ÿ´ÿ»ÿ°ÿ²ÿ¬ÿ¬ÿ²ÿ«ÿ®ÿ¬ÿ°ÿ©ÿªÿ¨ÿ©ÿ¨ÿªÿ®ÿ®ÿ²ÿµÿ¬ÿ°ÿ²ÿ°ÿ¬ÿ±ÿ«ÿ¯ÿ·ÿ®ÿ°ÿ¯ÿ³ÿ·ÿ¬ÿ°ÿ´ÿ°ÿ°ÿ³ÿ¸ÿ³ÿ·ÿ²ÿµÿ²ÿ®ÿ±ÿ­ÿµÿ²ÿµÿ³ÿ³ÿµÿ¯ÿ¹ÿ·ÿ¼ÿ­ÿ·ÿ°ÿºÿ´ÿµÿ¶ÿ´ÿ±ÿ¯ÿ²ÿ°ÿ®ÿ±ÿ®ÿ­ÿ¯ÿ«ÿ«ÿ¦ÿ­ÿ§ÿ­ÿ³ÿ¸ÿ¸ÿ²ÿ­ÿ¶ÿ²ÿ´ÿ²ÿ®ÿ°ÿ­ÿ°ÿ°ÿ°ÿ«ÿµÿ³ÿ±ÿ¸ÿ¿ÿ¸ÿ·ÿ¹ÿ¸ÿ»ÿ´ÿºÿ´ÿºÿ³ÿ·ÿ²ÿÀÿÆÿ×ÿ¿ÿÂÿ¼ÿÇÿ¾ÿÁÿ¼ÿÀÿÀÿÈÿ¼ÿ¾ÿ¿ÿÈÿ¿ÿÀÿÃÿ¿ÿ½ÿ½ÿÂÿ¾ÿÁÿ¿ÿÄÿÂÿÁÿÆÿ¿ÿÁÿÄÿÔÿÅÿÅÿÄÿÄÿÃÿÆÿÅÿÍÿÔÿÌÿÉÿÉÿÉÿÆÿÁÿÃÿÇÿÉÿÉÿÈÿÈÿ¿ÿÆÿ¿ÿÅÿÂÿÂÿÃÿºÿÁÿÀÿ¾ÿÇÿ½ÿÆÿÁÿÃÿÈÿÖÿÈÿÅÿÊÿÊÿÆÿÇÿÈÿÇÿÍÿÇÿÊÿÈÿÈÿÉÿÉÿÂÿÌÿÉÿÏÿÏÿÖÿÑÿÎÿÐÿÌÿÌÿÎÿÎÿÍÿËÿÎÿÍÿÚÿÙÿÒÿÎÿÔÿÇÿÏÿËÿÎÿËÿËÿËÿÈÿÌÿÊÿÕÿÄÿÑÿÄÿÌÿÀÿÏÿÊÿÆÿÎÿÎÿÓÿÈÿÓÿÌÿÔÿ×ÿÓÿÑÿÍÿÎÿÓÿæÿÙÿÔÿÐÿÒÿÇÿËÿÈÿËÿÒÿÑÿÇÿÍÿÃÿÎÿÍÿÑÿÊÿÔÿÏÿÒÿÆÿÏÿÉÿÍÿÊÿÆÿÈÿÅÿÉÿÉÿÐÿÊÿÍÿÌÿËÿÍÿÊÿÍÿÖÿÎÿÆÿÌÿÈÿÅÿÉÿÂÿÈÿÆÿÂÿÐÿËÿ¿ÿÆÿ»ÿÐÿÂÿÄÿ½ÿÀÿ¼ÿÏÿÍÿ¾ÿÀÿÂÿÏÿ¼ÿÁÿ»ÿ¼ÿ¾ÿ¹ÿ¼ÿ½ÿ¹ÿºÿ¾ÿ¸ÿ¹ÿ´ÿºÿµÿ»ÿ¹ÿ¸ÿ»ÿµÿ¸ÿ¹ÿ³ÿ»ÿ¾ÿ·ÿ¼ÿµÿ·ÿ´ÿ¹ÿºÿºÿ²ÿ¶ÿ¯ÿ»ÿ±ÿ´ÿ¶ÿ±ÿ·ÿÈÿÊÿ¹ÿ·ÿÅÿÂÿµÿ¹ÿ³ÿ±ÿ­ÿ³ÿ±ÿ²ÿ¸ÿ¹ÿ­ÿ¹ÿ±ÿ¾ÿÇÿÂÿ´ÿ±ÿ±ÿ±ÿ²ÿ°ÿ°ÿ½ÿ´ÿ²ÿ­ÿ®ÿ¬ÿ®ÿ±ÿ¸ÿ¸ÿ°ÿ´ÿ®ÿ°ÿ©ÿ¯ÿ©ÿ¨ÿ¬ÿ¬ÿ¬ÿ­ÿ¦ÿ«ÿ¤ÿ¦ÿ¥ÿ©ÿ§ÿ¦ÿ§ÿ¦ÿ¨ÿ£ÿ­ÿ¤ÿ¦ÿ¦ÿ¦ÿ¦ÿ¡ÿªÿ¡ÿ©ÿ¢ÿ§ÿ£ÿ§ÿ¡ÿ£ÿ¢ÿ¢ÿ¢ÿŸÿ§ÿžÿŸÿ ÿ¥ÿ ÿ¡ÿ¡ÿ©ÿ¥ÿ¥ÿ§ÿ£ÿ¬ÿ¢ÿ«ÿ¥ÿ£ÿ®ÿ«ÿ«ÿªÿ©ÿ«ÿ¯ÿ¸ÿ²ÿ¯ÿ±ÿ®ÿÆÿ¼ÿ³ÿ°ÿ°ÿ²ÿªÿ­ÿ­ÿ²ÿªÿ­ÿªÿ«ÿªÿ©ÿ¯ÿªÿ­ÿ¨ÿ­ÿ§ÿ«ÿ¬ÿ¬ÿ¯ÿ¬ÿ³ÿ²ÿªÿ®ÿ«ÿ²ÿ­ÿ®ÿ°ÿ­ÿ¬ÿ¤ÿ®ÿ§ÿ®ÿ©ÿªÿªÿ§ÿ¨ÿ³ÿ°ÿ®ÿ«ÿ¯ÿ°ÿ°ÿ¬ÿ±ÿ·ÿÀÿ¶ÿ·ÿ²ÿºÿ¹ÿ¸ÿºÿ²ÿ·ÿ¸ÿ¼ÿ¹ÿºÿ½ÿºÿ½ÿ¿ÿÈÿÁÿÅÿÂÿÂÿÁÿÆÿÀÿ¾ÿÂÿÀÿÁÿÄÿ½ÿÂÿÄÿÇÿÍÿÇÿÊÿÍÿÕÿÎÿÈÿËÿÊÿÉÿÌÿÇÿÌÿ×ÿÍÿÌÿÊÿÌÿÄÿÎÿÌÿÌÿÆÿÎÿÖÿÌÿÌÿÇÿÌÿÊÿÎÿÆÿÉÿÇÿÈÿÉÿÉÿÖÿÓÿÓÿÆÿÏÿÈÿÏÿÊÿÖÿÑÿÑÿÌÿËÿÒÿÊÿÒÿÑÿÕÿÖÿÌÿÖÿÐÿÔÿÒÿÔÿÒÿÍÿÓÿÍÿØÿØÿÙÿÓÿÕÿÕÿÖÿÚÿãÿáÿÜÿÚÿÛÿÞÿÙÿâÿ×ÿáÿÞÿÝÿáÿàÿáÿÞÿäÿÞÿÙÿÜÿÛÿØÿÛÿÙÿÛÿØÿÚÿÝÿØÿßÿÕÿÝÿÕÿØÿÝÿ×ÿØÿÙÿØÿÝÿØÿÜÿÚÿÚÿÚÿ×ÿàÿ×ÿßÿçÿáÿßÿèÿâÿâÿòÿëÿîÿïÿúÿñÿîÿùÿìÿòÿìÿíÿòÿéÿóÿöÿüÿöÿõÿöÿ÷ÿøÿüÿ÷ÿöÿùÿúÿûÿùÿúÿøÿÿÿ    þÿ úÿýÿøÿùÿöÿõÿùÿûÿûÿôÿõÿ÷ÿöÿòÿüÿÿÿùÿîÿîÿíÿðÿæÿéÿèÿæÿëÿàÿëÿÝÿêÿáÿèÿêÿãÿâÿßÿäÿßÿÛÿäÿÚÿáÿÞÿäÿàÿçÿêÿéÿâÿìÿæÿáÿâÿÞÿßÿàÿÝÿßÿ×ÿÛÿÛÿØÿßÿàÿÙÿÜÿ×ÿÝÿÓÿÜÿÖÿÙÿÜÿÝÿÞÿÚÿáÿçÿÝÿÞÿÜÿßÿÓÿÜÿÚÿàÿÛÿÞÿÛÿæÿßÿßÿâÿßÿÞÿÚÿßÿÚÿæÿèÿåÿéÿâÿäÿÞÿìÿ÷ÿçÿìÿàÿåÿâÿæÿÞÿìÿäÿèÿçÿêÿêÿçÿïÿîÿíÿðÿîÿòÿíÿöÿïÿ÷ÿõÿôÿùÿõÿõÿöÿôÿúÿõÿþÿýÿûÿóÿ÷ÿýÿÿÿøÿúÿ÷ÿöÿ÷ÿúÿóÿôÿúÿöÿðÿôÿîÿóÿïÿòÿïÿïÿôÿðÿñÿðÿïÿïÿ÷ÿìÿûÿûÿìÿïÿîÿðÿøÿîÿìÿçÿæÿâÿçÿàÿâÿåÿâÿàÿâÿàÿàÿÝÿÛÿÝÿÛÿØÿÙÿÝÿ×ÿÞÿÙÿÙÿÚÿÙÿÙÿÚÿÞÿßÿßÿâÿÝÿáÿæÿáÿãÿäÿßÿÜÿáÿÞÿäÿäÿçÿìÿñÿëÿëÿëÿçÿêÿîÿêÿïÿïÿíÿêÿïÿòÿêÿñÿîÿóÿïÿñÿôÿóÿôÿíÿöÿîÿøÿòÿøÿòÿúÿôÿøÿõÿûÿÿÿûÿùÿûÿÿÿ                #" #0/%& !)-&&))0(/('+)'& !#*%'" "#$"($')*%%#&*&''%!'')+)'&$'''&)+.)*%(")"&32,)(40./*,-,-%07362<38/2.43020/1,.'/1>/2../+.*.,540*631,0*.1*2))3'0'31=435.4.-(-(/+1,3---))775916,612/.3031.-0-./*1,.,.+,0-.,/0.,266,32AC<4/12.*-+,,,-)/2-21,+(',('%)7:+1+100<C29.4.7/202414138:55737;769677;98=6G9E=@AD?AFBLBKNGAF@BD>JEGLSCC>A<E<FBAB<LIDIDCGDHFGFIDHIHKFRa[TZ]RUKMIFDF@GDGCFFHCIFJFIIROOOMQPZRXSZTRQPSXOQPQMMMNLIMJMQKQLSSTe]WYRVS[QY^ea\]W_^`aZha`Zlb_^\]ab\daa\c__bZaZ\[^\ek]i`b``cfac_fabda^^\_Tefe_ca^__Z[XZYV]X]\[g]Zllfch^b^cbfcdc_]e^bca`]_^c`_tvoigg`gb\f`bba`bbhhig`dg`dfndhlgb`a`_]\`Zaa[]\_``gbia_\]^[bc^bVijab_]Y]`]Y]Z_X__`\_XZ]ZZXUW^]VVXSUYVb`c\\]\]Z\ced\h\`YVVS\SWLSKOSKN?DEB@?@::>4:58=A>656:48:9<<:??GFGKLHMKJJJXRMLLQJKROOSUMUNYVSQNQKPKNLNKIJLLNJLMWLNOGQJLIJQPINMNJQQLKKPLMGJFJJLZTMNGJLLBKCLDJXd[WIMILRNNJJFJIORJOGKMNHHHLJMKGGGDI?KFDFGJMPSIJFGHIFIM_QOLKFEHHLKRROKHMMPIOKLNMOPLSOWLWVXVbXYQZTSWSYV]]b]\\]\\V\XYZ_]\aU^Ubaa`a^`_dhg]g^f[ridbe`_^``\af`fWaZb`\ab[`^]^]baahcccdafdahb`hcjvlikgjlkrslifniiehdcecihdyplkenkjiejjponjnkljjgigefbolgejjdiivdmgfghhplwqoooqmjmholkmozlpprsjqmlgjjelvkjejjhh}lrgqpqojnkkflefilgfl_fd`a__[`X[]W\\_b`[a]Z[^W^X]Y]cYhn`h_a`c`]aa_\_`Ub`\T\VZb`Y\\Z\\\[ZZ]W_]^\`[`YaUbU^[[d]ac^[ZSWQUWTaXV[_YVPVRRSORNIRLPIRJRXZPSTcZ`\^[ZZQVMMPILIHJCJHQKQKSNUOYVQLMLRNNJRQLURVPUSRURSQNPMPKPGGGLHNGIJFHNJLEMFPHSJOUOSJNONONOPTLOPLNMPKQLMXUVSTRSRVKTQRLULGJFQONQLUKVNYWW_nf_UWXWVRTQPWR]U\TWOVNWPWM^S[LWHW@QHMJPLTYPYM^V_\YZSZUYXXek_]V[VYSTSTTRXP\Y[RWQRPSOT\[TX[VSSVOSQZSVUS[TWU]SYWSZW[]VVZVTVW[a\Y^Yb`\]]\`]^^^b]_\f[cW]_`[][^[YZ[YZZV[^XZVYUT[pa^[\Z\YYZ[[PXS[S`fc[W[_QZOUSUSSUXRTSWYUXPUUR\[U\TZXW\V^SXSYUS]VRTWVPSRei\XOXZRSOZ\UUSPPMSILTNMGOAQVXMFDFCKBD@@@=E;G<EEB@<GBC??:=:@AEPIB?A@BCI=<?<;=9?>B=>>AGC;:768:?H>:963B@6/405046&0,*+-*135/2.2*+++)'972*0%/*)((*#&#(" "(3:.,.)&*$/)+"+(*(%$$$"1.,'$$(!*'!#$" "/6$"$$$!"#  ( $ #'  !$!%# !&!#'#&&%%*(+(*#((33)-*.0$)!(##$!%%%$"+'%"-+&*&-1(. ,&-,,*3,,02>://*&()%*')+'&(())+&2,*/3:4404./0/-3614343:58:57343312>8;4/513GC584/21;20-/*.*1(,*),$-&6,/*0*0).**10+0/./-0,,..45117-3(548/F;724/34/7545880/5-3-1.A8412-/*1&/2-(+,*)+++)#())%-$)+ '()-(-&-.1/+++))&'$#/&(&)"07-0/.(()11..0'.&*+()'3+(*',")$$#'!"(!%&!(&*&*!&!%"$%)"!+#.!+,*%&$ "((""#,-#%$%*&'"$(*#%!#")!$ &!#"$# "" ! # #,1%#&!##$!""."&"%$%)%#%")($**($+"*)'+'*'+(5)7%-)+-0;8.3,3-00.)11.5+01'/)+++-(+++,'+'.*1.574DE9710020+68975835+9A:45/=6::8858297=:5<84:9<<;8FIB@K]IHD>=8:<9>9:9=E4<;?8>@?=2==?NDA=B@B;AABBFF>B:E:>;=:@;<:>B?KMRMIDGLMGHDHEIPPJJGEHHJJOIMDG@E?HEDCFDDBA=C=@D>AFC<@9;@=A?=<B;<;;;94;4863:38768=;52;27344777797;696774946040151406207-35?620A54-/3,.,2411+273*--,(+'((!+"-"+!'%!'&##$!#" %!!  ýÿ üÿýÿýÿþÿýÿþÿûÿÿÿ               ÿÿþÿýÿþÿ         "'"%&(" !  $! #,'(+%($$&)#0%-$:5,3832-,..44083190,+/(-1.4/4-+2,14-,)*))).4(0).)*'-++-,-/1*(-+'-.+-/0,..//.2)..*0+-*1--'.((,+/-..,--,/(,))+,/20,,,*+)'+)&)*),*73.*4/+)+6)1+'.)(-%*)/')+,-'&$%& $$+(&!!$%#""!'$#" ""#(#$&! #!! "!#"% "(-%#" "!" ""!#!!&* +,#/*!#&6.&#'%(!& " "!#&, &$$'"%'%(("&-14'*&$') +(%$($,$'%#&*-(&%&'/'-0-1'1.-.,(.,,)*-/*0131/345A:>3;8@GA:=:;:8=4A<8E=F?C<B<DGIIB@>AIGBF?I:J<BCAG=@A@>@?BFAE=B?ABDCEPWLJAEEGI@IFGGFSXNLIKOMKJMMMGJTLKNRJOJJILKNMRRVRVR^dVXSSQOMQO^^VTMMPZOOMNFMLMJJOKRJRJJN`b^RUOMTHTMPOROLPJLILBFJJEGEFICWJLFFIBKSUOMLOPFLJLPXNOEOHKHEHDRFOGFPEERTLKOFAAA>CACFBJMLGGJHCBD??;A==>>>==BA=@:==79;=6<9<=8<BH?CA?<B;B>>D??8@>;667565-:041110415.0+8/173272592203573541/3058856946>A<984:98696@=9B?;:;;?6<;<CA<9?<@8=<AE?<;;;578:3977272:57270505.147653<46:087;>595455529668<9;?>@?IGEFBC?DEKFIDHCABACH@U[RNKOMIGKKGOHJGLPIRDHFIGIHFGOOLOKMeSRPITKQLUQWTMTQXYVTUURSTOZOZQVY[ZXSZUZTSRWTYUUXUWVSYR\[WTVSV_[ZWRR]QYSg[TVSWLMNMQTTHLZSWONJMNPPLSIIGOHJNNKKODSKRLHIJGKFLPLNJLTQMPOVHXNLROLFJMNZUNMNGKOGLFOKILHLBHIEHEMNLKBCABCLFG>D<DFF@FB=?57:95884A<;63725:68?1:?B18102.4,9GC<.9=26.1%.)-+52--.*.+" '0:QPURQDB;<<=96(%# ýÿöÿðÿéÿôÿêÿçÿëÿëÿóÿïÿæÿîÿèÿçÿíÿìÿìÿîÿéÿõÿþÿüÿþÿ  &,"%%!-5,$%   ÿÿþÿýÿ      #"           ÿÿ    þÿ ÿÿÿÿ   #%#%!0/'#(%&$ "*% !  üÿýÿúÿüÿ÷ÿþÿýÿ þÿüÿûÿýÿþÿ÷ÿûÿúÿûÿ÷ÿøÿôÿ õÿûÿýÿöÿöÿöÿõÿùÿùÿûÿýÿÿÿúÿýÿ ýÿÿÿÿÿÿÿþÿýÿýÿÿÿþÿøÿþÿþÿþÿþÿþÿùÿüÿüÿ÷ÿøÿýÿõÿùÿ÷ÿôÿûÿøÿôÿþÿûÿûÿþÿ ýÿýÿòÿöÿíÿúÿïÿéÿìÿëÿêÿíÿåÿçÿèÿåÿèÿåÿèÿæÿêÿçÿëÿèÿïÿïÿïÿèÿîÿèÿëÿïÿíÿîÿîÿðÿíÿìÿçÿìÿçÿæÿäÿæÿêÿäÿèÿÜÿäÿÛÿáÿáÿßÿÜÿÞÿàÿâÿáÿáÿæÿÞÿãÿßÿäÿÞÿâÿæÿäÿäÿâÿßÿÞÿÝÿÜÿÜÿàÿÚÿÜÿ×ÿÚÿÒÿÙÿÒÿßÿæÿàÿÙÿ×ÿîÿåÿÝÿÐÿÓÿÓÿÎÿÖÿÑÿÔÿÖÿØÿÑÿÖÿÒÿÒÿÑÿÒÿÐÿÍÿÐÿÐÿÖÿÕÿÔÿÓÿÎÿ×ÿÕÿÎÿÕÿÑÿÓÿÍÿÕÿËÿÓÿÎÿÒÿÒÿÕÿ×ÿÖÿÝÿÙÿÚÿ×ÿåÿãÿÚÿáÿÖÿÚÿÖÿÕÿÒÿ×ÿ×ÿ×ÿÐÿâÿêÿèÿñÿæÿÛÿÜÿØÿØÿÓÿÛÿÖÿÖÿÕÿÖÿÕÿÛÿÝÿÜÿÙÿÛÿÛÿÝÿ×ÿÓÿÐÿÒÿÑÿÑÿÕÿÒÿÖÿÒÿÒÿÖÿÏÿÍÿÍÿÄÿÍÿÒÿËÿÄÿÉÿÊÿÍÿÊÿÌÿÊÿÆÿÐÿËÿÓÿÎÿÏÿÓÿËÿ×ÿÑÿÔÿÕÿßÿ×ÿÙÿÝÿàÿÙÿêÿæÿÚÿâÿÕÿßÿâÿäÿßÿÞÿÞÿàÿáÿÝÿÜÿßÿàÿâÿîÿëÿçÿêÿåÿæÿãÿÞÿèÿåÿçÿâÿæÿäÿëÿâÿïÿìÿéÿîÿçÿçÿìÿæÿãÿæÿáÿâÿãÿáÿäÿáÿÞÿÛÿãÿÜÿÚÿÒÿÞÿÒÿÝÿÖÿÜÿØÿÜÿÕÿàÿÔÿÛÿÔÿßÿâÿçÿåÿÝÿßÿÜÿßÿÞÿàÿáÿßÿÝÿßÿåÿßÿçÿÝÿßÿæÿåÿäÿÜÿæÿàÿáÿåÿåÿèÿçÿçÿëÿêÿåÿèÿæÿïÿèÿïÿìÿðÿìÿïÿïÿôÿ÷ÿôÿöÿöÿûÿöÿôÿõÿñÿïÿóÿóÿõÿøÿõÿøÿóÿôÿðÿîÿðÿíÿëÿëÿïÿçÿíÿìÿçÿèÿèÿæÿèÿíÿëÿéÿêÿéÿìÿçÿîÿùÿöÿþÿîÿïÿõÿôÿìÿïÿìÿìÿêÿéÿèÿçÿçÿéÿøÿ÷ÿöÿüÿóÿôÿðÿòÿëÿòÿíÿìÿïÿíÿñÿðÿñÿ ùÿõÿùÿôÿýÿõÿøÿóÿùÿöÿôÿòÿòÿþÿôÿ ÷ÿùÿòÿóÿôÿûÿüÿ÷ÿõÿñÿñÿîÿûÿüÿ÷ÿóÿöÿõÿøÿîÿöÿ÷ÿùÿñÿôÿíÿíÿóÿòÿñÿîÿêÿôÿêÿóÿíÿñÿñÿùÿûÿðÿòÿãÿóÿöÿñÿèÿåÿäÿãÿäÿàÿäÿãÿÞÿåÿçÿßÿéÿîÿéÿêÿìÿêÿëÿçÿèÿèÿåÿèÿãÿãÿßÿäÿáÿàÿæÿãÿëÿíÿìÿåÿíÿæÿìÿéÿæÿêÿáÿæÿìÿñÿëÿâÿçÿæÿåÿñÿíÿêÿßÿäÿ×ÿàÿÙÿâÿÙÿáÿ×ÿÞÿßÿÚÿßÿÙÿôÿßÿäÿÚÿßÿ×ÿ×ÿÙÿÙÿÕÿäÿÛÿâÿÖÿÙÿâÿÚÿÙÿÔÿëÿéÿßÿÞÿÒÿÖÿÐÿØÿÓÿÍÿÐÿËÿÍÿÍÿÌÿØÿÕÿÐÿÒÿÒÿÏÿÏÿÒÿÏÿÒÿÏÿÕÿ×ÿÖÿÕÿÒÿÕÿÛÿÖÿÖÿ×ÿÐÿ×ÿÔÿÜÿÔÿÚÿ×ÿâÿÚÿÝÿÔÿÛÿ×ÿÓÿØÿÕÿÖÿÔÿÙÿÔÿ×ÿÖÿ×ÿÐÿÕÿÜÿ×ÿÔÿØÿÖÿÑÿÓÿÏÿÒÿÑÿÔÿÈÿÒÿÏÿÏÿÒÿÌÿÕÿÓÿäÿÝÿÖÿàÿÏÿ×ÿÉÿÒÿÈÿÓÿØÿØÿËÿÏÿÊÿÏÿÉÿËÿÈÿËÿÌÿÈÿÎÿÆÿÒÿËÿÏÿÐÿÏÿØÿÏÿÐÿØÿÐÿÒÿÑÿÒÿÒÿÕÿÏÿÕÿÐÿÏÿÒÿÒÿÕÿÐÿèÿÖÿÖÿÐÿÏÿÍÿÔÿÑÿÐÿÏÿÏÿÎÿßÿÕÿÔÿ×ÿÈÿ×ÿÍÿÑÿÐÿÌÿÓÿÎÿÐÿÌÿÔÿÏÿÓÿÔÿÙÿØÿÔÿÕÿÙÿÓÿÐÿÔÿÔÿÔÿÔÿÓÿÕÿ×ÿÖÿÚÿÔÿ×ÿÛÿÖÿØÿÝÿÙÿØÿÙÿÚÿáÿÙÿ×ÿÙÿØÿÙÿÜÿÙÿßÿßÿÖÿÛÿÚÿÙÿâÿßÿÝÿàÿØÿßÿßÿáÿáÿÙÿÜÿÜÿäÿÜÿßÿßÿßÿÝÿßÿàÿçÿÝÿßÿàÿÙÿáÿÝÿãÿáÿßÿÞÿâÿàÿãÿãÿÞÿÞÿÞÿÛÿÞÿÚÿßÿÙÿÛÿÛÿÞÿÙÿÝÿÝÿáÿàÿÜÿÝÿÜÿÛÿÛÿÓÿÝÿÝÿØÿßÿïÿçÿÞÿØÿØÿÚÿ×ÿÔÿÖÿ×ÿÔÿ×ÿ×ÿÔÿÐÿ×ÿÍÿØÿÕÿËÿÏÿËÿÐÿÏÿÏÿÓÿÒÿÙÿÐÿÔÿÖÿ×ÿßÿßÿÞÿæÿÖÿÚÿÓÿÙÿÙÿÖÿÖÿØÿÖÿÝÿÞÿÝÿÛÿÕÿØÿÍÿÕÿÍÿÑÿÐÿÔÿàÿÚÿÌÿÕÿÉÿÉÿÍÿÊÿÑÿÊÿÐÿÍÿÌÿÐÿÑÿÓÿÊÿÏÿÃÿÊÿÆÿÊÿÓÿÓÿËÿÎÿÈÿÏÿÇÿÑÿÉÿÌÿÉÿÇÿÈÿÉÿÑÿÏÿÉÿÇÿÉÿÄÿÅÿÈÿºÿ½ÿÉÿÏÿÖÿÍÿÏÿÈÿÎÿÇÿÎÿËÿÀÿÁÿÂÿÈÿÃÿºÿ¼ÿ»ÿÁÿÁÿÃÿÈÿÆÿËÿÕÿÍÿËÿÊÿÉÿÔÿÊÿÌÿÎÿÇÿÅÿÅÿÀÿ»ÿ¼ÿ¿ÿ¹ÿÇÿÇÿÇÿ»ÿÏÿÒÿÉÿÂÿ¼ÿ¹ÿ¿ÿºÿ»ÿ¼ÿ¹ÿ´ÿ¹ÿºÿ¶ÿ±ÿ´ÿ­ÿ²ÿ²ÿµÿºÿ¿ÿ·ÿ¶ÿ³ÿ±ÿ«ÿ±ÿ¨ÿ­ÿªÿ¨ÿ«ÿ¨ÿ©ÿªÿ¸ÿ®ÿ±ÿ©ÿªÿ¥ÿ¤ÿ¨ÿ£ÿ¬ÿ£ÿ©ÿ­ÿ¦ÿ©ÿ¥ÿ«ÿ§ÿ©ÿ«ÿ­ÿ¨ÿ­ÿ«ÿ«ÿ«ÿ©ÿ­ÿ£ÿ¦ÿ£ÿªÿ¢ÿ¨ÿ¥ÿ¨ÿ¨ÿ¦ÿªÿ§ÿ§ÿ£ÿ¦ÿ£ÿ¢ÿ¡ÿªÿ¢ÿ©ÿ§ÿ¥ÿžÿ ÿ¡ÿšÿ ÿšÿ¢ÿ¤ÿ¥ÿ©ÿ¬ÿ¢ÿ¦ÿœÿŸÿŸÿ¡ÿ¨ÿ¯ÿ­ÿ¨ÿ¨ÿ£ÿ«ÿ­ÿ¥ÿ¢ÿ¥ÿŸÿ ÿ ÿ¤ÿ£ÿžÿ¢ÿ¢ÿŸÿ¡ÿžÿ¢ÿ¡ÿœÿ¤ÿ™ÿ ÿžÿÿÿžÿŸÿ ÿ¡ÿœÿšÿšÿœÿŸÿ“ÿÊÿHHNúÿêÿŸÿ]ÿ3ÿÿùþçþÿ"ÿSÿdÿÿÿ½ÿ¾ÿ×ÿñÿÿÿ$)" ðÿÒÿ†ÿTÿ*ÿÿÿ$ÿ1ÿOÿ\ÿjÿˆÿ‘ÿ­ÿÃÿÎÿÕÿÕÿÑÿËÿ¹ÿ¸ÿ£ÿÿ‡ÿ‡ÿ†ÿ}ÿŠÿŽÿ–ÿ”ÿÁÿ+2Þÿ§ÿšÿŒÿYÿKÿUÿOÿYÿjÿ…ÿ–ÿ˜ÿ¬ÿªÿ»ÿºÿ´ÿÙÿåÿèÿëÿÕÿÏÿ¶ÿ¥ÿƒÿfÿiÿ{ÿƒÿ‹ÿŒÿÿ™ÿ–ÿ¢ÿ«ÿ®ÿ½ÿÃÿÈÿµÿ´ÿ¤ÿ¡ÿ ÿ¡ÿ¦ÿ¦ÿ§ÿ¯ÿµÿºÿ¥ÿœÿÿ”ÿÿ£ÿ®ÿ¸ÿ½ÿûÿ7ÖÿœÿŠÿ¦ÿ¦ÿ«ÿ­ÿ§ÿ‘ÿÿŸÿ§ÿ’ÿ†ÿƒÿˆÿ©ÿÈÿËÿâÿçÿÝÿÐÿµÿ»ÿ ÿ”ÿ|ÿÿ ÿ¥ÿ ÿ›ÿ•ÿ‰ÿÿ¥ÿÀÿÄÿÆÿÇÿÒÿÇÿÌÿ¾ÿl¸ÿUÿyÿ¬ÿ¤ÿÿ¡ÿuÿ‰ÿŽÿºÿáÿìÿÁÿØÿÌÿÍÿÐÿöÿýÿÁÿ¹ÿ¾ÿ£ÿ±ÿŽÿkÿ@ÿdÿ¸ÿâÿÎÿÌÿñÿs—ÎÿÿÿQÿÿÂÿL< Íÿ}ÿ+ÿÿJÿšÿÎÿçÿ ñÿÙÿÇÿÿ‰ÿsÿnÿjÿ›ÿäÿ íÿµÿšÿ‰ÿ‡ÿ”ÿ®ÿ½ÿÖÿ×ÿÊÿªÿ—ÿ‚ÿ…ÿ£ÿÁÿËÿµÿ»ÿ¬ÿ¬ÿªÿ¥ÿµÿ»ÿÓÿÏÿÈÿÉÿºÿ·ÿÁÿÃÿÇÿÇÿËÿÅÿ¸ÿºÿ·ÿÌÿÐÿÉÿÆÿÁÿ¾ÿ¸ÿ»ÿÂÿÁÿÕÿØÿÈÿÊÿ¿ÿ¼ÿ·ÿ¿ÿ¾ÿÅÿÁÿÄÿÀÿÄÿÂÿ½ÿÀÿÓÿÔÿÙÿÓÿÊÿ¼ÿ¶ÿ¸ÿ¶ÿ·ÿÁÿÁÿ¼ÿ½ÿ¸ÿÀÿ¹ÿÁÿÂÿÇÿÄÿ¼ÿ½ÿ·ÿºÿ²ÿ¶ÿ´ÿ´ÿµÿ·ÿ¼ÿ¿ÿÑÿßÿÒÿ¬ÿ—ÿ—ÿ¹ÿ¿ÿÒÿÚÿÂÿ§ÿ«ÿ°ÿÅÿ¿ÿÉÿ¿ÿµÿ±ÿ±ÿºÿºÿ¶ÿ¯ÿ®ÿ¦ÿÿžÿ ÿ«ÿ­ÿºÿµÿ±ÿ˜ÿ—ÿ–ÿ¬ÿ¶ÿ½ÿ³ÿ¡ÿ¡ÿžÿ¹ÿ¾ÿÃÿ¶ÿžÿŽÿžÿ¬ÿ³ÿ ÿ–ÿÿÿŸÿ²ÿµÿšÿ‰ÿ„ÿÿ©ÿµÿ©ÿžÿÿšÿ›ÿ®ÿ¥ÿ¯ÿ¬ÿ ÿÿŸÿ£ÿ¥ÿ¡ÿ¢ÿžÿšÿ™ÿ¡ÿœÿÿšÿŸÿ›ÿ¡ÿŸÿ¬ÿ¬ÿ±ÿ¥ÿ¢ÿ ÿ«ÿ¥ÿ¬ÿ›ÿ¢ÿœÿ¥ÿ˜ÿ¨ÿœÿ ÿ™ÿÿ ÿŸÿšÿ™ÿŸÿ˜ÿšÿÿÿ¦ÿ ÿ™ÿœÿ ÿ¢ÿ¥ÿžÿŸÿšÿ™ÿ•ÿ’ÿ˜ÿŸÿ¦ÿ¤ÿ¡ÿ¥ÿ¤ÿ˜ÿ™ÿšÿ˜ÿ›ÿšÿŸÿ©ÿ¢ÿ¡ÿšÿœÿ™ÿœÿ›ÿœÿ¥ÿ¯ÿ¯ÿ¥ÿ¦ÿ¨ÿ ÿ«ÿ­ÿ¨ÿ¡ÿ¦ÿ¥ÿ›ÿ˜ÿ™ÿœÿ ÿ¥ÿ¤ÿ–ÿ‘ÿÿ–ÿ•ÿ¦ÿ¢ÿ¢ÿœÿ ÿšÿ˜ÿÿ™ÿ£ÿ¨ÿ¦ÿ ÿ¢ÿÿ™ÿÿ“ÿ‘ÿ˜ÿ•ÿ—ÿ’ÿ”ÿ”ÿ’ÿ’ÿ”ÿ›ÿ–ÿšÿ™ÿ™ÿÿ‘ÿ“ÿ•ÿ–ÿ—ÿ”ÿ”ÿ“ÿ†ÿŽÿ‹ÿšÿ¤ÿ£ÿ¡ÿœÿŸÿ–ÿšÿšÿ ÿ¦ÿœÿœÿ˜ÿ–ÿ›ÿ¡ÿžÿ©ÿ›ÿ£ÿªÿªÿ£ÿ§ÿœÿ¥ÿ™ÿ¢ÿ¡ÿ°ÿ­ÿ¯ÿ«ÿ«ÿ±ÿ®ÿ¹ÿ´ÿºÿ³ÿ®ÿ²ÿ·ÿÀÿ¼ÿÃÿÄÿÀÿ¶ÿ¶ÿ¾ÿàÿøÿÿkÿ¤ÿÈÿßÿîÿØÿ°ÿ£ÿ¼ÿ½ÿÇÿÚÿÖÿ¶ÿªÿµÿÉÿÃÿÒÿÔÿÐÿ¹ÿ£ÿ°ÿÇÿ½ÿ²ÿÈÿ×ÿÈÿ­ÿ©ÿ´ÿ ÿ¶ÿÄÿÎÿÇÿ¹ÿ±ÿ²ÿ´ÿ¸ÿËÿÇÿ¼ÿ¹ÿ¯ÿ¹ÿ±ÿÃÿÁÿÅÿ¼ÿ´ÿ°ÿ»ÿÁÿÄÿÇÿÂÿ¾ÿ½ÿÅÿËÿÈÿÆÿÃÿ¾ÿÄÿ½ÿÊÿÆÿÊÿÁÿØÿÓÿÓÿäÿßÿàÿÌÿÔÿÓÿÏÿØÿÚÿ×ÿÞÿÒÿßÿÍÿÔÿÌÿØÿÔÿßÿÙÿÖÿÜÿÖÿ×ÿßÿÜÿÙÿÛÿ×ÿÖÿ×ÿÛÿÑÿÙÿÙÿÚÿÛÿßÿãÿçÿãÿåÿêÿîÿëÿàÿÝÿãÿåÿâÿÜÿòÿñÿìÿêÿëÿæÿçÿâÿäÿÜÿÞÿÛÿÝÿÛÿåÿÝÿÞÿÕÿÜÿÚÿÞÿÞÿåÿàÿèÿÞÿäÿæÿàÿåÿäÿäÿèÿâÿãÿãÿæÿãÿäÿßÿíÿçÿíÿæÿåÿâÿåÿëÿåÿéÿëÿæÿàÿåÿâÿôÿçÿæÿáÿÝÿàÿÜÿÞÿØÿÝÿÚÿÞÿÞÿàÿàÿäÿæÿàÿÛÿÖÿØÿÙÿÝÿÚÿÚÿÝÿÒÿÚÿÖÿÙÿÙÿÙÿÝÿÕÿÕÿØÿÖÿ×ÿÛÿØÿÎÿÍÿÉÿÉÿÎÿÖÿ×ÿÉÿÕÿÐÿËÿÎÿÉÿÚÿÔÿÙÿÖÿÛÿ×ÿØÿÛÿêÿâÿÝÿÛÿÛÿÞÿãÿÝÿÞÿÞÿàÿáÿçÿÝÿÜÿÛÿÚÿåÿæÿÝÿÙÿÙÿÜÿÚÿÞÿÛÿÞÿØÿÛÿÚÿÜÿàÿáÿâÿãÿÝÿßÿÛÿæÿîÿæÿçÿÜÿâÿàÿÚÿßÿÝÿÙÿÕÿÖÿÛÿÚÿáÿØÿØÿ×ÿÖÿÒÿÕÿÑÿÚÿÛÿ×ÿÕÿËÿÜÿÔÿÓÿ×ÿÕÿÑÿËÿÏÿÐÿÎÿÏÿÑÿÑÿÒÿ×ÿÓÿÐÿÑÿÎÿßÿÖÿÚÿÒÿ×ÿÏÿÎÿËÿÉÿÌÿÅÿÎÿÀÿÉÿÅÿÑÿÞÿçÿÚÿÔÿØÿÚÿ×ÿÑÿÈÿÈÿÇÿÉÿÉÿÎÿÏÿÇÿÏÿÅÿÑÿÐÿÓÿÓÿÔÿÐÿÊÿÙÿÒÿßÿØÿÛÿÓÿàÿÛÿÓÿÖÿÐÿ×ÿÖÿÔÿÛÿÙÿÝÿïÿÛÿÞÿÖÿÛÿÕÿÛÿàÿÙÿÛÿãÿÙÿÚÿÖÿÜÿÚÿØÿÙÿØÿÜÿáÿÞÿßÿâÿáÿ×ÿÞÿäÿØÿÚÿÝÿßÿáÿÝÿÚÿãÿ×ÿßÿÙÿÞÿÞÿÞÿßÿäÿÞÿáÿÝÿÝÿàÿäÿßÿãÿàÿÝÿàÿáÿëÿòÿëÿâÿèÿçÿäÿèÿâÿßÿìÿæÿéÿçÿìÿóÿëÿëÿêÿêÿíÿõÿìÿïÿãÿëÿñÿéÿçÿëÿæÿóÿîÿþÿøÿòÿìÿæÿéÿçÿäÿêÿãÿèÿãÿèÿìÿìÿêÿóÿíÿêÿïÿæÿîÿéÿìÿèÿêÿçÿîÿêÿîÿêÿðÿêÿðÿëÿðÿðÿöÿòÿóÿóÿòÿôÿúÿöÿúÿ÷ÿùÿûÿýÿþÿ                  !%!"+$ !  ,+!! %$#! %$!!##%'#&#!#"$ "%%$&$ )-'! "! ' "#$#$!%' "#", $% "" "# """ $%! "#"#'))$$-%(+)',)00/'-),.,-(*0+./.1240001200.444A;=<<<@=>B;?<?A>C<FDE@JEFIIRKRILHELIIGFHLGHKJPNSMU`\UY[Z^V\]Y^X]S[SVV_hdfajfkcdbdihpjghebfefgjhggjjflgjdjgkhnjvvlwonkqmnnjqppurtsty{zy~‚ƒ€‚ƒ‚€Š‰Œ‰Š‰††Œ‡ŽŒˆ‡‰Ž‰ŽˆŽˆŠ‰‹‡Œ•œ“‹ŽŽ‘Ž œ˜•—–‘”Ž‰ŽŠŽ‹‹ˆ••ŒŽ‡”¡¢–ޑЋˆ†‰ˆˆŽ’¨ž›’•‘’™“•˜˜”Ž’’“‘“—™–“’—“—”“—•™•–‘“•’“•œ”–’•—’’‰–“Ž——“—‘˜›–˜Ž•™›‘”Ž••—“˜ŒŠˆ‰‹‰‡Š‰‰…Ž„‡„€…„†ˆ‰‡…‰„…‡}„„…ƒ‚‚†ƒ‚†‡…„ƒˆ‚|ˆƒy{yw{‚‚€}ƒ†€€…~€‚…‚ˆ„…ˆ‡…€…ˆ‚‚„}~|~}y€ww|y„‘€x}wuz}€ƒyƒ…ƒ„~ƒ€€z€Š€€|…ƒ‚€€‚‰„Š……‰…‰…Šƒ†ˆ…„‹ƒ““‹‹ŒŠ‹ˆ‹ˆŒ‡…‰™–‰…ˆ‚„…†ƒ„…‡ƒŒˆ…ЉŸšŒ‡ŠŠŠ„…‹‰”Šˆ‹‹‰’Œ’’‹’Ž˜“›’—––—’ž™ œ››š˜•œ––›“™•–™”››žœ™¨­£¢Ÿ¨Ÿ£Ÿ£ ©§£¤¦££¥¤¯®¨©§¥°±§££¡¢¦¥©£ª²­®«®¨©¦«§«ª¬¬¯ª©¥¡§¤¦¤¤¤¨¨­§³«°®±±¬±·µ¯ª©¨¥¦ ¥Ÿ¥£ ¤¢¯ª¬­¤£«£¥£¢¤¢ª¦¥£¢¡¨¥ ¢Ÿž­ª¦§§¥ ©¡§ £¢§±¥¢¦¥¡   šš›˜Ÿž£—Ÿšž™œž¬¤¤ ¢œœšœ•œ˜›œ ›¢§¡¦Ÿœž¥¢›—–›™––“––’•”˜——–˜š”–˜˜—’–“—’’“”Ž”‡“‰Ž‡ˆ‰‡ŽŠƒ‚ƒ„‚†Š—ˆ‡†…‹„‚‡€‰ŽŒ††‚€†€{z|w{y|}|vwxy€y‚|…€‡Š‡…„Œˆˆ†„‡‰ˆŒƒ‡‹ˆˆ’Œ‹–‰‡„†……ˆŽ‡‹‡Ž’———‘—–“”–œ–’Ž“‰Œ‹–„‹„‰‰…‰‹‹‡‹‹‹’ŒŒœš“Œ“Œ•Œ“•“Ž“–ŒŽŠ””‡‘Ž‹‘•’˜›œ—ž“ž–›˜¤¡˜Ÿ¤•¤œ ››¦¨®¡ Ÿžž §£¤ ¡ ª«°¨§¢¨¢ª¤«¢¨£¨¢¨¤ª¢ª©¬©­«¸·´¬­¶©­ª¯©²©º±°±²±µ¯¶³··ºµº¼¼»¶À¹º¸¹Ä¶Â»Æµ¾¹¸¼¶½·ºÀ¿À¹ºµ¸²¹¯¾Â¹¼±¹­¹°½½½º¸½´Âº½À¸¼º·µµµ¸µ²»·²·³»µ¸·¬·µº¸ÈÏ¿¿»É»À»¼»¿½»¾¼¸¹¿¿Ã¿Á¾¿¾ÂÅ»Á¹ÃÀ¹¾»»¹¹¼¾·¶´²ÁÀ¹¹·¶°µ°´³·±¶·³°­¨¨®¦®¥»±¨¤ŸŸž  ¢¡¢£Ÿ¢¡§¥ œ–˜˜žž¥µ¤¨ª¨¤¦£³¬¨©£§¯±¨«¤¢¢¢° ¨¦¥¥¥¥£¡¤£¥¨¥œ®³¡§› ¡¤«—ž—Ÿ–˜›——”˜‘“‘˜š–•“ŽŒ‹Ž‡‹…Š„ˆ‡Œ…ŽŒ‰‘’Љˆ‹Œ†…„…‚……ˆ‰ƒ‰Œ‰ˆ…•‹Š‘•Š…Š…‚†…€€ƒ„†{†~„…~}ƒ‚‚~~‚|zxz{yz{w}‡w~v}sˆ||w|trt‚|~z~z}|‚€ƒ‚‡€‰€‡}‰}ƒ“ŽŒ‹€ˆƒ„†…†ˆ‚ˆ†…ˆˆ…ƒ†…†Š…~‚}~‚€{{z~{{~y|wtuv{t{zz‚€{|‰†‰€ˆƒ{†€|ˆ}zz{vytyxxvtzus{{}}ƒv}s‚ƒ‚†‚y|w|wxvxwyv“Ÿv_w†ts€|mn€|mly|rw{sƒwwstu‡~utnunrlmm€ztrsmyppqpv„ruktioeekijiggldgfiehbgcabdb_a`cg`_Z_U^XY[ZaZY\OYMUKTQUHNELHGN?MBMEJDHHDFDD==E>BEJKAD@?O>B?C@DEEAACA@D=C@@@:?<:9ABE>987:=IC:920,27B72+ !$"$!#/)           þÿÿÿüÿýÿúÿþÿþÿýÿÿÿûÿóÿøÿøÿôÿõÿüÿôÿðÿôÿíÿëÿìÿñÿëÿïÿçÿðÿçÿðÿèÿèÿçÿèÿóÿêÿëÿâÿçÿåÿçÿæÿãÿãÿòÿäÿêÿäÿèÿàÿàÿÞÿßÿàÿÞÿâÿãÿÜÿàÿßÿâÿâÿäÿÞÿßÿáÿáÿáÿãÿÜÿÜÿÝÿØÿáÿÖÿäÿÛÿÚÿáÿÚÿÛÿ×ÿÛÿ×ÿÛÿßÿÛÿÞÿßÿÚÿÕÿÙÿÒÿÝÿÞÿ×ÿÓÿÕÿÔÿÔÿÖÿÓÿÕÿÞÿÔÿãÿØÿÛÿÒÿÕÿÑÿÒÿÖÿâÿÚÿÓÿÒÿÓÿÓÿÒÿÔÿÕÿâÿÞÿÙÿ×ÿÑÿÑÿÚÿéÿØÿÙÿ×ÿÕÿÒÿ×ÿÐÿ×ÿÏÿÚÿÔÿ×ÿÔÿÑÿÒÿÐÿÎÿÒÿÌÿÐÿÒÿÍÿÔÿÖÿÖÿÑÿÑÿÓÿâÿíÿÝÿÜÿØÿÔÿÕÿÑÿÙÿÓÿÑÿÏÿ×ÿÏÿÒÿÏÿÖÿÏÿÓÿ×ÿÚÿ×ÿÚÿÜÿÝÿÔÿÙÿØÿØÿÐÿÖÿÑÿÒÿÖÿÖÿÞÿÕÿÕÿ×ÿÏÿÔÿÔÿÒÿÔÿÚÿÛÿÔÿÔÿÒÿÔÿÓÿÑÿÑÿÐÿÐÿÑÿÐÿÙÿÔÿÚÿÕÿßÿÝÿÜÿÜÿÚÿÝÿÚÿÝÿØÿÙÿÜÿÛÿÜÿÔÿÖÿÒÿÙÿÖÿÔÿÒÿÚÿÖÿÜÿàÿÕÿØÿÒÿØÿÚÿÙÿÕÿÑÿÓÿâÿÏÿÙÿÔÿÕÿÔÿÐÿÓÿÏÿÐÿÉÿÐÿÑÿÒÿÏÿÐÿÔÿÑÿÔÿÙÿØÿÖÿ×ÿÕÿÙÿÐÿÜÿÐÿÝÿÎÿ×ÿ×ÿåÿåÿØÿÕÿÑÿÖÿÎÿ×ÿÒÿÚÿÓÿÖÿÕÿ×ÿÖÿØÿØÿÛÿÔÿÙÿÓÿÙÿØÿÙÿ×ÿÛÿÞÿäÿÚÿÝÿÕÿÜÿÒÿÙÿâÿåÿÚÿÛÿÜÿ×ÿÝÿÒÿÚÿÕÿÍÿÉÿÆÿÆÿËÿõÿ| P]6ã”}€jhp†•„jAãÿÊÿäÿ]½ýñ¿i#îÿÐÿãÿòÿ$ûÿÌÿÿ\ÿEÿBÿYÿpÿ˜ÿÂÿËÿ¸ÿ™ÿoÿIÿ>ÿ<ÿ@ÿNÿ[ÿhÿeÿ[ÿKÿBÿHÿKÿSÿLÿIÿLÿMÿhÿiÿrÿkÿiÿlÿyÿ‘ÿšÿ£ÿŸÿ˜ÿ”ÿ¢ÿ¬ÿ»ÿÄÿÏÿÓÿÐÿÑÿÜÿäÿúÿ%(3,-!"'&((7<D=?6-4<7.11    ÿÿíÿæÿÔÿÎÿÍÿÌÿÎÿÅÿÀÿµÿ³ÿ´ÿ±ÿ­ÿ±ÿ³ÿ®ÿ³ÿ¶ÿÇÿÆÿÊÿÄÿÄÿ¸ÿ¸ÿ²ÿ¯ÿ£ÿžÿ’ÿÿ„ÿ{ÿsÿpÿnÿhÿbÿdÿVÿaÿcÿmÿyÿzÿ}ÿ…ÿÿÿˆÿŠÿ™ÿÿ‘ÿŠÿˆÿ†ÿ‹ÿ–ÿ‘ÿ‹ÿ‰ÿÿ}ÿˆÿˆÿ’ÿ”ÿ ÿ ÿ§ÿ¯ÿ°ÿ¾ÿ½ÿÆÿÈÿÍÿÔÿÚÿçÿëÿòÿîÿöÿôÿ÷ÿóÿýÿøÿýÿùÿûÿ "%(-)1.:137935/(  úÿ÷ÿ÷ÿûÿüÿûÿöÿûÿìÿñÿïÿêÿñÿèÿéÿáÿâÿÓÿ×ÿÔÿÎÿÎÿ¸ÿ²ÿ§ÿ§ÿœÿÿžÿ£ÿœÿ•ÿ‰ÿ†ÿŠÿˆÿÿÿ™ÿŸÿ™ÿ—ÿ•ÿ‘ÿ‰ÿ‰ÿ‡ÿ—ÿ‹ÿÿ‡ÿ‰ÿÿyÿtÿqÿiÿuÿ‚ÿsÿÿÿ€ÿÿ†ÿ„ÿ‡ÿ‡ÿ‹ÿŽÿ›ÿšÿ ÿ¨ÿ°ÿ±ÿ¬ÿ³ÿºÿ¹ÿ»ÿ¶ÿ»ÿ¼ÿÂÿÆÿÎÿÎÿÎÿÎÿÎÿÓÿÓÿÒÿ×ÿÞÿÙÿäÿàÿéÿçÿíÿõÿøÿõÿöÿñÿïÿëÿðÿöÿíÿîÿìÿñÿëÿãÿáÿßÿßÿßÿÜÿàÿÞÿÜÿáÿÛÿÜÿÖÿ×ÿÛÿØÿØÿÜÿØÿÖÿÑÿÌÿÎÿÂÿÐÿÀÿÆÿ¿ÿ¾ÿ¿ÿÀÿÁÿ·ÿ¸ÿ³ÿ±ÿ´ÿ²ÿ´ÿ·ÿµÿ²ÿ´ÿµÿ±ÿ°ÿ°ÿ®ÿ¯ÿ«ÿ¬ÿ±ÿ«ÿ­ÿ¨ÿ«ÿ©ÿ©ÿŸÿ›ÿ–ÿ”ÿ‘ÿ‘ÿŽÿˆÿŠÿ…ÿÿ‡ÿŠÿ„ÿ‚ÿ…ÿ~ÿ…ÿÿÿ|ÿ~ÿxÿyÿpÿrÿvÿlÿuÿqÿrÿsÿqÿmÿtÿmÿrÿqÿoÿkÿrÿnÿxÿpÿuÿoÿ{ÿvÿÿ~ÿÿƒÿ}ÿÿxÿ{ÿ„ÿ‚ÿ‚ÿ€ÿŠÿ‰ÿ†ÿÿŠÿ…ÿÿˆÿÿ˜ÿÿ‘ÿ’ÿÿ–ÿ˜ÿ—ÿ“ÿŸÿ˜ÿ›ÿšÿ¡ÿ›ÿ¢ÿœÿ©ÿ¡ÿ¨ÿ¡ÿ­ÿ ÿ¥ÿ¢ÿ£ÿ¦ÿ¢ÿœÿ›ÿœÿ”ÿÿ’ÿŒÿÿ‘ÿ“ÿ•ÿ•ÿÿÿŽÿ“ÿŠÿÿ‹ÿŽÿˆÿ…ÿ‚ÿ‚ÿ~ÿ†ÿ{ÿ{ÿwÿ{ÿwÿrÿsÿvÿrÿtÿvÿwÿqÿqÿmÿoÿqÿhÿrÿpÿoÿdÿoÿbÿeÿdÿfÿbÿYÿcÿUÿ`ÿZÿXÿXÿSÿRÿOÿMÿMÿJÿKÿDÿGÿBÿ@ÿ?ÿIÿLÿLÿRÿWÿOÿKÿNÿKÿJÿKÿKÿGÿIÿEÿEÿVÿQÿMÿEÿIÿMÿNÿPÿTÿUÿUÿZÿXÿXÿVÿ_ÿRÿhÿpÿjÿeÿ`ÿbÿZÿ_ÿ`ÿeÿxÿxÿqÿsÿpÿqÿqÿmÿiÿeÿcÿfÿ`ÿXÿ\ÿWÿZÿTÿYÿ\ÿUÿfÿbÿ^ÿ]ÿ]ÿ\ÿaÿWÿ_ÿ[ÿ]ÿUÿTÿOÿLÿKÿMÿWÿVÿOÿKÿKÿLÿKÿQÿUÿXÿ`ÿfÿfÿ`ÿ\ÿeÿlÿmÿ^ÿbÿYÿcÿYÿcÿ_ÿaÿgÿkÿeÿeÿjÿbÿkÿmÿkÿrÿgÿnÿaÿdÿ^ÿbÿeÿuÿhÿaÿcÿXÿ_ÿdÿeÿeÿjÿgÿvÿpÿoÿpÿqÿfÿ`ÿUÿQÿOÿIÿLÿJÿCÿDÿ@ÿ?ÿEÿPÿDÿLÿHÿGÿMÿMÿSÿSÿRÿRÿUÿPÿVÿQÿUÿPÿSÿLÿNÿPÿWÿ]ÿZÿbÿcÿaÿcÿbÿgÿiÿfÿqÿaÿoÿkÿjÿcÿcÿnÿhÿnÿtÿxÿuÿrÿrÿtÿmÿuÿmÿqÿrÿrÿuÿ}ÿÿ{ÿ‚ÿ}ÿzÿ}ÿ}ÿxÿ}ÿuÿyÿuÿ}ÿyÿÿ{ÿ~ÿwÿÿxÿÿxÿ|ÿwÿ}ÿwÿzÿvÿ|ÿzÿ{ÿ‚ÿyÿ~ÿ}ÿ€ÿ‰ÿÿ~ÿ€ÿ‚ÿ™ÿŽÿ‹ÿƒÿƒÿÿ‹ÿÿzÿ|ÿ€ÿ…ÿ}ÿ€ÿÿxÿ€ÿ|ÿƒÿ~ÿ‚ÿÿÿÿ~ÿ}ÿvÿ}ÿvÿwÿsÿtÿvÿwÿwÿwÿyÿxÿzÿzÿzÿ}ÿÿ†ÿ†ÿ…ÿÿ‚ÿ…ÿ‰ÿ†ÿˆÿƒÿ‹ÿÿŠÿ‚ÿ†ÿƒÿ‚ÿ‡ÿ~ÿƒÿ‹ÿ–ÿŽÿÿ“ÿ’ÿ•ÿ—ÿ‘ÿÿ“ÿ”ÿŠÿ}ÿ‡ÿ†ÿ{ÿ|ÿ‹ÿŠÿÿ†ÿ”ÿŽÿ‡ÿŠÿ‰ÿ’ÿ‹ÿÿ‹ÿ‹ÿ‘ÿŠÿ„ÿŠÿ‚ÿŒÿƒÿƒÿ~ÿŠÿÿ€ÿwÿ‚ÿ~ÿ{ÿ€ÿ~ÿÿ…ÿ}ÿ~ÿ€ÿÿ‚ÿ‚ÿ‚ÿ†ÿ“ÿ‰ÿ‡ÿ„ÿ€ÿ‡ÿÿ‡ÿ†ÿ‹ÿŽÿÿ‘ÿÿšÿ“ÿ›ÿ›ÿÿžÿ ÿÿžÿ”ÿ›ÿ£ÿ£ÿ—ÿ—ÿ–ÿ—ÿ—ÿŽÿ“ÿ’ÿ“ÿ“ÿŽÿ–ÿ”ÿ”ÿ–ÿšÿ£ÿ£ÿ›ÿ˜ÿ–ÿ™ÿ—ÿ ÿ’ÿ›ÿ˜ÿ“ÿ’ÿ—ÿ“ÿ™ÿ•ÿžÿÿÿžÿ›ÿžÿœÿ¦ÿŸÿšÿ ÿžÿ£ÿ¤ÿ›ÿžÿšÿ›ÿ–ÿ™ÿ–ÿžÿ£ÿÿšÿ”ÿžÿ—ÿœÿ–ÿ™ÿ–ÿ˜ÿ˜ÿ–ÿ“ÿÿÿŒÿ‘ÿÿŒÿÿÿˆÿ‡ÿ‡ÿˆÿ„ÿŠÿ…ÿƒÿƒÿ†ÿŠÿ„ÿŽÿ”ÿÿ’ÿ“ÿ•ÿÿ“ÿÿ’ÿšÿ”ÿ™ÿšÿ™ÿšÿšÿœÿŸÿœÿ™ÿ™ÿÿ”ÿŸÿžÿžÿ£ÿ´ÿ»ÿ±ÿ¬ÿ¦ÿ«ÿ¨ÿ®ÿ«ÿ¥ÿ«ÿ¢ÿ©ÿ ÿ¦ÿ¤ÿ¦ÿ£ÿ£ÿ£ÿ¤ÿžÿ§ÿœÿ£ÿžÿ®ÿµÿ§ÿ©ÿ£ÿ¢ÿ¤ÿŸÿœÿ£ÿŸÿ¡ÿ ÿ˜ÿ›ÿ–ÿ—ÿ“ÿ”ÿ—ÿ¤ÿšÿ¦ÿ©ÿ¤ÿ§ÿ«ÿ§ÿ«ÿ©ÿ¥ÿ¦ÿ£ÿ¦ÿ¥ÿ£ÿªÿ£ÿ¦ÿ¥ÿ¦ÿ£ÿ©ÿ¦ÿ§ÿ¼ÿÀÿ¸ÿ°ÿ±ÿ¬ÿ±ÿ¥ÿ®ÿ­ÿ³ÿ°ÿ¼ÿ·ÿ¹ÿ³ÿ·ÿ¯ÿ³ÿ«ÿ¬ÿªÿ³ÿ²ÿ±ÿ²ÿ´ÿ¸ÿ°ÿ»ÿ¸ÿ¹ÿ¯ÿ¸ÿØÿ»ÿ¹ÿÄÿÏÿÀÿÄÿ¼ÿÁÿ¾ÿ½ÿ²ÿ¼ÿ¸ÿ¾ÿ¼ÿºÿ¸ÿ¸ÿ²ÿºÿ²ÿµÿ·ÿ¶ÿ¶ÿ·ÿ½ÿµÿ­ÿ¸ÿ¼ÿºÿ¼ÿ¹ÿ¹ÿÁÿ¾ÿ¼ÿ¹ÿ¾ÿÃÿ»ÿÈÿÁÿÄÿÁÿÉÿÃÿÊÿÈÿÈÿÊÿÌÿÐÿÙÿÓÿÔÿÙÿÕÿÎÿÍÿÐÿÑÿÖÿÕÿÓÿÞÿ×ÿÕÿ×ÿØÿÐÿÒÿÕÿÖÿÙÿÛÿÔÿÕÿÕÿÖÿØÿÓÿÓÿÙÿ÷ÿòÿÔÿÖÿóÿïÿÔÿÑÿàÿÓÿÎÿÄÿØÿ×ÿÒÿÎÿØÿÓÿÎÿÆÿÚÿÜÿÔÿÒÿÐÿÌÿÑÿÇÿÍÿÍÿÏÿÐÿÐÿÎÿÕÿÓÿÓÿßÿÚÿæÿâÿØÿÜÿÙÿÖÿØÿÕÿÏÿÎÿÒÿÍÿÐÿÕÿ×ÿÖÿ×ÿ×ÿáÿÙÿÛÿàÿáÿãÿçÿáÿëÿæÿëÿàÿÝÿßÿÛÿëÿâÿéÿìÿèÿóÿðÿûÿøÿøÿùÿûÿøÿýÿùÿüÿüÿýÿùÿûÿøÿ÷ÿõÿõÿéÿöÿéÿôÿëÿóÿøÿÿÿøÿöÿùÿõÿýÿñÿ÷ÿ÷ÿþÿôÿîÿñÿóÿôÿéÿìÿîÿîÿñÿîÿóÿöÿöÿýÿûÿüÿýÿÿÿýÿþÿøÿþÿøÿüÿðÿôÿïÿìÿïÿùÿøÿúÿþÿÿÿüÿ     ÿÿ ûÿ ýÿ þÿ  ÿÿúÿÿÿÿÿ  ýÿ øÿýÿ %    0/          % #!&0(#)1*--),(,2*.-0(/03,)*'&(&.,/.37@EE[VO9$%"+()++'*0216,0.665/.14/-*.+/43214/63556<=@;932)/-7,4/306454A;:DD?>?B<;8;>D@IR]XTVWTZ]b^d`ecefjmkkjihiiijptouxnuqvtyruuqmvpmkfdf|lrmullsyxqw||}lpdfommiu…uotlwntx{urqkogffhdkdhmolkjcjed`fbYYWV^\[\aZc^d`^a\[\Xb^\^ZQQMQBFNKMUVU]\cb]bc}shfdf^a\a_cclhjjt{tqzwvwzrpmogjsqlggckgbkesppvwy|vtvqnqfqce\^WTRNROVNSOQIJGMRDIECAGJ@=7<6:>;;>>@C>BNIHNKGQGXPRNOKQILGG?D>A>?B<GMMGLPPSPTVYXX\WXQXSROQNQZPYXQSQYPUPYPYge\Z[V\TZLX]\Xi`^W^W`^^b]a[\[TQRPUGNLIIFNJHKRPIIKAFGFCEDDGHCLHXVQNPHLFCB>4;8492F<5/94:A>E;CHGFD?>=?>>B=<67>;<:@;INKQEKHHQLUIMLMGKCJEMCWLbf`_aaa`lqppur{y}ypoljgfcaac`bgiminonhgiebbb_Z\Z[VW^]\^[bkeddec]c_ffaeb[eZ_VYYV\Yacddbbnplklghjiklgba_Y\V[\a_aebruuttoqlplddbbX^Ue]lchhoqornqqsywxurlkegrsjkplupustupvwusmpplfl_khqwusonqikkn`d`]c[_WXRNTPVTZTWW^[`^Y]U\VWWW`ahf^aY`achfflphhgdbeekhlplunnlojgzohkka`___\WW\]cY]_ptba]WTWXXRTRLX\XNT[TXU\TXTSYOWTVRUNTWYW]\aa`djcebfa\]ZZURPLGPKRVYZ^bfefc`a_^mhe^nrhjglnplsrruq|ytrknmisgqjlkldrnoonikplyryx{~€ƒ€‚}…Œˆ{|v€‡‡€}Œ‹‰ˆŒŒ‘’‘Ž‹˜‘™–Ÿ¢™•œ—œ ••ŠŽŠˆ…{|v{oxsxzŒ‡z~sn}zuw|~ww„|}u}ŽžŸ¨™’‚€}‡‹‘Œ‡‡„š••ŒŽ”’ƒ’˜¨¢›™˜¦¬´·ÁÀ¼¿®º®´¨««±°½¸¼º¾¾ÃÈÎÜãÙÐÑÕËż»¸½¸³¶·¶±µº¸º¶ºµ»»¼µ·Âººµ²°³«¼²µ«¬¬ªª¨§¬«¬²±®°«­¬°°µºÆ¿¿¼À´«­«¬¨ÀÍú»µ²·©¥¶®¬©¸©­¯ª°¦©°¨¦™–‘˜™Ž“ŠŽ—•¦ ›”—•Ž–’—™˜˜¢ª›•{svntƒŠ—™°´»·¸¶Ä¸®¤ž™Ž‘“™™žª¼ÎÜ÷¸¼¹ÄÊÁ´¾Â­²ª¹¥®œ¦ª¦«¢¨¤¨¤¨£¦ž¡˜—‰Š†}~}z|yzvrtrtw„€ƒ}€…~|{xthnsnfca_ao~tdcfofq‡qupkf^VTVUZYUZJTOV]\[[c_bf_^kZXJQOKGJNEFEOMORYbbY[X][YRRMJLMMUQRQRTMOOQTZOc[]ZPKL\WWSNL@EWE=243*)')'''(*(109<=DABD:4-!'!!&!    "'0.0,C;353984506311048596555-7.2125:278<:::@>B486>>?BH=@<:36/437=;<=IOOIBABCBC<7>A3;::48CC?@:64602.'/*'!!"" þÿùÿõÿøÿ÷ÿòÿüÿúÿþÿ   þÿûÿýÿüÿÿÿ     )(&&!     øÿýÿõÿðÿëÿêÿ÷ÿùÿïÿðÿîÿïÿæÿëÿíÿðÿõÿöÿýÿöÿ÷ÿ÷ÿïÿàÿ×ÿÍÿÒÿÊÿáÿØÿÔÿÐÿÕÿÞÿÙÿÞÿçÿîÿëÿõÿìÿìÿíÿìÿêÿîÿèÿçÿÛÿàÿåÿíÿãÿçÿãÿîÿñÿèÿçÿëÿñÿõÿóÿõÿýÿòÿúÿôÿëÿêÿâÿäÿêÿåÿéÿòÿçÿãÿáÿÞÿØÿØÿÑÿÕÿÖÿÜÿÝÿÞÿßÿàÿÕÿÚÿÙÿÛÿ×ÿÚÿÕÿÚÿÒÿÝÿàÿÔÿÓÿÕÿÑÿÎÿÐÿ×ÿÛÿÝÿäÿèÿéÿèÿíÿõÿëÿðÿîÿîÿìÿåÿàÿÕÿÚÿÔÿÓÿÐÿÔÿÒÿÐÿÐÿÖÿÔÿÔÿÎÿÍÿÉÿËÿÇÿÍÿÀÿÄÿ½ÿÊÿ¿ÿÀÿ¶ÿÈÿÂÿÂÿÈÿÈÿÍÿÆÿËÿÈÿÌÿÊÿÔÿÐÿÐÿÈÿ½ÿ¼ÿ¾ÿ¯ÿ³ÿ®ÿµÿ¸ÿºÿ¾ÿÀÿÒÿÍÿÂÿÅÿ³ÿÀÿ¹ÿÂÿ¿ÿ¾ÿ°ÿ³ÿªÿ¢ÿ›ÿ–ÿ£ÿŸÿ›ÿœÿœÿ¡ÿ¥ÿ´ÿ¶ÿ´ÿ½ÿÇÿÁÿÉÿÒÿÈÿÔÿÍÿÇÿ¼ÿµÿ·ÿ±ÿ¨ÿ¨ÿ¦ÿ¦ÿ¥ÿ°ÿ­ÿ²ÿ¹ÿ¸ÿÃÿÀÿÇÿÊÿÍÿÎÿÐÿÍÿÕÿÂÿÉÿÂÿ¾ÿ¼ÿµÿµÿ³ÿ®ÿ®ÿªÿ³ÿ¬ÿ®ÿ©ÿ®ÿ¹ÿ¼ÿ½ÿÀÿÄÿÀÿÆÿÔÿÄÿÀÿ½ÿµÿ®ÿ«ÿ®ÿ¢ÿ ÿÿÿ™ÿ™ÿžÿ¡ÿÿ¨ÿ¬ÿÆÿ¾ÿÆÿÏÿÉÿÆÿÊÿÈÿÆÿÀÿ¿ÿ¹ÿ¹ÿ·ÿ³ÿ¸ÿ­ÿ¸ÿ®ÿ¹ÿ·ÿ¿ÿÀÿËÿÄÿÑÿÓÿÛÿíÿåÿÚÿàÿÜÿßÿãÿåÿÞÿáÿÛÿÖÿÓÿÌÿÆÿ¾ÿÁÿ¾ÿÈÿ½ÿÂÿÆÿÆÿ¿ÿÈÿÆÿÏÿÌÿÕÿÖÿÓÿÕÿÒÿÏÿÈÿÃÿ¼ÿ´ÿ§ÿ ÿ“ÿ–ÿŒÿ’ÿ–ÿÿ¥ÿ­ÿ¡ÿœÿ©ÿ¥ÿ­ÿ»ÿÉÿÄÿÊÿÊÿÍÿÃÿÄÿÅÿÄÿÁÿµÿ¶ÿ°ÿ®ÿ´ÿ¹ÿÅÿÈÿÏÿÖÿØÿäÿâÿçÿæÿéÿéÿîÿìÿéÿæÿçÿâÿÞÿáÿÚÿàÿÝÿÛÿÝÿÙÿâÿÝÿÖÿßÿáÿæÿÙÿÖÿ×ÿÐÿÒÿËÿËÿÊÿÏÿÓÿÑÿÔÿÑÿÌÿÈÿÅÿÁÿ½ÿ¸ÿ¶ÿµÿ¸ÿ¶ÿºÿ¾ÿÅÿÁÿÂÿÅÿ½ÿÁÿ¾ÿ½ÿ¶ÿ³ÿµÿ¯ÿºÿªÿ´ÿªÿ«ÿªÿ ÿŸÿ™ÿ ÿ«ÿ±ÿ¿ÿÐÿÈÿÈÿÀÿÆÿ·ÿ¿ÿ´ÿ½ÿÅÿÃÿµÿ³ÿ²ÿ¼ÿ¦ÿ¡ÿ›ÿžÿ¡ÿ¨ÿ­ÿ·ÿ»ÿÊÿÅÿÑÿÏÿÕÿÍÿËÿÈÿ»ÿ¾ÿ¹ÿ´ÿ´ÿ´ÿ¶ÿ¯ÿ©ÿ­ÿ«ÿ°ÿ²ÿ¹ÿ­ÿÂÿÌÿÓÿÛÿÚÿëÿæÿÞÿÉÿÊÿÁÿ¿ÿ¹ÿµÿ¹ÿµÿ¶ÿ¯ÿ«ÿ¦ÿ¤ÿšÿÿœÿ™ÿšÿ ÿ¤ÿªÿ­ÿ§ÿ­ÿ¨ÿ§ÿ£ÿšÿŸÿœÿ™ÿ˜ÿ“ÿ—ÿÿÿŒÿ†ÿ‚ÿxÿ{ÿqÿtÿvÿxÿuÿ~ÿ‡ÿ‹ÿÿ›ÿ¡ÿ¡ÿ³ÿ¯ÿ¦ÿ§ÿ ÿ˜ÿšÿ“ÿˆÿ‡ÿ~ÿ}ÿ{ÿlÿnÿiÿiÿnÿnÿvÿvÿ‡ÿŒÿ‘ÿÿ™ÿ™ÿŸÿ™ÿÿ’ÿ’ÿ—ÿŸÿ”ÿÿ‹ÿŽÿ‡ÿÿzÿqÿmÿlÿmÿqÿnÿzÿ~ÿ…ÿÿ“ÿ•ÿšÿœÿ™ÿ›ÿ–ÿ”ÿÿ—ÿÿŒÿŽÿ€ÿ€ÿrÿtÿmÿmÿpÿ{ÿ~ÿƒÿŽÿ’ÿ ÿžÿ«ÿ¨ÿ¥ÿžÿœÿÿŠÿÿ„ÿ|ÿƒÿrÿÿ|ÿuÿrÿtÿxÿ{ÿ…ÿŠÿ›ÿÿœÿ™ÿÿœÿ›ÿ™ÿ•ÿÿÿŽÿÿ‹ÿ„ÿ†ÿ…ÿÿwÿuÿsÿrÿuÿ~ÿyÿmÿzÿyÿrÿsÿwÿ~ÿ‰ÿˆÿ‘ÿ˜ÿœÿÿˆÿ‡ÿÿsÿqÿgÿhÿ]ÿ]ÿ[ÿTÿQÿKÿQÿWÿ_ÿkÿhÿnÿzÿxÿ}ÿÿƒÿ€ÿvÿwÿqÿlÿlÿdÿgÿ_ÿ`ÿ]ÿbÿaÿjÿfÿnÿqÿÿ†ÿÿ‘ÿ›ÿÿ£ÿ¥ÿžÿ¢ÿšÿ–ÿ’ÿŽÿŒÿƒÿÿˆÿŽÿŽÿ‘ÿÿ–ÿ™ÿœÿšÿ›ÿ§ÿ·ÿ®ÿ­ÿ¦ÿ®ÿ«ÿ¤ÿ¢ÿÿ–ÿŒÿŽÿ—ÿŽÿÿŠÿÿÿ¢ÿ’ÿÿ„ÿÿ~ÿ~ÿzÿxÿÿ‚ÿ‰ÿŽÿŠÿŠÿƒÿ}ÿ…ÿÿwÿ|ÿsÿvÿpÿuÿlÿpÿlÿxÿwÿÿƒÿŒÿŠÿšÿ—ÿœÿ›ÿ£ÿ ÿŠÿ‡ÿoÿmÿ_ÿbÿXÿcÿbÿwÿzÿ‡ÿ‘ÿšÿ ÿ›ÿ˜ÿ•ÿ•ÿÿÿ”ÿ’ÿŽÿ…ÿ{ÿqÿdÿ\ÿRÿUÿOÿTÿVÿWÿZÿZÿ[ÿ\ÿXÿWÿRÿQÿRÿTÿSÿNÿRÿRÿMÿfÿMÿNÿEÿ>ÿDÿ=ÿBÿBÿFÿBÿEÿ8ÿ@ÿ=ÿCÿEÿLÿPÿ`ÿhÿrÿjÿvÿmÿxÿnÿ|ÿuÿ~ÿˆÿˆÿŒÿŠÿ‡ÿÿ~ÿ|ÿtÿÿ€ÿ…ÿÿÿ—ÿœÿÿ£ÿ¡ÿ¨ÿ¡ÿÿ˜ÿÿ‹ÿ‰ÿƒÿƒÿ€ÿÿyÿyÿtÿrÿnÿnÿnÿrÿuÿxÿxÿÿ€ÿ‚ÿxÿpÿlÿyÿxÿoÿiÿjÿaÿfÿ_ÿeÿeÿlÿnÿtÿtÿuÿtÿkÿjÿaÿ`ÿ^ÿ_ÿaÿbÿ]ÿ[ÿKÿMÿLÿ>ÿ>ÿ9ÿBÿJÿSÿZÿ^ÿ`ÿaÿ\ÿ\ÿSÿLÿNÿJÿGÿHÿDÿ:ÿ6ÿ,ÿ'ÿ$ÿ%ÿÿ$ÿ"ÿ'ÿ&ÿ6ÿ>ÿHÿLÿUÿOÿNÿTÿPÿTÿMÿPÿGÿ@ÿ?ÿ3ÿ3ÿ+ÿ#ÿ&ÿ ÿ&ÿ ÿ*ÿ$ÿ"ÿ2ÿ)ÿ9ÿ8ÿ?ÿ@ÿHÿKÿSÿ]ÿ]ÿ^ÿ^ÿ\ÿPÿNÿGÿFÿ?ÿDÿ<ÿFÿ>ÿ9ÿ>ÿ:ÿBÿIÿSÿ[ÿfÿeÿzÿzÿzÿ‚ÿÿƒÿxÿvÿjÿbÿaÿ\ÿ_ÿYÿ]ÿUÿSÿQÿJÿNÿQÿYÿgÿkÿrÿrÿuÿpÿoÿfÿpÿvÿsÿvÿdÿdÿ]ÿ`ÿ`ÿfÿ[ÿhÿ[ÿ\ÿYÿYÿQÿVÿOÿFÿBÿ>ÿ8ÿ>ÿ?ÿCÿDÿKÿHÿLÿSÿ[ÿcÿ`ÿXÿPÿBÿ=ÿ5ÿ8ÿ,ÿ+ÿ&ÿ$ÿ'ÿ4ÿ5ÿ>ÿ8ÿ?ÿAÿJÿRÿMÿLÿ@ÿ>ÿ3ÿ-ÿ,ÿ%ÿ'ÿ#ÿ$ÿ!ÿ"ÿ0ÿ2ÿ.ÿ8ÿ:ÿ<ÿBÿBÿGÿJÿLÿQÿPÿIÿJÿEÿ@ÿ;ÿ9ÿ9ÿ:ÿ2ÿ+ÿ/ÿ/ÿ3ÿ7ÿ7ÿAÿBÿEÿDÿFÿCÿ;ÿAÿ>ÿFÿBÿOÿaÿPÿJÿHÿ@ÿ>ÿ9ÿ6ÿ=ÿ<ÿAÿ?ÿGÿDÿPÿGÿRÿPÿXÿRÿRÿVÿTÿSÿRÿUÿRÿUÿWÿQÿRÿPÿUÿWÿ]ÿ\ÿWÿVÿ\ÿaÿhÿjÿjÿiÿfÿbÿWÿ\ÿQÿPÿIÿIÿDÿKÿIÿJÿNÿJÿVÿ\ÿhÿrÿsÿwÿ{ÿxÿ}ÿtÿpÿsÿoÿfÿaÿUÿMÿ=ÿDÿ5ÿ3ÿ(ÿ*ÿ'ÿ3ÿ6ÿBÿBÿLÿOÿTÿXÿYÿaÿdÿ^ÿdÿ_ÿaÿcÿbÿZÿ`ÿMÿLÿ?ÿFÿ1ÿ$ÿ ÿÿÿ ÿÿÿÿ&ÿ1ÿ3ÿ@ÿHÿNÿVÿ]ÿeÿbÿjÿhÿpÿbÿ\ÿXÿIÿ=ÿ;ÿ8ÿ7ÿ.ÿ7ÿ0ÿ6ÿ8ÿ9ÿ>ÿ@ÿJÿJÿ\ÿhÿrÿrÿ{ÿ}ÿ|ÿ†ÿsÿkÿ`ÿhÿiÿbÿjÿ^ÿ[ÿWÿOÿLÿGÿLÿBÿTÿMÿ`ÿ]ÿmÿuÿzÿˆÿ‰ÿÿŽÿŠÿ‹ÿ…ÿ‹ÿ’ÿŒÿ‰ÿ…ÿ‚ÿÿ~ÿ{ÿvÿvÿtÿÿÿˆÿŒÿ‹ÿ‰ÿŒÿ‘ÿÿ’ÿšÿÿ‘ÿ„ÿxÿmÿcÿ[ÿSÿSÿOÿPÿQÿUÿWÿ_ÿ_ÿbÿgÿlÿlÿqÿjÿrÿnÿhÿ\ÿZÿWÿNÿIÿEÿCÿ@ÿCÿ9ÿ<ÿDÿHÿHÿRÿ_ÿ_ÿeÿfÿiÿdÿ_ÿfÿkÿpÿmÿrÿ}ÿwÿ}ÿ„ÿÿ€ÿ†ÿ‹ÿŽÿ˜ÿ›ÿ¤ÿ¬ÿªÿ¬ÿ ÿšÿœÿ‹ÿ’ÿˆÿ™ÿ¡ÿ•ÿžÿ•ÿ”ÿ‘ÿŽÿÿÿ™ÿ–ÿ§ÿ³ÿ»ÿÂÿÈÿÅÿ¼ÿ°ÿ¡ÿ›ÿŽÿˆÿÿÿuÿtÿjÿ`ÿWÿNÿWÿ]ÿ`ÿnÿxÿ†ÿŽÿ–ÿ™ÿ˜ÿœÿ–ÿ–ÿÿ’ÿ†ÿÿÿ†ÿ‡ÿ€ÿ|ÿkÿhÿZÿXÿPÿRÿPÿ`ÿ^ÿcÿlÿeÿsÿvÿƒÿ“ÿšÿ ÿ¦ÿ¦ÿ¦ÿÿœÿ‹ÿ‘ÿŽÿ„ÿuÿzÿrÿqÿnÿpÿlÿhÿkÿfÿnÿsÿƒÿ‹ÿšÿ·ÿ¾ÿ¿ÿÆÿ¼ÿºÿ¯ÿ©ÿžÿœÿ”ÿ‘ÿŠÿ‹ÿ€ÿ{ÿ}ÿ„ÿvÿjÿqÿqÿÿ‹ÿ“ÿ¦ÿ«ÿµÿ­ÿ®ÿ¥ÿ¦ÿšÿ›ÿ˜ÿ•ÿ‘ÿ‡ÿŽÿ~ÿ{ÿkÿpÿhÿoÿtÿÿŠÿ›ÿ¦ÿ²ÿ·ÿ¾ÿ¿ÿÀÿ´ÿ±ÿ¨ÿ´ÿ¬ÿ¶ÿ­ÿ±ÿ«ÿ¤ÿ¦ÿ‘ÿ™ÿ•ÿ™ÿ¨ÿ¸ÿ»ÿ½ÿÂÿÈÿÁÿÄÿ¼ÿºÿ¼ÿ·ÿÏÿÀÿ½ÿ¶ÿ¶ÿ¨ÿ¨ÿ¦ÿ—ÿÿŽÿÿŽÿŠÿ‰ÿˆÿŠÿ…ÿŠÿ…ÿ„ÿÿxÿrÿsÿuÿsÿÿÿƒÿƒÿÿ†ÿƒÿ€ÿÿÿ}ÿ{ÿÿyÿyÿoÿoÿpÿqÿlÿsÿzÿ„ÿ€ÿÿ—ÿ™ÿœÿœÿÿÿ™ÿ’ÿ“ÿÿÿˆÿ‹ÿ‹ÿ‰ÿ†ÿ‹ÿÿ’ÿœÿ¤ÿ´ÿ¼ÿÃÿÏÿÔÿØÿßÿÙÿØÿÕÿÐÿÉÿÇÿÇÿÍÿÒÿÉÿÍÿÊÿÐÿÎÿØÿÛÿæÿ÷ÿùÿõÿúÿóÿðÿéÿåÿÛÿÓÿ×ÿÐÿØÿÏÿÙÿÝÿàÿáÿÞÿáÿÞÿßÿÛÿÜÿÍÿÏÿÌÿÖÿÛÿæÿÝÿßÿÌÿÐÿÈÿÅÿÄÿÉÿÁÿÇÿÌÿÜÿÌÿÓÿÇÿÎÿÂÿÆÿ¼ÿÀÿ¼ÿ¾ÿÊÿ×ÿÕÿÍÿÌÿÎÿÄÿ½ÿ°ÿ²ÿ¯ÿµÿ¯ÿ±ÿµÿ«ÿ¬ÿ£ÿ˜ÿ›ÿœÿ›ÿ¢ÿ¶ÿ¸ÿºÿÁÿÃÿÄÿ¼ÿµÿ¶ÿ«ÿ¹ÿ¶ÿÄÿÎÿÃÿËÿÀÿÈÿ½ÿ¹ÿ¼ÿ½ÿÄÿÁÿÔÿÐÿÚÿàÿáÿâÿãÿíÿãÿãÿÛÿÞÿâÿàÿæÿáÿçÿáÿÓÿÑÿËÿÔÿÍÿÙÿáÿëÿïÿôÿøÿóÿúÿöÿòÿ÷ÿîÿìÿðÿöÿ÷ÿþÿõÿèÿâÿàÿñÿíÿûÿ  þÿôÿüÿëÿìÿèÿâÿàÿßÿêÿãÿåÿëÿêÿõÿëÿïÿòÿðÿîÿçÿêÿßÿáÿÔÿÍÿÉÿÇÿ»ÿÀÿ¾ÿÃÿÅÿÄÿ½ÿ¹ÿºÿ¼ÿÆÿÍÿÌÿÒÿÉÿÍÿÃÿÅÿ¿ÿÆÿÁÿ½ÿÁÿÎÿÎÿÊÿÃÿ¸ÿ·ÿ³ÿ¶ÿ¹ÿ¼ÿÄÿÎÿÐÿÒÿÙÿßÿéÿíÿöÿùÿ ' " ûÿúÿüÿõÿïÿäÿæÿ×ÿÕÿÏÿÍÿÕÿÒÿÔÿÑÿÕÿÎÿàÿãÿìÿôÿÿÿüÿòÿæÿÞÿÜÿÜÿÜÿÞÿéÿáÿÝÿÓÿÔÿÕÿÐÿÚÿÜÿïÿòÿ ,   ûÿôÿëÿâÿïÿðÿÿÿ  ûÿïÿåÿÔÿÒÿÉÿÉÿÉÿÇÿËÿÒÿÊÿËÿÐÿ×ÿÚÿßÿéÿêÿêÿëÿíÿìÿìÿöÿñÿíÿëÿêÿóÿóÿïÿôÿòÿýÿñÿóÿõÿüÿûÿ  &%--/*-95><?=A7++ ($,+/1*2.*"$( '#  ýÿùÿüÿ÷ÿòÿãÿáÿÖÿÔÿÙÿâÿæÿîÿùÿ  ((*&#÷ÿòÿðÿíÿïÿîÿòÿòÿýÿýÿ$!//3/2*) ÷ÿþÿøÿÿÿÿÿ#/9DNP[cbodiacZXOOMINMRQY_]`X\UVZZ`egggbYSLFJGNKRQPMHCCBCAEKIFJIGI>A85937:9:@IGM>FQ_XZT^XX\^vde]^VVLNCD?96396:=GSGLGKLTXW\]SI;.(&%-2:ES]ityz„€„‚„ƒ‚{uo_UWNScirux‚~€{ƒ‡”Žš‘„xri`ZQSV[bgb_ighsx…›˜˜Žxtj_YWRSHKAB>ABKMU`dmdgaaY_`agq{pteXZTZ\gikqqkpeg`gegiorqledU^b`V]RRLPUOTS[Rdfeffa_]]^^X^YddfdbZU^RRNY`PGFHJOWbfrˆŽ–“ŒvxvfXTLJLO^Zdhn{“˜–¢—’‡vri^a^ccciijnl€s~„…vuhhgldYcc\TUUSY[]ehfhnpntyr}z~{zx{ƒ‰—“–˜—˜•š™˜— –’‡‰—•‹‘„“ŒŸž££”Žˆ‚quhjec_bio}Š‘˜ž ¥¡Ÿ¢ššŠ…yplgihrs†š¦¥±²§³©´¬¤—’„‚supsqwŒŠ˜«¬®°©¢˜‡}urqi_^UPQWbkq…ˆ“–•–Ÿ¡”ŽŠ‹~‰vvlibgboty‡Ž‘–¡£ž’’ˆ–‰Š•††}~y~ˆž¢§¯¨¦£–—’ ¡œ¥´¿´¾°»¸ËÃÌÔÞÒØË¾³¨¬©®¯´¾ÏÄÅÂÑÑÚÙÞáÝØÑËÉɽ´ª¬ žœ¡¨  —Ÿ™¢¦¡·«©¡•Ї‚||ƒ‚…„„‚Šƒ„‰’ޓЄ}{ztquxˆ‚ƒ€{ywtx{€€ƒ}wrn^]NMGKGNFNGKKPWWafuspumoqqrnqipdgd``cfkuv‚†’•”“’”™˜œ™˜›–”™”ž¦±°³¹¯±²¨¤¡ž˜—”•˜’‡‰ƒ‡‚}‡}†“‰‘‹‹†€ƒz~}tikk`ZKIDFINLLLUOPINJTOODVIB6:9:ENYMST[ckkpjlfopqpqrjf`]ac]aX]WWQQLMOLNTchmknsnsqrnkeb_`h_b\Y^ft}‚˜§¦¤§§žŸ˜•–ƒzpnfh\[Ua^nuŒ–«±³¸³µ³¯®¢©˜œ{hcTMGIHUc_or~€„„ŽŒ‹†‹|shYPGIGFFKIHJWZgelioy€z€‚xujb]U]X[YYZ\]didirw„Ž—“žš‹…‡‚„…†‰††ŒŽ—¥¦£ ¥Ÿ  –’˜– ¢¦«©®³º½»ÆÊÁ´¡š“†‡zwwpuwoccUWZed|€~…†|‚qqeaSPB:20,27@GYhnx„‘’¡ž˜•“Ž€…Œ‚ˆ…ާ¡¢©¯µµ¾¾¿¿µ¸ª£›’‰~ryo{|Љ“•™œ¡ žœ”•†xoqkmolecknrl{~‚|yvtxpqkkdba]ZV[Taenlifii^_^^WYc\a]f[[]^^gceac_^TZW[beoy‡‰‘”’–’‰tshnihltty‚ˆ‹“¤¨¤¤¥š˜‹kjZZSPSbk€—‘—™ ¨­¶·Ä»¡Ÿˆze[YSKQQV\_jnotnrlne_SCE6-'%$"!&,8@NQQQWUT\\XVWPQNPQPRZhgsw„„‘›ž ¥›ž—••ŽŠ…„|}€„ŒŠŠŠ‰ŒŽ‰…~wjhU[V_^glsvrlptmmipfjinhnvvyr}{€‡€Š…€~zrrwzŽ¢Ÿ¥­­¹­´´¬¡˜”†tm`c`jlpvƒŽ—©ÊËÏÖÍ̺°¨žŽ‚wnegaeglƒ€˜¡¨¯µ´µ²¬¡–‰xnfa\YWXW_^j^_gslemohg^]^]bm_b^hbc_cfligfafcZ]]`e^^`]ims{‰’˜”Ÿªœ‘‰‚‚‰z‡‰ywrulxv€…š—Ÿ–•Šƒƒ…ƒ€~€tpmkgjvnxw€}ƒƒ†„„{zxswwtooionglijo^`UZTPPIKGFHKDF?DILLDPI=904-/++-0(/#/&(&-..47493--#% -#)$!#+19;CFDKFC86576,$'"'(66DIIGUY\SROPORXVUY^VX]`VX[U^UVXT[]]\\_baZd^XSNK?@9<7<97371,+-.,-)"" #-'0((#  -<>??@86/&" ûÿ÷ÿþÿþÿ ,@;:840/)%*%*.'&#       óÿðÿáÿÛÿÓÿÊÿÏÿÎÿÚÿßÿëÿöÿ !"'# ÷ÿôÿáÿãÿÛÿÝÿÚÿÜÿâÿïÿ)1BMWb_YOJ=9/,*#*6CILPHA<+(   !''',)(#&&    ÿÿ  -'14500$'ûÿÿÿÿÿ  &% (%'+!  ùÿëÿðÿçÿðÿëÿñÿñÿðÿìÿñÿéÿáÿÚÿ×ÿÈÿÈÿÀÿÂÿÁÿÆÿÆÿÈÿÉÿÌÿÓÿÙÿäÿðÿîÿþÿþÿòÿïÿéÿâÿâÿáÿäÿæÿâÿéÿèÿëÿìÿèÿñÿíÿýÿ  üÿóÿìÿìÿêÿÜÿåÿÙÿÞÿÚÿÝÿßÿÓÿÚÿÒÿÛÿÝÿàÿåÿæÿéÿæÿæÿáÿèÿàÿÜÿÛÿÓÿÌÿÅÿ»ÿ·ÿÁÿ¾ÿºÿºÿ»ÿÁÿÅÿÑÿØÿÝÿåÿçÿûÿúÿðÿîÿñÿõÿîÿìÿãÿçÿñÿéÿæÿäÿçÿçÿæÿóÿìÿòÿïÿûÿùÿüÿùÿ÷ÿëÿéÿäÿçÿ×ÿßÿÕÿ×ÿÂÿÅÿ½ÿÉÿÉÿËÿÔÿÒÿÕÿÔÿÚÿÙÿÖÿØÿÊÿÂÿ´ÿ«ÿ ÿžÿ˜ÿ“ÿ•ÿŽÿÿšÿ ÿ ÿ¨ÿ°ÿÀÿÂÿÆÿÎÿÏÿÔÿÕÿÞÿÔÿÎÿÆÿÃÿÅÿÇÿÇÿÏÿÎÿÐÿÝÿÚÿâÿçÿìÿéÿöÿñÿûÿôÿöÿúÿõÿýÿ ýÿ   þÿôÿíÿãÿáÿÕÿÉÿÅÿÀÿÁÿÅÿÈÿËÿÓÿÔÿÔÿäÿìÿðÿðÿìÿôÿîÿãÿàÿãÿÑÿÁÿ¼ÿ°ÿ«ÿ ÿÿÿ‡ÿŽÿ‹ÿ’ÿ”ÿ¨ÿªÿ¶ÿ½ÿÈÿÈÿÏÿÖÿÓÿ×ÿÏÿÓÿÒÿçÿßÿÔÿËÿÈÿ¼ÿ¹ÿµÿ­ÿ¯ÿ®ÿ´ÿ¿ÿÎÿÛÿÜÿåÿãÿæÿëÿîÿüÿ ùÿÿÿôÿõÿïÿâÿÞÿÛÿÙÿÖÿÜÿÕÿÍÿÓÿÎÿÖÿÙÿßÿÞÿØÿãÿáÿäÿæÿîÿéÿóÿðÿåÿáÿÝÿÖÿËÿÊÿÃÿÁÿÂÿ³ÿ¼ÿÆÿ¼ÿºÿ¾ÿ·ÿÂÿÂÿÃÿÈÿÏÿÍÿØÿÛÿâÿàÿêÿòÿñÿõÿöÿõÿóÿúÿùÿûÿñÿðÿèÿèÿßÿßÿÚÿæÿçÿïÿñÿøÿýÿ ýÿòÿòÿéÿëÿëÿéÿïÿëÿõÿéÿôÿéÿçÿåÿéÿæÿìÿîÿüÿïÿâÿ×ÿÊÿÄÿµÿÁÿ´ÿ»ÿ°ÿ·ÿºÿºÿ»ÿºÿ¿ÿºÿÅÿÁÿ¹ÿ»ÿ°ÿ¯ÿ£ÿ ÿ›ÿ™ÿ‘ÿˆÿŠÿ€ÿ’ÿˆÿÿ›ÿ•ÿžÿÿ¥ÿªÿ¯ÿ´ÿ°ÿ³ÿ³ÿ·ÿ·ÿ´ÿ´ÿ±ÿ³ÿ«ÿµÿ¯ÿ­ÿ¤ÿ¤ÿ£ÿªÿ¯ÿµÿ»ÿºÿÉÿÆÿÊÿÕÿ×ÿÛÿÝÿÜÿáÿÛÿÓÿÔÿËÿÕÿÌÿ×ÿÌÿÒÿØÿÔÿÇÿÊÿÉÿÔÿÝÿÔÿàÿâÿèÿìÿçÿßÿäÿàÿæÿãÿìÿìÿäÿàÿÜÿÑÿÊÿÅÿ¼ÿ½ÿµÿ¹ÿµÿ´ÿ°ÿ²ÿ¸ÿ¹ÿÃÿÃÿÌÿÎÿÕÿÐÿÄÿÀÿ»ÿ±ÿ³ÿ¬ÿ¦ÿ›ÿ“ÿ”ÿÿÿˆÿ‘ÿŠÿŽÿ—ÿ•ÿœÿ¢ÿ¬ÿ­ÿ²ÿ·ÿÀÿ²ÿµÿ¬ÿ­ÿªÿ£ÿªÿ£ÿœÿ’ÿÿ‹ÿ€ÿ„ÿ…ÿ‰ÿˆÿÿÿÿ˜ÿšÿœÿ’ÿ™ÿ“ÿ–ÿ–ÿ˜ÿ™ÿ“ÿ‰ÿÿ‡ÿ‰ÿ{ÿyÿuÿ{ÿ|ÿ€ÿ‰ÿˆÿÿ‹ÿ•ÿ“ÿ™ÿœÿ•ÿžÿ–ÿ¢ÿœÿ—ÿ“ÿÿŠÿ„ÿÿÿˆÿÿˆÿ‡ÿ†ÿ‡ÿŒÿÿ’ÿ”ÿ–ÿÿ˜ÿŠÿÿ‡ÿ~ÿ„ÿ‚ÿ‹ÿžÿ­ÿŸÿœÿ ÿšÿ¥ÿ§ÿ®ÿ®ÿ´ÿ¶ÿµÿ¶ÿºÿ®ÿ©ÿžÿ’ÿ˜ÿ•ÿœÿ¢ÿžÿ©ÿ ÿ£ÿ¤ÿ¨ÿ§ÿ©ÿªÿªÿªÿ¨ÿžÿÿŒÿ‹ÿ}ÿ€ÿxÿ~ÿÿ†ÿŽÿ™ÿšÿ¢ÿ¥ÿ¦ÿ¢ÿ¢ÿ¦ÿ¯ÿ­ÿ¾ÿ±ÿ¬ÿ¦ÿ¡ÿ—ÿ”ÿ”ÿ‡ÿ„ÿ€ÿ€ÿÿ‚ÿ„ÿ‡ÿ†ÿ‰ÿ‡ÿÿ†ÿ„ÿ€ÿxÿ~ÿyÿ~ÿ‡ÿÿ„ÿÿŠÿ’ÿÿ†ÿ‰ÿ‡ÿÿ‹ÿÿ†ÿ‰ÿ{ÿ…ÿÿxÿrÿmÿpÿrÿvÿ„ÿ‹ÿ’ÿšÿŸÿ¡ÿ¥ÿªÿ«ÿ ÿ£ÿ›ÿÿ‰ÿÿ€ÿsÿsÿhÿaÿXÿ_ÿaÿlÿzÿ˜ÿ¢ÿ¥ÿ²ÿ¼ÿ¼ÿµÿ»ÿ¬ÿ¨ÿ ÿ—ÿŽÿ„ÿyÿoÿkÿ_ÿdÿYÿ^ÿ_ÿiÿmÿ€ÿƒÿ’ÿ•ÿœÿ¡ÿ£ÿ¤ÿÿÿ˜ÿ•ÿÿ€ÿqÿmÿgÿiÿ`ÿgÿdÿjÿpÿ|ÿ‚ÿ‹ÿ•ÿ¥ÿ¢ÿšÿžÿÿÿœÿœÿžÿžÿ¦ÿŸÿ¦ÿªÿ¢ÿ–ÿ‹ÿ€ÿ€ÿxÿvÿrÿzÿÿÿ|ÿÿ}ÿtÿÿ|ÿ„ÿ‡ÿ˜ÿ˜ÿ¢ÿ£ÿ¯ÿ§ÿ¬ÿ¨ÿ¦ÿÿ•ÿ‹ÿÿ€ÿwÿvÿnÿkÿoÿsÿuÿÿ…ÿ”ÿ¤ÿ©ÿ«ÿ³ÿ°ÿ¬ÿ¯ÿªÿ¡ÿ“ÿÿÿ…ÿ†ÿ€ÿ‡ÿŒÿ‚ÿ‰ÿÿ“ÿ¥ÿ©ÿ®ÿ·ÿµÿµÿ¯ÿ®ÿ§ÿ§ÿ§ÿ ÿŸÿ˜ÿ›ÿÿ–ÿŒÿŽÿÿ‰ÿŠÿ‹ÿÿŽÿ–ÿ—ÿžÿ¨ÿ¾ÿÈÿ¾ÿ»ÿ³ÿ´ÿ®ÿ«ÿŸÿ ÿ–ÿ•ÿ–ÿ“ÿ–ÿ•ÿÿŠÿ‹ÿˆÿ…ÿ‘ÿœÿ©ÿ£ÿ©ÿ©ÿ°ÿ®ÿ®ÿ¬ÿ­ÿ©ÿ®ÿ¨ÿ­ÿ¤ÿ¥ÿšÿ˜ÿ•ÿ”ÿÿ†ÿÿÿ|ÿ‚ÿˆÿ†ÿ‘ÿÿ©ÿ£ÿ©ÿ¢ÿ¤ÿ›ÿžÿÿÿˆÿ†ÿ‰ÿ—ÿ’ÿ”ÿ‰ÿÿ‘ÿ”ÿ ÿ®ÿ¡ÿ«ÿ¦ÿ¬ÿ©ÿ¢ÿÿ˜ÿÿÿ‘ÿ‡ÿ‡ÿ€ÿ„ÿ~ÿÿ|ÿ„ÿ„ÿ…ÿŒÿÿ—ÿÿŸÿ¨ÿ§ÿ©ÿ¦ÿ¥ÿ›ÿ’ÿ“ÿ‰ÿÿwÿlÿlÿeÿhÿeÿfÿeÿiÿyÿyÿrÿvÿsÿqÿxÿrÿtÿrÿjÿiÿhÿsÿhÿoÿgÿfÿbÿ\ÿZÿ[ÿ_ÿYÿWÿTÿOÿNÿMÿFÿFÿCÿEÿNÿYÿ_ÿ`ÿdÿkÿlÿfÿtÿsÿ{ÿ~ÿuÿmÿpÿgÿ^ÿZÿPÿJÿEÿMÿKÿDÿCÿ8ÿJÿEÿIÿPÿ^ÿbÿhÿrÿ}ÿ„ÿŒÿ}ÿzÿiÿfÿZÿYÿJÿIÿ@ÿ=ÿ=ÿ?ÿ7ÿCÿDÿKÿRÿ_ÿrÿ}ÿ‡ÿ‰ÿ‰ÿ‹ÿŠÿ„ÿÿwÿqÿiÿ\ÿ`ÿ_ÿgÿ`ÿaÿ`ÿcÿsÿzÿ„ÿ‰ÿ”ÿ“ÿœÿ£ÿ®ÿ›ÿ—ÿˆÿˆÿvÿzÿqÿlÿeÿbÿeÿaÿfÿjÿpÿsÿwÿmÿvÿqÿpÿpÿhÿjÿdÿ_ÿ_ÿcÿjÿgÿpÿÿ{ÿ|ÿzÿ|ÿzÿrÿlÿnÿlÿcÿYÿJÿIÿFÿEÿDÿIÿCÿMÿTÿdÿfÿoÿsÿmÿnÿkÿdÿeÿ]ÿWÿPÿJÿEÿEÿAÿIÿFÿIÿ<ÿBÿ?ÿCÿIÿMÿGÿKÿJÿXÿMÿRÿPÿJÿKÿNÿLÿ=ÿBÿ@ÿ<ÿ=ÿCÿKÿAÿBÿ3ÿAÿ=ÿFÿLÿMÿ[ÿ_ÿyÿvÿyÿ|ÿ~ÿˆÿˆÿ†ÿ‹ÿ‹ÿ‚ÿÿ|ÿwÿkÿdÿ[ÿ^ÿXÿ^ÿbÿmÿ~ÿˆÿ‚ÿ…ÿ{ÿvÿyÿsÿ|ÿtÿxÿmÿnÿfÿhÿcÿfÿaÿaÿbÿdÿjÿjÿiÿmÿoÿkÿrÿtÿtÿxÿmÿsÿxÿqÿzÿzÿ„ÿ‚ÿÿ“ÿ›ÿ¨ÿ§ÿÿšÿÿ‘ÿˆÿwÿzÿhÿiÿ^ÿcÿ^ÿTÿPÿSÿWÿfÿsÿ‹ÿŒÿ•ÿžÿ¥ÿ°ÿ³ÿ´ÿ°ÿ§ÿ¤ÿŸÿŸÿ”ÿÿ‡ÿ€ÿyÿjÿiÿaÿZÿUÿWÿWÿ_ÿkÿgÿiÿzÿqÿtÿpÿ€ÿ~ÿ€ÿ|ÿ€ÿÿÿ€ÿ{ÿsÿfÿdÿeÿYÿUÿPÿMÿLÿMÿPÿ[ÿYÿjÿmÿyÿÿ~ÿ…ÿƒÿxÿ}ÿuÿwÿmÿjÿmÿWÿ]ÿRÿUÿTÿWÿaÿhÿwÿ{ÿ‡ÿˆÿŒÿ‹ÿŒÿÿˆÿ{ÿvÿvÿfÿkÿ_ÿcÿWÿiÿiÿzÿ€ÿ—ÿ›ÿ²ÿ²ÿ½ÿ½ÿ½ÿÁÿ¹ÿ»ÿ§ÿ ÿÿ‡ÿxÿtÿqÿhÿlÿ`ÿjÿqÿxÿtÿÿ‰ÿŽÿÿ“ÿ”ÿŽÿŒÿ}ÿzÿsÿnÿiÿbÿcÿbÿPÿQÿQÿYÿ\ÿeÿjÿgÿoÿrÿÿ|ÿzÿ~ÿzÿÿzÿ|ÿyÿwÿgÿ\ÿUÿRÿNÿLÿHÿRÿ]ÿ\ÿfÿkÿpÿxÿsÿ|ÿwÿÿ‰ÿ‹ÿŒÿŒÿƒÿ„ÿtÿuÿeÿhÿdÿeÿoÿkÿvÿrÿwÿuÿtÿpÿtÿqÿrÿwÿxÿtÿoÿ^ÿUÿEÿ>ÿ0ÿ*ÿ&ÿ ÿ ÿ"ÿ*ÿ/ÿ;ÿAÿNÿUÿWÿWÿYÿ[ÿ`ÿ]ÿaÿXÿXÿOÿQÿLÿEÿBÿ<ÿBÿAÿFÿ?ÿJÿRÿRÿ\ÿ_ÿlÿtÿ‚ÿ’ÿŽÿ~ÿ{ÿwÿiÿ_ÿRÿMÿAÿ;ÿ,ÿ*ÿ(ÿ)ÿ-ÿ:ÿCÿNÿcÿjÿ{ÿ~ÿŽÿ†ÿŠÿŒÿ…ÿ†ÿ}ÿtÿlÿbÿfÿ^ÿ\ÿ]ÿZÿlÿmÿmÿpÿ{ÿŠÿ‹ÿ—ÿŽÿšÿ–ÿ˜ÿ˜ÿÿ˜ÿ˜ÿ’ÿ•ÿ’ÿ‹ÿŒÿƒÿ…ÿ|ÿ‡ÿŠÿ‡ÿ–ÿ‹ÿÿˆÿŠÿ‹ÿ„ÿÿÿ”ÿÿ’ÿ‹ÿÿ‚ÿuÿoÿfÿ`ÿVÿTÿUÿPÿ[ÿVÿ[ÿXÿ^ÿVÿ\ÿ[ÿ\ÿoÿuÿmÿqÿwÿvÿrÿuÿoÿwÿtÿzÿyÿ|ÿwÿÿyÿƒÿ|ÿ|ÿ}ÿŠÿ„ÿŒÿ—ÿ˜ÿ“ÿ’ÿ—ÿ—ÿŒÿÿƒÿzÿ{ÿƒÿxÿxÿoÿqÿfÿfÿfÿ]ÿYÿSÿXÿRÿ]ÿ`ÿgÿpÿwÿqÿxÿzÿ{ÿ|ÿÿÿ„ÿ‚ÿ†ÿˆÿzÿpÿjÿaÿhÿbÿmÿ^ÿfÿhÿgÿfÿhÿkÿsÿpÿwÿ}ÿŒÿ“ÿœÿœÿ›ÿ¥ÿÿ˜ÿ•ÿ‡ÿ†ÿ~ÿ}ÿzÿzÿ|ÿ~ÿ†ÿÿÿ•ÿ¡ÿ¥ÿ©ÿ°ÿ²ÿ¹ÿ¹ÿÂÿÆÿÃÿÅÿÆÿÃÿÀÿ¶ÿ¯ÿ¨ÿ ÿ¡ÿšÿÿÿ¥ÿ¨ÿ¯ÿ¿ÿ¾ÿÉÿÎÿÖÿÞÿßÿëÿáÿâÿáÿáÿßÿÓÿÔÿÐÿÏÿÍÿÁÿÃÿÊÿÑÿÑÿÙÿÚÿâÿèÿåÿìÿìÿîÿèÿçÿãÿÞÿåÿßÿæÿäÿßÿàÿÖÿàÿÙÿçÿãÿæÿâÿâÿáÿÜÿÝÿËÿÉÿ·ÿÆÿ¸ÿÁÿÀÿÊÿÎÿÂÿÄÿÆÿÉÿÃÿËÿËÿÔÿ×ÿÚÿÕÿÐÿ¹ÿ­ÿ¤ÿ˜ÿšÿ”ÿ“ÿ’ÿ‘ÿ•ÿ ÿ¥ÿ¬ÿ´ÿ·ÿÅÿÆÿÒÿØÿÝÿßÿÚÿÖÿÁÿ¿ÿ°ÿ°ÿ®ÿªÿ¬ÿ¯ÿ¯ÿ·ÿ¾ÿÇÿËÿÐÿÚÿàÿâÿíÿòÿøÿøÿþÿüÿùÿ ûÿòÿäÿÜÿÑÿÌÿÔÿÓÿÇÿÍÿÑÿÜÿæÿëÿôÿüÿ ýÿøÿúÿåÿèÿÔÿÊÿ»ÿÂÿºÿ¾ÿ»ÿ¼ÿÁÿÃÿ¿ÿÃÿÀÿÂÿÍÿÈÿÕÿÑÿÍÿÎÿÎÿÏÿÑÿÕÿÙÿíÿòÿñÿïÿóÿïÿñÿúÿüÿûÿïÿñÿçÿåÿÞÿâÿØÿØÿØÿØÿßÿìÿïÿ "",.þÿøÿåÿíÿçÿëÿÜÿ×ÿÎÿÇÿÏÿËÿÐÿÚÿãÿéÿñÿúÿÿÿþÿùÿóÿéÿßÿÙÿÒÿÏÿÈÿÁÿ¹ÿ²ÿ¸ÿ¨ÿ®ÿªÿ³ÿÀÿÃÿÊÿÏÿ×ÿÚÿàÿâÿçÿßÿòÿõÿ÷ÿëÿñÿæÿàÿÒÿÉÿÇÿ»ÿ»ÿ»ÿ·ÿ¿ÿ¿ÿÐÿÒÿÞÿÞÿÞÿãÿÝÿæÿçÿòÿíÿ÷ÿðÿ÷ÿñÿñÿìÿìÿìÿçÿõÿýÿ  ýÿùÿóÿñÿðÿøÿøÿÿÿþÿùÿûÿûÿ÷ÿÿÿýÿþÿÿÿýÿõÿöÿüÿùÿúÿ þÿýÿòÿóÿóÿ÷ÿ (11+ $(0& ÿÿÿÿ  õÿ÷ÿæÿæÿÚÿØÿÎÿ×ÿÚÿéÿæÿñÿøÿøÿ "))òÿâÿÔÿÃÿ½ÿ´ÿ°ÿ´ÿ³ÿºÿ¿ÿÏÿêÿöÿõÿüÿûÿðÿÚÿÓÿÂÿÅÿÂÿÄÿÐÿÜÿéÿõÿÿÿ"/8CLNEJ<8&$%<-145;<B48;<?EQTfOH51( "*-8>A@>:7:>:-44%  þÿòÿÿÿÿÿ  )9777--2*4-.''%#$27LSYZ\YUVQC=)  26:7=78&ýÿõÿôÿéÿôÿòÿúÿüÿ $&8CBIJPQVRQ<4#08>LPWQKI62%$%)*%&)!$#*"((-"-($$+).6/,*')*'"$))$$ %-+3,.//1.(øÿûÿ÷ÿûÿøÿ #" !'+(& #--3,389;0*6*ÿÿ  </5&)+!!-+579,539ESTYVMJ><5;;@FLVW\_VSMQOIJJJQKOGLMOOKHKIG<2(#%/.43//-+$ ÷ÿúÿüÿ !/1''#28FIEDA>B8=>CCG?BDLMV]hhy|ƒ€‡ˆˆŒŽ‹…†yi_\I=9--(! #$&3;DFDC>ABGBGBBBDB==AGJPcpz…Ž“  ™•‘‹”›§”‰ztiha__WUNUNZ``bjsЉ—”£›«œŸ’”†uumkeg_`X\ael~„†Š‘‰…xrhghca`_acgjq|‚†Œž¨ž¦œ•Šƒ~…}v|xy…ssss…‘“–•–›”“”‹…ˆ€ˆ{…‚vx}†ˆ” °«­¦ª¥ œšŸššŽŸ¤¥¥£Ÿ¥©­ª¦–‘}xwu~~‡ƒ‡z~|„‚‚†‡ƒ„„xtg`Y^Yjdhllijplv~¨¥£°²±­³ •Žˆƒ{xqdb\aaiuˆ”›±µ¹»½¸º·¯¯ª¤¡›’Š{s}‡Ž £¯«®©¯«­¦¦£—•ŒŠ|pvp{z|‹“™«­¯¶»¾·¶½Â±¬­¥¦««¬­¬°³°±¸±¸ÄÊÍÎÕËËÉÆÁÁ¿º¹·°¨•‘}zmh_[cbgfrruƒ~†‚„‡wtk`YOKE>=;9FCQPger}…•¡—’‹‚xqiXSLREO]dery„ŒŽ‘—•‘—˜Žƒxsh^]YZYUVbaTY[^gn|†„‚„…ƒ…‚Œ‹‚€vuwtzy‚‡Šˆˆ‚}€‡zwpimilpsy}Љ‹‚|rpjrggfjbhahjsgwsz}ytqmlefehfcTWMSVYY_couu„Іƒ‡€…Š“šŸ®´±¬£¡£žš”†€{nmba`dww{‚~ˆœ¦®´®¸µµ«£˜ŒŠ}}txw|€„‡–›¨­¼ÁÓÝÞÜÝÚØÖÓǽº­£š†~tt{{~‚…‘Ÿš¦©¨¨¢¢¢•Ž„x}ojYW^VKAAAFNUTURYUZZT\TXT]WMMFFEBGBLEQUWZTTMMKRPQORZbhcrmsuu|}{xwqkd[RSOOTXdnnlty|{{tqhg][VPYYXYY]^a^efmgm`ea^_\\Y]_muw‚‰‰…ƒ||xtsnrngc`gfkflmhlficc`X_^PHIH:7.2+()&-(1.0+$&&# *4+20;<;793*0%ùÿÿÿ $+)/35497>@8,1033A=9BJfjgjkpXMC@3=71)(.5=:JDFD9B;86:,6,0)0-1-759867442.&+*)(3(1+5-0103.,.,(     ûÿðÿîÿëÿêÿìÿöÿ "&"&%-/!'&17A<EB??@L>>951/1*/,4=@CMMRUWYX^]_`^g]\YPXJOC>C8:67:7:EHOXR]d^KG9:,'#" ++6<MFPWKG>842*##(*8:>=A=GLFLFFNUC>9066:>>:B<?>D7AB<9:>>BGN@K@MMHDG<6+((  ! '$%!&#!,042;C8.*% %24==43))      ÿÿýÿüÿÿÿ øÿ÷ÿïÿîÿíÿÝÿÜÿÙÿÕÿÜÿÞÿåÿèÿóÿñÿÿÿüÿ  ýÿòÿîÿáÿíÿæÿäÿæÿçÿëÿëÿïÿýÿúÿ$(/5.," üÿüÿúÿúÿ%-15.364:3375%  "#%01'"ýÿøÿùÿúÿüÿûÿùÿüÿ  ûÿþÿôÿñÿñÿñÿûÿûÿ÷ÿýÿÿÿûÿ ÿÿùÿøÿïÿûÿöÿóÿòÿïÿôÿóÿôÿøÿüÿþÿúÿóÿïÿâÿáÿÜÿÞÿÏÿÎÿÍÿÔÿØÿïÿöÿòÿùÿÿÿ  öÿíÿðÿéÿîÿêÿðÿîÿ÷ÿöÿýÿ  &!ûÿùÿöÿ ÿÿûÿóÿîÿëÿòÿïÿòÿøÿ !',+2.%   ùÿðÿçÿãÿåÿßÿãÿéÿìÿïÿñÿñÿùÿôÿ÷ÿõÿóÿøÿ÷ÿîÿíÿìÿæÿæÿæÿàÿäÿÜÿãÿÛÿîÿèÿïÿíÿðÿûÿòÿýÿüÿüÿôÿõÿòÿþÿþÿþÿþÿûÿÿÿôÿòÿòÿóÿõÿïÿõÿòÿúÿðÿ÷ÿþÿûÿúÿùÿùÿñÿùÿûÿýÿüÿÿÿ÷ÿòÿùÿøÿêÿðÿèÿòÿõÿöÿùÿÿÿÿÿ ÿÿýÿðÿòÿèÿäÿÝÿÜÿÛÿÐÿÍÿÏÿÍÿÒÿÒÿÓÿÍÿÞÿÚÿÚÿÞÿÞÿàÿÜÿçÿåÿÜÿÛÿáÿØÿÖÿÐÿÖÿÉÿÖÿÌÿÓÿËÿÐÿÒÿÒÿÇÿÅÿÍÿÏÿÜÿÜÿæÿêÿìÿêÿêÿíÿîÿõÿðÿûÿõÿÿÿõÿïÿéÿçÿéÿóÿãÿàÿáÿâÿëÿòÿéÿíÿçÿèÿêÿêÿïÿîÿöÿöÿøÿõÿçÿåÿÛÿÚÿÒÿÐÿÖÿÖÿÎÿÒÿÓÿÐÿÎÿÒÿÍÿÑÿÐÿÙÿÝÿàÿßÿÝÿâÿåÿçÿëÿéÿåÿáÿáÿÞÿÙÿÏÿÖÿÌÿÌÿÜÿÉÿÉÿ¿ÿÌÿÄÿ´ÿ°ÿ¥ÿ¨ÿ¥ÿ¦ÿ©ÿ°ÿ¼ÿ±ÿ§ÿ¢ÿžÿŸÿ£ÿšÿ™ÿ”ÿ˜ÿÿ•ÿ”ÿ‹ÿ‘ÿ‡ÿŽÿŠÿ‘ÿ’ÿŽÿœÿ“ÿ–ÿžÿ¥ÿ—ÿœÿ›ÿšÿ™ÿŸÿ›ÿžÿÿžÿœÿ¡ÿšÿ“ÿ“ÿ“ÿ‹ÿÿˆÿ“ÿÿÿÿÿ–ÿžÿ¡ÿªÿ¤ÿ¸ÿ®ÿÀÿ»ÿÅÿÀÿÍÿÎÿÎÿÊÿÉÿÊÿÆÿÉÿÐÿÊÿÓÿÊÿ×ÿÏÿÔÿÑÿÊÿÍÿÉÿÆÿÆÿÈÿÈÿ½ÿ¹ÿ·ÿ±ÿ´ÿµÿ·ÿºÿºÿ»ÿ¼ÿµÿ¼ÿ±ÿ¶ÿ­ÿ®ÿ¤ÿ«ÿ®ÿ¯ÿ´ÿ¶ÿ¼ÿ¾ÿ¾ÿÃÿÄÿÃÿ¹ÿ¿ÿ·ÿ²ÿ¶ÿ²ÿ¯ÿªÿ¯ÿ©ÿ«ÿ«ÿ¿ÿ¶ÿ½ÿ¼ÿ»ÿ·ÿ¸ÿ½ÿ·ÿ¯ÿ¯ÿ¬ÿ­ÿ¨ÿ­ÿ²ÿÁÿºÿ¸ÿ¨ÿ±ÿ«ÿ¯ÿ«ÿ¹ÿ·ÿ¹ÿ¿ÿ¾ÿÂÿÀÿ¾ÿÍÿÁÿÃÿÁÿÈÿ¿ÿÃÿ¸ÿ¯ÿ«ÿ¥ÿ›ÿ–ÿ˜ÿŽÿ’ÿ“ÿ”ÿÿ¡ÿ¥ÿ­ÿ¶ÿ´ÿÁÿÀÿÍÿÉÿÊÿÈÿÈÿÒÿÌÿÉÿ¹ÿ»ÿ³ÿ¸ÿ³ÿ´ÿ·ÿ¹ÿ·ÿ³ÿ¶ÿ±ÿ²ÿ¯ÿ¬ÿ®ÿ±ÿ¯ÿ±ÿ´ÿ°ÿ®ÿ¬ÿ¨ÿ®ÿ ÿ²ÿ©ÿ®ÿ®ÿ¼ÿºÿ´ÿÀÿºÿÀÿÀÿÊÿÓÿÙÿÝÿéÿÿÿúÿñÿóÿêÿèÿóÿñÿäÿäÿäÿäÿíÿæÿéÿðÿêÿåÿÝÿäÿãÿÖÿÚÿÑÿÕÿÒÿÎÿÛÿ×ÿÎÿÎÿÐÿÜÿÙÿÝÿÙÿÝÿâÿßÿÜÿÙÿÙÿÝÿÐÿ×ÿÉÿÇÿ¿ÿÂÿ»ÿ»ÿÀÿ¼ÿ¿ÿÄÿÇÿÌÿÊÿÎÿÌÿÕÿÓÿÙÿÓÿÖÿÓÿÔÿÜÿÆÿÊÿÃÿÅÿÀÿÇÿÂÿÂÿ¹ÿ·ÿ¾ÿ½ÿÆÿÇÿÃÿÈÿÂÿÐÿÉÿÑÿÒÿÜÿÞÿÖÿÙÿÙÿÕÿØÿÙÿÛÿÒÿÔÿÎÿÌÿÍÿÇÿÌÿÍÿÎÿÓÿÛÿØÿÜÿÚÿÜÿçÿëÿàÿäÿåÿëÿàÿëÿöÿëÿãÿàÿáÿàÿåÿëÿéÿêÿðÿéÿôÿîÿóÿóÿþÿÿÿøÿûÿùÿñÿíÿâÿßÿàÿÕÿÔÿÒÿ×ÿâÿßÿÝÿÖÿ×ÿÖÿ×ÿÛÿ×ÿâÿÞÿÝÿâÿÛÿÞÿÏÿ×ÿÅÿÄÿÃÿ¿ÿÎÿÄÿÂÿÀÿÂÿÂÿÈÿÊÿÐÿÐÿÒÿÒÿÖÿÒÿÛÿÒÿÚÿÔÿàÿÐÿÖÿÍÿÐÿÆÿÍÿËÿÂÿ¿ÿ½ÿÁÿºÿ¼ÿ¾ÿÂÿÁÿÃÿÌÿÎÿÏÿÏÿÆÿÄÿÂÿÉÿÂÿÃÿ½ÿÄÿ½ÿ¾ÿºÿ½ÿ»ÿ»ÿ¿ÿÀÿÀÿÁÿÉÿÓÿÅÿÍÿÌÿÌÿÉÿÍÿÆÿÎÿÆÿÅÿÁÿ´ÿ­ÿ¦ÿ¦ÿ¥ÿ§ÿ£ÿ¨ÿ­ÿ¯ÿ´ÿ¸ÿÁÿÇÿÊÿÐÿÕÿ×ÿÛÿÕÿÙÿÐÿÌÿÀÿ»ÿ²ÿ­ÿ¬ÿ©ÿžÿ¢ÿ£ÿ¨ÿ¬ÿ°ÿÈÿÇÿÉÿÅÿÎÿÒÿáÿãÿíÿîÿíÿóÿúÿùÿéÿßÿíÿÚÿÎÿÆÿÂÿºÿ­ÿ³ÿ¶ÿ¨ÿ´ÿ¨ÿµÿ­ÿ¾ÿºÿÁÿÃÿÈÿÆÿÅÿÈÿÅÿÊÿÁÿÆÿÄÿ·ÿ´ÿ¥ÿ­ÿ¢ÿ¦ÿ¤ÿ°ÿ²ÿ´ÿ¸ÿ¹ÿ´ÿ²ÿ­ÿ­ÿ£ÿ¢ÿœÿ˜ÿ ÿ–ÿ˜ÿ–ÿ‘ÿ™ÿ•ÿÿ§ÿ§ÿ¬ÿ¯ÿ´ÿ·ÿ¿ÿ¶ÿºÿºÿºÿ¹ÿ´ÿ¶ÿ±ÿ°ÿ¶ÿ©ÿºÿ´ÿºÿ¶ÿ²ÿ±ÿ°ÿ·ÿµÿ´ÿ¸ÿ¸ÿ»ÿ¸ÿ½ÿÂÿÂÿÆÿÈÿÌÿÓÿÔÿÙÿØÿÖÿÚÿãÿßÿÏÿËÿÂÿ¼ÿÁÿ½ÿÁÿÁÿ¿ÿÄÿ»ÿÁÿÂÿÆÿÎÿÔÿÒÿÒÿÖÿÖÿÁÿ¨ÿ¬ÿÖÿéÿíÿïÿãÿÊÿ¾ÿ«ÿ¬ÿ«ÿµÿÂÿ¾ÿËÿÌÿ»ÿ¹ÿ¼ÿÆÿÐÿÖÿØÿÙÿÆÿµÿ¾ÿÐÿãÿêÿèÿÛÿÆÿÄÿËÿÃÿÈÿ¼ÿ·ÿ»ÿÁÿÇÿÄÿÄÿÅÿºÿ±ÿªÿ³ÿ³ÿ¼ÿÎÿÕÿÞÿÝÿðÿéÿõÿèÿäÿÚÿÜÿÒÿÍÿËÿÍÿÂÿÊÿÇÿÄÿ´ÿºÿµÿ¸ÿ¿ÿÈÿÒÿÖÿáÿëÿïÿûÿÿÿüÿûÿ÷ÿþÿöÿóÿðÿéÿåÿÔÿÜÿÏÿÉÿÁÿ»ÿ¸ÿ¹ÿ¹ÿ¼ÿÂÿÊÿÖÿÛÿàÿäÿìÿôÿûÿüÿùÿíÿìÿÞÿÙÿÝÿÜÿäÿáÿçÿêÿõÿ $  øÿòÿìÿçÿÞÿÙÿ×ÿÔÿÏÿÕÿÕÿÒÿÜÿáÿíÿéÿòÿûÿýÿÿÿüÿ÷ÿöÿõÿñÿîÿíÿåÿâÿÚÿÞÿÕÿÓÿÍÿÖÿÖÿÞÿÜÿÜÿçÿîÿÞÿèÿíÿðÿóÿüÿþÿûÿüÿûÿþÿýÿÿÿ'',*,)*) üÿóÿðÿñÿõÿûÿûÿ  üÿùÿñÿêÿéÿèÿ×ÿßÿ×ÿàÿàÿéÿñÿôÿ  ûÿóÿìÿèÿíÿãÿéÿçÿïÿèÿðÿëÿéÿéÿñÿòÿèÿíÿïÿ÷ÿúÿùÿüÿûÿþÿ÷ÿôÿñÿðÿíÿìÿòÿèÿíÿíÿéÿõÿóÿòÿêÿéÿáÿÞÿÚÿØÿßÿÑÿØÿÍÿÒÿÑÿÈÿÒÿÕÿÛÿÜÿèÿëÿðÿøÿûÿûÿûÿûÿöÿñÿíÿòÿöÿåÿáÿÝÿÝÿâÿéÿéÿìÿíÿòÿóÿôÿøÿõÿùÿùÿøÿôÿõÿýÿûÿöÿñÿïÿêÿêÿêÿåÿåÿðÿöÿøÿ  ",(%("(&.0&+$ þÿõÿûÿðÿùÿþÿöÿ  %" ûÿþÿûÿôÿøÿôÿøÿõÿúÿ     ÿÿøÿÿÿÿÿÿÿ ÿÿÿÿýÿ   $)-/5?>FAA>72,!  þÿýÿ ,64555711-(úÿúÿýÿ$$%$ üÿûÿùÿûÿ    ÿÿ  üÿ þÿüÿýÿþÿûÿ&+8996:1//0(#&%%,(2<>>CFGDK=D24-/,"-%+./5C@78/1%"   .27@AF8?8+)ûÿûÿüÿúÿûÿ  !''(" üÿþÿÿÿþÿ #&6428=@8@7</3*+.8;:9;5;79940*% ýÿþÿýÿ  $%',&' óÿôÿéÿíÿõÿýÿüÿüÿüÿ #%$'094A8895460,+%#!&-"# ,& úÿõÿòÿèÿçÿÜÿßÿÜÿÛÿÞÿßÿêÿèÿòÿëÿñÿõÿúÿ"%"ôÿòÿãÿßÿÜÿØÿÒÿÍÿÍÿÏÿÖÿÜÿìÿõÿ2230'*$ " -3,--(44933;@4,%! $#(5,0%0,%&#&%!)*-5:>B7;545.3'$("!'-44AH9?IBAEADEHBDCA80-.++#(%(%  %#&  *+:4A?MLJJHQJPOQMQPUXdp}}ƒ‚~wsng`[TSMKHFJUX^_ifrtrqlk`ja^ZUYSVSTSYifidhhcdXYJIEDNPA>F6>A=>EPCOGHMXXPRNX]kZ^h\SVSRPMJRJSVW[XW\RXOQPLLLGNWf_eekqrx€ƒ||{nlegZa\[[c_]cdfoznidW^NFE?<BEGOU[alvxƒ‰‹†ƒywjb]KMF>0379-1368=EGG>=>@CUf`ZX[UWXWSZ\`d`YWUU[[]cdgdekrwvxwzr{qwusvnmddec^Y[b[[ZT\Tdkhnqvvwƒ{€€zwpf\UNE<991518<FIU__imp|y|‹}wqme`VZPKFFACA<@>;B;LEEIFJKKLD>892656:BCKQOLLYUYV[XZYURLMPFQLQMSelljidisxuzxtwtqqmoegdijggoovw~y|}}{€|zuxtqxvvquvsyxsstww}y~xzwytkrcfe]`SPRLNPWT\_`aikoruvonkoch]\TVOQGNCOIPQNXW`a^b`_db_\]Ya]cedkkkmtovw|~z„x|qwpx„x|v‚„Š£¦¥ª®¸¸¶±­¦Ÿ™Œ„‚~‡vxpnyq{t|xzy{…‹…~€~yqpvpkbd^eb_`^`cfcljvyz†yztsonggkgaa\``ropqopvr|sylmhhhha^e^_Y_a\_XXMJE;62*&##*,+;?VRbiu‡’”•’‘Š„zuxzxproumnn€y|z~…~…€qwgpnpuvqypqmpoqqksspxkuhhllilmge^ZVQJEB:?D;/-$"  &,'''%95)" !&-4;BGOQWZX\_\\NQINFVRLLNLJIOQPQOQKJ=>8;?>QbaRSLC>@BFEGMEJD?<;<DGNKOQOQW\Y`_aijdfZXVMK=8:838:>=:;:=;BAIDDC>951*& 1)#!.+=CLMSPRNGE<:*) !!-00;7;//.1.(-6&"*1<BGQV\_c`aXXQUWU_bb_rosmquŠ„ˆŒ†Œ„‘‰ˆ„zyrggd`ag_b_ejr{tzlyuouhqn`XHCC91/+.(($,/0<<BBGJGQTFMLTEMNCINTRU[Wa_aa^XMLBB:=EBDHHMZbcpuqrrpvtrmka_dVcX\^ZY[[_caiwquqjmhe^^`___hhd`cceeljh^d\lmhfcg`dTUII<=A@775:9:>@@FJNLVVWOBD88<184599<9<<59567/+('$%*! #&&,/+6..'%  #$&&% þÿýÿ "*3=;IEKOKME0.(!*!&!-33409;CCECB?C;2/$ÿÿÿÿþÿþÿ  ÷ÿùÿøÿöÿõÿúÿ÷ÿþÿüÿøÿ   !)*18F;>8::49.5#,=?ëÿF×ÿØÿ'Üÿîÿüÿ()(D(1; S+ßÿ>óÿ ðÿ#ïÿ  þÿÿÿóÿïÿïÿìÿòÿùÿ$& %ôÿëÿòÿ÷ÿúÿ)# & $úÿíÿ÷ÿõÿ÷ÿÿÿñÿíÿ÷ÿíÿîÿöÿýÿõÿ  ! %+*&5 #'-.,,9>7'1,' +%!!)"#*1/731+$!! ýÿûÿ÷ÿôÿóÿøÿüÿûÿýÿÿÿúÿóÿíÿñÿéÿèÿòÿëÿêÿàÿÖÿ×ÿÎÿÉÿÇÿÄÿÇÿ¼ÿ¸ÿÈÿÇÿÌÿÔÿÓÿàÿáÿâÿçÿìÿðÿðÿîÿçÿÜÿÝÿÓÿÕÿÐÿÔÿÚÿÖÿÓÿÕÿÏÿÙÿÛÿÜÿÕÿãÿàÿãÿáÿìÿéÿçÿêÿñÿùÿóÿùÿüÿ ýÿþÿøÿõÿìÿîÿçÿíÿòÿêÿõÿëÿðÿæÿðÿðÿéÿëÿîÿ÷ÿüÿõÿîÿëÿÞÿáÿÞÿÜÿÝÿÚÿÕÿÚÿÙÿ×ÿ×ÿÞÿÕÿäÿÙÿáÿàÿæÿåÿíÿûÿéÿçÿçÿèÿàÿÙÿÝÿÜÿÞÿêÿèÿòÿøÿúÿûÿþÿöÿýÿùÿèÿäÿÛÿÇÿÖÿÕÿÙÿãÿÒÿÓÿÆÿÚÿÓÿÎÿÌÿÌÿÎÿÒÿÑÿÏÿÛÿÕÿØÿäÿßÿÝÿÚÿæÿàÿÐÿÈÿÌÿÇÿÆÿÄÿÃÿÉÿËÿÐÿÞÿØÿÑÿÖÿÖÿÙÿÒÿ×ÿÏÿ×ÿÔÿÈÿÅÿ¿ÿÂÿÃÿ¿ÿÂÿ·ÿ¼ÿËÿÉÿ¼ÿ¹ÿ¸ÿ¹ÿ¼ÿ¹ÿ·ÿ¸ÿ¶ÿ¹ÿ¸ÿÂÿ´ÿ´ÿ·ÿ¹ÿ±ÿ·ÿ¯ÿ´ÿ¬ÿ°ÿ¶ÿ¸ÿµÿ¹ÿÀÿÉÿÇÿÌÿÌÿÈÿÊÿÎÿÏÿÔÿÍÿÑÿÍÿÍÿËÿÉÿÐÿÉÿÑÿÇÿÍÿËÿÑÿÍÿÅÿ¼ÿÁÿ¸ÿ¹ÿ³ÿ¶ÿ²ÿ¸ÿ²ÿ¶ÿ³ÿ·ÿªÿ¬ÿ­ÿ¨ÿ©ÿ¨ÿ±ÿ®ÿ¦ÿªÿ¨ÿžÿšÿœÿ¡ÿ˜ÿ‘ÿœÿ–ÿ•ÿ‘ÿÿÿÿŒÿ‹ÿŠÿœÿÿŸÿ—ÿŸÿœÿÿ–ÿ”ÿ‘ÿŽÿ‹ÿÿ¡ÿšÿ—ÿ“ÿ‘ÿ“ÿ“ÿ‘ÿ˜ÿ—ÿšÿ¡ÿ¡ÿ­ÿ¨ÿµÿ¶ÿ¶ÿÇÿÏÿÇÿÀÿ½ÿ¾ÿ»ÿÀÿ¿ÿ½ÿ¼ÿ·ÿºÿ·ÿ°ÿ°ÿ±ÿ³ÿÇÿ·ÿ»ÿ»ÿ¼ÿ»ÿ¼ÿ¹ÿ¸ÿ»ÿ´ÿ½ÿ±ÿ³ÿ©ÿ°ÿ¤ÿ£ÿžÿœÿ–ÿ¢ÿ¥ÿÿ•ÿÿÿÿ‹ÿÿ‘ÿ›ÿ—ÿ”ÿ™ÿŸÿ¢ÿ¤ÿ¤ÿ§ÿ¡ÿªÿ¤ÿ ÿÿšÿ£ÿÿžÿ˜ÿ™ÿ–ÿ©ÿ™ÿ¢ÿ¢ÿ¨ÿªÿ°ÿ¬ÿ¶ÿ·ÿ¸ÿ½ÿÅÿÀÿÄÿÈÿËÿÌÿÅÿÇÿÆÿ¾ÿÀÿ¸ÿ¼ÿ¾ÿÁÿ½ÿ¼ÿÂÿÄÿ¿ÿ»ÿÇÿËÿÍÿËÿËÿÔÿÑÿÒÿÏÿÌÿÐÿÐÿÏÿÍÿØÿÒÿÎÿÎÿÉÿÊÿÍÿËÿÐÿÍÿÎÿÔÿÑÿÞÿÔÿâÿØÿåÿÝÿßÿÝÿÖÿÔÿÍÿËÿÅÿÅÿÃÿ¼ÿÀÿÀÿ¿ÿÇÿÁÿÒÿÒÿÎÿÉÿÄÿÆÿÅÿÈÿÆÿÆÿÃÿÁÿÃÿÅÿ¾ÿÄÿÅÿÂÿÅÿ¿ÿÊÿÉÿËÿÉÿÑÿ×ÿâÿèÿßÿäÿÛÿàÿØÿæÿÔÿåÿâÿéÿãÿäÿâÿâÿÞÿÛÿÓÿÝÿØÿÝÿØÿ×ÿÏÿÒÿÔÿÏÿÑÿÌÿÉÿÆÿÂÿÃÿÄÿÄÿËÿÃÿÅÿÇÿÁÿØÿÑÿÁÿ¾ÿ¼ÿºÿ¾ÿ¸ÿ¹ÿ´ÿ·ÿºÿºÿºÿ¸ÿÃÿÇÿÆÿÉÿÊÿÎÿÔÿßÿêÿÞÿáÿßÿßÿØÿÑÿÌÿÈÿÆÿ¼ÿÁÿ´ÿ¸ÿ­ÿ¨ÿ¯ÿ·ÿ®ÿ¨ÿ¤ÿ¬ÿ³ÿ³ÿºÿµÿ¿ÿÆÿÉÿÂÿÏÿÇÿÉÿÄÿÑÿÄÿÄÿÇÿÅÿÁÿ¿ÿ¿ÿÃÿ¿ÿ¾ÿ»ÿ½ÿ¾ÿ¹ÿ¿ÿ¾ÿ¾ÿ¸ÿ¶ÿ·ÿ°ÿµÿ¥ÿ«ÿ£ÿ ÿ™ÿÿ˜ÿ™ÿœÿŸÿ ÿŸÿŸÿ£ÿ£ÿžÿŸÿŸÿ•ÿžÿ ÿ›ÿ˜ÿ§ÿ«ÿ£ÿ™ÿ–ÿšÿ“ÿ›ÿšÿ•ÿ•ÿšÿ“ÿÿ’ÿ“ÿ‰ÿŠÿˆÿ‡ÿ€ÿ‚ÿzÿ…ÿ{ÿ‚ÿ}ÿ€ÿ€ÿ~ÿ€ÿÿ}ÿ„ÿ‡ÿ†ÿ‰ÿ…ÿ‹ÿ‰ÿŒÿ…ÿˆÿÿŒÿ€ÿ…ÿ€ÿ†ÿÿ„ÿÿƒÿvÿwÿrÿsÿvÿtÿoÿwÿtÿpÿuÿzÿ†ÿ€ÿ{ÿ~ÿyÿÿzÿuÿ|ÿvÿvÿsÿvÿyÿvÿvÿ„ÿ‰ÿŠÿÿŠÿÿ’ÿ˜ÿ•ÿ”ÿ•ÿ”ÿ‹ÿ˜ÿÿˆÿ†ÿ†ÿ‚ÿzÿwÿyÿmÿqÿrÿsÿrÿvÿ~ÿÿzÿvÿƒÿ{ÿÿˆÿŠÿ…ÿˆÿ‚ÿ‚ÿ‡ÿ„ÿŒÿ†ÿ†ÿˆÿ„ÿ…ÿ}ÿ|ÿÿrÿ|ÿtÿ€ÿ{ÿƒÿ„ÿ„ÿ•ÿ˜ÿÿ‡ÿÿ‰ÿ‰ÿŽÿ¡ÿ—ÿŽÿ‚ÿ~ÿuÿÿÿxÿ{ÿyÿ{ÿ{ÿ|ÿ|ÿ€ÿ~ÿ‚ÿ‚ÿŽÿ‰ÿ‰ÿÿ‘ÿ“ÿÿ’ÿ“ÿ™ÿÿ›ÿ•ÿ—ÿ–ÿ‘ÿ¤ÿ”ÿ–ÿŒÿÿˆÿ„ÿ…ÿ‚ÿƒÿ}ÿÿ~ÿ|ÿ~ÿ‚ÿ„ÿ{ÿ„ÿ{ÿ€ÿÿ‡ÿ€ÿ€ÿ…ÿ…ÿ€ÿ„ÿˆÿÿxÿzÿyÿ|ÿxÿyÿuÿtÿtÿvÿlÿoÿkÿsÿrÿoÿmÿ{ÿvÿtÿtÿqÿrÿvÿpÿnÿrÿsÿrÿkÿlÿgÿmÿgÿqÿfÿfÿlÿyÿ{ÿ}ÿ‚ÿyÿ|ÿ‹ÿÿÿƒÿÿ‚ÿ|ÿÿ|ÿÿ}ÿ{ÿzÿƒÿ†ÿ€ÿ†ÿˆÿ„ÿŒÿÿÿˆÿ„ÿÿ™ÿÿ ÿœÿ ÿ˜ÿ—ÿ•ÿ‘ÿ•ÿÿ—ÿ“ÿ“ÿ‘ÿ™ÿ“ÿ•ÿ˜ÿ™ÿ—ÿšÿ–ÿ–ÿšÿ˜ÿ™ÿÿ›ÿžÿœÿ£ÿœÿ¦ÿœÿ¤ÿÿ ÿ ÿ£ÿªÿ¢ÿ°ÿ¥ÿ®ÿ±ÿ¯ÿ¯ÿ¬ÿ±ÿ±ÿ¯ÿµÿµÿ±ÿ²ÿ°ÿ³ÿ±ÿ±ÿ¯ÿµÿ·ÿ²ÿ¶ÿ¯ÿ²ÿ­ÿ±ÿºÿ²ÿ°ÿ¦ÿªÿ¡ÿŸÿ¢ÿ˜ÿšÿ“ÿ•ÿÿ’ÿÿ‘ÿ—ÿœÿ­ÿ ÿ™ÿ•ÿÿÿÿŠÿÿŠÿ‹ÿƒÿ„ÿ}ÿ}ÿ}ÿxÿzÿ{ÿ|ÿzÿtÿqÿnÿnÿkÿhÿnÿrÿeÿiÿfÿ\ÿcÿXÿ^ÿVÿXÿVÿTÿVÿ]ÿ\ÿUÿTÿXÿQÿ^ÿpÿ`ÿ_ÿ^ÿ]ÿ_ÿ^ÿ_ÿeÿ\ÿ`ÿ^ÿ\ÿ`ÿhÿhÿbÿ_ÿ`ÿhÿ]ÿaÿ]ÿgÿhÿdÿgÿcÿmÿeÿpÿjÿhÿqÿlÿsÿuÿzÿÿÿÿzÿzÿxÿwÿxÿtÿ~ÿzÿ~ÿ}ÿÿ„ÿ€ÿ‰ÿ‚ÿ„ÿÿˆÿ‡ÿ„ÿƒÿ~ÿ‚ÿÿ„ÿ~ÿ…ÿƒÿ‹ÿ‡ÿ†ÿÿƒÿƒÿ}ÿ‚ÿ}ÿÿ~ÿ€ÿ}ÿ|ÿ{ÿyÿ€ÿÿtÿzÿpÿqÿgÿ{ÿkÿfÿeÿgÿeÿfÿdÿeÿeÿdÿkÿjÿeÿdÿiÿ]ÿkÿ_ÿdÿdÿgÿfÿrÿhÿdÿfÿ`ÿaÿbÿbÿhÿmÿeÿkÿkÿhÿnÿhÿgÿeÿbÿhÿbÿjÿeÿmÿbÿdÿaÿdÿZÿ]ÿkÿ_ÿ]ÿ[ÿ_ÿ_ÿWÿZÿXÿVÿ[ÿWÿYÿWÿUÿSÿYÿUÿVÿWÿVÿYÿWÿYÿ\ÿdÿ[ÿ_ÿYÿ]ÿ]ÿfÿ^ÿ[ÿ^ÿ`ÿaÿbÿjÿ^ÿgÿ[ÿcÿXÿ\ÿWÿ^ÿ[ÿZÿUÿUÿSÿRÿWÿQÿQÿUÿTÿZÿYÿVÿWÿPÿVÿWÿWÿXÿZÿUÿZÿUÿXÿUÿUÿYÿ\ÿZÿ^ÿ]ÿbÿbÿaÿfÿhÿaÿ]ÿdÿbÿbÿ^ÿhÿfÿdÿaÿgÿlÿhÿbÿ_ÿgÿ\ÿ^ÿfÿ`ÿdÿaÿdÿbÿ`ÿcÿbÿfÿhÿmÿlÿgÿmÿ_ÿlÿfÿiÿrÿkÿnÿkÿkÿqÿxÿ~ÿ~ÿuÿzÿtÿqÿ~ÿsÿyÿuÿ|ÿ…ÿ€ÿzÿuÿrÿsÿrÿsÿyÿÿŒÿŠÿÿÿ€ÿ~ÿyÿ}ÿuÿƒÿ|ÿÿxÿ€ÿyÿtÿrÿrÿzÿ|ÿqÿoÿvÿqÿƒÿÿ„ÿ‡ÿ„ÿwÿtÿvÿvÿ~ÿ‚ÿÿ‚ÿvÿ€ÿ}ÿ†ÿzÿƒÿzÿ}ÿ„ÿ’ÿ„ÿ€ÿzÿƒÿƒÿ…ÿ…ÿ€ÿ‚ÿ}ÿ{ÿ}ÿzÿ€ÿ}ÿÿ{ÿ|ÿyÿ€ÿ|ÿ€ÿ€ÿ~ÿ…ÿzÿÿÿ„ÿ~ÿÿ€ÿÿ{ÿ{ÿsÿuÿsÿ~ÿxÿwÿzÿuÿwÿwÿuÿxÿzÿ€ÿŠÿÿ‚ÿˆÿ‚ÿÿwÿxÿvÿqÿtÿtÿwÿuÿsÿtÿvÿpÿoÿkÿjÿqÿrÿxÿoÿpÿrÿjÿpÿbÿmÿdÿmÿjÿuÿgÿlÿzÿoÿmÿiÿhÿkÿhÿnÿiÿnÿkÿpÿjÿrÿnÿrÿrÿtÿqÿoÿvÿqÿtÿrÿsÿzÿoÿtÿoÿzÿzÿxÿsÿwÿuÿxÿuÿoÿoÿtÿkÿsÿjÿwÿlÿtÿlÿtÿvÿpÿuÿkÿrÿiÿjÿoÿgÿoÿiÿrÿhÿhÿeÿhÿiÿkÿmÿrÿlÿtÿfÿmÿlÿkÿtÿ}ÿuÿqÿtÿsÿoÿuÿiÿrÿfÿhÿjÿcÿfÿhÿlÿrÿuÿlÿlÿYÿÿˆþþþzþœÿò©‹wíþ¢ýý]ýNþsÿpØ×L†ÿÈþ.þþ!þþ2ÿ·ÿ9†ŽS¾ÿ ÿcþ þ-þÃþÿ5xûÿRÿ¿þyþþÿ›ÿ)Åÿmÿ$ÿÿÿþÿ\ÿ‹ÿ¿ÿÑÿÇÿŸÿ{ÿLÿAÿBÿUÿqÿ…ÿ”ÿ›ÿ–ÿ„ÿuÿbÿZÿRÿTÿgÿuÿxÿ€ÿxÿhÿaÿ^ÿUÿSÿSÿ`ÿdÿnÿnÿnÿbÿVÿPÿJÿHÿTÿTÿ\ÿ^ÿYÿOÿFÿIÿGÿTÿOÿWÿPÿKÿIÿJÿSÿVÿ^ÿaÿ`ÿYÿPÿNÿIÿYÿ\ÿpÿrÿuÿgÿhÿZÿWÿTÿVÿcÿdÿiÿfÿ^ÿ_ÿ`ÿ^ÿaÿaÿ`ÿ^ÿ^ÿYÿ^ÿ[ÿ`ÿZÿ^ÿSÿ[ÿUÿSÿRÿ]ÿWÿcÿ^ÿaÿRÿPÿRÿLÿTÿYÿbÿbÿlÿ`ÿdÿTÿ_ÿ^ÿdÿlÿhÿnÿjÿhÿhÿcÿgÿqÿtÿtÿˆÿ‡ÿ†ÿsÿqÿiÿnÿvÿvÿwÿpÿuÿ|ÿ€ÿ‚ÿ„ÿ}ÿ|ÿwÿxÿuÿrÿ{ÿ€ÿxÿzÿwÿ{ÿ|ÿ{ÿ…ÿ|ÿ‚ÿÿvÿ€ÿ‡ÿ†ÿ‰ÿ‡ÿ~ÿyÿsÿzÿ{ÿzÿ{ÿuÿ}ÿ„ÿ…ÿ†ÿ‡ÿ~ÿzÿtÿvÿxÿqÿxÿtÿtÿqÿrÿ}ÿÿuÿxÿmÿrÿhÿlÿgÿnÿgÿkÿrÿqÿuÿƒÿ‚ÿ{ÿnÿeÿaÿ^ÿeÿrÿ‚ÿ~ÿ„ÿvÿuÿoÿqÿqÿwÿÿ~ÿÿÿ„ÿ€ÿÿ|ÿ…ÿ‚ÿ„ÿˆÿ‰ÿˆÿ„ÿŒÿˆÿÿ‰ÿ›ÿ™ÿ™ÿÿŠÿ}ÿƒÿÿŸÿ©ÿ­ÿ¨ÿ—ÿÿmÿfÿuÿŠÿ¢ÿ©ÿ«ÿ ÿÿ|ÿqÿwÿ„ÿ•ÿ¡ÿ¦ÿ¢ÿ•ÿˆÿÿƒÿŽÿ˜ÿ¤ÿ®ÿ®ÿŸÿ–ÿŠÿ’ÿ˜ÿ°ÿ¾ÿ³ÿ§ÿÿ‹ÿ~ÿ•ÿ ÿ¶ÿºÿ¾ÿ­ÿÿ‹ÿ†ÿÿ£ÿ±ÿ´ÿºÿ¢ÿ¡ÿÿÿ’ÿ™ÿ¨ÿ«ÿ«ÿ­ÿ®ÿ£ÿ ÿ§ÿœÿ¤ÿžÿ¨ÿ¦ÿ¦ÿ¬ÿªÿ¨ÿ¤ÿ¨ÿ§ÿ¨ÿ£ÿ¡ÿ£ÿ¥ÿ¦ÿ®ÿ¯ÿ±ÿ¯ÿ©ÿ§ÿ¢ÿ£ÿ¨ÿ­ÿ°ÿ¹ÿ°ÿµÿ°ÿ²ÿ©ÿ²ÿ°ÿ±ÿ«ÿ°ÿ¯ÿ±ÿ°ÿ±ÿ¯ÿ«ÿªÿ­ÿ©ÿ§ÿ«ÿ ÿªÿ¨ÿ³ÿ¯ÿºÿ®ÿ¬ÿ³ÿ¬ÿ«ÿ«ÿ¯ÿ®ÿ¸ÿ¯ÿ±ÿ«ÿ¦ÿ¦ÿ¨ÿ©ÿ¯ÿ«ÿ°ÿ¨ÿ¤ÿ¬ÿÂÿ»ÿ²ÿ®ÿ¥ÿ§ÿ¢ÿ£ÿ¡ÿ ÿ¢ÿ¤ÿ­ÿ¦ÿ©ÿ®ÿ¢ÿ¡ÿ¡ÿ³ÿ±ÿ°ÿ¦ÿ£ÿ ÿ®ÿ¥ÿ¨ÿ¦ÿ§ÿ¦ÿ¡ÿ¥ÿ¤ÿ­ÿ®ÿ´ÿ³ÿ°ÿ¯ÿ§ÿ­ÿ«ÿ»ÿÂÿÁÿ¾ÿ¿ÿ²ÿºÿ¦ÿ³ÿ§ÿ²ÿ§ÿ¯ÿ¬ÿ­ÿ®ÿ¯ÿ­ÿ®ÿ°ÿ°ÿ°ÿ¯ÿµÿ³ÿ·ÿ²ÿ±ÿ´ÿ²ÿ¸ÿ®ÿ½ÿ»ÿºÿ¼ÿ·ÿ¹ÿ¹ÿµÿ¸ÿ´ÿ·ÿ½ÿ¸ÿ¶ÿ·ÿ¸ÿ¸ÿºÿ½ÿ½ÿ¹ÿ¸ÿ¸ÿ½ÿ»ÿ¿ÿÂÿÅÿ¾ÿÄÿ¼ÿ»ÿ½ÿÂÿÄÿÉÿÒÿÊÿÍÿÎÿÉÿÌÿËÿÌÿÑÿÏÿÔÿÓÿåÿàÿÛÿÒÿÖÿÓÿÖÿÏÿÓÿÕÿÏÿÑÿÑÿÑÿÓÿÌÿÑÿÊÿËÿÍÿÐÿÐÿÑÿÕÿÛÿØÿÑÿÍÿÏÿÕÿÖÿÕÿÙÿÓÿÓÿÒÿÓÿÍÿÇÿÈÿËÿÎÿÍÿÉÿÅÿÐÿÄÿÆÿÁÿÇÿÃÿÆÿÑÿÁÿÃÿÁÿ½ÿ¼ÿÅÿ»ÿÀÿ¹ÿ¾ÿ¼ÿ¹ÿ¾ÿ¹ÿÈÿÂÿÀÿÀÿÄÿÄÿÄÿÅÿÆÿÒÿÐÿÓÿËÿÒÿÊÿÌÿÈÿÐÿÑÿÔÿÜÿÕÿÚÿ×ÿÒÿÒÿÕÿØÿÛÿÝÿæÿÝÿÝÿÚÿÝÿÙÿ×ÿßÿÞÿáÿÝÿêÿáÿäÿéÿåÿæÿäÿÝÿãÿæÿçÿïÿéÿòÿçÿïÿèÿìÿéÿòÿîÿýÿþÿûÿýÿûÿüÿúÿýÿöÿÿÿýÿþÿ   ûÿþÿ  ûÿ ûÿþÿ  ýÿ    ùÿ  ÿÿúÿþÿþÿÿÿýÿ     '&!"## $%#) * $" "')-#"#'%"%"%%!"""%25')*.22.-*'('',*(-01-+&.0.3146./)2(.)/*0)++-'**)"#! !/0& !#!(!!  "!          ÿÿ         ÿÿþÿÿÿ ÿÿþÿ                       #-,$)''$1A931$'&%-,%("%#&$%'&-#)#%'#$&<3*1**$--20-9B6752536@428/4.96956>CAIAA<>4@@G;B89<87;8<989;=OLJDKJHQIMKKOJFGIQRMLMLGEHMOSPURX^UYYUONKTPXPb\aafihih_jjb`Z^ZTUQRVSVUR[SXRabd_a_liehdtpqqkxrrqopskr~q|ssnpqwyy„~€~ƒ|{„~{‰Œ‚z€~€ƒ€|x|swx€|yuownwnoqrs}{…‡ˆƒ€}txpzvnuqzstppvsuw{wxyvwrusxtxvzqxrxquwsspqyxoqlqltqphrkypkohkffjdfjkjkkkdjhmiigjmhlxpnqixwrwkwnw†v|vv{vzoxx}r~Šƒƒ|ƒ‚…}~‚€‚ƒ‚‡†Š‹ˆ‰‘ˆŽˆ‚€ƒ…„“ƒ€w‚‚…ƒ„‚ˆ…„€|}|}Š„…‡„~†…ƒ„ƒ†ŠŽƒ‰„‹‹ŒŽ’—““’‘•“Ž’ˆŽ†‰„…‹…‡Ž‹‹’ˆ‰~‡z}yr€v{stxuvwssnu}„ƒ…y}zw{~w{zzqrnvt{z„zwqtru|€x|w‚ƒ†‰†‚~v{y{~€ˆ}wturrtpzƒzwvwoptopkhiihpflnfdcfmggabbdjokjahgmekpjuqunts{vxtvvs|xuƒ€xzx|{~|{z|~ƒpwmpgrjmljormggmfcgchfeadc`b^dUYWSQQUMY[TWNPPOMLKFEIAFBHFYZKPGPMNNTVRYW[[[b_ab`afbmgf`_a`\`X[_X\YVVYRVMVLTNWJPFJERTIDA=950</711/(+-.515/3064755040/.014)3)302/257?6><>=<=DOKDDG>DEESGLGAEBJQGEDGDIFDUWRLHQPKC=>BDK?EA@BHOMIFHHMLEKENGMEHFDFOKGHGIOHZRTIPPN\[SVUQUVP\Z^W]Z^RZX\aac\_[``r€ynrihjimgidipmlkozolhkcdfd_c^cf\]dWaZ_]beabgaemghdmfnhupumrenvxtvsvoroetjvnyttvuv{y{x}vq|py}twl|su}{ƒuywowosokoopopowpupsmroqutknkhosrqtw…yyxv{{stusuyvy{swprmqtsxsoxunuissruprkppusyopmmhhgjghkuqdde^a`c\`\]Waee_`^f^hed`cipfffahhmlhhirumzy|psvzuwstuwtumrinlkrvpjjkdkhjiottmngigedc_\a^jpdd^]_RZVVRSTRRSSTQPOPOOTROTPOSQQNRUNVORTPQNNOOV[VUUYVX]WXRWTXTWQXMRQPXUWTYV[VZ\XcW]XZXPVP]WSUUQZUWVWUWTT\X]^^_\]]_^ec`oyjfaa^bdhlingniqowutonkimknkyprsnquwquqptwyvusuuvhptpvto{uspruporoqqrokrjmjloqjsntstwwwvxrljqihheksiigdghcijklytsqlhokjgebdcrtsilifjkrp||zvw€‚ƒ|}{tvpkhfqktozp|s€}‚~}y|}†„ˆ‚}wu}wswxtv}ykkihlzx{~ƒy…‚Œ‡Œ|wrkckbcfifigjgjpmps|‚~†Š‚ƒ…uxqvlphcfjkowx|v†||{sunrhhkiljejjcbjeggklfbmndjbm]c`ffffade_f^_^id]YZV^kj]]`jdgnbbX[SYMWJRMQV]Z_Yc]_b_^\XWWWORLMHIHMKWXWU[_d_hbd^dX_UWIJDDAFEFDEEGJJSPOPRWWX]RUKJNDEBF@B><><=::8A@>@AB:A<DAD@D>>>:583758758A.434977AF??;@:A@E>;?@>BM=><>@=KQJDA;<;<7:9<;343238764975566;:994675.:5718/+012.?C65/45523727?;78736;654:1*./@>5503)1.3-33/.0*+'%.,*+(/%0*'%)!!,...?E;933286.3.4-;?6712,.+130,/,0)2-16?@186>B@7:541623236521943<=666ED?=CC6E7<882703-0-.-,3)+*$,$-'.(/+0/59;3406524++-,02.*/)0%-&++($+&("'"$+,!!&"!$')("!$!! '&'#$!!(              üÿýÿüÿÿÿÿÿ þÿýÿúÿùÿúÿ÷ÿ÷ÿøÿõÿøÿöÿûÿùÿöÿóÿùÿòÿ÷ÿöÿùÿúÿøÿûÿþÿûÿ÷ÿüÿøÿøÿöÿõÿðÿøÿ÷ÿúÿõÿÿÿ÷ÿüÿôÿøÿòÿóÿõÿýÿÿÿüÿùÿúÿøÿóÿùÿñÿöÿ÷ÿøÿùÿòÿùÿñÿùÿÿÿýÿÿÿüÿ     ýÿõÿøÿÿÿÿÿ ÿÿ÷ÿ÷ÿöÿÒÿžÿŸÿÆÿ÷ÿ!C*"ÿîüBûçúŽû5ýƒÿiìlU ÿ3þ»ýçýžþnÿ{–R½ÿýþAþÁýœýÞýkþ0ÿóÿŽÖ¢@¿ÿAÿ)ÿdÿßÿb¢“0Éÿ5ÿþQþ­þÿ8ÿvÿ“ÿÿžþÿÕÿ™{Êþ+ýÎü<ýþúþe ÿcÿ0ÿÛþàþ[ÿ±ÿÍÿãÿ‡äú™ÿ‹þ&þþ7ÿÞÿ\ƒc(·ÿÿÊÿóÿÚþý$üü_üZýÿp³,‹ÿ ÿÚþºþÂþÓþßþÅþ®þÁþèþ•þþcýý)ý,ý"ý€ýBþçþ`ÿ¾ÿóÿëÿ¨ÿ3ÿþLþþÝþåþ®þ@þÔý¦ýÍýGþ•þ©þ†þ‚þ®þÿdÿÆÿÞÿÉÿÄÿÿ„ý”ûú¤ùtúeû)ü´ü ýùüÓüæü?ýùýñþöÿÐdÛG5zXZÿÙþèþRÿÆÿàÿÁÿ‚ÿ_ÿ|ÿæÿ}®4ží`Õ1SI ÚåBf:™˜ î’ާ³“V>]¯Ãð *Fe‘É ËZÓƒgaH Âÿ‘ÿmÿCÿ ÿäþÎþ±þ¨þÕþOÿìÿmª¹·ß"`xgK3#86"öÁ|-ìÿäÿ=;ûÿ’ÿþÈýþ%ÿ²ÿßÿ*jÒç÷öï¿g&øÿªÿ–ÿ–ÿZÿ«þÑý\ýfýÅýþèýßý2þ§þÔþÿ’ÿ,‹¥§¢¨¦Âœ.Îÿ¯ÿ¬ÿ™ÿƒÿXÿKÿ|ÿ·ÿÄÿÁÿ¿ÿºÿÅÿôÿ8y³òöжå%NIñËzÅÿ¼ÿþÿøÿáÿåÿùÿ #187X{¸êõ Ù–IMn\;2A.ýÿÄÿ¤ÿÎÿ5Œ²ÇÙÛ÷Gw|C9|ÃßëñÅmHId|B<l™  g8*JVQ[‰Îíá¶š»ÉÏÞù çÎÙ×­˜§›–˜¸ð-)Ez—–XÔÊÅ›’ƒ€e3úùüþðìâáÒɶ¤PðÿÍÿÆÿ¹ÿ˜ÿyÿWÿ'ÿüþûþÿøþûþöþíþåþËþ·þ—þ”þšþ†þnþFþ(þþìýÆý³ý«ý¡ý€ýtýdý`ýIý9ý,ýýýýý+ý&ýý ýýý ý ý ýýýýïüåü×üÖüÏüÀü³ü üŠüŒü§üÂüÎüÜüëüëüñü÷üûüýý!ý#ý-ý5ý4ý<ýGýHýHýYýhý{ý’ý¸ýÜýþ5þRþtþ¥þÊþ ÿOÿŸÿÑÿDp§çE‰à9t¥ÖjÕpÃ:¯d¨áOœ c ‚ ¹ n ¦ ß >   Ý ï  x ê  E ‹ s“«ô>cm³Ey„º ·BàGŽã  ; ‘ æ € ü--'ä¸Îÿÿfþ–ýÔüü&ûCúYù|ø“÷¶ööšõ0õ¸ôôSótòƒñŠðšïäî[îîîvîàîDïžïøï[ð¢ðïð2ñšñòÈòŽóYôõžõöhöÅö0÷®÷Røùúûîû³ü2ý’ýÀýËýÒýúýRþÇþ5ÿÃÿa v¥¬¶Ã¸TÝW¥ÿßþþ!ý8ü‚ûìúŠúmú_úiú’úïú:ûLû8ûøú¤ú@ú¸ùùZøµ÷ ÷ööŽõ8õõýôõiõÂõ2ö¢öáö+÷_÷—÷¾÷ê÷ø5øbø¡øýøsùúùúûÚûhüÑüCýÑý_þúþ‰ÿ¨V)& øåÙ«` ù — 8 Æ / ½ 4 Ÿ í nŸ>Ñò8}¤ÊåéÛ©+˜þ$P¾õ‹£¶¾Æ{šÇ›ænÀ¼?ä D * (SÉÁ3îþôú±øªöTôùñþïŸî î—íaì•ê˜èuæ¨äPã?âdáøà2á â‚ã¹ä”å.æ^æKæPæ¼æPç4èXé¦êÿëoí¬îrïÄïúïlðOñoòàó‘õ•÷¿ùùûµýÿ">IkÁ<ä° . >¸ “YzÉ?¾ïÏf±»·Ç Ö š T * FonNB?DvÛ6ÿSþlýUüÂúóø&÷YõKóñ7ï íKì!ë.êé2éÿèêè é;é^ééæéKêŒê†êzê†ê²êÅêÆêéêBëÂë©ìÊíäîàïÓðàñÛò»ódôõåõºö÷€ø—ù—úƒû¦üþƒÿ÷\åqì@ˆ ± # ¸ D à 2†ö{æ?žühÈX¥íIŽÓ'u¥àE½k–Óû ·£¸Óÿ38‚Êî‘Ç7 ã ˆ y9x»`CA˜ÿ]ÿjÿKÿ½þ<þþý4ûUùù÷ìöÎõ¡ô™óûòuò†ñEðïîºìÆëWë3ëNëtë¨ëì„ì¦ìˆì…ìÍì@íÖí­îÇïñEòAóôÖôõ!ö¾öG÷øù,ú0ûüöüÂýoþìþ}ÿ'å¸ÉùÁ…AìY Å D Ò E ™ Ï Ü Æ h Ñ & I åLÿúÖÍÿ_ÿñþ_þ¿ý#ý†üäû:ûlúFù?øm÷„ö(õ­ó`ò?ñ<ðBïî>î î÷í'î…î²î²îî¿îÒî©î_îYî‘îÒîþîJïãï™ð=ñüñýò9ônõ™öã÷0ù*úäú»û„üýcý÷ýžþkÿ%üþ  )åÔ ´ Y Ú g ã < ` w ¢ ± ’ « Ð Ö ª ™ ~  ¯ y [  õ Ð Ê œ U &  Ð ` ( ,   Ó µ ¤ p < âÂ¼Ú 9 g Æ K Î + D T u a  S A qÏ´• ò#g”òrø.3È3Qúm!Éþ–ýïüÄüÂüÅüÃüºü¬ü[üüÈû2û’úú—ùìø?ø£÷÷€öúõÂõäõOöÛöÂ÷¹ø‰ù)úÃúûû°ú=ú¶ùCùÔøeøøð÷ë÷ø?ø‡øùíùéúücý¡þ¯ÿy `V)ÏbºÿqÿÿŸþ)þÞý‡ýý·ü²üìü9ý|ýÔý)þ<þéývýý—üü|û.û)û&ûû÷úëúÊú­úŒúŽú«úòúHû»ûüJüGü&üÝûrûû»ú¯ú´úÊúûxûáûü^ü¬üýuýëýqþðþDÿ‡ÿÆÿëÿ¿ÿzÿ7ÿÿöþþþÿDÿ–ÿæÿ({×+3fªõþÜÁª^ ÒÀÏãçÔçëÚµ“xZP;A477/ùÿCgŽË <Po•‘œªÊFhš¿ãAw¾ \¢ä \Óa£øT‘µÏèûô÷+AV_Œ¬¢¥¥ÀÑâßçëÉ¢e*Ý„>û½‚Oê°|,ášG©Vþ¥<Øcþ2Öÿƒÿ<ÿúþ¸þˆþAþþ®ý^ýýÒü†ü+üßû‘ûFûüú¨ú_ú úÐù•ùjù8ùùùÿøùþøöøáøåøÏø¶ø¡ø‡øyøkøSø[øTø`ø[øgøvøŽø¨øÄøßøýø ù9ùRùeù…ù£ùÁùÜùùù!úWúú½úíú)ûiû¥ûåû"üSü˜üÂüúüýBýcý{ýžý¾ýîýþBþvþ¨þâþÿHÿ„ÿ¸ÿîÿ$RЏâ"?Sy† ¯ÊÛóû    !%!3-0.,1+!      ):;IIJLIPSW`d[WIG4(!'+;CKR^doomw€…” ¦­¸ÆÇÙÕåè÷øúÿöììÞÛÏÑÈÔŽ«¥‰z`J,åÆŸƒ_C& êÝñ•…mS* îÿÔÿ·ÿ“ÿŠÿpÿVÿ7ÿ*ÿÿÿüþóþðþåþÖþÎþÈþ¿þ½þ±þ°þþ›þ–þþ‡þˆþ‹þ‰þ€þwþƒþ‚þjþiþVþQþIþ=þ>þ4þ-þ þþþþ þþþþþþþþùýøýûýúýúýþ þ þþþþ(þ2þ@þUþfþtþþþ¤þ½þÇþßþõþÿÿ9ÿSÿlÿ‡ÿžÿ·ÿËÿéÿþÿ0PZo€”¦¸Îì÷ <Zcu†š °¾Îâàê÷û  &.429:A@;5450$& ýìçÝÑ˼°§¢™Œ†{ywujgaWQJGA8;11'"3%**##&  ÷öïîèßäÛßÖØÏÈŽÀ°ª¤ž…yytskda`USOFPBCC>9433?C8290400240131:9ABCEMLEIGDCIFFCEE;B73-*+-'.),%&*0,188?@8<7@734734?E@JGNXYaipx‹Š™Ÿ¨¯¯Â¾ÀÃÊÊÒÌÑÌÔåÞãàææîòðîûøøïñíòïèâÞ×ÑÌÎø¨¥›’|pje^TWMRFLJJFFDWJMBN\ONOPPMOPXVbbbgrstv}†…†€™•¡¢Ÿ£¥¥¦­°®˜˜““”‘•’Ž’‹‡…€vpgfcZUPHLEA?;.* þÿþÿöÿñÿëÿãÿàÿáÿßÿÓÿÕÿÍÿ×ÿ×ÿÇÿ»ÿ¶ÿ­ÿ¨ÿ¨ÿšÿšÿ“ÿÿ†ÿ~ÿsÿvÿnÿpÿtÿrÿtÿqÿpÿsÿyÿ}ÿtÿ{ÿ|ÿƒÿ‚ÿÿ”ÿ“ÿ—ÿ•ÿ’ÿ’ÿ”ÿ•ÿ—ÿžÿŸÿ¬ÿ¥ÿ¥ÿ«ÿ«ÿ»ÿ»ÿÇÿÅÿÉÿÍÿÔÿÑÿÒÿÔÿÒÿØÿÝÿÔÿÞÿàÿâÿÜÿàÿéÿèÿèÿðÿïÿñÿóÿôÿîÿòÿìÿòÿöÿüÿþÿüÿ +-*&$%##((-35DB?EJLUMWTYY__^ebhpnuz†|…ƒ}}~‚Š{uunorgebf[agfed[^TUUUVSVVTUXYYVPSRPOLcaWNIJGJMFKKKLJKFI>?;>8501,%)'/)++%)+#& ####*3-,/,&)2.+"$#'()*1214<?;:F>A@><4@46@8A<52'001,-%'),*$"  " !&(5357?>=@>?F>FDNGLJNOXTb\nfq}„~ƒ†‰†„ƒƒ‹‹Šˆ’‘‰ŽŒˆ†{{{u|wtustmkhaa`cVVUPOFJCCCELEGAK@MLKJILGTKWNTWWRYSd`^`\c[gbd\]b^\`Y\]bY\YV]XY]bU]UZNQMKBF?A8792-0),6''+)!"! ÿÿþÿÿÿûÿþÿ÷ÿùÿñÿúÿ÷ÿúÿõÿöÿòÿûÿþÿúÿóÿôÿîÿíÿéÿéÿåÿêÿéÿèÿïÿòÿìÿðÿöÿñÿùÿøÿ  *&0*'(,07092:<;A>BK@HJTKPPNMLOQNKK?@@B;<96:463.0+0&#((#"# $  ###%,)0=@8779CD;C?H=EBCMJJSKNPM`YUMOFHMHIE@HKKA@<IL@>68-1$$#) ((7!$   þÿûÿüÿÿÿüÿøÿþÿÿÿ    %($%#$ "$         %*,*"# #''" ! ""!!   ýÿþÿýÿöÿõÿùÿõÿ÷ÿôÿûÿòÿúÿ÷ÿóÿûÿÿÿûÿþÿòÿüÿüÿúÿöÿøÿöÿ÷ÿûÿõÿüÿøÿ÷ÿôÿôÿùÿøÿòÿõÿüÿõÿöÿíÿðÿëÿìÿæÿêÿãÿæÿäÿòÿàÿëÿåÿåÿÜÿàÿàÿâÿÝÿÝÿÙÿäÿÚÿÞÿÛÿàÿÝÿÜÿÚÿÚÿ×ÿàÿÖÿÕÿÓÿÜÿÙÿÖÿÓÿØÿÚÿÚÿ×ÿÛÿÝÿâÿÝÿäÿàÿäÿéÿäÿïÿæÿíÿéÿìÿìÿéÿøÿóÿóÿðÿóÿïÿõÿíÿõÿõÿïÿøÿñÿöÿôÿûÿîÿ÷ÿ÷ÿøÿøÿøÿõÿþÿôÿÿÿûÿøÿôÿ÷ÿöÿòÿ÷ÿùÿþÿúÿóÿòÿòÿðÿíÿòÿùÿóÿõÿîÿóÿõÿðÿòÿóÿóÿéÿóÿæÿìÿáÿíÿèÿïÿâÿéÿãÿèÿçÿðÿëÿíÿæÿëÿêÿëÿêÿìÿðÿíÿîÿìÿñÿìÿîÿõÿõÿöÿúÿýÿúÿúÿôÿúÿôÿûÿùÿòÿùÿûÿúÿûÿ   üÿýÿþÿüÿþÿøÿôÿøÿ÷ÿõÿùÿöÿøÿöÿ÷ÿöÿóÿñÿìÿïÿçÿõÿúÿôÿìÿíÿéÿìÿñÿðÿóÿêÿìÿâÿíÿõÿðÿñÿíÿåÿáÿíÿîÿéÿâÿçÿãÿáÿæÿæÿìÿàÿÞÿÛÿãÿÜÿãÿ×ÿáÿÕÿÞÿÚÿãÿÚÿÞÿáÿßÿäÿâÿæÿäÿàÿîÿçÿåÿãÿÜÿéÿóÿêÿÚÿÝÿÙÿÙÿÜÿßÿÙÿßÿÔÿ×ÿÒÿÔÿÓÿÑÿÔÿÓÿÑÿÓÿÐÿÔÿÎÿÏÿÑÿâÿÛÿÓÿÕÿÒÿØÿÒÿÔÿÕÿÐÿÐÿÎÿÏÿÍÿÊÿÍÿÉÿÌÿÍÿÓÿÌÿÏÿÌÿÍÿËÿÅÿËÿÃÿÈÿÏÿËÿÇÿÁÿÄÿ»ÿ¿ÿ¾ÿÅÿ¼ÿÂÿ»ÿÀÿ½ÿÄÿ½ÿÇÿÂÿ»ÿ¼ÿ¼ÿÁÿÁÿÅÿÊÿÀÿ¾ÿ¼ÿºÿ´ÿºÿÍÿÅÿ»ÿ¾ÿ»ÿµÿ¶ÿºÿµÿ´ÿ·ÿ´ÿ´ÿ¯ÿ³ÿ²ÿ³ÿ¯ÿ±ÿ»ÿ¯ÿ¸ÿ®ÿ´ÿ¬ÿ²ÿ¬ÿ³ÿ²ÿ³ÿ³ÿ³ÿ¼ÿ»ÿ¸ÿ¾ÿ·ÿ±ÿµÿ®ÿ²ÿ¿ÿÂÿµÿºÿ²ÿ¯ÿ¯ÿ´ÿ¯ÿ±ÿ¯ÿ°ÿ°ÿªÿ¬ÿ¨ÿªÿ¨ÿ¡ÿ¢ÿ£ÿÿ¥ÿžÿŸÿ ÿ¢ÿ¨ÿ¥ÿ£ÿ¥ÿŸÿ©ÿ¡ÿ¤ÿ¡ÿ£ÿ´ÿ°ÿ¨ÿ¡ÿŸÿ ÿœÿ™ÿ™ÿ‘ÿ–ÿ“ÿ“ÿŽÿ“ÿŠÿ•ÿˆÿ‘ÿÿŒÿ‹ÿ‰ÿ–ÿÿˆÿ‰ÿ…ÿ†ÿˆÿ‚ÿ†ÿ~ÿ…ÿ|ÿ€ÿwÿÿŒÿŽÿ†ÿ~ÿzÿxÿuÿ{ÿxÿwÿoÿwÿtÿtÿqÿwÿrÿsÿsÿvÿnÿrÿnÿwÿoÿuÿsÿrÿsÿmÿrÿjÿqÿlÿpÿhÿjÿrÿnÿjÿqÿwÿgÿpÿeÿhÿeÿhÿoÿjÿfÿcÿgÿiÿeÿfÿeÿpÿgÿkÿdÿhÿbÿfÿhÿgÿdÿgÿhÿjÿjÿhÿfÿaÿeÿeÿ_ÿfÿdÿaÿgÿeÿqÿpÿoÿkÿlÿrÿnÿuÿlÿrÿmÿvÿsÿtÿlÿvÿ~ÿrÿxÿwÿrÿwÿwÿuÿrÿxÿpÿtÿqÿ|ÿtÿsÿqÿpÿqÿqÿvÿtÿpÿwÿqÿyÿnÿ|ÿzÿwÿrÿwÿuÿsÿvÿ~ÿyÿzÿ„ÿÿ„ÿ{ÿ‚ÿƒÿ}ÿ…ÿxÿ‚ÿ‡ÿÿ•ÿ‹ÿŒÿˆÿˆÿ‡ÿˆÿŠÿƒÿ‰ÿ‹ÿŠÿŒÿŠÿ‹ÿŒÿ‰ÿˆÿ‹ÿƒÿ‘ÿÿÿ‰ÿŠÿˆÿ‹ÿ„ÿŠÿˆÿÿ†ÿÿ‰ÿÿ•ÿ—ÿ‘ÿ”ÿÿ•ÿ“ÿ•ÿ”ÿ‘ÿ‘ÿ“ÿ›ÿ”ÿ“ÿ“ÿ•ÿ–ÿÿ–ÿ”ÿ—ÿ”ÿšÿ—ÿ–ÿ˜ÿ˜ÿšÿšÿÿžÿ™ÿ¡ÿŸÿ¢ÿ¡ÿ›ÿ›ÿ¨ÿžÿ«ÿ ÿ¡ÿ¡ÿ£ÿ›ÿ™ÿ£ÿ¡ÿŸÿ–ÿ£ÿ›ÿœÿ”ÿœÿ ÿ’ÿ›ÿ”ÿ—ÿ•ÿ’ÿŽÿ–ÿ’ÿ“ÿÿžÿšÿšÿ—ÿ•ÿ”ÿ”ÿ–ÿ—ÿˆÿ‹ÿ…ÿ‡ÿ€ÿ‚ÿ~ÿ†ÿ|ÿ}ÿ}ÿ}ÿ~ÿ‚ÿ‚ÿ‚ÿ‚ÿÿ…ÿÿ~ÿÿ{ÿ{ÿ{ÿ{ÿuÿ{ÿ}ÿ~ÿƒÿ€ÿ‡ÿÿ€ÿ€ÿŒÿ‰ÿ‹ÿƒÿ…ÿ‡ÿ†ÿƒÿ…ÿ‚ÿˆÿ|ÿÿ’ÿ†ÿ…ÿÿƒÿzÿÿwÿ}ÿxÿ|ÿ{ÿƒÿÿ™ÿÿ„ÿ~ÿwÿxÿsÿlÿmÿhÿaÿRÿEÿ@ÿ2ÿÿÿçþÑþ°þþ]þþçý¸ýaýÎü ü5ûiúáù’ù^ùùgøÏ÷Ë÷ÃøhúüÁý7ÿã>ž{ètîZ:±Þu.îÀ“ÿNþký¥üüüû=ü¯ü¼ü—ü½ü÷üƒýPþ=ÿèÍ™)|¾í!CJ–<½Ù¨…ÿiþRýCüTû—úµùÍøý÷0÷Qöºô{ó‰óØô£öý÷,ù7úTûüýêþ~É¡}®;5-ö|Dhþ€õ?ïêí7ñ ò.òèò¦òŒó9öYùœûüß¼ ¹ „ýzNpeì¤'þýÛû÷­ñùõlù@ûrøú÷ýúCû1ú¢ùù£ú+üýürú2þ´Ø’ȵêß@<d_…ØÌÿþTüûüíýuþUý;ülü%ýÙýiýòý‘d· Û @ { AuF(]xûŒ÷‡õô6òð0ïäî™íÒëmìöí»ï5ñ'òÕóvõˆøëú/û•ûdýNÿMíÿ×ÿg£k˜Ré ]þ¸ü«úèù™ú-û~ûZûšú¡úëú û[ü9þøã{þÜ Q % ñ"<ñ(¤uýƒù÷ööTõÊôHö ø=ù0ù3ù&úÓûÊýßþ ÿ»2¢RQFþÞüºû¯ú«ùªø±÷öûôÝó>óƒòëñ©ò–ô½ö,ørù^útû{ýk‰³èO ¤ q ¶ Ç ‡ Ç A s  Ù "  ÝEgœ–&»ÅÿžýàüšþEÿÚýZüÍüGþLþ”ýÏýþ<þAþµþÌþ¯þšþ7ÿsÿ;ÿÿ$ÿÍþgþrþ‰þ þ¥ý`ýÈü†ûnúWú”ùCø¾ö9õ›ôDôkôûóQó”ó²ôÜõN÷ ø:ø‚øùýù~ú9úÍùÊøCø¦øWùHù•ø÷÷Ê÷©÷@÷[÷Eø˜ùÅúÆûýþþmYû{†‚Ýë#„ª„T^ê:¶^s¾ÿuÿ‚ÿ8†>æO! ÷ز…lŒzŠ”''Ó]bÿýtüÄü€ýý ü¤ûÏû²û«ûjümýùý'þ•þéþµÿï)ß3fVNš›xóŽßIðÿ‹ÿ>ÿóþ7ÿ/K 'ÁË(=ÃHüÏ—wY¬±mÛ‹—©²ÿÿSÿþLþEþëýþ{þëþbþfýCý:ý.ýžý/þÙþ%ÿFÿ=ÿ0ÿÌÿïÿ£ÿ8ÉVNdõ½½o‰ô¡æLÜXô”gBâ>Oµÿ¥ÿNÿ«þ"ÿlþk‡W Èú1 ‚óÄp0&ÿ®þÄþ—þïýQýGýý´ütüžü˜üãüWý±þmòJº"¹Úù¯‘oÝt2vòƆ!zÿñÿ†¿ÿÃþ¯þÂÿóPU·'æ2ml"QâãY6zgÿ¡ýèûMûœûüÂüœýÒýÐýØýþËý°ý1þõþŒÿQÿYþÅýEþPÿžÿSÿrÿÓÿßÿ2ÿ¡þÿÌ|"<àÿwÿ¥ÿšVš¤ÿgÿ¸ÿúÿ±ÿ .«}Öî7vŸ,Ø/ÇÿÞþÙþkÿPÕô–PÚpÅWC …dÂWÂr°Ê–ÞNP@/k™»B+ò&ð„<¢Tƒ›>U ô“\DGÿÕþUþ½ý•ý7ý»ü|ü]ýaþ¦þÿH;·^ÂC[ÞÈÒF¬ÿãüUûmúú²ù—ùnùÒù¯ú¨û>ü ýyþ3p—cØöÒž^cö6ÿ‘þýý@ýõüºülüŒüïüëýÅþøþ»þ*þþ¾þÿÿðQLÉç<¿ÉNÅ ºÿÀÿÿþ8ý?ýþÐþ9ÿVÿ!ÿÙþÿfÿðÿ%«ÿ€ÿƒÿâÿd”¤yhˆ;‘ÿÙþ[þ2þ±þ¢ÿ²ÿÈÿ¢<XÓòµC7œ¸šÙùo—’“†ÿ¤þ(þÑýãýVþéþ%ÿ3ÿ,ÿ]ÿŽÿ[µð ÈJeyÙ˜A…ÿsþ3ýƒûúÉù*ú¦ú¯úû¹û ü-üÑüþ>ÿÏÿhÝìõòšúÿZÿïþ‰þ8þ8þÿýlýýfýËýíýÏýëý4þ¦þGÿ„_Õ*–²ž.æ¿"{s‹ÏœŒýˆ¨0|>±T¯UØ0 •]ÈŽß¼l>d…|õƒâÿuÿÀÿ3ÅÿÄþFþ*þíý=ý_üÃû¥û,üôüýíüþüçü ýRý¹ý ýPý½ýÛþC`‘Ø}ú—.éÕ½“ÿ×þ_ÿFÿßþ´þ\þ8þ¬þ[Ó `{œ-ÜeÀAVcWÑz(fP~Õÿ½ÿÕÿÂÿSÿºþ0þcþ«þ0þ´ý›ý8þêþiÿØÿƒÿÌþrþÉþåÿ¯Ïo/<X3åÿlÿöþˆþêþáÿÁá-šÿ‹ÿªÿáÿ#£ì=‘è9!Ñ„­oåú+€Ÿ™_)ÞwFÆûªÖ i)'Òß VGxÎÿ¨ «€¬ˆ}QÇûÿ™ÿ¤ÿ/¥9žÿ#ÿ ÿüþÖþÚþÂþþžþ÷þÏÿnA¢ÿÿeÿÿ^ÿÈÿïÿêÿ]hõGàÿ~ÿÿÿ]ÿ˜ÿ=ÿ¨þ£þÿ¦ÿøÿÒÿVÿÓþ­þ"ÿûÿèšÝÀ‘z0É“ÿÃÿ;mÒÆÿµþ þþ…þàþ ÿ;ÿ›ÿøÿÉÿ-ÿßþÿºÿ‰¡!D<=S%DÿÿþDÿÿ¹ÿŠß èÿ5ÿ·þsþ›þYÿˆ•:»õ»þ(©¸8Òtguô.W¹viƒ›¢±Â³aàÿ+ÿÒþèþLÿüÿ©“ª…<:Ÿ‘9Bä󋽯ÿóþâþíþoþÇýŒý#þÿ¿ÿ¼ÿ^ÿúþÿãÿ÷Íç~,‹ŒJLøìýR<§öÿÝÿ÷ÿ£ÿáþþéýþûýþ'þ0þþúýÎý­ýýŠý±ý,þÈþ÷þÿ@ÿ©ÿ¾ÿAÿ·þHþåýËýAþ(ÿ~ÿÿxþ*þcþƒþCþ¤ýùüü&üÐûÅûÇû}ûûû˜û8üŸüÅüÀü™üüýÞýtþsþ?þCþ›þãþÿþÅþXþþÆýeýæü§ü}üüÖûüüÆü¿ü¥üŒü±ü ýåý´þzÿãÿEþ !ébŽŽy‡Ÿc ùC†1WÌŒ”ŸqñÖ[¹¹lü×ú*|߯-CË­§Û)1 Q˜wìælÀ¤YŽz»sMúZ|¬í H Í  ô ú Ô y øîù÷\<@½ÙÁÅáXGS!iÿ¿þgþþSý7ü\ûüúû8û(ûåú]úÚùù7ùœø{÷$öâô·ó§òºññºðsðÓïÈî¶í¸ììëWëë]ë×ëcìíuíîLî6î?îÈîÅïüðSò–óÉôÊõ°ö€÷/øìøqùãùUúÝúlû"üæücý}ý{ýuý´ý4þfþyþÄþ`ÿm”hÜPÕgéC£GÿˆÑ²8– ±Çù!P²MÙ2 þY±<dQp ] ( ¯  F  2 `  } á Ý ÚSEþÍ’ç¸%åQåÈ®Œv«fí^šf©N… :>àÿ‚ü‹øtôsñ”ïGîƒíì¾ëöêÊéÇè(è¡çëæ`æ²æ¶çéêïêSìÄí£î¶îºîfï ðªðLñ«ñëñ òòò ò3ñÀïîµíùì1ìJëÞêë&ë:ëDëë êÕécébéºégêcëÆì…îöïáðšñµòô'õÿõcö÷øù ûwüIý\ý2ý ýBý”ý¿ýÈýþ¤þÿJÿQÿÿ‹þJþnþ'ÿ:†6 ø‰¹¥YÚ?@ ùš÷ÏÅbÐ;8 ã ² kÀÒqÔ?wÈ„šFÜ{gPÓ¹ë Ö#['ƒ+w/Æ2ø4Ô4ä1å,`'ç!ÑýÁÿ ò ûûüvöïèKãàßüÝÝiÝÿÞ±àAá½ßñÛðÖÓMÓ²Õ Ù³Ýìáç!ì°ïñ/ñþð$ñ.ò ôVö¢øú`üjþKjÿtþ¿ýqýðýSÿÿ˘ ¾ •Íb   ‘ é < ³ Å —¨ \ à|ý=øfóïRë%èÿå.ä2â·ß¯Ü Ù1Õ8ÒçЋÑcÓšÕØÝÚ¦ÝMàjâFäúåxç¶é;íøñèöû¤þÍC}µ†‰€w `= ð Z , J "®ll"Í÷ ò MJSáLNP!Š‚ ý!#B#è"V""ó!""ù!Š"‚#D$$ö"‹!x ¸L¯q !„!g!.!«£) ø?ýý#ú«öóõï’ìËèªä4à‚ÜÚ‰ØP×bÖ,ÖœÖ××úÖ™Ö¸Õ Õ"×2ÚýݪáÞå§êtï˜óáö¢ùü{þ}#in d Ól$¼nö )“DÎ7̸X/44ñȱ ÿ õ ® s Å™âßÿ}üÇøõÌñÁîmëè–ä&áUÝBÙ$ÕÑ—Î.ÌNÊÉlÈpÈ+ÉnÊbÌ ÎïжÓ=×nÛ¿ß7ä é9îó´øfý“+8 º í{¥ MaÞ Õ¼Ô"yå‡^:*× «   ´ ½87&öF « ["=#m#@#F#Ä#†$^%æ%Ç%Þ%ú%œ%R$¤!7;q!… i…LhûöVðîê×åÜá9ßoÝ\ÜûÛ9ܨÜïÜ(Ý„ÝÞÝ7Þ£ÞPß àÎáæä“è1ìMïøñXôˆö¸øçúËüiþ:LeÚÁ.sû¯    g : M  fK"޶  À ’ ¯ Ç û ù ¸  D A   Ñ Gÿ$ý|û«ù÷õUòØïzí@ë%éçåYãßá~àßÜÝÜÜ=ÜÓÛiÛ#ÛùÚ4Û4ÜÕÝÝßâL䣿þèqëÝíEðŽòôôj÷"ú¦üßþ!s¯­[ p ú F ˜  ‚ Ü  ] … Á à ý *V ýxá‹c{¼aÕhV, –"Ã$&ü'ò(s)x)í($(y'€&P%œ#!ù ò‚t F6Týwø”óï–ê æâSÞÅÚŽ×ÕzÓØÒ Ó²ÓÚÔ˜Ö‘ØéÚlÝÓßEâåPèÖë\ï´òÐõíøühÿVÊΜ% r { X · }ÃÁdË  8 ¨ (  Œ f \ R : .  ÷ º {  ~:ò¾mé\˜†2´ Jþœüøú>ùU÷Iõóàð¿î´ì¹êçèEç¿åä ããâ^â"â:âµâ^ãäýäñåÛæóçié ëèìáî ñTóõß÷÷ùÚû}ýÓþ)@° rà_Æ876g¤á/Çt­5 Á n \ ­ \°2ñÖùYíŽ3"—$k&~'î'ô'ø'í'Æ'‡'ï&í%U$h"ÕÒçå ¿ƒÿ{úÎõrñ{í£é²åSáÝ1ÙPÖWÔOÓ#Ó¦ÓŽÔÒÕ*טØÚ¾ÛÐÝhànã›æÎé+íÅð”ô`øüÿ– › ‚  “=þSoJò‹/ãŽê~3ê ’ ó û Ó ¶ ¨§×HËD|bß 9þhü¥úáø ÷+õ^ó·ñð„î í¸ëhê%éÏçwæEåmäýãûã9ä¶äFåæç è(éêì¶í}ïVñ#óåôÏöÙøû2ý/ÿ¥üݰp+Î"  É^ûhÄ‚$ãÈÇã6È c°} ¯ £ ‡„—½¶G­³!S#”$g%%&&r&¹%t$Ù"à tFNër% âoÄüè÷cówïùë…èÛä%á×ÝÛñØo×mÖòÕÖêÖ_Ø+ÚÜÞ~à.ã3æFébìyï—ò°õìø#üOÿ¤·yÛ ( ^ uOè4M³+ƒá < Á \  h ^ p _  ² E øvölºäÆb¼ ÿ"ýóú¥ø_ö1ôòçïúíDìÏêéˆèçSæTå¥äwä©ä"åºåŠæ¬çélêÌëíZîåïæñôdö‰øàúNýàÿDr0ªÜß Ï ] »  w Æ Ø Œ  R a _ qy“Ñ.¯‚’Ù+sÕÚ µ ‚ ] KZiK-\=Ü÷ ‰ Û–®~ `_i Xa™ÿ°ûœ÷Œóåï©ìºé#çáä¯â¼àßýÝÝLÜàÛÜ?Ý(ß—áNä&çêÿìçïàò«õUøìúýsŒn| ˜ w  y u b - ö   ] í M t di±¨¢Ïk¯Úöûåœ0—ì;KP3ÿãý[üÄú(ùz÷Ãõ%ôaò~ð­îùìQë¿é^è'çNæãåÕåæxæçïçéêJìDî_ðŸòõ¨÷UúóüÿþkÍ 8  •ê Ä(Æ5ÖE{Ò  W Œ ¬ Ç p©^01>‘ç]ºa / J”†q;ó· 8 B8r÷ÿ®ýaûù›öíó.ñœîì´ésç‹åägã7ã`ããÅãä™äåçé^ë;îšñJõùbüKÿÌÙ¡DÎ  3 o Ÿ¹ˆòË,)Ä 3 t ¦œaó©Uÿûý°üŠûžúëùzùEù>ù\ù†ù¸ùñùûùÑù°ù•ù·ùåùBúúÙú,û`û^ûû6úùë÷ÑöÉõËôÕóúòNòÔñ’ñbñ@ññ:ñbñÈñKò÷òîó õö øþùüþQ‚ºí: ‘ Í È¥RÎ!0ã8vŒm<dÆ4/ï´AËJ ú ¾ º ÷pý±WQÄ$‚ÿzý(üþúêùÇø«÷|öõóò}ðïºíŽìë´êêUé™èÞç:ç—æOæsæç&è¬éˆë®íÛïò ôöøõùèûâýýÿuáL ˜ ³ |ô º'¬.Ÿßä¥J ¼  ]œÚø<–ÿþjü»úùh÷ÐõcôóàñÙððÉïÜïð1ðpð²ðþð9ññÅñò€òóëó¹ô”õcöH÷øáøŒù4úäú“û7üñüÊýÆþÂÿÄÏçàB¤) à ¾ ìZ®CvZÓû C!j!g!P!!î ` “/J ¦òØy J!òýŠúúöró+ðí%êxçåãÁá÷à‹àVà+à8àˆà*áòáÜâÚã 忆èÊêLíÉïAò‰ô§ö§øiúûûPýþëÿ7‹»Ä{™uÊW¸1 Å A § ó & X ~ ¬ Ï ý P ´ + – Û ã ¬ Q Ä ø ñ Á nòpé\¾ÿ=ýZûiùb÷hõ‰óÏñBðÝî¦í¨ìÍëë›êEê!êBê±êeëWìzíËîwð4òôçõ¼÷‚ùTûýðþ³‹@çsÝþ ø Ñ r Ó   ½ v 3 à 2 ´  L Š ÎêWÏQÙ€"Ãy<ô«ƒpŒ”ÎþLj`Oà°g9Å›ÿÿ|þáýPý¿üü¢û!û¸úgúúÎùùBùùñøÌø¾øÆøúøYù·ù;ú¢úû€ûõû[üËü@ý³ý.þ´þZÿ÷ÿŽf³ì#çηŒY¡+µÿ,ÿ™þþýxýóü~üüÉûnûû¿úgúúÉù‰ùVù9ù8ùQù|ùµùúUúúíú>û£ûü‘üý¡ý8þëþÀÿ”l<Ó¸£˜†wj } ‰ f G õ ¯uQ×B ãŸýä¤`kHáj³ E ¹ ãòÖïôÿÛý¸û•ù—÷Ãõ)ô¬òñnïÞí‰ìlë†êÆé@éñèüèJéÅéRêÊê<ëÌënì-í îóîùïñ{òóó‡õ÷ƒøÓù'ûoü¤ýÐþîÿþDjƒQÞ‘ ; Ñ N Ì @ ¯ ÿ : 6  ß ˜ @ Ò n ú ‰ ¢  Z†ž©¾ÅÔÓäêÿÿ#þCýZü|û§úÔùíø#øY÷­ö ö›õTõõÎô‘ôjô\ôcôô«ôòôSõ¾õSöûö°÷Xø ùÌù•ú^ûüäü­ý…þ‰ÿ}e3ñ‹ rÎ6–ß!Lfh`EØ™[ßb .ºIØTõ‘@á‚)¾ÿQÿãþ¦þTþþ¾ýŽýhýKýýûüËü”üLüüÿûèûÒûµû·ûÈûÜûñûüCü>üDüaüŒü“ü¯üÑüüüLý‡ýïýHþwþœþÎþ%ÿbÿ®ÿèÿNä8L?Sq‹‹~x‹––†dÉ–læÿ°ÿŠÿxÿYÿVÿ7ÿÿùþãþÂþ¸þ·þ¹þ¶þÎþõþ$ÿJÿSÿ‡ÿÿÀÿV’Ý1y®ñ/\„µÞ 9a“¿ãÿ*3AB8;=1.)*(@;DIFSmvs~njPÐz#ÇZØ[ÑE¬ÿÿ\þ–ýÂüëûû`ú—ùßø4ø™÷÷ö5ö×õõgõaõZõhõ|õ­õåõ.ö”ö÷¨÷3øÇøsùúÍú|û*üËümý þ þ)ÿ¢ÿ k® 7Up€ ²ÏÏßÑ­™“‹‹Ž˜±è2}ÚM°'¸W×k$ ëÓ ¿ ª {  s ¨ ¹ © „ l Q Ž  ‰ ¶ ¬ ²³Ÿ|ynDðÿãþÔý¸ü‹û–úºùùjøü÷´÷c÷÷çöÞöÓöÁöÅöÛöîö÷(÷]÷ˆ÷º÷ð÷2øsøŸø®øÁøÉøÊøÂøÑøõøðøþøþøù'ùKùoù²ùöùMú¶ú>û¼û<üÄüWýýý³þmÿ6˧[.ê˜9ÕYÎ% ` ‚ ‹ | e - íš3Ä>œèPyÉï!YÿŽþâý6ýºü+ü½ûKûûú¶ú‘úiúGúCúAú?ú\úiú’ú»úíú/ûoû´ûïûü6üSünüüü‚üsüiüXü=ü-üüÿûíûäûÖûÉû¿ûÇûËûÛûïû üGüƒüÍü3ý¡ýþ—þ.ÿÄÿ^ú–8Õj}óZª÷!=TUDáˆ'ÀH¾ ” yùaÑCÄÿPÿîþþ3þëýžýbý=ýýñüçüäüðüý/ýXý„ý’ý°ýÆýàýæýöý þþ$þ*þ2þ#þþüýÖýÊý¶ý‘ýuý]ý:ý"ý ýèüËü¸üªüªüÄüÙüùüýBývý·ýþýFþ˜þíþTÿ¾ÿuÈ,qÁZ”×%Pdfp^Q= üЮxKܤ…LïÕ¯§™‰”–›»åìįXþ©‹µÿ76þáï-O/Ós-ÿúõŠ ­ÿ‰ÿjÿ ÿþ&þÕý­ý§ýmý÷ü‹üoü{üvüRüüÒûðû2üküyüzü~ü¯üõü;ýxý±ýåý.þqþÆþÿGÿiÿ—ÿÛÿ/r¾ç=c|u´ÖÞäáê//=XQZWT^^lq~~~~jVNF<6äÀh@éÂŽ`7Æÿ—ÿbÿDÿ#ÿñþÈþ§þþbþRþ/þ$þþþþþþþ&þ0þEþUþsþ•þ¬þËþäþÿ"ÿ>ÿdÿ~ÿÿ»ÿÚÿöÿ'/0/8>=C>;<9740353.%#&+7FM]dluz„’“ž™ž“„€yn]WI>/ òÿãÿÞÿÏÿÆÿ¶ÿ¬ÿ¦ÿ¢ÿ ÿÿ¡ÿ ÿ¬ÿ´ÿÊÿÌÿÐÿØÿãÿôÿ 3E^p‰˜²ÃÇáåôóïóêáÛÖÉǰ­‡i[@8  ñÿóÿíÿúÿ4ERZetx‚xrgZP7$ åÿÌÿªÿÿbÿ?ÿ ÿýþÜþ¿þ¢þ„þqþ[þ>þ þþþþþþþ!þ)þ?þLþ[þþ¤þÌþäþ÷þÿ7ÿ\ÿ~ÿ«ÿ¿ÿåÿ"8Sd€Š¤¸ÃÉÎÞèú (=Tct‰¢¸ÖìBWj}«¸ÒØèìùüûîâˬ˜ƒqP1Ô¥ˆSñÆ¡pL#ÿÿÕÿ¶ÿ—ÿwÿYÿFÿ3ÿ"ÿÿÿ÷þèþìþåþÞþÔþÕþÛþÇþÌþÇþÆþÆþÄþ¸þ¨þ¨þ–þþtþeþTþGþ0þ&þþ þøýèýçýÑýÐýÈýÈý¾ýÃý¼ýÆýÉý×ýÛýíýüýþ+þ7þJþcþ}þšþ²þ×þøþÿ-ÿLÿmÿ‘ÿ«ÿÏÿêÿ0Ht–±Éç/On‘¯Ôñ*Hb‚ŸºÛð#I`q}•¡±¶¼½»¿¹²¡”€qY<"êÅ©…]4付fHóÌž€X9öÿÎÿ¼ÿ•ÿ{ÿ[ÿ@ÿ%ÿÿøþÞþËþµþ£þ‰þxþlþVþJþ4þ&þþ þþóýïýåýëýèýçýÚýÝýÕýÕýâýãýòýýý þþþ4þ:þQþ\þrþ~þ’þþ¿þÊþ×þïþøþÿ ÿ&ÿ.ÿGÿPÿSÿaÿ`ÿhÿnÿzÿ|ÿ‚ÿÿ–ÿ™ÿ­ÿ»ÿÊÿÛÿðÿ(/LTk~’§ÀÕçû"2<Q\jnu…‰’šž˜£§§¦£¤›˜˜xzjh_ZOJ=.'  ûõìîÛ×ÌÌÃÀ¸±¬¤šˆwmjWQG6' ñÿîÿâÿßÿÕÿÑÿÍÿÚÿÃÿ»ÿµÿ´ÿ¥ÿ¥ÿ¤ÿ˜ÿ”ÿ‘ÿˆÿˆÿ‚ÿyÿlÿjÿhÿXÿRÿNÿBÿ4ÿ(ÿ$ÿÿÿ ÿÿÿõþ÷þõþêþêþîþåþãþßþèþíþõþþþÿÿ'ÿ2ÿEÿHÿ]ÿlÿÿŽÿÿ´ÿÍÿÝÿñÿ1<Lk{ޤ¶Ôàîý#:ATXjmx}‚„”¡¤§¨­¯¼¿ÁÅÈÉÎÆÉÅÈÃÄ´¶¯¨¤”ƒudU;,í×ç›xmJD$÷ÿÞÿßÿÊÿÂÿ³ÿ«ÿÿ™ÿÿ’ÿˆÿÿÿ“ÿ‘ÿ—ÿŸÿŸÿ®ÿ²ÿ®ÿ¶ÿµÿÉÿÉÿÆÿÈÿÍÿÐÿÓÿÎÿÏÿÏÿÊÿÇÿÄÿÄÿÊÿÂÿ¾ÿ»ÿ·ÿ°ÿ«ÿ®ÿµÿµÿ²ÿ´ÿ³ÿ¼ÿºÿÂÿÃÿÏÿÔÿÙÿãÿòÿ÷ÿýÿ *'44;JJSS`Wcaeoosw~{ƒ‹Ž–›¤«³ÃÊÞêý&8>JSihqv}„„‚†…vqi`YOM?/&ìéÚÐÈ·±¬­¡¨›œ–™™“‘yvribZVOD<1/" óÿïÿîÿßÿßÿÕÿßÿÓÿÎÿÍÿÇÿÅÿÇÿÆÿÄÿÅÿÆÿÈÿÌÿÍÿÌÿÓÿÖÿÜÿÝÿÞÿåÿæÿéÿçÿèÿóÿéÿòÿëÿíÿïÿóÿíÿìÿíÿïÿêÿðÿìÿòÿñÿ÷ÿùÿ÷ÿúÿõÿúÿøÿþÿ &)9AFQZfmx‚‹›©±»¿ÈÐÜßãéêïîóîôóöø÷ùýþúüú    úñìæßÓʵ±Ÿ–{k^TOJ<+ ùÿðÿæÿâÿÞÿÝÿÛÿÔÿÍÿÈÿÌÿÑÿÊÿÏÿÔÿÖÿÏÿÖÿÖÿÔÿØÿØÿßÿÜÿÖÿÝÿáÿãÿØÿÖÿÕÿÕÿÑÿÐÿÄÿÐÿÄÿÈÿÇÿÑÿÆÿÎÿÈÿØÿÕÿ×ÿÕÿäÿñÿíÿõÿ÷ÿûÿ",0@BKO\^bgipsv{{€‚~}{usonnqmsrppkgphljjmuty…†‰Ž‘—’œ“œ— –™’އ‡ƒ…‰|{vwjldd][YZZ[X_XYTVST\^[SVJOLSGE>>;5/2,/'$'ûÿûÿùÿ üÿÿÿýÿþÿ   !"%),462=>AV_\djku{…ˆš— ¤ª¬«¬±»º¾ÆÃøº´²¶ª­©¤§§£¦¥¢¡ œ›™–‘”ŒŽ‡…}|sorfigW]PSDLAUPB@35291,.2,-,-4/1-6-4,:9JNB:;46.=9.1/<0/-8,+$&../5<;>>OGMIKOJROOTQVNVJTRSSR^[[ZceYb^bhaadkghdelinnllnjolughikjhmm|kljfkggkdab]\]WWNONGHAC;7C?:',&(" ' " *2& "  ÿÿûÿúÿüÿ  $'$"-"&%#)%+-6<35//*100187<79@<CCCIGKLSSOOMMFLFBBEBD9D?C:?8<4;8736./)+''" "   üÿúÿôÿëÿïÿïÿíÿìÿëÿéÿéÿîÿëÿæÿêÿéÿéÿîÿéÿñÿöÿôÿÿÿõÿ#*!!$!#(.)" "$'=881;?4=:;>2>3;/7//*.,( !    )))'&,*.235DE:>9E@A<9>9?27203+/,+"'%!&!     "#'**38081<=DFK=@A9?99=5=;97,-)&(# ÿÿ  # (!!!#%'*1(.#/$+.9+4,2-8656282565195:166=430-,(*'%$    '$ "*#($ "            ûÿùÿûÿðÿöÿñÿïÿðÿëÿéÿëÿñÿ÷ÿøÿýÿ #&þÿñÿóÿëÿìÿíÿëÿóÿõÿ÷ÿúÿúÿüÿüÿÿÿ     ÿÿ   ÷ÿúÿòÿõÿïÿðÿÿÿðÿôÿîÿïÿìÿåÿêÿßÿêÿäÿãÿçÿäÿêÿèÿëÿïÿîÿíÿçÿéÿíÿëÿòÿòÿøÿøÿûÿ øÿ÷ÿùÿ÷ÿóÿùÿøÿýÿùÿüÿúÿ   ÷ÿýÿûÿþÿöÿôÿñÿêÿëÿëÿìÿîÿëÿìÿéÿëÿäÿÝÿßÿÕÿßÿÔÿÖÿÔÿÜÿçÿßÿÚÿØÿÔÿ×ÿÏÿÖÿ×ÿ×ÿÒÿÙÿ×ÿÜÿÚÿâÿÝÿãÿÜÿâÿáÿãÿæÿèÿíÿìÿïÿîÿóÿøÿûÿûÿýÿþÿùÿþÿûÿþÿûÿÿÿõÿûÿ÷ÿÿÿùÿýÿøÿúÿöÿûÿûÿ þÿÿÿøÿõÿîÿíÿðÿ÷ÿëÿêÿãÿèÿåÿäÿâÿíÿÞÿäÿÝÿáÿÝÿÛÿÙÿØÿÚÿÜÿØÿáÿ×ÿÚÿØÿáÿ×ÿÞÿßÿàÿàÿâÿãÿçÿðÿñÿåÿéÿêÿêÿåÿçÿçÿäÿßÿÜÿ×ÿÔÿÓÿÓÿÎÿÍÿÓÿÐÿÆÿÇÿÁÿ¿ÿºÿ²ÿ°ÿ£ÿ£ÿšÿ–ÿ‘ÿŒÿ‡ÿ€ÿ€ÿuÿxÿoÿpÿuÿsÿqÿzÿxÿÿ€ÿ‡ÿ„ÿ‰ÿ‹ÿŽÿ‡ÿ…ÿÿ…ÿ~ÿÿ~ÿŠÿ€ÿzÿyÿ{ÿ|ÿzÿ‰ÿÿ—ÿŸÿ¨ÿ³ÿ²ÿ¼ÿÀÿÅÿÎÿÇÿ×ÿÛÿÕÿÏÿÐÿØÿÒÿËÿËÿÆÿÁÿÆÿÀÿ¾ÿÁÿÊÿÒÿÏÿâÿÛÿßÿÛÿßÿèÿðÿçÿõÿéÿêÿèÿéÿÚÿÔÿÑÿÑÿÀÿÃÿ¼ÿ¿ÿÂÿ½ÿµÿ½ÿ¹ÿ¶ÿ±ÿµÿ®ÿ¶ÿ°ÿ¶ÿ¯ÿ´ÿ½ÿµÿ§ÿ©ÿ—ÿšÿÿÿ‰ÿ’ÿ‰ÿ€ÿ|ÿzÿuÿoÿoÿkÿlÿoÿvÿsÿ{ÿvÿ}ÿ|ÿŠÿÿ{ÿyÿtÿoÿsÿpÿoÿfÿjÿfÿYÿ[ÿRÿRÿRÿZÿZÿWÿ]ÿYÿ`ÿbÿjÿmÿuÿmÿqÿmÿmÿdÿdÿbÿ]ÿbÿaÿeÿeÿhÿkÿvÿuÿ{ÿyÿxÿuÿvÿzÿyÿ|ÿ}ÿ}ÿ{ÿ~ÿxÿtÿpÿnÿqÿ~ÿÿ‚ÿ|ÿ…ÿÿƒÿŒÿ„ÿ€ÿxÿzÿuÿÿ…ÿ…ÿ€ÿ{ÿ‚ÿˆÿŠÿ…ÿ‡ÿ~ÿ{ÿtÿqÿtÿrÿqÿyÿzÿtÿuÿtÿoÿhÿfÿaÿdÿ]ÿiÿaÿeÿhÿfÿkÿfÿfÿfÿbÿgÿeÿfÿeÿpÿrÿwÿmÿ|ÿkÿpÿhÿlÿdÿiÿfÿeÿgÿeÿdÿcÿ]ÿ]ÿbÿnÿdÿ^ÿVÿZÿQÿZÿWÿYÿPÿSÿNÿPÿUÿRÿXÿOÿ\ÿMÿ^ÿXÿaÿ_ÿeÿ_ÿhÿ`ÿ^ÿ_ÿ_ÿkÿ`ÿlÿjÿpÿoÿmÿnÿjÿlÿjÿoÿqÿlÿrÿqÿpÿjÿlÿdÿgÿ^ÿ[ÿSÿRÿSÿUÿWÿRÿJÿRÿIÿLÿGÿIÿEÿLÿ\ÿXÿRÿPÿMÿJÿRÿNÿPÿYÿUÿVÿSÿYÿYÿWÿZÿZÿfÿ[ÿ`ÿ^ÿcÿ_ÿhÿhÿoÿxÿvÿmÿpÿpÿlÿsÿkÿsÿmÿoÿtÿoÿiÿiÿgÿsÿjÿoÿoÿmÿqÿeÿlÿhÿhÿgÿdÿbÿaÿ^ÿ_ÿbÿdÿ_ÿ\ÿ_ÿYÿaÿgÿgÿ^ÿ[ÿZÿXÿ[ÿ\ÿ[ÿWÿ]ÿZÿUÿ\ÿ_ÿdÿVÿZÿ_ÿlÿbÿ\ÿ]ÿ[ÿbÿXÿ[ÿVÿZÿYÿZÿZÿ^ÿkÿ_ÿ^ÿVÿaÿWÿ]ÿXÿ_ÿTÿYÿZÿXÿWÿRÿ`ÿ^ÿ\ÿ]ÿXÿWÿWÿ[ÿRÿ[ÿWÿVÿUÿVÿTÿTÿWÿZÿXÿWÿVÿRÿSÿSÿTÿ\ÿSÿSÿRÿPÿSÿUÿNÿSÿOÿGÿGÿDÿAÿ@ÿEÿGÿGÿEÿJÿFÿIÿEÿEÿ?ÿ<ÿ<ÿ:ÿ<ÿ;ÿ:ÿ9ÿ8ÿ:ÿ4ÿ=ÿ3ÿ=ÿ5ÿ?ÿ5ÿ?ÿ;ÿ=ÿ@ÿAÿEÿAÿBÿ@ÿCÿ?ÿ@ÿGÿ<ÿAÿBÿ@ÿBÿ@ÿ<ÿ@ÿCÿ<ÿ?ÿ:ÿ8ÿ9ÿ?ÿ<ÿ;ÿ5ÿ4ÿ9ÿ1ÿ6ÿ5ÿ;ÿ6ÿ9ÿ8ÿ7ÿ?ÿ9ÿ;ÿ<ÿEÿEÿIÿHÿEÿDÿHÿCÿJÿGÿKÿKÿNÿMÿOÿPÿLÿSÿPÿVÿQÿOÿYÿdÿgÿSÿQÿDÿDÿCÿ<ÿ9ÿ8ÿ;ÿ>ÿ:ÿ8ÿ6ÿ5ÿ-ÿ)ÿ)ÿ#ÿÿÿÿ)ÿ/ÿ/ÿ#ÿÿÿ.ÿ'ÿÿÿÿÿÿ$ÿ"ÿÿÿ ÿÿýþúþýþúþñþéþåþàþÜþÑþÉþÂþÁþºþÃþ¿þ½þ¹þ²þ­þ´þ¤þ®þ¥þ¬þ©þ©þªþ þ¢þ—þ—þšþœþþ¤þ¦þ´þ´þ´þ´þ´þÂþ»þÄþÇþÏþÛþÜþëþüþÿîþóþòþïþ÷þûþüþüþøþûþöþüþéþìþìþåþéþàþãþáþÝþßþåþæþëþôþþþÿÿÿÿÿ#ÿ*ÿ:ÿEÿGÿHÿNÿMÿRÿXÿQÿSÿOÿRÿIÿBÿGÿHÿBÿ9ÿ=ÿ1ÿ>ÿ-ÿ3ÿ-ÿ-ÿ.ÿ4ÿ2ÿAÿCÿAÿOÿKÿXÿTÿdÿkÿxÿyÿ}ÿ~ÿÿuÿzÿoÿnÿqÿfÿ\ÿZÿQÿFÿ=ÿ:ÿ:ÿ;ÿ6ÿ3ÿ/ÿ0ÿ+ÿ#ÿ(ÿ&ÿ%ÿ+ÿ9ÿ5ÿ6ÿGÿRÿ\ÿ^ÿ^ÿ^ÿcÿhÿkÿpÿxÿvÿ~ÿ~ÿ~ÿzÿ„ÿ€ÿ‰ÿ‰ÿ•ÿ˜ÿÿ‘ÿÿ‘ÿŽÿ’ÿŒÿ“ÿ‘ÿÿ”ÿÿ˜ÿ”ÿ˜ÿ«ÿ·ÿ´ÿ³ÿ¶ÿ¸ÿµÿÃÿÄÿÆÿÍÿËÿÐÿÑÿÔÿ×ÿÔÿÕÿÚÿÎÿÚÿËÿÙÿÓÿÓÿËÿÌÿÆÿËÿÙÿÍÿÌÿÇÿÆÿÆÿÄÿÊÿÃÿÄÿÃÿÈÿÆÿÇÿÀÿÂÿ»ÿ·ÿ¼ÿ­ÿ¬ÿÿÿšÿ™ÿ‘ÿŽÿ‹ÿ…ÿ~ÿwÿwÿvÿÿƒÿ‹ÿŽÿ—ÿœÿ ÿ¥ÿ§ÿµÿ¼ÿ»ÿÀÿÅÿËÿÀÿ½ÿºÿ¸ÿ±ÿ¨ÿ¦ÿžÿ ÿ¡ÿ™ÿŽÿŠÿ}ÿ{ÿ~ÿ|ÿ€ÿƒÿ‡ÿ‹ÿŽÿ‘ÿ¡ÿžÿ©ÿ±ÿµÿ·ÿ¿ÿÁÿÂÿÃÿÅÿÇÿÏÿÊÿÅÿÂÿÀÿ³ÿ·ÿ©ÿ§ÿ ÿ ÿ›ÿÿžÿ©ÿŸÿœÿŽÿšÿ‘ÿ˜ÿ”ÿÿœÿ¤ÿ›ÿ§ÿ ÿ¥ÿ›ÿ¥ÿœÿªÿ«ÿ¤ÿ›ÿ—ÿ’ÿ’ÿ“ÿŽÿ‹ÿŽÿ‡ÿ„ÿˆÿ„ÿƒÿ„ÿ„ÿÿ€ÿyÿÿxÿ‡ÿ‹ÿ‡ÿ‹ÿ„ÿˆÿ„ÿ…ÿ„ÿÿŒÿÿŠÿ‘ÿÿšÿšÿÿ”ÿ‹ÿÿŽÿ‡ÿ†ÿƒÿÿ~ÿ}ÿ|ÿÿxÿuÿsÿrÿrÿuÿkÿmÿgÿhÿoÿnÿoÿmÿgÿhÿdÿcÿ`ÿfÿbÿeÿvÿiÿiÿcÿlÿaÿ^ÿYÿZÿUÿQÿQÿKÿSÿBÿHÿDÿDÿ@ÿJÿLÿLÿGÿGÿCÿFÿGÿCÿHÿ>ÿMÿKÿOÿKÿNÿNÿVÿRÿRÿWÿ`ÿVÿ_ÿjÿ\ÿ_ÿYÿYÿ^ÿ_ÿ^ÿ_ÿZÿeÿjÿcÿeÿgÿdÿfÿhÿfÿgÿ`ÿfÿfÿbÿ`ÿcÿ`ÿgÿ[ÿ\ÿ]ÿaÿdÿgÿ^ÿXÿWÿYÿ^ÿTÿUÿYÿTÿ[ÿUÿUÿXÿSÿXÿWÿVÿYÿ_ÿ\ÿcÿcÿZÿbÿaÿaÿbÿgÿsÿmÿlÿhÿeÿoÿlÿmÿiÿiÿkÿfÿjÿeÿeÿiÿ`ÿ`ÿdÿdÿdÿaÿhÿ`ÿnÿcÿhÿfÿcÿgÿnÿlÿeÿeÿeÿbÿkÿoÿeÿeÿaÿgÿdÿaÿ]ÿlÿeÿbÿ`ÿcÿcÿaÿkÿgÿkÿaÿhÿcÿnÿoÿgÿrÿiÿiÿjÿlÿpÿiÿlÿmÿiÿhÿlÿlÿlÿiÿlÿjÿjÿgÿkÿmÿlÿnÿkÿtÿnÿoÿvÿ‚ÿ}ÿÿxÿÿ€ÿ‚ÿˆÿÿ…ÿ‚ÿˆÿŠÿŒÿ‹ÿ“ÿ’ÿ”ÿ˜ÿÿ™ÿ“ÿ™ÿÿ—ÿ•ÿ–ÿšÿ’ÿ™ÿ—ÿ™ÿ”ÿœÿ•ÿ“ÿ¢ÿ¥ÿšÿ•ÿ•ÿÿ“ÿ’ÿÿ”ÿÿ‘ÿÿÿ”ÿŒÿÿŸÿ“ÿ™ÿÿ’ÿ‘ÿ‘ÿÿ”ÿ”ÿ˜ÿ”ÿ”ÿ”ÿÿ›ÿ”ÿ–ÿ”ÿ›ÿ—ÿ§ÿ¨ÿ ÿžÿ›ÿ§ÿœÿ¤ÿ£ÿ¨ÿ¦ÿžÿœÿžÿšÿžÿ¡ÿ¡ÿ‘ÿŒÿ„ÿ~ÿnÿ^ÿ,ÿÞþrþ¦ýGü”û“üãþg­AëÿÿTþ«ü2úZù-ûêþq®¯±-ÿþeýý4ýgþ —o‰ÊSÄþ¶ý3ý|ýþ¨þ=ÿ×ÿuüí×þ½ý'ý:ý¢ýþ¦þÿ»ÿPxTðÿ¦ÿdÿDÿCÿ[ÿ²ÿ3ÒÿÿQþßýßý#þPþ†þ²þþþWÿµÿ+yC²ÿ"ÿæþÿ^ÿ,ÿ+þQü&ú!ùëùXüÿÅ mÿýû¦ú´ûóý6ŽHý%îÿlþHýÆüÍüûüuý‰þçÿ£+®Tÿ½ýýþ‰ÿÙ¨•ÿ³þÂÿq|”ÿîýYþý~Ž’“ÿùþ×þ7þ±ýÂü7ûÚùÌùPûý-þ|þŽþ÷þ›ÿ9ÁÿÁý´ýwþ³þÇýküüûAý6ÿàÿGþ üÇú£úEúúýûqì@÷IüúüCþ3ÿwþý}ýMÿŒ‡æÿ®ÿXÿþ@ühûÈüÿU®<×.týù¥ù¢þŸP²Èÿlÿ@ÿwÿ©ÿWÿºÿé ìð'ÿüüÆûCü§þ¾ÿÙ{dŒÿYþ þÿý/ýÆýË¡¬þÈùÂúâþ£•ý¡ù&úåÃÑ 9üú´üVÊýü¹ûeþR"AÏO‹üQøøvý©Uï7%uãTüÉú›ýRÈ‹øþÝþôhÙº¿ ¾ÿ^ý’ûãüeø:’übü¼©¾þ›ý…ÿU,ÿžþmÿ— íÈþÁüþ÷ÿN`ÿ[ÿi¿Ûa„ÿ[ûøù\ÿ=®4Eýmÿ™nþxÿ°§äýBù úK˜ˆ*rþ®ùHúûýèèM˜ÿBÿïþaüzú)þÓ®ÿR¶íÿtüŸûVþ½ƒ‰ÿÈÿ ÊþÿûêýQsÜý¼üÜüv8ÐUûãø©üð´ ÝüØúYþBÎþPýôþñßß8ÿ`ýCþ ÐÑÿkþtþšÿ‚`_Øgÿ«ù·øiÿ¥ß ϤýÑùâú*ÿꤞà¿ü;ùdùZülÿ#ÁkÿŸüø‰ú~)ŸBÿ¥û†üfÄò99üfþóvûüùøRûùº0þþÇû€þBÌZoýÿ‚•±ýÈù#ÿ3 ,qøu÷‡ÿ‚Ý3û@û\8ŒÐÿú›•Kÿrú[ù1ýÏuñ i Šþeðžì‚ör,N‡§÷_ð÷’f5ÀpèþCü¾ü‚Ýߢúï`îçú« ‘ Aý÷%ôÎø¿ÿÕdÙFrÿOý0þ³;þ~û‡üþjþäþ—Ôï»Õÿçü«ü¦ûjúWü»È4¿iþÆùúrýF¬™Ì¯ÿ¤ûÉú4þêuÿ÷ý6’ìüûúQþUó›Ÿû=ùþ¡êhÿ7z¤¿ÿJüWû`üÞý…ÿQsAý[ü"+mý¤ýþ«„ôÿþLŸæÿëúuù ýÃ)ÈS{Hû õ.ùB š‹ÿšû¾ügÿI5{CÿÈúú6ü–ý¿ý"é© ûœúö÷û$þ&P$ýGÿì°û$óšôlQ ²–øÐñøNÐUåáÿãýªý®1û¼ùWÿž¨ˆþhÿêäôü•øùƒþX"50‘ÿÿÞý»üŽý¼ÿÒ÷åÈ"wúzöú÷ñÿÍsL‘ÿTþôýrÿ&N>ÿü<ý(Dnü˜÷tù÷þž©ý²ý×÷˜w1úúòKõqÇ 1ýZþWíuykû‹øtú¶þ¡«. Ù HáöËò÷þ­ïí¹Ïþ úÞ÷Æú¨ÿ£¼›?ºbû.÷óøÿÜ>ï*ÿœÉ¹b›ýñ÷ôø¬0 ÿ¾ù™ÿ~Â/ûaôŠõ[üÛ â 6Øý4ù×ú ,%ýúôüI3  )ãýžõõ‹ú¬pgz hÃñ=ý?ûþ-ïIÿ³ýºB± þ²û9þ`ÛÿóÿÈ]`þŠüfý¡œ!Ñý©ý)ÿçÿ¬ÿQÿvÿÅL¿ˆPÿ–ÿ®ÿ!Öÿ•ÿeÿ÷ÿÿsÊKù˜^þiø¥÷\þ•ô rŠþlû ÿ±°ÿTûú£ýó¬üŸ'Ðü¥ý6þÿýý×þP×·¸øþ¶ýdý1þo*ÿþûóû•ÿj§ ­Ñÿ õaòçù‰m š3 Rû”õ£ôúâÖkóe÷˜óúZfÏzùŠöúÿ‰@¸ ‹ Ø2ö‡ñJø§” þ 3ýüùY÷§ô õ,ýí£ ´lûŸ÷Ùü¡¬ ¼WG:ü3ý1¯Áÿñùúåþ†$ÿçû0þ_’ Nk`þµpoZýœü‡HL<ÂùÙöBüo™5ù¢ùXf9¥ÿÞþsrLþ?ûYýžþð¯ü÷A÷þtg Ú·þùÚøŠü|ÿ · ž šþþwøÊö>ùáýíŽäü6ùü¢ÐxþQû@þH»ÊG™ËoËüú·û$K òÂþè÷¯÷nþÎ"¬g}|Ðÿÿ€þ«gýÕú‹ýÌ ' gþ?óNðV÷ªà›|› rwþÌú1üK`Dà ÿîÿV§}þ–÷˜ó]÷Lg o€,ÿ¼ù[ü‚Á€Kt;ÿýKûßü0VÿøNô öþ Ëz AôúCùÞþ×9x ÿ‡ýÍýÄÿ`ª0–þûüû¤ür·~ÿ.¾Oÿèü1þéÇ™àû¬úþN\X=±ûSøSú+mþ ¡Òþ^ý9þ¶ÿ32q=ÿþ3þÜþ‰þaþTþrý¾ü þ0[ ÊÿûÝû…¿k¦E‹Eyæþú÷øpû`ÿ Fjì#+ÿÿSÿçÿX:Ž\|ô¦ÿ™ý¬üüÙûÍü&ÿ÷ þÛüÖüýþ}o X àÿÕþ9ÿnþúüªý¢ÿÂ"‹ÿ×ÿ¥˜i_±ýµüÙf€èY¹üÜøWùÒü(y"¹U2üàùAú€ý‚Ì þW²ì]%ÕþüZúÎûAâëa¢¿!ÿ¾üãúíú ýs‹\ÑÍéþTÿ]’™tÿþ»ÿa^HÿXþ²ý8ý7ýÏþq^y*›þþõÿòö j²s¹'¬ †þVüîû|ýÿ=©5oÿÃü&ü÷ýJ?äwáÇ51©؆ýrûû²üÿzO‚þœýÿOî¡l¼is?ÿpûÀúFüBþ &˜RY[½@¿T!:g`þ´þ Z„ÿ9þNýTý­þ$ ÿzÿLh–µFàÎÙE˜ÿˆÿêÿ×ÿ€ÿÒÿ•Fþìü’ýŒÿtãÛNlËÇ‘z¦côTì ÿ=ý.ýòþ¡”ëÿÍÿáþ.þXþêÿá,\Ó¯x/iÝD&'Ðã’ýúûAüåüçýÄÿ/RSç8ýÿU¾›&Ç©¸=ÝÿTþ‰ü0ûyû$ýÍþ)býn©OÿjþhÿÞž•0Ñ­ÿ¤üÿù:ùVûþù˹ʥ Sÿ`ãh>4ÿÂü³û;ûþú üèþÂÇ«`´ÈXÓ£ Q’íQÿþ,ýý×þÏï3 +¦µEJÂêN¿úàéVÛÿ¶þFýýFþAþ±:Âÿ4ÿhÿÒÿÃñÑAepÿý4ü—ý6ûò¥Sá§‹Šd>% $T§¿òÑ$nÿýþüÿ`êÙwIŒ®…»;ÔwäÃhŸafcP4Z8òÿXòçHìÿp•wi»¨½À•”£)YG:VÿôþÙþaÿøÿûÿÉÿ ¢&¬?Àì­=r8Gÿ/ÿðÿ „ÿðþÿ‰ÿ:Ì?óD&I{׳í}ˆqêPØÿ¥ÿÿ+ÿ²þ´þbÿj@¬ÉëiEï ¨nO¨ÿ§ÿ®ÿéþýŒü`üÊüSýÊý²þ }BPñÒ'Â#ù¤M±@ö»¥­¢•ÃBñ= Þ{4ùª¿fŦW çÿrÿUÿ7ÿmÿ';7‡ážõÿd4¦O«7Z¤®bØÿˆÿxÿºÿp.ÁiNøi¿”Óm•?цMåñ!J‹ºê˜=ÿ;Œ=î§ ÿ‹þ®þúþ?ÿ¼ÿ™7^{Ãd ?ÊG¢+éÿlÿ!ÿÿPÿøÿ¢ò'…ïõÉÀBliòJëÿãÿ–Yñ=— &u¾î¯/ØñÿMÿTÿ’ÿºÿ¹ÿçÿ8Gôÿ•ÿºÿ'<Îv˜K©éÿ(ÿUþÌýØýEþºþÿeÿÁÿ¯ÿÿþ*þÞý9þëþzÿðÿ*Zi –ÿ8ÿYÿuÿ‹ÿ—ÿ¤ÿ¢ÿ¡ÿ»ÿ˜ÿÿƒþþþXþžþ÷þÎÿa)Ø·hù¬Ëþ ±&Êÿ¥ÿÎÿàÿ@lgd›9×àÕ>† Ó[q/Îlµø¯ïUc0Dºœ;(·¼s-—¬€8£Z!áÐÞû!jÆ5v{š‡P!|˜_%. ýúz5ŽÑÓ¥Á ÿ>4W o Ž%²‘XúöÐØW‡:Ÿ#éÚ¼¡™•^øpÙÿÿþãýýÀü¯üàü ýý2ýýÒü¹üµü^üÕûžû û·ûû'ûˆúáùlùüø¯øƒø?øÑ÷—÷“÷¹÷Ž÷-÷®öööƒöaö|öÐö&÷W÷L÷*÷1÷÷ðöÍöåö÷÷÷ùöÝöÙöØö÷•÷EøØøsùú”ú û…ûèû?üüýuýµýÙýþZþÞþOÿÍÿ„/Š•¾$v‰“ÖMÔaã­iµ Q Ï ” 1 o ] R t ¶ ® – ´ 9 á G x r Æ Ê š ‹ Å D„¿}¢ÿl ˜>I[5vWø[àÆ=ۉń£jÎa§ / s9ôÿ%åÿÿ÷ýõüôû ûÓúVûIürýÄþÙÿ±þ_û ÷‘òëî‡ììí÷ïºñòñ*ð\îkì(ë ëží²ðäó\ö'øîøÂøø‹÷_÷Z÷§÷WøÛù7û?ûiùJö‡òáîìëiëóìêî·ð=òðòròÚð ïzî ï,ðEñJò:ógóÝòòñ"ñLðmï)ïÝï#ñwòió.ô©ôwô­óóó{ô¸õ÷Öø¡úïûoühü,üµûmûÖûÝüèýÑþ¶ÿ!qL>}Í9 “›—¾êã:!]•² æ î { Á & á * S?ŠW׈?ĪÖR¬Ý±æ)+ð´Ðä5âÄkº ¿"¦$&þ&¦&$@ÆôÇ Wx-ÿþíûøùãùqúùùûøøøø›øË÷¸÷Rø2øwö/ô òÏï;íðêê7êê0éè~çÇæ-å¢ã}ãÜäBæªçüé(í ð8òœô¹÷ßúOý0ÿ›jdŒÈ³Ùÿ•ÿâÿ<½®¾UXDOmT ɱ¶þ¶üû8ù&÷HõüóæòoñŒïfí}ë´éJèBç]æšåå+å˜åßå'æÊæËçˆè é÷éSë€ì>íþí ï"ðÖðŒñÑò0ô&õïõêöû÷°øùÉùûCü`ý“þ<ÕÜ—Mädb 1 ³ ë ] ¶ · ‘ Ú b عZ¬úX¡á7ì}Â÷r ETcˆq‹au^Ch§»&*8D¡u¯Ðê!|#ò$%ì"+ÿÌ7 \·ý ù×öLõÕó§òzònò°ñ÷ðÝðòó¸ôßõX÷Uøµ÷ÙõaóNðæì,êéŸé¶êLëëêcé2ç—äëâÌâþãVæ÷éÝîÏóÖ÷Wûªþà€áf Ý /ûÈp×V K ¡Œ@ÓÐx d ­ ÿ Æ › õÖÞùÆÆä¥¦ÿ¼û%÷àòLïvë"ç ãåß3ÝQÚ¢×éÕ2Õ8Õ"ÖuØ’ÛƒÞòàIã¨åpç¥èéé`ëœìpíjîðïUñ'òÃò¸ó½ô_õµõkö\÷sø©ù„ûéý¥°Œ  ]  Oñžã_+Ø Ü  # Á á [ ¡  ï æ … š × €Yש ü >Ô-ö®Å÷~ËžŽ ÷ÂÇ^^3!*#[$É$³$#½–ð úpüïõ/òÌð¡ïšîÉî¬ïêïÎî îÃîÛï*ð}ðNò{ôáôNóñ£î„ëþç‘åå|æç ç²çpèûçvæ/åÿäìå¨çë7ð1öiûþÿipg @ »C¡¼“»6͈ ç × T p , S F Ì µ û ®  ¢{‹¾ìæR1þ‡û«ø­õ‹òCïÕë5è‡äöà€ÝŽÚ“Ø{××t×ùØ0Û}Ýsß=á­âÄãäxåªæÒçé¡ê”ì³îcð¼ñàòÉó†ôRõcö‡÷{øIùúúú¼û‚üDý.þ[ÿéB.¯Á † ë Ò k î º ¨ Ú Q ò X A þ   m Y \ ¥ 0 À / š  ¢ þ sFvÀ&§{b3Ø$^’ó‰5:›i *"~#%Ý&B(,( &Ä"ÔË;ÚÿÚøCóï­ìië¶é&è ç/æ)åiäåÚæÃè'êyëÔìí}ë™èæ"ä—âýáùâåŸæCçç_æ@å€ãSâ¼â<å/é%î/ôUú¿ÿ«D ››—ê4¬&T+ ‘Â4bH˜`Wâ   ­AB$£Ã›ç±þ!üiù‹ö€ógðžíë,è åâLß³ÜuÚÛØØØÅØÚ`ÛÍÜcÞàâùã æ+èBê?ìî£ï4ñ±ò6ôzõ¨ö{÷ë÷5øEø‡øìø±ù…ú%û¼ûTüýÿýÿz¶­‘ki¢­²£¬Ò€Ê”úüÈ’„¨÷E   b Œ Ù {ÝV‰ÞŒ&Å "#G$á%T'S(D)“*¾+Z,Å+‹*s(i%O!šÒæ— “ç ýùÕôµðí‹ëÕé0èçOæïå\å½ääˆäØãIâ á[àÍß4ß¼ÞÞ+ÞJÝQÜÜLÜpÜÑÜÛÝ¡ßâÌäâç\ëcï¬ó(øýüÖA, Å 5Sn"KE)íXˆ…„y5ÂSöŠ> ã Š . úàæÅc‡OÿÀüúˆ÷íôòï@ì±é?çñäíâ!á|ß&Þ§ÝäÝ;ÞhÞÎÞéß2áeâŒã彿uèbê«ìïñ“òô}õ¾ö–÷]øùÆù;ú°úDû±ûÐûäû=üáü‘ýþ¤þQÿüÿ}òAuK#AWo¾2w ÆŽHÒe·ÖôUì 1 a + ç6k>~OšÄV"ÉS !®"t#!$ %Ú% &“%ù$ë$%í$$" §­¦¦ žwý^ùHõ´ð£ìÏé4èç½åaä ãØáåà¸àHáÐá¸ááÓàÝàîàxà¾ß-ßÃÞâÞîßÜáÀã=塿 èËéëeí`ïÙñ÷ô¤ø ýÔaY { IÿÉ“õò³3ÿ ·àÙ­x(£  å ÂA²[@ÿ¯ýuüŸû–úJù¾÷øõèóDñ€îì1ê¯èdçMæbå€ä™ã™âáápáSá€áFâõãbæåèëõìµî4ðcñ‡òæórõ1÷Rù¬û½ýÿƒÿwÿÿˆþþþþ@ÿÁÿv[Éi¨Öÿ=ÿ½þ›þäþYÿbÿÿ°þþýÅû}úÊù©ùðù”úªûóüìý¸þ¡ÿàM¸;þÒ ö ˆ ëöÒÓ4߬h‚Àá !ž#W&‹( *­+í,j-@-Ÿ,+Ì)W'P%Š#‡!Ÿ‡^§ ýëöØðYëç£ãèà`Þ'ÜTÚØþÖßÕÉÕSÖB× Ø,ÚóÛ=ݪÝnÝóÜ^ÜÄÛ?Ü ÞÜàøã\çÍêîÑð¸òôdõ)÷µùý[B º•ý¥®;Ö ";$¯%f&&n$Ñ!jÓF1¼Éü G R Ü µ„ü¢ø7õò¢ðQïDî0íì}ê è{æRä\âàààËßïß\à»àáÞàoà àïßeàuáóâçäJçüéÌì}ïÊñÏóÈõ÷÷\úáü|ÿpd 9 Ï ¾ L ÆSÿ¿vl‚|T®ÿ˜þÅý#ýƒüûûûåú*úˆù.ùùù8ù­ù°ú¿ûÝü5þËÿ‰CâNt ²  “ éê4“5 ·O"ù$‹'ò),ø-e/¬/e/Ð.û-o,*f' %e"9J¼&Vðmúôëí·è¬äÃáƒß˜ÝàÛÏٛ׸Õ`ÔÔ~Ô2Õ%ÖŸ× Ù÷Ù8Ú²ÙíØ>ØGØXÙdÛ–ÞìájåîèìnîIðìñ´ó;ö”ùêýýmÕ vf…UO K"g$€&;(i)Ñ)ð(í&$» 6âõVêÇI b ù%ÿñú%÷Ìó3ñï¡íhì;ëÙéè+æ5ä‚âá¥ß‹Þ,ÞbÞ†Þ©ÞÙÞß)ßßXßAà©ádã¤åyè~ëÿí1ð‰òÚôÝö«øòúÇý­Gòw8 . Ä 0 ' À ) À [ ÐŽÁ¼bÿþÏü ü©û!ûrú’ùør÷wöööOö¥öR÷Zø]ùOú,ûGüýEÿNÞµw õ { Xi¬fh# #o&ø)Ù,Õ.d01z0\/s.±-¦,ò*^)(†&Ú# â¼g¶ •cþóøEó(îëénæ«âß{Û1ØÕªÒ}ÑXÑËÑ"ÒÒwÓbÔîÔ±ÔÔ—ÔåÔ¸ÕÌרÚ[Þ­áÃäíçáê‰í×ï2òñôø¿ûÑ¥ äUrVÙn â"#%/'ô(7*Ã*_*÷(¹&é#!-q¾é(â @ L%íüÀøåô‰ñ°î2ìîé÷ç2ætäÛâFáÁßwÞÝîܧ܊ÜÏÜzÝ$ÞËÞkßPàOáâùãÃåÞç(êÃì©ïÃò¤õ0øgúü‹ý ÿýÛ‰P^ K Ù © ï S ¢ à Ù÷çÀ†!W)ÿýVûúÚøË÷èö&ö‚õ§ô½ó ó…ò2ò(ò¿òÌóõ\ö£÷âøú1ûïüÿÀ«ý© @ÌUŽ.aõ $ ' *ö,J03y45¯44¦2À0ú.X-n,æ*ý( &f#/ÉL ìü¶õ%ðÂë«çNä%áÇÝ&ÚºÕ°ÑšÎÍÌ)Ì5ÌE͕ΠÐ~ÑTÒ´Ò©Ò`Ò¡ÒçÓœÖ}ÚÌÞRã‘çŒëÇî;ñ'óõ2÷èù©ýeÌL 0…þ¤Ú¹ ·"×$'M)y+[-G.ä-N,Ò)³&m#; =bН­_o ¯‘Cû-ö½ñôíëê…è–æáä@ã°áðßÞkÜïÚÚÚÙAÚóÚÜ>Ý°Þøß$áJâ•ã嫿’èèêrí=ðóáõøøú ýÿÕnò—g? Ý C ‰ R„`ø X p ‘ º Ý ã±U¨¤wQþ7ü'úCø«öYõdôpóvòžñèð:ð ï{ïêï—ðyñ¬òôyõÜöHø¬ù3ûý¾ÿëd )ßYßK!%$õ&ç)Á,Ô/æ26577+7´6_54;2D0®.Ÿ,—*¤'$Ê–N sîüùõïêLåÊáóÝšÚ½ÖSÒIÎÐÊóÈÈêÇiÈ É·ËÙÍœÏÉÐÑÒÛÒ}ԃכÛQàÞäµé„î‹òËõø!ú"üdþx_o ¥†çm;Q!Î"D$¨%O'#)+9-.Ü.â-Õ+)×%a"û¾·¿·‘® ÀühöñEìaè`åã:á˜ßÞŠÜÛrÙØáÖjÖÞÖØêÙÔÛÍÝÊßÔáÑã²å¿ç¼éÉëî©ðÉóÙöxùÉûâýâÿ™@ãk¸×E ß — º º V ² ü „ Ù Ï ­Ý00žÀŧþ˜ü©ú ù\÷‚õ×ó©òÐñÅð¿ïãîJîðíííqîWï[ðRñ•ò3ô¿õA÷ùøôúcýa*O 1Ì3R ¤"0%c(X,Ž0H4,7q9Ð:!;I:”8À6Ÿ4{2102/-j)5% 'sµ Ýwú8ô‹îÞé-æÉá ÝØxÓÊÎ×É Æ!ÄVĪÅÇøÈóÊ£ÌYÍÍØÍŠÎµÏ(ÒVÖöÛÛáqç‘ìcñMõÊ÷lùýú4ýGùµ KÕK(G ž!¹"á#Í%((«*- /)0Ý/:.£+Ç(Ê%º"Ñ`]9zü’B ÔüÑöxñ¡ìªè¡å\ãkáQßÝ»ÚnØLÖÔ—ÓyÓÔ‚Õy×ÏÙêÛßÝÁßàáä_æðèâë(ï§òöEùüAþ¦=À;ä¶ |  ;ýR n¯ é ø  I Ž ÎßìÛNr}þ üÔú ùƒ÷öÉôQó òàðÃïËîî…í[í¬í îåîð;ñ‰òÍó$õ±ögøGúmüHÿÇ» b®Æik`!}$q'h*u-¯04ÿ6Û8í9T:Ô9_8Ø695“3ù1U0Î.ß,û)Ò%[!°q‡ dþû÷4ò í€è3ä€ßÊÚRÖÆÑÍɃÆjÅxÅÆéÆ0Èɻʱ˹ÌÐÍCϽÑ[Õ+ÚƒßìäêäîEóöwù ü‘þ€äûž OŠDJ¤Z!©"á#Q%ð&(*+Ÿ,ì,Q,ù*)»&1$±!i*Ëâ, V'Êýœøéó¹ï5ì3évæ½ãá–ÞEÜÿÙÐ×ÖàÔrÔ³ÔÕÌÖVØîÙ¼ÛËÝ.à¶âUå!èë1îzñ¿ôô÷ÎúZý¨ÿÕQQ$ Õ J [–¨1f“ ¾ Æ · º ÍÌ„:óŽì'ÿ€ýöûlúÇø^÷+öüô¨óžòäñmñòð•ðgðið‹ðÄð:ñÚñ¢ò„ó˜ôÿõ…÷'ùû@ýëÿÀÒQ ì ¦^6ñC$"&%=(s+I.“0ç2C5=7 8 8Ð7ß6ž5]4H3A2s0X.±+ä(0%ög« žÓüqöqðëæ¢ázÝÙVÔ\Ï Ë½Ç¸ÅœÄÄ^Ä>Å¡Æ÷Ç:ɉʿËYͯÏJÓÚ×éÜKâÌçLí'ò"ö5ùÏû`þ¸Ü *N7¾p3 >!" #&$M%i&'•(>)})ù(Ô'&$A"£ <µë¯ÄN n *üøôAñ0îRëˆèÏåãâùßÝZÚ ØZÖHÕ¶Ô°Ô?ÕOÖ°×#ÙÜÚäÜ=ß½áuä\çuêªíèð$ôX÷XúýÍÿs]g R  rXÛÐ)F@ A Ù ž„P烡ðþ%ýûüùªøb÷`ö¦õúô\ôûóÐóŠó8ó%ó@óó¬óô¼ôõiö‚÷¸øú—û;ýéþë0®hb s¼îú-Wp!g$\' *i,§.y0ª1€2(3¯3À3¡3k3H3²2{1Ë/}-š*Ñ&9"Ûñ¸^ &þøÖñùëŽæGá;ÜŠ×6ÓgÏ,Ì»ÉÐÇ7ÆôÄÄìÃÄÊÄ ÆèÇ€ÊÄͶÑÖ½Ú§ßjäé€íºñ¨õhù ýÊrW ÒàcŒM É!Ú"Ã#$%[%b%I% %Ñ$($=#9"N!_ 9®Ú¥?>ë k 敞ýµúÛ÷ õAò[ï_ìOé7æ8ã}à%Þ-ÜŒÚ!Ù@Øß×á×2ØÓؽ٠۞ܒÞÅà%ã¬åcè&ëîñ)ô'÷/úQý`þ7  ~Ž#@ µL½þ   Õ c Ä 3þyüÕú=ùØ÷²ö¾õöô=ôžó0óó ó/ójóÒóaô õåõÝöë÷ùQúÇû`ýÿ¢ABŸ €ÆšRÊ!R$[&û'•)æ*ì+Ä,z-.ƒ.Ä.ë./ý.B.ý,+Ì(&•"èºl lþÛødóî!éä àwÛ"×€ÓrгÍíÊÈÐÆ›ÅäÄôÄ»ÅùƯÈ?ËÎmÒÖ—Ú½Þ!ã‡çÞë ð*ôSø•üÕ+‰ ]޼. š!õ"$–$ç$ò$ã$—$?$Â## "!éÔ}¼Ÿ~4Ç(‹ Ü I⹪’ÿ~ýaûLù÷»ô3ò—ïåìWêèîåñã$âÀàªßÔÞ#Þ¢ÝXÝ8ÝjÝãݰ޳ßÜàBâõãëåè\êÎìhï=ò8õQøXûaþ,Ä  ä   4ŽÃÁƒÑ Î  ë 6\‚¼þý¢û,úÅø€÷göiõ„ôðó¤ó…ó„óØópô>õö ÷6øšùûüSþ>ÉÇò8 „ çYÝfä]š]!#r$«%Ê&x'ÿ'¤(%)f)„)µ)º)d)Ú(,( '%}#6!>rV$æ h Ã#šûQ÷;óHïë¢ç‰ã›ßÜêØÁÕ­ÒÐþÍqÌWË÷ʈËeÌðÍÐoÒ:ÕXØŠÛߪâlæ êìíÈñÚõúùHþ£Þ å_Zéäo!Ž"l#$$É$ö$Û$n$®#È"§!c ¸”Oû€ vø Ž Z=- ÿ2ýIûNùU÷Iõ:ó)ñCïsíºë êšèNçJæaåšäòãiãÞâšâ‡â™â½âãƒãIä<åkæÄçMé ëí)ïmñÃó$ötø¢úÒüÔþ¿rûsØ2 ! ú v µ £ ] Ï  ðµnÏuÿÊý†üSûFúUùøÿ÷œ÷d÷:÷Q÷—÷øøcùcú„ûÛüWþíÿ€.ôÍá r Ò~N¸<’ !E#•$²%’&#'­'2(“(¿(Ý(è(Å(R(v'&u$Š"R Ê’ç"6 )Ëþ£úÆö%óÈï‘ì:éÐå¾âïßFÝŠÚ ØÀÕæÓsÒwÑÑÑdÑ2Ò”Ó[ÕYבÙÑÛJÞêà­ãvæcépì¥ï*óØöžúZþ žO Ì ÚPmJä,N1 ÷ •!ï!ú!À!s!!I =Ê8rtG¯c( $   !ÿýëúµøqöWô`òðºîýìtë!êé!èQçŒæÛåPåôäÄä³ä´ä½äåå)æÿæè$égêëë¦í|ïdñIó>õ÷èøƒú ü’ýäþh¦Èßìã”;@¹>«LˆÌ"7Tÿoþ|ýÅüüû û¼ú—ú–úžú³úýúiûüÄü¶ýÍþO´Z&èÈ Þ +Š…ó6?*òo!Š"t#N$!%Û%u&ò&T'ƒ'i''d&Z%Ú#*"9 êÜ^Þ= … ®ÐîýDúîöÁóŒðIíæéªæ­ãÏàÞqÛÙúÖkÕiÔÏӌӗÓÿÓÛÔÖz×(ÙöÚòÜ"ßá 䤿Xé@ìnïÁò"öŽùùüoÜ;H  …Õ ÛaÉ AT¢ÛíÎpÎâ´TÓ<ž»Ô+ Q l |‘£¢’ÿlý:ûù÷ õ=órñÊïNîí÷ëùêóéúèèWçÎæ_æòå”åkåƒåËå6æ»æZçèé9êŒëøìbîÇïAñÄòFô õñöOø®ùû{üãýRÿ¢à ÌG¢ê(øÈ2ÔX¼ _Î?¥žÿ2ÿâþ˜þ_þ8þ%þ,þYþ¾þ:ÿÓÿ‚dh|²šM   4m£ÁÄŸOÃCJ V!G"*#î#—$/%€%‚%6%­$Ò#"!jeñ ò©- ‡éPáü‘ù€öió:ðãì³é«æ¼ãÕà*ÞËÛÌÙ&Ø×jÖÖßÕÖvÖ0×.ØdÙÊÚzÜfÞ’àÞâ^å÷ç¼êží•ðšó¶öÈùþü-ZW œ Gd?ãeÖ$NN“ØÞ¹Q¥¼£q%¿Gº*ƒÛ n ˜ Ëî%Pdeþ€ü¾úù=÷ƒõåó]òñãïÝîÖí»ì¸ëíêLê¤éûèYèäç‘çrç€çžçÝç0èÁèŒétêjëgìxí”î³ïÓðûñó9ôfõ­öø[ù¶ú üRý‰þ—ÿˆJô sºç +> Ɔ=ø¼sÅ‹[,è¹§¬¸ìEÍP÷À£~cmŸ÷ v ÙµgÈ`ÖQU: øìÁ g!á!X"˜"›"G"¸!æ »aÕ Ð6p’˜ y Dʤý¥úÀ÷¸ôœñnîTë^è~å»â$àËÝÏÛ=ÚÙ;Ø‘×6×'×רâØßÙÛ‰Ü@Þ1àRâäææéNìLïLòLõYørû•þ§šMÎ 3 iŠ;Ì5œ×Æpà%-›ô✲2« a ¯l»î!ÿ[ý¾û5ú©ø#÷Éõšôsóeò\ñ_ð{ïŽî¨íçì%ìjë¯êê¾é„éYéLéWé•éíégêõê…ëì¦ìLíÿí¼îcï!ðýðò,óPôvõ¢öÊ÷éøú ûïû¶ülý3þæþyÿ„‡æ;Éþ+eŽ—ªÀÍÍåú!V¯#– ” ²[ ¾ ~ ] _ Ž Ä[±íô«q4ù³^ý¦D¢Ùãª>šÕÙ·'>ð’ j ¤Ïû2€ýÖúøùôéññîûëéBæ¢ãHá>ßtÝ ÜþÚ+ÚŒÙ-ÙÙ,ÙlÙñÙÅÚõÛDÝÓÞ¤à°âêäXçèé„ìAïòìôâ÷ïúäý¸w ‘ï & 'ÍYÄ"C&Ì:{vAÅ&^spZ.ÿÁx+ª › xÙ+ïiÿñýƒüûÍù“øf÷PöGõJôCó^òñ­ðÛï%ïqîÌí7í¬ì1ìÕë¢ë~ëƒë‹ë¤ëÒëþë.ì\ìŒì´ìñìTíÔízî@ïðìðàñÑòºó”ô^õ-öóö´÷…ødù4ú ûÜû¸ü†ý?þêþƒÿ±D¶3½?¸(•ùR­ŠúmŸA ê ’ 1  Q ì ‘ DõåîõúÓ¡;Òdì]´%–«*ŒÇöì|Ù,¿%Vz€w R  ©+¥3ÿ¨üûù*÷VôŠñÍî6ì¯éLçôäáâá…ßBÞ1Ý4ÜŒÛ%ÛÛÛ9Û£ÛQÜ1ÝeÞÖßyáIã]å®ç ê{ìûî…ñôâöžùLüäþlçO¡Õ å Ãl”êñ§(–y0¬!x¸àîÛ·‰Fã t û } ùtåKÏkÿ¼ýnüûÜùÁøÂ÷Æö»õ¯ô±óÃòùñ4ñjð™ïÙîEîÙí…í5íçì•ìZì$ì÷ëÉëªë‰ëë¸ëßë+ìwìñìwíúízîïžïAðçð¤ñfò0óøóµô“õqö]÷;øùâùÀú£û‹üiý=þ ÿÔÿ¡n5ó˜S ÌBãµ … V & ö à ‘WÕŠ7Ó_Í7¤ð=› ƒýkÌ+OYQ1,7Xx™›‹8§ßèZÌO ² ä ×:èzþü˜ùI÷õ óàð¸îìZê/èæägâõàÑßñÞVÞ޶ݳÝÙÝ!Þ„Þß·ß àÜáXã å÷æé2ëyí¼ïò\ô­öÑøûSýÿà4>( ò Œ ü;PG×oðNyƒOæWºý4CSR`K 9 Å h† ¶]ýþâýÐüÂû»ú²ùžøv÷^ö@õ:ôUó„ò×ñ:ñ˜ðûïjïËî,î{í×ìLìéë”ëZëEë;ë9ë5ëCëMë]ëuë™ëçë@ì¾ìRíüí¯îxï;ðñð©ñaòóØó¶ô¯õªö±÷Áøðùû4ü7ý5þ+ÿ7UËò & 6 /% òÑ XÁWÙJ©æ"W‹®ÀÚøÓ¿¨…]=öª4¸'w©Ä¾“Eý ¯ @ ¼ .a‡ƒþNüúî÷èõÝóññ ð*î[ì«êé§ç6æÝä½ãØâ#â‚ááôà÷àáTáºáIâûâÜãöäGæ¡çéê;ìÿíÞï£ñ\ó.õìöÉø³ú›ümþ%Ór#¬2 P V G  Û púa©à á§UÚL¶  { Á ö 0 ` Äàíìãéïúÿ,þMýmüˆû¥úµù²øª÷ªöÈõçôô^ó¡òýñDñ¦ðõïSï îõífíèì„ì;ì ìõëñëæëñëì'ìGì‰ìÏì4íší,îÔî•ïMðñïñÚò¾ó ô’õˆöŽ÷›ø·ùäúüYý˜þàÿL•Ð^Ú  G g yfBÂm–"™û<z¬­²˜q< öÀ~6ú²m2ó¼Yòx ‚÷eºY˜ ×  1 ? D ,í²n.ëŽ/ÿÏý„ü7ûéù¡øF÷èõ²ô‰ólòcñyðšï¼îîZíÕì[ìòëëOë)ë$ëLë’ëêëXìÉìQíúí«îUïðÞðÅñ©ò‰ó‡ô”õªö±÷°ø°ù¦úšû•üsý[þÿåÿb(ÏiûtðS©ö&Nez‹‡nQ3 àš]±]ùŒˆøf×9¥ÿûþ]þ»ý ýOüûæú6úùïøPøÂ÷6÷ºö@ößõnõ õ³ôjô-ôýó×óÁó¨ó©ó¾óÏóìóô&ôTô‘ôÔô"õlõ«õöHö¦ö÷j÷Ì÷5ø«øù®ù4úËúmûü·üiýþÖþ›ÿLü­Y´Jú–Fáw§ ‡ û Q   ÷ A ´ ¾ Ý à ð ì ß Ê « † w V & ù Ô ³ Ÿ € o X A ( õ Ò š b ! ö»m+í®s"Ìh¤6Ì]àož$´7ÃFÚÿtÿÿ»þvþ-þøýºýˆý[ý#ýõüÌü¬ü”üŠü…ü’ü¬üÐüïü ý)ýGýsý•ýÈýâý þ1þfþ“þµþËþÔþâþçþÝþÕþ½þ™þpþAþþìý¾ý›ýwýOý4ýýýýüñüðüáüÞüÛüßüÒüÐüÃü³ü¦ü‡ünüUü9ü#üþûàû¿ûû…ûfûJû$ûûáú»ú™úrúFúúòùÑù®ù¡ù‡ùrùZù?ù#ù ùùøÚø¾øœøƒømø]øGø>ø"øøøøø÷ÿ÷ø÷Ù÷Ê÷¹÷®÷§÷œ÷¨÷½÷Í÷è÷ø÷ø:øhø“øÓøù[ù³ùúpúËú1û˜ûÿûhüÕüPýÊýCþ¾þ7ÿµÿ3°,¬yÝ7 ðF„Ó=i•±ÉÝìêñëæÚξ«”‚dO3úëÕϽ²¦¡™¢§¶Íè 2Roz„‘šž«ºÏæþ  öïéæÙÐÈŽ¾ª£š‘‡„}tjdG3 è¶UÚ›ZÍ{2Úr­Jäÿ‘ÿEÿíþ”þBþõý©ý\ý ýÈüwü6üíûµû€ûQû-û ûãúÀú¦úŒúpúWú=ú,úúñùÙù´ù¬ù‹ùrùXù:ù#ùùçøÄø©øøbø6øøø÷Û÷¶÷š÷v÷\÷F÷.÷!÷÷÷ÿöýöúöøöøö÷öüö÷öûöÿö ÷ ÷#÷7÷>÷Y÷m÷÷¥÷Æ÷ì÷ ø5øVø‰ø½øöø6ùxùÆùújú¿úûtûÐû;üüøü[ý¾ý$þ‰þðþRÿ¸ÿzÓ3ˆÙ o­ê'^‰ºÝ'EezŒž¦²·º»º°°¨¨¥¢™Šyq_O:-èØÁ¬¡˜Œz^N<3#!  -CLO]ix„•¢¶¾ÒÛîïûùýùòéåÞÑð¢nP5ýàŨŒuR. íÌ®’z^N;ðк¡€cI×ÿÄÿ˜ÿqÿSÿ/ÿÿâþ»þ™þmþBþþêýÄý—ýsýHý!ýýÖü­üünüEü!üüãûÊû¯û–ûûlûTû=û-ûûûûöúîúßúÜúÖúÍúÍúÂúÅúÀú¼úÃúÂúÄúÇúÚúÓúÚú×úÞúäúõúøúûû$û7ûPû`ûƒû›û±ûÑûíûü+ü]üƒü³üßüýHýrýžýÉýøý'þZþ~þ±þáþ ÿ2ÿXÿˆÿªÿÝÿýÿ+Js‹µËö5QnŠ­ÀÚéó70;BLLUU]VUPLGIGC>=;E6*'        ÷óìãÔÁ¸ –yoVC-ö矨ª‰tcN@1,ðÿÝÿÐÿÆÿ¿ÿ«ÿªÿ˜ÿ‘ÿÿtÿlÿkÿeÿIÿEÿ1ÿ-ÿ"ÿÿÿ ÿ ÿÿÿõþÿÿ ÿûþýþÿÿÿÿÿÿÿÿÿÿ+ÿ/ÿ1ÿ6ÿ@ÿ<ÿBÿGÿMÿSÿUÿZÿcÿ`ÿeÿfÿgÿlÿgÿiÿkÿeÿdÿgÿbÿeÿ]ÿ]ÿXÿTÿUÿVÿNÿPÿJÿ\ÿ`ÿTÿXÿTÿNÿMÿMÿKÿUÿOÿ\ÿ_ÿ_ÿeÿmÿwÿrÿuÿyÿ{ÿÿ†ÿ‡ÿŠÿÿ”ÿ—ÿÿ¡ÿ¨ÿ¬ÿ¹ÿ²ÿ¿ÿµÿ¿ÿºÿ¿ÿ¸ÿ¿ÿºÿÂÿ¿ÿÈÿ»ÿÆÿ½ÿ³ÿ·ÿ¼ÿ©ÿ¦ÿ ÿ¢ÿœÿ’ÿ•ÿÿ‘ÿˆÿÿŽÿ’ÿ’ÿ”ÿ‰ÿšÿ—ÿ¡ÿ¤ÿ¬ÿ±ÿ¶ÿÇÿÈÿÙÿÜÿïÿöÿ/=M\lx‡”Ÿ¯µÍÓØàãíñóûõõúô÷îîëâèØÔËÏû¼ šŽ‚tm[_ZKF6' ÷ÿíÿÞÿÖÿÈÿÀÿ±ÿ®ÿžÿšÿ’ÿÿ‚ÿ‡ÿƒÿvÿ{ÿrÿuÿoÿsÿrÿtÿwÿsÿ{ÿxÿŒÿ–ÿÿ“ÿ—ÿšÿžÿ¥ÿ­ÿ´ÿµÿ»ÿºÿÊÿÎÿÔÿÏÿÜÿÙÿâÿÞÿßÿÞÿäÿÜÿÜÿØÿÙÿØÿØÿÑÿÏÿÍÿÎÿÅÿÂÿ¿ÿµÿ¯ÿ±ÿ¨ÿ«ÿ£ÿ§ÿœÿ¡ÿ›ÿŸÿ‘ÿ—ÿ–ÿ—ÿ–ÿŒÿ”ÿÿœÿŸÿŽÿÿÿÿŠÿ‹ÿ‰ÿÿŒÿ‚ÿ‰ÿ‹ÿ‡ÿ„ÿ€ÿƒÿ}ÿ|ÿ{ÿÿzÿ{ÿxÿsÿuÿnÿgÿpÿhÿmÿgÿdÿbÿ\ÿgÿXÿZÿNÿOÿIÿGÿFÿEÿ?ÿGÿAÿFÿ>ÿBÿ>ÿHÿGÿMÿMÿVÿUÿ\ÿbÿbÿkÿpÿvÿ{ÿ…ÿŒÿ”ÿ˜ÿ¤ÿ±ÿ¹ÿºÿÆÿÅÿÓÿÚÿÛÿäÿæÿòÿòÿüÿ"'.577;@HSIUZd\SVNUISIMFJ@CD>621),* þÿüÿ÷ÿôÿôÿñÿðÿîÿñÿïÿìÿñÿñÿòÿøÿõÿøÿõÿùÿÿÿ  !$%%#'! ýÿ÷ÿøÿñÿìÿäÿäÿÝÿÝÿ×ÿÒÿÐÿÐÿÑÿÌÿÍÿÌÿÉÿËÿÕÿÑÿÐÿÏÿÑÿÏÿÛÿÕÿ×ÿÛÿäÿãÿåÿâÿãÿåÿèÿðÿæÿìÿæÿãÿêÿèÿãÿÝÿàÿÛÿÐÿÕÿÉÿËÿÉÿÌÿÆÿ½ÿÃÿ¿ÿ¾ÿÄÿÀÿ¿ÿ¾ÿ¼ÿÄÿ½ÿÁÿÁÿÄÿÃÿÅÿ¿ÿÍÿÈÿÊÿÏÿÕÿ×ÿÖÿÞÿéÿîÿîÿñÿùÿùÿùÿÿÿ         üÿûÿ÷ÿ÷ÿêÿîÿéÿäÿíÿöÿâÿçÿàÿãÿçÿßÿÚÿÖÿÕÿÓÿÖÿÔÿ×ÿÓÿÛÿÝÿæÿìÿñÿýÿøÿýÿùÿüÿùÿüÿ  (-(-+0-46<I@CLGMWVMNMLYWaTOTIJFCB@9>:95557100/.1.+27/3/4294955?<FD@G@HAA:;594/+1#( !"#),%.*/'120248295/8,409><>;@>8=5696;9<<9=<:9A5>2<812).),12&(+ &!$" %'(,,-5376>>=>BJFJGOVWWe^```cdefehglmpqktpqllmju{ztnthnqlsqptz|wx}~†††‡ŒŽ‰Ž„‡‡‚‚†‚„z|z|€yzrnonesgnipijhhhhkjioqkhjfjfhehidfdf^b_[^ZYa^b\aZ_XYY][_^]dh_a\aX_ojbZUSVSORITKQJIC@ABI@:=<=<>;999799;;:808133894<;5A6815-14.72529/3,:1/5719<8>B?24<:74?62;51113233:8:?>>AEGGPTPNPRSYXX\[^b\jfbgajenjginmmifkgelflkggoulqjmihbgba_^_]XUUNRNROIHAHEDCDDCCADIJBLEFBMJIIHIBLKIEGKIMDKDHIDLGGGCEF?HB?BC?>?>EEF?E?@C<>?<6;<<?9372=0:786>1;495567:=C:=:69:7?B>:928535>QA;12/44@98;76:79<C@<><762LOIBDT=IGFHKGJIFLLONNXUTJXH][[UXV_SW[Y]Va^[_^b[aaZcXYQQXVNXONIJMNJIEOGGGJFGCJDLJLIJKLKIFEBAC??;=34046=<<;:8723214)2,51*((,*10),&.')*('-,!%&%'()''"''(+,-,.;993168:471117-9+-)-/.-(% ýÿðÿùÿ$+')"!##  #+5447/-4062-+!##%!-'-"$   #   ÿÿõÿûÿðÿóÿôÿàÿßÿ×ÿáÿÎÿÛÿÜÿíÿîÿöÿ % óÿæÿÜÿÝÿéÿøÿ  ùÿöÿøÿüÿþÿùÿõÿñÿßÿÔÿÙÿßÿ  ôÿøÿøÿ ÿÿþÿüÿ ûÿúÿðÿãÿÑÿÇÿ´ÿ¾ÿÁÿ¼ÿ¨ÿÿ~ÿqÿ‡ÿ­ÿÕÿÚÿÏÿËÿ»ÿÑÿáÿãÿ×ÿÐÿ½ÿµÿ¹ÿÈÿØÿËÿ·ÿ•ÿ©ÿ¹ÿ­ÿžÿ«ÿ¹ÿ¶ÿ°ÿÀÿÞÿôÿêÿâÿÌÿ­ÿ´ÿÈÿ #24BRRKG9/52139<IRPQ<*5N]…‚iDE/;8BZ^TJE6<?:9FSJ1;>!þÿ óÿØÿóÿ ðÿÛÿñÿäÿÛÿÌÿÇÿºÿáÿçÿÖÿÏÿÔÿäÿûÿñÿ (  îÿ (EGC(2+& 26-%076><UDLVPHJINUZ_Ub_b[VOOHVVYODXGOTV[E[mtnYXYgwmcSP\Za^^]Zbmg^gdirxuq€‡ˆ{qwnpnqpl\^]VPZYfYYQ`dVXYdh`bd^L.1;>142*:86  ) ñÿâÿÝÿÕÿ÷ÿ -þÿéÿíÿ÷ÿ/8<)"þÿ÷ÿñÿ02#*>:32;:C;<90AR7&9N]R@-7>RIXC766#ôÿûÿ 9FæÿÅÿÑÿéÿ&  ôÿêÿ.ùÿÞÿËÿÍÿåÿ0 àÿÉÿÄÿ¼ÿÌÿëÿûÿøÿòÿæÿÒÿ¬ÿÿ€ÿ£ÿâÿíÿÝÿÕÿØÿÖÿÜÿÊÿ¹ÿÅÿåÿñÿÎÿªÿ½ÿÑÿäÿÑÿËÿÌÿÕÿØÿÙÿäÿ÷ÿ ,G6!õÿüÿþÿôÿöÿôÿÿÿôÿÝÿõÿûÿ 0&4&ÛÿËÿïÿòÿãÿÐÿÊÿ¶ÿ«ÿ³ÿÊÿÛÿÑÿçÿêÿýÿ ÷ÿ ûÿÉÿ­ÿ¢ÿ˜ÿ¬ÿ¥ÿÿ}ÿaÿYÿeÿmÿ_ÿPÿDÿpÿœÿÓÿ×ÿïÿüÿßÿ¶ÿ|ÿmÿ]ÿ>ÿ4ÿAÿ^ÿjÿgÿ{ÿoÿxÿaÿzÿ–ÿÿ™ÿ®ÿÈÿ·ÿ ÿ‹ÿ]ÿÿªÿ¦ÿÖÿ©ÿ§ÿ»ÿÆÿØÿ­ÿ¸ÿÕÿ´ÿ¿ÿŽÿzÿkÿkÿ€ÿ€ÿžÿÿfÿ,ÿòþ¿þæþ"ÿbÿOÿÿåþ˜þ‹þaþcþxþ þäþõþáþÂþþ…þþÊþªþÇþÆþµþ¯þÍþ ÿÿóþÛþæþ¾þ¶þšþÃþÜþÆþ©þ¬þ«þþMþ þþ$þRþ˜þ3ÿyÿ€ÿ©ÿÖÿâÿÖÿìÿÁÿ¨ÿ‡ÿÿ…ÿiÿjÿ¦ÿÖÿëÿ¤ÿ[ÿ*ÿ ÿIÿ©ÿçÿ()øÿÚÿxÿ=ÿÿþìþ,ÿYÿjÿqÿ…ÿÿ‘ÿyÿcÿ4ÿ*ÿÿûþÿêþÿþÿñþêþïþðþ¾þkþ7þ4þpþ¸þÅþ¡þOþ þóýÝýëýàýÏý½ý›ý~ýiýQý=ýGý]ý„ýžýºýíýþùýþ.þSþUþcþ…þ‹þ—þ†þOþþ*þoþËþÿ)ÿ%ÿ&ÿEÿcÿqÿhÿxÿÿ¢ÿ´ÿÔÿãÿýÿíÿñÿàÿÙÿÉÿÆÿÛÿ ÙÿÄÿ¶ÿ³ÿ°ÿ”ÿŽÿ¬ÿåÿçÿ³ÿ ÿhÿmÿŠÿ„ÿaÿJÿ(ÿÿ!ÿQÿ?ÿÿ ÿãþÐþÄþ£þ‡þsþuþœþ÷þKÿcÿgÿ_ÿFÿZÿuÿ“ÿ§ÿ¤ÿÿxÿŒÿ{ÿÿYÿ]ÿpÿvÿŒÿ±ÿÇÿ×ÿÍÿÚÿôÿùÿøÿìÿ.FfhT:  éÿàÿØÿäÿ7TSMT1âÿ´ÿfÿ!ÿÿ'ÿWÿuÿÿpÿJÿDÿCÿHÿbÿ;ÿ;ÿ7ÿ>ÿ0ÿ,ÿ,ÿÿÿ"ÿ)ÿPÿnÿjÿšÿÞÿ\‹„8 ìÿÝÿCVE)" +?a“ÛÿóÁ¥™h? ÿÿãÿóÿäÿÖÿÉÿ­ÿ½ÿ®ÿÿ}ÿbÿ‹ÿ¸ÿîÿ ýÿ*x¼ô ûÞ¡…€”¸Ãη‹z¹ÏÀº¥¯©Š~‹¢§¯­i>'1Npƒu|޹¼¸¶¦ƒhT-ãÿÊÿºÿÅÿÙÿëÿèÿæÿïÿëÿ…ÿ7ÿ:ÿvÿ™ÿˆÿŠÿÿ”ÿjÿMÿ*ÿòþæþÿXÿŠÿ¨ÿÚÿýÿ!ýÿ¿ÿ‹ÿzÿÿØÿCœÍ²U?M`Elˆ·;e…µw86rw„@á|‘ÂÚøú:gh„Œš–W ñA•¸ŒEîËÊ´ ¡Ä³AÇÿ‡ÿoÿBÿ.ÿ"ÿ&ÿyÿÒÿ§ÿfÿiÿ€ÿxÿ“ÿÕÿLÆ'-ñªwX]z‘žÑ!tÓ !ûά ˜f=:‰D%Ëk Ô|úÿi¡|GIit5ÛÿlÿUÿ®ÿl4¨©4’®ÿ^ÿ,ÿ ÿPÿÑ(( Ôßÿµÿ°ÿÈÿxéeÊê˜óˆP%r#£½ÓþÙké~ÍÿåÿRã“:ŽuŒ×~ÿ9ÿHÿ©ÿEÝbNû˜GÿÒþÄþáþÿNÿéÿ©Rv'5ÿ„þSþzþ¯þêþIÿÚÿgµŽªÿÿ]ÿ&ÿÿ%ÿAÿdÿÏÿy>ätJ?8Íÿ¤ÿÝÿ_òcq;çÈ ÿfþNþÓþ‹ÿd b*·}NÒÿEÿ=ÿÃÿpþVy@ üÍ]ÑÿpÿgÿÚÿa’‘Ü,í;€ÿCÿÿÿÿ†ÿþÿÏÿ¹ÿÏÿ®ÿkÿ$ÿäþQþÜýàý“þ!ÿ6ÿßþ“þ™þþ%þ²ýZý…ýþàþyÿ¼ÿ¶ÿÛÿjVötIG&ýÿT=Càí‚Ñ¢m¤Â«–¶Ú#V,°R%OHÎÿàÿÌÿÿaþþüýøýËýrý7ý/ýQý“ý˜ývýJýWýjýýQüìûÿû•üEý#þªþ£þQþ_þÁþÿ ÿÿEÿÀÿeáBÍàêÙ›4x"¬­%ÝTÂ$~ÿþþzþÝý‹ý¥ý=þ¸þÍþ©þ¼þÍþþßýOýÌüqüÆü×ýÿçÿ.?;ßÿoÿãþrþþ!þtþÈþøþ;ÿÎÿkZˆÿ}þ·ýfý°ýþOþþ5þµþ€ÿÚÿ…ÿéþªþÃþöþ=ÿ²ÿwÙ7ü 'sÿ ÿµþSþþüýlþ;ÿíÿíÿ¶ÿÿ¹ÿÏÿtÿÁþ”þ4ÿMSÌvõ¨†„b*ÕÿÐÿ(z‹m lÿ¼þ…þ®þ…þþßý›þÃÿ™5…ÿáþ”þšþ}þ8þ/þ¿þZÿ¦ÿŽÿfÿ<ÿÿÿþöþÁþ,þ¦ý¥ý=þ2ÿ¼ÿÖÿ±ÿŸÿÖÿKˆL"‚Úõ±¹4µè…1­Ys°”¯û,ù²ÿµÿ7ðÿ_ÿÑþÎþ$ÿ&ÿ™þÿý•ýOýý ý’ýwþJÿÖÿ.^XžÿRÿYÿšÿõÿ6GXÊ»œÒ#+HÌÿÅÿæÿ?Ú’¸  £ÿ©ÿ©ÿpÿqÿ˜ÿ¬ÿ“ÿ¡ÿäÿþÿ¬ÿ,ÿ´þmþþ¨þ×þGÿýÿÖ wîÿ’ÿÊÿ{™?zC¦%2ÂBåœ;ß°—Íu¾‹ ·‡Fÿ]þýý(ý¨ý*þ¡þÿ…ÿÞÿdÿ¹þ2þÂýWýlýþÖþNÿ´ÿ+›Ès’ÿÕþ¥þÿ´ÿn\6¶Ûò­¢Ž:{ÜJ®ÏÞºuÕæÿÿÅÿLœ 9NW'µœÿJÿÿÿ•ÿ\Œ/éÿžÿ1ÿÿËþ²þúþtÿ¢ÿšÿÿûÿ»>Q–²ºÙ¹”¡¤ä §ÕŠz Žÿ5ÿÙþ”þ§þÿ©ÿÉÿ&ÿkþþ9þXþ?þCþ7þPþþ›þrþYþgþ[þ þØýþ»þƒÿE\ÿÒP×»+‹^Ó ˜ÏþÁ™>¥iµ§ÿ˜ÿÆÿâÿÏÿhÿáþŒþCþ§ýÕü–üÂü¬üçü¥ýnþzþØý5ýýºýûýÑý®ý þÇþiÿ^næ[7Zÿ.ÿ\ÿÈÿ™…i´xÕØÍÓ]ÿÐþ'ÿ"]<yþ'ÿdþþ¬ý(ýFýûýìþ¢ÿìÿvÿjþUýáü®ükü,ü/ü ü—ýØþ¼ÿîÿ¦ÿÿÏþ¤þ<þöýùýþ[þIÿŒ…¤a@AâCÆÿªÿÍÿWik.¸L˜ÿ{þ1ýqü¬übýJþÿDÿAÿ@ÿwÿ¬ÿƒÿÿgþwþˆÿ4ËÊjÒ>°Gµÿyÿÿ¯5eë”ÿ9ÿëþ¤þºþÿqÿ€¶}ÿÿJÿ{þý ýFýîý>þKþƒþÌþÿÿÅþ÷ýýÈü@ýpþ¼ÿ«Mܩʥÿøþ×þÿ?ÿ‹ÿ×ÿ‹m iÕ_ÅÿÊÿêÿåÿùÿ•…Ý|°ÿFÿÿëþ¬þ`þ+þpþFÿ6S•ÿ§þ5þQþ¡þªþªþæþ®ÿ„®ƒaA¹ÿ ÿiþßýJý8ý«ýOþ¯þÿÿ°ÿ-ÿ¡þþµýÂý3þÿ#õbQìs ‘ÿjÿÉÿŽ>ÆoƒÕBÍåþhþ/þöýGþZÿamÉ÷ÿWÿ¸þìýdýý$ýý™þ:ÿxÿˆÿ"ÿYþjýúüýüAýÏý°þPî×%ÿwþ%þ=þÿ:Rîcî8®Lÿmþþ*þÝþÿ@Ü5â/‘_JT„ïDt~@üf›ÿÚþJþþTþüþÚÿlÏélnÿ9þiýýý>ýsýþÿ1ËÉ‚J ÿ`ÿuÿ°ÿ.á©Vìׄ\.¾> =Éÿ6ÿ„þØý@ýÚüªüµü­ü’ü¬ü]ýšþ³ÿ«ÿÿÍþ·þÄþÿ>ÿ'ÿcÿ+rn!È·ÉÏœ! æm¾3ÝÿËÿÆÿ·ÿ§ÿÏÿeZàÿ$ÿÐþµþxþ=þKþ—þÿ´ÿ[˜%qÿêþ«þpþòýqýPý—ý(þ ÿ°Äoúÿ”ÿ,ÿÀþ¾þ ÿšÿXóQ|üÿ»ÿÊÿ…ÿÎþgþxþ+ÿêÿxÌœ+¨ÿ ÿ2¥‰÷ÿ¸˜Ëh +w‰^ ⺱ÞOƒ¶ NJ󴇆ÐÜ‚ pÌÿ.ÿþ þÚýþ=þ€þÆþÿGÿdÿPÿÿüþøþøþÿ9ÿEÿcÿÒÿ`â?Kü¤„ÏIY;qá Ä;ªo‘·v-iìIKØ;ÿDÿƒÿóÿãÿNT/ ÁÿµÿnTÄÿ*ÿÖþÜþîþÛþzþþÖýöýþìýVýñüýeýÑýÚý¡ýdý¯ý]þÿLÿ`ÿ„ÿ¹ÿªÿpÿÿøþÝþ¼þÁþÀþ±þ¯þÜþLÿˆÿSÿ¿þþ¶ý’ý“ý¹ýêýFþÇþ6ÿdÿEÿèþ¾þçþ]ÿ¬ÿÿFÿÿøþìþäþÌþªþ‰þþ”þyþEþ:þmþÏþÿ]ÿ‡ÿ±ÿÙÿ<‡ ~at¢ÊÛ: ÎIrkzJór/SƒÊÁÔùþãÌ£“ÊêŽ+®Y(鵸bà"Wk£llÉ Ãp:;(ä¶Îÿp»Ær ÐzB àãþ¬,ÛÿrÿÿÁþ}þhþ{þáþKÿ‘ÿžÿoÿIÿÿ¶þ>þÁý’ý©ýñýcþ¡þ„þþmýÞü3üžûHû&ûZû×ûJüüoücüVü5üÆûgû,ûþúû_ûÒû%ü$ü÷û®ûmû'û¾ú3úèù útú¯úšú“ú¨ú¶úµú‚úFú ú úMúÞú¢ûzüHýÀýáýµýIýÐütüMüpüÄüMýÿý¿þ|ÿéÿæÿ¨ÿºÿU&ü :c„¯” ý¼XêvNvÞ@—fd×]ý©i£ð$êØ©HÇ€™ï¨Wæ5]lQû¿åNàŽF ÿ ¶ • J ² ç ¹ “ ‰ ‰ ˜ ¬ ° ã 4  ± ( e ä O ¦  ·PÚ@ˆ(’ï^ÿ­ýãû9ú®ø[÷ö¦ôáòüð!ïíöêÆèÙæåsã.âláÌà2à´ß…ßßÅßàïà>âÕã§å¬çêcìŸî“ðvò+ôÌõn÷&ùâúvüùýiÿË ÷„¹‡FÓbâžb8þš Rÿ²þþ…ýýµüºüíüLýÔýsþýþˆÿ<Êt"­0†áGŽÐŽóY¹)¥T  ä k ­ ó P Ç H ß 2Ħ„s>œ-åѰ¥ÖT„ã !."/#"$#%C&x'}(ù(u'a# &dU *ûõdð>í"ëÙèPåÁàuÜéØëÕ,Ó¾Ð;Ï6ÏѽÓtÖHØwÙÒÚùÜ à¬ã·ç`ì»ñ‘÷ ýDÝ3ñ³%–l ò 1 “5v¶ˆù à Ý“ SþÖú ø—õó_ð;î\ìNêdèòæ¶å6ä«â•á(áÓà‚à[à„à•à¹àŠáã åçyé*ìï‘ñÆó¾õ`÷ŸøŒùqúšû ýÏþü=^%…Š d ú U E 6 œ ' ‘ Ù  Í e  ¢  u " = ­ I Ù u  Á u'Ö£¹ ý^p=ÓêÁ™£—®*²Tᔚ¹í b"*$ó%¬'(M&{"Xˆõ 3âüx÷}óýð,ï‰ì:è<ã°Þ©ÚÓÖÓóÏÎôÍÏäÐLÒ ÓOÓ ÔñÕÅØIÜ‘à¸åÒë|ò•ø:ý/Ìx&ÿe ‚BŠ£J<;ÛÿŠkY4E„Ws ³ Š66§ÿüÀø:õâðÿëÌæ|á(ÜI×:ÓÔÏ%ÍvË'ËÒË|Ì4ÍÎiÏÍÐ'ÒÒÓîÕÏØÜGá½æcìÐñ6÷nüFI¢Ž \[KB_UÜóõèòøè½¼ï "  ü ð % Èôµ è ^ '[¼Éf™•jB!$O¯3!Œ" #r$ö$ó$¸$$#£!8 Þ‰ý[Ïj´ŸK ›ÀýøºòšíÖè å–âÕàßaÜaÙhÖÔGÒCјЦЪÑßÓ¸ÖyÙ¥ÛYÝîÞáÖã|çäëíðö¯üÁÕ® bHÎ0Âǯ¶Ë!$à$¦$¢#"üÓ@J¡Ø€Š 4 Ä]Öþ0ûg÷×ónðììé'åá*Ý`ÙîÕ§ÒˆÏmÌÔÉ]ÈÃÇjÇÇGÇEÈÍÉÞËΜÑÌÔiØÝââé÷î¯ôvú«   ÀG®NÀ³4 , –j¾½ÃùS¬(ö! |±  Š P I t A ÇÚo!‹l·f´ œ!Q" #$%X%¾$ú"B !õUÝ5 ¦ Ÿ Ë‘–úbôŠíÆæŒà|ÛLØ4× Ø}ÙwÚëÚÛZÛRÛÛäÚ“Û©ÝGáüåÉêñî1òÆôóöÒø^ú4üˆþ¿ý D&Ô†`nôaÚƒ—4íqàÛTg H ¦ „ ð Ë„þhúHönòïáë”èåmáÂÝsÚ?×ÔÑiÎ<Ì˰ÊÕÊ|˲ÌoÎŒÐÕÒcÕ"Ø@Û°Þàâ¤çëì‰òiødþéÊ÷ Då&ûÖ.9 ZùÙ54% };Yå¡…„Ã8÷$ÂÔ½U‰Y!Ì"Û#C$$ª#[###é"€"¢! °¨Õh Û ÈþÍùŽôÜî0é×ãÔÞdÚ×.Õ¹Ô}Ô0ÔíÓÔ‹Ô ÕÖ"רáÚ6Þ]â²æ§ê%îlñßôIøõû˜ÿ&»¸ Â*– æ=z¸'¥püѶ ýÒ”XaÎ ~  Fú/«þöûûø´õ†òïìméSæ ãÞßéÜGÚ¼×fÕSÓxÑÐ'ÏíÎ6ÏÐoÑ0ÓYÕ¿×€Ú¨Ýûàˆäqè¼ìnñCö:ûêÿ6&± é½ûÍ¢V3‡ýD0ߊo·_?Y™ðtºBþýMÁ&S 3!ñ!"’""!, G_W1 µ>hWí  MÚÿ*úUôŒîDé›ä~à²ÜiÙרՃÔӭѶІÐòÐóÑfÓ7Õ„×vÚ Þâ×å=éÂìœðÃô6ù¤ýòþü · Ê󎸶Ü5ñ0‚µ ~;±»Í V·>ô~ › $ O“©»ý™úc÷?ô'ñîêê®çqäáƒÝóÙ¹ÖËÓ'ÑÏçÍ}ÍsÍÊͰÎЫÑ]ÓcÕÜ×§ÚÝÝàáqæsëmðSõúœþ°fÛ  ÛʇöPø"änÓf*ƒ17 W!K"Ê"=#­#9$²$T%&ÿ&•'Ï'œ''ù%J$?" #7f¾/ºå I >û9õwïêòä/à.Ü8ÙÓÖüÔˆÓ–Ò|ÑrÐèÏ$ÐÜÐøÑ–ÓëÕàØ5ÜÅßvã0ç®ê>î7ònö¿úÿu¨W d·%åDÁzX K¤Ùy7&ŒÍ@¿sƒˆw 5 ÿúPþµûµøjõò¥îäê”æ÷áŠÝ”ÙAÖÓÊѳРлÏРÐÑvÑ Ò5ÓÿÔ]×wÚTÞßâ¿çØìò÷lûNÿèW‚ u bIŽ› üR„™±øªÝs a"X$!&s'k(Z).*õ*“+W,,-ì-d.z.ð-À,é*™(&k#™ Ýaèw™LG ÇY ü õ<î¼çÅá{Ü(ØŸÔÑцÏóÍÍ!Ì-ËÊ·ÊÑË ÍñÏðÒYÖKÚoÞÐâç)ë%ï\óÍ÷‚ü&½ë Ÿ üo˜ÌÒî…'çžI±O-‰Ãì* j j – Ê øÐpä^ˆWÿãüCúx÷7ôzð‡ì®èÿä±áÆÞPÜLڬض×)×¼ÖbÖöÕÌÕÖÇÖá×yÙŠÛ9Þ“á|åÜéTî§òïöû<ÿâ+ Ì O©ÐÀtñNŸÂÍâ?ï Ý"·$€& (`)*œ+p,-¤-.l.Ï./ê..£,+5)¼&ê#'!z¶±[Ò¬ ®ÍTü¸õï~èsâ?ÝáØÕåÑwχͼË(ÊÀÈÈ6ÈHÉË\ÍrÐÔ Ø.Üeà²äÒèí«ñö­ûŒ(n . qñ¸ Ân!ó|ÓòÊ9ð&ìÆÅã 4 Ä tD8+ãHnŠþ}ü;ú‚÷xô\ñkî‘ëÚègæ+äâàÞfÝbÜJÛIÚ»Ù‘ÙÅÙ ÚÀÚÕÛPÝ$ß‹á“äñç}ëAïIó“÷¢ûDÿ–°—% Z …¨¼º°ÝÊ—ra!\#%Æ&Y(¼) +9,-²-+.~.­.Ò.¸.O.ˆ-›,\+Ê)é'Ë%T#| ˆ{õþ˜Œ á­ýj÷FñGë€å/àsÛZ×ÓÓÃÐöÍŽËnÉÀÇÒÆúÆ×ÇfɈ˛ΠÒàÕæÙòÝâ:æ¾ê‘ï…ô“ùªþ–EZ ÄÉO›ÖΦ9Ä vJt,Õ†h.  ‘C ¼$_•þÛüýúÒøJö´óEñï5ífë’é«ç æ®äƒã+âÈà~ßšÞÞ×ݶÝÀÝÞŽÞ…ßÔàâšäýæäésí<ñõ˜øíû$ÿ<® o úî¬k. ì"{%å'ó)Í+‹-/]0@1ß1[2z272‘1¥0k/ß-7,n*k(&±#[!¥{»¶@ q“þÇøöòlíTèÈã€ßaÛÊ×±ÔÃÑõÎiÌxÊcÉ"ÉÏÉMËNͲϟÒÜÕJÙ§ÜàÍãÛç€ì•ñîö=üMâ u ôŒŠ z‡4qEsà߃:ìÊ Ê Ð ÙMvTþ½ûjù0÷õñò ñfïî í1ì4ëBê„éèèQèµçç¬æ|æ£æçnç¬çøçlèõè›éˆê³ë#íòî<ñêópö§ø¾ú¾ü€þ |.l ü ,Rbþƒ!ø#v&Ä(ù*-›.Î/‰0ö0å0C0/­-#,*±(º&—$"oY³Ã^§ ¡hBü>÷¤òoî‘ê:çä8á˜ÞAÜ Ú'Ø{ÖdÕèÔÕãÕ9×Ù-ÛvÝûßœâjåUè|ëòî–òuö úÒý?>²”# U p ‰ ”I¼Ës‘4m k o“ÖW'(<=ÿþÌüRûxùZ÷õ¿òªðï îiííÕìÂìÜìöìØì{ìóë|ëfëÍëŠìIíüíŒîUï8ð*ñ òÿò ô‹õn÷žùÃû™ý:ÿ†»Ñ©ƒµS - óÖŸ]úo{* ™! #ó$Á&n(ƒ)5*Í*Ü*|*Œ)(J&$ú!䑲„+…² rµýþ›úGöVòÇîzëèÿå.ä‰â áßWÞÂÝ÷ÝÂÞà¬á¦ã/æ"éìÍî1ñcó›õ5øõú®ýq©@r "  † ¶ Å ¯ k Û ) I + Ôõ§6¡ÿý®úƒø‘öïô™óŽò’ñiðïeíšëÍé èæ¯åbåŸå;æ1ç[èjé`êë³ë1ì½ì¤íñî’ðMòáóTõÀö øCù5ú)û,ümýóþ¶’F3þ£úk- P ö î >·_Ó9s(s« "#æ$ï%—&þ&(''U&2%Q#?!æ½”ƒð 2 7ÓýmøóóÑïCìBéÀæ£äãìáGáÙà†à„àáâ¸ãéå•è¿ëSïþò¿ö'úRý(÷¥SÍ  E4Þª±1A6î}Þ  þ ß|×ñÿÍüù‹ö¤ó8ñ(ïlíúëØêÍé•èüæå&ã?áÙßýÞÆÞßíßášâ:ä‘åvæç·ç™èØéaë íýîäðó!õ4÷öøaúÁûMý*ÿ( Únä  « ` cª^QyÛVÊã Ä!Ò"«#p$ %x%¾%Ü%È%H%X$#!„pGÎÂŒ>á ¨ÿ.û÷cóêï‚ì‡éºæËä„ãÃââZáááâƒãZåjçÂé¾ìtðPô&ø ûíþS¥ Hs[´Öô½(¼šd D .Àc&ýíùàöÒóýðtî3ìUêXè@æäãBáÑÞ¼Ü:Û8ÚÉÙëÙ|ÚtÛÚÜCÞ‹ßyàmá]âÂãvåjçŒéÓë îzðórõ¶÷ùŒûuý‹ÿ¼Öܸ_ å O ª ß&“*<…éRŽ d"ê#%Û%“&'„'~''O&:%%$ï"7!ÙU ‹›sæ  ÙTýTùZõ=ñZí#êaç å<ãÑááŽàJà¡àLá˜âäæqèEë¡î6òûõÉùý#{ó* éP•“ 4õi[ø2¹ôÓ•ò ΂Cìþ û|ø„õÕòNðîæëžéç.äRá«Þ‡ÜÛþÙ„ÙwÙÎÙŽÚpÛRÜþÜÝ4Þ:ßµàiâKäTæ~èÞêOíÏï6ò„ô¹ö÷øcûõýXœáóÙ˜ M ö ¤y|àeµa Ñ"È$N&'‚(3)‘)Š)`)Ñ(( '—%$"Ú1£ÙœÐß ÃvåÿCûìöçòï>ëöçå”â™à-ßNÞ×ÝŒÝÛݸÞLà1â^äçê·í«ñ°õ×ùÛý·ŽD ì ím¡Ça£vò;ð[I±¯M¨Þ· R Ñ„;øüãùÝö"ôtññîŒìóé)ç7äUáòÞõÜ€ÛŠÚÚÚcÚÛ½ÛOÜÎÜ(ÝÞÝäÞ0àµámãYåç½é.ì‹îÞð,óxõà÷aúåü<ÿ‰Ëé´ i 4 'N³Vè>!‡#j%Û&ß'ß(m)Œ)R)æ(\(–'†&&%m#n!Qå³å¤l MÁýKù>õOñ¥í8êÖæµãá)ßêÝPÝEÝoÝÞXß á&ãMåêçöêŒî™òÝö5ûxÿ…Ž4 }Y¾ùí_hî™ÐŽ}Àÿý ä°qDÿ üâøºõÙò)ð¨íë^è™åãßà*ßÜÝàÜcÜ7ÜqÜ÷ÜÝÞÞðÞ·ß¾àýáJã¨ä2æèê2ìaî‡ð¢òÁôÝö%ùIûeýTÿOB"( l â ‰LLi”gì!$Ü%S'—(‡)å)ß)—))j(v'&)$" ÆÛ(þ æ˜úþiú;öeò.ïÜë«èpåªâ¸à^ߤÞÞÒÝ#ÞMßáRã¤åèë\î7òMö(úúý£f! ’ ç7Wu.‚qS6‰:LÀSµÝ ¿ ©¾êþûø6õòùïVízêqç¢äJâ™àPßHÞ¹ÝqÝ€ÝÜÝ-ÞwÞ•ÞÒÞcß„àëádãêäæ^è\ê~ìŽî‘ðŸòÃô÷€ùúûEþLF?îµ Ä ú d  ì©! #œ$Å%´&i'î'ø'š'Ú&é%ï$«#$"5 ÌE‰/xR !ß¶þ˜ú¡öÇòï¶ë°èÜå8ãFáÒßßÝÞ ß˜ßàêá®ãÔåUèë]î ò öDú^þOû^ ‘ bØûáž-Lî{£"(ìwüs½ ôèÞÒÿÍüæù÷Oô²ñ4ïÁì3êŒçýäÚâDáàPßÑÞÞ¯ÞöÞSßšßæß@àÜàãá0ãzäÏå;çÛè®êìiîKðMòjôÑö:ù’ûÜýçÿ5TiŠ  Àë2z¤…("t$@&«'‹()d)™)°)) (·& %%#.!õ^ƒtú5\ ŽÃýùÙôÞðií"êçJäÙáàÑÞ$ޣݖÝÚÝÉÞhàSâ·äUç'êví0ñSõdù]ý*Â?‰ :‘¼¦dèúÎù¿+ð*´Iªè ü  "Pþsû¤øÖõ"ó„ðßí,ëpè¶å†ã½á“à¹ß5ßüÞß7ßlߔ߲ßàµà£áºâõãKåÛæžè’ê_ì'îýï òAôÂö5ùiû{ýžÿÎ7qŒ  I¯"ZM ù"K%F'Ì(Ç)f*v*\*ü)c)[( 'x%~#^!š¿xÊ–T Z³üøôBðàì˜é{æzã÷àþÞݦÜÜ:ÜÝÜFÞ1àCâ—äçòéHíñ3õ9ùRýeW0 ” —ò/;5õ[…E ~Ònƒ˜>] a ~±ñþ>ûLøjõ¡òéïíkê¡çAåjãâ áRàÑߋ߆ߜßÁßÎßößZà'á=âãôäjæãçƒé`ë5íï ñó^õÒ÷;ú–ü¼þ¸Ã¾õ7 • O$[°C !º#ø%±') *®*ø*Î*o*¨)¨(S'œ%¯#ž!U³§rãu Ø:TüÀ÷Ÿó°ï ìÂèoå…âà&ÞÀÜìÛ†Û¯Ûoܨ݂ߤáùã¸æ¼é5í,ñFõœù½ýËÂD » Æ€ò'(ÙEOი,òiËó÷ òÝåýÿý"ú@÷~ôÆñýîNì‰éôæ®äüâÃáàà[ààùßà1àUàuàºàdá<âSãŒäÙå=çÏè•êUì$îÜï¼ñÁó öTø„ú¢ü·þÚú@€¸ ! ä™.¸ûì"%Ø'¼)+—+¶+ +ˆ+F+r*I)Î',&|$a"íÖN,ò ·jÿ›úeöbòcî‰ê©æã8àÞŠÜnÛüÚóÚ\ÛÜÔÝ{ßKá†ãƒæûéìíCò•öû;ÿU4  ¦AÅLr+Ä»@!Cãûçºbô1[ †™¬“ÿŠü‘ùÓöKô¤ñþî9ì…éçôäWãâìàFàÜßðß à&à;àAàœàBá<â2ã=äSå–æ@èCê?ìî=ðZò°ô÷zù¡û²ýÛÿèA™ï} Wc¶'vœˆ!F$¤&(.*I+è+,å+•+Ü*µ)g(Á&í$á"¦ !S úÕ [àTþÔù•õ‚ñãíQêçÆã á®Þ.Ý=ÜàÛÕÛXÜl݆Þsà=â·ä…çÄêÆî°ò+÷Lû5ÿúnÊ ½ QÕ]N's)˜RÈ–ð0ùÉPƒ’ Œ˜ˆŠÿ–ü©ùåöôMñŽî–ëÞè>æ,äâ;ájàÉ߃߯ßÎßààEà¯àcá`âƒã·äýå†çbécëí{ïwñ€ó×õ@ø­úæüùþíÐ _  qv„W—–!C$¢&•(;*V+,e,P,Ì+ç*­)U(ð&ƒ%¡#p!P¨ŒòÄ; §ûQÿ·úiöOò\îúê˜çwä^áßCÝÜ»ÛZÛ¿ÛIܩ݆ß{á䲿ÊéVírñìõú<þ·I p zÛ#lXcéåSMàËMe%èyÚø K…ýÀú ø>õ”òÒïí1êmç;åzã@âká¸àOàà;àeàUàQàzàáëáã>ä3åhæþçÿé!ì9îQðQò«ô@÷äù8ü^þD1fæ€  ´Í;ã4""Ú$'S)#+ª,Š-è-Ñ-B-8, +)ü'P&$"? ÄÖZê µ'üø*ô•ðèìŒé1æã^àYÞêÜùÛ»ÛÑۣܵÝeß'áãqåèmëï*óP÷Mû-ÿ냹 u ë|«ã®^R¢vè# ásá ( Rfxýµúü÷Hõ‚òºïÇìÞé2çåOãëáÛà à‹ßYßqßVßMßGßß"àáIâtãºäKæ@è~ê½ìëîñ$óõ øúý0ÿR}ß*k Æ F/C£Öó°!r$'J)@+”,A-{-}--V,e+û)(:&Ÿ$Ï"È $Ùb¨®’ m2ƒþYú_öÀòÓîëPçËãá߻ݜÜ1Ü=ÜŸÜpÝ·ÞàÇáØãhæªéíüðßôîøøü¢ò ¢ "íFwUÓükxÈfònÁòá• 2 hFÿ(üzùÚöôyñ»îÛëGéÊæ“ä­âáà^ßß÷ÞõÞáÞäÞߢß\à#áâãnä1æIè~êÄì ïpñâóSö°ø û^ýžÿúzîE ½ W%Av  €#H&Ì(+À,.å./Ï.;.9-¬+/*–(ì&ù$)#=!èÛlDÞ ;Ò þîù’õÁñîyêçæRãšà4ÞÅÜåÛ€ÛSÛŸÛyÜËÝ8ßá/ãtådè³ëªï‚ó¡÷ûcÿUH Ò 4Æ ep&Œ.)N™3v¿Î£P µ ëÖ£šý†úÏ÷õVò[ïMì‰éâæ™äŽâÁà[ßXÞÑÝÝsÝ}Ý†ÝÆÝDÞßìßÜàâyãEåzç êšìïŠñô®öNùËûþO®hÌ  SÑŠcaJ#ì!Â$n'í),-s.á.æ.Ÿ.Å-«,‹+-*)Š'ð%Ò#W!±S¨Qù¼ ÄšXþÕùSõÑðšì¿èÅäJáJÞFÜÛ—Ú‘ÚtÚ¶Ú.ÛXÜÙÝ¼ß â¤äæç¿ëðuô‚øUü®ÿ÷0 ö ¨y$–°Àõ &BJ#Û—¶õ  ð9˜ýàú+øõÂòòï×ì®éÄæäâŒàqß«ÞÞÄÝÝaÝVÝXÝ‚ÝæÝŽÞ¶ß:áõâåŠçêŠìóîfñÙóyöù¥û+þ®FwÅ Õ Ù"¥†Ž³ìé"Û%…(è*ê,D.#/r/l//.½-Ÿ,ƒ+K* (¶&¦$Q"vøÅø 3 ˆÃûÔö?òÂí†é­åâßÏÜYÛtÚÌÙ…ÙgÙ«ÙÚ¨Û…Ýßâ'å¾è¸ìªðØô•ø*ü¿ÿî- , Hì Ðço«F¶àê°á®"= G<j’ÿÆü)ú÷õ|òvï8ìñèûåaãmáà ßdÞåݰݩݙ݆ÝdÝsݲÝ]Þ“ß áøâåç#êôìšïò‘ô#÷ù ü¿þnÿB ‹ Ôzþµ˜µÅ"ä%º([+”-./30†0™0+0¦/ë.õ-©,c+à)(à%i#‰ ¢êCNr :oËüí÷øòîRé å?á‰Þ~ÜîÚþÙ<ÙËØ¡Ø¨ØIÙÚ‡Û‡Ýà]ãÚæÖê·îŒòCö»ù#ýZ¨õ p TðÄ’ÜÑLÒEJy_ J h …²4¯þWüÍùP÷ºô¼ñ‡î)ëÿçMåãŒáSà†ßÛÞLÞûÝÝFÝñÜÔÜöÜ…Ý¢Þèßá‡ã›åÖçaêížï.òÖô€÷]úEýAð$ i ÄmæÝ%‚Ã"›%b(Û*:-,/ˆ0E1`1a1]1G1‰0p/%.|,™*™(9&'# Ïf­Ð× ¯ Vv<ûöÊðìç±ãà0ÝæÚ8Ù,Øl×ÃÖHÖ=ÖÞÖ1ØGÚ¶Ülß©â)æùéèíñÿôBø¶û8ÿå€ _ p.kñál³ÎÖÂ_ÇûßB Ð û LÃWéÿrýäúrøäõëòƒïÿë»èÿåêãuâMáDàEßsÞËÝEÝ™ÜÔÛlÛ~Û2ÜYÝÆÞmàOâeäÉæVéäëmîõð®ó¦ö¯ùÀüÐÿ¹aþl ¤ Êø2Ç´»ó2"?%#(Õ*=-\/12v2®2Ç2Â2Z2³1k0µ.¨,m*â'ü$°!qÁmÒê Áþù¨órî”écå»á€ÞÜ&Ú¡Øg×UÖTÕ­ÔøÔÍÕtשÙNÜ>ßlâÚåréðìOðvóàö„úzþƒd e G¢|ê䃪8#‹¢DnGêk Í JúžEÆþ<ü‘ù±öšóGðÖì—éÏæ—äÞâ{á-àðÞÞÝêÜÜEÛžÚHÚfÚ ÛÜpÝ ßòàãZåêç|ê-íûïó.ökù™üÎÿÚ¿Qš ± ¿ lg—ö_#&T)ª+°-~/1-23\3Ž3²3^3‡2 1o/†->+)U&h#; ÐTšUÝ 9Gäúªõ9ðNëùæã˜ß]Ü·Ùs×°ÕwÔnÓèÒÉÒwÓÝÔ¿ÖÙzÛUÞ¡á%åéÂìKð±óF÷"û ÿÄg © ŸCA¬ßVÎá¼§PrMèY ì …b ©9ÿƒüÊù©ö`óíïbì'é[æ#äZâÚàŒß6ÞÿÜÁÛ‹ÚËÙ:ÙÙ/ÙÐÙßÚJÜ1ÞGàqâÄäGç"ê7í]ðzó«öòù+ýŠ ré6 T s¾µ£º I#.& (ó*ú,Ô.•02ù2¯3m4¥4w4£3>2X0p.j,)*¶'æ$"Ù.Ú„ Þü öyñ‘ìëç±ãRßDÛAØìÕÔÅÒËÑýÐøÐìÑ7ÓÊÔ”Ö—ØÛRÞIâXæBêðí’ñfõYù?ýëŒ;à ãÀ¾‡:®õ?UwqÃÜÃ_Ó p $Ô£›aÿâüñùÆö`óÍïBìùèæÏãôáfàØÞqÝÜšÚŠÙ£Øض×ã×—ØÈÙpÛHÝjßÍá~äGçoê íçðAô¸÷`ûÿƒ‰:Á ä èXßËI†"q%(N*Q,.Í/i1½2»3>4Á4ö4l4?3×1-0.ã+n)¡&Ô#!ö€[Ñ ŠjÇûFö÷ð7ì©çHãáÞ—ÚJרÔ<ÓÒÑWÐÐóÐ_Ò ÔåÕæ×…ÚÂÝ¢áÄåsé íðcôƒøµüºs.æ »ÅcnP+¯]Xpr×äÏ”6 Ï |,î¹ÿEý^ú÷¤óð¦ìbéwæ%äOâ»àßÝÜ£ÚÙÃØ@Øëר®ØöÙÛlÝpßÍá`äKçuê–íÒð3ô÷qûcÿÁ‘(o Q DXcÏœ±ë!›#Î%(a*q,q.0L1N2*3ø3‚4¬4ý3W2q0r.¼,î*A(‘%# ­Ž ?\ â2uÿ–úsõíïë`æQáÑÜ%Ù²Õ5ÓÊÑýІÐyÐÕÐWÑÉÒ…ÔÖ Ø¿ÚÞÔáäåáéçíõñëõ¿ùyýÃòV¥ ¦ <NÀLa¥ØìÙôºþèÕ» d ,uº׃þÈû­øTõ°ñîÃêÙçnåŒãÕá:àŠÞ ݲÛ}Ú;Ù>Ø¿×Ê×`ؼقÛkÝ–ßâ†äSçGê=í?ð—óO÷3ûöþ9è' è ¥ ½Ò+‚®”"ë$Ý&¢(b*3,õ-`/‘0`1X2-3|33û1&0G.—,+%)»&ø#!sª\Hµƒ ‹V×þÒùlôüîµéÉä àÎÛEØ’ÕüÓðÒ+Ò™ÑZÑ­ÑGÒ—ÓaÕ`×ØÙ½Ü"àÎãeçÔê-î¾ñ|õ(ù£ü ù X #ˆmPþ’4ÍeëyYòO…à # ¥ =¾>—1ÿuünù9öÀòeïeìàé çxåaãjá–ßçÝUÜÛÚ‚ÙŠØAإؕÙÛmÜÞæßâhäíæ¸é®ìðºó÷3ûcþGU%³W 2 n÷ìALà*"+$ &Ú'Ù)Ñ+ -/k0¤1‘23î262ê0¸/„.‚-,×)ô&Ù#Ò ßyn6?Û GB<þËø÷ò?íëçêâÞ*ÚL×ÕÔÚÓ?ÓèÒæÒÓ´ÓÿÔ¹Ö¯Ø8Û_ÞÒá5åHèëãíÞðëóíö8úÄýI™A3 – ~  ™ 8 á é0„~ΓÏã™'Ø ¿ Ì ï  ø~zñìþ¶ûBø¤ô]ñºîzìbêOèæ¬ãwáißVÝ„ÛÚ Ùýس٧ÚÙÛ&݈Þàâ@äwæ éìXïó‰öšù5ü‡þlú\L  Ȥ‘‚RÅå¯ Þ"R%(Š*ò,/¤0Ü1¼23¼2?2t1|0Ã/ä.-“+b)é&&$X!9 deÏy Ç  ÿ€ù¦óüí£è¿ãcß Ü|ÙÚ×6׊֡ÕäÔLÔõÓ2Ô!ÕjÖ ØvÚDÝ:à.ã æÎè'ëáí´ð^óöíøÞû þûàS¶Æ¼Ù í ˆÒ¼ï«WÐ<Œí N È 8 @ Î °,T&ÿéû¡øzõªò ð£í%ë éçûä¸âpàBÞ§ÜÔÛ˜Û¢ÛÜ×ÜâÝAßãàSâ¶ã]åšçeêƒíxð(ó­õÿ÷úü³ý3ÿÙå1Ãe , $Õ%u³îc!ø#&#)­+à-Æ/^1b2¸2{2³1Â0[0ý/½.ñ,+C)œ'&"$1!’–  s ùºtýiøŒóPî¿è6äáàÞiÝÆÛ Ù©×œÖìÕcÕ&ÕêÔ/Õ|ÖTØ3Ú<ܜޣààâBåÐç‹ê=íÕï:ò²ô“ö(ø úü­ýÿÖÓK e ‰ u t d^€Ê®  { 6 œÏÿ1üYùŸöÙóñ›îiìEêêçåGãkáà9ß©Þ~Þ™ÞìÞ¼ßçà â<ã—ä%æLèvêŽìªî°ð+òÛóºõ÷0ùðú ü”þÙ/•;ñ j ÝŽ •ÚØ"²%C(*†,,.†/¢0§152€2•2‰202.1Ï/).„,­*®(„&F$Ç!¿ÔÍÕ): жû‰öjñ#í|é$æCãªàÌÝ0Û<ٱ׎ÖÖéÕþÕ²Ö•×û×cØ-ÙúÙ4ÛûÜ*ß»áˆä ç#é3ëýì1î­ï‘ñóŽõð÷múáüJÿBÑ£I2 * ï m©h´­/‰Ëà› 0 Ä  .hÔÿLýòúwøönóÃðfî ìêèyæåþãŒãfãWãAãJã‘ã ä³ä‡åæÀçõèêRëžìýíMïðãñwó.õ÷ù[û„ý’ÿ¬6× ™ UELyà  "‘$'Ž)ý+ó-U/€0X1ò1V2œ2¡2f2í11Ó/ê.Ñ-<,r*6(°%û"Ò =¯y;ë ”È)ýZø*ôhð|íëOèOåòá ß~Ü ÚÃÙãØrØñ׆׌×v×u×O׹חػپÛèÝ%àüá]ãjä0åpæïçVélëî!ñLôn÷Vújü@þÖÿ÷Fž Ä ¬ÊkŽz4ׯt 2 Œ -ºgHþýàûÎùÿ÷6ö(ôòð î[ì ë=êQé“è1èïçðçÒçÍç¶çëç•èøè‡éVêë®ë{ìRíüíïVðÜñ­ó‚õ_÷ŠùÜû*þ>}ôšc  èϾ¸¸A!x#«%ª'x)Ý*ð+ã,Ã-e.».ù.Ø.q.½-ª,í+R+E*Ý(<'\%R#j!ñØwŠf€ åò¹ýßù÷}ôjñJîqëÛèHæ>ä¹â1áàß1ÞbÝ´ÜÜÛÛÛ=ÛgÛ=ÜgݕމßXàðà†átâRãfä%æ/èxêí¬ïÿñÖó¡õX÷où¿ûáýüÿAŒeÏÑ_ é V Ä Y õ X M ä " ä |êL¯ʱÿ°þVýÄûúmøäöõTôDó]ò¶ñ/ñŽðÎïøî1îíKí&í+ímí©íî@î[îtîœîúîžïðÇñHóæô‚öè÷PùÎú‹üHþ#1~²Ï Ë £P'4—IùbKç> N A  * Œ û !·  gš™ùÿ̺W   ˆíÆÿ…ýû¹øcö^ô´òdñQðgï¬îÔíðì7ìuë×ê6ê¶étéqé¸é0êÃê^ëºëáëòë4ì¥ìWí0îï.ðHñ^òróƒôgõHöR÷ŸøþùuûÍüúýøþ»ÿG“Þ /h™3Áÿóþðýäüü7ûhúžùÝøï÷êöðõõ‡ôjô–ô¼ôýô<õrõqõgõGõõ¿ô²ô õ•õ"ö¤ö×öŸö öõ¤õmö~÷¾øËùÉú¨û§üzýþmþ¿þ­ÿ És€ÍßF&+æ£ ª ð 9 £ B h Ñ „ ¦  m  ¦ — ß Å W & × ; ¼ È ' œ b ( Ò t j ƒ ˆ o õ-=3*fªøÿ`ÿêþþ™þ¯þªþ­þ ÿSÿ§ÿÿÿDmŸºÉûO¨8C;;7?MO_k7¦pÚÿŸÿeÿ5ÿÿÆþ†þDþûý³ýrýJý.ýýÇü;ü…ûµúâùüø?ø¨÷ ÷zöö¡õ0õÐô•ôªôÌôãôÕôûô>õ¦õöRöIö9ölö÷—÷£÷€÷u÷Ý÷røÑøÏø†øpø´øyùîùúú[úûïû‹ü·üYüüªü©ý5þpþ—þ£þ|þˆþžþQþ˜ýÔüëüßüZüÆû€û¤û(ühü®üâü÷ülý(þÿÂÿÌÿ$ÿ¤þ»þìþãþÁþaþàýLý¼ü‚ü ü&ýøý²þ:ÿÍÿ¨»º‡eßV¶ñ"DU!ßõFg¾M©·¨çiÐ 5 ?  È‹5¯ñN Ì\//'üƱ¼«k«5Ù{®;ãµu-Ëÿÿ[ÿ=ÿ!ÿâþŸþfþNþ-þúý™ý@ýýÍüÄü­ü•ü†ü‡ü’üuü<üåûvûSû)û)ûFûMû/ûéúÚú¾ú¢úœú•ú«ú±úÖúû!ûûÃú|úYú_ú9úöù½ù©ù¾ùùEùÇøfø7øøøÖ÷÷7÷êöÌöËö°öžö¢öÕö÷M÷€÷÷º÷ê÷:øøÞøù]ùÆùDú–úÒúÓúûŸûOüøüˆýþ›þÿ†ÿ” ~%ÃXÎ[…¸Ü;d ¾µˆS+$6F?*ô¶7Þ6äQÒœqKðõ +$ìÞíõòÝËÖìùþ5OV\az~zgXLXhwpzvl_^G?(÷ß®v9òÿÊÿ“ÿlÿ*ÿàþ¡þtþ<þîýœý:ýóü¸ü…üGüü´û_û ûÆúuú&úÜù¥ù{ùIù#ù÷øåøØø×øÍøËøËøâøù/ù\ùù²ùÉùçùúcú£úäú,û†ûÔûüpü½üýwýÆý'þrþÊþ ÿpÿºÿG…Å6m™ÃÝæìõóÜÒǯœ‡teQ:ùÕɹ°¨{rnuokvx€~›ªµÅÑÞ÷ !7OWršž©š›‘ƒ†‚†w|mg]YI7# ñد–jI-Ùÿ±ÿ~ÿSÿ"ÿÿÓþ§þjþKþþúýÒý·ý•ýnýMý9ýýýçüßüÓüÆü´ü¦ü¨ü¢ü§ü¢üªü¬üµüÏüãüïü ýý"ý8ýUýoýyý’ý¥ýµýÅýâýöý þ'þ>þZþsþþ¤þ²þÏþôþ#ÿ'ÿ9ÿFÿWÿmÿ{ÿ‹ÿˆÿÿŒÿ•ÿ’ÿ•ÿ‹ÿyÿnÿ_ÿ\ÿNÿKÿHÿHÿ=ÿ;ÿ8ÿ9ÿ5ÿ7ÿ?ÿHÿSÿVÿgÿvÿŽÿÿ¸ÿËÿÛÿòÿ0>U]o‡˜¨·ÈÎáò ! ëäÊÓÊ¿§šƒmT<$ üÿæÿÍÿªÿ˜ÿrÿaÿDÿ$ÿ ÿçþÎþ¿þ´þ¦þþwþlþ_þ]þ\þUþFþ>þ9þ:þ>þ9þ<þAþJþMþNþRþOþVþRþRþPþRþWþVþUþYþfþnþvþ€þ‹þþ”þþ§þ§þ¶þºþÄþÈþÒþØþãþíþòþþþÿþþÿþÿÿüþÿþ÷þõþéþçþæþìþâþÛþÜþÖþßþÝþãþçþïþüþÿÿ.ÿAÿRÿHÿ<ÿ+ÿ(ÿ:ÿ\ÿuÿ†ÿ’ÿÿ–ÿ•ÿ¡ÿ¦ÿ¹ÿ¾ÿØÿìÿ úÿîÿñÿñÿúÿôÿ úÿ  óÿÆÿŸÿ…ÿuÿÿ’ÿŠÿlÿGÿ2ÿ>ÿJÿHÿGÿJÿfÿtÿÿŠÿxÿcÿUÿPÿVÿ[ÿeÿgÿ_ÿMÿMÿPÿ;ÿ!ÿÿÿ#ÿ:ÿAÿ;ÿ4ÿ*ÿ(ÿ+ÿ6ÿ8ÿ<ÿ;ÿJÿPÿ]ÿ`ÿ]ÿeÿgÿeÿkÿdÿkÿ]ÿ]ÿHÿ>ÿ1ÿ$ÿ'ÿ+ÿÿ ÿÿþþÿþþþÿÿÿÿÿÿÿÿÿÿ!ÿÿ*ÿ)ÿ/ÿ=ÿDÿPÿSÿ[ÿdÿnÿÿ•ÿ’ÿ—ÿ™ÿžÿ¡ÿ ÿ ÿ£ÿ›ÿ˜ÿÿ–ÿ›ÿ ÿ£ÿ§ÿ°ÿ´ÿ´ÿ¿ÿÁÿÑÿØÿßÿàÿåÿêÿíÿñÿùÿûÿ  øÿöÿíÿêÿêÿçÿáÿâÿÓÿÎÿ¶ÿ°ÿ ÿ™ÿˆÿ}ÿrÿsÿ`ÿgÿfÿjÿ]ÿYÿYÿ`ÿVÿ\ÿXÿgÿ[ÿ\ÿeÿlÿnÿ{ÿsÿ}ÿxÿrÿpÿnÿlÿiÿnÿsÿtÿrÿÿÿÿ“ÿ™ÿÿžÿ¨ÿ¯ÿ·ÿ´ÿ²ÿ°ÿ±ÿµÿ°ÿ´ÿ±ÿ®ÿ±ÿ´ÿ´ÿ·ÿ³ÿ¯ÿ°ÿ¦ÿ¢ÿ˜ÿ™ÿÿÿ‹ÿˆÿ‡ÿ‡ÿƒÿ…ÿ€ÿ‹ÿ‡ÿ…ÿŠÿ”ÿ–ÿŸÿ›ÿ›ÿžÿ¤ÿ ÿ¦ÿ¤ÿ¨ÿ£ÿ£ÿªÿ¨ÿ¨ÿ­ÿ¬ÿ­ÿ°ÿ®ÿ®ÿ¨ÿ§ÿ§ÿ©ÿ«ÿ¯ÿ¶ÿµÿºÿ¾ÿÌÿÎÿÒÿÜÿÝÿåÿìÿëÿñÿúÿ  .+,-..86;627/) úÿþÿóÿñÿâÿÞÿÚÿÕÿÁÿ½ÿ´ÿ¡ÿ ÿÿ‰ÿ~ÿ~ÿsÿuÿuÿ}ÿtÿ|ÿwÿwÿxÿ‚ÿ€ÿ‰ÿˆÿœÿœÿ§ÿ±ÿ®ÿ²ÿ·ÿºÿÃÿÀÿÀÿÂÿÂÿÈÿÂÿÇÿÉÿÄÿÌÿÌÿÌÿÔÿÚÿÛÿØÿÝÿÝÿàÿàÿäÿáÿìÿæÿæÿèÿëÿâÿåÿéÿêÿêÿêÿóÿõÿëÿõÿìÿóÿòÿïÿêÿêÿâÿáÿàÿÙÿÒÿÐÿÐÿÐÿÐÿÍÿÉÿÈÿÊÿËÿÍÿÐÿÍÿÎÿÎÿÑÿÐÿÓÿÚÿÒÿÙÿÒÿàÿâÿîÿìÿøÿùÿ '/A>DBEJ]aXU\agjrt€€ˆ‚‚|ytwhgcZNE:/%" ûÿøÿèÿåÿÖÿÐÿÅÿÎÿÃÿ¿ÿ½ÿ»ÿ·ÿ°ÿ³ÿ±ÿµÿ³ÿ¸ÿ¶ÿ¹ÿ¹ÿ½ÿÅÿÂÿÉÿÊÿÎÿÌÿÍÿÍÿÌÿÌÿÎÿËÿÑÿ×ÿÙÿÛÿßÿâÿâÿäÿòÿòÿýÿüÿÿÿ)")#,660-()&&)!%()")3<.,$($ &  þÿþÿúÿúÿ $*38NVWkqp€„‘—˜ž¥¡ª¨¨¤¨¤ ›Ÿ˜‹Œ…}zwsrkjdd_`YVUTQNKMED=:60153)"!&#!,&*.*.?@:=@>FBGEHBE?FDFFHEKMVWQ_c][_datlmhglfjgegabZ^SSNMKDNPIPLKIPKV[uloqxz…Œ””£¥®·§§ ¡¡¡›ž˜š‘•‹Š…†……‡ˆ‰‰‡Œ—Žƒ‰ƒ…€ƒ~xympifgegWabYZYZ`\ccdpgrstsvvxy}…€ˆ{}vyxy{„‹…‰ˆ‹‡ŒŠ˜‡‡†‰…„}tsxrpqkqjovq}‚t|uwwu{t{z{ƒ‚…ƒŒ‡“œ¡‘ŠŠŠ†ˆˆ‹Ž}S®ÿÐþoüOúû§þzY:œ%bùÿmÿ ÿÎÿÜNŠOŒÿÿÁþÓþ#ÿ¡ÿB+üI›y«ÿ©ÿ=â†$-:šÿ ûÇøú–ýMlú…ȼýÿÂþ¬þ­ÿ«xg:ŠzgÿmþÇý}ýÑý«þZ#ãÞ­ÿ ÿšÿ£˜³n Àÿxÿæÿ׿éÿoÿÿïL%rK±ÿºþüÿÚˆóÅý¬ý™À"Žÿ‚þ»ÿ`¦&•þÿ•#ÚÄŸÊÿ£ÿdžÈ ÿþÿØ*Øÿ™þ]ÿ/Šÿµþ sÿCý–ýßcÿ¿þ|è–Ÿÿ¬þ5$€þ ÿwäöþþLÿœ¦©þ¿þSxù#üÓü ÔaûÝü‘\LDüû?œ+_ÿûÀýlÚòúûƒT/sþ«ú÷ýd&+¢ûÄû\©|ü°û»z¯þÏú˜üF`b.ÿ–ÿ…¸)F"ÿäÿcÿĺŸ‰Çûëü¢±%eþòûÜþëBÚçþ¤ÿjàÂÿ"ýþ^ìzýÑúiþã])9ýùÒüv®PcþÀõXÏû¶÷ù¯Þ qËûLôâöõÿ.ºßÿÃýúÿñ*rþ‡û³›ü?ú4ÿ,Š'üKûËþõî²ÿíÿ¹Éiãý9üTÿâÑ>ðþGÿtˆT¾kÿ#ÿfý[ý&9 ªmÿë÷ø»ÿõ …ü ü/ÿ„^C‡ýþ‰Ã=œøùHó  ÿø¿ù/Ófaüñùªþ¹äýœúcý¨«ýÉúÁýÊ7ÞüRûßÿñ‹„.úŸù“þRÿ4ÿþ§ý~þuÿ¤ÿ‚ýNüšýÄeÎmÿqþQWgdSþ>,&‰ÿ1ý× P·ÿOüaþ”G]œ‹~jæÆú V! µ¨ÿÄûnþ5uøÿþkþ)v‘¾ÿUÿÿ>ŸÿûÞû7¤­ÿTüü•þ£M‰Yþ^û‘ýV$‰ŠýWü8iÔþ˜ý«ÿ»ƒÿlýÂÿˆ„áþnÿæÛkÿáþ õfÿÿÓÿ&!.í„%ÃýšüêÿyI4cý'ýÿœ=#öþû^üŸ-Ð#”«sâþ3ýÿNOþñþ½®½¡ýþü(0õÿÖü¬þ j|ñúIú#@ ú¡ÿ;k6 jýyÿ.ÿ%þÚûÿ½“VŽüçûÿÿoFÿÒÿM*$ÿ\ýàÿVnYåhF_ÿ“þ²ÿlæÿ"ý¿þ.G lý&ü¬ÿRDÜÿÐü³ÿÏûÏÿdüàþBæ9ýöý‹Ùï\þ^ûþ“ïZøþùþ IÒ:ÿ2üõýæžS†ÎÉ@/Þ,lŒ’î÷+þDýCíÃþûüìW]Ï…ÿüþ|þûü]þɉP¸…þ ý“ÿR`&) ÿÊý`ÿjjrýÅýÿ{ÿ  í™ùüõ”ûi> ŸþŽùÿûÑ"XÿÄû§ýƽSþ…þ…øª4þ™ÏÕ>˜þ‰ÿ5òÿ=þIp wüÉû={Ž~ýýýPôHþ³ú¸ürÖÚ\þ@ÿ±ÍýÓü—ÿœ$p*øv÷ìýO=ç˜Çÿšþrüïûáö¸øû¢]†¬ÿRÿ)ÿþŠü(üÎýíDW œý~ú½ý?çôþRÿÿvý+ýÅþ‚_ú¡ÈwÊù¢ùÐAC 4pû©øbý›îÚüêú¤ýLªÒ¯ú²ù€ÿš½øÎü½ùœÿ¿ døSù@@ý‹Iûü`_ Ü}ùsõyût ^ ŸFþ&üü,þ0ÿ§vb»výÏýuüáýøÿú­OÄ9û©ù³ýA÷åôÿ=ý9þ«dF ¥Iþéûaü¡ÿh&í:ÓûýÎþ†xþƒý‰þ®ÿW ¿tÿ‘÷õNùï›D¥JgýIüèýS0y…yrÿ°ÿœèŠ"þûnúÑü?i;;ýáøúiW7 À":þúû™úÂüþk5oàþÄù‡øûS<À-û]ù “ ÄÒúíñŒóªþ• ï òØþ9ÑÿÊû‰ø¤ú2Äï rÿWûiüÑÿ»6¿oþ£ý¶þ¥FBéÿ/6›þëü ýaã}õ¬ôãýHû[þ¿ñ Ü4ü?õÃöµÿµG UüÑ÷ÎúÆ‘U5Ö‰WþmýÆš|øöyü®ö Øuÿ†úûúÝþ!I]&¯>ü®øú­Ôæ½Eù ÷ýxǵúŠüÈ ^ù¾÷ÿU Œ ¹ýXô—ôqþ‰Ü Ãû­øµýà¤yý¨úÅþtªý¸2ÿ¤úw÷ ù6ÿVQ ¨qCû{ùþ±àšýü3·üþJü+üþuY4X¿ÿŒ» sÞý¡ÿáüÿüeþƆhwýÉýÊ=ÿïÿ&ÜéÑšýXü9ÚfáÿÂüóûèûbý­ÿS e³È ýQüÿ¦õ„þEü üÍÿfz ÿù›÷ïúW×¼pý;ü‘ý¦9 ¥_ÿ¨øèøÿúÏ"›ü±úfú'ü^. ›„Ùûúžü*Ï x”±üöøQù—þÝâ[cÜýýÙþÍ•Fh¡ýtýÝþJc¼à­Ýü¯øÿ÷ühJy)¶?µ„þƒýÔÿ{-i5ÊN@ÿ¦þ¡þgÿàŒàÿ´² Úþ™ýòþÈ”ÅrÕú(úÿ"Ïÿ½ý8B‡±üWöHöóü`Ü ºÌÙ÷ÿhüÆø˜÷Óú¥ÝÜ ×ý·ù[øùþ‹bù  f¥ü/÷Jø±ýßíXþüêûjþ â¢Ïc¥2Ÿþîü›ü¢þv9Ïûýþüý ýíýeÿ0‡éAáu’ëcýGû8üFÿ¢-àrŽVÍþgü¿üÿr©§äaÜvkÿâýzü~ý-\¤ÿ÷ÿ9ü)ûþù±¯`Úÿ§ MÆÿRûÉúÒþâ>Ñ]>Ã"Ú^ÿAþ`ýøüQþ£Ñ¡oÇÿÿþ‰ý)üÞüÞÐrw+¶ûvù1û…þÔŸ L´=ˆƒÿû´ùêû%WÔ‚à˜äùþüòú3ý¡O’#RfþÖÿc‚[°ýAü–üÐþÿÛ-¾ÍÎÿjÿýþ¤þCÿ¾àjð‚s(>ÿ)ýÞûåüÕÿ¤ Žþ.ûµúÑüêç.fÿ|ù-÷ ø(üxgä1-Rü4ûÈýüÏ*=µøÿÎÿþ+ÿ¼3ñýütý¯&iãþÁµÜ;Šþhû¬úýÀÿWàÿÁ*GNCÿ3ý ýûü‹ýndVò­9ûÿ˜ÿŸýFúHùÇúÕý°Ó étëúö4öŽû°`ú¯¨ÿÑü¦û#û`ûhûûúü\ÿ‘¶¾ µêúû‘ù(úoüÀ§=3ZþÖûfû§ü‘ý¶þ( •ÿ€©aMìþJûàûÎÿX D¹ÿ üzúkúÛû[þqþ~}up ·ÿ¤ý ýþ¹ÿ³¤¯Nñüsù'øôù˜þ’Û¿EKÜÿ«ýÞü”übüÿý·|p¯éPþ²ú‰ùGúRüïý­ÿ·;Ð £ "óþêøÆö|øóûMÿ6~í‚$-ý+ú³úCýä4‡‘fGŽþ¿û8ú'újûDþ-ü½REþ(û©û*ÿèÕÈbˆ„gLÿ¦ýÄü¤üÞüJýºþdv¥ÚáÿOþý7ýôþ1Ü‚R5þáûû:ûïû&ýïý%ÿùÔÜa'0÷ý¿üuýªÿj] èü¹÷tö‰ø6ýÒiñ¬ó¨ÿÇýÄýMÿóãToè²ý7ûïúîüëÿ>„Få–²þýûýVäâäÇ;/þýÀüÉýiþþ þÿáø÷1ê#­Ï2ÃþþýQþÿÓÿ³ÿhþ—ýçý#ÿ9¬H°þr»kÕþˆþ%ÿ•ÿ°ÿµþ‡ý!ý¿ý<ÿLÞðƒ4<Ⱦ­vÿyþäþ¡ÿ—ÿÏþÒýŒý›þñy@‹iå®è9ŠªxE©›ÿ#¡È<€þ©üúüÿ=äû¦ÿêþâþ¾ÿ±Š±oò'eÿGýøûiüÝý~ÿÍ )Èÿ:þdýOýÙýSÿi‡{©¿ý~ú—ù¹úòýuÃá ñÇ'Ïÿôþ‘ýýßý‚ÿ7z´„×ÿ²þþ¨þ™ÿz>`N]úþPþqþÅÿÊ øAsÆÁÿ½þÌýUýáý[ÿF6O»Øe=Š*eÑžÃÿÿµþõþÄÿ\p™!ÿâýŠýöý_ÿÀ2ûÒËE—þvåþ>þƒþðþXþJýÛü–ýÿÓ)¶÷Ò;ÈγìSOpÿÜý™üQüý þIÿ/9+l²ôÕ ,ÿŠþ þ¼þ~þfþÚþÿ90>ÿ‚þðþU¼ÈRç!ö8ÿ¹ýýÉüóüþ3E3kFþýÌý˜ÿâ‡Yÿ¤ý·ü¸ü]ý°þ7>k1ðàš±ÿ¤þþMþÿáÿPzÿÿSÿ9aî±aðÿ°Yƒÿ”þ!þ™þ5ÿ}ÿÔÿ÷ÿãÿÐÿz@hAô¿!]þÖü6ükü$ýtþ;\ƒ7>­üÝC–áÿëÿÑÿ$ÿ:þZýïü~ý¶þ´ã@›$ªîðXøÿFýÃücýËþdiˆºÉÿÿÖþ&ÿÂÿ’2Êá0ÓþÖýDý—ý§þ-×Ýàîg+ÿ‘þ—þÿ¦ÿ9×…Ùo„ƒÿþüýôývþ ÿæÿÜz¾¿k»·ÿêÿŸq×ÚFÀùÿAÿ¿þæþ¼ÿ@¸›vØs‘ÿÿÖþ4ÿÄÝ13ÕÿQí î¨:ÕÿEÿ—þVþÎþžÿUî—Ëÿ«ÿ{ÿ’ÿýÿ.)#äÿ”ÿgÿ]ÿ}ÿ ¼7IÔŽÿˆÿN¡ÿ[ÿsÿ°ÿ¼ÿzÿ%ÿ2ÿ…ÿÐÿ”ÿÿíþÿÿÓÿíÿÆÿ—ÿ¨ÿãÿÑÿ\ÿàþÁþÆþÝþÍþ¡þ¬þÿdÿnÿòþ¬þ–þÓþ,ÿ›ÿêÿÔÿ’ÿ!ÿˆþûýýGý ý"ý§ý6þ¦þëþÝþ¯þ“þ”þsþýý˜ýý·ýæý þ×ýyýýçüëüýRýˆýÎýþ5þ3þRþ[þ/þÇý‰ýaý&ý¸ügüxüêü«ý†þòþàþeþ×ýpý%ýýúüýBý†ýÉýñýßý©ýtýNýýßüÕü+ýÑýrþÙþÒþ~þþìýÆý¨ý¡ýçýPþ¬þåþÅþþ5þ0þ_þÄþ\ÿÏÿ Nºåߺàèì%w†„¥&·=¨EX¸”Æ8ð¶ ½aÙ˜¥ãÇG’ý­µ)×°s ß ö ¼ d & 2 d Š ´ ì 0 ‘ ç    ? § \ ; Eô I } ~ i ”   ] Ì "  ‹ Ù!øÏ/àjxæ¹îäEÿYþþ÷ý2þwþ|þþ`ý@ü ûâùùßøùxùšù=ù*øÄö0õ¯óaòfññ`ñþñ£ò$óUó óQò&ñâïŽî^í…ì4ìŽì`ícî=ï°ï£ïQïØîWî×ífí2íKí¨íînî¯îÇî¢îxîxîÂî;ïðñBò8óÊóñó™óó~ò3òQò×ò¼óÌôòõöö«÷ ø)ø?ø]øµøDùíùú;û–û•ûcû+û û%û û@üý»ý]þÇþñþöþÙþºþ­þ®þÂþÛþÿÿ-ÿFÿXÿ‡ÿ±ÿêÿMœLhU</Fd·àtëjÂyÇ*£ÿ<h¬RÌa Ð , í ñ ã ¤Š8´CÌ&><MÀJ<ëÛå[cø!rB " |a€EsË E~HÇ|Å« ¥Ã]ÿ üúÈùUú@û ûûúã÷6õ¥òØð0ð>ðëðkñ-ñ ð}í êbæ4ãÿàêßUàÉáÔãÏå6ç½çZçfækåªäXä™ädå`æ7çÖçèÑçuç6çdç<èÅéØë5î³ðÏòWôlõ1öõö§÷€ø€ù{úšû¤ü”ýYþ ÿÎÿß}Î[›Ü ,  Ç 8f9× g  ã Ø  P × sì2+ãwÒ ! P † Ø  T C ™í&Oiþzüû“úÚú†ûWü ýUý×ürû>ù_öMólðîUìDëßêåêëIëiëlëeëZë‚ë ìÍìJíwí*í\ìàêéRçæ åüåFç'ésë›íoïèðéñ„òÓòäòúòðòó!óoó¢óÎó(ô¼ô õÍöLøúÊûŽýÿ+ùh¥¸ÏÍËÛbØj(ù¸y.î¥Z â ? Œ ¬ § ˆ A ¿ A Þª¤Ö@ Ù ‡ g t ­ ½mäN|WÊ]Sܵ›þ·{È–ç}Z'¯MzuÙ³1gp9>ü\mC 0 é R I ¬   Ø Ü ‡‡ž ¼ 1 Ú6þ“úI÷ƒô’òBñ›ðžðóð†ñJòéòZó9ó·òñúïÃí5ë«è æänâná á6áÈá“â•ãáäæYçèéVêÏêùêîê£ê^êêâéüéaê#ëAì‹íï‘ðò«ó]õ%÷ûøØú±üCþ´ÿ¾lÈîñz<F…ä: – ñ ; ­´ˆ #Ô#^|›£ † © ë I¤:R<¸>  ¢ öGž'ìô=·V žÿ.ÿ¢þþEýlüŠû•ú˜ùzøM÷úõ¦ôkóFò/ñYðÌï€ï#ï¢îîµí®íÇíàíî<î“î¼î¨îeîîí=í‰ìÙëXë%ë)ëŽëPìdí¢îÛïâðÄñžòeóèó=ôoôŸô­ô®ô†ôtô©ô õ¬õqör÷©øðù:ûdü_ýþšþÅþ”þOþþÅýýjýzýÔý8þÍþRÿôÿ} c¬ýGr{˜°ÃË·¼å+i“Ë#‰”X1úu©Àð G  7 ( # "5ÂttÇí7ÑZ/iTéjéùƒ•Åh@ÈÅÄú*Tí²Ñßœ/A]Ñ ± Ú¶CþYû¬ø_öÐô’óóÊò¸òòˆòzòÚñÀðXïËí¿ëGéÓæŠä•âÙà¬ßßåÞ6߬ß[à%áîá¡â^ã"äÎälåòåaæšæ’ææªæßæ&çëçé•êTì6îSðtò“ô‹ösøTúüÑýgÿøJkJ‡ °Š¨á Z  ņ”ÏÉyò60åk×=†éˆUo¶ß ú{Þ÷Òò P ‹ ì@­> ÿ+}ÿÿ‰þþ‘ýëüüûéù©øR÷ýõ¥ô^ó'òñ,ð{ïîîˆîTîFîOîRîgî“î¿îÞî÷îïïïèîÅî¹î¡îŸîî”îÌîDïâïªð’ñ}òfóôÚô¢õ|ö?÷ï÷~øÐøåøªøUøÿ÷û÷@øÒøÂùÚúüKýNþüþ}ÿ³ÿ°ÿˆÿOÿÿÜþ·þ}þ*þÝýý!ýßüÖüý…ý þŒþéþ ÿÕþbþÆý ýOü¦ûû•ú/úúùØù¸ù•ùù¨ùÙùðùú?úúÄúäúû<ûšûü›ü^ýþÆþÿMÿpÿŒÿ¹ÿ¦tšÛ$|È U ­  œBEË5‡èó:È~)Ak% Ó ^!"ä"ˆ#$$…#9"õ]«B[¼ &ó¢ÿã×㟠– î :•Ö¨þûD÷´ó¬ð‹îVíëìMíKînïðÚï¶îÏì4êçÁãÈàoÞ—Ü>Û9Ú°ÙrÙcÙÙäÙéÚjÜ_Þ‹à¬â¤ä4æJç°ç‹ç5çìæàæç®ç×èŠêˆì°î!ñ²ógö(ùÓûŠþ8Åýâa ” „ ; ¹ + ® EîÍæ@Ö‘W'Ð@?Ôé¢ ûă`9üF¥HËDp.s N ãmðœ}þ¢üýúªùŸøÁ÷÷wö ö¬õfõõ¿ô=ôó’òZñïïƒî í¯ë‹ê¸éFé(é\éàéênëaìbíLî2ïõï“ð ñ—ñòñò-òò"ò8òròíò»óáô:öÆ÷uù9ûñükþ™ÿjò3WXUaw‘²à<²,˜"~Ÿl’ÂÞñ7¥9Áÿ[ÿ ÿ’þßýýEü…ûâú úVù¯ø:ø°÷÷öðõ‹õ õŽôô¡óAóùò‡òò¦ñgññ½ð°ðãðmñ÷ñ€ò&óáóôõ_õÕõSöÐö<÷ß÷Åø¾ùÌúîû#ýzþøÿfÊ)x¿ÝÀu - ð Ý ÿ Røÿ.=*ÚvØ­§UÌ y !!©!)"s"®" #‹#C$%Þ%Ä&S'‘'ù&Ë%™#´ NÈ,Ä%h] à R ‹ o ¹ : D :âýŒú÷‘ó¡ï²ë èØäVâ‰àÙßAà›áã…ä’åìåDå²ãaá’Þ ÜïÙlØs××Z×â×¢ØÙxÚõÛðÝZàãæ&éïë5îÓïåð‹ñõñ[ò÷òãó\õ4÷Qù“ûøýoäbé} & ØOrIÔÞxÐöôå­“u‡Å9ß¾²Gª¹OxAªáß¶zGö ý Gã×&µi‰»zÃÿ½ýbûîøköôØñèï=îàìàëë®ê}êêºêõêZë«ëçëõëÞë¤ë,ë‘êüé‚é&éé2é¡éPêHëxìÓíDïÛðaòëóqõÒö1øgù‘ú¦û€üAýîý†þÿ¢ÿ6Ó¤ŽªäC¦ö/ ^ B Å ò Î c È L æ\þÁ‰_: ö° ÛvØéþáüÙúùp÷ ö5õ ôhô5ô&ô÷ó£óóüññüïßîºí®ì ë½êê…é9é5égé•é%êÚêëQìíî¨î?ï¬ï2ð«ðôðjñ+ò óôBõöî÷mùÊú/ü­ýAÿÒMó‹*µ8 « ö  á•L趤Àë;è<_ ! "E""ã!O!š Û<ñ‘r6MX˜Ð71\[­Æî©› ` Ì¡ÿëþ«þþõþGÿ4ÿƒþKý¤ûXù_ö6óëïƒì2éðåßâ?à'Þ¸ÜõÛÜÌÜAÞ\à‹âräùåîæ2ç–æPå×ãnâ8á>àåß*àáZâìãÑåè«ê~íðµóßöäù²üÿ¨Ù¯JÒkEG‹ö‘ O Ø vgb*Ó6IK)›¼º‡BøÁš—ÙW#4E-ãG?ÕÞ ~ ë=ˆêþhü,úEøÉö¼õõµôœôµô¼ô¥ô<ôŒóò1ñ¨ï îmìîêœéŒèÆçAçç/ç¬çjèié‡êÝë*ígî‘ïšð„ñ;òÛòVóÒó3ô·ôEõöìöî÷ùbúÎûfýÿ·_™{Ž ‚ @ Í  T j t [ 9    K Ž è V ½ /'ì ˆ ± § W Ý2~Ê/ªYÿ?þfý³üüXû¾ú6ú™ùôø3øN÷öcôWòðªíSëUéùç(çòæ4çàç–èQéùébê®ê£ê­êšê_êêÌé‹é(éäèÃèôè—é™êêë¯íåï'òQôYöø‰ù•úiûþû~ü÷ü‚ýbþAÿV—ûfÁ(Žþ a © ý SzhV0÷–/®ûÔ¿ä2|Á-Ð…#ºJ°&gKûm·»è sǵm®7  šTyÎýmûäù%ùïø»øÚø(ù¶ùúúÙùxùø)÷MõçòHð\í˜êòç—åä%ã,ãµãÇämæsèpêì{íªî‰ïð#ð ðáï—ï#ïÑî£îÉîAï ð\ñõò õX÷Éù,ütþÇøñ°7Ž ¬ x  ~ Ô  C } Ç +¯EàÜõ+&þˆ²„ðêŠñ<e  ð b  ø!< ûéÔŽîÀ-Vÿ;ýûùøùöõŽó`òjñÕðˆðŒð¹ðñnñÞñ*òjò‡òzòRòöñ‘ññ±ð]ð(ððEð¢ð9ñòèòñóõYö¨÷öøHúûÉü÷ýÿ è«VÜ[Å(….⿟ “ o S  ‘ ï À ? ’ Ã Ú Û Üòiã‹NþÀhÖ#4#ØÿcþÞüDûŸù øö,õôõòò~ññãðÎðÇðÀð±ððGðÓï>ïvîOíÏëZêé.èŽçzç èéVêªëíYî‹ï”ðŒñdò9óÜó8ôlô”ô£ô¼ôÕô!õ€õaö÷*ùãúÂüÐþÄwÅÞ«M±÷8‹æ0Šöf È 5 ° S  ê Ï¢ƒ$ß Ò\¾6Â(™Yh¾„† Í—!g”¡”ûÿú*t±ï Z B u Ì 4»B¹!ÜB© Ü À£xy¼gÿ“þîýzýýÍü·ü¡üŽüjüMü*ü¥û«úAù ÷–õIóùðïËííµìÒìAíôí©î`ïàï^ðÊðNñòÆòzó ô{ôô’ôUô'ô ô:ôÃô¿õ÷løÙù:ûšüèýÿ@ŒúræAkJ ê @ y ¡ Ã Þ  K Ý 7 “ ù ^ Ñ XðrÏøÝ}î  ô Ä „ b!ïGºFêœYôvÛÿÿ2þ.ýüûîùëøß÷ëö öFõšôôÃóœó’ó¦óÒóôRôô¹ôóô)õeõ°õôõCö“öåö0÷w÷µ÷ó÷>ø¡ø"ùÁù„ú]ûTü\ýhþwÿ„zvN¿?£Þ%#$:•ê/æaÀ - " ö´:‘Çò?†Ñ|èaÈÿLÿÄþ!þpý©üÎûÙúÓùÉøÊ÷Ìöàõõ^ôÁó9óÑòiò#òáñªñoñ5ñáð|ððÂï)ï]îí¬ì ìÅëãëjìVí~îÐï ñ,òó»ó;ô«ôõyõ·õö<ö‰öÕöD÷Ç÷Pøùú:ûšü þÿfŒ`ñM™ÃûS­üaÛO¯ ƒ ò ` ì …  µ K × ,I8ð v ã D Á c ) ! m Ý F ” Ç ø . † ó QÔnËê¹m ™³ ¦ › Œ { ¤ ¨ ° “ ¢ ™ « ± Ö × ‡ , À Ü  èmëSûô-Gxÿôþ…þçý]ýúü÷üùüý ýäü}ü‹û4úœøÅöØôúò›ñ¶ð'ð ð7ð¯ð5ñªñ@òÌòeóôËôõ|ö=÷°÷ä÷á÷¦÷9÷éöÏöýöl÷5øIùxúªûÀüÎýÔþÔÿÃÙò.@7õj¸è    " $ $ ) = o ¯  P ‚ « » ž U ð _ ”³¬ z_M[ŠáÿVÿõþ–þOþ þ»ýzý)ý×ülüòû”ûûgú¾ùùgøÃ÷9÷ÈözöFö<ö?öhö‚ö¾ö÷öL÷®÷'ø¦ø=ù¼ù0ú’úêú3ûnû¯ûíûAü üýnýóýdþÚþ^ÿÞÿz§;Ëcéeµþ)FKF) ðΧ>ÇŒT(ûЕN &¤uÿÇþ þ<ýNüVûYúiù“øÁ÷÷ö%öâõ»õ¥õ¤õªõ¶õ’õdõõÃô=ôµó,ó¿òNòÚñTñ¨ðäï.ï¶îîÄîlï‡ðÜñ-óXô^õEöÖö.÷|÷Ð÷ø8øVøxø¨øÒøûø!ùbùºù?úúúìûýQþ©ÿæùÄhÑ #G_™°Ã¨¡|_C^ÿ|Èw)¿; ‘ Ù ä Û £ < § z˜V::o®yù™= Ï b ô p ° Õ  E V =      æ Ó Å À o †  ö % j  Œ ã 'G [ e | — @ Å\õÃÝ/Ê£“œ«Õ(iVø?gÿ!þ|üµú-ù÷÷àö÷õ]õÿôêô¯ô}ôjôšôâô)õ½õrö&÷Ó÷Oø«ø°ø…ø[ø$øøøDøÃø6ùžùðùFú§úæúGûÏû¡ü§ý£þÿ¦ ‰;Þtúj¯ÌÁ¢vGãÐç0a¬WŽÇéûЇ$¦%uÇzõnìjýÿ ÿAÿåþšþjþGþþáýœýcý&ýãüšükü[üCü$üéû±ûoû/ûôú¼úyúQú7ú/ú5ú[úúìúNûÆû:ü¯üý‰ýÒýþWþ•þ©þ¡þŒþ}þrþgþqþ•þÂþÿaÿ»ÿhºò!ERB<#뼑\!õÿÀÿÿPÿÿÛþ¥þ^þëýiýûüü üŽû6ûíú»ú¨ú¥ú›ú|úkúNúúÖùœùIùþø¤øXøí÷b÷óöpöàõBõÂôoômô¬ô õ“õ4öÚöa÷º÷õ÷%øSøoøŠø¤ø¸øÍø×øæøóøù1ùQù‹ùëù~úûªûEüàünýÑýþOþþ±þèþÿ9ÿ…ÿÑÿ "<YVWe‡ ÓUžÏW£Õ[™ÈÐĶ‘kH' ñíøEq”³ÏëWšÞ 5a|¤»¹´ÀÞéé S‘¼ö_ÓXÉK ¬  " ' , 1 2 # à Ì Ã ¾ © Ž ƒ µ Ò Ø À ë % = ï Ì £ *  @Í?¥™ïz.æžiYt‡ºñÞ`Ä .ÿþhýÿü¯üOü üÉû’ûJûû#ûûÞû-ü‘üýü<ý1ýúü¾ütüüÚû¸û©ûÆûõû@üwüü˜ü«ü¦ü‘ü¢ü½üèüýQýžýþlþËþ,ÿ ÿZy‚rT)Ûÿ£ÿVÿÿóþòþøþÿoÿÌÿ=›è(F<. Õ@Üÿºÿ¤ÿœÿœÿªÿ´ÿ½ÿËÿÊÿÍÿÉÿÑÿÂÿžÿ‚ÿXÿ<ÿÿ ÿÿÿÿ-ÿ*ÿHÿBÿQÿ@ÿ8ÿ"ÿøþÐþ³þ™þuþlþpþ‡þþ þŸþþŽþ}þeþMþ$þþßýÏý¾ý©ý•ýšý—ý‘ý…ýý—ý£ý£ý¥ý‹ýrýAýýÄüüiü9üüêû×ûÁû¤ûzû^ûhû}û¨û½ûÛûßûÉûû#ûÑúŽúZúAúEúXú^úiú{ú’ú¨úÉúÕúÙúåúùúûûûûèúÎú³ú­ú˜ú³úÕúûCû|û¶ûËûÃû©ûƒûKû7ûCûlû{û¤û³û¦û–û¬ûÙûñûüZü†ü©ü°ü´ü«üŽüüjüLüCüoü½üÿüfý×ýþ9þ)þûýþaþŠþªþÝþòþÌþÔþõþ!ÿEÿ\ÿÿÇÿåÿVŒÎðôâÐÿôa¦—’sW„à2~”‹¿ÛÊÉ·Âõ.q·£c9Otƒ~ZWhoˆkae„…¡Êóßå ,ÿÑšd^dX_ËÜ¿[½üA[lK/%)H=(';³ßóòß”CçËÆÃµÁË»$΋Ié·t1æ±r,è®™—¯²¡h>¨ÿAÿìþ­þþ[þFþ=þ@þOþ}þvþJþ2þ)þþ þ&þþþ þþ þÖý¬ý˜ýý©ýÄýíýþ;þ_þvþ~þdþLþPþUþcþeþLþ`þŠþÁþàþÖþÇþ½þÂþõþÿ ÿæþºþèþ$ÿRÿdÿ1ÿåþ¸þÑþüþ)ÿUÿnÿ^ÿ`ÿ\ÿGÿðþuþóý‹ýGý4ý1ýOýbý~ýý‰ý¸ýîýþVþÇþÿÿÿÝþ´þ„þpþ\þIþ=þ÷ý«ý¬ýÅýÞýíýÚýÀýý¦ý™ý|ýmýVý<ýýýýúüåüÒüÐüçüàü·üü|übüVü>üôûÇû³ûÆûãûèûüûèûü>ükü¡ü—ü—üíüãü¥üyü£ü§üˆüwü’üªüŽü‘ü³üÄü»üÖüµüÍüü„ü¦ü¬ü¤üÂü÷üÌüüþü>ýýÑüÍü©ü§ü/ý‹ý+ýþüÛüÑüžü®üÇülü?üüý[ýpýpý;ý ý?ýÓý<þ¦þrþîý§ý|ý¾ý¿ýÔý°ý_ý^ýÝýÑþÿ­þsþþØþãþµþ3þÔýþòþ½ÿðÿÕÿ^ÿÿ†ÿíÿ…ÿWÿ­ÿÿÿ2H†(«ÿéÿ¦ÿ9ÿ ÿ<ÿgÿÃÿUò˜H„ϰÄVŽ“°sÂÍ(ìSr™ÕƒïúJçÙ‡¦{_áìBd9 M'#0D.¶³ÕÇr˜“,5òÇ­‘$ Ä`.Û‘¥hC@QˆNíY@Wž©b”)p§ŽêRÏ=ô$ÑËž‡Ò ¡C¤£Lí5„°„§ã „Ï-‰‘NȵüÜ^Zk`©½ Ž|›—”{ÎÀÛÅklØ›Î/3åSÑ‚Pkî lžb0Ζxà²ÿÿ*²Û¢—GBLÇÄ(šRãÿ áÿnÿ,ÿ‹ÿÿ,ÿGÿ¿ÿ—ÿ-ÿXÿòþþþ\ÿ@ÿ=ÿ\ÿ¡ÿ¥ÿ*ÿ¹þdÿíþAþÑþ:ÿ ÿÐþèþ¡þþÖý$þGþ“þCþ±þÿþUþµþWÿ2þÆýiþ†þqþ,þfþƒþaþþþÿ„þ”þ_þÆþEþþÈþËý)ýìýGýËý þ8þþîýæþZÿÿhþ;þ%þTýyüAý¾ý#þýÏý-þÙý?þõþãþ±þqþßþ>ÿþþIþYý-þÏþþ þÆþÿ þœþLÿFÿÿIþEþ³þµÿvNoÿ7þÕýîý*þßþþ‚þSÿÈÿšŒ‚ÿÿÿ6ÿ%ÿÍþ´þ‚ÿYÿêþ ÿ=ÿùþKÿovåÿìÿ [Ø}ÚÿáþKþÿRÿ”ÿŠÿ¯ÿ,ÿÄþÿÙÿòÿξX7y´ÿÝÿ¹ÿâþíþ—ÿ´ÿòþ\ÿœöþìþùÿdÿ…-’ÿ´ÿŽoåÿѵÿûþjÿ_ÿêþjÿ«ÿdÿdÿQÿeÿF˜á×"Þwës Óÿ™ÿÛÿ:ÿ¯þoþ‡þÒÿ­ÿhÉ4ãÿoÉ{Ýÿ|çZ… ÿÒÿòþ$ÿ Èÿ¢ÿ>‡·=MMç´ÿ˜ÿEbþ@jäÿ‹ÿOÿðÿv:0šÿ®ÿu»Âê%dTa!¤Ñ ¡~ÿ—¸–q(›ž[ö[83k€Cÿg­ZŸ:j[“S‹©Õÿçÿ.îÿ˜Vºÿü“™÷}ÊŠqáLžÿƒ\>õÿuþÿæv’ÿ¬ÿ«2³l ÿS|äKqÿÕÿÿ¤ÿ`dÿØÿõyEE®ÞÿiÿjÿKJ_Xýÿ/­ŸÚÿÒþÌÿÓv&+Ý?èÿÁþþ5ÿèÿ8ÿ¦þÿÿƒÿÿþãÿmÿFÿÿBÿúÿÃþþÚýUýÄü—ûçû‹üŽüký:þ9ÿaþ’ýJþ‘ÿìȽ B{ÿ-ÿÿÿTÞÿv³oB¿…ÿVÓ;P`ÀdXÐà\þžÞÿzÿy&oÿTÿÚÿôþ¥ÿ3×ãøÿ¯ÿµÿ—ÿWß>Æ×ÿ_šúÿ«ÿ¼ÿpÿÊþ!þÝþÿ^ÿûÿ<ÓþþÁþñþ•þQÿwÿÿ ÿ–£7ÿ3ÿ£ÿÎÿ’ÿƒp}ÿ&ÿ €—ÿåÿdÿÿÔÿF |ÿ™ÿãÿýÿÿNÿuÿGÿWÿqš¢Nç9H0Îÿ™ÿñÿç}jÃÿÔ£ÿPþþý'é…ÔfÔÿžÿ®·ÿÁLw",Ñ0¶ÿñÿÿ\ÿ)ÿîÿpx~UeþbþB¹'ÿòÿÓö/Îÿóþu¶EÿP Xð°É ªzÚÿÀý‚–ßÝΩÿ?ÿÂÿ@BºTËO×9È›‰×bøÿ±ÿ"Ñå®&óD墯ÿêþüÿzMàÿ.ÿÑþü4ü­ý—ýóü0ü;ýÞýõü“ýÿoáÿ_þXÿAÿ/þ>…2 ˆþpý#þˆþ ÿ8ÿ!åÿƒÿ(¹Óƒöõh(¹ußi³¿ñÿ5Ì•pÞÿ!Âÿ¾ÿ±ÿ°xT?Qråmô®ædìuùÿðÿ…ÿÿ¡ÿZÿ£ÿä°qÿ»ÿEÿfýÿ iËÎÿ­†·ÿ‘Æúqÿåÿ‘ÿuÿxÿîÿŠÿÑÿÕNKþÿ0àÿSÿæÿ×Hÿ§ äÿ¸ÿ3ÿÿjÿ8ÙÿÄÿF=H¸oçÿ¦ÿQž_ßHþ&RÿMÿ^ÿ¿ÿæÿ×ÿN²*ˆ–ÜÿÿÊÿ.ò/²ÿÏÿ&c.‘£žßÿƒËŸØIzú?VòwÿÃÿqYøÿKÿ³ÿÆÿxÿÉÿÕ$l%…T¹ÿ_·q-‹þÉþÅ̲èÿ±™¼ÿóÿÿ ±ÎdÍÿÿX=…ÿûÿ7¨ÿ-ÿ& \˜ÿY:ÿŒþ—ÿ‡ØÍã.·<È¤Žµÿ„(AÿÁþ þWÿãγšºÿ´ÿ—_¼åªÖL?ÿöÿ’›ÿ¢þþ;ÿ@„@íÿ@ÿùÿâ—õ´"ˆßÿâÿ jÿ_–ÿïþÄÿ¸ÿÿÿ‡æ Zvœ'f (&Ìÿsãÿ«ÿs§x´ÿ-Ëê,­ÿ•°[”øx¶8d ÿµÿyÿé4¨ïþqþøÿf¤ÿ;„ªÿ½¸'ÿF0›ÿWFe®S¿þvþCÿãÿ>šh¦ÿ¼ÿi·æ<ÔyºŒÿ9ÿîÿÇÿ3þZÿµG@k÷+—n†cÔÿaq0=%°þÏþ)Ìÿœþ3ÿs©-¯Äñ'ĘUlp“ÿ„-Ô½½åÿ2ÿ]þËþ¯ÿpþ•þhÿ2Ý@‘¿ÿO¸¹= 4äH*—ÿ‹ÿr ÿÿÀÿýÿÿ¤©`Ÿ÷ÿœÿô&ÄÿÏÿk 3‚ý£ÿI_»ÿÇþfÿÍÿJœ5ÿÿÏЄøÿs¹ †ÕÿÀþÇÿî|]qo¹ÿÖ}ÂÂÿŸxÖÿÝžWδ¿ÿiD´ÇEÿR†ÿ5¬›Ï¼aÄ<Sð&Äÿ° Ó‡Ñÿ§ÿ;™˜§)éÿ:›x'²ÿ˜ÑïÃtÏàþÿïÿ:N€²@‡oc:ý±Gƒ¢¬:¾ß~vÛÿkäÛßCÅ`ÿÚ×B™‚äæj%ÿ¥ÿ„HüÍž’ÒI òŠX¿j^¥9$@ÿÿ»ÿÙÿþÿ6Oµ] s¾Í^R!*Åk¯œ>¯âH΃êÒe ¾'(°t~~‘†ÓÿhÿEÇU½[ú_™`ا9>Sº|aˆ5Jÿ ÿ©ÿŒ[—ÍÅ"²ï“±r9“mej%hÓÿmÿjT^LÿVáW´ßd ÷oC«¹€|û»Óÿ5ø±ÿÐÿ¯ c’ÿ\Äw)êÿTúWùÓÂ4n¡>|&pe-TÿÑÿªXÍ7[~êË[eš> S”Íÿ]ÿÇÕïÿ‰ÿýÿíÇy[Ìÿâÿõggÿÿ¹ÿuÿaÿ_¨àa«Í*‹ÿ\t†±hgB˜W|ÎÿXÿþÿ:ÿ—›ÿ¡ÿØ»qÿÄ¿ï# d”ëhÓ쟮ÿ#ÿŸÿ´h‹ËÿlÿfØCäÿv˜©ÕñqöÿÞx}ÿaÅC5ÿö33ÿbÖÙuÈì{æÿÒÿTS]xÿ^Þn’ÉÓÿ°ÿ\Ö)»øËYÓsix‘ hX ÿUÿ—K›?œ)¦$ÜG¸ÿëáE›™Õl8LwNm–o µOÿ ÿa§¦nP)âë%ýä +ª£ôÿ$ÿ2ÿrÿMÿ‹ÿÕ3Ø#1ÊÙ¨¨—ÿÑÿýÿnª€[ÿÿ7£Êî?p׃‰Øÿ/ù¿Fdeÿ"jÖD!˜oz·ÿŒÿ!s»,ëÿ]îÖQ¶Ä©ÿ‰¡hª~ÿÔÿøÝÂÿ¹bÿiÿõÿêÿiÅ ÷9ê8ÿQÿ$ 3íÿo£€Ò ©:ÿ¯ÔÅh~é1l pW<pKïÿµvñ¢la•hžÿðÿ4ÿt¤V£ÿ·ÿlNJADL¶9ø×ÿ¼áÿzöÿûÿ ãþÿ§Ìâÿb1âZ†ÿ¤ÿ)ÿØgǧúDIÿ DOÅâåÐ^²¾™kÿO¡V-]fÿ!} 0È€ÿÚÿÏÿ”ÿäç!ÿbÿ»ü·ÿüþúÿH|b›îÿ"ÿÑtB;ÿÒÿzVPnËþŠÿö|ÛÿöÿÿËñ±ÿcÿðÿ¿ÿùÿ¿† ¤)\„î³ÙÿâÿöBMÿúþÇ׳íÿ”ÿLÿ¿†ÿòþç*ýþè“ØÿÈÿïÐÿÿE+ÿ¤ÿ‡:uá’ÏÿáwÃMñÿhÿy(èÿ\ÿG©ÿyÿ-'yÿ^ŒHÿÍÿÝLzéÿeóÿÞÿÜÿo,ïÿÿÿ4Yÿ»ÿ;©Iÿþ:ÿ Èlt’{S~e(OVq±Øÿe/‹ÿ>ÿ9ÿs¤ÿwÿ*‘C:ÿ,‘¹ÿ~ÿA€}ÿù‘½ÿžþöþ=ÿ+L&ÿ¤ÿ¥‡]ÿhÿn¡ÐÿÈþòúîw§ÿDÿéÿêÿE äÿQa½ÿ†ÿbÓÿ>¡¢Íÿåÿ–¿ËÿCÿ°þ3ÿ F˜ÿüÿQ,àÿÅþCÿRÿrÿvíÿMÿÿ&+QQÿ9ÿºðÿ¦ÿ3U§Ÿÿ}ÿâ^“ÿÝÿ‰iSÿÿôÿsÿÊÿ®{Wÿ­ÿèUãÿÿŸYÿâgQŽÿÉýÿ48 ÿÿ{úÿsÿ$I¡=‡ßþ¦ÿÍòÿbÿ°ÿ¥ÿ“ÿQ~âÿ?ÿA}ÿ ÿÿÿ g>Ú8ÿ¨ÿߢ J™ÿ ÿkÿœÿ{ÿ:ÿK¼¬Æ½ÿåÿ1xÿÜÿ†ÿ‹â_Ëÿ´§èÿÿ§ÿ±ÿB­:ûÿ ¬ÿEô%Lÿ9ÿmÿÓþ‘ÿ¨Vþÿvy‡43rÿCÿF·ºûîq€ÿ«´ÿÞþ·ÿl_éÿW4@±.s‰ÿ5ÿÐg5«ÿ8}ÿ–ÿhÎÅÿÿ'ðÿ˜ÿE±GÄÿ.îÿýÿEÿ7-<Äÿ õÿÚÿûÿ,ÿþþW±uÿüÿžÿÝÿ¢ÿŠÿ×ÿ)­˜ÿ€ÿÈÂnÿ×ÿ½_ÓÿÊÿ¸ÿ×ÿ‡¤¢ÿgÿÄÿŒÍd Œµ8ÿÍÿð1ÑÿsLc¾ÿjJg %1ñÿEâÿ3(Íþ€ÿÝ&ÿªÿì× ÿçÿyË$+2$…ÿÂÿ1®Øÿ_ÿœÿu" +Ïÿºÿÿýþ¨ÿÎÿÞÿmÿÈÿ¥>´ÿFâÓþ# ½ÿùÿÓÿêÿîÿCÿúÿsãÿÚÿ=üM IH°>ÿúþRÿêÿûÿ©æöÿÍÿSüÿ¿ÿ úÿJÎÿèÿEÿ¯ÿ× ÿGÿ)s‹ÿ þSŒœÿ*ÿÑÿ‘šÿ5ÿÓÄÿ­ÿ pþþúþûšäþÆÿáÿEÿsí®ÊþÿN©ÿÿŽ´ÿVÿzp¶ÿ—ÿöÿƒÏÿïÿ÷uTÿÙÿu ÿÃ<ÿeÿ&{^ÿØÿ¸n åô'”ÿ9'·ÿëÿIÿËþ ÿ¢¦+ÿÈþØÿBÃëÿºÿ¥ÿª\ûÿäÿÀÿQÿÄÿÉ#ðÿÚÿE†ÿ§ÿ<°3ÿ ÿÖÿúÿPHãÿÅÿÕÿLÂoNm[šÄÿ öÿÓÿeÿVºÒÿöþ¡ÿà¿$ÿÿžÿ~òÿ4·aAÿÞÿ,.N ÿ!ÿ¢fÿ*AžþÖþ:jÖÿÿûÿ]ûÿWïÿiÿ>ÿ²ÿ“3–ÿ4`FâÿxÜÿÑÿ0:Çÿ(ÿðÿ”úÿÿßÿ}ÿRÿ#‹wÿmÿlÜÿµÿŒd/‡Ni›ÿÿ«þ…FNUÌÿZá2EJbº¸ÿ¥ÿ;ÿeÿWÿúÿ šÿ” ¢OMÖ&ÿ,ÿ ÇÿgÿƒÿÏþfÿ)ÿGÿB÷ÙjÌ‘°ÿßþŒÿ§d»ÿ/ÿûÿ˜àÿ6ÿ ÿ£ÿzÿóÿ:*¶ÿ—ÿáÿ…ÿàÿŠ1µþ¶þi›³ÿNÙ”~©ÿzÿh¥ÿÿ¹ÿñÿíÿkÿ“ÿcCбÿêÿpäßþœÿS2»þïþEnQþúþ?)ÿëÿJnÚÿqmÿ ©Œÿÿÿâ¬!qÿ\±þÿ ÿüÿýÿêþÄÿ¦Ù‰ÿÜÿ§ÝÿKÿÓÿ­ÿ%ÿÇÿu'Zß »ÿèÿ…ÿ$ÿ”ÿQ§ªÿfÿçÿ‘ÿžÿ˜ÿÌÿ‚üþ‘þÿRÿ€ÿnüøÿ¤þÍÿÊŽµÿ'ÿÖÿ±ÿ/ÒšÿmþÁþ“Êÿxÿ}ÿ94†lÿ%ÿÿ||Ïþcÿ=0ÿøþ|è½ÿõÿ§ÿ2øÓ(üÿL‡ÿïÿüÿƒÿ.øÿÎÿæþþ8vÛÿˆÿHwÿ›ÿ¾ÿñÿÙÿ™ÿåзÿçÿôÿ‘5ÿ;ÿxþRÿxÿ þ-ÿ­¡ûÿwÿÏÿûþQÿ>Ùÿÿ âtWÿ<ÿ¾ÿÿ¯þoþZÿöÿTÿHÿ¡ÿŽÿ0ÿFÿTîþmÿîÿ¼ÿÿ°ÿ™yÿýþõþ”þÿ!ÿx¬!ÿvþ'ÿ¹ÿ.?ð€Gÿdÿ@ÿ´ÿQ¿ÿÌþïþ4wÿ"ÿÚþ³ÿ$«ÿEÙÿFÿ°òþÿYÿE^ÿªþZÿ=›ÿ‡ÿUÿ‰ÿ9ÿ"ÿ—ÿíÿÆÿ¶ÿùÿ ÿÿØÿ$.W©ÿÆÿ±ÿ+ÿŸþ2ÿgÿÌþÿÑÿÊÿöþTÿÏÿ®ÿi(yÿÿ!ÿ©ÿ\ÿMýQÿ–þÿ<ÿÝþ ÿ¼ÿÿêþLÿeÿÿÔþlÿÁÿëþèþ®ÿ¥ýÖýSrÃþ½üØü)ÿ.ÿØýIþ…ÿ›ÿ¾ÿÀÿÌ0”‰¸ÐÿéþìÿÒ¼þ]ý3ÿOçþwþ"þ„þº;úýþNfšu’¡ÿÿ´ÿ=] oÿÛÿ©`Cuÿ+hÿ>èÿÙþ¼ýþ7ÿºÿ{ÿ¨ÿøk­!Ûÿv /ÿ=ÿd"ÿ(ÿ þÖý¹þ®þ¸þÌþ¾ÿµÿÔÿ=nÿPÿŠÿ4ÿhÿJƆƒÿëÿcÿCþþÊþRÿŽÿôÿú›ÿàþäÿüÿ¢ÿÙþÿµÿzÿ¿ÿÁÿ UÿSÿkJÿ«þÿFÿ–ÿy5—þ„ÿL‡ïÿ£þ ÿpÿUÿÿóþêÿcÿuÿ±ÿpÿ¿ÿ*ÿÉÿ^ÿôÿxcÖÿ–ÿÜÿåÿŒÿvÿ3ÿSÿ¨ÿçÿíþdÿýÿaÿÿçþêÿƒÿ'ÿ¼ÿö²›ÿ\ÿÿ)ÿCœìÿbÿüþsÿ®ÿrÿŸÿ¼ÿtÿgÿ!ÿ»ÿ-ÿ©þÿ‹ÿÿ@ÿÃÿðÿiÿÑÿàÿdxÿ?þ£)ÿWþðþ1dÿ2ÿhÿÌþ¸þøÿ%ò0áÿ P.€ÿÿ›þTÿëÿ[ÿ“þ—ÿÃÿóÿlÿ’ÿiÿRSR¶ÿlÿE#ÿäÿ_¥ÿlÿFÿžÿ—ÿ ÿÖÿ¿ÿ„ÿMÿÿÆÿ«ÿCÿþnþ'ÿÿƒÿÿËÿ¿ŠJÿtþ±ÿèÿ­ÿ¶ÿ‰ÿRÿÿ{ÿ®ÿpÿ°ÿôþ‚þÿ¯ÿÌÿ`ÿgÿ8ÿþÿPL^ÿŠÿÆÿ”ÿÍÿ×—ÿÿ ÿ4ÿ­ÿþÿŠÿÿÝþ*ÿ5éÿÿíþrÿÇÿÑÿwA.¡J¿ÿ}ÿQÿÿUÿ\f¤ÿÅÿÿgÿÝþ÷þµÿRÿ¸ÿqÿÿpþÌ”Ö\ÿ2ÿõþÎþÿËÿVµÿ8ÿeþþ²ÿµÿÿnþµþ©ÿL® ¥ÿ2«ÿÿ5Òþ…þŒ0ÿóþÎþ„þ(ÿËÿ+ÿôþXÿoÿ¬ÿÙÿ<ÿ‡þ2ÿ&1–ÿçÿiÃÿMÿÂÿ±ÿ(ÿ ÿüþ'þ8þ6ÿÅÿÿLÿÇÿÏþ¼þûÿÎÿ7âÿýÿ.Þÿ,ÓÿÑÿuÿ%ÿÿ¢ÿKÿ1ÿ{ÿ·ÿ‘ÿVÿ¸ÿÝÿþÿuÿÿ?ÿŽÿ‡ÿŠÿ…ÿ"ÿÿ4ÿ@ÿÿZÿsÿ[ÿkÿ\ÿ£ÿÿ»þ£ÿ²ÿˆÿÿ~ÿAÿÍþéÿ,)ÿgÿ>ÿ¶þNþ´þíÿcÿŽÿÛÿ\ÿ³ÿ7¦ÿªÿÓÿÃÿ³ÿåÿ¾þþ ÿ<ÿ!ÿÏþ8þÍþÀþRÿÖÿHÿ„ÿCÿ ÿ%1îÿøþµþàþ†ÿ{ÿ/ÿ]ÿÿZÿ"Þÿ…ÿ„ÿsÿhÿŸÿ.Öÿ€ÿ³ÿoÿ ÿáþBÿmÿ1ÿçþyÿÇÿÉÿìÿÿnÿÿÿ_ÿmÿšÿ ìÿ “ÿnÿ¸ÿ%ÿáþÁþµþPÿÌþäþRÿ€ÿ„ÿÿþþ´ÿ~áÿ†ÿ|ÿòþ:ÿ½ÿ›ÿ`ÿÉþBÿ‹ÿ¸þâþßþÿ ÿÿÒÿxÿºÿ-Qÿ—ÿ®ÿ€ÿ<ÿnÿMÿÅþ ÿ—ÿLÿTÿ¨ÿjÿkÿåÿ.ªÿsÿhÿÎÿ­ÿIÿÄþ¯þ•ÿÂÿ<ÿäþÄþþþQÿ«ÿLØÿùÿ¦fýÿÂÿèÿ.ÿÿµÿTÿêþ¶ÿ'®ÿfÿrÿfÿ1ÿxÿËÿÇÿëÿëÿ‡ÿíþøþiÿwÿ—ÿvÿ^ÿÿžþˆÿ Ëÿœÿ<ÿ!ÿKÿÅÿïÿÉÿˆÿŠÿ‰ÿˆÿjÿwÿfÿ8ÿÿDÿRÿ$ÿ²þçþÿÿ}ÿ‘ÿªÿÁÿ‡ÿ˜ÿ¢ÿáÿÈÿ½ÿ ¤ÿKÿ8ÿ_ÿ5ÿòþ_ÿÿÏÿ±ÿWÿýþÛþÿ~ÿåÿàÿªÿïÿðÿ{ÿSÿ‚ÿYÿäþàþfÿòÿoÿ-ÿÝþÊþöþÆþ²þÍþlÿ áÿÿYÿ€ÿ²ÿÿÿ ”ÿ`ÿFÿ-ÿ/ÿÿÿ¼þ®þ¥þªþ,ÿ›ÿ·ÿcÿÿ/ÿDÿÒÿRÿËþ³þËþõþ ÿÿ®þ‡þ¸þìþÿÍþ¯þÞþ ÿÿØþàþôþäþ%ÿUÿ]ÿ6ÿÚþxþÿqÿ”ÿ’ÿšÿÿíþ™þ>þµý þÖþkÿˆÿÿÿFÿ™ÿ¦ÿrÿ^ÿ(ÿ©þþñþsÿ™ÿOÿÿÅþ¬þÆþèþÿ9ÿRÿ}ÿiÿÿÿÿ8ÿ ÿíþÿ&ÿ3ÿëþ˜þµþÿÿÿüþ*ÿmÿwÿ-ÿÿÒþÞþâþÝþÿXÿˆÿsÿ/ÿÿÚþÎþÊþÀþÝþÿ`ÿTÿéþ§þ£þðþ5ÿ'ÿÿÿoÿüÿ$÷ÿÆÿ”ÿŒÿ®ÿ´ÿ¶ÿ¨ÿ†ÿpÿCÿ?ÿ*ÿ:ÿ[ÿhÿ†ÿlÿWÿaÿŒÿÐÿ'/ìÿ;Œ}­ÿcÿrÿ‹ÿÒÿ;•À¥‹w]k_`uŸäæÕ“7öÿ)Úa\ýßEd<ó*H_ƒ‹“Žuaz³ö:qlGöÒæõ,7)%"!ÿäÕãØÃ°ŠO å⽯Ÿ—”“n9þÿÜÿÜÿÁÿ‰ÿBÿÿÿÿÿÖþ•þTþ'þþøýþüýõýÙýÇýýƒýlýfýJý;ýFý+ý ýíüÒüÆü¥ü‘üŒürüŠü–ü¥ü™ü«ü«ü¥ü£ü¤üŠürübü_üYü7ü*ü(üüüîûæûÄû’ûxû}ûTû!ûùúÑúú[ú/ú'ú+úTú‚úŽúŸú¸ú×úÞúÒúÜúéúþúûùúåúãúÑúÎú¶úžúŽú˜ú²úßúû>ûiû„ûyûWû4û.û-û-ûaûƒûžû¶ûÎûöû$ü?üJüOü<ü_üü ü—üpüZüUü]üyüü±üýPý€ýªýÛýøý-þxþëþaÿªÿÚÿW±U«é6|§±£˜ž”¾ú\¼Cà_Í)Œë,r¨ÄÚåÿöÖö"W•ýs Ó - d ˜ È å  K € © ¥ ¦ ‚ „ ¦ “ R  È Ž G ã c ½FÝiÚ,z Ý H‚Ï8ÆÿYÿìþUþÂýý^üÅûJû¸úúƒù ùÂøløà÷-÷ö ö¡õ=õ õÂô·ôõôLõ§õÝõö8ö>ö^ö§ö÷ª÷Døù°ù_úû}ûÎû*ü©üMýóýŠþ#ÿ£ÿ%§c©çDÄWÙ4ŸþRŽ¶Â»©¼ÈÅšPÛ¯_ò} Ù—6ËQÌaóÿ“ÿ/ÿÉþbþþ×ý¤ý]ýý«üiü)üüÌû”ûPûûëú½ú«úú_úHúCú]úsú™ú°úºúöú!ûUû…û¿ûüWüšüîü3ývýºý þMþ’þ×þÿNÿzÿÇÿ1Of‰®×ñ!-)-/úØÀŽg.üÿ«ÿ`ÿÿÂþnþ þ³ýCýçümüÞûCû±ú,ú¯ùEùçø£øjø3ø øÛ÷±÷|÷O÷3÷÷÷íö´ömö2öÿõÑõÀõ¹õÉõìõ(öbööçö'÷o÷¾÷ønøºøùBùùÔùú[ú°úüú[û·û"üžü%ý“ýþbþÄþÿQÿ ÿÓÿ?t­Ð'\’ÃïUÚ1|Ö(f£ÙñúäýFu˜Å$–&ÄyJ  ç y ª à ù  ÿ â b » â æ ] ô wãqeN!ô¥uð=2#ëhäOÄ"!¸ç ð ÄÊ¢J>þmü¦ú6ùÖ÷ÿöhöÝõZõ÷ôªôHôœó´ò²ñµð³ïˆîNíùëâêãé'éèõç ç–çè½èÂé)ëÇìgîð–ñ>óÍôHöÆ÷ƒù’û®ýÛÿǧMÙ* é • < û å ¢ 5·/°’(Í^Èí©üÇ_é g ã håE}±óÿ@þ üöúxùø¶öõ‚ô ó±òâñ;ñÕð…ðZðDðAðVðvð‘ðŒð„ðmðbðpð›ðåðMñËñoòGóVôõËö4ø¥ù=ûÒüfþåÿT·cŸÀÛÉ £ c  ¦  i Á ³ ™ P ³ S î | › . ¹ 8 ³GllRÆcóþ|ý ü‘úùÈ÷†öbõPôIórò˜ñÅð ðcïäîmîî¾ííiíhífí{í«íþímîÛîcïäïˆð)ñÜñ’òOóôÞô¢õmö0÷øÊø˜ùhú1ûýûÍü‡ý;þëþ—ÿFÛgáK¯õ(9,ðŸHå—>é¡YÙÿœÿbÿAÿÿÐþ‡þCþáýýaý*ýÙüœünüpüaüIüBüoüËüý*ý]ý±ýìý0þþ3ÿðÿÀ¶Ï,j“¶± z  † þ A ƒ ö f ü ¨_2Õ‘4¿X í›péŠ"<qÃi´2WâÕ_žaªÀ « ¾É!¤ÿùüÎù°öLôZò„ðüîîÃíÎíãíõí¾íQíYìïêÅéÆèè!çjæñå å[åðägä¶ã/ã€ã±äŽæáè‹ë£îìñeõ{ø&û„ýÉÿ‘Z4 ¸ êÁIMÈçÓÓ;úÓ^¬Ãת.Œ/ ó¾:>ËòËN × g ÿÜü¶ú[øñõ…óRñMï|íçë¥êÉéRé"ééáè¿è­è§èàè-é½éRêë ì'í=î6ïðñ.ò`ó¬ô$öÃ÷ù~û™ýÎÿþ&>> < ÅF¦íý¸3od›ù2eoeMÆ d  Ÿ 0½PæŠ.ÌÿVþÈü;û•ùÙ÷,öjô¼ò%ñ»ïrî:íì2ëhêÁéFéÿèçèé_éóé©êësìhíbîrïð“ñ¯òÑó õHö–÷Úøú>ûfüxýxþ€ÿ”¤¶ÒàÞ²bî]¿ &  ê­PÇ-jŽ˜’‹rucÿ]þ_ýDü9û#úù1øD÷eö_õ4ô'óòKñËðqðxð™ðËð!ñuñãñòKòÃòLóÒóOôéô–õ3ößöƒ÷bø~ù‰ú³ûý‡þ±?¬è÷·L å ° s  Á ‰ _.çWò°SÉòÚ˜èÇÐÇ.  0Ñ­vô 8 ¹ ô ©  ² * ï  F  7 Í q $ n J – Û F ¿ÌÿÅü’útøEöèó4ò¹ð`ïçîzïÏð òyó:õ¢öÍ÷%øî÷O÷öhöÎõ}õ(õ™ôôfóüò[òÂñÑñ¦ò%ôêõgø%û”ý$=ñx¹)g  - reγšBæ ÿ ¨ · ½ Á c Ë . y Üc!U‚–sÍÁœZþü`úëøº÷Ýöñõêô¹óiò.ñ.ðpïïïSïþïÆðšñXòäòwóôãôéõ ÷pøÞù2ûiüný;þéþlÿìÿ—{›×7ô. H 3 õ ž @ Ú iÈ5:¶1† Ð  1 T ` TÎgíoûÿ…þ<ýüû>ú…ùÏø)ø‰÷óöhöÂõ#õ‰ôúóó'óÄòxò5òòòò,ò{òâòsó)ôõôÀõ§ö÷—øù€ú~ûxü…ýþ‚ÿvEª-‚ª½ÎÆÆ­ŠVÔ…6掼,•ßÿ ÿ!þ<ý:ü3û.ú%ù*øE÷`öŠõµô÷ó ómòØñxñVñSñ\ñnñžñò€òãò‹ó%ôáôœõHöøö_÷…÷š÷˜÷³÷'øËø’ùúšûóü<þÿÁ¶ÍË­`æiql‹²Üä >zZžáñêèÖ»lüÝÖìH©9 ®  3 2 é a ã¢gG½Ia°¯â× ¢  ; æ   €  K  ? -ÚdÃQKܤªÌ3D ‰ ²¬d¦þöûTù²ö¥ôùòÆñÎñuò°óµôõ°ö‘÷ øæ÷E÷böNõ/ôðò£ñeðOï[îµíWíEí8íÉíÏîwð÷ò³õÜøªû9þË ¿Á ” | 8u=…%0ý¿ ± Ø  ˜ æ ü œ : « T  ù Î q » c|çGþ»ûxùw÷ÝõÀô©óÂòÔñ¿ð´ï°îî«í”íçí‘îvïnðeñ6ò÷ò¬óWô'õöU÷§øûùSû¿üçýöþåÿ¾ªÐ:ä™m ' ¿ ½.nŸÆÚϸjûJ{… Ž “ ƒ w?ñiÍ Tÿ“ýÞûIúæø³÷©ö»õëô.ô‚óëòSòÙñ^ññÁð£ð¨ðÅð ñYñÎñ@òÃòfóôâô²õ›ö¡÷°øÑùéúüý;þ_ÿnŒ´ßøä§;©Öá¼^÷€ýg»S… ¬¢ ÿ’þ’ý¬üÄûÞúåùÝø×÷¼ö˜õô~ó£òõñ\ñÒðMðÂïLïìî©îîuî½î7ïéï¤ðŒñdòKó>ôBõbö}÷†ø­ù¸úÇûìüýýóþ{ÿÊÿaÛnûÉW”›Ä·ˆ`1úŽ#Â7‘âcT,- Ð@å¶¥ ø”tW»Ò¹„ ¡(€z5 | C  j ª Œ•l›x¸‘¯Ç-§,“0ÚóyhÖT½Ä<Í tÁW)ýìùõö4ôòqðVï ïþîpïSðpñÇò˜ócô©ô,ôÇó ó)òïð…ï:îþìnìfì¨ì(íî¦ïqñ óûõoø1ûÿý)G— ‰  {×$å ™uàBÛ Ï ) Ç — ` 7 $ Ë . d …¯ÝÚyº Jþ®ûù]öäó¨ñòï²îÝí]ííÝì·ì´ììì*í‹íîÙîèï5ñªò#ô‹õäöEø—ùÛúCü ý ÿ””ð#": i ¸ šôABR<ÜN§·o 2 è † ¯Bå‹4Ûÿjþöüwûëù`øàödõôºò»ñáð:ðÆïrïBï.ï7ïHïgï³ï5ðÁðŠñŠòóÖô/ö•÷ùxúëû=ýþóÿ3dxi6÷ª]ì‚ “  € Ó ò ø  ^ Õ  9-õ³_îgÖþJýÆûXúöøœ÷gö@õ%ô ó$ò3ñAð5ïxî¼í3íÝì´ì©ìµìñì8í‘íýí™î;ïðøðíñöòôLõsö‘÷¶øêùûhüÏý?ÿ¯JˆžP@Á}3úØ{1Å~B󀈫ÎÈÿÝþþ ýüüÕûØûÅûòû0üuüåü ýÚý­þ¯ÿ;¶Áï;÷²' § À ’ ý < · < ¨ _ Þ 6!BG:ùÁ'èdšj|J*²ÓèÈ0`ž˜¬úü_A J\ 3üOø”ôñ÷íŸë×é}è¶çuèCê¹ëïí\ðîñôòóôÜó4óžòÀñÃððšïïÎî$ï»ïÎð¥òöôx÷)ú.ýã! ¢ Òž)Ž ­¢'§•îÍr — ™ ·"º3 ÛÏ÷G´"Óÿ þµû"ùMöyó¿ðeî¥ìŠëëê­ê´êÒê@ë¹ëRìýìéíäî%ð¥ñsóMõ$÷âø”úüˆýöþmådésë2 9 ü © U  à ñ<E…†5ƒn?æk î G ¬çT¢ þCýüÚú´ùøc÷ö×ôó[òAñXð›ïïÓîÈîãîïyïçïeðñµñ†òó¨ôéõC÷¿øWúéûzý ÿ¥ ù64¡ V ƒ “ ž › • ‹ { Y ( ߇þJWMÁNÓÿAþ±ü"ûœù"ø•öõ…ó*òôðàïùî>îµíhíCíLí]íyížíÕí9îÓî‡ï,ðàðŽñ!ò»ò:óÐóaô&õ,öW÷«øúyûäü=þ®ÿþHT<÷¨oëU“š™a(ƒªØáèà*X»ÿvÿéþ¦þþ·ý‚ýeý›ý~ýrýkýIýÕüFü·û"û’úú¥ù¯ù'úÝúOû7üaýþÕÿ£—eq ¤ › R i !»áĸWYkâ3 úå›öA–ÏgvÇ#ãD•4kŸ\Ê€áéóצ öÈ"ûX÷ó@î$ë}èxçÇæâæ³çé·ëbîñ—ófõ™ö!÷b÷1÷¬õ¡ó±ñíïÔîŠîÑîmï¡ð»ò[õHødû(þ½6g* © Å ž~ Ú]²Ãš4Bx7®d E &ZÝWN‡¼·¸~%‡_þ¹ûãøö;ó¡ð3îDìæê5êêEêÔê¢ëµìÿíXïŸðÚññò%ô^õ³ö!ø—ù û”üLþÉxübœªŸ W ô |  Í ª Ž’‡FÏûÀ6MêVn n H! $këþ«ý£üÈûû=úrù™ø™÷˜ö‚õfôHó2òMñ˜ð ðÁï¬ïÍïð“ð"ñáñ¦òsóWôJõ[ö…÷Ìø&ú•û+ýÏþ|$ÁM¢ÇªP ª Æ ¯ o  ºg%éÃ¥‚^ÌcÖ,I*ÞgÏþ,ýûùùxø÷Îõ³ôóšòšñ–ðÏï&ï¥îNîîî îfîÆîRïöïºð~ñYò.óéó—ô)õºõ>öÖö~÷6ø ùEúvû±üûýMÿf†‚l ”]ƒ“nàÀ•i:÷œa²‹]÷þ±ý¡üáûGû°úúú¸ú‘ú¦úûDûjûÂûü üáûáûsûDû~û‰ûûëûþüáý×þ€ aÝK·³² ½ —  ^GQT'@Ë“' ïþøëG¸‹áª3 u·`¥Ýä1W…r³û } Ù(cü8øëó¥ï*ìbéµçÌæ¬æzçÑèLëîqðuóöaø¦ù!ú*úçøõögôõñÌïîíAíLîJðíò ö„ù ýQJzp A ¤¼Á¯ êž%j¼ÝÅ1.   $€*A¹§F@!Äï^NþÓû/ù^ö‡óÙð‹î”ìëê é°é?êPë»ìpî<ðùñzóºôúõ?÷gø§ùöúJü«ý-ÿ¿=œ PfH Á _ ª o > 1'!È:s5‡eÔû Õ ‡¿ƒ‡ÿèýƒü|û¹ú/ú¯ù1ùÆø@ø¡÷ìöö õô-ó>òiñÎðuðGðQð–ðñÃñ‹òpóiô„õ³öü÷TùÃúCüÏýoÿª4ŸäÑ} Ó å © Z øróm¾y"Ëy”?hO³þ:ý—ûäù1ø‰öñô~ó5òñ@ð“ïïÄî§î£îÊîï„ïðyðõðñ;òóò«ó^ôòôyõèõ\öëö©÷uøù¬úüUý~þœÿ‡rG ï­L’ÈÑ9è‡@ûÍ{ÃV铌þÿ‰ÿÿzþôýQý^üjûú¯ùîøøtøjø¢ø.ù´ùúúMûÏûTü3ýþ|þ'ÿ›ÿžP²Ž¤ÆE0Ó F ± õ áœÇÁ&-3›€!¢9Ýx㌼þ¾l«]ÀW•À/Q¦|Z ¾ä:ûáõñˆìBè¦åRääÁäAæ é/ìÍï•óñöºù›ûµüúü#üú÷“ó2ðSíHë@ê?êMë~íÓðíô-ùˆý§º± h Y€R+:ø`_@þï¿>Ÿ  ª l¬_C@\{z»\hþõû>ùXöpó‹ðÃíZëméóçççæUçvèQêµì{ïyòWõøCú$üýþMÿ™ÿÐÿ aÑ_!'O’÷t y ù [–¥e×ûÉHŸÃâµ l ê + F2¤þ±üû¢ùšøÎ÷C÷åö¼ööšööyö(öÊõEõ’ôÄóÙòØñëð&ð˜ïhï”ï+ð+ñŽòIô>öQøbúoüaþ.Ë/eT± a}’ކ{qkR/½f‹™ŒÿVƒŽ}ÿ<þéüpûÓù"øsöÈô ó³ñ›ðÈï(ïÚîëî)ïžï2ðïðÁñ’òaóôºô%õvõˆõsõHõõõIõäõÉöÊ÷ùbúÈû0ý©þòÿ*:0ýÖâôÁp%Îbço$À[ïuØ€7ÈÿÃÿÿOÿúþ„þ#þfýÁüüûúúÕù’ù™ùÖùÕùúfúÏúRûòûËü’ýþ˜ÿ‹`:îdÞ®d-ÖÜÝÚ * e ¹ ÒÿÉjkÏ{WÀ® êË™ 3øŽ¥ ÓÈÇæ>¹ÿF<ÑL2ý¾õ²îôèïäâ»àUáââjåAèkë(ïó§öIù:ûÝüý ü$ù1õ—ðÔëDè`å äzäuæê¦î,ô‹ùþ{Lû  ÍPhEÙ§oJÈæLåµàVÖ  ß m ƒ}ã,*©“–Qã2™yÿü•øLõVòiïŽìêègæ åvä¼äõå+èërîëñ.õè÷íùEû÷ûüüü-ü„üýîýÏþµÿ±éIæÛ q Ï ÇíD4ähÐ87áP ^ E ¿‹€ÁþZý:üWû¢ú$ú¬ùGùâøøø÷ÛööõÝóŠòñµïpîcí©ìeì‹ì:ínîúïÏñãóöNørú‚üXþöÿGg>çaÂ;l­õL¼8ÅI¹ > [ 5 é15ÄH§ÿäý/üoú¤ø÷ŸõQôó%ò_ñØð¬ð¾ðíðKñÐñ;ò¢òÑòðòáòËòÇòoò1ò ò3ò†òóóóÐôêõT÷Áøkú>üþ×ÿl÷è„Åë?Sb}cB@IJ4NWcK·NåpÞS¹ qØI´ÿ ÿ_þ­ýýYübû|úÍùPù ùù’ù<úõúàûÃüÌýŒþ!ÿãÿ§vÊP­É ¢'(›\Z K `å!_'ïJ8qhyCÿW»]APLûârÎÔÚ: ¯ñý)öØïaëWèç çªéUì£î[ðÀñôö0÷ ø²øuøîöôçï>êŒäæß›Ü‹Ûݬà«å¨ëQò4øÐüjÐï" ( 7ÿ1‡ýÌq‚1©ŸQ ÷ù ~ ) à ' }UPt ï(eüGù¾ömôò°ïJíîêíèŒççÔç’éìÂî‘ñãóKõ¬õPõWôóòwñcñÞñóô,öà÷ªù‰û™ýüÿÀ¹Í¼ <-°§O浪æ;l^na0Ü ‡ ) 潞|gN0÷ÿÒþ¤ýgüû¦ùøaö‚ôžò»ðï±í¢ììüërìHí‰îîïsñýòuô¸õÑö¼÷nøüøoùºù útúñú˜ûyü‡ýÈþAÐ`ú‰û+  ¶    ½ ` Ñ F Ã-–Û-LPC*!ÿþ ý*ü@ûaúvù˜øÎ÷'÷öÎõ(õ‘ôîó.óRòZñ‰ðÏïXï*ïUïàï¸ðãñcóòôiöà÷Bù¡úÐûäüÏýˆþ2ÿ´ÿ%’útø½´ÂþT¨Õ á ² < ˜ § ^ ÷ q Ð Ô È.W©rÄI؇|'ñJÿ(ÿ»þìý[ý>ý¦ü+üEüü'üQü™üÒü7ý@þ·þeÿ¯çÒ+î!Fš ç ù  Bû1@Ÿ8‡ýWñ}I Ÿ+1ÿ¿ûùÜøvù ûÿü—þcÿtÿÿ„þOþáýýúû-ú´÷1ôÓïÊêgå7á,ßmßµáråêïæóÿ÷ïúaü×ü!ý¬ýÂþ)œÂ{Çy›D#øÿ+÷’l Æ;7V+Ñ›$ì–íš  Ë2nƒ!¶ÿäþ}ý©ûµù"ø÷×ö>÷$øTù>ú’ú"úÐøÌöaôþñð¦îúíõí{î2ï.ð,ñòGó’ôOönøèúŽý%MÝ´øÔ†:<†â®(­> É q % Þ  ï !  ¬ ø  õ ´gª>Ý“Pÿ,þýùûÿú%úkùÊø[øøÝ÷½÷¯÷—÷r÷$÷¾ö?ö»õ%õ§ô0ôäóÂóÃóíó:ôÄôvõ[ög÷¤øôùNû­üýý7ÿ(á]À¼ÈÐñ9Žü~zãdØ:~³±ƒ3«ÿ6ebZg‡ÿ“þ½ý÷üSü®û û‘úúù ùÓø¹ø±øÐøåøýø,ù*ùùÎøƒø'øé÷×÷ë÷ øhøÖøtù úâú¾ûÌüæýÿoÆëÝ ]®Þò=IñEŸ! _ €  š \ ëv¦ümôªI«Ô*¤÷BÃv*æÿ$.yµ/îÉŽ>ñmzr˜m AD‰0(ÿCý™ûú‚úwûýÿ9ûß’=ñTé6ùÿùýOû.øõlò÷ðüðqòÛôÓ÷ñúÂýçÿ!€0Ê¡’ŋ͑ÿùý`üDûòúÂû›ý©ßSþï1÷;ìóÙD é¾ÿ¬Òÿÿ½ÿ3¡Í³9´ÿVÿ?ÿƒÿûÿ˜MLÿ›ýü±úµùùèøøø,ùùæùPú¹ú<ûäû©üý…þiÿ)”µ¯fÏÿ€ÿ`ÿYÿqÿ ÿðÿA·:ÞAåpå7]qX'Ð[Î*|Ç‹+æÿÀÿ¹ÿÅÿÎÿØÿØÿÑÿ¿ÿ•ÿƒÿSÿ!ÿÖþsþçýDý˜üÿûpûöú¤ú‰ú›úÀúùú0ûqû¨ûÞûüpüÑü%ýoý¶ýéý þ÷ýïý×ý¸ý±ýÌýþý"þNþ–þÜþ.ÿ~ÿ×ÿ4—þ\¦ø:2ÝžJ ÆT!áÿÂÿ¯ÿ›ÿ³ÿ¿ÿÉÿ¼ÿ«ÿ¡ÿ|ÿBÿýþ¨þVþðý‚ýý³ü\üüÈû¹ûÛûübüÍüQýÀý$þoþ¦þËþõþÿÿÿ5ÿBÿYÿ€ÿ²ÿÚÿ bÓ`øÑ]ËþDiviw’¬¬“jH- ùû!D~Üøß™;ùÖŠ:ä¦h 4‰Ø(ZPÚÍbÆÿ3þ²ü‹ûßúšúÌúSûü ýóýpþ­þ ÿpÿžÿpÿ*ÿ«þÆýxüû^ùÝ÷šöûõÿõÐö5øÔù–ûUýÙþëÿ–çðÓÇÐÖĘEëÿ›ÿ}ÿsÿ¶ÿUK ™B”]IPk¶èöì,a–ójÒS+òÿ¹ÿˆÿ†ÿ¦ÿ¼ÿÑÿÍÿ®ÿNÿ¸þïý(ýCü{ûÈú_ú'ú)úHúúíúZûÑûTü×üTý¿ý þYþ|þ”þ‹þwþeþoþƒþ³þúþ^ÿÌÿ@ÆIÎA£Iq‰–”•”œ±ºÉ¿º›‚Iè«|@LJLóË¢„\2¹ÿ^ÿöþŽþ%þÃýpýDý!ýýýýý/ý2ý@ýOý_ý^ýfý\ýKý)ýýðüÛüÒüâüûü6ý€ýÔý-þŽþíþFÿ•ÿÛÿDe‡ ´Ëßö8Qt§Î*J`xxe]<)õÖ¶‘jEøË›fEøÿÄÿ¡ÿ~ÿFÿ!ÿõþäþµþ“þmþOþ1þ þÞý¥ýrýTý:ý>ýMýaýŠý ýÂýâýúýþþ%þDþjþ’þ£þÐþõþÿÿ5ÿtÿ«ÿèÿ:›ê/q›»ÓØåõú&6779HShx‘˜§Ÿ‡rG ßµe:öÒ®g/Îÿ²ÿ–ÿqÿ3ÿ ÿãþÀþ£þ”þ”þ¬þÍþÓþÖþîþåþæþÎþØþ÷þúþýþ ÿ8ÿJÿhÿŒÿÈÿ D…ÆM…œ¼Üãæô +=b€–¸Â·½ÌÒÌÃļœ‹zdNHÿôljGÛžf2Ýÿ½ÿÿyÿoÿZÿ=ÿ.ÿ)ÿÿÿëþØþ¶þœþzþ`þbþPþKþEþ[þqþ‚þ§þ¿þáþùþÿ"ÿ8ÿOÿZÿvÿÿ¨ÿ±ÿ¾ÿÊÿïÿ÷ÿ"@DP`mv‘ž²ÀÝàááèë̽ŸoV>! $+1+9R[hqiS-÷ÿçÿîÿL“Åü'LZz˜²Èî ,0/Cs³÷J¢å&QYdˆ£À×õÜ£.fŽãM½1 8dªø+=Uz°Ã–=•—ÿHþÙüaû úù»øúø˜ùƒú€ûtü+ý¸ýþUþvþ›þæþÿ ÿ þàýÕü™û…úÈù—ùúíúBüÈýOÿk)„ª½ß#½à«(x¶ ½ÿÉÿiNWQ ge%·`^uŠt‘Ù.Q£73Ãk×ÿÅÿ¿ÿ¿ÿ¢ÿxÿÿ¬þþ²ýFýýýý1ýWýý™ý´ýÐýòýþ1þ]þ†þšþœþŒþtþ\þIþDþBþ]þƒþ»þÿOÿ¯ÿ|ß9†®¼¿¤›}siz›°·Þ÷I…ÁâöéÇ‚3å¤uV?1ûÛ¯kVMQIH%úÿÁÿ|ÿ<ÿ ÿíþÙþ×þÊþÉþ¶þ¥þ}þ`þLþEþQþbþ€þ›þ§þ¹þÁþ½þ¼þÁþÐþÛþõþÿ&ÿ+ÿ/ÿ4ÿ2ÿ8ÿJÿjÿ”ÿÌÿùÿ+^ƒ¦¾ÉÞáò *>Sfv‡˜•œ˜•Œ€xgC1ôíæèàáÛÕÊ˸µ¡˜ugP2"øÿéÿÞÿÕÿÉÿÏÿÓÿÜÿÒÿÒÿÙÿÙÿ×ÿÚÿÖÿÎÿËÿ·ÿ­ÿ±ÿ©ÿ›ÿŽÿŽÿÿŽÿ“ÿ ÿ±ÿ½ÿÑÿíÿ #'(#$ '$$+(3:Pi‚¡§¸¸»¼ÁºÄ×äèøððíïòû  ïâÏÍÛÞìîóçÔ»³žŒ…ƒyl`V?- ÿÿýÿûÿöÿãÿàÿÌÿÏÿÏÿÏÿÖÿáÿåÿãÿ×ÿÞÿèÿðÿáÿÚÿéÿîÿ÷ÿ()31DIH]mpmn~wq|€™¤¼…ø)-ªa":’Ô˶Á©•¯üúóÕ»»¿³z3Q—Ç®mL4b¥­|[u„|b@N]`2ÿÿÿÿ>a^='7Díÿêÿ$;=  %<>>! ûÿ1=WU`PJWft†‘‘…އ~…©ÄÊËи¶½¹¾ÅÐÐ×ÈÊ»° ¬³¼»¹¦ •‰‚zurromd`L5534(0"õÿíÿóÿöÿ13*...@QRisxrurvƒ‹˜ª®²½Ìξ¸®¶³¼©¬Ÿ™Š‰‰™’™¡­±¯¨žŒ|mXWTINA<0<=HTNT^`[S>+  **;HJJ@E>// (5776>GMH[dkhrih`NGHELGW]bbcdlii^WPE?;0--*&'):D?:'++!$ !/%)5874+/<C<=GN>;1:2E;>ACFKJB<.1<54:@6350,87:>55.1, ! &$+0-,16&/$%# $98.%03DE@HF;D=A8D]OP?C<65>;2/=<G7A::==>=@>FO@;85;6BGB:76?>D>CF?AFVJB=><?@@DMRTVXb]`a`]YZYXSMPTQZT[cg\_`_X`ROHEB>7:6=<BEILEPLGFED?8:5****+*3:<7;7=;?<BHCHQS740,0-)1'(&./40BFGKKC?=A?C?E;A?@9;<:BDEIRNIMPQQQRUPJHE>G@LDDFDGGACBA>E@I>C:77759<;@FBEFDHORUQZUb_^\[TXc[TSNWTR[V^Ya`caaY]SOKB@B<===DB;>9A?:<H@@==@8=CHDHLQRXNNEHKFKEFNJLMTQXWSU]ZYV[QHMHED?:?BBEJKUWFF?I<=76:?12-,381/.1..-3/5+9/616:9:::=???=C@BQGA<?;;3<3404,5:9637<7@CA?496<C5?AA9:8D==555:;<7AB:13*'*10.0+(+%6///0,0'. ! "  þÿþÿ    þÿþÿÿÿþÿÿÿûÿ     þÿýÿûÿúÿÿÿûÿþÿüÿüÿúÿþÿúÿøÿøÿúÿôÿîÿïÿóÿñÿøÿíÿðÿíÿñÿôÿûÿÿÿþÿúÿýÿ÷ÿ÷ÿùÿóÿóÿõÿóÿúÿûÿûÿùÿ úÿûÿöÿõÿýÿÿÿûÿÿÿ ÿÿöÿýÿúÿÿÿÿÿùÿíÿ÷ÿ÷ÿøÿôÿîÿòÿêÿìÿíÿîÿñÿçÿéÿèÿíÿçÿ÷ÿòÿýÿøÿ   þÿ       üÿïÿõÿúÿëÿìÿêÿåÿéÿéÿìÿîÿîÿøÿôÿòÿíÿôÿþÿïÿéÿèÿßÿáÿÚÿÛÿÝÿÙÿØÿÐÿÝÿÖÿâÿîÿîÿåÿïÿñÿçÿÞÿßÿÜÿÖÿÛÿÕÿÚÿ×ÿèÿàÿÞÿáÿåÿæÿÝÿÞÿÝÿÜÿÛÿØÿÙÿÎÿØÿÑÿÕÿÊÿÏÿÏÿÑÿÏÿÒÿÛÿ×ÿ×ÿÓÿÖÿÍÿÐÿÌÿÒÿÌÿÒÿÉÿÑÿÊÿÐÿÌÿÈÿÐÿÑÿÎÿÍÿÊÿÎÿÆÿÄÿÃÿ¾ÿ¾ÿ·ÿ½ÿ»ÿ½ÿÉÿÔÿÀÿ¿ÿÁÿÂÿÀÿ¿ÿÂÿÆÿÃÿºÿºÿºÿ¾ÿ¼ÿ½ÿÄÿÃÿ¸ÿ¹ÿ¾ÿ¾ÿ¿ÿ¾ÿ½ÿ¾ÿÄÿÀÿÀÿ·ÿ»ÿ»ÿ¼ÿ¹ÿÂÿ¾ÿ¾ÿºÿÏÿÇÿÇÿÀÿ¾ÿÀÿ»ÿÅÿºÿ»ÿ³ÿµÿ´ÿ¶ÿ´ÿ±ÿ´ÿ°ÿ©ÿ­ÿªÿªÿªÿ«ÿ¥ÿ§ÿ«ÿ¦ÿ£ÿŸÿœÿŸÿ ÿ¡ÿ›ÿ¡ÿ–ÿ™ÿ–ÿ™ÿ‘ÿÿ•ÿ“ÿ’ÿˆÿ‡ÿ„ÿˆÿÿ†ÿ…ÿ…ÿ†ÿŒÿ‡ÿŽÿÿÿ‰ÿ“ÿŠÿÿŠÿ‘ÿ‹ÿÿ‡ÿŠÿ‚ÿ‰ÿƒÿ‹ÿˆÿŠÿˆÿŽÿ‡ÿœÿ‘ÿ‹ÿˆÿÿ„ÿ‹ÿŠÿŠÿŽÿŠÿÿˆÿ…ÿ„ÿÿ‡ÿƒÿ†ÿ‚ÿ†ÿÿ“ÿ”ÿ‹ÿŽÿ†ÿÿÿŠÿ‰ÿŠÿ…ÿ€ÿÿÿ€ÿ~ÿzÿÿƒÿ{ÿ~ÿ…ÿ„ÿ|ÿ€ÿ{ÿ}ÿ{ÿzÿ}ÿ{ÿÿ{ÿ|ÿxÿ{ÿ|ÿsÿ{ÿpÿzÿuÿ|ÿ|ÿ€ÿ€ÿ‚ÿÿ†ÿÿÿ}ÿ‡ÿ€ÿ‚ÿ‚ÿÿƒÿ€ÿƒÿ„ÿƒÿ‡ÿ„ÿ‰ÿˆÿÿ‡ÿ—ÿžÿ–ÿ’ÿÿ˜ÿÿ†ÿ‚ÿ~ÿyÿÿ{ÿyÿzÿ‚ÿƒÿ„ÿ‹ÿÿŽÿˆÿ‚ÿ„ÿÿÿ„ÿyÿÿ€ÿ}ÿ|ÿÿtÿzÿvÿrÿvÿvÿyÿzÿ|ÿyÿoÿuÿyÿ{ÿuÿvÿrÿzÿ‚ÿŒÿ†ÿ‡ÿ~ÿ‚ÿÿ~ÿƒÿƒÿ€ÿ‰ÿ€ÿ‚ÿxÿÿ|ÿyÿ{ÿ{ÿvÿ|ÿwÿyÿvÿzÿwÿxÿzÿyÿzÿrÿxÿuÿvÿ}ÿ…ÿzÿ~ÿyÿsÿxÿ|ÿvÿwÿuÿrÿqÿmÿlÿgÿnÿhÿlÿeÿpÿpÿsÿxÿyÿ{ÿÿ~ÿ…ÿ}ÿÿ~ÿƒÿÿÿÿÿÿ|ÿ€ÿ|ÿÿ€ÿ…ÿÿ†ÿ‡ÿ„ÿ‚ÿ€ÿˆÿˆÿƒÿ…ÿ„ÿ…ÿƒÿ†ÿ†ÿ€ÿƒÿ‚ÿ‹ÿŠÿƒÿŽÿ}ÿ…ÿ‰ÿŒÿ‰ÿ‚ÿ‡ÿ†ÿÿˆÿÿ‚ÿÿ„ÿÿƒÿÿ‡ÿŠÿŽÿŠÿÿ“ÿÿÿŽÿ¡ÿÿ˜ÿšÿ•ÿ˜ÿ–ÿ”ÿ’ÿ’ÿ‹ÿÿ’ÿ›ÿ’ÿ–ÿÿ”ÿ‡ÿ‘ÿŠÿÿŒÿŸÿ—ÿÿ“ÿŠÿÿ“ÿ•ÿ•ÿ–ÿÿœÿ¤ÿ˜ÿ›ÿÿ’ÿ†ÿÿ‡ÿŽÿŽÿ”ÿ‰ÿÿ“ÿÿ‘ÿÿŽÿÿ‹ÿÿŒÿˆÿ‰ÿ‚ÿ‚ÿ„ÿÿ…ÿ}ÿƒÿ~ÿÿÿÿ‚ÿ…ÿ…ÿ~ÿÿ~ÿ€ÿÿ‚ÿxÿuÿuÿsÿpÿoÿxÿpÿ{ÿyÿ€ÿƒÿÿ…ÿÿ€ÿ„ÿ„ÿ…ÿ€ÿÿÿŒÿ‘ÿˆÿ‹ÿƒÿˆÿ€ÿ„ÿÿ…ÿÿÿ{ÿ…ÿzÿˆÿÿˆÿÿ‰ÿ‚ÿÿ…ÿŠÿŠÿŠÿ‘ÿ“ÿšÿ–ÿ˜ÿÿ–ÿ—ÿœÿœÿ˜ÿ™ÿ•ÿ™ÿ”ÿ–ÿÿ‘ÿÿÿˆÿ‘ÿŠÿÿÿŒÿŽÿ“ÿ‘ÿ‘ÿÿ”ÿÿ‘ÿÿ ÿ§ÿ–ÿ™ÿÿŽÿˆÿŠÿ‰ÿˆÿ”ÿ•ÿŠÿŒÿŽÿ•ÿŽÿ‹ÿ‹ÿ–ÿ”ÿ˜ÿˆÿÿ‡ÿ†ÿˆÿ‡ÿ…ÿˆÿŠÿ‰ÿ‹ÿ‹ÿŠÿ‹ÿˆÿ‚ÿ‰ÿ‡ÿƒÿ~ÿ€ÿ|ÿ|ÿ}ÿ}ÿ~ÿ€ÿ~ÿ†ÿÿÿ€ÿ}ÿwÿ{ÿpÿoÿbÿ]ÿVÿSÿQÿJÿMÿFÿDÿDÿCÿDÿDÿJÿPÿJÿKÿGÿLÿHÿCÿEÿAÿ<ÿ3ÿ1ÿ/ÿ(ÿ*ÿ!ÿÿÿÿÿÿÿùþþþòþöþõþûþÿøþ÷þüþ÷þýþÿþÿÿ ÿÿÿÿÿ&ÿ!ÿÿÿÿÿÿÿÿ!ÿ ÿÿ%ÿÿÿ ÿÿÿ ÿ ÿÿ ÿÿÿ ÿÿÿ ÿ ÿ ÿ ÿÿÿ$ÿ+ÿ/ÿ:ÿAÿHÿRÿWÿ`ÿdÿpÿvÿƒÿ‡ÿÿŒÿ—ÿ–ÿ’ÿ‘ÿ‡ÿ|ÿ‚ÿxÿwÿrÿtÿnÿgÿoÿaÿbÿaÿaÿ^ÿ^ÿdÿ\ÿ_ÿXÿ_ÿ[ÿYÿVÿ\ÿXÿUÿPÿTÿWÿRÿYÿLÿSÿFÿKÿJÿIÿQÿNÿGÿMÿ?ÿHÿGÿGÿFÿKÿJÿIÿDÿEÿIÿ>ÿDÿ>ÿHÿ<ÿCÿ<ÿFÿGÿEÿ=ÿ;ÿ=ÿEÿFÿGÿCÿEÿKÿMÿGÿFÿFÿAÿPÿMÿPÿ\ÿVÿPÿOÿUÿOÿWÿMÿUÿcÿ]ÿWÿLÿJÿGÿ<ÿ?ÿ3ÿ5ÿ2ÿ0ÿ-ÿ/ÿ,ÿ-ÿ,ÿ)ÿ,ÿ(ÿ1ÿ/ÿ;ÿ=ÿEÿAÿJÿKÿSÿ^ÿeÿxÿqÿ‚ÿ~ÿÿ–ÿ’ÿ‘ÿ‰ÿÿÿ‚ÿ…ÿ{ÿ|ÿpÿuÿhÿmÿaÿgÿ]ÿ`ÿfÿhÿ`ÿaÿ`ÿ]ÿ\ÿ[ÿ]ÿ\ÿ^ÿfÿfÿjÿlÿmÿlÿ}ÿyÿ}ÿÿ‡ÿ†ÿ„ÿˆÿÿ‡ÿ‚ÿ„ÿ†ÿ‡ÿ€ÿˆÿÿ‚ÿ‚ÿxÿ{ÿnÿtÿmÿnÿtÿwÿmÿoÿkÿrÿvÿwÿsÿ{ÿ{ÿ{ÿƒÿ‡ÿŠÿŒÿÿŠÿ‹ÿ‘ÿ‹ÿ”ÿ‘ÿ’ÿ’ÿ‘ÿ™ÿÿ‹ÿ‡ÿŒÿÿÿ†ÿ†ÿ~ÿ{ÿ}ÿxÿyÿsÿrÿzÿvÿsÿqÿlÿnÿoÿlÿnÿqÿvÿ‡ÿƒÿÿ‚ÿ€ÿÿŒÿ™ÿ“ÿŒÿ—ÿ•ÿˆÿ†ÿƒÿ…ÿ}ÿ…ÿƒÿ‚ÿ|ÿ|ÿwÿyÿwÿ|ÿ|ÿ~ÿzÿwÿwÿyÿwÿ‰ÿ‚ÿ‚ÿ|ÿÿ„ÿƒÿ‡ÿˆÿÿ‡ÿ™ÿ“ÿ•ÿ—ÿ—ÿ‘ÿ“ÿ–ÿ’ÿ˜ÿ‘ÿ•ÿ”ÿ™ÿ“ÿ‘ÿˆÿ’ÿ‰ÿˆÿŠÿ…ÿ‰ÿ‚ÿ†ÿÿˆÿƒÿ†ÿŒÿˆÿƒÿ…ÿÿ†ÿ‡ÿ†ÿ}ÿƒÿÿ‰ÿ’ÿžÿ‰ÿ…ÿ~ÿxÿxÿyÿoÿuÿpÿoÿgÿjÿ_ÿ_ÿ\ÿ]ÿYÿ]ÿaÿVÿZÿWÿXÿ\ÿcÿ\ÿ\ÿZÿYÿYÿ\ÿWÿ^ÿYÿ_ÿcÿZÿ^ÿ`ÿhÿcÿcÿbÿfÿ`ÿcÿ\ÿcÿXÿ`ÿ\ÿ]ÿdÿaÿcÿbÿ\ÿZÿ]ÿYÿ_ÿWÿaÿ^ÿaÿ`ÿ`ÿbÿqÿvÿkÿiÿfÿgÿcÿhÿhÿhÿbÿ^ÿ`ÿ`ÿ]ÿaÿYÿaÿ\ÿ_ÿuÿqÿcÿYÿZÿVÿZÿbÿ^ÿcÿgÿZÿ_ÿ]ÿXÿQÿUÿPÿYÿ[ÿ^ÿ`ÿ^ÿ_ÿ`ÿaÿ`ÿaÿbÿZÿ]ÿcÿcÿbÿ_ÿ]ÿcÿ[ÿ_ÿ`ÿfÿ^ÿ_ÿaÿeÿbÿcÿeÿdÿgÿjÿ_ÿdÿeÿnÿgÿhÿbÿbÿkÿoÿgÿhÿhÿdÿfÿiÿfÿhÿnÿeÿcÿfÿ`ÿbÿ^ÿbÿfÿaÿ\ÿ`ÿZÿaÿXÿdÿ\ÿbÿcÿkÿiÿjÿqÿnÿrÿfÿjÿmÿjÿdÿjÿfÿgÿcÿcÿ`ÿbÿeÿbÿbÿ\ÿ]ÿ\ÿfÿZÿbÿ_ÿiÿaÿdÿgÿfÿmÿkÿlÿiÿkÿqÿiÿmÿfÿvÿ}ÿtÿrÿqÿtÿoÿqÿnÿoÿpÿyÿrÿvÿqÿxÿsÿxÿ}ÿyÿ}ÿzÿ}ÿuÿ‚ÿ{ÿƒÿ~ÿ„ÿÿŠÿ…ÿÿ†ÿšÿ›ÿ”ÿ•ÿ’ÿ”ÿ—ÿ“ÿ–ÿ”ÿ‘ÿ‘ÿ•ÿ“ÿ“ÿžÿÿÿ‰ÿŒÿŽÿ•ÿŠÿ’ÿŠÿÿÿ•ÿ’ÿ•ÿ“ÿÿÿŒÿ‘ÿŽÿÿ‰ÿÿ‰ÿ‰ÿÿ„ÿÿƒÿ„ÿÿ‹ÿ…ÿ‰ÿ‡ÿ‰ÿŽÿŒÿÿ™ÿ“ÿ’ÿ“ÿÿ—ÿ‘ÿ—ÿ‘ÿ”ÿŒÿÿ‘ÿÿ‘ÿ–ÿ—ÿ’ÿ™ÿ˜ÿžÿ¡ÿ•ÿ¡ÿ¡ÿ–ÿ¡ÿÿžÿ›ÿ ÿ¤ÿŸÿ¦ÿ¢ÿ«ÿ°ÿ©ÿ±ÿ¯ÿ¥ÿ ÿ¬ÿ¨ÿœÿ¢ÿœÿ£ÿœÿÿÿ”ÿ ÿ—ÿªÿ¥ÿ§ÿ§ÿ¡ÿ§ÿ›ÿªÿ£ÿ«ÿªÿ²ÿ°ÿ³ÿ¶ÿÄÿÂÿºÿ±ÿ­ÿ®ÿ¢ÿ£ÿ¡ÿ ÿ›ÿ£ÿ¤ÿ¤ÿ®ÿÿœÿœÿ¤ÿŸÿ¦ÿ¬ÿ¯ÿ·ÿ¶ÿ¶ÿ¸ÿ³ÿ¶ÿ°ÿ·ÿÀÿ·ÿ²ÿ´ÿ®ÿÊÿÆÿÂÿÃÿÊÿÎÿÉÿÐÿÊÿÊÿÌÿÇÿÁÿ»ÿ¸ÿ°ÿ°ÿ¯ÿªÿÿ¤ÿ›ÿ˜ÿ–ÿœÿ¥ÿ¢ÿ©ÿ¦ÿ§ÿ ÿ§ÿªÿ®ÿ®ÿ¯ÿ¯ÿ´ÿ³ÿ¸ÿµÿ¹ÿ»ÿ»ÿÁÿ»ÿÄÿ¸ÿÂÿ·ÿÇÿ¶ÿÃÿ²ÿ¶ÿ­ÿ¯ÿ¨ÿ¨ÿªÿ©ÿ«ÿ¬ÿ®ÿ´ÿ¸ÿºÿ¶ÿ¾ÿ¾ÿ¾ÿ½ÿÁÿ¼ÿ¶ÿ²ÿ©ÿ©ÿ¦ÿ¦ÿ¢ÿ§ÿ¢ÿªÿœÿ¨ÿªÿªÿ­ÿ­ÿ°ÿ±ÿ±ÿ´ÿ­ÿ­ÿ°ÿµÿ¯ÿ®ÿ¬ÿ¯ÿ§ÿªÿ«ÿ¯ÿ®ÿ«ÿ¯ÿ²ÿ´ÿµÿ²ÿ´ÿ³ÿ±ÿ¶ÿºÿÁÿÐÿÃÿÄÿ¹ÿ¸ÿ¬ÿ¶ÿ«ÿ¦ÿžÿ ÿœÿžÿžÿ¢ÿ¦ÿ¡ÿ¬ÿ§ÿ¥ÿªÿªÿ«ÿ¨ÿ¬ÿ¦ÿ­ÿ©ÿªÿ¦ÿ£ÿªÿ«ÿ¸ÿªÿ²ÿ¬ÿ±ÿ¬ÿ®ÿ­ÿ©ÿ³ÿ¨ÿ¯ÿ¯ÿ¤ÿ­ÿªÿ¦ÿ§ÿ©ÿ¦ÿ©ÿ§ÿ©ÿ¦ÿ«ÿ­ÿªÿ«ÿ¦ÿ¨ÿ§ÿ¦ÿ¢ÿ£ÿ ÿ«ÿ§ÿ¬ÿ¦ÿ¯ÿ«ÿ­ÿ¬ÿ­ÿ¯ÿ·ÿ¯ÿ­ÿ®ÿ®ÿ©ÿªÿªÿ¦ÿ²ÿ«ÿ¦ÿ¢ÿ§ÿÿÿžÿšÿšÿ™ÿ“ÿ˜ÿÿœÿŸÿžÿŸÿ®ÿ¨ÿ§ÿ£ÿ§ÿ§ÿ¤ÿªÿ¤ÿ®ÿ¨ÿ¨ÿ©ÿ§ÿ«ÿºÿ¯ÿ¬ÿ¶ÿ«ÿ°ÿ²ÿµÿ´ÿ·ÿ¶ÿºÿ¸ÿ»ÿºÿ½ÿ¶ÿ³ÿ½ÿÁÿÁÿ½ÿºÿÅÿ¶ÿÁÿ³ÿ»ÿ¿ÿÇÿµÿÂÿ»ÿ¼ÿ½ÿ»ÿ»ÿ¿ÿÀÿÁÿ¿ÿ¿ÿÀÿÁÿÂÿÀÿÄÿÉÿÔÿÌÿÀÿÇÿÀÿÀÿÁÿÅÿÆÿÊÿÊÿÆÿÆÿËÿÊÿÌÿÊÿÏÿÉÿÌÿÆÿÑÿÈÿÊÿÅÿÌÿÐÿÇÿÌÿÈÿÏÿÈÿÏÿÄÿÒÿÌÿÔÿÖÿÓÿ×ÿ×ÿÕÿ×ÿÐÿÔÿÒÿÓÿÎÿÓÿÌÿÒÿÐÿÓÿÞÿØÿÙÿÜÿÚÿâÿàÿàÿêÿêÿæÿäÿçÿåÿçÿæÿåÿçÿãÿèÿçÿèÿãÿçÿàÿÛÿßÿàÿÞÿåÿáÿáÿÝÿâÿóÿßÿåÿàÿæÿìÿàÿéÿáÿèÿÞÿæÿÝÿäÿáÿãÿãÿäÿêÿåÿåÿäÿæÿáÿçÿáÿêÿäÿëÿîÿñÿíÿìÿæÿêÿÞÿÞÿÝÿÞÿÝÿèÿãÿáÿÞÿåÿäÿàÿâÿæÿåÿäÿåÿçÿäÿòÿìÿìÿìÿëÿîÿíÿùÿùÿóÿïÿéÿõÿùÿíÿëÿóÿòÿðÿòÿüÿòÿñÿóÿçÿíÿçÿéÿáÿäÿàÿäÿãÿåÿâÿåÿÜÿâÿãÿèÿÝÿäÿåÿêÿèÿçÿçÿäÿàÿåÿáÿãÿßÿáÿàÿâÿãÿßÿßÿÛÿ×ÿÔÿ×ÿÞÿÖÿÚÿÒÿØÿÒÿÖÿÊÿÊÿÈÿÄÿÆÿ¿ÿÊÿÊÿÑÿÐÿÑÿÔÿÇÿ¼ÿ®ÿ¤ÿ§ÿ ÿ¦ÿžÿÿÿ½ýÓûgúú°úšüŽþùÿ÷Æ&,ÿ¨üùú~ú§ûØý¨ÿý²ÿžÅ‚ÿøýýàüßý}ÿnë—sz$ÞÿïþcþcþÿëÿÖ‡½{$¬I4[ˆ®ÀÁÄÇÙ³‰S2ìÿÔÿÁÿõÿ%"÷ÿÂÿ­ÿÌÿÑÿ¸ÿ‚ÿQÿDÿ[ÿeÿXÿNÿvÿ­ÿÁÿ_ÿÏþYþwþØþ(ÿUÿgÿŠÿœÿ¨ÿ³ÿÀÿ…ÿÿÅþ»þ ÿ›ÿõÿ¥ÿþýû$ûÅû‡ýÊÿ/'CŠÿÿÐþÇþîþPÿ´ÿ2ÈÿÿqþìýÎýóýCþœþÒþÿ“ÿcC2ñÿ¸ÿ’ÿÖÿ~ýýu¡ÿ»þ)þ^þtÿæ”âÿâÿñÿ“ÿMÿ¨ÿ™M_åýÿ:ÿÿTÿÞÿp›‰r(µÿNÿþþÛþÿÿBòMòèþüýÉý^þ|ÿhGô‘ÿÿþÏý½ýmþ[ÿóÿEáGµÿ…þÙýþ#ÿC¬Gqÿ·þ¦þ1ÿ˜ÿ‘ÿ6ÿ/ÿ•ÿc^ÿ£þiþ\þpþhþìþúÿþTƒþ‘ü÷ûÙüqþ*×r)ÿ|ýŠüýóþ]bi„ÿ?þMþ¨ÿ*3­ÿSþ…þ{ÿ ýÿöÿM*dš2ÿAþ)ÿ8­9¥ýìý‹]o\ÿ0þÿ”<NQÿ"ý>ýãþWÉ-°þÌþV±$Lü]û_þ¨n2÷ý0ü¬ý¤{aDþüAþB6wÿçüÓü•ÿЖÿèþ ÿ‰/ÿþùþ(!ÿÍý þs-{þý×þîìo'þ²ýÑþ ho¬ÿÿS¸7¢ý÷û?þ÷QÆ.‹þ×ýæþÙÿUÚïÊÿ_ÿ¼ÿÑå—þý<þ§D‡ÃÿiüÓü½ÿÙsTÿ£þÿ¬ÿþÿÁÿ­þ{þ:ÿÀÿíÿÏÿŠÿÐÿXñ`ÿÿ)þdþ}sèþÅü¶üÄþk«¼ÿ‚ý ü×ýº 2ÿŒþ^ÿ9˜þ§ÜTòý3ýéþo§þ6.þâüüü'ÿ€¶ú1wþ§ýÿöÒ?ÿ¶þÅ„ÿÒÿXãÂýÚüAþî¢ &C¢qþÞûÇû^þ¿˜…¨$skþ­ûüÏÿjàø ÍDN‡ü2úüÎA×ò¶àÿœûÑúÁýÈö²áÌÿ¾þˆÿʘ|þý¢ýøÿGäƒ+jòÿþµü>üŽü/þÊ´ÈŠBÿgùFø°üŒtžQÿÊüSþ×ëþ¨ýÕýþ¿þÖÿ¯Íìÿ×ü.ûúûÉþR­ïäÿËý–ý/ÿ=íÿrþ|þ‹^Rr ÿ—þ¼þ¢þ§þÏÿÿëɺþ3ýÿý‹ÿÀÿ©ÿxk^þöþuüÖü$ÿs*¢`ôJ *–ÿþÜý9ý þ ϦªÖü ý†ÿWýÿõýÿ²¸XO]ÿÈýÐýyþïþjÿ¶$ÑêóÿnþFýyüçüÂÿ­ T>Øþ)ýêýÿSëg–ÂÜ8=ÊÉÿÿßþ„ÿcá3öÖHKoý=û›ûrÿlÇß,®üü¤ýFã}ÿ7=Faxÿ9ÿ#ÿIÿfÿ²ÿ,x¬ªL<ÿWý"ýÿ"G÷˜*™þ„ýýþP¡7žCµê²ôý‹ü³þšÍçZMÿÕþúþÿ«ÿ¤5ˆŠa|ÿ¹ÿ0†$oÓ¦ËKÿ{ýÎý6ÿûUä¶æ%x?ÿ)þ|þÓÿò€©çú†wùÿ6ÜŒÂÿËÿ°Ãþøý6ÿól\éþÿT€ìÅì‚!ÿóþ‰þsÿ¬9î”ÿýýˆþ^!»FØþlýWþ–ÂgðÿøÿÍåXíÿf+hIÿþŸþ›\Ìz:ÿ$þ‡þgÿ†ÿ•ÿ²¹Göl«þæü#ý ÿf«ÈN¢J°þþÀþt1{fâ_Dtÿ“ÿX /Pžÿ®%ˆÜÿƒýý˜þ¯Ü ˜ùÖR$ÿ¹ý‘ý¡ÿd±vÓþéý¾þ›àƒî@äÿýÿ¢ÛNáÿÿ#«ÿOÿ‚;"šÿ2ÿ¬vò_¬þùý±þòÿòDÊ¥°ÿ™ÿßÿ§ÿaFé'6ÿŠþ ÿÇ©-¬ÿÍÿ}rމÿþÙýþýGÿÉ™€R}WŒ¢ÿáþ…þ]ÿ+‹5 sPþÑý„þDÿ«ÿ&’•kàÛÿPÿrÿÃÿAïdÛâ*ýÿ[ÿqþ9þÐþ=_™LRóþQþ¢ÿÿÒ~,¤²…ÿýþtuˆ7/½ÿeÿXÿ få†ûz¿cþÅüBþš!Þ8·þYþ·b”ÿ&þ`þ:ÿÇÿüÿеn;+FýŒûýhZ¾GºúþµýQþÆÿºƒZÿþQÿ ˆì1gLãþÓýêýmÿ®ϢÄýþîýðýÑýôýWÿtBŠHed?ÿŸþ}þòþäÿÂsoJpÿÑýˆýþ~þìþìÿ¢È*d(Šý!üíü’þ$‰ïàÖäÕÛþIýiüpüÐýˆ±àó*ÖoýÖûÜûMý»ÿ\W£NºX£ÿBÿ¼þ_þûþoÙËäGÿ ÿÁÿ3þÿ¦ÿQ–Iúà¥ÿêþdÿ›Ì”•Ë_ÂþðýÍþj²%ûIAµÿ^ÿÔþÿ¹Ê>v”ÿ¸ÿF‚’Ï$[³þ÷ýbþ*ÿ>gÿõŸßQE]0ÍÿãÿĵÞø~ÿMþ¨þflxàt0yÿáþTþ(þÒþ©ŸüR¡¯þƒüöü„ÿáÅÄïîû\Lýœû$üàþ1žü¯¥^X¾ÿÑýÜý_î[´ÿúý2þí£¶Åÿ>þý`þäJxÄ ÿþþbþÿ•‘¦ÊÌþUþœþLÿÑÿ[œ\X³u£þ#üqû[ýè9øªBàÿ”ýuýñþ aqènâýµüMýÿ9î¼%tÜÿÿ–þíþ=¾â xwg[ÿ_þPý5ý‹ÿcÌŠ4þqûÜû)þ¶I×ÌP2‰þ’üQü þKàuz°(pÿoÿ&ÿÒþÆþ<ÿ;mózƒ¦ÿÿìþ£ÿsÛdn jš ÓÿœÿlÿùÿV™ÍÒ/?:ÿuþëþSýÅWÔzþ³üÎü™þû7ìPfsþþsÿ\›Ðƒ=ñ»Êþ%ýýÃþ‡Ÿÿgàÿ~þyý¥ý:ÿžs%ôbÿ/þ§ýÄýþ»ÿ3i-çðÎÿZý#ü¯ü–þüÓ—™ùËF–þ<ýÛüMþZ9?Ù”ÿdþ½þ‚ÿ‹{„<Y|ÿ5þþ@áuñ¶;ÒÿÿLÿX2*Î$g€Hþ{ý-þ &xÏpµÒÖZÿ·ýÕüzý–ÿ6F’¶Ì#ÿ•ü$û¢û¸ýËÒq'A²Kþ«ü&üØüYþ©@©ú›¶8ýÔúnú4üyÿíšêpß¼ÿ×û§ùúïü³ÓW?Páûþ€ýJýyþFð?XÓNµýVüÔü*ÿõç¥ÏóÜÿ{þ²þºÿgK Uòmuþ`ýÌý`ÿlà/ÏÆÿèþ‡þÈþyÿ}›}«÷]»ÿjÿHÿ0ÿ:ÿ°ÿ¥°6zˆéKŽþáýÆþ‘G]ÉŽ§rŸþ¼ýKþE"Ç–4)8lSÿòüÀûúüÿÿb¨Ö(¸‰ÿ@þùýHþZÿ6W‚—ŸèþþFþ"ÿ’ÿTÇof;^þäýßþ2Ò’ôÖ±ÌÿþÙý?ÿ@’ÔF`ŠäÿÆÿÜÿˆJœu–JGÿÿÏÿ³l.Í)ÝC“sý›Â_ý?UøÔÿbÿGÿbÿñÿ"Ï=‰~š±ÿ®þ³þ&ÿ²ÿ4ðú$jî3ÿ®ýùü”ýmÿ¸m,Ò·°ÿvþÇýþmÿŽ–ôI/*ÿdÿîÿ˜ÿ ÿŸÿ…_3Çg…ÿ{ÿ²GŸvš„¦›3#à½øÄÃÛ½nÉÿÿ°ÿ!$)¤jínÉÈÿ˜þÒýþiÿ7ðt«PúÿÑÿÈÿîã€&P×ÿ±ÿŽÿ°ÿ+š tßµ/ yÒÍt:Sëܵäz²&‚®ÿ ÿÿˆÿ¥OBØ<‹ÎÿeÿyÿñÿĘk18)ɲÿ=ÿŠÿNó34ch[ÛÜÿÖþžþ@ÿ Ù  }‰Áÿpÿ’ÿ=0áðµˆl!ÝþÇýýaþ6ÿ³' -¦ÿ3ÿùþ*ÿ‚ÿI󭜪֢þOýrýpþÿ•uH㤉9:ÿøþ_ÿ®w1³»%äZÿ.þéýŽþ·ÿç ön7›fÿÿPÿÓÿŸ‹_6yN.ÿ—þþÿÚÿÂŽ(Mõ=p¿ÿcÿ·ÿ¬a¾Ð°jëÿbÿZÿ³ÿd°ä,ƒu‡0býF”MmþŒ®/?7ÿ…þWþëþÆÿÅwݘówIW‡•Î#·äJúÿØÿÌÿµÿ™ÿçÿ@ÖóNjöÿ!>–ÆÿãÿÊÿÿÎÿoH"VjPánfB<(ã‰!Äÿ€ÿqÿÌÿKá~ðø•”ÿíþÿþÞÿ,TúøŸ+7ƒÿþþ¶þÕþtÿZ.­‰ê<˜ÿ ÿÿŒÿyv2w]ˆùeÍÿ[ÿuÿòŒ¥0“1%Z†s*ëÿ ’‘Ù½;šÿiÿºÿu5–€`¸ÿ=ÿÿOÿÓ+6é·X¹ýÿŸÿ³ÿKø\pÛÿ„ÿ]ÿdÿcÿdÿ«ÿ:Ú-OS“ñÏ7Ãzƒª§Xèÿ–ÿeÿmÿ¯ÿèÿ-q¢Æ˜UK Ç­–[¬dêÿ·ÿ|ÿIÿ>ÿyÿáÿ[Ç >&Ý«­Ý 7_qa›˜ÿÿÊþÈþÿ\ÿÛÿaÊé²T+yè.&󾵿êþål¸ÿ(ÿ%ÿ¡ÿ4rtX|±ªds¾€¢ ž²lï¸ôÿLÿ ÿ5ÿžÿõÿO¿Dš—3¾[<@q¦äþã¿—x2½ÿhÿ:ÿoÿÒÿ/g”œŽJñÿ®ÿ¢ÿÊÿ_Š“’”¨¾"˜ÿPÿ[ÿ§ÿSpZ- $&)<Ui€~bR=[šÞæ®za^o•¿ìþÑq<?m’ŒÂS~z)±NØÿýÿO®ÏЩV¿ÿ°ÿØÿ9ªbf"È”g"µÿbÿ3ÿWÿÉÿ<fJÜÿ¿ÿÒÿíÿþÿ W¢Vm(¹UåÿŽÿPÿPÿ~ÿÍÿ@¨óîÍt­ÿ€ÿ©ÿ'È3nd"ª0¾ÿ{ÿ‚ÿÍÿGœÉº«t?õÿ¿ÿ ÿÎÿ5Ä-DQXDð‡K?uÏ%·Põÿ×ÿÎÿ×ÿ$ŽÝõ¹ŒP-,BOQXbN!ãÿ«ÿqÿAÿWÿ›ÿ„Õ÷Ïyåÿäÿÿÿ#fåM_bZ[LR‚Ѩ9ñÿÿÿ$ûÿçÿ oÊæÌ™yowu½ÿC}_ : ,Hcmw~†yD çÿäÿûÿM™ì(4罌Y4'AaW$êÿ¨ÿuÿ@ÿÿðþ ÿKÿ»ÿkfN/)+*$#$Aw‚xI.6Lci\EcµMaOæÖåð׺©£—“•€g?/Dj¢á (-H]Y'ç–RíÿÒÿÂÿ¡ÿŸÿžÿ˜ÿ|ÿOÿ;ÿ`ÿšÿðÿF¯°™tT"ëÿÑÿÓÿâÿîÿ ùÿÚÿ„ÿGÿ'ÿ4ÿoÿ×ÿ9s}…pyyow•ºç4&ò¼Šƒ§Ò õßÀld^„­ÔØÅ¶¡V#ùÿóÿìÿïÿôÿ ùÿìÿÖÿÉÿµÿœÿŒÿ ÿÎÿ*.! üÿÌÿ¶ÿ¨ÿºÿÌÿøÿýÿ("1V“›Œ~me]_h]hct‘Ž„oR@6Ti¦î#ÂsD0:R<ÃÿwÿFÿNÿpÿºÿòÿ*5ZgjGðÿ÷ÿ*ýÿèÿÆÿ¡ÿƒÿrÿuÿxÿÿªÿÁÿÝÿëÿóÿèÿëÿóÿþÿÿÿþÿõÿâÿãÿçÿ ûÿçÿÏÿÄÿ¶ÿ¼ÿ¾ÿ¹ÿ¬ÿ®ÿºÿÚÿüÿ ýÿ&@VUG?A@A2# ãÿÊÿÂÿÒÿêÿóÿßÿÓÿÃÿËÿÝÿäÿâÿÚÿÔÿðÿ òÿÈÿ©ÿ©ÿ°ÿ¹ÿÓÿØÿÝÿéÿîÿèÿÖÿÌÿÆÿÏÿäÿÿÿ+7*Ïÿ—ÿgÿHÿHÿcÿ“ÿ¨ÿŸÿ„ÿtÿsÿ~ÿ„ÿšÿ´ÿÕÿ 3XUZWNB/+ÛÿÆÿ¶ÿ±ÿ¨ÿžÿ•ÿ”ÿ•ÿªÿÅÿáÿôÿ)76#Óÿ«ÿ‚ÿ~ÿ|ÿrÿ}ÿwÿŠÿ›ÿšÿœÿ—ÿ–ÿ«ÿÖÿ .)îÿæÿáÿäÿÙÿÄÿµÿ»ÿÄÿÁÿ©ÿœÿ”ÿšÿ±ÿÄÿâÿ(COUevttzŒš‹nG.#*#-6FY]O4 "03,úÿ÷ÿñÿßÿÑÿ²ÿ£ÿŠÿƒÿˆÿŽÿ•ÿÿŽÿ”ÿ¥ÿ³ÿ°ÿ¨ÿ¨ÿ©ÿ¸ÿÃÿÏÿÈÿÅÿÓÿÙÿÚÿÅÿÉÿÍÿÍÿÒÿàÿÒÿÐÿÆÿÍÿÔÿâÿÙÿØÿÛÿáÿæÿèÿÜÿËÿÆÿÉÿ×ÿìÿ÷ÿßÿæÿØÿÓÿÌÿÈÿÝÿîÿûÿøÿíÿâÿÛÿÙÿÍÿÆÿÃÿ»ÿµÿ¨ÿ¢ÿ’ÿœÿ¦ÿ¢ÿ”ÿ€ÿÿ‹ÿ«ÿ¼ÿ½ÿ³ÿ°ÿ¼ÿÒÿÛÿÎÿ¾ÿ ÿ“ÿ}ÿsÿhÿ_ÿXÿ_ÿ`ÿuÿÿƒÿ‘ÿ‘ÿ‘ÿŸÿ°ÿÆÿØÿâÿûÿ*.üÿÝÿÒÿÀÿÌÿÌÿÍÿÏÿÐÿÚÿßÿÞÿÓÿÑÿÖÿðÿ0Ebu}|iM, íÿïÿÚÿÝÿÞÿëÿüÿþÿÛÿÁÿ ÿ”ÿ‚ÿ‹ÿ„ÿzÿwÿ{ÿvÿnÿnÿjÿxÿŠÿ¤ÿÆÿÖÿòÿïÿÕÿ¾ÿ±ÿ¥ÿ¢ÿ—ÿÿ€ÿ~ÿ{ÿ™ÿ¤ÿ—ÿ“ÿÿ•ÿ«ÿ±ÿÉÿÔÿØÿÐÿÉÿÁÿ©ÿÿÿ…ÿwÿbÿYÿIÿNÿXÿeÿnÿoÿjÿeÿgÿxÿ”ÿ«ÿÄÿâÿüÿúÿàÿÆÿ·ÿ¦ÿžÿ¡ÿ¯ÿÄÿÇÿÃÿ·ÿÿ‘ÿ†ÿˆÿ¥ÿ¾ÿÑÿäÿðÿîÿÛÿÂÿºÿ§ÿ£ÿ–ÿ‡ÿƒÿ†ÿ‘ÿÿÿŸÿÿ¤ÿ¯ÿ´ÿÁÿÀÿÒÿÞÿ  ýÿóÿãÿÝÿÛÿ×ÿÚÿÌÿËÿÍÿÎÿÐÿÌÿÎÿÅÿÄÿÀÿÇÿÌÿÙÿÞÿéÿâÿÖÿÄÿºÿ³ÿ©ÿžÿ›ÿ—ÿŠÿˆÿ~ÿ}ÿ„ÿÿÿªÿªÿ³ÿ¨ÿ¥ÿŸÿÿ›ÿ˜ÿ“ÿšÿ™ÿÿ„ÿxÿkÿcÿ_ÿSÿRÿHÿEÿBÿAÿCÿNÿAÿQÿLÿRÿ\ÿeÿaÿ[ÿKÿ?ÿ8ÿFÿWÿpÿÿŠÿ ÿŸÿ’ÿƒÿ~ÿzÿ†ÿÿÁÿãÿ"! ÿÿñÿîÿíÿòÿÿÿ  üÿãÿÓÿÁÿ¼ÿÇÿÛÿàÿïÿûÿüÿèÿÍÿ¶ÿ­ÿŸÿ–ÿŽÿ‚ÿ’ÿÿÿÿ„ÿ~ÿwÿnÿiÿuÿpÿqÿsÿpÿxÿsÿ}ÿrÿrÿ[ÿHÿFÿHÿTÿ^ÿeÿgÿkÿmÿwÿƒÿ”ÿ•ÿ¢ÿ¦ÿµÿ¸ÿ¿ÿÂÿÄÿÊÿÈÿÑÿÓÿËÿÌÿÁÿÊÿÁÿÉÿÓÿÇÿÆÿÅÿÐÿÑÿÙÿãÿèÿçÿóÿîÿùÿóÿ#!0-&þÿúÿôÿìÿéÿßÿÜÿÑÿÇÿÙÿÙÿÏÿÎÿÊÿÃÿ¼ÿ±ÿ§ÿ˜ÿ—ÿ‚ÿ†ÿoÿiÿWÿOÿAÿ4ÿ6ÿ+ÿ$ÿ.ÿ.ÿ2ÿ2ÿ.ÿ*ÿÿÿ ÿÿÿ ÿ"ÿ4ÿ:ÿFÿEÿEÿBÿNÿ[ÿ^ÿoÿwÿŠÿ‰ÿÿÿ“ÿÿŸÿ¡ÿ²ÿÆÿ×ÿÖÿÜÿÞÿÖÿÕÿÌÿÈÿºÿºÿ»ÿ½ÿµÿ½ÿ½ÿÁÿ»ÿ¯ÿªÿ¡ÿ£ÿ¢ÿ£ÿ©ÿ©ÿªÿªÿ©ÿ¢ÿšÿ{ÿjÿUÿIÿAÿ<ÿ4ÿ9ÿ=ÿKÿMÿXÿVÿWÿ]ÿhÿoÿ{ÿ}ÿÿ‡ÿˆÿ‰ÿ†ÿ‚ÿ~ÿƒÿxÿÿsÿ~ÿvÿÿyÿÿƒÿ†ÿ—ÿŸÿ®ÿ¹ÿÄÿÅÿÅÿÀÿ¼ÿ¼ÿ¼ÿÀÿÁÿÌÿÑÿÒÿ¼ÿ¼ÿ©ÿ§ÿžÿ˜ÿ•ÿÿ“ÿÿ‹ÿ‹ÿŒÿ€ÿ‡ÿ|ÿyÿjÿjÿfÿgÿiÿhÿrÿvÿjÿmÿ`ÿWÿOÿDÿBÿ8ÿ2ÿ1ÿ1ÿ-ÿ0ÿ2ÿ%ÿ ÿÿÿ ÿ+ÿ2ÿ<ÿ<ÿ8ÿ=ÿ0ÿ/ÿ(ÿ ÿ$ÿ ÿÿ(ÿ(ÿ*ÿ'ÿ.ÿ+ÿ*ÿ1ÿ7ÿ;ÿ@ÿFÿGÿLÿMÿUÿZÿeÿ`ÿgÿeÿeÿVÿLÿEÿAÿAÿQÿeÿ]ÿdÿXÿ\ÿZÿ]ÿZÿ^ÿoÿrÿqÿyÿyÿvÿwÿuÿˆÿÿ†ÿˆÿŽÿ—ÿšÿŸÿ¤ÿ¢ÿ¤ÿÿÿ‚ÿuÿqÿgÿhÿ`ÿ]ÿaÿ^ÿbÿbÿ`ÿXÿ]ÿaÿgÿwÿxÿ„ÿ|ÿxÿzÿ|ÿsÿpÿdÿbÿWÿSÿ\ÿaÿeÿ^ÿ\ÿYÿSÿJÿJÿ>ÿDÿIÿFÿIÿFÿHÿDÿ@ÿ9ÿ.ÿ+ÿÿ ÿ ÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿ ÿ$ÿ)ÿ/ÿ,ÿ+ÿ,ÿ5ÿ2ÿ9ÿ)ÿ/ÿ'ÿ&ÿ&ÿ%ÿ3ÿ5ÿAÿEÿFÿEÿMÿCÿBÿHÿLÿTÿXÿXÿYÿ\ÿUÿVÿMÿIÿAÿDÿ<ÿ@ÿAÿFÿRÿSÿ^ÿpÿlÿqÿpÿ}ÿ|ÿÿ€ÿˆÿÿ‰ÿyÿqÿmÿ`ÿZÿRÿLÿHÿFÿCÿAÿJÿIÿKÿYÿYÿbÿZÿ\ÿWÿ\ÿgÿhÿcÿeÿaÿ_ÿaÿcÿ]ÿ\ÿSÿQÿPÿKÿPÿYÿ]ÿqÿsÿ‚ÿ‡ÿŠÿŠÿ˜ÿ’ÿˆÿ‡ÿÿÿuÿrÿbÿiÿ`ÿXÿUÿQÿ`ÿiÿoÿxÿ€ÿÿƒÿ‚ÿÿ‹ÿ‡ÿ„ÿ„ÿ‡ÿ‡ÿƒÿ‡ÿˆÿ‰ÿ‰ÿÿƒÿ€ÿÿ…ÿˆÿ‹ÿ~ÿ‚ÿÿ}ÿÿ{ÿ‚ÿ|ÿ†ÿ„ÿ}ÿ‹ÿ†ÿ‹ÿŠÿŽÿ”ÿ™ÿÿÿ‹ÿ‹ÿ•ÿ’ÿœÿœÿ ÿ”ÿ†ÿÿoÿcÿ]ÿYÿPÿQÿHÿMÿDÿJÿ9ÿ?ÿ1ÿ:ÿ9ÿIÿUÿJÿMÿIÿQÿTÿRÿ\ÿVÿZÿRÿWÿRÿUÿIÿDÿ?ÿ6ÿ*ÿ)ÿ)ÿ+ÿ%ÿ1ÿ/ÿ6ÿ8ÿCÿOÿTÿcÿlÿgÿqÿlÿoÿmÿhÿ\ÿQÿTÿMÿQÿMÿUÿMÿOÿNÿPÿQÿWÿcÿ]ÿ_ÿZÿ^ÿ]ÿfÿbÿmÿdÿjÿaÿmÿcÿiÿhÿiÿfÿeÿhÿ_ÿWÿJÿHÿCÿJÿOÿZÿYÿbÿfÿnÿoÿjÿkÿsÿfÿxÿsÿoÿfÿkÿdÿdÿZÿ_ÿ\ÿaÿeÿbÿmÿeÿmÿlÿkÿnÿcÿrÿsÿvÿwÿrÿkÿhÿhÿeÿiÿmÿrÿsÿyÿzÿsÿoÿiÿvÿpÿpÿtÿnÿsÿmÿ{ÿvÿzÿ|ÿyÿxÿxÿsÿnÿpÿnÿnÿkÿiÿlÿhÿqÿnÿqÿwÿ{ÿwÿ‚ÿ…ÿŽÿ“ÿ”ÿšÿ›ÿ¤ÿ”ÿ›ÿ•ÿ’ÿ’ÿ†ÿŽÿƒÿ~ÿrÿwÿ|ÿqÿiÿeÿdÿ`ÿ[ÿ]ÿ]ÿYÿ^ÿYÿbÿbÿoÿfÿfÿcÿeÿ^ÿWÿaÿ\ÿYÿRÿPÿKÿIÿCÿGÿCÿIÿKÿLÿSÿ]ÿdÿjÿvÿtÿxÿ|ÿtÿtÿrÿsÿmÿgÿcÿ^ÿVÿVÿYÿMÿHÿ@ÿAÿ6ÿAÿ7ÿKÿIÿQÿPÿUÿPÿYÿUÿXÿTÿbÿ^ÿ\ÿdÿhÿjÿeÿYÿaÿ^ÿXÿTÿVÿSÿQÿMÿMÿRÿEÿIÿEÿJÿMÿ^ÿZÿ[ÿfÿeÿfÿfÿ`ÿfÿiÿgÿ`ÿdÿaÿ\ÿ^ÿhÿ_ÿ\ÿaÿ`ÿdÿhÿpÿqÿvÿyÿƒÿ‡ÿŠÿˆÿ›ÿŒÿ¥ÿžÿ¥ÿ•ÿšÿ–ÿ“ÿœÿ“ÿ—ÿ“ÿ‘ÿ‰ÿ†ÿ‚ÿ‹ÿ|ÿ~ÿ{ÿsÿtÿjÿvÿoÿmÿhÿkÿgÿeÿjÿkÿlÿlÿnÿoÿtÿsÿyÿyÿ}ÿÿwÿ}ÿzÿ‚ÿÿ~ÿ}ÿÿwÿuÿtÿwÿwÿ€ÿ}ÿ…ÿ‚ÿ†ÿ}ÿ†ÿ‚ÿƒÿ…ÿ‡ÿÿŠÿ•ÿÿ‘ÿ‰ÿ„ÿ€ÿ‡ÿ{ÿ‚ÿuÿyÿvÿvÿpÿnÿuÿpÿhÿpÿsÿtÿyÿrÿwÿyÿzÿsÿ{ÿ}ÿ{ÿuÿwÿoÿkÿkÿjÿfÿcÿcÿbÿaÿbÿjÿhÿjÿrÿrÿwÿvÿxÿ€ÿxÿ„ÿ„ÿ‹ÿ‹ÿ”ÿ›ÿÿ›ÿ˜ÿ•ÿ–ÿ‘ÿ—ÿ›ÿ˜ÿ‘ÿÿ‰ÿ˜ÿšÿšÿ¡ÿªÿ´ÿ«ÿ²ÿ´ÿ¶ÿ³ÿ²ÿ«ÿ¬ÿ®ÿ§ÿ©ÿ°ÿµÿ£ÿ£ÿÿ›ÿÿ¡ÿ¥ÿ¥ÿµÿ¾ÿ´ÿ·ÿ¯ÿ´ÿ­ÿ²ÿ¬ÿ«ÿ£ÿ¨ÿ¥ÿ™ÿ—ÿ“ÿ™ÿ“ÿ›ÿ¡ÿžÿ›ÿšÿžÿ ÿ ÿ£ÿ¡ÿ¦ÿŸÿ§ÿ¢ÿ£ÿžÿ«ÿ®ÿ©ÿ¡ÿ’ÿ‡ÿ…ÿvÿnÿmÿdÿjÿ_ÿcÿeÿgÿiÿlÿmÿlÿnÿoÿsÿ‚ÿvÿyÿvÿuÿrÿlÿlÿhÿlÿiÿkÿjÿkÿnÿqÿxÿ‡ÿ˜ÿ‰ÿ”ÿ›ÿ™ÿšÿ–ÿ—ÿ—ÿ˜ÿ™ÿ”ÿ’ÿ“ÿ‘ÿ–ÿ’ÿ›ÿ”ÿ—ÿ™ÿ¤ÿ¥ÿ£ÿ”ÿžÿ˜ÿŸÿœÿ²ÿµÿ®ÿ®ÿ®ÿ´ÿ±ÿÂÿÀÿÆÿÓÿÏÿÎÿÎÿÊÿÃÿÅÿ¼ÿ¼ÿµÿ´ÿ¸ÿºÿ»ÿÌÿÄÿÃÿÇÿÀÿÆÿÌÿÅÿÇÿÈÿÊÿÎÿÊÿÉÿËÿÈÿËÿÃÿÇÿ¾ÿÊÿÊÿÆÿÅÿ»ÿ½ÿ¸ÿ²ÿ·ÿ¬ÿµÿ¯ÿ¬ÿ°ÿ­ÿ¥ÿ­ÿ¤ÿ§ÿ™ÿžÿÿ¤ÿ›ÿ™ÿœÿ ÿ•ÿ•ÿ”ÿ‘ÿ‘ÿ’ÿÿŽÿšÿ›ÿ—ÿÿŒÿ’ÿ…ÿ‹ÿÿyÿ|ÿxÿÿuÿrÿpÿuÿuÿuÿrÿnÿsÿtÿxÿ|ÿ|ÿÿ{ÿ‚ÿ€ÿƒÿÿƒÿ€ÿ€ÿÿ|ÿ}ÿxÿyÿ{ÿuÿwÿ~ÿÿƒÿŠÿ‰ÿ”ÿŽÿ–ÿ”ÿ™ÿÿŽÿÿŠÿƒÿˆÿ…ÿÿ|ÿwÿzÿ{ÿyÿƒÿÿ”ÿ…ÿ‰ÿÿ‘ÿ—ÿ‘ÿ’ÿ›ÿ•ÿ–ÿÿ“ÿ‡ÿŒÿ~ÿ{ÿÿzÿsÿlÿoÿmÿrÿvÿwÿzÿÿ„ÿ…ÿŽÿÿ“ÿ–ÿ’ÿ–ÿ—ÿ”ÿŒÿ‡ÿ…ÿ„ÿwÿzÿtÿoÿkÿkÿeÿeÿbÿgÿdÿiÿjÿkÿtÿsÿzÿvÿ|ÿ‚ÿ|ÿ€ÿ~ÿyÿvÿtÿqÿpÿdÿbÿ`ÿcÿWÿ^ÿ^ÿ^ÿjÿmÿyÿÿ~ÿ‹ÿŠÿ˜ÿ–ÿ•ÿÿ–ÿ‹ÿŠÿˆÿzÿxÿhÿ]ÿTÿQÿFÿLÿIÿUÿUÿYÿYÿdÿhÿnÿtÿÿ€ÿ‰ÿŠÿÿŽÿŽÿÿÿŽÿ€ÿÿxÿqÿkÿiÿeÿqÿkÿmÿjÿkÿiÿpÿxÿzÿ‚ÿ”ÿ‡ÿ“ÿ—ÿ—ÿ ÿ¥ÿ¤ÿ ÿ¡ÿ¡ÿ˜ÿ—ÿ’ÿÿˆÿ‰ÿ‡ÿ‡ÿŒÿŽÿŽÿÿŽÿÿšÿ¢ÿ­ÿ£ÿŸÿšÿ“ÿÿ‰ÿ†ÿ€ÿˆÿÿzÿwÿzÿzÿ‚ÿ}ÿ…ÿƒÿ“ÿ‡ÿ•ÿ–ÿ•ÿ¦ÿ¦ÿžÿ£ÿšÿÿ£ÿšÿÿ‘ÿÿ‹ÿ‡ÿ‹ÿ„ÿ‹ÿƒÿ‡ÿ€ÿˆÿÿƒÿŠÿ‡ÿ’ÿŽÿÿžÿŸÿšÿ˜ÿ˜ÿ˜ÿÿ˜ÿ£ÿ¢ÿ•ÿšÿ‘ÿ¢ÿœÿ–ÿÿ’ÿœÿšÿžÿ¢ÿ¨ÿ»ÿÀÿ¬ÿ¸ÿ«ÿ´ÿ®ÿ¼ÿ²ÿ¶ÿ¶ÿ´ÿºÿ±ÿ±ÿ¶ÿ°ÿ®ÿ©ÿ¬ÿ©ÿ£ÿ§ÿ ÿ¥ÿ©ÿ¨ÿ­ÿ®ÿ®ÿ°ÿµÿ´ÿ¬ÿ±ÿ¨ÿ®ÿ§ÿªÿ¡ÿÿ›ÿ—ÿ ÿ›ÿšÿœÿŸÿ ÿ¦ÿ£ÿ¤ÿ¦ÿ®ÿ±ÿ­ÿ¼ÿ´ÿ¯ÿ¬ÿžÿ£ÿ›ÿžÿ¦ÿœÿ–ÿ–ÿŒÿŒÿ…ÿ‡ÿÿ†ÿ‘ÿŽÿœÿ–ÿ¢ÿ©ÿ§ÿ¨ÿ¥ÿ´ÿ¶ÿ¬ÿ«ÿ¬ÿ©ÿ¤ÿ©ÿ¡ÿ©ÿ¢ÿªÿÿ¢ÿšÿ˜ÿ›ÿ˜ÿ›ÿ–ÿœÿ¢ÿ•ÿ™ÿœÿŸÿ ÿ¥ÿ¨ÿ§ÿ¦ÿªÿ§ÿ¨ÿªÿ¢ÿ¤ÿ¢ÿ ÿšÿšÿ˜ÿšÿ™ÿ–ÿ—ÿ˜ÿ™ÿ¤ÿ¨ÿ¤ÿ¤ÿ¥ÿ§ÿ¨ÿ¥ÿ«ÿ¢ÿ¨ÿ£ÿ¢ÿ¥ÿÿ—ÿ’ÿˆÿŒÿ„ÿ|ÿÿvÿzÿÿˆÿtÿ~ÿtÿ{ÿ{ÿwÿzÿtÿvÿÿ‰ÿ„ÿ€ÿ~ÿ{ÿuÿsÿwÿkÿnÿiÿnÿtÿzÿpÿvÿvÿtÿ†ÿÿŠÿ‡ÿŒÿ“ÿ’ÿÿ˜ÿ¨ÿšÿ›ÿŽÿ‘ÿˆÿÿ†ÿ‡ÿ†ÿ…ÿŒÿŠÿ„ÿˆÿˆÿ†ÿ‰ÿŠÿ’ÿ’ÿÿ’ÿ’ÿ”ÿ‘ÿ“ÿŽÿÿŠÿˆÿˆÿ‹ÿˆÿŠÿÿ‘ÿ™ÿ¡ÿ›ÿ›ÿÿÿŸÿ©ÿ¦ÿ«ÿªÿ³ÿ±ÿ­ÿ³ÿ°ÿ»ÿ­ÿ·ÿ¸ÿ·ÿ®ÿ¶ÿ²ÿªÿªÿ©ÿªÿ¡ÿ¥ÿ¡ÿ¡ÿ¡ÿ¡ÿ¢ÿ©ÿ£ÿ£ÿ¤ÿÿ£ÿ¢ÿŸÿŸÿ¤ÿŸÿŸÿ¤ÿ¢ÿ©ÿ§ÿ±ÿ°ÿ³ÿ¶ÿºÿºÿ¾ÿ¾ÿºÿÁÿ¾ÿÈÿÅÿÉÿÂÿÏÿÆÿÅÿÄÿÀÿÃÿÂÿ»ÿ½ÿ»ÿ½ÿºÿ½ÿ½ÿ½ÿ½ÿ¸ÿÂÿÁÿ½ÿÇÿÃÿÌÿÇÿÍÿÉÿÌÿÊÿÑÿÅÿÈÿÃÿÄÿÀÿÁÿ»ÿºÿ·ÿ·ÿ¶ÿ¸ÿ¶ÿµÿ¹ÿ³ÿºÿ¿ÿºÿ¹ÿ¼ÿ½ÿÃÿÉÿÅÿÊÿÎÿÎÿÊÿÒÿÍÿÍÿËÿÇÿÄÿÅÿ·ÿºÿ³ÿ¶ÿ·ÿºÿ¿ÿºÿÈÿÊÿØÿÕÿÕÿäÿâÿèÿéÿìÿòÿãÿêÿâÿáÿÝÿâÿàÿÜÿØÿ×ÿËÿÌÿÌÿÊÿÅÿÌÿÃÿÍÿÌÿÓÿÖÿÝÿ×ÿáÿØÿâÿßÿñÿûÿóÿðÿêÿèÿâÿçÿéÿåÿäÿåÿëÿßÿàÿæÿëÿäÿåÿåÿæÿëÿæÿäÿòÿéÿéÿãÿâÿåÿàÿåÿåÿçÿåÿãÿåÿàÿåÿçÿæÿéÿçÿçÿæÿïÿêÿòÿëÿøÿ÷ÿúÿ÷ÿ÷ÿùÿ÷ÿûÿûÿûÿüÿÿÿ   øÿþÿôÿ÷ÿîÿòÿòÿóÿòÿòÿýÿöÿ  þÿýÿýÿùÿùÿöÿùÿõÿòÿøÿôÿûÿúÿúÿøÿûÿüÿõÿóÿìÿòÿëÿôÿèÿíÿçÿñÿûÿòÿðÿïÿîÿñÿóÿúÿûÿúÿûÿüÿþÿÿÿ ÿÿ  ýÿþÿÿÿÿÿûÿúÿùÿõÿñÿùÿóÿûÿ÷ÿýÿÿÿÿÿúÿúÿÿÿ  "#    ÿÿ  ýÿýÿþÿÿÿÿÿ÷ÿúÿüÿÿÿÿÿ        ÿÿ   !$.1%.)*  úÿùÿýÿûÿÿÿ")"    ûÿþÿüÿýÿþÿ       2,($%''"-3+%&%(*,%.,/95757>=MIFIVRGCA?F=?<?C?::=41>06314476;6535342234//.D;251>6684857723.092(*"#$&)*+.*;585POK?DJ@?;>B<BA?EG=D>?:=8==<@>A=CKF=EBDC?B@E@G>E;C?>;=;IG?>B?=DEJ@JBAD9<7873;5639>38:<<AFBBECCBKJDB>2.-)&'--3*2*.-/1,/-,+'),$'"" ,/%$&+ &!!(*(+)-(1234>98834;/71330;52.,+.&-**)'10..4..5,.,,2*08/0***+&)*)%)$"%$%#'%"  $ )"*",*)5,69ACKEDDHCG>E?AAB5=,:51;6=6A7;88@>77687425-63-0+(+)+#)%(*,+140745465:33730356296<:79?::::A;A6B<B:BBDG?DDCA>>;@BE:=497:<9<<8?2E8<>9450.2//1--51*(&'$('74-817@;I?OGQQRV_M[OXNVSW]\_U_WZ[]YX[`fdlkkjbg\l^aa]XWYTXTYTYQ[UYX\]]\b[_Z]\Y\UZYUVJRK^[WLNLNLLOPXVPOHTOLKMHNIJPSNZMXPW`^WXWWZYTWN_fV\Vej`XTVPUJVRQPVRXRT[VUMIIJFDC?BAIF?A>C?>FDFBNDCC<@AF<=?;E<BAEAERQCJLGROSQQRPXYN^a[XQUQOWQOJR[ZVS__ZZVYUZWY[[W[_Z\YUUZSPTPQVOTJPOKQLJLJMOIG>K@GD>MF@:8?8AA==;<8;83253453339185;4B9EFHCDDCBRNEC=A;A;CDBCFGFMXUTSW]]UXaf^g\ijhheag^h`hikacikiciijdgfhedbgkjigfcbe_eai_fae_jeihofdiccepsfg]gaa`d[_X]^Y`ddojgc^decjcrgiadfdcchfioqpqsnvott~Œ{xy}wzwxsupx{yuspsrsry{vvquv}|vvsr€ˆxt|yxrqlnhnengz}vyz{x{xz~|ƒƒˆ„…„‰ˆŠˆŠ‰ŒŠ‘‹˜“’—•’‹ŒŒ‘‡’‹Œˆ‹ŽŠˆ“Š‘ŠŒ‹ŒŠ‹—‰‘‰‡„{yz{|{rzu{q|xy{u{xy|u|qwxvxzyww~{‚~‡„Œ††ˆ‚ƒˆ’–‘‹††}Š‹‚†‚…ƒ…‹†Œ–ŒŒ…†‡‡‡‰ˆ‹Œ“ЉދЇ‰ƒƒ„‚y|zptpstnsvvormpyzwzztrsqzwuzqqmmlqqxq}€z|wˆ|…|vwxy|vsyqxoqkurrumowiemifhba[b[f_Y]UWWV]X]bb\`a_bddfbaacf`dddab]]]`_cd]e]edaca_c^bgqofyumhicgn`idqiicgedh`dhfkgidmdkfdlcgddhdgljda_e[^Y[WYZRXRW\T[^_[Y\[\a_X_^]W\W^Tcc_c\aa\X[]]`ZSeX]VUVVX[XTUYSTROTNRTXUUQQLPVf\^VZVY\b^c^hggfacehc`]`bf_a^Z[Z[]ajb]daldjoghdfdehmmlmgijagaoficfdaihkfofvwwltvpxy…xxtrvmtzyyrvontiojpmjfjhfcef^fbgdfegoj{ˆvvnnpsjqlpopvkuttlsrnzy}typvvxuptmtsspqqrpqtlzt{o~q~|x~|wuuqqmpqntqpojovxjoijhfgakcmhbjinhad^dddZa^^]UbVb\iWd]b]a\Z[\VaWb^^`YZZ[Y]\`a^cd`facitjeia`adfc^`Wjd^`XaZ_dja_W^\]]^]\ZZ^\[`XYPbU[MXTPLQDPFMHHMPMLNQLSKTP]WVUV`XZY[X_VX[[kg[ZTVQ^TRRRSOWcZYT]USPOLQRPPJOLKPNNYRNOQMHJLMLKSLXRMHKL[OSLILKRMFPJIJOKWVMTOSQRPQTUS_X\\[^`d_ebffoheicfcaefoeplklglbjhiciab`kec^abc`boeihmicodnhlioijkhmhceeaeceekinpolkppvpszzqyuwyw}wo|w|{}y{~~…„‡„€|€}~ƒ‰ˆ~w{|}zv~y}|………ƒ€…€ƒ‚‰ƒˆ††‡…‰‡ŒŽˆˆˆ‹„‡„‡€‹‚‹„‡†Š‡†…‹ˆŒ—¢“‘’•¢•—‘𓉉•‘’‡‹Š…ˆ†ŒŠ„†€ƒ‚‚ˆŒƒ‘‹Œ‡‘ŽŠ‹Ž‡˜‘ŠŠ‚‹‡Œ‡‡‚†{‰€ˆ|‡ƒ…€‡„†‚|wˆ|…ƒy|xxvysxt{suvsqwjronkljkdiflfkikikhir€wupmfgkcibgdqwujofoglipkhlkkhpetpmfnierpohfggk\ca[b[_V^W[ZTUVWlb_^\Y]TYXRTOROURTVUPMGOLOLINRQSVUU`Y`ZZWTYVWZYXOURQTPRPQLRPPOQP[dYZVRRMRLROMNVELTRRTPPPPRKMWQNUOTOLPILJNNLJRUMRONPMPLOSRZOSQLQUXPSLUGUNNKOQMMQORTbRQLMPJSLSSb]NKPJOLFMARRQIGCFCFDF<F=DES@J;HF>D@GDAD;FKDG?M@JCDDHAJHMNNKNVTMKLHZPQQQGMKJKMPTNNTZQQOQJNSVTSSQNXWRSPQLMJOPMXQSNNQNUQMRITDOANIJJOIFIFMGORYSOKJHEDDEAJBHCIJGHEEIFLFMFJFICIFEFBPKDJIGGCCF=HEDAEIEFFIFBCHCLEEFEGEFGCACBF><>?:<771613420949CF856535795/6024,6,4.2,/,1)-0/1,/<+00./4+3.1049@9739,2.@=342-13248;5512712?F943;:212*,.-0*305,5).&/+/+0++0*(%%!%$)&.*-.+/120*.()-,/(*(,-%+(%&'-,(*()&'#*#0-+&-'),/,.3000404551.43<4C?=6781<5;A;>>C=B<A<>>;H5D?BA@?A8D;;C=DJAE:M@?9@8@F?=:>85=<?9<7?6=9:@=8;:=<7@:8:8596?B9>9@9==A=@DGLHDA>D=@@>>A=LKH>I<JIPKILMLJNIGHOQPMKIIAHFIGEGMSMOMQHQKROPOQTSVVX^WRUPOWSTSUTVYXYQ[TXSYXSOUKLNXSOMKJNQNTQOOJRIMKMGLOKKELKMMJKOINHLMNINHOFW]YRPRKRTONKIGFFLGHBLBIDBGDKFJBHDFCEDECF?EBBDCFFGJJEDFAAB?B:?8B>9?8?8=<<:<==>=><7::4838:5:58899?:::;<590:37.734..-/-0--,6<7==D622/-+$%##'!49/$  $             ÿÿÿÿ   ýÿ ÿÿ  þÿýÿùÿüÿ  ýÿþÿþÿÿÿþÿþÿÿÿýÿ þÿþÿþÿÿÿÿÿ  þÿÿÿ                           ýÿûÿûÿýÿþÿþÿûÿüÿûÿøÿýÿúÿúÿõÿÿÿ÷ÿûÿ÷ÿóÿõÿ÷ÿòÿõÿöÿùÿõÿöÿõÿõÿóÿïÿúÿïÿôÿôÿÿÿ÷ÿúÿøÿ÷ÿ÷ÿúÿöÿúÿõÿøÿõÿöÿ÷ÿöÿôÿöÿòÿùÿóÿòÿóÿõÿïÿóÿíÿóÿíÿðÿòÿëÿôÿíÿìÿíÿéÿëÿïÿìÿéÿêÿèÿïÿçÿìÿôÿíÿìÿéÿáÿäÿÝÿßÿáÿÞÿÛÿâÿßÿÛÿßÿÝÿÚÿÚÿØÿäÿÜÿàÿÖÿ×ÿÕÿÕÿÏÿ×ÿÏÿÜÿÒÿÒÿÐÿÍÿÕÿËÿÛÿÓÿÐÿÓÿÑÿÓÿÑÿÔÿÎÿÔÿÑÿÎÿÐÿÞÿ×ÿÑÿÕÿÑÿÒÿÒÿ×ÿÖÿÕÿÙÿÓÿÖÿÓÿÝÿÔÿØÿÔÿÝÿ×ÿßÿÓÿÖÿÑÿ×ÿÐÿÒÿÒÿÓÿÒÿÏÿÒÿÓÿÝÿÓÿÔÿÔÿÒÿÐÿÛÿÐÿÒÿÕÿØÿÖÿÕÿÕÿÙÿÙÿÑÿÓÿÎÿÒÿÉÿÏÿËÿÉÿËÿËÿÊÿÏÿÅÿÈÿÂÿÉÿÊÿÉÿÒÿÅÿËÿÂÿÊÿÄÿÉÿÎÿÄÿÏÿÊÿÓÿÑÿÐÿÊÿÍÿËÿÌÿÍÿÐÿÐÿÑÿÔÿÕÿÓÿÒÿÖÿÍÿÎÿÒÿÓÿÒÿÑÿÏÿØÿÚÿÔÿØÿÖÿÓÿÏÿÕÿÖÿÛÿçÿÞÿÙÿÚÿÖÿßÿÝÿ×ÿÞÿÕÿØÿÖÿÖÿÖÿØÿÔÿÖÿÔÿÚÿÒÿÕÿÕÿÔÿØÿÛÿÔÿ×ÿÕÿÕÿÛÿÒÿÔÿÛÿÚÿ×ÿÖÿÐÿÐÿÑÿÐÿ×ÿÏÿÝÿÍÿÜÿÐÿØÿÜÿØÿÔÿÊÿÕÿÒÿÖÿÒÿÐÿÓÿÔÿÒÿ×ÿÔÿÔÿÍÿ×ÿÕÿÙÿÒÿÕÿÒÿÓÿÔÿÛÿÚÿ×ÿÜÿÒÿÙÿÒÿÛÿÓÿÙÿÜÿÝÿÛÿÜÿÞÿàÿÜÿàÿÖÿâÿÙÿáÿÝÿâÿÛÿÝÿÞÿãÿäÿàÿÜÿÛÿÚÿÛÿ×ÿÜÿßÿÝÿèÿÜÿÞÿÞÿãÿÜÿÝÿàÿãÿÝÿáÿßÿÛÿÝÿâÿïÿêÿâÿßÿÜÿãÿÚÿßÿØÿÞÿØÿÝÿÜÿáÿÜÿçÿìÿáÿåÿÝÿéÿäÿàÿâÿåÿâÿçÿäÿçÿäÿéÿæÿìÿéÿîÿçÿôÿðÿëÿëÿíÿóÿëÿìÿêÿíÿìÿñÿìÿêÿíÿòÿîÿôÿéÿõÿêÿôÿîÿùÿíÿôÿïÿïÿöÿñÿøÿùÿòÿöÿôÿôÿóÿôÿøÿðÿùÿñÿöÿðÿñÿñÿòÿøÿîÿõÿðÿôÿîÿîÿïÿèÿåÿíÿèÿêÿìÿèÿìÿñÿüÿïÿìÿíÿéÿçÿæÿçÿæÿðÿèÿëÿìÿîÿçÿìÿåÿëÿçÿåÿëÿêÿìÿéÿîÿëÿéÿéÿíÿóÿéÿìÿåÿæÿãÿïÿêÿóÿìÿëÿêÿèÿïÿèÿèÿëÿäÿéÿéÿíÿéÿèÿçÿæÿçÿéÿçÿãÿçÿæÿèÿçÿëÿéÿæÿìÿàÿíÿçÿæÿìÿêÿìÿãÿçÿâÿçÿÜÿäÿÞÿÞÿßÿßÿÚÿáÿèÿÝÿÞÿÞÿØÿÝÿÜÿÝÿÝÿÝÿÜÿØÿáÿÜÿßÿÚÿÚÿÖÿÜÿÙÿÜÿÛÿÙÿÒÿÙÿÐÿÙÿÜÿÕÿÓÿÖÿ×ÿÙÿÕÿØÿÔÿÒÿÎÿÕÿÙÿ×ÿÒÿÖÿÓÿÓÿÒÿÛÿÒÿÖÿÏÿÝÿÔÿÓÿÍÿÐÿÍÿÇÿÏÿÇÿÊÿÍÿËÿÒÿÈÿÊÿÈÿÆÿÇÿÆÿÈÿÂÿÈÿÆÿËÿÇÿ¾ÿÇÿ¾ÿÂÿ»ÿÀÿ¼ÿ½ÿÆÿÀÿÄÿºÿ¼ÿ»ÿÄÿÁÿ¿ÿ¸ÿ½ÿ¹ÿºÿºÿ¸ÿµÿºÿ¹ÿµÿ·ÿ¹ÿÄÿ¼ÿ¸ÿ´ÿÄÿºÿ¶ÿ¯ÿ´ÿ¸ÿÀÿ»ÿµÿ¶ÿ·ÿ·ÿ·ÿ·ÿºÿºÿ·ÿ¹ÿ³ÿ¶ÿ³ÿ·ÿ·ÿ¶ÿ³ÿ³ÿ³ÿµÿµÿ¯ÿµÿ±ÿ®ÿ¯ÿ±ÿ²ÿ¸ÿ¾ÿ»ÿ·ÿ·ÿÌÿÀÿ¹ÿ¹ÿ¶ÿ´ÿ³ÿ²ÿ²ÿ²ÿ²ÿµÿ¬ÿ°ÿ³ÿ³ÿ¯ÿ®ÿ²ÿ¯ÿ¶ÿ¬ÿ³ÿ²ÿ­ÿ±ÿ°ÿ·ÿ«ÿ±ÿ­ÿ»ÿºÿ¹ÿ³ÿ­ÿ³ÿ±ÿ¬ÿ¨ÿ©ÿ«ÿ­ÿ®ÿ°ÿµÿ½ÿ¸ÿ¹ÿ´ÿºÿ³ÿ¸ÿ¶ÿ¸ÿ·ÿ·ÿµÿ¸ÿ³ÿ¸ÿ·ÿ¼ÿ¾ÿ¿ÿ½ÿ»ÿ»ÿ½ÿÁÿ·ÿ¿ÿ·ÿ¼ÿ¿ÿÁÿÃÿ¿ÿÀÿ¾ÿÃÿ¼ÿÅÿ¼ÿÃÿ½ÿÆÿÂÿÍÿÊÿÇÿÃÿ¿ÿÀÿ¿ÿÂÿ¿ÿ¿ÿ»ÿ½ÿºÿÂÿ½ÿÂÿ¿ÿÀÿ¿ÿÄÿÈÿÂÿÂÿÄÿÀÿÄÿËÿÃÿÇÿ¿ÿÃÿÀÿÊÿËÿÉÿÉÿÑÿËÿÉÿÐÿÌÿÅÿÏÿÊÿØÿÇÿÌÿÇÿÆÿÄÿÉÿÆÿÆÿÀÿÇÿÃÿÄÿÀÿÉÿ¾ÿÆÿÀÿÄÿÇÿÃÿ¿ÿÉÿÕÿÐÿÎÿÌÿÃÿÄÿÂÿÇÿÄÿÅÿÅÿÄÿÁÿÍÿÎÿÈÿ¼ÿ½ÿÀÿÈÿÃÿ½ÿÁÿÃÿ½ÿÅÿ¾ÿÄÿ¸ÿÃÿÀÿ¿ÿ¸ÿ¿ÿ¿ÿÃÿÁÿ¼ÿÉÿÌÿÂÿÊÿÃÿÅÿÇÿÇÿÀÿÄÿ½ÿÅÿÃÿºÿÁÿ»ÿ¹ÿ·ÿµÿ¹ÿ»ÿºÿµÿºÿ³ÿ¹ÿ´ÿºÿ¹ÿ´ÿ¼ÿ¾ÿÁÿ¾ÿÃÿ¿ÿÇÿÆÿÇÿÉÿÆÿÅÿÌÿËÿÈÿÊÿÊÿÈÿ×ÿ×ÿÏÿÑÿÌÿËÿÈÿÍÿÊÿÌÿÐÿÔÿÌÿÉÿÉÿÍÿÈÿÏÿÉÿÎÿÑÿÑÿÓÿÐÿÑÿÐÿËÿÓÿÌÿÖÿËÿÔÿÎÿÑÿÕÿ×ÿÓÿÚÿÕÿÕÿÙÿÖÿÞÿ×ÿÙÿÖÿÚÿÖÿÛÿ×ÿÛÿÚÿÞÿØÿÞÿ×ÿÛÿÝÿÛÿàÿâÿßÿæÿÚÿÞÿÛÿàÿßÿÜÿàÿÜÿàÿÜÿàÿßÿâÿÛÿéÿåÿâÿâÿáÿáÿáÿæÿçÿßÿàÿáÿâÿèÿéÿîÿðÿêÿëÿëÿíÿéÿæÿòÿ÷ÿçÿíÿäÿêÿêÿãÿçÿçÿãÿçÿâÿåÿêÿöÿïÿîÿèÿôÿëÿíÿêÿæÿëÿßÿêÿÞÿâÿáÿßÿÞÿÚÿßÿàÿÞÿÜÿÓÿÕÿÖÿÑÿÛÿÓÿÓÿÔÿÐÿÓÿÕÿØÿÐÿÓÿÍÿÙÿÖÿàÿÛÿÚÿ×ÿÝÿÒÿÞÿØÿ×ÿÌÿÍÿÏÿÍÿÍÿËÿÊÿÅÿÊÿÉÿÊÿËÿÇÿÇÿÄÿÊÿÁÿÌÿÁÿÍÿÉÿÊÿÂÿÃÿÄÿÃÿÃÿ¾ÿÆÿ»ÿÀÿ¶ÿ»ÿ¾ÿ»ÿ»ÿ¸ÿ´ÿ·ÿµÿ´ÿºÿ·ÿµÿ±ÿ±ÿ°ÿ´ÿ´ÿ±ÿ¨ÿ¯ÿ¬ÿ¬ÿ§ÿ£ÿœÿ¬ÿ¢ÿŸÿ¡ÿ˜ÿ™ÿ™ÿšÿ›ÿšÿ˜ÿ’ÿ—ÿ˜ÿÿ¦ÿ›ÿŸÿ”ÿ—ÿ–ÿ ÿ›ÿ›ÿ•ÿ›ÿ”ÿ­ÿ¥ÿ ÿŸÿ ÿ™ÿ ÿ ÿ›ÿŸÿ–ÿœÿ£ÿ¡ÿ¤ÿ™ÿ¡ÿŸÿžÿ¤ÿ¨ÿ©ÿ¦ÿ®ÿ½ÿ³ÿ³ÿ¸ÿµÿ²ÿµÿ¹ÿÁÿ¾ÿ½ÿ¸ÿ³ÿ½ÿ´ÿÀÿ¶ÿ½ÿ´ÿ·ÿµÿÅÿ¾ÿÈÿÁÿ¼ÿ¾ÿÁÿÈÿÉÿÌÿÃÿÐÿÎÿËÿÐÿÐÿÐÿÌÿÐÿÖÿÚÿÚÿ×ÿØÿØÿâÿßÿáÿâÿæÿåÿæÿæÿïÿëÿñÿëÿñÿðÿõÿòÿñÿóÿïÿýÿøÿúÿöÿùÿúÿôÿúÿ              ÿÿüÿôÿøÿúÿýÿþÿòÿöÿòÿíÿòÿêÿíÿèÿèÿâÿäÿÛÿ×ÿØÿÒÿÚÿÙÿÒÿÈÿÎÿÌÿÊÿÎÿÃÿÂÿ¹ÿ¾ÿºÿÂÿºÿÂÿÆÿÀÿÅÿ¿ÿ¼ÿ­ÿ¸ÿ½ÿ²ÿ«ÿ«ÿ§ÿŸÿœÿ›ÿ•ÿ˜ÿ”ÿÿŠÿ†ÿ‰ÿ‚ÿ…ÿ‚ÿ|ÿxÿ{ÿzÿyÿrÿ|ÿÿyÿrÿsÿnÿgÿhÿfÿsÿjÿkÿjÿmÿpÿlÿnÿiÿgÿeÿfÿaÿhÿfÿlÿcÿdÿdÿaÿgÿhÿjÿbÿeÿfÿlÿhÿlÿoÿtÿvÿvÿ|ÿxÿ{ÿ{ÿ‚ÿ†ÿ†ÿ‡ÿ†ÿÿ‡ÿ‘ÿ“ÿÿ’ÿ™ÿ™ÿ›ÿŸÿšÿ¢ÿ¨ÿ¨ÿ­ÿ­ÿ·ÿ±ÿ»ÿ¸ÿÅÿÆÿÆÿÏÿÎÿÖÿÖÿàÿÛÿâÿßÿëÿêÿóÿùÿôÿøÿþÿ   %,.521@;HDOMVT`chmrkvy|~€|‡‡‹™œ¢¤§§¯¶»¼¶»½ÈÉÒÝÐÐÐØ×ÜÏÔ×ßÛÙ××ÛÔåèãÚÙÛÜÜÚÕÓÍÏÒÉËÂÀÆÄ½»­®®¦¦“””Œ…yncWOJF61& íÿìÿÛÿ×ÿÆÿÀÿ¸ÿ¥ÿÿ’ÿˆÿ{ÿkÿ[ÿPÿCÿ:ÿ#ÿÿ ÿõþöþ×þÓþÃþ¼þŸþ–þ“þ„þlþ]þJþEþ.þ&þþþÿý÷ýñýäýÓý×ýÉýºý³ý£ýý”ýŽý„ýýsýlý]ýYýPýPýPýKýBý;ý<ý9ý7ýBýAý7ý8ý3ý:ý;ý9ý>ýGýPýOýWýVý]ý_ýrý}ý~ýˆýˆý˜ýŸýªý¶ýÊýÏýÙýèýþýþþ2þ:þ?þMþTþhþmþ€þ‡þœþ¦þºþÌþ×þåþûþ ÿ ÿ4ÿMÿVÿkÿ‚ÿ–ÿ¬ÿÆÿ×ÿæÿþÿ !2CScwˆ™µÇß÷2Qq¶Õó:iˆ§Áàÿ!7Ne†œ»Íî!Ae|Œ¡ÂÞ÷ 2LgyŠŸ¢®³ÁÄÊÁ»µ°­™‰peRB# ëÊ­›{b9þß½d'ó¼3á’K÷ªM±ÿ_ÿÿÖþþFþ þØýšýfý5ýýÑü ü„üNü)üüûÓû¥û‚ûZû:ûûíúÈú©ú•úúpú]úLúPúAú@úBú7ú7ú7ú?úRúZúkú…ú”ú–ú±ú¿úÜúïúû(ûIûsû ûÉûóûüHüuü£üÈüõüý:ý[ý„ý£ý¼ý×ýëýÿý%þ5þKþeþtþ•þœþÄþÒþîþÿ"ÿ4ÿTÿcÿ…ÿ–ÿ­ÿ¹ÿÏÿÚÿéÿðÿõÿôÿëÿòÿåÿÜÿÆÿÊÿ³ÿ ÿÿ}ÿvÿ[ÿUÿBÿ>ÿ*ÿ!ÿÿÿðþçþÕþÅþ±þ§þ‘þ{þ_þNþ9þ%þ þóýåýÑý¿ý´ýý‘ýýyýsý^ýZýRýEý-ý'ýý ýþüùüîüÜüÛü×üÙüÒüÕüØüáüëüûüýý#ý1ýIýTýaýoýzý‡ý‘ý™ý¢ý¥ý³ýºýÎýÖýÜýíýöýþ þ>þFþdþ…þ§þÅþàþûþÿ@ÿgÿ}ÿ¡ÿ¾ÿäÿÿÿ1Wsš¿å9h ÙQ‘ßb¯ö>uÁþ={¢ÙBxŸÏó!Iu™¼Ðè.?APICB9+ã·›n;ЛzU!é­z8û­\þ‘$ÆKËCº3°ÿDÿÐþ_þêý}ý ýàü•ü<üîû¡ûhû5ûûÄúŒúNúúéù®ù†ùMùùØø«øøgøOø0øøÿ÷ó÷ÿ÷øøøø4øXøø ø¿øÜøù1ùaùŒùÀùìù(úZú¡úÞú"ûcû¬ûøû=ü“üÝü/ýxý¿ý þOþ™þ×þÿ=ÿxÿ¨ÿäÿ?b‘ÊóIuÁéA[tŒ£¹ÈËÖÊʺ£•tiE)îÁŸuM&ëÊ‘c.ûÿÂÿÿoÿ1ÿ ÿÊþªþ{þMþ(þüýÎý¨ýyýMý%ýýØü²ü}üWü'üüèû¿û™ûkûUû3û$û ûùúèúÞú×úßúãúåúëúîúþúû"û5û>ûLû\ûuûŒû§ûÃûÖûõûü-üIühü|üšü·üÞü ý6ýVýpý‘ý²ýáýþ+þ\þŠþ¯þÍþûþÿ?ÿdÿ”ÿ¿ÿëÿ2]€°Îô*Nu–«ÁÞõ8dŠÁò:xÉgÁ"}Ú1ß.|ÑR‰Â 0 U o ~ – ° ¼ ¾ Á ¸ ¸ ° ± ³ £ ’ u l X E  øÀ€Pê¬^ŇDçn÷ŠŸ tÔ>¦nÿÆþ$þtýèübüïûuûôúú ú¹ùpù)ùäøˆøKøøî÷Ç÷š÷]÷+÷ýöáöÁö¤ö€öUö8ö&ö!ööööö%öKötö¢öÇöûö6÷€÷Ï÷"øuø¼øùnùÖùAú©ú ûhûÚûDü±üýƒýäýIþ¯þÿÿØÿ4€Ïq®ùZ‹Îû3U„­Ý 7Sv‘®ÈæòíæÜÊ«Ž`7ΊX΃:ó¦Y ¸oÉÿzÿ4ÿàþ’þBþøý³ýtý/ýêü±üoü;üúûÈû£ûoû-ûûÏúŽúeú1úÿù×ù£ù…ùYù:ùùýøáøÙøÒøØøãøåøøøù5ùYùvù§ùÆùíùúDúzúžúÁúÞúû=ûkûŽû»ûÜûü3üaü—ü½üèüý;ýqýœýÊýøýþCþyþ§þÖþùþ$ÿ>ÿkÿÿÃÿéÿÿÿ'=hŒ±Ë×ïû7?I[p¥ÃðO…Ò({Á%yØ'Ð"e¡ß Gu±âPžë# m ­ ÿ = ~ ¤ à # . ? Q R > % þ è Ì ž W  Ý • L þ˜3Ü‹$ÉZôŠ"¡ › pÐ1‡ÞÿEÿ‚þåý?ý°üüvûéú^úàùmùýø’ø$øÄ÷b÷÷ÇöyööØõŸõlõ3õõÕôÆô­ô ô›ôô¢ô²ôÓôõ<õoõ£õÜõ(ösö½ö÷X÷¶÷øføÕø*ù‘ùãùNúÄúDû¹û-ü¨ü%ý¢ý(þ®þ6ÿ©ÿ#¥ èP¡îB×Q³âEgˆ¡¾ÖèóôðåÒÁ£{Kå°i,â–Nù¶\ ³U÷š6Ôÿmÿÿ–þ,þÇý`ýñüŒü)üÉû{û*ûÞú–úYúúéù³ù…ùTù.ùýøÖø´ø•øzøYø@ø"øøøøû÷÷÷øøø/øZøoø“øÄøêø ùVùŒùÀùûù(úaú¦úÞúûHûû¸ûôû'ühü¡üÒü ý>ý}ýµýäýþ=þgþžþÅþðþ ÿ$ÿFÿhÿ„ÿ£ÿ·ÿÖÿæÿþÿ"8Xc‰±ÆÛñú(BYo…Êý+e›å+|Ë F‡É LˆÆþ8mªõ Wšé;˜äQ Ë + ‘ î ] Ê % h ™ Ö   $  ÿ ó Í o < Å Œ I ¸ j £ 8 ÅLÕIµ,­"œiÎ=«d¯ÿÿwþ×ý6ýŠüåû@û™úöùUù°ø ø‹÷õöwööœõ3õÓô„ôIôôéóËó¾ó½ó»óÏóèóô+ôJôtô­ôõô'õgõ¨õóõ@öšöòöA÷˜÷ô÷bøÉø>ù²ù1ú¬ú-ûºû@üÊüVýåýrþöþ…ÿ›‘ ‚ùgË+ƒÖ&o¨Ú+Fcq€‡maE$ÞµŒ['ð«t&ÛŽ9߇ºRëzÿÿžþ(þšý(ý·üAüÊûXûîúŠú.úØù‹ù;ùùÓøšømøFø#ø øñ÷Ô÷Á÷¨÷ ÷œ÷–÷›÷”÷“÷§÷¹÷¸÷Ë÷×÷ø÷+øJøaø•ø½øëøùYù’ùÓùúMúŽúÕúû^ûœû×ûüSü¡üÝüýZýýÄý þ0þ`þ€þ¡þÆþéþÿÿ!ÿ3ÿBÿPÿaÿgÿuÿ}ÿÿ£ÿ°ÿÀÿÊÿØÿÙÿîÿüÿúÿ$'1>NXmƒ¥Êö$?b°Ùû4V¡Ãò>u¸ñ?…Ú3†ä<À/“ö]íf É > › ÿ s ß G › Ä õ 9 ™ ® Ÿ ¡ ˆ ‡ … ] . ç ˜ Z - ï ”  ª C ì y uéJÈp žø_á ]á5‚ÿÞþ7þiýüšûÒú,úšùÜøøl÷æöö3öäõ„õ0õÛôºôºôÄô´ô}ô\ô^ôô°ô»ôÂô¶ôÌôôô>õ‹õÆõæõöcöÞöQ÷²÷ý÷Nø¸ø:ù¹ùLú½ú,ûûü­üLýÍý?þ®þ0ÿÈÿhónÓ@¹E´I‡ÌJrˆŽ§µ±ª•|xxiJõȪ„V%Òˆ6ö¯Xï€#Æjòÿ|ÿþþ‘þ&þ±ý=ýÎühüü©ûUûþú¶úkú+úèùÌù’ùpùLù+ù#ùûøöøàøãøÝøØøÐøËøÖøÙøáøÞøëøöøùù-ùJùdù€ùšùÅùêù(úSú†ú¯úÚú#û[ûšûÌûü@ü€ü¾üúü$ýXý€ý˜ýÁýÚýûýýýþ-þPþfþmþjþ`þcþcþiþjþjþcþmþ€þšþ¬þ±þŸþŸþ þÄþÐþäþèþêþøþÿAÿhÿ€ÿ‰ÿ…ÿŠÿ¬ÿÔÿæÿâÿÒÿäÿ÷ÿ +W—Ó)[‰å?xªðEÄ3l¬þE…¿ü:y­á0p§Ö ~¶ÜúK © ó ' ^ £  q Æ 5 w « Ö ó    Ý ª {  ž ~ ˆ ðNÁDÍYôŸCìf9ç„ÀQÞC²bÿÁþ þrý¼üü_ûÞú[úÜùaù÷ø øZø øì÷½÷–÷g÷L÷O÷M÷E÷=÷8÷R÷v÷’÷º÷è÷øIø~øÛø"ùtù«ùòù3úƒúÅúû=ûyû¨ûëû*üpü¬üÛüýeý¿ý"þzþÒþ5ÿ ÿxë:ŠÂOŠ©´ÈÁÉÁ¯”~]MC5%øêÝ̲—[!øÇ–KµÿzÿEÿüþ®þgþþðýÇý“ý\ý(ýíüÃü™ü{üHü üåû¿ûŠûaû;ûûêúÁú©ú©ú£úžúú‰ú„ú—ú¥ú¯úµú§ú³úÅúÌúÐúÅú¹ú³úºúÎúâúôúûû8ûVû”ûÄûìûü6üü¹üÝüý-ý7ý(ý"ý8ýAý:ý*ýHýjý—ý—ýý™ý¾ýçýþ þ:þUþvþŽþŽþ‰þ–þ½þ¸þ—þ|þuþ‰þþfþ]þmþþ©þ¹þãþÿ9ÿKÿcÿ{ÿ`ÿWÿWÿVÿOÿ[ÿÿ´ÿ»ÿôÿ7l†Ÿè8ÉÚãó9Vcz•´âEESˆÕ%A^z¤ÒúÉÇ?{¾ðn°ÐÀȾÈê*GHDJVcmipo}¢ÄÛרäùþîêü 1+û¿G¦:ñ°Tî|½Xý¤Dâ”X1ü¶SÖÿ¶ÿ†ÿ8ÿóþ¤þ_þ,þðý˜ý3ýÏüƒüBüäûkû0ûÅú-ú¼ù¦ùùšù¹ùú]úÊútû4ü¨üøüaýÞý5þcþþ‹þxþRþ_þWþ;þíý½ý¥ý¯ý¿ýÖýÂý¸ýßý6þ€þºþóþ,ÿaÿ¢ÿÙÿõÿéÿâÿÝÿýÿØÿÊÿÞÿ ôÿ÷ÿÑÿ ÿŒÿtÿ6ÿýþ´þbþþÒý—ýJý ýÙüÁüÃüèüþü ýý6ý]ýý ýýpýPýFý,ý ýÄü…üaü:üü üóûìûìû üîûØû ü ü üü üü0üaüü üqüzü”üœü˜ü˜üÆüßüýOýuý‚ýZýbý´ý‡ý{ý[ý’ýÖýÒýðý;þ+þÅý¯ý¼ýëýÜý þþçýYþÐþýþòþœþaþzþ þóþîþÛþ ÿ ÿôþ‹þIþzþþ—þ”þÎþ(ÿwÿÐÿÚÿ¡ÿ¦ÿ ?Þÿ’ÿ˜ÿ»ÿÓÿßÿ¤ÿƒÿFÿþþ=ÿcÿËþ¼þ…ÿbäï\•·k–´‹{®I[´î¶€¥ÕùPwô‡'9P"ÌÄ÷’£l[rmôôÈO|œÍá@•ì̦B×™\S}ÁÛ†È Íª¶åX™ ‹„Š;Éym¸5ñ‹­¦è'PYQ1Ö£t9.o•XOAG;2f•ÃûýÜö¾/°{[$êÈø =s›¡®·Ô¾¹«kþ³ÁÒ¿£vt·Û¼£À=–ÿÿ¡ÿÿÿ ˆÿÿZÿÙÿåÿ~ÿðþ«þÁþBÿJÿ*ÿêþ{þuþßþ²þâý|ýïýþoýrýîýDþöýþ>þþ‰þ«þ6þþþ“ý-ýlý»ý)þÄýÂüØüÆý þ]ýÆüývýÅü2üJü üý/ýýµüÛüGý«ýCý9ü_üOýòýtþPþþþÈþeÿ½þ3ý ý°ýâýRý‡ü ýuþSÿÉý÷üiþäþÛþ•þ®þzÿÕä_ÉàŠlgimþ þ¨ÿ¡žÿÞþ¥þÿÕÿìÿo4>ÿ9e’79³³ü"3¬²mÿýþ˜ÿ F‡ÿ(ÿUÿäÿrWmùþðþHZ8rÿ»ÿ[Vÿ8¨ÿVÿ¼ÿÿÈþÃþšÿâÿ4ÿÿâÿTçÿíÿ¦;±{žÿ¥Ÿöî¨ÿËÿ÷þgþÿ͇DP¹CÞ1̺ϕ}v+ ÿIþ ÿ(#íþæþG·®æQâYÐ_Ý?ÕhÃÂN þJÿÉ€ñ–;Û•3QØ× û<&%ÿÝÿJ0ŠÙŸªn½¬ÃÇÿI¯Ÿiwà±`Ž{ËL0ÿÑÿ•'F¬ÿÂIª·ôð½¯ÞÍ­–¾ë‘3¡Þ&+ÿ¥²)ÿ†þ…ÿ )ÿìþXcýÅmf0Ø0žá¤¦ÝÿÛÿ.|ÿíþ¾þÂþÿÿgþžþËÿ8bÿ½þbÿòÿÔÿ x(*ÿ‚þ‰ÿ_&ló1€l¾ÿÿ†þFþþ þ1þ9þ:ýýàýåþóþþîýóÿ¤Æï\Èmìÿët ÿéüõûÎü¿ÿ¼CþüšüÀþ>Gdÿ”þ¶ÿwæ@#óÿih ?VþDÿ¸;¸¶þbþ-]SÿSÿ#þX£ëÿ7šÄÿãÿéÙÿ¥þTÿýI‡ÿþ,þ¤ÿ%Dÿ ÿAÿ}ÿZÿçÐÅÿ’ÿWâqÿ)MSÿmþ ÿÐÿÇÿÕÿèþþmþÒþšÿœÿ ÿTŠæ¹j+ãÈÌÿÙÿcyÿeÿ˜ÿôþ¥þ¯ÿöÿÿ(ÿ{|Â8ÿÑÿZô™YÿÉþáÿ™ã;‡jºÿ(#ËNÕþþ—ë$ÿÆþwÿ®ÿ‡ÿ©iYZ†OA Ú<ÆÿÌýƒþ´¡­9zÿsÿPÿ¾ÿkÿÙþÿ ¬ºcÿBÿV«¶ÿ¿ýrý!þšÿ¨uaÿkþÐÿ5ÿ¶þôÿ­|®â,~ 0ÿ7ÿ5¤HÿÇþãÿÂöÿ2 ¬Ä”ž]-É&mÑO)ÿ±Üœ‰ÿÍþ¥þÿ–\Çà‹]ÁŸIÑÿºÿ‹Ôÿ«ý|ÿËÈþþ9÷ªP“A(³å8ÝVÿôÿ¼|ÿùýGýšýMÿµÿÿFþ÷þ—3”ñþ$ÿν€2Ø)ÀÿrþÈþîÿñþ­þðþÿiÿ– ÷þ}þ ÿHCÿoÿ¡ÿ†Þææ?qöÿ—ÿp=Ùþºÿçðÿ¾þm€ÿGþ‹þ­ÿ]ÿîþ)ÿyÿ¢ÿ6K þ„ü}ý~ÿlÿFþûýÿþzÿŒþ^ÿøÿôþcþ[ÿïÿLÿ]ÿQë¬ÿ¿þiþÒýûý—þÿåÿBÖ€`S]”þ\.±ÿI ÔÖcÿßþËÿŽOHBê LŽ‹uÆs¾&í'Bx¸Æÿ1ÿ=ÿ”ÿ5zØ7Dp;͉7ÿþÿ¤»íý¦üþšÿMÿ;þïý¶þe7YMÿüÿŒîÿŒÿ¯¨ ˺¢ÿFÿëÿWÿ¥ýAý‰ÿ…Ðÿÿåÿo)ÎÿÐþDþ•ÿ¿çNÿøþõÿ8¿*ÿûý¬ýYþfÿ9ÿMÿ™ÿ½ÿçÿFÿÓþÕÿúÿ,ÛÿljëПvç½ryÿ£ÿ@þˆ_­¶P!6ŒüÿM0LT¶ÿ0x· ÿ oXîþµÿ¤råÊþ’þdÿOÿhÿ”ÜŠlhsG§]ÿ ÿãÿËÿ «0/ÿŸþ9ÿàÿêÿöþÂþyÿfž'uèþ6ÿìþVþÿŸv÷"Ì7¯ÿçÿpsçH“uÿ ÿÅÿ4ÿôþ$ÿäÿúžm0ÕþVþ]ÿ{V?‚ÿIþöþFk“ÿÝþ«ÿelN·ä¯ÿiÿC$©þ‡þ¿¡8‹ÿÿ ÿ<ÿ†ÿýYOŠÿ¨ÿ"ƒ}íÿGBÕ͈ÿÓÿüÿ¦ÿœÿïÿãþêý`ÿ7vi«ÿ(Áà;wÝÌÿ~f”ÿ†ÿÀ5AÿÕ+”ÿðþíþ<… Áÿÿ£uÿþáýÖþµÿ8¬*{7ý;uÿKö [ÿ;þKÿçàÿ ÿWÿLÿWÿwÿÇþŽþsÿÏé@úþQp¸ÿwþ4u!DÿËÿ®Çÿnþÿ 0eÿþ ÿ¶w½¨ÿðþÿöÿ¦‰XàÿÿÿÖ™%É žþ@þ´ÿ¼Ë$þ­ý?þ#ÿÕÿ±âÿïÿÅ*/ïxÌi‰ÿ…ÿ—5<ÿÿBÿaÿXÿçÿéÿÿÈÿ‹ÿ“åc­ÿ,fc¤ÿ\Köÿ±ÿÇ7b²òÿlÿÒÿ¬ÿ2ÿˆÿ@n«Iÿ.ÿ^ ÔÔ`@ÿXÿŠVƒLÿUÿjÿ|ÿKÿŽÿÕÿØÿýÿJÄ‹!Üÿ¬ÿ£ÿõÿ2|ßÿ&ÿÿ ¤…b€ÿÅÿU^j]TÔdÿoÿv V‹þ²ýÒþ5›øÿ¨ÿ;ÿ%›øÿZÿFÿw­¤;ƒSÿöý“þaIÁÿ`ÿtÿ±ÿ^R*0ÿ_þ§þÑþ¦ÿ ›n¾ÿ<üÿm†ð34ÿÚI6ÿþlþîþíþ‹ÿEÿ(ÿ`ÿèÿƒÏ¾þÇćÃÿû ÿÏÿf'ÿÚþÀþ5ÿÿ–þóþ™ÿò]kÿÝHzäÿKè´ˆ7BÌ[PB—ÿwþ?þLþoþÿa<áÿþÐþNyñ(á,ë/’ ‹ÿ—ÿ9ÿhÿÁþÿ %ÿòÿÕŽzÿºÿ Éçëç Б^çÿïÚJÿ¿1ÕÄÿ:ÿžÿ§ÿnÿ8ÿÿÿ¯MoUÿ6ÿ"õ‘«,oÆ!~ÿ¹þFþÏþÇÿ*ÿNÿ±ÿæÿôÿe¹ÿÿKœ†´¯äk ÿ¤ÿ­Ÿÿ4ÿ_Jâÿÿ/ÿ«è¦÷ÿaÿ¼$ŠÎÿŸœ@|'­ÿŸÿVêfÃÿiÿfÿg×Fúÿ3ÔÿL}W"tÙ ¦ÿ-ÛÿÑÿ ÿÎÿ’3¬ÿ­ÿ1²ÿûÿ–^¿Ø¤˜Î]Ëÿnìÿ¡ÿIqüþÍÿ£jÿ°ÿÆ&-©ÿ’s8ÿ°þ|ÿ†-ãÿYusÚÿkRäà¾ÿ“ÿJÉÿÊÿÇÿöÿ 8ÿ=ÿ-eÿ‡ÿׇÕÿ¬ÿmÿJÿñþnÿ¸ßzZhiÊ`ÿÿ&ÿ°ÿÐÿDÿ‚ÿ¬ÿ=Ébùÿäÿ 05þíâÿ‹ÿÄÿÃÿuÿÿ¯ÿ ÿŽÿ:ŽaËÿ_^bIäÿ…û-žÿ·ÿ…ãÿ‰ÿçÿ§BÿÚ°TÆÿõÿ3ºwô]ðÿ]´h3ÿFÿkĤìÿˆÿÿÌÿZgÈÿgÿRµpó&»ÿ€iVÿÁÿ¸ó.ÿ­ÿ)ÿþhþ2ÿ¢ÿlÿkÿOÿ/ÿ8ÿ’ÿTÿ'ÿ¶ÿýÿêÿøÿ·ÿC©^zÿEÿCNüÿáÿdfH}«M¢ÿ«ÿ5–K‡yÚÿüÿìÿÎÿwÿ•ÿ¢ÿ¡ÿ)ŠÏõÿÃþ¼þ´ÿ ÇœÃÿÔÿ¸è´J"øÿ¾ÿÎÿÓÿ›ÿ>*´ÿßÿ¾ÿlÿÿB¨x£ÿ™ÿl ¨Úÿ÷ÿ6øÿãÿöÿ A÷ÿfö5AyÖÿîÿ,ñÿQÿ$ÿbÿàÿ@Æÿ*ÿxÿAE^ÿ£ÿú~+ÿÿàÿÎÿƒÿwÿ´ÿxÿÿùÿd¶ÿ§þ©ÿòlK jÿìþsÿ¬ÿ¥ÿ2ÿ”ÿLþ2&¢j>SÈ£ÞÿÑþÇÿîmÿ¼þÀþAÿóÿ—1h^ÿ„ÿ8]o9ºÿmÿ)ÿéÿmªÿñþBÿæÿïÿÖÿÚÿøÿ)èÿÐEn¯þ·þìÿ•ʦÍßÿ–ÿ·ÿ#Çÿäþaÿ-SÜÿcÿ~ÿ Ä rîÿKÁûâ<eï*‘ÿ1ÿAÿLÿ ÿbÿ¤ÿÏÿ„\â5~aÿ~ÿ}7ÿÿÑÿ¸ÿËÿ˜ÿýÿáÿÿÿÌþaÿäÿfÿ¶ÿ;MWÿóþ‘0Ç+•‚­çF¾ÿ$ÿ!ÿ–ÿ»ÕÿŠÿBÿøþ„þhÿà-<ÿÐþÿâÿ°$5NÿÞÿ¤lŸÿqÿèCÞÿHÿMÿ;ÿ#ÿÄÿçÿLÿ ÿ6ÿºÿùÀlÿ”ÿîÚTúUÒÿÎÿõÿÌÿ…ÿ ÿÉþ#ÿÚÿˆ@ÿÿDêwÿ¦ÿkg*Dÿÿÿ}ÿ™ÿ¥ÿýÿMçÿGÿÂßîcþÊÿšâIÿ—ÿžÿ)ÿüÿtùÿWÿ˜þþ¼ÿB•àþ›ÿ×.(…Iˆñþ¬þëÿYîÿÔÿhÿ¢þhÿ¼N:ÿ2ÿuÿ^ÿÙñ ÿ<ÿ/Ç[<ÿsÿ6ÿÒÿaqÿ ÿäþþÓþÀ»ÿ´þ„ÿà\&€þ0ÿô™½ùÿ£Êþtÿàÿþÿ«þPý¾þÒÿ‘ÿÄþ“ÿWØÿ¡þÔÿãÛ¤ÿ%ÿþÿpœ.õþüþöþµÿµÿtÿêþzþ°ÿÁwcÿÊþyÿŸ3‹þ”ÿ˜Ê:Àÿ=Äÿ„ÿˆÿ$(Œÿ¯ÿíÿØÿŒÿëÿY5·ÿóþ“ÿhq!ÿïþøÿ¡%}ÿ©ÿkÿQÿœÿïÿ£ÿÖÿ}ÿ œ8äÿ¡ÿ•àÿýþÉÿTÇÿÿÌÿ~Ny X›,Îÿÿ²ÿ?ÿÿŽÿ¿ÿt§~ÿUÿ-¢Ùÿ\þ^þöÿVóÿõþ5ÿ?ÿ•ÿŽÿçþ¶þ¶þ^ÿâ·q ÿäÿ¿ÿ¤ÿ·ÿùÿ<al KÿrÿÍÿÌÿ4ÿ$ÿ\ ‚ð—ÿ:þÙþxÿVÿ­þ”þNÿ‰ÿLÿ>ÿÜþÿvÿgõÿõÿzÿÔ¹ðÿšÿƒÿ“ÿzƒJvva-#Lÿlþkþ3ÿJÿ ÿüÿ¨~ræÿEÿüÿÜÍ~%k>uÿMÿ’ÿ¾ÿÛÿfÿ¡ÿÿËÿ|`›ÿâÿéÿÿz,ÿõþïÿrÿÿb’íÿ$vFÂÿK|¨ÿcÿÀÿ%ëÿ4ÿŸþ“þWÿB©ƒÿL#ºÿ°ÿõÖæþÒþ>ÍÿÍþIÿÿ«ÿqÿßÿ/cÿSÑQjÁžÿÿ‚ÿ›ÿ÷þþ<þ}ÿYÿJÿYÿ™ÿ±ÿ9ÿFÿ-ÿ8ÿuÏ×ò—I"lÄ'tÿbÿ¾¸ÿ¬þ!ÿâÿ«ÿ˜þˆþÕÿ9åÿÓÿ‰ÿX!Íÿðÿ4@hêÿ êÿžÿ}ÿ#ÿvÿ"8&·ÿ’ÿzÿÿDÚÿ¢ÿ¡ÿÝÿŒek-žÿCÔÒAÁÿMÿÜþØÿLѪþýúþÞÿÄÿ”ÿ ?ìÿ­ÿrÿ(kC•ÿ‹þWÿ׈)ÿ!ÿ<ÿ'ÿªÿ?–Íÿgÿƨcðþõþye«ÿqÿ©þÿ Îÿ–þþvÿW0ØÿSÿ…ÿ#| h‰ÿ ÿÿ@Ñÿ ˆa(\ÿòþZÿíþÿ³ÿ+~zLÕ(GÿÿLÿŸÿ2ÿŒÿlsýÿ¾ÿZkÿÿÿ·ÿ·ÿ¨þ6ÿÜÝãÿÊþâþ±ÿKÿwÿlÿWÿ™ÿ‚ÿ©ÿ9©ÿýþÿ ëÿöÿ«gÍÿOÿqëyÿ'ÿßÿ(¢ÿÙþÿ@ RÿÂþeÿµÿsÿ^ÿÓÿ“éÿ×ÿ¶R'ariÿ‘þëþ¶ÿÔÿÒÿÿ¯þÖþšÿ¹€>ÿ–þŸÿ¤÷ÿšÿõ·SÿlþØþÃÿêÿÎÿÅþþ…þ+ÿòÿ{¹ÿ¿þVÿSÞÿÅÿóÿ¸ÿƒÿcÍËÿÿþ ݳÿüþoÿÖÿAÿ þïý¶ÿŒlÿSþÿ4Õÿ˜ÿX;ɳÿ‹ÿ•- ÿvÿØÿÙþSýäýl65ÿÓýôþîŠÿÓþBÿ¡ÿVÿdÿ;ÝÿÛþ¹ý,þÆÿ¹ÿœþ<þÎþ´ÿ¡ÿ%ÑGÈÿùÿŒþ+þúÿmä1ÿ!ÿ§ÿ;,3ÿ?ÿÑþLþDþ…þëÿA;ÿáþÿ#'Fš[‚ÿ(ÿ&_þÒý5ÿÞ] ÿÿÙÿ“ÜÿD´½ÿÿÐ6ÿ þ«þùÿžÿÿÿ.ÿRÿ¡ÿeMËÖÿVÿûÿáÒÿäþdÿéÿ¥ÿÌþÆþªÿFÀÿyÿÿMÿÌÿ ÿPÿEÿÁÿúÿ”ÿaÿ5ÿ[ÿÃþ3þ8ÿÅ; (ÿÍÿ8Íþ*þÝÿ¸Oçÿ\åàÆÿÿ¸þ˜þÌþˆÿ:ÿ¡þÛÿ‡ý”ÿöþ•ÿÊ_qlq0Ošìÿ)ÿ„ÿÐÿ¼ÿ‡ÿ¸ÿeÿ ÿÜþcÿ€ÿ-ÿ¼ÿ–ÿ¦þ<ÿ©s<ÓSàÿ”ËBtÿóþèþ´þ€þ_þ³ÿÀ)…ÿ3Zÿûþ|ÿbæáÿ´þÿ%šÿIJE@,(ˆ`yÖþþ!ÿ¥7ÿ3þ_þ—ÿmÿ-ÿQÿyÆ%åUwÿÆÿ0ÖÿÇÿÞþ%ÿ¸ÿwhîÿvÞÿj$ãþbþSÿÿÿÝÿOüÿèþFÿÉy* ÿnÿp¸ #ÿ;- ÿÜýSþjéOÍÿƒÿåÿ…a¯ÿ7ÿ:þ"ÿØ#jœÿàÿe<™ÿÿhÿíÿ0Ñ(à©Tÿ¼þ¾ÿåÿ½ÿk¡¼ÿØþ$ÿöÿÿ…þ¡þäÿ‘Ääÿ%ÿ¡ÿiTBÿzþ/þÆþ?ÿÿ©ÿçÿúÿüÿóÿàÿ(Eý~;ÿÛþiÿ˜ÿvÿÀÿ@Wàÿáÿçÿ£ÿýÿiu+­ÿAïT©ÿ=ÿ°ÿzÿâþ˜þ¶ÿ4ûÿü:ÿøÿâÎWbÿFÿ‹ÿaÿbÿAÿ£ÿmôÿþþBþ»ÿÒäÿÍþ¿ÿ2¦ÿrÿ:xúÿvÔ¢Oÿ*ÿxÿ8§yÿ{þ½þªÿ5Åÿªÿ&ÿcÿaÿ¸ÿ¥Ôrøÿ#æÿý~óÈg­ÿÓÿ‘ÿØþáýýmýWþÓÿPùÿáJtàH:_Ó;€ù¦ÿ0ÿ²þþþjý/þkþIÿO$}½~§Ò9vûÿRìb<ÿVÿØÿÿOÿÿ&ÿ‘ÿ~ï~ÙÿIÿ£ÑÁÿVÿ¼ÿŒüÿ 9øÿJ‚­bÊš€ÿÜþ£ÿÌkÿ„ÿfÿÿ ÿ²þèþ 6\ÿªÏ\ºÿpÿŸfIÿþÆþ ÿ`^ÿgþîý7ÿ|ÉÿzyN®U^¢M²ÿãþWÿÿNÿHÿÔþ9þ‡þ«ÿs{Îÿ¡ÿVè†÷zÊ)»Úÿ½ÿÿyÿÏ¥kÿ®þÀþ%ÿ]ÿùÿÿÿÿõ:÷bÏÓºÆfüVÝÿ,ÊD­ÿŒþMþKÿ-sûÿ°ÿFÛ‰ L)]Žn)´M lx°ÿNÿ´ÿbÿÑþNþŸþ©ÿËÿÔþ[þÃÿÓxeÿ—ÿA q8•_7D+ÚG-€Üÿ ÿáÿt¬?…þÃþGûÿGþmýþìþxy‰`¨K +œÿ´y½çÿmÿZÿ­ÿvÿæþUÿ*PsÿÅÿyw–l£rd×ÿsÿ`þ´þ+^úÿÿó·H0¥ÿVÿQÿ+ßÿ/a$«ÿÃÿgºÿúÿV’D¾ðÿöÿ\ÿªþ#ÿÉÿÿÛÿ*EB¢ÿÿ“ÿJBÇÿÙuØ,N° ¤ÿ­ÿPÿÿþü*û‰üþþqý\þ]ÿ0Évgfüÿæ”#×<êÿÿðÿ`ÿAÿ ÿ”ÿêþþÓÿ—Ûƒîÿÿü§úû”ýaÿ'LÿVõ¡ÜýŸý*þ<ýQú…ûs÷‚ÔÿŽÿ·ÿ³ÿèþßý†þvÿ—NœÐþ“þ×ÿ*ÿËþÿøJ°ºQG£ £šÿ¨þgþÔþ8ÿ ÿ¿ÿÿQþþÛþ9ÿ+\õ“v‹“9ÿÎÿ]=Tÿÿ<ÿÿÿDê“Nÿ´þøý{ýÎýþ¨þþxÿØY]¿þfþQþøý“þqÿ“ÿ ÿlÿ°Y@ÿëþŒÿÝÿ¶þEþôþUãäÿ þsþÖÿÝ‹uÿðÿd°UsÎdMÿ²þ?ÿ5ÿœþcþ¤þTÿ ÿ·ÿÙþýXüZýÀþPÿ‹þ‚þjÿóù¥í¡©ÿîÿFJ_¦ÿ{ÿ‡ÿ ÿÿÛÿ¼¬J[™ÿÿþ§ÿúoTg3¯Á€Ä‹8±-E êmÿIþæþ–ÿvÿ·ÿ‰ÿ.·lw%ÕµÕák0ë°,ˆÿÒÿÕÿaÿñþ¬ý þÿшZ…`ô!{ÀÑÿÿþ¾þyþÂþØþŒýûüæýÿSÿñþiþ!þ"ÿŠŸ|_%ñ“Gg_ÿÛþÉþüþþXý ý‡þCÿKþ’óÿ!îƒ2⣹iBùÿ|&oÿŽÿw·ÿ%ÿ‰ÿ1³xÈÿ9k4 ­ Ô'Žÿÿ8ÎÒ‚1ÿÿëÿ‚ÿ†ÿ}ÿqÿ¼ÿnL ò!e/V]ޱ´ÿxÿºÿ˜ÿbÿUÿMÿöÿ1ØÿYÿÁÿ~ ‚MãÓpý~ÿBÿjW<.ÿWƶ»þ,×8lRëÿãÿRÿ°þHÿåëÛÀîØ&ZlÿØÿeŠºÄÿÚþMþYþ=þþ¾ý^ý`ýBþpÿ`£ ÜÿªŠ‰/vÜ8§þÿïÿ†lgÿ¿þÿOÿ¥þ=þ‰þ|ÿ ³1–~ku³yÏh½¨U;ð@ÐÔÿ ÿùþòÿ‘CÿŽÿiK™ÿÌÿñÿ„'®}üûŽ£#ô.Xÿœÿ.g&Þÿ|ÿÿiþ þÍþ6‹<ÇÁ,`ø7c%«àÿúþâþGÿ–ÿÿÿ’ÿ×ÿ£„¾ÿõVÝ Èÿl‹ÀÿÀþïþ$\íÿpÿ]ÿnÿÔÿCÊÿÀþÜþÜÿ’#¯ÿ}ÿÒÿœÛ>?ÿ ÿhÿêÿkåÂsMYÊ\þtÿeþƒþIÿÆÿŸÿ_ÿ[ÿ‘ÿÐÿ.?w’¢s؃mÄ©òÿ€ÿÆÿ°ÿHÿ[ÿ©ÿÿ~ÿåÿC+–?C¸T°žèûÍßËoF_™¾ç-X<æ¤`Úÿ¨ÿ}öö¨dˆ–/Áÿsÿ%ÿ0ÿÂÿ_²»òÄ<éÿAÒÿëÿT¯ Ž—]#Öÿqÿ!ÿæþÿ?ÿkÿÆÿ5¤hxX[TЏ~++;,îÿáÿÊÿŠÿ’ÿ¼ÿ úÿsý>Õl 8bŒ±ÑÜÑÁlY‡M)D{¦®Ÿ~*²ÿtÿˆÿÀÿ6kÁýÖKdÁÓ‘CD—žYÓÿ°ÿ‹ÿ²ÿÁÿ¡ÿ¡ÿÝÿ$"ôÿäÿøÿP…<æÿïÿ/CÛÿñÿîÿïÿÑÿ£ÿ ÿâÿ Þÿêÿ1}z ¢ÿ\ÿaÿTÿÿÿdÿüÿu’a_Š›}yÍZcÕ½©‡p,üÿÞÿÚÿòÿ"%Ýÿ­ÿÔÿ3.<Ò $Ub;ÖuC%M«âÌ…hiœ¢”ˆž¯<q~z`EgŠ«¶Ìï ß°¿ÇÇ®²ÚëâÜÍ™KÚ¶—mŽ›‘ˆÒ<<ôÅî85Lx¬‘L÷븴Æè#10?;$ôÆÊ*.ÿ'$ÿ+RK@OymCòΠxBýÿõÿôÿôÿôÿšÿ+ÿÿõþñþËþ¯þ´þ¯þÀþÇþÎþÒþÌþèþÿÿÿòþóþÿ ÿüþÊþþRþ+þþôýÆý“ýƒý‡ýƒýRý9ý>ýPýNýHý=ýAýQý]ýNý>ý@ý0ýýðüÝüðüñüíüÊüŽüLü+ü"üöû²ûwûjûVûAû/û.û<û>û@û<û=û8û&û1ûIûû«ûÅûôû+üKü<ü,ü ü@üZü}üüªü½ü¶üªü§üºüÖüýNýý¯ýåý?þ»þÿFÿsÿÅÿ eðgñd² sä7uê^¬Ý'm¾ aÍi³ r ³  ‚  • è A  U s Ì WÁêhÐ3SŽÝ @¥ý.Ps¹éÒZèyô2/ ü ¥ e uªÊÑÞùå§2Ÿþýœû|ú\ùMøV÷…öäõ:õaô‰ó¼òòoñÚððCððæï´ï£ïQïãîTîÐíyíUíƒíî¶îzï:ðýðÃñZòÙò\óïó¦ôxõzö¢÷çø*únû–ü®ý‹þUÿÀ‡B§-½NWFB=PlX\Cô|Í.=h¤ÿþþWþºý<ýºü@ü§ûâúúù:øn÷zöUõ*ô óóñæðÜïàîîíõì•ì`ì6ì#ì+ì1ìhì¾ìíiíÌíNî÷î‡ï ð’ð8ñöñ°òmóôÅôWõÒõPö¹ö÷z÷ô÷yø=ùúûéûåüëýõþÿ徤m7â’5 Ô P Ð I ¶  b É  6 ^ … Ï þ 8qçfòŽ5½B䇼€RÀv-¼8æs¥˜¾üÔÐÃç³Fúÿé‚)ä j ž JÈk>þÎûÃù&ø÷×õTô³òCñðçî\íçëÛê,ê®éñè6èdç…æ”åmäWãwâúá÷á4â«â~ãäÝ叿fçèÅèµé°êëëzíXïrñÍóö.øùùÚûÄý‹ÿ"œYI’ á  5 ›Sÿ¼>ËR´²ZÆ>’Í‹§] x A ü—¤Béÿ¦ýü^ú–øÅö õmóïñ¹ðï¤î®íºìÎëÍêËé¿èÙç1çºæ†æšæäæTç»çè[è°èéké¹é(êßê®ëªìvíVî:ïð¸ð5ñµñZòóìó×ôàõ9÷„ø‘ùuúGûüïü’ý7þ ÿ ¸QµßÝÏÀÑßî)UY= ЪÅ\Ô/\L.ýÏi‡¾Ñ×Öò ,y »“| Ú  ìò.Z¢@:9"àÁZ ~!û!d"×"À">"f!² 4 Hü–_òöÞÎÁ€¯  ©tB÷Ýþíü ûfùÄ÷'öhô±ò^ñð¹îMíñëßêŠéâçæ/ä€â°àßÛÝ"ÝåÜáÜèÜKÝÊ݃Þ&ß©ßcàRá¥âKäAæ®èRë.îäðœó>ö›øÜú7ýÿÓý)fb " g ~s3؉]W[O)²ñ…ðG¹RÌ6®PØ  ' ü÷óçþÈü«ú}øQöôÿñùï1îìë êéfèÙçfçææEæå,åæäÇäÇäùä›åpæ`ç4èé¬é8êªêë®ëVì4í9îZï¤ðëñ(óQônõzö‘÷Âøú=ûkü–ýÌþêÿÇfîŽ:×p‹ d}|=ÕTÅ=€ÿuèrùÿ…ÿÿ¢þUþþëý³ý¡ý³ýÕýþ:þþÆþÿOÿŸÿôÿ9{±ê(T{²þE¦K.XÉe @ ) Ô–`W@UÏ!&#%Ò&œ(Ö)Z*‹*^**v)L($'Ò%…$Í"Ê ®o_ÑR‘ 3 J“òÆÿ=ý¨úSø#öaôQò=ðˆîÛìTëeé¦ç'æ†äËâ­àšÞÁÜÕÚ<ÙÒ×åÖpÖ.ÖÖ×ä×ÿØ9ÚÛÝ™Þià{âää çŒêÄíùðô ÷èùªüNÿÁ>“ù"  ú“ü了h\Z[[÷czy’Çû2NBD)òHU3 ì ’ûRÀ&þŸûùødöøó«ñeï(í&ë\éÂçmæPåˆäòã…ã;ã ããüâöâ ã ã1ã…ãüã”äTåEæTçNè3éöéÑê´ë¦ì£íÍî8ðÄñtó+õäö¥øUúÝû[ýîþu’ÒÊšFÁïîò3u¤ÇåÓ•^ŠÁç,vÂj¨ÀÿÍþøý4ý‹üÓû"û³údú ú•ùùÑø§øŠø}ø{øÉøMùØùqú*ûüû¸ü?ý›ý þ¿þYÿºÿC+a±Ø!ÀŸ n  ~ ‡­æO«°!¢#Ð%(*Ÿ+û,€.³/È//ö-7-G,¥*¹()' &‘$"BYÀxz & h®­ÿ·ünúð÷ðôÆñÊî{ì‘êÄèç¢åpä(ã:áàÞdÜÚÏ×kÕ™ÓŠÒqÒ­ÒùÒmÓÔíÔˆÕ$ÖûÖ[ØHÚËܨßã˜æ2ê•íïðô ÷ÝùÄüìÿS¤º · y½eŸ³ÇÔä[¼“¿´\Ä^àtÉÍŠ~,¤0 à 9¨û3Hý(úõöÌóÌðóífë:éWç°å<äòâÏá­à¹ß÷ÞÞ\ÞPÞˆÞßÇßbàèà`áùá±âjã8äCå’æøçXé¿êìríÉî/ð¨ñUóõ÷ùûèüˆþ"œî #Œ\ f ^ J  n † p N  Ÿ + ” Ç ä îÅ‚AäÅ–Žÿ³þËýµüÄûáúøùùø/÷iöÍõCõöôãôæôûôAõ©õÞõ#ö”ö1÷ô÷¨ø[ù@úTûpükýdþ`ÿ^ #Ãl­ @:@ê´,kÄ•"­%”(è*ü,M/E1Ø2Ø304ÿ3I3h21«/.æ+*^(j&!$`!Wè+ôw’ ¼šÿnüÒùN÷½ôçñ¿îßë-éÉæƒä@â^àßÏÝ0ÜÚà×Õ}Ó0ÑÿΠÍ-ÍtÍ<Î_ÏõгÒ`ÔÈÕôÖ:ØÚhÜBßœâ’æõê’ïñóã÷|ûÓþõ û *Z2Áäeüö!_"}#P$É$£$$ê"w! ”S!áœ/i#[_2 ô›3ýýèúÜ÷¹ôxñ<îëóçå˜â–àâޙݨÜåÛOÛÉÚLÚÚÕÙàÙIÚùÚ÷ÛÝ!ÞJßàÚáãHäƒåîæ©èaêìÕí£ï—ñóŒõ¤÷Éùûû>þPL6È9 t ¬ ÷ ÂPàDDâx m‰€ e I ö yõrŸ@Ýÿ–þYý:üýúœù;øùöÒõ¦ôuóNògñ±ððqïïïSïªïÝïCðãð¼ñ¶òïó;õöø•ùû~üÚý8ÿ¿p^T› ë @†¿f= ¢7!ø#î&Ö)a,/n1€3A5V6P7ç7°7|6ß4~3 200ü-è+}*®(&#£B½a ›r8ÿ\û<ø´õ9ó>ð í¦é&æñâ,àÞ*ÜyÚvÙ‹Ø_×|Õ*ÓïКÎÌÊ/É…É­Ê7ÌÎxзÒVÔgÕ|Öß×¹Ù\ÜÚß'ä)é_î‘óoøÃüc ¦Ê , —#£ 1 ™!d"ã"#^#ì#È$&('(w(Q(„'Ð%¢#M!Nº_àÀîo © ájþáú¢÷¢ô{ñîµêZçä·àžÝÛZÙØ?×£ÖOÖÖÞÕ™ÕmÕqÕÒÕ§ÖØàÙìÛìÝâßÑá–ã3åºæCèõéÞëþíTð¾òõp÷°ùàûþ7nww´ Á wÁDz‡eÄ;^)¸ðÛxä3 o ¯ â N²,ÿÎý üUúÎøL÷ªõ'ô©òiñOð)ï îãìÙëëcêþéÃéÞéHêéêë<ì-í4îï'ñþòõA÷~ù³ûÒýÍÿ¤‡‘¯× " ³`ä=ž@à O#&7)},V/à1<4}6_8œ9":š:ê:y:e9 8©653P0s-+€(%Q!†~¿ò §ÿ@úõÏñï«ìùéÎæ§ãÀàñÝìÚØÍÕ.Ô#Ó<ÒLÑÐäΙÍÂËàÉVȰÇíÇãÈtʬÌyÏRÒ›Ô€Ö ØÚgÜLßøâšç/í óÓø@þ*hþ $c°äUµ!Ï$'p(+)u)f))ï(")¸)N*‚*i*½)€(&É#þ 7û5|¬ÁDñ òžf)üø+ôªð•í€êTçèã‡àMÝÚבÔÛÒÙÑPÑ)Ñ=Ñ’ÑßÑÒsÒÓÔ’Õ–×!ÚõÜÁßiâÔä çùèµêrì`î˜ðóµõƒøZû þ•â(L P ( ñ¢Ä(£Ó½§q€ŽO°¢T ˜ Q ÞÀîþ;ýgûaùa÷tõ¤óÏñãïFîíìëê1éiè~ç½ææÀå¤åâåjæEçPèeé½êDì÷íÒïòºô{÷ú¶ü(ÿ¢ðIª ÄÜíšßM& )#·%à'd*d-µ0Î3.6v8˜:‡<Á=>>>ø=”=Š<¤:Ó8Ú6Á42–.U+($%N!¤0'÷ >GÒü§÷,óüîKëFèåþáëÞÌÛçØÿÕ¹Ó¦ÑúÏíÎõÍr̠ͮˇÊ,ÉÈÛÆyÆïÆÔdzÉ.ÌHÏdÒÕ‘×äÙ–Ü`ßWâæ®êðöàûp£X |rÇ• ¸#Ò&’)á+h-.>..Ñ---ù,Ý,¶,L,E+¯)f'Œ$…!u¶‹-ÐXk ôºOüå÷Òóéï9ìÄèYå!âÝÞ›ÛVØHÕ~ÒCжÎÁÍRÍMÍ·Í`Î'ÏëϨЮÑÓüÔN×ÚIÝ–à×ãÇæ^éèë,î]ð„òõô·÷šúœý‡\ói¬ ¿ ³O>&ê^eyv&¯6ªbs?¤“'š Û vÞp3þüúÑ÷~õ=óEñgï|í™ëêøèèëæìå*å£äîã(ã ââ ãˆã9äI坿)èéîêÈì$ï¥ñHôC÷£úþ(ó¢[ þ GƒôýþÈ!Ž$'s)á+H.Ê0ƒ346¿85;7=´>Â?@ü?B?>ª<;‰9™7c5ø2-0%-“) %T!Ä: ¬š+üÎö‹ñ’ìýç™äLá&ÞÛØìÕeÓçÐt΋̘ËsÊÏÉiÉÉÉwÈçÇ[Ç4ÇØÇ¢ÈiʪÌWϪÒîÕ5ÙÜ£ÞcájäèGì1ñÙöìü.õ0·šTd t#˜&¸)»,D/$1X2Õ2¨2ã1Þ0ñ/M/Ð.&.I-ô+M*û'ï$i!°;!yï‡ Ò ˜Ô…þóù4õ¯ðqìŸèMåâß ÜÙÖÓPÐóÍÌüÊdÊÊ-ËÌÍ:ÎsÏ¿ÐHÒ2Ô²Ö¼ÙFÝáÇäsè¹ë·îNñÆó,ö˜øGûþ'NgY ô XO!ÓoñU½*ÛùÌpÇãÚнN“rì) *  FþÁûJùìö³ô„òQð îÃëËéècæ×ä—ãÃâ.â­á6áÙà—ààƒà³àCáâãlä æÄç§é¿ëîžðwóÅö\ú þ~Ø # —…@!ã#Æ&T) +.˜0'3x5‹7‹9ì;T>@@¼@å@§@@z>T<”:ö8ü6u4»1Ï.m+Î'.#7ˆY¹5äÌû öñ–ë|æNâüÞBÜÙÌÕŒÒ ÐLÎ÷Ë/ÊÖÈEÈÈÑÇøÇÞÇÐÇ}ÇðÆǦǵÈ:ÊpÌ;ÏÒW՛خÛÞáôãÄçTìMñ‘ötüÐ Å’›6°'"“%Ê(ð+î.©1Ç35®5”5Û4¯3f2a1h0x/+.…,„*.(R%¿!ÁÚQIØ K*”}ýùø/ôwïë>çÓãÉàÂݾÚÔ×ßÔéÑÏhÌJʺÈõÇðÇ–ÈžÉÂÊÌ„Í^ÏHÑGÓ¼ÕÐØvÜ…à®äÐè­ì(ð=óö‘ø û—ýJTn± Ä ‹ÐÀ} o™ŸéDvD¡šL8ò«:â]ÈÑ_} D ìz7'ýDú}÷õÕòŸð]îÖëXé+çGå{ãåáÔààß%ßóÞÜÞÆÞ ÞŠÞëÞÃß©àºáãÍäÉæ¾è´ê¼ì"ïòõ`øü ª =9ÌJ #9!0$1' *¾,/P1B305P7O9Œ;É=’?ß@}AåAvAn@ß>«<á:ñ87 5»2’0{-(*?&‹!ðㆯ Ã3ûvõ±ïê/å}à¤ÜÙðÕÓPÐrÎ…ÌpÊ·ÈcÇÑÆIÆÆÆJÆÿÆ?ǘÇ7ÈJÉÊ#ÌMÎìÐñÓC׋ÚÈÝüà'äwçë<ïºóàø{þ} …„ !J$`'\*M-0Š2›46Ê6á676-5í32!1Ž/ù-,ä)>' $d p¬'Þ Ö êó«%þúÑõ;ñ¥ìjè…ä3áÞ@ÛxØ·ÕHÓ°ÐοËÓÉ•ÈçÇôÇjÈdÉ¿ÊLÌÎÐ4ÒvÔ#×qÚ#ÞBâ}æ¶êÈî|òÏõ»øû<þØ£•Ë û ê›èö¢ìãÏÌÀƒâ Á ¼nš_•R±“ 2Ø‚Dþ+ûGø²õEóÓðVîÂë 顿Xädâ½àƒß†ÞÝÝ€ÝOÝ/ÝÝòÜ݉Ý=ÞûÞ6àèá­ãTåç8épëíÒï¬ò9öú¾ý›ÆÕ H 6 ÅMƒïÖ##6&)ª+S.¾0´2“4U6ø7m9 ;#=@?Š@Ö@Ê@€@Õ?X>Gä†àGÝqÚœ×0ÕõÒÌЂÎÌÊ9È8ÇÑÆ'Ç,ÈŒÉYËSÍ ÏÒ‡Ô>×8Ú¼ÝÁá æ¦êðî óÃö$úLýÌZ5? SBé_^cr*ÊO¦* I zvEÕJ¥Øîx” r|÷ý±úÑ÷Ñôéñjï#íîêoèôåŸã®áàÞZÝ”Ü%ÜíÛðÛ7܃Ü×ÜWÝÞ+ß à#âÐã©å¸çºéëëKîÒð£óÙöaú0þ@6 ¢ åfÊ\!Ô#¾&}),,º.13é4Â6†8z:"<¶=b?AMB¦BB6A@J>¾;è8I6â3Û1%/l,Š)M&H"’”Ž ©§xûÀõ^ðóê³åà¨Û²×ˆÔ­ÑÀÎxÌËÊÉÁÇÀÆÆÆÅ¥ÅsÅÆÇÈ(É~ÊzÌKÎFÐfÒÅÔÒ×÷ÚpÞ â¯åpéýìñjõúùÏþÕ„ dFÓê"z&Ç)›,ý.1Ï2£4#6g788z7`6Ì4Ý2Å0Œ.,‹)»&Æ#‰ þÛÝ4 à m&Èÿiüùøõñ¿ìièä)àÎÜÈÙ×rÔÒÐéÍ Ì ÊšÈ‹Ç(Ç[Ç ÈlÉËÍKÏÀÑÔt׬Ú%Þâuæþê€ï—óN÷žú¬ý™hÁ½ ÞéÐDpjo(»>ª p ‘ T ®ÍBÔBl{\õ@d +¸¯ýƒú÷¤ô¸ñ)ïÆìNêÀçOå'ã7á]ßÔÝÎÜ2Ü›Û!Û-Û¨Û7ÜšÜ!ÝÞCß’àÍáfãyå†çdéNë¿í¬ðªó±öúèý3 Î j§…† ²!q$9'*¹,`/š1ƒ3q5w79(;P<È=Œ?A‹AEAØ@w@—?|=½:]8_6w42 /, )&."Œœsg Õü‹öñ‰ëæ±à¸Ûü×ÄÔÞÑüÎ}ÌîÊ’É,ȫƄÅ9Å/ŀŴÅaÆ•ÇèÈOÊ]˼ÌRÎ+ЉÒ&Õ Ø9ÛßÞàâæýé9íàðõfù,þ5âÄL’7"Ð%æ(À+.j0˜2¦46«7d8d8Õ7½6á4¸2v0I.,¡)'$· .;ÕÏ 3 纗ÿIüóø#õ)ñ¿ìQèä3à×ܶÙ$××ÔÆÒØÐ´Î³ÌÁÊ6ÉôÇ7Ç.ÇÃÇ@ÉË>Í…Ï÷ѳԂחÚóݽáæyêïhóZ÷òúþ»XîÌ äßÉu˽+(Ü[¼ [ ¤ Á ‚ ãýåwÜ?J#Ð4f 5ÑYþÈú®÷¤ô¾ñï±ì=êÔç~åDãJáŠßÞêÜÜYÛîÚüÚGÛ¬Û(ܸܕÝÊÞàláãâäõæ2éyë¾í}ðóÛö.úÒýË' Ô [ŒR­¦!x$n':*Î,L/Û1¹3C57ÿ8¯:2<À=B?¬@A¤AA @Ã>= ;B97×4Ù2Ë0C.+)'œ"x¨/ Šÿ,ùÝò¶ìrçËá1ׂܼԄÒÐÎ:̮ʺÉÿÇtÆMÅëÄ>ŵÅÇpÈÞÉjËt̲ͲÎ1ÐàÑ&Ô8×hÚ(ÞUâ?æïé)í„ð ôÿ÷üzí âêH"%j(%+—-ñ/å1 46Î7ç8ò8w837i5$3’0J.,×)‚'Ê$®!?S5Þ° è ‹º® ýYúÂö óÒîcêÛå­á;ÞñÚoØ÷ÕíÓÞÑÃϾ͆ËÅÉFÈ^ÇBǦÇóÈ™ÊâÌ1Ï’Ñ*ÔíÖ$ÚPÝûàòä\éîŒòªöúUýQ³,õ ä õ‰ãÑb—WñZÌ, v ¨ ‹ - nbù‚ðDa:ÕN— v ‡%ÿòûÙø½õ–òÈï9íÛê‡èdæ,äâàvÞ=ÝZÜÎÛoÛsÛ–ÛÚÛ;ÜþÜÞ&ßEàiáÐâyä=æJè¥ê>íüïãòøõWùý1ŒÅ ‹ ø0X4Ÿèv!>$'÷)Ó,Š/2ñ3Ï5¾7¶9;T<ß=d?È@A¿A A? >2<[:Œ8t6J4:2°0y.O+¹'9#}ƒkk1 íãþÂø]ó™í«çá…Û*×éÓºÑIÏnÍÌ˯ÉñÇžÆ;ÅHÄ;ÄÞÄvÆcÈxÊÖËëÌ[Î†ÏÆÐ Ò·Ó<Ö~ÙÐÝ5âXæ!êtíÙðQôø/ü¶ ý Wút"Ë%‘(+d-y/M1C3^5?7Ú8‰9M9ã75ý2g0.š+ )´&D$°!œñ¹Ì Ù vosŒýgú:÷§ó–ï'ëkæâ/ÞÛ€ØÖÔçÑÝÏÝÍ»ËçÉÈ󯉯ýÆZÈ6ÊoÌ¡ÎѾӗ֜ٱÜ1àä™èVíÚñàõOùrü]ÿ'Ì_4 # -2ÿc?ª¹“üc» . —£_ý”îä‰#»"  Î]Èü”ù{öó·ð#îŒëéÑæ©äŸâ°àòތݚÜéÛ†Û˜ÛäÛqÜ7ÝÞòÞ¿ß»àøáãSå-çPéŽë%îéðòóQ÷½úOþXzo è 04S-µ:+"x%¾(Ÿ++.¿0€3ý5ã7n9k;Í=Ó?:AöA‡BáBŽBA×> =;Ó9ô76b4{2G0ÿ,õ(–$‹pƒF v•ÿ_ùÿòòì¥æÒà¿ÛØ*ÕåÒÑûÎÍjËJÉ*ÇÅ÷ÃrÃvÃÄõÅ*ÈÆÉ«ÊHËØËðÌâÍ:ÏzьԡØÍÜ%á.å~è´ëÖîòö%û¾îy ð¿À•"“%ú'.*¦,/Þ1{4×6Û8ý9s:¢9ê7s5Ë2}0S.Ž,²*œ(V&#Q LØfCÊ ¼ø[yý#ùèôRðeë|æ â;ÞaÛëØ¯ÖkÔÒ¸Ï"Í´Ê`È¡ÆÅ`ÅƎǰÉÛËÎKСÒ;ÕØ/Û½ÞÌâPçòëzðfô°÷{ú$ý¼ÿ@êÒ d›‘ uŠg0ûÌ‹J  !;!Ô ò§:Ò<c-ñŠÊÎ yãZþöúí÷ùôò©ïXíßê^èæä'âLà¤Þ|ÝëÜŠÜ/ÜÜqÜ Ý¤Ý0ÞÆÞß§àâÇãÉå«ç»égì…ï¹òÅõ ùèüG‹ e Èý¨7ó"¶! %Ø'Í*Ã-l0&3}5>79Ž;>Ñ?.AëAmBC‰Bì@ä>F=¦;„9®7:6{4(2j/#,Ÿ(Ÿ$Ù‘Á;S é…þ¬ø–òüëÒå?à²Ü‹ÙhÖcÓñÐFÏÍ­Ê4ÈÕÅ´ÄÄ.Ä<ÄîÄŠÆ™ÇtÈÄÈIÉZÊkËí̾Î}Ñ.Õ ÙÝ™àÃãÎæ°é\í<ñàõ7û9XI3&œ ‚#Œ&)Ë+ð.×1Ñ4Ê6O8á8®8Æ7Á5ß3ü1„0â.S-{+H)Ã&ž#âz5Jô$ ` ·ÔÉþ’ùÏôÅïëmæ–âX߇Ü/Úš× ÕKÒÏäÌ3Ê.È£ÆÆÆùÆ…ÈEÊÌÍÍäÏÒ’ÔI×vÚTÞ¡â çvëlïêò±õQøÁúZýÖ’ ü ß0øh±Ý2$ À ü é N hHñ›ü ï…@ ÈTäþùû6ù›öô…ñÓîìŽé?çå,ãá'àAß•ÞöÝ„ÝcÝÝÄÝÞbÞçÞæßáRâ½ã„å˜ç«éì¸îÁñ,õ½ø€ütaÕ Ò°±§“Ñ2!c$§'ì*Ê-0b3¤5f7F9f;i=?@ª@…ASBBp@¼>º=q<[:ð776æ43¢/i+(%— YááÁ kýûéôÉïëê¨åàWÜcÚ®×FԺЫÎ7ÍÀÊ5ÈƤÅòÅçÅÆ`ÆIÇÂǵÇ(ȩȎɉÊ/ÌÏÎÆÑdÕøØÜ6ßâuåçèªìQñªöûü_«  ê{Òø@#“&Á)˜,®/˜2>57Â7¢7Ï6¶5=4­2D1æ/¥.B-‘+R)y&#GV¼¸;»  øX7ÿWú[õ[ð±ë‡çßãñàÞ6Û(ØÕ4Ò7Ï>ÌŽÉ›ÇÈÆžÆýÆÒÇ/É×ÊwÌÎÑÏëÑwÔq×ÑÚ¡Þêâ&çöêî´ð9ó¥õø‹úRýþ À ++šoÍ2@6 – ! “ö³3¯ä ô ™ jZ–Öýû]øÙõlóíðZîàëžé¶ç÷åcäãüáAá´àWààÂߨߥßÛß.àÏà°á±âòãŠå™ç¼éóë€î®ñªõ½ùWý²> n ÷ PQ.GÝ"0%…(‹+é-0=2˜4"79³;‡=>?#@€@|@Ã?³>U= <;:Ë9˜8A7p5—2µ.*€%ê >( Zþž÷7ñ)ë=æ,â?Þ9Û“ØBÖòÓpÑÝÎÌûÉ3ȪÆöÅÝÅrÆòÆiLJÇ}ÇòÇ%È ÈnɦʨÌKωÒÞÕýØöÛÅÞâÎåÓé§îômú h/ üsU½!$†'â*1.þ06356O6ž5…4I3#211þ/ß.z-Ä+§)' $  W<ŠCã] [ }OýMø¢óï ë\ç.äáÓÝoÚÕÖcÓ6Ð=ͳʪșÇ8ÇtÇÈâÈÊeËç̒ΜÐ&ÓÖoÙÝÆànäç/êmì¢îÚð_óöù_üµÿ( U L 4íÉ“ƒuT>¾ò›Ä¯\ýi’zøA<Éݾ¦ Ì,kÉoþ-üÂù ÷lô×ñ‰ïCíëUé èùæÕåÇäñãYãÇââ˜áXá5á4á©á€â{ãäóåãçZêÄìLï(ò·õnùØü>j{ z ¥Ç3>_ ‹#{&`)M, /œ1'4©69;Q<Ñ<#==Â=c=Ë<8<Ä;};3;5:o863¿/-,( #ƒôôš N(ÿ(ùjó îžéoæ×ãäàtÝ/Ú{×íÔéÑÛÎWÌÚÊ#ʭɘɄÉÉgÈÇ/ÇÇ@Ç…ÇAÈ÷ÉÌzÎÑdÓ¶Õø×ÅÚAÞoâxçúìÿò?ùqÿ3E ye"ü ¦$<(u+N.]0©1$2û1—11à0ž0R0µ/¨.U-¢+ƒ) '_$®!?W†¯‡Õ—Ö ¿ %[Žû÷ózï!ì°è!åRáqݬ٠ÖÅÒÖÏsͽ˰Ê6ÊÊ0Ê—Ê'ËñË6ÍçÎãÐEÓÊÕ¾ØÒÛòÞ¤áÖãÆå£ç°éüëîJñ4ôu÷ÇúùýâZއ~ c Š ß`Ø2\OÆ’ï7;üd§– ™@{ Ò vr”–m!þ¸û?ùªö/ôãñðvî?í9ì#ëþéÅèçhæuåä”ãã"ãtãÖãhäeå¿æèêñìÆïÜòçõùnü‹ÿéìq Π鵪K æ #m%:(C+q."1?3D5l709A:¾:•:G:‰:¶:‘:‰:Ç:…:39:7ê4W2ù.e*%ΙÁ[>‚áüš÷ßò<ïìåèWåWâóßCÝÚ¹ÖþÓ2Ò¨Ð<ÏÎÍÿÌ®Ë2ÊíÈȪÇ+ÇLJÇöÈÓÊ—Ì,ÎÃÏiѳÓxÖîÙÞíâœèµîõîú w_I ò“M,G÷"H&Ð(·*,¡,Ò,¤,È,-|-Ä-- -C,+;)'Ý$é"Œ!Z {©VV¹sç G¿Šü§ø*õ™ñîQêQæVâ_ÞŸÚ×ÔÂÑøÏóÎ)ΣÍSÍ-ÍTÍ·ÍyΙÏÑ0Ó…Õ؈ڿܣÞ9à£á ãžä~æÎèVë-î7ñUôg÷úŠüÑþM–µ k ’ãÝEPä{Ñå½X†-|‡d.* | È ?|•eþªûŒù·÷ önôÿò°ñiðàîXíÎëzêkéfèbç¦æˆæ¥æ»æçæTçDèÇé’ëzíÇïhò=õì÷ƒúãüCÿÓ‹=6 , ƒþc=“úÀ!†$õ&ÿ(K++.13C4?56«67777©7$8@88„76©3k0g,1(›#JOÁ×  5@ÿÈúõöŠóáïAì-éfæã´àþݺÛëÙô׸ÕÁÓhÒWÑÜÏùÍjÌVËëÊWÊÉɹÉ4ÊäÊxËdÌÍÏúÐiÓ§Ö¥Ú.ßäCépîQóè÷IüvjFÿ Ýöôd £"l$Ì%¨&T'ð'ç(Ñ)*Æ*—**)(ñ&Ä%³$¹#ï"å!¸ ô9Ù*d¡ ÆýY¬ü ùmõªñµí‘éåëá»ÞèÛ[Ù:׋Õ@Ô!ÓWÒŸÑ,ÑÑRÑÿÑÓuÔúÕ€×Ù‘ÚøÛ6ÝNÞAßpàýáëã0æ~è÷êí>ðÐò?õ÷ÞùHü¿þ^¶^ Ú 1B™îÛ…Ó×u²¦PÝv Ÿ2â ª ` Û EŒØÿþZüÌútù ø¢öõôAó¾ñqðBïïí—ì–ëë°êDêê'ê ëIì¹íWïwñ¾óæõ¼÷ùjû’ýôÿM¥=ý Æ z³ƒÖ½­0u é"»%¥(Ä*K,£-Î.Ð/Š0 1Å2‘3B4Ç4E5#5ø32à/ð-ð*',#ò}ø†e ðÕMý¼ù÷õ¨ò¼ï*í_êªç–äœáyßžÝÿÛAÚÙÎ×ÖÔòÑFгÎoÍaÌÌyÌ"Íà͠βÏÁÐ1Ò§ÓÜÕ ÙÝêá¼æßëŽðúô ùaüÉÿ¨öf Ý&²ÇÁ™2 :! "9#L$L%&&ø%c%¦$É#ï"l"Ò!c!£  ºÀV£ÿ )ÁýxúÿöSó•ïÌë_è(åoâ÷ßÞsÜÛÚÙ@Ø„×áÖ–Ö’Ö׸סØÙÚ±Û\ÜçÜ/Ý¿ÝÞ¸ß+áÕâæäçŒéÊëî&ðLòô°öôø^ûóý¶XÜ4Y 4 À <C6øÅÅ…X„Œ¢¾: i { ` 7 ñœ3—¹žÿZþý„ûú²ø4÷ÀõKôêò³ñ®ðð½ïxïFï[ïð>ñ–òÍó õªö^øÑùûü:þEÙ… à } |ÒÛzdâïòB",$P&`(Œ)¨)ó)+p,’-|.´/1+2ø1o0M.¡+¼(%!Ô·)°o ØFþ¼ûàø3öíówò ñ­î[ìøéóçƒå«â-àCÞ&Ý€Û¢Ù°×$ÖØÔ;ÓÆÑNÐŽÏÚÎϧϰÐÎÑ Ó(Õa×fÚEÝmà+äèsìðêóœ÷øú\þ#Ð Ô &rÃ_ûà‘t À P!("W"i"."""x!Þ ¨a†dêFHP  ùçÊÿÂübù ö¸ò«ïåì/êÄçŽåßãaâáùßãÞøÝ*ݸÜbÜ2ÜÜ+ÜRÜ~ܹÜÓÜòÜ Ý:Ý—Ý0ÞCßàúá“ãfåaçdéeë:í<ï_ñóâõøbú¼üÿ]_3ÞS­ ä í Ø „ o«çßС`-Æ ` Ø e Î  ^ ‚ ƒ_@( Ô‹Dÿ þÒüxûúÆøµ÷Çöîõ9õ½ôªôòôõhö‚÷ÔøúûàûãüÍý¿þÕÿ¦DîvO A Ä Íÿ_›¾²Ú !ý!W#r$.%Ž%š&f( *+ö*.+~+¿*ß(&º#“!õãsJÕ ù ͳ6KþQü ú–ø÷^õódð]îYìê†èeæûä£ãøáÒßnÝMÛ9ÙDדÕ*Ô¼Ó‰ÓŸÓ Ô Ô§ÕnÖÊךÙþÛßâ“åéËìùï©òEõ÷úsüæþ@! µ | pšÎÒ–1Çíê±mýUžà2PZ-†4•Zñ .½YýÅúå÷õŸòyðœîÐì2ëÎé—èqç-æëäÍãôâRâ¿á5áÃàwà:àÔßAß³ÞqÞYÞkÞÍÞßàÈáãhäâåvç é‘ê<ìîðÿñëóÊõ«÷ùLûïü‰þôÿW”Ïôè›6ù¸c ä T ì a Ë à à Î @ Ó l ë ` §Ñè <LÿHþ:ýXü¡û,ûÈúkúIúŽú2ûüý!þýþ—ÿúÿXº˜E]áwËæò & ˆ Q' 4yàCöúÖ u!"#$ý%'P'E'â&²%Û#®!œ–SxõF  åfåø¸ÿ þ_üßúù³öôÀñð§î1íëMêÊè£æàãá¯Þ‡ÜœÚÙئ×q×h×{×Ó×.ؔذٞÛaÞqáäïç;ëLîyðòdóàô©ö²øùúUýßÿMp2Œ´¾  ` è Ïãï‘Ƕ=Øy? êclÑ’Óá·„^UŽ ï . ,ó‚ÿlþüäùølöíô‘óKò ñ¯ïNîÓìxëEêZé™èÖçíææLåqäZã/âáhàà àZàñà¿á¼â·ã¿äÄåçæèZé¨êì•í'ïðÆñ÷òIô©õ÷3øvùÊú6üý«þ†ÿ^+ÿáÓÓÉ·’`ò@ L K G ;  ì¬GÄ!wÔ(rÁ4ÝKª\7æÿâÿ9êV}“«ÆÓÿy?!Þ¸ß 9 ” /Õ¢JÂ\ðû¯5ÒÌ$ ± (!Â!"Ü"v"M!ÝœÎ9w¶ø ª ¶<µ6 ÛÿýOû}ù×÷2ö¶ôjóŽñˆïí¶ëÒéXçÞäìârá@àÎÞŽÝ–ÜïÛ:ÛƒÚ]Ú£ÚÛÒÜÞÝàSãæ|è~ê2ì¸íVïçðŽòèó~õg÷`ù1û–üÙý!ÿ|÷LØ…9 Ä c šÈ Y±ÚIi)aKÒüºJÙ|.ÀP× X ¨ ÞZ¯-Æÿnþý¤ûDú ù­÷;öÅôƒókòUñIðGïLîEíõë†êûèçSæ3åsäìã´ã¼ãçã)ä~äðänå÷å–æ6ç èôèõéäêÌë•ìBí îï ðñ+òGó€ô¬õ¶ö–÷`ø;ùúû.ü[ý‰þÃÿêî  íU¸QiR Ùº¦o+ <]Z7 6c¹Fû‰è ê¥hD1ÿßÒëüJ  ü § } Û ã¯F‹¬;¦L9M,øß¢Ùr*!”ä¾A  q½‰âŸÖ÷þíüøúâøÛöaõùóžòñYï<í¤ê è˜å®ãKâ áfàà àíߺߚ߀߳ß%àíàjâxäûæ*éëxì“í£îDï¿ïJðañ ó¶ôpöø}ùöú*üEý0þyÿÿÃÏô( þ ‘ Ë ùàÔåþãƒØº8]7÷ðï2i Ÿ a  ‚L%Ah˜¢}ÿ8þÕüwûöùˆøB÷öÞô¢óPòÝðiïâíCìÝê¨éÝèWè'èèèèè(èCèeè™è³èÑèøè'éUé{éÂéê¥êQë"ìíãíÒîºïªð‡ñmò[ólôõ´öñ÷0ù\úkûUüFý'þóþ¾ÿ|/Ã;—ô8p»¼TÙRÅ2‡²Þ*’ðD š à ø Å m  ÙÐØÕ× o Ç ò  c á u  Ø ó ïKLîz%ER ƒ üžÆ~5üTmI)ð°ƒ+—Òß e  Ö ¥§üQ—ÏçáAEÿ@ý²û8úmø–ö»ô)óšñ©ï_íë éOç³å½ä ä¡ããcã†ã‘ã¹ãäkä*å æHçßèNêŠëXìúì§íOîÜî5ï´ïÇðònóµôÛõ ÷Aønù‡ú¡ûýÕþßæ´|v ‡ f \ E 9û’ý¼K¯ï F Î Z Ñ 8 ® A § å XàEŸÜe’Œ^ ÿÆýŠü\ûúšø!÷ÇõŽô^óòñ>ð´ï$ï¢îCî î¤í¾ì¦ëáê²ê¼êwêêôéTêàêëåê¹êìêlëæëKì½ìhí9îòîïð®ðOñ÷ñÃò°óÜô$ö4÷ ø¢ø7ùìùúGûÕû…üýÉþÞÿ¦/Ú—Pë˜K%臿û(dyŒÓH Æ ô æ é ! J :  ü F ¼  E o ´  < > ; % § ÍÅpº ¿fŽÞïÜ8ÝûÊDüónZ× à†Ê•– h ‰ H ®zÜFˆöè¬Ù¹ÿ.þ—ü$ûÝù¯ød÷ôõNô…òžðxîdì¬êƒéœèûç­çÉçìçè9è[èÃèpéYêDë,ì$íîÐîTï ïÛïàïÆïÆïLð?ñLòJó;ô9õöÒö›÷jøSùzúüýýâÿŸ/ ¹hݶk È -  Ù™•oUY|Œg%Î?­Äw*Æ$Òwÿ)þ×ü…û;ú/ùtø¢÷Uö ô0óRò¢ñ÷ðNðð_ðÚðñÜð¹ðƒð*ðïïÓî¹îÒîüîïôî´îrî1îîî|î6ï5ðñÒñò<ó ôžôõÕõþöXø£ù¿ú¢û^üôüIý{ý³ýMþÿÕÿžb8÷²rXH$ ª R Ì õ ä ¦ ™ « Î Ú ã ä Ï ž Z  þ  W ž ó 8 ƒ ¿  } Ò  M ¦ Ï ­ I < ’ î í » • “ Á o=]UÓùƒˆ›n-‹+1&0øžr Ë A”]XQc ú¸O"UÏÍoý.ÿ þûü‚û›ù÷½õ´ó[ñ+ïµíFíqíÅíî‘îaï,ð©ð#ñÜñóòôXõöÌ÷•ø±øø!÷(ö<õhôÍó›ó ô°ôõ-õAõyõáõhöe÷Ãø’úSüôýƒÿñïy’Î7Öe¡‘ù.3<78ÿ‰þTþWþfþkþ—þÀþáþìþÿ%ÿ"ÿ%ÿSÿ§ÿÂÿfÿŠþœýÖü üû úHùÍø)øD÷Eöšõõ²ôNô+ô}ôÞôõ7õ^õ•õ·õ²õ²õ¤õ§õŒõžõ õŽõ[õ'õõ õõ?õrõËõfö*÷Ð÷Wøçø{ùúbúÅúsû@ü ý¦ýNþÑþ ÿÚþ²þÚþNÿ®ÿÌÿ Ž,„‰ŽÓ¡ÐÊNODgC`^ÄñÂÀSJê7 k|Mgx’{ÑÜ£1«µÆ»¡ Ò ) 1X®=õ*ëJ² ´ © ® A Ó @ Ùè èKò‹GàÇïóK“ + > »o ¿ É } T D Õê÷´ÓÈ^Êóðá’ôÿ£þþrý—ü¼ûfû/ûiúÞø÷õõ—õ=õÒô¸ôRõþõGö öõõô6ô•óró¤óÞóôžôLõÀõ©õ1õ´ôˆô¡ôºô(õ ö÷÷±÷ó÷Tø ø»øËøAùCú¦ûýüÚýGþ¼þ!ÿ!ÿ’þþþOþ°þ"ÿ}ÿoÿ'ÿÇþ¹þÏþ2ÿtÿ^ÿÿýþÿéþuþ'þ;þZþDþ]þ—þuþªýýÑüåüÞüöüDý‘ýŒýñüü=ûªúú©ù¹ùXúÿútûÂû¿ûFûbújùÜø,ùæùsúïúQü*þ÷þõý0üÕúú¥ùúìûAþ2ÿ<þwü û£úÚúTûTü„ý:þ@þþ™ýùüvý¦ÿÓ¢ÿtýñþÕHúÿ±þ¯ÆzeÅË|ÌÿöþÿR-—þÿ­ý«ÿÜÐîûë5¯à°Öß<q ždÃen(úO Ë ±ÖE­ót Ì Ñös5E“ Ó ÄzGÒs ^B ï £ „ JÈe ¹ ÿ O£ÖP „ 5 ž ¬`!`µ/ P ŽÕf®|Ç8q "Á s_¶áž"üÿ›ÿþ´û4úÀúü+ýþÿ“ÿÚþaýôûdû¡û.ü ý+þ#ÿjÿŸþ.ýü¥ûŒû\ûûÌúôúüÈýHÿ‹ÿ9þ»û\ùžø'ú'ýÀÿþ‘ü·üþÀþõýoüªû3üÉüüsû!üøü×ü»ü~ü#ú<÷‹÷ZûCþ”þwþ¸þýcù‡öV÷.ü§ Gÿoúøø_ûþ‰ýú/øûF%ÛþWû¤û©ý„ý5ûØùÑû‚Z)“ýÛúÜþ£¸ÿþýøû(ýì¸\6èùýÙù-øSü±  WýHüBÿª¦KLdÿSýVÿ¡‘ÿŒùäüý†ÿ7üdþªA”ÿýMþç3»—ÿTû6þNàÿY :û°ôªûx‰eòóýJüÑÔÿÛf {xø–ým Bß#úÓÿ"šŽ*ÿàÏcôÇÿ üeÁ \¨ßÿþÎÀS˜Þ7ôþ™ Á‹ýøýpAVÀûKÞˆãüwüfV»F<ü°ùÃýˆ ^üýÇú–ýdÁo5ÿJý´iÌÿ{üBý¡± Ó ôýôùný ¤ÿoþ¦§~þãüSðmO3þzûFþÎt6µÿgûþo]áÝþäþë‹ZþûüX±t!ªý"|YÔý?ýºø*ü-úqþà$Žÿ}üÙüË ôýž÷òû’Ü©þ(ùûüyÓû.ûŒcEÿþÈQuÿ~ü¬þzÛþ þîÀ6óþî.þÑøƒüÆ*BþÐþg>¿þöÅÕüÜùtjÙú/÷Œ ]vû-ùöü ÿjÿTõý¶ý†w«Òù1ûZíïþÀü®ÿlU:ÿÌø±ûE㎞þ¬ÿLÿ6ý9ý¼r5[ýû ÿR#K  <$ýúÚÿ1ÿÿôüplÿþXÔPûvý%¥œ„¢ÿT3üÿp]¦ÿwüíüúŒ´þºú ÿö ‹ÿGÿ¨oŽ®ÿ4þ›þËþ€à]4çÿv<øþGþA|aÀýEý*ÿXóWŸ=ÿéýÿýÿ2Z!¦ÿ`þþ2 K–þ?üüÔþÁ- þþ÷ÿ“ëþSýÜýŠŒžŽþ7ýpþ&ÿ­þ„ÿXÈ€ðþàþÿÿüýwþopKÔþSþDÿì½Püÿ‚þÍýÿÍòòÒþ­þž³_zþRþ]$†—ÿ®þþÿóm½Bþ½ý‰ÿ¬aïÒ%áÿ%BjàÂÃÕþÿ¦}_ÿ¹þ%#§d`¤êþÆÿ)Ö*Þÿ‘Ï4x¤×ìW­ÿòÿ®ÓˆM¥ñÿýÿ…~/\è÷CµÿÚÿ€©B%qR /•åÕÿ›ÿ(U}Íÿßÿs¼›¼ãÔq9¡3ÿÁ®Øýõú&vmçUTå\'ŸRwËØ‡?ˆFûÿ†ÿ"C¨ÿwÿâÿqq<âÿbÿFÿÖÿ›˜ ªÿ<ÿøþ0ÿÔÿbSÞÿfÿ.ÿKÿŸÿ°ÿ¬ÿéÿ*Šÿÿÿ|ÿxŒÿFÿ†ÿ¾ÿ©ÿ‰ÿŠÿåÿ. „ÿ=ÿbÿàÿ5"èÿÔÿçÿÁÿuÿOÿ¶ÿZj×ÿWÿ€ÿ =Ôÿ\ÿ|ÿ*«e’ÿ$ÿxÿ€7‘ÿDÿ ÿ ÿžÿLƒÿEÿ~ÿûÿH'µÿ’ÿÂÿñÿøÿÃÿŸÿ®ÿáÿáÿ´ÿœÿÈÿÜÿ©ÿyÿŽÿåÿûÿÊÿŸÿ•ÿ¬ÿËÿðÿõÿêÿÝÿÁÿ¨ÿ—ÿ°ÿòÿ Ùÿ°ÿÁÿäÿÝÿØÿôÿõÿÑÿÇÿêÿûÿâÿÄÿÓÿÑÿ¬ÿêÿ@%±ÿyÿ¤ÿíÿûÿ¼ÿxÿ]ÿ£ÿîÿöÿºÿ¢ÿ×ÿìÿ´ÿmÿuÿæÿI*Îÿ¡ÿÌÿýÿAR/Øÿ»ÿõÿ;F,&:(>~‰O%$UšÌÆ¢uWSw®FðI“òæÄÌâ¥8Tµèîê±.Ûÿ-Ïüœ@YŽn.l‰>Ôÿ²ÿúÿKBÛÿûÿ&øÿ¨ÿ—ÿÏÿ+ºÿ€ÿƒÿŸÿÎÿñÿåÿÇÿªÿ—ÿžÿ¡ÿ·ÿÒÿòÿöÿ§ÿÿ”ÿµÿÛÿûÿýÿ¼ÿyÿiÿªÿÝÿÝÿÎÿ²ÿÄÿÃÿÕÿ¸ÿÿ‡ÿÙÿ*öÿ¨ÿ•ÿÈÿýÿáÿ£ÿ«ÿäÿúÿâÿëÿõÿîÿËÿ°ÿ«ÿØÿIªÿoÿ°ÿA ÔÿÈÿéÿ ÚÿÙÿ PKÙÿëÿ"F:=1!JV:)RF*2SL?06@4 MI 5BêÿB6öÿðÿ$6ëÿ$ ýÿçÿ´ÿÙÿ ÝÿÓÿêÿùÿàÿÛÿßÿèÿéÿÏÿ¼ÿòÿùÿ¶ÿÆÿ+ñÿñÿùÿ <2ùÿæÿbZ4*5?7GVu„‰_6P‰ˆ‡R2‹Ë±OL‘£aCН–gv…vWt‘‰[S]ZBGXZT82:Lýÿ#dJ óÿúÿ*/! ,/çÿ& øÿåÿþÿïÿþÿ ! ×ÿÑÿ÷ÿ$"øÿþÿ+6)#)+%'-3-% *:70<H$"BU[;1dg[IMOBBFJ_e_/D[P>:B>94Ibs^M:SlgGB[ŠvKR_icUdmmS; :e{iQ7?DT^aX_]P<F^s_=Luˆs_Ne\fk^GGj|nja€s}ƒ–™—}„•˜“’“žž¥¹­›™Ÿ¨¥©¥¶¾¹²©¸ÙΪ¡µÉ«š¡ª´£˜ƒƒ€šzpmj_`fyro\KNSUNEMGPOMP_`H+'IVKALXH.2AR=C9.4>H:)7?>-)1?A887<AG8/4KSL68FQB;?UbM@78CTL@/<V\VA5F`aZNedU<6C\ZL<<DVNB:>KG=7BGYNI:AP^PEHZ_QGHMK>8=FIE6*)0@</42<++::GE15!3>@9,/6<.+*3:?31>KT<@ENX\LSRWVX]di^]a^a]l`rs|q`]rŒ}pdpojfmrxjvohboxf^RhhgHHMVPNJDJH@;:IL?1$'3=9343,**67;I7"176)&(&$(,59) $4/7#--4*3?J@+!'7FA93,0<C;@8:2*,9EF=21KOPAEIQRDDRYL@4;BGIA?@LDKK>;?G7:5:FGEFKQWPRGLNSH<73;;D:911038;<;:4332=?;2&&13/-""(,/3(/+6*03B?=27JJF@?JMMFXT[\RLNYegi^^TYOZ[nffZYRUfp[ZQYUY^XPOPLJEM^QJB=@;910*)"%"$    ÿÿ    þÿùÿþÿúÿþÿ÷ÿöÿòÿþÿÿÿ ÿÿÿÿûÿÿÿþÿþÿ÷ÿóÿþÿøÿðÿîÿùÿûÿöÿéÿêÿéÿéÿìÿåÿìÿéÿëÿäÿäÿÞÿäÿîÿëÿêÿÝÿÞÿÝÿîÿæÿîÿðÿëÿçÿçÿæÿéÿçÿæÿìÿêÿâÿðÿòÿåÿàÿçÿèÿ×ÿÛÿÝÿáÿÞÿØÿ×ÿØÿÚÿçÿìÿåÿáÿÜÿ×ÿÖÿÕÿÖÿÔÿ×ÿÚÿÙÿÛÿÕÿÚÿÛÿÝÿÛÿÝÿèÿûÿéÿåÿÜÿéÿäÿëÿèÿâÿêÿïÿïÿçÿíÿëÿýÿøÿýÿõÿòÿðÿùÿõÿõÿ÷ÿýÿüÿõÿþÿÿÿþÿüÿüÿúÿ÷ÿûÿþÿøÿõÿèÿîÿòÿúÿðÿóÿåÿèÿèÿäÿìÿóÿõÿñÿïÿéÿäÿçÿÞÿæÿßÿãÿâÿãÿ×ÿàÿæÿÔÿÔÿÐÿØÿÑÿÑÿÏÿÏÿÉÿØÿÕÿÓÿÒÿÈÿÌÿÀÿÇÿÂÿ½ÿÈÿÎÿËÿÊÿÆÿÃÿÂÿÁÿÀÿÇÿÐÿÏÿÓÿÌÿÁÿ½ÿÁÿÄÿÕÿÕÿ×ÿÙÿÑÿÒÿÐÿÑÿàÿíÿåÿÔÿÔÿÏÿÑÿÍÿÉÿËÿÉÿÕÿÕÿÒÿÓÿÏÿâÿÜÿÚÿØÿ×ÿÐÿÜÿÖÿÔÿÎÿÔÿÛÿÝÿßÿ×ÿÜÿÑÿÒÿÜÿÖÿÕÿÍÿÇÿÇÿÇÿÉÿÇÿÐÿÏÿÖÿÍÿÍÿÆÿËÿÔÿËÿÎÿÅÿÉÿ¿ÿ»ÿ¿ÿÈÿËÿÌÿÊÿÔÿÈÿÎÿÏÿÐÿÑÿÔÿÖÿÖÿÖÿÖÿÚÿ×ÿÛÿÎÿÌÿÐÿÖÿÖÿßÿáÿâÿØÿÓÿÖÿÜÿÙÿÖÿÙÿÖÿÐÿÓÿÐÿÓÿ×ÿÝÿßÿÙÿÝÿÜÿ×ÿÔÿØÿßÿØÿáÿ×ÿÓÿÍÿÎÿÌÿÙÿÞÿÝÿÞÿÓÿ×ÿÐÿÛÿ×ÿÔÿÕÿÚÿßÿÙÿáÿÜÿãÿßÿíÿðÿíÿçÿìÿäÿèÿßÿßÿØÿçÿéÿïÿèÿêÿãÿåÿóÿñÿùÿùÿþÿ÷ÿóÿìÿïÿúÿûÿúÿùÿùÿúÿÿÿ ýÿûÿõÿùÿõÿòÿùÿýÿùÿ÷ÿöÿõÿíÿïÿìÿñÿòÿôÿíÿñÿèÿõÿéÿïÿîÿìÿðÿáÿãÿÙÿáÿ×ÿÛÿÜÿÚÿÖÿ×ÿÎÿ×ÿÓÿÜÿÛÿÖÿÖÿÌÿÈÿÏÿÓÿÕÿÑÿØÿØÿÞÿÔÿÒÿÊÿÉÿÍÿËÿÒÿÊÿÔÿÏÿ×ÿÏÿÏÿÔÿÞÿßÿâÿâÿÜÿÕÿÞÿÝÿçÿÝÿãÿëÿëÿîÿóÿõÿïÿíÿïÿîÿíÿîÿôÿçÿáÿàÿÝÿÛÿáÿßÿãÿÝÿÛÿÛÿâÿçÿéÿáÿàÿâÿîÿÝÿÝÿÙÿØÿÚÿäÿÎÿÒÿÎÿÒÿÔÿØÿßÿÕÿØÿÒÿÉÿËÿËÿÊÿÒÿÓÿÐÿÊÿÆÿÊÿËÿÉÿÃÿÇÿÍÿÐÿÊÿÆÿÄÿÅÿÇÿËÿÅÿÏÿÔÿ×ÿÒÿÌÿÄÿÉÿÄÿÊÿÁÿÆÿ¹ÿÃÿÂÿÅÿÆÿÊÿËÿËÿÉÿÍÿÇÿÏÿÇÿÊÿÇÿËÿÊÿÇÿÆÿÇÿÅÿÀÿÅÿÈÿÉÿÒÿÍÿÉÿÑÿÈÿÎÿÆÿËÿÅÿÎÿÏÿÒÿÖÿÓÿÎÿÑÿÌÿÊÿÃÿÍÿÅÿÎÿÆÿÉÿÅÿ¿ÿÈÿÅÿÈÿÀÿÆÿÁÿÊÿ×ÿÒÿÖÿÓÿÙÿÜÿÜÿØÿÕÿÓÿÒÿÌÿÐÿÏÿØÿÏÿØÿÙÿäÿáÿãÿæÿêÿçÿëÿíÿåÿãÿèÿÚÿáÿåÿêÿäÿÞÿÚÿÞÿÜÿÚÿÕÿÙÿÜÿÖÿÖÿËÿÏÿÎÿÍÿÎÿÇÿÓÿßÿÖÿÓÿÌÿÈÿÇÿÜÿÍÿÑÿÄÿÈÿÅÿÍÿÈÿÂÿ¿ÿÆÿÂÿ¿ÿÀÿ¾ÿ¿ÿºÿ¾ÿÀÿÇÿÈÿÄÿÂÿÃÿÆÿÅÿÄÿËÿÓÿÔÿÚÿÑÿÙÿÐÿÍÿÍÿÔÿÕÿÏÿÑÿÈÿÐÿÎÿÏÿÊÿÏÿÎÿÍÿÔÿÒÿÏÿÐÿÍÿÒÿÉÿÏÿÆÿÌÿÐÿÕÿÔÿÕÿÈÿÏÿÑÿÚÿáÿÜÿÚÿÜÿàÿÔÿÜÿÓÿ×ÿÞÿÚÿâÿßÿÕÿÙÿÕÿÜÿßÿÚÿÕÿÎÿÏÿÌÿÊÿÊÿÇÿÇÿÈÿÇÿÃÿÅÿÄÿÉÿÏÿÇÿÆÿÂÿ¾ÿºÿ½ÿ¾ÿ½ÿ¾ÿÅÿ¾ÿ½ÿÂÿÁÿÂÿÇÿÆÿÉÿÅÿÆÿÉÿÊÿÄÿÀÿÃÿÅÿ¼ÿ»ÿ´ÿ»ÿ¾ÿÀÿ¹ÿ¿ÿ¹ÿÁÿ¿ÿÅÿÄÿÈÿÅÿÄÿÂÿ¾ÿÃÿÇÿÄÿÅÿÅÿ¿ÿÂÿ½ÿÃÿ¾ÿÅÿÇÿÂÿ¿ÿºÿÄÿÆÿÉÿÏÿÆÿÏÿËÿÈÿÂÿÍÿÃÿÃÿÀÿ¼ÿ¾ÿ¸ÿµÿ³ÿµÿ¼ÿÂÿÂÿÃÿ½ÿÁÿºÿÁÿÀÿÅÿÃÿÊÿÁÿÄÿµÿ·ÿÊÿËÿÌÿËÿÅÿÌÿÂÿÃÿÅÿÇÿÒÿÉÿÐÿÄÿÂÿ¹ÿÌÿÊÿÓÿÖÿÌÿÅÿÇÿÀÿÇÿÌÿËÿÔÿÑÿÇÿÍÿÊÿÉÿÁÿÆÿÈÿÉÿÇÿÇÿÈÿÅÿÄÿÊÿÄÿÉÿÅÿÇÿÇÿÄÿÃÿÄÿÅÿÄÿÊÿÄÿÉÿÃÿÆÿÆÿÊÿÀÿÆÿÆÿÈÿÁÿÄÿÄÿÂÿÂÿÂÿÆÿÄÿÅÿ»ÿ¹ÿ±ÿºÿ´ÿºÿ¸ÿ·ÿ®ÿ±ÿ°ÿ¶ÿ·ÿºÿÇÿÍÿ½ÿºÿ´ÿ´ÿ´ÿ¶ÿ»ÿ¯ÿºÿ­ÿ²ÿ©ÿµÿ¸ÿÀÿ¶ÿ»ÿ¸ÿ»ÿ¶ÿ½ÿ³ÿ°ÿ¶ÿ¹ÿ³ÿ³ÿ«ÿ­ÿ¯ÿ­ÿ­ÿ­ÿ­ÿµÿ«ÿ±ÿ³ÿ¬ÿ¦ÿ«ÿ§ÿ¨ÿ¦ÿŸÿ¤ÿ«ÿªÿ¤ÿŸÿ¡ÿŸÿ ÿšÿ¡ÿŸÿ¡ÿ­ÿ«ÿ°ÿ¥ÿªÿžÿ§ÿªÿ¥ÿ¥ÿ¤ÿŸÿ§ÿ ÿ¡ÿ¡ÿ§ÿ¡ÿ¡ÿŸÿžÿœÿ›ÿ£ÿžÿ ÿ›ÿ•ÿšÿšÿ¢ÿžÿ¥ÿ¬ÿ¦ÿœÿ®ÿ¦ÿ¦ÿ¦ÿ§ÿ§ÿ¤ÿªÿ¤ÿ ÿ¦ÿ¥ÿ¤ÿ›ÿžÿœÿ ÿŸÿ¥ÿ¯ÿ®ÿ­ÿ£ÿ¡ÿ¢ÿ¤ÿ ÿ ÿ¤ÿ¬ÿµÿ¯ÿ°ÿ¬ÿ©ÿ«ÿ­ÿªÿ©ÿ­ÿªÿ¨ÿ§ÿªÿ¡ÿ°ÿ°ÿ¬ÿ¨ÿªÿ¨ÿ¦ÿ«ÿ¤ÿ«ÿ­ÿ®ÿ³ÿ¶ÿ¿ÿ¸ÿ¸ÿ´ÿ¸ÿ°ÿ²ÿ¸ÿ¼ÿ¼ÿ¸ÿ¿ÿ¶ÿÂÿ¼ÿ¸ÿµÿ°ÿ°ÿ«ÿ²ÿ«ÿ®ÿ©ÿ§ÿ©ÿ©ÿ°ÿ¸ÿ¶ÿ¯ÿ®ÿ¨ÿ¬ÿ§ÿ¨ÿ®ÿ¸ÿ¤ÿ²ÿ§ÿ¶ÿ¨ÿ°ÿ¨ÿ§ÿ¨ÿ¦ÿ¤ÿ¡ÿªÿªÿ¥ÿ¥ÿ«ÿ¤ÿªÿ¥ÿ¨ÿ£ÿ§ÿ§ÿ¤ÿ¥ÿ¢ÿ£ÿ¦ÿ¤ÿ¡ÿ«ÿ¦ÿ®ÿ®ÿ¯ÿ±ÿ±ÿ²ÿ¯ÿ³ÿ·ÿ°ÿ²ÿ³ÿ²ÿ¸ÿ®ÿÁÿÈÿÈÿÁÿÀÿ½ÿÀÿÁÿÀÿÄÿÆÿÂÿËÿÇÿÎÿÀÿÈÿÅÿÅÿÇÿËÿÍÿÈÿÖÿÉÿÖÿÜÿÎÿÙÿÕÿÈÿÍÿÇÿÐÿËÿÊÿÌÿÉÿÉÿ¿ÿÈÿÂÿÁÿ¾ÿºÿ¿ÿ¼ÿ½ÿ·ÿ¶ÿ¶ÿ¼ÿ»ÿºÿÇÿ¿ÿÉÿÃÿÀÿºÿ¸ÿ´ÿ¹ÿ¼ÿ¿ÿ½ÿ¾ÿ¹ÿ¸ÿ»ÿ¼ÿ¿ÿÆÿÉÿÇÿ¾ÿÃÿ¾ÿÀÿ½ÿÄÿÂÿÂÿÂÿºÿ¹ÿÃÿÈÿÏÿÑÿÈÿËÿÀÿÅÿÎÿÊÿÈÿÈÿÎÿÍÿÐÿÏÿËÿÇÿÁÿÅÿËÿÍÿÃÿÅÿÅÿÂÿÅÿÁÿÄÿÈÿÏÿÃÿÃÿÁÿÑÿÏÿÐÿÊÿÉÿÇÿ½ÿÁÿÂÿÅÿÉÿÎÿ¿ÿÂÿ»ÿ·ÿ¹ÿ¼ÿ¼ÿÃÿÃÿ»ÿ¶ÿ¸ÿ´ÿ¶ÿ¸ÿ¹ÿ¾ÿ¿ÿ´ÿµÿ¬ÿ·ÿ·ÿÀÿÅÿÁÿ·ÿ­ÿ¥ÿ¥ÿŸÿÿÿ~ÿuÿcÿJÿ.ÿÿÿ©þÛýtýCþâÿnÐ “ÿŽÿºÿÎÿÁÿÔÿ-"àÿ„ÿGÿ/ÿ'ÿ=ÿMÿÿ¹ÿÒÿüÿ(frEèÿ¦ÿªÿÒÿ( ¸ÿ_ÿ1ÿ+ÿ;ÿLÿ1ÿ“þlýºüaýGÿw—'Ì–ÿÿaÿÍÿ *@y…Zìÿxÿ!ÿ÷þËþ²þ¶þçþÿyÿÆÿ /êÿNÿ¸þuþ©þèþÿÿ>ÿ”ÿ8yÿ1þ2ý.ý5þÌÿ/ Sþ³ÿªý]ý"þgÿôw°Áèýüü¬üÜüPü@üüý<| þ‰ü©ûeü¬ý<þþ&þ¿þrÿíÿûÿÖÿ³ÿhÿDÿºÿcÁ£ÿ_ÿ—ÿãÿ#<\˜§x Éÿëÿ§´×E¬*ÿ‚þeÿ Eðçõÿãÿ_Kÿsÿÿi³ÿ@þ'ÿ‹x¢ÿüÿhKÿƒý{ý‹ÿÂ}þ¢üýÎþvŽ‹ÿ–þ‘þÜþ¿þQþ`þÎþ~ÿÝÿÿ…þ»ýþçþÃÿÐÿZÿÿ±þ0þfþÒþ8ÿVÿ1ÿ²ÿ{øÿòýýÚþ½Rãþªþ’ÿ¬ÿÞþŒþ´ÿÎ+”þ–þ`ÁþŽýÛþ#ûôþ-þ`ÿÈßÑþþýgþFÿŠm»ÿ þ+þ)zÁóþ„þ ÿ”ÿDx “ÿÙÿ¾ÿ7ÿÿÑÿê«Coýnüüþ•v¯füwú6ü±þMÿ@ÿ¾ÿéýŒùk÷±ù‡ýýÿ²+;ÿ‡þUþþÝþ<gÒ<mÿÎý~ýÜþñ{òÿ£ýeüHý¨‹þþµÿùá]àÿÄ6ß‹þÛüþ-òÐ̪^ý û¦ýû#˜FÿMú'üÜýczýeüŠ×Dåýðútü+]Q¬þýŠüýSÿä»ÁÿÓý¨üTýýÿ B1ÿýýTþ…ÿÝÿ¿þÚý^ÿ#ÂYþçû3ü”þ?¬bÿýhüÀý9ñKÿMþçþJ?ÿ þžþ(ÀÆFý+ü_þkk’ÿŸýsüÿ1·ÿßýgþ>ü¥ÿ,ïtýtû²ÿªµüúÿ}@ËÿàûÍü½¯R·üaý@´ž‚þKÿ´H‡þ…ü·ÿXæÿ üðüØð&þ¦þø}xÿíüþÔ? RþÉý¿ÿ#õþZÿõYŸÿèü üCÿ~†vgüÅûUÿðx½þ‹ùÊû>ðKú8øgÿ™À5ý…ùLýQ0CÆüÅý9íˆÿ³ýŠþÿNÿ´ú{\þÿJ¦ÿSþ@ÿR$ÿHûßü…NH?ûªúR¨yGýÝûSÿ‹~Èþhþg6Tý'üÏÿTVÿÖûÞüÉ_§ý¼ýÛvôÿjüòü<Ù3þú+ü*=5ÅÿªÿA¥ýYû ý“ø•þû­üÁï5ÿ¸ýÐþöþZþ‡ÿâÿ¨®þcü[ýDàœ³þæþªàÿoýSýø0ŸýÈûXÿgÍþ:üëýlO“ü9ýÎ|tºþØþºþ_üSþ©Gä…ûsù‰ü²¤ºûæû\‡þKúýeÀÿDûýXYÿ-ûuü üÑ‘ýžù·ýž7ÿ·ú üQ®zûíø¢þôn`ÿ4ûYû%þTÖdQÿÚýþ9˜s_HÿÿUþUþ¨!ô˜ÿüü|ÿüÉÿqþžÿ^1þ@ýSÿU‰”§üjü)…Ûu®ý´ü}ÿ7i+þÊüúþ©~ÛÕý¶üyþ“½þ zýÓýÀÿMN ÿ’þ¼þ­Ïd.ÿÿÿhÿ“—iþþ›÷,ý/û-þüÄÅú˜ùóÿáþ†ù˜üÄ,”®þM+ üÕú×þþÖ%úˆùýþ š¥üÒûèþ“m%ÌÿÛ•5þ–ýZÿ@?÷ÿý+ÿþ<þÔügÿâ=ˆüÔùnýÝï$ýGý@ÿlâþ6ÿhŠ9Jÿ…þ ÿ7í‹þàüþ/íÅSÿœûÆü1v GÞþ?ÿ3odÿÃd<ÿKþ–þíÿ¦ªÓÿ-ÿÁþµÿ*zÖÂúþþÇþ€=<a’ÿ+þ þ¿ÿ¢]¼>q§Ýÿÿ¨ÿ–s³ÿÀÿ« ‹pDAÿÿÝÿäÿDŸE Erÿ ÿ œYJÅÿ¦þÔþª‡²iÿ>þÿ‘3ãþÜüþä­?DþWý­þ|tªþ{ýwþ¯¨œÿ¥ý½ý„úõ»ÿ–ÿD4ÿ.ÿœ¡”ƒ´ÿ¼ÿ¶ùÊÿyÿÃ7Óÿ‡þ±ÿÜqÚÿÛÿXÿiÿEgÿÔÿ…Á$>ÿÿBeM€ÑÿQÿ^ÿ¶ÿ©Öÿÿ‰ÿ3ÿ·ÿ ¾ƒ…ŒÿµþÿÈ/y[ÿÑþ-ÿnÿG_gRÕþÿIð+Ë_ÿ†þ¸ÿmK† D¥þ±þ@B}šÿÿ0ÿY; ÿ9£Ñÿgœÿxÿþÿûÿ«ÿ‰ÿÐÿÿÎÿm{…ôÿwþ¥þÃò§ÿÕþáþéÿÂŽÃÿ7kèÿjÿÌÿõ¥øÿ ÿ‚ÿ¹ÿ/}rÒÿIÿGÿÝÿ~•@ÿÉÿOÜÿÏþlÿï3 wÿ¸ÿ‹ÿÕ ÿ=ÿ»›“Bÿ¯þ}ÿFâdaÿ9ÿZ½ÿ„ÿgŽÏÿåÿþÿ»ÿk&áÿéÿ\[ºÿVÿv_ã£ÿÂþÇþ!-¶½ÿ˜ÿ¥ÿ¶ÿˆ‹Îÿmÿ8ðŠÿ§ÿ²ÿ8Ÿ‡%ÏÿÛÿÝÿJTM¨¥wÿ·ÿPL—ÿˆÿœÿ,“ì™›ÿÂÿ7bÿiÿ#fñÿ»ÿR’ÿ¶ÿxHþÿÎÿÁÿms%íÿ–ÿãÿÓÿcëÿ¢ÿôÿàÿQ>@Êÿ"ãÿñÿv¿‘ÿŸÿíÿÑÿ .—›üÿ=ÿ‚ÿ(˜¨eÍÿ€ÿâÿº´Óÿ÷ÿÿÿêÿ$ 9lŒNñÿìÿ7ÀôYÅÿp· €ûÿZ¥EÃÿ2—6úÿf_mMÑÿ³žÙÿæÿõÿÿÿÖÿ&aDOUóÿQÿ|ÿsjL7öÿÂÿC†ÁÿÛÿÛÿúÿy¹oûÿ¥ÿçÿûÿt¨ JhU^3þÿt‡V!*ZýÿÉÿIa0ãÿÑÿ×ÿvJ&qüÿyÿÜÿ‡‰ÐÿùÿG¬»_"%íÿÊÿO²H9,X!¨ÿÿàÿ>4Õÿ¹ÿKFÈÿ…ÿ¾ÿJEíÿûÿ(ÿÿ9ðÿìÿWµMôÿÙÿ*Dx|s ÜÿÛÿ.hƒG_gróÿÛÿÏÿ>™Šÿìÿ÷ÿ(^!B]J7\Bäÿxÿ»ÿG±lêÿÊÿîÿ$+9,3'Üÿðÿ;îÿq5åÿ×ÿºÿœÿÁÿßÿ+¾ÿËÿùÿ8ñÿçÿëÿ‰ÿÿÇþìþ¡ÿ)+ãÿ©ÿ¥ÿãÿ]MRn%çÿÙÿîÿM¹ˆñÿ¨ÿÈÿíÿúÿC1 -?ZoV+a’€QRL1 Ïÿj±ÿØÿo‚Ôÿe’óÿ<6õÿ!LSîÿ¦ÿÕÿ?ôÿ†ÿ¢ÿÌÿ°ÿÁÿHQ ÷ÿòÿÞÿáÿéÿïÿÉÿÔÿ ºÿ¦ÿ3.ÇÿÚÿÿiÿóÿ*òÿýÿ+=nfèÿJÖÿÉÿ A#&0ñÿèÿ»ÿŸÿ%oÊÿ7ÿ¾ÿ%ÄÿØÿ@/åÿ'@üÿ÷ÿ=] ÄÿÖÿH+¸ÿÿÿ æÿµÿìÿÌÿÝÿÓÿÆÿrw4#áÿãÿóÿúÿþÿéÿÿÿC‰”0Öÿäÿ *2+ÚÿóÿL$ÁÿšDc}.LeSYJOv¥E÷ÿ.:ÎÿËÿ%j‡e#M *|ì.ãÿûÿßÿêÿÔÿéÿ94SR5òÿHXX ˜ÿÛÿfбÿ¤ÿñÿX_LA)ùÿ…ÿÉÿt¥òÿ‚ÿHxhFøÿÐÿ$ Umñÿ S‰„°ÿÆÿ3+þÿåÿ %/)Bgˆl-öÿ"aVHC11[‹Oýÿëÿ=˜5³ÿ¬˜ûÿ+Fˆ„`XA9>ZO@Yk~D Y}o+ÝÿG=ýÿ9-%s›KA6 ±ÿïÿEqÝÿ#›ŠJþÿúÿW¼ª]Tw0úÿ#þÿFL ßÿ?u ¹ÿøÿGˆ—4âÿHÖÇ%ûÿEuNT@Þÿ¾ÿ OQ"4fy(')-7@- #øÿFmhB1:LkF*-?<Q2þÿ‘QîÿÑÿ:0`R›ÿ‚ÿ!Ÿv!KD!ðÿ''KG$=ëÿ§ÿîÿbHúÿ [çÿÙÿ6u~.J[]T1 /c.=d:EWeýÿ5U2;[d‡w=2ADu</ìÿöÿ0/!ýÿ:øÿJËÿìÿÉÿÁÿ'TÂÿÔÿ òÿëÿUlêÿ¡ÿ Gëÿ‡ÿèÿwOÈÿÿÿ~LC}ˆÿ÷ÿXF(þÿèÿËÿ/<Od^SL3÷ÿ'QT+[€Añÿ=U)&)6vYÒÿ y§ÿáÿAgáÿ 7~,„ÿtÿ‹—Kk;èÿ3w]·ÿÙÿ%2+.:] 5Vl’yvw~Ýÿõÿi„‚^ñÿxKA:ßÿÑÿ8”–\>6”“M'Tj9åÿêÿ2{|R&>T{ŠLöÿ 3ˆ‚`+)pza!ïÿ9š}z$IoS,3ûÿÂÿvV"L~˼B,-ùÿ0|‚E7P.J?$L^HNlqZa ÖÿN‹hdïÿÙÿ‚ ÷ÿ<’¡B ;D >VHùÿv°gLU,{‰ cA¡OyVïÿ%{E&<*5’b2fNXP,/ObBòÿãÿ2" A& ^a*i–+fdE{–UYi_ŠØ¸EÂÿßÿYd#]j>+8Ih`%!4-%67åÿ J8 \EþÿzsJG¹ÿ·ÿÂÿËÿÌÿÆÿoÿÑþþýiýÈýKþ“þ¹þÿÿ[ÿ Ûtƒg.î+ëÿ¾ÿËÿ­ÿ"ÿÿnÿ®ÿ5âÐ$„[ÁÚä¾¼¾R‚6’¯PæÿnÿdÿœÿÇÿ U: <¦îC^XäÍÍ׉øÿÃÿæÿÑÿ›ÿrÿtÿ|ÿÆÿõÿÌÿíÿ0p{wDñÿ/`{g«ÿÑÿôÿ×ÿ¾ÿñÿøÿ‰ÿ€ÿüÿA0 "áÿ‡Ä²n'àÿÓÿüÿ ¹ÿmÿ†ÿËÿõÿ¸ÿ¤ÿuÿaÿÿëÿÕÿÙÿ1\2×ÿÔÿÉÿ ÿÿ¾ÿ èÿ…ÿpÿÃÿÑÿ£ÿÿÀÿµÿ`ÿŒÿ3¥»”MúÿMxjóÿöÿÿÿêÿéÿßÿÚÿžÿ<ÿIÿàÿz‘zu2åÿñÿ('!PkJ,.ýÿ G<#:00>^^Føÿ+Vn}Š\  çÿÇÿñÿÖÿ¶ÿ·ÿíÿ&Ëÿ˜ÿµÿ@¨’?IR"N‡“€—HüÿO×ãgèÿ+À~ì HAG^Ïìž? 8]c, &1#GyK4ÉÿÉÿùÿëÿÉÿÆÿÝÿéÿÓÿµÿÅÿßÿºÿbÿhÿ¬ÿçÿûÿÓÿžÿzÿÿÈÿêÿçÿ¼ÿ„ÿgÿtÿ³ÿ­ÿ}ÿKÿ>ÿ3ÿ(ÿKÿnÿ”ÿµÿÎÿ°ÿ‡ÿcÿ%ÿÿNÿšÿ–ÿhÿDÿQÿxÿ’ÿ£ÿ–ÿŸÿªÿŽÿƒÿžÿ·ÿ»ÿÉÿÈÿ„ÿDÿ@ÿOÿ{ÿ«ÿ½ÿ³ÿ„ÿbÿWÿeÿÿÍÿ Hhom_:5Ƴ_<oª¸¼Žt€¸Ô±žÆM~‰H÷þ,L;ëà+%Pt„š­ÄÞæäêêÞ®ŠÌöîÖÞÑáõ8d|}ŸÒñÈÛêÛïòÐÉÍÚ<‘¼±›¦°äïö÷6CNdX âÆÇĬ–Œ”ŽyuM@ZpCïëØc¹—žŠRðsðÿšÿ|ÿqÿ[ÿ2ÿÿüþÒþ¯þ€þ@þþ¦ý0ýÆüpü0üåû‘ûCû÷úú>úîùÀù°ù¢ù›ùrùHùþø¿ø“øOø0øøä÷½÷÷X÷D÷/÷%÷ ÷÷÷8÷?÷<÷>÷R÷_÷u÷u÷n÷t÷¦÷Ô÷ê÷ï÷øOø„ø‚ø‚øžøßø!ùcù¥ùâùúDú€ú¥úÉúû„ûÊûúû=ü™üýuý¸ýâýKþæþ0ÿeÿ…ÿæÿu‹¦ìA“ú~ÿzÔ.yòÞ.»•R u f ¡ R ç ý  @ ý þ Ñ &JÉgÑï¼´ïErclijŽÊ+‘Îÿ$#ɱáq ™  ³ i  Ä ˆ & ¼ % ´ g  ¡ÚáÚ²m% ÿZþÒý]ýÛüüû%ûWú³ùù3øt÷èöwöözõõ‡ôôxóÊò%ò¢ñHñýð¥ð;ðÆïhï(ïèîÖîäî#ïwïàïbðØð[ñÂñòfòòàòûò ó4óbó·ó+ô©ô<õÑõyö@÷øüøÌù€ú$û«û.ü§üFýÉý?þžþìþ<ÿ¨ÿñÿ>“ uºÑó=бÀÌø8%ôˈ8ßz!Þ·0ÂÿRÿûþËþ†þLþþÉýjýþüŠü#ü«ûû†ú úµùdù8ùûøÅøøPøøí÷Ë÷°÷©÷­÷¹÷²÷÷z÷t÷r÷Š÷«÷ð÷HøËø@ù£ùÿù^úáúdûüÍüŸýbþÿÇÿXÆA»9™ÜÖݪJ>Š ç î ¯   @—_žÃ溯ðlçp@¦‡9ÁÙ•3×)â-ŠP†ÿdÐs^mc¤ß   ¤ F ÍÓ(³þ)ý§ûeúvù­ø·÷˜öhõuô¶óóòñSððï£ï"ï|îºí$íì´ë±ê¢éÛè\èéç‚ç@ç=ç€çøçhèéÜéêêÙë¦ì5íðí“î!ïcï}ï’ïÆïðuðñµñ¬ò»óØôög÷Øø;ú€ûœü©ý·þÊÿ©Lÿ½€1œùQ—éGÑ]ùpÞH ˜ Ü  o ¾ @ z ‡ F ¶ ß Îž{~Ã1Ö…[V)Ã>´Gî’}ÿ¤þýTüòú†ù.ø÷öuõõíôöôÅôRô¤ó&óûòìòÐò¯ò¿ò ó3óózòüñ…ñ ñ›ðcð‰ðùðgñÜñZòó¼ósô:õMö”÷ùÒúüÒý‚þ»þßþ<ÿ”ÿŸÿºÿDRš¼ k¾ J ñ ÏñûxŒ„oìé»×R掾nóÖ B !!ã!6" "V!{ 3_ušOÂyŠ^C×gíÖu×­K š © nÝW°ÿý¨ú†øåö‹õ„ô×ó;óµò@ò ò­ñôððïÂî±íÍì©ëfê1éèç°å^äbãŽâéácáaáÎá‘âqã4äåê娿·çeèéÏélêë¥ë$ìaìjìpìqì›ìíÑíïðiòcôiöbøHúü~ýÆþÛÿıu a½¼Ô F-› c k J é GC5.1 ž / è — ð þ Ö ×Ø —f‚›•¬Ò×bzn˜µ«oÿ•ýëû!úŠøF÷7ö[õºôˆôõ§õøõÚõõ"õ›ôÕóóTòµñóð>ð|ïåîAîsí¬ì@ìfìíÐíÉîãï ñ òºòSóîóyôõ±õ~öI÷øöøŸù÷ùñùÒù7ú?ûƒüæýQÿý!1üf¬ ¦ 7É*TjÐñ©‘p=5»´[6³’ À!¼"F#‘#&$‰$Ä$¬$õ#"# "û ½ y/…uoÝ¿ö¹ ­Urç u ÁèŽÿŠý\û#ù÷ëõeõõûôÿôäôíô™ô¾óëñˆïíÏê¢èšæÓä„ã“âúáVázàÝßœßÉßàgàdáÖâPäZå¹åååùåüå¬åFå:åå æŠæ!çÇçXèûèÂé²êõë°íóïhòÉôêö×øxúâûÎü%ýXýšýAþßþ[ÿËÿ^+ ÷ fè™  x µ¤úÛ„7èP ø Ä É º § Í R â '8Ù X > õ í & z¹ð8¼­lC08ÿ„þïý<ýšüêû û1úHù(ø÷CöÙõjõÊô"ôdó±ò®ñ^ðïqî6îúíðíîfîâîûî±îlîBîNî]îOîpî¿î+ï­ïáïúïWðßð´ñ±ò¼óôôö2ø¡ù_úÆúmûü üùütý“þL H‹¸, @ # Z •¹Ã/÷v$/÷Ñ:ÛáP A Û à!¡"$##n# $¢%ç%W%‘$¶#Û"n!LL¤žÓ‚}a÷°ŽÖ?Ã}áîE Å 4#‡þnüqú—ø÷öùõöÝõ|õõ‹ôÜóò†ï¥ì-ê4èHæˆäûâñá]áØà:àpßëÞÂÞÉÞ$ߛߘàÑáñâ ã˜ã…ãã„ãVããÿâkã'äçäŽåæ¶æ„ç‘èÒéyë‘íð´òõ÷£øôùËúDûJûUûšûüÄü‹ý‘þ¶ÿ }÷È®œ b ý neÏΟ<Íj29OK`Ÿ"•ý_¢ùå‹óôŒØ  ] ÑÐd œÉEÖ*qÃÿ§þ=ýµûú\ø¨öõŠó{òÚñDñÜð™ð¸ðäðÕð|ððâïÆï¬ïOïÎîî{íßì#ì-ë]êõéüégêëêëŽìÞí%ïðãðåñÿò&ô#õÑõSöÝö[÷º÷Î÷¿÷ä÷hø‹ùûUüÊý·ÿX®d¯Ö^ ü ó ° ‰ÀœÙ[$]²³ÈžyyS !¹!,"¸"C# $°$H%•%]%V%1%Õ$5$Q#{"!E v:ÝFÇo46êÕp¸§ç¡ 2 ¡P9ì'ÿ…ý×ûMúìø*øÄ÷Õ÷ù÷Ê÷àöBõ%ó†ð–í8êçƒäòââhá%áúàÐàà³ßß³ÞÖÞHß­ßrà=áøá/â¾á0ánàøßß–ßàáýáôâä<åHæfç¯èNê<ìjî²ðó!õöd÷Ê÷øøô÷:øÝøúbûæü„þIZP%èÍ Å j ›6z~`¹ Ÿ ²‰Š|(‰Ñ$c‘¡´«N”Vü— _ Ø Åó0+f"$ŸIMB·‰Ìõþîü´ú;øöô¶òÆñýðbð6ðað½ðýðñ ññBñùðÿï¤îFíì¡ê/éènç`ç«çè±èwébê4ëìÃìŽí„î}ï ððÊðañ×ñò3òsò<ó2ôõö'÷{øÎùû\üÌýrÿ=ã¨3 ï † e Ê Y ðyþÖç¿>¥:ß2 ¶ T!¨!î!¶!B!!!§!"¾#ø$&'ñ'm(H(‚'a&È$ú"Ú ]tå~”¼=7]¬ö Ê üfýÿïýÜûÆùò÷šö°õóôTôåóeó«ò}ñÄïÂíëèZå;ãõáîàVàÇßjßéÞÞ7ÝHÜÐÛ‰Û§ÛiÜ…ÝûÞà«àâà¶àzà.àâßÙßà°àVáaâã¹ä»å®æÿç·é×ë@îÏð`óšõL÷UøùøKùYùgùŽùQúwûý³þZÄŸŒa * Å bÊøš»‹ } ÷fú­s¡ê$7=E@z¬·:1îw º  ËÓôš#»Oì9é%ÿ9ýû­øö¶óûñµðÇï)ïêîåîúîëîëîìîïåî~îðí*í+ìýê±éZèç=æÅåÝåNæéæžçaè7é-êëÃëgì&íþí¸îhïð°ðñ[ñÌñ^òóçóÜôLöÎ÷Gù€úÁû2ý­þ#‡ÑpPO % Î x @ û “ h‚ø´iè ÌºË n! ">"‚"à"#F#B##+$÷$"&]'0( ():)ÿ(ø'X&¶$á"ž ³!NI/iÅŽ()–‡@ U¥ ŽXþEüúÒ÷ªõïóÃò#òòýñÕñHñðjî9ì‡ésæaã á²ßÜÞ\ÞúÝ™ÝÝrÜ¢ÛÈÚ?ÚlÚÛ ÜAÝÌÞZà1á<á¸ààrßß ßŽß‘àÖá6ã¤äæFçbèšéEëtíð›ò9õ’÷mùƒúûú"û2ûZû•û1üsý.ÿ,±> ° q `{{9¿»9°á&Öа†>²Ûµy9åjÐY¿áYƒÒ h  ª õB±ý÷ðCƒ‘vÿ‹þÓýý¶ûðùõ÷ûõôáñ¨ï îíWììâëùëìÓëŒëFëõê‰êÿé_éÜè8èUçdæ•ååäPäääÏä¿åêæ<èvé{ê:ëòëŸìíxíçí€îIïðÊðoñfòoónô‚õêö—øWúüÈý.ÿcUKXnnrµ4 š Ö Avwe‘:Ëø=´\Úá¦WI A!"" ##¸#$!$$’$S%&Ÿ&X'((ÿ(u)a)ò((ú&Ï%$_" 8ź«ªIáùpJ~Jo¸ 1 òý›ú»øïöûôèòñÂïïáîïðîœîÜíoìcêçäáßÝ…Û¬ÚpÚ£Ú¡ÚXÚÎÙEÙ(Ù•Ù8ÚÛBÜÊÝ`ß~àëà±à?à¿ßRßßßzàëáoãþäzæèÇé†ëMíhïÕñ|ô5÷­ùšûæüƒýÉýîýøý+þ¯þÂÿW7+`© à £ YÞi“^ÔðV¶@ôïaç~£[‚w-¸ðóÇgÆŒ8  â ¯ ¢¸ÛÕ~󭢆ÿUþþüÜû´úUù¤÷Óõ?ôÇò6ñ¯ïXî8í:ìsë êËéé‘èGèôçpççÎæ°æræÂåå~ä!äÀã\ã"ã[ãäÂäpå æáæÏç»èŒé/êÎê“ë‘ìoíÿí‘îDï,ð7ñòýòHôòõ³÷BùÍúbü÷ýlÿªªŽƒY?5Rœ þ W Œ Ô#½ê !OzpY¾ìñ¬F !"ø"…#Ì#ó#<$^$Z$\$ä$§%7&×&`'Î'6((;'<& %Þ#a" t‘R/Þ³²Ôôî’`cÕÌÊ d…þæûQù÷6õ ôŸòñ,ï íÌìzìkìLììGëêLèÏåÛâàßFÝ,ÛµÙ!ÙÙ¬ÙYÚÅÚÔÚ‹Ú®ÚÛ¹ÛŽÜhݤÞ+à©á{âoâ)âÌá–á€á¾á¦â äæúçîéãëõíÿïòñßóÞõøƒúÏü¿þýÿÃZ£çgIÓÞÿJ “ ÑØ…àýõw‘eý| £G‡'êlÊöë™p¹Î• ]µ%j ÃkeµMšú)¿ÿóý÷ûú>øLö-ô)ò¦ðGïî™ì<ëtê,êþé£é#é¹èšè—èèëæ¨åÄä,äQãTâ¶ááÁáâüáJâ ãòãÑäåXæ_ç–è¤éWêÔê,ë§ëì~ì÷ìmíJî{ïÅðò=óªô_öø§ù1ûÉüƒþae>Èo ¢_HG n ” ë n¼+‰ÎÂoØ.ˆšö¹”Šê©E ÿ ²!¹" $ë$"%(%Ë$t$o$O$ˆ#p"]"#v#F##ç"K"É!v õ«°GÈݲ@úíIÿ/Ð • ä $K1]ÿÉü3úø¯õËóëñðîíøë ëÓê¿ê/ê±éééçïå¦ãráIßÝ,ÜRÛùÚ*ÛÌÛÜGÜHÜ"Ü#ÜlÜÝÝÝãÞ'àáÆâ´ãKäyä¶ä'åžå`æ˜çõè€êHì$îÔïzñôò…ôSöføªúÙü5ÿWïýÐcÉHÞ· ® c Þ­3•ÏÄ¡pF4Ö}Ï(°¦ð =d]÷aŸÞç˜CÐ & s ¤êO»J+GgÿþºýèüüûÊù øöôÿñÖïúí0ì—êké’èèççÔæ¶æ¬æ²æŸæ}æUææ2å^ä©ãáâ.â†á%áRáÒáÛâÚãÔäæ:ç;èééé½ê´ëÈì’í+îØî‘ï<ðÃðWñþñódôÜõ:÷«ø3ú´û0ýœþýÿ@ ú óç´\ § ì q 2 ø µ ¦ à@’è4“ÄgèXµ¢‰ØeëÕ /g» –!="‡"s"Û"ß";"]!u V ¾ Þ y ,  §!a"" ! 'jøËb—ë¨Ër ä š Ãè Ê Q ÞäìýûYùÒö&ôOò ñ³ïîìáê¦ê%ëžëuëëRêxéÇçåäá-ßÃÝÛÜ/ÜíÛ'ÜÝðÝOÞÞWÝ&ݬÝsÞX߃à÷áÎãŸå¶æçòæ ç‡çççkèIéÉêÂì“îîïñ‘ò@ô(öø úfüÿç6£“%‡ÂØïw³ @ è fÊgÜ ûûïªë½>¡ì5q¿T@Nhgbdw²ÜD#ÜW Ò Z ÃÝîqðÿlþ ýÝûóú6úaùtø´÷$÷YöHõÔó¼ñqï^íë¬éÊç æ åÊäØäèä©ä±äåZå†å¬åÏåÌå®å7å{äæãdãÚâeââdâ*ã[äæçØè êQë¡ìÉí{î)ïð"ñòŸò&óëóÍôŠõ%öàöó÷cùÚú,ühýµþoÖ(E]„…i  Ÿ í 5 n ¡ Ú U Ñ s B{Ì4Ñ^Ô&@ Îú|åÌÖ¾±aÔš™ÜÿŒ É Ä ˆ Z - ²…e?hC Íç—åW[C©Dß Ð Ð X æ A M b œ‘Éý7ûùX÷mõºó…òñ}ïÂí/ìë»êÛêëLëTë¡ê÷èŒæÚã?áãÞAÝkÜ1ܘÜݘޖß÷ßÕ߃ßZßÍßžà·áã=äŽåÍæçèèè;èîèAêèë¾í´ï‹ñ(óvôÙõ<÷³øgúEügþÆ-"ŸUÇ ” ) î ô ) ›÷W¼QDí¥D!²þ0sÆ+¥8þñ½o qÃìíÄ` Þ R ¶)~ÙC¹7ÿ®ýü¢úPù>ø.÷Götõ³ôôSóbòñ>ï=íKë†éñçæOå`äèãÝãÏã¯ã’ã¸ãÿãtäÜä3å¢åæ0æ½åHåÓäiä"ääAäàäæ›çöèiêÛëí\î”ï©ð›ñÃò ôõ´õCöËöu÷ø¡ø0ùúfûØü6þÿ®à".:Vi? ¸ * ‡ ª ¢ ¸ * £  ¥ S'×¢‡k®F­Í×ˬ"|[¶©héåŒÅ hßÓå hñš’Ò$6mKvè6 ýF”@…»V k S ¾ † _ 1 ‰ gUAþüûù;ø˜öõ\ó!ñ“îuìPëØêcêIê[ê’êlêtéªç€å—ã•áÊßQÞ¤Ý Þ ß%à¹à à€à…à¢àÆàÏàáÖá^ãüäkævçRèàèeéêÂêÛë…íoïñ–òôõÊöÉ÷‚ø^ùªúÃüDÿ¥áíÒr † K Ü j  œ O".Yl$É•¥žvTŠÑ·6išè!j°=Ý‚ö8“éÄ ` ' ñ¥.¯Sã[ÙþWý®ûèù øSöõôìòÞñüð\ð³ïõîöí ì:ëúéµèçžå‡ä¸ããŒâ âÏáâ„âãjãäÊä’å7æ„æ_æCæHæ5æáåÅå3æòæñçýè)ê´ëiíýî7ðpñÁòôõ&öüö¼÷~ø1ùÞù˜úQûüóüþý ÿKVZ8+ ðÃo " Ø u ë = j p k ƒ ³ É ½ ñ J Ô ƒÀ¢\&ÖC(鳊GnrPù™!Ä¿0B©ãNî«ï\¹rÂøäÂ1ï(€ÑnÒX¬ þ m › o Š  » |7V`–ýHûÎù_ø÷ö²ôèò¥ðwî£ì7ë>êËé&ê™êêêÍèýæÒäUâà2ÞHÝpÝAÞ‡ßáàóáMâ;ââáLááôà„á¤âêã«åPçºè¾é êêñêÕë>íæî¹ð™ò‰ôZö¿÷ñøºù’ú¢ûýñþŒW) [ P e ´ ü ‡gn‹™šZç~$½>›ÚËjþ<J æ \ÔAÒZÂ Ú |  }È|!ˆÈþýOûŒù­÷ìõ[ô-ó0ò>ñ`ðªïïFîIíìŽê#é÷çÝæÈå¤ä­ãÞâgââ¶áJá-á‡á(âýâÍãšäwå@æŠæ‰æ´æåæç ç-çÈçÓèûéë$ìOíŸîÞïAñ¤òûó\õ§öã÷ñøçù°úrû+üÇüfý þÿ%#úÅ©Žl+åŇN  Þ „ ò B ~ ” © ¶ Ç â ä Ê ¹ É  J š ö |N6Òg“b$Ë` Ê”•1'%\ÁXÃ#PEŠ8šsVÃ4™ÈK[7¬%N¢r š˜ó[5~ ò I C  Ñ 8 f†ÍBÿ3ý¦û úŸø÷ìõDôòï1ísëê,éÔèÏè5ééè–ç¬å ã·á:àûÞ3ÞpÞ(ß(à!áÀá âþá&âøá¶áâ¼â¥ã¯äôå5ç>èVéMê0ëbìÏílï?ñ.óõ˜öøù‹ú]û9üRý¯þS: 7  L/ç ;ÆQÚOÁOÏOö­3ˆØ®$b{‘—£¾â(Z¡ª Ì ç ¿ u ®@»7ŸöþQýÄû$úøÙöWõæóµò ñyðmïŽî¶í©ì‡ëJêñèÆç¢æŽå“äÖãRãæâ—â=âäáátáƒá¸á8âÒâ ã—ähåóåŒæ,ç¢çâçè‹èbéFêëçëíì1îaï‰ð§ñäò@ô¤õóö*ø\ù“úû{ü8ý×ýþRÿÌ‚K7ì¦UÉyúq  –  < n ¶ ö     & -    p ¥ Í ñ  1ÎH›žtª ‹ ˜ 4²«¸€8XXZ†ÓTöñÄxë~°€Òˆ<ò<‘-k…Ju®"GX @ 9 à † $ SÀÊhÿXýûÿøøÎ÷[÷Ñõ¾óYñÖîì€êYéÜè¯èÐèîè éqèÚæâä¬â‰àiÞݽÜGÝQÞ%ß¿ß?à¡à áá á,á”áÏâqäöå:ç9èNé3êèêrë<ì—í2ï·ðTò#ôiö…ø$ú;ûWü¿ýNÿ¼g1ü¹ ; Ÿ Ñ ÊÈ Jò¤fðN›#í¨N¬ m¿Ì‚öR­Ùé0'ïÀª ª ® ˜ | bQ5ÿx©Áÿëý üþùøgöþô©ó`ò%ñ6ðoï’îAí¸ëjêFéè´æ†åžäãã?ã˜âÿá—áPááðàáiáúáâ:ã§ãäsäâä?å‘åÛå^æ)ç#è-é1êLëbì}í¢î¹ïØðîñ óSôhõŽöÊ÷ýø#úûüýþÿÿÿãȘX×—@á~³I é Œ ð O ª  E R L G i † … “ ¨ » ¿ Ç ê  p ¾ ú -B7/ER5)gºaâó+H;'™‹¼Aš¡‘þ쉢Köz . ÉÞ#*á'(¨Cý– ª Q a y  \ #¦2¤ý©ûSúHù9øúöoõ‹óLñìîÀì ë·éýè»èÐèÁè¢èèôæ{å ä†âáØßMß:ßoߣßÊß÷ßUà•àŸà±àáÒá«â§ãÁäñåGçè°é±êâë<í‡î¾ïñ[òÐó;õ³ö øhùâú[üÔý]ÿÔUáx˜+ ¾ - “×ϧ7–ÓxÚfý£)®%Ñ…BçŽ%³:‰§©•Z#ô ´ … n"Ã`Ð8ÿhýÕûoúù¹÷­öËõÝôºóWòðð¢ï6î·ìëÙé´è­ç§æªåÛä4ä¢ãã³ââ“âËâã]ãÌã%äsää´äÎäå>å†åö呿Fç èìèÛéÜêçëóìîï$ð?ñ>ò[ó„ô¹õáöþ÷ù2úPûIü7ý(þ!ÿûêÁ“e3耻eù ! Ä C § û H ” È õ  ' 9 N c q i u ’ ¨ ¹ ½ á '=iY5U¢ÔÕáT q”ýñÝQªC¿uë²4‹Û[Á•KÅ>zõ™vì @»å]ÿ+•~ 0 ÿ ê i v 0 ¬xÝ2zÿIþýšû÷ùaø¤ö4õ¶ó@ò0ñŒð,ðqï®îøíBílìëåéÑèèSç‘æ'æ×å•å\åûäÅääTä.ä(äeä­ä åzåæïæ¯çfè(éê1ë*ìíàíÿî ð ñéñßòô+õFöb÷øµù û;üjýþëÿW³ýK³¾± ~ 3 ó ¬ o Í~2¹"e£ÀÛâççóòçÆ1Ñ[Ü=¯n ¬ Ø ç ä פKÿй“vŠÿ²þÈý¼ü¥û¥ú§ù§ø{÷Yö@õKô[óMò>ñ\ðƒï¾îðíKí»ìVìêë’ëVë8ëëëãêÚêÛêðêë2ëië¬ëýë}ì í²í`îïÏï¥ð{ñ-òÞò¥ó[ôõÀõˆöS÷6øùÆù{ú<ûúûžüGýêýŒþ&ÿ·ÿI¿U¼k½ Wš³é3\_NQb[@&â¹·½¡›®»ÎÞòûÿñò>jŒ¼öO¡ÝW°Xªû^· s î { ð f é — « BÌ7‰ó>typ_SI.ëÖ³ˆk]T=&*86Ä|*Í [ æ n ó e Ç F ¼ 2d¥Ðø&`‹±ê;ÿiþ~ý˜ü¥ûÊúöù/ùdø›÷Ûö8ö—õõ}ôüójóó§òOòòÄñŒñ_ñ2ññÿðýð÷ðïðìðøðñ/ñZñ|ñ»ñûñ[ò¹ò+ó§óEôÎôiõöÑöž÷QøùÜù®úlûüÕülýóýcþÐþ2ÿ‡ÿßÿn¸NžÜ!\–Áî"Ee”­ÌãèѹŽW(ì²s8õ³g)ã¢f0åÿÑÿ ÿ†ÿhÿSÿ2ÿ ÿæþ¸þŽþZþ"þëýÄý¤ýý_ýDýýýýïüéüÅü®üžü—üƒü|üfü\ü=ü(üüáûÄûªûŽûyûZûOûIû;û)ûû ûþúïúÝúÎú½ú¦ú¡ú‰ú„úxútú€ú}ú€ú…ú‰ú‰ú…ú†ú‰ú—úœú®ú³úÃúÏúÞúãúýú û$û&û<ûOûqûûŸûºûÉûèûüüü3üBü_üzü—ü¶üéüý%ýCý[ýtýý£ý¼ýÝýþ(þNþoþžþÅþÿ$ÿSÿ}ÿ®ÿáÿZ—Ü&j´ ]Ã|×5‘ø\º(–úpÒ@¬ m Ó  } Ì  m º  K Ó  O  ® Û ÿ *AYbrlhSC#Ò § | L  Ï : ê ˆ ' ´ G Í V ÓRÒIº3—“~ôzþ¯Nåÿ†ÿ(ÿÅþtþþÜýŽýNý ý×üšüZü'üéû²ûûAûûÚú±ú…úiúDúúòùÒù»ù›ù‰ùqùcùRùIù<ù@ù.ù2ù'ùùùùòøîøæøßøßøâøéøàøàøÜøÝøÞøØøßøéøêøêøðøûøùù3ù:ù;ùMùUùjùxù’ù§ù½ùÎùñùú$ú?úbú‰ú¤úÂúÝú û ûBûdûûû¼ûÔû÷û ü&üBüaü„üŸüÎüùüý2ýOýqý’ý¬ýÉýãý þþ6þFþ\þpþ…þ•þ£þ¯þÅþÍþÞþàþîþüþÿÿÿ"ÿ,ÿ5ÿ4ÿ;ÿ>ÿ=ÿEÿEÿLÿFÿIÿPÿNÿQÿQÿVÿQÿHÿAÿ>ÿ5ÿ-ÿ/ÿÿÿ ÿ ÿÿ ÿÿÿþÿþðþìþÚþÜþÏþÈþ·þ®þ£þþþŠþŠþ‹þ‰þþ|þ}þ|þ{þþþŒþ”þ”þ¦þ­þ·þËþØþðþÿÿEÿTÿwÿ“ÿ­ÿÆÿçÿ&ItÃíMƒ¸ó'h£ÞS‹ÎUžæ)sºCŽÅ 6t¬äOw¡Çù F [ | — ­ ½ Ð Ê × Ë Ë ¿ · £ ‘ t Z @  ò‘UÕ•F®dÁiÍs5æŸR¿‚0ò¨f'çŸc!åÿ­ÿtÿ>ÿÿÏþþbþ$þïý½ý†ýTý'ýõüÐüüsüCüüòûÌûªû‹ûjûUû:û&ûûÿúðúáúÌúÀú¦ú–ú„ú|úlú]úRúIúBú;ú8ú)ú(úúúúúûùùùøùúÿùîùòùïù÷ùúúú)ú;úMú`úvúú¡ú¼úÏúêúÿúû<û_ûyûªûÔûýûüIüdü€üªüÄüöüý7ýYý‡ýªýÕýþ+þRþþ¢þËþñþÿ3ÿRÿrÿ‰ÿ¤ÿÄÿÔÿèÿòÿ*8FS]hk{|zqzmnfhie_^][\MPD>3$ üÿëÿßÿÃÿ¾ÿ¨ÿ•ÿŠÿzÿhÿYÿHÿ9ÿ%ÿÿÿåþÞþÄþºþ¢þ’þ‡þtþpþaþSþKþ;þ9þ1þ)þþþþþ þþþøýþ÷ýþþþþ(þ<þLþOþgþ~þ”þ—þµþÅþåþûþÿ4ÿTÿvÿžÿÇÿèÿDs«×ü+VŒ»ð*bÇû2d Õ7rŸÏþ%Pw£Ëî7\˜¾Ïçõ()148.)"ùØÔ±“iDð¶‰Pæ®|HÜ«s@Óm1þÈ•a1þÓ™q@ðÿÁÿ£ÿrÿGÿÿôþËþ¤þ{þTþ/þþíýÅý²ýý|ýjýYý<ý*ýýÿüõüàüËüµüŸüüyücüRü<ü/üü üýûìûßûÈûÀû±û¬û›ûŒû€ûqûnûiû`ûYûPûGûHûKûMûNûWûbûwû€û‰û—û­ûÍûÆû×ûÚûñûýûü-ü?üUülü…ü¢üÀü×üôüý)ýCýaý~ý”ý­ýÏýéý þ!þDþbþ†þ¥þÊþäþÿÿ8ÿSÿeÿ†ÿ¤ÿ¸ÿÆÿãÿöÿûÿ"/:HOWYlerrt}z~w{s}uxxii^XS>=0 òÿéÿÙÿÍÿÀÿ¹ÿ¦ÿ–ÿ†ÿ…ÿkÿ[ÿ8ÿ5ÿ ÿÿÿÿþöþçþÜþÛþÊþÎþ¾þ²þ¨þ¢þ–þþ…þþ‡þ{þþxþþtþxþnþtþqþ{þ|þþˆþˆþšþ¡þ­þ²þºþÑþÝþñþÿÿ(ÿ@ÿXÿtÿ”ÿ¨ÿÈÿéÿ)@e|£¸Ýù?Z§Èð5f¦Èæ"B[†˜°Æèø%>WnŠž¢®²¼º½¸¶»¯¯£¥›–…|ynNG2è˰–_H1ûÙÁŸ‹lN3÷Òº–|[>çØ»˜{`D+ üÿÖÿºÿžÿ„ÿ_ÿHÿ3ÿÿÿüþÕþÂþ£þþoþ`þAþ/þþþíýÝýÒýÆý«ý—ý“ýýuýcýYýBý@ý0ý'ýýýýýýüñüéüïüéüëüèüìüéüôü÷üúüúüý ýýý!ý&ý3ý:ýJýOýeýlý„ýý§ý²ýÀýØýãýøýþþ'þ2þBþRþhþzþ†þþ©þ¿þÔþÝþóþýþÿÿ4ÿ:ÿEÿKÿ`ÿhÿsÿ}ÿˆÿ•ÿ¡ÿ«ÿ±ÿ·ÿ¼ÿÅÿÆÿÉÿÐÿÍÿËÿËÿÕÿÔÿÔÿÔÿÚÿäÿêÿáÿÛÿàÿáÿÛÿâÿÛÿÔÿÔÿÓÿÈÿÊÿÁÿ¿ÿ¾ÿµÿ¿ÿÄÿ¿ÿÉÿ»ÿ¯ÿªÿ ÿžÿ™ÿ“ÿ—ÿÿŠÿ‰ÿ„ÿ‚ÿƒÿxÿ~ÿsÿvÿoÿnÿgÿfÿbÿeÿ^ÿbÿ[ÿZÿ[ÿTÿWÿVÿTÿRÿ[ÿ\ÿVÿaÿaÿ_ÿfÿkÿlÿnÿnÿwÿ~ÿˆÿÿ›ÿ¢ÿ­ÿ°ÿ·ÿÉÿÊÿÚÿðÿïÿûÿ#(<HS_r•¤ª¿Íßëû*9Ocr€•¢¯ÁÕêöþ)0BBPW`_hkoyx~}~|{zzqmh]ZMA7/' óòèØÄ¹¥‘Š€oVH8& þìßÐÄ´µ«kTJ2.ûÿèÿØÿÈÿ¹ÿ¹ÿ£ÿŒÿ{ÿiÿUÿMÿ=ÿ4ÿÿÿ ÿüþôþéþÛþÈþ¿þ°þ¥þœþ“þ‹þ‡þþ{þqþmþ`þ\þZþ\þRþGþDþBþ6þ6þ/þ-þ)þ*þ&þ*þ'þ,þ,þ)þ1þ2þ1þ-þ5þ/þ1þ2þ6þ3þAþ@þAþGþEþJþKþVþXþaþ^þlþiþoþrþpþvþ|þ{þ…þ‹þ˜þ¡þ¡þ©þ¦þ²þ³þÃþÉþÈþÑþâþêþêþìþðþøþþþÿ ÿÿÿ%ÿ2ÿAÿHÿVÿ`ÿiÿtÿ‡ÿÿ›ÿžÿ£ÿ²ÿ³ÿÀÿÓÿÔÿØÿáÿæÿóÿøÿ#.4>@GQX^^ehmrtu~€‹ŠŒ•””•’˜˜œ˜§¡¤¥¨«­¯³¸·¿½ÃÆÇÐÖÓÙÔÝãäåîíõñúýÿþ $ &)+/05;:<GMRJTNRLSQPHAJHE><85610..))- ýóíéâÜÖÌÆÁ¹¯ª¤¡•Ž…~yxrdSPB<3)øÿîÿçÿÛÿÒÿÊÿ¿ÿ³ÿ ÿ•ÿˆÿ|ÿrÿaÿZÿKÿCÿJÿ1ÿ&ÿÿÿûþòþëþÕþÐþÊþÁþ¼þ²þ¢þœþþ…þ€þwþqþjþcþ[þ\þUþJþFþ=þ9þ3þ-þ!þ!þþþþ þþ þ þþ þþ þþþþþþþþþþ þ#þ&þ)þ4þ3þ?þ=þLþMþTþ_þbþlþtþþ€þ‹þŒþ›þ¢þ«þ»þ½þÀþÒþÛþèþóþÿþ ÿ ÿÿ0ÿ8ÿAÿQÿZÿiÿqÿƒÿÿœÿ©ÿ¶ÿ½ÿÈÿÙÿÝÿîÿôÿ$.36?JPYaevx‰‘”§­·¶¶¸¼ÈÇÐààäßâáßêâñðöíòòíïêñüðîîïêîéîçéîæêèëóììåãåâÛäÛÞÙÙÖÙÒÚÓÚÒàØÚáìÝÝÕÖÐÓÊÑÌÞÞÔÊÍÊÅÅÈÁÄÂÊÁ¸¹½³¬­­¬«®©º®²²ª¢ ›¢Ÿ˜¡£‘‡„‚x~mli^\RMJ?>/5,'óÿðÿæÿâÿÒÿÔÿÄÿ¿ÿºÿ±ÿ¬ÿœÿÿÿ†ÿ€ÿsÿnÿaÿ_ÿVÿMÿBÿ@ÿ:ÿ5ÿ,ÿ$ÿÿÿÿ ÿÿÿÿñþóþåþéþßþ×þÕþÏþÍþÊþÈþÅþÇþÀþÁþÅþËþ¸þ¼þ®þ³þ¶þ´þ°þ­þ¸þµþÀþ¾þÁþÃþÂþÃþÌþÌþÊþÐþÑþÖþÜþáþãþíþðþÿÿ ÿÿ ÿ$ÿ3ÿ.ÿ4ÿ:ÿ:ÿFÿIÿXÿXÿfÿhÿrÿzÿ‚ÿÿÿ™ÿ¡ÿ«ÿ³ÿºÿ¿ÿËÿÍÿßÿáÿëÿïÿ !%(23>DJTSdmsvx|‚‰Œ“˜šž“ ¥¤¢¬±­ªª¯ª±®«´¨²¦«¨­¬¦ª¡­®¢£š¢™››’—‘„‡‡Š…}tuytkkcec_\XWQSKKJTLMCG2çÿåÿ ÿÿäÿðÿäÿæÿÚÿÓÿÚÿËÿËÿÛÿâÿñÿòÿ úÿùÿñÿòÿäÿñÿûÿ÷ÿøÿîÿîÿäÿæÿçÿïÿ÷ÿøÿúÿ  þÿôÿïÿéÿéÿÏÿ«ÿ…ÿvÿvÿ‰ÿ‡ÿŠÿŸÿœÿ²ÿÄÿÇÿ¼ÿ´ÿ«ÿµÿ½ÿ¿ÿ°ÿ«ÿ¡ÿ“ÿƒÿoÿ]ÿUÿQÿSÿUÿ`ÿ]ÿPÿPÿcÿvÿoÿhÿvÿxÿyÿxÿ}ÿsÿ{ÿvÿuÿoÿ[ÿMÿQÿNÿ@ÿOÿAÿ&ÿÿÿ%ÿ+ÿ:ÿ3ÿ$ÿ ÿÿ÷þêþÅþœþpþKþ#þþþþÁý¢ýý ý«ýÂýÐýÄýÓýºýžýwýKý=ýýÐüÄüÞüý1ýjýQýýþüý-ý9ýhýýµýÒýàýãýïýÙýÎýÝýôýþþþ1þ„þÕþþþ+ÿLÿIÿBÿ:ÿ<ÿ6ÿÿèþœþQþ þìýþ7þ;þ4þJþBþoþ~þmþþÍþãþÎþÁþûþ-ÿ(ÿ÷þÓþÍþâþìþüþÿ!ÿûþØþÝþÏþ¨þ~þˆþÁþÿÿ ÿ ÿ)ÿÿ ÿJÿQÿ5ÿ)ÿÿÛþÞþæþ,ÿ{ÿ¬ÿ¡ÿfÿPÿ*ÿÿúþIÿ‘ÿ¬ÿ£ÿ¤ÿ¢ÿ¢ÿ©ÿÃÿÅÿ½ÿ·ÿ¦ÿ£ÿ³ÿËÿÍÿÎÿìÿ -cŸá;øD}¨«ÀÂÀ°l\SWB'&=gƒ¬õ2‚Á7KXYpˆ€S糘€pDùæÉ ’˜˜ˆƒ}yfO4 ëÏ©–žEð¾ƒ^0óÿ°ÿ‰ÿXÿ,ÿôþÐþ¨þxþ>þþÍýýpýCý&ý%ý ýìü¼ü§üuüRü7üüúûÛû¹û›ûûtûQûûîúÉúµú’ú`ú:úúÿùõùøùæù½ùªù±ùÈùúú,ú2úLú}ú¨ú¸ú£ú¢ú°úÆúÙúÒúÒúÆúÛúçúû6ûHûPûkûû×ûüJüYüyü“üÅüÞüåüý6ý]ýrýµýñýçýæýþPþ~þ—þºþÒþèþ ÿDÿ{ÿ©ÿÓÿðÿ%eÁûE£Îùk’Õ_ŸÀô3X„À U© yÁù&]¶ñX®þL ž ó ? € ¬ í . w ½ ð ) \ ¥ ­ º Î â â Ð § \ ,  ô Ç © ˜ u * ç ¾ w  ‘ 5 úÊ¡f¾WÇ@o¡Ð+§B䇯ÿ3ÿÉþ*þ’ý ý¹üˆüPüüàû£û^û û”úú¢ùLùù½øªø»øÅø²øªø›ø‡ømø:øøÙ÷×÷ÿ÷2øsøÏø)ùwùÅùúFúxú°úàúûSû³û÷û.üSü•üÏüúü&ýRýŠýÅý þDþŒþ°þØþöþÿÿ.ÿLÿdÿ‰ÿ«ÿÙÿûÿ#òÿÍÿ¬ÿvÿ[ÿ-ÿìþžþFþëý~ý$ý¾üfü üüüüüïû¾ûƒû8ûÌúSúâùvùù¿ø†øXøøÁ÷t÷P÷7÷÷ööÚöÒöÑöÞöäöçöáöáößöÌöòö÷.÷@÷V÷Ž÷Ö÷$øSø|øžøÁøÚøùø ù0ùPù}ùÄùúzúÎúûYû©ûùûKü“üÏüýSý·ý*þ·þ=ÿÒÿ€;È—[ºUècÕ>˜ ° E Í D É G Ï g ±g%åÁÂŽ2ÝÙƒFòœFÜFhxjGáѶŠkQÇ"6(&yÜ0€¡ µ û<‡õ’WQjÿVþýÓûÆú“ùEø±ö>õÍó‚ò[ñ7ðïî+íZì‹ëñêbê¬éþèjèè¸ç…ç;ççáæçŸçFèéêFëŸìîƒïñ^òœó»ôãõ#÷pøù•ú¢ûÙü(þ‚ÿ¼é9lŒ•’q 2 á ­ s  š ™@—Gsƒ?Ô>x¡È ú  óû70ß´‡dÿþ©üiû%úùÛ÷ÑöÁõ¡ôqóSòDñSðJï8î(í*ì&ëJêxéè²çèæAæÃååUå6åå2å’åææææ[çÿçßè®éšêƒëŠì‰í†î˜ï¹ðâñêòâó¿ô¿õÙöâ÷Õøžù€úrûrünýhþDÿ.çË«n½Cøç+sÄ% ‘ ê B ¶ - ® ! ž  W Ÿ ù \¤é5Sb¤ëIŽòYï–Fþ APCîÇ øpõ¾” +!d!t!†!"Y"ý!¡!¹!×!Ÿ!Ò œ†\ºIØ Ü ™§xÎÿ*þ“üû°ù{ø÷Dõvó¹ñ&ðgîhìÞêeéÜçbæ¡äÒâfá àÊޠݯÜÜsÛ5ÛFÛDÛÛéÚ®ÚÙÚ¡Û¬ÜóÝ¢ßûáÆäùçèê†íûïeò³ô¦öcøIúüùýÍÿ±­ÖÇQ ¶ ' ¾ 8ªÚ÷5uSúoî‹5ÞôCa[û#éH€³Ó¹…_ R cˆÊm»ÿùýCü±úùl÷œõêódò-ñ ðêîËíæì8ìŸëåêëéÉèçhæ(åÞã›âfáBàoßåÞ”ÞˆÞžÞßÞcß àûàâ ã:äm墿÷çHé¬êìbí«îð‡ñó”ôök÷Íø ú=û ü“üý¿ýsþÿ½ÿ£¿õ;=Bµ q º â Ú ¸ Œ O }ó?º<¹$¤>üׯÙö Q–ú‡ Õ¦? r ¨ ¦ - ¹ ˆ ‚ Ë]ÝxI&)Ù4F !ÿ"[$^%Ê&•(Ô)W*ñ* ,B-.ù-â-..6-!+ç(é&N$U .k÷–« Å_2±Ðþ‚üpúþøw÷õAòÖïÐíôë¸éGç!åPãá!ßGÜÑÙ;ØìÖ^ÕÙÓlÒžÑ4Ñ¿ÐMÐ÷ÏãÏ,ПДшÓXÖ ÙÝ¥à‰äsèì%ï¿ñsôW÷úKüxþÜf»ÙÙ á Õ fŒö°¯ÔÕsöú q! "v"š","&!²â½>lª!žû  u éþ®üuú„øÖö%õŠóüñ”ð<ïÂí>ìúêüéLé¢èêçxç#ç´æØå¡ä`ã<â3áàâÞÞvÝ"ÝÝCÝþÝ&ßwàÇáTãåÿæìèºê†ì[îð¡ñó´ô2ö¯÷ùYú„ûŒü„ýUþÿÜÿƒ|Í fýµaïνr i ¯ ´ O  ŠÉäÛÜÑŽ.ÚþÃýÖüìûüú8úÅùªù ù¼ù5úìúÍû·ü³ý»þîÿÒq!ËQ²Z_j5  i & !?-lûš}ö!W$'‡)î+^.50¸1A3É4¢5Þ5Ç5×5á5d5w473/21§.‡+($R q~Üí < bðL.þüÁù>÷ÑôžòCð¯í.ëÎè‘æä á&ÞÛø×ÉÔ³ÑüÎäÌFËþÉ1ÉÃȯÈûÈCÉ‘É×ɈʿËVÍèÏ ÓÎÖòÚYß´ãÄç¶ëMï³òãõØøÐû¸þ¨M!à ; Ê jçóPèn¼õµ1!"#ë#´$›%7&Ä&P'—'¸'w'ý&&i$"TlCE1»  Ê·»ÿÄü úæ÷¬õÓó|òGñFð1ïsîiíìêÒç'åJã¥âãËãäyãÙáÇßêݔܛÛ+ÛÛÛÛ«ÚYÚ}ÚÛkÜlÞápãråçÒé^ìïëñiô#ö÷›÷pøäùƒûÎüžý þŒþ…ÿÆŸÝóf# ç ˜ Ó © ¼  G Ê   \µHúŽîþ2ý•ûeú{ù¸ø4øÎ÷Œ÷C÷H÷›÷2øíø£ù‘ú üµý)ÿÂm@ ±]3á`íê? µ V %¨`Y‘±ˆ!+$'å)ÿ+³-,/ø0W3;536¸6q7†89 8½77˜6¿5£3“0¦-õ*{'q"^¸ä £ ”‘Æbÿ’ýöúgøOöô,ñ£í,êVçûä âÏßîÜÚV×EÔÙЗÍËÉöÇDÇÐÆÜÆÇKÇ4ÇaÇÈ9É˹Í@Ñ“ÕÚŸß›äéóìð²òVõ%øØú‚ýA7D ë ࢺ²ß8º!#˜$²%&:'˜' (»(Ž)>*o*7*Œ)](z&Ì#{ àSë‘_< F l±ä"þxûîø˜önô’òèðjïíídìë¶é[èÿæŸåbäMã|â°áàààßðÝßÜÃÛ¼ÚêÙOÙ×ØØØlÙSÚœÛ;Ý#ßAá±ã!æŽèìêOíšï¥ñtó(õ·öJøÈùûIüOý;þàþVÿ¯ÿ6Ô‡'Ô“ŽYãj< ÷ ¯ Q ä 5  ³ ö ü Ín§JöŒÿ…ýüÒúÃù­øš÷ÑöNö@ö„ö#÷ø&ùaú¤û×üäýâþ¶ÿ‡/¼}Q•ÊÜ1» V  PÙŸ1héÉ"€%(…*ã,F/p1k3÷4=6O7Á78 8×77Ä6¼54%30ƒ-**<&µ!ÛIó? ~ÀÈÿ¯ýTûùðö«ô!ò?ïJì‘éBçöä âåÞ¶Û ØžÕkÒsÏæÌÆÊMÉNÈÊÇ½Ç ÈBÈ3ÈFÈãÈûÉ©ËþÍêÐ]ÔØQÝâqæ[êØíÀð€óôõ]ø›úýÌÿ¹Þ«ì à ®`%,ªßûñ ¿"$õ$w%Ò%e&'ª'ý'((y'=&_$°!Ÿ€Kíð '¥Fêÿ¯ýVû$ù-÷^õÏónòñð²ïsî^í!ìßê©é~èyçjæ5åä»â‘á\àRßTÞJÝ~ÜÐÛ_Û=ÛrÛôÛ¿Üû݈ßIá;ãaå•çÀéôëîËïFñqòxó‘ôõö{÷Vø=ùúéú’ûPüöü€ýðýþeÿr®ì01îƒ u é    Ê F wgOþ­Pçÿóþ"þaý¹ü%üÁû€ûbû€ûÛûxüaýsþšÿÀ³Šm-£–ÿv£bJ 4  / h Å]/*+ê#-ׯ!¸#%h'&)*ü+‘-Ç.û.õ./Í.[.Â-Ñ,½+µ*.)ç&ÿ#… ÓДI¤ • ›G/8¢þGüúÖ÷¯õkó@ñWïí/ìªê˜èGæÎãáLÞÜÛÙÙnØy×ûÖÎÖ©Ö|ÖÖuÕàÔ—Ô§ÔnÕׄ٦Ü'àzãÄæËéìÊíï ð*ñÊòºôÑö+ù·ûþöÿ•„+ÅpA\Ü“ c - ±ÌÉ„´tj¶ Á-M…Î4Π¯h ¯ Ü ß – | ºÌùqÚ‰ÿÒþ'þoý—üÔû:û³ú úDùKø/÷ãõŠôó¯ñ„ðï¼î$îííì%ìµëaëëëOë ëÿëeìÝì íMíí±íÀíàíÿí.îîéîNï¼ï0ð“ðïðYñÙñ^òùò£óFôêô{õö·öS÷ä÷’øaùúáú™ûYüúü‰ýùýLþ}þ±þËþÑþÁþ‚þIþ*þþþ(þqþçþ„ÿ(Îw+ÁOð£Wž¬>ÇX æ ƒ I .  Ü øŒ:%wã%<݃$Ì´›wa )!¶! "H"2"ö!·!„!!¨ ñ¸ÝF\”ò e s Ç E æ i bÛ3¢@&Úÿµÿ¨ÿkÿ×þÀý3üNú:øUöÇô}ó‰ò%òâñMñið=ï¾íõë?êÙèßçÄçmè—éßêCì~íKî†îCî©íäìUì<ììQíuîÉï ñò’òò ò¤ñBñæðºðÙðdñò¹ò$óNóUóAó-ó0óófô•õñöwøçùûàûcüŠü}üsü“üýéýÿ1h¡¨O¸´Ÿ¨ÄúLÁE´(šwàe Ý k î d § ß ê ç È £ f ! É t á 7 oœª·¿Åßþ%@;ÿ&þòüÇû¦úžù»øè÷C÷ºöMöâõ„õóôGôóÃòò~ñöðwðð“ïïµîî|íàìXìâë†ëhë[ëeëpëˆëŽë£ë¯ëÄëòë=ì§ì(íÝí¼îžïð‚ñ™ò”ó‹ôyõcöF÷ø×øùRúûÖû©ü’ýyþgÿR\dulyŸÕ, … ê J ¦çA\‘Äø(]“®¬ƒSÞ U!ÿ!£"A#¨# $B$c$L$7$K$u$£$¾$–$#$d#<"° ø/€ýÿ‚dI¸ÞiNÚSä Ç !m·þå>)þýû6ú¸øœ÷úö`öõ;ô^òðžíë¦èÀæ½åtåÁåcæçgç7çmæ&å‰ãïáºàà-àÓàóáPã®äÞå“æÏæ¤ædæ<æ.æaæÏæçSèé†éÖéòéøéêkê%ëQìæíÌïÝñÏó€õÞöã÷ªø"ùŽù#ú ûcüíý¿ÿ¡y U-²÷<qÂB õ Ì · ‚ : È 7“æn±R‘±©Q¤Nñˆr Ò  . /  å›I÷%¸ÿuþrý®üü‘û+û´úú2ùøØötõ#ô ó6òªñVñ*ññð†ðâïüîîí'ìvë ëÜê÷ê*ë]ëxëuëHëEëQë†ëæë~ì+í¾íNîÊîïaï®ï%ðÀðªñÍò"ô‚õðöø/ùJú[û@üýìýàþ«ÿv< úý=• i ¾ ö $bÏ3Ày7ªÅš<ÿÈ•~ ˆ!‘"˜#{$%[%j%m%g%t%¾%å%é%Ÿ%ò$°#À!]çF+ÝTBZ S¹‡{sa ‹ siÜF@Áîÿ÷ýü7úºø~÷€öuõôZòBðÆíïêè…åºãÒâÊâeãNäUå æ1æŒå6äuâàß4Þ ÞÜÞJàâýãåÇæoç°ç°ç¨çµçýç è‘éŽêRëºëùëì÷ëðëKì*í¦î™ðßòRõ÷zùöúü«üÿüuýþêþ¸2[À¯›v‚·$ Ï ‰ P  Ï l Ò #Vls]2¸ r ý † ü u ì r  ¨ & €¶¢L¸F¨þHý+ükûû»úfúú¬ùù!ø*÷ö õôóaòËñ4ñœðð‚ïñîoî î°íní+íëì¡ìZììíëäë ìtì íî5ïeð„ñtò0óÌó.ôdô`ô7ô ôæóõó?ôÕô·õäöEøýùÖûÀý‰ÿ ÒdÓ7¬Oíð  ë ¹ z T Q˜Æƒ5Ä,M6ú»‹}¶þ O"z#d$%t%›%%X%=%-%%ð$°$)$#*!{hO@Š˜Áõè†Zú¨u~΢ | ®Ï´ÿVþÁüëú#ù|÷ ö×ôôÖó°ócó—òmñÉïƒíÇêàçIå]ã@ââ´âÆãþäóå|æUæœå{ä7ã)âá§ázâÎã‡åHç¼è»é;êoê”ê£êæêdë[ì¤í"ï”ðÆñ›ò'ó]óó÷óµôÈõF÷ùéú¸üHþ}ÿYÒ GÍ–¨ßTß@ I Ý $ ® - º Q 9 I ¥  ¤ 4 ° / q ‘ Š d 3 ç u  s Ï  I^~°úA°}»Ø¢ÿ@þ“üÔúùk÷öõ…ôMôLôRôQôô¦óâòäñÅð­ï¿îî”íFí(íííåìÒìÁì¿ìÃìòì@í¯í%î¤îïŽïûïðñÕñªò±óÊô¿õ§öY÷ê÷øøþ÷ü÷øŠø%ùú,ûü0þØÿ‡‹Ä§?®ï*E å ð  J m’”f_’Ü\à\·ââ¨d ­ «!Ò"Ü#¶$|%&3&Ö%5%„$®#¨"š!¤ À/Ü/Ë¥ùPd … ä Ï   'ýÆ$Æ À CþLÎV©ÿÌýûû§ùÇö¢óÝð²îí,ìQìÜìíÕì4ìë9ééæäµâ‰á.á»áòâmäÖåÂæ"çÖæ8æ€åçä°äæä·å#ç÷èëÚìBîïcïlïWï]ïˆïüïßð ò§ó`õ÷øÆùÐúºû¬üÏý3ÿÀvUW[Pë{`˥Πw † ( H † Ñ  | !  D ” ¸ ¶ 7 ã K ! è§4¹%¦ºÿ\þ8ýEü}û´úÌùæøø8÷0öýô°óWòëðvï îâìì ë”ëâëcì÷ìzíªíŽíôì9ìqëçêŒê„êÖêŽëZì!í°í îyîÁî÷î\ï+ðHñeòtó€ôVõö™ö÷‘÷>ø2ù\ú¬ûýKþHÿôÿU•ËùNË‹dK* ôÖ–I î ‰  z Ç ' ± H î ÍôJ™Å¦/ăDé¶ôCžóò½b Ö ,!Æ!¹"Ä#­$V%Ø%$&4&à%6%Y$=#ê!® )t–_êÓ O Ž ìc}u[¹òý4ûÎøèö½õ#õ²ôô ó¥ñŸïí›êNè[æåmä[ä]ää6ãÈáàÞ܆ÚÚ´ÚIÜ¢Þšá”ä!çéTêë_ë¢ë5ìRíïñtóáõþ÷¾ùìúvû•ûˆû¦ûýûÈü÷ý‡ÿ:â;T4Ìœ› ü Ç Ì¸I_ÚÄ' v>,¬¿ f ½  -'sÏ”SçjÀ fÆÿ,ÿ‘þâýýëû‚úÓøøö6õ…óåñuð/ï0îNígìhëBê1é9è^çËæ}æ˜æüæç èèé|é“é©é³éÑé?êîêÁëUìøì‚íî?îOîNî–îïÆï¼ðúñióåô:öW÷_ø\ùDú8ûHü‰ýÍþ.‡´•Q^X04p±ý4q¿$Œ§gL 8 ò – = î v ß YÝQÏqÓ} ™nöšAëÙ_âM™µÈ !-"#æ#©$$%²%i&æ&3'!'w&Q%°#ï!†aóXÀ½ ˜ C‹Oÿ8þéýöýDý©û¸ù­÷®õ•ó•ñÅïpîfí^ìªêxè æ­ãPáßÞÜöÚ#ÚíÙ‰ÙÛØØV×Ö¯ÕCÕ­Õ-×½ÙÝá_åGé•ì+ï ñLòó®ó®ô@ö3øaúü²þŒ'?Þ6äÕûEá « >ˆ–¦ù\šègbó/Þ¹%ŽTw Ö † _ l\ ‡Ïwÿðý§ü¸ûûÏú…ú.úÈùKù‡øŸ÷¨ö®õ¨ô{óAòîðïÂí¾ëˆéçìåŸä¯ãEãuã%ä åà凿!ç¦çèhèüèÜé/ëÕìˆîCðåñ4óñó:ôô¾óAóäò„ògò¡òóŸóYô#õ ö÷øcùõúÆüþŒÙ³ù ñɶƒ%…‚{Gÿéý¢ü™ûÖúnúgú¯ú#ûü'ýPþ|ÿ¬æä§YÚ`ËI`’ºñJæŸp ± J ¼ ûu7ÿÓ¡¸\,©!à#.&g(<*õ+3-.ö°ôFó%ò)ñð›îÖì±êè‡å[ãtáàߣÞsÞWÞ%Þ±Ý=ÝìÜëÜfݓކàãæ+é3ìïQñüòô¢ôáôõgõëõ€ö"÷ö÷ïø úûÐûfüý´ýdþ#ÿ2…%ë•í' 2 ï M N  ð ² 2 _ MÿF#½xþ~üû úTùëøÓøÖø±øSøz÷oö–õõsôôùó%ô™ôõEõNõvõÙõö4ö£ö“÷áø-ú û û•üÞýGÿl¢G©¯´ ³ÏÙŸÉëý "­#Ö%c( +s-t/J1&3Ë4­56…6y78ö7;7p66w5ì3þ1J0î.ó,S*…&Ó!…¶†p é°ýðùÍ÷*ö¨ô"óòñ´ðâíëéºå!âdßóܨÚ7ØÖÔZÑÉÍsɀřÂÎÀ.ÀÌÀÖÂËÅÖÈ=ËcÌ.ÍÛÍÄÎëÏÒáÕäÚ;áè¼îYô”ø»ûßý=ÿO^êdÕ… Kì ÓšQb"%p(’+6.ó/…00ƒ.”,s*(2'& %M$*#q!S8R Õþ—üûÚùåøª÷ýõÚó…ñ?ïí7ëŽéùçeæÎä ãâà_ÞÀÛHÙs×1Ö°ÕµÕZÖb×iØmÙ:ÚÛÚ—ÛgÜŸÝV߸ážäÃçë'îíðVóQõóö(øXùmúqû›üÃý¨þRÿõÿ·žÊ#Úø › Ò ½m©¯ˆ^8²ô  Ü = ^L21H…þÑüLûÉùpød÷dökõºô4ôÚóŸódó´òÈñ&ñfð{ïîÇíWíYíÖíMîÎîóïwñûò¸ô°ö•øVúåûyýVÿ<Øêq Œ ç—÷…Vî"Ñ#<&ž)¡,u.~/î0Ù2y4'505#6a8í:<$<°<=•<°:Ï7$5ú21d.2+Ð'ë#w»Ã‹ xü÷úó¨òò ñáïï§íœê÷åRá¶ÝEÛ4ÙµÖ€ÔµÒáÐõÍ”ÉÎÄÀ¯½¼4»¼ë¾ûÂðÆ(Ê\ÌÎõÏùÑ)Ô$׋ۡá„è•ï­õkúüý`‚ÎItvLç Œùɬ¿!A$b'+Æ.2i4¥5o54‰1±.,¾)•'µ%ö#"ÄžŽ¶ª \þdüìúÐùÍø{÷Øõ¾óVñ¢î'ìúéëç æäóáµßOÝ´Úå×*ÕÓœÑÑPÑ<Ò¬ÓwÕU×ýØ ÚMÜÞÜßßá;äçêþì‹ïºñ°óGõ­öÁ÷ÄøÅù÷úSüÀýÿ?EO€ðTÛÄ ú +`Sì!´Ùì$þ ¦ 6 ¹ 8$0yùþ«ýŽütûlúùèø ø%÷ö õLô®ó¼ò˜ñ«ðÁï°î›í®ì¾ëðê‘êÂêTëkìÙí[ïñœólöŸø”ú«üòþ5‚sû ç  9ì8<ñ.# &.(f*'-É/Ÿ1Þ2æ3“5½799Ð9m: <9=Á<;³99Ã7b5U2p/-®*O'¶!<±2 „þHú­÷Pöõ_óxñýïwî9ë-çtãEà®ÝûÚ+ØJÕ¤ÒîÏJÌíǽÃhÀ¾»¼½[¾„À’ÃPǸÊÅ̇ÎÂÐ^Ó&Ö¬ÙNÞkã¸è'îóèö?ùú~ûsüÊýÿàôÝ ‹üú‰æ{n!¼$ƒ(=,r/¾1>3å3H3€1ý.`,*Ü'&Q$Z"D ÓÜIq¸,  ~™<’¶þ¹ü‰úõ÷õòeïèì—êeèüåqã¦àÊÝúÚLØ ÖxÔ’Ó‚ÓÔQÕÜÖØÚ…ÛóÜSÞçß„á*ã åçéØêKìƒíVîïìï ñIòÁózõt÷‡ù‘ûIýàþTßqA0. : $ »»*;î2T{ × 4 w ˜ ¢ šl$<©Z ƒÇðÿØþýøûJú°ø8÷öËô•ódòñÞïŸî}íºìMìVì¤ì‡í#ïýðò)ôßõµ÷‡ù)ûüîý}ÿï=£Š A H •Ã, RJå‹"~%‡(E+t-/ð034¬4î4P6-77Ä6¼6‘6o66€4w21¶/F-)*j'Û#ÆM Û— cèÿçü›ûÄúBùd÷'öÆô>ò¦îtêæãÖßkÜ&ÙXÖ^ÓUÐáÌ8ÉÆöÃíÂI†ÂXÄHÇ+ʛ̜ÎБÑhÓ~Õ¶×¹ÚÊÞKãÊçúëfï¾ñóúó°ôˆõ7÷ˆùYüÕÿŠ• ýÔËeØ"0&b)é+™-?.Ö-t,|*a(Š&%ñ#î""æ x’?«ß0uS3  ¡  :À¿¾þ¼ûÌøÚõóxðÉíêêËç²äâÄßÇÝ/Ü\ÛNÛÖÛgÜÝ·ÝVÞ×Þ0ߤß1àêà´átâOã+äÏä=åuå¢åæ²æÄç é”êRì]îð¶ò£ôoöDø8ú&üþçÿÓª1P «øøÊ±Ú%Zm}›l5ûÐÀÆÑÄOX&©$°ÿEþâü…û9úèø¢÷uöUõYô½ó§ó×ó.ôÛôûõi÷âøðù{úû&ü\ý´ýbýiý@þzÿZÇ0.¶?”ˆÇ ø ‚íB¿ ²i è"%y&½'J)+ˆ,X-×-.l.r.#..p.Û.Ç.‘./8/§.V-†+)Š%Î!úËiü g “Åÿ<ý_û(úƒø¡õ€ñiîbì ê,çžãàTÝ ÚÕÖQÓYÐðÍÒÌ·ÌÁÌ0ÍÜÍDÏ:ÐrмÐsÑßÒÔ{Ö?ÙƒÜFà•ãlækèÖéâê´ë¶ì îùï0òÇôí÷"û[þ5Ô—o Ð 6š Sf²/!Ø!Á!z!!Î w ² ± T œ•RŸò\úü?¿ãÛÍ„ðã Ê ¤‘›iyý›ú¿÷¦ôÝñ]ï3í™ëVê„éé…è(è{çÔææåýä‰äfäQäHäDä$äþãfãûâ£ânâ–âÍâSãäÇäÅ嵿½ç£è¦é ë—ìsîuðŠòzô5öö÷Aù úÐúPûñû«ü›ýkþEÿø·CÃBí·|Q!ô‘¹½œbö\îƒ^ƒ›¨ ‘‘ÿñþ­þ¬þ±þãþPÿ²1ö[ª”]ï¹:ï¹åXÞ0;ýª n V ‹Ü豞¾”Éü¢Œ "å"#B$N%ù%¸%5%J%S&|'(Z(æ(ƒ)Ø)')Ô'D&Z$£!( 5GÙ › ²ì#…’swÛÿ©ýÜúð÷9õ³òúïíTê¿çÈäªáÛÞËÜÛyÙ-Ø/×øÖ_×Ûרÿ× Ø\Ø$ÙiÚßÛUÝ$ß^áŸã\å~æç<ç0ç€çHècéëåì9ïóñÖô«÷4ú™ü7ÿöéÖ¿ c »°läûäÔN*$ÛBL3ê[¥ôœŠ¦å1÷`xe;çT® ü U •Pà¨þÖüYûúòø0ø”÷÷‚öÖõóô×ó¬òiñ.ðï îöìâëËêŸé<è ç æùä äãBãJãhãŽã³ã(ä´ä]åæÕæÜçéAêZëWìFí÷íXî“îçîtïðñðÜñßòôTõ‹ö©÷ÀøÞù:û¬ü þ\ÿ”ÃÇnúR¢ÉÚú=x…s\RTn“ët ž,§ïÿéÒµd ¤8²)²Ž‡­®lõLÅ š N ê Œ¨AÎTÑqÇÛ\ÌÝ*Þ¤ "ž#È$ñ% '!'& %$ä!ÌÜÉþ†r  % jBenƒ ù·7äÿþ/ü3ùâõºò¨ïcìÆèÚå¬ã†áß/ÞÐÝ7Þèކ߶ß2àá&âGãväÆåç6èUé›ééìçÄæ˜å{äÌã‡ãÏã™äàå•ç—éÚëDîÈð­óõö|úÉý蜪ÓÞÄ·¯°ª 0 , 0  ! — \ †  Å‹)vPË,gL¤ôÉk‹H  ï Zhóν¢j¤éÂhÿÔý?ü¨ú4ù¿÷ö>ô™òNñÄïîŸìVë1ê*éJè‰çïæ°æbæ/æEæiæoæRæ‚æèæNçÇçè,è?è7èèõç)è—è*éóé"ë«ì1î•ïÇðòSó²ôùõ÷Zø¼ùûLüiý;þ½þUÿÖ»j_]‰ðqáw Õ ¿ ‡ 9 ­ ü -  í ” ` 8  Ö „  å ¨ q )   : W e š ÷ @ D N ÿ  D Ò e ­ Ë ½ | v ¯ )mH ×¯" a€UBP/ß’ŽzL¢RXçõþå ;<D¹ÿœÿ”З]# Î . 8 Å J > ‹ D „÷¯oþVùÿóGï‚ëÀèoçÈçØèíé“ê.ëùëÚìÓí2ï<ñô4÷6úaü0ývürúŒ÷côeñnîìZê^éøè¼èvè/èaè²é"ì§ïÍóRø´ü¬¤+›BfPdÐÿÑþHýnû¬ùøòö¦ö`÷ùŒû†þ ÌK×j Ü Þ < Ð ´  À•ãýdûÐùùñøvùaúNûþûoüÔü,ý¥ýCþ ÿÜÿ®÷Zïþý9û‚ùÙ÷`öõ=ô°ó$ónò¦ñîðŸðåð¡ñçò—ô{öHø¹ùâúƒûlûºúñùOù¿ø?øÂ÷W÷×öRöòõÏõõõSöýö ø¾ùmû*ý«þ¿ÿaíuÕòpÀ˺WéáÿÓþxþýþ 2U$e4Ê‹œÇšÒ‡çœtlŽ[›5UúÈ=’[ t  êf ¢ ÜDç;wùEôGùY·:À†° Í ™ ( î Z ° D   õ {  §ñ7/ƒw=ò  S D V  Ü Ó  | i š ÉQo• Wh¥»@Ìц”î*7YJÛ #0k¾)¬£ÉçÞѬi'/R›–ÝúËU¹GäÿYÿÈþRþìýxýøügüüÐû®û‹û’ûÞûmüýeý:ýýGýŠý¾ýÆýäýþ$þHþKþIþWþKþLþoþˆþ]þ<þ#þ*þ>þNþ8þ"þ-þRþkþ©þÿÿŠíãœt­Þáú6SYyžC˜('£]Ñ„‹ {jΖ†¡°ÛNöÿÿ+ÿüþÌþ”þsþFþØýZýLýmýnýbý¼ýgþŒþþÊýßýÑý„ýgývýXýýÔü•üMüü¿ûwû>û ûûhû½û%ümüaüjü”üÂüÔüý>ýký_ýYý|ý†ýfýQýcý•ý¼ýôýJþ„þ¡þÉþ ÿFÿ€ÿªÿÝÿ,m›Ã <*üãÜųˆ~‚™¥Êô 6bš« ŒT'þ׺~f>üÿ¸ÿÿžÿ•ÿœÿ¢ÿ²ÿ¦ÿ¤ÿÉÿøÿ #Óÿ•ÿhÿYÿ1ÿýþïþÅþ¹þÄþÚþÿ/ÿlÿ±ÿöÿ;`~¢ÂïÑ;ÊÿUÿèþ¿þµþÿPÿUÿBÿ*ÿ&ÿ?ÿ¬ÿŠs7ê õÏ´šSÓ•Té|Hýô&N Ÿ#f’ŠUëýËc„ø–K4 ìÿÿÿ"7L„ÁßÝ'ûǘsL,äÿ¼ÿ¥ÿ°ÿ¶ÿ¹ÿìÿ,Tw Íê!9\okxz_C3ÿþ'@MH)(,?pŠª¹½¢ŠjCׯf[J'òÿëÿÓÿÆÿÄÿ½ÿ»ÿÁÿ§ÿ“ÿ‰ÿ†ÿŒÿ‚ÿ€ÿ™ÿ§ÿ£ÿ§ÿ®ÿ´ÿ¯ÿÿtÿfÿ]ÿgÿhÿ†ÿšÿ¬ÿ¹ÿ×ÿéÿÿÿ'8I9P[Z\`ePDBNPGJMS_r{†”˜™œ• ¡¢ŽŒ}ufQKCH9÷ÿîÿóÿòÿêÿÞÿÙÿÐÿÈÿ¶ÿ«ÿÿ¦ÿ ÿ—ÿ‹ÿƒÿÿ„ÿ‰ÿÿÿŠÿÿ—ÿ¡ÿ®ÿ½ÿ¸ÿÁÿÅÿÁÿÇÿÉÿÍÿÍÿÒÿßÿÚÿàÿíÿïÿöÿÿÿ $2C>?3)-)  ôÿóÿìÿìÿàÿåÿÚÿ×ÿÃÿ»ÿ±ÿªÿ¤ÿšÿ”ÿ‹ÿ‰ÿŒÿÿ–ÿšÿ•ÿžÿÿ–ÿ•ÿ„ÿÿsÿsÿlÿhÿnÿhÿrÿyÿ~ÿŠÿ™ÿ®ÿÉÿÕÿÒÿÛÿåÿïÿôÿÿÿ#2<CKXlxˆ˜¡±ÂÊØåó,6GOXV\eYH>* üííßÞÌÁ±«›ž”€tmYF6/#ãÿËÿ¼ÿ°ÿ²ÿ£ÿ¢ÿŸÿªÿ³ÿºÿ¸ÿ¸ÿµÿºÿÁÿ´ÿ«ÿšÿ–ÿ“ÿ‰ÿ†ÿŠÿ†ÿ‹ÿ…ÿ‘ÿŽÿžÿ¡ÿ®ÿ¤ÿ¦ÿœÿ™ÿœÿÿžÿ£ÿ®ÿ´ÿ¼ÿ¸ÿ¹ÿÀÿ¼ÿ´ÿºÿºÿÁÿÂÿ´ÿÀÿ»ÿÂÿÂÿÛÿÚÿâÿãÿçÿêÿëÿæÿãÿÜÿÎÿÅÿ¶ÿ§ÿ¦ÿœÿ§ÿŸÿœÿ›ÿ•ÿÿŠÿ‡ÿvÿxÿxÿƒÿ‚ÿ„ÿ‚ÿyÿ€ÿqÿzÿuÿmÿoÿfÿeÿSÿSÿLÿGÿIÿGÿLÿPÿ\ÿmÿzÿŠÿ™ÿ§ÿ¦ÿ³ÿÄÿÈÿÍÿÅÿÔÿÕÿÚÿåÿæÿóÿõÿøÿÿÿøÿÿÿòÿôÿñÿèÿîÿæÿêÿÞÿêÿðÿùÿùÿþÿÿÿòÿõÿãÿÜÿÆÿ»ÿ²ÿ¥ÿ¢ÿ£ÿžÿ¬ÿ«ÿ®ÿ©ÿ³ÿ­ÿ¨ÿ™ÿ‹ÿƒÿÿ„ÿ˜ÿ•ÿƒÿ‚ÿ~ÿ‡ÿ…ÿŽÿ„ÿ†ÿvÿrÿjÿmÿbÿQÿOÿHÿLÿMÿTÿWÿaÿiÿpÿxÿqÿzÿŒÿÿ‘ÿÿ˜ÿŸÿ£ÿ¢ÿ©ÿ«ÿ²ÿ¶ÿ·ÿ¯ÿ¯ÿ§ÿžÿ¢ÿªÿ²ÿ³ÿ®ÿ»ÿÀÿÍÿÝÿèÿôÿöÿÿÿ úÿöÿëÿÞÿßÿßÿÖÿÏÿÔÿÊÿÎÿÏÿÙÿÔÿßÿÄÿ·ÿ¦ÿ¤ÿÿ¢ÿœÿ£ÿ—ÿ£ÿ¥ÿ¤ÿÿ™ÿŸÿ™ÿ“ÿ‚ÿgÿ[ÿQÿOÿIÿNÿSÿWÿbÿaÿnÿhÿcÿ`ÿZÿWÿOÿRÿRÿ^ÿaÿdÿmÿ|ÿ|ÿÿÿ‡ÿŒÿ‘ÿ•ÿ“ÿ‘ÿ’ÿŽÿŽÿ–ÿ›ÿžÿ°ÿ¶ÿÉÿÌÿØÿÕÿÓÿÎÿÅÿÇÿÏÿÉÿ¾ÿÂÿºÿÁÿÈÿÀÿÀÿÎÿÁÿ¾ÿÉÿÀÿ¾ÿ²ÿ¬ÿ¤ÿŸÿ™ÿ•ÿ‘ÿ˜ÿ™ÿžÿ¤ÿ¦ÿ™ÿ“ÿ†ÿ‡ÿpÿnÿfÿgÿ_ÿcÿ_ÿeÿbÿoÿzÿwÿÿ†ÿ†ÿ…ÿ‰ÿ„ÿ…ÿ†ÿŠÿŠÿ“ÿ—ÿ¤ÿ¾ÿÁÿÃÿÊÿËÿÔÿØÿÕÿÚÿÓÿåÿàÿéÿìÿ  üÿøÿîÿñÿóÿøÿûÿÿÿýÿ ûÿíÿñÿåÿëÿãÿäÿçÿëÿÜÿåÿÙÿàÿÝÿÝÿÙÿÕÿÏÿÐÿÕÿÑÿÝÿáÿëÿçÿîÿñÿõÿïÿóÿíÿñÿñÿòÿóÿñÿ÷ÿøÿ !&-266579;:99:;9=>EKINQQSXcg^`]`]VM`[PG=<43++&*&  øÿôÿøÿîÿíÿïÿçÿêÿáÿåÿÝÿÝÿ×ÿÛÿÓÿÕÿÜÿÚÿÒÿÜÿÕÿÛÿÑÿÝÿÖÿÚÿÖÿØÿ×ÿÐÿÑÿËÿÊÿÉÿÍÿÓÿÔÿ×ÿÖÿàÿäÿîÿðÿøÿøÿ %*#)%'+ %*2*5,,1)-(-$þÿùÿñÿñÿîÿòÿõÿôÿúÿñÿòÿëÿëÿæÿïÿîÿóÿíÿóÿçÿòÿðÿøÿõÿüÿýÿÿÿ!"! !!$%#'(*$-$/%0141-2+50124286:4897460),(***.'*4+7*232/0165A<:>>=:B8E;FC@CAJAHCU]QEUe[YNTWeavrrv}Šrma^\XSSUPMPPOFGIHTYFPD@<>C:31)&!%''/0$*(  $,9=@:A;@7<2<05-82<A<A9<AEIGJFGJJHAJFAD>?@D><69565425237582620*-,.7366;A@C=F@HDGOPQJMKNOQTWQTMOPLX[VX[\UbVaRWSYNOMTTPHDA==1=0=59>FBCBBAECDEH@FKP@HDB<@>C:8>8>B>CEJK4ûÿjg=#FNRSDEJMAHTTPF9@6;23*2B<2(-:71/$##"$ úÿüÿûÿÿÿîÿíÿîÿîÿòÿòÿèÿíÿòÿñÿüÿôÿýÿüÿüÿäÿéÿìÿòÿóÿëÿêÿàÿæÿäÿéÿãÿíÿêÿïÿøÿùÿ   øÿþÿûÿíÿúÿ     ÿÿûÿøÿúÿòÿóÿêÿïÿðÿèÿñÿòÿóÿýÿýÿ÷ÿñÿñÿìÿìÿüÿùÿüÿ÷ÿþÿþÿ (1BVlŒš¬”XÔÿYÿAÿëÿ‘WPÿ¿þIÿ$Djÿ“þþ ýôûùû±ýìÿâ oþïü\ü»üyý÷ýþhÿ¶Ø_C°Ò¥ÿ¼ÿÔÿéÿáÿ¼ÿ¾ÿY cÿÓþ±þ#ÿ ¤±-©½P±’ã ¶ÿÞÿ.6Il¤¨oÏÿáÿ<”} òÿX¾˜öÿˆÿŠÿˆÿ0ÿÿ…ÿ&W¬ÿÔþóþõÿŸôÿ­þQþ4ÿ–1‹ÿ\þÿ! ÿ¼þØÿõ•‡ÿ]ÿÿœþhÿƒämÊÿYÿ8ÿ2ÿÿCÿ§-þ\üüÚüÐý7þ-þ/þ©þ¯ÿºA¿þåý­þãÿGÿ0ÿGCºÿoýwýÿdËÿhþ|þD–¼?ÿïþ ,3sÿÔÿ¤ÊàÿÿnÿÔ¯KÐÿ þ“þ›ŸÝþ]þrýý©ýÆþ‡ÿIÿkþSþwÿäâ‘ÿ.þþêþ$ 9ˆ¸ÿtÿæÿ±ÿÇþÿ;ßþÂþb|é òЩþ!þÿ‚žowýþîÿf¨\ÿíý¹þwu¾H,û€û~mÅûWù8þÅ[þ÷Äúò!…ÂûPüøÿpÜçþ)ý§þ3ÛaÿTøø™ûýšù ü³üÿ®®þØúrû†Sþ1ü ÿHYxÿöJÿˆú–üšÐ§%ýûÌü •µýÑþSJÿÄûvüè^T—úÿú^~ nYö}ö?Ÿ »0ýÐö±ø| ަþHù)ý°GœþjùLüï @pûÀútýÏÿ¼œþ×úŒýR)£®;þû5ûV7 ´ ƒâööÁþß¾²¿û~û19býüÏÿÃBÿ ý~ý×þ£ÿ½ˆ½VÕú‰÷6ûÚËå’óüÊý\&kþûýÍ´ú,øâüñÞ aíùÖóú툳üyýM+ÿæü´þ.éÉûúœý ®Lþxúëú*ªëþîûøÿä_þû„ûÍÿzfüÇ÷…úÑ™¥´ýãø<ûY<ÆÿOû²ü(í'éû‹ü¡ÈàKüUû¼ýíUÖPÿ0ýÄûüfB±xíû:ûúü“;ÜqÿGû§û~ÿˆD,7ürýoÏýâþë9’ìüìù¤üÿ ïÿøüÅý7¢Óÿ…8Ÿ]%ªÿ"#/­þcüBþO!Ï@üý£YNÆû»ûŽ*N‚ü‰ýkz@–‰žýûù^ýSÆý{üÊþzY=hý-ûoüyÇNS9þ”þ‹¹þýWÿ ž ÿïüžýLþÖþB[íÿÙý ÿòÿ|ýDû ÿ’9 ;Gû:öþùcí™ú§ùJÿYy”îóÿ«ûÏûîÌagÿpüÆûµÿd[þ)ûÎù“ý£F]þ‚û|üëÿ%÷¼ ý’÷û' öSû öÆú|bÃÖüø™ùÈÿÏ—=ýÈûþÝVéïþóû…ýâ«©üvú#ýôP¯ýŒû+¸`øøù6VõâÉÿQýiüŸÿÝZ£þÕýìû¸úGÿ¬ ‡‘ûôrôÛþ‹ Ñ ËýÝþÓ«,üùîüx…=µüñø2ü»ŸXþ§û'ý| ÿÛùúPY­u™÷Çõ‡þî«rÀìjûþùs޼ýÍøû5’«%¹æÿQüŸú,þâì·øà¶ü'ø)úAƒ”åwùø/ü(„H˜þjýuÿE³þåýÿöf°;þíô^õáÿÖ E HiúIú·þ?èÿHÿØ€:ØšÿØ {„ýšøûí¿6ÿR"óû.ú©ü¶Ø€mý6úÒþC‚]þ1ø›ûˇ;ü+ûþÉX®lüYûpˆ k×ô^óÒþ„ ž.üÿÑ߃ÿ<úùý2D[ƒÿÝÿ!›¨Ìý0ûÝû—ÿÖ¿a`ÿ–ÿ\ýÂÿ'aûùØûy<>¾%þ‚ûŸý³ÿ×þõý2ÿ¬Ä§Ÿÿºÿöÿxý3ú8úäÿ¼j[üýù­øþ82¥ÿãúþýÅ~…ŸüöûVýôÿíêÎáTšû™÷ÑúÒ"°÷ÿ×ûÂü5X–íýÕü=þDû×Mú_ù|þÂŨ®ù7ø4²Q<0ùñ÷ük1ÿ츪üúÆûˆ¦e;ý®üÕq)Úÿ¸úùøû_þéw¿èóçúøŠõÎú9¢ÁŽÄÿ™ý‘ýÿauŸþÊû»û„ýŒ(- e5-üÐùêúwýûþT2<=ªþ”üKû"ú©û)¹2“¥Šßýñ÷Ýöýœ ” oû÷óCö=þË’8þ†ïöòÖù8øòýd¡ÿ:ÿé׆—¿ú£ö÷]ýg0 ¥ÿä÷Ÿ÷Rþ7Ø›}þ¬û\üŒÿ¨y­ÿVüü·ÿͺàýêû«‘Z ÿÄü þvo@þ‰úý+'¸‡ÿÜûù9úýþ3¼ñ˜Íÿú=úÑý=l¦ÀÌCÿêþ~ÖþýAÿ¹ÁÏøk†ÿOþºýîüœüyþs÷ ^zýúÝù&ý3>Mwþ¶üþÿ‚Y8üÔûŒþ¶I½ýÉû¾üSÿ¸¼Àþý~ÿÇ}9%áy„û-újý›QÎý‡ú0ýÁ*ׄýýû÷ð"Ðûý¾Á"Ÿþuÿî¤äÿµü©ü¨ÿŽvì:þ5ýLÒrûŽ÷xúýËåÿ0ü½ú;ü±þc‹lª¹!,7%2ý…ýÖÿõª|ÿ5þçýëý>þ_ÿÿúý¢þ+Øœ:ùÏRÔþüHûÅû4þÔÔÇ'ý÷úwü³þ÷þÐýý3ÿyfj Là˜aÿ¢þ%ý‘ûÿüµcqÌýóøø[û Äp˜€TË¿ ÍÊkþAüöù^øqøçûÒÖ{ÿü[úýèd 3 ÿ˜MI2ú¦ýRùù¨üýÿ²ÿ"üÖø“øÇûԄѧQýþשWO˯ÿÎþÀüúû÷O÷¾÷Xú•þˆG:íÿt—Ä¥—í‘_Àý×ú¹ùÀúØü4ýÓûHúúû]ÿ~[ìÁA-®>©×Ùý˜üßý¬þZýíû=û=û8üýóüýÿ3Áœ: ¿›VäÞ·]rüOø·öw÷ÁùÎüÿ&ÿþ¡þ¶ÿ•y·§3Á[|jÿ ü‘úúßùÏùšúúûaýþ‰þœÿŸÏ3iÄ£½õø7þ“û!ú ù‹ø±ùCü‰þÿvþÄþ ÆJÎÜ¡¼x|»ÓN‡ýúDöôuöçúäþ(KÚ:Ž‹¥"l/µÇÂý(û‰ùšøsøùüÿuW]u}©oX â;ÎÈ}ÿ|þfýŽûœùù:úÎüÚÿD’.˜‹œþ¿þ$,pÕýúqø.ùòúXý{@×Õ©wËšTÀwÿùþ‰þÊý)ýŠý`þ¡þþñý¤þÔÿÎ1h/Qÿëü ý<ÿ`.gÿ«þ9þtýþüNýÒþ²ÕR†íÒÒÿùþRþîýþøþ$û›ÿMý)ýÁþãr²=]1ÂÙ ÇüHû'üåýÑÿøšÿçýþ7ÿÇiG5af…ãÿ¼ý ü+üzý©þ7ÿ^ÿzÿØÿ€Ly¤-ÿþ¨ýŽþ)ßžº‘ÿÌüzûÍûÙüÚþ)Mq5Îÿwþ#þ‘þ a…öœǨþYý‚ýLþMþþ{þâÿƒý‰G룸 Ó„ý=/ÿÝý5ýÖýüþ£ÿhÿ+ÿJÿÈÿ|+-Æ™)̳ÁVÿBþþ·þ”ÿµÿÿ_þaþþþæÿ¡»PQþªùI›ÿ.(lAÿ†þóþßîµ8ŠÿÿKÿàÿ‡ò‡o‰È3D+ÿk)ÿËý ýßþ|80Â[+?ýÿXÿúþXÿøÿš[­A—ÿ­þ¾ýÛý(ÿ y£ŠzDPÿ þdþ—þ:ÿ » úíL5ÿþ_ý—ýÎþ‡Ö!±ÿºþ˜þØþ?ÿÿAb4-ÿ«ý¾ü ýXþ±ÿ=ó qs2¤þVýˆüžü¡ýÿ$ ¿ÿÏÿÄÿaÿÿÿ·ÿu늦ÿÿêþÿÿ;ÿ[ÿtÿ¬ÿ)¥ßýÕ?Mÿ†þCþ,þ~þ>ÿ,å<=ÿ€þŸþÿWÿ’ÿ¦ÿ¼ÿ¶YSò‡ÖÿÿØþ.ÿ‰ÿ§ÿÆÿ¥ÿ ÿwþ‚þ&ÿBh,t¬½ˆ,ÿUþþFþ˜þþþYÿ¸ÿd"›…)ѧÙ*• °ÿMÿ'ÿ ÿÖþ´þ ÿýÿn^Eg¼0g§p/Ûÿ˜ÿ’ÿxÿFÿ0ÿMÿÿîÿÚÿXÿÿ3ÿãÿØÚ³ïmXŠþ{ýAý¦ýsþgÿ;—±Þå›f¬6áv¬ ŒþÁý©ý÷ýtþ,ÿæ§!šòbcd‰ê€Ë¼Óÿÿyþþ8ÿW\× 2!áRŸ ®ÿ—ÿ×ÿMƒMÑÿ ÿDþËý+þ2ÿh_éÝPcUÿuþ÷ý§ý“ýäýwþÿ¡ÿ§ÿ`ÿÿìþ)ÿÿ»ÿõÿ8o[$©ÿÿuþøýÕýÌýåý2þ”þÒþùþüþàþÍþÄþíþÿÿQÿ’ÿòÿÑÿÿNþÈý©ý¨ý¼ýÄýÔýÿý&þmþáþÿÿ¨þBþíýËýåýþéýºý~ýhýRý8ýý ý\ý³ýîýþ±ý6ý™üüÐûòûTü±üÕüÐüßüýý6ý2ýý ýýòüäüÂünü"ü üHü‚ü·ü ý;ý2ýòüÍüàü!ý`ýyýmýWý~ýµýðýþþCþxþ£þÊþÐþ¿þ³þ×þ6ÿÚÿ|Û;Î :@0)JšÜK˜Jò‡;\R.ðÆÃé3ˆêPœá7 ²  . U e ” À , ¤ ñ ä b ¸ m u † Ÿ  ¦ " H W ¡ Ê ¥ + £ S 1 B < @ A  ó À £ 7 z twº2Ø“xžÐ÷ê€UÎ?YûÿÖÿ‘ÿÿþjþàýTý•üÀûáúú®ù³ùþùWúIúØùíøÚ÷Äö´õêô]ôôÿóBô­ôâô»ôô0ófòóñþñ1òXòYò*òèñšñ^ññ›ð)ðÍïÄïüïcð¸ðÎðãðêð$ñLñ ñòò®òuò1òðñ¤ñVñÿðöðGñøñÒò²ónôéô5õTõRõfõõ¾õöyö°ö´ö¨ööˆö´ö÷½÷øoùú•úæú%ûGûEû:û-û!ûNû±û"ü–üÝüý&ýEýýñý^þÐþ=ÿ°ÿ†Æ139X†²Ü$pÄŽ£jš¾ò9“ù8t¯Y¿ › F õ À d à I ¿ Go‹»Ž,µ‚u*Ê€`cqg¢Þ'¤•þ…ý9{§ˆ&ºŠD–};É 0 * j^öêâãÀR|Oúÿ‚þûü€ûúóøø?÷×õçóæñPðCï³î“î«îðîOïï~ï ï%îîìxëêéˆèYèZègèXèLèYèvèÅè ééVê6ë8ì$í¾íêí¶ísíCí9ícíÚí’îï•ðÁñó.ôDõ$öÖö›÷bøcùgú\ûüXü§ü%ýºýHþ³þ@ÿüÿåàÊ PêY¥ÿpÞõ§N! ù>°_€]ì6wÆ*™•%½jðf¿ÿ(ÿÉþŸþsþ%þ¯ýýsü©û»úðù:ù°ø&øÄ÷’÷l÷?÷Üövöö»õ„õUõ;õ8õ(õòô²ôô‚ôô~ôjôzô©ôõô9õ‹õÜõ+ögöŽö½ö÷ž÷7ø×ø†ùú‰ú÷úiûêû~üý£ý[þBÿÛŠ=5ýóß‚ I Q X  [ ë ¹ÏåÑÓeQíŒ-~cðEáòšI—†\!vt_€Õc( Ç<ï-qý Þ ò O ò Ð l àË‹^£þhý¶üOüóûOû?úÕø÷õó_ñðtïwïÉïäïï»î‹í ì‡ê"éèvçhçÆçièïèé¿èúç2ç—æHægæçÝç¼èvéøé>êVêIê êê`ê+ë+ì8í9î"ïþï©ð%ñ ñ1òóùóïôíõýöû÷²ø(ùˆùèù€ú6û%üý,þÿì•%¨ŒëRÏTêyò#)ðа¡î9ÞV y N ß2‡"ûóøñäÀE„»Ï°“ZèU—ÿþZýdü¼ûLûûûúû3ûÿúúÖù!ùnøâ÷†÷4÷ëöšöaö?ööØõ¦õœõºõæõö0öŠöçö÷ñöÌöÈöçö÷]÷·÷1ø²øù›ù/ú½ú-û¹ûYü ýàý–þVÿíÿ~%áµu<:N1 > ^ ÿ y D BkGßÝ).ÇB|…¡øŒzƒai4cIõ©¾)¬2²í«åd´¯„¦ ÿ O R  šš Ø|>¬¢ÿþ"üøù­÷õÅóŒòåñ×ñïñæñ–ñ·ð~ï!îÞìÈëýêÅêÍêíê ëíê¡êÆé¡èXçTæÐåò忀ç‘è|é@ê©êºê’ê>êíéêé2êÙê™ëhì-í½í îaîÙîxï^ðWñfò«óíô öîöj÷Ë÷"øiøÖø^ùúúúïûèüÑý’þvÿ]2ÏB¸5ÁDÎbúš&usx Üúd7]u C ˜ } æ ÷‹Š/^ÏÇqøZ¬ç,8îXg#¨þVýˆü0üAünüˆü–ü™ü|üþûû4ú‚ùù¨ødø-øì÷’÷=÷Õöœö‹ö‰ö‘öÑöR÷Ë÷øø=øDøö÷š÷e÷}÷Î÷(ø~ø ù¼ùlúûƒûüŸüýXýËý‚þ^ÿA$J2ÐkŸ?üôC • Ñ í üò›é1±'¸Dܵ­ŒFõ~ùJ]@Ô5™t" 5š ¬õ»!é~·†‡r ˆ ™ Ò á ̬Ì'“è 1ðHÿpý‰û´ùñ÷jöEõŠô%ôïó óóyò¦ñ¥ð£ï«îÀíí›ìCìïëëëKêŠé¿è-èÛçÈç èèé©é@êêÕêÒê¡êyêgêŠê»êëQë®ëDìïì‡í0îïð%ñ3ò"ó ôÌôhõÐõöEö¥ö:÷Ú÷…øKù/ú4û;ü7ýþôþáÿ¼Œ!ˆ»è ;…û½™‚HæN:²ñsj¹Lî¶ 7 1 « ÌÇÆçv‚é[šŒ-Îfݤ—¾Ö‘ÊžcÿHþaýÀüqüœüðü5ý;ýüü{ü²ûÅú­ùÁø5øøø$øøù÷Ã÷ ÷‹÷M÷êöµöçöX÷¨÷Ç÷ï÷ø øÐ÷“÷‘÷Á÷øwøüø¸ùqúûûü_ümü”üþüÄýÕþØÿÓùT\ðYÈTçžÍ 9 “ ™ EÝ=awÛÒJq>‰uaT«P+Мw“óh÷u½°%¼ý3–ev Ø _  ¾ ) ;  Nã;hTÞûþÄü”úÈøl÷Šö(ö*öWönö!öqõmô.óßñ’ð|ïÉîaî%îÝísíÍìöëóê êxé,éOé×éêqë ì‡ìì/ìŸëë†êHê\ê½ê8ë¸ë ì„ìûì‘í$îÆî¡ïËðò-óñó|ôÃôÏôôVôWô¶ô~õŠö½÷ùGú{ûjü'ý¦ýþ±þgÿÜ/IdŸ07R6â³Üj¥Ö¿ž6 ' £Üjß±üvÊÀZ·XéØ,9íLND>ÿtþýýÚýÖýÖýÌý·ýpýÙüü(ûkúôùÏùÕùÞùãùÌù¡ù?ùØø†øGøøö÷ø7ø‰ø÷ø;ùDù'ùXù‹ùŽùwùsù¨ùúeú¬úû¿ûü=ý£ýÿý–þwÿ\®s{jýfí²u ú ) T M ¦÷5‚ôŒd{¯ðÚu’tAÈ.«{ˆ³å!ˆú™ ÑXÜÆTל“¯ ï „ P  ¶  8 Y m ¹Â¹ª6‹ÿ¬ýêûzú`ù«ø8ø"ø:ø?øî÷F÷8öõÀócò,ñ+ð‘ï;ïóî¨î$îyíãìLìÒë€ë}ëÕëQìáìWí”íiíøìRì¨ëë®ê¡êëžëgìôìvíÿí’îïmïßïˆðiñEòõòoó«óÍóÑóËóÏóô¨ô²õëö)øjù’ú•ûNü»üÚüøüQýËý_þÍþDÿ˜ÿëÿG ™hz’|3¯½Ac–"U䮾¯5PþxȨ¯î›jÏAÚ¹ëJ¯È~âõÒ¿ÿàþlþ6þ+þ6þGþEþþ²ýýCüžû>ûûûóúÐú¨ú]úúyùùÃø»øÁøâø"ù•ùúNúeúFúú ú úúëùúù@úËú_ûÏûPüòüŠý"þˆþéþeÿ"÷Èpá¢TÍ¡w}Œ k ^ Q ! ª ê Û EI\’¿²gqôCÂ:Ácx*ÍI˜ 6ê7r Ùù0Zž ä : ± A é ‡ ÿ h » ZRš“ÿ³ýrümûÜútú;úú¼ùRùÀøû÷ñöÏõÂôÔó ó;òŽñýðbðãïIïÀî/îÑíí£íæí1îîÁîØî¼î5î‘íîìaììÛë ì`ìîìŽí îgî¦îïuïûï‚ðñ»ñdòógójóUóAóFósóÍó‰ôŠõÂöø#ùúÉúOûû­ûÌûøûvüý²ý@þ§þöþ:ÿŠÿêÿg'1ÿzrIŠå-ӻġ8g+¸{a¾ã¾gèQ±ÇæGÌ"H…ª“n¤ÿBÿ*ÿ1ÿ'ÿ'ÿ*ÿ ÿ¨þþ`ýéü®üŒüküUüIü%ü®ûûnúú½ù£ù©ùâùEúÇú>ûtûBû ûÙúËú¸ú£úÈú ûIûŒûÀûümü¹ü ýˆý9þïþ¤ÿ]8Ó9Ž¢ó]ôÒ½¨±– w  œ F Ô , N – 8¿c9äPv•˵YÌ€ªîW§îOÚ<%¤æ7[p°¥R Ç X Ù 1 w ¿ q ˆ¾Fé…  þgý~üõû¦ûvû[ûûúÄù·ø«÷öŸõÌô'ô‡óôònòïñqñÑððeïïùîïHïïÆïÎï¨ïTïÆî'îŒí,ííí:í©í4î©îýîï1ïkï¸ïðŠðúð€ñò¥òó+ó,ó7óbó¦óô¯ôƒõö‚÷Køôø„ùújúžúÏúûœû,üÎü]ýÜý>þyþ®þÿsÿ¼¢ŽZÙÔjáuAo÷Ǹ‡C+áTÂklªî- Æ7™Øã*—ó ûÔÜÊšÿÿ•ÿ«ÿ³ÿÄÿ¯ÿ[ÿÃþþ˜ýUý:ý$ýýéüÄü{üü^ûÇúeúRú~ú£úãúSûÇûü!üÑûmû-û ûúúßúúú5û…ûÆûüwüêüWý±ý þpþñþÿ,´— ýuþ“2Ö²Õõã ™  ˜ & ƒ • ¡ Ú … 5îô÷´ÿíåuæ'iµ[XösÕ &!B±>¿ '   × _ ´ à   a˜–~Gö‡5ÿ þ7ý§ü<üüÌû–û-û~úpùNø.÷Iö…õÜô7ô¿ó_óîòjò±ñýðbðýïÇïÇïìïDðð¬ðtððfï¿î3îÐíŸíªíëívîÿîzïÂïîïöïð.ðlð·ð>ñÞñxòöòJóyó•ó£óÂóþó_ôóô¹õ¬ö“÷`øøøvùÔù-úhú˜úðútûüºüEýÈý9þŽþÆþÿUÿÑÿzMÄIšt±dA]ÒŠuNä¹B½K0]«êù¼céw.N•æùÏY¶ß k%END¨ÿÿsþðý·ý¤ý¦ý‹ýiýFýÿü€üÖûTû ûúú'û_ûšûéû5üZü5ü÷û¬ûhû<û?û<ûKû‰ûüûLüoü…üØüSýÉýüý4þœþEÿçÿ9l½7¢ûUóßáÁgýŸ;¹, ª C ö Ì º ‹ 2ŸÝãòNÐkæÑ…ìáZÇF =áŸE¡¼š;’¨¶ ŠDב)s‡ ‚ Š á N ° $ Ÿ6¸ùï©5÷×àÿÿiþÐýQýÕüGü”ûëúú(ù-ø=÷Œöøõ|õóô[ô¸óóŽòò‰ññÊððiðUðdðMððÄïcï ï§î€înî…îžîÏîüîBï…ï¼ïÑï×ïâï ðUð¿ð-ññò¡ò&óŠóØó"ôuôÈôõõþõ¤öS÷ô÷røóøyù÷ùvúäúSûÑûeüøü†ýþdþ¨þìþ8ÿ‰ÿêÿu&á÷,̆go±L(ù®$îsÖDæÖËîíÍqö˜PGc­ïÞYuš îÿSޝ¥cÙÿ#ÿpþÜýýlýrýŒý‚ýPýàüeüèûûEûFûuûÈû ürüü›ü`üîûû:û ûû:û‚ûÀû üNü“üÊüýCýœý þ„þÖþ ÿGÿƒÿ­ÿëÿUÒtLÁYÑ0²-ŒàuŠ R ö ¶ i  \ ª §A¡äJÒ@Xo²3ÍEƒ¨µ–Dê¸ÚRq‚\ÑàÏÍéDè Õ Ý º m Ù ú Ü ‡ =QÝwpV ÿÉýÙüOüüÓû¼ûŠûû#úôø’÷cövõÑôkô-ô#ôôÕóNó¤òöñ*ñ‰ðððð_ð–ð­ðð6ð´ïEïøîÍîÑîïYïÉï5ðgðyðpðið„ð³ð ñ‘ñ3òÙòó÷óOô„ô«ôÙôõYõÇõaö÷½÷UøâøgùÜùFú«ú)û«ûFüÙüfýÙý-þrþ¼þÿ[ÿ»ÿBà~î0B?JNo¹>âƒþ59ü§Gળè7~¨¯ŒHÿ³‰ƒ¢ŸuŠîdê§·ð*I>õyäÿ=ÿ·þCþþýýþþòý»ýcý ýÀü{ü`üjü­üêüýýýÉübüü´û û´ûéûüRümü}ü—ü¦üÕüý|ýóýtþäþ0ÿSÿbÿRÿ?ÿ>ÿlÿÇÿYåw‡%©#Ï™H½NZ_véš < Ê   · ¹ M¯ë:Fn±àÿÖÈÓฒ¯£×æ­H×_àXëmÁ è ä  ™ m … ¤ § ‘ K Ç  &ü¸¡ºO©5Bÿ[þ§ýýÄüoü[ü^üSüü;û,úáø÷dö‚õæô¨ôšô—ô”ôrô@ô×ó`óéò¡ò‰òŽò³òÍòÑòžò4ò¢ñ"ñ½ð‘ð¦ð÷ðuñòŸòó+ó,ó$ó#ó:ó†ó ôµôKõÉõ&öZöjö~ö†öÃö ÷›÷Oø!ùêù–úûûÐûÿû8ü£ü!ý˜ýþˆþôþ2ÿpÿ‡ÿ—ÿÃÿœ,¾B¾59534<\}~wd9ÜÙéV±öúšŽ9 .1ô’öSÿÿqÿöÿˆ’™ÿQÿ ÿÓþÃþãþ ÿ ÿÏþEþŸý$ýôüçüý\ýÏýGþ§þžþSþþ/þªþÿíþHþcý¤ü~üýþýŒþqþþ¯ýÎýcþ?ÿ'ün|U Y;ÿPþqþaÿYÅp¬€mêá­³Íë=IãÔoG&«Ÿ“£˜ÚªÖzáltÏFËýÆ’z˜Ï&S;úÆÊ6ñ} Š L  8 ‡ ¿ x ¾ÍñM!\¯thuâTû®`!Þž<ÎC©2Û·¶Ý èŠfÿºþþ¶ý`ý!ýýúüëüÔüºüœühü/üõûÚûÈûÉûçûüüùûÏû™ûeû*ûüúìú û*ûcû‰û‘û†ûkûSûFûWû‡ûÏûü1üGüYümü{üŒüžüÇüÚüæüãü×üåüäüÞüËüÒüúü2ýuý¿ýþgþŸþ­þ…þ0þãý¹ý¶ýåý0þrþoþjþXþ7þ?þ_þgþ>þ&þ9þUþtþ¬þýþ8ÿeÿZÿ.ÿæþ¥þœþ¿þãþâþÇþ»þÍþæþÿúþãþÓþçþÿ9ÿ;ÿ#ÿîþßþáþÿ1ÿWÿNÿÿÍþ†þhþdþqþ~þŸþÇþÿPÿuÿXÿÿÌþ–þfþpþ‘þ±þËþ×þÍþÄþ¶þ°þ±þÆþÒþÜþÇþ¦þ—þþ•þºþÐþÖþÕþÓþÇþ«þ…þiþ[þtþ°þòþÿÿæþ³þžþ¨þáþ4ÿrÿ}ÿZÿÿÄþ™þ”þËþÿ0ÿJÿqÿ‚ÿÿ…ÿ_ÿ=ÿÿýþúþ)ÿˆÿçÿ<pZ!Ñÿ‡ÿFÿ9ÿqÿËÿ"z¹áíÈuöÿ![x{tbRYX3ê Ö6$lqo†–Š”ä4q›£Ž`Q_‘ÉýP‡z='3Fj’¿Ê²¤“m\SHFF/%ñÔȽ´­†e< üÖ¸f4öéͦ‚['úÔ´—…wV5òÿÛÿ·ÿ‘ÿoÿNÿ8ÿ!ÿÿÙþ¸þ’þ„þ„þmþgþ[þTþGþ/þ&þþþçýÖýÑýÑýÒýËý¯ý§ý•ý˜ýý›ý“ýŽý‡ý~ýzýzýrýpýjýfý[ýSýVýYý]ýRýTýTýhýƒýýýŽý‹ýýŒýŽýŽý‹ý’ý§ýÉýåýýýþþþþþ#þ þ"þ#þ+þ4þKþ[þjþmþuþ„þ‹þ™þ³þ·þÎþÚþêþçþïþÿÿÿÿÿ;ÿRÿsÿŒÿÿŽÿ‹ÿÿ™ÿ¡ÿªÿ¬ÿ°ÿÅÿÚÿáÿöÿôÿöÿøÿüÿùÿ ÷ÿóÿëÿòÿýÿ÷ÿôÿðÿöÿîÿìÿáÿÓÿÑÿÈÿÊÿÊÿÄÿµÿ¯ÿ¨ÿ§ÿ¤ÿžÿ‹ÿÿ…ÿ‚ÿtÿwÿuÿqÿjÿhÿiÿaÿdÿ]ÿhÿeÿ\ÿZÿNÿSÿOÿPÿQÿRÿUÿ`ÿSÿ]ÿVÿgÿpÿÿ‰ÿŠÿ†ÿ‡ÿ}ÿ„ÿÿšÿÿªÿ²ÿ·ÿÄÿÏÿÞÿÜÿæÿåÿïÿ&'.:EYn„Ž «µÅ¾ÊÄÓâð    )<EDQYZX]hpst|z€}ˆ‡‚–𒓇Œƒ‹‹‡xnYWPS][YOP:?:>500 #"þìçÖáÚÞÐɽ¾Á·¸®¦§¦£™ŠtsiovcYJ:2/(/*$'  þÿðÿëÿãÿíÿóÿóÿðÿóÿêÿæÿåÿæÿàÿâÿßÿ×ÿÔÿÕÿÍÿÉÿÎÿÊÿÏÿÓÿ×ÿÎÿÌÿÎÿÓÿÛÿÖÿÑÿÔÿÄÿËÿÎÿÕÿáÿÝÿäÿéÿçÿîÿíÿìÿìÿìÿîÿðÿåÿçÿâÿîÿðÿíÿýÿÿÿóÿïÿìÿùÿøÿ   !%)-283810-/5:4:?<IJJLJQUJF?A;41+---0*,-,)% úÿüÿøÿ÷ÿûÿýÿûÿöÿûÿöÿôÿíÿèÿçÿÞÿÞÿãÿçÿäÿãÿàÿÙÿÛÿÞÿÚÿÜÿÞÿ×ÿÑÿÑÿÙÿÉÿËÿËÿËÿÉÿÆÿÇÿÅÿÇÿÃÿÄÿ¾ÿ½ÿ»ÿºÿºÿÈÿÄÿËÿÕÿÏÿÎÿÌÿÇÿÍÿÂÿËÿ¿ÿÈÿÈÿÆÿÅÿÊÿÊÿÂÿÃÿÆÿÇÿØÿÒÿÎÿÕÿÒÿÕÿÙÿÝÿÚÿÞÿçÿçÿçÿñÿóÿøÿöÿúÿøÿõÿùÿúÿ     !  ÿÿ    ÷ÿ÷ÿóÿðÿèÿïÿéÿíÿ÷ÿðÿðÿâÿáÿßÿßÿØÿØÿÖÿØÿÖÿÖÿÕÿÐÿÐÿÔÿËÿËÿÓÿÏÿÞÿÖÿÛÿÚÿÛÿÚÿåÿáÿæÿÙÿàÿÝÿãÿàÿêÿïÿðÿöÿôÿþÿüÿþÿúÿÿÿ     úÿÿÿ  þÿúÿ  ýÿùÿöÿõÿóÿìÿðÿòÿêÿëÿíÿîÿèÿãÿÛÿßÿÔÿÙÿÔÿØÿÚÿÛÿÖÿÞÿÖÿÛÿÔÿÝÿÞÿÔÿØÿÓÿÓÿÞÿäÿðÿãÿãÿÝÿßÿÚÿâÿñÿáÿêÿÜÿßÿØÿäÿÜÿáÿÚÿàÿÙÿäÿÞÿçÿëÿäÿáÿàÿØÿ×ÿÛÿÙÿÓÿÐÿÏÿÍÿÆÿÇÿÃÿÇÿÃÿÀÿ½ÿ¸ÿ³ÿ¸ÿ¶ÿ»ÿ»ÿÂÿ²ÿ²ÿ²ÿ±ÿµÿ³ÿ·ÿ¶ÿ¹ÿ¾ÿÈÿ·ÿ³ÿ°ÿ¯ÿ±ÿ­ÿµÿ²ÿ³ÿµÿµÿ´ÿºÿÁÿÀÿÃÿ¹ÿÂÿ¹ÿºÿ»ÿ¶ÿ¼ÿ¹ÿÄÿÆÿÄÿ¿ÿ¹ÿ½ÿ³ÿ¸ÿ·ÿ²ÿ´ÿ®ÿ¬ÿ¨ÿ­ÿ©ÿ°ÿ­ÿ°ÿ©ÿ£ÿ ÿ ÿ¢ÿÿ—ÿ—ÿ“ÿ”ÿŒÿ‹ÿ“ÿŠÿ•ÿ’ÿ“ÿ™ÿ—ÿÿ—ÿ˜ÿ–ÿ“ÿšÿ•ÿŸÿ™ÿ£ÿ¥ÿ®ÿ¢ÿ®ÿ¨ÿªÿªÿªÿ¬ÿªÿ²ÿ±ÿ¯ÿ°ÿ²ÿ»ÿ¶ÿ¶ÿºÿ¶ÿ¶ÿ²ÿ®ÿ±ÿ²ÿ¬ÿ±ÿ±ÿµÿ³ÿ´ÿ¶ÿ¯ÿ±ÿ³ÿ¸ÿ¸ÿºÿ³ÿ¯ÿ£ÿ ÿ˜ÿ‰ÿ}ÿpÿsÿmÿcÿZÿ5ÿ/ÿ#ÿÿ¬þþýý”þÚÿQ²zƒÿôþùþ0ÿaÿƒÿÃÿC²±NŒÿÐþŠþþüþ”ÿZ€„g/õÿ£ÿZÿbÿŸÿøÿE_-ÎÿoÿBÿRÿšÿêÿ)8&âÿÎÿÍÿ¹ÿ¤ÿŒÿŒÿ°ÿõÿñÿ²ÿ|ÿtÿŠÿ­ÿÁÿÏÿÙÿÜÿðÿêÿÌÿ¢ÿ„ÿkÿ„ÿ«ÿÈÿÎÿÿ{ÿpÿÿ¬ÿÏÿ×ÿÓÿ¿ÿ–ÿjÿ@ÿÿ3ÿnÿÃÿB‘ÿÿÀþáþ/ÿ—ÿÐÿäÿéÿßÿ®ÿdÿ7ÿÿ!ÿ ÿóþÿ€ÿEõÿKÿ¯þ™þÿ¡ÿÈÿ‘ÿOÿOÿ¶ÿàÿÿqþPþ#þ³üfúnøÚ÷§ùóü¯ÿ{4Éÿ‰ÿ|ÿ<ÿsþhý;ýíýøþÌÿÄÿæþÐýÿü‚üŽüòü8ýµý™þ…ÿ¿R'‡?q£‡£ÿéÿ1”ÿyþÒý,þÏÿS£«T½þàþ«ì«r1|þðþf…æjýgûü±þFŽíti?ÿ5ýüÿü¿ÿh…ÿMû”ø úùþã¢Pÿ^üRü4þ:ÿÝýŠúÀ÷Žø´ý©ÞòaþÅûüþü¹üGüÎüAþ+cdtÚÿìûù ù}ûÊþdãºæüêù±úÿ>Ä%êýoøÓöZùýhÿïÿtÅÑL>ýøû¦üþßÿ'ë¼ÿÊþçý#þSJÈ ýÑúìû–ÿ]—ÿQýÿý¥yå`¡ÿ•ûŒùðúÕýÿOÿh©"A¹ÿmûcù)ûÿù" l…ýÖýŒÿÃ[þÞýpþ7ÿÔÿËÿBÄc‰ÿ{ÿÉÿzÿùþêÿa¾ûý£û4ü*›cýþ)û_ü +ë þ‹úRüÆÿ þçœýéùøû‚¦º÷üÃýt#‹>ýúúºýù,ðþÿýÿ²–™û3÷çøC‹•z«ýIþ ¸­þ úéøOþ(&xlþšü×þž9ûp÷{ü΢ RÙÿÄúîùIý#­UëþHý&þÉé­ÿCü ûˆü1þ³»ÿ¬û.ý¯:ÿIþ_ýþ«Ø2ý½ú–ýBËüù†özøZþ\Cnû…ùqü·éDžÿ8üYûÕþëÄVdÿ¨ÿ´OTÿüþ„þÿwâþ±B ë7˜Ïÿ£—‡cý–ûÕüäÿŒ[µÞþþ`“‚ýbIáþ~þ ÿÀÿÿHÿÎÿ‘fÿ‹ýýÁþ÷ÿéï[“íq–Î~.Xÿ©ýIü‰üÁþO¡êÿÔý¦þŸbŠþ`þ“Ñ@vƒëý¹ü\ýµþÆÿ0ÌÿXÿhÿùtPÓü—ûþ€jítÿFÿUË­ÿ.ýDúõù–ýT#ëýÂùPü§ÍÚîÿ`ü„üâ«fTÿþÓþÙþoýýƒÿ.6uÆþ$ûeûâýSWßèSâþÐüÄûïûáýÅÌî,"Øý±ü®ü+þ3sCì ºPþäýþCÿu.ï¾r2™—þÛû°ú¶ü€‹¼'Æþþ4—yObòÿ‘ýdýþ×þÿÿ[ÿ ÿ÷üWÐÿÒþeþÑþSÎB¸QÿbýPýéþ'o”—ÿÏõ¨-¸þ„ÿÇ,†¡þ³ÿ„‹[.ý§ùûSÿµ2If)DN ü(û>þÔ¬`´ÿqý¹þsx ÀüèûÈþg€5þØýàÿò-Œþóþþ°˜Vãü1û;þ©"…þ†ÿ¼ÿ|ÿ^ÿ-ÿ ÿhÊ~ÒØ×ïþ¦ýPþþÿýˆ§ÿÁü…üMþì‰1Øš¿ìÿêüdý•ýá<|¼ýoýwÿ­»®ÿ1þ˜š›G’þÃüpýŒÿØRŠÌøÌÿÒû.úãû˜ÿaKY˦ÿ‚þ¥ý™ý,þÜþ<ÿ”ÿ«é;=Þëýüú×úuüSþ§ÿÄÚ`-ýÑûåü¢þ«ÿ·ÿbÿPàFôFÿWü;ûåûfýÔþ÷ÿŠ Ã9(Ÿþüxûvý¬û˜ª¾[~ÿèýýÖýÿ„ÿ‘ÿuÿPs-• 3üÍúiüG3ê-÷{ý(þlû}ú³ûâý€ÿaž6¶†cÔþýûü?þ¬VguÄÿŒþþÐþfþàülû˜üýÿ™ûm‘¶b⪪ÿ,ÿ@½´øÚŠÿÕýÉý|þØþÄþÿ’ÿ6ѦkkÔKÞ’&ÓÿVäo¨Eÿíþ8ÿãÿïÿDÿëþGÿ —àygÿ–þSÿ,£ëÿBþýuþ,˜rëÿöÿ©a:ÿŒþ]þ­þšÿ>‘Mgã7Ë1ÿÏýƒýuþæÿ„Ѵ̳ÚFÿÍþëþïþÿ­ÿOÜ–r}] ¡þ)ý·ü?þç«¿Åe>¿ÿ}ÿjÿ¾ÿºnD£=0wJòÿxÿŠÿ šÙ~e=Ä®ÿñý©üÝü{þW]lðöÙx’ÿÆþ±þÿE,Õÿ6ÿcÿuÿóþÉýÌüºüäý³ÿÞ‚¨~àöÿÿ7þ"þÿi€<bÊW²þeýýrýüýœþdÿ˜Ð¾~øÿðýàýlþOÿ âPü‡ÿþÜýpþâþÿšÿKÕ]ìS ·þ:þ{þóþÿ™þIþšþqÿS¢3ãÿ ”5Ï€ÿšÿ2± òÿ ÿ`þþþÙþXY6„œÿ|ÿÇÿ2)óÿúÿÄáˆ-=’evÿÿÉþàþ ÿtÿÜòÿËþ‚ÿh»~@[Ÿúõ;8ÿÕþÿçþkþUþùþôÿ½ù§¢ª~-f¼ û Ù“g]GÁÊ`phËКÓáSsQË)³i;75†¼Ž -Xˆ»ÔÙÓ½Ž%™KF6îÿF=dÝù®eƒÂ ÿ„ (:üÿ‘ÿ†ÿšÿ|ÿyÿÖÿ=U@i¥ÞFP¶Nñÿ­ÿœÿºÿv¶Â‰H™ÿ-ÿ ÿcÿÛÿúÿìÿóÿøÿªÿ=ÿÇþwþrþ°þÿdÿ“ÿîÿ/€ÿ¾þOþ9þjþÑþÿÿîþÔþáþ®þ*þpýýýQýýìýøýúýÓý‹ýýéüêüöüêüçüÙüåü5ýšýâý™ýÜüüµûÜû8üxüü•üÂüþüêüüRü!ü0üRü«üìüùü÷üíüøüý&ý^ýwýuýqýVý+ýæü«üzüŠüÏüðüÙüˆü(üüGüâü†ýæýþþþEþ¥þûþÜþ}þIþVþ‹þâþÿþÛþ­þÿþ^ÿ[ÿ'ÿÿEÿªÿ/¶ J˜å 8¶2ckkyŽp¶Ü‹yÑ(õÏ[~’¥FD3ÿìÿ.‚Æñ2t­ŸiT?å‹ú) !  óò # 3  ÛíV ± Ç º × B Å < u š z C ú ˆ ƒ pçú¬ÊÅ¢žç$óÌ ?¸^ÿ‹þ€ýGü#û&úEù™ø@øû÷÷ ÷×ö×öàöÚö«ö˜ö™ö¥ö»öÌöÙö÷öþö÷F÷{÷ ÷Œ÷€÷_÷/÷ööÀö™özöoö¤ö÷Š÷ì÷*øbø²øöø+ù6ùGùNù&ùãø£øiø-øì÷Ù÷Ý÷øƒøÞøcùÿùú²ú¸ú¯úÂúÁúÓú³ú€ú6úúÝù¬ùpùAùùùDùŽùÍùéùúOú€ú”ú°úæú$ûSûjû‚ûû°û¡ûƒûeû[û,ûòú¶úˆúBúúú*úMúúèúVû­ûü4üvüÁüýgý‹ýàýPþ»þÂþ©þ½þöþÿ ÿIÿÈÿ&{ä`Ü-q¹ x ´.‰Ûsù˜Y® ^ ¦ ‹  ƒ û “ J C 7 C _ d b w Ñ *{©ßSƒÌHÝfÁ @s²äï©Cµûhƒ • È.´\`ÿâ¼y[{©ˆ-êÈ‘J8ÿþ|ü¶úÍø÷•õ~ô¯ó5óýòáò·ò¨ò™ònòò†ñvñ°ñò]ò­ò,ó¹óô ôô*ôCôzôµôõŽõ$öuö©öÑö÷r÷è÷wø8ù6úBûQünýWþúþeÿÏÿaädÍ9›î&j¶‘¢7–×Á­o©T5õ®{GêDŸ³^ ÌZœÿ¸þÕýÞüÔûÌúëùVùÛøSø·÷=÷Ëö4öõ¾ô2ôÍó€ó&óÊò¡ò‘òƒòZòXògòsòxò’ò¿òÓòÍòÙòõòó5óFópóÎó5ôôÍô3õ¾õPöÌö_÷øæø·ùZúôú˜û$ü“ü ýý þ”þÿþ†ÿ™ùG¡þB}Æ"…å%UsŸÌ *Zv±ÌÖÓÔÚÝߨí>- üTŸß)WªûAƒÚB z ª è V Ð + ¢ 3 Ð >   bÖ7›9¹Stx<Jp’HÊ ‚ Z @  fôšHò©@ÙZŸ½µ›zÿ9þØüûCú*ù øðöödõÖô9ôŠóÖòòyñêðdðõï¦ï‡ï‘ï¿ïðGð±ð,ñ£ñ'ò¨òó˜óôrôµôåôõFõ‹õëõdöîö‡÷IøùÄùsú!ûíû¨üYýüý°þlÿþÿš-¿QÑdë@Œ¹Ë­OÞ‘[MTS[~³àêâÕ±z ž…l°bÿÄþþQýü´ûöú3újùŸøÔ÷=÷Âö>öÒõŽõsõPõ2õõõõ õ-õ"õõæôÁô¢ônô2ôôîóøó ô6ôtôÇôAõ¿õö„öóöw÷ñ÷\øÌøPùÚùdúûsûéûqüÿüzýÞý=þ³þÿZÿ‚ÿ¶ÿÞÿýÿ-PŒà,zÆS¡õKÁõ#EGJS`I+!Jt€¨Ùì9[mŽÞcæF­AÏ J ‰  ƒ È ’ ? ž Þ A ä pà ’\:ä6(ø®*/#Lx= ´  ~þrœRA/>4‡# ž·†|²ÿ ÿ:þ>ýÐûúø'ö­ôÉókóóóóvôåôÌôôùòÈñÓð4ðð4ðñ9ò‚óŽô?õ®õåõøõÚõ›õsõ~õ­õÜõöPö†öªöïö!÷m÷Ü÷yø6ùýùÑú¡ûrü^ýþÉþGÿ½ÿ8·eÏa¥0«> ˜!—¨si‹Û,„ä8_l™|pf?ësã.d˜ñÿvÿÿþ@þþÃýpýîühüÔû,ûhú·ù&ù¿øaøøÞ÷Ö÷Ú÷Ð÷»÷½÷¨÷÷V÷5÷4÷*÷%÷!÷.÷C÷@÷8÷6÷I÷h÷`÷…÷Å÷.ø†øàø7ùŸùôù2úaúŒúÉúÿú:û‚ûæû@ü˜üàü1ýtý§ý¢ý–ýýªý¸ýâýþLþyþžþ¬þ³þÂþÚþÿ@ÿ‹ÿÙÿ <—²|cŒÊü1q³ï#_p}‹½î&m‘–ÀZvŒëWµ©D×Y·û; ‡ È  ] š ì N À ÷ V Å M ¼ 'ê}Æ;[Sú\ÐaôU  Ù : • Ï ì ù<™š.Ö›D¿Kn¤yñÿsÿÿþ€þÒýöüþûû3újù©øó÷`÷çötöìõXõÀô*ô®ó@óóäòîò4óžóøóIôšôõ_õ¼õöõ<ö–öööF÷“÷Ø÷9øvøÄøìø1ùrùÀùúSú³úûqûêû…üý±ýLþõþÿB×}(ÈVÃ#fŠh>Ù¦„fcnˆŒ›«ÁÉÄÌÐÜÊ»§~?ôžOþ¬Iû¥NÖÿYÿèþzþþšý;ýøüºüuü ü¥ûDûêúúúÑù¯ù²ù±ù½ùËùàùáùÝùÑùÒùÎùÝùâùú>úUúkúsúxúsúeúbúbújú†ú±úìú!ûnû¥ûÒûøûü,üüüüü8üdü¥üÖüý$ýUý{ýŒýwýhýUýQýEý^ýŸýÖýèýþ?þþwþPþ9þeþÕþYÿ¼ÿÑÿxÿ ÿBÿÓÿ G· ûþöíÝÃËùU‹ËY`b±‘ÐíéÿF‹Ò÷.’]­.[´ A6.xÜ. „  ¦ ÿ { ê D ¨  N Q w X Æ # † Ú E Ÿ(¶8•½¸ËøK³‚Ø—:à  Á,hÅTã«SÀ÷ÿíþ²ý[ü8ûoú)úú"úLúˆúºú”ú<úÃùcù3ùùCù¥ù0úÒúeûîûLü‰ü¦üµü¨üŒü\ü*üüôûÖûªû¡û·ûÔûÚûåûüû#ü@üWü”üöümýéýeþÍþ0ÿgÿ”ÿ¯ÿ˜ÿ‹ÿ‰ÿ«ÿýÿW§â1Ï‚X.=~¨ÄÒÚÆ¡raO6 ùÿÑÿ”ÿ;ÿÐþfþøý¾ýšý ý”ýŒýwýsýHýýàüüUü.üüúûôûþûëûÝûâûðûßûÛûÐû°û‹ûûaûvû²ûëûüû üüðûóû üüüWü˜ü¾üïüÝüüNüiüü¨üØüûüóüý&ý÷ü ý@ý0ý ýWý—ýZý]ý¾ýáýíýþ þÌýÝýïýÈýGþóþüþ¹þ³þ²þ…þþuþ6þxþÿ:ÿPÿ’ÿÚÿ°ÿdÿ8ÿÿ ÿÿÿ ÿöþ8ÿeÿ`ÿrÿƒÿnÿcÿ”ÿ®ÿÇÿ!BGy¬œ¶Í!±Ï«zŽØã¢¸ðÊ×`hÈ-jr·ô A· 8’ÝÎÁÃ}5Ho~¬åFLNw©¹÷   ÉcõjÈ…sO!2"ᤊDâ‘oR;7ö–Fòxô—hPC./è7íÿ€ÿÿÈþ™þfþ[þVþ*þ þúý÷ýÐý˜ýjý^ýfý…ý{ý†ý•ýÃýãýþþ/þ.þ&þþ,þgþ°þÖþñþÿ!ÿÿÁþ©þvþhþdþ_þVþ]þkþ†þˆþuþqþrþDþ/þoþ¾þÅþÑþ+ÿaÿ9ÿøþðþÿþ÷þÿ6ÿHÿÿÒþÃþªþ€þmþ0þÎý¨ýÚýùýäýþ?þBþ*þ þ þÈýVý:ýýñý÷ýÅýeýý&ýRýbý=ýFý{ýsýbý ýÄýŽý:ý;ý ýü¼ü.ýýÀüÇüý0ý<ýýñüúüðüý-ýcýuý3ý)ýbý¡ý†ý1ý=ýbý"ýü¦üfý=ýý_ý‹ýŒý†ýÍýÞýôý#þþ þGþÃþàþƒþ6þôýŽýZýjýÓý%þþ0þ›þðþòþqþ5þdþ€þþÉþíþ£þæþcÿ¡ÿÿ\ÿAÿüþ˜þ¶þÿÐþ±þ÷þVÿûþÿÕÿ]E# edìÿ`ÿ3ÿÿÞÿ'äÿÐÿ&›û[Z[˜Ê”žûר¯™ £äâ4$-;$;cvcc ]0¶öéž!´¨pTYSl§Ã²è6:EŠ´ž{Ä覔ùAî0-ìëóÞÈ9Ã-60ÈZT„НÌhîãË:¯¤À1Ÿšz—ÄvIú˾ª‚‘nßl|Ù  õ±iæµØÍkÅÿ‡ÿÿ¸ÿ×ÿºÿŠÿZÿ ÿèþÀþïþÿXÿ£ÿÌÿÿÿÿFÿ®ÿ°ÿbÿÑþ•þjþRþ¢þ ÿ®þ%þ×ýÒýÝýõý~þ ÿâþŽþþžþ"þ©ý$þsþkþþ½ýÍý×ýþþøýÒý þhþ|þ^þ„þþeý§ýþÂý6ýÐýxþ=þ‡þÿŒÿêþ÷þLÿœþ9þpþHþþJþÒþ‡þ þßý‘ýfýý8þUþNþYþKþ¬þ‰ÿ<ñÿÿÅþfþ_þóþ¨ÿ¹ÿ‡ÿÏÿpÿÜþ¹þŸþÞþuÿªÿ•ÿ(ÿªþÄþpÿ3N¨VwÿhÿZÿVÿPÿ‹ÿ¬ÿÞÿDüBsÿ”ÿ@*ÍÿšÿXÿ!ÿÑÿÙÿ̰aÃÿ@ÿ7ÿëÿ±êåÅx[ôÿ‰ÿ«ÿ¨ÿÿ‘ÿAÜÿ6ÿ%ÿÿCÿ"éÿVÍ˼ÿÿ¾ÿÍ7˜ÖÿŸÿŽÿÿÿ¶ÿ¬ÿèÿok ÿ`Î,‘ÿEp7ÍØŽÓÿA»y…/1E7”iÝÀàÿÜÿp™(ÿ¿ØÈQÕh˜'öZcò¥k‚z¡é­ãô͈`Æ¥‰û*ªäó’yS*1xA3v£¬ß7‘VD7?´éÀ)Ó:]ǃ`VdO -žõP‹«åÔ¹íÌcK ø¸x'œÿÖþnþòþóÿa‰Ù7öø›³ÿ©ÿq{˜ÿœÿñÿ'âÿ¸ÿÐÿ6‹YE‡…· nÿþtþlÿ>³ÿyÿbÿœÿÙÿêÿÿÿ…ÿÿ¿øL.•þ•ý>þ×þêþƒÿ ´Ù4yÿ˜þÁýþ ÿ­ÿPÿZÿèÿëÿ¯ÿPÿ;þ‚ü¯ûeü#ýCýÄýRþÑþDÿYù1!+O9ôþØÿ¦ÿµÿÖÿÅÿeÿÿëþyÿìÿÿ^ÿÊÿW5ʘ¤¸V=qSyhŒ+ŒD'¹ÿÝÿeÄ—ÎÿÑÿ:87>,w¹” F¶ÿ3ÿÿ7ÿÁÿ#e¯¹=¢ÿÍÿ¿ÿƒÿqÿÄÿ 5—²ÐÿÿîþuÿÆÿLÿ?ÿèÿ_$C\oÿvþvþ;ÿ0ÿÿñÿtÿHÿ±ÿ%ÿ¥ÿ%¡ ÿ ÿT0ÿ’ÿAÿLÿÿ™ÿöþ¨þ³ÿõÿ—ÿÉÿdåÿ•þ4ÿ,þÿ†ÙÏGÁU” HÿZÿCÓ;89ÔpežƒÿbɹÇÿ<˜FÝÿêÿˆS)Ó¤ßïn ¸ÿØÿ.V‰ ãÿïÿæÿ†ÿ¥ÿœkp[ÿE= %gÿ$žÿ\ÿÜÿVÌÿÆÿ~Ûh‹ÿ³µ†™C ? Wÿÿ…ÿq¤(ÿÿ'ÿ®þãþÀÿÇïÿqÿÇÿËÿ:N{§«ùžÖÿùþNÿR`ý ‡þ½ýþpÿHá¥Þÿ’ÿ#A—·Jÿ°þÀþbÿõÿ¶|b1ŒþÕýRþ“ÿ1ÿ<ÿ žŸ«`¯ÿDÿIÿoÿúÿ:\kœ¨ƒ‡Êÿëþ8ÿÍÿëÿiÿÄÿŽ"æÿõÿñÿ,ÿÛþ JÛÿÄÿÆÿaŸ¡dýÿ<ÿ…ÿcaÿ‹þÿêÿ=Ÿíÿeÿ¡ÿV•Æ™ÿÔÿ ÿ1ÿ”ÿ"ÿ«þ”ÿš‡ÿÿ4ÿ[ÿ•ÿWÿH{ÿ †œÿcÿôÿ,’ÿ¿ÿ:^B;øÿâÿ ìÿÿ1”ûÿBÿgÿÈÿGÿ$ÿqÿ½ÿòÿÖÿ¨LÝÍÿxÿrÿ@þÍýŽþ?ÿùþ*ÿ¸ÿÙÿÖÿ•ÿÍþ¤þSÿl¨ƒZ˜¦'–ÿVÿúÿp ¡ÿWÿ¦ÿäÿàÿ?ÿ•þ”þÄþvÿÜB\“ÿÔÿ20TÆÌÿÓþ)ÿ˜ÿçÿºQ„ÿ:ÿmÿêÿýÿìÿ(M~\Ùÿìÿ®ÿiÿ<ÿ`ÿóÿ—ÿŽÿ½ÿûÿoØÿËþ)ÿÁÒ>zÈUÿ2þ`þ™þ³ÿ¼Hyÿ²ÿ¡¹ÿŽÿSÿSÿíþpÿ¦⟴ÿ ÿZÿ‘ÿœÿÛÿY9_¥HüÿqÿÃþtÿ* öÿ*jXW†ÿ}ÿ&ÿ§þ(ÿŸÿ¼ÿsÿïÿ»‘Oµÿçÿ?&#¥ÿûÿÜÿ~ÿ²ÿÿkþ/ÿøÿxïãÿìþUÿ,ÃÿÅÿÿ'ÿzÿ1(Òþ¸ýGþcÿçÿãÿçÿ¤ÿIÿø—-ÿÏþpÿµÿõÿLh‡îêÚÐÿæþ•þáþÉÿ0€’ [ÿ›þÿúÿ­»ŒGâcÛ²‘‘ÿ|þÄþ ÿEÿºÿóS–ÿ»©ÿÌþ§ÿ°ÿ¾ÿPéÅÿ×þ;ÿûÿÿLÿüÿÍwz«ÿNþþ`ÿ<kÕÿ¡ÿv:övb3”ÿ~ÿáÿ>1 ½ÿ¯þÌþ×ÿ€þÿþ±þåÿqWå½³£v‘ÿÙÿª¡êÿ0ÿYÿºÿô„Ñÿwþ þÓþ0\ÿTÿ²ÿòÿqÔÆÌÿ%ÿ.ÿ*ÿÿ9šÿ®ÿ—šûÿyTÿˆþ)É=â'¾ÕÿSÿfÿ™ÿXÿÿ[ÿ‘ÿúÿÓÿ“ÿÄþ×þuÿÑÿÛÿÄX3Á;7Õÿoþ5þÀÿƒvižB%ÿ}ÿéÿÖÿÇÿ;ðÿKÿ¬ÿÐk½&£ÿ ÿ“ÿýÿ@ÿÔþ©ÿH=¼ÿ±ÿQÿ.ÿ4ÿaÿ¯ÿЀVÈÿÐ:\oÿœÿØþNþ•ÿ¹/µÿÁÿ8Äÿkÿ©ÿ=/ÓÖÿ†ÿùÿÙÿ£ÿ—ÿwÿûþdÿEpõÿ£ÿkÿeÿ©ÿ¯^ö%+ÿ5ÿÄÿ¸ÿÿþdþ0þæýbþíÿ{ñÿá1M}ÿ ù"]TËÿ«ÿŠÿBÿAÿ®ÿ ÿôÿãÕîÿ¸ÿÓa[ÿðþkÿ ]f‚ÿ3ÿÿM-ÿdÿªÿ1J©¤œÿmÿ¬ÿšÿ½þÂþ¥ÿPqaIûÿ ×ÿ«ÿŠÿ©ÿ/¿‘—ÿËÿ©ÿ ÿóþ#ÿuÿ`ÿÿDÿèÿ@†OÿŠÿ_Éÿ^ÿÊÿÊÿ¡ÿ¼ÿš­ÏÿŸÿ'Üÿ¸ÿ§ÿgÿÝÿ‚Àÿ¬ÿC÷ÿÔ5Žÿ:T: »ÿ!?ÿ“ÿAÿ>ÿ{¤ÿºþ-ÿ†ÿ˜ÿÆÿ èÿ0ÿGÿ¡—wV{ŽR][>–ÿ½ÿ½gÕÿ œ|"?ÓÿÿþþWÿ¦ÿy.÷ÿ."2VrÕÿýÿÙÿEÿùþàþ¼þ•þ©þÍþVÿúÿ8=IF“·½¢ƒu‘ÏéMËÿèÿíÿ ÿaþHÿéÿQÁ ÎéÀoI/p÷V1°ŒlÿèþAÿ rÿÿþkÿ ¡?Úÿ¼ÿãÿßÿGÿÐÿ=¯ZýÿþÿÂÿôÿžMfÿÿµÿEèÿEÿþþÿËÿmSëÿ¤ÿ 1 1™ÖT@™HgÈd¨ÿÃÿ²BwÿùÿDÿƒÿ™{¿ÿÿ/C»ÿÂÿ fW’ÍTåÿýÿ}°uŒ/Sÿªÿq±®ÿÿ^ÿÜÿ„ðœÁÿ‹ÿäÿ+½æguŠ:¸ÿ/ÿwÿ…ÿhÿ—ÿ"ªÉÌc6–|äÿ—ÿ¼ÿŽº—¡N·ÿŠÿ¯ÿÎÿ'ðÿâÿóÿí2+Ðÿ‹þÞþøÿ—ÿ·þ²þƒÿÝÿýÿ9òÿÜÿ{ÿÄÿíÿjVµõ ¾7zÿ…ÿ’ÿ“ÿ¼ÿÅÿ)úÿ>ÿ}ÿl²ÿóm­éÿdžËÿ­ÿ©ÿtÿïþGÿLOÍÿ#7i9ZÿÇþÇÿñæ¶ñ:‰šÿ´ÿÜÿ6„ÿÕþvÿ‚ÿ¦ÿ IcâÿÎÿ³ÿMÿøÿ6[qwÿ¶ÿB’ÿÿpÿ<(Ìÿðÿ6òÿ¤ÿqÿ—4åÿöÿg/7Ñÿ„ÿÿ_ÿ 'ïÿ]ÿƒÿ€ÿYÿrÿ‹ÿzÿsÿ6ÿ$ÿ,ÿ[þãüQü`ýþÖýcþ)ÿEÿoÿoɠ⽬Ÿ"ìÿXPo'ÿgÿvÿ¦ÿ‹Ѓfø®ÌßYàØþ×ÛÿLá{F¬ö›r¾žùÿ{ÿ¾3mÿœÿ~Dcÿ|ÿÉÿ®ÿXÿ?ÿŸÿÿOÿ^ÿ™ÿûÿÿ‰ÿâÿ3ÿKþþÿ ÿ€þyþÊþ4ÿ¨ÿ Xÿ¸þ ÿ ˜æÿ4ÿÿÿ0¡ÿUÿHÿ§ÿRy :ÿ ÿöÿOÒÿÄÿ­ÿÿuÿíÿæÿ¬ÿIÿ…ÿ…QåÿŒÿ£z,:†yÿ˜ÿ±ÿ¯ÿ®ÿ:<ƒÿÿ«ÿ’7ìÿìÿÕÿ«ÿàÿV§£˜¬¶‘UbF6+A)ZÊÿ£ÿ¡‰ûÿ²ÿs¼TÚÿÍÿÎÿñÿãÿÈÿ†ÿíÿ©ÿùÿ6 ùÿ\ÂÿúÿKÒÿ~ÿ:ÿnÿ9»ÿQÿiÿÚÿâÿ²ÿùÿûþ‘ÿÀø›Vãÿxÿ©ÿ+ôÿôþÔþíÿRåÿ¤ÿÐÿÌÿªÿ¿ÿ/ýÿçÿ&X¹ÿ©ÿòÿ©ÿÿæþMÿJÿÿuÿ´ÿg*­ÿ½ÿ#Âÿ²&vÿ[ÿ Sïÿyÿ—ÿ —ÿüÿ¿ÿ¬ÿüÿÌÿyÿ©ÿ*›ÿxÿÒÿCžcQf¶Ý‡‚(õÿçÿÔÿªÿðÿÑÿ1ÿfÿJÿÄÿÙW9ðÿ†ÿ"¯bÿaÿ¸ÿDÿYÿ²ÿ½ÿñÿ  ÓÿUO1ÚòÿpSªÿoÿÒÿ›ÿÅÿ>¤CÕÿûÿÝÿhÿHÿÿ, ·ÿ;6ïÿÌÿÑÿ¦ÿFÿ'ÿÄÿßÿçÿºÿ˜ÿêÿl$:ÿ ÿÎÿ?Ùÿuÿ$ín^ÿžrÿ“þ¯ÿÚÿõþµÿØÿ6ÿ'ÿÏÿbÿ’ÿGËÿÂÿp±mk%$ÿ?ÿ¬ÿbÿÄþ“ÿíÿÿÜþÂÿwGebÚÿÍÿZ¼äŸ÷ÿpÿòÿêqïÿ[ÿcÿ±ÿ©ÿÿÿާóÿqÿïÿÉÿ›ÿ®ÿ¾ÿYÅÿÿiÿÿÿÕÿÞÿØÿ·ÿ½ÿüÿìÿüÿûÿTZ«ÿˆÿãÿ#­ÿ ÿwÿÚÿ)RÿZÿ‹É¦ÿÿÅÿ7?<ÿBÿºÿnìÿAÿAÿ?¨ëÿÔÿäÿt‚ÿOÿhÿŸÿ¬ÿæÿ®ÿÝÿôÿºÿ½ÿæÿ+ÖÿkÿTÿ³ÿ ROÿVÿèÿÂÿÿ ÿxÿ.ÿvÿÉÿ£5Ý(üÿ~ÿaU}ÿÍþhÿçÿÿ)(vÿÿÿmÿ¾ÿòÿXÑÿàÿ­ÿ&ÿ›ÿ¤ÿ¯ÿ¤ÿëÿ õÿ &tíìÿ;ÿJÿ ¥œÿºÿ>V±ÿ>ÿeÿÿñþyÿŠÿÿFÿGÿfŒìD¢ÿÞÿÌÿ|³üÿØÿ¾ÿùÿ˜ÿ°ÿ¡ÿ7ÿÿ`ÿ¦ÿµþ>ÿ)1žÿ!ùpìÿüÿ_‡ÿÿÿ¯þ•ÿ–êÿ0ÿÈÿGÙÿCÿÌÿZÝÿ3ÿÒÿ5¤ÿãÿ¾|eÿ°ÿ‰˜—ÿ1ÿq‚Èÿìÿ‡Â¾ÿuÿ¹ÿIÿ5ÿÓÿòÿ&ÿÖþcÿÈÿèèÿ[þÿë Øÿ¥ÿMºlÄÿèÿêÿ3íÿëÿÿ2v`dÿ Ñyÿ’ÿpá_e£xáÿvÿÇÿïÿêÿxÿhÿ^ÿ–ÿ³ÿ®ŽÐÿëÿóØóÿvÿßÿFaRÊÿ°ÿžÿàþ.ÿðÿªÿ©ÿ-Ùÿ‡ÿ>Ƭ>ÿÜþŽY_ÿÖÿ5;ÿ%ÿa#«ÿ@Š Eÿ%ÿ+r#³ÿïÿ[Z Mÿ^ÿjÿ??ÏÿzÿÿÇÿ¤D.µÿÞÿ3ºÿBXwu‚®þÿÈÿ‹ÿUÿŸÿ€ÿÀÿêÿÌÿ9ÿÿ™ÿD¾x€ÿØÿä¢êÿfÿ%k…ÿNÿÒÿR4Ÿ ÿ+ÿüÿËcÆÿËÿîÿS‡ŠCHÿ5ÿÅÿñÿ&"®ÿÃ’ØÿxÿàÿÎÿ]ÿžÿ7®d¿ÿ¦ÿÛÿ%tÿnÿÆÿ\£—ÿxÿõÿGÙÿÿ[ÿ'ÿºÿ/Ðÿˆÿy{ˆÿfÿþÿHUÿ:¡{ÿÕþ {öþ¤ÿ]¥åþ#ÿ#O„ÿPÿ—E2#ÿ‰@þÿ¾þ£ÿÔ[´ÿ¹ÿuÿ¹ÿßÿzÿÐþÿ,àÿþþIÿAbqÿÿÇÿßÿ5ÿIÿþ¼<êÿ ÿçþ“ÿøÿØÿ•ÿ¼ÿÙÿ9h32œÿ7ÿ4ÿ‡ÿûÿ ÚÿØÿJÍÿ'ÿeÿ@ÆCRo½ÀÿáÿtežÿMÿÛÿ¨b|ÿÿ;Õÿzÿ‚ÿqÿAÿ†ÿ¶¿ÿ®ÿÏþÓþ&þýàuhÿÉÿ!L‘ÿ›þ¹ÿRžÿÒþðþÚÿøÿeÿ¯ÿ„ÿ¸þNÿvõÿüÿ¢b·ÿ·ÿIÿÿìÿãÿ|ÿ+ÿiÿ#6èÿ×ÿvÉþAÿ·‘6ÿÅÿã\ÿ+²ühÿæþkyüþ»ÿŒÿAÿÿ—þ ÿÙÿH¿ÿtÿ\ÿóÿ­i9ÿÿñZŸÿ²<JÿÖÿ6Áÿ8ÿqÿcšÿÿþ„ÿïÿBÿ‰þîþÜÿ&á6#xÿ;åŠÿ{,wÿ á kþTþOÿcÿUÿÄÿÚÿÿÿëÿ™éÿÞ¥$<Ðÿóþ7ÿ„ÿ¿ÿÄÿ•ÿoÿÝþhþüþ…Tvÿâ|ôÿ.#“¨ÿöÿÂØ©ÿOÿ{ÿÿ¼ÿÀÿÐÿÝÿÚÿ¶ÿºŠ9ÿÑþøÿ÷§< !Ràÿ°ÿ†ÿõÿáÿ•ÿ2bÿÿTÿäÿÊÿpùÿBÿ¢ñþpÿ¡Wÿ–ÿÏÿäþ ÿ)È~3$gªÿÇäþáþDfEÿzþSÿL®þÖþ¶ÿØÿ¤ÿÄ1¾ýÿ²‰îÿ†ÿ`јÿIþÀþF†ÿ€þÿÂû?ÿŽþ0¢žAÿÙÿ³ODàg'¶Uÿ˜þ(þûþÑÿ/ìÿyÿ¹ÿtÿFÿÿ£ÿbÁÿÿIKÝÿúÿHàÿsÿtÿšÿéÿØÿÊÿeÿÿ7ÿ9½"zÿuÿ×ÿË–ëÿ>ÿÿUÿûÿzÚÿáÿEiùÿÆÿJÿÍþbÿÎ@¹ÿÿ¸ÿb§äÿkÿHÿ[ÿ•ÿøÿÇŸTÿâþÅÿjpaÿøþýþëþ¿ÿDñÿXÿ‚ÿ4žÿRÿàÿ¹t>ÿ0ÿ üÿeÿÿ†íáÿaÿîÿêÿâþNþœÿ¿«ÿ3ÿàÿŒðÿÿtÿQ‘E_‡ÿ¡ÿöÿqÿ«ÿUÃÿýþ)ÿ†ÿ“ÿ}ÿ¢ÿ$-Öÿtÿ!Q‹ûcuÿ­ÿ>Êÿôþ9ÿÍÿxÿÜþÿêÿA‡ÿpÿ½ÿsÿ†ÿùÿˆÿbÿàÿ®µÕÿéþQÿ£ÿRÿ8ÿäÿ9ÿÿqÿQÏUßÿ)ÿÿ(ÿÀþÿØÿÿEÿÖÿ îÿ¬ÿåþTÿõÿ=ÿ@ÿKI»ÿþÿ:”ÿÄþJÿÝÿ|ÿÝþÿÔÿÿÿ÷ÿÅÿ­ÿ•ÿoÿzÿ2/ÿwþGþûýÈþı.Mþ·þ?»c&´ÿÌþÿ¨}­ŠÿÄÿfîÿRÿoÿÿ|ÿ ד³NÁ¯þþÿæÿ.Lÿîþâÿ¶ãz´ÿ0çU"ÿÿE:F5žÿ/ ÿdþ1ÿ=îÿ¡ÿíÿ–ÿÄÿåˆóþ#þQÿ8ÿÛþ¼ÿûÿLÿ{ÿ0÷ÿúÿhŸÿ!ÿñÿ0¼þrþ±ÿžÿþòüÎú¾øYúÝþ/¼}ÿ5ÿ”ÿVa­~8ÿÊÿ/ ÞÿÙ‹~bÿÚþþcý®ýìþÐÿ]uOde•‹__;´öÿ!ÿøÿÎ'äÿ>¬ÿ¤ÿÈtÑÿéÿZ‡ìÛ°ÿÆÿÀÿÁÿgÿ_ÿ¬ÿKÿGÿÊÿ‹ÿJˆRRÂÿoÿ…ÿ±ÿxÿÿGÿ#ÿÿÿÿœÿ§ÿtÿTÿ¥ÿ±X˜ÿkÿöÿ:zÿQÿ¦ÿ±ÿi'0ÿˆÿ-)IÿÈþªÿIŠÿÚþ¼þ¼þ‡ÿI5Þÿ­ÿßÿ#ÿÞü‹û€üéþ­&ÿþªþ»ÿ_&a cYÿ ÿ´ÿ+—ÿ{þØþIÿGÿ…ÿÊþcþÔÿóñÿ«ÿ–“9t#E‘ÿÿ„ÿÕÿN:Œ¼eÍÿ¶ÿ¯ÿØÿ¦ðÜÖÞ9|ÿèýýGýìþYŠqÿÿGÿÝÿ@ÐÿzÿÉÿ$ šÁ‡A#¬~úÿMÿ×þ·þ:ÿ…Z§jÿøþÌþŠþ3ÿáÿ"ìÿ ÿõÿ@n5‹B~‹¥ÿ#ÿçÿžíÿ.ÿàÿØÿ ÿÿ–Š£ÿÿ8x&ÿ(ÿ—3ÿ‚ÿÿÃþsÿ»/ÿ8ÿsÿÿÒþ®ÿ%\ÿ}þDÿB™ÿÕþÿWÿ©ÿóÿÃÿYÿÿØþ@ÿÌÿSÿñþÔÿÌÿ°ÿ&O(–ÿÿGÿQÿYMFWTxìÿRÿŽÿèÿýÿUäŠÔÿ]êÿdÿÙÿÇÿ/ÿžþóþÊÿëÿÕÿbª¦ÃæÿÉÿIØxŸ·É7Éÿ0®ÿiÿ«ÿøÿˆÿ°ÿ’ÿÔÿdŠ=ŒÿÜÿüÿÿ¶ÿ&€ º:¶ÿÿµÿ…ÿÿ™ÿgÿ=ÿÜÿž±ƒ_gsºÿ ÿYÿ/›ÿ«ÿQÿçþmÿa¼ -ÿ°þ[ÿPrC‘åíXSÿõþžÿÞÿÒÿÄÿ‘ÿðþ4ÿµÿþþ‚þÑþ¼ÿˆÇØ Šo"Ýð2rÈH[\¯ÿ£ÿªÿøÿGÁÿ«ÿ™ÿuÿ4ÿïÿäžô½ßtÞÿ¢kÿjþÈþjÿúÿŒÿ:ÿ ÿ9ÿ/ÿ.ÿÿ?ÿ†ÿÿ£I6¬µÿ¾ÿæÿÓÿœÿ}ÿVÿ“ÿîÿžÿŽÿ§ÿÊÿÅÿüÿ‰¶¨ÁL à ‰o½ÝXqm~9«ÿ¹ÿÿÿõÿÉÿðÿ£ïñ›ÛNeãÎÜ~¾ $ž³¶Å{ Þÿ#Ehr‘u§§5¡ÿDþ5ýÙýGÿ³ÿ@ÿ_ÿóÿA_)òÿ)E&Sÿ`þ#þgþ–þ¤þåþ.ÿ'ÿµÿÛ“iá£Ìû²•Å Ï“ÖbªGv‘‹¡ÚÔ³fãR3_Š£¯ôBRPiYñF”0ÝáëŸdWóÿ°ÿúþËþ÷þ=ÿ—ÿùÿD|¡Nåÿ×ÿÿÿ9º¤•´w.èÿÿ‡ÿÿ…ÿzÿáÿZ¨’rM-èÿÿdÿ„ÿÐÿ"7üÿÁÿ«ÿi]Yp–äùµ•˜aÛÿ¾ÿƒÿ`ÿdÿ¦ÿÍÿÁÿ­ÿ“ÿ3ÿÿþOÿÆÿ)˜ MpyM³ÿšÿzÿPÿ7ÿHÿ<ÿ'ÿGÿ]ÿCÿ>ÿCÿ.ÿ9ÿgÿ±ÿ>€o@ýÿùÿøÿçÿðÿ/{µÆ¦‡vnD îÿôÿéÿßÿ6C<^˜—sNF4 $&ìÿÇÿ³ÿ¥ÿ~ÿhÿŠÿšÿ­ÿÊÿçÿçÿãÿóÿûÿðÿþÿ7pj]iŸ¹«‘cC)(JzŸ½·Éß)Y€¬ë*s´âMjhRo›ÄÓÚäôÿø õÿ 7Kp´#6NF=NYZFQe£¸¤}iBÆ´ÓÊÀÆèñþý Ap¬Ï N’rb>ô³y@÷¼i6ù•»i"Ço­NÚÿbÿÖþYþàýGý™üü‰ûìúNú­ùùøØ÷L÷Ôöhöæõdõõ­ô^ô ôÃó‰óYó%óóýòîòóòó,óLóoóÆó0ôrô¨ôõqõºõíõ=ö›ößö(÷p÷Á÷û÷2øøßøù`ù±ùúWúŸúéú8ûxû¢ûÅûäûüüü ü'üü6üWüOüVütüžü–üŸü¢ü¬ü¬ü¸üÆü²ü¶ü½ü¿ü¾ü§ü®üÌüàüãüýmý¦ýÛý þ•þÿþoÿÛÿG˜ôjò…åOÉGªßB¸B¯ †(ÏX Ú „ Y  Ô ¤ _<þ¿u©Aê›` ­Xæ[¡ìCú3cœé0H>0âVŠ€hvnDÑ . s…[ÿ!üåøÉõäòGð î5ì°êTé7è4çWæ€åšäÚãIãýâõâ9ãÇãä唿çœè‡épêRëFì8íUîïÖðò]ó±ôÍõðöô÷ ùúAû«üVþêÚââ»   t¶åíâÁ„?Ê0Z:Ï B"ÍSº N n •”‹_Cÿ=ý-ûDù{÷ìõ ôlóròñäð;ð”ïÜî@î©íí¤ìLìþëì/ìbì|ì¬ìøì*í8í?íKícíaímí“íÂíúí6î±î@ïÝï„ðNñLòRónô–õåö5øzù¿úûûýþçþ¥ÿ/›âDUdmdHÑnàÿFÿ©þ þgýÍüHüÔûmûû×ú«úxúfúZúSúbúmú‘úªúÖú û9ûmû§ûËûöûü>ü`ü…üºüþü]ýØýGþÔþjÿ©?æ”j* A~È „  |È,› ^ç Š»M ¡!#„$ê%'6(y)³*Š+ó+ ,+‚*Ð(}&¦#b ºdÇž 1 ¦þú öò|î-ëgèÏåºãâá àkÞËÜfÛÚôØ]Ø7ØŽØ?ÙKÚ‘ÛÏÜòÝÏÞsßîßJà­à/áþáBãå@ç¹é}ìïò|õ9øéú’ýCÝŽ\6 öÂOue¹Q ~!~"i#%$Ÿ$Ÿ$ÿ#Ù"-!hweEQ{ É IÉYÝCþûÝøöWó·ðUî=ì`êÃèGçëå´äã„â¡áÔà&àÂß­ßâßjàáøáÙâÉã±äšå’æ{ç‰èØévë]í„ïìñô;÷ûù”üÿMT4í- š K†”qø1 šé7( ë   `†¡ ¤þëü^û úæøõ÷)÷`öŽõžô–óaòñÌï îŽí£ìâëYëûê²êzêPêêûéãéÏéÖé êyêëÕëÉìöí1ï„ðÔñ6ó¦ô3öá÷×ù÷û8þ› †Ðò â y ÎàØ­x8êÓ·™f‰:´_;U~… °!Ô"ý#î$ý%+'2()à)À*H+;+¼*Í)r(x&Ú# !·_ç²0 ¦ @¡Âþ‰úmö…ò•îŸêÈæ°ãïà_Þ5ÜNÚêØÑ×ìÖpÖYÖ©Öˆ×ÇØIÚÜÕݧßYáâ§ãäVåæÛæÖçBéë(íiïÉñLôãö{ùìûGþŸ8Ôx* × Œ1™ìæ«?¾ "*#($Ê$ï$‹$Ï#—"¹ TrYùŠ$Í lèíý÷úý÷õ,ògïÄìSê2è?æ…äãâDáµàGà àà-à£à9áâêââãå^æ¢çÑèúéë/ì<ísîÉïdñ0óõQ÷Âùiü ÿŸf­È · fòkÇêÈlàø¨2Š¢–i,Ç= w AÃ*ÿ1üFùcöÌó–ñÀï6îÞìÉëîê6ê’éîèrèõçžçnçWçUçbçeçmççƒçˆç§çÞç5èÒèé¾êþëVíãîkðøñ„óÿôröÛ÷JùËúWüþÎÿÄÐÏÒÏ ± a ™gµù.÷)2î§rG3$H‡ Ú¤{"ɨsVoB >!û!p"¦"C"Ÿ!F sy5îxϾ T À& ÿûÄ÷8ôÓð¯íwê‘çæäµâÐàíÞMÝ$Ü–Ûy۾یܾÝgß5á÷â›äúåèæ¯çè^è«è&éðéáê=ìþí ðFòmô§öÔøû=ý;ÿb€ß2‡ á :8Ër¸"juS × Ø 1 H=ÃÝ­ V PQ^‹ýÉúCøÃõ`óñïíVëÔéèWçRæzåÌäVää ä älä÷ä±å¦æºçèèêAëeìí¬î°ï˜ð‰ñ¦òýótõ÷åøëú*ýzÿäA¦é  ÎUm+‰‡ €µÒÇQ)ö Š ù R•®µŽxþ>üîùx÷õ˜ò4ðöíðëHêþèèuç"ççç ç#ç4çXç{çŸçÂçÿçMè”èÊèé©éQê9ë*ì_íÁî^ðò»ó…õ>÷óø‡ú üýèþ.Z…Ä aÇ@ Ç U Ô G£í õµ>ŸÐÇ¥Eâs;Ê»ýHjU?ØHëÙó,)õƒ¤h«¬DSZ´ Pc¯8£ ¸ I¾%ªüþø±õŒò7ïïëîèædäiâšàJ߬ÞÞÍÞXßWàÆáoãòäEæpçVèÎèâèõè÷è3ééê#ë›ì‰îÆðócõ‚÷­ùâûþüÿ¼ºÈ1 F L<(ê®n ¦TlGŒ,0¯Æk¢V. < ˆp÷þ¬ü–úø•öôò¶ðþîdíôë›ê[é.èFçæ$æàåÖåæsæ7ç4èEéfênëzìxíbî,ïÇïjðñ¾ñµòüó‰õ;÷<ùnûÛýlýq¸ß æ ¿ Y²¢^å2H…Îü*HA ç ² h á1O]MBþKü{úÇøB÷ºõô^ò¬ðûî;í„ëúéÕèè ç@çüæèæç*ç3ç+çPç¡ç.èÃè|éVê>ëìòìàíïðñ4òšó õ®öEøðù¨ûIýìþrçêáí  g « þIƒ¡™•h†©ÃµŽ=Û¶žÎ<h“Éu€dÜô2Ë<Y{R£ëí%ôo$¼…ð+r¥ Ñ Ã ¾þfûò÷wôðÁì‡éßæÅäÐâá+à½ßšß‘߯ßsà:á%âãïã åÞåpæ†æ¾æç9ç¦çè éŸêvìÅî/ñ·ó%öqø¹úÌü¾þzS@g¢Å  JiXG-ÿ ì+- U‚÷'-T ª >ë´„rÿ‹ýšûµùÌ÷Øõÿó.òsðÞîdíìµê–é°è5èæç»ç¼çóçièé¯é\êîê‰ëì›ì"í–íîŠîGï'ð\ñÛò¡ô¦öÚøCûÕý<C ¹ # L *ézñ=I¹,‚À ù    Ë|‘öHµþEýëûoú±ø÷¨õBô¶ò ñšï{î²íäìæë!ëuê êžé)éÑè¬èÇèöè?ééøéfêÓêGëãë¢ì›í©îºïíð]òÚó^õÉö(øƒùòúWü‡ý˜þ˜ÿÁßÚÇÛ/Bx Ö , o ª‚Ý»7&ý<®ì+tÖ=¶™b?á7 f 5 Ý‘º“ú<Ð=t ˜5÷ Ù mšý!ý‡ùðõ8òBî¨êÉç“å…ãmáÔßñÞ–ÞnÞQÞ£Þjß•à®áÁâÅã®äLåaå'åÑä§ä½äüä¦å»æèÍêQíÛïCòšôõö#ù$ûéüÎþé@¶*§  ‡ËôóécÿWx? ; 4•ƒ'‰²Ð!Ç · Õó(‡ï`ÿŠýžû°ù×÷öOôªòïð†ï*î÷ìàëôêDê­é<éëèÉèßèéPé†é«éÝéê=êHê_ê¢ê&ëìëí‚îmð©òõ¸÷cú ý£ÿÏÃpùW| g 4 å ƒ é   º s  ® 5 Ô f  • ù5ZK&è¿°ÆíÿÿþŒüåú6ù™÷¾õ§ó¶ñQðdï|îí˜ìïëvëëˆêêÝéÉéõé8ê—êýêVë«ëñëhì íÌí|îDï@ðqñ±ò÷ó;õ~öº÷éø ú6û*üýËýÕþU«0òØà ¡ u @êU’Ò¯öïÜë>É`ÆLöݯ¬¯J é u!5"Ç"Þ"¬"H"5"ê!;!A ÃB×Gn¸,b0¤  r ÿÝú ÷Nó‡ïÃëèdæ¬äãNáFà¼ß…ß:ßäÞ߯ß|à$á³áWâàâãÛânâ â¼áÇá!âöâBä æ`èÞêSí’ïÐñô;ö)øú*ü…þ`'ôÀ ™ cö[rmEïsœ  ·¶-cmWçϲ I ë € 7 ¯0_þÕüû)ùy÷çõ|ôó¶ñ{ð[ïVîEíHìgë¡êêwéðèqèè¿ççJç#ç@ç¦çbèQé©ê`ìzîÃð óZõ¦÷Æù¯û?ý¥þëÿ  úÒŽ4§1Yc†¢ß V…©°m3×]¦¸à Õ`ÿjþoý.üÇú[ùøàö¨õmô;ó<òñíðkðæï\ïáîWîÑísíLí1í:íiíÓíxî/ïËïBð©ðñ›ñò‹òäòdóôõÿõ÷#øRù¢ú ü”ý%ÿ·V  ð ® VÎ ùªO÷¼¦ª‘iG9Û“SI g!e"’#Ð$ß%¹&I'Ì'Q(}(-(¼'F'&ˆ%-$Ò"T!¦Ü‘¶Ä†L• w öþ-û(÷\ózïXììéÂç¼å»ãcâ—áÝààCßÙÞàÞ#ßVßMß6ßòÞwÞâÝüÜ"ÜqÛèÚöÚeÛrÜòÝÕßâä7æuè°êùìïdñÓóËöñù.ýg•¿½ š Cªî µ ªæ° -Ò¨†¶÷?nº×Ĉ¢ - › ó#W‘³Úþñüûù5÷SõyóÃñðîí¼ëŠê[é?è@ç]æ¢åå¸ä«äáämå?æOç›èêëäì=îï¸ðÇñÖòÎó´ôõgö>÷ú÷¥ø*ù×ùxúûÔû˜ü˜ý«þÊÿù ;X>ùa ÁË­l3$ ÚyƒÎæï÷*aÿ˜þ¾ýØüðûýúþù ù/ø\÷ªö5öòõÍõÄõžõtõLõõô!ô¥óóŸòOòò(òTò“òó±ópôLõ=ö/÷:ø\ù­ú*üËýdÿü¯S­Ý@ 8 " G ¡ 1 âe0ÔùEÌfù*Z "J$ &ï&Ã'2)Ó*Þ+Ø+S+%+Í+Ì+ˆ*D)p((C'ï%U$–" !õ:Rƒ¼ó ',€ÿüÎøöókðî4ìzê†èçŸå£äØãÔâÅá‡àuß3Þ¥ÜéÚ#Ù§×—ÖÛÕlÕTÕÁÕ˜Ö´×ÖØµÙ½ÚÜtÝÑÞ!à¼áîã¾æšé^ìWï òösù†üÿb…x+ ª ÷-$»ÙYÜ9ÞFØ`ÀUo] s£ë4_VL[yv?ËNº ö  ûÓ™x`ÿ%ýöúÄøµöÃô´ò³ðÚîbíìîêðé$é¶èèRèèãç¹çžçŽçkçUçvçÌç%è–èé‘é êêßêësëÐëOìÔì|íQîbï¨ðíñ%óLôwõÌöø4ùNúYûœüþbÿ€’Û@¤áGk{X)ÃF¸lÏFô·x$ç°bè>€ÿ½þþfý±üõûKûÒúgúþùˆùùØøÏøÓøôøWùïùµú†ûEüýÇý‰þ/ÿ­ÿu319If³<Ð  i Á Ï€<í³b Å R!Ž"´#¿$³%¦&j'ë'o(Ù())Ö((r'Ñ&º%$-"8 N7òÎΖ Nr3âsþ?üWúÝø9÷kõ¦óòÊð7ïoíÂëêèíåØãÝáÞß ÞvÜ`Û˜Ú×ÙGÙÙ ÙټرØäØEÙºÙdÚqÛêÜ¢Þ—à¸âå“çêÀìï@òðô”÷AúÑüÿ#³;Š¤È õ < [ žÕ&c—©’tMõ†ïH¢ò#FB5×xÝ'OGW”¹ Æ ÉÅÚâÿDÿýûûú?ùøçö¾õ½ô¨ó˜òñ~ð„ï}î©íÑììEëêèé@éœèõç7ç‚æçåcåþä¯ä‚ääÉä+å–忬æ8çèáèÔéËêÒë í}îöï`ñ©òûóZõ¹öí÷þøú(ûHüZýWþCÿÉeóqÓn¸!¡…ópÁÒ¿©Žn9ÄsAÉeص©§Îg„‹®¶ŠP!l×Nû™P! Ï b  µ } y ‰‘»ä#34GSíîìíÂqŽ#P89ûn Ò¯T¿ÌU½ x A 1á2°yÿtþ[ýü˜ú|ùŒøy÷ ö¤ôoóÜñð<î}ìÆêéŽç8æ<åläºãã½â[â¿áHá áÒà¡àŠàÁà`á6âãAäšåçºè{êTì;î'ðòðó½õƒ÷ùeúŸû¬ü‘ýwþiÿM.)!5xÀÖóÿ  ! # õ ´o'Ú'°CÓI¾@K9íxÞ*B1 ä– E ü ¯ ]#  .o¡ÿ¬þ ý•ü˜û ú—ù‚ø‚÷’ö¤õ¯ô£ó¤òªñ—ðfï:îíìë#êDéèìçTçÆæqæ>æöåìåüåPæÔæ‚ç(èÚè«é¥ê§ë€ìIíîùî ð ñãñ¾ò¥ó•ôvõ;öýö—÷BøÚø{ùúÂúoû1üýÌý«þÿ`.ò«\¼EÍKÐB­ä $Nf¿ü6 ë C r Œ z † x d M m ¿  ‚ Î  v ý Ž |ɹ•Dܧd<á1Ž4ÇJ¯-ávÖЂäó[‡§ Ö'<‘û’ K Xç6•5ˆÿ‰þý®û úÆùÒøt÷öåôÁó¦ò2ñtïÌíìsë!êàèõçFçÁæYæäååoääÁãMãÙâ¥âàâqã3äêäÆåòæzè êbë¾ì0îÍïVñ¬òñó$õWö÷œøtù)úûßûÕü°ýmþPÿy¨Á´¬ÍðÚ•I  é Ì ž ] 0)* ¾zs»Ó¦d °Fm…Ÿ¶ ± ” ‹ § à LyÓ-z®½Öòÿ"þPýuü”û®ú¹ù¸ø®÷}ö;õßó¢òLñðäîÍíÂì·ë¶êÜé,éjè¡ç ç¶æ¥æ©æÉæçiçåçsèöènéùé‰ê@ë ìÌìíbî>ï$ðäðñ òÁòUóéó_ôòô•õAö÷Õ÷ŸøˆùZú@ûüöüÕýªþ‡ÿyR6÷Í–7ÒfêfÜT Î H Å z µ ä å Ü È ª Ÿ „ ” ¶ í 0 e ¡ ò R Ž Å #²C­Å€ ƒä…þXÇT°¹Næ=dšÏùõÝÅ·•$œ÷0R(áWÃP¿  ^ œ5/µ]r©¸ÿsþ0ý"ü1ûLú4ùê÷Ëö¦õ‚ôMóÒñfð ïìííìôëë>ê¹é?é«èççç€æäåvååÍäÚä(åÙåæ(çÿççè êë ìí1î^ïð´ñ¼ò²óÆô®õ‡ö7÷ê÷¬øvùeúLû/ü7ýXþ{ÿzfG0ã²€s~… … € Œ yUÃRÐ7rŽ€H˜ ^³aÁ  e Ñ E Ç  j ²S¦¿<l ÀÝÿöþúýóü·ûŒúYù+øñö°õ†ôcó<òãð“ïtîOí9ì'ë.êŠéé·èZèèè2è?èHèXèŸèé‡éñé„ê,ëËëgìí—íî˜îï¡ï?ðÑð[ñÿñÀò„ó ô¾ôsõ0öûöŸ÷Yø:ùúûü ýþ+ÿ032íÁŸ‚FȆ  — ú [ £ Î  ; a Š ¢ à  5 @ > R † © ³ Ê …ø<h¹IÖ"•DË ŒÅf¬‡ánÔÛä.~•JߣX¯µ¤ò[^åwZA ß ; ÍœÇßúY¸á·ÿxþ8ý9üFû)úÝøª÷ÄößõÕô~óQò[ñJðTïiîíÜìì€ëæê=êéÜè>èãçœçoçAç|çûç¦è3é°ékêEë/ì×ìíEîïöï´ðYñòËòŒó4ôçô°õwöA÷øùíùÒú²û‘üvý^þÿíÿ¶ŽtO@@LSes † q Q  ã zâ<޼±ža&ë§eÅ c ¯ B É G ¼ " Ž Ü3‡Ò]±ä!Qw–œÿ¦þý‰ü`ûúÏø¡÷köõÂó”ò‘ñðïŒîÈíí„ìâëWëÖê†ê`ê3êêüéê=êSêwê°êþêMë¥ëì|ìïìvíõí_îÎî?ïËï>ðÂð=ñÎñkò$óËóuô3õöÙö¢÷€øsùkúGû<ü@ýMþFÿKC62(ΰƒ1Àa  ë H “ Ü  E l ” Í ü 8 r £ É Ø \sˆÂ+n¢{å%„‰ý`ÎQÛm¿èŠÓ´¦ºöåog+†£ðqÛ½Œ”ÇÖ ¿ ž q q —Áô6•é6ŒÍÙ«™ÿ¤þ}ýKüKûnúƒùiøq÷†öŒõpôdó~ò¤ñÞððCï™îùí>íaìŽëÿêŽêê©éŽé´éöéCê§êùêSëºëììöìhíÜíYîþî°ï;ð¢ð0ñÜñò,ó¹órô>õöêö®÷hø;ùûù³újûüÇüŠýdþNÿ;/2R\O8õ¶c ¢ % ¢ p ± ç 6 L ] c i ^ ^ L  Ù ” 7 Å B Ç L Å = »3‘é<˜Ò5i‘oÿiþpý`ü"ûãùÒøï÷ÿöîõÞôâó2óqò‰ñ“ðÑïOïÌî0î›í+íÞì‡ìOììåëÐë×ëÿë0ìSìwì¿ìídí•íÀíîŒî÷îGï¦ï-ðÁðMñ·ñ9òÜòó#ô¿ô„õRö÷Ú÷žøvùNú$ûãûÇü²ý þrÿZA+ ܳ‚4ê†!¤ y è L œ å G › Î - h § ë - g ¥ b¿/sìP—àCÆD¢g¹#[p™ë+8PÙ ðÛŽ;È6™nÄó1>; 1 ) # b µvÊ%±ª‡j‰Åÿáþþ\ý¬üïû ûCúKù(ø3÷rö¬õúô8ô„óæò.ò:ñ1ð'ï?îzíÍì?ìáëÎëÑëÊë¸ë¤ë¨ë§ë¼ëÇëùëCì¯ì$í˜íîeîÎî6ï®ï'ð«ðJñò½òhóôÂôbõéõUöÊöT÷Ø÷Zøéø“ùMúûãû­ü…ýbþAÿῌaà“Nÿ†ûxí_ Ä 0 Œ ë 1 q Ž — — „ a  õ  … F  Ì n  —'œøOÄB©ÖeÏ:ÿ’þíý'ýUüŒûÛú7ú~ù½øð÷6÷ŒöÓõõfôæóVóìòò!òÂñdñ(ññ¸ðuð@ð3ð7ð%ððð6ðkð¦ð ðÇðñ_ñ¹ñò^òâòbóÖóMôÄôDõÄõ?öÓöj÷ø ø`ù"úÇúiûüÅüŠý&þ¹þhÿ5þ;æ›>ËWô‘/½B¿D ½ z Ê o Ü - o ± í @ š × î _®Üä÷-y¥•‹¦ú1j|vŒÎé îÄryûpê M Š × Z Ö ' E ûšÿJ¼Uûb¬ôS¶ ñÿÿÿ¸þ\þãýRý½üRüÙû?ûúþù’ùù^ø—÷ÝöDö¦õíô<ô¶ódó'óÚò–ò^ò<òúñÊñ•ñvñeñbñ}ñŸñÁñáñò@ò{òÀòóIó¾ó3ô™ôóôKõ´õ öEöyöºö÷m÷Ì÷(ø—øùùÿùxúíú‚ûü™ü<ýÄý_þãþ}ÿýÿ~ïf󆟛$”ì;—ë(Ka~š¢‹zkUR5 â»…MÅ^Ńÿ‡ÉbåsÅ]–ÿ'ÿ¹þDþÆýAýËübüðû€ûû¬úEúßù†ù3ùÕø€øPøøç÷«÷~÷J÷,÷÷Ùö¼öÁöÖöäöúö"÷]÷…÷½÷î÷'øqø¾ø ù^ù¾ùúoúºúûIû¥ûþû\ü£üýhý¼ýÿýHþˆþ¹þëþÿFÿrÿ±ÿìÿBl…­»Ìë<\‹ª¿ÄÐãèü ,Gd‚œ¢¯ËØëñý (J\Zh–¸ÎßûC‹ÂÓég–¶×SÆñ Et…•œ±³ÊÄ»Ÿ‘‰c=0(ÿÝÔÊ©xG ñ¶„Z" Í“Z9ÞŸg*ç§Uö–Bñš)Æÿnÿ"ÿÕþ„þ8þóý²ýiý ýÝü–üZüüÒû™ûoûGûûëúÍú¸úŸú‰ú„úúú˜ú©úµú´ú¹ú·úÃú¾úÁú¿úÉúåúû û1ûMûdûƒû¢û¾ûÕûùûüOüxü£üÃüçüý ý9ý]ý‹ý±ýíý&þMþ{þþ³þÐþÔþãþëþÿÿ#ÿ.ÿ=ÿ3ÿ;ÿ*ÿ)ÿ,ÿ?ÿRÿcÿyÿ‹ÿ™ÿ¦ÿ±ÿ¶ÿ¦ÿ·ÿÆÿÚÿäÿâÿýÿ ùÿÿÿ! ëÿÅÿ¾ÿ´ÿ¡ÿšÿ˜ÿÿÿƒÿqÿWÿ6ÿ+ÿÿÿ ÿÿÿÿÿðþÏþÂþ·þ¥þþ~þþzþdþVþFþ2þþþýåýÖý»ý®ý«ý¦ý•ý‡ývýmý^ýUý;ý=ýBýNýYý^ýbýfýbýdýbýgý`ýtýˆýžý¥ý¥ý´ýµýÊý½ý¶ý¾ýÑýßýçýòýÿýýý þþ þþþ$þ8þBþMþ]þtþ~þƒþƒþ–þ þ¸þÍþâþÿÿ4ÿHÿPÿdÿeÿ|ÿ‘ÿ¢ÿ·ÿÐÿíÿ"-4GXsޝÓó2Tm©ÎðIq™Èï7R‰§ÐðB_~”¬¾×æþ"$8AA<=40÷ûÜÑ©oG)㿜r[/õ½†a$ùÙ_6Ù¥~T&úÿÎÿ¬ÿzÿUÿ(ÿýþÑþ«þ‡þ_þBþ%þ þíýÕýÃý´ý—ýýpý]ýHýDý3ý0ý#ý ýýýýýýýýýýý+ý3ý(ý1ý(ý,ý5ý<ýEýLýUý`ýjýrýwý„ýŠý˜ý˜ý—ýªý¯ý·ý¿ýÇýÌý×ýäýìýþþþ*þ5þAþTþZþfþpþ|þŠþ¢þ³þ°þÆþÑþâþòþÿÿ+ÿ.ÿJÿTÿoÿ€ÿ‘ÿŸÿ²ÿÀÿÚÿßÿìÿúÿ*/GMakt~‹“¡®ª·´À¼ÄÁÅÒÇÅÅÌÉÁ¶«¥˜“„zulaWMC3( úÿèÿäÿÍÿÆÿ¯ÿ ÿ‘ÿŠÿpÿiÿVÿNÿGÿ0ÿ"ÿÿÿþþýþãþÙþÉþ¾þ²þ¦þ›þžþ‡þŽþ~þ~þhþlþcþ]þVþVþOþNþGþFþDþFþCþEþGþMþUþ]þeþuþ}þŽþ›þ«þ²þÃþÊþÚþïþùþÿÿ5ÿ?ÿYÿfÿ{ÿ”ÿŸÿ´ÿÂÿÙÿéÿýÿ *5HYr|Œœª·ÉÙâîþ)2?ARR^`mo}Љ’‘“’“œžœœ•Ÿ“”މˆŠ…‚zƒuwloa^TPJBAIJ1%  ùîÜÑÆ·²¢—™v]YB:*ðÿîÿåÿÑÿÐÿ¶ÿ¹ÿ¦ÿšÿ–ÿˆÿ{ÿrÿcÿbÿgÿVÿKÿ>ÿ=ÿ@ÿ9ÿ3ÿ+ÿ-ÿ)ÿ)ÿ'ÿ*ÿ,ÿ*ÿ+ÿ0ÿ2ÿ9ÿ7ÿ9ÿ;ÿBÿBÿJÿGÿUÿZÿ\ÿbÿ`ÿuÿrÿzÿ}ÿ‚ÿÿ™ÿ ÿ¦ÿ´ÿ»ÿÎÿÜÿãÿíÿõÿÿÿ 9HQV^hm|‘£¦«¹³»ÀÃÂËÙÑÕÙÙßÜÝØÝÚâàßÜàÚÞàÜÞáâàÝÙÚ×ÐÇÆÁ¸¹µ²©¦šš‹ˆ…~||y~smmliia[XX[S\UUXTOMFBA;9/,'ùÿòÿñÿîÿãÿãÿÔÿØÿÇÿÌÿÅÿÄÿ½ÿ¾ÿ¼ÿ¸ÿ´ÿ·ÿ¯ÿ¶ÿµÿ²ÿ¯ÿ±ÿ·ÿ¨ÿ²ÿ¤ÿ±ÿ¹ÿ±ÿ¼ÿ»ÿµÿºÿºÿºÿ¹ÿÀÿ¾ÿÆÿÈÿÎÿÐÿÑÿáÿâÿëÿñÿðÿ ++0:>NUS[\__fkpkus{n|w€}€{‡†ƒ„‡„‚‡ƒƒ~}u}iom`ZTQMD922-)% #  ÿÿûÿùÿûÿûÿôÿýÿøÿôÿïÿìÿïÿèÿçÿêÿéÿäÿâÿãÿÝÿÚÿØÿÚÿÖÿÝÿÙÿÛÿÙÿßÿæÿéÿíÿéÿôÿõÿÿÿ )&)+)/439>DDHJSLWKWNQOPROVSXTR\XWNULURW\bd]kegcofktvv|vvvvvsnsjsfh`a^]W\RQPQOMNIOFC@<67+,.&+1(  ýÿûÿþÿúÿöÿöÿõÿõÿóÿôÿõÿöÿöÿ÷ÿùÿûÿÿÿ  %(',+-3AF=>8<:ABCFMIMINLLPXdT[MTUQDE@?<97:2908-.)$'')%$"%#%& !!#%%(%691/-1796=5@=<AEG>DADDACGDBFGBC=;A>;::9@?=4836@50(-!$üÿ÷ÿòÿóÿòÿðÿõÿöÿðÿîÿìÿêÿãÿéÿêÿâÿçÿáÿèÿÛÿéÿôÿóÿìÿìÿèÿéÿæÿèÿòÿéÿìÿêÿîÿìÿöÿðÿøÿöÿ   $$!')'),+2=35,)-%-'*(,'&'%'%&%#)&,#% ! " þÿùÿÿÿõÿôÿêÿäÿåÿéÿèÿàÿãÿâÿÞÿäÿéÿãÿäÿáÿàÿãÿéÿíÿðÿïÿîÿûÿïÿöÿüÿûÿúÿýÿúÿþÿüÿÿÿÿÿÿÿ    ÿÿÿÿûÿñÿøÿ÷ÿôÿûÿòÿ÷ÿöÿõÿñÿõÿñÿùÿìÿýÿñÿøÿ  "#*+)1159;DDCHOM[LVWVYZXgk`hdfbaU^Y]YTSNMNPILRAD@C4<5:41/)2,+(&'! !%$  %$)*.,.)0*1-0-8062773<;:9:EFFIKMVNY]]aZXTRLKEHAB99:788465& úÿòÿìÿÜÿÑÿ¿ÿ®ÿ™ÿ|ÿRÿ0ÿýþÕþ þoþGþ(þ þüýîýÚý ý!ü»ûÝûDüÌü”ýÚþiêBd' üÑdï`ç³DdM-ÿ*þBýºü’üÜü\ý#þ<ÿe3±ó<z¢ÀÍ6o `èZæVÅ ŽÿIÿÿÞþžþjþ,þéýÐýÇýÎýØýþ–þÿ«ÿ/Ã>‘Û7bO&7VAû¿D&ÿRüûûŽúóù[úžûêü,þŠÿÙ‰'|ó&;‚ïŒ×WFÆÿRþNýâü§üYü>üŽüŠü<ûŒù•ø4øï÷Ð÷møÂùwûiý³ÿúÙÀ¿žúÍ“s)~R(V®þfýVü³û9û*û—ûnü0ýßýŠþ~ÿxOṂ<àU|JïeÂׯ¢Î/©ÿÿªþVþ þÍý§ýŒýOý]ýºýƒþˆÿ®ñýµ7°?.ÒþôüÖúÁøi÷ööö²öÑ÷køÜøªùûçü²þXÒ‚#QùíT‹ÿ*þ5ý§ülübüü¨û`ûûû+ûhûÂû)üÑüqý?þ ÿ¦ÿ¶%ž"}x•ý&Qm+ü¦$­w"1–Æ`í7M‰­¯Ù&Snl2žþpý;ü.ûCû«ûÆüªþv”šÒÃf6…ÌÕ a›lÿ2þ€ýôüSü“üYýÃýúýÚý¦ýýüþû û¯úØú¥û‚ý¤ÿÞí°a‚çÞA¦ úlÒÿÝþ{þáýÖüü—üwý…þÄÿߨ3ýÿA@  B ÿŒýEû>ùï÷àöÜõõ©õöÏö"ø­ùûaüàýlÿ€CeET)}x€ÿ‰þý…ülûxúƒùîø¾øÅøÎøƒø§øYùÅù\úóú<ûûÏüXþ¦ÿÊFæÊжæ}=—–{F´™’ë§|”©‹†súéÇ”a:ÜH§ôù 7h (T|Èñ0žŸŠ`Lr…1´:±ÿÝþþ+ý\üÜû•ûgûRûJûûûûûõúBû}û˜ûêûzüìüCýšýþ€þàþ ÿ]ÿrÿSÿÿÿLÿcÿDÿEÿ–ÿÄÿ·ÿÛÿÜÿ÷ÿÿÿ)Ìݿ՜ÛÔÑš+¿}TMGß¡Pç¥zŒÙ]Ý=“£“”Yê –kXê²|Ü"£ÿ\ÿ0ÿÿñþâþÿÿÝþíþ-ÿFÿYÿ°ÿûÿ$S“Ñöùɤ €JõÿÊÿ¸ÿ­ÿ‡ÿJÿ0ÿÿ×þ¯þÁþÔþàþ0ÿÃÿøÿ)r¦yfŒ¡´ÏçÔ¼hºÿ\ÿÏþuþaþkþuþ©þÿ‡ÿ¿ÿ©ÿ´ÿàÿøÿ=Ut‰xbneB ÷ÿÍÿzÿ7ÿ$ÿÿÓþ þÁþÂþwþ_þ’þ»þàþÿWÿ¬ÿ+zªÒ¾UèÿšÿYÿ%ÿÿ×þºþâþùþÊþþ^þ9þàýºýÇýØýíý-þ¸þÿÿÿ*ÿAÿDÿ`ÿ‚ÿÁÿØÿ¾ÿÈÿ 7^›¾¹Ÿ]K}ÄÞæ?Ø6€åÿüQ·ø;q·h·Ê’];B^²îS ×õ(0‡üO}£«š{S ®LòÁ±ŸIä·ŠNüÀ¯ž˜lFþµu— ŒŒµÿLÿâþ€þEþ þ¿ýný?ýý ýëüÎü¤üqü3ü÷û®û{ûCûîú…ú3úãù’ù9ùåøŸøjøBø;ø;øHøcø~ø ø¿øØøçøÿøþøÊøøkøNø)øøê÷Æ÷·÷¨÷¨÷™÷¨÷¼÷Û÷ù÷øDøwø§øÙøÿøù#ùùùù ùù ù ùOù~ù¨ùÇùóùú7úpúŸúÞúûVû°ûøû,üLüWüeü}ü•ü²ü·üÈüòü$ý;ýgýˆý´ýÄýçýþFþþÚþ.ÿ’ÿéÿI—×!tÂC‡Ñõ&1W{«ÒþI˜ãd®ûQÀ9¦’C Ë & g Ì M ² þ b ì q ö oð_Â:øZ­½r®š•¥sïO<!!PdJX@™ X c à 2 °2£é¾²»½©ÿeÿ þ“ýYüìúù÷&õ¯ó˜òÜñ„ñ…ñ±ñ¶ñiñËðð6ïNîoíÚì¾ìéì!íUí‘í“íjíí¸ì¥ìæì9íÄí»îÜïÁð^ñÔñ>òƒò»ò ó”ócô_õŠöÂ÷ ùUúgû9üüü¿ý•þeÿ:Õƒ3Ö}(ÀdÃf ñ € è , Y × õ ä Ç ½ ¿ ˜ d D R T > ( ñ v à ù#<T…ÀiÚ :J\ÿVþNýkü¼û ûQú‹ùÏøþ÷îöÕõºôÏóöòGòªñ;ñîð©ð_ðøï‘ïDïêî„î0îîîÿíàíìí î+îAîƒîêîPï«ïð·ðLñ¼ñ.ò²òSóóó‹ôõ¾õ`ö÷ˆ÷ø¶økùúÕú©û¢üýsþAÿׄ>ðΡq¶&m¡Î 3 q Ê Q Ï A Á A à ) € Ý [ÙJ¨"“ãÒÛ\t‰êŒ#|Á,›Ç¼É]‰šª´†õ&I‡ÓMÕQcW ˆ èQ!›mmX laõFÿ­ý%üÔúÅùùgøŸ÷§öcõáóCò¨ð5ïUîûíüíYîáîRïiï:ï»î î[íÀìˆì ìí¾ívî ï–ïþïðððrðöðñeòpó~ôTõÿõ–ö<÷×÷ƒødùúÓû ýIþqÿi¨<ÞpécÝ[¶eÙK½' ‡ ñ # B U _ k [ J -  þ Æ € % ÍaçzšúPŽ·×õ%s¿ÿ!ÿWþ›ýçü$ü9ûTú‘ùÜøød÷Ìö9öõ¾ôðóHó‘òÞñQñóðºðfð/ðãïšïFïøî®îˆî’îÅîï]ïÕïNðµðüðFñ°ñòoòÒòdóô§ô,õ¬õ,öšöÿö†÷øÔø…ù9úñú¢ûLüßüVýÛýVþØþTÿÝÿc #­FØ`ï~qÇ-?KPaˆ¶ä%kŸÑÿ0 k ¹ _ Ñ l é @ ™ þ d · tÜ_ü¥1µ9¦çIÃ7ˆÿÏ›%PUFÞ-5d—ëC”Éà¤( ÷ †C{ ?4Æ"[y·þ ý”ûaúùÍøÕ÷öýô1óCñ[ïËí­ì4ì'ìlìãìRíríEí´ìì‘ëIëDëëBì$íÖí]î—î³î¤îî…îÕîvïFð0ñ>òQó@ôõ³õfö6÷Aøeù¥ú ü_ý“þ›ÿŒWÆ…Q Èr×*d¥é4’ ` ´ ë  ì ³ ” ¼ Õ  ‰ ¾ Î ¤ S Ô & tÈ#‹ûL½ÞáÕìÿÿ‚þîýrýòüKü“û¿úîùùJøj÷°ö#ö¦õõ~ôÛó)óyòÎñ+ñð"ðÉï†ïAïïÎî“îzî…î®îîîRïÐïoðôðXñ¹ñòbò¿ò$óžóô£ô%õ·õ<ö¶ö-÷ž÷-øÇøsù úÉúqûü”üþümýÚý\þàþYÿìÿ†#µB°$æH«]еØàèÜêÿ7V‰§Èø5g§ö[³ X ¬ ó , h Ü ` º ù P ð h ­ ÿ wyú|ÔpÛMæ–aKíú¯‹'ß³sA#  ¢ ? 份$ 4j}bÝÞq‹tþ¶ü!û«ùbø\÷Vöõ`óœñÔïHîøì ì£ëÆë-ì‰ìùìAí=íììŒìnì§ìííDîï¶ïðGð=ððþïûïð™ðjñPò+ó ôïô±õ‹öj÷gøŽùÕúü^ýœþ»ÿ bÖHêcÃNƒÅc¤ÓÚØÓÌÍô: • ð = W P  ¥  ‘ˆU~™’‚~§ÿçþcþ×ý8ý`üyû±úâùù ø>÷¥ö@öâõtõìôVô¸óóvòØñJñÚðŠðAððÊï„ïSï1ïï(ïHïïúïnðìðHñ¤ñòqòéòvó ô£ô?õßõö"÷Ÿ÷ø‹øù›ù;úËú`ûÛûIü¶ü4ý±ý;þ¨þ)ÿÐÿh“ ‚Ða¬ñL›ï8`Œ·ÛæãÖâëîáȶ½¿Ý÷.g¨Þ(sÅE„Ð" m ž å  # ( i Ï + ] ¨ / ì ‘ ÷ \¶KÍ!Þ´¦ræŠÀh­·¨yVìcë ¹ Ë º ‚h‡ö¹©®Ä;?LôYbÿOýKû¡ùpø„÷¢öËõðôâóµò™ñvð…ïíîáî÷îVïáïƒðÇð³ð^ððŸïZïzïøïªðoñ6òçòLóOóó‚òûñÏñ?ò óôUõ©öú÷òø¢ùúúûÉû¶üÒýÿStz¡¸Íl ¿hÁ¶‰I!6„áöÅ miMOjjZ$¹"uÈ(Œôd“Fÿ¿ýYüûÌùÈøö÷g÷÷÷÷Ëö_öâõTõÏôHôôóûóô9ô9ôô‘óÜò òBñ”ððèïððñYñ‹ññœñÈñ*ò¯òkóWô]õ]öb÷]øù…ùÒù(ú’úû|ûðûOüšüäüýKýwý­ýþqþûþ™ÿ' qÆ|ûä>ƒžÂÇçõôù"ø±`$(Tv§æ6ECCSo°÷V´ùÿæ×ßý;oÆóïR› ” / Ö T › Ê  P ™ ö n ø ƒiÄüE¦0æNa7­u£Œ Ïu¦PU¡òš8Ñ…•ßöŽÅ‰¼œÿ–ýüøú7úªùmù1ùÈø øçö€õ<ôMó«òqòªòólóaóVóróó®óõóôUõ>ö÷]÷D÷Ôö öOõŒôôô}ô õÌõ„öúö÷4÷]÷¶÷Vø>ùsúÔû)ý8þãþ@ÿgÿ¯ÿ#Í™~f#žŸRºýu:hÝrù_Èö YÁH½DŸm#ååÿýþ$þGý†üÙû3û’úüù™ùTù.ùúøÍø°ø™ø{øVø6øøÎ÷~÷÷ˆööyõüô’ô7ôæó¨ó|óuópónó]ó`óóÅó;ôÙô’õEöéöy÷ò÷aøÀøùRùšùáùKú¹úûOûdû‡û¬ûÓûøûMüÉüsýþ°þ0ÿ¤ÿrÁ‡mØgÊI‡­ÀÑÁ§‡tpuod`eu‚˜›°½Å¾Óí ½[¾‹v•¾JwƒvL!üï3?Ncðtì,+FµXìMŒ´¶¬‹¨ v ø Q — Ú 7 •  ê ð x © Õ  •  ´~¤àÝa©|% 8 â»+*Lž5±ÿ2ÿYþ:ý ü<ûÓú¿ú¿úÒúûGûlûOûêú|úúùùbùlù„ùŒùxùSùùºø^øøú÷ü÷ø:ølø±øùJùrù‰ù²ùú“úû‡ûÜûühü¯üýPý­ýþŒþýþMÿ}ÿ‰ÿoÿmÿ…ÿ¿ÿ €ü]¡ÂǼ«žŸÕ?'û¤æþþ¥ý¤ý±ý­ýÂýòýþÐýYýÝüžüZü"üøûßûßûÒû¯ûZûØú?ú›ù#ùÚøÃø¬øøkø>øøøÜ÷¹÷œ÷¥÷û÷~ø ù]ùtù^ùTùFù&ùù)ù|ùèù@úVú/úÕù ù“ù©ùÚùLú3ûAüý€ýÄý/þ°þýþåþ½þÔþÿyÿ"Ó7'=ß(œ÷Z´¨-œJ:Õâ0{¤Ã ³g÷â,`½ï¥õUl@7>Ïÿ4ÿ—S ޱ„›ÿ—ÿ:Ü>xÕˆ>pÜð‡ëºô¡TÍ×FY³‚Î^á[f=÷ 91Ó%s¥ µ;!´†êˆX>1._ ) Þ l Ø05Â|T’}iÎ?ô\)Ç»!gŠ¢Ë­êuõþUþbþ ÿÕÿÿÿUÿ@þ ýü0ûµúñú½ûÔüÕý}þÀþ¸þ„þ þkýmüYûÔúûÉûZü†ü§ü¤ücüéûvûTû{ûïû£üŠý}þ7ÿÿ:ÿÈþ¬þÓþçþ±þKþ"þJþÊþ=ÿEÿÅþüý@ýËüÖüGýþáþxÿÌÿñÿíÿ×ÿÿüþ2þÛý þþÐþ³þiþþ·ý_ýýºüóûZû¬û´üý‹ýýçü$ý‚ý®ýqýý“üÐûûû§ûNüqü6ü&ütü ýDýsüûú;ú­ú™ûü‚üýÁýþ›ýÃüóûNû·úAú˜úüðýÐþ´þúý ýUüpüÍüÂü§ü'ýIþ}ÿJ} ïþ³ý9ý˜ý`þµÿ¤ ¿Ä™þhýßýÄÿnº‰Üý3V9ÄXÒ,NMgÿ¼ÿoÁ)=ôFýpûüÿý)&˜ã`ÄÿŽý ýÏýFÿCÌÛÙËÚ€_!5ÿªet §ÿ¶ÿ{ÿÀþUþ÷þW®¶~(ÿBÿI·Ìþ¶þør¨…r’ørá†âÿ±ýŸü—ýÙUï!ª3nþúýóþյʢbh¬ÿvtÐ%Iž8/AJüþ§ýzÿöp 4›Z½hÑ4ÁØ{½úz°c`õp–ÎÌÉœsnl¢þuþëöÓP”rÿ5þÈþ €ó^OêÿåÿÀÿÅÿÆÙ¨+Ú'ÿI÷nHÿÿ Q>á!cþQþÕÿ¦ ÿ þWþ™ÿ¿EÄþ]ý)ýþ¤ÿTÂùüìúÐûÒþqoäþ†üJüDþ`×ÚÿvþŠý¤ühûïú1ü þ–ÿ€ÿ\þ¹üŒûÊûÄü4ý§ýIÿUöÿþJücûÔûïüâýDþ‘þÙÿC’cýú²ùüü ˆÿ7üÎúQþbŽ—¢ù£õaøÒþJºšÿG÷X?ÿÿýˆý§ýÿýòþcÐ~køþ<ûFøú Šœ8òý€û4ý6‚4ÈþÝþeF ëÿ˜ü,ý¼ÿž*N \Õþ_þ ÿ®Xè¬þÎûCþ´eõÿBýrýKBwOÿµþKÿ¦þ0ýûý®Hæuü–ûiþ‹þ‹üþ»ŽÜz]þ@ÿ2§þcý5ÿ¶åóÌÿXÿ™ÿ]ÿÄþ¦þñÿjRjíÿÃÿrÅØ©ÿÄü7üèþˆ˜YÐý ÿÁ¹Cþòû‹þÆ<ð›ÿ­üéü\ÿLÓ˜Íþbÿ†5‚-'³ÿ0³Í×þ”ûøýá,@XuþZýþ±ñœñIÿÿÀÃxhÈÜ#£ÿðÿ?$¶V¨qìý¾ývŒµ  wþ”þmw ÊÿŸþÑý°ýÿÃrç<dþOüÆü‚þù-hˆûþjû6ý|KvMÿèÿÆ«@ü–úáý?“|CcÝ¢ïý¨ú×û -iÒþ’üÿGq~üOøóø’üå¯Dj¿@$þmûhû ýJþ)•>ùí[iþŸûxü+ûÕø€ýËœyrÿ:ûžøPùŠýX:GÿL¦ä‡ù¾õßû:Äþ”üýüÓý‡þxÿ†ÔÛªÄû+÷bú↧gÞùÐ÷¶û„*Ýÿ þ¼ûIûFÿ<t³¸úü<ÎSýþçùûø³ü&TCÒÿ+ª7ÿ#÷ðôiûñ] (þÀû“þߤ3üïú’ý€Ë”ÿhû§ûi`Ô…ù,ö;ú±d3ÿcüþÓÿ½ÿ¶óåKþnúúžý§t#zþÈý þ•ÿqÿ þÆþ–œ2þ,ýÿšZ\ÿÿ~ÿ¶ÿQÿÚÿ¿ƒÀÿ«ü-ûý<á¶Ðÿæþ½Áÿ—ý+ü%þ­‹ýdüµÿº0ÿ£ûwü‹ÿ½ÿ÷ýÒÿ+gÀöü,úÏúþÏ‘Õÿ½q7Ãbü ö–öÍýŒâÐÿúývýðþ û‘ÿvÿÈÞüó~óÿÿ€ÿ~€ÿCý®ýη}æÄüÝú½ýýÿ0·2¬ûûÓý@ZÝ!ÿ£þäÿp…èüû}þçBv ÿzú—ú¼þÄæ@ÿaü1þ°t&Çû*ö+ø¤*±ÿ‚úýñAs$ÿõûmû!ü-ý3ÿê_1/ý²ù…û‘ý2ý¤ý!TQ“ùL÷›ý¿Í³[ùÙ÷ÑüTt~´ãj\þ´ø÷{û鯀¿ÿP Ö¹ûAù©ý÷fþãû3ÿç[¿ÿýüsûzü-ÿ÷=ÑûçýüÚü„ýý{þ%SµWrZû’ùMýw*ŠðýþüQþ¿o¦ÿrýýJÿà`t]ÿ_ÿÙoEÿ=ýdþÍð€þ±þß¶®ÿhûxúEûÀü_ÿhËÿÿ'þ%üÏú5üýþÓõ Lu#îýúù}øöúÃÿpõ;$+ÿùû*û3ü„ýXýfý´Î)¼üOúNürÿzcìöÉàþwû[ù³úñÿ²šþÚûÿ¢>¿ýóýèÿ‚ŒÿôÿuÚ¢wÿžÿ^ÿœþXþçþßÕ_âþ.ý«ý(ÿÅþý’ýœŽÚûûúŒýSq¥§bÿIýGý‡ÿhõ°þlýPþØÿ¤Sÿëÿñ”ÿ…ûùü©ˆ µùÿ¯úóûœ°°ÿwüòýãËÀZþ<ú~üþÖXü‘ûKÿ/·óýþ_ ÍAÿ"úaøîû„¢>áþlÿOKÿûúöý:g¯u­\¼ýõû¶þš¤Wþeÿè7ý9ý.ÿ»ÿÞÿ_cþ†üôì¯|ü‹û©ý¤fF±ÿ<ü}ü1;(ˆýâúwýE5Âþ‚ýüý°þ ÿoØM»òB<þ(ûXúÑý¦4J ü3ù)üØÿ#üÆüýþ[øÿc«_xýXûwüÿrw ŸØÿÆü{üû²ÜËþ¦ûÓþmáýèúRþ(­OÊú$øÀûzô4˜þ4ý;®ëíúÓù ý階ûÓúrÿ& œýaú ý˜öŠüüÈü-»dÿ2ýÖþß3yûcûê°€øKûBùªü-B"©þæüqûºüµ  ÎþíùOûeMÿâÿó§“ÿTþûýwþsYm^¯ ÿÛü¾ýVÿ¹ÿSÿæþ5ÿH÷]¶ÿâø±øLÿÛß:ÿ9¡ÿ·ü8üQþìx£XŒÿ þÿºÑ¢Œþþ“ÿKFŒþöûŒü0MÄBþdûþø•m‡ÿ`AWTþ›þÓþŠügÿ}”!þ7üüçþ¿¢ÐQþ®þNhÝûÃþÖý1¯ç¬þ›üþF~ŠÝýþÚüþ!1éþrØf±û‰ùýÍŽ­þÕüJÿéM«ü*üu_;È?úú3$¡Wþ˜ûý÷¬þÃøáùñv¼ÿÄøúdykÒýýòýüÿÚš³ÿFþŸþ&š,ƒñÿ$þý©þ0»èÇ#¿þæüŒýV…¦¢ÿðûøüíŒh­¤ý¼ü6ý[þ”ÿl^"7Póýuú_úýO€ñ3¸þÍþCÿÿpþ5þ÷þL¦¾‡öÿïýPþ×ÿ éý6üuý½kIØÆÿVúDùŒýä Mz°ÿèÿ¦£–ÊÿÄýÅüIýÓÿ¢´pÜþÖþ ÿLJÿ:þËüõýÖ±ý-ü¾ø´úéÆ^ÿÛû®ýª¡Ÿÿüû;ü³ÿÕÍä‰NÿJüdûtýÿ ËV¤üùûÔþ Ü’”kþ~üvý©àåýDüPIå û÷áùüÿòýÕÿ)I¤éþeùÇ÷éü‰º ®Bû÷/ø°ûÒÓÂéþÿ>ýÈýqTýÑøFú3ù‹,>üÚúrüÇþ-ïé ÿ\ý}þ)ì/ýþ¢üsû*ü¹þŠÒY“ªý×øBùRýó¾?Izþµý{ýÊûpûëÿ)¼-pý+ûü>þ øÿ÷þüÿm†²ŸüùäúzÏx—@ýjýBE-¨þ†þŸ¢øGý³ü:þÀÿE~ñWwüÀúzþE‹½ûû÷‘üÓ ¶œýBõ"öêþ¥* \­ùö+û“— † ÂzùÂöíøÃü/óî¬"ÿÁû!ùÃúDÿòTÚí:ûMøêù‚þ³4¶‡!­ÿ*ýú)ù_ü#é&Ô»ýÚûNý`ÿsJ Ü+ÿ²ûþÖ|óúƒôöàý"" ×=ÿUúEøþúÿ#Ý\d9‰þÂÿe<Í=÷3ô$ûxÒ èðþ ûÇýˆ_ûû\ùrüœÿóÿøÒèþAýÿÙ Wü.ö3öËÿö Ú- ûû.ñ1òû=t+Dþx„ ŸùØöóúMô¨Yj\û9+üùö¶ö¢û*› “ »¼ÈúØ÷øúãüØÿ†òš @w|÷ióößüwPyC˜öÝÿAùÇ÷nû“ÿú ¼XŸþ?œsþ+ù˜÷mü8U›œEüCùÿúYD-èþúgû¿þu,&¶ŸPæÿÁû­øõø¡ýf´è#eþÆû!ú_ù üêþùýû1[ ý{óÄò¨ûëâQ imûÕùªý>]ýwùéú’Ärm…ûÉú«ÿ Úÿ¢ø¬ôú"6Ý *Ïú—÷Dùðú;ûžý:äêC‘ÿŸü/ýòý7ûë÷ú?£ » 1þ§ú¶ùûoþáñÍÿ\ÿ|þ+þMÿ§û2ýúMúfü›R5túúÿºmôýnýß Qÿ1ü©ý¿íwý ö­õ?ýi` e"üóùUúÕû:ý^ÛŒ”RþZý–Í{ÿá÷"õËúŒ{0ŠþzÃyÿÊú0÷+øíþrq +-ªûŒùNú°ý,®/TÿBúÿ€ýüþè 'þXù‰ùùþEµÿ¤ü[þ0§,ýœûýV[Gãþ^þ´^Œÿ’ýfýþ…þ;ÿËÈgûPù§ý,¬&¥ùÐùÙÿv¡ñ‘üâûQþ’ÌQúþLý„ý*ÿ6¨ýèü´ÿTŸ úøªûq$O#•þ=ÿ‘þ)ûàøÙûªv lcû_û¿ÿèýð÷°ø¹í  UÎùYõ<úÙÞÝþÄúûSþ}ùƒÁKüú¸ú¨úÆû¡ê†„ùîöJûâ^þþs ‘åû öoù&†-üþ™ú›úÃýD@˜Üÿ¯ýÿ]Atýªùül0|ÿüIýL³´üÕôhõ²þr' yþÓùZúHþ–&bý)ý_ÿˆä»º³úøùû.ŒñKýbüÍÏZÿÕø:øåþêmµÿzü­ü0þ•ÿtÿkÿÜ‹ž9üøHûÔó¬üNö*øÕƒGþûGÿ}ª‰ÿXùþ÷þ'Azâù·ùØþÇz­&ü­÷ëø¬ÿáAJüñùüü‚SÕáÿÿïÿ–ÿÐþÿâÿpÿ.þ´ý´ÿèŽ$ûñô%ø2. Œ üÂôˆùÎРѵû{øvý=ü÷‡ùó Š "Ñøî÷eüdí°ÿ€ÿ³çÿØþ· ÿ¢ø=ötùÏÿ·.;¦gý û­úçüVÞëPþÇý;‹”ÕþXûÃüy·°ÿþôþ.Yz-þ)ùoøØþ‡ž¡þÌüîüUüsûÌü=’c¶÷Ú9ü³öØõöùÃ* \ AôÿûmúåûhüûÏùñû>à ?  )ÿböôø_þ\63ÏVûùnû þ1þgüÎýÛ2 Å ëö9óºøÂÆá¼µbýû«ûÌþ@º/øð®3úükù¢øHûlø+ÑùühþïþqøÙ÷Aþ>“Ñáý>ûOý–FýýRù¹ùûÿÿWÝû.ùsüI׃Vü¢û!@£ë$ù÷8û¾vhÌÿûänþéýƒÿÅüùØûö“ Ì úùóù7ÿéÿýêúÉû©/_ JqûHù^ýküÀúXþR'»7½ÿqû“øÊù"þŠ”·³Ž‡|üšø÷¯úðÙ§ Úûíúüÿ&‹¹þúËúzÿÅŒ~†ÿyýþüþÙÿËœöÿ}þ)ýUýòÿI³Ãeü­û…ÿÍÑþÑþPØþµþXÿ7©ýþ&ÿÆúÄùýí³òHûµù¸ý­äþçÿw°SþÿýE¹,?ý\ýÿñþgýeýyÿ›)*›Úÿ_ú{ø[ûÐÿ‚ùI +Çšû÷oùÁÿP=?aþAþpÿÉìü=÷€ùBè`nþûýgó¢eü¬öø–ÿ«ñ—{þ™ýšº.”ú9÷­ùšN"\¹ý5mý<ú•ùWûîýLã| +ýûèü ÿØýÚù,ø2ü!Ø) y"KûSûsþ"ÿ:ü*ú°üá™÷ Èþ>ù¼ù»þç‘æþŽüÿ–“ˆçýúËûˆDLÂüFû£ÿ³”Ô…úßùþkÄdæ ÿºüšû¨ü.å¬:BýËùûÔýÝþ¼þso°ÿŒþŠÿ"¯ÿÄþ÷ýÿ5bÜÿ€û]ú™üpÿYßÿ¿JöR ýÄù&úÃýMœæô’ÿÿ%a!ßû+ùÌús8š0&>úVù{ýQ ÂÿÎ÷¿õ¿ý… Bƒû¹÷¹ûW¬ÿ·û úlþÖz 0oþŒùü(Äiý ù=û_) = ŒÑûGûÐÿ¨øÿ,û#ù8ü)œ vXýFüÆý1þØü üþ¡àïþïûfü"þãÿ¯«¸¬VÒþü ýùܬƒýù¢ùÿ_Íÿ(ýØüƒýdþØþ*ÿUñ!2d²ÿþþÚþ¦ÿR0Yý[üZþ÷’ñÿƒ‹eOÿ5üÿúpý«®Eþoüšÿ5Ù"ýø¦ø3þZ“ÿÌþ¦Eã;ÿðûNû›ý_ÒŒ*'±þ®ûˆü;ÿ¯Ûÿý@û†ýê˜Á–ùþvøÄõ%ø-þÍç¯ÝÔkýYù úƒýçÿ40bôk_{þ4û@üFÿÙÿ¢ý_üOÿh+dþüðýÒpŤýÁýeÇþþ‰`Оþ,þ’þ}ÿûÿ¬ÿÿ8ÿÇÖŽ¹þsüÀý¹¯ý„ûþþz`)_ÿBúÈù†ý3ÿ¡þý[æµÿèü>ýEÜýÎüÿ%Ó<ÛÁþüúBû5þæ_%YÿñÔF¬ýÿ÷(ø¼ýœl+ÞýòþrfôRþ4üOüuþÜ%âeÿ€þ¹þíÿãÿÿ =# oÿÇþîÿ< =ÿKý@ý¤ÿ„è‘þÒþóY!!þ;üdýާCÙÇ9_Ëþ¹ú’úOÿÍc¨ÿpÿ\q&ÿýýÒþô)µ\Æþý-þeÿœÿÆþ]þ«ÿUÌÑãSþÜü9þ¯‰Sþ·þØñéËoëÿRý@üýÿÜDâê1ŸþLüˆû/ýÊ`¥#Ùþðÿº˜]ÿ©ÿ¼Ki\þný‡ÿkRáÈýýVþ‚ÿ ÿþ>þkÿ?Ÿÿ–ÿ ¿göþfÿ+Öç©!yNWWÿ*þyý¼ýæþË2|‘Ä/k:þFý€þ ¹Vˆ@€ÿþsý&þLÿ!O5+”w¡œËÿ<þýýŽÿÊ&Nª) @þôü´ý2tÓƒòÿqÿ8îI‰þýýÊþŒÇ0Öþ{ÿ©þÝþ­ÿvõŸ¥—Z÷ þÈý¬ý<þ2ÿhu5põËYÿ9þþÿ .PÇR,j‘ÿ•þ,þæþ\¹“wRuÿèýŽý0þEÿi©~·•">4RÿÓþ×þ†ÿ¦ÆjN¶ýôþÛý$ýüüýÿørØ~¼üÿ"ÿKÿôÿ·ºcÝô©OäÿŠý ý­ý¾þ«ÿ‡fRiC¿ÿ§þ®þÿ¬‚éþ†¤ÿ<ÿmÿúÿYÿ}ÿh®Uè°dÿÃþÿ÷ÿÙn³Å‘2»@Úÿ—ÿ¶ÿ4Ññ ™ %P½ÿ\þþ–þ`ÿÜÿK£þÕÌÿŽþôý@þ ÿÓÿy÷jÚ5 D"jÿiÿèÿzö[“jô3‰ÿ)ÿÿÿ9ÿrÿ§ÿ=N4Fp‘ŽhVˆügŠXÅX; 6a©ÄyöÿŽÿšÿæÿÕÿ¢ÿÿôÿWŒd_ÙÏ:øÿi$ÉóͼŸ<m‚ÿÿ%ÿ³ÿ7‚¤ºö ñ7K­n Âº}óX÷ÿôÿ8uëXc ^\^àÿËÿžß¾fÓÿÀÿ¦ÿ‚ÿgÿ—ÿ±ù»*´ÿ°ÿúÿRZ!âÿÖÿgˆuXEKY2ûÿûÿ 8i‰——ƒnr„zލÁÂ̾¾È .1ò’? +Jme@÷ÿŽÿ[ÿbÿ‡ÿƒÿÿ‰ÿÞÿC‡‰\&!)9BD;<Y|˜f ÿeÿnÿ—ÿÀÿÙÿöÿ*4!ñÿðÿáÿ!s·ÇÙßåÉ£…Ë 9D ¦aLUsƒ—‘›Ö%Y`TD_‹‹£ß+5¢˜™’n6,hÈýüòðÑÄÛ\†…{ŠmH6N|¬ÏÑë?7   1Dax„j^m|sokжèòÕÄÓéíðüø×¶¥Ÿ­¥‘lQ8ÅUJ8!î«^5¼Yñÿ´ÿ–ÿ‰ÿfÿÿàþ±þˆþQþþæý½ý’ýYýýËüoüüËû³ûªûûcû-ûíúÒúœú]úúÚùÇù·ù¸ù°ù­ù¢ù“ùùjùMùAùXù•ùÙùõùùùûùú#ú&ú<úQúmútúƒú¡ú¯úÎúëúýúÿúûû%ûTû…û¨û¯ûµûÜû ü:ülü£üÕüý#ýMýrýý†ý—ýÕýþ-þ0þ*þJþlþsþ„þ“þÅþïþÿÿÿ)ÿTÿ–ÿîÿ+U…´ìW–â)UpŸÚ6ZŽÓü,f°ñ0pÅ[êE¬î@ŠÚ* › W ˆ  ( ™ ü ^ · ) ” Ô ò "FEMs‘€C× ^ • ±  Ä € * ® 5 ¸Su¥µ­…ЍÎÿòþ&þ~ýØüLü°û%ûúðùAùøØ÷-÷“ööÅõõuõ[õEõõéô¡ôYô%ôô3ônôÎô*õ‰õûõKö}ööÏö6÷Ç÷uø+ùùùÔú®ûpü!ýªýþwþÿ•ÿCÚnèt€Ú`šØø() ÿ4GA?-Är­cà™[þš³HÓÿ‡ÿOÿ.ÿ ÿÝþvþôý`ýÛünü'üüÞûÇû©ûû‘ûûxû^ûCûû&û:û`ûsûû©û²ûÑûü3üeü…ü³üèüýIýgýmýsý‘ý¾ýúý7þPþAþ&þþþíýÖý»ý¼ýØýýý$þ,þþþøýþÿýôýéýÎý°ý‰ýsýaýSýCý:ý*ýýúü¾ü†üBüüêûØûÂû¤ûžû“û’û’ûûdû3û'û+û0û4ûSûtûªûÛûü,üLüküyü”ü¹üíü-ý}ýÅýþyþÅþÿeÿ·ÿZ»0­*«,Åeô{Ù›V ´ a  ¨ ? ñ ¬ Oñ«l¼Œ_/Ï ­ô뇆S e œ ú [ ³ –Qˆ¸»þÂý,ýäü¶üiüèûûêùÅø¿÷áö0öâõÙõÿõ%ööÔõYõ­ôïó+ó–òIò8ò[ò¤òóó&ôµô7õ³õ'ö©ö)÷Ö÷’øZùFú]û³üþtÿÏ0ù„Þ.zÒ<Ô`ê>[%º:«(¼uM9'êyâUÂ3‘–P úÿÐÿ—ÿGÿèþ{þûýlýÒü1ü˜ûû­úvúmúrúwúQúúÍù|ù6ùíøÇø²øÕøùŒùúœúûûülüÖü3ý¢ýþÏþuÿ#Íb×;ŠÀõ@n¤Û:VXG ñ·O2çÖßîÍ•Cêªÿ1ÿÉþfþ þ›ýý±üNüÛûKû¦ú)úªùAùñø¸øŽøtøkøpø]øLø@øIøOø~øºøùdù±ùú€úÄúÿú7ûvûºûòû3ü‡üíüKý£ýóýBþŒþ³þËþàþ÷þ0ÿ\ÿ˜ÿÕÿ?°t´í 5~Ð i¹ˆò;t¼R‡­ì,u£æB³ @ t   ã + … Ê  h å t VÙ‡þÜ%· ý ü ‰ak”Û(ÿ×ý0üÏú¢ùÉø8øøJøqø\øõ÷p÷Íö7öÏõ¦õîõ€ö4÷øÂøDùiùYù#ùåøµøšø–ø£ø±øÄøøøNù¼ù<úÓúaûïû|üýpýÀýþŠþ@ÿ& úÚ˜<¦û:…Ó2„´³z™ú/e¨ýkü§2¯Mÿ¢þáýýXüÀûhû?ûBûVûƒû´ûÒûêûýû üüÿûüûüü?ühüˆü ü¾üçüý7ý7ý6ý.ý/ýQýpýý—ý¾ýþyþàþ;ÿ‰ÿÑÿ+~ìjøž7Ë6¬¯¯©šŽœ™ŒT” qâ_Ü\àÿgÿÿŸþIþþ¿ýýTý%ýýÌü£üwüKü,üüõûêûÍû×ûÕûÌû ûtûNû9û*û)û'û1û2û7û8û=û?ûJûSûmû¢ûÞû+ütü»ü ýhýÇýþNþƒþÈþþþFÿŒÿÅÿëÿ 'LZcgocM4"ïÿâÿÇÿºÿ©ÿŸÿ‰ÿ‚ÿ‘ÿ ÿÅÿøÿ)Y˜Ý^¦þN©mß7› rÇZ•ÓS‹Ô |ëf Ç O á ~  ® > Ý ŸVÊ_Y¾ºQs . =Nª@¥þôü%ûnù øûöwö9ö3ö0ö$öúõ¦õ@õðô®ô­ôõ§õ…ön÷8øâøeù¶ùÅù¤ùvùEùCùYùžùú¯úbû#üñü³ýDþ‘þªþþ›þ¯þæþCÿòÿæU‡š}#ÀÛãó&R|~JÜB{އ™Âò,_ÿsþŠýwüpûeú†ùËø<øï÷Î÷ë÷øcøªøäøù>ùlù•ùºùöùAú»úZûñûŸüNýþ“þÿHÿcÿgÿ\ÿMÿMÿkÿŸÿêÿH¨L‹·ò!Z™ôGøH¿ë  òÅŽ1Â/v¯çtÿÙþNþÏýhý ý±üeüôû”û/û¾úEúÙù•ùrùsù’ùÄù úVú¡úíúû4ûEûdûŒûªû×ûüVüžüÓüý+ýQý\ýiýtýlý{ý…ýý°ýÀýÙýâýÿýþ)þ2þEþcþˆþšþÇþíþ/ÿUÿ‚ÿÿ»ÿËÿÌÿºÿ´ÿºÿÖÿÚÿçÿ':8*$üÿ0Sf•ËZ¯}í?’òbÆ Zµ+w¹øS™á ‡êR ¶ / ¥ $ ƒ î J ¾ 0 ¸ Aº-“Í—Ø· N ­ ÏóXGqÿ]þýŠûú™øH÷Qö¥õ@õôô¾ô›ôôXô8ô!ô6ô~ôêôõVöH÷'øûø¤ù5ú›úÝú%ûmû¸û(üÀüpý+þæþ‡ÿ"¤&:9@Db«¦>Ûˆ–ëðÀy^D<4$ª4’Ìëï"ÿJþvý±üæûûEúqù§øâ÷<÷¾öhöBöKöhö›öÛö/÷Š÷ã÷=ø˜øù°ùsúKû2ü#ýþÿ î¥JÔI˜×ü2i’Äï&FpqX ¨Já“?ðν™p4ý»}8ÌŸYÔÿwÿÿ´þPþáýpý ýÁü|ü%üÓûû&û¾úLúëù‡ù:ùøøÔøÇøÑøîøùPùšùøùSú­úûZû­ûóûKü—üóüYýÅý5þŽþðþ1ÿ`ÿoÿuÿrÿ^ÿFÿ(ÿÿÿþæþ³þˆþQþþÑý¦ýýVý>ý"ýý ýùüêüãüÙüÝüßü ý6ý]ýŽýØý$þTþ‡þÈþÿhÿ¥ÿäÿ*l¡Ù^®û\È8”þP¤ðA—éG·+¥— ¤   ¥ 3 ½ \ Åv.ý®RÛ"Ú¢$I  ½¼>ù½}Sÿ—ýÓûúOø­ö,õô{óóÆò|òCòùñ°ñ€ñ¥ñ÷ñuò=ógôÔõ;÷nømùaú4ûöû›üIýýý°þvÿZ8ækð{í.BE¶/ªb(([’Ÿ’M‘2ãÿãÿòÿõÿÜÿÿ7ÿ™þîýPýÆüFü½û!ûƒúýùdùÈø"ø‘÷÷³ölöQö7ö2ö@ö\öšöàöM÷Å÷_øùÂùú‹û•ü´ýèþ)}±Óß̓rÇvÊ # . '  ¥(„¾ïEgŒ£ÌXÿ¼þ4þÀýeýý¬üTüüÇû‹û[ûUûcû„û§ûÓû ü<übüü·üÝü ý3ýbýnýxýpýOý ýéü½ü£ü¥ü›ü”üü¤ü«ü˜üˆü|ü€ü‡ü–ü¬üÕüõüý/ý[ýyýýºýÝýöýþûýúýéýÏý ýqýFý!ýêü¬ürüNü ü¯ûVû ûÍúuú1úõùÏù¨ù†ùqù{ùˆùùÊùú[úœúéúNû³ûüiüÛüqýþ§þDÿòÿ¡9Ër „ìgîfÎ6´lÎ*xÑ D ^ q Ð ü ) f ½  L ª + ± 9 È –fN Ü”óÔ.BŒ í ` Úª†fè1Lþ€ü³úìøX÷DötõÎô+ôóóˆòØñPññ1ñtñ ò óGô‰õ³ö¶÷¿ø¶ùœúûuüuýzþuÿ„Sð†}¹àïÌhâeÿ–@óÃ~&§Wÿ{þ›ýçühüüáûäûüü ü÷ûÒû–û=ûßú¢úvúNú(úúúþùÜùÀù§ù}ù[ù0ùùÿøïøÝøËøÕøàøòøùfùÒù9úÁúMûüÀü‹ýgþXÿZI' í¨Yž=ÇTÉ5 ‚ ¸ Ð À 1 ®O©Ö9i˜Ô NÿŽþÃýýGü¥ûû¥úCú úðùøùúúDúnú¨úçú-ûzûÃû üFü‚üËü ýOý†ýÁý÷ý.þNþWþSþOþ5þ&þþùýÝýÃý³ý–ýmý2ý ýäü·ü|üJü(üüöû½û”ûqûSûûêúÊú¶ú›úúqúlúUúDúú úêùÝù²ùùoù\ùBù6ùGùSùnùù²ùÝùúEú‡úÅúåú"ûkûÓû^üßü`ýñý—þDÿñÿ.Ón<ÚyÅs±Q è  ö j Õ ; Ï F p Ñ /Ñ,ºqŸHµ§ÚˆD   2 H 8ö»Õóÿ4þ©üLûú,ùiøº÷÷ööõôbóÖò†ò`òŠòó»óˆôEõö¿ö”÷kø=ùú û üý þ2ÿ1/Ýrä:gh^3 ðĈ-ÊQ®Üçÿèþóý ýDüŸû)ûÌú”úPúúÎùùù•øø°÷÷X÷T÷e÷‹÷Û÷/øhø°ø×øöøù(ù2ùHùgù—ùéù5ú’úîúMû¸ûü~üàü_ý×ýgþôþ¥ÿXÐ@Ùp†oñnïpÖ) Q b G Ä^éq÷eÁW•Èí!Kÿ‰þÈý*ýœü0üÏûŒûVû7ûûçú½ú—ú“ú˜úÉúûMû¦û ü|üçü>ý{ý¯ýëýþMþnþŠþªþÉþçþñþòþ÷þÛþ¹þ†þTþþÇývýýÇüuü1üâûû:ûáú„ú!úÆùjùù×ø®ø…øeø7øøò÷×÷°÷ ÷÷’÷‹÷‡÷ ÷¾÷ì÷ø*øLøø®øåøùNùpùžù÷ùZúµúûzûëûaüÝübýëýlþËþYÿ¼bÿ©r/ú«hÑ„9 ñ “ # ¥ : Ë T Ï ;¸# úF—‹aÓt÷XYŸó Ì­ æ è í ¸ tc¶üWÌþoý=ü û*ú/ù2øD÷cö†õÊô8ô×ó¨ó™óÕó8ô©ôõ¥õKöäö{÷øÈøŠùuúQû5üýþÿÑÿŽ„Âó$4Xhb*ㆠf ÿ»þÕýþü>üŒûóúsúýùù4ùÌøgøà÷O÷Ãö;öÕõ‘õiõmõõÀõöhöºöêö&÷`÷¤÷Ö÷øGø¦øù¥ù8úÄú:ûÌûLüÚüZýàý`þëþ…ÿ,؆4à–„kâI¼(‡Ðû ÷ФV ­W÷—'§rÆCj¥àÿAÿ«þ#þ¨ý?ýàü‹ü'üÕû}û=ûûÎú²ú³úÊúöú(ûmû¯ûêû!üNüˆü­üÔüìüýBýwý³ýàýûý þþþ þéýºý‚ýVýýéü­üfüü«ûOûÛúfúòùxùùªøNøø÷¦÷M÷ùöµöiö6öìõ´õƒõfõTõAõ5õ>õRõxõ«õÚõöOööÖö÷]÷­÷øwøõø`ùÝù^úæúiûÝû^üÞü{ýþ´þbÿÕžg3ñ°oDè¸ l 6 ÷ ™ 7 Ë [ëc,©„îW²'Æbýzê=6Ï ]¡Ñ>v¼ý+-ù ³ X  Èp1àÿþ‰üûÇù²øÝ÷C÷·öBöÓõvõ.õ÷ôÒôÀô×ô"õõ*öÄöU÷Ó÷YøùøžùDúæú¤û_üýÂýnþéþKÿŒÿÈÿçÿ=YY4íÿŽÿÿ|þÐý$ý{üèû\ûäú{úú…ùòøOø¿÷)÷¤ö'ö­õLõúôÏô¯ôšôôºôñô3õ‰õÜõ1ö’öïöQ÷¢÷ú÷bøØøZù÷ùŽú9ûàû–ü>ýéýˆþ"ÿ²ÿKæ‘*ÊdЇxícÂ!n¸ð +  ëÆ—Z¿Wè\Ë&tÌkÁ!‡èÿ^ÿ×þZþÜýTýÛüzüüÏûˆûEûû ûûû,ûJûaûƒû·ûÚûûûü:üdü‹ü²üæü ý!ý)ý(ýýýûüÒü ücü(üîû¶ûnûû­úQúöù˜ù+ùÊøZøó÷…÷÷¤ö?öÐõnõõÏô‰ôVô ôçóÊó¾ó´ó²ó½óÃóÓóøó8ôaô•ôÀôõ[õ·õöoößöR÷Ô÷\øÛøiùöù‰úû¬ûFüèü”ý?þñþ¤ÿc!ë¾t@᳦˜‡ ‘ r B î ™ .¼B»EÏXî›}Ó#t¿÷]«­Á»’AË`ød”ÕrÕ&q° Õ ì  ! ârú§|2ÇXÿþÞü½û§úœù ø×÷0÷»öaööºõhõ?õ0õ4õ?õ^õ€õÅõöˆöýöb÷Á÷)øÅøXùöù|úÿú{ûäûAüŽüÎüâüøüþüý7ýKý2ýýÇüüü£û3û¸ú8ú¬ùBùÞøø øŸ÷!÷³ö=öãõ€õ<õýôÛô½ôÇôéôõRõ–õãõ=ö¤ö÷˜÷ øuøþø˜ù:úáú™ûUüýÍý„þ<ÿêÿ‹,Äi £1Î^ßZºsÈ'g»ò1 Y v x ^ ;  à¯cÆdúiÏ)†Û8•õbÍÿ<ÿ«þ(þ³ý=ý×ütüü·ûpû@ûÿúáú±ú«ú¦ú¸úÍúóú ûû9ûbûû¦û¾ûèûü@ücü\ü2üþû¬û^ûûÁúsú2úöùÕù²ù‡ù-ùÉøVøë÷÷÷Ÿö:öóõ“õCõõô­ôfô ô»ó{óKó'óóêòñòüòó;ónó•óÉóóó.ôqô©ôæô;õ˜õö›ö%÷Æ÷Søøøù$úºúXûßû€ü ýÞýœþeÿ)ýËfK&úÉ­­­ · ´ Ÿ c Ÿ’Ôy‘‡ó]¬Û )=Vw¿ô$E`iP. É`ó¦Tózø~ q¹î ü  ÿ åÌ Œ]ýqÔÿJþµü4ûØùÂøÙ÷÷yö ö¦õ6õ¢ô*ôÔó€óAó:ózóöóyôõ­õVöÙö5÷Ž÷ï÷Tø¾ø*ùÊùoúûœûüyü¯ü®ü ü…üfü?üüÎû¡ûfû'ûÚú—ú?úÍùBùÑø]øò÷Œ÷B÷÷ßö»öšö™ö˜ö‰ötö_ölö‰ö´ö÷öU÷â÷høðø{ùúŠúìúYûÃû4üžü"ý²ý\þÿ©ÿXõ‹ ƒøeÚcì{ “‹öZ¬ C Ž É  ? P S > ) ô © c ñ‡hÔ.‡Ë Lƒ½÷.uÿ¸þþ\ýËüUüçû‡û5ûëú©újú/úùùÉù´ù¾ù×ùúù0ú|úËúûXû‰û¼ûòûü4üSürü•üü ü‰üTüÝû9ûyú¦ùËø øP÷ÑöxöNö-ööÅõnõõ‰ô ôŽó=óóîòàòøòóóóøòÖòÄòÄòÊòÚòýò?ó«óô‚ôôô[õ«õóõ*ö^ö—öÜö÷÷øÃøoùú¯ú=ûÖûGüµü*ý³ýiþAÿ38>D4!÷ÄŒU/   Ê „ •úG§Î qÝH« M|”ª®›šÀó#K„·Ë÷ÊÔ¾•˜¥£„],Ýd¾s°¿Ö ý ( O h i r<ÏKÛV¤ÿþyüûÃùŽøy÷–öµõÔô-ôËósó óÏòÑòøò,ó[ó¾óaôäôLõŸõööàö)÷…÷ø¾øFùËùTúÓú'ûOûjûjûSû1ûûûûûû+û/ûûæú¡újú%úæùµù§ù©ù¡ù¸ùÅùÛùÎù­ù‘ùƒùuùrùlùŽù¿ùõù,úmú°úöú2û^û–ûÅûúû)ükü¸ü)ýý þ”þÿÿýÿy˜5p{Ñá U½_Š ¦ M Î % ^ m r ) Å 1 Š Þ0ìªnÕÜÀ¥š’‘¤ÿþþ‘þNþ þ±ý5ý‡üÑû3û¡úúÙù¾ùºùÏùúkúÌú ûûÞú‡ú;úúú3úrúÐúCûŸûæûýûëû·ûaûûÐúúNú úÚù½ù·ù¶ùmù¿øµ÷Šö^õDômó×ò™ò¯òûòQóóŒóMóñòòHò òò$òhò¿òóqó²óÓóÒóÒóÒóàóôCô¢ôõ¤õ>öÜöx÷øuøÙø)ùùèùjú ûÖû¯üŠýAþüþ›ÿ$•Œ3ùï1<F5 õ ÿ V ³ c Ï G Û uõY•Íò 2/Z›ø|JV[h\:%P böCDÐOÛ_ØŽCä]˜©¥ r F % !R}š•h÷Wˆþ×ü1û‹ù!ø÷töáõLõÚôsôô–óóÁòŽò~òŸòÿò†ó ôƒôëôJõ’õÆõáõöpöñö†÷#ø°øFù¸ù ú?ú]úpúlú‰ú·ú û<û„ûÑûü=üEüBüGü)üüõû÷ûü&ü4ü=ü@ü"üêû§ûZûûÕú¨úŒúuúvú{ú…ú–úú›ú…ú’ú§úÆúéú,ûˆûÿû{üúüzýþŠþÿ°ÿSÆn> Èv†X × z È ( . á ” §.¦ "¬(à3wÉeÉÿ3ÿ®þJþìý~ýý„ü ü¤ûPû ûëúÖú´úúVúúÊù|ù,ù÷øÔøÍøáøù1ùAùNùfùqù~ùvùŽù“ùªù¿ùÌùúù ú5ú2ú(úúúùùÆù“ù>ùŠø‡÷bötõ¡ôôóDóÊò™ò¥òºò¸ò‘òMòðñ›ñgñzñ·ñòKò’òÚò?óœóâóôXô½ô4õ¼õXö÷ö…÷ ø…øù‚ùúµúSûçûvü ý¡ý<þÐþ[ÿÆÿ4¾_´uZO>'ì¡ - ¥  w Þ N © l Ò :•Ô 3a“Ê +Ef›ßF|³Óò(l‹Ÿ·÷-M@Wup&îѺ‚–+³&ŠúAJ ; ; L W 6ìÍÑåÚvþòüDû ùEø÷ö:õ¶ôYôôÌó†ó,óÍòòtòpòŽòÏòCóÛó^ôàôUõ¼õöböµöõö]÷á÷{øþøuùíùgúâú>û“ûåû.üqü®üùü;ýƒý·ýôý*þHþWþ^þZþKþ.þþíýÏý³ýƒýMýýÚüŸü[ü ü©ûNû÷ú¥úrúHúFúOújúŠú¾úæúû6ûqû­ûùûYüÖüfýþÁþ†ÿRÏ‚*Ñt¦EÞkòdÎ 9 Q f c N 0  ðɃJô… “|ócÕ:­îHŸÿÿþ`þÐý>ýºü=üÌû]ûû¨úaúúÍùwù ùÐø…øFøøí÷á÷õ÷øVøŒø³øÙøèøùù,ùKù€ù½ùôù-úiú•ú±ú§úˆúnúUú/úúáù£ùùOøY÷Xöpõ£ôÎó%ó·ò½òäò*óUódóEóóÇò”ò‚ò¦òæò)ó–ó2ôÆôBõõÀõßõùõ*ö{öÝö9÷­÷2øÂø\ùú›ú"ûœûürüèüdýþ±þZÿñÿ’>߯‚D,'' Î F × = ˜ é  8 F d Ÿ ø 5b›ä,Lr„“Œ«ð]¿iÀ *0 3A_ÕØ¹È¹UÀDèiÅûR¬ ô ö ú  Õ¢Áù$æÆÿ|þý}ûñù‚øS÷iöÄõKõ+õ,õõôôœô-ôÁóJóóÎòõòHóÖó‹ô6õÎõ1ö~ö¢ö¼öÓö÷r÷ò÷–øHù(úäú‹ûúûfü·üîü3ýŒýêýSþ¯þçþ7ÿeÿƒÿ‰ÿcÿLÿ'ÿ%ÿÿàþ¿þžþrþ,þãý’ýUýýÅüxü+üÝû¥ûnûGû$û û8ûmû›ûÙûüEüküˆü¨üÚü%ý†ýþžþSÿÜ‚›rÉ7­5¾NÚ\Ök˜¸Ñæëêâ¡\ù˜,º;Äf¹^áQ­þN®•ÿÿ“þþ¼ýNýÆüGüÐûbûúúµúxú9úçù‰ù>ù÷ø¶ømøIø@øPøxø±øâøù#ùù÷øØøÎø×øèøù.ùpù«ùçùûùøùãùÄù¡ùsùGù.ùïøŽøøq÷Äö*öˆõýô•ôrôˆôÅôõcõŒõõOõ"õþôûô õ>õ€õïõ`öÕö4÷f÷~÷Š÷÷©÷Ú÷ øyøÞø[ùçùxúû‰ûü™üýªýAþòþŽÿ%´Jßy$äo9ó£Vá` ¶ ú J ˆ É ú # J f º Ü ç ) N r “ ´ · ¸ µ Ï æ $ f ° þ G†£¡qGí ê Ò ¹ ª v I ü ¿ u , ó Ñ ° “ w ? ó   L Ü h ônÖ\çz}×#U{žÅÐÿðþ"þ‚ýêü{üüÇûyû-ûñú³ú^úú»ù„ùPù2ù&ù+ù(ù;ùIùdùzù”ù§ù¥ù«ù¢ù­ù»ùÆùÓùùùú?úiú—úÅúñú û)ûDûVûƒû ûÌûîûü>ügü“ü¯üÇü×üæüóüýýýý ý&ý-ý:ýEýPýaýkýˆýšý¹ýÎýéýþþ/þLþdþzþ•þ°þÓþûþ"ÿLÿtÿ™ÿÃÿåÿ4V|š¶Ïçú)Pbš·Ðàïóöôîáפ}eG"Û¿«’t\>.íÿÑÿ¿ÿ°ÿ¥ÿžÿ˜ÿ”ÿŒÿ‡ÿyÿtÿUÿFÿ,ÿÿøþÛþ¿þžþ}þVþþëý©ý…ýSý ýøüÛüÆü­ü“üjü<üüùûÙû©ûƒûXû5ûûìúÇú—ú{úPú*úýù¾ùuù ù¬ø@øé÷÷a÷6÷'÷!÷#÷.÷%÷÷ ÷÷÷÷úöòöçöÙöÙöñö÷÷?÷l÷’÷·÷Ó÷ð÷øø1øNøsø¦øâø#ù[ù“ùÓùú^ú£úåú*ûmû­ûûû3ümü¨üóüLý™ýóýMþ¯þÿmÿÆÿVšâ+o·ÿC‚»G‘Ý1€Ôh´S¯ ~æ]Æ8 š þ M ¥ î M – ß % ` ¨ ÿ N ™ Ú e±é?juŽ¥·ÉÕö íÒ´~N$ýµMé ‹  ý } ñ q  ™  ²Xõƒý‚|Þ?ž aÊ4‘ëÿIÿ¨þ þYý­ü übû®ú úmùÔø7ø´÷-÷¼ö4öÓõpõõ°ôbôôÏó‘óWó'óîòÈò¬òŸò…òzò|òyòoòkòlòyòò°òÏòôò.óeó¡óØóôVô¢ôîôLõ—õåõ:ö›öðöY÷©÷ øhøÒø8ù¨ùúyúåúNû¸ûüiüºü ýfý¹ýþ^þÁþÿ{ÿÐÿ0~Ñ!j·ùEŠÊþ;u£Âë>gÇé+EVfs‰Ž£¥²³³®©¢‘Š[7 ЋOÎ’TÝ®v6äœK°d¹ÿ\ÿ ÿ·þUþõýˆýý“üü‘û û—ú,úÔùŽùLùùßø˜øTø øÃ÷z÷)÷ãö‘öEöÿõÀõõKõ3õñôÎô«ôœôŠôVô=ôôÿóàóÔó¼ó¾óÄóØóèó ô-ôLôrôœôÃôçôõWõƒõ¸õöõ:ö}öÈö÷x÷Ð÷6ø•øúø[ùÅù6úµú/û·ûHüÚüqýõýþøþÿúÿpåaØUÙZî}²B×n”$ ¬ 5 ¸ 4 À 4  œ ™ŽþsÚ=‰Ü=†Éõ  ðåêôæßÔÁ®ˆr2ûƒ1Ç^ãgÍ1’ è N µ . Ÿ u îdÞOÁ*‹èJ“Ø!w»Uÿ þâýýSü‘ûÐúú^ù»øý÷\÷Äö)ö—õ õŠôô²óMóñò òIòòÎñ˜ñZñ/ññáðÈðÀð·ðÎðãðûðñ@ññŸñÕñ ò:ò}òºòóCóŠóÊóôkô¾ôõzõßõDö«ö÷w÷ä÷PøÄø5ù®ù'úžúûû üzüîüXýÀý)þ}þâþ/ÿŒÿÖÿ.‹Ë"k»O“Þ-\¥ÙDržÌñ?]‚¢Éè.9RUWTNM@3 ïÜ«Oã¤WÎ>ȈVä‘Gó›Lçÿ†ÿ ÿÃþcþþ©ýAýèüŠü$üÄûnûÿú•ú+úµùDù»ø4ø³÷>÷Óövö0öúõÜõÈõ®õ‹õxõ\õ:õõëôÄô™ô|ôbôSô9ô0ôôôõóëóãóÒóÏóËóÛóáóþóô8ô_ô“ôÄôõQõ§õöböÅö÷…÷ð÷^øÀø)ùùú€úôúxûýûˆüý›ý þ þÿÿlãM¼2¸=Ð[ì…'ÃGÌRÇF ¾ O Î Q ã p ƒ “Œô`¿|äE«YžÙ :93.Ö d£(¡wãTÏOÏ I Å $ ‚ Ä  H   yó~"ÆCÉ2šÝ(o°ýÿIÿ¦þÿýdýÙüCü¸û6û­úú¡ù2ùÉø_øý÷ ÷C÷åö—ö1öÔõqõ8õéô«ôqôBôôéóÎóžóuóVó<ó3ó.ó2óAó^óƒó­óÛó ôIô€ôÀôùô4õvõºõôõ7öuö¸ö ÷H÷•÷Ü÷2øøÜø'ùƒùÊù(úoúÁúûaûµû#ü†ü÷ü^ýÖýGþ¨þÿ[ÿ¯ÿõÿN–è.‚Ò g§ÞBk¬Ëê%?ax“©¿Ûë%2KRNNDB5$üéѲ‘cEÎ?ø­[üžCà'Îÿÿ;ÿïþ¨þ_þþ¹ýYýùü­üYüü¬ûcûûÌú}ú$úÉù[ùøø—ø5øê÷“÷1÷×öcöÿõwõõƒôôºóó{ó„óœóºóÊóÐó¿ó¦ó˜óó‡ó’ó©óÐóô5ô`ôzô‹ô˜ô¤ô¼ôÏôõô#õfõ±õûõBöˆöÌö÷[÷¶÷øœø.ùÉùdúüú‚ûýûtüøü_ýÜý_þõþ“ÿ0ÊdëkåaÚ[ÒI¸)’óN¯ ª b  ³ E À ! h ¤ ñ RÃ8¶.£Oˆ³ö7Å3ß')ôÄ‘e@(üÚœe«rÏ'e• Ô  N v ŒxPÂ}G(%ÿNþýÚü!üzûÈúúQùˆøÑ÷)÷¤ö3öäõ—õoõ/õàô{ô$ôËóWóÿòÂò¯ò±òÎòäòÿòóùòöòíòñòóLó¶óBôëô”õIöèö‚÷û÷]øÂø&ù¥ùúœú)û¹û=ü«ü ýFýzýšýÊýêýþHþ„þ°þèþÿ&ÿ=ÿGÿZÿ{ÿ˜ÿÆÿüÿ0i°ËÞßêóý)-&'øý';Gbz£ÅN“ÆR€ Ää ,Np‘¨ÂÔÑ̹e6å´ŒwfN/Þ¨o4ò¸w/áˆ#ÇÿMÿÀþþrýÂüüoûÆú1ú¬ù<ùçøø%øÌ÷k÷ ÷ªöOööæõÓõ´õõŽõxõ\õ$õÎô†ôAô ôñóÕó»ó”óbóóÖòzò'òîñÒñòJò¸ò/ó­ó'ô€ô°ôÊôõJõ§õö{ö÷‹÷ü÷<øzø–ø°øÏøùGùžùúmú×ú"û_û—ûÐûü…üñüý=þÿµÿ^è`Ï,ˆ÷l“#±7¿1“ÿhÆ# ~ ¯ Ý ð  - e ¬ { ü ‚ û ] ¬ õ ;‚Á‹ ŽýL™«˜’›¸ë 8YT,ì <Ⳉb*ï¶L°ù A œ Ù % ‡ à A u¦£MïŸZøþžý@ü ûàùÌø»÷Îö'öÇõ^õõÝô­ô}ôôóóÝòÃòÔòùò'óxóÉóþóôðóÊóÑóíóCôžô!õÒõtöøö?÷e÷Ž÷Õ÷AøÙøºùÖúügýuþ0ÿÂÿ/CkÌGô”'ll%º2³T/0Ohi-Ùhèÿoÿ'ÿÿBÿŠÿÙÿ.§ÿ4ÿÂþLþþ÷ýþIþvþŽþŽþeþþÒýý|ý‹ýÎýþˆþýþiÿ°ÿßÿa¾9Ðv“I~‹Œ™¾êH„ž¦i1ΗZÄ|0ߎjG3þ̇0²iÿÅþ:þ­ý&ý’ü üœûûbú·ù ù—øø†÷÷ösöö›õ:õÔôô~ô}ô‘ôµôØôôôõõ-õ?õTõaõjõiõoõqõfõNõ1õ%õ%õ0õ<õFõFõPõZõdõtõ¤õ övöööw÷û÷ˆø÷øLù™ùßù5úoú¦úÖúû:ûTûRûXûOûYûjû‚û·ûîû>üüÆüý<ý|ýØý/þ¤þ+ÿÂÿdùŒŠç7y½]·,­+¬)šò7{ÁúA – ù d È * Š ÿ k Ý X Þ ‡©ÐíóïçïJßýþý /=.ý£6·7¶Lü–Ó  K / È x–ãB‚Àܰ5€ÿÎý?üëúàùùšø'ø ÷ãö*öLõuôÅó|ó˜óèóKô§ôõFõ õ­ôFô ôêóúóeô õÇõhöóöN÷—÷°÷Í÷ø{ø3ùúøúÞûÄüýþþÿ’ÿN ã¨WÀêߣZãÙÖÔ½šWéoö™O"ùÿÖÿ¹ÿƒÿ8ÿØþ‡þ>þþþîýéýÞýÍý–ýEýÍüeüùû«ûûlûûµûëûüEühü™üËüý‹ýþ«þ<ÿÑÿQÐ3–îQÎBË8Òü08So‰›¼½Äª„P ¢>Þ…3å­k'ÅN¸^ÿ«þ þoýæüiüÞûWûÓúKúÁù,ù¤ø4øÜ÷‹÷C÷ÿö¯öoö&öÝõ õwõkõqõ…õ­õÙõèõóõñõðõâõÌõ³õ£õ’õŸõ«õÁõÛõ÷õö öö-öEöbö¦ö ÷{÷á÷Kø¢øáøù&ùHùxùªùðù7ú‡ú¾úèúâúÎú’úzúaúpú¤úüúcû¶ûüTüü¡ü·üäü-ýŽýþþÿyÿæÿHŽÌU \È8«%¢5ÎhéoÞL î? Œ ñ Q º  ˆ î F › ò Q ¿ -«dÁ2ß)á=†¨ÈÜмœ’•p=¼wô‹3ë£OìhÒ à á Ç Ý ã!täGšB´ëÿþeüúúáùù€ø ø–÷ ÷jöµõõ–ôPôLôxôÝô8õ‡õ“õ€õ5õËô{ôcô¥ôõ¸õfö÷÷ã÷øø!øHøÅøuù]úTû_üQýþÎþgÿñÿuý¨`ÕëÆŠ; ÙÊÚáÛÇŒ1¾Oï‘l;;,öÿ¾ÿ‡ÿ8ÿïþ±þyþFþþ·ýYý÷ü…üüÌû“ûû‰û¦ûÏûü4ülü—üÚü"ýlýÒý@þµþ4ÿ­ÿêW«|â-}¯ßÿ0Ml’Í6h¿ÆÓ¸„!ºq2÷Á“sIúûM¢÷ÿ`ÿØþaþûý„ýýürüèûOû¤úúŽù ù»øhøøÅ÷^÷ãögöìõ™õZõSõVõ€õ õÇõÐõ£õ_õõ×ôšô|ôˆô·ôÓôâôÓôËôÁôÔôçôõ€õö«ö8÷ ÷è÷ ø&ø9øYøøÙø5ù£ùú\úú|úvúaúJúDúfú²úûOûûãûü4üXü‚üÆü&ý–ýþwþÎþÿCÿTÿpÿŒÿÅÿfË8­ˆèJ²"–ëM® `Ç.zç;¡ú] ± þ S ‘ â # O Œ Ò > ž  d Ï Mµ8a‡¾ÑçiÃDo›³¸¦ºÂ°ŽJáf¡ê7½ G ½ 9 · D ² ! 38CeU;Üÿ¸þ‘ý‚ü¬ûÕúúùÑøCø°÷÷„ö%öÑõwõõáô»ôÀôÂô©ô‹ô}ô¦ôÜô*õQõƒõÅõÿõ:önö³ö÷§÷Nøðø–ù=úâúpûü‘üý³ýJþáþ}ÿnÆý1s³ð7Æ÷å­}P;%3ã«u2÷Ãl5ùÿ¦ÿCÿêþ þLþ þïýôýøýìýÞýÅý´ý›ýýýý·ýîý$þZþþ¦þÓþ ÿ4ÿkÿ¡ÿâÿ5iž¹Óì&_ŽÖ`—Ôíôÿ뿬¶ÉÍ̾µ²ŒOº‚@è˜;åÿŒÿ:ÿÊþcþïýyýëüküøûûPûû¼úeú!úÎù`ùëøløø×÷©÷r÷"÷°ö!öõÚô?ôâó¨ó©óàó-ô…ô¼ôáôíôúôûôùôõPõ¢õöVöööœö‘ötöyöžöíö\÷Ü÷Nø–ø¾øÍøÎøãøùYùÖùúû©ûümü¹üðüý%ýWý–ý÷ýUþ¨þõþJÿŠÿ×ÿ!‡Ü^Ù=™:dŒªÌP«uÅ Jjƒ‡¨ã>‘Ø2ašÅï / … è S ¥ µ Ý ä Õ ¤ — ´  Z † « ê  ì ô 6 ª  2 f ª Î Å † F / K ` t ’ Õ Ê v P Z s q T E 7 9 Ý ü è Ñ  bzSF˜ XS0}ÿÉþúý—ý‚ý£ývýáüCüáûxûíú ú‚ùùïø¼øiøøã÷§÷9÷ŒöÜõõŒõ¥õÉõ ööF÷ú÷FøJøIøŽø ùšù&úÎú¨ûŒüýGýýÛüÁü¬ü«üÜüRýúý²þ0ÿbÿ=ÿ ÿîþáþÿ‘ÿ=Ñd¯°t ͨ¬â=™tðTóÿÇÿìÿ7—éþ¼hâÿçÿrÃúýâ¯HÑÿTÿÿùþÿ=ÿ]ÿlÿhÿYÿ&ÿïþÉþÄþäþÿTÿÿ¼ÿÕÿ½ÿ—ÿ`ÿ(ÿÿìþýþÿ,ÿ,ÿ ÿïþ´þgþõý‚ý ýŸüJüüúûÛû¨ûqû@ûûãúšúPúúòùØù¸ù–ùˆùyùXù/ùù×ø´øŠønøJø0ø$øøé÷Á÷‰÷J÷÷þöýö÷E÷p÷¨÷Ã÷Û÷ð÷ÿ÷ø8øMøiøøÄøúø,ùMùdùtù’ù±ùÙùúùúJú~ú¨úÎúëúøúûTû›ûêûJü¯üýbý©ýàýþJþzþ¿þÿpÿÌÿ$^¤Ù0ešé;p­äRžß[ªoÆ B€¬²ªÍ&9Mu ÄÉÉ÷8cj޵ãëÅ¥•œ¡Ž{s€j»}ÄzOþÝZGÚ fÞ5Hb¸8Y§;·TÚ´¬­#ƈS £‰ãšE§ÝGÞ?=öÇ×á¨S¬þÿ‡ÿuÿžÿ×ÿ M˜º¸¿-Ö¢HeiGúˆË¨„7ÔcïÿŸÿ[ÿ0ÿ0ÿ«ÿbxÜ òòß¼fý ÈÌíÿúù æ¹­ñSÊ&x¦¥z·OÉj4 æÿ´ÿgÿÿíþëþõþÿ(ÿZÿ‘ÿ•ÿgÿ;ÿ ÿõþìþøþ ÿ2ÿ6ÿ#ÿõþ¢þCþÛýqýôü]üðû§û…û@ûíú§ú¢ú°úú\úMú†úÍúßúÍú²ú¯ú³úŽúvúYúUú`úZúOú'úýùÅù’ùbù.ùùúøù)ùCùoùÑùWú úÅúîúOû·ûïûüûûûü8ü=üüéû¿û¶ûºû°û’û{û–ûÒû'üsü°üáüý2ýDýiý¶ý-þœþîþÿÿÿÿáþ´þþqþ^þiþ™þÞþÿ5ÿ7ÿ.ÿ@ÿhÿÆÿLwÑkï ÌEàÂâ(yš‰WÖ.›³ü¯(”ƒ2ôñöP ´‹zùÖH÷d'^€C¥ª>6C^7 I°ýíâþÝôÓŸ¶Ö-¢Â7 Qï‚ÊÒ koì±ì M°£gð»?¼ ®ÞÛ„”õ©šäMdWŠïÍ GCÔÄ¡­õ‹ÃY¶°~ˆÃ÷ÞqϾR"x$¿øO€¸ýÖøÿœGF%™ë7Å@l™z¸â¹J¬»nòHd{ç(Þã  6éÿ :Íòr¶Uj‡”ÕÿÛ%zÿ`ÿâÿC2 ÿÿ·ÿïþ!þþ‹þ!ÿLÿóþdþêýæýPþµþrþºý&ýqý%þ¸þ±þLþËý\ýüüöüžýNþPþ€ýÅü×ü@ý6ý·ü}üÈü,ý7ýüüËüýlý¾ýÁý©ýÆý"þQþþrýHý‘ýþþŽýIýŽýþÈýßü4ü~ü”ýšþ§þ±ýáüëüqý¡ýŠýxýÏý™þˆÿÁÿÿâý-ýëüïü.ýµý‰þdÿÎÿ^ÿþËüÖûü„ýtÿ³ÆjÿƒÿsÿrþnýþgŒÅþ þBr>ƒýáûýÊÿ€Âêþ[þ÷ÿèž ÿôüõüÍþõœÿBþ þEÿã |ÿþiþ¬Oe¯þÁüKýŸÿ¥‰åÿ›þÌþ‰üà-¶ÿÛýYýiÿ¼(øþaþ1ùßþýÌþqfÿ°ÿ ~Äÿ“þôþìÿê£í¨}àþðý¥þŽž‘~þþ…çòHþ†ü{üßþMò„þâÿ  8 þóþªL¿õvýÿª…wÃþxü¯ýÃ÷áËl4«þ­þàÿg(8ð î˜OfÍÛÿÛþnÿÀ³Ð^#†½ÿ„ïܦ¡ÿO´g¹›oþ-û8ü‰eÂÛþðþ‰[̰Õ&Ϩ|œUÖ(ßþßú¶û‘)úóþ÷ÿëYÂCÿ»ÿP2ˆJõŸtžÿ8ýþúcŒ²‹ÒIÿÄÿ§*n~þáþA§LH/:þúûpýʹöUý¡ûÌýØZgÃOŸþ×þŸÃ»ÿáþ«ÿ Úÿöþ§ÿM¸ÄˆÑümúÚûE…æ¥xÿ¥ülüÑý¥ÿ2÷'…Tÿ”üæûþþƺÛkÖýjû´ûbÿ¯lþþ_xjÿü¦û#ÿ(]ºÉý‘û%ü/þ’ÿÉÿàÿ•(Ceþ­ýÎÿ¶÷iÿ@û™úþSµ‹ÿÁþªþ°ý÷ûôûÿ÷gA(þŒûOüðþŽ§Î½U—[ýEû×û¸þ}š}*ý`øÉùEuöÿüöü[ÿ³žÿ^þ(þþsþ•ÿ×nTºõýtüåüóýÉþÀžTýâú{ü0WY1ýHýÊÿÖýöüàÿ}'¯½ùÓõÅúÀK–übûÉ "ûøDýI«çþüÍþÅŒRþû¥ü_7mYýÝý{Ÿµ¶ÿ7°ÿèûƒûp¾üZùÈýWé`ÿ‚ú¿û¸óvýþíEÌþxûTý5R+þÿÈ^­þ%ú0úÿÕÑØÿóüBþÿ€é^ýÿüÏÿv¸ÿKþµÿt©þHü²üÿ¾‘´Øýµü þ(FÜè,ýyüWþ‰úƒéþWÿªÿ·ýûlû3äÝìøý×þÒù-^ûÆøgûRáÏ÷å‹þ8û€ù ûßÿg sÍÿÿ’ÿœÿ³þoý/ýêþy¦$Âþ¨þHSÃ¥ý.û²üxºXZÄbÿ~ý]ýÆÿ§ÿÎûÃü¬S‡"ÿý;ÿæ©ÙýúNý?VÉýü6ý5ÿœp\ïý(üý†8äÿÒúqú®þ‚GËÿ ÿŽešÿƒü+üKôãþRú»û ÅüPú«þ˜e:ûÑúG±Ûÿ ûûþ=ÿŠþ¾à±ÿ&üïüÙþiüúü¦ÿâ…<D ýõ÷¥ùè@ +þ=þÛxwüÃûwþÞÿLÿ¦ÿïý¤üÛÿ¢‘aÿªölõ$ý²¼ ¦Mûöù´ÿäž"ü.ú™ýËŒ»ÍýSüÐý)ûþqÿVèþØüDþg’.~ýþúßû_þß롲 ÿÖüñûÿ„Qzþ¡ú´û2FôÿIÿ9ãÿÐü­ùÜúr†Dpü¢úëÿÄ@¿üøàûªñ¦ÿdÿ›þÕüýô×#ý€úÛü¼Á{3¡ß²ýUø²÷âü&Nì©ü±ùØúŠý[ÿ¢ÿóÿ·WoÂÿÔüÙúÿú3þï ÿâýÉ{<ÿƒù„ùlþÛ¿ãÿiþ#©%ýzúÇûÛZký-ùý¡»@ÿkúŒü¾‡ÿù™ú{ßEÿ%øÚùÓ¾ T9úòöâæ $ ¹þø#úHÃ~IO„¦ÿfþÈývþµÿŒ:ŸxÿNý:ü8þ6‰¡ýþõü¾ýcÿGRè§|ü1ø9ù½þÀ/¨IMZÿÌüøúÒûÿ„Ñ/—üúMûuÿ„cÊüûý!ÖñçþWùÄù-õ :µù’ùNþ":;o<ü6úíýʲpú¾ú»ê‰:ÿ ý”þô} ÿXüüüE#ÃSý=ü~ÿñØÿü®ü¬Íílüâú-ÿ!¬üˆûùü  Ú²îþý8ûoüA†öþ8ÿz<zþúüdþŽÅæú©þqüýêʘèÿÙúùrü3z˜µÒûý÷ÒúÝCÿŸý†ýÇþÚÿa¡ã”©ûVú˜ýÉÊ6¾ÿÿîþÈÿSjý¼û³ü ÿ³r}þwûÃú[ý‚×Ãÿ­üËþQ,M¶û`úõüPaðýÑüÆýÿ–t<Lþü³ûµüŒÿ°\ù þ}ýRÿn,wÃþ&ûÜùäüæ ©cþŽûAÿV)lúï÷¿þg Å áŒö¼ñ-ú×+V úuò¿ö×ÿtZþiùüèèFú6õcú,˜ èeûõqúägþøŠöôý»QÃWúiù9ýán‹èòýûåý#ˆŒÿú‰ú‘½û´ÿ"ûàúCÿ¹˜íüöù&þjöaÿèúiü{Øy½û9ü–‘Mgý†þñzý¼ûäýõ¢&·ÿlýý3þ¼ÿµéׯþ€ûiûÍÿîœRˆút÷‹ûhºþ þ’ÿAŠþDý$ÿQ¢» SÐÿCþ*ýþj˜\XýDý^&Hýüæþ?ÿ˜ý ÿœåaþŠû&üËÿ&Y/ýpüÎÿ¶ìÍþXøßøâÿŸ!*þØû|ÿþ ~ýÕúþÙþþ<þIó)ÿ´úÁúêýý¾€ïdÿ6ÿ— {þZûüôl)+…ý¯ü þëÿïQ™ÿ — eyý¯û—üªþ™”&k§ÿÈúúüþ¹7þÔùÜûbØÚ‘þ#úûƒÿñ™ÿéÿ×Ë*qü:ùìû° C×þÿx˜üáû"ÿDùú²“ïòÿRü¨ûØü:ÿo <8žÿÏcPýúùKüË­îþÙû²ýRè²þÞûpý‹e¼Pþ‰üêþ•ÿû üöÿ &ÿüþo@”ïÿóü!ü\ý'ÿmº±‹ÿ'þAÿõ‡2ýÛøaùG”šWú8ûÛiÿýÃþ&þÔÿéÿBÿúý<ý4þáÎþúíüÃç¼øû¹û–þ<š#ß¾ÿVþzþýÿ@¾þ÷ýßÿÚ¨îü üÚ1Æý£üÅü¢þ#Ã=”ÿVRûþ®úNû&²6aþBþèigûfú-þs­T¡aÿÏüäûAþS5e©þüLýÐËì'ü'úþ&©Cÿ¸ûfýÈ œ,üJûÈþÎd‡SþŒþžÿYfo‹ÿhý_ü‹ýoX‚ýâü•Ÿp’üÆú þŠ}ýÂû¢ý ;)pwþüüþ+ÅOmtÿøýþÖþÕÿÛÁý.ûïýÉL²-üäùôýïÓ#ýýïŠýyÿHÿ2ÿVýJüLþŒž‹—üþ÷¢ûÁˆÈký ûÅýØAûÿ‰ÿFÕþýý<ÿÃýþû«ú~ÿãÀ”Túœú±ÿKLFü$úþp¨·Ûú#ù£ý£þ5úù"ùþp9ãüñýü7üþ/Ù8¦ÿæÿ¼ züïù°ýí—õ#üÙûMÿ©À=ÿ¡ý²ýþÿ'%µzÿÿþ+ü>ü1þŽxQãKÿGú÷hú1¸ ‹ÿÝùúÿÇIÁü5û}ÿ4øýFûaý¾–Eü¦ùŽü<¯›ÊÿüPúüçÿý&«ºüñû¶ÿÛnþ>üÒüÎÿ4e%ÿTû¤ü}Pô»ühúAý@ÚØŽýÚý…¿ ÿÆúzúÿÀÏè4ý›ûËýóWªÿÔÿPÿñþFQÿ~þ£[î<ý#údüÀÉaoý üìÿˆ=.û>øöû÷ÍMû‰ù¢û@ÿbô¸¼ÿãý<þYÿIãÿýû³üä¬ó&ÿ‚þTÇmñýGùúªÈ®üäùÑû‰ÿµÿþE× á4ú\õû© IüÊú<ÿøràûzüb°‰þéù6úpÿ/n8kýhü\þ ÿãý‹þ|¿þüâôšõÕþ!: ýsøeú^mCÿn)þ×ûÅýÀœÿMû9üD¨jÿ…þ.ë4ñýÔúÕûþ… hÿú†ö2ûzj…ù2÷ý|Ô M¶úŸõ3ù» KÿüZõÃøøQ 9¿üª÷øû­Ãþÿüo¹ÿ²ÿmþßÿÒÿ3üTùoüáUEý^ùWýìàùð÷Fþ(›tZûuü«ŠUúÛøäý4°‰ÿ±ÿ C–þ`û^ù7ü²  @þ~õÈö©þ’ñNÿ¶ügþÁA©¥þþWÿËû§û¸ÿY¾¸TþïøVøÖû¾c€ÿ1þfýƒüwüêþ7 "–þ-þºþÿóÿ ¡®þ]ý£þtQ©õþgþuþUþ°þC¯B8 þùiùòþΔîýÑûÈý’€ýnýeÑSþÉù¥úæÿIÉSáÿ¹þ_þÍýþ®ÿÜÎúÿöÿ—³ýDû¹ûOTrÿPúûú¢)xgüû ­ —ÿëö6öÿþσ føŠóÐø£uóþOüóþ>Éáý:ûuýF7lBý§øøûrúâüOú<ü³þ;Ž`7«¢xÿHücúÊüc7û{þQù&ú~ÿ@ÉÿWýáÿ1÷ÜüüŠþnÍjÿ”ýFÿìÖ-úý ýKÿép þÍû5þäû1—ýóû}ýßÿ˜¶ÿXÿ9xAþyýoÿi±0þMý+ÿ^ˆ¨Žü}ûLÿJhöþøûòû§ý'¢(ÎJ‡éüsùïùÑýðëÆÿ"ýÐü¢þW¾[>|Þþ=ýäýæÿy£Úüÿªþðÿ‚ ÿþ£ÿzI!ÿiþ¢TBlþ´ø<øüb°S©x©ý-ü5ûû·ý"ü×;LúrøÓûã©¡ü}ùü7¶1t»þˆý“þ„"kýpülÿ0†PþüýéWéýööuùŒ8 ¾©ý ù¼üK­ü]û(© ÓØû3÷vü ¸Q7û7û÷âºÿµúyû‡!s‹ÿ&û¤ú ý¨Dÿ¡ýGùÌú´‡ýòþÎþ¿W ‘þÿQÏáùüûœþÛ)3ý+øW÷­úa£÷ Ø ŽîöÙñ÷õrm è LñûJù^üWÂACŠ™ƒPüð÷¼ù# ^-øåõ}ü'ëi)üý>ÿ]þ¹1CþÇú\üáO¯ARýwý‚ÿs¥ÿcþSÿ½ýÚüµúý­ÿÞâGþðý­Ç +þùKû`w*D¿ýtüÇû,ûYüìe^Ý,ÿÚú.ú4ýØŸEUÿˆýŸý¼qEböùÉ÷ÕúäÿDÃpQ M÷bôžúÛS%¥ýVûNþ®»*ÿyú¦øÆütâ ï y"öîô›þê1¤þ ù’üŠ( ýõù¬÷þz8ýHúÐþ^ú!’ü ý×iõÿ¥üiüdÉ¢ý÷ºöZü Q 7yþ´ö™÷ûË P §ÿ(ö(õ`ý•# °ýæú_ýšÿ1ÿxþŸÿBÐÿYþm%K>ý‡ùÙü™¾§¹þFý^bprûCø®üps &dü'÷Òú/Ê“ýløÊüEH X`û¹ô¯øë–ªþ¥üòþ^ÝDþçûcüÌ}è'çù4öoùñ÷{z!üžþБúùÿ÷%ÿ>ûþ¦^wÍû’ùGü¢vÞ¼ò^ÿìý»ýVÿ˜òÑþ?ÿûçÿàú ûïÿXùÕÌÿ5çYþBùËø5ÿZV þ GýOü üWý¡ÿiPp¹_Y,ÿÓûfú–û¦ýÁÿ¢Û‹‡`þŠùý÷÷úy<êJÿBþûþ¦ÿöÿÏþ‚ûíúÇþ7—Õ³óúø^ú„ÿl^"cÿü(þ‚?ßþŠú¶ùýþ-¢ BIû[öúzé¾þ‹ýoÍüÚû‚C£ýOý”/žÿxü™ýY¯zþxýš\ÝAüÜúþ9iAGÿF)3þ…ù\ú§Ö-sÿÕú‘û¬ÿ¹±±†ÿ!9[õðþ›ü»þ÷,ãÂýdû9ý6¹ÿ³ûNýÔkìfüÝöÕù“•Ô ƒªæþýrþƒÿjþ¡ý8ÿ2<àò9ý)úoúýý‹Trœü$ûyýû]J cù2ôyù²Æ Amþaù@û þ_žÿÒü üÿò(˜þíû¥üåÿw‘õýùü%¸qMûýÏûûý qZôj¶þBýÿrË¿þ)ûvýŽ‘•åþýþÞ®=Äÿ¶ÿsþ@6ÿ}þŠþj&%ÿ¿þl•þBýÿcêNÿùÿnúŽþtù´ùuþ¹•SûûûDý#UÑÿ‹ÿàÿÂJÿÙþ¦®Oýü©Öà˜\ùQòËö-/ ú PùgøÚþ6elýšø¨û Ó âÿ·üØü_þÀÿ áþ¬þ>ó°Bƒ¢þúNù ý¥$õ GüGûáýÆÿ“ÿåÿVƒyÙÿåþÎÿ(Ff¯üÂùæümSÚvüeú^ÿ„.¿ÿ-÷mô_û6¸ Řý0üüü2üªþ±çÐ"ÿÖþ¥ÿxpÅü7øÏùÛÿÕ”å(þYû%ÿ =¸ûÛôwö] ëÀ;úqòOõcÌ \û`ù´ý÷ ôbþ¯þ>±%óýHüýÜÿÖ\c°‘þCùø6þêA ”Òúkõœù”LjýoüÍž íýUúûtÿÛØM×ùçøéý…¸]ÿÎúøúáÿÈ›Yú’óÜ÷xª ¢!øçøñT ‡ Ê•÷wôáù»õ[ñý†ýIÙpÿ]ýý“ÿ¢ãèÁ·íÇýFü2þóiþ™ýÄ^ézû”÷´úä„+ÀýÿOÆþ ûû;%oÀünûÞýAtþºüÇÿlÅðýý¬õ9ôsûPu Mþý÷)ùPÿ=ýü)úûcÿµ°õ£(e©Ýý?üÌýUD«ûÿÊünýêüýlúçüX)ïßüÎùUþX ‘Kø8ôuûLBŽ ýöGú1Ë6©ùÁùm³ n ïó¤ð#ø)› * I[÷»÷ÝþKY+þ£þÄ»SøûÆø\ü½ˆ ìwüýõù9kMYþ7ù¢ûr'ª,ûì÷pýðéyþüåû¿ÿãQIþ£ù®úÇÿ#¡2dºäþÛúHùýüäGùÿüêüzÿ Íÿ9ýFý([‚Ïûbùšü rǨ&ü,ù&ýß’ÛýA÷®ùL î÷ý øóù[9„ýíÜ€ûm÷YüC3 @Hÿø:÷ý§Ì± þÑùíú™ÿÇÿüÏý—iþmý¸ýŒý¤ý¢í, XÀüéóîô×þýú‚8û ùFý·c\£ý¡ù;ú'þ¢MÝ.šfûzù7üÇòäœEþ<ÿ(ü¾ùüçv>ÿ†ù»ú²ñ=oÿšö”ô+üH§ ­NÿÖ÷j÷"ýQ¤Nþþ«0<òüúôú`ýÌÿë°™­eü‡û þ8jrÿæþÍ–«N¾ü€úšûhÿÓ,Weû_úOþÉÈÎ¥ûÕùwüÝÅÁp)úqöÏú“¸_\ýàýVÛÿˆýeýïæ ‚ûûBþ9þ[üWþãEØþ©øõøéþÙç.ýúùxü“Zÿëü&÷Óøÿ\îX•­þSüºüB\8°ÿEhÿTþÔþÌ Χþ)ý~ýŒÿñ=´®ÿ`ýñû3ý±4Á©kýpúiûìÇ:ÿ‡ü­ü™þ~ÿÿ£dÆ!’þ›úÆúHþû¾bïü‘ø6ù@ÿ¿‰¦Îÿ1üiüÏ?/þ§ú@û¯† eÖû:ù¤ûÕþäþýxþ&] á„ø²óŸøá÷ w “­÷Ëó½ù;¬ ¡ ãÿôAñLùdy » ˜í÷»ö¹ü»Ú”ýþˆâ + ý–ò¨ñÒûœÐØ áýXõ)÷æÿ-Ùnüô‚öÁæ 5 ?ÖúªøžûhþàþíÿÍ•¯>Aýû‹û%ûÅúýŽä ã ‡÷‹ñ"ø¡Ýä ºü"ó0öRu VXÄù,ü"‘ìÂøôDøà õ ´VúêóAõ•ü  ö þe÷=ôúòüäÿ€ýtýÊý þÿ®E?¹•þ½ü|ý}ÿuSæd u ÿûûß@í/°øÑö¯ýhÓÈüUýQ+ ûù÷ ý܃ "þüTù®û¢ÿu9þÎý}Tî þºú¾ú{þéqàaþˆúüÎtÀÿžûÍû@ÿ€º%3ýFûìÿ;þÿþÓú’üêG–4rùv÷lûÏd µ¼üø úͧÿ}ý¬ùBþ h¨ùÝó±ø7Ú ³ @ÿ‘õØôéý  ‹=úÂòæõMÿ@ï mîÿôúûúbÿñ*tú×÷žþ• ýß&üäò1ôý¼Æwáçþ úù²ü>FW éÿÌýÊü{þºí²ñý[ýØþhÞtP:òþ¡üáûkþB™©8þºüíýÝÿ´‡±pŽp‘ýýú(ü$Ž&.þýÙýÚþ™üUdüö²ö(ý×ÝŸ=]ÿíù/÷ùÛþæÈXm.5ÿøúRú¶ü:ÿ(Ài/þýCùžøàûÝ!åÇÞúþñûLúxûvÿ9U…1ú^÷!ûD€ž ¶ úõ´øfª”%êþÙþbÐýüºýÂ/È ÿöüëýÔË{ý˜ø«ùZt€åFú«ø‡þl/ÿûùüÞt å,3øõ;û Q¾þþtQŽÿùÌöeû £‘ÿ·€þOúúÿö/=þùú ûþI*nê9ü.ùéúŒÿ\+J¢YÙþöû—ú÷û7ÿ Ð —ú+úôEU)nö.óúž }¼úƒúVÿÀpÿeûóú†ÿ’°\ÁüÛû´þâ ŠýÈúüÀÒ DýÜ÷yù$ .üi÷¤úiÄ … V…ûy÷-ø7üÖ)Wº{üPûÿ»ÿ}ùÅø6ÿIbûèúMÓ¡å9úÁõvøXN ƒ SÕúºöxú€Ù#_þ]þƒŽÊZÚú¶ø¢û pNOü/úÄüF×hMû2÷ùñMÏ6ÿ=ýÞü™ûWûeÿôwv•ýÌùúýt…èD<A ûô&ôíûaw F%Žûyùjúwþíꞎýü\ÿwF¦ýsû/ÿt}9üƒûÜþCPÀŸÿøRöãúúž`ïžÑÿ_ÿ²ÿRÿBýÙúSûÇÿ@®Ö«ý-û}ýwiNöúzö·ùð¡ŸÝ¹qÿöý%û»ø•ù\þããUþøÉø’ÿÒÃ’ÿaø ö7ûá ! šŽù¡õŸùJŽÑýçn¯8ýõùÓúŠÿ+LñÛþÑøÔø ý¬ˆ¦ÿ¬ý·ÿo-ý©ûÿ Ò1¬þÂÿ©W&—ý¸úUûuþêD•Vþ†üû[ýÔEîýØú¨ûÞÒIüù†õ#øÆyz“üšûœÿèPüSúÃýO çPý¾÷ºøcÿUû ¯?ùŒôËù–å ™ 4ø÷²ûêqËü¤ûsý~ÿ>ÿDþd¿ÿÛøíó^úÎp ßåùõýÔä œõ¢ô3þ 6 ¥|úZô!ùãß{ÑýýöøøçmÞ YþÇï‘î;úµ?á õØ÷”õµúÀS·ÿ²ÿšå†CýÒøøxüœZîqü4ø©÷üä1?þü­ûýWÿÞ[I”¥ñùô¸÷¿3 RÿüÜúgüŠþ=kºÿÈþôþçÿr¬ÿµþºÿô=Ëüò™ñùük Æ'Xù$ñ,ös 0Lÿ;øpøkýyš6‚ÿÏêoEûZ÷\ùòþø[ülÿ*ÿü…ú]ü»ÿ»Ãß)Êüyý¼âCÒú7ùºýa© [ü/õõ~üú9 ´&ôú?ö÷ÈüÑX#ùÿ·ý8ÒxüSøûz )Šý øgú™9“ü?÷¹ú]ýÿ#ú¦ùôþéàÛüXúðûO*Ã6ÿ(Í×ûÿ8üùú‹ý‚,’ýnûêúxýê¹âýÚüC½},üúšýh½¬ üµøü )õþìûùû<þ¶Ë4ý‰ú¬÷@ûB»‹ üfúXýüIùþ@þÚr¥¹þRü©ýû€/ý°ûÅý›;…Ý~þ*ýCüÆüÿß ¤Õlü‘øú*ÿ•ÉT³öýeý±ÿ;;ýpûÉü®¸‘ nûËö²ø·ý<Jsµ{äÿpûiùúýÑr_]'ÓUÿ‡ýlû$ûaþP(Õÿ{þzþüþ8ÓÿÚû+ûoþB¶ÆÁ+iþÖú…úæý>!i¸”þDþDÿò¹þ½ûwûÜÿï Ô ü¾ù?þÈ9Èýöøxúá%ŸçtúDù:ý[?ÿáüÜþ1 Bƒý1÷æøeÅ%þ‡ùQühn^áû&úVÿÌH[üPøiü², ©\ÿ˜ø=÷UüÍ*Hø›ÿŠúÂöl÷ü•¦ ‚œÁúRøÌøeú‘ü!`, R aþ=õ±õ þ¼Måüùzü?ˆ…çþûøkù ÿéÑ-cüáû6ÿ©˜)rþõõLôdüÙøœ¯ú–û–<çý´ý‘èEþHþÿŸ=ÏGTiþóù÷ùáK j ¶³þøÞöŸúÿ7/Ýë£ûü(ý*ò©ý,ú@ûžþ,iξŠðþPú¸úßÿ%¦]ûäùÈÿ{±ÑWüaý,úFþ[úÐù"þíJ ´ÿBú¶úªþĬLþKú«ú>Y ¨ü¹÷_øGý¤O²@¸‹þYú'ú­ýÜF¼ÿ/þÓûyû®ý–$•‰çû-õ^õúüÙì[ yýàñÈñWû: ký³ø`üñòíþ÷ú%ý,‚Üÿëû‰ý³à mçý1ôGñUø ù O  7úõJø³oIý”ùiýFÅ ¸üõžõ-þ 7ßý¿ö÷þ‘D8Éýëú¿ûðÿYL‹|ú÷Oû>Ž ÓùOó ú5:Ýú¾ò÷Wq a|ü±ûGýoþ(Xõâþö÷ÔõZøhþqov@\TýNö|ó÷¶ÿ ç ž @jø õøëþç   ðüjõröÌþUö»„ú$üZÁÔÿí÷#÷ôÿm ó ¡|õRïöž3Rs¦óõï`ø®& ¹¦ÓýG{æû…øuú§ülÿ ü:ý&ÿ²ÿ_ÿóþBþ¿þé“c”†üéøùòþ­>…€ÖÿWÿÖþÿž¹æý›ûnýCÍÇÿµø5÷Ìû”ÍÐôiÿfúùÓüØ[ -ÓÿÕ÷Ð÷Sÿ@ÿ›ø¾ù âÿ4þ  ÃûßøËü)· Ä Üþfôèñêø‡þ  ÝÕûèø_ú”þ±µ†ïÿr„¶þœý{€˜ÏúZòíñ¼û óæ ¤w÷)ôŠ÷,üÍÿ7½„GxýP÷^öHþÒ¤ œböìôßþî +Ãî÷Áð¶õû•©ú‚ù»ü‹ÿtõwLûA÷@øòûbz£zH}ýäú§ø÷6ú¿ Q nú™öBü:ùz,û[ù ý,Öê¦þ±ûŠùÈù;þ?¬ W ܾ÷Ñô/ú¸CåSÿ¬þYù˜÷çúû º?ù´óJ÷éÿ?íçþvüœÿ‡éIû÷‡ùãþù£ÛÿŸþ¶ûÔpKü}öëõÞùCØ. ™ú`ö~ùÑ2'Jþe÷³öeþ ‹ þ ÷÷sù«úÏüW ±ª|ú<ï˜ï‡úTÓ <%ûRùÏù¾ü!:¿ÿÌú–ûgÿŸ]gÿtü¦ùhù0þ’r Öî>úøøÍûíÿ° ÿ1üMþÞ ³Ûÿ÷VôøýþÆãbÀÔ]#üeûü²û.û‹üsi Œ °ßö#ó÷{ÿ~ö“ m c ýñù´øwû·ê©4)üØûOÿ'÷iþÕþ‘6ÿ‹ÿTþ#ýÿ縀qý¾õõôü¬˜–_.àíþùlöØù…Ö?ó¯ÿñý°ýÑü7ûûÚþò û6÷ZûéÉ ™ö¢ôõû½® £Öü-õžôYû©H „ùDöšùÓþÿvý®ß B Ãý¡òŸñþúô © ÿ=ù¢ú:-n7ýT÷Ôõ9üh•ƒïê>ÿü¬ûêþòI”úø_ÿl ª#Ýøñ¸ôxýí'üþ´ ' Óý#ñ¦ñ¢ü»j ç ù øý\’ÿ|ýÞÿ_bTŽùaò¯óý «  Óõþûø÷Zø«ûêÿ­ä”AƒþCö‰ñóõ\) Ë ÿ(÷€ö©ÿ¸qý±õÏ÷~ý Gòúðœð»üJ ) ©ìÿŽý]ÿånýŸ÷ùöpÿ" c ¬CŒû‡ùSùûÑþݤ·“ÿöáAðéø[ô?÷lÿ vÕù®uüó«ðýú¼y¥ nþ©ôöÎÇ–ˆü¦øsý@{ G üõLøD×Ô¤¿þ±ÿK-‰ýúîú\þuSA2þ¶ù#ûÞÿÛ#Žþ%üƒþO ¦2üó³ô5C ñ Ò£ü³óˆòèùl ¨ùŸø-ý@™£.ýÌø:ú½§Ìîûû6¥÷üÁ÷}ù2¦ $q¯ù²ð#ïNödKZb !úœï@ñû‚äÅ ÕgüŠóqôüXÛdS8Á­úéôÍ÷8ÿºW…^Q4`ÿû‹ù•úûüë8L Œ~ÿ…öõQûîªQÿ¦üoüÚýô^á|þùƒù÷ÿfRܹþ©ýýü#üÊý@ 4³¼þøëöü  JØý’÷äúdd"°ú†õâ÷1þ\jµûÃü© ’ú%ú&z (Cý‚ù ùºùeý¢ é úŽõúùfA_ÿ‘üp W &ƒóöíÒøå 9 åúô.ø\oºý²ú^þÝtŒ+û'÷û, Vñü—ü2ÐðºüFù©ù?ü\gQ}ÿ*þâý»ÿþëW!ý'üÉû0ýù Uô'9ÿõú÷Xù‚Ví 9~úÒõ‚û”o°úýø0ýCQ¶æÿçþXÿ,Ï(qüùüùÛÿû²¤úÔú!¤üBõ õíü & Ÿ=ÿèø‹ølýÑ´/ÿ û_ü¥ÿ²ïkµ3þOü¡ü·ÿ\ÁÓÿ6ú ø†üO ' š6öô¶úØéöCüÍüó¨  ûÿ[öYó´ø¦ ë ¾üõŠòø—.q Î}ôÃðGù\¯ ûý[ôYö•ýËÐôýêþ'ˆÿøùÍöÑúžU V fÝýëôÏõÐÿŽÇ‡þ ùáû¶¿fZIþÀúëøðøJû÷ÿá¶öOÿýœþiþÐüÍýìf¬¿þ.ú$ùüýƒÿ÷º÷Ó/ » ãIú3õê÷Ëx ê —*þøÑù»ý£ý-ÿdÿÁ*á}þJùÁö:ú ‘ ¶³ÿ=÷õü¼dÂýˆüÀþÒlžSíöòèøbã »%þ€ùý!ûÐúáþÑ÷W½þû2ý±%­þ;þ¥ÿwk[¸þ ÷åö¿ý¯ Â÷©û¨ù‹û÷ÿ˜SñôöÊýÌùùú ͽüR þÒù=ùHüÍc;H~w,þøèõƒø ýÝqì£wçÂù@òýð'øtƒ û BÖWþ”üÞødömúµI[ ÿ*ÿ‰îþDûãüg"­½ÿÿA.Æèÿ¹ýZý³˜ÝŸþhüwýï×ÿùàøÞÿ×ÉQ½þÇü²ü ÿÖLÇñý©únùÆüši¨hðþyýüaü ýœýœþ±Bå˜Ëÿ·ùzô1õñü¡SñÎ3:ÿ6üûúûêü*ÿlÿŒÿ{ÓÚ½Ýþ\ø öù$ßß7uô³Ùø¼ðÁó#l Í “oþ}B°þ§ó{ðÞøWV  ÷^ú7÷›ûÄ£óûFúfýkiÿCúFûªÿà%þëÿ0ÿ»þÍþÓÿ•ÿHýäü`ÿ£¥í‚ü ùÙù˜þÞU”ýuûýJàňݦÿÒù÷3údÝ?¤þ¬üÑû%ü¨ýÉÿÀ#•ÿ7îNÝgþ^üIýðÿÄÿÒýþSóÜkSÿÁý»üÍûGû]ü7ÿ±éN´Œÿ‰ýòúùDû{IDeÿùü•þŠ#ý†ù^û«ÈaQý]úVûÜÿu•OGøþ`ÿÊþØý þçþÃÿ‰Ëmÿ'ùÚöú<0V{þÿ þZüµü#³yþµû0ýîÿÇ?šÿ±ÿõÿåÿÛþ¢þã>Ѝ,üíù¢üz!  ê~ûiø“úÿmzÿÛü„ýÇŸ~RÌýŸýS‚ýœæýÙü5ñ Ÿ0þ[÷¬÷þµKcþ¸?cþòúúù^ü`ÅÕ çù¨õønÿ9 õ1|þ7üýaÿ,ÄÆÑ}-uûÙøNý·a ‰oügôÖõ þ.¹báÿþ ãqüü÷zöÌû7. 2}AûüÆÒ%èýåú¼ü~.3¥ÿàgY±ý<ûöü”åÿçfý³û4þ=—ámý5ý¼ãÙ}çÿÎýŒþ¬,Rÿýßþ ³ Î ôüËõõìùµÿÔaƒü° zýûNûìý”yƒ‰)áÀ»½þ.üÙúRûbþ‚¢ø fmúÙødûÃÿÙkº5 ÿÔü®ûNýç‚øƒÿF ¦Ò[þý^þ¯áÌ=ònÊþýŠûQû+þÀømÿvþÖüýÈþ@ÿoÿ#¥BP[…ÿþ9ü|úWúœüR8¥“§ýúŸùÖûÂþÿ±O$*:•þäúÝùû@ý@ÿö—ÀÉrÃÿÐüû4ûºüßþNÿÌ\Ãÿþ…þ%ÿHF‚"¢V%Œÿ ÿ†ÿâ¿}Oâþwþ ÿ š^«*K>.aºO£þwý<ýìý¨ÿáb¦ß þ¼ü^üvýÇþcÿœÿ¬€(¢IÎý%üûûý$µ7†M"íþ_ýzüHü9ýûþ ðÕ0ÿvþþÍýeþ8Üé£õ‘ÿ­þOþ¡þQÿ¸ÿ£ÿ‹ÿøÿÀt£ÈFÿþFþ%\~ñ¾Êÿ?ÿHþ›ý þøÿYòóÑS†ÿÁýÅüJý'ÿVÒEâ­ôÿ…þšýJý’ý©þ<+Ó5HæþJý=ü\ü²ý³ÿІ÷Yºÿ’þïý/ýzüiü¸ýïÿØZÎþõüeüýdþÔÿʈôÿÿ~ÿüþ-þ¼ýÒý þïý×ýÿýªþŠÿîÿnÿþ þïýÙýÁý¾ýüýˆþFÿËÿàÿ0ÿ+þFýÒüÕüiýzþLÿLÿ¦þôýwýný¬ýþ³þ"ÿbÿÁÿZ 8Ì×ÿíþZþÿýÚýþÇþãÿ5;r-÷1ÉpÇê<"«UŽÞ±±½¬¢â•´ï´¢!¿¥Ì‰[ ™ þ Ê @ ¬ ì›ø<'& í „ Ä À W Z @¯â—m 5 š § o è 豜×ur®Þí³ÓDŽïÿÚþoþ™þ.ÿ×ÿ`{ÿÿÿïýÇüŸû«ú8ú2ú:úûùmùˆø%÷eõ’ó@òšñkñbñvñ|ñSññjð³ïïfîÉíPí$íDííúílî îoîºíŸì€ëïêâêRëñëììììì¿ì«ìÛìQíîÜîåïñòÏòPóióvóÇótô/õØõOöäöŸ÷›ø¤ù‘ú>ûãûüKý"þÿUàÈ›Ik   ’ YøuÇTÔn'úÖ%A Sþ. 3 R  «   µ ë !Ï F PáudRêùH±î¤!h¡ T © ÙM× ælÿ–ü¬ù÷õ;óÇñ¹ðÞïDï³îÔí\ìmêè&ç`ææªåtåGåå×ädä³ãÜâûá1á¶àÀàá·ábâõârãä»äwåTæzçé%ëPíBïûðuò»ó¹ôˆõ"ö¯ö[÷0øSù·úSüáý9ÿ<2U³ìí±{iš Ð Ä L c : Ù ’  u ” ÕQÞ>Yu¹Na^ãÿàþþ,ý(ü'ûIú[ùEø÷°õøóbòRñ±ðGð¼ï÷î:î{íÂì2ì±ëCëóêáê7ëÚëžìBíÎí=îŒî ï¾ïîð¨òõè÷ûþkшÂÄÖA.’¡2 A 9÷J^{íˆ#! $û&i)D+™,C-'-|,”+Ä*R*m*’*r* *A)¸'Ë%$²"`!R ”ç_EE–&<ÙZË À  -åšüzøœô ñîí›ëê@éÇè(è,çÑåpäãÉávàðÞSÝ®ÛÚ¬Ø9×ÊÕrÔVÓuÒ ÒîÑ2Ò§ÒcÓgÔ–ÕüÖqØÚ•ÛmݬßMâøäŠçÍéÆë˜í7ïvðtñ‹òÈó)õ­öTøúùû:þª=×eÞ e ÷I!Œ$dˆ‰]€÷u4!?^t` iL°´¦ · ü ‚=" ìœì¶þ8ü¸ùn÷nõ¸ó6òÍðZïúí³ì’ëTêýè¼çççæ(ç£çDèéêxëIí–ïòmôiöÑ÷’ø[øV÷öãô‹ô'õåöÀù=ýôÂ]¤ k옧‘Y#ê&œ)+0+s*6)È'‰& &–&x'+(j(K(Ã'¯&%##k!@ Õj Ø!Y#í#^#Ö!om*ê§ îy þƒú&÷ôÀñðï¯îÊí%íÉì‰ìLìžëjê…èæ ãàßïÜGÚØuÖ_ÕõÔÕIÕxÕ£ÕÃÕèÕCÖרŠÚâÜlß-âÝä$çÔèêëÝë´ìžíî›ïÝð>òÃó1õ†öÃ÷ùÞú"ýN„r  -½­éŸV0Ü={É K   I © ;Ö Ö * - %UˆàvEÿþ¾üZû¿ùç÷ùõGôó8ò¿ñeñ!ñçðƒðÛïï"îXíÙìÌì<íÞí¦îˆïvð¯ñ…óýõùø)ü0ÿ°*²p®ßtäc)‘ V SñÚ’¤Jr"è%¿);-–/z00|.æ+Ø(*&Š$$+$á#~##÷!¯Áän å9G2Ø›{a› µ,JüòøÎõbò¨îûê€ç·ä”â^áÛàá­á³âöãÉäàä äâžà³ÞüÜvÛ8ÚZÙûØ-ÙÁÙqÚÛ±ÛjÜgÝ´Þzà»â6åÛçÂêØíØð€ó–õ÷gø½ù÷úñû¨ütýVþ`ÿ–sQ\ö! ” Ð ê£ÞY<ö| É Í ý + ñN‡Ä0õ*âÿÃA,nþ üOù¨öôò–ðïÖî\îºíÖì¨ë€êœé:ééFêZënìlí#î_î3î¾í>íÇìÂìUívîùïñEó"õB÷Èù¨üÖð½ æöç(UÍpf#ê:#Ç% ')*U,·.z1 4ß5´6p64z1Ë-*e&M#ö A9˜¨æ€êiVú&¥J¾ ™ w jDþxø%ó»îÙê9çúã=áßVÝÜÛ¢Ú”Ú+Û+ܯÝpßËàcá3áàtß<ÞüܬۖÚÚIÚ(ÛÜdÞ~à©âÎäçaéØëuî@ñEôW÷húýÿˆª{Ýg)&ûÄm "  ô  yËÆ;4‘4^_ ] mÍG.ÿ$ývû=úHù¶ø³øLùú;úÁù‡øwöÜó*ñ¿îÊìpë§êXê7êêâé~éöèŽè¢èpéãêÁìšî'ðNñÊñƒñåðWð÷ïçïzðãñ¼ó›õƒ÷Xù!û/ý¾ÿÍ MLzM”Ìs6ŒþÁ¨ y ¯#^&C(c)U*”+?-a/¢1‰3“494P2å.Ç*6&y!6ó†C‡UÄŸ • ³ Ù ¦‚ßÿûçõAñXíäéÝæyä¤âTázàåß°ß·ß+àáPâÒãIåZæ¾æˆæéåå"äãâGáöà\áUâãHåcç·éì§î@ñÂó%öWø3úÂû ýDþíþCÿdÿ_ÿkÿ§ÿ âˆÏ‰2ºKÙcÛï½  ÊeÂùÿ7þŒüÌúÏø÷ÊõôôjôEô¤ôõ·ö«÷4øJøÉ÷wöô“òßðxïrîÔí²íîîóîOï¯ïðçðFòôöä÷qù`úpúßù ùøO÷çö ÷MøùùÐûÀýÊÿ€@h ü Ü—†2¦Kk¸Ó÷<[Äb 8"#F$A%Ù&£(“*p,—-–->,x)Œ%Ë Ã—T‚?¬hð } Ô þ è Ä Ìð¨Ël1ÿçúZöFòäîûë‘éÌçñæÕæTçîç¢è]éê êuëUì÷ìPí9íÎì2ìë×êùééè°çßç¢è¾é.ëíQï¾ñ;ôŽöø,úGûÛûFü’ü•üübû¨úúœù\ù?ùaùÜùpú1û(ügýpþ3ÿ“ÿ¤ÿvÿ\ÿôþ þýÊûúVùøÈöõwô=óÝññóð-ñˆñ*ò/ó¦ô/öY÷ø÷øh÷%ö†ôóäññvðeðÜðÄñåòûóõùõóö[ø/ú;ü þœÿÐ=ÝØÿ‰þ)ýòû6ûXû€üˆþÄAüáÓ ÑÞÌõfóñZ°c­¬œK\¾!Ì"k$Ý%/'4(m(ê'Ù&I%û"Àêé>A¨ ß P ( ¢ E | ^ º v  Tù+Èÿ+üáøUö?ô[òŠðÛîfíQì¦ëëèëŽìˆíåîlðäñ‘òeòPñ–ïÁíìàêê¹éÎé+êØê©ëMìöìÈí¿îBðòoôÇö øÝù…ú“úúÌø"÷…õ=ôó,óxó9ô õÈõ_ö%÷øâø‚ùãùgúÞú:ûPûöúúâøw÷ ö¼ôvóXòRñrðÃïŸï ð¹ðñ€òµó*õ«öÈ÷]øOøº÷Âö—õwô…óÍòfòHò“ò\ónôÂõ÷ølù?û@ý'ÿ£É[C~PÿáýßüyüýþÚx_‰ º ¸qÏŸÏ[=h˜i£†‚¬W¢!À#o%Ö&»' (ô'd'&-$Î!Íg×’Ó ´ •–;µºû“¿ Y qp3¼ý|úé÷õõ(ôkòæðÍï ï¶îåîpïUðxñ±ò´óUôlô¥óÔñ‡ïüìÅêéýç˜ç¹çeèéáêì!í+î>ï`ðÅñ7ó£ôÂõnöqöÜõ«ô'ó†ñðïŸîãîÏïñðòAó\ôFõîõZööÌö÷A÷7÷øö›öÖõ»ô‡ógò_ñeðrïÁîyîÀîrïlð¢ñ5óëôŒöÐ÷¼ø ùrø)÷ºõWô&óWòõñò‚òdó…ôØõT÷Õø:úÇû½ýÇÿ[iÚùž;ÿþüüxüëüuþÌÂ9Ú f˜CÀ{òGž› ûѲ6 פ"%?'(P)”)j)q(­&$c!YË)"½1X%"¡Å™À™Ø;0¡ ¬yeþÞúZø´öOõÇóªòKò=òhò«òWóôÀôvõ¾õ—õ õÅó¥ñìîFìÿé<è2çõæUçvèêÞëNí‚î£ï½ðªñòKóäóFôô@óáñUð¸îíÑë%ëEëDì½íeï ñšòûóÚôKõwõ}õ<õÒô4ôŒóßòò!ñðïCîÄívíPíípîžïëð-òœó6õ–ön÷w÷ýööãôdóò<ñûð;ñÐñÂòBôöà÷Qù—úöû ýkÿÕò·ùc¢ÿMþ<ý‚ü’üÚý_Áxa 5ÄÌUT‘#gnRùÁöòÉU›…Ó Í#t&€(*+•+ü*{)o'5%ˆ"LÐïÔ‚4|DhƒZ»ªíH"ëw   ¢ræÿ‡üúsøóö¾õ@õ…õ1öÁö_÷Õ÷ø´÷îöþõ×ô–óöñßïÅíñëhê@éaèèlèEé¾ê‡ì îiï§ð¨ñ#ò1òðñŸñ ñð©îdíFìHëgêßéòé¬êæëMíñî—ðò$ó¬óåóçóˆó¢ò†ñŠðï™îÁí&í¾ìuìƒìÞìYíî3ïwð­ñÆòåóèô¸õöõmõyô]óïñpðFï¿îïÁïõðœòŽôˆöYøãù(ûFütý¤þ¹ÿ^‰múÿóþ¯ý“üü4üýêþóÁÆ – .>Å©ßk{#”Úø*¿àžl†Ù!ý$Â'*Í+­,¿,,œ*Ë(—&$Y!¦™ÕîÚ}›g‚©µ ‘j†ïïú  K‚Õ;EþîüÐû¹úûùæùCú¥úÓúÒú–ú³ù4øiöHôòúïÝíçëjêŸé3éé3éÍé£êÂëí)î ïÁïGðHðÅïôîõíÖìrëêòèOèóçàçè²èÔéPëÈì5îŸïÆðYñuñ?ñíð;ð.ïîÿììpëëë4ë¨ë\ì@í=îjïµðïñßòžó3ô|ôgô¸ópòüðœïeîƒí5í±íÈî>ðïñìóóõ²÷ ù*úû×ûqüýlýnýýŒüßûû‹úú:û•ü¤þoí§ ýs„q»Õ àôA˜„UëP"m%.(h*í+†,g,Ÿ+5*j(‚&©$Ï"º ¬Óy¥^¼y/;C˜ùw¹|<þ % Äxo gÃá2!ÿéþáýMüCúÆ÷ôô"òvïJíqë:êÚéêéfêëôëýìôíÎî!ïùîÈî^î{íìê@éìç æ åå0å³å|æŠçâè\ê®ëÆì©íYîƒîVîÞí*í?ì ëêPé×è£èêèŽé‘ê™ëÎìûíïåïžð.ñœñÐñïñÕñŠñ ñ%ðï îbíí2íÿíMïíð¨òdôãõùö¬÷-øoøø¼ø$ùrù“ùœù¨ù¹ù¨ù¶ùú$ûÂüÞþYF<Ú æ ˆ ïêb¸“±ybA\Ì¿bë }#°%i'(Q)b)í( ($'&à$Ö#þ""H!Ì ¥ ö 0!a!b!œ!ò!N!É ‰œüwc„Åï ` I   ÿ  &±QOÙ<dÿžüúm÷õLóÖñ¥ð ï0ïïïðîÏîÉîíîÔîzîÊí$í\ì ënéæç±æÇåå£äÙä€åoæ@ç9è)éòéTê‡êˆê†êSêôé‡ééŸè"èÄçŠççèç±èÁéïêì;íTî ï•ïÀïÑïÜïÊï™ï[ï0ïï³îZî"î.î‰îïðñ7òLó,ôÏôõ,õ7õCõHõ€õÀõö˜ö÷ˆ÷ï÷wø)ù ú#û~üýý¦ÿBÐ /²YÙh9 ' 1 S “ Î fù¥[ݤ>ŽŠn 0!º!"Z"¡"è"ý"ø"ñ" ##"##'##Û"¨"T"¨!Ø 5 «ÜÑò@zundgwf'ú»p ç 0 %6d¹Eÿåý„üAû+úùñ÷ûööõ,ôZóuòñŒð•ïeî.í$ì9ëgêºéCé éÆèœè{ètèzèZè@èèéçËçç\ç'ççËæ“ææŒæÀæøæaçÙçjèé¤éê_ê—ê¼êÈêÐê×êÔê³êêIêúéµé“éƒé¡éèé5ê‘êîê>ë|ë·ëóë9ììÓì#íní³íðíPî¿î4ïÃïað&ñöñëòãóõ%öx÷ÁøúyûÛüPþ´ÿöuñmó x  Æ™rM"Ѧƒf>!#µ$&&c'u(a)$*»*L+¹+,V,§,Û,Î,¨,’,{,D, ,Û+Š++*ø)&)('á%f$à"o!ÞB¼%išøBct‚ ªÁËÓû ÿýPû­ùø„öõ¯óIòøðÇï…î^í1ì+ëêé.èaçmæœååŒääÂãpã$ãÓâœâWâ â¾á†áYáá áá@á}á©áóá0âzâËâãFã‘ãËãä&äDäGä8äääøãääkäÄä åxå¾å æLææçjçàçgèóè[éÒéGê´ê-ëÅënì.í î÷îïïæðÙñäòüóBõšöø˜ùFûýÍþb,î‘0 ç ™ O#õ¼t=éßô!9#_%a'+)Ã*,,]-\.A/ò/y0ä0=1ƒ11«1˜1‰1}1l1^1711¿060’/À.¹-”,I+Ç)'(&Ò$#C!t‰®å,XYUO5ú É Lè¯þ¥ü¸úìø.÷^õ¸óòð0ïåí–ìFëùéÒè¦çæ„å„ä£ãÝâAâÆá^ááÌà€à/àßß¡ßoßGß&ß÷Þ·Þ”Þ˜Þ´ÞÒÞßRߢßàß*àkà¥àÖàáGá~áÎá;âzâŸâ¶âÄâ¸âØâã<ããããNä¹äåyåÎå,æ¨æHçççè2éâé‡ê ëÑëŠìWí+îïðñòBóvôÎõ/÷Áø`ú*üþýÿ终Eû± c ¼o<åÔë #N%m'd)+¥,.2/+0ë0–12j2É23G3[3B3)3õ2Ê22i2 2µ1'1m0/p.,-»+ *t(É&ö$-#`!‡‰–š€r\6  Ó©ZÎÿ—ý‘û™ù¼÷âõ1ôŒòêðaïäísìë½éŒègç^æ`åtä€ã”âÉá(á¥àIàûß³ßiß(ßûÞ¿ÞŸÞˆÞÞkÞgÞxÞ†ÞŸÞ¾ÞÜÞßf߸ßà€àáàá;á`á„á¯áßá"âaâŠâ¿âûâ0ãkã¦ãÜã"ä‰äùäƒåûåwæëæ[çÐçIèâèéê¢ê@ëüë¶ì‰í]î,ïðýðò<ó‰ôôõd÷âøuúüÓý–ÿnGâ±} 4 è ‚=öáÜçâêåã õ"ÿ$ù&î(«*K,µ-ß.ê/¶0S1Ä152Š2ß2373O3A3&3ë2½2}2#2Ã1G1–0±/ .Z-Ú+?*(Ï&ú$)#C!LEfmU?ÞÕ Ê ¸‰Y¾ÿŒýiûfùm÷±õÿógòÞðIïÊí9ì¾êjé3è&ç@æ[åpä}ã•âÎáá~ààÎߘßrßGß'ßßèÞÃÞŸÞ•Þ–Þ¦ÞÃÞáÞß:ßkߢßâß0à{àÕà*ázá·áôá7âyâÀâøâ.ãXãã·ãâãä/ämä­äå–å$æ˜æç—ç è‡èé®é@êÄêLëçë”ìeí;îïðñ,òMó«ôö÷ù–ú)üáý›ÿs?ñ—Aø ­ i ,üÝß÷8EHI!S#[%N'-)Ø*A,z-’.€/I0ñ0Š1ý1x2ä223^3„3“3{3Z303ã2s2ø1a1‰0˜/[.-‡+ñ):(e&ª$Ø"! "9'üÚ®•†o b 9Ìz<ÿýûù/÷tõÄó#ò}ðéîNíÎëZêéæçÚæöååäã;âáÚà]àà¹ß‡ßSß4ßßßßßßß)ßBß_ßvß’ßšß±ßØß"à[à­àöà=áyá·áíá/âvâ®âÜâã8ãyã³ãíã*ähä©ä å|åôåræÚæPçÁç;èÂèHéÞécêÞêSëàë†ìCíîçîÛïîðòhóÓôVöÖ÷mùû±üiþÔ‡4؉L  á ½¨®ÅÖò ! $""$&ÿ'®)+l,Œ-œ.v/50æ0„12Ž2ü2\3›3¼3´3¡3q3*3×2v2ù181S0:/ê-n,í*Y)Ž'Á%$""- 5Eë·¡€€z j A Ú‡Cþüú'ø^ö§ôïò9ñ˜ïõí^ìíê˜éYè6ç7æ1åäã,â`á àà¨ßNßßìÞÊÞ¨ÞŠÞ~Þ|ÞƒÞ’Þ³ÞÉÞÐÞåÞßß5ßjß«ßéßà`àà¥à·àâàá\á¦áûáBâŽâÕâãHãŽãÙã;ä™äå¨åæšæç›çè›è1éµé0êê"ë§ëHìøìÅíî•ïºðæñ@ó¥ô2ö§÷*ùÇú€ü1þõÿÂz%Ñ@ ñ ´ {SMfˆ©Õûúÿ!ú#ú%¿'X)Ó*,;-9./×/|0-1Ê1f2ß2J3–3º3¼3¸3 3u343ë2n2·1Ç0/K.Ð,H+©)î';&u$™"© ©ªpR?20 Ý ¦l$þáþÆüÇúÚøýö%õZó¤ñõïPî®ì'ë¼étè<ç$æåëãÛâîáámàÚßvßßÕÞÞmÞDÞÞÞõÝõÝøÝûÝÞÞ-ÞHÞ`ÞwÞ£ÞÞÞ%ßoßÌßà.àVààÓà á\ááÒá âOââÝâ8ãœã ää1åÇå]æÚæcçèç_èßèpéïégêêêë7ìõìÀí¢îŽïžðÂñó\ôÊõ9÷¬ø4úáû‹ý(ÿ×w¶f á ¢ rNLWj…¢´¸µ ²"$r&(ž)û*3,R-P.+/ë/¥0I1á1q2æ2K3€3¤3¹3²3•3l363Ô2@2€1Œ0\/.³,4+Š)Ò'"&L$d"v }lPB3'+ü Å ™ h'ðŨþü“ú“ø±öÌôó@ñŸïùíoìòêé9èçÈå£ä‹ãŒâ¬áàà,à“ßߣÞTÞÞÚݻݢ݇Ý}݄ݓݜÝÝŽÝݚݫÝÝÝ%Þ\Þ²ÞþÞ@ßzß¡ßÙßàKà•àçà.ááÖá-âtâÏâ9ã»ã8äÚäkåþå|æñæxçøç…èéžé+ê¸êMë ìÄìíUî:ïDð]ñ¤òðóaõãöRøÈùUûëü~þ³e ¸m% ñ ª p`ONOiipd\!8# %¾&Y(Ì)!+X,q-U../ü/¿0l12…2ó2A3p3”3˜3‰3_3=3î2x2æ1 1ö/¯.r-,*Ü(@'{%š#²!ÔÍű£‹‚‡{_ : ψk[1þüú øö9ôcòðÊî'íŸë'êÄèzç/æîäºã¤â¤á¸àýß_ßÐÞWÞñݘÝUÝ(Ý ÝîÜÎÜÅܹ܏ܮܬܫܵܨÜÝ?ÝrÝ·ÝùÝBÞ{ÞÀÞüÞ2ßqß·ßàJà§àÿà]á³áâ„âóâ}ãäÕä{å'æÔæuçùç~èé‚é ê›ê?ëüë¶ìzíAîïð(ñ\ò­óõŠöø÷eùâúXüàýcÿ¯X®[  » [TT^\\L3 û!º#o%'—(ø)7+^,H-/. /Ð/v011õ1N2“2Ë2ì2ô2å2Û2Ÿ2=2¿11:0/.¿,L+²)(J&m$"ª ¹½Å¼ºÄÑÎʦ y ;ïºjÿTýCû=ù?÷Xõ†ó»ñð^îÕìQëçéèç²å]ä0ãâ&áNàßéÞHÞÐÝlÝÝÙܺܗÜzÜ`ÜHÜ.ÜÜ÷ÛðÛåÛôÛÜ[ÜœÜêÜFÝÝÙÝ%ÞjÞ²ÞöÞ7ßyß®ßúßOà­àá…á â†â1ãåã­äGåè凿 ç¶çMèõèŒé7ê×êƒë1ìðì´í€îfïeð|ñ¯òøóTõ¯öøpùãúfüçývÿª2Ãfÿ­ c -åκ™xg@-!Û"€$&'ã(*<+K,+-.Ü.¥/R0ã0m1Ö1$2i2Ÿ2­2¨2”2y2(2®11]0\/K.4-à+h*ç(a'¥%Õ#"* 047A44>$í  [L3ÿýû%ù9÷QõzóŸñàï*î‘ìúêyéè™æ1åòãÜâÈáÒàà;߉ÞûÝwÝ Ý®ÜjÜ9ÜÜÞÛÐÛ·ÛŽÛvÛ`ÛQÛKÛlÛ¤ÛÞÛ.ÜÜçÜ.ÝxÝÌÝÞWÞ£ÞçÞ/߃ßïßKà¨àáŸá1âÙâãOäå­åKæéæ‡ç%è×è•éDêõê¦ëWìíáí«î€ïqðñ©òúóJõ¥öø_ùÐúAü¿ýCÿÊSÓNË]÷ ‘ = øÎªŒqN0öȘ!B#é$a&Ì')*++,õ,´-t.-/×/c0Ó061m1•1Î1ã1Ï1¯1|1*1¦0 0D/H.G-!,ç*})(š&í$:#q!–«¥­¦žš™zh @  Ü©•‚€þwü“ú´øÎöìôóSñ—ïðí_ìÈêHééçnæå³ãŒâwávà–ßÁÞÞeÝéÜkÜ ÜÄÛÛ\Û2ÛÛÛðÚèÚáÚæÚùÚ Û6ÛqÛ»Û ÜiÜÇÜ+Ý…ÝÔÝ+ÞkÞ·ÞöÞBߟßà‚àøà‡á#âÙâ£ãpä2åâ囿Uçè­èfé#êÔêëLì"íûíÍî¥ï–ðmñtòóËôök÷Ãø$ú†ûøürþòÿlñxösø{  Š Bת†`#ð»~9!Ù"m$ß%5'l()…*l+8,-¤-Z.ø.v/Ú//0t0˜0µ0Í0¼0›0p00//F.\-_,Q+*Ó(w'þ%h$´"!Bir…™¡¯§¢ l J öäÏÌþÒüÛúù&÷OõóÆñðjîÒìQëËé\èþæœåOä"ãâá+à\ßÞúÝXÝïÜ‡Ü ÜÍÛˆÛ\Û8Û%ÛÛìÚÞÚæÚøÚ Û=Û|ÛÇÛÜvÜÛÜÝoÝÖÝPÞ¾Þ%߉ßÛß2ààáláîáƒâ6ãþãÅäšåYæçÆç„è+éæé³ê|ë;ìþìÐí¥î„ïmð_ñVòOórô˜õÔö(øƒùÎúüvýëþZ×RÝCº4 ¼ > ¸ Eæ•TÕDï–G ã!f#Í$&U'm(t)`*1+ï+˜,B-Ù-[.Ì. /@/^/}/“/x/Y/,/à.u.ç-C-k,z+*h)7(è&%%$—"!f¨Õ'FXzŠ’Œ ‚ bR<0$2þIüvúœøËö õ@ó—ñéïbîÞìfëüéªèEçúå¹ä™ãŽâ’á»àñß8ߥÞÞ¡Ý3ÝæÜªÜkÜKÜ*ÜÜøÛÓÛ¼Û³ÛÎÛëÛÜAÜ–ÜêÜJÝ·ÝÞ_ÞµÞß–ßàsàçàEá«á,â±â1ãÂãeäåÌåªæ€çJèé®é_êëÓë˜ìfí1îïÐï¥ð…ñpòSóSô^õˆöÅ÷ ùsúÀûý@þŒÿô_ÕIÂ)  … ï \ÛWì”?Ô]æ[ÚP Á!#F$|%‚&y'](")Ø)[*+“+,b,Â, -#-:-G-%-û,Ó,¥,=,Ä+>+{*ˆ)™(™'x&6%÷#¯"?!ÈL·<€³ç2g’¥ Á ÄÌÓìþÿ@ý€û¼ù øWö·ôócñØïVîôì­ëNêé±ç‡æeå`äfãyâšáÍà0à²ß@ßÜÞsÞ Þ¹ÝÝdÝLÝFÝDÝ;ÝÝÝ.ÝNÝYÝÝÈÝÞuÞçÞPßœßæß;à®àá—á âzâÊâGãÙãXäàä{å"æÈæ’çqèJéêÅêƒë?ìíÜí®îpï:ðñÜñ½òºó©ô‘õ|ö…÷¢øÓùûbü¨ýØþpÇoØ5‘ ñ b Á a½&ª—þ`Ày¾!"+#,$%é%£&I'Ï'D(½(8)™)ð)+*d*n*n*p*X**Ð)w))…(ð'A'Z&j%}$`#0"!Ö„*ÆA©úU™í?•Ý  Y ‹±Ù =þÍü5û˜ùøqöÞôDó¬ñ7ðÜî‰íGìëïéÐè´ç®æ´åÑäÿãCã‹âõáxáþà†à%àÎßrß2ßßöÞâÞÝÞáÞäÞíÞþÞ2ßa߆ßÃßþßPà¬àáoáÀá âšâùâeãßãRäÀä6åÉåJæææ…ç.èÈèré5êûêÀëì^í&îæîµï€ðJñòíò²óŒô\õ;ö ÷à÷Ñø´ù³úÅûãüýýûþd¾[¸ô  U ¨ @k‚®Îü6…»í)‡ËàÐÁ —!e",#Þ#Q$°$ý$r%è%T&œ&Å&å&Ü&Ð&¾&½&¯&t&&ª%!%‡$à#+#\"ˆ!© Ë˺…8åŠ3ÄA¼‚ë [ À * †ç?¢oÿàýdüíú\ùâ÷döéôhóöñ–ðaï'îíüëñêæéæèè%çVæåöäUäÄãOãåârâ â»á“áiáDá5á'ááá4áNáRádá…á¥áÞá&âxâÈâãhã¬ãä{äïäcåáågæøæƒç è¿èBéÁéLêóê³ë~ìEíåí“îGïðÚð±ñòfó2ôõáõ³öl÷?øúøÄùúiûUüFý9þ$ÿ07B]z Òô   " '.=JcvŠ¡¤¢œœ€a&î‰ … ì K!¥! "c"¢"Ò"ç"ë"í"â"¬"{"G" "¼!a!ü q À I†»í ÷Å…2ÖuÄ] ô ‰  „$Åcýþžý8üâúxùø½ö`õôÆò“ñfðVïOî[ínì{ë”êÈéúè?è‰çìæeæäåuå å¤äNä äÆã©ã“ã‘ã’ãšã§ã¹ãÓãâãûã*äSä‡äÅä åHåŠåÏå+æxæÒæBçÑç\èÞèréÿéˆêë°ëFìÕìwíî°îgïðÆð|ñ5òóµótô4õþõÄö÷1øëøªùjúû·ûjüýÚý£þrÿRüïûîż« ‰ m B þ´|<ГnX0Û¸ŒNìŽêT³þ;j“¨®©œ‰Së¤GÁPÀ.‡ØO‚¿ú>HJ#óÈ’ P  Ò ˆDþÄ,ð¤ÿwþ@ýüáú¥ùbø.÷òõÓôÅó²ò¥ñ©ðÄïîîî_í¡ìðë:ë›êê’éé“è)èÍççGççáæÅæ´æ±æÂæÜæÿæ%çVç}ç¢çÒçèFèèÃèéYé£éøéQê´êëoëßëSìÍìIíÅí>îÆîUïÏïWðñðˆñò¸òióôÂôfõö½ö_÷ øµø]ùú¸ú]ûýû•ü<ýÕýwþÿÁÿhÿ®_ ³a8ÿÆž|C  Ñ ‘ J ì l æ iÝg ªPæ1Ö‚¶VðhÅ&ªÛ Nmp~ƒu4 ΋Q ÂdîL­u¾k×O¾Ë Ë Ý â ë ú òòòîçÞÝÿÈþÊýÉüÁûÊúÎùáøÝ÷ÛöêõùôôFóˆòÙñDñ²ððgïÖîQîÍíPíÛìmìì¦ëYëëÁêêmêPê?ê>êJêPêeêˆêªê»êÌêåê ë)ëIëNë`ëwë ëlë½êê'êÍê ëBì·ìúìDíºí’î­ïðIñwòÒóõ öÿöÛ÷høxøßø÷ù`ûˆüPý¡ý€ýý°üóüÚüüü™ýdÿ”ãÿ’ÿÒÿ´YniB ¹  « § Æ ABžÊÀPâ]|’dοõ.} (¡VÖÓkåe½†…²Ù´@¶|lDú¼?¼N¬k ¤ % ¸  K 8 æ€ÉIÿþ ýìûÚúµùvø÷½õÃô&ôó%ó¥ò>ò¹ñ6ñ³ð ðCï¸îkîiî»îýîîîÏî”î7îÇí[í$íüìíríîsî—î€î_î$îØíºíÖíOîäî’ï5ð°ðñ ññûð ñ{ñò¸ò„ó(ô²ôõdõzõsõxõ€õJõGõö÷¾÷â÷ë÷È÷Œ÷e÷•÷CøùÁùêúü­üÍüÄü¦üžü²üØüÉüUýþOÿAÿíþzþÉý ýÌüCý‚ý³ý~þÞÿÒçÇý²˜ÔŒrK ¼ ÷ φ4!‰­n@wܼóŠ@ðšÖÃ6` bbAùµ„+ß¼ø=Šº¦Næ^¼ <  Q –CÅðØ»þ¶üóú€ù0øþöÞõ‰ôó—ñèïî5ìÔêêiéñèƒè è}ç³æ™å“äÔãvã¥ã:äåØåæÖæçç;çfçÕç›è½éë]ìsíWîï’ïîï'ð¢ðsñ­òáóðôÂõ?ö‡ö•öŸöšöàö9÷­÷8øÕøFù™ù¸ù¢ù‚ùqùBùZù{ù½ùú-úWúúú|úXú4ú6ú]ú„úÉúüú?ûuû•ûµûçûÿûü?üüìüNýÖýPþ£þåþ$ÿ‚ÿúÿ¹Þ:ž`¶ñ  + ÏBévºö({ñ– J"$õ%‹'‡()0))õ(¼(j(N(4(U(c(('%µ#Ã!ÑìÖË9íqpóR® î„Agå‡ÿ:þ´üþúüøÄöŸô‰òðïÚíífì«ëÓêÊé§èTçÿåÅäÂãýâ´â˜âmâ7ââÁáoááÄàŽàÂàJáâÑâ¬ãägå æËæçOè2éSê×ëcíûî‰ðôñFóiôPõ%ö÷þ÷ùú ûûûøüÆý3þ…þ­þŸþkþAþ;þþ±ý"ýµüfüñû0ûDú~ù»øë÷$÷™öFöïõŸõqõUõõ˜ôXôMôVô‹ôòô˜õmö;÷á÷Žø4ùÃù,ú¼ú«ûÃüñý[ÿEhGâqó W ý «†Kã­0Xcª“ N"]$¶&Ï(ˆ*,R-.—.è../Ž/ñ/D00u0;0®/¶.-ñ+æ)µ'‘%m#!¨VØ1H õ ® O8TÃþ0üxùéökôòŽï íÐêÀèÀæõäzãdâwá¥ààuß¶ÞûÝXݶÜ&ÜáÛÖÛûÛuÜ$ÝÉÝpÞúÞ\ß™ßÉßDàéà³á¿âùã_呿¥ç´è©é†êpë~ìµí)ïÌðWò¿ó,õžöÏ÷‚øù¿ù±ú´ûßüþOÿ|oB7à(¯¶ÞâŒ)§ÿÄþ…ýü¬úOù1øp÷øöšööbõ¥ôÎóïòïñ@ñüð ñWñìñÑò§óIô¬ô$õ¬õ&öÔö!øúpüàþ`Óä_ å š 8Ü×Væ ÙyöC` Ž!#å$Ì&Õ(Ë*£,.:/0o0m0b001i1k1(1Ó0V0‰/1.),—)ç&†$›"¢ )¸ƒ /² ¹€|Âþüƒùèö‰ô*ò†ïáì+ê©çŽå‰ãøáÅàÇßßUÞjÝNÜ&Û:ÚOÙÕØ£Ø´Ø(ÙÚîÚ¹Û\ÜêÜOÝ“ÝÿÝ›ÞßÉàGâäœå&ç‰è¾éÓêÎëÔìøí)ï¥ðYòBôôõr÷¥øœù_úû³û]üTýhþlÿ!ÃSÔ ð}ÞTÁÿ2ÿcþŠýãüKü_ûú·ø§÷áöNöÂõ4õˆôêóvó2óßò_òøñòñòAòòEó0ô õ«õCöîöé÷-ù¯újüþ•´ÿLG Ü W á ‡@0uÔôË’0!˜"ã#Y%'Û(Õ*Ö,Ë.f0y152™2¸2¬2”2†2V22˜1 1G0û.-`*”'ñ$"' ÆI¾Q»¸> x ÆQ(ÿCüvùÝötô'òÖï<íŠêûçÊå¼ãâálàbß¹ÞBޡݶܨÛÂÚøÙbÙÙ3ÙtÙÚöÚÚÛŽÜÝmÝÄÝ;ÞÑÞß¿à âºãJ廿ïçé.ê4ë<ìOí‰îøï¢ñtóõtö§÷¿ø¬ùœú“ûƒüiýQþ4ÿ"Þg©Ëó#ß`Ý{³ ?ÿ_þ™ýÄüšû!úø;÷5öqõÈô4ô§ó óµò5ò‚ñ§ðýïÀïåï`ðÿð°ñò‹óhôõ·õ{ö‡÷üøÛú0ýËÿnÜ߇ ø \ ߨÛmT‘8 †!ª"ñ#F%à&Ô(+S-W/Ã0©1212û1¨1|1„1ƒ1I1Ð030b/.ì+)'&ƒ#>!ü®EÔuÛ¼= ‘ã…þçûDù±ö<ôúñÁïiíÊê3è¼åÔã5âÐà ß¬ÞÿÝdݣܹÛËÚÚgÙÙÙ@Ù­Ù>ÚÓÚ£Û…Ü:Ý·Ý Þ­ÞŒßŸàÅá ã–äIæÓç<é‹ê½ëãìéíï5ð®ñ>óÞôföã÷%ùKú>ûïûüCýþðþãÿâä¿WÆÙ¹_èsíkÁ<WÿiþrýŠümû#ú ù%øn÷ÕöMö²õþôHôžóó‹òòªñ¦ñåñ@ò³òKóøóôõ«õvör÷øÞùªûÓýõÿ&=0ÛK à 4 · ktåU~\©!u Â!B#Ù$À&È(Ú*­,./§/Ù/¼/—/’/Ÿ/¥/x/:/Ä..Û,Ú*9(Q%½"v d6 çÀONÛ " sÿKüÄùY÷8õ$óñ¿î-ì²éPç@åkãóáýàSàËß,ßvޚݫܲÛèÚeÚ;ÚnÚÿÚ­ÛuÜ1ÝÛÝVÞ©ÞóÞTßàá;â›ã嵿,è…éªê®ë¨ìíŽî´ïñ’òô õ÷Iø4ùíùŸúXûüßüÍýðþ  êSœÓ˦{|…S±¸®ÿÒþ'þýÆüíû%ûŽúúZùmøS÷Bölõïô‰ô"ôæóæó ô0ô/ô%ô-ôaôµô'õ×õ¤öª÷ÄøúiûÔüAþóÿéí¼YöŒ  { Óżµ¡Œ?Å7¬ "}#ë$†&[(:*Ú+-Ï-4.T.E... .ó-²-R-Ù,j,–+*½'!%¨"W 0ô¯”ŸdÄ­ ] ájA}ýìú…ølö¨ôåòùð¾îfì"ê èæ6ä«â´áJáÚàNàuß}ޗݳÜõÛEÛÛ7ÛªÛKÜÝñÝÞèÞGß²ß&à´àvá‘âä¹ålçüèDêkëUìí»íšî³ïþðWòöó…õùö%ø ù›ùú†ú(ûúûýGþpÿQõi·ÚÍÕæ NHø[ ÕâÿÕþàýýüøûmûÛúHúzùžøÁ÷÷Qö´õDõ$õ7õiõ¶õÿõLöwöyöŽöÐö1÷Æ÷¡øÄù'û³ünþ7åY›ÑN 3  ñЋíŒ6¬+!Ú"²$˜&U(®)±*j+÷+3,E,C,d,†,ƒ,+,”+×*ç)V(]&$Þ!ÀÓçüöÒqÙ÷ ¤UxÿÙüÄúØø÷Tõfó&ñ·î^ì:êDèƒæûäåã;ã§âÓáÉà©ßÞݶÜ"ÜÑÛçÛ*ÜÜûÜÝÞYÞÞþÞ˜ß[à@áWâ­ã$åƒæ³çÒèïéåê®ëyìaíŠîÅïñMò£óéôñõÐö™÷Jø ùÍù§ú²ûîü/þZÿM§ xïN¬ì)]›¼¡2{´é7™ªÿBÿÃþ&þZývüoû†úÑùXùù¹øŠøøø€øJøøÙ÷¸÷´÷Ï÷*øÆø}ù<úýúÓû·ü¸ýèþF¸XœÑ ™ 9 â ™K ×¥OåQ¯¨e!2#ñ$Ÿ&()­)å)*I*›*í*ÿ*Ï*Y*Ã)ü(Õ'#&$ "; •èüÓg†t f ÖåÿÞýËû­ù¦÷rõóœðMîJìêñè€ç>æ8åGä2ãåáƒà8ß&ÞTÝûÜñÜÝGÝtÝ ÝÔÝ"Þ[Þ’Þ߻߮à¿á÷âä%å8æ.çèÊè“épêjëŒì´íèîð ñ&òóáóôFõö%÷Løwù°úôûDýyþgÿ»CÖ`%Â7€‰XÂr-ÖcÌ1¦òFŠÿÌþþ^ýÙübüúû€ûþú|úú¦ùMùÿøçøîø ùùù&ùDùyù¹ù ú“ú2ûü3ý‚þÛÿ&TiZUZ’æ€ C 0ýÜ£n)¹"qØb â!¿#‰%'6(Ø(,)>)N)l)Œ)Œ)p)1)Í(=(Y'à% $" 2/:>XzUí8 ^ ‹Új ýýöû ú"ø2öô»ñeïíñêíè<çÔå·äÃãØâÓáºà¡ß˜Þ¾Ý6ÝíÜÔÜåÜ&Ý‚ÝùÝzÞòÞcßàßjàþà±á{ânãzäšå³æÅç¬è{é6êìê§ëì`í^îgï†ð§ñ¨òóŒô‚õ”ö¦÷³øÛù ûqüÉýûþî©Rì’0Å6É50ñ†¢3È[å^¯óÿ$ÿlþØýTýÖü[üòû§û]ûþú§úQúüù°ùlù4ùùù6ùuù¯ùùù>úÇú|ûzüšýéþ#-ù 5—A "  ÿɤWí\£ñ_jf!:#¯$Ì%¯&9'‹'¾'&(½(;)ƒ)O)å(:(o'0&—$Ò"+!• Œñ2J+¯ó C ÌÅÌÍŸÿpýû½ø%öóñÊîµì¾ê é¶ç’æuå.äáâáUà=ßgÞÑݞݠݭݽÝÉÝÔÝþÝ/ÞÞÙÞ_߿ߣàzáhâ;ãäðäµådæç«çOè+é!ê+ë+ìí&î2ïAð]ñZòXóoô˜õãö2ø…ùäúAüŽý´þ¹ÿ‚<óÃb$Öb¤ÙæêЪv9æ†4àˆûvÝ7¢›oÿÉþ!þ…ýîüWüßû‡û@ûêúúú©ù3ùòøÌøØøäøùøJùÙù™úvû†ü¼ýÎþ¸ÿnר¡ƒ‹ g L‹Âùnù¢†¦ÚØ!f#ƒ$9%›%á%C&ê&¨'U(»(ð(Í(R({'G&¦$ò"!G æ·|$eQæ  ‚ k‚‹t<ÿßüZú™÷¹ôòÙïÒí ìlê1éè çÙåzäíâ`áàß’ÞfÞgÞtÞ”ÞÞ‚Þ@ÞÞÞ(ÞŽÞ0ßàÑà¼á£âVãÅã ä]äÐäxåSæVçèºéëêÿëôìÙí¾î»ïÎðònó´ôüõ{÷ ù_ú„ûÂüúýöþÒÿ¿©”Ÿ®˜DÂ8Íööݤsa81èjÊ"g›uðdÝFªÿïþ-þnýÑü(ü}ûØú]úúÐùŒùFùþø£øTø$ø'øƒø+ù)úhû¬ü³ýwþùþyÿ¨§2*V Î Ö v¿Î¹ÙE O¨E "Y#$$¾$&%Ñ%À&©'}()7)è(/(ï&i%Í#~"b!d N/ïjQ¹Ýß h $ åŸþüfù¢ö ô—ñï–íþë’êzékèLçâå[äÚâxá]àŽßßÞÞÜÞàÞ×Þ³ÞsÞ'ÞîÝæÝÞ‚ÞßÊßà7áËáBââíâ]ãéãµä´åÒæè=éjê…ë€ìqíjî~ï·ðò{óßôHö²÷ ù[úšûßüþ4ÿQXYT5ø¿]æcË   íϪr$ÈWáS¸‚Þ)n¡ÆÙÿöþþlýØüSüÔûOû¶úüù?ùžøý÷f÷ ÷æöÕöéöD÷É÷wøXùVúIû üªü'ýÊýþ“ÿÔqKS€“ _ õ >nû‰_ .Ë Ï!ï"¥# $ˆ$%%&-'V(\)*%*±)°(Q'Ò%‡$Z#a"­!! ÒùaB ú+Ù ö jËí§ýïù÷‹ôvò¨ð'ïÊí“ìƒëMê¢è¯æÏäCãåáëàFààôßøß®ß;ߊÞâÝAÝùÜÝmÝÝÝUÞñÞ­ß8àžàÁàùàGáÅálâ<ã;äåèæKèpé`ê3ëñëÙìþí\ïÒðZòüó¡õ<÷øÑùëúüfý¶þãÿNµü#´8µ7 ³  k ´ Ý ä Ü ¥ R ô ¢ N ÀP¡üXžÔ/S\bÿnþ—ýÖü$üûÛú*ú†ùæøLø¸÷÷nöôõ·õÍõ'ö§öa÷>ø#ùðùú ûvûêûœü›ýóþ‡­ÑÊ‘ V ”ïp*$mûõ "û"º#]$%á%'d(ˆ)H*’*g*¦)t('à%ë$$U#”"Ö!§ Ù`}pj”". ž  T9¬Âÿ…üdù öhô²ò>ñðÙî¶íPì€êièNæäãñáAááýàáÃà#à8ß<ÞNݶܑÜßÜyÝ.ÞÚÞ‰ßìßàòßÓßêßGàùàëáã]ä¿åçèÖèvéêÌêÒë5íßî”ð[òô õíö ø;ùtúÔûdýÿ‰øx²ÌÁ•X Í ­ v  u ¢ © } * ½ K ù Î ª \ ã : lytfZRk›ÓCÿgþkýŽüžû´ú¶ùÛø ø€÷íöeöèõŒõNõ%õõ<õõAö÷è÷Úø¡ù7ú¨ú,ûìûÝü-þÍÿÛr”{ _ žÑFBПlèÏ!"#í#e$Â$V%?&‘')k*_+Á+ˆ+“*)Y'Ó%¨$Ï#+#Ÿ"è!× "ÂÊ|-&¶ Ú a  i€5êü«ùÎö…ôÖò„ñdðJï3îèì>ë>éçåtãBâ“á0áááØàbàßvÞgÝ~ÜÜ'ÜÜ/ÝÙÝ‰Þ ßNß`ßBß5ßgßî߸à±áîâbäÕå#ç?èéÔé{ê]ë¢ì-îëïÎñ°ó†õ'÷ øòù?û›ü þ–ÿ.¶9ÂÚ»w  ± h  ° ) { Œ m  –  €  Î ‡  w §°µ£ˆ{‰±ëIÿwþ‚ý‰üšû«úÇùîø;ø¤÷#÷”ööqõðô€ôOô>ôwôßô˜õ{ö{÷nø*ùÄù?ú¾úQû,üaýÿ)|Òã ä U¿ÔuU)­°!#ê#Z$«$%é%8'Å(U*}+, ,:+¸)è'<&%$š#8#Á"ì!` 'Úa*}y î § C‘c[þþúó÷[õ~ó!òñ-ð:ïùíOì2êûçÝå%äèâ8âðáíáÞá—ááà÷ÞÑÝáÜiÜtÜäÜÝGÞéÞQßrßVß(ßßKßÎ߬à²áÛâäGå^æOç:è"éêCë ì&îÐïsñ ó›ôö”÷ ùŸúMüþËÿeÓ-4=M] b d I ‚ È È « t 9 ø ¼  L ÿ ” ÷ + 1 2/?T€ªàåæºÿ¡þ}ýüšûÜú)ú‚ùÞø;ø÷ÍööFõ«ô1ôÚó·ó±óàó.ô³ôRõö÷é÷¹øƒù5úÌúwûcü²ý_ÿe©ø:? ÿ u ¶îBß×5Ôxéþ Ž"ƒ#$W$¾$W%Ž&ö'l)—*q+’+ì*’)ã'+&Ø$ç#Y#ã"r" !3 (va Þä 8 Ê aÎây’ÿoüdùÃö»ôóÍñ¹ð´ï™îí/ë1éQç¸åŒäÅã=ãÓâjâÞá/áUàf߃Þ×Ý—Ý´ÝÞbÞÆÞß6ß6ßßúÞßßOàGáJâ^ãSä5åý弿—çèŸé ëµìî3ðÅñ-óô¶õ÷öPøöùÆûÚýæÿÓt¸ªl ¶wy ™ Ì õ Ë IT‚ ß 4 § P " )  è i   0؈`}Î@¯ÿÿ)ÿ1þýïûÝúçù!ù’ø'øÈ÷X÷Îö1ösõÇôô˜ó=ó@óVó©óôµôhõ)öíöÊ÷¯øzù@úûåûñü-þ½ÿ­Õøø ´ I «LÁ|s´;ÅüÅ!)#,$Ô$N%è%½&·'¶(s)Ý)ì)~)¬('J&T%$ò#+##"Ì û¶c¬æq Ý  ñ†ìÿPüÎùÉ÷Sö,õô®òJñ§ïÒíÃëØéAè*çˆæ4æëå‘åâäãã²âfá-àLßîÞûÞwßà–àÌà²àPàÇßFßß(ßÅßÀàõáãäéäå÷ålæ çòç=éßêµì—îPðÍñó@ôYõöøÚùÚûþÞH^"ÆyWa— ê ø Ú e ž o  £ ; Ó Ž a 6 þ ž  Y opq€¬å6y·áàÿÏþºýÖüüûû~úäù/ùrø¤÷Ööýõ<õšô4ôòóÛóÓó×óÝóÓóÑóÜóôˆôAõ5ö@÷aøkù]úûÌûšü˜ýÈþ.ØÉÌêî ­ % |ój{¦Òïìg!j")#í#í$ &('>(ù(L)G)í(L(m'l&V%j$Ç#*#`"&!…o}Ú\8wé o Ò Ö™• ÿüúÛø°÷·öµõzôòòMñ–ïæíYìëê}é$éÌèXè¤ç¨æŠåaäeã¢âEâ1â`â¯âçâÒâ‰ââ“á3áá+á§áyâmãWä#å·å$æšæ%çáççè>êÓë’íVïùðdòœóÈôåõ#÷ŽøBú$ü)þæl”?ô®qJ  ß w Ú ÷ ã ¡ P Þ j  ¯ r % ÍD¥ã:|Á?}²îÿÿþý/üxûÎú=ú®ù8ùºøTøØ÷i÷äöpöáõ}õõçôªôsôGô8ô(ô*ôôôÿóëó)ôÖôöK÷»øùùóúãûÃüžý™þÜÿFá½ÊÏß ×  /°;ñ¶–•»¸o ¸!"##$Ý$Í%Ô&Æ'?((n'i&-%ô#Û"Û!ù E ºùÊä[¨Ë× " ¤ ? Ò*< ÊÿžýÕûzúùÎøø÷Êõ-ôxòÇð4ïáíîìcì-ìþëŸëôêÿé¼èjç,æ0å‘ä[ähä†ä©ä˜äRäÎã=ãÆâ†â‰âúâ°ãœäuå7æÌæ:çœçèÀè²éíê}ì;îð¶ñ#ó]ô}õö¼÷ùnú"üÙýŠÿ{›a”(Çt,¾7 ‘ ® ˜ X ÂwE÷­TÃ"D\v³sÜjÈÿsÿýþWþ¨ý,ý©üü¢û_ûû¢úú‰ùåø&ø]÷®öö¢õHõ$õøô«ôiôôúóæóðóûóÚó¶óÛóbô õ¸õ„öx÷‚ø–ùÙú(ü`ýzþhÿr¥,õ×f Ú C Ãz /àÓõôÛ°s ® "!B!Y!q!‚!q!!_ ‹ È BTf<ÛZù™2¡µ D Ô ` ñP§¯Pÿäýèü ü3ûTú8ùñ÷‰ö!õÒóŸò¹ñôðFð´ïïPî}í…ì—ë·êêxé2ééãè¹ègèè›ç<çðæèæ ç†çèÍè†é3ê¼ê/ëšë+ìÖì³íÂî÷ï?ñ„òÁóïôûõööø ù?ú‚ûÛü+þfÿ‹{FÑ?¨‚ñQÀåëË”AéŒ7Åy-ÞkèdöœcÓÿqÿýþ~þþÒý˜ýKýÚüLüÇû[û ûÇúú9úõùªùMùÚøRøøÝ÷Ž÷çö$öƒõõºôŽôšôÍô@õ»õöùõÐõÛõ=öäöâ÷ùúúPûtüGýþ ÿ„KxdÐñ- œ ÷   … T -<i)oC‘˜ÎÜNöÕ-ʃä#È2jÍ/ª$¡\k&¥? ä „ . ïFµÈbÿÿ²þvýzüûÏú6ú¬ùùPø–÷ßö öCõ¤ôCôëóˆó)ó½ò6òÑñ‰ñXññçðÉðÃð¸ðÊðÖðÚðãðñBñ€ñ¾ñûñ5òdòòÐò*ó®ó9ôÌôPõôõ˜öK÷í÷˜øGùúÅú‘û[ü ý²ýIþÇþ6ÿ§ÿýÿjÉ5–Ö>S&èÉ¿²{8Ïÿ@ÿÈþcþþãý¹ý„ýNý!ýàüŽüGüÀûû›úƒúsúsú—úÈúÝú®ú$úù)ù¾øø¬øù{ùöùúùù³øŽøbø.øø*øGø~ø¦øÍøÈøÞønùúHú_ú±ú6û®ûgü'ýþÒþRÿXÿ9ÿ|ÿöÿ‘I3F5Í4Ö]õŠØ(;m š¯ÔäÓÙ O € ¼  g Ç  ¾ ž ž ¶ ¬ ‹ ©  u ½  Û ¦ ® é F ‘ ± à î û š ù U à T Ú c à@¤#½:Ff§ ¸ZýàŒœÿ$ÿ«þuþŒþÁþÿÿ/ÿ0ÿÿ×þšþhþCþ1þ7þKþlþ„þ‚þhþ)þÎýiýýàüÑüçüðüÕüœücüüÊûyûHû0ûBûaûƒû|ûIû4û9ûSû˜ûêû:ü~üÍü,ýký•ý–ýœý³ýÙý$þqþÊþôþóþËþ¤þdþþ¾ýdý/ýýýÜü|üñûiûàúVúØùjù ùõøêøûøûøñø»øeøøö÷4ø‡øËø7ùËù&ú1ú5úbúwú`ú…úÉú&ûyûàû4üQü/ü'üüüçûÖûÖûÅûöûŽü5ýOý1ýýÁü2üåûü~üýËýœþÿÿÿßþšþgþ„þÿùÿÐͼ呀V,8­5ÍdÑ׋€ I•²ªØùÕeÒ|Q£Xkœ°¢†Àð"c•ÅÕÚ§pLSQXbP%øÔ ‚hQX‘“¦¸ž…rmZ_…¼ò(,à´£ °Ô#Ù‹Mìú-9 ¾\ºx}­n_7æmp^v£ÕÅ €Aáÿäÿúÿ óÿ¥ÿWÿ ÿÑþ¨þ¢þ•þ‰þzþ`þ-þÔý™ýeý ýÏü¸üÊüÌü¾ü³ü§üpüüÇû…û[ûTûlû’û³ûÆû²û{ûHû#ûûû!ûgû¤ûÔûÕûËûºûûpûeûnûû²ûÖûëûôûüüÿûûûü üKü‹ü¶üðü2ýMýDý<ýSýUýhý£ýþuþÃþÿLÿJÿ2ÿ.ÿDÿ}ÿßÿP®C[R30@nÉOÄüí«v¶ö=;é”R12Fiƒ™Ž`Ö™{…ÒÑGü;}¨Îņ1éÁžÁû-âœSüÿàÿÓÿVfY'áÿ•ÿhÿRÿOÿtÿ­ÿçÿóÿºÿ˜ÿÿ¤ÿÐÿ5RYQJ8*'En•°ºÄ¹¢}ub_l‹°¿¾¨ƒZ- õÿöÿ&=0÷ÿÍÿœÿŠÿ†ÿ‰ÿ ÿÃÿÜÿåÿ×ÿ³ÿ‘ÿgÿZÿMÿZÿfÿwÿ{ÿ}ÿoÿ_ÿDÿ3ÿÿÿüþøþþþþþ ÿ ÿýþóþåþÝþÕþÏþÝþïþ ÿ$ÿHÿMÿOÿJÿSÿTÿ\ÿ}ÿ§ÿ»ÿÙÿôÿ#+Gaƒ®½·¯­®¶¿ÌâçãìßÔËÎÌÇÒÔÙÔÊǺ¸­§§¨¯±¼·±œ¢˜•”Œ…yvZP>5+öÿïÿßÿãÿÕÿÒÿÔÿßÿÒÿÔÿÎÿÍÿÂÿÇÿ¾ÿËÿÖÿÛÿãÿáÿíÿéÿìÿôÿöÿõÿ ""-62@DN\N]inxqƒ€|“’¡Ÿ¡–—‰…‰’›”—Œ„qwksgnkhcQHB<4,+(( þÿóÿðÿÜÿáÿÖÿÔÿÉÿÑÿÇÿÅÿÀÿ»ÿ­ÿªÿžÿ¢ÿÿžÿžÿ®ÿ«ÿ£ÿœÿŸÿœÿ“ÿ”ÿÿ¥ÿ¡ÿ§ÿ›ÿ¡ÿ“ÿ›ÿ“ÿÿœÿ¥ÿ¢ÿ¯ÿ¯ÿ½ÿºÿ¶ÿ°ÿµÿµÿ»ÿºÿÁÿÄÿÄÿÄÿÆÿÅÿÈÿÂÿÈÿÇÿØÿÌÿÑÿÏÿÞÿØÿÑÿÄÿÅÿÃÿÊÿÍÿ×ÿÛÿÌÿÓÿÈÿÆÿÊÿÁÿÇÿÅÿÄÿÅÿ¿ÿÁÿ·ÿÁÿÄÿ¹ÿ¼ÿ®ÿ±ÿªÿ©ÿ­ÿ¦ÿ¨ÿ¤ÿšÿ›ÿœÿ˜ÿÿÿ‰ÿŠÿŽÿŒÿ€ÿ}ÿyÿÿsÿyÿwÿzÿ}ÿtÿtÿyÿ€ÿzÿ€ÿŽÿ›ÿ’ÿ‘ÿ—ÿ›ÿŸÿ¤ÿ°ÿ»ÿ¼ÿµÿ¸ÿºÿÆÿËÿÔÿÛÿãÿàÿìÿèÿîÿòÿùÿøÿ ,/06!#  "#% ÿÿþÿ÷ÿíÿéÿæÿåÿÞÿÒÿÖÿÕÿÔÿÛÿÜÿÏÿÓÿÏÿÑÿÈÿÊÿÊÿÅÿ¿ÿ¼ÿµÿÄÿÍÿËÿÕÿÏÿÐÿËÿÈÿÊÿÆÿÈÿÂÿÊÿÅÿÉÿÖÿåÿÕÿÊÿÊÿÂÿÃÿ¿ÿ»ÿÀÿ·ÿ½ÿ¸ÿ¹ÿ·ÿºÿÁÿ¾ÿºÿ¾ÿ½ÿÅÿÂÿÄÿÎÿÉÿÚÿÕÿÝÿÝÿáÿãÿèÿòÿõÿ÷ÿúÿ÷ÿûÿþÿ  üÿúÿýÿýÿþÿþÿþÿýÿõÿøÿïÿ÷ÿíÿøÿôÿéÿðÿåÿêÿèÿêÿèÿâÿÜÿØÿØÿÑÿÐÿÌÿÁÿÇÿ¸ÿ»ÿ´ÿ°ÿ¬ÿ§ÿ§ÿ©ÿ©ÿžÿ ÿ•ÿÿŠÿˆÿƒÿ‚ÿ‡ÿ‚ÿ…ÿ€ÿÿ…ÿ„ÿ‚ÿ‚ÿ‡ÿƒÿ‡ÿ‰ÿŽÿŠÿ†ÿ‡ÿÿÿ«ÿ¡ÿœÿœÿ—ÿšÿšÿŸÿšÿžÿ™ÿ ÿ ÿ ÿ¥ÿ¢ÿ©ÿ¥ÿ©ÿ¨ÿ±ÿ»ÿ®ÿ¹ÿ¬ÿ³ÿ±ÿ·ÿºÿ»ÿÁÿ¼ÿÈÿ½ÿÑÿÄÿÒÿÑÿÓÿÑÿÚÿÖÿÝÿÖÿîÿëÿçÿìÿéÿïÿéÿíÿëÿñÿéÿìÿðÿéÿìÿäÿëÿæÿèÿçÿùÿ÷ÿòÿåÿéÿãÿæÿèÿçÿäÿêÿëÿæÿçÿÞÿåÿáÿåÿçÿçÿëÿíÿäÿîÿäÿíÿèÿìÿïÿìÿïÿéÿíÿêÿìÿëÿëÿìÿìÿïÿëÿëÿçÿëÿìÿîÿóÿøÿóÿüÿÿÿÿÿýÿýÿþÿ %1*+*%(.)/,121**!&# üÿûÿùÿõÿ÷ÿõÿïÿîÿæÿïÿäÿêÿêÿñÿãÿéÿçÿêÿãÿêÿãÿäÿæÿàÿãÿßÿÜÿÚÿÒÿÔÿÐÿÍÿÊÿÈÿÈÿÈÿ»ÿÄÿÆÿÃÿ¹ÿ´ÿ°ÿ­ÿ¬ÿ·ÿ²ÿµÿ±ÿ¹ÿÇÿ¾ÿÁÿ¸ÿÌÿÊÿÔÿÌÿØÿÒÿÖÿÙÿÛÿ×ÿÜÿßÿèÿëÿéÿôÿûÿüÿþÿûÿüÿþÿüÿüÿøÿÿÿòÿüÿñÿøÿîÿïÿïÿéÿíÿãÿçÿßÿâÿÝÿÞÿÝÿßÿØÿÜÿÞÿàÿéÿßÿåÿâÿäÿãÿàÿïÿïÿñÿûÿïÿ÷ÿìÿñÿêÿôÿêÿñÿêÿëÿçÿåÿÜÿéÿÞÿÛÿÜÿ×ÿØÿÐÿÐÿÏÿÒÿÙÿÊÿÊÿÅÿÎÿÊÿÊÿÇÿÈÿÌÿÅÿÊÿÅÿÐÿÎÿÒÿÕÿÔÿàÿÛÿãÿéÿæÿìÿîÿòÿõÿùÿûÿüÿÿÿ       ýÿûÿûÿüÿúÿôÿ÷ÿòÿôÿñÿñÿòÿñÿñÿòÿñÿöÿëÿõÿïÿ÷ÿïÿðÿõÿôÿöÿôÿõÿöÿÿÿ÷ÿùÿÿÿþÿ ÿÿ  "    !   úÿ÷ÿ÷ÿõÿùÿòÿòÿãÿèÿæÿàÿÜÿÙÿÛÿØÿÛÿÏÿ×ÿÌÿÔÿÐÿÒÿÒÿÒÿÖÿÑÿÖÿÓÿÞÿÙÿÜÿÜÿÕÿÝÿÜÿàÿåÿïÿçÿæÿãÿàÿçÿíÿìÿëÿ÷ÿóÿøÿùÿûÿ  (+$+(0/98<=@BE?HISONNQTSOGBCEELJMHGLHLAM=>@==?9<:3>6947633289?:<5:237>7>7523/5703(1(0'./)5/D=A9BFAEDCFFFTULRJUYYPNLLHIGDIJHD@AA<?6??5337,*( " ÿÿþÿûÿþÿýÿúÿúÿüÿúÿøÿûÿ ýÿÿÿ  "# %%**(+,)0/1211345468999;9=<598567:3-)(.+),(3-!!  "  !(&#$#"#&"!# $"! #$(   ûÿþÿùÿõÿòÿöÿúÿûÿôÿûÿñÿóÿúÿòÿõÿõÿîÿîÿíÿíÿöÿéÿøÿóÿ÷ÿòÿôÿõÿõÿõÿøÿóÿùÿüÿûÿøÿúÿûÿþÿöÿÿÿ÷ÿ          "!&&$       ÿÿ               þÿúÿÿÿøÿûÿùÿþÿúÿþÿüÿûÿúÿÿÿÿÿüÿøÿñÿîÿöÿíÿóÿðÿ÷ÿöÿùÿíÿòÿñÿêÿîÿìÿéÿêÿìÿêÿæÿîÿ÷ÿ÷ÿ÷ÿíÿðÿìÿçÿåÿçÿæÿçÿìÿòÿôÿæÿêÿêÿúÿýÿòÿîÿüÿØÿÿ4ÿþÔû}ú¼û)ÿÜ”1Ž?Üþãý­ýþ<ÿÓ%“PŸŒ,ÿ¬ý±ü‹ü5ýTþÿ¹áiüÎ`ÿSþŽýœüÞûƒüáþy“H‡ǹÿkþqý'ýqýþÿ 9æþ‘ü©ú¯ú'ü±ý ÿ‡ýŽ8 ÿ>cÿêþAÿ;9áÜJ€ÿDþoýÛý0ÿ9¢ x9#=ÿñþ ÿÿQÿ!@¿4sÿ#ÿ¹þþÉýTþLÿ,Ý>øÝÿ:þýãüƒýIþ-ÿ%Lú©ŽSÿ³þ³þèþÿÿPÿ.@±#LÍÿgÿ·þ†þQÿ‰Uê¢ÿÔþ™ÿ+öîÞþÍýÊþ6¡¬ÿäÿ^z­ÿ´ÿ¼ÿLÿ®þ²þ£ÿè]…tÿsÿ[ZtþÂüãüõþƧåþ…ýý˜ýœüÙúVúü*ÿ»Ónçÿûå[Výûžüuÿä\€;5ÿwþ þþ«ýZýªýÿ:#Ž ðÿ‰þØþ Ê%5U›ÿ,I—dïxéÿÿ ÿ- ¿[÷þ”þ>ÿziÌþþÿ÷4Ûþžþ5ÿ»ÿ¥ < Œýrý$ÿ’ÿDÿI ýþ¥ûû þý%Dÿ­ýGý‰ý¤ý²ý`þœ×'%ÿëý ÿWÒÿÐþ]þþOÿ ±«6fþ±þyÌÒÿþÏý`™ÐZþ†þOÔ°þÛüøþï­W–‡þ ý·üEýŸ{Þ³½ÿ‘ÿŠÿ/ÏŠVÿgý¸þZìUþ4þ5:ÿÑü¼ÿÿðeûúK^HþùûBþ‡àìI$ üKûÏÿŵIýáý®<týLüÉýÕÙ¡Tþþð û;ú¥þóÚºÿP¬iñDIý´û)ýËõÿÜþ¹.¿ °¨þ3ýpýîþÝR:Ä™Õ}ðþèü©üÀþ<p²ÿˆþ¾ÿ<}m þÕù7ú¾ýzÏq¶¶þ†¡žÅÿWûVûüÿW(ÿbþ÷¿ÂÿÜþ'ÿ^ÿ®ÿtS¾ÿŸ[¸õVRþýsþ!d>ýýóüÊþ‹¥Þj Kû øÏúPŒ ÿí»‡@þÆúžù£üx’šLçÿ¼fõkûAú+ýyþžýþþåuÙ‰gúíøÎü’”ÿƒÿ´Íø>ýûóü©áƒÙÿþø¶þÂúiýÖ›ÿûšú²l3ýçüs‘õû7ûßåÛ8ÿ3ûýƒÏ)ûÃ÷ûü¿VmEù*ù´c Š¡ü‰öèøNÿ;íÚýþ.ÖÉÿ<ûýúõþLE¸½§ÿû¼ùü% ü˜d›üœøL÷¹ù>S!t ÿÌ+ÿ¡økøýÈ2 ýÿ¿&<ØüÕøüönþûºÿÏ€Dù×ú`I]«ü}üÕD¸ü“ûiüp(Õ í?û^ù€þl@þÐùpü}ÒtÅË49ýWø¤÷Ëü¤4›šªÑ¹}çøHõeúH.t¸zü9þucYþ õÙóüJl süŒýYY¡ýü¥þÌ z`ýþ_þìýêýúþ“?*ÿjþ÷ü"ûÅü“k÷-þOþ²[‡þûø¼øÿòœbXþºü güîþùÚø^ý#Œ:[Ëü!úYûpüœý<Y…_ÿÉüýûhürÿyh­þaû þR°þpý²þþÌþ8eOÿãJÕÜþ ø”÷výßÐ[Áƒÿü¹ûfÿ+ITû˜øiû››S¥ØÿžüqüÀÿ ¾üyý»b yµòþûüú›ùòüE‚ˆHsþ„úŒüñîó˜ÿ{ÿÿ}…ýfúÄýš¸2óý%úÏ÷ ø›ý.´ƒEHõ…þ²ù-øïû§ÿžÿ´ÿõ¶ 5 ²¶ù3÷ÿù‰ýzþýrü¥‘ àcóþFýšûùÏ÷û1¡ í 4Kýjù4ýËõ™ýì÷Jøùÿ"ûþ ÿñÿÚAýoùNúq+¬ÿ1ÿI¤þü#úËùZü S\kÙÿ]ü‰ù9ø!ú¿ý%bl¿!>ýûûæü þKþŒþHܸyüØüЊ1 ÿáôLïèõh à /?ý1üýÎýZü¬ù@ú|  jþöøqûiJ—EuüÛøËùrýËæ v40|þ!ý×Nÿù ø@þ ú:þ÷ü} £ ä÷·ò­÷'*„ñI=t §$úÛóçöÏþ¨æûÿÇÿØî T1üÝô™ô[ù0þÜÿ¸þUýì æåûôñ#ð†ö¼q ì ÊúøÑþê9"÷ õû¦Ršü}÷ÐûˆÑ í™ùëô6û‰ë ‹çü:ôñó·û”óôúþÿØ{òÃüÓ÷b÷§ü”» ! lïÿ@þáþÒÿ{‡þ¤ûðüÿ˜c6¦ý%ûIýí}i”ùX÷¨þ¡# ÀÓý¢ø„ùQÿµ½\yû'øáûÕñVÿ¢üòý'/Éã…Ðÿ¿ÿ ÿþ°ÿ3!  ÿJüøû÷ýPÝ ÚýÇ÷2÷Gý¢»x‡ÔýÉþ^îýøböÀû¦lñ‡M|ü2üÿÒêýwúú%þé R ×#üÇö÷©üÞÊ©Y¸Î%ýÿúOýïáÍüFøÓ÷•ü•ÅYü õ©özÿó Ä { ‰ üAý¾yu¢ý•üÁÿ©B½”ýéú¥üGÿÿ®ü¬ûÎþ*oN\dïüIûxüáý+ÿ6kqÿcþÏýpþÀÿ–¾ß\¦þGýãýÕî¦I~L-ýùûÝý‹(—#éüˆûvüþ˜ÿƒþ·üüÉýlÿabÅþ þ–þßÿzÓßV“”0òÔÿwÿãÿ>‡ƒ%¡'‘ëÿŠü~üÿ`³­ÿ—ýÖýAk^СþÞüeý<gÇ 1;áé5€þ”ù°ö°÷ÍûÇÿ÷Oÿ?ýÒüáýÝþÏþþýhþw4Šžÿÿÿÿbh¿Òþ¹û¶û:þŸÿ:Ý­ÿ’FÍ ÿ6ýKþ5ÌPÿ[ÿ2]ÿûüû‹úæûÒþl³Üâúüÿîÿ(j†*ÝÕÁ×èþíü5ûÇúÁüÿw'*'´ÿæþ¥þ‹þiþ¶þøÿ|O&=ÇøýBýTþ­ÿsÿ3þÊý1ÿ ç!UÿÌü·û…ü½ýËþ™ÿ."£¥ ¿ÝþüüÍü þ¹ÿº¾;-Fç-Êÿóühúzú~ýšÞ6ÐÈßÂÿKÿ£ü¾ûûüUÿ5Ÿj¡þªý»ýöýsý[ü)üüýŒ=0ÕXÿ=þb€hÿàýâý­þ¶ÿPÿœýdüTý€ÿgJÿ,þ±þ¾êÜ í4ÿwÿ×|æðtaÿ}ÿÃÿ?0Oÿ!þ|ýÃýÿ6ÛÿœþöýIþÿ,'hЖÿÂþfÿv™"Ë¿Lÿ’þ¹þˆÿ/m0ùÿ>´m¾ÿRÿbÿëÿQÒF†¥ÿÿ•ÿ0ÉÿÃþRþÑþ®ÿFèôëÿÝþƒþ‚ÿênaeÿæþžÿ«±vÿÕýhýfþ·ÿ]8øÿ³v´ŒŒù?‘g„ÿTÿRÿÁþ*þÉý:þHÿûÿÿaÿ(™0ÍÉT–d {è}ÿsý«üøüÛý2ÿÖÿŽÿ>ÿ´ÿ=øÿMÿ"ÿ3¡X-Y ¾þ¹ýQýØýÔþ ôÔÛ˜$”-ãþ¨þÝÿ­ÁÛ‘_*þ ƒÿÕý‚ü:üôüþ«þ3ÿzÿsÿcÿ’ÿ¨ÿ¡ÿZÿTÿ~ÿ#ÀR_&óÞpobÿ\þwýý¾ýÂþ»ÿšBË»ºJ1ÇJIG%qÉá!Ïÿ8§Œûÿ@Õ÷Ìx¨"ÿÁþsÿþÿµÿÿõþŒÿ™u‡™1ÿþ¢ýçý‡þAÿÜšÚÝK¿’ÞNbíG<Ox Äùÿþþ]þ:þQþXþ^þíýaý‚ý{þ¶ÿà™€à$ø¬§ø¬,IC.Aÿ¨þSþ­þüþ¦þÝýý.ýAþŸÿpfÿèþpÿµÇ^•‰YëAÕA½ÿ¢ÿÞÿüÿñÿòÿ)\Càÿ{ÿÂÿ¬d>Á‰ûkl¶†m;%ºqÏ⸋ÂvÙ_$Èÿ3ÿcÿÎÿöÿÿÿ).ÞÿPÿðþüþ1ÿIÿ?ÿHÿšÿŠZ-«]fÿ¶þœþKÿ#„4ÿðþ_ÿÙÿ ¿ÿoÿ ÿqþþ/þœþôþSÿ¦ÿ·ÿ•ÿdÿ‚ÿ%œ„+Uüþ¾ÍVîq‡g猣 `„y¡îÏT¾š”ne@ÿÿ3z¤—w•öBiDV’¿‰ÏÝÿðþcþ`þ¿þÞþYþÐýšýÄý!þ˜þùþ"ÿÿÿxÿÚÿüÿ'QyÛ$TUP`šÈô'85é…Fùû&Shž„ÿñþrþ6þ=þ^þUþuþÿÕÿS~Wæÿ…ÿWÿuÿ"{¨ìm¦«S·Oõ¹ÍÌ›T úÿÜÿ«ÿmÿQÿÿµþ£þìþUÿŽÿºÿØÿþÿAbOJiK÷ÿåÿ Cca6,A-ÿÿïÿÊÿ¶ÿŒÿ„ÿ£ÿúÿ,0åÿ¯ÿÜÿ)`™ÿ4ÿuÿýÿz©°˜”É00"X•Ò-Ó”@ÌQ°ÿ^ÿuÿØÿP¤TW’º§“yt’Ú_ã^¡­i’Bø¢IL™Ä›/€ÿÌþNþ(þPþ„þ‘þ”þ¨þÕþøþÿ.ÿMÿ\ÿOÿ(ÿöþîþ0ÿ~ÿ«ÿ¤ÿšÿ’ÿ¨ÿ»ÿÚÿéÿØÿ¤ÿŠÿ‡ÿµÿ…[´(œÆŠÂ¡Äÿ‘ÿàÿaÆÛ®Ròÿ…ÿÿ…þcþ¢þHÿ÷ÿ åÞ‘>õÿ°ÿmÿ>ÿÿ&ÿxÿõÿ[f½ÿÌÿ4œº…1 4i¬Yž³|ö6€ÿ÷þžþOþAþ£þAÿ —¯k§ÿ`ÿ0ÿ<ÿ…ÿu±Ã>Ñÿpÿøþ¿þÖþbÿ gÀ-€JÉí&ïœV0<nŠvW8dóH-ÁkU‹µ·£*–ÿÿÍÿ42µÿ ÿšþ«þãþÿÿÂþ/þÞýþ†þùþ;ÿ-ÿýþ¿þ¶þßþþþñþŽþþÄýùý‰þ ÿ,ÿÿÝþ÷þ4ÿÿðÿ íÿÖÿ —EŸl,@“ÛÑcÍlYxŒqo¶@•'šGl·ú)Mz²áçxÏfD@`fšÿ€ÿ¥ÿÌÿŸÿÿ þtþ¦þÿBÿQÿ ÿÑþÀþ´þ¶þ}þþˆý8ýLý»ý#þ^þ]þBþNþ_þ¾þÿTÿÿÅþšþúþ°ÿ)=×ÿ "3Ü¢«áèÛÛ³¬ÏØÐ‹>çÿ³ÿÄÿþÿOlN/O¡½’;;x®'ÿ5ÿjÿ×ÿ¿ÿ`ÿ>ÿ`ÿ–ÿ”ÿ,ÿzþÑý¤ýþ«þôþ´þFþ.þ‰þáþÿ@ÿfÿiÿMÿVÿÀÿ,4°ÿ!ÿ1ÿÒÿŠè²7™ÿWÿEÿkÿpÿFÿÿÿUÿ£ÿ¬ÿcÿ ÿ»þyþ~þ¶þÿ_ÿEÿÿÿVÿœÿ²ÿÊÿz›cf¸H²™Y;m¯Áh èÿ ÿæÿcÁî#ic£h!ŸÿþþÔþDÿ {g¼ÿ›ÿÿdÿ÷þnþþþ—þ&ÿnÿˆÿ¤ÿÖÿpªõÿ\ÿÿ$ÿAÿ\ÿgÿ ÿLˆÿÚþþýqýyý¨ý þŽþ ÿ“ÿìÿðÿÃÿbÿðþ©þÉþ9ÿºÿ ^¿Xï@"¢.(v³¬ˆ˜ç0F„ êÿ™ÿœÿÀÿèÿþÿ!–÷—mÿúþÚþ ÿOÿ™ÿÜÿn“€RB8ÌÿžÿªÿßÿU´ï?2íŸc%Øÿ†ÿ‡ÿóÿj—˜}*¼ÿ+ÿªþsþþãþFÿÿºÿøÿS•y<åÿÊÿéÿÓÿ–ÿ³ÿœÕÀQéÿÐÿüÿéÿ™ÿÿèÿjËìËl&ßÿ—ÿ…ÿ­ÿòÿW}X4Éÿ†ÿQÿ?ÿ‹ÿŸú@L3èz'êÿªÿ¡ÿàÿ/uƒ^%÷ÿ¾ÿMÿáþtþþëý.þ~þÍþÿÿýþÿ.ÿÿÈþpþ?þSþ þåþ$ÿAÿUÿfÿqÿ‚ÿ™ÿŠÿRÿ÷þÔþüþWÿ•ÿ¢ÿ•ÿgÿ;ÿ"ÿ ÿÿæþ“þCþ>þˆþÇþóþÿÿÿÿ<ÿ}ÿšÿfÿõþ¼þÿ¡ÿÖÿìÿæÿçÿïÿ5F¬ÿlÿ˜ÿ4(÷ÿîÿÛÿ¾ÿ·ÿÿ`ÿÛþ`þ<þ…þÙþÅþrþ9þJþsþ€þKþ þÓýÊýþrþ¹þµþ¤þ¯þåþÿ-ÿÿúþÝþ¿þ¨þÍþ6ÿoÿ|ÿgÿ†ÿÒÿÍÿ¡ÿ›ÿ¸ÿÌÿÊÿ¨ÿ¢ÿºÿØÿëÿÖÿÃÿ¿ÿáÿ$ClƒÌþ9?,öÒîE„¯|4/`—‹V4aÇE¢Èéìè/1 3†ÝE]Ò3¢-û>ű˜š²¶šPÒ¹×êùÞ¦ÃúýÍ“}Úñùÿ &f°òôÅ¿ÿGiN  VßEH¼®ó3!ÐjJg˜³›X6f>çr91KFÖ~L@ «]®0Öÿ~ÿÿoþàýIýÅü4ü¢ûûRú ùøøƒøø¤÷òö4öžõ;õÚôxôóóxóó¯ògò>òìñ„ñ0ñüðõðæðÕðÐðìð ñ&ñIñ†ñÇñüñ ò&òhòÝòTó¬óô|ôñô]õÒõ?ööîö.÷÷ú÷lø¾ø'ù’ùçù:ú„úÌúüú,ûWû‘ûíû]ü²üóü ýbý­ýÙýðýþCþþºþæþÿVÿŽÿ ÿ¨ÿ¢ÿ¤ÿÄÿ×ÿàÿ¿ÿÿbÿVÿXÿOÿÿæþÆþØþþþÿ*ÿÿôþåþûþ>ÿnÿrÿtÿÿ·ÿóÿ+4"GyµëP‹µæPy~›ã@ ×iÍ&r½÷6’óVÒ`îk ç @ ­  ~ Ç  ‚  ± 'uïiÎO„·ò9¢Ao¬þ*SOà X´øë§:•®+‹¢¹Æ Ï ‰ ! }½åËÍ%ÿ…ýÙû!úzøðötõÑóò}ðïŒí.ìë-êyéàèlè èìçÔç¾ç§çµçèç,èŸè,éßéÐêÐëËìáííîðúðêñËòÂóÜôñõ ÷2øvù©úÇûÏüÁý§þvÿ'ÙD÷´‚c&ËEÌ>”Ó w   m À  D _ ` h \ % ì ­ { . Ö f û}è5uªÔïâàêèÿ¼þ’ýsüeû2úÏøZ÷ öºôhóòºðœï§î«í½ìÂëØêÞéôè9èºç)ç¬æCæ1æ?æsæ˜æÒæ4ç›çúçsèéÛé±ê„ëfìqí¡îÐïîðòó/ôBõ=öC÷[øtùwúûÀüÔýÒþªÿ†V¦DÚ€Ÿ-œÿ1Y”Œwt}rQ.Çl±Pœ>í©]¼WñLþÀyR42"ÿÿüÿòÿåÿèÿK’Ð$lÕ7Œ8ç«i1   ò ì æ ïèïù5ClªÔÖÙÕ±©u Œ { Ä !!û Ê r Éß®NÃ*Lc žvN ©*‘´æý0û„øöÄóxñ4ïí3ëZé¯çõå8äÊâ–áŠà¨ßߌÞ-ÞýÝöÝÞlÞ¹Þ"ß·ßUà%áâã(äTå…æÁçé{êéëKíœîýïSñ±òôfõÖö7ø¦ùûpüÙý0ÿo“Âæ&R‹· Ø ú  #è´s/Þ{™a²õ!ñ¸aôm¾L‹|^ £ - ®)«•—þý¤û*ú¾øH÷ôõ¦ôió4ò ñõïï4îƒíÑìFìÈëkë ë´êRêêóéØéôéêJê†êÛê?ë¦ëìNì¬ìííöí|îï·ïsðñÃñò6óô¶ôqõöÒö’÷Qøùêù´úûiü7ýöý®þVÿçÿŠ™(‹ä(m˜¨¬ŸƒV(üˆ%Àcö~ö{ôÿoÿçþrþþ¨ýLýùü¬üYü üæû°û‹ûbûKû8ûEûcû•û×ûü\ü°ü ýUýÅý"þþÿþÿ!Æ‹.êœJñ¤^ý¸k?  å Á ™ upd5ÿ#DFJ^z‚m0Úˆ ž ![!¤!Ö!ý!"ü!Ä!Y!Ë ü÷¹B‰ÃáÖ $ º'©ñ&þ=ûøãõSóËðGîêë¦éuçYåeã—áÏß4ÞÎܓۑںÙÙ¡ØjØKØL؇ØöØgÙÚÆÚ¼ÛáÜ6Þ¦ß áÆâvä+æîçÕé®ëŒíhïKñBóXõr÷{ù˜ûŸý¯ÿœŠd½P Ø T ÓB¢í*RX@Â_Í.Û&.á™*¦ýJt™­³”x:ÿ²G ß a Ê+‡äG¨ÿcýÓû8ú¯ø!÷«õ/ô¼òdñðëî×íÌìÛëüê;êéïènèè¼ç‡çrçmçŒçËç"èŠèé¢éEêëÄë•ì_í=î#ï*ð2ñFò]óxôõ´öÑ÷×øîùåúÜûÑüÈý¸þ ÿe&ÓuúuÜHžú>x¡ÁßçË”RÏu«Rèwúwå9†ÿÌþþZý›üèûNû˜úõùRù½øøz÷ÛöDö«õ"õ ôAô×ó„ó=óóóòæòÜòÖòéòó6ó{óßóNôÝô|õ>ö÷á÷»øšù›úƒû€üxýþ°ÿ×8r¦ã ? R ` o ˜ ½Ýçë7D6öË–\#÷­U Öq — !K!!À!ç!"""ù!"ÿ!Ä!l!ð h ²Ö±‹5±–ë+ ë }æG¯ÞýûhøÆõ.ó ðî›ëAéç¤ärâTàQÞwÜÜÚtÙNØ@×qÖÃÕ\Õ/ÕÕÕSÕÌÕ\ÖB×JØŸÙÛ³ÜtÞuàwâ…䍿àè!ëtíðïkòüô¤÷<úÉüIÿÜK›ÎÜ Ð »’W˜c¢§ŠFÔ7ˆ¿ÖÓÂa ˆøW’±Ä¶¬§ƒZ,þÃn0 Ò s  ¡4¿Oä6ÿäýü)ûÔù}ø0÷áõšôOó$òúðïïîîîíMìyë¸êêzéêè„è%èîçÑçÆçÚçüçHè¢èüèvéêªêmëJì.í4îNïrð¤ñÚòô_õ¡öê÷5ù~úÎûýYþœÿÔ"B4'Æx ‡ í 9 w ™ ˆ ]  É f íeË-qžºÕäîîíÿòþóý÷üõûüúúù$ø6÷QöŠõÂôñó3ó’òöñlñîðð3ðåï¬ïvïUï;ï.ï9ï\ï•ïÏï#ððñ‡ñ"ò¹òcó!ôîôÄõ¯ö©÷¡ø·ùËúõû*ýhþÿÎ I‡Ô i± ÿ Z ¤ î%KwŽ–ž±Àµ©‘h1åyŒ † !l!Ò!6"™"Þ"ö"è"´"‘"E"ú!¤!D!ä ƒ  †Üøè4ŽÌ>mˆ˜ — q‘òÿ7ýxúÉ÷õwòùï“íSë%éüæÝäÄâµàÀÞíÜ5Û¥ÙZØY×ÖåÕ†ÕWÕMÕbÕ–Õ÷ÕgÖ#רÙsÚìۭ݌ߛáÇãøåDèyêÃìï}ñô†öùÈûrþ§*x­ Á ¯f¶:¯ HT:ìpÌòÿä¶5×dÒ/Znb@û¶lËu)Ù † 3 Ï SÑBÀKÜtÿ þàü©ûúFùøÜöªõyôLó>ò2ñ9ðWï‹îÊííuìÍë=ë¬ê'ê¯éLéúèÅè¯è®èºèçè'éqéÄé-ê•ê#ëµëfì-íî ïðCñyò°óØôöR÷“øÄùûKü”ýèþH›î*Tka:þ° X ø ‚ Ó    À f Ù 6 „  ø.`v†we(݃ÿþÁüwû&úêøÄ÷®öœõŽô„óòñ}ðšï¶îûíUíÊìcììáëÀë¥ë¢ë®ëÄëÚëìcìÖìSíóí«îuïYð=ñòóôõ+öI÷‚øÇù ûƒüÿýhÿÊ$sÙ'}å9 §  d®=XL4î͵™ŒuIûìLœñ4 t Ì 3!ª!"J"Y"P"/""¬!L!í ƒ 1 Ù~ s¶Ëº`Ç[ŽÅî"F q _"¼Zþûßø öfóÐðoî4ìôéÅç”åxãVá0ßÝ2ÛsÙö×¼ÖÑÕ"ÕÇÔ}ÔXÔSÔxÔ£ÔîÔrÕ#Ö"×iØðÙ¬ÛžÝÄßòá-䇿ÓèëwíÙï`òõº÷túAý&ÜûR “xD º[ék¸ÞÐ}Wqe<Èyžh”žxBä3Þ‹<¼ € + Æ V×LÇXè˜ÿ_þ7ýüûÞùµø÷_ö*õüóÛòÊñÒðøï2ïsîÅíí}ìÒë/ë€êÙéTéçè˜èkè[èeè†è­èéè#écé´éê–ê.ëãë´ì¬í¿îäïñUòóÎôö[÷¤øóùLû²ü-þ­ÿŽöC~§®£ ‹ W  Á ] Û J”ÉÓ¿ˆ¢ õ @ z ¨ · ôž[µJÒÿeþõüûú©øH÷ öªôaó&òñÞïÅîºíÌìèë4ëêêé5éäè½èªèžè èÉèéVéÓé[êþê²ë}ìSí/î,ï*ð@ñcò•óÔô<ö¼÷4ù³úFüÆýWÿØZÊKÄFÑ _ ê iÞE“ÄÞâïÚ´‰h@Ç=Ë/eŸÐ * ` £ Ø !6!Y!l!:!ø À x " §NÀh ¬!geZ/Ó?«pËS Œ Y ›ÿbü¦ùïöJôÏñcïí×êŸèoæOä âÆß¤Ý£ÛÍÙ(ØèÖæÕ$ÕˆÔ.ÔèÓæÓ×ÓõÓ1Ô¸ÔeÕXÖž×8ÙÛùÜ'ß^á²ãæ^è¹ê'íµïmò@õ"øûþ Ð{ ‰ Å ïïº[ñn©¼£T ¶ õ !ù Ï †  ¦!~ÀáîÆ‰.Ä4ºGèt y  Ÿ”ý ·ÿþXýJü:û0ú"ùøèöÊõ­ôšóžòÀñòð5ð‚ïÜî>î íüìXì¶ëë˜êêÊé‡éXé?é=éBé\évé¦éäé/ê–êë©ë\ì íîïðIñxò³óøô?öœ÷ìøJú´û0ý¼þKÝuæI“Íè ó õ ó Õ ±s¨NE,ÞyóbÀ@ W R = é}mÖ(…ÿæýMü±úùŸ÷öô óñð«î_íìë ê"éZè·çç¡æOææÙå»å®åËåüåNæ¿æ]çèÔè±é¦êœë•ì¤íÈîþï?ñœò ô“õ(÷µø]úøûšý&ÿÂ\è{ºQ ñ *›3Vd`\Q@,ë°KâV¸ü8C]a€ž³Á²²j˃­T»Zù•3«_¯ÆÍÛã¯4ØM¡ Ò  NjJA5ÿýºúyø)ö¾ó^ñ ïÃì¢ê†èfæpä™â¸àóÞSÝÓÛmÚ4Ù2Øe×ÑÖhÖ@ÖMÖuÖÆÖCרÙÚKÛÕÜ~ÞEàKâo䳿þè]ëâí‡ð(óÜõ–øbû þÈsŒñ < ©»j…ÄßÓ‘%¡é  ð 0Ó#øÚHëy|øy  :á{ÁcÿþÕü¾ûªúªù¢ø®÷ÀöáõúôôGó|ò½ñ ñƒðòï\ïÌîGîÎícíí¢ìTììÓëªë‹ërëiëmëƒëžëØë*ììíŽí îÝîïVð(ñò óô9õyö¶÷ ùYú»ûýyþÕÿ3“ïF ë$ Q [ ` @ !ᆋé6óŸ1³Tz † k 9 ó™œ÷Y©ÿ÷ý:üƒúÐø÷gõÁó+òð ï§íDì ëßé°è¥ç¿æîå)å ä0äÝã¬ãšã¬ãÔãäaäÏä]åæÓæ¼ç¾èÔéóê'ìiíºîðñó™ô/öÌ÷fùûÚü‰þKùAÞkÿ  ˜ kªÙöóÉMèyŽmºõêѾ«rN+ô»‚Jù’+ÆYàs!¿fµKÄ.‹æ$8GN+ïž N  ‘ …â((ÿýðúÂøŸöˆôuòeðiîmìê‹è•æµäúâCá­ß:Þ ÝéÛÛbÚêÙ˜ÙjÙ\ÙuÙÌÙ8ÚØÚ¿ÛãÜ Þ¢ßMáãîäåæé7ëíøïlòõŠ÷ú˜ü8ÿ¹B¹) v « ¼µGÊC’²­ˆ5¨"%í¡*ó0Vg`;ö¡7ÆOØn  Œ - Âcê{Åsÿ<þýñûåúÞùïøø'÷Rö}õ¾ôùóQó¤ò òvñýð‚ðð°ïYïüî¬îhîîèí®í‡í^íEí?í@íaí‚í¸íúí;îˆîêîOïËïNðîð¡ñnòHó:ô/õ2öB÷Yøù¹úëûý`þ¨ÿô;†ÁñAS W Q .  Å u{Ìâš/·,‚ ¾ Þ á  „6Í@¢ç=ÿŠý×û*ú€øÐö4õ’ó÷ñdðËî2í¶ëSê éÐçÊæÙå(å„äþã‰ã3ãìâ³â¤â½âçâGãÃãhä)åæÿæè;éRê“ëéì*îïñ~òô¼õn÷"ùÝúü?þïÿªKî’+» F Î D²j¯ÝÛâÈ™Qòš2°Šø>bo^@ýºwHèË«q'¾OÖRËFä<Í—B¶+€ç2xÎ>œäð © B Á+‰Þ4—åþ*ýjûƒù÷jõFóñòîÞìÕêéFç¡å ä˜â&áÄßyÞbÝaÜ„ÛãÚtÚEÚEÚvÚÛÚ~ÛGÜ3Ý;ÞŠßæà[âíã¶åŸç±éì\îÞðnóðõ{øû†ýðÿW¾ Z ¥ Ú õþã¤8”¯§x ’X‹¡}9º6JA èɇ1Ù~œ $ ’ ÿiÞUð–L ÿçýÁü©û’úƒùuø{÷•ö¸õòô7ô‡óéòaòôñ‡ññ¶ðOðúï™ïGïîî©îyîaîRî\îiîsîxî‡î‘î¥îÈîøî>ï—ïúï‚ðñ­ñdòóÄó‰ôZõ+ö÷ô÷øøú<ûyü»ýýþ8pœÆï5M\ c ` N  Î ppÂñüíŇ0Á6‰ Ë ú é ½ y «vÚ/ÿ†ýÕûúqø¿öõMó›ñÝï4î¦ì*ëÝéè_ç[ætåäÝãGã½âUââãáÙáúá6ââãÁã…äcå[æqçƒè¹éë]ì¿í(ï¯ðOòòó”õF÷ ùÉúzü2þèÿ­_³`ø ‰ ö nÉSƒ©§©’uC÷vþa±ê+Fl†¤®•lÂu¯QÂs)å—GÙ`ïzîq¢LýºZþn»n‘un u V  «L¬ó?±ÿìýßûÜùÊ÷ÆõÆóÈñÀïßíì êgè¹æùäiãáá—à&ßùÝùÜ=Ü¢ÛJÛÛÛLÛ›Û Ü¦ÜjÝNÞeßÐà_âþãÜåÝçê,ìkî¯ðó‘õù÷^úçüpÿäYÕ* u ¡ œ€?ÓI´òþçÁP»ÿÈ_×1ivmnJ$çŠ$«‰ õ h ÙUé(Ó~ÿ,þìü³û‰úoù`øX÷rö¢õòô;ôŽóõò^òÈñHñÉðaðòïïRïïðîÉî î‚îWîGî8î8îGîYîzî¬îÓî ïRï°ïð‹ðÿðŠñò½òeó!ôãô½õ¥ö¦÷¦ø¹ùÏúöûýAþjÿ–Ðù.Uy§¬ « i ' Ï cÝ7‡¬µœj¨z Ç ÷  ô ÂqùfËxÿÇýüaú³øúö9õ~óÄñ+ð}îáìTëôé¡ètçSæTåäÖã8ãºâNâ âæáÖáèáâ‡âñâãUä3å,æ@çhè—éæê<ì”íï~ð ò˜ó>õñö¬øtú$ü×ýŠÿ4Þ|!­: ³ 6 ª ùO­ÌÏïƒM¯>¶ Q‡¦¸ÂÓÕÔÀ¯i•0Òcú¥QÇs$ÙRÒ[èSÌ] í›2ØkÇ+[~ ~ _ = . çxŸ&”Þþ ýCûQùO÷Aõ?ó@ñOï{íªëê^èÂæ(å©ãAâæà€ß^ÞrݶÜ7ÜõÛþÛ@ÜŽÜêÜ_Ý÷ݹޙߺàâÇã›å–ç¬éÒëî4ðxò¿ô+÷‘ùü‰þ }çFˆ ¼ д|0»Uqe.È;б³‘DË T]UAÛªf$ª%‡ Ô ' „ïƒÎ;ÿðýžüYûúîøØ÷Üöôõ&õkôÀó$ó“òþñwñïðyðð¯ïkï+ïþîàîÄî¯îœîîˆîîžî·îÔîï7ïkï®ï÷ïVðÁð@ñÝñwòó°óRôõ¶õ}ö]÷\ødù†ú©ûÍüçý÷þ)D]~¢Ìêô ê º x % Ä G³ Gu~o4ÏL·  F o t q @éóFèþ8ýƒûÑùøYö«ôõò7ñïðíbìîê™éEè çóåðääaãÊâgâ"âöáÚáèáâ9âšâ!ã¼ãhäRåQæxç¬èøéXë¼ì"îˆïùðròèóƒõ÷Øø‡úHüøý§ÿEà[ßM¼$ Š × Al‡”‹{TÒqû{ê=‡³ÀÞßÝææç˦g ©AÐf½t8É€6ÔlónÝqÑšwE Å=ª HT v §  ± ~AætéjÚþ ý9ûmù–÷Ÿõ™óÁñúïGîsì±ê/é¨çæžäLã âÐà¼ßîÞWÞôݾݷÝùÝMÞ³Þ2ßÞ߸à¡áÛâLäîå¶ç¡é«ë²íàïò3ôwöÇøûuýØÿ@ˆß 9 B "ß„OŒ²«z%¥óú­H°ï! êÃCü¤D ¾ 0 ˜—¸g%íþ³ý†ü\û6ú#ùø3÷UöŠõâô>ô³ó.ó¯ò@òÎñcññ°ðqð7ððÿïð÷ïòïîïóïõïùï ð%ð[ððÒðñcñ¶ñ"ò”òó•ó+ôÀô`õÿõ¸ös÷Hø+ù#ú#û5üNý]þ`ÿo|‚“›¸ÉȾ³ š r 1 Ö ` × =€»Ûå¹A . r ¬ Ò Ý È™VéuÙ2xþÄüûrùÆ÷öVô©òñmïÜíMìÕê|éDèçæ!åbäÂã9ãÏâ‡âSâHâKâzâÊâ;ãÆãmä<å"æ!ç7èqé¸êì€íðî_ðØñVó×ôWöò÷Žù.ûÒügþšŽóM—ß  S { ½¯¢tCð†  j¼Pž¬® ‰l^1ãˆ+Ï{*Õ2ô¶’^4ö®Y¸GÆ•‚dÈaëfÐ - ‹ Ø  " 6 $ï›=ìyêÿYþÇü3û„ùË÷ö(ôDòcð îôìfëöé¬èiç!æøäÂã¸â½áþàlà7à.àWàà á“á5âîâÔãâä#æç+éðêÇì³î®ðÀòÎôãöùø"ûNýÿ²ß þ Å ƒ Ý+iw[›ïÝ¡LåG€ˆ|V%òËž p < ú ¤QàyΖ„ÿbþgýjürû†ú—ùªøÔ÷ÿöRö³õ0õÀôeôô”ó5óÔò~ò1òùñÐñÁñ¶ñ¸ñ§ñ”ñ{ñcñ]ñ`ñuñ¤ñÒñòQòòÆòó>óóßóMôìô}õ*öÊö‚÷4øøø¬ùwúNû*üýþ,ÿ;@@H>#îÒ¡p : ô Š m º ê þ  ï Ê €  œ ó D j –«‘n'ÇC¸ÿþ}üçúXùÕ÷`öîôyóýñðï‹í+ìêêÁéÄè×ççæ æ¯åfå!åëäÑäÜäíä:å©åEæçÙç¿è¹éºê¹ëÛìî3ïxð¾ñóôÐõ1÷ŠøñùKû·üþrÿ¸ìFlz¥µ ¹ ¬ ™ ~ 3õœDÜfêjÛO¯ú?j~‹}y{}Š”¦¥‹Fð²h)ùÖ¿¨Š`?Ú¯|>üÊ£¬mW6ÿÄ}0ôÈv € Ü , a H " ã™Gé‚ôþPý°ûúYøˆö¶ôìò"ñ`ï·í0ìÈê~éLè/çæå!äKã£â(âÏá®áËá"â¢âSã#äåæEçoèºé%ë­ìaîFðHònôšöÌøàúðüæþÌ·ž‚pb % Æ J¤ÊÜ̘B rŒ^$Ð\Í*4B1ì ½ Œ _ 3 ÑŸtNä®ÿ•þŽý¥üÉûûiúÎùùtøÆ÷!÷‰öö”õ>õüôÄô˜ôfô1ôôÐó—ógóJó+óó óóóó,óFó]ó|óŽó²óÕóÿó4ô€ôÛôQõºõ2ö¸öO÷ï÷šøEùýù¹úvû3üýæýÉþ»ÿÄØßÙ¼ˆFü¥Jõœ = Ë ; … ¡ © ‰ T  1 · * ˆÎòÿá DÕUÿáývüû¾ù|ø&÷Èõiôóñ&ðÏî–ívìëŸêçé]éßè{è,èéç±çç~çç¡çäçVèõèÌé–ê‚ëqìeíVîIï3ð)ñ1òNótô±õ÷öGøùÍúúûýþÿüÿãÙÑÄÁ²¥~V ­ I æ z  ˜ . Å Xä]Á k¶éZ—Ãë9auS6à£|aQ+ùÖ¢vV%ïÖpaKH7ã°”f'ó è é Í “ E Ô 4 ‰ Ó ò  ý.TzX<½:ÿ­ýüaú´ø÷‘õ3ôÏòdñðÎîˆí)ìÒê é‚è’çÌæXæõå²å‰åå½å æfæçæ…çWè,éAêyëÉì7îÀïmñ.óþôÁö‡øJúüÚýœÿg%Ô„0Á 6 y ¢ »¯s c²ö î¾bèK¾î M Š ©  Á ÁÃÂ¦Š‚•°ã#xÿ¹þ þaý»üü‡ûíúuúúµùfù$ùòøÁø„øQøøÞ÷˜÷n÷P÷(÷÷åöÇöµö öƒöxö]öHö!ö öôõàõÞõâõýõöNöƒöÅö÷H÷”÷ã÷Mø¼ø!ùµùFúû³ûüZýþÒþÿGÀv9¼x#ÀE¢â$7,+õ¿_‡øBqŒ—„kNÿ7þýþûïúÛùÂø•÷föNõ8ôóò%ñEð~ïÙîLîÝí}í9íóìÈì•ìzìoì€ì¥ìíyí î£îHïòïœðDñêñ™ò\ó'ôôôÏõµö¦÷—ø€ùjú?û ü¿ümýþÌþÿ2õ»pµ9¼CËIÒXß` € z à @ œ û V ´  ƒ ÷ T¯ï$Hdp‹¢ÃÊæ æÅOך{l}……g9ç ¬ ‹ „ © ã ÿ =in|jE=QLDL+Î s þ \ | ˜ ¼ é$)üðŽ‚ÿ÷ýIü­úùœ÷ö²ô7óçñ¦ð_ïîØì¾ëÃêàé>é»èdè4è5è?èoèÉè1é¿éqê/ëì8í{î±ïñŽòô õ@÷àø}úü ý2ÿ´F¢úX¥Ôæ Ý ° l  „ Å 0JTS'æ  – ø Q ” Ù 9 •Ü8}Ó+Ô&uócý’=ëÿ£ÿ`ÿÿØþ’þNþ þþÞýÉýªý“ýwýYý6ýýÖü˜ü]ü(üÜû˜ûNûûÅúuú'úÑùoùùœøGøï÷ª÷l÷?÷*÷øöâöÈöÁöÈöÇöäö÷R÷ž÷øiøôø{ùú®úEûÞûsüý³ýfþÿÉÿk³=¤úP‡­ÙÿòÈ{ž qÑVÿþäý+ýiü¥ûÙúú3ùPøp÷¨öëõ:õ¦ô ô¯óRóõò¨òeòòìñÖñÌñÙñòAò{òÃò#ó‡óåóSôµô,õ¦õ'ö©ö:÷Ê÷\øìø€ùú†úýúlûÝûBü¾ü/ýŒýøýjþÐþ0ÿ”ÿñÿO¯YÃ+•„õqéX¼&Žô\Ò=§ ’ s Õ " d £ Ê ë : f ¤ Ä ë ô  ì È • \ í Í ¤ x R ; /  ì À ‰ d 5 !  ' o Ë ÷ 1 b ™ º û : ‰ â V Ø _à7á&D>96è†8ê]ª  1 ;  í¦aöq¶OÿÇýSüîúqùî÷oöüô£óXò*ñ(ð[ï‘îõí~í*íÌìŒìdìXìrì¬ìíšíMî(ïð,ñCòFóIôMõeö}÷ø±ùüúVü§ýÜþ ê£QíxëjówÜ%EL>µRÀnBÕ=Ó]õ›y__dep’ˆqhmžÍü8nŸ´µ“mC êÈ‹d'ꊀäÿJÿµþ þƒýëülüìûnûìúzúÞùMùÊøHøó÷•÷K÷$÷÷÷÷!÷-÷V÷~÷«÷á÷+øŽøíøSùÒùEúÂú5û¯ûüjü¸üýaýŸýãýþBþhþvþtþYþ:þþãý¯ýhýý¿üiüü­ûHûØúhúú‘ù ùÂøgø øÄ÷÷L÷÷ßöÀöœö•ööŽööÁöðö÷H÷÷Â÷øNø”ø×ø$ùsùÓù)ú†úÑú!ûsûºûùû7üoü­üïü-ýiý˜ýÈýþ3þdþ“þ¸þÞþÿBÿiÿŸÿÝÿX§æ,iµýQ›ì]®\¶]©ò9r·þNœÜ3Wv~}ƒ–¬¯±©­‡k:ÿãÎÁ¾¬ ¦œŽhJJGdcµì  Inyˆ¥Ý K Ÿ Ù ; P i ‘ ¯ ½ Ú  L q § ¾ Ð è ì ¢ c " Æ J  À O å’õE¬Þî[z«ë:sÿÇþôýýAükûŒú°ùùPø–÷÷¾ö_ö"ö öòõÝõèõåõÈõÆõëõ%öuö÷ö‡÷!øÐøjùìù[úàúFû½û?üÔütýþ¶þLÿÎÿ2}²å=Nd³ÆÖÛÏÉ»^'óͶ¿ÉÖæýùÛžÙõ&m¾ý?n“©ÆÒïGe³ÖÓͧyNØM΃7á}”ÿÿ•þþ¯ýRýýºü[üü®ûCûÃú@úÐùhù#ùëøÒøªø¤øŠørøZø;øøþ÷ð÷û÷ ø;ø_øŸøáø!ù^ù˜ùÅùýù0úgú¢úïúBû¦ûüeü³üý?ý~ý±ýÆýòýþQþ‡þÈþùþ'ÿAÿXÿRÿFÿ7ÿ-ÿ&ÿ(ÿ+ÿ8ÿ8ÿBÿ1ÿ$ÿÿëþ½þªþ›þ„þiþkþkþzþwþŠþŠþ~þsþsþ„þþžþ²þÙþÿ=ÿjÿ–ÿ¹ÿÆÿØÿîÿIiˆÀú 7Xjkc ¿¶¾Ø  (.&'KOO`‡šÇù #28>_r—Èï 'BB??75GFW]oZ:+Óùž|lmHÿóÒ­‰vsr}{o„v{“‹}‡¾ÊÞðýü 203-üñßdz¢•‚waiZO><DCW€š¨Ëë7[Œ¹ç0Eet‰‘£±ÃƼ¾¥™‚]4 á®AÉ•^ÔŠPï»zX:%ýÿÚÿ°ÿÿ‰ÿÿrÿtÿrÿ…ÿ“ÿªÿµÿ±ÿ©ÿ¶ÿ¶ÿÊÿÎÿßÿÝÿßÿãÿíÿóÿçÿÖÿÅÿ¹ÿ¨ÿ›ÿ~ÿ`ÿBÿ#ÿÿíþØþ²þ‘þjþPþ-þþæýÈý±ý­ý ýªýý•ýýý|ý…ý’ý§ýºýØýþý$þDþeþ„þ¤þÀþäþÿBÿaÿ‡ÿ¬ÿÎÿûÿ 5E]lz’’Ž—¢’šv_F*êÿÇÿ¥ÿÿkÿSÿ1ÿÿäþ½þþ}þcþWþ;þ7þ%þþþþ þþþþþþ*þ5þEþaþpþ€þþ¡þ¬þ¾þÁþÒþÛþßþéþïþõþÿþüþöþñþÞþÖþÃþ´þ¬þŽþˆþoþaþMþ:þþþøýæýéýÙýÑýÎýÅýÌýÉýÖýÜýÿýþý þ"þ/þ`þyþ—þ­þÖþîþÿ8ÿbÿ‚ÿ¥ÿÈÿêÿ(Do€˜¬°¸±¬©£¡’‰hV@(ìÿÞÿÏÿ¹ÿ¯ÿŸÿ‘ÿŠÿ€ÿ†ÿ|ÿ‚ÿ~ÿŽÿ”ÿ¢ÿ®ÿÐÿÛÿñÿ'BZp„¢¶Éãö (-CGLLFMD<5"óçÎÇ­©–ŠˆwgYRKEIDNNQXao{ƒŒ—«´ÐÜëý&,18570.,ãÕ˹¡•‡{kka]RNQHCE@HPUYc_wu‡Ž—¦¤´»¿ËÌÏÕÔÕÌÏÈ¿½´¯¤œ‹{h\UGA3/*!(("'&209LF^]nx„ˆ š§§´¸ÀÅÆÀÄÄ»¸¬¬œŽŠ|vvaZNI?<3.*)&'#'#))15>AFHOOVXX`jhjipn|n`[YQJD=5+$ ÿÿôÿéÿÜÿÑÿÆÿ¿ÿ¹ÿ°ÿ­ÿžÿÿ˜ÿ’ÿ„ÿƒÿzÿ~ÿ{ÿÿ€ÿ|ÿ|ÿ{ÿxÿuÿtÿzÿuÿyÿ~ÿ€ÿ‚ÿÿ‘ÿ‘ÿŸÿ¨ÿ§ÿ§ÿ¸ÿºÿ´ÿÂÿÆÿÏÿÓÿÚÿÝÿæÿæÿïÿôÿöÿõÿþÿ   ùÿòÿ÷ÿëÿñÿæÿæÿØÿãÿÓÿÖÿ×ÿÎÿÊÿÆÿÈÿ¾ÿÐÿÅÿÊÿÉÿÍÿÑÿÏÿÕÿÙÿÜÿßÿæÿìÿúÿ '%%#! "# ÷ÿùÿîÿíÿìÿéÿâÿäÿãÿíÿæÿêÿòÿôÿõÿñÿùÿ "&0389777-/)'ïÿèÿÝÿÐÿÍÿ½ÿÄÿ¶ÿ¯ÿ¡ÿžÿÿ¢ÿ•ÿ™ÿšÿ ÿ¹ÿ´ÿ±ÿ·ÿ¿ÿ¿ÿÈÿÊÿÝÿêÿñÿýÿþÿ +401,51<69.56,$÷ÿïÿæÿÝÿâÿÝÿÑÿÊÿÊÿËÿÊÿÌÿÏÿÒÿÒÿ×ÿÞÿãÿæÿìÿðÿúÿ $'1/3>5=<@E:UB?72($#þÿñÿñÿæÿëÿâÿãÿÞÿÛÿ×ÿÑÿÙÿ×ÿÝÿÙÿÞÿàÿàÿçÿåÿïÿðÿøÿøÿýÿþÿýÿÿÿ ÿÿùÿõÿùÿóÿëÿçÿèÿçÿçÿáÿÜÿèÿàÿäÿàÿÝÿàÿßÿßÿâÿçÿåÿ÷ÿñÿòÿêÿéÿãÿëÿîÿîÿíÿíÿìÿêÿäÿìÿÞÿåÿàÿàÿßÿØÿÜÿÎÿÓÿÑÿÕÿÑÿÒÿÎÿÒÿÐÿÓÿÒÿÒÿÐÿÚÿØÿÜÿìÿèÿìÿöÿ÷ÿöÿøÿøÿúÿÿÿýÿúÿÿÿôÿòÿíÿéÿßÿÜÿÒÿÏÿÂÿÁÿºÿ¸ÿ±ÿ¨ÿ¦ÿ¡ÿ™ÿ—ÿÿšÿ£ÿšÿ–ÿœÿžÿŸÿœÿ¡ÿ¦ÿªÿ­ÿ²ÿ¼ÿÁÿÂÿËÿÎÿØÿÞÿØÿâÿÝÿãÿäÿèÿæÿâÿãÿÝÿßÿêÿàÿàÿÚÿÑÿÍÿÆÿÄÿ¿ÿÅÿ¾ÿ¶ÿ²ÿ¾ÿ¼ÿ°ÿ¯ÿ©ÿ«ÿ­ÿ«ÿ²ÿ´ÿºÿ³ÿµÿºÿÁÿºÿÄÿÁÿÔÿàÿ×ÿÐÿÖÿÕÿØÿØÿÜÿØÿÛÿÚÿ×ÿÚÿØÿØÿÔÿÔÿÞÿÓÿ×ÿÒÿÒÿÍÿÆÿËÿÆÿÄÿÄÿÅÿÇÿÇÿÈÿÆÿÅÿÁÿÅÿ½ÿÂÿÂÿ¿ÿÂÿÃÿÀÿÅÿ¹ÿ»ÿ¿ÿ¼ÿ¸ÿ¸ÿ®ÿ´ÿ¯ÿ¶ÿ­ÿ´ÿ­ÿ¹ÿ­ÿ³ÿ³ÿ¯ÿ¹ÿ±ÿºÿ¹ÿÀÿÅÿÂÿÊÿÌÿËÿÏÿÒÿÓÿáÿÞÿâÿæÿáÿêÿáÿåÿåÿäÿçÿåÿâÿâÿçÿôÿäÿâÿìÿîÿëÿãÿàÿáÿÞÿÜÿÔÿØÿÚÿÖÿÕÿØÿÕÿÚÿ×ÿÞÿßÿÚÿèÿêÿèÿêÿîÿñÿòÿöÿòÿúÿóÿûÿûÿöÿýÿûÿüÿþÿóÿòÿñÿñÿôÿóÿãÿÞÿÝÿÖÿØÿÎÿÓÿÎÿÏÿÉÿÃÿÆÿÁÿÆÿÃÿÄÿÈÿÈÿÉÿÎÿÏÿÑÿÎÿÖÿØÿ×ÿäÿáÿêÿéÿîÿìÿíÿøÿõÿùÿ÷ÿöÿôÿòÿ÷ÿóÿóÿïÿòÿêÿîÿéÿðÿçÿçÿâÿäÿãÿçÿêÿáÿåÿäÿäÿãÿÛÿæÿÚÿçÿßÿåÿôÿðÿðÿéÿóÿëÿéÿçÿåÿåÿåÿÝÿåÿÞÿáÿÛÿäÿàÿàÿÝÿÝÿÞÿÝÿßÿÝÿÞÿÝÿäÿçÿàÿæÿçÿçÿëÿæÿãÿæÿâÿêÿèÿëÿîÿýÿñÿîÿìÿñÿëÿçÿíÿìÿçÿèÿäÿëÿæÿàÿåÿÞÿæÿÛÿâÿÝÿóÿèÿäÿãÿæÿåÿóÿéÿïÿíÿìÿíÿðÿîÿòÿðÿöÿöÿõÿüÿüÿûÿýÿ ÷ÿþÿüÿ÷ÿðÿðÿìÿíÿéÿæÿíÿæÿãÿßÿßÿéÿØÿØÿÖÿÐÿÎÿÎÿÑÿÓÿÔÿØÿÖÿ×ÿÕÿÓÿÜÿÝÿÙÿÖÿàÿÞÿäÿÝÿÔÿØÿÖÿÜÿÔÿÛÿÚÿßÿÙÿ×ÿ×ÿÕÿÔÿÓÿÕÿÐÿÕÿ×ÿÓÿÛÿÚÿÜÿ×ÿàÿÜÿâÿãÿäÿåÿïÿëÿòÿîÿõÿóÿ þÿÿÿüÿùÿõÿõÿùÿìÿôÿìÿíÿëÿêÿïÿöÿíÿíÿåÿìÿåÿíÿêÿìÿéÿéÿåÿíÿíÿìÿèÿîÿðÿéÿëÿéÿéÿéÿäÿëÿïÿùÿíÿìÿêÿäÿàÿõÿöÿñÿðÿéÿìÿçÿìÿçÿêÿéÿÝÿãÿÝÿáÿéÿëÿãÿéÿêÿíÿæÿèÿæÿåÿìÿâÿéÿåÿéÿçÿêÿèÿçÿåÿåÿèÿçÿêÿæÿìÿéÿæÿéÿèÿäÿãÿæÿæÿéÿèÿèÿæÿåÿâÿìÿðÿíÿçÿçÿíÿõÿúÿîÿóÿóÿòÿõÿ÷ÿöÿùÿöÿ÷ÿþÿôÿúÿòÿüÿùÿüÿñÿøÿðÿóÿôÿóÿùÿïÿïÿèÿðÿæÿêÿåÿäÿáÿèÿáÿêÿæÿÝÿáÿÛÿØÿÒÿÓÿÏÿÐÿÍÿËÿÈÿÈÿÆÿÅÿÇÿÁÿÈÿ¿ÿÂÿ¾ÿÁÿ¾ÿ¼ÿºÿºÿ·ÿ¸ÿ¹ÿ·ÿ³ÿ¿ÿ¹ÿÅÿÉÿÅÿÇÿÁÿÄÿÂÿÏÿÊÿËÿÏÿÉÿÖÿØÿÝÿØÿâÿÔÿÞÿØÿÞÿØÿØÿÚÿàÿÚÿßÿØÿÚÿÝÿÜÿÛÿØÿÜÿÜÿÛÿßÿÞÿÝÿàÿÞÿãÿÜÿÝÿÙÿàÿÛÿßÿÝÿÞÿáÿÞÿÜÿÝÿâÿÜÿâÿÚÿéÿêÿÛÿàÿÚÿÕÿÒÿÖÿÕÿÑÿÍÿÎÿÊÿÈÿÈÿÎÿÈÿÉÿÁÿÀÿ»ÿ¼ÿ¹ÿµÿ¶ÿ²ÿ­ÿ¬ÿ¯ÿ°ÿªÿ§ÿªÿ¬ÿ¨ÿ«ÿ¨ÿ«ÿ«ÿ²ÿ¸ÿ¯ÿ±ÿ±ÿ°ÿ³ÿ¯ÿ³ÿµÿÀÿÃÿÆÿÈÿÍÿÈÿÐÿ×ÿÍÿÕÿÊÿÝÿÙÿßÿÕÿÞÿÛÿÝÿÝÿãÿåÿâÿâÿäÿâÿæÿâÿæÿåÿçÿôÿìÿèÿìÿèÿûÿûÿíÿéÿåÿãÿÝÿàÿêÿçÿßÿáÿÜÿÜÿÛÿØÿØÿ×ÿÔÿÚÿÎÿÙÿÒÿÔÿÚÿÓÿÖÿÝÿßÿÕÿÝÿÙÿÙÿÛÿÕÿÙÿÔÿÕÿàÿåÿÜÿçÿìÿìÿßÿàÿßÿØÿ×ÿÔÿØÿÒÿÖÿÖÿÙÿÐÿÖÿÓÿÔÿÑÿÏÿÏÿÓÿÍÿßÿèÿßÿÝÿÓÿ×ÿÕÿÑÿ×ÿÔÿØÿØÿÖÿÞÿ×ÿÜÿÞÿáÿÞÿãÿåÿëÿèÿäÿíÿáÿêÿäÿìÿåÿèÿçÿíÿæÿãÿãÿãÿäÿãÿãÿÚÿãÿÝÿßÿäÿíÿæÿáÿãÿÞÿßÿÜÿàÿàÿáÿÜÿãÿÛÿâÿÝÿÜÿÜÿßÿÞÿâÿßÿâÿÜÿÜÿÚÿ×ÿÚÿÖÿÚÿÞÿÝÿ×ÿÖÿÎÿÔÿÊÿÕÿÍÿØÿÎÿÓÿÑÿ×ÿãÿîÿÜÿÜÿÔÿÕÿÕÿÕÿ×ÿÓÿÏÿÑÿÎÿÐÿÌÿÍÿÊÿÄÿÊÿ¾ÿÆÿÀÿÒÿÑÿÇÿÀÿ¾ÿ¾ÿ¼ÿÁÿ¸ÿÀÿºÿ¼ÿ¼ÿÂÿÀÿ¾ÿÀÿºÿ¼ÿ½ÿÊÿÀÿÂÿÃÿÁÿÂÿÀÿ¿ÿÇÿ¿ÿÅÿ¿ÿÆÿÄÿ½ÿÀÿ¿ÿÀÿÀÿ½ÿ¿ÿÂÿÁÿ¿ÿ¼ÿ½ÿÂÿ»ÿÀÿºÿ¼ÿ¼ÿµÿºÿ»ÿ³ÿ·ÿ¹ÿ¸ÿ¶ÿ·ÿ±ÿ²ÿ®ÿ©ÿ²ÿ«ÿ¯ÿ²ÿ´ÿ©ÿªÿ¦ÿ¥ÿªÿ¢ÿŸÿ£ÿ¡ÿ¡ÿ›ÿŸÿ—ÿœÿ•ÿ•ÿŽÿ’ÿŒÿ“ÿÿŠÿŠÿŠÿ‹ÿ˜ÿÿ™ÿ”ÿÿ‡ÿƒÿ‹ÿŒÿ‹ÿˆÿˆÿŒÿˆÿŠÿÿÿÿÿ’ÿ‘ÿ—ÿŽÿ™ÿ˜ÿ£ÿ¡ÿ¤ÿ ÿ¡ÿ£ÿ©ÿ¤ÿ¡ÿ¤ÿ¨ÿ£ÿ©ÿ¤ÿ«ÿ¡ÿ«ÿ¢ÿ¦ÿ¥ÿ±ÿ«ÿ¤ÿ­ÿ¬ÿ¡ÿ¦ÿ¤ÿ£ÿ¥ÿ ÿ¢ÿ™ÿÿŸÿÿ›ÿ˜ÿ–ÿœÿ˜ÿ”ÿ˜ÿ•ÿ•ÿ“ÿ‘ÿ”ÿ˜ÿ–ÿ™ÿÿ–ÿšÿ’ÿŠÿ…ÿ‹ÿ€ÿ€ÿÿ|ÿ{ÿ€ÿzÿ}ÿyÿ|ÿwÿ{ÿyÿ|ÿzÿvÿvÿ{ÿ|ÿ„ÿÿwÿoÿpÿfÿjÿYÿWÿUÿJÿ=ÿ/ÿ*ÿ&ÿÿþþòþãþ×þÄþ›þpþCþþéý¾ýqýjýXý5ýýðüúüý—üîûÏûüEüÚüˆýHþæþsÿ…Ãe1»†ÎãÿîÒ]"& L·øcsÿcþˆþ-ÿÿxþ”þªþ¡þ“þªþ þ%ý|ýƒþóþ_ÿßÿéw`ÔBÿÿþ:ÿ…ÿ$ÿíþíþæþBþjýÊüXüyüü¡ü¿ü©ü‚ü(ü÷û£û‘ûäû-ü{ü#üÎú›ùù ùù#ù¼ùÙúýû$ýþ,ÿéÿÀ«µDùÍäT† U33^uÿÉþDþ•ýküöûYüøüRý­ýOþÿ¹ÿ5¥WÒi²•jeôHAHÿŒþ,þÊý8ý’üüüêûþú¥ùVù¿ùúúUúûÍû¼ü0þÅÿga=¿Ôá"!™oaÿFþ¶ü·úƒùÅø^÷]ö¼õõÅõ0öC÷•øú:ûüÜü×ýúþðÿÙUmìEUÿþ’ýÚüüûãúúXú°ùùBùúdúøúDü¶ýãþ±(ðlGž–6i?îéq“Íÿ¥ÿxÿ ÿ€þüýÔýïýþ·ÿ¡Vó»‹ ;;i©mëvâÊ‘„ÿoþ)ýüûTúœùÃø\øøÚ÷ª÷•÷Î÷Jø¥øƒøøø{ùù&øUøxùbú‡úû«û»û ûüý–ý þßþÅÿ‹óPUs‚^ ‚z˜ÈGÀs.NÀŽWâ"Ü ¼„åD]ÀaÔ!$j¿F쮃IÛÿžÿZÿÿ­þþÅþÿÿðþRÿ¯ÿ•ÿÿ¡þ]þ+þöý ýUýýÉüuü9üªûû¤úˆú»ú û+ûZû‰ûüûü*ü<ü’üýühý&þ»þêþ¹þ™þÈþöþÌþ»þ·þ×þÝþ±þBþ•ýýäüßüPüåú8úûÜûÿû‹û½û³ü þùþqÿ…ÿÿÿïuãäèv€€úI…fùoõ³•LÆZ#]÷¦ð!rÙECÞ„E&2íï¶´àÿÿòýýlüEüDügüüwüqü˜üßü[ýÎý)þ…þüþ§ÿæÿÓÿ–ÿ2ÿåþäþÉþxþ1þþÀýRýàü¿üÑüýVý¤ýõýeþßþ]ÿ Ç{øo‚Çð2&Û¤g)矄€P9R:UжÌþ?g]DVkb6ë‹*Ôgùµe ´ÿzÿ3ÿÆþuþ.þþ(þPþSþPþcþsþuþfþnþ]þWþ1þ6þ,þõýŸý‰ý~ýeýýâüÂüÚüíüéüáüýfý‘ý£ýÏýþ=þ¨þÿkÿ™ÿÜÿD”…k‚Î$x†jv±Ñ¢‰† ÈÓÒ²®±¶£¯õ  2agwÇÌÁ£‘W¾ŠjGÅ\—ÿÿ{þ þÖýÚýæýïýüýìýþ7þ;þþþZþ§þÇþÎþÖþ»þzþ2þÛý•ývýhýKýý ý;ý5ýý2ý‡ýãý5þ“þÿ<ÿÿÓÿEÂæ8YfTcpbFEU ¡½ÓŠwªäû1>>hЉ`.gQ÷â-@£¨Ó 8fžã+^n–Ý &o³Õ×`iA2Egb@ >=äÊ#wŒë_Âë.:.ëÕÕæÃœÐ çó>1ðÕÁ«µá´ql€ŒYOtÃ+MaqŠs"§þZá“/ÃGæuè$jÿäþ–þKþ÷ý–ýaý0ýøüü&üÑû ûcû ûÌú³ú«úúdúúšùùjøá÷h÷ ÷Èöžö“öœööVöMöeö”ö«öÊö ÷T÷÷¾÷ò÷øøø2ø:ø*ø3øsø¶øÚøæøöøùùêø´øøvøkøløŒø¹ø÷ø<ù‡ù¹ùÑùàùúFú‹úªúÙú û%û+ûûÓú¼ú¬ú¡úœúžú¸úîú"û6ûIûXûSû;ûûôúðúñúøú û0ûIûXûfû†û–û¥û±ûÛû ü&ü?üUüaüoüpü_üMüGüVüzü›üÓüýcý~ý–ýªýÑýÿý<þ}þ¿þôþ4ÿ”ÿ rÍ&§ U—ÒiÂD{°äR®rþ°]õ^ Á S Ñ - G ƒ 7 Ú @ \ » Xœj6‰ð 6¥Sehˆ›Ëi¬Š“/вq½}âq׃ø^· B Ÿ :P³hþ)ü4ú"ù¥ø?øÔ÷š÷y÷T÷ ÷Åötö ö¢õ`õõ³ôô;ó*òüðÐï½îßíˆí{í»íýí îîî îî>îÐîÍï1ñÐòJôàõ†÷Lùâú6ü†ýåþ7½YÀúÿMxÑUþ{ ¡.¢ x Ó  F l † q ; ì ’ - ™Ðÿ©n-òÿ¾þ™ýžü½ûìúHú¶ùSùùîø¾øøYøøÅ÷q÷)÷ÆöpöGöö¯õ:õõåô±ôsôCô-ô'ô ôÝó€óýò¬òjò=òûñÐñâñJòóèó¨ô‰õªöé÷åøšùYúþú’ûüüÝü-ý]ývýzýjýYýQýLýRýfýzý‡ý½ý÷ýþþ5þhþ‚þnþvþ¹þ!ÿxÿ·ÿ÷ÿ9!Öÿeÿùþ‚þÚýý]üµûüú0úŽù)ùÛø”øoøiøzø•ø´øùfùÌù6ú©úû‚ûôûFüüý|ýÑýþvþíþKÿˆÿ®ÿÇÿÁÿÀÿàÿ<Šº˜mF$ôÝ͵} d [ ® H áƒ:½>ߌQ®2©3‚ðKˆûKµS¼÷}¶‘.E޾Ý{ G þ “  ãÞÿ»ý‡ûÀù;øüö˜õKôóò|ñöïWîÅìŽëÈêgê.êMêê»êwêÃéýèøççZææTæåæßçëèêZëyì~í„îÜï`ñêò—ôsö{øKúüƒýÿþOa“¾}Ë& A e % ¢ ã ö ü þ  1 M ¢ ê .b‘AÙ U ¹ # F i ‡O†šÿ½ýšü–û˜ú«ùÞøø÷öõôcó¼òIò òòRò…ò±òìò4ó7ó6ó2óXó“óæóMôÐôdõñõmöÇö7÷´÷Løêøµù¯úªû¬üŽý€þ[ÿÓhênÝ/|Á "⑯<Â^ìÿ˜ÿLÿíþ—þsþFþþýýÆüjüñû¥û]ûû¿ú3ú¤ùùdø£÷÷öuöö¤õ[õ@õ8õõßô¶ô¤ô ô•ô¨ôëô\õºõ1ö¸ö:÷½÷0øŸø ùlùÐù7ú“úéúAû ûõû.ü`ü–üçü7ýžý,þðþ×ÿ» –’Zñ¢Srèx › û Y ·  , U ‹ Ð  I š û _ ° æ J¤ZÅu2ÔIì÷¼-mï~ªƒia†éSxSö’Ræ B M ”·íñO¿ÿQý^ûQù÷çõ{ô(óÕñ½ðµïÎîÚíížì7ììýëì ìHìZì,ìþëñëøëì]ìíòíïžð3ò»ó/õoö|÷Rø:ù/úû3ü~ýÿ}Ú:s‰qi}” ¥ ½ · ¥ D£´s+ð º ¯ ¬ ^  ’ æ  ù ̰ˆ^9 õÍÿ®þ›ý‹ütûuúœùÛø5øm÷¶ö-ö—õýôRôãóó#óÚò½òÛòùò(óyóëóoôìô_õêõ…ö3÷Ã÷_ø2ùúþúËû²ü¨ýƒþKÿîÿ§]®Cê|õKŽÓþ$܃ q“¤ÊjÜÿfÿÿ®þ6þ…ýÔüüUû„úÎù<ùÉøWøæ÷Š÷K÷äöaöÞõ{õ3õüôçôüôAõ}õ—õ õ²õ´õ¹õšõ·õ özöüöf÷"øËøeùÕù+ú¢úÿú.ûcû¨û.ü‘üÜüývýßýþýþ#þeþªþÖþ)ÿ‹ÿJj—Íî6µ>Æ_ÃZêDí‚õ~ õ 9 L Y R [ € Á  …  › ! ¤ :¿{ñê÷Æz t‡—¯ÖüÛªvÞ?âìñ⌠¾ ‡ / L.‘DÝÿþÄûžùD÷|õó®ñgðhïàîîVíêì5ì£ëèê}êxêŠêòêPë ì˜ìòìíõìùì@íÈí·îðêñÕó·õs÷Öø"úûçûàü"þ¯ÿW=(ñ™Å Ø ¾ ¤ t @3*,çIdHÖ'Y§ví U Õ  :  Ù™Eú¢^5áÿ£þWýüßú“ùnøS÷`ö†õ¨ô ôVóàògòìñ¦ñlñXñ1ñ"ñUñ„ñäñKòãò¹óŒôsõWöo÷Žø‘ù’ú¢ûµüÑýÁþËÿÛýê¿ o1ÇZð€üi ¿   È ? äˆ$ÎpîHhc)úͪÿšþ§ýÒüü'û7úBùNøa÷¨ö$ö¿õ{õ2õüô¹ôoô ô§óCóóò°ò­òÙò/ó’óðólôäôSõ®õönöÛöY÷ã÷™øNùòùzúû¾û\üãükýÿýœþ$ÿ›ÿ’á<ccL0'8CTxŸÂ¶®¢ž“}‰®éc¼J£ xæd Ù‹ŽóE w ¡ Ç î d å Š C Õ ³gàžÄÇÒæâÊT¶Ü¾¡[î{ù‚Ì3Õ`Æg k  Tqg>òþnü™ùÆö,ô.òtðïôíOíàìcìÔë(ë|êÌé'éöèDé¶é*êŸê<ë·ëèëÞëÏëìËìÂí*ïúð ó>õ+÷ØølúËûý>þ—ÿ%*\ y  ~¯Á}%Þ¤eí*#Ë!7 üéþ7 _ z z C çdÎ9‚àÿOþÛü~û%úØø˜÷]ö7õ ô óò4ñgðÍïgïïÓî©î¢î²îÖîï\ïéïžð|ñ‚ò½ó)õ™öü÷GùšúìûýYþƒÿºö.f“­™o2 ô  u Ü 4 i v f J ø u â V Ä > ›ýl¼øá€ç1ÿ”ýü£ú>ù ø÷3öBõ<ôZó€òÆñ@ñæðÅðâð ñ&ñ8ñ%ñ ñìðéð"ñtñïñ‹ò^ó>ôõÍõ öd÷ø÷^øÈøeù7úûòûÉü£ýrþ3ÿÐÿu2·0©/¬ô0=3 ÎOõ¡OÛ±}2ø¤7¿ÿZÿÿÎþÈþ×þõþÿ<ÿpÿÄÿV¡¿`>0ÊNÂ4vÍ7 ÿ   â “5×VUo¨Y“lÿSœ±Ž'œ6±3§œ2‹á<z x ” ÈáÛaðþxüšù©öËóPñ7ï/í©ë€êøéÁé^é!éÙè™èTèöçÔçÎçè«è_éYêë¬ëìŒì&íèíäîVð+òQô‡ö¶øÁú´üOþ¯ÿ‹=ý P “|Y5ìaÒD[T…—RÚRÏ_  Ì ¯ z;ËH›Õùþ"ýlûÙù_ø÷Îõ¿ôÇóÒòèñõðð]ï¥îî¬ífíHíEíjí­íõíiîóî£ï„ðñîò^ô ö±÷nùû¯ü>þ°ÿ o·F~ºë ø æ œ @ ¨ ö *BD%ò   ; «  0 Q u ˜ÀÛÿ16+û£ÿþBüqú´ø!÷¦õRô%ó?ò‡ñÝð;ðˆïíîcîîÿíîqîâîsïð˜ðñ‚ñññiòÿòÚóåôöN÷ø²ù­ú†ûCüÚüHý»ý;þÿÒÿ˜^»>¸g–ÍJw~vF«2¬‡ó‡+ÇVÒÿHÿ¶þþ†ýýüüðûþû"üEüiü¥üúüZýÀý0þ¿þiÿTp£ß ;J!Ã[ ÷ “ 7  % #å—YGúæf«p–C½ Bê4J›>r~L¼Ò ê … è¶vbþûøuõ‡òÏïwíhëé,èvçxçççdç/ççèæÆæËæÎæ*ç¾çÌèûéþêÂëOìíÝí!ï ðhòMôxö·øûRý4ÿÄ-¨bZ^ q ™ á &ÃÖÒ*/ûŒò8EŽÍþD ¬ 9 Ò\Ì1ŒÈôþöü û9ùš÷)öÁô‚ótò€ñ¶ðÿïZï¦îöíUíÉìfì&ìöëùë$ì‰ìíÍí©î”ï±ðò„ó)õëöºø‹útüWþ#ÎL»nÙ 7 ` u €X]rZ&߈€Ü ) k ‰ u _E<' 纀?ÿÝýjüÍúùG÷‹õô¢òlñQð}ïÖîrîùí…íí¼ì—ììÕì=íàí•îxïnðlñ@òóæóÑôÈõÏöú÷Où’ú½ûãüçýÜþ†ÿ ·o݉•ûBSA'èÀ™=ÖP´ L†çbÒÿ0ÿŒþõý`ýÃüü~ûüú„ú3úú&ú^ú§úêú'ûuûçûYüÂü]ýþÓþÍÿqà-r·ôê Ç ” b 0 .`sgFYrgam ÆÁ±qüÊO‹„GùÎÐÀ^ªÌ¸ % qÎ\ÿ³üÙù÷>ôñ2îæëôé9è°æâå¥åžå³å»åìåáå·å£å÷åwæç~çŸèêvë–ì¤íÇîèï5ñ­òôÂö ù'ûaýÿ€oì“p „ ¾ !ó€Š IZv\åÕ—}¢ÂÙ  P ¤ö75-þ+ü%ú*ø\öÆôvóFò>ñað|ï»î î£í-í²ìOììêëëëîë0ìŒìíÈí¢î»ï ñgòãó„õW÷-ùûÓü©þg¹XÜ[Õ M ¬ ö ) º1s}BæU·ð(  ò Æ “_ΈAï‡ÿþ¢ü1û¯ù#ørö¿ô/óÛñ´ð£ïÆîî í4íÑì…ìXì8ì ìDì©ì>íëíµî¦ï¨ðËñåòôõö"÷bø»ùûOü–ýÅþêÿÙ¥O×mý¯b÷pâ'XN=Ôv5Ñp /²HxªúÿPÿ³þþZý¹ü üSûœú ú”ù&ùÎø»øÓø ù:ù…ùÕùDú¯úûtûüû³ü…ýrþÿ¾&§˜ê 5 / *  ;Ugtx€‡lSV}pO'mm2´åž”‰_ó”1Tý ˜ n®E¢ýëú÷÷õ]òsï®ìhê‹è,çðåIåBådååoå…å«å­å©åÃåDæçègé×êRì•í»îíï:ñšò0ô$ö<ørúžüÕþíÉW¿AüÚ à ð¸÷·:0çý[f#©ó   9 l®Ûø÷ÿüýìûïùÞ÷òõ@ôÇò“ñuðïÏî0î£í0íÅìuì)ìúë×ëÌëúëAì¦ìCíî ï ðUñ­ò'ôÆõs÷Cù ûÇü~þQÇf“ ‘ Ù G=Ë^°³suÂäðâ Î ­ Y ¸Xü›$²ÿ?þÊüXûæùrøÛö-õ‹ó&òüðéïï<îÀíLí÷ì¤ìeì(ìììHìÁìdí#îûîìïîðññóôüôöV÷Èø?úœûäü'þMÿ\KÊfà¢E­W{sUÄp9§-ž„ë PƒäÿTÿ²þòý;ýüÞû*û„úú›ù/ùÍø‹ønøpøkøxø‰øÂø ùuùúùŸú<ûÿûâüþ ÿGxÙYÏ-zÀ ñ õ Ô Ç Ò 0DhN í·{&÷ÃXÛ1YYtpg#½uAà6DI  òIŠþü~ù÷¼ôòMï¹ìTêqèÙæ­å$åãäçä!åråååÿå"æBæ æLç0èbéÚêWì¯íýîIð“ñ—òØóEõ2÷Lùoû­ýãÿüØjÜ7} ö ” z`0âFa]r7àvîg£¼Q½ïó ò Ýòh³äÿþ!üCúmø§öéô<ó½ñ‡ð‘ïÙî;îÑí„íBííÉì©ìì•ìËì í¹íiî!ïöïóðòDólôÀõ÷øúÅû„ýPÿÆqyà 4 V y ŠˆWâ9Fª Is © ¥ Œ L ˜$²<Éjÿüý­üpû"ú§ø÷rõô½òxñdðŽïïîhî î¹íní íÝì·ì¼ìãì3í°íHîüî­ï{ðPñ/òòò»óÓôö…÷Ýø>úžûðü þ3ÿä ]&ìšBË7·Ì¹QÅm«0±*ªe¬›ÿÿ‰þõý]ýÍü0üûýú\úÀù5ùáø¥øøcøTø^øø‘ø°øùUùGùkùuúü‡ý†þXÿ õ:¼?ÖoÉ Ù ¶ C Þ À zž@•4lvx>‹ºäl£$¾øñª9²éý þ  YFñ¯ÿýôù4÷œôMò ðôísìë²é+èÓææ£åsåuåãå–æKçÿçÐè›égêëÜëÈì«ížî°ï ñ‘ò-ôÓõ÷*ù»ú@üþõÿÛ—J¶= §  ZšÇD@áM‚‡.ŸÕΣHãj Æ ÿ .n¸2|ÿÅý3üúù†÷ùõwô"óòñQð–ïï¤îeî,îîî î2înîÇî9ï¹ïTðèð§ñvò^ómô‰õíötøÿù¯û[ýÿž[¤÷; a T 0 æ sÕÿÔ† Ì ò ï Ì ›\ ËZèÿ³þtýùûfúãøx÷%öáôÅóÕòòWñµð&ð¢ï1ïÜî…î^î[î}î°îäî ïSï²ïððòðžñzò“óÍô öP÷”øÕùûüýøýõþäÿΣs2ÎW¿jžÂÇȼ˜Wø~ œ€Ý_óŒ*ÂÿcÿéþZþ¾ý'ýüü‹ûûÅúvúEúú÷ù½ùžù±ùÔùôùúVúÈúCûÒûxüCý3þ ÿ÷ÿÿD¶Ñçìݺ Ÿ £ – | «Ãµ`8 úÑ #²eEã‡HÙ  ò¾9¼ " þ XŽu?8þ üñù†÷Dõ%óêðïbí&ìëžé¥èñçÄçšç{çáçgèéªé_ê6ëäë`ìíîSïhðŒñ½ò+ô›õ;÷×ønúôûWýíþ™HÌ>»,‰ ¾ Ç Ö Â Æº xKdIö[€sP , ä Š uøzöQ±þ ýŸû,ú½øz÷AöõÞóâòò8ñ‚ððÄï¡ï“ï˜ï¶ïñï7ðxðÓðñ†ñïñòSó1ô2õJöx÷Îøú~ûÇü"þpÿ°K’Ð÷õ¼ d ç [ ¯ î   ÷ š % ” ä óÿøóßÊŦ]âþoý'üçú¨ùeøW÷~ö¹õðô.ôyóâòQòËñ^ñññðÇð˜ðoðMð6ð+ð9ðQð£ð3ñâñ§òmó7ôõüõéöß÷ÆøÁù­ú­ûŸüžýˆþTÿ§Pß}ñj­ö+OM沂1ä’\$Ø‚Døš—ÿ9ÿÖþeþßýoý$ýÝüƒü&üÒûœûûjûlûuûšûÄûùûAü¢ü%ý¸ýQþçþ”ÿnD¹c/úºCì»­‰ N 1 : K &ë·¦„ ³S!ìyê^êFQ(ÿì åâÅ¢X·Þ  J •ÐP“Úÿ&þdü¹úùøP÷±õûóJò°ðKïîËìÁëëë ëëWëéë“ì6ííàí4îîÿî“ïmðRñEòJó†ôÈõ÷fø¿ù:û¯üFþ÷ÿ¹5Ëñ˜ V .   ê ´L¤±Œj• ° Î Û ñ ïÞµzGú¸‡ÿmþjýbü4û úîøÍ÷©ö‘õ¡ôÓó1ó¹òyòiò[òXò_òWòbò[òpò òØò@ó½óƒô\õ=ö+÷<øiù›ú¾ûéü(þ_ÿ‰¤±´Eé|õhÌ/¾ëòÔ} d¦ÐÔ¯€r„ÿ˜þ®ýÙü*ünûªúÔùùYø”÷Õö8ö£õ õPôóóŸò@òÝñ¥ñ£ñ¹ñÙñ(ò”ò óaóÐó]ôóôˆõ ö¥ö]÷"øúøÒù˜úCûÚû„ü@ýçý…þÿ§ÿŽç)S`ˆ¼ëûöû)D>0ÜŒ:â–Jûÿ¯ÿkÿ3ÿòþ£þaþDþ.þþ þúý"þBþeþŒþÖþ2ÿšÿaÒrÁ#ŒvàS¿)—±?Ù†T  Ø œ y O î lï!£1×VÂ<ÚYŽ©®›X§Ùº1rÊ G šÒ€,ÂÿIþýûóùøœ÷…öõ¡óžòéñóðêïï¨îî—î÷îƒï ðUð©ðñMñYñAñaññ0òÓòóôzõgöƒ÷¹øúPûžüþ—ÿ ‚µµ@ýă4 ß ž m ÿ W z ` ú i È ' v “¬Ëÿ1N³óJ¡ÿéþþ2ýNü]ûcúrùø¹÷÷köùõõ&õ¾ôwôHô5ôôô9ôaôƒô½ô õuõêõŠöT÷1ø/ù6únûü“ýŽþyÿS©:¾9¡TŸÆý./ÜuÐ ^¬ý\Éÿ`ÿÿþþ'þ³ý$ýqüÏû+ûŽúÙùùløë÷a÷ÙöZö ö³õ_õõõõ4õKõ~õ±õíõö,ö=ö2öUö˜öèöP÷È÷aøù¢ù7úÍúMû²ûühüÂüýeý¬ýþMþœþßþ+ÿNÿoÿ ÿäÿP‡·ÛÝêüôåÐè9T‰¼í1apbGj,(n j?LÔ‰°ÕÚ ²})+PuS-zÔl Î ã  Á – [  , ¸“ü î}«Ú Þ6ö,«ÊÜí æ f í jêŸlÒåþKý„û ú ùë÷%÷Šö®õòô†ôEôô¸ó’óœóŠóXóhó©óÎóÏóÏóåóïóóóôTô¬ôßô8õ»õ‹öF÷ç÷Ûø9ú¦ûÎü´ýÌþíÿ”¨ÆwúÛà€Á&œÁª ­~*ÍRÅ~È!yÛ;ËgÖ9µÿ\ÿÎþôý ý{üäû!ûvúäùHù²ø>øö÷œ÷I÷÷Òö¦ödöEöJömö©öæö9÷Œ÷ì÷YøÒøwùúÊúkû7üþü±ý9þ¶þ"ÿ’ÿèÿBˆ³ÏãÏ‹Z'ôÿ¥ÿVÿ)ÿ ÿÐþdþÏýKýöüÔü¶ü~üUüQüUü‚ü’ü‰ü]üüÝûÆûšûdû6ûþúÅú‹ú>úïù•ù:ùöø½øªø•ø‘ø’øøŽø®øÈøÇøÙøøø!ùZùùÏùúbú–ú»úæú!ûXû[ûRû~û³ûçûüIü”üÎüüü0ýxý×ý?þºþ=ÿ¯ÿ2¸RÚC³ ‚Èdº;]{hGüÐL#$ ÞÐÞð *lÐ=•ôU Èõ2hx„´ÑÕÔú0d‚· W © n Ú l  Û  P ¬ I/% ˜ « z 4 ¹(¥Bá{!ÿ þ#ý)ü#ûBúÏùùOù_ù®ùùùúàùÀù¨ùrù/ù÷ø ùù"ùùçøÊøŒø9øó÷ô÷ø ø/ø øù‡ùàù\úû¬ûYü ýßýÇþ°ÿ‹Tøg¯Ýüóôîæ˜<Û`ì‚A¼ÿdÿÿºþlþ8þ þæýÈýšý‚ývýcý;ýýèüÙü»ü’ümüEüüíûÐû¬û’ûhûaûcû`ûhû€û©ûÜûü>ütü¢üÙüý=ýsý‘ý´ýÐýÔý®ý_ýýÐüŒü>üßû§ûpûEû%û3ûCûaûaûyû¡ûÖûñû üHüpü”ü¯ü×üãüâüÍüàüáüéüóüý*ýDýMýYýQýUý=ý/ý ýýüüîüãü×üÕüÍüÀü±ü‰ü\ü8ü üÜû¢û~ûmûRû4ûûúúàúæúîúúúû?ûŠûÐûüPü§ü÷ü;ý|ýÌý-þ‚þÎþ(ÿsÿËÿtµê Kx¬ËM‘Ë;r–ªÈëBj·äðEk‚»ú(:De”¶·žž¥«ÅMšÞ KhU2<m›¾ P Á Ï ê  ÷  H “ Ü ; P H  z à / zÍLZfƒÏ4~çn·ÿ4ÿ¨þþý0ýÁü|ü*üÉûWûöú®úbúúJùNø\÷¦ö[ö.öögöQ÷ÊøúùÍúWû÷ûªü?ýëýÆþäÿæÁ}Yð€Áÿ¬ÿÛÿBHpÿxþ’ýý&ý\ý«ýþþúþÿÿþ¢þRþ÷ýÆý¾ýÌýÌý©ýkýýÄü@ü™ûÉú'úÀùšù©ù×ùúWú¤úÞúåúØúÉúÀúÎúÓúñúû#ûû û4ûTûnû|û–ûÖûü~üÑü!ýjýŠý ý³ý·ý²ýŒý…ýýÌýÚýñýþ%þ þþ þþ þõýÕýÔýÏýÄý½ýÍýÈý±ý²ý¸ýºý±ý£ýý›ý•ýxýSý1ý÷ü¬ü„ürüXü2üü+ü3ü9ü;üQüeütü…ü˜ü½üÒüëüý<ýiýˆý°ýÛýúý%þTþzþ¥þÝþÿ>ÿyÿ¨ÿåÿ D‡Ð :r±â6X~—Áñ&4^w~}“Æô"Gu†¡¹ÊÞÿ%@@:-L{—¨Äò%OišÃò F‚»¼¾ÌäåÄ£¤‚3!c»È·®ÎôU¦Õô Y € m " ¼ 2"Ù¡Fó¶ÿÐþ þKý¼üPüüïûÚûÖûéûüXü¯üýtý²ýÎý´ýuýQý)ýòüµüžü«ü¸üüüNüü½ûuû9ûû'ûTû˜ûõûmüý‰ýúýFþ†þÁþõþ*ÿ[ÿˆÿ›ÿœÿyÿ4ÿÒþ^þÒýHý½üQüáûbûìúiúôù®ùuùOùQù^ù“ùÞùPúžú÷ú'ûTûdû]ûFû-ûûû1ûeû™û¨û±û°û¶ûÌûäûü)üMü‹üÃüòüý$ý7ýUý]ýlý‹ý–ý»ýãýþVþƒþzþlþ;þ$þ þþëýëýåýåýîýëýêýæýîýøýþþ#þ0þCþUþƒþ–þ¬þ¨þ»þÀþÞþøþ"ÿRÿ|ÿªÿËÿÜÿåÿäÿÖÿËÿÉÿËÿÌÿÊÿËÿØÿäÿöÿ &5?Zglu„ž©¾ËÙçÿ"2DJ[tŸ¸Êãô 2TwŒ¾ïïîèÛÌÌÔÓÖàñìô @TWq‘Íëôó#1GSQFVZY>6Qkv§ÃÛÜóöÿ ,7LE4&22%ýÝĪ’aS3üÈ¢…P#ÿÖ¢z<ÿË‘1Ú~E»ÿnÿ%ÿÿäþ¶þþlþYþLþAþFþTþcþqþjþxþ™þµþªþ“þŠþmþXþ4þþêýºý…ýeýLý ýùüËü°ü¨ü¡üü~üjü]üEü/üüÝû©ûwû-ûáú™ú`ú(úñùÞùøù4úuú¨úøúZûÆûüpüÁüýcý ýÊýüýþ(þþþçý³ýýOý/ý ýëüÝü×üÎü¿ü¬ü¯ü½üÊüÙüðü ý'ýAýOýKýVýWýUýLý=ý?ý1ý4ý8ýEýGý^ýhý…ý­ýáýþIþ”þåþ9ÿƒÿÕÿ_Õù5FQQOLG:4*"*02ESZdieQ;*úÚ¸fJ"÷ÿàÿÆÿ¸ÿÅÿðÿ 0[ŠÀÿ DbxŠ¡¯½·¯Ÿ‘rfZVPIR\mqt}’¬¼ÐÔêù&*96>FNJG2úéÛÐÕÕßãíùøù *(-7>B.&%2-2Oe…˜¨¶ÃÇÒÞòéáçò÷óÞÕÝâîååÜÊÄÁ×ÐÒÒÕèìâͲ˜yhCáÆ•jBóÀ”r\C' îÿÛÿ¸ÿªÿŒÿÿ`ÿSÿCÿ-ÿÿãþÊþ¨þ“þdþTþ:þ"þþ÷ýüýþðýìý÷ýþþøýúý þ!þ.þ-þ(þ;þJþKþSþCþ>þ7þ3þ'þ,þþþþþõýîýãýèýÕýÊýÐýåýñýòýþý þþ þþ þþþ þþþþ þÿýùýþþþþþ.þ@þZþ~þšþ²þãþÿ0ÿ[ÿuÿŸÿ·ÿÙÿðÿ,>H_iy‹©¿ËÓÞåîú),?KS[UM@.%ü寒g7íÿÏÿ±ÿšÿ”ÿ”ÿŽÿ“ÿ£ÿ¾ÿÔÿÿÿ(Q{ŸÌä27=1+ÿ䯩‰t^OEH@S\dmu~Š”šª®·©§š’~eQ8" &:C_o†·àñ &+"# ëÕº¬—š„ˆ…ƒ‡¸Óî0@hx”ž­¯´¾¿ÑÔÝáÝÞÍȸ´œ›”“—›¥¨±ÅÐÔÖÞÕʼ­‘jM'âÍ®“fT@CKB:=ENeabWQDA'÷ÿâÿÐÿ¼ÿ¤ÿ‘ÿ•ÿ†ÿ~ÿ‰ÿ˜ÿ¤ÿ³ÿ«ÿµÿÃÿÉÿÏÿÔÿÌÿÈÿÁÿ´ÿ«ÿžÿŠÿ|ÿcÿSÿCÿ-ÿ ÿÿ ÿÿÿ ÿÿÿÿ.ÿ3ÿKÿSÿfÿmÿÿƒÿÿ™ÿ¡ÿ¡ÿ­ÿ§ÿ³ÿ³ÿªÿ©ÿªÿ®ÿ­ÿ½ÿÀÿÄÿËÿÖÿçÿîÿÿÿ !/JTfcxzŽ•”¦°¼½¿ÄÜÙØÕÚÚÜßâàÞÙÐÊÈÃǶ´©ž‘‰‡|mnkkmmptopjeRQKG=76./'$#!',02@9@?FNROMC;4()!(26Jiru}•‹„‚}ml`QQI:/,',8=OSft|Œ¢¬·ÅÊ×Üøïõôïÿþ,+/38AGKSZ[WFC620 úýïìëãëîìø÷ÿýüüùõøñóúîåÝÒÄö¼´°¯«¬¢¡womhbXKGBJEFFTSfgxv~~†„†€{xsia\MH=;2:.98D?GLQ]`htˆ‹}rnjb\`aURRLPIQVW`dmo|}‹ˆ”——“’Œ„€wrnjinrrmsst~y…†‰‡ŽŽœ’‹‹€mfRVEB;(  ýÿýÿòÿòÿðÿïÿæÿâÿèÿåÿÞÿÚÿ×ÿÒÿÒÿÏÿÖÿÑÿÓÿßÿÚÿàÿÜÿëÿêÿòÿýÿýÿ      $) !!& ((,1.4346@F>JDMIPKNOR\Q]]i]ggffbiccbXZPMF??39;411/6/:49364197C18,A3*!/""$ !&"'&&%%$)/-*948A><:53..0/*)%!'"&(/'&&(+(%46145866;@9B<BBCKLFNMKGRLQMPROLSKH?GAD?;@77:;7784>2+()"'5,"   þÿùÿþÿúÿýÿûÿúÿ÷ÿÿÿùÿ *0*$)-102#       ÿÿüÿûÿ ýÿÿÿÿÿþÿÿÿýÿÿÿÿÿúÿûÿ÷ÿþÿøÿüÿÿÿùÿþÿïÿýÿïÿùÿîÿ÷ÿïÿõÿîÿøÿîÿöÿðÿ÷ÿïÿóÿíÿòÿñÿóÿéÿóÿíÿñÿñÿèÿìÿåÿäÿÜÿßÿÙÿÛÿÓÿÒÿÖÿÑÿÐÿËÿÆÿÇÿÆÿÇÿÃÿÈÿØÿÎÿÆÿÃÿÃÿ¿ÿÃÿÆÿÃÿÂÿÅÿÃÿÃÿÆÿÇÿÉÿÈÿËÿÐÿÒÿÊÿÅÿÃÿÃÿÅÿÃÿÆÿÅÿÇÿÄÿ½ÿÁÿÂÿÄÿÂÿ½ÿ½ÿ¼ÿÃÿÄÿ¼ÿ»ÿÀÿ»ÿ¸ÿºÿ®ÿ²ÿ°ÿªÿ¯ÿ¬ÿ­ÿ«ÿ°ÿ°ÿ°ÿ¯ÿµÿºÿ¯ÿ´ÿµÿ·ÿ²ÿ¾ÿÁÿÔÿÖÿÉÿÐÿÌÿÎÿÇÿÍÿÏÿÊÿÊÿÍÿÉÿÎÿÐÿÎÿÌÿÍÿÎÿÛÿàÿÑÿÑÿÌÿÇÿËÿÄÿÅÿÉÿÀÿËÿ¿ÿÂÿ½ÿ»ÿ¸ÿ¼ÿ²ÿ´ÿµÿ«ÿ³ÿ¨ÿ²ÿºÿ»ÿ©ÿªÿ§ÿ©ÿ ÿŸÿžÿžÿ ÿ£ÿ°ÿ£ÿ©ÿ§ÿ®ÿ¥ÿ§ÿ¦ÿ¢ÿ ÿ©ÿ£ÿ¡ÿžÿŸÿÿ¡ÿ ÿ¥ÿ¬ÿ¥ÿ¦ÿÿ ÿ¦ÿ§ÿ¥ÿ¡ÿ¡ÿžÿžÿ¡ÿœÿ¤ÿ¥ÿ²ÿ¬ÿ°ÿªÿ­ÿ®ÿ±ÿ®ÿ¼ÿÀÿ¹ÿºÿ¯ÿ¼ÿ¹ÿÀÿµÿ¹ÿ·ÿ±ÿºÿ¸ÿÃÿ¸ÿ¼ÿ´ÿ¶ÿ»ÿ²ÿªÿ¤ÿ¤ÿŸÿžÿ¡ÿ¨ÿ¨ÿ¥ÿŸÿ¥ÿ¥ÿ­ÿšÿžÿ›ÿ ÿªÿœÿœÿšÿ˜ÿ”ÿšÿÿ¡ÿœÿ ÿ”ÿ˜ÿ—ÿŽÿ”ÿ”ÿ“ÿÿÿÿ‘ÿÿ•ÿÿÿÿÿ‹ÿ‰ÿ‹ÿÿ‡ÿ•ÿ§ÿ›ÿ™ÿ”ÿ—ÿ–ÿ”ÿ–ÿ‘ÿÿ•ÿšÿ—ÿœÿœÿ¡ÿ ÿ¡ÿ¢ÿšÿ¢ÿžÿžÿ›ÿ•ÿšÿ’ÿ˜ÿŽÿ’ÿÿ‹ÿ‡ÿŠÿ‚ÿˆÿ„ÿ~ÿ‡ÿ‹ÿ’ÿƒÿˆÿŠÿŒÿ‡ÿˆÿ‚ÿƒÿ€ÿ„ÿ‡ÿŠÿŒÿÿ‡ÿ”ÿÿÿÿ‹ÿ“ÿ›ÿšÿÿÿ‰ÿŒÿ’ÿ‘ÿŽÿÿ‹ÿˆÿŠÿ…ÿ‰ÿ„ÿ…ÿ†ÿ€ÿ‰ÿ{ÿÿxÿzÿÿÿ|ÿÿvÿyÿrÿtÿvÿqÿrÿlÿoÿkÿmÿmÿhÿiÿhÿeÿgÿ`ÿgÿiÿaÿiÿhÿpÿiÿlÿmÿlÿtÿoÿtÿrÿpÿoÿlÿpÿjÿjÿkÿiÿmÿnÿlÿpÿhÿkÿfÿjÿjÿcÿfÿeÿcÿdÿ`ÿeÿbÿiÿcÿnÿjÿeÿbÿiÿeÿcÿiÿtÿqÿbÿ_ÿ`ÿYÿ]ÿ[ÿWÿWÿUÿTÿVÿZÿ]ÿ]ÿ]ÿYÿbÿfÿ[ÿZÿXÿWÿZÿVÿVÿVÿ^ÿUÿQÿPÿKÿRÿCÿVÿPÿEÿDÿAÿHÿWÿRÿLÿKÿKÿMÿNÿPÿQÿ^ÿhÿcÿhÿjÿbÿgÿmÿdÿ`ÿ\ÿ\ÿVÿZÿTÿQÿVÿWÿPÿVÿRÿPÿOÿPÿPÿSÿKÿ\ÿZÿYÿZÿVÿWÿWÿVÿVÿWÿWÿXÿZÿXÿ^ÿcÿ_ÿTÿWÿQÿUÿUÿ`ÿcÿqÿbÿWÿTÿMÿZÿUÿOÿSÿRÿTÿNÿVÿOÿQÿUÿ]ÿYÿcÿ]ÿaÿ]ÿ\ÿeÿ_ÿaÿ^ÿaÿ`ÿ`ÿ_ÿ`ÿmÿrÿlÿbÿdÿ_ÿaÿ^ÿ`ÿ^ÿcÿaÿcÿkÿqÿpÿlÿoÿvÿ|ÿmÿnÿoÿsÿ`ÿjÿ^ÿ\ÿUÿXÿSÿ[ÿUÿbÿYÿSÿVÿRÿWÿUÿ^ÿXÿZÿXÿVÿ^ÿ`ÿlÿeÿlÿkÿpÿvÿƒÿ‚ÿ{ÿ†ÿwÿ‚ÿÿÿ‚ÿÿ|ÿ€ÿÿxÿxÿ{ÿ|ÿ}ÿwÿyÿ‚ÿxÿ„ÿÿ‚ÿ~ÿÿ}ÿÿxÿyÿxÿ}ÿvÿ{ÿtÿ{ÿÿ~ÿvÿvÿuÿxÿsÿrÿzÿ{ÿ~ÿtÿÿ{ÿ‚ÿƒÿ~ÿ„ÿ€ÿ…ÿ‡ÿÿ†ÿÿ‚ÿ€ÿÿ}ÿzÿ{ÿ~ÿ}ÿ|ÿ‚ÿ‚ÿ„ÿ…ÿ‰ÿ€ÿ‚ÿ†ÿ…ÿˆÿŽÿÿ‘ÿ’ÿ“ÿ˜ÿ’ÿ”ÿ—ÿžÿšÿœÿŸÿ—ÿ£ÿ–ÿ¢ÿ–ÿ ÿÿ•ÿ•ÿÿ‹ÿ†ÿ…ÿÿÿzÿ|ÿuÿuÿnÿkÿqÿkÿnÿmÿpÿsÿtÿxÿrÿnÿuÿqÿkÿkÿkÿhÿkÿhÿfÿgÿhÿfÿjÿrÿrÿzÿzÿ~ÿ…ÿ‹ÿŒÿ‰ÿ‹ÿŽÿ‘ÿ—ÿ™ÿÿžÿ˜ÿ¡ÿŸÿžÿ‘ÿ’ÿ’ÿŽÿÿ‡ÿˆÿˆÿŒÿÿÿÿ‘ÿ—ÿ–ÿÿšÿ¤ÿŸÿ©ÿ³ÿ°ÿµÿµÿ¹ÿºÿ½ÿ½ÿ¼ÿ´ÿ²ÿ®ÿ°ÿ¦ÿžÿœÿ’ÿ”ÿ’ÿ‹ÿŽÿŽÿÿ”ÿ”ÿÿ¤ÿ¦ÿªÿ¤ÿµÿ±ÿ¿ÿ°ÿ´ÿ©ÿ¨ÿ¢ÿ¨ÿ¢ÿ¦ÿ¥ÿ£ÿÿ“ÿ“ÿŽÿ”ÿ•ÿšÿ•ÿ™ÿÿŠÿÿ‡ÿŠÿ‹ÿ‘ÿŽÿÿŠÿÿˆÿˆÿÿ|ÿˆÿ„ÿÿ}ÿyÿ†ÿÿ‡ÿ„ÿŠÿ—ÿÿ“ÿžÿŽÿŠÿƒÿƒÿ€ÿÿvÿpÿpÿ{ÿtÿmÿmÿsÿqÿsÿmÿvÿtÿnÿqÿxÿ}ÿŠÿ’ÿšÿœÿ«ÿ«ÿµÿ³ÿ³ÿ´ÿªÿ¯ÿ§ÿ«ÿ¢ÿžÿ›ÿ“ÿŽÿ‹ÿ„ÿˆÿ‚ÿ|ÿ€ÿÿŒÿ~ÿˆÿŽÿ„ÿŒÿÿÿŠÿŒÿ„ÿˆÿ†ÿ…ÿÿŒÿŒÿ”ÿ–ÿ™ÿšÿ¦ÿŸÿ ÿ¡ÿ¦ÿªÿ¨ÿ­ÿªÿ§ÿ§ÿ¢ÿœÿ—ÿ—ÿŽÿÿˆÿ…ÿˆÿ†ÿ„ÿˆÿˆÿ„ÿ€ÿƒÿ’ÿƒÿŒÿ‹ÿŽÿ–ÿ“ÿ–ÿœÿ™ÿÿ•ÿ˜ÿ“ÿ—ÿÿ˜ÿ™ÿÿ•ÿ‹ÿŽÿ‡ÿÿ„ÿ”ÿ˜ÿ¥ÿžÿ­ÿ¦ÿ¶ÿ±ÿ®ÿ­ÿ©ÿ¥ÿŸÿ˜ÿÿ†ÿ|ÿqÿtÿfÿZÿRÿNÿIÿGÿLÿRÿWÿcÿdÿoÿuÿ{ÿyÿ~ÿÿ„ÿ†ÿ‹ÿ•ÿ“ÿ”ÿ—ÿ•ÿŽÿ‰ÿŠÿˆÿÿyÿ{ÿvÿqÿ}ÿ…ÿˆÿ…ÿŠÿ—ÿ–ÿœÿ¥ÿ©ÿªÿ©ÿ ÿ¥ÿšÿŸÿ•ÿ™ÿ”ÿ•ÿ•ÿ˜ÿ¡ÿ¤ÿ¢ÿ²ÿ±ÿÃÿÈÿÊÿÕÿÛÿäÿçÿâÿéÿéÿìÿäÿéÿãÿáÿÚÿÑÿÅÿºÿ¸ÿ¹ÿ®ÿ¬ÿ¨ÿ¤ÿ¨ÿ«ÿ¯ÿ½ÿÇÿÁÿÅÿËÿËÿÚÿØÿãÿÞÿßÿÝÿÔÿÊÿÀÿÁÿ¬ÿ©ÿšÿ™ÿÿÿ‹ÿƒÿ‰ÿ}ÿ‚ÿ•ÿžÿ›ÿ¤ÿ«ÿ¶ÿÃÿÊÿÊÿÏÿÓÿØÿâÿáÿ×ÿÒÿÊÿ¼ÿ²ÿ¦ÿ˜ÿˆÿƒÿ{ÿzÿ~ÿÿ™ÿ¢ÿ±ÿÁÿÒÿêÿñÿþÿ úÿíÿßÿÎÿ¸ÿ«ÿ•ÿ…ÿ„ÿzÿvÿuÿ{ÿ„ÿ‰ÿ—ÿ£ÿµÿÆÿÒÿãÿãÿðÿëÿíÿãÿæÿßÿêÿîÿåÿéÿäÿçÿáÿßÿÞÿÙÿ×ÿ×ÿÙÿÛÿæÿæÿëÿïÿóÿöÿøÿöÿøÿùÿûÿýÿ÷ÿòÿãÿâÿØÿÖÿÄÿËÿÈÿÆÿÐÿÏÿáÿæÿõÿÿÿ('!  öÿìÿßÿÍÿºÿ¶ÿ¨ÿ¤ÿ¡ÿªÿ±ÿ³ÿ·ÿ¼ÿÊÿÎÿÚÿèÿóÿ (& úÿáÿÛÿ×ÿßÿÞÿõÿëÿóÿéÿëÿíÿíÿöÿúÿ ðÿéÿÕÿÇÿÅÿÅÿÍÿÆÿÈÿÅÿÌÿ½ÿ·ÿºÿ½ÿËÿÚÿèÿûÿ ýÿùÿöÿýÿàÿØÿÉÿÇÿÈÿËÿÇÿÑÿÒÿ×ÿÔÿãÿäÿìÿôÿ$%*))(     ùÿöÿêÿâÿÜÿÜÿãÿäÿêÿîÿîÿ÷ÿüÿ üÿ $)4=HWYRMDD:AGEDPF3. øÿóÿîÿðÿòÿ÷ÿöÿôÿñÿóÿùÿ (DN\ek^[II?) ÿÿøÿòÿ÷ÿðÿêÿðÿúÿ  %%()"$  #%0<;;;8=BA?<6+ þÿúÿúÿúÿ7GJMGJEDBDBJ@:<0$ "&)*,-9<:-."  %,7Lewœ¡¦Ÿ–„yrb^R= íÿØÿÉÿ³ÿ¯ÿ°ÿÆÿÞÿöÿ/P^jx~se]UH6 ûÿóÿçÿåÿèÿçÿûÿ/?Tiuzx~pxlg]WIA0,+ &;GTan€Ÿ¡¦¨¨¥ }`O6üÿùÿþÿ"&/296DNY\a`P8/'AQa_npjtwƒˆŽ‡€dI;114;JOX`kknmbX\\listl[H-üÿ$(=DMHQMLZiwu‚ziP:# ûÿíÿæÿéÿíÿøÿôÿ '2=I\]gd^]RJ?8-'!"!$!+<JLOb^fVK?134688+/üÿ 3Vp…‰”Œ˜‘›¤¬º²¼ª¡ŒveVNRU_^d\SLHD@EBBC@9--)2=MTXbhonm^VYWHC5-ôÿöÿóÿëÿðÿúÿ %+7@CBA/õÿéÿÛÿÁÿµÿ¬ÿ­ÿ¬ÿµÿÈÿÚÿøÿ0?P]dhbcjVO:(ûÿðÿñÿþÿ+AM`dlx~›žšœ–|tgbTD.( !87CDOPYkpt|vn]^4ÿÿýÿ  "(1=KO[k}“”ˆ|niZNOQVWLH?<5;068AHRcrrrnf[UF4+%$/0' */6-//05K_j€†¡ ‘‡mdcJ=<@@AACB@>@VYjfnljmaWWMWPOOKK<521-/3Jn”“ ¢°¯¶¦ž‡z]K=33,46IVr‚›¡¡¡¡Ÿ™™“—žˆƒ~|™œŸœ“–Œz`USSRG=;+ .9M[t…ž¬·ÇÐäìòëÒã–€w|‹¢·ÄÑÅȼ¿ÃÍØÕÍÏÎÂÀ³ª˜‘Šyq[VSYkrrvyƒŠŒƒx‚‡“”ˆ}f`[YLRVtƒ•¤Ÿ£Ž’ŠŒ™¢®³´¨™~rkx¤ÉæïÜÍÔâðõøõáØÅ§’–¥¼ÇÈÄÀ¥žŠŽ“³»È××ÓÁ°©ª²ËÔßÐÒ®£…upp…˜£¯£•zeaa_rp‚Œ›‚cG6-26BWbljf[`jt‘ˆ„tppvx‰Œ¢µ¿ËÌÇÄÂÀ¹ÉÕÞËŶ¬¡•¤¥°º¸¸µ´´·°µ¯»ºÂÃÈÂÆÇÆÌÐÓàÛæçïåçÕÅ»º¹¶À»¼¸²¯ ›•œ¦¨®¦²¯°® šž¥¸ÎÛåìëߨÓÌÁ·²°´¶±¤ž‘’ £¬¼¿¾²¥’‰xmss{}{zyl]LOH`k‹˜¥ª¦¡ŒwtxˆŽ’•ŽŒŒŠ†„€‹›¨µµ³¦Ÿ™…‡€smrƒ’ ª ™žž±ÃÚå1KVOA+'"!#úàÐÌÐÉÒÔÑÍÅÇÉÇÀ·°¨©¢£“‰rfQOO]ksx}„Œ—Ÿ¢§¥¬°µ¿µ°woZSQ]][HDLPQ\bel‚­½ÕÑËÄÇÀýÄÐÞâÕÜ‚aP;6*(#7<Mc}ˆ•²ÈÕëú)áö©«¯°É׿ìîòö%(9FJTTK' å˳¨œ’’•—¢¬¸¼ÊÓȶ{~|vfXSTUv‰˜¬¹·£šŽƒn_RQV^hn‚“›£ž£–“‘œ—‡Š‘£œ˜‘”ª¼ÉÊǼ»¿ÄÄÇÉÃÁÅÊÀ¾ÀÀ¸«§«µÏÞéæÛÐȳ°›¤¤¡§«­¼ÅÓáò&;DXUVF9*üæÒ®¦lTEDJ[p†–¯Æáëû ñÒ¨ƒ[7 ";a†£ºÂÍÈ· –•Ž€raS?9øÿõÿþÿ!*7Af‰¬Íê$&' ù÷èɵ˜}gQ70-6Km† ³ÍèôöïèäÝÚÒ漢uuePLW`PK<1*6<J[v‘¦³¨¡­«£”‰€pX2& ëÿáÿðÿóÿþÿ 'Ehx‰”ª¿ÌáêâåÔÌ®”z`I:HOTZQNKMF2, $89?AT`rgcHF<13%& &1FWh†—¥²º±­«¨¤¢¡‹…”‘ŸŸ©¸ËàèëÜÑÈÇ÷­œ‘ƒ{vvszyŠ“±¾ÆÂ³™—Šl^TM>.")& "!$/=AH=7/-+'/-3:4**  ÿÿõÿôÿöÿ÷ÿÿÿ %'IYkp}stjYA7 $=U‚§Øø õÑ´—|gYYQF0.7;Je|ªÓ *#&ùÚ¼wV5 þÿèÿàÿáÿáÿßÿãÿñÿ,Vz”¡£ž‰mU1 ÷ÿìÿéÿåÿâÿæÿßÿÙÿËÿÍÿÔÿîÿñÿûÿøÿ (,5DGPSLVMJ7%õÿøÿûÿ -@Pbb__aq{Š€‚wfNIFB9E983 !,<IVgiv~iaP@=98850,) #&39SklyiaQLB<</12'ýÿ÷ÿîÿòÿöÿ+DFPZRB2 ýÿõÿèÿðÿøÿ 6P`bK2ôÿðÿõÿøÿøÿéÿãÿéÿöÿ /0/#ïÿÜÿÏÿÍÿÐÿÆÿÅÿ¼ÿÀÿ³ÿ¹ÿµÿ·ÿ½ÿÉÿÏÿÙÿçÿõÿ  úÿôÿåÿäÿßÿ×ÿÆÿ¾ÿºÿ¿ÿÆÿÆÿÐÿÙÿæÿèÿóÿ÷ÿ >bw†•…j?ýÿñÿåÿÞÿæÿßÿíÿëÿíÿôÿ $AUn„šž¦œ’s[L.'$üÿëÿØÿÕÿÓÿÝÿßÿÔÿÑÿÀÿ¼ÿ«ÿ‘ÿŽÿ‰ÿ‹ÿÿ€ÿzÿnÿ`ÿMÿ5ÿ4ÿ@ÿOÿbÿÿ£ÿÌÿéÿ,5651'óÿÞÿÄÿ²ÿ—ÿšÿ˜ÿ¢ÿ”ÿ˜ÿ˜ÿÿšÿ¨ÿËÿäÿ(Jhnvwpp_C-'%!öÿàÿ¸ÿœÿ‡ÿ{ÿ|ÿˆÿŸÿ¶ÿÓÿïÿ*LUd^^NC.òÿÔÿ«ÿÿnÿHÿDÿ*ÿ5ÿ:ÿWÿÿ ÿËÿéÿ /?DA]cmr{g]B:,5ûÿîÿÞÿåÿíÿöÿàÿÔÿÏÿÝÿñÿ -P]xneK=0/(/00!øÿåÿÜÿÑÿÆÿ±ÿªÿ£ÿ–ÿ¤ÿ¬ÿµÿ¤ÿ¡ÿÿ‘ÿœÿ£ÿºÿÅÿÌÿÒÿÓÿÌÿÄÿ·ÿ¶ÿ´ÿºÿ¾ÿÓÿçÿðÿóÿëÿÜÿÖÿÃÿ²ÿšÿŸÿ®ÿÜÿôÿþÿóÿïÿìÿñÿïÿûÿ÷ÿîÿðÿéÿïÿûÿ)" êÿÙÿÅÿºÿ­ÿœÿ–ÿŸÿ°ÿ³ÿÁÿÂÿÈÿÍÿÕÿåÿïÿ",/äÿËÿ©ÿ‰ÿrÿWÿYÿWÿrÿ”ÿ¤ÿÿŸÿ˜ÿ¡ÿÿ¡ÿ¥ÿ£ÿ²ÿÄÿËÿÉÿÁÿ²ÿ­ÿ§ÿ ÿŸÿ§ÿ²ÿ¨ÿ§ÿÿÿŸÿ§ÿ±ÿ½ÿÑÿÖÿåÿ÷ÿ&-;4DEHE8*êÿÛÿÉÿºÿªÿ ÿ›ÿŒÿ|ÿyÿyÿŒÿžÿ³ÿÄÿßÿ'AEDI+#ïÿÄÿšÿxÿWÿ9ÿ)ÿ)ÿ%ÿ0ÿFÿUÿ[ÿmÿ~ÿ›ÿ´ÿÓÿìÿýÿûÿòÿÑÿ¼ÿŸÿtÿSÿ5ÿ'ÿÿÿÿ)ÿ3ÿAÿNÿVÿdÿuÿ„ÿ‘ÿ›ÿ¤ÿ©ÿ¦ÿ¤ÿ›ÿ‹ÿuÿbÿCÿ9ÿ,ÿ6ÿ8ÿSÿMÿVÿLÿKÿUÿaÿaÿ_ÿcÿnÿÿ•ÿ•ÿŸÿ”ÿ™ÿ˜ÿ–ÿ•ÿ†ÿvÿmÿeÿbÿXÿWÿNÿGÿ@ÿ6ÿ8ÿEÿJÿ?ÿ<ÿNÿ]ÿvÿ|ÿÿÿyÿqÿtÿdÿiÿnÿ‚ÿ”ÿ£ÿ±ÿ¾ÿ¹ÿ·ÿ ÿ‹ÿˆÿˆÿÿzÿzÿzÿsÿ‡ÿÿŠÿƒÿŒÿÿ˜ÿ¢ÿ¸ÿÒÿåÿøÿ öÿÜÿÊÿÍÿÑÿÜÿÞÿÏÿ¸ÿ ÿˆÿqÿ^ÿXÿTÿKÿTÿgÿ€ÿ‘ÿžÿŸÿ¤ÿ¨ÿ£ÿ²ÿ°ÿÁÿ½ÿÈÿÇÿÅÿ±ÿ•ÿtÿdÿHÿ?ÿ(ÿ)ÿÿ'ÿ,ÿ3ÿ7ÿ0ÿ&ÿÿÿïþæþðþÿÿ1ÿFÿRÿFÿ9ÿ-ÿ&ÿ ÿ,ÿ3ÿKÿYÿeÿaÿVÿDÿ6ÿ-ÿÿøþçþýþÿþ ÿÿÿ'ÿÿÿÿÿ3ÿNÿjÿƒÿ›ÿ¸ÿÞÿëÿæÿÕÿÆÿ¹ÿ§ÿ”ÿ‰ÿ~ÿ~ÿvÿnÿYÿIÿ5ÿ"ÿÿÿ5ÿNÿ^ÿ{ÿŒÿ—ÿ«ÿ¬ÿ¦ÿÿÿŽÿŠÿœÿ§ÿÀÿÉÿßÿäÿÊÿ·ÿ¨ÿ¥ÿ“ÿ¢ÿ•ÿ¢ÿ‘ÿÿxÿ‚ÿqÿwÿ[ÿIÿ.ÿ9ÿLÿbÿ‡ÿ¥ÿ¿ÿÎÿËÿÎÿ¾ÿÿ|ÿiÿ^ÿiÿpÿaÿdÿGÿ4ÿ$ÿ"ÿÿ ÿÿ.ÿUÿ€ÿ¨ÿ¼ÿÓÿËÿ¾ÿÿsÿTÿCÿ<ÿCÿCÿAÿ+ÿ"ÿÿ ÿÿÿÿÿ$ÿ.ÿCÿJÿSÿVÿlÿwÿuÿqÿdÿ]ÿ\ÿnÿtÿiÿ[ÿ[ÿOÿ@ÿ@ÿ4ÿ?ÿBÿBÿIÿHÿBÿDÿ5ÿ5ÿÿ ÿÿ ÿÿÿÿ&ÿ7ÿAÿ7ÿBÿEÿSÿgÿoÿyÿÿ}ÿrÿ`ÿGÿ;ÿ6ÿ@ÿZÿxÿŽÿ§ÿ®ÿÀÿ°ÿ«ÿ ÿ—ÿ…ÿmÿiÿ]ÿjÿaÿ\ÿSÿaÿtÿÿ›ÿ ÿ«ÿºÿÇÿÒÿàÿÖÿÄÿ°ÿ›ÿ|ÿ\ÿ?ÿ%ÿÿ ÿÿ ÿÿ!ÿ*ÿ/ÿKÿZÿgÿkÿxÿ„ÿ˜ÿ²ÿ³ÿ±ÿ¬ÿ›ÿ„ÿgÿKÿ7ÿ>ÿ1ÿ"ÿÿÿþéþàþÜþàþçþÿ,ÿFÿ_ÿÿ£ÿ²ÿ¸ÿ¨ÿšÿ”ÿ†ÿŠÿŒÿ”ÿ›ÿ¡ÿ˜ÿ”ÿ„ÿqÿTÿ>ÿ1ÿIÿQÿVÿYÿPÿMÿCÿKÿHÿ<ÿ@ÿFÿSÿ[ÿyÿ†ÿÿƒÿnÿFÿ*ÿûþåþÐþÉþÐþÝþéþøþÿÿÿôþçþâþìþûþÿ:ÿWÿiÿxÿ‚ÿzÿtÿWÿJÿ'ÿÿ!ÿÿÿùþìþþþÿÿÿüþþþÿÿ-ÿ0ÿ>ÿMÿVÿWÿZÿQÿLÿ7ÿ*ÿÿÿöþèþàþÚþÕþÚþÒþÀþ©þ—þŽþ•þœþ§þ¶þãþÿ+ÿ5ÿSÿfÿrÿÿrÿYÿ0ÿ ÿòþÔþÀþ¾þ¯þ¸þ´þ½þÆþëþñþÿÿÿ/ÿRÿoÿ…ÿ’ÿ–ÿ”ÿwÿQÿÿÿÿÿÿÿþÿðþÐþ¾þÂþÊþÓþîþÿ!ÿ$ÿ.ÿ&ÿÿÿÿúþõþÿÿ$ÿAÿHÿDÿ7ÿ ÿÿëþìþîþ ÿÿ:ÿ:ÿ1ÿÿÿÿÿ-ÿHÿvÿ§ÿÝÿèÿÅÿŒÿ\ÿ+ÿÿÿôþ×þÉþ§þ–þŒþ‡þþ³þßþÿ@ÿeÿ~ÿŽÿÿqÿPÿ8ÿ"ÿÿüþ÷þ÷þëþçþßþÑþÄþÀþ«þ£þ™þ¬þ·þÈþÓþêþøþÿ ÿ ÿ ÿÿ.ÿ<ÿGÿIÿFÿ9ÿKÿDÿ6ÿÿÿØþµþœþ”þþ“þþ–þžþ³þÍþøþÿ?ÿ]ÿ€ÿ§ÿºÿ»ÿ¾ÿÄÿµÿ§ÿÿqÿJÿ!ÿ÷þÖþµþ§þ§þºþ×þöþ3ÿTÿÿ”ÿ²ÿ·ÿ¯ÿÿªÿ¯ÿÃÿÑÿÕÿØÿ¾ÿŸÿrÿGÿÿÿìþåþéþÿÿ ÿ<ÿBÿGÿYÿaÿsÿiÿsÿzÿ‹ÿ°ÿÊÿãÿåÿëÿÝÿÅÿ£ÿ€ÿdÿGÿ5ÿ'ÿ/ÿ.ÿ.ÿ%ÿ ÿýþíþÕþÕþÚþüþÿ@ÿ^ÿlÿhÿ_ÿIÿEÿAÿBÿWÿvÿ“ÿ¤ÿ®ÿ¤ÿÿiÿ>ÿ ÿóþÛþÝþïþÿþ ÿÿ"ÿ*ÿ1ÿFÿQÿRÿZÿVÿZÿbÿqÿsÿqÿgÿ_ÿ]ÿUÿYÿgÿeÿ]ÿKÿ@ÿ)ÿ&ÿÿÿÿ%ÿ3ÿMÿ_ÿqÿuÿ‚ÿžÿ§ÿÿÿxÿnÿQÿ<ÿ3ÿDÿ6ÿ(ÿ"ÿÿ ÿ%ÿ ÿ6ÿGÿ\ÿaÿcÿgÿYÿZÿZÿ]ÿSÿ\ÿaÿuÿxÿnÿtÿkÿqÿkÿhÿYÿMÿHÿVÿVÿhÿmÿmÿPÿ/ÿÿÿÿ ÿ/ÿAÿQÿRÿZÿZÿ_ÿgÿvÿ‚ÿ†ÿÿ›ÿ£ÿÿuÿNÿ-ÿÿéþÍþÃþÀþÑþåþüþÿ#ÿ8ÿPÿmÿŽÿ¬ÿ¾ÿÍÿËÿ¿ÿ°ÿÿ}ÿ5ÿÿØþ·þ¦þžþ™þ£þ¾þÖþ ÿ7ÿaÿ…ÿ¡ÿÆÿ¾ÿŸÿŠÿcÿRÿ.ÿ ÿÿÿúþõþÿÿÿÿ(ÿ2ÿEÿJÿNÿ^ÿgÿ]ÿfÿpÿ{ÿrÿ`ÿWÿMÿLÿQÿlÿxÿ‡ÿÿ˜ÿŒÿ}ÿqÿZÿDÿ0ÿÿÿÿ!ÿ-ÿBÿ\ÿcÿqÿŽÿ™ÿ•ÿ™ÿ”ÿ¢ÿšÿ¤ÿ˜ÿ ÿŠÿ}ÿmÿpÿeÿeÿbÿlÿpÿÿ›ÿ”ÿ~ÿdÿ9ÿ ÿâþÇþ¾þ»þ»þÓþòþ ÿ%ÿ/ÿ2ÿ9ÿGÿFÿNÿMÿfÿpÿ†ÿ†ÿÿ~ÿmÿSÿ8ÿ ÿÿöþ÷þÿÿ ÿÿÿ+ÿCÿ^ÿxÿÿºÿÖÿæÿóÿóÿÑÿ°ÿŒÿzÿbÿIÿ:ÿ ÿÿáþÖþÕþâþêþþþ'ÿJÿvÿŒÿ¢ÿ”ÿŠÿ‡ÿ}ÿpÿmÿaÿ^ÿaÿRÿLÿHÿRÿYÿgÿqÿwÿxÿxÿtÿlÿpÿnÿlÿgÿWÿFÿ;ÿ0ÿÿúþçþõþÿþÿ<ÿeÿ™ÿÀÿäÿøÿ þÿòÿÝÿÊÿ³ÿ¦ÿƒÿlÿQÿ:ÿ%ÿ ÿ ÿÿ!ÿDÿ_ÿ~ÿ²ÿäÿ9A4#ôÿÚÿ¸ÿœÿƒÿoÿUÿIÿ0ÿÿùþðþÙþÕþîþÿNÿÿ§ÿ¼ÿÈÿÃÿ¿ÿ§ÿ˜ÿŠÿŒÿŸÿÀÿÝÿëÿôÿåÿÜÿ´ÿ ÿˆÿtÿvÿxÿ|ÿÿ–ÿšÿ”ÿŽÿ†ÿ|ÿ~ÿÿ‘ÿ­ÿÃÿÐÿÖÿ¾ÿ®ÿ‘ÿvÿdÿHÿ?ÿ;ÿ>ÿRÿZÿeÿLÿCÿ5ÿ3ÿ3ÿ1ÿ:ÿDÿ[ÿjÿxÿ€ÿ|ÿÿ‘ÿ¢ÿ²ÿ´ÿ¤ÿ‘ÿrÿhÿ_ÿ_ÿPÿ5ÿ&ÿÿÿÿ(ÿ;ÿbÿÿÿ¨ÿ¼ÿ¹ÿ¼ÿ²ÿ¤ÿ˜ÿ’ÿŽÿ“ÿ£ÿ¨ÿ³ÿ¾ÿ¸ÿ¼ÿ·ÿ¯ÿ¡ÿ¥ÿÿºÿØÿëÿõÿøÿòÿèÿÑÿÁÿ±ÿœÿ•ÿ–ÿ§ÿÇÿáÿëÿïÿæÿÝÿÊÿ½ÿ¼ÿ±ÿ¸ÿÏÿìÿ$$øÿðÿãÿÅÿ¯ÿ¥ÿ¨ÿ¬ÿ¹ÿÈÿÒÿÚÿÈÿÈÿºÿ©ÿ•ÿÿzÿuÿpÿsÿ_ÿZÿSÿ_ÿdÿsÿÿ©ÿ¼ÿºÿ¬ÿ¬ÿ«ÿ³ÿ¹ÿ¼ÿÄÿÈÿÃÿ¯ÿ˜ÿ~ÿtÿlÿmÿ}ÿ˜ÿºÿÙÿïÿüÿ êÿÍÿ·ÿ›ÿœÿ•ÿ¹ÿ¾ÿÇÿÃÿ¾ÿÏÿáÿïÿïÿùÿ$1+ úÿóÿáÿÑÿÅÿÅÿ¼ÿ©ÿ„ÿqÿTÿEÿ3ÿ+ÿ,ÿ7ÿ=ÿRÿvÿŒÿ²ÿÂÿáÿçÿêÿÚÿÍÿÁÿ±ÿ°ÿ¶ÿµÿ¦ÿŽÿkÿXÿFÿ8ÿ(ÿ+ÿBÿeÿžÿÆÿãÿöÿ÷ÿíÿÍÿ·ÿ­ÿ—ÿ‡ÿ†ÿ‚ÿŒÿšÿ¡ÿ’ÿ†ÿÿ~ÿ„ÿ…ÿÿ¤ÿ·ÿÑÿöÿùÿ÷ÿñÿ×ÿºÿ«ÿ¡ÿ¥ÿ¥ÿ±ÿ¹ÿÂÿÇÿ¹ÿ°ÿžÿŒÿxÿ‚ÿ}ÿ‚ÿšÿÀÿÛÿ ñÿÈÿ»ÿ·ÿÅÿÖÿÝÿÔÿ½ÿ«ÿŒÿ|ÿXÿ>ÿ.ÿ4ÿHÿkÿ‘ÿÈÿñÿ ëÿÊÿ¶ÿ“ÿ„ÿ€ÿÿÿ«ÿ©ÿ‰ÿoÿ<ÿ(ÿ ÿÿÿ$ÿ=ÿnÿ®ÿÝÿýÿõÿÖÿ®ÿ£ÿœÿ§ÿ¶ÿÐÿÚÿãÿÚÿÒÿ·ÿÿÿŸÿÌÿòÿ#Y|Œx]-Ìÿžÿˆÿsÿsÿ\ÿVÿDÿMÿSÿgÿ}ÿ”ÿ«ÿÍÿÞÿúÿ#4(( êÿÚÿÅÿ¯ÿœÿŠÿ‡ÿÿ‹ÿ’ÿŠÿ‘ÿ™ÿ­ÿ«ÿ¸ÿ²ÿ«ÿ§ÿ¬ÿ¹ÿÀÿºÿµÿ¶ÿ ÿ’ÿ‰ÿ†ÿsÿrÿiÿqÿzÿ}ÿ’ÿ“ÿ–ÿˆÿÿ¡ÿ£ÿ§ÿ•ÿ’ÿ•ÿ”ÿÿ’ÿÿ†ÿ’ÿœÿ³ÿ¼ÿØÿîÿ(68BC1ýÿñÿÜÿ×ÿØÿéÿóÿ<[m}—¢­±½·Ã¹¥ŠiG=, ,,)ñÿóÿôÿóÿÒÿ­ÿ’ÿmÿXÿ^ÿwÿÿÿ”ÿšÿ°ÿ°ÿ¹ÿ¨ÿªÿ®ÿ¼ÿ¾ÿÀÿÁÿÏÿ×ÿÚÿáÿêÿøÿøÿòÿüÿûÿúÿïÿéÿáÿòÿýÿ'=YYVbu‡†‚{dB. ïÿåÿâÿÝÿÓÿÓÿÔÿÒÿÅÿÁÿÊÿèÿóÿ "6BE:>27*,)öÿÓÿÃÿÉÿÉÿÌÿÈÿÍÿðÿÿÿ5Il…Œ’›£’~wbG0 þÿøÿðÿñÿäÿéÿÿÿ  (4Qdˆœ±ÆÂ®ˆX3)%7;4(ôÿòÿóÿñÿ 7Nj{‰†’ˆ€rX<øÿÕÿ¬ÿ¡ÿŸÿºÿÉÿØÿúÿ8N_l{}~ndMHIJF<2% ÿÿðÿêÿÖÿáÿìÿóÿûÿíÿãÿäÿÿÿ!OizoH*ÿÿñÿàÿÞÿçÿõÿ)BUfnn^UQOfyŠŒŽ˜Ÿš’vU=?S_uujLíÿúÿ+>M]TSL@/28N^€¡§¦“~{Œˆ‡‡xeP@/?Xp…žÆÎÔͯ†eB6ôÿ¿ÿ£ÿ•ÿ™ÿ¨ÿÈÿ÷ÿ4f„”¥¤ª›–‹’›¹ÉÒÓÊ·—~gbg_\[caC/4CDKTg_]NJ^z•¢¬°Ÿ¡•~‚‡ˆvQ;éÿÄÿ®ÿ­ÿ±ÿÕÿþÿ;G=íÿåÿàÿ0AIHC3/,2973&LrœÐø.-("# &"++è»…tx…ŒŽ”–“‰Œ ¢¤¯¿Âȹ¤…jhdYVC?2,+86ARm}‹‰‡}ieXTIPW`[^jufeepju}ˆ|rorm‡™¨½Ôëé×ÖÔ×ÐÕÍÁª™ˆqe`mmmw…Š‘›–•zVL31#%,05CP]_]RG9?HYhop^_bdrw‚}‰‘‘}|z—Ÿ°«¼¯®Žsor—¹Õ˾©™—™¢¨°²¸ÄÑÏÈÀ»º¸¶ª’—}K-ÿÿùÿòÿùÿ1DXl~‡šºÞñ âÆ«“–›©¢°»ÂÄ×ú2693/(ýṃkc^e[ddmlaM=>P]q¦²¯¯šuK!)K[`d^ZRD?0<L^mn^D2&/?Qm†¨ºÊÌÎÕÔëõüýîõìÞο»±²¨«ª«¿ÌÞáÙл® ’vnsoo\J-"":Ol„˜ž”iVNP\|•œ›~wgVH=B7)+0F1/)8GKRWi{†~€sapsˆž«¬«©¡™–Œ‹•»ÈÖÜØÐÀ³£¨—ž§´ÆÎÜçò'9" ß°~V(8Haiqxx‚‘¸ÃØäëÛ‰FüÿºÿŽÿ‰ÿ¢ÿÍÿÿÿ$?9?+'+Qo‘¤¹¼«–rN:5,/AY†¹áûô÷2IZSR=:4# äÇ£Ž“¤¹ÀÈÁ±§¡¢£ÁÊæâÝ×¹œ{\8ùÿJj||stln~—™“„‚‚’’¢®®ž–«¾ÊÎÕÐÕÚßçàäÜáæêýöïÙΦ•‘£ºÑéøûîíìöðýþ帜‹t]`}¤ÁÛñöïØÃ¤aWR[ctr_UWet¢³Ë×ÚÏÁ¹ª«¦¢…zXC.0AMO^g…–¿Ùú 2A.#øçÀ‘mVINSlv|†•­ÀÐÝñ )"ܰ“p[MQk{‹“ul^ZU`u•¯ÎÑÈ»º«¨ ˜‘Œ‹}pgio‰zŽ¡´ÈßÝË´ž‡aG! þÿ%@WUMIj}𮦡nR3ñÿÜÿËÿ²ÿ´ÿÀÿÚÿùÿ ?Va€œ¯µ··½ÓÊ¿Ÿj? ðÿáÿêÿðÿÿÿ2ATVWi~ ¹ÂÖÚçâæíñÜ¿ŠV;%5Hh’„legq… ©¹ÊÅ£aD"÷ÿïÿõÿïÿõÿáÿÛÿÏÿÜÿçÿôÿ3Vt|}vdOG531,BTa_frƒ•¦²·¾¼½µŸ_HBHD@=2.0CIiŒ°ÒèíÞÊ´¨oXAB=@=95;@On‘ ºÁǬŒaBòÿØÿÕÿÎÿØÿ÷ÿ:Smv‡‰~vnm[J5% ÿÿðÿåÿÑÿÆÿÈÿåÿ*AW`aXULAôÿÛÿÍÿÉÿÅÿÀÿÄÿÈÿÇÿÕÿåÿ÷ÿ 7\„œ¥—y`G2øÿ#<IRPFB/<@Wqpy„™ ¾ÖÛÖÓÙäíôðìàÌÁ«ª¯«¶¤‹~‰¥§¬ª¥¬­³©•‚m[9'1<E@>9:CBO\gaD5)3*'(@LTE5)! 3TicdO3 -35.öÿÝÿÖÿéÿûÿ >uœ¶¨Ÿ”~rbI4" ÷ÿûÿ1N^x‘¡¼ÏÚèý4,&ÓŸta_oˆ“xsi„™˜ˆ{‚”¥’Œ‘•Ÿ˜—‚Ї|`:+  ÷ÿîÿûÿ /Usu~tttuo^Zrš«œyL.&!'<Ws~ˆ|`38_›¡›xQ1 +2öÿÒÿ»ÿ•ÿ}ÿjÿjÿxÿÿ ÿ½ÿãÿ 5bq‚˜³Þã¿™lcWSafnaF. +"(1@[sŽœª¤•†…‡ypjN8Âÿ‚ÿKÿ6ÿ1ÿ;ÿ]ÿ†ÿ½ÿìÿ !$#%*,ëÿÀÿœÿÿvÿƒÿ™ÿØÿýÿ  øÿøÿüÿ#AXX8÷ÿçÿÍÿÅÿÜÿûÿ29+ þÿøÿáÿÌÿ»ÿ«ÿ­ÿ¦ÿ¯ÿºÿÍÿïÿ 7ewg^TYV1 áÿÝÿËÿÃÿ®ÿ¬ÿ¢ÿ¬ÿ ÿ¥ÿ¬ÿ¹ÿÄÿÏÿÚÿíÿ 1F`s”££…Oùÿ»ÿ{ÿ`ÿQÿRÿmÿ‡ÿ¤ÿÓÿôÿ$2#AP]aJßÿ¸ÿœÿÿƒÿsÿxÿ‚ÿ¤ÿ½ÿÕÿéÿóÿ ÷ÿäÿÝÿßÿÑÿ·ÿµÿ¤ÿ£ÿÿ™ÿ˜ÿÿšÿ¤ÿ³ÿ¼ÿ²ÿ·ÿ¸ÿ£ÿ–ÿ¡ÿªÿ»ÿÑÿòÿ6\q—‚X;ùÿëÿêÿéÿòÿþÿ B^‘™ž…bQ.üÿòÿäÿáÿÖÿ¼ÿÿ„ÿŠÿŠÿŽÿ‰ÿÿ¬ÿÅÿ×ÿåÿõÿõÿöÿñÿôÿÝÿÄÿ³ÿ¥ÿšÿ‚ÿ~ÿqÿeÿPÿRÿIÿPÿ[ÿpÿ}ÿ ÿËÿ !51 !ìÿØÿÖÿ×ÿÚÿðÿùÿ3=DOLT?(öÿÉÿ–ÿÿoÿYÿdÿgÿ‘ÿ´ÿÐÿæÿÿÿàÿÆÿ±ÿ¨ÿ—ÿ‘ÿŒÿ‡ÿŠÿÿ£ÿšÿ‡ÿwÿnÿhÿtÿ†ÿ¢ÿ¶ÿÃÿÓÿèÿçÿêÿÍÿ²ÿ§ÿ®ÿÅÿÛÿøÿ<ez}vW<-=Zhyƒ–™ŽxiXOOZa_P>#ðÿâÿáÿýÿ'*60<AQRPC>5/#ëÿÑÿÁÿ½ÿ¾ÿµÿ°ÿ°ÿ»ÿ¸ÿ·ÿËÿïÿ &%.15::8øÿáÿÐÿÄÿ°ÿžÿ†ÿ}ÿtÿkÿ~ÿÿÁÿéÿ'Id}˜¼¸¤‹j/øÿËÿ®ÿ ÿ–ÿ³ÿÛÿÿÿ/6FID856?I@0êÿ¹ÿ‘ÿtÿ\ÿVÿRÿGÿ]ÿeÿkÿsÿˆÿ”ÿ¥ÿ¹ÿÔÿëÿþÿÿÿþÿùÿóÿæÿÛÿÈÿ´ÿœÿŒÿÿ„ÿuÿvÿ‚ÿ•ÿ¯ÿÅÿ×ÿïÿ 3PYKDAONF>5( æÿÅÿ°ÿ“ÿ’ÿ§ÿÌÿ 4][`RK6($)&(ûÿÚÿÆÿ°ÿ°ÿ¶ÿÂÿÂÿÒÿåÿ ñÿßÿåÿáÿìÿ#2NH2æÿ°ÿyÿDÿ$ÿ9ÿPÿtÿÿ°ÿÏÿÇÿÑÿÕÿìÿ /G\Z9æÿÈÿ©ÿ†ÿUÿ3ÿ,ÿ0ÿDÿIÿIÿZÿjÿ}ÿ‚ÿ‘ÿ™ÿ¥ÿ¶ÿÀÿÌÿÖÿÓÿÉÿ¸ÿ­ÿ¡ÿ™ÿ©ÿÀÿÕÿèÿòÿùÿ   øÿÜÿÈÿ°ÿ•ÿnÿPÿBÿOÿOÿgÿŽÿÂÿøÿ7GH0óÿúÿòÿæÿÉÿ¥ÿ„ÿvÿ}ÿwÿpÿpÿnÿaÿlÿ~ÿ“ÿ‘ÿžÿÿ©ÿ–ÿ”ÿ‰ÿˆÿ‹ÿ˜ÿ®ÿÃÿºÿ¶ÿ«ÿ§ÿ¨ÿ­ÿ¹ÿ°ÿ¤ÿ™ÿÿ|ÿtÿcÿQÿHÿCÿOÿXÿsÿœÿ·ÿæÿ?`‡¢ÅÓÊȼlM8ýÿåÿßÿÇÿ²ÿ­ÿ¿ÿÔÿìÿ4_†£­¢‹VÏÿÿ`ÿCÿEÿRÿfÿ|ÿ‘ÿ±ÿµÿ·ÿ¼ÿ¸ÿÁÿÀÿÁÿ°ÿ³ÿÄÿÍÿÊÿ¶ÿÿŒÿgÿXÿSÿZÿaÿ{ÿœÿ²ÿ°ÿ¯ÿ¨ÿ¯ÿ»ÿÓÿçÿóÿùÿãÿÅÿ¡ÿÿiÿFÿÿ ÿÿ9ÿOÿjÿÿ´ÿÁÿ¾ÿÀÿÝÿõÿBYR6ãÿžÿcÿ;ÿ&ÿ"ÿ0ÿKÿÿªÿÏÿêÿ.64B[d_SH8)íÿÀÿœÿlÿ5ÿÿêþòþÿ-ÿ?ÿgÿ ÿÝÿ !@n“¿é!ì§_¸ÿdÿÿÿ ÿ/ÿHÿPÿ0ÿ#ÿÿÿ ÿ6ÿqÿ±ÿùÿ=u†šŽ…_D2# àÿµÿzÿFÿ/ÿ+ÿ;ÿdÿ”ÿÍÿòÿÿÿêÿåÿçÿßÿÜÿØÿÙÿÊÿÏÿÏÿÐÿ¼ÿ°ÿ™ÿŒÿ„ÿ€ÿˆÿÿƒÿtÿlÿ]ÿ]ÿDÿ9ÿ+ÿOÿCÿHÿWÿrÿŠÿ˜ÿ ÿ§ÿ±ÿ¶ÿºÿ¸ÿ¶ÿ¹ÿÁÿÎÿÌÿ¹ÿªÿ«ÿ¡ÿ£ÿžÿ•ÿ‚ÿzÿjÿxÿ‰ÿ¨ÿ¦ÿ¹ÿ½ÿÙÿçÿ$@Yen}qdDáÿ§ÿ”ÿ‰ÿƒÿ™ÿ¨ÿ¢ÿtÿBÿ-ÿ/ÿ,ÿÿÿ7ÿhÿœÿÄÿÏÿÚÿÜÿçÿêÿ÷ÿüÿçÿãÿÕÿÅÿ¦ÿˆÿpÿ[ÿ\ÿ_ÿlÿuÿ‚ÿzÿbÿTÿ\ÿqÿ„ÿ£ÿ·ÿÖÿòÿ*7IUntwcLßÿ”ÿTÿÿØþªþ—þ˜þ®þËþùþÿ3ÿIÿgÿŠÿµÿÏÿæÿùÿêÿËÿ’ÿXÿ ÿöþáþäþòþÿÿ$ÿ4ÿ<ÿTÿ]ÿ„ÿ£ÿÒÿPp†‹pYPD<#úÿèÿÊÿ©ÿzÿOÿ?ÿ:ÿTÿrÿªÿÖÿ÷ÿ9gˆš§¿ËÌ´‹],ôÿ¸ÿŒÿYÿNÿHÿNÿAÿFÿOÿZÿgÿƒÿÿ¶ÿÇÿÐÿÙÿèÿâÿéÿÛÿÛÿÑÿâÿ!øÿÛÿÎÿÏÿÚÿñÿ +7/ $EUOSSRD79Q`jtn]6üÿÄÿ‰ÿ\ÿ:ÿ&ÿ!ÿ(ÿ5ÿÿðþÐþ¸þµþ¹þäþ(ÿ€ÿÞÿE…¥«›ŒNíÿÏÿ·ÿžÿ‰ÿ„ÿoÿMÿ(ÿÿÿ+ÿkÿ¨ÿäÿ"^„ ª³£˜€p[1ðÿËÿ¤ÿ–ÿÿgÿGÿLÿuÿ¢ÿÚÿþÿ4Wo]]J?#ìÿËÿºÿ©ÿ¢ÿˆÿjÿBÿ,ÿÿÿÿ>ÿ\ÿ‹ÿ¢ÿ»ÿËÿÏÿÂÿÀÿ°ÿ¢ÿ–ÿ ÿ¸ÿÄÿÇÿÍÿÕÿÚÿÀÿ´ÿ¿ÿÐÿäÿèÿ =K7þÿöÿâÿèÿâÿëÿèÿØÿÁÿ§ÿ‹ÿ|ÿXÿGÿEÿPÿjÿÿ—ÿ«ÿ¹ÿÓÿùÿûÿíÿíÿíÿõÿþÿúÿóÿåÿÐÿ»ÿ¯ÿ·ÿÉÿÞÿàÿËÿ¤ÿ†ÿtÿcÿpÿ†ÿ™ÿ¾ÿÑÿêÿöÿ )CYVVL<.)îÿ»ÿÿcÿDÿ0ÿ'ÿÿ#ÿ(ÿ4ÿRÿ„ÿ¾ÿýÿ6y¨¿¾­qXL(³ÿtÿDÿÿøþÔþÌþÈþÓþöþ*ÿhÿŸÿÌÿõÿ ìÿÝÿêÿõÿîÿÝÿ³ÿÿjÿcÿPÿRÿIÿNÿ>ÿHÿWÿoÿ…ÿŽÿ–ÿŸÿ¤ÿ®ÿÎÿéÿ/LK<îÿÔÿÆÿºÿµÿ®ÿ¯ÿªÿ­ÿ–ÿ‚ÿ_ÿAÿ&ÿ'ÿHÿwÿ·ÿåÿ&2(óÿÓÿÍÿ×ÿãÿæÿãÿÚÿÍÿ³ÿ¼ÿ ÿ„ÿhÿcÿwÿ—ÿ¿ÿÛÿôÿýÿÜÿÏÿ¶ÿÿyÿjÿiÿ†ÿ§ÿÒÿðÿÿÿêÿÚÿÎÿÈÿÁÿ¯ÿÿ˜ÿ¡ÿ³ÿ¹ÿ¯ÿžÿŽÿ†ÿ˜ÿ©ÿ¾ÿÞÿ-Jjwsj^L,÷ÿÕÿÒÿÍÿàÿëÿùÿñÿáÿâÿÏÿ½ÿ«ÿ¤ÿ—ÿ‡ÿÿ~ÿrÿtÿyÿ~ÿ}ÿˆÿªÿÐÿúÿÿÿüÿûÿõÿÕÿ¨ÿ–ÿÿ‡ÿ”ÿ¨ÿÿÿ^ÿRÿ`ÿ~ÿ|ÿ†ÿœÿÀÿÍÿÞÿèÿíÿßÿãÿïÿ ÷ÿõÿáÿØÿÙÿßÿÈÿ¿ÿ¸ÿÁÿÈÿàÿøÿ ûÿðÿìÿôÿúÿÿÿûÿßÿÇÿ®ÿ†ÿnÿTÿLÿLÿLÿYÿdÿpÿvÿ„ÿ—ÿ§ÿ»ÿÏÿíÿ+&èÿ¸ÿŸÿ„ÿyÿ…ÿ£ÿ°ÿÇÿÕÿïÿñÿøÿ 'EQZh|—ˆa%Úÿ§ÿkÿIÿ=ÿBÿiÿ}ÿpÿlÿvÿÿŸÿ¿ÿêÿ!28.þÿßÿ­ÿ„ÿoÿ~ÿ‹ÿ“ÿ¡ÿžÿ ÿ•ÿŽÿ˜ÿ´ÿÛÿþÿ7Jcm|…˜‘„`@éÿ½ÿÿMÿÿíþäþðþ ÿÿAÿgÿzÿ™ÿÈÿ<qަµ·£hNãÿµÿžÿÿŠÿ‡ÿ€ÿˆÿ£ÿ¤ÿ±ÿ¶ÿÍÿõÿ.]v‹‹’™}@úÿºÿœÿ˜ÿŸÿŸÿ›ÿ«ÿ½ÿ¶ÿ«ÿ‘ÿ€ÿ„ÿ”ÿ­ÿÈÿñÿ$MszjY&õÿ×ÿØÿýÿ'ëÿÀÿ±ÿ˜ÿÿ‘ÿÿ¬ÿ«ÿ§ÿ¯ÿ¾ÿßÿïÿ !8,48CBLK8éÿÅÿ°ÿ«ÿ²ÿ¿ÿÎÿëÿ;RaedU@@CHKJI7* ìÿÍÿ¸ÿªÿ¦ÿ›ÿ§ÿªÿ¿ÿÔÿØÿ×ÿÀÿ·ÿ©ÿ©ÿžÿ¨ÿ©ÿ°ÿÆÿÍÿÓÿ×ÿÎÿËÿÜÿàÿæÿëÿêÿèÿçÿæÿçÿåÿìÿñÿ÷ÿ0;DANSO8 ÿÿóÿÕÿ»ÿ¤ÿ˜ÿ›ÿ¤ÿ¯ÿ½ÿ¿ÿÆÿÈÿ×ÿâÿîÿ# þÿìÿåÿðÿìÿëÿêÿýÿ !"  #1HDPI5!ñÿÏÿ ÿ‚ÿtÿ{ÿ’ÿ¢ÿ°ÿÄÿÕÿôÿ1Ojw„zr\C"öÿÓÿ¼ÿ£ÿ‡ÿyÿmÿlÿrÿ‚ÿŒÿ ÿ¡ÿ¿ÿÜÿúÿ5FRC6 ïÿÝÿ¹ÿÿ‰ÿÿ™ÿ’ÿŒÿ†ÿˆÿŽÿšÿ±ÿâÿAcuyucO3ðÿàÿÌÿÈÿµÿ¥ÿ“ÿ‘ÿ–ÿ¯ÿÑÿóÿKksned\O3( õÿÂÿ¡ÿˆÿgÿIÿ@ÿVÿwÿ›ÿÌÿàÿõÿ "&/!ôÿæÿéÿèÿõÿîÿéÿëÿúÿóÿÛÿÌÿÃÿÅÿ¾ÿ¹ÿÊÿìÿ,CTZbblprf_N9$çÿÆÿ³ÿ¯ÿ·ÿÇÿåÿûÿ";9Zax‰“ž•Ž{vokhZRMD>4 üÿìÿñÿöÿAWhcpu|‚€zmR3îÿßÿÌÿËÿÃÿÖÿÝÿÞÿÚÿÏÿ½ÿ´ÿ¦ÿ®ÿ½ÿÓÿéÿ&;KZWWD<ùÿôÿìÿßÿÔÿÞÿêÿæÿüÿ,Lax‡‚xiaWRTQJA8ñÿÃÿ§ÿ©ÿÀÿÝÿúÿBi}Œ„qwkln~†zR-óÿ¶ÿzÿKÿ6ÿ@ÿFÿfÿ€ÿŸÿ±ÿÕÿðÿ-Io›Æó  æ¯~J&ýÿáÿÈÿÂÿ·ÿ¯ÿ¦ÿ³ÿµÿ¾ÿÀÿÓÿêÿ0Ul‹”˜—ˆxfG<ßÿËÿ¸ÿ³ÿ®ÿ­ÿ©ÿ¾ÿåÿ ;Mp‹¯Ùþíת…V6 ßÿÌÿ¶ÿ«ÿšÿšÿ¥ÿµÿÆÿÛÿìÿ.PZhivtunib?+óÿÚÿËÿ¾ÿÏÿåÿ/<5)ÿÿÿÿùÿþÿ ÷ÿíÿïÿôÿðÿîÿâÿèÿèÿóÿ'(%üÿôÿôÿîÿëÿóÿõÿóÿðÿèÿèÿæÿìÿåÿêÿæÿíÿûÿ $ïÿÙÿ¸ÿ©ÿ¨ÿ®ÿ®ÿ¸ÿºÿÂÿÍÿÙÿîÿöÿ7EYeps_N1þÿòÿïÿíÿëÿöÿùÿ  ",=2åÿÎÿÀÿ©ÿ”ÿ…ÿŠÿ•ÿ¦ÿÉÿÎÿäÿóÿ7Oiy‹Ÿ¬¯¯©†VA8443-%%& 4Pmu{wcE.%ôÿåÿÛÿÅÿ³ÿ°ÿ¦ÿ¥ÿ¹ÿÄÿâÿ$<HMS\]^`^ghdfVDäÿÍÿ¶ÿ¢ÿŸÿ©ÿÒÿ÷ÿ-.:?Uk~’§ÄÑËÞn7õÿïÿñÿ&3380 .QožºÈÀ±•uN-úÿîÿçÿüÿüÿéÿÔÿ¸ÿ·ÿµÿÓÿ÷ÿ.Wvš£¡š”¦¶½»§Ÿs> Ïÿµÿšÿ¨ÿ¹ÿêÿGc†™»åýêÜĨŠhA&îÿÕÿÕÿÑÿåÿùÿ1Eidtr~wtppnkn]I32*$#þÿóÿïÿîÿàÿßÿßÿãÿåÿðÿúÿýÿ-=GKOE1íÿÚÿÆÿÅÿÁÿÈÿÀÿµÿ¸ÿ¬ÿ°ÿ¾ÿáÿ-8RUXUI?98<8:3457:FZdmlyw[O6($/&3Np•¥¯£‚sg]VL:' üÿ÷ÿ÷ÿ÷ÿ÷ÿõÿ !<GNFDM5"þÿèÿÎÿÁÿ¬ÿ–ÿyÿkÿjÿpÿyÿ„ÿ–ÿµÿÕÿûÿ#BXu……„„k[-çÿÛÿÇÿ¢ÿ€ÿfÿVÿNÿ`ÿqÿ‘ÿ½ÿîÿ.9F_\hs‡§¾ÖÌ˳™j< 7\ƒ™«Ä¸¢‚n]B1 öÿüÿïÿëÿßÿîÿûÿ$JVuˆyjO8$ ÷ÿúÿèÿàÿØÿÞÿàÿâÿæÿáÿôÿ)7APKLME;/ üÿñÿêÿêÿßÿæÿÝÿîÿõÿ)/'üÿòÿðÿ#*16EIXZy’™™’†uhO;*%!)@Vcz€~iDöÿæÿÝÿÒÿÔÿÎÿÐÿÛÿÔÿÇÿµÿ¯ÿ¤ÿÄÿßÿüÿ-CR[a[F8!   &<?DYakuvxk^PFMLH@;1?2:(0,:=FELXKD.'#õÿæÿáÿèÿðÿöÿûÿ0?WWWK<1/èÿäÿÕÿÔÿÙÿáÿåÿðÿôÿ2VbskupeM5þÿäÿØÿÉÿÁÿ¼ÿºÿ¿ÿÎÿØÿðÿ ! (øÿóÿñÿ .?L_cfb\PHG<3'ÿÿàÿËÿµÿ±ÿ¯ÿ±ÿ¼ÿÁÿÕÿñÿ 4?PWh|€„€€‚††gJéÿåÿ×ÿÍÿÊÿÑÿéÿûÿ%=`vަ»ËÍÐë•‚jaK<ÿÿíÿáÿãÿïÿ6Yt“£¸ÅÞÙââ×Ôñ—qI!úÿÝÿÆÿ¸ÿ«ÿ¦ÿ¡ÿ¡ÿ°ÿÉÿèÿ:@JLD&þÿåÿÄÿ¿ÿÿ„ÿuÿeÿlÿpÿ€ÿÿ•ÿ²ÿÉÿïÿ1Pio‚zkK?)ÿÿùÿ"(;IWi{€“›¥§ …nP+Þÿµÿ¥ÿ¤ÿ®ÿÍÿæÿ*;Yv‰•”ŒŒkO9ùÿÙÿ¾ÿ³ÿÃÿÒÿóÿ,@KPFE@@, ÷ÿäÿÕÿÆÿÏÿÙÿÃÿ½ÿ·ÿÅÿ¼ÿÀÿ¶ÿ¯ÿ£ÿ¡ÿŸÿ¤ÿ®ÿÀÿÓÿæÿöÿ-.5( ûÿøÿêÿêÿÔÿÈÿ²ÿ¡ÿ‡ÿ}ÿqÿ{ÿŽÿ¬ÿÄÿÙÿéÿòÿõÿýÿ òÿÕÿ¾ÿªÿ”ÿ‚ÿ}ÿÿˆÿ–ÿŸÿ¦ÿ«ÿ´ÿºÿÊÿÑÿâÿöÿ).')õÿÉÿ´ÿ–ÿÿŠÿ‚ÿoÿ`ÿSÿSÿXÿzÿÿªÿÄÿÝÿöÿ3Tmpkf_Y?âÿÄÿªÿ’ÿ’ÿ†ÿ—ÿ±ÿÐÿÛÿñÿ0[l‡•£¯Ÿz\6Ñÿ¨ÿÿÿˆÿ˜ÿ³ÿÏÿâÿñÿøÿ&)//>EPNJ6èÿÂÿœÿuÿXÿVÿ]ÿlÿŒÿ¥ÿºÿËÿ×ÿãÿôÿóÿõÿ÷ÿ2DSP?%úÿãÿÊÿÂÿ±ÿ¦ÿ¨ÿ§ÿÿ…ÿ€ÿyÿŽÿšÿ²ÿÇÿëÿ,Jo„{|aI/öÿÙÿ¯ÿÿƒÿƒÿyÿÿ’ÿ¥ÿÅÿãÿ*Zo€‚xvbZD7,' öÿõÿõÿúÿ #'5PQZPE70&îÿéÿâÿàÿìÿìÿ÷ÿòÿíÿðÿûÿ ûÿòÿöÿïÿÚÿ¾ÿ´ÿ¬ÿ®ÿ¬ÿ¨ÿ©ÿ£ÿÿ¡ÿ¨ÿ½ÿÉÿ×ÿêÿüÿùÿùÿ÷ÿúÿúÿóÿåÿÓÿËÿ¸ÿ¥ÿ¢ÿžÿ³ÿÀÿÚÿõÿ #  öÿÝÿÇÿÁÿÂÿÓÿáÿ;;HB:310.8-ñÿËÿ ÿ‡ÿjÿjÿnÿ‰ÿšÿ¿ÿÚÿ÷ÿ öÿìÿëÿäÿæÿàÿÝÿÏÿÒÿÍÿÓÿ×ÿÕÿËÿÂÿÎÿÔÿåÿùÿ ûÿíÿßÿÖÿÎÿØÿÐÿÝÿîÿ&525/*#  òÿÙÿ¾ÿ–ÿ…ÿpÿhÿjÿ}ÿ–ÿ·ÿëÿøÿëÿäÿäÿíÿ÷ÿîÿÔÿ¿ÿ¡ÿŽÿƒÿsÿÿÿžÿ«ÿ¶ÿ½ÿÉÿØÿáÿöÿöÿûÿ ,04-$õÿÏÿ·ÿ’ÿ}ÿtÿ|ÿ|ÿŒÿ’ÿ¢ÿ§ÿ´ÿ³ÿ¬ÿµÿ´ÿÐÿæÿúÿëÿàÿÓÿÏÿµÿ¾ÿ²ÿ°ÿÿ…ÿ…ÿÿ¢ÿ«ÿµÿ¸ÿ½ÿ·ÿ¯ÿ§ÿ¡ÿ¨ÿ¢ÿ ÿ¡ÿ¸ÿ¿ÿÀÿµÿ²ÿ·ÿ¿ÿÏÿÛÿïÿüÿ ðÿÛÿÇÿ°ÿ¨ÿ¢ÿ²ÿ¹ÿÃÿ½ÿÇÿØÿÔÿäÿèÿøÿ,IZpeJ1 õÿÝÿ¿ÿªÿ™ÿyÿqÿeÿ_ÿMÿFÿKÿWÿbÿmÿ…ÿ ÿ«ÿºÿÐÿÞÿÎÿÖÿÆÿÇÿ¾ÿÅÿÃÿËÿÌÿÑÿËÿÂÿ¶ÿ¢ÿ‡ÿiÿLÿ;ÿ,ÿ*ÿ.ÿ@ÿ]ÿmÿvÿŠÿ˜ÿ²ÿÑÿåÿñÿûÿíÿÏÿ¿ÿ ÿ—ÿŒÿ‰ÿŽÿ¤ÿ»ÿÎÿåÿñÿýÿúÿòÿîÿèÿçÿèÿìÿïÿîÿÜÿÆÿÀÿ¨ÿ‹ÿsÿ^ÿUÿWÿbÿpÿuÿuÿtÿiÿcÿaÿgÿrÿ}ÿ’ÿžÿÈÿíÿïÿìÿèÿæÿèÿëÿìÿíÿåÿáÿÓÿÍÿ°ÿ’ÿ|ÿ`ÿTÿdÿtÿˆÿ›ÿ°ÿÃÿÒÿÛÿîÿúÿ(6:;1üÿÚÿµÿ“ÿoÿbÿJÿBÿ8ÿFÿVÿxÿ”ÿ¾ÿÛÿòÿ 44.#ôÿÖÿ·ÿÿrÿSÿ@ÿ;ÿ>ÿGÿXÿcÿ~ÿ›ÿ²ÿÐÿáÿöÿ þÿøÿíÿêÿÚÿàÿÜÿ×ÿÍÿÀÿ¢ÿŠÿnÿaÿPÿRÿfÿ|ÿˆÿÿ³ÿÄÿÉÿÝÿâÿßÿÎÿÌÿËÿÈÿËÿÉÿÃÿ²ÿœÿÿeÿKÿ5ÿ.ÿ0ÿ?ÿIÿXÿkÿ{ÿŒÿÿœÿ¢ÿ³ÿ´ÿÃÿÖÿÜÿãÿÛÿÖÿÇÿ½ÿ´ÿ¨ÿ¬ÿ´ÿ£ÿ¡ÿ–ÿ‹ÿÿmÿeÿWÿXÿWÿdÿsÿÿžÿÍÿëÿóÿüÿ÷ÿöÿïÿñÿéÿåÿàÿÓÿÇÿÁÿºÿ¶ÿ²ÿ±ÿ¹ÿÅÿ¼ÿ¸ÿ²ÿ°ÿªÿ¦ÿ¥ÿ¤ÿ£ÿÿšÿ•ÿ’ÿ‰ÿŒÿ…ÿŒÿŒÿ–ÿžÿ°ÿ²ÿºÿºÿÀÿËÿâÿëÿöÿóÿëÿÝÿØÿÏÿÄÿ­ÿ¦ÿ ÿšÿŸÿ¢ÿœÿŸÿœÿ™ÿ™ÿšÿœÿœÿ—ÿ‘ÿ’ÿŽÿ‘ÿ‘ÿ’ÿ~ÿ~ÿtÿmÿgÿcÿaÿXÿSÿFÿ<ÿ2ÿ$ÿÿÿûþòþöþÿÿ+ÿSÿtÿ~ÿ”ÿ”ÿÿ›ÿžÿ•ÿÿ˜ÿšÿ˜ÿ‘ÿŒÿ†ÿyÿpÿbÿTÿLÿVÿfÿzÿ’ÿ¨ÿ½ÿÆÿËÿÍÿ×ÿãÿäÿèÿðÿóÿüÿíÿèÿÚÿ×ÿÆÿºÿªÿ±ÿ¦ÿ­ÿ²ÿµÿ²ÿ¹ÿªÿ¥ÿÿ˜ÿ’ÿŸÿ‘ÿ¡ÿÿ¡ÿ§ÿªÿ°ÿ±ÿ³ÿªÿ£ÿ”ÿ”ÿˆÿxÿwÿqÿkÿhÿ]ÿQÿQÿVÿZÿnÿ{ÿŽÿ¢ÿ²ÿ¼ÿ³ÿ½ÿ»ÿÅÿÐÿÍÿÂÿ´ÿ˜ÿyÿaÿHÿ%ÿÿÿòþßþÒþÐþÔþÛþæþóþÿ+ÿDÿ]ÿsÿ†ÿ‹ÿÿ›ÿªÿ©ÿžÿ‘ÿ|ÿjÿUÿ@ÿ%ÿÿÿÿþÿüþÿÿ ÿÿ-ÿIÿkÿ…ÿ™ÿ®ÿ¼ÿÌÿÕÿåÿìÿôÿîÿóÿìÿÞÿÄÿÿ‰ÿxÿcÿVÿQÿUÿFÿQÿKÿTÿ]ÿ_ÿmÿ|ÿ‰ÿ£ÿ¬ÿ¿ÿÖÿÝÿÄÿ¹ÿªÿ¦ÿ“ÿ‡ÿ~ÿ‚ÿ}ÿÿ‡ÿuÿ}ÿmÿlÿ_ÿZÿUÿWÿLÿKÿGÿKÿPÿRÿJÿFÿMÿZÿeÿvÿŽÿ¦ÿ¹ÿÚÿîÿüÿöÿíÿáÿÊÿºÿ³ÿ¢ÿ£ÿ—ÿ”ÿˆÿ‡ÿ|ÿtÿmÿjÿiÿsÿwÿÿÿ¥ÿ°ÿ¶ÿ®ÿœÿÿ‡ÿÿ¦ÿ¬ÿ»ÿÂÿÉÿ½ÿ®ÿ“ÿ‡ÿuÿoÿ]ÿHÿ8ÿ*ÿ&ÿÿÿÿ#ÿ,ÿ7ÿMÿaÿyÿ’ÿ«ÿ¾ÿÛÿçÿ÷ÿ÷ÿêÿ×ÿ±ÿŸÿ|ÿaÿBÿ*ÿÿÿûþôþûþÿÿ&ÿJÿaÿ‚ÿŸÿ²ÿ¼ÿ¾ÿ¼ÿ»ÿÌÿÅÿ±ÿŸÿŒÿyÿeÿTÿAÿ5ÿ3ÿ3ÿ8ÿAÿFÿOÿ\ÿmÿuÿvÿ‡ÿ•ÿ¢ÿ¯ÿ¶ÿÈÿÕÿäÿíÿüÿüÿñÿîÿâÿÔÿÁÿ±ÿªÿŸÿ”ÿ‘ÿÿ”ÿÿ…ÿzÿƒÿÿ®ÿÐÿïÿ+AKE7' ñÿ÷ÿáÿÕÿÈÿÂÿ³ÿ¬ÿ§ÿ°ÿÂÿÒÿéÿîÿÛÿ¼ÿ¢ÿŠÿkÿPÿ9ÿ!ÿÿÿÿÿÿÿ)ÿ.ÿRÿqÿ—ÿ¥ÿÀÿÊÿÍÿ×ÿÊÿÈÿÇÿ¾ÿ·ÿ³ÿ§ÿ“ÿ‹ÿ{ÿqÿiÿaÿZÿWÿMÿLÿPÿ[ÿhÿ€ÿ‘ÿªÿÌÿÚÿÞÿôÿþÿüÿûÿíÿâÿÕÿÀÿ«ÿ¢ÿŽÿ}ÿbÿWÿSÿOÿYÿ]ÿtÿ„ÿ¨ÿ»ÿÐÿáÿíÿ $(ÿÿìÿØÿÍÿÀÿ±ÿ¨ÿ§ÿ§ÿ£ÿ©ÿ¦ÿ™ÿŽÿ„ÿ„ÿ€ÿŒÿŽÿ’ÿ¡ÿŸÿ£ÿ£ÿ¤ÿ¦ÿ«ÿ¶ÿ¯ÿ·ÿÀÿ¶ÿ½ÿ¶ÿ¶ÿÃÿÁÿÃÿ½ÿÉÿÇÿØÿäÿáÿéÿçÿâÿÓÿÒÿÂÿ·ÿ¬ÿ¥ÿžÿšÿŒÿzÿvÿ`ÿ]ÿ[ÿVÿeÿjÿzÿŽÿ•ÿ¤ÿ¬ÿÅÿÖÿíÿùÿ÷ÿðÿÞÿ¾ÿ ÿ~ÿjÿ]ÿYÿPÿZÿ[ÿeÿVÿXÿMÿWÿUÿ\ÿeÿwÿŠÿ‹ÿ“ÿ‰ÿ”ÿÿÿ‹ÿ”ÿÿ ÿ›ÿ¤ÿ™ÿ ÿ‘ÿŒÿÿÿ™ÿ˜ÿ¢ÿªÿ¦ÿ²ÿ³ÿ¿ÿÀÿÐÿÚÿßÿßÿäÿäÿÝÿâÿÛÿÉÿ¼ÿ©ÿžÿ–ÿˆÿ‹ÿ™ÿ ÿºÿÉÿÞÿÛÿÚÿÞÿÔÿÍÿÌÿÉÿÚÿåÿìÿõÿ÷ÿõÿìÿóÿñÿùÿþÿ!÷ÿîÿåÿÞÿàÿåÿÜÿÎÿÂÿ§ÿ¢ÿ›ÿ—ÿÿˆÿ€ÿ…ÿ‰ÿ‡ÿ“ÿ™ÿ¬ÿÅÿÎÿÙÿìÿðÿïÿéÿáÿãÿØÿÌÿÄÿÀÿ±ÿ¥ÿ¡ÿ˜ÿ„ÿ{ÿwÿsÿwÿ„ÿzÿ~ÿÿ€ÿ„ÿÿ›ÿ¤ÿšÿ–ÿ ÿ¡ÿ ÿ­ÿ¯ÿÁÿÃÿÏÿÉÿÐÿÅÿ²ÿ£ÿÿ€ÿÿÿ|ÿyÿuÿ{ÿyÿŠÿªÿÁÿ×ÿêÿøÿ óÿãÿÖÿÊÿ¼ÿÂÿÀÿÄÿÅÿ³ÿ¶ÿ®ÿ´ÿºÿÂÿÒÿçÿøÿ !!"ÿÿýÿùÿñÿöÿæÿÞÿÑÿÇÿÉÿ¼ÿ·ÿ½ÿÄÿÒÿçÿøÿþÿ ýÿ þÿêÿàÿËÿÊÿ¾ÿÆÿÆÿÎÿÌÿÒÿÖÿØÿÕÿÓÿÙÿÞÿèÿéÿëÿèÿçÿÝÿÛÿÍÿÑÿÈÿÍÿÇÿÅÿÇÿÍÿÆÿÍÿÆÿÍÿÌÿÊÿÇÿÅÿ½ÿ¼ÿ·ÿ±ÿ²ÿ²ÿ³ÿ¶ÿ°ÿ½ÿ¹ÿÀÿ½ÿ¾ÿÀÿ¸ÿºÿ¬ÿ¡ÿ”ÿƒÿ„ÿ{ÿ|ÿ|ÿ†ÿ‰ÿŠÿ‘ÿÿ“ÿšÿžÿ£ÿ¸ÿÂÿ×ÿáÿêÿçÿìÿèÿóÿñÿôÿûÿüÿþÿüÿöÿóÿãÿÒÿÔÿÊÿÇÿ¹ÿ´ÿ¨ÿ¢ÿ›ÿÿœÿ–ÿŸÿ£ÿ²ÿ»ÿËÿéÿêÿåÿéÿêÿæÿéÿãÿãÿØÿÓÿÎÿÓÿØÿØÿÔÿËÿÆÿÊÿÅÿÉÿÍÿÉÿÊÿÏÿÏÿÆÿÈÿÁÿ¿ÿ¸ÿ°ÿ°ÿ¤ÿŸÿ›ÿ ÿ¤ÿ™ÿ¦ÿ²ÿ²ÿ´ÿºÿ¶ÿ¼ÿÆÿÕÿáÿôÿÿÿ ôÿâÿÚÿÎÿËÿËÿËÿÔÿÌÿÎÿÀÿ½ÿ«ÿ®ÿ£ÿ¢ÿ¯ÿ¸ÿÐÿÚÿîÿ÷ÿúÿíÿãÿÝÿÖÿÐÿÈÿÎÿÌÿÄÿ¶ÿªÿšÿ„ÿ‚ÿoÿxÿyÿˆÿ”ÿ¢ÿ¯ÿÁÿ·ÿ¶ÿ¸ÿ»ÿÊÿÙÿîÿ ! òÿÎÿ¼ÿ°ÿ¦ÿ¬ÿ­ÿ¨ÿ°ÿ´ÿ¶ÿ¶ÿµÿ¸ÿÃÿÅÿÚÿàÿêÿ÷ÿûÿùÿòÿåÿâÿÜÿêÿâÿëÿïÿèÿåÿÕÿÖÿÍÿÆÿÂÿ¹ÿºÿ³ÿ®ÿ£ÿœÿŠÿ€ÿvÿ{ÿ|ÿˆÿ”ÿ¢ÿ±ÿÀÿÌÿÇÿÀÿºÿ¯ÿ©ÿ¤ÿ±ÿ½ÿ¼ÿÃÿÅÿÂÿÇÿËÿÉÿÍÿÌÿ×ÿÒÿÍÿÃÿÇÿ¾ÿ¼ÿ§ÿ§ÿ›ÿ•ÿ—ÿ›ÿ¢ÿ¦ÿ«ÿµÿ¶ÿÇÿÅÿÓÿÌÿÌÿÅÿÁÿ·ÿ°ÿ­ÿ ÿ™ÿŽÿ‰ÿÿ€ÿwÿ|ÿ€ÿ“ÿ¢ÿ´ÿºÿÊÿÐÿÚÿØÿÞÿâÿèÿìÿêÿâÿÞÿØÿØÿÊÿ§ÿŸÿ“ÿ‹ÿŠÿ’ÿ›ÿ®ÿ¯ÿ®ÿµÿºÿÄÿËÿÕÿçÿîÿ÷ÿûÿúÿòÿëÿÞÿÛÿÙÿÙÿÑÿËÿÌÿÐÿÖÿÏÿÒÿÎÿÒÿÐÿØÿØÿáÿãÿÜÿáÿÚÿÞÿÚÿÝÿÚÿÕÿ×ÿáÿÛÿÒÿÐÿÃÿÀÿ´ÿ¬ÿ¥ÿ¥ÿžÿŸÿ”ÿ¥ÿªÿ¬ÿµÿ¿ÿÎÿÚÿâÿîÿéÿõÿåÿæÿÛÿêÿßÿèÿâÿæÿäÿÕÿÄÿ¯ÿœÿŽÿÿxÿzÿ…ÿ•ÿ¢ÿªÿ¹ÿÇÿÕÿëÿùÿ#8GHI@'ÿÿàÿ·ÿšÿ…ÿqÿgÿZÿdÿhÿxÿÿÿ´ÿÓÿãÿ<IZ_ZYE9!ÿÿîÿÛÿÔÿÌÿÃÿ·ÿ¸ÿ´ÿ¹ÿ¹ÿÆÿÆÿÜÿöÿÿÿ +18772//)!%28BJQU\P?1*%!%(*2$!$1?BSRUF?+ ùÿÿÿòÿöÿðÿëÿðÿíÿóÿøÿ&76<?-* ýÿëÿåÿ×ÿÒÿÎÿ×ÿäÿ÷ÿ',1565>;FEJG@@<1( !&"-/4075=;?73  ÷ÿöÿåÿêÿßÿÚÿÒÿãÿáÿðÿ&.;NOFLGJBR@7( !&.:DJHDA3)ûÿ÷ÿæÿãÿØÿæÿåÿßÿÜÿäÿçÿìÿþÿ$.+',%  ÿÿýÿøÿìÿêÿæÿßÿÝÿØÿáÿâÿëÿëÿùÿöÿþÿÿÿ  øÿúÿøÿôÿøÿðÿùÿ÷ÿ ),2CLOU[]XZVMF<=.( '.024:429,1'""(--4BUM]bmosu}tlc]\TGE/) úÿõÿöÿÿÿýÿ   "06),,//5-.-348:;;.(( -)1;;B=./&''$).<?LXXY\c`qrtg\WED- øÿ÷ÿõÿýÿ !/=HWZ]Y]VWNbSP=@<:<<?GPU_hmqgmlryzrvlrjfOE8.,&#())./-(6>G^sv‚„„„~rqb]WVOPGHLGUQ^`kuƒ„‡ž¢ ¦ž œ—~sdYUNNQNIUUiv’«·ÏàëëêÙÔú°šŽ€oa\MW]RY[ebpv{{…|ƒ‚…ƒŽ”“Œƒ„tl^PFG:B7=9@>@CJQQUbnhsrsniaYWPNB9532-022;@CUof{~‹Ž™““Љ‰ƒ„}‡‚~rnkaZYVPRQPP\W_ijkl{vuvuƒv€w„„tzkpfaY^X``s{|~|…–Žž­©§ ¦œ¢˜†~…ujbZONNPJAFIJSSeh‰Ž™›©“‰um[TID>13*&*-0=A=>A@FFDGFDHABC>@<EBJOPVSUc[cenqooovtsmnfi^e`_RHN?;>.@HGRY\hfsm€rtnke[[X`adhr|ˆ’œ¯ÏÍÓÕÒÛÍÊÈ»¥‹…qi[VTQUdjwxŠ©¶¶¾ÂÉÆÇÂÂÏÀ¿­¯¢˜’…‰…‹’• š¢ ¤”•˜ŒŒ‰Š†‚€‡ƒŠŽ“›Ÿ¦¬«·¿¼ÈÆÑÓØáÞÜÐÁ»¯¨’Šurj`]UXY`q|…—›¡¦¬¬®³´ÀÅÈÄ̿ĺ¹©°¹»ÎÏÛÜäÞãÞÜÔØÖâàäñîóâåáßÛãäìèíô÷ùúý  üöòóìèãÝÑÒÁ´¨š•”ŠŽ• ¨«»»ÂÈÉÑÒÝãæÞïíèßÚÞäâãààÝÕÔÂÀ²®¬¦«¨¨£§¨©¦ Ÿ¨¯¡¯ª¶¶ÃÑØÝçëôúþÿøóæßâÚâßèêñõ÷ùòúôøôûûýý÷óû÷þþ þõúòéäàâÞÛáÛÖÖÜÜèðîïòñö   øóæããÝÞÞÛØÛÔÚØìðöýíãÚÎËÈλ­¦š‘‰ƒ‡„‰‚Šˆ”•¢Ÿ«§°·Æ½ÁÃÅÄÆÉÐÌÏÊÎÉÅÅÍÒÚààèéíîõôóöñíñèæäÜØÑÑÕÔÕÛÜçèñõø  %4++.)$&þöóìîãôîêÜ×ÍÉÈÉÆÀȽ¼³¿Â󳯹¾ÂÄÍÙÕרÚרÐÑÉǾĺº²°°¨žœ’’™—‹“Ž—˜›¡ ¦¡¦£¢ŸŸš ›£§¯½ÈÐÎÎÌÔÝâÜßâãßåÜÙÚÛÏÅÊ̶³«« §¤¥¨µÄÍØßîîïðöñíöéìßâÕ×ÐÌÒÒÎÅËÓÝìùö ÿúåÝȾ¶®´®©¹«²·ÂÄÍÔÛßáãæçÛÙÌÉÀ°­£›‘‘¤¦«¶¸ÑÑæîû  íòàÙÏÓÈż¸¸²²¾¾ÅÈÌÆÌ¿¾¸­¤œ—‹ˆ…ƒy}xv}…‘“£ª»ÅÖÞìø$ ùðëëçæêåæëëöý   ÷îçÛÆ»¶¥–Œƒ…ƒ‡…’–«°ÀÈÔØØàÛàÛÐÒÌο¾¸¯¬©§§¬¯¸¹ÃÌÉçáæêíìïðëâß×ÎÉź¯§¤ ›”Ž„‚€€„‚œšŸ¥©¨ª«§©¨®¯®®°±»¼½ÂÄÆÍ×ÛçåìîëîòðõôõðóïïìæßÜÕÄÁ¶½»¸¶¼·¼¶±²¦®¥©©©ª§´£¨žœ£¬¦¤¤ª©ª¯¨°¥­ª¬¢§œšš’‰ƒ„~ˆ…††‚‹€ŠˆŸŠ‘…y…‰ƒ‡}‚€ƒ€€‚…„‚ˆ„‰Š‹ŠŠŠŽŠ…}yzoqtjljjpjqtw‡—•££¢¥®¬¨¨Ÿ£›˜Œˆƒ…ƒ‚‚~…Œ‹–˜ž¤¦©­¬¬©¨£Ÿš˜—‘‘Ž––˜–™˜˜ Ÿžª¤¤¤¤¦ž¢¡”Ž€urlhb]YYXZ[[b`kiy|vuƒ”Œ‹Š‘Ž™“˜šœœ ¥­©©¬¨·­®®«°©¥¡ž™”‹‹†}ƒ|ƒ~€…„Ї“›œž—œœ¢ª§©¥®ª¶±·ÁÿÇÂÇĶ·´²±®¸·¨¥¡›™–’•“Œ“’˜“—”—Ž—™’’“Œƒ“‰‘Œ•Š‘’š•š™˜–•–— •—’”“‘’¡›“’“’™–¢šœ¦¦§£œ’˜–—‘†“‹zyqpltsvvlsorrw~”‹‹’ŽŒ“˜‘І…„„‰ˆ€€zƒ|}|{~}{xztvkloriggdeefb`fmhkgdfnlqmgea]\_ZaX^QTDH@=6661/---42>8:?>=>A?=;8D>;B<@9@778;7=8=5899@:DNFDHMSCMA?B==>;A7=>7<@EDEONNKIMJPHKHFB?B<>490:/9624/+*"'!$%"*$)#!&(%,!#'#!$$&*'! +# !%(    )$       üÿþÿ              ûÿÿÿþÿûÿüÿöÿúÿøÿ÷ÿÿÿüÿùÿöÿóÿóÿüÿñÿñÿõÿûÿüÿúÿýÿþÿþÿþÿýÿþÿüÿ÷ÿ÷ÿøÿöÿýÿùÿþÿùÿÿÿüÿÿÿ ÿÿÿÿÿÿþÿ  !!&.'/'"&((-3.2/@<87D:<;@??BBHFFO@@=:<?968/7485==B:B:=CCGFKFFIGKHEJFFAFKFMHIKKHKNQSKSPTSUY[V]^_bdcgcggpjpomsuoptp{x|{y{vtorwztrnqtprwz|}}’Љˆ‹†ŠŠ–‹š‰‹‡‰‹ˆ„„†Š‰‡†Š†ŒƒŽŽœ¥¢“’¡¡¤¢¡¬¤ž——˜“Œ’™£”ŒŒ‰†„~~~~y~zy‚~xtq~p{mkbe_Z]_]\WUUX_ejkslnpss~|{…w}w{ˆ}yvtuvl}rllnlkglhjjmlonlkztrsuljgmg]dc\V`_aZbc]achbbXYOJL;C<925.#&"%!%!"!$" +)"$!#"" ôÿõÿíÿíÿìÿêÿäÿëÿäÿèÿîÿèÿîÿïÿíÿÿÿúÿìÿçÿçÿêÿïÿìÿîÿìÿåÿèÿåÿéÿÜÿãÿçÿëÿæÿîÿìÿíÿíÿìÿéÿåÿâÿæÿêÿãÿéÿæÿãÿ×ÿÕÿÊÿÂÿ¸ÿ­ÿ¨ÿœÿÿ˜ÿ˜ÿ›ÿ˜ÿ¤ÿ¥ÿ®ÿ¼ÿ¿ÿÍÿÑÿÖÿàÿßÿîÿçÿëÿéÿëÿãÿÝÿÚÿÏÿÖÿÏÿÀÿ¿ÿ³ÿ²ÿ«ÿ¬ÿªÿ¥ÿ¢ÿ£ÿœÿ§ÿ§ÿ²ÿ´ÿµÿµÿ¹ÿ²ÿ¹ÿ¬ÿ¥ÿŸÿ˜ÿ–ÿ’ÿ“ÿŽÿ‘ÿŠÿ‘ÿÿ—ÿŽÿœÿ˜ÿ™ÿ˜ÿ“ÿ›ÿœÿ§ÿ¥ÿ£ÿ¡ÿšÿ¡ÿ ÿ¡ÿ¤ÿªÿžÿ˜ÿ—ÿ•ÿ¡ÿŸÿ‰ÿÿ€ÿ€ÿvÿlÿjÿfÿYÿcÿYÿ`ÿWÿZÿTÿMÿHÿMÿNÿQÿMÿQÿUÿZÿ`ÿjÿpÿvÿrÿ}ÿ{ÿvÿpÿsÿnÿyÿxÿ{ÿnÿlÿhÿmÿkÿhÿhÿfÿ\ÿYÿ]ÿKÿ\ÿYÿ\ÿOÿMÿOÿ[ÿ]ÿaÿ]ÿ\ÿaÿ_ÿ]ÿmÿcÿkÿcÿgÿjÿcÿZÿJÿPÿDÿGÿ;ÿ7ÿ1ÿ7ÿ:ÿ1ÿ5ÿ%ÿ+ÿÿ ÿÿ!ÿ#ÿ.ÿ0ÿ9ÿEÿQÿMÿKÿLÿLÿFÿGÿHÿIÿHÿIÿIÿCÿ<ÿ;ÿ=ÿ4ÿ(ÿ%ÿ(ÿÿ ÿÿ&ÿÿÿ(ÿ.ÿ*ÿ.ÿ/ÿ:ÿ:ÿBÿDÿHÿGÿBÿ0ÿ)ÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ"ÿ%ÿ)ÿ,ÿ.ÿ9ÿ7ÿ<ÿBÿ>ÿHÿHÿGÿ@ÿ:ÿ,ÿ+ÿ)ÿÿÿÿÿÿÿ ÿÿ!ÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ"ÿÿÿÿÿÿÿ ÿÿÿÿÿÿ ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿ!ÿÿÿ ÿÿ$ÿ!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ ÿ ÿÿÿ ÿÿÿ'ÿÿ ÿ)ÿ(ÿ6ÿ0ÿ4ÿ:ÿ=ÿ3ÿAÿGÿGÿBÿ:ÿ7ÿ,ÿ.ÿ&ÿ%ÿÿÿÿÿÿÿÿÿ ÿÿÿÿ"ÿ!ÿ#ÿ2ÿ3ÿ1ÿ7ÿ3ÿAÿ=ÿ2ÿ7ÿ3ÿ;ÿ-ÿ,ÿ/ÿ:ÿ/ÿ*ÿ$ÿ*ÿ4ÿ.ÿ1ÿ8ÿ;ÿBÿDÿSÿRÿYÿUÿWÿUÿTÿMÿgÿcÿ\ÿTÿNÿ]ÿWÿSÿIÿFÿMÿ=ÿ7ÿ2ÿ4ÿ.ÿ#ÿ$ÿ)ÿ!ÿ)ÿ'ÿ8ÿ=ÿQÿ\ÿ[ÿ`ÿ`ÿdÿcÿkÿjÿgÿbÿmÿiÿnÿ^ÿIÿGÿAÿEÿ8ÿAÿEÿ@ÿ>ÿ6ÿ?ÿIÿXÿPÿTÿPÿYÿXÿVÿTÿSÿYÿaÿbÿYÿZÿ`ÿUÿNÿPÿ^ÿ]ÿ`ÿXÿ\ÿcÿ]ÿWÿCÿMÿIÿOÿJÿIÿLÿFÿEÿJÿSÿ_ÿeÿ_ÿfÿhÿiÿnÿzÿ{ÿpÿfÿcÿfÿ[ÿ]ÿRÿkÿnÿlÿZÿLÿGÿHÿ2ÿ6ÿ;ÿFÿ<ÿ3ÿ7ÿJÿSÿGÿJÿgÿhÿdÿ_ÿXÿgÿdÿmÿlÿ€ÿƒÿ~ÿgÿ_ÿjÿlÿkÿbÿ_ÿpÿhÿkÿeÿiÿ`ÿeÿdÿmÿjÿfÿoÿnÿyÿ‡ÿ“ÿÿ‹ÿ†ÿÿŠÿ‡ÿ~ÿ~ÿ†ÿƒÿšÿ™ÿÿŠÿÿ‚ÿ~ÿ„ÿÿxÿjÿhÿoÿoÿÿ|ÿ{ÿyÿzÿƒÿrÿvÿtÿ…ÿ–ÿ›ÿ¤ÿÿžÿšÿ™ÿŠÿ‹ÿ‘ÿÿ|ÿvÿ~ÿ‚ÿÿwÿqÿlÿrÿoÿmÿyÿzÿyÿzÿ…ÿŽÿ—ÿÿŠÿˆÿÿ”ÿ˜ÿ—ÿ›ÿšÿ—ÿÿŽÿ”ÿ•ÿŒÿˆÿ}ÿˆÿ‹ÿ€ÿzÿ~ÿ‰ÿ}ÿwÿpÿrÿÿuÿlÿmÿ€ÿÿŠÿ€ÿÿŒÿŠÿÿ|ÿÿ‡ÿxÿnÿgÿmÿkÿqÿlÿgÿdÿdÿcÿ\ÿeÿaÿnÿtÿnÿkÿhÿhÿjÿgÿlÿuÿvÿnÿuÿuÿvÿqÿjÿvÿ|ÿ}ÿeÿ^ÿ\ÿaÿZÿWÿUÿmÿoÿpÿbÿfÿuÿhÿaÿRÿdÿmÿgÿYÿUÿcÿoÿdÿXÿWÿfÿ^ÿNÿEÿZÿgÿ`ÿCÿHÿTÿZÿTÿLÿWÿTÿ]ÿYÿbÿbÿ`ÿXÿUÿZÿ^ÿQÿSÿMÿGÿAÿKÿ`ÿPÿNÿ4ÿHÿRÿXÿWÿ]ÿ^ÿ`ÿfÿ`ÿ[ÿOÿQÿQÿdÿ\ÿ[ÿ[ÿfÿiÿWÿYÿfÿrÿlÿSÿWÿjÿkÿQÿ?ÿPÿbÿmÿXÿOÿRÿWÿJÿ@ÿBÿRÿDÿ@ÿ<ÿAÿJÿQÿHÿDÿHÿYÿUÿZÿ^ÿeÿkÿoÿqÿnÿmÿjÿfÿgÿ`ÿqÿiÿmÿhÿmÿfÿvÿpÿgÿtÿmÿnÿlÿrÿbÿbÿfÿqÿ€ÿvÿuÿvÿ|ÿtÿtÿpÿsÿkÿ_ÿcÿbÿlÿXÿ]ÿSÿdÿbÿ_ÿ]ÿ]ÿrÿvÿlÿpÿ‰ÿŽÿ‚ÿwÿ|ÿ‚ÿwÿrÿ`ÿqÿ{ÿƒÿƒÿzÿ€ÿ}ÿŒÿ‚ÿtÿrÿiÿwÿƒÿ„ÿzÿzÿxÿÿÿ‘ÿ‡ÿxÿ}ÿ|ÿ}ÿtÿvÿ†ÿ†ÿyÿqÿ}ÿ“ÿÿlÿhÿŒÿ•ÿ†ÿfÿuÿ‹ÿ˜ÿ}ÿÿ‚ÿŒÿ‚ÿvÿ€ÿ„ÿˆÿ…ÿÿ‹ÿÿ˜ÿˆÿ€ÿuÿ‰ÿ~ÿ„ÿlÿpÿgÿ}ÿ~ÿ{ÿiÿtÿŒÿ‡ÿmÿbÿbÿmÿfÿuÿƒÿÿÿqÿ|ÿsÿÿ}ÿ…ÿÿÿ”ÿœÿ ÿ•ÿ†ÿ‡ÿ‡ÿvÿwÿjÿpÿwÿzÿsÿ{ÿzÿmÿaÿfÿgÿeÿaÿ`ÿhÿvÿ|ÿ‚ÿvÿ~ÿlÿnÿpÿlÿjÿeÿnÿyÿÿuÿwÿyÿqÿlÿmÿoÿlÿ`ÿdÿhÿoÿlÿsÿ…ÿ€ÿ{ÿ}ÿ†ÿÿyÿsÿ‰ÿŒÿ…ÿ}ÿÿ†ÿƒÿyÿlÿzÿ‹ÿ‰ÿ‰ÿÿ”ÿ–ÿ‰ÿvÿwÿ„ÿyÿ[ÿ[ÿhÿ†ÿˆÿvÿtÿxÿrÿnÿhÿmÿ|ÿxÿ|ÿ|ÿˆÿ”ÿƒÿxÿŠÿªÿ¢ÿ‘ÿŒÿ¦ÿµÿ¨ÿ™ÿ¢ÿ±ÿ¶ÿÿ—ÿªÿ¸ÿºÿªÿŸÿ±ÿ¿ÿÁÿµÿ¾ÿÍÿØÿØÿÐÿÞÿàÿÖÿÎÿÙÿàÿåÿäÿëÿùÿ÷ÿóÿçÿëÿåÿÚÿêÿüÿþÿïÿïÿðÿðÿåÿïÿöÿóÿàÿôÿöÿðÿíÿèÿõÿÿÿ (2.?,÷ÿ)&ÿÿùÿþÿòÿñÿþÿòÿûÿ %ðÿòÿýÿûÿúÿöÿðÿÛÿÔÿÙÿÝÿ½ÿ±ÿ»ÿÀÿ¼ÿ´ÿ³ÿÀÿ»ÿ·ÿ±ÿ°ÿ­ÿ¢ÿ›ÿŸÿ¨ÿ¢ÿœÿ„ÿxÿmÿdÿZÿTÿMÿDÿMÿ>ÿ.ÿ4ÿ%ÿÿ ÿÿÿÿÿÿÿÿÿ ÿÿþ ÿÿÿýþÿþ ÿ ÿëþåþÔþÓþÏþÌþÂþÇþ¹þ¹þ¼þ»þ¼þ®þžþ¨þ°þ¯þ«þ¬þ¶þ¶þ«þ·þÀþ¸þ°þ³þ³þ¹þ³þ¹þ²þ³þ±þÁþÊþ¼þÀþÃþ»þ¶þ³þ·þÂþÈþÖþâþáþêþïþñþóþþþ ÿ ÿÿ!ÿ/ÿ1ÿ9ÿ4ÿ6ÿ3ÿ2ÿ>ÿGÿGÿ@ÿFÿUÿWÿSÿCÿGÿWÿgÿdÿkÿÿƒÿ„ÿ„ÿŸÿŸÿ³ÿÀÿ¿ÿÎÿØÿáÿòÿ-Ho†”·ò6LbÖD›Ùg¶ü5m¨ÐÐÉÈÌÀ¥mF»t/Ö¡z\M.ßµ›œpO5B>5âĬ†hB  þÿöÿäÿîÿäÿèÿìÿ  (Pbk¸ð8`xˆ–»È¶Ÿ‡c2Ú¬k9çÿ¦ÿ^ÿÿÕþŽþFþôýºý“ýtýVý4ý+ý&ý!ýýýýõüðüóüúüýýüõüïüæüäüÖüÓü×üöüý>ýXý{ýŒý§ý®ýÃýÍýßýàýóý þ9þVþjþˆþ”þ¦þ™þ¤þ’þ•þþ†þrþdþKþ+þþÒý¦ýlý=ý ýáüºüŽüaü?ü üÐû|û1ûåú·ú™ú’ú–ú¼úòú@ûsû¤ûÕûöûü,üFü{ü²üýHýŒýÉýúý)þ=þTþ_þrþ„þœþ¾þéþÿ ÿÿÿÿÿÿ1ÿHÿfÿÿªÿ×ÿóÿ!&#,.7FWˆ¯Ù4ºübémþœ0µRvh\`w…¢æ-Ya\U>5jŠÌ N?Ê­µn,êÉŽ”j²Ø;»Zî‡@%ÊÿWÿëþ—þgþ*þéýÖýËýØýÅýõý þþíýÁý²ýžýšýŽý¼ýþýsþÿŠÿæÿ<8!÷ÿðÿóÿ O‹“z;üÿ²ÿiÿÿàþâþóþÿ)ÿÿçþ€þñýcý÷üšüHü2üFü‰ü»ü¾üŸü]üüÄûyûEû*û;ûkûªûÿû@ümüsü„üüÃüèü!ýdýÑýLþÁþÿXÿ~ÿ£ÿÍÿõÿVŠÅ?o}qeV@,  #!ýáÌ£qAøÿîÿäÿÜÿÆÿ¿ÿªÿÿtÿ_ÿCÿ-ÿ"ÿÿÿÿþéþÚþÏþ´þ¡þþ¥þÒþèþÿ:ÿ`ÿ€ÿ‘ÿ˜ÿ™ÿ£ÿ´ÿÍÿîÿ:b`K+Éÿƒÿ*ÿéþÂþšþsþRþ(þþÕý¡ýgýBý ýàüÊüÄüÈüºü¬ü¤üšüŽü„üyüvüiünü‚ü›ü¥ü§üüœü†ü‚üyüqüuüwü‹ü²üÛüýý<ýoýƒý«ýœýŽý©ý¾ýÙýñý,þ{þÀþçþøþ+ÿQÿoÿxÿ‹ÿ±ÿÜÿõÿ;aŒ”®Àì-\Ñ1Urz„™Áï5_~VSBF@?EEZ”Ÿ¤±¥tNPcL0µ°}‘¢ j\lbKIƒ–‰†žº«–™µ»™k…’pðë³ÁÙѶ¢š‚R&ãªzšÃF¢-¯62õ‹½—\¯ÿRþýürûûõúöúûãú¦ú]ú8úúú+ú—úBûüýàýiþ«þéþ%ÿTÿÿìÿ_Ó9}”aá^Íÿ¼ÿÛÿ!t×70¾‰Š¿V©ba%Ígý‰(µÿ(ÿ˜þøýlýÍü<ü¤û$ûÃúgúú¾ùwùKù&ùù÷ø×ø×øûø0ùsù¾ùú•ú&û²û9ü¶ü ý0ý?ý?ýFýOýTýCý[ý–ý¾ý»ýý^ý/ýýÚü·ü»üÖüþü=ýý¶ýÙýÙýÏýãýþ þFþ]þ†þ“þ–þ„þaþþ¯ý]ý.ýýý ýùüñüôüòüòüàü¸ü³üÎüýdý·ýþ§þBÿºÿ9·9¬œž€ðBŠÙ'€îtï< ¦ @ ö ‰  Ç ° µdÚ8~“bD5+@­ˆf-þJß<e w O BÙØÞž3ïÿjþýÔû×úüùùÁøƒøGø®÷Åöëõðô2ôÍóèó{ôaõ½öJøÞù ûíû-üüü9üküÚü‹ýˆþÀÿêø‡ªå!OpžÞýÌSÜ9Õ„4ÏNYÿ9þÖüzûEú<ùBø{÷éöö[ööÜõ…õõ¦ô7ôßóšó‡óœó ôÄôÇõîöøIùoú‚ûƒüpýUþÿÙÿ©’r%ä›GØiï[Ù%Љ‘¨9Ù`)Ûkß 4+)ÿ,þ@ý‡üü²û‹ûˆûûƒûûsûaûTû?ûLûaû˜ûþûXüÉü%ý™ý þŽþÿŽÿ¢”é"AG;üÄ&ë´›BÓÿ[ÿíþnþÌýý~üÛûOûàú”úSúúÈù‹ùTùù¬ø@øÎ÷a÷÷ööîöÔö±ö‹öpöjö`ö@ö!ö.ösöÓö:÷÷ñ÷?ø…øÄø&ù‘ùúpúêú”ûRüâüXý¤ýþAþeþ‚þ±þæþ%ÿwÿÜÿ=‘±¿ÕìÿûöM§ÓÿDÛ_Ú5—’ä9Žé<‰Ð) ´ Z î ^ Ç T Ñ % ~ œ3誎S™ÀÍöP꼦JÛ:ôàñ£ @ Ö*šÕlÞþÏüZú¥÷áô»òñðbïï6ïïúïðäïÚïð‹ðañÁòxô&ö¥÷þø)úû~ûŠûwû¦ûHüNý¹þx¤µŠòÔu4?ª@í,°÷ëa˜¾ÌÞíüüÿáþÑýœü,û›ù+øþöÚõÆô×ó'ósòÔñMñçð•ðJð?ð›ðBñ5ònóÓôsö!øÚù^û¶üÕýáþöÿ Ac®H…x : ¦ à ì ð æ ¾ • e O ? ¼ I º(— vÕ0Ñ ,èÿ¹þ¢ý¹üÄûñú=ú¨ùùøñ÷Z÷¹öö5õô/ôíóÌóãóRôôô´õ‡öH÷ú÷Æø‡ùQúûêûßüÜýàþÔÿÀkÛ 1%þ®Uõ˜LúÿwÿÒþ!þwý¶üüûXû¼úAúÏù‡ùIùúøŽøø²÷?÷Êölö(ööö.ö]ö‘öµöÐöâöèöãöèöêö÷?÷”÷øžø1ù¿ù:úÈú€û4üÙü‹ýbþ_ÿWQYdQ1 / d œ ê bºÜ÷(í—àXÐ-‚öÙ{88„±Ê‘ØÖžüI¼ ž ¡ ¼ é  :õjšÍ>¼þjýüNû‚ú·ùÚøÙ÷ÏöÀõ½ô¼ó7ó-ó»ó‡ô‰õ¢ö¹÷¥øùiù«ùòùHúÈú„û‚ü¯ýÖþÑÿšK3ÞºÅÀÝ)ájÑÿ/ÿ—þþÊý†ý/ýïü¯üfüüzûéú;ú¡ùù˜øøÈ÷²÷£÷Š÷m÷9÷äötööâõÂõ¾õËõ'ö´öj÷øÏøhùúÀúlû ü·üuýQþJÿx˜ÉÖÅ=ãH“Ó]”W#Ü‚"¦&¼Wú¡EÏ5¤ùpÌ+©ÿDÿíþ³þuþ>þðýžýIýëü‡ü#ü­ûGûóú úXú%úôùÒù²ù“ù~ùsùgùbùiù•ùÔù-ú†úÐúûqû½ûèûüüüüêûÍûÙûÑûÄû½û¬ûŸû€û:ûòú–úCúèùùGùù®ø]ø øÅ÷}÷%÷ÕöœöoöQöVöQöKöJöEö;ö(ööñõðõö-öjö¾ö!÷e÷½÷øTøšøÝø"ùtùïù´únû?ü#ý4þYÿ üTÃ#ú / ¸ v (àtPðÐñyÉi» ÂUm¸ó@[&#5²FÙEn=»‘x[ B ( 8 4 ­éÿ;þÇüUûÒùmøG÷yö~õôŸó3óûòûò9ó;ó”óÓóIôŸôíô:õõAöëöÙ÷ÖøÑù¢úNûÎûFü¨üëüÿüývý½ýLþVþ_þ\þMþOþ'þþÙý«ý ý„ýiý>ýýÎüvü*üðûºûƒû@û0û8ûûùú£úRúàùkùÿøŽø,øÖ÷ ÷p÷X÷9÷÷÷ñö÷3÷R÷÷¸÷ødøãøsùúÇúƒûhüJý:þÿðÿÐÇ™Yþ«DÜu‰çF”å     à”AÐXçbêXÝHÈAª ŽûWµÿ ÿJþzýÊü üuûÇú"ú‹ùùžøAøß÷€÷-÷óö³özö;ööèõÌõ®õžõ“õ õõÇõøõ:ö—öÛö7÷Œ÷û÷føœø×øïø6ùoù¦ù¹ù»ù×ùçùäùÚù°ùˆù[ùùÙø¤øeøøÒ÷u÷1÷÷Ûö“öQööþõæõÄõ õ™õªõËõúõ=öqö¹ö÷“÷øÙøªù ú¢û·üÜýùþüÿödžEß·ÅÂÌè    ¿ ­s+ߨ¿›‚1âæ k‘7݉'W–ѨYÖGb®$Fn-E7׌àˆü € ß ä>’&7ÿ´ýþûyúÀø~÷UöAõjôœóÿòlò òÆñdñóðÎð²ð™ðiðdð­ð¾ð ñ:ñ”ñÞñ+òŸòóSó•óônôëôGõÉõ7ö~öÝö?÷·÷%ø™ø&ù®ù5úÊúxûóûƒüìüuýÐýFþ•þôþAÿxÿËÿêÿ(JfIHåÿ«ÿƒÿLÿ÷þ¸þdþþÏýfýýÉü]üüÆû‰ûKû ûäú¾ú±ú´ú¾úÐúäúûûUû‡ûÅûüfüâüRýÅý9þ¿þZÿÏÿVçfâXÖF¿"|ÇX“Áè#Hw˜µ·§—j)Ù‘3å…2ᆹBÃ:§Wÿ¥þéý,ýlü³û÷úBúšùùhøß÷m÷÷ö“öö­õ:õßô~ô-ôßó ónóBóóïòéòàòØòâòôòó1óTóˆóªóÓóô8ô€ô¶ôõNõ›õáõ5öŒöÝö+÷…÷Ð÷8ø’øúøSù¯ùú|úêú[ûÑû1ü’üãü7ý€ý·ýîý þ]þ˜þßþ.ÿ~ÿ×ÿ(‚ÕoÀ)„åf×GÌ8Ë2»6µ@½Z Í Q Ö N Ú R Ý _ å i€þ‹ìYŸûW³Íü 61-ñ¶\ýüOª]µ  ˆ î d í | ¦ X èfèp÷€ôsçJ¤öQ­X·ÿÿ€þâý?ý üøûWûÍú0ú¬ù4ùÓø|ø$øñ÷¹÷š÷v÷a÷;÷÷üöúöóöðö÷÷÷÷ ÷8÷>÷N÷Y÷\÷i÷\÷q÷n÷u÷o÷y÷p÷t÷`÷d÷C÷1÷÷÷óöäöåöàößöÑöËö¾ö²ö°ö£ö¥ö™öœö™ö¢ö¥ö«öÄößöðö÷÷;÷]÷Š÷»÷ñ÷2øzø±øçøùMùùÅùú5ú€úÂú ûgû½ûüQü–üàüýTýýÇýþ6þ‚þÀþ ÿBÿ~ÿ¸ÿÕÿýÿG\s‰•˜Ž‘ˆ‡v|xfZE"ûÿÎÿ—ÿRÿÿÇþxþ#þÜý”ýKý ýÅüƒü8üóû¶ûtû@ûùúÄúŠúUú-úÿùãù½ù³ù§ù†ùŒùtùgùSùYùTùgùtù‰ù˜ù³ùÊùäùþù%ú8úXúoú™úú³ú¹úÍúíúû2û\ûûÇûüTü¥üðü=ý‘ýàýKþœþÿjÿ×ÿN·1¯4¾AØTÝgíx£9Ýf — ( ¸ 9 ° 4 ¾ :¤zÞ>µ„ítÓ.r§ÈÛèõéðæõáðúùâͬn<ç…rÞ:xÄï 2 [ “ à è  Gisv‚y‰‚ƒ‹ÿ–þÆýìü1ünû©úòù6ù’øä÷@÷¥öÿõ^õÃô>ôºó>óÙòjòò ñFñîðŸðEððÎï•ï`ï4ïïÞî¼îžî‚îaîRîMîDîAî7î=îJîYîuî‹î¥îºîàîï:ï„ïÃïðFð‡ðÕðñqñºñòqòÞòIó·ó2ô£ôõ|õçõ]öÁö-÷÷ô÷Mø¹øù‚ùîù`úàúNû·û üŠüòücýÑýBþ³þÿžÿÿÿfÃyÎi¨åV¤Â×õ /BQoo|zxX;æ¸D ÇX Þ™^ ½m§ÿKÿòþ¦þQþþ®ýNýóü§üZü üÅû€ûAûûÎú¡útúVú>ú%ú úøùíùñùçùêùïùóùúüùúùñùæùçùéùúù"úVúúÁúû?û€ûºûüNü«üÿü[ýÍý0þŸþÿ‡ÿüÿ~“–8Öc²x¯Rè| œ 0 « D « ( ¤ %’ëlà@ŸŠÔ`Ÿåú1X”Ó`”ÈÜêäÀœ@õ†ŸïC”×"^ Í ý 7 J Ut{wwuor…Áÿíþ þDýqü±ûâú3úù½øù÷9÷‰öÓõ'õŒôðóXóÐòLòÔñ_ññðmðûï†ï-ï×îîSîîéí±í‹ícíKí4í#íí í ííí#í=í_íŽí´íèí îmî¶îýîOï®ïðfðÂðñyñÓñ<ò±ò%ó¢ó)ô¨ô&õŸõöžö ÷„÷ù÷høÑø$ù‹ùôùbúÌú7û¥ûüüçüPý®ýþhþÈþ&ÿ‰ÿñÿR²xÎ$vÌ^™Çè%DRk}–š¶ÉÐÁ´—j9Ô’OÔ‘YãœXÕ€4åÿÿÿ¹þeþþ¤ýFýðüü*üÒû{û-ûÝúúAúú¾ù‹ù\ù3ùùëøÚøÎøÇø´ø ø’øwøiøaø\øZøaøiøˆø—øÃøðø&ùTù¥ùèù/úlú¯úýú[û¾û=ü¥üýšý(þ¼þKÿúÿ–,¾g¯QÁ2ò³Y  Ä v  È l ñ ô_Á®!™„fÅF·ÛHmËFz£vS ÊfûpÐ&\‡³æ+It ¸ Í È ÒË£œˆ„uƒ²Öÿÿ?þmýüÀûöú$úNùø¥÷÷ö9öŠõ×ôAô¥óóò÷ñpñëðmðòïoïøîšîCîÿí´ípí/íðì¸ì”ìuìNì3ì.ì"ìììì5ìFìRìpì•ìÏìíjíÆíî€îãîGï«ïúïWð¤ðñkñíñhòõò‰ó!ô¯ô=õ¹õ7öªö÷†÷è÷Kø²øù’ùúùxúóúoûÞûRüÈü3ý•ýþýcþÀþÿ†ÿâÿEŸb¼lÉh¡Óô ,:Sh|¡½Ãǽ¤ŒX#é¥dí·ƒL)÷¼|Dò¤Hóÿÿ%ÿÃþpþþÈýnýýÂükü üÓû„û9ûïúªúmú-úüùÏù¡ù~ùoùYùFù5ù/ùùùçøÔø²øžøŒø„øxøwøø«øÛøùFù‡ù½ùúù<ú‚úÓú.ûšûòû\üåüiýÙýdþ ÿ©ÿ8éšIñ¹|7í—c™G ò ¥ ? á • " Á >ÚkÌZ·JÂ?Ú4®×@sÁâ]G›ÎÑå¿ÁT)ÂuéY×]‚ÄöGh ¡ ± ª · ¢ wxa]rƒÃÿßþþ3ýUüû±úøùùAøq÷Ÿööõ;õ£ôôbóÓò6ò©ññ‘ðð’ï%ï¼îZîîÅí…í;íìì«ìgì:ììîëÐëÁëºë³ë¾ë¿ëËëîëì)ìEì…ìÍìíhíÈí&î‹îðîZï³ïðzðïðkñññqòó–ó#ô¦ô+õ¦õ öŽö ÷r÷Ý÷Hø³ø.ù¦ù%ú–úûxûíûeü¾ü,ý”ýôýhþËþ-ÿ•ÿòÿl»qÃm¶:u Óø':`vŠ—¢©¢—nJ Зa,ü»S ñ¸|Bù¦Rûÿ›ÿLÿúþ¥þZþ þ¼ýwý*ýÕüŒü@üùû¡ûmû'ûöúÊú–úkúNú1úúûùêùÊù«ù—ù‰ùuù^ùKùFù:ù<ù?ùZùjù–ù¸ùéùúOú„úÊúû\û¯û ügüÐüFý¼ý6þ¾þMÿàÿw§C߉?þ¦SäŠK  Õ † % ê – ´EÞTÂ<¢Ÿ#“è<x«ï]pÇ#nä}¥›¶•^ßhqÒ6c Ð÷*s ž ˆ € P<-ÿ/N}ÿ™þ¿ýÞüü;ûOú{ù—øÅ÷ûö+ö…õÒô*ô‘óðò`ò½ñ8ñ©ðð£ïï¾îTîî©íbííÔìŽìXììçëºë¢ë’ëwë}ëxë~ë‚ëë›ë³ëÖë ìHì‹ìÛì?ííéíGî¥î ï`ïÎïGðÃðKñÜñkòó™ó'ô³ô.õ¬õö–ö ÷z÷ô÷^øàøSùÑùSúÑúVûÇû6üªüýŒýìýVþ¼þÿ‚ÿÛÿ5öR°à6€Îù.X‡š¾ÐáòøøîݲŒ^+í·H Ò¡m6ü¿x/à‘Mìÿÿ8ÿâþ}þ4þÓý‚ý,ýãüšüEüÿûºûwû7û ûÒú úoúFú.ú úþùâùÐùÌù½ù¬ù ùŽù‚ù{ùqùpù~ù—ùªùÚù úDúzú¶úìú(ûfû±ûüSü´ü ýŽý þ—þ%ÿ¾ÿf¥AÜ€-Û{,ûÊ~V & î ¤ c  Ì vštôbÉHŸùS¥õ0~°í8›X´ü%^f‹l8/†®ä,`z˜’ ‹ y [ 9ñÙÞô$>cÿyþýÀüÒûöú ú%ùEøm÷©öóõFõ‡ôÙóBóòòvñãðWðÉïRïáîzî(îÃívííÌìŒìJììãëÀëžëƒëmëië^ëZëUëWëVëgë„ë®ëìë0ì‚ìÖì=í˜íøí]îÄî3ï“ï ðˆðñ ñ;òÚòró ô¤ô9õ¯õ ö™ö÷w÷é÷cøÕøTù×ùOú¾ú9û³û,üŒüÿüpýÕý?þŸþ%ÿ…ÿñÿT¾vÜH£þV¸>~©Úù8BXcdngO0ל]à¯uN üÄŠWÂu!Ùy*Üÿ‰ÿ@ÿéþœþPþþý°ý`ýýÇünü+üäû¨ûbû.ûûßúËúÂú³ú£ú‘úú|ú{úvúoú{úvúwúˆúšú³úËúîúûAû{û¹ûóû0ümü¾üýfýÃý2þ¯þ*ÿ¸ÿMõ*ê©NË;ì¾{ ( ô º |  ß Š „‹øhãOË?½7|Åq£çWª ŒO‹Ý&8&Ú‰1ÅF|Ì>j‹µÊç( &   éÓ¶¡›‘§ÓãÿIþcýˆü¤û úªùÈøñ÷÷RöŸõâô8ô‘óêòVò´ññ‹ðð|ïîî‡î'î¿íví(íçì‘ìMììÙë³ë˜ëxëoë[ëQëGëKë:ë3ë?ëQëzë£ëêë-ì~ìÞìCí¨íîsîçîNï¿ïBðÃðUñáñ~ò$óÁóUôîôqõùõnöìöf÷Ø÷MøÄø>ù¸ù-ú¯ú+û¶û#üü ýuýàýGþ¯þÿ‰ÿýÿnÒ8ŸlÒ+ƒ×*wÄÿ0^v“žŸ¡”Ž~oJ$üµ€> Å‘a.Θl-ö¬^«a¹ÿiÿ!ÿÒþƒþ>þðýŸýRýúü¨üXü üÛû¢ûlûEû û û÷úðúëúçúíúîúýúû"û.û8ûPûdûyû–û¹ûæûü=ütü°üìü0ý„ýÞý;þ€þëþ_ÿÎÿIØzÀ’Wè¹}B É  : â “ P Ç`zõ‹a¹f°g¦ý<’÷oÒHïhæ^š×ÿ'ÿß°_ Ÿ. î2\™ÁÄÒçÝËß ó Í ² ¢ €vgkc_px“ÿªþÑýþü)üAûjú‹ù¤øê÷÷]öõÞô(ôvóÙò/ò‰ñøðVðÙï`ïï§î=îõíŸíTííÓì…ìCììÕë¦ëŒërë[ëWë\ëcëlënëqëŠë´ëåëì]ìªìëìRí·í!î‹îïïð¦ð8ñÍñtòó¢ó;ôÓôUõÝõnöêöq÷ð÷røùøqùíùoúìúXûÃû<üüý‚ýþdþÓþEÿÆÿ7ª•ˆö[´mà f«ñMxƒŠŒrK3ç°’U'íÄ•sF Ó›bÍ#Õ+Ù}%ÎÿsÿÿÀþmþ þ±ý_ýý×üŽüZü8ü üúûáûÞûÚûÌû»û û™û‘û’ûû‡û”û—û§û·ûÌûïû ü1üQüpü”üÀüüü4ý†ýõýQþ¹þEÿ×ÿcýªj,Ú«{NÞÆŠ Q % ñ « N ü ‹’÷iÇ&…öfÐ6É(Œ÷cî|²_ìhÉX¦£¬~?çuÒJx}Ÿ®Èèùüõ Ó · ¢ € _PHCOzÀâ1ÿLþuýŠü™û¤ú¹ùÚø ø2÷dö¢õàô#ôbó»òòoñÒðKð¾ïTï÷î”î=îâí‘íDíôìšìVì#ìÚë°ëëëiëTëXëRë=ë%ë&ë.ëBëeë¡ëÖë(ì{ìæìPí·í0î¬î,ï¬ï7ðÍðXñøñ›ò@óäó~ôõ¢õ(ö¥ö"÷ ÷ ø‰øýøwùçùdúÛúKû²û(ü˜üïüRý¿ý8þ¦þ$ÿœÿ˜÷iàNÄ+Ÿk´ò&EY[\F"êͨ“yO&߬‰R,ûÓª‚JÚ‰Eó´mÄwºÿ^ÿÿ þ@þçýžýZý#ýùüßü¿ü³ü¨üŸü•üˆüüüoüjüpüsürüwü„ü˜ü¬üÁüÝüöüý?ýpý©ýçýþgþ²þÿgÿÐÿB³?Êq'ä£jLëÇ  ‚ ] : à « aŽ•ï[¿.êK›á:˜ØD¼[Ðf°7¼3™ç/N_M ÍrîN‰·Ú#53bˆ^ à ” T /÷ç÷ô))*ÿ/þ7ý5ü&ûúù/ø]÷xö£õÏôãóûò"ò{ñÂð<ðµïCïÎîhîî·í^í í»ìsììÁëkëëèêžêê]ê<ê!êêúéééçéòéøéêQê˜êéêAë¨ëì–ìíªíDîÃînïðÅðvñ2ò óÏóŽôHõýõ£ö?÷Ê÷`øèø|ù ú‘úûœûü”üýhýÁýþ[þªþúþMÿ³ÿ xêTÊ,˜táVÈE¸0›\ Ñù- ÷ͤ}H Æx²Mð V ÐŽ]×Aå†1ÕrÍÿ€ÿ?ÿñþ¡þKþôý•ý@ýõü©üvü>üüøûÝûÓûÎû¿û½ûµû¾ûÎûèûéû ü'üXü¦ü÷üOý¢ýüýSþ¢þÿrÿðÿt·f*ÙÔºÙê S ¦ ” Ž ŠþG¤ÆÜµfñ"Žt9ü›3TyS™jÙÁÃì#[ “ ® ¾ Æ  $TªùoÒH]oXOÿ9þJýqü¶ûùú4ú’ùÚø ø/÷döºõùô`ôÜóŠósó^ó\ódóŠó¦ó¶óÛóëóôKôŽôÐô5õÀõMößö‰÷!øÁøSùÙùWú¿ú9ûœûü—üý£ý!þ’þÞþÿ5ÿ%ÿúþ·þ]þþý ýcý ý¸üeüêûyûäúgúêùfùùºø‰ø^ø@ø1ø*ø?ø=øJøeø‘øÓø ùnùÑùQúÒúGû¦ûÿû<üpü†ü–ü—ü¡ü¯ü²üÕüâüäüîüìüòüêüíüòüèüÝüæüûü-ýcýŸýùý[þ¶þÿdÿ«ÿõÿ5n®Ü#):IPI/òºƒ0ßÿ|ÿÿ¬þ:þ¼ý6ýÁüMüåûˆû(ûÛúúSú!úéù©ùqù%ùòø«øløøÃ÷„÷B÷÷¼ö~öOö0öøõ¿õ«õ«õ³õÛõönöÐö@÷Ä÷Søèøƒùú³úDûéû‚ü4ýðý»þŸÿqZJP@. 2G€ Ç  | Ú{ø‹/™tÍ"Ý#&8( *,m-é.#0ê0Â1á1 2£11L0 /ò-,*·'Ã$¹!xhQ\¬ p%þoûðø8öµókñ6ïxíÿëë^êçé›ézé_é5éFé8éLé•éêëúë"í9îFï0ðÞðŽñüñuòèò‚óEôøôøõ÷ øüø·ùú3ûÑû`üìü§ýKþÿèÿÎÇ ooßé÷Ä„1·J™ó".(ÿ·ý0ü†úÕø÷õfó¯ñð•î&íúë­ê”é™èæçˆçDçˆç èÌèùéWëí·î”ðò’ôÊöýø†ûþ§\ó“ñ  ÜS´×ÚžJÎ:Œ‘{3²Ny†Œšž›‚ o _ ?  Ïkš6Æ(ÿ}ý¼ûõù(ø>öGôdò°ðï˜íLìëê$é8è}çÙælæýå®å¶åïåƒæKç:è`é„êÅëí_îÁïúð0òóÑô+öP÷yønùFú ûûüZüjüüuüjü@üüüæûËû´û¿ûàûünü¸ü*ý½ýFþÆþ-ÿšÿL§Û:ºIðt2½wþ¸È£ ­ v à IâÔ{‘Dbr ©"Œ$¾& ) ,ý.1ý2ª4•6 89_9ò8ª8Ò7È6]5‹3œ1ð.á+ 'ü"Ý™é ì?ÿNú¿õqñ×í˜êtçSäCádÞõÛ9ÚgÙMÙIÚùÛáÝ£ßÎáöãÊånçÖèãê/íëïýòö@ùükþúÿ šþpáeFß:'¤õ1‰÷—‰i‚H§ÿåþìýôüµû:úËø9÷Óõsôó®ñ4ðÊîí€ë°éÔçõåäwâRá}àïß·ßà„à>á4â\ãÍ䑿Ùè˜ë´î=òö8údþ~ƒ3 ¯ ç=[b' ¡"Ô$x&˜'å'„'&X%ð#="V KB÷›ý-Ö £“Á„ý7û7ù|÷Õõ ôkòÎð€ï;îíæëëvêúé‹ééŽèèlçøæ“æ‰æÆæMçè:é™ê%ì¸íGï¸ðòœóõ·öiø/úü$þåSj!†©’u§Íá¾Pÿ•ý¯û¬ù’÷dõ+óñJïÊí†ì•ëë«ê‰êŒêÔêXëìõìî†ïñªòVôêõi÷õø_úÃûýŽþ%бµt Ù Ò ž7¸€¸´ÝùIÑ ½"^% (¨*V-‹/˜2ž5·8H;ž=o@áALC”CÄCXC@Ab?Š<ä9×6 3A/¢*ñ%Ôú3%k÷”ï8èîá2Ý-Ù֡ӃѸÏÝÍ}ÌóË¡ÌζЋÔ+Ù}ÞˆãÜèŽí}ñ<õøøÝüeAYœ p"Ym¯ø¢›]O=^¨à q º ˆÞÿiéýÙû4úÛø>ø…÷÷Iöaõ$ô†ò¶ð¿î¯ì™ê¢èÌæåvãûá“à&ß—ÝÜ­Ú<Ùö×êÖÖ¶Ö<×^Ø#ÚŒÜ-ßâNåÉèœìºðJõ_ú¨ÿ4í óÙ4ð"&´(ö*-½. 01m161;0u.Ë+G(V$ Òx;( J|ÁÿãûøXô ñî¦ëªéPè’ç(ç.çWç„ç¦çÎç=èÃèXéôé¾êäë,ídî]ï-ðÓð9ñ¤ñ.òóô'õ‰öEø)úü–ýúþ,.Õ¾¢whXÃÌsÏÚ©ÿXý#ûðøöLôöñtïãì&ê ç[å=ã}á!àWßßAßàßåà_â äêåòç5êÏì–ïpò!õ²÷eúý~ÿȹŸ` § K ê E äF®Ìq¬¶`!.#_%N(î*µ-Ì/Þ1µ47<9f:<>P?Ó??Ã=þ;59á5Ë1-ù(ì#a“M‡Zþö2îÂæ¿ßÏÙ€ÕøÒ»Ñ?ÑÑýÐÑeÑMÒ7ÔÝÖTÚïÞ—äíêEñM÷Ôü”¿ß ÿ ¢ZÜ^T>N R…… ; C #éuÿÚüúH÷ïôóÊññðxðqðSðùïfï¾îäí¡ìöêé-ç§åJäïâkáößÃÞ»ÝâÜòÛýÚÚSÙêØÙîÙIÛîÜQß`âæ9êcî¬òöö‡û_ê )AG#''ï)ë+)-õ-M.`.ú--˜+¡)*'ÿ# ‘†ak žíþ0û½÷œô¸ñúîXì×éÁçNæWåðä!åëå=çßè™êIìÃíïHð…ñ¢ò¾óËôõõJ÷ø’ùOúÎúûVûûçûiüýÐýÉþÜÿîÉtá2v¶è1c•¦’%Cû^…þXüÿù’÷>õèò¥ð{î]ì2êèáåÄãÒá àÆÞã݅ݲ݈ÞÎßoálãºå`è$ëîí­ð©óÈöÚùáüÕÿ¼R ' É Ex‹n¨¼¯TãžcªDhOy!º#)&œ(+ÿ,T/‚1´3ü5×7Í9“:";Ð:¡9®794×0%-²)§%!ýpyi ¡ÿÐö=ïèÐá­ÜáØÐÖ¢Õ.ÕXÕËÕkÖÀÖÇ׎Ù~Üàä-ê"ðEöãûÿvb È ;h´Ð´Nñ”t’EV ‡ Ýò<CIþçûeù²öô.òUðï/îèíî'î,îøí­íâìÄë‡êé[çåäÉâ›á«àÄßùÞ8Þ‡ÝæÜaÜßÛxÛ¢ÛmÜÑÝÄßOâŠå;éAícñ·õúŽþÒÉ Ä­k¸#¸&)Á*ƒ+½+}++* (¾&w$¦!5$‘• ‘Úpý„ùö&ó`ðøí¹ë¾éýçvætåääúäåÐæ¡è´êí{ïÂñ°óõ*ö÷¹÷Eø›øëøù^ú{û~ü‡ý]þÿwÿÀÿéÿéÿ/(ÒƒòUu/ŽÝ=žÜÿêþàýŽüÛúëøÚöœôAòåï±í¨ëÊéè‚æå²ã]â6á)àßP߆ßCàˆáãæ¼è•ë—îÏñÙôª÷úüÿ‹‰ë ÿ ÎBaÊê!U¤¶…5+ÕÜ-çëê-"²$©'§*’-D0T2‚4-6Z7(88ï77º5ï3ð0c.V+Â'„#ÇxEÓ »uúóžì2æžàûÛïØŒ×€Ö1Ö_Ö×™×pØÚ3Ý­à¬äjé@ïÜô|únÿŽD- q×]ƒ²H»Qvk+ ‡ ì1äýeû€ø•õíò‡ðÈîoí©ìnì¬ì$íí×ìmì¼ëÎê£érèîæšåyä„ãÎâ¿áïààYß ÞÞÛÝYÝ Ý&ÝåÝ(ßÎàãânåƒèì ð@ôyøÈü>ð¶ j"—¤@ b#ã%Í'í(d)e)&)(c'•%D# :UäF dÕzý†ùöóò=ð¸íië`éŒçæå«äÓäxåÂæŠèÈê0í¥ïòGô?öÀ÷#ùLúOûü‹üÖüýnýæýNþÓþ.ÿ‰ÿËÿE> Éÿ›ÿ‰ÿ£ÿ±ÿ¾ÿÛÿ°ÿ8ÿ§þåýýüåúyùø_öšôÈòÜðï0íiëµéè›æ"åÎã´âÚáPááNáûá!ãÄ使"éÒë»îªñœô‹÷Vúýtÿ¿CZ& î º Lo†Õ .+ ‚í_ZH'å—© ¡!T$v'’*e-Â/2„4ú5¾6å6%7ü6Ì5Æ3H1/“,7)é$‚ ‚ºV ÌýÊöQð8êeäºß-Ü,ÚÂØø×Òר ØVÙ/Û·ÝáÂäéWî”óëøÂý° X —Àí‚~ñ‚FH´ w É”Êþ_üÚùñöÎó=ñûîtí5ìEëíêýêxë”ëdëë­ê<êvé°èçaæ‹å¶ääCãšâ âBá¨àEà à€ßÿÞæÞoßOàáMãvåè=ëïîÛòÅö¾úýþhÒA ¤êÏO‰I"t$ì%Ñ&8'7'·&Å%;$"q@›ˆ>¹ ³™þÍú(÷ÜóéðOîÝëÄéóç—æ©å=åpåæbç é!ë`íŸïµñRóµôÓõûöè÷¯ø|ùœú!üÄý,ÿe3¿øñ±LÙpWx´Æ¨s!¯ÿÿþ@þ”ý ýzüêûdûÝúú5ùøÝöuõ×ó#ò}ðÞî\í×ëgêýèÓçÁæ™å‘ä¿ãgãxã÷ãâä-ææçêjìæîKñ·óö}øÎúýnÿÑSŸª{ 4 È ý±ðI­>¯±yKA:&&‹ƒ§Ù #Y%»'2*¡,/Ý0]2¹35ô5â5è423z1/å+n(ë$¥!Ö–› ä£úôµí½ç¢âß$ÝÜŒÛÛóÚÙÚ ÛܦÝSàºãþç#í®òMø8ýQ¬¢T ã uÔ2oNceJT¹ÃÏ ) ¶hHFWýýLûCø$õMòÚïî‡ìœëë'ëoë¨ë¡ëIëÁê;ê‘éÏèÐçÁæÏåå äätã°âûá‰ááàïß\ßß߆ߩàMâ?ätæTéŸì:ðÃó\÷1û-ÿçe ÉË¢ÿé2!ð"8$Þ$-%%Í$â#Q"$ N kWç k @]˜ýúØöÛó'ñžîWìTê®èrçÉæ¾æ8çFè˜éMë(íïñÅòsôëõJ÷„ø¡ùú=ûõû¾ü±ý þiÿ {ÄéØˆ‘ÿ+ÿêþ³þ®þÂþÐþÊþ¢þlþ(þÍýYýÌüBü¶ûûeú”ù¥øŒ÷|öCõéó{òûðnïÎíì…êé÷ç+ç˜æ\æVæ¥æJçFè`é¢êDìLî”ððòRõ»÷ÿùDü‹þ»Ù°ƒ^:  { ¯bðYÛsU&F¾tÇ •"ß$N'ë)u,º.ÿ0Î2T4O5ã5Ï5z4•2û0%/-'*'ã#_ VÞ ^"ûˆô»îZéöäâJàWßÞÂÝïÜÜüÛ¹ÜÞ?áìäséŒîô4ù‡ý÷Æ; – ‘p?«+0Þ#g þ XŽó ¯þÖûÅøëõ:ó*ñ£ï¨î3î&î˜î(ï8ïìîîíì ëêÊè·ç¶ææ…åûä$äãâœádàdßfÞVÝŒÜ*ÜPÜÝfÞ%à â1使ÏéíŒðDôIø½ü{;ü Im'l9i^!¾"Ð#$Ê$Ÿ$¤#"¹åšáöè õ JÛ¥ÿ^ü>ù/öKó¦ðCî)ìƒê[éßèÍè(éšé\êTëgì˜í½îðvñ6óõ÷öø°úIüýþEÿÉÿ"T…Çô÷Ü,«ÿ+ÿÕþ†þWþ$þþþ$þ#þâýrý´üàûùúúöøè÷åöèõÒô’ó>òÉð3ï–íì·ê®éåè„èdè•èé´é¡êë­ìäílï6ñAóvõ§÷ÛùüDþKÉfúd­ f ¯ ïüôÆœnÇÀåSþéH ¹"%O'K)=+e-•/r13p4Ç5r66‰4–2R0¨-A*r&þ" ìË£ pµâùAóyíÅè„åãã8ãòâÅâ©â\ââ â¤â(äËæNêóîôFù¦ý1éé~Õ. r ? ^[omI‡Z à CÆà«HLÞþ0ýûÚø¿öõÂóJóFó¾ócôõnõ'õ)ôÀòYñêïIî’ìóê”éDèýæ¯åäEâoàÀÞ+ݹیڮÙNÙoÙ%Ú[ÛôÜ߀áSäiçÐêsîAòUö®úJÿ— 0üJ‘¦„ !!P!û ! ãÔÌlÚc  .¤`ÿ7ýûùòöóôBóåñþð€ðnð´ð,ñµñAòÙòNó¯óàóôVô­ô.õÎõ†ö.÷Ê÷Rø¹øúøùùù4ù`ùÁùCúôúÑû§üiýþ¬þ-ÿ£ÿ¥/«$™èâz°‘>ÿÝýdüÅúùR÷ŸõÓóò/ðXî ìëÉéâèTè!èBèÏè±é¾êõëaíöîÒð¸òÈôðö&ùCû@ýÿ÷©[ü‚â* z ™ ‡ Mï˜`J ñýSú7R}½!$±&)R,¼.Ç035Ï6»7ˆ7a6Î431.£+”(k%Z"¨ 0s |¾ÿrùóIî‹ê¡èâç‘çç*æ åNäúãLäzå–ç¨êäî¶ó°øÄü®ÿmxf[ŠÙV + x ¯ › G u›R«Îÿlÿ™ÿîÿšÿRþküaúÌø×÷¡÷4øSù¼úõûùücýúüû¬ùˆ÷õÌó+òuðî²ì¯êwèÞåÃâ¨ßÆÜ}ÚÃØ×–Ö ÖÖuÖd×ŠØ Ú÷ÛƒÞ¦á?åAéríÈñböû°ÿ8 –8`½¸Y—mÀÝì·Uäk 6  R¹.´F÷ÿ­þ˜ý°ü'üÚûÕûðû(üRübü(üˆûú;ùû÷Úöïõõ(ôWó¹òCòÂñ1ñyðÏïZïCï˜ï!ðððúñbóõ¥ö:ø¹ùFûßüxþÂM±çæ{—C ±¡\í0Bþ'üýùÀ÷‚õó·ðwîºìgë}êíé¦éËéHêëàëÔìûíYïûð÷ò õ*÷FùFûý þ#ng5ýÉ~N“ | › - ä Ø 7 G¢± ˜!^$I'Ž*".h1468Ÿ9f::y87¬5°3%1P.¨+;(J$eW”m óñþÀù^õýñðï²î–íIìë>êìé¦êãëDîsñ@õ‹ø‚ûÎýÿœÿˆÿ\ÿ~ÿbÊœ…Y0Zþfû0ùÿ÷Ü÷Møqùvú`ûÿûüUûú}ùÀùàú üÖþ0Tø­`6ˆkkþ´üEûÃù øúõ#ó²ïçëüç ä¤à¼Ý­ÛfÚ¯Ù7Ù¥Ø*Øã×ð×tØqÙÛvÝËàÆäåèíðð¾ô3øzû[þþ‡.ÞS z  ¹âœRŽÖ ) ˆ Û 8 ¢ í 2 …æÐð$÷u » Ø ± K Ã*!ï›ïÂÿGý“ú-øöOô´òñÐïÈîî[íÃìmìfìãìÖí ï¯ðkò4ô)öøúàûýTÿøu»Î„ì纗SàbÿçýUüÂúðøìöæôó‘ñWðyïÙîxîXî—îï¸ï”ð¨ñÜò1ô¬õ3÷ÑøUú¡û¬ü’ýsþ7ÿÞÿQ¯àVta<D˜­gaˆ  ¬ Ë E+5oÂ#r&ú)-©/É134ù45S43v2`1•/l-+1(¤$0 $øU¥ I   þüÿúýdüû„ûüIýÒþ‰àé7œœÿ\þÆýýÑýõýßýEýÉûGùBöGóð´îÇíáíÎî ðñsñDñïð˜ð©ðMñóvõaøû1þþÿ­pÙÿ9ÿíþ ÿRÿéÿc4ëþJüÂøÏôñíí‰ë ê^é=éÿèZèçIåpãáááCábâ}äç¾é!ìïí!ïïïºðÙñkóŒõøÌú/ýéþÊÿËÿAÿ†þïý¨ý þçþÒìŒã@Éÿäÿ® ´r9 ¦ p ì ª   € -7´ ’ I qªÌ•v7ÿµýùû;úŠø6÷AöãõäõAöèö÷øŠøÑø$ù|ùúúú ü0ýEþ&ÿÊÿóÿ•ÿÿ§þ=þãý‚ýýRüfûKúùÔ÷¸öÉõõÊô®ô²ôºôÊô·ô¯ôÁôõ›õRö?÷AøPù]úQû ü—üîü%ý†ýëý4þnþ¥þ¶þ³þ•þZþ þòýÿý@þÜþÉÿ¿ tf|¼>âÖ " #dc9íºjƒ ä!#ç#h$s$$˜##Ê"["ò!U!¥ ‚êÏœ­ å uI c\]žOkË6[Hì å ‘ K…?e»îç^ÿkýòúYøö*ôótò‚òÀò óèòyòÛññ¡ð}ðÈðŽñžòÊó«ô:õWõúôXô«ó9óó"óKóeóIóíò/òñ´ïeîníÐìì¡ìÛìíKí€íŠí¡í¿í)îÌî¶ï»ð¼ñ©òeóô°ôIõæõ‹öc÷Aøù×ùpú¿úËú´ú–ú†ú‡ú¸úÿú\ûÂûü…üßü7ýqýÇý þªþ2ÿÏÿg›0À5­ÉÑ xòs¾{>úÞ¸„s{|qaTUhšÐCWW-Ùdüÿ…ÿÿ¸þYþúý™ý2ý»ü)ü–ûûzúúªùVùùÞø¢ø„øYøFøIøoø’øÃøóø$ù1ù ù ùêøÊø¶øÃøßø ù,ùLùtùùfù^ùoù’ùÑùútúÚúIûÆûeü!ýþýüþ.q¹è$>T ° $ € ïI©ûCWS&±EÅQÒ`ØLÍS¾#&-.(ûæÌÀ±t,ÚvîGp[Ÿë1r§üX Ç C Í]ÒRÃ1·ÿPþýÑûªúƒùhøb÷aölõ›ôÆóúò0òuñ§ðäïï;îXízìºëëyêæé‡é!éÕèˆèCèþçâçÑçÚçççèEèèé•é3êÈêdë ì¾ìtíî´î?ï·ï-ð¡ðñfñÒñUòßòmóô‰ôõ£õö†öëöP÷¼÷*øªø1ù¹ùMúðú”û=üÜühýáýGþ’þÕþ ÿ8ÿdÿŒÿ¿ÿðÿ(DMXbi„˜µØ'PÊjÅsÄ Ed~‘“–‘‚iGØŠ4Ù}¶[õšGüÿ¹ÿˆÿRÿÿåþ¯þuþ;þûýÆý…ýNýýÞü£üuü:üüÒû ûOûûÉúƒúDúúòùîùØùçùûùúFúqú¤úÕúûXûµûüƒüóü„ýþÈþ’ÿpO*ïẘsM6 @ : O A \t†”‹š‰w ÷ÁˆYÔr¥97þÊyÀr,âƒ*™ a€wK%ç¦Xþ¡3 ï ¦ k ,é¡U–#Áþ^ýûû—ú=ù øÔö¾õµôÒóêò òCñqð­ïàî#îmíÓìYìøë¯ëfë6ëëúêÙêßêßê×êèêþêë@ëjë«ëñëYìÀìí€íîí_îÊî8ïžïðkðØðQñ³ñ&ò›ò#ó©ó8ôËôRõØõböÓö]÷»÷ørøÃøùdù¸ùúwúõúeûäûCü°üòü0ýjý”ý½ýçýÿý6þeþ«þõþ3ÿ€ÿÆÿ?d‚”œ¤£Àéi¹`¼Bh‹š£›¡žž››‘ŠlY,þ¶kÄu#ä™e%ùÿÂÿÿ@ÿöþ¨þTþþ¸ýmý ýÔü•üUüüïû¹ûˆûEû û½úwú2úòù°ù…ùiùWù\ùeùwù—ùªùÞùÿù úMúúÎúûyûíûoüýÅýþhÿC:2Ú¹›ƒ„x z ~ ” Ÿ ­ÌßGnwc0ñÇ›U¦)ŠÏâɹVÈP¤3¥ô<UBÅ…%Îmý± A ý ª p3Þ‘%ÁGìþý>üïú‹ùIø ÷ÝõÄôÈóÍòÎñæð ð8ï^î˜íÚì1ìšë$ëºêvê+êÿéÜé»éºé½éØéðé êDêuê«êë_ë¾ë.ì‹ìÿìcíÈí.î“îùîPïªïðaðÌð.ñ®ñ#ò™òóóô†ôþôzõõõgöÓöF÷º÷øø÷ømùìùiúûúpûêûCü£üòü:ý€ý¿ýþEþ‚þ¼þëþ*ÿ^ÿšÿÔÿ:g…¸Ù.a£è5€ÍT–Åô 2CC0#÷à¦yKê¢aÒ€7ó¸{DÚÿ¡ÿZÿÿÔþŽþBþþ¹ýxý/ýáü¦ü`üüÖû™ûUûûËú“ú[úúÒù“ùkùEù6ùù,ù=ùFùeùzù²ùàù"úsúÇúIûºû:üÃü^ýùý­þ`ÿÑŠH»›m\DA? O b z › ·Ôý*Qsq`J99Õ†4ÍX»ÚïèÌ­‚S·€Cãtß>„ËØÉ•[ÙŒ/Û ‡ G  Í|ÇWð…ÿµýbüûÌù„øU÷$öõôó'òJñtð«ïåî"îpíÊì9ì¾ëeë ëÐêê`ê:êêê êê$êIêxê©êñê6ë‹ëÜëEì©ìísíàí6î®îï~ïïï`ðÙðRñÇñGòÀòCó¬óôŒôôôdõÎõ9öžöþö^÷½÷ø~øðøcùàùXúËú;û§ûüSü üÙü"ýbýœýæý&þtþ´þùþHÿÿÙÿY“Ïø"P„½õ>v®Þ8ax¥­°³©§”†nL+Óž]*á®i.ì²p,äÿ«ÿVÿÿÃþ€þ6þêý¤ý[ýýÙü©ü{ü8üüÃûûFûûÊú…úKúúçù³ùšùŒùƒù‚ù’ù§ùÃùãùú?úyú°úûúKûªû ü™ü ý’ýþ­þNÿýÿ´i0Ë€WKM_ € ¢ Ã Ø õBZulmF$úÉ|&Ôdß+n…†dKñΛoÊ[é^¤Â¹’\Þ‡1Ï w 0 × 3݉¨µþLýðûœúJùøÙöÇõ²ô½óÇòûñ5ñcð¯ïùîJî”íêìJìÔëWëë¯êoê6ê êëéÁéÂé°éÓéÚéê5êtê»êÿêRë ëìpìäì\íÓíRîÐîHïÎïCðÈðBñ·ñ:ò¾ò<óµóFô·ô8õ´õ#ö{öÞö6÷Š÷Õ÷#øgøÂø ùšùú…úïúMû®ûùûKüüÅüýTý¡ýæý7þxþÐþ ÿjÿ¬ÿöÿ4w«Û2Rƒ²ã@p Ååô õã׬”oLÝ“L ÎŽIàÿ”ÿSÿ ÿÊþ‹þ@þþÂý|ý2ýôü¨ü[ü üãû°ûtû;ûûÓú™úbú8úýùÑù›ùùeùeù^ùfùuù‰ù®ùÍùòù(ú[úúÍúûLû™ûùûnüñüƒý'þÙþÿMëäW9 õ = \ „±Çö4(å¿y1ØpômÙ#DXF61òÃj+ÌbâTÀ %ñ¿q1Úƒ3 Ð w  ¦:ÏhñŒÿšý8üÑú†ù&øûöÃõ¯ô ó°òÕñúð6ðyïÎî$îyíÞì9ì­ë*ë¿êdêêàé–ébéCé*é+é.éIéaé‡é¯éçé*êfê¼êësëØëCìÄì8íÁíHî×îhïöïðñžñòòóó ô„ôõyõêõXöÄö*÷÷ï÷>ø™øçøAùžùúgúÇú2ûŽûçû?ü’üßü5ý†ýÎýþOþ›þÖþ,ÿoÿ»ÿ NŠÆü&JzžÁé5]tœ¦ÄÍÏÙÓÚÒËÊ´«ž‰qY7ä·z8ö¨eÉÿyÿ)ÿ×þ”þ\þþÁý|ý=ýûü¾ü{ü>üçû¤ûSûûÒú‘úbú#úæù©ùùJù%ùøøÐø±ø”ø‚ø€øˆø˜ø¡øÀøãø ùAù‚ùËùúcú¥úûWûÈûBüÉüYýîýœþSÿÕœtZ7/ D B V c s“²ËÞê÷åÄ«j*íž1ˆÞà÷ó×ÇžŒkHMリ‰ºÎÌŒYÿÀg º P  ¸o™4ª9¯þ=ýôû•úLùé÷¯öuõTôKóPòyñ™ðÙïïhîÀíí\ì³ë&ë«êGêñéŸé[ééäè¿è©è¶è¿èØèóèéQéyéÄéêWê™êøêUëÀëLìÎì^íáíiîòîxïð’ð#ñ³ñ<òÃòTóêóaôÙôKõ¼õ6ö ö ÷m÷Î÷-ø†øáøJù¼ù0úúûoûØû#üzüÎü#ýpý²ýûýAþŒþÖþÿoÿ¥ÿêÿ+_¬Þ7iެÖñ4^{œ³ÉÓßÕèáìÚÒл¢†qK/è¸z8÷¯jÎÿÿ?ÿñþ¡þ[þþÊýŠýFýý¸ü„ü>ü÷û¹ûqû8ûæú¤úbú+úèùºù‚ù_ù0ù ùÝø»ø£ø˜øø˜ø¢øÀøÜø ùAùvù¯ùôùKúžúùúcûÂû*ü¢ü ý¥ýIþîþœÿVñ×»—‰shin x … ‘ § ¸Øâó6F9:)ä¤Qä_±,øÍ±­Ÿ‹vH«D¿^Žž“i=ïŸHï › I  ¸_õš—þý¸ûOúúø¬÷†öYõ7ô ó#ò7ñ_ð¢ïñîIî™íóìDì©ëë‘êê»élé+é éðèÐèÄèÂèÌèãèé0éhé¤éæé5ê„êÙê7ëë ìƒìí†íî¥î9ïÌïQðæðhñôñvòøò‚óþóvôóôfõÛõGö¾ö"÷Ž÷÷÷føÇø,ù˜ùûùZú¾ú"û†ûíûGüŸüûüYý«ýêý4þyþÆþ ÿXÿ”ÿÞÿT‘¼ö R¬Ðø7Zƒ—¸Ðè õäïå×¹£Œ{N$îʼnKÈ…Gðÿ—ÿ<ÿîþšþVþ þ¼ýý9ý÷ü üZüüÙû“ûOûûÌú†úGúúÙù¡ùrùOù*ùùïøÞøÈøÁøªø¬ø¸ø¾øÌøêøùMù‚ùÌùúuúÔúAû£ûüü ý”ý)þÕþlÿ)ᯅrkSPU`l z “ ± Í ù-T~shT%é³QÚV«ôãáÕÞÎʧr>ñ¤(™ö@9Ähø¶ ^ ' Ó‚¹PÐOÑþbýëûúEùøÐö¡õ„ôWó\òrñ§ðéï>ï¡îîtíÆì ì[ë¸ê'êÃéVééÌè¤èŠèƒèè˜è¤èÐè é?é‚éÏéêtê¹êënëÙëTìÕì~íî©î?ïåïxðññòœòóóô}ôúôxõïõ`ö×öA÷´÷ø“øùøiùÄù0ú—úÿú_ûÍû.üüôü[ýÁýþzþÊþÿbÿ£ÿâÿ$m®í#X{§Åí:[ƒ¨¼Ôâû# ",.+!óàȨ†`1ÓŽ=ï¢JªÿRÿùþ”þ>þÞý„ý0ýñü¯üoü=üüËûŽûSûû÷ú³ú™úrúZú+úúæù£ùtøXö&õèôþôõmõHõïôãôNõjõ7õ¢õÄö|øuúŒüÅý{þÿáÿì»$ƒÉùût a a Å ç ‰ ¯JÔ/2()¯‘–RÍ!¼!Æ!´!¾!Ö!®!8!– ß°6dv㟘â5S"ðáËú L È K ì • ¥ B ±[òö:JAÿðý_üºúýø:÷¸õ ôÔó÷ò$òñ3ñ¤ððsïïõî(ïžï>ðñ²ñ;òzòŸò—òmò-ò!ò òPòšòÃò¤òkò ò‡ñÑð/ðÎïžïƒïïÜïðððøïÖïÆï ðzðñÜñ¸òdóáó*ôKô>ô8ôbô¨ôÿôbõ¢õÇõ¼õ­õŠõCõ"õCõõõõtö÷|÷ø‰øù‹ù1úôúÂû­ü¬ýµþzÿ.ÎZ¶ú?¶ë$KSK$÷ÖÈÁÀÎæ8JWG>BO`‚¥¸¶ªy(¯AÎr%Ãdëÿ^ÿÓþEþ˜ýâüGüÖûˆû=ûçúŽúXú÷ù©ùZù1ùùàøÌøÚøéøßøÌøªø”øvøUø;øDøHøHøNøZøføvøvø‹ø»øäø+ù†ùõùYú¯úDûìû{ü ýÄý°þ‰ÿJIMQHP‰¶· Рý 9 S¬©_¾ a¹#Ð !c"d#¹#$/$-$ý#n#ã"T"Ú!.!òáª<Úô¯³Ö ÷   M …òì3»m#©ÔxžþWüëù/øãö)öõõ½õõèôíó×òMñÙï¹î=îgîEïzð‰ñmòó?ó8óó4óºó¯ôùõv÷ÛøÚùDúú†ùÊøøƒ÷N÷Q÷…÷½÷¹÷w÷ÖöÑõ¸ôªó×òWò#ò8ò_òƒò¡ò‚ò'ò•ññÈð¤ðÏðññògò‘òòPòòÞñÂñÖñ:òÅòNóÓó5ôŽôÈôõaõåõ·öÑ÷ïø)úpû¨ü¬ý¢þŠÿ„“¤Î!êƒ l “ Ã Ö Ã Ž ) ­9:W‹ínõŸF Í{4ìÿ¨ÿwÿBÿÿÖþ}þþ´ý@ý¼ü0ü§û4û»úVúõù‰ùùpøò÷x÷þöŠö:öüõÚõÌõÖõðõö öö&ö\ö›ö®öÌö ÷^÷÷Æ÷ý÷'øFø[øqø§øÀøÚøùùUù—ùèù+úsúÀú"û‰û.ü¾ügýþáþÉÿ¥‡n úò_sÇ  W Ñ QË‚Ýoz9È "Ó#Q%¤&Æ'E)M* +:+-+3+°*ó)ò((5'æ%u$+"œÐZܘ¨5 ! _ ÜP”Ñ¿ÆþûüûÑú^úú«ù@ùrøA÷®õµóþñðëï·ïäïkð±ðÈðð¿ïšîZíyììpìníÂî5ð˜ñòóbó—óûóžôõ ÷ÞøÍúfüaýÅý½ýLý³ü(ü¼û£ûËûõû+üüSû)ú’øóöFõÜóÐòòµñyñ>ñÓð4ðYïSî}íØì“ì­ìíºírî.ïÉï<ðƒð¾ðñð\ñòäòãóóô÷õéö½÷ƒø&ùÎù„úPû\ü•ýÛþ!e‰’sTýöØ ½ — ] ø \ l V ‹ ß  M k ¯¿»«~v}‚¦ÿóþ^þÅý8ý—üêû@û{ú¸ùùŸøBøü÷Ò÷Ì÷±÷­÷¢÷j÷*÷äö¼ö«ö†önöiököcöWö5ööüõÊõ¹õ¿õÝõö&öBöRögömö„ö´öçö÷Q÷Ñ÷Yø¶øù‚ùãùPú²úû—û ü¢üFýäýþÿ¦ÿ%›+ÃUû¨NñȾ³°¿ ý ‹ è Q·5d Æ­eð½![#% &Ö'O)_*<+¾+Ö+Ö+ˆ++*Ä)ð(Ë'2&H$”!ç‘Lâ(½ m Ž~~h!þüoúaù‹øö÷ª÷9÷²öµõôFóýññ^ð6ð€ðñªñòAò-òªñêð&ðžï’ïÎï?ð÷ð»ñbòÚò óóó>ó™óAô$õaö÷”øNùÅùúôùãùÂùÏùú^úæúGûƒû|ûû–úÆùîøøc÷ÌöMöçõyõøôQôˆó±òÛñ"ñð#ðöïùï ð]ð­ðñUñ¬ñò€òóºó~ôaõ[öl÷øžù¾úÓûìüíýÿ.4@E7ÆdãI — ç 1 ~ · í  ý É u ÷ Z ®g¼Z°ùA‘æVÊVëÿÿ1ÿÈþ]þäýuýíürüñû‰û/ûÝú úgú8úúÇù‘ùbùKùùÇø”øaøAø"øøì÷Ö÷½÷«÷¢÷«÷¦÷®÷²÷½÷Í÷Ù÷æ÷ñ÷ý÷øøø7øfø’øÑøùZù©ùíù>úúÝú/ûûæûBü§üûüeýÈýBþ±þ'ÿ¡ÿ6Éw/汋mUGFT y ¢ Ö >ƒÇ [® „ÖoŒŸ|9 ë j!à!*"‹"Á"Ï"¶"k"Ù!ô Ó¥Uׄe%ã‚)¾NÜ‹ r z ”  ìûá¦S Åšÿ¹þ þyýëüeüºûúúúù:øu÷ÛöLö×õ`õëôvôíócóÄò2ò£ñ7ñþðÎð¹ð™ðzðDðÿï­ïTïýî®îaî9î1î=î^îî¸îëîïCïï»ïðfðÓð:ñ­ñ'òžò(ó¢ó/ô¦ô-õ¯õCöÓöu÷øÏø{ù)úÍúdûêûdüÏü5ýžýþþûþzÿìÿoØHªb§ûN¥öQ’Öÿ).-%Ù®e½_Ár(ä¤XÌ„2ßÿÿ^ÿÿäþ¡þdþþâý˜ýTýýÀüvü9üýûÍûªûûLûûòú¼úúkú9úúçùÄùžùzùLù)ùûøÏøŸølø-øö÷¿÷“÷m÷G÷"÷÷ñöÛöÑöÄö»öºö¾öÉöÞööö÷7÷[÷‹÷È÷ø@ø„øÓø-ùŒùúùvúüú{ûü ü=ýÜý„þ8ÿÿÿ½ŠLã¤n!ꚃ X D -  ù쿜q-ô¥g œZ˜Íîðò-#öÕ•`ÎeöpÏ9K<,øòìÍ·‰ P  × ‰&Ào Àmÿ¸ýPüû·ù|øE÷#ö õîóÍò¾ñžð“ïtîbíOìWëpê¢éåè=è­ç'ç¼æ\ææåå°ååqågå^åXå\åhåyå”å¿åîå<æŠæïæWçÀç8è­è.é®é2ê²ê4ëºë6ìÂì8íÊíNîàîˆïDðñð£ñ]òóàó ôlõ0öûöÈ÷“øSùúÒú’û<üéü‡ý þ¿þFÿÙÿbðvþ{ÿcÊk®`£Ý<e}¤°ÂÎßëþ ïÖµ‘mG$ñܪXÞ—_Ø£V Æ}@öªiؘb3Ûÿ§ÿxÿBÿÿÞþ¨þtþSþ8þþþþþýèýîýîýóýþ þ&þHþlþ›þÖþÿdÿÁÿaÀŒ¨@Ûu»fȃ D  â ž L è š(Âdò€"ÄSèkÓ.–èC’ú]³]¯Õçòñä׺ˆ1¿5‘â7Yh‘·çD< $ æ ÀŸPêĨŠÿbþ;ýüûîùðøø÷)ö;õ_ôzóòÃñòððbï¢îî‘í'íÑì{ì0ìëë¸ëŒëmëFë3ëëûêíêåêëêâêðêýêëë#ëEëgëŽë¹ëïë.ìqìÇìíWí¤íúíBîšîï{ï÷ï‰ðñÀñbòûò¤ó?ôÝôxõöÊö{÷,øÞøù,úÍúgûüû„ü ý€ýûýjþÞþMÿ²ÿrÍc¨ì*u½S•Î*Qozš«ÀÚø+554+ñѯ’V)ø¿€<÷«l*è¤[Ì„;íÿ›ÿIÿüþ°þgþ)þþÖý°ý•ýkýJý$ýýõüêüÛüÜüäüýüý+ýHýcýý£ýÇýíýþEþxþ¨þÚþÿnÿ¶ÿR™ðCÀ<Àeð•/í³Y'߬ t H ! ÷ Ä ž\#Ëy6Ì|»EÅK´â;u¾ùU»U©å0QUE!ó·XýyÙS‹°Þ.`…³Á¹ « ‡ K  ѧqJÔ¯xÿ^þ/ý üïúÒù¿ø³÷¥ö¥õ¸ôÂó¾òÂñÎðìïïGî˜íí}ìì²ëpëëÎê–êIêêìé¾é‡é\éEé1é#é.é@éJédékéé«éÙé ê;êqê²êëUë¥ëëëCì¬ìímíëíuî ï©ïTðûð±ñ_òóµó`ô õ±õTö÷¼÷uø#ùÆùhúùútûóûhüÖüJý¹ý9þþÿþhÿÑÿ'…æJ¬úV§J’Îý+Rt²Ýÿ&Gfo{pp]C.å³”a2ûÆNå´t;ØŸfß’WÙÿ¨ÿwÿDÿÿåþ¿þŽþmþAþþÿýôýâýàýÞýóýûýþ þFþeþŽþ¾þçþÿGÿ}ÿºÿïÿ7…ÕmÁ(¦-¯<Óy Ñ”R à — o :  Ú¬j9³„+Ö_án´[µÞ;s»+l®îQJ[G ÝïNw¥ºØ 'Qyœ®˜ ˆ W  åGî¶t+Ðþ¼ý¡üˆû‡ú}ù‡ø‚÷‹öªõ¯ôÄóÎòÉñÕð×ïï0îzíàìJìÜëqëëÅê‚êNêûéÅé}éJééÔè±èèZèRèXèoèuè™è¿èÞèéSéŸéêé5ê›êòê@ëëåëKì­ì!í¤í(îÌîsï8ðâð‘ñ]òóÀóXôþô õ9öÝö|÷$øËøpùú°ú:ûÖûYüèüLýÌý>þ£þÿ[ÿÂÿ Mšâ5éOÃ2˜ÿ\¯ëHYw|Š‚q`N)îÅŒd(ö¸w2â—Fî¢Yೊ`1ÿÿÖÿ ÿqÿ6ÿÿÅþ‰þNþþÜý±ý’ý]ý1ýýßüÏü·ü°ü¢ü¦ü©ü¯üÄüæüüü$ýEýlý ýâý#þnþ¼þ ÿmÿÌÿ3ûdÚGÍcóŸIö¯vT ï Å ª ‚ ‡x[= àI’œì?‚à A™Ø2œx¼ Lx“…Vü¢*–ù7o—³ß )85í º q ! ¸IÒ|"ä¨lÿFþý ü û úùø#÷,ö?õMôXóVòhñ]ðoïîÊíí}ìôëyëë¯êOêïé–é6éÞè}è)èÓçŠçMççüæëæðæç0ç[ç€ç¿çèTè¬è énéËé(ê‡êéêOëÀë?ìÉìRíèíî:ïöï¥ð]ñò°òSóÝóbôêôrõþõö&÷º÷Xøãø{ù ú‡úû‚ûüŒüýŒýþxþðþ]ÿÂÿuÜGºxÔ!x´é4DWl‰¤­¹³³¦¢ŠpW&ýÔ©}? ÅŽT'ô½“c;üܱ|FÕÿ£ÿlÿGÿÿíþ´þ•þmþCþþþêýÌýÉý®ý¶ý°ý¸ýÇýàýóýþ<þeþœþÏþÿFÿœÿãÿ5‚ß1õií}¶cÒ£|d 6  à ³ ˜ |\(á®t ¹JåF´h³ø<vÆ'‘~â5‰Ç &$ ËhútÆù"/H]qnraR 3 ò ¢ ;ÑoÔ¨tCÿþýõûûú.ù<øL÷\öwõŒô˜óšòñ{ðjïwî íÔììrëàêcêýé éOéõè¤è;èçç‡ç?çÿæµæ„æUæDæCæ`æ}æ«æÛæçeç¼ç$è‰èïèIé­éþéXê¿êëxëäëdìòì€í,îÚî…ï<ðäð‘ñ2òÃòJóÎóIôËôQõæõwö÷³÷Møæø‚ù!ú±úLûÖû[üÜüWýÇý3þ”þ÷þZÿ°ÿvï`Ð4¤L•Êä ýôî×ÕÂÁ³¥qMハAÇ…HñÌ®‰lH"úÿÊÿšÿ^ÿ!ÿåþ¦þvþ@þþæýÅý¥ýý‡ý|ýuýný|ý{ýŒý“ý©ýÀýÐýÜýõýþBþxþ¹þÿYÿµÿ€ô^ØN×ië‚#Æt,í¾‘ d C /  úÙ±h#ÅOìwë:šç*rÚ]æZópø6p‚h<çyÒ7}¯ê:,9Ug~|m8 ï ³ Z ´_·”|lÿeþaýsüvû}ú‘ù—ø¡÷˜ö…õsôZóWò>ñ-ð)ï#î4írìÎëDë¯ê3êÈé_éé èKèìç‡ç<çëæ›æZæ0æææ'æ@ætæ§æðæ7ç€çÌçèlèºè éLé éÞé,êŠêïêjëåëqìí¢íEîòî•ï;ðÚð|ñòŽò ó”óô›ô3õÊõmö÷¯÷Vøÿø¨ùIúñú”û&ü”üý}ýîý@þ þýþaÿºÿë]Ä"zÈ?i|‚„†Ž‰~yszyplX? íÆŠXÖ•^-û›qT/öÿÐÿ¡ÿmÿ:ÿúþÊþþXþ,þýý×ýÄý¬ý¦ýªý²ý¾ýÁýÓýÞýóýþþ3þ<þXþmþ–þÃþùþ9ÿÿëÿD´&¡+¹AÎ}Ál$Ð’w <  é ¹ • lLÅŸJÞ_wÝ=¥óRÃYÊNé^Ú?¯óI>Ü—*‹êAl‹žÔÜü)@G90 Ì ¤ ` ¸|NüÙ¶•ÿfþ\ýWüRûTúPùMø=÷8öFõ-ôóòêðÉï¾îÇíìììsëÑêFêÁé[éõè£èIèëç–ç9çíæ°æuæ5ææøåïåòåæ.æ^æ‰æÍæ çMç›çîçGè”èíè2é‡éÐé%êêäê\ëÒëeìõì›íJîôîŽï;ðÔðlñúñ‰òó‘ó$ô¸ô^õíõö*÷È÷xøùÅùkúû‘ûü”üýtýÚý6þþÛþ?ÿ—ÿùÿY»{×+k¯Ýù,80(öùñèÕÀ¢mL ÍŽSä±}\6öÿçÿÉÿ©ÿƒÿ`ÿ;ÿÿßþ½þ–þ_þ<þþ þ þþþ%þ4þTþcþþ¬þÍþøþÿ.ÿDÿiÿ‘ÿÍÿ _¼8¨/·Uô†(Èj±b Ï P * ø Ì ªŒc@ªGÇX»‘Â(|økäœ$ªa™·œe¯g¿ë;]…«ß/AC6 Ó J ï—S Щ‹rÿaþnýtüyû~úxùsøS÷Fö(õ ôÞò©ñŒð\ïDîSísì¼ëë|ê ê’é1éÕè~è)èÅçlç çºækææåå¹å¯å·åÁåñåæUæ„æÀæ çNç™çàçèKèŒèÀèéFé›éÿémêÝê^ë÷ëŽì7ííí”î;ïéï†ðñ ñ(òªòó©ó:ôÑômõöÁöb÷ ø¼øaù ú›ú/ûŸûü„üòüTý²ýþqþÄþ$ÿ–ÿùÿ]½&oÆ Tv¡»ÐÑÙÓÎÆÆÆÒÛæÝÍȧzX#ï°vAÛ¨rQ7 éÿÝÿÀÿ¤ÿ~ÿcÿ-ÿ ÿîþÖþÂþ³þ¿þÀþÊþØþôþÿ1ÿPÿxÿÿ©ÿÂÿäÿ*`‘ã3Ÿ’·aÃy'Þ‹5 æ ¡ V Ò ¨ z;×—;ÖrõrÎ0ˆàO«*¯=ÎVøŒ}ÙÑ•„Åý/=N_q˜»åþ2. ë ¹ | àEüÂbÿ_þZýiüwû…úŒù}øi÷[ö8õôÖòšñSðïþíëìì2ëmêÌé=éæèŒè=èèççMçõæ¬æwæHææ°å}å^åUåoå‹åÅåùå0æpæ¸æçWç–çÇçêçèGèè½èéSé¡éê‰êëÈëoì&íÑí{î(ï×ï‚ðñ¥ñ*ò®ò9óËóTô×ôsõûõ›ö:÷ê÷›ø8ùÆùHú¶ú-ûšûüpüÙü+ý‡ýÜýHþ²þÿÿèÿK¤Q›Õ 5Qdwˆyx||Ž˜®¦ œˆc7Ö¦~6غ¢ŒrbP>2ïÿ×ÿ²ÿ‘ÿ‰ÿpÿuÿmÿ€ÿÿ•ÿÆÿÖÿôÿ>XsŽ´Íø$q½Ž ω3ñ¶y À ‚ 0 Ì • a Ø j2ÿÀPè~ôK« g¦Š‰ÃHØ^Ð@v•_ ¢^…¦¶Ÿ˜±×;|…¦®· š q 7 ÕjÒˆFìÿÀþºýÐüçûñúûùûøÛ÷Êö²õ˜ôZóò²ð\ïîíì>ëzêÒéGé×è”èHèèÀçrç$çÆæ‰æBæûå¶åjåFå1å?å`å™åØåæKæ¢æëæFç‚çºçÑçñçèBèoè°èöèAéŸé"ê»êYëìÏì íLîï©ïHðæðlñäñWòÔòPóÅóKôÖô`õö¯öa÷øÍø`ùãùiúÞú]ûÏû3ü†üäü,ý‡ýÝýNþÂþ3ÿ ÿýÿi m¦Ôó,&-5GWqŽž¯³°©“{Q"ñ¿lK7(îãÐÂÀµÈÑåEz¤Êÿ+eƒ¾ùAŠîUÐLí’DÏ¢ X ! í ¢ U Ї&Ø”<Òiþ~}â@¯‡ý˜AÉEâmñR¹67ºD“Ùøþ òâå ,1PlobY @  Ü ŸSá·J( ÿõýöü üûöùÏø®÷öhõ9ô÷òñDðìî¸í¦ì¯ëÚêêZéÎèkèèÑç•çJç󿔿KææÑåžåaååöäëäýäåLåxå±åéå1ææÕæç@çcçyçŸçÌçè9è‰è×è=é·éSêëÈë…ì>íöí®îbïðšð(ñ¤ñò…òóóô„ô õ õ=öçöœ÷<øÏø`ùáùbúâúfû½ûü^ü½üý|ýíýeþÎþ<ÿ¨ÿ!ŠÿM™Æò.EZfbgx‘³ØÛàáêêîãË}fP@720*1Ri…–𥤽¼ÇÂÄÀÐÜ;S«í3w¿fÊ'ª1¼R ° m > º { ?ý£{=ç0ÙXÔR±\Áyïr˜+ÖRÇeÒH çùÁUº 3eKPE;BPjƒ„€xV<  ï © n?ݲY4ÿþýüûúÚøÅ÷—ötõ-ôåò‹ñðÎîœí„ìžë´êêkéçè‚è èßççJçç¯æsæ9æ æÜå¤å}åWåGå_ånå¦åÃåÞåæEæ–æÔæç:çXçoç‹ç¹çåç$ènèÆè+é¬éVêëÃë‹ì9íñíîQï ð‹ðñ…ñôñaòÇòCó­ó0ôªô3õÎõ‚ö6÷Þ÷{ø ùšù"ú¡úûsû¿ûõû=ü‚üÚü8ý¥ýþyþôþvÿöÿuîL¨ë*g¤ÉÇÀÇÙç8IWr‘©§£ztjv|s€˜Äù.f³Û *54C<]q„œ»ÿ;øbÃ9¿Q â „ * Ò ~ ? ë «l2Á–l+ØvzÀ!~¥Ú%{»/ÈWà… ·>ìh­ä ù²Uã(Lr’—žž­—œÁ·Ÿ€W µ „ G ÿ²|6øîà¹ÿÀþ±ý¬ü¤û§úŒùRø ÷Öõzô óÌñ~ð4ïâíÁìÄë×êêwééèXèéç›çLçüæ¸æNæÿå¢åråNå+åååå%å@å~å¯åéåæCæiæ¡æÔæäæüæç"ç4çTç•çàç0è˜è#éªéJêëáëìNíùí’î-ï¿ïVðÖðPñÝñ`òÛòWóàófôñô{õö£ö=÷Ñ÷XøÈøù~ùåùHúŸúóúMû–ûüzüùü”ý!þ¬þ0ÿ°ÿ(›ý^•Òý%Sy—·Óó7Yt‚Ÿ©´¸ËÁ»½ÆÚù#`–Ù$n»ë+Ws}Œ˜¯¾ÕãBa¡÷[À: Å P ä ” : Û ˜ Y´tBúÝÅŸaÝhÛGªë?žß<¢'¯q *àlåA ‰ | 1 ßZ£å òÚâÙÕç÷êÊ®ŠE¸ R Û w8覆J ÿ%þ6ýGü=ûúãø½÷|öHõÝózòóðwï0îýìòë÷êêUéŸèèÂçkççÇæ_ææ»åŸåtå<ååØä¯ä‘ä¯äåäåTåŠå¹åîå4æ„æ»æÐæÔæßæàæüæ!çNç€ç¬çèkèé³ézê/ëÙë|ì)íãíƒî,ï¸ï7ð¨ðñ’ñò ò ó–óôôAõçõ˜ö5÷«÷økøÇø6ùùÊùú+úhú¾ú-û®û8üÀüPýâýuþÿ˜ÿzÌ Y¤Óñ#/Q|µÛ2Zz¤Êòþ 6f¡ß4—õsèZºT‡·ä ' ? a – Õ  ` Æ > ¿ ^ Ä ˆY)í»x7õ«n2î·r3ÎJÅ3ŠÁòLk¶ÿ_ÍLÅ/¸7 Ÿ !P!x!v!0!Ô K Œ¦«’V# èÛÔ̱‰}P¾ g ÿ y £LüžWÿöýýüùûþúýùîøÙ÷¿öõWôõòzñ ð£îXí#ì÷êöééSè¬ç9çðæ«ædæ æÓå™åcå/åüäÃä‹ä^ä?ä=ä@ädä|ä—äÁäåeå½åæbæ¡æÁæ¿æÔæñæç3çZççÑç8è´èBéßé…ê:ëîë¶ìeíîŸîï’ïððñ”ñ ò’òúò‡óô¸ôXõñõ|öùös÷ã÷3ø†øÆøù0ùXù¡ùåùXúÌúZûÙûjüý ýFþÛþkÿÜÿJ¡ô>€¨Ñà+Y’Òý1YžÑ:Xƒ¡Ô*rÌ/  7¾; ´ " ˆ Ú 5 Ð  h ½  Ž «MÒ¯€e'üÆ•7÷µ`åfõ`¾A£óM “ !V!£!ï!U"Ÿ"Æ"Ý"ú"ì"¾"…"E"Å! !6 YMí¶ŠH%ôº}g%Ãd    ‰Ÿ3ÉuÑþýrü9ûú ùè÷Æö¬õ—ôgóòÃðoïîËìœëxê`ébèƒçÌæ6æÎå}å;åðä¶ätä<ä"äøãØã³ã˜ãŒã|ãtã‰ããÄãéã(äräÊä(å†åÓåæ>æ}æ·æòæ'ç]ççÞç;è´è@éÍéxêëªëEìåì–í/îÄîMïÆï@ðÈðFñÐñ<ò¼òBóÃóYôéôõþõ‘ö÷‡÷ì÷Mø’øßøùSù—ùóùOú¸ú'û“û ü•ü$ý±ýNþËþCÿªÿyÉPœËþ7w³å#_¦ï>ÁP©^Ë:¨&®; Ë X ß b ü |  '¶Då˜Mü¾“q^A/Í‘g-î“:ÌE¹ b Á (!†!Ý!B"¼"*#˜#$˜$%T%%¾%¯%%D%ó$u$á#,#Q"@!% ëªY)ÈHì¨d• { Ú EÈ<½=ØŒÿ8þéü›ûWúùÕ÷öxõ@ô ó®ñWðï´íwì4ëêãèÕçîæ)æå+åÏä‡ä1äÞã§ãnãEããÑâ›âoâbâfâkâqââ§âÇâúâUã«ã ämä¾äåDå—åáå3æeæžæÒæçzçÿçyè é–éEêãê—ëFìöì‰íî|î ï‚ïð{ðñð\ñÄñ=ò¾òKóÝó`ôòôzõö©ö$÷–÷ë÷CøŒøÏøùjùÃù)úwúíúYûåûtüýýþ–þÿpÿÖÿ,„ÐV’ÆG‘Ò'éMÃ*”uáaÍ7¨ ® B ã < ì © b ̆R!تƒZ,ûÚº©œvZI!Ô€ *!•!í!9"“"Ò"ÿ"N#°#$‰$ %˜%&Š&ù&R'‡'Ž'„'@'º&"&n%~$k#9"÷ Ž)ÒAвxH®>Á g ¤ øH§úeâÿzþ&ýÝûúDùÿ÷ÇöõFôó¶ñNð×îsíì êNéèç æ;åƒää¤ã[ããÐâ’âYâ#ââá‘áIá áÖà®à“à”à§àËàá]áÁá7â±â7ããäfä´äøä/ånåœåÊåæBææç“ç4èÙè•éTê ëÒëŠì8í»í?îÃî8ïïðnðØð3ñ¼ñ<òÏòeóô ô;õÌõOöÁö*÷‰÷Õ÷øUøøîø9ù ùúúû£û=üÙüoýþ­þÿ‹ÿèÿF—â%ZžêC¢  œ8ç~›"‰ól ë _ ñ B ò ¼ “tkcekr€}lbF$ã·„Z%óÆ ˜!_"ï"Z#Å#)$†$¶$ö$L%¡%÷%U&Î&5'Ÿ'(`(ˆ(¬(Ÿ(v((œ''1&%ù#²"D!¢8Á?Är3ºo¦ Å ÷ 9ºñMÐÿ]þäü€ûúÈøi÷"öãôŸó^òñ¡ï4îÉì]ëßéƒè(çðåßäåã)ãšâ9âàáŽáJá áëàÂàƒààÈßuß:ßßéÞàÞÞÞýÞ"ßeßÉßBàÈàaáßá\âÓâSã¼ãäaäœäÉäåDåšåæ}æç­çkè5éùéÅê‰ë<ìÆì[íÝíoîÞîQï²ïð€ðñ¡ñ3òËò[óþóŸôEõæõqöôöc÷´÷ö÷-øxøÇøÿø@ùŸùú~ú û¯ûAüÝü€ý,þÆþMÿÑÿ=˜ß.vÊ%‹ú~ Þ³lQ È f ÷ q ô s î l û ­lPXp¡mÓ4†Åé)üœ H!Ä!1"Œ" #R#•#$—$ã$E%ä%®&:'Õ'†(ü(B))º)¹)o);))–(ö'U'­&Å%·$Ö#¬"Q!ù¸YÅJðƒî^ÚL‡ Å ß –lúŽÿ™ý.üÛúLù©÷2ö”ôó’ñ.ð²îCíèëšê<éÞç³æšåä”ãÈââá&á´àAàÈßoßß¼Þ[Þ ÞÑÝ‘ÝzÝx݌ݡÝÖÝÞMÞƒÞÎÞ)ß|ßÖß?à–àêàEá±áâsâÃâ/ã™ãä·äOåú墿Wçè¾èvéêÎê^ëÎë<ì¯ì6íÔí`îêîfïÿï™ð<ñÓñiòó¢ó5ôºô>õ´õ+ö¢ö ÷J÷Ÿ÷øløÔøUùËù<úÓúaûüû|ü ý”ýþþÿþuÿäÿJ¸*—Óšj>óÔ´€ + à ^ ­ @ è »š„s€·‰hÀ(ŠÐô!þ!»"\#ß#C$ˆ$Õ$5%™%à%0&µ&g'(¶(f)*±*4+˜+¾+³+‚+V+ò*`*Å))('ì%¸$`#û!· lø*Ç[ÄaŠ–™ ” „ ¬ëK°5ÉÿmþûüŒûú“ø÷õ÷óiòÁð*ïžíì€êóèoçæªäŒãŒâ áãàTàøß˜ß<ßÛÞsÞ Þ˜Ý(ݹÜOÜÜÙÛ¶Û«Û¸ÛæÛ-ÜxÜËÜÝjÝÈÝ(ÞŠÞÞÞ1߃ßÖß"àtàµàá^áÇáWâîâ£ãiäTå@æçéç«èhéê‘êëzëèëlìëìxíî³îVïð«ðRñò»òqóô®ô+õ¦õ)ö’öÌö÷V÷´÷øøù¥ùBúùú¸ûmüýÃýcþïþaÿÔÿ;©-ÅYÑȳ¬”„V  á Ÿ c  Ù ”V+ =‰æ^ð‚ °5¨ ü!#$ß$^%¼%ñ%&8&~&Ë&''X( )Å)“*+[,ð,o-Ã-¥-‚-J-é,<,{+®*)j(2'í%•$ #Ò!— ? mÃúäÂ’B ò Õñ0‘¿ÿIþçüûú‰ø÷sõÞó1òðìî=í˜ëïéJè æåÅã†âqá…àÓßOßèÞœÞBÞÜÝmÝóÜcÜÉÛ7Û¿ÚPÚÚÜÙÍÙíÙ ÚyÚÎÚ$Û’ÛðÛQÜ£ÜÝ`ݦÝöÝ1ÞwÞ¨ÞæÞß`ß¿ß>àÚàárâ[ãQä9å1æûæ´ç^èýèhéÖéGêÀê4ëÀërì íÒí¦îgï9ðüðÆñ„ò3óÚóyôõŠõöõRö›öèöB÷µ÷5ø¹øbùúâú¼û¤ü†ýQþ ÿ¿ÿ_¯f/ýá« Šm B  î Ñ ­ ‡W2 &X¦ cÛl ªA!Ä"$&% &È&C'‘'Ã'("('(Z(Ø(^)ç)š*w+?,ý,Ç-`.’.Ÿ.².‘..{-É,Ô+—*N)(•&%’#;"Ó kG"Ùt jŠˆc Ž  輺þdÃþ7ýÏûrú ùŸ÷5ö¿ô/ó˜ñðkî¾ìëQéŒç×åCäÕâ„á[àiߪÞ(ÞÉÝ|Ý.ÝÓÜlÜêÛKÛ¼Ú?Ú½ÙFÙóØÄ؞ؼØÙgÙÅÙ4Ú·Ú$Û¢Û ÜŽÜëÜ8Ý…Ý´ÝâÝÞÞDÞvÞÁÞ3ßËßàfá`â]ãNä9åæåæ¤ç'è›èé_éÇé/êÅêdëìÎì™ísîcïWð@ñòÌò|óô®ô5õ¤õ÷õ@öŒöúök÷í÷‹ø@ùúáúÖûÙüÛýçþîÿÞçæåîçЪ‰x d X U T _sz‰Ÿ¹áQ–âBµ$ˆú …"æ# %8&"'À'8(É(7)w)»)*‡*ê*Q+ã+y,-¹-Y.Î./öF÷-ùÍû6ÿh(2 n©Œ¬ ô#&2'!'M&%«#y"""/$'z*,.d27Å;Ë@SEVIM.P‹RªSíR¸PoMXHåA¦:ó2½+»%• BÃ.ô­¿¥à!Æ#I$»#½!áÊÁ? Ö ú²ð^ç²Þ…ÖLϽɯÅìÃLÅÈäËðωÓZÖk×çÖEÕ­ÒÏ2ËÇ?Ã}Ày¾â¼Â»!»4»j¼;¾öÀÊÄÜÉïÏ¡ÖgݱãcéCîãñ?ô›õ#ömöžöÆö&÷º÷1ø›ø5ù©ùEúlûýNÿ“¿v ~xØN_ÿ^žèØ´} KöÿÍû)ù+÷*öGö¼÷Nú¦ýò§–9` Qÿ|úâôþîé¼äæà5Þ·Ü Ü2܉Ý)àzãPçXë`ïïòéõø2ùù©÷xõÈòëï[íwëNêGê¡ë6îðñ ÷\ýŒI P5!§%a(1)˜(!'™%G$’#Ð#%¹'s+P/Ó2#6õ9î=¥A E>HQKÔMiNMöI EK?U8†/¦&¦·qF1ßKi%¸x;•ÀÍ Iþ|úûòë âÖÙÒ©Ë[Æ[ÂjÀÀ÷Á¡Ä3ȇË/δйÒÓßÒ<Ñ\Ï]ÍDËɼƦÄcÃeÃkÄÙÅyȆ̕Ѵ×XÞåõëò”ø]ý—O@¿ój‡SR¸™ ¸ ™ÆÖó?. \" #$š#Û!Û-{“ 1·ýüú ø ÷÷*ø¡ùûüÖü™üûÓø¿õ±ñðìxçþá ÝðØØÕ,ÔzÓŠÓøÔÂ×8ÛÔÞsâå[è€êhëbëÁêéúçeæýä äöã¹äVæëèrì®ðÐõÚû°ë Çå­s!“!¾ `c. T#©'-C2à6Ö:Õ=@"CJEäFLHeIvIH+E“@Y;D5….”'¿!ÕÙÏᵦölSÚþ‡í ñaü4õÁíæèގغӢÐåηÎ!ÐÿÒOÖPÙ+Ü)Þ.ßYß9ÞÜרOÕ÷Ñ{Î…Ë0ÉÇÇÜÇhÊκÒ8ØrÞ+å‰ëŒñÆöÁúsý!ÿ˜ÿõþÈýcüûÅùòø·øaùòúaýmÐ°à ¾ËÒ oâ?®Là ‹ý¡øõSò!ñQñ³òÃôåöhøþøùŸøQ÷ûô†ñíkèäýßßÛ#Ø{Õ/ÔþÓæÔI×rÚÞáòääçnê^ì¯í/î¼íÖìì“ëëÇêë&ì²îkòúö…üËi xh C#×$™%Ê%N%È$#%™&ì(,0¬4˜9Ú=AD‡F2HIAIòH0HuF½Cá?¦;”6z0è)Ê#JÎS_p¯KNù-/_£¬ \þý}÷ñaêÝã·ÝHØëӊЃÎÊÍÈΙÑUÕ!Ùâܤß.áSá»ß”Ü;زӇÏÿË‘ÉÈËÇÓÈäÊõÍ»ÑÖÛ¼àÕæíùòMøzüdÿî¸_ÿ_ý?û‡ùVøøØøÔú¾ý#v X Üí¤ýζ¡‚x¢ ^ÚRþ{úv÷gõ<ôôôÄóió;ónózóójò"ñüîìèåYá·ÝŒÚ/Ø™×:ØbÙÛÝòÞràâ;äŸæ¦èvêgìYîï3ð¡ðûðŽñ…òŠôÈ÷Cü˜}¸ âM·2!#$0&a'>(J)¬*],.ã0›3"7B;?TCF3I1KpL‹LQK€IGED‰@B<Ä6ì0ô*¢%n!,ó•(‹AeÃ' ¹ Þý<÷Ìð©êÈäk߉ÚMÖcÒÏ'Í•ÌÎãÐùÓ×—ÙYÛÝÛÊÚHØÔ¨Ð}ÍÓÊ}ÉÊÈRɯʴÌϘёÔJܱؓá%çÝì›ò÷°û#þÿ€þý|û@úäùú ü‹þÊ0b c g©O -A\Ž* M L¾òþàüÈûvûû\úrùÜø%ø(÷Ùõaô«òŠðåíµêAçæãïàQÞZÜÛ¡ÛRÜlݘÞ4ߵ߭àâeãˆäEæpèŽêìíîïwðhò õ£øý&|å ù+‹UÿT!­#&¥(T+Æ-90Â2i5T8;ž>ÍA EîGåI¿JÕJÃI§GEA•=g8›3”.*x&õ"7 -Ãg°cw ¡áf'@ú¥ò½ë åíÞsÚéÕÂÒÇПÏÐnÑÓÕþւصØþ×wÖ_ÓLÐ÷ÌÊÈ_ÆÆ´Æ<ÈËÑÍ‹ÑVÕ†Ù(Þ­â^çÌëÙïó*ö<øTù‹ù~ù8ù7ù¨ùÁúÎühÿŠÇ¼¢ o8™ÄçÕPfÙ¿ P þý7×þSý®üÉüý}ýµý”ýîü:ûUø¶ôñDíîéDç#å’ã£âÚá áWà€ßäÞÏÞ»ß1áËãÞæÏéiì[î/ï‚ïÂïkð•ñô¦÷Ûûœ•€ Øb  èÿ!9%«(X,¸/®26;9<9?×AúCAE®E‘D¯Bœ?v;þ6ß2ò.ð+c)‘'w&~&¥'Ö'î'?'&#x[c Hù›ò¥ìµçŽãÍßÝJÛÅÚÛQÜsÝóÝoÞÿÝBÜoÙ¸ÕèÑ6ÎË»ÈõÆUƛƛÇ:É ËcÍ=ÐxÓ;×ÛHß@ãßæíé1ì†í<îpî¸î ïÒïñ¼ò-õ¬÷›úgý%ËRà[ Ç /QÛŸåp}c F S V—*GèêI}Š0C³ý³úÃ÷õò(ðDîÏìƒë1êÏè»ççKç èyé€ëÇí?ðoòÛó³ô;õÌõ¤öøâù–ü Z½z ªGZ¤ó` !Ø$»(r,/Ï25ä6Ð8?:P; ;Ž9Ø6!4/1†-Ê)&ú#F#K#•$ &$'²(å(“(&&m"½@[h jdþ/øó:îêç'å¹äå¦å…æçÄçPç\å¯âÓÞÞÚÐÖ¼ÒMÏTÌ¢ÊøÉÈɸÊëËDÎùÐAÔÙ×ÛkÞiáÂã“å8ælæ5æææ8æ çFèêì¿îzñ+ô÷.ú-ý?ð‘é~ ‰ ç £ , I ”™±»ÝkRzÈcRjCk¸ëyxxý‹úøXö+õ‚ô ôZóÙò<ò•ñVñšñÌòô™öÒø“ú¼ûùûÌû¯ûœûKüØýKE U `öüß® ¶kÞ= $h(+ã,.J/Á0•1±1f0 .ë,G*v&"¦io׆ ²"¶%ã'Ù(ç'ä$]!ãÇó¨ hK¿üLøïó;ñ‰ïïvïðñ½ñ,òñ@ï÷ëÀçZã ßòÚ¢×½ÔáÒÀÑYÑÍÑgÒ½Ó¼ÕGØ2Û®Ý/àñáFã ä‹ãâRá«àÃà á âcãiå­çŠé¥ëííï¶ò`õQø&ûöý>‚8 à'Ãÿ=ÿ-ÿ¢ÿOCøæce ]ïÿ¤»ýÖûXúyù ù"ùŽù úˆúûµûìü þ`ÿ•¸wÕ½G]¼ùg >01?ÔŽŒÁð’Y¨“êØ"ï$.'j(H)Ÿ)•)Î)Ù(Š'¼%#» } £¯ ÎÐf° ! I‡U¡ ò0Œþäú øößôôÜó‘óó}ó_óµòdñûïÇí ëèÉä„áïÝÛÙÉ×­×6ØèÙÜzÞ á°âðãÃäå*åWäëã»ãËãKäŸäå å\æTçè\é2ëÁíÇð¥ó’öù.ûüý!ýüAüØûmûLûnûüqü¯ü3ýåý.ÿoÏB¨þ4‘Ò¾…þ¼üZûŒúEúxú ûîûOý¿þ1¾OóO(çû²›•Ûò R͇#“ /í¦Ö~zj!Œ#×#Ð#b$º$f%%±$Þ$\$c#3 d0œÁ»ôn®‚]‰j2 ÎGþüžú!ùb÷–õ|óûñ×ð‡ð¤ðñÎñò¯ñªïCì@è’ã”ß^ÜVÚÜÙÚÙÜfßáJãÿã–ä•äƒääkäAå?æ#ç}çõæsæ‡åìä¶äå_æ¨èì ï³òNõ$÷cø¾ø”øPø'ø|øµøù‚ù&úýúoûýûÅüêýaÿ±Q¿Ê|™:@ð³ÙÿVÿ!ÿ<ÿ|ÿ7  îÅ®ª Nåd ý ? ¦ T X e Zdÿ‰!ù´&æk{TžÞ&tŒ · f 4 ã (!¶!|!Ï!"o ¨d¢É+µ|qË Ü)×W àwð ÕÿþÓû=ù>öTó5ñ}ðÎð&òøó$öQ÷¶ö}ôˆðøë]ç^ã“àáÞâÞ4àÝánã ägäAääeä¹ä´å/çúèiê«êêÒèçEåØãtã>äFæé!ìñî:ñ÷òÞó_ô‡ôœôìôwõxö–÷}øíøóøùõøù¡ù˜ú+üùýþÿ dMIËãéimüÕi ëÁ/]%7ØO i o … e¾äêJL³ÍÁÂýÚâUc_Â)ªƒQJ>-°Ü“†`™-&j ² ^Û*F°xÕëið òãà$êý<û=øoõjó(òbòÔóÔõÃ÷'ù„ù1øVõ©ñ·íê=çeånä#ä‹ä8åwå:å å å«åÔæ…è.ê‹ëÅìQíÓìLëCéeçÚååTåiæ;èMêì`îðïGñVòóÍó‘ôkõ%öÍö5÷÷Äö†ööö(÷ø`ù ûý&ÿÓþ³6BïX&†ê%˜:Ù‚/I Û M ” ®|8pÒ ']#N³Á&ÊÑò¼R¿>۽먓Y®Å3ðóÐ[Ú ¨  ¾^  q ñNBþ: ~ îi¼À3çýúöNò·ïÅîžï–ñ#ô£ö­ø¤ùù(÷gôoñ¥îCìIêâèÜç ç;æ-åmää³ä.æPè»ê3íŒï?ñÀññ`ïSíhëÂé²èNè“è‰éôêœì7î´ïOñûò±ô6öŠ÷¯ø¤ùMú1ú|ùÍøVø(ø÷÷ø¯øéùûPýüþt¾Û¹9r_-öéÔÕRÃ`7›£ Ô  1 Û¢ZÄIR™jg'iU÷:¸»°™Åç­°— ÏÜËå?¥' Á¡>§Ãž \ T & 5 / B = ²]›4Lþôú¢÷çôRó óÎógõj÷0ùeú´ú7ú·øàöéôHóÕñ¨ð{ï5îåì·ëÄêéé½é†ê&ìîðò‰óEôô>óòñ'ð\ïÉî§îíî[ïÞï“ðlñ|òàó¯õs÷éøúûžûÎûnûâúŒúqúhúrúÆúMû&üÒü¤ý”þ½ÿ¹’b"ª½ vP*ü 4Tu·6±<ùÊ3YQ^œÁ Æ ž Z '  ÷ @Û I ç p µ ­ ò Ç - „  É ¹ ½ £hâÿçxvÒ µ š Ñ•A'W^C â > 6 Ð + RYþ>ÖÿÑýýûmúmùIùúmûèüþêþaÿhÿ½þ•ý4ü¾úhù&ø÷öõ*ôŽógóËó„ô‰õÈö7ø’ùƒúêúÐúZú¶ùðøø„÷÷÷öìö÷W÷Ä÷Yø)ù úêúÏû¹ü€ýüý)þþëý»ý”ýZý;ýNýuý¢ýÛýþbþšþÞþbÿ²ÿÔÿÚÿ#' øÿe°¢” ] ¹ÿ£ÿ¸ÿÐÿÜÿáÿæÿ%MËF¶C²ñ ë¾€dQ>J–ß#Gw®ãû5”æØ ¬ÊýVÎ8N"÷Ѥh¬`*ÓW 'nž·—ÜÀaÿŽ• Š/Ó'Ñ“­ïCpfQ»"mÿÿ¹þ€þKþþþþ6þ>þ[þ{þ¾þ ÿeÿÿrÿÿÏþzþ;þþáý¶ý‰ýuý‰ý¶ýÚýÍýËýéý6þˆþÁþãþëþÑþ£þ^þ*þñý·ýýŠý¶ýÂýÄý­ý‘ýzýoý‚ý¥ýÑýþ%þ=þEþIþ0þþþñýÖýÚýåýÿýÿýþþþýýþþ0þgþ—þ¸þÜþÿ ÿ'ÿ.ÿÿÿÿíþàþÎþçþÝþêþûþ3ÿ|ÿ¼ÿD‹ÅßøòáÐÍÈÍÜ<v§éAT[XE2 !6LsˆªÃáéèÖ©‹y]RHSSVgn‰Œš—””€lP7ÜÌ´®ª«œ‰oN,ìȶ£†rTC% øÿèÿÚÿÉÿÁÿ©ÿ˜ÿÿ}ÿYÿ.ÿÿúþëþÞþÒþÑþÉþÂþµþ«þ£þ—þþ~þwþþsþrþaþUþNþMþ$þþþ÷ýúýùýðýõýûýþþ þþ þþþþþÿýþýìýõý÷ýþþ+þHþlþ‘þ¼þàþøþÿ&ÿ4ÿFÿTÿuÿ”ÿ´ÿÈÿêÿ+Mnޏç2Gk}œ¡´Ìì3Rn¬¸ÆÕÝñ*/0%ýü÷øöìâÑdzª¥{iK,åÁŸ‡}`O2êÙ¹¤—„l[5! íÿÎÿºÿ¤ÿšÿ„ÿ„ÿsÿjÿ_ÿJÿ1ÿ'ÿÿÿóþéþÞþÒþÌþÏþÇþ¹þ¥þ þŽþˆþuþdþ]þNþKþ?þ>þ9þ/þ.þ)þ2þþþþþ þýýëýåýÚýÓýÒýÛýáýïýùý þþ'þ-þ?þDþQþUþZþWþjþwþ†þ™þ¬þÈþìþ ÿ+ÿHÿ^ÿ}ÿÿžÿ¥ÿ¯ÿ´ÿÀÿÄÿàÿëÿ;Vq™ºÝñ$&/37EJgz{ˆ™ ÂÑæñ      øðâÐÌ˺¨œ‘‰†|cZ?+òåÕÆ¸§–}n]M3"éÿÐÿ»ÿžÿŒÿsÿ]ÿSÿ@ÿ9ÿ1ÿ%ÿ&ÿÿÿÿëþæþÑþÀþ­þœþ“þƒþ{þhþdþYþXþMþPþRþ[þgþmþnþ|þzþ~þtþoþmþhþvþrþzþˆþžþ¬þ¾þÑþèþþþÿ-ÿ:ÿQÿYÿjÿmÿxÿtÿ„ÿ€ÿŠÿ”ÿ©ÿµÿËÿàÿúÿ $.AKYbghibhchuƒ•˜¡®ÀÃÎÐÖ×ÝÔÕÎÐÏÓÅËÉÎÙâàíñïåèØÚßÙÜ×ÚÞÛßáÞÝÞíîßãÐε°œ—‰ˆ‰ƒ†zr^YD>, øÿäÿØÿÇÿ¾ÿªÿ¦ÿœÿÿŽÿ{ÿtÿ`ÿRÿDÿ2ÿ ÿ ÿýþíþÙþÅþ¹þ¬þ«þ¡þ¤þ¤þ£þ®þ¥þ¦þ“þŠþ{þjþdþ]þ]þaþgþtþ{þˆþ˜þ«þ®þÆþÑþåþìþøþÿþþýþõþôþõþöþÿÿ,ÿ=ÿ[ÿnÿ‹ÿ—ÿ£ÿ«ÿ²ÿ®ÿ·ÿ¯ÿ´ÿ±ÿ±ÿ¯ÿ·ÿ·ÿÁÿÏÿÖÿàÿöÿúÿ   ÿÿ÷ÿðÿëÿâÿÝÿÜÿÛÿÚÿÞÿèÿèÿïÿôÿñÿòÿíÿôÿéÿìÿØÿÛÿÓÿ×ÿÝÿÕÿ×ÿØÿØÿÞÿÚÿèÿìÿéÿèÿâÿÜÿßÿÚÿÚÿØÿØÿÞÿâÿäÿéÿëÿòÿîÿçÿéÿâÿÞÿßÿÔÿÚÿÞÿÒÿáÿÛÿÒÿÏÿÐÿÒÿÎÿÕÿÅÿ¿ÿ²ÿ©ÿŸÿÿŒÿƒÿ…ÿuÿoÿeÿdÿZÿRÿSÿOÿNÿHÿ8ÿ6ÿ,ÿÿÿ ÿÿûþùþôþïþìþçþçþçþáþàþçþÖþÚþÛþßþåþéþìþêþÞþÝþÖþÝþÜþãþîþöþýþ ÿÿÿ#ÿ,ÿ3ÿCÿFÿHÿIÿFÿPÿOÿIÿWÿWÿjÿeÿwÿvÿyÿ|ÿƒÿ”ÿœÿ§ÿ¨ÿ©ÿ²ÿµÿ¸ÿ­ÿ±ÿ´ÿ¶ÿ½ÿÇÿÇÿÏÿÍÿÍÿÉÿÆÿÇÿÅÿÅÿÄÿÄÿÌÿÏÿÈÿÏÿÅÿËÿÃÿÇÿÔÿËÿÕÿÐÿÖÿÙÿÑÿÏÿÂÿÆÿ¶ÿ·ÿ«ÿ¯ÿ±ÿ±ÿ´ÿ·ÿ¬ÿ¬ÿ¤ÿªÿ¦ÿ±ÿ²ÿ¹ÿ°ÿªÿ¢ÿœÿ—ÿŠÿ…ÿÿvÿzÿwÿ{ÿ}ÿzÿ‹ÿ†ÿ†ÿŠÿÿÿ|ÿvÿsÿeÿaÿ\ÿ[ÿPÿEÿDÿAÿBÿFÿGÿIÿLÿLÿPÿFÿGÿ6ÿ=ÿ?ÿ3ÿ)ÿ"ÿ"ÿÿÿÿÿ"ÿ ÿ'ÿ+ÿ/ÿ4ÿ/ÿ6ÿ1ÿ3ÿ*ÿ1ÿ(ÿ:ÿ=ÿ7ÿ.ÿ5ÿ5ÿ;ÿ8ÿ5ÿ7ÿ3ÿ6ÿDÿDÿAÿJÿEÿCÿHÿPÿOÿRÿKÿOÿGÿKÿJÿIÿKÿIÿJÿKÿSÿ\ÿNÿYÿZÿYÿYÿ`ÿdÿhÿdÿkÿjÿfÿdÿgÿaÿfÿ[ÿgÿhÿoÿoÿpÿ}ÿ‹ÿ€ÿÿ}ÿzÿtÿ~ÿ…ÿÿwÿhÿoÿdÿdÿlÿuÿsÿgÿnÿkÿgÿjÿlÿdÿgÿ^ÿfÿ]ÿYÿVÿVÿQÿNÿBÿLÿ@ÿDÿ<ÿCÿGÿHÿ=ÿ5ÿ3ÿ)ÿ/ÿ%ÿ-ÿ'ÿ!ÿÿÿÿ ÿÿÿÿÿÿÿÿûþÿþùþüþÿþýþùþôþñþòþðþîþîþôþõþêþðþîþôþòþðþòþòþ÷þôþóþøþÿþþþÿÿÿÿ ÿ ÿÿ ÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿ&ÿ(ÿ'ÿ&ÿ/ÿ&ÿ(ÿ!ÿÿÿÿÿ ÿÿÿ!ÿÿ-ÿ)ÿ(ÿ+ÿ,ÿ3ÿ4ÿ'ÿ/ÿ-ÿ+ÿ/ÿ-ÿ*ÿ"ÿ&ÿÿ!ÿÿ&ÿÿ'ÿ.ÿ/ÿ)ÿ(ÿ*ÿ%ÿ%ÿ ÿÿ)ÿ%ÿ(ÿ'ÿ ÿ%ÿÿ%ÿ!ÿÿ ÿÿ!ÿÿÿÿÿÿÿÿ!ÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿþþûþöþ÷þ÷þõþøþôþ÷þôþìþòþðþêþîþéþãþâþÚþÛþÞþØþÜþÝþãþÚþßþØþÝþÝþÛþØþßþÕþÝþÖþØþÔþØþÚþØþÚþÛþæþçþëþñþóþúþøþÿÿ ÿÿ ÿÿ ÿÿÿÿÿÿÿÿ'ÿ&ÿ-ÿ(ÿ0ÿ4ÿ1ÿ8ÿ2ÿ;ÿ<ÿ>ÿAÿ8ÿ<ÿ5ÿ8ÿ8ÿAÿ@ÿGÿOÿJÿPÿJÿLÿNÿKÿIÿHÿFÿEÿBÿEÿ=ÿ@ÿ=ÿ:ÿ@ÿEÿCÿCÿBÿ=ÿ>ÿ4ÿ/ÿ1ÿ"ÿ*ÿ#ÿ'ÿ+ÿ$ÿ'ÿ#ÿ-ÿ.ÿ(ÿ'ÿ#ÿ.ÿ#ÿ,ÿ$ÿ#ÿ!ÿ#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿ ÿ ÿ ÿÿÿÿÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿ'ÿÿÿÿÿÿ ÿÿ ÿÿ ÿÿÿÿ ÿ ÿ ÿÿÿ ÿ ÿÿÿÿÿ ÿÿ ÿ ÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ$ÿ#ÿ&ÿ+ÿ/ÿ1ÿ=ÿBÿBÿDÿ?ÿEÿ>ÿDÿBÿEÿCÿJÿNÿMÿ_ÿVÿ`ÿYÿdÿrÿuÿgÿkÿcÿcÿ^ÿ^ÿZÿTÿUÿSÿTÿNÿVÿOÿOÿMÿOÿOÿNÿNÿEÿHÿBÿCÿ<ÿ>ÿ6ÿ4ÿ2ÿ:ÿ0ÿ0ÿ-ÿ*ÿ)ÿÿ ÿÿÿ!ÿ&ÿ(ÿÿÿÿÿ ÿ ÿ ÿÿÿÿýþýþûþÿÿþÿþþÿÿÿ ÿÿÿ ÿ ÿÿ ÿ ÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿ"ÿ!ÿ$ÿÿÿÿÿÿÿÿ!ÿÿ$ÿÿ'ÿ ÿ+ÿ'ÿ'ÿ+ÿ%ÿ$ÿ!ÿ&ÿÿÿÿ,ÿ.ÿ%ÿ!ÿÿ$ÿÿÿÿÿÿÿÿÿÿÿÿ1ÿ<ÿ9ÿ1ÿ&ÿ+ÿ%ÿ(ÿ,ÿÿ"ÿ ÿÿÿ"ÿÿ!ÿ)ÿ/ÿ0ÿ@ÿBÿJÿDÿKÿGÿGÿJÿ?ÿJÿFÿCÿEÿHÿKÿOÿOÿXÿ_ÿ_ÿfÿhÿjÿpÿjÿnÿgÿkÿmÿmÿpÿhÿcÿgÿ`ÿ^ÿ`ÿaÿWÿdÿ`ÿ\ÿZÿZÿOÿSÿHÿKÿGÿLÿOÿ?ÿCÿ9ÿ=ÿ0ÿ2ÿ*ÿÿ$ÿÿÿÿÿ#ÿ.ÿ,ÿ,ÿ3ÿ6ÿ+ÿ2ÿ)ÿ'ÿ!ÿÿÿÿÿÿÿÿÿÿ$ÿ%ÿ.ÿ<ÿ=ÿ:ÿ9ÿ<ÿFÿ8ÿ8ÿ0ÿ)ÿÿáþóþXÿ¨ÿ›ÿ|ÿtÿ}ÿ^ÿ9ÿ9ÿAÿHÿPÿaÿsÿƒÿÿTÿ6ÿ#ÿÿÿ.ÿ>ÿ^ÿmÿ‰ÿ¢ÿ™ÿqÿOÿ:ÿ8ÿGÿKÿgÿ€ÿ€ÿrÿaÿ]ÿUÿ@ÿ6ÿ;ÿLÿbÿpÿ}ÿvÿvÿkÿ_ÿXÿRÿPÿUÿkÿmÿoÿkÿgÿ\ÿ]ÿSÿUÿYÿaÿkÿqÿ~ÿ{ÿsÿÿ‡ÿ…ÿyÿvÿÿvÿ†ÿ€ÿ„ÿ‡ÿ‰ÿˆÿ„ÿÿ…ÿƒÿÿ”ÿÿŽÿƒÿ‹ÿ}ÿƒÿ‡ÿƒÿŠÿˆÿÿ’ÿŠÿÿˆÿˆÿ€ÿyÿxÿuÿuÿxÿ}ÿ{ÿÿ{ÿÿ~ÿ€ÿˆÿ}ÿÿ‰ÿƒÿ{ÿqÿrÿmÿjÿeÿnÿdÿoÿrÿ}ÿˆÿƒÿÿ~ÿÿ~ÿÿ|ÿÿwÿzÿuÿ{ÿ|ÿ…ÿ|ÿ€ÿ…ÿ†ÿ‹ÿ“ÿ“ÿ’ÿšÿ–ÿžÿ˜ÿ’ÿ”ÿÿŽÿ•ÿ™ÿ•ÿ–ÿ”ÿ˜ÿ›ÿœÿ™ÿŸÿŸÿ¤ÿ©ÿ¨ÿ­ÿºÿ¶ÿ§ÿŸÿ¤ÿ¥ÿ¨ÿ›ÿ›ÿ–ÿšÿ•ÿ–ÿ“ÿ‹ÿŒÿ…ÿÿŠÿ‡ÿ‹ÿˆÿƒÿÿ‚ÿ‚ÿŽÿ•ÿ…ÿ‡ÿÿ}ÿ{ÿzÿuÿoÿqÿlÿnÿoÿnÿrÿmÿuÿ}ÿÿzÿÿyÿ}ÿrÿrÿuÿuÿrÿqÿoÿnÿqÿhÿrÿqÿpÿsÿrÿxÿ}ÿ‚ÿ‡ÿ„ÿ‹ÿ‚ÿÿ‡ÿ…ÿ€ÿ|ÿ~ÿ|ÿ…ÿyÿ„ÿŒÿ‡ÿƒÿŒÿÿŒÿÿ‘ÿÿ•ÿÿÿ’ÿ‰ÿÿ‡ÿŠÿÿ•ÿŒÿ‘ÿ‹ÿ‘ÿÿ›ÿ’ÿÿÿÿŠÿÿÿ‘ÿ’ÿ—ÿ“ÿŒÿŽÿÿÿ•ÿ‘ÿ—ÿ–ÿÿ—ÿÿšÿ—ÿ›ÿ”ÿ›ÿ‘ÿ—ÿ˜ÿŸÿžÿ¦ÿ¨ÿ£ÿ¥ÿœÿžÿžÿŸÿœÿ ÿŸÿ¦ÿ¢ÿ¤ÿ¢ÿ£ÿ¥ÿ©ÿ¦ÿ²ÿ»ÿ±ÿ¬ÿ¥ÿ¤ÿœÿ ÿœÿ¢ÿ­ÿšÿšÿ—ÿ•ÿ—ÿ“ÿ—ÿ˜ÿ–ÿ—ÿ•ÿ”ÿ’ÿŠÿ“ÿ†ÿ’ÿ†ÿ„ÿ€ÿ‚ÿ}ÿ†ÿ}ÿ‰ÿƒÿ„ÿ‹ÿÿ„ÿ†ÿ…ÿÿ€ÿ{ÿzÿ{ÿrÿvÿpÿlÿmÿnÿuÿvÿ{ÿÿ~ÿ‡ÿƒÿˆÿ†ÿ†ÿ‡ÿÿÿÿÿ…ÿÿˆÿ‹ÿ‘ÿÿŽÿ•ÿ–ÿ“ÿŸÿ•ÿ—ÿ”ÿ“ÿÿÿÿÿŠÿÿ‰ÿ‘ÿÿ•ÿ“ÿŸÿ›ÿ¤ÿšÿ¨ÿ¤ÿ¥ÿ ÿ ÿšÿ›ÿœÿœÿœÿ™ÿšÿ¡ÿšÿ¤ÿ¡ÿ¡ÿ¤ÿ£ÿ¥ÿ¥ÿ¦ÿ¤ÿÿ«ÿ¤ÿ©ÿ ÿ¡ÿ¨ÿ¡ÿ§ÿœÿ¤ÿ£ÿ¤ÿ¥ÿ«ÿ°ÿ¹ÿ·ÿ²ÿ·ÿ´ÿºÿºÿÀÿ½ÿÄÿÀÿÅÿÅÿÉÿÄÿÅÿÍÿËÿÁÿ¾ÿ¾ÿ¾ÿ¾ÿ½ÿÂÿÐÿÊÿÑÿÊÿÙÿÑÿÌÿÑÿËÿÎÿÉÿÆÿÁÿÂÿ¶ÿ¹ÿºÿ¾ÿÆÿ¼ÿÆÿÂÿÇÿÇÿÍÿÍÿÓÿÓÿÎÿÉÿÊÿÂÿºÿµÿ¶ÿ­ÿ¬ÿªÿ ÿšÿ–ÿÿŒÿÿ‘ÿ™ÿ‹ÿŸÿ”ÿ–ÿŽÿÿxÿgÿ[ÿSÿJÿ@ÿ/ÿÿ ÿëþ¿þxþ-þÝýý>ýðüüOüüÝûÈûòûåû¤û£ûÑûü‡üLýpþªÿúmŸyûX@ÃíÏùY¹ÿ2ÿÒþŽþ‹þÝþ“ÿSìóC”ÆšY9ÍeºDBsÒUÿ«þüý«ýùý}þèþXÿ.ájðÔuÿ²ûÇø÷Pö ö“öý÷úÛüæÿƉo!ò¿µ€Ó:þþPüÈùø\÷n÷â÷2ù|ûEþ£®…_û¿ôíNª|ÿpýYüáûéûüüoü'ýþøþ‚ÿÇÿÝÿ Y;÷ÿSÿ·þ?þÙýQý‚üñû¯ûÖûbüîü…ýrþÒÿ9‡pò$&4 ¥W[hJÿÐýýýäû§úû<ü`ýÆþ„h #4œ Ó  \8ÓT-¬þÆý<ýýúüåüUý0þ:ÿYD`aÉ{`tHäÿþvýëûƒù*ö¾ò›ð0ðñó]öIú^þ¬x¡ t¹]¸táÿ•ýûWøxõó*ò òôföªùý&¶êÍ8-Ù>…õþœý üïú/úÛùKú¬û«ýÿʼnb¼˜‘¡ÇÍáŠsÿ5þgý¡ü‰ûû(ü8üôû±ütþ®‘ìpÉúü%)¿ÿIÿÿ>þ/ý›ü†üüOûõúºúaú’ú²ûýÈý™þ§ÿÀBU~A·ðÿýþþÝü¦ûóúìúCûû†üüýeÿÆÎQ,èªOÈ–ÿ|ÿRÿÿ¶þ)þöýþBþuþùþÜÿçþ â6UBÍ  ?×ÿPÿŒþPþmþ~þÓþcÿ©ÿä®ZZ:b¢t)õÿ¼ÿvÿ!ÿ"ÿ(ÿ0ÿ>ÿjÿ›ÿ–ÿãÿ%%bÄ Kˆž‰·Ý§9U§f[R ®–c{hé||×ÅÝØ†ƒb2ˆi\»ÿ(ýDüMü¡ü¥ý‹ÿTô´hD`Ø>ÿÒýHýýBýŽþúÿ“Ÿv÷ÿYÿ@ÿÐÿ‚eo=‰‘UâÚˆûÕ…f†I?  4Fo¨SG&õ‘²¥þNýšûÙøßööœõ[õö5÷iøóúVþ9çå¨*žnþ–üñúú!úVúÃúû¼üÞýÿ~…jˆ ãštf÷Òíýüü<ülüuü³ü„ýYþ‹ÿO|ÆÍÙñuÃý ü¥û;ü%ý)þ=ÿ(óì–%–¦ÿlä’¡eþ`ü—ûUüþzAÒ3#ºÍÿûÿRóWê¢IKmÿÂý¦ü ý4ÿªH`xhÛ«ëÿ‰ÿèÿç¸sü.YÇÐÿ\þ"ýüÛü¹ýºþ’ÿ’ŠÉüÿæþìýƒýFþ½ÿópËKe0˜ý´ûUûyüµþ®ä³ú‘=!Zÿfÿîÿ³›!þ=o8ÌBrùÿŠÿÒÿÅuúÉ]íþý,ýþÐþ›ÿH€)wA&9ûýåýÈÿK̃Úôÿ^þöü¨û¼úÓúKüƒÿ´7< “ ´«@ý ûXúeû¾þ? ¯m‡lýÒûFýÓ¦^Šw¸®ôÿžü±úú3ûžýuÿQ¿èä&bå™6'Pÿ¨ýØüyûlú;û)ýþ<þ”ýýZü”ü1ÿòÿ™U2Gþ…ûù×øcúÄüÿÏv¹Òÿòÿ Z°<±  :óÿÀübü½ý}ÿÜí9¨ ÖI,ýÐøÕ÷’úÈþÃÿæælfô ý+ù¹ù!þ$\¾÷'ÊÿÄøKö8ùŸA [ {[ÙýÕ÷õ=÷DýS8¯l5…ý4ùù"ü(4ê§Äk0ùü¨ù¬÷Õøkýe»z›ÁäÕÊú"÷óøÚÿO  téüÍúûÚû:üýþ!ÿpÿŒƒ óÈÅþ”þ^/«íÀýQÜŸý?øn÷ýpn ¨ýýÿ¬<òóúDù­þâ|e ü©û£z—óù§ô×ö  šJ Šøõõ8ú¸¾”\nÿÚþ þ¦üÞúœû %G Ï $?}þ‚û=úùå÷çù”ÿ*… } < ë|ù¼ô”ö?ÿ4­ Ã9×þþvþú>÷}ø4ÿØ Q@´ ˆ#ùåó=ô øFüÉ6", ¹Þ—û]õÇô(úÏÿ #] #¯ýdûnø}õ+õgù×ÈX < ’ÿ&ùÿ÷çúÈÿ' ³Š8Ouìûvôâñêø@Ù Ó£ Q-ÿÅø­ôßó¦ø¶Ð|Rv ‚–úÚõpó~ôdøïü4«n œxºü‡ò–íñî]÷º—1ÂVöóê¹ê¬ó ÿ¾ ç ”  ³ Öæý»õzñUôuü!3 æ l ª«ü¿øö}÷Vý? ƒå ¢¥ûü »þ.ýþ÷ð ïx½ûÉøùÿúþÆ@"£ýÓ™ÿØý2ü“ý›ÆÚÿ€ý©üjþ,, ýÄ ðU÷òñôÜþä ö #žúó©ñ„öYÿ~Ò à þ§a0ýÎû`üýÿn¨ô^û?ú-ühýû#ø.ú Ïï  €YþðôïäñûT~c< —Y$þŸù´ôýð«ð÷öxÇ !ì‡÷½ðÕôÄÿœ^ÿ›ý§{I Öý_úËüTÿcÿêÿ¾§«95ÿ-ýýQÿ«V) ª•ÐùVô0÷ñÿá Ø¶êû ùúýè‚& íìÿ\þ›¢õ\QüŽ÷õ–÷ÄþaF ƒ Ö˨ÿ:üÅúsûîüKþˆÿ_›¡Z Ó pþ¢ø¸ôXöœý” ² ™ /|ÍýLø¦ó ó ÷Rþºt .† Trÿ=ûnú^úÞøaøAû‚5´ (,ÌHûïžëÚò.þÓW B ô ¹ m#þ#ùÕöË÷òûK²Þ穾þôü‘ü›þ«†×ùõWö ÿ ÀŠ ÏýûÉþVóŽgþ9ü:ýwÿU|Œÿzý$þ° @žUþ ýªµÅ3 ?—‰ýYø¹ô^õkúÁÀUàƒÖæ=E?õøóLóµù½ ŽœôÖÿ5ù6ô1ò)ó¾÷åÿt uÚ ÄÊûõ“ôøø%þp·yÅëšâ|³(ÿÁú(ö‚õiú±Z|à“À B ÷üò¬ïRõrü6¨ S qìÿ/ü ú÷]ó~ò™÷ žµ*ÕÞùó¨õÕùîûhý’%»e -Qòý¦û¤ùæø|û æyÜyÞ&ýªú{ü¿ä¢mYÿÿ&[Åÿ|ý×úûÊócýbù™ùIýP€· 7 Þ ûÉõòô¦÷güL½Ùÿ¹ p h Õôöó/öÿ‡ ˜' Ïïø<òäðõû=ÿt.ÐzŽùO 6×þ>úiûB‹Ã=Ìý1ùþøfû–ü)ühûÝûµþâ÷󧻌Iq²¼ý©ø«÷”ý"Ç ù Lö=ñæõ¢Ì F(úßôû›; · ;%üoüÉÿ+vüÓø8ú¤K ¹ ²û^ø€ù„ü…ÿÕ3€ › -oÿ§û’ú•úQû§üšÿ çöjßÿOù©øˆÿ‰ ¡ÉüýùÙüoÍoPþ«üÙýmê±Æývùgù8ýczK WÓý‰û”þ‚Ëþ·ôôïóôx2é¥1çû´õ(ô_öÜûÀÉÎ] 6 :÷ý¢ø"õ4ö6úÿüübþ˜5«9÷ññ•õcú†û¡ú üšÏ jyGó®ìƒí£ôÿÿ tc¡ Äëõ¦é\ã“è”øÖ ÛL+#ù¾óúô‹÷ø|ùPÿȾ 7Ìd˜ý>ôÆîŽíñ øwŸ [ÅJ åù©ê7æ—ï8®ÿ^5ø ôïõeø–û·ËLu©18òÿrüøSøcý}&ÿ¨üõû«ý=þ›ýúþõ.~ÓþëÉý5õáñûönYˆÿøîóßôgù¡þŠf - q !÷üËôSóöøK° þ øGôàú#ñ ñ}û¶ôÉøŽ5 H Î~ù÷úL¤‡­ýŸþ¿ÿ¡þLýòýAjo’¤ûdú¶ý|Ã~!ÿþ‘ÿø(ý#õJðÃñSú(¬ûú vùqø\ü¤þÜýVý6{Ä / Ó‡üxõcòzô¢øtüJ ÙÚ Œ„ô_ðZõ™í  Gh2õšï;õèác6úÈø~Ð vñ÷‰ï³ñôýù 9ãmæú8ø(úGýþOú ö½øÛ? î€àÿôÿíÿ¬ÿYÿ‚\ÿ>þýTûúéûRÏþu@âü}øaû¶….­ÿêûiû#ýjþšýãüµý·ý©ûzúIü^¦ ˜>¾4òÆã0âäí$ÿ¶ x±X QDù,õ¹ô@ùgÙëR  ?°þ­÷Kô˜óøôÁù\î ñ. ùÝñ“ô×þœc›ßO2ÛUþ‚ù¶õ·ö;ü Ç7=üXû’þ1âð {Ã&ýqü¢ý—þ0ÿ’ƒÿ½•üš÷ôÎô×ùÈÑ€ Ï í íÞbùŸõnöªù¬þ« \Ý·Fþûáøßö\ökøü¬‡ Y̯ wµý²õ9ð ïùónü¬: Š $!÷òò2ôúñ$«¨Ô¡ŸÍ'¹üáùøöôˆôû­ªÀΈøóŽ÷rý^®À—dõ©¿úsö÷øúüýÿ¶8¿ € ºù°ñ'ñËøv =& ]äù‘õÚõtøÄûÃþ•ÿÝÿÛ‰¯)«9ïpåmç½ó=&šß ‰ÉÚÿcøïTèëdùÙ œ‰ ’ºbõ"ïrïÑñ4ó§õXüÄÏ÷2ß _£øGíÐåßçNôÜà!jP îý]òòë¹êöìÂñ‘ù”{:†ó‘í à¯ßáëÐüµ “ámDýqêàÝÝýçXú¼ °’¦Ä øögïìîdóëúÜÕ¡ÕÕü˜ó¾ï¨ï6óúú³¸Ä , j ;Aü õOóÒ÷¶þ)kÇWæØþL÷îôø”þtíëýEý:ïhâ´vú*óðãö-g Dï Dþ”õ±ô<ùšþ} ¡¥ÿç1Zþ²÷HöûÛ+-$üáúþ¶ÿú‰õÍ÷Õæ žÏ‘ úˆïîoõÞÿ1{ÿýÑn ùí[ì~àEåDùôÇ[öáó¢î¡öLÐ#¹ûÌù$ýŠè Ê7)ýïùùù®ü`ÿ“@õŠþ›úúˆÿÓ9ÿú.üuo î ›Töçð—õiL J VmþœøëöæøBýê±1C°wþ°üˆýg¢û|þ©ø øóüZĉóûÕø”ûÔ¢`þýØ5žºûýçüpýÂÿ<ÂÃþùOö\öÂüÌW # Âáù4ø©ûMÃÈÄÿ·70,Eýàû%ýÃÿ‚ ÿ4þ“þéþqÿžã¶dPýsú^ú^üÏþÛIw¢ÿHÿÝÿÖWtýÇúáûR$¨èkþ–ý9ÿ©ñ Àü›úTþ;(î û²÷¦ú|……þ÷ù_ù/üÕÿUŒ!þÖþRp´ÿêûfú…ùZú'ÿÏÇ3ãÿ¤ü)ü þ ÿÀü{ùíøHþýi  vOþ«÷ãóõú¬ÿ™J¹,&ý¿øí÷¹úV³ÔEúCö2û-\¸Åäüý'ÿÿMýñûmû¬ý¸r£Žþ”ø"úÒ˜0þíõ~ôÿùxlÒM®óZ ûö~öOüg´¹~]þPþ¸ÿhþmøæóçöôþÛ(ö 2§ú\ù¯ûíþuþƒø€óë÷‚…´ÜºøóŸöãý|lÿ¾ú¦úÇÃ Ò Ãú;ð÷ð}úˆo®Ûü¯¸ý^úGù³úMþ ¨må#Q 0œþÏù÷åø2ÿájŒBOþ"ý£ü:úUö0õ³ùÞð h îL÷\ó'øè¹*¿úéöú` ÿn þ°ó•ïŽó½ú: Ìu ˜ ùú¿ó‰ò#öûKþ½ . 7 ­úóýŠùö¸óßóEø5 ì ”ÿþv÷ÑólôK÷£ûçö9 ùZ:sþåøgõìõZùMýÌ«²ì À —'ö‚ì²ë‡ô¯ Ã* ñÿÿÈýøÑï©ìô\ÒÑþãí6éÏðúû7•ÿNþ^Ê " Qþæòï…òúù¶ˆñ¶ y D â½öÐî6ídò¿û2Äîß YúðòÎð:ó‚ù´@ z\ Õú€ø·ùÈú ûHü"þ¼&,©ëáüçõwô¢ú«O|Øý“ûžþþ;\üìòíðÑù¯²[ @ûîŠëôz o à‘ýnúzý¡ŒÆ™÷€ðÄòZý¾Å V ô©üúø3ø‰ú~þØÿOÿ!ÿjxÄQþÇø™÷bú”þoop•Òýõøú/ÿÜÿýý©¶äšþÅú–úÕýÕÍ+ÄÿþDþÝ:ìyÿ´û û»ý¹:”þ ûñû1rm§þÒûƒü}ÿÇ=þý¤ýrÿÁÐü*û ýL”3ŒÿæüŸüÿ…¯ýÍúöúŒþ€püìÿfú‰÷YùXþý-ðÿþþ¡!ÿáû‡ùnúæý¥2Q“ŠhÿÐüºùaøú(ÿ¾Þù)¢ü:úbûaý±ý ý*ýêþ)µôžýèû—ürþ9¾ñÿ.þ ýBþHñÌþ®ú~ù‰ûêÿéïþý9þ÷ÿGºþ›ýÝýÿ” ÿ~ýSý‘þ½PLÿÈþÒþŒþ&þ•þÿÿ÷Ž ÿ+ýdüœýÙÿ•¹þAýÁýžÿ>3êÿ_þ¥ýñý8þ`þeþ/þyþÑÿÇþËý“ýþ7ÿ¦þëý*þQÿ•·|ÿ<þðýŒþWÿ~ÿ•þÃý þÿE]þÈüHüýµþZKØ»ÿÿþßþçþpþˆýý+þRÔ½ìÿuý5ü2ýÿ ðÿ*ÿ£þúþñÿy¸ÿþÇüïüpþöÿaÎÿ×þŽþLÿM;ÙþüüÑûsü³þ*S†ÿ]ýžüuýìþÆÿ§ÿõþGþ‡þPÿ×ÿ¾ÿÿPþþuþëþÿÿÿ1ÿDÿÿœþ?þ'þlþôþJÿ?ÿîþŠþ†þàþXÿÿOÿsþÒýöýÝþÛÿ!sÿ4þ|ý¼ý°þmÿ~ÿÿ¡þÅþCÿ‡ÿVÿ½þUþdþºþÿÿÔþÀþØþÿ ÿóþÃþµþ¿þ½þÈþÈþºþ¶þÅþíþÿÿ)ÿÿóþÉþ¤þœþ±þøþ"ÿ ÿ±þ]þEþ£þ;ÿ…ÿ1ÿ¡þAþIþ†þøþHÿEÿùþ þkþwþ«þØþçþÛþÄþ§þ»þÿ3ÿûþ¦þ…þ“þ»þ÷þ5ÿ*ÿðþ´þ…þxþÂþRÿ›ÿQÿ¯þ4þ9þ‹þýþ,ÿ1ÿÿÿ ÿÏþ¤þ³þÜþÿÿ ÿìþÛþËþ°þþÂþ"ÿ>ÿ*ÿÓþƒþoþÄþAÿ~ÿ\ÿÿ¶þ¤þ¹þÿ5ÿ"ÿâþ«þ•þÎþÿDÿ+ÿ ÿÿþÑþ˜þ˜þâþÿ0ÿ6ÿ!ÿìþŸþ|þŽþâþ2ÿxÿvÿ2ÿèþÇþÍþïþ ÿÿÖþÉþ ÿ@ÿ?ÿ ÿÞþÝþÕþíþÿ%ÿÿ ÿùþÞþÝþüþ&ÿ@ÿRÿJÿ ÿ®þ„þ³þÿRÿfÿBÿÿÿþþîþ×þéþþþÿ(ÿ*ÿ ÿ3ÿPÿcÿBÿÿôþÚþêþüþÿÿ%ÿGÿXÿLÿ!ÿÿùþïþþþÿÿþÿ8ÿ‚ÿ«ÿtÿÿÃþÁþÿ]ÿ¥ÿ§ÿ„ÿ;ÿ÷þÕþçþÿ-ÿ8ÿ\ÿeÿRÿÿÿýþÿ;ÿRÿ<ÿ*ÿ(ÿ+ÿ"ÿÿ7ÿ]ÿDÿ ÿ÷þåþöþ)ÿsÿ£ÿ…ÿ`ÿ.ÿöþìþúþ$ÿÿ ÿ ÿKÿ‡ÿ•ÿƒÿSÿ-ÿ ÿÿÿÿ#ÿ%ÿ9ÿAÿNÿ\ÿTÿTÿ(ÿÿñþÿ3ÿ[ÿvÿtÿSÿ4ÿ.ÿ ÿÿÿ$ÿNÿ‹ÿ ÿÿ&ÿ¾þ©þïþSÿ‘ÿ•ÿlÿ4ÿ(ÿ9ÿ.ÿ$ÿÿÿ9ÿaÿwÿcÿ3ÿ ÿ ÿ/ÿgÿwÿoÿ7ÿ ÿûþÿ,ÿfÿ”ÿÿDÿÿÚþÞþùþAÿoÿ•ÿˆÿHÿÿáþðþ!ÿLÿzÿÿkÿ1ÿêþÙþÿoÿ’ÿrÿ/ÿÿ5ÿNÿDÿ&ÿ ÿÿ1ÿuÿŸÿ˜ÿ8ÿàþÎþÿ_ÿ®ÿºÿŠÿ ÿÁþ¯þÿlÿ³ÿ¸ÿ|ÿ1ÿäþóþ!ÿZÿdÿWÿ>ÿDÿZÿIÿ,ÿÿ3ÿKÿ_ÿTÿ]ÿjÿeÿ:ÿÿÿ5ÿVÿfÿgÿgÿQÿ3ÿÿÿ!ÿOÿqÿÿvÿaÿHÿAÿKÿQÿ:ÿ@ÿ8ÿ@ÿPÿ_ÿmÿiÿgÿfÿaÿMÿ:ÿ3ÿ6ÿEÿ[ÿcÿQÿ>ÿJÿbÿgÿVÿQÿfÿsÿkÿMÿ@ÿAÿSÿXÿJÿ4ÿ)ÿ=ÿiÿÿ|ÿmÿ`ÿZÿPÿKÿMÿKÿ?ÿ=ÿSÿfÿÿ€ÿjÿ;ÿ ÿ<ÿ_ÿ|ÿlÿbÿ_ÿjÿoÿrÿjÿ^ÿDÿ;ÿ=ÿXÿvÿ–ÿ¦ÿ”ÿ€ÿ_ÿRÿTÿ_ÿXÿXÿ`ÿrÿ‡ÿŠÿ}ÿhÿ_ÿaÿVÿZÿqÿÿ«ÿÿuÿLÿQÿnÿŠÿÿjÿfÿlÿ„ÿ™ÿ™ÿ€ÿWÿKÿQÿsÿŽÿ“ÿ€ÿjÿ[ÿ`ÿsÿœÿ´ÿ“ÿYÿ8ÿVÿ“ÿµÿÓÿµÿ|ÿLÿQÿfÿ{ÿ}ÿŒÿ›ÿ±ÿ·ÿ ÿzÿ`ÿUÿuÿ‰ÿ”ÿ“ÿ™ÿ¡ÿ¥ÿ¥ÿ¡ÿ–ÿŠÿvÿ†ÿ‹ÿ¡ÿ¦ÿµÿ¢ÿ™ÿÿˆÿƒÿ‚ÿ‹ÿ“ÿ™ÿ¨ÿ¿ÿ×ÿÕÿ²ÿ€ÿ]ÿ]ÿ†ÿ²ÿÒÿÜÿºÿœÿÿ£ÿ©ÿ¬ÿ£ÿšÿ–ÿ§ÿÀÿÓÿÑÿ­ÿÿrÿyÿ“ÿ·ÿÏÿÌÿÃÿ±ÿ¯ÿ½ÿÖÿ×ÿ³ÿ‘ÿ‘ÿ”ÿÀÿÝÿåÿÕÿ½ÿªÿ›ÿ¥ÿ¯ÿºÿÏÿÚÿîÿðÿÖÿ²ÿÿ‹ÿžÿÆÿåÿ×ÿÃÿ£ÿ™ÿ°ÿÉÿëÿÜÿÌÿºÿ ÿ˜ÿ˜ÿªÿÍÿèÿüÿðÿÇÿ›ÿŠÿœÿ·ÿÔÿÙÿÚÿÖÿÁÿ°ÿ«ÿ®ÿ¼ÿÈÿÏÿÏÿÔÿ×ÿáÿÙÿãÿÃÿÀÿ·ÿÀÿÏÿÓÿÏÿºÿ´ÿ°ÿÏÿÝÿßÿåÿÑÿÉÿ±ÿ±ÿ¶ÿÌÿÚÿÝÿÐÿÃÿ¹ÿÁÿÐÿÓÿÓÿÄÿ¼ÿ¾ÿ¶ÿÁÿ³ÿ¼ÿÉÿÚÿÚÿ×ÿÉÿ¿ÿ²ÿ³ÿÁÿØÿìÿåÿËÿ²ÿ´ÿ·ÿÀÿÇÿ¼ÿ½ÿ¼ÿÝÿéÿüÿâÿÉÿ¬ÿ«ÿ®ÿÅÿäÿÝÿÚÿÕÿÇÿÔÿßÿáÿÔÿÒÿÊÿÀÿÈÿÈÿÍÿÝÿðÿïÿéÿÙÿÍÿ·ÿºÿ½ÿÓÿÙÿÖÿßÿÙÿèÿåÿèÿ×ÿÖÿ½ÿÁÿ»ÿÔÿêÿíÿêÿáÿáÿÚÿÎÿËÿÂÿÌÿÝÿÜÿÙÿÙÿáÿçÿßÿËÿÊÿÆÿÒÿØÿáÿßÿ×ÿÔÿÏÿÖÿÞÿåÿâÿÎÿºÿªÿ·ÿÑÿðÿþÿùÿèÿÈÿ´ÿ´ÿÈÿÍÿÝÿáÿãÿåÿãÿßÿÛÿãÿØÿÇÿ¼ÿÊÿÕÿíÿõÿçÿÑÿÙÿÝÿæÿêÿàÿÊÿºÿ´ÿ¾ÿ×ÿìÿûÿöÿêÿÈÿ¾ÿ·ÿÀÿÎÿÞÿñÿðÿÿÿñÿíÿ×ÿÌÿÄÿÄÿÇÿËÿÚÿéÿíÿëÿìÿçÿÞÿÍÿÉÿÀÿÌÿÖÿèÿõÿõÿìÿßÿÕÿÉÿËÿÑÿ×ÿÝÿòÿóÿíÿèÿßÿãÿëÿðÿúÿôÿ÷ÿêÿéÿàÿâÿãÿðÿñÿúÿîÿèÿßÿëÿïÿöÿøÿþÿõÿïÿåÿàÿãÿñÿòÿìÿâÿ×ÿâÿäÿüÿôÿïÿêÿôÿ÷ÿøÿòÿïÿêÿêÿñÿùÿúÿòÿùÿùÿüÿñÿâÿâÿìÿòÿ úÿñÿâÿèÿòÿ÷ÿùÿýÿýÿ !%úÿòÿ #"úÿ %)" ,.)(.'=IT3ýÿ 9A>7)#! #2;<.!+A:=9<6841)'*3<C/.*+67;0%.,1,.--0+52C<D>8*-/7@=;>GD7;30-8:BFF3-&.:DA?=:.159@?LA:BC>=,,&3EYRF0&)*4=ONUQHH5426;=EJHM>9/(0ASMRIILLTA7#!'>[lhWC6-/55@K]TUHH;5;=JOJMNM_QI897?GVZ\cF?+.=FHC;@GWZXTB7==JRZ\\NL96->OXZ[TMSU^MYEFGMSTWTWOC83EN^l^dIOD?88GOXSJRTMSLJ@BHJUXV`YOEG=CDRVY\TTW]VKIFRdpm`Q><O[d_X[elh_KIGLS][`]d]ZRSMQVY^pnwq_R@=\`z‚{wmga`_di|zjb`anrtf^\_nu}~}vqopq„|‰€xckkolqoe`VOD//$&+8Id„ žl'îÿA©ëýëæêÚ“Eýÿöÿ^›ÊÚæòí×­nJGr©ÝööæÏ¿¯“zm_lu•§ÌÙíéË­Žƒ{~ˆˆœ¨¤©¤”‰|t‚y‡ˆ—¢¢ªª¢˜“Š||‰œœ§«³³³¯«¤œ—’™£¤µ¶«¥—–¥¸À¹«šª¹ÇËǸ­§¦§¥¨²ÆÖèæÒù¸»ÀÈËÆÏÛ×ßØË´¥¬­¿ÈçóéÞÚ¾¶¯ÃÍÍú¿ÄÛïøöåØÒÒÏÓÍÆÂÍÙäÞÙÓÚéòðìÎÇÂÒõþõÐÄÃÆÒÍÒÝäåèáÔÊÂÉͲŠuts€™²ÅÐéîëÕǺ¬£¢Ÿ¤¬ª¬¦¥QRÿcþÙýÿýŸþËÿ wûmµºco ,þçüZüÐüèýKÿëà‘!¹Ú›dÿ€þMþ–þ%ÿªÿCùÿ ÿ¸ýÁü5ü•üÚý@ÿ¹)fÌJ@ÿsýLüUü<ýžþð&˜\ÿóýpünû5ûÑûMý‚ÿ èøÜùT”ïþôý„ýþ÷þ`¯çÚ³‰r’(RÉ)f׌‡åï¶æ'–»ÿ’ÿÙÿ½ÂCÂÞ\+x3áÿ;ÿ~ÿ9Áážr’E£'ˆÿGÿ7ÿÿ—þ þ-þ›ÿéÄ6þ­ÿ'ÿ;ÿóþyþ>þ­þ“ÿx.#?ZmaÿËþ÷þŠÿ1Œádîr„Õeéþ€þdÿ¹¤jRJÿÿÚÿ%;—9šÉE˜DÒ¬Ï×ÿ.ÿŽÿÁµÞp<¾?^ÅÞÿüÿ¹k­¶Œ•‹ !ÿ·ýÓý8ÿK†o!À=IŸÿ}ýóü)þ Ã…(’‘à 5ÎÿÌÿkO³ÿ¦þ©ÿð)q I(„@Ooþ¼þ]ý'€²xïš·5,ÿ°þ6ìÊLfÛ²DûO&ÿþòý,ÿ=â˜.ê„Oiÿÿ…x¾µÝtØ€Ë%_–ÅL¦?Wÿª‰>GA…ÿÓÿ©©Ðÿ‹ókyŸ(nVÁÿÒý4üÛûÅý”ó%­[ÇþÛþ`Ò¢âý-ü_þVùy ž.ëüPü¤þ l NþUþ†yg(/vÅšûP‰ãýü|ýèÂe䑇ÿŸ•˜'ž×ÿdÿº ®r²Á CAMæÓÿ,þ£þyÃâè&tý­ý‹<(Èþû üÒÄ«ÿ$üáþ¸×Mþþ|ù¿øyý@îÜÝ9þöÿ¢¸eüñù²ü3S$¤^Ný‘ý[q£ÿ+ýý.ÿ]àŸ„üTHDŸé9ÿÑþôþåÿ:„öX–-΀ÿèýYý[þ7Íi4&³³~¢JÅeÿÈüŸú{ûKÿ»aøþSÿ©ÂÌf“eÿ 8€åÿÙî5LþMþ²"C“ÿþãý°ÿÇÞ_Ϧ¤øÂq0ÚýEý'þ?ñïcBzwáþ.þ®ý±üõûGü7ý±þœa*2„K5ÿžúZùÈûåÿ˜ÓAHñtNC‡ýÀüþëÿ®üâV!2ÈeíX·(r3ý¶úòú5ýæþgÿ9ÿÿ/ÿO`³wÚÖÚ•¤‘oÓý™ü]ý.ÿûÿyÿþ)ýéý›ÿê–Îþ…ýÕþRMnìðþãý{þcÿ'ÿŸþ¬þtx‚Ã`ÿŸÿ˾ÿñü›ú/û»þ}÷CL[lQC\Vÿý û_ûmý°æ6%}þzý8þ?oÙÕÁ¦áˆ~ÿÿE/ZþÎüšüùýÓžHåÚø+ MùþÕüýÿ2õÁÊþúýÆþIwJð%"þýzýKýðüý›þùM ˜¾ùÆ:ÿ\ýZýwÿª‘äQXþ£ýçþßë8ÿÇý1ÿŒ˜Mˆ\‡@ûîö)ø0þ‡ÃÿÖü,þ çÚÿñûLüÖÿ°Í‚ÿ*ýØýn’÷ÜCö=á@¬þÌúÙù¹ü¥«†QµþQý¢þ'Õ­¿ku+ȇÕm0ÿ“ý‚üŠüNþÝÏÃ2Ÿ°‚Uº{†5Vÿ‰þLÿáÉ„àÿþäý’ÿ¤Ã”‰žKÿöþÿjÏU8ÿFþ}þõþÈÿ÷Þšµœý.³# ,ÿâýƒüðû€ü0þôÿ·Rþ˜=w¶<wðÿoÿ:ÿ ÿhËÿæþ?ÿ <`ÛF–nxêûÿÖþHþ'þ#ÿZ•¸â9ôÿ&þ+ý”ýÇþlÿ1ÿ¢þ*ÿ¼ìo”Cç*ÿøþd­Ò”ÿ4ÿ–ÿ‘KeœÚÿãÿ¿€TP¶ÿõÿ?,AÇSm{‡NŽAÿþÔýÔþ¯¯.ërÚBÃÿþ³ü¨üþÇ’AÙ²øû࢕˜÷ÿÿþaý„ýÉþ”—γw"´­àŸÚÿ{ÿÿÿ%i¡úÿjþÛýþ~þƒÿï?óÑÐ_ÿ½þlÿE6(ÿºý%ýÎý­ÿ‰¶À ß ÿÿÕƒ{ÿ_þšýûý#*wLèÿ>ÿÒÿ[èžzdÿPþ³þ¶ÿ¤ßùþvþlþqÿ}³;.Îþ}þ‚ÿñØyÅ ¶ÿ°ÿ¦ÿÿ7ÿäþËþ~ÿ‘½~~¬xÿyÿØÿ Éÿ ÿIþgþÆÿ½ $Ùýÿ®þÿ¾dW±pþ”ýÉþó kËÿ@þ±ý•þûÎÞÿfÿ0üƒ”^¾±ÿèÿÐ{þqýcýÌþ¡iºþ¥þÔÿÆ’®Áÿâÿó·öþ?þÿ¢qô¢ÿµþÿþ;oæãþ›ü¡ûùüÐÿq‰Ê¾9áÿÅÿ±ÿ"ÿÈâýVýòýÀþíþzþ×ý þâÿÁÍe”ÿeþtþRÿg[ø éjq0ÿÖýýœýûþží®œ‰XºÿòÿvÅSˆÿåþÿÒÿp§¦ÿvÿ-’uÛk>ßÿSÿÕþsþ‚þ"ÿøÿjzT÷ÿÐÿ,å³ý©Ù8:Ö?3ÿ3þÿýËþêÿØ5pÿ#ÿºÿ?¿:^´6ÿóþ™ÿwªáÿŒþæý¥þ]ÕÖ€6ÿ[ÿÿ")üOÿ‚ÿõýJ,ÿÃüiûÀûvýsÿoíÿ˜þØý þƒWºÕ"O@ý}ÕóþþMþüþÿAþýCüÌü•þÑ!ä¡ÿcÿ_€À%ˆÿèýŠýnþìÿ/ïÿâþÿcÁdÜ[.ÿ-ÿ*#Un,ÿ„þÕþåÿÝ^[ÿ´þèþ8ÔÍnóòßP{ÿËþnþ‡þåþ?ÿ2ÿùþÏþ;ÿ)PiÿàþÿÎÿÃ)òåI%öþÔý6ý!ý\ýÇý4þ…þÿ©ÿ*“¯a5–,jéÿºþàþ;ÿ6ÿ¾þWþ9þ¨þÈÿö‹>ž$q±Š Lÿ³þaþnþnþbþ,þ÷ýüý—þ³ÿà›#MÇKYçûfj¬±'çÿôÿd#Í+bÁ83 à°ÇâØÝÝÞâH•Õú$i¿B8Gt ’uµpŠÓ!(âj4­Uª}ýTGyfû¤cNê¥matŒpÆ?ý‰ôZ¯ÿÿ‰þ(þÆý‚ýfý2ýöüÔüüQüHügüsühü3üü2ü7üüÄûUûÒú˜ú‘ú—úiúóùhùøøÃø¦ø‰øAøº÷ ÷¸öœö«ö¾ö‡öþõfõ(õ8õfõsõTõ"õõWõÂõ9ö{özöIööÙõïõö'öùõ”õõØôÌôôôõ+õ5õ>õoõÒõdöÕö'÷q÷Æ÷?øÊøGùµùúJúqú†ú¢ú¶ú®ú¥ú³úÊú ûPû—ûéûPü¿ü(ý•ý#þ¨þòþÿ ÿûþÿVÿ•ÿÚÿ@¬&œhî®…Lðh£«‘Žºôå.ùKç‰ñIèã  = U ]YZ.ñ‡µËUËI¤¯i ßò¸E$%CX:×Ï¿mÜ*( > S S H ¤VMTyIùþ÷ý4ý”üñûûûùÇø€÷@öõôïòÓñÄðØï7ïáî«îsî$îàíÌíæíîLîNîEî>î0î1î)îî¯íQí íúìí}íî¨î[ïðñ:ò|ó¯ôÅõÄö½÷ºø¾ùµúûLüüü–ý:þÝþ“ÿ(¸Sü•k3Ø}¨,¡í X r ‰ ‘ | g O K Y f P $  ÞÕĵ†ª+§r©×è '^ÿËþûýNý üüû]û¼úúeù¸øøE÷‰öËõõ0ôeóŠòÊñ#ñðð™ï%ïÔî î„îeîdî]îrîîªîÐîíîïIï|ïÁïðQðœðÿð{ñò½òbóô¤ô8õæõ‰ö-÷¾÷HøÜøsùúú&ûžûü„ü ý«ýKþãþ€ÿ¶JÄs߉.Ê?–Ï H v ’ ™ · í 2 i ¤ ð K ¦ ù \ Ô l ï xþŸRýްw“ê&Ñ !*69#×_ØM·éãÃ’u\ " É ‚ * ÿcÎ?Æ=¹9Öfåÿÿ2þAýTüNû2úÐøF÷¹õLôòò³ñnðHï$î<ífì¦ëë„ê<ê êäéÍéëé8ê±êë}ëïëYìÑìVíóí’îNï÷ï´ðrñMò2ó(ô õÙõ“ö?÷ø½øùúkúÀú6û¾ûFüÑüVýéý†þ:ÿìáÍ¿É×ãÔ’ # ² * Œ Õ õ ú â É ¨ € = ð Œ  ¨ = Ê`àmÛP»'—ýg¶Œýöÿsÿíþ\þÖýUýÓüCü ûóú8úyù³øì÷÷öõôó!ò1ñ=ðPïîÍí3íµìHìøëÓë¥ë“ë˜ë¶ëáëìmì¿ì'í–íî¢î4ï¿ïCðÉðWñòñ‡òóŒó ôŠô÷ôdõÆõ,ö‰öäöK÷¿÷8øÂøIùåùˆú*ûâû„ü2ýØýŸþ[ÿ5ä«uP!ïºh¨5 © ` Ç â  ; t Í Z µ q õ vû±€N à§”t_­5ä‰ý,Kn¡·6Ø[ hzh }¨» Í í 1mÁ6þÿøþ þKý±üüûüúzú úù øš÷}öOõô›òñ[ïÐíWìëÎéè}çŒæäåjååÞä¾äÈäïä:åŠåñåbæÚæ\çÜçxèMé.êBë[ì€íÓîAð§ñ óyôíõb÷Ðø'úgû‡üŒýhþ6ÿÞÿsñR© ˆ(͆W2# ÷ Ý Û ¿ FÕG­þ6B-Ân™u Õ 2 q Ÿ ¾ ÑäæåÛ×ÉÌÕîÿÿ+þ[ýüßû=û®ú)ú¥ù'ù®ø9ø·÷;÷µöö€õÊôô]óšòØñ ñ9ðwïÑî,î˜íí‡ìì©ëlë#ëéêºê¯êÅêðê,ëdë°ë ì„ì(íÃíyî3ïøïÞðÂñµò™ólôõÚõ‹öJ÷ì÷„øõø[ù­ù úiú¸úôú%ûGû“ûóûTü²üýuýçýjþ÷þ€ÿÿÿwù(¥3ÂOÞ;ätömÓ- t ¬ Û ê  $ Z  ° ã 1 ç d Þ X Í…AöìåØÒÌ®ª\âqwê=5/æníÓdíRf+¬, â Æ¦‡‘¾Jÿþ ý ü7ûeú§ùù£øøC÷]ö\õYôGóòÀðEïÕítì7ëêÊèœçƒæåÏä>äÃãPãñâÀâÂâÅâÊâÝâýâ:ããä°äåƒæ•çÔèBêÏë‚íGï ñÒò°ôönø5úéû^ý¶þÜÿøÓ|‡”üQÆAè‘C   – € c ;ôŒ"¨(”ÇÕÔàßÄŒ-À>ÒRŸ® Ä Æ × Û ±jÊs,Ø€ÿ)þÞü®û¢ú¥ùºøÜ÷÷nöíõ‡õõºôNôîóžóHóÞò[òËñBñ±ððïèîYîÙí`íäìwììÎë‡ëQë$ë ë ëë#ëGëoë®ë ìwìïìíîÑî“ïrð^ñ^òVó_ôyõ›öª÷´øˆùeú'ûÖûTüÄü ýGýwý•ýµýÁýÎýØýÿý'þWþŠþÍþÿdÿ®ÿ [³øU¿'ƒäN·)¬/°&Ÿ‡ôN ç- e £ Å ï ÿ   ] Õ _ î c ç § ™ŽŠ’Ÿ¬µÙ0/,06 ÎsúeÏ I D & ãZ•q$̸?ŒÀ; ä ~¦™éþˆýQü3û;úZù²ø:øþ÷¦÷÷Pöfõzô ó•òGñ¼ïîì7ëê¨èAçàåÒä ä”ã5ãÎâhâ&â$âcâ’â¾âÍâøâQãÖã„äYåFæXçšèê¸ëtíKïUñxó—õÇ÷óù&ü5þÂ,nta ‘Ù#oÇ r Ø S ß ‘ S & Ň?ô’ n»ìøêÀ™Lú‘ Š ‚ÿE} – ¯ à ¶ hlÀdµþ ýTû«ùMø÷öõ5ô€óó´ò€òNò"òóñãñÈñ¶ññ)ñÇð[ðèïwïï‰îþí’íCííÆì–ìˆì™ì·ìöì;írí°íøíVî¬îÿîDïœïð„ðñŠñ/òáò¹óÂôÒõçöø0ùfúŒûü˜ý`þÿ‰ÿùÿMh]0òÿ¹ÿ|ÿ6ÿþþÏþ¨þþ°þÓþõþ ÿYÿ—ÿÌÿøÿD‡´©–¯ÈŽ2—Ö<ܬ\× (\³k¥Á … B â ” \ rÉ9–Ý_¬ïN«Á¡Jâ”A É !p!¶!·!©!~![!!š €øQ‘Q¦¹Í  tèL׋þŸüû¸ùªøª÷Åöö¨õBõÒô?ôtó{òtñUð6ïÓí\ìÖêQéüç¡æHåþãäââá<áôàÃà©àÆàáráâáAâ¢â)ãÂã€ä]åJæKçqèâé€ëEí/ï7ñyóÛõ4øŸúûü\ÿ’Zÿt® ® p   × - l ¸ ù U«œ6Ûy Ìrñe ÏÝÔ GÜXÏAŽì3‚Êü , H X D  ÕnÖ3{Ãÿîý ü1ú]ø¥öõœóbòFñ?ð{ïøî®îyî]îDîAîVîƒî¥î§îîhî=îîäí›íXííºì˜ìœì½ì×ìñì(ííî‚îüî}ïðpðäðdñÜñOò·ò)ó¨óIôùô¶õ›öŒ÷ø¬ùÎúöû/ýSþzÿtMè|åú§@Ìi ŽÿOÿ!ÿþþêþìþûþÿÿ7ÿTÿWÿ_ÿ\ÿWÿRÿFÿ=ÿNÿaÿ‰ÿÑÿ.˜ 7Üj¨8±’÷N’å4‰é… ? ú ¿ Ž » ÷EpÎC¼9¬`Âäö !ø!¡"ÿ"i#ú#’$¡${$N$$¤##õ! ÄÎŒ+pnZY ` vÈ9Þþ¾üèúDùø÷=ö‰õ õ~ôÿónóÁòäñððÖï îNíÍëRêßè…çþåoäãõá áJà¹ßIßßðÞßzßÕß.à•à áÃá‘âsãiälå˜æôç–éDë<í8ï|ñÓóWößøuûþ©^Šm # Œ À Æœ8ªEl€œÁñ:Œþ|øsûtÛ&ET>ÃSÏ1y°ÁÜî÷ÿ ð Ô ª r -ÇC¬2Wþxüú®øÊöøô9óñðÛîÊíøì;ìÏë‹ëwë’ë´ëûë0ì~ìËì*ímí©íÈíÒíÑíÆí¾í¿í¨í‘í~ížíÒí%î†îüîpïðÅð‘ñEòòò‰óAôéôõö½öF÷É÷høùßù‹ú`ûMüDý>þCÿ:&è¥GÆýæÞ%kÅÿ1ÿ¥þþ³ývýNý)ýýýý,ý8ýJýNýAý2ýýýéüáüêüÿü)ýiýÈý=þÇþ^ÿ¾q΋/ÀIÐuˆ¢W $   K¦$©“ÈrðC—ï9!Q""#×#|$ö$n%³%ý%(&$&,&ô%Ã%T%·$¶#;"‘ ¤±OxB(,2 - 9ÿÏüàúùi÷âõ¿ôëóBó¯ò òYñzðï¾îåíÄì?ë¬é è‰æå‚ãñáhàßÞLÝä܆ÜXÜIܪÜ8ÝïݰÞsßPàNávâÌã åNæ ç"éËêìƒî}ðòùô}÷ú¶ü[ÿóˆw ¯ ¬ køE[7×6u¡­¥©ÅüRšã7à/.Õpì@v{Z3â—2È P Õ `ämîa¾ÿwýËûúTøŠö·ôüò^ñÛïwîíóëëWêÎééOéUééÜéPêÏêJëÚë_ììì_íÂíîGîtî‘î´îÉîéîüî!ïdïÌï[ðöð£ñeòDó:ô-õö÷ð÷Îø˜ùkú%ûËû\üûü‚ýþ´þWÿúÿ5æ–&±$ŠÀØß¿s€ßY“Ôÿ ÿHþ¤ýý¬üRü üÆû û“ûŸû¨û—û†ûwûeûYûAûûÿúöúôúû6û‰ûìûXüéü˜ýfþ*ÿ×¾Ÿ‚d< ã¶u6 þ Ù å ß Õ à}æWÓkš"¾dÀ ï!#F$t%T&ñ&q'Ö'D(’(»(Æ(›(_(ü'¢'ð&ó%$Ì"Î ‰$^CÀj0 ƃgÿ¢ü1úøMö¾ôZó;òWñ»ð)ðqï²îÞíììïëÚê±éEè§æùäãÿátàÝÞnÝAÜhÛ×ÚƒÚTÚaÚ­ÚCÛÜ$Ý)ÞI߉àòáuã 墿IèêÑëÇíÖïòQô›öþø™ûKþµWîr Ý  ²(U[ ŒÅÔ·–q< ÝÌÄâý3U†¡Ã̸t ŠÝö­I¼p ¯ å 3u¸UÿšýíûGú±ø÷ƒõíóOòÎðUïüí¼ìëyêŽéáèrè"èýçíçè‚è é§éHêóê£ëiì/íÍíSîÇî+ïuïÏïûï4ð^ððÇðñœñ-òßò¥ó…ô‹õ­ö»÷Úøõù ûü ýûýÓþÿ/»D° yÍ]ªô4c‡š™wGŸÎóFÿfþ‹ý©üñûJûÀúTúõùµùŽùlùmùnùzùrùzùeùkùdùGù'ù ù÷øõøù@ùvùÙù`úþú®ûwübýdþƒÿ•·å 7]€€z ˆ ’ °Ü'hÎ(}á]»!™ Œ!«"Û#%N&='ý' (=)¡)á)**ö)Ê)t)ó(7(q'{&%;#!ÔT’Tâaú ˜$¸aþPûøöôóòŠð,ïî=í~ìáë/ëhêƒé–è­çªæ„å)ä­âFá÷ß®Þ\ÝÜöÚÚxÙ2Ù(ÙSÙ´ÙPÚHÛ}ÜÆÝ%ß•à$âÖã¨åç~éiëríŽïàñ5ô™ö ù£ûNþûÏ–Z ú Ž fzAË  Óo¦–a¹FÅYó•PóÖè—o8ërÑ è•a• ¦ · žšˆ‚‡ÿ¦ýÉûøù<ø‘öõuó÷ñ„ðïÑí”ìiëIêTéoè¹çç¤æmæbæzæ»æ)ç¹çkè0éêìêÌëµì•íjî(ïÌïqðåðZñ´ñòwòÈò#óó/ôßô©õ”ö™÷¬øÑùûAüxýþ²ÿ¨Dó~å+Wz“¡©Ÿ—yjCÈy³.†Êþÿ$ÿ@þdýü¤ûÄúôùGù¸øNøå÷–÷`÷E÷8÷3÷5÷-÷#÷"÷÷÷þöãöÙöÏöãö÷C÷œ÷øžøEù6ú1ûGüYý“þãÿU¶]° b § Ñ ø ;hˆŠ¥ß+n¾‡ê,té Q"Œ#$›%·&Ö'²(B)ž)*T*˜* *[**Ó)™) )K(O'5&Ï$è"  k9¼þQ ¥ æ)Jþ¯ú÷“ôò£ï’íøëåêêPé²è4è²ç)ç‰æØåþääõâ·á~à5ßéÝÜ2ÛîÙùØIØÅ× ×¶×ØÈØÐÙÛvÜÞ ßsáIãGåNç]é{ëíÄïòxôØö>ùÊûlþ?á ½ ’FÍØTzQÖ$»B¥ý6p©%Ï}9óÆ‹#¸ch?çDnv h ?É‘oÿXýLû]ù|÷²õônòïðïîÍì™ëwêaé`èdçŒæååZåÿäÐäÌäñäPåæåæ]çJèNébêˆëŸìºí½î¬ï‚ðJñúñƒòòòXóºó"ô€ôõŽõ2öýö×÷ôøúRû”üÕý&ÿ^ˆŒb·;…«© ‰a1ð®a-î´o%¹LÖM²ñÿ.ÿKþ\ýhürûúžù»ø÷÷S÷Òö{ö&öáõ·õ­õ²õÃõÇõ¿õ¿õÓõËõ°õ†õtõ_õNõKõlõºõöŽö8÷øùCú}ûÏü,þ´ÿJÏD¥qÄ K Š ºô2ÉŒ÷[Ç?“Û T!ƒ"§#”$O%,&'Þ'W(»(-)¡)*D*A*F*<*1**Æ)")i( 'e&$s"I Š#i•¿Î —ZJþeúæöÎóæðîèëBêüèîç+ç¤æ+æÇåHåÎäDä™ã±â¡áxà?ßÞÞÜÛFÚ&ÙDØ•×3××F׾וةÙÛŒÜAÞàÜáªã™åç›é§ë´íëï7ò™ô÷ùJüÿ T kdEnmè Ñ :!W!&!¢ ð3XU\‚¶v±`#Ò”4³cd;èb’¥ ’ k6è©qÿNý4û7ùL÷võ´óò~ðÿî…í"ìÉê„éVè2ç3æ5åcäºãEãã÷âãyãäéäÜåùæ#ècé´êìDínî”ï—ð€ñLòìòwóßóHôŸôõ|õúõ—öT÷4ø6ùOú”ûÐüþ\ÿ¨Øí̆…åốk(Øc$ê©W÷†PªÙÿôþêýßüÄû»ú­ù–ø¥÷¿öömõõ°ôxôSôBôZôjôqô|ôsômôLô)ôîó¿óóeóDóMóóÖóWôøôæõ÷Rø•ùû üEþÝÿrñ=ŒÔ   H z¨ÔgË%nÊGÕ>q…É "I#+$å$Î%·&Ž'(y()´)*H*_*v*ª*¶*p*ó)z)é((æ&b%‡#H!¶¨#aoV Àiÿ–ûü÷zôñMî×ëòéYèçýåBåÊäpääÁãJã©âÆáÔàÂßÂÞŽÝ=ÜñÚÆÙÚØØZ××Ö}ÖƒÖæÖ—×€ØœÙ Û¡ÜYÞ2à âûããåßçòé"ìjî¾ð+óµõjøOûaþq–®ß /TAú’ȺCy 1!š!¦!m!!g ˜®È׿dÆ<Ï4è}{Áàщx½ Ö Å §x?Ëþ°ü˜ú•ø£öÉôóWñ¡ïîsìøêyéèÃæ‰åvä€ã¸â/âÕá²áÁáâŽâ\ã\äåÃæè†éÿêgìÈíþî ðøðÃñƒòó‰óÔó'ôŠôùôsõòõ‹öP÷Mønù±úýûeýÓþ!o¶Ú´F³üEY?ìšM#õ­KÞ³t:ÕK£ô6LÿAþ ýÐû’úlù^ø\÷Hö\õ¹ôTôúóÁó‘óó“óµóÝóáóàóËó´ówó4óìòò/òàñ±ñ­ñÑñ!ò¥ò^óhôžõ÷‘øú©ûdýÿ¦$…×NWx œ µ ã 'xÚYÔ[Í?²ò$27# ã ¾!‹"Q#ó#›$T% &Æ&•'I(ß(T)Ã)F*{*ˆ*T*ù)})é(('€%•#¡!mšdã<A< 84Xþ ú$÷ÕóÑð:îì ê=èÎæþåaå¸ääpãüâƒâêááàöÞÞÝÜÛÚFÙØ ت×tב×Í×cØÙ-ÚjÛÌÜ:Þ¶ßcá3ã!åçõè#ë~í$ðÒòŸõˆøûÎþ ] Ô üÚm·¥9z\î3 $ ÝrêNžß&{äVál ŸDÖ=ŒÁÕÁ€(«P Œ »Ôáâäéþôüûù'÷2õ\óyñ“ï¿íëë-ê†èõæŒåMäLãvâÞá|á[áwáÕáeâ'ãä3ågæ«çé?ê{ë±ìÊíÒî»ï‹ð%ñ­ñ:òËò:óŽóÞóUôøô¦õlöD÷5øCùjú®ûìü(þ[ÿˆ†f<ëW~žÍòþçÔ¼³«–n&à!¦÷(%"ÿüýîüÄû}úLù8ø>÷lö³õõ‹ô*ôôùóõóÿó ôôô ôôÆóló ó¹òvò4òññÓñÆñÖñ ò­ò_ó-ô+õ^öÇ÷6ù£úü‰ýøþX“åD?:Mc z  ° ù S®•uºð&$á¢EÞg !Ü!}"ý"œ#`$3% &¦&'z'Ï'ð'ú'È'H'¸&&%Ã#d"Õ ÊC”žµ{Ö  ˆ-Óþ¸û£ø¦õó©ð­îÊì-ëäéÏèûç'çtæëåFåpä~ã¨â¹áîàéßôÞ ÞDÝÜòÛWÛÌÚ|ÚhÚqÚ®ÚÛ¦Û_ÜGÝJÞfߟàßáNãßäærè‡êÆìï¸ñsôZ÷Vú^ýe~•’ n ‡®°cÄל(€³³œmÇo¸f¸Yœ1þ=sŠ„mH× ‡ % ° 8® €Þ[þ’ü¸úÚøçöñôøòñ!ïPížë ê²èyç}æ·å3åÓä²äÇäårå æ¼æ‚çTè-éêåê±ëjìíÄímîïï ð“ðñ£ñ?òãò”ó?ôöô¿õžöx÷\øFù.ú"ûüáü¬ýgþÿ°ÿ>º)e¹YŸÏéøÿÙ :Í>“Éåÿÿþ/ý-üGûyú¸ù ùoø÷÷÷.÷ìö­ö„öWö2ööÖõ¢õbõ#õæôžôFôôòóÎó¼ó±óÑóô‚ôõ¡õlöP÷Cø/ù+ú"ûüýáýºþ¨ÿ—|V?84$( G ‚ ° Ô ôò0F,ê«d Ø•:ÖyMçŸH Û y!é!/"C"u"‹"ƒ"E"ì!~!Ê ' ngY XWI#‚°­ ’Èe‘ýûÔøÌöõó$òùðð?ï}îçí7írì“ë–êé€è}çRæ åíãã2âhá«àñßkß)ß"ß)ßJß‘ßÿßàZáâÆâšãwä妿èzéëßìêî(ñ£ó8öÐønûþ·\Ëö ½ \ Èæ½kâBÈáó0N«Ë×áåÖ¹pÿƒóT—¼Óó  8 V x Š •¦º±•X¶YÿáýLü«ú ù|÷Ýõeôôò¤ñ„ð„ï·îîží@íí÷ì í7í}íµíúíJîªîïjï¼ïðOð«ðñeñµñòhòÓòLóÃó=ôžôõvõëõ\ö¿ö÷z÷è÷YøÑøFù³ùú„úåúSû°ûü_üÇü7ý§ýþxþ×þ'ÿuÿ¨ÿÄÿÓÿÆÿ©ÿ{ÿAÿíþvþüý}ýý…ü üû#ûËúˆúDúûù¦ù`ù-ùùöøÛø¯ø…ø_øCø øô÷Ó÷­÷„÷‹÷£÷¦÷¤÷Ã÷øSøaøoøÄøjù ú‡úûŠûÕû1üœü'ý€ýæýNþ«þFÿº%z÷s ÌnÖ‘RÉ^ à  ¶ ‰  ¤ + Á S×}F©W ±0Ôp -¦HŠúf¬Ë 3F0ôŠiu0Ä^šË è  sÓBúÅ“ˆÿŒþ¢ýîüZüŸûËúúQùøÊ÷¿ö§õŽô–ó°òÆñòð3ðjïÊî7î½í:í¹ì@ìÊëbëëÎêyê5êêøéêPê¨ê(ëìëâìî_ï×ðWòõó¡õK÷ñøvúÕûýFþNÿ;ö¦Hâ`ékÕ;±~ã/h¦Û%÷ëݸ¡wK>àÅ vJ§,¢ÿ\®ó<xÈÿÿrþÓýCý¼üVüûû¢û^û/ûûúÏú©ú~újúFú1úúúÿùýù úú$ú0úJúkú‘ú¯úËúîúûúûûêúÙúÌúªúúYú7úúðùÛùÑùÚùéùú:úxú­úÓúûú!û*û%û ûöúÜú¼úžú{úfúcúiúqúŠú´úÈúÎúÄú¿ú¶úŽúXú$úúéù³ù„ùBùþøÍø·ø˜ønøcønøXø1ø!øTø:øå÷Ü÷2øƒø{økø<øÙ÷}÷µ÷Aø[øÊ÷÷ødøWømøøªøÑøÁøóø!ùLùù_úðúû#û“ûáûü¸ýÊýnýxýÍýÇý·ýþÇý­ý0þ®þÀÿR¼¿Ülñ„+D´Ó¶€Ô,ºt'ý¶ ¡ F 9 ^ & "î[“›3‘ªTu™´«z®,’ÿòK~‘ ¦ Ù  \   ì^» b»ô;¯'vÀøE­ÿ,ÿ’þìýHý¨ü üûîúJúœùíø<ø°÷÷_öÅõ?õÄôOôôÈó¤ópólóóÇóôó.ôsôÐô+õõìõ]ö·ö$÷’÷øøùoùòù€úûŠû÷ûZü©üýLý«ýíý,þCþyþ”þµþÂþöþþþ ÿÿ0ÿ¢ÿ,M3r±™T/éÿÆÿ”ÿŠÿ©ÿuÿÿÌþÕþÑþßþ:ÿ~ÿuÿ?ÿÿÿjÿ®ÿÁÿ}ÿ2ÿÊþ±þÝþÿÿðþëþüþ÷þ³þoþ4þþþ(þ3þWþyþnþMþ1þ:þ þþØý­ýŸý×ý8þ‚þ‚þYþBþþÊýýoý´ýãýêýÖýÀýŒýfý4ý ýýý!ý`ýjýÿüpüüÔû|ûkûaûFûAû1ûûüúäú®ú…ú¹ú¼ú~úúãúûúúèùù¾ù%úúùþøëøùJúïúšúÙù1ùŒø'øoø¯ø­ø"ùŽùµù_ùaù^ù'ùùù/ù ùÛøù3ùÛùéú!û€úÄùŸøføÿørùsùhùíùfúÅúÉú£úRû6üžü`üüûšüýoýIþCþëý§ý þ’þ/þ$þrþáþ‰ÿ°ÿÓÿ®ÿBrƒä«Íìy?iÉeàRˆ³­—7 i v r ~ t Õ ‰ g 1 à s %Ÿß>Db˜‡6Îz/Ü ! ™ P   Ú Š , ·  h ö™"™‰}Š!àŽ9à“\²Lܘ+Ýÿvÿ ÿþ.þÊýcýøüªüVü üÏûû]û7ûûÖú´ú”úzúlúYú6úúúôùìùúù ú!ú<ú@úUúúÁúôúûûûïúÞúûuûÌûÁû€ûŒû¿ûâû&üü¨üçüýeý-ý¢ü<ü üóûÆûœûÝû-üEüBüAüNüü9üÇüâü\ü*ü’üüüõü±ü›üÌüýêüiü4ü[üœüÊü-ýÈýÉý‘ýKý6ýPýXý•ý®ýýsý—ýþYþAþ4þ"þFþWþªþáþ·þÍþÿùþÊþ¹þ˜þ\þGþVþ¬þRÿéÿ´ÿPÿGÿgÿ¯ÿ‰ÿ?ÿÿrÿ’ÿ]ÿ[ÿ\ÿ,ÿçþØþíþúþíþçþæþÐþÏþ þxþ_þ$þ·ýpýŠýýaýýïü®ü[ü“üÑüšüœünüpü¾ü¨ü¢ü±üÅü¸ü7ü±ûRûQûûâúoûû úšúÂú|úéùsúÏú>úèùûùÆù—ùÍùúQú úßùoù<ùeù¬ùÀúåúúÖùZúBú8ú†úpú—ú\ûïûÕû-üQüªüPüÖû=ü³ü£üöüÔý‰þlþHþ½þþþ.þ˜þÿÈþæþñþ–ÿ¼&¿ÅŠ"v¤ï½Óéë›2Iy’·Ù«ÊkÜ9‹³ŸÑÚ z ç  ó e º ˆ ¹ ö ÿ ò ¬ ˜ n H « n D A e o ] [ Y P  ÀµOÄŒR÷‚‚?÷¢x}•Œs;æ’4ÓbĶ´¸¦Z×ÿhÿÿþ®þOþ9þþÖý¹ýœýkýNý[ýUý0ýÐüŽüfüŠüžü‡üeühüüwüµûðú0ûÕûüü5ü ü“ûû¹û7ü'üÒûýûÕûâûáûØûóûüüsü¤ülünüFüüûÿûˆü”ü-üåû üŸü üµüŸüü¢üQü&ü·üýHý{ý;ýý?ý'ýCý^ýÎýÅý–ý|ýþ¶þÿ,ÿñþ½þ ÿ¹þÄþØþÊþÈþÙþNÿ§ÿŠÿÁÿöÿ«ÿºÿÞÿ¼ÿ—ÿÖÿC\g\%4f$O1j‘'Äÿ¿ÿ°ÿ¹ÿ—ÿÿ¢ÿžÿ%ÿ™þæþ:ÿãþ[þ…þ°þ£þ>þþ'þ9þâýrýý½üýþü½ü6ü5üÃü!ýÃüÊüòü°ü«üzüóûü üŽûkû¤ûøûÄû…ûƒû¶ûŸû]ûÝúsúvúaúªú$ûrûAû6ûZûïúôútúNú2ûü¥ü1üÏûVü/ýÇý4þuþ‡ýàü»üOüaüVýòýžý(þŠý ýqýqþŒÿºÿ¦ÿ¦ÿ+æÿ®{Œ€³÷šÀÿH§Qõ;,RÆŸõ i¨]õÔfæñ$®¶ô}kµ³ú¢¼ÔÔ½víŽ>ˆñ41Å—A½ñÍêZRL˜plÁæžV ÒŒoª°kwÏÌâøî[Ù‹>áu ¤,Ô’Š“¶»W†Jh¦¦¯¸¡oF ÿÿ'ÿ;ÿÿÅþ–þŸþÚþþþ³þÚýÞüxü¨ü8ýný­ýŒý?ý/ýzýýý£üoü¡üýaý“ýâýÚýêý½ýlýQýùü­üUü@ü©ü#ýHý£ýËýÁýGýnýÙýÜý°ý{ýþdþrþPþQþ:þ…þcþ þÚýÔýSþ ÿnÿ#ÿ¸þ³þëþ ÿ•ÿµÿGÿdþmþýþÄþ¡þ»þáþ ÿbÿ A: > IÿKÿ9ÿÿtþÑý§ýýþPþóýªýáý¦þ½þVþêýçýHþÑþ³þéýKý‰ý¡þÿ«þîýßýHþïýeý?ýŸý þ€þÁþ¡þ=þ þþþÙýÔýëýÎýý&ýýÏýNþPþÑý‚ý®ý@þ}þNþÙýêýrþ6þ¯ý6ýùüýýjýaýðýŸþïþ¾þ¥þ¸þþ×ýþÈýÚýÐýÜý;þ9þáýýQý€ýgýðý{þîþ;ÿ¾ÿœ‚QÐÿÃÿÝ"ÿqÿÄÿ¸ÿÞÿsÿ*ÿLM×T¸ÍÀ R­ð;據cE"Ê?ŠÜY°‘ EÎßчr˜\,‹9¯Hx„%?íªá³yüEW´•ÂÅ1»øðXäÇ " å¢Ok´ét=„Šeõª)C\"üp€;¿ùk—œ?`¹kdiqr§o8ÆêŽ:}ÑÌz–SßVa:‚}Á”Œ¾¢ŸB?pã ɲÿ3ÿ.Ó5ÕÿíÿåÿBÿNÿœ<(ÿÂþÏÿ° Üÿžÿÿkÿ–xÿ"þEü8üåý¯þ†þŒý‚ý:þ*ÿ.ÿÿrþÍþþTþcþ–ýÜý"ÿ)¤ÿ+ýQü7þÄÿÚý)þÓþ>ÿÔþ§þ_þþ5þßý3ýyü®üiþkÿÌþ&þÛýÿÑÿÇÿÓÿö¤[:¦ÿ¡ÿtÿxÿ8ÿˆÿˆ ÿ‰þ½ÿ"^>0ÿ|ÿ“ÿøÿýÿ;Éÿ)ÿšÿtK3ÿKçþ˜þ×þDµ/Ðö Lé^}OÅ=”Èãde7À¨¦>îØE{¼’7˜ÿãÿLÒæYá°B‚£µk!9%ÿÿZŽ2ÿªþèþÒÿ `ïV)'þ‚¥xºàÿ3ÿ ÿ`ÿ½ÿW¨jM¡Î¶f…Ø%ý]QŠül\Ä*ÂÿÑÿxÉbµÿxÿ™ÛPÞaúIq­Ó:1£²ïÿ[ÿ™ÿ£83”p÷g\¬•€ri0ã’!1\rs”íB8ûðÃÿ_+8Õ<ÙLïŸe0íÿ’AÍCDÕq%8ó¨¾Kàï ¹ÿÂÿÞÿÑÿ¨ÿšÿÂÿ$XËÿûþ€þÛþ¶ÿaëÎ^íÿ XëKVÄ2_X@ (s­£x±òÿÿÿ$ÿãþ ÿÓÿÒ¦B@Â<?dÖ×Ûµÿÿhÿ$äÿ–ÿ‚ÿôÿÐ'{¥ÿ2ÿ ÿÿÿ‘'IÏ[QI¹ÿðþàþoÿ+ „úÿ$AìÿòÿG€ŒÌÿÁÿuˆ‹=ïŽB<Ðf–:—Ýÿÿãþ-ÿ3ÿ ÿ¦ÿ‹÷à¸sŽÿ9ÿ.ÿÚÿÇsâÒ¨Hæ°^dµ=¡ÞÿÄÿ'¯}LW¡¥~j_‹Ê\% Þ³‚óÿ@ÿØþçþmÿøÿŽ÷Æ7»ÿ„ÿeÿHÿiÿ×ÿ„çÿÌ`ÓÿkÿMÿYÿiÿÿêÿ þÿèÿÑÿÏÿåÿ&Qz“Å4ÿÂÆ¥<­ÿÿÂÿÌÿ³ÿ§ÿ½ÿŸÿ¬ÿøÿ]Á:~ ¥’xBû¬uL#ýÿñÿÙÿÁÿÌÿ1PlžÓî1fpÆ€2áÿòÿ)=:Ku‡ŽÃZQ¸tR]‹·«•‚N-9DhŠØ "ëɲ‚S?Léÿûÿ(U}©ÓéMZ-÷ÙìõôÃ…M..ATbpš¯É»w/4BHUW„ÓúíÙ™] )=4#üÿ×ÿÐÿÒÿÛÿñÿDdx…‚—¼àÖžrQ`}™°¸ÈÙˤOùÿ!]œ›‰~yaC:_r€º¼»¯’Šž½ÚÒ m= èÿßÿíÿõÿ!1i¸ÕÖÐÖÕáβŒqpWOJN.$'"*Umu…t_m‚‚xlq—zSPgm\I:(üÿíÿÎÿ´ÿ‹ÿ‡ÿ·ÿÐÿÖÿåÿ 4^q‚…Œ‘ µËÌÈɵzD' øÿ';?Rahnsš°§œ‡‡„—¥Ÿ¡¦² Œ‚‡Žƒc=";NH5IE+òÿøÿ *5?KDCTebYhmo^NE<. ùÿþÿúÿîÿñÿëÿñÿÿÿ þÿ #*-0.0"%#0570'0;;E>5, #"  ).%óÿèÿîÿýÿúÿúÿëÿéÿãÿÛÿÅÿÌÿÝÿ%.'6I]Z\VPI=4 þÿíÿàÿÖÿÔÿãÿïÿ3CNF@EGKRQIHHJA=9;EA>@3,+""   ÿÿúÿñÿïÿóÿçÿÑÿ›ÿkÿEÿQÿcÿsÿwÿÿÿŸÿ¿ÿØÿýÿ9_„›ŽˆmH)æÿØÿÒÿÔÿèÿêÿòÿóÿþÿ !31'åÿÌÿ¸ÿ«ÿ«ÿ°ÿÊÿÈÿåÿûÿ$4LTidng\PH- -/,-46%  úÿõÿñÿîÿöÿõÿõÿóÿ,! -!# ûÿéÿñÿëÿòÿêÿãÿëÿâÿíÿòÿùÿûÿùÿûÿüÿÿÿ÷ÿòÿùÿýÿõÿõÿõÿ$#,-4 ÿÿ  ÿÿþÿøÿðÿüÿ÷ÿøÿøÿûÿðÿôÿîÿ   ÷ÿ ÿÿÿÿûÿøÿúÿ ÿÿóÿóÿøÿýÿüÿ ! %" ûÿüÿõÿþÿôÿöÿöÿûÿüÿõÿùÿøÿ÷ÿþÿíÿðÿ÷ÿþÿøÿ÷ÿûÿðÿòÿùÿðÿüÿúÿöÿøÿñÿïÿëÿèÿïÿóÿòÿòÿçÿÝÿÜÿàÿæÿÜÿÛÿÕÿÕÿÔÿÑÿÉÿÏÿÎÿÏÿÌÿÐÿÑÿÍÿ×ÿÕÿÔÿÏÿ×ÿÛÿàÿáÿáÿåÿìÿäÿìÿçÿíÿèÿäÿäÿåÿæÿãÿãÿìÿæÿàÿâÿÜÿäÿáÿåÿãÿãÿòÿöÿíÿêÿîÿíÿôÿùÿôÿóÿïÿ÷ÿïÿòÿêÿ÷ÿþÿÿÿòÿîÿëÿëÿäÿêÿíÿòÿïÿñÿëÿðÿñÿôÿòÿõÿîÿñÿêÿëÿäÿäÿÛÿÜÿ×ÿÛÿØÿÕÿØÿÐÿÒÿÔÿÖÿ×ÿÞÿÑÿÍÿËÿËÿÆÿÆÿÈÿÉÿÉÿÄÿÈÿËÿÉÿÎÿËÿØÿáÿÓÿÐÿËÿÌÿÌÿÂÿÉÿÇÿÌÿÉÿÆÿÈÿÉÿÐÿËÿÌÿÌÿÇÿÌÿËÿÌÿÅÿÉÿÆÿÐÿÈÿÊÿÄÿÊÿÏÿÐÿÎÿÕÿÒÿÊÿËÿÈÿÎÿËÿÅÿÉÿÌÿÎÿÑÿÇÿÈÿ½ÿÀÿÁÿÁÿÁÿÇÿÂÿÆÿÁÿÂÿ¼ÿ¼ÿÄÿ¾ÿÅÿÈÿÃÿÅÿ¿ÿÁÿ¼ÿ»ÿ³ÿ½ÿ¶ÿ¹ÿ³ÿºÿ¹ÿÂÿ¿ÿ¸ÿ²ÿ³ÿ·ÿ¼ÿÆÿ¸ÿ»ÿ°ÿµÿ©ÿ±ÿ®ÿ®ÿ©ÿ­ÿ©ÿ¥ÿ«ÿ§ÿªÿ¦ÿ°ÿ¶ÿ¹ÿ¼ÿÄÿÇÿ¼ÿºÿ»ÿÃÿÄÿ¿ÿ¼ÿÆÿÂÿ¿ÿÊÿÄÿÅÿÅÿÄÿÆÿÅÿËÿÃÿÀÿÁÿ¹ÿÀÿ¼ÿÀÿ¹ÿ½ÿ¸ÿÂÿÃÿºÿ»ÿºÿ½ÿ¼ÿ¾ÿÀÿÀÿ¾ÿÁÿ¿ÿÈÿÃÿÅÿÁÿÀÿÀÿÆÿÌÿÅÿÅÿÆÿÊÿÈÿÄÿÁÿ¼ÿ¼ÿÆÿÊÿ¼ÿ½ÿ»ÿºÿ·ÿ¸ÿÄÿ¼ÿ½ÿ¹ÿºÿ´ÿ¹ÿ³ÿ±ÿ³ÿ®ÿ¸ÿ¯ÿ±ÿ²ÿ¬ÿ¯ÿ°ÿ³ÿ¬ÿ±ÿªÿªÿ­ÿ°ÿ­ÿ±ÿ¬ÿ´ÿ³ÿ¶ÿ¸ÿ·ÿ·ÿ·ÿ¿ÿ¿ÿÀÿÂÿÀÿÆÿÄÿÁÿ½ÿ¶ÿ¾ÿ·ÿ¼ÿ¾ÿ»ÿ¹ÿ·ÿ´ÿ¶ÿ´ÿ¶ÿ»ÿ´ÿ»ÿºÿ¹ÿ¸ÿºÿ½ÿ²ÿ½ÿ½ÿ»ÿ¸ÿ³ÿ³ÿ·ÿ³ÿ³ÿµÿ±ÿÀÿÁÿ´ÿµÿ®ÿ¬ÿ«ÿ­ÿ£ÿ®ÿ§ÿ¦ÿ§ÿ£ÿ©ÿ¢ÿ¬ÿ¥ÿ¦ÿ¨ÿ¤ÿ ÿÿ ÿ”ÿ•ÿÿÿÿÿŽÿŠÿ‹ÿŠÿ†ÿ”ÿÿ‘ÿÿ‘ÿ’ÿŽÿ‰ÿÿ‹ÿ‹ÿŽÿÿŽÿÿŽÿŽÿ‰ÿ“ÿ„ÿÿ‹ÿ–ÿ”ÿ“ÿ“ÿ’ÿ–ÿ’ÿ—ÿ–ÿ˜ÿ’ÿ–ÿ—ÿ‘ÿ•ÿ–ÿ™ÿœÿ¦ÿ›ÿÿ›ÿ¤ÿ•ÿžÿ”ÿÿ”ÿ™ÿ›ÿŸÿ–ÿ’ÿ–ÿ“ÿŒÿ“ÿÿ‹ÿ‰ÿ‹ÿŽÿÿŠÿ“ÿÿ‘ÿŽÿˆÿŠÿŠÿˆÿŽÿˆÿ’ÿ„ÿ‰ÿ„ÿ†ÿ€ÿ}ÿ€ÿ‡ÿ|ÿƒÿyÿ|ÿwÿvÿyÿwÿtÿzÿwÿƒÿrÿvÿpÿsÿlÿ{ÿwÿiÿfÿgÿeÿhÿhÿdÿeÿaÿjÿcÿhÿhÿuÿlÿgÿmÿlÿoÿsÿsÿmÿpÿkÿgÿiÿcÿpÿkÿpÿnÿvÿmÿtÿwÿuÿvÿtÿyÿ|ÿyÿwÿwÿtÿqÿqÿoÿnÿiÿhÿcÿgÿdÿaÿ[ÿ^ÿbÿYÿXÿSÿTÿKÿWÿQÿ\ÿKÿPÿUÿUÿQÿTÿLÿQÿOÿTÿHÿOÿNÿMÿRÿUÿVÿZÿSÿ]ÿVÿUÿ]ÿYÿ]ÿ`ÿ_ÿ_ÿdÿcÿ_ÿcÿhÿfÿcÿcÿ\ÿ]ÿYÿ`ÿZÿcÿ]ÿ\ÿ[ÿ]ÿpÿhÿ_ÿ^ÿ\ÿWÿ[ÿ`ÿYÿ\ÿXÿSÿZÿVÿ[ÿZÿ_ÿ[ÿUÿWÿSÿWÿWÿYÿ^ÿXÿXÿWÿSÿTÿSÿUÿWÿQÿWÿNÿWÿXÿ^ÿQÿLÿLÿLÿCÿMÿHÿHÿDÿMÿIÿFÿAÿCÿ@ÿCÿSÿGÿBÿ@ÿ@ÿAÿ:ÿCÿ:ÿAÿBÿCÿCÿCÿ<ÿBÿFÿ@ÿ@ÿFÿEÿGÿEÿDÿ@ÿBÿAÿ<ÿ>ÿ;ÿ?ÿ@ÿ:ÿ=ÿ;ÿ=ÿ=ÿ<ÿ=ÿ?ÿ:ÿ?ÿ7ÿ<ÿ8ÿ6ÿ7ÿ4ÿAÿ<ÿ7ÿ<ÿ:ÿ:ÿ>ÿ;ÿ>ÿ>ÿ<ÿEÿCÿFÿHÿBÿMÿRÿIÿJÿGÿLÿLÿRÿMÿUÿOÿYÿXÿXÿ]ÿ\ÿ_ÿ\ÿaÿ^ÿlÿeÿdÿbÿcÿdÿ[ÿ^ÿWÿ`ÿWÿ_ÿPÿ\ÿOÿYÿSÿXÿSÿXÿSÿUÿTÿTÿVÿVÿUÿTÿWÿYÿ[ÿ[ÿ[ÿ^ÿWÿ_ÿ[ÿ\ÿ^ÿbÿaÿYÿ[ÿWÿ_ÿ^ÿ]ÿ[ÿ^ÿ^ÿ_ÿ]ÿ`ÿYÿ]ÿ^ÿ[ÿWÿVÿ[ÿSÿUÿMÿTÿKÿPÿJÿMÿMÿGÿIÿEÿJÿFÿQÿRÿIÿKÿIÿIÿHÿHÿJÿJÿOÿNÿTÿUÿOÿPÿOÿIÿLÿNÿZÿRÿPÿJÿHÿEÿLÿRÿOÿIÿJÿEÿCÿDÿAÿ@ÿ>ÿ=ÿ8ÿ?ÿAÿ7ÿDÿYÿHÿMÿCÿDÿYÿJÿOÿOÿNÿXÿZÿZÿQÿRÿTÿZÿ_ÿ_ÿXÿYÿ\ÿZÿ[ÿ\ÿ_ÿ_ÿbÿ^ÿdÿ`ÿ^ÿ^ÿXÿYÿZÿSÿXÿZÿ[ÿUÿYÿTÿSÿTÿMÿLÿWÿNÿHÿIÿFÿJÿCÿKÿFÿDÿFÿIÿAÿCÿ8ÿMÿJÿEÿ=ÿIÿMÿKÿJÿFÿFÿCÿGÿBÿHÿJÿHÿLÿPÿGÿCÿMÿJÿPÿVÿ\ÿSÿRÿRÿMÿNÿLÿVÿOÿVÿNÿVÿJÿQÿIÿIÿKÿLÿIÿOÿHÿJÿHÿRÿEÿHÿEÿFÿKÿRÿLÿEÿKÿCÿOÿIÿSÿKÿKÿFÿKÿHÿMÿDÿFÿ=ÿ=ÿ;ÿ<ÿ:ÿ8ÿ9ÿBÿ<ÿ3ÿ7ÿ3ÿ0ÿ/ÿ5ÿ4ÿ2ÿ3ÿ9ÿ2ÿ9ÿ-ÿ8ÿ2ÿ0ÿ/ÿ1ÿ&ÿ-ÿ,ÿ3ÿ2ÿ7ÿ5ÿ4ÿ1ÿ6ÿ:ÿ:ÿ=ÿDÿFÿLÿGÿJÿGÿJÿKÿGÿDÿOÿ^ÿ\ÿQÿUÿGÿNÿNÿTÿRÿSÿSÿHÿVÿRÿOÿNÿHÿLÿGÿMÿDÿMÿ\ÿLÿOÿSÿOÿOÿJÿZÿNÿNÿFÿGÿOÿFÿKÿMÿDÿKÿGÿIÿBÿOÿCÿMÿHÿGÿBÿFÿEÿGÿGÿGÿOÿLÿOÿDÿFÿDÿHÿJÿQÿKÿLÿPÿOÿPÿPÿOÿIÿJÿMÿGÿCÿAÿCÿFÿDÿBÿ8ÿ=ÿ=ÿ5ÿ=ÿ<ÿ:ÿ>ÿ>ÿ:ÿ:ÿCÿ@ÿ?ÿ@ÿBÿGÿDÿAÿEÿCÿHÿCÿJÿHÿHÿIÿDÿHÿGÿEÿLÿCÿMÿKÿHÿLÿKÿKÿLÿEÿGÿDÿGÿCÿGÿAÿIÿKÿBÿDÿ@ÿ?ÿ<ÿBÿQÿBÿCÿ:ÿ;ÿ;ÿ<ÿ5ÿ8ÿ5ÿ7ÿ8ÿAÿ>ÿHÿLÿEÿAÿGÿVÿTÿWÿNÿRÿLÿSÿNÿSÿTÿWÿPÿTÿZÿUÿ\ÿVÿ]ÿWÿXÿYÿYÿWÿUÿWÿTÿ^ÿUÿ[ÿ\ÿZÿ]ÿ`ÿ`ÿ`ÿaÿeÿiÿkÿpÿpÿoÿuÿpÿsÿsÿtÿuÿvÿuÿtÿuÿ|ÿ~ÿ‡ÿÿ|ÿ€ÿ‰ÿŒÿ†ÿ‡ÿ~ÿÿ‚ÿyÿÿzÿ{ÿ|ÿ€ÿ|ÿuÿ{ÿwÿ|ÿÿ~ÿ…ÿuÿyÿwÿxÿuÿ{ÿ{ÿwÿ}ÿ{ÿ|ÿxÿ{ÿyÿ€ÿzÿÿ~ÿzÿÿ€ÿ‚ÿ~ÿ‚ÿ{ÿÿÿ‚ÿÿÿ„ÿ†ÿ}ÿ|ÿ‡ÿÿxÿjÿjÿcÿdÿhÿ\ÿNÿBÿ8ÿ0ÿ)ÿÿÿëþÑþ™þkþ*þÁý4ý¡üüòúTùQøOøòø¹ù´úºûyüçüDýãýwþ ÿN Óx^ÿDþ\ý¼üÑü®üxü¬û^ûìûý*þªþpÿÓÿFÿ{ÿ˜š\™j¾ýq*e`}“=™¿„–ÿEÿœÿÿýlúùàø’øÜ÷Åöøõ|ö`÷Ñ÷„÷y÷ŒøGúóûtý»þg¨—{¯üÇlØ]™ƒŽÝÿYÿþÄýHýýÅüuüü6üŸüöüýNýxýŸýÖý#þŽþÿÿåÿ~éÁÓÿŽÿæÿ% ×ÿEÿÔþyþ-þàýÁý¬ý‚ýHý÷üuü8üÕû#ûú»øv÷Jö|õãôØóÈòðñ\ñ#ð¶íì§ëìíyíîïäðòóõ÷%ùû"ý¾ÿÙFu#  Ö ( ð + DzV¯iz“Þþ\ýûwù£÷oõ3ô²ô>öD÷øöÃö÷(øaùqúGûhüCþ_f`nêÿèÿ7ÃÿâþÔýýÊüüúrø÷ñö´õíô¤ô ôDôÕôhõ]õ1õrõÑõ‰õ®õ•öç÷ùÂù`úˆú=ûÓûèû®û¡ûJüý`ýBýŽý²ýÊýžý*ýSü”û=üÌüVü‘û¾ûOücüUü?ü üü¢ü{ýþ}þøþ–ÿIëM;?|mƒ°Ëö´Y¯8¨ÿPÿZÿÒÿ*9óÿµÿúÿhª£˜ßIœg«üü9ÔœŽ'XÄÿ]ÿÖþüýSý­ü.üÊû~û1ûû5û6ûLû6û ûcûëû|üÍü\ýÛýeþÝþ"ÿ8ÿ\ÿÓÿ35f„R+Ìÿ‹ÿ›ÿâÿ'K;EmÍ!q«áWÍX·Ôø)µ7ެÑo˜†_YfG3Öt.¯+»{C7o££Ï=0è­Øù#D2àÊo®È´ÁöÿGÿìþ´þsþþ{ýý!ýlý°ý¡ý¢ýÍý‘þiÿ÷ÿ#âÿ|ÿýþÿ¾ÿIÃ,œí?Y/ ÎdI>sá‡+ÎxÚè×;¬ :V ~$öÓNj€¥¿Î)HÝ6ï f†ÜÉe‰×j÷#à©íiøþ³ýÅü”üÒü\ý&þÿþŒÿºÿÊÿëÿûÿÖÿVÿÕþQþ8þŽþÿJÿ"ÿÊÿÆ/‡Ø?@ ñª<–ás.‹®ÎÁ2‡´ñWUª÷UïÁSbVrG&¶fVCØÎNû… ‰C ä” á‘®ÿ;ÿöþ»þ‚þvþ,þþþþVþêþ(ìÑGF½çCñ¦>‡¦ xX)•é[Ħ‚ù¾ÿüþ(þÛý¾ý½ýÅýõý%þAþEþþžÿg+ÙDj@,8¶'àŠã‚+ï—iÊ@{—–>Ò$%Þç5wš’žž¿4@Ó¸0¿:Pê{ÿHþ„ýòüüIû_ú¤ùhùÙù¢úªûÀüÖý ÿu‡a Îm„:Ãt&ÿßý§üüŸûîúú.úàú ü&ýÉý<þöþu0ð;fU jh5ÄCŠàUÄ:3|ËŠ§⃴y@Oº I¯dÓ„º5…j8>{¨ŸÁ„W«ÿcÿÿnþŸýéü¥ü÷ü4ý/ýýýÛüÃüý/ý(ýNýêý¹þ_ÿöÿIDùÿ’ÿ€ÿÔÿš/®®Áùû©‹¹à¶©‘÷õW…D¼dd|T÷³y¤­ÃóuòGGð¦jY08‘¿G™9*õÿ<)ÛÕ¥œÉ„»±Æçþ¶"3ƒÿÿzþ½ý.ý*ý ýÝý8þóþ•ÿ­ÿ;ÿIÿ®ÿ&‘D_Hë ¾HþÙeñ¯})vÃÿVÿ!ÿÀþYþ–þFÿÓÿ"“AöàK<ò¾ßð¥)ëÙk½ÔîÿTÿÿÑþeþþÝýªý‹ý–ýïýLþ6þþOþsþ€þÍþ3ÿ•ÿ132ʬ0ÀÌ&quÇ|ó?6ß¶ÙŸ÷R1<Rzxg—1˜«“ïQ\NC"áÏÀwšµ áÿÈäSo´L÷z46>íYèŠÃÿŸÿXÿ0ÿ=ÿPÿQÿ·ÿ£h¿‹<汕ÌÕÀG±ÿÿ»þ’þ€þSþEþ\þhþmþ½þkÿF0)o/àCœ°CΤÉÛÏüB8 îªgŒÀÿŒÿ^ÿ|ÿðÿdåìmKƒ~ `—ÌöHÝ;þC/® ™ðüü%ÂýÙsÿˆþÖþ ÂŒbÚÿ–Ú»¦Ê5ªâKì€;ÂÿFþ|ýÜýÿ-Rnÿþ ý¦ü¶üýÐýîþÐÿ\Ð}4…9kpJÿ÷ÎZIr.SüƒXÑB2ÙðàÿÿŽÿÿ¢ÿÆÿâÿèÿÓÿµÿ©ÿÀÿ–ÿÿöÿƒáÝêò{9¸­›jçÕDá\cÿùÄõ÷„ïNyÖh)9ˆ!]ý"FÿÏþšþdþ^þÜþêÿHúQÞÕ3ÃV¦ÐØæûÙŸ  »ÿKþÔýLþ&ÿÿÿ£ÿ'ÿßþØþÌþÿþ1ÿbÿ "znGÑ;¹0q  Ÿ¸(kÔc;Q¶îü)‡#zø¾+ÿ%þþŽþRÿO3¬Wt‡ÿñþÿ£ÿ%çÿ9ÿ¼þÓþ(ÿHÿ‡ÿºÿÈÿ£ÿ´ÿÿ“ÿñÿßû݆ÿ^ÿÿ Kýÿ•ÿåþ2þðýÏýý¡ýCþ÷þœÿ-Þ£]¤bK^›àF²|ÿµýýõüý*ýbý,þ ÿÐÿÆÿÿŒþ«þàþ(ÿUÿÿ$øõÓÒ–ÿ9þký7ýŸý þþªþ?þìý„ý6ý]ýËýþ—ýÒü¦üýõý©þÿoÿçÿy–”Ö&8Ù‹¤­¤Ÿã¿)|ÿºþûý5ýÚü7ýÌý1þ3þ¡ýPýOý`ýXýbý#ýÈüÇüŽýèþÎÿÿÿsÿóþpþØýÐý©þ*Œ…ÿÈrRÐmrü•{fÑÏØŒõ GÏó.û& PäÈ™ŒÐ)j‚ؾ™œûê9˜¯|@šgãkFí©°Å× [æ^—Ѥÿ-ÿRÿ±ÿk¯”…ÿ|ÿÄÿºÿÿdþ8þÈþÌÿ MíÄQiÐÿöÿËøÛ0XÄ./©ÓÜpmbç™§Ÿ±ºÿíþeÿVá"Y‘qµkÿ{þ¯þ¤ÿ¡?—ìÆB‘ìÿwÿEÿ4ÿZÿÍÿM¬÷¾-ƒÿùþ‚þ!þÝýŸýÂýƒþ\ÿ?·ÿ¼þ›ýýÅüÒüíü°ü@üü*ü™ü˜ümüGüëûIûŠúúDúÊúQû‡û‹ûÜû ü»ûÛúêùƒùÞù§ú1û û¿ú„úÈúCû|û}û]û9û ûÚúbúPúûqüõýÖþmþRýKü«ûXû\û•û¨û¯ûüjü¬üŒüúû#ûvúúéùùù+úŠúqûÂüáý7þìýTývü³ûsûÂûfüöüaýªýÁýÃýþ~þvþÂý5ý ýtý…þýÿLSÝí/]70¬^¸4–L}½½.„A;säÞ5s9I 2fÂkÄ?eˆ°Uô ­&÷0­&$E" + j (  ò % ù Ý > ã :  Æ S ; Í c ”  8 œ á ì & O ÷ º Á Ü à º í n " ó © 7;†š $… ã D % w]çq‡¤¬ðSÆÿ¿þ3ý¯û<úXù ùôø¾ø’øøpø_øøn÷ùö0÷ô÷åø ùñùú0ú–ú6ûCüTýÌýwýãü¼ü>ýEþCÿÉÿãÿ»ÿ”ÿ†ÿKÿâþCþŽýãüUüäûHû‘úìùlù!ùÖø@øX÷ öÂôãó¹óØó óóoò¾ññ¬ð~ð¢ðèð.ñûðPð›ïtïýïËðÂñˆò$ó ó%ô»ô6õ§õ8öûöË÷_ø¨øïøZùëùœúqû!üpü;üãû®ûêûMü§ü×üÿüìüÔüîü,ý5ýüüÉü¥üZüü,ü…üÕüéüëü ýDýQý"ýÄü¼ü:ý þÿÛÿ>)B–Ù°¨fÊlÖüøñ´{~•¦ïÀ•áƒu}w»/ÏUÎ[ Ú q é X Â Ü J å s ´ >Ç0@ߤsrc³@yZñ¢¾b?3|Õ'ˆó‚¨CewÁa“ø©=Æ,5^Ðú h _Ì—(’áÿþ üú<ø7öô_òHñšðbð(ðð)ð`ðVð:ð;ðOðkðÿðòeóõãötøÁùÖú®ûüÃü™ýoþUÿ'ÿõì{¤=y¾PC#Ø‘fO6æbµÿöþVþàý‹ýMý%ýý ýRý ýâýÔý€ýýüMüüêûžû>ûûýúíú–úÿùZùÎøcøØ÷÷1öõìó«òPñúï‹îíÞëBëþêýêÕê—ê^êcê¶êëhëáëŒì{íÀî0ð¯ñ(óÑôöKøÉùûüýüýÔþÿ^+òÅdÆÌ{ê)]“ÌÿþþCþ·ýSýÚüü/ûfú¨ù ùwøå÷u÷÷àöÏöãöâöÑöÊöýöo÷Û÷RøÚø…ùTú6û üýãýÆþŒÿ9úЦ{@û¯cþN|›ës  ‹  ± c ê " < R ‰ Ü H»0Ç?ŽêoèK‘Ä¢+´9«4y¡É·¾`±vz›ë § l -ÌåŠí æ ÜÒ5³ þûq÷ôàð îæëÍê¤êùê‹ë¸ë8ë1êé…è®èéÛêYìî:ñ ôžö±øIú±ûýlþ«ÿyävF Ñ Ô @ ƒ‘ò«eÒâë']?ÿ¯ýÌû$ú8ùùùßø}øøú÷øû÷|÷¦öâõFõñô¸ôzôô¶óZóóóúò‘òÀñÐð#ðãïêïÕï¡ï‹ï´ï*ðÉðiñò©ò¨óõônöç÷cùÐúMüÏý^ÿåA/©÷*jn9íœbà*´ÿTþòü—ûú‡ø ÷Ïõîô ôMó•òïñkññ©ðPðððbðéð¥ñqò?óþóÞôØõÜö»÷røøø‡ù5úãúmûìûfüÙü!ýMýTý0ýÜürü÷û‹û;ûæú‘ú?úðùÅù½ùÑùÍùÉù¶ùÆùúú%ûÑû¡ü¬ýáþ7Ó°‚Fö¤w` i W  œ ! ¬ ]—Ó/¹{Ô%y´6†ÚN½tNYŠ¶Îœ‰gRLSm ›! #¤$M&(ç)›+U,o+ì(:%å .^S¶ a U·Öþýúøëóïwê æ\â÷ßwßYàŒáÁâ’ã¨ãKãÉâ®âÿâ9äžæØéùílòåöëúHþ0l"†«6  @ Jì=\ùáBC  A è“&˜pþsüöù÷øóHñƒï®î/îÆí¨íóícî„îøíþìËëîêƒêgêrê”êëÓë©ì{íøíîží÷ìIìôëìëWì+í;îiï¢ðæñ÷òÕó¢ô„õ¸öYøLúxüÓþ9¬+®ü  áK•ÎçÖ_]ÝÞZh" Û ÌŒ<ý¸ù(ö™òþî°ë¾èæ·ã¨á=àZßØÞ³ÞËÞßÁß¶àâÑãàåèyêí×ï‰òKõñ÷Vú…üƒþj½<¹8xƒKÈ77%ç€$ÿãýÌüÁû¹úÍùûøOøµ÷3÷éöµö›ö—ö¾ö÷÷6øÐøsùúàúÉû¾ü¼ý–þ\ÿE:(öؾøOš Ê ã  7i¯Õ/iãOµáÿjëG \!€"$‰%*'£(*“+H-/þ0™2‡3·3+3å1V/™+!'"Ú è=¦ W z8}ü2÷ˆñ…ëçå<áÐÝ®ÛuÚÚ Ú ÚýÙ‰Ùߨ+Ø ØúØ ÛøÝÝánæUëúï6ô ø>ûåýI¥‘¡ù –™…óÐl6÷›õH ­ Ê f{b0þõúØ÷ôôGòèïïídì[ë|ê›é³èÄçÉæéå&åuäÒãgãYã§ãMäåôåöæÝç´èméêsêóê¨ë‡ì•íÁîð‘ñó‡ô ö÷ù™ú1üÙý™ÿˆ— ³ À ¾ †.°QiZ i«¢cÅÜ’èÚŽ M ‚´Úðþíû¼øvõ!òÚî®ë‚è]åˆâ>à‘Þ‰Ý&ÝÝkÝÞßAà‡á×â?äçåè—êíÆððó ÷ùù°üÿ×-HOr—¤ ‘ m F ­ ¦ aï|+õÿÞþÒý¶üuû úføÈöHõôñò9òÇñ®ñò—ò0ó½ó.ô€ôÛô~õ7ö÷øiùûþüÿþØŠè(\Žº$ › b X|‚KsÕ5…Óœ!`#`%Å'F*™,.÷/1N2M3¶3…333Š2•1M0,.¯*&¹ .ü#K æGT‘þû?øÖóÎîÀéöä+á&Þ ÜéÚòÚ ÜAÝ5ÞÚÞßþÞ4ßúß á2äðç|ìhñAö»ú“þœòÍ…} ® ~¡b#ʺV²÷ R е´qþ0ûô÷¨ôqñhî³ë¢éDènçÁæûåå5äˆã÷â?âcáwàíßóß©à“á–â¬ãöäpæðç8éê“êë¦ëìäí—ïrñjósõ}÷~ùGûÌüûý$ÿ‡:+BH] o wCµÑHÚ„Ýõ¯¨ãèÖ « ` îEŒºþüTù–öÀóøðMîºëUéç,åªãŸââârâøâ¯ã†äsåƒæ¶ç%éØêÙìCï×ñ†ô÷„ùëû$þ Å4ywƒp ½ ½ i ¥ŠOãpñíÿÄþ’ýjü=û ú§ø%÷ÀõlôaóŸò4òññ×ñòšò@óÓó&ôfô¼ô]õ:ö9÷}øßù‚ûOý8ÿ`¶íVé‘ 8  ôK°"VFQD6 Ç!=# % 'š),.ù0²245_5<5Á4Ü3¸21‘0Ü.´,ê)f&U"Âಖº ܳÎüÙøºô’ðìƒè…äàà ÝÛ'Ùü×x×l×é×SØøØïÙCÛÝߢá”äèÚë³ïmó÷¼úRþ»G> £X·¼^»Á{ÿc´—0¦ âóäØÿÿü úôöòóñkîËëMéÿæðä9ãÐá™àß·ÞûÝcÝóÜÔÜÿÜmÝÞß3àá ã„äíå\çÐèeêìïí¸ï¦ñ¨ó±õ½÷Ïù¸û ýxÿK ˇ1à K Î E±ðöëªJ±æê¿dÝã¥E¾ ì Å w±8¦ýÿúNø´õó™ðXî:ì`êÊè„ç“æâåfååÙäîä.å»å­æñçaéòê´ì©î’ð‡ò{ôsöføGú üÒý‰ÿ1ÁX^"º œ#k 6UXG/ ÿõýÇü‘û‡ú‚ùø÷÷_÷ ÷ÚöËöÇö·ö¯öÓö÷|÷øÎøÎùûmüÕýEÿ¾=²Qû¹    ——ÙWm†•“!–#y%'¼("*c+@,ü,o-±-Â-ˆ--k,Ÿ+>*Y( &5#û®MÒMঠ4ïkÏý!úOöÀòGïKìËé§çæ”ävã–âÓá.áŽàWà|à áâã}åÆç"êºìïnñÇó9öœø û²ý^‡Ñä ”  þ ¹-mŠc_} H Á ý»^ÿÔüOúÛ÷õLóñï)í~ëÛéPèÏækå äÈâ»áéàZàààoàáàtá%âØâãOäLåuæÏç[éëÿì ï$ñ2ó,õ÷÷øìúÑü¼þ®²µ®šc ý i ¬¾³ƒR¡WsCã3E&æ—0 ± ý Fn‡Še&þÞûuù÷²ôzòŠð¼îHíöëë5êŒéóèbèûçµç¢çãçŠèqé…êÓëCí½î-ð¥ñómôÅõ0÷¼øKúÚû|ýÿu³¨pð2Z`P+ í¾{›X†³ÿÞþ&þˆýûüŒüNü$üü!üüüÙû©û³ûäûAüÞü¤ýªþ¶ÿõ'RlƒÀEü ·   ºäH¸È˧< É!†#%d&¡'v(l)7*°*Ÿ*7*í)>)N(7'»%Æ#W!ŽÄÛÖ½ªá û ùýÀý÷ù¿öÙó,ñùî7ížëiêméè‚ç{æÄå#å°äÊä?å^æÀçŒéYëOí8ïñ–ò ôõ_÷aù”ûÄýêÿûÛW|r`¥ñ  ûÅ>z‰m‰Ý'ÿpýÄûúsøßöFõÏóqòñžïPî%íýëÙêÚé÷è3è…ççÕæÀæßæ ç-çSççÊç!è›èAéê<ë‰ìûíïñðLò˜óíôCöž÷ù¼úuüMþ8áˆù=W _ [ C < $ÊkÑüê›x¥Å » « } C ÷mÈ*CÿQýdûtù±÷ûõzô*ó òøðüïï1î`í¢ì ì§ë‘ë¹ë ì‘ì=íþíÎî‘ïmðMñ4ò'ó1ô`õ‰öÈ÷ù1ú>û9üýüžý5þ«þÿþ?ÿxÿ«ÿçÿ<IP9Ùÿ·ÿ¥ÿxÿbÿCÿFÿTÿ„ÿ¨ÿÄÿØÿ%H–êRê‡]90)': j · þ fø«ŽG±NÛ@ ¶!³"°#i$>%·%&C&&ñ%r%Û$Ð#‚"â Þ®Qòu–Qè ” .–îþþ3üˆù÷õYó×ñ‚ð_ïTîHí3ì8ë3êŒééé„é?ê3ë.ìmí©îæïôðÛñÌòüódõöö€øøù‹ûôüHþ`ÿ"µ cÈY‚{[¢úÿþýüúúóùûøøH÷‰ö®õÍôôó6ófòñ³ððï8ï«îSî îïíÙíåíÝíÙíÞíÓíÂíÖíîaîóî¸ïðñiòJó,ôõôõÙöÁ÷ËøúTû üþýCÿ­¿µŽh1 Ì£Z ‰ á  '  ê ¦ U î } øqÁý- dž+Üþ¥ý—ü˜ûµúìù8ù…øÛ÷÷Böjõµô ôÌó“ótóróŒó¿óûó(ôZôtôšôãô8õ¦õö®ö>÷×÷løõøZùŒùÇùäùúú-ú6úIú}úºúóúû3û<ûBûOû^ûnûxû“ûÍû(ü£ü ý]ý¼ý(þŒþÿ|ÿ™Q;øæÚÝú  \ ¥ ýzâmç_Á Ín !’!é!E"£"Ë"Ê"¬"E"l!n `Þ6Ï„ŠáW˜ £ ƒ ]F(~îÿˆþVý9ü&ûëù¼ø÷(öòôìóóuò7ò2òDògò»òïòó@ólóžóúóyôøô‰õ@ö÷÷þ÷\ø™ø¦ø´øÆøÆøÓøõøù;ùJùTù7ùùæøšøAøÜ÷…÷*÷Ðö­öuö[ö\öjököiö\öCööÙõ³õ€õbõ\õ‚õ¯õôõDö…ö­öÃöÏö×öÐöÚöîö'÷‚÷ø…øùˆùýùgúÉú/û‰ûóûü!ýÚý™þ_ÿ!ä™9Ã?¶Œ÷kØ0t¬¶¸ŸgÕ{'Ø‚¹7–ê-Ejÿ–þçýHýÌüyüDüüýûÝûµûwû4ûãú½ú©ú¹úØú#û@ûkû’û¯û¬û™ûûbûAû8û ûûúúïúÔú´úsú+ú¿ùJùäømøøˆ÷'÷×ööaö&öäõõSõõèôÌô¾ôÀôØôõ>õõËõ ö.öiö¢öïöH÷¨÷#øÃøqù3úéú¬ûoü-ýóýÀþ’ÿoVYaz“¾å = l { ­Îè÷ô÷è¼Yéwå4G\@ë„(Õ v`r£ÇØ÷ËJãвnÅSÇ a±W¤òTÑ8Ÿ Þ  # @ ` нñ,Sz’£Ž†wÿsþfýoürûxú‡ù«øÉ÷âööõ.ôIótò˜ñËð ðuïóî—îLîîëíÆí¼í¡í•ítíDííùìììøìíMí‚íÃíòí"îFîVî`îpî‹î¯îðîCï¡ïûï[ð¾ð#ññæñ>ò™ò ó~óûóŽô+õÂõ^öòöx÷ø–ø#ù™ùúŠúûrûÎû&ülü®üëüýCýjý˜ý±ý¿ýÍýàýìýøýøýþüýæý½ý¡ý|ýtýrýý¼ýêý)þgþˆþ›þ˜þ—þ¡þ·þØþìþ ÿ#ÿ>ÿVÿtÿ˜ÿ˜ÿ¦ÿ©ÿ®ÿ¢ÿžÿ…ÿ€ÿvÿoÿlÿrÿuÿZÿHÿ#ÿûþ®þ‚þVþ!þöýËýšýyýZýIý'ý"ýý ýýý&ý7ýbý{ý°ýÎý þ1þsþÃþÿ{ÿðÿaÍA¿<·8Ã`­XÛ³• ‚ e F ! ß 1â/©qÕ2”Ñþ#DN.#0-2HtÄjÏ1IUW9-çË©Iö“,ÊNÁ(–nË@d ‚ ¢ É í  (+0ÝÔÿ´þŸý~ü`ûbúgùtø÷–ö¯õÆôçó ó4ò`ñ¤ðð‚ïïÃî|îYî8î,î#îîçí®í{íLí#ííóìîìòìüìúì íñìÜì¶ì“ì~ìpìaìdìfìyì™ìÁìðì,ílíªíõí+îrî·îïmïØïSðÓðTñèñyòó´ó[ô÷ô£õKööö˜÷<øÖøyùú¬ú6ûºû,üšüý€ýðýfþÔþ:ÿ”ÿäÿ#T}¥Ìî1ˆÒ,sÅû(;=BDPZgyœº³¥‹kZ:ùÜ¿¨š~]9è³t!ßVÛÿªÿmÿKÿÿðþÆþ•þþhþeþ_þmþyþ„þ‰þœþªþÇþçþÿfÿ¯ÿ jÈ0›qÜ]ç€$߉8 Ý´ [  ¾ d ñ k ó Q³ˆögÇLy¡½ÈÖ¼¦»õ@›øbÎ P~ª¾¾Â»±©£•m/Þ|¤ûV»c ½ î  B e ’³ÊÛåàÖÌÀ¹ÿ±þ£ýŸü¨û°úÕùþø&ø]÷’öÌõõô9ôtó¶ò òzñþð©ðZð3ððüïæïÎï³ïŠïSïïØî¯îqîfîGî[îIîPîDî)îüíÔíœífí7ííèìÙìÓìÜìãìíí8íXíxí¢íÏíîGî‹îùîoïäï]ðñðxñòò@óãóˆô:õåõ‘öB÷ñ÷ øHùÝùdúíúvûürüøüsý÷ýrþ×þ:ÿ‚ÿ½ÿìÿIÎ(‚Í(v¶ê%6<Q^j}”«ÃÑÓÎǨ†aG)øëÙĨ}ZáœdÞœ_+äÿ­ÿtÿ?ÿÿèþÑþ´þ¦þ’þ’þ‡þ†þ‹þ’þªþÁþãþÿMÿÿÔÿ'†äF úWÇ;µAå|'ð»|) é ¢ 6 Þ s  ‡ ý ‰ödÍ0†Þ6j¬ñ&ALqÂb¹@œâ*_‡¯¹¯­­¡‡_%ÊeõoêcÐ0ß0B W i ˆ ¸ ÊØì ôíиœÿ–þ‘ý€ü‰û¢ú½ùæøøO÷„ö¯õíô,ôxóÆòò™ñ#ñÍð€ðHð$ððîïÐïÂïŽï[ï+ïõîÀî˜îƒîmî`î[î_î@î îìí½í„íSí+íýìâìÉìÇì»ìÅìÌìáìùìí'íMí„í¾íýíVî«îï‘ï ð’ðñ³ñTò ó®óXôõÅõö5÷ë÷†ø-ùÏùYúçúsûýûü)ý³ý?þÂþBÿ¤ÿûÿFs§ÕCÚ7šç6ax‡š¦¼ÑØì÷$/3/ îÙÁ¤Ž‹zhS/ Оf(í¸z5ä¤XÛÿ©ÿ{ÿNÿ,ÿÿÿÿóþáþÔþÈþ¾þÃþ¾þÚþòþ.ÿmÿºÿc´D˜Ñ&…ömø•Aù®`Þˆ 7 Ý ‘  ® < › Ú I»/<Žá8XPdp›èO¡ ‰g½ó<Z}|–qK¿]û–¥wÒ-fŸ Ç Ê ò  . IcŒ šuF/ÿþýüû(ú`ù™øÁ÷ìö)öiõ¦ôüóFó’òöñˆñ*ñÛð§ð‹ðiðNð2ððÜï¦ï^ï)ïßî¶îŽîpîPîJî<î)îîéí·í~íVí$íùìÏì¸ì¦ììŽììì ì½ìÞìíOíªíèíEî£î ïxïíïrðöðŽñ3òëòšóVôõÜõ›öe÷øÇøpù ú£ú.ûÁûIüØüoýúýþÿ§ÿ{Íÿ*`‡±øR°jÄöAWbqx~’¤ÅáìùøùüìÙ¿£ƒdR8êÃe4þ¼†Bý®S«gÆÿÿHÿ&ÿÿúþèþÚþÐþÆþ¶þ§þ«þ°þ þ½þÓþÿ7ÿ}ÿÁÿ\™ÕE—þ|ïr ²^ ¯L Ã| Æ S Ú M à $ ‚ Ý Bœ#¤f²èü3OeŽÌ5 +²h¯é0\y†Œ}[/îˆ#§!ž" ýO‡­È ö  $ ; P u“¼×ÜÛÍ»¦Ÿÿ“þ›ý ü»ûáúúMù•øÝ÷$÷vö¿õ õhôÅó4ó­òBòññ ñoñCñ$ññØð¦ðið&ðäï¡ïUïïàî«îŠîmîOî)îýíÆíící-íýìÐì´ì“ì{ìnìnìpìzìˆì´ìáì*íxíÑí$îŠîùîiïîïnð÷ð‡ñ(òÑò‚óHô õ½õö6÷ã÷ø*ùÁùNúÔúQûÓûTüÓüfýâýZþÐþFÿ¨ÿöÿFz¼ì(k¶ZµLŽÃñ1ATtƒ¡¹ÐáîÿýÿôáÓ¹œ‚[4å±}RÙ—V È{0Ü‚/Ûÿ¦ÿrÿBÿ"ÿ ÿñþàþÙþÓþÊþ¼þ¹þµþÃþÏþåþÿ(ÿbÿ™ÿÔÿL޼ð'wÑ1£,³5Çj¢Kï5 Õ _ ¹ Š ê B à - ‡ ÿ xÝ+t¬æ$^ŠÆ8Ÿ‡c±ôAo—·ÂÄû j&Û{#¹UÛhâNœØþ ' N l † § Ñö!Ot€Ž˜›œ¤ÿ§þ¢ýªüÏûýú7ú{ùÌøø_÷²ö ö`õÃô,ô¢ó'ó½ò]òòÃñ‘ñ\ñ*ñõð¾ðˆðEðð¹ïeï)ïêî±îxîWî/îñíÄí’íkí>ííùìÙìÈì¼ì¤ì•ìì˜ì®ìÎìûì8í~íÏí-î”îùîjïàï\ðÜð[ñßñiòó²ó`ôõÕõŽö=÷î÷ø%ù­ù<ú·ú9ûªû$üüý™ýþ|þðþOÿ™ÿèÿ*bšØ?‹ã?¢úQ›â1a‰§Çñ.0<AD<4+Û¶ƒIØ—[ ÊŠOÇ‚,Ø~$Ïÿxÿ1ÿôþÀþ¡þzþcþRþIþFþ@þ7þþ þôýòýåýñýþ$þUþ’þàþÿKÿÿÊÿ HÒ#‚íQ¸,º>Ôm•¬+œ s Ï 9 ¦  ‹  …  Ÿ r¾è$h¢í: ’ e£âJ®ÅÀ¶–j)Ö<ú-­.©e¦ ß  0 X … ¯Ô[–Ìî&9Lÿ_þqýüÅûû?úùÔø9ø¡÷÷‚öíõlõÝôUôßójóó¤ò]òòàñ›ñhñ*ñçðªðeðð³ïjï'ïßî©îpî4îøíÝí´í{íUí.ííïìèìÆì¸ì«ì¨ì©ì´ìÚìíMí£íîˆîéîVïÀï>ð°ð*ñ£ñò¨ò0óÏódôÿô§õEöèö‡÷ø§ø"ù™ùúyúæúKû¶û*üüý†ýùýhþÐþ,ÿ…ÿÇÿDÍ ]Ã)ƒç8wÂÿFˆ³Èâ÷%$ õÒ£z@ñ¤Oÿ¦Xþ¿u:û³\ýÿ£ÿOÿÿ³þoþ7þþåýÓýÄýÀý²ý ý”ý…ýtýSýOýEý:ý&ý:ýNýbýý±ýÕýþý þTþ™þÉþÿ5ÿ‹ÿ×ÿ6™„öqú‰±<¶D´nÜUÀ9 ¯ H Ò i õ h Ò * ‰ È Bl² èT¶Æ÷'Mb]N<à¤^És¿bóƒñ i ±  ; n ¡ Ô`¨÷KŒÑT{£Êÿéþ þVýŒüÐûûzúãùPùÆøFøº÷A÷¹ö+ö¨õ)õ»ôKôñó£óXó+óåò¤òUòòÃñyñ0ñçð«ð\ððÉï…ï@ïïÅî™îmîIî.îîïíäíÇíºíªí£í©í³íÏíîAî”îîîWï¸ï0ð—ðñ~ñññcò×òLóÃóEôÃôTõÙõmöÿöŽ÷ø¥ø%ù”ùúqúÁú!û}ûåûKüÂü.ý­ýþ•þÿfÿ¾ÿl¿ c¬øM¨üG•ð1x±ðLgpwxmbQJ:#÷Ó²vP»pÈz4æ­_"טEöÿ«ÿfÿÿèþ©þyþOþ(þ þêýÖýÍý¶ý®ý¨ýšý„ýwýdýWýKýKýMýZýZývý†ý¨ýÈýâýýýþGþoþ¡þÝþ"ÿjÿ¾ÿ†ïoõwûƒ zõfÊ&ƒâC·DÝ] Ý Y À ' Ï  d   Ü $ { Ï wÊW›Éï(*( ݼ|*ãT  f ™  – ÷ ^ ¾  gÉ$‘íY´lÄO“ÓÿÿþYþ£ýþüeü×ûPûÌúEúËùRùàøaøñ÷q÷ ÷ö@öæõ•õFõõ·ôpô&ôâóšóSóóÁò~ò7òïñ«ñañ ñÅð{ðAððâï±ï¡ïƒïzïgïdïVïaïoï‹ïïÃïýï4ð}ðÏð)ñƒñôñaòÀò/óŽóðóQôµôõŽõüõcöÝöJ÷É÷7ø´ø,ù“ùöùVú±ú ûhûÉû)üxüßüNý¾ý,þŒþ÷þOÿ°ÿ a¶ `°õ5m°öC|¸ë/]ˆ¬ºÃż¤x]F6  ìÉ”\Ó’IƆIþÆ”Uäÿªÿgÿ.ÿ÷þËþžþtþPþ(þþþ÷ýÚý¾ý»ýœýˆýhýVý?ý)ýýýýôü÷üýSýfýpý—ý´ýÜýþBþsþ¨þäþ(ÿ‚ÿÖÿ&ˆâAŒõfÇ2ŸV¼)§ø_Ûkäbé` § ø I ž æ , m « ã " h ± > v ¢ Í ê  *,! ú Î ¢ p 6 ÿ Ï Ÿ i  ¹ H Ö O É 3 ˜ögÛB­…òZ¸wåN°ÿ%ÿ“þ þ‚ýý¡üü¯û@ûÞúzú%úÌùtùùÊørø'øÎ÷…÷$÷Òö|ö1öàõ›õTõõÍô“ôGôô¿óró+óäò¢òoò;òòîñÕñÂñ¶ñªñ°ñ³ñ½ñÍñåñò#òYò‰òÉòóLó•óçó8ô‡ô×ô0õ~õÒõ)öˆöÜö5÷‹÷í÷=ø–øóø]ù¿ùú‡úâú9û“ûçû=üŠüÚü7ý„ýÐý*þ€þçþAÿ“ÿóÿI¤ïHˆ¿8v Ë*gŽºÝ,>5, üß½™xK$Û¡sL#ë­r6Þ£k*øÿÌÿ¨ÿtÿDÿÿæþ»þ…þQþþàý¶ýšýkýNý2ýý ýþüéüÔü·ü¹ü²ü¦ü”ü•ü¡üªü²üÏüìüîüý&ýRýzý¥ýËýþý"þIþzþÏþÿdÿ±ÿýÿZÁ+“hÉ7—ûS­ hÔ0…åO®ó:‘Þ) \ ¦ Ý " q Ç  Q … ³ ç  K w   ´ È Å Å ¶ œ T 8  ä © W ¼ q È h ónñlíañrñ{õsèlèjçnœÿ7ÿÑþhþþ¡ýPýøü›üJüíû¥ûNûûú²ú^úú¼ùcùùÁønø)øÜ÷‹÷;÷éöŸö]ööÚõ™õMõõÀô‘ô]ô/ôôôüóæóãóãóñóô ôô&ô>ôSôzô‘ô¸ôÙô õ=õhõ™õÌõÿõ4ö€öËö ÷M÷‘÷Ó÷øZøøéø0ùkùºùúKú™úäú0ûˆûÕû!üeüµüýNý«ý þrþÁþ ÿ_ÿ«ÿüÿC˜îGÎ A}¬Ïü-9K[m}ˆ’|g\QJ3*ýѰ tC*öδ¥héÕ²x;øÿ¡ÿRÿ&ÿÿÛþ þbþþêýÅýýcý#ýâüÖüæüòüÀü•üoüFüFüNü@ü'ü(ü)üHü.ü*üCüdüGü9ü?üOüiü§üáü ýCýRýˆýÈýþOþ…þÙþ5ÿŸÿVÚ-‘×(ŒÝ5¥Š÷EŽË ^ÓI¦ò4€Ð W ‡ Á  Z š à ò  ? O b i l \ ^ P 4 ê Á Y 6 û ¯ _ # á†.Ä`ñ—$¿QéGö;æ’.Ës®Róÿÿ-ÿÍþxþ"þÐý~ý/ýÜüŽüGüü¿û€û2ûúú«úwú#úÞù‰ùAùûø»øøYø/øøÝ÷±÷•÷w÷N÷)÷ÿöÑö¹ö¨ö°ö´öºö¹ö®ö£ö³öÃöÃö»öÖöãö÷H÷h÷|÷£÷¿÷ó÷ø)øJøø¯øÙøòø ùVù™ùëùú4ú^úŽúÐúíú/û|ûÃûüGü”üáü(ýuýÂýçý"þfþÐþ1ÿ€ÿÕÿY•Õ:Ik‘¹ï B|¢Á¸°»ÅÝîçãüþàÕ¾“jX>îðáDZ˜d7úѦZ%èÿ€ÿ<ÿ;ÿ)ÿÿåþäþÈþ›þtþeþWþþäý¨ýrý+ýýüïüÂüü_üaülücüLü*ü)ü'ü7üdüŠüükünüŸüâüðüþüõüÛüåüýlýŠý…ý¸ýùýþDþ‘þÇþÿGÿ„ÿÃÿBŠÙxßV¿_Ï%†°÷\²ÿ<†Í%v¦¿Úd™ÏÓà / > B @ I T l s ^ D C - Úf:!úÑ}NÏvÿ¢T µNô¶ˆ1Ü¢cÉ|+ê§h³ÿoÿ+ÿäþ–þaþ'þâý¿ý¶ýƒýAýýâüžüeü/üüÍû–û{ûSûûÌúwúúîùúâù©ùÈùúéùÉùÕùÓùÅù¥ù[ù+ù/ùù„ù—ù¨ùŽù¥ùôù¼ù™ùÁùzùLùçùAúUú<úEúeúBúTúÄúÌú¨úØúÔúüúhû¾ûÏûÕûîûæûüjüôü$ýý–ýîýÌýßýñýþsþ‡þ°þ¿þ:ÿ¾ÿÐÿ<>5ŸéµÁYÌÚÞû\1/Mÿ û¥ú“üìþ@ÿCÿI/£ÂXÓþ=R^»x¸ŒøxÚÿRÿËþýýöýÏþþ%þþÿÖÿ˜ÿåÿãÿ›ÿ¨ÿàÿJÿ\þÐý#þªþIþeþWþEþŸþÔþ/þ‰ýEýýü¬üŸüý}ýÀýnýýÌüýý¸ý+þ¡þ”þQþþêýþ­ýâý.þ=þÑþÝþ"ÿlÿÿ×ÿôÿÝÿpÿYþ©þõ~œÿ»ÿš][vìnX­(½)ã*7ã̬ÖêÜ'=•]ßòéÞîǵ# ‡ à ÷ » ‹ 0 ã¶Uï‚2øæä¥$™'Ú—Réaݼ¦¡f¨x²] ßÿ³ÿÿ{ÿTÿ ÿôþÙþ’þ1þÚý›ýPýýùüÅüÀü¢ürüXü üïûºûuûXûDû[ûsû’û×ûüÒûÄûÐûÄû{û$û ûZûƒûnûÏú"úÛùúðùùMùù/ù†ù¹ù ú…úÓúû^û«ûÚûÆûüWüNüüúû)üOü&üÎû‘û”ûºûÜûüübü¹üýfýªý'þtþPþDþHþ~þ£þ þáþÿîþôþûþ7ÿJÿÿ¡ÿ˜ÿ‘ÿFÿ7ÿ3ÿ<ÿFÿÿ(ÿÿèþ³þÂþñþìþîþÿ%ÿ6ÿÿiÿœÿ;ÿKÿ›ÿ§ÿhÿ©ÿ×ÿ`ÿÝþ³þƒþqþ ÿÿ‰þüý¼ýÍý˜ýfýKýtý±ý¸ýÈýÖý„ý¡ý þôý¬ýMýYýXýzýîýÛýãýÃý¨ýÂý4þãþâþ¤þ¾þ¿ÿóÿqÿsÿªÿÀÿ^&=¾ûí^û‘GhOð¦P_sÔg$ Ü c ¯  •  Ÿ z !¼/©ØT½Iú ­ \ ¸ F ! ” Í  p Þe#üãѰšWÖ€%ÛS¶Q¿ëD“¿ïÿ6ÿ‘þËýý—üûûaûÇúUúÔù_ùùÙøÐøñøù\ùù¡ùßùúRú€ú¾ú÷úûSû†û¨ûÃûàûìû×ûÛûôûçûçûõû:ükütüyü…ü™ü˜üªüßü$ýlýÒýNþÌþBÿ—ÿÜÿj¾0S\BE6Çp*îÿÚÿ¹ÿ–ÿZÿ'ÿ ÿêþ©þhþ3þþôýôýíýÚý¿ý¦ý®ýµýÏý©ý‚ýý¨ü+ü®û/ûÃú|úXúJúYú3úýùºùRùÑøHøÝ÷‚÷'÷úöíöþö2÷m÷n÷V÷>÷A÷A÷;÷]÷’÷ä÷UøÆø+ùfùfùXùNù…ùÙùú^ú˜úØú-ûeûûyû—ûÃûåûüBü€üŒüÑü:ý¨ýþxþ—þ”þÃþÿbÿ¶ÿ7hÝ8j©¬6Ã1dŽÜQƒÂ1‡ºä;ß}! Û ˜ { 9 × U ó ¼·Âm;wˆ†O¯úbÞî±9}Œ–“mYÄ Q´ ¸ ’H[~²¿è&$/Dÿaþ–ýÍüíûîú´ùø&÷tõØóAòÂðlï@îmí£ìñë[ëÈê;ê¼é…ékééðéŠêrë¶ì(î•ïÈðÞñíòÃó•ôtõwöl÷cøXù;ú"ûçû|üàüIý½ý/þ þÿËÿxHäŸ<Îq#Ù„? § O Î ) Z \ " à m  £  …÷W¸Gg¥ì: ´_ÕÿŸÿ^ÿÿþþ„ýêüYüÓû^ûÍú0útù±øÇ÷®ö°õÜôôfóßòkòò§ññsðÐï@ï»îqîQîîïî|ï.ðÛðmñ×ñ*ònò­òìòFó´ó<ôÔôrõÞõ öXödöuöšöÜö<÷—÷'øÛøªùmúûŒûïûZüøüý2þÚþ{ÿ,ÑX‰¯é F~º]¸Ú:‘“3ÜbÇV© Q «  ® o /  ½ wAônùL° uÔ(ü黯 "O#L$˜%µ&B'þ&1&%„#q!üÂù&Äwg±Ï_ Ð ã•zARä’$C¶þý9ûRù…÷ãõ"ôoòÈðïQí\ë\éMç/å9ã|áGà~ßçÞ°ÞÚÞoß9àîàÂáÅâä­åVçéèêËì†î:ðíñSóhôõ³õqö÷à÷›øžùŸú«ûÃüØýýþÛÿ®¨ñnË6¿p  n ¤¨t}Ä (ë RfP ü Ú ò , zÖCÇO³fÆGÃ/zÞ#WÿZþ?ýõû†úÞøY÷âõzô*óòæð²ïdîí’ë0êÞèÐççãæýæIçÉçfè÷èoéÆéäéùé/êŒê$ëÝëÇì±íyîïjïˆï…ïdï–ïðÌð¼ñÏòñóõ9öN÷8ø#ù.úTû§ü"þ½ÿA¡¸›Iºþ.TŒÝ/o}m]H(  V§>ìª * Ñ # 7 H l Š º > F G [ k z Š ° Ô $ œ 'Ë…HòÿöÄ•ªö%+ à'T< ?!³"æ#%ø%v&Y&%%#¸ 3®T¾$ûø ý è 9 Þ‰"ý Öõ]!þ„ûÇø›õŽòÔïžíÂë8ê‚è¨æÁäÔâþàOß÷Ý,Ý,ÝMÞâßÇá¶ã^徿ŒçRèÑèHéÇébêë í±îðãð†ñæñ,òaò²òXóOô~õÿö°øÄúüíý&ÿréW¼‹‰ª ” *g=¡‹Ñ†TðÉ‚S } ‘ ~ H A“TzàZÂ' I ÿ\i6å›R©Ÿþ~üWú øÜõeóóðÙî3íØëÐê%ê¢éHééÍè›èœèéèPé£é0êòê¤ëìTìì°ë6ëªê êžéBéé6é‘éþévêëÔë×ìøíHïð"òêó±õ[÷üø‰úüvýÌþÖÿ«^´QÑ3-3[°xü˜=òËÅ ¯ Ž % ï @ ‚ ° Þ   u " Á Q î ® ] P j « ü q è k á CºE¿uŒƒ¼'¹Ví_’ë:À{™Ý ô Ó NáÅö»  ‡*pþ¸ÁŠz÷<¾b–Ò”Yú¶ÿçüòù3÷gôKñùíõê~è¦æVåÝä&åÍåžæ„çŽèôéiëûìvîðáñšó&õRöööãö/öùôó3ò3ñÄð½ðèð-ñ“ñòˆòæò:óûóZõ÷MùÂû€þxkÜö$À~Ên¤—.©d‚ ‡)Ñ[¨á%5;0"ð€ÜÿûÙÿ|þýŒûDúùå÷½ö©õÇô-ôÃóróLóLójó~óoóQó*ó#ó7óYóyó óÁó°ópó!óÝòòIòò.òLòGò6ò1òZò•òÄòó®ó`ôõ½õƒöZ÷8ø!ùïù¤úLûäûrüýÜýÀþ}ÿ9¤ÜûB™ï [y„›Y­\ÀCìXÐŽ§lªZ êÔÂL¿? t œtÈ?†Ð› v  Тz«d F " ù k Ö ¬ þ Ñ v 3 µ ì à Û è 1 b M Q | ³ ª d  € Ì    ¥ } V ü ‘ þ  Ê ‡Ïzd Ó Â ” q í èÖŸLMàÁ5œlÍÇ® –ö1 Œ³ïj½¨ÿmþJý?ü&ûOúáùÊùëùúYú¡ú³úÊúÂú¸ú úÅúiûBüëü(ýüü©üAüåû`ûåú¿ú·úÇú©ú]úú¸ùaùÿø³ø‹ø‡øÕø{ùVúCûæû:üü¿ûeûû*ûŠû3üÏü!ýüüü)üœû)ûüúû5û%ûTû¹ûüSüŒüåü"ýøünüÙûŸûÏûüCü:üXüQü¢û£úúvú?ûµû°ûSûûTû5ü9ý·ýšýýWüUûeúøùú¼úÁû'ý þêý°üßúÜø„÷Ä÷žùáûŽý=þûýTý/ü'û™úbúfúˆû¥ýuÿbÿcý«û)ûûLûLü×ýíþ-þöûøúqüÛþáÿ»þòý©þÿ“þ>ýÖü¦þºãâ Ôÿ=ü¡üÿ=ºÈ'Œ1Îþ<þGþDþR³øŠóþàûCþ–mw±é¬’ùqZ8R0Ce60M@  pùœþoýwr Ï q @ö‡ÄèŸ ¹ IoÉþÄÔ¯§Gf°îŸr…¦/ªÿÿ¼¤í|xtc/˜d`[ kL[Œ©-R«>ëmÿ‡ÿìçÊ _pzÿ$ÿ‰6 t@8ÿ3ÿ½þ3)Ì çU¼“Õ¦R¹ ÿßþaÿÇ¡´<ÿÌüüþ²ÿ5>ÿéþÆýMü¡úžúCü»ýwþ6þ„ý©üûû´úûþü^ýîüüDûŒúëùŸúCüÇý&þLý½ûªùWøóø—ûÈýãýüÉûŒûû¸ú^ùÜøú€üßýöü‹û>ûÛû¹üÌü ü÷úÁúŽü‰þâþ¸ý¹üoýþ|þãü…û.üìýÿ#ÿAý°úSù[û”X™ ýòøeøNû‘ÿ?°þ þ‹þ>þ±üÝûÞü:ý*þ³ñ÷]þõû€úûÆý5òï±Aú‡øTûZÿ7l³­ þ0øƒø¯þ$ïbÑþ?ýÍüQþóÿV¨q±yüØùÉüpDÜOÌ9ÿXü0üÿvLgþ(üëþ‹'u¬þˆÿ_Üþ·ÿŽpÿ´ÿW4½Oý1ûOþZ¼üoø\ú­ÿžvØùêüEùúüÄ_+wûCýÑFs<ôü6úü -¶9¸ûùjúÕþþáshûæ÷.÷$û!f ÄÎÅûÆôÖô÷ú]õ › =Tú ô÷ŒRi pRþZü4üäýм Á ÊTøöõ§û3É « ¥Šüˆó óüE Œïeçö-óZø£} –  Áúð÷…þ‘s Gþûký˜ÿ.•wJJ‘ÿRûšùHü2<[²þžú¸ü(Ø—Uÿ3ÿÎÅbý´÷wùç± ðÖöÓóxø8 õ 7ý7ü^ü ýÆþâŸsÿQüNúüÈêGüüµúþtá›sûÓùøûïÿÓ’×Yý·þ\'‘û×ùÔþ€ÓþeþÝýÇûºú#þF×«Ñøõ û£Ãçþ:þ9ŸýËü_ÿ™Èþ¡ú£ùŠü¡aÉ>ýIú&ý„¾üŸüÕÿÿ²û¥ûò´…$üúø.ûnr·ÿúþãýöü*ÿ-!þÿˆ¸ÿ–üáü«ÿÕ •vpÔúpùóüše}k±ÿÒüÀûýh²þvÿXý)ý&ÿ9íÿõùèù|! ´'üôH÷ÚÜnÊýþ¼$lúXõù†L vxý=øíùPþeõý³üFKðBýßú-ûªûÿÏ ‘œùó õeþ0 }å÷Ëñ ø™ð ]„úØöùàþ, ­eý´÷Ûùè77¤ûšý¼Ð…)ùyøìüú¼t<ü-óÝñ‡ûw €c ü‡õ³øœý÷þ¤ý ÿüü•ÿËögòoöôž > Bâõ´ôdþôLü»ù$þÊèlÿý þ»ÿ¢ýÊûØûÁýuˆê †Ðøuõ=üszXJ–üÆöuöÞúÚ° áù@öøeý=@' Y þ ù7ùxþ×-Ò>þìùUù«ü“÷Hû›ùßþi)aÿêú2û¬ÿžBºùËößüŸ¥Ûû|þNŠþwû¨ýíéýÅú9ÿ­Ù©ÿUøw÷ïûÖ 6mwýÐ÷²öhüZu¥nüVýUþLüEúü65ê»þuúXúîýdÿåý.ÿ‰MíýÃùû£þ(ÿ·þFiwÉþö—ô;þï÷ Ñÿîô ÷ôœM…÷÷ÿ~û”ü£í=þñeòÙè¬ JüWð¼ñêû±÷ ¼­úòbõ;Ï¢ýDúºýu£VÿõüøüÞü"þÿÎ|7£¡ý˜ûÒûÿÕÛ1þåû£ý6¸Ký6úÄýÿ¨û;üæÿaÿ¦ÿ±ÿ˜ÿLþû`ù‡ý«tÇeûüe»þ£ùéù¨þ ¢ˆÿøÌù÷úÝmønö“üÖèÊÊù×÷/úJÿT>g1-ýù½ùMëü ûÌþI¬ÅüÒú þÖÜ3ùôóå÷•c ô÷ón÷l  Sþº÷æûô©Ôüëöúî„è]ý>ý+þèþ’ÿxÿþHÿhÆ\ö€ò<ü⨠Œ ýÖùlùÅùúhþîZéé{.þõø¹ô“øïP ¼"ý@÷YúÿŽU$«Êû“ùâú”û›ýÍü *“øBí“îíøäK&^Qú†õ÷´ü8JvÿˆAÿ®û/übþqýcûÛúFþ—çC%ýOù³ûGh °é÷¢óQø!“ &dÿ³öVôaúÓÉãü’ø‰üF'Õ˜øøOþÀ)hþ ü´þ‚ÂýkügéÇÿ>÷Sôeú†_ <výøøXú4þÃ'_ÿõÿ«yp¡úS÷8øÆþ¤- Óö`ï÷òP ØNøMóù÷Íîô0þü(ÿÐ]PüŸ÷Íù§ ì·üG÷û\ ÎûÎúÿ7Õÿ!üÎü èW­û©úOþŸ­tþ\ý½þ ©PËù¥ôiø„Z J€øœõÆøýp áÑûöEù. beý5ùMü$,î¹üè÷úÿžúœôõ÷¶YpŒÍü"õ»ðx÷vßþCï'îÎûé á æþâöìù™žÿÓø ùó  ±û6ñ%ôP Úñû0û•GôªíP÷ G¿úõKù¤þÂÿzÿ=ßä^ý¨ñxðñýB òc ÷§ôüopýªùñü™© ÿ õ»÷©Iàÿø ùØ7^ûXúëÿXB(þ^ú<üÿÿÐüQûµÿàk êžöRò”ö*ÿí3 žþˆþñcÿŽùröÑûÄÇ xªý@ù€ù%üdž²czù ö‡øyÿ(g<íûø÷šø§þ³°Êÿšû€ú6ý -Cý­ûUüAþÍ®¿þìüüJüþ¬ÿ ÿŽþéýíÿs|©úSôô©ú{f ñ û ÷Pùÿž»þú,ùëÿüL¡þù«ûQ”+ûÛúý¯ýþ-5M9þVøô÷Ÿü±QýZûKþ—“\ üQô¯óÍûÈl ÒÐÿuü³úZùÜúkº¦üœõú[! ~$úúYìiý½ùý‰¶40÷Yò­úp Ëõ÷ó‡ý¡þ³ýÜü…ýoüßû©þ‘ÓÈ«ÿjý…ý„ÛîýZúÖüº&õþ7üÜýAÿeÿ·ûöù7þ; ­þSùåú¦ÿÀÞþü$ý«q1þªùžúMsæ³ÿ û]÷¢ùÈÚÑW'ù÷÷ÿüy>CÿŽþkÿ䔄ü¢únýuwŸü÷ù¶ýÌ`zþŽö¸÷„ÕÐÞøôpü’Y  Âô÷ï…ú&< ¸ÿŽò®òX  õüßò0ôÿ - MMõó°û²¹ufÿÝûCúöûÿÅ@€ýIý9ÀÌüÒùÌû ÿj«Süÿœúôù}ÿŸ×–þŸýJÿ& JÿÂýŽþ ‚yHþ™ülûUûºþV+Ÿný¾øTöAøþõ Œ"ÿh÷Hô1ø¦ÿ( AÂûzø!û{±øŸýžýº°þüEýa(ÆCýsû‰þÕþýÓý+ÐØÜûëön÷Xÿ' ® \€õoòÃû ï ßúõÍó®ûµüýà÷üùZ<'Kö‡òÊú»ù í’øvøX§Ácùô™øÅp ò…¬ø¢÷ôüå˜àþÃþ¡*ýû{þÛf8ÿøÿ‰®þÙüÊþ¤$€bþù•ù5îzMûwùRüqÿ#=ÿXþ’ÿ˜·Àü,ùÖùÏýÞVÄ¿»Õþ”ýYü€û!þ—»5'ü¢û»ÿuWJüÑùcüŸ+ÝûžúÏþbç5øúDù%ýLË$ ÿ®ûåúüÇÿcÿ¿7ýpøä÷8ýEÍûxùÀýýïÿý ý!ÿü«úý5JYÿýýÈþæþý…ûþˆgýbøšúSå…i^û-ù¯û›þ‘ÿðþ|ÿðžÍÿ üºù¥úÕýCvŽÌgþ6ùLøÞüS¤Ïvÿüý¨þäý8ûqùû:“gý‰úüBhjûßúzÿZ±«`ýüsýFþ ý7ü'þ,ðÛÇþzüÛüÿýýÿ•X–núQ÷ÐúÊÂÒYÿvûÉúïüTÿ``²¼þÑü¹ûnü¹ÿHÀØþüÞýëæþ'þ%*Óÿ”ûù½ü^«Xõ¥ðú]³]ÞúlôÛö®þÁscÿ1gö„ýú¾ùôülUÿ üŠùPû*þ™k1ÿ+üü}ýžýÜÿy§™ý´÷œ÷ýnᙵûqúÿ´ø^ÿcûòüO_¼·þ%ýWÿ7’Nûêøüé({)ýžÿŽ„þyøÂ÷þ9Zøû›üø*ʆÿšýùünýÍý#ýÑýÕ0 CÿùÅózõ–ü‰7-âÿ‘Ô|ýý?úú"üPÆ‚š¼þlûìú{ýîÿ!4çFýÝøØú :oÏçý°û-ý˜ÿEÿ3ÿë?=l®ÏýûHûëþAk ÿ‘û|ú„ý0ÜBtö(ÿKýaý˜þÉÿtÿcþþš\Û†üdø…ùþ±4ä¤ü•üÏçþ­øñøÕþ ñŒZý®ûþÈž‰¥ûÄøÔüv¬ÿ–þòþt_Ôðþûû¹deôüÿû¬ý ÿT»þ®þ¶Õ}CFýgû;üÿx øžvü[ù˜ú&ÿ…ó•þpû/üfýrþ1½6Šýÿšûfú“ýßõõþý{ù3øü šTNmýÿ@âÿ2ýWû%üÿAñnb®XxúÈø¤üX F¦ÿxüý›Y|Tþõúeü¤ˆýgüþ¯@þþûûÍúfýÍåF;þÒú=ûaÿŒGZMÿre>ÿ¬ü“üòýÿ ‚f™þ‘þ½J¤'û²öù5ÍùyÖø8ö†ûîB RýPøú@9©­jüQú_ú1ý»·Çÿsÿaõ8>þPù8øý_? ÐlMüaù û%þ|!»†þ;üÊüªþ'j¾ÚÿBÿÑýaüÅûóû÷ÿu ©ùÊõOùÎÿbŠþÞþ¡wýÙüQÿ… ÂàÿÎù)ø-ûôšÖ ïü õØôûS„¯ñþ`û¥úÔû3þë§<þçùiù‚ûË.L¤yÿ¹ú6ú¡ü±þ~ÿ™Úz7‰ý÷ðöøþMc Sü÷—÷€þñëgKîÿ²ÿîþüXùû 1ôŽþëÿ£ȉýÿúÃúxÿ7È ¬§þ ù;ùÿ\Ñbüsú!üàÿf*}Šÿ ýçý«ÿ†k ÿ£`'ÂzþŽûnüØþ#N«ûÒùýªU¹ˆÿ¨úÅùÃýׄ(×þ¤³Y£ýy÷÷†ý ”Âýùªø ý÷âþ^vƒþ÷ýÿQüÿöüûóýôêVmþ±úžû®ÿ•qûŒu¢aòþÔú+ûÿÎ$«/!xÿýûVütgU\ÿàú@úôý2 ÌOù‡÷ü ¸²Ž)ˆþýü›üžü¬ýŠn™ºþý>ý€ôì$OývþžÿyVU©}Ö_mýsû†ûþ“lX¬Š"üˆû‡ÿŒicuÿ7ý£þ(JEþ®üÖüÄþËJÎBýõýÁÀ0‡`û÷®ùŠÿn¥{+{ý!ükþ«K'üòû’ÿC†üµþsûýŸŽ+‚ÿÆýÚý†ÿÃÓ?É ÌýŠþ{dPõ-ýJüuÿ¾uTþ9ÿ¾ÿÄþTý.þíÌ$%–ýû–ü=mNþý/ý^þ8W3éÿ]ú•ùáüíÿ×fw£ø¾œü%ûÞýú¬#* ýÒüªýÅ*SÛýâú‡üV‰8ÿ`ðþ|û[üãÈ'Ø¢¬65þ[úÓú+þ¼–&qýðýÛë™gÿPü üÿ&”sÿ·þĪê¸þàüÙÿyœž“ýäûºûŸýymŠvgÿ0nöåþ¬ü'ý“8×þfúàýÐŽHüXüxÿYI÷ÀÿJüÂùÚûaóþ¶üþZ/òaPöI!û9ú4ÿizjãü£÷Ú÷•þ;ÒÉ–þœüYÿÖîs÷ýúù»ú¢þe˜Äþ«ûÇúÊúuü7jñұþ­ÿšß2"~ÿìýþæÿùvÈØÿ¬þdýBûúZû¾þÑØ ÖsþEþòþ—+#/•måÿñ{âÎÿÕú ø©ùÚyK Û±þ¬ú§úEý¿•üðsšÿ!ý*ý7ñ€§üèõ•õ•û‚X | ±ÚûMúçükÿPþ üü| —ç€üóÆðøTÖ - Ƴùwø®ý^™Ë"þìüþ¿{E ð½ºü/@þËûŽú­ýOðxnúAø%û¦×õpÍÿXÿËW%­‰Tì ÅûúÿkB&iüñøëûáÑðZþ™ù‡û,d“b7YÙwŸöýSûLû¬þ²Ï9ûDùüሌLÿ&ÿ46,Ÿþ‘ÿøŽzþ‰ùäø¤ë @ ~þdù¿úþ¦ÄÕ)òÇE'²úù¬þ¨h ,yþÉøhùÖ ‚dúbøôý´¾Ìvÿ3ýBþ‰¾þ…ü…ÿ?TYsÿ–üXþ•!Iz{D5õ²˜WÿÐý²þ;®Ü…ÿvýqýHÀ¿ÂÛÿCÿ;þþ‡þaÿžS"‹ýû$üÊV¦‰òüýDäGƒŽêþ¾üAýºþs¡˜Îÿ×ýŸûùûŒÿr !ÊýKüyþjãeþÿÐ^ üÿýÀýdœ´ý¸ý‚ôÕgý&üšý¹þDþGþöa ¯MôöyóvúR± 1…iúBú½ÿD0Ë5ü–ùAú´þ<v“§rÿ¥ýÁü6ýÀþ«ÿ.tIO¯*¸þ“ûËú¤þä— ð¢þûù”ü¡ WþÉø‚úÅlèÇýŸúzüX.¡ÿ1ÿËþQ5þ%üRýä±£•ÿ\ûûúãýšvÿXûŸú8þµ‹cŠÊú_ôaõGýq JÜþÍü¹þ\”,¡°ýò&ýùú«þ˜7ýéý’˜­€ïýúûþ%¬Ö«ïóíÿþ’ûSùøyüì¶ ï{ÿ»öáõpý5¸€þ ûüãÿH*oÇFþRüÉûüvý‚i}º“ý„ø³ö$úÃÖm04ˆýmû@ü]ÿ=~©ÿjýáþ£]ƒcþ2ýÌþ0 D;Sl­þñýgÿ†'ám²: ÎÂ~éþ”ÿõ™v¯ý ýýÿ$»þgûûáþIûmy, ÿüþü45i»6ÓÛþüÈú}ûaýæÿd~ }5»ûBù/ü@ ‡ 1—þgùøý5O~þwûKü[ó¬ÿü7û­ý½–@C)þÙþ.ÒÿŸþPÿÖ)Imýýܘwæý~÷yøèô —­ÿï÷ õûð^ î^¤û“ý,lâÁü¿õ4õ†ûaÆÊÂú™óIóæ÷þËê윿ŸÃü?ú¯ùÔûSmj Ý Jû÷¸ù£þøaA+ÿuûoûý%A›z–úm÷´úþ¢ © 0@ý[öhöÍüŠf"xœý“üVþ"IiëþÌûmüìËvþ/þ%ùïø9ý‡9™þ±ýñüþGËÐÿEÿsýþ -À4Žúñöû@A Á#HøàõCùN{í®þPüjþ;5lý£üÈý\2Jm­þþ qý«vû øxû×[þœù+ûbÿ'b|þnþdžøÿ1ýÿm/¬ï¨þþwþÀ¼ Ùügø€ùîÿ_dMý@üÂÿuAÕLÿ1ýþÉØmwÿšþ\ 72ýçüòþ“«jþUü:ýHÍ|`ËüÇøúŠÿ…{·ÎDåÿ…ýý’ýÒý<þÿ1DûþÀþ^ÙB2€ÿžûÁú#ýÅàÀÎê´ÿ û±÷Oø½ûýÿdÒcbþ‹þ¶ýÇûoû‚þûù ÞKþúûn 1̶ø¨öáûqìƒvþFü®úƒúÇþ±ÖÚc£ñâCvüú8ûõþ_¦0¸þzø1ö/ù±ÿ\OKžÿ_}‡kêýÉûüsýÍìKêòþóûüù8ú‰üÐÿÉ(dÿÂø1öûˆ SeûPùÍûWE±a)ühóXò¸ùáÐ  ƒjþ?ûEúÆú–ü/ñ‹¾ý‹÷Lùî» 1 /@þÏ÷lõ÷äýN ü æjÎõ¹òßøÈì ô°øpøþøsZ™þÓù¸úÿÁ!°÷þ_þ%±÷þ¯ÿ[™ÿÔüßù.ûxþ´ŠÝ'tÿÿËþÓý¦ýÿ±°{ïü$üÀc<øû‘ùqü†kéøþÊú9øwø\ý¥W ß ­Ðýûõ÷ô×ùK û¸Û hþb÷Ûõoû"à  Ñÿcù™øÜü®ðÁjAý°úµüVá”üƒû¹ÿîTÆŽÿÞþO¹rÏþSùùEÿ“ö ã~YùQ÷ÏúU~ YßþÌþˆßþtýaý±þpÙcý/ú—úVÿŸV`ønöïúc<Å Ýÿ>ýGûºý©ãË{ù øÂúïÿ[ ë0ü‹ø ú™þY¨^ÿÃXXô›¤ÿrüóûoüþÿÕ/Cþ;ùa÷Wüi P¾þmø\ö7ø¬ü¹é 4 ) Œùô”ô,û1 ? 0 ±¶ü"ú+ú2ú0ûáþ‘½ †FüˆúþxŽþeý<<_ÿ”ýq< úû û€ýO¤dÈÿŒ#þý#÷ÌôþüJ :ÄRüÎôSö þ]þsþ*ûûþZ ¤ÿú¶úAq¦±Úúåø…þ}, j¶ù‡õû· ¿ûGûhüÚý|Q‚–xýßûäû6ÿªä26*»þ”ýiû>úþ)T4†ÿfýÔÿWˆýwøŽø¾ý†õ¾²ýký±ÿ-Ùý=üŸý;$J‹ÿëJh>ýÉöeøÿëÊyü9úÐý™Ãgý}üêÿYH×ú¹ùÝŠ á1û^ö˜øýo1y¢€_4—÷Çò@ôûàq ÙûxûÒá ¡†üùòõåë , ÝAÿUý.ýÂû5ú´û%P‹aÿúúöý2Ѧ~–úÿôUõçý– 6¸÷¤ï+ôÀÿ”}1Êú û²B×Äú™÷úÐ\!M‹û‘ýŸsëý)÷#÷®þмòûuúóýº¾ã›ùå÷çÿµ ‡ûóÿ÷ëŸ 7 Ðÿhø›ö;úÄþc»¡%ýtûÏüàþÿýJýØ Y³÷ñí)ò>sQ qþ¥óŸð¥öjÞQÕñýrûØúüÿ>øÍ–\IþAýÈþö+!îþÌüdþcHK’þ›ü7û0ûªûþ[àç¦ülôôUýÞ· Ìû6ú•ÿfyªŽØþù÷kö§üŸv PÄý û§ý4…èÿÛÿ>ÇÿôüDú ýì5 ´üÀ÷]û¤î§ü¿úF¯"Õýö®ù€˜ _úóñóçüÈëü Ѳ÷ûòmöÜÿ±º s‡ûQ÷úÏA4„ÿhû,õGô,ü8× šÌú ÷ ø5û´ýWÿ™>‡ª=nýÙö‰öû¤þäþÕþì· ÿ¡ý‰õ˜óÉùÙ1 I Ù3ü¼ö@÷5ûÍýý¸ÿUåHù¦õöúÅ) î*þüNIÀ¡ù*÷ÅüÒ` 6 æ÷Bñ9ôXý÷’ ¯¨‰þ!ûüfý·üü€þ6ñ4þâþåþûØõ²÷¾Ç ” !þeþd¦þéùÎ÷ûÿˆ ´ 7Fý\øHù×þÖP‰$Ëÿsýœü6ÿ…Rnœ úþò¦ôÿ£ ‚ 7Iûxø´û.ÿ ÿ/þMÿRiÖÿîú‹ûâíÜý øÌö¾úþ‘ Þ ¯øIõIú‚oBEþ½ûRÿg~`ý^ùRú’ÿ¥¡ô{ëàøÞöœú†þ¿•by Ã~þi÷¯ó7ö6üÃfä £ßüøZø’ý¦b ÝŽúöŽú•¯ºwÐÜÔÿjù!õmõû!z ø —ü¸ö~ö ü'C D’ùGò÷¼8ê|ùKñ¿òðùòhÙ² ®ú7ö÷úÖþQJ½ÕüúƒûrÿÅàÿŠûâúïþƬÐþÊøèõ*ùèûˆˆàüìý®Dcý_óýð‘ù–`{ $-ü øOøåû°þùÿÝ׎E´þ•û7ûkþ@Ãaüü–rvýûzùtûÕþ±7ñàÿg :Ïý,ú3ù"ü×ûˆ_¥þ·üïüAþqþ þWÿ›z ‚Xü5úãü0DÉú;÷÷ûÞ65 ×´þwù ø£úÖýþÿ¡n°X –üYø=ú/æ]8ýÿíUÁ ý`÷Mø[þX¶â($Æcÿ<þ þÞþxÿr¡6†@þûàúYüäüˆüÔþžž 4êþÁõgôRúu¨GˆÍýÄý0B¦þüûwûýÿ-] (ãý’úšú©ý½5¿¬üȵÅü³ú0ýœ’tþ2ü0ý–ÿçsùVþYü7ü.þ>?e÷s¯ÿ»þ*þ·ÿ„šÌýÝü:ÿ×ѨíýIû÷úhý\ª„œÿfþzþxˆXýüæþ`´õXÿÀþöÿïKVk£þ5ý&ýþ“­ÿLýý;þãÿô¶˜;­ÿŽüýû€þw,ô*ÿ%ýÖû÷üÐÏ52ÿÝü‘üˆý4ÿf¬WEw 8ÿ=þ„ý¸ýTþ×þxÿH­Þ¼Óкÿý—û5ýu‰wýg˜ýãûYûüÑýú ÒpCÿ$ýLüƒý&Ìø[òþåþ þ ýþ¬À3†ÿýXþ¨=ŽÑþ=þGÿñ^Fÿ~þIþ‹þ*ÿŒ ÚÿÿÿBÿ=ÿÎþPþNþÿ qDä«eSÿ?üTú¦û{ÿ#­„mýû.ûìü`ÿux½%·òþ–ýoý?þ…ÿt—^h èæwÿŽþGþCþþWÿO7]¨·ÿRÿ¼ÿ$åÿ^ÿÿ¿ÿöêÿßþ$þÐý þÂþ·ÿ›. )ãþþþ}þ ÿƒÿ´ÿ©ÿ3ÿyþ!þ£þÛÿ‘Cÿ·þˆþdþhþ¤þÿ­þüýmý‰ýþ›þ™þþËý?þÿ„ÿ^ÿÿñþ~ÿvLq›qÿ¹þŽþÇþüþõþÿ5ÿOÿÿ2þLýýþ½ÿ¾¯B3Ÿÿhȉ|y\ÿšþKþþIÿd^ˆù-kév®ˆ9賄{¡“}úþºŽ­^½ÿâÿÄý>4ßLRéðÊ@–ƒèš-> Øð€¸÷œÛ©Æø³Ë)•ÄÉ÷~IûŒÚùÆn ¨¢êWÃá«…X3ïIP}°,Œ¶9²>Ðû3¦ùÿþýý}ü]ü^ü ü[ûTúAùsøÝ÷b÷ÙöûõÛôô®óŒó:óŸòöñlñ ñÅð‘ð[ð?ð?ðUðzðtðbðeðœð§ðyððÉïÍï@ð¸ð8ñÑñ(ò$ò ò*òŸò5óÊówôgõ4ö…ö{örößöÅ÷´øBùrù–ù¯ùèù[úÖú+ûdû±ûüû#ü8üEü}üâü[ýÊý-þtþjþ4þ5þŽþÿnÿ¥ÿ~ÿ>ÿÿÜþçþ9ÿ°ÿäÿÙÿÿ"ÿôþåþöþ;ÿ“ÿûÿMl”Ãl¡–V?Ž,Å&Rog:=›;×C­Z*àní…  Ù • e G ù ÚÛ¾^ÙqÅWöö¢Pî&:fÆt#½b“h )!ÿ Ñéž¶°ô-/Ö è ÆÌ'ÿþzý¸üÑüAý`ýÍü¾ûHú>øôõ óâñ¡ð¥ïáîî9íìêÊçPåóâßàß&߃ßmà—áŸâ6ãIã%ãNãYäAæé`ì˜ïTò?ô1õ!õÚô ôáôØõ‚÷|ùXûüü/þîþ©ÿX#‚U½' N õ ·Z ¬U â‘YŽ^@ ‡ o â – P Ö÷ÖºÀ»gÏë÷ÿÊþ]ýŠû¯ùá÷/öµôGó¿ñðßíFëxèwå­â à’ßzßàáüáã äÍäkåÁå2æêæèIé*ê{ê6ê§ééÊè¿èÑèéòé ëtìËí3ï¨ðòbó ôÝõV÷#ù]û¨ý°ÿWª°BoNôïøÿÝ€ö€uÆŒ—cîa—¥‰4ׇ=Ômøjä`Ú\æh$⬺¯Pät)ЇA÷ :À3 ¥ " ~  à — ´ %íë_ÐþÕ‡º ´!•"–#Š$a%>&'²'ƒ'º&²%}$L#›!ÿ%rŠÕ` W ÛXì&b²ÿÿHþýÙúøõ:òÑïƒí–ëÉéÕçƒåúâxà…ÝŽÚà×ÖUÕ…ÕqÖ–×ÏØ¯Ù2ÚZÚ¸Ú‚ÛñÜìÞžá åÏè+ìñîñ‚òeóôÅôáõ‘÷Ùù.ühþ[-ÑLý L Ì œ®t©ôŒ÷$ öþÏS…?^=õ  U Ør,Þ e+ÿõýùüÁûSúÌø0÷^õjó}ñ¨ïÚí1ìµêiéSè€çÜæ{æEæ>æLæræ±æç¶ç‡è{éqêhë\ìjí|î„ï‰ð“ñrò?óôáôÆõÄöÓ÷íøú'ûDüIýVþ\ÿM¶[Ø÷·LéÄÔMí½}5øo¸ÅÞøFÿ‚þ›ýüûgúaùrø}÷œöçõwõJõõ«ôòó&óJòxñÇðpð„ðàðKñºñòeò˜ò”ò…ò¤òÞò<óÎó‹ômõSö+÷#øAùiú¢ûïü\þêÿhÒP}ªïe  ¨ nÁ0ƒêCz·å4no Á!6#”$&º'e)l+ñ,C.?/:0Þ0¨0L0ƒ/h.…,:*¹'d%K#ÿ ˆE{âíØÀ ·þúÆõ)òÅïwî‹íeì!ëqé•çßäçá<ß™ÝCÜÛßÙãØ©×ËÕEÓÐUΚÌüËŸÌèÎÒ`ÕåØÝÛ}Þ,àQá2â”ãÄå„èHìïðVöHû}ÿÅqŸ¾2 = ®@¥²Uu¬¡ÍÆæ!Ï#.%¸%/%Ú#Ø!cÌZoï¤Jí_f³ « yG*[ý ûùR÷nõ€óñÐï)î™ìbëmê¢éÆèæçèæÎå¨äxãgâ~áãàªàùàÍáã‰ä9æèééÈë…í ï„ðîñcóúô­ödøAú!üþþÿÉZÊ9˜ù- N ? Ê eê%=Rož¿ëûÖvÅË ‡ Ø ¼f »„ÿzýû¸ùí÷öƒôó¥ñð–ïÑîGîÈíüììóêôéáèëç&ç‘æ(æÖåˆå6åååQå™å æùæèréüêÆì†î(ðÑñZóàôLöÊ÷ùmúáûýøý³þjÿ ×­Æ2ÃRáq Û  äÓáÓ¤yaU1BT•Á^†¦ˆŒ›¡»ý¤n>´SÿŽ? ú,!%"Þ"Þ""ëÅ3 (ÔeÃãû7  Ó Ñ4ÿûôöió"ð»íPìëdê¼ééKé4é¡èè¾ççDæÈäsãÐá;àÞÝ)ÜðÛcÜ•Ýªß âµäçéê¬ë8ì¡ì|íÙî ñôç÷ü!Ÿ™Ún j â [ Þ ¡ ¦¤p€ø”bù»fÅ“¾/ÚöŸ9%¿ ¢ ¶ Ö È Ybh¦þçûYù'÷jõ ôñòòpñöðƒðð¢ï[ï/ïéîœî.îíÄìÏëäê5ê¸ééÝéºêì¹í¨ïñ•ócõßö-øJù^ú^û}üËý>ÿÅIÏV®ÛÄu ö H ‡ ‘ – { t y ˆ — ± Ø ù ÿ Þ ] — c › ^Õþ&ýŠûú©ø3÷¼õ2ôÌòsñAð8ïLî•íÜìFìÐësëëØêÌêðêëëëþêâê»êˆênêsêÂêMë)ì2íqîÊï"ñ—òÚó õö ÷ò÷·øaùúˆúûuûüŽüý’ýþ¬þ;ÿËÿVávÌ´Ò\Ä8 ® x ý #­ [ Ï ³ î ` þ *HS?.õúß§]ŸÌ q7náðU!]#1$1$@#"< SÊÒ•”œVö˜Å•9÷#«Ñ - O¡üçõŠï°êQçæ“æuèIëÄí]ï-ï;îìšé׿yäãõágáŠàGßRÝÞÚnØlÖÂÕ‡ÖòØ•Üúàhåùè*ëìì»ëÐë)íAðÔôlúZº ú `"!æ  À ) m HK%ÁO|ö@ n"¤#æ#ç"‹ öíô¯)v Ž Û ? ' & Žÿõû´øöïóˆòŸñ#ñÝð—ð3ð‰ïºîÀíÔì ìTëlêJéèæ'åÊãââ{âîâ%ä:æÑèÎëâîÀñEôTöøQùSúiûˆüåý^ÿøª;° o ¸ à ®^Ö&Eq’©Æèé‹çæ– " Ð@˜L4þŠüFû\ú¹ùùsøo÷âõ¼ó4ñ‘îôë é›çæ©äzãCâá$à~ß2ßZßàaáãŽäÚåÜæxç²ç£ççáç¬èìé\ëîì‰îðCñLòóêóÄô½õýöø,úÑûRýÏþ>–Éí“Y _ªðr ? H k ª Úìµ2P7ó¡a8úÞÖ;¼—Äb>‡ògåµ-;ÐüFý‘ÛW²ÀGÏü' ëicâ·òËÑbvÝúØ;ôìHõù®ó ï ìõê¤ë›íìïÞñ!ó0óòðŒíëé=çzåóãOâhàÔÝøÚØÒÕ|ÔSÔ™ÕpØÜàãgæVèé7éMé<ênìáïƒôú–ÿNy J Ò È îC~ o à ª™Hz•Ö*Z![#ð$&Y&m%Š#Þ ³úU3É û  H P à ¬ðþãû%ù÷ö^õ#ôóòKñ[ð%ïÀí'ìjê¨èËæøä>ã¤áYàxßßbßFà­á©ãùå§è[ëîð´ò˜ô ö%÷ øÞøÂùÈúüjýÿôT¯ ! ©ÿ÷ºSß,Ø{{bPá)/ê H ^‹ÿÈÿÌý)ýÆühüÞûû¿ùÊ÷JõMòïñëØèÉåÞâ=àùÝõÛfÚiÙ ÙBÙÚ^ÛÝÔÞaà¡á‰â7ã´ã,ä»äƒåƒæ·çévê»ëÀì´íÁîëï=ñÄòŸô˜öºøêúý*ÿÞˆ.Ö© E ~ q / Ð Š ` ˆ  ó + ‹ è¾ò‹ì$b·.ÅF$ãÊ›`B/ ‰xn›ƒ“dûþ˜ª¿¤ý&`)éÔ‡¶s>ºLê  DnÉþˆ÷®ñ¼í9ìí6ïÁñuôÇöŠ÷höõóôð.îÆëªé*è9çBæ™äçájÞ#ÚŠÕWÑbΩÍ:ÏÒP×ݦâ6ç êhë®ë¶ëìoíjðÒôçùëþ¼äq½­Œþé ß·àôO [ §!;#%Ø&(F(¥'Ô%Í"¼6ò^¦ê  Õ Û † ² E DÄm5þXü§úõøR÷õgóéð(îdëºè>æîãâÃàÇßß½ÞßÞZß:àmá ãå%ç\éë°í~ïñòÚò[óÒó=ôÝôÒõ0÷ÐøÃú ýžÿjOC% ä Xm O3ÌPqwX ‘ì ÷üþû n _ ¾~k±ÿxþŽý´ü™û&ú)ø‚õ=ò{î³ê3ç-ä¾áîߡއݎ܋ۢÚßÙtÙpÙÚ[Û Ý ßèàyâlãüãäëãÌãñã‡äŠåðæ‚èHêìéí©ïuñ_óõÄ÷,ú™üóþ4,Ý9J Œí N o ² ð Z æ  ˆ°L;°ÉžAPw©Ë¥™ Ücý]RÝ!p&ZqWÀ; ¹œ}âñKÙeÝíyNÞ¦O W¸Ÿ¹ è { bºäô¼ foýbøõóòñØñgòÎóãôµõ:ö^öÕõ¥ôó+ñçî)ìàèþäøàãܿآԎÑáϸÏÚÐoÓ<×¢ÛàÈãêæ5éÅêŽë%ì5íìîDñùó´ö\ù•ûûüÂý þ_þÛþ¥ÿ&­ú ?VéñS '"Ù#$% &T&=&‡%Þ#q!k$ÑÍs€¦4È2-ó † ¸•tlÿfüUùBö>óRðqí×ê^è_æÓäÊã"ãââãKã¤ã"äÑä˜åtæ_çFèBéêîênëÁëëëñëöë'ì¨ìí ïððió4ösùæüiØ/0 Ë î‰°Jƒg/æ³…•ÊtîX½÷êXKâGf Õ e¦'xrþCû9øõðñøî/ìÈéÖçUæ åä%ãGâxá°àà³ß•ß³ßÉßßß ààÐßHßÍÞ›Þ±ÞöÞ¸ßáÊâ ä‚æƒè›ê„ìLîõïÂñ|óMõ÷ÜøªúAü¹ýøþ *ÂpWTd– Œ G ð¼tçøŸßÄBgft¶-÷WÛ¶µáu…éØiátVu€É6ˆœté†ú~ùy˜†Îþøú.ïS1Éty+ðô·üøêô³òxñoñKó õ­÷ïøYùRùøÒõxò)ïBì[éXæOãÆàBÞ£ÛšØÄÕÔfÓÔÎÕ(Ù‰Ý.âfæé ìYííêìuìÝìâísï¥ñ5ôÌö¾øãù’úû¾û¯üiþÙu @ØéaÜsM¶éÓg²òêk¨£éty$¤¾Ží\û~ ØM¾aþ'û3øõóòðï’í›ìßëxëOëfë…ë|ëbë0ëë°ê+ê¥éé“èôç>ç æ9ææævæaçÒèŸêÑìDïìñ¾ô‹÷Zúýÿãàf‰>ŽIþ=É· • B é}âë‚Ç¾×Øž Y `¨#ùúßÿþãüûù÷öŒôòÇïÀíÄëêæèèxçç›æ"æ™åíäõãùââ0áràé߮߸ßíßSàáþáãaä÷å­çWéõêvì®í‡îHïöïªðOñ&òCó¥ô4öï÷ÏùÔû¬ýRÿÚfß5ƒö’ ? Ï gïTq,ªëæ·oŸ¯Í‡í"ßÄ$iÌK»œm¾Â¿[ƒd, ûžbC5íD¶û¡/è »v£›|þþ¿ÍÊ þ ø3òLíÆêÌêóìRð¬óJ÷ÐùŽú¿ø4õîðÎìâèåDâ…àoßÔÝ‘ÛíØ¢ÖµÔÓ€Ó¡ÕÿÙMß²äUéíIïÈïîeì êxé”é¼ê@íŸð,ô9÷]ù¨úVûøû»ü>þÈ\µ[ ¸˜­·Å !Ô|“ÝÛ}sH矣|—ØT{s –Þtÿwüþùá÷öèôIô&ô-ô,ô,ôôšóÌòŠñð’îíëêÊè±ç¢æå‰äÚãsã‹ãöãÛäVæè,ê<ìGîNð1òðó‡õ÷°øúRû,ü½üý(ýýóü%ý¶ýÂþKWÕt [ TÄÁ#‰ÉäÚ ¼ › ƒ ¹‰Ùª‹< — áþûJøÅõ¶óIòˆñ.ññÌððïŸíÒëïéèƒæ‘åúäaääçã´ãeãüâÈâáâ;ã¾ãdä-åæßæZç”çÎç@èÆèbé`ê»ëQíï¼ðcòÔóNõœöÒ÷ÉøçùAû²üþ«ÿ±P€ž ~ -®ÜTØÒXš%§òïô !!b!e âQȯ J*¦vÀ !i"q#v#’"o"h"÷!Ò I °˜ªñl“¡¾e­c%\è ˜üs÷ó ðÚîïð9ñjòôõ·ôÝòð?íê ç¸ãýàûÞ!Ý Û´Ø‘Ö.Õ‹Ô§Ô­Õس۾ߚãÔæé-ê+ê6éÖç£æ8æÈæ,èêvìWïòMô.ö÷÷õùü¢þƒß­z éÂ@6@ŽÓ$gÆñ8;Vm”;@sô·æ¨7¿ y ƒóÇ) 1ÿ¦þ:þþ¹ýIý ü¨ûMú~ørö!ôñ ï£ìYêQè˜ænåŽäûãÊãäÃä›å¯æÞçé"êçê®ë>ì¶ìí}íïívîïžïð£ðOñüñÇòêókõ6÷IùŠûùýNo'qEÔ9~¡ÏøóºPÌnnÅ“¹ } M i  { ˆCfÿùýÒüÇû úAùÇ÷nöjõ°ôJôôô0ôÕóóóñmð˜î¤ìÊê(é÷çç‚ææóåðåüå=æ”æ$ç¼çyè é»éUêÜêIëŸëìë[ìÐìGíãí¡î„ï—ð òéóÿõqøüú´ý•ßÚpþÖÉó Y ß šo¡U· …@Æ !´!å!˜!ú q I : ƒ ‘!ë"1$¤%/'v(+)u)m)1)®(µ'¬&&G%:$÷""O!‹ ƒ.XykòÁFù° IËýgøûóýðTï›ïbñýóöh÷¶÷×öZôãðçìæèåbâ±ßNÝÌÚ!ØÕGÒ´Ï-Î'δϒҽ֣Ûdàäæ^ægånãóàÒÞ¢Ýݑކàã¯å@èœêÑìýîhñ;ô´÷Ñû WQ» OÿÚ7Pg¢îêü!TËSøÕÖ Ñ"‹$¡%-&þ%%Q#ý 7/ :ËÌ ` t   F › Î ª ü µ ÊPdÿ™û#øäôàñ'ïÞìõêuéTè•çFç_çØçƒèKéê–êÀêzê½éªèdçæÎäÖãBããcãîãÅä¾åææ5èÈéŽë–í×ïòKôIöá÷ùŸùÙùÆù ùù»ù6úûürýýþ•%»PÒ4   G v @ – … 5Çm5CŸIT–{ø<±éÕh“þ…ü€ú•ø¡öÞôvóTòMñðòï´ïŒïpïnï–ïØï»ï^ïÖî4î=íìçêËéðèhè%è.è½è²é¬êéëgí×îqð*ò×ónõñöPø[ùHúûpû¨û0üÙü«ýâþth½= ? ð‹Ô¼8{„,€ß«À¼šˆt Ù!# $_%:'t);+þ,U."//D/ú-,-+È)ª(Ó'T'o&v&[&±%%ˆ$$Š#²"t!Yô¦ä ®ÛÂþýQüý÷ý)þìýƒüIúY÷ô‡ðêì êjç”ägáÞˆÚ6×ÔÇÑ„ÐçЕÒÉÔZ×âÙÝÛ«Ü#ܺÚߨúÖQÕGÔ2ÔæÔBÖç×°ÙuÛåÜ|ÞgàŽâýäþç´ë‚ï>óŽöpùÖû°ýÿ2mò‹gvS B ÑdFh¸K÷†ê!Ú#%›%‘%%$Ö"!6 ö <®pE@`ou.‰K;ƒ‡b N b¾]8ÿ;ý˜û)úâøÈ÷èö:ö©õ õ-ôó¾ñð4îìëééç)æ¼ä’ãÊâPââââIâ·â4ãðã¼ä»å±æ’çRè×è&é0éééìèßèñèKéçéîê1ìÊíÓïò`ô”ö«ølúÆûüðü#ý;ýTý‚ýàýOþÂþDÿ®ÿ7b­á¼"‡•\ÿfìšKòÿ…ÿ ÿþ(þËý}ý4ýáüiüÓûûúùÓ÷´ö•õ…ô˜óÌò#òºññºñ-òêòÜóÜôôõçö¨÷ø.øøé÷Ÿ÷7÷îöÝö÷t÷ øNùÕú§üºþ µWl ¤ à ’ Ç jê¡qœH'-f»õ 4"Ÿ#“$%O&Ð&'o'œ'ò'®(ô(§(h(t(4(¾'Š'«'7(è(ý(ƒ(Ñ'e&e#hgj‹šÀ¯ ¤ )ˆOŽ œ t,ñ£þ]û¯øƒöBôƒñOîÅê?ç›ã&àšÝ”ܽ܃ÝèÞgàVáWáaàJÞÛØÎÕŸÓbÒÒtÒ1ÓRÔ3ÕÑÕ€ÖT×`ؾټÛÞêàÞãƒæ¢èeê£ëEìáìÂíÓîðÙñôTöÊø^ûåýVËC¼p  šçÛ,%»>TV›ŸHGj˜¿é Ä!I"a"")! ›æ >u¾@Êu9$: è ( Q L á# ªÿ‹üú¾÷½õ#ôÈò¾ñØð"ðcï³îîZíºì(ì¢ëë~êÈééè.ç'æ:åxäøã¼ãÉãä¢äJåñå}æöæmçÒçAè«èMééé§ê‡ëQìúì“íîhî îæî&ï•ïaðWñ ò/ôùõ¢÷2ùŒú„û ürü†ühüGüZü|ü¬ü ýwýßýRþÅþ:ÿÍÿlÆ~ TZRjhnÿ‰þäýœýŠý»ýþ¤þÿ†ÿÖÿR~Œ‚rKõÿ™ÿ"ÿ©þ'þÎý¦ýÍýWþ&ÿ?š|¹Ïi´—ióó/Òô¿ ë Õ&ƒïïNdëôиFŠ‹ò•ΰ$ ;"Ø#%ä%=&&Û%]%#$D#C": \Êò”ò“NêÎáÂêÔô< Áô¤ÿý¾úIø_õ]òuï…ì4êTéæé`ë‚íÌï@ñtñ*ð"íœè©ãòÞºÚ±×7Ö÷Õ~Öy×}ØVÙ"ÚàÚmÛXÜØÝºßÓáõã±åqææ æýäžãÓâ©âãAäRæÛè¨ëŸî‹ñ3ô±öù‚ûðý3 ÛQeî7D>…Ö À Ë ÏýWœ»zÈ•ë*Ë`õÞ¦ŒÂ„ {ÄÊ)CèÄI « /ðÊë„jl^)¹þÿÿìý±üEûÒùBøŸöºôèòñxïîçìHìýë!ìzìüìwíÃíÐí“íèììëÁê‡éKèçæbåå%å€åæÂæšçnè é’éêiê¹êëpëÚëNì·ìßìóìííBíí#îòîðmñÆò ô>õ-öÙö]÷§÷ê÷=ø¡øöøSùÕùPúžúÙúûhû¿û/üÍü†ýlþDÿ ÈYÅ÷ Dn®Y¯k²øM£§Kï‹ W s t n T R k é : Û { # r ½ %Ê»úG‹úoÿ¹¡z/TGŠ‹Ë/ü×Ú1©”W !U!› M¦}Ä î;OˆDR>›¤³¡ æÒi‘7ÿþÊüÐú\ø¶õ&ó ñ ðµðuòXôéõ½ö2ö×óð;ë(æváùÝÜÍÛÜÜÈÞwàáëáãáá!áºàáFâÂã:呿Eççæ–åéã%âêà¡àoáôâ6åèZëDî¨ð¥òJô‰õ”öÃ÷ ù+úûÙûüýübýæýoþ+ÿ-¯gu°û  ý ãl‘`&«á<¹‹i¼^E7#àtïSxhNSe8Ö;… Ç ñ v Q z ¾ ÿ , î c t+ª9ÃGÝÿwþ+ýÓûŒú~ù—øø÷„÷_÷\÷C÷ûöoö±õ§ôVó½ñðŸîqí•ìóëëôê<ênéŠèÏçeçcçÄç»è÷é:ë ìyìýëàêré¾ç6æ'å¿äÕä‚åÁæ7è„é—êië ì°ìvígîtï€ðOñºñÃñ…ññaðØï ïþïøðlò-ô öÚ÷hù·úÏû¯ü2ýwý–ý¬ýÀýéýþþdþçþšÿµéÿ üÛ“8ª N h Z Z N 6 E ‡ û ¼ ¯ — M  ô >V§þJŠúx›˜œÛVƒg±ã‡a"È%Ï´z»3iL\€vªfêÊ ÀãQÌÃ$¸ \‹L'ö.å ϰ­½ˆÿCþ˜ü‰ú—ø ÷ûõ¢õöÈöI÷T÷Ÿö¯ôðñéî¢ëWèÞåzäàã/ä8åEæÿæ5çç¿æTæÑå”å¯åÿå7æŒæêæÚæCæ’åå‹äˆäBåbæÃçeé[ëížîúïñãñòLó ôãô‘õEöéö£÷bø%ùú)ûIüýþþ\ásÐ5b8    ý ÷ û ë õ M é ¥ º ÔêâˆîÆLŠ4Þ^Á7¹ P   4 f ’ ™ c î 9 H % êéØÏæ5H•ùÿqÿøþ§þSþìý‹ýñüüÞú¬ùoøÿö«õaôóñðÐîÑí)ííŒí•î¶ïÃðñ¬ñèðJï6íóê·èçúå§åé徿Åç³èféÓéýé1ê“ê1ëìüìÈí5îî…í|ìVëLê§é¼é¦êJìaî¦ð¹ò]ô–õWö®öÃö×öøö2÷w÷õ÷uøæøCùÅùaú&û0ü€ýùþkÈ)è]£ÆÙÞíAuËa!   ù À R œ à À ¢ š ž ² Ó >\b‚£ÌþYùƒØ©píü9¶aøˆNQoy_‹ÿlÛ}ë¾ôÒqë¤Ê=Ñô£´ñWO¦t P‡e Î çKÌš½ ÌÕýS´ ’‹ÆþfüùÂö ô­ñæïèîšî¿î>ï%ðêðpñ“ñpññ_ð‘ï°îÆíÖìøë:ë‚êçéié"éé[éÙé¦ê¡ë¾ìÑíÅî­ïdðúð^ñoñ\ñAñ7ñ7ñ_ñ•ñò£òtóô¤õÚöøIùmúŒûžü ý„þIÿñÿi³àüïët1+p 3, ß F w ‰ x [ : 4 -  ï Ç ¬ ª Ä u ô ‘  Ž Â ¢ * { š ˜ ­åD×uþ£g-ö³{9ðXy?³þý™ûúÀùYùhùªùêù#úùùLù#øÃöLõôó™òZò?òBò4òò‹ñ¾ðÊïøîzîoîÄîPï¹ïôïäï˜ïï™î î©íŒíåíîUï+ðÓðñ3ñ,ñ!ñ5ñwñäñ|òCó3ôõâõöäö-÷p÷¾÷ ø’øùžù4úæú•ûEüëüý.þÍþmÿíÿ^ŸõG¯ ˆ`˜¤‰ŒÆ1Ô¡’5Š~cis>ÃQLì L  $ Ð ï ¦[¤œ ðr J È   ã Ú ? ý < ˆŠ½ Ê " É ¡ Þ ü > ³ Z » Ì S_´:” î / Úi² Ò Ò §2 JÓIÊ ù rFæl»^lÕ; i ] ( ¹ Ó   ø " n…ýBû,úWútûrý•j>ô½'Xþ¨ü-ûÜùÉøÓ÷êööoõõòô|õµödø úûOüWü¬ûyú ùˆ÷öóô/ôüó)ô€ôÊô.õ³õPö ÷ü÷ùÞù–úûbû{ûTûëú{ú#úúú=úhú•ú¦úÆúóúcûBünýÕþWÆã…†âäØ –ÿ‰ÿÜÿz+Û^“²È&§bÛNftm0Aæk±òV©¹”*ºI ß°n÷ÿ;ÿ`þ£ýýwüü¢û|û~ûŽûˆû‡ûYûûãúÈú’úFú úÆùHùšøâ÷M÷ìö¾öˆöeöNö;öDö„öèöH÷­÷ ø(ø>øTøeø(øÂ÷W÷òö¨ö¡öÅöÊöÁöÑöøö\÷Køzù´ú¾ûAü-ü»ûœûçûUü6üŽûÑúú´úû‘ûWü.ýÔý#þFþþðþÈÿÌn0hšÿQÿÁÿC,Hÿþ8ÿüÓR¢ª.có¥H›ââ^<»Àÿ•„ÓΕÖ@¢ðk¹ª[*JUQ[gFX@å4É÷¯”KÓ},ì‡ãHY‚}Z^íúÝž˜: W 8ൈChêÛi D È @ÜÚåW Ä ’  W QŸñÛXÏK´ª%d„”ŒýqÇMýã~hê k”6IÒð9ÿûý0ýoýÝþǯRv˜µýütûªûxü°ýÀþçÿõšdFþ´ü™û‘ûmüãýeÿK>kÿ`þkýÊüqüqü£üöüçý–ÿXA낹þýÍû"û9ûñûýNþ‹ÿ¦f/?ëþþþ´þ•ÿñÿ]ÿ?þ¡ýþýÿEåÿaÿrÿïÿ„©A˜ÿ³þäý ýÊü;ý|þY¦É¦þÍüÖûùûÃüýÓýöýqþcÿàÿ ÿþ1ý0ü\û²úZúú…ûýÓÿE+|ÿ7ý1ûåùùù½ùûËüXþ.ÿêþ–ý¬û\ú*úrú™ú—úcû.ý4ÿW[Šÿ¼ýÞú/ø^ö[õõRökùïü{)8 þ ÷jñ¹ïèò”ù„Ý~i²jýøÔô©ô–÷Ýû}õ“Çòý.ûrøI÷ãøhü\×·.¶¿þ’ûËúyû"üÇüÿÞP³Í¾ýÿæü úø÷dö~öSúâ^Ï ‘ [þ*û úÊùÈùÞúöý,± ” ‰ /aüú·úÈü/v Ü À —‘þúù>ùû¹ýÿûŽ« Ë pà ' þ·úÍúçü¨þÓþÿwÔm Þ j ÚÿÓûûñûöýêÿL“ ? × ú µÔûoù¢øÎø–úÑþÊ… )j 5¬ütû—ýå_&HÏR¦ þ~ù÷zøý{ Ô Ô . bͪüùá÷±ù»ýÐÖª s Ë b ±ýzøýõ'÷sûR ð | ð £ü5úqúgü!ÿ×{(ð.;*%W¶d¢O2ÁÀµFf–¶ýú»ùHûÎý‰—­g à ·Uüùzú!ývÿ©ÉŒ]ýtþuùÖöè÷—û¬ÿÏ sgeîD½üßöÚòìñÏô—ú OÑ|Ódüøëõòö³ú¬ÿvs¢íý$û¼øøùÛúöüUÿn2H¿ÿ®ýÜûÿú”û¤üü¬úŽúÙü¼ÿrþüPüÿLA±!þü¡üÙþ?ÿýÜùNö°õKùZÿ̰<ùÚüå÷²õ€÷+ûàþa;·“!ýòöîòÓôüfŸ ‚ †X¤ýQúiø­öUõöùù×ÿsØ s0ïýy÷®óéôZúÁÁŠkÿœù’õcörü½ŒÚæéŸ±‘ý5÷ªõÃ÷ôùŽûAýÿ›õèø}qe?þXü±ûòüiÿ‰¥>yBÿ—ütü ýÓüzû`û’ýßÃë²ÛͶþ³ûyùþø)ùÎúÐý•Zô—ÿYø*õOö3ûšMî ‘ D»[Áøñ:í.ð]øž ˆ   ä §%eû óúð>öÅýœ+Gç ›­ýKúAûüý|ÿèþyýïü­þ_¤Ó‹ºéüúù ûÿ]Ü O ÙþPúù<ú)ûÍû‚ý„ ‹ s ª«þ^ø—÷úßûdüÜüîþR ”þ 5 ;ªüåù ùŽø;ùõú¢üCþU2hh C É c(ú€öxøÇýg£ ~ ªÿtþ.ÿP¶„B$*ŽþüeúÑøÈ÷ƒ÷ÇùžÔ % áq‡þKùKõÂôYù`û à ÿ £öéüýö@óÆòöüs bi骨þ“ôîyìÆï ÷¬ ×>x¬ûþó¿ñ ó~÷‰ü³Ÿ )¯LŠðø¤ñfðóšö!ùôúþE)  ª $OüzørùAýøOäôxÿðþ±aþ¯ø ôeõwû G°"z ‰ Ÿü&öló¶ôAúƹ, ×7$Å¡ýÛùmùãýI ‚þüéýÿMþ³ûúûâýŽÓíAã^ÿPýþeȤÿúàøžý+£,8þ]ü½þL¹ÿõùxõ~öý ù• Wüôø“÷Føú„û_ü¤þ&9 s ø~£ú÷DöéöùÜûîÿí°… òÔÄþNûšø#økû´ì~ÊÇþÿ zÿü‰ù@ùwü¢É)³ÿ•üáü{°Ó r 9CýÍø øùVùçùü®÷Ú  šZÿpö­ñ`ò»÷Šþf ] ÍÄ Å&þWóáì±íöÍþݾÜ):m{©#þûWú?ühSâ9 N^ÿ~ú„øMùú:øðôö—þY ¢?ÆÜúyô÷ö¦ý!ÅþCùøÉþX ˜Úûçõ“ðUóDù†þ<“Æ = ž ß‹õ0ï ñšùìZÚmøð â “Þû‚÷E÷˜ù‘ýéX¡úhïýåü#ýÉþ—ñHÕÁQÈrù•‚_üù„÷Eøšúyþ?ªÅÌ£ëþ%üûþ©Ö6  .÷ú‹òöïÖóúÿ”þøo s “ñþ×úSûqüéú”øaøýÍå€$%ü!÷<÷×ú(DŽÛîü„ùÜøòùHûÈüÿ<§ w±‘ü°úSú\ûû¢úüukú  jû‘ö ö"ú@çdSŒÛÚý²úº÷*÷Iút8ÐñK&þ4ùtöù#ˆ‰Éï9ZÖþú“öÆõ´ø#ý,|ÿÔ=Á >ŸküÜ÷i÷˜úÒþOâ‘Ü\ì3ýþRû»ù4ûÍþv¤ б ZFýåôòèõªü×—ö Æýä ¾ïþ—ø¢õOöŸùwý€7ìö© 6 þ)öGó õ}ú‚IÉó¢æýûaøe÷³ùÿáèObëà„üŒþ;ùöÌ÷Xþµð¦·5vþÁýšûÀ÷•ôwôÀøï[ \ªvÄöiî ì­ínóCûÀýu îA ß9þùæö¬õØöü!Ø ô ‰Oûßøïøvø6÷&÷TùàþM…³T- › 8TVû6óÈîKð÷.Ò >ªF uÿ÷¯òñ¼ñMöþ ¯,•ƒ [ÿŽóïêièßë°ô\7 åk* ïü¹øöö…õíõ–ùˆUœ §Û ÷ùïò7ï7ñ÷ø9Ø‹ Û ÝE69ü<ô—ïBñƒøûN¹+ ž Ožòû*öŠô˜÷ëû .aéÒ\þ‚ý@ý>ýcü§û>üÑþ/«e9Åÿ†üAûÓüDæ‹(¤sýŠúfùþú!ýtÿ¾×ÿlÿHÿ¼ÿ@}RŽXÿ^ý;ýlÿO†üÿÌ÷äñeñJ÷% ? Ĭ¹}DÿDû–ø°øÓûd,ÎýšùËøú†þŠÈ×Ù/‡ØàúTôôù[Þò›nýý]†jGýÎôóPû è¯ý»ø2øƒø\÷cö˜÷õü ë Å ó Ê üùûêþfÙ¨ý?ÿõ×Á›mùìö‡ùþö{Îý¡ü\ÿM‹" ùñþäúeûºþâõÿ¹üóù<üèKGàù}õÓötû$Þ(V ¼ û› »ÏýaõÕîXëHí’ô÷þË ² Å8²üV÷9öFùËý$EN[P=9ýøÞö\ùØû#ûî÷q÷ûçOD S‰ ®ÿoùõUòŽòÃöáýËw Y « ¬QÿÒú§øú£üàþ«ÿ{s\é€÷ýûzû‘ýõÿñÿ‘þ¶üžú`ûm… ¸ wg6ýºø#ôò ö~þÂû À k¥Gâýø²ö@úìÿ¾1H½fbuóÿ¾û‘÷Yôö‘üqÖRÿÿýF   Åðú6ôèòÌõÿù„þÇJ;‚IMÈÜþ„ü°ûÆüðý@ÿÍ×e£F˜ûªøäøsûîýtÿ~ÿ¬Î > ÿævüøùBú!ú³ù|úªþ&Ó1 ‚“û útüÑþôÿÿý4ýaæá ´ ñÊËý ýaüFúøŒùÚü²ƒŸJ×î¡ûª÷6÷Êù–þršÃݳüä÷†õšøç• †Eþ±÷Cöðú÷ K '¦þü«ü¡þ÷þöü“ù™øPýΔ“¦-ùÏî®îªõïükÙXŸ ŠÃ=$ûŠîªèìõ®ÿÓ— ¥ I ­ > Ùÿ5óyëÅíˆø¬ j p¾þuWëøùôËò÷pÿ’ ס»'Ðýûéúpý”ÿèÿ.ÿÿ¦Ê.¡/üùhù#ýâ‘â:Æþòúšû•ÞE™Íý¢ù÷¢ø%üVŒQx%LEç¿úªûŸö¡õqøDüðÿ® ] ²Ìý¿÷8õ›÷Ãúvþvû äed.•ýzúdöëó8õÙú`$ ÷ ¿ # aܘùóÏï®ñ]ùà 䢫 äiûõò óòöcü•«½ V nû¼ñîuñ¨úIÈ i çVáþoþcÿ.Ê›þûSø”øáûb*âø¢=MþvûPù÷Xõ ÷¢üÚy § i ½ -Jÿàøó|ñIõQýÌ Ô ýœ†þíýÄûÙøy÷³ú«ozª”qdÿýü?üµüXþ™ÿ.ÿõþúÿJúùÿ“ÿ`±;!>iþfþßþÏÿAÂÿ›þ­ý2ý|þ4ª¢Èÿ‡ýþhÿëþ1üQú…ûuv2  "Jÿ‰ø…õ'õ£ö9úðÿJv ¯ c ýÑõlòô§ù-Å_Ï2Gä“Kþ*ø¬ô ö´û€V»Ò¾þøûÅü6ÿò+qþtþYü.Ù‡IÿyꌼÌþªû™úïü2€öþýÄýÿ“þ ýÄü^þú÷ë D ÔHžü€ù¡øíøúÕû,ÿ»m9 ZÍþúàùŸûYý©ýžýLþÍ…°x‚1þDùY÷sùý—<„ÐYýØü»ÿM¼7Uý½úûeükýZþRÿÁèEòÿÔýðüŒüYüüðýöÚÜq4þ|ûûEüòý3þ·ü¯üÝ Ù 0 _éüCú‚ûŒþêòõGýuüÔÿ@ ¦ŠøóÈôˆûï= l!êþ™þ(_¢Vþ”ü.ýÁR*þgù,÷óöÝøVýÆ $ á`”øHôõ û¸ê„ ÀOþ[û{úyú¶ùÌøúÿMr  2Wú&öšöâù&þ.s 8 úö›õ×÷-û–ÿÍ= ò ê o¹ø*õ´ö;û¤ÿTB1êÏ  Íü?õcóú÷iþ–“†?T† ü À]ÿûö ó¿ôÙù›ÿ-‘Ðÿ®îCü$õñ¯ó<ûf™ K " b ÌÐûãõó›ôAùŽý‰V' q n +mþÖôªî2ïöbç WÜkäþ™ø€ö2÷ú÷tø@ûL^Ù ' ¼"œû£úkü|þ¤þFýJý¢þ|MWÿþxþ”ýžûØú7ûòüãÿeµÔßÃuÜñýWú-÷“ö¼ù6ÿ ã ¹ÕÿRý"ûÄùÊùûþè:nõ›¸üÊø÷˜øOü J®‚d³þóýæþÿ†ý.üåýÈ‘ïÅÿïú2ûR \ 3û û4ÿ§ÿû9úûýÊVhyüéùEüľ,q{YÿøþhþZýÖüòü”þ¹ýT5ãþüªüKþÆÛ,‡ñÕJþù¡öüø@ÿ–Ü•6¶œþÎúKøtøcûËÿZtÑ(ÿVûÈøúwþóº7 þcþÍþðÿk'ÿœÿóÿlÿþíýÙþì ΀ÿŒüû­üÀþvÿþ\ýVÿª®ÿá¤(ü°÷Sö_ùs Þc­àKü»÷lõf÷ÎýlÅ' ²ÕÈýYöiô“ø¨ÿ&< Æ“ ÿ©ý5ûVøç÷8ûŸW ¾ ¨ØûÁöÜöû_ô·ïÊ“ìäÒÿ,þÄü'üüçüÿÜfgíþWüÝülþYþlüKûáün‘ùî?ÿæûÑøPøëûMŒP Ú TâþMúÚùÆúàûýþiÿ«Jd²³NýJüÑý¦U\~þžþzgu*áÿýìü_þ˜?, )ý û)ý­ÿŸpOƒy‚Mý;ûŸû‘þ#²ÀYýIùèø ü,ä<ñ}›ÿ¤ÿæÿæÿXÿÊÿÓ/,^Ь/ÿ”ýãû¼úûHý¥'„ç¿ÿZÿeÿUÿ_ÿV±mºP.Tÿ[þ~þXþ þþÐþ€ÿöÿ GãhlÁ“ïü!ûÒû{þwz«àÿ­þ<ÿ „þØüºübþ(7øŸ>Êãÿ¢û·ùÒú¯ýVúþb¯›šÿRüúßûÿ¥Mò#¥ÂDÿ¾üüeüÂü~üüÁüCÿ(ÓË(¥¦ý7ú«ùÂû’þ!E¬} I‡Hÿû“ù1ûxþ°Å:ÿ™þV/h'sý”ùú.ÿö`2ÔÿMÿÜÿÈi¬ÿYý û ûêý†m}sE1ãÿ ÿâÿH “¿ýëû4ý¥ß‡dþ?üäüEÿé„ÿÀþÔÿUfŽÿÜüÌú“ùPùåúÿ¹. ‹ ³tÿªúùVújüãýÿ8ccœÿeúÍ÷¢øû‘ý@ÿa;¿~`u©ü$ùùßûOÿ NmG´\žÿÝþ^þ$þþÂýáý´ÿ²à2ï¸ý4üôüÿ0i•Rx`fÎýUû/ûuýÌ©ád)‘Äÿ®þÈþjÿMÿÿÏÿ Uï“™þðýºþÕ×s:Ä€™ÖáÿNÿlÿhkÞßþËýþrÿ(f™ÓÔÔÿ“ÿfyaXÿºüÀû‡ý%§  dý3ûYû|ý {Ç)#c2ÿªûÓùÿúÀýœý…‰#f¸þMý}üfüöü¡þ;“Ž1ÄÏúþÕý]ýýeþ´ÿ=XœûJæÿšþœþ³þÏþÈþˆþTÿì3bƒXü&úùú&þ‹{nÀûÿ’ÿBÿ¯úþíüzüeþ-Û™ Óÿ({à.ÿyþ¥þNÿ1~ÂÿÝþ þFÿĽ„ÿ|ý8ýGÿ¾ñ´ñþ¿þC2µÿÀýxýÿAʽ‘þGý±ýÞþØÿòÿ™ÿ¸ÿ˜àd‰îÿ¾þxþˆþœþþãþ¥ÿÄ‚½ÿþ^ý|ýMþôþÿ6ÿÕÿt«?ÿ8þ¨ý<ýÌüzüýñþ¸üdñÔþþþŠýWý}ýþGÿúä4=Ãå×ÿ*ÿþàüžüþýÒÔar¤jþcü*üý¶þ‰áˆEã& ÿ þDýWýdþ<¾0_ã†þ\ýµýÿ‚\–ã™ýöÿ*þ´ý‰þdñ5—bÔØøÿÿãþ^ÿLý9 °_¹ªÿ›ÿ~æÝèí³ˆÿÿÍÿ…”ãmgFAÿÿŒN°Vp‡kÓÞ©ÿ¢ÿT°jcr=Íò§lÿ¥ÿ?=ÀŒ‚¸nL{"VúÞŽí¢Mü¨½vý’Uÿ ݺD‹S7û²QäÑÿ<{Ö‹)5²BŸF-èáÀ•‡MùÿœÿŠÿqÿ2ÿÝþ™þ`þSþ=þþý¾ýýOýý§üü…û=û ûÖúÆú ûžûÁû;ûAú;ù°ø©ø(ùµù+ú[úú]ùcøš÷=÷K÷¡÷øpø¨ø¶øˆø"ø¶÷{÷’÷­÷Á÷Ø÷ó÷!ødøÌøiùæùõùvùÞøsøRøgø¦øåøþøù}ù%úçú®ûü÷ûûèù7ù`ùxúÀû”ü×üûüMý¸ýùýˆýlü?ûéú¡ûêü#þÌþÃþzþÙþËÿƒ´ÿºý<ü@üÔýëÿ\í¯y©eÿþ{þJÿƒÈ›Øñ;ÄxfºÂÖ>§Mí· ÆdÛØ/Ñ `‹ % - •ÁfÖ¨,{F 5 Å S | ˜ yßÖzþ è † >ò ÷ ¾ å ¶  ‘ 5 ô ” Šß¥Æ ˜ g x Ñ { _ o | € < Þ|,´|ÍK7y®¢Gl¼ÁÿÿþPþ¡ýý½üSüÜûCûœúûùÀùÁù–ùù~øã÷s÷>÷p÷Ã÷ù÷æ÷÷éöûõõbôôóÃóåóHôÍôIõ¯õØõ³õ[õôôÔôõ´õÜö,ø+ù±ùÑù¬ùIùñø©ø¿ø:ù%ú;ûüyütü!ü¶ûûû$üõüéýæþºÿY¨ÎçÎBê‡äí‚æSüîk *+¶YðµÄ 65ôˆíÿ"ÿIþ„ýõü¸ü¶ü¶ü«üyü5üàûûûÁú¥ú ú»úÐúÔú°úiúúÅùmùùîøÜøÀø«øµøÎøéøçøåøêøøøù(ùNùƒù¼ùúAútúuúnúTúFú@úoú¸úûGûmûxûUûûñúãúìú3û©û*üzüµüèüûüóüÚüÅü­ü«üºüåüUýAþSÿðÿ¯ÿÄþ„ý~üóûüèü5þ•ÿ¨‹gÿ_þþNþäþoÿêéÒǸI1ÿÿÌDê*£ùŽAúø—ú  Î í J ¦ ú j Þ b åÚ¢s‹ó47óz›¾÷3pŽŽL¿üm,,C>új¸ü¼ i Ž ; # Ý l ž©}NÚ¶Äÿÿ@ÿþìýCý]üpûšúßù!ù\ø÷šöÖõ4õÃôHôÉóEó¹ò5òtñ¼ð*ðÜïÈïèïð)ð&ð ðÞïœïhïYïkï­ïðˆðñ¢ñññò=òbò¢òóqóßóhô õÐõTöÉö&÷÷øˆø*ùäù¯úrû+üµü*ýsýËý þˆþþþ ÿ1ÂH¶3o¯èX«ý9t¦””ªä;ÇÍ¢tG)õزza0ásÿ•Q>3úªGìN Ãÿ•ÿˆÿ’ÿ}ÿQÿÿÄþcþíý‰ý=ý ýáüœüUüü½ûmû(ûÝú ú}úfúJú5ú úùùÍù™ùYù%ùõøÌø¯øšøŸøø˜øtø*øÊ÷r÷7÷÷÷÷%÷5÷G÷=÷÷Ûö·ö§öÉö÷C÷÷Ñ÷øþ÷Ò÷™÷w÷|÷»÷%ø£øþø9ùMùEù>ùTù‚ùÐù?úÒú}ûü{ü¸üñü@ý¥ý0þÛþ®ÿví,V{°"ì%ä=©O / ' ( ßh»‚+ýØÑôð­ÿøùjÁa§ÈÁ¸¶··| ˆÅm9ù…Ò 8JA@Zœì K • ² u  £"¤N&?€ÿÒþáýÓü±û|ú,ùû÷èö öKõ°ôô]óvòñ¢ð°ïÞî9îÐí“íbí6ííÄìyì"ìÍëœëë ëØë,ìxìÆìíHí†íÅíîiîÎîCïÈïBðµðññòò/óÕóôBõøõ¹öq÷øœø3ù¿ùZúûªûPüíüŠý!þ¯þ'ÿÿàÿB¹1¥_»Z¥ð<Žå>‹È5Wr‚‘žŸ©³µªžyb>%⮄QêžkH!ð­fú¦U$õ¿k¶Tüÿ«ÿVÿùþ¤þVþùýžý1ýÖü~üüºûYû ûµúsúúÖùŠù?ùöø¦øKøë÷ ÷G÷ ÷Ãö‹ö9öæõõ/õñô³ô˜ôvôfôHôôáó«ó~ónó]ófówóó¤óÈóñóô:ôaôô­ôÝô(õwõÉõöZö„ö·öóö5÷‰÷þ÷ŽøJù ú¯úLû¾û3ü°üZý!þ ÿØÿ©`Õ“0Ö‹P)ïÚ Ò è Ò ¯ ŠfM$õâÑ®pµ&– mÙHÆ/‡Ô.W\>è­AÂ2«2ÈKÒPÕP¾2 X‹¡ªžŠ f C ) úèǬˆ‘¤Æõ.ÿ4þ6ýü ûú.ùTø÷»öêõ*õeôªóëò=ò ññ’ððšï;ïËîoîîÔí™ípí_íIíIíTíkí†í˜í¬íÉíàíîIî‡î¾îïIïŸïþïNð¼ðñ_ñ¾ñ@òÉòXóÎóQô¿ô9õ¯õCöÐöl÷øœø.ù«ùúuúÓú1û”ûü…üõü[ýÕý:þ¥þÿþ]ÿ´ÿb¸hÙA”Ù[•Ï@rÂêù #;IQ^`bXVNE/ èÓ¯’_,øÀˆIÝ“Nù”²/Úÿsÿ&ÿÏþ‹þ>þóý ýIýõüšüHüñû”û5û×úuúú´ùZùùø“ø3øå÷‚÷2÷áö’öIööºõ‚õ:õõÞôÕôÅô­ô”ô}ôpôNôPôPôjô’ô¿ôôôõ<õ`õ~õ·õëõ'öcöªöðöJ÷°÷ø„ø ù‹ùú¦úAûíû¨ü{ýSþ(ÿëÿ¦Uû§]#÷æÐι™ f ?  î Ò –f.ä/å¢_ ¼~2ã‚(½I®Ox’œ˜yR!뽋d;î¡KÜUÐ [{ŒŠ„uT9û ã » ‡wO÷Ë™pIÿþýüûú#ù/øC÷BöUõ}ô³óîò6òxñ»ðöï-ï}îØíAíÈìZìì×ë»ë£ë}ëhëXëTë^ëyëŽë´ëÛëìAììÀìí4írí±íûíRî´îï…ïôï]ðÚðIñ¬ñ5ò²òó óô²ô/õ¹õGöÓöj÷ö÷‡øùƒùõùhúÝúKû¾û,ü‹üéüFýªýþ]þ±þ#ÿŒÿ |ñ]Ë1‘òGžöM–Ó8g¾è9Ga{’¦·À³¤ˆxsllaN4Ô vD ¶SßaëvÃpµKõÿ’ÿDÿæþ“þ3þÔý\ýìü…üü³ûWûìú†úú•ù*ùÀøGøä÷z÷÷¯öAöØõqõ&õáôÂô—ôlôLôôùóÑóÃóÊóÕóøóô5ôMôhôô®ôÔôõ2õdõ‹õÂõñõ9öŽö÷“÷5øÍøtùúÔú†û?üýàý­þpÿ Õ7ÚÅ®žŒyU G 6 *  ø Ó…@ýÆ‘[2 Ùž]Ëw#¹${¾ÜßË»—rQ%ñ°f6´\ÜRªò7HC-ç½’ s V I ; !÷Êg<ñþÕýÈü³û§ú¡ù¥øÇ÷ôööTõ“ôÌóó@òrñ£ðäï*ïŒîïíjíòì–ìAììÌë ë…ëwëyë†ë¢ë´ëÞëì>ìoì¤ì¸ìéìí`í¬íîfîÁîïrïÚï;ð¤ðñwñöñlòéòhóáóeôäôiõðõ„ö÷¥÷;øÏøNùÊù@úÀú&û“ûïûTü¬ü ýdýÇý,þþúþfÿÎÿJ¸õlÒ3ŒÛ(k®ò(k›Ñî -Rz©ÌõûùëãÖÓÖÒÇ¿§†mM í½:çu›)ÄdFä‚(Íÿnÿÿ¥þDþÙýjýþü–ü+ü»ûRûàúoúú‡ùù©ø?øÙ÷r÷÷§ö@öÖõxõ)õéô´ô{ôQôô÷óÉóµó©ó®ó¼óÖóôô(ô;ô^ô|ô¯ôÝôõGõuõ¨õçõ5ö‡öîöd÷é÷qøù¼ùlú*ûàûœü_ýþíþ¯ÿm1ûÏ©‚W!úĢР„ o ` U :Ú¦i(øÉ¡V φ3Ý•IÏK§ò/:.Ì›_×±g? µPÀ4…¯Õåâ¿¢†Y) ô Þ È ±a, ؼ”sÿXþ&ý üûúùøD÷höõ¦ôÕóÿò,ò^ñ¡ðØïïnîÕíGíÆìUììÈë„ëPë'ëëëëë6ëZëƒë²ëàëì>ì{ì¾ìíUí±íîNî§îïiïÒïFð·ð*ññò›òó¢ó#ôÀôQõÎõ]öãök÷ð÷}ø ù•ù ú‘úûuûÜû>ü¥üýjýÄý*þ–þöþ\ÿËÿ1¤þi×=¡öQ•ÚN‰¼ä:V…«¾Ýò (40# ûðêïèÙ¸f-ñÃQûŽ"ž!±:Ël·_þÿšÿ:ÿÓþqþþ¢ý<ýÄüSü×ûjûþúúú¡ù)ù¯ø=øÐ÷n÷ ÷¤ö=öÕõcõüôžôSôôéóÅó ó}ó_óCó(ó ó%óGóyóžó¸ó×óãóôôLôƒô¾ôóô=õzõÄõ ömöÒöO÷ä÷ˆø5ùäù ú]û"üßüªýuþ7ÿøÿ²}:Û­~L%Ü» ¥ ’ ‚ o _2ýÏ¡g2Ô•Aï±X¢DÊB»!]ЬÀ¸c(ïŸg6ÍŒDçr÷zÝ%VrmV7 á»’ | X /  ྘xT/Õÿ°þŒýlükû`úqùoø÷¡ö»õÓôôó óPò‹ñ¾ðüï2ïrîÉí7í­ìBìáë’ëPëëêêÎêÇê¿êÍêÙêúêë;ë]ë‹ëºëôë?ì‘ìÜì@íŠíâí6î˜îñîiïÐï9ð£ðñ™ñòžò(ó·óPôæô‡õöžö÷µ÷;øÐø[ùçùnúëúbûÑû?üªü ýƒýÜýLþ«þÿrÿßÿTÊC·/ oÓ6ß7‡Êþ.X‰§Îç6Gkv}€sUA0&(%3÷ÔPÏœP“‘ нl¶IÞÿvÿÿ–þ5þÄý_ýíüwüùû‰ûû­úNúäùsù÷øøøœ÷0÷Íöhöö˜õ1õÃônôôçó¬ó†óeó>óóøòàòÍòÕòíò ó6óQódó„óóÅóèó%ôiô£ôÞôõ]õ¡õôõ^öÕöV÷à÷ø+ùÒùú3ûøû­ühý þÖþƒÿ:Íœn> Ð¥qB à ½ – € g DóÇ’b9 Ü@å‚ü„€ m²í:?=2ø»t8û¬yCý£JàYÀ MsvuS-ØÉ ª ‘ o Z / ï͵¦zY)ÿþýÛüÊûÇúÉùÜøî÷ ÷öõ+ôAó[ò•ñÂðýï2ï|îÁí+íœì"ìÃëië*ëíê»ê•êsêdê^ê]ênê‡êê½êÜê ëGë…ëåë-ì„ìÎìígí½íî{îèî^ïåïbðóðyñÿñò%ó¾ó_ôúô›õ+ö³ö@÷É÷Yøæøsùýù†úû‡ûüƒüôüký×ýBþ²þÿ•ÿ÷ÿdìnã[ÊD¥j¿^­ì'O‚¤Áá1>]d~ƒ†ua9# þçâÁ¥‚IɈGþ¢8Â=¬7ÊeµKÝÿhÿÿ—þ(þ½ý^ý÷ü‹üü¸û=ûÒú`úúšù0ùÌøSøç÷t÷÷¹öWöìõ—õ%õÍôrô-ôüóÒó«ó™ó|óTó.óó óó,óFógóˆó£ó¼óØóûó!ôPôŠôÆôõ8õyõ¾õ ösöåöm÷ø¢ø?ùÖùwúûÈûwü-ýÝý™þ<ÿëÿ’N ؤpLñÌ‚@  Ö ¬ „ l ?Û«oBÞ™Qù›*­)©.½3¨ `«Þ::%ø¸9¸ˆF¾_ýzøZ¸÷/þͲ”yh a I 2  áÂ¥’yZ?ðþÂý”üûrúù“ø•÷¡ö¥õµôÄóÛòòAñzð¬ïÝîîbíÂì9ìÇëjëëØê—êOêêíéÝéãéóé êê/ê@ê\êŠêÅê ë\ë°ëìWì¤ìöìAí£íîŒî ïïð’ðñ¯ñHòçò‹ó*ôÀôWõòõyö ÷•÷*øÂø_ùøùúûšû&ü üýšýþ‚þðþUÿ¿ÿ5ª,®*¨.›`Ì)„ÍJy¢Ëë .Rn„Ž£¤ªŸ˜ŒjG*íÔ¶œs? É‘Mñ5À4²*µBÝy§ÿ:ÿÎþRþÝýrýýŸü?üâûwûüú’ú%úÁùYùøøø%ø°÷>÷Óö|ö ö³õIõôôšôSô ôÓó¦ó…ódó?ó#óüòÞòÉòÉòÊòáòþòó;óYówó¡óÕóô0ôkôôÞôõXõ¢õøõjöäök÷õ÷“ø ù®ùMúðúŸûGüý¤ýRþêþšÿHøµ|E ÑŽOÆN  Ü ¬ ‘ b &îÂY!á‰)Ío ¡ƒùràI©þ7WuƒlN+ñ¹o,ЉFÿ§6Ä)»ã"î Ú Ê « Ÿ ŽiW9% éÑÿ®þ™ýsüdûYúVùjøj÷zö{õ‰ô©óÃòéññXð•ïÝî*î‚íììXìâëoëëÍê“ê_ê6êêüéééíéõéêê2êSêƒê´ê÷ê5ë~ëÁëìdìÈì)íŽíÿí~îÿî€ïüïðñ™ñ9òØòóô¯ôFõÙõqö ÷¦÷=øÚøwùú·úIûÒû^üáü^ýäýkþèþ\ÿàÿTÒKÌQÎNË?»!}Þ.x¾ú0b„±Öì$,79L8( 麙hJ"̦j.å‘:Ù˜¦0¯+¿Oáÿwÿÿ¬þ.þ¯ý&ý¡ü(üÇûuûû±ú;úËù\ùõøˆøø·÷L÷òö›ö@öìõ‘õ6õ×ôô;ôôÈó ó}óaóKó)óóëòÝòÓòáòöòó8óWósó—ó¼óïó%ôpô§ôÚô õEõ…õÍõ&ööùös÷ô÷pøù£ù;úÑúfû ü§ü<ýàý„þ.ÿÊÿu$Ú€;©cÍ~.ᘠM  Ò š j &î®k%Ó‹1ÄKËA¾!–nñJ»U™ÜHmsoI%ô½y4õ·hÊ_ÖJ»c•Æìð   ! ùâ©ÿ›þ‡ýxüsû‡ú“ù˜ø’÷¢ö¿õÔô÷ó)ó\ò¦ñçð8ð‡ïáî>î¯í'í¸ìSìøëªëcë+ëøêÕê®ê—êƒêê’êŸê³êÌêöêëJëë»ëìRì¦ìíeí×íMî½î;ï±ï*ð°ð:ñÕñlòùò–óô²ô:õÕõvö÷ ÷>øêøŠùú«ú3û¾ûGüÕü_ýäýiþòþÿ|}„ùsð]¬ù?ŒËû2\‰³Ìíø66>7?.结r@!þÁ„@ú­W?ÁXÐ_Ýjÿ’ ®ÿAÿÍþYþæý}ýýºüBüÍû`û÷úŠú(ú¿ù`ùùøø9øê÷÷.÷Îö}ö&öÔõ”õPõõÜô¥ô}ôKô)ô ôìóÕóÄóÅóÆóÑóÛóêóþóô<ôcôˆô¹ôàôõOõ‰õ¿õûõ=öŠöàö9÷—÷øsøãøgùäùoúøúxûüˆüý¢ý4þÒþjÿ§Iè“1ÓoªEá&Ál ! × € % Ï o ©IÌcçjælèV¹. }ß?ƒÑ >]u˜µ½Îǹ™s`BȇCë’EËF´"˜ô?‰Éì< b v ‰ ° Ðë"%'7GXcsÿŠþ–ý¬ü¹ûáúøùùHø|÷°öéõ"õuô½ó ókòÖñ@ñªðð•ïï²îUîîÉí•í^í-ííÛìÒìÅìÉìÅìÝìèìüìí4ígí—íÏíîgî¼îïtïÌï&ððöð^ñÊñ>ò¿ò7óÈóQôÌôJõÒõböôö÷øø'ù³ù>ú¿úCûÅûHü¾üJýÅýHþËþEÿÅÿHÂ8¢ ‰ÿlØO¯ÿO£ó9‡Èø1Nk|—¨¬»ÀÇÉ·³£•~cHüÍœb#å¤a ­Pó…«;ÇSæy ¦ÿ=ÿÙþjþýý–ý5ýÒüqüü©ûBûåú„ú,úÊùmù(ùÑøø)øÛ÷÷@÷ðöªöaö)öòõÀõ™õkõ\õIõ)õõõ õ õõõõõ(õ<õSõwõ—õ´õäõö?ösö´öïö3÷p÷¾÷øSø¢øùXù»ù&ú¡úûˆûüyüóü‚ýñýzþÿ—ÿ'¼B¹4¯3«BÃLÊOÍFËNèt Ÿ   ƒ  y ö iÒ;”öS²sÈ I‘Çñ<bo‡‘•ž¢¿Â¨’q\7è²kÈiô‰¢Žõ V ¨  C ž î > yÂH’ä(iåZ”ÿÜþþ_ý›üíû4û‚úËù ùwøá÷H÷ºö*öŽõýôsôóó†óó¹òYòõñ«ñ^ñ%ññðÈð¥ðˆðnðaðGð<ð3ðFðJð^ðpðð®ðÉðôðñQññÉñ òMò•òØò/óóÖó6ôô õuõÜõQö²ö0÷•÷ø‡øõøbùÏù<ú¦úû…ûñûXüÆü9ý¦ý þvþéþcÿ¼ÿ%Œø]¼}Þ;ŸóHÕb•Íù'Mn‰ ©©·ºÆÃÀ±«•ˆcJ* Ü®p>ë§]Âr#Ép ÁWò‘)Îÿkÿÿ´þWþùý«ýTýý¨üPüúû¬ûYûû²ú\úúµùeùùÕøøQø"øë÷°÷~÷U÷$÷úöÖöºö§ööƒöröcöSö_öUöeököuööžö²öÂößö ÷,÷W÷…÷›÷·÷ç÷ øfø±øù5ù|ùÀùûù;úšúû‹ûùûbüÊüýrýÝý6þþíþ\ÿÓÿ@ ÷S¶‹mã`Ö6”ŽléS¥ñ7  Ï  ï : j ¬ î ! L — ñ 9 q ¸ ò Ps£·ÙéþêîçæáÔº•f9ó Å ” j 8  ¾ k  È ‹ 8 Æ a ø Œ  ’ ‚äI¹9±"“tßÿRÿÌþ^þåýgýãüeüÞûVûÚúsúú±ùFùÑøpøøÀ÷h÷÷Éö„öCö öÓõ˜õtõTõ>õõñô¯ôúóÎòòdògóBôˆôSô7ôbô­ôÝôüô6õ¯õ-ö…öÆöýö:÷^÷n÷}÷÷Ÿ÷Ã÷ï÷?ø¼øjùúú¹úÜúû|ûýûü ýoý¶ýÞýþ>þ‰þíþ9ÿwÿ®ÿøÿBÐ Gà;á#Et—ÕH]r³·ÖãÝÐËÅÆÙú÷ßÍ«D;JbJñÅjG, ¼KÞª°2¬= ïÿ ÿÿþcþiþfþþ¦ýý¹ü·üÄüü÷ûGû ûWûžû:ûtúÈùÔù=úyúüù ùoøÄø±ù.úŠù9øl÷á÷¾øùñøØø–øø¸÷¬÷ê÷vøïøìø¾øšøÁø(ù;ùãøfø]ø ùsú@ûjúõø±øïùPûRû;ú‘ù<ú€ûüÍûïûTübü•üuýdþ:þƒýLýëýŠÿë8G ÿÿöÕ³7VÎÊ’C½ÀÜnòšçÚÌXyZ'v†‰]= ˆ t n ª ¯ … L g ¦ Á ¤ ¢ Ò @ ¨ ’ * ú * 3 ç Ä  ? 0 Ò - ‡†Þ1 5 Þo介i,Ñ‹d3ç ¦\›CçÁt†4Ë{1âÿŒÿÿ•þIþþûýºýxý.ýîü¥üIüüûûíû¸ûbû$ûûûÜú¥úúÃúÄúqúúôù1ú€ú‰úWú6úVúoúZú?úvúÑúòú¼úTúXú±úßúÿúËúûùîø°ø‘ùÃú%û¼ú[ú¿ú¸ûŽü•ü^ü~ü¿üöüˆýLþûþUÿ\ÿÕþ/þþý0þÆþÿ"ÿÿ7ÿ¤ÿõÿðÿÒÿðÿ{!_Úºç})EhNÊQ™ïµ)MØ%›â Âo S¾ƒ¡©v¶„Õú ¢¸,s’¥x¤M‡ÿÿHè7ELºÿëÿ[­¨:°ÿ ÿþšþiÿQ9oÿ|þ~ýÉüªüoýªþÿ þü ûºû&ýìýMý"ükû/ûKû^ûBû`ûžûÝûmû©úuúËú·úwújú‡úÝúîúMúRùEùtú~ûûúÃù1úKúúÐùÿù³ú@ûûmúÌú/üHü‰úéøÞùjü¥ýƒüÖú1û)ýßýü(ú¦ú€ýîÿ1ÿBü—úÏû‰þ¬àéþÅüÊûòü±ÿH=˜ÿ®ýÖþ@Ðh+ÿÔÿ·®¼T{í}ì/€ÿ—« £b?çEI±¯­-·µÀ,}GlZ‰'f„¤Ï”{·î å[_Þ ýú3ÜȪ™s)ãu9ÅãGz†ïYò ÓßžÁ»ˆ L5³Ñ§kgÿÿ«DVºþ)þ.ÿ‡Håþ*þÊþuÿòþÓý¿ýÿ'wÿbý"ü¤üôýþþ>ÿ”þ;ýæûÀû–ýÒÿ[þÙüîüÂý¦ýü\ûÁý| Eþ¸ùZùùýmcû ùÉýÖºü¿÷ún ìuûÞ÷Åû"ôd¨û†úñüŽÿÉ‘Kȧþìúû¶P¬àýÍûüþ"Õþ+ûzþàl9üRý˜D‚Aÿnþºÿïÿ'ÿµ`ÊæýÂýQùª°ÿìýÿAgS bVÿnÿj?ýcüÝÿ§ÌÈSü_û"ÿ]!Fý¦üNé×ýñúGý¾°éþžú0ú'þolÔ ýBûjüïþ0äþrü©ûðý½Ìüfû€ý¹ÃÿÁúâ÷¥ûH'Qÿvøa÷KýQÉNüÔög÷Åü–=‹úr÷CùwýŠEeþ-ýdýIþÀýÑûZúÖûÀÿ¡óÿýžûíûKý?ÿŸTBþ?û`úFýfi{ÿFýþ™þ¢ûrü<XIáþÐþèæü¯ú¹þ ÍúúÀú1ÿÍý6Lþý ÿGff_Ërxý¤ütزþnù»ýfæD³ü€ü^xÇúüÿªëªœDýrþÜSdnþöü–“ÿû¼ýQ=1ýÈûúþ/l ×Kÿðùü)T‹÷ý€ü{gÕSÿaüHþygôúÒÿÿ°ýpþGAKÿcý\þÃqÞÿØùú˜ìH±ü8ú[gBþè÷,û™ç?ýüOÿŒCÿ›þV]ÿ°ü‘ý}ÁGýßúíûUÿ›WàïÿCþ³ü ý2lâþnýÇýƒÿÏL äý¥ý¢ÿDœÑþ§üPü$ÿv/5Õú)øüŸd p"úúõÆûçÖòXýÿSüJûÇþÀørû)ûóþÔ\Np‹ ÿìûþúÆÿvæ•þùEûD°þóù™ýÿT"ø·ó^ùAB _Fû>÷#ü8ØXýmûZÿ÷äŠüÐö^÷$þ%ÛÆøöÿûq&öý”øúCƒ&çûTõi÷ÍæÆWü„ø$û[ÿœÿÕýžþUÃ[ü”öéùVÃøÛöhþ<‹cþ¿ø°ùOÿWvÿRüzü8ÿõÿsÿ®ÿ½wxü;ùšû'±|±þüÚûwüæýf[\¦ýÕúÝýD+Öÿøû‚ý)íÿÔþ¼ÿá$H;úÏùQå cþiýçìßý8ù¸ûã@ã~ÿ¬ü$ÿÔ2¥ý›ÿûæö þjÿâÀwý/ûéA œ äÿc÷Dù‡Àˆÿ<ü¢þ;¢“ÿ„þõȤ¥ýŸø‹üÃlÛþ,ý¬IûýÿßÄ#üí÷Ýüz- øÐûø·ý¸ðá_û÷üRè è¸ýÏ÷¤úÍ9Åÿÿ˜þèÊÝÿCþ+º›["ýÔû¸þ«%ߢÿ¥üWþ]âIôû'úAþÊmüÊþ§þ½ÿü˜³!ýjüÓÿÇ®‰Ÿÿw¤ÿ‹ý«üpÿ´¸PlüŒûGÿlòÿ6þ{ÿàÀÿxü‚üÒÿЖßý5üþèIWþûòûÅþ³ÿü/ý˜ºUÄþmú‘ú;ýúþ2ÿRÿMª§ÿËûšúÅüJ=΂ýürýoÿ ÿýüRýmÿôÿ®ýWü·þ¾(yÿƒú¦÷|ú§1¥Wéû<úGünÿ‘ÿKüû4ÿÓƒÿÒøø»üÏ[1þkú½ûk}›¸úŠø¿ý‹Meüùfý!–½þDùØùÊþ×õÿÅýõý ÿ9ûøïûü‘@$þLú#üAÿ©ÿ>ýäü‡k½½ÿ³ú¹ú)ýÉÿ2Jrÿ3þ(ý®ý¤P(þç÷Y÷ÿÝR û½÷¨úðþþÿ`INœ}þ ùRù*þ÷M&^ÿ ÿ8 U4:d4ÈÿÑþ¨þ°AxTþ°úú™üšx> ×Ãý·øFù¬þr;_kýÿ{ýjýµý\þðÿˆÃe¯üîý蛯©þ`üäýNOø²¬ûÚø©ý  ³úÄ÷Ÿÿ R éùaú9ìéüAùêþ{p†û:ûÆuB)ÿÁþÅþ“*­°Q˜ŠýÙý§Æ| .L‡ýý:ÿ°©®Nÿ%u®dþþÙÿžÖÿ¶ÿ—kµþüGüóýOÿŸÂ'ÇLûâø‘ûñ#º!þÁüÐü—þìÚñúþ¹ý“ýzý£ýIþ’ÿõðÒžÿýüÀû`ü0þÇ~²ÿIýý¤ÿëŘý½ú-ûBÿíÿ_üiüÊÿ°¾üû‚ú5þ¤µÿïûµûHÿ1*Ìþú ù9ü–ÿùÿ@þiýGÿiþØ÷§ôÍøk§¬²þö÷B÷"û þY¸üzû4þ+óþ®û1ûÿ7„ýïùÿúªüJþ=Ú«®ýŠùJú™þhÕýyüoþA\þJúaù}ü€q þ¬ý£þ/ÿ(ÿ-ÿ>ÿÍþýpü9ýîÿ%ÈhWÿWý×û³ûbýÛ’Fg©þùØùm„û^ø0þk{ —òùöùb¶"—úÀöSüƒ” Å*¼ÿ™þüü þ/GX ÿ üpý‘S¢ü˜üg¡¼rúúÊûÐÐÀTšüµüp7¹©Ôýÿƒëpš¤Ü¿ÿ¢Jê ²ÿ¯ÒB;ý4úuÿ…× –Þþ>ûLÿ ¬=jü ý¯§ ¢*˜úü]yqÁÿ3üÿ€~ÓûOàìÿÿ egìÿ¢þ°þ{–µ6þ6üÿ¥Ð‡ëû)ü•$Å,þŠûý÷1Z üwù,üOùÌRÿ‘üÎû³üÿzÊsÿÆúeùXý審=û úFýùÿdÿ~ýPýÄÿÃ’_þQùø§ûf)½ÿ]þÓýQý þ*ÿ%ÿ^þý£ý%þ}þÿMÿ%ÿqþ¯ýTýý­ýgþCþFþíþÊÿkþpû³úgýÁÆrüèúTý˜ÿ¸þünûþÝ=ßþ*üü7þ¿þüù úAÿE«üÿø<ûeÿ-?ýüúõü¶ÿÅÿeýaûülý•ýÍüü°üþæþ“þ3ü¥ú-ûêûCýÁþ*÷àœúGôömÿÊØüÐö¶ùδFýUøáùÀš“û¤úþÊÿ¬ýÌýßþ¤þmü×úü!3>“Ðüaû(üYý]þ [Ùwþ üYþ-+hÿûVûßgj¨ÿbóšÿ üÞû"¯Z ‡ÿƒ²(õþûü¼þFìîxÐ"Ìÿ|[¢JA;ÿÉêùªe#ãÎcAUu ©ûàõ ‰A«\¿Ö‰{ò ¢™KÔì#8 Ó¯hy‘žôÿÅO|x´ÿ¤™Ùÿݘµ¯ÎþÉþ/'§ïþ²ýþyÿËÿdÿÿ‹þóýÓýÿýÕý.ýºüýðý/þýxüÀû¦û£û™ûüý’þ)ÿåýû*ú*û_ý—þþýìüÃý>þ§ýgüüðü0þnþÆý˜ýBþþùýyü|û ünýäþÏÿðÿPÿ\þÛýüýBþ„þ±þúþuÿšÿŠÿäÿ˲ÌþBüMûìüèÿJ°mþËü¤ü¦ýÿéÿÇÿÏÿÖÿÿ¨ýýþãÿñlõþ±ý{ýþ…þSþÃýAý!ýÐýáþÿÓýrü+ü«ü3ý/ý„ü‹û~ûâü9ÿÈèÿ«üEù/øú ýGÿ{ÿÂý«ûû£ü’þ4þ{ûñøÑøûèýÿ—ÿlþiüjúÕùûwý/ÿ»þÔüBûû§ýÿ©ý’úŠùÙû'ÿÄýÆüÍþ|ÿðüVù˜ø)üšÑ.Ôý‡üGþ>Ñü¹ø[ùþù ÁW{ÑýSûÃûÍþ[µQâß7^ þûü±ÿP®Oí6ëÅMK•9$ & õÍ6e_¡ > 0 ~  õ 3 ÕãD“  Þ 5 ¦ @ …Ë—‰ ® „ ˆ ˆ  Ã¥„Ñ­ƒÍW\^ÖTXSÄÀ÷Ì(_Úÿ þÈü§ü;ýàý þÓýxýýeü¤û=ûûåú:úgùûøù¿ùúûëúÔù\øY÷)÷E÷w÷Å÷ø§ù:ú ú(ùAø•÷l÷øGùüú?ü˜ü ü?ûÆúßú ûeûÄûhü"ý¾ýþCþXþ+þîýÔýæý#þnþúþÜÿ¯>QýbÈÿaÿaÿ¼ÿ¢^ÿºQVãÿ¢ÿºÿF,ðR8±ç5ƒÿãþÊþ1ÿÔÿâÿÝÿ/zMeÿ*þ÷ü#üµûðû²ü_ýwýÅüÞû/ûñúÇú5ú=ùKø÷÷tøùÍúÀû:üÝûƒú¨øX÷÷¸÷Ùøúàúûwú”ùÈøKøö÷¾÷ß÷'ø¶øšù—ú"û,ûÝú†úoúYúòùÁùOúeûxüýý‘üüýû@üPüåûEûõú—ûýäþÖÿ$ÿzýü4ûnûÏüùþù¶Ϙÿ‹þÚý9þzÿ\ê^ôe2ßņWí!ëªs‘Q8íTäGÍÙŒWë^ æ ô J $ ÿ é § V ú Ì*üR6ŒW3ê sd]\$W¹”)Ö ç a B L † › J ¿ Ï ± leµSJq^::ëÖÿÌþñýIý•ü°ûÊúäù ùHø…÷Ñö2öõîô`ôâó¤ó†ó{ómóZó0óØòtò@ò$òFòaòŽòœò òžò˜òzòNò4òWòÅònó ôªô*õ¹õ‚ö÷™÷5øãøžù1úÁúqû@ü&ý÷ý¦þ8ÿ¾ÿ6ž Žb¼2¯2´/™Þ I”Ù~ ŒÁ¨f(ý¬<ϼîÁB¥‡Õì>âÐÅ‹f›ÿÞþ0þ—ýØü(üŽûíúú5ùMøb÷…öÕõYõîôƒô#ôêóèóâó«ó7ó¿ò“òÁòúòûòÀò˜ò‚òòò@òò-òŠòñò+ó&ó3óqóÖóô,ôŠô8õöÆöo÷!øàøzùÊù úhúÿú¸û`üÒüý;ýYýoýµý$þ´þ1ÿÿÉÿñÿ`ꀄúb³ó&ZŒ¤ŽZ ô<}£êsUÝÁ©y  ´ Y  • W j é ­ t >ø´A®ÔîM¬O_r)è·[$£‘ 0l × œ ã ø  É  (Ò] âåqðÿUÿ€þNý‹ûyù{÷„õöóåòRò"ò;òò¢ñ¾ðƒï!îÄìºë,ë=ëóëúìîãîWï!ïŽîÚí0íèìí·ísî+ïÒï%ðNðið„ð¼ðñ³ñ·òôºõJ÷¬øÉùúRûìû€ü=ýPþ‹ÿÊ3(çp±ì5„ãQÆD®" • õ Y œ â > ¯ D A    ç ”  ™  ` ·.«+¨[ÃR‘ÅíÿAÿÒþ`þçýZýÆüü'ûKúmù}ø‚÷öõçô'ôhó»òòEñðëïXïãîîFîDî_î§îíîDï©ïìïð"ð1ðCðsð–ðÍðñ\ñ²ñòñ+ò_òwòªòó–óKô"õøõÜö¢÷Yøù£ùBúåú‚ûü«üQýõý}þÓþÿVÿ˜ÿÌÿJ¢lôw ¬f £1¦ ãÃîEx¾ C f ~ « û i É … '  m›IùÐf"×€^ó`Ç7ŠÈçöÑìѱËÇÒáÖu}4„ztt ¿ 9 Q äqm@ü‚ÊEÈÿNþýüEû2úÎø$÷Rõróiñvïÿíí“ì[ìWììÆë_ëªê¿éàèMèèFèìè¶éÃêÃë”ìùìúìàìˆì^ì5ìMì–ìíÛí¤î›ï€ðbñtò®óõuö¾÷óø:ú¦û÷üþ&ÿFu¬É¹˜p3ÝiÝZ ã | Ü > ’ Ì = k ®  ± 9Ë-X_:ç[¹ ú O ¨ ó A › þdº÷9dŠ“›°ÏÿÿNþœýêüeüßû@û›úÝùùUøo÷qömõŽôºó ó>ò†ñÛð@ð ïÿîpîýí¢íYí3íí íí1íRíŽíçíJîµî$ï©ï@ðÈðBñªñ÷ñHòvò‘ò¥ò±òåò$ó•óôÞô¬õ„öS÷øàø­ùsú$ûÌûzüýŽýþýSþ¸þÿuÿÃÿLwœÀé\£€–8ð2§Y”®µÈËÈÉê+a® ž H ó ¶ ¥ ‹ a;39ë£V{øu7ó“>±X¾Ù)RŠˆ˜®¤’À{¹úùÜÈ  ë  . w:ytJ'´Øÿ3þ’üûMùŒ÷¹õùóQò‹ðßî:íìßêê•ééèGèûç¨çVç0çç@ç‹ç÷ç€èé¯éêžêë~ëÒëì8ìuì¥ìÒìíZíîïîðkñüò¬ô{ö'ø»ù*ûrü«ýÒþÔÿΝµ¥rF¨. À D ·  m ® ú 0 z Ò * ˆ æ Xº =Y^%Þnî X   Ê û ( 9 Rx¿"~×6£D§Òÿæþ þ:ýjü³û ûuúóù]ù¾øøj÷ öÃõÛôðóó0ò:ñjð¯ï ï’îAî0î.îPî€î¸îûî/ïYïtï ïÖïúï1ðkð³ðñ<ñiñ‰ñØñ÷ñ&òPò–òèòIóÅóNôÚôuõö´ök÷#øØø’ùBúãúoûùûküÔü>ýŒýËýòýþþ8þOþ…þ®þàþ(ÿŸÿ3Ü™N¬;Ï6“Ú(ir—¢Ëû:‹æGÄ. ¢  ˜ ? ð Ä € ‚v•ˆD=Ú[×ÅÿL’äG:…Â.¦ÆÖñ±9¸®kêMT\” š ½ ? - õÒrûJG|©)ÿŽýèûlúÅøC÷¿õYô$ó ò/ñ_ðöïcïöîwîâí;í†ì ì|ë-ëáêÚêÚêëdë¨ëì‚ìþì_í¶íî(î,î îííßíõíîxîÿî¯ï‘ðœñÚòô%õ7ö2÷"øçøù.úÓú|û%üÁüný#þ÷þÌÿš„_-î‹%¥…àMûKµ c ¶  z È - H I ! ø © E Ü q  š:Ù‡C ŃBæšgÈ"ƒáH¤ÿ ÿrþâýWýÐüNü¿û*û†úÓùù>øi÷›ößõ:õ¯ôFôãó´ó¢óžó³óÉóëóô ôôôôøóÞó¹óŒódó.ó óìòÞòÐòàòó$óaó¡óÞó$ôeô®ôòôFõšõéõ9ö”ö÷÷ü÷‹ø-ùÔù{ú!û¼û@üÃü$ýŽýÎýþ_þ¹þÿjÿÉÿ1”ðG¥÷\¯Ošä(i¨ó<éXÈ2¯“èN ¤  s ¤  Q µ  „ ü T ß BÃ*z[Ô €åå1)-™,K€tt „ † ç [  ù  g ¸ | Í  # =  ´ $ ³  T p•ÊA•–7úÙ´p8î /º6«ÿ ÿ…þöýsýý«ü[üü¾ûsûûºúJú×ùgùçøiøø¥÷U÷÷Êö‘ö`ö6ööòõÙõÀõµõ«õ´õ­õÈõÛõûõ'ö;öiöˆö°öÝö÷9÷i÷µ÷æ÷ ø[ø¢øäø!ùdù—ùÔùúYú’úÊúÿúKûŒûÒû%ümüºüúüTýýÎý þJþ”þÌþûþ*ÿHÿmÿ–ÿ¯ÿÓÿÝÿÿÿ&,;L_x†Ž“žœ˜s_E0ìÿÐÿ­ÿ›ÿŒÿyÿqÿaÿWÿPÿ?ÿ5ÿÿøþÎþ®þƒþiþFþþåýªý{ýFý ýÙü©ümüIüüþûåûÅû°ûûŒûxû]ûKû)ûûûúÕúÄú¦úŠúfú[úHúAú0ú.ú6ú=úPú\úvú‡ú¨ú½úáúøú(û1û@ûLûhû‹û±ûÑûòûü?üjüŽüÃüþü<ý{ý¿ý þ]þ·þÿvÿÜÿ>§‡÷`ÎB¿2²%´=ÐVßu ˆ  ¦ ) ® > Ï ] ø }–p©å;Zn}Œš­½Ùú2Omx~|t]<Àj¦4®!¢%ž ÷ k É  l Æ ü-\–Áð2ƒÚ]Ï`ä‹¢ÿ5ÿ¸þ,þ£ý ýfü°û ûUú´ùù„øÿ÷†÷÷“ö*öÑõ‚õ5õõÀô’ô[ô/ôôçóÏóÊóÁóÉóäóûóô-ôTôzôžôÅôïôõõþô÷ôåôØôÜô×ôÒô×ôãôýô#õWõ‹õÇõöõ<öröºöíö&÷a÷š÷á÷ø]ø™øÑøùWù¤ùíù.úsú·úûFû‹ûÛû!ü]üüÓü ý1ý^ýý¾ýçýþGþtþ«þßþÿIÿ}ÿ¨ÿØÿ ;k”´Óù #(5-õàÁ©”uT;õÿÐÿ«ÿÿoÿRÿAÿ ÿÿûþúþùþøþÿ÷þëþØþÈþœþkþ9þþéýÂýŒýiýBý)ýý ýýüüõüæüÖüÊüÐüÈüÐüÒüâüëüýý+ýKýnýŒý¼ýøý&þcþ™þàþÿXÿœÿÜÿ(j°úF©€ùv›8Ñp¼;ÍR ß t ¢ = Ô o þ ”„èEŒÝQ‰¾é :[„§Ðç**$ã—?àeÙL»%Ž ¢ + ¸ < Ä 8 “ ë - Y¬Ü Q‡Ú7¤”ÿÿ þ.þÄýJýÐüQüÒûJûºúúˆùóøjøÎ÷I÷ÓöRöö¸õ~õ6õõÔô¡ônô2ôûóÈó˜óió^ó>ó9ó<óAóNósó–ó¿óëóô?ôEô[ôbôrôuô€ôôŽô§ôÄôâô õ6õzõ·õùõ4ö‡öÉö÷^÷¡÷è÷'øqø´øùCù†ùÒù4ú”úûsûÙûEü¨ü ý]ý¯ýñý3þiþ©þÍþÿJÿ•ÿÙÿ _¬ø2r¯ë!W}¤Éßý $8N[eee]O='͘X¼o'á¥e(êÿ·ÿtÿ<ÿûþ½þ{þ5þîý£ýaýýÖü’übü*üüËûžûrûIû!ûüúÐúªútúLúúáù©ùtùRù/ùùòøêøëøù!ù;ù_ùƒùµùâùúDúrúúÎúÿú:ûvû²ûùûKüœüý^ýÇý2þ¬þ"ÿŒÿ÷ÿhßaù{­Rî•Cñ™Jñ­ `  Ä s Ö {/ÄYÓNÁ l¿~À G–æ+p¡× 6CI=!÷²Rì}øuò_×C¶#„Ù*v ½ õ / f ˆ ¢ºà6nÅJžñC•ÿüþYþªýýQü¦ûõú:ú}ùÖø<ø˜÷÷~ööƒõ$õ·ôVôôÎóóHóó½òtò<òòÚñ¤ññxñoñtñ}ñŠñ¡ñ»ñÓñíñòò;òCòZòiòŒò£òÉòêòó9óqó©óíó1ôƒôÑôõaõ·õöWö¯ö÷W÷£÷ø÷Iø¶ø ùwùåùMú¿ú(û“ûübü»üýaý·ýþVþªþöþMÿ©ÿpÊ7‹é3ƒÑGs®Ú ,Idx™ªÐÝö÷ñÝͤ‚RÖBºt0ë¤gËy%Íÿpÿÿ½þaþ þÅýlýýÌü{üCüúû¼û}û=ûû¾ú†ú8úüù¶ùsù+ùéø¡ø{øBøøú÷ç÷Û÷Ï÷Ü÷ß÷ì÷õ÷øø2øNøiø‡ø©øÏø ùIùuù¸ùú\úúðú3ûûëûMü¬üý~ýíýjþðþyÿIà—Gû¯eÍ Ìu  ¦ S þ ¯ Q ®bú™6²xà8žêL£XªÿS—Í#CG6 Öˆ'¨$™€÷läS¾&„Ïÿ 9 u ± Ï ó4\ŠÂP¦þG‘Þÿ'ÿuþ´ýÿüFüzûËúúfù»øø†÷þö„öö”õ0õÔôtô ô´óaóó òPòüñÊññhñPñLñTñBñQñIñdñjññƒñŒñžñžñ·ñ½ñËñÍñçñüñòNò…ò»òþòBó…óÏóôjô·ô õQõžõéõ1özöÒö"÷…÷ß÷@ø°ø"ù‘ùújúÑú3û˜ûüaüµü ýlýÉýþmþÌþ)ÿÿòÿT´qÈV™Ì8_Ž»Øþ<`~—«´º¬˜‚j5 ×§h-ô¼@üÄw/ä£:Üÿÿ$ÿÃþhþþÄýý,ýäüžüRüüÑûŽûOûûÀúmú%úÔùùNùùÇø’ø^ø0ø øå÷Ê÷»÷±÷­÷ª÷¬÷ª÷¨÷¬÷°÷Î÷Ð÷â÷øøOøzø¨øÓøùZù“ùÚùúmúÄúûpûÔû0ü’üý‡ýøý}þÿ©ÿ9Òf ¬Uù£Uù?ì… · ] ¤ K í   GꄤŸjÌ,’ñK©ZªEq§ÐéóØÆ”Sð‡” vïVÊ&„Ï A n Š £ à æ8x¨ë0‰×,~ã9xÿºþöý5ýqü²ûôú7ú‰ùàø5ø¬÷÷¥ö-öÆõaõõ°ôUô÷óœó@óéò‘òFòòÓñ®ññzñ}ñxñ{ñ‚ñ|ññ˜ñ±ñ»ñçñäñìñõñòòò@òhò—ò¼òåòóOó™óØó"ôjôµôôô:õ†õÅõölöÒö*÷u÷Ù÷-ø˜øùjùÉù:ú™úùú]û±û ü\ü·üýjýÅý'þxþ×þ7ÿ›ÿïÿS£ýM™ÐKx«Ô.T‚§Ò÷4UapmcM;Û´‚Q鮂AþÅ„6á’Aêÿšÿ>ÿåþ˜þGþþ¹ýsý1ýòü²üuü6üêû¤ûWûûÃú{ú-úçù¤ùbù%ùìø¿ø”øløQø7øøøøøø øøø(ø4ø?øJø_ø|ø©øÈøòøù8ù^ù—ùÉùúLú“úáú+û€ûÝû?ü§üý¡ýþþÿ…ÿ ˆ ˜*±;ÈYá}"Ïeû1 Á [ ê x  ¨ 5 Á TãqðbßH³mÎ5Ü(p²ú(]´ÎââäÁ¢f¶KÕYÒ[¿)ŽòW©ò > „ Ç  K  µãMˆÐ_«ýM”íÿ8ÿ‰þëýGý­ü üaû»úúùöøWøÚ÷h÷óö„öö®õJõìôŽô:ôèóóRóóØò²ò‘ò~òpò_òbòPòTòRòTò\òbòkòòŽòžò´òÈòáòó-óaó‚óªó×óô<ôxô«ôáôõSõõ¹õõõ(öjö°öÿöO÷¨÷ø`ø¹øùrùÐù+úŠúßú2ûˆûÕû,ü…üÖü/ý|ýÏý#þ„þÓþ(ÿeÿ½ÿR’ÐAm£Êÿ$R„±Ûÿ?\k‚˜}uZF$ 䵋P!ïºF Ç…;¸ÿyÿ7ÿóþ´þvþ<þþÃýŒýQý#ýÑüŠüJüüºûxû0ûÿú·ú€úRúúðùÄù¤ù‡ùkùPù7ù)ù ù'ùùùùôøçøâøÚøåøæøéøøøùù0ùNùfù’ù¾ùêùúNúŠúÍúû^û›ûäû0ü†üÚü5ý‘ýåýNþ±þ ÿ|ÿáÿW¹"ž  {úoòoü€“#´2 ¾ O × [ á h î i ì bÌ.Ší4€Ô/z¿ S›ÝH€¦ÍêôöÛ¯s3Ú‡«5®&¥‡æ : • ä 1 p É  `²Q¨÷U²rÌ*‡éÿEÿ°þ þŒýûücüÚûGûÀú@ú¸ùEùÌøuøø÷/÷ÃötööÊõrõ.õäô¬ôyôUô/ôô ôùóñóëóÞóØóàóÚóâóéóñóúóô ôôô2ô?ôXôyô™ô¹ôÔôêôõ)õJõnõ•õ½õæõöBöxö¶öìö6÷w÷Ê÷ødø®øöøKù™ùëù3úŠúÌú'ûbû°ûñû;ü‡üÍüýVý ýäý"þkþ¦þìþ,ÿmÿŸÿÓÿ<u«ÞDp–Æå -No€”š¤Ÿ—}hM5öË¢X0ýКj6Ïÿ™ÿaÿ5ÿÿÖþ¡þpþCþ þÜý«ýýQýýíü³ü‰üUü+üüÙû¦ûxûJû#ûûçú¹ú”úrúVú.úúúéùêùÎùÇù¶ù»ù¶ù³ùÁùÊùÕù×ùãùöù úú'úFúVúmú„ú úÅúæúû>û‚û±ûóû,ü}ü¸üýIý”ýâý*þþÓþ"ÿÿàÿB°€æ]Î?¶*¨Štè\ÔG·0 ¥  | ø d ¾  ~ Û 7 ‡ í 1m¬÷;{¸÷<s­Ø#IWZKB2æ­g Íc‹'« 0 ¬  ‹ ù d à - ùhâQ¾5³8»AÉOËLÊNËÿXÿÝþaþåýpýûü„ü ü¥û2ûÎúaúú®ùhù ù´øsø&øæ÷¨÷z÷B÷&÷÷ßöÄö«öžööqöXöJö6ö)öööôõæõ×õÆõ¿õ±õ¤õ¦õ¤õ¬õ©õ±õ°õ¾õÆõ×õçõúõö5öPöiöŽö¸öèö÷F÷{÷¯÷î÷øcø™øÖøùPù‘ùËùúAúú½úÿúDû†ûÃû üBü‰üÄüýKýŽýÙýþ[þ¤þßþÿ_ÿÿÝÿS…¸Ü7dˆ¨Çæú /6=E@?0&ìÖÄ­œzgB#çÁšyM)öÿÉÿ¡ÿvÿIÿÿóþÀþ˜þpþEþþîýÈý™ýzýIý'ýûüÛü®üŽüpüAü+üüèûÈû«û‹ûqûYûAûû ûëúÖúÉú±ú­ú•úúúˆúšú¡ú™ú›ú£ú³ú¶úÇú×úìú û!ûHûjû‚û¥ûÆûõûüPüü³üíü,ýhý«ýñý8þyþÉþÿoÿÆÿ({Ó)ŒæM´ lÒ5“÷YÀ#„êM¬mÊ € Ð , ƒ Ì  g « õ - n © ë  Y ’ Å ü )Qu“±·ÐÒÓǾ½“f3ÿ ½ x + Þ † 0 Þ }  ¢ F Ó _ êo’ª<Ã_ö‹!ÊUí“&Â_þ”/Åÿcÿ÷þ›þ:þ×ýtýýÅütü üÒûŠûEûû»úyú@úúÅùùYù.ùûøÕø¬ø‡økøFø%ø øî÷Ö÷³÷£÷‹÷w÷a÷A÷0÷÷ ÷÷öêößö×öÑöÒöÚöÛöêöøö÷÷-÷@÷^÷v÷¥÷É÷ê÷ ø:øfø—øÓøÿø+ù^ù ùÐùúHú…ú¶ú÷ú+ûlû ûßûüWüšü×üýUý˜ýàýþYþ—þÖþ ÿAÿÿ°ÿáÿ9Z…§Ëì +Hbv’ªÆÒÝâåàÞÑÊ·«˜†h]?'ëÒ°ŽpL"øÿÐÿ¥ÿzÿQÿ+ÿÿàþºþšþvþ]þ5þþñýÏý­ý‰ýhý=ýýþüÖü¹ü—ütüNü,üüðûÑû·ûûˆûnûSû=û&ûûÿúñúåúÙúÊúÇúÂúÅúÃúÅúÆúÎúÒúäúèúüúûû&û;ûUûpû†û²ûÐûõû(üMümü–üÊüûü2ýlýžýÝý(þmþ¦þÞþ$ÿgÿ¼ÿJ•á/zÎsÅiÀ \ªüI˜å7ŠÚ-yØd¥î9 v · ð 0 b ” à ö , S ‚ Ÿ Ò é / E g t  z p ` \ @ # Ý ± € M  × ? ù ¡ S ô¡>Þ}À[î’$Çh ¹[ø™Có”<ã<õÿ ÿRÿÿþ´þ_þþÊý„ý;ýý³üvü6üýûÂûûZû*ûøúÎú¡úwúRú6úúûùåùÆùªù“ùˆùpùdùNùBù;ù.ù+ù,ùùùùùùùù ùù ù&ù4ùAùHùYùlù|ù—ù¥ùÀùÚùùùú=ú[ú}ú¥úÎúôúûLûwû ûÎûøû üXüˆü­üãü ý>ýkýœýÂýòý%þNþ}þ¦þÏþ÷þÿLÿsÿˆÿ®ÿÈÿôÿ)F]vˆ ³ÀÔÞý  ÿûëÝʲ¢‰gT0ùÿßÿ¸ÿ“ÿÿZÿ:ÿÿöþÕþ¹þšþzþ]þMþ&þþ÷ýÝý¼ý¢ý†ývýZý7ý$ýýóüÎü¶ü˜ü…ü{üUüCü(üüýûæûØûÂû³û®ûŸû–û’û†û„û|û‰û‘û„û€û‚û‡û‹û’û˜û¤û±û½ûÄûÔûâûöûü!ü9üNüjüŠü¬üÆüëü ý<ýZý…ý¯ýßýþ@þtþ¦þÜþÿQÿ‰ÿÃÿ;}µï*aÔJ‚¼ö1n¦á%[‘Î;v³ç&Y“Àú.Z‰ºß5M|ˆ¬ºÚéü $ > 6 A = G ; B 9 +    óÛ¸ŸzS,Ö£t5û¶q*á–Gªkц=ï­aÛ›]!å©n1ÿÿÉÿ—ÿlÿ5ÿ ÿÕþ§þzþLþþïýÄýýoýMý*ýýóüÌü»üünüRü8ü"ü üþûäûÛûÎûÁû¸û®û©û¡ûšûžû˜û™ûœûšû—û˜û¡û¢ûšûŸûšû¦û¡û¬û¬û·ûÀûÂûÇûÙûêûñûøûü üü-üIüXüqüŠüœü¹üÐüêü ýýHýgý}ý ý¶ýØýúýþ*þOþeþþ˜þ¹þËþèþÿÿ7ÿNÿgÿƒÿ™ÿ¶ÿÑÿíÿ,@Vk§µÌÖéõ  *-00..-) ûçß˺´”ˆp]L9#ôÿìÿÈÿºÿœÿ‹ÿoÿTÿ=ÿ'ÿ ÿïþ×þ½þ¥þ‰þtþWþ>þ%þ þúýèýÛýÞý¼ý§ýýýuýgýSýFý@ý8ý,ý#ý!ýýýýýý ý ýý ý ý(ýýýýýý'ý*ý3ý6ýEýMýWýbýsýý–ý¥ý¸ýËýÞýöýþ"þ<þRþnþ•þ²þÆþèþÿþÿ;ÿYÿyÿ›ÿÆÿÚÿ÷ÿ4Ttž¼á;Ks”»á-Pu¶ä"Jm‹§Îï:YoФ»Êæì +:>NUjgsy}„’‹“‹ˆ‡{whbXJ=, ôåȰœ„hG1éÒªˆhJ(ã ˆfC&îÉ­ŽsL:øßÆ©t\@%ôÿÝÿÆÿ¥ÿÿsÿ_ÿGÿ6ÿÿ ÿùþéþÓþÇþÀþ§þ£þ‘þ…þ‰þ|þqþ\þYþEþEþ7þ5þ+þ)þþ#þþþþþ þ þþþýýþþþþþþþþþþ$þ+þ1þ<þ;þMþJþYþjþlþxþƒþŠþŸþ£þ¶þ»þÉþÎþãþèþüþÿÿÿÿ+ÿ6ÿ=ÿTÿZÿdÿnÿ|ÿŠÿ•ÿ®ÿ´ÿ»ÿÅÿÌÿ×ÿßÿìÿëÿÿÿýÿ -/579=AD@AG:A>=642*,"  õÿðÿâÿãÿÙÿÒÿÓÿÄÿÄÿ²ÿ¹ÿ¼ÿ®ÿ¤ÿ–ÿÿ†ÿÿwÿlÿ`ÿUÿOÿCÿ9ÿ1ÿ:ÿ4ÿÿÿ ÿÿÿÿþûþõþïþèþèþâþàþØþÝþÖþæþÛþÔþÓþÏþÍþÌþÔþËþÍþÉþÉþÍþÍþÌþÏþÑþÓþÑþØþÛþßþÞþìþíþõþóþüþûþÿ ÿÿÿ$ÿ(ÿ2ÿ4ÿCÿMÿYÿlÿjÿrÿ|ÿÿ‹ÿ•ÿ¡ÿ¬ÿ¸ÿ¼ÿÊÿÐÿåÿìÿóÿõÿÿÿ")6<LTXdiz{Žš¨±°·ÁÂÊÑÖÕßÜáäíëûúúùúÿþ    ýúøúöñóïñëïæìåâãåÛßÙØØÑÔØÙÏÌÐÁ½´¸­©§šŸ” Œ‰}|xronjhf[[RMLDHH?87;1.1). " ûÿùÿùÿóÿùÿýÿöÿøÿüÿúÿúÿúÿûÿþÿøÿûÿþÿ ÿÿ  &      #/-*)).-<15625@=<:6@:BAHLDLJLLLVWQSQTTRYUZaddf^ZY[WTZY]\WUZVYWT`X^PUJOPQPMMPMOFKKJMQFMIJHIMEEHCFBFGAAC@C=@GDIFAC@BE??@?8@9?E>A<<>8?6AMND?<;:=873.4*2+020./.0,.*,.-)+1&+,/',)+/%&!''!+;G55/,+(*(-(,0+.3-1/<89A>@>E@?>DBE@CDBDHJKSMUOPMXRVUUXXUVZUaW\^[`a\^Z_cb]^ZVXVZRVWWZSXYTXUXUTVWVSUPWea\YXVSZNXQVRQSXPWVW\[Ya``^`\`ffgeecnhegjgdfcfedddae]ed`g]hgbe\`[\]TZRTQTURNPMONZPQFKHGCAH>H?INLA@B=DB@:;:<?9>DB9<874?B@86521366KF<97/5//--/$(#+$,")%).)((9,)&%#!$+4++&$#"$!#!! &!##  #01')&(%+"&-+*.+.+/021:4:498<8?<@?>C@CJEHDFHIIKRUY[W\^]Z]^b\iafaip†ˆyojljenjmhnqwpvruuswvwwswx{y‚{}~€‚‚‚†‰‹‚”‰ŽŠˆ‰‡‰„……ˆ‡Š…‘‘˜’ˆ‰‰‰…†ˆ‡‡ƒ…ƒ†‡…€ˆŠ’‡Š…ˆˆˆ‡Š†‚ƒŽ•Œ†Š€~~‘Š€€ywyuqtxyunuooeicieflqf`a`_b^[[TTSYPUKMMIPHNKFLJHFMELEIKIDFI@JIDG>CNIIGCIGFAEBEPHFHDGEEIDFFEAEKNHIGPLOHLMBIEHG@E>C;@;AAB>E?D=CBDCA>BIKAF?=9@AE9B:=B9;7;7364;<A:9;:9@7@;?;>>;>A??A@EKLIBBFBKNMHIGCCBA@FVTJMFEGGGJLJJUQWW]kg`cddhiljnkirgqktsrvz{w~}{|„ˆŠˆ‹‘‹›’ž˜™œ”Ÿ˜›œ¤¦³®ž¢›ž›£ž¢¦¶¦¨¥Ÿ¡ žŸŸ››™Ÿ¨¡Ÿ£¡—›ž–”–Љ„‡‚~€y}v|wtuvutyw~|x|zzvt{ƒ{sxqqoppsiqoqikeriliiknhidfldh]b]g\bib_a^\^`^^\[T[RWPSSONTVMWIRHOIHIFHBG@FCCKHEBG>@>?BAF@A>;BCD=;;9>;UHC::36;/;5><17.002*3394/),.).(,$")#'!,$   !" !,%&&%#'',$**334.11625677<;KVNG=GBLJLLKLHJJIEPLNIOPNKUUeb]WUUZP]V\^^bWa]_^Xfaa`fe^d`ieceheunvqqmmrktfsnomyzvr{vzz}}}|„€†~‡ˆ‚‡„……‡…ˆ…‰‹‡„‘‹‡‘Š‹‰—–Œ˜’‘”ŒŽ‡‰ƒ€‚ƒ‰Š€zz}y„ƒ}|||}~}‚v|w‚wztx|wtussqsqvxkrgmcqifichefisdg`dojhhb\jzogc_\`\`X[_]\Z_\VaWXTVWTVQSRRRQRPROOOPSVJNMGILERSRFMGHIHHBIDHDHHFEEDHDD@BB<@?BFEDK[_XKIBD?EBHIWIR@IGFICI<JDEHGAKQUIHEUHNCEDDBEBBCAE?H@FDJNNCK@BCA@ABCA@<=A=B>B>:BBHEEGKLHOLIHCE@KAIDFMKVRQLMRKOJOOMOV[MSTLQMPMLQRSQW_VRTTSQSSPSSZWUYUXV^RVQQNRNWd`RLOXLLIDH?ECE@?KHE=DIKBI>C;A;>=B>AAE<@:?6=4<;9<D:<DDE?>;B8E>><>=C<6996314.1505+1.306HEA8640+(.-.&.%+.-12++"(%0'#$-'+$*$" #"$ $!$#$+%% !"!!! +)"   ! !!-*(.(-++#&(**-*-.+.*''&&&-'-*'+$**%&$1*.(+&$!$ $#!        ùÿúÿüÿúÿýÿûÿþÿôÿãÿÕÿ®ÿšÿqÿ1ÿúþÛþÆþ¾þ¡þ™þqþCþ)þ(þþãýþý*þeþ‘þþcþ,þÃý]ýAýLý(ý"ý3ýTýmýzý…ýdýJý!ý&ýjý¨ýÍýùýþþ þüýíýèýòý÷ýþIþ`þ_þ9þþäý—ýZý#ýõüÛüÈüÀü½üüzülü“ü³ü¥ülü=üIü8üMü.üóûÿû#ücüüšü¬üÅüèüý,ýAýlýnýÇüCüñûŸûpûñúÐúÔúVû üýüôý³þ.ÿÂÿ6rƒnÿ ÿ§þˆþ3þýýŸýDýýýaý£ýIýBýœý_þ:ÿØÿo¯è«èÿúþ þéýìý=þqþ­þ ÿJÿ`ÿÿÆþ’þ¨þÿ»ÿz<« -ì‹û’NhÕ.Îî;ƒâQëcäc€Š™oFãøÕì *5>RK56IF*,PKK9ý<Zrms…vcÁz;"îÏè|*ÂNÝx'¼R¡ÿ‰ÿcÿ?ÿÿ²þlþAþþ þÓýºý¥ý¡ý³ýÈýÐý¼ý“ýsý~ý”ý¦ý¤ýËýþ[þ­þèþÿþþþÿÿÿ,ÿHÿyÿ³ÿtÒSs~„‰}[K@?A6è²v!×ÿÿ-ÿÞþ¦þlþ%þÈýYýÐü=üûûúZúÙùNùÖø‰ø=øò÷ª÷W÷úöžö3öÎõmõ!õõôÐôÓôõô"õTõ›õðõSö»ö*÷¯÷5øÒøùEúùú¬ûGüÖüfý×ýDþ¨þÿ]ÿ¿ÿ0 `ªá")CR_mwy{jYRc|¼véu®FÕ^½%t³ÖðJ •  Ž ) è Œ 0 ï “.dÒrJ<=JQ9y¼ç3ŽyC¸ûMô^v¤Ozç ô -  ä Å.´š»)rþNü¸ù÷\ô¾ñï¬ì™êßèœç󿝿ç8çèèÿé'ëxìæí ï¦ð#òáóïõ¡÷™ù=ûðüåþtG±Bôy4 ‹ ¯ d ¾ ä ž Š À /G0û ° : ‚ x H ó¨#²ÑÅþÈüÙúîø ÷=õó=òñð>ïiî¥íáìwì#ììì]ìí"îˆï>ñ óûôûö)ùmû¤ý£ÿt%·6ƒ¶› { ( Þ y ó : w ¡ Õ ô è ’  ~ Î ö ü ئ†rbQ;* ÿûý¼üdûéùyøþöˆõ6ôøòÓñâðð˜ï9ïïï9ï«ï[ðEñZò–óëôVö×÷RùØúVü¿ý/ÿ“^¸óì• ù , Ó p ëD¢äCoDù™`ÿ3þý!üWû–úëù]ùÈø'øb÷œöæõDõ¯ô#ô¶óYóó×òÀòŸòòOò"òòJò˜òó•óMô5õ8öE÷:øùëùÐúÕûÔüãýÒþ£ÿcq|+ŸqÿºþéýýNü¢ûÿúzúú•ùDù&ù?ùjùœùïùJúÂúGûìûeüÄüý‚ýìýOþ¢þîþGÿ¡ÿóÿL¤ãH·2¡ ™¯HÝ~ÐE ù › $ ¾ M ì X ¯ ® ‰ i m m 1 ú ³ ‹ 0 é Œ ¹ #  ú 1—,gÞ!È:Ûü·V#õyw ÝÉnêû÷>òJí²èDäràOÝÛ—ÙÞØ ÙKÚMܰÞ}áªäÞçëdîÆñôôÖ÷Âúuý2 Ñ!‹ì k Õ ">¬ÁqÉÃöa¸<ÆH{KÁ²Y½ Ú ¥ ûÔhýºùèõ òZîòê è·åÚãrâ{á áãà4áÎáÔâ0äêå$èÔêÔíýðWôä÷|ûÿ…­Ž w …B¡Ÿ>Šx2‘Çãï,oÃ… é \ Ä  @ C ÎbÏ-Gaþ^üuúwø|ötôsòð¸îí¡ëfêaé´èJè@èqèéøéXëí3ï«ñtôy÷¦úåý0M?ä 0 &­Þª&WAøn²¸™I æ h ÜR¸,»;Íÿvþýåû¹ú¼ùÇø÷÷L÷«öövõÓô2ôoóµòëñ2ñqð·ïï…î5îWî•î*ïð6ñ–ò"ôËõ÷qùUûFý(ÿý°<—«Ž.¨áÚŸ%u¯¥.Óeñþ‘ýü¼ú|ùeøy÷ÈöOöøõÀõ«õ¥õ‘õ¢õ¤õÁõéõöVöPöö¸õlõ(õâôêôõ>õžõöÁöj÷-øùíùôúûûúüãýÏþ±ÿ´é0FOG‹è0%ö¹_îD}‘¬`ûcêwÃr'ð¯9ЉˆŒ|~ò, ‚ Ö ' p ™ ú ‡  l   ë Ë ¢  :ÿ=èoJèõŒB4ГýÌ ídÞþú5õ=ðåëèæä<âÉà^àÛàùá™ãå·ç'êí@ðJóÿõøàúµü9þyÿÏu» ø    ? F > ™ Å g ø Ô  ¼ a 0 Ê ó — Ñ â — áä¡þæú±÷môKñ¯î›ì ëÉéåèPèèè¦è©éòê–ì|î†ðµòïôX÷ãù£üvÿqFÀÎ v µ ‡ +šÈ²Y¨ ¼ ‘ K  0ƒõ ºKöœQãh¹ÖÈÿ™þ>ý÷û¦úwù>ø÷ÇõôZó^ò˜ññòð ñiñëñ¢ò}óŠôÌõb÷ù!û4ýeÿ†ˆy?ÜC i ; ¥ » e ¸  ³ wË…:Údÿ^þ…ýÎüBüÑûcûñú…ú#ú¿ùoù&ùòøÅøžø|øTø%øø÷Ó÷´÷†÷c÷;÷÷÷÷ö÷C÷¸÷Nøù ú?ûnü­ýùþL•ÖïçŸREéU¡ËàÁ™cÿþÔü’û`úJù8øK÷[ö­õõ¹ôpôgô•ôäôcõóõ£ö\÷ü÷øEùæùpúòúbûÆûåûüü$üüüüõûÚûðûülüØüuýþËþoÿþÿ>4òÿ¼ÿ}ÿ]ÿ ÿžþþvýèüYü²ûûÄú‹úkú:ú7ú.ú7úŠúûÃû™ürýTþhÿ£Õðýª &÷ºjïÆ‡RX5¢gPjÇ^|Ü‹6  ž F ê e £ ‡ © ñ 0 A ƒ é W¡ß’rœ­hû+¼uDѹ° ÙS«üùö±ñ±ìdèQålãNâ0âã²änæpèðêŠí6ð«òëôÔötøŠùMúòúûFüLýáþ£ª¸©"; î C B  ¾ r Z U “  Ò · ® ¯ nÌÍYv  Q ;ÆìÍÿmüù°õ¡òðî°ìÝë„ëëÑë[ì&íîVïµðMòôÜõØ÷ÛùÝûãýåÿæÆrãí ç 1 ? 0 ü ¦ $ …äF»^%&.**ô±GµðøÕ€ÿrýÓû:úºøH÷ öîô÷ó6óÁò‘ò¢òóÁóµôÅõ÷AøšùìúDü¬ýÿ“vÓ$ÿ« A 4 Ùd¹ÛÞáñ <{ØLßÿ€ÿ<ÿÿÛþ‘þGþÐýKýšüÙûüú,úYù›øú÷j÷÷°ö{öXöWöoö”öÕö1÷¥÷5øãø¸ù©úÀûêü1þxÿÊA`Sµ!ñsÛ öåƳÿ³þÊýíü3üûû‰úú»ùmù0ùùéøÜøÜøâøÞøíøîøôøùøù>ùeù‡ùŸù¸ù×ùÈùÄùÀùèùú?ú‹ú û¥ûNü ýÅý£þeÿ;ÝŽS~o,Æ:˜zÿÿþHþþÿýþ@þ[þ¤þÒþ÷þÿ1ÿZÿWÿ‹ÿ«ÿÏÿ÷ÿ:K.7 ÿ`ÿGÿìþ­þaþ6þÑýtýþüàü+ýšýþ¬þªÿ`éTòa¡é5©ö^ÁXý 0HÍM W ª ³ à vÒ©žužòYÀ ‡î°‡Ð`-Íà%É0< -Íþ(÷áïéaã™ß`ݧÜ(ÝßÚá$åcèÏëNï¯ò»õ®øûúüíý`þ#þ“ýÇüaü•üeýüþÁ3MÔ æ 5 ü ‡  î à ÿ ˆ 8ýŒ‡à•Â'ç: " ®‹ýWùõñ‚íÅêºèç\çêçé§êyìmîuðUò9ôöï÷Óù«û†ý^ÿÀ;ud|¯·ŒW ฾ËLÂ%‘ùT • ´ ± ƒ  gq'ºª{þ@ü ú ø'ö|ôóÑñàð-ðÚïÜï>ðñ>òÆó®õÈ÷úùAüiþb}”fþa®ØûùÍ—Hßm§Dä}!¬=ÌWèw¬ÿHÿáþ]þÃýùüüûúÔù‘ø?÷öíôôsó(ó5óó/ôõ>ö…÷ÞøFú¾û7ý­þ:R(îì3m€ŽtK§/ùKw´âÿ$ÿ‚þïý|ýýÃüxü!üÖûtûû ú=úÆù?ù¯øøŠ÷ ÷žöUö@öQö‚öæöh÷ øËø·ù¶úËûÖüìýôþÏÿ‰&»B½ Z‰‘p@ôž?Ûkíyõÿzÿÿ´þmþþÔý—ýtýPýHýLýwý¬ýúý)þ<þHþ0þÿýÅý±ý›ý—ý‹ýÌýþDþ–þõþ‡ÿºjÀK•â"!ñ¾•)\Ól÷vìÿÐÿ†ÿÿŠþþÅý[ýýíüý<ýhýýéýþ=þIþŠþÆþ²þÌþ$ÿSÿ‘ÿ»ÿTévYs½ÖD¿  * ã } ® ´ ¬ s N å æ é ú K  e욆f|—–^oüÝ  ü¯óOìþåNáUÞeÝ)Þó߉â±åcéaí‹ñ’õUù üQÿ&ù÷"ºÿ¹ý¢ûÙùÏø¹øÌùü\ÿ±¥ º ¥ ã ( × ( 9 µ ~ŽN^×¼ 1 NÿÃûî÷:ôÖðõíÅëqê ê…êÙëäíYðêò`õ€÷#ùSúûšûüŸü7ýÙýlþ÷þjÿËÿ;ËPØ[×8ÓJõî,šú D = ô ; 3 Û & ÷ g d.–äÿCýÏú¯øåö‰õŽô ôïó9ôÖô£õög÷#ø¨ø ùMù©ù:úûü3ýiþŒÿd q¨µ­˜pEÕœ˜Ä#Æ…rg`;áPm'qIÍ/Oþ–üûÐùÑøøž÷Y÷K÷\÷ˆ÷æ÷Lø°øùzùáùMúÂúJûßû€ü&ýÉýiþóþˆÿ“òBldBÊ‘g`ÓM¬|ÌþûÂU½õöþìýÔüÒûçúúkùðø¨ø„ø øôø^ùÚù[úßú_û»ûü[ü§üúüTý²ý#þþÿ’ÿrÜ8vªÊäο«ŽmF!óΰ™ˆ‹“¢£ZËÿsÿÿ½þqþ&þþÛýÅý¾ýÞýýýþ.þyþ®þÓþÞþÿRÿšÿûÿ„%¼JŸÞëøðÏ|N—Š-Åÿ¥ÿ}ÿeÿ˜ÿ·ÿÜÿF ¸çö²—.ßÿ©ÿyÿrÿeÿMÿ.ÿ·þŠþ-þµýÏýÈý þ7þœþ!ÿ|ÿ7Æym6ò‹ãE?NÁž+Ù;З:æ¹·æÁ±¾ÚíÏ!9/%*þAUT“™Ý;Ô¤‡o\Ÿ¦õÅí_Õý¶ûîù¿øø÷÷yø<ùGúûØüwþüÿ›øn"+kÿ“üúã÷2ö.õ õ—õ­ö>ø úñû¢ý-ÿzŠxP)çXP÷oÓCÆtE´3uyhÿsþ¿ýWýMý´ýiþJÿJ0õ~¨”%w†Yÿ-þîüÐû¼úÏùùoøøøIøÏøùzúsûYü=ýòýŸþÿ¼ÿ/¬ŒþN‡»ÌÓ¼€’ø`Èÿ[ÿÿÿÿ\ÿÈÿD×MÆPV4ÑB…¨ÿ§þœý¡ü½û ûrúúú;ú›úû³ûXüöüoýÔý1þþÉþÿYÿ¢ÿäÿ&T…«Ëæø*)+çÉ«¡²Ìý3k¯Ö×½~óÿNÿ£þðýOý½üHüÝû û}ûƒû’ûÁûþûWüŸüùüYý¸ý þQþ–þÜþÿ%ÿDÿeÿlÿ†ÿˆÿ¤ÿµÿÉÿÖÿìÿþÿ,C[ˆ§×u½øô°KÚpâÿzÿÿ¢þ3þÒý’ýaý,ý+ýXý—ýæý'þ‹þÕþÿÿ-ÿ4ÿ)ÿ%ÿ ÿÿÿÿ&ÿFÿBÿOÿfÿÿ”ÿÿàÿ%yÌ5žâ*8<,5!Ô«d ¼’R üÿ-2@HQH'(ãÿºÿ§ÿ•ÿuÿPÿ@ÿ7ÿFÿ?ÿcÿ‡ÿœÿ»ÿÑÿöÿL~¢Ðìéçׯ§„a9ÉÿvÿTÿFÿMÿEÿeÿ˜ÿÞÿøÿGwœÀåí÷öôÕ¤yS$ðÿÏÿÆÿÏÿÔÿõÿ1lœãC[~«ÀÛéýõÉ„Rܤ—Œ·Ù$ŒÓ5…Ì&LšÕWœÛ6][h[.él¾Êz•þ4ýåûêúkúNú‚úû¿ûŸüqý>þòþ„ÿÝÿöÿãÿ‚ÿßþ þ!ý1üXû©ú=ú úú~úû×û®üÈýÕþæÿ¿ž_÷U°ù(947Ð9ÎQÀ0Šñÿmÿ ÿâþÕþÿTÿ¬ÿIs€t^<þÿ«ÿ@ÿ´þþ4ýhü¬û û—úeúyú¸úû°ûHüëü{ýþþÿtÿÝÿE‘ÒìÄ”uRDA>ALQl|”¶âCl„s;õ–Ÿÿÿ˜þþ¿ýfý3ýýý)ýSý”ý×ý*þ‡þÃþÿCÿxÿ­ÿÀÿÝÿßÿàÿÕÿÆÿ³ÿ£ÿ¦ÿ°ÿÆÿäÿ:y¤Éãü;?UYTE:ä¬t7øÿÄÿ‹ÿhÿ3ÿÿÖþ³þ“þ‡þþ”þ£þÄþæþÿ'ÿEÿRÿQÿMÿ6ÿ%ÿÿñþÕþ½þ»þºþÒþèþ ÿ*ÿaÿ‘ÿÏÿ5k’½ÓçïûóðåÕÎĹº²³ §Ž{jM;+  üÿñÿÚÿÀÿ«ÿƒÿeÿBÿ ÿÿÿþíþàþÞþâþÖþäþìþÿÿ,ÿRÿuÿÿºÿãÿýÿ(5=PQ\fw‘—«ª·¹ÁÄÇÌËÖÚâÖ×ÎĤŒkR/çÿÉÿ¥ÿ~ÿYÿ7ÿÿÿýþòþìþõþÿþÿÿÿÿÿÿÿÿ)ÿ$ÿ(ÿ%ÿÿ ÿÿ ÿ4ÿAÿOÿVÿ_ÿiÿqÿ‚ÿ¤ÿàÿ"g¬ã9YgefYJ(ÔµŽyiejyr~hi[OF77óÿÈÿªÿ‡ÿgÿLÿAÿ9ÿ+ÿÿ ÿôþÛþÇþ¼þ¸þ¶þÃþØþøþÿ)ÿTÿŽÿ¥ÿ½ÿÜÿïÿ*')!.:J_jjeXJ8+,3+-0-" òÿ×ÿÉÿ³ÿ¯ÿ ÿŠÿxÿnÿ_ÿPÿDÿGÿUÿgÿlÿÿ“ÿ¤ÿ¤ÿ«ÿ»ÿ¿ÿÃÿÃÿÉÿ¼ÿ¿ÿ´ÿÂÿ¸ÿÖÿæÿ')-   üÿïÿîÿ öÿÚÿ¸ÿ¥ÿ˜ÿ–ÿ™ÿ•ÿºÿÒÿ¾ÿ¯ÿ™ÿšÿ‰ÿsÿpÿrÿuÿvÿmÿkÿWÿSÿWÿ\ÿ]ÿwÿÿœÿ¢ÿ¨ÿ·ÿ¸ÿÀÿÇÿÃÿÂÿ¼ÿ¯ÿ¤ÿ˜ÿ”ÿÿ—ÿªÿÆÿëÿ)>LPSPNCHB6/ îÿÞÿÌÿÁÿÇÿÑÿæÿòÿ   åÿÐÿ¸ÿ£ÿ”ÿ‹ÿ…ÿˆÿ‡ÿÿ—ÿ›ÿ¯ÿÇÿÛÿîÿüÿ ñÿèÿâÿäÿåÿâÿêÿàÿôÿóÿ,P]incH%ùÿäÿËÿ·ÿ¤ÿÿžÿ™ÿžÿ£ÿ©ÿ±ÿÇÿâÿ-IU8ìÿÁÿ—ÿyÿhÿeÿcÿeÿfÿlÿsÿ}ÿÿ¦ÿÍÿïÿ6K\M?# ñÿÛÿÒÿÌÿÃÿÁÿÄÿÀÿ¿ÿÀÿ½ÿÑÿÞÿîÿ*.( óÿàÿØÿÍÿÎÿÈÿÕÿÇÿÏÿ»ÿËÿÇÿ»ÿÅÿÒÿÔÿÚÿßÿßÿäÿÔÿÒÿÒÿÏÿÌÿÐÿÖÿÞÿâÿîÿîÿòÿýÿ÷ÿùÿæÿçÿàÿáÿßÿßÿáÿÞÿàÿÞÿÞÿàÿâÿîÿÛÿÝÿÑÿÒÿÎÿÉÿºÿ°ÿ©ÿ›ÿ”ÿŒÿ˜ÿ•ÿ•ÿÿ™ÿ¡ÿ¡ÿ¥ÿ«ÿ¯ÿ­ÿ±ÿµÿ²ÿ²ÿµÿºÿÂÿ©ÿµÿ¨ÿ­ÿ®ÿÁÿÃÿÑÿØÿÝÿàÿßÿãÿäÿçÿìÿéÿéÿàÿÛÿØÿÔÿËÿÊÿ¿ÿÆÿºÿÂÿ¸ÿ½ÿ²ÿ°ÿŸÿÿ•ÿ•ÿ’ÿ“ÿ”ÿ˜ÿ™ÿšÿ¥ÿ¯ÿžÿ¤ÿ¡ÿªÿ™ÿœÿÿ„ÿ†ÿsÿ_ÿ[ÿdÿqÿrÿ‡ÿ‘ÿ©ÿµÿÊÿÍÿÙÿÞÿêÿíÿíÿïÿâÿÙÿÖÿÁÿ¶ÿ§ÿ§ÿ§ÿ´ÿ¾ÿÑÿâÿïÿüÿÿÿ úÿóÿáÿÚÿÈÿ¹ÿ«ÿŸÿ›ÿ•ÿ¡ÿ ÿ¦ÿ²ÿ¶ÿ³ÿ«ÿ«ÿ¬ÿ°ÿ¨ÿ¬ÿ®ÿ¸ÿ¯ÿ¸ÿ«ÿ´ÿ¦ÿ¯ÿ¬ÿ®ÿ¸ÿÃÿÈÿÆÿÂÿ¹ÿÃÿ¹ÿ»ÿ²ÿºÿÉÿÏÿêÿþÿ ûÿñÿÜÿÐÿÎÿÀÿ¹ÿ¦ÿ›ÿŽÿ‚ÿÿ~ÿÿ¡ÿ³ÿÇÿ×ÿæÿëÿåÿÝÿÇÿ«ÿ¤ÿšÿ„ÿ~ÿuÿqÿiÿbÿ[ÿUÿOÿUÿ^ÿuÿ„ÿ¡ÿ°ÿºÿ·ÿ·ÿ§ÿ¢ÿŒÿ„ÿƒÿŒÿˆÿ‰ÿ†ÿ‚ÿƒÿƒÿ€ÿ‹ÿÿ£ÿ¬ÿÁÿÅÿÒÿÈÿÈÿ¿ÿ²ÿ«ÿ¡ÿ¨ÿ¤ÿ¥ÿ©ÿ³ÿ¶ÿ¬ÿ¨ÿ¦ÿœÿ¤ÿœÿ¡ÿÿŸÿ¥ÿšÿÿrÿhÿbÿ^ÿWÿdÿgÿjÿrÿsÿxÿyÿ|ÿ{ÿ{ÿzÿxÿsÿmÿdÿ]ÿaÿYÿZÿdÿgÿ~ÿ‡ÿ—ÿžÿ¤ÿ±ÿ®ÿµÿ¹ÿ½ÿ¾ÿ¾ÿ¿ÿºÿ²ÿµÿ©ÿ¯ÿ¯ÿ½ÿÅÿÈÿÐÿÔÿØÿÞÿßÿßÿâÿàÿçÿáÿäÿèÿèÿéÿäÿãÿäÿâÿéÿîÿôÿûÿüÿýÿúÿõÿìÿêÿéÿñÿðÿùÿýÿ÷ÿ÷ÿ  ùÿíÿÞÿÓÿËÿÄÿ¼ÿ¹ÿ¸ÿ³ÿ¯ÿªÿ©ÿ¥ÿ§ÿ¡ÿªÿ®ÿ´ÿ³ÿ¬ÿ¬ÿ¨ÿ˜ÿ—ÿŠÿ†ÿ‡ÿˆÿ‰ÿŽÿÿ…ÿuÿrÿnÿyÿÿ|ÿ‚ÿŠÿÿˆÿÿŠÿ{ÿ‚ÿ‡ÿ‘ÿÿ«ÿ±ÿ¬ÿ²ÿ¬ÿ§ÿ­ÿ©ÿªÿ®ÿ®ÿ¯ÿ°ÿ«ÿ¥ÿŸÿ•ÿ‰ÿ‹ÿˆÿ–ÿ”ÿ ÿ¤ÿ¥ÿ¦ÿšÿ—ÿšÿ”ÿ™ÿ›ÿ™ÿÿÿ‹ÿ‚ÿsÿnÿiÿgÿdÿiÿlÿlÿuÿwÿoÿnÿtÿwÿxÿ…ÿÿ‹ÿ‹ÿ‡ÿŠÿ„ÿˆÿ‡ÿ‚ÿÿ…ÿ…ÿˆÿÿšÿ—ÿ–ÿ”ÿ“ÿ—ÿ—ÿÿœÿ¢ÿ›ÿ ÿ¡ÿ£ÿžÿ›ÿ˜ÿ™ÿ—ÿ ÿŸÿ£ÿ§ÿªÿ²ÿ®ÿ´ÿ¯ÿ¹ÿºÿÁÿÂÿ»ÿ½ÿºÿÄÿÅÿËÿÚÿÞÿêÿ÷ÿ"%,(/,170<49DLRWX\`]^`jmghmiqkdaYRQE=2&( ûÿôÿïÿèÿÚÿÑÿÓÿÄÿµÿ§ÿ£ÿ ÿ ÿ¤ÿ­ÿ¦ÿ¯ÿ´ÿµÿÇÿÐÿÁÿºÿÃÿ¶ÿ¨ÿœÿ‹ÿÿoÿ`ÿXÿRÿBÿFÿ?ÿCÿDÿKÿGÿWÿVÿ^ÿbÿkÿcÿmÿrÿtÿaÿ]ÿNÿKÿ>ÿ8ÿ/ÿ0ÿ%ÿ$ÿÿ'ÿ ÿ&ÿ(ÿ-ÿ(ÿ/ÿ.ÿ4ÿ*ÿ(ÿ$ÿ'ÿÿ"ÿ!ÿÿ"ÿ+ÿ1ÿ9ÿ@ÿEÿLÿPÿXÿ]ÿbÿcÿeÿgÿcÿfÿfÿfÿ_ÿdÿ`ÿcÿgÿjÿxÿwÿ}ÿ|ÿ~ÿŠÿÿ‘ÿ”ÿ˜ÿ›ÿÿ¥ÿ¶ÿÂÿ¼ÿÃÿ¿ÿ¼ÿ½ÿÊÿÃÿÀÿ¿ÿÅÿ¼ÿºÿ¹ÿ·ÿ°ÿªÿ§ÿ ÿŸÿ–ÿ’ÿœÿ—ÿÿŸÿ¤ÿ«ÿ´ÿ±ÿ­ÿ¦ÿ­ÿ£ÿ¥ÿ”ÿ•ÿ‡ÿ„ÿ|ÿpÿqÿdÿ]ÿaÿbÿaÿdÿeÿoÿoÿxÿoÿoÿiÿmÿ^ÿ^ÿ^ÿZÿ_ÿmÿ^ÿ`ÿRÿ[ÿVÿ]ÿaÿnÿsÿxÿ‚ÿ‚ÿÿÿ—ÿ”ÿœÿ¡ÿ¢ÿ´ÿ¼ÿ±ÿ¶ÿ¶ÿÃÿÁÿÑÿÙÿåÿíÿùÿ '):6<ACKSR[Uabq{y}~‡”‹’“Š“’’ŒŠ‰†„ƒ|‚wyqukjfgg_X]SVJH@?2&ýÿîÿßÿ×ÿÏÿÃÿ¾ÿ»ÿ¾ÿÁÿÄÿÉÿÃÿ»ÿ¹ÿ¶ÿ¬ÿ¦ÿ—ÿ‘ÿ{ÿnÿfÿRÿUÿ<ÿ:ÿ3ÿ/ÿ,ÿ,ÿ*ÿ,ÿ-ÿ3ÿ.ÿ6ÿ.ÿ4ÿ(ÿ$ÿ!ÿÿ ÿÿýþ÷þ÷þñþ÷þùþúþûþúþÿÿÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿÿ#ÿ5ÿ4ÿCÿFÿNÿYÿ^ÿ\ÿaÿaÿbÿqÿhÿpÿpÿ{ÿzÿ~ÿ“ÿ ÿ¥ÿ´ÿ²ÿ¾ÿÃÿÍÿÑÿØÿ×ÿâÿÞÿäÿâÿéÿîÿðÿëÿêÿëÿðÿòÿýÿÿÿ ÿÿ   " &#*)/,.*(! ýÿûÿüÿ÷ÿýÿøÿøÿìÿïÿáÿàÿÐÿÊÿÀÿ·ÿ­ÿ¢ÿ™ÿ‡ÿ‰ÿÿwÿpÿjÿhÿfÿWÿ\ÿ^ÿ^ÿOÿMÿGÿ=ÿ1ÿ/ÿ!ÿ#ÿÿÿÿÿ ÿÿ÷þõþêþìþáþàþÜþØþåþÙþÍþÆþÇþÅþÅþÈþÇþÑþÑþÞþÝþÞþãþÞþðþïþýþûþÿÿÿ"ÿ'ÿ2ÿ4ÿ>ÿJÿaÿ^ÿtÿtÿÿÿ ÿ±ÿµÿÉÿÙÿîÿëÿ (@KIR_kƒ~†—›œ¤¡¨­®¯µµµ¶À»Âµ¼ÆÈÂÂÿõ¾·®®§£žœ•™¡€wqi^\ZLE80%$ôÿïÿàÿÛÿÎÿÆÿ¼ÿ³ÿ¼ÿ¶ÿªÿ›ÿ•ÿ‹ÿÿ~ÿ{ÿmÿfÿ^ÿVÿNÿHÿ9ÿ-ÿ'ÿ"ÿÿÿ ÿÿÿþùþúþóþóþæþìþçþèþÜþåþÙþÒþÑþÍþÍþÉþÓþÄþÆþ·þ¼þ±þ¯þ«þ¥þŸþ–þ“þ‡þ„þ~þxþxþqþyþqþsþxþ„þ…þþˆþ‘þ’þœþ–þ™þ¢þ§þ­þ­þºþ¾þ½þÈþÈþÎþÐþÔþÞþéþúþýþÿ"ÿ*ÿ9ÿGÿPÿbÿlÿ|ÿŒÿ¡ÿªÿ¶ÿÄÿÌÿÖÿÝÿïÿñÿüÿûÿ '/;E\fvy‚†‹™ž¥§®¯¶³³»»ÏºÃ;Ĺ½À½ÁÂÀÀÄÈÌÊÈÌÂÈ»·²¨ž—”†ƒtqhhZTHG;9<;'' ûÿ÷ÿñÿòÿòÿáÿÕÿÏÿÁÿ¼ÿµÿ®ÿ¥ÿ ÿ˜ÿœÿ–ÿÿŽÿ„ÿ‡ÿ€ÿ‡ÿ|ÿÿyÿxÿwÿtÿsÿsÿnÿkÿcÿ_ÿ[ÿdÿ\ÿMÿPÿCÿ9ÿ2ÿ0ÿ#ÿÿÿÿÿÿÿ(ÿÿÿÿÿ ÿÿÿÿþúþóþçþäþîþæþÝþÜþ×þØþÔþÛþÚþÛþÛþ×þÙþàþæþÞþâþæþèþúþùþöþùþÿ ÿÿ%ÿ2ÿ.ÿ9ÿ<ÿGÿEÿQÿOÿYÿ\ÿhÿpÿzÿÿ‹ÿ•ÿ£ÿ®ÿ»ÿÄÿÐÿàÿèÿõÿûÿ '+;;GNXbnrwŽ•™œ«¨±·½ÅÈÜÞãæëùýõúúîñîïñíçò÷éæÕߨÕÑÊÔÑËÒÇÊÈ¿¼»±´¨šŽˆ„~ukphjad_Z`TSI?@9<5?43-*'$#! þÿùÿ÷ÿñÿîÿêÿåÿÜÿßÿØÿÎÿÌÿºÿ¸ÿ°ÿ­ÿ¬ÿ¤ÿ ÿ˜ÿ—ÿÿÿÿ‹ÿŠÿ€ÿ‡ÿ„ÿ‰ÿvÿsÿoÿlÿiÿ\ÿ\ÿOÿGÿBÿ6ÿ2ÿ(ÿ!ÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ!ÿ&ÿ*ÿ1ÿ1ÿ6ÿ8ÿ>ÿCÿLÿOÿ[ÿ^ÿeÿoÿsÿ{ÿŠÿ‘ÿ›ÿ©ÿµÿÁÿÉÿÐÿØÿãÿéÿöÿöÿ !*25IJV_jqy„•£›­¯´·¼ÄÇÉÐÕÏÈÆÊÐÖÎÌÄÇÆÉÄÇÆÉÉÌÏÑËÍÉÇÆÊ¹¾¯®ª®§¡ ¢œ›–—Œ‰ŽŒ—†ˆ}tz|saWQVODK:=66540,.0*.+,.+5!$ üÿöÿøÿñÿñÿîÿæÿìÿôÿæÿæÿãÿãÿÚÿÒÿÕÿÐÿÍÿÊÿ½ÿÀÿ²ÿ°ÿ§ÿªÿ£ÿŸÿ©ÿ›ÿ‘ÿ•ÿ‡ÿ’ÿ†ÿŠÿ€ÿ€ÿÿzÿ|ÿzÿxÿzÿwÿ{ÿ}ÿ€ÿzÿÿÿ‚ÿƒÿÿ…ÿƒÿŒÿ‡ÿÿ‘ÿ—ÿ”ÿŸÿ¥ÿ«ÿ·ÿÀÿ¾ÿÄÿÆÿÌÿÞÿäÿçÿæÿøÿðÿþÿüÿ)++85<BPRkchhx{†Žš ¡¨ª­²®»¶º¾À»Á½ÃÇÅÅÂÇÁÃÇÌÎÄÇÁ¼º´³¯§¤ ¤ž˜š”‹…‰}„Š}{vx……wrmkndd`dba\aZ[a^WZQSUQROGMPLGFAB<211/'*%-)/-,,,9,+$%! ' ÿÿ    üÿùÿôÿõÿòÿþÿüÿùÿûÿùÿÿÿ  ! %)(",&0642:8:<<EFNIGHHL?B>@EHBIQIA;<A@BHB@?CB=BAJAB<@999530(#00)**(%",-('#*&$+%'%4+","*# !''*',),$'+)'+*+%*.&*1D81/%'-10,0<58/15@72.-*&+-*')#'&'',)0-,-%*+##$<33'/-10:4628**)+ !'",",(1-,-.,$&!!#!  $*',.*%*!(%.'')'-,07>856=:78<Q@@8B=?>=B=BCBA;FWQEECIHBGGELQTRRU[PYQSGQLOOOQRU\RXV]Ubck`gaf]j^g^d`ie_e`gkjfckhdidfbmspqmtmttxy{yzuyw€p|„|{}twpyuvxz|u|styuus|svovsrqr~wpmipnltnvysvpssqgljekghflbjihgjhkidehnioktytzmrkvnoknnlvormmz~rtgpqqwt…v{uztsxsrwupvuqolplreqofrnpoou|‡qqkngjjmmlegeh_hbkgnsprmuqupos{{yxuxorlvptyu}y~v~‡}ƒx‚€||zwv|‚sstnoutrrmtnlropprsqjqgvimegiehjjjkfhljohkmkvwumiikinfomtfgilkmhpmmqv~wrrwu€xz|{x|vtwpwss{{~|y||~z‚€|€{zv{txuolqroojikvq}qy}|x€€†ˆŠ…„„}…†ˆ€‰„ˆ†Œ…‰Šˆ–¨¥›–’’•˜—“ކ‡ŠŠˆŽˆŽ‰ŒŒŽ˜˜“’—™˜›”•ŒˆŽ…‡…~…x‡“Š…‚}„}}~Žˆ}|uuxsr|t{yuz~xzy}~‰}‹‹…‰…†ƒˆ‡†ˆ…€ˆ|…}{~}x|z}‹†…~|{|zˆ‡ƒ|y}~x‚{€…{{}||ƒ‚}}„}…†–™…„~|x~ˆ€|~’Š„‚€ƒ||€x{|zw}vuuwnyv|x|q}twzxsvs|uttorkogoejilcdhcchanmrsqrompmjmkiecdg`a`cb`__aahaa`a_\\]YZ^Yqdd\`_]d[a\\\]^[]_`YX[VbYY\W_TUOLPMNOOQVOSKTNUUTSSSORORMTOOMELAGKDHBIKEHNKIHIIMKKSNMINJISMQR]NLKKNJQKOALEFIGMKKJID?A>=<D@FA@=8D?A=?D89RQEG?8GH=FB;4?C;CD@IHRU_WQVJCDKKQD96>>/<>;D9A?@@MDF5@@@=@B>D898939E2728/3,100.*/533/:144587:;;:@A>@=<88:9:5867:;@@<AHHDBDJDEMWNRILGRLNGGCCIABLMIIOSHMBQPKMPUKJFFLLDGCKJKLJIKKGIFMMJMJFLJEKETOLSNLOL^[SPJI@GEUIKKPDIJBRCMGGHFDKRERCLCQPbXYWWOMQONLMCOIM@JCDAFFCFBHIBH@B>ICCAI@GCKHTXQVLSQPSQRTLMUNNLLJLJKKKKIPJKJIJLODLBLDOFNELKELDGEMOCGDEAE:GIC@>9<E:?6<8995:98675945/36-61;A>98@;99@CC:CE=?855=495503=?981948429:28=?8>:;420020.63326HC=85+.2043*+!("&'#""% %-/(+%)-)63310,-+,)+'( !"""%"$&$$$"$!$'%#$!!   #&%!&,# '(!'#&/'+"%!%# " /44./#&"&0 "%$ %-)%"%)!$ "()$% !"!%&%&"#&) !# -1+#'$%*'*')34179/-*.%+")+%&&$(%"&!+% &!" """$! $$#%           ÿÿüÿýÿøÿúÿùÿþÿþÿûÿüÿùÿüÿ÷ÿúÿøÿõÿøÿøÿôÿóÿöÿøÿùÿôÿûÿùÿôÿøÿ÷ÿõÿûÿøÿùÿúÿóÿûÿõÿöÿòÿòÿôÿþÿúÿõÿìÿøÿòÿñÿïÿêÿìÿìÿñÿëÿïÿíÿêÿíÿêÿìÿêÿîÿôÿðÿôÿëÿñÿçÿïÿìÿðÿñÿòÿïÿûÿüÿôÿñÿðÿ÷ÿîÿïÿñÿêÿîÿêÿèÿèÿìÿâÿéÿêÿæÿéÿæÿæÿãÿàÿèÿêÿãÿçÿåÿíÿäÿéÿïÿéÿçÿéÿãÿéÿçÿëÿçÿïÿñÿìÿïÿïÿðÿîÿðÿðÿìÿëÿñÿëÿïÿìÿóÿðÿêÿëÿæÿçÿæÿêÿñÿêÿíÿèÿôÿçÿòÿêÿëÿèÿìÿïÿëÿìÿíÿîÿêÿëÿèÿñÿíÿõÿðÿðÿðÿèÿëÿîÿêÿêÿìÿâÿäÿâÿéÿâÿéÿâÿûÿêÿïÿæÿìÿÚÿåÿÞÿâÿåÿâÿáÿàÿåÿæÿæÿíÿíÿìÿíÿåÿçÿäÿêÿëÿéÿêÿíÿìÿîÿðÿóÿóÿóÿùÿôÿ÷ÿûÿùÿïÿíÿýÿõÿðÿðÿíÿñÿêÿòÿéÿóÿøÿ÷ÿðÿñÿñÿýÿñÿøÿñÿúÿóÿòÿðÿòÿñÿöÿïÿ÷ÿíÿõÿóÿúÿöÿôÿ÷ÿðÿùÿöÿüÿ÷ÿóÿ÷ÿðÿýÿ÷ÿôÿ÷ÿóÿùÿúÿõÿøÿöÿøÿøÿùÿøÿñÿôÿñÿùÿ÷ÿ÷ÿøÿùÿöÿøÿýÿúÿñÿûÿ÷ÿÿÿýÿûÿýÿûÿ ýÿúÿúÿøÿúÿÿÿõÿúÿøÿ÷ÿøÿüÿüÿúÿûÿúÿûÿûÿÿÿýÿþÿúÿùÿöÿøÿûÿöÿóÿûÿüÿýÿþÿúÿöÿôÿõÿõÿòÿ÷ÿòÿóÿõÿôÿôÿôÿøÿùÿôÿïÿýÿüÿþÿûÿøÿþÿõÿøÿõÿúÿöÿùÿûÿøÿøÿøÿ÷ÿûÿýÿýÿûÿüÿÿÿÿÿÿÿÿÿ ûÿüÿýÿýÿüÿùÿþÿöÿýÿ÷ÿúÿöÿøÿøÿùÿøÿøÿ ÿÿ ÿÿõÿúÿóÿúÿ÷ÿûÿøÿóÿûÿ÷ÿõÿòÿõÿóÿöÿñÿôÿóÿõÿñÿøÿðÿôÿëÿïÿîÿíÿæÿîÿîÿìÿýÿíÿñÿìÿìÿîÿñÿìÿïÿçÿðÿëÿêÿìÿãÿêÿëÿ÷ÿíÿïÿíÿóÿíÿôÿ÷ÿûÿôÿïÿòÿõÿùÿøÿóÿìÿìÿíÿûÿíÿíÿéÿíÿèÿëÿèÿîÿðÿóÿîÿêÿûÿúÿúÿðÿöÿïÿùÿïÿïÿëÿðÿéÿîÿëÿïÿéÿëÿæÿçÿçÿæÿçÿäÿîÿîÿéÿæÿæÿâÿçÿäÿßÿæÿáÿéÿïÿíÿæÿçÿãÿçÿáÿäÿãÿáÿáÿäÿÞÿçÿáÿâÿçÿâÿåÿèÿäÿéÿðÿúÿæÿìÿáÿçÿàÿïÿâÿîÿèÿìÿöÿïÿëÿêÿèÿëÿçÿæÿßÿãÿäÿÞÿãÿÜÿâÿÚÿßÿÛÿÙÿÝÿÜÿßÿãÿÜÿãÿàÿàÿÞÿÝÿßÿÜÿäÿåÿãÿäÿÛÿâÿäÿØÿæÿáÿßÿßÿäÿÞÿÝÿåÿÞÿáÿÞÿàÿöÿôÿëÿêÿâÿáÿäÿÞÿßÿÞÿãÿßÿàÿâÿåÿñÿåÿêÿãÿçÿæÿóÿìÿêÿéÿïÿæÿêÿåÿëÿëÿêÿèÿêÿïÿëÿìÿéÿîÿêÿëÿêÿéÿìÿçÿçÿêÿòÿòÿðÿñÿèÿíÿìÿ÷ÿöÿðÿðÿïÿóÿîÿøÿóÿ÷ÿíÿøÿîÿñÿîÿñÿîÿôÿìÿóÿïÿòÿòÿðÿùÿúÿóÿþÿóÿòÿñÿíÿíÿòÿùÿóÿôÿîÿïÿéÿïÿðÿíÿíÿñÿöÿðÿôÿïÿöÿøÿýÿòÿóÿîÿíÿìÿùÿéÿòÿîÿõÿòÿòÿõÿ÷ÿöÿýÿúÿñÿñÿñÿõÿôÿóÿóÿîÿúÿôÿùÿêÿòÿæÿéÿáÿäÿßÿÛÿÙÿÖÿÍÿÓÿÏÿÕÿÌÿÊÿÍÿÅÿ½ÿ´ÿ®ÿ£ÿ¡ÿŒÿˆÿnÿaÿRÿDÿAÿ1ÿÿÿüþãþ–þLþþíý ý7ýðüÓüÉüÌüñü;ýýþ‹þ ÿ³ÿ?­DÅs®Û $Zuž²×ØÈ|RHªô\ì@“ÿàþqþ¾ýðüžüü†ûäúŸúhú@úîùžù€ùˆù€ùqùsù¿ùÿùUúû‘ûCü2ýûý­þ‰ÿYÌ…sß~Ð57˜ñŨ¬“aÎaÛeÚkçPÈ{3ÜÿZÿÿÔþ¼þfþþþÙýÁý¸ýýœýºýÐýìýúý%þdþ¡þáþ ÿ7ÿUÿ‘ÿÎÿßÿîÿóÿ<O%ùÿs‚$&`[#TcbqKl”š^Y˜‰YOZ>@ úÿîÿóÿëÿüÿèÿàÿÒÿÂÿ©ÿ©ÿ…ÿ~ÿ|ÿZÿeÿqÿ`ÿ@ÿ4ÿGÿPÿ4ÿÿÿÿÿÿôþþþ ÿûþáþÿÿÿæþ ÿÿÿþþÚþþþÿãþ¶þÕþÿâþïþ÷þ"ÿKÿdÿqÿ´ÿòÿ $\¯ãÿ"^°ÆÈç(&5K6&3ñçÛ׸aDòÏœpN# òÿ×ÿ®ÿ’ÿƒÿqÿkÿWÿ7ÿ'ÿ'ÿ$ÿÿÿþÿÿýþýþÿýþÚþÆþ¯þ˜þ{þ'þÑý“ý~ýOý÷üËüÔüÓüºüÚü"ý8ýYý’ýÚýþ>þUþzþ³þçþõþ%ÿnÿÿÔÿ&{Ön¿Y¡É×ç÷ãÞÛѼ´°›yme>ø¸’h"êÁ­‹uyke^miT=#øÿÖÿ³ÿ”ÿ€ÿqÿcÿ[ÿ\ÿbÿRÿXÿSÿNÿCÿ,ÿÿ÷þÕþ¾þ¶þªþ¢þžþ¬þÉþßþüþÿCÿcÿÿ¬ÿÎÿæÿ IY~ŸÆì:\z–©·»´²£Œ_>#ûÕ¯‘f=#ÛÿÀÿ¿ÿ“ÿpÿPÿKÿ(ÿ-ÿ"ÿ$ÿÿ"ÿ;ÿMÿSÿcÿsÿƒÿ’ÿ¬ÿ¾ÿÉÿÝÿüÿ/?LVclr`ZUB, ðÿÚÿÚÿÇÿ®ÿ›ÿŽÿyÿsÿmÿ[ÿQÿKÿ[ÿVÿNÿRÿ`ÿ]ÿbÿpÿ‰ÿ ÿ©ÿÉÿéÿ;XgwŠ£²µÆÔãÞãâõåØÓÛθ±±ŸwiYIB+ íÿíÿìÿïÿãÿáÿæÿñÿðÿõÿ$.FTTZhouˆ˜˜¨«¹½ÅÆÅ¼¶²®•Œ€rZI<1! òÿçÿåÿØÿâÿÕÿËÿ¿ÿ¿ÿ¾ÿ¸ÿ®ÿ¬ÿ°ÿ­ÿ¥ÿ°ÿ¬ÿ¶ÿ¸ÿÁÿËÿØÿâÿòÿüÿ'-.8:<47761....((/-&ýÿñÿîÿùÿûÿïÿêÿ÷ÿúÿïÿîÿðÿùÿòÿêÿäÿìÿèÿêÿçÿæÿéÿéÿÛÿãÿãÿãÿÚÿÍÿÜÿÄÿÅÿ²ÿ¾ÿ³ÿ¬ÿ¥ÿ¬ÿ±ÿ¯ÿ±ÿ¹ÿ³ÿºÿÅÿÆÿ»ÿ¹ÿ¼ÿ·ÿ·ÿ¯ÿ²ÿ£ÿ§ÿ²ÿ­ÿ½ÿ¸ÿËÿÎÿâÿèÿçÿêÿêÿêÿÕÿâÿßÿßÿÉÿÂÿÌÿÍÿÑÿÊÿÚÿéÿêÿêÿéÿúÿøÿùÿ $!"0-,1-9.)%"(þÿøÿêÿÞÿåÿàÿ¿ÿ·ÿ´ÿÂÿ©ÿ”ÿ–ÿŸÿ›ÿ„ÿ‰ÿ¡ÿ¢ÿ›ÿÿ«ÿºÿªÿŸÿµÿÚÿÐÿ¿ÿÃÿÐÿÖÿËÿÏÿÍÿÒÿÔÿÕÿÐÿÏÿÉÿÔÿËÿÉÿÅÿ»ÿÀÿÁÿ¿ÿÃÿ¶ÿ¼ÿºÿÏÿÅÿÀÿ½ÿÑÿÖÿÊÿÜÿíÿåÿßÿßÿñÿôÿñÿ÷ÿ  &#( -:6-,.323-/;30'.0 øÿíÿñÿûÿñÿìÿãÿöÿõÿúÿîÿõÿýÿýÿþÿ#)63BGPPPTTWRUU\a^`ihvq{’Žˆ—‘Œ’—’•£¦´«¦¯µÉ¿»É¿Ê¥¤§¡Œ|†ƒk^[n\TQXQHV\WS9JP?0MXTFTlmv{Œ‚{•¢–¹ÕÆ´ÀâØÃÃÕÞË·ÍËÇ¡£´½¬ ºÌ³«¾Ð¹©²³°›‰ŠŽ~ovwwx{v†xskYZKD-/)'!!  ôÿóÿèÿòÿøÿèÿäÿìÿøÿýÿïÿúÿ  """*'*?56.<$øÿØÿÍÿÓÿÃÿ°ÿ˜ÿ§ÿ¥ÿ“ÿ’ÿ…ÿ•ÿ{ÿvÿqÿuÿiÿTÿQÿ>ÿ;ÿ(ÿÿ ÿ!ÿÿ ÿ ÿ ÿÿÿ ÿúþ÷þõþéþÒþÐþËþ¼þ¨þ þ¤þþŠþxþvþ{þfþOþHþNþ;þ*þ"þ!þþ þëý÷ýòýñýÌýÏý×ýÙý¼ý°ý»ý½ý®ý˜ýœý³ý¢ýŽý˜ý©ý¾ý±ý°ýÂýÇýÑýÚýèýíýùýþþ þ"þ3þHþSþTþrþ‚þ•þ˜þžþºþÁþÃþÃþÉþãþÛþÛþëþöþÿÿÿÿ7ÿCÿOÿYÿtÿ—ÿªÿ°ÿÌÿîÿ&Cp²Üû2rÀí]£Üî,c‹¥É>Y€®Ø*L”±Õá *QLGg‰™¿ 1A_Ã:}Êæßö# <    ï°”k Ï~0Ònú…„pèH¾&ˆæÿWÿÅþ'þ}ý÷ürüühûßúuúú£ùDùíø·øqø%ø÷÷â÷Â÷÷€÷z÷ƒ÷}÷„÷ ÷Ç÷û÷$øaø§øíø;ù‡ùÔù3úšúüúXûÆû9ü£ü ýoýáýMþ¹þÿˆÿýÿnÌvÄQ’ÖCj§µ·¬hT*ãªp'ö¼v)ä—Uùÿ°ÿdÿÿÀþrþ-þÞý—ý_ý+ýõü½ü‡üaü@üüêûÎû°û¤û’ûvûlû`ûNûNûCûAûDûAûIûLû_û]ûkûoû{û‹û—û¬û¹û×ûíûü=ü\ü}ü’ü½üÙüÿü*ýNýtýŒý¶ýÇýÞýõýþþþ!þ,þþþþôýðýÔýÉýªýžýŒýqýhýUýHý,ý%ýýçüÏü¬ü›ürüVüBü üüïûÕû¾û£ûûgû^ûMû.ûûûûúãúÅú¾ú³ú¤ú˜úŒú”úžúú—ú£ú¬ú²ú´ú¾úÝúöúû(ûUû‡û«ûëûAüƒü¿ü ýbý²ýþMþ±þøþIÿ—ÿèÿRŸý\Ä/ŽèI¥Sšä'_¥ÙN„ÅK”Ý(|È O © ý ? Œ Ó 5 | Ð 3 € Î ; · !v <Dª£>Ä x a à  Û C º G s ™–‚*³;šèþ+ý•û7ú¶øj÷DöõÐôô²ólóCóóüòóóóðòùòÿòÿòõòó.óaó©óôyô õ¡õ7ö×ö“÷Jøãø¬ùuú7ûëûºü—ýUþÿÐÿ—eÑ’V¸h¢NÕ\ Ý f Õ - h y [  ›  ] ¦Ò1Fq¾\Âÿ.ÿ®þ0þ»ý:ý·ü5ü»ûGûÑúlúú½ùwù/ùþøÚøºøªø¹øÏøòøùTùùÂùþù1ú_úƒú·úÝúûEûˆûÅûü†üçüRýÓýfþÿ¶ÿq Ù|¦!‰×Lt„…kQ&ûÃŽb,ß’Hó… š.ª“ÿ%ÿ®þ9þ²ýkýýËünü2üüÕû¨ûyûSûûÓúœú^úúÂùrù4ùãø øKøøÔ÷°÷‚÷Z÷N÷8÷F÷J÷n÷€÷¯÷Û÷!øZø øÝø+ùùÆùúPú úÙúû)ûQûmûˆûŸû¯ûÇûàûîûöû÷ûüü#ü&ü0ü<ü1ü3üAüHüOü[ütü˜ü®üãü.ýyý·ýúýOþ¥þÒþÿ1ÿmÿÿÿŠÿÿŠÿhÿEÿ'ÿÿÿÖþÄþÑþßþßþñþ%ÿqÿ ÿÞÿ@½…‘…øŽŠ“wíeÀ W › Ñ ý ' K z “ ¶ õ ( P ‹ à 8 ø “ í _éw§Ê>S2õâüŒ(É * a  è , f  ê J ­UÿŸXÂþý_ûÉùø²övõpônó¾òSò=òSòYò¤òó³ó2ôô õ¤õKö‘öÔö ÷u÷ž÷Ê÷ øGø¥ø!ù³ù>úèú ûpü-ýþñþÏÿ°¢¡•h&ñÑI3Cÿâ  % Y ) ô Z Ô  Û‡ï œrÎ@—¬u@üþ;þ¤ýÌüü‰û7û×úzúJú9úQú…ú’úVúýùÐùÅùÏùÏù—ù=ùéøÛøùø-ùnùžùÀùÛù/ú½úŽûwü;ýµýþ°þ‚ÿGúˆòaòŠ!Ÿò:ˆòO»Ý½c-þ˜ì>—™ ŒçJ»9¿ÿcÿÿ¼þWþóýý,ýÞü«üaüóûkûûØúú,ú³ù1ù¬øZøøÛ÷¹÷…÷p÷u÷«÷×÷øXø¤øùjùºùýùJú¯úýú6ûIûjû©ûðû>ü}üÀüýWý°ýøý/þ_þþ¿þÃþÀþ°þ¤þ þ…þVþþäýºýŽýSýýÜüÅü‹üoü3üòûºû‰ûuû ûâú¬úŠújú(úúþùòùÌù¹ùÄùÄùËù´ùÔùÜùÙùóùú.úQúqú´úøúMû™ûöûXüÀüýzýéýBþ—þöþZÿ¸ÿúÿA~ÚXœâ@£ö<e¡ø(eµl¬~Õ4¢+Í l £ à ¹ » m w Z  øý Ó j † “  Ç P ‚ % " ‰ } Ò k~Û ï ›  { ã ’  k ¹ G ÜS y¹S¼ê™ÝäJ;Âþ¦ýŠü:ûµùDøb÷›öãõBõÝôõõOõŽõåõhöìöf÷”÷Ý÷Gø¬øéøùlùºùõùIúÛúmûãûŒü{ýXþÿ·ÿ‚VÇaö¯RÍ Ž÷@e¶º°Ÿ‰n-×f†øcízÒBÂÿÙþþ<ý“üÝûNûÎúnú'úÊù”ùùŸù•ù˜ùÇùûù"ú?ú…ú²úÊúÓúíúû=û„ûÈû übüâüjýúýžþmÿ*ç¢c ²HÏ/|Ç <f’°ÆÙèÛª‚Pÿ«BÌC¬ÿW£hÛÿQÿ×þZþúý•ý@ýåüŒü>üþûÇûŽûDûû½úzú5úóùºùù^ù>ù.ù?ùUùmùœùÒùú`ú¾ú!ûˆûçûWüÃü"ýƒý×ý-þ{þ¾þìþÿLÿcÿÿ…ÿ“ÿŽÿ…ÿxÿÿsÿZÿ>ÿ0ÿ'ÿ ÿóþÃþ þyþVþ þÞý–ýCýäütüü¤ûBûÐútú/úüùÄùªù“ùrù]ù[ù?ù4ùù ùöøåøãøÔøÏøÍøÎøÜøùùEùvù¹ùõù0ú€úÎú ûyûÐû.üŒüßü*ý”ýÚýþjþ§þÞþ ÿLÿsÿ˜ÿ»ÿíÿAd–Ä$^ä1j«ýFÙ's·@‹Ê 8t—˜ŽˆkYB:"4S‚·“qô~  ¨ û  ‹  ó # ” © i Ä á   ! 9 W ‘ L i ½ › a ) 9 9 Õ v  Á ñ c  € rWœ€:à†j¶þßü û¦ùø ö±ôÂóùòŒòCòfòÚò—óQôÖô•õEöðö…÷þ÷cøÍøAùœùËùúHúŠúûûü­üuý:þÿØÿ—9åÁp\[Y=ØŠ ( { ¬ ­ À ¨ Z ê U ™®’viZ9M‡àÿ/ÿhþ¹ý,ý•üüiûû¤ú:úÕù„ùIùúøÄø«ø²øÚøùdùÄù"ú‡ú¸úïú$ûUûvûûÚû<üÄüJýóý¨þ~ÿT:(% òÏš;ªó%6)ö¿‚4Ön÷fÝ9¤(œ ó^Æÿ4ÿ¦þ&þšý/ýÉüˆüJü#üøûËû–ûoûDûûîúÓú²úúiú[úXúUú_úzú§úíúAû°û#ü üýýþ†þúþjÿêÿYÉm›ÈÐȨ€F´cþÿ„ÿÿ—þ1þÇý\ýýëüËü¬ü”ü€ü^üMü+üëû ûiû3ûàú„ú9úòù¥ùDùþøÓø¦ø¥ø‡øxø†ø¦øÕøñøùDùsùÆù ú`úÏú'û…ûÁûíû5üfüü®üÇüëüýü ýýüüýý ýýýýýKýLýGýWý{ý©ý±ýÁýâýþBþ-þ0þ8þ%þþ÷ýåýÂýºý¹ý¼ýÃý¾ý»ýÛýûý3þ^þ¾þÿ‘ÿ¨P¼aÒmùhÆ~´ö >ew‘ÂñþZ–´à$ l y ’ Ï ù  , ¸  O  ’ x z ” Ñ Ú † 6 [ ß  Æ É W ’ ) Î µ „ ‰ % Æ x Ý ô ®   b + ({;L·ç^Æÿžý€ûùøŒö/õô<ôJôô5õWöl÷Œømù…ú~û üzü°üý:ýýýý4ý-ýýCý ýìý*þ§þQÿÑÿCÆIÑ:ÄVÌHÅOšÔõöÊ_Ï#k•Š…ÿ}þŽý²üüpûýúÃúŒúiúPúSúPú9ú9ú,úGúiú·úøúSûËûTüâü‚ýþ«þ5ÿ«ÿ xÈþ&4DR~È9´;Ù€­+¯G^W%ÖXË&w³ûH§ø\ÈÿGÿÆþOþéý“ýNýýáü¾ü²ü®üÃüÔüùü&ýfý«ýñý2þrþªþËþâþøþ ÿÿÿ4ÿEÿgÿƒÿ¤ÿ»ÿéÿ;Km‚’§µÃÎÐÔÒ̾šgÆÿSÿÐþ=þ£ýùüfüÔû>û®ú6úÕùvù$ùÝø¾ø¬ø¯ø¹øæøùVù–ùßùúhú úÞúúúû-û7û5ûûôúÙúœúdú5úúàùÇùàùáùúGú°ú û‘ûüvüéü;ýuýœý®ý£ý‘ý{ýHýýèü¶üxü0üýûÉûŽû^û<û"ûûû"û=ûjû¤ûÕû!üsüØü1ý ýþnþëþ1ÿ~ÿ¯ÿìÿ/( þÿýÿûÿïÿõÿ$Dl£Æÿ+f·ù@“åNÅ4¡ Z‘¬µš]* ) dÓg¶%b³ 5 T r ¾ Ö œ É " N y Ç d ò   † BÛbÁ¤ƒØ  " g ã ñ © Â È x w ú ü Ç † Q ü–ø7P6ëoåÿXþÕü2ûùøÖö×õ*õ±ôžôìôbõöàöØ÷ðøúKûKü5ý!þÿ¥ÿ$¦òõÞ¢aNyšÕ7ÌSÉ^ÝApˆ|Lí»s%æ–ÐKÿlþý›ü¼ûÞú!úzùóø“øAøøÿ÷í÷ø3ø‹øûø‰ù5úßú“ûFüýÌý€þ1ÿÐÿgìFŒÞ(r Éð+1Z…¨Ó Hu»?XkaBïzïT²g·‹ÿÿ‡þþ³ýZý ýÈü’üvü_üxü—üÐü ý\ý¬ýþ\þÂþÿoÿÉÿz»:l¢¦ž‹b8ñÀŸ‡jJ) úÿÔÿ¿ÿŸÿ„ÿMÿ"ÿÔþŽþCþÝýqýý²ü=üÊûZûàú~úú±ù_ù%ùùÿøù5ùpùÂùúUú£ú÷ú1ûtû¸û÷ûü9üNüOüDü(üüçûÓûºû¥ûŽû„û”û˜ûŠûVûUû.ûúúËúÀú¯ú¸ú¹úÈúÎúðúûÿú ûûîúºúuú5úæù¹ù˜ùù³ùôù8ú—úòúVû¨ûüüÙü@ý·ý$þ„þèþIÿ•ÿÒÿâÿÊÿÌÿÙÿØÿûÿ3Wkˆ¤¯µ¦ ½È˜|”²¢¨Îç (Bcmdo“«Ý<ÇeÚ;¨7šÖ4¨= Òáðû¤dk}»6 È q S Š ¤ Š „ ® ¡ ð Ò — ² O 9 ë c ø å ¬ x À   þ … ÞÁl`Ê]61àeç¸fÎa ªÿcþüüNû¸ùiø÷»ö5ö%öRö¸ö2÷øØøù”úûnüSý9þ3ÿøŽx…jåœ_E>ƒì?m©Ë³g)ð´–pgc9ü½‰"¤ÿ8ÿ´þþ>ý{ü¼û û]ú®ù3ùÞø˜øføAøKøhø”ø×øQùú¿ú“ûuü_ý<þäþ‡ÿ€îHÃ6´t¯Éǵ‚xnagjkhbbWQ3ê´kÀb½[¡ÿ8ÿ¾þ9þÊýbýýËü üü¥üµü×üý3ýiýµýþ{þÿ•ÿ•T˜ÅëòõåÛÀ¢{X$ò¹„U ÏÿŠÿBÿæþ£þnþQþ/þþ þ þðý¿ýƒýMýý«üiüüéû¸û’ûfû3ûûéú¸ú‡úbúYú`úfúú¼úúú5ûmû¤ûÜûü)üIü\ühüüƒüülügüJü*üÿû½ûmûþú·ú|ú(úñùàùøùøùú úúú&ú'úúú8úgúnú|ú°úæúû û/ûIûWûmû|û©ûÚûüŽüêüRý§ýþ_þþ²þëþïþÿÿCÿ_ÿVÿˆÿ–ÿ§ÿ›ÿ|ÿÿ ÿŸÿ¢ÿ¦ÿÑÿæÿ $!GUYMRcqw™ÃòY²ýS–iÎ;¸/¿NÔU¾x±¼¥¹ŸipvT\¶áªØD @ íý› ò h Õ Â É W • Û YMá – c  « H ° 9 ‘ z ƒÌýcOï,0+ùgÑc”²ÙÝÿãþþ+ý üîúúIùøÑ÷J÷)÷k÷½÷+øìøèùâúËûÃüˆý5þùþ»ÿ[ÀVèi´ÄÎÑ´o À‡VÅ~M ÆxYÿØþ~þpþlþQþ*þ&þþ½ý†ýJýÉü'ü¡û+û–úúÊù²ù¨ù´ù¶ù²ù¸ùÓùúTúÏútû.üÎümýþæþºÿc“ž(” \{n>õ©FÞmòˆ4öÅŸKÜ¥f0ÿÿËÿ˜ÿcÿ8ÿÿéþÄþ”þaþ4þþäýÌýÃýÇýÖýòýþýþþ1þTþþÀþÿaÿÅÿ#–rÖ#\y…†xj5ô©h·=Éÿ`ÿåþkþÝý{ýý·üeü,üøûÑû û€ûMû-ûû&û.ûDû\ûxû‰û¢û§û û”û–û‹û{ûsûsûŒû¤û¹ûÅûÔûÞûÚûÁû«û˜ûŸûžû¨û¢û¦û¬û±û«û©û’û}ûoûUû&ûóúÂú”úFúïù¤ùQùùÎøø{øwø˜øÑø ùbùÃùBú­úûrûçûPü½üýcýÇýþƒþÂþÿVÿ‚ÿ“ÿ”ÿ’ÿzÿYÿ>ÿ"ÿíþÁþ¨þþjþIþ6þ2þDþ_þ{þªþòþ6ÿ€ÿÄÿ3WrbXF>5*$ìÿýÿøÿèÿûÿ0gÔdá‡<´j?ë†Á8 p r G ‘ºÕoÚptÅvK\ X   J â FÏîÄ'>   å g ü¦]6éÇó¡)÷.ÝÌ•K± «ð õÿ6ÿ9þÔüû%úßøº÷ÇöCööHöÍöh÷Hø#ù'ú,û/üýñýÙþ²ÿ]ÚŽ<Æ-f¥¥ƒ[ÂHÛZÖZÅBÌÿZÿæþ|þ7þþýýîýéýúýøýÏý ýNýâüoüéû‰û(ûèú»ú’úƒú]úCú)úúéùÛùËùÝù ú^úÍújûüÝüªýˆþcÿ? ߥ\Šï<lyjOµ_ýŸ*¿bó‰ÿÿþ9þþÌýÁý¼ýÙýåýþ,þ;þJþCþIþ>þ9þ+þ$þ"þ(þ(þ,þ8þNþtþ”þ¾þôþ(ÿ_ÿ«ÿèÿ3m®ü8W}¯Õíûõè¸q §:¥ÿÿþþ“ýý¦ü;üÝû‹û4ûÚúšú\ú>ú"úúú ú#úAúfú…úÇúûHûûÐûü>üNüMüNü5üþûÐû«û‰ûYû4û$ûûûûùúìúÚúÐú¯úŠúiúOú,ú úðùóù úú.úKúqútúxú~ú‚úˆú†úúvúhúTú[úVúzú’úÆúû\û¾ûü’ü ýŒýüýSþ‹þÁþêþÿÿÿ(ÿ-ÿ%ÿÿÿÿ ÿÿÿèþÁþ³þŒþ„þkþYþmþ—þ°þ´þãþÿ5ÿbÿ©ÿÓÿBp—Öéì ?;$.DH>DL;8H]›ßG› š-×hë‰'¨ _ { b   oÌH®JB[Ž ¼h  Å V  Ï k u â ` t " ¯ g ê < † ¼ v üR¾^ÔnÜ)Š(¼'±gŸ@üÿÿÿmþâý@ý>üXû¯úúMùÖøÈøºøÎø$ù¡ù÷ùJúÆú-û’ûüÃü ývþHÿ¿T¬!ëAž_ŸÆ¹ƒ‚Ü9¨"¶*¼ÿ`ÿíþkþÙýTýÄü*üŸû;ûËú}ú=úùùÙù»ùÃùØùú%úTú‰úµúàúû]û•ûßû'ü˜üóü`ýÓýKþÇþEÿÄÿFÆTÛXÃ!kœ´ÂÎØÝîôûëÍEà_ÚK¼2ªÿ.ÿÃþ^þýý«ý]ýýäü¯üüyüküdüuüŠü­üÁüýü+ýpý·ý þcþÊþÿ^ÿ³ÿüÿIŠÅñ%25D6B;=/à±Nöÿ˜ÿFÿéþœþ\þ#þëý²ýrý6ýíü£üQüü·ûrû=ûÿúÐú­ú‘ú‰ú}úú‡úú…úŽú«úÉúíúûNûrûŒûŒû‹û’û”û–û‘û™û¶ûÄûßûÜûâûêûæûÃû–ûeû'ûÓú„ú;ú úêùÀùªù®ù°ù²ùÃùäùú<ú`úxú”ú©ú¸úÇúâú û7û_û“û²ûÞû ü*ügü“üåü$ý_ý¤ýàýþFþpþ§þÌþùþÿ0ÿ`ÿˆÿ¦ÿ¤ÿ­ÿ­ÿ›ÿuÿQÿ*ÿíþ§þ™þ€þTþPþdþxþqþ‹þ¹þÉþßþÿWÿpÿ¡ÿòÿ;…óeÃ'‚¾ÑÓÕ¶„J ëñ·ì/i¤ÂÜ fÎKá:ÓUÉJmcE.8KaxÕ: y ² Ý N d b £ Ó  & ï , ’ »îŠdE;.8·a›$Ö£,™Þÿ0ÿƒþ³ýáü!ü‚ûÍú ú“ùùæø´ø®øÑø2ù±ùú‹ú0û½ûbüý¬ýfþ4ÿâÿŽ/ËG¯ô)Wx‘“”rÁK½‘ ‘ÿ(ÿâþ¦þ]þ(þÑýsýýüü´ûdûûîúÜúÉúÖú×úêúêúðúëúâúíúûûû9ûoûªûæû1ü‡üèüLý·ý)þ£þ)ÿ¡ÿ,ªˆõFˆÌð!Fo‹Ÿ²·›u0ÞnðcÜRÕÿdÿðþ–þ<þîý–ýEýûüÂü„üNü!üüýûýû&üJü‡üÇüý]ý¬ýþLþžþäþ)ÿsÿºÿóÿHmƒ“ž¤¥£¦¥š‰i9Èÿ‡ÿBÿýþÈþ™þlþHþþþÚý°ýoý:ýìü üMüüÁûûOû"û ûðúãúÃú´ú”úƒúrú[úMúSúQúXúNú?úOúcúzúú¨úÇúäúû%ûGûpû—û û¤û™ûûaû3ûþúÕú®úŠúwújúhú\úvú„úúú‰úúzúiúVúVú[úbú~ú¨úäúû`û¹ûüSü‘üÌüùü.ýsý¤ýäý@þƒþÐþìþÿ=ÿ7ÿ?ÿ)ÿ+ÿÿÿþâþÈþ¸þ¨þ¦þ¡þŸþšþŽþþþ®þÔþþþ*ÿ[ÿ ÿ¸ÿ½ÿÓÿ÷ÿ )A^Zt¡ÅÛäïÛÓÁÑÛU¤üH–ß\ƒ“ ¦“p˜ünæuzÓQnf[M:NUc£ÇçG€®C Æ í , † ¹ … [  – ÷xƒú±rJËp'ÖPŸ ´Q¡/ôØkÊÿdÿ·þþNý²üÙû=ûÔú}úLú&ú2úWú|ú™ú©úÄúïú0ûqûÊû_üýÉýgþûþyÿðÿG§à,~Ö.…ÊÝvúƒ ›<êÿ§ÿcÿÿ³þ-þŽýývüúûzû"ûâú¸ú”ú†ú“úšú¤ú›ú›ú”ú˜ú¢ú»úüúFûûÐû%ü€üÍüý‚ýìýNþ­þÿ^ÿ²ÿ^¹Kr›³¾Öö#E\tvfCã R«aÑÿ¤ÿkÿ5ÿùþ±þ]þþªýSýý×ü°ü“üŽü”ü’üü·üÙüúü%ýAýoý–ýÈý þYþžþàþ ÿQÿÿ©ÿËÿðÿ=b‰‘Šu`D òÿÀÿŠÿbÿ*ÿâþ²þyþ8þýý±ýPý ý¬üXüüÄû—û_û:û ûöúÞúÏúÆúÀú¶ú úŒúwú^úFúAúLúSú\ú`úqújútúwúzúˆú‚ú‡ú{ú€úxú~úƒúú‹ú€úmúUú>ú0ú ú(ú7úaúgú‹úŸúÊúôúû%ûBûiûyû•ûÉûòû)üXü–üÉüØüìüþüýý*ýFýsýýºýÀýòýþ@þYþqþ“þ›þ þ§þÇþïþ ÿ<ÿjÿ|ÿ†ÿ†ÿ‡ÿ–ÿ¡ÿ®ÿ´ÿÈÿáÿ÷ÿüÿ5Uin†«¶Åí&Y~»Ý÷èáÙżžª± »ÕêãS™áNÙlöaÊ4t§Ã8r­r»Ú0 € Ê Ù ã ! Q h c p — ˜ v o C ã † C æ\ñ…üΊ¯¡„ö{:ñkùŸe"ÇnÕK­ÿ!ÿŽþØý?ýºüYüûû¯ûqûGû7ûûØú¾úÔúáúüú+ûvûÝûRü×üXý÷ý“þ&ÿ«ÿ#Ü+•ùH“ß7=3'ñ¢Fðˆ´hŸÿ#ÿ™þþ„ýðühüéûû>ûûÔú¨úúkú]úQúBúBúFúXú”úÍúûvûàûLü¬ü ýdý¿ýþiþÀþÿxÿÐÿ"ÅW’¸Ûô /3EOTD2ç¼–nCâ³s?Æÿ‚ÿ8ÿêþšþQþþåý¾ý‘ýlýBýýóüÖü¼ü­ü¯ü¶üÅüÞüûü)ýaý…ý¼ýñý#þPþþÃþúþ/ÿsÿ»ÿõÿ+[Œ ´¾Ã·­¦…^(ôÿ·ÿpÿ$ÿÕþ~þþÉýlý!ýÈü‚ü/üäûžû]ûûÒú—úgú>ú*úú÷ùèùÝùÜùÓùÈùÀùÅùÆùÐùÔùòùúú"ú.ú-ú,ú+ú0ú-ú6ú:úOúkúƒú“ú½úÔúöúûûû8ûGû]ûuû‘ûÅûàûüü0üNü`üzüˆü¡ü©ü½üèü ýý8ý_ývýý–ýÇýÒýäýþ þ8þZþoþŠþšþµþÃþËþàþçþêþòþÿÿ!ÿ6ÿOÿvÿ‡ÿ ÿœÿ¾ÿ×ÿ÷ÿCzŸ»éH~ŸÖó6SXdvŒˆ‰‘˜°ÆÓý1~¼ fµ MŠÂó.U~¨Î T˜Þ!\‡Á G Þ 9 y š × ï ã Î · p  Ñ ‘ A Þ¥GÑy‘6ÕNñ„Ÿ4±8·<š ZÿÀþþ}ýßümüúû„ûûÄú{ú5úúúêùÛùíùú@úŒúôúzûüûƒü ýmýÖý=þ±þ"ÿ®ÿ@ÔaäVºFp}wN( çΤ{.ÓN¸tÿ×þIþÍýBýÕüSüýûûLûû·úbúúÙùŸùùmù‚ù²ùøù1úrú¶úüúNû ûüküÚüKý¹ý/þþÿ‰ÿpÏ;~³ì's½ >k‚Šj\U:%ýΫ†\"ß“2Ö{ÇÿƒÿDÿÿÇþˆþ9þýý½ýxýBý ýáü¸ü’üzürüvü‚üšü¬üÄüÚüîü ý8ýmý°ýþLþžþïþ4ÿsÿ¬ÿæÿ"Vƒ ¹ÊÝåéåÕ¹Œ\»ÿfÿÿÆþoþþÊýXýûü“ü6üÏûoûû«úQúúÇù|ùCù%ù ùñøÙø¿ø£øŠøkø]øLøJøVønøø øÖøùAùnù¯ùëùúTúŠú©úåúûUû‘û¸ûäûü4üTücü„ü¦üÒüéü ýý*ýLýbý|ý‰ý¢ýÌýÖýêýþ&þAþgþþ£þ±þÍþáþíþÿþÿ ÿ1ÿ;ÿIÿIÿQÿhÿyÿÿ«ÿÆÿØÿÚÿñÿES£Ö,Xˆ²àù!0:HQ_w„Š„„~voyjvƒ°Çî)b®õ?šé1r½h¥ä+nµê4…Ò : Š Ó  - b ¢ ¶ ¿ ½ ´ œ p H  ÷ ³ o Î{ûŽ1Õbë•HôŸO Ÿ'¤­IáÿoÿÿŒþ þ“ýý²ü>ü×ûqû1û÷úáú×úÏúÇúÛúáúöú û+ûhû³û ü“üýwýñý[þÅþ)ÿŽÿøÿY¾{Î(zÀìÿÚ²j-ó¥Uý ªÿ+ÿ¥þ(þ­ý*ý·üCüâû‹û9ûüúºú„úUú1ú úúú-úJú‚ú½úûQû¤ûúûVü½üý‚ýéýOþ´þ%ÿ’ÿrÚ2{É8r£Ø$EcfjifV; ÷Ï›xP%óºz0ã™IÂÿ€ÿ3ÿüþÁþ~þCþþÍý—ýQýýéü¶üˆüiü]üYübüfüwü‚üœü³üÓü ý=ýlý¡ý×ýþTþ™þÕþÿPÿ‰ÿ·ÿàÿúÿ*F_soqY;ÎÿŒÿ ÿ‘þþÀý¢ý‡ý¡ýÚýãýiý¯üücûãúúyú<úªùùøpø†øƒøoøjørø¨ø°ønø øÚ÷(ø øùXùùùmùtùÍù0úUú"úÝù!ú°úEû¨ûü™üíü ý4ýý¯ýpýWý©ý/þhþaþbþŠþÑþ ÿ@ÿ}ÿ®ÿÔÿåÿïÿõÿÖÿåÿ2OP7ýÿßÿÚÿCmЍ×ßÖìþèÏàF¦ÈÒÞú"Dv‹“¨Ñ/U™Û\Ã9¡æ&w´Øî>[}Î-‘å2 v ‘ Ç î  F m ¢ Æ ÷  6 U C " á ² l  Ï „ R ø§[Ä#Èh À,¿B¼jðuýWÞÿgÿéþOþ¯ý?ý»üBüÅûkû-ûÓúúyú„ú~úqúbúVújú}ú¨úóúKûºû1ü©üý„ýíýRþ°þÿ”ÿ^À…Þ9ƒ¾ÔÖ̺¥”‰…jKÅv²@ËÿQÿÑþcþõýšýBýûüÁü…ü@ü÷û ûNû û×ú¼ú¼úÀúÓúÙúõúûLû‰û»ûðû+ügü¡üîü2ý“ýüýhþÑþ6ÿ‹ÿçÿ3{ÄiÅjªñ4bŠ»Ðááàßã×ÓÁ¤‚EÅ{AõŸY³W¨ÿRÿúþþ9þ×ý…ýAý÷üÇü›ü{üNü;ü$üüþûüü üü*üIüü±üäüýSý‘ýÉýþ8þeþžþÔþüþ#ÿYÿvÿÿ®ÿ¼ÿ½ÿ­ÿ¥ÿÿwÿ`ÿAÿÿïþËþ™þiþþØý’ýLýýü­ü]üüÉû}ûFû ûÖúŠú;úëù¥ùzùVù5ù'ùûø×ø¯øøˆøqøgømørø“ø¾øâøù7ùaùùÍùú]úúàú#ûxûÐû1üƒü×ü&ýrýÍýþrþ°þôþ7ÿtÿ¶ÿëÿ%R†¤Óë ##75@D80üçêçú #,33?NPXi™¸Öè2C`‰£ÈïJ‚¼ó0k¾ dË4šé7xºê :l¸õ( w ± ï  _ ¥ Å ê  M n „ ž ¯ ³ ³ › v B ( ã “ E ó   J ò&Ïd쉔… wÙ9›c¾ÿ0ÿ˜þõý]ýæüxüðûyû)ûáúŸúWú!úõùÔù±ù¹ùÁùÙùýù3ú€úÕúûjû»ûübüµüýýèýPþËþ7ÿ¯ÿ \¬ð4X›½æ ':CC.#Ú¶c*þ»,ìÿ¢ÿaÿÿÂþyþ3þïý­ýzýBýýÙü©ü‚üSü.üüüûéûßûâûîûõûü,üRüqüüÓüúü/ýký°ýçý:þ‡þàþ?ÿ˜ÿøÿCì?—ê0ÆBz­Òñ $!ìϧ€HÙ›K´gÄnÐÿyÿ0ÿÛþ¥þMþþÁýŽýJý"ýòüÚü¼üžü‰üsüTüCü9ü+ü4ü:üBüQüWütüzüü›ü¬ü¾üÍüåüöüýýý0ý6ý?ý7ý0ý$ý!ýýýýýýýýîüÛüÅü¡üyüLü+üöûÉû—ûpûRû2û ûçúËúµúúrúHú'úúêùËù¸ù¥ù›ùˆùqù~ù‚ù‘ù ù²ùÏùú$úDúnú²úðú*û^û¹ûñû0ükü®üöüPýŠýÓýþkþ°þìþ(ÿuÿ¸ÿöÿ6r²ú4qªÞü2JN_fyŒˆŽ’’“”“‘”‰Š‘˜¢¬¿ËÖáøú "6^‰µ÷E¾ý9pžÚY¥õ7x®á0O} â+ Š è 2 ‘ Ò  7 / (    '  î º h  Å \  µTÒª6¨åR© yñqæh¿ÿÿwþÑý7ý—ü%üÁûZûýú´úlú-úùùÊù¬ù—ù”ù‚ù‹ù³ùØùú3úmú úãú ûYû˜ûîû6üˆüêü=ý…ýßý%þuþÆþÿYÿ¡ÿàÿ"K}·îBb…Š—¡ž§¬œ˜ŠnQ- á¹€OãÿªÿvÿPÿ$ÿïþ¼þ…þIþþáý¯ýýrýZý>ý$ýýýóüóüüüýý,ý6ýYý{ý¨ýÙýþSþ‘þÎþÿKÿ†ÿÊÿR’×O†½ò$Hnˆ—©°ÁÄÇÅɯ˜y^@&ⵎb:渆V!åÿ´ÿvÿMÿÿâþ­þxþCþ þÞý°ý|ýMýýêüÀüˆü_ü4ü üôûÌûµû¤ûzûgûFû?û*ûûûûùúìúàúêúåúëúùú ûûûû$ûû ûûôúèúáúÜúÞúßúãúÞúåúìúêúéúâúÚúÒúÌúÕúÔúëúüúû'û1û;û>ûCûAûEû:ûDûNû_ûû¢ûÙûúûü;üIübüwü’ü¶üâüýEýý¶ýñý%þQþþ©þÏþüþ%ÿOÿÿ©ÿéÿEzªÙ'Vvž¶Óð,K…¦ºçú&1JJN``~”©­»ÎÖØâêôLx°ðAXeh`ƒ‘»î%d™Ìò$E`‰Øf§ñ> o ³ Ó å   1 3 9 C H P 8 . $ ÿ ë ± Ÿ x O &  Ì‘FêŽ)Ði–"£#·5®~Ò,}ÿïþdþúýŠý3ýÍüeüü§ûNûûºúˆú_ú6ú"úú úøùóùàùÇùºù©ù¸ùÆùöù"úYúŽú³úÛúùúû7ûaû©ûáû9üŠüßü#ýký¡ýÙýþ7þeþ¡þÛþÿQÿ’ÿÌÿüÿ&=^qœ³·ÁÉÉ÷°¥©®œŒy^6îÿÔÿ¼ÿ¤ÿ”ÿ‡ÿ€ÿeÿRÿ=ÿ#ÿ ÿôþÝþËþÂþÂþÂþÓþßþîþðþÿþ ÿÿ ÿÿ'ÿ>ÿ]ÿzÿŸÿ½ÿØÿáÿ÷ÿ #1F`n~Š˜¡®²¼ÇÔÛéåìóøíæßÝÚÑÆÊ½¦‰sU<ÿÿçÿÍÿªÿˆÿ`ÿ4ÿÿÐþ›þoþ9þþÞý«ýŒýgý8ýýÒüœüjü8ü üÜû°û–ûoûDû+ûûíúÔú³ú›ú|ú`ú=úúúßùÂù¤ùŽù€ùwùwùkùkùeùaù^ùMùOùSùjù‚ùù¯ùÃùâùùùúJúbú€ú£úÂúëúû7ûaûšûÌûúû)üHüfü•ü¶üãüýPýƒý®ýØý þ8þ^þ‚þÃþîþ(ÿYÿ‚ÿÁÿõÿ-_Œ¯Èßý.Ru‘¢¹ÃÏØè÷!(-2=P\p•¦²º¼ÃÀÅÜî)&*<?ECGXg•Êù3Y“¦Äâ <n¬Ð2c è#Hh€Ž“¥Äâ,9Vbo™·¹·Çȼ½¹¹»» wX2 Û¯…@Óp§VÏ€>çšHÆ}TÖŽ:÷·‰N"Øÿsÿÿ´þgþþßý™ýhýýÜü†üFüüáûÅûžû€ûVû-ûûòúÚúÒúÆúÇúÄú²úµúœúœú”ú¢ú°ú¯ú¹ú®ú§ú›ú¡ú¤ú¸úÈúÕúÞúìúùúûû5ûVûtû’û®ûÉûÜûòû ü=üeü‘ü«üÅüÛüìü ý#ýJýký“ý©ýÁýÜýöý þ#þCþ_þ€þ¥þÈþÚþïþÿ(ÿSÿfÿƒÿœÿµÿÑÿéÿ-BRho{„“¯ÀÝîô  $%)(,()117=KC71'" ûóÛǹ¦’|`C"ÝÿÂÿžÿ€ÿ\ÿ<ÿÿõþÓþ¬þŒþnþUþ2þþñýÏý¡ý|ýLý'ýøüÌü›üfü<üüåû¸ûˆûgû5ûûÖú¯úxúQú úúÚùÀù›ùzùeùLù3ù$ùùùöøâøËø·ø­ø ø¥ø£ø¯ø³ø·ø½øÃøÀøÉøÚøïøùù4ùPùmùùºùãùú2ú^úúºúÝú û=ûoû¢ûÞûüMüü´üòü3ýlý¦ýèý,þbþ—þØþÿ8ÿvÿ´ÿüÿ5`ŸØ![Àý1aŠ¿í'Z‹¼ãC|©ãHv¥Òü$Um–®ÕíI€¦Îû/R†µò$ V “ ½ ã > Y n y Š š ­ ­ ½ Ó è ù     "  *  ü ç Ê ¥ ƒ e H . Ù ž a ) í½j(Ï}Àd  Jì“+Îx´Rù?î‰5Õÿtÿÿ•þ"þ¹ýCýÙüvüü´ûRûøú úTúúù°ùmù0ù÷ø¼ø‘øeø.øú÷Î÷ª÷Œ÷o÷a÷F÷;÷0÷$÷ ÷÷÷ ÷÷ ÷÷,÷A÷H÷X÷v÷Š÷©÷Á÷ç÷øYø‚ø§øÖøÿø3ùaù ùÒùúTú”úÕú ûLû„ûÂûüAü‚üÁüÿüCý‚ýËýþ?þþ´þñþ(ÿaÿ•ÿÔÿ Dt¨Ù7j”Áê?_¢¿Ùò%=Ran}ˆ‘  ­§£š™ˆzi[J:.þÜǧŠiN1çÁ˜iB꺂U$íÿ¾ÿÿQÿÿßþ þeþ*þðýÊýýbý(ýçü°ütüEüüÁû‰ûLûûâúœúhú/úüùÔù¦ùùCùùñø¿øŸønø<øøò÷Ï÷®÷’÷y÷i÷W÷J÷8÷6÷+÷*÷$÷÷÷÷÷"÷3÷G÷Q÷m÷‘÷£÷µ÷Ö÷ñ÷ø0øPømø“ø¹øçø%ù^ù–ùÅùôù0újúŸúáúû[û˜ûÔûü`üüßü'ýtý¾ýþýBþ€þ¶þðþ/ÿlÿ¬ÿäÿ,a§æ8{Ê Uоò/o°õ3oŸÔ?o°ä>SvžÏ MÁÿ(Xƒ±Þ = ` € • º â  7 X o ‘ ¬ Á Ö ÷   . 7 ) 6 G ^ ` g ^ R > > F B @ 2 /  ÷ Û ¸ — m ;  Æ † T  ¿+Õ†2í¢Eî¢8Út¶Põ*¯Dê Ÿÿ<ÿÕþTþÛýeýùü…üüµû?ûåúyúú´ùeùùÏøŒøNøøÑ÷¢÷k÷-÷õöÑö¢öŠöaöIö-ö#öööö ö öÿõööö#öCöcövöö°öÕöþö'÷V÷‹÷Â÷ø;ø€ø¸øøø@ùƒùËùúcú¡úçú'ûrû·ûü:üŠüËüýUý›ýÝý'þsþºþÿ<ÿÿÁÿ7°÷/n¤Þ Hw­Ö$Heˆ®ÊÚý '5>K`fojpmddQB8!ýìй¢€kC,ùܵ‰j9צh$î«t=ÿÿÍÿ…ÿTÿÿëþ¨þlþ,þëý°ýjý(ýàü¯üoü0üõû¸û€û@û ûÐúúTúúÛùšù^ù%ù÷øºø}øMøøó÷Å÷£÷{÷[÷0÷÷ðö×ö¸ö¤öŽö†ö†özövötöfödö]öcömöoövöƒöœö¬ö¼öØöõö÷:÷U÷u÷š÷Ã÷ú÷7øhø¤øØøùSùùÆù úQú¡úßú(ûdû¦ûàû6ü€üÎü ýaý¬ýõý<þƒþÖþÿmÿ¶ÿLžê8Íh¬ñ<Óh¥ÙK‚Áö<p•ÂèH¼õ.f—Ì % F o – ¹ ß  & N p › « À Ò ó  7 H L V [ _ c m t v ƒ ˆ € | ˆ ‘ ƒ †  j Q J /  é È ‡ O  Ò ‘ g ' ïªlÒƒ5â’@íœ/¿`ÿ¥Hî”)¼Pæ~·ÿMÿÚþdþëýiýïü~ü ü£û4ûÏúbúúœùLùúø»øxø3øò÷´÷v÷9÷ ÷Øöµö†öjö=ööùõàõÞõÒõÔõÑõÍõÍõÉõÂõµõÉõÜõñõö+öIöcöˆö°öáö÷Y÷œ÷Ü÷ødøœøàø1ùwùÀù úQúœúáú%ûgû·ûüVü›üäü ýdý«ýïý5þxþÀþÿBÿ‚ÿ¼ÿ9‹ÃB„¹ñ)]›Ë-PoŽ«Ëà2DKKX_lyuuknXdPE5-ê׿ªy]7 ܰOñ¸‡JÖ™\Úÿšÿbÿÿáþþ^þþâý ýdýýßüügü&üèû´ûˆû=ûøú»úxúKúúÐù’ùWùùÙø£ø\ø%ø÷÷Å÷—÷m÷L÷*÷ýöáöÀö­ö˜öözömöWöSöFöMöQöWö_öjötöjölö{ö…ö˜ö½öÉöàöóö÷3÷T÷›÷×÷ù÷'øOø~øªøãøùmù®ùóù1ú„úÃúýúGû™ûòûCüüÒüý_ý ýúýNþ¡þôþAÿ‚ÿËÿX§øQ§ö?à:‰å5‚ÅC¯ñ+q«à[šÜ#f§Û E e µ ð $ N m ‰ ¥ Ê Ü  7 m • Á í   0 @ G ? M L D 3 ( - / . 1 , +     û í Ç j : þ Ú ® Š E  ¤ i # áKÁ^™2Ìp«7ÑmÍ]ýŸ/ÃTÞÿ~ÿ ÿ™þ*þ©ý0ýµü;ü¼ûLûÔúrúú·ùTùüøŸøMøù÷¼÷t÷:÷ööÚö¢öuöFöööÞõÎõµõ©õšõœõ›õ’õˆõŠõŽõ‹õ–õ—õõ°õÎõøõö6öZöŠöºöîö%÷_÷ª÷ò÷?ø‰øÍøùZù©ùïù<úŒúáú2û€ûÉûüYü üíü0ý{ý¾ýþLþ’þËþ ÿ>ÿ†ÿÁÿ<~¼=|·ù0g™Íô0[{£ÀÚõ(=XiddenniWTJ>8"ôàϽ¥ŒoT0 ÞºŒa&ûÁ‰N ΊFÆÿ’ÿPÿÿÆþ‚þ?þøý³ýjý!ýÛü§ühü8üùûÆû€û7ûôú­úoú4úóùÂùuù1ùæø¥øeø*øó÷È÷œ÷m÷,÷ ÷Úöµö–ö|öjöQö@ö)ö!ööööÿõøõîõóõðõûõöö+ö<öIö^övö•öŸöÅöâö÷%÷N÷w÷™÷Ï÷ øKø”øÖøùmù«ùíù)ú{ú½úûZû·ûüSü¥üðü5ýxýÃýþ_þ¶þüþIÿ•ÿîÿ?’é;’ê:…Ø,ƒÌY§ê:ÉQÓ ;t²ì Y”ã* i Ÿ Ò   < [ s „ µ Ü   < u ” ³ Ñ    . D N < G X ] J B V _ U X ] Y >    ú Û Ú Î ´ n J # ý Ñ ¥ h  Ò | ; í­8î;àrÀf¨:àk RFáÿcÿÿ“þ&þ©ý&ý«ü0üÁû`ûùúŸú=úÜùoùù£øYøÿ÷É÷†÷X÷÷êö±ö„öXö:öööóõäõÆõ³õõõõ‰õ’õ”õ“õ¢õ¢õ½õÍõïõ ö6öZö~ö¢öÎöüö8÷p÷Á÷øRøžøæø9ù{ùÊùúdúµúûJûŽû×û$üiü¶üýNý‘ý×ýþ^þŸþØþ*ÿmÿ´ÿöÿ4s²ö3u¼ú4l Éû%S}›Éãû*?Qct€yytwsttnupXE3$íØµ—}]-峊I!Ý£d+á£\Ýÿœÿ]ÿÿÝþþOþþÃý‹ýGýý»ü‚ü@üùûÄûqû4ûûú³ú|ú=ú÷ù­ùjùùÖø“øZø øñ÷µ÷„÷I÷÷ìöÇö¤ö‚öcöNö@öö öøõ÷õþõóõøõëõâõèõòõúõöö.öEöRö[ödöŽö©öÊöíö÷,÷Z÷‚÷¸÷ñ÷.øiø±øöø6ùnù»ùýùNú¥úûúXûžûãû)üzüÃüýiýÂýþcþ¬þüþNÿ¢ÿ÷ÿV³_¡í3|Õ+„Ç_¥X® Q›Û(`±þHÎ , T ƒ ´ ì  C j ¡ Ä è  A ƒ ¬ Ù û  5 V } ´ Í ê      1 3 '  ö à ç ã Ö Å Ã ³ – v \ H 6 -  ó À u <  Á ‰ K ö Ÿ B öªQ®SÝyµOê…Â8Ôbª:×tœÿÿ¨þ9þÐýcýòüüü’û"û¢ú0úÐùeù ù³ø]ø øº÷w÷:÷ÿöÇö˜öpöQö,ö öæõÎõ¿õ§õ õ†õˆõõõ†õ‹õ—õ£õ§õÀõÒõæõöõöJöyöªöÜö÷I÷{÷º÷ø÷Iøšøíø=ù‘ùÝù&úwúÃúû_û²ûüXü¦üéü4ýwýÂýþSþ þæþ1ÿrÿ¸ÿùÿC…È B…À KÃþ3_½ì 4gš«½ÏÝòöþúìåÜÞÊĸ ‘cK3 á¼’hBܯm:ø¾~9ô°dÉÿ}ÿ.ÿäþ§þhþ þßýýWýýÃü}ü?üüÅû‚û<ûøú§úaúúÔùùOù ùÆøŠøIø øË÷¢÷{÷@÷ ÷Ùö§öƒöaöLö1ö&ööùõâõâõÐõÎõÔõ×õëõöõöõõõ÷õööAöKökösö’öªöÒöôö÷S÷÷¾÷ÿ÷1økø§øéø3ùuùÂùú[úúíú;ûŽûåûAü¤ü÷üAýýÛý0þ{þ×þÿzÿÇÿ&Ü@™Y¬ûU©ýQžè>Œâ*‚âKª÷1f®Þ$ b ¨ â  P – º î 0 ` † ° Ñ ò  P “ Ä ô % S _ r ‡ ¥ º Ò ã å Ý Ë ¾ ¾ Ð Þ ã à ê ä Ä ª ¢ ‹ u ^ R * ø Î º ¤ } S  Ó € 2 á ™ K  Æ ^ ù‹3ÊtÎgù‹ž"ºMèz† ©ÿBÿÙþ\þÙýQýÍüBüÀûKûÝúpúúŽù'ùÀø^øø·÷q÷1÷èö¨ömö/ööõ×õ§õˆõmõRõ0õõóôèôÕôÙôÕôÓôÖô×ôäôëôðôõ6õeõ•õ¼õæõüõ8ödöªöèö3÷‡÷Ï÷ø`ø«øùXù½ùújú¸úûOû—ûíû7üüãü4ý‡ýÌýþgþºþÿgÿºÿK–ße²üE—Ó J†¶õ%W…©Åé"BRo{‰Šˆˆ’І}kj\X=2! ðÌ P)ýלa!ç§b$טAð—Pÿÿºÿ{ÿ2ÿéþ¥þMþÿý°ýgý(ýàü›üJüøû©ûTûûÂúƒú2úðù¥ùSù ù¹ø}ø8øø÷Â÷ƒ÷G÷÷Þöµö‘öröOö.ööîõÌõ¶õ¯õ¨õšõ¡õšõ™õ›õ—õšõ¥õÂõØõìõööCöTönö“ö¶öãö÷G÷t÷¡÷Ý÷øXø¦øèø(ùpù¹ùÿùZú¬úûUû¬ûürüÃüýýÖý5þþéþOÿ¦ÿýÿR¸|Ê3‹Û7¥þR¯ h¼g¿tÒ3ß0 € Ø  i ¤ ã  X … É ø 3 e – Á ð  L { ­ à +LRg‰±Êàó  þðëòîÜÖ½°‘~aM+ Ù ª i = Ç ‹ S  ¿ l % Ô  1 á {  ¹EÖfú2ÁHÉF¿BÊ\ÝaÙXÃÿ>ÿÒþeþåýkýéüdüÚûPûÈúVúôù–ù)ù¿øUøè÷†÷*÷ÝöŸö]ö"ößõ¥õlõ#õîô¾ô˜ôôgôMô,ôôýóûóúóôô"ô1ô*ô:ôQôuô›ô×ôõBõwõ©õèõö^ö¨ö÷U÷£÷ñ÷8ø„øÔø#ù€ùÜù6ú‘úçú4û†ûÖû4ü‡üëüFýšýêý@þþëþGÿ™ÿZªï4yÇb«ò0X‘¾û6gšÐì +B\nˆŸ²·Å¾Â¿ÌÉÆÀ´¯š„kI5úÏ qB Û¨t<ö´e#à™Fÿ§X ½ÿqÿ$ÿàþ”þDþòý¥ýPýöü¦üSüü¸û]ûüúªúPúóù¬ùaùùÒø“øHøÿ÷³÷z÷1÷÷ö»öwöEööôõÅõ›õ{õZõBõ'õõüôóôåôÜôÛôÙôÖôÙôÛôäôìôüôõ2õJõ^õ„õ¥õÄõïõöIö|ö°öðö'÷m÷¬÷ð÷Mø—øìø>ù˜ùãù:ú“úéúFû¤ûügü×ü.ý˜ýÿý\þ»þ#ÿÿðÿ]Ã6–ÿY¾‚ç[Ã%‰ï^Ä#ëT½ | × 2 ì 1 h Ÿ ß  ` ’ Ö  C | ³ ç IÇí&Ee€¼ÁÌàéÝßßéäÙ²”p]L>) ÷džCÏ † M  Ç u % Ö = ò C Õ ` Úpö¨9Á'§&©,ºDË+¢ }ÿñþyþþ‹ý ý‚üøûrûêúmúøùˆùù¨ø9øÎ÷]÷ûö«öaööÖõõLõõÀôˆôWô0ôôîóÖó°óóóƒó}ó†ó–ó£ó´ó¹óÆóÙóùóôRô…ô·ôçôõRõ‰õÏõöyöÍö÷g÷¬÷ù÷DøŸøüøZù¶ùúsúÏú)û…ûàûHü¯üýmýÂýþjþÇþ%ÿ„ÿëÿU­øB‰ß.|ÆU•Ê;s±ó!Su”¶Ìæ-3CBNGOZUPC:*ëѲ™wIè®Oæ¢cË}-Û˜J¸dºÿmÿ ÿ»þfþþºýbýÿü¦üKüòû›ûJûôúœúEúöù¡ùUùù¸ø|ø-øÚ÷š÷G÷÷Ïö™öpö>ööÒõŽõ]õ4õõóôÑô¸ô±ôžôˆôyô{ô~ôôŒôšô©ô¸ôÁôÕôóô õ,õWõ€õ§õËõüõ3ögöšö×ö÷S÷–÷Þ÷*øwø¾øù|ùÕùDú›ú ûfûÍû*ü•üúü\ý¿ý2þœþÿrÿàÿU¶#ˆõbÆ:©ŒúwÚI¾-¦òM ª  Z µ \ µ  i ¹  T ¤ ã 0}ºæQw¦Ò Ms•»×ò÷ø(8NJ,#ôïÝÐ¥|Eجp2è•Oü ¦ X ù ¢ 7 Õ [ ë |  ¡ 1 ÂC¶-Ÿ }ðzôdÉ'ú`ÔÿPÿ¼þ&þýåüAü¥ûûú ú…ùù†øøœ÷&÷·öfööÀõiõýô ôIôôÊóóYó9ó óÎòŸòwòaòVòPòYòRòFòBò@òIòdò†ò²òáòó9ómó‡óËó ô_ô¾ôõXõ®õòõFöŸöïöU÷½÷0øŒøéø=ù˜ùûùfúÏú=û³ûüyüÖü4ý•ý þ~þéþSÿ³ÿkË}áGœï:ƒÍa«üEs¢ËóDs¶Öãþý,-0úëÕÆ´”nI漈NÕ‹IÁm!Ñ…9؃ÇjÉÿjÿÿ£þHþäý†ýý¾ü\üüû§û6ûÕúxúúºùkùùÁøoøø¸÷j÷÷Èöxö6öþõÔõ‰õDõõÓô°ô|ô_ôBô"ôôæóÏó¼ó³ó¨óªó´ó´óºó¼óÈóÕóëóô$ôDômô’ôµôäôõNõŠõÇõöYö öðö<÷†÷â÷=ø£øùoùÍù<ú¥úûwûÙûLüºü'ý•ý þxþìþaÿàÿPÄ?µ6¯-­• ЇÛC ¤  e Ä  s È 3 “  d Á Z¬ï"h¿Fpš²Üþ#BgƒµÖÛ³°»ÑÐÕßÜÀµ¯ŠW: ý»GÈRý1Î b  : ë ‹ ý t ë l ßaõzøcØ4„èNÁ.›_Äÿ ÿvþÓýNý®ü ünûÃú!úù ùø ø÷÷ö ö™õ=õÙô‘ô?ôëó•ó4óÝòòLòòîñÎñºñ“ñjñ@ñ+ñ*ññ$ñ6ñHñ^ñiñ€ñ®ñ½ñïñ òZò”òÓòóVóŸóòóBôôñôHõ£õö_öÀö*÷÷ øtøØø@ù¦ùúuúâú_ûÈûGü­üý‚ýéýZþ¾þ4ÿ ÿkÈ)†ßH¦úN î9‡ÉOÌü'Py›¾ßù.8DCKHHC.õй–pP'ê¤k*ã¬[Ë%ÌyÇo!Áeùÿ™ÿ4ÿÅþ\þúý˜ý-ýÓügüÿûû$ûÁúdúú¤ùGùãøø2øÜ÷}÷-÷Òöö:öàõõ@õÿô½ô~ô?ô ôØó©ó}ó_óAóóóéòÞòÌòÅòºòÂòÌòÙòÞòøò óó0óPóxó£óÔóÿó1ôeôœôÜôõgõ«õöSö±ö÷e÷¿÷%øøù{ùëùiúÕúRûÄû.ü üý•ýþ“þÿ¡ÿ3¸9¾CÄPÖgãhðrƒ¤+ ¬ # Ÿ  h ¿ # w Í # ~ ó fÝC®yÁ5e•é %@jºÜú9TgTM;5+(ò縉M+éžY$ÎrÈgÿ’$© A Å H ¿ J Á 0 ™  iÁ+ŸwâA‹Ý7–Ý*~ÿÒþ&þpýÀü üUûºú%ú…ùõøSøÅ÷0÷¯ö#öƒõõ†ôô—ó$ó¹ògòòÞñ›ñ^ññâð§ð|ðFððûïèïØïÊïÆï»ïÆïÚïðï ð,ðUðƒðµðÝðñCñ‰ñÐñòtòÉò(óƒóèóHô¶ô!õ‡õýõföÒöL÷­÷-ø¡øùùú†úû€ûùûƒüðücýÚýGþ½þ"ÿ¥ÿ{èXÖ?õZ®pÅ_­ô2o©êNn™±ÇØèòú  üûéàŲ˜o7ú¸~>ú»q1Ü@æ+Ón¦<ÅUêÿ„ÿÿ“þ$þ¬ý@ýÇüRüàûoû ûŽú"ú®ùDùÖøløø›÷3÷Òödö ö¤õJõîô“ôEôòó£óaóóäòžòsòFòòòÒñ¶ñ‰ñxñfñUñOñ@ñIñ[ñ_ñpñˆñ™ñ·ñ×ñò2òhò“òÏòóDóƒóÍóô‚ôÜôBõ©õöŠöîöe÷à÷KøÁø7ù¸ù0úú û¥û+ü¹üFýçýmþÿ’ÿ0É_Pán•8Ó_è„  ”  „ û b Û F Á (¡‹ „ðK¢í9qžãiœËë?dz ±¿ÊÕÒô·¤•}mB ç«z'Þ}´JÞf •*¬.¢  ƒ é N ¤  d · bÃhÄgŸÙ]—ÿÙþþUý“üÕû#û`ú¨ùòøLø³÷÷köÙõ?õôýóróîòwòò ñ4ñÖð‰ðBððÓï™ï[ï$ïíîÁîŸî„îxîpîpîtî†î–î­îÁîêîïFïtï«ïæï&ðfðµðýðcñÉñ7òžòó~óåóWôÇôCõ·õ-ö±ö,÷¨÷*ø¯ø<ù¿ùUúÞú`ûíûrüëüdýÉýþhþÈþÿzÿÓÿ)“”)³,¤¦!šøY¢þK£ßb‡Ê F i Š ž ¸ É á ï ã Ö ­ „ V % íŸAïUÉw+Ø}&ÄKÃ6•dÊ#ÿèþEþ°ýýŽüÿûvûÜúLú©ùùvøì÷L÷¿ö+ö¨õ2õ´ôEôÐókóó¤òEòçñƒñ'ñÀðfððÐï‰ïRï%ïùîÎî¦îŽîîhî[îjîqî‘î®îÖîûî6ïkï¯ïüï9ððÙð%ñ†ñØñDò»òMóÏóKôçôõ;öìö«÷pø5ùúÕú›ûfü$ýßý•þHÿ ¾=þºr4ð¡Kù—; å ; Ý 6 ú ¸‹TÂs ¤jº™ˆ‹…Ó!Kdiwƒ’©ÂèïíË,­Mÿ´G烕5C?'ܹ K  æ¡Mí >ÒHÿùýÌüûLúùì÷ÚöÙõÑôßóòòò]ñ§ð ðbï½îîŽí í³ìaììíëÇë¦ëë{ëoëYëDë6ëKëuëÁëì€ìóìníôízî ï‰ïð›ðDñòÎòœógô@õ#ö÷Ó÷ølùBúûŸûEüëü›ý1þÍþ[ÿæÿmù}çD~Á<lŒªÔ"Iv•°¿ÏÜåëùóý(BEMKEI3ýà¿°štT6âæ‘‚w]RN?2%"çÆ«…_0 ß¶Z"Ü«ÿ7ÿ¹þ0þ©ý$ýœü ü~ûìúcúÏù=ùŸøøk÷Ùö>ö®õ"õ£ôôóóžò%ò«ñ-ñ¾ðNðèïzï ïÀî_î"îÛí¦íí\í6í íßìÇì¼ì²ì¦ì®ìÊìíìíLí‡íÊíîgî®îøînïäïZðÉðCñÊñXòßòióïó˜ô6õåõ{ö#÷Ã÷køù¨ùWúøú™û>üýÁýrþÿÐÿ—`ã´y;è©q.Ón  Ç s " ´ 3 ´ . ŠÉ9šð8ÂO©I}›˜™±âKx²ÅëX¬Þ³­«­—£wI¾cð“*Þ<œÂ¦t_Ù'B – ° ¶ d õä <‰z¾þmý*üãúùNøA÷€öÜõ8õ†ô¨ó±òÁñúð]ðÕï$ï’î)îûíî îîøíäíÝíëíîQîvî°îóîiïôï‘ð&ñÀñOòçò„ó=ôùô’õ#öœö%÷Õ÷¥ø_ù$úÚú¥ûgü ýÙýnþëþ\ÿÑÿLÕYÚPº™ýOmˆ…Ž–§¨´²¦žSþ¦Fí¶x>ü¸u/ò±aÀÿ~ÿAÿÿ÷þØþÎþ¿þÐþÅþÐþÁþ¸þ¢þˆþŒþ–þ¡þ¥þ·þÐþÿ8ÿgÿ›ÿ´ÿÓÿåÿ÷ÿûÿúÿ.S~¡¿ÆÂ¯•mjP8Ùÿ³ÿoÿ#ÿÉþ_þúýŠý ý‘üü~ûõúzúòù]ùÊø)øŠ÷êö9öõ÷ôUôºóó™òòŽññ|ððï8ïÙî‹îDî îõíÐíÂíŸíŠí‚ííŠí•í•í¼íæíîBî…î×î1ï„ïÍï&ððùð[ñ¿ñ6òµò@ó¶ó;ô»ôKõÒõZöðöw÷ ø®øGùäùúû¼ûPüüü¢ýOþðþ­ÿx;øµr)ݬHñrõ‹ 2  < ¨ " ’  k ¼ þ K~·M¿w»é&AKf‹ÃV³ ”å3xå,El¯Òǹ·Æl»¶}6Ø£_ð`óˆ ¦7›Žs‹ é 1 $   Q@ºlœ<ÿþýàûnú.ùø÷7öAõ-ôóOòñéðAð ïçîTîîÉí•ífí.íí(ídí¸íûí,îhîÌî<ï‘ïð—ð0ñÁñzò4óïó³ô^õþõ¹öq÷øØø˜ùCúÑúnûüÂü~ý/þÆþVÿáÿcÞJ™ìBœúAy¥¾éó3; úÞªaχOµ[õOýÿ¯ÿWÿÿ¯þhþ$þÛý«ýhý?ý ýýòüçüðüôüþüýAýaýý—ýÐý þPþ‘þÜþ"ÿrÿºÿùÿ?‡Éþ0]¦Üû".5;C@8-!þà˜]ц+¼ÿLÿÍþFþÁýJý½ü)üûæúGú¤ùþø?ø÷»öøõAõŽôìó6óxòÁññð÷ïeïÑî\îßí{íí¾ì}ìJì ìììëõëðëôëûë ì1ì{ì´ìüì<íŽíîsîËî3ï®ï+ð¥ðñ—ñ$òÉòJó­ó9ôöô£õ'ö ö;÷æ÷’øBùþùµúpûüâüµý…þ?ÿóÿ¡lJíǘUá¥K È T ú Ë ‡ 5 á ¢o‘éZ²ü'‰üZ‚“ËýüÚë4‰Ðïýa«þù>d~Ò0qW5]õO7þÄ´g4ã¢Và{J*¥œÉú8ž >   àa± X•ÿöýüQûúmøêö¢õÌôÛó«òdñ)ð*ïdîÑííqì¤ë3ëë*ë ëÚêÆê±êÊêêê1ë„ë÷ëgìâìcíîÛîï)ð³ðCñðñ±òaóøóªôoõXö>÷øâøÊù—úGûæûü9ýíý–þ1ÿßÿ£<ËXùoãJ–ÙFl„¥¹Ç±ŒpIú—·h¶;ÊZâ}ûÿ€ÿÿ”þ:þÖý•ýSýýîüÈü«ü ü™üšüžü—ü ü¾üøü8ýpý²ýþ_þ½þÿgÿ¶ÿTšâ/…É_ŸÕø'HQPE9,/%:ç›>ÉQÏÿjÿðþmþÖý@ýžüéû/ûhú¨ùÒø÷÷÷9öoõ£ôÌóïòò#ñKðrï›îúíIí¦ì ì†ëë®êMêûéŸé^é/éééé+é\é“éÛé1ê¥êëˆëúëuìëì‚íî´îGïð³ðañòÐòŽó2ôÕôoõ&öíö¹÷køùÙù¤úyû<üýØý²þ‚ÿL⿚nOé¹ ~ H  Û ¿™=ÄLÓ5’ò^åƒI~¦Ì²Ÿ·è=i‚§ËóÒ«¥íg²äÿEY¦äÛ¸ÏàÞÅ‘J Ás,]hwàØ•ü³• ˜ - ‚ Âoµ¡þÃü!û«ùøšöFõôŒòñ¡ïyî4íéë½êêévéðèŸèSè/è è"è èè!è8è{èéÊénê)ëòëÒìªí„îEïðÐð’ñsòjó`ô3õ ö÷ô÷åøÉù£úwûCüêü’ý9þàþqÿÄTé‡,¿2{¼ F‰Á(]…¯°ªw=÷¢Q ¬Xù—0À3œpÛÿDÿ¶þCþ×ýnýýÁürü&üÙû¬ûƒû[û=û0û8ûBûuûªûôû*üüèüZýÎý1þšþÿþxÿæÿgÞPÐB¾!p®çFc|“Ÿ°™ƒSËy¨5ÁMÞS¿ÿÿsþ¶ýùü üQûhú’ù¬øÉ÷Ööãõâôßóâòëñþðð'ïIîíÍì%ìgë¼êê‹éûè‡è%èÌç‡çSç7ç1ç7ç?çLçuç¬çôçTèÈè<éÌéaêëÐëƒìEíîÔî¬ïð_ñDò$óôéôÓõ¹ö¸÷°ø–ùjúDûüýëý²þzÿc> òÒžuAÀŽV  ó Ï ˜ p U$Íy·]íq *°!væI}‡´ß?^So­ãúâÞäó÷_E &:V)Þ¾ó屜Mýð¸‚.£ ‘GrÜÍßr ¿ Þ 8Çà$Toþpü©úßøøöõlóÚñðPïííìüê”éKèxçÁææwååâäääååEågåÀåBæ çÄçnèQéYê‚ë¸ìðíïIðhñ‹ò«óÛôüõ÷.øFùeúwûyügýAþÿÊÿ9ÉH¯ãGœî2`’ÁÚÕȼ¼¿ÊÖÒ¬”Šf1á>ÿ͇AÛ‚¿GÜgêÿxÿÿµþ^þùý¡ýIýóü²üzü/üëû°ûûrûeûdû|ûšûÐû ücü´üýSý²ýþþÿ…ÿûÿ‰®BÈ?¶vÏ`¥Øêÿõá´nÎièhâH›ß3ÿ<þCý;ü,ûú ùý÷êö×õÀôwó)òçð°ïîvírì…ë¶êêéÞèèwçÒæDææå˜åMå&åå*ånå²åëåæOæ²æç®çJèèè£énêFë-ì)í%îïÛï·ðµñÂòÅó—ôpõrö•÷²øÖùæúÙûÃüªý–þwÿV, Ó“U  É ‘ e ! Ý ´„Bþ’BßZÏ7½1±Žêa¾Þ0Mr†œÔâÔçíº¬«Õº•‰“ïõ÷³Ä¿Î¸›…Xr6ì1ˆ€SYz0µ`   Ñ!uÜ#(5þVücú]øö°ôôò`ñÍï+î™ìóê[éôç¶æ{å˜äþãã ãÖâÉâ±â¬âÆâüâlãúãŽäQåtæ£çËèõéhëÚìGîžïððKò™óÖô0ö¯÷ù^úŸûóü1þZÿ>à‹¯K¶rà5|²ÉÞÕÄ ~G÷ïÝž|P×N»Œg8ý¹|)ãx"Éx"Ûÿ—ÿYÿ ÿÃþyþ2þÓý†ý9ýéü›ü]ü,üüü üü2üGüYü‚üªüÖü ýQýžýþ|þðþtÿ”0ÂGÇJÒA·'•ú\¯õ#8&ü¿f„ügÏ(y´ÔÞÿ±þŠýEüû±ù@øÀöYõàóeò÷ðïîîìÉë›ê†é®è»çÌæúå4åuäïã‰ã ãéâÎâ¤â»âßâýâ)ããä™äOå æÕæÁç°è’éxêoëjìpíî©ï¾ðâñó$ô*õCö\÷^ø|ù•ú’ûŽüsý[þWÿWJ<NOB"ñ­v6 æ ² ¡ e =ÇeÁXö|­“‚à8Џ8twˆ†tt@!9sh'U}¶ƒ\ýäÆÞ½Ãö¸Y_jv3þß~¤¯'ÜH§`P X u œ®ã ¬ýsûaùd÷jõˆólñXïWí›ëêŽèòæOåíãèââdáÚàiààÛßâßJàÓà9á©ázâ§ã×äûå,çpèÍéUëæìªî}ð3ò³óCõæöyøßù4û…üäý4ÿƒ¯¿†9äŒüjÈ!T—ÃåïÚÄšm-ø´ƒ6îÔ°i-ûÌ‘IËIã™Yã¥`¤NöÿŠÿ5ÿæþyþþ¿ýrý$ýÑüü üÙû›ûpûQû2û,û(û@ûeû›ûÇûýû8ü˜ü÷üjýñý…þÿ¿ÿs!Ìv¼RëxþêX ì' Ý›<ÆG±S|‹‹lDÿ÷ý£ü<ûßùpøôöNõ¤óòƒðï†íì¯ê¡é¬èÁçÐæõåå/äŽã÷âyâ!ââáÁáèá+âaâ¡âàâ&ã—ãAä÷äÃ唿{çzè¥é¸ê¾ëËìÊíâîðKñhòtó“ô”õ²öè÷8ù^úiûmüQýEþ5ÿÿÿÇ©¥ºÒæÏ™V å ± | ^ M *íСq7Ü’FÐFÎEÍivÞ@d¬ß !   µ—h³éã¤F*(K éC  à·sú_td[RËž7vÜ—j¥ð N â I œ×Ê“Jÿçü†úiø2öÛó¢ñªïÙíì‚ê§èÀæåŠã>âKáfà®ßCß/ß:ßxßÈß&àhàØà‹álâ{ã»äæ›ç9éëêÈìœîDðØñpóõŸö!ø…ùôú[üÇý(ÿŒÁÚ¸‡*»+ƒÈ c¶ø/Kkp^G¶s@ðíÓ¸vL®W§YÎ~3ÎeçdÇ?ªÿÿŽþþœý ý¨ü-ü³û;ûÂúRúàù‚ù9ùùüøôøÿø.ùrù»ùúfúÄú0û¥û3üÊü‰ýOþÿýÿåÖ¯`Óz'ÀKÆ6 « ú 2 T [ 5 ù ž ? Æ&sž¹º±’`Ëþ‚ý?üòúvùõ÷tööôhóÐñ0ðwîËìjëê³èzçJæ'åOä¦ãåââ…áéàUààéßÉ߯ßÖßà~àáŒáâ¼âeã=äYåzæ‰ç½èóéëì×í ïFð™ñÚòôšõ÷6ø_ùŽúÈûýrþuÿmiP03$úåàÔÒ È z þ ¡ C ñ ÂAì¦Z»2®HÍ>ËXÖ,dÐG²Ã×ícÚ 23@h‘X ‰+9Î ìÉ¿íXùˆT¦åØÅ†š_d6Li玃²z°jï!ò œ ‚Á>Wþ‡ûùâöXô¤ñ!ïÂìÇêèèVçÍåeäµâBáà5ßhÞÓÝ|ÝyÝÊÝhÞߣß@àáàáãöã3唿Oèøéìëòíúï¹ñwóõ­ö,ø‘ùßú4üsý¨þñÿ=M> Ïš0ÑGg™Ñ" R w § á ú ä · „ A  麋?ÿ§JÒBŒ»úM›ß%c¡ÿÑþïýòüîûäúú7ùøè÷r÷÷ªö]öööõÉõ§õ–õ¾õòõJö¯öJ÷ó÷´ø–ù‚úrûlüiýNþ8ÿ.&õæÎ³a ËY Ù 9 ‚ ² Õ ð ë ê Õ ® c tÓ.ñ;n™ˆaÿÇýzüEûúÊøŠ÷Möõ¿ó"òbðî”ìuê‡è°æêäwãWâ%á.àrß—ÞÝÏÜåÛ ÛŸÚyÚ|ÚÃÚVÛÜíÜëݤޗ߹àâá>ãâ䦿|èêœì”îŽð‚ò9ôèõ‚÷æø4ú ûùü=þ…ÿá3uPõm®Þ)–·† F û « 3 ¢ ‘ ¡g0Ü©ŒbJ&Ø\ýŠ®çZÖ.ýçIuQùÈáÙ†2ß2ôQ?0¶‹ò÷ÐþXäJŽÍÄt¢W®…Ëâ²=-΃S É o )kýMú—÷éôò>ï±ìêÔç½åóãIâÅà\ß1Þ%ÝÜKÛÛ5ÛÛCÜRÝÄÞjàýá*ã`ä¡åÖæóçé‡êRìLîGðaò‰ôžö:ø­ùèúüÜü—ýSþ"ÿØÿ¨´Ç¨l6ïtô\Í%¦9 Ô a  š õ - n « ¾ « ˆ b >  ã q Ñ  0 ³/³ÿÀýüDûóù¶ø{÷?öñô©óyòrñ«ð<ðð'ðcðÙðsñòÎò‹óTô5õ,öQ÷‘øèùmûìüdþ¾ÿ"h~lR$ßšKôz í 2 o Š ˆ j D   ü ó õ ñ î ë å  ‡ R  Ñ]Ó•GØO‰Œi"œßþóüëúÎøŸö@ô×ñ{ïí®ê>èßåšãdá5ß3Ý\Û»ÙQØ(×<Ö„Õ.Õ ÕÕ[ÕÑÕšÖ¥×óØdÚÿÛàÝÐßäáñãæüçîéäëÙíÆï“ñVóûôö÷÷Pùyúû\ü ý¤ý;þ¼þÿ]ÿµÿ¥%²>è™XõÕÔÞ t à ø Pz›¶š~Z­U]sa5©-¢H§Ô ÍàÎqXº ÙeÙoO¨{³ö›ûŸ®û "g"m"J"’"–"à!E!  8@ü¨€µHl` ã%†ÿýéú­øaö+ô˜ò ñ=ïFíJë¨éJèçæ~å¸äÄãÝâŠâSâÑáUáâà´à3áÜáŸâbãæãCäªä(å¥åôå^æÊæšç×èmêIìHî ðÌñÁóÌõ§÷aùû–üHþ>GNG%å µ n âó#Æâ€öf ¨{› = ä sû˜2Æhôÿ•þý™û%úßøÊ÷éö6ö³õ]õ-õõõóôÏôŸô€ôjôjônôŸôéô5õˆõ÷õ;ö…öÊö÷_÷®÷øˆø*ù½ùkú"ûóûÂü‰ýbþAÿ<Q{± nÓ# z Ç à ٠ `Žg˜§Š6ºùü « 0 º 3õ8k˜ÿµýÛûûù,økö¢ôïòKñ±ïøí¦ëJélçtåuãaámßÏÝÛÜqÜšÛ£ÚÔÙ:ÙØØ½Ø‡ØGØ)ØeØÙ ÚÛÀۛܘݳވà7â°ã0åìæ¸èÃê íïßðò!ôäõØ÷QùlúûÕü@þ½ÿAwrHóL¯¿â7¢,ÚU ¾ . ¸ X ø [ ª c Ô sŠüQª"xŒ¡F•æ+YÐ/qÜM‹äß°6Îu°¸³…fWPZVŸâ, P ×¹ì, ] 2 / ÜsžB}_¦Xrà  ô'þ‚ûù¥öYôZò±ðÊîßìâêBéçúå|ä5ãÚáàŸßßhÞÞûÝüÝ,Þ»ÞŠßvà;á%âã%äåæ2çWèréÇê<ìáí®ï®ñ™ó‰õ¾÷æùîûðýì™9ÌR¥ é / w ¬çüÕ˜h]GýsÔB<#ß ‚  ºIÑTÝŒ%¶þQýðûfúùÉ÷–öFõô+ódòÄñ=ñÂðgð8ð ðòïïïòïð0ðvðÚðcñêñyò@óôõö'÷?øeù—úÆûý`þÇÿ Rµ C³Û ð  ö ì ¼y!©zÄáéÒS˜ X‰® Ç ¼ ˜ Q ÄnòdÚTÿºýüoúÎø÷BõUóñsï3í³êaèjæpädâàmÝÏÚÍØ ×-ÕSÓÒÊÑvÒÌÓúÔÈÕUÖ ×:ضÙÛƒÜ+Þà¾â¡åè¶é+ë‚ìÓí¦ïÑñ£óõjöÛ÷Yù´ú³ûGüËü*ýÃý›þ[ÿÚÿ*´ËA‹z}Þnõ= ‰  é â Ç c ² – X d z I ê ½ ® ® ¸ … / ã m  I ­ ð T - ã ¼­U·!õŠvj:çõs+TšpóÀ²¤T/Jòõò€Pð÷ K0•lMÑWž´¼Û[.ñ|H a=ÿüãøöÍóÌñÀïíGëðè׿2åâãÃââpáÊà à²ßBßèÞŸÞœÞÅÞ¢ßíà*â>ãNä>åðåpæÄæ/ç„çèÿèKêÆëwí[ïOñ<ó‹õø÷WúÈübÿüEŸß» U ç …Z´ß¾VÀσã9DÔ‚; — â 3yýŠ->ÿWþlýtü`û&úëø¬÷öaõ†ô¾óóUò¦ññð0ð…ïÑîî®íríQíQííæíQîÚîƒïwðgñŒòíó–õE÷#ù ûíü¿þ“YånæS™ à à À ‘ IõeÎ4q’—¨’qO5÷Ï“Qè|æ / [ k ` % ß}úZ­ÿ°ý´ûžùu÷>õóæðYîŠëÛè\æ÷ã¹áÓßa޻݀ÝôÜÛÙÙvØúÖ±ÕuÔÌÓ2ÔÕ¯×ÈÙiÛvÜPÝZÞßùßBá·â{äææ$éþê…ìÖí¡îdïŸðÓñ$óŠô*öø ú ü÷ýÝÿ€Ÿ}F¡·á7Ó·ÝÙÈ O U ú b ³ýOîðR´îBRWQo„Þ T 3  Ô 8 § â ã ° ƒ N   " ` x 'övÅz¯™Œ{™˜’kd‰Ï ñÙ @x‰Df››ã ¬ø@æü5à—koÀ¡ù…+ qÿÝ;ÿüKù”öôêñ4ð£î²ì¾êCéè²æ_å?ä¬ãGãóâ„âÖáá à ßxÞvÞÎÞjßsàºáÇâÙãçäœå æeæ>ç…è êýë%î‡ðüòjõð÷qúûüZÿ±Bv $ › ÷ý½i¼äà™ Îª‡Z # é Ô À´ŠL*ð”HæþTý¾ûúbø†öÜô]óôñÐðÑï ï_î¾í8íÕììì§ìí°íîwïYð;ñ!òñòšóbôpõœö½÷ûø[ú¸ûôüþ-ÿ) ïçì&Q{Ÿ Ú " 8 EC$ò©DÁNO1Ýe«ÀÒά w 3 ¶ yÙ&Tjÿ²ýüSú²øûö?õŒó×ñð4îŠìþêcéÄç6æÆäHãuá߄ܓÚÙØ‹×Ö Ö_Öˆ×ãØÚ#ÛÑÛÜݼÞà~á%ãåÿæ®è:êkëOì=í!îpïñ‘ò ô¥õC÷èøúÏûÝü¨ý[þÿÏÿ^<W´üKƒ( V Z M ) ׄGJr“Òß«g02 H¡òZ  ÷  7   > N ¯ 5 ¬ 5 Ü œ d^Õ … I J ( A .—Ií.ü’G á°-½ËC-Q Œ ´^hH¤Yfà¹úÉ ƒ¢™IšòºÞÎU = °ŠÅývûªùÛ÷«õ ôsòOðZî(ì´ê»éÏèAèèìçŠçuækåøã[â$á"àyßöÞsßdà)á âÂâ€ã4äyäIåGærçÝè†êàìAïÍñZôöùˆû¶ý£ÿ‰¢T×aÅ ' 1 õ ¤ "…Û M~ðcÀ-žÏÀ‹&t¯·ˆ o ^ Z > ׎&r›ÉþæüûNùÕ÷‹öhõô®óäò:òñîð}ð;ðð2ð|ðæð[ñ·ñîñòò òòò\ò³òKóô÷ôõõ÷ øLùxú¡ûØüþ`ÿ—ðdÔ&vµÜ Ö ¸ b  t â A”ÑÞÒ¯bû k Þ ` Ê E ¹ ? ² Hi_5®"~ÿÈýóû$úCø9öAôPò„ð¼îíOëŠé£ç#åPâÅß7ÝìÚEÙ3Øô×ÐØ`Ú ÜݪÞhßÿßwàÃàáÀá´âÆã¾ä~åÌåßåÑå£åÙåæÇçjéœë î|ðêò<õc÷ùhú™û×ü-þYÿ~ØeÉ#^.œ¬oø¿0MÚ¨h ¢ 6 Ð ‘ [  ø›õíœï4 [ ä C ù â æ ô ú e ð G ] ‘ £ ï ^ õ ¨Q—¨è!¾óò}àÖc5ù ›X˜Ç‚ó5‹ð¥ûGA+Hoø/ø[¯8\W:]?1;  Ûì¾Ìý ü·ú™ùiø«÷.÷ýõôfòÄðïŠíXìëÍéºèmçÉå%äŒâáNàÊß¶ß%à$á>âlãRä åØå4ç>è\é–êâëIí¡îKðÓñ9ó¹ôrö]øMúôûšýÿ‘¼ÀªÀÓÄøG ¤ ñ ö®2ŸÑÉ ?™|Où © ] 7 3 ?r½-t§œ†Z(ÿ÷ýóüü)ûLúnùšø´÷¹öÕõõAô¯ó1óÊòSòüñ¦ñuñQñVñtñ¾ñ)òÒò†óWô8õ!ö÷è÷×øÎùŸúfû0üÙüýþ°þHÿöÿ­šwnkX"ñ±Sû• + ¡  q º Ó È “ E á _ Å  7Xq‹„rRÊÿ=þlü2úá÷¾õ¡óÒñaðLï¤î0îeíµëÜéèæ)ä¹âÞáøáöâõã7ää’ãšâváNàeßßyßlàŸáÏâÏã’ä{åæ{æ;çwèæé‰ëítï"ñóÑô9ö÷Í÷€ø ù©ùHúÛú­û£üáý"ÿu˜–kÝ7¦'º¿:à E ® ‡ ç ø Î | Y ¸ 2©+¤Þ«3ȃZQº~ý=g±°€¡”Ø%5vxœŒ„o«17TX’ÞÁÀïÔüqŠ"ýO.ÊÒ¼•Œ£Ü¸RA8h\pÙˆ56óæ ?C ï Ð m ïûíØþcü[úÅøo÷%ö$õôþò@òTñ¸ï:î¾ì:ë½éœèÓç=ççéæÏæçæÈægæÌåå‰å½åmænçÌèêëÚë¯ìxíîÀîÃïñò[ôMöFøãù[ûžüÌýÛþêÿAwÍ8…‘^ . ú Í  7 õ =XlYFüÚœ+| à ö N ­ ó2’î43íÑßÿÿ_þµýîüMü¢ûËúíùôøø.÷vöäõõTõ/õõòôÔô·ôô–ôô†ô±ôõŒõö™ö÷‘÷øwøµøù†ùúÄúûküHýþËþeÿþÿŒ)¿aö/ ü<i€|~oW0âŸC”“FÁÿþmüøúŒùGø@÷™öö±õõQôóêòKòÆñ+ñƒð½ïáîïíÝìÌë€êéÜçÛæ9æãåâå æiæâæ“çGèäècé¼é3êËêžëIìíìíûíî ï©ï;ðÁð4ñµñEòùò¥ópôUõRö|÷Çø ú/ûLü=ý"þ-ÿYq•­™hN4ízÿµ Œ s h . ï »S¸ QƒË`Êx‹“Mï3͆¦îC¤°¾±PË#÷ò9¸TGRãe{z‰²ÛUÇœBI–_ÙwàOƒ÷ ù&i ö p ±„6=—kQ-þ£ûgù¼÷5÷3÷e÷•÷Ê÷å÷J÷æõ1ôªòñjïXîÜííºìì–ëÓêéMè¢çRç”ç'èXéãêjìwí;îÔîCïOïVïÞï°ð“ñ„òÍó0õ9ö÷½÷£øSùúðú üPýˆþpÂåѯVÿ¤o  ¢  u Î ç ã ÿ + ; & / C î ª Š > Ö O æ q ØX¸ú2™'ªþcØ2IYÿZþqý„ü»û#û¥ú-ú®ù)ù°ø-ø¬÷÷Æööuöxö‡öÁöÑö±ö¤ö™ö¬ö”öö¹öïö/÷t÷Ú÷.øiøø¾øù_ùÆùPúíú—û'üÂüQý¾ýþGþ–þúþ4ÿyÿ´ÿëÿªÿäþåýºüŸûƒú¥ù%ù$ùšùDú û}û¤û`ûôú\ú¸ù÷ø"ø‚÷öö_ö¢õÊô×ó²òñtðÄïhïTïˆïØï6ð—ðððñ¸ð*ðÁïŒï_ïMïYï|ï©ïÖïùïùïõïÓï”ïkï€ï¿ïðYðæðÍñ­òxóNôõ¹õ?ö½öm÷5øýø¸ùcúûÉû|üý”ý3þÿ÷ÿ9ÕçýñÒ ž  ¢ _ 7  Õ x”'•~߇>ÌóíçÇv:àÂÖ¢š”´ÐÐ}%œÁÌ{ØW’ÔÞð:_9ó4Æ-bõÈ®Îï#=Ú€  µ h¬Õ y å ’ H% ²~¯ÿˆýœûPúdù¼øqøøøˆùnùù/ø.÷©õô¦ò•ñöð_ðð×ï~ïÁî“íPìmëÍêœêïêëoìyí¶îÃïað­ðüðBñŽñ§ñÑñNòó±óBô®ôaõö¨ö?÷ú÷ù/úlûÊüAþŠÿÄ#™BÝM„Ø0 %¸X û m ¿ ü 6 p ~ « ð @ n s q > Ç  e Ì = µ+°Gâ~÷`¶ÿOÆRçj ŠÉÿÿþDþsý’ü±ûùú}úú‰ù%ùÊøwøøÃ÷÷e÷9÷ ÷èöÌö£öƒöZö<ööíõÜõ×õÙõÒõãõö'öMönöŽö¦öªöŽöyöuö‚ö‡öƒööÒö ÷+÷#÷÷Ööjöö÷õôõö+ö\ööîö0÷4÷êö˜öNöBöJöZöiömö}öoö`öBö÷õ²õ`õ,õ"õ[õ¸õñõö&ö&ö%ö&ö öãõ°õªõÝõ"öMö<öö÷õÑõ½õŸõõ¿õÎõöRö¼ö#÷l÷¶÷ð÷(øgøËø6ù¡ù÷ùgúû¾ûLü‰ü­üý©ý_þðþ‘ÿT9ý©Mû˜SÐp à L £ æ ! L ¾ ^Ü&wð%A—û 0­=“=ØÌd_uaa¤ó`Že|ù« òü-D×Î,ý¥÷ˆ¼fêô·‰«¢2£ ¤.g‚—  q ¾  n à ÜŒ½¢÷‰ÿ‘þÛýýùûûSú•ùÃøþ÷ ÷Œ÷ ÷"ö:õô–ó,òEð^îí…ìaìiì´ì=í¡íªí~í2íûìàìÙìí¼íµî²ïð<ð ðØïÝïððeñdò£óëô=öR÷ý÷Nø†øÐøuùúöû±ýWÿÈú¨ÙÚöUþÚÖÌ‚úb À  v å Š U  ¿ º q ù ^ À N ð Á ’ B ô | ò^×nœ¦, âWªUÀÿ'ÿiþ—ýÒü/üˆûäúAúÁù_ùùÐø‚ø&øÔ÷w÷"÷Íöjö ö¡õ9õÅôIôÆóbóóÔò‰ò>òþñ»ñšñ†ññ‡ñ‡ñ•ñÂñúñ*ò<ò;òIò_ò…ò–ò§òžò‡òyòuòœòÅòó(óOóšóôŽô"õ›õ÷õeöÃö ÷Y÷Œ÷¤÷º÷ã÷ø?øaøø³øÓø ùLù–ùáù úEúrú±úäú û*û?ûYûmûyûnûaûXûXûYûuûû¤û¬û¶ûåû,ümüšüÍü(ý—ýùý;þ~þÎþ9ÿÿ·ÿÕÿJn­îM¿4£P½Qâ@#O6H°?‹©ÍF ¾ ï À Ÿ õ Y ™ ß U  ¾ &  ' o ‘ ` + x *ÚåÆÌÓ‹-h£ÏÔžñÀwËä¿iKa¿—‡ýÓ”: $gVü Ÿ ž Mì / 1 Ô Z 8 —–ж°> †~ƒÜÿ?ÿKþDý×üýiýVýÈü.üzûmúù·÷ö õÉô0ôðóàóŸóðòûñÿð.ðÇïÅïðŒðYñ;òñò/óó•òò¥ñUñ<ñrñèñmòÌòÿòó+óAóPó˜ó?ôKõ™öÚ÷ùþùÈúIû¬ûèû;üüýËý©þhÿÜÿ"k±ï[ë”ZäŠÛH±Nq…ˆmG µW &&.OkS8$æ›Q°8¤åSÌNàdöÿžÿDÿîþþGþþÈý‡ý+ýÑüXüÇûûeúù¢ø·÷âö2ö’õóôSôõóÑóÎó¯ónóJóTóbóKóóÑòµòòò•ñBñ ñÒðmðððïð7ðLðYððáðQñÇñ:ò ò óóôsôÔôõVõõÊõäõö&öaö”öÕö÷‹÷ø°øBùËùeúûÌû\üÎü'ýƒýÜý/þMþeþfþxþþ‰þþ¡þ¸þÓþêþÿ]ÿ×ÿKÊIÛjÅÎ̳!h•øÊÒÒ33 Ðís»W0†þ³ðˆÒªä×1lû“àñÑ…   É Ž *0‡'¿ nŽ;ÍF q ê Ô [ ¯  x £ Æ 6 ' Ù u Ç   ú w n ô É 0 Þ A ž  b  … [ É V R  ˜ Ó ¼ ÄqÃL – ? É…}>þëø§—k<«õ^ÝZêdô0kàÿ¿ÿ·ÿ—ÿuÿ2ÿáþ€þþ§ý_ýýµüMüáûcûäú‡ú+úÌù3ù¯øYøNø`ø‡ø®øÍøËø¸ø”øVøøð÷ø'ø7ø=ø7ø@ø>ø=ø)øø-ødø¦øÖø ùBù‡ùØù!úeú¬úûJû¬ûütüÞüDý„ý·ý²ýÑýñý0þyþÑþÿfÿ·ÿN“Õ pÅ]™½ÉÑÞõ ++81:57"þéÛϤtZUQI;Òƒ9øÚ§f Êÿrÿ(ÿàþ¨þYþ þÆýŸýmýýÈütüü•ûû©úŠúhú;ú!ú*úBú?úúÍù~ù,ùäø¶ø‹øbøø¸÷s÷C÷+÷(÷&÷ ÷üöÐö»öÎö ÷M÷‚÷¨÷¾÷Å÷§÷”÷z÷÷©÷ó÷(ø:ø"øøõ÷è÷ä÷Ý÷ø¤ø+ùaùùqøJøù«úü3üÄú,ù ùYúüýÿüèû¥ú\ú9ûZüéüßüäüpýþEþ ýØü`ýÿAÍÿþ5þªþ¸þlþEÿžÊòfý!ü ÿ›JÕ,ÿÖýoÿ(¾›ë2¼c€«JÐ_wGݟs‡v‰0Ú!x»¨ôV™ýR÷DÈå?…D@ Æ™½eÆày!ÙüêÔYž‘cÉ‹ØÊUš/ HŠ¥Šg(Å8îTök:üØŸÖ–‘ÏŠñ5ú,£Ê¼eMY!¯}ž±hHT ©m• ¸˜œƒ¼¶ðòž¹ÿ~ÿ`ÿ[ÿcÿaÿ]ÿÿˆþìý ý£ý¸ýiýßüƒü‘üßüñüšü=üü#üüÿûðû!üküŠü‚ünü\ü:ü*üü9üTüOüüöû5ü¸üýÝüAüëû/üÆü-ý>ýWý¨ýþ?þþÌýÁýøýþýîý þ„þàþÇþ2þ×ýïýVþ¬þ®þIþëýþžþhÿ»ÿzÿÿÇþµþºþÝþÿqÿðÿ"°ÿöþZþ?þþ&ÿ¼ÿëÿ|ÿœþñý÷ýÏþæÿd ÿþÚý€þ‘ÿcWœÿŒþ˜ý ýýüªýÛþ¿ÿbÿÔý"ü?ûcûHü…ý~þqþ]ýòû&û[ûAüPýïý…ýüŽúõùgúoûWüÍü ü‰úßøø§ø>úØûNüdûáù#ùTùçùrúÒúïú±únúMúúàùÅùòù(ú[újúzúrúú˜ùìùQû¥ü¯ü ûVùIùÌú›üBýðüÀû^úYú»û!ýVý=ýxý1ý³ûaú ûJýpÿþÿkþyüõûÓüþZþ`þëþ2ÿ³þíýëý þþÿy('wþýþ¡ÿð‹Ïíp÷ÿ ÿªþÔÿ¢!(LüwüˆíßÇÉ3ý+üxÿNƒ¯£uþÐQÌá®-W‘ó™þ?þÆ“è8ÝÈÚW30ÿ‹#¼èΣy®ÿÿ:ò3 ™{iCõ‘¬ïŸÈÕ ¸÷­µ’[,¬å¼,(×^³{±FòüÔòý.DUWõNR1JUT0îöôŸÊDÖ>ÿž²mÙ±Cv+²j’½„õh[ù¸én:Œÿå š#Õÿ©ÿˆÿ–ÿŸÿ—ÿ~ÿ‡ÿ­ÿ¬ÿVÿÖþþ°þÿÿ¦þkþaþIþþ­ýýý±þÿ¡þÌýAýLý²ýiþÿ,ÿ“þ½ýLýŸýxþ7ÿŸÿtÿ£þ—ýý@ý²ýþþÿFÿÏþÀýÊü“ü1ý(þÿ‰ÿqÿÖþ%þáýþcþÔþ9ÿuÿ+ÿ@þrýŸý¶þ¤ÿhÿùýÌü¯üuýQþ©þ³þöþTÿ ÿéý"ý§ýÙþËÿØÿ]ÿ˜þÿýöývþïþªþÁý=ýlý±ýþDþÆþ1ÿëþçýíü!ýøýµþÆþfþQþÈþ\ÿÿ£ýeüiükýåýqýîüçübý¥ýxýáü2üâû3üCýMþ>þSý_üüfüüüwý[ýšü®ûûûûüjü!üïûÐüýƒüzú®ù“ú?üþjÿAÿñüyúÖùû÷ü^þ­þ,ý‡úQù³úý†þQþ£ü ûû†ü–ýÚüü§üÌþTsÿõüyúûþ? fþü¦û(ý…ÿ|Zÿ°ý†ýÿÿÂý«ýJÿÚ™ÎÿšÿÛÿoÿÐýÖü•þ‘Úé÷ývýÿ×ÿØ2q}ÿc „Oÿÿrà ¿ÿÓþpÿ´mFÃnÍÿyÿ->_,õÿ$‚×~/Hÿiðz §ÿc†µ9¥ÿüþ;Ì÷ˆææh]éÅÉó÷µE•Ô‰à.u‚àÈØ,àÿÙáZCNf¹ïԼ؉ré§T(?mX§×ÛhÁ潚.¼TÏM%¹Î³8 ý®›ÙCÞ6iR'BJNaf´ê”4(± ÷ù¹=Ð’Ñ'.ŽmZÿKÿñÿ·Îÿdþqÿâ"óÿ~þ:þqÿÑ0n]ÿ¼þ–þÿª„¾ÿ«þþþ®þŽÿáÿåþþÒýôý»þ¹ÿÔÿÇþ¸ý­ý›þ–ÿ÷ÿ~ÿ´þ\þ¾þRÿnÿåþ0þ,þÅþÿ®þsþŽþ®þTþÓýóýïþÙÿOÿ‰ý_üCý€ÿãB4þ†ü«üLþ;¬þ…ü¶ûßü†þ\ÿ"ÿQþ»ýHýÌüØü|ý~þ$ÿÿþ&þlþøþÀþ¶ýòüaýþ>ÿþþþXýký@þ`ÿXÿÎý@ü&üiý”þ©þEþuþ ÿuÿÁþWý0üÎûñü¯þïÿŠÿüý·üjüºüIý¨ýÒýþ±ý@üGû2üŸþîÿýþüüßû<ü»üÌüWü3üýkþÿXþ\ü©úúõúeüñýÿ±þý)ûKúQûæýÉÿ6ÿ:ýëûýjÿ~\þOûóúlýíÿÖÿ9þþüýþÔþAþ”ü£ûèübÿl ‹ýÄûVü9þn¬’üûùÛûòÿ{¢ƒþ6üšû‘ý´:NáþJýþZÿÖÿmÿÿN-9Ü%ÿ‚ü,ûãüÝ~ÊÇcþ@ü¨ûœýj>C‡Þþ_þVÿ!= aÿ8þ–þÍÿx¡Åþ–½lÿ ÿ·¹„Ý~Öö",›nye>²!X#(`âÿÿ)]\þ‹£þ=LêФD yÿx8ýŽ÷ÿ(ÿ`*¤çÿH,ÿ$·F›¡©Êcòu® Éo C&p™zBL,ÜÐq¬ÍÈç0–…ø,ÙASâ|¡ü)=+º~«¾¾¸éP¸…w«‡ù³ÁåÒL·[ž2¤Û°¶/Í—¬ÿnÿÓ(5ÂÿƒÿøÿAëÿ_ÿ†ÿüÿ~{œÿ@ÿkÿåÿW2ÙÿZÿêþ´þÿÛÿKÅÿ¬þ‡ý:ýíýäþjÿÿWþöýþ·þAÿ#ÿ®þIþJþrþëþPÿ†ÿvÿÿ+þ\ýLý$þ ÿÿDþ‘ý‚ýþ»þòþ—þþÍýäýïý6þéþŽÿÁÿÿ.þ“ý‡ýÖý0þþñþ÷þ{þpýŽüŒüýþ’þ¬þ¤þqþÿýuýRýŸýBþ5ÿßÿÇÿ>ÿpþºý†ýçýhþOþ ýúü¾üýý þ ÿµÿ¥ÿÌþÊýýäüŸýÐþ®ÿóÿàÿ\ÿUþ,ý‰üMüfüèüÇý þüþ+ÿÿþŽü¹ûÒüÜþ”ÿ£þ:ýðüxþ¯ÿÿüEúæùçûZþÿžýøûšûíüXþBþýOüéûü«üáýèþ×þ÷ýBý$ýý`ü±û¼ûýÐþ_ÿ¼ý}ûû*ýYÿTÿ|ýü#ü_ýIþþ4ÿäÿßÿñþâýBýjýÀý®ý„ýûþt¨øþ\ûwúÿüy"kÄýQýMÿ™ý.ýR)·ÿCüÒûGþ‘ :Û—ýúúvþj3ébÿþýÙþƒp™JÊaŠþý_ÿu\V¹ÿ^ýÍýMÙ–{W1÷"VŽ-þÏÿޝr"ÿÁÔçP¦ÈR%ñßxÅ´ƒ?Àåþ“ÿ~Â:®¶ýèþÿ/ –Üÿ+þ®&’âN­ab §ÿΕojŽ”¤æP}'\kW‰9pgnf†NÀöî w¨o©åÛ58“xg,*¾¤°KÎ|Ðã®÷v/2[JqŸñþÝþ¡Üð2RmÿþŸþ>ÿéÿn¥Ç£4`ÿ…þ*þªþ‘ÿSa¸ÿÐþ—þeÿ‡à «þÐýþÜþwÿÀÿÂÿ‹ÿÿ^þßýÊýþ`þˆþˆþ€þâþnÿÙÿtÿ†þçýþý~þÕþÝþÎþôþDÿ\ÿÿaþ ýýDýþýþtÿYÿáþBþ±ýšýÿý›þâþÄþ°þçþ$ÿÿãþ›þ‚þÏþÿçþ€þTþþÿ)ÿñþ‘þþÐýÚýAþåþŽÿÀÿaÿÆþmþ„þºþÓþõþoÿ÷ÿÿÿeÿuþÚý×ý]þÙþÃþKþõýþ[þtþ…þ´þûþþþ¨þRþþÙýÌýþ«þ.ÿ{ÿ;ÿ#þÏüüRüNýYþÔþ`þRý›üüýÍý_þ_þàýýü·ûüý!þ”þKþPýÛûíúHûšüÜý.þÝýRý¤üõûtûºûÅüHþ*ÿTþüZú ú üòþ]ÖÿýDû¥ú×ûYý*þ`þ)þÜý*þÇþ¦þãüûû@ýêÿ rÍþhýýÑýüþÕÿ!Èÿðþ/þ‹ýIý&þPóµŠýèû7ýÙÿ7<ÿ½ÿÏpCÉþ<üçüL{· ÃþlÿJ“œÿÅýÝþ°Þ:0sÿݤs*Дþ§þ1FÒÝÿŠýYþƒ¯ÆÉ‡_ÿ"[3þJ§p%®†š)” €žÃØ6!Ýâ íw¤ÑË-_+õ¾j7>Òr–ÜÀ£¸*sí˜ùÊhJt[sb…  G™ ‡€$ü@®¥óö¨]TLü€'êàÓÿ1*É<Úä=5"0 «A)<UPH(á}ªÿUÿeÿ¶ÿßÿ–ÿmÿPÿXÿiÿ‡ÿ«ÿÎÿÝÿ½ÿ¬ÿ“ÿ[ÿóþþpþ•þÄþÃþˆþQþjþ±þìþçþ•þ0þ þQþ¼þ÷þáþ¡þ\þ†þíþ:ÿûþpþüýþiþÑþ ÿîþ¶þuþWþYþþ¡þ«þ~þ>þ þGþÇþqÿÀÿ–ÿÿþOþeþÁþ&ÿ^ÿBÿýþÁþ¿þÅþÍþžþvþxþÊþRÿ¡ÿ¢ÿEÿóþÁþ½þðþ>ÿgÿjÿRÿ/ÿÿÿÿèþ»þÇþÿ$ÿ4ÿÿØþwþRþ|þîþtÿÖÿ»ÿüþôýYý±ý¥þdÿgÿ´þâýgýyý®ýÈý§ýýýèýþ¾ýýuüœü!ý‹ý]ý¯üüîûNüâüýÖüVüÙûÐûü‹üžü ü–ûkû¥ûüQülüNüüÆû†ûeûƒûäûbü¼üÌü‡ü üÛûôû<üvü…üü{üuüyü‘üÇü!ý{ýý)ý–ükü¥ü#ý ýñý þþ2þRþþ ýbý²ýJþÄþñþâþ¹þjþ#þ%þ¥þOÿ…ÿÿjþ%þoþ6ÿøÿ5ëÿJÿÎþÈþþþÿ+ÿÖÿ¤(±¦ÿßþ:ÿ{^/Osÿ·ÿæèþA‘sìÖt/XîvR%õÛÔ!L~¶÷SpSÿZÐà’Z—ûémAx¶³µ_&/nŒŠoÌúrŸ.+‹÷å¯Ñ[÷!t™Àä9‡­Ÿhe˜ì¸#ÀÈòÕ”¿@¶œžpÀV¾ã¡Kା((‰’ùó^§É–uè³Û be/Î_ ú§FúѵˆFüÿÌÿ·ÿ¯ÿžÿœÿ|ÿbÿ ÿ¬þwþ~þªþµþ¨þ‡þaþTþ>þþÉýýWý_ý~ý‡ý€ý|ýxýnýDýýÙüÔüýRý¦ýúýþþûýÖý¼ý–ý‰ýýËýÿý9þYþeþ\þBþ7þ;þQþˆþÆþÿþÿ*ÿBÿfÿƒÿ›ÿ›ÿ‹ÿ„ÿªÿÅÿíÿ ")0 %9FSOZC, <fpCÈÿ¬ÿ®ÿÎÿÓÿÓÿÀÿžÿoÿRÿEÿPÿVÿ>ÿÿëþÑþÏþêþêþÈþþkþVþRþNþ.þûýÇý ý‘ý–ý«ý±ý¡ýxý5ýôüÁü˜üŠü„ü…üZüüÜûÃûÓûèû½ûûMûMûjû€ûuûTû%ûûûúøúûû4û-ûûýúßúÏúÉúéú û,û2ûûû û&û3û"û&ûFûhûŽûªûÓûðûü-ü;ü@ü"ü'ü<üqüüÎüýAýZýRý#ý*ýeý¡ýÀý¹ý¸ýÓýþOþGþ þàýúýlþáþÿÿ÷þéþðþ!ÿ[ÿ‡ÿžÿ•ÿxÿ}ÿ¦ÿòÿñÿ¡ÿ[ÿaÿ¬ÿhscN{‰¶x/2q·•I/˜@}9Ä…¼?¾ 7k«|ê|_³®jG‹"žp¨ÖÃi=¦¡°eŠo=02< S÷tnýFï |Ù Tm`X`q®T\%¦&c÷[JÛNôÄñQÍ!!áƒ=, æ¤v~ˆh £W3᪆pBà£N߆H&òÖžMÙiªÿoÿSÿEÿ9ÿÿÙþ–þNþþÞý™ý`ý1ý!ýýýýàü¢ü`üüÝûÍûäûü ü$ü üüöûÌû¬û­û³ûÏûøû(ü[ü‰ü“üŽü‘ü¡ü¹üÎüóü0ýtý·ýÕýäýèýëýüýþ'þdþ½þÿaÿŒÿ‘ÿ˜ÿ©ÿÃÿïÿ .X}£ËÚáÚèñ !&>T^^>+"(9GVH4ýܸiPIG=èÿÅÿ§ÿ©ÿœÿŽÿlÿXÿCÿÿõþÆþ§þ•þ‚þhþ<þ þìýµý‰ýcý8ýýâü·ü“ü‰ü|üeü>üüíûÒû»û¦ûŠûjûJûûûÈú©ú…úlúYú?ú#úþùðùðùú úúúúúúùêù÷ùú úôùîùöùú úúôùúùú;úZúoúlú€ú úÝú ûCûZûŠû¬ûáûðûü&üOürüšü¸üÊüÖüÕüæüý8ýbý“ý´ýÜýþ#þ4þSþƒþ±þáþïþÿ%ÿ:ÿ:ÿEÿGÿSÿhÿdÿlÿjÿqÿ€ÿvÿpÿ…ÿªÿåÿ A}¸Üõ16!/dŒ¹â &[°û=UaÊø+VwgMN¡ aÉÕ´uPtív¿ÎÇF`.öñ"CRß"¢Zi±ÿUëf ¨ p Ûá$ W t ‡ … R ø•R-?cbU^m{~tuŽ`½¤’_ý¬xO ¼zPÛš<ï‰9ë¥l/Àj®d‹ÿ ÿ°þ†þcþ'þëýÄýýMýíüŽüFü üæûÊûÂû¯ûŒûjû(ûúú¿ú€úgúoúvú}úúµúçúþúîú×úâúùúûû6ûkû û×ûïûü üüKü}üµüõü+ýfý±ýëýþ<þkþþÌþüþ<ÿ—ÿåÿ!FužÇØâÛóN{†Ž ÁÚêó&+,-% ãʱ›’€‡b1˪‚nJ ýÿáÿ·ÿ‡ÿ_ÿ=ÿ(ÿ ÿöþÏþ¢þoþ8þþýÅý’ýhýAýý ýíüÈüªüü`ü;üüÜû½û¼û®ûû{ûfûAûûìúÜúÔúÀú®úŠú„úqú[úúùùÍùºù–ùˆùù¥ùÍùêùìùÕù±ù‹ùlù_ùcùuù—ù¼ùëùêùÚùÄù­ù§ù¨ù­ùÄùíùú3úHúIúZúYúXúUúqú›úÞúûPûmûyû‰ûû‰û‡ûŠû©ûâû üLünü‘ü®ü¾üÊüÓüÝüøü ýGýpý“ý³ýÔýéý þþ,þ3þXþ‰þ¹þäþýþ ÿ ÿÿ ÿ$ÿ?ÿnÿ•ÿÊÿöÿ#+9c”Âç 4v†Œ™Çö*Ah™Äìõ <G_w®ï!^ ÁÚâ%Q`fy®ò6sÊ&`T6鲊ê`²ì;^j:hÌ X ¶ Ð Ç ‰ 8  2 L ‚ ˜ z 2 廟‹’¥ç < ! ã¦Oü§oAý³=Õ^ðœ\Ái4þ°Nãy zôÿ‘ÿYÿÿÀþsþ+þçý†ýþütüÿû·ûŒû[û)ûøúàú³ú…ú@úúîùÔù»ù£ù”ùyùiùDù/ù$ù+ù8ù@ù]ùùØùúJúuúŸúµúäú û?ûvû¨ûÛûü[ü üÑüýZý©ýþPþ‘þ×þÿ^ÿÿÃÿôÿAŠÎ\—Âë2Xƒ‘¤¦¹¾ÈÐÉÏÓåùÿßÌ¡ƒY=)íÈZ!öÄ—m= Óÿžÿdÿ"ÿßþ¦þzþ\þ7þþïýÔý¿ý–ýfýýáüªüxüSü)üüãûÃû¢ûûlûVû=û&ûû ûûúúèúÖúÄú»ú¹ú²ú«ú²ú·úÁú¸ú©úžú™ú—úú†ú“ú˜ú”úƒúxú{úxúoúaúfú†úªúÉúßúìúýúõúÙú°ú–ú‡ú–ú£úÀúØú÷úýúóúÓú¼ú´ú°ú»úÏúìú û,û/û$ûûû û ûû/ûPûuû•û§û¡ûŒûwûjûfûsûû«ûÚûü&ü,ü+ü=üLüSügü}ü´üêüý'ý5ýNýiýpýxý–ý¾ýüý)þcþ‘þ³þÏþ×þçþñþÿ0ÿjÿ¶ÿ6j¸âöE²ì Q’Îÿ"M‰Ê3Zq||…’Å.Cp•ÁÉÅÙ>k¯ý5SM6úëJ¦ÓÑÊËÈ¨ŽÆ$}¹ f z I ò­šm]›ú Ù§šyµÆo~vwx>§.ùõÚØßõÕ_ÒMÎF·gC#ðªD¿óÿ‡ÿ?ÿÿòþÚþ¥þTþïýtýÜüBüÕû—ûuû`û<ûûïúŒúú]ùöø›øYø?øRø•øÄøÍøÆøÀø¸ø¦ø†øøÍø#ù{ù¹ùúù'ú0ú*ú úú+ú]ú°úû¨ûüKüü»üëü!ýZýµý-þ¨þÿ–ÿÿÿIš¶æ MŒ¾ò*Ml‘•¦¿ì6Wˆ¦ÀȾ½ sWC)פu:Ȧy<ÿÈ“dEÌÿ”ÿZÿ'ÿìþ·þþQþþãý˜ýVýýÔüüYü1üüúûÚû¿û¦û•ûŠûnûEû0ûûûûû ûüúóúÞúÌú²ú¤úúú–ú¢ú¨ú¬ú¹úÊúØúåúáúçúóúûû2ûKûnû„ûŸû”û…ûkûWû<û(ûû*ûJûnûmûƒûŽû¤û§û‘ûyûuûûû‰ûšû–û¦û¡û•ûpûWû:û5û4ûEûSû\ûtûkû\û>û8û<ûNûKûMûaû{ûŽû’ûû’û•û­ûªû¦û°ûØûöûü üü ü#ü4üKüpüüÂü÷ü)ý[ýrýŒýœý­ý¼ýÙýþ;þlþœþ·þÞþ ÿ!ÿ-ÿ/ÿLÿŽÿÄÿóÿKˆ¶ÍÞú7m­ñM¥×ó+K|¤Ö _•°¹¹¸ÆÛþ\“ã?˜Þ )2* ,JdhfcY.{à8‡ú& ò®¯ï,  ù f Y ð‡L1ç„_€ÈÞÄ·¹¾š…v€„€VúmöŽ-©4î¾kór(×(Ï„Mÿÿ¦ÿ/ÿÑþ¤þ…þJþâýŒý>ýý²üDüÊûyû>ûõúzú úßùÁù‘ù>ùùù ùóøßøùø/ùgùƒù“ù ù¡ù­ù©ù¿ùäùú#úPú†ú ú²ú®úÕúû[ûŠûÁûüƒüÛü-ýsýÑý)þ~þÃþÿnÿÑÿ/qŸÔþ#*9Ly¸à'MyŽ•¬Òû1D_bQ6øß¹mAÞ¶wD ç–qfN#öÿÀÿ’ÿlÿ3ÿþþÂþþ]þ!þÞý˜ýaý!ýâü©üxü\üKü"üüóûáûÎû·û®ûû‡ûxûnûdû_ûVûRûHû8û'ûûû÷úöúôúøú ûûû%û1ûBûjû†û£û½ûÛûóûü'ü/ü,ü-ü(ü$üüüÿûüüü ü üþûñûçûêûóûþû!ü0üVübügüSü1üüéûËû·ûªû¯ûžûšû|ûaûLû*ûüúêúáúùú ûû,ûGûPûRûCûDûIûGûHûGûXûhûlûiû\ûcû^ûcûoû~ûžû¾ûòûüIünü–ü·üÜüý*ýTýsý­ýàý þþ7þOþaþvþ‹þ¹þïþÿFÿvÿ¿ÿ÷ÿ)IsŸÚ*Y“Çì;dq¡Ëþ >]Î+`’Ãé (6/'%-Nd£Ó/Jg”Êèóóþ$1Hv”¢£¶ÙëùKm”›©´ÐȰ…pjmbN=.ñų³½§ˆ{MšM߉¾‚;ãrÂ\ï-ဩÿQÿïþ…þþÁý„ýXýAýýØü’ü6üÜûuûû¤úEúúâùÆùù`ù-ùöøÓø¯ø³ø¾øØøýø)ùYùƒù ù©ù¯ù±ù¾ùßùú=úzú¬úïú+û\ûzû…ûŸûàû#üyüÝüKý¶ýþXþ¬þôþCÿ‹ÿãÿ9–àJg•­Å×ò,\Š­Êàô&&38RVNG,æ¶™j=×¥l7ûÇŽ_2Ûÿ©ÿÿtÿOÿ$ÿõþÃþ‰þIþþÕýŸýjý8ýöüÃüŽübü1üûûÓû·û˜ûƒûyûwûjûcûXûXûQûEû;û9ûAû4û0û%û$û!û&ûû)ûû ûûû-û>ûbû~û§û¸ûÐûéûÿûü0üDübüü¦ü´ü¶ü¿üÀüºü«ü›üü—ü ü«ü­üÊü½ü§üwü^üIü<ü2üDütü²üßüßü¿ü†üLüüâû½û½ûÆûÎûÄû¯ûšûjû9ûûÜúÝúîú û$û4ûNû\ûZûNû7ûûûû2ûcûŒû§û­û°ûžûœûŽû•û«ûÔû ü=üoü–üÂüÓüìüý2ýVý„ý±ýíý2þeþ‘þ¤þ«þ»þÕþäþÿ8ÿyÿ¿ÿøÿ#Tu™·î'Z²Û4V~§Åú.bƒ©Ö9CxŸºÆÃ³¤’£¿æ V“Ð$1 ìéî4n¯ßã”cAM€É `™Àª|MF@IL~ÆîÞ¥oEù¥‡«ý5KF1ò‘%Ï ŠˆŒzNü™'¼Xѯšt6òÿÿœÿOÿÿøþÛþ´þ†þeþ9þòýŽýIýýüü›ü*üÐû¨ûƒû^û)ûûòúÙú«úyúcúfúmúmú…ú®úØúñúüúûû ûûû(ûSûŽûÝû!üYümüYüMüPücüŠüÁüýŠýòýBþuþ§þÊþÙþ ÿ3ÿ„ÿÅÿ!b–¶ÁÔÑÅÎæ_“ÂÞäßÕ½µÍé2FP=úÞ·¡Šx\DüÊ—^1 úÿâÿÔÿÂÿºÿ¢ÿyÿGÿÿáþºþþrþVþ1þ þâýµý‡ýTý$ýÿüÒü®ü›ü‡üvübüTüGü<ü(üü üüüüüúûöûúûäûÚûÅûÄûÈû¶û¬û´û¶ûÅûÑû×ûàûöûüüü.üJüdü|ü–ü¢ü©ü¯üµü¬ü³ü«ü£ü•üünü^ügü^üYüBüDü=ü@ü5ü1üEüZüqü}üüzühüHü!üüöûãûÑûÃû¶û­û•û|ûlûsûdûfûbûsûˆûŽû•û—û¨ûÑûÎûÒûÑûâûúû üüü%ü!ü!ü%ü"ü>üSüqü“ü¼üÚüýüýIýwýý¹ýìýþ;þYþwþ¨þÌþõþÿÿ@ÿOÿaÿiÿŒÿ²ÿçÿ:Z~©Òÿ)S{š¬¾ÏäFXz£¹Ìáÿ0AWz¬â1S`vpqu`^T\ev‰£¹âñ<hœÈðýè̱¦»î/OkyhI@Ql–½ÞùòòßÓÀ¿Ðê íѰh ¢xmZUccY$å¨måɱv3Ú„'Âaê¯Uàÿ­ÿdÿ&ÿ!ÿÿúþÅþ†þTþ!þÇýeýýûüéüÇüŒüiüAüüºûpû8ûûûû-ûmû–û·ûÃûÃû±û‘ûqû{û”ûÆûþû>ücügüZü7ü#üü6ücü¡üúüEýyý¦ýÊýæýôýúý6þ„þÞþ3ÿ‚ÿÈÿíÿüÿôÿþÿ';U†´ÔðèØÑ×äIŸ¼ÄÅ«”—œ¨°³w; Õ²”ˆy|n^;üÿÞÿÇÿ»ÿ³ÿ¦ÿžÿÿmÿDÿÿãþ¼þŽþ`þJþ'þþñýÖý±ýýpýDý-ýýýý ýýõüôüäüÝüÐüÊü»ü±üœü—üŠü}ümüRü>ü6ü/ü/ü$ü-ü4üEüMü\ücününü{ü„üŠü‘ü™ü¢üüüüŒü€üqübüWüNü<üüüýûÿûü üü,üGüZübüfümü{ülüfü[üZüGü=üüüüüîûãûÝûíûíûýû ü*üBüJü_üsüü“ü˜ü¬üËüïüõüýÿüýýý#ý+ý<ýGýWýfýxý—ý¹ýÆýñýþHþcþ‰þ¯þÚþöþÿÿ2ÿGÿ\ÿoÿ{ÿžÿ¶ÿÏÿ×ÿõÿ'5\ƒ¬ÎðCbv£½ÉÖð%'&,ETP^y™½Ûç;KW{•·ª¬¸Ç·®™Ÿ±Îë .b‹Ÿ«Ò4^|“•Š—ž©Àäøö÷ :^s’½äò÷öçÐÏäêЗv[%Ñ„sbS;óÉv_4à•aEÍq!Ï‚)Ü•U;"ôÿÖÿ¼ÿÿyÿ7ÿüþ¸þsþ þ²ývýkýWý4ýý×ü¸ü‘ü`ü üóûäû÷ûü,ü<ü?üBüLüEü9üü üüFüjü€ü£üÄüÅü³ü‚üxüsüŒü¯üØüýtý¹ýÙýðýîýþ0þ^þˆþÂþùþ;ÿvÿ‘ÿ–ÿ‘ÿ…ÿŒÿ•ÿ¥ÿÄÿõÿYao_egm€žÎý=CGA.'  ëÕ¹™scVVT[RMA. ñÿêÿÚÿÇÿ¹ÿ­ÿšÿÿ\ÿ9ÿ ÿèþÇþ§þ…þgþKþBþ8þ:þ"þûýîýÖýÛýÊýÉýÌýÈýÃý¸ý¤ý†ýsýeýJýAý&ýýýöüãüÌü¾üÁü¼üºü¸üºüÐüÚüéüêüõüûüýþüïüØüÔüÏüÍüÆüºü³üªü”ü€ü`üUüNüQü]ü_üjüxüƒü‚üˆü‚üü™ü¥ü§ü­ü±ü³ü®ü£üŽüüoüoüvüiüuü„ü™ü§ü²üºüÂüØüíü ýýNýkýýý”ýªýªý´ý¸ýÅýÓýãýøýþþ)þ/þ;þMþgþ€þªþËþÿ4ÿHÿ\ÿgÿyÿ”ÿ¯ÿÌÿÝÿëÿ÷ÿ  +4PhŒªÄê)0>U]l{txth\U]m«¹ÃÂÈÅÒà&RkŒ¨¼ÉÇËÒíöûý'17.-:OmŽÏLo‡¥ÀÐÊÚ+6Jdw…xee| ¿æÿ  /Zpxƒ©«žd/Ò³–Œ~H½£™šq`?­_!ø±^'æ½-긄n_j…“‡4èÿ‹ÿCÿãþŠþJþ+þ=þAþþûýÄý•ý^ýýçüßüöü!ý9ýRýkýgýWý&ýýüàüãüýýQýný|ý|ýbý(ýíüºü³üÑüý;ýdýŽý°ýËýÌýØýæýþ6þmþžþÌþùþÿÿÿþüþþþÿÿÿ6ÿ^ÿ‡ÿ ÿ¨ÿ•ÿ‘ÿ‹ÿ™ÿ®ÿÎÿñÿ FcyŽˆ…Œœ¥¢‘Œ}kQ2$þÿíÿõÿíÿÚÿ×ÿÎÿËÿ¹ÿ™ÿ„ÿpÿ_ÿAÿ.ÿ ÿýþâþÕþºþ¡þ‰þ}þnþsþmþrþnþgþmþkþcþaþYþNþ;þ#þ%þþþòýÍýÁý´ý©ýžýšý„ý†ýý}ýuýmýkýbýiýjýrýxýqýjýfý`ýUýLýAý@ý7ý;ý/ý*ýýýáüÑüÂüÅüÄüÅüÉü×üëüòüùüéüèüåüïüîüîüúüýýý ýýðüæüÏüÆüÛüõüý ý(ý)ý/ý6ý>ýIý^ý†ýªýÅýÚýòýúýÿýþþ0þ1þ/þJþUþiþkþzþŠþ˜þ©þ°þÁþêþûþ%ÿ;ÿiÿŠÿžÿªÿ¯ÿ´ÿ¼ÿÎÿïÿüÿ (!-=Ohs‡˜¡¥¸ÆÜäçöþ$,.;E[YS\v¤²ÀÖè÷ý÷û0Ibu“©—Œ—·Ùî+>>63CsÎ-A?32>CET…°Á¨z‰¬Êáãë <akZB, " 7D#ܘv…•”{inc= Þ [GHC ÌŒ>𼫆|d_SMONK7踕[: êÿ©ÿ[ÿÿÿïþÞþÍþ¿þ»þ©þ‹þoþ`þdþjþRþHþ2þCþEþ<þ-þ þþþþþàýßýÒýÆý¥ýyýiýhýuý†ý…ýý·ýÙýßýîýýýþ@þPþfþmþvþmþgþeþfþgþyþˆþžþþœþ¦þ½þ¾þ·þ´þ¼þËþèþûþÿ4ÿOÿsÿŽÿŒÿœÿ´ÿÐÿÕÿÌÿÌÿÆÿÊÿ½ÿžÿ‡ÿzÿzÿÿ†ÿ†ÿŠÿ˜ÿ–ÿšÿ’ÿžÿ“ÿ—ÿ’ÿ”ÿ›ÿ•ÿœÿ—ÿ›ÿÿ‡ÿsÿlÿ\ÿJÿ>ÿÿÿÿðþßþÌþÅþÅþÅþÆþÃþÆþÆþÎþÉþÂþºþµþºþ±þ¦þœþ”þ†þjþ[þHþMþ>þ9þ*þ%þ!þ þþñýáýÐýÌýÐý×ýâýçýûýíýíýÜýÓýÑýÊýÉýÅýÇýÂý¹ý°ý§ý¤ý™ý‘ý‚ýkýoýkýnýhýpýoýrýdýcýVýSý`ýdýký{ý~ýŠý”ýýzýrýaý^ýZýaýcýxýyýƒý|ýuýsýyý‰ý”ý¬ý²ýÎýäýóýþþþ%þ3þ5þ>þPþdþ}þ„þ“þ–þ”þŽþ“þ›þ°þÐþîþÿÿÿ%ÿ:ÿ9ÿIÿTÿdÿpÿ…ÿœÿ¤ÿµÿÆÿÞÿûÿñÿøÿùÿüÿ *BIitxjWUK[y£®º»¸¾µ±¡¢Âæ  ôçÜø7A1&3>Umzz‚€”ºÛîòïþüìÛÞ 08.IXUa‘Ñ ôÊÒ Pl[* .UTA4R‹®³–•Êõõ»ž¯ÕîíîèÖ¸«ª¤šŸ©±§ |T82)%$Ôž‹•–}fLD8: ÙÀµ³°´ÌÞÊŒP=4 ÄšŠ]) îÿÏÿ³ÿ£ÿŽÿ‚ÿ‡ÿ’ÿ”ÿÿ€ÿeÿ:ÿÿûþðþäþäþñþþþõþØþ¥þwþFþ"þþþ/þNþhþcþUþHþ=þ8þ3þ2þ/þ>þPþwþ…þ€þuþcþTþ-þ$þ(þAþZþoþ…þ”þŽþþhþXþPþeþþ›þÂþéþÿÿÿÿùþòþñþÿ ÿ!ÿ(ÿ+ÿ&ÿÿÿðþÞþÚþæþÿ!ÿ1ÿ>ÿGÿCÿ5ÿ%ÿÿÿÿ,ÿ.ÿ@ÿHÿLÿRÿDÿ9ÿ2ÿÿ ÿÿÿÿÿÿÿ ÿýþíþàþÛþÔþêþùþÿÿÿ ÿ÷þðþêþåþéþÚþÉþÂþ¾þ´þ¬þ§þ¤þ•þ„þpþkþiþkþyþqþyþsþuþjþcþgþhþbþtþzþnþGþþþùýöýóýøýþ þþ þþîýéýãýîýëýþ þ!þ%þ$þþþüý÷ýïýîýùýþþþþþþôýìýõýúý þ#þ>þHþRþRþSþPþZþbþpþiþtþ†þˆþ›þ þ«þ¯þ¯þ¤þœþ©þ»þàþ ÿ8ÿDÿDÿÿñþôþ6ÿ‰ÿ§ÿ˜ÿvÿ^ÿ{ÿ¢ÿÂÿÄÿºÿ¸ÿÏÿíÿßÿ»ÿªÿ×ÿQM#õÿêÿñÿ <}¶ªp0V™ËѱœŒ„“°Ã¤Š½8ùÀŸ²Æ­‡¨'އ-çà"7ÿç*ŸÀ¢|iW7(!RžÔÌ“ƒ™‘un³KGÃÐþïöý @g1Ë“Ž¾šV!ðÔé9¥âùؘ.÷:ƒ¡§¨‚Lÿáiš¢…~cE*Tƒ¯›X/#úÅÐvu/×´ªÍî 5NH$è·±ÁÀÏÓÙÈ…;$6Z],íÃÉíùݾ°™—ž®¥„:ðÿëÿûÿîÿÓÿ¬ÿ¬ÿ³ÿ¨ÿyÿOÿ9ÿ1ÿ=ÿ9ÿ0ÿ"ÿ)ÿ:ÿ;ÿ&ÿÿþôþëþáþÉþÏþæþþþÿèþµþ•þqþiþfþsþ†þšþšþþrþ]þWþpþuþˆþŠþ‘þœþªþ¬þžþ—þ°þÄþÓþ¸þ¢þ†þ‹þ¨þ»þ²þ¦þ˜þ þµþÅþÕþÌþÛþßþûþ ÿÿÿÿ'ÿ1ÿ/ÿÿÿÿ%ÿ,ÿ*ÿÿÿ ÿÿÿÿ%ÿÿÿÿÿýþòþõþÿ÷þïþñþæþÜþÄþ¯þ¹þÎþÛþÂþŽþeþgþšþÍþÕþ»þþ`þYþhþxþ}þþþþ–þ\þþîýòý5þzþ—þþuþPþ4þ=þdþrþzþ]þ^þ^þdþeþ`þMþJþ]þ†þŸþ‹þjþAþJþcþ‚þ{þ…þ™þªþžþþlþþÝþ5ÿ:ÿæþ¡þþàþ/ÿeÿNÿÿÿ.ÿBÿ<ÿ9ÿ&ÿ;ÿkÿ¦ÿËÿÐÿ”ÿUÿCÿkÿŒÿÿuÿeÿ¡ÿ ?Òÿÿ²þàþsÿa&¢ÿ9ÿ)ÿTÿšÿºÿ½ÿÚÿÿÿýÿÎÿˆÿ`ÿ_ÿŽÿÚÿ³ÿQÿeÿÒÿR‡Yóÿ˜ÿ‡ÿÌÿYyt8óÿãÿèÿÜÿüÿ$[ƒ{AF¶úÀQ4‡ž…©,xLÜW1gÚBRätOÞ½=Þ¸Ä÷i¼Ü~ïx’ƒÄ®i%0g}‹¼Ö–B 0uà@AåZüí%m‚vphg[CBPWeÖÝņ'ÕÌX‡jJ;%«Š±>òF ±Kñë$‡ÑÕ¨Z!"3AK?üÔ·Æ>™‡99K@ 19dš“BÖ{}ž¡ˆ•Îõé´˜¬¦d$?Ä#sóÿ³ÿ´ÿÜÿW{a¬ÿtÿ]ÿÿ aWÞÿTÿÿ"ÿ~ÿÎÿëÿØÿŸÿZÿ9ÿ-ÿcÿÿêÿõÿÃÿTÿÖþ–þ¯þ'ÿ‹ÿ¶ÿ‰ÿQÿÿÏþ§þ—þºþèþ ÿ"ÿ?ÿ\ÿjÿgÿEÿçþqþ%þ`þòþTÿ_ÿÿÄþ–þ“þvþ3þþþ‘þÿÿÝþþzþÙþ%ÿõþ-þnýwýeþ”ÿŠÿ•þñýþýQþ~þNþpþ ÿçÿ]ÿ*þ~ýéýîþ ÿÿ$ÿŒþBþ_þ¹þðþþþýþíþàþÈþœþlþ«þFÿÆÿÿÕþFþOþÿ½ÿÿÿÃÿ*ÿ™þþEþ:ÿJÃÿÞþ#þþ±þxÿ¸ÿšÿÿåÿÇÿÿaþ6þ¾þ´ÿ—¸>ÿ¸þ†þðþ¾ÿ/.ßÿ©ÿ—ÿ ÿÓÿÒÿžÿtÿ~ÿtÿwÿ®ÿÀÿ×ÿÆÿØÿÁÿ±ÿ¹ÿÂÿõÿk™t’Ø—òÿÿ—þÿ0ÛŠßÿ¯ÿÕÿ9âÿ3ÿ÷þ&ÿÖÿº¬te{ÿLÿÉÿnÅ!„¶ÿkÿcÿÏÿ‡šaAY¹¸n7ïI‰9)DwWüÿ U§Aÿ'ÿ%ÿ¾ÿ~&‡L±ÿªÿR³~Š÷ÿÒÿˆv󭣬ÿÿrÿ±”—0Ù¥X7Ôp–Ž~m{ ˆøÿOè1Ðýÿ~ÿæÿÐDëWNïêå´ÿpÿ*⯹Öÿ·ÿ? sž!öÿ­“–²šÿiÿ‰X÷ÿ¹ÿùÿïå•sOöÿ¸ÿ˜÷×ÿ*ÿZÿKÿ)¸f’Œ6ºÿzÿßÿ²ÄÁÿÕÿäÿÝÿ—ÿ¨ÿG$ŒùæÿHÿmÿ bUdÙ>ÚÔÿÚþµþbÿ<­rãÿ‹ÿÿ©ÿØÿ)peÖÿIÿÿÿˆR\‰;ÿ–þòþ§ÿêÿ–ÿnÿ’ÿçÿj}óÿ ÿ¾þfÿAÔÁlÿÿ_ÿFÇ»ÿôþ‘þ‰þÏþKÿzÿÂÿEÄ¥Õÿÿ…þ¯þgÿbNf]ÉÿÒþFþãþŠwq>þ‰üýzÿÅÀþEþ½þ)ÿ4ÿFÿpÇ8ÿ#þXþ}ÿ[eÐÿHÿÿÿØþ¯þøþþÿ°Sÿ$þþ!ÿs4 ÿêþªÿbÿ±þÿ o“ÿ5þ´ýãþñqŒÿþçý÷þaPz6¦ÿ˜þ`þðþ=ÿnÿåÿki}ÿzþ>þþþtìAÿÿZÿ•ÿP"1*$°ÿPÿBÿ|ÿ“ÿPÿƒÿêÿw êÈÿñýØüfý†ÿ ";§þ2þfþÄþ^ÿ.G°†ÿµþ ÿá¦èÿ•ÿÿÙÿ?E(nÿ.ÿ’”¨:þÇü þÐÄÃU4ÿlÿ-ZŽÿùþ¹ÿ,ïÊ–¹þVý†ýeÿ û7Šÿ½ÿAP~ÿÿpÿRBE½öo9ÿ…þ†þ8ÿúÿ%îÿèÿ&.×ÿÿVþþìÿ'àºÿÿôþ…ÿEí \tÿJÿÔÿQõÿ@ÿ‹ÿ§?í(Uÿ"ÿŽÿáÿÙÿ§ÿ­ÿוhÿßþÉÿ•ñÌÿ¯þ‚þ‡ÿ܂пÿÿ©à^ÿvÿ‹ÿÉC%qáÿÅÿ‚ÿûþÿGJe[ÿŽþ³þôÿ×+ÃBÿJþþgþcÿÔÄ"CÆþoüdüÉþØY›ÿ“ÿ7zÏÿ[þ þOÿׄsÿjþÿÒàd|ÿÑý4þ¡ÿÎw%Aaÿâþþ®þYÿòÿ”¹F¡ÿ"ÿÿ?†]¡ÿƒÿ, MÔÿÿôþyÿ¹ÿoÿ*ÿ*ÿªÿƒÔáÿ$ÿ ÿ™ÿZí+Ö¡l[ÿ·þŒþ(ÿ¦ÿßÿÄÿŠÿºÿ#xÖÿ…þ$þ»þ 2xY¼)¡ÿùþÿbÿÿWÿ{ÿ•–¥ÿ9þLýÅý(ÿ=”›ÿ¨ÿrPâÿhÿ™ÿ¨]ß“ÿäþÀÿ×uþ!þÿ«]_:ÿ-ÿ1ü”¾ÿ’ÿ.ïM`äðÿ>ÿÿ§ÿá3^ÿÞþ.ÿöÿ{D"ÿŸþÿÑÿ¥ïþ ÿªÿõÿÀÿ÷þÙþoÿ¦o˜ÿGþÉþ z„ÿOÿÎÿ8Y¼ÿþ²þ%„F]ÿþHþÿ4ý‰îþÿÔPeÿþSÿèÓ+†ÿTþ‹þèÿÝv;ÿ{þ ÿ‚ø+³Óþþ ÿFˆûÿdÿsÿDSeÿîýÙý-ÿ¹RïÆÿæÿ?CÞÿxÿbÿ|ÿàÿ)BÝÿêÿ‚’Aàÿ ÿOÿ&ÿÉÿ®¥û[îþ¡þbÿDâoHïÿ«ÿìÿ[ÿ½þ:ÿTñgoÿÿŸÿ0¨ÿŽÿO‚ÿ8ÿ¦ÿcƒ¿ÿÂþ:þÞþãÿo$¨ÿŽÿiÿ>ÿçþþŸþ…ÿ÷¢ ÿNþºþrj¿ÿtþ¡þ…€{þ1þÏÿAîþþ‹ýÎþ¤>vÿ¥ýÐý TÔÕÚþîþêÿ®5šÿßÿŒÝ™~ÿGþþ6!'‚ÿIÿÑÿÛc ‹ÿTÿòþþHþ|þÿlÿ‡ÿnÿhÿQÿÿþ¬þ§þ<ÿÊÿÍÿ…ÿnÿ˜ÿJQÿÚþÿþÿLÿ½ÿ 7¯ÿÿ¦þãþÒÿ–“äÿˆÿ“ÿÍäkŸÿ€ÿ^@L„îÿ¥ÿWÿ'ÿ[ÿ6æ§²ÿÿJÿ­ÿ®ÿƒÿìÿ:¾ÿŠÿ£ÿÉRAµîÿÿþÛýÉþýØ*uÿbþ:ýÆüâý£ÿǪdÿóýªýtÿ©‰+ÿý¹üoþk Wÿÿ ÿ¯ÿ¨þ]ýŸý¡ÿÅÿœýÊý7ÿšð>Œÿkÿ ¿¯Löÿ”Ä$©þþÿp*Ú¨ÿ§þ²þ²ÿ¸È;íÿ!Ôƒ‡e¹þ@þÿfD¥þƒýþ}ÿ¨ñIÝþÐý7þ(ÿ·ÿ¿ÿÙÿKÿþ?ÿ€ýuý-ÿ’|®ÿPÿŒÿZPÍÿÂþÜýùý ÿ¤±°ÿóþVÿ»ÿÿTþ]þŽÿ¶EÿJþÿK…žÿ}þEþ6ÿˆ+™Œÿÿ%ÿ™ÿ³ÿ+ÿ5ÿÎÿ+ÿÿAÿƒþLþñþœƒ3¢ÿûþÉþ4ÿùÿkkèÿ‡ÿŒÿšŒ1«ÿÿ]þÀýïý÷þ¿à{ ÿ8ÿ”ÿÿvÿ7ÿÿýþ¶ÿD©ô€ëþôünü˜ýÁÿmþegÈÿÎÿÍÿMÿáþ(ÿ®;ïÿ^ Bchÿ+ÿ”ÿ£ÿµÿ;Ï‹¶ÿ"ÿ÷þZÿC.t¡þPýZý¼þw¬­IØþðýÌý·þšÎÿÀþ¿þ¸ÿ¨oÿßý¹ýÐþýÿuöÿÿùþÇÿ´ÕÓÿƒþ.þ ÿoVÑÿ¯þíþ!•ÇÿŸþFþEÿr×—¬ÿŒÿßÿ%. õÿ¸ÿ¼ÿÚÿ²ÿ‚ÿVÿ›ÿ<ˆåÿäþzþ$ÿa<âºÿŒÿg%3†¸ÿöþÒþ<ÿ%øê÷ÿ<þsýhþ÷ÿ ´ÿ\þ þEÿK¥¿ÿÈþÿSp'ÿÐýþÝÿµ0%þBþÛÿž¿ÿ{þDþaÿÌÂIÿÆþÿÿ)ÿbÿ³ÿ?ö,„7ÿ3þþÿ¢"'Ðþþíÿ8þWÿÇýãý|ÿ  qÿEþ1ÿUÀþþÿœÿÄÿãÿ$›šêÿ·þÛý–þõÿšìÿÿÿ@ÿ®ÿ/ãÿkÿRÿÂÿßÿÂÿÚÿlŽ1âÿ'j=ßÿÉÿðþÉý£ýÿ:éþVýkýSþ•ÿ63%—çaÿþþý-ÿ ªÔPÿ”þòþaÿZÿ5ÿ•ÿE1¾ÿ+ÿGÿÕÿœõB9ÿ ÿÿÿ%2'íþ-ÿ›ž»ûþ4þÑþîÿfL¤¬·ÿ©þ\þBÿÇ­~ÂÚÿÿöþ…ÿþÿQÿ<ÿúÿÿ ÿ‚ÿÏÿùÿøÿ˜ÿ ÿÉþRÿëÿãÿ’ÿLÿÿ‹þ:þcþæþÙÿµY¹þ‘ýÀý×þ&š?B„ÿ ÿÿŒÿKÞÿÙÿÔÿóÿóÿÝœ!>ÿ|þ¨þÕÿ”RÏÿvÿ£ÿíÿŒÿßþÁþÿÂ1¡õÿcÿXÿâÿ—‹Äÿwÿ«ÿôÿ8²ÿiÿ‡ÿÒÿÍÿÿ3ÿ<ÿüþmþ/þèþ*ÏÖÿfÿ&ÿEÿ¾ÿíÿßÿLг¤ÿŠþþMþÿìÿx¬ˆ|ÿÿcÿÚÿ¼ÿ{ÿäÿúÿïÿsÿ;ÿ ÿ ÿXÿÄÿ—$ü,þþ2þþ7ÿ¡úX;ÿÇþòþsÿ&>Îÿãÿ_hàÿ ÿwþ«þ[ÿ+hûÿšÿ…ÿÿKÿÿÿbÿ3öÿ:fÿ ÿÿcÿðÿ³7-Â#’ÿ#ÿMÿºÿáÿ¼ÿ¿ÿ&Å!€ÿþþFÿŽ0¬ŸÊØOæÿÌÿ‘ÿzÿ•ÿÑÿQJáÿGÿƒþþ9þÿ˜ª‚YÿÜþÿ¦ÿþááÿÀþ‰þŠÿ¾ENÿÿŠÿÚÿXÿ†þ-þÿùA…Êÿ¬þÜþ$O'´ÿÿ/“ˆ ¬þ^þ+ÿ:ëÿSÿªÿÜeÿ/ÿ:ÿ[ÿ¬ÿIá égçÿsÿQÿÌÿÎÿlÿnÿæÿHªbèÿÛÿªÿdÿ[ÿ‘ÿ¬´CÿBÿÇÿ 6Ëÿ‚ÿqÿÇÿ Ðÿ°ÿðÿx÷ËâþÊþ³ÿƒÿŽþ§þ°ÿÿ‹øÛÿæþêþyÿ²ÿƒÿŒÿ-%ÌpÐÿ~ÿEÿ[ÿæÿçdùáÿÿ ÿèÿ`$dÿ´þìþ,dƒx&ÿÞþBÿÝÿðÂ*Vÿiþþçþ“¶œ ‰ÿÅþ¦þÿÿÿÿ…4†„ÿ„ÿÐÿ-s€R ùÿR˜™nÿ­þgþ¹þ`ÿZä0Yÿáþ÷þXÿòÿ>ŸÿFÿ}ÿîÿVFÿÆþ¥þPÿ£ÿ¹ÿxÿàþyþþÿnãæeÀÿBÿ/ÿÓÿõ…/½ÿÊÿæÿEÿëþ ÿÑÿnCgÿ°þrÿà<z•ÿ6ÿHÿ®ÿYÍËž/Ðÿxÿ‰ÿÌÿ ûÿ´ÿÿdÿäÿ@ %ÿ~þÿp^ ÿ³þiÿI¾©‰è‹pÿtþRþÞþÇÿR†“‹~ áþŒýùüÏý†ÿÍCfQ¢ÿJÿ:ÿPÿ˜ÿ¥ÿÔÿ_ìATŠÿÙþmþœþ,ÿÜÿ€à#3äæÿ–þòýQþ°ÿ5ã„[<ÿðþŸÿ|¯èþãý þ®ÿ<5—ÿ­þÍþ±ÿIDÒÿŒÿ¾ÿ6Yƒÿ6ÿÿFúíàÿŒþTþ\ÿÁ?¢íÿßÿ¢hfýýIý!þÓÿ³‹rðÿùþ þèýSþOÿ¥”ànš†ÿ£þŠþÿŸÿ†içÿ½ÿ1déÿÿ}þÛþÄÿJPúÿÈÿçÿ^d‡ÿÇþÿ*Ä_‡ÿÿ(ÿàÿ]‚Yh"`ÿ¹þ½þ*ÿÞÿkîsÆ=úÿþËý`þ”ÿ}`JÏB•ÿµþþŠþJ_Rÿèþ†ÿòÿÝÿÍÿ¶ÿçÿ$N’C™ÿÿþsÿéî_ÅþþÅþ 3Ú°òÉÿ£þ0þºþwÿP 3¶²Ïÿ¹þþ0ÿ>î’Éÿ‡ÿq®ÿ)ÿcÿ[Ô âþ§þšÿžï-ÿ¤þDÿSÀÿliÎÿ2ÿÿ¦ÿYؽ“m/Œÿ¯þwþûþ0çßÿ"èÿ ÿcþhþÿáÿ‹Ñ¨fÝÿÿªþþþNX;$"ÿ?ÿNóN›þþý³ÿ Àü­þýŒýÈþac´EØ…<üÿ6ÿÔþcÿ²è(ÍÿÍþÏþAÿÔÿ5’ÿ®ÿ4¸F2ÿËþEÿ€‰}B.ÿ\ÿUñÿ6ÿƒÿÜŠ¡ÿ'þ„þ4Sµ¶þUýúýÚâ$ÿÙýÈýèþCYÐ`©ªÿ÷þÔþ!ÿvÿqÿ£ÿ @Äÿÿ€þäþ˜ÿ åÿ+ÿ™þŸþ>ÿ*ëý<eÿ*ÿ£ÿP£LÐÿrÿOÿpÿÛÿ…ËgÌÿrÿœÿ±ÿ\ÿÿþ(ÿåÿ¦æµk èÿ$? ªÿTÿ‰ÿñÁáÿ1ÿõþAÿßÿ[†Ýÿõÿ9>*7Vu„3˜ÿýþØþ[ÿ cƒp"lÿÿTÿºÿ¶ÿLÿ)ÿ­ÿ¡PøjÿšÿI!ÿHþÁþ$.>çþaþÕþ¢ÿ'€ÿÿ"ÿD² ±ÿ¦þ®þÿY‡—­œ@ðÿÀÿaÿÿVÿľ®ÿ7÷„Tm3ÿƒþbÿÆmâÿ?ÿ&ÿxÿüÿ³ÿXÿeÿúÿÏøFKÿÿ×ÿ[XÿAÿ$J=)ÿñþ'ÿ’ÿÚÿïÿÅÿ•ÿ~ÿuÿ—ÿíÿ ¯ÿAÿÿ ÿ´ÿ^÷;ÙÿzÿUÿoÿÈÿ˜H]ܰÿáþæþ†ÿàÿ¦ÿ£ÿÉÿâÿ;YNìÿÁÿ;0^­.{mý`ãÿƒÿ'ÿ1ÿ7mƒ•ÿˆÿ%ÇÀùÿJÿ»ÿ! ~ÿ«ÿ$]©ÿSÿ©ÿd…`ÿ7ÿ1ÿKÿ{ÿ´ÿI5f¡ÿöÿˆ™ÿ5þCþ‘ÿLzëÿªþºþbÿÆÿ¨ÿqÿ¯ÿoZ¯71ÿjÿØÿ¬)Üõÿaÿtÿ²Üj@ÿ…þÿõ*·¯ÀÿëÿW¹º‡ÿ•ÿ9ÓÍðÿÍþlþ.ÿ‡9 FªÿÝÿ£[ ÷ÿôþ^þËþåÿÎâž±¡hÿxÿ'ÌÿÁÿ52þÉÿCÿºÿc|ìÿeëó%ÿ ÿ¬ÿ`pi£±‰7Ìÿ ÿÌÿNñ+ó„ÖÿÿúþõþÁÿÔ›ŸòÊÿúþÏþÿÿåÿ5º?~\!íÿsÿÿàþÙþzÿ{$>ÎèÿÿþÔþjÿqkjHVNàîÿùþ™þÝþ~ÿBkZpªc¯ÿ"ÿÿKÿÍÿ%Q¥ ¶Ë ÌÿØþÛþ€ÿ=4 ûÿ†•ÿøþÕþwÿ½“‹´°ÿGÿpÿ×ÿ1‘à…ÛÿŒÿ¢ÿÊÿõÿTlCóÿòÿUÿ‘þ¡þüÿyMMÿ"ÿnÿ§ÿGÿðþ\ÿ©Ü³Xºþ þ[þHÿ3oiM,âÿ|ÿÿOº37ÿóþ¦ÿDöm(4ZEáÿ%ÿõþÆÿùRgÿÿAÿÈÿ7—ÊrËÿ²ÿ_ûÙîÿÝþ‰þYÿ¸pâbÿþ þ„ÿCÁÂTÿeþrþ^ÿT4ÇÿÎnè|ÿþÎý¼þ:Xs¤9µÿAÿÿçþÿfÿ;Jïø¯ÿhþ¯ý:þ“ÿ¤â]Üÿ§ÿõÿ1¿ÿéþ©þgÿ޹YôÿkÿCÿ¡ÿXöºÛÿQÿŠÿ³ÿ«ÿ®BLÁìÿ"NRBm²¹Ÿf»ÿÌÿ«:Øþ€þ´ÿ?~tÿ¸þ§ÿb;78ÿ÷ýþÿP*x´ÿƒÿ™ÿÏÿÎÿjÿÿÿîÿ;¼¼ÿÅþ˜þÿ.ÐÍŽI#?$Ãÿcÿdÿåÿ©µ-«qCÿ²þ³þ{ÿ³\G§';^o8ûÿüÿF Šæÿ(¯fKv®ƒÅÿÿ ÿ¶ÿ¿¥Þÿÿºÿ¥­j*(E¤Ëûÿ.• !¡ÈÿÿÿÙÿðTÜ3¹ÿ¢ÿÆÿ°ÿUÿÿE 2‰eÿÐþ4ÿV N¥ÿ»ÿ(Žƒ3ºÿƒÿËÿ<T×kE6ËÿMÿcÿ= g\9cÿ ÿFÿÏÿEŽªúV7:ÿœþ¾þÿõ¥CLáÿTÐ¥Öÿ3ÿ,ÿãÿ¸<ysÅÕDlÿÿRÿ.éW}2|æÿØÿ,2":VzIe•´®I­ÿTÿmÿÅÿ:<&1$*hÀÈvÞÿöÿ<n¸Ë·{+Âÿ„ÿÁÿìÿ$gŽåyUÿ„þLÿ%f ˆEÿTÿns˜ÿ¥þ ÿ¤¢%­ÿÿs3šþrþíÿ½sÖÂÛÿòÿÝÿ©ÿýÿ¸g’HldÿÕþÿàÿÛkpñµÿ½ÿ.w™“VmXÊæ5ÿ]þ ÿn:°°ÿ…ÿ­­éÿÿ?ÿË@c'Äÿ ÿ*ÿ!1ˆöÿÏÿÜÿÄÿÅÿœÿ˜ÿÉÿ`˜õ?ÜQ¿ÿÿ¹;Ÿ“1˜üÿ°ÿ¿ÿÔÿŒÿ‘ÿ«¾ôÿ‡ÿ 6€±ÿ‡ÿ þWãìÿv'?”ïÿšÿ—ÿÜÿéÿºÿÁÿo2›Óÿ!ÿÀþ¤þÿ'g5è»jÿÕþ”ÿÈ.¡þÿJUÛÿ4ÿØþVÿ÷ÿlÈüˆûÿYÿçþÿíÿ%-sKU“ÿnÿÌÿüÿÛÿÝÿkríSÒÿnþNþRÿoÓŽN·vŸDÈÿÎÿZ;Óÿ¨ÿÄÿ@’HÍÿ­ÿ'&éÿùÿN•p%[ ‹]²Þÿ‹ÿ¾ÿÜÿ„ÿ ÿZÿ—¾¸VÿmýdýÛþ”EóºG/H(‚ÿ¿þzÿÓ‡Ú²ÿaÿŸ' &ÿÿ—ÿ4Qêÿ&B:wJíÿàþ¾ÿÉú7~ÿcÿ?aãiÿñý…ýNþNÿ ¶~EìOŒþ‹ýýóþÞ^«"Z¦¢ÿÿˆþjþÜþºÿÜÒjn—'œþ ý˜ýƒþ)(|n’þ)þvþÿþXÿÄÿ‡\Ô”©­ÿËþ^þlþéþlÿÊÿÔÇ5ÏøýeüÜüõþ÷Çèbä$øý¡üéükþX³_~U¸(Bþ0ýØý•ÿ4ô/G[éš‘þKý¸ýxÿy~‡$4ÿTþˆþœÿH´±¨ÿ4ÿsÿ›ÆãÈolÿƒþeþ0ÿ¹é9·fÿ}þ þÿ9ÿÚÿØÂ* [êþ þÊý þÜþ.§»ÿÎýÅý‰þ6ÿxÿÔÿ»´ù(þSý.þÝÿCò%ÍÊÿDþPý²ýeÿ˜W½Åäëþ¤ýVý/þjÿ× “o“Y ÿ3þ=þÞþáÿ*ÿèÿãþ®þ"ÿ”ÿÄÿZÚ±›ÿùý³ýœþâÿÏwhešÿØýýýôþR1´ÅoZÿþQýðýgÿ¯OW[ŽÿÁþJþ^þÿòÿ¸ Á:øÿËÿ‡ÿÿßþÿÅ«€uVÿÕþ*ÿ ƒN»ÿmÿ ÿ¾°œÿyÿYÿKÿÿDÊì¨Nöÿùÿºÿžÿ¬ÿ)õ°xñÿ)þkýÛýÔþÅÿcŸ¥öÿ©þ½ýgýþÿ8'Yí9H1ÿ/þUýmý{þöÿ»ú\I|ÿHÿ„ÿ¹ÿÃÿÎÿµÿÎÿRŸ–G Ts°«=RÿNþ,þØþ!DeßRFÿ.þ—ý'þ×ÿ¶»“n/6ÿóþüþ ÿÿyÿ}‡ËÐÜÿOÿÿßþ¥þÔþ½ÿ Àe9/ÿ»þôþ’ÿ5XÕÿ†ÿóÿécfÀþÿoÿ:ÿ;ÿXÿvÿÆÿ`|q`Múÿ?ÿwþ5þáþ4?Á²”M£‘ÿKþ¿ý þˆÿ 1ŒÆ*oÿlþïýŽþ³ÿ†ÙB,ÁÞÿÖþþÿýÿJ5¡‡áÿÿqÿ:ÿÿ ÿ/ÿ²ÿCÃå|»ÿÿ ÿ’ÿ4ØÿˆÿÛÿpñüd‡ÿßþÌþ<ÿž’Þ>ÿõþ7ÿ×ÿ^­ú;Q&»ÿTKòÿðÿ„QíâÿqÄ=4ÿÍþŠÿ¼=ÇÙÿ‹ÿÑÿðÿñÿ"’ÕŸ(D!’ÿÿ=ÿøÿI¥ÿ­þŒþÿèdy×þþ»þN^ˆù;êÿÜÿóÿ™ÿÿÿKÿ›²e ÅÿÌÿµÿbÿþþÿ£ÿAýc`ä{Óÿ«ÿsÿ•ÿW•S™ªÿÿ#ÿ·ÿGJ;×Zèµÿ²þšþÆÿ˜šœoÿ'ÿAÿƒÿµÿøÿ{QX½‡ÿ`þõýZþlÿªstñ3JÿÉþ·þ ÿ¿ÿ¼DÚÿ¤ÿPÿóþÀþÙþPÿÿÿú—z¾ÄÿÇþRþ‡þ7ÿ²L’T-ÿþøýéþ¹×©{e5ÝÿÿTÿ@ÿmÿ¯ÿF+½sM4ÿ¬þßþŒÿ*H¡à¯<ÝÿÈÿôÿ ÛÿÍÿ,º=*z¤ÿOÿkÿÿ¿ÿÿÿtýO®ÿÿèþAÿ!L¶³ÿôþÃþÿœÿ\i6 #ðÿ¤ÿ0ÿßþÿ­ÿÿÿóÿ±ÿµÿãÿ5dQ‘ÿ&ÿ*ÿiÿÐÿ>š¾dõÿÈÿiÿÿÅþ,ÿèÿ^v[?ùÿÓÿšÿsÿ¯ÿIØÂCëÿðÿjäÇ+oÿ ÿ2ÿ»ÿ_»Édzƒ7Ðÿ¼ÿ×ÿ ÷ÿ Q‘Zëÿiÿóþ€þFþµþÐÿ3Ù»…ÿçþùþDÿ…ÿ¸ÿóÿcÕµ œÿzÿpÿ>ÿóþåþNÿÙMdßÄÿÖþ›þêþwÿïÿmëy•Û¥ÿzþ þŒþˆÿ”;PBÉïÿÿšþþôþ°ÿ wæs],ÿ\þ;þ·þoÿëÿeÉëDZÿzþ þpþ¥ÿõº—ø<ÀÿÓÿêÿ¤ÿÿ¹þ7ÿ0 Z÷yáÿ`ÿðþ±þµþÿ†ÿ{‘75ŽsHÿ^þøý(þ°þ‰ÿm7èG*pÿÊýÂüèü:þ1ú)͉ÿ©þBþ)þ–þoÿŠ•* ‰’–ÿ¼þþûý&þ¼þÆÿ`5»ÿ®ýßü|ýÿ²û»Îº¤ÿÿ¾þpþ:þ“þ´ÿ)bvgÒÿªþ¢þÿ•ÿÈÿïÿp.7šÿœþ•þ ÿžÿúÿ2gÈâlˆÿ»þ¿þbÿ9ÝEOè^ãÿàÿÖÿÁÿÐÿ"À52’„ÿÌþÁþJÿ×ÿJxŠ´ŸJçÿÌÿôÿ8O,áÿ¤ÿŸÿÑÿ"qièÿÿ¡ÿfOâÿÔÿ<©¯@Ïÿ“ÿœÿñÿa”mÁÿÅÿúÿ#.0>o¡—ÿ^ÿšÿ bweÍö–Üÿÿ£þáþxÿ[H%Óxãÿÿ^þþ×þ!(Q½/Ëÿsÿÿþþÿÿ¼öìÆzJÿœþXþšþQÿ‚S<™®ÿÿöþ:ÿ«ÿu¢½·~/ôÿÅÿqÿîþ²þÿ ôQðIËÿnÿÿÍþøþžÿsñ ÑnœÿÄþþÿØÿ”æÍx¢ÿÈþLþ~þ^ÿOEUì5bÿÑþÑþDÿÜÿ4?VŽ¢|ØÿØÿÏÿ“ÿ?ÿÿ9ÿ–ÿúÿHZB9$¯ÿwÿ¢ÿçÿòÿ®ÿ_ÿmÿòÿ¤î™âÿRÿ1ÿPÿÿŽÿ„ÿ•ÿÞÿAj&Òÿ¯ÿåÿÅÿxÿwÿÛÿ487†4 yÿtþPþÿ§ç,ƒ$ÿ]þ.þ¯þ²ÿÇoµ‰=¿þÿ ÿ/þ(þúþXf¬ DÙÿÝÿåÿ½ÿÿhÿfÿsÿ‡ÿÐÿcó;}Ðÿ8ÿ§þ"þþéþ##ƒB®8ðÿÐÿÿBÿûþØþ&ÿÿÿ_Kå—2ÿŽþÄþZÿäÿT¥ÝkÒÿÿ’ÿÄÿåÿëÿÕÿâÿ‰×̆> 6M; Ýÿ¦ÿqÿ’ÿ ¾éQ³ÿrÿPÿZÿƒÿ ¶>çîÿòþÜþsÿ*Õÿyÿ—ÿ>»²šÿ¸ÿPÓ·#|ÿGÿkÿÄÿ Qx³íÊ/Gÿ­þ¶þxÿ‚>™ŒNö¨#dÿÿAÿÔÿpÓ5F5­ëÿ@ÿÿþ<ÿïÿ]YY½7eôüÿÿºþÿÿÆÿàÿðÿ Vˆ™†jŽÿ ÿ ÿyÿ(¸ñëÌ|îÿ^ÿ"ÿKÿþÿ¡ç™)óÿðÿUÇBqiÙÿÄÿH4@°' Òÿ¨ÿÏÿ6¯X,ÑŒfAøÿñÿ÷ÿCmš®´ m!Íÿ…ÿkÿŒÿòÿW¬ÉÄ«| wÿîþÈþÿÅÿ†ÎUÙÿyÿ5ÿÿ:ÿÖÿ¦p¸Œ^ÉÿWÿ$ÿ<ÿœÿ+©êéÔǺŽ2ûÿQ’Ç*+ôÂŒv`NEe‰™œ•‡i8çÿƒÿ6ÿ_ÿÔ*ÿš"âÿ¬ÿOÿ¿þ§þ-ÿÛÿyáö¦Còÿ¸ÿ£ÿ¸ÿ÷ÿD€ŠŠ_éÿhÿ0ÿ9ÿ¡ÿ*ãÿ¦ÿ¥ÿâÿ!(D—Úë±W¶ÿ”ÿ¤ÿåÿQŒW/åÿ²ÿaÿIÿ‚ÿÓÿZŽ»Ç´_½ÿÿèþNÿ®ó˪‘‚BÃÿ`ÿ<ÿSÿšÿ­?pFÔ,µÿ¡ÿïÿMžÊϪp5äÿªÿ¤ÿÌÿ PŸÜå忦‚L\ä9+ñ»x¾ÿªÿêÿF~VR}¥OÜÿtÿ@ÿtÿÛÿcÛ6-ÖgÞÿqÿ-ÿ/ÿxÿõÿk¤›c'áÿ‰ÿSÿ`ÿ¯ÿ8feI/+êÿäÿ (Ipz[. 3\dS5DZlZ¸ÿ…ÿ³ÿ(Žšt* þÿÒÿÀÿÏÿ7žÚÕ³kÔÿÃÿÎÿåÿ6yÉàºJÐÿ…ÿ¡ÿ[KóÿSd1ëÿáÿÿÿçÿ£ÿ–ÿÒÿ,H8öÿ /C%ìÿúÿ +GENG'òÿÿÿ (Rg‚––dáÿðÿ=ʶŽuz‡lK3\ªD'Â?ÜÿÅÿ½ÿÔÿöÿR¾)H¤&Ïÿ»ÿÝÿ@ÇZ´§T÷›Içÿ™ÿ†ÿÊÿ:ŸÈÕΗbóÿ>w¡ÈäïõÌ}ÖÿÈÿÍÿïÿ &<s°ÓµVêÿ˜ÿ›ÿ»ÿçÿ"eÀôæªp'Çÿ‡ÿ{ÿªÿùÿ.GAg‘–>Íÿ}ÿŒÿÍÿQ—ÛðÃjùÿ ÿˆÿµÿ>k„Ÿ˜y<ßÿÅÿäÿk¢Ä¿“wcU5øÿ,r ¢‹q~š”iYVVsžÔçß¾¥¢¥ˆ^4&FÜïãÛøá›U'(CZ”áó¢EÚÿÄÿ²ÿÄÿ€ñ Õ»”q1øÿÆÿ¿ÿüÿgÂþÍ{>Úÿ ÿ{ÿÿ®ÿuÊØ–Aåÿªÿ™ÿÌÿ'Ò×Ï·¢9Üÿâÿ&-"3FjkjVK24i›Ä¾¼œŒqIôÿôÿÿÿ4\ƒ„wy‰Ÿ¤©uWCCWªÙíÉN+-6A[“Ú ä°‹sZSQf„³å  Þ’Eýÿþÿ>m„™·ØÚΞPA?\|ž¿Ã¶‘LêÿíÿY›ÑâÝÁ¡|Q63Edy‡——Œ],öÿëÿòÿ (d–¹¶œ}kblkuvspcZW^b`g|ކP-%.\Œ²ÍÝÛ×¶”rak›ª«¯œ„\M7A^|‹œ˜…·ÔïßÓ·™zZY^…¡µ¸½ÃŤu<%%Da„œ´ËÒÀž‰{mmpƒ…‹€‚y}aD*9Gbtu}vul[X_mquvsp[C:/8FOadhS;$(-EZp{taZKQH\gkommqhg\T\bQ?7?h”¸¿¯Ÿ“s]`hƒ ÈÉÉdzª›Ž“¦ª›•˜¦·ÏçéæÑ¼©««³ÄâùæÏ£•’–¤³¼»µ›’Ÿ£­»ÎÄÖÏÈÄÆÞÇ €^QW`ivˆž˜„qaNLKOR`dpvzdi\]VUAJ;,&'.6CJTYPTR]eaicmoiUG2% &?Pgw‰œœ›•“Ÿ‘¢Ÿœž ž’ƒuscakt„’š¦¶ËÖã×ÍÂÄ´µ¦¡™’˜Ž¤£¡§«±¶¸ÀÁÐÁö³²¹®«¤š—Ž£ ™‘ŒŠ’˜šž¦¨¨ ‡}„}‰ƒ}„ˆ‚}wowqvƒ‡€zzvkeUSKRZfdtw{ztqjhjhjkkmqiWRKNGJLYkn|‡Ž‡‡‚qolopq~|}~tqlbcgop{‚†”•¡¡¥¥£ž¢”›”…~}xxwxx„†‘˜¥¢¦¥¬«žš™‘Šztnrpwmwqyuƒ•”ž ¤¨¥ž“˜’‰ˆƒ{}|~|wy|‚†Žª©§¦˜ˆ‡€†‚zzsuptlpokfjgqu{€†ƒ…ˆ†wzmgjlqpqoqpfgknqtzy‡“–™¥–™•𛣛œœž ŸŸž›—™œ›žœ©¥«¨§«¥¦ª±°±¯®¦ ­­«ª¨§¦ ¡Ÿ¢£¢¦žœ››—™Ž‘ŒŠ…}{{xwvy„prlhciheimkhfd^bicdcf]a[`^^a`b]fbbb_``at€vtqptttqxquz‚’Ž‘•’Ž•‹‚ˆˆ‚‡ƒŽ„†z{twvt{y~xspaifcgcfbghpd^[``a`gj[^WTUNOQIJHIMMIKLIGDJEJKINMIGA@=B=>@GDG@F=C???B@K=IDD@>>=:1,402275-30598842/3-,*)#(*($*#&&#)')$#"2.1./0,4.//(3.1/02088=6372<278>><@9BDC77222-0).,-'*'&,&$,(()#'& '"!! "#$.%'")%&!$'#$##&' (&#&"%#%'':8611,-.0-++++)*,+'-',+$*-+&%"')*!$!$%"&&(,-+++$&")3,0+.-/,+*++.-0*-('(12&,.1*/3//)1,*)(+'-,&/),'&%*)'*1**$"" !## ! " "  '%%'"           þÿýÿÿÿþÿýÿýÿúÿöÿùÿúÿûÿøÿøÿöÿíÿòÿêÿöÿëÿóÿòÿóÿîÿîÿîÿíÿðÿðÿöÿïÿñÿõÿïÿóÿïÿóÿùÿóÿîÿñÿîÿêÿñÿïÿôÿëÿîÿðÿîÿðÿõÿóÿðÿêÿóÿÿÿ÷ÿóÿíÿòÿõÿòÿõÿøÿôÿõÿýÿùÿùÿüÿøÿýÿ÷ÿøÿýÿÿÿþÿ÷ÿüÿþÿþÿýÿýÿùÿýÿÿÿüÿóÿûÿùÿøÿýÿüÿùÿöÿñÿôÿóÿñÿíÿíÿôÿíÿ÷ÿÿÿöÿøÿòÿôÿïÿòÿñÿðÿõÿóÿóÿíÿóÿíÿðÿìÿìÿìÿïÿêÿìÿðÿñÿòÿîÿíÿòÿëÿëÿîÿíÿçÿìÿçÿðÿêÿçÿóÿíÿöÿîÿïÿëÿîÿåÿëÿïÿäÿîÿîÿîÿñÿùÿùÿñÿðÿñÿôÿüÿõÿóÿñÿóÿðÿóÿôÿõÿòÿøÿêÿðÿîÿîÿïÿîÿöÿûÿ÷ÿóÿôÿôÿõÿðÿðÿòÿîÿõÿðÿóÿ÷ÿþÿõÿøÿöÿüÿóÿõÿöÿîÿôÿðÿõÿóÿõÿõÿôÿñÿöÿûÿøÿùÿöÿõÿûÿôÿÿÿ÷ÿûÿþÿùÿþÿüÿ ÿÿúÿþÿþÿÿÿÿÿþÿýÿûÿÿÿ   ýÿýÿýÿüÿþÿüÿýÿùÿúÿþÿùÿùÿÿÿýÿûÿýÿúÿÿÿüÿüÿÿÿþÿüÿýÿúÿþÿùÿýÿ ÿÿÿÿôÿÿÿõÿüÿøÿÿÿþÿþÿÿÿýÿúÿÿÿþÿüÿÿÿþÿüÿøÿûÿÿÿÿÿûÿ ÿÿúÿûÿýÿþÿýÿúÿúÿûÿ÷ÿýÿûÿüÿúÿùÿøÿöÿ÷ÿþÿïÿûÿñÿõÿ÷ÿûÿöÿúÿ÷ÿøÿ÷ÿõÿðÿ÷ÿóÿòÿëÿòÿëÿôÿîÿíÿõÿ÷ÿõÿöÿõÿøÿêÿðÿòÿñÿ÷ÿõÿõÿøÿñÿõÿòÿïÿöÿ÷ÿóÿïÿëÿðÿëÿêÿçÿéÿãÿæÿéÿæÿìÿéÿåÿîÿâÿìÿæÿíÿäÿæÿçÿéÿæÿæÿáÿäÿéÿàÿéÿàÿäÿÞÿÝÿäÿÝÿäÿßÿãÿÝÿÚÿâÿÜÿÛÿØÿäÿÚÿÝÿáÿîÿâÿãÿØÿßÿÕÿ×ÿÔÿÓÿÚÿÕÿ×ÿÖÿÓÿÜÿ×ÿÕÿÙÿÐÿ×ÿÓÿØÿÔÿÕÿØÿØÿÔÿÕÿÕÿ×ÿÒÿÚÿÚÿÕÿÝÿÔÿØÿÓÿÔÿÓÿÐÿÓÿÓÿØÿÌÿÐÿËÿÍÿÂÿÏÿÕÿÚÿÌÿÑÿÈÿÑÿËÿÝÿßÿÐÿÓÿÐÿÜÿÉÿÎÿÉÿÌÿÒÿÇÿÇÿÁÿÄÿÄÿÅÿÔÿßÿØÿËÿÌÿÀÿÆÿÁÿÆÿÃÿÇÿÁÿÅÿÂÿ¼ÿÁÿÀÿÀÿÀÿÀÿ¿ÿ¾ÿÂÿ¹ÿÄÿ¶ÿÀÿ½ÿ¸ÿÁÿ¹ÿÁÿ¾ÿ½ÿ¿ÿÂÿ¾ÿ½ÿ¿ÿ¿ÿ»ÿ·ÿ¹ÿºÿºÿ¹ÿ»ÿºÿÆÿÎÿÁÿ¾ÿ½ÿ¸ÿºÿ¹ÿ¶ÿºÿÊÿÇÿ¾ÿÁÿ·ÿ½ÿ¾ÿºÿ¼ÿ¿ÿºÿ¿ÿÉÿÁÿÄÿ»ÿ»ÿ¾ÿ¹ÿ½ÿ¼ÿÀÿÀÿºÿÇÿ¹ÿ½ÿ·ÿ¿ÿµÿ¿ÿ´ÿ·ÿºÿ¹ÿ²ÿ´ÿ»ÿÃÿÁÿ»ÿ¼ÿ·ÿ¸ÿºÿ¿ÿ¿ÿ·ÿÁÿ¶ÿ¼ÿ»ÿ½ÿ¿ÿ¾ÿ¼ÿ¼ÿ¾ÿÂÿÂÿÆÿÄÿØÿÑÿÏÿÈÿÆÿÅÿÈÿÄÿËÿÉÿÉÿÍÿÆÿÊÿÊÿÉÿÉÿÊÿÍÿÑÿÕÿÏÿÊÿÒÿÊÿÈÿÊÿÅÿÆÿÇÿÐÿËÿÅÿÅÿÄÿÅÿÂÿÄÿÃÿÃÿÂÿÌÿÅÿÉÿÆÿÉÿÈÿÌÿÔÿÊÿÅÿÇÿËÿÉÿÃÿÉÿÔÿÇÿÄÿÅÿÃÿÁÿÇÿÁÿÅÿÁÿÆÿÃÿÆÿ¾ÿÄÿ¾ÿ¿ÿÄÿÀÿÀÿÅÿÌÿÐÿËÿÊÿËÿËÿÆÿÌÿÂÿËÿÅÿÆÿËÿÄÿÉÿÏÿÈÿÍÿÈÿËÿÇÿÊÿÈÿËÿÆÿÉÿÙÿÖÿÐÿÓÿÏÿÒÿÕÿÑÿÌÿÙÿÝÿ×ÿÓÿÎÿÏÿÑÿÍÿÍÿÍÿËÿÊÿÆÿÍÿÍÿÈÿÏÿÊÿÖÿÌÿÍÿËÿËÿÍÿÇÿÉÿËÿÈÿÈÿÈÿÇÿÄÿÊÿÍÿÌÿÍÿÃÿÊÿÊÿÆÿÈÿÈÿÉÿÄÿÊÿÅÿËÿÆÿÈÿÄÿÐÿÆÿÔÿÉÿÏÿÆÿÄÿÎÿÏÿÕÿÒÿÙÿÖÿ×ÿÑÿÐÿÎÿÎÿÍÿÓÿÐÿÏÿÕÿØÿÚÿÑÿÖÿÌÿ×ÿ×ÿÖÿØÿæÿáÿÝÿÐÿÑÿËÿÖÿËÿÓÿÑÿÏÿÒÿÒÿÍÿËÿÉÿÈÿÇÿËÿÎÿËÿÍÿËÿÍÿËÿÈÿÊÿÆÿÈÿËÿÐÿÊÿÇÿÁÿÈÿÊÿÅÿÂÿÀÿÀÿ¾ÿ¼ÿ»ÿºÿ¸ÿºÿºÿ¿ÿ¼ÿ¹ÿºÿ»ÿ¹ÿ·ÿ¼ÿ¹ÿ¶ÿ½ÿºÿ»ÿ·ÿ»ÿ¹ÿ¾ÿ·ÿ¶ÿ¹ÿ³ÿ¹ÿ³ÿµÿ³ÿ¶ÿ¹ÿ°ÿ¹ÿµÿ´ÿ¯ÿ¶ÿ»ÿ®ÿµÿ°ÿ±ÿ±ÿ°ÿ¯ÿ¹ÿ®ÿ´ÿ¬ÿ°ÿ±ÿªÿ¯ÿ«ÿµÿ²ÿ¬ÿ¬ÿ¯ÿ³ÿ­ÿ¯ÿ¯ÿ«ÿ³ÿ­ÿ±ÿ°ÿ¯ÿ¬ÿ®ÿ¬ÿ¬ÿ©ÿ­ÿ±ÿ¦ÿ²ÿ£ÿ¯ÿ¢ÿ°ÿ©ÿ¤ÿ¬ÿ¦ÿ«ÿ©ÿ¯ÿ­ÿ¦ÿ©ÿ±ÿ¥ÿ«ÿ¥ÿ¨ÿ§ÿ¥ÿ§ÿ¢ÿ¢ÿ¦ÿ¨ÿ¦ÿ²ÿ±ÿ¨ÿ§ÿ£ÿ¢ÿªÿ¤ÿ¤ÿ©ÿ£ÿ­ÿ©ÿ¦ÿ¤ÿ£ÿ£ÿŸÿ ÿ ÿ ÿ ÿœÿ¦ÿ¦ÿŸÿ¡ÿžÿžÿ¢ÿ¤ÿ¡ÿ¦ÿ¡ÿšÿ¡ÿ¢ÿœÿžÿÿ°ÿ¥ÿžÿ¡ÿ¡ÿšÿœÿ‘ÿšÿŽÿšÿžÿÿœÿ¡ÿ¤ÿ²ÿ¦ÿ¡ÿšÿ˜ÿÿžÿšÿ“ÿ–ÿÿ”ÿ“ÿ“ÿ‘ÿ–ÿ—ÿÿšÿœÿ ÿ’ÿ¢ÿ¥ÿ¢ÿœÿ™ÿ”ÿœÿ”ÿ•ÿÿ—ÿ™ÿ”ÿŽÿ™ÿ’ÿ™ÿ•ÿÿ ÿ¢ÿœÿ˜ÿ¤ÿ¡ÿšÿ™ÿ’ÿ—ÿ”ÿšÿ—ÿ•ÿœÿ›ÿ–ÿ—ÿ’ÿ˜ÿÿŸÿœÿ©ÿ ÿ¢ÿ—ÿ¤ÿ™ÿ ÿ—ÿ™ÿÿ§ÿ¦ÿ¡ÿ¡ÿŸÿœÿ™ÿšÿ›ÿœÿÿ›ÿÿ™ÿœÿ˜ÿžÿ—ÿ›ÿ—ÿ›ÿ“ÿœÿ”ÿžÿ¥ÿŸÿšÿ›ÿžÿ™ÿ ÿ©ÿ«ÿœÿžÿ ÿ¡ÿ¦ÿ›ÿ ÿšÿ¤ÿ™ÿ¡ÿœÿ ÿœÿžÿžÿžÿžÿ¢ÿšÿ¢ÿšÿ›ÿ›ÿ˜ÿŸÿ˜ÿŸÿ˜ÿšÿžÿ©ÿ£ÿ¥ÿÿ¢ÿŸÿÿ¡ÿ ÿŸÿ§ÿ ÿ¡ÿ¤ÿ¡ÿ£ÿ¡ÿ¢ÿ ÿ£ÿ¢ÿ¦ÿ¥ÿ¦ÿ¥ÿ£ÿ§ÿ¢ÿ¥ÿ¢ÿªÿ«ÿ§ÿ¦ÿ¯ÿ°ÿ¯ÿ§ÿ¨ÿ¦ÿ¦ÿ¤ÿ¨ÿ©ÿ«ÿ¨ÿ°ÿ¦ÿ­ÿ¨ÿ«ÿ§ÿªÿ®ÿ±ÿ²ÿ«ÿ«ÿ«ÿ©ÿ¬ÿªÿ£ÿ¬ÿ¬ÿ«ÿªÿ±ÿµÿ°ÿ¬ÿ±ÿ±ÿ¯ÿ¸ÿµÿ¶ÿ´ÿÅÿ¼ÿ¶ÿºÿµÿ»ÿ¶ÿ¸ÿºÿ²ÿ»ÿ°ÿ»ÿµÿ¼ÿÂÿ½ÿ¿ÿ½ÿ¼ÿ¼ÿÃÿºÿ½ÿ¾ÿÁÿÀÿËÿÐÿÈÿÇÿÀÿÆÿ»ÿÃÿÅÿ¿ÿÁÿ¹ÿ½ÿ¾ÿ½ÿÀÿÌÿÆÿÄÿÁÿÀÿÊÿ¿ÿÆÿÅÿÀÿÇÿÄÿÆÿÅÿÏÿÊÿÅÿ¿ÿÁÿÃÿÆÿÀÿÂÿ¼ÿÄÿÄÿ½ÿÇÿÂÿÈÿÄÿÅÿÆÿÁÿ¿ÿÊÿÊÿÂÿÁÿ¿ÿÀÿ»ÿ¾ÿ½ÿ¼ÿºÿ¼ÿ¹ÿÂÿ¼ÿ¿ÿ¾ÿ½ÿÁÿÈÿÄÿÂÿÀÿÃÿÀÿÂÿ½ÿÃÿÃÿÃÿÄÿÁÿÇÿÈÿÂÿÎÿËÿÊÿÄÿÆÿÆÿÇÿËÿÅÿËÿÈÿÄÿÃÿÀÿÅÿÊÿÁÿÂÿÀÿÇÿ¿ÿÄÿÂÿÂÿÈÿÄÿÆÿÅÿÍÿÈÿÌÿÆÿÃÿÇÿÇÿÄÿÀÿ¿ÿ¿ÿÉÿÄÿÍÿÁÿÄÿ¼ÿÆÿÁÿÀÿÀÿÁÿ¿ÿÅÿÁÿÂÿ½ÿÂÿÃÿÁÿÀÿ»ÿËÿÉÿÂÿÈÿÀÿÈÿÄÿÂÿÉÿÃÿÈÿÀÿÁÿÃÿÍÿÎÿÆÿÇÿÀÿÄÿÄÿÃÿÄÿÃÿ¾ÿÆÿÄÿ¿ÿÄÿ½ÿÅÿËÿÍÿÆÿÂÿ¾ÿÃÿ¾ÿ¹ÿ¿ÿ¶ÿÁÿÆÿ¾ÿ½ÿµÿÄÿÂÿºÿ»ÿ»ÿ¼ÿ»ÿ¿ÿÇÿÄÿÂÿÁÿºÿ·ÿ¹ÿ¸ÿ¼ÿ·ÿ¿ÿ¾ÿÂÿºÿºÿºÿ¸ÿ¹ÿ»ÿ¸ÿ¶ÿ¼ÿÁÿ¾ÿ¾ÿ³ÿ»ÿ¹ÿ¾ÿÂÿÂÿÀÿÃÿÀÿÀÿ¼ÿÇÿ¼ÿÁÿ¹ÿ¾ÿ¸ÿ½ÿ½ÿÁÿ¾ÿºÿºÿÅÿ¼ÿÃÿ½ÿ¿ÿÊÿÐÿÍÿÅÿÂÿÄÿÀÿÇÿÄÿÇÿÍÿÌÿÍÿÇÿËÿÆÿÉÿÈÿÊÿÏÿ×ÿÉÿÌÿÌÿÝÿáÿÚÿÔÿØÿÏÿËÿÌÿÉÿÊÿÔÿÊÿÌÿËÿÆÿËÿÅÿÊÿÁÿÉÿÄÿÄÿÁÿÉÿÁÿÇÿÆÿÆÿÉÿÊÿÊÿÌÿÉÿÌÿÑÿÉÿÐÿËÿÊÿÉÿÌÿÍÿÎÿÓÿÍÿÖÿÏÿÐÿÌÿÔÿÑÿÊÿÏÿÎÿàÿßÿØÿÓÿÕÿÐÿÒÿÑÿØÿÕÿÓÿÑÿÒÿÓÿÖÿÐÿÑÿÔÿ×ÿÒÿØÿÔÿÙÿÒÿ×ÿÖÿÔÿÖÿÏÿØÿÕÿÕÿÖÿÜÿØÿÛÿØÿÚÿÜÿØÿÔÿÙÿØÿÖÿÛÿÖÿÛÿ×ÿÝÿÞÿÙÿàÿØÿéÿäÿàÿÝÿßÿÛÿßÿÞÿèÿãÿàÿÙÿæÿâÿÜÿáÿÜÿÛÿØÿáÿæÿåÿíÿäÿãÿàÿßÿâÿÞÿáÿÜÿéÿãÿñÿäÿêÿäÿèÿèÿäÿæÿâÿçÿáÿèÿìÿçÿìÿçÿíÿêÿìÿåÿêÿëÿèÿìÿðÿòÿêÿ÷ÿòÿòÿñÿðÿòÿëÿîÿðÿîÿîÿóÿõÿôÿñÿðÿñÿôÿëÿ÷ÿìÿòÿðÿöÿûÿóÿôÿùÿõÿòÿöÿóÿôÿòÿòÿöÿðÿøÿñÿõÿóÿõÿýÿôÿöÿòÿöÿôÿÿÿùÿòÿúÿöÿüÿõÿùÿîÿñÿóÿôÿñÿÿÿûÿüÿþÿýÿøÿõÿôÿóÿóÿóÿñÿõÿöÿõÿðÿÿÿúÿýÿ÷ÿóÿýÿõÿõÿøÿóÿóÿíÿòÿîÿñÿîÿïÿðÿéÿîÿéÿéÿéÿëÿèÿèÿçÿïÿìÿôÿôÿèÿóÿéÿìÿìÿôÿìÿëÿíÿíÿïÿðÿéÿìÿíÿóÿëÿíÿõÿÿÿôÿðÿîÿíÿóÿñÿïÿúÿûÿùÿðÿïÿëÿìÿéÿòÿñÿóÿíÿíÿòÿîÿðÿõÿèÿñÿëÿìÿæÿêÿèÿçÿáÿøÿòÿòÿéÿçÿåÿåÿäÿåÿèÿßÿãÿÛÿÞÿÜÿßÿÚÿÜÿÝÿÚÿÝÿÕÿÞÿÞÿãÿàÿÜÿØÿÛÿÒÿáÿÔÿÝÿÓÿ×ÿÕÿØÿÜÿÒÿØÿÒÿÖÿÒÿÎÿØÿÏÿÚÿÑÿÕÿÊÿÏÿÚÿÕÿÍÿÑÿÍÿÏÿÍÿÑÿÔÿÎÿÓÿÍÿÎÿÍÿÌÿÏÿÎÿÑÿÔÿÏÿÓÿäÿãÿÙÿÕÿÌÿÓÿÈÿÍÿÌÿÎÿÎÿÎÿÊÿÊÿÈÿÍÿÍÿËÿÈÿÉÿÈÿÆÿÎÿÉÿÍÿÍÿÍÿÎÿÌÿÕÿÐÿÔÿØÿÊÿÑÿÉÿÌÿÄÿÌÿÆÿÈÿÇÿËÿÉÿÑÿÇÿÇÿÂÿÃÿÂÿÆÿÉÿÓÿÃÿÈÿÁÿ¿ÿÄÿÂÿ»ÿ¾ÿ¿ÿÂÿÃÿÁÿ¼ÿÄÿ½ÿÃÿÅÿÈÿÁÿÃÿ½ÿ¿ÿ¾ÿÄÿ¼ÿÆÿÅÿÀÿÃÿÅÿÁÿÄÿÂÿÁÿÂÿÃÿ¿ÿÃÿÅÿ¾ÿÀÿÊÿÁÿ¿ÿ¿ÿ»ÿ»ÿ¹ÿ½ÿÂÿÄÿÇÿÉÿÃÿÅÿÇÿÅÿÀÿÇÿÂÿÈÿÅÿÇÿÁÿÅÿÁÿÇÿÇÿÅÿÅÿÃÿÀÿÂÿÅÿÄÿÃÿÊÿÇÿÅÿÍÿÛÿÌÿÈÿÀÿÀÿÃÿ»ÿÉÿ»ÿÁÿÁÿÃÿ¾ÿÄÿÃÿÁÿÁÿ¼ÿÀÿ¼ÿÃÿºÿÅÿÁÿÁÿ¼ÿËÿËÿÆÿÃÿÉÿÖÿÆÿËÿÄÿÅÿÈÿÇÿÅÿÊÿÆÿÎÿÆÿËÿÆÿÌÿÌÿÊÿÍÿÌÿÒÿÆÿÕÿËÿ×ÿÒÿÐÿÖÿÐÿÓÿØÿ×ÿÖÿÐÿØÿÖÿÚÿÙÿßÿÞÿàÿçÿùÿçÿçÿÝÿâÿ×ÿÝÿÕÿÝÿÙÿÚÿáÿâÿÚÿÜÿÜÿÚÿÞÿÙÿÜÿãÿÝÿáÿÛÿáÿåÿâÿÞÿÝÿÝÿÝÿßÿàÿàÿâÿáÿèÿçÿäÿéÿãÿæÿäÿâÿäÿäÿàÿæÿàÿåÿäÿßÿäÿãÿçÿäÿêÿèÿäÿìÿßÿçÿçÿçÿèÿëÿëÿíÿåÿëÿéÿêÿæÿðÿçÿòÿìÿíÿçÿïÿðÿñÿæÿïÿåÿòÿáÿðÿñÿîÿêÿìÿæÿìÿæÿçÿãÿæÿæÿãÿìÿìÿìÿëÿêÿïÿôÿóÿðÿïÿòÿðÿóÿëÿòÿñÿñÿõÿðÿöÿòÿûÿöÿöÿôÿüÿòÿöÿìÿñÿîÿîÿòÿíÿíÿ÷ÿýÿôÿôÿòÿúÿðÿðÿõÿóÿóÿòÿúÿòÿûÿúÿüÿþÿûÿûÿúÿÿÿÿÿûÿúÿùÿûÿùÿýÿ÷ÿüÿ÷ÿúÿþÿÿÿûÿûÿùÿþÿÿÿýÿýÿþÿ÷ÿúÿóÿöÿôÿñÿõÿôÿõÿõÿüÿûÿùÿùÿòÿüÿüÿ÷ÿúÿòÿôÿíÿõÿîÿ÷ÿñÿöÿñÿøÿøÿùÿóÿöÿôÿñÿóÿóÿðÿòÿñÿôÿôÿóÿùÿ÷ÿúÿóÿüÿöÿÿÿõÿþÿúÿýÿüÿÿÿýÿýÿûÿÿÿýÿýÿýÿüÿüÿ÷ÿÿÿøÿ÷ÿùÿþÿùÿýÿûÿøÿúÿùÿùÿøÿøÿ÷ÿöÿõÿÿÿ÷ÿýÿþÿûÿûÿüÿûÿûÿþÿôÿýÿõÿùÿøÿúÿøÿüÿýÿøÿúÿüÿÿÿøÿ (*#%#$#    ÿÿùÿùÿúÿóÿùÿõÿñÿìÿèÿêÿäÿêÿäÿèÿæÿâÿåÿãÿâÿèÿàÿáÿßÿÜÿÛÿÛÿÜÿàÿÜÿçÿãÿàÿáÿäÿÞÿæÿÞÿîÿõÿìÿïÿîÿîÿïÿëÿíÿòÿòÿóÿðÿøÿôÿõÿùÿ÷ÿúÿýÿ   !&%$*#$''+%'%/&0'*(-'+(*)(-'/.,/*-1$0$1')(.),*,&,$(,,')((*.++/0..+*)/+3)2<951075;0;4833630/-.-2(1/6-5269295100328-01*5*<MRL:<392=3;6E?<78:8=5795A4<767:8A:EDC=AFBA@=A@<>:>;;5:;77A?98C:;49547:<<996:735@7839587:8:;7=1@?7000<7.,-&&%%%$*'(++!& $$+*'+.1'3 0!) $,.%/,8'-$+$%$&&(#.)*,+(2:**-'%-4)0-'&!#!!#!*!       ("                    ' " # &.%   "#%!$%$*,))'''&+$("$'&&)%)%"'&%$$"'&).),+%(,1,+*)'(+#.#.$,%&#*$#$$$!$&('+6/(.$-/&,%-$($0!'!(&$ $$ '!&"!$ *(# %"$$*#                      ûÿ         þÿüÿ               "((  !$$"!!(2'#'%'$,++(!*()99&+*#% $###"!-*"! '.#!'%!#('%*,-.//=47-<;@:84<?<8<737646:6646:42616A;5.50.020000//-**.$&!#$'6** *-(&% (%#  #%$'''# "!!#!$'#   ÿÿúÿÿÿüÿÿÿùÿÿÿþÿüÿüÿÿÿøÿúÿÿÿÿÿ ÿÿ ÿÿ  ÿÿÿÿÿÿ ýÿüÿûÿúÿûÿøÿúÿùÿùÿþÿùÿõÿöÿ÷ÿøÿøÿõÿüÿ÷ÿ÷ÿòÿóÿúÿõÿõÿôÿòÿþÿûÿøÿóÿóÿïÿïÿóÿóÿôÿóÿïÿòÿíÿëÿïÿíÿçÿôÿìÿíÿêÿòÿîÿðÿèÿïÿéÿõÿöÿñÿùÿóÿöÿöÿñÿøÿôÿüÿüÿñÿûÿóÿýÿöÿúÿùÿùÿüÿùÿúÿûÿ ýÿüÿüÿ÷ÿûÿõÿùÿýÿ úÿûÿöÿõÿóÿñÿüÿúÿúÿ÷ÿúÿúÿùÿ÷ÿ÷ÿüÿúÿõÿúÿòÿÿÿòÿýÿîÿýÿöÿùÿïÿòÿéÿîÿñÿõÿîÿîÿõÿëÿíÿìÿøÿýÿõÿñÿîÿñÿòÿþÿöÿùÿýÿüÿúÿøÿ÷ÿùÿÿÿóÿüÿöÿúÿõÿñÿ÷ÿøÿøÿôÿûÿùÿúÿúÿÿÿùÿüÿùÿöÿüÿúÿüÿüÿýÿýÿýÿýÿýÿúÿñÿûÿíÿûÿóÿ÷ÿóÿùÿöÿúÿúÿÿÿùÿþÿÿÿþÿôÿÿÿóÿ÷ÿúÿüÿ÷ÿûÿûÿùÿüÿûÿùÿüÿýÿøÿøÿöÿùÿûÿøÿþÿüÿöÿ   þÿúÿÿÿûÿüÿøÿûÿûÿûÿúÿöÿùÿ÷ÿùÿøÿõÿóÿÿÿöÿüÿóÿúÿñÿôÿîÿòÿîÿïÿîÿäÿíÿëÿèÿîÿ÷ÿçÿìÿîÿìÿíÿíÿðÿëÿïÿæÿéÿéÿéÿãÿçÿàÿèÿæÿæÿîÿëÿíÿíÿòÿíÿóÿôÿöÿùÿùÿùÿÿÿõÿøÿöÿùÿ÷ÿ÷ÿýÿúÿüÿýÿøÿþÿüÿúÿüÿþÿÿÿÿÿþÿýÿøÿüÿýÿöÿüÿöÿûÿôÿ÷ÿðÿôÿïÿðÿòÿùÿöÿîÿîÿìÿåÿðÿøÿïÿïÿðÿëÿéÿçÿúÿóÿêÿäÿàÿåÿÚÿèÿÝÿßÿäÿêÿèÿêÿâÿéÿåÿïÿëÿîÿîÿìÿíÿêÿàÿñÿåÿãÿãÿÝÿâÿßÿßÿÝÿÞÿáÿßÿÜÿâÿâÿíÿöÿíÿíÿéÿéÿáÿéÿãÿèÿãÿëÿÝÿéÿâÿéÿãÿâÿÜÿÞÿÞÿÝÿÚÿÚÿçÿàÿÙÿÕÿÌÿÓÿÎÿÓÿÎÿÔÿÊÿÑÿÌÿÑÿÉÿÅÿÄÿÇÿÄÿÅÿÀÿÉÿÄÿÅÿÃÿÆÿ¼ÿÇÿ¾ÿÈÿÁÿÊÿÒÿÈÿÉÿÃÿÇÿÃÿÁÿÁÿÅÿÆÿÈÿÈÿÁÿ¹ÿ½ÿ¹ÿÁÿÇÿºÿ½ÿ¶ÿ¼ÿ»ÿ¶ÿ·ÿ¸ÿµÿºÿ¹ÿ¾ÿ½ÿ¿ÿ¸ÿ¿ÿ¶ÿ»ÿ¿ÿºÿÅÿ¸ÿÈÿµÿ¸ÿ¾ÿ·ÿºÿ¼ÿ»ÿ¼ÿ½ÿ¼ÿÅÿÊÿ¾ÿÂÿÅÿÂÿ¾ÿÇÿ¿ÿÄÿÃÿ¿ÿÁÿ»ÿ¿ÿÂÿÈÿËÿÆÿ½ÿ¿ÿ½ÿÃÿºÿËÿÈÿÔÿÅÿÄÿÅÿÉÿÂÿÃÿÄÿÀÿÃÿ¿ÿÁÿÁÿÀÿÊÿ¾ÿÁÿ»ÿÂÿ½ÿ½ÿ½ÿµÿ»ÿ»ÿ¿ÿµÿÃÿ¾ÿ¸ÿ·ÿ»ÿ¼ÿ½ÿ¸ÿ¾ÿ½ÿ¸ÿ½ÿµÿ¶ÿ´ÿ¹ÿ±ÿ¼ÿ°ÿºÿ·ÿ·ÿ¹ÿ¸ÿËÿÂÿÁÿ¹ÿ»ÿÀÿ·ÿ»ÿ½ÿ¶ÿ¿ÿ¹ÿ¿ÿµÿÆÿËÿÇÿ¼ÿ»ÿ¾ÿ¶ÿ¸ÿ½ÿÊÿÔÿÅÿÊÿ½ÿÇÿ¼ÿÄÿ½ÿ¹ÿÆÿ»ÿºÿ¹ÿ±ÿ²ÿ±ÿ¯ÿ±ÿ²ÿ³ÿ³ÿ±ÿ²ÿ°ÿ³ÿµÿ²ÿ³ÿ±ÿ²ÿµÿ²ÿ´ÿ·ÿ¹ÿ·ÿµÿ»ÿÃÿ¹ÿÂÿÂÿÁÿ¼ÿ¼ÿÀÿ¸ÿÆÿ¼ÿ½ÿ½ÿ¾ÿ¾ÿ»ÿÅÿÀÿÃÿÅÿÈÿÊÿÌÿÖÿÑÿÞÿÔÿÕÿÐÿÕÿÑÿÐÿÎÿÐÿÌÿÎÿÉÿÓÿÍÿÎÿÈÿÐÿÈÿÔÿÎÿÎÿÑÿÍÿËÿÍÿÍÿÎÿÔÿÚÿÙÿÐÿÏÿ×ÿÑÿÕÿÎÿÌÿÉÿÃÿÅÿÆÿÇÿÂÿ¿ÿ¾ÿ¾ÿÁÿ·ÿ¾ÿ¸ÿ½ÿºÿ½ÿ»ÿ¾ÿ½ÿ½ÿÀÿ¾ÿÁÿÀÿ¼ÿ¾ÿ¼ÿÁÿ¼ÿ»ÿ¾ÿºÿ¶ÿµÿ¹ÿ°ÿ½ÿºÿÁÿ¿ÿÃÿ¾ÿÇÿÆÿÉÿÈÿÄÿÊÿÉÿÆÿÈÿÕÿÈÿÔÿÑÿÐÿÒÿÑÿÕÿÏÿÑÿ×ÿÓÿÏÿÓÿÓÿÓÿÓÿÒÿÍÿÐÿÍÿÉÿÎÿÌÿÑÿÅÿÌÿÌÿÑÿÖÿÚÿËÿÒÿÉÿËÿÊÿÌÿÅÿÉÿÁÿÈÿ¾ÿÍÿÉÿÇÿÌÿËÿÈÿÙÿÛÿÔÿÓÿÔÿÌÿÏÿÌÿËÿÈÿÄÿÉÿÆÿÅÿÄÿÉÿÉÿÇÿÔÿÑÿÐÿÐÿÕÿÓÿÝÿ×ÿâÿÞÿâÿàÿáÿäÿäÿßÿáÿèÿåÿàÿÝÿÚÿÛÿÕÿ×ÿÕÿÖÿÔÿÑÿÐÿÏÿÎÿÓÿÏÿÉÿÐÿ¿ÿÄÿÀÿ¹ÿ¼ÿ½ÿ¹ÿ¹ÿºÿ³ÿ°ÿ³ÿ²ÿµÿ´ÿ²ÿ¶ÿ°ÿµÿ¸ÿ¹ÿµÿ±ÿ°ÿ­ÿ¬ÿ¬ÿ­ÿ©ÿ¨ÿ¢ÿ¥ÿÿšÿ£ÿ¯ÿ¬ÿ¥ÿ¦ÿ¤ÿ£ÿ§ÿ§ÿ­ÿ­ÿªÿ«ÿ´ÿ®ÿ±ÿ®ÿ¶ÿ®ÿ³ÿºÿ¼ÿ¹ÿ¾ÿ¹ÿ¼ÿ´ÿ·ÿ·ÿºÿ»ÿ¾ÿºÿ¸ÿ»ÿ¹ÿ¼ÿÁÿºÿÊÿÉÿÆÿÅÿÌÿÄÿÅÿÆÿÄÿ¼ÿÀÿ¼ÿ½ÿµÿ¶ÿ»ÿ·ÿ·ÿ¼ÿ¸ÿÁÿ¹ÿ¶ÿ½ÿ¸ÿ¼ÿÀÿ¶ÿ·ÿ³ÿÁÿÁÿ´ÿ¬ÿ°ÿÁÿ³ÿ°ÿ¦ÿªÿ©ÿ¤ÿžÿªÿ§ÿ­ÿ®ÿ®ÿ«ÿ¨ÿ«ÿ¥ÿ©ÿ¢ÿ ÿ§ÿ©ÿªÿ§ÿ­ÿ¤ÿªÿ¥ÿ¨ÿ©ÿ¤ÿ£ÿ¦ÿªÿ§ÿ§ÿ¢ÿ£ÿ¦ÿ¦ÿ«ÿ±ÿ±ÿ¬ÿªÿ«ÿ¢ÿ§ÿ¡ÿšÿžÿ“ÿšÿŸÿ˜ÿ—ÿ“ÿšÿ–ÿ•ÿ•ÿ•ÿ“ÿ•ÿ’ÿ˜ÿ–ÿ¡ÿœÿ¦ÿ§ÿµÿµÿ¦ÿ¨ÿ£ÿ¤ÿ¥ÿ¤ÿ£ÿÿŸÿ¡ÿ¨ÿŸÿ¤ÿ¢ÿ©ÿ«ÿ¬ÿ¬ÿªÿ¬ÿ©ÿ®ÿ®ÿ¥ÿ«ÿ¬ÿ®ÿ©ÿ±ÿ°ÿ´ÿ²ÿ¶ÿ¶ÿºÿºÿÃÿÂÿÇÿÆÿÏÿÈÿÍÿÌÿÐÿÓÿÍÿÎÿÆÿÏÿÏÿÊÿËÿÅÿÄÿÀÿ¿ÿÁÿÂÿÄÿ¾ÿ¿ÿ¼ÿ¼ÿ½ÿÃÿºÿ¹ÿ¹ÿ´ÿ·ÿ»ÿ·ÿºÿ»ÿ¹ÿµÿ²ÿ¶ÿ­ÿ´ÿ´ÿ°ÿ³ÿ½ÿ¹ÿ¸ÿ³ÿ·ÿ±ÿªÿµÿ°ÿ²ÿ§ÿ©ÿ¬ÿ»ÿ®ÿ´ÿ¹ÿ­ÿ¸ÿ´ÿ»ÿ¾ÿÈÿÁÿÎÿÉÿÄÿÊÿËÿÎÿËÿÍÿÐÿÏÿÔÿØÿÙÿ×ÿÚÿØÿÝÿØÿØÿ×ÿ×ÿ×ÿÖÿßÿÚÿàÿÝÿÞÿÖÿÜÿÙÿßÿÚÿ×ÿÛÿÒÿØÿÔÿÙÿÔÿÒÿÔÿÏÿÏÿ×ÿÑÿÒÿÑÿÓÿäÿéÿãÿ×ÿÜÿÚÿÙÿÖÿãÿæÿÛÿÖÿÔÿÐÿÌÿÌÿÓÿÏÿÎÿÏÿÔÿÒÿÒÿÍÿÒÿÎÿÓÿÏÿÓÿÞÿàÿÓÿÍÿÉÿËÿÍÿÊÿÎÿÐÿÍÿÛÿÙÿÙÿÔÿÝÿÚÿÞÿáÿæÿçÿíÿåÿìÿèÿæÿçÿäÿìÿæÿæÿæÿßÿãÿÞÿäÿáÿáÿÞÿÝÿÝÿÜÿÜÿÜÿÞÿ×ÿâÿßÿäÿàÿßÿæÿÜÿãÿÜÿßÿÞÿ×ÿÑÿØÿÎÿÐÿÆÿÉÿÇÿËÿÈÿÈÿÇÿÉÿÇÿÌÿÉÿÉÿÊÿÆÿÉÿÅÿÇÿÁÿÊÿÇÿÃÿÂÿ¾ÿ¾ÿ¿ÿ¿ÿÁÿÇÿÐÿÄÿÏÿÖÿÐÿÐÿÏÿÈÿÌÿËÿ×ÿÈÿÑÿÙÿÒÿÒÿÎÿÒÿÔÿÝÿÚÿÙÿÛÿØÿÜÿÛÿÖÿÙÿÚÿÒÿ×ÿÒÿÙÿÕÿ×ÿÔÿÓÿÏÿÑÿÒÿÒÿÛÿÒÿØÿÔÿÒÿÕÿÐÿßÿÚÿÛÿÚÿÔÿÐÿÏÿËÿÎÿÊÿÈÿÊÿÅÿÅÿÄÿÆÿÆÿÄÿËÿÈÿÅÿÇÿÄÿ×ÿÏÿÊÿÆÿÂÿÅÿÃÿËÿÈÿÁÿÀÿ¿ÿ¼ÿÁÿ»ÿÂÿ¿ÿÃÿÂÿ½ÿ¹ÿ¾ÿºÿ½ÿÀÿ¾ÿÁÿ¾ÿ»ÿ¹ÿÀÿ·ÿ¾ÿ¯ÿÁÿ¿ÿºÿ¿ÿ¼ÿ»ÿ»ÿ¾ÿ¼ÿ·ÿ½ÿ·ÿ¿ÿ¼ÿ¹ÿ¹ÿ¹ÿÁÿÃÿ»ÿµÿ·ÿ²ÿ´ÿ®ÿ²ÿ¯ÿ±ÿ¶ÿ´ÿ¯ÿ¹ÿ±ÿ·ÿ¹ÿ³ÿ»ÿÀÿºÿÂÿÄÿÄÿ¿ÿÇÿÅÿÁÿËÿÅÿËÿÊÿËÿÊÿÍÿÅÿÎÿÒÿÌÿËÿÅÿÇÿ¼ÿÃÿÀÿÄÿÊÿÁÿÈÿÂÿÅÿÂÿÊÿÈÿÍÿÍÿÏÿÍÿØÿÒÿÒÿÏÿÐÿÉÿÐÿÉÿÏÿÉÿÒÿËÿÐÿÏÿÔÿÙÿÔÿØÿÕÿÓÿÔÿÓÿ×ÿØÿÖÿÜÿÚÿÚÿâÿÜÿØÿèÿäÿàÿßÿÞÿÛÿÛÿÚÿÚÿØÿØÿÛÿÑÿØÿÑÿÛÿÍÿÛÿ×ÿÙÿÝÿÚÿàÿØÿ×ÿÓÿ×ÿÒÿ×ÿÐÿÒÿÍÿÔÿËÿÈÿÉÿÖÿÍÿÎÿÊÿÑÿÅÿÍÿÈÿÏÿÊÿÑÿÎÿÙÿÙÿÏÿÏÿÌÿËÿÌÿËÿÇÿÆÿÈÿÕÿÆÿÉÿÆÿÍÿÊÿÔÿÎÿÑÿÛÿåÿÜÿÖÿÐÿÐÿÎÿÖÿÖÿÑÿÔÿÓÿÐÿÐÿÓÿÕÿÖÿÖÿÛÿÞÿÞÿàÿåÿçÿßÿáÿÛÿÜÿÙÿÛÿÚÿÙÿÜÿäÿåÿÚÿØÿ×ÿÙÿ×ÿØÿÛÿÚÿÞÿâÿÝÿèÿãÿãÿçÿçÿëÿèÿïÿòÿîÿêÿôÿíÿæÿëÿíÿêÿíÿæÿèÿäÿïÿèÿìÿæÿïÿíÿèÿîÿéÿìÿîÿñÿóÿøÿîÿõÿøÿúÿõÿòÿíÿóÿðÿóÿðÿóÿóÿóÿñÿñÿôÿôÿõÿ ýÿ÷ÿòÿòÿðÿìÿíÿéÿêÿìÿóÿüÿòÿðÿïÿñÿðÿðÿïÿîÿõÿòÿñÿëÿåÿáÿçÿæÿåÿëÿéÿêÿêÿñÿñÿûÿûÿ÷ÿ ýÿþÿûÿÿÿõÿöÿøÿùÿöÿöÿõÿöÿóÿúÿõÿôÿúÿñÿùÿêÿõÿëÿêÿíÿëÿêÿçÿëÿçÿæÿçÿãÿìÿèÿíÿùÿìÿñÿêÿëÿëÿïÿïÿêÿéÿêÿêÿóÿöÿôÿõÿóÿôÿñÿùÿñÿøÿòÿòÿïÿïÿíÿîÿëÿéÿèÿõÿùÿóÿóÿùÿøÿùÿþÿûÿþÿÿÿýÿúÿöÿýÿýÿýÿûÿùÿóÿõÿóÿþÿ÷ÿóÿýÿüÿýÿùÿþÿøÿûÿÿÿþÿþÿýÿ ùÿùÿøÿøÿõÿøÿþÿüÿûÿ÷ÿûÿ÷ÿúÿûÿþÿüÿõÿýÿþÿýÿôÿúÿïÿöÿöÿùÿìÿõÿíÿòÿîÿðÿñÿéÿöÿîÿðÿíÿñÿíÿìÿëÿëÿæÿéÿæÿàÿæÿáÿâÿàÿäÿÛÿåÿÝÿåÿîÿçÿíÿêÿïÿòÿúÿîÿðÿèÿæÿëÿãÿæÿéÿìÿäÿçÿãÿéÿäÿíÿìÿóÿõÿýÿûÿúÿ÷ÿôÿùÿ÷ÿøÿøÿôÿ÷ÿõÿüÿþÿþÿüÿþÿ#ÿÿþÿÿÿûÿûÿõÿýÿùÿûÿõÿõÿíÿõÿíÿñÿìÿõÿîÿóÿïÿöÿòÿõÿôÿ÷ÿøÿúÿùÿúÿñÿöÿôÿïÿøÿûÿ ûÿýÿÿÿ       '!%#$%''"%),34112043471554:<;C?KILLUVSSXRSZ\PXHLIGK@HEDF@GGEDDCCHIEGAEFAE;>@E:AJ<B3:5;6<072/9<H9D:?=B>@<;;8;:>9??;=<><>BCFBMDLOSSOU_W[PVNXWRQGHFBA@>??>>>>EDMHLIPKIPHMDGLELLMHLIKNHRRMOUOSFOMNHLEJGLOMQPMLWVQMHJQLLE49%2#'"&(,/,,20/-*'**.--.+-,4/=A4837,0")!$! "$',)1?A>>:FDB6:30-1'*.,3875;79:I=?8@;>?;?B8<<>;;5@GC@=;?=<A=;@B;>:C?CE@F@HMQUMIELGMJKD@H<978457173-3-9A624--.*)(#&#!!% )(*038595<::99>G:;54377<@=?EQHHDDFCHMA?=<;;:89:A:D<G<C=<:3:678NWPHB>@@@:A;=EA@;F@@:::99=;?D>CAB:G@EDNSNKLNJKLSZWNLLI?HBLF?CB?C@@E@GB@BHLGMIDBC>ACBB=<=?9BL;=3:.9244299>AEBFHLHQUOPIMLKMJFGFJGEMGLOKNWaWSOONOLOIYLTN]RUTPVNONQKN\`_TTPTTVVXXUba]Z\VYRUSPTVQQNQUQKQHVIOWOWUXTRUT`\PSKCE@>=;6=<<4:A99785567451677/51156?9=0:64-/2;1432519=<>?A?FGFD>BHB?566:81/3'.*/$.&&,.1*0100-,&,!"$"'$%!",$#$ #,$$! $!- %$#",%)&-+ ##$!  $#%'$# !%"!  !! %"*!#$,"%'#&%%% !! ,'0'.,42CGC>ACFB<4+/0*.(0,1%()&'0+&&%-"+)2%0',(%*'(11,+,)4/.&*%.*,/049887>:=CFDGIJKIGIDJ=EBE7D<AEEHAIGJLKPUOQVMRLGHBD9<>682??A<<:6CG:=881807.203-332?94>4<3543.3/.&!  (,13;;:=>E>BAB:EC@?AOCK9I;IGKLMMNKMLMKIGGIHILJNGRGSKPLTVKKNPMGCEBD=BDE>CBA??73-5+,%)$$%!*(&,%*+$&#'"#")%(% !&'%('1.'#(%$$%"(#")$'%3*(%(" #%""'!%  !!"!*-((#$   !$%)($)%&$,((%!)&172,&&&$  þÿÿÿõÿûÿ ÿÿùÿ÷ÿüÿôÿúÿòÿüÿöÿøÿêÿôÿêÿìÿóÿîÿòÿîÿôÿóÿòÿöÿôÿöÿïÿõÿðÿñÿëÿëÿòÿðÿîÿøÿõÿûÿ        #  ýÿ        þÿôÿûÿ     üÿúÿýÿûÿöÿóÿóÿõÿðÿòÿóÿòÿïÿõÿñÿïÿïÿðÿîÿëÿóÿ÷ÿóÿøÿøÿþÿ   #$&&*,(:.13028..934/,(*,)) $ ûÿýÿÿÿüÿûÿûÿýÿýÿúÿôÿ÷ÿçÿïÿäÿéÿâÿåÿáÿâÿëÿõÿêÿæÿæÿßÿáÿàÿÝÿàÿÚÿßÿÚÿâÿåÿâÿÜÿâÿâÿèÿßÿéÿéÿåÿéÿëÿãÿïÿýÿþÿñÿíÿæÿåÿäÿêÿçÿíÿóÿðÿóÿíÿïÿêÿòÿíÿüÿòÿöÿîÿïÿðÿîÿèÿäÿìÿâÿèÿÞÿßÿåÿßÿáÿàÿêÿàÿæÿäÿåÿæÿãÿäÿâÿáÿàÿÜÿâÿàÿâÿáÿãÿáÿÝÿäÿèÿåÿóÿíÿõÿòÿøÿùÿûÿ÷ÿûÿúÿóÿ÷ÿýÿúÿ÷ÿôÿóÿöÿðÿùÿôÿíÿðÿíÿîÿìÿòÿóÿïÿòÿöÿõÿ÷ÿúÿ÷ÿõÿõÿûÿõÿîÿìÿêÿìÿèÿÜÿæÿÙÿÛÿÚÿÐÿÕÿÐÿÖÿÝÿÝÿÝÿÝÿáÿèÿÒÿÝÿÔÿÑÿÍÿÐÿÏÿÍÿÈÿÅÿÃÿ¼ÿ¾ÿ¸ÿ¿ÿÄÿ½ÿ¹ÿ¸ÿ¸ÿ¸ÿ¹ÿ³ÿ·ÿ´ÿ°ÿ³ÿµÿµÿ¸ÿ»ÿ²ÿ³ÿ´ÿ°ÿ²ÿ±ÿ·ÿ¶ÿ¶ÿ¼ÿ·ÿ¼ÿ¿ÿ¶ÿ¼ÿºÿÁÿºÿÃÿ½ÿÁÿÀÿÀÿ¿ÿ¾ÿÀÿÂÿÌÿÌÿÄÿ¿ÿ·ÿÄÿ¼ÿÂÿÁÿÅÿÆÿÊÿÊÿÍÿÄÿÉÿÃÿÑÿÆÿÈÿÈÿÉÿÃÿÈÿÂÿÈÿÇÿÇÿÔÿáÿÔÿÎÿÎÿÍÿÎÿÎÿÌÿÉÿÇÿÄÿ»ÿ¶ÿµÿ©ÿ¢ÿ¢ÿœÿžÿ¡ÿ§ÿžÿ«ÿ©ÿªÿ­ÿ²ÿ»ÿ¾ÿ¾ÿÁÿÂÿÑÿÁÿ¾ÿ´ÿ±ÿ­ÿ¯ÿ¬ÿ°ÿªÿ²ÿ«ÿµÿ²ÿ²ÿºÿÂÿÇÿÈÿ¾ÿÀÿ¾ÿµÿ¸ÿ­ÿµÿ®ÿ­ÿ¬ÿ´ÿ°ÿ§ÿ©ÿ§ÿ£ÿ¡ÿšÿŸÿ˜ÿœÿ—ÿ™ÿ“ÿ—ÿÿ”ÿ“ÿŽÿ‘ÿ•ÿ•ÿ”ÿ–ÿÿÿ”ÿ”ÿ“ÿ¡ÿ•ÿÿšÿ™ÿ—ÿ›ÿÿ¤ÿ¢ÿ¢ÿ£ÿ£ÿ¡ÿ¥ÿ¤ÿ§ÿ¥ÿ¨ÿ¨ÿ¦ÿ¬ÿ®ÿ©ÿ³ÿ³ÿºÿ¾ÿÁÿÅÿÎÿÏÿÙÿÚÿÙÿØÿÑÿÏÿÊÿÕÿÅÿÊÿÀÿ¿ÿÅÿÃÿÃÿ¿ÿ½ÿÃÿÂÿÃÿÃÿÉÿÉÿÎÿÎÿÑÿÑÿÑÿÎÿÔÿÛÿáÿÛÿâÿÝÿèÿÞÿæÿäÿäÿÛÿßÿÒÿÒÿÇÿÉÿÃÿ¸ÿºÿ²ÿ«ÿ­ÿ¢ÿ¡ÿ–ÿÿ—ÿ”ÿ—ÿÿ›ÿœÿ•ÿ–ÿ•ÿ‘ÿ•ÿŽÿ”ÿ‹ÿŠÿ‡ÿˆÿ‰ÿ…ÿ„ÿÿÿ†ÿ€ÿƒÿÿƒÿ†ÿ†ÿ‹ÿ‹ÿ„ÿ•ÿ’ÿŒÿŒÿŒÿ‹ÿŒÿŽÿŒÿÿ‘ÿªÿÿ™ÿ’ÿ•ÿŠÿ‘ÿ‰ÿÿÿŒÿ•ÿ›ÿ’ÿÿ‹ÿŒÿ‘ÿ“ÿ˜ÿ˜ÿ ÿ¦ÿ¨ÿ®ÿ©ÿ»ÿ·ÿ½ÿ¿ÿ¾ÿ½ÿ¾ÿ¶ÿ»ÿÂÿ¾ÿ³ÿ¿ÿ¬ÿ´ÿ®ÿ´ÿ°ÿ·ÿ³ÿºÿ¼ÿ¾ÿ½ÿ¾ÿÀÿÅÿÁÿÉÿÌÿÄÿÀÿÂÿÍÿÅÿÄÿ¾ÿ½ÿÅÿÅÿÆÿÊÿÍÿÃÿÇÿÃÿÂÿÁÿ¼ÿ¸ÿ³ÿ±ÿ¶ÿ¶ÿ­ÿ¬ÿªÿ¨ÿ¬ÿ®ÿ´ÿ·ÿ¹ÿ¼ÿ¾ÿ¿ÿ¿ÿÁÿ¿ÿ»ÿ»ÿ¹ÿ¶ÿµÿ»ÿ»ÿ´ÿ°ÿ¦ÿ¦ÿ¢ÿªÿ¢ÿÿœÿ˜ÿŸÿšÿÿ—ÿ—ÿ˜ÿ˜ÿ–ÿ“ÿ—ÿ•ÿ‘ÿÿ‘ÿŽÿžÿ’ÿ’ÿŠÿŽÿ‹ÿ“ÿ‰ÿˆÿŒÿ‡ÿ’ÿ ÿœÿ™ÿ˜ÿ”ÿ“ÿ–ÿ”ÿÿ’ÿ–ÿÿ…ÿÿÿŒÿ‰ÿŒÿ„ÿÿ„ÿƒÿ~ÿ…ÿwÿ{ÿxÿrÿ~ÿ‰ÿÿvÿtÿzÿuÿqÿsÿqÿpÿvÿzÿ{ÿÿÿÿ{ÿ„ÿÿÿ†ÿÿŒÿÿ„ÿ…ÿ‡ÿÿ”ÿ—ÿ‘ÿ›ÿ›ÿ¢ÿœÿ§ÿ™ÿ©ÿ ÿ¤ÿœÿžÿ›ÿ•ÿ—ÿŽÿ”ÿ”ÿ˜ÿ™ÿ™ÿœÿ˜ÿ™ÿžÿ¬ÿ§ÿ§ÿ¨ÿ¨ÿ¨ÿ§ÿ¢ÿ¥ÿ¥ÿ§ÿ ÿ¡ÿ¦ÿ ÿžÿšÿšÿšÿ–ÿ—ÿŠÿÿ‡ÿˆÿ…ÿ€ÿ}ÿÿ…ÿÿ}ÿ‚ÿ…ÿ‰ÿŒÿ–ÿšÿ™ÿ˜ÿ ÿ¥ÿŸÿ‘ÿÿ„ÿ~ÿyÿvÿoÿmÿqÿsÿpÿqÿ{ÿvÿÿÿŒÿ…ÿˆÿ…ÿ†ÿÿÿyÿ…ÿÿzÿpÿuÿfÿuÿeÿpÿrÿxÿ{ÿÿƒÿŠÿ‰ÿ”ÿ‰ÿŠÿÿ†ÿ…ÿ~ÿyÿzÿsÿ{ÿyÿzÿ{ÿ‚ÿŒÿ™ÿ“ÿ’ÿ’ÿ’ÿ”ÿ—ÿšÿ•ÿ˜ÿœÿ“ÿ–ÿ–ÿ“ÿÿ•ÿÿ–ÿÿŽÿŠÿÿŠÿŽÿ—ÿ–ÿ“ÿ—ÿÿšÿžÿ ÿÿ¨ÿÿ²ÿ·ÿ¯ÿ®ÿµÿÀÿ¿ÿ«ÿ®ÿªÿ«ÿ°ÿ´ÿ²ÿ¯ÿ­ÿ´ÿ°ÿ®ÿ«ÿ²ÿ®ÿ¬ÿ«ÿ¬ÿ«ÿ«ÿ§ÿ©ÿ£ÿ¨ÿ£ÿŸÿ¡ÿÿ£ÿÿ¡ÿ£ÿŸÿšÿ•ÿŠÿˆÿÿ…ÿ|ÿ€ÿ~ÿÿ“ÿ‹ÿ†ÿƒÿ…ÿ„ÿ†ÿÿ‹ÿ–ÿŒÿ¡ÿ›ÿšÿ“ÿ•ÿ“ÿ¥ÿ¤ÿ™ÿÿ–ÿÿ’ÿŸÿ”ÿÿ ÿ ÿ¤ÿ±ÿªÿ£ÿ£ÿžÿŸÿ¦ÿ ÿ¬ÿ¨ÿ²ÿµÿ¹ÿÀÿ´ÿ½ÿºÿÀÿ½ÿ¹ÿ´ÿ¹ÿ°ÿ³ÿ«ÿ¯ÿ¨ÿ¬ÿªÿ­ÿ·ÿ¾ÿ¹ÿ»ÿ²ÿµÿ·ÿ¶ÿ½ÿ¸ÿ³ÿ¬ÿªÿ¨ÿ¨ÿ¡ÿ¨ÿ«ÿ›ÿ˜ÿ“ÿ‘ÿŒÿ‘ÿ”ÿŽÿŽÿÿ‹ÿŠÿ”ÿ—ÿ‹ÿ†ÿ‰ÿ€ÿƒÿÿ†ÿ…ÿˆÿÿŒÿ–ÿ”ÿ¡ÿ¦ÿºÿ£ÿ¬ÿ¦ÿ§ÿ¨ÿ¥ÿ¨ÿ¯ÿ¬ÿ©ÿ©ÿ¨ÿ°ÿ²ÿ¯ÿ²ÿ±ÿ±ÿ¼ÿ»ÿ¶ÿ¾ÿ´ÿ¶ÿ³ÿ³ÿµÿ·ÿ¼ÿ¹ÿ¾ÿ¿ÿÅÿÌÿËÿÍÿÉÿÊÿÉÿÁÿºÿ²ÿ°ÿ©ÿ®ÿ¨ÿ£ÿ¥ÿ£ÿ¥ÿ®ÿ®ÿ®ÿ³ÿ³ÿ¾ÿ¼ÿ·ÿÃÿºÿ»ÿ¸ÿ²ÿ¦ÿ£ÿžÿ•ÿ’ÿŒÿ’ÿŽÿÿ•ÿ‘ÿ•ÿÿŸÿœÿ¤ÿ«ÿ¤ÿžÿšÿ”ÿ•ÿ¢ÿ”ÿ“ÿ—ÿÿ‘ÿ›ÿ–ÿœÿšÿÿ˜ÿ¡ÿ ÿžÿ ÿ£ÿ£ÿ£ÿ¢ÿ§ÿ¥ÿ£ÿ¢ÿ¤ÿœÿ©ÿ£ÿ§ÿ©ÿ¢ÿ§ÿ¦ÿ¤ÿœÿ¦ÿ›ÿ—ÿ“ÿ˜ÿ–ÿžÿ¥ÿŸÿ¥ÿ¦ÿªÿªÿ¤ÿ¨ÿ£ÿ©ÿšÿ¥ÿžÿ¢ÿ™ÿ£ÿ–ÿ˜ÿŽÿ”ÿ•ÿ˜ÿ•ÿŸÿœÿ£ÿ§ÿ§ÿ­ÿªÿ­ÿ°ÿ±ÿ§ÿ©ÿ¤ÿ©ÿ¦ÿ¥ÿµÿ±ÿµÿ·ÿ´ÿ¬ÿ§ÿ¯ÿ ÿªÿ›ÿªÿœÿ£ÿ ÿÿªÿ™ÿ ÿšÿœÿžÿ¡ÿžÿ ÿ¤ÿžÿÿ ÿšÿ”ÿ—ÿ‹ÿ…ÿƒÿxÿyÿqÿrÿwÿ€ÿwÿzÿuÿ|ÿˆÿ†ÿ…ÿÿ†ÿ†ÿƒÿ…ÿ|ÿ}ÿ{ÿxÿyÿsÿsÿwÿtÿ{ÿ€ÿ€ÿƒÿ†ÿ“ÿ‹ÿ”ÿŠÿ“ÿˆÿ”ÿ†ÿÿ…ÿŽÿ‰ÿ’ÿ–ÿÿ¦ÿ°ÿ¨ÿ£ÿ§ÿ¤ÿ¦ÿ²ÿµÿ±ÿ©ÿ¤ÿ˜ÿšÿŽÿ“ÿ…ÿ†ÿ„ÿ€ÿÿ}ÿ~ÿ‡ÿ…ÿ‚ÿ‚ÿ|ÿ‚ÿzÿŠÿ€ÿ|ÿ‚ÿuÿuÿlÿoÿlÿqÿsÿ~ÿuÿ…ÿ‚ÿ‹ÿŠÿ•ÿ¢ÿ—ÿ ÿ«ÿ¥ÿžÿŸÿ’ÿÿŠÿ‰ÿˆÿ‘ÿ‡ÿ†ÿˆÿ‰ÿ†ÿÿÿ”ÿ™ÿÿ£ÿ¡ÿŸÿŸÿŸÿ¡ÿÿ˜ÿ›ÿšÿ™ÿ—ÿ›ÿ—ÿžÿ”ÿŽÿ‹ÿƒÿƒÿ{ÿ„ÿ†ÿ…ÿŒÿŒÿ”ÿŠÿšÿÿ®ÿ©ÿªÿ§ÿ²ÿ©ÿšÿ•ÿŒÿÿÿŽÿŠÿÿŠÿ‘ÿŠÿŽÿÿ‘ÿ—ÿ–ÿŸÿ ÿ£ÿ¡ÿ©ÿªÿ¬ÿµÿµÿ±ÿ«ÿªÿ«ÿ¯ÿ¯ÿ®ÿ°ÿ¶ÿ¶ÿ»ÿ¿ÿ¹ÿÀÿ»ÿ·ÿÄÿÀÿ¾ÿ¿ÿµÿ¿ÿ³ÿ¶ÿ¼ÿ¸ÿ¾ÿ¼ÿ½ÿ¯ÿ´ÿªÿ²ÿ¿ÿ·ÿ¹ÿ·ÿ·ÿ±ÿ¸ÿ°ÿ³ÿºÿ»ÿ¦ÿ¦ÿ¦ÿŸÿžÿ”ÿ•ÿŽÿ‰ÿˆÿ‰ÿ‚ÿÿÿƒÿ€ÿ€ÿŠÿ†ÿ‡ÿ‘ÿÿ™ÿ™ÿœÿ’ÿ”ÿ’ÿÿŒÿˆÿ†ÿˆÿÿ‰ÿŽÿÿ“ÿÿ ÿ³ÿ¶ÿ¹ÿ¹ÿ¸ÿÀÿÉÿÂÿ¿ÿºÿ½ÿ´ÿ¸ÿ²ÿ¹ÿ³ÿ¹ÿ´ÿ»ÿÁÿ¿ÿÏÿÈÿ×ÿØÿÞÿåÿèÿèÿâÿçÿÞÿáÿØÿÙÿÎÿÔÿÍÿÅÿÅÿÄÿÆÿ®ÿ­ÿŸÿ¨ÿŸÿ¤ÿ¢ÿ›ÿÿŸÿ–ÿšÿÿ•ÿ‘ÿ•ÿ‹ÿ‰ÿÿ|ÿkÿoÿiÿgÿfÿeÿfÿaÿmÿoÿ}ÿzÿ„ÿ}ÿ‡ÿ‰ÿÿ™ÿœÿ«ÿ¦ÿªÿ¦ÿ¬ÿ¨ÿ¢ÿ§ÿ¥ÿ©ÿ²ÿ²ÿ¸ÿÀÿËÿËÿØÿÙÿßÿãÿïÿåÿëÿáÿÞÿÚÿÙÿÛÿ×ÿØÿÓÿÙÿÌÿÐÿÈÿÎÿÅÿÊÿÌÿÊÿÉÿÉÿÍÿÐÿÐÿÍÿÓÿÌÿÓÿÒÿÐÿÏÿÅÿËÿÉÿÊÿÑÿßÿÙÿÜÿÙÿÖÿ×ÿÚÿäÿîÿàÿçÿÚÿàÿÙÿÖÿÓÿÑÿÏÿÉÿÁÿ¶ÿ¹ÿ±ÿ²ÿ¥ÿ¬ÿ¥ÿ©ÿŸÿŸÿ¤ÿ£ÿ¥ÿ¤ÿ¨ÿ¢ÿ¦ÿŸÿŸÿœÿ–ÿÿ”ÿÿ‡ÿŠÿ€ÿ„ÿwÿ{ÿxÿuÿ{ÿ{ÿ€ÿ€ÿ‡ÿŠÿÿ‘ÿžÿ›ÿ ÿÿ ÿ©ÿ¢ÿ©ÿ¬ÿ­ÿ¬ÿ­ÿ¬ÿ´ÿ°ÿ«ÿ¯ÿ£ÿ¥ÿŸÿ ÿ£ÿ¤ÿžÿ ÿ¢ÿžÿ¡ÿ ÿ¢ÿ¯ÿ¨ÿ¤ÿ£ÿœÿŸÿžÿ¦ÿ£ÿ£ÿ§ÿ¡ÿ ÿ£ÿ¢ÿ¬ÿ¬ÿ±ÿ½ÿµÿÀÿ¹ÿ¹ÿÁÿ·ÿÂÿÀÿÂÿÇÿÍÿÊÿÊÿÍÿÍÿÓÿÛÿßÿãÿèÿíÿîÿñÿøÿ øÿ !#+0++-)+")" þÿþÿúÿñÿìÿßÿÒÿÊÿÄÿÁÿµÿ¤ÿšÿ‹ÿˆÿvÿrÿeÿ^ÿWÿVÿfÿcÿTÿTÿTÿQÿMÿTÿTÿgÿ`ÿZÿeÿdÿ\ÿZÿUÿ`ÿ[ÿVÿYÿZÿ]ÿhÿkÿpÿÿÿ‹ÿ—ÿ“ÿ¡ÿ£ÿ²ÿµÿ»ÿÇÿÒÿÐÿÓÿÑÿÝÿÕÿØÿÝÿÝÿÚÿàÿòÿÿÿ #(%#"&$*!#(",",:?;::AJKNIHFCC>@<<909188;=@<9;722=68@8=33662/(#  ÿÿ  ýÿõÿòÿîÿæÿãÿÞÿÙÿÓÿÒÿÎÿÏÿÒÿÏÿÓÿÑÿÔÿÒÿÛÿÝÿÖÿáÿáÿßÿãÿãÿäÿÝÿâÿ×ÿÝÿ×ÿÖÿÝÿÛÿÝÿÝÿÝÿÞÿåÿÞÿíÿòÿþÿþÿýÿ "  )"))/232/1../326136.363,-0+223>?EHLPTO[fc\SRHHH=B@7?2;7:@CHHVGH9;02)(+&" % üÿöÿøÿóÿóÿùÿúÿüÿüÿõÿþÿðÿøÿìÿñÿëÿêÿíÿáÿíÿéÿøÿýÿ'#$)+1" &!()//64??@MEHAD7FC;A?J@HDEA=;?9<:;8?:?<994621'&,$%$(%+6962-(,     +007A753662.7/=/539:==?:><DGFOKICF?IDFLHPIMFHVGNJPKNMLLDKDFJC?970*(#('  )$-,13?:8,' !+(3:CHTT]Y`\_SVOSILNMSShba_chlnonrnuorowmqtrsppsqqsnphf^c^h^_Z`chaljquqqmlfb`W[QRJP@C;;@JE:8C>DEPW]bjfi_c^`[WXOMFIHJMIPQOVW]dcoekkiy}uvxuhofqpx€|z~~{€„}~‚ƒ}{z‚vz}ˆƒˆ”•œš˜‘’ŒŽ„~rqjbafgpxppsqqrvy~}|}goc]i_]_X^XZ]ht€{x€|‡ˆŒŽ‹Ž‡Œ…‹Ž~}wsumxnurvyxvsrsqlnffgoenmnbgdaa`c[XRTMTSU`bfjjomyxwvntgphjkeiionpourxszjyoruyvsqkv…t}‚ˆ‚‘‘‰—Ї“’—‘Ž’’˜š›Ÿ‘ŠŒ„’Š‹‘…~w~qtsvsspi^^X_atckfdfiiruvy€ƒ|v~ywrrnxy‰Ž„‡‹†‰‘“”˜š˜š—¥œ¨¤¦®¦£Ÿ›”›‘–“—ž– ­±³µ·¿Á·»µ¼µº¯ª©¦œ›‘““’•™œž••“‘“މ‹…†„‡‹‘‘•™ ”œ—–—“ŒŒ”˜‹•‘’‘Œ—ŒŠ›¡£”£«±À»¼º»¼»·´®©©¨¤©¢ŸŸš™›ž¢§¨¯¯¯±¯µ²Á¾ÄÄÏÏÒÒÖÒËÌÇÆÃÁÁ½Â¸¶²´µµÁÂÁÓÍÃÀ¿¼¸¼µ¶³®§¯¥¤Ÿ¤Ÿ¡£œš›¦¡§§«­¨¯©«­¯±¯±¬¯¨¦ ŸŸžš‘™‘’’“ ¡š¢¡¢¨ª¯®²¯³¬¦¸²¯§§«©©ª¯®¯»½»¶±±¦­¦¨¬§¤¦¥© ­®¾¼ÁÀ¾¹º±¶´·¶°¦  ™›¥¤¯´ÄÈÐÓÖáàßàÜÒÏÆÁ´· ž—‘”™Ÿ¡§«¬·¼´»®­¨Ÿ¢›–Œ‡‡{zxssvr~‰‰†ŠŒ‡‡€|rupvt~{y|‹Ž‚…‚„…‰ŒŒŒ‘˜—œ—™˜’šš•”—˜—Ÿ¤¥¦¬­£¥¦¥  ›™›™’˜‘Еޕ‘Œ‰ˆŽŒˆ„†ˆ—…~€tvll]adthmhcjjfhjjws~ˆ‚{tohje`[aZ_^ahkkrrmvlupqrylvhnfjeorlpxw€……–˜™—•‹Ž†ƒqyoq|€‡€Œ€‡†Œ—”˜“Œ†…}{€~‰„ŠŠ–‘Ž“œŽŒŒ˜’Š‹‡ˆ‚ŠŒˆ€†‚‡{€|‚Ž””—””˜Šˆ„y€{€ˆ…„ƒŒ‹˜˜ —“€~pt{~~‚{|€}††Ž„†{{uttv}z|{|~…ˆ”•šŸ¡žœ —™‘†‚‰‹‘•–˜žž§¦¬²³¹¶½³¸´®©²­¤ •˜——”š˜š˜ œ¢¡¨ ¤§¡ž¨ž›“‘‰……}wy‚{…‚”›Ž‹Ž„Š’Œ†{{nkfZYZZdhqsyƒ}}„€Š‹†‰~††‚x}€†‰Ž‰…‡ŒŠŸ˜˜‘“Š‹†Š‹‘‡Ž‡ŠŠƒ‰“‡‡†ˆ€{xupkjjjosmvrjss{{‡zyv|tkha\`]hgvlsprrpttuutrilehbebmiyru||}uvxpn`enhfddac[ecltfat/inst/signals/otoclick.asc0000664000175000017500000011027512612404251016503 0ustar susnaksusnak -2.61530908e-05 -2.42245964e-05 -1.51572894e-05 -1.23660475e-05 -9.25338982e-06 -1.08943017e-05 -1.30427122e-05 -7.56172806e-06 -1.14694667e-05 -9.50713908e-06 -9.79472158e-06 -8.18764291e-06 -5.49790072e-06 -2.02999411e-06 -6.76664703e-07 -2.40215970e-06 -3.21415734e-06 -7.96772688e-06 -9.84547144e-06 -1.22476311e-05 -9.82855482e-06 -1.11311344e-05 -1.48697069e-05 -1.41253757e-05 -1.15202166e-05 -1.34825442e-05 -1.64429523e-05 -2.54087596e-05 -2.39370139e-05 -2.28881836e-05 -2.45290955e-05 -2.13318548e-05 -1.94033604e-05 -1.67982013e-05 -1.73226164e-05 -1.74071995e-05 -1.72211167e-05 -1.71534502e-05 -1.76101989e-05 -1.67643680e-05 -1.66290351e-05 -1.07928020e-05 -7.40947850e-06 -5.17648498e-06 -2.53749264e-06 -1.75763657e-05 1.54093470e-04 1.38005766e-03 3.55298027e-03 4.94374616e-03 4.82066085e-03 3.47895316e-03 1.80217802e-03 1.16854919e-03 1.04201289e-03 4.63176990e-05 -1.59953386e-03 -3.08317197e-03 -3.44735291e-03 -2.83118204e-03 -2.54275371e-03 -2.63356211e-03 -2.65861562e-03 -2.39146839e-03 -1.71948959e-03 -1.45284987e-03 -1.61892030e-03 -1.57559685e-03 -1.49104759e-03 -1.35128250e-03 -1.28427577e-03 -1.35135016e-03 -1.10147480e-03 -7.92661950e-04 -5.69802430e-04 -2.79445606e-04 -1.32440199e-04 6.94088820e-05 2.60346745e-04 2.17040204e-04 2.32248243e-04 2.39471639e-04 2.07566898e-04 2.55846924e-04 1.87351540e-04 1.92155859e-04 2.67857723e-04 2.34565819e-04 2.71190297e-04 2.93181899e-04 3.14801337e-04 3.97709679e-04 3.82095641e-04 3.83364388e-04 4.40745555e-04 4.47190786e-04 4.82935599e-04 4.67964392e-04 4.22407941e-04 4.57949755e-04 4.58085088e-04 4.45600624e-04 4.38546394e-04 3.97236014e-04 4.10430976e-04 4.11801222e-04 3.92973027e-04 4.09618978e-04 3.90959949e-04 4.00551671e-04 4.24996184e-04 4.13543634e-04 4.26383346e-04 4.06641654e-04 3.69475845e-04 3.44997499e-04 3.05700196e-04 2.75199535e-04 2.52514351e-04 2.16245123e-04 2.02813328e-04 1.87554539e-04 1.63837441e-04 1.60420285e-04 1.36381771e-04 1.22357895e-04 1.01195206e-04 8.69514144e-05 1.22442478e-04 1.50879312e-04 1.52943140e-04 1.24404806e-04 5.35749279e-05 2.70665881e-06 -3.10758265e-05 -7.06268784e-05 -1.17553576e-04 -1.56664795e-04 -1.87351540e-04 -1.98431924e-05 1.17699059e-03 3.31044673e-03 4.67348627e-03 4.54759281e-03 3.21814966e-03 1.52733374e-03 8.89272753e-04 7.90225957e-04 -1.57239960e-04 -1.75065000e-03 -3.19566748e-03 -3.53897332e-03 -2.90436332e-03 -2.59375731e-03 -2.66544993e-03 -2.66709085e-03 -2.38028651e-03 -1.70365564e-03 -1.43145035e-03 -1.59464496e-03 -1.54078245e-03 -1.43968874e-03 -1.29148225e-03 -1.23361050e-03 -1.32551849e-03 -1.08325561e-03 -7.65527696e-04 -5.34954198e-04 -2.53563181e-04 -1.19211404e-04 6.48752284e-05 2.46508951e-04 2.00969417e-04 2.10713389e-04 1.96909429e-04 1.62957777e-04 2.11288554e-04 1.48697069e-04 1.50439480e-04 2.14959460e-04 1.66459517e-04 1.95454600e-04 2.23637684e-04 2.45747704e-04 3.28334631e-04 3.13887839e-04 3.24105476e-04 3.94123357e-04 4.12833136e-04 4.54075849e-04 4.36178068e-04 3.89420537e-04 4.31644414e-04 4.31796664e-04 4.21765110e-04 4.09060730e-04 3.70135593e-04 3.94867688e-04 4.02716998e-04 3.80014897e-04 3.80234813e-04 3.55739551e-04 3.71911838e-04 4.07876567e-04 4.11293723e-04 4.36262651e-04 4.24539435e-04 3.78779984e-04 3.45927913e-04 2.97309554e-04 2.67434807e-04 2.52176018e-04 2.21590774e-04 2.02745662e-04 1.67880513e-04 1.36229521e-04 1.31729701e-04 1.11598926e-04 1.02650036e-04 8.45323381e-05 5.80916648e-05 6.34880658e-05 7.87130216e-05 7.94066029e-05 6.59071421e-05 1.94371936e-05 -1.38377932e-05 -3.47636491e-05 -7.64461949e-05 -1.30444038e-04 -1.81566057e-04 -2.06924066e-04 -2.07600731e-04 -2.22961020e-04 -2.40655802e-04 -2.47726948e-04 -2.38659641e-04 -2.17902951e-04 -2.32298993e-04 -2.59737746e-04 -2.54645845e-04 -2.13758380e-04 -1.48037320e-04 -9.53420567e-05 -6.42662302e-05 -4.65883648e-05 -3.17186580e-05 -2.86229170e-05 -2.54256762e-05 -1.65952019e-05 2.87582499e-06 3.13464924e-05 4.92781070e-05 6.31835667e-05 7.71566928e-05 7.77826077e-05 6.25914851e-05 3.28520714e-05 6.71589718e-06 3.73857249e-06 6.41139807e-06 7.96772688e-06 -8.50905865e-06 -2.85890837e-05 -4.31542915e-05 -5.32535122e-05 -5.77702491e-05 -6.93581321e-05 -7.98802682e-05 -7.90175207e-05 -7.75796082e-05 -7.55157809e-05 -8.22824279e-05 -8.57841678e-05 -7.37733693e-05 -5.37948439e-05 -3.75718077e-05 -3.10927431e-05 -3.38501518e-05 -4.32727078e-05 -4.78571112e-05 -4.22577107e-05 -3.69289762e-05 -2.96209974e-05 -1.56309546e-05 -8.84739100e-06 -1.37532101e-05 -3.08051606e-05 -5.08175192e-05 -7.21155408e-05 -7.79686905e-05 -7.47545331e-05 -6.68375561e-05 -6.00539924e-05 -5.25937641e-05 -4.63346156e-05 -4.49305363e-05 -4.41862051e-05 -3.78763068e-05 -3.32073203e-05 -3.49158987e-05 -3.29874043e-05 -3.16848247e-05 -1.77455318e-05 -3.14649087e-06 6.41139807e-06 -9.96388776e-06 -3.16509915e-05 -4.86521922e-05 -5.04284370e-05 -4.09212979e-05 -3.10589099e-05 -3.43069005e-05 -4.80262773e-05 -6.17625708e-05 -7.79686905e-05 -8.14535137e-05 -7.22170405e-05 -5.81593313e-05 -4.52012022e-05 -3.93988024e-05 -4.47952034e-05 -4.57087007e-05 -4.49305363e-05 -4.09043813e-05 -2.61361742e-05 -7.74781085e-06 9.01655717e-06 2.60346745e-05 4.15133796e-05 4.68590307e-05 4.12765469e-05 3.34272363e-05 2.83691677e-05 2.93164983e-05 3.71319756e-05 4.30527918e-05 4.70958634e-05 4.62669491e-05 3.79608899e-05 1.63583692e-05 -6.07306571e-06 -1.74748660e-05 -1.86928624e-05 -1.25521302e-05 -7.42639512e-06 -1.54787051e-05 -2.49012611e-05 -3.02807455e-05 -4.02108000e-05 -5.39301769e-05 -6.17964040e-05 -6.16103212e-05 -4.73665292e-05 -2.93164983e-05 -2.63222570e-05 -3.17186580e-05 -3.81638893e-05 -3.50850649e-05 -2.60346745e-05 -1.09112183e-05 8.11997644e-07 3.72165587e-06 5.88698292e-06 5.29490130e-06 4.26298763e-06 1.01499706e-07 6.81739689e-06 2.13487714e-05 4.14287965e-05 4.68082809e-05 3.53557308e-05 1.51572894e-05 -7.78164409e-07 -6.74973042e-06 -1.07589688e-05 -7.22339571e-06 1.06574691e-06 4.48290366e-06 8.96580732e-07 -5.27798469e-06 -2.08074396e-05 -3.67090602e-05 -4.71296966e-05 -5.24584311e-05 -4.37632897e-05 -3.04837449e-05 -1.88620286e-05 -1.96401930e-05 -2.88089997e-05 -5.15956836e-05 -6.69390558e-05 -6.39955643e-05 -5.22554317e-05 -4.67575310e-05 -4.04983825e-05 -3.85529715e-05 -2.87920831e-05 -1.67643680e-05 -1.37362935e-05 -7.37564527e-06 -1.53941220e-06 8.89814085e-06 1.77793651e-05 2.48335946e-05 2.36155981e-05 2.00292752e-05 2.13656880e-05 2.12811049e-05 1.45144579e-05 1.00315542e-05 -3.36640690e-06 -2.03337743e-05 -4.24776268e-05 -6.59578920e-05 -8.92689910e-05 -9.65600532e-05 -9.44285594e-05 -8.61055835e-05 -7.58202800e-05 -7.68521937e-05 -7.62262788e-05 -7.18110417e-05 -6.03754082e-05 -4.22577107e-05 -1.64598689e-05 1.60877033e-05 4.40001223e-05 5.99524927e-05 6.89183000e-05 7.84254391e-05 7.75965249e-05 8.22147615e-05 8.32297585e-05 7.57864468e-05 6.71758884e-05 5.21370154e-05 3.34103197e-05 1.20953816e-05 -1.75932823e-05 -4.25283766e-05 -6.03923248e-05 -6.98487140e-05 -7.93558531e-05 -8.65792488e-05 -9.29568136e-05 -9.34304789e-05 -8.99456557e-05 -7.62262788e-05 -6.72773881e-05 -5.26614305e-05 -3.51865646e-05 -2.05367737e-05 -2.84199175e-06 4.95656895e-06 8.84739100e-06 1.57324544e-05 2.29220168e-05 2.83691677e-05 2.97901636e-05 2.43599293e-05 1.44806247e-05 2.65590896e-06 -1.25690469e-05 -2.32772658e-05 -2.71004214e-05 -2.45798454e-05 -2.73541706e-05 -2.93503315e-05 -3.50850649e-05 -4.05491324e-05 -4.62500325e-05 -4.50151194e-05 -3.80793062e-05 -2.09089393e-05 -3.62015616e-06 1.58677873e-05 2.24145183e-05 1.64937021e-05 1.36009605e-05 1.38039600e-05 1.27551297e-05 1.02683869e-05 8.22147615e-06 3.46790661e-06 1.30257955e-06 9.47330585e-07 -1.10127180e-05 -3.42561506e-05 -5.33719285e-05 -6.32173999e-05 -6.27099014e-05 -6.34203993e-05 -6.29974839e-05 -6.02231586e-05 -6.17794874e-05 -6.04938245e-05 -4.99716883e-05 -4.36956232e-05 -3.47298159e-05 -2.88935828e-05 -2.37001812e-05 -1.89466117e-05 -1.53264555e-05 -9.06730703e-06 -8.77972453e-06 -7.08806277e-06 -1.23491308e-06 -1.40407926e-06 3.82315557e-06 5.09190189e-06 3.07882440e-06 2.97732470e-06 1.89466117e-06 3.29874043e-06 6.64823071e-06 1.48020404e-05 2.28374337e-05 2.82507514e-05 3.61846450e-05 3.62861447e-05 3.24629891e-05 2.53072599e-05 1.97924426e-05 2.28205171e-05 2.16363539e-05 1.83037802e-05 6.39448145e-06 -5.56556719e-06 -1.81684473e-05 -2.34633486e-05 -3.25983221e-05 -3.90604700e-05 -4.60808663e-05 -4.84491928e-05 -4.85676091e-05 -4.94811064e-05 -5.40316766e-05 -5.63323366e-05 -5.52158398e-05 -5.08682691e-05 -3.78086403e-05 -2.90289158e-05 -2.12811049e-05 -1.53772054e-05 -1.61215366e-05 -1.59016205e-05 -1.82868636e-05 -1.53433722e-05 -9.93005452e-06 -8.44139218e-06 -1.47174573e-06 -2.72357543e-06 -5.29490130e-06 -1.56309546e-05 -2.62715071e-05 -3.53895640e-05 -3.38670684e-05 -3.36133191e-05 -2.40046804e-05 -2.10273557e-05 -2.00800251e-05 -2.20254361e-05 -2.81154184e-05 -2.49012611e-05 -2.84875840e-05 -2.70496715e-05 -2.29051002e-05 -1.92003610e-05 -7.83239394e-06 -8.62747497e-07 -8.83047438e-06 -7.24031233e-06 -9.99772099e-06 -6.44523130e-06 -3.58632293e-06 -1.82699470e-06 -3.01115793e-06 -5.14265175e-06 -4.97348557e-06 -6.34373159e-06 -2.99424131e-06 -6.47906454e-06 -8.03539335e-06 -5.90389954e-06 -7.27414556e-06 -1.21122982e-05 -1.75763657e-05 -1.72042001e-05 -1.71534502e-05 -1.41422923e-05 -9.55788894e-06 -5.81931645e-06 -9.76088835e-06 -7.30797880e-06 -1.50050398e-05 -2.18055201e-05 -2.57809252e-05 -2.35648483e-05 -1.83714467e-05 -1.13341338e-05 -4.16148793e-06 -1.67474514e-06 -8.79664114e-06 -1.60031202e-05 -2.26006011e-05 -2.21438524e-05 -1.80500310e-05 -1.29412125e-05 -6.12381557e-06 -2.70665881e-06 -1.87774455e-06 -7.27414556e-06 -8.20455953e-06 -1.39731261e-05 -1.92003610e-05 -1.64598689e-05 -1.56140380e-05 -8.49214203e-06 -3.51865646e-06 -4.24607101e-06 -8.61055835e-06 -7.03731292e-06 -1.21968813e-05 -1.14018003e-05 -7.24031233e-06 -9.20263997e-06 -6.03923248e-06 -6.58056424e-06 -7.95081027e-06 -1.11818842e-05 -1.51911226e-05 -1.65275354e-05 -1.59354538e-05 -2.16363539e-05 -2.92319152e-05 -3.57617296e-05 -4.46937037e-05 -4.42369550e-05 -4.66729479e-05 -4.54718681e-05 -3.94664688e-05 -3.91958029e-05 -4.12257971e-05 -4.35602903e-05 -4.37971229e-05 -3.75210578e-05 -3.00269962e-05 -2.01646082e-05 -1.15709664e-05 5.07498528e-08 8.40755894e-06 1.22645477e-05 1.66967016e-05 1.27043798e-05 1.54448719e-05 2.07736064e-05 2.73203374e-05 3.17863244e-05 3.10081600e-05 2.43937626e-05 1.44467914e-05 6.51289777e-06 -5.85314968e-06 -1.15540498e-05 -1.91665277e-05 -2.13318548e-05 -2.29896833e-05 -3.10927431e-05 -3.65737272e-05 -4.71127800e-05 -5.45391751e-05 -6.37587317e-05 -6.56026430e-05 -6.28452343e-05 -5.94788274e-05 -5.48775074e-05 -5.49620905e-05 -5.23569314e-05 -4.41692885e-05 -3.60493121e-05 -2.78447525e-05 -2.08412729e-05 -1.03529700e-05 2.46982617e-06 1.33810445e-05 2.42415130e-05 3.22261565e-05 4.36787066e-05 4.66221981e-05 5.02085210e-05 5.31350958e-05 4.93965234e-05 4.08028816e-05 3.53557308e-05 3.09066603e-05 1.84560298e-05 8.96580732e-06 6.76664703e-08 -8.79664114e-06 -1.89804449e-05 -3.29197378e-05 -4.56579509e-05 -6.08998233e-05 -6.88168003e-05 -6.94257986e-05 -6.52135608e-05 -5.92250782e-05 -5.49790072e-05 -5.10881851e-05 -5.20862655e-05 -4.89059414e-05 -4.29682087e-05 -3.43407337e-05 -2.45460121e-05 -1.57324544e-05 -3.84007219e-06 8.81355776e-06 1.38547098e-05 1.16555495e-05 5.02423542e-06 6.08998233e-07 1.09958014e-06 -2.02999411e-07 -1.18416323e-06 -3.56940631e-06 -1.10973011e-05 -2.06382735e-05 -2.74049205e-05 -3.50173984e-05 -3.89251371e-05 -3.91112199e-05 -4.23084606e-05 -3.84514718e-05 -3.57448130e-05 -3.32073203e-05 -2.67959223e-05 -2.25667679e-05 -1.79485313e-05 -5.34565116e-06 1.81007808e-06 1.13510504e-05 2.11626886e-05 1.97924426e-05 2.80985018e-05 3.18878241e-05 3.34103197e-05 3.31396539e-05 2.85552505e-05 2.54764261e-05 1.84898630e-05 1.20784650e-05 6.93581321e-07 -7.35872865e-06 -1.81515307e-05 -2.86060003e-05 -3.45944830e-05 -4.06167988e-05 -4.80262773e-05 -6.39786477e-05 -6.82416353e-05 -7.24538731e-05 -7.57356969e-05 -7.20647909e-05 -6.82416353e-05 -6.42662302e-05 -5.95803271e-05 -5.62985033e-05 -5.62985033e-05 -5.24753478e-05 -4.66391147e-05 -4.15810460e-05 -3.52542310e-05 -2.39708471e-05 -2.07736064e-05 -1.35840439e-05 -8.45830879e-06 -1.18923822e-05 -1.28904626e-05 -1.34825442e-05 -9.10114026e-06 9.81163820e-07 8.25530938e-06 1.00315542e-05 1.48697069e-05 1.72718666e-05 1.50388730e-05 1.09788848e-05 8.76280791e-06 7.56172806e-06 1.48020404e-05 2.35479317e-05 2.11288554e-05 1.83545301e-05 1.48866235e-05 1.00992207e-05 2.40215970e-06 -2.63899234e-06 -1.05052195e-05 -1.51911226e-05 -1.74071995e-05 -2.13995212e-05 -2.57301753e-05 -2.54933427e-05 -3.21923233e-05 -3.45775663e-05 -3.32749868e-05 -2.99762464e-05 -2.68466721e-05 -2.43937626e-05 -1.89973615e-05 -8.64439159e-06 -1.42099588e-06 5.34565116e-06 1.45652077e-05 1.94371936e-05 2.08243562e-05 1.63076194e-05 1.87436123e-05 1.08773851e-05 4.85506925e-06 -1.35332941e-06 -2.40215970e-06 -7.56172806e-06 -2.38862640e-05 -3.56771465e-05 -4.74511123e-05 -6.13058221e-05 -6.49936448e-05 -7.15403758e-05 -7.54819477e-05 -6.68037228e-05 -6.17794874e-05 -5.46406748e-05 -4.76371951e-05 -3.94157190e-05 -3.77917237e-05 -3.04499117e-05 -1.55463716e-05 -1.30257955e-06 4.87198586e-06 1.80500310e-05 2.59670080e-05 2.86567502e-05 2.66605893e-05 1.82191971e-05 1.23829641e-05 5.49790072e-06 -2.35140984e-06 -6.07306571e-06 -1.89466117e-05 -2.86905834e-05 -3.97878846e-05 -4.74172791e-05 -5.79732485e-05 -6.42493136e-05 -6.44692296e-05 -6.46722290e-05 -6.56195596e-05 -6.00878257e-05 -4.86691088e-05 -4.17840454e-05 -3.01792458e-05 -2.42415130e-05 -1.64937021e-05 -1.06405525e-05 -5.24415145e-07 8.47522541e-06 1.40915424e-05 1.76271155e-05 1.76101989e-05 2.29220168e-05 2.85045006e-05 2.35648483e-05 1.81007808e-05 1.14187169e-05 -1.35332941e-06 -2.68974220e-06 -7.27414556e-06 -8.89814085e-06 -1.06913023e-05 -1.20784650e-05 -1.14356335e-05 -1.75256158e-05 -2.12980215e-05 -2.64575899e-05 -2.71004214e-05 -2.87582499e-05 -2.53918430e-05 -1.69504508e-05 -1.72549499e-05 -1.33302947e-05 -1.38377932e-05 -1.73056998e-05 -2.13149382e-05 -1.82868636e-05 -1.43622083e-05 -1.03868032e-05 1.82699470e-06 6.64823071e-06 1.00823041e-05 7.79856071e-06 7.25722894e-06 9.25338982e-06 8.05230997e-06 8.52597526e-06 1.19092988e-05 1.35671273e-05 1.33641279e-05 1.17062994e-05 1.72549499e-06 -2.58824249e-06 -8.57672512e-06 -1.30257955e-05 -1.76778654e-05 -2.45290955e-05 -3.01454125e-05 -3.50004818e-05 -4.04137994e-05 -4.32388745e-05 -4.28836256e-05 -4.98532720e-05 -4.69605304e-05 -4.71635298e-05 -4.81616103e-05 -4.92611904e-05 -4.58102004e-05 -4.26975428e-05 -3.48313156e-05 -2.87075000e-05 -2.72357543e-05 -2.47828448e-05 -2.62715071e-05 -2.75233368e-05 -3.16002417e-05 -2.91134989e-05 -2.74387537e-05 -2.71850045e-05 -2.61700074e-05 -2.32095993e-05 -2.49689276e-05 -2.93334149e-05 -2.90627490e-05 -3.12449927e-05 -2.91811653e-05 -2.62715071e-05 -1.86928624e-05 -1.23491308e-05 -7.18956247e-06 -4.38140395e-06 -4.73665292e-07 8.11997644e-07 -7.95081027e-07 1.55632882e-06 2.70665881e-07 6.61439748e-06 1.25352136e-05 1.23491308e-05 9.27030644e-06 7.47714497e-06 4.90581910e-07 -5.85314968e-06 -9.01655717e-06 -9.32105629e-06 -1.17232160e-05 -1.48358736e-05 -1.47851238e-05 -2.00969417e-05 -1.89804449e-05 -2.30235165e-05 -2.29220168e-05 -2.56963421e-05 -2.41400133e-05 -2.48505112e-05 -2.13318548e-05 -1.29412125e-05 -1.14525501e-05 -4.04307160e-06 -2.62207573e-06 -2.89274161e-06 -3.77240572e-06 -2.53749264e-06 -5.32873454e-06 -1.82699470e-06 3.04499117e-06 1.18416323e-06 5.43023425e-06 3.26490719e-06 2.57132587e-06 -3.21415734e-07 -6.73281380e-06 -1.16047997e-05 -1.47682072e-05 -2.21100192e-05 -2.22791854e-05 -2.19070198e-05 -2.35986815e-05 -2.37509311e-05 -2.91811653e-05 -3.54572305e-05 -4.02953831e-05 -4.00078006e-05 -4.27482926e-05 -3.98724677e-05 -3.46790661e-05 -2.75402534e-05 -2.12472717e-05 -1.90142782e-05 -2.41569299e-05 -2.43260961e-05 -2.49520109e-05 -2.09766058e-05 -1.60707867e-05 -1.79485313e-05 -1.19431320e-05 -8.01847674e-06 -7.22339571e-06 -1.37193769e-05 -1.84221966e-05 -2.43091795e-05 -2.53241765e-05 -2.76755864e-05 -3.06698277e-05 -2.53918430e-05 -2.35648483e-05 -2.42584296e-05 -2.63053403e-05 -2.61700074e-05 -2.93164983e-05 -2.46136786e-05 -2.13487714e-05 -1.75763657e-05 -1.80161977e-05 -1.17062994e-05 -6.80048027e-06 -9.13497350e-07 1.31949617e-06 3.84007219e-06 5.80239983e-06 2.63899234e-06 4.70281969e-06 2.97732470e-06 1.18416323e-06 3.95848852e-06 7.98464350e-06 4.14457131e-06 3.95848852e-06 3.09574102e-06 -2.53749264e-07 -6.08998233e-06 -1.24337139e-05 -1.32964614e-05 -1.30934620e-05 -8.98272394e-06 -1.09450516e-05 -8.57672512e-06 -1.25182970e-05 -2.14164379e-05 -2.57132587e-05 -3.06359944e-05 -3.16509915e-05 -2.87075000e-05 -2.50873439e-05 -2.67113392e-05 -2.27359340e-05 -2.34295154e-05 -2.26851842e-05 -2.29896833e-05 -2.37847643e-05 -2.45121789e-05 -1.93018607e-05 -7.62939453e-06 -2.16532705e-06 -5.24415145e-07 2.13149382e-06 3.46790661e-06 3.84007219e-06 2.11457720e-06 -2.58824249e-06 -4.29682087e-06 -6.14073218e-06 -9.64247202e-06 -1.01668872e-05 -1.42268754e-05 -2.26175177e-05 -3.38332352e-05 -3.92127196e-05 -4.59455334e-05 -5.30505127e-05 -5.52665897e-05 -5.54526724e-05 -5.45391751e-05 -4.94641898e-05 -4.58778669e-05 -4.47782867e-05 -4.33234576e-05 -3.86544712e-05 -2.82000015e-05 -2.68974220e-05 -1.64429523e-05 -1.08773851e-05 -3.97540513e-06 4.87198586e-06 6.95272983e-06 1.10465513e-05 9.52405570e-06 5.59940042e-06 3.21415734e-07 -5.49790072e-06 -7.20647909e-06 -1.29750457e-05 -1.49881232e-05 -1.85744461e-05 -2.45121789e-05 -2.81830849e-05 -3.67090602e-05 -4.03968828e-05 -4.50997025e-05 -4.32727078e-05 -4.02784665e-05 -3.30889040e-05 -2.39708471e-05 -1.94033604e-05 -1.13510504e-05 -8.50905865e-06 -7.05422953e-06 -2.23299352e-06 6.14073218e-06 1.77793651e-05 2.43430127e-05 2.58993415e-05 3.57955628e-05 3.47128993e-05 3.14310755e-05 2.89104995e-05 2.13995212e-05 1.44467914e-05 1.03698866e-05 6.93581321e-06 9.64247202e-07 -1.01499706e-06 -1.36178772e-05 -2.27866839e-05 -2.82507514e-05 -3.42730672e-05 -4.05998822e-05 -4.14287965e-05 -4.76202785e-05 -4.42538716e-05 -3.84007219e-05 -3.71319756e-05 -3.65229774e-05 -3.14818253e-05 -2.49520109e-05 -2.34802652e-05 -2.02661079e-05 -1.92003610e-05 -1.45821244e-05 -1.12157175e-05 -7.51097821e-06 -2.30065999e-06 1.01499706e-06 2.36832646e-07 -4.21223778e-06 -9.94697114e-06 -1.27720463e-05 -1.79316146e-05 -2.00800251e-05 -2.06213568e-05 -2.14164379e-05 -2.00123586e-05 -1.81853639e-05 -2.46982617e-05 -3.05175781e-05 -3.33595699e-05 -3.20739069e-05 -3.22599897e-05 -2.44783456e-05 -1.94202770e-05 -1.62061196e-05 -1.15033000e-05 -1.08773851e-05 -1.55802048e-05 -1.55463716e-05 -1.66459517e-05 -1.66459517e-05 -1.16386329e-05 -9.21955658e-06 -1.11988008e-05 -1.56140380e-05 -1.45652077e-05 -1.51742060e-05 -2.03676076e-05 -2.28036005e-05 -2.30742664e-05 -2.10273557e-05 -1.64429523e-05 -1.22137979e-05 -1.02683869e-05 -5.39640101e-06 -1.42099588e-06 -1.81007808e-06 -5.24415145e-07 5.29490130e-06 2.50365940e-06 5.90389954e-06 8.45830879e-06 6.49598115e-06 7.76472747e-06 3.29874043e-06 -1.03191367e-06 -7.62939453e-06 -1.77624485e-05 -2.23806851e-05 -2.78278359e-05 -3.33934031e-05 -3.16340749e-05 -3.22938230e-05 -3.20400737e-05 -3.12619093e-05 -3.30043209e-05 -2.94010814e-05 -2.48166780e-05 -2.43599293e-05 -2.10950221e-05 -1.39731261e-05 -4.92273572e-06 1.28566294e-06 5.98848263e-06 8.67822482e-06 7.62939453e-06 5.83623307e-06 2.89274161e-06 -6.39448145e-06 -9.57480555e-06 -9.91313791e-06 -1.20615483e-05 -1.35840439e-05 -2.21269358e-05 -2.32772658e-05 -3.03822452e-05 -4.19532116e-05 -4.71127800e-05 -4.61146995e-05 -4.14795463e-05 -3.52711477e-05 -3.65568106e-05 -3.10081600e-05 -2.57301753e-05 -2.48674279e-05 -1.99616088e-05 -1.77116986e-05 -1.58847039e-05 -1.35671273e-05 -7.84931056e-06 3.04499117e-07 4.73665292e-07 3.18032411e-06 2.08074396e-06 -1.53941220e-06 -6.44523130e-06 -6.54673101e-06 -8.11997644e-06 -1.16724661e-05 -1.07758854e-05 -9.03347379e-06 -7.54481144e-06 -7.69706100e-06 -1.15202166e-05 -1.30257955e-05 -1.38377932e-05 -9.20263997e-06 -1.12664673e-05 -1.49035401e-05 -9.52405570e-06 -6.74973042e-06 -5.83623307e-06 -3.11265764e-06 -3.62015616e-06 -8.49214203e-06 -1.56647879e-05 -1.31272952e-05 -1.34656276e-05 -1.34317944e-05 -8.44139218e-06 -1.08097186e-05 -7.07114615e-06 -6.03923248e-06 -7.91697703e-06 -1.00146376e-05 -1.21799647e-05 -1.12157175e-05 -1.02683869e-05 -7.76472747e-06 -3.36640690e-06 -4.87198586e-06 -2.26682676e-06 -3.43407337e-06 -8.62747497e-06 -1.23998807e-05 -2.19916029e-05 -2.06890233e-05 -1.80500310e-05 -1.59185371e-05 -1.64767855e-05 -1.96909429e-05 -2.30573498e-05 -2.37509311e-05 -2.45460121e-05 -2.50196774e-05 -2.40385136e-05 -2.28881836e-05 -2.35648483e-05 -1.89466117e-05 -1.54279552e-05 -1.90988613e-05 -2.00292752e-05 -1.72549499e-05 -2.20931026e-05 -2.43599293e-05 -2.38693474e-05 -2.54087596e-05 -2.55610092e-05 -2.63391736e-05 -2.62715071e-05 -2.97224971e-05 -2.84368342e-05 -3.27336550e-05 -3.23953227e-05 -2.82507514e-05 -3.07036609e-05 -3.33257366e-05 -2.58147584e-05 -1.75763657e-05 -1.47343739e-05 -1.03698866e-05 -9.06730703e-06 -1.12833839e-05 -8.98272394e-06 -9.13497350e-06 -1.04375531e-05 -6.52981439e-06 -3.62015616e-06 -4.77048616e-06 -5.26106807e-06 -7.34181203e-06 -1.14356335e-05 -1.71872835e-05 -2.09427726e-05 -2.34971818e-05 -2.47659281e-05 -2.28036005e-05 -2.25160180e-05 -1.76271155e-05 -1.63076194e-05 -1.95386933e-05 -1.70857838e-05 -1.65782852e-05 -1.63583692e-05 -9.96388776e-06 -7.08806277e-06 -1.31949617e-06 4.14457131e-06 7.68014438e-06 9.59172217e-06 6.32681498e-06 7.78164409e-06 2.36832646e-06 -1.33641279e-06 -3.55248969e-07 -1.69166176e-06 -2.55440926e-06 -3.78932234e-06 -1.13341338e-05 -1.67474514e-05 -2.14502711e-05 -2.69143386e-05 -3.28013215e-05 -3.39854847e-05 -4.00585504e-05 -4.38817060e-05 -3.67090602e-05 -4.04307160e-05 -3.88743872e-05 -3.91112199e-05 -4.09043813e-05 -3.44253168e-05 -3.02130790e-05 -2.20085195e-05 -1.86082793e-05 -1.13172172e-05 4.05998822e-07 7.00347968e-06 1.00146376e-05 1.42776252e-05 1.99616088e-05 1.71365336e-05 1.46159576e-05 1.51911226e-05 1.21461314e-05 1.39562095e-05 1.08604685e-05 4.70281969e-06 -4.90581910e-07 -1.45482911e-05 -2.78447525e-05 -3.11096597e-05 -4.05322157e-05 -4.56241176e-05 -4.26467929e-05 -4.40677888e-05 -4.61146995e-05 -4.31712081e-05 -4.38478728e-05 -4.56410342e-05 -3.75379744e-05 -3.22769064e-05 -3.20231571e-05 -2.07228565e-05 -1.09788848e-05 -5.92081616e-07 6.41139807e-06 1.08773851e-05 9.49022247e-06 5.59940042e-06 7.93389365e-06 5.87006630e-06 9.23647320e-06 6.47906454e-06 5.93773277e-06 1.91157779e-06 -3.28182381e-06 -8.30605923e-06 -1.70857838e-05 -2.30065999e-05 -2.66436727e-05 -3.05344947e-05 -3.34949028e-05 -2.78278359e-05 -2.68466721e-05 -2.95871642e-05 -2.88428330e-05 -3.17524912e-05 -3.40362346e-05 -3.11434930e-05 -2.73034208e-05 -2.71173380e-05 -2.31926827e-05 -2.06890233e-05 -1.81346141e-05 -9.55788894e-06 -9.81163820e-06 -1.36009605e-05 -1.22307145e-05 -9.01655717e-06 -7.03731292e-06 -6.68206395e-06 -1.62399529e-06 -1.84391132e-06 4.41523719e-06 5.83623307e-06 2.63899234e-06 -4.51673690e-06 -6.12381557e-06 -7.96772688e-06 -1.18416323e-05 -1.36178772e-05 -1.49881232e-05 -1.65275354e-05 -2.04521907e-05 -2.35479317e-05 -3.15494918e-05 -3.66583103e-05 -4.17502122e-05 -4.57594506e-05 -4.53534517e-05 -4.06675487e-05 -3.66413937e-05 -3.35456527e-05 -3.12619093e-05 -2.49858442e-05 -2.25329346e-05 -1.50050398e-05 -1.03529700e-05 -2.74049205e-06 2.38524308e-06 8.59364173e-06 1.42099588e-05 2.19408530e-05 2.43430127e-05 1.95894432e-05 1.33979611e-05 5.07498528e-06 7.12189600e-06 4.14457131e-06 -3.85698881e-06 -1.04037198e-05 -1.67643680e-05 -2.59331748e-05 -3.08389939e-05 -3.61677284e-05 -4.42707882e-05 -4.71466132e-05 -5.00562714e-05 -5.07836860e-05 -4.56917841e-05 -4.30358751e-05 -3.39009016e-05 -2.79124190e-05 -2.78278359e-05 -2.16025207e-05 -1.59862036e-05 -1.26028801e-05 -6.52981439e-06 3.41715675e-06 4.48290366e-06 1.02176370e-05 1.34148777e-05 1.68320345e-05 1.38377932e-05 9.15189011e-06 4.46598704e-06 -5.58248380e-07 -6.05614910e-06 -9.89622129e-06 -1.33641279e-05 -1.63922024e-05 -1.77116986e-05 -2.60515911e-05 -3.46790661e-05 -3.97709679e-05 -4.18855451e-05 -4.53365351e-05 -4.48290366e-05 -4.42538716e-05 -3.74703080e-05 -3.59478124e-05 -3.10419933e-05 -2.69143386e-05 -2.49350943e-05 -2.72526709e-05 -2.45121789e-05 -1.45821244e-05 -1.05221361e-05 -2.99424131e-06 5.88698292e-06 4.12765469e-06 4.31373748e-06 2.89274161e-06 3.53557308e-06 -4.05998822e-06 -1.12157175e-05 -8.76280791e-06 -1.12157175e-05 -1.59862036e-05 -1.65275354e-05 -1.78977814e-05 -2.65083398e-05 -3.20231571e-05 -3.20231571e-05 -3.58293960e-05 -3.56263966e-05 -3.22769064e-05 -3.04329950e-05 -2.65760062e-05 -2.69143386e-05 -1.84052799e-05 -1.61046199e-05 -1.40746258e-05 -1.61384532e-05 -1.65444520e-05 -1.16386329e-05 -8.06922659e-06 -5.59940042e-06 -5.59940042e-06 -5.71781674e-06 -5.65015027e-06 -9.89622129e-06 -1.37701267e-05 -1.94541102e-05 -2.14671877e-05 -2.04014408e-05 -2.17378536e-05 -2.39370139e-05 -2.23468518e-05 -1.95556099e-05 -1.79146980e-05 -2.20085195e-05 -2.72865042e-05 -2.53580098e-05 -2.21607690e-05 -1.95386933e-05 -1.71534502e-05 -1.00823041e-05 -1.06067192e-05 -1.13172172e-05 -1.52926223e-05 -1.71365336e-05 -1.69842841e-05 -1.68489511e-05 -1.87943621e-05 -1.93018607e-05 -1.83037802e-05 -2.12980215e-05 -1.81515307e-05 -1.52249558e-05 -1.77624485e-05 -1.57493710e-05 -2.00292752e-05 -2.05706070e-05 -1.52249558e-05 -9.13497350e-06 -5.39640101e-06 -2.87582499e-06 1.25182970e-06 2.80815852e-06 -2.33449323e-06 -3.80623896e-06 -6.69898056e-06 -9.47330585e-06 -7.57864468e-06 -8.86430762e-06 -6.08998233e-06 -8.45830879e-06 -1.55971214e-05 -1.67305348e-05 -1.78639482e-05 -2.31419329e-05 -2.71173380e-05 -2.73034208e-05 -2.64406733e-05 -2.09596892e-05 -1.75086992e-05 -1.67136182e-05 -1.07928020e-05 -1.32964614e-05 -1.53941220e-05 -1.28397127e-05 -1.28735460e-05 -8.86430762e-06 -2.45290955e-06 -1.77624485e-06 2.38524308e-06 2.04691073e-06 -3.80623896e-06 -7.79856071e-06 -8.66130820e-06 -1.04883029e-05 -1.22137979e-05 -1.27043798e-05 -1.23491308e-05 -1.26197967e-05 -1.12157175e-05 -9.67630526e-06 -1.60200369e-05 -1.50557897e-05 -1.81515307e-05 -1.97586093e-05 -1.80838642e-05 -1.62230363e-05 -1.49204567e-05 -1.08097186e-05 -1.27212964e-05 -1.49712066e-05 -1.80500310e-05 -1.91326945e-05 -2.30573498e-05 -2.34633486e-05 -2.42922629e-05 -2.47997614e-05 -2.42245964e-05 -1.87097791e-05 -1.89127785e-05 -1.99277755e-05 -1.66797849e-05 -1.35163775e-05 -1.87943621e-05 -1.69504508e-05 -9.98080438e-06 -1.20784650e-05 -5.51481733e-06 -1.04883029e-06 -3.82315557e-06 -8.05230997e-06 -9.50713908e-06 -1.17232160e-05 -1.47851238e-05 -1.33810445e-05 -1.54787051e-05 -1.59354538e-05 -1.44806247e-05 -1.56478713e-05 -1.75594491e-05 -2.11965218e-05 -2.63899234e-05 -2.60854243e-05 -2.61023409e-05 -2.55440926e-05 -2.38016809e-05 -1.98939423e-05 -1.49712066e-05 -1.78808648e-05 -1.52249558e-05 -1.65106188e-05 -1.66290351e-05 -1.62061196e-05 -1.54448719e-05 -1.26705466e-05 -1.39562095e-05 -1.04206364e-05 -1.03022201e-05 -1.50727063e-05 -2.06551901e-05 -1.85406129e-05 -1.61722864e-05 -2.23130186e-05 -2.16701871e-05 -2.10273557e-05 -1.70350339e-05 -1.20784650e-05 -1.40238760e-05 -1.48020404e-05 -1.12664673e-05 -1.42268754e-05 -1.89973615e-05 -1.83206968e-05 -1.10465513e-05 -1.06913023e-05 -9.21955658e-06 -7.51097821e-06 -6.05614910e-06 -1.01161373e-05 -1.19092988e-05 -1.85406129e-05 -1.99785254e-05 -1.78639482e-05 -1.59523704e-05 -1.45821244e-05 -1.12326341e-05 -1.03191367e-05 -1.16555495e-05 -1.12833839e-05 -1.38208766e-05 -1.30088789e-05 -1.53095389e-05 -1.26536300e-05 -1.02514703e-05 -4.58440337e-06 -5.39640101e-06 -3.90773866e-06 -3.56940631e-06 -3.73857249e-06 -5.37948439e-06 -1.28227961e-05 -7.51097821e-06 -9.47330585e-06 -9.52405570e-06 -1.02007204e-05 -9.13497350e-06 -1.32457116e-05 -1.74241161e-05 -2.16363539e-05 -2.51380937e-05 -2.72357543e-05 -2.77601695e-05 -2.92149986e-05 -3.06529111e-05 -2.86905834e-05 -2.59331748e-05 -2.37340145e-05 -2.54425928e-05 -2.52057602e-05 -2.58824249e-05 -2.61700074e-05 -2.00461918e-05 -1.26536300e-05 -9.93005452e-06 -3.45098999e-06 1.43791249e-06 4.60131998e-06 1.97924426e-06 1.69166176e-07 1.99616088e-06 2.96040808e-06 1.26874632e-06 1.35332941e-07 -7.27414556e-07 -6.88506336e-06 -1.13510504e-05 -1.57493710e-05 -2.49012611e-05 -3.27167384e-05 -3.68443931e-05 -4.26298763e-05 -4.33234576e-05 -4.44399544e-05 -4.03292163e-05 -3.72503919e-05 -3.71996421e-05 -3.33088200e-05 -3.13972422e-05 -3.04160784e-05 -2.56455923e-05 -1.81007808e-05 -8.72897467e-06 -1.94541102e-06 5.07498528e-06 5.27798469e-06 1.03022201e-05 1.24337139e-05 7.95081027e-06 7.98464350e-06 2.02999411e-06 4.73665292e-07 -4.04307160e-06 -5.53173395e-06 -7.93389365e-06 -1.08773851e-05 -2.09258560e-05 -2.88766662e-05 -3.19893239e-05 -3.92127196e-05 -3.93649691e-05 -3.60323955e-05 -3.25306556e-05 -2.90796656e-05 -2.76755864e-05 -2.62545905e-05 -2.49858442e-05 -1.73395330e-05 -1.65782852e-05 -1.62907027e-05 -9.57480555e-06 -3.87390543e-06 1.06574691e-06 2.30065999e-06 1.87774455e-06 1.48866235e-06 4.22915440e-07 -4.77048616e-06 -7.68014438e-06 -8.03539335e-06 -1.06067192e-05 -9.32105629e-06 -6.56364762e-06 -1.26536300e-05 -1.11649676e-05 -1.36517104e-05 -2.07228565e-05 -2.72357543e-05 -2.87920831e-05 -2.65421730e-05 -2.61530908e-05 -2.61361742e-05 -2.43768459e-05 -2.63391736e-05 -2.74218371e-05 -2.62545905e-05 -2.75740867e-05 -2.86736668e-05 -2.82338348e-05 -2.39708471e-05 -2.44614290e-05 -2.16025207e-05 -1.52418724e-05 -1.08435519e-05 -1.08266353e-05 -1.30765454e-05 -1.01330539e-05 -1.32795448e-05 -1.11649676e-05 -4.70281969e-06 -3.94157190e-06 -1.20107985e-06 -4.73665292e-07 -3.80623896e-06 -5.81931645e-06 -1.10296347e-05 -1.49712066e-05 -1.77116986e-05 -1.96740263e-05 -2.11119387e-05 -2.48335946e-05 -2.65760062e-05 -2.90289158e-05 -2.54425928e-05 -3.14649087e-05 -3.77917237e-05 -3.54403138e-05 -3.31734871e-05 -3.05006615e-05 -2.76248365e-05 -1.95725265e-05 -1.30596288e-05 -8.23839276e-06 -1.03191367e-05 -9.84547144e-06 -5.43023425e-06 -2.75740867e-06 6.07306571e-06 7.59556130e-06 7.27414556e-06 8.10305982e-06 7.40947850e-06 9.03347379e-06 5.53173395e-06 3.29874043e-06 -7.18956247e-06 -7.02039630e-06 -8.66130820e-06 -9.65938864e-06 -1.29412125e-05 -1.90650280e-05 -1.89973615e-05 -2.18901032e-05 -2.66944226e-05 -2.96209974e-05 -2.93334149e-05 -2.99254965e-05 -2.72865042e-05 -2.56794255e-05 -2.18055201e-05 -1.88958618e-05 -1.55971214e-05 -1.49881232e-05 -1.58001208e-05 -1.32457116e-05 -1.18077991e-05 -7.81547732e-06 -6.52981439e-06 -3.82315557e-06 3.50173984e-06 1.18416323e-07 -8.96580732e-07 -1.89466117e-06 -6.78356365e-06 -1.14694667e-05 -1.33133780e-05 -1.34656276e-05 -1.79823645e-05 -1.37193769e-05 -1.29073792e-05 -2.41738465e-05 -2.26175177e-05 -2.22453521e-05 -3.03484119e-05 -3.28351547e-05 -2.78278359e-05 -2.62207573e-05 -2.29389334e-05 -1.97924426e-05 -1.58170374e-05 -1.53602888e-05 -1.68658677e-05 -1.14187169e-05 -8.99964056e-06 -1.38885430e-05 -7.86622718e-06 -7.37564527e-06 -6.66514733e-06 -5.68398351e-06 -7.30797880e-06 -8.84739100e-06 -1.19431320e-05 -1.35671273e-05 -2.11119387e-05 -2.19239364e-05 -2.76925030e-05 -2.93503315e-05 -2.27697673e-05 -2.18055201e-05 -2.23637684e-05 -2.27697673e-05 -2.08074396e-05 -1.76101989e-05 -1.82699470e-05 -1.61722864e-05 -8.15380968e-06 -4.29682087e-06 -1.16724661e-06 3.58632293e-06 3.04499117e-06 8.62747497e-07 2.36832646e-07 -2.53749264e-06 -7.71397762e-06 -9.30413967e-06 -1.03868032e-05 -8.32297585e-06 -1.24506305e-05 -1.53941220e-05 -1.69166176e-05 -2.42922629e-05 -2.64575899e-05 -2.94856645e-05 -2.83184178e-05 -2.57809252e-05 -2.12303551e-05 -1.75594491e-05 -1.92680274e-05 -1.59523704e-05 -1.69673674e-05 -1.42776252e-05 -1.40069594e-05 -1.52757057e-05 -1.14356335e-05 -9.76088835e-06 -4.31373748e-06 -4.00923837e-06 -1.97924426e-06 -6.22531527e-06 -9.71013849e-06 -1.28397127e-05 -1.59185371e-05 -1.86082793e-05 -2.24652682e-05 -1.71703668e-05 -1.62399529e-05 -1.66797849e-05 -2.06721067e-05 -1.65782852e-05 -2.16532705e-05 -2.02491913e-05 -2.42245964e-05 -2.27359340e-05 -2.40892634e-05 -2.44783456e-05 -2.15010210e-05 -2.17209370e-05 -2.09427726e-05 -2.23468518e-05 -2.34971818e-05 -2.43430127e-05 -2.35817649e-05 -2.58485917e-05 -1.95048601e-05 -1.38547098e-05 -1.10973011e-05 -8.30605923e-06 -7.52789483e-06 -9.27030644e-06 -1.08943017e-05 -1.19262154e-05 -8.03539335e-06 -9.15189011e-06 -1.12664673e-05 -6.61439748e-06 -8.03539335e-06 -1.09450516e-05 -1.22137979e-05 -1.48527902e-05 -2.43260961e-05 -2.67790056e-05 -2.93841647e-05 -2.49858442e-05 -2.73034208e-05 -2.67620890e-05 -2.31419329e-05 -2.44445124e-05 -2.52565101e-05 -2.22622687e-05 -2.16701871e-05 -2.24483515e-05 -1.47851238e-05 -9.23647320e-06 -5.00731881e-06 -5.92081616e-07 2.53749264e-06 3.26490719e-06 7.61247791e-06 8.30605923e-06 2.79124190e-06 -1.84391132e-06 -1.20107985e-06 -1.70857838e-06 -4.90581910e-06 -8.00156012e-06 -8.42447556e-06 -1.51742060e-05 -1.99954420e-05 -3.12280761e-05 -3.20062405e-05 -3.04160784e-05 -3.29535711e-05 -3.14987419e-05 -2.99931630e-05 -3.04837449e-05 -2.89104995e-05 -2.35479317e-05 -2.44445124e-05 -2.79970021e-05 -2.49520109e-05 -1.90650280e-05 -1.44975413e-05 -1.04206364e-05 -7.88314380e-06 -5.39640101e-06 -4.39832057e-06 -7.83239394e-06 -9.43947261e-06 -7.91697703e-06 -1.03868032e-05 -7.34181203e-06 -9.45638923e-06 -9.79472158e-06 -8.54289188e-06 -8.23839276e-06 -9.18572335e-06 -1.87266957e-05 -2.27021008e-05 -2.40215970e-05 -2.52226768e-05 -2.13826046e-05 -2.24314349e-05 -2.31419329e-05 -2.39370139e-05 -2.59162581e-05 -2.62884237e-05 -2.63899234e-05 -2.83860843e-05 -3.16848247e-05 -3.20569903e-05 -2.62715071e-05 -2.12641883e-05 -1.44975413e-05 -1.38208766e-05 -1.42607086e-05 -1.18416323e-05 -1.12833839e-05 -1.00315542e-05 -7.22339571e-06 -4.29682087e-06 -2.02999411e-06 1.03191367e-06 3.40024013e-06 2.79124190e-06 -3.95848852e-06 -4.19532116e-06 -7.20647909e-06 -9.43947261e-06 -1.50388730e-05 -1.28735460e-05 -1.23322142e-05 -1.44467914e-05 -1.40069594e-05 -2.00800251e-05 -2.32941824e-05 -2.49350943e-05 -2.63560902e-05 -2.70327549e-05 -2.74049205e-05 -2.72526709e-05 -2.69143386e-05 -2.65760062e-05 -2.14333545e-05 -2.27359340e-05 -2.40723468e-05 -2.10781055e-05 -2.08074396e-05 -1.85575295e-05 -1.52926223e-05 -9.50713908e-06 -3.73857249e-06 -9.47330585e-07 2.75740867e-06 4.78740278e-06 1.04883029e-06 -9.64247202e-07 -1.20107985e-06 -1.37024602e-06 -3.89082204e-06 -6.08998233e-06 -4.09382146e-06 -6.49598115e-06 -9.71013849e-06 -1.83883633e-05 -2.54595095e-05 -2.83184178e-05 -3.44760666e-05 -3.62184783e-05 -3.87390543e-05 -3.86206379e-05 -3.54403138e-05 -3.79608899e-05 -3.84345552e-05 -3.16509915e-05 -3.16509915e-05 -2.96717472e-05 -1.96909429e-05 -1.17401326e-05 -5.24415145e-06 3.78932234e-06 8.22147615e-06 8.89814085e-06 8.28914262e-06 8.49214203e-06 1.00484708e-05 6.15764880e-06 3.34949028e-06 1.26874632e-06 9.30413967e-07 -7.81547732e-06 -1.36178772e-05 -1.53095389e-05 -2.54425928e-05 -2.89781659e-05 -3.80623896e-05 -4.07690484e-05 -3.98724677e-05 -3.78932234e-05 ltfat/inst/signals/expchirp.m0000664000175000017500000000460512612404256016210 0ustar susnaksusnakfunction [outsig]=expchirp(L,fstart,fend,varargin) %-*- texinfo -*- %@deftypefn {Function} expchirp %@verbatim %EXPCHIRP Exponential chirp % Usage: outsig=expchirp(L,fstart,fend) % % EXPCHIRP(L,fstart,fend) computes an exponential chirp of length L* % starting at frequency fstart and ending at frequency fend. The % freqencies are assumed to be normalized to the Nyquist frequency. % % EXPCHIRP takes the following parameters at the end of the line of input % arguments: % % 'fs',fs Use a sampling frequency of fs Hz. If this option is % specified, fstart and fend will be measured in Hz. % % 'phi',phi Starting phase of the chirp. Default value is 0. % % 'fc',fc Shift the chirp by fc in frequency. Default values is 0. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/expchirp.html} %@seealso{pchirp} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHORS: Piotr Majdak, Peter L. Soendergaard. if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; thismfilename = upper(mfilename); complainif_notposint(L,'L',thismfilename); if ~all(cellfun(@isscalar,{fstart,fend})) || ... any(cellfun(@(el) el<=0,{fstart,fend})) error('%s: fstart and fend must be scalars strictly greater than 0.',... thismfilename); end definput.keyvals.phi=0; definput.keyvals.fs=[]; definput.keyvals.fc=0; [~,kv]=ltfatarghelper({},definput,varargin); if ~isempty(kv.fs) fstart=fstart/kv.fs*2; fend = fend/kv.fs*2; kv.fc = kv.fc/kv.fs*2; end; w1=pi*fstart*L; w2=pi*fend*L; ratio = w2/w1; A=w1/log(ratio); tau=1/log(ratio); l = 0:L-1; l = l(:); t= l./L; outsig=exp(1i*A*(exp(t/tau)-1)+kv.phi + 1i*pi*l*kv.fc); ltfat/inst/signals/linus.wav0000664000175000017500000024206612612404251016061 0ustar susnaksusnakRIFF.DWAVEfmt @€>dataêC|ÿ\ÿÿÿ¼þÜþ ÿ|ÿ|ÿ\ÿèÿ¤ÔDììth¤hX(Lÿtþ¬þ˜ÿ|ÿLÿìþ ÿ8 䤴ô”¤èÿlÿÜþìþÿ ÿˆÿ¨ÿèÿ ÿ,ÿÔä$TŒì4„ÔÔ ˜ÿ ÿÌþtþÌþ\ÿˆÿ ÿLÿp¤Ô̬tŒ´äp|ÿ,ÿÿŒþ<ÿ ÿlÿ\ÿèÿ0 ”`PH|ÿÿœþ,ÿ\ÿ¼þlÿLÿ ”8@¬ìĬ4tèÿÿ|ÿìþtþÔý4þìþ¼þtþˆÿ\ÿ$Dlÿœ|ÿœlÿlàÿÔŒ|ÿ4tþ@<ÿXtþ<ÿÐÿðÿèÿìþ(Ðÿ0|ÿHh´00xøÿLÿìþlÿ ÿTþìþ|ÿœþ ÿÐÿpŒ´T,T´ääP|ÿlÿ¼þ¼þTþ¼þôý ÿüþ°ÿ,`ìÔ`¸ÿÄx ÿ”\ÿL„øÿ$@ÈÿØÿÐÿÜþÿlÿÜþìþ,ÿ0|ÿ<ÿàÿØÿ|ÿÿìþðÿðÿlÿ¤¸ÿ0x¨ÿ(”°ÿ”ÄÔ<ÿÄÀÿ ÿÿÿTþ ÿ<ÿ¬þô„”èÿ ÄÔXLÌ„”ÿlÿ<ÿ4þtþìþŒþtþÔýtþ¸ÿpôŒlŒ \ÿ|ÿ|ÿ<ÿLÿtþ ÿðÿ¨ÿÈÿàÿ¸ÿlÿðÿ¸ÿ¨ÿ(„X˜ÿ|ÿ¨ÿ¸ÿ|ÿ(Œ¬DD88àÿLÿ¬þþ¬þLÿ<ÿ ÿÿÐÿ|ÿ„Œ„XŒ¤„„pØÿèÿ¸ÿüþÜþìþüþ¼þþŒþ<ÿ\ÿLÿˆÿ`ÄÔ4tÄŒôHX ÿLÿ,ÿÜþìþ ÿ<ÿPÄ”høÿ X Œd„(èÿ ÿLÿlÿÿÿ¼þÀÿØÿ|ÿ`ÄD4”¤Lÿ¸ÿÌþþœþlÿLÿìþÈÿÄ|ÿØÿäô0äÄØÿÀÿØÿXx\ÿ|ÿÐÿ°ÿ¸ÿÐÿ °ÿÿÀÿ8h8h@ x`P„|ÿ,ÿHppx¤¤Øÿ ¤èÿ¨ÿ èÿ\ÿ|ÿØÿ,ÿÿlÿLÿ¨ÿ˜ÿ(`”DääÄô$øÿÈÿ0ÿ,ÿ¼þŒþ|ÿtþtþèÿ(@”¤¤´ôdäPèÿ¸ÿøÿ¸ÿ\ÿÿ„0ðÿ¤äÄ` hðÿLÿ<ÿˆÿàÿLÿ\ÿP`xô´Äèÿ ¤(´”äüþ|ÿ˜ÿlÿŒþÌþ\ÿ¬þ¬þ„¬¬Xðÿ`øÿ¸ÿ¸ÿ,ÿŒþLÿÿ ¤Øÿ\ÿèÿðÿ|ÿ„„dŒ¬$””ðÿ\ÿüþLÿ\ÿìþìþ|ÿˆÿ\ÿ¨ÿH´T$ä|ÿÀÿ ÿ ÿÿÿÈÿÐÿÀÿØÿX°ÿüþÿ ÿìþÜþìþLÿÿÿ|ÿøÿ8Ô¬DÔt¬èÿ”$pðÿ ÿØÿÐÿlÿlÿ,ÿLÿ,ÿ<ÿ°ÿ°ÿ ÿ<ÿøÿàÿÐÿøÿ°ÿ ÿÀÿ¤ÔPää`°ÿ¤4´Ôxˆÿÿÿ,ÿìþÿ,ÿìþ¼þìþˆÿP0°ÿp´Ì¬ä`hhøÿ¨ÿÿ ÿtþTþÌþðÿD$´Ä´„Ðÿ„Ô(Ðÿðÿ„(ÐÿÐÿÐÿ¨ÿüþýý”<ÿtþDì äì D¸ÿðÿôlÿÜþpô(ÀÿpxÐÿèÿ ÿ4þÔýœþüþTþ´ýTþ”àÿTþ0¬ì„Tì¼þ$¤tþ4ý¸ÿDìþ4þTþH¬ÿŒþP ˆÿ´0LÿÈÿ”´@Lÿ°ÿDŒtþÌLÿ ÿ@@øÿlÿˆÿhhôTHÿÿþ ÿ$ÿ”ýÿ0¼þôý¨ÿdüþŒþ`hh8Œ¬P´ŒHàÿ Pä|ÿøÿ$Dh$Ô\ÿÐÿèÿèÿLÿ ÿÀÿðÿLÿ,ÿØÿXT„ÿD´lÿÌþlÿØÿŒþ4ýTþØÿŒþÿÔd,$äì$`|ÿH”ØÿtþTþ\ÿÔý´ý´ýþtþTþÌþäŒì ÌììtdTXþÌþhØÿLÿ\ÿÔÔ¨ÿ`ÄP|ÿ\ÿÿ ÿüþ”ý”ýÌþÿTþTþ ÿ0¤ ”¬Ì”ÄHLÿˆÿðÿ¸ÿtþ4þ<ÿ<ÿ|ÿØÿ´„øÿô´¸ÿh¨ÿ°ÿäp@p@àÿ,ÿ,ÿLÿÀÿ8”ôÌLt¤´h<ÿþtýý4ýÔýÔýtþÿØÿP$DÄP$ôhØÿLÿ<ÿÿÈÿ,ÿÿ0´¤¨ÿØÿŒìÌ l,Ô`Pìþôýôý¼þ¬þTþtþ¼þLÿ˜ÿ”XH´Äh¤¤ÄÌ̤`äøÿlÿüþÿ¬þœþ\ÿÿ\ÿÌþ ÿ¨ÿ(àÿèÿH LÿlÿÐÿ`TÔ`ä4ô¤P´Ô ÿìþ|ÿ˜ÿÿ\ÿøÿ0Èÿˆÿèÿ0„´88(lÿLÿ|ÿ|ÿèÿøÿ|ÿÈÿ ”ôDdT`ô”èÿÿlÿÿ|ÿÿ¬þØÿ„ØÿX„Àÿ4þýtýÜþœþÔý4þˆÿ@¨ÿøÿDLL̬¬ŒììLT|ÿèÿ¼þüþÿÌþtþ¼þ ÿ\ÿÿ<ÿ¬þTþÔýTþüþLÿ|ÿ ÿ”¤(PDŒT4ðÿ ˜ÿÿÿXd䤤hÔ˜ÿüþTþÿLÿÿìþìþ ÿøÿ””„”@ô Ì´( ÿÀÿ ÿ¸ÿÌþÔý¬þ|ÿlÿøÿèÿ8h hpØÿÿ4þÔýTþ,ÿ¨ÿ˜ÿ äÔ4  ìdäThÈÿlÿÐÿLÿÌþ,ÿÈÿ„@Ðÿh”¤Ô”˜ÿ<ÿÿìþÿÌþœþÜþìþ<ÿLÿDä4T¤ä4@ÀÿÐÿðÿÀÿ<ÿ ÿÿH àÿ H$Äp4´ÿ|ÿ¸ÿ\ÿ¬þ˜ÿÐÿLÿ<ÿ|ÿôŒDŒŒÄ(0h0üþÌþÜþÿŒþ4þTþ¬þ|ÿÿ°ÿôDX@ä´hÄÌT@Øÿ(`HD¬TäÄDX,ÿÿÿÌþTþTþÜþŒþþTþ¬þìþlÿ x8 $ôH¤$$”@àÿ¨ÿp 8x0˜ÿHXðÿlÿ\ÿ˜ÿìþþÔýÔý´ýþLÿ(tôì 4ôôPlÿÀÿØÿÐÿ@”àÿÿ ÿÈÿ(°ÿ@4„ 8 ¸ÿÿ,ÿ,ÿìþŒþlÿhLÿüþhÄpH䬌äd,Äàÿ” ÿ,ÿŒþtþ¬þ¬þtþŒþ\ÿÐÿLÿøÿp`¤Tt´”ô¤øÿ@Àÿ,ÿ|ÿXàÿ ÿx¬ÌŒ4xèÿĸÿ¼þ¬þTþTþtþtþ\ÿlÿ ÿðÿðÿÐÿ\ÿ|ÿ@PHèÿ(XàÿÈÿ`ÄTä„èÿ¼þìþ,ÿ|ÿˆÿ,ÿØÿ´äÄxô”Øÿx ÿLÿˆÿìþœþ<ÿ@`pP`¤p¸ÿüþtþœþüþÌþ˜ÿ´T4äp@8h¤ˆÿüþLÿÿÜþ4þ ÿ°ÿ,ÿ,ÿÌDtt¤p¸ÿØÿ`Àÿ,ÿ,ÿ\ÿlÿÌþ\ÿ¸ÿ ¤@¤Äôd¬tä„´„øÿÿ\ÿ,ÿ4þœþlÿˆÿ°ÿ<ÿÿ¸ÿ|ÿ¨ÿøÿØÿ¼þlÿ˜ÿ¸ÿàÿÿ¸ÿ°ÿˆÿÐÿ(xàÿ8”x`ôt´”4´øÿlÿðÿhðÿ¸ÿàÿøÿ¨ÿ|ÿPp`´HøÿÿìþÜþLÿØÿ”´(˜ÿüþÌþ ÿlÿ ÿ\ÿ$D4dä40˜ÿ¸ÿÿÿ ÿ|ÿàÿÿ¼þÜþ<ÿÐÿÀÿlÿLÿ˜ÿðÿðÿ´dŒDLLÔ(P” ÿ ÿÿ ÿ\ÿ|ÿˆÿhÄ”„¤hèÿ ÿðÿÿ,ÿÿ ÿp0$Ìô”¸ÿÿÌþ¼þÀÿðÿ\ÿLÿÿ\ÿlÿ˜ÿ´¤ øÿ p„äðÿˆÿ`Lÿ,ÿ|ÿÿ,ÿ<ÿ`4ÔäDäHôì¬0ˆÿ`„Pøÿ\ÿ ÿØÿLÿìþÜþÈÿÿLÿlÿ\ÿlÿLÿ¸ÿPÿØÿ°ÿìþ ÿ°ÿpt¬ÄpÌìô4$ä˜ÿ<ÿ|ÿ\ÿØÿ|ÿ|ÿlÿÿ@Ðÿ¨ÿ@””Ì`´„Ðÿ,ÿ\ÿØÿ<ÿÔý´ýüþÐÿ˜ÿ¨ÿPä””T$„(\ÿÈÿ¸ÿÌþüþüþLÿ¬þLÿ„@¤Ää¬ÌlŒt´Ä¤ÿ¼þœþ4þÜþ¬þœþØÿpÿøÿ䄸ÿ  ÿœþlÿØÿøÿ˜ÿäÔ”´Ôèÿ˜ÿ0pP¨ÿ|ÿØÿàÿ,ÿ¼þ,ÿ\ÿ ÿ@ÔpDôôäÔpüþÿ„|ÿ\ÿ|ÿðÿÀÿ ÿLÿ˜ÿèÿÿ\ÿ|ÿØÿôT ˜ÿ`¨ÿÿlÿ¸ÿìþœþ|ÿðÿHxxÐÿ„”¤ÄÔŒdt$hìþTþtþTþ4þôýôý4þtþ\ÿàÿÄtìÌ lìÌÔ ÿtþ4þTþÔýtý´ýþœþLÿðÿätD$¬¬L´HèÿtþÔýþÔýÔý”ýÜþÀÿ¸ÿøÿT,ÌtŒÌ„˜ÿ˜ÿ˜ÿ°ÿÿ¨ÿ0˜ÿ<ÿ|ÿ¨ÿ ÿØÿ<ÿÿ¤ô p¨ÿÿÐÿXhÐÿ8ô@ÿ´ôèÿ ÿÿøÿlÿlÿPôHP”X8\ÿÜþtþÔýtþ<ÿlÿˆÿÿLÿ¤¤Èÿt¬Øÿ¸ÿä(¸ÿ ”¤HpÔ ÿ|ÿ@” Èÿ ¤¤´”èÿ¸ÿÀÿ ÿ|ÿ|ÿÌþüþLÿÿèÿ´”x´„”ôD¤|ÿˆÿÿ<ÿ¼þüþpøÿÐÿÄàÿØÿàÿüþ4þ¼þ¼þÌþÜþÌþ|ÿèÿX´4¬,ì p¤ä`””Ô”ðÿðÿ¨ÿ ÿ¼þ¼þœþœþtþÜþÈÿ°ÿ ÿøÿ0ìþ¼þ˜ÿÈÿØÿ8ä$ôt¬HèÿÐÿ°ÿ¨ÿ°ÿÀÿàÿàÿÀÿ8”ÔÔŒ40„tþÔýTþTþôýTþìþ¸ÿ8D¬ddD¬Œdt´àÿ,ÿ ÿÿ|ÿ¬þtþ<ÿLÿ ÿÈÿ@¸ÿÈÿèÿ|ÿ ÿ,ÿ,ÿˆÿøÿðÿpô ¸ÿ0¤LÿÈÿ4”Àÿ`X,ÿ ÿ°ÿXhÿ˜ÿpÄ ´ØÿLÿ|ÿÿ ÿ ÿàÿ¸ÿ¸ÿàÿH´PÄdTx`ÔXÐÿ ÿìþÀÿüþ4þÜþ ÿ,ÿÜþüþ|ÿLÿ|ÿ Ä´@„0`ä`@´äp@””lÿ|ÿäP ÿÀÿÀÿ( ÿÄPxXàÿ ÿ¬þ\ÿøÿÈÿlÿøÿ¤Ô¤”„„ðÿüþÌþˆÿˆÿˆÿ $pðÿ0HàÿàÿØÿ¤x0„hlÿ,ÿLÿ,ÿÿpÀÿ0ÿä”DŒxÐÿ`„àÿøÿ\ÿlÿàÿ,ÿlÿÈÿ|ÿ¨ÿ´P ÿØÿHÀÿÿÜþÈÿHh$ÌİÿôHÌþÿ|ÿP˜ÿüþ\ÿ¨ÿtþþÿ<ÿÿ4¬ôht¬„hD$”¸ÿ\ÿ„LÿìþLÿLÿ\ÿ4þTþlÿ ÿŒþ¸ÿttì¬ì¨ÿàÿÀÿ|ÿÿœþTþtþÌþÿ„dTt¬4|ÿÿ¼þTþTþþìþ\ÿüþ¨ÿ0Ä ¬ TŒ¬´Lÿ|ÿ8<ÿ,ÿøÿèÿÿüþ\ÿLÿ|ÿ°ÿÿlÿ`´hpÔP$Dðÿ ÿ\ÿÿ|ÿ¬þœþÀÿ ÿìþÿˆÿää$”lÿlÿlÿ<ÿˆÿÈÿØÿ ÿ¨ÿ`h¤´Ä´pÄh|ÿÀÿ˜ÿ<ÿ|ÿØÿèÿÀÿ¸ÿp0ÈÿÄX|ÿðÿèÿH˜ÿ°ÿ` ÿüþèÿèÿÀÿ˜ÿ@@HôD¤\ÿ,ÿ Èÿ¬þ¼þÐÿ„`@ ÿ x|ÿÿ˜ÿlÿ\ÿÿ ÿ¸ÿÿ”  $¤Œdx´Ää˜ÿ¼þlÿ„X,ÿÜþœþÜþìþ¼þ\ÿ°ÿlÿ¸ÿØÿ„@@<ÿ\ÿìþ¼þ,ÿˆÿ$D4¬  Ä8àÿ\ÿüþÿÜþtþÜþLÿ\ÿlÿÐÿøÿ(8”hXH´pÐÿ¤ôøÿ¬þìþ¨ÿÿüþÌþ¸ÿ´àÿ4DÄÐÿ˜ÿlÿüþ¬þtþÜþ¨ÿðÿ„ÔD4DÄhX( Hxÿÿ°ÿ|ÿlÿèÿ4´„¤@|ÿÐÿ8øÿ¸ÿ˜ÿ¼þ¼þŒþôý4þtþœþÌþlÿhô¤4¬D´DŒ4pÐÿ@P\ÿTþ|ÿ(|ÿ,ÿÄ@@„4D|ÿ ÿ˜ÿÌþ ÿ\ÿÿ¤XøÿŒôPÀÿ¨ÿ ÿ<ÿPÜþþ¼þ\ÿlÿÐÿÄŒTÄ$4¤Àÿ\ÿ\ÿœþtþÿ ÿ,ÿ\ÿ˜ÿèÿ`h8XHðÿ ÄôÔÌDX8ðÿ,ÿ<ÿ ÿLÿÌþüþüþìþ¬þtþ¨ÿÔäd ¬¤Œ°ÿŒþ¼þŒþ4þþtþtþ¼þxXtlŒÌŒŒ¤lÿtþ¼þüþTþ4þ ÿ˜ÿ0Ätì$Pèÿ°ÿlÿ\ÿ|ÿ|ÿˆÿÐÿ xPH@`4ŒÔTä¤Èÿ,ÿtþ4þŒþ¬þ¬þtþœþÈÿðÿèÿ`$dÄ0øÿÐÿ˜ÿ|ÿøÿ4”Ä”ÄôÔtäÀÿ|ÿ ÿTþ<ÿÐÿìþtþLÿèÿÿàÿ4ôHT ŒTp|ÿ ÿtþ´ý´ýtþtþÜþlÿX4¬ ì¬ÌÌŒÄèÿ ÿÿ¼þtþ¬þ¬þÜþlÿ°ÿàÿlÿ¨ÿÄ4ôhÄX|ÿÌþTþ¬þÜþ ÿ¬þÿ„`ŒìŒì  ˜ÿ¨ÿøÿ|ÿÿàÿ ÿˆÿˆÿ¬þLÿ¨ÿˆÿèÿðÿäTäô$` ´´P„øÿ<ÿtþ¬þ ÿ¼þÌþ<ÿ<ÿ¸ÿ¸ÿˆÿ¸ÿÿØÿ`@Xøÿ°ÿ@èÿàÿx$äxä¤HXp8ðÿpÔô(ÐÿÿÌþÜþlÿØÿÀÿ¨ÿ˜ÿ|ÿ(pT$äÄX¨ÿ\ÿ|ÿ\ÿ\ÿLÿLÿˆÿTþôýŒþtþœþ¸ÿ”äD$x„´0@0Øÿÿüþ|ÿLÿ ÿÐÿ„4P¤Dd„èÿ(¨ÿ,ÿTþtþ\ÿŒþ´ýœþ˜ÿ¸ÿÐÿ@@`ÄtdäÄP\ÿìþÜþ,ÿ”ôôÔ¤ôŒ„ÄTx,ÿtþÜþtþôýœþLÿ,ÿLÿØÿ„¤X(`@8ô48lÿ\ÿLÿÜþ¼þÿÿüþÿ°ÿ„äxx4tÔxh´(´¤H”¤„8èÿ@àÿ ÿüþÿüþÜþìþ<ÿˆÿ,ÿèÿô„ðÿàÿ8èÿh@|ÿ|ÿ(øÿÈÿpÄÄT4TÔ øÿ ÿœþŒþ4þÌþ˜ÿ ÿLÿ´´8T@lÿèÿÀÿ,ÿüþ,ÿ¸ÿ”pXÄ”´$$äHÈÿ ÿ,ÿ<ÿ<ÿìþ¬þ ÿP¤¨ÿ|ÿàÿ\ÿÿ|ÿx„8Px´´øÿX°ÿ\ÿ¨ÿ<ÿÈÿ0”hðÿÌô@(8P ÿ¸ÿ ÿtþôý”ý´ýÔýÔý ÿh(ôìŒT4Œ,TpPlÿÜþ¬þÜþ|ÿ\ÿüþPd4T$Ä„lÿLÿÈÿÈÿ\ÿ ÿ¬þtþìþ ÿÀÿ``xä¤pÐÿ,ÿ\ÿ\ÿ˜ÿ,ÿtþLÿÐÿ|ÿ8ÌÌÔô$àÿ ÿÐÿ°ÿ¼þ¼þ ÿÀÿØÿlÿàÿÄ4DŒ´¨ÿ@<ÿüþÐÿ ÈÿÿLÿlÿÌþìþ°ÿ(ÀÿÀÿx¤X`ŒPlÿüþ¨ÿlÿàÿ0¨ÿ|ÿ°ÿˆÿˆÿàÿH”„0„„X„¤ä$øÿ¤lÿ,ÿXh¤pèÿ,ÿ|ÿüþ,ÿ¸ÿÀÿàÿ¨ÿ8Ôä´àÿlÿÈÿ|ÿüþLÿÐÿÐÿ¸ÿ8´´`ðÿÿLÿ(”`hŒ $høÿ°ÿˆÿÌþ4þÜþÌþŒþÌþØÿ@ÿøÿ$D$Ä ÿ°ÿ ÿlÿÀÿ°ÿ|ÿÀÿHÔ4ÄxôôÐÿ ÿ0øÿˆÿ<ÿÀÿøÿ|ÿlÿÿˆÿ ÿ ÿpøÿ°ÿØÿÀÿüþ¬þÜþ<ÿlÿp4X¤ÔÔÄpÔTÄ  ÿÜþœþ,ÿlÿLÿüþüþlÿ|ÿ ÿ@ôP`$4ô¤p„X¸ÿÿÿtþœþlÿ|ÿ˜ÿ8”„Ä„˜ÿÐÿðÿ(8àÿhpÀÿ´ˆÿÿ”èÿLÿðÿ„àÿðÿ„hlÿ ÿ„@àÿh$ìtd”ˆÿlÿ˜ÿ,ÿ<ÿ\ÿ\ÿÿüþlÿèÿH°ÿŒtô”PÐÿ\ÿØÿ@,ÿ ÿlÿ,ÿ°ÿ¨ÿÐÿ0´TĘÿ˜ÿÐÿLÿ<ÿÈÿP”` ÿøÿPx`xÔ$ÔpŒôàÿ(@P ÈÿlÿÜþ\ÿÿ|ÿ ÿ@„H„`X´àÿèÿàÿ¸ÿ,ÿ¬þtþüþüþLÿ˜ÿ0x¤ÔÄ`Øÿh0lÿ”hØÿ|ÿ(Äh”x@pÜþŒþLÿÿÌþLÿX8¨ÿÐÿÔ¬$htÔÄX˜ÿÿ¬þŒþ ÿ ÿLÿ@Èÿ|ÿ@Häx|ÿ\ÿÿÿÌþŒþ¼þ¬þœþÌþ°ÿ””ôÌŒ$„ôtÄp´¤\ÿtþ,ÿ(|ÿÿp”ÔÄ ´Ô¤¤8lÿ<ÿÿÿüþÜþ\ÿÐÿÀÿ0äp¤Ä¤´tĨÿ8Øÿœþìþèÿ¸ÿ,ÿ,ÿ ÿ<ÿìþ ÿlÿ¸ÿ ˜ÿ¸ÿxðÿ´ô$´Äô@˜ÿØÿøÿèÿøÿ´t$¤0èÿèÿ˜ÿ@0¸ÿ,ÿÌþðÿ˜ÿtþ¼þüþ\ÿìþtþÐÿðÿ ÿ<ÿðÿH„”̬x h¤Äx¤$Ô`˜ÿlÿ\ÿˆÿˆÿ˜ÿèÿ˜ÿÈÿ¤h°ÿ<ÿ,ÿ|ÿ|ÿÜþÿÐÿ|ÿlÿðÿp¤8Ä8 ÿÿLÿŒþüþ ÿHôÈÿ¨ÿÐÿh4d$Äôô8`ØÿlÿÿLÿ¬þþþŒþÜþ ÿ ÿ´ddä$¬ìÌT´ÈÿLÿìþŒþ´ýôýÌþŒþœþ\ÿ”´äŒ$”´´ðÿÿÜþ ÿÿÌþüþ(„8”DŒÌŒ$Ô ,ÿ|ÿüþÔýÌþÐÿøÿ„((°ÿ,ÿ°ÿ|ÿüþ(¸ÿ0 lÿ°ÿ¤ôhPäÄ008P8„Øÿˆÿ|ÿLÿ\ÿlÿ@4D ,¤0$„ ÿÿÄ|ÿtþtþôýtýtýÔýœþÀÿ”0TÌĬ,ŒDŒ ¤Tþ¼þx,ÿœþ\ÿXdìþØÿüþtýÿøÿ|ÿ DD„Ä´4Œ`„Ô|ÿ4þþÔýôý¬þ,ÿ¬¬$0ôÿ,ÿ”ÔýôütþŒþ4þP DŒ ¬Äô¬lŒ¤¤°ÿþtþ<ÿœþtþTþôýìþØÿ,ÿÿ D´äDÄ ÿÌþþôüTýìþ¼þTþüþ(,ÌÔLlÐÿ°ÿÔ\ÿ4þ”ýüþlÿTþ´ýÌ$,ÿ„\¼þ(ŒœþäûPdTýÌþ,ÿÜþàÿD °ÿ,\l(ÌÔ$üìþøÿ$üdütþ hTýôü¬lÿ”ü,ìTþÜì4þDä4þøÿlÿ,ÿ°ÿ4þ,ÿlÿ´ý ,ÿ°ÿ Œ¬þØÿ ÿ¼þ\ÿœþTýÜþ<ÿ4þØÿŒ ”œÌ´ý,̘ÿˆÿôý,ÿ¬týdüTŒþôüìLtþàÿŒL\ÿÈÿˆÿ¤´p ÔŒþþtýôd”<ÿ ÿLÿÜþäû¤ûÜþ”¬þàÿÌ <ÿ°ÿ  ôÿܸÿÔýŒtTý”üÿ¤tý´ý8ðÿ°ÿ˜ÿtþÿ8Ôì\LÜl,ÿÔý”üdûdü4þ¤ûLÿŒ„ D”œ@œþ þÿTþdü ÿ쬬þ4þ¬œŒþœ4”ü”ŒtþtýÌìL \¬”ý„ŒÔýtý”ýÔýüþÔüdü<ÿœþTýŒþþ´ý ÿlÿlÿàÿ˜ÿhXìÜì4¼þ¤ûdûÌTŒÜÜÜœl¬œ,ìþÐÿôý$üTý$üdùäûdûÄ÷DøDöÄõDõDòDóDôDñÄôÄöÄ÷ ÿxL¼¼ ¼üüü|$|*|,|"|"ü¼Ô¤ùÄðèãáçæãäèä„߄ۄ݄݄ßâèêëìíÄñ<|I|]|u|}|}|q|Iüî„ׄ²„®„¶„Á„ÙÄö\¼ üüdûìå„ׄDŽ˄ÙäDóÄðdú¼þÄôìîç„Ý„Ý,ÿ|4|>|U|}|}|q|U|2ü섾„ª„¶„¾„Éçä|&|.üüüäø„Ý„Û„Ù„Ù„Ó„Ë„Û„Ù„É„Ñç„Û„Óç< |(|E|m|}|}|]|U|,¤û„Å„²„²„ńÄÛ< |,|2|4|>|"Lä„Õ„É„¾„¾„Ñêîðüþ„Ùá„Ý„º„ºlÿ|<|u|}|i|}|}|IÄð„Ç„¶„Š„†„Є׼ü|.|i|Y|&Läø„Ù„¶„ž„¶„Û„Ýá ÿü|(üÄóDò脾„¶< |e|]|8|}|}|i< „Ñ„Û„É„š„‚„Ç<ÿüü|E|M|><íè„Ó„²„ª„ф߄Ýå¼ ¼ \$û$ù í<|}|Yü|]|M|E$û„Ï„ºÄ÷„É„¢ç< |$ü|$ü|&dù„фׄۄτɄÝDøŒ„ՄфDŽ̈́×ìü|q|}|e|u|q|A¨ÿ„¾„ž„ª„º„¢„Ó¼|:|E|>|.|:|"„߄DŽ̈́Մׄӄ۴ý<DñîDóDóDôÄò|ÿ|:|a|.|6|E|8| Dö„Õ„×î„ÄÓã,üü¤ûÔý¼ Äòä„Ùãéî„Ù„ÛÄð$ù„Ï„º„×ç|E|}|Y|Q|}|y|]<„¾„®„Ù„®„’„²âü|4| ü|4|6üæ„É„Ïå„Û„Ó„×êÄõdûDñïD÷\ìD÷ü|$|*|<|.ü|0|0<üäúëÄóÿäãëêôü$úDøÄõ\¼\D÷ïé„߄߄لՄ݄ÝáÄó¼ |:ü|Y|:|(|m|.|<< ü„Ýüâ„ׄфф߄Ùð„ÝDóþü¤û< äüþ¤øÄó„ۄ߄ՄDŽ̈́Ûüü|$|I|&|e|i|M|8|4ü¼ ü„ф̈́Á„Ï„Á„Ó„Ç„ÙÄô<¼¼ üüülÄò„ۄ߄݄Á„¾„Åê|&¼|I|&|<|}|Q|U|*|.Äô|,å„Ó„¾„¾„DŽτ݄ÇëLÿü< ü¼üü å„Ûâ„ՄńńÃï|(¼ |M| |<|}|U|]|(|*Äô|,ã„Ñ„º„º„Ʉӄ݄Ñë\|$üü¼ ¼< œ„݄Մ߄фÁ„Å„¶„ß|(¼|2|>|*|}|m|Y|8|,ül„Å„Á„®„ńɄׄÅêÄõü|$ü|"üü<tþç„لфD޾„¶„º„Û¼ ü|(|E|A|m|}|Y|Q|,|"¼ ¼ „Ï„¾„¶„²„Ä˄DŽÑÄ÷4ý|,üü|&üü<Äñ„×â„É„Á„º„ª„¶æüü|8|M|A|y|}|Y|M|0üÜœ„Ñ„²„®„²„¾„DŽӄÍé< ü|(|$ü| üü”üê„Õ„Õ„Å„¾„¶„¦„ºí¼ |"|6|Q|Q|y|}|]|]|4|$¼ „Ñ„¦„¦„¦„¶„¾„É„Íç¼ ü|&|.|"|,|"ü¼ Dñä„ׄ˄Ķ„ª„¦„Áæ¼|0|(|]|Y|u|}|]|a|2|.< < „Ý„®„®„ª„®„²„º„Å„ÝÄôüü|$|0|,|*|.üÄöÄöä„фτ¾„®„²„ª„¦„Ç< |>|.|]|}|}|}|}|e|8|$\„ß„º„‚„†„Ž„ª„²„Å„Ïü|Q|M|Q|U|4|Q|"ç„Õ„®„¦„¦„¢„Ž„¦„Á„˄ׄфÙ| |q|}|}|m|}|m|u|a< „š„–„º„†„Ž„‚„–ã|(|,|,|,|Y|e|e|Iï„ÝDó„Ý„º„†„Š„ºêDö„ÛDñü|.üï„Á„²„²„Ãé|A|}|u|}|}|}|}|aü„¶„º„¦„‚„‚„‚„²íüü|*|A|]|M|I|"æè턲„š„¦„º„ßäû$ùÄò|"|&¼ é„Å„²„¦„º„Í„Ù|$|}|}|}|}|}|i|Yü„‚„‚„¢„‚„‚„‚„¾|0|q|e|E|Q|q|A< „Ë„¶„º„Á„Ç„¢„Éôý|*|,üüü| Äñ„®„’„Ž„ž„®„Å„Óå|(|}|}|}|}|}|m|Yü„‚„‚„‚„‚„‚„Š„Ù|M|}|}|}|Q|A|2„ׄ’„‚„–„º„ÉäÄñ|2|Y|U|Iü¤è„Õ„®„ބބ–„²„Á„Ñ„Ùç¼ |I|i|}|}|}|}|}|]|0„Ë„‚„‚„‚„¦„¶„®¤û|*|I|q|AüÄö<„Õ„²„ª„ªDò|,|.ü|6|E|A|*ð„DŽ˄݄¾„ª„¦„¶„˄ׄلׄßâæäø|2|Y|}|}|}|}|u|a|4„Ó„‚„‚„‚„Š„ž„–ç|$|e|}|Q|A|*|2Äô„¾„–„’„×éèïü|>|E|8¼DñD÷ï„Ó„ª„ž„¢„¶„¾„ÄÓäDóíëü|Y|}|}|}|}|}|i|Y|(„º„‚„‚„‚„Єބ¢äú|*|q|u|Q|6|(ü„Û„¶„ЄЄÁ$ùÄôDõü|A|Q|<üéëí„Ó„®„ž„ª„¾„Ó„Ñ„Ùéxœìç¼ |a|}|}|}|}|}|a|Q| „ª„‚„‚„‚„Š„‚„¦è|6|a|m|I|(|,ü섲„’„’„®Dñ¼ < ü|<|Q|M|&Dø„Ùá„Ý„Á„ª„¢„¶„˄ۄßé8¼ ôü„ßáü|]|}|}|}|}|}|]|Mü„ª„‚„‚„‚„‚„‚„–ä|,|U|i|I|Q|A|.¼„Å„ª„Ž„¦„¾ãäûX|6|E|U|>üLéí„Å„²„ž„š„¶„º„Í„ÕDöü< é< |]|}|}|}|}|q|]|]|,„ׄ‚„‚„–„–„š„†„–¤û|<|q|E|0|8|*|E¼ „Ñ„š„¢„É„Óäøæéü|0|Mü\î$ùl„߄ń¦„¶„Ë„Ùá„×ëD÷$üîêü|Y|}|}|}|}|}|a|M|,„Õ„‚„‚„‚„‚„–„–„¦ê|,|i|]|U|A|*|2ü脪„–„¢„²ÄðD÷Äñ< | |E|>|.\Äð$ùéã„Á„ª„®„¾„Ù„ÙâáçDöÄô< |A|y|}|}|}|}|q|U|A¼ „–„‚„‚„‚„Š„’„š„Å´ü|<|U|Y|Q|8|6|&\„ׄ®„¢„¢„Çäëtýü|<|E|E|.üìDòæ„É„²„¢„¢„²„Á„Ùâî$ü \¼|:|e|}|}|}|}|}|]|I|"„Ï„‚„‚„‚„†„–„’„ª„Ï|>|Q|I|*üüüÄó„Ħ„š„²ç| |&¼ ü|*|E|A|$Dø„Ó„Ù„Õ„Å„¦„’„¢„ºçDöäøÄõDô¼ |6|m|}|}|}|}|}|a|I|(„Õ„Š„‚„‚„‚„š„š„ª„ÇÄö|*|A|M|<|0|*ü¼„Ù„¾„ª„¦„º„Ïdû¼ |&|>|A|M|8|(,â„Ó„¾„¾„®„®„²„¾„ßíþ¤ù¤úD< |A|i|}|}|}|}|q|Y|6\„Õ„–„‚„‚„Ž„ž„š„®„¾íü|:|M|:|4|(|"üì„Ï„®„®„¾„Ý´ý<ü|,|<|A|6üÄ÷ã„ׄӄ̈́Á„º„¶„Å„ÛçðìîDöü|Q|}|}|}|}|}|i|I| Äò„¶„Š„‚„‚„’„ž„ª„¾„×H|"|A|A|4|&üüôýé„Ï„º„º„Ëð¼ üü|(|8|6|0ü,ÿê„݄لτń¾„¶„º„Ë„ÝêííDôü|M|}|}|}|}|}|a|M|"¤ú„Ã„š„‚„‚„’„š„®„º„ÓDõü|:|A|<|,üüDø„߄DŽº„¾„ݤúüü|$|*|0|6|,ü¬þç„لτ˄¾„¶„®„¶„Ë„ÙéíÄôü|8|e|}|}|}|}|i|M|.üî„Á„–„‚„†„–„ª„¾„Ë„ÙDóü|8|E|>|0ü<lDøâ„É„º„¾„ÕÄó<ü|"|&|2|2|0| ¼ Äð„݄ՄɄĺ„¶„¶„¾„Ñáï”üü|2|U|}|}|}|}|e|E|,üÄö„Ë„ž„‚„‚„Ž„¢„º„Ï„ßï< |&|<|A|:|&¼Ôdùï„߄фɄÍäŒü|$|$|$|$|&|"üŒê„ل̈́˄ɄńÄÄ˄×áð<|"|A|i|}|}|}|u|Y|8üç„Á„ž„Ž„Ž„š„ª„Ã„ÕãD÷<|&|8|A|:|&ü\D÷è„݄ׄՄÛë<ÿüü|"|"| | ü<LDóâ„Մττф̈́˄˄˄Ñãüþü|A|m|}|}|}|y|a|A|$L„Ý„¶„š„Š„†„Ž„¢„¶„Ëáôüü|.|>|E|A|2|"üèÿïä„݄ׄلßêÔü¼üüüüüüüÜÄò„߄фɄɄɄфӄՄՄÕâøÿ|(|Y|}|}|}|y|i|M|>|$´„Ù„®„’„‚„†„š„ª„Á„Ïä$ûü|2|E|I|A|0ü¼ ¨ÿÄòìâ„لׄÛîlüüüü¼ ¼ <ü<tþë„ՄɄń˄Մׄلل×çÜ|2|e|}|}|}|i|Q|<|2üh„ׄ®„’„Š„’„¢„¶„ńфßï¼|$|:|I|E|4ü< œ\ÿŒþÄöÄðçáèÄô¼üüœlÿtýœldùé„ۄфՄلßäá„Û„ßDøü|M|m|}|}|i|Q|<|0|"üÄó„Ï„ª„’„Ž„–„ª„¾„Ï„ÝæÄ÷¼ |"|8|E|A|.ü<\ŒŒþ¤ûÄòìéíD÷4¼ ¼ < þ´üTþܬäûî„߄ՄӄÙâéëççDò< |4|U|q|u|i|Q|:|2|$ü\ê„Ç„ª„š„–„¢„¶„DŽՄÝéDö< |"|4|>|:|.|"ü< \LÌþÄ÷ÄñðïÄó¤ø´ü4ýdúÄ÷ÄôDõÄ÷$üdüD÷ÄñìçæéìëéíÄ÷ü|.|E|]|]|Y|M|>|2|$ü\Äò„Ù„Á„®„¦„ª„²„¾„˄ӄÝé¤ú<|"|2|:|:|0|$üü¼ œ@Ä÷ÄòðîïîðÄñDôDöÄ÷$û¤ûþÔü¤ùDöÄðîìêéæåéDõ< |$|>|Q|]|]|U|I|A|4|(üdù„Û„¾„ª„ž„ž„¢„®„¾„É„ÙêTýü|"|2|:|<|6|.|$üü< L$úDñëééëîDòÄõ$úôýŒœD¤úÄóìèæäã„ß„ÝáëTýü|6|Q|a|e|a|Y|M|>|.üÐÿä„É„²„¢„ž„¢„ª„¶„Äфßð\ü|*|4|8|6|0|*|"üü< |ÿÄ÷ÄñììÄðÄõDøDøÄ÷DöDö$ù$û$ü¤úÄ÷ÄñíêêíÄðDõDöÄðíÄòœü|4|I|U|Q|M|A|:|2|(üŒç„Ë„¶„®„ª„®„¶„¾„Ä̈́Ýîœü|*|2|4|2|,|*|&|"ü< 4þïéèìÄòDôÄòîìîDóþ< ìþDøDòDñDòÄôÄòîéäåëdúü|(|<|I|M|M|I|E|A|4|"¼ë„Ó„¾„¶„®„®„ª„®„¶„ÄÙÄð<ü|(|4|8|<|>|8|.| < äúíå„ß„ßáãêÄô\ÿÜ<¼ < Ü\ÜÔ$ûDôîêêíîîíêçídû¼|(|:|I|M|I|I|E|>|,ü¤û„߄̈́Á„º„¶„®„²„¶„Å„×íP<ü|&|0|8|8|4|(ü<¬Døìâ„ׄՄÝíŒþœÜ\< üü< ÐÿD÷Äô¤øDõÄòìèèíÄõÄôðíî¤ø¼|"|6|:|<|>|I|M|A|4ü¬þè„݄ф¾„²„ª„®„º„É„ÝéÄôœü|*|2|6|2|*|$üüœÄöé„߄݄݄ßãíýüüüüüüü<ÌDøDóîêäââãèëììïÄõäû\ü|0|>|A|I|M|M|E|8|"\Dò„߄ф¾„®„ª„®„¶„ÄÑâÄò\ü|&|.|2|4|0|*üü,Dõëâ„ۄللßé$ú< | |&|*|(|&ü¼ \Ä÷ëã„߄لՄÝâæëÄòÄ÷ÄöäùÜþÄ,ü|0|4|4|:|E|A|6|,ü< D÷è„ׄɄľ„¾„Ä̈́ӄÛïìüü|"|(|(|&üüü<¤ûÄñëæäâæÄðtþ,¼ü| üüüü< L¤øÄñíê„߄ۄßäääêîÄòÄöäú¼ü|0|6|8|A|I|E|8|,üüÌþê„ׄ̈́Ʉ¾„º„¾„DŽфÛçÄôÜüüü|$|(|&| üü¼ äøðëëÄðÄðÄñdù°ÿœ¼¼<< œTý¤ûD÷DóDñÄñDñDòÄôÄö$ù$ü¨ÿ,¼< üüüüüüüüü¼ ¼ \ÌþDøDóðíêèçéêìíðÄõ¤ù$üýœþ¤LìÜÜœ¼<< ¼ < < ¼ < <¼\Œ\ÿÔýdúdùdùDøD÷DöDöÄõÄöDø$ùäúôý`,LÜÜ\<¼<¼¼¼<< < <<¼Ül4þdüäúDøDõDôDôDôÄòDòÄòÄóÄôÄö¤ùÔü\ÿ ¼¼< ¼ ¼\œÌh4þý$üdü$üdû¤û¤û”üôü4ý´ýTþÈÿDL\< < ¼ < < < ¼ < ¼ ¼\œ$ÿTþ$ü$úÄ÷ÄõDóÄðððððÄñDôDõÄöDø$ú´üTþx œ<< < ¼ ¼üü¼¼ ¼ ¼œôü¤ùÄ÷ÄõDôÄóÄôÄõÄö¤ø$ú$ütý<ÿxd,Ì\Üœ¼< ¼ ¼ < < <\ÜœìLô˜ÿtþdü¤úäøDøD÷D÷D÷ÄöÄ÷Ä÷¤ø¤ù$ú$û¤û$üýý4ý”ýŒþ,ÿ¬ Ü\Üœ\\ÌŒL4P8tìL\ܼ\\œœlL$ÐÿìþÔýôü¤û¤ù¤øDøÄ÷DöÄõÄõÄõÄõÄõÄö¤øäùdûtý¨ÿŒÜ\< ¼ ¼ ¼ ¼ ¼ < Œÿdüdúdù$ùäø¤øäùäûôý\ÿäL,\Üœ\œ  ¬$äÌþTþTþÔý4ýÔüôüTýôüÔüý4ýÔüdüÔüôüTý4ýý”ýôüTýÌþüþ,ÿ¸ÿLÌlÜ\œœ\œLl,L$àÿüþTþtýtý´ýôýþôýìþ ÿĬ ,Œ¬Tèÿ ÿôýtþ¼ üxÄòÄõDòDòïDñDö$ûäø$ú̼¼<¼<< ¼ œœ\lÄÌD@ Ðÿ\ÿtþ¬þ,ÿ\ÿ°ÿ ¤ÿ¬þttìþdüdú$û$ûÄ÷ÄõDøäû¤ú”ü$ÜÜœœLT Pðÿ¤ôˆÿpœ\¬Ü\\Ì”,Ðÿ$ûdü¼þdû´üÔüäúŒþÿdú$ù$üìþlÿÔì4þ4ý˜ÿ¬<ÿ¤ùTýd´üTý8ìþÌÿtþŒ\¬ðÿ¼ <¼œÜœ\Àÿ4ýTýTýŒlÿ´ýdúäúœþÔýDøÄõdûôü¤øÄõäø¤úäùÄ÷Äö¤útý$ù¤øœþLœÌL<¼\ܼ¼< œœ< ¼ \ܼ< < < ¼ ¼ ¼ < \ÔdûÄòïëêçæèìïðÄòÄ÷¤ú¤ù$üdü¤û¤ùÄôDñDñÄñÄðÄô|"|*|*|>|Q|U|E|>|2|(üï„Û„Õ„Å„®„®„²„¾„Ä̈́ߴýüü|"|<|A|2|(|(ü¼Ä÷éçä„Մτۄ߄ÙáíDñÄóÄòîÄôŒþ”ý@|(|:|2|E|Y|]|Q|I|4|*üÄò„ׄфńª„ª„®„º„Á„Ñ„ÝDøü| | |6|E|2|,|&|"¼Äöå„߄ׄDŽDŽфلфÝéDñðÄñDóp¼ < |0|A|A|I|]|]|M|E|2|"¼ ð„Ó„Í„Á„ª„®„¶„¾„Å„Ûêÿü|$|0|,|<|2|,| ü$ðê„ׄՄ˄τ˄لՄÛèîðïD÷dü< ü|2|:|A|Q|Y|]|M|I|2|&¼Äñ„Û„Ï„¾„®„²„²„¾„ÄÛêô<|"|2|4|4|,|4|"üäûÄöë„لфτӄ̈́ՄÕãäìÄðDñÄðÄö¼ü|(|2|<|M|Y|Y|M|M|<|,üXé„Ù„Ç„¶„¶„²„º„¾„Ó„ßDñœü|"|*|,|0|8|$ü¼œê„ۄلׄфτфՄ߄ÝèDóÄöDñD÷\ü|"|,|:|M|U|Q|Q|M|E|*üœDô„Û„É„¾„¶„²„²„Á„Ë„Ùæ”ü¼ü|&|0|<|2|"üüdüëå„݄τɄɄ̈́ӄӄßïD÷dùœ< < ü|,|2|,|>|I|E|<|:|0|*üœäùÄð„߄̈́τɄńDŽӄÙäDó4¼ ü|(|"|&|"ü< pDóæ„߄ՄфτӄՄÕé4ýÜþ<¼ << ü|*|0ü|"|<|6|"|$|,| ü< ¬$üð„ßáã„Õ„Ó„ßæãïÔüŒ< ü¼ ¼ ü$û¤ûDôéëèääçéðdû”üŒ< << ¼ üüüüü| | üü| üüü¼ ¼Dõîìã„ÝáæèëÄõdûdúý\ÿdü”ü¤ù¤ø¤øÄôDóÄóDòDóD÷¤úTýÿ<ܼ¼ < < ¼ ¼ ¼ üü<üüüüüüü¼ \ÌTþDøÄóÄòDôîîðïíïDñïDòDñÄôÄõDõäø¤û$ûôüìœÜ\¼¼œ<œ¼¼œÜ¼ < ìœ\\L\œœœ¼ ¼ < \œÜÿ”ü¤ûD÷DóDñDñíêïÄðDòÄódùÔüdûdûlŒä\Ü,\œ\¬Ü<¼œ,Ü,,\L 쌜ÜT\œLÿtýÌœþôü¤ø$ûÔüdúD÷DôÄöÄ÷Ä÷D÷´ü¨ÿÄŒœ\\ÜœL¬´Œ $üdùœþ@ÿý¬Dœ¼þ¬þì°ÿÿÌüþÜ\\lìŒ\”üTþTþôý$ùDødü$ùäû¤ú”ýèÿL<ÿÜ\¼Ü¼\làÿ|ÿ,ÿÔü$ú”üäû¤ú”üdû´ýH4þìTýÀÿLìL˜ÿl4œÜœh¼þÌþÔüTý4ýdü”ü$üäú$üýdüdü¨ÿÜœ\¬¤œœ0Üþøÿìþdü$û$ûŒþ$ùÔüÌþh°ÿtýt88TþìŒàÿ´TþŒ Àÿ|ÿx¤œþÔýH”ýÜþ ÿþÄ œÜœ¬Œd¸ÿTýlœþ ÿ ÿýÔý˜ÿ°ÿìLlœþðÿäû¤ûèÿ$ü”ü˜ÿýtýôLÿLÿìtþhÜìdü”Ì´ý|ÿ,”ý<ÿ”Tþ˜ÿxÌ´Ld\$Œì\ÿ,äþl4<ÿ,ÿØÿ|ÿ¤ûÔ$ü”ý ÿdû,ÿ¤úäûdü´ý4þþÜì@T¬\äÜ ÐÿÜ0düþì¤û$¬´ýœ\düÿl”ý”üÌ\\t ÌÐÿdútý4$úÄ÷4þý`LäûÄäûDöŒ Àÿtý$üÔœŒ$ü\\äùþœÄ”üþüþtœ¤ú$ü< @Ä÷<,ÿœÔýܬlÿdüÜþôL¤ú$ ´üÌôý$ûÈÿÌ$úŒœ´ôýðÿþ$û”üôü¤úTþ¸ÿÈÿL\ìþ4ýÜÌìœ ôýÜœdúlÜ$û”ýlìþôìŒþÿäú$ùH¤úäûlÿ\ÿ$û¬¤ÜœHÿœàÿdûô4$üLÈÿðÿP\ÿ¬œ¬0tœLÿÔülŒþèÿì¬þ¤ûœþTýüþ´ýdú¤ûôýÌþ$üðÿ œlÜLœÌÿ¬þ”ýý¤Ìþý8\HDd”T ”Ô¬dútþ´þ$ûäú”üäûäû$údûÄ÷ÄöDöDõÄòDôäø¤ùTý\¼ üüü| |$|$üüü¼¤ûÄôïèá„ß„ßâäëÄòäùôýŒ\¼Ü pdüÄõíêèæ„Ý„ßíDñDõ¼ |&|.|4|A|M|Q|I|8|,|&üÄõä„݄τÁ„º„¾„ń̈́ӄßDõܼ ü|$|(|&|(|&üü< þDôìä„Ýã„ß„ÝæíìïÄôDôDõDñídú\üü|$|4|>|I|A|A|<|.ü< ¤úè„ۄɄľ„ÄÄ˄׿Äôô<ü|&|"|"|&|(ü¼ < \äúêæåæ„Ý„ÝêðìíÄõD÷ÄõïêçÄöÌüü|$|:|E|M|A|E|>|4ü< ¤ùé„Ù„Å„Á„¾„ÄÁ„Ë„×èÄó¬<ü|$|"|&|$|"üüÜ ŒDøëëíååçëïÄòíðDôîçããìÄð¤ûü|(|2|A|U|Y|U|Q|A|6|$¼ìá„Ï„¾„²„²„²„º„Å„ÍäDø¼ ü|(|*|(|&| ü<týäùÄõÄ÷ïìDóDõÄñÄóTý´ýT ÿ\ÿþdûðëêä„ÝáëîÄö< |&|4|A|I|U|]|U|A|2|*üD÷„݄τ¾„¶„ª„¦„²„¾„Ç„Óê´ü< ü|$|*|2|.|*|&| ü<ÀÿD÷Ä÷DöïïÄö¤úD÷äøtýtþÿäûäøÄ÷DõìççæäæçìÄõ ÿ¼ü|(|:|E|I|M|Q|M|>|*ü< Äô„Û„É„¾„¶„®„®„²„¾„Ï„Ûíüü|(|.|2|2|*|"üüìÄ÷Äõ¤øðëðÄõÄ÷ÄõDöäú`dùDôDôÄ÷ÄóîëïÄóDóÄòäø¤””ý”ý<ü| |$|,|6|<|<|6|0|(ü¼ düðâ„Մ˄ńÄńɄτÙæðäú¼üüüüüüüü<ü< Lÿ4ýäúDôîëëðÄðïÄòäøDôDòÄóÄö$ùÄ÷$ú$ùàÿÜÜL\\ü|&|$|$|0|8|2|.|&üü¼ Døïê„ل̈́ɄɄDŽ̈́фÛíDôdû¼üüüüüüü<¼ < ìÌþ4ýÄöÄóD÷DòDòÄóDñÄóDøÄ÷Ä÷¤ú´ÿôÜܼ< ¼ < < < <<¼ üüL¼< ¼ ¼ Üܼ\dùäû$üÄóìîëììéïDöDöÄ÷þÄlœœœô¤údüýdùdû$úþ¤ ÿtýøÿœÜ< < ¼\Dœœœœ\œl¼\\¼ÜÜ\ôýäû¤øDøDöÄóÄöÄõDøäùD÷düÔý,ÿtþèÿøÿLôìþ\ÿtþ$ûÌþTþÿ\ÿL”ýäṳ̀´0  ÿt¤ùÔ¬LÌþœ,Œp<< ¤¼¤øŒþ ÿ¬øÿdùÄdùÔýDóôüDödûÄõ$üÔü̼þl¬ÜäûlŒþ\´ýìþTÌœüþÜÜŒLäûX´ýdúìþ4þ|ÿ”ýô<ÿܘÿTýT@ ÜL¸ÿ¸ÿdûþÜ”ý¬þÿl°ÿ¬4¬ ÿ$üôý¨ÿŒþäû,ÿ¤ú”ýtý”ý\ÿœ$üÄœLÌ ÿÜœŒ œ\¬´üüþäôü´ýðÿÔ˜ÿ$ùÐÿtýýTý¬ˆÿœtÀÿ”œþýôüŒdùœþtýŒ,ÿ”ý`T¬¬L¤ììÈÿ4þœ´Àÿ$û¬þŒ¸ÿ„¬œ,´ý\ÿlðÿHäûìþÔüdû”ü\ÿ¤úäû”ü˜ÿ줬¬4  Œ0$ôý, °ÿL”ýXdûÌÔýàÿ¬þllÿ\Ütþä,þìäûüþŒìþdäúlÿ|ÿðÿtþHX@\ýTŒ´ý8´ý$ûô”ýÔìþtþôý,ÿˆÿLÜ ÿÔ,Üþdü”lldú4þLÿÜôýTý44ÐÿtýìœÌdûìþŒthôüþlÿ@ôýìþÿdÈÿ\ÿ¬øÿpÌlŒ¤ùTþXtýtþŒþäû\ÿ4þ$4þ ÿDœtþô(¼þ,ÿtý¤ûl ÿ¬þÔlŒ,„ ÿÜìþTþdüäøÄö¼ ÜD÷Ä÷Tý< $û$ú< tþÜ$üdútþlÿìþ¤û¬þüþ¬´ Ü$ù< düœlDô¼Dö¼ $ùŒäûˆÿŒdûlôü¬ôýl씬Àÿ”ô¤¬„þÄ ÿ`$üŒþ Üþ´XD¬,ÿtþðÿ ÿ`$ü,ÿüþÈÿtþtþlÿ˜ÿtþ$xT¸ÿ´ÿˆÿÜþ”ýäûäû”üþÜþtþp 4d$Ì Ìœ,\< ÜÄôD÷´üDõDòDõDøäøTý¼< < <¼ÜÌlp$û4ý@Ì0ì\ ì4ä4ÔýtþôýLÿØÿôüTýÜþôüdü´ü$úäúäú”ýüþtþìþLÿýœþldúäûDøäøÄõ$úD÷äù4ýôýœÜÜœ¼¼ ¼< ¼ ¼ <œœLd,$ú”üÐÿüþäù´üŒ¼þTþ@œPÜL\Ì´,ÿôü¤ûÔ¤ø”ýLôý$útþ¼þ$ü$û”dúôü”tý˜ÿd¬þ\ÿtþÌdü´TlŒþTþLl,04dœP(ÿÿdûÿTþxdú4þlÿÌDHäû´ý¨ÿ$úhìl|ÿ\äûþ\̤ûtý\”ýTý\ÿ<ÿtýD´ý¸ÿlôý”ŒÄ´ýÌ$8(Èÿðÿäúlþüþdüˆÿ„dûxp Ä ˜ÿ”øÿÔüxˆÿ@Ôô,¬X, Ô¬´¤4,lh,lpÿl$üTý<ÿ˜ÿ$ûäû´ýdü4þ¨ÿ¤ûÜþdûdù¤ùäûÄ÷Äõ$ü¤øäùdü,ÿ<ÿ̼ < üüüüüüüü¼ ¼ìþdúDòðîëëííîDñDõÄödù4ý\ÿ¤Üœ , ´ü¤ûdùÄõDóDõÄõDòÄöôü¼< ¼ üü| |"|*|$üüü<ÜLÿDõìä„߄ۄلۄ݄ßâëDòÄö”ýÜ< ¼üüüüüü< Ü\„äûÄöDôDóDñÄðDñÄñÄðDòDóÄòDóÄôÄö\üŒü|&|"|&|,|4ü|&üṳ̈ûéç„ل߄ӄׄۄ݄ßãDñð$üþ¼ <üüüüüüüüÜLýDòíäå„Û„Û„Û„Ýáæ¤øŒü|(|0|4|A|E|8|8|0|*ü¼ \Döê„݄ل̈́ɄɄ̈́̈́̈́لßæìdù¬< üü|"| |&|*|(| | üü<¬¤ùïêâ„݄ׄׄׄׄׄÙåçíý<üü|2|8|<|A|I|E|8|8|*|"¼ ÌDöæ„ׄ̈́˄Á„Á„ÄDŽ˄τلÙæäø(¼ ü|*|4|8|6|<|A|0|$üü$ûê„߄Մ̈́Á„ÄÄÄÁ„ɄՄÛêÄ÷ü|>|A|I|e|}|m|Q|Y|Q|2\týï„Í„²„ª„®„¦„¦„®„Á„Õ„Ýìpüüü|,|2|*|"|&üü¼ <Äö¤ûDöÄðêïðêîìïèäâ„݄ۄ×áâêäû| |6|0|Q|m|q|]|]|a|A|&¼ üþ„ß„Á„²„ª„¦„–„¢„²„¾„DŽۤùü| |.|2|0|4|2|,|"| ü< œþ Äöåæéã„ßåèæãäçâ„ÝâèéìD÷<|*|8|8|U|i|]|U|U|Q|2ü¼ Äö„߄ĺ„®„¢„ž„¦„¶„º„Ç„ÝDò”ý¼ ü|(|.|2|8|8|.|(|.| < ¼ ¼Dõèìè„لل߄߄ׄÛãâ„ßâëéëÄ÷þÜü|8|>|A|]|i|a|Q|Q|I|*ü Äð„Ñ„¾„²„ª„¢„ž„ª„¶„¾„ËâÄótþü| |*|.|2|8|6|0|.|0üüü D÷ììã„݄݄ׄۄՄ݄߄݄ßäéèíÄ÷Œ ü|0|:|<|M|e|a|U|Q|M|8ü<4ýã„É„¾„²„¢„š„¢„®„²„¾„ÑåDñ¬ü|$|,|4|>|A|>|A|6|(|$ü¼ äûDñê„ۄՄӄӄττՄՄׄÛæèëDñÄ÷,œü|&|6|I|I|Y|i|]|U|M|E|(üüþç„Ñ„¶„®„¦„š„š„¦„²„º„Ë„ßÄóLü|&|0|6|:|>|:|0|,|*| ¼ < ¼ Dòíëä„لׄۄلׄՄ݄݄ÙâéèéÄóôýœ¼ü|6|E|M|U|m|m|Y|Y|I|4ü(ë„Ï„º„¦„¢„–„’„ž„ª„º„ÇáÄö¼ü|(|6|:|>|>|:|0|$üü¤ûœDôèííæâèéæãçéââèéäéÄñÄñ$ú\ü|,|.|A|i|Q|]|e|Y|M|0|*¼ð„Õ„Á„º„š„ž„š„¢„¦„²„Ñ„ÛÄõœü|,|2|A|>|<|2|,|$ü¼@äøèìÄóçêÄôÄ÷DóÄöäû$ùDõïïê„ß„ßãá„ÝçðÄñdüÜü|.|A|Q|]|a|q|a|U|A|0üð„߄IJ„ž„–„š„–„¦„²„Ï„ÝDô<ü|.|4|>|<|4|,|"üÜdüD÷Döïéäú$üDøôý< ¼ „l$äùìãâ„ׄττׄۄÝídû¸ÿœü|$|&|U|]|I|a|q|Y|A|8|$¼å„̈́IJ„–„š„¦„¢„ª„ÄÝì¤ûü|$|.|0|6|6|*üü¼ dûðîëìÄòdü¼üüüüü<äùè„߄Մ˄˄DŽτÕâðLÿ< <ü| ü| |,|4|I|<|<|U|I|.|"| Lç„ۄ˄IJ„®„¶„¾„Á„ÏëD÷þ< ü| | | üü¼ ÜÄdúDóïDôÄ÷ôü< < üüüüü¼ $üÄòë„߄݄لللßçï$úì< üü¼ ¼< ¼ ,<ü|,|,|(|>|E|8|$| ü\ÿë„ۄׄɄº„¾„ń̈́̈́Ûï¤ûÌ< üüüüü<œTþ¤ùdû¤øÄôdùL¼ üüüüüüœœþDòçè„݄݄ßæçìDöäùœ\¼ < < < Üœlì¼ üüü|$|(|(|&|"üü< LÿDôîä„ۄׄՄׄلÝãèíÄñD÷¤ûˆÿl< < < ¼ < < < < < < ¼ < ¼ < ¼ < <¼ < Ü Ôý¤øDôÄðíêçèèèèëîðDóÄö$ùdüd¼ ¼ü| |&|*|0|2|2|0|,|&üü¼4ýDñæ„ۄӄ̈́˄DŽDŽ̈́фׄßçïÄ÷Lÿ¼¼üüüü| üüüüüüüüü< <œÿÄöðëçâ„݄݄ۄۄßãèïDö$ü”< ¼ <üüüüüü| |"|&|&|(|&| üü¼ ÿDõìã„ۄӄτ̈́̈́фՄÙáèïD÷ìþ¼ üüüüüüüüüüüüü<¼ ¼H”üDôDñìçæãããäæéíDñÄõäùôüüþŒ\< <üüü|"|(|,|,|,|*|&| ü¼dúðç„݄Մτ̈́̈́τфׄÛäíÄôTý\¼ <üüüüüüüüüüü<¼ ¼ ¼¼ œÌ„$úDñíëèæäããåçêðDõdùôü œ< ¼ ¼ üüüü|$|(|*|,|*|&| üü\$ûÄðç„߄ׄӄффӄՄلßåëDòäøþ¼ < üüüüüüüüüüü¼¼ œ@Tþ”üDøÄóÄðïìììíïïÄñÄóÄòDôD÷DøDøDöD÷\ÿ< üüüü| |"üüüüüü< ì4þäøÄóíêèääáââäçêðDôäùtþœ¼¼ üüüüüüü¼< < Üœ¼œÌ $ûÄöDôÄòðïìïDóÄñÄðÄõ¤ùdú,ÿä˜ÿìœT´ìœœœ\< üüüü| |"üü<¼¤Ä÷ðíëçååçéëîðDóDõ¤øäúþPÌ,œ¼¼¼ ¼ ¼ ¼ ¼ ¼ ¼ < <<<  ÿ`´üdüÄõÄòÄôÄóD÷ÄóÄ÷”ýtþÿŒþÿ4þ”ýäøÄóÄðDòDñïÄòäù¨ÿœ<üü| |"|&|*|(|"üü< ÌäùÄòïíêçååæèéëíDñDôD÷$úôýlœ\¼ < ¼<üü<¼< ¼ ¼ ¼œTŒþ$údû´ýÄôDóäø4ýdûD÷dùdû¬èÿ$ú´ý\¼tþäúäû$úD÷ðìîÄñÄððDøÔý$\< ü|$|,|.|,|*|&üü<T$úDóîèèçåäåéêëëíÄðÄõÄ÷dû¬þì\< < <üüüüüü¼ ¼ < ÜÜ\ÿ$üÄöDôDòîïîÄñÄõäøœþ¬\ÜìLtþäúDøÄóÄðîííîDôdû ¼ ü|,|0|2|2|0|(ü¼4þDõìçææçèèëïDñÄððÄñÄóÄôÄõÄõÄ÷Týtœœ< üü¼ üüüüüüü< ÜÄ÷ÄöÄðêççéëïDñÄódùôüÔü´ýôý4þ´ü”üäúDøäú”ýTܼ| |(|,|.|0|0|(ü¼ ÜäûÄòèãá„ßá„ßáçîÄðÄñÄôäøäûTýdü¤ûtýÜ\ܼüüüüüüü¼ \ äûÄõíéåäãâæèîDôdùLÿ\¼ <ü<¼ < üüüüü|"|"| üüü< ldûÄõíèâ„݄ۄۄ݄ßåéìDòÄödûtý ¼ üüüüüü< < Ü\ÜTþ<ÿýdü$ùDöDõÄòD÷ÄòDõÄñDõ$ùôü¤û¼ ¼ ¼ ü< ü¼ ¼¼ ¼ << Ü\¸ÿœ°ÿ¤û¸ÿýÔý”ýDõäûDöäúDóDöÄöÄõ¤ûDö¤ùÄödäû¤û´ü¤û„þ¤ûtýÿLÄôDøÌ$ülÿL< l< \¼ ¼ ¼ < Ü< ì¼düLÌþÔý¤ûÄ÷œþDöþD÷¤ûäû4ý˜ÿdùLdüôüÜ$ùdü¼îüî<,Äöüð< `¬þ¬äD÷œð< DòˆÿlDöÜdùŒ¼Dô¼D÷ÌœÄóüDô¼œäøüÄõ,¼Døüìü”üdù¼ ëüÄö¬íüë¼ Dò´ÄôœÄò< düôýðüD÷œdû$ùüð<äøœþüÄðüî¼ äû ÿXDõ< Dó¼ í¼ Ôüäùœæ| ä| è¼üêü„Ýü$ú¤øüä|$äüðDöüâüä< ÔýDóü„×|$âü¤øÄô|&„Ó|6„ÑüÄõÄöü„×|,„Õ|0„×üTý$úü„Ñ|0„Ï|*„ß< ÿ¤øüáüâüð´ü\ð|"âüçüäùtlÄóüî<èüÄõ< Døÿ< $ü< Dö¼ $ú< Äõ¬þÿDøTÄô`Döüè| „Ý|*äü”ýÄó|$„Ñ|4„Å|4„Ñüæ¼äÄõüå| „Û|,„Ý|&äüîüÄð<ð< Äö,œÄòüå| „×|&áüÄò\´äû¼Dò¼ $úœ\Tþ¼ ÄõüÄñ<$ù¼ ÌD÷< Äô¼ $üÔý¤ùœDõ¼ ð< Dó¼ îüï< Dó¬Ä÷< î¼ Äð< ìüð¼ Äô¬í¼ DöLdúdù< ¤øÜþôýÜ Äñ< ê< ëœÄñÔü˜ÿ< dú¼ œÜ< \¼ ¼ ܼ´ý ÿÜtýd¬$ù¼DôDó< ì< ëüé<ÄòTþýDø$üý¤ùd¤øÔýtý¬þ”ý¸ÿäø<Äñ¼ Dñ< Dôôýüþ¼ DöüÄóüDö< øÿllÿtþtœþŒôý,Ôý\4ýÜ,ÿŒüþÜdüÈÿÌdûÄ÷œäûl ÿœÐÿ|ÿlÔü\$ülôýŒ4ýTäû¬düŒÌþì„,üþ¬týŒ¬þ¤ÿpÐÿH¬¸ÿdìÄlh,„¬Œhdx¤˜ÿ`8¤¤¤4Œ¬¬DtĨÿÔ8X@þ¨ÿ4ýÌþðÿ¨ÿ ÿÄ4þøÿTýÿtþþTþ4ýlÿ”ý ÿ”ý¨ÿœþ¼þ,ÿlÿ¤8pÌ´Ì„4Ä”<ÿH<ÿÿìþÿ@ÐÿTÌ  dÌ$¬tldŒ„ÿ°ÿtþ<ÿŒþ<ÿtþüþ ÿþtþŒþp($4Œ¬ìDhHLÿÿ<ÿÈÿ°ÿøÿèÿÀÿ|ÿÌþ¬þ ÿ¼þtþ¬þlÿˆÿøÿèÿ¤hÔ0`p¤äT¬T¬P ÿüþ4þôý´ýœþÿüþ,ÿ°ÿÀÿx8ÌlÌÌdÌÄÔ,ÿ¼þÐÿ4þìþ,ÿ,ÿlÿ<ÿ(HX`äP@@´TDøÿ ÿ\ÿœþŒþüþôý4þtþ4þœþþ ÿ0ÄP,LlØÿ$ ÿøÿTý¼þtþtþtþTþ<ÿÀÿxl$ŒTŒ„„Ìþ ÿÔýÌþìþTþ˜ÿôýÿTþXÈÿŒäŒÄÄä”`X(ô Àÿüþ<ÿàÿÜþÈÿœþälÿh„<ÿxÈÿðÿ,ÿÐÿÿÿìþ<ÿ\ÿèÿpdÄôˆÿ(ÿ\ÿ,ÿlÿ@,ÿàÿLÿèÿ¼þLÿÿˆÿÈÿ8xô ôðÿ´øÿ0Th <ÿh˜ÿøÿÿ ÿPØÿÀÿ  ÿP,ÿ(ðÿÀÿ8\ÿ”Èÿ`èÿÄ ÿüþTþ( ÿÈÿ„X` X@d¬DDÄPTþŒþTþþ´ý”ýœþÿØÿÐÿÔÔ¬4ÌT¤xÿÿTþÔýTþ4þ<ÿ\ÿ\ÿ¤ÌttT¬<üíäùüäüä¼D÷ÜþÄõ¼ Äô¼ ¤ø\ä¬LÌþTþÌ Dø¬dù<¤ùÿ$ü$úäøœÄ÷Üdü¬ ìLtþLÜ< Äö äú,$ûþäûtþ„œþÌÿTþ”ý,¤\Lÿ¬¼ \Äô< ¤ùÜD÷äùTýddüøÿœì´üìœ\$üÄöÄ÷Ìôl´üDø \œpœ¤ùÿ4þ\œlÿDõÄñ@< ¼ àÿÄôDöŒ< \0¤øäùÜþ<ÜtýPÔý<\Œ$ûDøŒ”ýdû$ûäúôý¤ûTýøÿäû$úD÷¤øäù4ýþ$ú¤øÄ÷0< üüüüüü| üü¼ dûDóíèã„߄݄ۄÝãçæåæèëðÄóÄõdúü|.|A|U|U|Q|I|:|4|"üüþå„Ï„¾„º„º„Á„Ë„Õäð¬ü| |(|&|"ü<dûïå„ۄՄττӄÛæðäúìü|$|<|M|a|e|U|A|*ü¼ $üï„݄τÄÁ„DŽфßêDòDö´ü´< < < ìþÄóè„݄ׄ̈́˄Óá´üü|:|Y|a|i|a|U|M|8|(< Äô„Ù„¾„®„¢„¦„®„¾„Ñå$ù¼ ü|*|2|6|0|$ü´ï„߄ՄτττфׄÛäî$ûü|0|I|Y|i|a|U|A|0üÜÄ÷å„ׄDŽÄÁ„Á„Ï„ÙêÄô\¼¼ ¼ <T$úDôéã„ۄׄՄՄÙî< |$|E|Y|e|a|Y|M|4|(ülï„Ù„Í„¶„®„®„¶„Å„ÙÄò\ü| |$|&| üü¼ 4þïã„Մ̈́Ʉ˄фÙäéDô< | |:|Q|e|m|e|Y|A|&<D÷ä„Մ˄ĺ„º„¾„Ç„Óädù¼ü| |&|$üüäúïä„݄ׄՄӄՄׄÛå$ûü|6|U|i|u|q|e|Q|.üþê„Ù„Ë„Á„¶„²„²„¶„Å„×îŒü| |&|&üü¼düÄñçâ„ۄللׄۄÛâèôýü|4|U|i|u|q|e|U|2ü4þë„ۄτDŽº„º„¶„º„Á„Ñç¤úü| |(|,|&ü¼ TýDòå„߄لׄׄׄللۄßÄóü|.|U|m|}|}|q|]|:| Ìé„ل̈́ńº„¶„²„²„¶„Ä×ïœü|(|0|.|$üÄõå„݄ׄׄׄׄلׄׄ×é< |$|Q|m|}|}|}|m|E|&œè„لɄńº„¶„²„®„²„¾„ÑæÈÿü|,|8|:|2|$<ôüê„݄ׄՄׄׄۄۄۄׄÕîœ|*|U|q|}|}|}|e|<üDô„݄ɄÁ„¾„¶„º„¶„²„¶„º„ÍáDü|0|A|E|>|*ü”ë„߄ׄׄل݄߄݄݄ՄфÙÄöü|>|i|}|}|}|}|U|.< ç„ӄńĺ„º„º„²„®„®„º„Ëå\|$|<|M|M|E|.üôîã„Û„Ý„ßá„߄ۄՄ̈́ɄËè¼|2|a|}|}|}|}|a|4üð„ۄ̈́ńÁ„¶„¶„ª„¦„¦„®„ÄÝ|"|>|U|U|M|>|$¼ Dõé„߄݄߄݄݄لՄ̈́DŽÄÉå¼|4|a|}|}|}|}|e|<üäùâ„фń¾„²„ª„¢„ž„¢„ª„Åâœ|*|E|Y|]|U|E|,üTýí„߄لׄӄτ˄˄ɄɄ˄̈́Õîü|8|a|}|}|}|}|i|Aüäú„߄̈́Á„º„®„¦„ž„š„ž„®„Çè¼ |2|M|a|e|]|I|0ü¤í„߄ӄ̈́ɄÄÁ„Á„ÄɄӄۄßáÄñü|0|Y|}|}|}|}|m|Eüý„݄τĺ„®„¦„ž„–„š„®„Éîü|:|Q|a|e|Y|I|2ü¼ Äôä„Ï„Á„¶„²„²„º„Ë„×çÄóÄ÷Ä÷íäDóü|8|i|}|}|}|u|Q| Tì„݄ׄτÄ®„ž„’„Ž„¢„Åìü|2|E|M|M|I|A|8|.üÜë„Ï„¶„®„®„º„Í„ÝëðÄòÄñDòDôÄñìêh|"|A|i|}|}|y|a|I|(ü\ð„߄ń®„’„†„Š„š„º„ßü|,|6|8|A|E|E|A|0üDö„Ù„Á„¶„º„Á„Í„ÙáæêDõ¤ûܼ Üð„Ó„Íçü|I|}|}|}|}|]|>|&ü< Äõ„ׄ®„†„‚„‚„†„ª„ÕDö< ü|"|0|A|U|e|Y|I| Dõ„Ó„¾„¾„¾„˄̈́˄τÓãD÷üüüü”ýâ„Å„¶„Çh|:|i|}|}|y|i|a|U|E|0üþ„Å„–„‚„‚„‚„ž„º„Ë„Ýë4| |E|a|i|a|E|&< Äõæ„ׄ˄º„²„¶„Å„ÝDóÜ< ¼ üüüü¼ ð„Ë„ª„ª„Áå|A|}|}|}|}|u|u|i|M|2ꄚ„‚„‚„‚„Ž„ª„²„¾„ÓDñ| |M|i|i|U|:| ü<$üá„Ä®„¦„º„×Dö¼¼Üüü|$üLä„Å„²„¦„²„Åç|<|q|}|}|}|}|}|a|I|4Äô„–„‚„‚„‚„‚„Ž„š„®„Ù,|6|Y|i|a|Q|E|.|"¼ î„Í„¶„®„¶„Ë„Ýî¤ø¬þ¼ü| |$ü< Äõç„Û„Ó„¾„ª„²„Çë|U|}|}|}|}|}|q|U|A|"„Å„‚„‚„‚„‚„‚„Š„š„¶Äñ|0|]|u|u|e|U|I|8| dü„Í„®„¢„®„º„˄ՄßîÜü|*|,|"ü¼ läùï„Ý„Á„ª„¦„º„Ó|&|u|q|}|}|}|}|m|U|6„ß„š„Ž„†„Ž„†„†„’„²åü|8|A|:|0|*|(| <üþDòðdúxœþDöÄñdú<¼ ¬þDôÄõÈÿ<ÜÔüÄôÄðîëçââèÄðD÷dûœü| |(|,|,|,|*|(| ü¼ œ$üÄöÄñððÄðDòDóÄôDõÄôÄòðîííïððDñDòDö$üì<¼ üüüüüüü<\þÄ÷ÄñîìëëîÄñD÷$üLÜ<¼<\œ\ÜÜ\\œ\¼ < ¼ü¼ ¼ \œ¸ÿäøDòìææçêíðÄódù¸ÿ\¼ < < ¼ìøÿtýdû$údù¤ùäú”ý,< ¼üüü< < Ü, ÿ4ý´ü$ü$ü”üôýÔÜœ<œüüDô„ßâÄñdùé„ßåDõ\lÿäúÐÿ¼ ü<\< üüDòéDòôý„ÄõëíÄüüÄïDö¼ ¼¼ÜþD÷¤øœüü| ü< < ¼ü< äùéäìDõdùDõêäî$ûŒôýäøÄó¤øœ¼ ¼ XDõDóDö´üDöðéèðÄõÄ÷ðæî¼ |0|Y|a|U|M|E|A|8|&Ü„߄ń¶„¾„¾„¾„¾„Á„ÑæTý¼ üüüüüü¼ ôÄõDô¤ø$ù¤ú´ýX< ¼¼ œþDøDødùDøÄõÄõÄö¤û,ÿ¤ŒLŒ¬œ´dûÄòëèÌ|.|4|6|6|*|"üü< 4þê„للׄßáçèïÄõDøtþ<ÿôlÿ¼\ dìœìÄìþTþTþ(„ðÿŒþ$üTýôý„¤¤<ÿ$üdúÄ÷ÄôïéäÄð< ü|.|:|6|.|$üüü< LÄöç„߄ۄÝâåçèìðÄôÄ÷$û¬þHÈÿôTlœ\¼< < < < < <œ¬0tþTþ´ýtýôü$üdú¤øD÷ÄôÄñîêåçDõ\ü|(|,|&|"| | |"| üü<$ùê„ß„ßãäâáâæêíDñÄô¤øäû<ÿœ\ܼ < ¼üüüü<¼ ¼ ¼\Lÿ$ûD÷DóðíëéééêêêÄñ ü|(|*|&|"|"| üüüüü¼ ÌDöîííìéæåäãäæèëïÄô$ûì¼ <üüüüüüü¼ ¼ ì\ÿdüäúD÷ÄôDòïíëéæâäíLüüüü| |$|$|$|$|$|"üü¼ Døíèæä„߄ۄللۄßåìÄðDõ$û¬¼¼ üüüüüüüü¼ < < ¼LÿÔüäøDóïëçâ„݄ۄلßî¼ üüü| |(|,|,|,|,|*|&üü\Dôèâ„߄݄لׄׄلÛáçìïÄôdùLÿ¼ üüüüüüüüü<< < TdûDõíæá„݄للׄلÝí< |&|*|*|.|2|6|2|.|*|&| ü¼ tDòç„߄݄݄ۄلׄׄلÝâèëðDõdûÜ< üü| |"üüüüü<< ¬4þ$ùÄòðíéäâãããäãèDöü|,|,|&|&|(|,|*|(|&|&|"üüìÄñç„߄ۄلׄՄфӄׄÝæîÄó¤ùÿ\¼ üüüüüüüü<< ¼ÜT¬þ¤ûÄ÷Dóðëåãá„߄߄݄Ýâîœ|"|6|A|A|:|:|6|2|,|$ü<Dõã„ՄффՄׄل݄ÝãêDò¤ùœþøÿ<ÿpL¼ üüüüüüüüü¼ œäû¤ùdùD÷DõDôDòîëéäãäãäæçë\ÿü|A|]|i|e|M|6ü¼ äûî„߄τDŽÄ˄Ûïlÿ¼< Ì$ùÄóÄðÄðÄòDòððÄôôüü|$|$ü<¼ ¼ < œ ÿðêéíDø\ÿ4þD÷ðèäåâ„߄߄ßáì< |4|m|}|}|}|IüÄò„ل˄ÄÁ„¾„ÄÕí¼ | |&üœð„݄لÝáæêïÄ÷¼ | |,|0|,üLdù¤øœþ´ý$üÄõïÄñÄöŒþ< < ¬Dõç„ׄτфՄÝæìðœ|*|Y|}|}|}|aüê„Ë„¾„¾„Ä˄τßÄ÷<|$|,| œç„τńɄ×âïdùlü| |0|4|*ü4ììÄòôýœœ<ÿ´ýlœ\ÀÿÄñâ„لфτӄÛãêðÄ÷¼|4|a|}|}|}|Yüë„Ï„¾„¾„Á„É„Óåœþü| |"ü¤ûå„ӄ̈́фÙãðÔý<üü| |&|$ü<äøïÄ÷„ì¼\H,œ¤úÄóí„߄ՄӄфÕáåêÄõÔýü|6|]|}|}|}|Yüï„ՄÄÁ„DŽ˄×ç$û¼ üü¼ ¤øè„Û„Õ„Ù„ÝãìDö¬¼ üüü| ü<< @düôÜþDø$üdùDòïè„߄للÛáíîDôôý`ü|4|U|y|y|a|Eüðæ„ׄӄׄӄÕåÄñļ ¼ LDõêäãæéëðD÷Œþ<üüüüü¼\(TèÿTýdüD÷¤øÔýdü$ü”üDõíéâ„ßèìïÄôÄ÷äùü|0|M|e|]|M|4ü4ýÄôæ„ۄلффßëÄöÌL¤ûDöDòðDòÄóÄóDóÄóÄõ$û¼üüüü< < ¼ ¼ \\ÿäøÄöDöäú\ÿ$üäùD÷ðîÄðííÄðíîDöÄ÷¤úÜü|$|A|Q|Q|E|2üÜdûíâ„݄ՄӄÝçDñ4ýÿ$ùäøD÷Dõ¤ù$ü¤øD÷DöÄô¤ù̼ üüü<< <¼ \ddúDóDóDõD÷äû4þäúÄ÷ÄôïëêéíðDóÄöDõÄó,ü|2|Q|Y|M|E|0ü¼Hë„߄ӄDŽ˄ՄÝëÄóDôD÷tý,ÿŒÜŒÔüäùD÷Äõ$ù4þl< üüüü¼ Lœœüþ´ýdúDóDõDøÄôÄôÄõððDöÄôÄóD÷DôDòÄöD÷Dõ¤ú<ü|.|E|E|A|:|*üüÜDõè„لфӄՄׄßäæíDõ´ý\¼ < < \œ\ܼ\쌌LœÜœœÌ$tþdùÄ÷DôîììíDóDøýDœœ¼ìTþdûÜü|$|,|0|(|"| ü¼ œÄ÷è„߄ׄӄׄلÛáéDñ¤û¼ ¼ ¼<< ¼ ¼ ¼ <œxÜþÔýlÿ$,œl¼þTý$üäøD÷DôDñDóÄôÄõ$ù¤û$û$ûôýLÿÌœüþœüü| |&|"üüüüüDôëå„݄ۄۄلÛâèÄðdú\ÿlœ< ¼ üüü< < ¼Ü\LŒþ”ÿdû¤û¤úÄ÷äù¤ú¤ødûÔüdùDøDøÄö¤ø¤ûdû”ü”ýÔü¬þ,œ¼ üüüüüüüü¼ôüÄóðìèèæåèëïÄòDö¤ù$üœ¼¼ ¼ ¼ < < < <ÜœŒôÌþ$üäú¤ùdù¤ûdûäûäûäùdù¤ù¤ú$û”ü¬þ ÿ´,¬Üœ L¼< < ¼< < ü< < ¼œŒTþ¤ûÄ÷DôÄñDòïîDóDòDôDø¤ø$üôœllœ œÌ¬LÔŒÌ,ÿ”lÈÿTý4ýdüäúäûÄõØÿ¤û¤ù4ý\\¼ ¼œ¼¬ÜD,PàÿÄøÿ”XpÌþ´üdüäú¤úäú¤úäúdü$üTýTþÔüÔüýôýTþtþ¬þtþtý´ýŒþÜþ\ÿlÿàÿ\ÿ ÿ°ÿàÿ@xÔTŒÜœœœÜ\<<<<Ü\ÌÄ´ýdüäûäû$úÄ÷ÄöÄõÄóÄóÄóDôÄôDöÄ÷äùTýÀÿŒœÜܜܜ\œÌ,´lÿ ÿôýtý4ý”ü$ü$üýtþHŒ¬l,ŒìT$DÄôtx@Hˆÿœþ ÿ¼þÌþÜþTþœþ4þ”ýÔü´üTý4ýTýtþ@”èÿp̬ œœ LäÄðÿÀÿÿüþÌþ¼þTýôü4þŒþìþì, ÌL̤¸ÿÀÿ<ÿˆÿppÿøÿ¼ ¼D÷ˆÿ$ú”ôüdù$ùdûpý´ýýX”ìXLLœœÜl,ìŒ Ô(¼þ ÿÌþdü¬þôü|ÿôü<ÿÀÿ”ðÿLŒ¤D”DŒLÿ¼þÔýTþ”ýTþøÿ„¤°ÿtDØÿ$üþÿìþÄìþÿ4þýTþtþ$ÿd   ìœèÿàÿÜþtþ$ü´ýþþ´ü¼þèÿ$XTÔÔ\ÿ˜ÿD|ÿ<ÿxüþ<ÿÌ Ì”,ôÌìþ¬þþüþ$üdüØÿ,ÿÀÿ¬ Œ$8Œ°ÿ¤üþ˜ÿôý”ýý¼þlÿXÄàÿ”\ÿÌ$4Œ¤ì ÿ„Ìþìþìþœþtþ\ÿLÿøÿpxô¨ÿèÿ<ÿ\ÿ$”ôÀÿLÿlÿtþ˜ÿ ÿÈÿ”Œt„4ì¬,ÿ þýÔýdü$üTþ<ÿÿT¬ ŒŒŒlä@,ÿ¤Œþ4þŒþ4þ¼þ”ýüþ<ÿ,ÿèÿÔ0|ÿ”DdP¤4Œ ÿ0”DèÿØÿÿØÿ¸ÿ<ÿÄôýTþ Ä$4øÿÿ\ÿ¤¤¤,ÿhh” ÿìþLÿðÿüþ4ýTýŒþÿðÿ44ŒxlÿÿþÈÿt„dԌԴ(ì´t8¤|ÿÌþœþ”ý˜ÿ\ÿ¬þ¬ÌŒlHÜ„p4þÿÀÿ4þ ÿý´ü4þtþìþ ÿôýhÜþ”¤ÜDœäœÌ¨ÿôý ÿ´ýœþlÿýÿÔý|ÿôýlÿ ÿœ Dôl¨ÿ0ÿØÿä4ýŒÌþÔtþ”ýlÿhL|ÿ¬PÀÿèÿÿìþ”ˆÿ0¬@hTýä`ôý tþDüþ ÿÌþœþœþL@THÐÿœþ´ÿ,ÿ ÿèÿP,ÿÔ˜ÿ \ÿ`ÜþÔìlÿ üþœ ÜþþPä´üœþ|ÿH4þÐÿ(DðÿÀÿ tþh´ýÔÌ$Œ´ ÿàÿðÿôýŒþôýÄ ÿTþøÿÜìþ4þ(x¬¤„\ÿ Ðÿ¸ÿ”ü¬Ôý˜ÿTþ¼þÀÿ¨ÿhH ÿ,Ü,ô8 8àÿ´ý¨ÿÿ4ýLÿœþT°ÿlÿ°ÿ44ýŒ ÈÿÔ´TþhôýÌþìþ<ÿTþÜþÜþlÿ¬tþ\¤Ü@üþD4lÿ´ýlÿtþÈÿ”ý@4þ¸ÿàÿŒ8Lÿ¬pL¨ÿTt$`”ý¨ÿtþlÿÿTýÜÿ¬¸ÿ$TD¬þý 0Œþìþøÿ0¬ôýþÀÿì4Ìþ¤ Ìtþ4ýœþÔèÿ Tý¬lÿxÈÿŒþTýøÿàÿLÿ@t0<ÿ,ÿh$¬¨ÿ´p”„¼þììÔ0Ô ´ý ÿdû¬$Üþþ ÿĬþ\ÿxtxTäÌþÿ¬¤Œþ<ÿìþ””Lÿ¬lÿLTþ¬<ÿÔ„ØÿhÔü44þŒþHôLÿ”Ì8Tþðÿ  D¼þ0HÀÿtý ÿTý`¸ÿÜþÿ DøÿÔ,Ü Tôœþ0<ÿtý4ý<ÿ¼þ´ýˆÿtþÌÌdÐÿì°ÿ Tþ¼þDÐÿ´ý”ýlÿ˜ÿä¨ÿTì`8týŒþÄÿ4ý0Èÿ<ÿplt¤\ œþtý`@üþ$üìþ4þ ÿˆÿ¬<ÿìôÌtýä”ý,ÿ´ü”ý|ÿp<ÿ¤<ÿÌ ¼þÄìþ lD´ý` tþxÌþäìðÿTLX „ ÿ$üLÿôý”ýÜLÿÀÿxœì4týÄìdülÿÔýÔýäù˜ÿœþ´ý¤´l4Lÿd\$l¤û|ÿ„ÿìDœ8ôýÔü¬l8ôüdùHþ´ýðÿÌþÜTôü´ý4œ\ÔýýèÿðÿlüþÔýŒÌþäú¼þldü<ÿDÜìþ ÿŒÌ4þÔütýôt4ýdü¤ûœþ¼þ,\¬ÌÌ\ÿ°ÿ8,´TþTþ´´Œþ¬þ@ÿÀÿ<ÿİÿÔÌþ<ÿ¨ÿèÿìþœþ`@|ÿþLÿ`Ô¬ìX`„ ÿTþTþ,ÿðÿŒ´ œL  t8 ÿˆÿÈÿÈÿ|ÿþtýþ4ý4ý´üdüdü”ýÔüdûdü$üäúdú$üŒ\< < ¼üü<¼œ¬¼þdúD÷ÄõÄõDø$ù¤ø¤ú´ýHtŒèÿ ÿ”ýdü¤ûäûtýüþlÿlÿàÿ@,ÿìþ”ý¤û$ú¤ú¤û”ütþ¤ìÜœ< üü<< < ¼ <lÿDøÄ÷$úäùDøDødûðÿT””ý¤ú´üÌþtý$ùD÷äú,ÿ4$ôÜ,ôÔœÌÈÿäû$ú¤û$úÄöÄôÄ÷¤ù¤úÄöÄõ$ül¼ üüüüüü< ,ÿÄ÷DøÄöÄõDø¨ÿ¼\”Œþ´ýD÷DñðïÄñÄöäú,ÿÜ<œÄ4þý ÿ¤Ü¼¼Ü\d´ý$úDöDöDødùdüTþ œ¼¼\œìþäûäù¤úäûTýÜþL\¼¼Ü\¬,ÿäûdú¤øäø$ú¤û”üôý¸ÿp`ØÿÿèÿÄÈÿDÌìÜlìÌdèÿtýTþôýœþ”üÔýÔýlÿlÿŒþìþ¤ŒÌÌ8 ¬¬ì䤤@¼þþtþÔý4þ4ýTýTþÿ4þ”ýTý\ÿ8`ä¬ÌÜ\ìä<ÿˆÿtþ8TþÌþÀÿ,Ü\LÜ h$üdú$ùdú¤û”ü ÿLLLÿ4ýdúäùäøäù¤úŒþìÜœœ\Ü P0̬$ähŒ Tþ´ý°ÿ´ý ÿœÜÜ,$äûDøäødú´üþ4þ¸ÿdLÿäúD÷ÄôDõ¤ø4ý´Ì¼< \ÿÌþPœœÜ¼¼ ¼ \¬4þý$üäùdúýìþÔ,|ÿdû$ù$ù$údúäùäûXœŒ¬Ôh ÿ4ý”ýðÿìlŒìdèÿ´üdüÜü\äøDøTýPäûÄôÄ÷< Ü|ÿ´üÔýÌþDöïDô|ÿ¼œ<ÿ,< \¤ødùüþ¼ ¼< ¬¼ü¼ ÄD÷Dö”ýœdûÄö$ûL¬þÄ÷D÷Xôüäø”üÿl,ÿäù¤ûœLDõïïÄö$û¤ú¤ù̼ <üüüüü< Ü,ŒL”,äûÄ÷ÄõDõDøDøDø$úý´ý4ýtýdû$ú$ûdütý Lܼ¼<\ÜÜ\\œœ,¬TýDöÄòDõÄôDõDöÄöäú$ûDöÄñÄòÄô$ù¤ûˆÿ¼ üüüüüüü\œ$¬l`4þœþdüÄôðëêîDñDòÄö”üxlÈÿôýTþd¬tþ\¼ üüœ\dúðêÄõTýÄôïíÄððïêï$úäúDøäù\üü|$|.|4|2|"ü¼¤¤ù¤úäû”ýDóéåâ„ßáâéD÷ œÜ\´ý$ú¼ üüüü¼ LÄ÷Äóîëï$ú$ùÄôDóðïíêêÄòäúÔüt< ü| |*|8|<|8|$ü< Ü$üDôÄõ$úìþ$ùïçä„߄݄ۄÝéÄòäûŒ¼ ¼ << L$ü¬¼ üüü¼ ¼ \¤ûíäéDõÄòííîïìæèÄóÄ÷dù4þ,ü|(|2|A|I|E|4|$<œøÿÄõÄñDõÄ÷ÄõÄñå„ۄׄՄՄׄÝêdùì<¼ ¼ ¼ü¼,ÿŒ<üü< ¼¼ üôýðïDñÄðíäáçéëëíÄò”ýl\< ü|(|2|:|<|A|:|,ü<¤ûÄôîìçå„߄݄ۄۄßäéìÄðDõdú´ý(l¼¼ üüüüüüü¼ ÜX$ü¤ùDôÄðïêææäåçêîÄó¤øTþ\< üüüü|,|4|0|,|*|,|*| ü¼ ÿDôîä„ׄфτфффӄلßåìÄóäúÜüü| | | |$|"üü¼ < ¤ûDòëçåâ„߄݄ßâæéï$ú¼üüü|(|2|:|:|:|:|8|2|&ü¼ LÔüÄðã„Մ̈́ɄDŽńńɄτׄßæî$ù,¼ üü|"|&|,|,|,|&üüü¼ ,äùÄðêã„݄لׄՄׄÝâçíÄòäù´¼üü|&|0|:|A|E|E|A|8|.|$ü¼ äùê„݄фɄÁ„¾„¾„Á„DŽ˄ՄÝçÄðäû\üüü|$|(|(|*|*|(| üü< œäûDóëä„߄لׄׄׄۄßåëDñäùD¼ üü|&|0|8|>|A|A|>|6|*üüDõæ„ۄτDŽÄÁ„Á„ńɄτׄßéDòdû< üü|"|(|,|.|,|*|&| ü<\þDõíå„߄ۄׄՄՄلÝâçîDõdüÜ< ¼üü|(|0|6|<|A|A|<|4|*üüÄôæ„ل̈́ńÁ„¾„¾„ÄɄфÙâìÄöô< üüü|"|&|*|*|(|&|"üü< $üÄôîèá„ۄׄׄׄلÝãêðDöýœ< ¼ üü|$|,|2|8|<|>|:|4|,| ü¼$úì„݄ӄɄľ„¾„Á„DŽ̈́×áêDôtþ< üüü|"|(|(|*|*|(|"üü<\týÄõîç„߄ۄׄՄՄׄۄßçîÄö¬þœ< üüü|$|*|.|2|6|8|6|2|,|$ü¼tÄòå„ׄ̈́ńÁ„¾„Á„ń̈́ՄÝèÄòÔü\<üü|"|$|(|(|&|$| üü¼<D$ùDñìçâåì„لׄ߄ۄ݄ßçîìþL¼üü|*|:|E|E|I|E|A|6|"¼ $üîä„ۄф˄˄˄̈́ӄلÝæîÄôäú$< <üüüü| | üüü¼ ÜdûDòìêììêçèéçæéíDô$üÌÜ< < ¼ \¼ |"|0|A|M|M|A|6| î„لDŽ˄фՄßêíÄòÄöÄðíïîÄðD÷”üd< üüüüüü< düäûôýäûäøÔü´ý$ü¤øÄóDñDõÄöÄòðïïDôdùäúüþÜ\\¤û¼ü|(|<|Q|M|<|*¼ Dòâ„фɄÕãí¤úD”üäøÄóéáâæï´ý<üüü¼ œÄœÈÿDø$ü\ÿÜ<< lÿ°ÿ„¤û¤ùÄôìðDõÄòÄñÄòDòDöÔüäû$ûäúäùD÷¤ù¼ | |4|M|Y|I|2ü4ýè„Û„Ñ„ÑåÄ÷,< \Ä÷ðç„݄لÝçDöœüüüü< ¤$ú¤ù4þÌ\< << Lôü¤ùDøÄöDôDòDòÄõäødûp äûäúD÷ÄõDøDøDóïîý| |4|M|]|A|$üdúä„ׄф×Dò¼¼<\¤øïã„ׄՄÝíTþ¼üüü¼\¤øÄóDôÄö´ü \< ¼ <Ldü¤øD÷DøD÷ÄöÄ÷¤ùÔü,œ0Ôýôü$üdú¤øDø$úÄöîèÄ÷| |A|]|U|2ü< Äô„݄˄DŽÝÌþüüüÜÄöî„߄ՄÕâÄö¼ üüü<äûÄòîÄðÄö4ýœ¼ ü¼¼ Ü@dûÄöÄöÄöDöDõÄö¤ù´üÔ<¼ ôüDõÄö¤ùÄõÄðîìDøü|E|Y|I|*üÜÄó„݄τÑéüü¼ „Äôë„Û„Ó„ÕçTþ<üüü<ÜäùðíDñäúܼ<ü< L$üD÷Ä÷äùÄ÷DöD÷$ù¤û\ÿtþìþlœ<œìþÄ÷Dòìççd|4|U|U|A|&ü¤úâ„Ç„Á„ÓDó<üü¼äøæ„Ó„Ï„ÙÄò¼üüüüüxïçêDó$üt¼ üü< dÄöÄòÄóDö$ùdú”ý lÿ´üäúäû\ÿœœÔüDóïïìïü|]|]|E|*ü\Äö„Õ„º„Çè\üü< ¼ Dõ„߄τÓæäúÜ< üüü¼ $ùîîÄóäúôü0¼ üü¼ tþDöD÷¤øDöDôÄödûlÿ”ýTþ¤ú$ùäûLÿàÿdûDôïí¤ù|:|i|E|.|$ü<ð„Å„º„×ÄôXœœ< üœï„ׄӄßïDöD÷ü|$ü\Ä÷D÷¤ùDõðÄó(<ü< ¬,´äùDõÄóÄ÷Üþ„¤û$ù4ýØÿ¼þ„ÜL$úÄðëìÔü|8|Y|<|0|,|$üí„Å„¾„ÙíDò$ù(üü< Dóââåìêí¼þüüü¼ ܬDôíDó < ¼ ÜL<œdûÄôDõdû¬þ4ýäøäø´üôütýÔ\̤øðìïü|Q|8|(|0|,| ý„Õ„¾„ÕæãìÄö<üüÀÿÄððíéäåDõ< ü< < ¼ ¼< $úÄñDötþ,ìþdü@< Üôü$ù¤ûÄ äùDöäù”ýdû´ü¨ÿ,ÿ´ý¤ûD÷DóÄòDøü|E|:|*|.|.|"Œ„߄τÛã„Û„ßð¼ü<ì´üÔýD÷ïççDôÌ̼ << èÿdû<ÿ””ü$ù$úþL<ÿ¤úTþ,lDLÜtþDöïïÄñDòÄñDôÄ÷äûü|6|>|6|4|0|(üDõ„Ý„Ýá„Ý„ÝåÄ÷Ü<l¤Ü4DøðíÄðD÷dú¤úTþܼ ¼ Ü Àÿäûäúäû$üdüTýTþðÿìÌÔàÿ„tdüÄõÄôÄõDöÄöÄ÷dùþ`8ü|,|,|*|,|,|(üäúëêã„Ù„ÛäÄòdúôýÈÿ¼ŒäùDõDöÄöÄöÄõÄ÷´ý¬\< ¼ ¼ \ ”ôýäùÄõDö¤ù¤ûôüœÜœÜtýdùD÷DôDñðÄñDôDø´ülÿ< |"|*|,|.|.|,ü¼ äùÄñè„݄ۄßéïDõdùä¼ÜÌ4ýÔüdûDøDõÄö¤ùdú”üÜ<<¼ÜÜdý$ûäúdû”ütþ¤Œ,ÌÌþ¤ùDóïîÄðÄðDñDø¼< ü| |(|0|*|&|$ü¼ $üDòèã„Ý„ÝãêDñDõÔü ܬÌhtý¤ùD÷Ä÷dù¤ú4ý ¼< ¼ ¼\,ÜþTþTý$úDøÄ÷äø¤ù$úäú”üÔýTþh,Ü< < ¼ < < \ þÄ÷DóðÄñDõì<üüü|$üü< $dúîçãäåçïÄóäûä<¼ < ¼\¬Øÿ¤ùDõDõÄöÄöD÷ôüälÜ<<ÜììþÔý$úÄòïïîììÄòü| |,|6|>|:|.| üÜðá„ՄфӄӄÙáï¤ù,< üüüü¼ œÔüÄõðîïðÄô$úÐÿ¼< <ü< ¼\Ì´ýdùÄöDöÄöDöD÷$ù$ü|ÿôìܼ < ¼ ¼ << ܬ04þ$úÄ÷Dø$ûôüäû´ü ÿlÜl<< ¼ œ\œ ”ý$ùÄôDôDóDòÄóDö$ù”üþÈÿ4t¬Œ„þÔüÔýTýäû$ûäû´ý¬þˆÿpŒ,쬌ܼ¼< < ¼ü¼¼ ¼ <ìàÿôü¤ûäú$ûdùÄöÄôÄóÄóDôÄôDõD÷¤ù¤û¤û$ü´ý<ÿDLìÜ\Ü ,ŒTŒ¬œ\\œ\ L ¬XÜþÔýýdüäûäûäûTýìþhìLœÜ,ì¬PTþ4ý´üTý´ýTý4ý4ýôýŒþÿ0 ôllL(|ÿlÿÌþtýýôýXL,¬´8ÿÌþ¼þ<ÿ\ÿØÿ\ÿ4þ4þ<ÿðÿHpdìÌì,X`„pädp\ÿìþLÿÿTþtþ<ÿĬä”@\ÿÜþ4þ”ýÔýtþÌþÿTþôý ÿøÿ|ÿ°ÿ”ìtädììÌ dDŒt„¨ÿlÿøÿ|ÿTþìþ,ÿÜþ\ÿtþ¬þ<ÿŒþ<ÿÈÿ\ÿ˜ÿLÿ°ÿtTì¬ÄHØÿðÿÿTþœþ ÿœþTþþœþ¨ÿÔdì ,,Ô¤”T ¬$`Øÿüþ4þÔý”ýÔý´ýÔý¬þŒþ”ý4þìþÿèÿ|ÿ0¬ÌŒôä¬ìŒdäŒ4ìþŒþœþ<ÿÀÿ´DôÄxlÿ¬þTþþìþ ÿlÿhX0lÿ¼þÿÐÿHpä$Ô”`üþœþˆÿ<ÿìþ|ÿ¸ÿ”ô0¤TÔ@°ÿ|ÿ ÿìþ¼þ\ÿ ÿÌþ,ÿLÿ ÿ ìÌ$¤´0Lÿìþüþ°ÿèÿøÿàÿh„dT,, ô\ÿtþ”ýtýTýtþøÿDÌL Œ´ÐÿüþþþTýTý´ý´ý´ýôý¬þÌþ ÿÔÌLlÌÌ$$Œ¬ TŒÌ”ÈÿLÿ ÿTþtþ,ÿ<ÿüþÌþüþÿˆÿ˜ÿÔ¤„$„¤8ÿTþôý4þ,ÿ(”tÌdĘÿŒþTþtþìþìþ<ÿÔÌä( ôŒDŒäÔ0ˆÿtþÔý4þÌþ<ÿÿ ÿLÿPp„äÌ tŒ„ìþTþœþ¼þÿ„”´Ô¤@(8H”¸ÿÿÐÿ(àÿèÿ\ÿìþÿ ÿÜþ¬þTþÿàÿðÿ0¤´äH¤Tì¬tdäÔäT”(„Lÿœþ¼þtþìþŒþÔý¬þÿ ÿ ÿ|ÿÐÿ(@XÔdì¬4p„Øÿ,ÿlÿÿÈÿLÿ ÿtþtþ ÿŒþLÿHx$44Ä@8„Äðÿÿ ÿøÿ<ÿÿøÿ0Ô´¤„HèÿÀÿ\ÿ\ÿ,ÿ,ÿˆÿðÿ(8¸ÿüþ¸ÿ”pädT´Pàÿ|ÿ<ÿ ÿ<ÿlÿðÿðÿ8”pTŒÔä(ÌþTþþŒþ,ÿLÿlÿ<ÿˆÿÿtþ ÿ|ÿXh $ô8@H”H(¤ô¬¬Ôä¤8´88 üþ<ÿ|ÿŒþÌþLÿÀÿx„hÈÿ<ÿÌþ<ÿ¨ÿ¤¤„ ÿÌþÌþ\ÿ|ÿÿ|ÿ(Ô4´„¤´¤8Äĸÿ|ÿˆÿ<ÿ,ÿ|ÿðÿ„H$¬”hÿlÿÿÌþÜþTþÔýŒþ<ÿ,ÿ|ÿ¨ÿXtdTÌ T8èÿ|ÿÌþtþþTþìþ0ÌŒ  äØÿÿ<ÿÔý”ýœþìþ˜ÿLÿTþLÿ|ÿØÿÄŒŒlŒ¬tÄèÿœþtýýôü4ý”ýôýüþÿ„ì Üܬ¬t ¬þþ´ýôý”ý4ýþ ÿØÿäìŒÌ,¬$Xˆÿ˜ÿÌ $ü˜ÿ ÿܼ ¼Œ\üü¼ð¤úÄóDôïèéí$ü,0¤\<< ¼ ¼ \œþäû¤ûäøDøäùDøD÷$üÜ\¼¼ ¼¬þ̼œÔýDø$û¤ûX<¬$ü”œ¼ œŒ¼þ ÿLŒþtþ˜ÿì dûäúý”ýäø¤ø¤ùDöÄ÷Ôüþäû$û|ÿlÜ\ddüdüìP´ü¤L\\\\Üœ$Ìt4ýtý”ý˜ÿÔý´ ÿTý´ýþäûý\ÿlÿäúdú4þDøD÷düÔüäúdú$üdúd¸ÿ´üœœ< < < ÜüÌþlÿœ<ÿ¤úôý`dü$ù¸ÿ düTýLÔülÿ$¼þ´üÜþˆÿ4ýtýðÿÿ4ýôýØÿôýdütþtý¤û$üTþ¬þÔüTþ44D,ÌŒŒœ\Ü\LLtD0tþÿp,ÿÜþ,ÿ<ÿP`¤„´ŒÄxŒL„Œä´Ìðÿ\ÿDtþpÿ4ý|ÿtþäû¬þtþ¬þÄ„l0x¬<ÿTþ´œìþŒþÌ8 \¼¼\ÿTýDøïîÄôäø¼ü|.|I|Y|U|E|,< ê„Ç„®„¦„¦„²„¶„¾„˄фՄßáãæçíDõ,¼ ü|(|4|<|E|E|A|A|>|:|0|*|$üü< läøDõÄóîééééçá„߄݄ßã„݄ۄۄÝåä„ßèDñdù\¼ üüüüüüüüüüü¼ œ(¤øÄòðïíëëìïÄñDòDòDñDñÄóÄöÄ÷D÷ÄöDø¤ûÿ”ýDøDõDø< |0|U|i|]|<|&üìî„ׄ˄Óê´¼<< ĤøDóë„߄ۄßë¤ø¼ ¼,°ÿôý”üD÷DòDóäùlÿl¼ ¼ < ¼< << œäú$ùäùÄ÷$úTýTþÜ< ¼¼ <ääúÄõÄñDñDñDòÄñíÄñü|6|I|E|2üü¼¤ùè„Ù„×æ¤ù¼ ´ýÄ÷ÄõÄñíêêîÄ÷œ< < œd$pLÿTþ´ü$üTþ\¼ ¼ < \\\¼ < \$œþ<ÿ`äúDõDö¤ùý ÿ°ÿôý”ýTþ´üäøÄôðìëî¤øÜü| |"| | üü<<¬týdüdû¤ùDøÄõÄòÄñDñÄðDñÄñÄòDóÄôD÷äødú$ûäûÔý@ÌŒL\ܼ< ¼ ¼ < ¼\œœ\ÜŒdûÄ÷DøÄ÷DõDóÄñDòDôDõD÷DøÄöDöÄöD÷ÄöÄõD÷ôüœüü|"|(|,|.|,|&üü¼ ¬¤øðéâ„ß„ßáäæçêìïÄòDõÄ÷$ûLÿ¼< < ¼ üüüüüüüü¼ \ddüDøDóîëêêëìîîïDòDõÄ÷dû¤û¤ùäú4< ü|"|(|,|0|2|.|&üü<D÷îç„߄݄݄݄ßâåèêíDñDôdù¼þì¼< ¼ üüüüüüüüü<¼4äûD÷DòîêçæçéééìðÄô¤ødûdû¤úýœ¼ ü|&|.|2|2|2|0|*üü¼ Œ$úÄñé„߄ۄׄׄلۄÝáåêðD÷týLܼ ¼ ¼ <üüüüüüüüüü¼ŒþDøDôíä„ßáãåæéêîÄô¤ùdü¤ûdúäúˆÿ¼ü|$|2|6|6|8|8|2|(ü< \äûDòêá„لՄՄׄׄلۄßäêÄñdú ¼¼ ¼üüüüüüüüüüüü< Ì$ùDñìæá„߄߄ßáäçíÄñDö$ú”ýtþäû4þ¼ü|(|8|<|8|8|:|:|0ü<ÜäûDòé„݄ՄτττфՄׄÝãêDñäùÌ<¼üüüüüüüüüüüü¼ ì¤úÄõðè„߄ۄׄׄۄ߄ßäëÄódù”ýHt\ü|"|4|A|A|>|>|>|<|0ü¼ 4Äõìâ„ׄτ˄˄˄˄̈́ӄÙâéðäøŒ< üüüüü|"|&|$| üüüü¼ÌþÄõíçá„Ù„Õ„Ó„Õ„Ù„ÝâèïÄô¤ú¬¼üü|0|A|I|E|A|A|E|<|&üœDöìæ„ۄτɄń¾„¾„Á„ńӄßéÄòdûì<üüüüü|$|.|0|*|$üüüðå„݄لׄӄфττՄÝâêÄó$útýœ< ü|(|>|]|}|}|U|,¼\< ¤úèéä„ßèâ„фD޶„¶„É„ÙçÄ÷Tþœüüüü¼¼þ¼üü|"|"|"üü\Ìþ$ûDõêæèèéä„Û„ÛâæïÄóÄôÔüœ< ¼ ÜDødüü|$|>|m|}|a|*dùìœðÿæâçíýÄõ„߄̈́º„º„×ïÄôäø”ý¼üü¼ <ÿÄðíôüüüüüüü|"üxðDó¼ ´üê„ßãëìçãäï”ü,L¤þlÿ<ÿÄôî$üü|0|U|u|u|E¼ éÄñÜ´ýëëD÷ ¬è„Ë„¶„¶„ÉçÄõÄödú\üü¼ äúïï¤ù¼ üüüüüüü< ¼þ$û< ÔýíâáëïìéèíDø,ÿTý$ü4þ„œ4ýíçÄöü|.|Q|u|y|I¼ åì<Tþíê¤øÜœì„Í„º„¶„Çèdùdùdüüü< dúîêDôüüü<üüü¼ tý$ú”ý¼ < DòèåêÄðîëíÄó¸ÿ\ŒäûdúdúdùDõíçêdûü|M|}|}|Q¼ „ßè¼ÈÿìçÄôœüTþ„Û„¾„²„ÃëìLý´üÜü<”üé„ÝåTþüüü¼üüüü< Ü< ¼œtþDòéäèðÄôÄòDñDô$ùôý”ý¤ùäø$ùäøÄöîäãÄó¼ |6|y|}|m|,îâŒ<D÷ïð¤ù< é„É„®„®„ÓDö\´ü´ý¼ ü¼ $üå„ÝDñ¼|$|$ü< üü¼¤ûðDø¼ü\ï„Ý„ÝêDôDöÄòîDñÔý\\XDôëëíîìÄö|0|u|}|u|2ë„ÛÄ÷< äûÄðDô\ìï„Ï„®„ª„Çð< üäû(<< Üí„Ýç¬| |,| < t ¼ ü< (äûœ¼üê„Û„ÙæD÷@ÜþäøÄô¤ùätdüÄñæãçìDóTü|I|}|}|YüæãD÷ì\ ÄöÄö¤úDôè„Ï„¶„º„ÓÄò< ü¼TþÔýTÜ\ÿïçï\ü|$üü\¼ üü¼ dúÄõ¤ø¼þÌ$üðã„ßçÄótý4ýdùDø$üœ<D÷è„ßáðÜü|E|m|m|U|$Ä÷îÄðÄõ´ü äûdû$úÄñé„ׄńńÓèìþ¼ < <l DŒþÄöÄòDô4þ< üüü< < ¼ < ¼ T¼þdúÄöÄóÄòDòïìíDõdü4þdü¤údüÜþÌþ¤ûDõìãäÄó< |.|Y|i|]|6ÜðDó¤ú<ÿhtý¤údúÄöÄñè„ՄɄ˄×í,ÿ¼¼ÜÌþýÔýdû¤øÄ÷dúì¼ üüü¼ ,l< üü¼¤ûDôïðÄôDôDóÄòDôdú̼¼ ܤûÄôDõdùýäúDóêâ„Ýéüþ| |M|a|U|6ü$ü¤ù4þLÜ,ÔüäùD÷Äôîá„Ó„Ï„ÕãDöÜ< ¼\ÿ¤ùD÷ÄöDöD÷äù4ýÜ< üüüü¼ ¼< <¼ <œ DöïïïÄñÄõDødûÔüdüôü ÿœþdü$ûDøDôðëçäæDôü|A|]|Y|Aüì¤ø$ù\<¼Üäùîèæäã„߄݄ÝåDô\ü<LDóèêÄóüþ¼¼ < ¼üüüü< \œdl\œdúÄðîðDñDöäúÔýLÿÔütý”ðÿÔüDøÄóïéååæì$üü|:|Q|M|>| < ¬þ¤ùD¼ ¼< $Dòìéçèç„ß„ÝáèDöœœdûDñîÄðDøÜ< üüüüüü< < ¼¼œØÿ¨ÿTþ$ùDñíîðÄô¤ûì<< ¼ HdùÄòïDñDôÄôÄôDñëèéDõ¼ |.|A|E|8|"ü< œ¼ü¼ ÜÄõëä„ß„ßââãæêDòäû˜ÿÔ ÿDøÄôDöäú,¼ üüüüüü<üü¼ ¼ìdûäøÄóïîíîÄðDóÄ÷LÿŒœÜ,TÿäúDøÄ÷D÷DöÄõDñìêîHü|2|>|>|6|&ü¼ÄÀÿìÜ´$úðæá„ßáäæêðÄõdûìLÿ$ü¤øÄ÷äú4þ¬¼<üüüüüüü¼ \àÿTýdùDõDóÄðîíîÄñÄ÷ôüÌ\ÜœL”ý$ùÄöD÷DøD÷ÄõDóÄòÄô”ü<|"|0|0|,|$ü¼œŒ˜ÿþdû$ùDôðíììëééìðÄö¤ûTþ4þ$üäùäú´ý„,œ< ¼ üüüüü¼¼ \@äùDöÄõÄóÄòDñÄðÄòDôDõDø¤ûôýhˆÿŒþ$üäøÄ÷DöDõÄõDõäøü|&|.|,|(|"üü< < ܰÿÄ÷DóîëêéèçåçëðÄôdùäûdüdüdüÔý ŒÜ¼ ¼ ¼üüüüü< ¼ Ü”ôý$ûDøDôðíìíîÄñDö$ù4ý\Lìþ¤û¤øD÷D÷Dø¤ú\üüüüüüüüüü< ¼Ì¤úÄòêæåæçéëíïDñDôÄöÄ÷äùÔüLœ\<¼ < üüüü<<ü¼¼ œ¤äúDöÄðíìííÄðDòÄòDödùdûÜþP<ÿÿŒþ”ütý¤ûdúüüüüüüüüüüü¼ 4ÄôìåãæçäâââåêïDö$û,ÿœÜ< < ¼ < <üüüüü¼¼¼ ¼\@dûD÷ÄñîíìíïðDñÄõ¤û¨ÿŒ¼Ü\ÌÿdúÄödúüüüüüüüüüü<„dùDñìêêêçåæèëðÄô¤ø$ûÔýøÿ \<< < ¼ <üü¼< < < ¼ œ$ûDøDõDòÄðïïðÄñÄóD÷$üìþ¬œÜœäþdûDøÄ÷Øÿ¼ üüüüüüüüü< ì$üÄôïíîîìèåæéîDô¤ø$ú$údûÜþ,ܼ ¼ < ¼üüü¼< ¼ < \œ`tý¤úDøÄôÄñÄðððÄòDôDödù¤ûüþ¬Ü\\Üì<ÿäûdúÄ< ¼ üüüüüüü< TtþäøÄóÄñïíëééêëîÄñDôDõÄ÷$û˜ÿ¼< < ¼üüü¼¼ < < ¼ ¼œ„´üdúÄ÷ÄôÄòÄñDñDòDóÄôDø¤ùdû”ýÀÿŒ\œÌlØÿdü$û ¼< <üüüüüüü< œ|ÿäùÄôÄðïíêèéêëîðDóDödù´ý¬ÜœÜ¼¼ <üüü¼¼ ¼ < ¼ÜÄTþdü¤ùÄöDôÄñðÄðDñDòDôD÷dúdü ÿ¬œÌ |ÿ”ü4ýœ< ¼ üüüüüüü¼ ¼\tdûDöDòïìééêëìíðDóDö¤ù”ülÿ,\\< ¼ ¼ üü<<¼ ¼ ¼ œÜ$Tþtý$ûD÷ÄôDóÄòDóDòÄðÄðDòDõ$ù$ü´ý,ÿ„TddŒ¼<üüüüüüüü<< œ”dûÄôïíëéèèèéêíðÄòÄôDødüÄ\\< ¼ <üüüüüü<¼ \œ@´üäøDõDòïîïïðDñÄóD÷$údüÌþ´lœÜÜ\œ¼ ¼ <üüüüüü<¼ LþDøDôÄñðîîííîîðDòDôÄõDø$û4þHlœœ¼< ¼ ¼ < ¼ ¼ ¼ ¼ < ¼\T4ý$úÄöÄóÄòÄòÄñÄñÄòDôDö¤ø$ûþŒœ\<< ¼ ¼ < ¼ ¼ < ¼¼< <\œÜìD8\\ÿäøôüDõÄ÷ÄôDòÄõDòÄöDö¤øäúäú ÿ(Ì,¬ÀÿLÿtþÿlÿ¨ÿx4LLœLLl¬ìŒìD¤´ ¬ìì¬tlœœœœ,\ÌŒüþ´ü”üäúäú¤ù$ûdú¤û¤ûýTýþ|ÿlÿŒÄœ$ìþ8$ûŒþ¤úôýdûdü”üÔüTþ@´LL ìÌ4 ,ÿœxltÌ̬œ4TÌ<ÿ4´ý¤ûôü¤úÈÿ¤úüþ$û dü <ÿ°ÿ@tþŒÌþÌ$üTþ¤¤,LÌt¤ÜÄäôüœþ$ûäûdùdü¤ùTýäûtþ¸ÿXœ Ì\l< TþÜdü\dü ¤úp”ý,̰ÿÜüþŒ´ülÿTý´ý”ýdü¤ûP$ú˜ÿdû,|ÿœ œ¤\ŒÿL$ùìäúÔý´ý¸ÿÀÿptþlLìþÄäúÄö¨ÿ$úäølÿD÷ œþìœìœ,ÌäûÜDø\¤û$ûœäúlÔý¤4þŒdû\$ú¼¤ùœäûÿ,äûŒdùl¤úœ¤ú TþÌ4,œ„Ü L,ÿ”üœÄ÷¼ DôÜdù<ÿTþ\dù¼ Ä÷p´äúÜtþýläøÜ¤ûlÿôüdüœèÿœÔýìl4Ì`”ü”ý\4ýlÿÔýÌäúL´ý\ÿ $üÈÿÜþÔý4þ 4ý¼¤ø\týܤû¬4þlÜþÌ4ýܤûœ$ú\¤ùÌdüÌTþ”üÿ´¬´ýìþþ,ÄTþLôü\tþˆÿÌtý\œþtþ ÿäûœÔüäûÌDàÿ dû¬þœ¤û$ù¬Üþdü Tý ÿþLtþìÌ„œ`,”ý\ÿl¤Œ(”<ÿÿTþ´üÿ¤ûÜôýÜdùÜTþlÿäûLþ$dûÜäû,lÿØÿàÿôýØÿdü,Ôüœdü\äú\œÜ¬äúœtþ¬dú¤úœì¤ùL¤û\¨ÿ¬þtþ,Ä÷ÜDø<èÿ$ùœ$ú< Äö¼¤øÜLäûÔ¤û”Läø dùÔô¤ø´ì¼þܤû\Ôü\$û\äù\dû ´ýLdûläûœ”ý\Èÿœ4ý\ýLlÿìTýôþ(tý$üܤûŒ„¤ù¼ Äó¼ Dõ\¬äø¼ Äò¼ Äö\´üdüÄõ¼Äô¼Äõ¼ ¤úÔýì¤ú<¤úÜÔýý,ÿD÷\D÷œäûŒ”ý,\´D„ ÿÜôý(¤øL ÿTüþœþtþ¬Ìdù\Dø<äúœÜþäû<äøÜÔü¤úœ´ü¬”ý\düœ¤û\”üÜäú¬ÿ4þL¤ùŒ$ùŒœ¬þ4ì\´ýLþœdü˜ÿœþdüœ”ýþTþŒøÿdù\D÷<dùœþ$û< ¤ùÜÄö0Ìtý\Üþ¼Dö< DõܤútþÜÄò¼ Äöœàÿtý\¤ú< Dö¼ôüýÜþøÿ¤ú\dûˆÿàÿ4þŒôü¬¬ôüÌ0´ý<Dø¼ ¤ù< Ôýlœäû\”üÀÿý´ý¸ÿtþlÿtýx´ýÌ´ýp´üL´üÜôüܬÜlÿ´œþTý\Döì($ù¼ Dó<Äõ¼ôýÿ\dú\èÿl¤úœdü$dü¬Tþœ$üœþdúì¼þìþôþ$üœDö<´ülÿdœþˆÿœþܤø< Äó¼ ¤ødü”¬þÔüäø< äú< Dô< ´ü¼ Øÿðÿ´ýtý p˜ÿ$ü”ýTþœdû ÔüL´ül¸ÿä<ÿÜþTýÐÿ¬$ú´ýœäûŒþL¼þøÿtþÄÌþìþ¼þTŒþ $úDø$úܤú¼týL\ÌtþLtý\týtý”ýÔýäTþìäû,,ÿ\ýìdü¼äûÜÄ÷dù< Äõì4ý4ýœtþLüþþ¸ÿ¬ðÿ,ÿ$ü$úœdüœäû¬ ÿ¬\ôýìtþܬ¤ûì$û´ýdû,Tþì$ütþX\ÿT¼þ,¤ùDø\´üH\Ä÷Ü$ùÜÔü|ÿ$ü¼äù<L”ýÔýTýˆÿþôüdü0,$tþˆÿÜ0ÜÔýL¬þÜ´ýtþlÿTþ”<ÿ< dùÌDø ÄöÄö¤ùD÷ŒþÄ÷¬0(\ðÿ< èÿ¼¼ˆÿ”ý< Ü<dDø $ü¤ùÄò¤øDøÄ÷dú´ü¤¤ûèÿÜdT̼ ÜTþ\ ,4þŒþ\ÿ´ýtþ$üô4þ”ýä ÿÀÿÀÿÔý\4þŒpL ,ÿŒüþœüþLL”ü¬týtþÜDøôTýlÿ4ýÔül´ýL4ýôüL$ü|ÿ,ÿ„ôÌþ@ìܤûdü\´ý˜ÿTþTþˆÿ˜ÿl¤ûÜ”üÔý4ôýœ¤û ä l\ÿ\Üþ ä˜ÿ4þP¤û0äú$üÌ,D$ú¼´ýÌ„hÐÿTþlì´ý ÿÜþ¬´üÔý¬ìþ$üÌLœþ ÿ¤Äüþì´ü Üþdû¼þ|ÿ̤ûH¬ÜÄlìLTþ Ô”ý¤û4þTþäû$üLÿŒ,ÿ$\dälŒ\ÿ @Ô4þ”84þˆÿ¼þ¨ÿŒþðÿ  ÿ¬ ÿ8T¼þìœþÄôþý@ÀÿTþ4þ”ý\ÿ¬þ ÿ ÿìþlÿDÄÔýÀÿì°ÿ@ˆÿ4°ÿðÿ`´Ä$¬,ÌŒ L Ì,¬8lÿ´ýÔýÔü$úäúäû$û¤ùTý”ütýý´ýþTþþäûtýdüdúäùdù$û$ü$l¼<üüüüüüü<¼ ìdüÄõîìèèçèìîDòDö¤ûÔýp\¼Üœœ¬T  DLÿ¬þ´üdüdùÄöDöDôÄñÄõÄ÷$ùœ< < ü| |"|$|(|&üüü¼dûDôìã„݄لللÝâèïÄóäû,< üüüüüü¼ < ÜLüþ\ÿ¤û´ýýdüäúäùDøDöÄöÄöD÷D÷Ä÷$ú¤û”üÈÿ,œœ<¼<¼ ü< <üüüüü¼ ¼< ÿ$úDôïêæåãåçêðDóÄ÷¬þ¼ üüüüü¼< ¼ ,ôü$ûÄ÷DóÄòÄóDòÄñÄòDôÄóÄóÄõDöDõÄõDødûÌ< üü|"|(|,|0|0|(| üü,Døïæ„ۄׄӄфӄՄÝâèðäøüþœ¼ üüüüüüüü<< < <œŒÔüdú$üäùÄöÄòDõDõDòDòDóÄôÄóÄö$ûôü˜ÿL¼< < < < < << \èÿ4þ$úD÷Ìþ¤úÄöÜ< üü¼ üü< ܘÿDöÄóïìêéîïðDó¤øôüdû\œ¼ ¼Ü<< <<ÜÜ@¬¸ÿýTýäútý´ü$ü$ü¤ûäûÄ÷D÷ÄõÄòDóDòDòððÄó´ý¼ üü|"|4|8|0|.|*|$¼Dôé„݄ττ̈́τӄÙçDò4ýÜüüüüüüü¼ÌÔüäøDôðDóÄö$ûÄ÷”<< ¼ ¼üܼþLäùDòîïïíÄñDötþÜœ< üü< <Ü4þD÷íêðÄôäù\üü|*|(|.|.|&ü¼ 8ðâ„ׄӄфτՄÝéÄòý< üüüüüü¼ðÿäùÄóïîïDöDøäøü¼ <üü¼ <ü\$ú¤ùDøïêêðððÄöôý¬x¬\LôüÔüdúDòDñÄöäùŒüü|$|2|2|2|.|$ü< Ôýíá„ׄτττӄÛçÄò$ú< üüüü¼ ¼ $ü¤úD÷D÷¤øÌþLä¼ üüüüü¼ (´üÄ÷Äòèçèçêï¤ù4ý< < ¼¼¼ „4þDõïêíÄð¤ø< üü|4|4|2|0|*ü< düëá„ׄτфӄلßídùLÿ< üüü¼ < L´ý¤øDôDôDòDõ¤úD< üüüüüü¼ ÿ$ú$ùDöÄñëðÄðííÄñDøD÷$û \<œœÌäûD÷DõDòÄötý¼üü|,|0|2|0|&ü< þïâ„Û„Õ„Õ„Õ„ÙâêDô¤ú¬¼¼ < ¼ÌtþÔýdûôüŒþ|ÿ œ¼ ¼ <üüüü¼ ¼Ü´ýÄòððëéçìððDô¤ùì\¼ ¼ ¼ \ÜtýÄöÄó¤ú”ýœüü|(|,|,|(|"ü\$ûÄðæ„݄ׄׄلÝãêÄóäùtþlÜ<¼¼œÌ|ÿˆÿ˜ÿ¤Ì¼ < < < ü¼ < <\,¤úD÷DôDñïìíðDòÄòD÷tý8 œÜ\ÜTìþ$ûD÷dùÔý¬< üü|&|*|(| üü\$ûÄòìå„߄ۄۄßåéïDöäûÌþô,Üœœ\Ü\œÜÜœœ<< ¼ < < < < ¼Ì¤´ýäùD÷DõÄóÄòÄñDñDòÄôÄ÷$ú$ûäû”ýtþôýÌþøÿðÿÀÿ8ÄD¬\< üüüüüüüüü< 4ýDõíçâ„ß„ßáãçëîDñDödú”ý0Ì<< ¼ <üü<üüüü¼< < <L\ÿäûÄöDòïìêèéëïDóDøôüÈÿÜœ¼< < ¼ <lP<ÿÔL< üüüüüüü< œ,ÿ¤øDòíéææçéëïDòDõ¤øäútý ,Üœœ¼< < ¼ < ¼ <¼<¼ < ¼ ÜD”ýdùDöDóÄðîíííïÄñDöäútþì\\<¼¼œÜ,dŒ\< ¼ üüüüüüü¼ ¤ùÄñìèæææçéëîDòÄõ$ùdüLÿ¬< < < < < <<<¼ ¼ < ¼ < ÜLœþäúD÷DóÄðïíìíïÄñÄôDøäûÐÿ¼< < <\œ¬¬\<< <üüüüüü< \Ô¤úDôîéææçéëíðDóÄ÷äûtþœÜ<¼<¼< < ¼ ¼ ¼<¼ < < ¼¬lÿäûD÷DóÄðïíìîðDòDõDø$ü´œ< < < < < < \¬Tý|ÿ<¼ ¼< üüü<<¼ œHdúDôïëééêìïðÄñÄô$ú¬þÿÔœÜ\<<¼¼ < ¼ ¼ < ¼ ¼ ¼ \ܬðÿÔü$ùÄõDôDóDòÄñÄðDòÄóDõÄ÷dú´ýì\<<¼¼ÜÐÿ,ÿ< < œ<üüüüü<< ìäûtþÄòêëèãâîðêìÄõlÿÌþDL<¼ <¼ üü¼ < ¼ ¼ ¼ ìdüýdûD÷DñïÄñÄóDñíïÄóD÷Ä÷Ä÷tþ\< ¼<üü¼Ü,¼üü¼ üü¼ÜDøDôÄòðêèëïDñDòDõ¤øˆÿŒˆÿtýÐÿœ\œÜœ¼<Üt\¼ \¼þ$ìpdùÄôD÷äùäøÄõDõÄ÷äúäúdùdûLÿ,ÜÜœ¼ ¼ h|ÿÌþTþ¼ü¼< üüü\¤ûdùäùDôîëîÄòDóÄóÄô¤ø”ü ÿTþdütþœÜ\ œœÜÌ”< œ,\Üldü¤ú¤û4ý$úDöDõDöDöÄõÄõÄõÄ÷dül Ü´ýÄõ\|(|"üü|$|*ü¤ùDôäú$úDñéêÄðDõDõDñïÄñDø¤ùÄòîDõ,¼ \l¼ üü¼ ÜÌÜÜÜþœ\Ôþ¤ûDøÄôÄñðÄðDõÄ÷dùäûÿ\<¼< < < < <œÜì( ÿÔýTþH,œô„ ìðÿôý¬þàÿèÿ,ÿ¼þôü¤ûdú¤øDø¤ødù$údûTýÔý4ý´ý¼þ,ÿTþTþ(DDt ¬Ä8`tܼ üüüüü<Üôü$ùÄ÷ÄõÄóDóDôDöDøäùäùDødú4ýdû¤ù¤úŒþL\,l ¬Œÿ4ýTýìþTÌ´äŒÌ¬(4þTýdüäú$ùÄ÷Ä÷DöDöœüüüüü| ü,ý¤ú¤ùDöDòÄðïÄñ¤ù$ûÄöDôÄö$ü$üD÷Äödû¤l\\\¼¼< œ\L¤,ÿ\ÿÿdüdú¤øÄöÄöÄöDõÄôDö$ù´ü(œ¼< < < < ¼ ¼ \\ìŒ@Èÿøÿ ÿþdüdúdú$ú$úäùdùäú$üdü¼þH¤Ìl¬Xàÿ|ÿtþœþœþ”ý”ýýtýœþ¼þ¼þüþŒþŒþŒþôýþ´üäúäúH¼ üü<üüü¼ ŒÔý$üäú$ùÄ÷ÄôÄòDõ¤ø$úäøÄ÷äøäùäùdûdü”üÔü4þ lŒÜÜ\\l¬,,ÌŒ¬¤$ôèÿTþôü$ü¤ú¤ù$úäûôý<ÿÌœœ¼\\̬hÐÿtþ4þ ÿ|ÿøÿ|ÿ°ÿÄ(XH|ÿ ÿTþôýtý$üäûôüýdüdüôüÔý¼þTþþ\ÿ4þÔüýtýÔý”ý´ýÜþlÿŒþþ,< <ü<üüü< ÜÄ4ý$ù$ùDøÄôÄòDóÄôÄöDø$ùdú¤ûdüTýtý´üdüdü´ý\ÿ”Ì Ü\¼œœlŒ”¬þ”üdûdûäû¤û¤ûäû´ütý¬þdlœœ\œÜ\ÜlLlœ,Œld¨ÿ4þ”ý´üdû$úäø¤øÄ÷D÷D÷D÷Ä÷dù$ú¤ûÔýÿlÿXd̬L œ,Ì, ÌÌœœÜ¼< < ¼< ¼ ¼ ¼\ÌTþdüäù¤øÄöÄõÄõÄõD÷Ä÷Døäøäùdúdúdüôý¼þÈÿ ÿÈÿ´D,œllœœœL¬,LL4ðÿÜþTþTþÔýþLÿ`p0ôl\ÜÜÜL ÌŒ èÿˆÿÜþ”ý”üdüdûäù$ù¤ø¤ø$ùäù¤ú¤û”ü4ýTþÿ,L\Üœ\ÜÌ,l,¬dtäÔ4tTTôôðÿÿÌþ,ÿTþôý¬þìþÌþ,ÿØÿ|ÿ,ÿ|ÿÿÐÿ,ÿìþ\ÿìþÔýTý”ýTýý”ýÔýtþèÿ@ì¬\œœ ì¬ä¸ÿlÿLÿLÿüþÿÀÿ°ÿ,ÿ\ÿ@x@X”|ÿüþìþüþÿÀÿøÿ|ÿ|ÿ¤dô¤häØÿTþ´ýtý”ýtýÔý,ÿàÿ”tôD´ðÿ8øÿ|ÿlÿLÿ¸ÿPÔ¬ ì,L,̤(Ðÿ¬þtýÔýTýÔü´üôütþÈÿôŒì,¬Œ´¨ÿlÿŒþtþTþÔýTþ4þÜþÈÿh¬¬¬Œl ,$8(\ÿ4þtþŒþ4ýTý”ýtþÀÿ@ôÌ $p 8Èÿ|ÿ°ÿ\ÿˆÿ¨ÿ\ÿXÌŒô´H`ˆÿìþÌþtþTþ<ÿüþÌþ<ÿÿÈÿ¤Ô¬ŒÌäD T„Èÿ<ÿLÿTþ”ýÔý4þüþ ÿ°ÿp4d¬ŒÄàÿHX èÿ ÿLÿÐÿ|ÿ ÿ¨ÿÿ<ÿøÿÔT4´Øÿ ÿüþ˜ÿ,ÿ<ÿÿ°ÿðÿ|ÿ<ÿ<ÿüþ,ÿ ÿÀÿ¸ÿðÿ`¤d¬HÀÿLÿØÿ0Ðÿ”´ØÿàÿˆÿÿŒþüþ8p´tŒ(Àÿ@p |ÿ¨ÿ ÿ¬þüþ¬þ¬þ ÿìþÿÿ ÿxŒlL Üœœ< ü¼ ÄòçêäúÔýäùíî4ý< üLÌþ¼ < ¼¤dû4þLLÐÿ4þ¬< < $ûDóDôdüdüdúÄõdúLœÜL\Èÿdú”ý´ý ÿ4ýôýìþ¤úLÿÜܸÿ¤ù¬œ¬ôüôü$û”„äû¬Ì¼¤úˆÿ”ýܼ$ü0$üÜôýdú¤ùœþd$ùDö$ûÜ„ì”üܜܜ´ý\Üd$ùL”ýÜ$üÔýøÿŒ¤ûL¬þ”ýìÐÿÄ´ý¬þ°ÿ„œDøŒ¤øäûDø¼ÌþœäÜþÌädðÿ´üLìÄõä¤úܤûlÿ°ÿìô¤(ÈÿÜ@ôýÜý”ýÌþtý´ýÄ÷ìþœþÜDøœ4ý¼þ$ûìdü\äû|ÿ ¬ÌþŒLÿÜýLÿ|ÿŒÐÿl$ü$üÜäø\Äô$üŒŒ”ü tý¼$ü„,Lÿ\$ü¬Tþ¸ÿÔýþ´üþüþlÿÜLðÿ \¸ÿ$ü ¤û”äù ÿ$ûD¤úÜäûœôü¼$ü\tý\ ÿ ¤dû tþ0ýÜþ˜ÿtäú\$ûØÿ܈ÿ¬,¬¤ùèÿTý,týdüœ4ý\äúœäù¼dûŒàÿ¤lìþœþdû„týÌ$ü\4d¸ÿðÿÔýœ$úý<ÿÿøÿÈÿläûÜœþÌätþ`œþôýÀÿþôý0Ìþý¬äù$üÜTý\äû\dü ô”ý´èÿŒþÔTþ”ÿt\ÿTdÌ$TÔýŒ”ý¬$ü,$üŒdùLÔý¬´ýìÄÌŒ ,ÿldü¬Tý”týÐÿdûD$ûŒ$ûÜ”ýÌþœŒ¬ÔýŒäûÌý¨ÿÔýŒôüÌþtÔüT”œtþÔ´ĬþŒþä´”äúDˆÿTøÿ4þlÜ0Œ”ý ìþÌþ4ýÐÿdüLdúlÄ÷¤ûœlÿÌ$\¬Œ ˆÿÔýtþÌþtý̈ÿ4þŒôü0ŒþŒX„<ÿ¬´ ÿ¬Àÿ´ýÜþ„\ÿÈÿ4þ¬øÿŒÌLD4þ\ÿÐÿ`ÿüþdúdü¤û ¬þÜþÌýœÔü˜ÿüþ¤û\dûläø|ÿ,ôüœ,\¤ú¼þL,¤úd¤ûLäûÐÿ´ýÌ´tþÄÄ`Tþ\|ÿ¬þ$¬ÐÿÄäúìþ´ü¬ÔüpTþÜtþŒ$tl¬´0 ÿLôýl$üØÿŒTþ¸ÿLÿœ¤úLäú$ûP”ý¬t”ýÀÿìtýôdü`Àÿôüäúœ¼þþ„ÿlÿ@TþÄLÿ¤ûìþÌ$$èÿÌTýüþÿtþÔý@„äûôtýܤûltÌþ ¸ÿÜÜþÌ4þÌä4þp ÿpäûlôýèÿlÿ,ÿ,¤ÌLÿØÿÌôýlÿtýøÿŒ4ýœ¤ûôýôýXðÿˆÿ¸ÿäû¬¤ûœ¤ûTþ,Ü4þ¬ÔýÜdûl´ü¬$ûì¬þ¬lÿ ”ü ôüLÿdøÿ` dü äú\”ütþTý$üþL´üœüþTp¸ÿtÈÿÌüþ¨ÿŒþ,ÿý”dû¬ôý˜ÿD¬ììÈÿ¬ÔܤûL”ýTdù˜ÿ4þ˜ÿ´dü,ôý\tý„TþÄ d($üÜdúÌDøìÜþ¬Tþtl œ$üÄ´üÿ¬Üþ¬LlHTþ¤Tþtþ$ôüìÔý,ÿdütÌþlTýDlÿ,”04þ\ÿŒ$üœþ$$¼þ0ô\XL¬4ìþ\ÿÿÈÿôý ÿœþ¬äþÔülpŒ$ü\ÌþP$¬8<ÿTýŒÌþ,ÿÿ”üŒtý84ý Ìtý”ý ÔýŒ´ü\P˜ÿ”üœþLäùÜdú¬H<ÿd$üœÿÜTþ¬œlÿþLÿÄLÿ<ÿÔü$Üþ ÿôüHH”ŒtþÜþ¬t”ý 4ý´4ý 4ý,$ûäìþ0¬¤û\´üœ¤ìôý\TýðÿTý´´ü,ÿtýDàÿäÐÿ0ìŒØÿ4þlÔý¼þtÔýäøÿÄ÷Tþdüdûœ¤ûýÌðÿœLÿdüL¨ÿ Ôü¬äû\4ýÿŒÄ÷Üdû¸ÿÔüÌÌþ (¤lì´ Ðÿ$üØÿ´üŒþ¤ú„ì,ÿ °ÿ ¬ŒþÜÌ´ôý$”ü|ÿD÷äû4ýäTýTþì\ÿ\x Ðÿôüý,ôüäûŒþä\<ÿÿÜìþœ¤ÔôýýTþ4þ´ý$ü<ÿ¼þÔüÄTþÌÔ,¤ú ÿ<ÿP$üLÿœlÿôüô ¤ˆÿüþ ÿ,ÿTÔLÿ¼þ¤H\ÿTý|ÿD”œþÜþ„tøÿ ÿ¬Dì4þtýtýÔýðÿTþô$üD¬4þ ¬\œôýÔü̬þ”Üþôý”ÜäûDøøÿ ÿ̬¼þ”œÜÌþ˜ÿXP´¬þ¤ú„dü\ÿ”ôü¬ĘÿÌÌ$Ìdû$ü¬”,ÿ$üä,Tý”ü¸ÿì,´üDÜ\ŒDHìÔ4ýlÿÔ<ÿäú$ü¬Ìôü”üì\Hôüœ\ôüTýœþÌþtýäú”ý$̬Ìì  ”ý4ýÿÀÿ¬þüþÔÜ ÿPtä,àÿ<ÿÌì<ÿ4ýTý¤ûdùPÐÿþ,ÿÄÌ„´Ì$Dì¤Üþ\ÿÄ”èÿ\ÿ ŒŒþdüÿHLÿ ÿ ÿ ÜÌ$ l,dxÿŒþÔýÔüdü$û¤ú$ü´üdû¤û”üôüdü$û$û$úäûTþ,¼¼ < üüüü< <œ0dùÄóÄðÄðÄòDóDôDø”üÐÿä¤ðÿèÿÐÿôüäúäú¤úäúdüýTþ¬LÌLœ\œœ< < ¼ ¼ ¼ < Ì4þ$ûÄ÷ÄõÄõD÷dú$ütþÌœ\Ü´¨ÿtý$ùÄôDõÄ÷DøDø¤ù”ýŒÜœ,\LÄTþdû¤û$üÔý,ÿœ¼ <ü<<¼ \4ýDöDôÄòDóÄõäùdûLœœ\ ìþÔüÄ÷ÄöÄ÷$ù$ùäû¼þì<¼<\œÌœþäú$ùDødùdüôýPܼ< ¼\\4þDøÄõÄõ¤ùdúdù¤ûŒœDt,Œ4ý$ü4þŒ „ÀÿÌþ”|ÿ¤ûdû”ü ÿ,\¼< < < ¼ œL$ü$ûD÷ÄõDôÄ÷¤û´üÀÿ´Ü\4øÿþôü$ü¤údúdùÔü´ýìþÀÿdL\œ4ôllä8D4lì´Lÿ”ÔýÔý´ýôü ÿ´t¸ÿŒœ,|ÿ”xüþTþ¤ûÔü¬þÿŒlœ  |ÿþ$ütýÔýÔýìþ¬Ì´´  0¨ÿ¸ÿ ÿèÿH<ÿŒþ ÿlÿLÿTþtþ`lÿ´ý”ý4þÈÿhP $ŒlŒ˜ÿLÿ\ÿpH`¤Ì¬Tt<ÿþ(äÈÿTþ´ýˆÿìÌ ÿtþ ÿPx¬þÔütý|ÿ¸ÿppPd t\ÿ,ÿ,ÿLÿ¸ÿTdx|ÿ<ÿøÿÐÿtþXŒLôÄT4TÌþ´üýTþtýôüTþüþ$ ìÀÿ” ÿTþôýLÿppDÜœd\ÿ,@4þTþÔý´ýÄ4ý´ü,ÿtôðÿøÿ̬Dtþ ÿ$X|ÿœþ¤ˆÿœþìþtýpäˆÿ4þÌìŒþÜþüþä ŒÈÿÀÿÌÄ4þtý(Lÿ´DdDÌL””ô4¤þÌþ@ ÿÔýTý,ÿ˜ÿ˜ÿôýTþ0t4X4Ddhüþ”ýÔýÿ˜ÿ\ÿ´,,¬øÿ¼þüþLÿÿP8øÿ„¤8ÐÿÈÿ|ÿ ìþtL¬ä´Àÿ„„¸ÿLÿÔýÜþÔ4LÿþþìþÈÿ ÿLÿ4,l,Œ¬ÈÿþtýÔüÔüdüÜþÐÿàÿ|ÿÈÿ <ÿàÿDŒœlİÿ¸ÿ´\ÿTþ„ŒtPÿtþÔý ÿ4TþTþd´„htþ,ÿ(Ìþ˜ÿ$$èÿüþ”ýý´ýôýôýLÿÌÜÜ Xpœþ´ü´ü4ý¬þÔÀÿ”ü ÿ„¬ÀÿÔl ì,L ôTþ”ü´ýTþÔýŒþ4ý4ý´ý4ý$úäûœÜ¼ÜÜÜdú¤ù¤ú¤û´ü°ÿ œl(4ý$û$úäú4ýìþ´\8tþ´ý$üäûTþĬ XtÌœþtþÌlÔ”ýtþ4l84þ8Ì èÿÿÔüü<œÿ ”dûÄôDòäø„”Ôüˆÿì¬Ôý$ùÄö¤ùtý4ýÔüàÿÜœœô$üÔý(ÿôýHl\ì$˜ÿTþ¼þÔÌüþ”l\ÄtýÜþŒlÿ¤û¤úôüLÿtþ”ýÔý0,Œ<ÿ4þ”lxÜþLÿ\ÿp|ÿôüÔü|ÿ¸ÿ´ýþœþLÿ(äÄ0$ Ültdôþdû$üÔýŒþðÿD l¬ˆÿ4ý¤ûdûdüTþHDìÌœ¬Tþdû$üàÿܼ <¼< Ddü$ùäù¤û$üTýD t ÿdûäùäú¤ùäùýÀÿô œ¼ ì¤øäûÔý4ý´üÔý”ü\< Üh ìþ ÿdû¤úh< ü¼ ´¤údûäøDòíð$ü\Ü < ¼0äø¤ùŒ< Üܼ¼ ¼ \tþdù4þÌàÿdütýÌþìÄDøÄ÷Ôý,ÿ”ýTýÔüˆÿ¬düäû´ýTþŒþýÔü\ÿ¬ôÿ,ÿ,œLdü$ú´ü4þ4ý¤ûdüèÿÌŒœþýÔý”ü”ü”ýøÿÜ< ¼ ¼ üü¼ < \´œþdüäøäùdü´ýÿ”ÿ´üdü¤ùDöÄôÄôDöäø$üŒþÌÜ\l,Ęÿÿþ¬þäŒ,,ÜlL´°ÿœþTýtýœþԴ̬°ÿ<ÿtý¬< < lä`ýäúDöDóDö”ýüþ”ý4þþ”ýôüäùDödúÈÿDŒœ¼\,¼\œ<œ,Lÿtþ´ýý¤û¤úäú¤û$üäû$ü¤û4ýä lÜœ\¬„\ÿTþ\ÿàÿÿ ÿ|ÿtþtýýtýtý4ý¤û$ûdüTý”üäû4ý\ÿ0˜ÿÐÿ„ŒÌ ¬Ü\œì,ì Üœl´ýäùäùdûäúäù´ýHLœ¬lÿÜþtþTþ(¤@ \œÌÔ4þTý´üäùDøäù$ûäûœþ ôì\Ôÿˆÿ¨ÿÀÿèÿ@¬¬Ôä”äD,LœÌ4èÿœþþÔýôýþLÿÄHØÿ¬èÿ,ÿÈÿÄ Dlÿ<ÿÿŒþ”ýTýTþ”´ Øÿ$Ì$”t$0àÿlÿ”ý”ü4ý´ýþÿ@쌌DŒ|ÿÿ lÿôÿìþÜþ´ý,ÿtD„Ô´àÿŒþ˜ÿ¸ÿ ÿ4þÿÌÌL<ÿ( lÿÌþtþLÿÔ¬¸ÿÿ ÿDTþtþ|ÿôüœþTþTþ<ÿ`ÀÿÌ$(ôœÌøÿLŒÌþdÔtþtý4þ”ý4þpˆÿP̤ÌìÔtØÿœþTþŒþŒþTþÿ¨ÿ<ÿèÿ|ÿ¨ÿPX\ÿÜþPTþ”DŒþ´ÈÿììLÿl̤ììþxèÿ¤¤,ÿ´Ôý0äú4þ<ÿÿŒÈÿØÿ¬LÿÌþ4þÔýô´ýTýlÿtþÌ(hœÌ˜ÿ\<ÿ˜ÿ ÿ|ÿtýÌþÜþ|ÿlÿÌôœþL,ÿþ$@¬ÌìþŒþh`´ü”üþôý¬þ4,tþdL ðÿŒüþ°ÿ,$üþäØÿ¸ÿX¤Èÿ”¬þ4þ ÿÜþ8pt¤¬,ìÿôì ÿ|ÿœþÌþìþlÿdü4ÀÿlÿàÿTþÌ´¬ DìôýxÀÿ¬þÔýdýtýlÿDôŒtþPôÌþÔý`´üdü ÿ¤(œþ ,œÜìœ ÿ¬”üDœþ,ÿ¤ù44Tþÿ,ÿlTþÜ4èÿ„,¤ûLÜþX´üì4ýÜþh´üTHÄ´ýì”4ýäüþ\ÿ ìþLôýÜèÿ|ÿlÿŒ\ÿŒ4þ\ÿìÔý$ÄÈÿ¼þ8àÿÀÿ8 ÿüþ\ÿx,DôýÌŒÿÜ”Týlÿtþìþ ÿ¨ÿ4þTþ°ÿtþ°ÿÿÿtþ$|ÿÔLÿœþ$¬´ýœ|ÿlÿèÿLÿÔÔ4þ¬ ÄìþÌþ¬Týœÿ¬4”ý¬týäôýL”üüþH|ÿ´ü,ÿàÿTý”ýŒþ\ÿÌÿ  l¤´¸ÿ„ÌôýT<ÿ¬ìþ„D¼þôìþÜÔü”,ìþ¤Èÿôüdü¬þœþtôýì”ÄÌÿLÔýLtþÜÌþ4´üÿþþØÿÐÿ„TþLÿìŒ „ ìþÜþ¬Üþ4Tþ44þÔýìTý”(þ¤´TþìÜþä,ÿÈÿt¼þØÿTþlptœÔüœþlþ<ÿ¬þ´üþÿd¤<ÿœþdt0ìôÌþTþôˆÿŒþœþÿÔüŒìÄh,ÿŒôýl4þ4tüþ `¨ÿ ÿLÿHtý¼þH¤û ÿ ÿøÿÐÿ”„0ìÌþ¬LÿtTýøÿ|ÿÿ¼þˆÿÔÌDìþì¤ìlÄ$üÜTþ¬Lÿ ÿìÔüÄ$ùìtþätþ¬þ\œþl¬þDTtdûxŒþ\ÿÌþtýœþ Üþ¬4þœ8ttTþÌÔdüLÿ¨ÿÿt$ü,ÿ(L¬þÄ|ÿä,ä4ý¸ÿä´ìþ¤ŒTtþtýìäTýÌ8Üþ¤üþ`<ÿlÿŒþìÐÿ„àÿ<ÿ\ÿýœdü@¤\ÿØÿ¤,ìþlLÿp@(¼þäû”Üþ4þÄ@ìþì ÿälÿDÔüœÄdûllÿDTýLÜþìþüþì̘ÿŒþLÿ|ÿ”ýt|ÿdlÿ4ýœdûÜX ÈÿTý”týäÌþXèÿ$düüþ,$üÌŒþ ˜ÿDlÔýœ”ü¨ÿD¸ÿþœTýT´ý`äúDD´ý¼þ¨ÿÌ4þ¬ôüÌtþþäœtýÌTýlä¬ìþ Tþì(\ÿ<ÿŒþ,4´düp”0Lÿ”ý4Lÿ@üþÿ”,$düèÿÌĨÿ¬Tþ`llÿÔý„ÄŒþ´ü”üœþ@T4þL$Àÿܼþ\tþtþÔýüþ„Ôültý4”̬ÿLÿ  ÿ¬Äl ÿäûðÿ¸ÿ4þ$üØÿ$ü$ÔüÔütœðÿ¤DÔLlTäû ¼þìþÔ´ ÿþ̤ûL ÿôýøÿ¬üþþœTýÜÔýŒÔý TþŒþœ”ü ýô4tÈÿDìŒþ, ÿtTþ”ðÿ¤ðÿÔý4þTýÌ,ÿ ÿ¬þP,¤,ôÔP¬´pŒD¼þÔÔýìþ¸ÿäú\ÿ$û ¨ÿ´ìþ¬P DŒÔäLÿ¬TþL@¤Ôýþ„¬þÔüÐÿ ÿL´Th¸ÿPD(þÔ Xøÿ ÿ|ÿ„ Üþ¬Ìþþ<ÿ,\ÿ,¬DìÜDÔ¼þ4ý”ý4þôýlÿ¬þìþˆÿX ÿÌþ¤0œþÌþÿLÿøÿüþô„ˆÿLìŒl@Œœþ ÿÜþ(ìþþ¨ÿ,ÿ œþ\ÿÄ`ŒÔ4PlÔ,ÿP¤ˆÿþÿìTþ ÿÌþ¼þ˜ÿþ0¤$ÀÿdpŒPˆÿ ÿ”ýÜþôýtþüþ`hŒ¬D|ÿT”ôtý\ÿ|ÿTˆÿÿŒþ°ÿ<ÿÿŒxä°ÿŒ tþ ÿ,<ÿØÿ,ÿDþ<ÿüþ˜ÿ\ÿTþ¬þÄô„x¬Àÿ´\ÿŒ¤80$ÿ ÿ¸ÿ<ÿ\ÿ¼þÐÿ@àÿ Ôô¬H¸ÿ˜ÿ,ÿ4þŒþ ÿ”$ÌøÿðÿˆÿØÿ4þplÿ`Øÿ°ÿdÄÄ„`X`œþ¼þTþìþ„|ÿ ÿ ÿô(̬ddô˜ÿ ÿ¸ÿLÿœþ¼þ0„ÿþTþ,ÿØÿLÿ˜ÿ”Xðÿèÿ`´h´d¬ÌT´Tô|ÿìþÀÿØÿlÿTþÌþÐÿ|ÿäÔ´”ä,ÿ<ÿ\ÿ°ÿðÿ`X¸ÿ|ÿ(¸ÿèÿ°ÿ\ÿ ðÿØÿÐÿH¨ÿ¬ŒìþÄt°ÿ4þ,ÿœþôý ÿLÿÐÿøÿ´„Hp„`0øÿÿˆÿÐÿüþŒþ<ÿ8¤”ô¤$$DÔ¸ÿ ÿÿìþŒþ ÿüþ|ÿp44„Ô”Äx``(p\ÿ¼þ<ÿ„ Tþtýèÿ ÿ¤øH<ÿ´üìý¬ ,Dì´Œ„p ¼ œ4ýÄ÷XÄõ$úD÷$üôü´üD4Ü\tœì\dŒ$¤<ÿ<ÿèÿ´ýTþôýÔýþ4ýÜþtþàÿ¤dlÄŒÌÌ\ ,tŒÜþŒþ<ÿdúÔý$ü$ü´ý¼þÿ\ÿøÿh„t4Ô<ÿ,8Ô 8äxˆÿ°ÿhhØÿP |ÿØÿ`ÌþìþlÿTýœþ4Tþ8ˆÿÿ¨ÿ¬þÈÿèÿÀÿÀÿtlL @Ì\ÿäØÿ„èÿÄXüþ¤ŒþÿŒþTþÜþ4´ý¼þðÿtý<ÿpŒĘÿðÿìÀÿ䌤LT<ÿ`|ÿ´ý¨ÿþ4ý¼þtþ0„˜ÿlŒ´ì¸ÿÄôý0\ÿüþÌÔý4øÿÀÿp<ÿ`4þðÿÿ”°ÿ¬`œ< 8P¨ÿ´ýäù$ûdù$ú¤ûdüLÿŒþ4lœì\\ì Ä@ôý´ýýdüôýÀÿÐÿ¤¬ŒìLì´Àÿ<ÿ°ÿÀÿÌþ´ýþ4þtýþìþˆÿ¤4¤@8”<ÿìþÿ4þôýlÿøÿ`pìDdt´T¬ÄŒD¤¤üþÿ,ÿÌþLÿÌþ¸ÿ°ÿ ÿ°ÿ ÿôýÌþ°ÿLÿÀÿÌþ\ÿ˜ÿÌþ´ý”ýTý4ýtý4þ„Ĭ ¬TL,,Œt¬LœÜÜÜÜœÜlÌ0tþdüäúäùäøÄ÷D÷ÄöDødù$ú$ü”üÔýLÿtþŒþ ÿ ÿÜþÌþ´ýìþ4þ¤û$ûTýŒþ ÿœ<¼¼ üüüüüü<¼ œdûÄõDòðíììíïÄðÄòÄõdù”ü ÿ ܼ¼ < < ¼ ¼¼ÜLìLÿÔýdüdúäøäø$ú$ùdùdú¤û¤ûdü¬þÌþlÿ,Üœ< ¼ ¼ <ü<ü<< <œì¤úÄ÷DöÄôDòDñDñÄðDóÄóDöÄ÷dûÔü”,,\ÜÜ ì<ÿ ÿôýäûdúDøD÷ÄõDôDõDøäù< üüüü|"üüüü¼ L ÿÄöÄñëêçæçèêëDñÄóÄ÷äùtþ Ü< < ¼ <üü¼ < ¼ ¼œ,Ôü$ú$ùDõDôDòÄòDòDôÄôÄ÷$ú´ü|ÿäL,\<Ü̼< L< ¼< ¼üü<<¼ œìdü$úÄóÄðïíêìíîÄðDó¤øäûtþDÜœ¼< < ¼ < ¼ÜLÜþ$û¤ùÄöDõÄóDôDôDóDóÄòDôÄöÄ÷dü¼¼ < üü| |&|,|&|"üüüÜtýDôëäá„Û„Ù„Û„Ý„ßâèîDòÄöôýܼ¼ üüüüüüüüü¼ \Àÿìþ¤ùÄõDòððîïîïÄðÄôÄöÄ÷dú´üœþ4þ œ\< <¼ ¼ |"| ü|$|*|.üü<< D÷„߄ۄׄфń˄ׄۄÝæÄ÷¬Ü< ü|"|$|"ü|"|"<L\œðïDñDñéæíîÄðìÄòDøÄöDñDó¤øÄðííœL|$|:|8|<|Y|Y|A|:|2ü ÿð„Û„Ï„¾„®„®„¶„º„º„Óæï´ýüü| |(|(|$| üüü¤ûœýÄñÄõ@DøDôTý¬þäùDóÄöÄóìåæè„ßáçëçídùüüü|A|]|Y|I|m|i|:|0|$ü„݄ՄĶ„¦„–„ª„²„º„Áçdúþü|(|.|&|.|,| üü< pÈÿäùäûýÄöÔü\ÿÌþÄöý$ûðíëæ„ۄ݄݄ۄÝäëíDõÌü|$|4|U|a|e|e|m|]|A|2üTþ„݄Ʉº„ª„ž„š„¦„ª„º„ÍäÄõü| |(|&|&| üü¼ <ý@pܼ ü<< < ÌdüDóîä„ۄՄӄӄτׄßèíDöTý< ü|"|:|a|]|U|u|q|I|A|0üì„Ù„Á„¶„¦„–„¦„®„¶„ÃãDô$ü<ü|"üüüü¼ äœþ¤ûdütþüüü| |$ü¼ < ¤úëâ„لф˄˄̈́ՄÙåDõ4ý¬<< < üü|$|A|Q|E|Y|q|I|8|2ü¤øâ„Õ„¾„º„¦„®„º„¾„Å„ÛÄõDó¼ ü< ¼ < ÜÌ üüü|$|*| üüüdùÄòå„لф̈́ффՄ׿íð´ü¼< <¼ < üü|.|<|M|U|I|]|E|*ü< Äð„ττº„º„²„º„ń̈́ßãÄ÷”ü ÿœ< ¼ ܼ ¼<Ü<¼< ¼ üüüüüüüü\$üDõì„߄ۄׄӄۄÝáëD÷dú”< ¼ \ÜÄÿ¼ üü|0|A|I|I|A|I|,ü¼Ä÷ë„τ˄¾„Å„Á„ńՄßëêäùLÿ¤¬Ì¼Œ\,Ü<œ<¼ üüüüüüüü< ¼x¤øDöìãáäãäíÄõdûìþœœ¼œÔý$ùDõDóÄó¤ûÜü|*|2|4|>|<|0|$üüdÄôèã„ۄՄӄׄÝáåèìDòÄõDø¤ú´üýÔýÌœlܼ < ¼ < ¼ < ¼ < üüüüüüü< ,$üD÷Äñìéæã„߄߄ßâåçèéìDñäù\ü|(|4|<|E|I|E|A|<|0|$üÜDôæ„لф̈́̈́˄˄˄̈́фׄÝãëÄòäúì< üüü| |"|"|"|"| üüüüü¼ < ,dûDóíèâ„߄݄݄݄݄ßäèìïDóDõD÷äúìü|"|,|4|<|E|A|<|8|2|$ü< ”üì„߄ׄӄффτ̈́τӄׄÝäêÄò$ûL¼ üüüüü| | üüüüü< ¼\ ÿdüdúDöDòÄðÄðïíîîïDñÄóDö$ùdúdù¤ù¤ùD÷DõÄòÄðDò$û< üü|"|.|0|.|0|.|(| ü¼ ,ÿÄòêã„߄߄ۄللۄÝâæèìDò$ùœþLœ¼ üüüüüüüüüüüü¼< ÜLÔýDöÄñïëèæçéìîDñDõ$ù´ü<ÿlÜœlôýäøÄôD÷üüü|$|(|$|"|&|"üü< 0Äòìåá„߄߄݄ۄۄßçìðÄòDø”Ü\¼< üüüüüüüüüüü¼< , ÿdûDôîëèçååèíÄðDôÄ÷$ûPl\œ< üüüü| |"üüüüü< œ”ýäøDñêæãåãâ„ßâéëïÄóäøtý \<¼ üüüüüüüüü< ¼tþDöDñëëåááåå„ßäèìïdúü|2|$|0|E|E|6üüü< Ä÷„ßïîé„Û„ßîðîæèîDõDñDñÄ÷\¼ üüüüüüü< <¼œpDøDôDòÄðìêìðÄóÄöäû,¼ <üüüüüü< ¼ œ¤ûÄöÄôDõïïîðÄñïïDòDóDöÄ÷äøTýÌ<¼< <üüüüüü¼ <¼¤$ü¤ùD÷ÄóÄñDñÄñÄñDòÄôDødú$üÿÌ\¼¼ <ll\ÜŒ, ìtþ¤ûäú$úD÷DôÄóDõÄõÄõÄóDõ¤ø$ú¤û¤û”ýŒ< üüüüüüü< \\L4ýDøÄõDöÄ÷DöÄóDòÄóÄôDôÄòDòDödú”ü´üÔü\œ\\\< ¼ ¼\Üœ¼ œ$ûdüäûdûDôDòÄôDö¤ù$ú¤ûìþd\\ܬ\Ll4¬ L,$,ÿ ÿTþþ¼þÈÿÔ ˜ÿ„dD´LÿtþTþ,ÿˆÿTþ4þ¼þÐÿüþ”ý4þL$$ , 0ŒþÔýþôýtþtýÔü´ý”ýtý$üdú$ú$ùDøÄ÷ÄõDóDôäû< üüüüüü< T¤ûTþ4þdü¤úäø$û,ÿX0$úDöÄöD÷ÄôDñÄòD÷$ü¼þ(윜\ÜÜÜ\ÜœLxTý$û¤øD÷Ä÷Ä÷D÷$ù´üT\ܼ< ¼<¼Ü¬„\ÿìþtþ”ý”ýôýþ”ýôü´ü$ü¤û´ü”ü´ü”ýtý,ÿ$ìœÜ  lœ,Àÿ ÿŒþœþ¬þtþtýdüdü´ü´üäûäú$ûdûTýÔýìþ ÿ$,œÜœÜ\ÜÜlÌœdx¼þÿˆÿ,ÿP<ÿ ÿTþtþtþTýdü”üTþœþTþ\ÿlÿ<ÿ|ÿ,ÿØÿ”øÿ ÿ Hèÿ´$l,ìÜì tÔÄÿ ´ÿ\ÿ,ÿÈÿTþ4þ¬þÔýdü$û$ü”ütþÌþ<ÿÄìÜ ¬,,DŒ¬d0<ÿàÿLÿŒþŒþLÿÐÿ„°ÿˆÿ,ÿôý<ÿ¬´¤ÔDtÿ ÿ¸ÿlÿtþÿ ÿ¨ÿx0 ”xÈÿ\ÿLÿlÿ<ÿxP˜ÿØÿ0h<ÿ¨ÿ¸ÿ¨ÿH@ôD$Ô`ä˜ÿ<ÿ ÿ¨ÿÀÿtþ¬þTþLÿô´T,ìdô„Hìþ4þœþ4þþTþÜþìþ¼þ,ÿèÿ8¨ÿ0ÌìÄ$Œdxx`8ðÿÐÿlÿ|ÿh”@(„0 ÿ4þþtþ´ý”üÔý ÿ´ý4þ\ÿ4¬Ìll¬Œt`ô,,dÄÔ´àÿ,ÿÿ´ÿÔý´ý”ýÔü$ü´ütýôýTþÿlÿ¼þ<ÿ´ôTlœLlìÌ ¸ÿhô¤@ðÿˆÿtþôý4þþ”ý´üdüÔütýtþ|ÿHìLÜœ\ÜœìL<ÿŒþtýôüÔýþ4þÜþ<ÿ¨ÿèÿ ÿøÿ„ôx,ÿ4þ4þ´ýþœþœþ|ÿäÌÌœœœ, Ì„üþþ4ýôüÔüTýTþ<ÿpT,Œ ì,Dlÿ ÿTþôý´ýÔýÔý”ý¬þ|ÿ|ÿðÿ(ô¤ä`ädH|ÿ ÿÿÿlÿÈÿôìlììL$8 0ˆÿüþ¬þ¬þ ÿÌþ\ÿP”D`¨ÿ„°ÿÌþ¼þÌþÿüþÿXÐÿìþœþ¬þ¸ÿèÿÐÿXÄ8lÿàÿxÔÔ´äÔ´xèÿh$”høÿpô„Ä”ðÿÈÿ@„Lÿ ÿ,ÿtþìþlÿ\ÿlÿÄ$0x¨ÿ¨ÿlÿÿÐÿ lÿüþüþüþèÿ”¤T¬Œ´@””x˜ÿ ÿlÿ¼þtþŒþÜþLÿLÿÀÿäŒtt”p ˆÿ|ÿ˜ÿìþÿ\ÿ\ÿàÿH¤DŒÌLŒÌØÿèÿ¸ÿTþtþtþ¬þœþ¬þ<ÿ\ÿÿlÿØÿÔ””ÔôäÄ´(``8”8lÿtþœþ|ÿÿ,ÿP`Ðÿàÿ8”„Äô ¸ÿ\ÿ\ÿˆÿüþüþÄ$@(¨ÿÐÿXØÿ”D¤Dtô´xˆÿ ÿ|ÿlÿ,ÿ¼þ¬þÌþ ÿìþ˜ÿxðÿ`h´DÄ”ôÔ4ÔH(ÿ,ÿˆÿÿÜþLÿàÿ°ÿ\ÿ<ÿ,ÿ˜ÿØÿ°ÿpôôxX8Àÿ”èÿ˜ÿ<ÿ¸ÿ„@ÔäôX@`°ÿ¬þìþ,ÿTþ¼þàÿðÿ`ôTÄP´( ÿ ÿþÜþ|ÿœþ|ÿ”0ðÿ TlÜœ ¼< ÌþDôDñ$úÔ$üôü„Ôýdù¤ûôüÔýäûœ< ¬ÐÿœÌŒÔüŒþœþˆÿþT,,Ì,\d¼þ@èÿh<ÿ(XŒ\¼àÿ$ùDõ”ýäû|ÿDòD÷dù\,”´ü< \äûœþŒÜÔüDôôý\ ”ý$ûþ¼œH$ü4\XdúÌÜläú”ý”4$üˆÿ$üD$xdll¬LÿŒþôü Tý´ýDø´ýÜœþÔýý”LœÌþäd,tŒþtþ¬T4þ ÿÄœpÔìþ”D,(Tþ¼þTýÌTýdüÔýˆÿ4ìþ°ÿÿHlÿŒ`ÌldüLÿèÿÌþŒþ ÿ,”ý ÿDTþ Tþ,àÿÌþÿ$ôýþTþŒ0$ìþLtìœìþÀÿtýÔü|ÿTýLÿ ÿ<ÿ<ÿìÔ, ÜþD „l”üX ÿ”ý|ÿTýœþTÔ´ ÿ̬øÿtýä$¬œþ¼þÄl¤ìþ,ÿþL ÿHtþÌþ„Xlÿþ¨ÿÔÔ˜ÿ4þL´¬TýŒH0P ÿŒ ¬Ôý þ|ÿH8˜ÿ ÿ ðÿŒ`40„ìˆÿ”¼þ”,ÿ Tþ4þ8|ÿˆÿtþ ÿ ÿ”Lÿ\ÿŒþ4ÔÜtdìÔ4þÈÿLÿtþ4ý”ý´ý,ÿtþ|ÿtþ\ÿ ØÿŒ, \ÿ¬Lÿtøÿ ŒÄØÿÌþ<ÿ|ÿtþlÿþô¬þ¬þìþôýœþìTþŒàÿt$Øÿ¤L<ÿ”¨ÿÔýh¼þÌþ`,ÿ¬DŒŒdÜþ”ý ÿÌþ4þ´ý´ýlÿ„ÌþÿÿL\ÿÌØÿÌ|ÿþ4”üˆÿìþŒŒ¨ÿ\ÿÌ”,Lät”tþXüþþÿ4þ,ÿ´ü¨ÿ´ü|ÿŒþh èÿ  ì`4<ÿTþøÿtþØÿàÿTþlÿðÿàÿT¤XL, ÿÿ0œþTý<ÿý„äû”ôýp°ÿ,ÿ,¼þlþL¬ÿD,Ì„°ÿ|ÿpŒþØÿTþÌ`¸ÿ@4¬þ”ý,lÿŒ¨ÿ<ÿt4þ8$ü(tþ$LÿÔ ÿ¤Œ¬¬ì¬Ôôý¨ÿôýþÔýtýXôý|ÿLÿ ÿô0(@àÿ$ÀÿÜþôøÿ¬´ý$ðÿôĤŒÿLÿÌþD”lÿ”ôxØÿøÿìþôTþtHX@ÌþŒxLÿøÿ ÿ|ÿ ÿÔü4þtþüþðÿLÌŒŒÔ¬ôýTœþätþìþLÿÀÿ¨ÿ\ÿx ÿ”Ìþtþìþ´lÿ lÿ DŒd|ÿŒÿ„0ô°ÿ”XHˆÿTþÔtþlÿ,ÿðÿìþ<ÿÿtþ\ÿP„Tlÿ˜ÿ@xØÿ´˜ÿ,Äàÿäÿ¬ ÿÿ0þÄ|ÿDdä\ÿlÿ´DT,ÿ$tþŒ”ý\ÿtþŒxÈÿ @LdüþX4ÔTþœþþôý ÿ ÿ ¬þ\ÿÐÿœhŒàÿŒlÿ°ÿÌþ´¸ÿ¨ÿ°ÿÀÿp¸ÿðÿ`Lÿ¼þ8¬þt<ÿÌŒðÿädÿ°ÿ ÿ ,ÿLÿT@ôÐÿ̘ÿì¸ÿ¸ÿÄôýÔ´üÔ4þŒôý<ÿX¬þÜþDļþ„ìþÌp lÿ ôýŒøÿtþ¬4ýŒ<ÿ,þ¸ÿ¨ÿðÿ|ÿÿØÿ8 ÿ(Œþ@H0,ÿLÿô ÿ¤ôý¸ÿtþLhD<ÿp ÿPœþøÿlÿ¤ÿ¤Øÿlÿä`d„LÜþLÿÐÿŒÔü4¸ÿì,ÿtý”ôþÐÿ´` ÿœþ”Tþtýèÿ¬þ„°ÿ,ÿ|ÿ8äÌx,” ˜ÿ”ÿàÿÿÄTýLÿP$Èÿ|ÿ|ÿ|ÿØÿ`hÄ$tþ(¸ÿÔÜþ˜ÿxÜþÔìþäþðÿðÿÄÔŒ<ÿTpÿÌÿèÿ4þ ÿìþìþ” ÿ¤ôlÿ8 ÿ\ÿ ÿ´ýŒTþÌTTþ ÿŒÄüþTìþ4Øÿ,ÿÿ\ÿlôý„èÿ ô`ˆÿHtþ´¼þ ÿœþ4TþÄtýÔäD¨ÿ”ý$ô$Ô(htÀÿ8¨ÿ(lÿ Üþ0lÿ|ÿ¬¨ÿ Üþ ÿp ÿ|ÿ,ÿÌþ ÿÜþ¼þ”ðÿ4 ÿ,¬ÌÔðÿÈÿ ÿ¨ÿ¨ÿ,ÿ ÄtþhœþÌ4þ¬DŒ`düLÿtþÿTýèÿŒ䔤üþ\ÿDtþŒŒäŒÐÿdÜþèÿŒþ<ÿôý¤,ÿÄÌ,ÿ,˜ÿ4ô`(4þ”4þÄÔýÜþ„4ý¬tþì<ÿ„,¨ÿÜtýŒ8Ôý8ÄTýÔdü¸ÿìþTþ4Týd¸ÿdl<ÿŒ,ÿÌèÿ”ý¬Tþœ4þ tþLŒLÿ ÿ Ì\ÿdüLÿ¨ÿTüþdüüþìtðÿ|ÿþðÿ„<ÿÔý”Ätýì`̬,ÿlìlÌþèÿˆÿ|ÿtþTý¬þä|ÿLÿàÿ ¬Œþ@t8´ýÐÿTþÄ´üàÿ4þì,¼þ”t´ýH`LlŒÔýTÿLÿ4þ¸ÿ¼þĬ ÿì\ÿ´˜ÿ¼þ¤Œ¬ôýxxŒÔýÜþÄ4þl4ýüþÿŒ¼þàÿ„ìÜd¤Ô $ûTþtþÜþLÔü”ìþLÀÿÜþh¨ÿxÿdü ÿ¤|ÿÜþÔýL4þ¬Èÿ¬œ,lÿÔýTŒþŒdûTýÔý ÿèÿlÿl¤ÜTþØÿ\l¨ÿLÿ´´ü Èÿ ÿtý,Èÿ´ý´ý,ÿTÜtýìX”¤ûÿ8´ýÔÐÿ¤Tý̤”ü$üìþŒ¬þèÿÌlÜLÿHlŒtþ ÿ4tþtýäûˆÿÔüXÿ”Ôìœäûİÿœ¤ûœÌl`tý¼þlÿ$üìþDìþ¸ÿtýÌlÿ”ýì,¤ìdœôÜþ4þ\ÿlÿÔü´üdüdû”ü¬þp ÿ¼þÜÜœ4þtþŒœ`¤úŒÜLÿôüýLtäû”ü$üÔü\ÿ$ütþäÿìþüþÜ̬„¬œÜþ4  tì̸ÿˆÿœþˆÿlÿÀÿÜþôýŒþ¬þôý,ÿ¬Œ¸ÿT¬lÿTþ”„<ÿTþÔý DŒ¬þ,ÿØÿìÐÿ¼þ¼þtþ ìþ¬þ”ü,ÿ ÿŒŒ4œL |ÿŒlÿÿ4þ°ÿøÿÌþ´ü¤ûìþŒþ ÿtþ`Dô@¼þäÔDÌÌd„Èÿ ÿLÿˆÿ`´xŒþ¼þÌþ˜ÿèÿTþÌþ¼þhðÿàÿLÿ䤬(èÿdÔdP„Ðÿ|ÿ4þ¬þìþÐÿðÿØÿ$$ÿÈÿô´x ”@XP¸ÿ\ÿlÿøÿÐÿ\ÿÜþLÿlÿ\ÿÈÿ8H(àÿ¸ÿˆÿˆÿ¸ÿàÿøÿèÿ„4P@@°ÿèÿÿ˜ÿHØÿˆÿD´ØÿÐÿ ÿ˜ÿ|ÿô¬X`@ä@Øÿøÿèÿlÿ4þþœþ¬þŒþ¼þ˜ÿ”dŒì$´4$Ôhx8\ÿüþŒþÜþ¨ÿ\ÿ˜ÿ8ÐÿÔD¤|ÿÿ„Àÿ´ýÔýTþôý´ýþ|ÿôŒ¬ŒÜœlŒÌÌôìþTþ4ýdüÔüôü4ýÔýÌþ0ôdŒ,   D„,ÿ¬þ¼þTþ´ýTþìþÀÿÐÿ0DÌd„HÀÿˆÿàÿ”ÀÿHhÔ( ÿ,ÿ´ÐÿŒþ\ÿ¨ÿ,ÿtþ\ÿÄ´ÔÌÌìÌTÔlÿÿ<ÿtþTþTþœþtþ4þÿ0@ PP`8HDd`ä4ÄPLÿ ÿÜþŒþÜþìþìþ¨ÿ ¸ÿ0Èÿÿ¸ÿlÿhd¬DT¬Àÿ°ÿ˜ÿ\ÿÿÜþœþÌþÜþtþ<ÿ`䬌´4$ ÿ ÿ\ÿ°ÿ|ÿÜþ|ÿ”¤4ÌTÔxX<ÿÔý´ý4þTþ ÿðÿp¤àÿ”4Ôxpèÿ˜ÿ<ÿìþìþüþ ÿ,ÿðÿ”$`øÿDdTDÔ´„°ÿ ÿèÿÿ¬þÜþÿÿÐÿÐÿXP””X\ÿLÿØÿ ÿÈÿ¤@ä4Ô¸ÿˆÿpÄPÈÿ˜ÿÈÿ<ÿTþþ4þôý¬þÈÿÿ¨ÿäŒ,tLL4äô8\ÿ ÿœþÜþlÿ|ÿ,ÿˆÿˆÿLÿìþˆÿøÿ´p¤øÿ,ÿÐÿ ÿ ÿìþÜþÀÿ`$¬Ì4Tô¤„8øÿLÿŒþìþðÿÐÿ|ÿèÿp´ôô$8H`Øÿ<ÿTþ”ý4þìþ,ÿ ÿTD¬$ ¨ÿØÿðÿÜþÌþ¸ÿÈÿÌþTþ ÿ|ÿ,ÿ ÿlÿ8Œ4ÔTŒŒt¤”Ôøÿ ÿ¼þ\ÿøÿP0H„hh¤`8´pàÿ|ÿ ÿ ÿ<ÿ,ÿÈÿP ¨ÿøÿ8èÿ¨ÿ8„\ÿÜþ\ÿ ÿ¼þ<ÿ<ÿÿÿ@¬ìôt4$d”HP,ÿþÔýTþ¼þÿÄtì,ÌìÌøÿˆÿ|ÿtþ4þôý4þTþtýôýÌþàÿ$ÔD LÌLìÿ”ý”ýTý´ýtþtþ°ÿ¤$ŒôDt$´Èÿÿ¼þÜþ ÿôý4ýTþÿ°ÿhŒì,ÌŒt4ôô@|ÿÐÿ,ÿìþ ÿTþ¬þ¼þœþ<ÿp˜ÿ8ô44døÿàÿÈÿ¨ÿ¸ÿ˜ÿLÿ\ÿ<ÿÌþ¬þüþLÿ¨ÿ¤4¬LŒìôÄ”øÿ˜ÿ\ÿÿìþ ÿìþÜþèÿèÿèÿ´´¤(ˆÿ°ÿLÿÜþTþœþ,ÿÜþÿ8Ä4¬,Œìt48LÿÌþÜþìþüþ ÿlÿÐÿ|ÿÈÿÈÿàÿÐÿ@””Èÿ˜ÿLÿ¼þœþüþ@„¤ä`PP\ÿ¸ÿÿÜþ|ÿ|ÿ ÿ”@”ôôpPÌþ ÿ¨ÿÿlÿÌþœþ|ÿ|ÿ˜ÿÀÿX$Ä”´ôä@ ”Ô 0ÿÿ|ÿÿ¬þTþ,ÿ¤@hpdôÄ0\ÿÿ4þtþÿÿ”ôt4ädŒôH`ìþìþ ÿtþœþTþtþÿ<ÿˆÿ„4ÌÌLŒX0Èÿ|ÿ¼þŒþìþLÿøÿ0Ô$px”pp(Ôðÿ¬þìþüþÌþ ÿ,ÿ¨ÿ°ÿ¸ÿô”`ô´4¤@XX <ÿLÿÿ ÿÿ,ÿlÿPxxÔ„(°ÿÿŒþÌþÿ\ÿlÿ¸ÿ”xÿðÿ`´”8<ÿÌþˆÿ ÿœþ\ÿh$D´h”Àÿ˜ÿÌþtþ¼þÌþœþ<ÿLÿÿ„PÄTtìDŒ¬hXPlÿ ÿ4þôýÿ ÿtþœþ\ÿ¤¤ÔT´8¤¬Ä,ÿLÿÜþŒþ¼þüþ\ÿˆÿÀÿ´äx„´¸ÿøÿhxÀÿ¤4ÔT4$ô@Ä” ÿ¨ÿ¸ÿ ÿœþ¼þ¬þ<ÿ\ÿ¬þÌþ°ÿðÿøÿ ¤T¤ Äx|ÿÿˆÿlÿüþtþtþ¬þLÿôì L,$HPäpðÿlÿŒþôýŒþ¬þTþtþœþ|ÿ`DtDììD„àÿ¸ÿüþ\ÿ˜ÿ˜ÿ ÿTþ¼þ¸ÿ<ÿÜþØÿ¤äôŒ¬´¸ÿ\ÿ|ÿ<ÿ,ÿ|ÿXh|ÿ,ÿ\ÿ0üþœþH0”ääÄ”Ô4¬¬tÔ˜ÿlÿlÿÌþ¬þœþÜþLÿ ÿœþÿ|ÿ<ÿ˜ÿHÄÔ„„Pˆÿ°ÿ ÿ°ÿÿÈÿPp0”Hh„P”,ÿ0Ô PXøÿhÿ¨ÿÔ(¨ÿðÿ¨ÿ ÿÜþLÿ,ÿ¼þÌþ,ÿÈÿ`8ÌD„„ ¤ÈÿàÿH\ÿ¨ÿH°ÿÌþ|ÿÈÿ¸ÿðÿˆÿ ÿÌþTþ,ÿÔ¤”dDx0ÿÌþ,ÿtþTþTþTþ°ÿPä lŒìŒ¬@¸ÿ¸ÿøÿ|ÿ<ÿüþŒþ4þþ¼þLÿˆÿøÿ¤´x„„ÄÄ@@@Øÿèÿ¨ÿ¸ÿ<ÿlÿxPPøÿ¨ÿàÿ<ÿ\ÿ@ðÿ` ô`\ÿÀÿlÿ¬þ,ÿ|ÿ˜ÿx„xä¤ä, dDÔÔàÿ¼þüþLÿÌþ¬þüþüþÌþÌþÿ””ôÌÌÔÿÐÿ ÿØÿèÿ\ÿüþüþ,ÿ<ÿÿHÔ$DTT”ÀÿÿlÿLÿÜþtþ¼þLÿ<ÿlÿ¸ÿÐÿ´$¤„¤Ä„Ô”0 ÿ°ÿÿ<ÿÿ”4äˆÿØÿ,ÿÌþ\ÿ\ÿˆÿ0´¤Àÿ<ÿLÿlÿ ÿÈÿÐÿ Àÿ¸ÿ0„„Ä„„|ÿàÿHèÿÿìþÿ¤°ÿàÿÔP°ÿ\ÿLÿlÿlÿðÿ@X8@`´¤X´ähØÿÐÿLÿTþ4þœþlÿXTtÄdÌÔHXÿìþTþÔýôýŒþ¬þ,ÿ0´P @Øÿ0HXÀÿ˜ÿ0ÄÄ$¬tì¬Dä|ÿ¬þ,ÿüþÜþÜþŒþÀÿXLÿ\ÿàÿ”„¤D4ÄÄx8h¸ÿlÿX¸ÿ ÿ|ÿÿüþðÿ0|ÿÿÜþlÿÿ ÿ˜ÿ„”´”$̬Tä|ÿŒþtþÜþp„°ÿ”$Äx0pÔ@Lÿ¨ÿØÿ ÿ°ÿ|ÿ|ÿH\ÿLÿ<ÿ0lÿ ÿ”Ä\ÿ<ÿìþ¼þìþ˜ÿäD쬌$Œ”Ðÿ\ÿüþ4þÔý¼þtþ4þTþ,ÿ8@Ô4´´¤¬p¤´pøÿ¸ÿÈÿ¨ÿ,ÿÌþ ÿ\ÿÿÜþLÿÿèÿ„pˆÿ ÿ|ÿ@°ÿ\ÿpdT4DÄx \ÿlÿìþ¬þÿLÿüþ¼þ˜ÿ´D$ÌDx|ÿÌþ|ÿ|ÿ\ÿØÿØÿÈÿ(8xô„ øÿ¨ÿÿlÿüþ|ÿ\ÿÀÿäÿ¤@ìþ,ÿLÿüþ<ÿÿ8” øÿ@8”päôøÿ\ÿ|ÿLÿÜþ\ÿÈÿ¸ÿðÿøÿôŒD¬ì¬Ä$ œþtþ¬þTþTþÔýþ¬þÜþ\ÿ˜ÿ8ô,lÌ”ÈÿtþþTþ¬þìþÿØÿ”`8ä4Ää44”8ðÿ\ÿüþtþüþlÿtþ ÿÈÿÐÿääô¬ä””ØÿÜþôýŒþÿüþØÿ8h4”ôì$D4H àÿlÿlÿLÿüþ,ÿlÿÿ°ÿpxèÿÀÿÈÿH$´ô Àÿ¸ÿ\ÿ ÿ¬þþ ÿ¸ÿÿ˜ÿØÿô”$¬t„|ÿÜþLÿLÿìþ¸ÿ|ÿLÿpPèÿp´x„¤XÐÿ¸ÿ<ÿ ÿ4dTx”àÿÀÿ|ÿ¸ÿÈÿ ÿ¼þLÿœþ¬þ¼þ4þ¨ÿØÿ|ÿäpTÌDh¸ÿÿ,ÿlÿàÿˆÿ<ÿ|ÿp$D@|ÿÌþLÿàÿ\ÿ|ÿ„ÔT¬T´ØÿüþtþtþüþœþÜþ¤¤” øÿÌþÿ˜ÿÈÿ80p LÿLÿ,ÿ\ÿðÿPD´ðÿ@äxÀÿ„”HXèÿ\ÿìþ ÿXxÄÔp0”$´`p¨ÿìþÿH°ÿ<ÿlÿ\ÿðÿðÿ|ÿÿ¨ÿÿ˜ÿ00ˆÿØÿ(¤Ääô”@¨ÿàÿ\ÿÌþœþ¬þÌþÿ¤H„DdŒ¬ì¬äH,ÿœþÿœþôýŒþ ÿ<ÿlÿ ÿÐÿH̬ä”H,ÿ¼þ¸ÿØÿèÿÈÿ\ÿøÿlÿ`„|ÿ”„@ ÿ¨ÿ(˜ÿ ÿ<ÿ\ÿˆÿLÿ<ÿ,ÿÌþ<ÿ¨ÿÔTÌ, 4ÔÔx¸ÿ¬þTþ\ÿ¬þTýôý ÿlÿÐÿp¬TX$4”$$$´Øÿ°ÿÌþtþÌþÜþ,ÿˆÿˆÿ`´Ä`` ÿH´ô0 ÿ,ÿ,ÿ<ÿØÿ¸ÿ|ÿlÿ,ÿÿ\ÿ ÿ,ÿÈÿÔÔHÄ4Dä`”Ô°ÿ,ÿ,ÿ,ÿ|ÿÿLÿ<ÿ¨ÿøÿHP`44 ðÿÀÿÐÿLÿÌþÌþÜþˆÿÀÿÀÿhxxÔ´àÿ ÿ¤Œô¸ÿ°ÿ@°ÿ\ÿ¸ÿ8`àÿ|ÿ¸ÿ<ÿtþÜþ|ÿÀÿàÿP$$Ô”p¤xX¤„ àÿÿlÿ ÿäP(Ô”ÿ°ÿ¨ÿ ÿTþTþÜþüþtþ¬þ˜ÿ0@`´hHÔ”ÄD4Ôp@„ôHˆÿ@xÐÿ\ÿÜþìþÜþìþØÿ Èÿ”ÔðÿÐÿäp00ðÿÀÿLÿ|ÿ°ÿ`ätÔ¤ÄðÿÐÿ<ÿÿøÿLÿtþÌþÿŒþÿàÿXÔ4ôŒTÐÿ¤0lÿ@ÿÿ|ÿ4þ¬þÿÿ0hÄtÌìŒÄÈÿ ÿ<ÿœþŒþ¬þ4þ4þœþÿ`t L,P”\ÿüþÿÜþ¬þÿ ÿlÿ\ÿ ÿ`ô8HpX ÿèÿˆÿìþLÿ˜ÿàÿèÿØÿðÿ0ÔÌ,TP|ÿLÿÿtþtþ4þtþ\ÿ\ÿÈÿ¸ÿ0ôÔÔhXtdpphøÿøÿˆÿÈÿÀÿ ÿÿ,ÿLÿ|ÿ¨ÿhÄôô$ŒT´pðÿ ÿ¼þŒþôý´ý´ýÜþøÿàÿ$L¬TTT”ðÿ˜ÿ˜ÿÈÿ<ÿ\ÿˆÿÀÿ¸ÿÿÿÀÿ`Ô”@0¤x8H„PlÿÜþ¼þüþlÿLÿÐÿ ,ÿìþÿ8àÿØÿh„H”äô`Àÿ¤4Ä,ÿ|ÿLÿÌþlÿH$ÌÌÌô¤„ÿ|ÿÈÿàÿ°ÿÿŒþÌþÜþTþ¼þ8´„$¬p¨ÿ<ÿ ÿlÿÿìþÜþ¬þ4þTþLÿlÿ ôD̬DŒ˜ÿ<ÿ,ÿ ÿÿ<ÿ<ÿ°ÿôŒôh<ÿ<ÿ¸ÿ¤`Ä@¤´àÿ,ÿ\ÿ˜ÿ¸ÿøÿHøÿ\ÿðÿÐÿØÿhÀÿp4`ðÿØÿ@h<ÿŒþÜþLÿüþüþØÿÿÀÿh øÿPp@tÌtÄ„X\ÿÜþ,ÿÐÿ@X´ä”Ä ÿ ÿüþtþŒþÌþ\ÿlÿÌþ\ÿ8¤„Ä´„pØÿ˜ÿHXˆÿ<ÿlÿüþØÿ„ÐÿhT´”TD´„ôÈÿìþìþTþôýŒþ<ÿ@Øÿ ¤$Ä( hx°ÿ<ÿèÿÐÿìþ<ÿ¸ÿÿˆÿ0ÿˆÿ(´”pÔŒŒô䄈ÿÿ<ÿìþìþ,ÿ¸ÿðÿ8H¤¤¸ÿÀÿÿ|ÿ˜ÿØÿ@” ÿÜþìþ¼þüþ,ÿàÿôpðÿ”ŒŒ¬ìd¤äÄàÿüþtþÌþÿüþÿ ¤¤ ÿôpxäôô`Lÿìþ4þ”ý´ý´ýTþÌþðÿäÄ$,H8 ÿ,ÿ¬þœþ<ÿ¨ÿèÿ´„ (ˆÿìþàÿ”„èÿ@`80„äôÄäÔ°ÿ,ÿØÿ”ä èÿ”„èÿàÿ|ÿÜþÌþÜþÿ|ÿLÿ<ÿ|ÿ(PÔ´ô´èÿÈÿÌþ¼þLÿÿÜþ|ÿ8\ÿŒŒt¬ŒÄ`ðÿ\ÿŒþtþ,ÿÿ<ÿ¼þ4þ¼þ\ÿpÔŒì̬4„PLÿlÿàÿÀÿ\ÿÜþ4þ¬þìþÜþÈÿxxÐÿ äP\ÿˆÿðÿ¸ÿ0ÄX(¤´$Œ4ôØÿ¸ÿ ÿ ÿLÿ\ÿ<ÿ¸ÿÈÿˆÿp|ÿ\ÿ˜ÿ˜ÿðÿlÿìþÿðÿ¨ÿ\ÿøÿ8ðÿ´ô„@øÿÄ øÿôt$¸ÿ¸ÿ@Lÿlÿlÿìþ ÿ¼þ¼þ,ÿ<ÿ<ÿÀÿøÿ„ôt,ÌŒŒtô¨ÿàÿˆÿtþþ”ýþÌþ4þìþ`”X¤dôðÿ@hxðÿÿ ÿÜþÜþ¬þ<ÿðÿ¤$ddÄ`ô4pÔ„ ÿÜþüþÌþ\ÿLÿ¬þ<ÿ¨ÿÀÿ`XÄÔ`ÄĈÿ ÿìþœþÜþ ÿLÿ„8¸ÿ¤ôôô”¤$„äpüþÌþ¬þüþÈÿ\ÿ°ÿ”´øÿÿðÿxx88ðÿ,ÿ ÿðÿX´ÔpH”Pˆÿ ÿX„¸ÿ,ÿ\ÿØÿ<ÿ ÿ ô¤0àÿ°ÿÿüþÿ|ÿØÿ|ÿ|ÿ((ðÿÈÿ äŒÔ0PøÿÈÿ¸ÿøÿÐÿðÿ@Èÿ h@p” ÿìþ<ÿÈÿLÿüþ ÿhøÿ”¤@´d´¨ÿÿ ÿüþ,ÿ ÿ°ÿ„PôÌ$ôä0PØÿÜþÜþ<ÿœþþœþ\ÿ@´Ô¬ $äd$„8ÈÿÜþ¬þôýtý4ýTý4þìþŒ,Ì$$DT$4¼þœþ¬þ ÿ¨ÿ|ÿXìì$¤Ä¤°ÿ ÿtþôýTþ”ý´ýÿàÿ ”t,,ÌŒ¬4èÿLÿüþþtý”ýôý4þþtþ<ÿ(ÔŒ Œ¬dÄÄ8ØÿpXH„hØÿÿÈÿ ¸ÿHä”@ô |ÿ(Ðÿˆÿ,ÿ¬þlÿ8ÿ\ÿüþtþÜþ<ÿlÿ,ÿ\ÿ”„8´$ôÔ„¤Xlÿ<ÿ ÿ°ÿ¤„p`hØÿp´`H\ÿtþüþˆÿLÿÿô@`$TÔxøÿÌþŒþ4þ´ýý4ýTþÜþ,ÿàÿ@hÄ4Œ ,l Œ4ôØÿÌþ4þŒþŒþÔýþtþüþüþœþLÿXP8”ÄXì,ÌŒä„<ÿŒþtþ4þTþLÿxpìþlÿ0˜ÿ¸ÿÐÿðÿ°ÿ,ÿÿèÿhPôDÔä´¤ôp˜ÿ0¤ØÿLÿ<ÿlÿ˜ÿlÿ,ÿðÿX|ÿðÿàÿðÿ¸ÿ„DxX`(ˆÿ¼þÌþlÿlÿ¬þüþ¨ÿÐÿÿàÿ„”$¬ìtĤØÿœþ,ÿ¸ÿ¨ÿÀÿèÿp4Œ(øÿlÿTþTþ¼þtþœþìþLÿlÿÿøÿPh8hddTt´¸ÿ,ÿ˜ÿ8èÿ¤dÔ´¤ðÿÜþˆÿøÿ\ÿìþÜþüþLÿLÿlÿØÿôô´$ä„ÐÿlÿLÿˆÿÿüþÜþìþ ÿÌþ¼þ,ÿ8Ä@Ô4ä”hXøÿ|ÿˆÿ|ÿìþtþ,ÿ¸ÿøÿ„”$4Ä„@(¨ÿ¨ÿh`XÔÄh00àÿ°ÿ°ÿÿþTþŒþüþ|ÿ<ÿøÿ”ðÿx ˆÿ`”´Ä`@8àÿ „¤Pÿ<ÿüþŒþÜþLÿ¸ÿÔôD ¬ì„800Lÿ ÿ ÿœþþôýtþÜþØÿÄô¬ìDTìô(˜ÿlÿÜþÌþìþtþœþtþ,ÿ`´¤èÿàÿ°ÿÀÿH(¤ÌT$t¬$(H`àÿøÿ¨ÿÜþ<ÿ\ÿ\ÿÿüþtþŒþìþüþ,ÿÿèÿ4tÔTÌìä Àÿ\ÿàÿðÿ\ÿüþtþÿ<ÿTþìþ¸ÿèÿppèÿ8`lÿ¸ÿ4´ ÿ|ÿäôô¤`HÀÿ,ÿ<ÿüþ¬þìþLÿàÿHàÿ”x¤T´0\ÿ4þTþÜþTþôýüþøÿ(Ðÿ„4dì̬LÌP<ÿtþ4ý´ü´ýtþ¬þÿÈÿØÿ` ”ddÌlì8˜ÿàÿ,ÿœþœþŒþ|ÿLÿ<ÿÄÔÔ¤„ ÿüþ,ÿ<ÿ|ÿÈÿLÿ\ÿÿ<ÿìþ ÿÐÿøÿÄHä¬ÔhØÿ<ÿ ÿ¨ÿ@´$䔄ô8ÿðÿ”„ÐÿðÿÄÄ”´àÿÿÌþ ÿLÿtþ4þœþ<ÿ¬þTþüþLÿ¨ÿPä¬ìd4$P ¸ÿ0”P”4`øÿ„Hèÿ\ÿ\ÿ°ÿ|ÿ¬þtþìþLÿ|ÿ¸ÿ@`h ¸ÿØÿ ÿ ÿÔ”¤´”Ä`dD  ô ˜ÿ ÿŒþtþÜþ ÿ¬þìþ¬þTþÌþÿìþ¸ÿ`pT¤Hÿÿ@X¤hX¤äx`Ä´p¸ÿ<ÿ<ÿÜþüþ<ÿˆÿ<ÿœþ\ÿÿìþ|ÿ,L, Œ4(\ÿ|ÿ<ÿ,ÿ¸ÿðÿÐÿðÿðÿ Øÿÿ`¤ÄähÈÿLÿüþÿ`8ÿÌþ|ÿ<ÿLÿ¨ÿ|ÿÐÿèÿp¤ˆÿ 0ÈÿØÿÈÿøÿH´Ôh HÄ0lÿlÿÀÿðÿlÿüþ|ÿÀÿ°ÿàÿÔÔ„ôTDôÔèÿ¼þtþ4þ4þ4þ¼þÈÿP„”$„¤Ô@8h0,ÿ¬þTþ4þÜþÜþ¨ÿÄ$´”hÀÿ@HÿLÿ¸ÿp”Ph”8ðÿ@0ÿ ÿlÿ¨ÿlÿÈÿlÿÌþ´ýœþ|ÿØÿH”Ĥ„Tt$äôÌô´àÿ ÿ|ÿ|ÿÿÌþÌþ¼þŒþtþtþ<ÿ|ÿ¨ÿÀÿ`ôÔpØÿ¨ÿ|ÿ|ÿ”$T´Œ Dôtt„ ÿ˜ÿìþìþÿtþÿlÿÜþ,ÿ,ÿLÿ ÿˆÿxÈÿlÿHäàÿˆÿ”`84$àÿðÿðÿ|ÿˆÿ”¤hô´H¨ÿ<ÿ,ÿ˜ÿ˜ÿÌþ¼þÌþÿðÿàÿÈÿhhôŒ¬ì4¤¤8¬þþÿ”ý”ýäô„ìLd ¸ÿx¤Ðÿ0\ÿÔýüþ ÿÔý|ÿìÔ¬8üþœþTþ8Ôä Ì„ÜþìþÌþ´ý”ýÌþˆÿÐÿ(øÿ´@|ÿ„¬ì¬llÔHðÿLÿtþôýìþ<ÿ ÿ°ÿ Ô”¨ÿ<ÿ¨ÿ„h0Ðÿ` ÿ<ÿœþ|ÿlÿèÿÔäp¤„àÿðÿ°ÿÔØÿä8àÿ|ÿ èÿìþìþtþ4þ<ÿœþüþ@ÈÿàÿÈÿÿ,ÿLÿÐÿèÿHpŒlìd$”ÄHÌ´<ÿ4þôýþœþ<ÿd„´ ÿÿÿÿÐÿøÿøÿ(„<ÿtþ4þtþìþàÿTT$4TôXäðÿlÿ ÿØÿlÿ¸ÿ0(LÿÜþ\ÿÐÿ`„P„Àÿÿÿ¼þ¬þ¼þ¬þÿ<ÿ|ÿô¬$$¬Œ$¤P´P ÿ|ÿ¸ÿ|ÿLÿ,ÿ ÿ<ÿðÿäT´ÔxØÿ˜ÿ\ÿ,ÿ,ÿlÿàÿlÿ¸ÿ8àÿX¤Ôd´ ÿ ÿ°ÿ\ÿÜþ\ÿLÿ¨ÿ¸ÿ\ÿøÿŒtŒDP\ÿìþÿ,ÿìþLÿØÿÔ¤„Ä8 ÿlÿ„P””àÿ˜ÿ|ÿÿ8àÿÀÿ0`”@p”PÀÿÈÿ<ÿôýþ¼þ<ÿ(””$ÔŒ ¬d„Àÿ,ÿ¼þœþ¼þÿìþTþtþÌþ ÿ<ÿØÿ$t¤äd$hðÿP„,ÿüþ<ÿtþüþÀÿ”„äŒä@ÈÿpT¬ô´”Øÿ ÿTþìþ|ÿÿÿ¤øÿlÿ|ÿØÿ|ÿ<ÿØÿÀÿLÿ,ÿ ÿøÿÈÿ „„p`D0ä$xŒŒXä”ÿ¬þüþ,ÿtþÔýTþ 8ðÿ„dX0¤¤|ÿ,ÿlÿ¼þtþ¼þìþÈÿðÿäÌŒÌDää˜ÿˆÿ¨ÿÈÿ|ÿÌþüþ˜ÿ\ÿØÿôxÐÿxÐÿ¨ÿ<ÿÜþ|ÿlÿüþìþ0Ô„”¤´¤ää4äÈÿ ÿ˜ÿ8 ÿLÿ0pÐÿLÿLÿ|ÿ\ÿhøÿèÿ””Lÿ,ÿ\ÿÈÿ ÿ ÿ,ÿ,ÿLÿ ÿÈÿÈÿ0ô$Ì쌌Ì(¨ÿèÿ¸ÿlÿþþ¬þ¼þ<ÿ ÿ¤ädŒì$Äÿ ÿ¼þìþ,ÿœþ4þÜþˆÿØÿèÿŒŒ¬ä”`Ðÿ\ÿ¸ÿ`Øÿ,ÿ|ÿ ÿtþœþ<ÿ¨ÿ¤`täôx8$Ä”hðÿàÿøÿ¨ÿ¬þÌþ\ÿÿ,ÿ<ÿ`Ðÿ°ÿ´P¤”Ôì´Ìþ ÿlÿüþÌþìþÜþÿÀÿlÿÿÄÄôdTÌTpx´èÿLÿ¸ÿàÿ\ÿ,ÿXä„àÿ¸ÿ8 ˜ÿÿŒþìþŒþ¬þ\ÿÈÿh¤Äôä´P(@`„(Lÿ<ÿLÿtþþ ÿàÿ(äd$tDDpLÿlÿÜþTþtþŒþìþ|ÿ|ÿ8däðÿ`DäÄÔôĨÿ\ÿèÿ°ÿlÿ°ÿlÿ|ÿ|ÿ ÿøÿèÿlÿ ÿüþ<ÿ8ÔhÐÿ(Xp°ÿðÿx`8Hàÿ(”´Ô”(ˆÿüþtþÐÿ”@œœÈÿýdûÔü$ü\ÿôô\ìüþÈÿÜþTþÔüý00XŒT¬l8ÜþtØÿtþTþœþÄ”XÌÄ\ÿìììþ äÿtþÌþìþTþ,ÿ¸ÿÌþ¼þØÿÔàÿ@”XÈÿ ÿ„ô d´ÿ<ÿ4þôý4þtþ,ÿ@”@¬ìtÌÌt”\ÿ<ÿÔýtýTþœþèÿÿ¬þ<ÿ¸ÿP`$ŒD¬Ìô`ˆÿTþTþôýÌþ@ä(|ÿàÿ”Èÿ,ÿĬ¬$$”Tþœþœþtþ<ÿÿ¤Ä<ÿˆÿ0lÿÈÿ„”ôˆÿ8@ŒþœþPt ,¬¬˜ÿ ÿ¼þþtþüþÜþLÿ<ÿüþlÿÿüþ(TdŒ¬Ô´Ô ÿ(@Üþ<ÿ¼þÔýTþÔýŒþX¤ìÌ,´hÄ@˜ÿÐÿˆÿÌþ\ÿlÿìþŒþÿèÿ8äÄøÿˆÿÿÀÿÈÿ lÿlÿèÿ„øÿPÔ¸ÿ°ÿ´ä,¬ÌŒP”(4þôýþ”ýtý4ýTþàÿ|ÿ˜ÿPätÌÌì 4t„Œþþ´ýýôüýœþ(””D Œì ¬$Øÿÿ¬þÔýÔý”ý´ý,ÿ¨ÿ ¤Ìl¬DDtì`<ÿ,ÿ ÿLÿ ÿÌþ|ÿˆÿˆÿLÿüþøÿ`h(ÈÿøÿÀÿ,ÿÿ,ÿH„XHÔ´ÈÿðÿèÿÐÿøÿÐÿÀÿ  ÿÿLÿ ¤XŒ` ´Xðÿ Àÿlÿ,ÿˆÿ„( øÿÄøÿXÿp”ØÿÀÿ,ÿlÿlÿ<ÿ,ÿÜþ°ÿÀÿÿðÿèÿ”8ôTÌ4„ðÿ<ÿ˜ÿLÿÿØÿèÿ0<ÿÐÿèÿ„ ÿØÿ¸ÿ¼þ\ÿ|ÿÿÌþLÿ„äTŒt̤Xx°ÿ˜ÿ,ÿ,ÿˆÿlÿ°ÿTÄÔä´hLÿœþ4þTþTþ ÿ|ÿ¬þüþ˜ÿxdôÄÔ„(°ÿøÿ@(0Lÿ<ÿ`„àÿàÿ`dd´”„¤lÿHÔèÿ\ÿ°ÿ\ÿ\ÿ|ÿ|ÿ|ÿüþlÿ„X´0p|ÿ˜ÿ„ä”(üþ<ÿˆÿ¬þ<ÿÿ˜ÿ¸ÿÐÿ$PÿÈÿèÿXÄ`„Ä  ÿ˜ÿØÿ px„|ÿÿ èÿàÿÄôpPô`øÿ„p„p08ðÿlÿ ÿ¨ÿ|ÿüþ ÿ<ÿÿÜþŒþüþÀÿ@lÿˆÿLÿLÿ ÿ\ÿ ÿ„ÔdDP@pT”0 lÿüþLÿÈÿ (lÿÀÿ°ÿ,ÿ|ÿ|ÿ´0xDä¤ÄHLÿ,ÿ˜ÿ|ÿ¨ÿ|ÿ°ÿ8ØÿHÈÿðÿ¸ÿðÿ\ÿph ÿpŒ Ðÿ,ÿTþœþÜþÿÿüþ\ÿpôÄÄôÔ Àÿ@ÄôP@@Ðÿ°ÿøÿ¸ÿLÿlÿ´àÿ4þþœþ¬þTþÿ „¤ää(Ì4t DT„`Ä\ÿÜþlÿ¤„øÿ<ÿ¬þìþìþ,ÿ0ÈÿøÿÿLÿÿ\ÿ˜ÿÀÿÿ|ÿ(H¸ÿÈÿ””x„$t$P„ ÿŒþàÿ88¨ÿ”Äðÿ(Ä„8ÿ<ÿÜþôý4þÌþÌþ°ÿ„Ô$äÔÌÌ$ôô$„ðÿlÿ\ÿlÿLÿ|ÿèÿØÿ|ÿÀÿÀÿ<ÿìþüþˆÿ,ÿüþ¸ÿlÿÌþ|ÿLÿ|ÿXD4¤ÄPx´HŒdp°ÿèÿðÿLÿÌþ¸ÿ èÿðÿ|ÿüþŒþþ¬þÿ\ÿÐÿ8ä`¤ÄäÔ0¤¤8ðÿàÿÈÿPøÿøÿ0Èÿ¨ÿ ÿ¼þlÿˆÿ|ÿÀÿ ÿèÿXÿ|ÿpøÿÀÿˆÿ ÿ\ÿÿ,ÿlÿlÿÌŒäôäôHøÿ¤øÿÿ,ÿ|ÿˆÿ ÿÌþLÿ°ÿÀÿhT¬ä@Hèÿˆÿ\ÿLÿ\ÿlÿ°ÿ`øÿðÿ¬LISTINFOICRD 1995-12-01ltfat/inst/signals/traindoppler.m0000664000175000017500000000315112612404256017064 0ustar susnaksusnakfunction [s,fs]=traindoppler() %-*- texinfo -*- %@deftypefn {Function} traindoppler %@verbatim %TRAINDOPPLER Load the 'traindoppler' test signal % Usage: s=traindoppler; % % TRAINDOPPLER loads the 'traindoppler' signal. It is a recording % of a train passing close by with a clearly audible doppler shift of % the train whistle sound. % % [sig,fs]=TRAINDOPPLER additionally returns the sampling frequency % fs. % % The signal is 157058 samples long and sampled at 8 kHz. % % The signal was obtained from % http://www.fourmilab.ch/cship/doppler.html %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/traindoppler.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_SIGNALS % REFERENCE: OK if nargin>0 error('This function does not take input arguments.') end; f=mfilename('fullpath'); s=wavload([f,'.wav']); fs=8000; ltfat/inst/signals/ltfatlogo.wav0000664000175000017500000002265412612404251016721 0ustar susnaksusnakRIFF¤%WAVEfmt @€>data€%ÿÿÿÿüÿüÿÿÿõÿ þÿõÿ üÿèÿ!øÿâÿ ÷ÿÏÿGæÿºÿ'ùÿíÿ©ÿ/Œ½ÿjÿ@dáÿäÿuÿbûiÿÞþžÞÿÑÿêÿBÿ°˜Íþüýa½õþGÿ,5ÿQÑý¾üÍ&‚ý+þ —ÿ ãœüKû½ú\ü”¥Ìÿþûéù±Q•ö ú(&>ü'ýøÄ « ^ñYöS‘FõœF_óì €†é¾êÓãVý4 ïÿ,((éÛÀn/ñQh¼¢ÜNô_R±w¦CÐK6уÆK±%¶ìeílS½`åõ<à húöÐøñuRìÓú9§`öïõ»ÿ { úˆðLÉè¢ò£÷oç ò?õŒöÌ(Zý ñüÔ ÞGúØóPþS ~Êöó5Zô»öEþ ¥ªò¥ø' / Âûò$ý% I ¹ø­ò‹è [&õUôòH2ó÷KN bþÆñ|út D MúÜñtþ` jÛöãò†lÇô!õr*Ê5ò,øÕ Ú ²üuñçûu t ßøæñïÿA™õpóœu&óûõ½û fÿ´ñMùâ C `û_ñ&ý- – ¸÷.ò7s,´ô ô0›Hò×öÂ¥ 9þrñSú§ ¤ Núqñ>þ© ÂÒöŠòH¢7 ô§ô&I'ò÷Œ I DýOñ3û;  sùŽñ#ÿ ößò#¾pˆó'õçfÙñ;ø* …ü3ñßû¯ ¨ Ëø ñÑÿJ‹•õóÇÞáó{õybîÿ’ñ¡ø¥ Þ úû ñPü o Mø”ñD“B(õ"ó7Ãò™õá|™ÿJñÍø å §ûØð„ü] f øvñzË-ëôóg.tžò¡õƒÿGñßø Ì §ûñ“ü* 7 /øÎñoTøbõ›ó!hYzó<öVk ­ÿòmùÊ  MüÓòÛüI Þ†ùô-¿ ו÷ö5 ØöŒø@Ö ÷ÿö>û™â·ýZ÷Ëý©.ü½øðÿÈyfûtúéOû6üp´¾ûÊýÊe&ÿü ÿ®/«þdýèÿG3‘þ>þh¾~¸þóþ›4ÿþwÿš¾ØÿLÿÌÿ~hÈÿÿùÿY/ÎÿÂÿ 7Üÿãÿëÿõÿ þÿöÿýÿþÿýÿÿÿÿÿþÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿÿÿþÿÿÿÿÿþÿüÿöÿ ôÿøÿýÿåÿØÿüÿ6äÿÎÿB¢ÿ`¡ÿÆÿ•ëÿZÿ|z%ÿóÿrÿ"ÿ(R{þ‡nþ9ÿ¨ÿÖý¦xLýîÿ Oþ™ýCÄ÷û|‘Tü8þÿûÔúSaüLû‰MPøúv3ùýÚ$þÀ÷™íUöJê #úûø «³ô˜ /öüE *ýþô >Jó¯— Pøq÷‘ ¼Fò×° +ô¹ûUgüóˆ Ë¢ñà C÷ÚöÔ ”=ñ‹8 BóÁûñûó+ Íñd,ÓöÜö4XñÜ- óõû4²û+óX š ñ›¯ö÷5#/ñýø ó+üû^ó[ d'ñÁß ¦öD÷!üYñ Æ óSüñ|ûŒóU =DñÖ¶ ¨öl÷ã~ñ¢ !óküÐzû°óC dñá• ²ö‚÷ì á¤ñú Fó€ü©{ûÉó) "‘ñÁ_ èö°÷³ ËÉñî yóOüWÐû(ôÌ ÒÑñå] ÷h÷H OpòXÅ äóèüK–ûºóy ¥¼òð ¾÷Øø- @ÀñŽ% ÓôAûB åüqö" »ñ‹Aõ÷ûõÇ ¸ö’—ó¼ÿ¶¸ú©ñÊãö?0œöïþ”ûìíLCìö¸úVyùÿ–»úè· 9æõLõÕõ£Ÿ%®ëö¼X$ñ\œÍÌ‘\;AsÚ•(7ðV…ÕâÄ ëøþÁø“î@¶@ëòåòÖ‘õú¾yúQ ¥ññø6 óü|Éû›C ÿö·ó² É ˆñ4ü1 |ü'ûœ <ý—ó… û uò2úº ™þøõAƒóü¹ ®õ.÷® ëòƒ°ôAþ¶ EúFô‹ òžH ,÷ùY zÿAòÞã óýûíôd ²¨ñ$è ìõøÇÿAòëR Çòòýƒ!úžô ÆbñOÄ ˜õöø[)ÿ ò}O jò,þ•ÇùÖôf Z-ñÌÁ 1õ0ùÌþòÞ %ò—þ¥Zùõ´ ñ5ž Øô„ù½`þ%òB Æèñûþ«ñø5õ ¤ùð¡~ |ôÖùìôý1ò§ ‚§ñbÿ´…øgõS FÝð] !ô*úˆýBò 9oñËÿ¯ ø§õ‘ áÜðt âóŽú#ý…òD Í|ñ4Yë÷(öq iQñ©y ô&ûuãüeóú Qò’/ =øC÷h ÒÔòeù Kõü˜ üü]õ¶ôʸ pù2ù &ÀõlsÀ÷PýR ŽýqøaÁó÷Â1rû«û–ŒùêwìúŒþysþÆû©ôžû…¹“ýäýN.íüqªýlÿaGÿDþ‰½Fþ>bÿEÿ,úþŸCÿØÿ´Çÿ†ÿm/ŽÿTÇÿØÿBËÿÞÿúÿöÿïÿòÿûÿýÿýÿÿÿÿÿÿÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿþÿÿÿûÿþÿúÿýÿôÿøÿðÿ øÿèÿ%êÿØÿúÿðÿÕÿ'LÊÿ¨ÿ3Bèÿõÿèÿ¾ÿO‰ˆÿSÿ{“¶ÿÈÿçÿ¯ÿ’Û ÿÐþ6ÿjÿ°ÿÖTSþçýNKþ7þ”žÙSýçý’œÑüòýSp¬ÝûÓûQÃ?øòù¶æzþbýuüøÿ÷,ýùÖ›Ùñcüòûß©ùòìd%þ÷ÅƒÞ¾ÃæÜ_“Љߏ~¬Œ‡(ældP$¹Kóã%}û÷qû£ò>Àúwêá Ñ÷>­0íÈú¡B¨à*èDù¡îU•øIEý÷åëûkÿ@F÷sú Ôç:Jõ.éu>í‹ùß‹þ<ò÷Ç%ú!þ\ þøEGòBe8øÜê|PÝéXôÆ®æô·õóñW Èñ÷Šþ¦Ïÿ¾“ýZô–‹ïôó¥ÿävþ õAè q¸ì¿÷ü£Þôu·ÜÿÎçúÂù‘ Y"ìÌÿ¦2ø²æk|ÔèÏñ*}]ç&1pùbô™Y’ýKˆû9ÿË ßüçîR Ríƒð¸ž©â1{ƒ÷”èù ·ËðIø ×Sú$FþW°„÷×õ],|èåý®–ù€äì¼êÆð}¡ÏêdD)üPøÓð1Ã}ößý¼2ý‡ê­ ÅìÒíüº ã;þnÎù&ê÷ ­ô ùbIlÿ©ÿ5ùÜ? 6õ òï ÷åïûªû@ãs ~Áì˜ð¼ÚRî­ÿ7 °ýübýcäìò¤û/Ÿþ¤ç¹ $¿í™ì~b [å®ý$Âú,î= ° L÷Åý¸ý‡ãõyߟ÷Uð÷$ -ê»ú ýéé+ `§ñT÷w<?õÛ™­úô,ùã˜Jø$ùq [pñdz r÷föŸ 2.ôR ûèú7‡éú1VûT1¸ûðýÎ0ÿgúpìüúˆþ5 ÿßû¤I¿ü°ÿÏÉþYþõCþå1xþÀÿ’gÿÜþzÉþ*øgÿyÿ¿ZÿCf•ÿãÿfãÿºÿ;Ãÿ.åÿéÿèÿ óÿþÿ üÿûÿüÿþÿÿÿþÿþÿÿÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿüÿÿÿýÿúÿûÿ÷ÿ ÷ÿóÿñÿîÿçÿçÿ&Øÿßÿ6ÄÿØÿ,Júÿ¨ÿÑÿHaéÿ„ÿÎÿo{ÍÿVÿÒÿ¤–¢ÿÿâÿé®cÿáþA½ ÿžþ;«¼˜þ\þ“%¢þ#þ«cPýþÄ4òÿ|üþ«±>ÿ‘ûEþÌ 9þŸú×þ!*Ûü¾ùÖÿéûùV&! ùÊøh“ ¬ºöù© _ÿTôOúO  ü%ò°üë g Ø÷ªð‰‚Äò—ðZ–píÏòÞ Q¡ü é4ø1ø§ó^ç 1 ZêeêF Рãó[Ûòâ„Ú= .çLéoiü„áy÷ ðHìÍåþ  €Ãâ°õ¦h:ìÃçš ³ûã‰ý{\ zåzðoß“ì¨æ¬à¯ö àÄ hþÞµ÷$ Ø ¹á+í¢çoåÇ7óîèà[ F /ö,߉Ó jü®ß _úázýYcåtücõ±éfþPÿƒíNçIùeðž ›#ñòJq JèÑòó .àó(#¨ 7ÚàóŽ') ¶×döÔ'`ýÙûµ"â'âxÃøGð+ çyñûÛóÀíE)«âaï¿#ª Ø‘ö‚)<Øt+#ùèäg +òÃü© ¢õÎõúŸ6ßD9&ñ±Ù!2ã§è6K èšy 5ö]}ðqòb|Û]H&%÷{Þ¯™<ðîôN ÿñýÔ 'öLò|b âÞøû R âMª”ø¸õÚ²þM Eô4ñdF·ãGöCNŠåO“>ûVú´™ù»Áó±ëp`¿â2ò¾*åýùGùüµ(õfþ¿•øBâûÒä–æU ûNà,ûâÂúóä øý9òCÊ áá ü—&û^ÖÉ B'Më¡ß]pÍçãô[ëÿyòû ¿*îãM¨ñªåÆqâæE"SÛí³$Ý ”Ý©÷²üçÁ¶<øP÷5 y÷ïsJPñõéõbèå¡å FßžâG"]AÝá@"ßFááè¯ãcãhß­éIçA3£ï›ìÊ `ZôÀò  ÷ëøe@÷Jþàˆÿ1ö;# }ü1óBÛûïÚpýÇê€O±ç>úÚ­ €ç0ò-ëëCê±Fò/ä Ö%üøàþ=<Ðáñ‰—é@ä5 ”øïÜ ýb"¨ âèµÅ’õúÝŽýQ éoæ8ç°){þâ‚ôÍcò©äÞ„ úêëÏ O= è©óe¡øQéeüýæ ó•ínûÜðúòæ(ñ ø ‹ àü¡ò&ü› ©úÅô>ÿ( õŒù÷k i?ùHùοp…ùAûŒJ(úæüÊãÿûú2þ°¢‡þÝû'ÿ]“Hþ·üÒÿëº@þ|ý@o\þ#þ~õšþ¬þš†FÆþÿž%ÿiÿ“Õïÿ9ÿ¤ÿ€–ßÿjÿÍÿifÚÿ’ÿçÿSBÛÿ²ÿ÷ÿ?)àÿËÿ.æÿÝÿ ìÿêÿñÿòÿõÿøÿ ùÿûÿûÿþÿýÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿýÿÿÿýÿøÿ ðÿïÿðÿ Öÿ%ÉÿóÿLâÿµÿS)ƒÿ‡ÿ¢ÿ½ýÿ"ÿ‡³øþÌÿPuÿÏþS•%þmÜoþÒþtåÿPý®öü…ÿ¤nþæüƒ`^û)a;üiýŸÿ9ú´´ù5ÿ+Çü4ú´Y•÷G–SùËû_ "ÿ°ö#Dö ÿÑ òú¢÷æ ôu[ ®öú” ’þïó)É\óÿ_ ‡ùö rÕñWï õúeþ‡òU m÷ñ@ÿ‡Âøcõ ròðÒs TôïùÓý&òÈ €ŒñmÿÆyøZõ^ QÑðo /ô ú±ý5òÜ añ‰ÿ®nø{õR 7ïðK ?ô&úð¬ýZòË G±ñŽÿ‰ø–õ0 1ñ÷0 `ô-ú˽ývò¨ ?Ùñÿj¡ø õ B5ñÑ$ ‘ô ú¡àýŠòy JòTÿQàøõÇ `bñŸ Èôøùu0þò W]ò,ÿ#ùŠõ‹ º’ñ dõøùIþ½òç¦òuþØ úÖõ« xò5* tõ!ù¦ ¢ÿeótĦó^ÿ® gùëô´ SÛòó W÷Zûé qýƒòÖ6 Ðóü ‹üÕø s6òc  óôŽöí Od÷Õdó~æxô”ñ 0õ^®fô4<xðãêç cì“ÿ œêžH/ýå·Ÿ.•]ùÀ•–‰Gjâ¹x ë:ÎKÄ×:ÍûL¶ü‡ì|ôÐürä'ïü~ øÒý<ûû¿œ€ìä÷*0iôHôù¯CLñæø+þnñ×{øó ÇöÜöøYð'" ËøÕú% ×üoôl 7}ñíýIû%ö’ ólM DôþùƒµþóR$ó,o 7ø.ö ›ñ®c êôûúü/ó ‹ãñà ;ø’ö ñà[ çó9û«¶ü7ób ¬ñçé p÷Áö¤ ¿kñM ŽóÆûÐüTóì «hñ`Ö ýö"÷ë 3gñÙÖ -ó:üéû‰óT ::ñê» „ö|÷0³kñWŒ Öò³üÿ ûºó½ Ñ ñm¢ öÖ÷u4kñÖH ~ò(ý‡úéó# ißðí‡ žõ/ø±¹ÿtñJû 7òýú-ôo øÚðaD Uõ¢ø±DÿÂñ{ Dòþ³ÏùÊôM bdñªy ‰õcùø äþÏòOw0óªþU ú)ö6 ˆó‘© ¹ö§úï ¹þõ%°xõ=ÿ“ ûƒøÒm>öî¾ ù]üÝþø[âø´ÿ×£üdû—SúæuãûþÏ?ÿþûÌ0Nüôÿ`HþÛýª‰Výèç5þ>ÿú¦ÿrþÉ¡þ-bÿNÿâ%,ÿLyÿÎÿŠåÿ›ÿI.®ÿAÝÿÝÿ-Úÿëÿùÿüÿôÿøÿþÿþÿÿÿÿÿÿÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿltfat/inst/signals/Contents.m0000664000175000017500000000343112612404256016157 0ustar susnaksusnak% LTFAT - Signals % % Signal generators % CTESTFUN - Complex valued test function. % NOISE - Stochastic noise generator. % PINKNOISE - Pink noise. % EXPCHIRP - Exponential chirp. % % Sound signals. % BAT - Bat chirp. % BATMASK - Mask for bat signal. % GREASY - Woman speaking the word 'greasy' % COCKTAILPARTY - Sentence by male, native English speaker. % GSPI - Glockenspiel test signal. % LINUS - Linus pronouncing Linux. % LTFATLOGO - Synthetic sound from spectrogram reconstruction. % OTOCLICK - Click-evoked otoacoustic emmision. % TRAINDOPPLER - Sound of passing train. % % Images. % CAMERAMAN - Greyscale image of the cameraman. % LICHTENSTEIN - Color image of the Lichtenstein castle. % LTFATTEXT - Black and white word: 'LTFAT'. % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % % Url: http://ltfat.github.io/doc/signals/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/signals/gspi.wav0000664000175000017500000200005412612404251015660 0ustar susnaksusnakRIFF$WAVEfmt D¬ˆXdata  !##%&'&''''''('((((()()()()))***++***+++++++*+++++----,.,,----,-,---.-.----,-,,+,,+,*,,+++++*++)))*)()'(('&''&'&'%&&%%%$$$$#$$###"#"$!""!!!!!!!!!!  *Ry¼$AôïrõÎ& ý Æîúaùþ+ B Zýÿú…ù®ûáþèýÿûOõ·ò3ö—ýT …Iÿüö óLö ÿ¯“  ßÿuö‡õ:ý²É†Ä âçú–÷Êù«³Š öóÿf÷–óÙõ×û¼äÝÂûÁôôïú.Ä ß íåöóñFôåüW-Ýd ÿöpô¯ú3Ê p p?ýÇõºõcüÝ” u çÔøÇòÛóEü« þ æÑõxîõïù°å §› íþ–ôÌð¸õ€ª ¼ BñúŸóóû騋œ"ü‡óôÖûοžüûòÑï7öæw ¨¨“üªòFñ{ø%¬ $ EŠøNï?ïøœ› ŸüfòÀïxö/Ñ c£ïý‚õôÙú© 6´Hû‰òeñHù´“*ú ð~ï"÷œÒ » Ô§ûoó9òRøóÞ N Ègüþó!óûÈ»lžûóòò‘ú•T;‡vükô-óGùY­ ï r!úŒñíðùV > uŠùòíòCúïÝ ˜ TiùÑñ(ò½úx í  ·ý€öÍö¯ý¢t ø ‡øøòôüAŸ¶ MëùÍñòúáæ < Ù ø}ò"ô÷û7Ü J ÜùgôÄõçýÏ  ™øòªô5þÅós 'ûöÑö¶ý´W LìÿÔöÐñ ôâýÇ  9L÷oñÚóLüð c$¸÷tóèõóþ< KÅ O“ùžôÃ÷Z Ÿ ! XÒø—ôê÷!" K ž»÷Tò¿ô®ýDå , óõ÷ñöÿJ  \ÿ@ö ò[õýþ  ^ “l÷„óÍ÷w ž ûô÷Eô/ø(- ” z ùÁøüô¡øí ´ ì«þ–ôÉðõsþþ| ³DÿöˆóÖ÷NÜ Ö Üþžõ–ò›÷Ò0 ب ÁÃ÷9õÐùÇF Ö ýþföiótø}È ± èÙþ.öqó$øñ g ½eû5óŸñ7÷;Ü ÷ Gþ-öÏójù¤ Q jý†õEôôù¤ˆ ø# GÿR÷nõ«úÎ ï :îûÿóÌò+ù5 ÷ Átü¦ôóø,Ö´ }xú­ó‘óûú3E û býˆõhô2ú²± · …üö±õ"üó ø güÅô(ôëú( # Z¶ùóó¦ùä® œ I úæóâóâúB8 * 'öú ô·õcýF ¶ 4ü¨õdõïû¶A u h.ûõöIþø ì CîøHòáòúû¿ Ä HyùôBõøütÈ E Œ¶ø)óõÁýøë  ¯›û7öQ÷ÖþÅHµ <¢ùüóÌõÎýÇÑ D 6gø|óÙõ‚ýP Còÿ÷èñóñû” ³ ,Rùÿô-ø1R‹ ó upø_ôA÷ '7 ¤ûùHô^öïþÒ¿ «Ëÿqö¡òöóýG› áëÿÂ÷Íósö©þÅ ð÷ýþõóp÷r* r ª ™ù©öú›c r µ¯’ø¿ô@øP  KêÿÃ÷ðôIøóþ›QmüvõHó÷qÿ«Ë ¹QaøÆôø÷kÿ]: H€ÿÈù˜øü³o  ² µú[÷¯ùN^eÐÿáøžöú>Yè ZcýÙõ?ó®ö´þvöOãýˆöEôqù{Ö Ý HMþsöyôëø£# Ê ÿ¥ÿµøÊö™û‰Ÿ ã ¼5þ­õñóÂùžo s ›½ûõÃô¹ùRŒ x ¸ ûêófò?øP-Í i>ýÿöóöëü§J V ’¼üÃö5ö·û„(  8õþø_÷ãüpá ü ÝúúÊôcôßùÉ„ { € ûÏõCõ´ú}ÝE¾úÿô¾õ<ü Ÿ 5íüg÷÷üýÆ ¼ HÍüÿö®÷ûý‘˜ r cÞûnöáö‘ü ÅFÿªøßô ö1ü¨µ¤xû1÷Òø¢þ3? Þq4úzörøöÿ æ ‡´ý¥øeùÿzc d[úŒö®ø ÿN% °›úøLôsõFü"ïÎÿ‡øõ€÷Åýç” ¥UKû øúµ kiòûXø£úËa c „ 7Ãû/÷øøü™ªŽù7öaøeÿPr6>þÁöMó@ö—ýcΠ΃FùœöÄùqm ˆ " ¾ú–öúf× J ì&ûùüX¸ ã)þ'öÕò#öŒþ”s @Ñþìöºó¢÷ƒÿzÅÅÍüKöõùèÝ Ÿ[qúøjüª@ Î ¬Yuøúõþùñ • ‚ÿ¹øãö¯úÔä<½ù«ò¶ñÌ÷Ĥ{ a¥ýE÷¥õ6ùªèÏ *—ý¢÷·öfü‹^ { ¡ ÉøÊ÷ý—w  ›“ýœ÷Iö]ú?ו l+üõ´óùçz'”ùºóPô¨únþ * _çü–÷÷Xü›‹ ì Ï­ýÅ÷§øHÿ1– ” _…ý=÷ö›úŽf_ØúvõÕõ-üö7˜røÚòô#úáp\û{÷û÷öý`x _ Éû‡öý÷ëþä åmü®÷¼ø¬þk÷ \•úõ)õHûœ„(øøócö'ý¾: j#;øúó€õ½ü| ÈkÎü½øsúé÷ x ¨úœöœøÿÛ4 G Ô…ûðöø©þªGmCþQö¼òŽõuüìjºØÿØøÈõø¬þÝê~‹ÏùUö`ùL-  ñ }¥û”ø û%áä £VkùAöôøG 6 ,7ÿª÷Cô!÷Òý”­d üðõô~÷ôþ½ë FoúW÷wú¯ö ׸ÿ;ùÜ÷*üì} !ƒ ú¡ù¤öˆùziœ”ýþöõùT Ê@üUõó3÷Áþ<Q…ýÁ÷ö¹û @ pÛÿù÷%ü¡H Ò Ò ÿ`ùTønüäË K ‘µý|ö°ôZùö2òYûÁõjõ+úìY®Ô(ûõõ;úé8 àAÿÀùÎù ÿ!– í ïýYøŠ÷#ü=b … [þnøý÷ùüCµq¦ù_ôµôòù¸å¡¤ûÁönöÄûµÄz‡8üB÷høþ´Ü C æþMúcúNÿ¥. ƒ ]9ü8÷÷`ýS—Yû)ö÷Küüw<Úÿ¢øTôBõü øk]üøËù¸ÿîë R ^ü\ø1ú  ¯\ý`øÈø™þmÅ"çmùöƒømþÔÆUùøÙôýõsü>Ζþÿòùüö¾ùŒ`1 ¸ (÷ûùqûAé ’d9üäøûúá6 Ptùù{ö¥øþÔÔJzý`÷{õø™ÿ´û¸jÿ³øXõ/ø<ÿ²Œ»ßûøúNþ ì 5 ŠWÀúÙ÷°úÚ)× þ ¸úPø\ûÆä\ü`öõ*ø°þD‡ˆ™þ¿øƒöIú‹9É«ÿDù@øÿûK|· %õUü8ûHþ5îX Äzÿ%ù÷Æú/œtSþùÒ÷gú÷ÿ_6Û‚ûAöêôùHïݧþÿwúRùØü¦ä òÏþ›úÜùRýÅ ð ŽF û ù‘ü*0ÉßTü¬÷y÷8ûJm¹9Büž÷ŽöZúÁoR(äüÂ÷ç÷Òü9(óÑ ÿxûZûâþ¦˜ÎeÛýÆù7úGÿ6çäY0ýøÈ÷Dû«áŒýúÙ÷ø±ü+R»2û½ö«÷Äü–È»ý0úBûR ¿¤ãý½ùÄùEþÿ™«„ ýPù]ú¹þý1ˆÛÿúœö ÷áû,lF0ûÒ÷eùŠþ„ä¨^ûøúÿ4lëtýêúsüôhq iÎCûø²ù1þ5t@Þú•ø3úBÿct>5ýFø ö‰ø3þ¼î)Cåûúêû= sM‡üÝùüå6¿r|0ü"ú[ü¶"?£vþùN÷‡ùáþ/¾þŸùí÷ÕúOhE‡Býýø„ø‡û¢&±ªü—ú„ýF^(¥þ,ú­ù¥ý;~eáÇþ5ú"ù(ûƒÿ¢8ýFüBøo÷Jû<>Óüý}ù°øuû œDþ1û_û%ÿòÔpš ÿmúúþD—É'ƒýÀù·ùßü™³/Küä÷8÷û‹ëäδûú÷Àø:ýÔg-ˆýüù–ùÊü1Ìüþpû üæønó[ý£øøfû0$uV,ýù#ù½üöØwúºöÚ÷´üÅÖïýnúìúÍþ¤p‹>þVúçúÿÛåºíAþÛú–û$ÿ°›oÎÆûø~øü&-û:øúùŽþçgŒÿú›øëù{þ„%15¨þ®ûŠüå-é[üàùåû]±Bƒ°üßùAú6þÝ—øý/ù3÷Õù;ÿ9Â^0ÃúÈøœúÿWîC03ýû˜ü¶Æ®á#øüûLý‘­ˆ/ÙÿûKù(û,]û‡Ðÿ´úã÷šùrþêÅÌ©ý/ù¢øãû$;DÑÔ ü£ùkû¥jpMýCüÿ³½ ÃnÿUúÿøgûcõ ‚(ÿÚú ùÇûèðÏÚ,ýwøÈ÷¼úŠÿX2­ÿ‚ûÅúÊýV¢0K-Zû9úýâJ„8‡ÿ£ûtû~þljR4¦ýù£÷Èú&ú„£ýù]ù¥ü¢ëº4üßøýø½üœ²;èßüIü¸ÿLTL–)þ˜ú»ú#þ|ɽ”<þVúÏù5ýé…ååû=ø´ø³üÔÅÛâüúQúÙývß9žýúiûóÿã÷URÿOüÜüt'¬õRüãùŸúšþgsýŽùëù2ýüzß ÿØú,ùµúÿƒjñÐoýÉúûFÿG…“€þ‰üþæ/w¨Î ýFú¿ú¾þ¨éz{ÊûbùûúþÀÅ»„ÿÈú…øù³ý¾*†©ÿïû&úüü,ñ‚Qý ûÇü·òP߉Fý`û÷ü±s»›ÿqúøåùTþy¤nûþú)ù$ûlÿú·Dþ úøRúÖÿ œ¨˜ý}ü°þO½?[2üÁú´ü|JÍdõûòùÜû ±QTý ù8ø“úÊþ&Ì—‰þ ûãù_üW,­:ÿ5ûúlýæôÀØüýÑücþ.· vþ>úù2üf.ów¶þ©ú¤ùaûÄþ, [<üXù.ùoü¤cÍSÿû‘úÓýQ¹f–;ÿ{ü˜ü-ÿhQ5ÿ«û³úŒýØyUoØü”ùÒùÖüÕéØY'ü«ù¥ùdü´´§ 'ý<úäú ÿÕßÛxÉþü=üèþT ¹Çþ&ühüéÿ<iºqü¿øù\üƒn0Óÿüú~ú¢ý²žâÿKûHøHù×ýá@1¾þ4ü ý”¬0¸7ý¤úPûeÿFÝ *ÕüœùÁúÃþÐÑ[âþbúkøkùý„ܸ…ÿ,üpúïûùÿЕzZ|ûvùvûõÿä©y›æþýþ¼€…ÿÖúçø"ûÃÿTåAû.ù^ú þÿ=îýÛùªøÞú¶ÿQg!ÎòûúAüª'38®»üRûZýEâ’*ÁüÓú£ü™`# þ‹ù…øû½ÿû'Ðý%úãø8ûáÿˆÂ†ýøùàùcýkÔƒ ò¬üTûnýæÃv+{ýü±þþ:¯“þµùîø\û‡ÿW%?Ñüù$ùRüX´´ávý¿ùHùKüí&³5£ÿpüSü/ÿÂPjr@¦üÇûjþz4fÓ—þ†ûuûíý¼ÿ[Wü¯ø ø ûæÿDy{ý¤úóúdþ¨›©PŸýÂúïúòýÃ¥.¯þÚýÅm2TöQý-úƒúÃý1¡–Óýúú ý@š¹sÿ?û’ø±ùñý~5 îðýÚû’ü ÿßÃý>&þÛûáüì4,Fô£þüÛüÕÿ:-øæÿ²û—ùAú¦ý™9?üçùõúˆþÙPb<ÿßûÅúzü0šK[Ïþþ£üýpT ô´ßý8üûý£…ì·üZúãú þýÁ=ÓþPû•ù)ûÿ¿Z=˜ÿ˜û/ú üÐÿ¼”‡]ýüÍý-mØ Þý8üþnKjÖ¹ü¼ûQýÅ:uþ‰ú­øHúUþ`ß5þ ûêú§ýfŽw6Eÿü&û'ýŽŸØ0Ú{þaýpÿÐEvÿœû×úåü¤Ø’èþ“û)úôûÞÿã@êçü©ù{ù>ü=Òò1ÿnüükþ˜øw[ËGý'ü|þœòËšý&ýÿLïüÅù5ùü‹ÄA%MþÖúú?ü‰ÿ`ø‹ëüÚúxû¢þ3ÍPŠSýÑüÿ5˜¬*TÿÙü7ýÑÿeÌiDþbûäúýƒ‡¤ÿünù úfý^Ò®ßüþú¥ûcþ%¤)kFþUü0ýÒØÚ çÿýIýÆÿ6<­'ýŽû^üvÿ HöÿôûNùÔùÜü(4 tÿHüáúüCÿ=Oìný‡ûÆü`ÆSß„ÿÅýëþʸ!¬òWý“û5ü3ÿ¼7Ò™ÿü6úoûªþ¤ýêvþ³ú9ù¢ú þNý7ü¦ýHÈÖŒßýUüÝýP(íÆþoýXþ'WË þ´ú`ùû­þó~™dÿùû¯úÚû‰þdáàý†ûûýJü ‡p\þ`ýÿŽ’ï`eý´ü{þû)š.ÿQüïúsü¬ÿ}ª1ý7úÇùÃûøþ3¥áþ üûàüªÄ0I<ÿ—üoü;ÿ#?LZR þ6ý¨þ¦l¾LÄþãûKûÞýÜ`Q,ýõùù¹ûÔþ­ˆ€<ýû.û«ý½¿ÎfÚþæûŸûzþj@ÛÊ^þ,þ,OûøþøþÆû ûŸý¶I ^Ný<úEúÿü YpplüñùêùbüaeŸ„‚þ7ü¥üëËòòþcüžü!ÿå U¿A³ýUýÿ¿Sjw}üÂùGúiýõQ2]çüû;ûrýÆÿ†ùÿÛüÚú¸û_ÿrήRÿLý*þéðä–qþãüdýv)Pëý§û[üÿ¯Ù¾}þ û¾ù´úýP§¢ìý5üÏü¨ÿ—× V-ýüîý…/@Jñ™ÿÀý÷ýZFLÝ2ý÷ûŸýï£}Ýÿ<ûãù)ûþBšEœþNü\ûÀü6qƒC<ý@üaþ´‰ û˜óý†ýcÿÜ¡œLóý*ü"ýáÿJ%Ærþxûûòüé¶þûú®ûbÿšuUÿäüÏü`ÿÙ9ÿ7ýçüÜþJ@±¿ö’þËý€ÿfC –½ýÊú¢úÔüóÿµZ7ùý§û?û.ýØ›‘Ëýšû»ûvþ¿ZFØÿ´ýþMŠöÄ2ûÿ{ýøüÿNOU‡yÿ ýõüßþycöÊÿáû˜ùÙù’ü{vþlüœü ÿØy>ß¼ý@üSý.Çzzæ˜þ>þ1Þ0Ÿ„œþ±ü4ý„ÿÁ*-Ýü/ûsû‚ýn"j ÿRü¥ú‡û¸þð˧¸þ&ýÍý+”Ú"ÿÜý¦þx“Þñg/ÿýlý‡ÿÂù,[ÿ]ü û×ûƒþé¦soÿCücúûèý±³×ÿýÞürþ\VÜ­ƒ‚þýÌý®êLp'xÿþ%ÿk@Ô–žÿ¡üdû'ü€þT‰+aþÎû­úìû ÿçóë&ÿ7ü`ûýûÿ¬%ß ÿ“þÁÿs®ÿ/rþOý—þ /îß1Êý8ýUþcIc0)ýÕúúxû˜þGþþýÎüsþ™MÒ~ÿqý`ýÿI9í]»8ÿAþÿ¼Ô 9ÿýìüþ¼¨Ûï1þü:ûü\ÿq€Òÿ3ýûûaýcÄ‹|ÿØýþ¹ÿ;ç¶ÿôýîý1M?HhbþÛýÿÌ,ë¸ÿýûÆûàýèÉpV`ýõúÂúØüÿ}º¼ýíüþQÜc' ÿçý þL”2K¬ÿþ–þ‚¥í0‚¾ýfü­üsþººȨþBüÅúŠûEþ¡JPýü­ü½þf*ÉéÿTþNÿõž—²SQÿ~ýþ+{ÜQ¹þºý2þäÿéÿNþûúûÔýø¢ÿýJü}ýÒÿ6A –ÿ¬ý)ýcþ+û;¦ž¨þ‘ÿÅÇ‹;@ýÇüÈý"”8Œßþ–ü±ûÕüEÿ5°”þyû«úü¹þ’WB”þþ/ÿªñ_ì{0þ¥ý|ÿb·œy³ÿ þÑþ¾¡´³þ9üÈûYýz%oþÍûûŒüùþ5¾lþâüýüãþd€Ã`vþIþ"¥iÌV†[þ?þæÿT4ê2ÿ&ý„üÃý‘cÈÿYý…ûµû¥ýÿuÑ<þŽüˆüþ eHëtÿ§þWÿ¤2¦vpWþìýQÿ‰n‘Ö©ÿ<þ4þÕÿܦ/ÿlü¶ú.û^ýÒÿ‰®èÿýmüýüòþ… ¿µþmýöýiy'k( ÿÆÿž¨ïHÂþþVý]ý&ÿre‘¾ÿªýqü!ý/ÿ ÓözþáûæúÏûþ˦xÏåþÎý†þúV5.üþ.þPÿv®šQøÿÁþûþ‰Y»Møþ«ü›ûÆü]ÿZ^àþqü¤ûuüRþÃùÿbýëü9þüj'%ÿaþÒÿ2<üªô»þþåþT½]òýºü™ýªÿ ®ÿfý‹ûsûþüaÿÇË‘6ÿ=ýoüNý˜ÿ¼wÜU±þ‘þtÖ1ŸÔ«þ!þÿ#9³X/;þvý•þ¬¦ þ¾ûXû²ü¼þš3,þóüÊüûý^säÒÎÿäý¢ýXÿ¨ZæÎ²FÿYÿ¢¦YDg þ,ý"þ4½ð½uþ ü³üJþ+s9AÿÙüpûaûÞü‰ÿ¶%2¦ÿRþmþ9`²¸yÿãýIþ1ÎÒÖ ÌÿNþNÿ''»Çý"ü{üSþN›_PÿÙüšûûûÔýdï€Ýÿþý¬üý!ÿ—3ˆQ;ÿ¯ÿ< 9šn9ÿïýþz¯8‚ÿBý:ý“þBþéû.û0ü\þéM­Ýÿåý†üÎüÙþDÆþ8þlÿнdµÿ†þËþƒ{9žÀþœý;þýÿ›LyÿŒüûÿû£ýÎÿ]©þýHü1ýÿΜ  þÕýÇþ¥™»gÿÿ +§|_éþNý¨ýQÿÌvð"ÿdý ýñýŽÿ;™ðÿqýûúú9üËþæšT¶þAþmÿ<ßš ~äþ›þŒÿ¥Ðh@CKÿ`þOÿ$`‡_ÿÐü1üýØþÅq$þü:üWý­ÿÚÀ»þ¾üdüþl|ŒêªÿdÿKAZ(iþ÷ý\ÿŠû7,öÿêývý]þÇÿøÛÿýÜûèûhýûÿàö©°þýïüþu¹Zÿeþïþ•ß p™véþ±þ3MOßCûþ‚ýíýÿÐßÿ™ýMü=ü’ýÁÿ“÷þ0ýü¹üõþL¾ë‚QÿþwþÑÿ¯ òxüÿ,ÿÿ‡åáLÿzý•ýôþsuÓÿùý$ý‡ýÿÿ×Å¿þµü_ûÍûöýL¥³\‹þöý÷þ¶–ÉSÏÿÄþöþÈûaÉÁÿŠþ)ÿÙ\Púÿ—ý”üîüZþ8L¡þýüæü.ÿ3Ø)Gÿ5ý•ü´ý¥ÿ¿5å@Öÿlÿ1$Mïºþ«ý¸þúìÑߺþúýMþPÿ˜÷ÁÿáýMü—ûžü"ÿWP^ÿ;ýšüËý¾ÿœ”Æêÿ©þþ¯ÿÖóyu³Óÿ÷þõDi+Íÿáý›ý þDíKÒÁþ:ýüfý5ÿmhÿ³ý üüßýWjMR;Êþþ^ÿ"Õø‰WÿJÿK’ƒƒNþÐý¬þ,¦×TmþLý+ýEþ8EìÿØýéû«ûZý“ÿV"ÿ þJþ“ÿ«|Jµoÿ,ÿ{`~‰oRµþÛþ>î5ÄþCý»üýmÿ¾™‡ÿþÔüý¤þ[x¡G þ¦üÜüXþ¼ÆùÂäÿæÿLêuèŸÿþþ2¤óÆÿXþôý×þŒd‘éþ!ýáûAü,þ-[gïÿÎýÝü™ýDÿ=‰‰ÿrþçþÏÿîŠHކÿy¼ƒûÝŽþuýµý)ÿ3-hÔÿ@þ(ýpýïþ3s¸ÿþ7üñûUýjÿ™ ­õ`ÿ‹þÞþcÝÛ‰ÿÿK9É~¼iÿ$þwþ¿ÿdøðGÿÌýÿü°ý•ÿý,†þãüŠü‹ýþþ‡†ûZÿþÒý¿þáô|¯QÏÿ'ÿ#Ïç#Ftÿÿ]ä¾ÿçýéüsý ÿW`©ÿRþýþü^þ gÒ\þëüÊüÛý(Ú&ä¢ÿgÿ×ÊγyeÕþÆþÃÿRóRáÑÿTþÖýÃþ¹MßÿÞýüü•ý~ÿÛ/2þKý“ý½þ®a}=²ÿtþdþLm”è°ÿñÿ&“¥N\3ÿèýžý¦þ›ò×°äþFý-ýŒþëÿ‘JÍþçüü¤ü>þ•‚¥UÈÿ¡þ‰þçÿ«‹x‚äÿûþÁÿ{(:Þöãÿ­þpþmÿGdéaoþëüýŸþ.âyÿý±ü3ý€þ0PÒGÿùý`ýãýæÿT£Š@?ÿÿ i2¸ù[ÿåþÿÔÂͽþ5ý8ýŸþýÿ…–þÞüŠüÂýˆÿ:ÿZý“üý2ÿ™?¤ÿ"ÿKz4!GÿÌþzÿý´:+€ñþóýdþvÂê÷þãüCü6ý³þ"Ïíÿ9þý ýFþgL£¹<›þâýáþÚ£¨AþÿãÿÛT§ŸâªÿöýLýLþnü'9oÿ¨ý1ýþSÿ{Ð’ÿ†ýMüjüÀý jqúÿ}þþAÿH·#=Tôþ&ÿt>Þ‹„ÿ„þ|ÿZy(ÜèþýÂüûý¦ÿi("þöüý/þZµÿ0þ$ýnýfÿÉ=‡£ÒkÿsÿùE5ºÿÐþÿ“¥µAÀ”ÿšý(ýEþµÿºÎÿ©ýÎü;ý—þÿ£ðÿ$þúü/ýðþö9Åÿôþ ÿ3èÔ<ÿiÿ®xEŠö"ÿÚý5þÝÿf²þÿÞýÈüý'þÈÿÍ<¿þ•ý,ýãýÑÿѪQú ÿåýzþÅ Ô’,§˜îš“ªþ™ý/þóÿ6ú~‹þ”ýãýíþ<ãGþôüzü.ý'ÿ2…,‡þçýÿÙgBÔ&‹ÿ ÿ­ÿP<ñÿ`Þÿÿ±ÿ9Vlvsÿ`ý¬ü~ýÿ«”Þ%ÿ´ýýý@ÿã"þ!ýõü|þ²ƒ}jèÿ‡ÿ%õA|.ÿ»þÕÿû‹°ƒM*þ}ý2þ]ÿ|âéÿ8þ ýØüËý¸ÿSeF¹þOýýaþ]×cšÕÿœþÛþ/¨ûÌ!ÍÿSÿEÈoÿóýôýHÿä%^ðºþ4ýÎü}ýÿ6 ÿÑýôüTý;ÿe‘xÿáý0þrÿ"±Ä.w9úF¤‘ÿþý þ€ÿ)=‚‚þ…ý³ý¥þ‰ÿšý~ü¡üPþTqjQ¦þÅýoþrS°äÿóþÿŽ‚“AsGÿ¥ÿ7¢DÀý©üýXþ.]û‹ÿþ3ý~ýÿ’ÿYÖþ ý^ü‹ýÂÿr>¢ dÿÆÿ,àŒÆ:Žÿ®þvÿ_ü—ï÷Âþ½ýþAÿÀfjþ ýmüýÜþœ>³=ÿýÛüöýéÿ¢r¸âÿuþHþEÿ=T#\ØTˆÿ'¢´ÎÕÞÿþ”ý§þs.ÁŒwÿ¾ýÐüý{þàÿ0€ÿ=þõüÔüAþDãÂÍÿ&þËý·þœ‡"Jþëÿ›ÿdŸ¹¢…Šþ þýþçH7ÿÀý9ýæý™ÿäÿDþÂüvü­ýpÿÕf¥ëþ·ýïý[ÿsAŠI’+ÿ´þ±ÿ‡ß]Ó…ÿ‘ÿ¹",*¨þñüüŸý«ÿ<I2·þqýDýlþëÿÓËÿ¶ý£üý”þ¹¨*&Ÿkÿ*ÿ]<M Vÿ3ÿuø'<ËÆÿwþGþ)ÿ«’ “ÿßýyüVü²ý{ÿ®íjþ€ýàýÿ°éÇbßþþ‰þMµ£­20?Pãk¸ÔþÿýaþÀÿº>™ªþ+ýöüþbÿðÿ¸ÿ¸þmý÷üÄýDÿñßaåþ/þ…þâ绽Zƒÿ© §*‹×ÿÿ?ÿ)|O§ÿþ*ý–ý6ÿÄOÌ[ÿý¥ü(ýyþìÿØ€9ÿ4þ þáþ¶¶‹ïl«ÿ±þXÿüf¹gÃÿk£ä&ÕÁÿñýõüXýñþ—IÿÅýHý%þvÿ‹æ dþ*ýúüãýÒÿãÂ2ì˜ÿÿ Äv¹ûkÿ)ÿzÌöHûþnþÿþ|«o‡þµü/ü.ýºþ ª¶þÒýèýÚþsÒܧ#ÿòýÉý-ÿl9ôe¼.äÿ¶îîÚf‹ÿPþþ&ÿ!–JMÿdýÁü¥ýÿ0ncÿ¥ý§üýjþYÝì½Gÿ$þþýUÿ\¿ÿh!ÿMÿ™6ŽÀv¡]ÿ ÿÜÿ_CÅSƒþ ýþütþD|!þý¯üÄüÔýfÿ§}ÿDþ•ýÿýÊÿG9#ºþÙþ"Á+ÔC˜ÿöÿ5Ã_x§¥þ(ý%ý•þ;$ý¨ÿÞýöü\ý”þ’ïþxý×ügý2ÿ1(þ ¤ÿÎþlÿÊÐx¸Ùÿÿfÿ¨Aõ7½Hÿtþöþ‰Ïÿ'ÿûüëûdüÑý”ÿÊÿèýŠý4þÔÿgÃó…ÿüýmýŒþ¥“¾ž+™ùÿZ€Ý8'žþüýÉþ’Ršâÿëý ý•ýÔþ ­ÅÿûýªüeüCý2ÿ"È·ÿZþõýÿõ_ðY¯'ÿÔþ¶ÿv_i÷ÿDÿËÿ66 Øæþý£üÏý™ÿ%¾¼½þ%ý–ü4ýØþbŠÿ=þHýyý'ÿ^éh¡¾ ÿ¶þšÿ0ËRhöàÿ‡ÿ^ !å–“ÿ¼ýBý4þ–ÿÅ4>dþýü²üŠýNÿàýÙÿ^þ-ýýnþ`³?¥ÿþòþd-³þ·ázÿýþÐÿ“È¢‚êÿ¡þªþôÿ_4ò6Ìý=üüýóþ…²¸ÿ{þýšýýþ¾™Shþuýþ½ÿ¯S´ûÿÿëÿö”cÉZ§ÿdþþ ”[ wvþhýý{þÚÿØ~ ÿxý_ü|üþ!1Ûþ&þØþ]åé®xÿÎþ;ÿ½Âò¬qÐŒÿ¥ÿõ)v¥½ÿªý×üzýñþ³ÚiÃÿþþüøü1þ¨ÿ7ÏÿÆþ‚ýýNþ`CTñ:†ÿÜþ?ÿ”egÿÈo•ÿ ”Þ.uºÄþäýYþ„ÿÕdl‹þý†üýÂþƒ"œYÿÐýýðý™ÿö˜ Áÿ·þßþÇG^¼.Gÿ°ÿ"[®"² ÿ¹þ«ÿ9\ì­þýü[üÕüYþèÿdÛÿÒþ¸ýtý‹þ-[ºNÿòýñýÿá’¾bSëÿ¦1LS]™çþŠþŠÿï/õÿÈý‰ýBþÂÿåªÿþºüXüný,ÿ‹#ªHÿIþ þòÿ õþ£÷þÒþûÿ‘à!¡$Îÿ ?mþ%ý'ýFþ!@«þLýÛüÈý>ÿ(@qÿþ7ýÛýpÿE¿øÅ<Fÿ@ÿi7O·•ÿ¦ÿÓ#úè…‘ÿlþsþJÿˆB ÿyýpüˆüþÝÿîü˜þ”ýÊýÎþ0L8ÿ©þMÿõÊ’ø¥ÿ‚ÿ„®aE–ÿíþXÿd¹p¢¼ÿÎý„ütüÎýyÿI'Gÿøý?ýËý#ÿ’ŒUíÿŒþþ±þ> Á©i¥ÿ1½‰ Ìÿçþÿôÿ-â7–ÿþhýØý[ÿÕ&YÐþ ýü¿üBþÂÿ͍ÿ¶þ¨þiÿØfë~ÿŠþqÿYòšF€âÿK&1*ÿÁý?ýÓýkÿù^™ÿvý¹ürýÓþíÿ_Ïÿsþjýwýyþ/ûªê›‰ÿ6ÿÌ-jçyÿ;ÿ*{”ÜÚ9ÿþûþ46ö¡ÿêývü0üoý7ÿ‚ýiøþÌý«ýkþµÿî#3 ÿnþ¬þ'LÍW®ÿIÿL>qzüÿ ÿûþÄÿ$­.gþñü–üŸý%ÿ&Nsÿíýôü@ýlþîÿ;{[ÿŠþyþ‹ÿR‰”±MGÿ—ÿ Ÿ°¹as%ÿÜþlÿXýÙÿ¢þ¼ýÂýõþo(Ì`ÿlý2ügü“ýÿ`©äÿûþ–þðþ7Û¦5 žÿ¨þýþt4YB¶àÿÆËC‚ûÿwþrý…ý×þbÀÿÑýÚü5ý[þ¤ÿ„Dûþ½ýWýéýcÿÄæÕÿ8ÿÐÿ_Ìoúj´ÿÿuÿ–ûËW ¹ÿÞþîþëÿÞæþÙüüÌü`þ $ê…ÿ(þžýõýÿlùƒ˜ÿ»þ‚þ‰ÿj¿\êFŒÿéÿñ)¬Ú[.ÿ¿þCÿ¤²Õ]ÿ½ýïüuý²þØÿ\¼ÿ@þ ýÙü ý+ÿÓûíÿíþþRÿÈèCÖ¨€ÿ`ÿ\éfïù5´ÿõþ/ÿ>29l!ÿâý–ý“þýÿ-+Iþµü5üÍüFþèÿ–3ÿ‹þœþ³ÿL\}¸;èþÈþÛÿtí{¨'ÿÿŸÿ3‚y6ðAÿÔýyý\þªÿ—ÊéÿKþýýüåýgÿµÔ¹ÿXþdýLýjþ-uÅ7Lÿ¦ÿïZ\d-j$ÿÔþ ÿD‘¦»lGÿÿþºÿ¡øˆ/ÿ]ý9üiü£ýZÿÏ*×þÏýýwþòÿßÔÿþiþ ÿ“">`L½Áÿ´ÿðÔMáÿÉþ²þºÿù™W%…þŠý­ý~þ‘ÿU ¾þVý“üÙüTþBmr¤wÿ²þ ÿ0^ô×¢ÿHÿêÿIñíŽ7’8ÿíþËÿäMÖ ÿ?þ²ýMþÿ¶[Âÿuý‡ü§üäý†ÿmR˜ÿ¨þ<þÿŽð”,Öyÿÿ£ÿéqPé­W€ÿÄÿMžòn±þÌý$þ-ÿ?ÞþWýóüˆýþþ˜A´`ÿ×ýý—ý)ÿ«Ž…š³ÿ±ÿ“ôI¯®õ|ÿÍþRÿÜWéz.¡ÿåþXÿKñÿ&þÕüŒüDýÑþndÿÖýSý þ¬ÿîcé¤ÿŽþ•þªÿBÁGƒ9>ëÿ…Ùæïwíþnþ3ÿxy·Ó5ÿ÷ýªý>þrÿy`;ÿÔýÀü˜üºýÿê„)úþÿéÿåÿGÿÿ©tÂ×ÜB¸ÿ'ÿ²ÿ“12HÚþûý"þÿcJðŒÿþêü¾üÄýOÿ]•úÿÓþ þpþ³ÿ*Jrr)zÿ§ÿ´4İhwÿ“ÿ¸É¤^‡ÿLþ%þÈþÓÿ–H"ÿñý:ýfý©þC×ÃÿFþFý‚ý©þ7†ÉÖÿ‰ÿcëšü£-"ÿ8ÿe¾ˆƒ‰PÿrÿëD‚ðþýÇüý}þ ³[]ÿþpýéý&ÿjF3òþŸþ:ÿŽë†{qéÿoÉë+‚ _ÿŽþÜþÔÿºEëÿ°þþbþkÿlqƒÿ%þÓüXü<ýðþ„xcQ7ÿçþ]ÿh¢xRlÿDÿA sɯZÿ°ÿŒm»æ_ÿ8þèý‚þÚÿ-/²þFý¾üý ÿ.“çþíýôýÞþRÐqؽÜÿœÿZ¾¼Âý±ÿcÿe»Ç nÿqþ˜þwÿR>Kÿþ/ý1ý_þêÿáÿ3²þxýNýþZÿ¯FÔ²ÿÞÿØN>©rÿ]ÿ^šušºYjÿ;ÿ³ÿ®nÏÿ\þEýý þhÿ;C|ÿ2þ^ý²ýÑþ%2OgPÿ¶þËþÇÿTciµ·Pˆ½X¾óÿÐþ°þ`ÿuRbWÿþpþ<ÿ9€ëÿ¬þ$ýZüéüMþÏÿüB„‰ÿÿ ÿþÿK¸ÖÔÿ9ÿ¾ÿ7°ƒf1“­ÿÈÿx^ÙK Üþ"þ-þ*ÿUÆ]RÿþDý²ýÈþàÿ“V)ÿþ¬ý:þÿ:7`yÖÿ>J®JÀÿOÿéÿ_•+½ÿÃþ”þLÿ*I«ÿ©þ•ý/ýûýiÿ­SÙ\ÿêýcýÈýðþ^'û_Èÿ’ÿGµÔ ”Lçÿlÿ5¼‘ÿ ÿWÿ_Vi¦nÿþVýÅýÕþÅÿ3ÅÿŽþýŠý_þÄÿ8Ë. ÿšþ0ÿ†¤áHH+VJu_›=ÿ²þÿ%?rÓÏÿÆþ^þúþñÿ{avÿõýÒüÆü ýÿ›HÊÝÿ)ÿüþªÿç¿ÐK\ˆÿ¡ÿ¨îöHz¯ÿ( çãÿcþûý¨þ¶ÿ]q×ÿ©þ¿ýÅý|þ‰ÿx‹™ÿlþ¶ý¾ýÈþx½Âè&úÚf\t0|ÿ¤ÿ‡êÿìßBÿ­þÿÊÿ'AÿþVý§ý¯þïÿìðÛÿ‡þ®ý”ýuþöÿ)©ßÿVÿ»ÿæ ÈÞ Ê ÊÞ™@îÿÿÿíÿŽ@:ÐþßýëýŽþHÿÐÿ¡ÿ¯þÄý~ýõý7ÿÍ­s•|ÿ®þÜþèÿ ÄëQ€YôïùtÎ`ðÿïþÔþÅÿðk D%ÿþäþ¡ÿ=yäÿŠþLýÜüGý}þà»,ÿ©þÿ]€ Ùëâÿ¥ÿ@?\™~uàÿ H’FËþñý2þ ÿéÿf ÿ'þ÷ý^þ?ÿ;…ÚÿÈþÊý\ýþ¦ÿìøEc,ªs:~ɘÅÿ ÿ=ޏòJ­ÿÕþÿ¼ÿDZµÿ…þ¤ý–ý0þ<ÿU® ÿþªýEþ•ÿ«Ô:ÿJÿ9q‚íT9|UȹxVuC#ÿÉþ‰ÿ®y ê…ÿZþþIþöþ¦ÿ ÿÎþäýký˜ý¨þ:[¡üÿÞþªþhÿysè}ºh¬tži"žbÿîþˆÿŠ9Y¹ÿ—þŒþÿëÿƒ:ÿóýLýKý"þuÿ`‚ )ÿxþ¼þÛÿH‹kËÿäÿ×x·à?EZôbÿ8þ þ‘þhÿ$#[ÿ„þþAþ ÿsÿþvýÙý ÿ`rT‹,sEÐÿ"›_r*ÿÿŽÿ'‘;'ÿþœýÊý­þÐÿOõÿ6ÿiþ÷ý]þkÿh Lbÿÿ ÿ Ú¨ƒÍ³Þ¥TI kÿçþRÿ8¬Z1üþLþ1þ´þkÿŒÿÿþAþ§ýˆýWþÀÿãe)3)ÿÔþAÿ*Ô¨ƒsóòK: rÿÀÿykíÈÿÏþ€þÉþ†ÿRl¹ÿ·þÓýqýÿýÿöÿ;õÿ2ÿ‹þ©þ|ÿ›»Rìý=÷ÿWO :ÁWDëtc{ýÿ¾þ;þZþÿñÿ9Áÿ ÿwþTþêþÚÿR#uÿmþœý²ý–þÎÿ²|×gXɳl`ºÕòÿÂÃ^e³‚–ÿXÿ›ÿAßÇåÿ×þþ°ý2þ(ÿÎÿâÿ„ÿÉþ:þsþPÿ=õpƒÿÿÿÖÿ!?:“ïÛ|*c&åÿ#ÿ=ÿæÿÕœ“·­ÿÒþeþ«þRÿŸÿZÿ¶þèý~ýÿý#ÿD4„‹ÿÿÿ´ÿΧºG¶Q†piâ¿ê¯åÿñÿy)šGC@ÿ˜þwþÿÿÿu7‚ÿþàýþÄþÿôÿàÿ.ÿqþ]þùþnL;޽¹ûôq´sè¥P‘ý³mÿþcþèþ½ÿ'üÿzÿÄþJþþRÿúÿ@éÿðþøýÄýKþQÿŒ``åaYA m.q‰'‡?òMÜÍçÿˆÿ°ÿTX\ÿPþ¤ýÕýŸþaÿÌÿ­ÿÿ\þgþÿìÿΑ­ÿ ÿÞþkÿ™¶ALæGaéG=w?_ÿ+ÿ–ÿ€k ++ÿ}þþÿnÿsÿÿOþ²ýÏýŽþ•ÿ˜¼ÿ+ÿÿÿ—r³‚øXEìÆq«'%e7¦o‚jÿ‚þ*þªþ•ÿ6_#ÿPþ$þþÿ£ÿ¼ÿ*ÿ‚þVþ·þ­ÿú±ï/‘FÌŸã|§9Œ4ãÿéþ|þÝþ¡ÿŸÿÑþ6þXþùþ¨ÿ'Fÿ^þðýþîþ16É5ÏÿûägpÖäSkï§Ìâzÿ~ÿ0CÒåÿ®þÌýÁýGþèþoÿŒÿÿˆþsþÝþ¶ÿ¼3ÂÜÿýþ}þÞþ@XøDñ0¦K¸ ²ÿ>ÿmÿONž-F2ÿ~þ”þÿÿÂÿrÿ—þÏýªýþÿœ_Äÿ4ÿôþhÿ€tÒŸéèÿi5„E|Èp‰!³¾§ÿ’þþjþTÿ ˆNlÿ‰þ7þ]þÛþ{ÿ³ÿ>ÿšþ0þ>þÿ¦Ö1âÿKôšô¥î|€òÂnT€Z.ÿþ×þšÿ$=Èÿ×þþþ†þ8ÿðÿ ÿÅþ:þ"þ¾þØÿ´í§ xÿ—ÿs|U«)4d¢>Á ö1‰ÿfÿîb=kÿöý˜ýÜý{þ6ÿ}ÿ!ÿ¥þsþ£þVÿZ÷Ö6OÿŒþŸþŽÿ»±+á0ÏâIëV*oÿHÿêÿÏM;”vÿ‘þxþìþ†ÿüÿÔÿÿ%þ½ýÒýyþ|ÿ)+Çÿ4ÿÑþ+ÿ14Òà46²ÿÙÿu=C·¬™˜  Ìþþ(þêþÎÿ†ÂÿÝþWþ9þšþKÿžÿQÿÃþ=þþšþÓÿÄèFKËÿúÿœx Þ0•Hr40¾×°ÿîþÿÿm$ÿ4þÓýþ¹þ¤ÿ ¼ÿ$ÿ“þCþ—þwÿ>Ÿ‘üÿIÿ9ÿâÿê±~³ïogóƒ‰mºÿ{ÿúÿÁQxçŸÿ[þ¶ý±ý=þ ÿpÿ1ÿ»þdþ\þòþòÿ§ÅdŒÿºþþBÿ>Mà7¶•ð¹^C™¸Ûÿ|ÿâÿ”,©šÿ·þ}þÇþmÿ">‘ÿ¥þäýýùýðþ­ÿäÿ»ÿBÿÝþÿðÿå¶so¹ÿ”ÿ ý:ë`É–±]|9ÿLþ*þ¤þyÿY˜*ÿwþ%þwþ.ÿ”ÿmÿüþ]þôýRþYÿvU®=hæÿáÿV9ý ŠÞJ:â©úÐ!SÿCÿžÿ"“Yhÿ^þµý’ý(þ.ÿæÿ«ÿÿpþ‡þ3ÿâÿRZÎÿ'ÿ ÿ‰ÿx³¦ºJŠE³M„UÂñÿ~ÿÉÿt&‘8çþþ½ýþëþoÿaÿýþqþþxþbÿ1¡”ëÿÿÇþÿÞÿï¾ÈHº[€M.AyiÃÿäÿgá¹Æÿæþ€þ™þ?ÿ%†IÿRþžý¶ýrþ-ÿ¡ÿ·ÿOÿØþýþ¶ÿ«ž§ºìÿ|ÿªÿ“ +-»¢èfµª÷»ÿ¯þKþ€þ;ÿ+Œ.uÿ©þþCþðþÿ²ÿuÿÇþ&þ5þîþæÿál+ÿÿØÿ9) Dð?m g Þ‚š×ÿžÿÈÿ;©~®ÿ¸þäýxýÖýÍþ¥ÿ òÿSÿ¥þþ ÿ­ÿFzFÿîþÿçÿ3R°h¶Ö\™ €2ÿµÿ:öŠbuUÿdþäý$þåþtÿ’ÿJÿ þþþÏþ©ÿf©)_ÿùþÿ»ÿÇ¿W´ÍÆn— :4¡Èîÿ ÿ…þþ%ÿ¡zÑÿ¿þ¾ýwýëý¨þjÿÏÿŠÿ ÿðþTÿ%7ïË8†ÿzÿ?Bô9ï2¨µ“ßyaHÿ”þmþûþáÿdGºÿÛþþþ¨þSÿÒÿÝÿBÿxþ)þqþ2ÿC  –×ÿ ëZGª± “=Dzö:ÒÿÎÿ@×ß65ÿ!þhýŒýVþ3ÿÝÿ°ÿÿ¸þØþQÿjwÿÿóþ‰ÿÃð‚|éx÷rÈŒÈÃÿáÿ?aËÜÿÙþ.þGþïþÿÂÿ’ÿÙþþäýJþÿùÿkßÿkÿ:ÿ•ÿ|U™^Ççÿy\2»Œ°ÉD)~óã?vÿÊþ‡þÿèÿ²C:ÿ'þ°ýßýjþ+ÿ®ÿ’ÿ*ÿóþÿ¸ÿÍ«Ï\”ÅÿŠÿ÷À?kذÞZÖ¸òøÿÿ­þÿÊÿPR×ÿóþ&þþ{þ(ÿÙÿ$¸ÿûþzþ]þÈþµÿŠÈ9ÖÿøÿËÆqœ7ýÿ@ã—ÂTµ(èÿ;Îôˆªÿ‚þ”ý{ýþðþÍÿ7äÿ;ÿÌþ¶þÿÊÿWLßÿ]ÿüþAÿAd+l'Ž…àvþë:pØÿ¨ÿÑ,÷PTÿ‡þwþùþÿöÿÝÿÿ:þÊýäý~þÿXƒ8¿ÿZÿ|ÿA‚uà ­ÿíõ¿¿ 2Š5g×ê‡Ûÿ ÿ„þÈþ—ÿXÁŠžÿ‡þåýÎý5þþþ–ÿ›ÿQÿ ÿðþ]ÿR<¢‡ã›ÿ÷ÿ¼A/†Ú}¨Óh«Åÿ"ÿ0ÿ±ÿBðÿÿ,þâý5þóþÞÿ`nÿÉþ^þ„þEÿ‚=ÎÿÞÿœ’bÁRJ`íÿþÿŸl½€h5¯ñÏ, ÿûýŸýòý³þ¡ÿ&íÿXÿØþ˜þÖþ’ÿ7_'¨ÿ!ÿ%ÿÙÿϰ2ý;›t¿u%2¥ß©ÿäÿ€ë÷·ÿëþ¼þÿ–ÿ!oÿzþÅýŠýþýÿñÿUKöÿŠÿ‰ÿÂEs0¬ÿÌÿtƒ‚Ðc£ÓI^ÄñÁ9gÿÇþÑþYÿŸ°õÿëþ!þÊýþåþ—ÿÁÿŒÿ&ÿÌþõþ¶ÿ’2n_ïÿ ^ 8­÷_2°vßÉ?WˆÿPÿÿëÿ5 Cÿgþùýþ³þ±ÿa^ÚÿÿlþSþçþ£ÿ*j?ßÿÚÿX# ²ºÄ Øÿ`1ª­Lœ‚ØôŒÿ„þòýíýqþVÿúÿõÿ~ÿàþeþ‚þ;ÿÿÿnv_ÿ&ÿŠÿJ/ààN·gCr%gi­ÿ¨ÿײJÿöþ ÿyÿUÏÿäþþýmýšý€þÿ,k)¦ÿÿâÿ}e^Ôÿ¹ÿ"7¾’ëþOK­ú¥Ïÿ ÿÏþÿ­ÿ_˜CÿvþòýþÃþwÿÉÿ·ÿ?ÿ­þœþ+ÿûÿÉR8®>&w7ú+Ç[ÿÿ[¹ý¶Ýÿÿ™ÿ˜ÿÏÿþÿ[ÿ—þþåý[þVÿ+p+mÿ™þGþŸþ=ÿâÿSAâÿÄÿ¿¯ró&\ôÿHþ”΋Ì÷ÿ3•ç½òÿÿUþþ`þ%ÿºÿÇÿlÿËþ5þ5þØþ¯ÿ`­Z¯ÿOÿmÿóÿÄw”5Àh{)€sØÎåÿ˜ÿÍÿ>´¿4‡ÿÿ ÿmÿ Kíÿ,ÿ;þwýhýþÿìÿb7´ÿsÿ£ÿËJ0¡ºÿéÿ¾Çk„4tD‡ì< Chÿòþìþ\ÿ `qÿ§þ þ þ¨þ`ÿØÿëÿpÿ¹þdþ¤þRÿD 0Ój7hØ æDfÔÿÿÿ«pUvÛÿ‘ÿ­ÿÿÖþ)þÐý(þÿíÿfZ¶ÿÉþ>þNþÒþ›ÿ@UÁÿÎÿA(Ul˜Më„ä¼9ÖÿÞÿJÙùrÿÎþJþcþþþ†ÿ³ÿ}ÿÜþ,þÿývþCÿ)Ĭ’ÿZÿŽÿE Y4Òf]ôÊq±NN@«ÿ–ÿùÿ‘Îvãÿ_ÿÿXÿòÿR0—ÿ£þºýsýâý®þ•ÿ:@Ôÿ{ÿjÿ¾ÿ|-Mòjðÿìÿ“x$k WšZ…örwÛEÿáþÿ´ÿ!Ÿÿæþ?þ2þ·þiÿþÿ/ºÿíþaþUþÐþÀÿ¬ý³hxÃûa{ãÿóÿ~E1®à"©ÿ­ÿ$Ïÿ3ÿ{þýý)þäþ±ÿAYÎÿøþpþcþÅþ…ÿ5e/àÿ­ÿâÿ¨£à\mßrèÚ4mßÿ³ÿ¢õ¿,aÿ´þ–þûþlÿ¥ÿÿäþ0þíý6þêþâÿ«ÔuëÿsÿgÿîÿŸ ÜiF»†I½†¦¤íÿÿØÿlÈ®@¦ÿ,ÿ<ÿ»ÿ'<Ýÿÿþ¦ýØý|þcÿ2Öÿnÿ3ÿeÿÚ;2È0ñÿQº+\³f{òŠºP«ÿÿþëþWÿÇÿõÿÈÿ-ÿˆþZþ±þOÿõÿ>Üÿÿwþ)þcþ8ÿ0ÑÛ€eÏkäžÈâÿ1îÆ$Ý6rÕÿµÿöÿ# ¦ÿëþ:þþ†þ:ÿíÿAíÿ<ÿ©þdþ–þCÿýÿWQ ±ÿªÿ0ïéÁ+ª•ßlør©ðÿ†ÿ¯ÿB¼Ý–çÿ*ÿÛþýþKÿ’ÿŽÿÿIþáýòýþ˜ÿ‚ئ(“ÿXÿ®ÿGÎõƒG2ü›”ãù/¼ÿâÿjÍÎxÙÿFÿ+ÿzÿâÿ.iÿˆþ÷ýéý_þ6ÿäÿ Çÿbÿ ÿÿ¼ÿ„Q.H¼]èñpÓi_փة%Oÿýþ$ÿwÿ¾ÿÃÿRÿÅþŠþ³þ2ÿÛÿ>^ÿ¦þ!þ-þàþËÿƒéç˜r­›ð» ]!¿ÿçjªüÿÄÿñÿ(<Yÿ¥þRþnþäþŠÿøÿÒÿKÿ¾þfþþCÿku$¥ÿpÿ¿ÿ]§¼_öÍîiö¤æ‚ÿ’ÿŸëÓC‘ÿ'ÿÿ<ÿ…ÿÿÿuþõýÒýAþ2ÿ(°»Vµÿ\ÿŠÿŠòò hë¢X‹X~ìÿ÷ÿiÒ÷¿ rÿ)ÿDÿ™ÿÿÿ£ÿîþ\þþXþÿ¬ÿçÿ¾ÿKÿÏþÃþNÿÝWTæc“˜¹kð‚aÉuëñw‹šÿÿ ÿBÿ–ÿ·ÿqÿÿ»þ°þÿ£ÿ ”ÿàþ;þþœþmÿ5ÄßžoågÓÊUÆV:¤VÒç‹ÌÑÿóÿ6oVÉÿÿ•þkþ¨þ4ÿ¤ÿ£ÿSÿÚþzþþ&ÿæÿu©aÍÿrÿ‹ÿþÿ®Y™q1 vý+ß2H”ÿyÿÛÿoð ›ôÿwÿ:ÿ@ÿxÿ†ÿ2ÿ¯þ3þëý(þêþÌÿm¥]Éÿiÿwÿ×ÿlòו¸PþL!œÝD/€å%ûU˜ÿ*ÿÿ`ÿÓÿ ÓÿXÿÔþqþwþîþrÿ´ÿ§ÿCÿÀþþÿÁÿOt#½~„ä[†[“eµSÜÔ `ÿÿ6ÿÿÂÿ‘ÿ,ÿÓþ¬þêþzÿðÿ Âÿ$ÿrþ'þsþÿôÿžÊSL‹Ê!¡c¥.£Ð’ç3×ÿÛÿ(ªA™ÿùþ‘þ•þöþPÿiÿ@ÿæþþ‘þ ÿ½ÿ_¶‚ëÿnÿGÿŠÿ8ÿmyUbÍÿàd•Üÿ–ÿÇÿFÙÏ=ªÿ@ÿ0ÿiÿÿ`ÿöþlþÿýþ¢þbÿpRÕÿjÿOÿ’ÿ,Í ê¥lzñô¸lŸ÷?)•Óÿ9ÿêþ ÿÿÛÿÞÿ–ÿ ÿ²þœþäþAÿ‚ÿ„ÿ*ÿ©þhþŸþ<ÿ&ÿ^Aêi­WNŸi¡$¯öLf¡ÿ,ÿ(ÿ{ÿ»ÿ§ÿ\ÿ÷þ¨þµþÿŒÿÃÿ¬ÿ5ÿþKþjþèþ¢ÿM‘s2 J°¹lí—­i§…õLÞÿÈÿ‰Ê–Rÿ¯þwþ­þýþ.ÿ'ÿÙþ|þtþ×þuÿ%—ˆ }ÿ#ÿ0ÿÀÿ…[W! H­ö á$¿ÿ¿ÿ° íxØÿLÿÿMÿÿ}ÿ:ÿ¸þ9þþfþùþžÿ¹ÿcÿ@ÿsÿ°ÕuG–ÚºBËž¼b`Þ\ÿÛþ×þAÿ´ÿëÿ×ÿpÿôþ»þßþ)ÿoÿ~ÿ+ÿªþZþiþçþÅÿª3G™Y€à3W0È“ô|ïõs¬îÿjÿLÿŒÿÏÿÙÿ¥ÿ1ÿ¹þ˜þÛþCÿœÿ±ÿ`ÿÞþ‰þˆþßþƒÿ&mSÊÿÏÿCí{ìBßÉøJ‰nëRéÿËÿ–ïâsºÿøþþþÄþÿÿéþšþþ¾þAÿñÿvƒ(¥ÿ4ÿÿÿ1Ó=RõlÉüÈ,{ýÿÖÿ›õêŒòÿ\ÿÿ/ÿjÿ–ÿ‰ÿ ÿþ<þLþ³þLÿÅÿÒÿ“ÿBÿÿBÿÖÿEŸGO¥#”°gÉÐt„h˜ÿöþÆþ ÿzÿØÿóÿ«ÿ2ÿàþÔþÿMÿrÿ9ÿÉþfþNþ¨þrÿZö2 ¦Zb¬ [Wÿ¤‰¿8¼è—õ7Ÿÿqÿ¨ÿîÿ âÿjÿÚþˆþ’þàþNÿ”ÿvÿÿ¶þ“þÎþeÿMB÷ÿ›ÿ~ÿÕÿ{/¸Û‘+îì!cbvöÿ½ÿ÷ÿð Á?ÿ±þþœþÝþ ÿëþ¡þuþ‹þøþ¢ÿ7d)±ÿ3ÿÿVÿòÿšEéà kÍØyâT(Þâ‘ùÿZÿÿÿUÿŸÿ¶ÿoÿïþþQþvþêþ`ÿÿuÿ4ÿÿþÿ«ÿgÿG)ºQ0[ÅDj)òè'€R¬ÔÿÿÅþðþZÿÇÿýÿÒÿlÿ ÿâþðþ.ÿaÿGÿðþþXþ‹þ3ÿ³ ûžLF‡ñUq<겯úm®ŽoÞÿ±ÿÚÿ G'«ÿ ÿ•þnþšþÿeÿyÿHÿÿÒþéþWÿÚÿ18ïÿƒÿPÿÿ+ê’Ü¿m!ùJY§#Ñÿîÿeå&ÿe˜ÿõþ¦þ¨þãþÿÿÔþþŠþÄþPÿæÿ;0Ôÿ[ÿÿPÿÝÿ†C×·Ô3¦Ú³JÆbYšßñ®oÿÿÿ`ÿÂÿõÿÊÿXÿØþþtþÀþ"ÿ[ÿYÿ(ÿúþ ÿ‹ÿAô_Vém,9™r^)3‚²”FwÿÿÿZÿÏÿüÿÿ4ÿðþìþ(ÿcÿgÿ1ÿÙþŠþŠþüþ²ÿfÙä—I:rél¬–JóÄæ?…ŒF¿8ùÿY™“eÿÀþgþoþËþ8ÿrÿsÿKÿÿÿ`ÿËÿ5ýÿÿKÿjÿìÿ´zìí©T%SoSŒ+f×..´ôÿCÿÙþÈþÿAÿJÿÿÕþ¤þ·þÿ¢ÿ+ýÿšÿVÿiÿÔÿwR0䩬üxÖè³DÙ­ÃîÿÌG£ÿ/ÿÿQÿÉÿ%!Æÿ?ÿÅþŽþ¬þôþ-ÿAÿ(ÿÿþÿgÿÐ_z$Ÿ5iïaŽM%8tª§P¤ÝÿRÿ(ÿaÿÑÿ(ÀÿAÿÜþÁþúþKÿxÿjÿ#ÿÏþ°þîþoÿ€¤s/FÉiÑÕ‰ûó;_Dão+/l³¿_­ÿîþcþ?þŒþÿdÿ€ÿ`ÿ#ÿÿ@ÿÿôÿ#ýÿÿEÿ8ÿ“ÿL$»â®P2gl0¿O$J§ Ñ*rÿëþÄþÿUÿyÿWÿÿ¢þ€þ¸þ-ÿ¡ÿêÿâÿÿ_ÿbÿ¶ÿGâ7*ÚzNŠéÞ‚ÑÍèùÖ]·ÿ/ÿøþ%ÿ¡ÿF €ÿãþ€þyþ²þúþ$ÿÿñþéþ/ÿ¼ÿlF¦2ÿÿ4»@ŒŒN þ-mjæ6¢ÿ^ÿpÿÄÿÈÿFÿÅþþ·þÿjÿÿQÿúþÀþÔþ/ÿ°ÿ'W9ýÿÝÿ…0ºê¸BÇ•·ÿ=;ñ‹HDzÁÜ“òÿ'ÿyþ-þYþÊþ8ÿsÿjÿ,ÿÿÿdÿÁÿþÿíÿ™ÿAÿ$ÿdÿÎr¼¥IîÖQgGF„ØýÁ7”ÿÿäþÿiÿŸÿÿ3ÿµþ`þiþÄþ@ÿ£ÿ½ÿšÿpÿsÿ¶ÿ7ÇÃY>¾YÒö¹M÷ÜêæzÜÿPÿÿÿƒÿF.·ÿÿ‘þkþ•þãþÿ!ÿúþÝþÿoÿ¾ªC+$„˜^Þõ7wx ŒúÿŸÿ˜ÿØÿ$ØÿUÿÆþvþ‰þæþWÿ ÿšÿKÿøþÜþ ÿtÿæÿ ÞÿÁÿãÿY ®ð}ñ•Å6»r[ÈóÁ3uÿ»þTþ]þ¶þ'ÿyÿ‚ÿIÿ ÿÿ5ÿ‘ÿçÿüÿÃÿqÿ?ÿZÿØÿ”<–’CåÁê=‘«hï…Xs»çÅXÈÿKÿÿ@ÿ•ÿØÿÚÿƒÿôþwþKþ|þìþjÿ²ÿ²ÿ‘ÿ…ÿµÿ+»Ña ‚#º ó‘1úõ ¹/™ÿ1ÿ(ÿ‚ÿTVóÿVÿÈþ„þ’þÙþ)ÿJÿ.ÿÿúþ6ÿÄÿlàõ½^+“ ’·ƒÏÁóJ‚côiûÿÕÿ9DÿÿvÿØþkþeþ¼þ@ÿ²ÿÓÿ›ÿ?ÿûþõþ9ÿ¤ÿïÿüÿÕÿ©ÿ±ÿÕ°¨¤ùAAü¤mtµîáwÇÿÿþoþ¸þ*ÿ…ÿ”ÿXÿÿÓþçþ<ÿ¯ÿõÿìÿªÿeÿZÿ°ÿPô\l'ËÂ"”ؽSÕrT¹¿vöÿoÿ)ÿGÿÿðÿ Äÿ0ÿ”þ4þ1þþÿ‚ÿ©ÿ¢ÿŽÿ¡ÿøÿ}ìánþÿäÿ7׃úºSüÞö åyåÿ`ÿ/ÿfÿÔÿ5PmÿÒþyþxþÄþ)ÿdÿYÿ#ÿóþøþRÿçÿn±£X ‚“Ë›'·„£]s9ÇK 8M ÿîþgþFþþÿŸÿáÿÆÿnÿÿÜþýþ\ÿ·ÿÝÿÐÿ¥ÿ›ÿæÿ†B× È<º|ä:R'؈l“Îà£Rÿ½þ‹þ¹þ ÿ‚ÿžÿgÿÿºþ«þïþgÿÎÿóÿÜÿ£ÿ{ÿ¢ÿ­B ­z”ùƒëùª%£X[„•u§ÿWÿ]ÿ¥ÿþÿ/ýÿjÿ¹þ8þþQþÕþSÿ›ÿ®ÿ™ÿÿÆÿ8®óæˆãÿOÙÿÈaÕç ÆOÄÿiÿjÿ³ÿ : †ÿñþþ|þÂþ0ÿ{ÿÿLÿÿàþ ÿÿe‡e11ˆÔ´BÃrqÄ2rk¨K3FU3ÄÿÿˆþGþnþíþˆÿéÿçÿ›ÿ4ÿèþèþ-ÿ‚ÿ¾ÿÌÿ±ÿ˜ÿÆÿDñ•èÈUÙŒ’âBqX¢eožÂ²R³ÿÿÑþÜþ+ÿ‰ÿªÿtÿ ÿ©þ}þªþ!ÿ›ÿêÿúÿÐÿžÿ§ÿõÿjÚòžbhÄbò%ñrÝpQg{=Öÿÿsÿ¨ÿûÿ9£ÿöþ`þþ5þ­þ1ÿ‡ÿ¨ÿ•ÿÿ¡ÿùÿd»Ö Cy²íÉiüÀÐÿ¬&´ÿŠÿ¡ÿÝÿùÿ‘ÿ ÿ¢þþÀþ7ÿ—ÿ­ÿ|ÿ ÿÐþÐþ$ÿÿ^_@?vãg»[ÙhFŠúWvIä…THJ;çÿTÿ¾þaþbþÅþ]ÿÏÿéÿ´ÿJÿæþÌþÿþSÿ¥ÿÎÿ¿ÿ¥ÿ¹ÿ˜5£©Xê‘Ì6}7ÂaE^†šgïÿnÿÿÿ4ÿ†ÿªÿ}ÿÿ˜þFþ\þÏþ_ÿÖÿÿÿÎÿ¹ÿØÿ"‚ÀµzD@‘)Ç¢þy@DduOùÿ¨ÿ†ÿ™ÿÛÿ¿ÿ(ÿ†þþ"þ‡þÿmÿšÿ„ÿ]ÿcÿ¢ÿp­™VVàj³¥QÝ”ŸÝ1ôuùÿ«ÿ˜ÿºÿäÿÙÿ†ÿÿ¯þ€þ¯þ!ÿÿÀÿ¦ÿCÿÕþ©þÏþ4ÿ²ÿ1-3\·9Ÿ¯få`'WÆ9o¨aEID„ÿüþþpþ´þ4ÿ¤ÿÓÿ±ÿDÿÔþªþÔþ+ÿ’ÿÐÿÏÿ°ÿªÿÕÿ<É=`;êšÓ=”®hâe&+\Ž/Ãÿfÿ8ÿQÿŒÿ©ÿƒÿ ÿ™þ3þ/þ‹þÿ¶ÿäÿÀÿÁÿôÿN‘•rE3pùš $Ó:©YJm€5àÿ£ÿ™ÿÌÿÜÿaÿÇþTþAþ‰þýþmÿ¤ÿÿWÿ>ÿaÿ»ÿ2‹œ€Q=kÚTœ¡W暘Ö,jUímþÿÃÿÅÿÚÿÏÿ’ÿ7ÿÖþ¥þËþ0ÿžÿäÿÙÿyÿÿþ±þ¯þÿþ~ÿóÿ.<D`¯'ˆ©™Qe»5‘˜Mä‰WYb;àÿiÿôþ·þÕþ1ÿÿÅÿ²ÿXÿðþ»þÍþ ÿ•ÿíÿèÿÌÿÍÿ ƒó13ÉÀøX³Û¥%›:Bƒšu%ÉÿŒÿÿ³ÿÃÿ¤ÿNÿÈþWþ6þqþöþ–ÿ0áÿÄÿÜÿ+s’‡aGrê{õ(ötê‡c…¸À6àÿµÿÌÿýÿùÿœÿÿŸþzþ¦þÿtÿ´ÿ¥ÿhÿ4ÿ)ÿkÿçÿ^¢«q‡Ø8Vï “Ç. YÞSìÿËÿÒÿÐÿ­ÿdÿÿÏþâþ5ÿœÿîÿùÿªÿ0ÿÈþþËþDÿÆÿHP[‘óRŠ„4Äxy».’ªtŸWLb\-ÌÿYÿÿýþ/ÿtÿ¨ÿžÿSÿõþ¸þ¹þÿ‡ÿõÿ$ìÿÅÿÙÿ.•éøÏËÿZ»òÍYÈK'jšœhÇÿ³ÿÁÿÎÿ¼ÿkÿéþpþ=þ]þÎþlÿìÿ$ãÿ´ÿ¸ÿûÿJƒ‘uUkÂ<·û〥|˜ÒéÌ}¿ÿ­ÿÊÿæÿçÿ¯ÿ?ÿÖþ©þ½þ ÿmÿ¦ÿšÿ\ÿÿíþÿ†ÿx±«ŒŒ¾Le6Þ“}¦y§„„Æÿ¸ÿ·ÿ©ÿvÿ#ÿæþåþÿvÿÏÿäÿ¨ÿ:ÿÌþŒþ¤þ ÿ‰ÿñÿ2@7RšõDa1Û”¬ mh ”;(B[T«ÿEÿÿÿHÿtÿoÿ0ÿÜþ þšþáþbÿØÿ*ùÿ¹ÿ¤ÿÒÿ'‡Ì×ÃÂê: âÐnäW:xœ‰:éÿ»ÿ°ÿ´ÿ­ÿsÿÿ’þLþNþ§þ5ÿ¶ÿúÿÏÿ’ÿ…ÿ´ÿRˆˆlk›ôb´³i©‚Ùý¹AÓÿ˜ÿÿ©ÿÂÿ¯ÿeÿÿÞþÛþÿlÿžÿŽÿPÿüþ¿þÏþ1ÿ¹ÿB¢½§–¥Ò7Ú–tòa¥ M½0×ÿ±ÿ­ÿµÿŸÿ\ÿÿÿÿVÿ§ÿËÿ¥ÿNÿçþ›þžþðþeÿØÿ'7%%K”ð33É¥¹\e™8,Uw_ÿLÿ"ÿ,ÿPÿVÿ'ÿâþ£þŒþÆþ@ÿÂÿ >Æÿ“ÿ˜ÿÑÿ4“ÁÇËã ÌÓ2x°°pÏÿ¤ÿœÿ¥ÿˆÿ:ÿ×þ„þdþ›þÿ‰ÿÕÿèÿ»ÿzÿbÿÿÎÿ6©–ƒ†¶h…eÀ”®ð'5ùzòÿ‘ÿfÿuÿ¢ÿ±ÿÿQÿÿùþÿaÿ‘ÿÿYÿùþ¦þžþèþlÿ‡¾»¤”¦Ü è«x€Ð?“­réXíÿ¹ÿ¹ÿÐÿÊÿ—ÿUÿÿÿ&ÿlÿÿ–ÿZÿùþ§þžþâþRÿËÿ,ùÿ6™ù&÷ÍÌOxl1R‘™]ûÿ‘ÿAÿ&ÿ6ÿ;ÿÿëþªþˆþ³þ$ÿ§ÿG#Ïÿ‰ÿtÿÿþÿi­ÏÛãY¨Ä¢7ª>!@‡ÉÔ—:ÝÿšÿŒÿ›ÿ—ÿlÿ!ÿËþþ¢þôþZÿ­ÿËÿ ÿ[ÿ:ÿSÿ¥ÿŠº¸ƒÓ"SU%ܲÈHi:º%¦ÿ]ÿZÿˆÿ¬ÿ«ÿ‹ÿTÿ'ÿ,ÿ]ÿˆÿ•ÿmÿ ÿ©þ‡þºþ5ÿÛÿm¶¾¥‡ˆ¹ñ Õš‹Á!´Œ€ ÏÿÑÿùÿçÿ¤ÿPÿÿ ÿ>ÿnÿ‚ÿgÿÿÊþ·þéþQÿÎÿ)4 ØÿÃÿèÿOÄ7(ýì Eqv2³? R®Ò¨HÏÿbÿ/ÿ,ÿ/ÿ#ÿÿÁþ”þ¬þÿ€ÿþÿB'Õÿ„ÿXÿnÿÏÿGžÒÜÒç%nž¡\ãwCM’áô»Xèÿ‘ÿwÿŒÿœÿ“ÿiÿÿÐþÂþîþ9ÿ†ÿ§ÿÿ?ÿÿÿnÿüÿ„ÒãÁ‹wšÖ +êÊÝZkù^ÉÿcÿTÿƒÿ³ÿÉÿ¼ÿ…ÿNÿ@ÿVÿpÿƒÿmÿÿÂþ’þ§þÿ³ÿJŸ²–kc’ÐýɳÑ`›…&©5ðÿöÿ(A.èÿ‚ÿ*ÿÿ ÿEÿfÿaÿ*ÿìþ×þøþPÿÉÿ%3 Èÿ•ÿ¦ÿ‚î4A%(Imr9ÌaU¹ïã“‘ÿKÿ4ÿ1ÿ0ÿÿåþ»þÂþýþ`ÿÒÿÛÿÿQÿ_ÿ¿ÿ7žÝäÎÍõ/kŒi»‚{­ïØvôÿˆÿfÿ}ÿ¤ÿ¿ÿ­ÿhÿÿøþüþ!ÿ]ÿzÿ`ÿ.ÿÿÿKÿØÿnÕûÜ–kt àøäìY“…,Ÿ„ÿ`ÿ„ÿ»ÿçÿæÿ°ÿoÿOÿMÿcÿ}ÿrÿ3ÿçþ³þ²þýþ‡ÿv™ƒL6\£ô&"÷ÙÚü=qk&¾SHrw<ÎÿWÿÿÿÿFÿTÿ6ÿ ÿýþÿ[ÿÂÿ(ÀÿzÿsÿÀÿ>Æ2WB*&7Wf<ä‚7"W±ôþÂ@¹ÿ_ÿ;ÿ<ÿNÿIÿÿåþÒþíþ5ÿœÿçÿôÿÏÿÿVÿ\ÿªÿ‘Þìʰ¼ì6nj3ò¼­Òð’ •ÿaÿpÿ¢ÿ×ÿãÿ±ÿdÿ'ÿ ÿÿFÿ]ÿEÿÿõþñþ3ÿ¹ÿJÂí¤cQm±öôõVŽ‹EÊ1´ÿÿ‘ÿÆÿÿÿ ×ÿ‹ÿNÿ4ÿAÿcÿlÿEÿ ÿØþÊþÿpÿêÿBkX!$kÐ&B'æíKIÁg/3`Ž y €ÿÿèþîþÿ=ÿ9ÿ ÿÿÿRÿ®ÿ÷ÿóÿ®ÿcÿQÿˆÿøÿ‡ED.7N5ò U;d®ëþÒ^Úÿuÿ=ÿ7ÿTÿcÿEÿÿèþÝþ ÿ_ÿ¤ÿºÿ¨ÿyÿKÿSÿ›ÿyÏâÀ—Š ç4UGëÔð÷ššÿ^ÿ]ÿÿÕÿÿÿäÿ¢ÿVÿÿÿ!ÿ2ÿ%ÿÿáþ×þÿÿ”áÞ b>E„Öù:nuHå[æÿ®ÿ¯ÿ×ÿ éÿ¡ÿXÿ!ÿÿ=ÿXÿOÿ.ÿÿåþ ÿcÿÄÿ8'úÿæÿþÿ?«QQ2çøÊ{HT°È¤;¹ÿEÿñþÚþûþ%ÿ9ÿ=ÿ3ÿ+ÿPÿ™ÿØÿõÿçÿ§ÿ`ÿKÿvÿÔÿ^â+>1ÿ23Ý”m³äøÒiòÿ’ÿXÿRÿuÿŠÿ}ÿ[ÿ%ÿøþüþ-ÿdÿ‰ÿ‘ÿnÿLÿ[ÿŸÿtÉÝÁ—qp¨ø5TM' (* ².¹ÿtÿlÿ˜ÿäÿáÿ”ÿAÿÿÿÿ!ÿÿþþëþÿtÿñÿpÂÊf>?xÇ(/'I\P •,ñÿæÿ3;Âÿlÿ!ÿ ÿ ÿAÿXÿ\ÿBÿ!ÿ&ÿWÿœÿçÿÛÿÅÿÔÿ’To](÷êóûúÚ›oo‘ÅëÑoîÿjÿÿßþóþÿ>ÿUÿQÿCÿPÿxÿ¨ÿÒÿÝÿ²ÿsÿUÿkÿ»ÿ=¿ ,"ÿéø,4Þ¬­ÒîÑw¤ÿhÿeÿ‹ÿ©ÿ¬ÿ’ÿVÿÿôþüþÿEÿdÿbÿVÿeÿ˜ÿñÿeÁÛ½†M@q¾ LdR8)# ÇTßÿ‹ÿnÿ—ÿãÿ$üÿªÿOÿÿÿÿ ÿÿ ÿüþÿOÿ±ÿ+‰¢ƒM"b¸ÿ/6"+ ¹e( JS%Ïÿcÿ ÿèþúþ ÿKÿjÿcÿKÿDÿSÿ|ÿµÿÝÿÙÿ¹ÿžÿ¡ÿàÿ^éMxi-ôÙÑÙäÙµ“†‘ºæÞ’‰ÿÿéþúþ ÿLÿgÿ]ÿGÿEÿTÿsÿÿ¶ÿ¦ÿ€ÿdÿgÿ£ÿ•íѵÁæ63 ß½°½Ð»x¶ÿpÿnÿ ÿÑÿäÿÉÿ}ÿ(ÿïþÜþæþÿ:ÿMÿVÿlÿ‘ÿÛÿG¦Ì¸z0:ïCg^K8' Öz¼ÿŒÿžÿãÿ"8ÀÿYÿÿÿþÿÿ)ÿ!ÿÿÿCÿˆÿçÿ=eb<Q´IL!õáãøÛ jFMjnFïÿvÿÿÐþÝþÿZÿ…ÿ†ÿmÿ]ÿZÿkÿ‘ÿ°ÿ²ÿ¤ÿ‘ÿŽÿÁÿ2¿8zs2îžÒïïÓµ£¢¾ßÞªE¿ÿ@ÿÿÿ6ÿmÿŠÿtÿIÿ,ÿ*ÿEÿtÿ™ÿœÿÿ|ÿzÿ¥ÿtÌûíµ‹Â SgLòÏÈÆ­x+Ñÿÿ‡ÿµÿîÿ ¾ÿNÿñþÀþÁþïþ"ÿ@ÿTÿnÿ“ÿÔÿ/±³„7iÚEytU2 ç Løÿ¿ÿ¿ÿèÿ6"Îÿ_ÿ ÿèþôþ#ÿKÿMÿ=ÿ2ÿ8ÿbÿ­ÿ÷ÿ$5) H¡Yj;ö³ÍõíÆ˜vt~|X ’ÿÿËþÃþôþLÿ‘ÿ§ÿŽÿnÿLÿOÿmÿÿ“ÿ—ÿ†ÿ“ÿÔÿ”Âðõ|ÿ¤þüÁ#–äÈË9öàêSåJ7ö` ñô©ô2úÄ“çû¼ö›øÐõÐø;ù 2 < žñ ì5ë÷åƒïÿ[%ÿ,· ÿî€î7ûR`˜» hý\R ÿûøÞþ†ÿBýjýlù7ôíõéüp ‰¼úçöýðüsõó+ùý¸~ m g9¸ ïWë’âr¡ÿmùÏ%Ky“üM÷õiô‡÷™ø›øøþwb{ýÊü{üãöö¼÷õæøÉ ©]n›6Gþ>÷{û/% צ™þŽüûSö7ôûâîü[õ,ôòøIû{üúäôŒ÷„Ó¶žÿYÿ+Ý"âóœ ( ¡F³©šúNó´öÐ5… ýž÷Qô[÷“ú=÷óõ§ýq_/QŠúRúZö …„  S ¶š»üûó÷=û ÿË«Òÿn÷þ™÷MóÂ÷PüuûÓù¡ù%üqj ,>þ¾üzç º ¬ : · ú#_ŽW ô¼@û¦ïÛë2óÁû%ÿ/þ^ùâõŸùÃýdúôFóÀ÷!üà‘…: .  »süÿù.YÑ ’púÌò×ñ€óO÷^ùA÷­õø±úoö$òºó5öüö øyøCùÙþÏþ=ÿïù>ügÊ Ý ì Ÿa^ ï=þzû2ûyûEý°þÌýÖþN²ÿöÒîpîøñ(øý7ûµø¢þ<Ü+UûPùÊúß©Ø ÙŒ ¡4ô|{­°ýK± Ó QWû›õŠôÛù)þøû(ùöübíóþþEþwúKâ©Û á CEj k “@b « þÿ†ø-õ{÷ƒùø‡û÷4šBûm÷„ö„ú ÿíü´ùËþ* ­Y q4;鞀› í2SrþZþýþú:óÃôjýÓqÿ<ú‘óöð]öøüÉü¶ù£û¦·O€×úÿóX€\Ø ¤†¤ q°üJÿQ@ÿSøÝøoþÚTßbøëñònóåñ¿ò¥øÊþæ+þ/òÜûëû- ™¤ð J䉀Y¦Ô¡:íúˆùéûú{óœñ%÷ýd$ÿø2ó³÷EÿÊü4ý…hA ž  €‡D6º ' ê ËÿGþ°5þVõ{ðòUøLé7ýÛ÷ù>ú÷ õ÷]ú5þi,j ˜ ² ^!Ö: ý ßYÿŽ9¼æÉý_ûòû€ÿäþ£ùd÷…ùÙøô,òõDûÉ,:Eýþ i˜sÿuþö7 WO kà'ÿëý þ›@¥Ìü¸ý*Fèú¡ôéðþòxüã— ýþ ýEôB>æ oU¼ F† Èé”xZ ” üú ýÐþèþ]ü÷ØöNýÞý úûü/úýø¾ùÒýÒ° I¼ö: ßþ-K ¾§&oþˆúwöÊö¢ú2ú,õúôdúJþ¹ýbùÀóñò—úö ÿXþ™÷1 x V\ © } ÀûÍa4áú;ùÿDéúŽõöôhõ¡õnóî|îNöæý‡ÿ³þÅþ£þ=ÿ=ÿ]üéù¹ýŽš ß Ð A Î ‰ ǽþˆù(ÿ–-dý ù…ùÝüúLôÓó«øhøõ¾õG÷·÷ûêþ…ùxôôüÑa 6&}3£à Q“rŽ v H NýÕÿ+ÿsøgñBõÐý«ÿEü[úùÔù+ÿÿûõàî÷òCûâ{ †H öJd÷G 7üP. å ÂÝû®ûõH¤ÿûÆõäõ½úûö¡õ¥ûeÿ þÛFþºø?ý Ï ;]E ë , púçù8ýÈÿsYmë¾lý‚òMï)óö{÷$ùËùÆü— lýÞúwý£GdÜ4a k ÀDÔó,BþrüÙß½ýyôò¸ö—û^SÄù¦õÙøKú2õò÷ô>ú …b ÝD éé ÿ û#þpžY Koý ¼ýÒõ=ñIñgö…ùø_úIõÿKù£ôQõs÷›øøÓô¢õ6¦ r 4Àiç¸ Œ Ô^ðd‘ðß‹þOúÜü* û[ð!êÞêbñûÌÿ«üšúŸÿ‘êŒü[ø^õøÌÿ›iµmô~ ]ÍÿÏýräÿúqøSo 3 [‚üµôsñô»ôDñPò€øíüñý„þ—þçýÊÿ<¹üØølþÕ ¨»`$> Rc †#@_Eþ©ù•õ‰öú ûDú þñGßüúõ&ï0îõdüAû¥ú¶à ZîœRÿ£ûþ•ÿàþ aVÜ äô}þöŠîæðùrÿ «ù*÷/ü'þšøõ„÷sûÿxGfœ WÒ¶I » Ð ¤Ùþèû³žºóþÜþ3h{ýpó?ï/ññðQõ<þ[Y[þÿ²úüVÿ|ûÎ÷ üü!/Ÿ´V—þú5úüÂeâÿbûùùðÑì~ïÕô—úüˆ÷ºõ&ü0Hÿÿi¥<ø½ê))C6ô Ù¸ ]·ûÌûØüÂø@óuñ‡óUúêÆÄüñ÷G÷\ôòïšï§òÅ÷Z£Lð¨ c ÅKüdû s ˜ /. B Ä´•û‹öNöçùBùÆõ4ø9ýîüÑøfõ=ô÷Ëýv­ú[öºú¯ß;‰Ñi˜·%  n%ÿTü_ûbý Å Uóÿùqýwöæîkétìf÷áþ’þÜþ¹Ü‚:ÿ™ûYøÕúˆ…ºñìô|žôÿ;3£úùûoÿmËtþù‘øSüûB÷ÿö)ùoùáø5øíöxù ò b + •OÓ&Þû™ý , Ü Û ·  Nÿï÷’ò¨ô¸ø&ø:÷èú—9­Bÿõ:ðtõeû­ûüL‡: q µÚˆÄ0hðB IƒœÿìâJ[û övôöEùó÷¬òóXú,ÿ•ÿóÿ`óÿÖÿ!þ[ùÑ÷*ÿZ á * ê *a• ¾WùÔúÿýðþžÿÏÃLMÝþöÍóxôÂñ›î©ïó ú[Úÿü¾ÿšB‚ÿsýnü-. ¡ Ç‘¿ ø Ó°"õÿ Öÿ½ø4ôøøyÿ‘Eþâúœ÷ømûgúUóÄïCóGø!ýÀÄ[ # u *Ÿ¤oWX 2êõ“þ¶ýºüAûbøÝõèøÿIý=ý¤þ£ý[ûúø7ö³÷ÇþBþ6É Fj ܤê]@`PKÁ ŽŠ×ðúyò“ñ½õÞùuüßûú`ý˜„„þûšùûùýš)ž »…ë ”!ȇXÄúçú| ¨ýòûýÿZû*óxòî÷½ùøšùwýFXUpnSÌ?…þÑý¨ ã “-ä š yŒûEö1ôÈöû²ûƒûÑÿ×zúöñóôˆö–öNôÒ÷‚ô ý È uSH•c¹ v-Å´'‰búöŽùˆüú@ö­óóÄøQôàúšø,ü)þ¤üû úû0’µF ‹ö 7öþuÿ0›äÿžÿüÙ  5•üØóÔñ^ôˆó ñ‡ôšûlÿWÿ%þPÿDäyú²÷ým½\ Ñf ×  ¨‡‰yÞ ÿ~ýr Äü#ù—û»þ<þŒú1ô~î¿ð›ùbþÄüý2s J zÍý ýãÿ%«âÝ 3åÄ á‡9ÿ‰ö}ñ0õ¶üJ™>ü9ú—ûù$õTô£ö&úfÿ< ) ãÉ¡  •nŠŠ÷X½ñIný›öWõ?öô2óc÷©ý¨£ Yýú¼ýPÿhûýø“ü<´ ³1Ø ¡ ïFý¢ûöüÆÿ²—h¶ü8óÙîšï—õ—üýzù\úËÿ%VrþýåýÅUØþË™ @§ÔQù Ó— ò1üeýïýØú÷¥ôôõ‘üôÂ<üúÕøóó’ï5ï#òÍø‹+ Ýñ — H¦ü~ú×à Ú Ä [ § ¡,ù$õ„÷Ïù½÷u÷ üp„þÝùÔô•ñiôÓú}üSùEùþ h]ûx_& V Ï:m R>“þHz gƒÿÅþÞû‘ö[ï2ëð ù„þÿ” 16ÿEû¡õÐô8û"k;P ~Ù*ìý‡ü»û2/¯ƒÁþß÷Q÷dø¨õóýôAù}üÏýÎûõøßûÕ„Bqÿu¸’öÃÿÄ{ ò Ê . , eå¢ýÆö™ôªù2þ€ý”ü"þ¯ßsøï.îô™øSû¯ÿg ì w K s5žÿ+ÿ>xD Ô¼ ƒÅÿŨKûŸömôûô´ùDþŠüüø ú¶üîûþù¿ùú üÏÿ·ÿüÔüí [ C ‹Ôß ‚ µüþiü…ÿî ýþ1"•ùfò‹ñ1òbñùñRôYøüÿJ7þÂùûpügü¼ü•ý_ ›k ½ Œ Gj¢þwüþÃ"öþ›ü%ÿâ3ÿßúÂô¯ðóƒ÷ÁöKóôóGøSüÄÿª_òk+¤þÆ»ØýE‘¾ 6ÑþHû¼ù’ùáøçöê÷þ‹†ûÎùù÷õæò†ðÛïîõ"˜¢ <bs ùmÿýbƒ\‰ õ c Óxÿšülþ<ýùöâòô÷–ûåýÂû~ø]úêþÿ«ú`÷ìö6ù˜þðBZÚ éX Ùlúîâ]ÿÏûÛþª JåýûŽúôøoó`ï?òøû¡üýþØñÿíùùþâ5y²› ßÈ’ýõúûÿÕþcüÙþ±ÿTû_õoññøô·ùñù­øåü È pÞ#ÿV¿¬ÕÊŸ  k “ %°)YþÔõ(ó©÷ üý üÁùƒù\ý¤ÿ5û—ô(óÒõó÷ ú|ü9þ´„ ʲl ` Ç ¿Kÿ£Ë è °˜PhÿZþ¿öeò·ó‘õôñó”ørý›ÿ¢ÿûüsù úýÐûøàøkÿBh ƒ@ Õ· ™ klIûbC›ò÷àü÷‰öK÷3øn÷/óÁðËõqýºÿâýñý,v`c×þ ýâMÐó ´“ Ú|¢ÿ~”ÿ†ú¡øáúÿì5QùY÷ôö™ó[ðñùô%û…—afkV‘˜ý£ýÀ& t½¥  ="Bþuý%ÿSþ*ú¡øzûýôúAùùùüVÿMû'õåõüúâýþµþð®ì –£ :%ØþÛý"— » ÷a¥Ùøøñ$îËï‡÷¤þpÿ@þ8{{„þÝú°÷½øŽþr§“ ¦ó SÉ5ÍÁþèý$Ä#Fü_û‰þbÿû÷’öÏööãõ5öö÷£þSk7¬Î<Ú»ÿçûýhÅW¢ü > )RüödõåùýüÀüþ¿6Ü÷úÃòî1ñàöYø#øqûa¿¢ ¾9y0L } M Sh(^ ò<›ûvúóútûðøióò¢÷kýŠþýDý‹ü+ûú÷7ôÝ÷5¨†* ¢ Ôùa ©ŽúdüKá/ i ¥ T’ûýôúó{óÌñóØ÷!ýÖ:‘þùšù2ýjýRû ú†üü ð Ÿí3+ ÄýÒ “`ü&ükgÿ|ýŠüýCÿÇýÐõïCð¨õUúþóû9Á ‘:ýÀþàÿ%_OŽ Ð§Ù PÂþÊý¾ûzù,øØ÷Šû›EçêûWúùˆö­ô ôÌõÍûØõ”ÿ‚לÔi¥Ž. :8ÔÝiIIÒ7s¾ø^ôªôyõõõ¥öíöÕùtn{qûyøÀøÓù©û;ý‘þÙø ÒsŒ óÀj„ÿjü}üЋ Ë ºþ¹û«öZðÖî`ô¹ùúmùþúëüŒþ’ÿÔýUû•ýÀ¥ "_/W G ¥C²  ôjþüØûý;üùÜú§ÿ3ëýú<÷ÃôónòÏï™ð¥ùneÈ­}‚Ê+ý(ýÎV ¿  ^ “ æ +LUùýøžüýúpù]úÈüÉÿ~þ`÷Xò{ôøkùÙøêø,úþêàâ£]¬ YE [ÕFs㥠_’^ü÷ùrú[ø&óò½öcû/ý þ"þ~ý#þ-þºù&õm÷þªºÓ³‘ Ié?þÏ  $Àþ(ý ûü/û7øtõvó‰ôú,þsü úQüß«æh-þÿ§{„¸R ¢ ! +SDJ[þç÷8÷áúfþnÿ&ü8ûþËýø óÊò"õuøüþzÿL¿ ì=Ûúmn;< · à 8¨4TþüÄö~õøøúé÷\÷“ùµû÷ücüþø?÷ÞúwþÒü/úØû¢yž G ½J › “ÀŠõr áåhÛ7úö>õuöxø³÷ùóôIú`ÿêþ£ü‹û‡ûýºÕþL¤Ž‰èÿ ‚ 5 S ¡Óÿ‰Hrœþ±ü²üÿþ“ƒúäöe÷s÷^õçóôö*ûùÿÿ<ùù1˜þ|þrÜx ’Á³ . a ˜C¸þÁþ[°þWû¤ûDþTþìû‹ù¤÷ù÷@ûEüÍ÷ŒôÓ÷?ýJ«ÿ÷` = P6ZÎïK‡Jh û¶€ÿûYöþò3õ#üÙÿ¬ýwûUü‡ýýûªø`÷*ûÜŽi™Ò ô à )kä§‘Ä !¸tM&û«úýìü6ù²÷­øKù}ùZùEøGù½þ9¬´þqÿ8p̹ÿˆ“b „ …  öpýcùWû\ÿyÿÃýqþ$àÿ¡ýÅø#òðõòùØú.û’ý%(\0MH‡t» X  :ö²¹)ÿùü”ü‚ýmþJû¢õ’ôÇøúûõû4û·ú¼úøû'üù%÷“û2÷´­e + Ru ü8ÿÁèDTË©Ølaúäö2÷©ötõ ö°øuüz0@úÿõ®÷—ú;ûIûVü'ÿ%X å ÈÍR=°ß½à>ç‘ÿäÿ'Œþiû„ù#û7þtüóõFò>ô¨÷Oú‘ü´ýÿþŸÜå$ÿþš´‰ç ˆÍá Ö£šÿ%þKü—û2ÿ6»ªþÓúùL÷Çõåôžô-÷€ýSdûþÄÿd$Ø-ÿÆ€ ë ™mTà“úÆ9 %üÐùwùAùùøpöèø‹ÿ›ÐþútøPù°ûôýöý„þÄè 8 á Ñc`•ÔþØÿ£ Èèß­ÿòýÈûüöÉñ¹ò$ùý£ü†ûDû¼ûáüÆü ú.ù¥ýàãf¢ˆ”= a.ØJJ t aúÿÿ(?Ñü-ùŒúCþÎþ@ü’ù—÷Šöœö{õîò,ô]ûBQ¾¸€àšÿ"a l { Ô Ë ®s¸þ ú†û·þÿ§ý‘üAü:ýìýUú¸ó!ñôÒ÷úûûüäÿ(£ÿ\j“áŠV X XÇüZ8~Ëýý‹ý2úõËóoötù§ûoü:ûÂúyüKü ø(õKø8þÔ¯w¾ e o ²[JpP‰‚7Tü§ù1ùøøø:÷ö–ø±ýÝþ©ú÷Šø†ûšþÄþ þP³ùߪtýåGý²fŸîüüêýÍý5úŸú?ýáû ÷ô8ô©ö«ú¼ý þÍþ‚Q™l ÿÐ/ÞËÕ ) # Ë?ïþšÿ¬ÿüÓù¨ûÝþ5þ3û%ùYøšøuùšø-ö‘ö0ûÞþªþ²ýWþÕJŸ®N÷7 LþbSœu,0]ÿeúùö®õ1÷­ùùWö÷ö<ûâýéüuúaøµøƒüúÿÛÿ˜ÿN< M ¡ì¾Ô'wÿýÚýÐþHû±õôóåõ‰÷È÷O÷÷)ù"ý®þnü(û½ý·ŠgÚ'N ð  ú~ C Ëiò•þ|f\´ýÖýªþáý_û÷rôýôç÷ø]õuõ°ùVþ„‰ÿuþr": |÷ e é; ÍîÿYÿíÿ~ÿœý?úé÷Ýù›ý|ýñù½÷¹÷“ø·ùnù÷øÝü¬ÙÞy垸šÛ'«Œçzö‘hðÿû¸úÒû`úø÷ø‡ú–üæûùàø&üÞý ü½ú_üÆÿ–ŠË&ÖK Ç¿€w¡›þĵNÅþý<ü(üûøöŽò0ó(ø¬û)üü«ü´þÝœÿý2ÿïòtîÉ K $ L <FþÑüÊý«“býÝ÷”öø|øÁ÷òö¢öhøÑûÿüiû}ûÿ½MtVBw ö«S‰. z ÙO#Âþ§øS÷Ü÷øbøÕø”ùõû þü ÷ŽôEöòøû üËýå&“ % UüŸ*£" | ™ ‡÷¾°ÈþÜû[øçö]ùIüÖúÓödõÕöðøÁúûâùÃúÕþ›‰ÿ?½¹=Õ# Ä $É0<ÐuŒÿÿ.x‚Þû·÷xõºôöôžôÙôÀø»þ™1mþaþÿØÿÑÿ^þÿ¢  E þ뛂Àwÿ‘²LÿÛý ýýØû7øKõ ÷vû³ü­úùJùû!þ°ÿ…þçþKÌ«þƒ~‰î ‘ ô Øüÿ™ýÙü-û÷Ìôç÷1ý£ÿ,ÿEý´ú‡ùÅùVøö|÷%ý®y³TÚþ„6ÿÿý”êlrÉÐmýiù ùûû(ûúùúûùíõÞö’û[ÿD‰ÿ®þ¾ÿZ˜¯ Û ` € ~µìRþåüIÿ½s_¬þ|üRüûÒõyð/ðsôƒùiýòþ•þ¦ÿ9ûˆþŒü-þj½¡) = Ü ‰+ òiÔ[±®ÿ¨þgš…üÔ÷OöàöøAù×ø»÷òø‚û‚ûSù9ù^üƒåBy–¾ ¾ç˜8˜ ‡ å‰ÅHmþ©ùñ÷0øºùûuúdú2ý“ÿ^ý-ø‘ô?ô¯öŸú ýSýÉÿ—¹  QT¯†½Vš½ © £Âyð@ÿÿúzø+ú{üšûâøÜöuöžøêû¹ü ûÌü Qñÿˆþ¬þÕ‡5Ù¾ T !ÁþÇþ/ÜÇÿÿüëäü½øòõÜõ–ö¡õ—õªùlÿn pþÝþ‘šr»ÿBêx ¬  õº#¿˜8ÿ·'žÿOýòúúmüÉüqùeöj÷múßûKûbùÒ÷ªùyþptk}Õ¼Fó^\Ÿ= Ê_ÆþÄûäûöúm÷ õ†ö£ù?ü?ý±ûRùmùœúWùG÷EøRüéEƒA™p  ÅÃégtÔäfÖõUý³üü8û4ùõùó¢ö¯ù0ùv÷\ø‡û¿þu-ÿPüü‰§Îð·‹ Ú ê ûp¥Êw‘þ;ÿ ÀqVýûOüØü–ùõÅòcóƒöúû¾úýÐç¡Úÿnop 湯 ¬ ôc*¿?ýûpü³ýÌü¦û'û,ûüïûºøÌõÄö[ùîù2ù´ùFüëþr˜s™`û›’ž«ÝZEÜA©üú°ù;ûû&øÌö{ùý"þàüXú…øú’ý‰þùü½ýôœyÉ9  I‹Íÿ´Îý\+Fëzü»÷†ö(÷à÷@øâ÷^øÍû_ÿÿÜüãüÐþAÂÿñÿ=« ‹R Áº ÿ|`šNþcüÖü\ý8ýÜû3ù!øïùoú@÷dô{õ?ù2ýÚÿ:¼ÿöjír¨Ö9Okh¡ C } _±ÿ»þuý´úª÷‹øýgÿúü=ù!÷œöq÷“øÒ÷Óö”ù¤þqýÛS÷ƒ&½JÄ® I KÿuÁÉ}þ¦ÿ3ÿüØø¯öüõV÷ÈøDøkø¶û¶þþjû§ùÐùdüÛÿô"]ˆ$ + ¥ •^&@MO§©gÅnšÿBýáûíø2ô™ò=öÛú…ü·ûrúqú×üsÿ‚þ¦ûü›ÿ´s–ãÃ! Ÿ½Nl´ÝqÛþÿåµÿ¬ûÏùÈû%þ4þü¥ø/öÈö:ø›÷÷WûµûÏÓn’Ï*ÿ|¦M - Ð †xú<»û#ùú¥ûÖüFýŸü‰üÕýóüzøõöSù1üÖýòýúýè´5³Ç¥òm[ ¨Ò8_ÊjZJÿmû/úeûú¤ö½ó…ôø¤ü¾ÿ7ÿ!ýˆý/ÿþºûèûÎþ÷BÅ H n Ç @ _È?šŒtÞý÷ø£õjô•õ÷óö˜÷Rû†þËý‘û-ûïüýÿŠdñŸm)  'Uç5 Ó í·Ã§CnþÈûáúÃûžýHýqú ùïûŠüùrô ò(óá÷cýÜÿOÕ¨Ê/òÌa²”çÐ “à â»ÿwþ&ÿýRùùxüìþ`þøûíøêö‹÷ïø6ø™÷%úÇýˆÿðÿ$Ðcü´-P0ó ¨ ™R ‚Þ]þŸú<÷äõ|÷Åøà÷Høüéÿ*–ÿñûù`úaþ#‚ÿ4 l ‚ Ý ’iª„²ÿ6ðD› þéüÐý5ü‡÷“ô£õÏøÒûèügûú*ü}ÿáÿÆþ³ÿÌÐrnŸüÿ>%å +eøü˜ûYýHýèúŸù•úpüðýoýZúÇ÷0ø»ø÷ö¥ù¨þ¡Y,7œ hG¼M; ­  ÖñpþMûŒúßúmûqú-øZøpûžüú>÷€öøRû þÊý.üÑý&ö™ò†ë7 š ò š6/ÙÆÜávüáùUúÖùf÷ûôÅóâôÕø™üüüü2ýÏþHþýÔü!þ±{Y4 8 j ¶1]š‘çÿדóþ•üÊùSøÝønø¤õôx÷éúü•û ûüêÿÔÅñaðq©í5VÌ á>P­zQÿ"ü'úlûxþ\þëúùúüíûÜù¬ö-õ¸÷Ëûzýéý/P8¡åÏ=æb 7uX¼¼ÿ9û‘ø”ø°ùýú[ûYúúïûý6û‹ùqú†ühþ¦ÿxÿxÿÛ?[ (¯[E;XØ+tP>ÇÿÐþYýÂú–÷òö'ù ú@ø÷tø˜ûZÿT’ÿý*þ³-Q{X¿ ÂM - l)ÿÁþ­ÿKaþ‚ûàûœþäþÈûö÷EõÖôôöÞøtøløÕû ÈâSæ ‰ w“±ûˆ½þýÃýˆýúû9úòø!ùŒúkúø]÷«ùKû;ú›ø9øàù þICpÿÆ9  &²8±©Á?ÏäúR"ýåûxûÂøÜô‡ô)ø¬ûíü.üúïøqú^ü²û2údûÌþ­#@m * |¬ÀΆ¹»ýªûÉûü×ûRúy÷íõQ÷ãøøù6üÔÿç8‰Àþÿÿã;kÃ|Þ ¶ £ B ¢„£qý9ü$ý¬þ;'FþIýˆý‰ûÑö¸ó‡ôÅ÷–ûÎý‚ý…ý¥g»š|~±ÕÔ^)¾í`|ÿ&û­ú‚üü*ù,÷œ÷úný­þ¸ü°ú<û;ü˜û>ûôüøÿØ· Wžè Ê¿ð·ÿh,ÃnÂm“ß4üý÷@õñô×öcø¤ø,úý4ÿ°ý…ûrú ûËý“® ƒ/ÿ Ê 'sq€O ßnXíQÿýåü¹ýÄþTý(úùúõùÔ÷5õ„óÓôßùÿþœ™@~ÊcŒV·L¸rM N 5œ ç àý‚ýwþHý=ûÔûPþÑÿ7ÿ?üà÷QõìõÓö*ö§öúåýûÿ˹ƒMé-V =û³r_Óÿ‘ý9ú÷Ïöüøçùù­ùuü­þãþÄüìø°öÇøÏüÿp2o [ I N'¹?™Y¥¤i Ïÿ þý¾ú±öõƒözù¤üÌý6üòú/üµýDýkü ý¯þnðu>m ïãv<þ þ¡ÿlÿOþÝýìýþëþ ýüøSöö?÷÷ú÷ûmÿ+Ç?[4{ï“2® È ð 5¾ŸêuýRû°úüäýtýŽû±ûvý-ýhúi÷ÇõÌöZú ýáü¸üiÿûkqeyAêžÑ±Ü¢¾þŸÜëHühùùkø.÷ñõ°õ øGü¯þÞýšüŸüLüû@ú•ú¯ü”W a N ô  ¾ ×ÖÿiÀ[šÜ-9üLøÂö÷löäô°õêøÄûýôü¥û–û|þOà!ÿ|ÿ &§~ûß\ È  Kê©å©ÿ'ý&ü/þÄ*@ýQûúóùäørö8óåòìöÆûUþÑÿéåü̵}8äØ- ± Ÿ ½ µ}8ýý*û×ù9úü"þÇýhûmúWûû©ø÷¾÷Úù’ü„þÇþÇÿŸ«‰å'VÊ׈®É¥^Èö`-þú/ööŒø»ù=ùyùûœý6Q.ýxú û#ýuþ}ÿ)‘!× ¤ w åŸßåþýÿª‡ÿˆÿBþæú÷Kôjô ÷öø5ùlú¬ýƒT¬c¸ 0û7" œ } èy'ÞHùýÓü1ýDýýWü’û:üLýüù_÷Æ÷þ÷€÷"÷u÷0úÄÿXüýЖ²ƒ¡‰JmJ çÅ/~þÉúú?ú©ø¥öf÷júý½ýëû¨øU÷Âø¨ùŸøWøÏúÞþîwÀô o\Ä(ybz*8‹ÿôûfú²ùõøíöÊô‚õŠømúyúû²üþ˜þ þülû?þÌ^ÚÞ ƒ Å '¶Aßò‡ÿÏÿ+åS Ëý.üûÿ÷ôzòÐó7÷Œû-þþRþ°¥ñÌÿUþ°þA§0Bå¡  Æ8p}î!šý5û,ü:þCþÁüCûqú1û­üÈûˆøªöÅ÷ù«úÜû þZp5,ÙÒªH¿˜/ PòN ÿûJ÷Hõ²öÕùSûsû½üºþ¶þSüZùh÷øFûþ¤þÝÿ¬é Ü Ôy1ýáàДCðËaÿ·ÿgÿ0üSø!÷é÷"øS÷ö¯õKø;ýR gÿâÿŒ“;šÿôÿ.Æ- “ s s ¿ ÌáÀþ ü1þãÿ*ÿ6þ'ÿwVBþôù5õEóôÛôQõs÷Kû ÿ›S®l»šÒ ˆ y ‘ !K !]ÿ,þõü¤úçøÁùˆûqûæù$ù{ùú/ú„ø¾õÈõøù­þ4ÔÊ d ²ÓR5Æøìø ½ £€þ)üèúgøÇõ=õ5÷ ûŽþ•þÃû úeúOú!ù¢øÜùÂü¶Ý³BP Ôà7Ÿ™3Õ®¶2¯׸þ>ý%ý¶üÄùAöpõÇöÓ÷søïùzüÄÿõ}ŽÈýèýxÿŽSwÜ3 r è … ßLÿ€üUûyüœÿ§¢µþ/þÇýrûÌ÷‡ô&ó'õ­ùæüœý€þçBFÆIŽ"QCNkÊêLeUî¾/ÿ ûŒù—ù®ù’ùäø—ø§ú¢ýþÍûÎù;ùHùzùäùû¤þ’8 ë êØôêO =(ãôDŽÊýÝø7õõ«ö÷÷¥ø…ûºýþ'üoù<ùü.þ5þˆþµ †Á › kÁ Q «“Îrÿ‡þ”á¼ÿâûùÁ÷?÷©öÏôóÎôyùeýEÿ`AÂó4)ÿ;þÌï‰áa  L Á ´°÷þÏþ?ÿCþ/ý-ý'þ»ÿFý†ù¹÷=÷-öõ8õ÷qúZþ6ŒB¶é\u¾;OíLY ¦U¹<ÿý†ù6÷$øqú”û„û4ûFûsü®ýü;ø|ö‚øõûéþ59Äùµ  õŸhh-®F™y¦`Âûþµýjûpøõ˜ôööµú&ü²ûAüñýßþ_þ ýûû¸übÿ€¾‹¬.  ¹ wéCÂXÏRþqþ´ÿ¥fÀþ|ýÉýLýúqö:õöC÷5øùøJúµýuÉ ì§SCœáéÍØ s q - "X‰‰ÿ{û(ú¾ûÖü¾û™ú>û—üýüÆø5õªôòöÛø²ù:ûþ¯ •Û&MGÙÔÉä5 %ðb84J×üÕù~øøäøÉ÷ÝökøüúÍûõú&úúÏú}ûðúÅù<û$Ê´L)† ù Ö Òñƒt%Û¨Â&‚ÛxþSúžøÃ÷õõô ôRöoúþƒþü üý„þÛýýPý~ÿ{V’×   ŠÌÊŠ8)nÿHþÔÿe¢öýûú>ùrù¹ùÌ÷gõ§õøˆú_üéýeÿwõµÖ1ò™\R0Wºó a €ôN»ýû&ùQùìû:þþýãüÃüTûÚøVöNõs÷ôû:ÿ-}QCÙâ '0W~´\“anµÿfÿéýˆúæ÷Ú÷Uù£úÄú†ù´øúÑý­þýüoüÅý?ÿgY{è N ] " ì¨%‡¢þÿÓ}¼XœÚþãû÷,ó4óiõðö3ø¼úþãÛ{%þÃýÎÿjjê:« £ î è+H¼zÿpÿÞÿõþxü!ûüwü«ú2ø÷g÷øùë÷²ö‚øøü¿‰d!Yí ÚÙöeò³· — æ ×ãÿÿûûµúoùkøÓøÒú®ý ÿóüRùy÷V÷C÷6÷ø4ú4þ陃ÿ͌Ž2;{©ýýûïûlûùòöG÷ßøêù2úFúûsýµÿ&ÿhüfûqýEFº Ž ­ / ¤éZõ³ÙÿËÿ—S«Ë‹þ¿üWûù(ö·óËó†÷müµþ¯þ+ÿ~5Ñ€ÿ:þëþóʬ'· ì ¨Ü7ôÜ¥@ÿ­ürünýþ3ý.û*úlû—üaûAùeøÈø³ùÂú˜ûþüw7éVÙJYV_N owù ¯¸Ü¥¹ÿÃû¯÷<öøú‰úæúüoýæý©ü†ù½ö`÷ÚúËýÿ{é9; Ù Ü!’b~â^éÂËÛ%FëI~ý'úã÷L÷ø&øöõÅ÷ªû'þÀþ£þ¸þ‰ÿ^ÐÿªþÁÿ³ž~ 9 Û ~ Õ S êÿäÿôÿ{1ž ÿÁúÆöŒõ¸õœõ¤õÃö~ùqý¸&ÿ"ÿ tu, –0 ã m6ÇWƒãuZ“þqûúnûôüßütûÃù8ùDúÜúù­öãö©ùýo[ÉJ,Çñm- 1™áÿþÐü/û1ù÷ì÷ºúNýPýüû‘ûiûÔúÙù»ù5ü8§÷©ë= õXÊ æéRý®?ÿ¿ý™ýtü…ùÿö…ö©÷]ù{ú–ú[ûlþçxZþƒþÛÿ«©ý¹T' + l —ØÃ¾þZüàügÿ’xÿÞýþüÌügüQú–ö8ô“õ³ø¶úØû€ýÔÿoL"¼™ÿ|*'9š b GgŒÃ[‰üwúVúHû6ûÅùZùñú*ümûÔù­ø‡ø“ù·ú½úòúÍý¨e¹ž=ª¶-FÛKQš¶Bª? jwûwøú÷æ÷<÷µö,÷Aùrü[þ(ý¸úú"û%üüåü/þŒÿ¥Å¶³ ( Ïb!÷Å¢öNýÄùê÷;ø_øßöºõçözùÒûKýÊýRþÙTTÿÿ6ÿñß?{è þ ¹ Á¹ÿ¯ý”üpýÇÿ{†þ5üûú úˆøtö¸ôOõùýäÿcf8¬ù—j _ KRŽî©ŒGÜÿ"þ+ûyùú«ûèüoüªúìùSû°üøûZúÃù¢ú´üÿiHÍ"½Õ”8²„z[e”ÿ+ýêùö’ô+öˆø ú\ûúüŸþæÿ¶ÿwý5û­ûOþlpÕcÌ© ² ËÿO-áýÀ‘QÚ˜;þýý?üóùy÷öŽö}øžùâø™øûæþ^ êý#b ,tóB › t / à¬âý¯ûåûdü3ü˜ûrûžü9þ›ý ú¢övõÔõ‚ö“÷dùsü×™¤Pû8—¹xkŸ ® tNìÒiÿ4üjûòûJûWùwøUùoúÁú?úoù­ùpûÆüòûƒúûÈýÎ0Ñ ¬ fó™˜_Û* rÂÙ_ýûLù¤÷íõâôSöVú÷ýÕþöýBý"ýGý$ýDüü‘þÍÊÔ¦ìµ 3 Ïó¿]’c8’[lþ‡ûú›ú¶úXùï÷Â÷àøÃú-ü|ü\ýEg4 ùgWr : Y¥ê±zþ{ûùŽù4üþ.þŽýý¸üüéù˜öõD÷'û5þ="yqé¸Ê7bÍ·Ñex-ôÿÕÿžþü”ùJøíøiú~úùœø5úüÞü¸ü9ü>ü†ýøþÿ0ÿsg¯ ß  Ÿ‡Âö0q±Ý¬óÊÿ|üÙ÷ÎôWô%õMö½÷wù ü;ÿÈ\ÿ ýˆüçýŸÿç¾1 ž Y žâ_6U)æDµLýýÜüìüêüüóù¢÷ ÷Oøêø·÷Æöø1û†þäº.³FÚEDãé%ÕE - Ü Kþ[üÆûûÌúEú¥û1þõþ ýiú¬øá÷·÷–÷ƒ÷ùýVtä_F @áß¹ü)7ƒXK,K?þýûüÇû¦ù`ø¡øÿù‚ûÃûÚúâú¹üSþúý’üÎû™üÿ˜QB ^ 1 Ó˜>³Õ7¸ÿŸÚ×¾ÿ¬ü;ûúÛ÷Nõøô÷ìú;ýtþÿ°ÿ³öyÿþñþ˜¾ÎœäÖm ² £î(ä´ÂÿÕýæüŽýþÅýÖûÝú"ûûãùOø0÷³÷Óù‡ûÑû®üÄÿ’ÓùhˆcÛîýŽÁ²EJ‰ýµùBøþø%ú¼úúzú}ûêüdü–ù4÷>÷ù9ûGýÿ-Ö¯¨ØÇ¬ ¹ÕMÏhȯ`þîúô÷S÷Tøøá÷Þ÷8ùÿú\ü®üñûºû!ý©þÀþ‡þÝÿÎzÿuá) Î ð¤Ãy Bt²%k†ÿü"ùe÷ªö”öUö-öñ÷Øû7ÿoÿóþOÿJê^ ´S B R # Nµ=nŸÿ"þKývýOþ˜þËüÅù>øÏøjùèøMøÄø¬ú£ýèqP`¶a m©ÎóÁg/þ`ýhüZúOøˆø¾úšüýÈüTü;üLüDû=ù±ø û¨þŒeµæ&  4åÀeÅЫÔþý,üÏúéøT÷íöqøßúáû5ûû¬ü‘þ{ÿNÿþ‹þY¿¾õS»” ý ôC<Ñ ¹þÊýôþÖÿ»ÿ‹þ+ýÌüŒü}ú÷ãôøôŒö²ø¿ú{üØþr¹/îÉ2 Ä  3 ŠŽüU7«ýü¡üÃýgýåûãú«úŠúôùtøÄöñö+ùûFû~û=ý0/<þ•„óº y¯^×%b!þÐúù¶ø¬øøš÷Jù`üþ-ýUûéùpùëù›úû½ü« Œ3#ëÀ5cr>üã¢Wˆ°~ý.úôøRùQù¥øLøÅøúãû¬ü/üVü-þwèÿ–ÿr½4 ØÑîö ßc©ÐÍÿÿý ý<þŸ†ÿŠýkûúù`÷bõ¡õÌøÜüêÿví_iÇ7W›·ß^CÌ~èfןXÿÿ[þ-ýÑû(ûü0ý}ünúVùâùËú!ûÏúkú2ûxýnÿíÿ†µŠsé øcpD!®ËeKèlÿ±ýdúíöŽõnöJøúEûôû@ýÖþšþMüeúú‘üAÿÀŠaLý &  Ã|ñªÞ£p”ìjÿ©ýÄüöû˜úbøöäö«ø†ùùù(úGü£þ,Q䘾 föLW Ò  òQ €£-þcýÒý4þ‚ýÉüjýAþIý›úÃ÷áõ‰õŒö·÷´øû-ÿ¥ÃR¸½Œ.©+¹»§ Ÿ ’5M@Âý=ý‰ý÷ü¤û~úú¹úpûÁú1ùù¦úøûïûZûeûçüÛÿš·P‘‡É7Ð^HN<¥©³…þ˜ûIú§ùø§öx÷Gúæüþþ4ýàüaýrýˆüü³þò§^ †fý‹‘’3:[ñ3ª™–þüÑú¢úTú•ù“øøùHû³üÏüvý„ÿÚTuvÝ Ø:¶KÖ^ €N:?ýûúÌúäûýý²üxûIû’û_úÿ÷±ö‡÷þù ýhÿ¹NèÄLÄya&ȯ?4þ[ƒF0ÿ|ýÙúÞø#ùnú‘ú¦ùùùšúœûzû‚úºúµüwþöþŠÿSíßö™Ò§©Ä 8hö‚)rìývú­÷Zöör÷¿÷ò÷ÎùÖüŸþlþ|ýæü_ýíþXÈO­™ Ð ! 0§6„Ûz¯î`îþ'þþjýûMøy÷:øÎøÄø°ø1ùðú«ý–ÿÏÿ~#¬YæCÄø(pèóÇþ)þ¡ýüÖújûßü£ýAýåûIúªùîù}ùfø×øšûÿÁ;´M¹†?;Òe.tG™¾ßþdý½ü üû©ù ùIú(üTüû©úûÒü£ý”ýýÂý6•`Ê3 W“`ÇÑË+ZW_ÿ7ýtüÍûšùæö¿õ’ö¤øû™üyýøþÙ§aÿwÿÂÁk?YŽ Œ SÅíÜ*ϽþÄý¥þWÿGþjüûCúîùgù øÑö“÷äù†ûÿû•üöý,º5ï›Ôs±êc©ÑÌNxaé^ýÁú’ùÎùGúÇùPùpú*ürü û$ù×÷øÊùSûDüMþ³]tæjh®@ZÁ} mn¼ÿ“üÎù"ù¦ùÚù„ùþøéøõùcûxû€ú»ú¡ükþ*ÿVÿÿêË[MN×T U7Ó’ŠÃÿTÝùþ.ü¾ùÇølø-÷ÿõ÷úEýqÿ0ØÿÌÿ•ÑÌÿBÿ¶r& Z„™úÿ3<Œÿ@þ”ý6þmþ³üPú%ù2ù·ù2ú#úüù%û‰ý,ÿpÿóÿŸ¼pô.ÐÕ]ý–ãxdÓŒNÿ›ýËútøæ÷éø½úSüžü1üŽüCýyüpúCùú§ü²m¾B nI’Òú€S©´`zÿ(ýÇû+ûSú˜ød÷Gø ú ú%úçùŽúBüEþÿÉþAÿ#½#êˆÊ€ [ 3ÕËZtuwþ%þ&ÿŸÿþ‚ý£ýsý–û·ø)öîôžõq÷ÙøúŠüCˆ²º² |á†Ï™ ì S t6¶ÚÿþSþ¹þþœüûúMúhúù…÷˜÷ù`ú ûCû§ûTýG—BÄNäO‚µþ 7B ^@ý¼úâù•ù’øøDùjû ýrýXü¦úú­úçú²úãû ÿ»æµSÓxÚ§ÁP¯$ îÖ/þœû_ú$úGúú3ù¬øÝùËûaüàû%ü¨ýÿÜÿ=Y.̆©·ô+ZI;þûü<ýrþ›ÿoÿ‚ýdû˜úúxø²öxöøû6þ1êâjîå¾¢¶¬c¾©ƒ“çDÿþþôýüêú†û#üoû*úQù?ùÿù·úZú¬ùú°üuþIÿr­ZË(*hôZí¿m•2DŸœØþóûõøÚö\öŸ÷8ù´ùäù0ûçügý‰ü0ûxúˆûþNŠRHذ  ¡l) È#ßµ ;ÿŒýýü‹ùS÷þöÞ÷¥øúøûøhù+û{ýwþ@þ±þNÖŒ§±¸(X²:•Ì-äþ0ÿ ÿøý2ý‰ýöýzýÉû7ù:÷÷Ë÷ç÷ø¿ùëü)³øð‹õƒyqnzüÅI'üzþxýUýFý’üIûÅú­ûuü¤û)úùÕù¾ú£ûÇû¸ûýßÿç‚§àDÕå‹gÖ®®  ÿ—ü’û£úùÍ÷ë÷Rùƒû?ýkýåüQýVþXþZýçüîýh…ªMê`4 Æ ]8xÛ®€6AÿàüÓú¹ù”ù0ùå÷2÷”øû¥ü7ý’ý\þüÿÐ_Ãí{¨ÈÁÛ´Ž6tû™ÿýlû\ûuüÚüÆûÄúñú9ûjúÓøV÷þö„øþúØüBþ•º2h5ØÐÀ…XX %ÎCþVûËùúñúJûæúúù%ú¡úÓùÁø-ùûý¹þ¦ÿh8ÒËhÚÆè?þ'Ê1¬Ë®FáÿFýúøò÷Bøå÷É÷ù`û~ýþíýÇüÔüþ¸þÓþÑÿW}2 ²â½2‘9W>ëV¿¦ÿHÿ$þžû%ùô÷øùãùíù=úü6þÿÇþÔþ×ÿtîZß)ÒT}þÎ&¶‚›ÚgÿIþ|ü5û-û?ü—ýÁýVüëúÈúòú.ú ù#ùÈúÜý=Gð´ÜßIfØý¸Sîö¹þ_üû¯ûLû=ú úEûlüSü[û]ú"ú"ûwüèüýŒþþÐh©x.Ó·æ${¨šçžKÿÝý$ý üúâ÷7ö"öñ÷%úXû?üýý @ÿmþlÿåõ w²| ¼ P ËwYµ\ãÿªÿnÙþ„ûæùùù“÷¡öv÷uùWûfü›üïü‡þ¬¶ÁUàƒvsÛí,.¥\¢\·ÿÿÿáüaû…û‘ûÝú…ú-ûüküxûnùá÷ ø^ùNú\û–ýÚE‘r±ÿK³PøÄ^ ÚPóÿýûsúýú¿û¨û³úMúûÊûKûWú2úGû;ýÿÌÿÝÿö!½ )¬½¸u¦ÐSZ‰6beù'¨ÿÕüú­ù0ù^øÓ÷_øNú;ýžÿ)¾ÿëÿY–ÿOÿdþ ,ë »ß(¶~ÿËÿ†7ÿ—þºþFþ®ü’úéø˜ø•ùgúDúnúü=þŸÿüÿÀˆ˜WϤv?G¥àˡȃѷÿ;þ%üÿùºøEùû ü›ûûoûäû—û¦úÇù%ú}ü·ÿ‰94ø†Âæ®VÔ<ï±çÎÄý1ü­û°ú"ùiøùúÓú¾ú úðù%û†üäüìüâýÓÿêU»á&b¼hšQLÚc¡`ÿoþüýsý@üú÷Wö÷gø$ùëù–ûùý:D ŒÿØÿ^(- Hæ á ;i{˜Ã§lÿSÿðÿ7ÿ ýÙû¼ûIûÕùRøÕ÷«øSúžûãûGüÿý4qÊ/#ÅÁÉuqlQ†Ä‚¤¬©þÕüIü½ûÄúú8údûÚü-ý ü û=ûÞûüþû¢ü†þ‡Ù®¨=[röV(F¾f³þ+üoú+ú¾ú¨úÖùÈùûküþü¾üTü³üKþ šŽoDêÀÑÈw†ÝOû°þªý þÃþ6þ‡ü&û˜ú;ú‡ùø¼÷aø·ú4ý€þPÿ¼{˜‘¯(.8ƒ¢Ú¼r"g›(“ÿcþÜü-üküÈüwüûYù²øJùŸùùÔøúù*üjþÚÿNÔ{‹xPSôˆå>³ýì³ÖrþÝûXùø=ù®ùUù&ùÙù&ûMüküyûâúØû–ýçþ²°ˆC]d*ô£5ÑÊʽBÿHþžü[ú–ø øÀøú‘úGúpúªûÓüýºüèü"þMJþ àbí#œ,g%­þsýûü^ý¿ýÐüÓúxùcùùuù=ù¼ù˜ûþÙ¼4_íi¥,H` }aÖhÃþ1ý<ýÔýyý|ü0ü£üÆüùûuú.ù>ù¬úüoü ýÌþô_Ë©ä/Å2}€ïšY©¹7ÿ±ý÷ü ü½úùí÷‚øRú£ûäû6üAýmþøþ¡þÝýüýâÿž‹›È$ü¨äpôíþ=pmLjIý¡úoùKùÈøä÷Î÷óøÃúYüçü‹ü–üëýšÿqàУð,E®ÌŸÀ7ãÿyýü ü,ü5û“ú‘úìúùúñù:ø€÷zøú(ûgüdþµš€{p `]Ú ©ˆqÿÿêü–ûuûKü÷üHü±úÒù÷ùèù,ù…øÕø‚úýçþtÿÅÿâùK|V†l âÄå†WîBÿ_ü®úú›ùâødøÌørú­üñý¶ý@ý–ý=þ“þÇþ[ÿöŹ]ïÝYçìV'JXõ Qÿþüßù‰øÎøúÜúÔú1ûmü¿ýrþfþþµþ®Í¡–ûLu¥šµSQRÿFýhûkú ûNü‘üÐû1û%ûHûû[ú¬ùwúýüÿ¼Òb²\; óݪ˻ڳšÿý4ü ü…û“ú6úªúfû—û¨úPù#ùeú­û=üâüYþdXfaq¯wY&±қ<þvYÅrÿFþ~ýØü•ûLù÷šö°÷Þø™ù~úöûÝýƒÿéÿ ÿoþXÿ(µä4âÅò G 7†ÊÌh«ÓTäÚþgüûoú›ùvø¨÷Å÷ ùÓúÄû°ûåû5ýÕþâÿuVKÚïDd]ü°Û& '-¯ÿžýòüDüpû»úªúˆûvüü‡úqùŒù'ú¨ú(û,ühþÆfjÛîp¼ˆ„ ¹ÊqupÖ©þmü)ûhû!üäûùú¯ú3û¿û¶ûû…úCû=ýðþ‚ÿáÿþŒÏfWip³Á—l܃ÕzÔÿÿ’ÿòÿâþý‘û×úeú¹ùÀøJølùÄû­ýþÿàÿÓmP®É…ãSºþo¨ýùJ—_NxÿnþñýðýÕýêüû1ù¾øOùœù~ùÕùûäü»þžÿ“ÿüÿ¬—}™Ò™·P­5¼µ”¯½Úÿ<þÄûÂùmùúmú2úúù:úû°ûGû0úú ûÉýˆÿ ½×ôOö}ÉÎJÊÌkù.Ç0…þQýÒû"úÖø•ø‹ù¨ú®úùùûùçú¶ûåûãûgüÿý`,¼V4Ë{ÓD‚ŽÝ.ÖØÿŠþâýþý³ýüûÁù–ø˜øäøù3ùòùæû‚þ0]#†Nï?€v™ÚšçeyÕžÿèþ†ÿüÿ:ÿþVýýmü9ûùhøÍøTú‡ûü½ü4þâÿ$hÐc÷LÚÍk þ÷©D©dÖçÿvþ‚ý´ü˜û(úbù&ú¯ûxüPü%üzüývý$ýµü•ý×xNì\Ô&[Þ€áŽÛ©ó ý­úÝùñù¹ùOù{ù…úü3ýý3üIü—ýóþ¬ÿMzA/T6ÔL*Df?n´7ÒÿþËýìýgý_ühûðúêúŠú/ùÀ÷¿÷,ùàúMü³ýbÿp`J„ö.1ÕoiÂ{ Y´A¹sðþyý›ü¾ü†ý¥ýUü‹úùHùòømø%øÂø¹ú]ý#ÿ¦ÿ aã×!8äj±Ž‹û é¶Y³…ˆ7þÉûpúÿùÉùwùù_ùÁúhüâü%üûÝûºü¡ýuþ—ÿÅÝJÛE·]ÌÌ„¶8‰ÿîDÎoÿÐý¼û’ùø2ùœúDû5ûkû$üÝüý±üZüJý†ÿ‘ƒæH‘ÒÓ®n]•(ÿjý“üýµý&ýÕûÉú^úYú8ú¹ù¤ù ûÜýH”2ºL±hy"fg¨ä²mñ§ÿ ýòüDýý›üaü†üºü7ü£úùäøûù,ûüý‘þŽp5ׯßEçÍ¢áwŒQrcIˆÿþýpüGû^ùë÷øMùtúû„û4üiýzþ_þ‚ý‡ý$ÿstúL¶ V ÒŽ«kóc@nM¥þÞû5úgù½ø ø¨÷6øöùÈûWüóûüòüþõþ™ÿu pT X j îô׉lÿUþÜýRýdüOûÙúAûiû[úÑø"øø•ù®ú²ûýHÿý£ êjƒ¤;ØpyóvöFFþˆüüâü—ý)ýüRû÷ú±ú!ú5ùÒøüùDü!þ ÿ¾ÿÙ?qÙ•¼õ<\¥ àÝbh³ãœ-ÿDýÂûôú¬úKúŒùSù„úeüý³ýýÌýƒþGÿ€ÿ†ÿ›ºïÃ’HY|”þŸ"× _ÿ‰þãüyúµøšøzù.ú’ú-ûNüàýÿÿ„þÌþFäæ{':‰k\V –R¦³þ”ü(û û—ûŒûêú7úúŸúû¦úú²úšüÑþ ólÉ!,5bX)d-;þ08ªþFý}ü¶ûÜúBúrú]ûÒûûÅùDùšù9úÌúdû…ü¸þl#„º˜½skòæªL¥ßB´»0„þýOý•üÚúùWø–ø;ù¯ùÕù\úõûäý½þþYþ ÿjÞòË2Gƨ|Pu²®GÖÐqƒþåüÁûÌú‘ù)ø¶÷éøÈúñû[üÏüªý±þiÿxÿ`ÿJX=fÉkúÅ€°ðŠ'ˆPÿ¥þþý„û»ú3ûèûÍûûšúºúkûü5üiüÛý[“·A¥êì>Û±Rs‰²v?ÿ§ü%û+û¨ûÂûŠûmûÀûbüƒü–ûúÌúAüéý6ÿL“FîyÑG¸|®< `–hôÐ^ÿäþ‡þ¶ý~üKû¾úÙú§ú¡ùÈø5ù¡úü!ýÞýÎþH¶zÁç¬ÿmê:Äò ƒßÿÿNþ@þyþµý§ûŒùwøJøoø‘øÞøùù1üuþqÿeÿÿs§¯Rßì.t¤«´A46$þ'üû­újúÖùùùúû%ûžú“ú]û½ü5þdÿ›˜œé{†´Ñ[Jëåòÿ^þéü;û±ùXùXúdû†û û©ú²úû*ûäúûü/ÿeŠ(ÝÒ¥¦çŽL?Gn\s½Ì$IþfýŽý“ý»üoûjúúEúJúÊù´ù û8ýìþ¸ÿm63ÿjF(rÁëΦÿÃþ"ÿ›ÿjÿ›þ¦ý ýœüû©ùhø½øúûü~ý¥þ!GQ»è6ÈÜT‡õ…HT,ô0øÿÊþ,þ¾ý‰ü úXùfù.úÖúû4ûºûâüÕýÇýYýÞý‘ÿ´†¯kWTWÿsÐø3`ͪ7f“ý0ûùù™ù„ù_ùOùðùPûRüüZû5ûöû<ý‰þ•ÿÍÎ]BÔéZ Kvõ5E åïÿ°þñý;ý)üþú”úðúíúòù½øHøÒøóù ûÑûíüÿ\‘ˆO© Ào·mɯcrÜ­ŒÿÏý¡ý:þ>þýhûú`ù(ùËø>ø…øCúœü7þñþiÿ($†žv/°»0Þ¬ýmÜW¯ÿàýfü£ûEû‹ú}ù8ù;ú™ûSü_ü@ü~üPý4þ•þõþgÑ󽞭#æőâH ®žÿƒþµüšú}ùÌù´ú_û›û´û%üþüýý˜ü@ý ÿøZ ÄÐì,V`ÍÓ4(CÖ8£ÿ˜ýRü üTü8ü“ûÃúú ûDû±ú@úûúÃüÁþM; @cÄd"WÑÕ<G¥ þ¤ýKýúüSü¦û§ûüÛûúBùèøyùxú`û(üsý˜ÿ¹¯¨¼s‹áÐ-†¡žÈ9_æÿnþÎý™ý«üçúQù¦øàøsùÇùÕùpúùû…ýþóýþÔþcWKÜ¡4öÐ'Éý0V¬ù!ôý,üûFúEù<ø8ø|ùùú»ûÚûéûfü]ý=þ“þÿ˜ðÉŽ¶âfé ƒ¤·’@˜0Xÿ™þGýºû ûVû¯ûcûšúñùùù°úNûjûáû‘ýøÿÞÁï¦`tÿTÒ]Cѽÿ™ý›üÔüJý@ý¦ü÷ûÊûúû™ûvú½ù`úùû¡ýåþÌÿÌ9‚ËYR %µ$õ%Ã/E'áÿ¸ÿ ÿÐýüüóûYû/ú…ùÿù2ûjü7ý¥ýOþ‹ÿžÂvÞHŸQrÈFÞ)!Þ|n [¢ÿnÿ$ÿÌýûÁùêø÷øhùÆù"ú6ûý¼þ.ÿêþþþÕÿ1u0×-Þ´KlÚ£hžI7äD?þmühûûýúpú®ù­ùŠú?ûû˜ú•ú}ûý§þÎÿ),ó^${¶²^¾×Çfjÿþý¥û|úrúWûîû–û²úöùÓù,údú`úûý®ÿ¢ !¶¥… 2D0@|‡Îÿbþ]þÿýÙüTû!úÁùîùÖùlù«ùûòüFþÒþêþ6ÿ!0°+&òÀ}¨ðgQxè– yÏÿoþnýü$ûfùˆø ù\ú³ûžü2ýúý#ÿíÿÁÿXÿÚÿe$bð?í­4Ø>*úBßÿEÿºþuýÉûÐúàúvûâû¾û\ûŽûkü ýÙü­ü„ýbÿ@•T¹“¡‘0Ùð^¶RmW°ý¥ûÆúÒúûûäúkûmüÆü üûèúªû ýqþšÿØ”‚æ± Ö?B'bEÿ¨þíý«üoû û4ûäúäù÷øÎøùÔúäû–ü ýfÿß}s zJf¸¥­¯Iw¥ÿµþÔþ2ÿ²þ#ý'û…ù·ø„øFøøÒøÍúýtþÿ3ÿ«ÿ§c¨›$£WÔ‰NlËjøåEÛÿþ üóûœû×úÍùù-úûOû ûºúûGü}ý7þÿøRÆŠDIþ™{ºâ(MÞÿpþƒü²ú ú£úû/üüºûÄû&üü`ûû üþý¶¨n…zp Dß4ÚþZ'‹îÿÕý‚ýqýøüïûëú·úû-û·ú•úgûøüŸþ»ÿ&w\~>ŽÅg£ÞOÑ}sd0ÒþþÃþÙþQþ¦ýhý1ý)üqúù¡øKù‹ú¸û±üþµ¹ŒJb× Óê<\é¤Ò7BÉÿ‰þþßýûüû.úùàùhúsú.úŠúÁûãüCýDýªýîþæÁá¶ëj«‡¶“Τç`f,Özÿçüöúú«ùù¯øAùªúÔûü­û@ûpûCüý£ý®þÌT831ÍQ5’Í*Ó¤ ¼îÿþþbý¼ûúúùúæúYú„ùÿøWùQú ûRûøû†ýrÿã~‰ÈÆÿ—Êp«­¾´¯ºˆÒÿlþþŽþÞþnþ/ýÈûôúƒúµùªøiø}ùqûrýÕþ”ÿSl5«ö*£ªó×þ?¤ú+ Ž8{ÿ<þ"ýÌü½üüõúCúqú5ûôû.ü!ü¦üÝýëþ>ÿuÿfþA…Jc¡1æÆ+ôóØ$ÿOýûù4ùßùÎúRû¡ûtü©ýBþÝý/ý#ýþ¿ÿe³LÉ9‹w­eB£Ÿ:þ$ÿcýOüáûtûˆú¦ù®ùjúñúåúÂúû=üÞý.ÿìÿÎLÌx^eao±O0d Š@üÿxþÍýIýrüÑûôûbü4ü-û¼ù§ø‡ø*ùÌùcúºûþFÚÑ÷©_~‚G¬½×þ³•§@B—þéýÏýtý„ü4û7ú ú:úíùMùRù_úÅûÎüCý…ýRþØÿM!à9ì%dµÂH,Ÿˆ¹· ದÿ£ýTüMûõù¾ø“ø”ù û2ü“ü‚ü¾üYý¥ýmýýÇþê2Õ‹Ø[»,ÓªMŠÀPOs:‘þ¢übûû;ûKûãú€úáúÓûiüeüzüOýäþ¦Ö7‚V7`çsmõÅïóÿâýœügüéüEýñüaüFüVüÎû³úÒùâùû÷ü¡þÐÿ'Ú Dœ9î(göÁ^Wt>ÿŸþéýÎüïûàû&üåûû úÔùbúGûÅûûûÓüuþ ×d`ù`îýð^ûY>ÔáÀÿVÿþüèùŠø`øÎø ù[ùvú?üËývþSþ þcþÿµ–»•¥3qx넌&A?h퉦þý:ürû3úùÈølùBú·ú¶ú½úxûÀüÈýVþ)ÿ»§*È«£J:Ó³[åcI‡hÿHþÚü¸û†ûü‰üdüoûTúæùúþùÍùKúõûbþ³!¢ÂI–±•Ëg¦s>:;ÿþ²ý¼ýgývü™ûuûœûEû}úú†úÀûýèýLþÿlŒù$¾ó]7mÿOî‹ÏÚ%Ê•ÿGþvý«ü`ûãùùBù{úìûÎüNý(þOÿúÿÏÿ_ÿyÿ^þàxS Û¢·/ ˆâÿËÿ€ÿ`þ«üûDúPú†úSú)úÊú ü"ý”ý­ýþÿÅ!Ö‚§Å0ÊÂ~%k]Õ­þœükû3û+ûÅúmú¸ú`û­ûLûƒúúªú ü]ýwþþÿ*J†¤ Ö3¦‚$Gã=±+.oÿ-þüEûâú!ûIûâú úoù¯ù[ú§ú»úcûñüÖþXgl£)lðbHÝëYkÑÿ[ÿVÿ ÿëýüuú¼ùuùþø”øòøJúüý;þcþÑþ·ÿm²@ô'¿UW±9‹¡½ÿšþóý1ýâûmú˜ù®ùhúûQûmû(ü_ýBþþÓþ¬ÿ> ]lõŠo»òO~Ô|Ho\ÿ¼ý üûüúªû7üü¹ûãû_üü%üÔûEüÂýÓÿ‚„s¢{eœÉš¤„ýÀ¯€kÿŽý‰üIüüaûæú%ûÄûü³û4û4ûü]ýLþîþûÿ–ÈÓÄ@M$(·‰ŒÝ Wlÿ&ÿ«þ»ýíü­üüôû·úZù³ø)ù)úòú®ûýãþšŒ¤vØô³FGo ¥KµŸÐ "ÿáþéþwþ;ýûKúÛù­ù6ùÕø:ùrúóûý•ýçýÅþ+ZĖ͘þpžW7•åþ!ýüAû>úvùtù2ú.û°ûuûûFûü“üîü»ýhÿ½ï/s…â£Õf :~Õ‡RV%þZüQû4û“û¤ûûŸúÕúbû‰ûHûDûü¸ý‡ÿºPI1Mðãgôù8¨ªsÿkþFþþ]þjýfüëûšûöúú˜ùúuû5ýuþGÿAr3:áØ¦P¹ºì‚ +¤ùÿÐÿYÿrþÈýžýký¥üeû?úÞùkúAû¼û#üýŽþËÿ]i‘|OÚ-ËebHFùãLCtaÿþEüxú‹ù±ù3úkú§úlû’ü‚ýËýzýPý þ„ÿïIú•m.6\ þ`ƒÿ8…kþÒüùû=ûGúŽù”ù;úñú)ûÛú¼úkû”ü|ý&þ6ÿèÕLÙÀÙ…*=þúCkÚEE¸¶ÿ¤þVýQüü<ü_üÊû„úuùAùŠù³ùìùÇúƒü¼þ­±øR «ØüšÌ·3'J{&P¨ÿÃþ þ¨þþÖüÅûNûÿú]ú ùZùñùAû˜üZýÂý‹þºÿ²/•fÙ{bB̪’óб!4O¤@éþìýçü–ûDú‰ùÏùíúüzüüýÜýGþ:þþ þ-Dâ®7äJíÞ§ö;ß~eÿ)ý‹ûÙú ûKûûõúrûOüòüýëü7ýgþ FúÅÝÏ&ÔSJäf%hÆR‰ ÿ2ýSüTüTüëû”û«ûðûßû>ûgú(úÿúoü¶ýÔþF¯‹qêÚ€-\XŸ-[””1Lÿ?þûüüÝûüîû:û'ú‰ùÈù[ú®ú÷úÉûBýÿ]ó6÷Kw„/…"Ú‚ÂLxP^ìÿ³ÿÿ™ý•ûúVùùÔøÁøQùŸúBürýÂý¶ý"þÿáÿ{SÐΤy<¸w!<÷ë|‘˜¹þÃý¹ü]ûúLù}ùCúÕúÔúÚú‚û‰üHý§ý#þ2ÿð¶ºø7Ön‡5è|‹ŸËƘÿþ—ü¼ûÝû~ü³üülû4û9ûû±úújû=ýdÿöย3 ™.~zFIâ¢a‘öìÿCþŠýpý!ýlüêûìûüòû]ûÀúÅúªûØü ý4þ'ÿ„ÇtŒ¤c¨Œ–F(©ƒó±G@Óÿñþþ‹ýùüü¢úTùðø¯ùÒúªûhüýåþL ¡õ8ô uÉJÕøXgOžÿmÿ\ÿÉþdý¦û{úúðù†ùEù®ùÌúüýKýšý™þûÿÔ¨àA=T¿Zˆ»aé!.R!þüÃû&ûqúøùú¸údûfû¶ú$ú^úûÝû©üìýàÿBG2,Lp,¿ª*ë5ÀtC¶ÿÒýü+ûûmûJû¢ú(úJú¢ú³ú‘ú·ú˜û6ýÜþÝÿmCy bÆŸšÝ$^Ëå™MŒÿ„ÿ–ÿíþ…ý#ü6û‡úÌùùîøºùiûýþ€þÿäÿdlQ¼"„HsZA­·_¤ÿ ÿ²þ0þ'ýªûUúàùTúéú(ûqûMüŽý¦þ/ÿIÿ£ÿÂETÆ®4K¿æs¢ËD:=p‡ÿ'þ\üÛúmúïú~ûžû¬ûü’üáü«ü$ü!ü-ýäþ~Ó8µëS²×æö¢µ˜›¤uþîüüJûqúûù0úêú—ûªû@ûû²ûžüTýïýâþc'„ta"EÞã¿ß4nÐÿÿþEýØü½ü_üDû´ù¥ø–øùµùnúœûcýgÿØ?!]àt!:¹Pp"ïƒãÿûþÿ5ÿ†þ,ýôû1û‡ú­ùßøøOù·úüû®ü=ýBþ‹ÿ‘'žvÜMüݧÅìªë ‘€(è}þ\ýaüUûcúú’ú›û6üü¦û­ûüVüƒüäüþ!{Ý@“¢+An[¡tÃS.iÿUý²û%ûaû“ûkû_ûÄûWü©üü"üNü^ýÇþÖÿ˜ˆÂåq:ŠJ­;h¼A–dÔÿ›þBþbþ.þ{ý³ü.üÒûSû†úÑùþùHûúüSþ^ÿv¯§èoø]ŒµcÓAR,þÿQÿ—þÑýZýUý‚ýDý;üÕúú úfú¥úûíûwý7ÿrê70Œãr1¬]e‡3ô?û/—ÿþèü ûïùÅù÷ùú>úÄú·û¶üý×ü¨ü;ýkþ¯ÿçDõk¯ï¤I®îm}Ö¡[}Ðþyýü°ú‰ùù¡ù“ú#û û(û«ûgüðü<ý«ýÄþ•kˆ £„@mÃ˶Œ=W)ÿêýýýý€üOû>úÎùÛùú4ú­úðûðýÖÿçT¼NÅéæGtxÓÈÃþyþ©þ„þêýRýùü¡üòûÜúìùàùÍúóûÈü‘ýµþ!VíöëÞýíJ5yKgâÚÿµþåýAýfü<ûVúgúLû3üœüÎü6ýáý€þ°þþÙþî‹¢k“ncæá¬³këŒ^îÿþýõû¸úTú6úúBúóú üJýÓý¼ýÃýoþwÿUå6Ãä¹”Õéd|§,ËâC›þ•ýý¡üôûLûûû=ûÒúúÚùúÌûý þcÿ ßMòêhc  º<ÏH_¹Yôþ†ýiüüdüÅüiükû‘ú=ú&úûùÑù"ú`ûXý0ÿV+eƒ×®žã`¯Cé0ô‹Ž#¤ÿvþ×ü‹ûÕúwúú½ùÄù’úÝûÚü%ý9ý£ýbþ/ÿÎÿr†…­ÖEâ%úÕc±ûŽ‘‚ÿQþ¾üýú¼ùšùXúûŽûõû«ü‹ý1þKþþ_þŠÿVàˤó†Æoq·¯Ò8’|ÿþÏüyü°ü´üFüÂûû·ûçûÈûœûü—ý`ÿ˃?`Ñ8Z.ó5ݘõ}RUþ=ýÝüžüKü üSüºüÐü+ü/û¿ú-ûüÓü«ýãþ•`‹È¯øœ,a…æ“=gÌïÿÉþ°ýý¹ü9ü"ûêùkùÉùƒú(û´ûü¹ýÿòÿµÜ  I¥Sì÷@egž^vÌþøüoûoú»ù ùÁøùú©ûÐüJýœýAþ"ÿéÿw5ô›kxiŠ/3¨zò°Ðþáýý üû{ú­ú1û?ûÃú\ú‡ú/ûðûüTý¾þÔÇØ(R›á✆ïMÀŸh2Îÿ@ýüûûiüŠü.ü¼ûŠû‡ûZûÞú‚úþúküþ^ÿ_iŽ…ìĤû€böž_ݹ(íÿnÿ9ÿ¦þ­ý»ü!üÍûbû³ú4úú´ûîü¾ýFþèþÁÿ“òæ#±ü§âóèj!l&¯•H¾ÿ6ÿÚþzþ˜ýüŒúÞùúžú"û³û˜üåý2ÿÝÿßÿíÿŸº¾xéÜ[ôþ:éžêæðTáÿþþ|ýòûûîú÷úÝú»úåúˆûAü€üWü|ügýÒþ6c…äX;ZÛÜï›I=)]¢šÿïýÁüËûáú3úúÀúuûˆûûÃúüú“û.ü·üŠý ÿØÇ.ž@Æí·Õ,æÒ€j‹ˆ5ÿÓýôü½ü•üÖû°úÌùŠù¶ùú4úµúÞû˜ýÿÍÿ&·{m•6±HûŒ‰„ úCë’èóôjp@*ÿ<¯½õü—ú)þÄEöë8èóßþ"Hõyí=óœþ]HÑØ ­òÿ£Ú »´)ÿ , ¶ Úõ.î?ì`ï-ñÚí?è|êéùÔ}Ýø<íðïùûjÓýüÛ!#Œs[IüHý0ÿm쌃 ” 4øyîéVêñêÜéßêüô³t 3›þÂ‚Ä 5ÿß qvOq›¤±_þÞóÈó‰ùžÿ7þÏøõMõúíû2û~÷}ù! ü ¢ k 'ùú?Ukþ­ïÚíÈùèˆ9ú$õ7üpuÿ6:ñ‘U 6 l®ûþÐþ¤‘ýþ¢ó¤ë9î€ôó\ëiæQð“ÿý/‡•3Õ&$®>}™Wœø“ðÿîFóµ÷wô+í—æ²é½ñ÷<õ¦ð‰ô;W ì 4d>âkÈ“— lîhûö6÷oþÓ÷Híê»îlóÔò"îÙìòÌü4‹òÿFþo o DŒx u úýúåNû¨íë¶ôüý+ý†ó4ñ„÷ަý›ùHþT H=Ÿ©oÀµSþ’÷£õNüÿòý‘ó¥íÛòöúªû|òõíRõ…Ô ±ùþEBIÈ¡T s¤ Š`þ¿þ>Iý>õ¢ì¬é€ìëñò{ïÂì™ñOüq|9ý¸ ®Ëx € sba SÉ KûOð˜ðáô÷~ðäézè í‘óKõEõâôqû£ ª Ø ßýÊèì Ÿ ÃÔ ú#÷ÄüYùî;ë/òùíööïÿíôô2þ3)ÿ) ”ÿ ± J Q ¨ÓßÚüÚ˜t\öaïvôµüÿÁ÷‚ó`ù#é6¥üùþÞ ;1 ÿ5Õ“ ©ßþôù7ùÉûíü_ù¨ôið>ó¬÷"úöò×õ{ ÏÇŽ£ª i4 » \ûYü µýÝó¾êáèÕì¨ï3î“ëìÂðøÎüäýøüéÿ*1·g ÖX¬ªJ˜Y!ÿWñJí²ñFõoðç}åëÀó·ôHòò¬ø[j ËDä Žr° Œ n ,©ý öÛ÷ üOúð9êöí¥÷úúó7ïšóËþ‘ý¹Õ TI Š 6 } dýúúâüÓÿeþ“øeòóìøµüÍùnôÁöD° :±ÿÆæÉ—=5Õ  !ùùüAýÝölñðIôùçùÆøSöÃùÚÿUØ ÿé€ Ÿ ê¤û)ú‡ÿÝÞúíî+êÂîôŽñøëñê˜òAüáM¹Œ HY%ÄÝl× Í<$ d$÷Áî ñJö”õâëéå ê€ô_ùùôò+÷9¥ + š" àÕÔ » Û² ºtû©ûšüùûØôšîjïéõ¸úköñóÍþ §°þü®x48  r,úâø8ýÿþDû…õ)óÿõ'ú‹ûIù¼ö ùǸF Û’÷G QŽã Î ¬öôåøü8õ¯ê†èšî´ö¢ö}óÄòÕùú¦‘›º¿ “\ðé<íŸ —þù=ú“üŸøVîÒé„íõôóðêiå6ë)ø ÿ[þ@ün 7ò– ZQ@è8íß8úµ¬ø>ñ7ðó…óî]èLêÄòÝùõ÷•óÔõµö ùHè`m ;£ #9P±þûiýýuø¤òÂîxñ•õ©ùøöûöý vÚ÷ÿÜ , áç àGºûnøWý¿,ûwóñvøÑþáþvúÄø\ýI²ì1­  î ‡Wæv õ\ùóºõ‡úªø«ïêêeïŽøû¥õnòøî‹ nÚ!hÊFÛA »Uöÿîù6ùqøqö®ïëlë‰ðró°îÏéëÎõþÜþ3ûžý† g£ôï u·ô ‚ ýSùô*óó¬ñ*îìŒíøò5øâøöÒõŠü_³ ÄMLœbø =9Û Œ±ûéøpüZÿSú`ó ðñó”øúÍøv÷ëúñÿÅR­ßjt —¿V‚[£úÎôdölüêú¿óEî|òÎûeÿRü|ø-ý½ . ÖŠb Þ= j 4=¢‚ûõ¤óÉõ°õ­ðeë˜ìXôuúÐø¤ôÉöQ  ôœA ;„Ä 6 p¤ƒÿ(ûaûuù¹ôÏî!ë_ì$ïbòñbïðŒö«þl ÿÑ9RÑ m m4Mjh;Ä÷-òŒô{öõó‰íÀêBî£ô˜ùÆùéø¥ùŠþ®”õI ]ßSŠ'< ,rü öÒø¤ÿ1ÿ÷\ðºòÜú_þ ûSö$ùqCíä¤Ú ’ ,+þC¥—?ûõnôeø¥ù“ôïÛïªùʆ$û/ü³»Ä) :+ r‹— ³l8¨ÿµöƒòéòô¨òìíêë«ð¼õNö ô0õzýåå < ¶y ;O  Ê ae ÿÿvúFüwý&÷œíJèkë4ð|ñ’îŽìðòöPþfñÿºÿq ÒžË é Q íÿÅâÁ÷JðóEù?ùúñëî öKüúò÷¨ú=) ò Ý^® RS@ %Œi)ÛüÈõzõýúáýœùýò?óûT\ÿüøsø«§ ] ±,. >þÙÖ½ÿúh÷–øDúúƒõÊñØñ>øæþ»€þÃý¾^ "h cL 3kð ªY2FM ÷ò”ômöÞóXíëê î·óÖöåõõ%ø}ÿÔ % ¯ ÈTÎVÔ C ÿÝ (qú›ú ýJù6ïÒç©éêïßñîëKïî÷ƒþ#ÿþm‚ú K³ ›à“2 0ÙÌ~ú×òŒñÀö+ù¨õ¶î«î õnü#ü„÷iøTÿ©’ÙÚªT ó 5 ¡ú«Y¹¯ûÞ÷¾ö8ù–úãøõô­ôJú õÔþ(üßÿÝ Cw-c Ó× XºýŸÿ:yû¥ôûñØôÒ÷f÷‹ó/ñÆò ÷2û¶ü_ý•þàÀ 7Œz  0âøÝÏ¥>úòœò°õÍôWîƒé]ìÙò_÷ÄõTôÄöÁý]JÁà »*™pyÒ ‹  Ñ Žý]ûðüªûHônë‰évî;ó’ñíFîÁö¼ÿOhA¶Ãå h ÷ ³Ü3¸ —¸3²ûöó!õg÷Zö˜ñ[ïAô¦ûgÿpüÄúÒþD[ Ûånh A‘ B3_£¤ûÉ÷â÷Uú¾ú¥øŠö›öØú´ÿü ­|}r £ fVp ã < úøüäý[sýíô¿î9ð°õ²÷ ô®ð%ó|ù3þþÙýÃÿwé 9—£®Çîó èñÍ5ûó±ðkóÓóîçÈæxí#õ/ö­ópõ,ýTõÌÖ’ W׊øD× l _ A~ý¡úøúÅù¨õïÿëFîªòó¬îHíÎòIü90íþÔÖ y ¶tB J; ð”Uøÿ¦ùõ[ô¾öOø÷;ôÓò,öÆûñÿ’ÿôý(U | ¸­1 ' Àýÿÿ@\ù ó¡ô2ù û0÷aô±õ²ûxÍùƒî_ I M¶À¬  „|þËý—ÿrþr÷Íï§î+ó÷MôÍïëðÐøA(dþ¨þb ½Ñ ì ;Îèߥ nVÙDÿ`ùÐó¶ñzóôûðëýèí‘ôâ÷öÇöý*  Àb µŽW· ?NýÐûùû‹øGóïîîgðò'ó ððIóïùCÿi’ÏÈ Ocª Ø"  •?j †¼ûJõíôøžùñö@ô8õ™ù³ýÿœþÉþwo¥UÇWA bWýyüÿmÿŒú"ôÉó‡ø¯ü'úüõ+ööûf|•’ñ  w è ¶ ”H×ÿ«ý7ý]û8÷DñÚîìïëò‹ò5ïƒî›óüÂÿuÿÖÓ ªÅÊ Þ ”åô Ï0†=*úçô<ónó±òiðTí§ëyí|ñÚôªõ©ö ú/ ¡ K  ãªö¤  .‡ „ý¸ûÀüËú}ô–ï|î’ñ„óôEóôC÷×úvþÅÿI›è`~xP Ê W H ê½þP­®ý¢ölódö0ù¼÷Zô<ô£ùdÿ[íÿxÎ. P G$†cÐè¯ÿýôü ýŒúRõžòIõ•ú?üùßö­ù̯Óœ´6â½\ è] þ _Ø^þçüÎüèù¦õ(ñ3ï’ïñˆòNñëð2óÍùÛÿS¡Qï ½=9 ’- 7ѵ,ýúOóžðŒñÑðÔí¬ê½êàí¾ñSôÏõð÷¦ûmi ß O ë0%`f Ë Á ¶ –)þHú×ûCýø«ðBíxðÚô*õóâòø´ýÓ¡-a ] ¿ ˆ õ­ > …;ÿýû«üºÿNþØø¶ô@ö1û4üþø´õwùƒôF´{ ª ‹ ¹œuxýêû`ûóùÓöÈò~ðÿñŒöú:ú<ùû̵¹]ªø õÂmº d sF ØŠüQûYýéûöëðœïÉñoòrñBï±ï óÙ÷ãüìÿ¬Î £…È Ò, ødÂäYýiôðhòÌó³ðyë?ê ïdô…öÚõÁ÷ý¢6 æ ¸ %L}j„ G  ` ýÄþ§ùœù¢ûEù±òæí@ïkô_ö3ô½ò˜÷yÿéþ—à Þ ½ aÿq Ê ÒNÝþìýýâûø¥õÖõÊù†ü:üõùû¼™>¬v  WîÂê9)þOùrù‡ûHúRöcòðñµóöQ÷Gø…úþýÕ÷·N• Ëü>E ú ú  +Öý¬ùúoù¾ó—íÑë‡ï¦òªñ î¸î´ó§øþûýÄ,‚ AÉÁqy\…›  V¬ÿ&øåñ=ñ@ó?òDîë=î ôV÷ö¼õ´úxh ý îìÑ” Þ p µÒÿ_üqúGú#ùØõãñãðWô@øÒøY÷=ùŸÿ¹6Kv2¨ † ¨» c ypôýˆüµüûø•õ+õöø÷@úÝûýòý·•û©à sL 4UÆ9˜½ù³öäøˆù·öüñ±ðóvö÷;ö¥øeýåpR  š Å\‘ô ñ ž [ ºûòøÂøqõøîìéðêçïµò¡ñÄðòô@ûMÿrÿ€ÿÜý ÎAÉ»`½ R !_bþù›ó9ðÁðüðwïçëìñ¤ö—ø;÷tù4è z œ r =$œË Ò mª¨þdüwûûùv÷RõÊó ôœöøØ÷çø/ýz¤¡` ‰ N|MyÚ©yü‘ùIûvü+ú¤õô©ö»ùbû€û>ýP™ßr ×  Å P  ~ ¼­G$zšúô‰ôªö¦õ£ð\ìæîpôñ÷ŒööTú½‡G|ã ʯ˜¿é]C a suqýpúCù«öžñ³ëœélì@ðÅðbïåñùÓÊÿÑC×hÖW[ÇßÉ Â,ýkõüx÷;ô…òaòò8ñÑïnï˜ò¨öÖùîùäú ÿ& þ ) \ [Xî †èv % ÚÐû"ø÷øGúƒø õ¨ômöù4ù=øñ÷ãùþ}\rY× ² Õ :»À†38üä÷ùüü¥÷Áó¾õŒúÙüDû¾úÜþ°1  2 ¨ É ® P ¿?ªš‚ÿÄúêõ¨ó…ôžôjòpî©îóÉ÷«ø‹÷„úàÔ ¶ p 0 ¾6Ž› ÃF ÁõÿðüÜú‰øIôcð0í€ë¾ë#íŠîãî/ñ‘öÝý¤8aˆ q»±-‚Y65 åÙ-þæö ó"ô¢ôìòrðQðHò8õØö!ø¡ùûFÿÇZ  ³ z  °üûol þšøyøiú$úöaôýöóûþ>ü@ûEýÜqQ± á ™ ¹BÔ¯¦ÿþÓú³öSõùöùš÷lôFô*øüýŠûQýÞ æ ½ ‘ Hw‰ù ¸f¿úþiú¤÷"õ7ó–ñ¾ðœïNï3ñxô£÷nøëùUþÅ(  W§Éù \   /ÿ}ûŠúZùêôðÿí×íUî‚íÉíxïó`÷4ü&Še  ¶Mx!LÓ© Ûþסÿ9øòÊðuòròÌï§î«ñéöÄùçùqúýüWÞ R ² ö X Q j &M™òúã÷søúEøÎô­ô ù°þcÿªý±ý9ôÚJ'K ñ ¶pÉ_ÿ½ûàøÆõÉózó%õêöÚöüöùÕýéhnÿ’‹ ¦Ib NÑ­š—–w[þë÷ôØóónðÛí>íîÍð¹ò?õÉ÷„ú<þÉ ¦ «4ÓÉ–) Å * h ¥¶ûÑùŽúËøÇò6î¡íEð¥ðjîœí¿ðéöÓû°ÿ|6ä w +Þâ Ó €Lì `ä/®åû>õ™ñ÷ò|õ*ôúð-ñ ÷-ýÓþ<ýbýÒ¸PXǯ  ü $ ÕÒSÿ†ýYú­÷íöÚ÷Eø_ö:õ–÷{ýŠ>ÿ¢½; Õ <ö­  ojO>Ëý_øHõÄôòô®óMó@ô÷Åùàüàÿ@ç -® e nœá ÛÿAømò½ñ³ó¿ò¨îôëî¿ò6õ`õƒö¿ú“XË´ Ù$–ÔþrC( 9 I ¥Ðü ø ÷ÍöÂòVíeë¨î[ò)ñMîºîÝô‘ûÿAGÁ ³öJCÐÙ l ýwÀÿ2ý9ù’õÖóÝôÔôÇòñ+ôÀúEÿ_ÿìýŒû Y¹ à yÛAÛåþGúÂø2ù ùâ÷^÷ê÷0ùðúþýpfË/bM i ã ão I { "FþþýŸÿ›ýr÷ÎòNòUôEóð8ï4ó1ùÄüÅþ¥a¥  É Èpèͺ c^å ûõöðñÄò„ðì÷ëµðOõ4ö.õ{÷Jþ. ì œ¾g¸8V BüNû§ö–ôó,ðŠíîò‡ôÆófòõeûHcøÎ ##V v" RˆõgýVú‚ø·÷·õKôûó,ôô‚ôøüü²Gru l I Òƒ &ËzñêÿÄúÓöv÷·ùjùC÷zößøAü‹þóÿ.5Öøh ƒ Ü¥õPÿ ûíú û£øŒó°ð­ò'õŸóTðð|öÝüÄ|ÿm ¹Ø eŠL7 • ‘:oþûDö±ðˆíîîîìåêWíIóø~øh÷êúLvÀ ! ¶ vj¼ˆÙ a ×qÍýúëõçò&ñ‘ïeîˆïXòŽôÄôAõù¼þ7’ü \R ª  $ rÏjÿ—ÐþZúëö˜÷fùùÿöeõyö4ø0ú€ü &¾v™ ‡ w}Ì&Êÿ-üAý[þ_û°õ\ó†öèù€ùXötö6û„0 ONó ¤ Ó Ö „ 1 l Æ•ö¢ýŒú™ù}øfõ’ñþð¹óõóò_ðãòîùmº˜  ž èð eÿ`ÿŒú÷}ô7ñðîªízí;íî§ñÍöËúkûæüµA« ) ~ ±˜>™Ü L &  ñü­ûÊûãøHóUïWïÉðRñÌðÞñÁôá÷ªú©ý1·4† ê ° ì Ÿ ² < $ îªÿöÿüFöjôú÷€ûºúñö‰ö&ú¤ýþ8ýEÿ¦Ïš à§ab€SDøü4ûû÷úò÷KôÖôkø'ûÔù÷÷Àú%äfRå’ )  )   9 :LsÎþkûàö`ó>òœñØðÆð°ñÉòžòóöküÚ‹ù= ŒùÌÑ´áPj 7¤ãû[ö3õÐô/òÄígëõìŠï„ñ/óØöûþRŒ¦ ! ¤ŠxTÆ – ù À­þ¯úûFû±÷Ôñ±ïýñèôHô¡òpôgù3þêÿ펢C ‘ Ç B ) Œ ô¯*Âòý'ý×ûè÷¬ó±óÁ÷/ûKú”ø‚ú3ÿð¹ÿDÍá ² ä"¡ oŸÐ^ÿxþôûdùí÷Ü÷÷*ööàøßútúšú¥ýQéT”¸ Uß^ Ói S Ü ˆ\ÿíýõüWùeóïïñañ¦ðýñÔôp÷GùüFh˜3 B–Y¯ˆ"ÞíÆ½(ý$öò+òÿòœðìÙêÄí½ñuó¶ôlø6þvúÐ Ã bJñí<  bŽpü´ùÄù¸ùÇõòð ð„óžöâõÂôÞö½ü8ÒfÔ·d â õžóÎ=ú ŵþüHûñù@÷õÜõ™ùNüpü¨üÜÿû?zî  ŽÔž"ÆàûúUúŠøÆôRòÇò‹ô½õnörøµúØüÉþâúég â •r‡3 Ç ø h y ºü ü§ûh÷kð›ìÎíîðñ ðcñö&û™ýûþ:Y  Ë÷ÀEËr: 5(ÿý-øìòñ²ò«óð«ìíøñpö{÷øTüÐ6 M Ò { ()è  „ ‰ @¢|Êü‡ù{÷÷ö@óiñ‘ò&öì÷]÷B÷8û¤ |è [ 4 Ú,müA¯þ?þRÿ†þUûãøøQøøˆø#ú5ü.þ+hgeqg¸Ì › bÓÍÆ¸âûiøÑøËù ÷ò>ðó÷cøsø?úÆþ:ðŽ YÞÚ›¬  ,ûŒqüŠù§ø÷òØìbë$îeð‚ïÒîò*ùŸþQôºä ý–²±™Î– ¤ ª·büšøäôæñýð òòdðMïIñ<õ÷¾÷5ùÿF ž  Ö ~ÚV d š U !Ø{þ»üøûÝùýö€õJõ¶õ´õ„öoøtúçû¥ý=‹å7¾ÞÊ 6 YE5„óû2ùpú[ü~ú÷¢õ÷£ùxùù²úÿÇÍü±Š E k w РŦ@:óYý3ù;÷â÷Ž÷ôvð^ðôK÷×÷øÉû4„VVÕ å IÚdCÞ œ ¤×õÄý:úãöõ7óGð¤íví´ïñVñQò÷ýßPáË p ï&ð Ï :Ð’Fü÷ôóîñ¨ïžî:ïêðòÁòÍô«÷óùûÀýÑ? ë G Õ T dddÑCÿ¸ûvû†û$ùñõŸôö¡÷Â÷ÿ÷Ùù ýlÿ‘oŽkú»R +†ƒ‡ýù]÷mùåúeù ÷b÷éú@ýáüýû€þk;‰°i Œ C ž « To«g2þ÷ûçø˜õüó9ôžó{ñ}ïÑð«ô¬÷‡øú'ÿ¦œ Ý ø  k õµL,„ 2h”þŽü:ùoõ¢ò´ð+ï×í*îÏï»ñ$ó„õ=úTÿ¹”š §ù±K-$l z8ýžl>ú]õÏó óñï[ïRò6õo÷MùÌû\þ“ 0Q | Ž X W %¨ Âo{OÿÏù¸÷8ùûùÌ÷¾ôØôå÷ ú­ùù˜ûd280F¥*ˆ§Á;C£þ¨ú+÷†ö ø•øl÷¡ö_ùýtÿ]þ þL ]âV ¡ Ú y 6¼ë¸ÜüÓøÏöáõvô6óRò%òßñ+ò"ô÷ÉùÉûiÿùh » … Ž õó÷[ã ü  Úäïû‰úWù£õÍð îsî:ï°îîgïÒòŠöúzýv%=– Y!v‹Î¡l ¼•ãK<ý:÷bô¿ô7ôYñ¸îWðÆôeøgùú,ý‚µ„:Õ® † , ÷ p &è?Òþû…ø ø@ù}ùÊ÷÷¢ù6ýþý ýª²ÝØ[! + Î>3Wþ8ûpùÆ÷¿õŒô²ô¤õUöÞ÷öúlþ—h[ – 5 ù ^  iÜ SÝ6îÿ{ùjõãôŸôÙòðqðzòônôÝô`÷ûÞþty•  Ui/×4Z Œ # ç¥ýú0ùU÷óÔî@î;ð^ñ^ðÿïîòï÷üûâý>ó" ® Dþ»|Va Á áÿÇþ·üÔøýôÍó ô4ó²ðîïóÓ÷Æú%û¢üÁ¦Ú¸ž Ÿ ß §"†bÓ­ÿþSû«øZ÷¨÷%øøùÄûÿ oÿe´„A9R ÷² Y3·ýõùé÷â÷€÷ÒõYô"õR÷`ùûzý2}£„ × ÷ ¨ û  F á ß7³ üiõÏñHñØðáî[í7ï óîõaö÷úœþ‹A¢… °6¢Y m â Øàà¬ûòøà÷ôõºñnîmîžð½ñòð˜ñ£õ|ûþþ €Mù |  ½ œšê º(.Žý:ü¼úøÚõUõæõbõïó:ô£÷$üMþÈþÔ ÿ r¶ˆ » Ãß„Á­˜9ý3ûiú]ù«÷ZöÝö@øúùÃû€þ<{ó5; ¤ *öY  ®ööþSÿÌþ$û­öHõiö÷Rõáó;õÝøóû1ý°þ»Ô  Û RÇ¢ H 6 œ ¯ýñ)þ´ønó$ññððÁí=íðõõ3ù…ù®úæþ‚Éäk aH½ ð sG ÿŠû÷÷‡õ?ôWòÂï[î$ï5ñáñòNôÕù¡ÿfÌR ? ì y ª @µ˜Ä ÿKþ_úŒøRø.ø ÷ ööLö§öÉ÷zú4ýñþ1¡aêÁ*A¶cÀQ ÿ8Xmýúpù˜ú¼úøëöaø üÿS¢Û˜Ò¢ „ ’ t |E*gÄýÿûQûù£õÕòÏòoôpôÂòÇò^ö£ûoþÿ§Z ® Uæ„#  <¶ÿýü#ú™ö-óßðÌïîˆíZîüñ\öÎø;ú4ý©¨· ù 9›éž h † ìíÿWýnú_öãò˜ñ¥ñÙññýñKóÞô™ö`ù×ýœ @ ê û & † !  Ž ‡PÌþêùÙõðôxö÷éõlõÿö»ùEûüû9ý´ÿWõp]L È 0 ¤DgÏþdýŒý±ü7ú“ø7ùÙú\úø`÷úPþ®|öp” 4 ? ÝÞ  w\–àþŸûêø÷íõ¿ó ò:òÃótô¸ôIö‹ú"ÿÏUÞ ò …#àÙ9Kˆ @[í¦þ8úo÷œõaó-ðÝí+í~í î€ïúò;÷ßú—ý6.š Ï | +²Ûÿè š - •WæýØûÚø@ô»ðð²ñ§òžò(óõ¬÷˜ù¼ûÞþØùçÙ Æ º l œ  u €ÿd‰ÿÿ÷üùö+ö ø\ø_÷i÷aú4þH¯~ú-è†Ü ÎKÚ\¤þû ù‡ø÷EöÛõ¨÷àù)úùoùý?‘7 1 r } | õ Ó 2*FsÿiýúÙöÍô—ópòYñ¢ñÐòJôÚõ±øý<½ÿ®Ä ‘Ñ–SB5 Æ@¯ÿõútö2ôôóvð>î?î*ð òûó­öŸú«þ6Ú  î ª¢Çâ:ç |  }müõùÈøßõvñ’îtïJòÔóËósôÂ÷áûþ® $ ²  þ & Ä i?ð'ÿÛýôü³úÉ÷Xö³÷RùùÔ÷¥ø”üœP'e_¡ÞP`dOò{vÿýúE÷«õkõÆõôöùûFüý?ÿ®ª×‰ ‰ `ê Z q Ç c Å•ÿ•üƒûhùIõ’ñhð=ñ_ñ`ðÖï{ñèôxøüÎÿùv" ~ ¢O|Sü Z XñÃüP÷2óiòþò¸ñèîZíJïò¥ôzõŸ÷Lüo#:¯ Ø ‚såï^ : ¼Ëãë"þåú+ùg÷‡ô…ñÎðóÅõ¼ö¡ö…ø¸üŽö=ho§ Á ' l ² : öq ;þ¸û¬ùeøµ÷÷?÷Yø€ùûùqú°ü1@tAvL 2 Òíñ‹ÎØâþÀý²ýÑûøÎôô'õöö±÷…ú²ýF|ö}< ™ ú _ †  h ‡ Àâ—ü ú‡ø•õÊñ›ï„ðZòŸò™ñîñõ?ùü%ÿé‚ Øp!î"e^$¼ ‰«ÿùû²÷GóqðøïýïïÀí}îÆñ[õP÷‡ø­û”3Ÿ Ê sëz£ò ˜ E Ò¤DEÿ•üÒù}÷¨õßóRò}òiôÏö!øKùÓûsÿEs‰Ñ| { ¸$wK*æÿgþðý~üú.øøÁøOùÖù ûúüŽþæÿ•ý9{vÜ N Á õ\›h×üÕùùæø0÷ôòÐòèôUöÑöŽø1üCZxÿ   ùB£ … ëÿ+ûPøÓõ¦òOï9îÐïòŸò7òŒó?÷ûaþža² EùæánF˜> ù À¤ùWýÍù9öÅò¤ðùïöïtïdï—ñ¯õù¹ûxýœsm ö  w Ý% ) À Ý}'þÆû´ú‰ù¤÷šõdô ó‡ó=ôömø“úý"†[·45‰ Õ öÚŒ˜¤«DýRü9üÛú÷÷2ö÷KùÕúbû†ü«þ%ºœÒ}I” ƒ q Ö I‹žÿ©ü3ùS÷U÷9÷võãò„òÖôº÷èø_ùÅûUù`µ÷ n1½ \ ¡Måþ_ûøþôõñêîöì8í!ïñâñ;ó‡öIû0ÿN£þ  .¢åKi‘1 nŸÚ”þúûöøô*ó/ñÅïJïšïñ™óýö.úýH-³ p £ ÿ ø Ë ( ümÿ%ûú3ú<ùäöšõ7ö­÷JøKøcùëû)ÿ¶ÉrÅÄu% ý·‘g*ÿŸûÐù´ùoùJ÷ÚôóôŸ÷ªúüóüMÿ‰(øe e À å ã Ó›hÌÿ{ü‡ù3÷èõ5õ…ô;ó”òóøõ øùÚúˆþdÁ$ š I»fü ² Ò E Þ[þbü¦ùËõGò1ðïÉîï”ð¢òõ÷÷_û)ÿ2×øM -Ç_°ÒNè & æþùøYõûóvó÷ñðïEïKð1òÉóÍõù,ý_ØÎç ! j ” < Ž ´ Ü ¢ÊÜè8ýXúmùÙøúö7õrõ†÷†ùäù.úøû>ÿØò¦ûóZ±W5ÿmýUû¢ùùCùùÈ÷÷î÷Œúíüyþtø  ì 8 ò r ­ ; t«†ÌŽÿQû1ø·õ‹ó¦ñâðñð_ñJòôØözù×û„þ_€X   1×-¦2 J © ©þ}ü¥úv÷UódðïÐîšîÿîÓðíóf÷^úŠýÌøËË 5 åc¹TÛ •fg8ÿ<ûáöeô$ôGô$óþñ`òšôÆö ø˜ù“üðïÛÄ O 7 ù 4 M U §µ Æ®'ýÎùøÆ÷D÷çõõXöNù}ûQüdýW$_Ÿ@3® Œ¨˜ÿ°ü|úÜøâ÷–÷ì÷Û÷š÷Ó÷uùùûþÎÿ`ƒB Ñ ) m & Æ ˜ ¥h‘¤ÓHüoø.ö¾ô¤òvð‘ïvð‘ò·ô7÷2ú’ýÇë0ß Ð A UÒ<JŠ ó ïÑBýÂù`øåöóËïÕí0îï ïï÷ñöûVþîî¾ A yø­ð| V±ÑŽÿWüø¢ô‹ó<ô6ô(ó²òŠô÷_ùÆù¸ú3þõš"áQ u '  ÜdU%Fÿ(ý;ûÍù*ùúøøøŽø¼ú3ýþvÿv,dC Z"›ª8«þ³ú¬÷döö]õÌôõöø@ú%ü8þ¾€ÖJ Ò Ï • ¶ å ô  ’pJJý‘øÿõFõ!ôvñøî©îæðOóõ"÷ûwc+  ë ]WøC†ü ® ²y3ÿ¨úé÷oöGôsñ€ïªïñ™ñtñ‹ònöyû?ÿa‘bX º ?‰dÛäN ‹ ü[@ùýæúÀ÷õó¿ò6ó™óôõløûOüÑü±þ|[† A í Š ‹ ¶Ãåçýýû1û†ú=ù*øú÷ÐøÈùóúŒüaþ/Ô¹¥× ­„Öùÿ:ÿþÅúq÷ËõãõÒõõÉô„ö­ù-ü»ýAÿx~Å ¢ l?  ¤ ™ „3JÕþ…ûp÷þóPòëñôðLïLî™ï(ò=ôðõÒøöý¯ˆ Ž ó°ý h:­² — ),½ýTùö¥ó–ñÅïãîÁïQñŠòkó|õSù~ýr<ߢø K ! B Ý ³ b j¸æÿ ü£ùÜ÷ögôçó—ôöœ÷æù›üÿbývö`G' ) Ó ý^ãÖÿXþ¼û0ù)ø›ø´øø¸÷ØøÚú‹ü½ýÿD–±¢‹ Ë © § Y:Wf„ÿîý2ýXû0ø-õ#ô‘ô¨ô3ô²ô÷1ûùýfÿ 3Õz À ö Phw D Ïõ¦—þ´ûvøõRòSñ>ñóðGðµð óçõøù¹ü÷‹5  Ú s€  #  2{ÅŒý úrö+óÔðƒïÁîïtðròbôqöœù¸ý޶;¶ ª i _ þ  Ÿ ^t/‘ÿ¹ü£ù÷÷l÷Žö*õ<ô õ6÷ÔùDüþÐQs‹Í‰iéwŒuÒþÿý2üVù*÷x÷ ùÜùŠùëù[üŠÿ’øµ¿V Õ k ú  – ùùýcû¶ù9øEöÝóRògòÿò(óZóvõšùÿý¹"’< Ñ ³B:â Ç— Jüû,øpõóñÒïïßï·ðtòÓôV÷Wù¸ûšÿ“÷ H ^ŒÞŒ} ½ - V‹9Uýœû,ù¬õxòCñxñáñ÷ñ¡òÜô øqû£þìÆÝ~ } ¬ % = ÷ ¼ÉéÍþýKû2ø?ö–ö‹÷L÷Ýõ¡õÃ÷û‚ýÿ Ú~ž„jª½Ê* íþcýäûîù­÷©ö=÷Eø»øù5ûíþjºÞî2% P È R j Jàcþ¶û·ø"öÑôPô¹óCó7óèóõ·ö„ùVý3úmj Ñ ~;Ÿ_P ,€ŒjÂû÷ôBòBðî÷ìîsðÈò­ô÷ ú#ý7“‡B +"Ÿw˜0 ; …­“Æý‘ûÃù÷¹ó©ñ·ñ·òó»òÕóÔöŽú€ýíÿÄâYK â < ÿ ( N5UI?ÿ%ýûÄùÏ÷@÷7ø†ùªùHù0úÄü‘ÿ  Û¡–—:vfÝíÿsþ‡ünúÛøøg÷Œöö‘öÓ÷ ùúwýšVYj« `  3 ô Ó k Ÿ±•ÿý÷ùAö`ómòvòòJòÏò{ô¬öðøûõþ¨0Þ À ª y4¤Ž ÍÝOaƒýFù€õcóòcð_îîðxóIö„ø@û¢þôwÊ“ © DÏ7 ÿmýÍùö÷§ö•ô2òIñlòFôõôAõöö“úþ*"›Ëî 7 q Ý Å + ÑlrÊÿ*ý1ûØùsøt÷„÷ãøFúžúÔúQüAÿÊô†‹®Àÿ`rw´oþpüSûú"øÈö¸ös÷øhø?ù·úˆü»þ¹]‘ Ì  x Z 1 \Øçýÿýûˆùö}òËïvï‡ðññ*ò#õù]ü!ÿ-Üd ñ ÕL¾cju' ³½ôÿ ýdú öúóËòîñêïÞíîôð¶ô_÷“ù¸ü'÷ìè¶ ˆ ¬8w… V > D þý û¨ø÷àõôÍóeôRöê÷vøùcûÿ#¸ûˆy • G * •Ÿÿ þãü"úÚ÷çö÷Œ÷LøµùYûý—þ¦èó˜è ¦ Ë“(Qÿ"ü™ú­ùÃ÷AõBô†õ³÷©øÉøµùüÿSu)v  v Ù … „ ± ®ÚêKþ3û ùüöÿóñæï°ðíñ(ò—òéôKù§ý‘ÝJ V €ÐÎ+nü_ © z~ÿ?û>ø—õXó¶ññeðpï ïmðŽóØö¨ùœüÔ‡·ò ¹ § Ú™M à ò ´õjØþ°üüùïöíôOô‹ôóôãõ‹÷\ùÓú üþ„¿HõE  /&'iŠÉÿûýýHýŽûùÉ÷Qø‚ù úÞú£ü…ÿ ÂJó+ " ÷0)–lþûSøµö€õ±ó0òqòÌô\÷×øúQüÝÿ÷óü > „úUµ´ oiáóÿlüßø2ö&ôòFð¡ïƒð¸ñ¥òÚó¡öèú ÿË|Q  úÆe$‘/ e ñfüœø9ö¡ôüòÑñ¶ñ0ò¨ò$ó¸ô‡÷Êúšýlú¼ à Y u wØ a ÷}2§:fýÈû[ú×÷õ‹óÐóçô ö÷ú ýWÿÇ=ºÀÁ R þªDývûIû=ûñù1ø©÷ãødú7ûòûñý)Þ]TÜr  n LYéÈq¯ÿþâû'ù¸öbõOôó4òló“öÔù üÅý M1›ß b RõUÁu [ fœ‚þ§û;ø´ôòqð_ï°îï€ðiò5ôSöÎù?þTU\ ”,¥ß Qן M¼ ÿúHöwôó`òTñ2ñFòŸóíô°öbùüÿ|ƒyh 9 Õ ¼  ‡ µ+·(X$ýFû#ûºúãø‰ö­õÕöjølùú;ýΟðuRQÙ­yBV‰OV3þœûùë÷ øøN÷Ðöøƒú¤ü¤ýºþ~‘Sï² ´ ) Èó?¡Pÿ“üàú’ùš÷põµó™òõñò¾ó­ö úëüæÿ„ó ü D Ó"‚Î Õ w I=þËû™ù;ö•òLðð{ð¾ð-ñÇò“õkøûþ²‰îí ÙáÒ<& ’ &é÷þxúÕõóˆò?òXñ±ðèñ—ôðöGøÅùÏü¶%Ü ë Ó ® M ø o¤DÌÿýµú¾ù¾ù`ùøçöQ÷Óø úúýû6ÿî>¦ì 2Π‡¦ðþ¶ü^û'ú¦ø™÷\÷É÷Aø ùÉú]ýàÿ¹¾Xë9 ^ Õ ( &  o Á¸@Pþú3÷Kö’õæóò,ñ¬ñQòâòPôŽ÷Úûíÿ‡óV ß N+2è?w} å ¢âg½ü+ú7÷oóðŸî)ïð‘ðŸñiô øöúæü?ÿód ~ VÛI)/ i · mX€+ÿ|üúø‡õ£óAóFóüòdó~õtøÑú2üþ xª€ƒ' { = î Êüz'pýxûùØ÷.÷°÷ˆø£ø«ø›ùoûýEþéâ-O e 3éäÙwÓþÖûêù6ùrøD÷Zö°öÞ÷Ùø¼ùlû\þ€ X† | B ì L h U…HŠÿ™ûh÷ÒôôÂóÍòÒñ<òÄó3õ5öñ÷]û±ÿµÝú 1 «ºÉ·3˜´ ¯H¿=5üù¿ö8ôÝðèííHîðsñŒó4÷žûÿ=w, Ö [‚³t Ù ™é¹Ðþvü1úZ÷ºônóóÎóÚó¯ôþö1úžü þÊÿЗ›š€ é4É#ãGõýVûÞùÜøøø,ù²úÍû¥üàýÿ *³/O Ð9C½•`þÿÓþ;ýSú÷tõõìõyõõ:ötø§ú1üþ!Ïê õ | *Ä ø D * ÿè r?ýù õéòlòòôðnðÊñfôŽöÄ÷«ùcý"æA~ \ 0¸©žÖ Ä 'Ôëÿéüýù•÷·õºóLñŒïlï½ðWòô÷|û.™^c N — Ž ¤ yh5 ”c8öäýˆú3øÊö…õ8ôˆóîóöôDöá÷Júý€ÿƒâÖ ¹  Í, ׳Aÿ€ûVù£øø÷ñö©ø}ûÂýËþ¾ÿT3ŒŒÈÏ~¶Í\êêýKüGúr÷,õ¸ôŒõ!öö²ö÷øüTþÿ|0 Ï ô à ÝOÌ ¬ Û² ÿ—û`øûôòñðžïœï¼ï®ðåòØõMøoújýÊ>C 6 b G`bë—žu x°äÿCý¹ú¾÷õªóÌòÁñð9ð`ñuóðõÿøý*I[J  p î ç 0 a ̃,›vÿ#üù¤÷@÷®ö«õõ ÷hù4ûcü þeÆhÍ}!   Á‰Z×DìþZþSýûëøÐ÷›÷;÷¿ö~÷'ú­ý+A¡Â’–çÌ  äy¹§þ¦ûmùh÷ õ[óþòôJõböÙ÷gúoý©ÿI„~   y 'û§“ F‰BÖÿüûøpö¹óñ…ï¯ï°ðÏñ0óµõ ù8üßþÍ”Q õ Z ·fQ†’Î ! vLÿ¡ûù¿ö!ôEò¼ñòíñƒñò÷óµöiùxüK]Œk â p Œ N "  U íÒ‚ÿ=ýiúâ÷²ö¢ödöæõPöfø:ûLýšþýÿ ö Ëå?7— >Ìÿ`ý÷ûûûÇùžø‰øHù¯ù¼ù³úˆýާÿë H N ~ 2 bSŒIÿzý¥ú×÷°õÔóòÕðñ£òØô÷¼ù@ý·4ä& ± `º|Ÿ± º‡RÙý%ù:öJôXò&ðÉî ïœð_òPôööSúÏýñy’ u hg’- Z Èõr×ü§ùÎ÷èõªó=ò¥ò ôëôõô•õ×÷ûçýb(q) ´ V µ È  ¡ åA*iþ©ü‰ûñùê÷vöyö"÷?÷%÷Qø_ûÔþ-‘Пønz)EÃ8âèÿÕýƒû»ùÓøvøøÑ÷Eø5ù$úûúüÝÿÃÂä; ¾ m ! ; ¢Ï.Úýªü ûTø²õ(ô”óÕòçñÿñîó*÷€ú»ýnGR . 2 ì¬Ê® y g tÿüé÷_ô{ò£ñRð©î,îÎïnò£ô~ö*ùKý½PÕ ¸ ©6Â3lø â ®[#ÿû øÑõÅóò¾ñ#óáôÐõ>ö©÷Šúšý¿ÿp_Ö ~  ÷ - • …H1ÿÉüýúú©ù ù›øÞøŠù>úûâü°ÿˆVa¸%Ÿ¤\ð  ¯ÿšýüú÷¶õ–õtöîö,÷ø$ú‘ü²þÒjYœ \ « u  Ð U µþHþŸûÍù­÷=õmóúòóeò§ñ>òßôsøÆûËþaz» Š Ž Í ‡ç° e ` 7bâÿÙü©ù1ö:ó·ññ‹ð*ðñ_ó-öwødú;ý%õÈ ¼ Dy­ò t ø6¤q ÿÆû%øUõ¡óŽòÜñDòôoöhøßùåû¼þ“    C Ð ~ n›xÇþœüIúÝø¼ø ùþøðøuùµúúûýÃþh8ë’:¹ýö|5Ìÿý5ûêù<øCö.õÏõ6÷[øIùåú”ýtÐån Ë ‹ Ñ 1 "  ï Ì“nDþú#÷@õ{óŒñuðÌð´ñ<ò‡òúó<÷^ûÿ9ï÷ @ û·c¿/ Ò 9Öý…ýúŽ÷?ô˜ñIðõïçï5ðËñÍô5ø°ú üBÿÉ+v8 f þ‘Q 6 p+C|„þâü³ú5ø&öõ}ônô/õ÷–ùºû¤ýìÿ¥àÖôW § …ù,´*K:þIü÷ú@ùT÷kö2÷ÉøúÃúÉû†ýbÿõ—Ñ8 ê * ù ÕÇ“¨¶ÿýzúùì÷Jöoôßóõ÷rø~ù˜û ÿžèý`  7  æ v ] D¨Í¤ÿåû8ødõqóïñàðãðëñVóaô}õÛ÷ û”ÿ©…úÀ YÅä19œ I hã§±üùhö_ôSòrð[ïyïcðóñWô§÷'û$þÓ¤ª • ø ä ‘†©   RFý½û­úúø¸ö8õ2õÚõIö¼ö;ø®úNýyÿeŒ¡º\ðr…ªÁþÈü–ûmúÆøB÷K÷ùbûÜüáýšÿüýÛ|ú* ˜ Ž ^íª½ëþµüÂúø•ö9õhô¼ó_óúóªõÂ÷ùzû‡þn‡¡  HóW P ˆ ¼ Àv²ÕýúýõµòøðAðð4ðbñ^óhõ{÷ú{ýei… p k, ¹  À'†þ$ú/÷›õƒô ó|ñ ñ/òäó£õ×÷ ûÏþ&xde# . Á b µ   ‹#žŽÿFüëù¾øøÜö˜õvõ’öö÷Öøãùãû§þ«$/_Ž … åçÍdlÿ+þ€üõúÜù ùø+÷†÷Vù³û¤ýpÿ›è• 4¥  E ØBÿWüYúø”ö¼ô×óô†ôõLö|øûHýzÿ9½ « Œ f¸y‘ü è Ž7ÿmü¹ùUö¡òïïÓîÉîï ð0ò õ%ø×úÍýf(RØ _ —ÖÁêí ® !}x¨þWûÓ÷Oõ*ôŸóžò¤ñÁñ.óDõQ÷µùóüÄèè^Âé _ b ] N l aæ‘Uµýû*ùŒøpøÚ÷_÷÷÷ËùÆûý=þ‡\&©Ç2Éž.hë þéû“ú”ù¤øÖ÷ž÷«÷Ÿ÷Ø÷ùlûþhˆ'ôà F b  ¹ K c 6f´$ýùùÕ÷Aörô‘òÃñPò­ó=õ1÷¶ù”üIÿ¡6$û ; !Õ®ð} “cÄþÜûåùøTõ5ò:ðøïžð?ñTò¤ôBøü ÿÙq, þ "ð>¥q ÷ . y‚cýqú>÷zôóóNóóäòëó:ö©ø¯úýޤ£ ˜ ` + ! ! ú*>•èÿœý…û‘ù(ø¦÷÷ƒ÷ê÷8ùKûAý¸þ,GUboo{gëCtßþ«û[ù„øqøø¡÷Ü÷Øø#úGû´üÚþ—/g•l Ž Ì ¯ ‹ ù L ߌÿÛûcøÚõ‡ôvó½ñJðTðòIô[öµøü zâïd  :" O ÎQ¨ÿ(üEù3÷BõðòìððnðñÓñ)óøõÚù^ý1³A Q n Ä Ä ¼ Ì Þ88SÍþžûðøšöÂôïó6ôõØõ¶ö>øOúJüþV{¯Z “ ò Ó ˆrËʯ“×ý¾û{úgùÿ÷ôöêöÖ÷ùúÂû*þÖÂK‚ ¶KA7S£ß/ÿüöø÷tö^öö:öK÷Dùûhü þ®ÔW„   b s f ‡Å™®þÿûùJöNôdó·òâñsñ8òPôÏöUùBü52 Ð Ú ÈÈÀpäR \ k™$ÿ·û.ø4õLóùñÖðîïøï$ñÔòôöŠù+ýž‹†ó ü?âR; * =‘¯ÿyü³ùx÷ƒõÚó7óæósõéöIøúNü{þ6 bÜg»¥† dq/óÿøýÙûqúúÁùDùúøùîú:üwý(ÿ£QkκQ í˜ õ²¹ªþöüïú3øwõäóÌóUôøôàõå÷Èúsý‹ÿ«µ: ° ª ª (± \ Å ì{0ÿ?üIùföÌó;òªñxñ5ñEñ ò õü÷¿úîýï! ¾ ô ‚ ÷a±¶ ¥   1çüæùèöjôÂòýñ›ñ”ñtò@ôuöøðúÓýöµâC “  é < XýXÍÿ?þîûJù7÷ö?õpô6ôLõe÷«ùÂûÎý,qKÝ{Þ]  }ÛÅÎdaÿ`ý4û*ùTø´ø/ù9ùoùÀú¤ü9þ<ÿ|ÊœÚåY i È/êÛ7´ÿõý@ü¨úØøÏöõ6ôvôHõFöþ÷ßú7þJœj  K m à º q  ¥€ýUÿ.û€÷Îô¸òüðíïÕïðyñÀò³ôi÷–úûýÉæà _ Ô õ ŽÑLÅ l 8 ŽI“ýÈúøõmò&ñ1ñŒñþñÿò/õøíú_ýÄÿh×òÜÎ c « Š  Ƶ™bÿòýjüú°øæ÷Â÷v÷úö9÷ìøgûŸýÿÊT·E¸('g¾.y{þ­ü$û¼ù8ø÷Ýöž÷¾øçù˜ûäý<êñj± s ì  $ šR~xÿ…ý5ûûøX÷Qö:õ ôróíó@õëö ùÅûÿT)æ« ì ç í # 2 > ÉŒ‰Àñüåø´õžóîñŒððñäòžô(ö!øûŒþíÄ G†væƒ j = Xàýøù†÷:õåò<ñõð•ñ{òƒójõøüøþ:—= † — ª õ è  ù{{PÿÛüEûúÊø·÷\÷Ž÷Ü÷øýøÛúMýHÿ¿hd(û*CaÄãÿþJüÂúáùVù‡øê÷!øiù0û ýÿáçÚ9 Œ    L ™¥óý†û4ùÐö¯ôó*óåòÄòNóíô ÷qùÒûÒþgÔÊ| &)å?ïŽ ¯  fSþ±úÆöÈóËñ_ð\ïkïäðDó¯õ¼÷!ú1ý“¬‰ G K ý‘˜ Á A Ä]¹}þ;ûÑø6÷Áõôó6óMôŒõËöÝøü¬ÿ†‰/Ü2 ˜ € Ù F:Ý[~þ¶û¦ùøí÷r÷g÷ý÷!ù&úûyüÊþQU›Q¥Ü:•ä¡Ì~þþüŸûú™øú÷Ó÷Â÷º÷MøÖùþû[þËwß’] M ß œ £ §ƒs@¨þÍû³ù©÷Dõ^óÇò'ó¾ó9ô_õµ÷Ìúýùÿ“›Æn — a©Û´» 3 Cé¡âþ†üêù²öÃó¹ñwðïùîÂï(òxõgøðúÖýräù  CÂåÑ ~ ‘ Ü©“þûÍøµöqõ‘ôûóäó‹ô­õ¼ö#øtúÎý.½ˆ%Ãq ðð…˜"ŒCOŠÿuýû2ùxø øùùxúïû—ý,ÿÅžY¥j%ärWY"ÿ%ü*úöøÌ÷wöÖõCöA÷ï÷PøxùÙûõþÕfó ƒ Y x g 7 r  %íAêÿ†ü ùF÷ õñò«ñtñòÊòËóÐõùŠü^ÿÉo‘d C ãšï  #âkÿKüîùÕ÷®õóò`ñ0ñžñüò„õ“øûTþbÌÊÚ F  HJ ¤ 8 ϰšV˜ýû‚øñõRôô…ôõÌõ÷¥øeúü8þS² e E ºŽ¡VSR¼þ>ýfû[ùøï÷ˆø ù£ùùúý[ÿCùûúã¾ÃK¿´ÿìü/ú,ø÷ZöùõLö‚÷ù=úPûýü”ÿ~tÛ 9 — Ù  h ý<¬éþ¨ûRøõªó-òèð ðyðÂñmóvõCøüåÿBîŠA n Ä…Bè» ¡ v(…½üœù[÷Žõ¾óò)ñ,ñ½ñ©òSôþö1úJý÷ÿÎ鯄 “ p û º D L –vÀþdügúGøIöKõ•õ­öÛ÷8ùÜúÆüþÔÿ^d˜75Èùc°Ãb¸ÿ¦ýÃû‰úàùùø¾÷‚øÑùûúü±ý%»Ö} ø  leSç TŽÿEý}ú»÷ÐõÏôMôBôõ÷Qù)ûªü›þ^L·¥Ç Ø Ð ™ C Ï ÅÔªÂþ üPù‘ölôóEò©ññ_òêó÷õmøµû«ÿ˜­ : 3 |¹zc,â ‹,—ü÷øÿõ1ô8ó;ò`ñ/ñòŸó‚õÄ÷“úâýú¿fô Y A  Ø ¤ CH‰N¡þ%ünúûø)÷sõÎô¸õe÷ù{úPüžþšñë>Ó›|5«ºè@ÿ†ýÆûUú«ùdù'ù&ùñù˜ûPý—þŸÿTµè^kª ­ ¤  Üå8Nîþ¦ü¾úùùöÂô2óšòäòÔó—õøÞú”ýѺb`  Õ B£  z ¢ ½æÿéûDùoö´óèñkñœñ°ñÞñ´òô$÷óù0ýý[ê « á `€ Û û # eEJJþçú£÷Wõ\ôßóRóÿòœófõ†÷oùfûþM$µm þ Ó ¤ Ý ¸ ¿&âýþ-ýJû°ùšø›÷™öìõ^öö÷ úþûùýoä«xþñf»ÇãÅë}Fþ üAûªù?ø‡÷›÷2øùqúdü—þ]Û‹c + š ú ¾†fÝþ.üúøj÷ºõôGó§ó³ô öì÷¦úþ!ÍGæQ  ø }¿"— ‚ Sæ¿ÿþ5ûø=õò’ðÈïTð^ñcò{óYõð÷§úbýkyÌ é .ùóñ9 … Ò µÖ˜œþÂûÛøöô5óùòôò;ózôö ù@ûƒý5ý=£×6 _ ­   ¶ïe¯™þ@ý!üåúõù{ùTù ùÞø‡ù6ûoý|ÿs€ƒÑðòýV÷\ó…þYü€úPùKø3÷gögö^÷¾øiú‘übÿ8h ‰, p  K ƒ j 6 Ýè)”ÿ¼üÂù]÷îõØô¯ó¡òsòhóõÛöùütÿ®fâq ¡ þ tƒé Ú _ £² ýµùìö‹ôbò¸ðrð¡ñ‡ó?õïö0ùïû±þœ± ¹ :æòS¶ i ü¥ ,OýÔú¶ø¨öÓôÈó¡óôpôKõ÷àùÇü@ÿŸ:Ôu E È Y  ýZ½É(Iþùû¦úàùRùóø ùnù¾ù6ú5ûóüþþúâ౎võ¢ ÓÑØxÿ'þdüiúù™øbøâ÷]÷Ç÷Hù\û…ýîÿͺw ]  t _ ä B % ;f=Lþhûjø›õÇóéòiòËñ€ñgòvôööTùüqÿM² 5 m {{IWC ® ¡šÍßý±ú™÷Ýô£òÈð¿ï ðšñµóÔõ9øû)þ¿ËÔ¶ — [ ‚ ‡ õ + x¹qWþ€ûKùù÷÷Yöóõ@ö÷ë÷ù¨úöüzÿå1x4Ò‰þ¶@&}ô¥áÿbý³úÿøuøpøaø›ø­ù@û¸üÄýóþÃþùpºÍ]  +Œ ±þ¸üïú(ù°÷÷%÷G÷ ÷÷"øúDümþZ¯ï ñ g Ã Û % Ò ^&b(ÿ ü_ùÞöªôó{òyò­òióúôc÷úÒüÈÿ(˜> ! É ‡Á¾œü B ã©ûþ‡üúK÷†ô†òJñð=ðñ"óûõûøÙûØþà€¡© ¦ C ¬ b # D–,›þ£ûÝø ÷Söòõ©õðõ÷~øÂù¹ú(üTþÖ î´§ÿõùª ’NÿñýüHúFù-ùxùØù´ú=ü3þÝÿ}N(MÙ4eK©þL+ý[ú(øŸö_õôšô’õÅöº÷´øBúüÿ¥†æ D 2RP ¯ y TUâÎÿoü‚ù ÷³ôŽò(ñåðSñòGó]õ_ø§û´þÍçS Þ EÓi x F ™F¿ÿÓü¢ú®ø†ö‘ôMó«òlòœòÓó3ö=ù5üÿݘÍ:^ ’ › Ì  î À9Þ yÿ_ýMûåøÃöžõ˜õöÈöä÷ªùÍû…ýÑþ5 ×8[(  ãDª>Cÿ‘ýhü>ûÂùvø øø^ù'ú6û ýUÿD¯Þšˆ‚Æ ¡²ÑîýeûÉøÄö_õ„ôJô õ¬öøAúäûøý^¨É4! Ð f¢/n  aoìbþKûø‹õÍókò ñcð•ð­ñ?ó6õé÷aû)ÿ®êèt , «9NQi  ”}¥Òüíùøxö²ô:óŸòÕò2ó³óóôp÷³úÙý“œ· » 0 r   ÀR¨P[þ¹üîúýø}÷÷ ÷ø}ùûú>ý‹ÿß´“t´á}ñ²–Ùþ2ýlûáùæøHøÕ÷¥÷!øMùÓúoüMþ˜çÊ=Âv À ó 1 @ =µR¤hÿ¡ýŸûöøNöoôóóóðóïõœø$ûaý¦ÿ‘Ë÷'  )@­ Ž ³ 沫÷þüëø)öiôŒó×ò*ò òþò®ôdö>øÓúmþaÑ…Ñ Ê ê  Ü  Ì Ã9tUáü–ù÷uõIôeóó•óšôõÄö§ø‚û§þh±uB ò Ö ¢ N [ }C[·îÿæýüªúxù:ø-÷ñö¦÷ûøŸúªü ÿDÄG(ÞäÖ¨ÃØ¥þ+ý¢ûõù½øcø›øÖø#ùúéûþäÖè¦Ê¬ ƒ ¥ ` œžBm—ýCûnù‚÷^õóuò6òYòýò¨ôƒ÷ÕúÝýŽM=ÙÏ [ é B±‡ À † ‹ÿpüiùcöÄó)òŒñuñ¢ñXòØóÆõ¾÷Ñù†ü¶æv ² a ƒ h U 6 ›T×pßþôû ùçöÃõ8õáôõîõq÷ ù•úwüèþеQÕMT v ÷@WÈuÿwýü¨úÂùbù,ù¹øeøÌøúÝûÊý—‡H~çëòÍ´Fþ1ü£ú+ù½÷Äö°öI÷øùªúóüoÿ©™ƒiÒ« ? Í ê  PÖ98þKûù©÷PöÉôzó óoó2ôPõH÷TúÞý!Øj : ´ Œ 'lû Ž  2”z ÿÊûßøörójñ‘ðÈðñ’ò2ô‰ö,ùˆû­ýM¥"ï ø ’ ¸éÓ ÷  LEº|þ'üÀùx÷Èõðô®ôÅôeõ«öwøWú=ükþïFáéÖÏOþ1p¦$Ç8ÿFýüû=úÛùAúûúvû±û6ütý*ÿæîÂá)Ó/(¯útXþ5üú¡ø§÷³ö¿õlõ*ö‘÷ù¹úýHÙ¥? Ì ï I  × _ 3 -àþ¨û´øröçôÉóÏòHòvò6óMôØõQø®ûUÿ}/ß‚ ‹ … É â Ï ì ç QÏpµýnúÓ÷³õÆóIò®ñ8ò“óbõ‡÷üùüÞþUóq]  Š: • Ð ‹w‰B•ÿýû•ùï÷Oöaõ„õFö(÷øùÄû!þQXufÁNZ5ÀäŬi¤\ÿ ýEûÿùùfø¦øÃùûüÄüÙý€ÿJÅ#ÆlkT„†dÇ©€ÿ¤ýüûEú«ø’÷÷êöäöK÷HøÈù…û’ý:fzÌp ¯ ª í à ù  K™kFþ:ûøõóòþñÈñÌñòó´ôÇöùÓû%ÿ¼ÚN {  sØÊ æ 6 8sÒùýïú2øöJô›òWñ/ñQò;ôcö·øuûUþÛÕ«ÁÞƒ i Ð ¼ é . 䥔‚?þ0ü¬úŠù„ø±÷÷.ø@ùIúgûýüøþø¢0Î6Íg“®³VÃ^5ÿéý%üLúóøOø"øVø3ùÕúåüºþAÖ©lÄÖ΢ É  ÆX½ýMûWùf÷Öõõ=õÃõcöC÷·ø®ú¿üéþ{¦ÑN Ý Ì D û Ð ) š.–ÿšüÌù÷}ôÄò òHòÞòÖó{õ¹÷5úµümÿ‚™@K Ÿ ¨µà £ ý ¡t ÿ›üQúú÷ûõ˜ô±óñòoòËòWôÄövùFü:ÿ)©zëS ™ _ R £ R .¥A- þÍûñùÇø7øÄ÷y÷È÷öøŒúëûý€þcTÝ4;…Ù‚®;»ÿmþvý|üQû'úiùCù‡ù:úû ýåÿÑ_î¥ Ëý! ( …õÝè÷þRü¥ùƒ÷Ýõ|ôló-ó÷ó€õC÷ùAû­ý5¶eL ; „*' Ë “iãÆÿ›üÙùh÷öô¡ò%ñäð—ñ‘òÏóÄõ‹ø²û§þf+þb 1  ± ž Í [ c Â-IýúúøøK÷/ö¸õŒõ@õõÌõ—÷úùcüÐþ€T‡¼NÝl Ø«m Ó•þ¿ü-û¼ù‹øñ÷ô÷Yøùdú1üþ¦ÿöehTÍRîjVhªÍþØüYûú"ú‚ù©ø@øø•ùÌúYünþÝ4«5 » ¬ M @J2ÿýúVø¬öoõPô–óçólõ™÷½ùâûTþ%ÒA † µh„  ½ ñi­þÇûëøvövôºòlñíð€ñ·ò0ôö¥øîûRÿe5 ± x ? n ™ ™ ò u ‚ Z·qÖý­úXø»öŽõâôæôZõèõ„ö÷OùˆûÛý/µ(Òèb"ªRçÿjýVüƒûˆú¨ùnùìùØúëûUý7ÿLòô²mPL:þLºþ©ü®úöøè÷°÷ì÷ø6ø×øú²ûWýBÿ®lÓ›ÿ C $ / [  z‚î“þvübú)øöôyóÁò„ò;óõ«÷cúýäÿÓr‹e Z # 5Iš w ² )1‘ÿýIú¤÷œõ=ôAó“ò¡ò¦óVõ9÷4ùªû´þëÊ= c z „ è 0 g . jjIÞòýÙú<øuöbõÊôßô¸õ÷uøºùEûRýÿ­ˆiD¢# ÂYO‰o‚Ïÿþ<üæúLúú³ùiù„ùAúfûÃünþ‡¹inøT`ÿbÜT=d'ÿý6ûwùì÷÷C÷ øâø±ùêúÂüØþÉ”ŸÚË# û ¢ ï  ¸üéÿ×üGúHø™öýô¯óëò’ò}òåòMô×öúJýYƒ§L  p · àQ¨5 ] ) Y ¿ÿÙüJú½÷[õŒó~òòòÇò5ô0öQø“ú0ý.0Ò# ¼ [ Ù È · ­;RNx’ÿ+ýƒúMø ÷–ööïöó÷—ùZûñütþ0£åäµ$Þ¦¼ªÿÛý@ü®úZùÐø*ùÞùqúäú»û%ýÅþJÞàÇ~/§±LÒfÜêþ§ü{ú ø÷ïõyõÖõÈöü÷lù^ûÊýBe`qxý »  s Ÿ ÷ @ ãI|Fþøú<ø{ömõšôöó°óõó˜ôõ÷ù¬ü÷ÿ,5ñ c - µ ç O æ ÷ Út}.ÿü±ù‘÷oõó\òDòÖò»óõ÷“ù1ü‘þà|?¸œ ø È À É ( XŠ£›¨éþýúúÕø>÷öcöŸöS÷ÑøØúÛü{þýÿÀ˜ú£õ9Påøúj…þÁüZûFú‘ù‚ù6úiû¡üÆý ÿ…üC”#®›œ ?#tZN™þîüãú²øäöÍõ+õÍôêô×õ‰÷‚ù–ûïý½¹hœm ñ Ú  ¹ G ¡ X D´vÿÞûUø’õêóó‚ò_òßòôó:õŽöPøîú+þvn6Ý  G ¯ ¦ E N ‡ ,¼K¬áýJû3ùq÷Èõ[ô²óöóçô:öû÷OúìüSÿ> $Ìã ™ è w ÷ÊÄÚþ"ýÖûÐú®ùrøœ÷÷,øùKúü8þe,°2–bn|Ä–&Ѿ†ÿãýüúlù£ø7ø„øÂù“ûVýàþj%È 7cü¬¯x6÷½þàü+ûVù}÷$ö‹õ}õÅõ‚öü÷ú4üfþÓ¤{é¸  G J  ¼Žºßþçûªøpõþò¼ñwñ±ñUò¦ó–õÄ÷Ûùüàþ  È( J 𠼺.' n àì ^¬ýûÜøT÷'öçôÒóyó!ôyõ÷$ù´ûŸþ)ýií¯M … € ðc#&Wÿ©ýFücûàú^úèùÒùXú6û+üMýâþÓ‘ÚåñTуåÿ™ý¶üüûóú¤ù ø*ø+ø‰øùQûµý*L<” X  p : 1 ¨ôÿ’ÒþTüVúø¨öÞôÞóÚóqô5õ^ö@øÄú_ý¾ÿ%äÎB ò û ~ T M ­ ä þÿTý™ú¶÷ õ1óoòxòïòûóÏõ;ø«úØüÿÑÁ: z Þ í # z Y sA0ÿ•üVúcøéöö¶õqõQõ«õ¶öFø5úˆüUÿ5‡;N U ù€ =Ú–Åþ'ý‚ûúkù`ùù±ùúû‰üôý8ÿ“x•vHÓ¶ÃW¹êåþýÇû8ûßúAúœù\ù–ùú‘ú»ûÒý…  ºUŸ /  Ë ` …íÍ…?ÑýBûáøðö]õóó÷òÇò‚óÌôlö€ø$ûþÑAº}- / Xç=k é g# $ýwúø™õ]óËñOñÀñÍòMôiö ùÄû]þë¡=XÍ â Æ 4 í  æ ‹žèÑþ¾ûËù ø÷ôöN÷®÷ð÷‡ø»ùeû.ýÿM¡Ž¯>Š—(C9&ÛÿbýüúúôùMùIùÓù…úMûƒüJþGð<h•}Þø$—02 Øþƒü]úÞøAø#øø$øxø6ù!ú4ûºüòþ›=± É  ¬ ø  ‹pÿ¯‰þHüëùÎ÷>öõô\óóÌô³öæøRû"þ¸áÔå á N ë í X ù ® ÈèCµþü—ù{÷­õô˜òêñ:òRóÖôÅöSùOüKÿñuýO ë ª î û ¶ Ð ] ÀRQþ•ûkù¿÷‚öùõ<ö÷ò÷ÍøÝùNûý¹þ‡{ð°øÍÊ€XZÿýOüžû-ûÂúŠúíúÒûÉüÈýÿÙ×}”FÁÖo¸Q? ›ÿýEûù ÷öØõ6öÑö²÷ùÓú‰ü0þ–H f ç > ê é | Ŝѻêý‚ûUùA÷võ$ô;ó–òbòóôÎötùxü´ÿÏ]P Ô T ( P  ] Û P<I±ÿ1ý¦ú]ø®ö–õ³ôüóÔó‡ôñõ«÷£ùïû™þKĪ ‚ › 4 tùSÑVo þ“û‘ù!ø÷\ööž÷9ù»úýûWý ÿÕa·yeš6­sã9 ÿþfüûúú·ù¢ù½ù;ú8ûfü„ý°þCMNƬLœTRöÌÒ–ÒÿÏýÝûúOøÇöéõíõ«öÍ÷=ùûý,ÿ:^œº` “ Œ , - ] ú D2v&Øüúã÷ýõXôEóêòþò"ó‰ó©ô½ö…ùœüÙÿ+]ýÞ * " ¿ Õ c y  >./Wý”ú ø öÊôô‘ó{óôŒõZ÷.ùû]ýýÿƒ¹«}ô ¥ a q @ÝGœµ>ÿˆý»û4ú ùVø1øÖø)úÊû[ýÀþ3¨ßºwDèm…‘uú6ÿ…ýüôú×ùöø¹ø,ùúûKüºýUÿåh Ý‘Õ ¹ M 2yÅ &ÿýûKù¤÷ öÓôfôæôûõa÷!ùUûéý|Õ]h Ü « ü  – –  ÉÿÛþ®ûìø¿öõôóØó]ô õö‰÷ºùUü)ÿ+K$E ” F £ ß Ÿ  Q#¥ÿóü‘únø{öþô0ôôeô8õ©ö­øõú)ý@ÿWdJñpÁ ¤ ¾ ø ŸåêÆ¼ÿãý¹ühû*ú=ù±ø|øªøwùöúÙü¦þ9°9íGv~K7Ü€ÿþ“üaûfúùJùù˜úîûqý ÿÂcµÝt§[ m ù\‘FÿGý^ûpù§÷Eö>õ}ô ôkô‚õ:÷Sù¥ûGþ#ðŒî ¥ Ž ¹ e ¨ k ° —L»Áÿjü.ù‰ö‹ôóJò@òûò.ôwõÞö¹ø+ûýýÞ·‚ ( ’ €  ü  ­Ÿ]äqþAüZú£ø.÷3öÍõóõ{ö}÷0ùwûÕýßÿž7·å¥5Ê7ÿ[z‰ƒÿœý ü6û©úFúþùîù1ú¿ú›ûãüþY‹êÐ÷»Sš`º™ÿWþøüwû$ú9ù’øøøŸøú ü7þ:+ïgƒmR … c ¶goù_ôýÈû¾ùê÷”öÄõMõõ;õö½÷Ãù×ûþ¨~5z_ ÿ / ˆ ñ » 0 qc‚ïþ9ü^ù±ö€ôùò+ò%òçòTôöå÷ïùQüÿ¹QÕK i ¯ Ö K X Æ ¢Dø¢,þÄûÄùRøA÷böÄõ«õ!ö÷yødú·ü ÿT'°F‡´èãY;ÌE‰¡þãü¼û9ûûøú ûû|üŒý›þÄÿ*¨ïÐwý= ^Rì6?ÿ\ýÍûú„ùµø=ø øø$øµøú%üþÿtÑÕ- × ; – à n ‚ %f2kkþ˜û/ù÷_õô{ó{óôóèôhöiø§úùükÿ¹>q ^ î Ì ¨ £  : #¼7Úÿ§ýSûÖø|ö¹ôÀómó¶ó²ôcötø›ú¹üêþJ­ÝÈy » T 9 “ ’ (IΚÿlýQû‹ù\øÂ÷q÷A÷`÷ÿ÷ùFúÎûÉý-˜“øìrg¿(Ì:˜ÿôý[üùúú½ùÔù!úÄúÌû#ýšþ ƒT/£ïyˆUçíýæûVúRùªøGø@ø¤øGùøùîúhüþôl¿×‹ à µ K • täøÕýûšø~ö¸ôUóŒòšò\ó¢ô`ö®øhû6þÇ|ä ä R ]Ä:¤ \ ÉB|ÿýüÇú¹ø³ößô—óûòó°óõ ÷`ùÃûþ|è#øzº “ Ì J ` Dæâ¤—þÃü ûªùèøÑøùuùíùžú¡ûØü4þØÿÁª-#…gÍÇœŠgÿÐý­ü¨û®úïù½ù)úèúÆûØüVþ6Â4Žœë_ÁôÏôÿàý¦û„ùÛ÷ÐöUöOöÊöµ÷ÔøúûýÜÿ_Âú « ˆ ’  f f ÛÅ„Gùþ|ü÷ùÉ÷$öæôíógóó¦ôWö„øûýýâkp s ƒ Q Î ¹ · Í X ÄËþüÂù"øÊö|õrôôQôõAöÚ÷úœü*ÿ}¯ÙÑK * Œ ‡ ö™h~dAþOüŒúùøÎ÷JøùâùÆúêû6ýhþÿð¬n¸GMÿ?üpáÿÞþÍý»üëûcûûöú1ûÕûÄüßý!ÿ°w) àÛQ èºmÏøÿ.þtü¢ú–ø­övõõBõ×õãöyøsú‚ü‹þÂCâCB Ó â C ß ì ˜ á©hÅþ(üˆù-÷gõ9ôYó²òò7ó°ô¨öùÖûÿZ ¤  ² ë æ Œ ƒ ­5t§ßýJû:ùÀ÷°öïõ“õÆõ‚ö÷Úø|úŽüÃþÌŸmFΩ٥ˆÉ6ÚoÿÊý$üÄú²ùèøøÉøÌù@ûÀü1þ˜ÿçöò­°L‚7mzÃþ`ýüâúùù–ù£ùâùBúùúü†ýØþ)¹’móÈþm%}È^•þÙü?û™ùã÷oö¡õŒõöûöuøvú¹üâþý7¢æÀ   ƒ R H É ø †àÄýŠû½ùÚ x!2 s aÐY‚¥™ÞÖ30!F:3Y ƒ¼ `Cü?!#4zêùÖçtÞôöÝû%™[ôïDN Ìã&Î!ïP|ÿåô{¸…ÖÆá¿1üP H'¢#ñ(û6 néäí© tö4õ‰ï{îeòmìjõ© s” UŠþaøáý–ó ØNÄþöü2 þáü]öRððìïûõ"ÿ^& Û úmö3ú]ýu>ÁÚ{ †Öÿ.ÿîþ 8üûiöýðé!çïpöSúýVûñø÷õòp÷[åÜV; CÎ  :öêíëŠëïò™ý%þôÞî®ðõªù  [6 ŠãVà$.• }®ø~öîö-ùo ƒ5úñ5î ñc÷ïÌ l ‡Kú4õ=õjøÂŒXÅ ÜÿDú=úÕÿ= x ­ûó–ïðñyü™ ¨Åüˆô£óWöÓý® á=ÇUåùqù0ú¢Z ¶KÒFöðÇíµî~ù`â +]üzó\ôßöþª ì§ßû|ümÿ< ¥ €ÿ5ï†èÔçíÄ÷Kþ‰ÿúùsíçèKíHüô } PZþÞýh×Ä” šû÷ÆñÂíûò8ý«"øoëÍå4âñä%óm¼ ] qþÁõ‡óó9ûh ‘굔úÏõõJý[¼ ”þXñ©ëŸèËì*ø° ·*ù÷ñððóÑû[ºmã ÚVù(ö9ùÑš ûx%]øÒðPîžô|ÿ¤6 Ÿÿ¡ö¢ñÉòëýR >Œ÷ »üÒ÷+üáµ;{)úòó5ñ¿÷ãm 5àö"ó‘ñÙóÿ WQ a¡¨1}U¯9iþå÷3ôx÷.þÑÓû+ðeëlé¾íÐø:w íbþýuÿ¯ÒÎKˆ©ëÿ'ú$ûoA]  €÷díèçúäÖëÝöþeÔÿæ÷ŠõËô×÷~§ t‚ Ðâ¹ýÿÅ, æy£ûæõæðí«òü„þÙôòhðô†ýE}‘:Ìú£÷«÷¯ý“Î 6­Aû€öyôË÷’þ5 Æ @ÿ÷íóõãû꾀 o èûøšûaB óבHý÷§òÁöRþqÃŒø÷ñSíIíVõU @ Ô ÿÖütüYG |¾‡< ~Øý½ü]t‡ ‘ Dþzïyè@çPêÄðØø™e¦ù¹ò¶òß÷Þ¤ ð¢¯G ã–~— Ž!"V÷„îëiî‹õ„ü Aàöìîì2ð@ûúÔVðRoÿÎüZ uŸü ÆøjóÃñO÷W'´ /ÿ÷óò3õgý¢›þ¾þ\ü$ü÷ÆÅ„kXù6öæö‚ü5¸ J’yú~óòéø… ±Î:ûAõ"÷î–ÍwK“ùÐôwù™O e çøEðÉîêõ7þóý IiûSôðöFì »ú¥ï¶üÀÿ Äy¥—õ»ë.èYë;ñüÃûÏïÚé·é ñäúñ&…i ]5ÿŠf ÉÉ öGïAñõÂ÷àýÿk÷(îççSï§õHþd n ¥àþLù¨û. êÛ18øôònøþíØgŠøñï€ì”îŸõTþÂú &uþù½õ]ùKp50 Uþbö=ó?ôûö„ÿñóÏû4õ“ñÌóíøŽýsœ ”þ†ù=ú3øÐÚ=Ñþ®ø~øüÏÿ5( ~ ½öTïòÄöýùa¢ëiùñiïí÷Ú öÞB_ýµf >šþ@ "²ú†öåùwü(ÿÒøü!ódí¬éþëÞò¾øH  àåþPˆ Š\dËb§ÿÿþõË×åþ1ôÀê¥çÓîÐõ%ù£ÿ<GÿZùFõ¤ù’Ù N¢ ï þ§“P!Õ³úÊñÄî­ô4ùöü·/ÐýGú®öéùÒ¾ë " × Läþûúxý2lµ²Qýö?ïžï-öœû‚}U¿üõôSû:×Ë© Kúáúðp‘ ¾Óý˜ó!í(ò(ù¦úü^þ‘ûeõ+îqíKöÙþô7"ô’úºüÈë †Òçó ŸløYùyþ^ýªlûJó½éìå‹ëæòVú'ÿÈüøNó?ñ:÷¾¼ ¬ò´ î´õæ _ Ä h¾õ¸ìíeòsô·øSýñûºöÅïîSöRþ'Ú ø|'tþ,ýÊïèõ \Ù÷xíâîödûñÿÖrÿwûõò&ñ\úmš jB Œ ¥Ïûöübú ûùçý9öÿðôKøýõ%ÿÞûKøÜô÷?ý˜hX å©iþG™ž5 8 6q’ùãöúòûÚþ·òñü†ôBîòø<ü‰å}zùø´øG ¸ ú x LT‘& × h®#ý3öXð†ñRõQø<øõáôÛô~ñWòÁøêR î } @. å¹B ]üøXø`ù5ûqûÄ÷ØóJïæìÞñ´øGýMbMºeþLÿ?œ ƒ õ — `«ÿuø~øàýÿ7þcûXùùmõ7óSù;¯Ö3 Èÿø÷t µÔjýtöxõù…üŒþÎúîöö­òäñ4÷Qý£Ü2þYþÉ”v R ‹ÚLÿ*ýL…ȆþcùÒôFðÙòÔ÷Þù‹üü0ùø-ôóÕú£ T °*]î1M jï å EÌÿâöÂöýúnÿ¨Ñú ö5ô î2ëüðæù£é€zÿ°ÿþ=sŠ»àØ ñ¬- cÝ““ý÷8ó‰ï‰ð÷óFøùþŽkÿ`þÓüÃüýÿ •ÉT à”þí¹mÚÿ8ü¸õ—ï¿ñŸøgÿ$¤ôÌsüªú¤W TTà f {°þ­û`þbûiÿú–øÔô²ðòO÷†þ“þgÿ®ýFý3–'€‚ ý Cè­˜Ž) ŠLûkôÌð•ò¸õÏû¶ÿfü”øÈô³ðóùÿ÷GZ!âÿu< Ÿ{ ‘ VBþŽü ÿ*¹ã8û"ù¾óíjí‰ñ/÷zû]úŠúÝûêøR÷ ú¹½ z „ x bœÊ¦s ÷W¦þeø%óæñÅóÏúÿ·ûù©÷žöøøüÛ } ÷"ôœñpüJöõßõL÷~ûHýIý þíüiû»ý´y É n 𠳆ß-Î ®Îcü´õ²òó¾÷ïü³ûGùIù/øÌ÷Æù.ÿÚñ   ”  ŽÎf ^} lª%ý…ú†øÂúÞýÒû1ù-ø÷Åö•ö˜øÈþÛ™}ýe Ñ ü W XŸ‰Fè)°[¢ûÿõ£ô9ö¾ù{ýÏü–ú<ùÆõ“ôÛ÷æü(bˆ M¹?ƒ òZé×  þ1ûºù£üáÿ6üN÷rõÇólóGóöèÿ÷u¤%xiõYC¿Q æ€ý?ú­ùSù…ýÊàýŠùGôrñÅôèø¾þf tÛÞ»Iæ’ ?Ó -þaú³ö¾õþö”úžùEöõäñÁï›ð0ó*ü-uŠ®MÃÐ _Á2T « ýäùbýè×üjöðØîƒîfðÇù"uýúPùüü/ÿ‡å ð: ó"€É£îö ­›Vû û"ûFü©ù$ý¨ö'òjò(ô"úÒöà`®ÿpýõýk gø ˜ýûþ+&ùýBùQöŽôöôüüßý÷ÿ£ÿŸ&7]  \—ú´ýÁþ¹zžþéøôKô ô‡ó¹ù ð›Ù¤Ù¶GP3ã”ÿyýiÿÿ<üüõoïjîLï.óÈúRþ°ÿF•ÿdÿüF ¸j Æ ä‡äqЊ„ýo÷ãó‚ò‘ïžò´ù´ûmû úø—ù ú‚úSD ? è "_Az § ð J+ÿàüáûåùtý,éËýùsôƒõö0÷%üøþµÿCþÀùpùYüYþº‡Ï ÿ=@&"¸<;*þxùÒ÷öXùèþT×ÿuýþù.ùøNú“ “ õ !·‰uþ½#¯mý³õíó}óJò—öøürÿ_ý™ø„÷÷û$Ÿs Âz¥Û‰1tUµ 8¸}üõò‹ïðîïòkõøÃø`õ]óöªú¯­ ¬%ò ÞÅñÑ †Jy »Eø»ôöòXõöû¢þ­üvøäòñ«òÚõtýo¹„ûÿUe7 K _ Ë )§þÿ&ý÷ý|ì½ÿ#ù“÷øú÷ºû µL<ý¢÷øø§û 3] † €ý…þ¿ÿQ3 ° & Ç$ýú]ù ûIÿÐQPÿØøõ’õþö‡ý·òÈ“†}ù×nà ý ²·düjù'õ¯õ*úrý1ÿÎûÍököŒõÞõ­ü/Ä T ƒ¥õ• ž=á ™ÿËøšõïò…ó*õC÷ä÷òPì³ì‡ï!õ+üôÛ/ ÜGfå È Y)œ°‚û°ùaú`úû û¸ö’òøïîò‡÷=üjl˜ÿoþTý—ýã„I M Ÿ9Ëeþ¦þzïÆáý#úîø¼øYûãþVšÿ.ú½ùÝù]úýØÿzšçü×ý­þê˜ »|ýØüPýîþíÿN9éÿèù@÷ö«ùEþ-rI'†ÿ?þHÿ+=( ´ ¡bšý"úVú7ýÌýÔýßû&öðòòäñµö‡ü? ¸§Ã{ ™ ó[ Å *ÿùüLü[üÖýÝùóñîVí[íœð!ôuú~Âþúÿð` è8Æ Úf¾w!z#;üÜó"ï?ígð*õ¯ö«ùûû„ùZø#ùqûÓŸ ƒ } çÉfJqåù…ŠýÁú¦÷»ø0ûýÔPÕû!úHùùÔü6‘¨DýDûÐúJý],Œ"òrü›úóû ÿ.{Þàzý`ú(úßü»ÿUäÊqIýzûýsŽ®Zw"Aþœûý§bƒþ$ùµôÏñôxø>û¨þêÿ‘ýÔû=ûký~´ F„Î ¸ä불ëûÎôÄðîðî°ð óªö¯õòiòxõÃúñ¼ °p   2 ´  ² á ° H²üSö‹óAôXóyô±ø«ø`õ’ò!ò.÷¤ýëø à ͼ Ÿ÷ h g ΄ïû’öÃöÑú¦üÿ<7ýéúQù¿øü—ÚÚøÿšÿTyV€ÿcüÁùMûÒüæýíË ²ýû\û‘þYò=}gQüŸùÐü+œ=ïÞvÏü^ü ý;è°üü÷Ïø¸û¾ûÒüæý§üÑúÄ÷÷ªûªÿÎ>¤ ´ ´ ý µ m ¼ n îþ3ø–õÁô’ôö©ödôÎñ§î­îºòy÷ýþÿÍ 4  Ø û 89¸SœïY„þîýzû¢øø(÷fóDï%íÁð’õ÷Yû¶ŽY܈³w x ¦ ) ” jÔFý,þäýœýÄþ—þý¢ùSöø©ü ÿoe¯¦Ã’ÿùûNšF—ýÓùÇùLüyýUÿ/¾ýPûMùIù¾üÿÁ2¬aƒ•]èd}6°ëü`ÿ;t²Ýš,»-û=ù}ûŒûüOþfþ)ýùPôlöûñü‰ÇÎ e.â B!  †×LM<ýêø-öƒñöíEðùò§õÆùtûðü;ÿoÿMí¬ å!n¶À $õŸÙòÙlý›÷5ðŸí%ð¶ñ!õ5úYüÉüMûìùªþK4 3 ®$/ ¨ðXã›ÀÿGú¡ó,óO÷ùù9üÝýÿ§ÑþeüKÿ”Ž b G ðÆ´þcþÿ{ÒuÿWþœúÆõ†õ½÷6û^欦Dþ¤üŽÿZO I Ãy¥ÿ¿þˆú:YùôHûz÷ù´úòû^þÿ£þ\üV÷öNùøúªürÿ{Ôîþûÿ̤ ¡ –C€W¬`­}<û—òîîÓïJñô[õ¤õãöJõÙó›÷NýÜÅ a ®SW ? Ø  @ Ù ¼ŒÄþ$ø»õ.ô™óBõ[õsõ½õÈóôœøCü`s­ @ ~ ¥áhI·Önßûömõîô¶õ×÷tùJü0ü£ø‚ùðýmÆß¥ E ¢XdDM†ÌN]þ¦øOõ õìõqø.ù4ùÊûVüBûŸüœþ™0˜€B‘»i9O[¶"ýû ûÞûyþoÿƒÿñþû$øÞørúÀüžþ ÿ¬ÿâýJú1úýÁ¢n> jÀ§êýÿ%–ëþTú ù2øW÷Bõ«óÐô=ôÇñòÓô¥ùþô€õ6 …è ) ËP;ï Æ Æ2þûú¸úJùžöæô®ñòî†ï?òÒ÷Fý‘ÿök«GJÝ ø / Õ ÞBÿ°ýý„üQü"ú×ø&øGõ•ôS÷àúhÿ‡¹ÎÍwxÉ 9(‘ÿ'ùºö²öÛøÃùñ÷ï÷Y÷ôjóþõÂûß:jàÉtÅ ã k 0+¡ßþ¿ý«ý8„OþaýBû»ø×÷N÷‚ùŸüªü?ýœýãú„ùßùàúµþ¹‡}‹¦a‚ ž ® [ ×äþzþ´|þÎü"ù*ó¿ï,ï-ò°÷Þùûþ®þÕý`ÿ 0 Ì Ö ü G° …˜X‘ãý-ûø\ôÉñYðÞò`÷Ýøú5ýêý·þ#­¥„ Z`º úDµ™¹rþŠû÷Šó_ò½ò‡ö–úküØþKëÿtP×! c W Î  ê*„pªÿ üÎù…øqõôòò«óUøû¼û(ÿHãs+FÕ k ~ ×  Ì0´×b†þ»üëùø öÍöLûý"üüâúFúûúDû·þ'Uôimä%äç2 ñ ‰™œ¤ÔÙ­$úÿ[üyùóöûôBö¤ölõ¸öí÷ù÷Õøúþ-ÒÁf ª ö { ›ˆ  U  ‹ûþö§õ±ø,ù‚÷˜÷ˆ÷º÷_øsù¨þu?E]ñÅ wZ b þ!ûù‹õõ:÷\÷Ç÷àøKùgû±ý÷ÿ:N : B²Ø > ‰Âš°÷Žûþöxó-ñóUõ>õö§ö­öQøÓúƒÿS Ð @ Ò D @ Ea ‘ Û=ÿCýYúfø¶ú%ü¥úžù6ù¥ù\ú”ùûeÿ›¸‰ÿ\ÏÁÿH?ù#†S¯E¾´Æòõý5ütú—û«ýýƒûùhöÊõïõï÷äü%«?G0ÑÏ j ß > ¹ õÁ¼ÑþÿcþûŠøAöÉô$ôëòõßúºþ>þPˆÝ©® … (™“Nü­ùŒû~üû¥øõèô³õö8ú_HÜ:{ € ã ¶ x… œ *¾ÿýùùö÷Ñõíôˆó]ñ{ñò…óøþˆÝ†« Õ ƒ – c^Ù. , ©uøü¿üòý÷üûúØ÷ƒõòô}ó`ôBù ýsþþËü&þmÿÛþMeäÓç âÚT ÿž ÿŽÿúÿDþ\û¶ú…ù‚÷^ø,ú½û{ýâü2üfýâýäÿ·W Û “Üà¡ayþ¹ú¬øöQõô÷öù(û1üQüZþÑFO g a üó+õ¾ÈÀþ²ûQ÷õ¤ô°òšòÕõBù‘ü>þÔþ ì™ŒÓ ­ª} ³IEƒÿ?þÌü›ù1ô\ñÁððÙñîô÷–úIû°ûµÿ«¶ pJ Ð òˆ Mâmÿü‰øA÷3õ:ó¥ôeöÿ÷­ùkù‰úý÷üÞý•V) +v• Ò³è„ûœgÛ1tP0û·ùqúàù‡ú¨ûü‡üPú¨÷ÙøÝú{üþþ5b¢—G(|£o;‹WÿþýùûØûqûû\ûºù‹øeùëùü!‚kåòw;~–ºá_ ÿú:ø:ö*õ™öß÷Úø`ø6ö;÷ûtþŸT8 Ç × ( < ð / > S ;ŸäüË÷lõ¡òÆðlðöð óƒó;ò¾óøö úkþ#*¥ E 5 O æ è V œ ë 5Êýüú©ø’ø¦ø0ø[ø[öâó¸ô¨ö’ùþ"Ï ¢Í2qä ’/Ô>üþaÿÞÿ2,ªÿ±ýþYýºü6ýAþk,ùü×ûòûÈûŒü€ýçÿ¸mÿQÿ9?©ñE³…ÆÿúþˆÿsÿÐþÿ²üüø®÷­÷ùGûüäþZ8㙂SupOØ(7òþSüZû8úëùúR÷õ õ¤õá÷^ûfÿ¼k 3  $ <ÀG ëÿúûñøÚö°ô|ô¨óòïèíÈîBñõ'ø7üÚt0Ò FrA¿¤” ϹÿÀü÷ùÀùÿøöóò8ò:ô öeùþýÛÿ3ŸÊ‹™Í}ÎÁ0ÿÙ–íŠlþ?ýßü·ýdÿwCŒ–ÿ…ý*ýSýhþxþ³þ|›ÿÔüGüÂüÕýKÿÿ?èbÝ®ØQ‡Üÿxýêûóû.ýþüæý‰ÿzþØþ³±ìù yšk.”´Öþ•ýgúqöUôYó¹ô+÷-øLú¦üýÖþ.g• q ½ £QÓ G k „™¿—þDü©÷-óhðèîÝïñWò¤öþùÃú“üÿä äÄ³Ì € ( Bý›Îÿ£úìõªòbòôôâõ<öNøÚø…ø‰ù{ûñÿ±Qàn u ¨²ÌáB¸ J)þ üÔû)ýMýmþ7¦ÿ°þóýýqþ‘8hûÿþ­ü¨üŽþ¢ÿØ Ÿÿ•ý§ýJתy>icþ6þS“½ÿ·pUþ³üüúý“ÞÆõŠÿ¢.$eöÜZþ»ûuø ÷Û÷o÷š÷eùøù,ú‹úûhþÛ8 kÓÿ > N  ª D –9ªþ”ùÔôîòQòðFðàð9ð²ðƒòÞõŠûøÿ•è X [ Ü [”ß# º #¢Wþù$øžö|ôlõ¿ö^öÇõÔô,öpú›ý­ëgÞ§èç;v#MÝ%“üáú™üFýý»ýOýÉüü§û—ý$b< •!øÝ_kž\ÿùþ‚ýjýþþÖþ­Þ½üÿ¾þ£ÿWÎÿ¿SDæþìüÖüóþ­ÿs7ž> ÷ÿW$jÓ¥ñàVþõûìü½ü¹údùø]÷ööTöløôû­ýKÿU©+ n > „ | ^ ½sËý·û~øõ‘óSñðï‚îùð«ôø{üd„[ÛY €ÂÀݼ # Șö)ý¥ù¹öÔó2òêðUñ²ô÷ø¼ùžû)þÆc ; ¼ 0 }1n5E¡Qþéüüòû)üÀúœúýÛþY.ß¹ØvwÏþRüÀúpü³ýÎý‰ýÛûîúùúÊúãü0Ã~÷¶£0TœvÒ„sü)UNš®T2eS:[ÿáÿdÿdýNû²ù;ø õ0ô´ö§øúVûÿûøýIÿ“ÿTÀC vg! @ ¢ )C°h‰éúµöœó5ð—ï0ñ…òäóômôx÷qúý ‚ ð ç ô 3 Õ _ ]žÂýhúŽöÓò0òÝòÛó­õŸöË÷œùúüCŒ¦ {  ¶#ÖÏ.2|üút÷HöhøÕúXüªü¨û<ü…ý²ýïZ»FËG~Éÿûÿuÿ|ý;üàûüùæø%ú+üãþCÏÿXL3ÿ0RlT—pBþþ‰[æg¨Úÿ4ýßýüÿ6ªüÿlýûû°ùøHùmúæúçú¾ù4úãû*üäýª¤X * æ í G à V à Ë,UÿNúÚõôFó¬óPó„ñ³ñ^òòcôùŠþ´ Æ á E(ÙN MÌtþêûlúÑøæ÷€õëò/óÎóåôoøü|ÿmsâÎ¸Ö  :úâÀþ´úõøqøÆøÄùHùZù¢úFú¹úÓýrF‚[¸§(ôÛµÚÿ{ý¤ú€øØø úÜûü‰ùø‡ùÚù“û—þ]g¿g¸J9§¶NÉõ2ì½ÿÞþ×ýüæûPüý þ£ü¢úØù øŸøû6þÑÑg¬+(  ê  ±”{\+ÿ?þ[ý(ûqöóòñ§ñéó÷¾úuüýãÿP4¦ ¾ Xu¥ É [Ý ëý/ù‰õóòÆðïðÌònö)û4ý¶ýÿ5QÅ Ç :{ †àÕ¹bÏbQýÝø¬öšõáõwø—ûcÿG2X¤†Sh" ü ä IÊænþ~ü8ûTûüóù”÷ööö öÃ÷·úbÿW+‹Ÿ   Û cõ–yôŸ´ƒ4¤þwüôúFûü9ý9ÿ¼þöûûùzøAøsùkúµüÿÒþ¸þ§ÿPT®Úh V – ç n p˜æóòcþ;úÜõóSòUó¯öÕøø±÷Ý÷¸øßû¡° ª k v G ™ ª F ~ _gÛýËù÷öƒõ»õÊ÷^øW÷Â÷<ùüíÿà®Î § ò A °™bÈ¿Î8yü¸ø£õ›ô[ôö¼ùšû?üéü ýêþ(OÂ Ö  D 2a¾Lƒü¾øñõõÍõÝöwùÔûxûû§ûÚü¯ÿ\æµN  û‹[IG¹ç¿þ×üü™ûHûIýÇþ~ý¾ûúqùuú÷ú—üéÿ†êþ…ýTüxýP— â6Ât²L : ’½sýqû§úáø+øÒ÷lõ óóOó¼õø>û—ÿÙ¡ü¶û  ¸ XŸ à ¨Iœþrü“úBû…ûù{öLôÐó'öÛø«ü$,OÃhýGT ­ Ò y¸ÙýŒú:úËùåøEùløiöLõõŽ÷BüÏÿš²g Þ Ï ˆ Æ   , ? ƒ0$ýqùç÷:öÙõýö•övõtô¯ó§õù?üú ï@OP m ý Í Û4ÿXþÿÿWÞþ¹ûôøÆ÷ŽùDûYü´þÀÿkþ´ü(ûšû¿ýÌþA¶˜!Üõ¥£¸• º|ÊAbðÿ{ÿšþgû~÷uó«ò­ôõö|ú·ý¸þÇþ þ„þä} 5 ~  ´'}9¡Ìüåøsõ#óîóbõšö`ùÆûòüÏýKþ 9Ûú Å ˜ b36­dþñý©ý§ûÌøöô·òôöù«ý9K¤¤FÓ c ʘ ¬ £ÖÿÍþ,ý2üÜù©ö›óYðåïˆòõ^øühþO‘9S  µ Ê ¡  ¶ÍÊòÔïþãûøáöJ÷Í÷úlüéüü›ùWøú6üïþ?µq€Ôþ9ÿ»¥0[Žë¡­¯Ñû )ÿ ûúø-ùêøÜøPùùú—ù·ø†ú7ýcÿ…91åƒ(u¹a[66ûjø©÷–÷,ù®ú ûûêù¾ù¶ü‘rZ Ö 1 ¢‹òí=î8ýÆø$õÂô"õõö"÷øìù,ú]üÊN¨æ ä eª ß ´  6šûÎýŒøßósò9òïò¹ôBöû÷¥ø&ø4úlþ¨Ks ‰ ê ô€o ¥ N Éf¸ÿû‘ø±øùèùeúíùçùù"øùvûHýÀÿä›l1pÕ¦ “ƒjÙ^í…Ÿÿ4ü²ûüéü°ýöüðûœùæõ:õÂ÷ÐúCþ«Ï¿ìñé ó³ 7 þR±÷ÿWÿçþyý,û+úÇøðö÷ºùLüœÿÇQËM¶ÜA V Ÿá|ýÃùø÷N÷%øpø ø²÷¬õiô¶ö¦úÿ¶ãN Z 5 w ¯ wjZh ËDyücùÀ÷Ëöéõßóªò$òhðQð.óýöªûàÿëX4Ëf á Š Ž ¬ 8 3ÿ8ýý8ý2üšû.ú÷ÑõÄö ùÐüVÿ9ì¦ÿÆýIþ)á{ÖPbÿ±ÿÏóÇÝUóÿÿ¹ÿ/Ãccýû®úÌúîû4ýþ¨ÿ¹þ†þ¨ÿéö§õßU±%ÔCþ–ùwöö¸÷ûaýƒþþÿ˜ÿ»œ˜ ñ ·  Yì;»Lþ1ûNù3÷žôåónôVö¨ùRü,ÿjê -V L j‡ ò¾.˜þSýû•ø½ö1ó•ï|îmï©ò‹ö?ù…ürÿ%Kn Ç —ˆaU  ×3Œxó§ýXû'ø¹õýôfõO÷²øùÁú@ü‹ü ý þ¸ÉfL0,‰Ã¿µéœÿpÿ{ú|°Eˆý„ü¤üIþîÿvÿ©þeý û=ú ûÜüñÿ–b!2²¥$W-Ì þêüfü8ýEýNüÕümý4ý­ý³þe>î°¯Ãàdv}JXž>ý¸øõÝò÷òvõ÷Ÿ÷œøùú¬ü<Y ´ 4? ¸ C r ? * ±lÁû÷ô1òíñÎò¼ò:ó²ô“õ5÷Èù2ý•Fû ¼ ë Ý © J ÷ Î ×Ñÿ!û”÷«õ»ödøJø;øø~÷í÷EùüÉÑ^oV38Ay›vjæÿ)þ5ý^ý‰ÿ¯f´ÿØþoþÍý”þ‰òµT¤þ ýüû]ý–ÿ-±uÿ|þ„þ~ž¼ƒè2ÿ{þÒO5hþ£û#úÞùeû>ÿÉaÔfõM~¥,æýJûù,ùØø(÷VöèõúõõöÏ÷ úÓÿèà‘ â £ Î Ž 5 ,Þú / ä»þùPöÌõõóòÇï•î'ïÌð5õåúÐþ Ž÷< L 4Uÿø Ò T=èÿþWý"ûù‘÷ö‰õKõ˜õ ø÷ûþq¹5}Ë{­«/ÿ´üøü†þüþ ÿ þêü¾üUü.ý¡?¶·(`ÿPB}—úÿ-þý&ýýÜþX¸Ý.àÿ9•ÿ ÿª“Iáÿ‹þ¼ýéüãûàü“þsÿq×Ï&2,*áƒqP‹þšþŠÿ‚þ€üžù„öÛô¹ó7ôª÷õú×ü\þ{ÿ˜q£Ý u Ïaw Б€Æÿùû.ø ô4ñ5ðïfï%òõø¾ú¡üRÿ%˜Žä ÝQ=Ë r 1¦ì„Òý/ùˆõjóòvópö@ønùÜùú§û•ý3kwAœ2}-Kmô›}ÿöü ü`û³úwüþþ’¡r3€«BÑ|”*Šÿëý üˆüXþŒÿüÿEþòû>û·úUûfþWö·JŠþ þ»ý(ÿ©5£)¥ÿÄÿŽúNÑ–.äWÆ- ôýÔú©ø¸öÖô"õöã÷%ùVùÒù[û”üJÿAýÌ ‹¾ í ¯ ˆ 3 æ b HŽÑü~øôÌñèñýòôôüò—óö©øÖüýaÑ Ï x d ó   Í 3 ŽOþgûkø{ö+öYö.÷÷8÷é÷ÐøßùÝü²n¦iÚ]ÏÁ]¾Œ˜Œý?û'ù=ùúú‡üoý¡ü}ûüæüvþDöàt5H)ÚÝŠÕÿlýÉügü‡ûîûùüFþvÿÿËþnÿ=ÿ:ÿ)ŤДÿZæk¨áF›€Ö#B)ý9û«ù¯ùBúeúnúöø&÷Z÷Høú‹ý±Šå£õM ¨ Ò È n O ¦ ñDcÖü!ú§÷¡õ ôñõïRð™ðöñ õùãý·l³)¤ ­ Ó ~/Å « b#k¨þÚü û­ùöôôõ’÷;ú„ü(ÿ8UB0²vqµüÿ/þüüü6ûJû»úoùsùßù†ú–üþþÚÛ¸¯.Ü¡;¹4%ÑêÿÛý'üÑû ü²ü$ý^ûòø€øù¼úuýžÿ•Dn/ÿ©ÿfßY;"P:¤îuFƒ{Îþ)1ÿÆþKþgýtý™üõù-øN÷÷.øÏùüñþèÿÔÿ þ™ì ƒ ¬ Ç@#e•+`ÿAû)öÿòBñ,ñØòôÈöÀø6ù…ú³ýn´n  WW{ \ V þ›E'ÎüYø”õ›ó+óñóNõNøÕú4û¬ûäüæþ"(*ú Ñ uäæÝ4¹ÿ üÚø÷ßöëø<ûý ÿ”ÿÿ¦ÿ0Ñí§± Œ QX¸'aÿ'þ¾ýXüÍùIøL÷÷ø+ùûÉýÑþúþŸÿD™,†®È|׆Í9ÐÆ[Wÿ¥ýÙýòþ.ÿŸÿAÿ]üQù™÷=÷vødù×ùüú/ûŒúñúOüÿql›ÿ¾  | q Õ G e'DÉSþçú,ø¹öIõ¨ô*õìôzô®ôŠõYø@ü¨ W P w ‘ Ø a È çSaþPû¸ùùÑ÷d÷M÷8öÛõ÷Áù¯ýÆö´AW°ÁH «¸[™;þ@û¾øÏ÷O÷«ö¥÷ù›ù4úÛú˜üËÿe (q ; YëÇðôOçÿüºù*øÈømùªùMúáùçøýø,ú)ý±Àuz½Ã…XÙÓÿ–ÿöÿ6ÿ¢þæþ3þýêûû–ûÝûfû÷ûUü†û¾úúÉúyý«ÿ¸f‚NCi2 N ¸ û tÖƒþEþfýSûGùnöóòñCñójö‹ø¤úý¿þãQÞ} " Ñ    þTBôÿàýüxù ÷5õ:ô·õJø§úéý¥·Z³ôŰx Ì !Ç ãýìüåü´ûkúüøÏö1õ‰ôö9úþçnVkBT $ È Ü V ¢¡WDþùüëûúêø¯÷cö‹õqôÈôD÷£ù3ü"ÿÛû‡~}ï ) uJëÀ»‰’$;³þOüxú-û5ý þlþþsüûÃùrùHûþü¡ý†þÿ‚ÿ8°AÊ îÎá«Þ†‚=•ÿ2ý¡úN÷=õ×õÀöÃ÷pù‚úGû°ûüÈþ<ôú Ž i v ?r²­”»G”ükùXöxõö?÷ô÷Ÿøùuú=ükþ+›Éi Ä c ¥ÍŠû@KeÿÆüYú˜÷öôÞô3ö‘÷éù]ü[þÆ?¬à1 ° ˆ Q Òxé€ÿÿÛü9ùtöÅóUòîóAöÜ÷ ù¡ù—úbüþéíφ  ˆ d œA¥‚`—úÊÿýâû½ûoûhû¡û3û û‹úù ú ûçüþcþ þÍýÿüUý úfä´8ޓЮ˜iºÛUœþjü2üüûlùj÷hö„ö¬öZø}ûþûÿWi_¼6Á* 9 †‹1+ÿ[ü›û[ûûzú+ùœøVøøúÏý×Xºtõ ÷~²•ÿüªøC÷‘÷Œ÷,÷þõ®ôðô!öœøFýó“) ô ñ Ó 4 6 ã o µæ°"ý(ù&÷“ö4ööŠõdõ ö9öU÷°úÛþñ¼«v¤ËQý. ] #‡¼ÿýUýSþæþYþúûÏù¼øø8ùÌû)þàÿÖÿ²þ„þRþ8þœÿ*Z@Ù¡>Vž—fhHdÿnÿcÿ3ÿvý%û3ù«öGõcö¢ø•ûÙýPþÇþHÿsÿdüqè ì 2 ‚B!…%y ý6úø÷8÷æøðú:ýdþÃþ|\¡£¸R  ¯qo„›þ°üaûâúàùª÷ö»ô¦ó“ô*÷ýú©ÿÑÅÓì ‘ cç ] †Y•ÿþ‡üËú†÷Éó˜ñ/ððUòhõ¸øuûªünþ9aÉ£ñ ¸ ¶  ¿ 0¹Äi¹+?ÿ>ýüQú ùùéùü°ýyývýý%ý¹ý%ÿþóW8'ÿÈþþ8fIÜáüSK(µ+ÿÆý—ü…üpüü¤ü™ûûâûŸüÑý˜ÿd™å§ÇÆYN^îýû×ø5ø¥ø`úÅû‰û‘ûü­üþŸh - T xG2ÍK#þ'ú‘÷³õ:õ”õ@öÉ÷ø™ø3úüüEm’ 9 Æ J ­ @ ª ³1Dªºü<ùèõÒò]ññòsôö"÷ñø¬ú!ýÝòS \ ¶ & F  ²  D ¨ŠéCýpúíøóøKùEúÔúXùö÷øüøíúýÿU>†(&TÂÊvœKz“˜òA§¥±Yêxÿ ÿ ÿ”ÿ¡ôÿ¬ýqû‰ù ùúÁûvþ•pÅÿ]ÿoÿÊxÈÀ ÿÿÄþ¨þSþuü¶úEú±úMü<þ4ã”ù¾YÌr|œ¡d.ÿ¢ûÄøÂövõðõ›öÚõõ¼ôõü÷Tû×ÿ:ÉN  y ~ É ;L Š ªNü=ú©øööôõbô5òñ;ñ?óÝö`úþÊ×y¢, 8 U ·  ¨Þÿ™ýûxú§úúù6ø÷û÷Pù*ûUþßË\KhgŒ´bÿÕþÓÿƒ•u€×ÿ‘þ6þ9ÿ{7Üÿ®þ˜ýjýÛýjýEýèýàýÈýþOþ{ÿ¸dåY"&ájEÊ/lÿ4ýåú,úÀú¤ûÀýâÿuˆcµ¯Ñ”ad0ÒcÿþŠüàúø’õôÂóeõD÷ûø¶û"þöÿ[æt j ÕCóN ÒÔ°þzûZùœöªó¤ðóîkïð»òSövùãûúýÒÿI| 8 èUu ã §í/¢ÈÆÿ üùêö²öø ùMúûÏû:ü ý:þŒo4F½#ö ã]ÿ¡ÿvÿðþ'þbýðýßþxÿz”ëu±ÿ½´cQë Õþ°üüþoÿÂ&¿þWþÙÿVöL‚ŽþýÊüÉýøýßýîýzýUýýþ CÆrº+9]„ÃåLþ ûd÷uõõ<õ±öqøDùàùTúªûÿ' É ç M + ×  % i“8Žüð÷†ô¶ó‹óóMóŠóÐóÅô!ö!ùÇýßf»0 Ú / m : Ý „  ~xýÜù*ø÷Áöh÷É÷ øøÀ÷ ùûûÿD¤` çãu`>ò´<ÿÇü3üUýHþaÿBßÿxÿGÿ¥­BcüJÖßÿÑÿIÿËþ­þmþ]þ§ýcüŽü|ý4þ†ÿ§ —ÿ0þ‡þmÿ³ë[÷ÿþ·ý7ÿ#Hº-6@p]‘*|2ÐÿÛüâúEúVù2øööŒõüôûô“õÞ÷Þú¹ýÁq² V ô  &¸ ˆ KJþMû¨ø ÷ÓõyôLóºññ¬ò–õ2ù%ý`þèà» Ç é n M ©Ýÿêþ‚ýÕûùÍ÷ÍöÞõ5öFø¦úýðþ’ œ¡ŽíW5 ÞmÿþÿüüŒü@üüÓûûdûòüíþAÞqnUm&% ’æðÿ‚ýœü}ýtþOÿuÿÆþhþâýqýuþôÿà5­I8Šÿlÿ<Ã*-ÖT @Ó÷òþ+®Áÿ‹þôýÃýOýéû_úhøöõõöIøBû|ýöþ³á:&— À åÙ¨  € Zð)É:þÛù:ö&óßð€ðCñªò‚ôìõÌ÷xú½ü~ÿ;´ ¤ è Žã „ B s±ÔEÿËüù’ö‘õö×÷¹ùÄúýûýü>ý«þʲ®É…nù_-þÓû(úÅø”ø¹ù~û´ý#ÿÈÿ0øO–« Sq«ùÿª›ÿÿœþ–ý¾ü¹ûGúÃùXúÃû¸ýÅþ ÿÿ(þ;ýØýgÿ–]hÒ“*X6,âWÖïáÀA´†=þüyúù¬ø‚øâøáøMøÒøöù ûüü“ÿ¡ùGÞ ; N … ¿ $  Xù aÿäú@÷äô ô¼ôõØô1õŠõmöûø´üBˆ „ Ç = é @ tá:ÿòûúù¢øê÷‹÷ƒöö¿ö÷ÏøûµýÑ€:>jŠí‰2yþ|ûÃùùüùXû¨û!üËüý þ÷ÿ½ûïI ¶±ã¤íþvüLúTùHù¾ù÷úû&ûpûüµüþqÿårù$¤¾ÃíÌ ¦_ßß1Î ã£1ãýyûýùRùèù¸ú)úùø÷9÷Ãø—ûHÿöYªÓ<@ )  Ê e ù?îËsþ“ü.úóöˆô)ó¥ò8ógô™ö³ùKü›þ?S.¸Õ i :  Ç}vµÿ·ýôüÓûôù2øzöõ4ö ø<û«þÈÝrf]  Ê g‚B`ÿ¢ýSü¢ûûcù‚÷§öƒö_÷ù(û+þÖw¿µðJøX®º+ËÿÍý ü¾ûüXû=úù4øyø˜ù°ûØþ-ïÇݨÜÕ„Mù2uö2¹Üð¥aÿ†þlþBþ>þBþ=ýËû¦úÃù™ùÈù;ú·û2ýüý÷þóÿ¡;t‰ | å Y „˜Û#‹yMýùóõ•ó\ò»òÜô¹ö±÷‰øxù~û¯þ É „ ¯  ' ²  øçø¯þ¼úqø]÷ªöìö=øeùúÔûøüÊþУ?Ó, ’ ¢‚6WvÿJþbüú÷Æõ4õÃõø û-ý±þ¸ÿÇãk?† H Í  ¤cÊ«—fþlû—øöÖõÃõûõR÷åø ú.û3ü®ý¯ÿbkÔŠÃ8Äó÷Œ€É:smÿÈþÛþíÿ‹!°þXü¡úóùÄùÉú?ü¢üPü‡ûàú¨ûBý>ÿò(>ÖÊãcoêŽËÿ[ý·ûÜùéø>øT÷ÅölöÌö\øúWüÊÿŸZ³ à3 ‹ ±…ï ÿ%ü²ù)ø*øHøô÷T÷ˆö ÷nù.üšÿ7šÕüí# ëƒØsšý¼úCùøx÷Ž÷‰÷ä÷‚ø;ùûýØÿáûU ’ S ï ß®Ü|RJŸü¬ù–÷ö6ö3÷É÷ñ÷s÷A÷¹øûðýµß¸ã£u7øèIÅVaÿŒÿ6ÿsþ‰ýü9ûtûqûgûÌûóûøû£ûÛúØúûlüþ ÅHAý÷…º= ž h €ÀÊ"gÿ ÿÛýáûù.öõjõµöù3ûÃü¿ýCþ·ÿPã_E Å 3 q¬ˆñ–ÿþJüú•øS÷…÷8øù÷û½þx_?a²¨åû L Œ ½Ù¥ÿÐü“úkùoø[÷êõÞóýòôgöÍù™ýÏS›e0… ¿ • ô á ” âmù§þÅüFûwùÛ÷Töòôáô³õÔöÄø*û¨ýq &BH|Rµà¢ª?ôˆ›zòÿþÒû×úèú¨ûýJþêþ‚þÙü±ûåûÉüAþžÿfßt¸ÿ?…éy`Û-•õù®|øÿ þÄûúÏøï÷â÷Hø'ù`úÓú&ûWüÞýâT Ö¥»Ögõâÿ–ûFù/ø5ø&ùúûÏûæûØü2ÿòÞ0]èD­°òµÜÿUýÙúì÷õ‚ô]ôþôLöøÙú}ý[ÿ•™X ® ‡ éhT  ´gUÒ)þûD÷ôlò5òeóùôcö×÷øQùRû@þËxëM ½ ÊÛ°y2síXi2ÿìýcý ýÝü‚üuüÉüƒü<ü’üèükýõý?þøþSÿþþ0þ¼þíÿ$"¹(c×…™¯Jäÿcþ²ýáýÐýýfü5ûÒùÃùÐú–üºþ' :y·½âðɧ¤þõüŸûÕúðùqù±ù†ùQùûù;ûuý]ÔÜFÝÈÆÃéÎýNúØ÷ÈöœöCö:öUöüõ‹ö»øü?ÿŸÍ E ¾ |   ^ ÍÞ"ýãù_÷íõÛôÛó÷ó ôõö›÷Òùý!2.ôT w î f   ZK~þóüÊüÅügüü¿úù€øêø‚ú½ü3þÿ†ÿÙþ,þ]þ;ÿª­äçT<’ip¬ÑExå,ÛeK“ÿãþbýÄû~úú»ú¨ûœüÖý`þFþBþµþeºm° Óm\d<Cÿ5þ¡üÇúÛù÷ùJûdýëþ&q]€ ¸Ÿ $ _í°^Èÿ`ýwû%ùþöºõƒôŠóDó«ómõ3øGûÿ¾u~ § µ ¥›û ò bµ÷ÿáýDû¿øxö÷ó%ò–ñxòõÊ÷þù?üEþ Eý¢ Å Ñ P ôU†€“þõüÜûÒú<úÃù´ùújûZüÎýúþÃÿAw?HÎGGYB*¸ÿ‡I–ÝYB~ÿ;ÿœ7 Ž9ÕþÃýXýôýPþÛýgýêüªü ý¡ýäþžmÊqìzçßì±r÷þ‡ýøûñúûûüýÓýkþÿ¥ÿt š]ÊúiÃÜûÿ ý©ú¥÷kõôRôÃõøöø_ùÙú9ý9¤É1 <± ü Ï 6¬/þ’úD÷`ôÿññ3ñÃñ;óCõl÷ÇùÝûkþ g!e u ‡ ã š óħ¼"çÿùü™ú\ùèùóúuûŽû-ûûûNüþ†µ²“>Âèb¾ÿÿ•þ‹þhþþjÿ¶f¹ûâVxù lDÿñýBý(þhÿCØ™ïÿHÿ¾þqÿ2~õ`èoÿçýÕüýýNýÒüøû‰ûü¾üPþ¤íë™…KyÅÆÖU1²3þ8ûšø/÷AöÑõåõóõvöI÷1ø‚ú0þʾ~ – Ê § " Z « _|›þÇú3øÙö”õkô=óFòšòêóö®ùý⮹n3 T 8   õ . À[£…þ:ü§úaù´ø;ø%ø©øÖø:ùÞúîü ÿúÔ.ÏêÇemgž þ ýþ"ÿjÒÿCÿOÿoÿRëöfÿJ¿ùÿóÿuÿÝþþ—ýÇýÅýëý‘þÿjÿ¾ÿÅÿ%JËÿÅÿ1AÊÿøþsþ«ý$ýýý•ÿXÆP° Æ=w( ÁqþýàûLú^øØõíógó›óßôC÷Àù'üFþD-ò° Ó ò÷ = u ½¹Ìþ ücù€öRôØò˜ñ¡ñ$ó†õŒøRû¯ý4Wb‰ } E K › ´]ŸyIÿ½üÁùÛ÷óöòösøúsüäý†þLÿÄ)«SbÈ%²¥™ØÿËþàýGýZü¡ûÊûÛûûûãü2þÎÿ.žäîÅŽ'„×Rçþþ‚þhÿX½Êÿþ þºýTþºÿá‰ÂÿÚþ]þþþ#ÿ‹ÿ±ÿ/ÿ ÿÒÿ³×G[Eɇ›Áðôàÿèýbû>ù1÷¤õVõö×÷¿ùèú*üÄý~ÿ|ü; Î ­ ¬   D[MÿÔúQ÷£ô+óÈòáòcó²óõóõøHû$ÿß9 i  ¢ † å £$6U‚ÿòüjú°øè÷øùðù†úƒûpü¤ýžÿØEOj1„T ‘ìÿCý"ûÄùHùúzû-ýŽþÇþëþÌÿ­h´ÎæÒõHi«°·êþžýþü}üüü-üçü­ýµý£ý“ýhý¸ýRþ;ÿ„ëgðÿqÿ€ÿ¥9'Ââb¢Á1m\šCÿ6ýŽû{úeù€øÃ÷{öºõYöÇ÷ú›üýþ¯›\B ® ¹ ô Ÿ  6 w~-ûü7úÞ÷§ööïô;ô"ô•ôBöÔøü!^_ \› ø Ê  y  ̨åÿûýpüñúÑùRø‚ö½õ ö ÷ú„üÜþ@´¶óðÁ)ÌRj¤ÊøÿþžüBû†úÅúäúîúwû üKýÿ½÷þ‹CÎÁͼ¯‡¦þ§üŸû‰û ûüüü4ûøúiûÜüwþ“ÿºHóÓ ¨ŸQ¿²tŽÃ?šu‚X^*¸ÿöýÇüÈûYûQú”ø÷½õhõXöø¢ú–ý•ÿ~>ºL … s ì ¶ â Ɇ^ìNþÅú>÷½ôfó”óôoõöö±ø*úüqþDfÙÆo ø  a ‹¶ÈÓÿqþnü^úvø÷÷Ó÷Uùáû<þÐÿ4ÎÝ’ ½ Ä´3ꩤÿXþ/ýsûù5÷$öuö5ø(ú5üjþëÿ\¼~þ·GOf€ä ÿÿƒþËýíüáûû,úú¢úBû›üKþ'ÿ]ÿ*ÿÿìÿúr ²©s?ä̇*,ïÖÆï‘%2ÿ‹ýìûtú§ù­ùžùœù úvú5ûeüæý,}¨›½ h M ³ 1 µŒºû¬ýú÷Qõ+ô9ô)õýõµöa÷›ø5ûXþ•»( Æ ¬ Ñ X ü â5p/þ\ûú‚ùáøªø«øÓø‰ù¥ú“üMÿ™–ŽÛš²â9˜%]þ{üGú?øG÷äö&÷{ø&úÐû\ý¦þB±ø œ P  ŒÕ@-îéÿDü©ù2øø;ø„øùAù‘ùúýúÓüÂþ JC牽Äè­Áªz;͹GýÌ57}þ®üØûhû&û;û÷úhú©ù®øÔøvú‡üþþ_õ"à|ì‚g µ öSTø±ÿþ"ü7ú,ø·öæõÁõ÷ýøÐúþüCÿ^xOí u £  ب~¢ÿjýqû#úHùzøÙ÷ÿöšöà÷!úÓüíÿ}^ª'òls º ò4þBü=û>úWù5ø<÷èöëöøœúWý ¤«‡åbâG ïJ6¢É2_þ@ü„úEù¨ø0øøÝ÷r÷ñ÷™ù¼ûXþº?5OÛ,fo~Ÿ'6þó%Cú þÿ¦þEýîüý÷ü¹üüKû×úú¨ù3úäú¢û¢ü¨ýÿ’ä«Wþ% ´ Î ®ÐRÿâèD4þºûªøcö¤õåõ'÷Ãøúuû„ü“ý¢ÿEÝ <Í‹pÓÝ„Ÿþìûõù@øä÷‡øuùÏú@üïýÕcM…– Þ µ ›]ÉRþfü™úÓøo÷·õôÇó±ô£öaùýûˆþò­“  Å Ë m N D ´ÊJÈ¢ýûù#÷ÿõ$öÝöøoù›úCüþqÿøz©¶H¨Åñ<lÒd¬+Š<ÿ;þßýàýmþÙþÅþ„þ’ýEüÍûüëüàý<þRþHþÓýõý-ÿôÿrŸÑеÿòrìt£þÕü‘ûnúù£øÆ÷Í÷ŠøfùÍú˜ü®þ-F ÁŒ‰w#Ý…[IJ¿þþû!ú"ùùWù‚ùú‘úHûý‚ÿt3Æ›ŠÇCUcXcý¦úøŽöâõÒõ;ööI÷öøñúFý$6ê¶ C * Å Á P ì½ÿžüpù÷öTõÍôõYõáõ·öp÷ÅøûðýRêD6ç \Þ qÕ–îÿÿ¤ÿgÿŒþëýýýý+ý_ý­ýoýýýóüÌüýNý%þ=ÿéÿȧðJîåA ˜MhÑÉÿ•ÿ˜ÿµþeýøûHúCùTùsú ü—þ®ÿ¹VÍ ¹o`Ïmÿþùü·ûúØø?øøÁøùùËûaþÇí0ªZ³* v À\@¼þ¨ûaùCø`÷jöÑõCõõö øNû0ÿ@°ÁS › ± ¤ t ™ üî·øþ™üÆúeù©÷öõ±ôõ ö÷þù¹ü ÿ‹ë”Ïyâ—ÈTª\†ÐÑÿeÿœþÀýÐüžûÓú‰úû†üÚýIþUþÛý=ý4ýýþîÿ…^OýìFHz‘…_Yø}ñ‹uÿFþ1ý@üBûëú ûûsûGü ýðýÚþÀ·<ñÛXH‡Gÿ¯ýÅûdú­ùÆù,ûÛüþHÿƒ÷ìÛÐŽ  p G¯1“…Œÿ*ý"úo÷:õ¯ó2ó;óøóÉõÕ÷ ú ýþÉ f ™ Þ cú | W €š\Oýµúø¸õOô—ó4ôéõz÷éøcúêûþ”3 ŃœŸë[ÀX|½þ4ýküü³ûýûüÎüBýèý þ…ÿþÿ>Ö00É…GÙÿÓ@wFÀ™’ÓçÒãQ—ÿ¬þ þþ“þ}þÕýæüüùû˜üªýsÿÛdªò`•¶ð† ‰ÿiþpýEü¡ûgûûûú,ûÊû ý]þvܼîÁéo-<‚þBû„øZöõôíôõ2öëö­÷/ùÊûèþ›t g e ¡ ð ú O b ¢ £9ÿ«ûþøœöÁôÝó\ó?ó¬óƒô+öQøŠúeý¤¡N## » ~ Úš$'¢OôÿMýzüü£üzüîûBûMûëûýåþ†œÙ"ðÿ½ÿàÿdsxÿ®þ™þëþÿ¡ÿ]ÛP…½6>üóÏ¡BnÆÿ6ÿgþ2þ£þ:ÿóÿ3öÿüÿ45KæÊ™¸þ{ýóüýýÊüöûìú¹ú)ûüöýÊ[xµ[) € õ¤´P:.ÿ¾ü€ú‹øÝö¬õªô?ôÞôÝõa÷éù÷üfº=b# Ê z ñ  ì–bý÷úùS÷Éõô7óƒó“ô¥ö}ù?üàþ ÇþF ~ , Í ¬ «†Õ'€þÛü‰ûrú€ùUùùÕùŒú¨ûý»þ ‰‡¶ÒÞ¡ª£çÿ1ÿÿgÿÛÿ:öÿVÿFÿÿ-Wdø•G.9çÿiÿ þ®ý‡ýþ€þÿŠÿÍÿ !¥ÞÁvÏÿJÿÊþõý‚ýcý-ýgýþÓþø¨°½ØZÀÄìµí ñ(˜þßü û›øáõ!ô[ólóŒô$öö÷þùÓû"þsiR 4 >62 " ô 3 "ëÑý|ú|÷{õ ô>ó^óô¶õÐ÷¯ùÏû>þ‹|µ 8 « ¨7¨Yëv¿ÿPýû×ùDù¬ùµú¿ûÕüuý¦ý…þæØ5ͱ“1?jÂ$ÿeþ•ý‘ü+ü=ü_üÞüwý>þrÿOÓzác•àéG˜ÿyÿÄÿBëÇâÿ9ÿäþÿÔÿ‰)ªþ¹ý1ýOý¼ýýýCþ2þÍýûýÔþ"Á5EµèECï!—ó$Òý±ûÙùøâö*ööËö¡÷~øåù¨ûöýé‘ ' à ½  v J«ðü¨ù÷‚õWô¬ó‡ó]ó¿óCõ¸÷ûú_þTA¤ì ¦ à ¬ Ê? òý.üØúËù•ùú^úóú¿û¦üòýdÿ Zʸ\¿ä+`ÊþýÅûû$û¿ûbü@ýÎýìýdþcÿêË;7ÅnÄAÄzøõ!M:ÿ’þ7þìýËýfý ý5ýWýZý†ý’ý¦ý¯ýŠýÎýCþQþQþdþ®þ”ÿ¦ÖpšežïN@¯û¦L-þ©üQûÉùoø÷®õ"õyõËöåøãúæü2ÿK‹*žÑ < c ë Ü ÿâ—¤ÿéüMúaø·öWõŽôUôõ²ö®øpû‘þ*b;Ë‡Þ „ ¿ ú žþlÿ²ýöûZú—øE÷×öj÷,ùCû ýÅþ,/rØXÆ<ÔŸÝ<¬ÿxþlý;üûAû$ûTû­ûKüsý¢þïÿ«ý‡•µøÉvê“Û&ÿÚý‚ýšý¥ýºýYý~üÈûyû ü_ý|þWÿßÿ¬ÿHÿÿOÿ;?¸"lvÅEþ{‡ˆ3°yS MþµüAû ùø’öƒõ’õJö~÷iùXûýÈþƒÓаA  • ï y ¬ 6¦–@Rÿùûòøwöõêô õnõOöM÷Äøäúvý ¬ä›Â*  N8os£¼þÝüûUùhøaøÕø$ú üÛý†ÿÓùŸ\Ó„ï‹„®Sãÿqþáüíú!ù¾÷÷È÷"ùyúøû?ýPþ™ÿýÁå}X½xÒជlËÿÏþõý`ý¦üôûÇû£û®ûLüý±ý9þFþƒþ%ÿ²ÿgd`ÖcTF;£yú.Óñ~ Jþ„üåúú·ù1ùÕøªø×ø¨ùÞúŸüòþòÌ;¨ ] ¾ “ w ì­H~þ—ûMùs÷öƒõ\õ‡õö±ö,øžú{ý¥­ ÐÀ$ ® ë u pˆÿa»þ»ü¤û­ú¼ùûøføøNùµúý”ÿ²eš‡d¼µ‰ ZJ]þŠü‡úù,ø®÷â÷°øÑùQû¸üþ 9i… ñ2 ©ŸÖ¼Æhÿý:ûúwúpúWúæùeùQù‘ù|ú.üÕý"ÿuõ}é«nÅü n›™Ç©BÈ/7ÂÿdþUýLüwû ú­ùáø ø÷,ø›ùˆû±ývÿû_hÏÒ± t ž '5GÐ ÿ2ýéúÇø^÷‰ö›öª÷ ù‘úü•ýÿË×øÕîm  ½¾X4=þ€üûÇù»øæ÷÷*÷OøAúÝüÿ¾¹ù6}] “ ™°SŠÿ‚ý;üûùøéööÙöZøŸúýjÿ2·bÁÿ?ö ]ß!Þ¯ÿÐý2üû:ú§ùuù0ùõøNù&ú‰û=ý¯þúÿûi÷ô &²gÉÜâ§‘éy{]/ÿÕþšþQþ˜ýZüFû`ú“ùcù—ùðù‰úûðûkýÿ§‡Då[]6 ¦ 7 R&¼GtM.þÂûQùª÷ÜöýöÑ÷•øqùúuûÛüÿ>P[À³çæg.ËýÔû7úPù7ùvùúÔú˜ûýúþf¥lÁ[ [  S?â”ÿ[ý û ù÷Üõ¿ôsôõœö§øÆú7ývÿt° bW 9 1 ” H ÊcíbH”þüú”ø%øQøÖø€ùÉùúøúü‚ý>ÿÆwÖ6=ÂDçnò¹Nëx>—ÿ ÿzþ–ýÙü{üpüÐüÿü³übü!ü$üòüdþN=s%«þƒ@Ì k½Øðÿ˜ýRüûúÃøÎ÷À÷TøzùûÛüÂþ–»d«›ü·´þ¹?þ*üŒúÁù¤ùƒùzù°ùúûÆü*ÿ ’:I¼Ñã´3ØÝßýûùÎ÷ ÷¿ö„ö0öö°÷—ùAüFÿT?t u S ­ z ¢ … ÆK¬Íý'ûãøC÷§ö|ökö¶ö!÷Â÷ñø úñü†ÿÖ®žOî6åb“y®írpuÿþþ×ý¸ýÀýšýý~üüÞûéûüûEüøü£ý`þrÿ|‚…Zh‰0ÍÆ‰E/‘Ùÿ©þ7ýû(ú‡ù¹ùðúºü(þ9ÿ¾½ ð¬¹M£Žÿþ üùúYùJøÛ÷4øùQú üþÙÿÞîףߥ F < ` Ꮂ¶ÿÃüyúîøœ÷‡ö¥õ÷ôõô·õj÷7úTý-¼ÅŠSÙ 4  Ç ] D±:ýÜþ ý/û ù0÷ùõ—õ$ö%÷šøuú-üÑý–ÿPœ—v&I!›iíw™uÿöþMþ©ý/ýÓüýü‰ýÚýáýýýÏüéüUýFþ ÿ1ÿ ÿµþ°þ`ÿlÎWEœ¦¸á½l¥GËUÿþFýZü}ûû©ú•ú ûÌûõüIþlÿº(J0³·uÔb€+‚þŠüÔúÂùKùØù3û‹üÀýÑþÞÿqgz·m  × ì»Šôý´ÆýúŽ÷-õöó¥ó¿ózô›õíöÇøûÌý4² ¹  ˜ A @ ¯ ƒG£ÿGü…ù\÷Ëõõ…õöœ÷ÆøÏù'ûý0ÿ¢³dNÇ{Y"â-Æ,ÿìý’ý”ýáý[þƒþwþbþJþ¡þ*ÿvÿÑÿ,A@Íÿ¸ÿ…ÿTÿ‹ÿéÿYºÕýE~Ñ)'̵ÿâþbþ~þ þOþýuü±ûÓûŸüþÞÿRB­ÕZ£'Ð ]ÿ þéüÉûûMúàùèùMú\ûäü‚þm‡z/TóFòŠQ4ÿóûù²öZõõdõñõyö÷zø©ú}ýÿˆ…· ñ  ‚ Ô « à aqaýåúºø÷Êõµô6ô,ôÉôKö1øaúôü‰ÿ3Äö±ÔÔÅtÞšÅð‰þ×ý¬ý¸ý¸ýLýíüøü?ýùýÿúÿr7†ÿÿÿ>ÿ·ÿëÿÿ«þþCþ»þ}ÿq!§õù0xf4àn¥ÿ%ÿ¢þrþƒþúþ™ÿúÿlå!‘1µ£„OÿöýMýÎüFüûtú™ù„ù'ú¢û°ýÄÿ»Eví{Îæ H × Çúåï²0þûõø©öîôÍó·órô“õ5÷HùÄû©þn¤Â^ ¯ s · 6 z ý,;ÿÔü¾úùN÷¦õ½ô­ôwõ&÷?ù†ûÃýÿ[{‘‡ûq & wä£câÿ(þ›ü5û\ú_úÈúnû=üýýýöþ©ÿo!s¶Üñã?©lÿ>ÿRÿ«ÿ øÿ×ÿi!îu§!<Ëÿ¿ÿ/ùÿzÿƒþ·ýµý2þÿ•õ Õß;$œÊÿþþþ!ý¯üaüGüoüÁü”ýÀþÏÿûŠ;' : Q÷M–Kdþü'ùCöô×òÚòØóUõ@÷ùÛú0ýXì Ì + | , ± Ð n e–uÿ¶ûöøýö¤õûô»ôõöq÷òøäúýPÿÆ 4ì•^šrP: ”þ»üHû úáú‹ûƒüˆýþŒþ\ÿsîhVÂrip¾Eöcÿ±þ•ýü=üIüÄütýþñþÖÿ]Ö3T|®GøƒçlJVÂHS¨_Ží7hï°ÿTþ&ý{üxü—üÄüüüÍü™ü÷üéý‚ÿb ›Ô‚ e~Lfyˆ\ÿ@ýûùo÷ûõVõõ6ö_÷øøÛúBý÷ÿÚù«‰ °   Ù "  ÎdÂþOû¯øÉöpõÓô‡ôRô¾ôéõß÷úJýôÿƒŽ3¶ûð - k ,†y~¥ûþ¥ýJüû¨ú›úÜúûDüDý~þ­ÿ—¤# ƒðH“^>ÿþý´üÛû±ûÓûZü$ý«ý!þÕþÎÿ8¯°b)µfb‘T²òîûÿ`ÿÿÿÿ¨þlþ\þ2þ"þþÆý“ý$ý¤ü’ü´üßü#ýeýèýÃþ²ÿ“ê ã™Cš¥ñM*È©ÿþXü›úêø÷gõjô\ô…õn÷€ùÈûþK¬‘ì h ð ã  Ú GB •©þÚûzù€÷)önõPõ öH÷ùøJû¼ýÂy:Ž  k ç¸GMŸÿÿý£üGûÔù¯øøøæùû3ýÐþ=d$kÔ«DÓa=ÿCþ&ýQü­ûTûUû‰û2üGýhþÂÿ=w]¶«ÂËÅà­ýðxÿüþ²þ¡þ©þ\þÊý(ýÆü)ýþý°þ2ÿ9ÿÁþ(þ¡ý³ý‰þvÿGþa¹/¿Å÷ÄW«œGzHdƒÿ¾ýüUú°øúöÃõ=õGõ%ö¾÷£ù°û¡ý‘ÿâ4  ò Ë ­ F žà´ã·ývúš÷âõ2õõ£õwö’÷ùßú ý¸ÿ:P :Z ]O ´ÀÙþ-ýŠû%úoù7ùù§ú.üíý‘ÿ¾î`Ä/oجÆôWÏÿxþý¥û1ú¿øì÷øÛøýùJû†üáýDÿšOd>†\ u»$YL=3hÿ·þâý>ýÔü|ü|üÌüLýäýþÉý—ýwý‚ýþý®þqÿAsáâê¯05âÅÊž b‡ÿký•ûnúŒùØøIøØ÷é÷„øù/ûYý…ÿª²±³C @ È ž :u£—`ýçú•øÎö«õ7õˆõ,ö÷•ø¿úNý¿Ê½JÉ ç!ŽýJÿ%ýšûrú­ùù·øùàù=ûCýbÿKÛý ø‚еå{“‹Àþîü1ûãùçøTøHø¦øœùòú+ü‹ýEÿ*:(·áFë`Ï;€KÈ$ÿqý\üÀûwû%û•ú3ú úúÕúü,ýþ‰þ¯þ÷þIÿÒÿÂŲZ·1µü>swi“ ‡ßÿ.þüLû úùOø„÷ ÷L÷FøøùêûÒýÀÿhÕ€`EÐ [ ö àú2‘üÿ+þúûôùIø÷¼öB÷løúªûzýÿ«“\¿½0ôt˜ØŸþ´üøú~ùøà÷f÷‹÷sø?úµü:ÿ¥µ ü߯º' «wpË:þHüõúšù^ø‘÷÷=÷4øÈùÍûÕý™ÿn5µ"Ó"Àæ÷¨ý<qÿõýÔüÜûJûÿúŒúúèù/ú,û|üÚý<ÿ${›ÅWH žõÊ}XiÒëƒÖçzúÿrÿnþýÎû„úsùÈøuø«ø.ùÎùôú„ü(þàÿˆ"ßoÐ( ø ô , ¸gˆµÞþ¾ü•ú›ø2÷Ëö÷Ä÷úøLú›û1ýÿ=§†¿gC ¾±¦Lilþ~üÂú‹ùÐø²ø<ùú-ûý*ÿw«qó“Ûç[4Rìƒþ¡û°ùû÷zöUõ¦ôàôöÂ÷ðùVü‡þš~¬™× „ i ‘ Zßcö#(þYüöú ú†ùˆù°ù´ùú²ú¯ûýEþcÿq Sº…Ùâò ü%ØH¥VÌ‹ýÿÿ þÖüýû¤ûYû4û8û@û•ûKümý)ÿø_~Rö«DÐ*°sÇÈéÿ4þüIû/úùFøø}øƒùÌúOü7þ!ùæœüÑÞ‘þï¡ ðþ¹ü»úŒùãø‹ø©øÿø©ùÛú}üÏþ¬BF•6ÿ‡5†I•ÿÖü~úwø÷QöàõÌõRöh÷?ùûþ¹Wˆu , å ä C _ BNšÿ*ý¾úøø ø–÷–÷Ð÷ÿ÷føùøêù£û¾ýµÿ^mûV‚í©$:ç7Ÿ"±£˜.“Âôÿuÿðþrþ#þžýëü<ü‡ûûÍú–úÓúŽûˆüØý<ÿ€°x ëÖ²bpàÈ ‘mYÿUþ9ýñûÞúú×ùŽúêûqýõþ%2Ya†ÁtÚöH_ÿ´ý2ü«úiùsøð÷ø‹ø^ùÙú¼üÿ£-“vw þ ) Ü D ,o>sYþ³û†ùÏ÷—öŽõãôÆô õgö»ø—ûªþ}ÄÁTƒ­ ƒ µ < ç  »iYþPüwúúøÜ÷v÷¥÷øåøýù1û°üRþá5¶?_1ÞK4#dÚœ`íÿnÿ¹þðý¡ýµýöý;þþÏývýíü üÁüýnýÇýþ þ€ÿv²â¼Y“³ü犳†(¢ÿaþIýü,ûú(újúûüpý«þ°ÿÛ/T `<\,ù´sÿþcüûáù%ù7ùëùû|üÓýUÿ?@q°g l ‹ Ä ¤Ctw.ˆþËûùªöõôóŸó8ô{õm÷Õùàü0*Þ4  U t  I M"å þ’û`ùƒ÷lö@öÂöÎ÷çø×ùû^üáýÇÿ¶YŒíÒ±i%îl¯µÍÿlÿ4ÿ9ÿCÿ2ÿ)ÿýþëþ7ÿwÿ™ÿ¸ÿ©ÿ–ÿ|ÿ#ÿàþ»þsþcþ´þPÿ< yÈÏ«ÅÏp  uÿ‰þýý˜ýaýý`üüAüæü3þÉÿNšVÀ; ðÓ#ùF“ÿóýMüìúÕùùôø.ùÄùîúFü¸ý}ÿ|ÂÚ ° p ©“BÓãRŒý²úøHö?õþôSõ·õ]öž÷fùîû ÿ„׉A \ õ  » î ” ÄMƒÔÿ,ý³úø¾ö•õõõÅõ÷†ø;úü þRu3›gžNç4 Æ'ÆÿÙþpþ›þÊþ¢þeþþÖýþ}þ#ÿÏÿøÿºÿfÿøþ©þ‹þwþˆþþnþ˜þÿÿ5·‡Àç7eX’ÄFÒÿfÿÍþ?þåýúý¿þÆÿº•=W_šçº–ÿ)þãüÆûûOúƒù ùù•ù×úˆü†þ¯™`3äl ‰ é ¯ Æ 3 —üþ,ülù5÷võRôô<ôãôûõz÷¯ùü¤ÿÏÀÜ ÷ ‹ Ô z Q –E¥•þvü´úîøO÷.ö¦õÿõ'÷Öø÷úýðþµm±Îa{åëíâÚ«&°þlý[üÖûÔûüœüýjý þ¿þuÿAÝDvb_l4ÖYÀÿfÿHÿoÿ‡´¶· qÅ”\Éÿ†ÿkÿ@ÿÿÓþVþ"þWþÿ ±""æÀšx&m•ÿ³þ­ý¾üòûMûþúâú/û+üŠýÿÎ\âoÕ;t ò ­ ¤ý  ïþ–üãù8÷æôióógó‡ô%öÐ÷¨ùâû‡þ»#º € @ L Ä Á c dëK¼ýEûùk÷.öUõDõ÷õ/÷ÞøÄú·üÎþ¡’"*—¨±«Øÿþ‡ü·û•û üýþÐþeÿÙÿ…‚l3¿´;‡¹ŒÊÿÿbþ½ý[ý4ýGý˜ýØýþšþ"ÿµÿ<„¸ÕÈõW˜­dÕk8j/³ã‹ ž: ïs•ÿ^þý'üŽû"û û û ûLûäûý×þ½›käîr¶}Ž6¢šUþõû¹ù”÷Ùõÿôëô—õÑö=øöùüAþôìk  õ ; ç  ô K7ý‡ú{ø ÷!öwõ/õ\õöÈ÷ú…ü!ÿ¡mÑ奱ž,ÅRÿÿ¢þýåû*ûùúdûüóüþóþÒÿä÷烅1²ÿaÚ1gÿVþ9ý‹üDüYüßü|ý þþõþ“ÿ“Žj DG2'6ðtÀ œh{ÄÃsgÿêþ†þ þ ý+ý€üúû®ûû«ûÌûóûlüý)þ¹ÿ”>‚' ‹ … ÓŠœI"ÿýûùôöEõôïóãôyörøšú»üÿkã†ð¨ © Ñ E K ÆÙ»5zÿðü«úñøÄ÷êöšöÛö†÷Ïø§ú×ü;ÿd:öo™v¨$êúñ8±ÿuþYýüãúÈùù)ùú‡û=ý×þ=†—­Ú«Ò ú¿¾Ëÿ®þŸý¯üüÖûÜûü¢üNýþÿ(?#…­ËÚ AA P8^Öÿ´ÿöÿ'%áÿ3ÿŒþCþ2þLþ]þ!þÀýDýÖüãüOýÝý}þüþ€ÿC$PÓ=jH¯Ö¦âË_‡–¤þÈü!û]ùŒ÷öýô›ôõ_öTø¡úËüÿcÜ|øé = › ¾ 'UW€þ“ûùl÷yö3ö\öÇö°÷úø—ú¾ü$ÿs‘5ohÌšü¾4TÔþªý†üûÄú5ú1ú½úÛûŠýAÿÍMÚ åX;?Ê<©Jÿ©ý_ü û¿ùùÚø:ù úõúüLý‰þíÿ†óÓ6Q5Ê <‡ Âÿpÿñþ_þÝýdý@ýOý+ýóü«übülüªüýÌýjþÛþcÿ a±êõ{·Ï¤<\í>W`þÆüqûEú7ùø#÷ßö4÷Lø*úXü¦þÙËÊÊxÔ ž   û ©÷<;ñ„þúû­ùÛ÷…öûõ-ö¶ö³÷ùâú ý‰ÿÜë*³ð·°è}?ÿ|ý)üKûúÍùbùeùèù2ûÿüÿ˜Öõ¤Æõ¯Ö5ÿ°ýküCû6úùùûø–ù€ú¡ûý þaCçN[ÅÆ˜LžÁŸ'…(ÿ,þŸýWýâüLüÉûEûûPûÊûsüíüþüýKý·ý„þÿ}k J#þ©#BîWŽGÀæÿKýÖûhúdùMøi÷¸ö®ö*÷¬øLú‹üŠþºf’2=ÎT/Å;Håx½«Â·ìe,º,Œ–öàåïîàTÇüÀïúß!Ø}ã¹ÿ"ž|û`ðûóË e0ÇDü1‘OÞ‰ÒdÖoîpQ)o ¤þðÞDÕÔ×:á*ô ÄW -4L!×5ä8Eí'ØMÙâfë“úˆÓýöé¡á…íÖøÃöèö Ž º&O­l@¹û4áÅØ÷èTûª_^þ¹ï"ð9Ó(ûUùûý&r–$:týÓäá›ä~æ´î÷ùûÝþ1¦h. Un~þ#û¡Ü ’NiËã®ÌŸÐ å"òˆø>7ýJù>Ó#¾ É®…ª…Ï E³uüèïëÜJÓñà*ù–¿ ò M ßz™e Âñ ¿ú7òÍî<òfým ß»ùñ±îjïoô²hÒîÕ í â Ç 1 j¥ÿðä“çöóoá )“ùXô¢ü‹çÉ3• €þòù þŸuý÷ôìê?ßÙÖãÛ·ë>ýèÄ ™Ô+ÿ+°^%%%Á ¬ü<óéóüúü>ñã׳ÓÍÚ.ìÑ÷ ÕW Ñ#„«o öú˜îLéìêŽôvüÇù9ï¢åoæIð¶4Xyp”rŒI±h÷Læ«ÞoáÈèÆñfù-ýÔø-ólø—Ɉ"À'{$€_•ÿɬŒúÊîÅßQ×ܾìÜùý’ýQü¬ú ÿ4£"Á+=&ˆu —”÷vúg=ÜóÐåˆÞöÜVá²ò*rY €YvR'Ô#«]þq÷ëô¡õjû›qýníKälê6öG– ªþü#· ½ ë f ¿SñÎè,ñmþ …›¿Ýú5üš kUq¯ ünönn>ðòqéÂäëÞ‘âáõUaƒÿ@žbÌ".{#ö ¶Fýù³ùWùÇäeß|çÔðjù™œÆ ;þoý 1*€(†êënå¿ïöTõÛø[ýëö@ì.ò^G±þÙ/û.Õöñ/ç+Û<àØó„ÿ2ù{ópúïþ»ÿ¤ Ÿ î(ãȾþú¤ú/àWêËÖûÖþÞdã=íG[ Íâùí^Ÿ ¢*<(®«ù_øÿÊùÕògóï§Û ̽×[î/ø‹üÊý ð‚üÙ aÃ!-þ· ‘û†ë÷ñè?ÿ…ðyìšðåëÒèiùt.9{ô UlMÓ Õõ¬é'íÜívéÐó»å#óïÛþX ‹ ‡Ì&ª ËûT ÉÝùGùÞ¼Ó^äŽôŽö´ú•W¡öTõD  Ï\b‰üEòïÿu Êcõƒõ”ò6å*ãÐùל ÷ ˜ (9v"Èlþ¤ùûAòöì„û3=üÜéÑìÇû|ÿ5v!½üþÿc ‰ êù k òùàåà†óüšú}è Àó ýª#ð6} ñó¢ñÍ,ôÚê^ëàÅÐpØröûH„ç £ °,5"µ0ôyò\éêÖôÝÁæÿäïRþéùпáMŽËíjòEû­ôöî]ø÷úSè‘Ýqðj « U-º cûŽ#—æþÿøäûÓ›âÿú8ûEðfòoù‚ó"ïøŒ#^%ùö÷Nù°FaXì9àåEâ¯ÝWôNó6 9í'‚ K²üÇJ`ùw÷tkö'ÝíÖáé øxõŠú× ”ªø+ùš¯%ëC ^ôÏí`Ø tÿŠóöö©õšçéÄ“]mïåùB÷ ¿”Äðïjð çUçˆý"©ïõ7ý, † ü  £-•s==ÿ3õ#üëÖîÉֈءéÎíIíØü ™¥ù£"öøÿ ¥IøCøõuôÜîô4ëZÜèæ¾Ú ÙÎ)# ‡ k ¥") nþ&þ´õæñèþü ‚í«ã…íõDôãZ²"øwØ 7å 6 ïÁÔõáåÖí¹è=ë*ü;ÄñŒélüü›=û!!#ã züš õâôò>ÞëÐËÞ óVôðþú{ëÿþ^£,H+dox >øèÿ VõèdàèâáÞÜOî–¯zôõD~aá¬$è‘ö`ý¼ýK÷˜ý) ãÿÕçéâëó•ÿ:Ñ LªüÏ÷µçbÇ»GûOã®ÝÂînûÝöBõGÿ<ÿô¦÷E敚æ ?ú½4æý3ìWê¨éðßÊáŸ÷ž+ÿNõ*ý  / ŸŸ&ËJÆþÍáüÆ÷LÿV6ðüÛ¢à¢ðÙö·û‘ j û™Âb]¬~Géê}ùüüó¹ôÿ÷îvã¬ïC ˆ’ 9 cÿÑ%-6÷PôçêÅÝtä´ùX÷öBôÔþa–¥:(¿+\v ì¯ èxÿ"*ü#âzÒ]Ø:á²â[ê±û“põ ôÐÒä~"Ü*²%çiY¸ ŽýúPù,ñ)ÞáÔ#ã ö”úŒú~&àý ûk PªN 3|ö^ìéõ”Fýïiì{ïýë|íhÿ¨. §<œ }èÀ$ |õœìLïîsëqówþùŸë‰íFý,_ ¹µâGÿ” =þ òçÞsÜOìÃ÷ºøûEÚÿY÷”ýbÊ ÈÕÉP ÕùÐö˜ÑîüšïøëöçªàPæ1ú[öáýçhY÷ H¾ú‹ù»ódóhþà¿ùIîéð†ûŠƒ=¥ š  Û”Iöþî ÞˆàîäóõôKúËþŸúœ÷Uë$¨" Ø‘ŠÂ“ ú×ùZí,å¨ÚiÔ2Þ–ò³üúAúiÿôÑ€¤'2+Y8 ~üÿü¶þùìUàuàÜåœëGøü+su sýÖÖ¥Näômô»÷ÎõóÕóbïhä²â>ðà €!Íû¨¡1œK Û!÷ê½å:ïû¬ûnõ[ó…ôöþ = ÿâ t cæ˜G }uí7áÔÞxߦå‚ò ý¬ü5õ*öµ  -%ó © ƒ—Pÿ#óqäBáê>ô9úŸþ! ý÷Îúó Å% M)üòÕñÉûfÿ™ù)õµò‰òtû ï)É â÷ j £ÿ ðªæjäÿå÷íQù‘þIúôíõÿ! ¹Þô ¸/‚¬¶”ø÷éIÞC݇æjñnùJT¨ÿ3ÿúaFô {.‰ôüDú6þ%þ$÷îÕåàžáÕë%ûƒ;¡µ² B8 #ûtõyô÷¢ú¾ø¨ïyèòè0ñ×ýK 3Ø7TK ÅŸÏ{Áò!æ?ã÷è×ðNöÂøŽ÷{ô öDb$q"ÝkT à À Ñ ›rôðç¿ÝÓÚ|à;ê5òÆó¥óMöû†j]÷"V‚žE ‚ zÞõ éŽäÒçUï2ø-ÿ×FýúöýŠyý Àmö õùøœüšü ø4òËëÖé=òàÿ¡ Aö € ^È3€ Èþëó~ëÆèöí(÷ÀüëúcöLõÏøD ¸Nß ±?‡ÿ<ÞûîîxâßEäÙëýôÚüÇÿìýßü&0zDçÝ édþùÛ6üøôŽìçã<àrçuõÿްø k\È;ú¬ò¯ïôôû~üõãîî óšûs ?í ±  ý nhZÇòèã]ßMâðæžíèô ö¶ñpò7ýŠ Àl Î$î …ƒ ’ øm `¥ùÛìâÞøØ‘ßóëTò‹óÔõ¡÷ù¹ˆô!Q%r©|4­kòèuäñãÝèîôAöšüNü# ½ãÀ7Ôlý’ûƒûÀûý0ý`ôäæ\ä§í4ùW ³* =ž ~¡ g2ü_î<êãñCùfùø-ùQøáõdü £f = qi ù ‘ÿ-ñ»è²äÌàÒäkñûùë÷9óÝö>ÿ«Î… !W[ Öe§g‡í[öJèåæ ï’õúú ‰DûùýU ×ë þ y üwï@îÂö¤ùzöCö‚öò‘îƒ÷' N Sîh‚ az«©ö³ïè~áÎåaòK÷àñ&ðƒö´ýs¨"³ZæÙ ?iÆ&þ€ë]ÞyÞÈãâæWíóøqýèøFù%¡Œ' ]$t™FúÓô>íQß÷Ø’ãFóìú¿ü”c»8º™®p²üü:õªù€ýgòîÏïQî¶ð_þÕ/ï ÿg ª Î ± – òö¿ìší]í«ë:ñ–øö`í~ï®þ3 rm\ ÝZõ x» òO´ô«â¨Ý™è­ñìñïñüõáõcñô÷¸ qUÍ­Ý2ÿ/› Høgóð»êîíªýñfþlµo“¸a {ýhøDùdõzóJûZÿ"öãëCïáú s”cé ì„ñ ÊŠ Ñ÷²ôLåbæCò~÷Íõù'ýÂøcõÕ'cPSí¿ _ËY ÄÝ÷ ì¯æ¿ÞHØ*àÂòŒûn÷ûöèþð Õê$ë'½VR à Øgcÿšì1à}ãkéìÌó¿<Íþjûˆ"_<þXòVö ü ø¦òzôTó›é™çëöëV.Gc¢ Š OfHBòüvõôçÌßÁè1ô®ñééïð§óùÖ f¼ë©uc9 uçâñßæßç,æ äƒí#ùÝ÷4îmðRÿà ;sù |É “; 7 DªÅ¥ö6æjâ/î÷'öîøðRûOþµI?Ä ' “æú,÷‰ýûÍò\óôðuô™µÞ •U]²O=4<ñãí\ï^ì”í‘ùuùþð ÷ç• 0O*$§ )î à yÙþ£í­ÜÝeèAí±íqõuýæùñô‚ÿ5§(þô]I7˜W×ùQóFó#íƒæ—îÇÿ¥o`yR Ô$ÂûÂù=õBí¸îLøÂ÷¯êõäÄí?÷Ãû7”wþ ¦ ûyÕdó6ä6ç3íaëßëýò õûìÛë ýÙ%µX˜ˆ° œ! ýîõãîàü×ñá¨ï7ñÖíSóÑûêüª_#.#e鄱 8c: ßìåiç!çÙæëñËþ ýCôØöN  ÙR#ú»'’üPüXþöÚèÐéÝùÃÁý {Ý Ý9zã én¥öçpä“ð¸ø·óÆïùómõàò†ú àBiHZñ S€Í^žñ í™ì™çxèŸô‹üßõŽïP÷ú[3 €iø‰ÞÆ*mÿA}þ†ðSä‡éÍö—üáýå y þ”GÒh KüMîVðáúbûçòýïÇñ1î›ëøj r9Vé© –pÿöòÔïêmã èŽôô÷Üð¿ïºú#Š}|"I%Ô™(ýu €+qúŒæpÚOÞtä[äHç'ñÏõœñPô¹®}k!êö¶ .l¯ü÷›ð=åÁàŽì†ú¾û¬øü‚iŠj” K š»Jø¡ñD÷õýÇ÷Óëéúî¿ñö™ebU h àXùèR| “÷ï`ðï{ë î ô”ð×èí¸ü<ì ó ” oõ íuþ-ô£æˆäï öókñœöàø¨÷¶ÿBa¿Ë \‹Y O Áý“ðí.íÓêIï ýöÒUúñýG4è `—Ù ýú¼ûòø9÷^üÀþ_öAî\óÿ<V ´P¤ŒŸ+ ýÅïã•ä î#ñï±ñ`÷µ÷…ø½aF *­GEZ Y ;Ç Ìú®íèhâ4Þ©äâñ+öÊðRð)ùôçâ !F! Ò ½Š¹ þhîNäíç•ï¥óÃú`u„ú ®“JçÃèþÆó%õ°øóôyïåîkízçÏç*õ}0 H ©n,³)Cj9þ‚÷¹î³éÅî¤õbò¾ê>ëVòwø'Vᥖڛàº÷ 'ãíÌä=æèÑèÛíØóññxìñÿz –ˆ¯+Û ‚ •«- ‚AÿqõûéÐèoòXúLú‡ùöûÊûRù¡ý © h8–ÿiøþölý½ÕúóóåóŒöð÷'þ¢ ¿/§  Ç Ð R ½+ ‰ÿ¶ñí8î²íÃíáñyôHðí–ôõ  „zŠ[ Î á.™ L†ûïsäáä¿ínóAô‡ö[ù@ùoúAþSNc|4 oóõ¾ùðïÈëéúçï^ûTĽi" Ë ¸áMW ÚXývúaö€ô¨õó@ë¸ç¾íe÷äþL ï …*„øª %óòèÎèAíØí@ìÝì«íoíEòwÖîùe ®×+ÛAö~ìVãÒÞöâ!êìtérêðº÷»” Š6Á[.@Y \ , T™õ˜ípí ðÀòÃ÷KýÈýUúûí8 A„! Ãÿ´ù1ûZý4û:÷äózïÔêëìq÷tÐQ À ú  ¥ ‹´3ZWÿ£÷ñjïô^ø÷õð×î(ñÞõ1þr 3ÎéÅ ]  1  ¯ œÿQòãé¯èeê³íËójøª÷%õø‰ˆ Ž•¤#× û5²ÿþÝøñcê<ëèò"úèüÅý&ÿÇÿ¾%Ë• l¼ûÓözöiú°ûLöäï¾í÷ïÌõÕÿp bŒ(Á Xüèïãþõò²éèæ‘æ|è-ì¢í ëaébïèûÉ~ó¹óˆ &€*þfñ§æ©ãÈæê¾êÊëŽî|ñröÇö °K˜%wŒ U ¨ Xùü:òÍëƒé«êoðPølüKûLúyþÎ) ¢è…Öõ pÿ¼ýùûÚù¹ô ì æKèmðaù6Ú¯ rÝÇ i á¬ÖtüúòŸðgóô¥òÏð¢ïïÜñ]ût!¿~’¥®-à tøÇð:ë>èbêï†ð7î–íjò÷ù÷R ¿ãiË + ' ž ; ' £3ø ññqõfù°ü(¸ü üî, Nð ê 6±úûóÑôèøJù öêóZñWï•ñšû:] ‚š°û”#E¤ûÒóàìùè¯êîÜîÄëÛëSñ®øX‡ Çå—Ïâ]j1 ö*ÿáñøèBçºèêõìMñúòÐò—÷d‡Ã|Áòý ß  cŽýõhìväJãëqôùIúËü´ÿçÐLsƘ± _qþ®úÏû‡üôöeîFê(ëqîõT~ à Ô ’ …ž˜[ zûšòð„îììÃìôéjçhì“øÖ‚ t¾ñýŠ­æ í—÷xì·è)ì÷îí—êEëjìØîÛ÷aÏ—2 í Û Þ»óõùåó¸ñFñÔôÔüWYþÏú×üE¦ †÷× 6ü)üúùHùÞö¤ïøé“í÷°þŠº » Ö »K Ú>6‹ 5…ùYðkïgó+ôñðiñÇñ¶ô[ÿ; {óÂ9û ]¡ ‚ý%òìôçŒåýèÕïœñ…îGï÷!СX¹ r ™KýÊðÐèyê[ïÍòT÷‚ý³ÿÞüÕýzŒ¼9? Òÿã÷ü÷hù®õNðî&íaê˜ì–÷¶ í IÈ$#nG ´ÿPø–ïéˆêoì!èŸáâXéøð"ú³vò°ˆ(€ŒøÇî2í>ìŒêìïäììè<í·ù> 1úk.  ü´¿ LãýlõºëVéïïtõzõ¤öû³ýþýàÑ °{ò ¾#”üHÿMÿë÷Mð6ïÃð8ñßõD`íLÆ … hšÓx|øUôô‘ò™ðéòæó°îjëò8þÚq |Z¦ {­šI Ö».ô©èyç<í(ï;íQîDññþñäûb íj¼Ê ?:´ T =ÿ$÷Dôèð€îÄóæý[kÿÿ„‰ø c}V&þ˜ûÚø`óìðNòƒïcç­äEìûõlü#vƒíDgà·›øÙíÌíÏïƒìWèsèéïæ×êÐù® 3oë¶Cþú+eùSñè¯â)çõííþèJëŠò”øõÿt þrîá 9ÿ Ð  Ðÿñ\êoëùë“ëÅðª÷ø_õù,{ ²[Éôÿ3 @üšö$ô×îÒèÿë6ø±€5ú • # ä :¤ÀBzúñ”íò¸ó¬ì°æèÉë"ïš÷ÛæÒjX¨ŽpÕ ú„ôúòïíàðIóŠîòê‚ñqüËÜ œ¦ Pà ó »k‚ý÷ô¸íöð;ùEü'û»ýVx —ÕA 9¦÷%÷ ûCøPïoêâëÆìMî$øþ* " ö ‡“•©‹8jø¦ôñë ëï°îÌèzè‘ò¤ýåÜ ¬P¸a4šò V9ÿð&åCåØçåÎäËéîTî¬ò“¹¯ž<B'qÐV pý¾ö„òãëÅè•ïã÷ø´õ·ù²C þFÉ tð.þ?øÍ÷\ø™ðùåVä”êvð°õýÿg ®   ² Bü ù½ß ÐýÑôNô®òàìŒê„ëðçÁâ«æIôEy ‹”Ù¤5âj^ûrðXì„ð¯òêí«êãî­óö%ý! ‡=+ ì 4ä - £ Õ $ÿ?óuðjñŒðZò¤ùwþÆú*÷èüO÷ Í ’ßu ´þ ýàÿüýú’ùøºðzê°ï"û÷n× h# 4 ” {( ‘Êvö÷ë3ëð‡ïgê‹éÈízð}ó´þ&ç5‘ÈÑÉ~‡wšôKðØìèAéïrïoêŠêôçþQÿ åÊ|w Ý µÕ ]?ú=îOèœíEõÌ÷úÕÿkg -!Œ —ÝøÉøúÉóàêkçãålã-æ”òúœtJ Þmn o] r·ýØõºî;î¢ïmêPãŠäãìpô!û¥á ´Ùceeõ3î¦î¾í½énè»êê èßîkýöy ¼9­yq þÜýVöèí íLôkùQ÷ õ$ø\ûiüõº yK£D+ýàúý+ývõÜí+î4òGôJùŽB   ` tôµ÷M8úîõ´õ°ñãìdìŽììèíætî4ûBoR ÷qŠ[¡D÷¥î|îÉóôðï)òÀô÷î rã i š ‹ïu€¿ørð<îníúìò·û¿þCÿêˆ ×¾Y £ ¶1þØøDôóïhçÜäyë!õ'û‚Ññ aó’Z® "ù*ð ïð-ì¨æÌå„ç¡èî¡ûT d·0À¾Œ'’iúóŽë§æÅçãêÂè¢ã å4ížõEþx NΤšM”2 Û3õÏîMð¿ò‹ólöñúµû»ù'ý+ÖD ¼Žý§þþ#øÈñ8îñê`ç.ê¡ôþfÜ2 uï¢BM lOùbõùõ¯ô½íçuçí»ò(úíˆ m  î ¼©IgŒƒL÷»ñòáññÎòèó7ñïhô©ÿ3Î ¤ f Õy Ð Þ¯ÿú#ó˜í)ïFöÈú¢úpû»þúó¨[›„ Ÿèÿûnùrú™÷Öï„ê‡ëÚïõýz  Ènu·IHl÷òìïòìFêé‘ç+ã ãøëùä iwnœCã‰g rö¥íÓë‰íÏìËé­é,ì îîó‚þE „òh;Š S  û_óaïíÃìñM÷óùeùàûk (½fʶ®\þ´ù4õWîæAãLè¾ï¾õwû–yÚö Dõ¬p x¢ùHø¯÷¨ó)îÌê7é¶èüìÃ÷: Ÿ 77Œk¸Ü”ÿø¿ñî ïxð(î^ê‰ê€ï¥õßü"— `, ˜ ±& ý ÊÌcù>õ–ö ø‚ùnûŠýSýsüyÿÑã OI ®†ýÕùú}úö¦ñî»ëoë¡ð^ûðX 5 A zR½çÝB ½AùóÛï6ðÇïsëçiç)ì-ó@ür¨Ú½óÁÂR B øñßî=îÆí&ïÖðˆðyñx÷‰¯ øFSdg 5   [,ü²ôníÆèê"ðõU÷¼ø(üSœ‘ 2/È6Š 4“ þ°üÄø_ðèïåªç‹ìôfþµÞ P ­fà_± –ø“ô0ñâíUë/èãâ èÚòyý é@%…Ns[rš”ý÷ô®ñOñ)ïãêÔç è(êàî&øËg Ë ¬ ´ 3 I è Ü ƒüùËõŽôûô}øÈüÄý™û·úðþ¶H 0⺹Nÿÿ(ýfú ÷’ñÚê ç¼ë¢ózú8'}ó ¬§Ã¾­ÕlÿøÐö>÷Åôˆðãí5í îØñ‡úÕ« y È“Óð% B¬ù[ôõðÏî¼ïÂñ}ðÂí¸îõ—ýIà qlŠ> " û È ê!&ûò“í]ï³óÖö‘ùøüRþiþê¢ BM zûÔùùÑôÓîëOèWçhëõÙÿ=» E£‰Ü5½ˆzÓýýõÈï×ìŒêtåLàãà¾æ?î÷9b „yobmh­Ö ™þ÷Dôíñ ï8í˜ìßêÏéèîtùT” ± å¾ Õ ßÿË \kû.ôÀí(íò$öüö1÷Òù„ýÏrŸ¾Þ X'ˆÿiüõbíê¦ëàí+ó~ûÖApU Æ.ó£€ ð»ûòùÿöªóäñIï÷êæè×íá÷Ðm ͺ5jmj9Þ “ÈúQó ñÂóó„ïvíîïàòLû à ‹ a  ñ—Ê ÞVÿâ÷kôGó ôaøHÿm®”—Ý ø ¬¨‘Wüû´ù ö…ò¨ðìfæ—äùéÑò?úÛT9 ‘v¿€ —Z _ÿ÷{ôRó ï8étæ5æËæÚëÚö­a º ޚϋ׺·üÒõÏï¤ì¼í±ïÀí×éÐêañ;ùµÏ Ò¦ ™’àÕ Ôý§ò‘ìíÄî ðñò°öhø»ø›ýZˆ¼6%ìØxû ôïë è¿êóˆûÿ¯1¯ ÿ ü#„ H^°úöÎô©ñzê[äöã4èPí¡ô)ÿZ Z g@3Ê[î nŒûùºöÜó=ó=ò„îì4ð¿ø£ÿí> *i´" à FÂdüKöçñDó¿ø3üSüûý@@˜ º WþIû–úyö îké6é>ë¨îŠõºþq~¨2 $•X½mÿ«ú—÷ÌóýðËïíè‰ç­î«ø I'Ž?ñ8r¾[ ÔöVî—ìhíAìRêë?íÌînóÄýÃÕô‰þ! y @ œ®þ˜÷GóKïµí”ñúöÚø¡ø«ûX#- R"W¿ ÷keû÷Žópì‘äŽâ²ç_î;ô}ûÈ”ß Oqº³Ÿ"ý•úÍ÷³ñÏë²çÏã,á¨äKïçù ÑÅ P ï_¤+XT þÿ¨ø˜ô2õ õ©ð{ìí±ð÷ôaûŒO ¶ ÷ ð ð ¹ V ¬ uèþ+öáòºó™ô]õ:øˆúJùÄø¾ýS í2€ ûæÌ üG÷óáíåêÎîk÷þçÙ] _Ùy Ç“ü+ö0ôßôÝòöìÞèÂé¾ìuñúº† µ ¤ MhMù$x ü§÷Áô¯ñDðñ~ðWí2í…óüp™I © ¡ "ÿ ñ v U+ÿ-ùìñëíÐðEöúø1úý¿i×<ÖBÀì  ÿ³üúØó©ê•äßâ:ãÀæˆï¨ùŠÿb ùSJõ_ˆ–¡ßü³öçò%ð¦êIäþâcèåïøöTÿ™ 1 "žTþhs6þóö’ôoòâí<ê“éØé×ê&ðDúª~c »lÐA±PØ 6´ü–÷ ó°ñ¸ôx÷0öoôpöûîÿãn ÝL )ŽÀÁÿ)þûðó¶ìÚê¹í_ñÃõ`üƒå$á À ¼ ¶ ž*þÂûKøóûî\ìÙèÇæ³ê=óëú³ÿ*ÞW ¾ ””P]é /óþ:ùH÷øÓ÷Øó"ñ7òõô¤øÿ w oœ©.<xPùÎñ¸ï³ðBò±õÛúþ"þkÿQÛ #cE¥ E$#üÈö,ò3íFçÎä@é}ñøåý|0Á Ý 9p1âË‹ Áîø6õPóÔîßè¬å&æ²èëí^÷öÕ, Ù¯ÉiÂSš ÿÿÄù¯ôðÕí¬ìŸéæÔæ|íFöUþe Uú  3–ž 'ÿ'öKñ<òÿô.ö ÷¬øðùiû; ø Œy_ ›YÃ.ÿØøñ+ëtç’åÖçÇî\öûcþRg Ûk,¬+? ¡¾ñýúaõ4îÔç·æcê´ïlõ³ûöBÅ, xžF€!½ÿýúmújù¶öôøñð:ð*õ£ýèœ, Ö á ‘‡ – ò sÿÀùûôòó÷ùùYúwúªüL£V é ì¬ÿùü»ú­öpðë2ëTîóò¼ø6ÿ?$ ‡eÿÖ[ §:û´÷Yódî9êäæ®ä¾åâë)õžýÿL „…¡ÊŸÞ$ 3Àü$÷£ôÓó¡ñîïë¦ì4ðö>þ•„ ¿ ¶ Û ö S ; Ð,1ûôð÷îŽïò‰õ&øúùFýq £“ÛBý Ï ê úù"ó?ìFæÜãæ#ësð)õ5úxÿÓU ød¦ƒõ5 ·£ÿ©ûÁõ­î>éþæ0è¸ìÛó‰û8[™ <ž»0 úÁýTùcö^ôVò_ïþëëQîpôŽûe i Ø ² Ä ­ sž]ûŽ÷!÷—øÜù9úÍúüãý‹ù í # ÛJYþAüË÷ÙñììËêxë ï4õÚû®q6 …)š¤ gû ýµùlölòTínèòæ”êjñÞø»ÿþäI ƒ š>Ó'ô êpýø;öÊõ’ôÒò­ñáñ§ó8ø ß² rk¬ 0 â e X¾ßúÁóAï"í íÑðuôfö÷Óú}Œ“{²Ç Þ §¢ü>ö~îµçåªçÏìò}÷áü/3 &­ µon@Ñý ùó[ìôæŽãùâùæxï‹øÿ+ ù Sóûì‚ 5ýuøºõçòî³é+é ìæð÷(þû`Mˆ Ž O ~ ÌG¼ú_÷÷Q÷1÷ý÷Zùçùoûz·› v@XÉ M-7 üõ8ïYêÛç%êäïõÒ÷‘úÜþrlóŒkæ¬ Å¥ÿÒü0ù+ó!îéìHî ñ&öòü¦6 . =%' 1ÿÞú’øÐõ“óÛòKòñ”ñ·öëý}zà z ¤ i  ˜ E 6Îÿ~úÙô'ñòNõ ÷r÷Aù¸üL†  Ív kS#þxûàõkîùèAçåçêòðcùdÿ…a·Z•q4 Aþî÷;òµíXè°â áZå0ìÇòúùÊš÷  ¦¸Üô“ 2rýúÐ÷‡ó,ïí;í­ícñ5ù“a¾Q  ê É Œ ÷·ÿýøEô~ðýî0ñ*ô[ôîó ÷Eýç }Âz³N l64ý&õnì†èŒéìÞîTó›øÀû þ“À C ÌÈÓ³éÑÓþHùâó;ð¦ì ê+ìÏòLùDýÜ£¨ C 6 "׆ €Ê–üŒùÑø«ö½ñÓíîþñ¯õêúa}`gQ š 8 ”@3þh÷`õ¶öß÷lù~ü«þ_þÑþ±é ¯Ã³X ¼_ÒÿÄû°õSðÅë-ç¾äGè´ïžõìù ÿ) dÀ?n‚¯nZ{üù6óÃëZç•çÍé2íªó×ûVÐA çô =e‡ÿ5û;øRô‚ñ¨ð¨îåëïìóüÃnâ 9!±ÙµÃ¯ƒûCóàíÞíÖïð%ðßòªö"úzÿ 3‹ŠC:Ï ý\üdó…íeê'è‡è/í—ó¥÷}ú(¼ü õ>É¡  é ±þqø‹óžìÐå5äªç?ì˜ðlö(ýœÿ rÐw#Î_ªý£ø?ô$ò=ðÁîxñDømþD~›N× Ëÿ2ûÙ÷nô ô\÷IúYúú½ý`M *fL$†  ‚µÿbü+ø\ñ:ëÜéÀëíƒðÿõƒû³þ¡¾ø4°å2 BC- ü]ö8òRïìÉê ïãö?ý/Q  è a .—‰~áû¬õ6óóéñ7îŽì]îÐñ@ö¢ý© b Ö % | /Ûü»õ›ò&ñüïJñõç÷ËøŽû[æ X¯E x‹‰ÿ<ø+òÙëå-âOå0ëÒïô?ú¶ô} ¡]NÏDa* *לýöõíCç¹äàãæÑìúôú ýþYg š*“?Ë wFÕþ‡ú;ø‘öŒòæí£í)ò¹÷Ôü™Ð9 & … *Q  ïKþ ö´ò,óðó8ókó…õw÷QùVþ›: ¡4xÏ †Âð3þèöòÂîGìZíKòôöÔø„úüþ‘" ‡vê< HH ýYúSöœï,êþéÏíFòL÷½ýþâVÉ ]-6.ê§ÁügûÎø[õzó‚òÿðÊð'õ’ü"*öú d £ÈÌ Ÿûœ÷‡óŠð}ñ-õ‡÷ø9úgÿ V ×øŒaÀ! ©bû3ôëÆätãÑä"ç©ëiòøÜû] xà)½G‰ 0 þ¢÷pòíqçNåéŒï6õxú¨ø Ä rüÐî3rõ–úŠ÷}õzñøìbëìŒîªò"ú$ö` v ¯Ô‘‚w aû5÷ÑóqñÏñsó…óóýõSüµ"ž ¤|?å )  ~ŠÿVúWóJì‰é®ëïÑñ9õÀùrý¸¾8·àR[ì £ ZÿÜøCò¿í¢êæèÐêÇðÙöEú#ýS}© o”Á• Bo,ÿCü‚û3ú¯ö™ó)ô—÷^ûÀÿü0«¥xéÐþNøòÑð:ò™ó¦ôøöêùü&ÿ¾Î 5'aØ ›"éùÝòíbèBæémïêôPøüð ¼î—÷j4 © üéøãó"íuè9èäê<ïâõºý—Òc Á‹ÞR8" ™Ûü"ùÇôÏð=îìêë»ñšùðÿß= Ï N % T€cûõ|ñòôdô¹óËô øüS: ¶bЀ. ‰ u:úðð ê‘æUålæqê»ï³ó+÷ýü ¨3>­Ä J ·þOøyñMëé>ëýîZò;ö{úØýNò Š ú³ ôΨÿ‰þ¬üÄøÏô×òòÌóê÷Gþ‰ÞáYÅ j  ¾ Ð 7ý¾ø£õÍóÊó©õ=÷ ÷J÷\ú‡ÿ¦ Ÿâ'œ  S«þ×ø-òÃì}ëåí\ñõzù¡ýÒ‹q :3 ¿ ¸.yþ¢ù·ó¢îbëné©é–íõóÚùTþµy $ôØ0‘‚ ÷éÿ›ûûøX÷®ôñï±ðòôrúÜÉô =  ? ¾ ¹ øÿ0ø§ñ•îî»î}ðaóPöùný¾ô †Ùö?– y ³ çqü·ôPíÜæQã/äèìðõû^}vCÛÖ ¿„ÆÿùMñ—ëwéKê]íŠò0øKüWÿYü®ÔA,Qé Û‘8ý¸ùVöAóÂïÊìõìñ'÷)ýSTG²Í S Ck ý 'ÿ~ù:ö"öQ÷_÷ÒöC÷òø*üg"Þ ;… Z ®¸-(úóÛírëMë[íañÄõðø©ûI» H]³b ù­«üõö ñìðêËíqòÿöû|þã+5q *`  °¯þôûRû{úøcõô˜ôúöüí…+ ¾  \ Á Ó 8˜øyò¡î­ì7íÜï¬òwôŠöûÊðÎr%ñ€…è  Û“þK÷sï4éçÁèŸëèîõòv÷ü³A fã·ï HÐ OXËü–õÀîÏé ççÖê5ñ÷‚û°ÿªç ñK    ”‘þÓúø[ô†ïSì¡ìâï®ô}ú”¯;tÏ B ý ò ë}þÃø®õô¶óRóPôÝõÎ÷{û°Ö#RZƒ‡×²  üØýÐö„ð)ëVè5éUìï(ñkô.ù¬þ‹ ˜as & <ã<ý8ö/ñ`ïãïòöú‚ýøþlsO Ü [ ] j ^ýû?ùh÷HöÅô:óBô¬øMþ82V † ² O ! þ ^Ýïþ«ùlô²ñNò÷óÒô‘õ×÷aû~ÿü `øIí @ fìSþv÷ð5ëAéé9ëêï$õ1ùîü”ë ‘ú!/ÜÆ ³Ùfý4ø½ò\ìùæÓåé"î™ósùíþÖì ú÷‰vR ‡ÙýûùrõòñÓð.òƒö_ýsË 2 t i A è ò ®‘ü¼ö2òÈîÁíïRð®ðIòïöÏýŒ v˜—@(£ ýAô´ìné¡éëøìøïïògõ…ùÆT ì©MCp 6 öê ý›÷¯òiî–ì«î_ó÷½úLþ3ˆ ’ #06 Oÿ©üÚú‡÷3óáðÂñxôPøDýL]%˜  0 W ºû7÷.öYöÍöˆ÷>ù,úÐ Ò繑ë¨Óµé÷ûuÉ$T.Âü÷bøXé_èiú»üÍä¥Þøòóýwù-üÀN˯ú<B ˆó‰ôºý ÷üçWä¥õ¯üÊê1èuùýüñû¤%{Ð ¼ L ýNòìôÊýlýNóAé÷æóë´ñù’Mjá" àù ¸YÖùÿÑô‚ï;ìcê í‡ñxøüCûÏþôåvôH Aü¢ôHñLï ï'ïKíñìÂï:ðbóðûˆz¸ªjޣĊ ò®G÷öê?áwàÕæ¶ï®ù04ýFýÊØ ArÝHä 'þ`ö{õ½÷‰úüý‹ÿõû©õòçòŠøÉ, º” ü‚¦ý¾üÂý=þoüpöæïeìÆëüîÍ÷¤³ 5€R å ƒ ¨œ+Y6D÷Óê[äÆéËò©ø·úÞöLñ•î»ð¼üt I”Sÿôrƒ/¹ûÎ÷ë æEçÜð²ýÖŸ Л·”\ªÁ]Øö£ù]ñÃêÓê)ðÐôBûþØûGûOûrüÕW³î}× þ¥öÒð›ôúƒþñüGõïñèbæ„ðës¶ã²Û GÐN² â` !û“ëFÞK×âÜöçÌòÝü“ÿ¶üû]ûÀ¾wà é"W‹ 'P÷hôzôÆôúö õîÜçäæ­îóù½…ð‰½ 9gôžS ¦ £W÷‰ì@ä»åðÇýƒj × ¡ ÿ„ýP¢d½«ô÷ç4æÛì´õ[üõüöøgô‹ñçôI1ëy ùØ« ‡LºT©ø{îç1å=ê×ò–ý7 [í ÷   s Ÿ(> 4ù0ïyêÀìŽóûþþ™ý¥ûSøZ÷³þ¥ m€,î‘ tþ«øýû½ rPûIô!íaé4ðHü¥ä^§ †ªÐÿÒY Ñóýô`ëfæ”ê³ñüøöœ›þ àà ï’& `öèð†ííQññìéçóç ð û{ Þ•Í€ L ™ Ð &§ &Ã÷Vëãhå‰íùî}=Xÿ¶û ÿ& L Е úÅñðñvõpùpûÝ÷sóÄðêïö  ™˜P" 'hu1=ÿ÷ïäèè•ë#ò©ýb Ÿ h ŠÇ † åËb øvó(é8æúé*òèøùø‚õòð;ô^À'àK)= V}1r´ýäòñé5ãqãDìi÷)A2J€ýå E”êvÃýXõ¾ðñàôíún†þ(üþ`ã ÇcTãÂüó¦ïÝðöÈüGüzõï‚êµì<÷…coÌy$  ? çJì ¼ý£ñÞå7à<åhîEøÿqÿÙþNþÎý?”*Á–»R *˜øƒ÷”÷¾ù¨ü½ù[õEñ¿íCñ.ù€¢å¤Û  Ø i ZTÿYôsé'æeé‘ðDþïü cNRþ”¢˜ŸFaó¾ò ë©ê>ïÌø®þNýæú³öóþø©4†´|Ý? (ÿüþ·ÿ7þn÷?ï›æÂßóßùåð]ü‡± z † Ù ‡  @ Diùuñ‰í°ìòüøÌúpøEôNòòô‚úÙ?º÷ âvú*ùîúKÿ™sÿÃöî¥éÈì&õó ä` ç õç 6 NWýgôÔê˜æcèfìÆóÊúþÍpšÈ\ ´ÆTf tðù«õ‡ò‡òõ3ô[ñî•ëMî­óQü— wHh öLWø  þ}ó¡èäÉæí±øEˆ:þÍýØà hh½Ð5ìúÂõ~öø’ûwüåøñõóò™òøøNÏ 6š$œ Ɔÿþ"ý¤ýý¿ø®ô îƒç‘èÕí;ö¥ð ´à Ÿ OöPŽ gþ¶ðêÝæýç¶î¼ò ò¿ï¹ìóîR÷H –¿¤S•ËûAüTó¯êWçMëÛñŠúÃ/Í3…«H Ï â• 60ù7ð<ìÄì˜ðÅõnù¢û€ûù†ùŸþ2uB ÿ`øæõ$öøùiü‚ù+óóë²èíRöc'äT… f © K øuë×âqâ‡æÚì®õPû üªû¨ûÿž„:>mV' {ÿÈùYøøQùÑøõ ò½ìîé¤îö†ÿ’ v©> «¼²õ^'ý?ó¡êêîš÷,å E j¶ ý UKÿ\ù7íYèÍç¡êZñ)õLõô“ñ[ôáüü¯ePr¿ ÈŸ=ýüö~ïTçYã:æëÿòJüµ‰õ  Z u µ3Ãc (þºòíªêëìôñ²ô‡÷‰øÁõ³övü ‹ƒöòš>ý“ýÓÿ(þú–óžëCéïìÒó—þ 9 ÍP7  -5ù6ð™ëáë7îýò*ødûþÒÿ™¦ò ŒæØÎ¨Z qÝú¡öþóÅòÂð•îðëØçæë¨óoþΕa C 0 ¿ T¤‹òÿÈôRì¸ëõï²öCýƒÿÄþ¥ü“ú¿ý6 Ó` VüÕõ õ¶õS÷Oùi÷Lô½òNòÁöÿMµ ŠD_m ylx÷ ÿ¶úõñ@ë’èúê…ïg÷²ÿI ý ¦ ¯ à !ùºº ô{ùîâé[êÉîæòäòðòŽñvïôÀý) ßVy ’4½%4ýžôì•å¾åMë¥òüb/@pc u p¾)Ôî÷åòMññtõHúJüþ ý`üôþÒ& GHòq´ûÝõHô¼öÙ÷õòòìoçèðüe ÆzŠh‡JÏîÅ{°ùbíÏæ€æŒêlñãõc÷8ø÷ÍøÝþ‹ï9(U|yïýÁûòûAüúqöEò‘ïíð‡õSýD—Ѥ\ °p£"ÙLõbùùïMê×êCðEùù2ã²J/ià7Hú›ñ:ïÍðZõ°øVøÜ÷—öNõ‡ù3+ ¤ûs=4¦5Y(Dÿgùó?ìÞå'åªçì,öwþ§`: u Qåë>Ápx nÿ`÷¦ñ[ï¢ò)öé÷ÈùSø]ö‚øÅü·h£V®ÿÛÿÑûúÀümýÔú@øó–íÖíßònüG «+¤4 ² . Ñ ÏÿþöÒí¯éºèÁêõïªó’öqúWýÚ²¯ eu†‰ ÒSþÞ÷Höïô¥ò ñ#î$ì1í8ð3ø>q z”é W ^ý ç ÓOú±ðëÛéPîxõÕù~ü)þXýÛýa¼ ¸ý¯Ãd ½~ýYû‰û)ü@úË÷böõäõœù)þ|– x Ç{} ~.wÀÿ/þiúÝõíðíÄë•ì»ñ.ûy ‰ q =!í–{z¹¸û©ò[í­ì»ðÿòìñPð¾íWícò/ûû šVí² -Ôø³þ\ù˜ò—ívî‹òeù,5ès æSˆ² f õ u F=üô—ï§ìØíªóì÷ ûeýôüWþ¤úâ bá •Nþ¶÷hõaøŠùŽ÷žópí•ê^ì®ñuýT v'=´ Ì < 3é áóÿÇônê]å¿äé(ðrô¸ø6ûLûjþX ]„E™‚l‹Ãûeùwù®÷Íõ'ó¤îÜìBî\òû«Ï ¥XÆ ‰Õ çùâtÿU÷Ëð íeì•òTü¥Ÿ V±àìú } Hzø ðDë=ìð=òuóÛòÖð™ñö¹ý}Œ§íå¹D Ò ‘È<ý‰÷@ð®ê©è¿éôîö€ü[x³U hç¿â ŠûËô‡ïîî:ó2÷­ùDúuùËùüúþ†“,5³ÝüNûþmþsûìöçðËí¾îËò±ûã¿ L ¤ t?ý _¯žý ôáíëYêî_ó/÷wüEǵƒ +#½Þn›êâeøóëñkðð÷í³éƒèé‹ì±öj€ q~"&  e CÐY ݶùòí¿ëWñ\øÝüsÿ¯þ,þ`Ó }=© =ü<÷çóIôõqôSô.óòQô°øOÿf †ŠKH :Ö$þ\üž÷ðï ê¦çÛçÿíÑöÇÿ´×ß? Ü r Õ%ÆGk²úGòñì1îýñAômôØñ¸ïñ$õoý6 ÔÔÉË „Qiø+3ýTö¢ï8ì‚ëUîõ®ûBšlñ“û¦ T O EPÿ¥÷5ò±ï‰ñö~ûO÷|ÿ¾ÿ$ O¯€ # úbó²ñ¨óãô¬ôñ×ëêœëÂñãýù g.Ö Ãu“»ç¼ ê#÷7ï+鄿KêÉï ô!øÊùÝú”ý¤KÑ §Dà ׻þÚøb÷=÷£÷&ù=÷×óPóôø1ù¬u(» ›¶½êÿüCô›íÉèéaïˆ÷G`±W¦¯\ ;kï X`ûÈò<íîñ1ôö0õ4õïö‚ùõö Ìuc£rÕ Q܃ýÝùóí´èòåTç†ì~óŸüjö° P Ý 3 äå,cѾ÷Yò´ñŠó¬÷Aû~úZø¥÷‚øýUÞ Ÿ¦0 ­õþSúþùzûáüBü¢÷êòŒðlðoõ¾þcé × ­ [  ö “ -Oþ“ö:ðýêé4ëÒîôùÞüU/A ôDᨠû`÷ÔõMö(÷Kô4ðîîJòDú½ï HÕ¤ V… Þ t†ö£ï<ëƒëñZ÷ ýI;'O$É èêc1 Júaö´öÍö=÷¨÷öMöøúÞÿ#Ï Üx*Œ ºÔÿÓüûSùôrîhêÃçšêdñ£ù=¶ A »"c†ÖžÏ]úò>î"î?ïìñýñÔîîîïšô¥ýÅ`âjÓ´ ÀD–0Bþrøôiñ½ð†ôú§ÿg¾ Ê Ï k î ý V ÈXüxõÞî¾ìîò©÷.ü“ý'þÿ$R[3¾ëoÿûùÍ÷5øäö’ñöìšëæíßôþ  !‚wÕ ˆ Nû O ‚MþõÝíKéré¢ì ð¶õ'ùûÿýýo $ûÜž'BŸûPùá÷´÷L÷%õ%ó‰ñCò¤÷pþ@S S ‡wßïÿ||üùõšð’í|ï‹ôˆûIV ö ÷ Î V –k?í _Ð÷OðáìJìÜìµïFñŸðàñŠôNùÛ ’Âû[lq “b/üöIñ–ìmé´ëëïTõ ý_ ©î 8 Ï Y ûózððòn÷ªúöúãú\úúüYž Wkò“'ÚVþTüÿúzûŽùÉôñï?ðRõû A ½ ¬ :  ” `?2Åû?öñ íxì…íCð(õú>ÿÝ‚ ƒà= ú<õÚñbñòðïÙìYêìêkðË÷…õÐ <ã t ' V Þ “ ~ßñù¦ó‘ððñªô¨ø£ýÄÿ0l1]Ô “ « ¦ :Äüš÷;ô~ñGðµñìòô|÷ùÙü{šX ÏÎVÔ™ ûq¤þüÈøOôï êkç7êlï¶ö,ÿOx  ” Û ™sÍ8Å UòùòðoïÒïØñ7òåñ óKõû®´Êžø.ö ù‚³þQüWø¶ó"ñôîï.òæõ´ûù¢ k µ Æ ? m )Ü/þ÷BñüïŠðÁóóø»ü24䆴 .[ÞXë ýÚúíö8ôŠò®ñ$ïºìÌê«éÖíèõ#þWã¡d–ä`ƒy ]“‚ø×ð2ìÝê7ëšîëò§õÃø¬ûYþüpf ×Ìd dóþ®ú©÷ÎöŠ÷s÷m÷ÇöeõÝö}û´ «r³¥ <msá™uý<ùÝó í&ê™ìBñË÷äþ#w¥ [ ÁR“i "ú³óöðpï=ð<ò¼òÏóõ”÷Èüi² ¼„“»-Ñ »ufþhû ÷õòï­êñèVêïí#õÈü„üŸ £ è < |><æ ´þŒö)ó9ò9ôH÷XùLûùúæùý5h² Ñí Ó )}þaü(úyø€÷9õ|ó.òhñ¸ôúYÿñ[ Æc_oÐ ý 4Äòû]öîï×ëÃéé‘ìñöüûO: yÛcÿSf ½Sý:øNö?õ’óóiñ%ïôðÞõnüDà G à m J º O€È3ü’öõðºïBñ±óŒ÷ úÈý³© 7 l×Ë ¿ ÊOíû@ø½ô[óó†óëõ„øeûKÿ¸ Ãd‡ø å½™þëûÖùçõcòÒîèêê¡ìfòúAq ãoFÊéˆ4 üÇõbòðLï¬î]îðnñÜóú½K ¦s½ Ê2·=ý¯ùø2ö£ôöí÷¾ú)ÚÊw ' x © Š^—1ÿ úòóµï?í³íõñËõéø%ý¿ùU ÇTMHg/tüÊøåö]ô.ñ£ïçíjíAñR÷Ýþd -âÓD§'å Ãéßýq÷Ìðîíeíðeó—÷lü»ÿœPÙ ó¡rù L“xýÿøÈ÷ŠöHõøõö2öï÷aú©ÿB< ù ï B¬(Ƚÿüùúô`ñÌðfòp÷,þ¡Ë´  5 =ªª? F¡ÄøóWï5íµìdìðí ñtóå÷ þ¦Õ .BÛ6ˆ¯r ÁLùýÌùÂö6ó"ð¯îvîµñ¸÷gýV D  ° x ü ] ûïú_õÙñ¸ñÐôñöÒøÚûÔýèÿ=…T 6bŽd õ‡ÿvü‹úÕöPóññTð’ðAô²øòý2ÿ0 zTþdn ô}éÿ üÞöåñüî1ìÅëùî2ó/ù˜ÿ d±“€Å Â&üÈöÉôNò ðåîYíLíòîuò>ú6E © ƒ R D d C á­°þIúÖö­õ{õM÷£ùéúþúÉXÖ ¤ @ ‰ í%ôýWù¦ôñòï¬ï%òëõ¢ø†üœÐ~ ¼(d|GÁþ´úþö¡ó:ï}ì|ëßëÕðøÜýhõü Ó QÏù²\ ra¢ü®÷KóòòìðÀñ5ôÀöÔúÿ}% ¶ @Ëc _ â"ýÝø'ö¨ôËò•ò¨ó&õÄøBý ±  ¹ i Ldå²,û)öÍòðÈðEôð÷üxÿ%ú3 Z Éñ Z 9yþñ÷êóòúîrì¦ëŸëÍíŠñÞö/ÿ¼¦ :Z³?Ïö’ Âþ‘ø×óhð€íÃígïcñöqú“ý¸öZa  Ú a ƒäÿñúç÷¼ööÜö<÷ ÷sùüòþ…ñ ï Ħ É ìU¾œýáù¿õöðCîæìŒíÛò ùÜý½/4 ^ „ :Q{¦ Nlü ÷(òWð¢ï¸î7ðòòCöû¨ÿ½Ä Ünd° éº$þ[ùŽö™óµï%î]íí4ð‰õ8ü0V' Q û Ö ² Ï ,ùîü,ø!ôôÌõo÷ù§ú)ünÿ'›L ± ² % ÄJ9ŽûÐøoöEóšñöð£ñ…ôv÷Žû¥MK øñÇZ» t ®çþˆú`õúðÂì^éé;ë ðæöküâð #W ¡ AvýßøcöŽô¡óòêð£òõ”ø]þÝu€  µ }  P#Ëxý×ø¨ô óØññSô ÷­ùþ}*g R —Ø­ _Ò Ùûö°òuðð óöÛøµübÿ—i~ ·Zµè <VíûÝ÷êô°ðËìôëýëÏí¿ò¡ø—ÿþ¸ ç #ÊŒrý= _dþTùGôpñï¯í1î‚ïFóø[üÓYÏR D A ì «„£þ§úØød÷´öd÷Ø÷ÙùwýÄŽ  ¹ Â Ð å øè‘üB÷ˆóëï¡í=îBðbôvù×üë þ Ñ %ôí Üü†ýOùPõPòdð.îWî7ñ ôšø’þ÷U q ž™¿´ž R ÎûÚöó<ð÷îðYñvôù‡ý‹ÂC ! ð o< Ô Ìd%ûÊ÷;õ¥ô­õÔõ™öžøâú¡þ(£Q = • åýИþçû¬ù¥õ9òtñoñó@÷BüôÝ l ’çèF–­ XÄþ´ù ôdïÝì¥êvê‰ìPïBôëù”þIÌ ù s|!Ý ÃGÙüú·öÊó¤ñ¶ï‚ðZó ÷*ýÖø«Ú ™ ç u Ò}þÌùEõÂò£òõót÷^ú‹ûaþð l Ä òW šh‘ÿWûÆöŠó¦ñ,ðñeó{õüø)ýŽ5ñ 2o~Î . åû¤÷^óîwìôìðî3ô¼ú&ê§ Ä-2±P\ Iüå÷ô·òÔñ¸ï<ï„ðñòt÷dü|àÃ Õ 1 E   Ý;[?ü ù*øö`ö,÷ùfý‹H‹ ¹ ÿ Å  3¸è”{üÐöòÉî#í°î)òö_ú‘ýª| ¿Ë7›•æ ‰ Åý©ùHöÄñî®ë&ë»í«ñ·öuýþCŠ yœo ¶ ‘fäýòøõòFð/ñ¥ò`ôøý :_g RÄ o Š7ÿ>úb÷sõ§ó³óÈóôœöôù!þð™á á X a C ]{}KþúœõöñFñ”ñçòÝöûÆþë? <AŠúc &;ÿfúËõañï'íoëHìÆîâòŠøäý‰ \tG5£x ìzÂþTúKöjòlð²ïÎðôó!÷Üú ÿÖŸLŸï \ Æ„rBýùù`÷hõ ö‡÷øø¤ú£û þ®Ã ‚¥¬ —¯Xþçú-÷Çò‚ïDí”í«ðô­øÊþ[ê ½ ÷ärc ú­vûhöò9ïÔíïuðKó.ø«üFþœ Æ d¤ø#Z 5¶hüåøÎõ óñŽîŸí¦ïþòBøÊþ@œ¬ ± Ä   ¹ á ðÜ‘úWö õMôŠôïöFùˆû þÙ  å J /éÿmüÃ÷uó’ññïsïyñüóE÷Qû6ÿ¼ô ¤žENÖ Cð´àû\÷\ñÛë$émèðêðYõ<ûn˜•÷ #|_x· rÿîúŒ÷¼õ:ô óNó"óö–ú#þbŽ&  * I ¡ À8¶þNû:ø*öqô ô;ô5ô¡öû§ÿæU æ  ‘ J Ä ÚëBÿÖùLõiñ6ðñ)óBöýù²üêÿ’| 6¢æÛ ër€ÿÖú÷ó^ðîÍì¥í6ñõÂù<ÿï É vr$(t³ {Óý¹ø…õ„ñCïyïµðšóþöcúúþÃÕ9 ë Í  $˜çý>úLø’ö<ö÷æ÷­ùåû’þUíA ¢ìªÝ Ö ] &þ9ùõKðãì+ìöì³ïió°÷|ýpoŽ ÕTÝKrby“þ¾øÊóŽðCî íííDï³ó(ùÇý 7 kƒïÒŸ I LC¡û¥÷ªóªñ•ðËïäñ‡õ%ùØýˆÐ× £ Rƒ S q¼Ýþ™ú÷ëõPõôÖõv÷ƒøeûfÿÛ£a ¦ x ×J‹ÿ6ü øõ òïÄð:ôøØüH¯/ ¨ ëá>ƒ ü A—ÿùfô³ðí³ë[ì6îhñÃô ùŸþI~ =MµUä ¦ ”1þÝúøbõ”òñƒòöÒû„ ü—.x4J£ÀÿCûö?óóTô¾ö¬øèú†þhT I @œ› ñü¼üé÷"ô°ñ†ðßðôðóñõnù©ý¿³ ¨ÓÚ? ›à< üÖö9ñYí,ëìÂð1öVûv ³ 0v”ÔÕ FçÊû øÞõ;ó³ðTðjð ñúósøþE¸3 Ä h u f ZÍ(þûû3ù)ö“õ ö÷âùîýÆï } — » µ í gOÓúŸõÙðfí¤í§ïcòÈõløÀûKŸ8 Uü¦æ© oPÄÿlûpö×òˆïùì}ìÌíòÌ÷0ü'“Ï í ¾¢ ¹·FþÀùEö!ôYó0óXõøøWû þŸ}†% ¿ %  GÊïŠü‹ùi÷'ö…õFôKôMö§øzüºÊ  T 8 « ç%ºØñüRøô`ñÖï ñäôGøäûb9É 2€xà ì M‹þëøÓôÿñjî]ìíñíéïöó0ù·ÿÖ‰ `³¸xÿÑ `ù ÿÜù:õ«òØð·ð ò–õ úþšºb…) `  QQuÿvû{÷5õ“õQöV÷žøÆùhüÔÿ¹£ êL<Î …·ÿ¸ú–õâñî`ìhì³îóó™ùÞýòíV KW·MÃÀ ½šü–÷óYðQï(ï}ñçôU÷¯úàþ;1 Cé©ü q„þ¨û%ù"öòÓï©ï³ðõ ûkîst‹ ²  h ¾ ɽþýùˆöRôhõÈ÷ÿøûúžýûˆ^ð ü Ý Ö ?ãìþ³ùö­óQññ„òeóÔô+÷Ýú½´h x·ç—' `ÜG»üáõÈïÈësé’ê«îéóeù'ýÝÿi› „³Î çýúóø<÷óõ`õnõ/÷hù`üa¯E— ©  ê':Óÿü'ùe÷õóŸñ¼ñ.õù8þq¤ R ¶ ¹   Ü ¬  ™VçüÊörñàî¨îðóeö`øÍûÿ›M j&Â‚Û »èÿTüwøÅôêð„í—ìÞì{îIóUùRÿT ÌP` & ò­þùÈó­ñÿðˆð;òõé÷äú_ýãKû Ô ‰ÉBrýIûù™ø]øH÷x÷”øÿúˆÿB g íÇÿ › îAÝxÿ·úðôÿð!î<ìpíŽð­ô|ù*ýß € °èÊVÉ Âãüù(öóñÕïðò=ô%ø#þ b€ ð øEÚ ÷ ¤£Ÿü¥ø1õuò«ñróÐõ1ùÊýOƒ ³ Ó ‚ [ zŽÿòúÕö õÍôõ÷÷%øºúÐýÆ¡ Ñ=õ ž ¶‘SyýîùCö*ò^ï_ïAðµò øºýÇ; ¨uÙŠ¾© ƒmÿfùñòîí"ìnëùëÉî÷ñpõaù<ý¸ içºy l$Xþùû+øôÏñQñqóô÷Úüõ…0ÓÀ©ÝÍQ°Úþcùïõ=ó›ñ£òõø5ûéýêOQ ¶ yoÚ XüÕ÷xôÁñ¼ð[ðÍðêñ%ó²öœü¦â5Þ2(U ¦ mp‰Áýš÷1òùíÄì²îÉñ…ö ûØþÖV· êï§&6 a[µüOù§öEõ(ôQòTòjôöüù—þ+mÙ ”  Ì •ðÁ®ÿ²ý+û<ù½÷°õõMøJüGð@ ¶  _ S ë ñ,ÅþáøÎòêîêíîúïEó:öWùÚü ¼7 ¾Áòò´; e HþAúéö~òýîÏí»ídïêò°÷·ý굫 P å Ø   ë ãýùõ›ó¼ó…õÙ÷$úªýÛçïM ³ 8 é 1 J=&þ‡ú4÷ õ2ôƒóÅódôpõùîý±Vê ÞÙ T 5ºqžür÷RóVðïBð6ò”ö/ûÚþM«Q ¶Ï_X¦ ožúÛõòÐï<îïì3îñBôÂø&þÙo 4 (¬S=ó –örÿ©ûã÷ÁóòÄò„ôë÷—ûºþŽx²ìlX(§vþú÷{ö¥õÊö–ø™ùjûþšy• L1® n ú^ý}ùzõÍðAîÖí¡î.ñôùÊþh8  .!— ž;­ýþ÷tóúðAð’ñ~óö¶ù¬ü®ÿVâù CØŠŒ mt)ýÀú—ø•õó|ñÓñFõ“ù þBÉ—¸  è ' ñ$]ÿïú¢÷+õôoôGõ}øÒûºþµpn ß " Vœ Oþùôañ¦ðDððÖñÕóö˜úuP,…øˆ»é š =ÃÍûúõðoë†êáëÂîZó…÷TûUÿ§ñÛ Æ¼§¾A ÍîIÿ®û[øO÷ÝöYöàöñ÷Gú ý|måù … à ^fÌþHüYúU÷Dõ”óAòÀòðô‘ùÄÿž¨ 3 – ù L ä9ýâöâò×ð}ðòŠó˜õºø`ûåþçpŸ äöq­ / CXüüøòõóïð8ï„ïDòMõ´ùÞÿ*S q '‚zÄ œ â 2ØúýUùÓõØò9òhô‰öÀø”ûËý,©×ó ‡ .¸£½ý^ú)ø|÷¬öwöÂ÷÷øÅúþ5=ã ÄÞ ˜ó  )qýøºó#ïòëÓëíŠï ôùkþe²Ÿ «^gDè Ëkåý†øËó¤ñ<ðxïEð.òºõìù»ýÑ9¹ RÑ ™ ØþJÿBûNøRõïò ò²òÑõEúøý!û÷© D 6 ¡  Ã!6ÿ=ú÷õüóÞó ô”õÞ÷>ú“þÝž éˆ2 w‡ýmù×õÊò¸ðÅïCñôŸöšúÿÿÒ SS¯q« ¦ NûÞõVñ¨íÏìcî)ð¸òödùoýþ g ©‡>ï [ 3.ºCÿ±ûØø ÷Nõ‚õø3ûÇþÇóɸ\ ;œþûº÷tôWóíóQôÕõðø¹üî~ ©ox“û Ì`#ûªõòÃððïï–ð"òcõmùSþë¯ .Y‹ 2 ch£ÿzúûõžñÏîzî@ðÔó÷%û•ÿ•ߺ /gbÖ — …‘ÿÇûØ÷…ô—òò-óÌô¤ö"úæýü’7! o K h 8i·ÿAýåú¨ø=ö2ôGôqõ`÷Õûa y à ‘à ™ [ HΤþÉø›óïõì íwî:ð¸óÌ÷Øûä5ˆ ^C€¢ ®¸ÿ»ú"ö8ó»ðgî:îÑïŽòÀö…ûéðÍ — — ] o•þŸúú÷‹õõ‰öù ükþ0Ãü " è InHýèøtöDõ-ôô¡ô¯õý÷éú÷þ+…ù µk‰• À †ÿ8û”÷•óñPð9ñßóéöáúaùá Ó_[½› - ÿ‚ú¨õÊñ1ïuî¦ïñIó\÷RûSÿC ~ Y¿8wÆ ÙƒMýÂù°öõûógô=÷¹úLþ¹ýÙ5•Mi[n°ÿ û=÷ˆôRóñó¢ô¾õvø™ûPÿ è 8#¹£× ˆdüdö•ñï0íìRíâï_óø;ýn1 Ñ ’‚”Ç Wæ•ü¢÷2óüï¡ïóðcóBöuøû²ÿ‡2 ½OŠ, Ð;þPû¿÷àôŸòòŠóö…úgÿ¢œ õ  V & #õ±þZû»÷AõüóSô½õq÷ûœÿæï L  Ÿ  \ B Ø»þÙùnõ–òñ,ñçñûñUóÙö<ûÜ@ê Y~ ÀÜ V å˜ûÀõXñïÒíÌîèñëôøÑû‘ÿ§ò ç ë B ¦(s¢ý,ûÁùâ÷m÷ëøRúèû%þÝXÏã j # Ð2°þyû.ø&öýô¹òñŠñ–ód÷`üǨР¶ œÖx‰ˆ J ïÒÿìù‰õšñ'ïïð"ò¾ôà÷”üc§³ çãs'~ 7ü¥÷qóñˆï4ïûï òiö]ûÑÿ/@ } ZÖË4 ®¡úûØ÷´ôGóåò:óÚõBù´û­þ¯, w QÎz‘ý÷ùk÷šõBõhõzõk÷Œú´ý00a ¼F‹8Ï = Ûi/ý øDóõïíìZí<ðBó÷©üÙ ‹¶]šÚ Í Õþ„ú”ö°òñžñ–òjôôöCúXþÂBx Ò e | þ5Ügþ%üÐø\övõ{õ"÷îùiý\jÎ f Ç à Íi¬ÿ¹û“ø\õÓóÃóÑó¹ô’ö“ù+þ™žè ‹ í Þ A žlW+ü÷ óþðð¤ðéñLô™øßü%ÈÙ &}þkæ ‘þËøÖó%ðîöí¥îfñLô÷6ûîÿÝÐ 6 JÒà  µ¥µÞÿuüIùNöpôEõg÷úðý[íFÏ  ;ÛÀEü[ø&õ]óíñûðEòšôA÷kûkx Q Xá Û¼ Š•Áú¶ö8óîï¯î~î¤î_ð˜ó‹ø²þÄì Â˲ $ P üŠuû(öçò`ñ+ñ£ò—ô'÷‹ú›ýd+Ï { ^l t Ϋ'öûìøÑö7õœô¿ô_ö,ùjûGþX߃ ã k hzÿãûEù^÷ßõ0õ-õ÷ûÍþšÌê ï K š    Ê?ü÷ôòðï°î‘ïYòUõÉøý”š( {þ¥ô´ ‘þÜùVöÙò´ðÝðñ÷òeölúwþ;Z›¼ µ ] ´ £Î€hþÀû}ø*öFö÷ø\û›þùÞO v ž  ä gþúåöÜó•ñDñ˜ñeòpôŸ÷bü²H ä/fÚ… ãeúþ¶ù¢ô­ñøïjï–ðçòdöWú/þE É€>4 ™RŒìúŸöó#ð°îÁîêð ôÜöØúäÿ=0² <‡„F ] yÕ̪ýúµ÷hõGõëöœø]ûÒþ8!â|8Õþ¶†ý6ú¿÷Iö~õ·ô.õœö"øxûs/›  E›'„/ • &Zbü¦÷nó÷ï×îiïßï|ñÎôÑøvý´j ÷ dÂ#ò Wofýßøáõüô€ôÎô1öý÷fúýpÿ¢Š ° .  ¢é¯•ÿLüQùX÷Rõ¡ôö¿ø@ü‚ÿ>A^} ú p šcß5þáùìö¼õ}ôÞóŸôlöùÔüc,8 a V áÁ ¤ Þ”æüÈ÷“ô%ò{ð§ïÈï·ñkôÜ÷ý™}Ë ÏYÔº " ÿ·ùÓô?ñNï‹ï ð òBõÏøü8# E | * Î ¶%èýûòøVøKøzødúýmÿ' 5 V ¸ × kDÿ üÿøÐõÊò­ñ•ñÊñ*ôGø¶ü`š‚  Ç»•ภŒ G7ü[÷hô”òñ_ñ³ò‰ô÷qûÜÿ×s7 } ú × = ¦àÅýXú–÷Wô!ó¯ò ô˜öœ Á.ª)$ûFÄI¶Û(5D’1'VòÑï]Þ ` ïàõ)â´ÏÑBæäßó äüKíúïéH>BI$)½ùÚ'Ê,Ëùëž)óòâCÞ”å[ùà ¨ CyÚ€¾0ø&[ýáÚÜÑcÑ$єܘòC€ú¹ó:i u ÿ–çR!ÕÓMnúßË÷Ó»ç±î"ð¦üÔ )çþóo$* ] ¾/IþYG"uìäá×ÊÜÝQߤó… Й³z¯~7 ¯Yûæð=õmø‡ø4°~õ•Û~ÖØæºó°ú㠟ȇ – ºO%*Û¤¬ìäæÒðòô{ï¾îÐó‘íxàpçÒâ¥$(4%Q""… ÀóûæÜÁÓÜÚïqùlðJì·ôÜú‡üf~`(~vñqc†  # îÚ,Ùtâké4÷& â«ÛöÿŸ =ŠûÉ-iöìùLGûñÖíRéÜNØzéÝþo 8 cQO ¼IÕ ¦¹) 8ý.ë3ß3åÝð¦í¯âOß áçâëå€r ¡”²èœË‡ñªãláŒÞfÞ ê õìñ:çhçˆõõ¤9*"…vÚ=ßÇý2ú­ê]ØfÖðâ"ï&õgü[ÂpûÈS Õ [Nó )÷Äð;÷ù*ñæêþç–ã5áîëŽ6¤to…§["y!1ýSò¼èŸà™ãéì¾î9åkÞiåAð\ûö "4)- ‚9Ÿf½râ Ëô¦áÞ2áÁã¤è¹ñýòpêŸêhú¦ á! (¡#K˜= }G b8û'ñ¯âÜܪè0÷Kûøüôû S'À#š­‘Wøxò÷øMýôòåâŠäçå%ït­šÎ tO…Ú$x%ÃŽú´î¼ìcêéðôéçÝòâéó¹ƒ Ø@$¥VSmR ¾—ð\ÜÚ*å›ê=êÊî®ôÔòÍðÛþs" BïE·‘äù ~úÏí%éáJÛÂäQ÷Æþô÷4÷ße Z"¶ » Qÿ#ýÕùyò¡óû!õ¯âØÙßâUï—ö¿ÞTÖ / ?ÀW1 oògáå]ê™æjä¾è èMÝ‚ÝÏó 3Ø Î/ ´9/ö¸ûžñÌß8×®â%ðízæBíjöŽ÷þƒ}%`!kz [ GÁñ nùçâ ݧãtäèå!öˆ÷þú ¤!†&Q[þ*øÿÿüÓóÒògôWçHÖ˜ÛÉñ¼ÿŒÚ v8>¿ a €%Òh ]üoæËâpð-ô.èûã5ëì£è™õöÿ Ñã>›šË© ïì&éUÞ¨ßÝïöÌéÁãôò2쀆$*ÌJ ÌþÆ ê8Óê`Úgã|òüôóõÈÿ vþÂø` Ä ¯’µñÿøíJôÞÿwøPê6éWëäáãÜqñâ TY ÉîÂ[,ø!±MüOùzìàÀçRõ„îŽÛ Ûì±ôïø¯ Ã!Ç!¿fŒºôÖÝùç;ÝhæäéAâæôöóWèzîF0|%»ª éÐuãåóËñ¹è„ÕÚÓžë>ü~÷€ôˆþ³ý4ò«+A' 9 Iìô‹î¨û3íHÚ-Þvç'ç|î¬=ù¡·²Ÿ.¬ „ yïáëñlè(Þ’åhíÃáúÕjã#ýJÆ‹S#ª± `&µ!._Eñ“Ügà ñÕð7äòäªðŠïnêdü#)#ÛêàÝùì"}úõäçQêÍæFÞ´çöÿ¾bøõjÕ: ¹ú'Î&aþÅIšôGðnùIö³à"Ö´å;õÝõ-ýïe ¬{&t[“¦U÷´æ îóö€ìØáécïØå;å.ý­Ú«>‚ ÉQ 9ß"›äúÇóêñéãÙäåMöùî¡áMèþøûþw$J)u!¯®Z ” Îý â­Ü"é¹ë{èVôlòóWùQà f ßùÅò1ýÕüÉíÔèïsèîÙ"ß÷ÝjŒLú£G&²+Lz ]Áû”æIàýíÌñ…á}×`àdéúè¼óWö¦ ¼Ã2ëYèBç|ë¶ä§â´ï ÷2éîÞþîe Dñ>'06£ À=gþVûDçÓÕÌÝÌïæñPíóö­¿þƒú Ñ %"h)­ö øEûèJâ}è”åàgðf ±Û¹|<'L––ô÷2óJçÓçŒòúí1ÛÔØTëòùùþA Ç…!ñœ ¨û">ðˆûê Ýç”ïaèÇåíîðŽçSêʬ^@‚’k ZÚ/÷fó8ïájÝŠïÜÿ\ünõéýh Ïm "»(/ Œs3üò–÷ûú ê€×VÚ:èsîóò1`Nh73#f•øl 6òíõ·ò¾çRçbë‘ãÅÙðä–þÌ ¿ ÄWá? Î x h±ýªîõÜÝ{ìïðÐæçãOîtóÆóûZ»$@_ H{ ‚ k£ –ôÐãÖä3ç¾â0ç§÷ þÚô<ò <ÏÝÏWp ØüãÿËöúHò²òíî:ß×¦å øþª ƒG @ ¬±(“$*"5ÂôæÛê©óí[àKß"ãÆàÁã÷÷’a+­­Ô–±ó!­¸¹ôÆñôéÞá^è|óéï(åâæcõSª¤ .;) ³ ¿ò7öGâ¹Ý"éñÞðŽô¬ý€þ£ø¸ÿøÅ w™„ùþøÀÿà0öUëÇè°ãÜëá…öþfxžý¼" (Œiø”ìðçIïdòeçøÜKáì"óÅþ’ .b>Éðë—å«è*çéäºé&î­è{åyò_yk·µ D– ¸iűeü³ôÃçÒÝä+óù1÷‹ùDÿˆü3"$¦Ì çO÷Z÷Ýûaõ†å ÜÞ'â£ç“ö<ùä D hí¦0# 'Ì ‚øÿó˜ñ ìnêì…æ”ÛÚÜæp÷ÇÉ Qˆ#g‡XÁeL ýÅëâÄæÙì{ëéÛêÚì•í)õÐP‹¼ªm— ú²xó*é.äåàIäÇïÔù0ù&ôY÷yÕn¢Ò" | ÿÉÿýQúïùéö-ëðÞÞuç ò,üøé³ ˆ EÈ  p¨Ró®ìkî³îê~åóâÜßàëjþi Iâ‘K„ Kÿa÷½íßæóç'îÖïUêcæþéøñ·üñ jcáÌî”6 ³wòå â"æùëÒó˜ûõý-üýE¹ÒÊ!""ù ÚÛý ýøù“ó»ìäóÜFÜÞåŠóþ·§ 0 ·à.¿#z#Æ@Ùä÷9ðŠïAð·ëZä»ßÀßå²ïæþ‘ úIH¶ÄଂýÛï•èøå.æJèOéBçÐäWç¹ñÛ ÉäÒÜ@0íGò âÿÕñ×åQá¯äQìDóôö{øˆøßúz=²OÌ@l”þ<ûäú—ù%ôíê%â‹Ýàáé ÷:Ÿz t Pð <# !ÓÇ óýÈôœðXï)íbèâPÝÞÊå1ó]Ë ,—Àȃ™Y™ -ûíîÂè›è(ìï«î¬êúèÚí®øÁ ²^9  « 6z DnøEêNáÏàvæÝí‡ô<ùDúæúÞ¦ [Þºk¼‹ÿôýtù!ñQè›àݰâð'ýõu‰  üÕ ¬#È’ ýøÈðîgïî¹ç²ßÞÙâ$ìHúg n7Ù–;dÚP¹Yö_ìõé¼é§êRìêêtå+ãöê7úÀÚ{FG¨C ŽÖ »à÷%ë©âîääíÿó öø”úÊüj™ =ß!ÚH%F°ýjü×ýøÊë£á{Ý£ÝcâSî;ý3=ÑâT"b&# D>xûF÷†òÖïÉîÙèßÜZärñHü¹ª2»ƒ‰Ì÷4ýÿ[ò è èÊì ì®é«ê5ë8ê ðûÿTר m0ó äZD ¶ûñEêä«ãâì×ö¥÷kôŸ÷ÈÿÜU n ¨Í.kMûÉùš÷í¥ß6Ý`åÐí¹õû ú Œ }Å#Ï"ó '• ©úÿñcó(òóêågãrÞ4Ú^âõÝ ƒ‹~`ð Ì LJö‘êŒçííÖð‚ëbçëñ¨õ:݉³¬yˆ ß Í÷˜ç/äç(è…ëäô<û¦ø]÷t¦›é!Üì5ßÂ÷‘÷„ñÙê(ßõ×ßßð·ùBý  «  š%'?: OþhñÒï”ôòðåßá@ãµçÇö¼ {”ƒý]¾ “«mõ@ðXì‘æ]ç#î#íä`ã³ïýQ½ûfki 7Î_ ŽêûÖêâÛè¡ñºò–ó­ùËü-úAþ³@`‚‹ÞúJþجö‚èîâ áÝ›à¬ñ~§°¬»«$$>*°O Š’þöÚî‹ðòèç²Ú´Úäåï÷´iw­ Ý:&hR½mCð×éÅîïïéÈé¶íÿëè!ñ¸ãsœ€þDe@0%ø»ðè¶Þ@á—ï´÷ƒóqñù*7o N%U„| L *ÜûSÿ¼ûùêÉÜ”Ýaäúç ðÞ ƒÒ_—æäò"Æy cûáö«÷QñÒè÷ç·æß܈×bãGö_Ó]G!¯°%}"„~ ööÖéËêRò#ï×äsã™é]ì2ðŒÿò‘Áò#* V»¾ üõéaéJèùåí~ùªûôçô…^*ëL$1 r‹Ã•Úü_ö$õYì ÜÖ¸á‡îwóXùßµ ´ #ƒ$"®pMÆþóêõà÷Lî,älãîä÷áºåð÷/ è W wÜAœ•Ž ‰z ÷úó_ëhåÙê˜ðêûà‘ågóüJé–öšñž+« Æ À‡øæÄáKêùîŒî)ôürúwõÊýˆH¹b}W¨Oü²oÿÃòO鏿áà—ÙÓߨò.ÿ6Îý ³‹æˆ'i*÷™  oVôìímñùîà$×Ü{äŠéòó1. ý KÎ~¤Gúxñ,ïÖñŠí[éšì±íøå>ã0ñ‚ â-ßu ¯¦ÊÇüVõ¶ærÜ„â#ïò­ï¢ó¢ûýj™û [#mõ€ Òÿ4Çùèßvá’âÓãJïœÿ—ñÿPx bÒ b&¯ xþÐý`úñwìrìÕåfÙ1ØKç]öDýÒÃ@æå%]¥aóéí·ñ`ëûäç°é[èïÕ0_ˆ pð‰ëõ›îHìÃæ²å¡ð¯úaøÛó6ú¡ :ë<%Vo D}pšù»öÁ󻿦ØÙ7äïëÞðÖûOºÎ›}.&È"s Ømqþì÷ ú÷Œëåäîãòß¹ÜEæ™ùðh‚ Yú`Ï—"!t€³û‘òÈç¯æ.î‰ïææ=â#é>òñø «Q›Ñxu‰„¼õÔæfå[èñç¦éAòø¥ôÖô)tÓKg@kæ&,ÿ¨ó]í÷ç`ÞÞÙìã óùSû‰8 ë »$!*«(ÔÄý *õœó’ôƒìüÞÂÙË݈á"ç:ö<â A ‘ ;3{o¢!é‡$ù±õÑñmë(ëdïÅì/嵿éóW5ŠƒvÎJ :S ¸üÿÂõQçeá²è ð4ðñå÷>üýÑí# =þ‘QL>îWˆõ•çâ~à®Þ^ãâñ‘þBžÿŒg†bp#T&J® âÚþÔ÷hñ‹ñð¹å»ÛÞ–é­óWüÞâ&y4r víMòñ.ëzíìì”èÆçEêéXèmòÃ]«­ì K¨„s5(ùüñê‚ä$çÊðéõ:ó¡óÌû_ pÐ-"çÿ ²¶[ý$ûóñãÙÛwâšèZñIý6©¯¹ÿ$t&@&å5<üû'ö4î0é3äBÜmÚjå¾ôrþ² iÏA T”R f5ö1í1í§ð¿í¨çàækëhð}÷æ•êrx`|þ/Pô€êué•éBé)í òôò·ðHõ=Ê·¼ dŸ(A{ùýòéÄÞòÜÞåîð7÷vüÔ…^$#Tâ çþL÷äöHõ?íPäà‹ßáàè“ö²Ÿ¡ ¯HYûV¥…|üÇö2ñ{íší°íÇèˆäé‰ógý*ÈåYäÿ  ¹ÿ#óàçRåSêßîzð<ó ÷éøJü¨ÏA‹³ž²Úßÿ‡ô;éâÝuÛ)â'îb÷wû$ÿ"· ‘(V%Õ%÷« ‰ú\õ¥ò>í’ãQÝ ßÒæcïØùõ ' #žôUn´öñ ðí¥é®çõå›äÇçóß KÐóæ¸?TͦýÑó&ëçðé¾ïCòñWò_öküáÊ`ÖN¿  R^þõAé¸àqÞ_á:çzðtúúÿ|B·‘ O$Ê#ue5´rü»ölðêãMÝÆÝFæªñÈú¡;Ë  \Ò>L™ß ø¼÷óÚò«óxðëvè9éîø+;’a—ÛkÀÝ ÜÓösì©çêæé³î³òuóÂóøS ts±PQd ê °ÌnúÍñÞç«ß×Þä˜ì)ôüùOÿ 1gb"#ý‰Å š*ü¡øQô×ì¤ä$ß5Þâ¸ë™÷á¼­ ‰î™üw!t@!îü¾õ=ñBï¥íˆêhæsãæüî–ú ˆ\lY©1Û† ¤‹ö\ì»ç éEíNðò¹óö ûJ{‡Ív½Ý¹ 9Cãÿ§ö\ëÍá,Ý1Ý3â:ë£óFù}ý  rÊ#ô$7«Æ r|íû¼õ‚îöåßßöäYî•÷ÿp™ 8êw¢ÂLÌùeóLò±ñ°îáêœççæ=ê¶ò´ÿZ a} ½n" žþ $þ>ôBíPézéÅìFð2ñoñxõMýqÐ/$‘ž«­ ˜ÃüNõSëã[àÇãê6ð÷×ýM.Ÿ÷±!Ä#ý ÄñŒO!ý’øÑðòç"áìÜßÜ0äŠð¤ûW×’ ùs2“œ›˜ £úpô™ñWñððêþæ«èqîØöyy l°Œ®Iô  %ø•ìçEèÄé³ëùîïñÛóøØRƒMS aÐk Ù «…úüï2ç„ß6ÜÞà½éõð@õ²ùhÛ ‰L"“$6+±5øÏüœù×ñç’ßyÞ<âÁèóÈþŸž‚ éÁT-P ƒþvø®ôRð@íöêTçã¡ãíbù RGîV©% pú.ðkêxë3ïÿïlïÄñ£õôùÏÕ ;Y8ôÖ !@9‹÷¶ê âß‚ß3ãìõãø ûir çMÚ"s%0èÅ ä–ûãõ/ðFçIÞuÝäíÆôòüú "¤Õ…3L<û·ô¥ó7ò&íQé\éøéOìZôç^ s+ âU¡›ÒQúÕñîëQç°çlì'ïíïì)óYýõ&Ý(kÓ :×ÿÂ÷öêQà»ÞôâÇçHíïôÖû—þ.^ ºÑ!`!ÿÏ“ÿöø“ï0è¾âÞÝ]ÜbãŒïø\ýñR g:¿! úSNþšõZòÜñ³í˜ænã7ç ímóþ Íi÷'Ð0ŽdÆøìî%ìì³êŒëÌïIñð(õÿ¬ J'd;}² Ðû±òˆé»ß¨ÛHáéiíºð÷ ýÖs îg!h"Ïs/ß p·ÿûüôúè±ã²âÊâ*çƒñ ü©Y' Õ1ì²b7¢8ÿ¢ú õïçìgìÈçLãææøðšúè" ¸´)PˆCá¼ lIù'íéìîíwí4ñFô ÷“ì}$Æœš Ö?÷Cëžä+àYÝiáîë²ôt÷úð" x‹$Ú&tk‰X ¯4úÕõõîÞãfÛŠÜhãéŠðmûpûy„«WfS+‹üiøÀ÷óKì(é!è1æãç½ò• : AÎLŸ|{¾ßpü:ôìÅåÊæBìŒì¢éÇëó2û°Ú‰ÿS¡ƒN7 ­”=úrëòáñà`âÃãvé*òëöMøJþú £7Ü|"èòp Q«ÿúïñ•ìóå%Þ¬Ý+æ\ð7öûúK è `F"  R˜ðýsöSõûóÅìåäçlêñ€þê ï F s½Fêþjù‡ñIï7ìÉê¹íSñqðÒî£õÑ Bï“çŠóW “ÙúŽó èÞÝÜâNçêñï–ø þaŒ „"ã![­” ÿÏ9ü¡ð@çÙãlâ`á)ç×òÌúký@˜ •xhà{"ûôzïOï”ì8åóáõçÍñúû)Ñ¢ú1Vœ\̆ø2ì·èYê:éGèìïŸðOô¥ÿÉŒñ\Ù€‚$ Ñÿ÷Ÿî5èá%ÝÔá£ê|ï¥ñ2ørœ Ø=g%&%V; Èéý‰ùqïMâ%ܫ݄áoæZïÓúá0ç_]Q cñ† (ýòùÄóïígéTä)æ:ñæüO † éŽeé%`÷±ì ç'ê-íøë¤êÿîgõ`ú6¹H[ÀÑf º >ÙøLë\ä–âá†âáéBñ¤óÉõ_þì *sÐ Å"Ðs b ‹ üWõòîÌåÞóß]é*ñÕöýý\ î 0~Y ègŒâ.úô ôîñÛê@æÂåæ…èßñpø #|8n¦ÔØ kû/ô¹îmé×è?íï:íî§öTœ (¶Ö0 ¹"Ä ƒ®ü"óðåKÝâݯâ#æ£égðúöˆú(ƒ¬"#ã"è§É NÕýòoéã¥Ý<Ý å”ðz÷¾ú¾È› ™G”Fã ŽŠý5ö…ócò4íìå)ä!éTï{ö[A ¿±¢_gÝ”¸÷ðîÀì/ë|èýç¢êì‰ìIó9Ø ¿j[³TTðQt—üó“êÌá^ßåFëËítð}öæýx ÑÁ!÷ ûŒq Àcû„ð»åêàÞàâqç™ñéúJÿÛ­·ZPÀãñ‚þNùlóAð/íÆçqäŽètòSûÅ> ]ƒüy«BRCöõìêRìíwë5ìð£ôkúÄcÊ­]n ȳö:ëHäàYÞmá¼èpîbðÏôRþÕüš"«#â'{ •Ïþ*ùððæNß{à¨æõìØó»ü½ò {œày\ó3üÁ÷\õ›ðmêòæ£å²ä$è|òÁþIð j˜Ù¤Nܱ€5þEöïqêœê˜ìÔëŸéîë*óÂû`c‹û©âËøa d†jöCé*áRàâ"å½êñ|õÇø‡ ʸŽ"£"¦ß Nüý­ôEìyäxÞåÞ3æ“îƒôeùbÿ8æ ŽïMúqC Nþ0ù£÷¼ô˜îæèOçZêÝïü÷Þ Þ ¿ÙäeŠè Ú÷”ïAìlêÓé ë'ìºëHí×ôÊÛ fŸ ï°,9!þýó5é³ázà»ä´éÚìïð.öhûÅ( 1$‡’áèù üRúðÂçâÊàçâ˜éÿò™úNÿ^ ýÛUl<ËÒ Æ×ü”÷Òòœî§é:ä3ãbèÎð"ú¾Å #…Œº«ÒÙÚ ·ÚõUî'ì˜ì²ì;ìkìÓí%ñ‚ø,sù¢ìª‘ò…Ž º“ù.îåàÞpÝáŒæ€ë¾ï,õHývZiù G"Êšß‚@™ú<ñèOããgæœë!òLøý¼;yÈÊ®.<CBÿ+ûŒ÷,óaîKé×åøåëéôbÿo õ©©$Ë}0 €ÿ|õ§îëKëüëÀë…ë1í¹ñ¦ù"¬ƒ¸ZcdA Ñø:î“æóâ¥ãõæ¾ëSðlô&úÙL aÕT tˆÐV ðýyô…ëîãEà±áç{î¾õQûôÿä4 ¿ŒLB Mþ,úéö‡ó¾îÄéüæ/è›îø¨É {SZ²ý}T ÙÓøhï™éüçäèàé»êFìVïˆõZÿþ a«¦ªà·¼çT 5ÿªó„éŸâàRágåÏéNíÍñ†ø‹( P †U, "ýTô3êœâ³àÂã?êò5ù¦þyRFñÕ0OŸ ¤òûeø²ôÑï»ênæØãèå}íõ÷áמ ÜA¼––( ¾èúóþíÑìí’ìÃëÃìBñ„ø¦= ~ê»2© ÷ÓúUï°æÝâsâsä~èäì^ðÏó„úÎÊÄ1!ÉJcø ˜ëû}óÁêýã+â[æí¹ò ø|ýð^y riYZÉúÿDú|÷°ô²ïÐê¤è·é¨íõqÿk/ Û^y¬s¶Áü-ô”îßêéÂé¤êÿé&ëYñ?û»# ‚e±gÖ Ø­ù³î…å:âëãÐæªé&î¤ó¡øþþÃÌŽªj_4 rþ…ôlë[åIá®àžåßí#õâùÓþðÆ ·`cÞ_ÖØ iúúõòò?îäç‹ä çüìjôrýâì -oóç|8uÑûÒñJídë­é éêšìxî™ó{þ ØW„m­9Ë2 ŠÿtõVì ä ßmáÚå™è³ê¨ï=÷ÙþÑ9ê9¢O÷ -+øVíeæÈäðåhé×ð*ù—ýñÿ»9 æäÉÉ7 «üšøLókïÏìÏè`å³çqðûùED„sÆœ¼‘‡B ~Gûßñì³ì;í!ë?ê÷ì?ñ¸ö¡ÿ Ì|L¼™¡Õ ÚAûïçœãšá0ãêèjî´ðØóßû½Qš4 ¶"Ãu¾€ £ûWóáè¿à,àå•êìïùöþïš xÑ:Œ bûnùõ©îEêéèžêò&þ«à Ák›õ0¨sbÚü´õïlé¼çâè©è æ8è,ðêùñU +°Š¾‘GH€ýÂïëåQãäšäçæøë`ðó ùÕì_÷PÂû §ø„÷ðÕé¸ã‹á§æiîpó¥÷+þkÅ Ó:æRF²D üžû‚÷Kô¦íæâäjè?í0ó)ü, f Å‹ÇR™o«ûÔó%ñÿîì°ëí§ì·ì òDþ‡ ×¾*MÅëT+ “ÿ÷>ízãyßâæ è?ëÐñ›øþÛpQ.én©_ ­÷‚íÃèóæ0æÇèðO÷úàý9E eêÝ$ÙŽþùQóÜï«ìçäûè]òœú”Y xŒy‰;Áúð™ë´ë¼êèíçñê÷í„òâü —m+®^„ú —þ¢ó;ìOæ áMâ¡ç©ëfíßñüúºÖ xôÒ Ë¼âˤ j_ü6ôké4âƒâ!æ2éÝíõúúdþy% …1E Wk 0¨ÿeýs÷lðnìîéœç=é¤ñfü1á Û)Nîó Òÿ[ø‘ðéê§êŒìEë¨èkêÎðø0+ Éö& ã8g œþ½ñ‚éÉæ‹å—ä´æŠë«îÚðÛ÷§þ xyÊõ×Ã" Öú&ó.ìÍååëºñýôQøMþßp5žKï ©ªÿúø<õSîpçæƒèøë®òGýF Ü ýj #²ü˜ý1ö7òûí±ê!ëŒìÅëPì(óæýüûðŠr aËH ™øìí˜äÒá9ä²å&æ é#ð öýDÂA@\[ù µ c¨÷Êí˜èoåäŠççîsôàöÖú¡k ÒN P~ü _òpûöó˜îkèèåê'ñ÷Žþ3j P’–X ˆ^³‘üWóï­í0êÒæùæéëIð=ûjNló܉æ! ŒJøæðÔé2å×åXéÃêbëð:ø#)µì*0†ã¯ƒ 6ÿ8öÚë ææÕçLêŒïOöÇúÊýØ ‘Ù&Ñ “F†ýg÷²ñ2î¬ê¸çê,ò·ú—¨2 ùüØS# ¤1ú;ò*íãìøì¸êŒé™ì{ò ù†K U¼‡êÁLIý%ñâ锿3äÁã‰æêVì»ïê÷b ,=õ‰ÏœŽ¯ ÜWüùô¿ì‹æ4æÍê¨ï_ó&øñýŠþ=[?´ƒR4= ûøWówì\ç æuçïêYò¥üÞ?  z¾ ¬cù«ó–îDëEê\é¿çHéPðúùÿ; ºd»Ÿ¬ÆØ ÀûRðèHåïåoæç ê”î£óDû|õBÆU4Sóż ù*ðæéšå¤äfèWîÈò’õÑùzd¹ 1Èš  ÍÁýnùæõÇðùê¼è€ëñg÷þÙã J FÆ…¬v ‡üiô¸ðîŸêè•çïè÷ëjòêüŸå'þÅL,I ª øSðê忦ç¸é¡êzëOï_ö}þZúèÚ ® FDÿ¬öÜí`èkçøèÑëäðøö£ûÄÿãÉ e.××c udûõ?ïë#èúæêNñéøÞþ]þ ¢÷Jv1Æê Rû>ô{ï‘íìCéØçYêèï\÷¸ b8Í@¢K rþíò¶êæZãÚâå1èìêÝî‚öÕ· ØgõöŠxsž e¨þ÷úîÈèUç§éí|ðÅôPúÿÍ× ð¥%-ýT Ùäý5úõ¡îÄéè éjìéòœûþ’¨ Èuïgé {,úlô”ï“ìë˜éöç¯èQî÷ÊúøÀc°à0÷Àý‚óbë½ç¤çOèzéMì1ð”ôöúqƒ§+ôlöŽ € u€ù%ñ ëBçMæséÊîó öfûܨ֊?9>¬ ä6;þù@õÌïQêfèaë=ñù÷ ÿ o @€Íįò a‘û›ó[ï)í²ê©èèÊèŠëýñ5ü[î]Ü2Ö¾× ÿúñ”é_åÙä&æRçÛèí ôXü’#‹yÚ:5ó- ¤õøCïÌéVèŸé[ìxð~õ±ùÞýn³ ùYjPÿ õìšüÞö}ðÛêºæåÆçòî*÷úý´ “ I ɵ˔rþ÷Ðñï&í’ê†è»éî~ôýÕó–…!€ÞF xõvíéæu呿Áè ëåî5öW, Óm„S뾋¸¡ÿ°÷ðêVèÁê$î ñIôÄøùýb _Œ.µ –ç%þÛú´öÑðÒëûé5ë¹îÈôòü.’Þ Vìì!Õo  öø{óœîëMéEèZç„èHît÷›Ùk·†‹h T½9ÿ~õ#íÝè3èjè…è…êÉî¶óúXš ø ÂF–I” Ú @ÎùÕð¾ê=çæÐèîpóÁö?û"¡ :eAõ…ˆ ¦ÿ ùøôï;é×å-èÎí>ôoû͸ |R› B¡A wÿ¸ößñ[ïìµèèçâèÞêýï¦ùäk âqšÅ±9•\ûÿòtëæå`æ¥æèæ^êœñú›T Ç5bÒÀ‘ú t¯üòìzê;ëòì¯ð¬õ9ùÌû ãsÁ:ä ÏÀ@ý_÷–ñ)í1鋿vèäïbøgþµ‹ ðO·<öx{ÿz÷ÜñÃïî‰ê¶çé°íkóSûŒ(’µ®L) àðõªîåê<è¼æè™êúëïîµöo ÁôwÆìž6—Zþlöýí\çŠæYêîð3ôBùÞýÂU ø¨ØÑ lÎþðûf÷<ð­ê2éÂébìðòü·è  ñ5 'Øã RQúbôî“éÊç4æ\äåååì}öSÿ±×¢Ö‹©D€Œ 6Dö›íKêhéÍçœæ÷çJë+ï‚õ6l o¶‡¤ †„Õ Ò ü§óí¿èÚæÐéjïqó1öæú­ò ‹VšWü lÊþ«ùCõOï鄿àè<í òèøà9 • ˆ‡j3û ƨùèõ©ò!îsêIé5épêðJú‰‘ éN>6"èÈû0ópëÑæËæ è›çòç§ëéñCù› -9³°_3N ‡üOóÆíÖëJëì¦ð~õÆøÒûÃ¥ ÀEV¾Ø Ú_Ûû«õmð’ì«èâæ7ê‘ñ#ùþþÉè 0\áCŠ„î‹þ$öÿðÞîìÕç(åBæ5êDð†ùÑ¢ ßCí‚©/tbøšð`ëÑçÔægèWêAë îfõÿ%E*ba‘›· £>ÿ÷Uîèç¨æéªëOî²òï÷Äü¬ mµ‘dÛE ]|÷þñø2ñ,ë’èYèîê³ñ7ú}8R e<÷³ ”mûzõ0ðÚìë†è¦åTæìsôaý›5z8£"$´´Õ ‘ËøðåëÑé§çºæäçPêÞíHôBþRÛ s²™/C r}ýäõðèëëÝíëñzôeö•úëSÎ T ™‰W MþÂùõ”îwè;æ€èGí!óeú­g¶ `óÁY_"¯ š£úYödò î¥êéŸèêÛïeùÌÜ fÜT¤aÀÄû=óìFè²çòçAç»ç´ëòåùu  ILSô¾è èû±ò¾ì9êé'ëïjó¦ö}úá²%ZÃP%_ ‹qýR÷¹ñ íçè5çMêÁðŽ÷˜ýu 4WW³WjoÏÿÃ÷jò>ïxëýæLäÐä<èVîw÷“  @šÎZÞ°×Fý+õ,ï«êµèëè™é[êí‰óü 3 ŠÜƒ£S ;˜ ù)ñŽë÷éMëCí‘ïAóÜ÷¾ü) œ•ÑÆ"ü Ì >ÿVùLòxìEéàèŒëÑñvù'ÿûÖJ ¼¦äÖ 3 ½}ügö¡ñ“î¢ìFêýç¿èµí=õæýü +N¤Aœ6Ô Ã©øið‰ëé(çsæ±ç+ê:î"õþ ßûz¸> º þ"ö ðZìßëî$ò ô¿ö‡úJ2Æ>¾µ" (uèýùôÍíçé䝿©ë—ò‹úkG ëEvæ›ê h7üeöšñ,íºéžçÜæ;èEíÂõÒþç 4ÖñA„À4l³þyö«ïFëaéè?çHçOò Ú¬ RÐÛÉøù©¥*î:’:å¡á¯òå̺âÜÒ!é-ûêÞìÀp ðê l,{*PœòÜæ:ø!ü‹éBàÃöÍÑàQÙ£ñ˜ý-û%ç$‘5'£¡ Éüøù¾¯þ=êõÜ&ض×õÜèéÏþB›…‚ ¤ÿùæZ gï©éçPæÎïµú;øðð*ðãî¨ñÑý áS$N ìâûóöôùlýCþ!ö`íõçèçÒìõVªà(¥¦ 6·¸‡ .Õ ùËçüڨ׈ÞvíTé Ú ÐûËÿ ¼Ù x({!>Eú“èâ}åõîøtüKùGîxåjæ˜îãþ<"æ&;!-} ˆÔ€÷ ³2ù ëSÞùÕeÖà­ñÊ{ … Ùal• c#‡&!„qñWè¹è!ñˆúßþGû·ñÕé¨éó%p)8Ø Ò¸üdþ‘.")úÓè!Û]ØÙßñînmÔ ¨ Úý Sáô"µ!iý ó¤æ_áäëñÉóÆò—ð'ðôÌþÃÓ%š&$(ý3ýcüÂÿXËÿ3÷øêÄÞ9ØÜê­ü$ áÀP þ)+ ÎÈWÑý ëØßÔÞ8åAðbûºÿMûÁó˜ð•õõ›!¼Å Cþôñàòõö;ú–øÅñé£ãÁå"ïdýã nØ#éQÿœ4tûîÍàôר)âVñþ` ‡ù& ˜“#»& ü©ý“í3æäçëîcõèö˜ñèPâ•å8ñ²½ë .#Ï^Q¹² 7 Ðcý´íJâ«ßÙäCð@þi «$è ý @ ᯘ/X7Yõ4é‚ãëå4íùóøNøóõÛó£õžÿ>Ï(_*»"B ýýü?ŸÛ÷êkÝ=Ø+ßÛïÖ`(_  ³®W!Êõoþ¤ëvà£Þøã¨ì7õdøôtîÌîWösp0ƒ&Â#±ù ËüÔûÙý}øþ÷Ôì¤ä\á.æ òcÃß KÍ€Œ uF‹’úBémÜzÛQåôlÏ®árüý#Èë!O&a ½ýEï êqì“òÜ÷µ÷ñ‘ç&âãåañ°a õ (® ¶ô ù C zÿ{ñå³ß‰ßMæQó¨ ) n?ºµo!ë ÷ûWìàãýåiî‹ö—ûOûwõïcîÎ÷è#f%Óû”–ùû‡ÿq*ÿ¿ö¬éuÞ Ûâmðêÿ –Ç I  ýçÏ ªü¬ísã§Þóߤæð¤ö:÷ö`øÃüS•í )÷)¯!`=výŠøÈø+ú†øÂñ±çÞÝ÷Ø ÞAì›ý :„g n ûý²q·¸ð’ä9ãJêmó>ûÿÿçÿjü$úmþ& ÙY"Owg™ûŸö±õ…öGø³ö–ð¿é¦æªé¡ñ7ý¬ 0cÄ/v— a o T÷½êâzà#æòÿý>ªR[ÿ¦_ ƒ!ë#—“„þ&ñ$ì³î õFùùõîhçâè§ô½l×sé ;œ E ,ƒúôìÜâóàÅædñ÷üÝ Å þM/  e þ¬òjêÛå~æ‘ìõ(úÌùøð÷ZúÎæDÖ$#ñs ÏüÎõ{÷úkùnõÄëÍÞ*֊׮â˜ó¥"V(b ’ ÏÿË+¨ ü½ê‚ߥÞçâ9è+ïTô»ôþóŠõ½ûDs”å ï{ ‹ÿ©ù ÷‘ö¯÷AögïPèUäfä‰éßô·Êz6L®¾ ô ¢ U*Híöéæ®ÚñØNáåîhûÑÿ\ûïþ½ HS$0'² cNóbï9ò\õEö#ô¯î(ç’âçêó^KGà ‚ . ¢ mþŽñGåeÞÀÞ]å[ðnûA­ —ój °ý{aý Ñ õ™í¸íKôjúoû÷øNõAòóªún¼Åâk †Éû:ükþ+þbú3óÈé1â§á´éRöóŒ t†”Ì´¶£žënû·îæsãpå@é>î%ó/õ£õaø þø…-Ê SJ)ÒûS÷#÷Ù÷±ô0í"æºáÃàÑæ\ô5Î×z ð >Îu nôßç&àá·çŠïóõ;ùªùùÇû#š†Î¾9GÇ%øCõõ)óÅðêíÜé¦åPä;êÎõï< Æ & I T Š Žç÷vë[à’ÚaÛTâ½í)øåý”„ xM%Ö$¹7¯úõëï:ð!óÏòðíè5ãïáºçýóûïöªï6 ¨Ä Æ N  H¢÷í§åæ¥ìIô2ûmÊ9·Í 6^[ Àþ9ó®ì›ê«ëïZòxóÍò'ò"ôÝùmaÜww ,4þºýtuÿ²øï†æìáÓâëŠùqñ®{ ¨ K G¯Mnåºèó‰é9å­ç›í.òfôÄôôäô«ù‹E¼ýšk*Oÿ·üzûcù÷ôô´ï)êêçpë„ôæÿ ÎÄD|! j ^ 2 ¨ €#ø”ë‡ááÜsà·êõöNÿ}j~wu  ‰"g'U".±büUó¨ïãïmð:íÄæ›áüßã½ìÕúŽ82c·˜€Y&sa=öhëãØàtãfèÖïøÊþ›Ó­ ®8Ä»8^ûIòeî¢î5ñ‰òEñ£î\ì«íCôLÿ% 9Žå‘a µ»RųøàíÏåAâä\ë:ö¨ÿUS·½ f ùdÆ ÃJûˆòãíUìÙìuîðVñ(òôù4ì ãf¶ÚÚÜ _³þ{úòô^íBæ­ãçïfù%u ? h ä v  Mß•Û ÿõŒîúë‹îBõ]ûrýaüèû#þÜÚ Ì rö· (Ný$øÄõ¶ôÕòOïêñæ7çÍëYôSÿ¡ é‡'Í}é t ™$þùòqèŸáçà(å°ëÌóoûÐÿÈÈŒ©pÂ!î›»ú@óñäð?ñ÷î­éoåÞä"éžóÚ¶þê ‰h»ÌÞ8 Òzøkí©å¥â åÝêªòHú¥þ )‹ Ljü} U \þêôïwì,ìíïõï€ïÌï¼ôþ®Ãý¸ F0 c¸BH«ü\ôƒé¸ßùÛÏ߯é‘öL` p c ™¬OЯmùÿðõìTí€ð¯ò»ñ–ïXïoò'øàÿa Ǭúñ` 6²!þWüäúøô›ïIì$ì ðº÷F 3-«  A Ð ¼ › Hö÷ãëä~â‹æ4î¤öÒüýþ¬þBÿ—û s3po"cúZô¿òÛòòñ/ïCë¢èYéµíõ‰ 9N£#ã NGQùðŠèûâøààãDëOô¾ûÁ˜ï ÔˆÝ&¹p©ø„ñ¯îÈîIñ:óUò“ï-îÖñíú^$L&´ŠF ƤgPú®ñ*èkà”Þlãäë#öÞÿ¼4 t"Çïhím‹3üpòFë¶çBèêªêžëíšðâõ›ýa•ã¡1 óBFÿuû<õ'í#æ²ã&æbíøfª e C 6 Ö îLdž 4Gô†ì…ê²ì¢ð´ô›÷ÿ÷ðö¥ø¯þ8 °ÕMÁL˜ûLùøöõyòDî)ëæêCîõrþÍþµªÐTU  õê»ûaòöéäÏâÂæÆî·÷þ$¢a‰M ºµTŠÿùôò,òótòÞîúéòçìÀõU Ö…[X ÷ ? ¶ÿ[ö1íùæÁå»éÍðïøF—r > s·okb^JÄø(îKçÛäpæôéZìÈí¡ïòÌömÿ¥ Zê +#§}}N¯"¿úÂñ_çÑÞÈÜâìø¡ˆ Ô ³ ÊNa/ëBâáôÀìZéBéBë$ínîPï¬ïXòªùœ‘ >õOߌ 0 ¯þü•ùhõ¡ïMêèšê®òSþÜåyÍ È ª z š— Ôû=ðŠç‹ädèFðøýþHþ¿ÿzš >tÔ¶œïþäù÷JõÐóvñuíé¸ç\ë óŠü/õ¸¿•#(\ ¬ ” @løðêbèbëÈñùvÈ'â|¾ ÿÿŸÝ ÿFôdí½ì]ðÿóuõõØóMóŽö‘þš ÅÑJ#m Cw«ýyøñµè¸âTâ+ç?ïyùGd :VØ †c¢ø¢ íEõìuæä-åúèví2ñðó_÷iý‡HêL"‹´2áàÿwü]ù”ô¡î®çMáâÞÚââìGù~“ „TØpO¼†y QÿÞóÇëèöé,îwòÀõó÷Çù#ýk­ ³‡û$È j@ýøçó”ðŠí÷é]æ·åépï^øÀo ÷š­cù‹ã/á ÝûùïXçÏãæšë ò3øtü¾þ‘û” Єťj}ýR÷Îõwö.öô‚ðïì¦ë‹îöT RSŠ\×  Ë ¬»eùññÅì›ë¿í¿ñi÷3þ²òÑ› æ {n¢ 4kù)ñ×ëêäëÙïÏóœö÷jø(ü…j GŸÒ”ä+›ý/üƒù‹ôþí‘æ]àßùätðËüH… አ›h _þßóˆìéÉèÃêˆíUð£ò õ˜ùùÿÖâ.$$f ¼Tþø«ônóïñÌîãêeèâèkíqöP´ñiì¾v¥_¦ =Uöäéåà Þ°áÄèUïÒô%ù ü5ÿ;¡xm]Ö;¡ ‚§ú÷;ô~ð}ìÏèmæ×ælêVñèúéh i`À†D¡Õ ÌPþwõÃí²çsäµåë{ò.ùYýˆÅ j‘À Åû]õ²óôöyökõÆóüòYõ–üCU[$ä P•¹ÿ«ûöêð-ì;èªç½ë¹ò8ú*W' X‘]µòüþ3ù¾ñËëÁèéžëðîXòºõÊù¿þ›  &‹˜WŽp LÎüù^÷TôÐïéêè°èQí ö‰} | íÜ“Xhešÿýõ§ìˆæ•å¦è’ì4ð~ôùyý¬¦ ç뉑–b 0ûõßï]ëõçæ¨å–çìçòüâ;æ"¢?<Ÿ Táú]ñÿèŽâAßÅàpæÔí©ôú$ÿ¿Õ 7ß  ?O i`ú“öÒógð£ìþèzæ†æê+ó†ýð Aå^ûkñ ó f1ÿúøóVîìí†ð×ôÞùšÿè+ Y ¦“HÙ+² ؆ýõVîÒêëÏí7ðKñeòŒôö÷þ=÷ŒF ‡“ "Ù=äþAúÞóˆíYéáèåìAô‰üŸv& ‘ © v¤%—¬ >Ëü~õ(ðºí¯íoîÃï¸ò ÷@û|ÿ³Z -ÇLž £ñýÒ÷ ôHò¦ñÊðÂï­ïÔðbô1üx^>„„Z  1xñøðèOãâæí ôSú§ÿýÛ õŠ[ÖY»SN ø‡ñøëç-åwäŒånègíBõfþÙ@µþãFä– Î”û:ôñì-ç¤äüåë¦òeúÜé × o¢×Žü œìú!óÇîÚíØíLííÂîò½öÂýèš "y¾| AJþøÔñçìÉé«è9êîóù·ÿ.’ Æ Çy·ï¹ ¶FþÃöÇð²ì¯ê˜ëõîÛò³ö–ú«þ£‰ ©ùº?} i‡ý‹úœöIòï íÇìPï"õÇüM“ ™ - ƒ J ¨ ! šŠZúõ9ñ ïÖðÇó÷ãúgÿH ˜ ¼RQt‘ > ÿà÷”ñDììè_è©é²ëÈîŒóÉùÒ¨lhÊn"º Ô¡äùDò.ë”åEãåBëðò ú £’ ›ü¬‰–Œ-ç ýjõ{ðªíÅëÞé0éYëWï¡ôLü[l Z/$å ²ÿåøóþíóéÛç_èÀê)ï ö|ÿvö n1©®w¥Ÿßÿ£ö¦î4éçUèëÉíìðóôˆú¹þ ž=Åú¥ï ^CéûIõCî é"æTå€ç íZô û¼¹« þØáXYöt àáþªøóìïåíî ðóÈ÷ðû×ÿ†ùk   ˜öB >KúëõIôDôômóCózôv÷qüU 6³›Â´Z 1ÒRDú óÜíê²èkêÖîúóÍøþÀÖO }ž÷\¸ !ÿ¯÷Þñ¼íÑêáé£ëWï¾óZøŸýµ näF5Á >ýéøaô“ï8ëÖçŸæNèJílõwþîl s'yàýßãÙÿÁ÷Àðë9éýé2ìäîóŠøaþ8 ŸošrT~¡ lüØôËíèæÀä䢿5ëÌñóùâ lL6Ox3#°@ÿ´õÈìååzâãæ‰ëúð}ö:üþâ̚ˊ÷¼ ¿ôý$ùvõ_ñrí2ë-ëí ñß÷€ÿíü gKCÇ¢ ‘ûIýî÷óMïYí=íªîÏñ÷ý˜r j½tù6> áJNù"óÙîíÞí\ðœòÕô)ø‰üòrõ¢ éŒÑý¢ù]ôTïûë6ê›ê‚îüô¢û&í™ Ì¾t@9)1 gÒýø9óéïíííãíàð®õUûøl ’ æÛrû ý&÷òïîÛííŠí ïÔòMøNÿ¯öÇÏžN 4W÷ZîHçáâ áÚãèÛì2òlø±ÿ«™ÀÌàbà‰ ýjýËö'ðÄéåF俨é"ï%öþ8Ù Do?SàŒ¹ ëôÿÿø)òñëAçIå;æÊéðP÷pýõ†£ K J.9 T$þ<øôtñàïKîìì]í:ðšõ&ýCo ‰À֬Πf êÄþ×÷¸ñfíÁêëéËëðõ!úìÿŠ“ >dçRý= p6ÿH÷"ñ‘í ìªìéî—ñ+ô ÷.û¿K")®R, «°›þ€üÀùŒõ~ñwï(ð§ó…ù’ô @ ¬ X ® w ¿Ê=üÏõðí.ìäíZñõ³ù”þ ­ –µC ç"Ýÿ+ø€ònîQë±é¼éÍê¶ìoðÔö^ÿ†ÊA2<!’ Ñÿ]øÿïëèYä%ã¿å…ë ó{úrÝ­ rzª>R7¤?þïötñ˜ííêþèâçâèzìòžù[o ¹é   N K<Óúõdð(ì$éyéóìbò=ù¿Ç*’îX—\ ÿ‘õ0î‚éxçÂçJéJëÜí¦ñ§÷£ÿfE‰¤®¬»<r ³òàúfóèìNéÀèÂêäîïôQû`¾  .KË ±IÿüÐ÷Ðó’ñ®ðåðšòöZú=þ rô kGÔ³  k£ÿJûø£õìóÖòòpñFòcöøü· ²6¥ä Ò ‚ a/ú«òíQê\ê¡ìüðGöÜú ÿ?i ?Ç—a‚¡ ÄŒþÄ÷¡ñZíeêè¿è‘ëáïõUûZv äñ_‡/˜ dÑü9÷qñÑëîçÕç¶ëÁñ{øbÿ…³ t ‘7©Ù2g 6üôÐîáë¡êñêÖë÷ìóï§õZýÞn)g׼浴úÊòÙêDå¾â¸âåÌéûð+ùÁÚ¿"MªxÆ Ð ÿøõ¼îlêûè’éeë{îòõ¤úO´ õûþÃsÍ öòÉ üÌösñcììèóènìòùèÿ-Üg k -Ùaû J ý$øô'ñð‡ñsôB÷=úCþ‚Ü @ŠnrÓ à­÷ú<õ®ñ©ï3î¦í/îaïÂñ–ö»ý”Ä ²mÔà $ Wøûbõ‚îëéLé×ëEðÈõVû ‰‚/ a­$OŽÈ}ú‘õòŽðjð‰ðèð¯òhö›û`›LXú1>£ ÄOý”ø“órî ê±èBèÇérîö£þˆu ¢q¦ÕkƲ mbùï¥èwå7åçŽê©îwòœöñü°I|•ÈiÚó ¯ýj÷+ñõêÔåãâãÐçºívõõý\z ù§~óøÁ8 ·ŠûÄôJî—é£èWêÎìlðhõ™úKÿés iÏLã[ü~ø¶õ-óþðúî¦í®îéò­ùÞÏpÞÍ^ö , ·Ìþ˜öçî-êßèÂéØëöîó÷ÿû#Ð òŒúêü$ ï:ÿŠùWõÒòäð—ïð,ò õøÒýµÄ dñ\Ð ä[íØýÖø ôÙï&í6í›ð^öü¾ŠÞ ü  ¬±Di KYúô­ðxïtï)ðªñÖóIöúGþ·…zûuÙÅ ¤ðÿèùkôyïËê5çæÍç€ë`ñ­ù­^ j  Eûô%Pmÿ öFîÓçåæîè ì€ï»óÌøþþ Ð/¦ó çUü£÷ŽòÅí«éyç<éæîYöúý<„ ‡)LŠ„U ]eø(ðëÑèaè êúíÛòê÷ý¡ Ë:žˆñX ª€ÿCø}ó ðŸìáéè&éxëâïm÷† @Ä4—±çl° ­Óÿ'øñìCêæë£ïêóIø>üfÿ )¥ „…¢ – ÿûøõ.ó‚òêñ^ñÐòçö>ü˜‹þ ù 4s * ;žZ¥ý¾ú<÷ÄóMñEð+ñ÷ô”ûò÷1 óýxÕÜ(í ìEþ@öÑîKé‡çtéªì¬ïìòœöØúxζ1É!P í YFøû–ö×ñ°íê‡èƒêJï[õ üà ç‹{]); Ó0ûîó5î%ê:èaéuí*ó ù¤þ7= ¦ ‚Xj™.Ýýäõsñîæëçé7éÐé'ìqñú$Ö .˜+z)» kiüBôÓìÚçÁåæOèpì(ò»øTÿG‹ ©‘jàdÎ/ Aöþ^÷Ãðoì—êäéƒé¼êJî$óDù#˜ lSÔ|iy Z -‡ÿù@óÔî’ìûíOò÷[ûÿw~,2 b®ä Ô ¢ïþrùeõOóbòò›ò ô‘öbú;ÿ݇ ø! » E ø³Óý‰øƒô-ñûí÷ëWì¸î@ò5÷þ*f © ê¼Ê  ’+ùNóïSí~îñõ’ø üçÿ Š.;Œ} Yÿ2ú²ö0ó«ïIízì\íðõümg 4ÈuHûÊ ÝüØúkô­îöêœéTêõìÐñpøÿé¼ ˆïuY°¨@’ÿV÷Áï+êXçpæ)æ¦æ)éþíÉôžý¨«cç Ú ­Qû×òKëÕå­ã{åíé$ïžôqúh^ ó!2õÁ/;ûú#öLòïí½íÛîdñèõ¿ûïì¡ üLÙ> ¤<VþúdöbñiíëˆëÏíÈòåù2ÊŸ ² 0×ÚIÅ ™þ÷Eòˆïãî_ïbð¤ñÃó+÷®û¤¤lœ„ßÖ rµþ'únõÅñ ï¼îZïPò÷êûÙ´ Ð eÚ]} S Æ´nýÃ÷Tó•ðcï:ð…ó0øwüÞÿ)©ï º 5Íšì ‰þøpó³ð›ï;ïåî9ïñö‰üks Å—K,RFqj dûbó°ìµç›ääæ•êOïoõñüŸ• }lÏ}­T8 Õ$ù¸ò¢íoê˜é>êÏëÃîpóñùƒ 6–Œ @ç‰ ‡Z·üðõÏîvé6çãçë…ð1÷XýV5m :g' aZp÷ùXô\ðží˜ëçêUìäïÝôãúÿ& Ú¦îÞÛwÔ äuûWõeð€ìÏéëèªêùî©ô#ûWß ~)`g‰ 4ýÊö,òaï0îÎîoðâñäó’÷µüS> gº†^ 1Þþyûä÷yô‰ò”òô_øSý9> ó   ª ]PþöøzôžðîíríFïeò*öäú“ Ÿ±lÙ€f §ýN÷òïî¡ìÃëÍëuìÒî¥óXúêu õ622|ë nUqü\õˆîê€èˆéí+òø˜ý¥ÝZ .Ùò[×ýúôØï°ì’êê˜ëï²ó<ù° C~° ýã ±û‚õ¼ðxìéèkêyïö®ýmÌ Úƒz³Ñá4 &Òùúñ)ìsèïæMçègêèí¹óaûÔî ñ¾99:¡m ­lý÷Cñkí±ë¡ëˆígñPö~ûÚa á pC­{  néû/ö`òöð ñÂòåõ­ùúüÒÿTÎ= „ ze =´2þœú‡÷õóøðÓïÀð'ô€ù—ÿŽÎ /‰Ci j ÇÿÛø›ó,ðpîîBïòö|úŽÿS˜ ‹PÒ­Ù¨ h üyý#÷rò\ïyí7íÒînñjôø‡þJ] •(˜ I&ÿ³ùvôÍï¦ì*ì»îHó€øÖýˆb l$ƒ«¶ ÝnýîöÐñÕíöê“éêÜë'ïÂô[ü;• $q¶U£å2 š ýÖõõîPéâåKä„äˆç;ípôü“‰ I•daš™D ÚÆú°ó"ï×ìÉëìëyí]ð>ô.ùêÿÂ…;·›C¨Ž eÐ{ýê÷•òìí"ë4ëùíLò^÷ ý€ÅR ° uÇ!ð| Utúöˆò*ð´ïñ{ó ö£úšÿ®= w (¾W« vAÛû´÷+ôñÙîÛíîWïÆòÒøåÿBt B&8m7 ©ãÂúþô¯ð'ï5ðwò`õ¶øßûìþà) L‘üg Ò“)þŽú.÷qô"óÈòèòJô­÷‚ü¼Ã« ›·dÅU ÁNÿNúrõÅðëìgêlé_êî…ôü4º ;&Ìë™Î Yóývõ¨îòêcéèè¹éöëgïôjúgÉ µWIÆÞh 8ÊÙúUôOîŽé]çõç©êÍî*ôÕúûTç ïP1ñlü ;cýÙöèð…ìªêpë¯í–ð®ôÊùôþjs ðŒ~ü¦˜ ¶‚ÿ(ûÍöFòxî(ìië¿ìñº÷Ôþ?¼ 6‹w¥Ê5 7*û¼ôÆï¥ìÖêïé´êíÍñ÷Yýõ ÿ ó6?0; :ÿ[úØöôÀòÊñ‹ò€ô÷Áúìÿi† Ý ì ¹ . ÙqÑû•ö,óÜðŒðÊòŒö‚ú/þÄ~ëí Òµ.) ¯•þéø+õÀòËðZï0ïÇð÷ópø.þ¹ž ?òç± =ëþÈø‚óÅîæê"éÐéCìðÚõ"ý® €«sfÆúZ Tûúpôôîëyê&ë“ìâî¿òøVþCR <§#š ¸'9þŒøúòƒîÏë ëìÑð ÷Iý ^ Ïó0&ÖI ]ŠGùgòíÂéè è„ê÷î%ôúU¼Üý°ŒUm— ²FþÅ÷Úòîvêìç¹ç—é{í|ó<û;h ª Èb…¹Ú ñ”þûìõñ•î‚îõïüñŸôXø³üåC sHbb W-ÿxûy÷íóññTñ¿ñŠó÷fû¨ÿÖŠ E K  Ú O¦þºû.ø„ôúñÔðñöòm÷¦ý`˜ þÉ%È+èR£ûˆõÄðãíîì+íäí‡ïËòM÷Èüj 0"D÷á Ø¡žú-õ{ñUïYîAï5ò÷õûùÑþ„ #Š©° ° Åq,ü¶ö÷ñ?îóëîë¾î^óEøIýÏq\ tÈ®ªP  pùáóï­ëUèç‘è?ìÕñùõ'ú »wœý‡ãù Yyþv÷-ñìé èèÒéîkô˜û { º 'øœ+Q" «Óû(õðöì=ë¨ê€ëtî0óÍøQÿY) ËÔÌdsŒ  h&ÿÌøõóøðŠïðïyòöùEüeJ Õ DMo ¦ýÕø~õÇò{ð@ï ðªòuö{û{Oþ 1¼¬¯ ê ¹ïþ´ùMõVñîÇìóí‹ðôÔø]þ9Ù  àD£² Îfáýkù$öæóLóEô‰õÙöLùAýÓn Fÿð ­ ÞÅý1úžö¬òzïTî/ïÄñ%öÏûª¸Ú o תœ ’”«üèö[ñ:íƒëµë$í)ðõ<û"¨œ D$"…½D” 4Iý·öÉðsì¦éºççªèíìóúB X3ÿHìoÔ <þWö0ðàëÀé êhìÒïtóà÷“ýßð Xu</@^ }õšý¡ø ô<ðîîÂï`òtöüéDo Pu‡ G¶ŸûÎö«ñöìuêlê5ìðèõOü’ çKVU> ÊÚýøXô­ñþï°îkîðÕóÒø4þÎ K@b B ƒ!Dþ|ùØõ½ó¨ò…ò»ó.öWù ýɸz ¯ Ó à — 4 cv­¿û>÷aôÓòò3ôz÷û<þW& 6 A#(Õ Jòüªøäôò½ïXîœîñõ5ûI‚ê ‡«Ÿ…U• oßøõòŸîsëbéé½êÊíPòÅø. Ï gm‰ãýÙè ŸRþˆø:ó$ï3íIíˆî×ðñô¨úÓ¾D òµó«®A +Füìõ3ðìbêëNíÑð‘õþú°¶ö vsµ”žèTýe÷½ñ\íZê¿è•éAí¼òåøQÿÙÚ {ÑÇ;–ž Ð \ùÍórïìaêßê:íóðÀõ¤ûü‚ GkpRÔ' óÜcüø—ô³ñüïèïøð½òöû“Ya F ˆ 7 ê ; õ³ó"ýEùÛõìó ô«õø„û„ÿ ð¿_ ® |  ðûµ÷ô"ñtïïñóüö£ûØÂQ › ¼¨9ýÌ ò‹þ¾ùlõÔñŒïîIîIïžòä÷¾ým»í ….j„  „Qÿ›ùôðîóî³ðÓóÍ÷üŽšÜ ~ ¹k I†ü³öÎñƒî^ìŠëîìuðõ*úÂÿó eŽ[ÓÓX 8¤¦üÁöžñ+í•éèŸéÌíwóúGÓá -IciöQ¤î~þ[÷Öñ4í£é¸çgç{èXë¥ðê÷µÿö1 ïÆÅ…ÎÓ /Îùjô±ðŸîÍíAîŸðÄô}ùeþ¡o² V 5‚Y w ¡&òüŸ÷†ó¬ñ“ñEò ôõöú‚ýß ÿ qø²V3 Ë {þqúQöáò ðî7îñºõÊú¿ÿ}¼ß )*" "  %ÆþÂùÕõó/ñmð?ñjóyöeú5ÿ 7 Ý NÀ² Ç ó-%ü(ø‚õTó©ñtñ²òÁôÖ÷|ü9„l ü ,Ã Ô \û7ûLö7ò†ïTïpñ¿ômøiüÐ" Ö¥ö yúÿÑùÙô©ð í‘êÒéæê’í ò‰øïÿ C4 -ÀGÞ!ûþóÎíŽéDçžæ"èUìò øþzx Eº>U¯\Ï ™ìýË÷IóðÆîÞíeî„ðîó´øßþ²½ çJý¤êè qèZþtøó®î±ëTë¾íñöû>H . ±½ºÜQ ^x™ü½÷³ó\ð’î–î¿ïúñ£õ”úüÿ+) Ø æÚ©! 9›ý}ùõ%ñ”îíïí9ð®ôú,Æ¢€  §mœ _*ÿúùõëó¡ó6ô7õ÷†ùFüÿÊüÚ  » 8 ~ÝGýÎùœöpô’ó»óõ½÷žûÍÿ•Ï ÎÇ« Ù ³ýù*ôÃïìêYê´ìÓñ4øLþô[ ô `TÍy¹ …œû¿õŒñÓîÐì˜ëì]î>ò÷÷ÿÍ éÂÃä ¸ þ|ýe÷VòNîåëÒë†íBð3ô€ùµÿì` {Ë?›™Ó ÏuþLø¡òZîlì‹ìÛí ð¨ó|ø÷ý²à «C$”Æ ùþÕøÿòéíÐêóéMëéîRôPúòÿ\¶ žÃÃùÃà ÉOùù²ôÀð‘í+ëOêŠë§îüòiø¹þÍŸ ? úeçå. Ÿlÿ<û²÷Íôßò®òLôÚö.úkþšÌá  , ! `šceüô÷ïôDóÓòÿó_öÁø û þþiŸ Uv,€ d ¼ýÝùmö%óLðÒî@ïpñ?õtúBà 3 Ö2î­{ ² wÅþhù’ônðËí^í­î ñœônù¿þ¸^ã †qÂÄ å(þ#ù®ô=ñ{ïâîéî1ðYó'øÕýÐÓ Ù”ÿ 3A PcÿÛùô‰ïÜìEìòí«ñÔöWü{‘ Åø$}KÈòqˆûðô°ïñëIéäçèžë/ð¦õkü'Z MWR›åD± (–ý¦÷òídé3è[éxì…ñì÷Eþ¤ \m4戞 rsþ:ùõnò|ñšñ ò8óéõú.ÿ¨õ û鵂 n â ÝýPùõòÛðÃð'òOõcùqýyÏÖ v Â ó ž %?ÿØú4ö¸òñ³ðÞñÍôàøýóµÀ‹ upôû ͦÒü”ø^õñò®ðáîšî}ðZôaùÿ± ¡ - 4by p Lý¿þ¶ùøõ£ó’òíò¢ô÷þù–ýg Ö ¢Ë&  u*÷üÆ÷Âóäðòî~îñï×òzöÎúBo? ˆ1aS/– M†þ­øÏòEíøèñæÉçëð`öþüýmà ºŒŽsïÞ Ë/üoöñÝí ëŒê¸ê íŒñk÷þò# ïîSV‘{ V”ÿ„ùôíïíë;ìBïÐóùŸþ?> Ö n¯ï Ž_ÿ_ùÅôÿñ¦ðuð`ñIó÷õ†ùLþñd ã ׌û× ðä»hüJøXô}ð¢íßìgîÚñÁö™ü‡”Ž Ò`ÞýÉ=ó 44ÿ¥ù¾ô2ñsï\ï}ð\òõ—øü{Í' u ò ´  øÀ­Œý/û&ùs÷tö1öqöì÷nû>"` [ “ ÿ /  ëX$ýŒøÉóðgî<ïôñö û°ÿ–(Õ f.•fV ãþMùwôÆð‘î®í«íºî†ñ ö˜ûÇKrŒD9e 1ÌýR÷ òÐí“ê¸è~é&í«òùœÿäð ‡dæXê@x ëKÿ)ø óûïpî?îïWðŒòDöÐû€ ’U€2‡i »8Vÿyúfõ“ðYíˆìçíåðKõû!•` ¼ã1ãOZ¸ ¿KþÊ÷”ñµì)êüéoë îïñŸökûÀ™ eUèà Ïiÿ¡ú/öÿñ{î™ìdíéðö¨ûÌÓ¡Œ = Ý – É Ž ¶w$üô÷\õôíóèôÙö ù‚ûØþòê { ô ¹ £ m°˜yüúø¸önõô=ô(õ÷ÏùÜýçðÌ ð e@ Ä Ô,zþú\õñêíïìÜîó?øŽýpƇ × .ÿ ÎRä N¹ý'øðóÑð´î¤í‹í†î ñlõAût[© mï”üX ± GÆqüë÷zó@ðèîXïžñàõ—ûlbh ˆ žÂwF× žªüÄõð—ì“ëfìOîäð?ôvø“ýÛþ ­r— x #üÿ²úIõþïjëPèvç¢é}îÕôÔû­uü ”p[ÓŒuO ^ÌýüöÈñ;îuì¾ìkî—ðwów÷Šü7Û iˆöo¿ JŸdÿÛû’ø'õòð®ï4ñÓô1ú)Àï ª u 0 Ò º X~¤þŽù#õ ò¶òÅôº÷ÔúÊýmÕ™ r ³&‚ ä ÍGÿ„úÚöïóðññ¸ðñ´òðõ›úþÿ‘ø H‘óõ 6—ù¾üøØóÂðHï®ïYò÷3üü§ ‘ ¿ “ A ôo¤úÉõó‡òróÄôUöSø¾úþñÑ,Ê$Cf |\<þ«ùõñäíäëì¡î%ó·øðþDÚ ÓŠål¡ÿ ü‰œù=ó îoêé“ê î(ò˜öŸû4úÞ Ó¹Õ«ãNá ýjøÙóïëuè÷çHê}ïö¹ý1 ›Z©ÿzÏ ¡¢4ü`ö|ò ð ðÅðœòxõåøžüøÛF ƒ ‘mÓ L¦ýíøðõô³ò£ñ•ñ3óköÎúuÒ !X3øñ ˆ ìhJÿ>ù ógï%íQíáïÅóŸ÷û’þ!ò ,(æ)° ¿<þû»øªöþôôýó¹ôØö¸ú‹ÿÎ} Ñ V — ›}áôÿôüäù¼öøó´òyóÌõHùÌýhóL q 9 N ¾  ‰]¶ûÃö"ó%ñ?ñ!óˆõÔ÷súÃýÇi_ ýòɼ Ž6ý)ù\õqñèírë^êfë,ïMõ„ü‚ª ÈK%±ØýN >(¤øò¾í˜ë ë ìšîòðõJú§ÿy 0[qùV— “ƒÿíú÷Æô0ò&ðˆïÂðÍó¤øÿÛS Án½êZ}  ù<Äù…óvî¯ë¤ëçí^ñõù^ý´e· » í€Ü ò©ÿAûA÷†óð³îÿí|îñ õ=û•{ ú‘žÊV ý@Îÿ™ú~õ™ñkï$ïñ”ô øJütÿhiK ” ‰ „ ðQZüÖù´øpøî÷f÷'÷ø%úÎý0¸n ˜ à €ãü~Ôÿ¯þÎÕ'â.âÓ³3³›ÙWÅ-¾'ú2 ´XÎM þÂü íýÛªÕ¡ÜHçøéZèèBìdúúª/4/¤®p7EÞ!Z ‰ ZöÌëóßÌÑÒÛãlòàõ×û4·ÌÕ3y2fxÿüløëçõàê>ñí…êYóVö4ëèå&ô4g Ãý#Q*…‹üR‰“ìíæ¶ådÞpÞˆï·ý8öYë/ó÷±9ý÷ ³$$ ¸*¥+§gù×ò·õPìéÝÊÝ7å#ã¼àhï¨ï0ÿŽþ–)(&©"ëp2÷ý5æáNé¬çžß[äGñ¿óZï†ú&¹­"Ø"Ðv ˜ ëù}ø¾ñõÊïá™ßqìEôÔô Ñ›7ú%²$ù[¿ýšîåèð<ðýä¤âeí?ôððô÷ߌפ(m0%šZ ˆø€ë¨ì°íuådâ\ë5ð¶éeéRùgØ ›Ø ÈýA7 ‡ûÔô«ïJâÚáàƒéŒçÓåEñ…þ˜úða È$Þ bþ"úûø íüÞðÜfà“ÝÜ=è„øºþá©5!‚ªV NÜ=þAþcôþåá„ákÛäÓkÚ,ê‡óœùKêZv ’(Å$˜¬K ,û©è‘áÕã½àdØžØúàæä?æ±ñ˜°ãH)+)|¸ÎÏ’÷dôöìHàpÜãâå äê*ù}™×hÃ6Q$*þcúrò‹ä|ÞÃä£é§èí ú>h1 Y}!ŽI­¯ µþAûŽï…æ\çæ àÝà=îüTŸÓKÀ è4, h(ðô3é'é"êçãGá£ê¹õÜøbýN ›¥–c#Ž€¯à ý-ï–íïYè¯â#èªðñ;òÁÿ§èœt÷!U z Vm÷äòvñ_ç[Ý‹áœíeò$ôbÿm /éç" "65£,ýõkî\î²æÄÛ"ÜÜäçuå·ï  òè%*(- .¥ &3Ôû–ùðàß•ÙPÞÓÝ£×UÝ7ï¯ûYÿ™*ÂÍ#Ñ"{j ) çþëþßdãæäˆÝ¿Ý[ê†òxñ÷É &ŽÃ^"÷" ì Ò Ä+ø'ëoêPèöÛFÖjá1í}îSòüTk߉´%©EøÆkñÜîœî•âqؓ߉ê‰ê¯ê÷ø: O $›!Ž'o= 4÷ó‘õ3ì=ßÁà;èãä…ßëlÿ/¾SY ôs› 6÷®äâwëüëCå³êfúCÿ[û–£VÕ=‰ÁLÿýÚëÖåî’ïáæ éíùÄlÿ¼²!YT¹!} ¦k¹dð7å;éé,ÝeÚKëgú8û³ÿl^JòÕ"Œ*ÿë/l ¬÷ÉæòèýìÿâåÚÙä"ð|í¸í)Tâyu!.+Û!¤Ç Âôöñ‘óçÔØíÝ–êQé}åðò p € _ø'-$ Yc݃ÿŽùjúØìþؘØDæÅè™ãLìÐþ| U o!X&3”!¾ý²ûžÿOø¡äÝ`äðâbØèÜõñ=þ•ülAY"î³²&|&JV N#ìCß=åhæÚ]Ö5åŒð7í=ñ¹\…wíé&ª:ÜÍ2ý£ë«î€òçäÞ¦èfò4ìúèÞúö=ú ' íuñ Y¦‚òeñôzçdÚâtñ±ñ¹í^ú™ V ø\%)! Ya »ö|óîø7ïXÞßësëBäTîÝy Ô®t"d#ºNñD÷ÿL÷‚û ô­á,ÝýçÑè­Þ¹ã‰ù  Sd#sø" #•þVéEÞtæ‡ê à°ßqðûûpø üE >Ñ!æ#âÏxnôcåQéÞìáYÚGèÅ÷Í÷ù a[I "Á*î;/„êýÃéÁçxêýÝ¿ÑŒÚæêí™ìàûBˆõ¯ž.œ,mc7ß ŒövðyôêæÙzÙùâóàÎÙ–å/þ ›©\#Ú#ö?§!ÙÿÓ•öxâ(Ý“æRçGÞ†â<õþŠú œ CìQ QÒ8ÿMìááÔç³é·ßߘïÅú³÷ûˆm²'øB>5UBö¡è¸ê¨ëFߨ±æÞöcøùùÇ ›(R¨g%htÝ «ùèjèaíMäËÙÕà0í$íüë)ûÞGW_{% ¹ÉR_ æö¦òÖõ¹ì…Þ‡ànì³í¶érô}i Ì5 gÚt¶ûfòwóƒëúÛ/Û…è1î~êÄðäÜ † áÕ"Ö)p!©Ë Nùörøô@ã)ڵ߸áÛNÞÈñH[£ (h%" -C%U&*ü]Ãÿçë/ÝSß7â ÛØNæ¾ô~öMúÐ ÀvFG%,Ò!ìcA Ïú”éè;ê”áÙšß¶ê8ë÷ëü°•Ž%1ûGŒÅ »÷:ñTðIæ[Ú¢Ýüéíñë\öé± ] Yá"$௡9ûóÔó·ìMß«Ü¬äšæÙâêÝû_†½Pˆ$´ÿÓd°%þ[ýëö‚çVßTãäÞÕà“ðýÅþõâYg˜£“­^ÓÅþhïzådé8íAè¥æ;ð7ù!ù…üà ¶Ž–M¿n„ÔôRè_çŸèhâ;ßêèÖõ°ùkül û(¾oƒ" þ yÈû\ì˜çÓç áEÚáßbìòÆôj>‡Z'û%PºWò|ëìæ"ܳÚóà|ã2äÄï 4…°$›%‡qsü»•ýLø'îgàÎÛ\á€äÎâBè1öC2 PL!IÓ@ýE ÉýÁõÐçÈßâdä¥á]äoðµúôþµþ=!×!d!£$†"¿‘ ¤¦…óºæ?âþÞ[ØÐ×¾â)ïXõ ü] Üß°#7(o"÷Ø´ Lþ0ñêìîêtã“Ý#á­çOê„î6ûH .‡‡)!´(ç _”û´õóxëÉãkäéèÂéëÔô~{ ¨  º©ÒІ €}ù¹ôñëÌâÜâ-éˆì‘íÕó%þÊ™&‚Ü:v¿ùøöxðƒæ?âä~ä…ãé»öõfx7a›/Юò`ÿÚöêCâláGà9Ý®ß3êôŽù¬ò ÀÊ} !JÎ ŒSõ«ëžéGèØãAâ°çòíJñUøÔ#ÛP §· ë’ýëñ`ëåzÝŠÙùÞ®çýìjólÿŽ îñìÔ&\% i¬é Úû‰óVíìã³ÛPÛ'ß&áñä™ïÈü>¶ xõ 6$³"á!@é¢ÿ²ùúïåùß&ß—ÜçÛã«ðû\’ Y´ ùŸ"cé‘ 2Þú.îÛçRç*åÆáŸãƒêñï¤ó§üà ÊYúƒÿ‰  C=÷1ï=ìFèãNã#êóð;õÒü¤6¦…cˆÑ\ Fâûoñ¬ëêåßYÝãJêßî—õ™Ÿ !ßî!6 P×bøñòÙîÓçµâøâûäåzéèôT BÜ¶æž€æ ®*ûôoê8ãlãþæ%è*êbòÙü ÀƒË?Cú™þ7÷¶ì@ãxà âRâã‘é*ó=ú¼¯ t“m!Ï"´!ô®ãŒwøûì)åá,ÜÉØuÝrèpò/ú “¨,é&&/3cYõëýåmàßÙÌØþÝ…ã¨èò½ÿØ wéE!º$ð!· ’ÜûNõgîíålá`âÆãdä€éõn’–™è×G‘8 „}ûTó®èúá™âåæâè­ð"ùÿùë®û. Œ qF í¸ü³ò8éšä¢áùÝÞÇå(ðo÷Íþi "ØÛX(AF ð„ûÖðTëèCã’àäCìòñ÷Q ¦Dÿ9€ìb õ[ï»ìÍèå<æäêÚípñ’úy¸2r–P"ÎÐ úçû›ô³ï¿èÛá9áÄæìrðÓøé ÙeÜÍ 1iÉr Á“öðuèàÁÜ”ß{â ä‡ë^÷.°  ÈV$†$_#ë!l å»üPô—éÿáÀßùÝ7ÛüÝrèô¨üð—±¾Z!:!—#W …ô†éÍå_äKá=áIçêîôèúAð÷­ !"ç°™Yü|ð÷é™åßkÛ®ßçíó‹þ …™³$Û!âz· ˜þÆõïÍåöÝÝ#âuåéÄò'ÿÒæ Sþ“!ŒMžb­û[÷?ðçÌâ0ãSâ„áÿç”ô®þ @ Àˇ š›^;äFúïÿè&é´èæ‹èsñ9ùÓý²ÌÍSæ$µnwŽú[ïèFèé èŽéGñ†ø.ü¼âäZðI/ k;|öVì èàäÀÞvÜÆãÞí"ô–úÎX3òú #¤P 'ô¼í[êçã’ÞáxçÙêÜî²ù­² Ò¡/!å PëLÜ žüÌôáð›émáŠà›ä4æ›çðÿôZcÃ" ók×ëþÄ÷8íåàGÜÎß\âÚâîè²ôžýÞ} Ba"%"0!°!Uj¢~Lù.ìBã‘áªß–ÛEÝÝçšòíøœÆW à%O&ÊyÜÉÓøëìxè¥äÝËÙàsèìŽò=ÿ À¬•#… w>þ5ˆøðó·ñúêÄä’ævëäëÕígøo 1<n±O¡ìçý‡ö‹òÊé áwáîçëþìßõž‘ † >رFi L3÷ûç÷¶ïÍä'á 卿æ(ì&øPÁ£ áÊh™öö –vý.÷ì‚å&æFå*á¾ã½ïãú]ôº]êjšà¼ ª`þ[ð[æFæUçÀã“ã˜ëôN÷Ñü °†ª“óm ~Æö1ëÿççáøÝFäÇí=ò¨÷/ M¸!‘&)!¤+1Vô`ì¨ç!ÞÏÕnØÃáTçNë‡öÅX ¤‹N&¢(#ÙôÃù§õ‘í&â¼Ýà©ßVÞ?æõÈ]@Ù=¡ª5…°8÷Wê„ã+åŸåPâ~å]ñÓú¸þüËÃùMüô’£ óýüîYå¤å]æâ³áêTòtõýû Ûdœ) l^U ªyüð6ëVè÷à݃äòîfó´÷: eÌgü!+«Ñå û‚ôaïêíüæØß0â~éüë…í½÷•ô XîÅixÚçÇ ˆý9÷Oö\ðòæzåê'ìåëöóní Í o3DÝ$ho²ÑöÞò\ë[à]Ý ä1éWéüîXü#² Iì%þ"Ûc ¥@ 'mû­ô9çð݆ޮßÅÜ+ßêëœøtþ^W -#`#{ ±±~ô4ç’ãÌâaÝ Ûãã{ï°ôëùâWv—Ô §&X!é(Æ TþÄïÔêEêXä³Ýyà”èÆëuîžúä +¸uð#‘!×Ö æûIóÐï·çxÝݪäåèHêêò»ß ó Ý_!ª$z@ Âùüõ•îšâzÝÎá}äãGèËõ>"¾ ª"U |› Éò4°ûû=ïÀå`å åEàêàWìõ÷ü­ ª¯8÷«g ÕÅõ{ëëøí3ê™çOîA÷<ú¼ýt ™ oÐ)Õ ‡LW÷Ñê‚çÊèGåeáÇæñ¿õ¼øÅ N‘îs"x¹q ºÆô]ì&ê'ä°ÜÎÞ÷èuïÛñ6úîçÁ 6"K$ù×ää ·û(ò9ðJëháaÝfâCæ‚æLíbü‹ô £P²"é™t#¶ œþÁù†ó´ç4à“âßå‡ä@çƒóÖÿÂî Gý-ŠÉ&œOþøÆë6áá‰ä´ââ‚êÜõýû!f "n!R#$$ô! aJùÈêäŸâŸÝÙ^Þué1ðÖôyÃÑø¡%/$p|gàøtð!îeèiààëæƒë í›ôý½ ¹ Æ Šð~å gÜ÷öÍñ£èäžçßê)ëäðþÜ^ :8ïÍaJxW üíö„ñèÉâhæEëVëSíÙöçž· ] «Œ ¸û¦÷[îœå±äÛæ‚å³åGî<úyô4UK»*`Õ ¾cdöFêªäNäâ3à`æñÏø ýš£þË‚:Ž A ýñ¼ê®êÜèÁäþå$í-óH÷K #>I·å–µ J '¶ö[ìxçâÍÛ÷Ú:â0êaï^÷ÂCªãË"Ï& #Q†kÖ÷8ð®éàîÚݱáÉãýçËòçþàÂç"±#- ëæw‹ýæ÷ÞíŠãßrßìÞ÷à`ê ÷ ÿ¦^eðtóvb*Ýõ0ë{æJæÂäÙâæÑîÌõ¦û&¼Pw„P+å ½™ü¼ñÞêùèØæÈã$åôëŸòÂ÷à ³?ü:Q5 $zúÕï®éØäàÏßÊåŒìáð`öÛÿ_ ƒ– ð â CAúíôFðwé.ä[ämç[êUïÀø° §þÑ«ƒã¨þÉ÷†òéë5æ˜å{èpë•ïª÷á— #yz–Ÿ°AŒÝùýñôéãÚà©â›ä¶æìõVþ$n«g!Â! UzòÅ™ÿÏö6ìÏãjßqÝÏÝ“â®ëcõ²ý‰sÄÏ !,#Y!ùˆ jõ,ëÙä€àtÝ€Ýåáœè‘ïøÇ‘ ôPQ!è"™Á< ô¾ø³ñ³ëÙå°áoáå²êiòtü×ß;sÕ¤´ËÎÿü>ó\ë1åmá á‰ãHç*ì=óküM=Ü"›"U ŒR a÷ï•ç5âÓßàõâè²ðú± q5ZòºW[à qøùÇñ°êæ4ä)å–è6îœõ7ýV8 šë¤Áù§ öû õIïëÊèFè-éÊëñ»øBŸ -!"úõ¼ã k¨ùµñnê]åã‡äQç™ì]ôÝüé» Ÿñ†! 7 oi÷îæháýßià^ã¾éÚñæù[E !Ä"v!Õ‡´ +û¦ñÉé<äžß,ÝÛßææ[ï ø° ·\šÆF51 Ãòøøï&ê¢åâ@âæ&ìòsúDõÒ}j ±!$Øæ Éÿíôùì:æß9ÜÔݸá#æPí˜ø{ý A7$#´"ö­\¥áWüó©è¯à§Þpàˆâ0æÕíÿö…þðâÚôüùP²ž ¾ˆý#õõë<æÝãâõá#ççïp÷þýqÛ8”ä÷ Ñý=ôžíÚê.è®åßç¼îiõ™ú·÷ hÉe×y¥¸ ÆYþŠóÚëwéEèËåæOë ñ’õËü3|³&_ýtøÂ0þóçìçûàËÝ·ánèí®óÖý$/ýIUê¨ÝíµüSõðÚè²â ãç´éíqõ W¬ ¦zá8×+ ±ãø;ôWícåaâôã4åçýî]ûF ±Qœ¨a»Û çˆúñŽå5ßwßAà@à·äªîÝ÷Aþ>ÈûÊP!„#Ä C[ Šýý’ñµçþãqá<ÝÙÜÂãhì½òû³$¯0"J$ ‰†. K ôMíè{àÛ‹Þ’åhê×ï\úޤ ýá.0Hãýkö óøì>æ¦åéŒêZìžôæ< Ù »¶?{,n 2ù,ô¬ì£ã–àÙãPæ°çtî8újëÝÊVP½ÃŸ í.ýiõhê äúä7æ(åáç´ðæøHýU:ë/ÕL»e—¶åýôHëÒè•çÚã ä…ì¸ö|ü ç …d¦h= «ìùöxì`é4éÈå8ãèŸðùõû H|ÌÐNsˆ iêüðdéoçãcÞàèí2òéüt ÈÀKE$L#Q)ø1 ÿüòÕëùãùÚêØ¬ÞòãÜæYî)ûµ !¹¿%l#æÙ/Y Tÿ—ù`ò9çàßàááÕäð0ûQQ‚Å{rÿb¹ÖºúðŸæ£äåàâ€ãìËöQýWüL4 ‚®4^¸ôéàä²ä‹á«Þã¹ë¦ñ>÷´=Ú ë!€U6 ÁŽöJîäêŒåáß9áŽèîañ‡ùÓî F££Þ0©y Hþ=õSñáëäá?æ¢êkì?ò¦ýéÿ PßÉ—´•Ì£úB÷*ó-ëæççëÙëðkûZQ a±œap¦°±ZüÔõ1ðçàáå]æ÷èeòþU… úh"v ÿ+ ü™úð!å´àçàWßpÞãäðï,øÈþ˜ î@$!X’d p ýPðèõäáoݼàVêƒòý÷Ûå ¯ˆÁx!\!Þ)k öÊì¡éæà•Þéãîé=îqö,ÕeHÎ õ"8Ì^ý1ö¨ï é!á ÜvÞ?ã#æñëNøŸ óH"Q!·J°l/ôùÇòxèà*ßíáÐâ®äÁì†÷ÿþë寰û ¨öo ÆèÿïögìÜæ\åèâwáõæñwøýºˆ0ùËXHijûZñèë@ëÁéBçÑéíñûø°ý5JŠ¿~©:£ß *Úü‰ñ éWçfåÅáëá èæî,ôeüýpûIì¢n¥† >ÿLô´ídèâGߣã-ê…î'ô:þd\†& Kæ¸2ø úMó5îßæÊàáçäöçZìùõ™ ŽŒ Å£µ,",û7õöì`äájâÂãKæRîúfõ ‡K¿‡ã¯i ûÏø=ï6å.àCà…àYàxäÏí?÷\ÿò \âÄ!4#k$!‚eÿ¢òSèÌâ¢ÞÔÚˆÛyâéê»ñBúÖâ½–A £"÷ä| º öUïûé äáàsãrèYìâñ~û–s ÚTÓøÓ ªû¼õñ²êå1äýæèé’îÞ÷µV Ü_Yùí+ z•ù‘òéê$äRâ¢äÊæ=é{ï¨ø­G’9’pV•Ѐ E½ûæóCëæåÇä•äå•é3ò¦ú} ÈÇAZó}ôÖ9ûvñœé æ=äãxåcì&ôHúH^ Ú§`Ï"<ˆÿö)îZêMèÇåVå`éëïoöLþÌNx.‘<UÓ v2ûið¥è%ã/ÞºÛIÞgäáêXòýæ@7Ž$ê#C Rè kö—íå–ÞëÜVß§â¥æî/øë *Ë!› 'ç |FúýñéžâYàlàmâ…è%ò±û¦ ôÁãÃQz qØøŸïlè«ä×â â~ä1ësóAû ø ÄDªô ƒÿàõ~íSè-åuâðásåë’òû¹Ù“®žoÈÙ‹Ò HãötîUè~ãá¿âWçqìNòYú¦Î hk£îÝ¢_÷CŒø?ò5ì_çæå«çíêCïíõUþë í¾ž"Òe v*úAôî*éOæÝæéÜíÇôèýŸŒ ì:¬:+ã¬þ{õJí6æÞáËàÄááã?èäï<ù˜ ©< >‰Q Ñåú]ñáèQã±àZà¿âwè^ðÏøœç p·ª¹1)j’ æ6ú®ðêè‰ã0àVß/âøçï÷ ‡ ®¸N +œx ¼“úzòüë´ææâãáFäOéqð|ùvœ ÛiIŸ/sk N÷*îÊæiáïÞ¹ßæâôçüîõ÷ø‡ 'kP 7".!²Ø»M©üuóBëïähá°àDâ)æuì™ô£ýÀC3k»Ô pD "—þ¹öAï‹éjæ$ævè$íÂóû¹ê;âˆÞ@åöÑþa÷ïðñëìè°çÿçIê ï)öIþœždÂ}ˆã: qýMõÑí èœäjã]ä è_îmöFÿ=É”Ÿa3ºÊÑžŠýüóŒë¿åÉâ^âpäßèìî§õUýzäº#Ûnƒ,ɺþ.ösî3èTãðàPâ4ç2îöòþ§[ºxs<÷` ‰ûêò3ì÷æTã‹â<åTêÝð*ùê0 ¹ü!¨!u PZ ¼-ø}ïAèâÞ5ÝûÞ¯â*éó`þéc¢A ""J!82µ L÷píaå=áŒà£á¿äÉê¾òØúL ùœ!´ýÙ&YÁÿT÷ïé¥åÀã¬ã5çÖí,õü× |\Ø Xà ˆÿ™öyï²ê'ç唿ÇëbòìøhÆž ´ƒ‚š¬ íNøðàêoçÅää±çkì¬ñíøÇj L^‰Ÿ1‹s ¤7úžò(ìæUâåâ|æÞê¬ðAùj• —²T+$}EÕ ×"ú¥óäìmçñåµçYê!îäô{ýÙ% !kª÷ büö ïAè_äâã¬äíæIíA÷f ºž$Ù‡}ó~(pþ·ôiê"ã4àBß@߉âþéˆò{úÑÉó=v ˜"!!ÙË6 b‡÷Äí—çrãÎß,ßrãöétðøOè /q( !,αU ¦1ùñuêÃãq߉àEå8ê%ðýø¨ï ΚV~ê‚ †øóëì ç塿åè_ìîóKþ€ Fgé)‘³Àü®õî4æüá â%ãåä{ê÷ó2ý¶ù è®R\î¡ NÈùãïãè§æ#æ–å¨çÂíxôæù® Øš.ŽøÐÊ šÑÿt÷ïkëéæõæ ì@ô/ú= igdW%! Ùæùîð¯ëàè¡åÝãCçÿí ô]ú‰` ÊsžÀÉÈ­( uqõÊíXé¨ä}àÓà_å:ê•ïÏøÈ…þ7¬ q!·µ×GÀøüðé7áïÝ6àªãâæGíg÷‘ÌÍ Ke7¡ ÐüõÀëÜäãmã¼ã#çbïøÿ.ò۠Е9 emûôñLé=åÁãIâ‘ãzêåó€ûÛ© æ¾àà œË ½åøòílç3äˆàùÝ¢à9çzí0ô—þ{ È”pa J=hïàüLôÆîÑè-ãgâ‡æüêï…öÙ% QÍȺÌZY E ùôOîØçÿä6ç>êrìñ†úÜÝ>}W3f£5þêø©óŒìrçkçkéÑêïîì÷’² ÁGih]G U¼úÝó+ëêãâ[ã+ä æ îº÷rÿ(zÞ§z©}¾ÿöÞëæ'ä;âNáaå<ídô û—wXœu¢³W ô»ÿ&õ1íèèáäá@ã3êCñôöÒþ ïXÚÒiY4 ¢Rùðë¼æ}á˜ßã/èüì¦ôio —¬Qµ"O ÁÖk˜bûTó(ìÌãöÝÿÝ÷à¾ãõè#ó†þùI·›O6otÿ`÷«íSåyâã-ãCäêÏò`úã= µ âT‰¾Ž;úXðâé*çºäxãaçJï+öyûè( cùªûYÒ —,þ²ôäíë±è:æíç~îAõ‡úœ- º@KÅdŸ‚ Ýš÷ïéê}çæâá[ä¼éÍîBöõ p’W×}%YÔú©ó.îöçûãnåpéyì”ðËøvf ûßB7¨yewêþë÷ŠòµëuåäxæÍèûënó‚ýŸ ¬Àã5t=þç÷ð~çìâÜâ·ãˆåÅëâõÿçÚ Þ¢•†ù…Æ´þ¡õIëäá7àöÞxá"éòúŸ_è}. Ç"è!å8n ¨ùóîPè–ãíÞcÝoáèî‘õTî Óó±% <CvZ­?úüò§í­çcã)äèÆë_ðø çœýB¨ãÅ ÿ‡÷áñ3ëÇäÀâþä èìÝóPþK (ÿíïT ¸˜ÿ•÷¹ï¦ç2ãã÷ãåéòÅúø) Z–NsVûlH›8úUñŽêèçæègîö˜üÍð {¼ê® _óÿûöhîéçåšåïêhòuøYþq¡ÅÞSŽé 7“úÓñ„ìÅ龿ØäIçCíóOú¼Xwƒ ì¢ó †bö…í¦çPâåݢݱáþæíZöL ‚(V Ç"ñ  ""SüÏóÔëcäàRáÅã]æëvô þ;šwO*sfP ‚1ý§õÁìåÑâñâ!äíç­ïãø¿ijÍ·«H¤Í é&üæò8êåÍâ}ájâÒçðü÷¥ÿìZÒˆ^ m„ Ò¯û*òTëç;ã’ààá?çèí,õÆþ Êö f8A$e%Ëü·ówí>èÙãßâØå?êâî‘õÇþ‡ Í1­ ޹ð nãû^õ¬ï4ê2çèýêî­ò9ú}+ ã¢:MÝ «‰ýøö8ñûê7æLårçÔêÿï8ø¨a ½SÓììÚ+(ôûôóüë&åÆášáâìä°êQó0ü Tâá+Ü[É¿3ø†ï¥èþäXãXã«æŽí~õýŽªÜæ+1@¬ˆ2µþïô^ìàæ{ãwáeâ3çî õüü’°hOÝzËp²÷ýòôýí™èÎãáhâ#çNíþôÕþ 0*>¦z(côÇýoó°ëßäÎßSÞWàäBé>ñyûmC•§\!B!@•l þ‡ùTñ¥é”äÓâøâŒäòè‡ð<ù‹è §ÏÓ«ÛÓÞ:úìñ2ëÐç'çèMëFñ7øŠþê2 øBG­k«ø š™û*ôpíéÉæ¥åqæ³ê´ñZù3Р? Ÿ]N àYû®òÜëkçTäÎâ äØé“ðý÷†ƒ Ê®^èÅRîs aúäñîëÌç åÈä¦ç.ìlñpøž ·Ü|ß¹a FÁùrò&ì€æ-ã¸ãAç)ì–òû¢ ÙénÌ­ðØ þTö>ï¯è¨ãâúã•çÖì¬ô,þ98è¤M!s!LÎ Ñ­þËõNí‡å@àÞÏÝ’ßÜäÊíé÷¥N €Sè Ï Ä…ÅEýFó ë$æ•ãxâôãØèŸïºö»þŒf <õÔ/ µÏú"òºëŽç¥äàã´æì<òKù: cFì–Í6Å’ †‰ùËñÐëÍæ‰ãùãóçQíqó_ûg7 ;ŠÇßPõnªBÿŸöÿïZêiå/ãmä‚çÈëwò¢ûçˆ D=AîÌ•• Ì ùÓñÖêüåÍä æQè²ìô}üñ½ ©—4î¨ ÈþÄ÷¤ð«êúçè7éìôñŸù³^η“DdlELùÏñpê›å±ã.ã‚ä§éòûxP A@Ïì„) ·û§ðkèŒã‰àÏÞ:à™å·ì>ôPýéQºWÜG †›å»ýô íòç†ã¡á»ã7è`íOôþVh¹ä–¤?|áý ô\ígæáMázäèÝí¿õîþâÊ &|㉖ EüTõ=î•ç"ä.äÁåäèïØø½H }øÍûlœ zrû,óšê„ä÷á áfáFå%íöHþÓðï‹¶Hîbâlbö{îKêèOæ¯æ¯êXðâõ¦ü• 2=1‹k ÃÎû˜óîœê°çÖæêðéõ ü9» £M ˆ_ i@ÿöÞîê§åÎâDäséFïAõ;ý–LñtÊL7VëœýâôŸîÌèRãáÆâ4æ¡ê%ò–ütí ¦xÆc\†B ÿ}÷¶ï½çâÞálã¥åcêÑò<ü(í oîA”Eøwï è¸ä!ääDætìÇô|ü/a à ˜|^ Ñþpõ@ì2æ(ã(á;áÓååí öýý–ŸÕu \"Ê!„ ½ÿÂô6ìÅæâPÞgÞªâHèhî-÷@ë ÍÚ»ù›éÒ åù5óí#ç*äåêèì\ò0ûú‹ p“5¥5Dðùý÷ºðê¹å©åè¡êÐîKöÇþ¬ r9« ÃÉ Lübögïélæ¸æºç–êfñnú:ÚDL“1i¯ï ¨5úÒñ©éôäÂãtã9ä¶è…ð~øöÿÁ o@ô±·îl TßüQóìDè£åÂã'årêèð'÷ÿèøp´p¹h rúJñ{ëSçóãÛãaè¸î‹ôNûN I5òæô# Ì ÿ1õîZè§â ß àoä£é€ð”ú‹7ç!Ó!3Çí N:ù‘ñeéâ¿Þ7ß2á åÔìG÷¸£ð°öÙUÓ X(üwó ëÜå[äèã,äãçJï[÷ ÿô…,¿¹è ˜a È×üWó¡ëŒçGåçã åaëYò©ø  ñjE·ö‘«Òù»ðtë è)åæäé^ïqõ3üø €–hš°w~ZÿõõïêéËä*áÊáÀå~êxðQùUD &çŽmþÃjû ŽùdóRíèræTè$ë˜îËô\ý « »6 xûõ»îƒè:åÒåþçÒêOðÒø|®ãMþ”ÃÙ§ Á"ûjóëÐätââÊãÌç¯ïÈøÓäÊ8fÓ€Þ  üOò™éaä­áØßUà!åÍì¶ô9ý~w=Km” ‘c  [ÿ õí²ç4ãlà»á„æ)ìšòxû¥A+QàL÷-|þØõBïNésä;ãûå+êñîðõÿWµzU²D ˜æúÙóí9æâôáVä ègî¾÷dP «^Þ xCÒlýkõímæSã¦â÷â°å3ìô|ü7ª 9Ý“›[ 4 ÿâödïëéèç<èïë<òÒø¼ÿ?vBßüÁÞúYòìwè[æàåÐè©îàôîúYÁ Žë1f%Æ iÅÿÿö›ï§êææEäÐäDégïíõñýX±ž>ø·jî¸ß)þÏôŠíuçñáúÞà äméòðêúÿ Ñ+Zz>¦Ñ Îù˜ñ¨ê‰åçãÐ䬿cêOñ5ú¹š ƒä›7‚ Æb,ÿz÷uïNèaä³ãšäFçígõØýÜ`u¸µåY™ù¢^ÿMöýììå#âràÇàägëRó0ûµ ëg¶ â5Ñ8 ´;ø×ïÅéåŒáÍàä¸é€ðÕø£· `fa©‘Xv r>ùìñ"ì4çhä!åtèÔì­ò·ú`­ »B| Z6Í`ÿ øòsìIè:çèèÁëçïjöŽþ;Ñ öÃ^äóÐ} Øúôíàçå}ååçÓëGòÆú)‚ •1tœÉ6ºr pûóCë™åãeâVãçÔíöGþ´LádrÇÚ µþý‘õ+î}éçæ…ç ìòù&® {²ž qŽXX žÂøð»é§å&ãæâúå±ëUò¹ùÑ +fYŽ€Û N ùâð[êÌäòà¢àä¬é®ðyùW= e”|g »¤äÛ ï3ùÙðéTãÙßÐß,â>æÛìüõÃÿ£ÏGqI¦19h[Çý õäíðçåä&äàäêçî'ö[þ{xßG?å¼á' þükô)í«èüæçéÌíQô%û$û £ãÚ©_žEëÿõ÷ðæé9æBä'äçÞìåóZû³u ĬTòû Qùyñ•ë çâã•ãÇæIìÉòhúï¤ |Ï]¹¹fmãÿ÷ñ]ì±èþæè[ëÁïºõºýU¢ |6Âä• }ý_õÜî/éTå¯äûæÏêðW÷ôÿX&Ú‚tð0 ¦ûEóâë¸åŠâÌâUå¡éTðùá 2®À… Ãâ‘7MüyóðêFäŠà$ß¶ßRãJêûòëûXüÃädŠƒÌ gTø)ðdêÃæ¥äßäyètî<õÃüN„ ªÀxi'Ë ŽýkôŒíÇèdåùã³å-êòï¶öÿL1)ºgÛ,ò¼ áèü¦ôÜíèÈã âîäEéÞîIö0ÿ³Ð!s\Y×; äücõªî°èîäPäøåéXî+ö½þƒµ k5ÜÝ žý˜ö±ïCê»ç™çÂè¸ëdñ¿ø9(EÖµ®ÆÄÙú™ó$íTéTèæè ëÆïyö\ý!| §”¸ qØ 0èý&öLîCèÓä4ãrãòæ¼í¾õÆý]<ƒBMÃ$ïÚ* lÍ÷;ï é’äTáãà+ä×éˆð‡øêß Â"†Ù†ðÇ Á¹ø™ñ!ì•çðä…å§èí%ó¼û8M ±SHŸá²ø¥ÿåöPïlè`ãüáåãYç!ìGóü†( ´1‡Y)ZàQÌÿ øGðétä=ã䡿ì ô¤ü¼ KDÞ8Ò†3çö§øèï¨è=äöáYáÈãéé¾ñ…ù§O ÑÔ(Uo5] Ê>ûzóBîßê<èxçùéÄî8ô«ú»¹ ~2à¶R˜o ¡;þoöfðDìÿèQç÷ègí¹òÒø›# Ï™ë AgÁ $ûóÓìªçõã›ã¾æ^ë¶ðç÷³øÊxÛkÉ÷ KÔûäô{î\èŽä8äæLé ï÷s­&Óy% «òûŽô&í’çsåÚågçÿêªñÒùxæºZ¾ÿg ŽÒú‹ò-ëàæMåþäzæBëò+úê¥ ´d…ÒÀéŒ Rù4ð!éÉäÿá áøãTêÙñ­ù·s Œ/”Œ!ý màpX ûûñQëÛå[áÂßâsæþë¦ódýÓ?{üä"2Bè)þïöªðÂê çóæ8énìrñ ùl}¡°mµÅ© 9¨ùéòEì4çªåçæ"éÖì:óHûä÷ j׿ÑG+M‘1TúÈò‰ë ç©åûåècí'õ×üÎE µÙ%YtzÌ„³ø“ðiêç.å‘ä çöì$ô7û¯ ©æ©faÇsâYÍøpñ¿ì–é&ççXê¬ïŒõ²ü^\ ¯°+XŒH ËTýµôDî¾éHæ$å´ç¹ì=ò¡øúà «jà… qú7ò•ë‹åátàFãžç[ížõ‡ÿ±ƒÿG ! %¤oÿ÷ïç²âzáoâ2åëƒó:üúÌ œ9¯A?'Ðy°ÿÄ÷½ï¾éææÜåïå¥è¸îPöÍýÍt{Y«Ð”— …Êþö-î5écæ¡ä)å>éˆï=ö¯ý€àŸ3½@TëÛ ðBý\ô¥íé·åUä…æ…ëBñ®÷ÞÿÊ1УÇ9Oä Ö¿üâôµîégäôâíäšè„í¿ô©ýËZ k²*UÛa² ç=þÛ÷ÛñWìPé“é‘ëvîuó´úQ'ÉDzÃAãÚþá÷pñ4ë çEæ²ç&ê~î‹õ¶ýC ç9ÝIš€Åÿ øéï¶è–ä6ãlãôåÙëÝóåûÒm \•S«ä‘p¬ §¦øÛïé±å:ãâKåëýñsùF ö쎎=¢˜Ô :ùUñ®ë+çòãÂã ç/ìDò!úrØ  Íטµç >øñ+ëZæ:ä¡åé{ížóöûÂe >\ñµÍ£À™Èþ÷ö¼ï°è{ãÌáã æëìòýûb: ¢U¨^ '2ûËò"ë4æ ä–ã'åâéüð]øÿ€!ŽŒâ„m©úÄú­óˆî¨ë×é8éaëzðÌö†ý!å ²Ô„ ~£ RÔýwõxîêWçæ|çÏëƒñˆ÷¡þïˆîjû£³ Ÿ.üôïí_éöåõäUç÷ëyñ4ø®` †FöJ áv ?ûàóHí>çüâ1â—ä¾è’îˆö\ÿ/í V”Œ8ðø NýúõLïÂéÛæ²æ%è/ëØð­ø°L›MÝ(ìc cÐù?ò,ëWæyä äwæ ëeòËú u ¡¿×Æ Â€§ crúñ;é9äáßàÖâèÿî’öÿKßQ‹©Óÿøý$õî±è„ä—â äQè îõÌý­ö – Ïndø0 ý£õŠïYêÇæ.æqè>ìañpø¡/eüµ¥† m¬úô+î^éç€çÀé_íó¤úy˜ =éETµ€Úÿªø©ñëŒæÿäÜå‹è‹íÖôîü– Tõæ„G“6 W{ù¢ñë׿ßäˆä}æ^ëòWùëâöÈE² tùlòdígêÓè éüëKñ¤÷¬þ€Å?"Fº¾† g!üšó‚ì¢çäoã/å¦é•ïxö³þÄzHÕk”¥™ýöô°í¯ç>ã™áXã}ç+í ôý‰wf&p\–ñLÑÓþŒöúî,è]ã®áÏâæ‚ë/óÏû¶ ýÕ ¥$C¾µ¢ìøñVëkçÖå æièˆíºôŠüX ˜ÚÀö_R ò_þxö)ïíé7çlæ|çëçðÑ÷BÿF#[8þFýM Öüô¼ì°çŸätãæäéüîßõáý®ÛDÖ„Œš«°—„ÿˆ÷ªðë÷æ4呿Wê‹ï ö–ý#› íBÄñ¢Á uÞûPõð²ëÿèÎèþêÎî/ô;û6 O_Ó¤ÜG'6–øàñì{çeåôå…èîìvó–ûè„ N»°ìzÂ-ïÿè÷Dð™é*å¢ãˆämç“ìÇóñû8 ^}ß°)ýK. º.ùÐðÅéýäcâÖáÞãÇèºï¡÷*õÌ”1äGßX® Öûêó›íEé­æNæÅè”íÆóöú ¨q—±ÆÓ¨^ÿÙöxïáéîåâã€äÅçÙìcó€û€ &¸SÐ{›0   ùWñœêKåâ÷âìåÙê¦ñåùW +1hÊAÌ ›Êú“óíPè ææè3ì…ò ú›Ù°(?óº61òíù2óŽíûéèÝè#ëÎïEöZý€‚ ‘ŽW}çC gþö©ïÙê|èè^éÜìRòßø÷ÿœ“kUûj Fuûoówì€ç‡ä¢ã}å#ê‡ðÔ÷ùÿŸŒ¿+»¢ŒA¦ä@þÛõÒî<é-å‚ããäÌèHî'õ2ýPg Lȯò_( œüõ®ïÉê„çÕæ°èˆìGòæùq` –]•Iþ hÆùëñë±åã!ãWåqéÈïå÷ŒëÚ¨z¨Ãsþ ”(üÖó6ì±æêãyãåéuï0÷aÿìY4vGì ¨¾ 6 þlõŸíßçKäÐâ ä.èMîJõîü,ò ‘iäp Ž ‹²þ÷ñ‡ìjé/è—éOí_ò”øúÿ‹ç °)ÐËWi[kùÀòŒíéçHçêµî£ôü^ê ä-ùK «qø?ñëhæ=äåâçPì‰òVúqð ÛÙ¡ù“Î îŽú¥óWíËèÔæç0éfíÕóGû‡… '½Ñp³ ˜Wÿ/ø/ñoëèçÛç»êð)÷•þ =-UmÝ4 ºåý¸õ6îÓè×å¸äšå+é ï ö¼ý3™K«LšNš "²ýÝô:íç¥ãÑáãBçií¬ô/ýqâ­›cê'ã Ûù÷dð÷éÙä0âµâ¯å`êñð4ù»L ÿÊŠb¹Fâ¶§ùWó¨íŠéýçÎèUëÞï¬ö‡þö¯ »9§“œS ˆ®ü8õ.îèšå.åƒæªé7ï“ö]þ)äZæÆ+š \áþðö]ïÁ髿åKæ»éïLö{ýQ< ›§Ð¤«y Ú{þ§ö×ïóê¶ç1æUçXë÷ð5÷Fþöè 2˜ªµÁÝ uürõðìé3èê3î‹ó*úõz [¹î=ÚGl,WEøñ7ì+è æ¼æÜéiî}ôgü à iÚUr½ËÿK÷Ðï-é&äþáÇâŒåêèðxù4| i*8&ןj MWüFô©ì$ç}ä$äÚå.êÔðHø§ÿ@»„ he (úáòœì´èÊæŒæÆèÊígô€û9` ˆwf®q.÷ú:¿øØðéêÎæ)äÐã—æÐë=òÅù{ù µ—„ ÝD Qù½ñÎë.çŽäüäèºì«òRúãÀ b2YŠ×q @útóKí3èå›å¤ç[ëWñ ùǰí’kÓ!…{øú¸ôïEë7êëvíÕñ4øÿy” P]ák{u ²—û³ô$î,éÕæ«æèeëJñ¡ø4úÚf5„V+ ó`ý1õŸí3èåçãå.éƒïöùý4/kš0¥üº[ ?&þæõï,ê«æåWæzêð¡öqþÉý v«Iëþí hü“ô²îöéværågç^ëÍðøµï Q7:.ž ™ïúoó íÌçÚäÚäç¯êUð-øÓà;»d0Yz< Ë‚û‡óçëðåûâ½âfäDèµî·öáþ P‹,,1ú± Ó÷ð9êÄæ"å£åéºî%õçûbà ÛÎ/©Ky§ u‘ý‹öÑðöìjêhéëCïãô-ûbè %c4 ¤óªyïø©ñOìèæ æÎècíó*úua ¬‡oÓ$3³ £xùœò í èOæåæ·é×íŽóûH¨ lèglþôúyù›òEìsç€åAæÌè$íŸóQû¼Œ …‚ñ“^Ì•Fkù¿òæìBé èÃè1ëð÷öMþjƒ {G ‡Á 9ÐüKõîœè¥å§ä‚åÿè.ï½ö¨þ y]ŠeZ†áSÿ+öñíòçäçádâóå™ëVò=úB !…O»e·¹ [Ýù¥òÒì'èuå¸å†èâìÏòuú±ÿ kòêN+7WÿøÞñwìwèçRèNëåïöaþ÷› ŽM«si°· þþÔö3ð›êHçŸæÏç™ê”ïŠö'þˆ¶ ;«WíÉx ݶýxöaïãéîæ%æ:ç¥ê|ð‹÷ÉþKë \~ƒÁÔs ’<ÿn÷ZðFë)è¶æˆçë}ðö!ýaM ¢P›×JˆÕ Œ•üÕõðñìŒêâéÞë:ðßõpüíb Xj4¥¿ÿJ÷êï_êcæ:ä·äÓç¢ì½òxúN¨ –"ö d¬r^ Ç#ú{òáë¦æçã#䓿²êÊðºø=0 zÉݾ´ª• •½û*ô í£çåôäææ ëgñèøoÚ'P†ââV8 Ü–ûMôÛíkéç æcèáìió¤ú š ~‚p±ës²Úu‹ùéñðëèæååyèŠíô=ûIs D;ŽJbµß Ö-ùkñzë'ç‰äaäìæhë:ñ”ø x róØP·÷ r©ü·õ¼ïæê+è*è]êîJóýù@ !LûlL‡ ÿ}øÎòñíšê¦éíêÉíLò¥ø @”uÔQûª “ü¢õ.ïÔ飿âåçRêÜï4÷ÿ…¹ CâÇJ¬ býõjîé0æyåÂæsêcð€÷ÿÛ²7ŽÒúeª I[þ9öï¸é>æäVåéèî.õÅüú› ÃU£9¨Ô íþföðtëQèNçÿèítòùÒ¹{¸~„‚ù ç7ú]òûëçä£ã×åòé·ï\÷7áèˆz©Ã$–uûýóõˆîXè„äˆãää7è³íõûüÈS &!„• eÜ“ÿSøfñäë¨è™çyèëÜð`÷!þé À—\;ã+ù f¯üíõõï±ëJé”èýéûíäóœú®ã\ßiMÅÄ@ú#ó™íûéùçÉçêwîPô$ûܦ 'Àž™Gåf½Œø.ñë~ç^åÃå°è[í>ózúµ­ hºWuØ73¼ &ûôîC鹿ôæqé…í-ó;ú¬„”¦Õh¦ ï 6ìþ'øò×ì'éÞçüè ì ñö÷ÓÿcCYõ5ý·Q¥ ‡;ý[õ îèFäãêãûæìôXü¤Ë B ².§ øžø²ðkêqæ‹ä«äYç†ì:óÉú g ‹§±7,l§ î£ùøñöë¾çcååLèí óúÿž ïÉ=«ôÚv†ùóõí3êgè0é,ì§ðö¥ý.è i®íd@³ ·ýûõèïÝêhçkæñç\ëwð`÷\ÿ ûw›2ϪŒ ëöýzöžïóéæžåÕæÙéëîºõ)ýuŠ ôŸìH?8 Rmÿžø1ò!í(ê*éûéí=ò£øDÿõp ´ë1».d8ž×úô=îUêfè9è4ê¯îõôñûJÉ xT,L_Ø/U ¬wù²ñ¤ë«ç{åNå¨çCìKòsù® W«'…1av ¦+úPòßëýæ äÜã‚æë,ñÀøR¨ ãß;ö´Ä °üõTîÌèåü䯿\êÓïóö¤þô¾ Ĭë:‡ÿ ¾Ïû^õtïçêŸè•è}ê”îáô\üÄ­ í¢{4…,b­ø?ññêÌæéäæä÷æë3òÀù´Ó =¾øPœ]ä/ ÉÌûþó¶í}é ç}æ_è“ì2ò»ø5ÎÆ …šQ…Å ñmûtôöîëÀèÙèzë½ïôô9ûS4 éXX2ak [dÿƒø­òþí{êïèùé*íÄñ¼÷äþ+} «Ã×W8~ =tüaõeïuê9çˆæBèÇë ñø¾‚oßãjý¢ ãü:õ7îèå@äeåèðíKõYýT ò¶òN3 ä€åø—ñàëlèçŒçêÃï>ö ýW€ p`n¨|Ѥ ß ü9õÖîiêÛç çè¤ì†òOùÙîc ÔÉ^*Ýj ø£üuôŸínèÙäzãå éŸî•õÔý]Ü ÞtòU.»lþ¤öð•êäæÑåMç˜êrïöäý¥³ úÞJ¬¬ _ëþý÷‹ñìtèbçQèëôï’ö±ýpÑ …{,ü.] Ìhý=÷€ñ5íëàêSìÚïzõüº) ;ú™KO1 ìÈÿ¨øÀñì‡èç"çKéØí+ôBûϦ ³»©–~ ËÜú'óíÑèiææpèöì±òLùݦPL¸,ÿs…Ÿ ˜û-ô¹îžê@èxèCë¯ï+õØûE; §Ë|pm Y¶þc÷6ñì-ètæoçœêsïöôýðï êÅ¡ÜÓöd ÿO÷eðzêdæàä¯åeèCí[ô˜ü¯9 9ïQÓ)ePZø³ðRêFæ“äÆäçâëªòCú?r âLa‡0¯ íüdô.îê®çWçˆéèísó¦ù¡Ý ‚`kG; |ñÿùØò7îëoéEê¥í­òžøzÿåª ÷×+'yå 2býÜõ›ï¦ê çœåâæSêDï°õjýJ/ ûžPh4^à » ÿú÷Úñ¬ì$é è0éÿëŒðûölþŸ ÑßnO‰Ö âÚý9÷ ñì'éœèæéóìòÂø¸ÿgÏ M× –@¸g „Âû.õNï4ëNé;ééêÑî¿ô™ûž½ s‘kE5à ØIùÐñ™ë{çXåå^çCìãòRúa¶ ‰ŸÒI¹ó #‚û;ó†ìœçzäµã¿åê¤ïö–þå@EÕ<ÁÄ*. ÖüýÏö·ð±ëeè®çqéñìò¥ø(:^ —U°—¯2ú™ZúÚóîé`ç¬çÿéî+ô®ûSV º|sag'ø ú~óIíåèÒæ®æNèì)òiùëknÐâä'O7½ ¿gûôëíÙé×ççŽéâíÌógú…õ¬˜›èáÛô Xü õlïŒëNééXëŒïµôžúTÕ Ë î' ÿøêòœî’ë3êOëÒîØóÞùÒtc·ãA@ éÓûHôî'éÏåÊäcæêHïBöƒþ½ü ÅI.ñómIÿ²÷çð1ëlç(æçÅéxî2õóüœÐ 9æ R’º œ=ÿÿ÷*ñ¬ë{è“çˆè{ë•ð*÷5þZx ©ÜË¿’ È âÅý~öÌïÄêÒçËæëçšëeñ/ømÿ R-',’›G -ký›õçîûéÉæ‡åÚæ¼êQðöö—þ¶!lo» oTþ‹öøï¿êçxå–æÓé¥îõÅü­³ ›<ã !Ÿ×‘ºù§óˆîë ê%ë×í"òø¨þÄ Ä]ÉÅÉ néúõÔï÷ë7ê—ê¢ì[ðõõÜüó§ ÔΪ6Þ±t@ú óñì²è¸æºæ­èðì+óPú åš¸¶Òëw wûáóííüéèéçêî{ôûOÄ fP]ƒK”1òüúŽóííééŒçqçöéî@ôëúP€ ‚ Ò³ u?êøòjí¬é×ç–èÀë˜ðÒöAþ  ÖK\- 6ÀmþyöïðéÞå#äçä»çxì>ó~ûê äi¥RÝ}úª ™£úó”ìûçÐåÇå«ç¼ëÖñù“ ÷PoƒÂìÉ  üõRïë¶éÃéâë$ðÉõÿû”S Tžü…ê nùþBøò*íê•è?é\ìvñœ÷Yþ†e üñN±•<† ï¨þd÷(ñlì%é¥çèØëÇðãöþ~6 “˜"ÞÉJ vØýœöðÐë”è|çÀèåë‹ðÂö/þ¸p =^ê7ç ,ðþ#ø%òBí:êéæêÍíRòZøÿ­« Ö[˜²Ö î)tú3ô¡î„ê¦è éVë‚ï“õÌü,7 ºÿê«H§g ‘Áù'ò{ë»æ@äÞã³åêmðä÷ÀÿÉX\PGO%‰ -RýŒõôî/ê4ç#æ…ç^ëëð†÷üþÉÕ N'0æ ~¦ ¼ýºõ™ïëêãççêèÃìüñeø¹ÿW q.ì+EÒú ð˜ûýô|ï0ë³è˜è±êtîÃóú  8@“‰.7¾NôùIóyíéææç-éíóSúî ªÿFH_¢ÖO ²û ôeîýéÕç¡ç:éáìeòêøÇÿÄ] Œ£ÈJ’ɨTüöÕðQí†ërëqíŒñþöïü+n ҇Ѥ … ýiöpðìPéQèpéí‚òõøõÿE'¡x¶ãÑ® ”Äýö‘ï¨êFç¿å¨æñéòîSõöüm X¼Eaøo p‹þëöZðëgçæHçjê(ïõ=ý: g.ÀÐÏ”yÉÿjø­ñìZè(çèÉêEïvõ€üV rîàÜñ: …¹ý÷ÙðÔëêè-ènéÎìVò?ùvšyL5ýÊ]zÈ _½üõ=îéßåŽämåêè–îwõòüÏZ ‡ï©iŸq·†çøGò6í¤éÌçOè5ëËï‰õZü«V ¢ø<7„£ «þø…ò=îZë}êèëï{ó ùÏÿ‡] oÐØùÔ mÜû×ôœïˆëMé~éÍëïÝôzû˜= î!ö“w·T ñùtó½íé„çÛçêîô:û—• ;SäÊ‘Ãs>úOó;íùèêæÉæ–è°ìÅòÊù WLešóù¿ úûõYïƒë€éEéKë‘ï6õ|û: þ;˜,VÖ y‚þ?÷¶ðÑëšè ç¬çØêð]ö²ýºi ±H2æåžÚϪ]ø ñ"ë®æ<äuä"ç•ëšñ ùW £ÁûǺ| Î.ûIôUîÝé®çèç÷é«í<ó8úކë*P Ùô.ÝýAûÃôï÷ê.éXé@ë"ïÌôDûÄ62¸!•NÛ ¿ÿAù<ó]îlë^ê ëÍí¸òßøRÿÒ5 ¡I)Yh @0ýöÀï$ëSèçàç&ësðÙöõý„¢ D&zéèÂI Õƒÿ"øÕñí»é)èûè ì›ðMöýcâ ÕÔ4 ÿþý[÷Øñ”íÝêhêLìÄï\ô9ú Åž päΙØù`óÁíDéÓæûæ]éwíPó«úzÆ Wï­áÇÊÓÿ @¢ûpôàíÉèæ”å#çáêÜð9øÖÿGbV8ë°B[£ A·ü8õ“îÁéç æ#çÃê|ðJ÷ŸþN D QšÏ 6éþ‹÷OñÏìÞé«èÒéCí+òü÷´þÌ Ò¶(² Jëòú{ôXï˜ëYéRéÃë÷ïTõÖû9m zA”¹EÄÛ’ cúó­í écæPæxè9ì’ñxøýÿn å¹F½}‡ ™Ñü“öðð›ìjêYêïë3ïVôÂúU“j )ä}i± ¤jújô=ïâëªê*ë_íñW÷¨ýæ ›™’ÔY²# ²"þŽ÷gñ·ì ê%éöéüì.ò—øiÿza ´ŠžpÚ¾ ïšýöoïŽêjçøåÌæBê®ï=ö±ý¹A 9€+²¡fÄâæÿÜ÷õð˜ëÃçöå¿æÁé:îôDû> O+2¥¼7Qô½Ëù¤ó_îšê4é;êíKñ3÷/þ[ Ü ‹3K­ ŸüîõÅïžê†çñæuèÏë'ñ"ø£ÿܼ êbƒŠ“Tö ŽÿÐ÷öðëè¡æúæžé¬î;õIü†¡ Ÿ¶ÿ¬?rô ¬æÿÛø~òËíÃê@é¶é”ì[ñ)÷¯ýÆt «9Y«°Ä¶ Ëÿ>øŸò‰îÒëÈêúë#ïsóªøæþ‰e ç¡Øå® –‰öúøô,ðŒìwê®êFívñ´öý&Ö oðÔjdû‰ ù’òòì‚è)æiæÍèÝì©òïù—°‘A|‹Î– 7üqõ}ïëÜè¼èLêÌí]ó&úÆ û× Sw"b­ú"ô–îëté˜éœëÜïÞõ’ü|v ´v ¹y çäÿ‹øˆñ ìèÒæ ç·é¦îèôàû€0 ¸u©KeØH ÅÎù”òáìµè=æ-æÀè8íõòðùÌc Éâ|Ü•@|I Ý?ûqô£îê_çKçhéí^ò+ùŒo’ ÈLmiÑ§Ø 2»üÂögñdíë×ë®íñ@ölü“S¡ Ðõÿd.( ä…ý÷Þñ5íuêÙéûêÔí·ò1ùÑN üÞ˜„©œ§ Ô×þÍ÷3ñìé¦ç è»ê¬ïéõ¥ü·¨ Z*OÜNy) jÿyøeò îVë&êýêîÚòwøÚþÐN RÁ©†µk CLýyöÚð¦ìäééÁêuîZóAù,Fl @¼Q`;½* r@û¬ô)ïÂêèóçTêvîøóÖúq¡ ä;›vAQ— ¯ØúÃówífètå峿Fêöïa÷SÿòO£fW³ [ïþ¢÷Úð•ëzèNçêç½êßïaöMýfC ãŽk· } @þ¿÷ÔñÄí‡ëÍêïëBï1ôîù@a  Y°¯Þ &ÎÙúôœîÊê†è0èTê™îô_úÈæRñä>‰ ½iü©õð³ëÞènèrê.î$ó]ùi$ê ÃUÄÁã¡ê$gûzõ[ðEìê*ê+ì¡ï·ô/ûü9à ph ðFù ?û}õmðÞì|ëìîÊñ>÷–ýΞ Ù·|C‡ à ~ûü¼öäð9ì£é-ékê€í±òfùŠ¥“Š€?•: ‡þ×ö²ï7ê׿PåÀå®èÜíLômû%Ò FܼÃPs ¶‡ûù>óîeê]è£èdëèï…õ7üœ -g$­ºð÷ ϯÿ™øò™íêuèzé‹ìùð¹ö«ýßZ ÜFÓÔ’¹d ŸOþ†÷‘ñ€ìéõç/éì¾ð÷cþ† åc‚”Ù, ,ÿ.øÃñ[ìîèºçaèèê¤ïö(ýà á&YÒŠ Ž ^‹ù(ó?îNëøé/êqì¿ðCö[üèr ÜpbÑF¬Ï ^cÿ*ùÄóðÑí í+îañöõ,ûö&À ÑLTqV® F7™ùDóGîÖêèèéžë5ðÕõ:üXl nkÖ  Ô Ÿ#ûuô÷î˜êÑçyç’édí¥òPù´ªŸ £G©©Ö|w VGûõ„ï3ëôèéë±î-ôûV èÖ+—B -Aû·ôîîÞêéIéëÂî_ô ûá¢õÑkûÖ¼” "^~ùÄò.í©é9èèëê’ïÑõ³üðY þʇvAîT LúÃò¥ìUè¾åBåtçòëÁñrøúÿ£JyCD¼Ç@› Ú˜ýõöñ&í9ê‰éAë¦îPóIù˜ šâ! ?7 Ú{/û¹õñŒíÐëYìªîIò\÷§ý&í ãã$ @ÿ9 @þ÷÷[òŽí`êé¢êOí¡ñ£÷€þ-d 70 D¹K ¬ôþ~øeòeíkê„é;ê¸ìLñg÷þý›" Öªm‡Ý +Ÿþè÷«ñ íiêné*êíôñÕ÷,þìˆ ØO(X\Dø ”þâ÷$òî•ë°êûë†ï|ô(ú…J_ îûx¾© Ø/ïù!óµí¼éCçôæNé»ípóKú× ‚ãóø=V \9ýÇõUïìé<æåuæ°é³î|õ7ý¨Y DÔ'3tì_ oOÿ˜øiòXíQê€édêöì‹ñÅ÷‹þ4¡ <ù…U€§ ™þ”÷ñ"íËê2ê/ë0î#óùiÿðD HB~'؆ ›üüõNðyìmêêËëÃï&õû‚Ir {ͦµé{„ûàô‰ï¤ëéjè=ê'îEóZùRSD åXc„Dî ƒ¸ü°öÁñÈí6ëÝêÀì'ðÊô·úEF? Q0Ñ ž7úÐôyðSí'ì&í´ï|ó½ø2ÿ¾• ›|O½ZšK œŽüöðëÿçSç¸èºëŽð,÷“þÙÅ ­âê&aƒAùò;ìŸè*ç‹çÿé¿îõÖûá iô~L Tà _Œ\ùšò`íõéè6èÅêzïXõêû&R @‚NTä+2 úÐóïŽë éúé¯ìðð>ö¡ü¤ 4'²ÿ7A üý-÷zñãì™émèÁéí¯ñÁ÷ÿ[× aÏMG'w.²ÿ±ø[ò×ì÷ètçèQêZîAô-û|tœõ$c a,!ûOõvðƒíìòìúîöò_ø,þõ¯ ©ä8wï Ú2lý†÷ òVî‚ìAìí×ðÏõû[vL ÅYI›Î F5Ìúmô1ï½ëáéœé‹ëÁïWõ‹ûLK ißÁ.ÓÈÚ#Ýúô´î½ê0è¾çêé"î”óúw§¦Z×|£š> ­ûõ·ïfë½èrèYêËí¼òEù”oZ SÊðÝ6U ~Ëû¿õiðWìoêÌêÐìSðŸõFü„ g,Ó‡db Ë®ÿºøòìèŽæçgéÐí ôMû–ð òs´ß$ÑF Pý©õOïÐê!è*çsè7ì¡ñÉ÷þºG @R«4× ÄýµöœñèíoëÀê|ì3ð õÀúF½ $„¥´~ 9ãFû“õ,ñÐíáëì\îîñ“ötüóÚ  cË3ç„ ×Tþ(øùò¶î°ë»êìï;óáø§ÿh` ‹˜›3õN \Lþ·÷®ñì%é8èOéóëWðkö1ýÄ á=_ƒÂƒ <ãÿ§ù¨óÏîÿëëÅëAîÇòŸø½þâù 'nÊ ¯ž Ôü…öÛðåìÙê]ê®ëLï¾ôøúˆcÒ²¦Œ­¦} ´QûôøíÀéçFæïçì¡ñ,ø©ÿ‚éâ8"tö@ Ftþ÷ÓðÖë8è׿èOëûï.öšý¥ 7¦à:÷ 2ôþHø[òCíÕéÉèÍéZìð¦öý=j ûãCî ·lÿ_ù¤ó ï‡ììí¾ï9ôúùõÿÓ” umQžN R6%ûõ”ïÑëêê©ëkïÿôPûך ýBÉ 1M Dýyö¼ð°ì"ê&éhêÿíûòžøæþzJ ¥¸Š\×µ ±×rüœö.òïíÌìËînò ÷žü% ž´¼N Ùgÿéøtó<ïì§êëPî_ò¡÷%þ@ A*nSoˆ . þG÷kñ}ìé+è¥éÆìMñk÷˜þ·@ 3õn[QŽå Ílÿfø¹ñäëýç‚æ çnéúíiô™ûÁÓ g_äâ«Uä+:ûbôºîëéàèÙê$ïØô û£a@jù)ÙØ ±ñùÓóSïkìßê/ëÕíNò¿÷øýáy ¡/\¹·µ qaþ7÷ñxìézçQèiëøï½õÃüO ¸,™ÐtÈ¡Ž¹ú¿ô˜ï°ëéétê©ì:ðaõ»û,T ±&YØö{ ¨…ÿÎù€ôâïìì ìígï_óàøìþ±) ¢¸ú–ˆ µüýuø<ó=ï6íöì$îñ°õgû6êk ÜYø|è õÿÛùÑó£îPëãé êìFð&ö¦üaH –:öQ'ð® ÕwûLô~îsêìç(çÊè²ìò6øRÿ­ ê^<ϼa ôéüzöRñaíËêNê)ì¶ïtô{ún ² !Ku@<í 9SLúôøîëûèhéÒëŸïãô‘ûµ\ GNVçÙ!ÀŽŠúÿóî˜éwç ç”é`íó ú!Ÿ…­ýi¶ Ëý4öð•ë,é‡èÊéRí´òàøOÿü[ ]™HAòŠ ù}ý÷ÊñîÔëÿê@ìžïOô¸ùÍÿŒ }"{ðPK zàÒû\öHòuïÕíùí6ðõóø)þ[) ¡½•¦—ê E ¦$ý©ö?ñ íJêKé¥êêí`òì÷–þ–Ý MÉݾ#5 íüÿpù©ó«îë¨éêûìêðhöãüB Lj€b—Sm a6þwøóŒîÄë ëEìï¥ó»ù2Z) E½¹²²è \Úü†öºðkì/ê»éáêîó`ùïÿŸ R‰àŠ(–— ü#õïÎêhè¥ç÷è²ì<ò»øêÿŠœºÀÀGÂü 6þäödðoëïçTæ7çVêîî¾ôÅûI# ÏR4¹í‚Ä ¨Â.ú€ôµï.ì¾êŒëîÌñ÷fý¯G +ÿï°Ä‡Í Þ»ýøóÍîOììíeðßô»úìb '^l‘.eú·ûÁõEð ìêÚéFëî”óÀù\q ~¬ú¬Œ^Ê Å™ýe÷ìñî ìwë£ìæïÇôUú0Eå œÃPÊv <‰iûõÜðÑí ìêëÂíŠñtö üEˆ¼ W’Z%ó€ D9Òù+ôûï(íÉënì5ïió€ø|þ+ ü}”@7 ÛÈüÞõðkë,èûæRèµëð§öþ©— ŠW:†…Ó‹ÁEúpó€íéßæç1é$íòòÙùÂOv ‹§ ÈW( Dû%õÞïUìÆêçê¾ì¦ð;öxüÌ Ø>Ò¸…q j‘ùZóvîgëòéêVì³ðXöšüR Ln ±;Q “"ùæò<î+ë éê»ìñ<öeüJô gvÌ—ì :™æùôtïñë$êšêíÄð°õÉûSFP jnÙçÅ `Vžú“õ7ñ îàìÁíð»ó²øsþýá4 ¶É€ ÅVüG÷ÔòRï†í´ínïò÷ðü ¯Õ ¶.Þ y b»ÿKù;óÝíêbèè€êQîô½ú pØì÷‹ v‚ ÿ-ýSöbð@ìöéQéžêî3óù„ÿJ‰ HOÆX¦#¢tºû;õþïWì#ê¶éŠë^ïmô`ú& ý ~ŸDMåj áßûrõ9ð<ìÉé’é¦ë]ïQô|úe¢ 7r—eaø 'GYú#ôÃî†ê:èSèqê.î“ó]ú”g øŸö6³\P ošý ÷õð.ìoé­è¨é‰ìZñ]÷¤ýåö 2†áØ PŸþìøàóRðdîÖíáîÛñ_ö•û¯Ä joG¡i böÿAú×ô²ð2îííÂï½ó¶ø9þ7/ k<€Ì(V Ϥþ>øœòqî·ë€êJë+î{ò²÷Âýdž ¤Y›ÝÞ5} Ñcÿ ùó%ïæë|êbë:îeò¿÷þ‡H é(05¶Û Ã8þ-ø÷òœî©ëÅêçëšîÇòoøÞþ!à ·r4áßBý §Dýa÷òÒíiëëZìWï/ôwú.¤¡ ¨ÜòF ÍÃûÌôwîÆéEçºæè^ë·ð?÷Oþ´ÿ S¡MC°D:äù@ó%î¬êÐèüèlë”ïÐôòúÂSµ ¯>ïl'Ç uGýù‰ô:ð%íÈëªì€ï–ó¦øœþÊH ÇOed\ä> u+þ`øƒóïÚììSíðôhù’ÿÏ CøO o mhXüÚöòîãë¿ëUígðõ ûZG« FUgÁšÀP öü÷µñºí°ëlë§ì™ïAôäù½ÿ’* °mrûÖç ÒbÙü[÷©ò‘ïîîŠïðò´÷ý–@C ¿‰ä¡{Ô x¼þ¸øóéîmì|ë@ìïªó6ùGÿÐ5 o ED-É •¨þ„÷7ñTìæè'ç°ç•ê)ïèô¿û7@ )Ô“=~h VFûõµïŒëHé^éoë ï5ôªúyËn 1VF.p dû&õ÷ï ìMênê7ìÁïõzûë¦ ¬a„û• ݾ¥ûÃõÆð„íìGìîÇñ÷öÅüÉÖA‡F & fFÿçøéòEîkë&êƒêåìñyö|üÇ yŽøÈ—Ï´"üö;ñ±íœë‹ë™í"ñŽõÔú¶U °= Ò, kðÿ–úö’òðïõï„ò'öÈúCÌ iQº#Â! b¦°ûkö ò”î}ì\ì îRñßõ¹û$4 b6—¦ *«+û6õýï ìê5êìdïpôÁúfÑÐ × !cñ£É F¸üJö~ð;ìôéyé´êèíðòüøoÿl †Ä8ù¼“5 AÜý[÷±ñží2ësêÁë*ïô™ù¼ÿ' ‰—(Ë<ÿ ÄÇFüöñví=ëÓê¢ìOð6õûÖ‘]ÛT]PÏ! gRûÕô^ïë;è©çSé»ì¤ñ÷÷ÿö ehrXvöË qáÿ¸ù"ô‡ï¡ìµëyìÃî»òøâýî› ×:Lõ 3Ìný>øóðVî#îXï,ò™öáûWÁÑ ¾úžÚ} ~#ªûYöõñ(ïþíEî$ðºówø¬ý™f À}¿U b QþcøðòÑîIìJëìÊî2óŽø‚þä 9Úm¸A —;¶ùîódï"ìrêÙêVíHñCö,üƒgJ +žn †_ÿwùvôqðšíìwí!ð$ôkùÿÎ; µ»]7” O®üˆö-ñÝì3ê¤éëîÁòíø×ÿœÒ 3×”Å, neþ÷=ñ%ìéîç¡è'ë¢ï õQüB( ?¥ £[ 4Îû¢ôsïùë:êUêŽì ðÌõ˜ûà'‰ … ðɨ9 û ÞúNõïðÔí/ìtì¼îvò$÷¨ü§Lñ u¬ h4ú ä;ÿÄù(õ„ñíîííéî“ñyõwúF ýâFÁ„ó !5éû'öMñí9ëíê|ìzïÑówùÏÿúŒ SÒh"ºÒ öýþdùRô@ðÖí2íîhðUô}ù ÿ|“ Ò zW²ª! _×û¸ö2òïÍí)î ð“ózøýýŽ ÕéTU  œÿˆùÂóïìÓê,ëjíŽñúöýlÓ krÃ^øuj „Sùóî£êÄèâèJëœï,õ¤ûº¤ ‹8€‚iÅÝ ï¶û$õ¶ï‹ëé°èsêÜí¬òÉø˜ÿ-þ Ý]àJú*æ ª^ý–÷‚ò†îCìúëkíiðõÏúóÁú >î¸×vy "5û§õÜðˆíìfìBîÈñØöÂüÜÕO‰ï‡xŸ ^:òúÙô²ï-ìhêUêì¶ï¸ôqú“Ò~ Ñ¿,¯± Õh“ýõ÷Uó ð&îåíïÜò#÷ ürÐb Çñ™^g U ŽAÿåù:õ«ñ8ïîÉîHñõÒùCÿñ ö–. ¼]ýø÷ióùïÌíWíÈîÐñ ö_ûrn“ ¦s‰ ü÷ ­YÄú½ô¬ïÉë•épé3ë…îZó•ùŠc› ã“%£jŒ ¨ðþjøhò‘íê¶é¤êOíµñ]÷‚ý²­ âŒXb¢ ý 48þAøÚòÈîtì×ëûìð»ô^úd–y BiÖx¶2 »üjöôðæì\êéºêîóþøÿW| [ͺ¸ˆŽK $þy÷Øñ‰í¤ê“é¢êíßñc÷Üýˆ ”l£Êþªü ºÿ®ùiôðíþë»ìÿî³òÊ÷¿ý­ £ ¨~âó ¨ \Öþ˜ùÚôñîî—îÄïIò(öûLS ò }LmÐ ÷¤rû”öcò‹ïtîôîâðXô,ù¬þ:™ täùwE€ ÕìþùZó«î–ë9êŒêÆìíðgösü½ùtóØæòk ×û öuñSî¥ì«ì°îaò÷‡üwC žÍWÛŒ ¨§þ›øaócï¥ìrë<ìýî9ó“øÝþ€† [ëû šÊ Ì ÿxøÇò3îëÍéºêjíñ÷¸ýƒ¾ H•¬Úg] ûÿsøfòOíÝéè;é¤ëÒï¦õbüFó ·jPZ çIüÐõ<ðUìMêê§ë:ï2ô×ùÔÿùš í¨Î)‹g yƒü1÷çòöïYîXîEðßóxø¤ý2› ;}ø° A lþºøÔó1ðÎíÚìÇí‘ð²ôºù€ÿ‹ Ru@:BÁ l%þ)ø*óLï«ìÅëÇì_ï:óOø\þˆ “íZuVý ¿þGù{ôœð;îÊíï»ñ¥õ¼úX¿Ÿ Æ¡©ë¸ 4‡Üû™öõñƒîÛìíÒîò½ö[ü%¸ß ‘+Mè ]z¶ú4õwð+í¬ëçëèíÛñ\÷•ýê «ú”h4( ÷=Pù¸òQí¦é¿ç°ç¾éÜínóÜùä |†ÃiÓvè npþÈ÷4òëíë ê0ë.î’ò*ø›þ° )WÖZ’ ËúÉü÷9ò€î]ìBì îFñÍõzû¶­ò L>AIµ¨ >Ëûö)ñoí€ëë!íLðõÕú÷p ê´±>5 è2ü‡ö€ñØíüëâëyíØð·õ`û;e :6”) øj³ü.÷òYï¥íríöî/ò˜öšûûj= ÑÅÔ \>üú:ö—ò9ð'ï¦ïññ°õPú|ÿêõ ç †×Ÿ  0füÂöò»îÃìiìûíGñÖõTûçŒ ÷`¸ï™ =hüðõvð8ì‡éÒè0êAí½ñ‹÷@þ < „t€nˆ( ¡ÿfùÃó%ï/ìBëBìåîó•ø¬þ¸d Xè•[d¸ Žiýx÷ òÉí<ëê¨ë›îMó)ùpÿ»´ ¾9îàí » ®\þøˆòPî¹ëÏêÀë³îUóüø-ÿŽ„ S¤hje‚N ?ªý+÷–ñbí¥ê•éêgíÔñg÷ßý¥à õ°Ý)‚MÙ Oëú‚õ!ñ î®ì9íZïÆòX÷Éüf…Ô È¸5 .<ûýùçôªñÙïÈïOñôøçü5GÇ sÆMky räÿuúõ9ñî¨ì íï òš÷mýV߯ œÒA :Î >@ZúÖô5ðí±ëÿëüí°ñÆö”üiª ¥û¤”© š®±úõ£ðªí?ìpìvî<ò@÷úü ®µ» ·Çÿ¦ùô·ïÒìˆë!ì«îÅòê÷Ðý Ÿ½JÄó %±þLøÀòrî’ëvêbë*îgòÞ÷Tþ$~ Þî@lƒçÜ ›­ÿÓø—òTí„éºçènêtîô—únöÜ ¦¿Ý$¨zõ Ðý·÷“òÖîÜìžìî#ñ¦õøú† _pD 7àÿŒú‘õ…ñÜîµíî5ðýóëø_þü\ è ×¹š' ìDÿŽùvôšð.î;íñímðZô9ù°þhÅ  —†§3 §S„ýÒ÷þòfï)í}ì£ívðŠô™ùlÿvë Lgôª›1µ Kcþ¹øÚó ð¢í íQîñ÷ôÜùaÿÔ´ ¼ –Éáa Ælúû÷ÃòŒïÞíîñïCóâ÷výMà X¡œ™ c*ÿù’óÞîˆë êpêŸìðö†ü%~ 3·{`p”Öº1û²ô/ï;ëé¢èê‡í£òÄøiÿ,Z 6hîªp[ p þÅ÷pò…îìpëµìËï8ô•ù¡ÿÔ] ¶ª}: Sfü›öÏñ<î#ìáëƒí«ðüôPúPI’ ÚÍô—È ã3]ü÷hòàîêìçì°îóñ‚öü•} wǸ ¹½ÑúWõŸð%íjë}ë-ílðõ¿ú X¢ úÌãW#T `ù™ý~øôúðVïïeð=óo÷?üCe q XK¢ È2þ(ù°ô1ñJïÖî¾ïÉòaö˜7FO$Mò`Ÿã›åx5tJá@4e8ønú"æóÖ¼ÉÞÚƒÁŸ ò—éÿQ ®‹ @ ø ½Lk|&òéÙµÑWÏ£Øëíiù¿ÿ' oh"Ýwù µòö; ¬´ÿÏïò&öéøþýêñíàÃØDéFa&¹üþ‰§OþñI÷“ã½êÄø ÿYíä­è$üV]³4ûÈñMûôœ½F•÷¶ùþúeñÖÜfÕÂÞ@ïjÿÚþZôtî1ýF; 5"hd œ÷ ݘ  ú-äÈÔqÙéõÑñtçæàüëbJ¿(,Ià î°š øõŽàÜ+ç+ô_ùiñ¼ççRù›€$?  ¾8 (RÓú¡åÜßéìôYý…öŒëêäeó $×{çÇþ— „U«ø/æ|è?÷”c½öêÛé•ú. ¹›1¹÷?Ê|U% íú$øLX :¤ýÂé·àÌêîùx¢ïóÐéRò?•í$×A™/ è ±û7å0á4íÞùÿúuïsãJã^öÒ íO gýõ#í`ê߬æîó.ù¼íŸßûÛìûhÓ ™y Î i$d%äöä©åÛï²øwó'ä ×áÝ·óÝ i¢ Cš@&ío…óÍð ü«qÎï!ß²Ú‹éhþ± š°õƒìÉô½ >´ ¹ûöž¿öEÏó&åžé~ö'°ñ²ã³åº÷g On Õÿ¸ù €&!N±ï¤ëb÷'’¦ï¥ÞJ׿ÿý?<Áý=-'$'%þUðbóTüpÔô/âq׺Þäòh`e >ª0(ÿ9îœë öÁ#ù[éðã¼ðq•Z *DõÓúˆ ˜ [‰?÷àþn Ñ1òÂà'á ï‡þÎg÷ïíbíwý¶Ýª9^0ým–ûºçÃáÖé<öýjô$é æ,öÅ B"ß‚ b]ùî8Ý´àíé÷óõYìväQëϹ€ öx `·tÌóúÝè å°í‹øSø¿ìMãåõõI žÍL gç 9·"Õ¼ ‹öuíÎóÇý€<ûÃë±áèzùè™ 3°ùû* vÔ›ºþÉf^Ö 3ûSê8çnò·dø‚ìUè¾ô[ ½Bð i.“’ÄÒ <÷íêSë®òKùùòQæ0Þcçúœ ãú• Y äÓ"!% ïõì óÍ÷Nð<â¡ÕSÖDèÌþ¢ = kåYpO)"¡¹úñðcóüúðúÖízߟØá,óyâ/ìý•LuD¡Úÿ÷‚û_îrû[ëÙà7çÒö#l„üÔï²î}ýIlT<`öT÷utè 4ÿ›ñVëSò-ÿÓxýOòë_ðpýV I ÑþHt ‚„2üÏðcó|üµŽû ì„ÞÏßÿív ¥rCf Qó'$ g’ûFþg—ûãì_ÜVÖ2à¡ð³ýÿ ý“ü¥²ú)Â)Ðé 4 , {&øÒäÜØ#Þüì£ý°9ý†÷Žüi °·(y!u[çn© tòÿáSßéEö°ý»ú¡ô,ô+ýé¤—Ü eV©$õ5ìÒñÃýÍ{üwî­å…êÝù ^Ñ8ýý*ïý ýný Vó„âœÞ3èÜõ^ýzùœñ¯ð9ÿ­f!Ç!_G ·ù·¹ÿêÀÛ±ÞYì`÷÷õkï,êKñ}e ãKÅ S•/žòžâ"àáç<ó%öœïÁètìhýTé|ê‡cp‰Nü³ç5àšçzóù ô‘êèäåî` ý eº? aT \úÌïŸñû‡LüðlæwèzõúÛÞõ™óþŠ¿02Üù—ùÅó - Œý'ìàãÙéõõ#ÿšü–ò-ìPôÞlê§‚p0 `‘ßwô‹åeä<í2õŽò7é}âàç˜ù[‚·1è øèc P09í‹ähè¿ðò‹ékßßçìþÞ⌠ä’ã"ý¦cû_ðòÖ÷øqîÎá¡ÚãïôÜ `ìÿ ç æ€ ÉÄ´ûfúµtä–÷¼ë©éÌñ#þÃÿÌ÷îôAý^ vàRÿêÿå7Æërôïë)ñÔú-Îûÿïuçìgü> ¶vÖu QÊÐÒ÷‡ò÷VüHø5ì®áà)ëÈû2ån ì-%¹ ~uYùÒúTþÔüÙïëßõØá\ñ ’ÿr !÷$ü™ ùüëû0 €øÑêzßõß"ìQû:ˆ‹üéý+ Ù±J þ÷û”¥ó æãë¢ùuiLøãózû×cä-(ÿöt >DHööëBî(öØü;ú“ñ´èvê÷8‚ /´Ü sÁxá ·ýþùMþî%$òUãÞÛ„â^ðbü5ý×øŸ÷¹ÿ$ô”#_%]}ÚØEûUêîÝßCè»òµ÷tõÕòÏù^ de## ˆ äŠ@Øñ&á3Û´âî7õvó6ï*ðsü¨XAR ) ¶jéñ±ègêLòìøDö¯î3ëóñÀ³~ J[pôcôfüöešöêêwè½ñÓþ´f+ü÷Èýÿ ²I‹Œà ²ôì`înöþ¦úòîô‰˜Á/[ ™” iÌI Sù+épæºì‹ô’ö-ñië í|û ´7·³ÍŒ~!0ñ:ç!écîÿïÊéüãóãkïŠl×Z\ Q¼Ëà %ü³îîì]ñÑö›óºé/ãäçvõÕŸ ø [ÀB ù•Ypäù÷üRúýKô#êÿçñÿýÿÞšû¼öý éFX ƒÓþ/— j\Iö:ìÎëWòàúú¾òJìïEú¢c ¶ ‘ØÏ:÷zñ?ó0öIóžé¥ßgÝê÷ú) ~ – ‘ ‹rG& $M=ƒùöEøF÷¹ì¸áŽÚŠÞ/ìáûí­ú™Ð"Oò X¨þ.7úíOâ¯âEîuûA™lþßývqþ‚ ÿû`ÿìº÷©ìæ_ëšöÙþ‘þéùgöQûÇ\Œ@ ƒµW cÂú„ò&óÂùhÐþ¼ô¢ê„ê&ôÔí û/þýæ£÷7 A(úÂü?Ùýô³çNàå§ðGûËý¸ü/ü,+ÒÃ!‚Ç ¾¨†XùêEÞÊÝÌæ(ôÅûúøÊüµ p¬"– V  öÚþÃðSâ9Ýÿãîíö ø1ö°÷O@à› D²€ ¸ žà Jþ;ïøãæ›ïÒ÷ÁöøðœíbñIþŸ îc’ µ d†Øù÷ûÆÿÿ¢õìñéëð6û‚)†ûüø†;‡´aªi+c ä &ÞòÜçèð—øÖø^õFòEöî~èX¸Ø  89òò÷xê å‰è5ï—ñCíê¦í(ûü Pu‘$'1meñkçèí—ñúîÂé™çñsµ4®O {'( übñ?ï2ó5÷sóÿë·ç³êÔöWå |ílM,‹ ûPøÈüŒ.ûŒñêì§òÄü„ryþaú|þ­3åµ üÿ”Þ ú ¬öØìÊìônúÖø¹ò¢îþñŒþö ÛP¶ nFEˆöîŠî¬ñæñ¢ëuää%î¦üÅ tؼy?!´¾Uýõõó6õ|ó÷ëÂâJÝŸãæòçÄ  ôÔ ¥ ."-l ;ÿù5úìû²ö£ìätã²ëù÷ÝÂãЀ Gg ¯'´žVø íäçºíàöMþÛþÙøBô ø–J -ø¾àO÷w Zÿ¸ôDñtõfù#øcñæë@ëkòÕýO  .3"ʵþyÿÂ/þaóüæ áÙä{ïèúïÿþýòËÝÜ¡ùuÄùiîØääPì£ö»ü*þ5ÿÇ Ž2 \ @ž$rý±ðoådáÊæñµùÊú¨ùRû¢çǶY> ;ÃÔ ¤“þ$ò6êüë8ò!ø*ùðõnó®÷uZ Âæ •Ÿ õ:– Åì÷qôvø¡ý(ý(õŒí¢êgðªúÜèÊ‚ÿÄ] åéZý Ö8ÓvàýwñëèöèEïöUù\÷üõ¹û‚#Di÷D  ö Ê ~õ è"áùäÙì®ññ}ð¹ó+ÿ᧊ꃰVËò(èMæ0ê@î%í¥é<ê óeDZ+„9[*.zÿ„ó{ðKôÿ÷&÷jñ#ë‰ë˜õ i þM–¼wÄþñúåý5r)ú}òTîAòßúùFƒûyø~ûö'ß Á霄 8 ‹úËï2íMñ<öhø‰ôóïñ4ûÆv#Â@ ? ¶_óŸ“öîMîþð$ñVì…ççï}þD æû?3Ÿ° ¢ôœïMðñ îZæ™âëæòfÿx '  g 7m,œVŽü÷"øçøõõMî½çèñlýK ¢š ÇUø Ì·üáü¸ÿÇþO÷/î&éVëósû™ý©ú!ùtüQ¾/õÒ /é !ªµ z»õSòqõ‚øÌ÷ñëé¿ñþÉ Q /S D¤Yýü~úƒú4øðïæÚáÝätï0údÛ!ô Óê±!#nržþ[ÿÅ÷ëÛápáØékô¦üBÿäþÉ_ Ð2Ù&… F»© ý<ó‰é}ä`è•ñù¸û‹û ýÝ´¨.W ëà- xQÿôóí¢ìGòÄø úcõ¸ñlôbýœ! hâÉø ÑÃØÐüBùûþ1ý'÷³ïDìMñÅùõÿ»þýöü[m rïë‡ÓUQ«úðï&èhç*îôöÍû›ú­ú ÿÌEå@2 a“2©ýëðå¼à”äôê«ð?òmòøöøî_Q„ûªiûíääã±é­î¬ïßí¡îSõÜtÖ+*[zžöû-ò.îð òÃòîƒêíÎõ`ŒÌGþYµÀ yû þ¡ túwñ”ì}ï,÷¬ýÿü;úýüKÓG$ øR¨  xöƒíÉêÍí\ò¥óð!îÁñÆüé \ƒîœ÷CíúKöí ìëíêî¤ë8ç çïœüÓ¥‚>ílì Foõªñïòëò]îüç'ærêöñ Î  ê èd¿|­û=öªösøÌ÷-ñëÆêêñYü®×±}ËŽÔ 0fü-þ<.ÿ ùrðÄë¢îr÷þ.ÿüù×úEæ ¸Òg VA T âIþõhð‰ñõ´õñÉëÑë)óÝýª½ ” = *‡ò¨RPúš÷N÷¤ô•í‡ä•ßäÊïŒûdƒ‹% EDˆKª ›Jûú¶ø òNé·â!â·éêôþJÎåeýŽ°É˜ÿ½ýømîÃäÂàTåÍîˆ÷’û´ú©ûýÓ ¼ÎÝç (T ˆ¥÷ïAí›òu÷„ø¢õMóìô!ü¼"  Ê*úî 3ýàgþûùúúýü£õúìéŽì,õ‰ýæƒÿ²þêï öÆç ʇ@¨õûÄñéeè9îDõ7ùÈùsú~þÔ%l¢# LsÚRþúñßæâå½ìáóhö÷«ûšæÈgkÅß ÿ ¾BûðîçþæaëûïQòãñ`óúÎáÌwÁÔ P +E]˜ûpòDïøòb÷ô÷÷óBñ—ò›ùçî ¶ ósÉM C+¹ûDü2þùýÎø´ñÚîXñí÷µýÝÿêý¬üÜ– Ò¨»K vÂÚ psö†ìöçë1ð7ò¶ñÄñõÔþr ©¹°^~Â^  Ióüê•è¨êÕëÁé¦ç/ê,ó±Ó ²¿ƒ ,óð Žÿôïïfïtí-长Zêtõwé Ü ™ Ì a/›¦ZýLøVøÕù2ø³ò&î*î¬ô}þÆlÞ(ê9 ¦=g äþlþ】ülô-ïºïFõjúœü!új÷ÁùTå ÙþÛ c n Ú¹ W’ùôiõp÷öæðÄëÅëyòüýÝæ n ¼ # 3 7`"Núôõzõ%ôƒï›è¡åxéäò-þ} æð·„Ds õÿ{úVùâöJñéÎãáäýí$ú`Sxu 'èNî§ý-ûrúÀöpï9èÂåÜé¨òjûÛÿp!'±Ú·»ð "é_¿wþêô´í;íòÊö¤øèõ×ònôMü7@  Ý ˆ¢ Ÿ‹c çû§úñûBúSô©íÜêGíúô}ü h®ÈòÂf}0 /#§>ÿUøí æLå%ë¤óJú1ý\þ.ü ĸ<*ƒ‚oóû(ñ¸æœá²ãÓêDñ õ›÷üÙèiÜ«¤   îçûJðßèÐçôì.ó·õõéõWûý!r.–¾ ˜ W • ®gýäô$òÑôbø9ù‘öRónó•ù0xû«j„ |Û 9<Gý‘þ’ÂýŠö³ñõñÞ÷Þý þ½üRÿ!Ì«áô @s'Wÿÿô×ëè£êqïÚò…óGó§÷»z;ˆ»ºã®% ÿ¦ñè®åé¸ëìëTíbõƒ„ÙòJñšÃµˆú=ðë’ëzí=íÃêpê3ðUû¾ÅYÜ ÷d+#2ùlóýó}ö"ö—òäííæòÂüsIýq1 =7Ö ¨'Ûÿ&pÏû:ô*ï@ï_ôßùeûMø1öÍøPÕ –¢ M è Ít& ä¿÷'ñ€ðÞñ½ñuîêê¶ðvü˶ -£–ܦŠéi£úòõÁô#ò³ìæ„ãtç/ò®þ¹¢ v J ãþÚ°ú6þ¥÷ºõÏôòáëøæ‚èxð¶ûà T Š sµœnW öÙû÷ù‰ùgöðÿèÛæ‡ë õ_ý÷Ÿß ük' ¨_¤=røjò@ñäôúü°ùÄö{÷ýϤ d ÌãÜ ç'þÿøùˆúJùô&í„éäìöåþÏû‹1ðèTq âÿÀý„û)õ2ìÎåå(ë>ô´û¾ÿƒjÑ*él îÆýàöëë±áëÝFâœë/ôÌùOül ’Õ5 uz à ÍÛ¶ùîææÑåóê®ðôïôûõ û@ ðªD É Ì * ½Ký¸õêò;õ­ù"û÷÷ó¤ò¬÷{ÿÞXM…Áå Ð/ Áþ‰þ˜5Áûmô¯î®îÙóšù\ü üüqÿ‘À`Ê+ B¾iªö>ìgçÄèâíNòRó„ó÷P) ô¢¦â ß ýñ´èçÍéíƒînîbñŒùäF?™IR»ÿ‡dùQïÑêmìWï>ðéîÃîûòèûHó¾|C b ‹ 5³øôNô‰ö+÷øô¼ñ^ò³÷.,– 0ä© «}ë ¨ýûü!ÿÜþ²úzó·ííñ(÷ÛùŒùšø¬ú¯Ë v|“.æö§ ÇÀöÃðïððWí‚êì|óÿÚ CAî´:•°é m÷õšðîî¿í·êµæ‚åêôq© ‹3±ÛÍFËþÙö#ôÅòIïÝéæ`èêï û=ðû ¢ –ÒWí ܼûùÎø÷3óTíÓê­íõ—üö±o Úòð3 ç ¨²‚ú:ôNòMõkù"ú«÷<ôôåøïr* €QF € ù ©µüVúÈúÎùPõùîë îäôçü~l§n ü÷L¸» »5ý1ûŽøóªëÌåUæ¾íÉ÷ Ñ…M è&v Í´ çVýúEôÏë,ä0áÌäwíŽö›üÍÿ9g Hf¯–€  ëþ÷ííøç?è îõùVúºú ÿ$×cz*ïŒäøÒHýïõòyó ÷dø|öMó-óm÷ ÿbû@Ä™ƒ q5A Mÿzþrÿ°úàò%íí?òGù•ýJþHþÅi (ÄEK³ ñ Ë%üFòZèã/åäêðâòSõaúö+¦òHtæõ† ý,ð]çå+èÒì$ïjï‹ñrøÉt†_4ýáI ½«ùðPì¾íñðÁòGòäñdõÛý® ø + Þ â ¬ kˆøœó…ôUø*úé÷Øó_òÜõÐý*î0˜16\ ËÞ Laÿþ`:íýßöñ ðsó.ø‘úÏùê÷êù3  SŒS  6 Ò v õôXíÉë‰îTð‡ïÜíï½õì] ?%i$( ÈýQóÖíCíÃíÝëÛèlèÈíOø™Æ ºD-Rƒ­Îß÷ñyï(ð<ï)ì=éØêôòþ:i •Ýd ó‰ Lýúú÷Á÷Iöñ¡ëÊèÙë»ó¸ûÏÿÔÿlÿC·h5 Žê㎮üâô…ñ3óÈömø˜ö+ó*óUøºÝÿ ~ ™ h‘g T[ù±öìö¸õ.ñæêÂç ëõó;þ¾/ ,¨ÊË ¸¿ûKù=÷–òŒëýåuæõìøö²ÿ|±' ¯´Xì“Rðþ{ûìø­ó-ìåÆâOç³ðøù^ÿ¯/Ù &:3Ø ÍvÄ1ÿÄø³ðëÅêeïöú˜ú¹úÔýnè À˜ ‡ïµ«…·ýÅöbô©ö5úšûtù›õ1ôøÔÿ ›w鿇 : ý û—ûû÷Êð:ì|ì ò±ùéþèë¿Ð ôÆþSý e #Ãù·ïCæaâîä¤ëOò½ö7ùrýR¡××´K•Q G7Høùì/åãçÈìyðìòJö¬ý„9  ¦±æ*É Éå÷ÚîëŽìžðºòòjñ–ô$üjÞ .¥ … Q f = W Æüú‰ööùúÜ÷côÍòðõ”üÁh„ƒN µ/ò ÿ#±ˆP¼üõ5îµë|î‹óæöI÷ùö ùK» „$>>jƉ *öòîíGîuïïøíÝïëö”ð ØE¥1ö†­û ñIìªìeîtîùì¾ìjñ û´1ŠIHªK Ë»÷\ñpï.ððîì—îEö` 8 T ˆ )¦Žç5 ¥ÿÔøöC÷ûöôrï·ì+ïÜõoýÙš;éëȬ _’[V2Qú¸óœðŒñ¹ô‡ößôŽò ó‡ùn\ .² ( ý}•p ©ÿÃ÷côÆóó ðÕëê‡íJötÚ~ » UGi²ãýX÷‚ôJò1îÅèLåÕæ<îyù+Ç› Ý-å?|ÝJûþ\úd÷BóÌì8æòã¦çÅïzøƒþ¶1R jHx0) -5ßÿ’úXó îæígò7øcûÅû-ûìüÒ\ {u ³¢p òäîù.öWöÉøúå÷|ô*ó6öbü~zõ @ Na йÿkýVý{üEøò?í‚íóiú8ôÖì Zj¦L99èþ0ü±ölî çýãÐæÆíõRúËýÀ² £^?@‚  öÿÚöÎì<ææ ë>ñ”õÛ÷‚ú˜ž §…K À Ьÿ*÷Šï&ì%îªò«õŒöùöÜùR¨ú¦ § ÷ s K U >ú¡õAõ÷Ûø÷Ió^ñaôöúÙsqƒÛ ³E= ÖdÔsßû©ôŽíÏêTí2òëõc÷‚øíûjU #HD°æ – þý4òbê,èfê×í3ïFïÌñù1Š]5ÆqIûšñÅìmìÇí;îuí-î[óëü¤"ŵš 2K ­ööñ>ð!òóÑñOðÔñÚ÷*› ˜ š ƒ Q °ƒÆv Pûôøsù(ùöˆñóî¸ð#ösüäÿÈÿ¨þcÓ ¯²j eŒ=óéNþ×ö òóöñ÷0÷…õÁõ}ú£M ù Ð › nñ« €âüNõ òÿñòÔïËìýë^ð«ù5ë ”)&ŽYã3û”ôûñáðxîŠêäçðéìñàü…w ôe§Voß ~û‰ö1ôñë¨æ®åyêqó™ü¸z‚Ï E <l ‹Ó/ÿcúEóÒííñ‰öTú'û£ú‚ü÷Íœ Z V @ »Ñ,ûìö¸öãøù/÷¡óMò|õ5ü`K ›ÿ M‰ ä³þŒúQù7øsô½îoêÿêtðcøEÿ5Ï¥ ò­xÏä Ñôÿ1üGölîçÓã çPîÌõçú|þ¦, ¾æÚòÚm CFÓý„öUî—èCèÃìó´÷9úýU0 î莛à D;4”ÿs÷YðÖí&ðqôÌ÷tøô÷§ù#ÿ q : ÐÁ )¹fû÷•öyøâùÄøáõQôŽöWü¦~çA[   Ïÿãþnýßø—ñ&ëýè¶ë{ñÙö½ùWûÞþ5$Æ£ú÷ Î # vªú ñ0êLè¤êeîçðàò[ö‹ýÁni¡›ðx' {xö2íéçéí5ïÀï$ñö<ÿý YcÓÔ î‡ ™÷ ñ¤ï®ðiñƒð¦ï>ñC÷)ÿü   à iÉjÒ H*üûùqú¡úÍ÷ó‰ïðÊôÒúÃþƒÿõþi/½ L'¯ æwâÜœpý õëð»ðãòlô ôºò™óù¨ú uñ é Çù·¨þ×õ­ñjñãñ¬ðbî¸í¡ññùâ OºÃzUDQ ”Óø:ò´ïkï3îˆëäé¢ìŽô ÿ³K)™ .†ì i'ùæôWóŒñî"êÔèÎìØô”ý™/zÏ I«¡ÍÓ‡Oÿyþ…ý÷ù³ôPðÊïÅóoùWý¹ýúüHþãu gî~ w:t½æ«ù`ôuó.õªö¸õûòâñõüºu V L }õW{ ŠÅýù1÷µõvòeí§é«ê9ñÑúëû µ ÿ\û ]kÿú/÷—òÉëüäVâ®å¢í¬öqýÛ„ }чtï X,‹ýKö îdè.èñìÂóØøJûúüÉú¸E`{þ¤ø,EŽùøò ð€ñ©õGùñùRùFúËþŒ0 ú ½ Áù…I / Hxýuøš÷%ù3úgø±ô ò1ó¬øZÿáý”Þ÷ `”ã €bÏÿrþ¤úôÇí êoìØña÷Ëú´üp¼ÁßðŠù nþGÙø2ïŽèpç'ëXð^ôÓö¹ùðÿ? ·e¾ Ü ÿ¿ÿöõ[í=édê[îÍñÈóõ÷ùðm Ëâ¢ò­ ) ¶ Ñ<ý5ôƒî¨íqðNóÓóó?ô»ù g )DL z 5/O\ ÅüÏø‡øËø­ökò£îŽî¿ò™øLýéþãþI X>™ þÉäßßýõ‡ïtî+ñƒôõÂô«õsúó #ùFPU· ŸÊû“òƒíãìèí+î3í¡í,ò%û©ÉtgÆÖNùˆñ¶îÉî´îíëSíôŸþÂÉ»¸Ž»&§å ò¸ønô2ókò(ð¿ìiëìî‚öÿÚûNÎë SÜ ’/ÿÿÿÁüø÷ùòSñôùýµý¥ü…üÙÿÍû › e ù7?1o»üîö€õèö»øøRõÃóUöýÕ2 ¨ Å ¸ ù )¸B ÷ûnõEóªòñíãêæë/òû€k O ´£4Í/)sýXøKõ—ñÝë`æSä»ç8ðúx…ŒB †%£/Ó PÐÿ¯üùfô¡í—èIèUíýôŒûmÿ¨ÿÊ R¨ÄÏ ìyþKÿ×ø)ò¼îðôIøvùìø(ùëü±R ) § Ÿâú) 5 6ÿ8ùÃö’÷ÿøøÄôèñò÷bþ|øTE }‹ < æ/þ/üøGñ>ê¬æÛèëî õ]ú%ýeQôËÙ%P U„T¼ù±ð¤é¥çÓê\ð/õú÷ÚúA†aàã4 ª c3Êýàôçì0éëê®ïAô­ö$ø«û—e ý¦ý ± — ‡ÝÕýÛõþï¹î]ñ’ôÔõeõÿõÝùÔ[¯ ± u  ` à  #ÌûÃø,ù)úæøúôÝððÒó ú8ÿ㜃® _ñ ;úQpVû—óÂíŸìaï2ó^õ=öý÷àüUH¨#à . y Œ«ù`ðXëë”íÎï_ðhñõ@þç“›+·/b… Éÿ7õ«íÔê#ëOìhì}ì<ïvöùø h€+P¿¢Üd s„ø§óò}òòðÓíñëÞíMô¼üV&N9 ~n õ-}ÿ”ÿÏý5ù+ôÔñ…óî÷Ùûýüüžÿ¿¢ >Ë l 3×K v¹Pü‘õaòóäôõqó+ò,ônúÖÏ Õ ô g¶@ @EüæõDó½òxñ®îTì=í.ónüŠR ­ 5ñÀê‘ý ž£ú1õ}ò9ð†ìcèˆæØéùñ¡û…Ú ô ŽúéÑ é6þ@û9ùõ.ð÷ëÁësð¡÷þm–U{72‡† !ÅCîÿþ#ùaóð"ñ€õúwü`üjü8ÿÛÌ Ù  * â(‚ A P²þMøÇô½ôÏõMõ²òQð(ñ6öàýÇln P ’ p˨­£®ÿ™ûIùöoð=ê çéNï&÷RýIâ[ ³ ‚ÜØ Á"ü¤õ…í"çµå£éoð«öËúIþ9 á\×–™ iþbö”î êÙê7ï4ôO÷KùUüÖ } ì Á o‹„Uþ×öTñPðÃòóõS÷¸öö[ùÇÿ Æ ¨ ú « õ f ‡/ÿ8û=ú[ú,ùwõ,ñEïñ¥öšûQþÿP#@ ìæ‰ y hýýcõ‡ïüí’ð²ô÷ÅøúQþ͘w¤  ñ b xb¦÷QïzêEê@í…ð¡ò¬ôñøÀK \„Õ…R, ®šþ’ôEí¯êì{î¯ïLðºò ùy÷ 8¯UþýTßÇþ|öáñèðañåðdï£îèð÷åþDŠ' “ 4Gš[ ô ÿSþSþÕüœø†ó^ðUñõúVüLü‹üdÿb àWb õ‹ê»ö™ûÂôSñ‘ñóéóRó/óöåü¢¶ 1xô¡ Žáùeòçî0îÃíTìëêKì?òÏûÙ Ôrtÿ¼Õ¬û£õ®ò‚ð>íé èHëºòÓûU”Å K oW4m &°üQúþøLöòEîáíÕñpøÁþ[¿óû çð ´Ÿ ·ÿûö†òÐò1öú“ûÜúqúˆü©Š# ë LhØ™ üµùöÅõ½ö¨ö¤ôŒòãò;÷[þF Ò ä H®óh¢ ¶ý&ù@ö óIî>é׿>é3ð•øNÿ¬$Ñ ö*ºn‘¶Êýú¥ô×íƒè¡çßëó×ù­þA´ ?lÐÐ c­Gþ^ù˜òìïèê²ïŽõÁùcüIÿ³ ÷–, ÛÊ:¹þr÷œñïñôîõØõ¯õø ý\ 7 u Ç ç Q _ý eéûoúúrø’ô3ð îðUõ ûÓþs)ì× ‹O{ Žnb;Vúìò¸ì_êˆìñ!õ¬÷Jú+ÿªï´ã!þ Î ¢ŠÐ÷nï…ê’êåí­ñDô[öEú: É\†*ê º > ‡Äüìó í­êìèî'ñ»ò_õîú=Ï N™8‚ôø \+ÿ´÷ƒóóôôóBò¯ðò ÷þíx[ë[‰ ï O C%ÿÉýéý ýçù˜õÈòqóáöôúsýþ¹þW rM 8Á„4ãø×ñ"îjîñð ó ó.ô%÷Èý’6:ZåÅb DØ÷jð÷ì‰ìíÇì¸ì;ïõÿÏÛ ò¶üÊ à/÷ïðKî&ídëéiè¶ë[óý}v œ V2X` í âÌü­ùö÷ºõò§îî£ñã÷»ýSm]È ~ü‰ rrùÊ—ÿüýöüòYòóô’ø¤ú¸úlú'üîúƒ —  c G  ™ ‚AKú}õÈóõó“óŽñnïäï¥ô:ü»¯Ì " NûÐÊ.þ4ùböÝóïï|ëéîê<ñLùpOý ÖgÚ¸Ý þéþûå÷móÛíªé?é¢íõ\üOD ¨ s<—{A <¹ÿRýÛùWô³î ëöìòøˆüÕþé¹2 Zxž< ï—_Vóüïöíñ0ðògõ•÷ð÷Ó÷ÁùãþÑh [ p ý & ó 9‚ ú øv÷Gö8ó6ïòìœîàó]ú6ÿé$» 6•žq ëå2ÔýYøñÆëêöìjòÉ÷tûþȉ Rͼ$‹z Ä6šü¡ôì~çoç.ëNðôû÷Wü!ç §Æ>P Œ ×=ýô¢íëwì¡ï-òƒóžõZúï( þÍ,ñ  õ • !2ùVôió‡ô6õ ô§ò2óèöýÇð_&šÁ š ® D 7™ÿ¯ÿáþ”û™öÁò-ò÷ôù¹ûuüÌüÿ cÿ t ¥ùgjýúDô ðÂïò_ô¤õÞöÙùæÿáÕœ–Ïç + |tÿùõƒî5ë”ëZí^îïoñh÷è ÿB™[Ê¡¶ 9C÷oñôîmîÓí·ìÅìð\÷0¨î ^ gd¨(Hÿ„ùêöOö‹õ0óðð}óüùˆ´z=³ .ñ _X#ÿ§ûœöòtñ’óóöLùÅùÝù!ü;F Ù º Ý j H 1 þ}ú€ô9ò`ò“ò–ñ2ðéð„õRýËö ZÛFÒAc’éü¤öýòð€ìåèCçÏéšð‚ùg‰ ä §ýjS!ÒHÿ5û,øFô{ïwëÁê¡î¢õýK~E ÀêpÜ#$;þäûùÆôðkíÃîróùgý§ÿrŠ” £ßE â"…ÿþùØôœòÃódöcø‘ø øùêü¦”ã Ä  œ u è ¶ Nipüÿù0ùÿ÷õFñ.ï«ð¡õÜûÓ±ˆE $Ûf )L7þ/ûötðnë!ê íÏòÐøvý*ŽË mñM‡Ç G àÿ8úó ì1èóè„íZó1øüm F?¬Ù{ QÝ8™ùìñ¶ëaé'ë3ïäò™õ¥ø€ý— ¤Yܧ@„ š >bùõþó­ôõÌóOòžò'öÿû‰ÍŠžü + â 6 u5 AÿþûdöqòañÕóÑ÷ûúü…þ–²² ô³ A ’µøvñõìnì¾îŠñ‹óHõÑødÿá­§¼_ªb ½0÷éïìÚë|í1ï½ðŠó\ùÕ­ -üòÅýÙ \…þ4öÃðÝîï0ï°îõîòŽøÈ  ÿ ÿ ³ ({ Èðÿ¹ú[øø÷ÏõÞóyóöûnͧÉýÈ“ ? ÷ Ž}…ÿPÿÕþBü ø0ôßòÅô=ø ûøûPü"þsX1 ÷ ¸ @ < Õ«ÿ|øÏòBðñï ðÛï·ï›ñ­ö™þö O¤ådæ¦u œÑú„ôñéî¸ìxêÔé´ìyó|üÀq Ú tfëP ®ûÙö¨óðíìHêèêïÅö9þß™˜ W/IƒØ¯{þîû0ù@õÁðÿíÉîÃò#ø•üEÿ¨è[ ê[K Ïyr®ÿÈúönó¬óœõ+÷9÷ÿö]ø_ü o‡ #  1Ÿ <cý¾ùÝ÷.ö&ósïJícîñòùÉþ½’òP ¥³` vyÂþAûÒö|ñ;íìïÎô´úSÿèé µ³¼¦g ~ùëü"ø&ò_ì2é êÀî¹ôú=þ€ýYâX¹I+ €Tÿ¬ù6ó4î|ìUî0òàõœøûñþ×G è Cq V q ( ÿûøøôÍóºôÁõœõÚôAõ\ø}ý¤òŒÈN µ ç ;Ê ÿ®ýüÔøxôåð'ð°òýöû¯ý¿ÿö ß õ¼*ø <u}£ýøö_ðìëîåñOõsøìüŽ• ›kz寱 # …TüNóì³èéCëÍí8ðÚóú«Ò ·ÞÈNܾ Æ«ÿ˜÷ßñŽïbï´ïÙï•ðeóÖøûÿo2 h ƒ  & : Þ ´¢ÿõúáø¨øZøèöÖôô)ö‡úpÿºä3d4R Ñ { ‘MV<¡ýyùOõGóÛó÷õõ÷ùáùëû:þ q B % È Ô Šœ}ùÈó ñ¶ðLñuñ¦ñ|óEøÐÿÙRK«£ÆŸ Lùãòdïí>ì ëŠë(ïýõZþÿk xŒ³\Ç ‹æùÇõwó‚ñ#ï‹í‘îó*úz8 / R§ëf¦ )"ÿû˜øJöYó@ðÅî-ðiôÃùþÒåÖê ë $I Yè§ýÁÿãúçõÅòYò×óSõÐõöõ_÷.ûÐ{R ë € [ ÚŸÿ m )ýøøWöþóôðîí˜ì¨îôáúüG¥? uE 8 IKûˆ÷ÿò$îcêŸéáìíò§ùnÿ'Õý %uErf N5ÁüÑ÷òúìdê–ëÿï»õèúãþÌÆœ m™ ðÁ>þGù™ó2ï¹íïó²ö\ù§ûÿýe \ ¥§ ¿ r É š­ðóûrø@÷Œ÷—÷˜ö-õõA÷oûçÿÃÉHÍ¥` > G J5sÿþ‡ü«ùÖõ±òòôøüÿ³!Ø ®Ðù4  Êÿúô î–ê¿êÀíüñöúÿ„ ‹ÐN/4. îWú&òêë9éýéØìBðÒóXøŽþ[’¤ÕÌ{¶ ƒ Sû ôWïÃí8îTïCðÎñ9õóúî¿ ï Î Ü J « šøû_ùgøÅ÷föœôþóŸõJùzýœTjDE[ É • ™a)Î Åü#øÓó™ñò<ô˜öMøïùãüàîQ Zµ{ú ¤ d !Âÿtø?òyîAídíÔí÷îãñ‚÷8ÿ9œ EÞ t6ö ·­ùÆónðÒî™íºìbíÔðI÷6ÿ}~ ;ÑüŸzŒ Ûþêø õÍò9ñ×ï_ïêðHõœûî¥o Z F 7„. _7ÿ÷û&ú‰ø#övóüñüò•ö!ûÕþì. _ [ ä o qN ïþÙúÔöZôôõFöëö`÷ùýq·= ì • NE\5 =¨lûáöôêñï\í¸ì#ïŒô“û ¿ _é!' Iþ4ù1õ%ñSíÿê¿ëêïeökýT e ô ñ€¦Í ÷BýŽøÇó¼î‡êÈèêuïÃõ¬ûî +_øN+d t}þŠùKô8ðÖîFð;ó6ö{øÇúþ³àÅ 1 ` è ¤ ½,àý:ùy÷÷¾ö»õ€ôaôTö7úŸþ>Þ “ E[ Ÿ„IÍþü?øÎójð£ïÉñÄõÓù@ý])$ OáSÏÍ  ÞäÿéúëôHïìDì9ï{óÖ÷3ü2 ¥Ëšx I ¾ùþø÷Ýð®ëÐé$ëfîÿñ•õÜù¶ÿþéz7«q ½@›ûwõ–ñnð[ñÛòô¹õµø‚ýÎz ó u   e á­îýXú«øJøøñö§õvõc÷GûŠÿ¶OSÅ ” Û ª z Î  Àþ7û¤öpòð~ðÄòqõÂ÷8úüýWy µuœ-jv f `\ýÜõóïÞìwìiíÐîÑðwô¨ú H§­g‡Nr×þ¯ö³ð^íßë<ëcë í\ñTøv«’ d!ß F4ÿ‘ùö4ôÈòañ´ðò8öü\ÓK  u =é H QÉÿ¦üÌúù¿öFôáòºóœöHúbý@ÿ¼; ƒ › Ø ›7ôÿzýÇø|õXô«ô>õ?õHõÂöoúÖÿYn ¨ Á Ø èö icü(ø\õ(óìðïïæñP÷ÿýq‹ X*ÿ~Å}ofû÷Ïó™ð’íîë*í¥ñsøŽÿfÐ ‚  lÝû¯÷µóÇï±ìì™î¹ó¾ù ÿV+H •ºG›Ø СUÿçû±÷ó”ïÂî¨ð!ô÷=ú²üÖÿG, ä ^Ä o ] ¹ “ ¼J\ýùy÷–öÓõpôó-ó”õéù þgÒ¼/ 4 »¿ o¹áÿÛüîù?ö+òEïïÎñ{ö„ûøÿðOW ý¯{• }¾Ëýøñ1ìeéêíQò÷Êû8Õ¼GÊÓa Ò WÕÿ.ùzò‹í¥ëÛìëïhóåööújí) lªm‘ †‡û)öõòJòAócô<õböâø6ýkÝ& n  ðw Ž ºŒFýûûúEù¦÷Ðöé÷Äúþžþ.Þ¦ ì ó 7>Q2ÿÀûY÷Xójñ)ò™ôm÷ÔùLüãÿ3 1›<j ¡ 7$Tû7ô§îéëÉëBípï@òšöýäs Ø|á»8ª §rüõ!ðçí~íâíÂîúðœõ…üNë Ãâ/å : ¤ÉûFöó´ñýðyð¸ðêòl÷pý]­1  \ ˆü  —ýµûÃù÷/ônòúò¤õ?ù=üþ¨ÿ ¹½ ‘ ( ¼ ­ ÔÇýøjôáòäòOóó>ôöûIfí e¾âÂm / /„û˜öOóßðîÑìøìüïÓõëüjD¬ –:ídÍÏ,üÒ÷ôŽñóîÖíkïô‚úI > IÊoÁ 3ÿ…ú÷äóðìííð÷ô©ú¡ÿo¢ È ‚õ ‘ <À :ý²ùØõ óšòBô÷¦ùdûéüTÿ * 1 n  ZD¢ar÷üyù¼÷Y÷÷öìôõU÷xû1›‚  ׈±  ðý¸ú£÷ôoðHîÞîZò‚÷ÞüemÅ ‰Û  ø@ š˜ÿÍúõðzëtéöêaïõÃú‚‚ |ùpG- àþûUõ ïÅê´é§ë4ï(ó÷û8ã.97¾3º C a‘ü>÷ßóòò¥óÁô¡õŽö™øCüßôP Aú: íÇß ýÈûóúúMø;ö)õ0öù©ü…ÿbmïk aÛ E ½òÿåûäöCò¨ï›ïñZô÷ú)þ¹ã ô«¬àp Æ T2ûµôxïíOíïdñ#ô<ø;þ¤À ËÞþÿ< ÌSÉúïó~ïËíîïxðó÷÷ýè¡ ô óËRU  ªº±úEöBôÝóûóÿóqôjökúäÿŒ m ë ® ç f ÇÚý û¥ù^ø‰öYôóÚó•ö$ú(ýBÿ •2 ’ Ü U 4 oùÐËûYö{òéðñçñ£òÀóHöû˜!þ ±Æ àÿùþóÚðòî†íëì,î5òËøMÔ fOUz Q­þSøâóæðiîOì¸ëØí óúA Ü6+ ¬“ÿåút÷uôiñï­î÷ð‰õÔúeÿ²›ø •á  *%õýËú÷øóçò&ô˜öÇøú0û;ý¤×n9 K ¾ ©  Ù oíÿü’ù?ø÷Rõžó.óõêø’ým3˜m ¥ æ \ ¿Èµý¹úøåô¬ñ—ï.ðÁó/ùÆþoY ”4ý^øó îßêÂéìÜðÎövü~qÉ Õ£%^ñçYÿ}úõÇïZìúëîÇòP÷PûOÿýk ]KxE T(Êþµù9õ«òsòºóJõ^öx÷­ùpý ;˜ Ý © ö ¼–c“ý5ûúúøC÷,õøóªôo÷IûÒþp¦pý [ -¯ ïuoøýtù-ô—ïCíÔí´ðeôøËû‹¨;  ?°w´ Nš‘ùEò©ìêSê~ìuïó¡÷ÖýJ‚ ¾ÜR! ¨q<ûÔô×ðïÿïñnò£ôŒøcþÛ$ î Y ™ ­ Å óU$¬ú£öÀô‘ôþô+õ…õ÷SúêþbŒ…" & Ï ë .iøÿÊý£ü•û¨ù÷0õõþöÍù?ü¶ýÉþ³ýõü ð å æ#ËÏü ÷=ó›ñáñõò ôšõyøMý¯ 4të¤ a¶ ÊýÍö÷ñtïlîøíîÏïô€ú¯1 šÊz= E c üýõòûï´îî³î¡ñ(÷Hþ@ Ý ™—è= Zü{÷`ôïñ­ïîýíðƒõDûKë±d \ Þ©Œ •Wïþûá÷Ÿôó›ótõf÷ºøãùñûyÿýò: Ä ‚ t ¼ ˆ ŒuQÿµú¯÷öãô‰ó(òò,ôªø*þ'Ý ã S8 BƒWýAùÆõ]ò%ïNíîÄñv÷‚ý·ñÙ çiù~  ýÒøô/ðµì¢ë¶íˆò•øCþú5Ÿ ðûu àý ùõ¿ðùíÔíHðOômøýû_ÿ=Ï Ìâ¾ Ø Pj\SQüYøùõÊõ÷ øxùÿùûŒý!“àqO¹:µÄü¹ú¾ùùø¡÷÷õõö ùýÕŸÖ[ƒ  9?ã _ Hÿ¨ûv÷ò[î?ì)íŒðõ˜ùþØ€w;3¹o ü9™ýòöZð¡ëõéKë†îxò³ö¥ûë" æuä”®S’ Ò¢ÿœøZòNîí+î5ðŠò_õ†ù#ÿD| „ <‡ | œ ,>üøö¿õöîõÝõÝö·ùþx¨“6s • p aÜC¨þý­û‘ùÛöxôžóÒô_÷ú/ü%þÕ£ µ y \ ‘ Û…±^ý–÷îòžðuð`ñuòâó¢öWû½MF Ó]JÆ (WþÎ÷ó¶ðùïðÙðØòâöðü×Ì µ •(#¤ Ý9[úòôËñjðÿïðéð·óáø¢ÿ'ò ¢ ÕÛ*l c?žû­÷yõ ôêòöñOòÄôù/þiJ 7 ì  4 ±áÞðþ5ý·ú|÷ôCóöó!öŒøRú­û¡ýq ) Ö [ µ U ” O(ÖþÙùdöŒôó—òÔñNòïôÅùÿòº5 B )Imó IÓÿEúAöTó¶ðoî‡í ï{ó úš =tã‹]SyŒ²úéõ³ñÃíÑêê‚ì¬ñø'þ>§ Jw%½ ¬çëþ/û÷ûòð‚ï®ñvõ`ù©üuÿ‰J. î r è l Wš'²ýú“÷Ýö‰÷|øöøù¾ùèûVÿêe]…ß0  Œàÿ$ýœû†úåøªöâôñô9÷öúíþ"§!" 6 þqˆ L÷ ÿžûÃ÷€óÑïîAïÆòƒ÷Cü, j}qmu ŸøßûöEðÿë•êXìQðõŒùDþ¯¸ e=9lE mÂýù÷íòöï¾ïŸñ`ô ÷úÄý™éG n(W : R7±þÒùïõô1ô%õöÈöú÷ú¦þ>ÔÉŒ  ó Ü Ö ù y—nÿIýdûùö]ó=òPóöVùü—þ€v  ˜w ´ óòã‰û¤õÑðFî+îÒï9ò õ½ø÷ý£c ©nÔ¸ÙNM _ýöüð[îÐíuî¶ïûñö6ü^Ê ÿ=©†5 ù‚ûöÕò¢ñ­ñ8òuóö{ú;‚ õ Ô  5  {ëûQøuö†õ¢ô·óªóQõ×øVýXøa§lf ‡ Þ „pÝ>ñÿþXûcøfö öN÷çø$úû•üAÿá– š v  È ! >¢¸þòù›öõ‘ôAôôËôM÷èûÃK# > OûÄ : ÿý+øôoñÀï³îËîûð¼õKü/ý1 "N¿‹ÄW cŒýï÷×óÆð<î‘ìÇìËïQõüivE iD?'_N _õÿ¥û$øÆô‹ñEïï9ñ"õzù3ýGaó¨ _ !à } 6†îŒÿ?û5øÑöþöÌ÷Købø÷øãú*þú"ö§ ûÊ š –÷Éÿ4üÂùú÷-ö0ôÇò$óÈõ8úÿ[Ðõ J j<žE9 Ý&ÿòú©ö3òBî/ìðìsð’õÜúÂÿ|k T=ýÓ5j „Îêûµö³ñîúì¶î‚ò ÷oû¾ÿd l¥9/œ ³n(ýVøïóañQñGó)öéøjû3þÛ    l × é3–PÿjûˆøJ÷„÷oø6ù«ùsúQüuÿÓ8ƒªK, S ÝÖñýÔûNú‹ø+öäóÞòßó¶ö_úÚýÑÜ”¸ 8Ú*ž 4 ¼²þUùÄólï`íÑí ðóeözúÖÿI® ¬K<c ›Üú¡ó ï!í§íœïXòÒõuúu úM­õ“ ( T*ÿ§øJó!ð7ï¬ïÂð„ò|õ$ú· E -H"h M ynxý¼ù”÷ö¨õÌôqôsõ$øÖû{ÿ8 `p ã Ó ! (C™nþXûâ÷0õ?ôîôcöÓ÷ ùõúþýLú© £  È Q e Q ^ûØöOôóòvòVóíõ^ú÷ÿb…  H ë Ù f ïŽýøAôòñ¨ðñYóÕ÷þ¸M /QÂõ% ‡ûû¨öÿòðçîîÝîÞñòöýÐG‰  „Æ .{þ%ûœøMö%ô®òÏòïô•ø”üÓÿ6L¬? 8 » m îY[ÊÚÿ+ýúz÷Göö÷oø&ù7úTü¬ÿt”p? » @ Ô R7‘þ™úÉ÷ÚõAôÅòùñÇòÊõ¤ú÷×ø ±ßÙ§÷ yvýûQ÷7ó}ïšìë&íYñ(÷Hýð ö ˆãèùÛ ÃþŸùiô{ïìë÷ìñöôúŒÿ/   Ç—Ï  UÅïýÂùïõ‰ó%ó—ô÷‚ùÏû=þPÝë é ™ì‘\£¯ü±ùþ÷È÷\øÌøëø>ù{úúü9HRlM{Õ ˆ Ü ¢uM®þvüú?÷¡ôówó˜õ¼øüþþŸš # ¹h  …ó þyù¡ôžð®îFïÌñPõ+ù`ý@ÈA Sû-¦E _Ôiþjøêò0ïþíïvñ–ô>øÀü.øû ÿ™0º Î \Ïü_÷êòyðNðÆñ ô£öØùþ)GG jÂñ µ u“Ïÿ7û»÷¾õØôQôÜóäó7õø÷ûÍÿÊãž° > i Ý 4UÓûýÌúN÷côöò?óÉôÇöèøzûéþCÖ£ Ú X± x ª Á_îýqøôñÅðõðÈñ£ó÷Jüˆ‚ š“€…D 4 råüâöròÕï½î»îÕï|òööýü{1 Y Þ PG èòÜüß÷gô9òóðvð7ñÆó:ø»ýïó£ w Ü µ c @ tíËþ¿ûù½÷ûõ¨ô}ôÚõø‘ûBþV)Aa ìŽö²ªK#]ýÓúBùÚø:ùµùúqú½ûGþŒž­¯ @Q ŽÇýïù#÷mõPôóóùôBø ýa2ì ¾ èYilK “qÿîùsõÔñÔîÖì”ì©îóùvÿ.ó õ :X~8· äó—ûõöÚòiïVídíîïdô²ùÞþ€Íß e‚k; üüCÿƒû£÷-ôòÜñ‘óNö<ù÷û¬þ²Bd î  š…µ?-þ)ûóøí÷»÷Ì÷à÷7ørùáû2ÿŽ/þ]Ô N E ¸ -ÂýÛú øõSòÅð6ñ¡óf÷—û¸ÿÆî- ËÑV» wô1þùôþïÔíî:ð½óØ÷`üaÔ Ì)·V “o¢þgùô9ñ,ð[ñ ôP÷ÔúÑþg6Q Ë#š ð‰Žü”÷ ô5ò:òŸó¼õ&øû°þæB é  ;  ÂåÔüÿùuøë÷Ì÷©÷¦÷[ø9úý4¶o¿%¦Ô ø ±aÅk8ÿÅüæùäöô›óGôöRøÆúý8‡ç m Ha$ v ˆAü÷îò›ð!ðñýòÑõÀùñþÏN Ypļ­ } àûÿ¡ùôWðˆîYî`ï‘ñ'õcúÞ‚ Ô»&dsô Ô’FûþõHò%ð0ïFï•ðhóº÷îüjƒ ¨ " í “ ¼ ‰‘ÅÂý{û}ù†÷òõ[õ1öOøöújýPÿ“í^  &Ý«"Ò×ýÝú™øk÷ ÷L÷º÷ŸøtúYýþzc ‰ 5 F O ø7µÿ\ûõ÷£õôþòËòô ÷«û þ× – ‰ÂÉ] Nÿ úÜõ¬òUðï?ïñÞõxûIÓ >Ç‹á] éyÿ©ú¦öRóÁð`ïÛïnòœö}û"o ê Wá _€íéý5ûŸøeö'õ{õJ÷óù³üÿ[²8v² ˜ V’×;gùþügùx÷£ö­ö$÷­÷~øúÃü;Øö; Î ë  É  »­ü*ùöFóñðöðÎóÿ÷§ü9Æ Â ×1:,Ä ßõÿÿúörñ î¦ì¢íÆð6õ8úzÿåG h´«¼§ þµüw÷æòÕïÙîôï”òöáù!þ˃‹ w+ Ë ùãWBýù¥õÎó¹óõïöùûmþï‡s% — 9 k \Ñ‚‡aþÂûéù·øÚ÷÷¶ö÷qøÇúsýèÿíÉÄæÆ ¬ 4 ‹Jþ¹>ÿ@üñø öWô@ôzõv÷Êùoü¸ÿ¥¶ î 8 ( 5 ŸK\ûàö„óÐñÏñóXõhøpüb´{ Æ,È a Í:ÀýøóÂï„îïàð¶ó÷ˆüS- JèjÝ " ?£þ7ùèô>òñûðÏñµóçöHûB÷–ì > á à ä ¯ LJwþ_ûùb÷ïõßô™ô‰õš÷Xúý”ÿÔ“Þ_ ­ à |ñKC…+ýÕùP÷ö¼õöÔö%øiúÇýëô  ö  j · ­_hý¤øÝôMòåðˆðMñŠóa÷™ühæl ¯Ä¡™= ~Aÿ~ùÌôIñØî…íÈíðbô úùÿP— Ô /o â ä ìÚÿgûÅ÷åôÎòÎñ\ò•ôø:ü2°ª6 + " · Ø öÁÍFþõûÃùá÷Çöâö1øGúkü<þÍÿxpfÕA©‰eqY¾œþKüiúOùîøéøùyù¦úÊü®ÿ·[Yâ ð ð Ÿ é*&ÿtûGø”õGóªñ@ñò¨õú×þy¬m ›Ú‰,Î Ö¯ýÖøiô§ð!î~íï¦òW÷uü‘@ #‰ËäU é<„þÏùUõ³ñ²ïÁïÎñ<õ\ù¯ý l† Á n7Q = ¡ÖçþÓúæöÐóòòKó_õÔ÷úÅýt5^Z  û u ¯ ^41ÑÿÅü~úöøÅ÷¯öéõèõ ÷?ùüüþ—mÔ¿ ¨ @ – :/äýFú­ö±óüñâñFó´õµø5üQð O ‚Ñ‚# NÑÍûïöóñÈðòbô†÷ƒû8Há $ ›]Í 1 «IGýEøônñŽð8ñóãõ©ùKþ|“¢ ¾G º Z;þù¹õvó¬òóôÉõSøºû®ÿ~ƒun Ë ³ öPÃÍÿÐü5ûùùçøøí÷¾øiú}ü|þ;Ñ„n:d‰µK¥ðý”þ¹ûÛø¨öŒõ¢õ›ö ø)úÚüQ?  ¶ + š & µmXû«ö$óñ2ðuðäñÂô)ù»þ§ ²ëÙU ITüvöò*ï¥í…íÿî:ò÷öü u¶ ±jÇ•§ : êþýù<öcójñŒð%ñcó÷Jûhÿùúˆ  ¸ D Ìì4Çÿƒýaûwù+øÖ÷ˆøîùû,ýÈþ•ž¥> ŠÏï¹émÿ¨ü1úmøe÷äöÃö÷,øhú¥ý]Ü ± Ø % # œ ßžpý­ùlö³óÌñ-ñBòõúøvýëÞ  "”ì ˜ÜAýù?õ&ò@ððäñjõúéþ“Ð… nàÙ I æ[ý ù~õØòšñòCô’÷cû<ÿ®ê 6  3 Õš^ýú*÷ õ5ôÍôöÅø=ûÏý—’‹ … å c e RD,þBûÿøp÷_ö¬õiõçõj÷íùýC6ë€ã £ A b - #ÂJªüëøZõŽò7ñ–ñ†ó‡ö-úAþ¤%V &àû Ý çb€ýøôíð‡ïþï òGõ]ùþX£2 A\š_ þ&Âüj÷ôòð'ïåïéñÛô®øIýdSS æ Üx Ö ¾×Šÿlûøñõñôáô|õÊöíø×û2ÿrãëƒÂn‚ …^þ¶üTûÿùÂøü÷þ÷ãøkú&üÚý•ÿ™ßÕ® ìパöèýëúŽø1÷áöO÷PøöùjüªÿSÓ~ ó 8 ý–;ÿ„ú]öGó¡ñ^ñPò_ô˜÷ýû@³€  £ß¸ Fú õòéïþî^ï5ñ¤ô‡ù)ÿ c iDúY G ô \üpøŠõ±óËòñòJôðö“ú¦þŒÓcG Ü  P:VÏý”ûwù¦÷ö}ö|÷*ùûñüÆþä]âÜî …ši̓ÿbüùO÷ðõNõWõöÓ÷úCþI\ Ø ‘ o#f * Ìíÿ7û#÷Äó'ñ†ï`ïñ†ôRù¬þÔm_ ˆ|¾| ¶~uýàøÕô£ñ»ïïIñŸôôø–ýX å iGl F y‹ÈýFú8÷ïôáóhônöwùÝü1M&¨‚ = ªFˆÝý9ûÇøéööiö–÷0ùðúÜüÿ–.V²98ïoÊ=ÏýÔûUú.ù?øœ÷¢÷ øšú.ýôÿ˜ù& ƒ õ  2ì‰þ(ûã÷ðôãòFòKóµõùÌüÕ; ë cö[ ʸK¢û ÷,ó¸ððOñ ôÁ÷ üÀ£8 Þ LÌÞ ‡—þùôôsñŒïvïñÉóc÷³û•°\ í Þ#4 • ,nþ úœö|ô›óœóBô“õ±÷¨ú,þªœÁAA Ê » ÙÉP þý ü)ú‚øf÷)÷ä÷Zù)ûýHÿËŽBU V 1 - «¹C&Žüù3ö¤ô]ôõ¤öçøûûßÿ5Jg 8 ¸  k ¶ôM]ûòö¦óÀñ.ñÙñ«ó¶öûúl X 9º Ð _(÷ú™öóêññ2ò ô-÷tûU á… þ x þ Y z›\iüHù÷¸õõõRö¥øÄû"ÿ%{2o»)¥rïÿ;þËüwûNú“ù–ùcúÆû_ýäþfðØOþÌþã‡ÀU^ý@ú—÷Üõõ õ”õÉööø4üM®£ ® ß$Cÿ N`þˆù{õeòUð~ï*ðˆòyö€ûÚå9 ° +‰ý Í ©^ÿzú@öÐòSð*ïÍïjòžöžû«NT ª <£= Š 7ÝÈü#ù ö¿ó»òFó=õ0ø‰ûêþ,<ôô Û z  ïœ@Èÿ)ý–úøT÷1÷é÷ùeúÚû¶ýÓV7E¬º“ù›fŸÅþ3üúBø±öõHõ0ö:øû"þ64"Ö à ¼ $ 0 R• ý}ù:öÕóÓòó¢õºøBüòÿÂ†Ó  Á ´ 1 Ó"ÿû9÷ôDò.òÑó¼öaúbþ¡÷ð ð XæÐ ž Ö¶WýìøîôòÅðEñ1óö‚ùTýw­~ E h   €uõ1ý½ù1÷Ùõ›õö÷šø­úmý“˜ík>±à“xwØ)Îýâû.úø÷:öOös÷hùÊûKþæª8  Õ Y ì Ð9*—þÀú=÷¶ô’óÉó!õ@÷ ú™ýØao E …<¼ H ò¨˜ý]øËó¢ð9ïoïûðªó€÷düÿ¢u ÜœÜÇ`© ÌPïúlö;ódñºð-ñÞòçõúÑþe"µ : ð Ø Ã 8oÖýûùØ÷&÷÷¯÷ZùÖû¨þ:DÌž€~ÕÿLÎÿVþÈü5ûóùjù³ùú™û¯üïý‘ÿ©öø9™\Âß„r±ÿ˜üÅù¹÷—ö@ö„öu÷EùüÏÿÆ_ ë Ø ì õ ­ …Ëü‘ø;õäòƒñ3ñAòéôùþ#¢= Û uØ´× ‘•ý5ùªõó[ñõð&òýôùÒýfb¤  ¢ ã – È óÉïý™úÉ÷ˆõôàóõ·÷%û¹þýà{¹ J É   ~¶Kþ‡ûÚø²ötõFõöC÷Óø¬úýäÿþ=§ b ­ ’ Ë r°þ¬û9ù1÷õ_ô+ôHõÇ÷=ûÿ•ß×d . µ ª  ŠŠ~þŠúÐö£ó†ñùð0òåôø¬üòEp û BË~¸  ×ÿ“ûv÷ôòÆñHóö¢ùtý`Q ï k 5 m “(Ãýú›ö#ôó“óFõÊ÷½úúý~h¿ Ë – | àç‚›eþ]ûùÉ÷v÷³÷7øùZúKü°þ'5Ÿ}(µñŽa˜–µÿþžüûù˜ørøCùÚúÒüáþþE·õt Ï ùH˜Éÿ›üBùEöOôÊó´ô¯öYùŠü>Z~ Qóæ Ûˆû¨ö¥ò(ðoïLðeòŠõ¥ù”þ7 i à?jŠ ›¿nýdøeôáñÜðñfò¾ô1ø˜ülì{ Ñ þ 7 ‘ õ =›œëü÷ù×÷röŸõiõöÐ÷nú`ýe9Ð@T«™¶ýIÿoýxûÀù´øø9ùUú¬û@ýIÿÏ„çƒ. Y-Sž)ÿtû!ø©õ:ô¶óôó õ4÷úùþ¦ç5 k —Óö ¹ XUþÅù%ö˜óò›ñdòªôUøåüŸÑ* ™  x s è §Zý¶ùáöËôˆóaó¡ô[÷5ûyÿhš Ý é î ¤ ‚Äný½ú¡ø÷öö÷Wù;ü3ÿÒî‹­ô,|T!þ üùùGøo÷˜÷‡øØùCûÍü°þÓa<9 † d èä_¡ü²ùo÷Âõ›ôô‡ô<ö3ùý·í¡ Ç õ D " ƨüèø“õßòIñUñ)óuö§úÿ][ø Ù g-" © cì•üxøÊôò±ð9ñó ÷=û˜ÿêÄ {¨Ê † ÃÚØýØù.öaóòBòÚóIö ùAüªÿEµo  L ¡ l ÛÜXp‚ýûzù´øoøkø»ø¥ùEûƒýòÿÈ>Q*î½·þÄü¼ú²ø÷vö÷¡øÍú4ý¹ÿi>ô î ‡  þ~aþýúâ÷ºõ÷ôœõF÷ùvüÏÿ‘`š å Æ – ³<7ÿÓúŽö*óEññ€òþô;øü“dì { ƒÞ• å€Õü‰ø>õQóÌòióßô ÷9úþ8ò­1 ¦ V p ÚlDÔþÍûù^øÓ÷¹÷ øûøÀú>ý’„êámKKz9ÿ ý3ûQùË÷ ÷G÷nø!ú ü(þ¤ˆ‰# Ï R Ç ‡ Â_7[þDú£öôÔòÁò£óeõ&øúû«™ò * ¼I¦ ¶ uHñûA÷»óyñgðƒðìñÈôù+þbæ` À Bi a¡ñýøùêö¼ôoó!óô„öú þØvC l ¯ Æ «¿™¾þrüžú ù ø¶÷vø;ú¢ü$ÿZ-ÈOœDùÂÿW¨ÿÓýÍûáù~øñ÷*øåø×ùýúü´þX LÒ¶3 P ߉6*ëþ üËùø¼öëõöR÷ÝùFýê8ê · ž a ½ Èóçþ2ûø‡õªóÔòdó‚õ÷ø+ý~xôÜ í ¼å _ ›Mÿû÷˜ôƒòÔñåò£õsùŸý°rÔ¯ Ÿ &õ B ¤½êþGûì÷ õóZò3óWõ;øsûÉþ2ŸÂ" T = - Š –E~Sÿ üwù²÷ØöŸöÂö8÷<øú°üšÿR‡?¢Ð• ƒ Y5ŠÒEþèûŸù‡÷öŒõföXø÷úÞýÕÞæª ž @ i ] ’f÷ÿQü™øSõózòxó½õÌøOü4jœ* mê Ž e«o×ûf÷Òóªñ6ñHòxô^÷áúÿÎ; > ² Ð  Œuþýñù÷Yõÿô¢õõöÖøSûmþØ c¨ù¦ã¨Õa›ÿý6û ú‘ùKùJù½ùåúºüãþÜXnbUiéŸê=Éÿqþþüoûú5ùLùFúÓû–ývÿ‚ÖKkµ Þ  iM¿ªÿüXø,õ%óuòÿò„ôØöú þÇš S–ŽoO  ¶–ÿkú öÿòañ ñÕñÁóâö%û% ¢ _ b8ˆÿ ûc÷Þôoóñòqó"õøüRRƒÀ 9  ë ³ Dø_þvûgùÁ÷‡öö‡ö#ø‹ú;ý½ÿîëÓ~žÕŸÚüþ¢üNúnø^÷/÷¢÷vø§ù^ûÇýÊÜê# ³ ½  Žìf‡þõúøöõxô¨óÕóGõøÛûÿÿÛ· ­ Ï Ã D _{ªü`ù¯öªô˜ó×ó õ¼ø˜ü-?´ s . { B Ùèþ®úá÷°õAôùó$õÁ÷Kû$ÿÇú»ò ] Š > ¨NÌþ{û°øFöžô ôûôõöùOü÷þ˜=¶ • w vøO…-ÿÆü¸úTùÀøÊø)ù¿ù³úGüuþõK$oUÿHÔ^üKþÖû½ùÚ÷:ö6õBõ£ö0ùiüÄÿõó¼ š Ì { ß{ÈþVúäöô`ò>òÄó¡öGúGþn”p } (8  Gšýùºô[ñ‘ï£ïdñPôë÷ýûu&¢ 2 =”tN u 2ÿýöù¼öÄôôoô”õS÷¬ùšüìÿ¥;í©ä±þÁüsû¨úúºù°ùPú°û¡ý§ÿcÂó,PñúbŽËÿ3ý.û?ùë÷„÷ømù1û:ý‘ÿE/ׯ j  ¹Òhròý>úòö¤ô§ó÷óKõd÷5úÄýç&Ô V f - è Ç ÀÜ^þßù'ö¶ó¯ò×òúóö#ù!ý¤ ¹ ¯ Ž € v j‹SþdúX÷võ¬ôÁôªõu÷,úŸýU¶DÙ™ ¨  •@= ÿ@üú­øÃ÷F÷a÷XøEúàü¡ÿ!Ö\¦e 7 å§lÿý™ú)ø<ö5õ0õúõT÷ù`û?þž%C â I í  «”µ’ýÅùÂö®ôzó#óÍó¾õùø#ý•Ø, « E ° ¤ ,Æ+þýùöô|òãñ¤òñô‘øýü†£ ¢ Z ë  » 8ÿþOû5øÀõ!ôóuô¯öéù‹ý %Ò ‰ A 6T;Uÿ»üVú2ø“öÕõ@öÀ÷éù:üzþ³A(U›#ú¢÷áŽþ_ü±ú¢ùùçøòøfùxúDüŽþæòŽÓÓ{Àý•³ý¯ûîùtøo÷I÷Jøkú;ý2ŠËœ ¦  ÷Iñvÿüïø"öùóôòjónõ§ø‹ü›’HŠ ï ýi: еbüøjôÁñˆðúðûò öæùñý> Ò 3õ T Á ªJ¥ÿâûdøÃõiôgôvõ4÷`ùôûñþ->§ x ' Z^i¶ýiû¿ù¯ø øÌ÷ øíø‰úµüÿWDôÏ•€rš]éþ¯üaúAøÁöOö ÷Âøû¦ýy· ‡ 7 ” Õ Q3”“ü‚øíômò\ñµñDóÑõ5ùTý펜 z åíË £ Œ |ûƒ÷½ôaóEó1ôøõ øü!(}® œ € Ü_,¢þQûºø+÷˜öÍö¬÷@ùšûŽþ­~˜ßkfÚ¦»=˜ÿ9ýdû$úZùéøáøzùÔúÇüôþú¤ÿ.C($l âÿ þüúeøl÷W÷øPùíúõü~ÿv„- ç Þ  ¡aM ÿÇûPø²õô†óàó4õ™÷û(ÿz`c S 7  Ï S ¬B¹ü·ø©õªó¹ò×ò6ôæöÃúHÿÀ•| h M  ¸Êa+ü–øÓõïóó+óŸôV÷ûÿ „Z w · ç Ý ¤ ’!¿ÿŸüÔùj÷’õô¾ôòõî÷Jú¹ü(ÿ«;“J  ph%‰sñÿaý3û ù­ø<ø3ø¦øÁù¢ûþÎRqQüéßâ18Rý¶úwø¥öõTõ]ö–ø©ûÿu~%G › Ç — "ÈýZú“÷lõAôdô÷õÈøYü!Äì ú Ú J M 1vÿ½û0ø/õóIòöòõøûFÿû†ž ã í Ž ñ {™‰pÿgü£ù„÷göpöm÷ùúúýnÿØ#òð Í²J„tÿdý®ûúúãù ú„ú}ûýÿ?8ÔÒ ‚ý€ïþüEú=øöõšõÏöùåûÿh²Ïp  s \  þ[iÿFû?÷ÑóŽñÜð½ñíó÷ãú7ÿÓR §¦D i »b«ýùQõÅò°ñ ò‘ó ö]ùcýÀòh ¶ ® r D G †!eÿÏûäøùöö!öÒö(ø7úæüóÿÞ8ǘٛÓd^Éþîü‹û‡ú×ù‹ùÏùÀúHü(þ»RÛJfï±²,k…lÿý³ú€øäö2ölöf÷ëøðú~ý‹Ùök å ] ñ Á Ѹ þ¢úë÷$öVõ{õŒö•ø’û>ÿq Ÿ ? â „ «©ÿ¥û;øÆõbôôÇô‡öTù ý<P½, ‚ Å ÿ ' A†jÿ„ûNøö¹ôZôüô²öqùóü·@-Z Ê o  ² G/áËý!ûéø ÷ìõõ1öÃ÷ú“ü$ÿšú;+„  ¿ ½J„mWþ³ûqùÚ÷÷Øö5÷"ø·ùüìþå7æö _ ó ’5§ÿbü—ùW÷´õçô0õ¸öhùìüÄt´[ B ¯ Û Éç¶ÿ©ûøõ ó ò«ò¼ôø2ü’ÇŠ¨ ë ý’— _ k5ý]ù)öÅó’òÐòtô#÷lúñý{ÞÞ" K 6  ¾/ƒÓý^ûuùiøMø÷ø&úžûKý5ÿIVvB¶öü¤ñÿ`ý ü0û½ú‰ú‘úûü‘ýeÿ=èT‘™3+‡|T6þ'ü5úŽø÷÷©ø²úKý'ö¡à ø ð ‘ âEý¹ùAöxóÍñ“ñÝòpõçøíüCª¾  ŽŠF  J‘üpø/õBóÏò¶ó©õaøºû‘ÿ—I ­ é  @ ÊÇ[Ïü˜ù-÷Òõ†õ'ö‰÷ù$ü,ÿe^², Ó Ä  Õó‡Ë!þßûúÜøø£÷á÷áø™úÉüÿM_\5²€ k qÎÀkÕÿý1ú³÷ïõ$õYõoöFø¿úÏý[kû ‚ è B © 6óÒüóøâõéóóróÖô@÷¤ú¶þâæ Õ ¨ i •&ýyù×ö;õ£ôõ—ö,ù™ük,X • æ B •ï“óþûÒøùöþõÚõ“ö6ø¹úÙý9^ðÄÞ ? Û ™íwþ)ü<ú³ø¡÷4÷•÷ÀørúYüFþ3*Ô›uÑä¯'Aÿèü ûËù)ùùqùPú¾ûÁý9àM3r àø;­@ý.ú©÷×õÌôªôžõÂ÷÷úØþ؃ Ò 5 y o1ÙýÛù}öôóiòòDóåõ©ùþÃR  ¢ï¿  b|þ9ú‚ö›ó¿ñ2ñòGô†÷TûLÿ*¾Ê ÿ  Ó f & x£¬ýéú³øU÷ëö`÷jøÔùŒû”ýÛÿ!„S•pñ·òùÿþmü.ûMúÂùšùöùøúžü´þñú¢î²±¸Ù[›Ùý0ûÁø¾öyõ@õ@öVø.ûgþÏ9dô ‰ Î » ƒ }òÿ:û›÷¯ôçòˆò•óÙõýø«ü žI3 ÷ Q H  p¡ÿÖûiøÏõcôLômõ†÷Lú|ýéZeš § Œ w  AzlÿYü²ùÝ÷÷÷ë÷Kù&ûoý ­´—¿Rr#iXÿûü6û÷ù9ùéø ù¬ùÞú›üµþõ¾9F Ÿ  ­š%v¢ý²ú×÷{õô¦óhôöwøqûòþѰ } ´ ® Œ n p´ÿ=ûo÷“ôõò¤ò”ó©õÂø¢üô<ó¤  C <  ãßlþúöôÇò¸òÅóèõùýz¡ a ¦ Ü ( D£½ÿü ùàö•õ,õ¨õ÷gùWü…ÿ‹%(‚0 & P´†»ÿýªûúËøøí÷˜øßùûEýÿÄÌ Ü*š›3­ýdûžùrøÛ÷Ì÷Uøù§ûFþÒ»¸ýr±Â‘þû ùD÷Kö3ö÷ùæûgÿ _ É Ÿ o   þÿðû^ø‹õžó·òó­ô¦÷›ûK" O d.‹ ™ µe/ýeùDöüóÃò¸òðóQöù0ýÖ2I «  g Ác®ïJþÙûÂù<ø÷¬÷¡øúæûÖýíÿ#I-`ÄÙ’Û¯Lþü=úëøøÅ÷ó÷¹ø4úZüõþµU¦ A Ö s$.êÿ¤üŸù÷õôPôÓõ|øòûÆÿ¢F| ÷ K.Œ £ ך@ýûøõò_ð?ðµñô<øüÿpp Ž eÆ» ~ ]§ª¸ü0ù}öíô¡ô{õI÷Âù¨üËÿë¹Öïñf` ˆÿý»úùPønø1ùhú÷ûÛýBNÒ©á®&<ì7MjþÅü}ûƒúÓùxù•ùCúƒû3ý"ÿËe¨]L`¿/¢þü†ù]÷ìõõ*öÂ÷ ú×ü ~äÍ Ã y õ k õMRýiùöêó ózóõš÷öúìþ%$h ˆ V Ô " nïã­üÈø°õÀóóÇó‡õ6ø­û©ÿÂ|^   q ø­ÑÙüOù¢öõhô±ôÍõÅ÷ŽúòýÆnU ‚ ù ´   ÃKƒ·ÿýÊúÕøT÷lö;öÌöøÛùôû?þ¬&|xÜz S ‡7hUný¼ú¢øU÷Ùö÷ñ÷•ùüÿr™"Ô ¢ Œ ˆ ФTýÖùûöùôöó ôJõ«÷ûúþ ÇÐ ñ ý Ý … ~b?ý‡ù•ö•ô«óèó^õø¡û¶ÿÀ8ð µ † / µ ˆíü ù÷DõyôŽôñõø"û"þzÅ= Y54+'Aøá½c°Gâñ5.Å^ö¢é{çðlõ)ü©ãþ þh û#$+ß2í|Ò¥Úu÷# #Kù‰õß÷v“=åû‡êËëAù’¶ýùŒ +i µñ¶ë^íõéïçâèâë®ð–ô¯üu ó&| Ün ) býnê[àçÊó˜ûs÷¤ñ°÷ûQÎ]Mýzÿnþêü0üÿJ 3«( \ÿqú¸ùgóàìãé%ì_ôPôDïö¢t'ã/îüõñÃæ"çqí öõûãû]í ™ü õüªü©ú#õðÜðJþçR¿T Ç e1÷òêªå¤êÝðæïêð$øS/–OíÇÝãñ€éÕìbñbô’òéõ¹e P¯÷7ù4ÿ—ýùZõ‘û~ x<Ýþ*° -ü›îÌåPæÍì¤ì'î:ù<Þü¼mS~æ Ò÷féjèëïwî½î¸üó °7ÞYà s;û{òœòCÿ¯øq³b ç÷¼÷Žð·î×ñîîÑéÀïý@â¾Ï!þZÌàñˆî>ïÑî$íë@ö0’–3-âú|ñ•í\÷ôÕ ë Õ‘_–zöïÒî·êqàÊà«ìËüƒ à wKî0çþ‡öSô·ðí|ç‡ëíûŠ ˆÀ-• , úøòË÷VðZO ~ cäåQøPòFðfíÌâÈÞ±èù Á¼ëd"¹"<YúVöbñÆëäåbæ¾ô‘oè› ON Yý?óMñÆúÍÿIþ¹Ôõ/N2bQþ§ûRïòâ'åHï;ü†F‘ Z´zš `ývùóóë»çïñãmI¿Ž 1hõ;ðÊöjýfü¤þQÚ€ùø ÐYlýÇñ*áAÝPåtò÷ý\$ù"V%ó ðÄéö-ëráväñ4ùoüþ‘^BÛ )éøòú)Ïþ-üÝÿаó âýzúžéáÓåPï•ùöüQÁ ¢"@.$iúQîÑâ9áî]øDüÅÿlÁ’Ü’üqù+ýßù_ô¶ö ÿç Í¢ . f †ÆóEä5âÝæ'îˆñÁòìÿ héÃfñ† qþð^çJí‘õkö›öµøgø œ(û9ø½üý¶öQ÷ÿÆ *Dhà® —û)èˆásã!èòëäë;õA Ÿ ;¤£Zíôç1çMï·ðùð³ôÿOŠ= ¡@^ øÕñîôþu ¶ }$ ð[çôuëÇëŽí&ï~ìíïwu£KŸ1 NýzîŠé9ðÑò-ñÇò úÒ FTç(ën÷ÔíHïÂ÷J~  ÅÄúsô9ðÌí/ëæjã2ðUý˜;bÝK AúRïêðPñ‘ë„é»íÂûÒ d ¦#e Jøõ¸ù•s ²ø% &ªbñYîUî—ëAæLájêŒýf à ‹rPž:_ô ñTð†èÛãCçôuŠ -] Ö C $üÏó–ôpú{©³m äb¬æÍú)ùXóKëpáEâ!ñÓý³¾ ¥Nuû-ýùWú½ó‹ëkêñ0JZ ô1 0þ ò‹ðûõÒþ¼ÿŒH¢~—þ=þˆø’ìºÝ÷Ööâ¤ó±þ‹­ ÷¸!þ Ôð ZÊÿ:øë~å,èóó"ÿ9ÿ«þ â2 ²§úƒ÷æù¡þÔÿ«úôýË éŠ ˆ©ÿR÷7ëæà|æ…ôü–Ñ«CK É ³ÿ}ûîKæÛæ™ð}þS{5 ÉêÞø‚÷½ù?ûmö§ö:Y –n•} V™ó°äœá”ëó>÷.ûŸÕ…Dž7 ¸ Þû2íèí¨÷û§÷Yú‡Œ  7"øqù&üÀþÔûGù\S« ? ¦ ôîøéñß;æwí¯ïóRûg e¸ôÌLëîðBçBæ†íócðôj… <Ò ·nÛ}¾üHôÁ÷ l9 ß a G ô«çsçµì<íâíòÔÿÝ·ªR¬ úKí€ê8ð{÷Ûõ–ôˆü¤ áý¦ý&üÓ÷"ïÀîTûÍ œ§Ý<ûÌðÀé×ë}è_ä¡å$ïÁ[& og˜uföCï¶ïŒô¬ñšëÜñÓþ© i¼ ˜î¸ãöôñ©ú‘D i ÷À (¡úÌñ’ééëòë£ççóí<T ³ÅZ1üfñVîðSîÒçšê¹÷yJù êÛ¯ `úñî@ñIû¸JK0 }ÒIA÷¶ößô´ëæëçaól¼ F ›û Äêóú^öîö8öí©éóvÿñ™¢Wß.ýÝñéñþû¯LMh É$ŒìûÒöIôâé‘ßQÝLæ¯÷¯àÕê$†%ª0üøÃí}äè óˆþØÍÿ#m F ÔZú ôÕú,tÐÿr ?À‡ gÇýgþ?öÍéäËælóéþÄ΂À¯Š¼ŽÿüÒù‹ñtæ>èÎó©ÿ[%P‡ ëþñóõ\ùXùøŠø£:Ê ÒÛð…äbáYéóùõ?ú<¹>gNÀ ¦ Üçüî”èÏî5ø¦þOýhüd® ãåöàõ8üjý@ûrúSI‰Œ p:Nô2æqàåcðõÇöÂ3xˆ!E³ø Wÿ=î³â"ækîîõ ùÁùÚŸ æ ßþƒ7½úcõ}öš6 | V ªÿiðçæèæîò2ñÉ÷&×±OƒKà [û¸ìþêœñØ÷Nù>÷úüG‡  \ÿÙ÷Hú´ûœöò)óQÿŒù~ý‹)\ üîñæóèÕë˜ètêðöÞx"Þ„~y_õÞíñð°óÍó>ðZòÿT > QHþ‘§¾ÿŽùÏõ üz ÒÞ r ˆ !Ù¥ñµé9êíßééƒòdÿÌÀ3sG õùRí=íÚð$ò…ï£ðfý” ð ŸNƒöêîÝð¤üsqµ„ uàgÒ4÷óAó2îáæÌéãõo¿ ì  7$ ØõÐóøõÊõò„îñõöß = mÿNxûñòñÜût¬|ç jÙp%Öözðhî¼èñßàÑê û D ¦q"ì dµ½ù#ø9õhîÇæÄé÷Y{dmöÿ P:ùLôTùWÔOµ• Ö7ݤþÂøÖöVó"é—ããéQö§á]$Áû”ùa÷òÛêÅé4õ¥C ð dKúÌðlñKúqý:û‡ý¦ÀÖ« œ¤6ûüíâáûà”èŽókúbýh¾q¢¸Õ³üvñoêð'úÊþQþ üŒÿ µIüíóÙòõù4ÿiýý¤Ì<.ª ›@VÿÝóøäÒàÕçòåøhûålAl·¹ qe-ú“î£äAæžñöùü³ý‡Ô SX KoúYý‰^ûýõ’øaÀ> ׯ‡™þðVçÃèïrôçô¯øyβsg à  êùËíë¡ò›ùýû\ü ÿÐy &þÀ÷køüÄù´ôðõoP$™« µØ÷Mé–åoèYë>ë°íºú» LÌÕØIõìNî´ó?ôõò õ±ÿô ‰ U|þhþÉgKúDø©þo mùª û © àcüÊí½çìèýëëëæêÕóݳ?uºÉ¥? û‚îèíéòkôôðõfþP ² x×Óþå%ÿpölïvñ[üÄu Æ i 5ËtPÿ¢ôÛñíðí™è`ë•øOgy )ú‚ e÷CóËöÖ÷ŽôDó"ùsf .?€þ¸gÎùÁñIò/ûÆH ï ü Ì4bõ#ðî˜êbä0ãÛîëÿ Ñ_¼Á£ÿøõñô&óóí¯êjîRúi»ZÒs´¾¢øôQø{&¯ o¸! ýƒ÷ÜõYòNëç~í$ûϨ Í àFãªí°ö}ô9õpñoì~íÛ÷P¤{ß 6úXòîóAûè[\ ×)qÊÿ,ûõ%ëïà€à'ëûö þ P ÌX~.'‰³ú¦ñ(íañŽûÿÿ~ý¾·™½ûáóôhû•Ö*P)„ÎN ™Êþiúéð)åºàçóòñû€íüŒû ™·ÁùTïDèÔêõôàüçþ¡å¹ ¡a}ü6÷(ù üØûÖø°û¥$Û„ ¼–·®ü/ðçåèsðõ¡÷Èû¦srëÒMWù”ðºîõÑýÒÿÙþÁ¡k £pû#ô'ôVøÌø\õ¬÷±H+=}[X ÌP÷'êžæ<ê)îMðNóþÁ¯_ö >˜òœêzìVòLôŠôªø¡2 6 :ÁýRþº­gü_ùÈþ¬ Y:Ÿ Þ Ã mÒùFì=æzéÅíÅîŸðaù ¾a·—~]h¤÷ªíâëðð¾ôÜô÷_Í QŸ ‹ý9þoýšö ðŸôÌÿ3 S< Cšïü ¨û¤ñ9ïwî³ëXèËêá÷žéPáùø÷ÆòJõ¨ögô[ôÂùa@ näÿäügþÅþ÷ù…óÐóý x^¦¿0}ÿAñ^ëqêùæDâsãïIy øEmÚв :ÿ}öôÀóEðˆímòØý¸> 8‹…ÙHAöBñ õËýÔr¨{ ÿYõüL÷(õQñJë§çdíÿû9¿ #>”ô ?DöÕóçóÄð/î ñ?û‘° ®Â± 'ø@ð ðä÷>ÿ{^ 8ÑÔibý²ùaôDê‡á*âûìzúhÛ8 å(µôVÿûûœö îÎëòüX…9ÿ‡mGIý/ô\ó@ùxÿ½X< mSáz QüMö€íCäüàéÕö2]Ò ‚MÆç ºÿ°û8õìëúæƒêFôÔýÎå`ö i ݾüÙöFøkü”ýIüéÿ¬ P_ÅË  Pù“ìBä°åáí¥õêù#þs58Ê Ž~×øð¿ï›÷€ÿ–’&Ò¶ Ýù?òòšõ÷­÷˜û7çyõ­ ë éMó“æâcç"îºñ›öãÄ®;)³f Äeüððåë±îmõqùùªû<á ½ xÐüÚúFý%þûú„ù£ÿp }ÄZ Ü 1 É÷(ë³åWèííèñRõ½üO [@NÊ d ötôÎëÏìtóWøåùüüœO E{ -ÿ‚ú›úùÎôzñ¿ôBÿ´ µ › -8gÎ7ùgî¼ëËí¢íÐì¿ñtýv ‘¼J‰è± ¬ÿ+õOñ!óøõDõCôáùóº ZA‡ûôûlýÇúDöž÷àØ uëH¥ :ü3ïZéTè/ç†åßçÚòÛœ&Ë ö‹] eüÜóYò;òðáî³óþ ¨ “áaìöý5÷Gó#÷\áê „MŠEü³ôóåðYëéFï¥ûÊJöí ÁþjöÞó[ô«ó‡ñüó.þ `  dßEŠþDö¿ïºñú¡Ê C›éjüÿöiñéºáUâí^ûÇÍ ÈÖÓ‡C äþ‡ûÓöÿð¬ïõ&ÿ±[µ>¯úüšõ‹óÒø}$M m¡BÑõýöøÃõ}îÌå-ä6ìùð C4çGêà¡ý—øNóUì è©ì ø¹»™eÎ _ $ü,ö,÷’úLüyý–\ |šükzþ÷1ìMä°åï øþ‹• Jå QÚÕõÿL÷ ð ð6÷fÿæê­Tq•ùòzñcõðøûB‹ )´¤ þñüä£á¸æûî³õ—ûgëµý–þO Z_û»ïêüí}õ“ù®ú+ýRÈ . e¯û/ù¯ú–ûû¾üfœ {H¿ ‘lêø|ìyåeçúíùòùö¼þÑ ·—bïI ÆmÿôÜìîõEû…ý¤ÿ4ë Q®]ÿùK÷öxò®ðRöôˆ ýÍ ‡FýøïíbêÛëûíPï¡ó#þ7 Z=è; –ýeòþîó7÷ß÷<øÉü= í üAürü§ù­ö¼ønñ O#·ÜSÑqùìîåXæäç¹èíøæQUÓ•|±ø`ð¸ïBòçòeòMöt  ½ä'’†üÚõAórøo£c † :å-x2ø ñ ï!î ìÓëAòËþ° ºE¨P[Å 7þõ8óõ1õÝó¤õ>ýÍ. —ëÿÿHûGôïCò—ûЄ · ”™þMò÷ÖñjíTçwâÕä:ïgüo? o몂 EìûTúÍ÷%óíð¥õáþ2—Éÿi?ÿuù4óÕòù˜ÄÜ ]¡ ¶=ýT÷uóÆíoç\æ%î¿úGj u¤¹¶ {‡øcõEò¢í2ëœï&úc«/Û@ eÿèøzóõDú§ý ÿ_A ØIo Öÿãû±õ†ì*ææç9ðLù†ÿí Çé2 ýôþ"üdö¶ðÙðFø@–&.JÙT¬øIòoòC÷—ûíý ò SëG+ Ï»ÿáøîÑã7áçñ6ùm^ FúªoÛ ˜Nlø^îdé ížõü9þ|. Õ‰dûËøìúOýHý]þÏåb k½˜þÎôGé;ãêåŠí¨ô=ú+dÏ_à üНþÓôîŽï\÷þŸ:Ÿþ  Kôúûô®óòóãòïòÿøÙmaÆô{X ¹aö:ëáçoê÷í ñÃöÉÐbZ¼ MýCó ï¢ó1ù3ûµûÿ!óþÁøy÷Nøm÷-ö±ùHO†è©sç»ù†ìÎåæé)ìWñDüÐ Í*;je N^õºíîòQõÕö+û›°  öC“ÿ!þ~ú—ôAòŸ÷œ R ¦ ƒ‹ ØøWðîíÚí»íZï%ör*—?Ί2Ú¢úñÚîdòzõƒöiùy±Q ØÂÿ–ýwú®ô!ñþôÙþÜXQrqÕO†èó¬ìÌèCåãÁæòNý Ä>õãü‰ þó÷÷ÓörôQó‡÷ l6Hëÿµÿ‚þ¥ùÿóôAûG I Áú)ßaùªòòî¯êØæmç«ï ýv5NnÈÇ "÷&ô~óFñòïîó÷üDC Á°S—"þõ)ð¶ò”ùÿ®¬G5€k[þòøºò÷ê æŸèÌñtû ÿ !2ASâü«ûðøJõRõEûl¤q'cXÎý{õàî¡ïîõ$üûÿ% ƒÍù ñÐüíõýì€åiänë ö®þšç RµŠQ]Êû¨õ$îÊê‚îÌöGþ~—Udbåcù­öRùiývÿÂçë889 Oãÿèú×òÄé‘åaé¥ñùùþ«j YB ‚ÿúSóvîð÷sÿhñb÷ ; êpùOóaóºõóöø ýklŸv, gwþwòèzåéYî¹òaùa“œÐŽç ó Mqü™óðÉóHù©üiý<ÿ*‰ÌüK÷?öøŒùú;ý76•Cã6  ’õíè:ãµäøè?í@óªýy ­|Ù_Ô Û ›õ@ïJð£õú…ü/%  {DþŠúpùH÷ôó(óAøë Ž(½ ç Ž ÑäöãîÂìiî»ï³ñ5ødGo`FI ó Túù;òñ´ôÑøûWýÚ6 ô bVÿŒú“øöLó?ñ@õ‰ÿ !ÞªäÜ ýqñ&ëøèÇçÔçaì÷õCí¨ÉÌU['û½ô#ôJõþôLõ§ùÈæÃ{,þôý,ýBùõ(õ‹û£ R hž%Ü }¡öZïìþêSé\ë'ô-¹ ¹d@ظ ”üÕóãð'ñ™ñõñÅõþµ{‚A“Åû×ôòðuô×ü#ª„ g°EƒŒú\ôŸî†èaå‰èò9ýÎ ³ µuÍ6þ†ú:ú5ù*÷Ì÷#ýé„íìÔÿÆþÅúô>ïeðT÷Sÿòs Ë¿þ©Ñ ÚÿCøÎñ/êÏãôãë²öµŸ|äû˜MýµøÖôËðÿîóTû*™˜Hq¨YþŸöfó´ö(ü¾ÿ¦b]ð9m k#þ@øÀðméªæ¸ê”ó$üïËv»”§>¯ÿŒû#øÝó<ñéóDûüi3 :*ÿöÎð†ð(ô÷ú ÿCö+Àü çùÇù!ï?ç’æÌëàò:ùôÿ ‡– ŽcùÝò}ð&ôåùCý@þ…ÿO(Òû³õÁôÿ÷#ûnýh³É–‰P ýšñ1çÃâƒå#ìbòÂø•œÒft § ýôìîðõRúþ:ð  Áuû÷föÂöö¿ö<ü°öŸÝ þþÂóoì3ëíqðºóú?ަ6^_ çÞÎù;ó`òŽöû¯ý8N„$ ^¼üæöõ ô†óíóºø'û üÐæ è ûxï!éÃçKèRé)îÆøœNDóó‘Ç Ú¨ù×ôäôÍö^ø=ú€þ!` Þ·þ¿û¾úvø›õö üÊn bdÄ2 èþ8ôÕíÂë”ëPì¿ï_øË®¿á÷’ D…ú’òšð%òµóÃõ©úR* $ tv9þÏùFôõñYõ>ý{œ à I„á @üöíðåì=éÇçLìyöšÇ #×}³Œwcý¥ùùø øTùxþ¾VÞý©û\øGóÚïò­ùiíô þ"l99šûÙó®íè¢äŠæBïûOK c?“sû ’û[÷2ôMñ*ñ¥õýõu-ˆ3ûfõŒóôöOýò!7 LÑ­z úÍü¾öIðê÷çŽìJõìýku »1ÿ Jnýêùº÷}õƒô÷úþ~¯  ¬\ý™ôïŒï(ô9ùàý:¾ ¨Äbw ´Õÿ_÷.îÍç§çqíNõ"ük ãIùý'øló¤ò°öºüÞÿdÒ–lØúoõôì÷cüÚÿöú ÂËËÉV(ùïYæ»ãûçkï÷›þO <ã’ ùáÿ.ùßòßïDòø?þ¥zÙW  Ý2ûŸöö÷˜÷ùBÿÖd0=Ø > _Mú{ðLê!êîÈò‘÷þ6@€)­ ¹Æ‘ù˜ôkô:øµülÿ`:7ëùtô–ò-óYôöœü£ºÀæJX­ ›œö¨ë¶æ¸æÈè0ì|òÛü #OrHC Ð×øîôäõ×øØú¯ü2ÃxŸåÿTú¤÷ñö'öœõø±þ}GO³C³ŠýbóUí,ì>íæîÉò1û\ý™µ² 8ð÷ò8ñ›óöœùsþ;Þ “ A`Îü‰ù6ö–ò§ñ4öæþž« VDCÔ þeõðêì­ê»êoï'ùïA ~ñí= +úp÷ø÷Æø`ùøûJÜ' ŸÃßýNû9øZôXòõFü¹D yœ Á ¹÷ÃïYëèzæËéó5ÿ™ Vta¤R 3ù<õó”ñxò“÷Bÿ =h1ÐþYúºõêôù~ÿ" ¬±r= Õÿføµò6í¹èðçíæö¿¦i œeA- ç^ý:úøÇö”önúoåB srÊøþ¦øÁñ"îÌï+õxûi=S­»&` oüôÂëEæìæ€í€öÐþ ©Ø#= ®~ü4ø½ôëô£ùÅÿ3¤¹0ý÷3ò òöBû^6  ¹Ëü7̾ÿ¹÷æîèWæëêþòîúÊ uSš¶ñXü™ö§ñqðtô ûVÂ{ õTÕønôô¬õª÷ãú[ ™d% Ößùôï›êë²ïgõSû?e –Lµ• crÝüÚöùòêóßø0þ"†Iø0FùÉóÒòpô×öú.£ |Ï ª`ÄZþòfèšänæ¾êãï.÷Eò `‰–² ¤³ýÆöô´õEù+ü#þþ;!‹ÿúl÷÷L÷ä÷û.š @×ä‰ E}ùTïÚézé¤ëîîeôQý=œ²~ 2(øóöód÷äú¾ýk‹ ýüCýSø{õ4óŽñ¬òdø”o #$ +³›û{ò¿íðëòêùëzñûØ Á·ÀŠ ¢±ÿíùløÏùŠû¸üËþ³ø¨ôÿôú™÷ÎôòCñêôðüºH ],±˜ã „ÿ"õÃî¥ëçéêIî÷7¸ ì?ÅßKÎûöôzóNó!õgúci*}c+ÿlühøýôþôqù=R ±|½Ñ]ÛýzöÎñîëœë…ñû% ½ }È?$¬ÿãù•÷áöfö÷ûúå« ®n\ˆýøeòØï{ò¸øvÿ°" ÝÄqý_JþÕöìïaé¸å¨ç@ï+ùÓóGþi úNÿüWøUõËõcú"·ñÚÿþûöÓòËóŒøxþà ¸­>ðë CûCôìæ¼åáê€ó:ü¯® 4ùg Žæÿ¶û­÷ô‘óøÿ• C2[œ¯ütõ¯ñ@òëôøžüª PWÍ— @ÿþÿöÿîtêUë‚ð÷öý¿0 *èŸË ¡É­ü øFõ÷Šü!ï.ÂÞüµõñœðóXöªúÓ| »› Jàû ñÃè0æÙèRî»ô^üªÞšÿ|ï 2Eÿú‡ô?òõúÒýbaÓLzþôø›öæö ÷åø¹üá '„ö ¶ðöî¢éXê$îómùB 8n#ñp ÈFýÅõ½ñæòY÷áûÿö—2ÎR°ú öô ó®òõ4ü^Ft[¦>)LøCïàêÒéwê=í¡óDý¾ ÁÞ9± *ßþ0ùÞ÷ú×ü þcGN´ "ý)ø|õàó¦òóøBn fî $güÔñ“ë1é½èêyïGù~# šNsÆ ëeúšõ×ôþõy÷Ýù`þM@øZü~ù·õ°ò`óâøÎŒï 1 ÈÀëüØôŽð¹íìíªó÷üo’ ( â%ò ýí÷óöø8ùû>ÿKg ‚ oûþ†úFõsðóîpò­ùh‚Ñ )Фž RÏùßò¬íeéØçšë4ô*þd_ _N’†5À_üúÊ÷úõ©öëúUGË·»þ´ü_ùõò‡ô^úÇÇ °¦ÖÓiÿ´÷/ñFë`ç?è×îpø?í¸ î>NÛ z©üyùÏöƒô×ô0ùåÿWZرòòÿ¡ùÑóñzóÈ÷Vü@ð¥4^L aÇûŽô‰íÕéŽëRñ0øvþŽI ì3Cç¿ÿÓüiùL÷ùrþÊùt#Aÿ[ùÀòïð*ôùšþ$5_84 oDù§ïè æê+ð¯öÆý6}=¡é UØeÿÜù/õ]ô$øèý;:‹_ý¤÷ŠõLöö÷çùÞýç— HQ· ’¯ýõƒíYê$ì¹ðWö®ühæ  x> x©ÐûðõòòäôPúvÿ¾JÎ ŸN!ù£ô0óó}ó†ö´ý4jb~G5 ïÿ™õ·ícêÊêí@ñGøÒ öÉý« Í Æ þÀøv÷æùUý ÿ+gºpûiö…ôOôwôüõbûg_ ÏB‚q» þ§øÈîƒé\è¬é*í¼óžýœÂBcñð4 ýäù4õõG÷‰ùü¾ÿÃŒôüäø­ö6ô˜ò¥ôOûMâ ,iùO=3UûÿóûïÑíýì'ï»õìþÒ1 œ È @ c :#ü¡÷#÷cù?ü ÿÀw   9pdû4÷+ó¤ïJï=ôãüxÎ gR‘ü aÙøòí›é)éˆípökëž „2 yBþ"úàøløføVúšþQàìëÿ¤ü[ùQõóõ8ûÇë, cV,:Åübõíï€ë)épëæòüÊŽ È#s‹5ÿ‘ùåöÉõˆõ^÷Yü4‰ Ї… ÿ9ù¨ó«ñYô›ùÿ)ß ûGh SúýŽ÷ ñ±ë é¶ìèó¿û#åß r劋uÿ;ý£ú@ù&û›ÿí›l1Ñÿ?üÀö+ñ¨î¶ðÿõ\ü• ©H*«>þ†õóìçšæ¥ë&ó£úï€ Ÿoº aKþú²öŸönú®ÿ-C¢é«´ÿ¬ù“ô9ó2õGøÉû«Ä3çÊ^ ¢­üµôîmë«íóòžøFþ"¥ å0å ñô ÿÎú‘ö"õû÷lý…ƒú¨ØÍüŸõwñÉð+ò ôãøOí õ»ÖCþÚôëí°ëíðnôÂúùó IÒØ ±w¦û†÷7÷Œú±þKêòŠ“0ûŸö[õËõ¨öúøoþ ¨`è¬ÿ 8ÿõÛìßè5éì†ðc÷; oÍKï \ÜþÑ÷zô_õ†øÁû‰þ἞p3ûøföõ¡ôC÷.þûÏ Ic˜¶ Ÿ?÷µð¹íáì³í7ñøîÌç Ú i DìÙüòøèø—ûŒþêÞy¡ &–üÊ÷¹ô÷ñÞïéð®öÐÿÑ+ð@‘îfþCõï^ëBéíé(ïYø9¼ 5µÎž à|þûFú’úCûòü_TóÂþûyøÍõíò¤ñsô‡û²% ±7b\¨ ´àû`õÁð5íéëÓîö?ÿßO Ö kïö ûŠü•÷ãõ3öo÷DúsÿŽ U Ä ¦]üÂöÙñ—ð ônúðh˜ ½µí¾ ä¨üöñ—ì¥ëÂï=÷Äþ”" : þwÕ T(ÿJü²ú²ùÕùHüÏÔçR‹þ$û„öÜñßï–òéøóÿ]´ ±ÿè| ½¼ùæñ¾êÊæ,èuîÕöpþÿ„ EºÛ ¨ÿÑûCøöõãö-ûUÑ垦Ãþ1ùÓô ôÕöAûÏÿª– xk³~ ú\ÿrø ñë§éJí¨ó%ú#‚ÿ ]1¾ ~Þþdû¡øZø©ûV">œ“áÿìø$ò‡îïò2öåûÃÅ %3£]à Šfû-òì®êZí±ñ~ö¬ü‡¡ { îïRü`ù3úËý}«š[¦þ¢÷3ó%òŠóöÛùäÿéilRgÈ ,ýÜó¦ìêßëèïõžû#ñ Å•}, ›ºûWösôŸö úþÀÝê¢v‰þâø°õ‘ô!ôÒôbø-ÿWí 4Æ«x :œþLöâðïœï~ñ-õ¾ûù· ž ß x Ùmbÿ ú1÷+øeû¦þ+Êâ ŒöÀú[öô»òkòÎô.û.z Þ5TÏ ‘âù1ñøë—éLé¨ë´ñýúÒ ´ÛžUY ¦Ñüú7ú ûêûšýÛ°¨ÔüêøÊö&õ}ó®ó±÷ÿG† Y´Xˆl Þ øÚñîýëßëzï÷8¢ã À N )©LûÇ÷‡÷ùDûVþó@V 1 åü»ü•øìó*ð ð¡ôëûúÚgòï _Hú ô©ïìõëqðøàÿ“j h Ù –ÿþ¼ü[üTüýÛÿm…TÜÿçû0ø¾ó—ïwîæñÏø(9 öžŸ¥Íþ¬÷;ñ¯ë-é×ëïòiûÔ»¢ 4¦ç UÓ üùÎö öä÷–üvá¼D4|ýQø3ô¸ó ÷üëÕ] ZW±£ îÑü›öAðµë…ë6ðl÷Qþr t ~€ ½ÿlü¥ùÆ÷}øYüªŸ¿Â3ýÞöçð;îÄïKôüùrOÁá7é"yÖÜ÷ïËé×éäíPóóø=ÿf› *p ‚ ªWÀþ+ûRù´úŸþf6ð,®Èûö>òòÀô¶ø¨ý= µ² ¢ù vú/ñMêpècë­ðköÞü­c  ¢ / ã,ðú÷ëöHúêþ|²~ß1uücö×òæñ”ò®ô=ù ñ@Öä ºý¦ô¥ïÒî‰ðTóH÷Dý›… Ž  9_üý@ù·÷ùùaþ@½ÒÀ Üÿùfô/ò”ñ`òÈõ€ü-û ¿]Ý2= ÉöÅîàêê*ìÅï<ö\ÿÝFò< ½ÿqú¥øÃùœûýÐþ¿ÂP&üÛ÷jõ ô“óÙô|ùð£CT•f¦ý+õðï¿í„í(ï ó;ûî )ˆp ^Øÿ¼ùªö$÷fùÊû²þåxÏ #·ýaù½õNò_ðò÷÷ùÿ_ r—»Y'êþD÷ßñùí¡ëPìñæøËªD x H   )Åþîü]ýìý¼þ­^šj"ý¸ø1õÀñúî+ïÍóûµ¨ †gЩÃ|ÎüÎõð‘ëþéæìîósüº à ëVI öþýKú²øøiøïúàÿZŽ7«ÉÂÿ«û¾ö;ócó=÷½üH ¶Ø{þôÖú;õéïpìíòRùKÔ? ¡ ÁR þ8ýßúÁùyùû[ÿïý³ ›_—µû˜õðþí<ðZõoûúb äÔæZ® ͵üýôôí5êkë•ð÷‰ýì' ½Äô Bꘇýšú<ùÒúÉþÆŸ3éa»þNúHõ/ò¶ò=öûtÑø °\n” ìçþðöÔîPé¶èÀì$óòùöcgZ0 <ÿþ|út÷¼÷`û-»YÓ‘±FÿòøKó€ðÅð÷ò öLü2£ £rÏqÎ ,ºûºó ï¼îIñ×ô/ùéþK ^ } q ¯ýãù4ùÙû^e ¢üä Çü-ö¨ñðÜðZó!ø¼ÿܪépn% íÿØõ$î¿ê#ë¹íôñ_øÄäù ;® =>xýXùºøüúíý98ƒE·™üä÷õÜóçóèõÆúž ã3aØØ ÄØûÜóCï>îyïIòK÷”þv2 >Y  Óéµüx÷”õI÷ÚúqþÝÌ‘  »{—ýÂø'õ€ò¥ñ2ôfú\ ŠžàÙ _ûúlóÂîzì#ìfî ô)üš ’ ë Ù Ÿ ë[šýÙüêý%ÿQOÏuñOûœöó{ðBïüð‡ö¯þëŠ ˆÜyÁ ăøºñUíñê\ë‘ï÷Äÿ ä Íþ‡Ï 6ýùù@ù¦ù¦úýbÛß‹¸ÿøûÖ÷³ó€ñóù÷Pþ`Û öÑiƒ^ŠËù`ôð¼íÀî•óšúNd a ¯  ÓTÿáûÔúûùû!þ){ ] 1¶ÓýAøWòÌíÖì$ðBö0ýYó eïâi ¦Dû+ôYîÎë¡íõò¦ù¡Š · ¤  íE$ýû‹ùKù–û i“&Eß­þ5úõó(ôøý£Ñޏ ¸oû5ô»íàédêïôõýª ÑÊ«Š ÑüÚø÷.øSüÇÍ·†ÇéþµødóñéñÈôëøÉþ‚WyEZ‚ ··ÿÂ÷ÚðEí¹íñÛõTû—Ú Ì x ‰ýøú€úýxo‹Øç¢Gúêó,ð˜ï|ñ,õçúñ* µ0{ë kü”ò ëéTêîóßúg u.B “×Þý„ú@ú¼ü»j¤ì‚ÿµù¹ôòlñgòRõû ›¢ô„ &®ûLô*ð‰ïWñ¿ôïùàâd I | ‚æZûãöÒõ9ø…üóÜ8Œ ‘ T˜uûsöÝò·ð½ðô ûʃ ‰oT÷ ¤†úBóïí î/ñD÷ ÿ„ 2 T U €¨sþ$ûÓúŸüóþ m#Òû)÷Èó…ñÜð"óù4\ —t5…IX”þÁõŠï-ìKë0íƒò®úDÎ ˜ >*Ç ŸÆØúÔ÷’÷ÂøÔú þ]m=õ˜­ÿ´û£÷$ôÖòõ«úœèõ Ú$k °.ýøõ¬ð9í2ì’îOô½ûŒc… n z ® œrÿ]üáûöü¥þ'å̹ u ŠfúúYõàïLì ì'ñUø9ÍÒ£” F6Øÿ*øñÊìIëöíëóçúI± Ä n Æ qÜÿ7ýùû{û üšþˆWp1ü"÷·òìðÚò§÷yýXn XkÊúK ¾wúÀóTîÊëEíTò/ùj = k~òüú_ø"øIúàþ&ê9 ƒnÏ;ýŸömñ˜ï#ñÍôµùàÿDlòaYQ -<þ'÷‡ñ ïuðMô1ùþB ª h  pwtý û}ùÙù¸ü221CW¶þ¯ø9óð7ñcôóøÿÐQtR@p +î÷tïêÝèNëðdöúýÊ ³Ó ûÜ€TüÅù úÓüW†#¸ïý:øéó@òÙò÷ô«ø‘þG· m€Àú D©_ø§ñXîlîÆðÁôuúr ‹ Y R,ÿüú/ø+øûžÿoá ç n èSþË÷ó’ðàï@ñ¯õGý=ó ¯]˜Ië '?øƒñØíÐìî¯ñ øÆÿ`( F Ï T ˜š’þ[üÊü ÿÎY™(ù µÿ»ùÝô¡ñæïõïÆòëøY˜ •ܾP ‡yü¶ôÅï–íµíˆð„öÁþÓe Á ï„ý…øjö÷]ùyü^¸ÆwKÌýÊù@ö†óèò¦õuû…Ù tŒ×¹ 6uû3õéð…înîŠñÏ÷\ÿ¦‰ y  ²€~ýµúƒúøûBþe4‘­ £6ýýÍøÈóvïFíÁî2ôübÆ à!CK ä[üõ.ïŠëbëLï*ö§ýï  É ¬ žEÊþAüAû7û\ü8ÿ çIZIáý úÃõ@ò|ñkô)ú÷—š ‰.0ʽÿ)ø•ñ´ìÞêíÚòúº1€ O } c ¥ÿüEúâùû.þÙœ Ÿ °‰î¼úôNï"î™ðXõCû| ñH© €ü¨õ§ðï)ñ¦õÚúÔÿ’Ã& ¥æþ{ü!ûÜúrü.Æ4Q oGרýF÷Îñrï­ðxôÁùIähŠžÈY Z?þ¾õzî~êÇêˆî'ô°ú×ú…ÈA1 xþ×ú[ù{úÎý©mÎ:t—ý¦÷XóññóÚõú7… Å 6 +¨ýöÁðñîfððó«øpþòÈ ú ¥ ‘ Kà¬ýùùÑ÷eø²û9B ¤ãæTûõ?ñ ðòðéóuùŒq •dúCÅzþ£õ|ï¼ì§ì¯îÿò—ù# ¨ ˆ wwÁkþÞü¶ý1­DýþöTòðÒï[ñdõZü, µ!Ùú ŒrúBó%ï×íÀîúñÜ÷Ÿÿòª ? t  .ÁûøJ÷ùü¼ÿ¸§J ' Ê/üÙ÷”ô”ò¿òö]üÅ' ™1¬=Š Á&úŽô,ñ„ïòïLó_ù`  Ä †ôÿ!ü•ú~ûíýól;2 ¡ ʃoý×÷ó^ïÉí½ïmõfý˜• ÒéÜÀG žÖøÈò‚î\ìoí_òúù¬• Þ B pãýUû§úûŸü¶ÿ4MäU©üðøPõ¾ò°òöüw ïå?ø !$ü\õðïGì¥ëúî¢õ‚ýa\ ¼ q‹ « çþ“û8úCú¾û0ÿ"“ƒ u Ný>÷tñÇíÎíqñk÷þë ã|ú.³°«úCô¼ï­îñ¶öIü;€èŽ ƒ Æ•þ¶üÈûôûñýË3  ÖšvÿúBô©ï@î›ð¾õAüžr s«Ü&Ü X,ýâôî­ê‘ëüï.ö¬üöÍù · iÌìþåûÑù ù)üžç€?µýùöÇòœñ óXö)ûr„ƒmÜÑ & !üJõ•ð•ïòrö{ûâSÈ × Ÿ ÿþû2øL÷+ù‘ýÜE  ” á–ÀúŠôåðPðòØõü1O 0¦â¬> yZúEòIíêë{í ñ*öÏü¿ Š ~ › уçÍý¯ü,þ!îÁ¡¨FŠ¥û”õzññï ðJó*ø`ÿÉ9]üi­ÿÀö&ð2ígíÌïMôéú¥™ å Ë ·‚”û‡øRø¦ú#þ‡®œ: íñý'øôÉññ»ò{÷¹þ„ð ý½• Ó.ùÍóæðð8ñÄô¦ú-"¡ ðš§þ§û+ûý;“ÒÁ « 2 d,úPôëïIí%íXð÷Öÿ:Ý“ùTgtÿÛ÷ˆò$ïèíÍï õSüz¦l b ju^þÓú’ù%úµû þzSÌ”Ê#ü^ø'õ*óÊó¯÷åýÄÚ ‚ N¯ù»ó¨ï…íïíÑñ¢ø!9T Ð ¸ <|ºû\ùùDúÛüêÞ8  { ›·Hü¢ö¾ñï¸ïúó[úJ)„6oi &ýíö‘ñNî‚î?ò5øpþ’”„ o ‹ °—¨þDýñükýZÿüÚíL`.‚üt÷bòêîÅî&òøeÿc~—Bú… P0ùÄñ ì é ë'ñøîþ>{ ¸ # ŠD ÿžü5û°û}þãþêz¢£ÿ^ùÆóðïòvöü7 Û_CV  ûRõJñ¸ðuóIø–ýŽ) r 9 ˆÆü úqø_øû+šq þ | TmlþG÷cñmîîTñföwý÷@á•öêÞ 2Æù@òÉíGí¾ïóóaùšÿš * L9ÿ¹ýjû4û}ýaí×m Rû¢õÉñ¿ð ò5õ–úý 9W9x ®@ü(ôªîÊìVîVòÒ÷sþ¤‰ cü 4 cyýûøƒöR÷¸úøþÜðáH¼±üU÷Àóòjò%õ’ú#Ð `;Ó  „ý^õoð‚îÓî,ñ´õÁûú¹à¼h6õuþ*ü9üÅþ£žs  U ¸þ÷{ñ î”ì°íVò!ú,g f¾—g| éû9ô\ï7í—í—ðjöØý—< §  pÊúýûµú,üvþ,ÊF ÎýâøÌôéñÔð\ò÷.þ„s ÏeVëW—øXó5ð ï‰ðîôWûY3  H c”cý‡ù%øLùülÿ¤Xæ ¶ X q]ÿ[ùÈó2ï=íï>ô5û| ¬œPÞy 0wûóõÿñðñvõ„û5¸ç}  jí{þØûûkûÂü=ÿ§=Mw)Ãÿòúöåñ‘ïQð£ôlûÈß e?ål>ýØõï6ëkêí±óûÊN“ ¸ ¨ ÎØaÿeüãúrúyû¨þ!úÌ<®íMýê÷üòuð$ñ„ô½ùêÿnÎ ™âM+ è`þø¿òmï›ï*óVø²ýË$ü j î};ÿYü¤úúû0þðî u § 9 ‡úãóÈîÌìlî³òÅø~ ˜qlí (Rÿ÷Tð¯ì¶ìÖï·ô<ú)Ñ ( _sûý¢üCýShº\ ! Q*ÿéø:óäïOï3ñ?õûY ûhiì –ê“ú·óAï–î6ñºõjûÅÞt !b nö~ÿû«÷röøHüC9ÔP  1èúrõ"òñòFõFûñQ ¦ñiÍ# F€ûáôÔðËï\ñ¥ôLù(ÿÞ~e 6ÖúÿÉü¦ú%û3þFôˆ ‰ DVªû]õÀð-îðímðäõþ4¹\>l¨ `kø~ñÁíÔìvîÀò+ùwø F ž [éü3úú:ü ÿ˜1º×ÙûûöÇóîñËñ„ô[úëX jz-» o&þÙö©ñïÏîãðzõéû/“Âÿ™×ÏJüGù%ùtûÿ4Pþ f  X iöüÈöañªí°ìpïÁõ§ý| ‡Wíäý3€ùiôñðòtö3ü¢€Ôç7cWœýû¸ûyýÃÿ…äÓÒ (Ãþ|ù´ô¨ð«î3ð/õFüן êËæ ÂÏúô/ïŽìí?ñå÷àþè‹ ^ ö ÷ ~ ºüfúÀù™úêü…á ¯”W;üãöoòEð„ñ¾õQû8H× ò =ÓÒûYöò}ðò^öüdÊK S ¾ s¾@þAû"úgúåûÿ…Ÿî Å 6ý¶ý’÷—ñ¾íaígð÷õýͽ ¢Yµpé ;Aü¸ôÚîOìí€ñŒö0üñçø , ½c’gÿÑýOýfþ+àÖÆÏk:ü|öŸñ3ïðkó]ø¬þ . U< $=îøµò4ïïòÝöHüý‰S ó y@ý8ú&øøÝúŒÿlFm ³  ;8ÿœøló¢ðSð_ò‹ö¿ü}ø üº–°òªú|ô"ñÒðœòæõ~úÄÿyŒãeàýÈûû¬üjæ,  —Üóú‰ô4ðxîøîêñº÷¾ÿ.îd)œ ¿zý¹õ(ðµíRîOñ:öèü4ú â  CÌÿªû˜ùJúÌüìÿäGÊ·-†ÿuúWö•ófò1ókö@ü´¢ qÓÌ80 'ZûÎôØðtïOðyó·øÿ+! = M > (ü²ùÓù„üu_ = ÂÿGùÏóŸï$í§íàñùN ð»+w_ !|þÎ÷ókð*ð©ò°÷±ýÛX$vuò1ºý7üÝüáþ~=ÚÈ¿Ùß`ûGööñïXîüð÷5ÿ*å þ»IOL í úÖócïíàîGó ù0X•, æ Yÿ/þ{ú ùÔùü7ÿ€ÿ ® ˆ q‘cûö¥ñðêñ–ö¯üäœ| s x Ê„¡úÑõ”òºñùóªø þÇdŸG ö‚ÏÿÀû’ù\ùÒú¯ýž" Ð © U©ýäö[ñýíFîJò‡ø–ÿôlÁóèVÁøò¤íºì;ïôÖùeÿ”Öó I r¯]BþFý[ýøþŽ®?FFDûÄõlñÜïxñ¥õLûš7^J–u okü¸õlð%îžïÞóTù%ÿÓ¬ © ¿ Î @È ý‡úlù?ú(ý™ øí  PŠPûêô#ðlî¼ïAóŸøªÿ‘!(Ä à¬lùæóBññåóL÷ŠûwÕ £e•)ÿ`ýAü…üãþâ!f û § v ,Èþ‡÷iñÍíí5ïŸó$ú_Î De+° ’ü,õ‚ð5ï”ðêóæøÿY Ó ª è}Ÿ¿üåùùÃú,þÖìHpˆA4ÿÂù€õ2ó¶òô×÷Óýô– ¯³  èùUôfñ-ñþò`ö`ûXz4 0 †Éüˆù6ø¥ù2ý©à ‰ 9 í ²ÿ½ø˜ó&ðÜîGðÞôü ¥kEa µ#úZôÖð‰ï•ðôŸùôÿ>=+ ÐHþÐüÍý¥,¶¬³þ ù^ôñ&ï»ï‰ó+úG' W3t-z þ¯ö8ñ%îí×ïõâûi0¹ = + €]þ!û‡úÞû€þïáª Õ  ri÷üœ÷ÖòŠïúîëñ˜÷WþóÎ # ëÎ Ù©ÿ.úÑõ*óüòyõú]ÿºtºŸÕ}|þ2ûåùÈúýOd±Î ] ë 0ÿ‘ùŸó›îAì¥í†ò¥ùx Ìâ\ç Ùfÿoø·òHï.ïPòW÷ËüÁ¯D  De]ý¸û„û°ü0ÿÕ¾? Q J÷Ãÿâúáõòìð.óÖ÷›ýØ »îì ¢%úBôBðRï¿ñµö¢ü; ¥ $ ô fŽÞýyú¦øxøHúþým ] G`4ú9ôJð‡ï×ñjö\üT¦ ¤œ&é¾ Jý9öeñÝïEñoôøý„5`cÿˆýý)þÜÒÊN Í k BaüZõÕï;íôíXñÒöüý  ç î®æø,òqî6îÃðôôBúfD@ u  #¥-ý-ûpûÔýXÓXŠR\;…ü¸öcòfðåðŒó'ø›þòV U€~ 6iù—ô¬ò6óoõõøŽý›µfjÄxöý»ú¥øªø;û³ÿ—× Í 7 Î ÙüÎõâð7îùíƒðÛõIýN |<lÍ žù*ôâñÒñ›óc÷ßü¡÷ÿßTâŸþ½û†û;ýñÿÍ]gEèý‚ýü÷†óÊððÙñRö>ý&L ƒ.  3 û„ôtðÒîŽï´òøÏþôÖ1 ¥ ˆÿŠû;ùhù€ûŽþ;RÙ h  +Ù{û¡ö³òšðRñõûù_q ©D¸~ ß_ü%÷ óÛñCò=õ1ú•ÿæaˆ¬ïý”ûLûëüºÿÒp ¡ ô B­lüJöàð íì»î±ôiüŽ- KÕæ9¼ –üøõýðîï™òø°ýP¨¬Û¡6ÿýŒü^ý&ÿç| N j $¯Êý“ø ó[ðþïÀòÔ÷þ]Z ôÃ1á ÿ»þíø'ôIñSñrô§ùuÿ¦sŽ ¸ ˜tŸÿˆû ùXødùü…Ã à  ÉJþøEò¿î¢îñ†öçü#/ ƒ»~´ sA´ûøõfòÉñøóÔ÷+üi|ë^vUÿ ýçûëûbý¨™è Ì –ò úûóïîêïJôUú˜f ä  Ô .ý öCðÌíÑîfò†÷`ý743 v \ ô!„þ¼ûeúûÕýº;^éá;ðÿnúõzñŸð8òäõpû`• _E"°c S4þ—÷(ó»ñìò®õqùþ“Ê»n¨wÿüúù>ú¸ý¨À þ Je ðHÁùó î í5îòiøŠ“¼(ÈÚp ¸äý÷Èò+ñ½ñ(ô9ø{ý¶P›}iýüïü­ÿ6Ü ’ .•~üyö÷ñ–ïŒïò÷þß’ æ“ÄPL®1ù¥óððÀðòaöþû&#Ì ü OVE¾üDùøwùü~š„ƒ a R Ëÿÿ'ú<õÞñðóñ7öqü" E t@Q Ô('úìõ­óMóÜôuøœý׃$½ kåüàú5ûhýmÆC4 m ø ¾Áÿiù¤óïªì_íjñ4øfpKJŽFv ñ’ùðó@ðíîƒðÊôŠú'r*–r#þhütüÆýéÿÎP^ b »þ'þúöò0ð=ñ6õ û¨/Á c)4 —ýŽ÷ó|ñòJõ‹ú(³©ìJ³“&ýúùÓùôûoÿ& » ™ ~ Pê©û>õð°í˜îpòAø+ÿ—o r{ 'åÝúØõòòÏòõìøýΖ àĸÿý¦û®ûéüCÿæ{„ b pÿ4ùJófïÃî=ñïõ/ü^ˆ 1ÑÊÒ hfú*ôüïÚîøðõ/ûbA â ÷ éÐñÿéüèúbúÞû<ÿ„*óºöÀþþ_ù\ôiñ3ñlów÷ýø¹ =² âþ™ûöìòªòÊô|øóü{^§|>Ýþü/úÍùTûùþ ç= w z c CvýCöð‘ínííïöô8ü©q ©¥Ý¾W &û0õñÑðRò…õ*úvÿÈÊÏjÖÿ¼ý ýIþ%ªœ2 H ÏwKÿ,ù†ó´ïqîµïZóiùGI ¾ïÖ Êÿ øÀóªñ òtôŽøÙý,ë8\ÀÚý'úÇ÷Ë÷lúÀþŽƒ f  Õjþ_øªóÕð^ð¥òœ÷_þG» '’¼Q µ0ÿƒùàõUô„ôƒöWúÿcûœ¿áŸýÆúÜùLûŠþ—• d Î } «Sÿ²øùòïfíËî}óµúÜZ ”l+¨ óý‚öò÷ï4ðóøþ,žc’þÌÖÿšüVûü þ¿eÐ @ 8((ÿ úlõ%ò4ñó¨÷ãýXö 4z ¢ ÇÚÿˆùÚô òIñóP÷ý¢Í ¬ ‘ˆ âüRú÷ùzû=þïW Õ Y 8 2 þ‹÷•ñní`ìÐîùóÏú[¶ Þ³6DÝ nÿ[ùõòòdóBöZúQþàîFíÀþTü«û›üŠþ^+ K % E EýÛû†õQð¤í<îáñ£÷þ÷ò Ý.Š &ŽùôÜð•ð9óé÷jý’Â~  $L‹ü}úÕùŽúÿü&×] » ð \Eåýø-óÖðJñô‰ø}þ3t ±ÚA U»ú^ö/ôŸôC÷û0ÿÒáų·þ>ûùUøùžû“¦ Å ^¼  d]üŒõ¢ð¢î†ïÇò(ømÿe· ùÑþÛ÷®ò9ð„ðóO÷iü¤ñCJ™}HÿÊýý÷þœR{ óÁásý\÷Pò—ïlïñåõMü” íbX6 küÂõÝñÛðKòœõjúðÿæ ¿8NÝeýtúóø¢ùœü3 ‘ 2 † V:‡ú¹ôÔðï²ïóù„‘Å •qd hûýÉø›õtô)õž÷ŒûÇŽvøcÿÔü û÷úýï[] 7 Y K »Ù»ûùô·ïšìì‹î"ô üÈ3 Z   7 ³Pü—öóÉñÏòGöjûµºÒ-(ÑJ†üéùZùâúëý¡`©¨  ôGþ,ùõkòòfôiùÓÿ CnAc dÔý=øpô¤òöò–õSúñÿÁ²Ä9núýú2ø¶øû¾þ0Èy # Qá²ü†öMñ-îîJñ;÷€þ¶ ÛB‡£|§sûvöóòŸóM÷¾û«ÿ}FæâMBþ4üåû>ý±ÿá›, U  } kÿ]ù«ókïéíÆïŒô$ûka %Ïdw¹ •_üö‡ñSïðºóù¤þe. L -ÿSü6û†û8ýd—«9 n n ¼›ú‡ô/ð”îûïÎó>ù¦ÿT džg& ÑOÿLú®öLõ_öOù ýŽW-ƒÇJZü_ù ø™øú þ ‘þ ¤× vùfò0î'íïEósù耬BQ Qý^÷Kóãñ$óQö‹ú4ÿ˜Ù!X+‘þÌüúûüµþF ªp ûºü9öÆñ×ï–ðŠóVøÌþ¬ ö9–Ÿ ûVÄù¸ô0ò^ò×ôéøËýÀÑçk·ÕÔýzú5ø‚÷÷ø­ü´šQ U a ' …(ÿ»øØó#ñðZòŠöçü@¹ íˆÁ¯ 9ûCö»óVó¿ôÂ÷æû?¡.Äø¬pþ§üÔûŸüAÿQµ3  /  `½ÿnøòêí9ì í²ð<÷±ÿ+òwÖ0ƒ•ù‘ôÓñ[ñ(ó ÷9üLÙYlÞÚþümúÂúýÈÕy Ê ¯Òûºöó ñWñSôÍù†ÀZ ÿ Œ¬ b~üÊ÷úôôõ-øôüìÆŸõ#pÿ—ûÉøø‹ùý {Û Ø u, PÞúôVïÐì`íRñã÷†ÿ·‡ töt íÿ ú©ökônôãöûUÿ•x!}~|ÿsü ú¬úcüFÿèÅ ¦ å ±Æ!ý‘÷ÐòÆïWïò÷¼þå ‡«ÌÆ a%„ùEôÜðôïò öcüÄÙor }u@OýÅú úûwý*v Ý G ™WþmøHóëïcïåñÈö ý¤¾ ®x uÎYý»ø¡õËô}öíù«ý¾åÄÍzþûÎørøÌùªüö3= °‘Ñ ã 1:ý ö*ð÷ìífðúõý¦¼ ò8,E~Þ;û—õòsñqó÷Rûlÿ²kú/Vÿdý›üõüþ¼ÃZ Z Z úèÆúÌôŽð ïPðéóQùáÿ«k âl?ú ^EþµøÐôzóÜô6ø~üéåŰ&„ÿûQøööt÷-úâþoP | ¶ è É [”ý÷tòJð–ð*óï÷^þ.Þ P(Ž â ­ÆþsùÚõ‚ôJõ¯÷ûÿÒ‚DxªÿXýáû‹ûÖüóÿ8O* O ” Á¦Ìü»õ4ð4íÖìïÛóôúJ! æÔÞÍ Æeý1÷>óÓñ²ò„õÝùíþœs?½±¡ý+ûúåúžýqBRB œUþòø•ôòeñ÷ò÷=ý Ö[v c$Fûøö©ôPôÕõ ùkýâKz0Æüðù\øÑøˆûéÿù¾ u jÙP :øý÷`ñ’í;ìÿíüòGú/: ›ÓSËÁ †“þÊùqöÐôTõð÷Òû¤ÿQp1Ö›ÿóüÂúíùòú®ý~£z X ^ Û Õ!üö^òð3ðpó@ùJ s ðüO Ë ý{÷pó^ñ¹ñÀôßùšÿu« ´‹è¹þ<ûqù¤ù–ûñþ3“û T  „…õü}÷äòððó@ø€þ¦÷ à ;è & ïÿ`ûÐ÷Üõ0öÑøÄü¦}@pôýËúûøÿøÁúÿýnkÎ LD `5ŽùNó¥îÆìKîáò‡ù c ª" Ï,ÿ÷øôqñÇñ´ôýøgýToDCm™ýþbýùüÊýòÿO - ) Jìqý‡÷Iòÿîî ñÞõ,üž ¶Qòæ  g¥ý•øIõ˜ôö@údþü¤lßûø¼ö övødüæ£" Š«Œ D'6ûúôÕðiï¾ðxôúÂZ… Ib Í,þ>ù!ömõÑösù“üÀÿ…+Lÿ¶üûlú0û²ýÛÂÿ € ò ` ¼üEõ&ð¶íî,ñŽö¨ýS –Cl Æ[úCõ¨òºòûô³ø=ýìÖí±>×þØûÉù^ùûŸþß©c Ì ‡ z¯ý>øZôò¾ò+õµù´ÿßÛ Î |ê 5 ÙÜý–ø(õôûô˜÷dûÂÿц#²ßŽÿlüú2ùqúÙý˜y} Òü S}údóœî!ìSì•ï±õ{ýSæ u–ìkÆZ•üSøßõDõ†öcù+ýÂ!Õ =êþ üûÝúüÑÿÅŠ ] @ ­ ºrþGøLó ðöîŽðÿô–ûâs f:tÀs Õmüg÷@ô!ó5ôt÷2ü/!BlØåÿbûÈø%ø­ùïü2Ê ù ¨ Š 12ûÓõ¶ñ©ïeðþó•ùàÿ×È ËØ ÀÐ*ÿaûÀø°÷˜øMûßþ—c1þ¹úø÷ øçúÿ 2 E…ó _íþŒø óXïtîÔðöÙü— ­J¯ú 5¹†ûAö”òIñÈò€ö0û²ÿU¿œ±MZïý¯üÈü2þÑX² c Å 5Yèûö-òËï7ðuóÁøÿ{ W£… )™ÿwúhöCô®ôŒ÷Úû>ÛG$,2ÿ]û±ø¬÷jøûgÿÒü ‘ Âo ê  *þ|÷òñ¾î}îñúõSüD° K/E+ ®x"ýøüõÉõ™÷pú|ýBf\®–þü ûkûýMÂ{  ®ç ñ ™ÿ‡øò«íì”í¹ñÿ÷‰ÿ"p @ ê V2úÿõ\ô`õFøü Ùt#©šýþ±û/ùè÷}ø<û›ÿ\N f BN‘ü`÷ÒówòlóŒövûf j h , C6àünøôõÒõ§÷Äúrþ mµ+»ÿKüuùÃ÷Î÷ú€þò Í Ó½! ýÕøÉòÜîwíÜîó”ù#F¼ Üru *äþ˜ù/öïô–õÅ÷ûÛþ꺢Rþ7üöúQû‘ý45¢õ ä ó ±g;üŽödòFð€ðRó¢ø‚ÿp$ Ü3ñ 6mÿKùíôÈòÞòõÀøuýˆ’‹yþûZùÊù`üaØ { D« T ÉIþ øÜò]ïVî<ðÆôòúg$š 7^ó ¬ÁUþûKùýøSúüü¡æûfÿNüXù}÷Œ÷ºù¨ýˆ„ï çÓ  „û$õ:ðŠíØí^ñW÷sþ‡« Ö‚L kIÕú£ö=ôô0öú]þ)Èù‹”š‚ýMû¹úÎû0þ|CÐ3 Ž t U"ºúÅõò–ðÆñŒõûÆ… m¶A ÍŒ“ýˆùÔöö—÷ûJÿ?]í¬Ýuü¶ø‰öJöøwû<¦Œ ¥ - ëP ü:öºñÈïÖðyôëùMÀH Êh/ û¨ÿ´úìöõŽõß÷ùú þ£\¹œsÿ'ý«ûvû‡üÜþxß ¼ç äD¨üö‘ðeí-íôïõËû19 ˆ m 5;ýþ÷¡ôäó›õûøýî%øÆzýÒúFù+ùÌúBþô¢ À V Û Žýÿúõòuñ)óúöMüDʬ ' O § · nüÉø ÷’÷Öùéü#ç(„jäüùù øœ÷ñøhü•]a x ê‘ýeö¬ðTíÈì ïäó±ú#Æ€ ¼lå Ÿ2½ý€ù;÷ ÷šøGû‡þÈ)ÞÖªÿüºúßù«úiýq‰Ä® ò M ¥Y„úˆõ@òñGòèõ…û)„D ºÈz  BýÏ÷ôžóíôï÷ü¦’ùO°ØuÿüBù%øEù‚ü¬™ ^ b ð úFüZöòËïòïéò3ø’þÁØ : •³ ˜ ñõ´üÒùøù¿ú_ý0@å2 ýûúÌøÂ÷ªø¹ûB@Ý j GÕ¤ 'ÿlø¸òÏî~íDïôÒú3ã.qý² t6þ ù|õØó^ôàö”úˆþãsþ üÉú<ûrýÛ«cƒ / ž ¦ ÇþþWùˆô:ñGð*òböâûžÁ´ Ú ’ Ç c¥pü^ùà÷6øbúîýÉݘ¹*þçù·ö‚õö’ù þV›ô TéÄ ±Ž1úŽô­ðqï;ñzõû,Þ z`¾ xªþ új÷Ðö%øÇúÙý“€dö&—þDüðúûÀü¢ÿ]7 l k ÷ c‡BúcôæïïíüîÃòuøÿÒÉ ñ0X/ ËÓúÐöÐôZõøéûòÿ•,U¬ÿDüãùÖø\ùšûEÿ«Ùµ ‹ K &zýÂ÷»óÛñ‘ò{õöùÿR_ ” D~  ØFòûÑø¥÷yø¿ú’ý9[}ûÆžýŒú`øž÷tøûNÿÑS ¢ë­Ó ¸ñúÅóûîÑì‰íñöžýú9 "O Ê 8úçü'ùƒ÷×÷ùþûáþƒ pûþ©üÞúÞùúü€ÿæ ‚ | tÿÇùõOòÏñ•ó~÷ ý7ÓÊ Xe t ®hûU÷Eõƒõ­÷ûêþßð|¥ü¿ùØ÷¼÷üù1þA" El qY!û»õáñ3ðñGôyùŽÿ.s ß 6 ” d.ØþzûºùšùÚú%ýéÿ…${gýêú ù€øÞù=ýé©› N &„ ]b½û¯õñ‰îî”ñ-÷6þf‡ ³~³W âü€÷÷ôôêõçøÓüŸSy™yþÞûûü©þ2å( } : ¬ ÕžüëöÖò•ðÇð¤óøzþâ+ d ] P ô[†üþùùèù3üZÿàŽ9ñþ3ûÂ÷‡õfõ²÷áû]M ÐòD :Þý­÷vòkï_ï;ò;÷Qý† F "ON >ÎýZú[øø‹ùëûeþXX82þÞûìùHùgú'ý b›  è5ú ôûÿØù`ô~ð/ïêð*õÏúõéÁ …•þ dNýûøGöÆõr÷»ú¾þ…fñÊÔ†®ýGú>øøžù›üºDF ¿   o´_üV÷×ó¼ò"ôx÷ùû3 P ¯ â¼ýFú@ø2øàùzüIÿÃjÌ·I(ýUú›øsøúbýíï VdÛø 8WþG÷=ñ…íÞì ïuó‰ùmØ ·À„ » à®ÿ2û^øŽ÷…øŸúGýwŽ=Óþüû±ú£ûþ”‹ V »  ©Èü¨ö¥òÜð’ñôùÜþu Ó ¥$ Û ib ûKø!÷ø:úCý–aUVühù6÷šöþ÷^ûC²‘ †—= ð…ÿ"ùôìð"ð±ñqõËúÐD Ì « à ««æþIüBûŸûèüÏþéu_&ýpúWø=÷µ÷)úIþ?ü -6Ù >,ÐúGõwñðñ›ô/úîx oÑß ï ²þªùeöõ•õ´÷ûýþkWuEJÕþ`ü¯ú|úü9ÿÌ  ú ð¼bûÆö‡ó*òó8öÿú~–U I V  »‰ýlúðøùŽú5ý–¯…’Y#þÇúê÷”öx÷súâþøíû Cøð ÔŸ/úmôFðƒîšïmó)ù¥ÿàí š ' ‡ÏÈüëùø¢ø,úžüÿ‚ÙLÿHýfû úAú+ü‚ÿŽÅ£ HÖÞ ¦øÇü×öçñöîÄîXñ$ö7ü& x   Ns ýÎù(øVø_úºýb^Â(Šþ°úÄ÷¢öp÷÷ùÇý\Ô ˜ þ b G3ßú6ö=ó¸òšô>øîü¬ —  Ÿ-gêýRû'úúUüÜþ9¹_qýOú–÷\ö#÷¹ùµý¹ Ñ µ Ë w ´ýŠöjñÍîïòåööük= = ¼Å È pŠàü>ù`÷‚÷=ùâûÊþTŒ±“öýÁûŽúªú üÆþ[J„  µ ŠÙ¸úæõÀò ò¶ó8÷ü¶.v « h  0y—ý…ù÷­ö*øìúþ)ˆ™ýÏ—þ6û¦ø€÷øUúeþ’Ó qŠp 6 3aü*ö¤ñvï·ï'ò|ö0ü,$Y — ö Æw¤@þ/üŸû;ü¢ýlÿ@KñƒþÅûoù øø–ù½ü6=ª £p  ´3þ­÷‚ò”ïïüð2õ%ûÖ} ¡€K E(þ úÍ÷n÷”øàúûý3’jžƒÈþüìùÒøaù¸ûeÿ¨©¦ . Þ h µÿqú-ö”óâò)ôj÷)üI·¿ ” „0L÷üûú€ú\ûRýíG*,¯Wÿ°û[øö{õ ÷°ú“ÿÁx ú €Œ  ¨dþ{ø¹óÁð*ð3òöšüñvt Žf ð$œþ ûòøø¶øŸúýBÿoq„ÿþ]üÈú úÔú1ý¿ÛÔ î À  x²Äú’õÓñðÖð'ôdùlÿ2â Í ’ tµ÷þû†ø”÷Zø´úþ£*,·ô&Ñü·ùÅ÷¯÷ù¿üð–Þ Ì • ï =SçýžøSôúñònô’ø‰ýƒãó  0 ºg%þü?ûÏûý½ÿ„JÛg'þSû‚ø§ö„öRø×ûŒÖ 2+c æ‰Îúô ðîïò¾÷Õýí N ' ® ŒT‹üïùüøÖùüòþ}S)Âÿ§üvúšù)úþûùþÅœ‰ ¸ Ø <dµþÇùœõ5óó;õ ùÚý ×= € ‘ Þ ÐÓüÂùSøÚø÷úíýûpÚékÚüù<÷“ö¸÷›úÿKf  ºa Öø«ú1õ´ñ¤ðÛñõÚù}ÿù9 € Æ l ½'`Hý…ûDû6ü¼ýhÿÚ›@Ãÿwýû4ù~øù5ûÄþV× ã É ¡ Ÿ ³ûÐõŽñ°ï\ðNó$øYþãk ø /.H òÎâüKù“÷Ÿ÷ùwûGþä™Ó‘ZÿÒüú#ùù˜úÃý“c ê ¼ ‘ h ‘Üþ}ùuõ0óÝò…ôö÷•ünpìÔ=3³ÿý­ûÛû(ý*ÿ“âRA—£ý¬ùóöŠõöÁø&ý~Ë Ïh† = MÑüëöŠò;ðDðÅòs÷Xý<*‚ ô f å ðÙýJûÿùùùû$ýqÿ-¶¬ÿÊýÐûJúÓùßú…ý;9æ¬ ë ) I —÷þù õ(òZñÞòö©ûS[ ú è À óm6ý0úµøºø9úý޹¸ ù£yÿùûù‡÷ë÷úˆý¹² í ø º ·¬oûÑö†ó-ò+óTöäúåÓI è ’ ²/Ú&þcü½û?ü·ý‡ÿÎ6Œþ7ü¡ùj÷]ö ÷ËùÝýÀò¦ êè;" fæþtøûò‚ï¨îˆð¼ôbú>Ç H f X ‰xÿüÞù3ù3úbüôþ b“¹×ÿGýÝúiùYù¼úWý×Ù¬J ñ ‰ p2þeù‰õyó°óðõ±ùVþ#N à Ÿ ÕJ¥ÿ|üaú·ù¦úñüÓÿc Чgþ{úv÷ïõ:öEøîûãd` ÀÐ* / ùùèôÏññžòòõ–úÖÿ³4Ù « ùGùþšü”ûõûZý7ÿ÷*Œä#¯ýNû²ùIù=úƒüóÿ4s” Õ ÿ 7 ×`ÿ‰ùeôñ2ð®ñ;õlú…ƒI ï 6t  ²éÿ­ûÒøÍ÷ø”ú<ý Qz2ÿoü`úIùùLû™þÑk . . d ×åvü›÷<ôÊòOó õˆùhþ/Þúq sGCŸý†üÂüþÜÿÒjmM<þëúÿ÷ö±õ%÷€údÿÝÕ w 7ºï Õ[úâô6ñ·ï¥ðîóù8ÿ£ t w ‘ Ù è¯þÉûÃúÑúÔû€ý/ÿ1$ÿ^ý}ûÔùÊøóø·úòý|7 · — z P Œ ÿÇùªõGóÞò‹ô0øý _/ K ¦ S£vÿöûÌù(ùõùýûêþ+×­ç·ý]úÒ÷Ýöç÷Âú¾þ8‹õ ¹ b Ñ ~Q-ûÍöæóóFô~÷ûûÃ? , †˜5=ÿ0ýüÿûöü²þw‘“²þsüúør÷¨øœûÐÿ–? ' †•! ˜¬JüeöØñ^ï‡ïHòýöÄü«Ês & Þ è§ÖýþúsùbùÎúQýúÿœý\û7ú›úOüøþYý& ü ã Ѩû&÷ëó£ò„ó`ö™úlÿ/1¯ ? ê ¥U«ýüû˜û—üžþþêÂ^Ï"ÿ§û/ø¿õõ?ö1ùýÈX Á  ‡KþFø§ó>ñ.ñ7óýöäû Ð q ù ^N†ÿ„ý¦üý\þíÿ1Ô›pdþÑû{ù7øcøïù¹üÿ5 - î ìvÿqùÞô4òáñÅóz÷Šü@c ¬ Y ³_þú‘øSø«ùüùþŠRàö¾×ýûùmø!ùLûëþmÑ § _ L —¬müø0õ/ôúôu÷QûÖÿùK• 1þEü¦ûTüöý(®"Aþüú…ø?÷~÷rùýë ‘ N÷y Ú hóý±÷Éòôïfï,ñ-õæú3×ò . z é ½›|4ý-ûrúëúMüþ«ÿ€G"ÿlý›û/ú ùBúIü¬ÿâW % $ < „a¹ü®÷ô?òjò¨ôºøäým 7 W áT–ÿ™üöúÎúñû'þϧ ÙVÿrûPøZö)öî÷nû÷@ ? j b 2 bÝþ§ùŒõ ó‹òIôú÷¿ü’¬£5 " d‚næÿ6þtý§ý¹þGœJ˜ÿ<ýŠúøUööÄ÷1ûÖÿùÆ s PôA ‹¤•ûIöŠòïðÈñ õ úºÿ. Ë p ì šOÿ¼ûŒù¼ø}ù¥û†þ4´IÔ€ÿÔü«ú¼ùSúRü`ÿÿ›} ì y %V±ÿû ÷vôÅó0õtøßü‘Çðœ u x4–hþüôúû‡üâþOúyÌû+þÍúº÷èõöõì÷|ûC¯ß Éšðî óŒûÚõØñ)ðøðóónøŸýÃâ º © 5"zþ¾üAüýŒþ&@.Þÿ½ýCûRùžøjù™ûçþo4 b p d ‰Yüõöºò¢ð÷ð‰óØ÷>ýàÓ= ±  `eÈý&ûöùrúaü ÿ„j&ÿ û±ø÷Ýö?ø3û}ÿcÕé  ^ É —c<û"÷¶ô0ôvõPøFü›gêÚAqîKþÓüÚüþ2æÀxßýÿeüùµöæõÇöNùdýŽÁÒ  æ?úûTö`ò–ð ñ¿ófø;þ( M | µ . j2^þû,ú2úNû ýïþcî]Æþ¤ü²úxù9ù1ú“ü; ƒ Á : å Ï“Eûèö)ôKóTô;÷®ûÄW” ä ß qýßúÂùúÏûmþQÉ0[}ýØù|÷ˆöO÷úNþ]/õ 6 Ï'Iü7÷ˆó¤ñéñgô­øÃý”l  n Y}¦qÿ(þÌýOþƒÿÞ¸f:þ‡ûÝøÍöäõšöù7ýd¸4 .(Ì ¤ZÿSù}ôbñrðÿñØõ û¢né¼ ¨ ¢,AÌýPûúHúäûþa¥Â’3Öñý+û1ù•ø¡ù+ü¿ÿ´KÖ Ð ä î?þÖùXöOô)ô ö¥ùþq Šˆ È|U6Óýgüü ýÿ˜±·hÑ$®ü ùö³ô>õ»÷Ýû r1 jr m /9ÿwùÁôÛñSñ;ó÷÷û   ä ¬ ¯©baÿýÊûÚûýÖþZ2FŠòþ¶üuúóøÇøúÅüs²ÇÐ " _ ” -ÏÿFúwõ<ò/ñ†ò ööúgް ) Š Ø œ¯ßÿ°üšúúûLýÕÿô1U:×ÿ™ügù%÷Xö,÷¢ùŒýpnƒ î ZÀ L xÿú/ö3ô6ôö8ù'ý!}›"/Dó¿ÿþcýÚýcÿf&.IO"õýqúˆ÷þõ$öú÷tûF© ý a…ˆ ¨Oúõ¢ñxð¥ñäô­ù<ÿŽ¿2 « I މýÃûhûQüûýÔÿd[WÔþEü$úõøòøAúìüø# ó  JÿPú¬ö³ô‡ô-öpù»ý3ýc %Δ1ÿ]ü¯úúÍû(þõ ’Jsžÿüÿø÷¬öø0û¯ÿ˜çå 0 x ” ÝCÿÝùõáòòló·ö^ûgòbV ¥ h hlÿXþ9þÜþÙÿÆ1´&ÿÇüúË÷föEö­÷¼ú<ÿfA ü "ý ¼öü¨÷ÆóºñÞñNô¨øþ:v; D _ Î8yRýCû„úûØü;ÿ5´æùeþ¹û„ùVø™ø}úÍýéýe ›  › C¾úý½ù†öºôÌôÚöaú~þ`€~!ï<Òÿ#þaý«ýôþîo³ŸL þrú6÷õhôÌõùäýaµ ¦ã ¦ )Uþ÷øÆônòjò¯ô–ø.ý±”HE q4S}þ|üýûÀüqþXØŽZAcÿýûÇùÉù:ûúýœ€õN ú ­ óÕýöøõ›òOòFôøòüð\¨ G â ¬fÝ¥þ/üçúûÇüCÿ¶zGä;{ÿ3ü6ùC÷Ïöÿ÷ÂúÌþvéV  à z ¢ÐÉüRø'õäó±ô7÷ÎúÖþ¾á¬Ý¬°}lØþ1þ¯þœË=ÖtÿùûøøÔööõö{ùtýi‡Ë iï= ƒ C@þiø¼óñ²ð°òŽö—ûÿÔ Ç ¹  9å—èýpüeülýáþGP¦û:ÿºü8úcø˜÷øûùOý“ôš à | S q<vÿûŸ÷Üõêõª÷Áú“þgJz+Ö9þüûvû;ýÀÿQnºÇD_ÂýIú§÷Oöö§øuüM3I õ Ê ‡ 9 WÓþ­ù«õWóó¬ôø_üôñÁ ÞYúIäÿYþßýHþ>ÿ]Qº;¡ÿ=ý¶ú±ø”÷®÷Eùmüdž± £ û d º ?·)û€öeó5ò,ó4ö´úÇÿ„+9 w õsèþ!ü—ú{ú¡û«ýfè*øaþâûìùÿø—ùÑûHÿ9êÉ c >  C‡Éû¼÷àô§óXôâöµúûþô }w ÛeÿÜþDÿtu;ã6gÿöû†øµõ!ôFômöeúÿ Ô Ùh™ Ë"Xüd÷¨óòºò®õ½ù›þîÏîÅ ZQÈ,þgý§üþêþ/²VAN¸&êðWÁÈ‚Œgß[>bÒYÇ<§îBÚ8Øäûú`¨0 "_9ù‚ùܸÓoúª -ÿ.µ(Ñ& ÈàæÒÅ˩ѤçHõØyCÀA#ö"]zÚúµc²ÂðÕôñ–¥X{Y,/"GFàJÂ1¼#×ñQ o)2;¨&inÙn¼;ÂpÍWà ¹$¤1ú/ ¢9Ïϲ#½ðÔèÛ u&ö,K0(8þ ïØ¹c¿oÛàú%ý:¹=d2á7ì„Î?´¡Õ²âÐàúG2M EÉ4açòEÙWº¶‘ÅéÛÄú´&†F¯CÎ/ ¼ãÑ ¿Ô¹…Ì—æHI)gH{JÅ>Aã~ÑÏÊβãÞýÜ G#¨/ü-'T]ÚÎÇãǾÒJö§'-8Ã5Ì'Ê’AâvÌ×ËÞÚä¶ ;-î8[1>H§ðiÖ›Ì+ÍeÝ>¿7üHtPnD-"ù¨è‡Í£ÆºÅ±ÒVûC&¦?šI­<oŸê²Ö€ÙòâÙï÷ ".z?èH£7 ¤ë¿ÒqŢ̱Ý<îZ2"Ç.W>M6R4ôÞÕÇá·ö¾U%l"·$àÍû0à5͹ÅÜÜÀþV1+9 /&%-÷ëÞ*ÍÛÀÖsûô 6ö;1,uºúä¶ÕÍ`ÅÌÙËý#@ChM¶9U!UÿàpÒNÌ…ÈQ×yó_"5_D1€×üÝ×Ôá×`ÞKð ½^5,B£/!äðIПÇèÏjÛZó‚ \ '$/H#ª‡òÁÕÏÑ[ã(ô™p'1*™*!˜ ÅöÝоˆ¼mÓ îž4i<Å8Ë)v'ø÷ãȾÃÿÒ×ìU64t9r0"•úºäœÖ¥ÆkÊoÚxóR?ûEÖ>bÁíææÑÏÏIÜ÷åÌõ^ ù:''%¢ûëØñÊÑáê¥þâÎ$R&¦)b"­"å9Ï7¿ËÆåÿÊé)t$Rú¬øGÞÎÀàÌÏîWý.@+7ò"þ’ðåÙÖˬ¼Ææ:)Q?8ë#D ÇëçÛÖâÎÖðö ¼*Ô?6= #»àÒÏrÐmÓøÝzöñ  %:,2äÓæ„×ÉÞ¹é³ú “‹"£)ßJìàÎíÂÁÑ`åù%T0ã33&$D ó‘Ó¿ÅšÑoã‡'S3Ø.I$Æ šö×äËÃÒÀéœv7šHâC4(*õ¹âƒÌ½Ä»Îëá):Å8,æ îíêßœÖzØ%æËô¶ -È6½2!#ˆâøÓ&ÑâÛ¤òóÿeK)5.¢(õ/úÈÜÒÙÒæ>Ãý%=0 *Û ÊéÍËzÃKŸݣ¹"ã39-ÈA <ìúѱˣÍ-äŠ ô&Ÿ7:r#åõÛÇbÃ#ÈHßËd&¨;D€-Îø¶á'Ó@Ñ+ÔùáýÿÏ(Ï1ØþÍæCÔoÑcàgíûû&r"g*Ø+¸nö×ÜÈÔÄÀÚž_"“  {ïÊÛ{É.Èšäj*O-Œ+'"*ý¹Þ)Îé¼p¼>Ø~úQ¡5Í69(™ì¼æUØÉØÈZßÀü4.7è7$?êòÊÛ#Ñ0Ç Éàpû¬4’8g'ÀóâÏáLáäÍõ³ÿ$)ê)8Ú0á@ÌÈÑ(ßñ‡ .›%1i+¢%<æ€ÎÑDÞ»ó|†×$)Û– îö­ÝÃʥвá‹(6<Ô÷ìåÜØ<Ó²Ýì„ý{1†6ä0Úñ—à$ÛßÏò9 Ž%,—'z8IãŸÑ„Î,ÙÈö\„ :2D3Ó'yŽáÞÏNÊXÖæøCÜ*l7o1s òšÕ<É/Å»ÒÅ÷Få5àD=™$Ùsô³×ŒËëÅŠË"é™ ²'W9×0W3 ìÙÞØ%ÞóåÖþüM.úA'ZÇýåÏØ]ÖÚDò {,x>†<3!æ&ì Õ ÐûÕœÚðf#%P7±7j ‰„îÁÙñÛYëÁôTÆ~%Ô+6$4Ùë¨ÔÖÁ•˰çSÓ°/D45+ë ŠïÃÖOÁ»Èxä7! Û3m0†'F1ûbáäË»øÄÙâZs(C”>4/›ü/ådÒ²ÂÍɯã!þÇy9I4g" ¾ë~Û÷ԫΊÙqóA I%:Á3ðˉàÅÏÜÐ[Ó_ãßúP ÷p-Ú$Ö9ùeÙÍË ÕÆãŸþY2#*-ø0èáé1Æ0¶4¾ÍÒùø_l,)4J6r" ¶ï*Ð(Á Æ(ØýÕ$/3â3µ+z¸ö5àXƃ¼lÆ:Úïþž)ú<˜@4Öäö¼ãXÏȼÒá—ýw¥.+2¡$±åŒÙ7ѹÕ*éâù8Ð*ž1M/æÅú.Ù°Ì=ɜמò.­i-æ,$ðjðçЕÅÂÅÚÝ—x?2Å=÷3/"[ è¸É™¼Y¹sÏù{È1ÿCe-y]ù&Ú ÇwÆCɉÚ5ÿÍý5Í?y,‡¸úâ>Ö-Ý?ãòÆ X),ø/Æ­ùÆàqËŽÉWÝuîÝ3"S/P4õ2Á³ù!ÝŸÃÌÂSÛ»òÈ N'f/9+´# Fí‰Õ‡¾!À`ÝPýî9c?35' õê6Ô̽»ùÓøó¯71;¾.K‡9æo×ËÌDã(þ»K<:=,FòöÀÜ×Ò9ÍŸÒ éêüýô0º2q!Ì QíÃׄ×yÜçë[³x%14U.ýüû¶Ù€ÂÙÅŒÒìI¯#W09{/ÅÿÛÜÄWÆdÕµñæÕ*—13È åêï•Ò&¾;£Õþöÿ!~;êB\Aq(¸ñÖÖÃýÄ–Òœí‰Í,“3Ä0FÝú1é5ÚØÑÜÙê}# 57-¥íàÛÐÃÎYáÔòŒž ý-›-þ"ÁMâ¬Ó—͵Õò> ü#1ß4+~×ú™ÕzÄ ¾íÉì[ d%Â77Ð(¡Åú”Ù;ÉpÃÐãó28.Ý=&6û ¢ìßÏh ¾“Éäî9e.BAÒ:©$„0óÉÛ¿Ô4ÒiØ—õÁ$1Õ%€ ÄóïÜüÎËÖáéî $$/3ô:Ù, 1ñ×ÈÜÒBâëôËò!u)é,$¿þQä™ËÂõÔ.ïý ¿)J9°6„1þÛúñÝFùËuèv,e= 8„/,túþáÄË ÁóÑõî!t1 ?5r&— ÀílÛÓÍÇc×,ñf ÿ.Â;‰2=".ïëÚßàÛŸÜVîÿù/ã5¾%(òTÔ9ÍxÒà·ûm$8#<*‚AôyÔâÌyÓLåç8=(Š2/ƒa[â.Å1Á_ÏÒê—ï1 >ãC]8IÒtåÇ•¾Éßñj&·3?9,+Xÿý‚é<Ô©ÐÛÈîò{-7Ü6Æ"™ìÜW͉џßíñ°v*o3:1Âøû™çµÜL×äåøÞŒU.€.C%S çëÐdÆûÇHá+þ¤µ(5{0'&z ÁéÈÔÙÉLÌ+çãÎ270*óÍÿEÜ\Æ¿¼Á—ÞÅ"\:b?]/‚`®ææÓËqËj䯄ß/A0J®añÞÜBÖÑ×nÜòõí(w7q4ðVÛçÓ‹Ò±Ù)ákø,Ø ,ø(»`÷ŒàRΌձçäùù?'h-m/¼%®Ìè3ή»ÁÇÛ÷[G/`3ÿ3N) êígÔ*ÃâÈ#àõûâo4Þ1ë*Ø6þÌä¤ÏÀÕÆ<ß”ú©6º4´*¹ŽüûçìÚб×>ìY¶£0<+éFˆè¾ÙQØ”×æûÀ9(å5â-ïÆFáCÒ®ÔÛjî7JŽ$,uU lô ÕSÉÖЧâÓ~.b9;'[ò°Ï…¾ÆÁ\ÒuògÜ&ê1q2º ŒÌ÷¶ÛΩÓçáðÿz"ñ157K-î|ý?é2ÒëÈ‘Ñß{üò•/Ú5.+øû#í?ÝáÛ€ç}ò !§+{+r;þÕäÙðЄÛ&ðÜÀ,3â-nü¥à÷ÑQÌÝØ÷$ I\0D/ç$ åï=ÕÜÅ ÂÓÖû-Ï<‹7ÿ*R?õyÚüɸÂöÑnô´!&c2á(„#`îÚÚOÓѼá åU3 ÁcÕïñ ë0è6ò3*Ïëô§àÎÈ&Ø6ï=Í)+-&^cÿMèXÝMÔŸÖ4êêþÊ3ž4='I÷¿àyÚSÖSÞ:ò/ôT(—']R9æ Ó!ÕÜŒîˆ ©’.O9¦0à7܇ÃÏÂäÍ“åßú-Â6?,Ð[•ã•ÌË× ïKê'›1«3º! XôAئēšÑðëŸ,\7µ7;%Ú €ù!ãNÔû×pßÙò!&,+æ#” ®ô<å©ÖÓãñð° 41Á2Ú' ƒíËÝþÑÕuéýûR˜$ .Û)è¯ÿ1ß>ÎÝÅÆÐ"íýÊw4Û8Ú.À f¯ß4ÊIÀEËêE÷É2Ë2%9+üßá¯ÐÈ¢Ò‰ó`I'ç8Â3)!q ÈòwÛ/ÐlÊÁÑxï £"Ý2"-M^ ò¾à àçá&ëmõÍ%>.!%'îWØ<ËnÓËàRõËè$'2¼9+ô Cñn×RÊ®ÓÓäüñ'W+n-á³ýØââÉUÀ©Îè¾Ï&ã78e4l=æ“Ì¿‡Ì@æl@"Ý0õ/3)çù†çsÖ¤ËÁØeñ ¹*)5÷/ó"ØŒìÔÞÖõÐ ßró l&;.~$¸èû§áÚ)Üaäú\œ!R4$6æ#& ÝëšÍ8ÆEÊ ÚÆ÷%$È3‡5Ø$#®î"ÒMÌÓr寢!.î4Ý,§ñIàÒÃ:¾Éß2%·5=!1ïɱìLÓ?Ì„Óîã5œe*ï-v.~ôãã‰ÕÌ×eâ¥ógÊ*Ï1¸.1þßçØáÐÜ×é+ú·* -Û%”ÉòØÝÑèÐ æuü '…6 3}' åè1ÑîÂÁÃÙÛéù(I)5_/×$3 Iê½ÓbȱËäÂOÝ4Ú9ñ+×iWäD͹ÂpÆ·ß=ÿä©1ô6'úÙµêkֽܺÙÑ𦠽|,²*ƒeþcéîÖ?ÔïÙ`äæþP,>8ô2—dþÇäßÏÑEÞëì=–&ß,#¥fîÃ×ÄÆøÍuä@þÃ!0®7û9,w !ìåÑ¿î—؛ôð+è.T/K#“¬îÈÙ'ËœÐ-æÏÿA«3×2+êþœè×YÊeÑàæôüñÄ++v T póÕåßß”ÚIæ±üôk&œ1Ž*,þÕßÌÒ>Ó»ÖÉèß¡û+%57+zþ³ÝÆÏÓ8ÞþõÐ!á.2%!@ ¡íJÎ}ÁbÆ}׈ø2.æ:T=],ëW÷sØ×É‹ÊgÕ’òÍ $ß+S)Y̬î@صѱÙñæE";1ü3(j8ú<çƒÔ¯Ñ½Üöê·!%+,,ñ2DìbßÉÖªÝLî³ÿ?Á,50*@KøÛÛCÍÔÉ¥ØiïpL4¯4E+/¸øtÜ ÌÚÈ*Û¿÷&t6 2¥%xèïÕœÅÂcÔõò“)#8?3¦'–÷ÖߘԚÐMÞâù’p%ü+ýkå&ÖÄÔ9Ùïëéuu3’8t&Ö|ú›ãáÖØ.ßoò ¶ (*s»úVåüÒÑ"Þ/ï1f"@0?6É1ŒUùÚܨıÁ_Ò±ç÷±Ý.¾4o/ÿhýVäÌýÇnÚsòw –&f01<&½ ¿ñÆÜDÈØÃ`Ö?ð*'-.#,!Í;òä3×Y×èÀüiç*9+¥DUô¾ßÊÖ÷ÑZÛñÝ:T1’1Z" zïöÜë×Î×mæ¼ÿùÅ"%/)3Qû¹ÚuÈÝÈÁÑièm ñ!~2^<Ó3üO±àÚÈ‘ÅúÍ*ä}*á1'dóþwã6ÐcÏÏÙÂò&ß/Ü08 ^´ò¸ÛþÌŠÍ¾Ö ð o%¤,s+¸Ö•ñNáÜ<ä)îLh*Ê)¦m¬ë–Ú•ÎcÑHãŽö\ Å&ï2ð1;&·eê?Ø4ΉÓé¸-Þ1Y,ñÊÿÏÞ)Ë­ÃêÌ çô¥4&7c/‘"úYç‘ÒuɧÑÇê:„ú,J+°ûUùAâ†Õ%Ð'Ûµ÷ä'û5P0% šóGß*ØÕéÝOö† ®)¾È ÄûÈæ‚ÚßÃèeøkÈ$2à43"ÏÇìžÒðÄyÌzÝ™ôs¼$D16Ã%– `ñ¶ØŒÌ;ÕøçSzÉ+>0.få+æ#ÍúÁÎäœþÊc.!1!,ÞzÏíE×¹ÌÙí_C³*Ä(0l ¥ó&æ‹Ø‹ÔÓãyøºÖ&/L(*<uéjßPÙûÛ¾ì 'x*ä öïØÓÑuÔYâ ü$Ô%ê7±8&'Á§înÓ„È“ÉþØÆö8oÑ./ . éíÕÖ ÐWÔ<å8>m+¥2(+s#æÎ^È&Îà)Ã/ž&¢ô%ïÜÜAÚ[à®ðð ™ú$¼$ëUûê¿ÜmÕ!Ü;éFþþ+¯/Ü+¡*ùçãÖnÓAßZï*Í,ö*‘"= >ìuÖXÊ7Í'âû·p*7×4Ã*=ðtØ-ÊÉâÜv÷uŽ#¼*z&H hê€ØÐØÑ‡ç;2“0_3¿({»ê¿ÙöѯÓ.çÿè<&O&W þ÷ÁåpàŸáêvÿ-Ø$/o( Ùù>âÑöÑXÚXèër+!4ô,:þäpÒ Ö˜ãó€ Y !+/º"‹ ¦ð²ÖÅ‘Ê·Þæõ2Ð)Á3ç6*S÷vÞB˸Íß#õK…#Ô's&?ö,ð´ÞsÒ‰ÙÉêxX"-æ+æ"°žû»ê–ݦÖqálò—‘u)þ#waRé~ÞÙ¸Ûóíáó.+n4U*lzû‘ÞsÑÏ­Õßêxi«+ 31(ÁBükß™ÑÔÒ±Þz÷  !U0ß1f! ;ñoÔ~ÅÇWÕ„óU"11j37%P¨üäØÈ×µá…ûi‘‡#¸A /ùÃè¹Ø×]ßà툵!;-A." Üôåü×rÚæ'ö² É ³'â%“øoã}×1ÒHÜcð±À—/ÿ1€-êuù]ޫ΋ÉtÕUìôî,4-l'ñÐ÷MÞÐ÷ÌíÜa÷Kr%f2s.Â#l4ôÌÝ®Ð˨Ùìó  (y#Tq óòåyáõߊîÄÚ'.(óÕó0ÝjÔp׎ޢña M /0vüSóêÞÁÙªà¶ë\ÿï’#½+\(â%ø;àuÍÎÌ–ÚÖìý!./m5Ù0Ùÿ!älÍʤ×éàÂ3(ã+&|¦ýòç·ÔéÓäÚö¬R%¹+Û(IšFó%ã$Ô"ÕçäÀ÷¥i"Ã$åÚüWì(äóÞlæb÷Á ’è.:*õ‰Zí ÛqÔfÕ¥ãù< !Û0,Ú<~ë–Ú¸Ö#ÜöîtÐ(œ2O)†ƒû^ݘÊ:ȹЫç¹Ý,È5²-„§0ëS×'ÔmÚ²í¿°"%T ø)äA×úÙaåŸüa%y,*—mfòöà-ØÒÛæSû5’Ë"F­ºóÝæêܬÞwëõúLü&(0-= óVéØ#Í•ÑRäcøe¨$“-Û+šTèئÏ{Ö@í<ÕÃ+¸/–+VtäÔ‚ËøÑªèÑÿÿa&Ý'\"JéËêæÞÜØúà²öj ¡ü%Q ¢nï£ß@Ú>ÙÞå²þI$ú,Ì$3 1ìWàÓßâpî!¥!ê$š^Ãí]Ù¿Ò¨Û\è{ûè2)`3ñ3ü!æüíçÔ£É×Ð8ßJô£»¯),DºïûÚ‰ÒßÛ´ëEO'*Y'&ˆÿÓé*ÖÏaÙ1é¤#ù"·µªûÉìß°Ü&éÈø¯ ä ö%˜­€üùéràÙÝÙí§®(é+‘!·KùóäÍÝÝ)å³÷r <+’(‚ãôé~Ò‰ËМà1úûs%Q6Ã4&?‡ö ÝÓÆÔbâú¤ íÒ%ð!Ö>1íDÚbÖÜííà§'-É$í¬Úf×0Üîê ¶È :b0ø®éWàCåðx%(#81õEåŠØÔJÞ›îe%*-j'?ËõZãc×1Ö7ä£öP ¼ ,=+e"" ÍîjÚ„ÍËÍUà‡öç p"—-á,c$\õ`ã÷Ö—ÖÐèžýQ<·#”ÿ éáÝÏÖ@Ú÷îDB'8(¦+þ_ëFã}ßäUöÐ u@" ö çûuêÜÝ-Þä×ðš')j0"'§÷üßåÐuÑ¿Ùé»­Ë%/.5's~ûÌäþÖ…Ú1æ»öÉ (ê)È^ñ:ڸ˕ÐßÜò >Å&)§ Ïù çÖÚæÞßë·ýfî¤< Ù÷Ôé ßäÙ×âÔòäUŒ'„"`ÒôÉçáHáí÷ýÙ!(’,Ò÷…à…ÕÔ[ÛïvA -µ3Ý)âüþÁãùÕ¦ÓÚ푽$¥(;¡ù&áæÖ Ù}ã÷ùuŠ ],S+þß ¥÷eÞÖÒ½ÓÔÝ¡óÕPo!õs½ ù‰è)ä°èîóŸ_!f!GÙâñ—ã¢ØÛtæ¡õé :!Œ(5'ÊðúáÑÙšàèî8þF%¤)'%+‘øäÖVÐÜ&ð/Í­*«. *®ü²æ××YÑäÜéðQYÅ#ú#a\–÷åÇÙ¸ÖFåú" MS(“#ûÐ ‡õ`æÝÞÚ½è1üƒ 'Ï™¯¹ú-ëåæä!ê(ü×] *D(|Ë’ìÚäԔ؜á(öØ ÌU)¢(§Š=ïKÞxÛ}ã¹ïv>$4+ì%áù¹â²ÐXÎ`Ùêè!ä$œ,Þ)ÁÕí:ÛDØáÙï5O¹îqÍöè¶ÜWßfìýcå!F#Ë^IùñþæÃÞRãRñX œÒ Øî_âàݸÝ$éýzb$ç/D*ü3ígÜ ×3ÙÉåÞù ›þ(#Eé­Ù$Ø[Þðï_%(9/Æ&h‰æsÕ=Ò ×ôèÚ%†£ÆîOãyãéyùc Ä‹í ôþLñIánÜóâïíŸÜè#'p Õ ¡ütî³à“ÞFçüò$ík!!œWëìîß§×yÜì»ü(`'þ.ì, Ä?îÚ܆Ò[×÷çeø· øy&[$"•|ì™ÝzÕRÝÁðJ='%S(@#U·9í‘ßV×¢Þñ‚rá¤M( ;ùÿëæFäï»ä€Ñ$Ç) ~ûrèbÜÚƒÝQìÎñu#0*D &üvêfáÛâˆéFùjRŸ%ú&ŧÿêÖÖOÏÿÕßâOø #ž.‰1„#H ¶öÐà–ÖzÛÑå¼÷¦ ¶l¶¸iÁïß—Ù'ã¦ñ^Θ!¢#Û¶ý–ïtáÝ_æäôƒ"ë­ÿšïç¯à{ãÅñÉ%?&ֵ޸NæÞWÚ\à³ñ íÏ&N'.¼ ìô´âÞÜ+Ýç€ûCÔ+è)Ox !îÀØÛÑuÒèÝœô “¼'æ'ÝÜøÜå¿àâßì9;7€å UýzêúÜù܃ãMóþ íÜ!º#„ò ñûRë(á¹â=é­÷­ °®I¡ "ù.ì©àSÞøç´ôX+õ)Z* ": ”õ…ãÖ ÔõßÓî`ˆ&z("ªH÷ÖåÐقٻç*øb \Í'E'Z LòàÕ±ÕŒä4õ$#øÙ>^ _öèéœâMæöª¬fgµ÷4æ¨Ý~Ú#â´õªÏ9#Á æ¾föéJ夿ïïëÏÿµ$¯õìáƒÕòÖ¾ß!ïß‹ñ)K1…'·¬ý˜çˆ×ªÖRÞìóÝ\%¤ ôøõæ÷Ú=Þ¬éú©E¶#æ%›Ðõwã ØÜ€ç°÷H ÓãÜRÿ”óè°â ëÁøzé ñpÛgñ¡æ‹ÞñÜÿè©úi ð$Ñeyÿ»ë´â/ßñá ñL+±&z*Þ æÀø áÖÔEÚµì‹`3&,‹$a8ê?ßxÜâxó›jL”8 )öêã÷ݺߕé}þa«$L"ÞõHöÛäžßdáêÁüG áG-OùUígäaçŸðdþ#5#…']$}Qÿ¨íß”ÖÛç³÷!£ ö%:$Wºÿ#íGàLÛTã ñ`>$&‘(è#ŠûØæÒØNÔªÞFîíþìV"'%¦!”…ÿNîoâèÞûébùVFʘã¡òƒåMÞ·Þ¦ì/ÿ[|±!ÇJÝóêéæÐéO÷Ò–óG€ )þïMàÉÛàÄê'ÿ¨,$7/Y,n=–ñ;ß³ØËÛ$åOøt v{$<"}ZòíÞ Ý^å¢ñ-äd#­)I$¢,ÿ+ëöÙØ7á2îß¼Ef T äþ\ðnãþã‚î¿ûë ]KG 1ý;ð<æDßÖäró–"~ a ùÉìåðáÏêÂú+ ÿ¦$š-}ëÞ™Ø2Ù¶æCûú 4!ö,ï)Ë… ÈñöâÝÝŽéü… UA"­Õÿ;ê}ÞöÜÃáðñðÌ!'; ò‰&í˜àâÝâÿðÚ NçÏföùíhè‘ëLôÚÌÀ…r÷ìèÝÜdÛ—â¶îˆœ:"ý#šº @ùëÏàöáìàøè é[$œ"ÌšìÝ”ÔØœæ÷| ³î'£(ƒ ¼ô§æÞƒáËíÂû ưeKžþúë™àÕÛvãÇò ©R$cŸÍÿãð0èúäbíØüî Z”»M <ý•í5äèâ‹æô2 ϲ%5(uP µúBçÜlÜQáVï[A"÷$ ( ™øçjßÖãÆìŸüKÓÉ(Ÿ(b%3ñ~ݯÔFÙÅã¸õl Œ#=&JÛ úIéã^èmñóÿ]¦ÃöÄ yûTîúá&á÷ëIù´ TªÁuyŒøÌí1äRåòu+L&I —÷\éúáàÝä"õKáR(š(Àø ç†ÞwÛ¯â*óD#e#€ LõAå-ßžßëüýé  )é'] †ôÍâ&Û:Ú´ä¥ö¡V¨æ+ HöÖëë$ïeûs þžTyõìå:Ý©ß,èiøÎ ªL9¡>éõµéìãièOò°Ø7 \pÛó5åÛ„Ùßâ ñtÙ‰'·)¥#ô7úÙèËÜ4ÛÞäkñQÉ GY nõvçGÞßXìÊú‚ º& {#}öEêvâããðÆý‰ rÖ8 áúíªç çîÿkG9#;î6ómäXßCàvéû{ ÊR!îù ôþNï‹äöã‹èXô(ÎÑ#ú'(» (øä¹×ÕØ­ßTí0r#Ã)í"\Åôí8á,â(è´òâܵr @÷–èþàçæþñ8ùeôtÀOö éìâíèßóš¨MùÙô,ëäíä ñ(…I!l&—³øCð³äLÝ»Þ[ìŸüE <$‹p2ýRë<â¸ÞˆãËó­ 6&_*n"¨¿ýwècÝ€ÙPÞ™íÏý }óFg>ÅïÌèÍèYðòþÿ Žú¥ Xñvã°ß¨ãðHü,‘û ½Jô›é>èíRøð 1s’& Oû¼íâÜ®áÛí·þ†$m)¿&ã“4ñýâÛÚ@ßšê'ú8¬!öíèüþìØá Ý3äEñ=”8S"Ä1ýKí¡â ßçŒóQ[k(œL ÏøuíÞæçuó,÷˜: -ýÆìíãoàÖãâòÿÍ«Âø úÁëâæäçî-þFÙ‹#Œ¸ýëKÛr×êÛSæmúòo E+)‘! ÁõÍäß:âUê­úÄ À[Ä ýí+á—áÛèSôh!#Ì!ð ÿgîoâFãØêHõÓJªÞ K:öÁëÑåOìHù×úȱ„ÿ¬öê.á§Ý@æäõ‚=Ö!ž±.õÎèÜâ&ãTî½þŒE!})|#³îýÞØÙ¨å¤öyÎd$¢!ø±Dö¡ê-æèþô˜æ¯Ý` kûÛé:ááWç†ö,x®k òþ«ïÏèsê•ñeÿÁ ¦ÍÿÜ ù&îéããâ?ë5ùÏ –Æ$%è—×öqèÝöÛHä!òž½!a"­=ýõé‘àã¹íOûý YÚ$y#ü’TñÃãÛÞ‚ê ø­D«½ëÑ¥õìAæ’ëBø–×Êz'f ø@ë«äéâ¨ëû­œZ¡Ä”õÌëÓèæê”ö¨º­ëuõžå£ÝáÝäõÛ b's)˜× ûÝèÍßßãñ*‚-‰l´‰ôcåòàÜåIîýý¦¾‚%§$ä×÷ôäÖݦá™é÷à03 Ùÿrôµê|ê¨òrý¡ ioÌÚP•ò"çÍßãÀî²üà d©5 !þEðç—âòè÷Æ~ž#j"½„ …õåÌÜ{Ùá½ñUò“#X$ŒúîêµãÝá4é„÷éÆ{ú’ö9òYäfàã%îîýÜ &!¹YM÷¦êç‚éó¨Q Ì[R Ëö8ëæIê¨óM›øÉ èlâÿñVã…ݺâ/í£ýzÍ‹Ì? èüsðÜä‘áuéÃõz ”!6#Ž ÚõÐçÍÜëÚ&ä¿ñª t {#A 3üSï¼åéäEíä÷j÷ƒ‘´ò¿èãeçeôõ2 Fïâ›áó¯ìEé.ïpý   Å óýªîäÎáJä…ïCÄ;!Ë&a kíñ«ä·à3â?ì(þÕ et/- •újë0â¢âcèôõh Õv#Å'"ýû ê?ßUÞ›âîDù Zšbñ ¢ý†ðÃê4îrôÊþ …! AûïRäßá&êöU#ÜФ  zûüðØèè^ñ_þ cÝi "ýCìàá¶ÜÀßôì»ýXž †$£ï{€ð«åàšãôï°þímK îÄ û]êëáfßåóò JQ"ÕH¥þmîçå¦é£õ›¸ ŠíL ¦Hö\ëxêlïCù™Ð1;NçùIëKàhàûç>õàâ/„ NúMîœæ:ééñ‡ÿù5éØ ßú±ëÙÞñؾÞRêÛú³É%ž#øU%ö¡èÛá¤æãïüþ ¥^> îúûî¡åñâ7ë÷“dß@s Tû‘ðpéþè:ò‡ý°W±Í¬üzï„èÑæ¦ìœûÆ “"°| æùîêÐâiàPæmö´²lWííMôlèâäÈæ³ïU 'Ë"]ïÔïDà÷ÚLÜqä õ‰¬”Äø £øèì_êwí2õa˜ gdTÃHøÏë¹ãmåíåøhbמ£=Œù¢î¨èYì`õ^<þ¼ì÷ìíã%âTëñù¯ ÖÅ!à3ö5éÀà`ÞXç—ö3—kËsÑò‹çFâpâ›ìeüX w‡$Î ~(‡óç`ápáPê÷G‹+ ñßò*ìÿëÚð‰üèßìТúõ¿ç¤âåÏìÌû¼ Éñó× >[öÖêénî¬÷°["Š€t‡óæÉÛ$Ý|çNöq Nb%ƒ&š ûìzà’ßÊæòí4Sý³Û„ôNé½âeæðOüß ²¢h õêägèñû`8à³ üùð'êçéËóko Õ.IRzóÁèÏãóäJðÌÿ- 'þMpÝûÉíðåQåëéù­ ^9#m#® +÷<æ…ÜÛ áñ!±* ´#Ò0 NþŸïåçíæ[ëì÷q®&³ öÿOòžæ¶ãèkðÒþñ ´¬p…P2÷³ë"é]îˆöF cPR ýÿ¤ô3ì€æÏéJõ"ûºåû3þoï§åKàä ñR&l锆 ›ûpí åŽáäçööòe"\"Þ úèêèá±ÝŽãMñQ{Æ[ &ûðï$ëìé¥ð.ý¼ø{&× çÿŸïæää!èKò²¢ $B¯  ½*õ¶í^îRóþp dBŠ´íùwíãá®Þãädðz›“ `$‹ kZ‘óXå à äÐì¦ü©t‚ Àû…îÄãiâÝé¢ô¯½‡!- ¹ûîãOá2èüñÍÿ8ÎŽ‡†ùqðþê´íìöº Âÿúö Åü8ïç‹äæêM÷áwôÉ2î¶ø³íæèêéýóÊÎÀP˜ ¯ý±ìàŒÛÅÝ ê_ýw #ëvvîô×èùäšæ<ðÆÿˆ <Uÿ)¥úåë¢âˆâ$èmôÇmýB!¢! €þSð˜çlç:ìiö Ú £=  OuöÆí¯ëò…ûqf4öxêyáìà²êøM;Ø£ãËöÆì å©æ4òY­ (ÿ#î[ãpܾݼéÝùY .Uq”¼„ô¨ë³æéè‹óFª äÙò< Eú_ì¾åÙãgé^öbXGÀïÿ ôüïñ%î=îMôùÿ# §SÐ bMø¸ë©äüæEîGû÷ îñìF júžê½àWáèõŽelBœçõ÷éäÒç1ñE±·¥"Ë>“œñähÝ^àpèxö²fŽã ëö3í"ê?ï÷ã@à Ó_ùUîjçÓç{ðÐúÃj¦ ùõjíuêuî$únãð1õJ÷ÛèÌá’áXé.ù‰ –U!! ²á bûìñã’â6é×÷ËX¬(K¹2óÍæ§âàä7îßþ;$!!K­öõèøã¸äëü÷ââ>¾Å D…õ îhï`õõý dm!l Þÿ ôé÷âAç~ñþô ÿºH pÿ;ô0ë€çîú)¤ùBœ õ‰èØß ÞŒç öM&_!à ”Z ˜úîßä-âtêª÷Åñ&ø«DÔò:é³ã(ä„î¼ü¤ ïkµ‡øBð*ìÎì õ ÿEz‡“ õ?ëÄè&ìªôûèwÖÔ8ôðçäñæð¬ÿ? u¼Ç»TüØïòæç’í‚ù7 ‘Œjß&ööáçeÝÝäëðû¨Œ ¬ë þfñfè>è÷íÚ÷Cæ£sr-ÙóËêXæ+ê×òþó ˸ ÃÿhôíìVòÄûfµ_§ ¼ÿ¬ñèäØçßóÇÃë‡õ„Ùò¯çìã³æ•òäú¯>{húKëJã¹âZè˜ö31à!Ë"¡Ú Ïüµëýáúßóãüïpÿ6 F:½ rþáò1îžïÁô:ÿn Òì±gæú¨îõäOäêèósR›±ð; êþô1ì×í$öÌÿp o!½ ú×íòã¼Þädò³ù— ]Žcò”ç5á€å¸ñëÿUc' úfíÀäáƒç¶ôW#42qý oþòèépæËë"öZ† Ø\ 6MõWî’ìïéø|þééú^ ìûìívæôå–êdö;· U“«‹ùêíîé©íYößM¢¶ øûåìÄßÛ‰ßÍêý“æ Ùÿ<Jöê<åèðiÿ†¹xp .û¬ïçæìñõn[*}K\ûþðê|ê9ñøù9 ½7 Œý’ò²ìëíðü)[<¸£ñø<ëAåÌä}ì(ú|5¢É ”ófèðä¡çËò‡±Ê®#·øÎ£ð ã˜Ý=Þè±ø™áÒÀ:“_÷&îìÛíSö¤ì£xýTø%ëÃäæ/ì'÷˜ë<Œ>ª’ü‰ñXíúðI÷µ €ˆ  Šö™ì]å·æÊðwý$ ƒÂ>Òeµ÷·êqá¿átëø@/o&úó-éBâàäÉð@ÿdˆA"ˆ¶ÊõoêÏâíãƒíKù´»kõ Gþ5ó4íùêÐïÀúº›ò_$tdø#íˆèñèðïû9N… ;©õÏí6íÑñküÝ Éµ.ÄCTô´æþÞ§àénø ‹/ Š!÷× ü?íâãËã!ê÷.{2ë5$õíéLä‘çwð±þ(‡m’ÒöëÃå(èCïžú³¿½öNwûSóîQîƒõèþ“ «Ù:bó÷êûæïé}ôQŽ °Só˜ óûïÊèšçÁíÜû– «A¶OÏö çgßøÝÃäsôƒ"öKâ ÓýWðêÅèîíúBÊš7[ mÿ=ñ[æzã¦åîý’ œ+ñ‘Éù­ðØîsð7öËg Ù ¾Ê—þ¤ô‰ëvè>îa÷Ê_-XTæ nÿòÔæ·âÂè;ó:®0J/9 öúôîîå6ä¢ìqùZ{a «ù:ìjâà—çÌó«<eÝ] Hûñð$ê®éKñ³û`[*“Á s|ódëŽç¼é óþÞ,~Z 3ÊõMñsñnöƒ¶ D{ 1Ñûôî‰ä¥âÌçØòÙÓUreÜ«ûó•çôãâçò2lô¿QûêîŽååÆëNøK t dõ Žû•íãˆá²æ/ñs” ƒçöDýsô¸î©ð/÷ûÿ ÙÄ …úƒð±égçXík÷0‰ K¢˜+ùµðÃìõí>÷ŒxŠñê´ Jý[íjã˜ß·âaï’ÿ%"ƒRfˆ\ôâêÔæ2éÑôf~zñ…ùZëä}âòæYô´@?x'ç `:ó‹ì“êíöîQ o'\ÿêõÖî ïúó‘û~&Kg­D ùëì å!æí÷éª$ýöí5è°ì»ö§¨ûÒiþ§ï÷ãKÞã“îþü® ¦›°eÉôcêVå{é›ó0ˆænåÿ ÙûXðûèxæÿëoög„|Ôáš&üWóOï€ïÞõÚþ;gÿ€ '—ù*î§èþézðÀüû œ,ÔPú]ì\å"æŒì#ù¤( çµôBéÏåÀêõŸê"®§§%ò¯ã¦Ý’àˆé’ølm|ÒXÃ6ùLïIì-ðÒ÷Ü ·Ž:ø)ï”è‡é»ð#ú3Ò6¬Ð÷ÜðRíwñ¾úæ~ #© x<õžêBååÚíZüÕ ðG*7ìùüì½ææŠî¸ü† 1Y´Ä Ùÿ†ðáå¾áŸãßî™ÿ®'|!æØ^øí<çwæî®úœ­øü†ýÄó ï„ïuówýÔ ðr× éÜõoëàç´êãð4üÖbþ Ûþ­ôýì¼ì1óHüs|ž·NÊôSèààvâIìÄù- O¼Tj úmí´ä‰ä€ìFø á ÓOôƒêÐä ç‡ðúü¯ Á5Â™à¾ø¨ðþëÝí˜õµþÙ7£ oáökîì¢íÜôrK ̹ý| 29ôtêgèXëôMª ™€†€û#ïIè4êŽñIþi }« Åxö´æoÝýÝåõòUñ?—¶ ¤ÿ—òë¦ëýðŒûß äÄ4 xþ‰ó?é]å¾éùñþþ 3º?± ÅÀøøðïôÿúÓ ÔF býHòrë!èøëÃöFÙ ¿MPi tÿVòBêææ½ëÖ÷WãWý\¨ø”ëfäÙâNêiùt£j. Müî„å,âpçoô̤ C‰uyÄûIòTîuî õ¼ ©±6 Àý¥ñEéƒç8êÂò»ÿ` ðË„%™þõÐðÈò,ø: Nñ‡£úOî}åfãîéùô|¦wÛÀZÁÿðñÿæ#ã¡è)óM>m. Öú>ï¥æ²äâëó÷¸ôCpY žü)ñÄèHæþëçõé ñØ ÒÖ÷wñwî[ð§øî] éí–ìü(ð’êvévíh÷} Xå° ²÷Ìîíxñ úCãRæ Üüµìƒà Þ~â)íœýý áVz’Köë¨è5ìõûþǤ^zúêíaåšåˆëoöÔ¬¯Aú ´þFóÐë'ì¥ð‡øœ ’(Å™üƒôhîPí±óü’È  ™-øPî7èŠèñøûÐŒ[´b nòŠéÁåOémõÈep—Å ñ^æËà'ãîcüŽ =¨Î ÷-õí·éíù÷c j%ùådúcîèÃæ™ëO÷ÍÔQ™ýYô?ñWòZ÷×:  7 ´ƒö†í6èÓêÙò@þQ B©Ú{uøBìä¸ålíñøéBè2 Ðÿ¤óýé0å˜émôf¸éaKªô.é€â'åoîôú ĚΧ pÿµõ³î‘ë>ðÓù½âêè£,jøòïTë‘êððûKºÉ3B yÚõøðûð¼ôDþO ÉhPÕ 2ôÿæÓá³ãë>ù¯€p€ Óû_îèwé™ï)üƒ gý¨9 AÿÆñ>æãç`ðëÿ®îíŒÝ³ùíwèíéÀïRû8-úõ z©ülôŸî¸ïxõýÓD:ƒ9 ?võíÈé´íö™ÿ; ¼ÙJ˜û ñáêêŠñöüCÂu–\B»õVéyâLâJëÿø«øèñ¡• û^ïúè¢èÐðLý1 ôÙº î¿òè%ä²å:ïÍüœ ]%)ˆÞúÎò»ïìðú÷:>#Vþ«õËíºë¥ïC÷#±wx… ¼ÿ±ó•éÉæ-ë‚óªÿk V</Búð¨èYé¥ñZý Œô¶E•P÷Fê½àLà“èõF¥…î Ýü¹òë'ë‡òÝü Áuó vÿNô_ìsçÌé’òýµ«Çÿ vÿ¤÷Äó¡òŽ÷ì€ ëd‡“ü›ïÈçhæˆégóL+ l”‘n ù0óæê’éÿìúöV¶•˜­œøcë¥äÒå„ìôùC „[å ýCîYåçãüçóBÍ yPJ·ükótïhñÂöå^ ¨0ßT.üwòïê¯é|îöPä •5;±ú ó´îÛð|økì ¯*` ºûËîÀæëãýèlô<·4cGLêÿòyé…æžëüöN”Jk‹¤@úíwåÃã,ê÷¦³ÎJðé ¼ÿÂóØì[êgîå÷•G S ãŽÿdö.ðíïŒóéû€†À¿éºû*ð%éUéÔí©ö)% Ç\J < ÷ÑîDìˆñŸúƒÕ$Ày Fü±îuãžß?åñï4þO BH÷äõdë—ç¤ìòõòHGy7yûÁðrè¦æ<ík÷pŽØ^‰ý„õïïÏïröÝþŸrL ¯Æù™ðvìÏëÝðÖû×ëŽÜ¬¼ùOïëBë†ñý µí( ½ý÷ð#èÙæëØõ}ín (ë‘•òxæ/âäíyû[›Ùƒb ;Ñö¢îíCðÎø+‹lB?Ügùoï•é’êðúí!c~ú Ðàú…óZð1óù´| :fÉ ¼Óô„ìHè ê¡òÕýK -f—ç4¤÷<í¤çÃèjñÚüÛoëH 'ÿÔðŽçÖã;çiòZJù æ9C÷í·çªèîðÌû…:8 G…ý±ó ïáî óæýÚÄ=;o îmøkî§ê–ëñVû›* <{שþöWð°ñ0÷rÿ| =Å ¾ÿó©çxá‹äxíòù" gÛ}81ûïÓç©éñ²û»&º ÿ@óé)äMèÚñþù àPªÃ&ù—ð ìIï öŸÿÍ á·“ -:ù#ò²íÚíõÂþ>Bó·’ 2õÕî_ì¿î†÷Õ± ö7k HÞø—înê¹ë‡òCÿ0 í_d@Döoè×áâÛèoö¶ Qˆ÷é¤üGñ ì§ìèò¨þè :6ªm Iþ˜òûèæ é`ñÇþD E‘vG òwúÀòÉðlóyùÙU  b aEüÄóéí ëÑïRøá·‚¯*¯ ýùñÕêè¨íU÷… EÊÁ÷ívç†çqïîû# ¦{‡S< iùÊìQå¸ã\êÙõ   'À*îþù˜ñÃí”î^öµ# v¼ öÿmó|ë“èêòýâv‰ YiþöÃó’õ3úp *÷—<Àù¨îCæ”åQë»ôB˜ý65@ €ÿó±éKètí1ö«b¡Â!¦øIí½åÜæ¼îÎùßb”!4> BüVðÚç…ç­í×öÏ- ¤•§ =ú­òtî$ñªø{„  ÷Ñá ü%ó€í¶ëðrù}  û-= œŸö<ð¨îˆñ}úØØbgˆ &üDîzåWã4çòüÿ ô@ü± ›¦ó–ëêî@øT)L|Ó¡øfì¨åæqìËøáÅYô? /¿ôâíí¢ðù¡¿ú µ ¾ßû6õóïÙïCõšýFgáócÜø&ðlêÿê„ñŸú¨ô6’ Âýó‚ìõédîÔø×Ü w þ4ð<ç9ãç„ñïýª @â ã åþNócìêáî§ù+Ø»ŽTÔ­ú¯ïé¿çÎìi÷R 5ጠaÐüéõ{óô¯ùÀ €ÁÓ‹ö…íÄé+ì$òÐü ç=ÐÆçùï;ê;ìùñõûþþUüAñƒèÎæ—ìDö•AÖ#}óYèrädè—ð·üÁ ðM0 r|ö¦îøìÆñ~ùÁ² ÷7“ BùÿðÔë¸ìuóüÒUÕ' ³÷âò\ñCõØýº_KÚ ¹gô”ê°æùç‰ïÖûäÙk€ù"ïë<ì{óéþr ß •Âü‡ïîåÄãáç`òû:¡5[–*¤ùÊîeêaëûñPü4› lÞ Ä.üôYïÚðgöÿ= ŽàË DûöÁîëêÍížôTþég-T·±ûPôRïbïûõ_ÿí ¢£Œ'oóºéä-åîú0W Ò™ø;ïèé)ëÏó ÿ AÔ8 QóêXåIç²ðtüø¶ª÷-&úâó×ðåò±ú- v- ^¦ÿIöï=í=ïö‰ `²4Š @cõÕíyì9ïtö¢ ŠÒ} –Jøï{êí<ô=ÿÒ îdlÞ Ìõ;é]âÉã¿êcö(àHµ7Ðüòòì¨îÈô-þa Ð 3‰ Eþïóµëoè/ìôþó ægZƒ "–øƒó¾òÂ÷5ÿwU §¼üpò\ìœê î?÷Hð VJÐ :þãòºì³ë ðÜùÁ?éo( ¿ö¸êæ°çIï‹ü _5¢d þüQïêç°æ:ë[õˆø ˜Ôb Öhúò·ïpòJùÕm o’W;QþïóÖëJêëíVõ \ ¯× ÙzüñõHòÍô<û“0 y Ù(Âù´ï§è æbì¬öŒNÙŸ8 Öüõñ‰ê…èîñøƒ.gò#ù?îsç†æ¶íù6*…ÀÄ Dýdóí²ë‰ñ˜úq‹ QO ð|ÿNöÑð7ï8ò8ûÍ\œiï…8ýuóJîeíæðÚù¢˜ ºz šþxõ-ïßîVóˆû޳  ’êúîîäWã:èòZ° F@>; "|õøì]ë…ïÇ÷‰Á 9‹ø[îåçœè!ïFùŠ“M+þˆõýïðÁõ<ý:I ô O Þ‹úóêîxîô`ýfêÊo™ù[ñšíîjôþ¢É†>2Hû™ïÚè:èæì·÷mùÌûßÏ %óAéØåèÖðàü uàl ÿôÎíˆíàñfû«~ "¬<ú ïé?êBï!ùoÚ åÑX +8ýßõ­ójö¿ûÞƒ Äé @þ8õàíŽéëëáó.þQ ‹è|nÜ÷íîéé9ìAôYþã %åÓ+ Pý™ñ~é?æÞê?õH$!ú.þŸõ£ìYè©ëdôSþÑ·d/Ê?ýPôïöí‚ó6ý©91µÿ O¢ùmñwí¶íÝó?ýƒG 4 »Qþ¸öÍò‘ó øJ @›‡ ƒþªò’èXäÖæoî0ûQ Ñ0lýIûñpì6î}ô ÿK €~Ô(Ôû`ðyçåÝé4óQ† :Z¢Û\nùRðÓìžï*ö˜ÿ—7 ?9 6zúâóÀïëði÷  ¹(Ø ¯ÿFö^ð¹í™ðƒøµ¶ ‚ìä ´ÿ÷Åï¹ìîõ™T S›´œ,öûêüå<æíôøEì?Gðü¿øÌïéì¸îöŽ4 7}—à _ÿ`òDéÀæIé~ñ“ý‹æøÀ hÏúô¦ó öqüåµ š CýYõØîJí´ñ4ù}Qzz*3ý©ózì1ëSð‚øÑ [² \/ø˜ïƒêì+ôæþ ù'ª½äö%ì›å"æ¢íø4‚ü{&îÕù»ñƒí–ï{÷÷Õ Iÿê 3õßíœêWíZõOþÈ ãz Úþk÷Âô¶õEû3Ô û} >!ú÷ï9é¤èí“öy›4íc ¢ÿæôÈíí@ñóù4+H ¬Sõ[ëEæègðü¶ ¹¬j4 ü°ð_é3é-î4÷NÌ Ž;É Øùõò8ð©ó«ú³ë ²gëüºô¾îUí&òöù»µ ¶ òiÿ¿öÆñðÿòœû ¯ž4ã·"üsðîé'èì;öCR i»¥[ülñ÷ëgëkðûÇêiƒÝ¥÷QìçNçaí5ùÞoºžt¹ ^ÿiõðõïÅóü} $ ç ½mü­ôÐïÆðšõ±ýdÉ—.B¦åúüñÙìîQó°ûx ½Ù øIýæôñîÂíóôûÑBýü¤·øú9ïç å}êDôj] Å~í· }þ ôíë ñÿùjÿ銞æåùIðpêê6ðjùo 1Àê R(ýÄöÚó-õUû¿2 Ò < œ,;÷òîkëÍìøò´ýÈ}áÉÅÁ¬ûàòRïµðpöQ f—F ”ûøæîßçºç˜íþ÷àØß)ô øúóïéúæ=ê òÐýû —'ÿûõwïUïSôJüGk_R£ Á,ùûðìyíµó:üï …_¸5&ù>ô´òÿö´þßxüØØ @wõî•êÁësó‰þb ªÓ< KÃöEïLì:îöÔ „Üõû\ïËçÅå\é¹óL òòYøðéìxîÂõ7ÿ@a  lûkó&ðyñ«ö!Ô ,Nm 2|÷}ïÚìïÞôwþž¾ q» µýwöŽò/ôúMm Ô¢L ÖýëñéèŠäoçðï~û ÕB!!_áø7ðçëYîíõÿÿk ÉÍ·^ Èý!òêóæ¨êTó&þü º]sô «Lù-óñnôaûâ0 f •Ðö8ð îð\÷AC rò[« ò]÷Wñ#ðòòTúŠÕ 7d¾ûþÏõ¤íÚê.îÝõ¢>Ä2­’öÈê å[æÕìøåó ÷iúñDîñ†÷m³ eäÁ¿îýŠó4ëùèíì\ô¥þÜF±E ÛÿŽø2óAó=øóþ¯ê z öÚüÚô¯ïÌíãñÀúg£ ¿¾å:ûòí-ìŽñˆûÚO¢µ L9õ=ì`è¡é¤ñ6þ® Û† ¥"úmïªéàèªîÝøóÉ D ©ê÷]ñ¨ï%òÔù?í 7£cþÖóíŽëCîÃõ~ÿ! š Û Žüü÷4õÿ÷ºý$N„± äÕ÷²î”èOè-îÍ÷EýI5Õ»üü2ó§ììñ^ú˜ÐnŽ M3öíÝçé¦ðuûR·~ü2üóSíQíàòæúº Y° [?þõqðïÄòû9í ÄîøbþÞõ¡ñ&ñ@õøü‰{ ò Ñ iÒû‡ódîÛî˜ó®üi>GÝY šûšïðçç~ëúôË «Óê»2þ­óuíÀíòqûÁÚÀL6 |:÷èì¤çgéÄïòù6£@¢Ÿ(þNõ«ðçñnöqýuy ¸ q òû²ôoðñ#÷]ÿ`x­Âú —×ø»ñÒíqïµö¢ÿúÔ “ú ñë‰ê–ï^úi‘° þò‰êãçžëEõeå ÙhÜ’½ü(ó4îáíóûü,Ïg€Ö '¦øãîê+êšïMùåà \\¸ ?Ðý:øúö*ùÇþmÐ Ó • \ý;ôÛì•éqìºó^þH µ@ð azùkñ®í4ð ÷¿! † í•¶ùÕï*éÔçgí€÷"Ê·“ØÏ ÄÿôìéPí`õËÿb ËÓxöûÁóÆî‡îôüú~~{½ çûùó©ïŒð”ö‚þÅ ö å lžürõ£òµóºøÌ Ñí£ ~ÿ*ôëøç+êHñÿüøìvbê E¡øcð/îñ$øN Ò¡yÆú3ï;ç<æâê0ô[¼ ‘h½ ÷÷ÜïÙí`ðoö¡ÿç¢ Ä  ÝOûô\ñèóñùÁ¥ ´ë-„þòõ‹ïjíbñ®ø£ né °  ù„òjïñ¯øÕÚ ]gª álôkëç©èÕð ümmåa` ,÷Ëï íÃïcø1@ GŽ×Ñ ÛýÁñÑéÿæ¿éQòýUê€b Cìú2öxõø2ÿç Y & _eüeô=îLíQñù˜â l.oæ—þùõ¾ïïFóèú ^ ¦ÖÑØþnõQîë7î™öã\«ø¢ðcölìÆæ5èpïìù›å~ ÛøÈðWí!ð®÷6P r[¹ BÿæõŒïÿìIð’÷æÿ; « ¯ 0ßûöÈóüôõúD“ ÙµS ù†û òÇì[ì[ðxù„š ‘J!ÏÉülóÔîAïîóPýÑš¤¾ ÿÀó]êçñé§ñ9þë :×î%Ô?û"ð’ê§ê.ïRø½z ÑJ…§«øœòÂñˆõ*üo˜,t«üîó îÐí2òùæb Z ­ pþÿÉøÎóNòKöúý€4MÓ Ò‹ùðkê®éjï…ù’—=Ì™û½ñ¼ì¸ìðò.ý옭ŒE rÁõÄëäæ~çî¢ùa=Ö–) ªþQö9òKò!÷’þ‚,  „ éûöò‰î&ïßó‰üs+ \ó'ýÒôšðñ)ößýû Ö & ÏzúMó>îîôÐý 3”ú~ïüçÞæŠìUö¥!Ý?µ°šüOóëìiìòèúœ¼K Tøõïãê·ë.ò-û`7\ãü MÎûÊõ¥ò…ô³ú®I® d = øñ/îïëô‘þÜDA_ üqùÀò­ðò<ùÙû Àw lø î‰èé´îŒù,šï•í_ ÕþròVê9è6ë©ó?ÿ4 ö7BK!ý£ôNð<ñ÷õ“þÓ=±•Ä Â‚÷ÆîÌêjì¾ñkú1ý <½ ”YÜú7öÒõìùsà xë ¬ýôeíŠêRíOõcÿö M¼Ý ΛöæïíÙðIùru rÉg0üù¨îÏç#æÔêõ5( ^°× ® ÷kðîñ°ø‘ä tN‘ "´ùçñËîøïŸõ·þÄ!Ò  -ùæñïDñ¿ö¸þ¯N ˜ ÿ°5û$õpò*õ…ûQ´ Ôd  ”ýÙòênæ¾éÞñ8ý‚ W2q Üá÷Æï™ì ð«÷Îf 8¬·IÇûÁñUê@èøìÍõÝ. ±ò Ý ¢Ñ÷OñrïHóûùØl P · iœ^øÎòOðgòeùʪ ÔX­Ìþ‡öÑñ¿ðHôü( *´ ¡`þBõsî¯ì˜ïœ÷«  ’YHb•õ{ëç(è×î)ú€ØW‡ ~ñ÷ ñuï‘ò-ú¹Ò“ýMýòdê†è–ë)óïý¡05Ø:«¡ùbõËõ‚ù¯ÿ¹   c nûô+ï›îpóoûÝû á˜[ñ¬û|ó¦î¡îWô$ý·FÖ] $ÿÿó8ì÷è:ë¢óHÿc ‚»je0Æø¢ïúê­ëPòüBÈ ‹: ¡ÿŸõcïí›ðžø¦ &Íâ• Ÿÿ¸õÕï9îÈð•÷žÿ}% X i¼û¸õýô øþ^œ `.Û Ãùð)ê²êtð­ù.™7ø‡}üTó—í.îÊóüúC–Û™ ÍþWôéëðçîê'ódþ) NÞȲ‘TûÄñ.ìúìiòmúûb ” ¬/þ¯ö~ñ:ð„ôùû8m Œ˜ üüßõµñ‡ñnöŸýy9 = j ¡Ûû3ô!ðQðýôMþ·m=ß‘úãïºéîè™í™÷• ÷¼MŸ¤ûÊòîïQõ‘ÿ] OvŒP NõZë¹æÜçDîgùdÚègúļþðöió-ô]øÿ]a { P(ù(óïÜð†ö¥þ R@d û(ú‹óIðXò‘øŸÿZ® –ˆù+ñtì3ìåñØûYL艽^û ñíêÆéýîÉøéGhEI.ëúòLí.íéò üõ¶a ê£ø"ð÷ëìqñAúT +-î DÐûc÷×ö^ùQÿÍ eÉ •Yþõî¥ënîùôßþD Ú"b ù,òðó…ùªk !Gh ¾÷ªîçè•éAð†úL ±‰NË ©þmó?ëYéoí@õØÿ ñ#\ ;@ü±ôðöðöIþz33°ÿ ãÐøúñŽîkðIöyý7 J Ç eý÷Mô.õ¶úíš Ç>ë•ôþŠôéì ê$ìµó=þ÷–æ ¹ö£ð‘ïKóêûÂß»LÁàù\îçßåaê]ô] ºå/* UKø…ñ¶ïFòù¦™ø F Zîvùó½ð9óù¥Z )ë¿Æÿ¦÷wñµïãòùí)Å Ä ŒÄøBóÂðAóŽúÉ" ôgßì lþyóýë¹è„ëôÿ> “Vø ¿õ ïˆìØï~øa –Íð/ý|ò­ë(édìÏôþþä'%v- kéøïô:ô¼÷¨þ ” E iªýaõðrï’ò¬ùB„ æ`¼¡ÿ¢ö¯ñ½ñWõ7üž§  ? Ñü²ó5í½ëVðýøœªµEü§döDìçdéóïIúã7ÉlÆ |“÷ÅðÔî~ò­ù^G >;+Êý‘ôîsì2ððö¦ÿSA Û Ô CÐüG÷‹ôö°û„Z ý% pvû0ó’îî„òìú Lòè PûGóÚïñ,÷½ Æ‚þÂòêçÆé"òþÁ ˆÉÁ ûŠñüìníÚòëûçÏ ­ þóõqðþïØóZû{ ÁÔD þ‚õüï¢ï;óºù¯ä è @dÿSù×ôçóÕ÷þ¾ =3 ýµ÷¼ïë“ë òüÖbI«E„£ú?òcíËíDôäý ‘ÍÚ ªôlì?è²énñOü¢Y&=­NUüõ/ñÁñ`÷ÿ{! g  ¶;û óÕïÓï ôUübä ÄÐ8 wýSö8óµóÃ÷Ùþlp € AŒùøò|îOð_ö½ÿò Ùmó!Tú­ïéäèêí$÷î× S'm‘êûqóÈîñï¡õ’þ" 6ŒŽ ûmöÚí‚é$ë^ñÉúº%ØÞ ¸ÔüÓöKôeöoûÚ” ü 2<åøò—ï¹ðoöXþ{s 7!ê½øtó)ò2õlüò] 4Ó)  [øéîÿéuê9ðÄú¨Ý‡þN —ý¯òDì1ëGïøpb +W <þúÎò-ï€ð0öÿf îË÷î ¥‘øðWìoísòÒú" ¥ ” ™¦û‡÷»÷nû´¯ ¯ B<üôüíÎëuïP÷éÑ ätF l•÷Kñ#ïøòãúÜ ï÷ ¶xø,ï€éÕè¹îÿø“ƒmGâû ØþOõï<ísñvùdÉ ¯L± ÐÏù(óñïÞðèö¡ÿ*L’œê «ðùëóTñgòª÷ŠþVf k°ÿUùPô`ó{öØüÉ+©y Äþ.ôìKéì6óÐý:50ÿ¼ÿÍö—ð”ï¥óƒûøF-lKQùùÞï!éQè+í&öè¯ ?L —ø(òñjô³úݼ À 5 ÖEçø®ó—ñôúŸj ª\n *­ý“ö©òQòdöeýÆ è  Psþ¥õ°ïVî„ñfùÏŒ Û2cu ÔqõUí`êìãó:þ rÖݬþ2õPï“îzòüú¶L9@~ýÊò÷ëdêcíöôëþÙ17J ™¡Úùtö÷gú8’– † •ídú¾óRï¸ïÐôrü¡ð k§jCYýÒõñŸñ¾öûý” ’ ü óÖì·ê³îÄ÷¾à Nþ*Ф÷1ïêêÚìô\ý.Â"…ÚxþÐõðHîòúk} àõI €ÿ÷Œñ¦ïòÊø©ÿõ p ›ÓùÛõ~õpøæþä< ö œXúàñ-ííò¡úZ î7- rûÿó‘ðBòü÷êF mrše¡üVò_êšçë?ó ÿU 6xK,ù«ûñò†î†ï¬ôëü¤{ ½ å “ýªöçñ<ñ!õæûNò ×Õ ƒDüøõ^òæò÷þ%— ÿ » }Ýü ö•ò ò÷öãþuÑì¸" ‡ ùYð ì€ìûñ}û“¼ÌF ɺùÔñ¸î?ð«öÀÓ u¨½ ¢õìEè™é1ðÌú¸«ÀEi^þ²÷õÉõúãâm ¢ “èÿµøFò^ïFñ}öfþ‡…á-ñ =tüôõAó@õú›sT F ‘`'ø‘ñëíNïöõ9ÿc ^³ƒƒ]þù™ðÊê±ê‘ð·ù6½ µPh  Àúèò’îïåõÎþzÈKm] çÌøþð«ìZíöòÇú([ i  ÌCèú9÷¢öÍù!Â6 7‹ Ï+Ë÷:ñÊîpðö£þÂÖ ËÆ Òpóø×óGóÃö•ýí qé žÄö.îlé¥êñ‚û´¹‘aó þåó#íìðþ÷÷M +ç ÄÇûãô;ñ¡òÿ÷öÿÃÎv ’MøÒñÛîÓðCö¥ýYy ý * Õ8þLù°öf÷'üÖ€ £Ó¹ gjýôðîBíðu÷º^ ª9æ 8$þ–õÚðið¦ôRý5}{%ÆUùïbé¾èsíA÷Äî õžç— ýø¾òiñ=ôûÖûa i n}ÿç÷/òÅð6óùð{ IžJ 2<úrôíòÙôuù§L÷Åý·÷\ó„òqövýþ¹FÑæ®ðýýóÌìaêúí¦õiÿŽ |>l?—þÚõöï´î&óKûúkDÙI„üó¹ì$ë6ï÷öG€ N34 Åžþë÷ôþó?øÍþ´› Ð  X+ÿ¬÷ßò­ñNô¦úL/ 2 h i6þ˜÷VôçôÖøŒÿT Å 0öúüòMí³ì;ñµùË36Äd¿ "÷}î#ëTíâó†ý¤ l&ÖþÎö ñFð\ôÒûOº •4´ üþóñíôì¸ð¨÷†m" MK %Ôþ±ùÚöø{ü#Á ³ RÝíù¸óbðšð|õ\ý—Ë ®Ú6 „Ëú|ôÃñ óù‹Ž ‰U× oqüEòŽë•é¢ì%õa ÑŽeÀŽúõòïzðYö¾þ|" Ë Š Úûôžïqï_ó}û,< Œ•€ÿÿøRóWò©ôWúüÓNŒVÜýÃøŒõ1öBúmXÖ| Pøðrì±í€óüð/ú\\ ·§ú–ó!ððñ%ø Ö ©|®žAþô«ì’é@ì¹ó±ýo¼÷ë ôîú@ôñÐòrøÌÿv» ‚ — ©±üÑõñññlõKüÖ® Œæ ô´üA÷#õ/öú¼D U \ùªò×ï·ñV÷¦ š 9úÆðÑëfì{ñ8ú+% »ˆ4 BÍú‹ó‡ðµò¼ø¡ã HÉ úþëô¢ì$éNë ñûU' U: sþÉøžöøÀü‰÷ƒ à ´îþ%ø%ó±ð…ò?ø€ÿ & åSjùõ»óÂö?ýhÈ †š ”±r÷ðµì­íÒó©ýÎo‰þy‰÷û%ó>îÅí’ò$ûŠ ¿Ær tyø¯ñþîšðÿö‡Â ö‚¨y ÍEúÐò*ïcïæó-ût ±‡sÿú:ø6ùËüµ' > ?Ê [ ý_õÃï2î9ñ€÷³/ß© M'ÿú÷<óÁòÊö ýíL ¬¡ ƒ…÷•ï+ëýë#ò…ûI»®«±üôšîúílòóùÛµ œXb ûõ$ò[ó»ø!àà ÂÄ ¼$§ùÅôÜò‡ô{ùxÿùað{fÿtù1õ¤ôg÷OýT§ ‰ªÒc`þ1õÑî\í.ðÇöÏÿ!È ~B  Æý&ö¨ñ2òÒö¢þ¦ˆ¶Ž ðpøÒî%éSéXî:÷Dü ?»Ù ²¶ù‘ôóóÆö<ü7Z 4 |þýñ÷ióVò“õnû¸ œCb @ðþÃø¯ôCôá÷_ýU~W P^Pü…õpñÃðrô/ü,o j˜±, OÿÝõ¤ïŠíqðÔ÷¨Ñ¬Ãë óûvóÍîxîóæûÇvFÞ;=Fþüôï]íTðW÷pÿºì ò ð ĉþHù÷Ô÷¼ûÜiÚ • ]ûÍôúðLñ7õúû> ÜMt œŠý£÷“ô°õ útO¯ Z w ¹úùeò„íèì”ñ ú]hì€PB ƒ”öDïDìÌîõrþ‰¨ }E ê\þãöóñâð©ô¸ûô ½9 &ýöòñhôfúðÁ ÀB…ú9÷»ö<ùÓþoù 0h Ãìçùóéï´ðõ¨üÞS Ïî  :°úáô]óãõ¨ûß b'è €rú•ð—éèÕëÜóÿ& 8­‚æ›ü4õ;òióù÷(ÿg j vXYûíôñ·ñöÒü Œnr ¢uýX÷èó•ô8ø‚ý’䯵üëû÷jô*õëùØø#ãòg 47øiñ9îxïjõÑýV~ ¶È Âç÷’ñ:ïñ‘øÊŸ ‚ôÛÀ ×õcî-ëÉìEóJüLÈ [ f Ž2ü÷Yõ&÷Xü®`  Ê–ùšóãðÿñyö¹ýT ?} æÌŸü»÷-öøfüMdÈ ? "þ*÷õñÀï*ò¡øZ¼ 鹈 „Oøðoë4ìÚñdú Ç ñÇúƒôzñPóZù}ø ú¢" ËÿÚö/ðììîGôñûù e V Ëdû#ø÷zúúÿÀ u › í4ÿö÷óhñóPø—ÿR; Ï W 5®þ„ødõîõ“ù1²8 “® Y‹þ#õ[í#êìJò2ü2ÿ5¡ìý0õ[ð#ðÚóûd¼ ú ; O)¬øÊòúð~ó=ù µÊ¸• †yù!ó¡ðòWöÌüA0S˜6GýsùÈ÷˜ù,þØÄ Ú ÿ ¡ yüUõ×ðëïsó@ú† [Š ¶û¢ôåð=ñ)ö-þ¹?_2¨ ""ùÈð]ì•ìÝñ£ú*¸ öÌ œÉýJö;ò òöÑüØ» ‡ Ü ý_ÿ(øýòŠñÄó–ùRwÇ ¾\ ,¹ûœöƒõJ÷“ûÓÈŸƒ+µûîö»óôRø+ÿZÂä´IüðóÖíUììïëöÓÿT· / PHýtöò7ò ÷—þ2ŸG‡U [ùrñSììãðµø× 꼘 ÆþÕøõ9õ%ùÉþ¸S § ±ýhý‚÷ô?óö ü×€ Š ^ «ýÉøØö³÷³ûÖ[Õ ? àúø‘ñTí¡íòñ úIR Y-Ëm (ð÷©ñäï6òhøËº ª  ûÓóéï–ð%õý3v¦  ýÁô°ïïòEø{G  U[.þú„ø;ú þ;B– Å H3lù8ô¦ñÚò¾÷þH Í^ Ò¶Oú"õ*ó1õÑúéåÓ X— Ôùú©ò£íÞìÞðíø‘Õ ’S9 \TøMò7ðšòÛø—ëí ‚ ÉÍû‘ô©ð ðŸôéûU ó*“ ¦<ÿšøüô‰ô-÷6ükepŠýÕø¤öø.ü?ýû Úø Åÿ¬÷üð¹íGï’ôEüÊc ŽÅ ÝÂìú²õúóãöóü ¨÷ Ôäúøñ“ëµépíõÛþÅûìb† g¥û¡õ'ó8õ?ú¥þã 8 Fs®û:öûò2ó`÷œý3æ ¯ è O˜¶ü³ø÷øûüTÖŒ áÕáþFøóSñ óYø„¶Úæi£ †Êùäòëïÿðöÿýí ­õ 7ŽÿÈ÷AòöðßóŠú³/ ÍvìZÿ¿õ‚î°ëRíó”û g á N # jšýsùøvú¸þ6gô äÀ~þ~øôŒò½ôÃùsh + ; ;‚ÿ£ùèõLõXø¹ýåY ¸ < ÁÎþ2÷Òñëïò^øþÖ ÷äâ 'cùùñZî(ï|ôuüÞÓ ép xÑøÐòÈðÓòøøJ€ Ñës }þùÜóñÑñö4ü!š YÞXþSúþø‡ú_þ´ < Ü Ã ™býRö3ñðÌò>ø•ÿŽ V Ç W;þÓøÃõÃö,ûЬ*ô° XYþiõVîÿêí óÊüþÃÊj^ý€õ»ðÇðÞô\ûû@  d wâùãôìò:õ©úu~Š ãË ¶ë¶úPöÂôéölûsy•7<þù½õ:õÏ÷–ýœ¶ ÚsÎ kÃý öVòµñÉôHûç: , > ÿ/”ú"ô3ñxò ÷ðÿÍ›#õÍ ÄîømðÍëòëœðù‰Š Ü Q„ùàõÈõÎøRþ¨ ýýŠ÷Àókó¡öhü§ Å x» ù‚ÿúwö4ö÷ø€ýªb*°ú€õóò‹óú÷LÿtÁó•9Šýü¼ô¸ï®î?òbùÆ T–æ kûLô‡ðºðlõ^ý!Ì .à‚ ä¡üÒô;ðYï¹ò@ù, ^ ª½Üý—ù!ø\ùný þ  —öbûFõòVò¤õ¡û¶w½ ¸ ^FÜýzù/ø@ú‰þPà … Ñ rþÿ³÷•ðPìÔì òYúmâ Ò1É6 Ú÷÷ñ™ïVò4ø ®a F C âdüÝõàñ(òö;ý,3 Ý¯Ü gýëöîòâòbö¾ûì#W -?û+ø’÷0ú(ÿ+ ž b *1›ù‘ô”òùóãøàÿ”º Ú ´ bžÿàørô¼ó½ö,ý8* ˆâD $¢ú›ñ²ëê)îöõùÿT LF" Y`û¨õÅó¤õÑúVò I œp³úÆô»ñ²ò÷ þÁÑ *í ¥þkøUõ´õ¹ø~ý^YùÕÿûÈ÷ö}ø‘ý%» „À ›ÿ©öÍðKî(ð4öSþ“Þ ,W ñ^øhóòñÇô‡ûäÒ C:±yØýºôšîIì¢î;õ·ýj ám ¿æuû~÷möÐø*þ6L  : 8'.ú§ô>òñòéöPý¹œ  Ь©üŽùwùÅû uS p r>Uü­õÁð†ï¿ò?ùíþ }æàq d2ùÉñWî¸ïÎô‡ü [ ÷ ¢ côÿ¼ø~ó$òFõŠû«Ï <Ijxÿ÷ö¬ðTîtð¾õ ý¡Ý Á Š [º¸ûŒødø\ûíÿï K ](MþŽøñô+ô¹ö!ün%ß å }Âü_÷øôýõfú0$ 5º ^&þ›õïÅìïoõÄþAΔð àõû˜ôñÑñfö¡ýû”  ) ¨˜þv÷fò_ñ]ôºúø {‚ |²ú°ôKòUó÷yümž€ƒÏÿIü¼ù^ù'üæ' Õ >^ûåôéððtôû¦l 8  d ÈdûËõ óôYùë¬Ô5  Ëöæï¥ì÷íôßüÛ äK« ­üCößòXóî÷§þc« ¯ Û ù ÿ'ø¤ó4òGôËùµ¬   É'ü1ùãøûrÿËwí„®ÿú+õ—òÀó+øÿL3Ïœ: —ý`õ¦ðKðÖóTúkE Þ Ó Ôçtúsôµñsóàø»o ¿ ‘øØð¹ì}ínòEúcü /¶R øÿZù>ö³öõùÜþ1»H?ÒüW÷Êô9õôø±þéE Ö ç føûü·ø4÷´øý‹y  þ¼ÿø<ò ïðèôîüó­ €Á\cþiöÁñSñ×ô˜ûm Ó L …brù¶ò¶ï)ñöÒþÑ7¸» UýoõÙð;ðó½øQÿÑ+_¯¼žý›únúþü==: £ + ¬"ÿ¹ø¾óbñðòÆ÷Mþ>• ° o òPû÷~öKùÙþ'Æ Æ É „×÷ÔðíRílòèú`ù o)r0Cÿt÷tòNñºôVûØ« Ì Â í 8dûõpñrñõWü‘Ý Š j  }þ)ù£öïöBúÿm{+êËüø´ö1ø:üZ›Æ #  zÿføóñéòÆ÷ÕþÐt   ØPþøñô&õù›ÿ‹WžØ× 5lùáðwëÔêõî¡ök§ Ò$'4 ”oûRöÂôÈö_ûe±T  ÷RTúÑõ×óSõÐùçÿZ8 æ   ±×>ü€ø/÷àøßü”ÀÃ¥25þ¯øáô.ô öü;ü Ø0C O°ÿä÷zòàðó ø)?0 t l z ý öàñîñÚõýñ× øÎÊ`8ÿö¯ïrí+ï‚ôóûÉ z ¾×üùúþü®Ôm ~  –oþ}øðó˜òÕôù«ÿÄÈ B óØÿhû§øìøü¬ŽD û yIxû<õ?ñtðÞóÖú1B !ΰ þ‰øeò¶ï‡ñ9÷§þ8û ã ¿ _ÿøoóòßôûx ¡Ü9 —,:ù€ô½òšôSùéþ¥º¸ý{ùTøÄùÛýb;g M èýøkôãóIöLûmmK f D5üò÷öø>ý¹% ¹§ Þ>ü7ôkîšìkïüõÿ}zÒúÌ ý“ö.óÀó€÷cý˜ÚN ¨Ø«üJ÷êóÅó?÷:ýq ý§ x—“úpö7õ(÷ û²ÿ§Ršæžý“ù}÷¾÷¬úïÿÐÍ ˆ Á í üEö_ó®óC÷eýÿL í · UJù8ôÅò×ôVú ó ŸåŠŽ =løTñRî ïÎóû3l 5 «  Z ›(_5Å|ªÒö€/RÇNž$2öœÑÃÓìï²xú óˆókþ¿ í%à*ÛèhÏøÏßðT^ µó™ê€ù¥ò[ùËþ P $ÿæælü4ÙÞ Õ÷!÷Íü ­X IèëÕ?ÕùñcÙËq wSøþ.æÜÔægñÆéç±÷ ß!eT· ]˜¶ïÝ×FÛŽôóŒ Ó]ù; ßõýêóƒþ0øêÖã?ñK ôÛ ÙŸÊ é žÔø3÷ùùüäðºæVîUýݤú¼U›G*ù5èªîùäùžò•ïŸ…Ì =ƒ +m€öißÏÓµÙÀñBÑ1 …Á)©/bwýî$é0èyàaØJ昄Z",ø Í"Ðïëß·éÒüµcp_ Õ`qúCøËMlóUíçô-÷ ùJ¶è be ¦Šë$àŽæ ó½ýmÿ2Wü#"¡€ôôê”ïÆîuéKåHð6 M!"ý… Èó‚Û—ÓßßèõKÿ ÆË(¿%|öûØõ[õÆòµæ”á!ð“. .M ë\¦×ïªëú*Éÿ÷iô â  bÿñúgÉõÉ÷|ïeò†üšútífìûßxŸ‹Á5†Øñ_ÚŸØšäað%øëûl Ö","¦ öCòxð è'áÿâ’÷jØ)ÛLÄgîøÝÿÝgí2úˆ÷Îøèg™$w¤;ÿOãHùìêWìžúFJû¡úH Òj{û}é :súŒîÀð#ÿÏxr=nª füæòäò¤óhç\ÝRçžÿ$Ñ#–ôër Ïê†Ø£Ü…ævîqñ6ú(Ô(rèœû0ýòô³èHâ+êÒÏŽN¦‡ô¶6ïnègî8ú¨ù†ñæõD L rä\/ ¡ýBð™ôÛûhû§ò ê|õÆ LlÀV JqåìÊâÉê¨õúõRøI=B'$"ª¢­ùäõê”Ø|ÖŸç Þ¼½ ÷"S¨†æËÞKåyê ìgìnú7Ò ¹F þÀÕŸöêç½ô¸r aîN ÀSòý8õøöèþš}òÜéñæý¦Q„ÿG¿f¸[îøúö‘ëÊÝÁÜ0ò Ö÷ÜŸŽ"í,ü¾æ~á,ëîÕë ôLoÂ(OÕ ï¨þlöÌâëÓ«Û›ð(·³Ï¿ “ Žûçê±ìªððFìgíYÿH ïc /Yú-ð{ð¦þ _ýs÷ ü¥ Ú8 Få žM?ëÈä`ëôj÷óAúøt!‰&š® ÚÕ¤óëá©Ô.Ýõ(Î Á²8%x$UïöçLèÍîëë§÷} ¥"="Î Œâõ_ßÙ¦çÓú,V‹ùTF øúuø€þ³ûeódëãîuÿÒ¿ßü-ý ÷)ÖüTýEúîë÷èÛòï¼ ²¼Ýh ëfç.ê«ì`é*èËû¯ˆ$L"о VKîAÚSÔžåÎø«Ì n'#³ä-óÔìúñðeéôíoüzcþwò òjà½ã§ò½þßÿì÷ãü Çæ>MK + MÛôVêbïQ÷¶òjìÏìõù°“ % _ …ï‡áXã/ðåÿGþ‡å"ÔVûfêÈæîå9åáˆé†~ §Gú³ôýiçtدݹñ™úûÿÿ} ™ uüÜôÄ÷»û!óéìÜóL  ]U Ë} ù`ñOøêýý òdédô2 VÎg ž; Ëú7ò‡öÛóØæái雚€^¦¢"þ„ç/áëçDõÅýþİÌ&$± Þõoï‡íméžãàºï{ r»íYçþsë£âíbùý÷×õûe L‰ÍƒþI ™÷ÃòæøÞúÍôaÿá ê­ ~ž Uvû¢èWãTï‰ùÕþ€\ ÎÚ&T8 fü}ö¦õ¾è Û^ÛYì Û§žg•õ>â¥áyêUõ øÂúÔ M&àü ù!ùô‘êZà*áæô,¼ š ‡ ½Q¤ýÜõõô=þiüðëÛï$þxsû¯ó ŸuÿÜû´ü"ü,óéå¿êyþ b ‰ ¶>'¥íµÚ'ÝÄéAðG÷±Qø'±*O7 týiøÚï‚Þ¦ÖÞÝ_ó™ ~-ÓfÛ¢ïkä©çæï8õJò’øË tqsuàRdýññyç¢ëvú ÿ ü9úSÿtZ èæJ ª }ÿµîRèÊëHöZøàô(üå ¦ßÃŽ'û?óå8Ý'ì7É)¥¢®«þQå ØÖà1éì¼òò9+'Ö¤ Ë5!ï^Ý£ÛCçû¾ØZøÀD.õeô·ø ûV÷Nñ‘ùO^ íÿþö pœ²ú_òÔø×þš÷ ï`í¼ù) B‹ ¡¯Læø}éXæ}ê£î÷êRîoc$š × àø™êÉÛ[Ý9ñ'ä ÓæŸ!¥úå¯à èGèè¡ðìZý!ëÊ ï [¹ó‹æé”ôÿ¾ücöýþl 4ÿæü=¨‚öñØú×µü1ùîpWâ z×û¢þeøÄéfáåËö'¹ ]"‡#·õxç¤äÿæVå’á.îmÎ#$Z|‘ZökåóÚ:åD÷¤âÎ ¡´fØ õ÷ìÇîñàìåëQòp„FìÛ ? °øIóøAÿËþüñèìæö +Çz Ã'Bô“ñ÷•õìðIï¡øcHh7 áÜÀïß*Ùþáfõ•È©“ *!$? wõvìÆé™èáuàáñ ì)>&ï2‚øéëæ†ô¼þQØÿÓB«»ö÷kýùoñ‚ð öá'ÿþ}DîÛ (O„N—öæZå^ð­ûÊäÛxJ<ôjóÊò&ëPå§è,ý¼ŽBé]~êüÛ Û&ç”õüzÕÅ"(í3dù?õoóîÛäOèùw ,E âš È (øî#ôŠÑrüÑø-ÿ{ ro?ÿÿà› ÿ0ô£ðKôùô‘ïÚ÷OMÔ“8s^-°ëýÜšàÙê^õ®ûu«U!";Óö¢ôîqä¬àë†ÕZÁ„c«¡ýèß2äèðèöø1TÓ´˜ SïþhþÆúºð–éñØýü rþ˜ ¾ )Èþ2üx%þ%ó§î2ø¶•Òÿ…b 2ùuó óâíMâÁâ;ó¾xؤ/iýMåzÝ÷âtêÜðºõ'O!^/Lüøzí¬ä£ä+ôû [F%^¹ £øêÎçïžö,ôPôÑÿ΂¶Á 5 a|õñ¶÷”ûòøŒñVðÇüéQ — O[ ^ @øë/é¶òÕø;ø€ûò-!ËAüÜõùðÍäÂÚ³áðôÜ ¥Ùï' ù“ö€ä•ä’ê§î)ñ®ö-hAnªÿÿyø\í«çÖìŒý[ Æ = ¦ˆ0 eûcõq÷×ü*úâððŸø¯]äÿÿ³ ‘° -ÿ½üŸý÷!ëâ,è?ùR P ׯôXé¶êgððºñü· à ¸¦–ÿòøïàPÛEç¡ú! «BÐt; õñméSíòð ñèïi÷x†úÛÎx§Áý óÊïr÷ñ_™üüú%ž · A§x¬ 2îû²ïší"ñRõ”ôôÎÿ™<ýzÚ)þöð´áúÛBè“ùªZ ­¯¢²oïð9ë,ï8ð íèñe›1!³5oÛ÷Wé3Ý.à îýìˆ ½¯øeøü“úôÇïöœnÅÿÖûYj ¬ „Àý*ý7‰è÷áí­î˜ùÎñXë æó @úmïíèìéë¿ékð\ e!ë 9üÑêšÜ=Ýnìöúá& «ÏM}fú]íËìÑðçíÌëJô°¨ü¶ b áNüCíŠæFí6÷˜üöúŽú!NWk ‚ß eøÌò[ökøˆôêðÉó‘p¬ Ï–Ó µÿNî.åMéäö &ú n»Y† ¶öóícëÔè¼ä~åäô ³!øÊyܾö$å%Ü0ãðeùóÿŽ•Òªrú¿õ(ùuù ó™ðøÓ1„ sZ>óÃÝöéöÔüöþMùðÁð¿ûCÂ'F#âsDú%ôFó_îOè’èíó¾õôb鯒lö¥å5áãéã÷#¯AÍ"èàµöÒï8ë#åßXãd÷O ¯fBv† ¤úàëâè{ðöôöûø  ý· Ž®þ¢’[ÎøÐöµûãÃBû5ùÛÿ¡ 0¥i+ÎòÙæ éÑóüdÿxÏ %Ä!K"{û öGïåFàç­ùâ ŸJ®·öZ‡î×áTâ¦ërõû‘j„õ˲kû)÷°ñqéÈãFëŒü9 ­ P H ŽÅw ‚ý;öYùFþÿúÆôÖó.úg7Îüªü]\r"þâû0ýQü1õ ðTõW Ê ¢ Wª øü™ê÷à:å¢í„ô ú&Ö9'½&(Íüoõ êˆÞ‰Üjè¦ü( Gx:ü?Õî·è¦ì…ó*ö‘ø`U‘‚ž @Y¾ýŸ÷hï§ìÏô§ÿQ ýŽN W¦ #T«.¨û4ñ<îÃó˜ø÷K÷(ÿ@+a ÉŽþû]òŒç_çKô†IŸXIO böäãaÞ¤â6è²í öR÷U&à"&Œ O%úcírãÚãsðxO Zi§ ²ûØñ5óeù¿ûdø‹ø×L 8 Õ¹?ÈÄþN÷åöÐû±ü÷±ñ”ó.ÿ %?¸ª‹”øTì©è©ë«íaîößRú ÉJVGÜöHè{ÞÚãÂóÓ\ jm¸X¢Îóç7çué'ê*íÛö£÷2› f>ý6òIì²ïÖù6 ÿ þb™ D '-ü û~Ê‘XøäöVü,¨oüáþ` Î:™äÿ9þõ6é8äsìü¼„¥$ H÷ëÀæ¶å7äöçšõ :|ƒœ§ Ñ6÷jçzá:êPùc: ¹ eÚò6îrð@ðƒí‰îëøùxò Ža l ¬Ëùe÷÷ú’þ û7õµõTüæ |F0* U,ö½òkôšõÆó÷ôi#úlû¿ y“ýäìUÞ…Ü!éçøQJ ›Q‚#Dæƒ÷±îrêcæ\ä´ë\üXªeF[ ¢Oîóê/ëÑôàþQr¤ •Q rþ÷´øFúßõ ð¹ïªø1f쎡nAo [rMÔý”ñÌéúë„ôƒüŸÿVº 9þÛ9÷gñÌíbê×èð±±ñh‡ œûésÝ!àíOù¨) Ḡ{ 1!yøÃóžï8éÙçño† ÀÏ † Z N“ö­ñZöŸüÿ.þÿü  ÌN;nýïóTñ`õ÷ ô(ó¬ùçK@àø¤Ž <ü²êæâæsîõúý,½#\îÀ÷Ïñéë(ç8é#ö»'ŽOVÔIöæÝß7æ(ñ_ùVs Òmˆ‚ TžýnûöÎîýínöÜÓJÿXv { ¢gþÌþ_õQü5ö‡öüöÿJ‘8ÜŽ…úgõŽò¦ìÊæªèÉôð9檪ý °ø™è_ãŒçTî@ónúÚ¹»n °þ"øÜñoê?æÙëDû# ’;§|þ»äô¨êêðñôëöÞúJ& D‹ ƒ$¶º§’øhöùÒú×ökñ¬óóýOh ¬ = ì šì ú¤ðýïÝóÝõ[÷îý‰ HŽ.G$ý ÷âîåá4èžø¾ ZÄY¨ôÿ ôŠèãæ’ê¿îñòcüÆ ¼ò1™XÿÜújôÀìIê*òÿÛ, p < ɧ x¼ùÞöAúHü‚øôêôÓúôIáŽü ª×ì ?·3ýŠõVëæuì,ù˲ Š <«žÅAõAìVìSïò‘÷èºu(¾]þßõšéßðÞÞêÐûB Pý¤[Õõ9ïÎî‡ïKï<ò\ü ¶Ô#~Ê™üwökõÏúþÿÿüýoA K O³ë¬ RúûßòÎð#ôöÂõyù2“ÀE¬ –˜ú íÒânãdîÔûŠ â2ƒò*ÆñëêhêÜëAïvø‘ÂpOk›jöéƒàVã®ï;ýä Ž6Ç@9züÛû…ûÎ÷>óeôÓû£YáÿZþC¥ Ò-ômÓþÿ÷4ó[õQý°€Ÿé ÉL©Tùïjì–íÙí±ïYùß ôÚTÙ“=2ö æ&Þ$ãÌï+ü¿ 5_¨ë °ücò„îÀìöëµï‹úÐ X7J­ # ]kú¿îé^íÑõ¥û~ý1Ãg îðUK  ŒÿÕ÷÷rúÒú<÷¥ôKù˜ À ( DqÙ­ø«înëÝðúYñ¥“à»ËÌö~ìHèæ3åë ú ‚}^åÑÕóÕä«àÈç‘òÀúñ8 T»ôOwü>ø°öÇó‚ñõÅþ‘ï œ ¹‡ðxþkø¤÷|ú(ü|ùúõE÷2ýö8Æ© Õs >ÂølõÅó§ïÂëžî¥ú´ ¡Äå ûÿwð‘å0å€íûöVþ­#¿M ù¤u÷#îÉç ãóâ"ìfü˜ Q³åT”>-õ†ë‰ë£ñ)÷qù&üÛ ¦ cl­þEÿÿdûø ú¯^åþ?ƒ ¤:™# ú?ñ6ì“î)õcûÁëä[”XÐQû"ô‡ì@å;ãVë üi Q°S© ýÇìLäCæî?õ/üt§ØrzîùÔó!íâæ¢çpñæþO ‚ ?/Vç cWú8÷¹ùüœúî÷ÌøKþ@Wຘ®XNŒü6üŽüBù$ôØó˜û–jþ¨ãk —<÷éžãœæÑì«ó—ýY ®;#½Æý¹ózèÀàhâFîÉþÈ m'x§z ±úqîôé2ímòCöü•&ûÊjó°ý;úÎócîîïá÷ÿÀæ'Ý –º K\D{ÿµ÷˜ñ×ñðõÈøRúÿýcœBÌœ•ý÷ƒîéÔì:ùa "1Ðémõ>ç:â}äæè‚ïüŠ Q!ˆN°’Sõ„é'äÉè)õ^Z÷ ssÝ ÓÉøîò5ó öy÷nøký„ö òï ±kE‚ú‚õëõˆøòøö‰õ÷úuÐ *   ~œ…%öí ì0íïí¨ñ™û¥ D°Pv ­Ôýûñlç¶ä&ì úò°¦—ˆ¢òÖçYåýæMêiñ™þ¨wKÙÐ ò»`÷ÚíÌë:ò¤ûµÝ  + iü|û,ýBüù÷ðõ¿ù²ÿïYUCW ð © ÃòËý ù¢ñüê™ê·òjþRP À…h˜‰xôŸë4é è¹èïsýz ËVdÛ ½ˆû î2坿HñìýH­ aƒáÓ qÿóÉì&ëÎêƒì±óAe ŒŠ © ï ÙÝüÐõÆô™øËû‹úkø¼ú³é–h²9 = ;°û$ööÓö„õõüù³èIY ÝŸö’êIãpå~ï·úh,ÑË0,ßóOìûè$ç6éžò¦’Ï哈 ¾âø¯ìç‰ìw÷ëܹ ¶Í' *ÿNø»õáò:ï¬îíóüâ"çzO *Ù 1U[ïûöóýîñj÷¸üŽó¢ Ë·ÑýYöXóð¶ìîø‘ñÙ—É= ²Àò”åÅàæ/ðõù·Ädu 5á ,ÿõ€ïë‹è;ì¦öÖ´ 0hò Æ S@ú–ñÊï°ô¢úâüHý:²u @¥;Nÿ ø2õBö–÷ö"ômöjÿ¶ ÑÕƒ» ¢Løíýè,ìòø«ÿ ƒ@r‰Æüõ'ïUéçÖìOû> )­| ÿïVãágèâðuø±ü,Õ‰Ë ‚åû‰ö#ðžìÇï·÷tÿ KS†ÌÿRüÞý¦üÿ!û¡÷ýùyÿë„Ôbà ³ uÿþ%ùõÜðæêÎè½ï\þ„ º†Ž'Cû¦òOçlå¢éxïJ÷A ÔtíÁû–óNë*åvåïGÿ®}&¸ò ™ÿyñéékí ñÜôý–8 Ô ƒSÁ†ú‹ö’÷súû¤øž÷;ü K²ýÁèÆÔþáõÚñãó½÷ûÿ:¡w ‹éøÞðIè)â–ãGï”–§{ÌÞ+ÿõíMå¡å£éöî¿÷PS ëæ†ÿÇ÷OîèÜé‡ó¤ÿ·Û  µWW 'søˆõ}öxöOô«ôëù$©e¿? å ÄŽþ"üùaóáíŽîßö™M7 Ý ÒExúJïìòíæðªõ þž e³ø e[ù'íÆávÜÑá3ðˆr GI÷NÿCñ{ë§ëâìjïÁöž… jl g±§Èüâô¸ð¤ó~ûOç~ˆ l ¼4ùìMû¤ôhò÷ô=øöùXûU Û”Ôš \ý±ôàêCåié»ô¶.-÷,~öÖëé÷éóëõñ¡þ4H\¸Sg±ü‘îáâ¼ßÖæzóVþŸ© ûc  ;ÿtøºöÚõgôõ)úì<êr‚ ?¦ü0úüªþ!ý¡ø®÷ýåd] Œ %œÚüoòî›íõí$ï’ôý­lM$m¹üï·ãçààç“ó{þDT£*±sö9î½ëëDìÀòmÿ€äÝáÅ fpý?ñ—èÃèaðmø¦üôÿVê È “˜­ýªøúö'ùüáü·û£ü‚z ³  Zï]öü…ôœí`îönÿXÅ ÑHý ýlñ+ë£ç+岿oðçFå üý‡îsä†äæëAôCüž«­ý¢ 7÷€ó¿ñ!ð ñ÷¬ \¦( ¯ 7 ÷Àñ ó|÷ÇøŸö/÷fý@ ÜØe t à˜üÄ÷¦õ?ó÷ïñïU÷ûe*ÿ wù™ì¿å6èžðCúy½æØÿmô­ì¦æêâWå[ñl¢¨øG Ÿü2ïoé´ìûòq÷ü] 0 [ÿ„üŒû:øžô°ô»ù Ãè¿~ˆ  M«þkþâûÿôîYí#óêú¾Nõ l“ Mø÷,ñaêÄå©è5õ*îVØé?²W÷eéÌä¿èHðÿøXv‹y ‰þ—õîLç€ä\égö¦ Ír®Gæ Àþ+õ†ò/õëöÂöÄøþþr »s}y_PkúKøçùRûÒùLøúûlà ž!A ` V6þ¢ð?çüå~êNñùº¤r ¤[ÔÄùðñæáâîè÷h=ûBÛ±kò èˆç©ì˜òÁùG¹ÉøF6ªú òHëÌè+î£ø\E‡B Gï’ Ç<}ÿŠþúuôáòEö*û{ý¾ý¿¯LÅ ÷…üéø÷ó±íUìô¤" -ƒ“<1þî=å¤ä6èªíö ‰«Ô’f løvíBå™ä»í¶ûïB ft‚ð ƒ óí*îbñFôÔøhØ ~ ¨œ,´ûõó'ñ)ôFø¿ø‰÷<úÀj E œ 9 & 0aü.óÝîÕîcð#òÆöN]z¿Äyÿ&ø,ïè@é¯ó:Ú œÁ‡2 ¶ù™ê\äQäæ{ënõ0[•Î)— úTïtèkê?órü&"î ~!{ þùRøÚøÊ÷Øõ­öûO¤× (  ×Èþ2ûCúÁö°ïWëûîù‹œ }Ó×ND ýˆòFíë êŒíÿö žëÎIJÊý)ósèpã„è¢ôž y²ìè ûùîNé(èèë€ô*µ­˜\  Ó{÷³òÌôWùžúƒù!û·¬Á;QöÑ>¥þŽø©õxöô÷Iøú™{ ·N¡ ÌײüËò^è£äÎê¡ö' å¥Ib ú³ï$ê÷ææëàø8 >ê ÿKòÈç•åì4öhÿ‚º©]/ýçö»ó{ðdí½íôþ-ác v ‡ ×ÒUÿÉÿãý¶÷ùñ4ò:ø¸þÖ-, ùH ÙKù{ôò(ðõïÄõS¤*r€ Ëôù?ëTà ßòæpóÏÿ ZÀ®!" !ü¼òqì—ç"æfìlúQ Yöè ã T×õöí:îó{ø#ün\í- ûï£ÿõù ôòÎôRøfù¨ùRýþ ÷°ñ í 4þ#óìíÅóÿúÏ·Âìû [ö¥ï¼êçíèÅóW¿²]s” ãù•évàcáôè¢òÊüÑ;>D c¨ùyó¸íþë¿ñ]ü×”õ< ¹RìûSø´ù¶û§ú­øMú/ßDÅx‰  ‡ ¾øTôÈò¤ðNî…ð„ùÒ %u ¨ùâë寿°í‰õêýÌ!èÎàô÷£ïˆèHäÉç•ôðñ0e/ãÊ ú{ì4çPé&î÷ò9ùí° °s( “·×ûÏõô¢÷<ü¬ý”üý׸VZÿùÜóéóÞøþ¿Q е¡èû}óåìóåŒâäç¢õn2Ú´+‡ "øÔêÌå•ç…ìó­üá @E)  çù)òë5è(í|øMÁ Ùò¹—Íûïò@ñ8óô ô¯ö×ýºC N¶ë , ì¤ý6ûû³øRô8òòõhþ¶ … w n c ™ôÍì~ëÕî«óúù˜‡!1 øÿ'ö¸ëæá¼Þ!æõe\lÈPŒúSøkîÁëÊì§î&óºüM ‡ž:Îýðö·ðUï<ôÇûNúJ. ã R m–+ýÁütû ÷ò¡ñ<öªûíþïøkþN ›«ù–ð)èÊæwî¯úD= • K²Góë÷èuê~î6÷K[Ìïj Z`÷zë‹â‘áÍéÒö‰Ð %NŽ&úúô4ôšóò™ôdüJ c >±dÃÝü»÷'÷©ùû ú^ùÐüó+  % ‘  | Á.øùîøêšë îðñðù´õŒÎ–\ h5úÈì0ã2ã¹ì•ù ¿2ŸB tþBòìêùéÌí2ø†Ø€Ss e®øpíïæTèŠï!øÿý€ !Ìr ذÿ'þýü=ùîôÒô„ùçþô•ã Æ XêÿWýˆ÷_ðŽíò-û6ma `Í: æùÞîéæàæFì-øó¿î5ø²ê¢ãzæ7ðàún Û7¥™öûcóÁïæíåìZð²ú ‰¥íÄ dïü¬ówïÈðôèõj÷³û¾Ú B ¯ @ Iø1ô¹óƒóó8õLü¹|W Éàô¶êËç¯íW÷âÿ‘žŠÔG €ù'ï²èxä!ä0ë¤ùÐ =ŸEšyýžö`ëéç@ì ô4û¸2 ˆI¡Šý÷ø)öÃòtðæò–úXTqT Yá {Ùÿœüû©÷ùñ4îSðßöý]kÕ ô¢J‰ ü­õ•ð$ìÙêíïwûŸÁ7Á[' 6þcð¼æÈålìËõÈþ™ëÞÍÍ=ù@ð¡é¦ä¦äÈìû ÜâúW8ù—ñÍð¤óíõ¡÷’û[»Õ ±¸rã8óû¡÷+÷Wùâú}ú`úYþa‹ ¦• ª ñåùôîè×é°ïJöiýKlVÛÄüÌôÛì¥æÚæ×ï;þg =²c 2û¥í‘æ¶ç¹í õ¥ý¶D¢ƒ·üYõ„î-éÛègï´ù@ÄÎ 5ˆ— vþsþ…ý#ùÆôþôSùýrÿ¥V  C æýÉúÑ÷¦ó]ðOòñújq¼¿Ê˜JøëZäMå§ê,ò•ü8 ôýÕkÉýtôòê·ä´æ½ñ7 —²ŸþúJðkì¤í[ðÐó‡úíþÓ)í BºÈÿùóòbô°÷Kù;úòýæ  ™  2 } ÜOú…òmð½òÏõËøMþ|žÙÒ.û`óQëÏçJí(úÃI GãIÞõWéâãäüçÅïüY [wÝŸü÷›íšèeë®ôÑþi“ í ‘^þõøwøãø#÷ËõÃø¢ÿôÉi—Ý YVü™ùv÷ãó@ðyð±ö>Q K3dW§|ø$ïÆëyìaïõÕþ± ô7. Úùòîoå‡ãõë+ú(V#"-%“~ö‘ìbè1ç‹èéî—ú#ɪ[ ÔÍýIööòõ»ùÛü.þqŒûø›—zKú$ö{ö'ú)ýþ»ÿs“ ñ ò=þíöÑíçõçð¾ûvÉ ¯àgŠ9÷–íÚèÁç~êªòåÿþ LäI ãýùî¯åÀåzî/ú½# >¤«»8ûŒõò¡ïîò‹úeÇÀ¸Û i çóÀýáûü>û‚øÛö<ù4þƒî¸ › õ ^îû»ôÙñÎñ·òùô~ûÍÌŸõ~ "¿ôÊçqàÞâØìø/ß · þ3÷=øðÛêJè–êSól" ×< j¡ûêñèì$ïØõ`ü9À k•‘ ¸üÿ¸ý¶úÿõœòuó¹÷Ëûûüšýþ§ AU– ¹˜ùBñ·í–ðàöXý‰Å –¬õ„°üÔóBî¾ê÷é_îaùd Îh‹ø`ôçåàþãtìþõÙÿç ëzú€QüñöLòï‚ðù÷Ít  î ë÷(ü¯õôðöØù~ú4ûÊþl ’   # ñ  ­ücöóûñöððJôùýú w›ôo ¥Ýö€ëZçœêUñùW ᎃ„ ÐýÏôªí(èÌæÚìú¥í£IvRÑô¾êêç'ë¯ðÈöŽþWV<ëc ìü8ø¦ôÓôHù|þŸ´…kÙ#¥_ÿIÿQÿÐû'ö)óeõòú4@ etª ôú™òîë»æ=æ íWû} pUsPž;Jõ7êšæ,é&ïR÷ “!Rö;þïö5ð¥êêlñþ¨ ÕÑÒ O{ö<ðcïšð»ñKô*úf}  Æ H s A k*ü—ùþøÜ÷ãõþõ¼úQO‘ Š + áHüèñsìií.òøÿã/Eá·Q"ýóÒè¯á”â¬ì/û9-´QzQñô í]ëíRòçù2É÷¢ Ëþäøˆòí¦ígôÍý‘ûž ̰ ûðþ[üCûFø“óñxóæø¬ý]?팔<} öýŠ÷ˆðóëˆíõÅþ£ ¡lØŸû ïqé‡éyí¾óýÑ 3të/þúò0è)âlå¸ðÈýæpxX} "öJñßï:ðÇòÝøÙï  ` P._úàõcõaø_û<üõü5Šõ 3 A \þõ¹îí ïIòåõ«ý› €+à 8€õjëãæê¹óàýˆô þlè?]øîjé|éí,ônÿ §R[rþJó*éÿä'éIòCû몹 Hò !þùûÇùÒö…õì÷Ûü“ú}°Ù ’‹ÿ`ý8û>÷Eó×ò#÷QþM à¡! Șõ-íééÙê¢ðLü; ò%“? jÿãò¶èJæ!ìùõ­ÿ3‹ªy™$÷ïYë†êˆìó$þ õ@á« ¡ù¾ñ ï‡ñ`õá÷ úþî( È 7 ænlýFø…öÛösöëõÕøoC kE/ ¡0òû¿ò#ììÿñ­úyØ Ó8æ«>ºôçëìæ0åžçxðÿN ßKT’ ¼þòŠé±è2îÖõýsl ÈMœ ŸÅúpöÄóñ.ñ.õýŽ\˜ ß B ­ ´¢ýEûú*÷cóÙñ¨ô‰úb¸¯` [t ß ú£ôÚð îÀî”õ)* {ºp = ùZíêæ\èàïÓùàhî½ãøõíŠæ;ãÔå­ïÜý§ }Û, W÷òññ—ôš÷õúÍÿà ¿ høÿQÿmý¾ù÷Ã÷¿úÆü2ýµþke ç n á ¯9”ÿ’öAîöê’í¬óúçÆ –b ¡ùøñžêÎç§ëiöCĸ´rѬ÷ë”å¢çxîZ÷m· ë9s 3ÆúœóïìÆè¬êùò&ýË) Ü × Ü : *3ÿ2ýÁükû%ùCøtúuþ]ÜíÝêZýÿñúøBö?ô±ó÷Úÿ= ¹ êS y#ó•èôäè¢î÷ üäk¶¬úùØï°çåœêSöú‹ @uI ø8ïñë’íüñ ø =`Úò Ó¢uû<õòð‚ñöõSú}ü3þÑÓb ‘ Þí›ÿgøŽôÑô@÷pùüfϼºJ ëtü‹õïºêvëØò³þ >HE8â¦ò çã2åôê­óîÿà >ö‚j‘lüÇòDë%ê?ð÷ù™7ï ¾À ˆMú“õ|ôõ;öùBþ‹Ö‰ bÐùâý8ýªøýöföáôWó’ôú1  ‹Õ— 6ÿõCï î“ïžòèøh‰Ó+£ÿØôÿêGåçðBü÷9÷oêÛbóÑêðçéíºô¼ÿ- ²Úß 7Pÿ”÷ò òÎöVü½ÿ³SÓœ lÈJÿ#þwýqû¤ø­÷ÁùäüäþvÈ> 5Dª œ†ÿ¬ùó|ì÷èfë‹óFþf´@‘ØU0CõÇí³ê†êÓí€ö‹ ÊLˆZÿ°ôëÆæêóbý…€Mœuí D÷Ûñ`ï°îƒðöVþÍÙ Õ Ð ÿßþ û¤ú‹ûLû­ùBù!üdºÌ–ZNù*ô‚ò„òˆó÷U° Ÿ ìŸÌýäñxçââæïQú™Vé&ãT ÆUötï®ë.ëlï$ù¢Ò–Õ a"ÿ†õ°ídë0ï(ö;ý J7PH ,Œý­úe÷îóÍòOõ¯ùJý“ÿEy± g Ú ¸âù6ý™öõðšïPóñù§¬¢ £ôŸ‹KûRó>îwë(ìuòfþ é"ã¶ ðýcðãå¾â#çöïEúð3 œ¶ ­Éøüò ïpîó%ü«ú Ù ´ K kSCù ôýòõØ÷)ú@ýIœ { } Oòð¶Ùù¡ôoòÀñwñ'óîø(_ ¹&´Ñ çÿˆôVì|ê4îËô³üÀ΋Øúíñpë?èaê1ó“£ ÒU± ¡ý’ðÕç æbê|ñ¦ùç ÄšÄÎýDþEù™ôúòöûû&¹çVÈy¦ÝHþâüðú¸÷Ôô³ô&ø>ýƾ] }Â%; õ|øÓñ™ìé[ëSó>ÿˆ é²­, þñdé·è&í ôýÓCyÞ§¿úôñôêèžëMõ²< ¤_D®Ê ÑþpôUî)íï_ò÷¾ýCª  ¹ ` ½ÓRýÀù1ù™ùõøþ÷@ùöý÷ ¿  Ò ‹#ù(òŒï%ñõ€úý Qc© ±øWïáçÅäoè…ò’ÿM ~??Ôi ™ü‹ðyê”êdîƒô#ýÆY Z –óüKõ®î ìkïV÷Äÿ@ ¶ gŽ ”£ýøùš÷#õÿòþòÒõúùÉýê ÃðÝ €E­ý†øóöï(ò2ù· Ç › £öúíªêÛëåï÷P—Xl«9ù(îÛå‘ãÀè[óGÿº Ø)(0åý(ôâï]ïñûô®ûHm BÉ n ÿ‹ü÷„ôÎõùbûˆü²þ(Û Ž  ìrjÔûLõtñµðáñxô©ùÀ Ô·­å î·üÀóuì@ê½îøD! Ö¢Á  €×ô ìsèéHíºõ}UÛä…²8mûcðwèéæÄëôƒü; LýP$”üüùÄ÷ ö€öùùýoã  ž“4æ’þQý[ûø´õèö'üïC§ HíT©RýcóÞìÚéÃéQíÜõ¢w‰;ÿ¥Âûð†èè=îþ÷eç ‹p7¬ ɸõ.î‰ê-ê™í»õní D¤8(k÷+ñ®ïòUõaø.ü†î¹ ú)/´Ìü2ù¦ø ùgù¼úkþ- Z z åDÿþÑ÷žðíhïyö^ÿàSpK!“ ¾þÛòoêÍåüäwé?ôÞÕ„ô>Þû`ð÷éœêjð4øwí=­4Ï $úýô_ñ»ïtñ;÷AÿÅ ø A ñ ÷©iÿšûÛù·ø÷örõQöNúxÿpèŠ ” WxýV÷xóñTðŠómûdu ~¾2¨ `ÌôCë­ç×ê§ò{üüiœYÓM z±ô€ë”åOä5éôvo ¦Âò%¦€þyõ>ñòuõxùþœüM B p*ÿ¾üVùxösö_ùýaÿÊ,'ã F ñ ÑSú8ó?îŠíñ÷Àý4‰ ±" “ÿ’öŠï©êàé7ïõù-—’ÂUY µuó×é&ç’êƒñnúëé.&AE ?Ïø¢ðÔêfé°í öÿ¬Ð _ Œ bü5únúÊúòú5ü>ÿʶ–ewKŽ"û øÎö©õxô£õûa| §‹ÌU>üöð|é çsê„ð_ùÆÁj=c u*÷sî¸èxèóîíùDì ú¡|] ¡ôƒí2ìïôŠú= t @-ýÏöÇñhð5óò÷Ùû¢þÚÝ 7 ­ ]GÅû…÷õ`öïøõûãÿ‚ˆ Í =vúkôÒî{ëgí†õï ¢Þ³Ú Týxðhèóåúç¥í?÷6äˆðÉ §KùÜð÷ëôìLó ü ±¢ N‰þüö=óëòYô»ö»úîÏ> î Nºÿ@úõöÑõÌôKó@óºö†ýÖ  )üˆ ÀšýŽõÑð|ïíð4õùü2P»K_ Gjüóáêç*êióˆÿß hºû_ë ¾ýOò{ë1éIêéîÙ÷·S’õÚ` ñ•û¯ô1ñ¶ò„÷¹ü%<* ¼  î§þ¾üíú…ø|ö§ö…ùmý¹”Z Xý ) žôþù@ò@ìPêDîÃö…õÓS…ÁP  þ©ôsîÙë¦ì òRüzò¸ØHƒÖüKòêçûë$õ¼ÿ… uŸT/l¦ýõÀï`í‰íñtøî„ J + ~ d-ü^ùçø`ùHùOùEûgÿ™Å5פúßý÷÷yôœóSô©öíû#à ¨÷q »°úßïÛçÇåYêró×ýÈ×¢g[ó 8þÁôÓî8ìlíÂó™þ ƒ†-A >êûÜñëŽêrïýöçþrРİÎS èšýùæô+òzòö´údþá›<” ¼ ü Ųnàû¬ö!ó[óI÷²üœ€ø ä9 2Œø‘òþî±í7ðã÷@tÆüÜ$°-úäí?æoå’ê?óNý³U—¹™ÈŸýõAðÄíPïÔõ}ÿ† Ÿ°, XÕÿÃ÷’òÑñô÷(újþ- h Ð ™ Ë8xÛýsø]õiôô@ôºöoüF’ ιQ¢ 1üœóeî1î<ò‰øóÿN]rî Å÷†ðÃëAêîÑ÷÷úúëïh ùHíþæçÅëÑòxûˆÿ‹Y‹ÚJgüI÷îóô×÷9ýC›„<q.ÿ€üGûú;ø±ö€÷#û§ÿdï" y K–ýE÷òÉí$ì”ï.ø#£ ™Xu qú¬ðœëçëLðZ÷¢/ à5ÜB ³÷:ïÒé¹èí÷¤à Sv»”>ý×óõî=îÏïµò•÷Òþ3‹ ( ß _Æúÿ<ü¾úüú0ûÞú9û¤ýòòûW$ÌýZ÷tò/ñ˜ó,øþ¨{ÃO ÖÿõöÌî”è:ç|ì<÷¼ªÙíˆRÅø)ïËê3ëüîïõüÿ! ]²,- 0gû&ô±îjíEñƒø_õ¶ îÅ o6üù)÷1õÆóÓô¬øLýÇI0¸ - ¡ !¹áÿ ü‹÷ÐóqóŽ÷¤þƒ; )   Aþeô¾íÃëÙí&ó½ûÝÙðý {töì!åuäÖêüõ 4/ÉÖ½3ü†ôÚðAðìñöwþ† ‚ \—ÿ¶ùkõaô‹öþùýêÿ^e[ Ì M ‚âYãþñø­óUñ!ò¥ôMøÃý‹ Ý)y¿öùGòeíãí-ô~ýXM n¶ ‚ýò¤êõçlé ï*ùõûÎŒ5èúÁïyéCézî¢öÿPp _g: §HÿãúSøªöDömøýó¹<‰ØXÖRýkûvú/ù¼÷Ò÷üú“ÿË ¦ äl ©øùÅñýìhëÏìÏñ­úç7Rù*; ËÓ÷îþègêñPûìT ñ·‘º ÿ²ôî0ë¬ë^ð~ù«)-€ØN t£üdôØïðEóv÷¬ûb‡z ‡ ÅÔýkãüãùùîùû üãýVó ¦ oᩉû«õÅð‘ïfó¯ú¾M I‘‚5 KûÞðÖé æˆævì…÷¹’Þ¦YùKðXì8î/ô¿ûŸ9 üó.Fþ÷IòÀï¶ïGóEúP˜æ ê Ü ’ ¼ÿû¦ø„÷÷böTö³øGýÚ6Ýt ` ç í¤˜û6÷<ô…ò+ó†÷Wÿ.ÁH#" O üNò"ë=é:í$õ±þôË©ºÞë àý¶ó$ì«çÑçºíNøQ 7\dæ +¾ù&ó;ñCóG÷ü­Ý„ k … ~uwüùö´ô öpùEýo !º  ± ÷uíÕýqø¾òMïðŠôƒú6N ›hýÎõjï‹ëPì°ò'ýú­Zq®Åÿü^òoë,êüí!õnþö­†.Öþ|õ›înêÐêAðùý›Y ½ : ÕýÆùøùqù}úwýáç‚Ü–¥ÂnýŽù<÷öJõØõûø0ÿÝ. ‡>©B ¨¶ùÿïñé1éÐì‚ó˜ü!!]´{ÿžöï÷ê‰ì ôÒþÎs“l9¸ïúmñ,ììëhïcõÄý”®»(ïú¦ôsðâïäòÏ÷œü†#¥ã » ‘øó þ2ú5÷÷Cù7üCÿòƒÎ g Ï Gõþ»øÐò8îäì¶ð9ù[ k.7„úÝï¥éŽèÐëÅòÜüLúÙ­½‰’þ õî¢ëdîötÿrÏ ÒU 1üõtññ€òêõÑûHÄ ! = ³ Ô J}ý¹øöàônô†ô%öLú)  - ‹  ¹ #*ûáôàñÚñ'ô¹ø¶ÿÏkx Øuù?ñ@ë&ê@ï ùç åÃÀ¯!ùï¤é‰èYë>òhüp¹|*™®øòNð¶ò#øþýø% u Î ‹†ü ú!øbö ö8øüêÿÛcŸ5 ã  Ž«ü"÷ñ¥í™íòeù)Qxˆ­Ë øQûöóðIïññNø™„ ¤„N¢ «‹÷=îhè]è|îUø©Ô =†1Ùû÷òBî„ìèíÿòû£ò Ç ì ¼ 4 ¦õþUú>ø€ø¡ù‚ú·û[þÛµE¨:JûB÷TõFõŒö^ù‰þÚ, ~xä „Â÷HïÏéÚé_ïã÷<p C¤†vâ£ùòí“ìÕïˆ÷(R ¨ú&- ¦Àøïïüêfëzðò÷çÿ«†­ %Ûú¼ö’óhòôü÷Œü&»zo b ÛŸøþ<ûJ÷Võö>ú‰þÁás \ ýËöUò ðŸð÷ôKýðQxÆéŒ }öâë@æææÑì¾õðÿ4 ÇEî û/ô³ï^îJñjø²ä Ž­=Z î;ü’õ ò/ò‰ôµ÷µûâG@ ˆ f ]s †ü?øöoõ³õëöõùJÿšo Y } ù`ú‹ó°ðJòòö9ýLd ö”½­Fý½ô+îqêúêçð–ûÐÊTT%Ø -L÷iíXèÞèíìôþ|+Î@Ì 52ÿñùÑõîó\õëù¤ÿ#¥œÌùîdýjûkú5ùâ÷ÿ÷wúVþˆ è ' ïú›õ•ñcï8ð9õ«ýË >:ð âk÷5ïØë‹íîò¹úú. À‘ hþ_õÿíÊépêÂðQû€&ÕÕâ ¾¾úúò*ïÑîîð"õ5û¡H ì ÷ÿ§ýKûÍúÊûýäýÛþûÍÑJzKÿ%úJõíòâób÷Nü/ Ño ̱üúó´ì™èéZðÉú’T%Pû ]B÷Jï)ì€ísò/úy Pè²Âèÿ(ø•ñ¿íUîœó˜ûV9 D ŒFà ÌuÿËúø]öVõëõƒøAü¶ÿ ¹ÓûˆºcÕÿØüJúè÷¶ö3øšükÒ  S # x‹úZò“íðìáïÔõ`þœ.½^Ö ÏþzôÐëç~è¨ïÇùì„ ªMB[ ™iùUóÚð‚ñîôåúS ë Ü ý ØúûÓöô€ôÂ÷ üÃÿÿOK Û > ÕrXÿû¸öÝófóóô¢÷aûɇ| :ç >Ãþî÷ÿñ3ï>ñi÷zÿz@»r¡çú©ñÿëqêñì=ó÷üoU‰ #" }öhîpêþëòÞù›ƒÛ L±S f«ü%ùT÷øöøÿû¨¶¦ÅKhr9‘üÚù¹øøMøŠøoú{þ¸› ±$ iÕ”øéñôíôìùîSôýOºÛa*_Ñÿ’öïJìï öÌþ É Þ”Hûàò¦íëëûí ô^ý©ªPÅ MSùóQð¡ñ_õçùµþ¡ œ B „KÆ›ÿý•ú&ùyùûçü¤þ — ·ª¨þ¾ùŒô?ñÆñößüi{ I¥¼Î d!úXñgëþèÙêŠñ üW F  üÿö´ïÚíñ~÷BÿÒ Â4Ô «¦û_õBñ¤ïñöªýxø — ï { ' Jþ„ùÓöÛõ¤õöï÷zûåÿ츜;  « ºe@ûv÷?õ‹ôöÆú¢W þ \ h·ùñ¬ìÚì¬ñzùœ× ¦Û…º»@û ò¦ëòèëQò½üá—aÜ {6ÿ9÷Jò£ñ‹ôùŒÿÂ9 @u G ¾œþJúšöúózó¹õüùoþïñ › ˆ W –XÞtüS÷+ó¤ñ2ó ÷=üç· Ì½Á ‡ üšõñXïÍñmøK… )¾è Ì»øÖïBëñëñîøTð ä„^‚NÜû¡ó§í>ë¢íjôýÔ9 0 Ì Ç â%û«÷®öL÷ ùõûÖÿÞ²wâ)C\0güJù´÷>÷O÷€øÍû'Á   e†÷Žð3íÓí±ñó÷ Òa´Ï ¤üZôîîzí/ñùT‹ Lœ †`÷lï×ëñì®ñëø´ ßÉäš ½mÿmø¸ò¸ï‚ðvôdùÉýšò0 =Õz§¦ÿ.ýßú¾ùSú üBþ¨Ômç º ­Ö™üÃ÷¥óñ–ñöžý5 ËRX+ ‚÷ðîèêLëlï¡öW« m8ºg )‰û¾óîòídò,úœÏ Ïô„. ïhù2ó<ð<ð³òB÷Žý‰. þ 4 Î L ÂE˜üù÷÷ûöW÷ù²üIOÛ<  Ã[ú–öõÊõføýÈŽ Њ n9þÁöðgì†í|óœüsÚ‡ˆÏ1 g“ö}î{êŸê¡î'ö5G @oD HÓýÏöòdñžôÕùNÿ25È Þ ç"œþgûZùø‚÷}ø1ûÈþ|Ð( ² f 0ìÿšû÷íòàð,òÄöSýó| ¦ ¢¦â$ùó ññNõcüƒÚ š‹LA‘þMõií˜érë0ò¬û²„ÉTÆ âmù9ò îíqï8õ4ýÛ 2 ß Ø ,£ý|ú¦ùŠúÿû~ý]ÿÖHø,,üü‹ù=÷Ööê÷ûù‘ýö Ùý @Üý­õÜîºëcí9óiûñ Îö,ö —®÷5ñî·îóüKÕnrìRçö#ï ë#í‹òýùàF •×Ä n™þÜùRöVô§ô„÷Îû¿ÿ…‹4KBÐWqÿAýÚú#ùù,û‰þæÚ¢¨ ‹ iª'úßôËññ8óÆøF‰ Î9w¬­þ÷ó»ëeèvêÑð¢ù>] -öº Á[ùó{ï¤ï ôµû¿ 8}# •.,úµôò“óÆöûÂÿ· I Ö ÁG¥ŒÖü;ù ÷Äö÷’ørúÆýa"  K ñHþgøAôGó˜õ9ú \S ¾÷ Cúºò™í©ë îõeÿ2 µ 5Cc ’õ[íê°ëÌðøe”ky &OüÃ÷õ@õµøþP ¡ ÙlZÞýú¶øøø¶øwú¡ýYƒò Ÿ Ç ‚Øþ×øÑô òñó†øBÕ ·À« *gþåõ'ð–îñŽö#þòæjßy Õûóqí÷êWíWô þ»=pà ÷<øSòð,ñvôWùnÿ’¶ ¾ 8 Z*öÿµüú^ùú´ü”þ)bp(hbÉÿDüTøEõ]ô ö¨ùþjÍ õú6 mPúÕòíÓê?í3ôìý¥.¢nã: Wÿ/öGðî¤ðÇõbý-¯ Lã —éûïôÆïîçð<÷ÿ€< Å¿‹T ®œüUøö)õ€õh÷áúãþ"3Œø¾¨ôýÓûÞù`øoøéúÿÇÖ6  ¸ ›úÿcøòèî9ï¯òùéa ßG^ÿˆüNóJìé;ìLó­üè1 ˜:tnþ÷ÀòÝñãó~øUÿÜŸ ßO ™Åýøªóò¿ó¬÷Züæ+ý… Ë å þ ý¼ùaö½ô5õ÷òùêýä× þ 9 `Moü¬ö‰ò¬ñâôCû°a o'ü ‚ùuñEíéìBðD÷ÿ Z#s Ž`ü{óVíÌëïÏõçýÉ –ÚX ?œÿ;úîö¡õLö'ùãýèNìàXþÎúøÅ÷Î÷\ø½ù¢ü¦1 „ Ö º ` Vaþ{÷ròÙïÁïyò?ø@{”íÇ ?)ýbõIð…ïFó1ú$Œ RK' Ì÷±ðíúìÚðiø$x Ùõ$x ¦fþiöùð}ï§ñ öKû¯Á{ « A hS‘þ²û úútû`ý.ÿïgO– CÖÿîûÑ÷]ôóÖô’ùËÿ4+ ÝÖ¾„ ³ÍøÒñŒí‰ìï€öÕÿî7zJ Çìú6ó ïžïWô|ûiî ¡Ìo ŸkùómïÔîÊñøÑÿý 3  ý\Ÿü`øFöïõŒöØ÷Qúïý¤uV°•^I~Sþüú½øo÷~÷¶ù:þîí¨ Á … Œþn÷œñï®ðåõ6ý~Œ †…yñ *°÷'ðšë ëï÷  åøŠÒ Kªûô ñ¦ñgõåú2¦ ò |ÐgýÔøSõ¿óÎôø[ülÉ  i ø ÒÆ’Gþ®ú ÷xô$ôBöõù}þ™¿» ò öôIû‹öxó<ó ö9ýûO à ìUýdôÄípëÅíËóMü|¶x êùGòWíkìèïÂöñþ2 t 0 ‰YþhùþöþöuøÝúUþ}ý¼1’Týyúáøhø‰øOù]û ÿ™l _ • Ý ýØöÕñðñ¨õüûž ?l3áEËøœòï½ïçô_ýÄ Ýr*ŠþõcîøëÂíÎòrú°y q<Ÿ Ýàýq÷æòrñ>óH÷üd Ø7¦{Жþþ“ý üÿúHûéü ÿ%6bkIôŸrÿ?ûs÷Œô…ó”õøú7 D ùo cýô­íYëíIò’úwŽ \ZÄ# œù òòîÅïõý( ŒWƒ UDÿŸ÷kò`ð ñPôÃù¯cû ™ ² ` ADµþÌú‚øÖ÷#øäø@ú¸ü-OŒëfÈýúøù÷£ùÛüƒö¬ Ò w ϶úÓó¤îîìÚï÷m„ Ó[ûù» $ÿ)õ7î1ë,ìñ:ù〠©s£g ¤lûqõ…ò}ó«÷\ýê~¥ ª ò ßà üæø ÷Nö÷ùXýFiƒf É km±óýrú-÷Ãôoôïö”ûïë ¾ ü ò áˆü?önòoñló‚ø“µ›ß ptü¬ó>í(ëCîzõ›þ²[?1c éÿa÷iñ‹îïî´ò>ùÝ]! ó ¦ ×¤Àþ­ú³ø"ù-û—ýþÿ‹ðZFíHSÿÃü÷ùû÷ˆ÷†ø€úYýMD< ‚àe ·yaú‡ó˜î]ícðŽö<þ*! ¨NP¯æýVöKñsï@ñÖöKÿZ;=4À ‘ÁüJô~î í ð)öý;÷ _1&C†™û÷PôÊóºõ—ù(þýtðÈ®:¿:xþlýxü†ûVû¯üMÿ>Öñh¦¶Fuü ÷)ó2ñ˜ñÛô5û¼) hëô (²ü…ó#íLëîIô|üI Ì‹ ù½ýÀö òXðJòÉ÷Ÿÿyÿ 6[Á ɇýÏöòÖñôøÙü6Vü  ® ³UðgýúÌ÷÷Ê÷5ùû¡ý%8’ 0 p‘‘¤ûýöfôÒôä÷¿üx9ò I ÒL­ø[òQîŠí÷ð†ømÔ m;ÍÚü®óÊícìïžô-ü[R .Æš ƒEþäø)õâóžõú†1 Ø © ™¶¾ÿûøèöÿö×÷­ùÖüБRþõ 7 ªû<÷ÛóÜñúñõ÷úlÔ Æ mÆüçõëñ«ñÈôvúÀI $]ùÀ›PøBñÌì,ì)ð:øæ þ¯±rŠý×õ?ñ/ðò@öü¨'ó ‰ Î-j¶ü•ùö÷lø©ú²ýŠö>Ý)KæjŽýú´öÎô&õ§÷¡ûm گñ fvRùúò¨îØíeñ„øú¡7ùGÖ ;sûGô‹ðŸð ôaúO5 Í6;l•øëñÛíºíçñ;ù€¶Ö u ± ÓZú¨öîôÙôyöÂùþýýŸÊFqÊß 1þüúeùýø(ú'ý@5+Ò þ (ܬýd÷ÿòuñÙòèö5ýõ¢ õ5/Û ”Õø!ñ;ìÏë9ðþ÷˺€:$ Äú~ôñþñnõeûÜð y3y tèúõXñâðºó˜øêýïdÆ g Ò [ ²XÿÙû¡ø‚öö÷ù£ûÿ'4¶ É ¤ ãÿgûM÷ëô—õcùÿO Í À6 þýœõ ðØí6ïüóÇûFˆ,‰ ä³øÛðhì¦ìCñ…ør¦ •tÄ õLüs÷òôÍôôö#û˜Ò- 0 m |y|1üÍø,÷÷É÷îøöú3þ)؃ £ Û O¾üÛ÷Œô+óÞóàöDüa : Ô R |&Bùpó¨ðò÷.þÄ_ ½ü ‚:ýÇôïªìî"ópû6¼ ÂŸÊ >×ú´ó¿ï½ïÞò»÷Qýë´– µ \Öd‚þ7ü¤ú:ú-ûý6ÿìcúfÑÈŒÚÿ&ýYúx÷õ°õ„øYý`ß ÄË& ¢ýuö:ñ“î*ïóûçp ÄOZ ¶ÿ÷Fñßîçðqöþ4 ¼ILèVþ¦ö*ñŽî1ïIóIú_C – "û #íú§÷uö£ö÷€ùhüÆÿ™6×0I}€×ÿXýœû»ú¢ú²ûnþ~¡p  £e~úwô]ð¿ïóòù˼˜ÓçZl?þÏõyïBì íJòêúTè 0Îü 5WLø‚ò{ð5ò»öñüÖ& AÔæ Á½ûz÷Áô8ô+öú¥þ œ»Ø¥ýE\ÉþNü±ùƒ÷ªöÀ÷xúëý~)ŸÇ w r°”ýùËõyôöÕú”8ó æÎ ¯ ÃúýñÛìì€ï_öHÿ»ãª¢ü! €÷ÜðOíçíµò@ú)u: P » Êñûë÷‚öM÷˜ùý*=ìUâµ]Çÿéü>úœø{øxù÷úöüÅÿ[ Ñ    ÆL,(úÏô¶ñœñIô ù/ÿù 0 dýÍöôñ,ð™òêøCA ºõu òúWò í ìøîõ[ýj)¸<q –Êû4ö ó$ó=öäú…ÿHå2í÷ÜÒþ»ü¢û5ûOû5ü'þ¬àd•ÀeŠÑñÿü¨øöžô;õ§ødþý× Ý‰R³ Púºòî.íÞï¦õÅý°'œ# ,þ¼öbñªïSòšø…ïn 3¯œ z2ü@õ>ñ|ðŽòïöýº ¿ å ÷ » ÿÊú ø÷‘ø4úü2þÎlIϤS5þûîøfø‚ùèûsÿ Ô5 Ç ! Øþ|øÏò6ï0ïRó¸úec k*Ljûóûízì§îQô›üš €· Ìöþ—øLôqó"ö5ûƒ„ … ä `ËÌüþ÷)õBôýôW÷EûH<õã ù ´ðNÍþßû;ùèö»õ¬öÛùfþ üò T 1 RŒƒúËõKó^ó@öäûR­ Å$šùg%ù¾ñ'íìì>ñßøÙH Áà w«üˆõ+ñÇï{ñUölý Í ë , SÔþüùûö¨öªøæûÿkµ: Ê'Vÿ üúá÷ÒöI÷ùÁû'ÿQÓ¡ u ° ² 3ÿfù¶óCðkð6ôXúEà1 á·­ NÁú³ôñ¤ð×ó‡ú÷ AÁF ¯Tù9òdîÍî#óú÷` þ!A anýÕ÷#ô‘òpóÙöûû/Ìlæ;*Ìýüúûšû®ûÕü3ÿ g%§Ð¡ÿœúFöjó}òúó*ø´þCê æx# Šïùeòîííéñ•ø^ñã …×P ½[úªôtñxñGõNü‰x [ÓA ó;ùó÷ï€ðâóùYÿ¥È ‚ P Ø (ÿbû{ø÷H÷Ðøãú ýÿvB}”Æ+³þÓúË÷ïöšøüYôo ¦  Þ âÉü4ö1ñ¦î¤ïŸô¡üšJ o6 ±Œù/òwîüî'óÅù{Âë ˆ$ š§úçôòFòØõüØh¶ ¸ ° ¢·þkù¼öö©ö]øGû6ÿ)åçS ¸‹ç¨þµúŠ÷\õô õùþ½zg ! s Xs/ú_õ}óæôîø¬þIˆ œçé Ú¼ü7õ‚ïÝìiîQô-ý{ ¤Ñ<ú 5Pù°ò‘ïóïBóÂøƒÿ š 3 â vjþeú»÷.÷Ôø÷ûyÿ|Í”Y±fðý‡ûù@÷ðö†øwû ÿ"Ÿ©  ٠Œý´÷ÝòRð2ñšõZü± ½ ⇠ìkÿ*ø-ó‘ñzójøÿc@‰Ç )’ü¤ô¬îì—í7óUû½° XJú] ©èýáø%öWõ2öÉø¾üí ˜ï“µM þ‡üÀû[ûGûöûÅý¤Þ…RMóÿÅúöwósóõõ›úï A…´= |Éý:ö/ðdí ïÌôØü Ï õ« ÒlþæöÿñcðòÜöþ« ,Ý2 Ohÿ³ø„óñÅñZõú üa « ¶ N¶¯ÿ-ýæúùgø9ùóúæüÿ±“ÅDû£Áoý÷ùJ÷¸öëøJýˆu=  ô\íùó–ï ïòUøêü FÏÉÅ!;þ…õÖîëë¡íQóû÷¡ 5Œ Ìôÿúböãô²õóøAþ&Âû Ù ë®}þü7ù ÷œöm÷ùmûrþÜO‰Ï5›wÿû˜÷Ïõ×õ‘÷û Ú ˜ „ 7`|üöòþñ\õûб #Ýž0 ßÝù?ò_íìØî„õ±þ]¼óˆ¬òø!óœðµñ«õ%ûÑ¿" ( Œ ®ýgûú±ùëúýÈD¶€ÿášFšÿýÂútø®öwö`ø ü•9} Æ y š¸úìôNñ•ðó¢ø#Ô¥ & à  ü‚ô‘ïÙîtò ùÝsŒ¹· Ë­ûëôzð ï?ñöö±þ.® z¡d ;†üTøLöPöÔ÷RúhýŽx¾=h[åüþýêûÎûxüœýbÿ^0V nÙðÜüC÷òðûñ„öèü/x Jã#Z 'uû×ó¥î íªïøõPþ§ ¥ ƒÄüïõàñ•ñÖô{ú‹˜ ïË q Jýù÷lôóTô5øpýc pÁ ¿ ÷‘þNüeúåøPøù ûŠý?!çÙ(s×þÞúÎ÷Möæöïù1ÿD »/‡ }ÿ,÷7ð¦ì\íÛñòø}2 -\ .ôüºõ»ðAïãñÐ÷*ÿì¾  †  CïüÖ÷2õCõ’÷yû=÷™K ¸ FͦüµùÇ÷f÷ø§úýšÿŽãÅ/ à =šè.ý4ø{ô,óTô{÷EüDbë ZJ ‘lûqõ òòºõKüõ ŽÙgyF²÷Üð|í0îxò_ù³á ² Ùÿýÿ÷áóªòÀôKù þI°Ÿ¸¦ãÕþÄû(ú²ùúXû¦ý†%Nç˸wQàü¯ù ÷¡õ õª÷ñûÊת [Œ ß“»ørò>ï|ïÍòºøb« o6 *ªÈúÜôñòö»ý^Õ úá×Ïÿø<ò|ïúïóeù‰XA :* Ø bšü¹ø*÷¢÷¡ù8üÄþA¦WÁù™0œcþ·û¤ùùáùØû­þf™( Æ Ò “ºñü÷còYðÛñÊöðýŸV Êømy FÒø>òëîHï%ó¸ù¹< #o AÔEúÞô1òHóß÷`þê@ ® x ìzzúö©ó'óÑôø„ýh=–” y FþþÄÿÈüZú–øª÷ü÷Þùýª€6 q ¬´^þTùööô1ö¨ùÿŽ7 -µ 8 uHýñõ@ðîFð4ö&þt« b_+| ïøÍò´ïðîó>ú|Ö´ ` 7 âŒûD÷2õýõHùÂý;# q É 9ª/ ýFúÒ÷|öÍöŒøûÜý$ó¨* ¾ d p*þßøëô\ó¤ôJøwý.I® e ä ”èý½÷’óMò"ôäøåÿ¤ñ ù&ï 9ýõ>ïQíãïãõýpV èíÿ Ø2û öóÇòYõóù6ÿ²šÛœ÷<#ýFûªú ûü}ýuÿ×0ÿ4¨üÏ”ýuùuöõKõM÷cûL”f œú ´ 7=þ5÷$ò‚ðzòB÷ÎýóD ,Z Â7ý€öþñ¬ðíòeøóÿÄÈ  çè qÂýlö7ñ…ïxñ öøûEV ¯ ) Ö˜½ü’ù¼÷ª÷ ù ûýÿA‡ïÀ%ˆý;ûúyújüÿMó· ±  4ÿùôñ£ð]ó8ù9_ †^’r ž:þ öšð ïRñzöhýêp 1ãÀ ]xý`÷,óÊñ³ó•ø!ÿ…a   qû*÷\õ†õ2÷öù€ýZà[g_³Sì­ý÷ú#ùøï÷Vù‡ü¶•! i,<CüÓ÷uõÍõ«ø‚ý•Á pá k(ù_òîCíð_÷=î‰Æ/ %Üþ-÷ òoð4òŒözüö¢ß Å Ì]¬ÿlû$ø‘öI÷úðýs”²j´g)þ;üqú#ùßøÚùüöþ>ƒi Œ “³²ÿ–ú=öcóÛò>õUúÌá, ø  ‡^ûKõòXòÔõ»û#¡ 6ÿÐ )úÝòîí-ð®ö¬þWR ©ÕÙ }*nûr÷¨õö>ø¹û¾ÿ_›”ÎßÿåýQü¿û:ü)ý8þœÿ”ß»~/!2ýÿ²ûy÷¹ô2ôãõˆùÄþ IjAG oùúRôûï:ïZòyø3t Ôã š Ì/ûÝô~ñ°ñõèú.h ŸPH† E“üqö#òëð&óÅ÷6ýf½µ ¼ ²I7¨ý¬ûŒú}úƒû2ýÿ™jp¼ò}ÿÏüvúÈøAøù­ü5ñµ Ô ý ¶ ½ãýúöðñëïñõ§ûáÔ QÌs ¯û*ôkïºî÷ñâ÷îþ¬Ù U } „ŽWü`÷¹ôÑô|÷ ü¤ðŠ ­ c TBÎþúI÷ööö1ùëûÂþÃÀüà•Âuÿîû&ùµ÷‘÷–øíú»þX{ñ " /ÿÇù|õ‹óšôŠøˆþ1 óÖ& +#ÿ÷ñ@îòîöòÓù[{ æj ÕoýÁö¯ò4òÕôJùdþLA@ Œ|`xýzúÍø­ø@ú@ýã3’Ø 3^¬zÿWüÆùú÷ìöÁöÓ÷sú}þ<b : . ° áÜþBù;õ5ópóböíûËùÁ u F §4?ù¯ó8ñcò«ö ýBÞ OAR PÅÿkø×òðšð>ô`úŸA Jô k pÜþ÷ù÷öø¹ú¸ýâÙÁ燕³àþþü`û úû"ü™ý~ÿ£ú¬àÑ£ÿÉú?ö/ó|ò’ô)ùXÿõº |@š ñ£}ùöóòðùð^ô©ú5Ø× “ _ ¹GrùEôFòÄóö÷¾ý ÿ Ä & ˜ÿØù^õòò-óöãúSAéÙ è F U¶'ÿAüDú(ùÌø7ù¥ú ýÃÿø\¥•PóüOú§øAø«ù9ý\‹B ¾ í ÈV[ü‰õÉð=ïñõõìüÇÑ FF’T,úô¡ñ ò¾õÉû”H€ Ñ  Vÿšù}õ/ôÀõbù%þZ6p ÿ í I"þ2ú0÷ÐõhönøûþAw(¼ LŸæDEü¼ø}ö ö‡÷¦úÒþH;¼ ù œ0ôý-ù¿õuôùõiú×rc °-À —ÂüIõFðàîúðàõÔü©… –íç ™.ÎúÁõBóñól÷…üèqE õ ‚P%üüÀùøøxù»ûªþá A¯R€ÿyDþ>ûùÕ÷o÷:ø¼úåþ¼  Š  E $áý#ø<ôÌòëó}÷ÿü:© Å åɨýð÷ ôóLõ€úpPn ½äø vœüfõ¹ð€ï‚ñöNüj³ … 1) l¿±þ)úU÷ÙöRøÉú‚ý7´{“fñQ•þîü¸û7û“ûÒüÒþTŸh´séþWútöðó“óöû…´u ¹ þm÷ó¤ñ ó.÷wýl Ä ) ´:Ñüæöóvò=õŠúŽ’ (Ãp ëbÿMùþôóŒóñõÖù“þ(†3oµ$·É(þsü„ûçú©úRû+ýÂÿ=*Ž=¡dûÿdüžù$ø0ø úÀý¨‹ / tœ4ú—ôñžð¡ó™ù+9'¹¹ åñýÿö”ò0ñ¶òööKý)™ 1 ´ ÍEÑþùõõõíö†úßþJ-¸ 6 ™Œ÷}þûVù;øAø[ùHûºýf…Š.c—KÖüžùM÷Øö¹øcü´¾ð³ * þê…û@÷ãôÌôN÷pü4± I? p“áù(ó(ïÍîò/øÚÿ‹´ ØY w¨‰úCöVôÔôŠ÷âû³’™´d'A=ý ûeú$û›üQþL¦å@|(É‘—þ‚ûù÷*÷'øÌúîþ¿! ª 9'nüJ÷øópóôõàúçµ# )  Ê]¢úHõGòòõû˜Ê Ÿ$( »Vü·õªñøðIóÁ÷‚ý˜ÆÇ ü …‡·þ£û¾ùZùYú7ü`þWÇ­v^âþÏýÃüùûüýÔg‹óÞTý5øô¤ò!ó†öuüŒò ?Ö. {æûZõuñúðÌó7ùÚó , áÖiü÷÷ó–óöû@÷Á ÿ Þ Ç"Æýùö‰õàöfù¾ü©`èÝ™¾€¥9½þÊüƒûÂú†ú$ûÓüNÿú3а)¬þû6ø*÷iøÀû¾z © =‡ èÀþ¸÷&ò ï2ïóçù&Ÿ Ó0 `»ýI÷ó÷òõcùÿ°ÏT # è”ýHù÷÷Cùäü²=a€ìȾýjûúbù_ù)ú÷ûŽþQß36] Ýo³¡þÎú÷¯õÙõƒøý9±Â Õ \ Dlÿvùõó$ôô÷÷ýu µ¦ü OïxùjóððvóŽùÂ=¹ ª Û j þYùãöºöWøLû2ÿ"óâB€ÿ ýHûÍú–ûÿüþ1üÑEî$„ çýú«÷üõöøºû£æ „å â¨^úõÑñ¬ñóôÆúqVs  úyýùYõvócôû÷ËýœŸ 3~° œAÑù¹ô,òžò¹õ’ú ¯s $ ÷‘Ò«ý­ûÏúËú‘ûýÿð;àw)<þ‰üûüùôù¥ûñþÞF ± " ) ü~öœò ñ~òÌöeýä— ðù—h Šrû£õVòOòšõ1ûnÖM & ‰þùuõiôÌõ[ùŸþ‘£ k p , g´¿üøLöö“÷úýü<`¼íi'e,þ%ü1ú ùCù¤úýNÛà{×2àýŽù'öÐôaöœúDÀ ½ œ ¬{ýðöWòlðªñ ö ýÄB „ ÷hÓúÅõjóô\÷Aüž0ó] k®&ÿûfør÷6ø€úøýùŽÌ|®„¢‚þÇûÝùšøÖ÷õ÷ùgüýÿ•ÄM §  cþdùöõoôVõ¯øÎýs5 D ÛFþûøðô£ó“õMú×à \Ü  •:üÆõƒñð½ñ\ö&ýi? y î õ û­5ýù÷A÷ùÿûkÿ¦ä¨ûYVEÿYýØûûöú¼û2ýÿ8ržb9¨šhƒþUúˆöô ôöùúYÑ” ™  ½ c,ÿsùAõdówô„øƒþ¯q Ú ‚ kŸüÌö-ó§ò;õJú±û d¸  ]ëý-ø9ô¥ò¢ó÷ ü‡ A ð 7B®wþBüþú^ú_ú6ûàüáþ­-‚‚ªX²þ5üCú9ù‹ùûÿtŒu o  o#ûÍõuòò­ôÒùHØA 5Éñ ¼Ñý¼÷“óòÈóoø×þ(Ê š £ŒxýøýôœôªöúžÿÛ c 8 öLû¶ü0ù÷ö†÷°ù~üÿdý =@™ÿlü¨ùø1øÔùüÏÿ^kàBTNüéøÏöÑöyùcþB’ ' F Ö¸ù•ó ð¾ï°òRø„ÿÈ ‡y ½Fÿ†ù‹õ ôMõù(þ?* G uô•ÿ¦û-ùjøù²úKý†¢ÏÆÀ’I{ÿÅü”úùAøaøÓùªük\Äþ ˜ X MíýÓø8öæõä÷µû—‰S  F BÝÿYúÌõ&óRó»öÆüÐ dôfº Á:ûõkñ¾ðóò«÷ þ±÷ Á Î ~ †½ ý¡ùå÷øËùzüpÿ óÜ8§þnýrüÖû÷û ýÞþêðëŒ3MÖl¾ü>ùnö õ*ö®ùãþƒ~ ý Bº tTÒûgö"ó¨òõúG_ _ ç È ûö/óLóƒö%ü»°à ¡˜ Ï ÌýŒø4õõóÈô–÷ìû¾ÎN<ìLŽÿ)ýü§û²ûmüÖý¡ÿfÙÌ)Áw\Éý^ûÖù·ù(û÷ý¹Øl l  &Z—ýÓ÷ó ðmñ‡õéû~ Eh/¯ ýF÷­óÓòíô¥ùÇÿœª %  ¦ÈyüøxõtõÔ÷ñûÐhÕ† 8 {†óüCúøøÜøÓúvý[:½žm $þ²ûÏù4ùOúÑü dWO“¬ßþ‡ù.öÕôëõ~ùöþ Ó Bž j¤ÿªøøòíï^ð8ôxúŸGD Ÿ¿Ò ÷Éþ¥ùWöPõ´ö>úëþD+8—mÙýÎú,ù6ù–úÛüÿ~ÿ–KmþèûÃùzøLøKù\ûaþô$ Ç a 8sÿ|únömôõCøøüD=Ò æ î Zpÿ½ùmõYóôÚ÷ßý§| Çx ‚Øõùyô›ñÕñâôöùîÿ˜ß í n ¸ª[ºüKúXùûù÷û£þ%ݬÁ&ÅÖÿåý€üÇû„û§ûuü&þ…}zÐûx@åÿHû?÷vôˆóøôÉøPþnÆ 3 ú é `IòúÏõ(ó‘óÑöü¤†   † ÏÜÿ3úþõôÉôVøåýü î i t QÅ.ûóöåôõ5÷£úÛþ R@ -ÌT)þ›üÍû·û8ü+ýƒþ5ÏÑÏÒþÿ‘üÉùøøú~ýßyl ž % Ù„eý™÷*óñ%òcöÙüê þ  Sãkûvöôsô|÷\üøìþ o 4 ÿ€úO÷ö&÷EúÅþy9f × “Äêèý³úÂø÷÷ ø<ùTû$þ¦ÄkfKÞ[=ðýÓútøx÷VøüúÅþÉ''"\’ýòøÁõìôÊöû¹Ñ÷ Îså <þÖ÷ó×ðÿñ]öÈü { F : ÀûØ÷Iöîö„ù‡ýÉÚ×(ÃÿŠü#úùVùçúFýõÿ€#êǼýÍSÿ‘üÊù¨÷Ôö ÷äùBýhÖ¤ ¸ k Þ±¬ÿ™ú„ö›ô‹õùþS¼^ ß1ýñ÷ŒôÎóóõ¡úá=6 ’  HÉýæ÷Àó1ò¡ó²÷@ýÛ] Ï Y Ýõý+û¶ùùnúiüÿþk ×òI…÷þ•ýeü‡ûOûüúý–xéj<Cãÿøú¢öùó­óÝõ6ú1c D ùæÿûùŠõÊóEõgùáþDz© ) Ü€¥ûÜö-ôô˜öUû[5n . W E ¥\ÿrúäöVõÝõøgûüþB×| R¼*9þzü_ûû“û›üHþ¢5.Ú =ìüÊùÝ÷ö÷>ú'þÐTÌ A ü -Üúzõ+ò©ñ4ôXù»ó …ò { Ñþ.ùhõhôXö†ú¬ÿÁ  õW~ü¨ø‡ö?öÍ÷ûBÿv¤Z¶ð z€ÕýÕû†úÇù©ùZúàûþ¦F›?¿ÑxTýú ø÷ûøüC± ^ \Y÷ ü´÷6õƒõ˜øŸýiϸ 0 O©æùtôNññÖó=ùòÿZ V æ  _Uû8ø;÷HøÕú þe–W3ßÿäý|ü¯ûû.ü€ý ÿº>ÊA,âçYTý+ú™÷€öW÷öùØýeÕ9 ž y 4ýˆø¹õHõp÷Èû=k  p vXúÃõƒóBô×÷Yý‚  Cg н«ûÂö¶ó÷ò±ô’ø˜ýu5|8 gEg¢“þSý»ü¬üýþ"ÿ1¤ “ŠÿSýÓûíúñúüXþš9CÚ Œ _¡Æþ¢ùxõ|óDô˜÷³ü™>^ Ì  ¹ìýû÷ôâó£ö­û–Û[ o Ý ÿ¹Sû÷ õvõ'øxüyl ½ Ú S\ÿöûtù4øOøÐùü¤þãÒV(êÿÃü^û«úû¼ü$ÿ^'’—LvHï'kí¬Ñ‹l‘~àDO­hYf4ðÛ ÏÜqàÉþyø¡òjý=­ 7@Eæ˜Ë ê¢C*Rp!½ÿö}âÊ®ÖÐùyYÓC×8ˆ7 ŽöÈáSÔ2ÒšÓûãø÷ÕtV IÙ < ~à”ÏïÑÝÌÇÜÓÿݽ K!t:I.Õ4ÓuµvÃhÜûòÏåÂH'Ï(ò ÀÖLµïÈ‘æW÷ƒçd ¨ZþùNßéÁPÉÞ\ûî!q*k!yµÇç™â§Ò…ÃEÌëÜE¾4…>µ)Mû­ãlܹÎÓLJյáÏûV,¦CG8‡#ÿßéÖÿÌuÌmßSî™ÿª%–APES4KþYÔÖÑmÓBÙªðþ‘æ*‰2Ç/7 <ÞpÔ×ÖÑã/H« »2[ÌõìöÚoÕé¾õ#G#^'Q¼ 1 %ÛëßÙ¼é|„6Ø:R:û#\¡úíUâgäÔÞåR4ÑAA'ùñÌâåÛ…èÀëvî. Ú+”?@I¼.ÇEéÓ×wÒ·ã)ðuõ¿S,sBo4‡ åïvÜÖÚé~û–l™9×$:#î†ìê×Ò°ìB5'Î!ÄØ6½þìíú×5ÌtæjdD29,?òúíÝëÃÞÒöæ Þ%$?r<… × fð/Ûãß—Þ>ÕöáËûŠh=.C-)iîðºÖÌÚ,ãéã^ïŸý$‘0=“)£ªïZÒúÒßß•êšý¶ö$g,<#Ä™óLÕ”Öùå¢ôô lÞÁÑ% ÿ¡íÑ.Ô¦æ#ûå–-Ð$¶L {ü×ùì)ÒhÑPà÷ô34<.¹1ëéçÞãíÕ{Øbãøö˜s;¬9Y-êÑé@ÝEÚnÖ‹ÞhæZïÒ†0Ã5A1›¸ð>ÞÚuݬïùú&úè Ú"Z(/(@gï*Ü~×fÜå÷ ù ƒ‘õ gïKÝäØ˜ÝøüŸÕŠ!köþ§ænÙ®Õ©Û%ý»î.ë4'íø÷Kñ¨àæÙlÖòØÈõ¶j,…8r-€î£á¨Ö>ÚÝ„Ý ô†°(Z:’5µIó+ÞEÑâÙdåÉåóÈÂ'ô(} XóUÞÆÏŒÜøóËûÅ ¾ :kµ2í'Ú•ÉáÖËô žD ˜  MûXì8ß@ÏGÛlùÖö),‡Çû]éfá5Ú[ÍÍØöæ1»>r)zûâäAáMà+ÖÝÓóÀ  )¢=C/ݱùˆÜ™Ùâêà;èëù1"¢6C/W‰¾Þ.Ø|æÝî¥û ë¹V#–\ÔýúÝQÕSåúõ†o).O¸U‡ùBÝÄÓžàCómì,(½G%2ùVñEÜûÕ…àþñ¡9;W,®,ú:ìræLØ_ÖÒßpìÅ &3¿=ý6¤!éü‹é–å¦ßAãïìÖñÞä%ó0 1# ÎùXàÜ­ÝóêµúmüÕÒ·$2(úØýÀáhÚÝdòæ bÓ1¸¾5 ÷S߬׶Ù@õÊ#&î!|²níeÜ–ÖµÕAîlý(í/R)€ ‰ùÞòÁãUÛ*Úë×Áéî ü(296BÒøÀëÝúØÝñÚ,åî.b5G8ûšçÙØÆÛ,ëöîœõã(Jý'Š÷rânÑÞÕïì]øWm Ó z:ì ÷Yå®Ñ³Õ¶òéÔÐu! øïêáàÔͼϕíj #Ì/y!‚üñ±æ™áÒnÐÕæSs5à*9³êÒà§áXÙØê?þÃï6p2`C®å[Ü™äíäyæ‘ñøÇ 'æ+ëîèOÙ–ã8îû ² Q ó \5éï׊ážîÔª˜ÄÈ÷ û=è¥×6ßOî1 Á)z.c$5Ð üt÷ŠäLÕ$Ù8åƒx+::²3ß& ù+ó²æÝ~àBçgýÍ#^6u52*O £ïéÍä¼ä·ìkï@üÞ^/Q5}/¬¸îsãVáÆéÖúý¼ä!˜"O víÀâ#á2îù‘T÷¶1.éãç^ÛÂÖïåH Ã$q&͆ pÃøûãÌÚVÕüâ¼#_1\5M!- þÿóïwß ÚíÒiØ6ø·E/°;„)§ úHé½ß]âßà÷ª¨%'6;'å"óªÞ6Ö*ãÒêÛí^ý? **‹"7 QókÝŸÕµè øùÿ\  ¬ OãJúédÔYÍtäˆý!å9¤Z©òºæÞÑšÇÍÛW÷£ý(~'úy Lù¾éfã¼ÔBËþÚËó=¡/4² P ¬ó€àzÞ/ØPÑ9ÝïB¸'2/$~§òÍÝôÞ¢à£à÷íøÂP(Žà #ï=××ÙÄâ÷ìJDÙq ]î}Õq×µäï÷üÔkZàûæ­Ï4Ð#Þ„÷ .r)T#iú÷–èìÕ>ÔQÜ«ñ¶N1Í0O)P:÷æìãÜ×ÚºàÞðís1½6Ç2«ù¯ê¦ãkÞžå‡ë]òå g#+ò,cÓõºæäpç5ùŽtºiëž!šyñ¬àYÜ×â=ý*»Î«h: ïpß¼ØGß^ÿpä)l/Ì%Û3 åý>çTÛԅ׫öL/O;)1X† ùzçâ3Þ¿ÜÖó'+Ž;02\âÿ“îoà÷âkå¡âtó¨ ü43Û™í\ßBèYóôÿš ´!$1$] _÷;ãšÕåNûþAõ~Uôïò©ÝÜÌ©Û"÷W ‡!i'Õ…- ûîšÜLÌÃØôôŽm,ð6ì%t}Eï]åXÙËÃÓÞë]¡'Ú9†,›%ëSå1â¥Ø¥ÞïhE2C)Ä‹ü áîÛá-â>íãøÁÿg­&° ˜4ûÞhØJã•íµð ¹ ›òðfIòÕÎ\Úí¬ sK,2 Öÿ…ïiÔQËÔìæ A([)W#ÏŒÿô€éÆÔµÍvÕÕåç -5E1°DþŽíAåwÖEÒhØ¥á£þ~,$/­bý1éäßPåÕî5ò«ï#ö&ÿG÷¬ß©Ú›Úfê­ü:/ ÃbYw,ô'ݽÖLØYð1 ¹siY·ëø×ÑJÑëܲ$-.Ó+b° ÀIé·Ù2ÓËÏ å{ &%614€ŠnöââÉÚ[Ú€Öðå ó4®8MËÓó…á?ßÿåsãõì›S,'\.RSÿÎëÌÚÞßrñ÷å0^¯N%XùJäÑ÷×bñ*ÍO–È´‹óhâ†ÎÓÔ?òº •!½/U%½yâû§ê¤ÜÊ7Íwè¢v$-;}1›ë÷rè,à%ÒÓèvþ•8y2'¡ Ýï_ââÎÛJßpðjþv2[0ˆÆ éëÝIãêåÓï\ÿ=_ê#â!µãÓÔÊÞë…ÿž‹áã"…² ÂýùßÏÑ×»çO#$?!µÜþïóêÛ ÌuÓäM8)ç3C0Ü'ü Œø™í5Ú%Í?ÒàÝú² 51c2f), xôìÊßtÙHá;çúeH*^-R$ Äé#âˆÛCÞOíûò ÿ‡ö!d%! æ(æ4ÞgÚŒä,ül P…¾\R÷4Ü÷ÓçÑ`âs:v ê&$ˆ† +òŸÙÐdÌÞÛÝ9)&/ýi ®ÿÚé×aÑyÌ2Ø ýK†.ä7&„ ¦ýŠèáÙiÙÕ-ÛÙøb&Ï2J#Ù¤ö™ã’Ûåþæûë@âD Ñ+,üïÛ²Õ æ_ð–ú ب†#æ ÿÝë2×ìÓ`êþ#É!^"MF‘ Fó«á\ÍÝÉ4âžý¬ï0¦1R$ý³œòxäÒ.ËLß°ù04â5ž%‰ÿVêçâ`Ø Ó¶ãëø1¤208S)cŒþ€è ådá9àpîæú6 ·(^/²!ÔöÙàPâÈç»ðþM Y7%\(ÖÍ eðÔØ«Û6æÇöݦ¾J#\j–¤éhÒµÕ"å´ý™å-b,&+Ò ûÄä2ÎkαÛôU¬03y0¬÷Ñùê¦ØæØÔà5ó]n.3¶/˜%üïïñä Ú±ßêæ¼óah(õ.Þ,›’øÙë0ä­áËï·ø¼þá ã"î Œ íá?Ü`áÓùì äu!7_æ;ÙÞÓÇÚ%øG-I(ž$ þãnÕñΡÕßõÎ'¸4g-y ½÷)á†ÖoÏàѱï½Ú#!4ñ-@„«óÆã1áµÝ“ÜŽóL ÷é.#*ô'ýÿé~Üûâ4ç[ç?ø¡ ÓŒ&¼#É ™ùæ€Ù+åFóåû3 ûWnÉíçÙÎ(݆ó·V$ªT%þ=êhÖ–É9Ö/î­Á!Û+: Ò; ÷èØ?ËxÖïíL³&5²)k¡ îò‘çâÜJÐø×ûé\þ²X,ë$}Æ¬ë·æFçâ!êlöÀc'(R -šþ ãÞÚä"êøÈ»:´ aÚ ^÷RÝ—ØAâÎð¦|‡xµWðÔÕ†ÏùØQêŸ F"_%õ&C!§—^óÎÙùјٙç›$œ,ˆ,ããüzïáÚSÕžÜHçý¢!:.d1Ö"R½ø•ð ãâçýë›òÖ"·&ˆ¬ÿþîé¤å^ð5ûŒþ Ÿ†!æ!FkùXæÞ9Ý´ð+ø ÏÆûÑ ‰ò‘àB×€Ö.îÊ h“%G)·»Ó™îÝ[ÓËÏ6å«Í@.Z00 s}äð~álÙ;Ô,å1Pç- 23Q ýLëèâ}à<Üê„x'b/‡Íø_éé}íôëŒ÷ØÆ€"Efû2éËÙRàøð­ú— ò‡+D Ï Vù—åxÒïÖ6ì_þ‘GÐ[ØYÓñáqÏÑ ç,Yá-›' !D¨¸î àÐaÎfß}õÍ,‚)¿–;þï–æÚZÚoèv÷Ý¡(ÿ&è‹ òòçŒæ3á¯åóýÿ!ù ;+ëMàOæžéjô§ :ìÖÞ õüß.ÑgÙ>æÄú‘hÏ#|P ÁüÐàÐîÓMá´û–Y"=%ü#iÿôØÝÌÏFÒÜ8÷fc)¶,²'¡õô5áæÖì٣݌ñ$Ï#¿(Ç!$ ûŠò¯åöâ{ëÚîòûo× %/9 îçàåbôÊûj0AL‹GèÐÞËÛøè‚ÿ‚ .ˆ![²`œø?à9ÓOÏõàRÂb!,I%Z[ùrå5ØóΕÛwü ã$³.N$Ôöô<äêÜmÔdÛ ÷ùÍ$­08%UË‹óÂçç ãÔç%úÏ f"*°û{ù êöã€ëaðú¤ Su'(Ç—ìð#ߎ۰èžô­Èi>〾þ[ë“×ÏÔ‹ç¥û¯Q%(D#¸Ð¼ùè7ÒeÊÜ4ôR¶&=+G&Ûè úSîžÜïÑÆÝ0ò G'º+D$sþ ò¹ëÝábÛbäVòR Œ#û( `$þfë&éÓç„êö7þ> ù#ÑÚ Õð8ßáÝåñ"ÀÌ¥ U ÑhgêðÕØIáòc VФ"k<ƒñæKЕÐ}Û’ðž|$ñ*+@â Ñþ:éÔAЃÕ5èc Ü3'¦(^™íúäìþß/߉à§í€ Ïæ%Ð$üÌï¾ä¡à=èUëIóI ”ž ê öê1áEãIô]þ\¬c²8œ–é–ÜÐÕ;Ü‚ô’ø)"“#«•ƒ釨åÏÖ¶ð~ Ü£)I&F!ÝçØr΀ÓËîo $W0_-Ѧ…þì‰áפ׋í~wÊ(:&Ƕºô*èGè8æVç«ø qÎ(A$„1þIëßæÊî•õª*Å!ô;‚ôìâ®ØäéõѸ^#ý–˜ìôØ}Íñ؃îˉÁ($c#w¸9ðÝMÏ=ØøëN÷ñ+P&ÏG­ûÃï²àöÒùگ쪀Õ+‰(Y îö&ð¿èöÞ8å1òåmÂ#Ë4gêWçtéqêõ#y \¹#ZÅùóà ÝãÍí`˜$å  /ñÙ3ÔÛéê±"$'µ#¥Ùï×4Ð÷Ô<â€IY%?)ä!«¾ò Ýâ׳Ûqåzö'®)Eyƒú.îžÞ÷Ü!á6釘p"(&¸4ÃóSëqä¸êŒñ÷´#–° .õÉärÝgÞSïÀþøŽ#"ÖÑ ?òüßéÕ£Öáë¦VtH%}$ áìqÛrÑRÐâåKËÇ'‹+ ù×î¾Ý¥Ô]Ñ ãÅýÛ¼&T*sXÏ0ïáã£ÞªÛgêÎÅ$ø([\âø é¸ä‡åíå}ó¡{š«!‹Oý}îCápå‡ð ÷¦¢U Ñ€ôöáTÒkØWëZûl®g N#óøöõBãŸÐ8Óºçvüýü#ž#w"¾“ñÝáˆÐ*ÑèãçùËã(é'µ"×”´òÖæ(ØŒØÈæF÷lÎ##$UHúÀïOëãKçMô˜ÿZ¾"„ šµÙídåÛæ°æ•ñ3· ÏÁ £Íîü§ã]ÛñáIêü‡W ²$4F }øóÜCÐ+ÕÝàÙøÿ`%='~R _ûÈâ<ÕC×»àÿù‹>"€'J%*U÷ëâØäØÃÞ@öåÅ!&'$|*÷ékäxç ê`úpè­÷[±ó\ì¦åIê„õÛû ¶‰  œØþ9êŠá·Ý²ç¸ùBEè?íf’ùQãqÙs×Ëåtþ‰á«)!$]ËiùMâÓÕ‡ÐjÝVø G{*f#Ô‚úÜçÖÝÔÖ•àDùÀ N {*1!uöûè—äÐÞIå<ùÑ @â#à ²þjïGéèíïÎõÀÈÈ COÿØðÒàiÞßêªõ[ˆ>"›ýûëÑÙæÖ0æ\öÝ|$½. 5ù èaÕBÑúáçõÕ ¿"s'ã$…_Tû0ë™×oÐ¥Ý)ï[Ú¢#Rþ™ù{ð5âUÝè¥õ»ÂV"!DýÆïºì\ææôñ5üg žG,T󆿫çéãñ_Ø ×v£ªéÍÙªÚÐá"ò$ SÎ$B¹%zêÁØT×?Þ;ñÏ ô¬ ï$+E Wþ—è<×)ÕPÚûì 6Þ$^'}7 ‡ðïÄà6Þ“ßðì2 iÑÑçþúö(íþæøêï¬úX,†£ ]öíuæç ñ™øÚ[Y8ÔmìˆáÆÝ.å´÷ý¿z !«evèoÚüÓNÛóç!·$’$£H=ƒìßÖpÙ>ðÃã%#h+éÿOì¸âÕÚÊÛïgå$„ œê Öüùî*ìÛèÚéë÷AY4 29ü¦î\æ­ënð¼ö|G™!Í\Jöÿåßæèô þzÁ¶(½»ð¯ÜÆÔrâWôå{»#í#“"ÎIÆð¶ÛàÎTÙ?ìyË""x“ö¨å$ÙßßdîL Ø!–‰Ú $ùãð1ç à3çÜñá.!È“^ó,ï5ì{ì<÷ùÿSdð²óóãÓâXåÁì ÿ‰ VaŽ ùÕñÐÝOÛváñí³ásæ"Á„ zïØØÒuÙGéX˜ÿ'ï!Èy-õàà×éÙÂæüñ[Š èš Oÿxôwç\ä´åØîåÖ2w´Ñõwí çcë)ðSöތౠeöìùçžç óÔÿ‡<8õíyßÆÚ™Ü”í˜Žåõ"‡¬‘ žï©Þ£×,ÙìÚwÏ"B%Q¥²ðWáÖØá×êͯs!–$2òKóêNã¥ßîYòZœ çúÍíVíKî/íêø( ç"/Ä þÈð£ä2éˆò‚÷ûç%=õØæ^Üäô=8C»*"·KóÚàÓ*Ùvê0ûsŽ !± ¢} &ølæ×–ÜŽì‰ü…I#¬!ÚL<Åõ è÷Úß{íüûÍëˆÛÑ ¶ügõ8ð×çXë;öª¼Jõ z]îäèWë‹ív÷S… =“!ú €ú9æïÞpã–ìûýv Eƶ!²‚ô!ß{ÖÛáçªÿZ¼l#;%{‰ !øBánÖÙYâ^ù¬Ù†6×ù§æ•ÝÛàäè'ýß²¥ \R »þN÷óéäç”íHþ/]?¥Hkô“ðµë#îwõÒû. ÷Ñ9 yöaæeá"áDìnü¹ÒP ÌøÀZö¨ã”Û ÚÕç'þ ï (² ¼ó§á¸ÙTÖ‘ã<ýÁ¤B$ék’ ¼÷¨æ1ßÚªãzùN ¥Ît pö’ëjècå7îq¬ÜZk8'ûïsëÒíÖíÞöåls¶a ÏûÃî£ã¬æTò\ùÍÊ~ê”õ ‹÷Aæ×èÙ1ê øõ{ØÑ!—Þ êúâéfÙdØ(è×øñ µt\¸ }÷¼èÀÙ‰×êä‡õÛ '!,* =ûPð8ä„âkì´÷| w äû@ò ïMêÙíbùÄWB *¼ ñLèdê®ì8õ‹‰ âÖ˜Ø 4ýçÜià‡éºø¸ ¨X@%}+.þÒæïÖÊØ4ãòõÚ b›„$þî «ÿÐë•Ü Ü¥ãIöß œ?üÆæÕÜdÙâ`÷ ïÓ#Í#ü{æþétÜÕݱó0`b ÊKÎJÿûî<æ¼ÞoãÙ÷ž Aò{Ü®MøJíÂêYæoéPúÚ œßûy ü“ðkë¡ðäóú½`ßAâ`ýï*â}Þ è<òŸþëp¬ ÚÐÿóíµÞÛçYôÏüQgbNý'ëäÙ0Ô à[ðì…!R ŒMeóqâ—ÙjâøïÆÐÝn¼úÉóiêåíáøýÉ–«0 þXð“í×ë£ì¾õ€ÿÄ ­ø„Œ ôæÎåwêó½ M!›ÈygíÜíÚˆáKîF„“" kï,ÜúÙ—àîñ+Bø"º\¥7òPÞqÚU߇믎‚bæ “G÷ÀçéäWèò p‡Ý÷ ’üö1ðDêWîŠôîýxÖ=«ÐÓõ"íÌçJç½ñLû+0³01ãêíˆãßÞ?âôÏp1ç#_ <qDìcÞÌÖ_ØÛëÁ³`7!Zˆ§šñvä“ÜÜÜÇîÇø®ºdÆñÀçá1áÜð.„é|"ü~ñ“î#ìpíüì è?¼0ø™ìˆå2êÍï´õuÉÚÙ›¡íônætÞÜåŒñ«ûó IÜ“p3ïBßSÕ3Ý•íÁýÚ‡T!¿#ûÉAõmäM×QÛRéÓù°ím•¾Ç>ö#ê/àäŽðöþW2áÞl ünó(ìå0ëövìZ” ÿ?ñÁíî¬íö ƒØáo ö]ãÔß”å]ì›úR á9 ®"’L ÷ÈàÊÙàlêÊüL›!w"zÑmöà"×jÛæû‘ˆ!Õ!Ë$ óû*èÔß±á—èoû^Õ¦Õ$ ³÷´é@ç<ìùòûÒFÇË:ø4ñìèuë·ósú(d™© Ðö¿ëªçÜåGïcý!– ¦þ^ (óBâðÚ@Ú˜çcúÑ@#:"Û<€ù ç»ÜEÚèýx Lµ!Žˆ¹ ²÷«çÂÝÙpæ=ûÝ 3”gÛžùTïJé/åïÓ úŸpvû³ï4ëìJí}øÎL ƒ Bþófè¦çUî-õnç¼Ò æõ(ç@ÜOÞLêÐö¡Šçé#=!Qîù‡ç’ذØVåHóF„7Ó^UýíBÞÐÜ:éÝ÷I 6Ãè?_`ùNîpá¦ßÄêÞø§ QuÍlíÿ öòöëí÷råÔào ^öðsèQéŠê,ò×ÿ ?ˆ!F|­þÎêÓà ãèŒôUÄà"W?ý æÈÙ8ÜãÇòË-5Ê$Ilú3êÛ#Üóá2ñâžDâ(ƒ |&î½âÛã’éwø ~ 2-ãúî)çpéDî—û— C¶Yvi÷Hñ~ëtí(öÄüÞ;AM ;üLë¯â*ÞŸäËó ÿ… ×d"w/òÿ?ìBášÛãVõjEú!ffÿ7êÿÝä× ß÷ò&IØdÈîËLðå;Þ4äõ`œ¹Sö†DüŽðˆêÇæÌíqþ> …@ž› þðòRì„ì*í3õ_›;›ÉþòñþåÀâeê·ò©þ©f!ž"žÿàîPßÃÙÒâ²îŠýIŽ„ #÷ añúàèÙÒâ–ðó·:]ÇlVñšáÚ›â¨ïñ^XQ)ÁÐöœê:å®ì&÷…7 vþô¾ð¤ëkëiöш*j”æ ö‡éŽèÃèíÜú ;_AÀÀî‡ßJßQäœîèžzÓ%H#:èðoÞ!ÛþÞžê‰þÐ Û X"‡óôâ°ßNâî-œnV¬×Pšô´æ´ä¸æeðrs¾Í^™ý}óIì#ïÆóëü¹ ð[Áàõèí/ç•å"îµ÷º‘:ÏL¢óGè[âä[ðhüúµø säL£ï+áÚÇÝ,îVýj ƒÎ#,! nõHæ‚ÜžÝ_íÊü  …&V• ö{ëäÅä_óͽ¥šé WdóôíØêíHúñíl³ þ.ô2ë¸ë{ïcöÞ:4 ¿ÝöàèIàñã)ì÷ºTœ#©p6÷Lç~ÝÏâ°í úÿ ñÂì!tïõ?ä5Ø—Ýêàø] ü7V ŽQ %ýÙíNásäAïÂûE ®ÚE ~þ÷¢îoçäì‰øSF/´#uõ7ð£ì¾êNóÿà z÷™Ä¦ùúêHçè½ëŒù)ËM:#Ýp ÷ãã*Þ©ßšå¾ös½"Ämúýå)ßôàÿçÔùØ Û¹N Äû:èPàÁàxç ù èÌ|Ñ"ý¦ïþêAì—ò£æ  𤠸ÞðŸéë=ð+øY ›ÜÌ,sýò¿êÎæ=íÑöáÿ²:öŒ< ˜ö¡èá ßnéø¨OQ!H"¡é}ùäçÞáÚårôïMs¦áŒýJíßãœà˜ê‡ùüÛ"}¼ pûÓî:çeä_î8ýz„ö—ûõ1ðJîvîqù9©:$ YÿcôéÆç ìñ?þ.“ÿáÀ }ýÛïJãbãVì2õyÒë["›. Vû"ëÜÜ¡æÃò l)¢#Ä!¤Ó5ñ%áöÞèêòÚ±C…% XÿLóÌæç#ñÁû^ rÞÓ­Óùéñ†èUêIõ¦ÿÁ ε¦ö§ðï ìó‡Ã gF I¿ŠÿEí~äcäLæñáå F$#µ ®ì°ágákåüò#mpç#âú˜ví¬à›ÞYâ8ñrà ÿ×Íø‘ÖòFèßæÂéÎöDè>à Æ…üçï³éÇë÷ð•þ¨Í†ébüöùíáëÙðx÷á¢ßÁ¨PþÔïPé9åÖèoó&þè ƒU!Êb_Çì âÑÜ1âŠï´ûz ¨gð%åþÞÊäfó§ÿ WZè…²ñÔçIáèåƒôcd .+=Î CÚóöíìéÉî—üMg!éÃÿÀôWíIíYî8ö[ôz×é„0ù‚í–è‚ì÷ðÙúŸ „ÆÃ¼Lÿ`ðTânÞæ îüš­"M$‹ûõ"ä]Ý{ä=í¨ù ~ÒÐGD½÷îç¼áWéjóFáµ?Q·7j÷Rê/åTìæõ6W|@W +2ûËõêî|îÂ÷RÚ —¶Ò©÷£íVêúç…ìúùò¨[þ~¹õoèååßì¦üv ‡3! 5#~òæâzßáêÒû_ UŠ u ¿Æ Þø{èˆã´äîåý—¶“©k™ ÷>êDçÌé^ô«ý tzäâÿžõ8ííðÑú— tB‡£úØóWíÛêÓð”øW¢{¡„=†ó–éâ®á8ë¡öot‹Ú  Ãõþéºâ“âRí ù8L“]# hôçßäßàë!ùYT­GÚ ÈùËî çóæ=ò&þ)³µDT ýÿ÷ómîØê]í·úÞ«Ì! qg÷4îzí7îÖò*¶ã›§}ºøäëã»æÊì‹õ2 .#œG =ù é¨Þ~á¥èôò%ã[ @µ 7ûëûàÃäôìå÷cCÍcÝÙ wû€ë_áÛäËì>÷±˜Ý%Lübñ¾ê^ð€ù}y|d Ü ÷Œñ*ìêÝòÂþ† Ç\D1 «ýÝïSê‹è×êMöU3l 2ª Ûù>é¡ârâ è§ö·ð$$¦ùýrê,â6áçöÖU12mt þ2íLæAæwìSû9ÛiC* 6ýúîîé\ëØñ“ÿ¢ Axq¹Åþs÷çîîñóý .`Ù Ëûâñåê§åfé<òÏýù(”'ÌëûUï®çùã°ê¿õšô§M°êù:ë(â¼ÞŸçÑô9å…›æYÿîðçâéöºm Ëvvì ¯ûÚñºëiéiò™ÿk A³çÝ º6÷€ð„í¾í!øƒ Šåñÿböì»êí¼ñ—ÿTÌÑ<Ì þðµäåãnèÎîþÉ÷y¥€þÒîoâÍâ¡éŸñ*f Ñ÷^ïFárà˜ç}ðÿ· ÅiÁè Ä õ«é–é—ðçøq½T+È “•ø}ðê¯íX÷hÕ" 0ú%ò íêvðÿû¾ -36 ¹þ÷ï èøåçpñ=î #Ý"dF4î³ãºáÍãÍî½ý• ´‘ ¦§æïÍämãúæ“ò\Ó 3…¦b‹òXèç»êWö >•|ÿmó¨ívïêôõÝ ¦¶@f¤ú|óØê‘é¯ïøElLÒìö´ïèåééò¼üã ãÕ<#ýfî æ7àäð¨üµ ‚2!à ÌONóÌè¯áçä±ïú†EÊÙ‚›gôšë&ægë˜÷8o 5Ùç ¸ÿÌôXîeê·ð·ý|w ›ª h»ö–ð\ïQï ø!$ ôqø›ì±çÔéqí±øm °5ÈõeéåûèàîÓûÑ ètx K@|ó÷ä àpäëTø ³|ɶjùŒë.çÊë´ñŠü\ 7{±å ÎWöÃëê:ñNù} â¡÷ û ô¥ì¨ìtõ/ÿ¿ × úvðÚìÊêMïEû`¾h¿Áþ‹ôæçÒã_ã@ê.ø‹_? µ'Cö·è½äÖä?ì úcT*8R.öCèmäúäìúÆ»@‰ÅUbùî”ìäî¥ö˜ó ˜‡ A«ý/òTêSì9òÀü= )Qä,þ¦÷dïAë×ï:÷ŒÒ 2íìô˜ìgå¯äuíó÷2 ? rÅO÷·ë_âáêôÁÒ1æÇøiîRæVæoðzú¾X)8·Ÿø.ïúçŽèÁòeü0}´¼ Úòöcñîìñåýcø Eü2%÷¡î3ì ìðò*ï ÑÁü®ðIé®égìIõ [WíÍm ùàê}ââãGè2ò“øÏl!W ¹ývîõä-æÉê˜óÝÅ aèÐ$Küåï‘ènëÈñyûV~§‘pNú ð¤êàîö}ÿÙ ¨ + 4Wúô£î×í{öEX =;NV Éüðê¤æ'èXóÝt§k0 ü¨íÇçÂåKèòóÅ¢ø9 ü8ë•äsã>çóÛ ©š .yðê9éOíUøCõ !Rœ y4ú%îië‡íÞó‚] øRgñ[F÷3îuîòòúš®7Jœü]ôì“ælë®ôH£æÚÑæ lüñIç‡á æPðcüB ^ž é ªüpðsçãê¬óÆþ™ý™ ¹Êýõð[çèã<ë¯ôÉý¹ ð´<² Bþœô~íÈëô„ý2K ªŒ ¯bQõ_ï“ìÏî®úâ?NY6 ‹ìù¶ïì|ìBñÛþ ·š{ @ýQñµæOä3çÞîûþÀWÎ ¤q¯ƒò¹æäÑæÔíÊüM çpÍ]Ä,ó*è9ç¬ëÚò' ‘»œ œXôêÜéFï‚öÈf ™ ƒÕ BTüÞôÖîò¢ú„° Koì $û÷Nð…ëúèšï°ûþaÖ&PþõíÆéýè=ñ-þÔ SNæ-ÄúïÄæjã¦ã~í*ü ¯‘ BŸ‹ôýê·ç©ç%ð{ü(f‹Ý–óÒë ë"íröÜ¢ ½ T»óÔî\ðTô>þX / þ5öˆíÌìmò‰úh»ò¯À·z÷¶ípåpæåí|÷U&; ÅÏö8ìôä•çnð€ú ¶íÑüPôeéìá·ä¥í^÷ðï¾t†‰ø5ï)é~ìÇô%üueéø» •þaô€îlìóWýºó öžÈ 9Qø}ð`í.îÇ÷¾ kìè eïùÜî éVéBíÀù¼ ­Wa1íR÷ê¹ãµäyé\öá-ŽëTEøßê1å{çí9ù97Ò}×¥ø#ë{åèníøJ+ pƒ Yúˆðvî¬óúpþ ê +˜ ï”øuñÛêjìýõ 6 ž\äe lýîónîëékíùò!:úÔ%ôõ0ë¶æ^ä@êKø¥K—’ßN §øæëæ¥ã—èõøÔ†®be ù\í7éèPîJú‚ÅW[*ù—ïBíxíôÿêP _„ ­ÿô®îéð^õÿ [È¥ÿAö.ìuèíoô!ó£Åôú“ñ«èËæiíšöæïBJP¬ øÛìßã©âÀéCó(K5 … æü(ñè°æÏìáóÿñ à)%Ðúwñ—ë9í¥õIý2½NÜ I÷Öð¦íñ¹û¿¿ 3½ 5ŠiøŠïøìîØõ–+ÀEõý®ñ,èvæéœò_o/a­ÉýúïÕæ%æžé®ó¾ ø¼Šï †ýÖîWåå{è5ñ{ÿ 1ÕÄ |ô’ìî%ò2ù µ B^ä Þ”øeïjëÜð ø ¹ -Øxôüìõ×îíßôÐþÜüĉêünñUë&ç%éÏôRÑËÃ{‡ cþTð«èžãVå$ñÛþÈ é‰ æ KþXð³éÂåÛçóŒÿÆ ¶Lœ¦ ÿÁñìŒéMì~ö:ºŽšDMŸü£òiðWñuöØ7L ïC ä[þ@ô¡ì/íœñúç>s ŸÑøÀïdêví=ôvÿöÀyò ´ü`ñiçâMç7ð‡ýjV´~AF–ôÙé2ä½çïHú ·Ø_ÿuô0ìñèþí€õ&ÿ Ý|3 ]ýíóÄíšìó¤úY = ç '=ø'òðïéò ý™i 7¨6 õ›ø«íkéÊézïýM ™‰\{ ¹¢ö/ëÞç¯é{ðÿÍ q²l«só£æÝâ¿ä’ëúR )Q3„O>ø­ìüéìQñ üõ.*‘d `ÿqôïëŽìrñø°i È©ŽåüÓóÈíMñ‘ø°ÿéG³ \ 9öùßòêìªê¬ò¹þË ¾üäõ9ì!æ_ä<íÂú¦*Îô8õìæiårîÃûå­†ÕbêôëwæÒå&î¨ùµR_á1?÷uð­í îôö/É’Î çÏü<ò¢î³ïýó^þÔD ûÎ÷Lî9íÁñ£ù¡¾‚|Ï †÷îfæWç¾î!úÈ „ G\ÿ÷Æìääwê+õ§—;ýq·÷ îYçßè®ïeù5Ì~ÈÄiøï é ë§ñKùà 8 ƒ±÷¼ò£ðµõþÐF î? x èïõ{î†ìTî÷´© Ùìvƒý8ñµêê_îú»n¶lX ù_ë“ä¶äZémöûX€[„ &üîyçkç·ê©õZº®ëðùØíÖé?ì–ðƒúîÂ3–ä°ú¯ðŸîŸòL÷yÿô‚ H  ¦uúdóÖíÞðüù — ô› ëèü¶òzë çìâ÷¡qQZuñMûOð+ésånë=ø âÐP–:ù¢í¨æ%ãéÇõ©è°%­ äüÔñâëéóíÖ÷  ‹Ô1Nöøàð˜îYï5öæÿ·Î {}VØõ2ðñõ+þ!§ r`þ’õ«ì»éLîÅöˆÝqæ ýò´ç^äzéËò¤ÕMÁ Ñûuñ è‹å6ëºôNqLrß' Ýû:ñ&è¯å¨ê¯òEÿæ J/zD Æý#ö ðÕï‰õËû + a¦ S FþOô¡ïÂí7òïûÆ p7 ›DúDñXî¡îÌõŒ ŠCò_NþññçnæÒè®òÚjÜ>ÞH nÜñåçÊåªçÕðsë ù Eÿ˜ñé%èDê¦òï $qû #÷óícíï+ö ”- |FûóÎðžõïúQt 9“ èù¾ñôêyëHôÖýHZüTç Ãöìîdé`ëéõ¤ ®åF þÐðVè%ãèå€ññþ² õ):omÇô*ì¨æ$ètñTüèF‰ aýôïìáîª÷B‰ È+P'/ýöóññ›õiþùN ÜŠ !ÿÊõ@ïyð—õ€þë ºÖ-ë ø î?çhé¸ð¤ü Ë/' ¨löKìæßéqò­ÿˆ{¼‰X}ôVéæâ„å#í–ùž ßᡉæúÚð¾ëyî6ô¬ü5ÉQ¼Š=ü%õ¯ïkîvôäû}' 3ÏŽ ì#øÌò_ðŠò~û@è lêÝ Y£ùMïŒëÏëÃñ#ÿ» m²øJ©ö²ê'æJæäì½ûP Ë@Â@}öëçJç”í1üÜ Œnmþ¯'ø5íÃé±éîØùƇ´ c~øcñeñäóÐøa ò %ë „Êù£ñ®í§ñøÀÿí Á@wäý/õKî{ìVóÔüÂo‰r åäõdì;æ*æšïzü ôö V`øXíµåàã™ë}÷ÉЈVRˆø”ï$êMépðëúyß\„“ûnøñ¶í#î²ô§ü€` cq á9þíôæñPó·÷‹N@ j’³’ÿêõíÝëuð„ø w1lKû&ñÕèléiðûË [ÜŽgøìãCã–ê/öZ$ÃãÒTýuòcéè¶ígö®Q‚›ù%ñ˜ë¶íôÎûÎÍú½ š–ø óOð¾ôÒûÕ= Æ · * ?ÁöÜðãîÏð@úDá <ºw•Wüçïyé4èÝë"øÛ'Ó¤çzû;î]ç6ænêy÷ý–íäÞöÿû´îœçÀåÚè™ô%[%4`ÑÎýóKîµí/ðeùO§ KcÆ «¡÷ð0ï@òþöc} Ì chãùüVõ$ð]òÑø¨ÿÁ7N Økû|ñËêøçÎíùΑº,! ÆüWðæçÏãÐè(ô5¦ì³ ä Ùü=ñ¾é(æëìõkPSÛÖi üÉñnëKèVìoõÿE 8À•ñèûÌôfò>òR÷Hÿþø 7F þˆý"ósîð+ôƒü . –bi D_ø¤î»ëbð?øD#Xüñ3æbãé÷òë þ>é ¢Òôgéšåäé"òÿ٠逓z þùó²êèníñôàÈ ¼Žrõõýçõåînî“óKù²ž PGÐ NœøxôRòZöˆþ¶ ÁUk Š÷–î_ëìGô³& ìJÙQ iÈôÝëéèžê ôeú®}/4 :'ò6è™ä æ4ðÀÿ­ ↠ÔÓõßìŸé6ê8ò9ÿå dz£ÈIÿÑô»î8îfðù÷áÍ äRŠ ¢üÒôâñ]ôrøÍÿ ƒ µ 6 |ùò©í?ï:÷]ý %bLcõ2ì<æïçƒñMý~ E®ÜP°èôGìËæÖèóØÿÕ '‰ÕãìXô_ëQå&æïëú^Ïû Ìí÷îñ.îjïªö&ÿ¬¢!þ ZÞû½ó}ñŒñªõþR° ü€ SÍÿÛõØï ñ1õÆü#«×7 ˜Î÷ëìYç¶ê3òàý ˆ‚ù4tøëëå¦çàîØúä 0€EAPA÷òëæ½èÜï½ûÚ 6…{º{ù&ïÜé ì!ñúo™€VõÛÿ ù3ó òþörü'v Û> AÿÆõ¡ðQî¦ñÔú zB¡ †›ûkñ¯ìì òBþý/ô^ –¤öë æ_æî®üI ]™yñù‰íDç æ&ìZù„êvL³ùûîÑê­ê`ð@üc;v  H±úó)ñò³öÿ} Ô ¾ ^TúáóßðyôpúM j÷Ô2ü2ó<ì:êuðÿù§T?âk~šùEðÄé½è’ð]üD \=/Q6‹÷ÃìåXãëm÷h$ðl¦ª süóì’éUïûøÓÇ£7 Y•ø²òJï>ïÅõUþ¨¹&à ;ðþ+öŠóÕóµö‰þ>” \v š´þÔôíEíæñ¦ùz1C*Šƒ½üððEèqèîë÷1¬R`ûïDæ•æ¬ìA÷À” œQšÊü§ð çÝæPëô0Xc,wúÿSö=ðôðàô û.ú × `—ýLö*ñƒïGôóúçÓ Wä $Øù4óOðùñ ú× .ü ¡7ü‹ðñé˜è4íCùFŒç\ß þMðõçgåCé:õ‡¹… 7þPñ´é‡çë>ökoVîˆ ‹ÿ?ô î]ìÁîM÷Wr UÚ ó¡û£ôózõúcá í (› 'búæò¤ípï¶õEýõG«Vv ÿ4ö7ï•ë>ðú±áã,€ú ºûåïQçãUèô{‰æŒwNc±ô¨ë&æ é¦ólÿ: á$!Î þMõÍî÷ê£î÷Cþ ëÊëìcü®õ#ò¯ð>õÿüÔî ”Ø J9þˆõ^òtó›ö·þù¼ œ&j „+÷kíÎê/îÂô=Í ;Q;t ¨ÿôÝéƒçì±ô¦cݦ_ç ƒ¨ó#èGä‘çˆï‡ýô v„¼è làøJïõë5îúó#ÿŒ ×Ú$ ývõ‚ïïÊóªùZ– ïÀg 9 úõôAò5õ]û6§" * =Õ÷7ð™íï÷ñ& ´ v ³õ×êéænè–ñ©þ ð }Ïô™êÊæŽèòÑÿ ‰dH8¼d÷cí é7é‹ðNüä L’ÿ #Iø òáðjòãøL¶ OA {Aû ó¹ð6óy÷ÓþC\ j fÄüãõ?ðÏðv÷3ÿ<9ß»é %¦ôDì­æùèÙò’þV ÇW ©Ÿ÷píæìæåï=û*‰DÇ÷üîqèyé@ò ý `³³K3-ù3òéì¿íçôý2÷ Y] vœý8÷¼ôÅó‹÷eÿè¶ tÊ S@þÚô±ïJðzó&û…£ >®2 òåù¡ï¿êûìóþ $Åõ­ö¤ê¯ä¸æŸíVú˜ èSùàÌ(üOð–é#ê5ïÛù­¼”r lù ðšëqí¹ò¡ü¤Ù¼ìÖ Ö·úŒôgòCõ¹ùçöñ  ŸSÿÿöñò¼ñ%õâüyn ÿÓ÷ Úú#ð*ëÁêƒðzûñQóLuùüíÝèçè¼ïüêo(˜žîúíPçPæì^øñîCw›©'ýÑòî'íñû~ž W½9 ÷øêñŠðõñúöíÿ¥ h, ï„ýÀömó(ö¯úô Fü ¾súeòþë?ë?òyû B i;žÐú~ðhè׿.îÌø˜oŸ¸E¯ûÏðÑèHç¹îžùÇçü‰£Öû òêÛçÙíþö•­ FõB/@ý+÷“ò*òá÷¸þ´Å Xs v&üõqò òõÍýP Æ›+òöSððFó]ú p 3UÑÊÔúqï³çÃçíg÷zpÉñQ …þòé¬çì´õ‘u{Òÿ·ý#òêé_í¯öUÎÜLùÿöŠïÙîÛñløZq 3 a ZjÿÒùÅõUôøÉýŒT ÐK *–örðýíŽïÑö›ÿü_ óuþÖò¥ì^ë=ï€ùõ Ïi Ÿýßïùçºå‡é·ôüª Øÿfº ̺óáëêèYëõÜ ÷dÍ ÿªôPï»íð{ø› I Æ ¨Úü«õäóõeøÔÿ$V ð $ ;úó¥ïŽò²øêÿ€ ïXùÊ jÿNõíéqíöõ›ÿâ êÙˆu <þlóæêgçÝì÷H×@óé °ÿ ó®é³äÕè,òAý 9‡›¯ *óøJñíYð…÷¤ÿ( þˆ a·û¶õòYñ–öþ_ 7  ÿ;÷£óeóöŠýjò uÿþ+ÿ¨õWíAë‡î±õG ‰ïö »ÈõSëÛçØê©òYÿA ›Àªj 4bôëézæÍé+ò€ÿ2 4®ÍÛùÚî†ê$ì"òÂüܺ éË´ÿBù“óâòmö2üů ¸ ê ¥oþ[÷ó²ð¡óú-m Ù¦U ìcùPò—ï7ð£ö!ÏÍ“µ }Yóªê­ç‡é™òqÿ ߟMð‹öDì¨çè%ð‰üÛlú†l ”÷YîŠêãêBò§ý¼ ²éa Uùeó9ñªñ¢÷A œ ʹ:ûâôSó®õzùõY ã OH öûUóÍíÎîƒô`ûÞì Æˆƒ <Ê÷cïLêóìPõÿ„ GßôU[õÇê'ä æ»î¼ùœfB3pÍûÑñãêkëòúLc’˜ k‡øÐñŸí ïqöDþ•Ës„ EAÿÀø'õ¸ó.÷Çý®Æ '  â¼üªôVðâðUôü®Ô EŒz /#úÒï†êâëyñ¡û*p´~Êgøí&çÒè“ïZû‘ â¯õJûïÌçÝçíp÷¸ yÁ&±ýôšïšð+õ¡ý!± b JwþøòQðÑóXù1% ³ º  ߣù¨õ6ó%õ¨û¥õ ¡»º 0ïøìïìÎëmñ ü©Aç­;¡úî¶èhç"íÈøoÍBA5&ûð,ê¬èîùÞ¶uo“g×üó¹í·ëÙïˆùÄ^ BQÛ ±ˆû»õ#ô”ôXù㙿 Ä % ÷ðúöóéðÜò¨ö¢ý½w œM R&ýqõïDïÌô'ü¯ÉÌË~ Uù¯îçnæ-íôöJîà6ê XþórêpèÜítöž éŠg³½üsó`ìë¨ðõøP 'ó¿Ú™ý¡öŒñãðõÚû\A ~ £_yý&÷¬ô ôAø¡ÿ Ü þ‹¢¹ÿgö{ïvîDñ øùq ¿Ì›¡°üÑñbêBê'ïør^o: ¦þÒñrèÝæêêôÔÒ wWè J ö{íöëcï÷ð rXò Lþ§õïˆï]ókúïÛ %ýÅü¾öôÌö˜û°Å8 U bQÿøöcò4ð#òÄù¤* åXý´ ÿó¶ì¼écìÉõš ò•ì Åþžòkë˜èìëjöi Ô‚Þ+ ˆôìÆèùê9ôÿ®Ùx†² 5øªòð/ò&ú‘ Þ – À³@ûñôñòƒó~÷Òÿ2‡ ™ — šËü‡öóÜôù¦ÿÂ)û|qý³óìOéšíõÜÿ ˜Š9mû`ö í¯èúë¼ó/þF ]Ônñ êÿÒôìCèì\ô8ÿw wÀ‹ë 4aùMñíPïuõ¢ýv þ L ãþ…øúô@ôøÿ­ ³ 9 "Òý&ö§ò|òOõ„ü¦u õÌ ©ø:ðÛíTðAö:L ÌM“ #õ¶êfçSêÉñÐýÕ ÁOAþøî÷éìë^òrýˆE´Þ ýøïî¬ëÐíÇóôýÜ:ˆ°u µûeôó´õbúôhÊ E ĺþrùcõbóæö\ý6 õf —+ùõñüíºíÎóÙü¹«ËtÎ ö@÷ïHëkì ô¿ÿó gW(1ÉNöpì<çç¾ï]ûR¤£Ð©gÉûýòöííôýÂB Ü_ °»øØòOðZñø¡2a š ¢ G;þ>øö÷rú¬Þ¥ ÷ ÆVúXóŸîgïoôõûo’ÌYq¿­ù§ðþêìXòMûÒz­ÑFÊó÷iîè"ê‘ñëûŒë×”IPûñêøéÁïføHH >f âüxöò(ó®ø©ÿ‘¼ Æ g A7ý÷ìóðòŸö”ýšL O u’ÿw÷ óîòkõ&üp Öw– ìËùŸïíêLìmñ-ûÝ.‰`#aû‰ï‡é/ê4ïHù{bhŽ\!ü…ðê ëËïoùî °­î¦þ´ônï¯ï%ó¢úp  t |­ûâõ,õ½øÃý, ’1 `7ÖøóJðTò™ø”ÿÎ²ç¡ Åñûçó‚ïšîÇó ýW‹*êD… ùÛî¿èsçfígøš¡á$Û)  þsó“ìAêÒî:øÏL 5³¼›EýôÆîbíòëú+Þ = 0[ý2÷„ôªôrùÛpn † =íøúõ—òlôÓø›w ïLšêdþCöºïîÒñvøùÒ oü½ Ïúƒñ½êíéÅï ùÝYñálì þëò=ê£ç!ì…ôËÿ Æ~»® jt÷/ðî%òùÉ" oŸ 7#ü8öÖñàñ,÷!þ¶æ 7 2 ç”ÿ7ù)öóô„÷,þí± ã ‘ Ïuþ¥õÙïbïûñ¬øT ,ùõ€ ÿ’óíëäêîö¬ñ \Œ—Ä Ëþ·ò£êféÒìXõ³o ‘n€ <zö!î ìî¼ôÿ Z þ^ obdø}óÕóìö'ýŠ ô Ñéÿ»ùô$ò5õ-úöß s  øuú~õ¢òôjúÔÏ ÎËðü?ò£ë.é²ìýõ› D †"l<öèíñéOìÅô´þÞäþ1• Íxõäí{êí]õñþm¬PØ’ ÈxùzóËðåòºùé= Ö íü·öÊôËõ<úË5^ æ ú Ò5ü¿õ™ñuò”öý /¤ CÿºöÑïßì5ðV÷7 ûü?­ TõÉë=ç2êáñüÉâ`EUPåùÌðæëî—ô€ý§·˜ÅX Ðdø:ñÃíÌði÷ÿ9Š ëp žòÿ9úÖõWôøðýÿz ä Lí7ýÇöôÝóÞösþ´L ¸¾¢ Vdø2ðuí›îÆó¹ýУ]> y÷Ûíõêâì_óÂþ9 ½ç¯8²AøÈíéQêÙïzúZ‰ øó‰ ©ïû™ó®ðäñÓö°ÿÌà U\ >&„ø°ò×ñTô¡ùÖBÇ ø —zü÷§õdø\ýƒß ê± ] ’$ø\ñµíIîŸô‹ý(ç¢ ,:ù>ðPëƒëò¤ûÊØ4‰ŽTø1ïlêîêíñðûhƒÝí(jûnòoí%íºòÚú%, Ì . ¼û öÏóõóúô© = Þ”ü:ö¸ó¾ô‡ø³ÿÒQ B V :9üÉõñŠñ7öRýá/`’Ò Hôøð êÔêûðú¬î³çʸûÔñìêðêð$ù’ »Û!Hûòûë’ìXòŠúÊ‚ 㣃8òýƒöCñÔñö^üY® e»ýùRö©õæùϨ ËØ G£þöçñ²ð‰òqù”' à&t ­%ûò±íîSò¥ûÁ©îÙÊõ,ûáïÍé?éjíE÷¬ ì?¶: ‘þ ô@îtíØðeùƒ% –ãn ýGôßïð‘óXûÙq ñ  ¨ÝÞüŒ÷3ö`ø…ü$Ûd G : þ‹÷"óñçófú<9 ¸yJSûýõyïí@ñùö Ç&Ñ0û<ñ‚ëSêoïìø|49F¸ Pþ[ó†ìêëí^öüÿ ?¸Cù \÷Bò—ðô û,  " Ã:tû¼õÀóôoù•‰ì á +yýO÷tôçõÑù½› – i´üêôzîíñ#ø'§ Z¹ŸŸ ýþ(õ4í/ëVï¨öì¨ ‡æ°}’ý|órë éRî=öéí  ×Ó énødðÏíóð’öuþ¢d û  '—þ#ùþôlõ@úúÿ@F æ d ˜mýK÷¿ózòãõ ýS EÍ ­ÅÊøRóµñ+órùüD <\ü¤ýÇò¦ëîéìô/£ ô?]] ë~öuîäëÍí)õïÿn êϧ XöÏî…ìfî-õØþa ãÈ Rúõ.ôLöçûôb™ Ž D=ÿïùkõ?ôS÷üí8 G¤  qHúhô­ð?ñ§öþÚ‡ã Sÿšõ|ïÔì[ï*÷÷€ 1Õöœ ŸŽôrìsèNêòhü¡Vsjø¢¾ùGòBîRïžõ¼ý\“ ÚD ±øåòÆðþòùº ú # ›Ñýø"ö¢ögú;1ñ Ò ¾ûõXñ«òõö&þ³*WÚ ž¶ø˜ðžìÂîwô9ýþ Γ- «ö¿íÙéÑìÑóîýä ýráÌò÷ùð»ê ì&ñ]ù²£ Á.z Êü:õJòÜôÐùTÇ3 Ô   Ì™ý»÷Có§ò÷÷üLE N p ’jÿNùïõâô¨÷šþÒì û .ø÷Wð=íîšó˜ý±‘”¯ -ùÁïŒë ì¼ñüy<@·Šfùæï…ëàë\ñ\û`¨ ’·f‹Úü\ôƒð£ðÅôfüƒÔE  .€)úRõâôº÷@ýš×  ø ¶ÝçúÓõ-ó8õ9úuŸ ¥ · ÏIú7ôžð˜ðâõþqIvš Ç÷-ïAê2êrð2ú=$VÆ üþò7í ì#ñ–ù; z¤Í EåúZóûî­îôóáû± ޏ ¾püòö-ô¦ôùãÿ% d SúüŠöúôfö~úñ' • # Nüý†öñµðôWú® gë %Àù"ñÙëÖìBòÙú…á‘s&Þšüîñ¹ê1êî\öj ½êy:îþö%ððúóhúPÞ F ¶ÝûçôØð.òÅöçü„ ­ á Ñû¿÷»ö4ú¡ÿ; ÷ ýì4ýûõ ñ“ðUóÙú×± óPŸî`ýçóiîZí¾ðDù‡ }ߦuüîñÙëäêÈîà÷ºr +jõ ÈÿBõÏî(íæï`÷_?§– þEÿX÷5óAó”ö:ý% Q à íû’õôsöûñÃV „ 6Ò û‹öìóùõ­û¹w ³Ì Y,ûØòmíbëHïÏ÷¦ /ý ÿ¤õÝî×ëïéör‘ Ú”žÂ¡ý&ôçíeëúî÷W #ôd °^øÉòKðó;ùÇÿ`É Ÿ…¼üøAöÝöûO| ž !ÒYüÛõóÝóI÷MþS– ì 2 ôPþÄö£ðXï¯òùï =AK ›þAôì­é·ìó?þœ Lâ)Ž £Ñ÷òïzí"ðöšÿq ¨JX ¸ÿ¿öÍïîÖðNö­þ(, 8Ò >†„ú(öö‚ùþÖ[þ>aý¬÷µô]ôMøÿïB Œo 5~øüñaïyðmöcÿúO¨£ÑñÿîõÞî¯ìßî0ö¡œ ò‘õ ätöùí¦êóëò‹üHÄk¹ë ªéùÑòYðŽñ÷ÿƒ :º c“¾ø¸óópõÎú€‰Ñ 4 uiƒüÃ÷Cöçøƒý¸›  a x ¥øó}ï‹ð£ö×þJè- lÁø–ñ*íî’ôTý1µd §söï ëÊì;ôÒý_¨åâñ¢-ú=òíYíéògúÙ{ ¬ Ë xTû¨öQô:öçûÊN] l \Mxü÷×ôõùÒÿpF ¼ ûª¡üeöùò½óg÷”þ›"H™‘ —~øeðpìÑí÷ò&üXºï¾ úñaìzí‡ò„û|ÌHC gvù¦ðìíùñ„úÝ´ F/™ ¼°ý}öÇò™ó÷îüÉða êÜýùØõö:úÁÿë( H  ð ÿøÉóTòãô]ûª“ eý € õlúüòžïøïÓôÐýW”–P  ù…ïúêë ðÝù [ßï·yÃü2óHîŸí¢ñîù" «¨ íûô±ðåðÏôüt‡ U |"‚ür÷‘ö_øüfÏÏfKYþùø)ô^òzõ5ûzP ËÖ Ùrý}ö'ñÇï ôAû¿5 Ñ|ì ù0ñìêëáñûìò1}Þ}üþò7ìfêíîÁö9# …êÆÏþ”÷Žò•ñµõçû¿˜ { íQþúêõ4ó1ô_ùWÿ¦. L зýøyö÷Éú£Õ² 6 \ ï»üjõ5ð§ïêòØù°- ?Ä¿Qý>ôCîší[ñùé2 ´-©X üRò°ëÌêªîªöÌ´ 0íĬ gg÷éðdïÖñ ÷YÃ Ž Ü  þEøáôßõªùÿŽÅ Ç Š Ùþyø¾ôÌó-÷âü&úX ê t_PùîôŽó™õïûíG ½H¾ {ÜûFòµìëÌîF÷ðæ †§A ðÿdõÝîÂì#ï¸ö’ß -QÉá4ÿ\õtïªíåïèöÞÿ‡¢ú ›Ü ùëô,ô0ö’û¾ƒ ú.úüõŒõNøý½{   hõûÑõ`òâóÉøLÿ º ° †ùü|õüïîíñ¼ù6 F¨8 Þþªôéì[éAìœó#ýª“ ù3òëî]ñ”÷OÿS:)|ÿÛ÷}ònðRóùqÿg Q | þ)ù³ö÷SûØa û Øþ$üdöÅó˜ôŽøïÿÞ ­4þ3?øyñðîäð¦öýÿ\ ŸƒA™ÿ¸õ î‰ë#îíôŒÿh cÌ ÿôøTðìÈíóÿûeR oÄÞ KÐú›ô†ò†ôFù~c… 0  ûEþjø/ôôi÷kü–}> Ì„žÿú÷œö«ù‹ÿ£ š çÓÿX÷Kñæîð6ö—ÿÖ‹%ù ëjøÅðVíÝíÆó`ýOJO@ ‚÷ßï¤ì{íóHý zÞ™ Bnû;ôÒð²ðõTüF%  ® |h­ùâõ õ¹÷éüf+ V:üùöVõS÷:ûPbF : *ÿiúÝô\ñ©ò@ø­ÿwûÅ: µø÷'ðpëgì‘ògû†îpVûñòåíbîÅó›ûOå)' Cóù“ò+îïî+ô`ûç gH Æü_÷qô›õÞùÃþ/]·cL‰üø÷@ö/÷¢ûdn È ® (Áýèö§ò‘òÝõ°üÿk H1Ç ÕœùÜñ¯í¦îÍóâüo›lj?Üèú‡ñ ìì›ðKùð¶ i~‹f£ý6õFðWðôOûØ þ>R õŠûÀô^ñ{ò[ö ü¸½[ ÷ ²BžüâøDø_ûÍÿ²®q ŽP†üRöÝòîñõ@ü8Ž }’­ ëÓüâôtðeï0óhûq{ £Ui QúŒñ"í—ìAñ¨úT’d>§ýkôïDí}ðEø ÝÒ| EþJ÷ô€óºöHýÎ Q i ]¿,ûšö¨õ÷HûV÷‰ïË›kûçövõøÜüŠ£ sq< E¼û?ôÏîÙí%òiùÆ? À€*cÀý[õ]ïîBò£ù4á cß·~ü³ó‡í+ìPð©÷0 ˆðàåÿ4ø©òûðÒóùæÿæ¦ ù ͇Oý ù÷1ø„ü€jP { sߢüùö…ô õàøhÿ•8 | M êœþª÷‚òÈñÝôpûmN bµoI+ýêó>íðëOïÛöe Ê[ð@ AáööïUî(ñÎ÷R% FˆŸ.ÿ†ö2ðÌîWñ,÷‚ÿb «N ÌÕÝúûö(÷Îù þc#MÂý¡øšõƒõ®ù°ÿÜi Ä a <3žùeôÃñõòÛø~¸  ü`ýøôÝï;î.ñVùa¦ ¸ª‰ ¤õ¬îˆëDí‚ôþq;WF ¨ãøózðûñ+øðÿ-# '¢ SùõÙóÁõ,û#éV q $‚8ü0ø—÷…ù¥ý±~‰ [ Äbïùlô¨ñƒóøÁÿ1<$£ bøôñüîVñ‰÷˜ &æ ÅÚþ£õ½îÔë˜î‘õ8ÿ ðÌRô &¤ùòçí ïôûb Í > Á–6û¬öÝô÷Îû“ª$ õ n2†üÂ÷ˆõöú|ÿ‹¼È M0‡ýÉ÷7õûõšù.%F Ý 'ÖÿÈ÷Æð8îIð&öfÿñ®ÿ\ ÃZù7ñÒíMïÍôþÛ'Þ2Š ÖUø#ðÄì)îSó)üÊN ·>+ FŽý¼öáó¤ôð÷ßý Ë (òý ùóõÍöˆúcÿ7Ü j Q !Æÿ3ú1ö«ôz÷õüÍw¨ È ÄFù»óñò øŸò~aK =ø]ð?ì‘ì³ò>üÀªÒ¬ =Zû•ó+ïÓîØó ü‚G ®Ê ¦û’ô(ñ1ñÌõÓü®Û /  0|=üOø*÷~øÛüÿž¸ÿQúûõþôO÷øû½ë ½  λüŽörò¯òëö“ýéÚ ¸ñ# •³ø‚ñ?í6î ô×üY)Pùv;ûòÝìQìÈðyø[1 ¢ .þu÷óÔò°öÄü<s  „ ™†¸úîõdó™ôêøiþkͯ .g¾þXú†øòøtüË‚  ¬üKõ‹ñàñdõ]ü÷ wÆ8 ³üZô§ïÍïÐó»ûlK ¿ |øúÅñ’ìì¬ðù…u T“f#oÿ¬öVñ|ðó5ùM` # Ô„ý«÷õ)öiùÿfœ E ó OÿVúIö×õÃøãüÔ¨½]±þYùíõéôø\þ# ÞŠU SLûSóvîYí‹ñãùÜ ÅÜ’îý3õŸïÝíxñ]ù\ ;û#ÆýNõñï@îñÌøø  D›ÿÖøËô“ó8öºû\†Ø / ½ žûï÷U÷ù„ý2~' \ ¶}û„öaôögúÍkQ T / üçõñNðjô ûɆ †]Þ•~ýˆô¹ítëÁîìõªÿ{ Ò FTø4òðûòù_¹ Ò" ºƒþƒ÷@ò£ð„óüøæð ò Áâþ³úøYø±û\¡Ê`9qûÅö@õDöZú‚J m[ ,]˜øêò€ñŽó;ù¡P ‚/â Ÿý¾ô•î\íSð‰÷ÒN ï’º¶ ¦ß÷¥ð,î¦ïLõEþá îå CVùáóò^ôgùò© ‘ ú •pÿ`ùµõµõê÷0üë$älý ÿíúô÷ë÷dû.zd \ Lÿøæò¥ð£òéøº°\/‰ :øÐñÌî™ð7÷¬ÿ=JžòÔßÿœöðAíAï2ö9ÿIS]ü ¥¨ú ôðAñ=öüü' c ¨ ¦ª±ú2÷EöRø7ýˆ$L Ì 3Œ2üç÷Ñöoø`üòŠ5 º ×*û0öžóSõ1ú"äXG´¶°÷Áð=í.ïGõøý¦ñAvµ ïgú3óLïÁð`ö˜þÏ£v;; gøøèñîeï¦ôTü' hHô 0èý¢ø²õ¸öKúÿJ~Ñã` ü’ø ÷øSüÊó Ÿ  |þ#ø2õ!õøfþBt ^ ` ”ÈÞø?òÈïEñ…ö[ÿƒU𢢠.ŠùVñ‘í4î$ó1üê~ ùžƒ áüXô¶ðüð õÚü=¦ `Î QÒû€õÃò0óšöûütíY †  Ü>ü<ùyùØû–ÿ”<úvLEýøôô„÷QýØ[ · ] ü™õÛñÚñtö¢ý^… à @ùÐñî”îXô&ý >Û P ü¿ó­îÈíöñTùÇö ÍëÅ Â$þø©ôlôøâýäR ¼ 8 wòØúüöÛõ5÷dû™ <cGoüeø÷ºùþóU J § F ‘]ûÙôZðgð®ôŒûŽ ³>R ²yü!õ+ð=ð÷ôü© ª¸ý `*ûüòeíí‚ñùµx ®ÿ¾ìÿ¡ø3ó"òõúÂÇð = IáËüéøÒöMøwüWsõ @ ý_oýôøªö´ö-úŠÿst íz€ýe÷ ôô÷™ý‰å ñ6Ð ’éûšóÎî[îúñéùŽ– Q]#þsõ&ðï!òùÞ± pÑ µþ…ökñ.ðyò³ø J l Ÿ Œ£ÿ ú ÷÷Fùþ]·/ÿþÌù÷u÷¯úRÿß ~ | Êv2úËõëóåõòú“ O d µÉû±ô‹ðð7ôùûÎa ‡ºc]þõØîxìKïdö=ÿGÛ«ˆúŸÅø‘ó†ñÏó®ùÜ º ' üÁþkø·ô¨óöFûùO‚  fC$ý«ùù`úþß¿ ¨ÔŽÿ+ú[õœó¹õGúÙÀ] ; …Tÿkøßò]ñ|ômúXI =fE ìýÌô`îžì:ðI÷ºd —šù [×ù«ò’ïOñ3ö‚ýcÇ ê ~ r ?ú˜õmô÷ÁûÇ´î - šYÆýsù·ö,÷žúåþ|?M'ýüø.÷¤÷Kû8¢ ¢ † Fjþ÷Úñxð–ò±ø`P 1Ðn7 /ø¤ñEï÷ð÷Yœ~0ÞŽž÷äðIî¯ïõAþ ’:8 uøû5öÌózô”øßþjh ˆ“þÚù3÷›÷5úóþˆNØ  ¸ÿûŒ÷ÖöYùýÄ” ®^Xÿëø˜ôÞòØôœú® «cüD d"÷zð>í¬îÜônýŸL‰Ñ ¥Îú>ô³ðpñ·öFþ] ] žsùœó–ðhñKöýC: ¨ ¸ S¡ïüpùö÷#ùý¤’í$û¿ÿ¸ú÷½ö­ø¼üyvx è ¾TŒü÷%ô`õsù–ÿË- ^ µñÿ(ø~ñmî…ðBöˆþö>ªàS ÒãúÝòWî ï›óû] "*é î’üùõqòqó„÷ÐýT c 3Þ¸û„öôvõù%þÖš‡.tÝþuû‡ùú‚ý··ð1 ?‚†û(öŽóàó˜÷_þm7 ñ‡ QjûŠô.ñ˜ñ öâýþ‰ ¼o ÆõùSòƒîéî¾óJüOÆ  ¨ Ó7ýpõñvðÏó¦úT| œ ÿº•ý@øéõˆöúùµÿ+ à J Ýåÿû¡÷5÷0ùôüÙ{æSðÞý­ù÷Ôö#ú™ÿÉ u­ ç ì~úÐóáï¦ïôhû½€ ð‚ b—üoõñ„ðáôQü£; h%. xûô‚ï²îÆòúL ¸[µ ÊTÿNùnõ`ô)÷/ü¢ˆàIŸ§ûÓø%øšùÅýÇÐS ê¡åûª÷™öAøôû§6 Ø S×û¾õäñgòöýb¾ ¿ ~Ýü´ô3ï®îjò(ùQ 6f- ;%þtö.ñ•ðôUúÃ] µ¢Ž •þ…÷£òëñ¥ô¹ù²íU  Ù#)ÿèúrø&ùîûžÿî´„NSkûÜ÷mö“÷Þû„ÒR ô ¥ å†ÿãø’ôoóŸõRûQoâ ®  ¼ürôùïœïNóæúäÇ yÖCÿSöSðyîÙð`÷°ÿN- 8 =<÷ø;ôó4õÄú™‚Ç ° · Þ ÿxù:öòõ ø¥ü›,(w ÿ~ûùVùDü{xY z  ¶þøîó7òôú> ©® 8Nÿ øCóuñ)ô|ú® Ϊ¬ ÷üÎôMïNíZð÷C ¢ã'‘ <Yú~ôsñÎòÎ÷/þÒ¹ - ® xyÿ[ú+÷$öøKýG²% u’üÞøøùÏüÒÕB1H!ûµöUõ/÷Fû‹Z Æ ¾ ù†þ'÷qñÒïoò ø6ŸCx©žwøòóïMòä÷)«V‚«‘e5ø£ñïÞðÔõˆýºq 0• D 6ýø'öe÷¡úŽÿjß Â>üõøh÷Æøü/'à Äšíý ù†öˆö°ùóþBä4 Œ ÿJøaóòôâùÊA |ìÉ¢˜÷©ðÝíFïõ†ýþ Ã~Š _ û|ô£ñ€òK÷­þüì Ï? ›2ÐúõÁò}óg÷_ý†Š ž†&üùÊùÿûèÿdWNÎwPýòøÆõƒõ¡ø€ýN§a ' çÏcû‰öÍóÁô…ùùÿÕp {½ ŠqÿI÷PñPîñï,öƒþYÉAXa ûõóïˆï7ô7ûí ƒ n ý ŸÑü—÷{ôùôù±þ‰U © êHùú‡÷ö…÷Áûm‘U0£Òeüaùåøgú<þ™ïU V ç*ôúdõ•òód÷Øý„` Rú ‚ R©úþó±ðÓñaöÌýr RÓÈ Ä7ú¸ò¢îBï¬óGûW— Å{ üyþ÷Wóýò°õû°¯: J ;ü^øöö®ø_ünžw ­ À\þúµ÷å÷ÐúåþQì•~¼…üÀ÷‹õö¢ùÏÿ_ô 4:Š «`úó~ï¹ïðó€ûÙ5 ïúß 7Çü%õñâð¾ôü6 ÃÈà HýœõvñÙðêó?úk¾é H p ÐÛþù÷3÷ÒùþC¦ g­ƒþOú±÷(øÑúÿ*· ÓÃÿ ûb÷>ö¸øKý¶& í ¡YúHôÊðþð»õýAë g‹¶ 6+ýZõõï¦î_ò'ù3& M^¬ u¬þä÷%óüñNõ7û½À  C Öý3øwôÔóüöÿûrK òo)¥ý¯úlùyúþ<{ÈcâþúzöÉõ²÷üU° å v Ò+þØ÷˜ó"ó öÍûw ï   ÛûOô`ïòî™ò™ùÉ U7Å–“ø§òÏðÔòø•ÿeÈ ~ v -üþ+ù9õÍôt÷güÇ Ï 0 xa7þáùQ÷À÷yú‡þõc ¢+ýúÅø¹ù]ýT1û µ ô\ý—ölòñôú«Ì$ªð d¹ÿß÷âòñôFú4• õG û¯þ=ö¿ðïLñ„÷¬ÿhV ‘« òÆúôõ5ôvõõùðÿW.  ÀÖÊþñù›÷å÷MúÓþµ'º•Ôÿ¯ûÂøÇø1ûíþ²¥ ÜøEþÿøõËómöçû‚g ^‡ Øþ(÷yñ/ï²ñÄ÷xÿ·ÿ >, U¸ùêó[ñˆó*ùGÔp '. îøó–ðrò‡÷þm _ ` ¼F'ývùø¹ù]ýI/aiÿ+û‰øøÛù,þNg ö Šüs÷xõ‘öKúT…Å ¦ ¨¨þÃ÷uòØð;óâøB Ÿúç »`ùzòiï¹ð£õTý]V ‹Ð âû4õÄò3ôÁø¨ÿšl · — ൚û˜öŒôºõ2ù[þRXp‚¸þäû[úRûþ~…ísÄ#Iûµöšô õ°ø£þß: ü ñ øÈ›úJõ)ó3ôäø 3æ _ SÁCøüñxïºðöCþl øïH øpû¶ôPñZñaõ)ü+ J Î p¦üý÷öÍöpúñÿ«ò 0ðÿ>û”ø~øCúþy†¥ƒ¸ýÚùH÷®÷ïúœÿE` ¨ à ÒLaúËôŸñ{ò÷šý¬ Æ!ù ØûçôzñjòJ÷.þ Ç ÊÆ# w%úUódïöï©ôûœÑ ¯íÖ ÈäþùWõõ ø„üÄ=ê>Ôÿ™ûøø^øúÒþB2w ™q@ü®ø–÷Ñø~ü‰Ù³ ìº(ûö‡óŠôø:ÿ±… Ç|Ä \oûTôKð“ðôšûá« Ä#ö VüOõ?ññmõEüFÚ à\ þÒý÷ëò˜òrõÖúOŒÁ R ¤BÌþÕúõøúãüܺ¸™]vûWø×öì÷Ñûç ã È Ø®ÍþpùcöÌõVø¼ýÒ* n ÿ #á?úãóÊðñIõÚü,` è  <ýaõ¿ð°ïÈò‹ùa†| „¼ /áþUø„ô™ó4öåûA»E ~ ¸ùþ"ùÀöºöPùþœóX5dÿ›û|ùõùCü6õ)òd6©ýøèô5ôüöäû-›˜ 4 ª þá÷ÐóMóÊö´üèÐ ¯™ñ æ]ûíóïiîUò/ù±# ¥&êý Ïùkô{ò‘ô@ùoÿ³˜ n ¥/~þÄùçöÙöÔùTþ`Ô¡ ¼9lü9ù øZùþü/ß7¶ÀÅÿNûã÷2÷ùaý@Ÿ'  "Zý»ö!òeñJô/úô ß o DÅþa÷7ò@ñ3ôIúZÌ Ü~– 'hÿ”÷Ãñð:ò÷ñþþ p í eÇüÄ÷Âö…øQü\šÛè6Ø›üùl÷Üø]üÒbBŸ¿¦ÅýúøNø“ûV÷" ¿«ý½÷)ôeóíõôûY 5. ÷þhöøðýîñ)÷AÿF Ìï‡ìù©ô„òôgùb*  8t«ùõ9óˆô"ùüþHL¥ ’ÿÿÅûªù®ùÌûÝÿåpL®Üyýuù ÷y÷=ú·þK·„ Å 1Œóú«öíôÅöIûVÜd i ~±ý_ö(ñ_ïòø+Å!¯ ‚EúÇóð™ñ#öÇüH ˆ Ø Òs4ûöô=ö¤újx « & 2ñúa÷(öê÷™ûíÿ :ƱDeüú×ù©û¡ÿF& N ~R¨úÇõÖó-õ=ùŒÿ+/ ¡ @ 6‡ƒùËó§ñkó^øÌÿ~9 ê_Ì@9ùŽò¸ïñÜõ`ývÕ ]Øg øÏü’ö‘ó'ôŽ÷?ýRØ J ©¤û½÷Çöªø[üYûœ ãÇ‚þéúÄømùSü£²ŽˆŸûè÷<ö ÷ûþ÷ D© çìFùtó¡ðTñ&ö…ýŸ 0w( :Vû0õòò ÷#þq² ¶ ÒûÐôñ¼ñàõpü6) © u R þmù÷<÷GúÐþî \þúý9úløÿø™ûÂÕ âiÿû$øå÷Qú‚þäˆ} ­ ð¬ÿùðóPñ‰ò[÷Xþ] fË Kü2õñóðØôKûò — Ê b ÑüvöÜòóþöý/@ Q ? ò Íý´÷`ôWôc÷&ü¬45û¥€†ýû;úØû@ÿãüLæ´sþÕùçö›ö¢øýØæ0 ’ XWý—÷_ô®ôë÷Àý¶q ¼ p  YÎúóóAð½ð¸ôÁû,T Íhª `þööoòåñ³ô{ú¶÷þ Á À i3þUøõõÜ÷áüÕ„  ›Óý®ùï÷óøœû‚ÿ…Ï E½ ý\ú/ù¥ú~þ…” ‘ ª—)üwö ósò„õ‹ûeÖN ó î Dþª÷Ùó3ó|ößü† »Ë÷ ])üàôwð›ïôò£ùY²Xà ©®%úÓõPôGöøúNB¨ÿ¥§ÀýÁùÿ÷{øqûøÿ"-`ÆRVÿûBù…ùÏûËÿD6²–FýøSõèôÑ÷ý›ì « -R ˆý×ö(òúðéóÀùGšC z Žþ×÷4ó!ò*õ û‡Å Xlç Ðÿ#øýò-ñUó1ø›þ` é îËlükùÇøÜúiþeµÑà åþôúÍøø¨úäþ‚LT |A°{ûˆ÷]ö¹÷ûI»w †  Ô‚ý-÷ùòzòRõ#ûæ ÛLu :nÿ…÷ãñ9ð6òŽ÷IÿÅ+ o¤ ’àßùÑô[óõÄùn¹ Õ |¹Ùú´ö˜õùö€úwÿÁHݹ?þaûgúþû ÿÖ_¢Ö-û#÷4õöútÿÝ ° & 9#úæõUô-öOûÇà Y °þ’özñ¹ïò(ø`ö?? ÉÕú×ôÕñ‰òÙöðüRº ÿ rxû«÷QöÍ÷ôûü¢ » ¯ÿDûùù4ûñþ—réý™ù¢÷kø‹ûNÁÕ k V + úKõó¥ô-ùŠÿq“ — > L)Qù ôºñ˜óÕø »q ·R 2zùGóð4ñÑõ™ü8[ ‡ w Õ ÞÒý¿øàõeö‚ùÿýêr¥¦RÓþûÔø ø%û/ÿoª´æž,ü`ùˆøæù©ý4ç ‡Uªÿ_úö©ô1ö_ú䢜 ã^ ?8¢ùuóËðÒñCö–ýq“ ðWÒ yû"õ'òÅò­ösýÔ¤ î † t M_üuö‡ó¾óÒö_ü]Ä ¶ Ý«.þ¶ú­ùËú„ýxâ^ŠtÿhûTø$÷Éøuü ÐïF WU(þÕùg÷ˆ÷¹úÇÿ0ë k ¢ÿ…øóœð¾ñÐöEþ+ Õ2ó âˆü”õ‚ñ ñ¤ôîúÅ» Ï ¿ (Sý®÷‹ôyôÕ÷Mý6‚f ò ûqýù÷T÷>úþœ×î}¬ÿ£ûúªúý ÷q3ðý«ø³õ®õ›ø~ýˆÝ· · y›Nüïö±ó-ô3økþ©Ï êy* ÑáúôÒï¿ï¹ófúô {„« ‘xÿúønô†óöáúö‹Ó b ïìý›ùÿöj÷{úÛþ°€õ#'¢|ü«ù£ø3úý-_ A¬ïþÿú¯ø™ø±ú,ÿ¶B ë ³ `³ûŒõò ò?õ‚ûŽ Ç Š4 "Ýý÷ ó™ò—õÛû‹ \£ V¹ýöôñûð\óüø. < Ý × ZÂQûð÷G÷ ùýÝ‹šs±—lü)ù/ø›ù¥üèõ#T{»©ýú ùú\ý™óÚÜXÓëû°ö¾ó³ó"÷FýRö G‘8 þ¤öÊñHðÚòÊø&mž ø º ŠWÿ›øFôóqõíú¯Qí ã Œ –ÑÿvùDõÄó…õèù;ÿjÜGñyÿÂûú.úlünØc{-qýâù$øùéûUr© D+âþçù)öDõº÷rü—Ÿa þ - 5 ý{öÀñ«ðÉóÏù•G ‹O$=–5ùpó&ñðò¯÷gþpr l uaú!öÆôåöBû÷´| “ × }.hûë÷ùö½øõûÔÿ` ·ÅŽÿ‰üäúåú ý  Z ÝÝþsùŽõcôõõhúÎÜC  *Ìÿ;ùˆô'óõCút,÷ ·I ~ÿ‘÷ò;ðòa÷#ÿ³} _,‰ ü“ö%ôËôwø%þ¬àÝ ŸÛ<ûí÷1÷ÉøzüD6š"ŒÓþºûbúWûÑý5~uòþsúU÷-ö´÷þû°… Y i Ú$5ù7ô òróRø ÿ° â X ÅÔ¢ùtô2òœó¬ø¯ÿó¶ û{ Ѥúuô«ñkò·öýÍ… O ä Ô—éý¼ù‘÷ì÷ÑúËþ­†¤Ïý”úlù1úÊüÑ­GDµ£þ·úgøØø‚ûÆÿÆý §Õþùwô›òŠô[ùQÛ .ê ÷ÉqúLô(ñ1ò”ö=ýÓá Ø O  „¤ûÝõéòßóá÷úýü™ U à  *îüŽ÷ôæô¸÷+ü`~xNñ\þÞûwûNý5CÒsÌŸgýgù÷ôöIùéýc#  Sáü@øöÈöNú° à k ‰Ýÿ»øóòjð‰ñ<ö¹ý  Ð2 ‡êüHöŸònò¶õÚû·% B êštýøAõXõ2ø@ý¡ø’ X pTëýcú ùÒùPüöÿ!Ö"Óÿªübú¿ùûÿbi• & y«äû8÷˜ô¬ôú÷ný‰øÕ T ÿG©ûvöÇóPôøÿÿü ÷É Ä»ú<ô†ðWð5ôßú‚ × |Ù Yxÿùºõ§ôæö`û’b9O)*ý;ú¿øTù=üH ÈvÜÚÿpûÉù,úGüçÿŸ¬ g%ý=ùÛöX÷gú4ÿ ‚  dM ûÁõ)òYòíõÖûr M ù ÒäüÁöûò ó£ö¶ü/Ó ™þ¼ |/þs÷ÕòÐñôÔø'ÿ& U ÏìV6ü’ùùŠûÃþ™…WMƒ˜þ û ùáøûÊþ¨Ï÷KnAünù³ø2úüý®­. ßÝ#ûòõ3ó±óJ÷•ýÊë Ñ"k #µý°ö;òPñöóÒù¢; w Ì ˆøþ“øxô—óÚõúúb-J k  — šú÷7öÄ÷zûûÿÁ8†vI÷ýIûúæûšþ'LÄl üù¤÷ÔøPüÐ_‹% WXôý-ùDöÏõø«ý§* † o ( Gÿû¥õ¾ñþð0ôú"e xØ” )ÁÇùÐôò ôøwþtÞG Ðãtÿ‰úc÷€ö‰øÖüÃTR © ¬ä3ÿeûXùù ûhþ¥í¬÷ýûéùàú~ý…Ây* |f4þ?ù£õ×ô÷zûnQ ñ Å »qþŽøfôó>öûh" q † Y ÿøÕòñëò­÷€þ“¦ é \·üIø„ö¤÷Óúyÿ,ÝW¨;þyú%ø3øú-þk š/‹úý§ûåúDüÿJì6öÿçý²ù£ö>öø²ücú¥ o Ä+ÿùúóó3ôÇù¦ÿ/À ¿,|K–+AØÃ‰»Œ\ßW0ïQ?@÷AUñUô¿ûqù¾øRöµòvð€ê™2tDÖ#ñãÓ¸ÄÊâðBj „æÔxà'('îðµÔ€Ø íÈ÷ûñmì)c1&÷_ô5í5çgæ—ð‚ö © . æ× aúîÓçÁè˜à²ÚwésÈ$0 . þý«úÝ÷VåtÕ:Üñ5Ü Ç°j4úÄìtíbì\é:è$í’Çä»4  n EøOîÃðýÿš¨ñ³çýìÛ§O™ ' aðÊMì÷æéëÚð—òÙîŽûP#Œ #6ü~òFàÕfàªûÚ `¢®N$beòóçléåïVêgê¨ø  Õzêî  © ýüùæúáòîôú›ÿ`ÿæoŽõ ×ú ù¦ÿ)úéð$êµî+å‰ÿ%µ‰o”Q+óâájâÖî=ô Ü+ Ýâ›lðKímëFèåæíü$4"ÌÎ l ÄÿÉèQ׊әæúÕ×´I"(Ól(õïhñ ìà å¬÷i z¦ '¿D ëüîì²ïè÷ ú#ø1ò‰úð -I~* ~{OóLèpíPø õ³ñ÷øÃ³l ° ÙHç°Ùà0îþXÕ<$#ª%ÛÿÐòïðÏê4åŸàäéNÞ3 RdntÒê9ÜÞêð%ùúÝ®( #cU(\þî:ã.ì|úq¡ÿli¬}FÍú°&ÿº÷píøçhöÊæIï¦ \c÷&íÇðæïýåîæó‚ »çO ïcû·ß˜ÙêáFïvùöù£§‡&n$iÕýoùLôøè‘àîÝ'ï4 ¤¶½ÿGHÿîUå¦ì¢öóÑòzûS ,¦ùUy uybñ<ê!ñÛ÷û‘ò_ï%Gz? J ¤¥IóOã&âvñüøú®þ ‚Ó'Æ«Žø—ñÞðÀäõÚ•áÛòZ )¯awZUµótÞß»æÁïòËó#¯a úÇöøÖëeá˜âÏöŸ Lvßjoö¹ô%üªø(ìnëóv• & ÜÇ>£ éøæõ ÷1õ{íÂáÚèõþÖY¦Û:÷æîßíãïðîòîüWÀ'Õ(›ºü~øÛïsÝØã,÷õ å&t!LX ›ñBèéëïñÛë\ñ)PÕÐ < ûÛóÝé3î ý÷ý³÷÷?ÿÖÜUœûi ‘ ©ù'êŽè/îGøŸù2÷Æl"· ÍŠAúÐï®à ÙÞé›ÿ% .ç"OƒÜëªá é3ìèè?î!ýØ)¦!yH ¿ìTð}ÝqÝXéDû~- 0Ïrò(ô1øIügù‘ðXçÄð6M z Ãhr —›ü÷EýùýÇðìèâë†ûÎ ÏT ±'‹÷“éç/êèîŒëõððnç#Ä á|÷RæÝÕ[ÙïÖþí ž$X ü&ìNê°ïˆéKåí¸þ‘Ê4« ³  'Ìñ`ãeæ›ðAûŒùEöõkÅ÷ ƒû  Aþ_ìØä/òSüü ùê÷ :«î r¥Êñ÷æá°ç}úh  Ä '{ pórêOèVê èZãòr “†#Þ®û ùå&ØAãIõóügóK!  PügõÉù*øfìõéòý€³ #?@ g ø«óD÷ÞûâûñðïFýÂú n 4£SŸhïšìõôôó‘ïßî>ùÑ™Usá Ý Ìðdß°Ýâèaü½Ø(ðT% rõßï>ìÙé²âäÍù:Ð|2{— çûôèä³ñ–ùæø ù—ýIªx*ÆR"þ¦ðÇïö2}§øÀúŒ¨s èÿöþžñ7ãêç“õ)ÿ¤Bp _¢"¨¦ð^ïÓî;æ'âbæú O;øéÍÛPÝëøùÿ“zÐ$žv©úÃ÷OóAë àvåäø ž à ™y‰ éüýî ñèú+÷uð@îö• Oê‰R©þùñÓð öðúðñöéÔô¿–F¥  ½.3úå Û%åºïtö‚û˶ç(:%-¦…õõ-ìõß@Ü]å\þ) œ=âGÿìé!ä¹èóôZð5ûÙ ¤  à$˜Ãúííåpï¾üÍÜÿjýõ‘$ ¥‚ünZžõìëbéˆó‡ÿþ5þ2H CHú1÷‚÷ òãâhóÈ+˜â~‡k ê÷uá?Þžç»ìÒðÔõv+¤)Ó!È¿¬ûåëÑànà¦íš9 C °Ñe„Àü%ï÷î^õ˜ú—ólïÔú3 Xh5ç nò‰îlø÷úöäï°ñ¦Iý1X <´§óTçå×î-ôó›û] Ö$$lì7ý¨÷\èVÚ´áöôÄ%7™Ä} ‹ôsãKæëÆêæëòk@ c½ µÝŠþ£ízå¦èB÷üÿ­ÿJá7ë nüÞúwþŠ2ûÜì4ì÷ útr ÏŸÝÒùoù˜ûhó‰è3âdìÇÊ ¬¼†……ñïÜäzæíïéòêìù03 X s: O Wô»àdÚÍçùN– Œ Í!8ì ò1ìýð„ïiëïéIóÏ }‚Ù äM §ÏŸówîßòÉüTúòñ[õ<Ç ½Äý xÚ ²ùïê‡ìóò?÷ö¬ôšñ?Ð Û‡ü›ì$ßmÜ¢íNŒ ©W‚$ÜvõïAèdë‰ëæ„ìlþ›  Ú 4 |sñjàäoò’þ/G*µëfб÷Ùúqüìô›íHë-ö°P @•Hà Lþ=û9ÿŒþŸð4è°íäúôæ?Í uB ’ö7ìÀî<ðïùê­ðäöíãPå ‹ø'æ0Û{àó\þ~¬à ÷"Œ|þ:ò3ï•ð‡éAåŸïìÚy  ] ïòºèíðNúxýÁù°÷’ýÖ% ’\¯ Ç>ù´î'í¸÷jü–ö:ô.új ( ð£éøÚæ|â%ê#÷? ¢tø ?Ì ö€ðhðƒí›ç„ägóg ѽÏFü. ½ôžãùÝ5é¨ö9ù%ü°£ | ¢ÿÕúJûÍöpëªégóX£‹ïÿý÷X÷¹þV7útïÒïPý§ìB÷ù %ý‚ñ©ñö¿ï¨çêÞù›äñ8l]Éòâœá—éÈôZùFýž #–E÷\õ)ò€ëãåöø¹ pC‰Æ­²ôÈçéXôs÷{ózõ6‘%vRÓmûÞï?ñÎøËþÒûÍó&øãê¾&Jˆü«çònç°ì¾øKþµþëÿ… r5 XÿZöC÷óõåÜß„è þn]§GtíÌãŠæºíŠòüò?ü^“šo§éþ”ý[÷Bí[å†ì:ýR— î} D’¿høëòù?ÿ`øCð)ñFüÔ R òðO ;ŽÝHùxùäú@÷¦ì¯é‚ö‘  Ð Œ 7Vÿ<íæíªóVö¢ù'v"G2}5ûï÷üëòÞ[ÞÑìRE©¿ÚMYìïmì ðPó ð±î×ûÎ?Gç¤ü×üÈðwìóõnÿhâýþÝGü 0þþ9Oéö'íbíw÷óþMüsüýç9ÄÃÿ†ýVùî âÂå/÷iÂs çŸ{· cùÕè çìÈî£ðW÷LK Dú *–¡úDê„ß2â¼ñ´e‹ zE‘Êý#õ¹öüùy÷»ïDð+ýŸ ^ óÿ?… j Ñîõhö ýûûõ´ðföÊë ® _é³pûuò ê.ì`ógôáò‚ú» øK–à ÚÿrõóäyÜ¢åÄöoh Ó ìîq 5õYêæìŒïÏíôí÷ â¿öš ” 7Þû-ìæ°ì[ù ÿý­þ"D˜ª Yàÿ´ >ù³ï¯ñ´úý:øcýë õÔJþ™ÿ[ÿöë#è}òçcÄt ióßÿ^ðXêì~í¡éÇì¬ûÒs2@#j ÍuôsãÛß¹êaø¼’€xÐERÂøvõ,öÙòîqîúŠ ‘c þE úý þ±òñøoü ÷wò6ö† É SÿGc6 !ûOò%óŸõô„ï¤ñh,þ © S¦þ3ï>ãuãâï„ûÞˆ0&G!”\Tó:ïÎî³éíäìÍý»C2qÃ,ôòFèvë¿ókù8úMûI I ÔÖüŸÿÿùêñÑñâú¦b:þ¾; 5%Jýiÿ1¼ûâî"é©îzú×Þ\Ô!Ð `üWõó/ï/è™å ðŽžŠ’J› yüxë`âcæúð0ø+ýìwbk ÷þ:÷]õRñ]èüåð] ºÒ Ç [”õÏõòU÷úN÷òõ×é } úßö âýúôüô~ùzøóópôbýÑ GHª v ö‘æRâ<éÃó#úÿª ¯;!~ ¹þëøùóëâ~ã.ó _ó\1º ¡øóêHçùìéò9õ?ú¦iÃå.áþýõqë±ê¯ó¸þ¬¦;| œµÿïÿ&_üóìñÙû:{=mŠØ ?‹úYøžôuìÂçlíWü e,œ¿Ðòmå7ãéÄïbô™ý÷ sm iX Ë®ý¼ôjè>áçKø? ð ×Å6Tùrð<ðWó-óHò÷¼+Ôû äÚÔ Û_úqñÇñ¹ö8ù,÷ÌõXüD…gK ½ Ÿ  wþlðVéçìVóñõ¿÷¨ÿW2êÖ¨úRð'å ãíœýø ÿòj\zN¦ðøæTç'ë®íãñâý¼[ép§  ýöèêGçDï6û"A˜D  -*þQû‰ü<ûÜô˜ðõƒþh×PñpGž…ü€úy÷ið»éúêöôY Ѫ&zþ)ï;éMëRíîôöøÖ³j ïRù¯ë¹á½ã†ðVÿiº м#¸@ò í„íCíìð„ý‚ Ë U € ¦áúÁñ%ñ¬öûúøü¥ ’ 5çä[Õpõ+ï‘ñ€ö¹÷H÷Aü‰#¾×ax„ÿ´öÄêIãÌæ¨óuJ¹¥7‹ûÇî¨êkêþèçé£óÖÏhq„ òÒù‘ësäÁè£óåü_Ýej à ù²øN÷´ñaí›ðúõ3:[Ãù íÊýyýrý\øüï€ì¾òþ;Ò] ¤S®§÷ŠðãïéîÜìñîJúL í³ã ô¤ó å/ßVåBòAý„¸º"LŽ °ü¿ókðjìçlèô™ÕðSùÊ„wüÈð í¤ñQ÷ùlùˆþ¢ A©¸ #±{àö(ðNñböTø[÷Éù\ù 8æ ôçýÿ¿òææìå,ï—úD9u^ü÷CñíÜçdåàëYüÍ“}ÝôFûoñÏãáåè®òQùõþ f ] îÿúûøBñ*êÇë‡öj Àœ òé f(û…ú"üÇùÓó¥ð^ö³>Ø3 àÖ£˜û¶ó„ñ?ð²ì¢ëXóºÜ)-]Ô¯ ‚ÿüíqâãÞë.õ%ü_ó/]=šû&õ0í«ä<â¦ë ý ܾ$ ˜óÆé£é´îcòöôüÿs. 4ã(§oøðŒñ÷ÎûõúÐùƒÿƒ 13 Á™­g[ù8îŠêÒð½ù{þxœÁÏt ÕþÉõðé ãåjñx©«‘gµþ ì)ãLåìüñøªð6”—œÿ!ú·ðSçæWðþ6‹ > YÛšÊÇùKõjöPöòLð,ö›KxYØ»þ¾ ÿ4÷öcö‚óÔîÛïúdi˜ûë2ìöÔè…å|ëÂñ ö#ýl eë!ÕÁüÚúTò›æšÞ>âð…Ç ÷ìâÂ0Åühî.êvì?ï¹ðìõ3:"Jg åñfÅö—í\í.ödþÍÿºþ¢ ¤Nã!átûfñáìòð®øÜü©ý„ Û£ÌQ˜þú óíédäê†ø@…ˆœE }õ éçãêÂíˆñ`ûü Ç_ (a:—ÿ½ôçqàæ¹óejÎ ªf ’ ÌýöÑõöróÕðÏô‡ÿkv 9|ö ½ )>ýUö öú8ùµôlóDúsSn¨ V óA gþGðÛéhë…ïñøô°À§‡÷  _ýtð ã“ßœè™÷І \Zâmñô7ìëãë–ëñïìû† ѯŒ‚ < Xøìsèaî÷Îüùý^ !H" oãÿDuþsö#ðaòšùÛý=þÿßPV•|þ¶úOñéºé ôª' ý ™ÜÅá<ÿ£ðêUé—éêÁðßÂhEÂ' ÜþæïøâáÀëë÷<´u^ù^+Ë÷DôóÃï,ìùïüÆ vJí < ‘ <.ý×ó¸ñ®ôðöõôBúþà ¼ ‚ v #ПøzïòîõñÏòAóRùù€›¼ # ÞùVë{â°åññçý– •8*ùþ€òì9è,åHæñ\½Zåô} èÿ ñ”çñè#ñhøŠüÉf „ï æoþÁþÙûÙóî¨ð)ú}öYa\AMÿaýõúKôeì+ëªò-ýn¾ ; Oû3ò`îªë’éæë%÷mUÇ"«x0÷°çápæœñgú† íŽX þÿ¡÷*òœëiå>ç<óý)Ï€ Þõað"ò¯ô õ×õ-û%š ÷ " Óƒd gEù5òQòˆöø÷Ìöbùšajõ~ Õ ž†ÿ£ñæeåíaö7ýŸ‚ÈoÎ ý¸ôî|çJäMéÌ÷‰õ‚•å¢N…ôèvåÙëhóHø)ÿ ŸÞ/ a“ý;øïï.éŠë°õŒÿƒl>Ü/œüþ:þFþ·ùåòjï¹óüØ‚Ga fs’ óþµ÷äô¼òéíÜë”ò Å ¬Õ°N ~ÿ&îsãçãHê2ñ÷ÃEÑ…«£ ðÿÔø©ïúæäôëíúf* ;LmoröRî:îÓñ†ó¸ôÔú1v à ×$ÆþG÷®ðGò÷ ù½÷Ù÷|ÿ _U3 X ú §Üú4ðµëûîôÁ÷Jüßµœ 3rûÇõÛíìåæÑðld žŸD|À ý×ì¹åÿæºê'ïçõšï–ÂÊ©ßüºòÕé²è¾ð«ûàh°5h=Všû*ùúæøôò ÷ ÿÈ\5 Sb÷ˆþêøVøŽö0ñ˜ìIï«úun<1¯‡ ZúØíFé*ë¦ívðæø­›„ ¿ãþìõ)êtâ<æóô­ =»wPÙ ÛüÑð·ìnìâë˜ìÂòþ ¥Å i . A ù-ñÑðmöŸú-ú«úiëN ƒË °}ýØóäïWóÀø5û üJc £3È Ù¶¤ûòòÞè’äùêøz¯ ˆüV± ¹ø³í/ê¬êë%îâøy M´µ lËxöÊé‘ä_ê©õõþ:™ ‚i¬ þød÷¹ô(ð3îgó'þxõm< á J‚úVú û‡÷=òòPùgÖ¸ü×  Òÿ¥óîˆï_ñ‹ñ‹ôŠÿJ¡µ‡M "ýrïhãáê#÷• ãB`éËùqñ4î~ëyéGíùp[‹ä  ¦yùsîììñù_üºý©5 Œ%éL­Aü¾óoïóù6üüþ†’ÊVAoCûïðÉé*ëûóHþ”†çòaÙÇÿGóËí‹ì|ëcëò*ÎZ®ÄÑ —ýî&ã†ãµì(öýh^Ba!LýÄøCõ ðÂìŸðú°; é$ k  >³ý†öáõaøùÅö/öèû¥ý ' ‘ í e ¡LöGð,ñ¼òYñ½ñõø93ožï c%ù²ëAå†èbñÝùzB Uì{Ì+öðëèÀè0ò¼ììÜ4Ž ^ýtïjèûêÄñVöeù±ÿP •'9 ïo°ÇûôhðìóÇú"ÿùþrÿ½p ÷ = çÆòüsö'ð{ï›õ5ý-ªô Zb×R8úóžï«ëJèÖêöVà ìr»=ø7ê\åéðöÃü<dVX ªµú¶ôÛíñè8ë|õÕ4 ¢ 0ÌÖ {þÐô‚ñtóõlô<õÒú:8 ² I ó— ú tRúõör÷Åõ–óãö–Ù T¸ … 1‰ÿlóªêcêÑïÐõªûôŸùëæ'þdöâîìæˆã6é°ö»¶,CÍp¼›÷ÛìFêí›ñ õ)üFÏy(oÿ­ùüñQíbð¦øCÿ.Lºzª „hþäýŽün÷£ñ'ðÎôäûuiÆ Ô¿ö  û÷ ò;ìúêqò"ÿt ÷;·7U \¾ñéàèí“ñ!øžúgÉÎ U“ùïÇåFäPì¦ùäY E®‚ÝKù>óÇñòíñ¤óÚú|é à H ÜènQøäóªõÞø7ùbø©úUØ Ð ª e x ïh÷ îÃë?ïÂóúöãüÉEiñÄÿ*÷ûì§åç+ñþBb Ù ?þºðêÖé½ëwï÷Rè-² +0ü³ð;è¯è¢ðýù ' q}M ½þýŸûÅ÷*óÂò]øÿÆð­h é Ïÿ¥û<úÔöSñ¸îÊò¬üuW ˜ ÍÖm!øÆíŽê®ë*íPðÎùŒ«Ñj¯* ëNöêä›èwóøýÍ> UkŽu ýdóbï3îwí…ïZ÷«.·áƒ + " ë)öÏïÆðõyø¡øÅú “ H  Ú »ÊHüô¤ñ„ô÷s÷.ù!Ô ÂPIF};ýÈóë·è¹î?ùd ½ÞBœ’¦÷.îkêDéé›íú: öA9ÒÇ Ê“ö¼ê1ç¾ìqõüþÆ­#¨ ÿÄú)øJôzðòðk÷wÎ=[ Œ ÷þ¥ú½ù ø§óÜïÒñ­ùU7i ü òø. :=ö1òñ{ï¤îlóŽÿ… †ÛŒ ­'ýïæìå°í¿÷;””D˜òíøFñâì'éóç¼íœúµg:Wpˆ¡ù¶ð¬ïëóv÷¹øûå± á8 $†5ÄNû¿ôóVöåù®ú_û*ûph T6K—ù ïâé ìÂó-üã© Dö/×Å÷Åñ9íûèé•ñâ9‡#¹÷ ‹üdîpæªçyîhõ`ü+æ5¡®Bþ·ø¶òtì|ê-ðcú@¸Ì ð ,N¤ÿŒú úú÷8ôÖô!ûkäF\/ ²  úö õ óˆðÆò üÂÉÔ Gõ ¬g÷ßêåšè‰ïöözÿë Æ­úüúRókëæ®çMòBï w hUu ˆýìñÊì.î¢ñKôÐø3j öpP Cvš\ùòñèïšó”øgûžü5F< ' ÕšÒøþ[öåïšïÐô²úÿÙæ T×ûïüŽöÝðÚêGè®í¦ú ^žëøJe!ökéoåèç¥ììòêüî GŠ&}G*ÿƒö>í‚èßë¥õ ÐÈ ‘¼šQ –ÿkøÂõ“õ€ôFó&öÆý G 3ã … ÐS³ù‚öAöõžò¹òËøü É:ÀÅ Vzó¼ëSë¾î½ò˜ø70›Fc ¹¯øºîLæÓä‡ìšùR‡ã&I\~÷eíZê,ë"íÑñ×ûç€É6 þüûÎñîžñ\øßüÖþ°Ç ô jËÀ`çü÷æòôóÍø(ýqÿ›æßý>¼:û˜õ¹îQéêÑòÚþiŠš<Ð>óÌëbê*ë_í€ôޏUXÅ eú{îjæç}ïfú p ùâo"úÌô?ò;ðïÈñÑù‚c • _ w Y ðìkùñöVøù,÷ËõSù\O { a š : Ž÷ ñ*ð®ñÙò(õ?ü?‹X­:ch‰õ&êÅã#æÉï=ûÞ_ ÿùVÃôñôöîzìîê’ì”ôËbf¿¯ ¨üñÐêÙìó’ù±ý¾† uWà ÞSþáú„õŒñªòò÷éüOÿ Mó (íÿüö«ïCí÷ñÞú¯žo DeP8óù(òÈî˜ìUëéîóùù¿Å Ô gõêè­ã{çð°øl| ®ã lzù¿ômð·ì»í„õÃm œ Û … >kÿ·ö2óÍô=÷]÷V÷·ûÖ n H ý a úóšñdòšò%óÇ÷¢¡ Ït1ý Ѷÿ*ôfêèçížõšý}¶Å}%ŽûßóDî^épçûìšúû Ü›j.qdõêÅçÇëyñ´öµýÏ:.„ oíÿñû¯õ¢ðñÂöÉýÜIír ; " ~ÿOý üdøÊòðÐóÁûkÞêù;$ 5ÿÿö‚ò»îëæêIòÉÿ¦ 9’&õ ÃÿUñèBç€ì©ó5ûÇ(Ê Øýóöðºé6èùîÀûÏZfŸ,g¶øñðòòò=ôyù ¸ P ò ß®ãü|öûôŒö}÷ûöUø~þ%õ “ € ß õ_ùhï;ëjîãôçú²£z·z?ú¼ò?ë}å§æÃð”ÿî cX$°u &ÿñèé1êÒí+òÙøŒHLEt9ŸNû@ó€ì¨ëGòùû¦‰ ’ …`Fªÿjû÷ù­÷Vó¼ð«ó®ú¹!¨ùº îÕüùíõrñâírðâùÚ& CÓì%²"øíùè/ë³ïQõäý .óÔêèü„óæé<äææ²ñÕþ_ý ›# p õþíó™ïÈï ðìñÜö˜ž l? + X Êù[óˆòÿõ6ùúûËÿHÁ M ¹ >×¹uü—ótîïSó_÷óúTX vë…¿IöúóˆëóçÒìNøâ¥ ¿D&y˜ö¯ì÷éëaíˆò¨ü‡ »ëê»ÿ]õkëIçDë4ôÆü·ùWBŒ] ÃûuùÆ÷ô`òõü…,Gÿæ v x+|û×ùWùXöyò°òùl< ? $F& óþ»ódí)ì:í‹ï_õwîr8õ zŸüìñ˜è3æ¯ìº÷õ£ Oo-“y†÷ðí¤ì¬ì/ñúû; EQEþ Œ´úòïÝñöwø•ú»ÿ ¤ e !0óÿù1ô0ô1÷œùûmþ · C\ZF1ÿ.ùÝð¹êîë”ôÿå ½€Âš ËÿôSíKêöè§êÐòý&<Ê&BK‘ýIñæèŽèöîf÷×þá N$º¨hü,ø0õvñ?ï#òjú‹dR / G ò Þ©ú«ø—ø»ö>ó¦òå÷1TŸÖ â¬ É û[ô¼ñÊðyðÐòŒúmšÏÎ Ýþ÷dì æŠèpñ¡ûUã ¾B½õ dÌõGï~ê5çìèmò£Ò fâ&pÌ j(õôî¯ï†ó÷‘úQ&-ZÑ ús±¬üšö•ò¾ó‡ø½ü“þ“`» ,N †wp®üÂôSíîëkñªùv¢  Huý/õ(ðåëÚéùíFùF€[â>öuêæšéñöø‡² ŽL‡Ç Â=ûõèîdêïë”ôxÿòç g Ü ^ .ûù÷Bø øIöIöæú32â+‡ Ë ÚËû4ö™ô¦ôÞóôù_ ™+{ðÿþ…òYéíç%í„ô„û 9P„@ Mÿçöžï6é çâìùÀý³dh÷úíÏë£î¼ò=÷[þaPI¾ˆ ^ö8û4ôªïàð‡öüÃþ¦ š ’séÏÿ~úSô¿ñÊô„úŸþ?ë2 Á®é x²ùYõ·ðDìUìêóS¾ t^Q4V ÝþÞð›è¨ç(ëmð{÷-\ :ÁX ó‹úzòMë³éôïÙúr m £ô§ ²Zùöóœó‚ôlôÅõ[ûè—  W ”  „ïQûBö¯õ‡ö¦õ€ôÈöþè± ö `  ƒ Ž˜ûQòMîÉïPóøöüS‰å² r¥üõ®ì‘æ#èëñãþ­ ”m¯ö‰ Cÿ²òYìsë×ì¹ïJö€‘ ”<T× ŸÞý›õhï,ï¸ôdûŠÿMN‘ °% }þ!ýúAõó3ö#ü€s/ Î&£ #ºýú#õÕîsëEïù¯# ª%4&OƒûNñ¤ìbìþíÖñ’úš—¾íÚZ¤ÿ#öì©æØéÞó ÿg… KÔO ÿ9öfò§ð%ïªïVõÅÿa j Ñ o ä 5 Éü¼ö&öô÷™øøŸùÿ8ž š ö˜¡þ²õVñùñÙô`÷ØúVœ I[† ¾—ü˜ò÷è¢å ëö¼µ¤B2eÁæûýò¬î·ìŽììðhûÔÂi› ´2óökíêõíwõŒü8,Wb {ûývûÅ÷éò²ð-ô7û¸À¨D — Ö ñÒÿÛý½ú!õ°ðÍñdø}ý ® ¿P| Õqö`ð?îÕíSï~õù¹ ír3~yýþð;ç‚åìæõçþÅ™µisü˜õlñúí¼ìrñütÚ Ë j Ôúoó€ñÐó¦öxø7ûó i  M ɉÈþ÷©òMóöS÷yøïüSÖ Žœ ÌýÄúéðæêWìyóbûÂdkè_ i‹÷Uñ6íêüëqô}PbNv !ý?ð[èTè îõ³û7^ ×`BüÁ÷‰ò ðvó6û$ûÇ s @ ðå üèúêùèö­óô…ù4œ† ™¢ VíúäôòâïHîgð‚øn+#Z Èîùaîðè7ëò7ù:F nL³ß e¤ømòÅìé]ëöô²¬ ‘oQ  éþ%ôñîsïò[ô¾÷&þŠÉ ¢ Ç óSÿ¦ø4õsö‡ùû5ûLý98 f y ÆqE'þ öeïžî:óù þ²Þ Ü«¦÷ý÷KñëØèí×÷´nR7ßLÂøîïéøë•ðöŸýQ­PÓq Cýõödð8ì`î†ö‘ÿt™Å cþ¦ jû÷øFø8ö^óˆó„ø[ÿï«Fe  Ô ÿªúaøèõ¶òÍñeö‰ÿ¡» Ì}b Õoÿô/ìëþî0ôPúx'„<¼£ …ªø+ðRèÃåšë~÷jˆ ¸ž¼îÏùÐñbïð|ñ‚ôŠû²¾ ‘ e‘ü£õªñó¤÷®û¹ý)`• $„ ãíÑÿùEòïïÝò™÷"ûÏþ@Y š| þÆø³ñ÷ëì~óÍþx 6ü× ÿóeëÆé¸ë½ïýö{9ÚY ïû#òáé=èMî/ø±IN ‘´ŽÀ_ýûøi÷–õLóõóŽùV±¡€ð Ÿfþüù øu÷Áõöôò÷%ÿëK L  a · ø8úÌðýìîÐðsôûÎD¾‚—nUøî}çéòýæq i¤.p ßÿêôÔî¢ìIì±î.öÞ. ?…À ,¾ÿlösïYîƒòøèûlÿÙ / 8ûWõ|ó§ö#û›ýþþZô )c °hÿGû}õ|ïjíöñùú´ù ú’Â!Õïú×ðÁëGêýê)ï¬øÑsì¸=½ ùîlèëóTüÿ^ \ÓÔp 0ÔøÚô³ñïòïZöÞ f ê — › bªü¨÷löÁöXöªõ¥÷ný$@ ¿  @ 8õþÓöìòáòÛóÚôøàÿj QÆâ „­ý8óZê%è—íÑöqÿ%xø~"ž_ü”óî_êzéîføÿš”‚ÆÒ |ú%ñ‹í:ðõOúÀþÝ Uµæ‰ÿªüþ÷óòö÷ûéÿ…âÑ · < Â.ýÏøâò ï¸ðØöÑýy˜gBSÜ ù?ó¨ï<íŒí*ó"þn vz´Î©þ‰ò¢éTè¼íWõ«üð²õä¯hþq÷«ñ„ìºêFïîøÔ Ú · ) Ùý‡÷·õ¸öe÷q÷ˆùÿtR ‡ ‹?Aôý•÷oôµôÈõö¢÷~ýØçŒ˜† Y Ô…úðÿéëÌðh÷qþ0åò+ÊøûÞô~îêœê"òRþ¯ •Vk·® Šþó1ìÉëŸïpô"úeD —€-í]¼ýÓ÷¡ññîäñeøþÁ=q § s Îÿvþæû$÷<ó¶óƒø;þOŸ È Y³ü3÷&óïœíSðùÏ•††Ú¥Gú‘îæèïé—îô†üFi{cY^áýöøîúésëÇóÏþxŽ ñï:T :ÿkö8òþñÌò ôÕ÷ÿyû † ' Μzþ­÷Ýóþó§õ†öw÷rûê  Q Î â rÌ`÷qðPï|ò·ö:ûP ^ÄQwªjùðñ ëpè6íøä× JuÝZ,úxïºêéê—í¥ò$ûxÁLØê #s9ú[òí<ï7öœýbå" á î  #6ýû ù«õöòBô‘ùŸÿš³YK ´‰ x·ÿ‘úÂöôòmï-ïô›ý¨ Êå3¿ Å>÷hï=íËîññN÷gä ÖÂí |ûfñBé<ç1íË÷Û| ÎÙ;Uûû ô3ð›îÙîGòÔù—H %M ˜ Ï ${ÿø²óûóìö6ùƒú‡ý9êQ  åÌsÓ\ùVóïñKôŒ÷Kúwþ»‡k Ã6ÿ²÷zï½é8ê?ñûC sÚÄàß÷œï«ì—ì%ï›õUZ JrÞo ÃýÔòëêÎïå÷ÓþÉp ¶ðë¸èÿû~÷–óÄðÒñ%÷ßý’Ï¥  † Ypuüpú øãôló5öƒü8Ì‹  § /û1óßï¶ïÞðÔóáú"†Ë“ —ø6íÊæ<è˜ïŽø ª ©¼cù,óiï{íæîfõ¯ÿ¨ e¢  æö´ð ð>ó³öpùšý0ù Uñ O ÀÏÏŠúòôóöôŸ÷;ùµûvW ñgü ®CþÞöÈï?íºðÖ÷eÿ@Ë ²<]®šüòóî±ëNë9ï ùKj·x„ ×ùî}è5ê+ðõö0þÞÜ[÷¸ Föý'ùRôyðcð]õ$ýê2 ± æ ® ð^þAúÁøƒ÷nõnô÷Iýí- ¢ q ó ã¡ÿü÷ló~ñsð¸ðõ¹þã ZL‚* ŸxõìÝéhí)ôÅû(¦ Ç8 Ïþ¡ö)ð@ëËéKî³øò=þol2àèûòTîæîKñyô˜ù]Ü ëP‚ «8¸ûmö¬ôõöjúü)þ÷Á a O µýœÿ¹ùöò^ïñ“öóü¼§[_µ Q7ûôvîgêuêñ¼üÎãA–¾ &õ ì=êífò?ùEÏ Äq åû ôåí’ë§ïZø)f Êš¯{§ÅúÓ÷ö(ôdóöü°Äß“ * 0ý”û§÷5ö"õ+ôömü çÆ½ G ߤú¥ðoëCìÑðËö+þËùU’Ô¤vþ¡õZíËç`èðºûu¾"ç è÷_ð'î8ïò#÷Xÿï¢^ ( [Þùióãð›óÈøóüõÿâ = ¨ s N@/ûýôñ†ñžõˆú™þ!_ næþ@Ù‹úåô°ï íßï2ø€à ×°’´1ûCðÌê«êÍí#óxûVXP‚Û ‘?øÜî+éaê|ñ}ú,K» ¶»a Áüt÷!õ³ó¤ó¤ö÷ü«Ð ½ e ùºÿ[ùöö[ö'öc÷ üb < Å š … 4Ðÿ9öµïîËïÐòZ÷%ÿ‰ h¶û´ D?ý{ô¥ì‹éLíö´z¥¤ŸCüwòVíúëí1ñ”ùíãŽÙV¸ yúûIózî˜ïqôkù›ýbEN y K\ÿ¾ûa÷Jô¾ô]øcüKÿCÃÖ ny  VüøNókïžï!õÛý5T »ÐŒ† Ë—÷¿ïDìÀë_íæòhýõ i¥MGWÿåôìêÿí—õ°ýTµ ÞÜ’Šÿýûö›òéï*ïýñ<ù†Á . ÿ º 8 Ðzùqõîôõžõ{ö\úq— à ¯ œ ¤(¡û‡õ óFó`ôœöÿû ±,3 þňù”ð²êËêÈðÎùÛ ³ÖnS îùÖñØì>êë'ñ=ü3]29Ÿ ôÇötïüí<ñNö»ûèE ¸™þ ¸ü¤ývùÎô’ñ8ò»ö_üÑA x °tþéúEö™ñëïóÔùæ9¦ «¡ÿ ÷ò$ïáíaðAø¨ò `Ø\Ä (úkïTéäéƒïY÷îÿ7 (`_\ü3õïÌë2ìTò)ü–À €Tš× ‹Kûµõ ô¤ôªõƒ÷áû¥Öj ™  QÐ=û«õókôÏõ÷‹ûSå íé Ø gSÿJöyîpë!îZôûõ ¨WÅÓ éù7òýì³êÕíõö½ˆ âWLNå^ú7ð7ëèë5ðö®ý)7ý¸7¤|#ûVô(ï€îÆòNùÿ_.ç  á tW±þòûÀøaõéóBö¯û ™yã á ¶ Íå«ùèôÃñ–ïûïõ^þRNu_ô UöCí×éÇëàðÈ÷² ©Î¤ Nêú ó¤ìpêgîj÷À٠ƈ=.i6ý¿ô‡ððXñ8ô¾ùÕ§ Ú ô ? _  ‡ûªõ¦ó¦ô5ö÷/ú:ÿÉÏ c q ± 9ºéûìôýðñõ„ùÇþ¥h ûEó ¥pýSöëïDë=ëSñ½û}a(žŽ­jöÁíšêžë*ï|õ!ÿ2 ;‚ñ _àþ öÛïŸíÒð<÷Èý1çU Ê k»püù§ö^ô—ó:ö¿û^7Δ V ± Ì ®üyøZõ1òBð,ò»øg¸? ×Ñ’¿ßý¡ôIïbîCð4ô5û&1mo QËÿÏöWîÿè‚é1ð[úYk ©Šâ4RùZòïî.ï©óü¿™ . ò‹Cü:ö ôQõ¶÷ÃùKüÂ|¦ ^ y º€jü¬öþòðò”õ%ùNý+ X’ª‘ üŠõÒî3ëOíéô‰þån Òª cþ£ôòîÇì)íëðGùÞ…A07( J­ùyð6ëÈëñ~øðÿ÷ «¢š ÷ßþÔùöÎòVñ“óIùÔÿžXs Î Ÿï¼ý¸úÔøzö]ôûô§ù•jÅ Ù ] ò Ñ xø†òðöïòI÷{ ™‡dmšþô¶ë½çjê5òÒû c - Ô1 ”§÷Ìñ6îîìçïøÄð • f à:ýõ±ð½ðnóãö+û96E T Ÿ‡*ýŠ÷šó)ónõøäûªp §º £÷@û¬ô›ïHïNôãû u•Üp ²ŠùøñLíëiìøò#þ2 èh°+Ž öíoé¹ë±ñùFé Î&w Û]üüökòðîñøõÿ,Ž Y ¢ P ¡&ãûøpöUõôµõiúeJ ã W ê l Iü2öÙòcñvñ ô<ú ¡ »ÔõØ Úû.òÁë'ëâïE÷Jÿ¼ ØIm…}ü^ô#îXê ë”ñ{üŠšž&¾ aßø3ñgîxïqòõöýò p Æ 1A1ý®÷5ô\ôO÷ûNþ\eë Š ° 3Òû“öêñ½ðôöùõÿj «€è= Ùÿã÷Ûñ5íë±í¯õµ³ #<tÔ²~ýÉòaì’ëÝî˜ô]üÉê«·_Uÿ…÷êð¸ìíŸòNû¦• ˆ dùN Û°ýá÷+õÿóOópôÔø7ÿ»Å Ô & 0èý!ù¹öºõIõ6ö ú¿ qô …ÿö+ï;ìîñòœùÞ< ¥¸> $ûóQìéµëôôþVèŒxC LþÐô¥ï–îðºóqú• àßn ‘è-üyõ*ñÓðôûø°ý ä´ ai t §—ØübøîóðñÄóEø'ý—]´ ¯z• ±týøóï…îIó/üw %_@ž ÙÙ÷{ï­ëäëRïûõ¬ÿ¤ €"ÔqI~ý¢ôaí?êÍì&ô$ýT O“If ˆQù\õnówòšó@øÿ\F D  _ °^ ü÷¦õWõ}õöú2ñ þ ˜ x ÌØûôWïuî›ðôôKû–„ Ùáé[ þ+ú6ò'ì4ëšðú£z wc‡žøÞðÿìøëîGôRþ; 7›§ÄæCøQñQîÙïaôÓù‚ÿ* cÉ Ö Ë‘ýRùõÂó˜õúêþ°ñ¸  2 y Ü“þúŠõñïøñ2ùŽÑ ¡<Æo EÿÚõvïeìzì5ð÷÷} aºÂ 6áú²ñxëåê0ð øPB WHä·ûõÐðGî¥îcóïûY ¦B `íýÉ÷˜ôäóVô¢õùøµþåC # F Ÿ ÿ-üþrøöó€òó?öUú_Ú4È« éþöÈîOëàí1õñý"š Р ‰Øöãï{ëPêÏíRö™£ „@î¥ 6¥ü”óî¾íjñ-÷çý3 v¸Ö °˜`û‚ömòüð`óÓøäþtÇG c Ú ® JÞûøÓóñòâö=ýø½! ’çš Ò®ûjõ\ñƒï•ðgõ¼ýhΤ*°°ÿyõæìFé¨ëDòÈúÚÈ 8§öí ðòùÁòoí,ëÊícõ3ÿx{ 3ïÿPøîóþòßóÍõ©ùŸÿö & â ~qÅý'øuô€ó«ôàöðù±þ1† ù ÎVcûÌóqîéíÞñøéþ&™ kzlŸ”ýïõéï'ì\ìýñêû{xú5ÚV R|öcî9ë°ì5ñì÷¯ 2“³è Å­þá÷òÿîþïûô‹û\_ ¯ n y ø£ÿü‚ù¤öiôóôÖø/þÔKk J - : sý øôxñ­ðóžù’ì „ÈÍ­ hžüÉòCì®êí‰óƒûåc*Ó ÷÷Ýð ì±ëñqú9 ™¦1 ùèòðÇï]ñ—õüÒ‰ É»Ò ­ üþùðô—ó€ô~ö#ùýŠ÷C “ ­ èªÿþÜøŠó–ñwóÎ÷ýÙ„ Å„ê` •(úUó‹íÑê†í™õŽ ŽÂ†Ä_ AþìóDí×êìãðòø» ü`9 é.ûóóéî$î=ò(ùùì ] Ì/ÿmúR÷£ôÛòÛó>øRþ‘òa ¶ ¶ ” œÍÿÈúõöìóäñsòÎöÖý¨ ù $è {ùòAîfîÊñÁ÷çÿ\ •RZK aÉüôˆìéèë«óÄýûj¬’“‘ 8C÷Nñ îjíEð ÷<£§ ÿé . ™UÙùõxóÃô÷ìú ÿ” ¸ 8"þõø]ôoòöó×÷@üÓ{¨ È«’ {íÿ ùòÓì!ìôð/ùÉK K!BZ4ûÏòÆí3ìfî‡ôðý{ÈzzõõSÿ ö<îÃêììMóBû ض/ ’üüÿ÷æó>ñ ñËõIü9òL` P ‘ $¼ÿPû’ø´ö[õ¸õáø'þËA" º ¼ Fuü;õ¤ðEï½ð–ôìú¬Ù )¸Ûÿ F,û¾ñäê¤é2îöáþJÕ7òÀ„Úüõ·ïöìçínóü?W ¾)ýí UßùóðñRôÑøUþpü b t ´ åô†þ‰ù!õóMôŸ÷2ûªþwÖ ë  ,rlý«÷Dòðï!ò§÷RþÚø -¨= ½ÿ÷˜ðØìOì¾ïw÷ð ôœ!êüæòì¯ê îô:ü„p !Ñdàÿ‹ùgô÷ððsôkû~xŸ ´  ¢ %|þ>ùgöõƒô^õ§øýý±1þ { É  oîÿtù¤ô0òÆñóáö§ýÿ »‘„ ~pÃøõðíOînóuúB‰ æm… !]ùòÁìÍêÇíÄõ4¡ 1¨Ì1æ^ÿyöéðJï­ðWôøùü: ‹I !p•þ ùiõ“óõ¸øËüqcÕ= à $ ßÁåýHùaô‡ñhò•öAüý«P NQÚ ÆýÇö#ñxíEíÂñGú/– Îs‘, žùñÄìí*ñÑ÷2g OÝ( +Vü6õrïÉìïýõþï„ ^þ&ˆ ô6ûÔöSôóxó¦ö/üHõr w œ T þÜûÝ÷Êõ0õ¼õ3ø'ý³à e Š x AÅüÕô\ï9îñ]ö+ýZì ¼\ ÿ¡øåð^ëƒêï…øOœ €p¯’ Ó<û¹ó¢ïïñþöÇþ`. ´ˆ Íÿ4ùVó!ðñ:õ úÒÿåØ hã t*Yÿ ûlö<ó$ó,öœúðþM,s #6 vÝûŒö"òðòø.íÈ $ÀûG·þ%õfîäëŠíuò ú½ ;¦'‹ ‡ØúWòVìxëð ø`£† Y‹2 ’ ý•÷®ó¥ñòxõ¿ûìƒf 6 ª Ž  ]ú\öÁôÚô ö¡øûüµ?Ý  ƒ ¸ ÞmùVóžðUñ;ô’øËþ±ð ¢¿N ö®þÑöÒïmìoîñô~ýé Wk© ˜öÜï£ì íñ¶øÐ ä‘j‡ ¦eý#õZï î+ñuöPü2õ´ Œ† Aÿû%÷ ô õbø¾ü{¼@˜  ˆ g^£üSøXôËñMò[öÎüÒë @Ö âûñóï©í3ïäóåû³QüàÁ£w÷•ïøëòí%ôü¬ Ð~Þ zIù óïâípðÙöLÿï+ ça…  €œûŸö`ôEôrõÍ÷µûó+œ §  ±&Î?üR÷Öôýôšö!ùnýÈp ¿-< €¹±ú_óDî‹ílñSøE?Ž‚ë lÂýUõNïCìïìúñÒú ‡ R'a 3ïøTñÛí÷î_ópùAý AÞç ÀþþÑù*õ,ò{ò;ö“û|ŠMŠ è P 5_/þ‰úìöôcó²õjú)‚ å Iˆ ‚r„ùzô¤ñÿð-óÞøV a INüóœìOëêî¤õæý=F Ú÷)ñËìkìïðúøÉ è DT ¢ý÷îówóêôë÷‰ücúZ º  £‘n_ûÙö¯ô!õéöYùýcc× p f V£ÿ¦øeòTïvðÄô²ú‚Ï1bìS †|û|ô\ïBíšï‡ö!‡ Tpö®×ý)ôí‘ëóíDóœú{Z j—)8 ª ýö’ñ"ðõòrø;þ6xÝ X × ­ÊÃý›úâ÷ñõ¿õøyü:%5  ä J”Œû¹ö€óæñŠò]öRýŽf 4Yë MËùfñàì íØðøöÿµ¿oÕ Óý­õðîäëîèô×ýQÚ ùhâ>ø‚òð‘ð“ó÷ø=¡Ê ‚e ª ÷#Güÿö^ô¸ôÃöYùyü¶µž ß Ñ É4\üö^óŽó_öpúVÿ;Q Œ#É ¦pÿFøçñ·í|íëñúsà Œl¾Èøeû3òåìøëîôNüøM‡â· ÂÂùcò'ïËðöµüëK® ø¦ ܤóü‡øVõ}óÁóÒöìûF–­×  i P6·ýHù:öIô¼ó‚õúØ B © ¿ ¯üþõö}ñÛïLñìôûkA … éÊ ;ú´ñãëëdïI÷C¨Ü fÃýÏõ´ðÂîÛïô<ûh .‹s Ãzëüíö±óñóšö ú¶ýÙ ½ à Ô¤lûÄöðóôŒöèùßý𼜠¤‘ ׊ý÷Žñ´îÓïúô’üyU [ŽÌÁ ²nøñGî&î$ñ÷õ¤ o}?0 *üÈóåíéìšð÷Hþ“ƒ j#M©‘|úµõiò’ñôùÿPJ : X 4aýóùâ÷ÊöŽöÔ÷bû»øy , • } Óù,ôtñ6ñöò-÷Hþ&êì›%s ¸¥ø|ðìŸì’ñöøBx =y̧ eú¤ówïNîëðb÷@ÿ ?# ~¬þàöŒñ-ðDò.öûúÒK† d¯  ,#}ü°÷†ôOôrörùÃü¿mÆ ÿ = `–04û7ö®ò6òPõãúRy¯ !’ Þ3ý…õBð¤íîlò¨úÕ¾ ÆŽÖ µñùSñºì7í‹ñê÷–ÿømÍB "ýóöòêï—ñäöþý³­   4 I„ü#øœõËô4õ÷ûŸå\ Ø  } =„CýÃ÷nô$óRóQõú$zk != —þ|ö€ð®îñBöýø™ ÕÛ#Ù0ÿ÷bðsì…ì5ñ½ùÁL ‘]á 4ÞûÎógï%ïÞñxöÁü;ë `Ö ‡ ?°üR÷íóÜó¥ö¤ú•þbk Ÿ | l¢¦ÿeû ÷¸óßòõ{ùÚþKi ­ óÞ ÜwûNõÝðÀîþïCõ¬ý† jñ€¡ÌÿZö©ï£í·ï…ôtû¿ §­ì8 ^VùòRíñì:ñ¡øÊé4 Q‰; ÊÿiùIõ…ó–ó€õŠùÿŠB¹ º ù÷ú´ýù£öö€öÂ÷Ðú*¶ ž w Î 8HêùŠóaðÖðéóùøÝÿÁÓÁ< æ¨ý¶õjïIì í‹ó\üxÌ dÏ}0 ­÷ñ î¶ïgóŽù¼ Á#šë +ný€ö~ñ@ð×òš÷¸üµÑO ‰   B ö·™ü˜øtõUô¸õúøý+M, ò B o jÞþãù×õóeò õDûÐX ¬ ³2i ËúÓò{îèí\ðšõ³ýx“xŒ.K÷ÐïìBí°òaú[Ž ~Ùe ¸3û¸õÆò*ò÷óOøžþ@' 7 ö F 6t¬ü¹÷+õÿô ö¯÷–únÿ,¤ « Ä · o0þø#ôîòÝóœöMûÍÌ÷ c ¡QGû†ô ïUîƒñXøÏÚ*Ôà™r•ü ôÏîírîMósûUò ¦…* æ“úEóiï÷ïÀóåø—þ³M : × $„[üšøØõ%õúöšúÖþÁÖ¥ z æ«ÿÙús÷¼ôdóÔôrùêÿ*ç ð =â æîøîòÖïeïÄñˆ÷/a [Ðr »7ý“ôYî¨ìÎï?ö=þŽà ÿ÷†ÿþp÷ùñïUïóþùKx à  ìQÿù$õôøôÇöÈù~þëÁ c 3œÿ6ú÷öôöôø,üöœB G b : tjþÁ÷áñ¸î¡ïnô¢ûŒì ³¼µ Gû…ó¯î÷ìãîèô*þÖÆ½/Æ £:ÿoö:ð‡îîðÐõüY| px >I…ü3÷8óìñàó^øßýåäô ¿ ˆ á4.ü ùŽöõ¶õíøæýéФ £ ü ] ¹úü\÷Òó>òÂò(öÇü&X [ Ýî U)ùþð›ìöì3ñ øw< §£Ïxm¸ýñõ7ð›í ï“ôÆüM ªex µ®=úàôêò¯óöÅùÿà Ô êC–Âýöøóõ„õþöKù=üYgô s o h æ@üLöþñ×ðóÅ÷æýu« ‰PÈŽ© ù8óŠïÞîGò¾ùV “w5” ‰¤ú òoíQíðCöþÒx’ð è úô×ðQñ;õíú¢h ¬ ©  …xÿfû¸ø÷‘ö¨÷Ñúnÿó7> Ž ¿ ›ÚñýÑønõóóÇô™ùÜ)u )ª +b÷ûðIî;ï2ó¤ù×Y Ê¹Æ çúÎó ïüídñ‘øH »†( Û÷ühõ$ñ)ð¶ñ{õvûè» ¤ E $ ËIÿ¸ùôõõ|öãøºûpÿùP 9 d˜,ñýLù”õ ôõVøîü(«¡ d™K ÐêüÅöÚñïÌïéô ýßê _ý+L *‰øiñîîAñ{÷'I ë&^ ÐSý%öñÏïªòHøåþM­ ¿  0’ú«öqôØóIõù‚þÿö/ R Y q U0ûð÷úõÀôõú÷ký~n ¬ A Y küö=òSñóa÷ þd ‘ŠÌ u²ÿ°÷Ôðæì€íµòÝúÆ“ •)k ¬·úèóðEïHñoö7þlF w— ½ DPòù+õ’ó õ,ø ü¥´ö þ K ‘\:ýéøyõøóèôæ÷õû}\ d Ä ,Ÿ÷ûö0òwð¯ònø´ÿ~Ó `dš Ø1þjö;ñïôï)ô»ûM ÛG?‘ Ü4ù¥ñší)î›òlù#‹bZuÜ þ=ø!ôò­ò+öúûFÅ æ ° Åâ¼ÿûHø÷Žö,÷»ùFþrzµ « ¡ Î{`þkøFô|òâòpõaúhÙtáéþ àLþoö>ðÆí¹ïZõúüά Ÿ:Z}ÍÿÌ÷òï@ïósúz+ ‰xžJ š‰ûmô¢ð¼ð•óøäýW/ Ä ¨ Þx¨þßùöIôõÈ÷Nûÿá·» Ý “ R9þçù öùóÅô–ø!þº‰x ÙX ó9úôIðõî¶ðMöæþñØOE ¹çö%ðí6ïô ûæW ´Z¬²S7úŒôñ“ðŒó¤ùí<t z y = úRöËôÂôöõÛø“ýó: u x " º£eûw÷gõÙô¨õmøkýŒ o 0 w ® Aûõ"ñÓðôÙùÆã(áit ‹ü¹ôï(í‹îHô+ýd~ r6Ëþ xžøKòºï„ðÚó;ù(bÄ °2 u ˆÿÁù”õ¾óÅôü÷!üWOÌ+ ¢ È*[ýóùæöòô0õ ø¬ü’ 5 ü e çDÿMù«ôrñ€ðóKùL¢« ð_Ÿ ½-ü|ôÓïøî¤ñ)÷«þTaèT ÷ýqö˜ðí‹î óRûi €o{0 Rý¡÷§ô¯ó\ô÷¿û}9·O ÓF7åÿ}ûnø5÷3÷ ø?ú,þ¯“ J + ‚7ýª÷óOñ¹òÃöƒüD) ›¾® ¥ûdôYïyíð×ö‡ÿ¦“ Ðo %(ýUõ‡ð/ïïðõªü( ƒd '®ÌúÎôEñ3ñ6ô ù€þÕh‰ m Ÿ È[SþÝúõ÷öõõKø<üE¸Ìf ¦ y ÂÒ*üGøõPóAô†øÿÃ ä æ% shø$òöî7ï§òðøX ¤X¹ƒ ãüÿôïïìUï‰õ—ý\ ”žÜ ¦÷ÿ4ùµô™ò½ò^õ¨úvwì Ñ ê –¾ˆÿ5ú‹ö?õµõN÷úþâH Ô # >x;û¦öô ô<öùùòþÀ= À ó ©}ÿ+ùkó×ïðŽôÝû·f QÍ’ €ùiòfîí7ðeö@ÿc/<šî Û*Lø]òð`ñƒõ,û7¿ï ² V y‰Îýõù%÷¦õ:ö;ù³ý `ȉ 4 Ó0t&üËøöOôƒô÷¾ü™œ[ È K ‚:þt÷ÉòÁðcñóôWûJ¸ ¦å€B ôù­ò@îîIòTùOÆÏ9š› ¾nü®õTñ–ïêðÊõBýï« ¦ $€ Ÿ¦ü÷³ô±ôIö ù+ýüVú‡ ˆ²çû^ø}öªöqø@ûÿþˆ5º À РƶüZöÏñð;òª÷”þ| ‰:œ Žø…òíî\î¤ñ¬ø—à 7<ç„ {ü¼ôfðçïæòSøóþζ Ü/ Y ÿ‚ùCõÊòêòö9ûÖwÊþ Ð x ºÌdý-úÆ÷ö»õ÷˜ûQh•ý  à › ûÇö5ôxóõ‡ù<ì ½Sù +—þœö@ð\íÀîÐó ûô ‹[2 5ûÊôfðïªñøA X é õ®ýe÷Àóöòoô«÷~ü[ÕI  ‚ Ž´IÿÆú÷Bõ¦õ¯÷¹úrþ­š ð :½ÿ´ú×õ°ò®òÊõ¸úM W ÈÇë zwýD÷nòÀïŽðpõ>ý¬} k1 ä8ø~ñ@îìîäòLù8# o­® SýM÷Úò ñëò¿÷ìýªá  À ÜšÍülùZ÷Cö{ö¿øùü³sêc Þ É¢êü øxõ-ô¼ô¹÷ýyb U ÈÀ 9 ]ýÍõ¿ð@ïbñ6öÒüi‹ I  .ÜÿÏøÜò_ïÔïôYü~ 4¸ì~ yùjó]ðAðÌòá÷åþ2­ *º  èÊPü¤÷õõ÷?úüýܬ§Ë ÎS/Êÿ ü<øŠõ?õ†÷Oû˜ÿ¯[ š y ”¢ú>õ1ñãïjòrø=§] ÕQwõþ×ö/ñ÷î1ðŠôsû› ¹wn ÅÚÀù¤óðdð…ôû% ÞFV (®ý…ø1õó¬óSö:ûÖ†+ ³ à Ù`¾ýú ÷Aö1öã÷€û^7áê ? ÞUúôôeòÁò“õqúÖÊ  k* ßüÏõLð#îyð³ö¸þ{ä =\DeÀÿÐ÷>ò˜ïêïsóíù¿3 €ó 4 ¹Zýž÷ôró‘õwùþÒ>‚ › 3 ôøÿ6û®÷Dõõ3÷ºúžþ˜¸} š Þ ‹ðÿú}õ•ò¢ò ö¶ûìž* ª è ‰û@õtñðÇòø¡ÿÀGs d ËÞýþõðží˜ï1õ‹üÿ¯ ¤uK® ~ÔûÁöló>òñó|øwþüÕò • ˆ kÀ ý—ù¸÷%÷´÷“ùðüK{ $ ½À9Øû÷$ôpóÙô*ø<ý›õ OP “šÈû3õ³ðúïQóaùl]T â‚å [:üsõÝðï¢ðúõâý5¿ /[ ï’ù_óÂðñõ9ú6A. ± ú ÖxüøÕõNõ%÷wú!þŽÜòÆ J ¹<©ÿ"ü¥øçõ=õ]÷•ûe£ Ÿ V ó ¶ÿ›ø¯óæðâð$ôhúsA ½½?² ¿†ü»ônï6î#ñçö þºt £ÒÔ &ñþ›øÁóñ¡ñ¿õSü:° h s Û?EýˆøÈõêô¤õï÷ãû×t¶F N  ²õ`þú÷ÚõDö$ørû)p­ ” ù }ŒVÿrùhôòóÃ÷•ý{ uMøú@ ù"ó¼î­íÆðŸ÷b¢©¶p¸ ãþC÷ò^ðþñ9ö?üT P  Õ¹üøòôDôgö†ú$ÿ1™[ ¢ ¤ ›®õþ®û«øJö õe÷ û[ÿŽj¡ _ ¬ BcýNørô’òdó/÷fýy 4 LW{ùÝò‚ïðôDúÕ‘ ´V† Â3üPõ5ðfîÒðàö‘þ¿F È®M ù8ïú„öTô4ô/ö;ú|ÿ4Õ ¨ (€ÍŸýòù´÷>÷EøKú%ýå!ŸG å ñÑ”^ûOö?ó>óïõdúøÿ1' &„  ùñò5ï2ïKóSú<G ]©wª =û_ô²ðsðXóâø%¦– UI4 aÔþsøyó>ñ‚ò´ö.ü„H/ b ó ñ…&wübù÷löô÷/ûïþYNÑg - ºÈsþwúJ÷aõKõš÷;ü¼÷ ¦ — òýRö?ñyïñWõâûÔ¡ hœó à ûôwïîî«ò:ù3‹ |÷Æ éü0÷§ó‚òþóøþpu $ f š Rý‚øÂõ?õ©ö;ù†ü‚Ï^* ò 6›9éýcù$ö,õjö1ùýÊ-¯ ‘ 6 _$@ýW÷šòŸðbòr÷IþZ}  ªò ηÿØ÷ò%ïžïoóúNA Úç ^ ý:öªñ½ðuótø3þäë? ­ ñ þÿ©ûMøö¨õ©÷“ûûåîâ  >5ÿýUú‡÷²õ@õÔö…ú•ÿÙ@  %  f úû8ö¬ò¿ñló÷ßýPË D Ê _‰ÿ<ø!òEï·ð¯õüÔœ Ž:¾­ù¥ùçórð÷ïëòáø[YE tî ó ÷îÿ+úövôMõÉ÷Uû¡ÿ²d Úºðaý¼ù ÷€öá÷|ú«ýðñ  l ¦—°ÿ?úõ¸ñ‰ñ§ôúpçb ´Ç+ ¾@þV÷CòóïïðJõ^ü|h gå* ãØ8ùñòñïðð#õ"ûØ`k q© ϯÌü¹÷îódòÜóø±ýú | Ý Ý\ÿ‚û©øÑö:öZ÷:úLþŒ“Ð   ˜¤~þùöpôãô[÷÷û@Šá På * ]ü4õFð.ïãñM÷8þµ ë f×ÿªøïòÏïJð†ôfûöQ Z Ÿö ”Pˆûÿõó/ó­õìù;ÿÈk Ý ñG-Îüžø©õ÷ô“öŒùñü¥È° 7 b XþHùnõíóõ`øâüú /  Ê ¤Àxûö†ò¢ññóYù²› 4œû ±©ýÁõFð£î¾ð¢õZüõ ëÖÍ DÄBû¢õòÖñõšú|–| ¸ £ üa4ÿÇú·÷ööÅ÷û`ÿ”àÝ™  Šÿ”úL÷¤õ„õåö#ú7ÿÿÕ Š à $ g©ÜúÿôÖñòñËô¡ùíÿÜÄ ­ž3 ÛÕü>öoñÃïò¸÷:ÿ§˜ = êÿ³÷|òdðlñõÇú… › — b(ÿúöœôÌõ¼ø9üÝÿ¼Nv x –ÁªMþ·úÃ÷„ö\÷ÞùTýCp7 k  A– þÝø¤ôBò’ò÷õ÷û¨ A(ê üõÎð ðoòf÷Oþ­ ú74 @rþ¾÷‚òhðAòI÷ÅýBÜ À ðÖ á‘“ûøö!ôTóÐômøfý•Ñv  ¸‘vümùÚ÷x÷*ø@úÝýYcß— ãÅïºýøõôvõ³ø¢ýÛ .í^ lú×óÓï}ïósù†KOÉ‘ Žý‹öìñbðøñaöñüMƒ ã ã " ‹ÛÞúÚõMóíóþö@ûëÿ°à\ D Æ!]«ýúB÷öþö‰ùÝüv3³ ÕŠPÒü¥ø|õ7ô‹õkùïþ¹† ` ‰ ×'>ùôólñÙñõÄú[ê !§”Ï :žûeô ï×î òõ÷ÿQ{ :hé é/ú`õÑòöòÞõßúŸœðV Ù ®'Ðÿ§ûËø«÷ørùêûmÿvìÍ 1—þÚùKöÍôRõp÷û[XM Æ h ˜ ïæÿQùÉóñÒñÎõäûÍF ú=" ñqúPô¼ðSð<ó ùÞ}ï ç !öýõöò»ð­òáöRüMÿ N ‹ ë©Rÿ(ûÐ÷Kö÷¸ù ýaˆKCÀû›1ýú›÷ƒöZ÷/ú{þC‰´ U Ê —üÁöìò‰ñ®ò–öý½| ‚:÷ '6úoóàïHðýóãùó¾ Iß' ¤Áü±öòDñOó=ø®þöÐ  ½   wývûQ÷[õ‹õ]÷rúþ"` À ÇëÛû‡ø÷'÷]ø úFþëJ Ÿ = RóŠüT÷åóBó{õêùµÿø– &N MèþÀ÷CòrïìïéóÐúùS 3ÜUå üPõ}ñ2ñØó„ø‚þ… L ± o ͽÿÈúÅöÛô·õâøýT$=ø Å ”XüGù÷8öþöxùFý˜á Ö õ¦Vû)÷”ôÏóXõˆù¶ÿ!ü _ 3 Š lpþd÷nòËðqò¾öýh| 0_,Öù óëïÄï<óVùƒ0 „¥ ²þ%ù¬õ¢ôÆõ®øùü §q í 2øÿ ûø÷×÷ùöûFÿO! ß Ÿ5³&þSù‰õçóµô£÷3üܾРä[ Ñý•÷âò¹ðæñoöQý¾Ü {:ã ‰'ªø*óâðÓñmõ3ûiv ;d" ’Ãtü®öåòHòÑô^ù®þò{s  ' [â¤ýú­÷¥öI÷–ùýï]ñÞºêëÃücù#÷ö»ö’ùhþý´“ u U Ù5ûAõÀñ:ñnóøÛþ† k H2ìøó3ðñVõÃûËù `n ›”ú¦õ5óuó%öèú V Û Ð õáäÿ®ú£öèô}õš÷ú`þ¸ÄX æ ßáZ$ü‡øƒösöøûÿÂ! Ÿ È ãÁGûfö2ó¬òEõ—úF¦t ·3 Ôý övñ÷ïñòõßüâ» ‹Ë  šúÃôâñ“ò!ö[û3Âü Å ÚàÇýdùWö!õöùHýÚÀg§ Š ÷éÒ§ü_ùH÷Tö¶öÙøÃü¦ K  X ¬ ¬úÿ*úÚõ¿óÐóöÅú(§c @' ‚ ÖþüvöòêðYóŽøPÿ:÷ NWÛ £7þ_÷›ò®ðÁñÉõ-üÓ ¨ ‡Ý , Í•ýøìô„ôFöXùLýÕÔZ µÎWÿ¯û¿øc÷Ü÷¬ùSü¬ÿ)È £ r xDpý¸øõAóô­÷ý!¡½ °® w é×û öƒò‘ñ{ógø‚ÿÖG ®ý Ÿ öÄýÍö(òñPóø>þòñ «  Õ“€úõÐò¶òMõìùmÿzµ " ¿  Tóý‰ú|ø©÷ô÷Œù™ü„%®w’ì¸ ü†ø|öøõ÷#ú$ÿóæ »  ü ·¬úùTô@ñfñ ô-úè] Ç Êütö<òÜð´ò§÷¬þî L;… sÌÿ7ù“ôìòô÷¤û!ž’ Ú “ £Ìqÿû‰÷âõ[öbøTûÛþ´Z  U Þ ü™øLöáõ¥÷9ûÇÿc\ ` Âøþù‡õPóxó“öfüƒÖ Ö j  ?€úîóGð!ðówøÿ= MªÝ Sÿøø6ôòóÛöXü64u ‘ n 't„ý—ùX÷Êö¡÷Öùfý«vÖ®i"Œ°{üù#÷oöóöùýïP Ç ` ½ ÿRùõ<ó!ôw÷´üíÈÓ ý ß ÷}áùpô?ññkô³úXY -*# p¶üýõçñíð¹òÑöÐü©ˆ Ë  Ó Pý’øñõÅõ ÷¸újþHÅÀ²bf,ÿ ühùÉ÷¨÷;ù9üðÿ¬÷c Y 2 Êôñû¦÷ôJó˜ôÈøÿþt– ° sz —”RùÔó4ñ“ñÅôuú¹Î½ Zš ! ÞôûÆõÔñ(ñÖóùªÿé Ž w – †oÿÛùûõ=ôôÚöîú Ý#… l '›Ý¹ýhúøý÷døæùÄü¢p%uˆKzC“û°÷–õ“õ–÷pû#Á @ ä « :·ýb÷uòðñ†õgüñy î«%D Rû?õçñpñÁó·ø}ÿI%   ò"Fþ¤øÔôÓó†õùý~ñ ø ´ ÃìÛþû?ø±öÅö†øû+ÿ»Ð/y  ½ÜþûøöÍõøVü‡CÉ Â   Ã]×ü÷Yóòuó†÷éý9~ *“Þ ù óæïSðô-ú?ãØ ), ’ý%ø¿ô°óõ§øèýaŒ¥ Ñ h‚Q»ü(ùo÷s÷¤øÃúæýÇlϨFÖ8w?ü§øzöðõ÷¶ùÚýÙ¬0 } A ²Œ¸ü?÷Jóæñ°óSøŸþ‘ !â< „HÿŽøÃówñûñŒõÐûFÉ ¹ ± GëçúõýñòÃôYùÿ÷Ñ e 9 ³ ¥ö|üïøçö¿öiømûÿ‚AÜ.ö®9þOûù³÷÷ ù•üø#gŽ 1 “ Òÿú§õøòbòeô/ùäÿÎ, òÒ× UTÿeø<óñ8òMögüBh  ‡+ mú;õ«òÅòÁõ0û·‡N ¥ ¹ ¨¸éýÔø¼õëôéõLøüª#8k  —®ØýŠú{øÍ÷hø1ú)ýõØêt rôþ@ú<öòó;ô9÷5ü § „ß í ©ÈüÄö…ò²ðò³öÉý< tóŽ ebZù9ôòÏò"ölûËÊÏ ñ 7 T;ëü_ø}õâô¢öJúîþu ? Ô ¬ÙçÛýŠúBøøöÝödøšû½ÿ¬Ê C Ø M0þêù¬öÑôíô÷PüMá ` ~ 3üöðòBò’ômùàÿ– µ íçýn÷©ò‚ð¤ñ ö³üÀ} b Ðû÷Âô­ôŠö5ú6ÿW® G y™ÔËüzù´÷ž÷áø,ûIþâ\ö' ÉøêÉûà÷*õtôö§ùoþ—r% • Ð?ü'÷šóòÂôßùf† _  Ç Ï±üpö‘ò ñ‹óøŸþ­u w{ Z Èùçôxòûò:öCûèø¤ p  †^¶ÿ©ûÜø]÷;÷²ø»û”ÿ#ºd9àßoŠþ(ûªø!÷ßövøÿûª@×÷ I a .{ÿ©ùõÊòóöAû·ü #ý Ò °ïüØö¢òSñwó›øHÿ¿Á ’ ¥ © ÿ)þ$øEôìò ôŒ÷ý^µÈ X Å tÀpýÌøûõ`õ£öEùÙüóáÚQ - ôšýýŸúø÷¢÷ÕùýÙÀ08  {`¾þHú—ö‰ôõ„øîýÊßu Ú O ©éïùsô[ññ®ó!ùYû ~Ñ@ |®þVøêóeòûóø¼ýŽq… ' Þ…‚ûØ÷Ýõ­õj÷û¤ÿE £ Ôf¢‚þû¾øc÷ ÷+øþúÿþ Žõ Úþ ùöJõ.ö?ù þ¢» ¸ Ž G<ú õ/ò`òÛõ»ûzªB \+— ¾Œû³õòñóÚ÷¦þŒÉ x ‘ B Õ Qû"÷Fõ²õî÷„ûïÿM›. Üõ“)ýIú^øÎ÷Èøû#þq§n* ( ;ð üuøÈõõõöû0?Ž u  ¯ ±|ÿœùõ òÊòúõÄû¯ë c h!Gû‚õ,òÿñòôHúË# l» Mþ’øÃôóÕó(÷Vüê‚ Ó u =vcüêù“øCø4ù—ûúþYñ–Tû>8‹þûøL÷ ÷¶ùhýÉd L Bx¹ýø”ó°ñóD÷OýÖÄ uc ;xÔúzõ.ò·ñ”ôQúR£ë ° Ó J  "ý˜÷Iô›ó]õ(ùbþ÷š; w ºMýƒùüö1ö?÷ÕùDýÔºl£<{TþIû¾ø÷:øÙúþTéÜd š ]Œeüå÷±ô|óýôHùfÿÇô ü ZÊ «ÿ·øVó¿ðoñ4õ6û2¸u JÁ K $ÁüV÷ÃóÅòÇô]ù-ÿ››Ì   !¢û—ø3÷E÷ÒøßûÜÿ¨Y¶êùÌ)þãúøl÷“÷ù üøÿ-Ù8 Ê e ;¼¡üç÷¼ôôö&ú_ÿçÑ à û Ý w<þ`øØóœñ”òåösýh8 ù , 8JCúÙôûñìñ™ô‘ùàÿ‘ ¨ ! Q êÖÿû™÷ö´ö4ùÎüšòwѧãùÌÿùü©úþøhøeùëû6ÿ€| ˜ ^ õíUþþùiö*ôô”öUû'¾ Ž ` W ðgþGøíó6ò}ó~÷dýýØ Ž k 6Óÿ‘ù”ôìñhòöïûYêÒ „ } ¯ýhø–õ²ôÐõöø“ýl=q R#Ëÿ¶ûŠùœøÐø!ú„ü¨ÿþãÆQg%Úõýú÷ÝõÆö”ù´ýuJ É W Zãü’ö‘ò:ñGóNøåþ‚ †.o Òãÿkù´ôjòîòPöôûu/Ò ½ ì àpÐû;÷¨ôžô÷*û 46 / KQüiù„÷èöý÷³úAþ½¿1Ð fU²"ýíùc÷:ö"÷ úiþø ô  × C”ûÛöõóŒóÖõzúŸô €Ç  R¥ýE÷~òŠðò·öý¸n P wa …_ ûM÷Üô¬ôüösûÔŽ£Í  ®ÎQþeúã÷ ÷¸÷¹ùÕü9±Ù<xþÞúñ÷fö¤ö•øÅûÏÿARê 4 + o»¡ûòöíó²ósöMûû|ô [ Á 4Ðü=÷oó(òðó¢ø,ÿâ' ö Ø à +ÿðøOôHò:óÎöüÔü¤  Ô hÎ9þkúÀ÷öw÷2úÿý¿¼ÙÞ!%ÉÿÁüHúoø ÷pøñúƒþUË‹ à \>DþtùÂõìómô`÷Kü?û% Æ ‰ Ä4Úüööýòò}ôZùjÿ€• „ M Ö 1ôýyø–ôþòMô}øxþˆB í T ^ 5­.ûþöÊô·ô–öú“þÑ £ ŸZFÓÿ~üÕùdøuøÞù0üÿR~Î`Øn{ýxù[öEõ¶ö4úÔþÖ’ ' 5 §¹²ú™õeòõñ±ôú¾î G¯ + rÐýÒ÷Öó¶ò—ôçø“þqV / ? } ÆaÿkúŸöªôõþ÷üs—’+  ^/züªùÄ÷÷Ï÷,ú‹ýIé© Àã&ý·ù^÷žöÆ÷Åúÿï!²   Èÿ)ú‰õ5óÚó2÷]üeRÜ ª m5Çû2öuò”ñôSùäÿÛ { p  >ÿŠùÌõJôõøü±+% % , •÷ ÿ}ûéøÔ÷iø^ú$ý:Nj2ŹUþÐúÂ÷$ö’öÜø`ü˜% ¢ œ  íÿ¢úuö$ôôÀ÷íüË þ O ÷í˜úpõ£òÎòÝõ)û˜ß£ ©e H x:ý§÷¶óQòðó"øžý˜¯ Ë { y+þÏú‘ø¡÷DøŒúÚý< -&ÊE1*ý£úîøZø/ùyûìþì¬V H R R7ýDøÀôžóõ±øÜýÏf + õ Ÿ 8:ûöóódöóû3ä Ç n "ÿ§û€öfóÚòõùzÿbõ Y < Ð ¶ÍüBø8ö>ö,ø^ûÿ¾í¢ŠE‡«ÿÂü)ú—ø›ø&ú¤üŸÿâl ¢·öåü ùKöœõq÷fû³ ›   å ßžþƒøåóÉñ®òiö@ü _ ± ù ‘›Hü½öBóÐòõhú ƒÀ § šÕ¿þqúk÷öœöOùoýÏpÖªÃü'ú†ø øÛøðúøýuÐgÊÀDrFü¡ø–ö‹öcøÍû]V~ ü “/þÅø”ôùòôøøØþv Ò6 Ù$‘ù^ôzñ‰ñ²ôAúÞþd T ‘ i •(ÿFúóöãõ/÷CúEþ`ëEØz¹qAþhû8ù9øÞøôúÈý·0›gâ§þŽú ÷0öÛö‚ù~ý‹ Ö 3 =œýløÓôŸóõù½þò< M l ¯ Ä•ÿLùUôòó÷·üä•° Z ê)tü±÷™ôÚóÊõîùÿØ®  ˜y‰ÅýÝú'ùÅø¶ùÍû¡þ¨Y@·Nüõÿ«ü×ù1øøfùðû‡ÿÌÓs í ; Ò,ÜûêöÁó[óÈõIúôÿî# <9 ˜9ÿ'ù€ôLò+óÿöÌü'£-  ( Þ5oûàöôôôÂ÷5üM$Ð n ‘ –n ÿûù÷höÒöùVüÇÿúÈÏuw=w—ÿÃüJúÎøÝøvú*ýyî 6 jðxÿéú0÷õ5õ¬÷*üãœñ × ï r þ|ýC÷æòŠñUó¦÷‰ýÖ œ : ÁòIû¹ö:ôŽô¬÷–üå· ö å £cý§ùh÷êö,øòú©þ‹Þ ¸îðÌÿ~ü¾ù øç÷öøû þ¾€b¢  &ûÒÿOû˜÷ÍõUöåøïüæýó J ‰G|ü2÷Œó’ò±ôrù§ÿð × » ³ hÿúøžôÝòô¤÷êüΣ z œ ËMý5ùœö1ö ørûUÿøeû?'þ¤û¶ùÑøWù@û þ$$Á|Ѐ»ûßüùSö?õ8ö>ùáý=#} ¡ c ó¾Âüu÷4ô²ó×õú½ÿÀ¨  = —Âý@øAôôòÖôYù)ÿúÊ µ þ t ¸ÀúÆö¶ôìôY÷rûBÁ — I fhæmý”úõøÏøòùøû‘þ†puñb òÿdü7ùh÷o÷*ù1ü1½àh Y O$¡úÖõüòöòÍõÆúͳB } Ø m ÒýBø¦ô»óõÓù{ÿ_! ~ ø è-ºþƒù”õýó;õÈøƒýfµË ï ¾ —‡€þûdø÷–÷µùÖü3Mä§7\BVÿæû[ùñ÷ø¤ù­ü—šÒ™ Ÿ Â=ÿGú„ößô‘õgøý®/  T I½‘ûö‰ò7òõú #ý ‘ $ Î Š­þjùºõXô“õù þ5në D ‰2øªüù÷÷©øuûÐþS†Âv£·"±ü«ùÆ÷w÷ŸøØúîý¿±Ã w "‚ÿiúÏö5õöùønýˆH– “ æ ß^¬úö±óôûöüKDƒ þ } }Ôü¾öóAòuôÊø*þ¬m_ ³ p yç˜üù÷÷ ùVüPê}²køìÚý4ûPùwøÜøvúýpགྷìË$¤ü±ø/ö~õ·öÉùsþÕ‹U ¥ ¡ °`§úôõ©óLô{÷iü1ÁÎ - k T_ûfönó1óÒõ°úN“ “ ô ï4¿þ®ùö±ô“õAøü[w™ ˆ¦ûìÄýûKùùúåû:þúYpcÛ›ÿüãø÷÷ù`ü­,éï ¥ üyþÆøæô:ó+ô¬÷&ýy% Ê ¨ ¼ ~¤Pûö6ó_ó3öÝúƒ!p 9 w–uýåøÁõÕôqöú©þ1ôj  ¸ÃñþÌú|øq÷Î÷vùü[ÿ›N ­$o«Gÿü•ùcø‰øú)ý7@"; z ýDøõIôöÛùÿü0 S ~ ¹ £ÿùôúñqòÜõ]û·‹£ / í >ö9ýTøZõÔô£ö3úÊþŒsƒ W MtÉüµùñ÷ü÷œù'üÿ þÕMÜóÿÇüÜùñ÷‰÷¬øûuþMø¦§ ´ïÑ-ýÿø.öfõ÷ö³úäÿZº  Ý C ŠƒþøCô¨òîó©÷#ýp9 ô ¬ g øUvûoöuóZóö’úØÿàÔé ­ Fo';üQùÝ÷øÐù£üíÿV‰’´,Rþ¿ûúvùîùgûéý=®XŸq×È}ÿÊúíöæôõE÷6ûpú{  T l ­êþCù õ^ó¦ôøþýñ 0 ¬ _ ÃÙÿûù…õwó#ô9÷ü¿ ô ª x"UþåùÖöëõ+÷åùVýýk‰ÀV¤Þýkûáùžù•úrüÝþRiVÓåÕ/þšúÜ÷˜ö1÷¾ùïýð›í ? B èœvüúöwóòGôRøþ  6 ¤ HbúËõÁó³ôøýkM¨ œ î *Oqüø5ööÙ÷Eûyÿ”lj£@¹yþû8ù±øQùÝú6ý;hõ_—¶¶˜ÕýYú øQ÷ ølúþžòÝ ¯ O \üe÷€ô-ôzöêúŸi q ý ¹ OìýøãóZò”óP÷×üb¬ J n ¬ºŠüPø+övöÂøCüOHcË(à¼eÿDüÐùøÖø}úýüÒÿ±CµC÷þ©ûíø@÷÷røxûšÿÃ5 ã y ìû°÷Cõúôóöû˜1U % øý¤÷ôUóiõ­ùFÿ11  í  ;Žÿ(úöô®ô‰÷öûòm‡´ ë… ,ÿÂûùãø¤ùmûôýôáÜ|1-}býú½ø8øíø¿ú³ýˆ|†ñ Ž wâ7ÿaúöŒôóô¨÷-ü¨ýú ­ ° .çýã÷’ô»ó‘õÇùÿ\Û û } £ûWþùoõlô÷õ{ù7þböÇ   ‹Cñü?ùìö‹öøèúZþØç Õ6kàÿÿ2ýÞúgù ùïùü ÿUHhYÒ§Îýêù.÷öÑö¢ù3þ‡:( Ý N —/0û"öLó<óÄõ_úB@ë  Q  Tþù†õeôñõ·ùÀþê = 1 ;ÿ/ûô÷œö@÷ƒùçüìѵôƒÌ=”ýtúløÍ÷iøýùwü¸ÿ7)ð[~\&þ‚úø@÷Tøû ÿƒ} w š»§ÿwúWö,ô{ô_÷[üVÛ£ þ Á ˆMüööÎójóŽõ¸ù0ÿèv · O ¨Äÿû ÷3ö÷Õù•ý“"¢Œºz_ÿúû¶ùšøÃø&ú‹üÿªV3 ²`ÿÀûâø*÷ÜöDøoûÔÿZ÷ [ ¡éÜÿÁúíö3õÊõ‡øý’º+  P [ù@ûtöÈóäó²ö‡ûVÑÓ ˆ ¡ SM¨ý²ø…õ¦ôö9ù®ýˆ´< Å ‰§àþtû9ù•øKùïú>ý ì?vŽÅ77þ^û`ù­øUùLû_þ#འX ³ƒ¡ýù¦õ8ô,õ‚ø–ý9 V H « ªKûÔöôæôŠ÷&üÚIû ÞÖTüˆ÷²ô}ô¿öÂú¦ÿŒˆÀ ¹ —ø¯‹üAù]÷÷_øãú þ}`\EÉx“»ýuûúsù ú÷ûþþeRGAÙ ´üöø¯ö7ö­÷ ûçÿ3— ù ß \ Ý)ÿqù õýò·ó÷EüA¶t ´ 5 Oâ=ü³÷2õõB÷Sûzƒ, ® ø v¥ ÿÚúÝ÷Ëö“÷µù¹ü?ÁwÁŒ,JMþŽû¡ùâøLùÇú0ýGŒS Q cËìüˆùO÷ÑödøÑûPÏeX - ²<×ýæø…õPô…õùŽþ«Ö Í  ¿ MoVú€õóuóSöüúŠéè ž Ï å© ÿíúø÷ÿ÷wúîý Ä¼Yª×.,ÿxüšú»ùÎùÔúÜü·ÿÅOó•!_R„þàú1øÚö÷ù§üQãC Ì B ¬^-þHùÞõ½ô'öÎùñþs à ã Z ­åþcù]õœóyôÛ÷%ý,uÉ ¥ " •“ý€øÅõMõÒöÓùÔý¿Û'õÄýûþKü‰úú¿úPü|þxjwkG,]Sý”ú¡ø÷÷ìø|û(ÿ2Î[ K , ï0üÂ÷õUôö&úÇÿˆ c Q Ë $<ÿˆùuõèóõløxý%'C Í Ð ÜÔ¿û®÷ƒõ«õøõûšï y  ÙÿÿbüÄùø‰ø¹ùïûäþù|¬j1ðýçú ùdù[ú£üôÿ‹‡L•.%éÿcûª÷¢õÆõøNü‡µµ • Ü ŠMQýå÷#ôÑò@ô@øÿý  “ ¢ †žû÷´õö~øYüúK/ ïeó,þÉúžø%øKù˜û”þ¨ǹe댣¦ýûùIøÀø‰ú^ý¸Àw¢ý¼®ÿ¼û›øÖöêö#ù9ý-¾õ D U ú8üE÷IôÈóÇõùù©ÿ™c ä ¥ Ò PÿÑùÊõôçô øµüÒH6 &  Ìýsú›ø]ø’ùýû;ÿ“9¢ÆãŒ™þøû9ú‰ùÉùôúýKÇO~@Å«ýÎù÷èõªöOùxýZî7 o 9 Íé¢üø(õôšöìúuÝ÷  ˜™Ëý©ø`õnôÔõWùbþÖPÁ Í »i¹ûøTö¤ö¶øøûÎÿŒ| ‘!1MþäûOú¾ùGúØû0þÖRK jóÉÿ—üßùø÷Òøéû-˜C  C a²úeöüóâó7ö¶úz$\ @ z¢þùËõéô—öfúmÿ}Ž J Äþú÷ùõØö‚ùƒýöo& Kæ.ÿÊûrùsø¦øßùüòþ¯^¨;Ѹÿ˜üú¥øˆøèù¤üEB üøVÕþXúÈöúô‹õ‹øYýÐÄC — P „úü;÷Eô¬ó™õÑùlÿü  ‹ ô±¤þúïöö_÷hú‰þð¬å0 ¢¶hýgúøøùSûRþ}<-,Ìll`ý¿úÐøà÷Zøjú¶ýwù¶D ) dçþ¯úŒ÷ öö<ù ý¯+ × I  <ûåö”ôÔô›÷Müߨ S 0 ¡nÖüøõNôÝõƒùwþ{b{ ®   ý ú›ø²øúsüˆÿ°,‚¥ÆžÆþüú ùBùˆú×üæÿ7,+Å·_.ýIù}ö„õÁöú„þ\¢‰ X ¥ ¼ž‘û˜÷nõ“õ.øÊü9 *  ¬ ékûøö¡ôÄô8÷wû´Õ´ ~ ô XG›ÿ?û øŒöîöýø>üíÿC¼0 ÓKþüžúôùRúØûKþ³ÃDþJÆÿ>ü[ùŽ÷C÷Ìøüzòƒ} m , áþÔùöiô=õiøCý·  S V ¯ûk÷õõ÷üNl ¼ ä š°ýƒù÷vö¶÷zúVþƒ9¼Ì®°Gÿ#üÛù¿øÐøñùøû¦þ“@9(ÙRÒÃÿ¤üúˆøøXú`ýÃÄ[ èTA¨ý~ù‡ögõŸö1úLÿ¨ ¦ ï ± 4jÿ¼ù€õ‰óô ÷Þû”Û… Ö ° sÝñý¿ù%÷“öø4û5ÿ$9ó Ýl!ý¨ú?ùõøÑùÏû£þªI+8N-×Åýàúáøê÷bøqúÅýž+Ìÿk9ÚýëùL÷•öøfûâç ß (’(þùWõÃóÓôtøÑý˜€¦ y Æ Ìfõû¸÷cõ1õ÷¿úsÿ{ ñ08˜ý‡úJùkù¶úáüÿD~Ú*lÆûþ‰üŽúnùƒùêúký‡ÀŸ‰áaMR5ü øAöÓõ´÷ûm2÷ Ö :©BþTùìõ¬ôÚõ_ù†þË… à bïúôöþôwõ9ø˜ü+ n ž çë¤þþúŒøˆ÷ øúý€|’¯ËÖÛH´þ•üûbú úü`þ&Á¿Ñ¯'XÏþPûœøS÷Õ÷4úþ¬W   ƒ -NÛüè÷uô_óõ#ùœþ3Õ¥ Ð jïúB÷õ&öùøzýà‚  ±ý„ù€÷O÷Íø’ûÿ±£jÇÏÄ.ÿ‰ü…úhùoù ú¾üWÿ ˆpJ¼ÙêþÝûlù>øØø:ûÒþÇ\í× žG‘û~÷õ¶ôßö/ûÁIŒ ° G ^ †Êþfù‡õôõzøUýˆã    ¡4ãüŽù»÷­÷jùœüoèQuKÙN1@ýûøùÏù¤úuüÿÊ8÷Ú½xúÿÀüúAøÜ÷ù«û]ÿq„  œYôCü2ø¿õ™õØ÷ôûòË” o Á Š˜/ý~øiõ‰ô/ö)ú‰ÿ÷: Ž œ c @+ûŠ÷ÞõHö‹ø(ü[8÷"¡¸ãÁÿñüïúúRúÄûúýsÅ¥á-TsõTþçûõùìøBùûþŽùÓ m L†òþzúïöüô1õ¸÷üeb ¯ á Âû£ýðøñõKõ÷ôúìÿêÛá s ¤/*þ¶ù¨öŠõ¥öÏùHþë¸ ´ оæ÷ýÖúöøføùûÎýÙ|K' ó÷uìýÍûhú÷ù¤úhüÿ+%[C“]üÿýú-÷øõéöØù þñl™ ž  C0ðû{÷±ôBôxöÛúO„s e ÷ *œlþãùôöö`÷Šúàþdþ÷ÁÐÿüHùâ÷%ø÷ùêüMxòh¢‡MyŸþü úúøüøMú°ü—ÿŽ<=1â˜þý­ú5ø:÷(øóúþþ\'“  `Åýÿû4÷-õ†õ>ø¾ü»  É -"Éü/ø0õzôLö3ú'ÿ÷µÅ Î Ç"Úÿüaù?ø°ø¤úÀýGYTvÊDYÿžüúwùqùyúxü*ÿ!ç Ç7‹$~üAù+÷Ìö>ø/ûÿNp À ä`ûÿûô÷ö…öXùÌýÄ12 !   âÆû_÷õõt÷¿ûýö  B bXþú.÷)ö1÷öù¾ý­DJ$41ÿžüÄúÔù úrû»ýP¶´ŽÐè9JþˆûWù2øŒø‚ú»ýŒ=&¥ I ÷lþúù°öPõ4ö/ùªýºIM P –»Âû®÷võ»õpøßüâe‘  ™ B“¼üÒø{ööÀ÷0ûŸÿõB  ~•è=ýPú–ø8ø#ù'ûáýמ¼Á¶ÊJ‰þùûúpùúÜûzþ’¦øÛýŽ7ý˜ù÷nöøûÊÉ; l  ÃkÿDúVöhôèôÑ÷üÕ¢Ý å Ž -Œ·ü¾øöxö”øDüŸ¹ÌH Ø *ÿ·û;ùøMøúøü7/~øe’™ëÿzüaúùäøúLü?ÿ[%ÑíŽ1‚ýGú9øÖ÷IùUüi«!ã x íÒöýRùóõÀôö°ù¨þî„{  þ ÄwPûH÷õõƒ÷°û•2—  ¦öÞþRûù:øùûþJ&%ø‹Â)ýzûúÍùžúXü°þ`?VÿG•IÿØûêø>÷e÷hùÌüè_ ª õIþúööÝõ÷|ú:ÿ3J— /òÇþÒù/ö«ô õÏøyý›2W V û ¥4­ýÜùX÷‘ö´÷núÿýŒzq0‘¶!yÿ9ý‘û©ú·úÉû´ýQD—þ@nÑßý&û/ùrø6ùtûÛþу Ù ¥©i¦üVø‚õìô¸övúRÿb¢ r!ÿ`úáö\õPöùCþ<cî b ŸûR¾û9ødööyøãûùÿ‘{çD þxûÐùYùúÄûûýe¹Ÿ¨˜€©]Ùý€ûâùŽù©úîüìÿ/*)…ñöÿÑûOø:ö3öhølüZ'É v à ¿—ýžø/õôõùþWÜ    C«3ü«øÏö÷Yùý–'ŠZ*Ìþóûú-ù—ù6û¿ý•+&Q‚§×[¢þüúù9ùœúý5~:Òçp¢êÿÿûÊø$÷÷¾ùfýÏ![ ” j $Œüø2õ ô¦öÎú <^ ¡ } éu8ÿVúÉö2õÖõ„ø™ü"%ØÇç‰Nçþùûúœù‰úŒüÿ¢ÐOÍ&‡ZÿÅüÝú´ùªù×ú÷ü¥ÿŽW{_¯~9oþÀúÝ÷‚ö÷žù€ýô ' ìoüaøáõ§õ»÷©ûŸ”i / y ýý_ù)ö!õöþù‰þ)q ë Iþìýõù1øù÷Zùü4ÿ>›ÿIs¥HÑþ´ü;ûúñú-ü&þ‘ !^{g?Fóüôùø´÷ùÎû ÿâ¶! w Ÿ c~ûU÷êôèôT÷‡û“wA  e d×ÖýtùšöÚõa÷Öúeÿú™ S -mÿƒû¬ø‚÷4ø‚úÊýVƒÐË<O’žÿßüªúOù"ù,úü‰þ’”­‹4ûBeýÝúBù ù[úúü_ëä•~„ý›þIúÿöõ3öüødýŽcÀ Ù w øÕü5øKõÊô¼ö…ú;ÿ믰 k 2ûþAû¬ø¼÷«øEûÚþ„N©„÷Êý-ûŠùùÊù‹ûþÌv’ÂÛÜóX[þ|ûRùXøµø^úý™7 —HV"ÿûø«öz÷4ú:þÁç´ [ ¤ô+KûX÷)õPõÒ÷$üIž  &ÉþËù ÷Sö±÷±ú•þŽß×|º}býãúdù?ùwúµü^ÿø1Ä`Ò;‚ÿýöúšù_ùqúžü‰ÿ¹¨»sŠy_ý—ùõö ö÷úEþ& C ¡7¬ïûø&ööù,ýÝ?N 7 ºGÃ)üZø ö ö.øüœí)¿ k ?½¸ÿüGùë÷ø±ùNücÿ\¶BbµÿÈüû\úªúèûçýu1‰àç¤GŽülù‰÷k÷ùAüP—25  ËÞÿfúÅöõ·õ™ø ý „‚ ^ ñ—iüªø´öööIùýw”‡” ‚«Î»ý#ú´÷ðö ø§úþž¬âÚb¤I›ý]ûâùzù9úõûKþæehg·µÿ¡üú´øÅø^úMýÆ¢÷t(pöý»ùÐöõõO÷ˆúÿã%³ â ¯²Éÿçú ÷õõfø³ü‚Úæ  ÕýKú!øµ÷ ùÃû=ÿ¸…AÉûþšûõù|ù.úÌûþœ@|Ó1zþtû0ù=øÁø™úý¢]ŒãŽ ýý@ú´÷÷køœûæÿ\ÿø Æ dPiþÆù~öTõ…ö¿ù\þlß° 7 f Î6ü”øDööã÷(ûÿÍÚ£ÇTÍÜþÞûŠú_úZû8ýƒÿÔØCÓcýÖMÿÄü«úmùNùlú¶üÙÿIM:ª~ÑÒü7ù ÷¾öVøûÜÿbÕ j ócþúêöîõY÷ÀúUÿ)Œ ¯ мÿ û¤÷õõgöÔø©ü: ši3šÿHüÞùÊø$ù«úòü—ÿ?rÄù1¯³kÿ*ýqû§úíú(ü(þ¸q¶ë¸(}"ÿ¯ûãøz÷ß÷ú³ý 4J Ž © ¼T[ýêøö?õÇöHúÿ!L– ‡ Fh¶ÿ$û´÷:ö÷½ù¦ýëÁ\# ì#Œìýæúöøƒøžùúûþþ ¥f ƒíž{ýhûú¿ùmúüpþ2˺ªo…aÿIüþùù‡ù„ûµþ" ®§{ìûû÷¯õªõï÷ùûùüò è i •ðþ"ú«öCõ(öù_ýÿƒ ÄðC†ýƒúãøìøwú ý§VAÐMþü–ú$úÊúNüfþÖUp¬¼§™Ó´ýÏúÍø,øù~ûßþ¦ N裲¦büßøïö÷!ùîüª=Š Ñ Ñ ÌR@ý­ø·õõÅöUúýþÖç@ ] WΕzü@ù÷À÷¬ù¼ü4aºÛ˜Àžý¾ûÄúÍúÈûý®ÿöð<©0عÿrüjúhùŸù ûŸýÿ‡]Õ¡Ç~Aÿãúr÷Çõ;ö®ø¦ükn Í Ø ÕtŸýcù±ö,öç÷wû º G ×ÿˆþqú ÷¶öÈ÷uú%þ ¦ö›”NU'ÿHü?úuùüù‚ûœý÷ÿJ4Rn•÷¨þ|üæúNúØúrüãþÊœÀ²! ÂäýEú±÷¼ö­÷uú¦þf¡d  £ 8qIüò÷põ<õ:÷òú°ÿr%å ^ Ü ¿þ×ú7ø€÷Ñø¾ûÿJ_)‰§3ßüMúïøùøPúžürÿQ¶7¦ aÍÿ@ý9ûúîùÄúˆüÿ¾Œ#nysãýœúmøÕ÷ôø›ûiÿ¤]£ å dû°÷Éõ ö¨øÕüÂ\¡ Ø Ç ³<_ý1ù¡ö)ö¹÷æú ÿG¯y[‘¤4èüoúWùÒù˜ûþâylRö†dõÿŒýû.úÝùžúIü¦þ_?xršMÕü×ùï÷ƒ÷Åø™û}ÿ› < ;ßÿ†û;ø¹öC÷µù¦ýIŠS õ h¬ü@ø.öYö§ø{üX• \ ×ùþDû³øº÷køƒúˆýÖĽtîh4·ÿaýªûåúûüÏýl‡×(zÜddþpû8ù6ø¡øtúýV03§ C t ÿÆú’÷+öãö”ù«ýFYûœ È\áûdø°ö÷sùLýØ Ý° v“¨qýÒù ÷V÷äøÇû[ÿ Ô¯ETSþ¹ûôùTùæùsû¨ý*š—Ê8ˆ/þ*ümú¶ù9úüÏþ3Kýp`ýÂùl÷Õö!ø-û{ÿö & n¾ÿûk÷Èõiöù'ýÍÞ° aTDý«ùÄ÷¼÷„ù§üuÁõ†°ßšÿ{ü.úùgùÎúý¿ÿŽðjÏ1·~Áÿõü©úNùùôùëûÀþüçé˜Ö·úýËúÅøcøÁù¨ü~iƒ °UqÔý’ù¦ö±õéöú­þ©äi à þîAü‡øŸö×öêøPüU.2snÿüûù4ùÞù³û?þþƒ^A ÚåyûýÖûcúÚùXúÝûAþ ì#iv!€ ü¢ùþ÷Þ÷eùkü^NJ³Hx(þ/ú•÷ñöYøƒûÍÿS  Û Š ïþuú2÷Úõ­övù•ý'4â´ ¢ùJNþæúÃø7ø'ù>ûþ,ã«B¸VMêÿ”ýÆûÙúÛú±û@ýhÿÚ¡1«£®þÔû»ùÞøxù†û·þpé]: 5gVáüùöö‹÷îú~ÿ+ßÒ ¯ ˆÃ(ÿÔúØ÷Ûöñ÷ÉúÎþ3ø3 c  ge`ü(ùj÷„÷Gù<üÁÿ1ò…²Œg­àþxüÔú"úkúšûˆýáÿ2H¡ÿalþ)ü¤úúÓúÇü»ÿÑ…Éy®ÖÿÍûŠøÓö÷!ùÖütn ì / ^  þ¦ù–ö”õÐö÷ùZþþ× W ¦hW]ülùø‡ø{úŠýn¾•ñƒ‡ÿ·ü ú­ùçùûýgÿõ0¯7Ì‚{öÿhýLû úçùóúýðÿöˆ5ψÿúû-ù¼÷ø+úÌýÝÓ ÌÙ‚¾ü²øMööÐ÷hû#ô½Ÿ J õ"“ÿ5ûý÷—ö1÷ùðüËF¯‘áê*8ÿ®üûxú û‰ü±þ7²UTÅýÙû¡úCúÝúü ÿÇÁ¦<na©þû{øS÷à÷"úÀýê”n NcCÐü ùßö¼ö·øeüúi¬ j ½ŸôýÕù&÷cöŸ÷‹ú™þ숥û¦ ¥þ#ûgùù úòûkþTÊ<ÂŒÍÉÿ×ý[üœû¹û±ücþ—çæ$Y^5:þü$ú@øÃ÷ñø¹û™ÿº=v ð p ¥üdøaöaönø0üß[”á  ojàýäùe÷íörø’ûœÿµ÷ª…§ŠÙÿ^üÐù¨øùÅúzýšœ›uMPÓJþ9üñú„úòú9üAþ«úÀÀ×âã+Rý÷ú˜ùtù¯ú8ýž(‹c~ãþÁú ÷9öáöŒù¶ý}ÒÒ Ü ¯ û(ýù®ö@öÜ÷1ûÿÇ‘HZ-iÿïûšùÚøªù¸û“þ²k"†¦ÑeÉþtüÜúHú½úüþ‡óøE¢ñ:¹Ôþüâù®øÅøKúýd¹féÙâÿgûËøµ÷nøúúåþC V ¹ ¯$zûÌ÷ëõ.öyøUüùeœõ > ´ê¹þ û øä÷ÝøAû†þê­Dƒzo þíûÄú¬úû!ýTÿ½×;ÃoFOÏÿ:ýûÊùuùDú8üÿlpa¨dòýý[úË÷ßöÕ÷ú}þÇ}ÚQ ¿l%êû¬ø÷v÷Óù²ý*$¶k -4¾ü8ùN÷B÷õøüáÿ¶©à3G,ýÐúŸù¹ùóúý„ÿY«™‰;ÿýmû~ú~úû–ý0Ü —æÓl,Çüïù+øç÷`ùxüްö¾ © žèPÿáú—÷ö«ö/ù(ý²¿f ÔØâÔü¥ùÿ÷4ø0úƒýiøc8dÇ)þû ù{øGù<ûþ5 Ý¡qpãDþüúúZú¢ûÂýYâæ"Ôïÿòü~úù"ùµúý¡UŸÇâý ú`÷xö÷³úÿ¦t·  A»1»û`ø¿ö÷6ùÁüí¶= ¼péýóú7ùùBú ü¤ÿ¯(˜ÌÑáS þAüúÁùíùûý¥ÿ3hõŸ(€ìùþ,üüùÒøùÂú¯ý(hÒðj5»ÍýSúø}÷ÉøÄûÓÿ[ Þ±úŽþiú{÷föd÷Gúoþé´ ‘ 'ùü·ùå÷´÷ùºûÿw ezmsäFþ3üûÄúgûÒüÙþ 3²kD5LÑÿ:ýû“ù@ù5ú`üfÿ¶¯»YJ®.ýÑù£÷+÷§øÊûÖÿÛ¯wK˜IþnúÝ÷÷Bø5ûWÿ«' ÷ ¡jÿSûMøöö{÷«ùýô)Rì(d4;ýüúÂù¦ù™úmü½þW𮄧ÿ~ýåû÷úôú ü$þÈhŽÏÔg«4ÿÄûù¨÷á÷ÙùCýk`M Ö;AÊýÓù7÷‚öâ÷ûNÿŸúéäTÿ/ûsø`÷ø}úþj‰,èÀZþ~û¹ù?ù÷ù²û)þìh.ëåÏhþQüÙú9úúæûþŽ.¬BUÿxü:ú%ùžù¨û×þmªè—gr`#ü«ø¦ö„önøü¼> ; É X_¾þ‡ú ÷’öy÷úÞýõs¥,…?óýRûÓù¢ùºúÖü‚ÿ$/_˜Ø9°þ´üOû£úÌúéûáýUÍäNÇ$ZFþvûlùø0ùLûzþ/IÜ´þQ€üfù¹÷è÷úžýéìÉà ßç›ûü ù‹öóõj÷µúÿŠ P ÃÀò=ýpúýøýøRú´ü¡ÿkzzcU‰V.þzüûSûùû_ýJÿdQÇ|D †ÿÿüÚúù{ùÔúbýèªSd±€Žÿ­ûšøöö/÷_ùýlf3D XŽ ý{ùS÷÷Ðø-ül˜¾@ ×¥%#ÿ{ûêøà÷ø¡úÇý702ùzÔ^¦ÿDý”û¹úÅúºû|ý§ÿÂzž©\`!ÿ ýoûú×ú=ü˜þl$6.¸Ê³þ©ú4øM÷BøúúìþB« X áˆü¼ørö)öþ÷Žûîÿ5¹c<ÆÝþzûQù·ø·ùüdÿÉ{ñ¼n„™ýGûöùÇù°úüãþc–,îŮٙMþEüÔúNúåúˆüàþ~÷Ù«:þû ùbøsù"üÑÿ®ìá R߀ÿ2ûá÷<ö ö ùý¥ìô& I ‘Rþ¢ú?ø˜÷Ãøqûðþh›§JÒÚÿ"ý5ûWúšúíûþ¦ÿ²ŽŽ¯ýÀlþküûZúœúÛû÷ý%Tµö襘Rývú›ø5øuù ü®ÿj’q†¶ibÿxûuø÷œ÷$úþM—T ôË—üFùs÷r÷Iù›ü§x;w ürÿ?üúù‹ù,ûýTÄKó! þ…ü˜ûvû7üÄýÏÿôéc ›Žµþòû·ù€ø½ø‰ú“ý8Æ™ ˧éþûúøÈöu÷úÞý"áPꉀ‹•ü}ùê÷6øXúÇý®+‡MRÂ2ƒý‚ú´ø\ø}ùíû#ÿcÿ–G|þVÿýsû¦ú»úµûtý›ÿÖÑ<²9¢þ[ü«úùù‹úWüÿ2+R9ÊMpýïùƒ÷Ðö ø*û?ÿQ › Ð[üçø]÷¼÷ú¢ý´?‹0dÎ+ýJú¿øÅøNúýQqÆæ°3ÊúÿWýTû3úúûóüUÿÄæ{GÕÈOËýûóùgù'úüÀþ´jf#Y$¨ý³úËønøÒù¸üy>9Áj6Ÿnþ‰úÉ÷Êö×÷¸úÁþ¨éO »‹‰ ü–ùð÷û÷·ùÀüN†ÏÖ}ÙE_ÿÖüûiúÁúü/þ˜Ò|ajŒä³^þ@ü«úíù=ú¥ûìý´Ž÷o>¼zý ú.øù÷zùWüèÿeè—{Uþîúœøö÷>ù?ü::b Ù¾&ãþèúøÜöˆ÷ðùŒýŒyUŒXAùþ)üEú“ù*úâûIþÔ™\*5þküHûôúœû)ýJÿ™ÄsCàE¿Íþòû¸ù¨øùû<þÝIÍÍÿ„ÞØýAúé÷]÷ÅøÊû³ÿ¨Õ„F! ¡þû}ø›÷ ø^û%ÿ 8!m 9¡ý_úÚøºøÿùgünÿiÉ8•Ü2ë|ÿIý¡û¾úÄú³û]ýwÿ¯°š ‡SËþ]ü”úíù¢úŽüIÿV%{9ˆfübù¨÷¿÷ÄùGý}†é J ¶ÁSþaú±÷ÉöÛ÷¦ú|þwÁ±êi’ÌüTú#ùwù:ûþýÛÛÆ{þ¥ûÿ…ý˜ûlú,úòúüÐþAõòðâù•þÝûVúéùÁú¶ücÿHÓt¸€ÑÿŠüëù›øþøûYþ/ÅN! òù»üùÔööDø¸û>”i X ]ñòÿBüùHøžø}úlý°†MÒ5ÚQÿý—ûùúSûünþŒ1-Q‰ùÂþ üúú4úúûû8þí«ð#çAŠLÿü†ùRøÙøûYþŒï¯ƒ¨ÊÇütù†÷z÷^ùÈüïå×! vüL;þ¢ú5øt÷‰ø0ûÁþrŽ"ÝêóþvüÊú%ú¥ú'ü@þo[ÊŽz:rþëüéû­û_üçýûÿ@QÂ.bs´¥ýØúðøtø”ù!ü¥ÿwÑñC ¯jüüø÷÷,ù«üɱ˜Ù –êþªú‹øøkùDüæÿx;´ Gòü¤úwù”ùíú-ýØÿhwºF¿Ã¤ÿ¨ýü7ûEû2üÄý¸ÿϰè#D„3¬ýiûúéù@ûÈý÷>ôq=Eðïþ ûø«öC÷Áù™ý÷ô½³ ÅÕ§ýúÞ÷‚÷ ùüºÿU%›f›¾Šÿ¬ü úÁù>úüû„þ0wªAÜÎŒÿ‚ýòû ûûâû„ý›ÿÐÓU³]:žÿ÷üÆú‹ùšùôú`ýq˜%s*[dÔþ]ûÑøÙ÷Æø]ûÿü€Å. O1üÄøôö÷1ù¼üÝ´‡ÍEÌ,ÿûûÑù ùÀù¸ûlþ=œ!Õ4õþ!ýãûxûøûDýÿð½1òñ8¾ýšûú£ùrúdü"ÿ=7s]©v1uþ÷úrø÷`øÞúpþQ³Ò'¢¢Óÿ üùÁ÷Pø§ú/þ!± תã;}ý^úqø"øù/üwÿ£'œÄ—hÅDþHüûØúšû*ý(ÿ-í,±^>Š‹ÿ‰ýßûèúåúãû¼ý0Ú6·ñÎ{\óüôùøä÷eùIüò= º¬ÿ¶û¨ø5÷Â÷ú¨ý—j Ù — ýAúÉø÷ø»ú£ýÿP9¥½ýÿaü€ú·ù*ú·ûõýl·‹œ¯Æ àþÖüBû}ú¿úôûàý8­Í1è"3ý´úDùFùÇú|ýÜ;Ø LäöýQúÌ÷ ÷:øûÿþ1Í U ®ŒªÑü½ùøJø,ú2ý˜®Û±øì:þÜûeúúû ý˜ÿ#?“ñC®‰0ÿýGûMúFú5ûïü3ÿ¹ß§HÕƒ£ÿ³üXú!ùUùÞúyý±è\fȯ‘þÃúšø!ø|ùYüÚð”WBÔÒþû^øP÷$ø«úFþ,’Ê[3¯iþOû ùYùyú¥üHÿÝö5]i©Šrþ¤üeûúú„ûâüÃþßñ±½ÎÚ ª þ›ûäùQùúüÚþ Ãׄ6ýYúZøølù<üäÿ¥¢ ôt±þ4ûÇø ø7ùìû€ÿ.8ø÷7)Œÿ!ü‹ùDø—ørú]ý¨±ôç‚A¡þ üÊú€ú1û ü‡þš Å ± òýüûóúìûÇýDúR®­OÒÿ>ü{ùøAø(úPýÖªéCãUVþ¾úSø«÷äø¨ûRÿáÏÉ?ÿîû‡ùšøZùŒû™þÛµ 2P:y þüUúšùú—ûÃý+}l«øOàè¯ÿ~ý¾ûÌúÔúÙû§ýùÿehƒw;2ÿaü=úSùãùÑûÏþO½P"tÎÛü|ù÷f÷3ùlüdWp÷ŠRåÿzûóøøØø0ûlþÓ¹“ýÏ4þãû{ú<ú$ûîü-ÿ‚á[â ÚÌÿ¼ýüûèúµû@ýaÿÒ$ÏríVçúþüú+ùÀù¢ûxþ½ÁÄB?¾üáù`ø£øžúâýÂm ÷ýT˜ƒýóù¯÷:÷¤ø„û7ÿ(6Â#õÔýHûËùªùÍúÓü<ÿ—‹ÃMáAÿ•ýbüåû7üDýÙþ¾ª?:Íÿ/ýôúœù}ù¦úõürHï –Ô>‹ü–ùø`øNútý4ÄJtæ ýìù øú÷¹ùØü L}úmÿ#ü¹ù§øùÓúlýV à±Þº›þ×üÇû•û/üeýÿà§ù‡>7|ÿTý—û¹úôú;üaþ×þŒºÖgþû¶øÔ÷¯ø&û»þÂ\¸K û2ý«ù¶÷ž÷Qù]üÆË>,!Äþ¼û«ùùýù(üÿþéhc¥IáþÈüWûÑúGû“üfþy{(oÿÏþ»ü9û—úòúGümþ “n3¹rXþxûŒùùúüÕÿu‹KD{PaÿlûSøÙöW÷¨ùBýlP; q•ÒþûMùªøšùËûªþ¢x‘z?üý4üIûiûxü)þ#Òßc >/ÿ ýwû”ú¦ú£ûjýÇÿ`²8™ÀÍçý#ûTùìøúhü®ÿ%œ”éî6ÿ”ûäøÍ÷†øáúaþYä/­T†ÖýüÆùò÷ä÷‡ù_üÏÿ+Ð1 Š"^ÃýÇûÌúøú)üüý†I3Uê+XþÆüÂû‚û üKý!ÿOq×™W+`ÿ‚ü7ú ù;ùÃúsýáX XúÚÿKû™øŒ÷Søµú2þ…³%Ï |ßüú˜øãø¼ú±ýEu3bKmXþ¨ûîù†ùrú`üßþ€ÕnüxA$þ`ükûPûÿûLý ÿã8ºX-Õþüäú7ú¼úgüÿúºëªSŒý-úû÷m÷ ø[û%ÿ6 œÅ,,]Šü•ù-øŽø~ú€ýñ=ÞèµÔÜýnûúúcû£ýRéí÷ס§Iëýôû¹úpúûrüaþœÐŽŒ¦åSœþWüÉú6ú´úCü°þ-ñ{®¤­aý…úÑøªøúÙüpuÅÙþ)û‰ø‘÷jøÓúPþnzÝœÌyýÐúlùùûiý;ðøâ°ÿ{ýÎûû=ûVüþúÿ¹Ðo4üþÍüû2úQúvûŠýA! O6ç¼aý“úèø®øúù™üyWõÿeþûùø{ø­ùFüÂÿlgúÊôñZÿìû`ùMøèøóúôýKRn3ŽÂ:uÿ÷ü8ûúßúüñýªws´_•£þçüÅûiûÝûý ÿk¶i&ÌWéåþéû¨ùžøùÙú×ýmÝ]c¿‘B€þ(ûöøfø„ùüÿÊ&Ú þ^û<ùªøºùüXÿưn›RíîÝýJû¿ù…ùƒújüÓþX”œ,÷4$þiülû>ûßû=ý,ÿXVÀVò•dÏþhü³ú úžúlü,ÿQÙ?,¼Z¾üÉù*ø5øâùæü³sC÷×Íþ`ûùjøpùÚûÿzCÖàwþüÿ ýÒúÁù ú{û½ýaëÙʧ”Ô¥aþpü2ûÒúGûyüHþ¸‚¹ý[kþü’úú·ú{üÿû‚j^ìütú<ùŠùYûWþä*`÷fÈãüœù¸÷”÷,ù&üôÿÏÚkHœÎm#ý«ú„ùÏùQûŸýD½ƒ:Ôˆ©Šÿýühû™ûüþ ÅæEÓ”¦TÿýOû^úhú‰û¨ýi4p²·kîÂÿ¡üDú'ùùGû4þ§ÊØ`MÒkÑüçù_ø‘øhúý?ÑmwÈ;ˆþ7ûýøGø ù?û;þsG² l'¦ÿhýßûDûû“ü!þÚH {CާþöüØûzûðû=ýDÿ§äzŒÜDAþ~ûšùüøÓù üGÿÎ׸ ¹õIŠü™ùø<ø ú)ýðî-úÄ9þ%ûFù÷ø.úü¢ÿÇP¬žGFŽýdû4ú%úûÞüÿlsÐ]y€ˆþìüæû˜ûü_ýCÿX-gÍ=«[Òý¬ûbú9úPûšý¬ÙY g¥ŸáþCû˜ø{÷øfúéýó›ãégÜþßúñø›øÔùMü}ÿªN±d©ÿýJû–úûcüfþ¶äz+ðñ]cUþ›ü€û+û˜ûÂüþ¼ÞŽ¥ÓhàýÄûúXúkû–ýk@tD²Lþ+ûùNø:ù¬û;ÿfb­Ca“°üšùÿ÷øÒùÇüaØeNžÿ¿üÒúú¢ú)üYþÁàIÄX0ƒžÿåý¬ü!üKüýƒþN!¡‰¿*ðSþ-ü¨ú úƒú!üµþ¿•¢~ú ‡þVû&ùhøCù—ûóþœi™'TÂÿ>üžùrøíøöú#þÄ·ÃzRôý!ûuù0ù;úSüÿç?—Ó }k7ÿTýü¹ûüý˜þZGìã*Îÿÿþ{üûRûüÎý*³áB„x/ ½üõùCøø_ù.üãÿ«µl€åànü¹ù€øéøÙúìýk~jÔ»bGýú]ùùûý‡U`Fð†YÏÿlý«ûÕúôúìû‘ý¡ÿµixÌfFŒ„ÿ–ýüFû;ûüÉý _In’‘~¹ÿâü›ú`ùrùóú¨ýOÄãfT BþÑúwø®÷ø!û±þ…»®¿­Dý¨úZùƒùþúýw1§u-¬þü+ûàú–ûýÿD5„¤âÙÿÒý%üû×úlûÖüêþJ†<ðžQ€ÿ¼üŠúSùhùáú‚ý­²ïöƒ–Ž(þ2ûQùçøú ü—T³o›ˆÝþlûþø øºøÓúðýeom H^´äþü$ûÔúûý6ÿa"$N°j¥ºþýðûûÈûÅüpþƒœTc è8Êþ©ûòùGùßùºû‘þǶƌҫ†þ$û?ùÓøÿùŽüèÿ=ÍÇóô}þjûjùáøàù;ü{ÿáž±,ïü—útù¤ùÿú?ýøÿœ£±²Çàþýøû•ûõû ý¯þ“Y·xwŸýäÿ¹ýåû¸ú|úcûZýÂЫAÝüJúÛøäø}úeý÷]ÙñlX}þIû6ù£ø«ùüSÿ¦H©‘}hÿŽü“úÙùqú4üÉþ¥#½4Žô¨ÿËü0ûwú§ú­ûlý¡ÿݽÿˆ?Eåý#üûàúºû‚ýØÿ=:h{V&iÿ¹ü«úµù#úúûâþ,!·´4»ýúUø'ø¤ùˆü2ÅtÄ€¿×nÿUü8úvùúòûŸþ†ý|Êô2Úkþjü;ûýú¯û&ý(ÿR8&öùL5þFüûƒúøúeüþ[10 ¯`¡ÿý ûúvú+ü×þÖv*’Þÿ›ü úÁøùÓúáý|Ð&;ñœÿýèúúø‰ø¢ù üGÿ’9½òݽþ@þüÝú¯úsû ý$ÿL #|dÿÝý™üîûôû¾ü?þ0/äþ?~ÄbÓý•ûú»ù³úßüÏÿç‹0s*“@øüaúù/ùîúâýOey'Bî¦8ývúóøôøvú4ýšäSv!wɧÿ¼üžú¨ùëùGû{ý}WZyµ5BFÿ”ýaüÑûûûçügþ,ßB2gÕ×ÿØý4üBûMûyüþBÓÏÅi©ÌtþVûù2øæø$û{þ.o—8&œ* ýÃú"ùù‰úEý•®æÔT¸¢þ÷ûBúÂù|úKüÕþŽÜUÑOðî¯ÿ¨ý0ünûrû7ü©ý„ÿqĨf© ÿ§ýüAûgû–ü–þ÷F ÝnÀ0Kþ²ûìùfùcúÀüüÿU¯À(.xÿäû1ùâ÷<ø9úxý;ª nfcÿBülúÝùœúxüÿš³ï$Yº¢þèüïû¸ûJüýPÿ*ÅêvQgØïÿþnü_ûûÎûqý¸ÿ)[åm¹Ö%7þžûãùhùbú§ü´ÿÙlà×@sÿæûù±øiù­ûÿœ³¦åHÐLýyúÙø¦øèù\üuÿ~×$DGaÀþý üíû™üðý¤ÿT¨qž! …ãþoý^üéû5üNýÿ%2Þм‡_­ÿ÷üµúfùgùÚú{ý¯ÙY¬u§§'ÿéû“ùøKù‚ûÀþ</U†:ÿü‡úNùù8ûïýîé³,wò0ÿÅü#û{úÞú7ü<þxwè§¥Ún®ôþ†ýü4ü—ü¶ý[ÿ+Ú!¼p47ãþ«üùú4úŸúFü×þÌS•lGÒýÁúµø)øPùóûyÿ"ò)®Û\ÿüoú#ùZùûÆýà›k\ŽjþPü ûûêû³ýöÿ5ôì9±¶©þæü®û(ûkûzü*þ-0ì‚ô‚u+ÿý]û¡úû™üèþ€â“!N9XPý¾ú-ù ùwú6ý© ªþ¶Í«ÿ¬ûHùRøüø(ûOþ¸¦‹'1\þüÒú±úµû¡ýøÿ'¾‚a]«­ÿÖý}üÌû×û£üþùÿá£Æ–·ÿLýwûRú*ú!ûý©ÿeËaÃÇ ¾¸ý$û–ùpùÍúVýz‹é’›—AþLûVùÌøÜùTüÿî•£þÎÿÍüœú™ùèùxûóýÂFÂbø­ÿ¤ý.ü~û¥ûšü+þþÿ½&<¬mÀòþEýüjûºûöüâþ#XÈLàýþ(üíùÍøùéúÌý*ZºË@3!¾þ¾û¿ù0ù7ú‘ü§ÿ¿-l6ÝÌþü5úšùeúnü@ÿ+’Q]aÈ*þ ü¹úaúû“ü´þöï_ &›¶Ìþ"ýóû{ûÜûýÔþÚÇ@ì6 ³þeüµúúÃú§ü]ÿ[ ØH*´uýBúŽøjøìù½ü/‚]Il4ÿ\ürúÔù¡ú¬üsÿD‚º·{I£ÿ ýBûWú‚ú¹û½ýb(1] !,"ÿMýéû.ûHûAüäýæÿùÑ~ÙK´þuüÖúBúéú¯ü*ÿàDÖ$Ôðÿýµú„ùÎù’ûgþ¯¯É{’8öŠý§úßø–øæù~üÄÿ÷|ÜÚu%}ý…ûú¼úüþoÉž˜ìüÿ'þ·üÝû·û[ü°ýpÿS \ÿ¤֣ÿdýûbúZúuûƒý#à1“¤Z)ýÒú¡ùëùžûMþ[”—G6ý¢úOù}ù/û þ`u¨Šèßà™þ²û¶ùúøœùtûþâ[Û‹E_Ibþðü$ü üåü;þÖÿlË´øt?™ÇþýÁû3ûœûõüþþY ^%±®þûûúOùúüÿFòS$¨x>ý¥úBùlùûæý ÝúîýZûÄù{ù•úÖü´ÿŠÌMRaòƒþƒü:ûÓúXû¯ü‡þ‡\ʘ£èÛ ÿeý;üÒûCü{ý;ÿ=$óTÄþëû|úBúYû‰ý_I³ å?sÿêû„ùvø ù+ûZþã 2ã÷ s&þbû®ùbùƒúÄü•ÿSwœZQôÿÇý*ü`ûŒû¥üjþoRϮɧÛöþ:ýáû2ûVûUüúýù0vµßþjüûêúêûæýr ÁnaþŽû•ùüøùùYü–ÿí¹ò‚¾HÜüúø¦ø=úøü1;‰³‡É/ÒýüQûû¹ü‚þz9} ×èxÕÿGþýMü?üíü5þÜÿ¥N„ÿŽF\ÿàüûCú•úüTþÂÕÅQŽá×þüúvùeú£ü¯ÿß…  ~¿mÿ;üÕù½ø9ù-ûþfYc`e¨ÇþQü²ú8úôú²üÿþXV®&­i®Øÿ2þñüJü[ü!ýgþíÿw˨ÙEh™þòüÒûûCüÞý„´ d^8V>ýúèø¸øúªüÿÿi9ÍÄ$YþÿÅüSú4ù¬ù”ûiþ4úmvPÐý¢ûqúwú´ûÙýbÇ–…gKxSDþüœûpûüký!ÿó¡êo—-pšþÿüúûÍû†üÿýöÿ÷2(1­ÿýïúÐù ú©ûPþ~’äåO8‚þ;ûîøøúøDûxþæÝÅ5$è 5þñû¹úÏúüHþ»ö‹-¸JCÿ<ýðûoûÒûý¿þ¤c¾„Ãc¤Êþýßû^ûºûìüÁþó$çØµ‚qÛÿ:ý û úFú½û*þä÷ÇAþEûuù"ù^úßüQîW4Í‘ÿ‰üKúKùÁùˆû+þ¤lë¹lÿpý#ü»ûEü‘ýGÿ —¤þ–ˆnÿáý¤üùûüéü\þ3)ó*}Ï9ùnþüHú¥ùKú üÐþß··j Œ–Xþ‚û±ùRùtúÈüÌÿÓ8dgÂÅþü?úÃù½úëüÅÿ²†£f)kÁý ûgúLúMû&ýaÿ’]€Ê7ôO“ÿþãübüšü€ýãþ‰4”\X‚÷óÿÇýäû¹ú–úûyý Ð6ªÏšE>ýyúùù™ú@ý~«6Çî#ÿ:ü]úÜùÏúïü·ÿƒÀíÇ_dÿîü(ûpúíúzüµþ%Tà„ÐëÍÿÍý6üIû7ûùû`ý+ÿìM÷ÇÏ7;(þfüZûDû)üáý"}™ŒS$nÿ¸üŸú¨ùúËûzþ”qlãÙšýÙú5ùùtúÿü%?®éªŽ°ÿ ý&û`úßútü°þkɨ¦þíüÑû}ûüIýÿð½'éߌ›|þ‚üûwúÔúüþòñГuÐÿ1ý5ûQú·úKü¸þ~¦ùç±ÑÿÞü†úVù¥ù`û$þ[ZzBƒl|OþŠû·ù@ù-ú>üòþ¼ŠÔø; ÒþõüÊûƒû&üyý*ÿñŸ ³µC–ÿåýƒü¶û²û}üõýæÿó;–ã?çCþØû2ú²ùuú[ü ÿüŠ#iS ?Pýûãù6úßû}þAšži~uýïúùwùØúEý25P±jÉÿNýiûqúŽú­û‚ý­ÿϨê\(…µÿþý­üüüÎüþÑÿ¡)1y éýüûû3ü,þ³GTQýdоþÏûªùÔø‚ùŠû„þÓÈ»??üûßýSûêùïùPû±ýˆ8/úuÇ_¿þgüÐúMúòúŽü»þ&£Cìà (þü”ûaûôû,ýÜþØÀ©Æ79,þ}üŽûû‚üEþ¶b«&Ðþ®ûúÏùáú ý!Lði]ÐÁÿqüÛù–øæø§úmý  É­$dÝ!ÿ»ü'û³úiûý:ÿxZ…ìÜôþKý&ü¿ûü ýœþWxK^¹q©°þÝü˜û+û¤ûþüÿc›,¹$ƒkþütú"úû3ýüÿà6m;© ïþüûãù$ùæùÿûüþ@ìI+ÝÜÀý)ûùhùú“ü+ÿÈñ;p£(4ÿý‡üFüÇüÝýKÿÓ5/GlŠÿúý¹üü%üþüþx…:0-$4¬ÿ ýåúºùÑù,û“ýœ¦-ä>‘cÿbü?útù'ú"üòþþ˜&O ·ÏÿôüÂú²ùú–û þÚxa4ÓfEÝÿ›ýëûû3û$ü«ýÿWßÏ ¢D·ÿAþ/ý¸üëüÀýÿÉu»MãÓþ¡üÿúRúÌúeüÜþ½q\ OJXþ%û<ùÂøÌù"üLÿ¡gÌ[PPýûîù8ú¾ûþÈ:äpÊ.·þÂü‡ûCûüûyýaÿ];™( z´ÿþý¡üÞûÑûxü½ýpÿQ4©IHÿý›û ûûøü3ÿà(,mwý÷ú…ùxùÔúTý|¤Aè!QÿõûÂùéøŽù{ûEþTËR”Ôyÿõü¹û„ûIüÃýœÿxð½·õ­„þ1ýfüOüäüþ“ÿMñ-¿ŠìÒÿšý·û‰úSú*ûóüiÿsú\}ˆÔøý˜û:ú)úkûÁý­†¡óX:þqû©ùCùLú†üwÿˆ y„@>ŒýrûcúˆúÂû¾ýB뽩#\¥þOý–ü–ü<ýcþÙÿ]©|­7%—ËþýÓûHû—ûÅü°þk@.û¥WyÿühúOùùû¹ý×ÑüàT}º§þñû7úÙùÝúý×ÿ¯êÊQó4ÿ­üìúSúóúüðþr¡`®#ìþý¾ûRûÅûìü’þq=¤jtÍŽæÿiý<üÁûü!ýÔþÚÍBæ’E6Äþ{üßúOúõúÂühÿYôüò®™\ý¨úùùøHú¿üÝÿõV€BÁXÿýPûÉú~û5ýƒÿêáûýõ%÷ÿÔý*üMûcû[üùýóÿð–™ÓF Xfÿ‡ýüCû;ûûûwýtÿ£–ïq¥‘*ÿ÷üoûáúpû ý_ÿô,ƒª’l£ÿ×ü«ú¦ùú¯û]þ~cbNCcDþ—ûîù™ù›ú°ügÿ&\ŒqŠ=þ]ü™ûÔûêü™þŠbÃh<Wæ)bþáüìûªû"üDýçþÓ°$íáùIÑýåûºúúûhýôÿ™Í2ãYý9û4úxúýûsþNßö ÿ<eýûòù$ú£ûþ ÎÒ£mî#ÿ›ü×ú)ú¥úü;þ—¾Gô¾½0Y”þ/ýeüMüÜüÿý…ÿ/¨ª ¼¹#;ÿiý ükû°ûßüÓþ1z.퇕Àþü9ú†ù*ú üÎþ܈@©±Ž¸ÓýŠû[ú‚úðûKþ¢ZÜ>²üý¶û`ú=úHû>ý¾ÿKh¨Û lQÿý½û*ûkûbüæý¹ÿˆ ÿHÞË@ÿâý·ü8ü†üŸýYÿW-täTÎ’þóû—úVúJûVýì9wbù}kÿtüBúPùÎù›û\þxH%·êöHtþü»ú‘ú–û…ýñÿU-þë!ýÿëýTü€û‰û\üÐý£ÿ‡$288¯Øÿ þ•ü¹û˜ûBü©ý–ÿª}²uö׈þ‹üPûû üëýbÝ˹jåp”þ÷û2ú®ùŒú¨ü”ÿ²MÑó«@*ý¨úgù‚ùåú@ý×ëòΠ³oGþ«üßû÷ûÔüAþñÿ‘ÏtpË¥/ªþbýüYüËüãý}ÿS\ûÁ£Âwÿ1ýgûsúúÆûéýŠìœ²êþgü¿úKú*û1ýòÿÕ&_?ÆD=ÿZü@úaùåù«ûVþVÜâ/ÃÿÊü8û§úûfüFþ_C:Oxñþ¼ý ýëüdýfþÇÿG•s²@rŽþÙü«ûPûéûmý¢ÿE¶AL–®ý3û­ùnù’úâüæÿôb®—$ž—ÿ¾üµúçùqú4üÍþ¨#­3´#þ üÝúÇú¸ûuý¡ÿ̉ƒœâ¸äþSýLüðûCü:ý¬þ\L4 d¶ìþYýIü÷û~üÖý¼ÿÇ…‘®¾árÿûü ûúZúÝûbþhJb?«¿Ôˆþû‚ùÑø”ù û„þ EðSn~õgþbüLûMûRüþ68§DýðWƒÿÐý™üüAüýyþ$Í-6»Ÿ0ÿqýügûƒûuü!þ;]!,,Mêÿ‰ý©û³úæúGüþBÁ~]i¡ýû†ùSù‡úéü‘ÞÍfö.ýû úCú˜û»ý0o«W-w“ÿéýÍünüËüËý9ÿÍ98¤r¦]Íÿ<þòü'üü’üÖýšÿPŒ„ó}þ7ü–úöùƒú5üÃþ¤? §ìû:Bþºû-úíùû;ý Õòò£¢ÔþSü§ú(úçú¹ü9ÿÞ^”¶ö´gþ…üjû7ûåûEýÿ÷’¡±ÊoäÿpþRý½üÁüjýžþ+Æõ^ìöÿáýüóúÇú­ûŽý·îFj@öý˜ú@ùEù«ú/ýE>}ŒB²6dÿáü5û·úrû2ýÿúâÛº˜Kÿ%ý›ûýú^û¥üþ¹»3æÄÚUyþý ü´ûüýþaf(1q%8þžü§û‘ûoü)þc©€f%òAÿ¢üªúÄù.úÛûyþx1±íéþŽûúÀùÐúöü³ÿi”x=0Èÿ’ý üvûãû.ýÿàQÉá ÿpýTüåû.ü"ýœþ^‰m Êûôþ ý•ûÝúû8ü$þ{È›—}E( ÿ2ý`ûú÷úŠüòþ£ˆàíß'dý6ûúJú½û)þ«ˆ7œØL…þüúúÛú”üéþXh¶ƒ+YpÿÕýÇümüËüÆý1ÿÀ&'škšCœÿóý”ü¿û¢ûXüÏýÑÿùSÄ+‹4“þ0ü†úïù–ú`üíþ´¨qÕýÉûÆúûzüÒþ}ßiÉéòT£ýzûMúQúƒû£ý@ÍÀ½¢‚Tþ`üiûUûü‚ýTÿ1ÊÜG±‚þAý‡üvü ýjþÓP>e¤ åýüûòúÿûþý‰#9´UzÿÃüÂúäùYú ü¡þ€¬4;óý×û¹úÐúü=þÈ)ÜŽ&»¡Iÿ2ýÄû;û¤ûãü¹þÇ¥ª‹¯;oœþýüœûôûýœþ}TѱǀŽþàüãûÑûºüoþ”°M§5ørþ2ü·úbúSûgý- `¯¬OÛÖÿêü°ú›ùØù\ûÏý§CâwÚ{ÿmýü®û<ü—ýsÿf ]ܱXÿÇý¤üüAüývþ&ÞWU£)ñ-.ÿLýàû6ûû¼ü®þö ¼t¥}ÿëü‚û0û üíýiìãÚ‹­þ ü9úœù[úTüÿ¶`ÎïöS–þPüçú”ú[ûý2ÿi<XŸÑ'nÿùýý«üùüáý2ÿ±%²¤ï°xþý9üüÆü3þ%é-M‚)´ý«ûxúrú£ûÓý:OYGÿ°üäúEúøúÖürÿ4{ÌåÁõÿ`ýhûtú®úü'þ©¾’bDwXRþ¾üÔû±ûQüý'ÿÒFPʡڟ+½þ—ýïüðü¥ýïþŽ0‚6Z@ÿ4ý§û÷ú^ûÙü'ÿÎ?ôˆÌÚ þeû«ù<ù6úbüIÿKÈBoO+„óýüûMûžü®þyì_ôúáþýéûûü8ýéþÆu²P>€5šõþ„ý‰ü(ü{üzýöþ®V™8apÿ”ý7ü©û üŠý¤ÿûl¶ÉÊ"`ýûÍùÊù û‰ý‡r°Éƒí]`ÿŸü¥úÕùOúõû_þ `ðwçqlQÿ‹ýqü+üºüôý’ÿ3‡WõÿÆýÞüüÁü£ýÿ¤?’]p¶G^Pþ„üOûÿú±ûOýŽÿ÷n·ÓêdÈý£ûrúúÉûþÌjX&£èW…þ ürúúøúúü¤ÿ[Öðßâkþüûÿúãûý}ÿkó×ýmLÞlÿ8þtý?ýžýþµÿ9c!³ÿcýü†ûÈûìüËþMÙ…Eˆÿ×üºú¦ùÛùVûÇý§\Y1¸ ‹Îþqüôú§ú›û–ý"¦™WÜbÿý„ûáúPû´ü¹þíß5µT){ ÿðý¶üü3üùüBþÏÿ_­‹Ïmrrÿøýàüeü­ü´ýSÿ7UÛiæ{þ=üªú!úÏúü/ÿŠ4¢¹¥Ýòý€û úßùû8ýòÿ©¯~$þ‹ÿZýÞû^ûíûbýhÿ<>_ž(T}þý.üü¿üþ¨ÿ[ÕÙ:êó}Âÿ þœü´û‰û*ü‚ýZÿdF£.Àmo,ÿýšûûªû@ýÿìÿAcN:ÿýûúeúøûwþWþÛ‹ê‹Äþ\üËú^úûÚü#ÿv\w™Ç?Z‹þ)ýwüŒüaýÃþeò"žÖJ¯þLýVüüûWü`ýôþѦ"þþi7éýíû«úlúFûý~ÿ 1€©¦°5ÁýÛûôúFû½üÿÑIš®µ!„ýrûSúlú³ûåý‚ûϧ_ «ÿ‡ýýûOû’û¬ü[þCUúäÒGÂþƒý¾ü—üý)þœÿ3¬À5ëâEZÿxýüû<ûoû–ü€þÏÌ Ræ£þþ„ü¹úú”úMüÎþ’ÿ’ö1¯&þ$üû;ûü—þÿ0ª tÑ“=þHüûæúºûhý‘ÿŜƆ5jzÿ»ýnüÅûÕûœüïý–ÿIÄÊ*ÔÒP‘ÿèý©üüXüjýÿ æ8³+¸žKþ>üïú·úªû ý1Óø)Âo¡ÿêüßúëùBúÐû4þèSù‰éH ¹þÎü³û›ûü0þ@BÉlsÕéÿþ“ü¸û¡ûNüœýNÿÀø‘q5t þýìû“ûüLýÿ Ú¯¾ŸþÉü§û…ûrüBþ“઀+³fÂþXü²ú2úúúàü}ÿ=’ôà7‘ýxûUú_ú‰ûŒýôÿBïÞæCV‡þ$ýkürü1ý{þ ǃ¢  ÿ ý•üü^üMýÌþškà­Ÿ­ýÜÿ±ýîûøú û(üþ‚Ú¥|&¸‚ÿ¾ü;û×ú«ûˆý‹“¤}$á8ÿ·üéú0ú°úNü®þOªFÜSÒ¯ZÿCýÆû"ûeûyüþìÿ©ÌçZLõÿQþxý*ýyýRþŽÿõD4Œ*}«þùüÈûbûõûlý‹ÿê…ñ4jï?þìûvú2ú/û3ýÓÿ~½›Gvÿ ýVûµúKûôüKÿÊîDбò±eþ…üfû9ûþû„ýxÿw$8Ž}Îÿ=þ ýcübüý)þ ÿ.ŠwÃa`ìHÿÉýÄüzüýPþ¼¿ÉÑû¥ÿIýgûqú­úükþ1ÔÕYÂÛþ<ürúÛù‘úfüñþ¥íZ¦Í БþÅüÇûÂû¨ü>þ"ôZÿ0ØA´þxý¾ü¨ü6ýKþ´ÿ5†í¨ÀV£ÿïýŒü¿û¼ûüþÑÖî Y.ÿýHüpû­ûúüÿ¼@­Þüg«ýZûûùÝùûLýï1jbñRËýÛûØúïúüÙýøÿôl'(Æ1ºþ¨ý(ýKýþ#ÿt¸µ<2•€¢þUývü;ü»üäý“ÿ|I™"¸d_ÿÍü,û|úòúyüÃþ[¸XÞ)bîSþ$üÝúÊúïûþ þÒkã‘öþœüûxúû³üíþN^¹"‘4\lÿ½ýü7ü”ü‘ýõþxÕÓG#pTþÿ°þœýýüôü‰ý¬þ*¿!+†$D<þuüVû)ûüÅýš°ëýØ´øÿ1ýõú¾ùÑù'ûuý>îöê-övÿ>ýÃûSûþû“ý­ÿÒˆwoxÎÏÿéý|üËûòûãüiþ3îI zI ÿ¬ýžü%üYü*ý}þºê]T~þïüÿûðûÈüdþ|›P/þ¸™ÿüÐú úŠú3ü³þˆ×g«Ì4jþü‡ú4úûçüDÿ¦Ž› ® JþýütüÆü×ýcÿ ƒzÄSCÆ$ÿ¥ý‰üÿûüæü5þÖÿŠ y i|ÿ›ý"ü]ûzûzü7þ]-Ö¤ªKÿ ýhûÇúLûàü,ÿ¶ïU—¢®'–ýŒûxúšúèûþ Å¤‚'ÿý¤û*û¨ûþüÕþΠû|qÿþ!ýÊüýñý0ÿ›ö‹u¼êÿ?þËüÛû¦ûBü ý‰ÿªœönÛUþXüÃú;úßúüóþ‹É3}—»RåýüûQû¢ü·þB¯R¤fþ4ü#ûû!üïý&PëâòRXdþÊüÍû”ûüAýÌþvù¤ß´CÌþ•ýÝüÈüdý˜þ0äS/;lØÆÿ™ýÈû¼ú¶úÂû¶ý3»Æßʈ]»ÿ/ýEûgúÂú7üuþø6­T¨r3þlü‚û¡ûÂüžþÉÎ>ÍdD5ÿXýüwûÅûÓükþ=ÿb-A£pÝ)ÿ–ýmüáû üâüKþ ÍG(B‹!H\þÇüáûåûÖü‹þ©ºFïŠõ‚þLü×úwúIû!ý¢ÿCq´Æ¤”€ý‘ûžúÕú"ü3þ“ÄQí0L?ÿtý?üÝûVüƒý&ÿçp{ÞŠ™7¥ÿ&þúüZü\üý?þØÿŽ$ƒù>6ÿBýÇûûEûdü=þu•-å•NYÿ"ýÚû—ûfü þ`¤f9æy>®þVü»ú9úîú´ü,ÿÓ—õ-s(¾þµüiûû¯ûýéþÖ|é…†(ªÿQþ_ý÷ü,ýïýÿàû™™ò¼%tþúü üÕûxüÜýÆÿÛ­Ú]¶zþüäúÃú¿û¤ýzXBµœ/ÿüü‡û$ûêûªýpi€uLGÔÿqý™û©úÊúëûËý(Ô»Áò€»óþwý‡üAüªü¡ýþþæòzh¿š)±þ|ýÆü¼ü`ý þBóRwoÿpýçû6û‘ûêüÿz¿VÝ2rõBþåûdúúõúåüsÿ;s„s‰0ïý?üyû¼ûñüÈþݾ{Ñ<ÿ‘ýeüîû8ü/ý¡þIæ1ö{iÿéýÌüCühü9ý—þ@æ3ãÍìm™ÿÖý‹üüoü¸ý¤ÿÍ´æ2]ïÿqýiûTúrúÃûþÄpxl¡Fÿý*ûZú³úü$þrƒñ}ðLˆÿþýÎüCýOþµÿ/wI‹-Fý…ÿ!þ ýuüü'ý\þìÿ– JÉ‘ÓÞþýäû„ûü}ýÿ±˜Éû^¿ýäûôú%ûuü þ/“DåN£7’þ@üÃúgú5ûýcÿÞî*Z‚ÝãþãüÜû®ûVüŸýDÿóZA‚$BÂÿ™þÊýxý¯ýgþÿÆì[,\aÿ¼ýnüÂûçûåüœþ¿ã•uP‘ÿý;ûUúœúüFþë_É>¤TÏþ¤üJû ûìû±ýûÿ?å¼™¼“ÿŽýü€ûÔûýüºþ¯}Êd4SðM°þgý üvüæüÚý&ÿ’ÝÍ6 L±ÿQþIýÖüý þÿX=¨&¾¬Uþ4üÀúPúûÌüLÿiöZ€”ù?þøû›úiúdûMý¸ÿîÕª†¯“ÿªý]üòûrü»ý|ÿWèáx?©ÿ™ý±ülüÔüÑý0ÿ¹'<ɶÏB þ2ý=üñû`ü„ý,ÿ È{ÕùãþýÇûwû,üÍý]PlmM@±ÿ)ý5ûCú…úìû-þÍ=úª0­{ÿõü“û+ûÊû<ý.ÿ3ßÝc ‰òþ­ýúüñü‹ý¡þûÿ[|'@ÅÉtýþ¤ýªüAü€üjýÞþ¦qêÃÊðP0òýüÕúúrû/ý€ÿëî!>GjÎýüNû£ûýÿvˆÖ9pµýÍûÇú×úöûÞý/kùÖÎ$EþÙü#ü6üýPþßÿ_Š.5¥ RûþØýýïüVýIþ¢ÿ*’™º´+ÿLýàû2ûqû¡ü‘þé/ç¹rðaÿúü7ûzúçúaüšþ7šð0‡[-þ|ü«ûäûýûþ)!tÚD×ßÄþöüÑûˆûüoý3ÿ¼Ø@çî~ÜÿMþýküaüøüþŽÿ"‰„â“™hÿÉý–üü`ü|ý5ÿ4^×SæÒ‡þ…ü<ûøúÏûœýzz–eVÎÿ[ý‚û¦úíú@üQþ«ÎBÀ>ßýÿaýpü[ü ýþQg4Ó nþý+üúûxüýÿÍg¦SR¡QšÆþ+ýü¯ûüPýÿÜÊæÙþýüÝû¶übþ†¥Bû£B#·þ‡üû¨úeû$ý‹ÿ6°Èö£Kþiü[ûJû,üÆýÁÿ­)ïäÆ0¥þxýÜüìü˜ýÁþ1¥ÜœÈSOÞ=ÿ³ý„üìû üçücþ@%º¬Æûh\@þƒü„ûxûjü+þYyÊy+'áþßü˜ûTû$üáý(xN<ÝÙxÿ9ýšûñú[û¼üÊþ*œ*‚²¨ÿÌýpüÊûêû¾üþ·ÿJŽTƒ+ç†ÿKþoýýYý1þzÿúeoÞ’ŽõÿTý üûûûLýEÿ€‡çT­ ÉWþ?ü÷úÁúªû„ýæÿK+!ÏÖ‰ÿjýõûsûÿûuýÿ²«×„ƒsþ¾ü¹ûŒû2ü‹ýNÿ,Íía;Û>¨þ[ýˆüOüºüµýÿ €FiÿþýËüGý€þ6›ŠÁÿ?ý{û›úÔú%üRþê^,ð‡¼(ÿ×üGûÄúaû÷ü+ÿ|pÐ |‡þ÷üüüìüWþÄÑ×4ˆÿþ±ý×ü‘üèüÍý ÿ¥@ßÝ1ðO þ.ýGüü·ü þÎÿ¬<&6_ÇÊÿÓýTü«ûüVý_ÿ¯Ã"|³ê€ôýØû›úúûŒý—”¤š˜F þTüqûûoüþãÿ® ¿¹ ÛnÿúýbýYýÛýËþ=Iö½Ô"ÿÔýäü‰üßüçý{ÿP RÞ‡La'ÿý†ûßúEû¨üÃþ&F¸*‚ç²fþ‡ü€ûû­ü¥þ@àŠ£v ÿàüdûÜúZûÁüÀþîÜ.±^L¼mþKý¿üØü‡ý¦þùÿBFÜðžt<ÿ0þ‡ýeýÛýÝþ?Àäb*.þvüfû=ûüÒý„…¶ÓÊÐKÂý½û¤ú°úáûíýf½s3Û„€AÿOýüÀûlüæýÛÿÜ{dn¤0eœþ0ý_üKüéüþœÿ*}Y¥W}AØÿƒþ|ýëüðüý³þ'¤ä§Ã%à3sþþü%üüöü’þ™¤<Ò™–.ÿìüGû¡ú"û¸üÿ± Ÿp¶SÆþ˜ü5ûÙú‘û$ý:ÿW `ÿT½þ”ýý>ýþ[ÿÒ(|ByBÕÿqþWý¶ü©ü5ýLþÂÿZÏÞS¸ÿåýtü­ûÀû³ü]þglÊžzlÿaýòûoûýû‡ý¸ÿHpy”*¿ýÚûÚú÷ú$ü#þƒÅo6úÒñÿ þ´üü\üQýÄþ_ÍÊ.ñ'ýµÿ’þÅývý±ýpþ’ÿé14Àµ Í1zþùüöû§û,üzýZÿq\·:ÁWEñþÙükûöú—û.ýhÿÄÆÿ,D{7þýIüwû³ûîüßþ^Â&°±œþãüßû¿û€üýýÞÿÃK,I¤cÇÿµýÈüyüËü­ýôþb¹¾I@¢Š)¿þ‘ýÚüÅüdýŸþ?öjJ_‘óÿÖýü ûûüèýJ¯—œˆXJÐÿtý°ûÞú(ûyü€þÈÍ#…ìz–þ ý7üJü8ýÉþ£]—ĵ!ZÿºýŽü ü?ü ý‡þ1Ó)ü0»®3Šÿøý¿üüüÁü þ°ÿ]Ë©Í%ÎJþÛüü9ü<ý÷þ x š) þzü û úSûýRÿ¾Ãü'?z?þ_üƒû û­üaþa2zû¢‹÷>ÿ¿ýÂüvüàüëý]ÿòWR¸|§\ÖÿTþýVü0ü´üÔýbÿ°Ýf#z‰ÿ¥ý-ümû•û¤ü_þrjà„-êðþýóû½û‹ü5þXzè¤`ZÿæülûæútûòüÿYT›óSàïäþ+ýüÅûIüzýÿÈ?:™Os0Éÿ{þ‚ýýý²ýÊþ&…©\uâ·$uþùüüÉûiüÏý»ÿÏ£Ô!mÚ²jþxüCûûåû–ýÁÿæ‘e4 /ÿ6ýü½ûyüþ/Që×ÉùÈÿ§ýü/ûEû=üäýÞÿÐ[AeÈ‘üYÿéýêü{ü®ürý£þ`u%–‰-Ãþ’ýÚüËüsý¶þYe(+‡„ÿ†ýÿûDû‰ûÊüÇþ@Ç\ÖR¹þ üFûòú±ûZýˆÿ¿†~y|Ä·ÿËýfüÑû&üOýÿÁùr½ÿþÞü9üAüïü%þ¤ÿ+|_²d/ªÿ4þýrü„üEý•þ3Ò!ÕÃët®ÿøý²ü+üŠüÅý“ÿ—Zy§ÐÝÿšýËûÔúõú.ü@þ¼å»r—ÿ\ýÀû ûZûüaþh9|ü¬«6¡ÿAþRýýRý3þrÿÒðS%h<×ÿrþIýüqüùüþÿFÊÜDàÁ5ÿzý?üËû?ü†ý\ÿ[2cšÿñÿáýFü‚ûÄûý ÿXtç]¸ÓdþNüûú­úsû"ý^ÿ­žÕ#€=Rÿ±ý¡üFü£üœýõþb {Òœéß´ÿ¡þÖýzý¢ýQþiÿ¸ˆÊyÒÿ#þ½üñûóûÏübþ^aâ˹ޟÿqýÇûûNû£ü²þ /§%ŒÿØ”þ¬üŠûgûKüþ%?á·š˜èìÿþ§üùûüýzþ0ÑÆÏ4°Aÿþ)ýÕüýÖýùþDƒ|ýëF,Óÿ‚þzýþü4ýþ•ÿKè~«³‚þ…ü-ûÈúzû$ýuÿó|Éð»Dþ9üûàúÐû–ýËÿóžx_`Ààÿ-þüü‡üÞüëýkÿjOŽ!»<ÿëýþü™üÑüšýÔþF´ã¢ÌTPçWÿåýÖüaü¦ü—ý ÿ¸KlÙoBŒ¨þýõûÌûüFþl¡iaIÿ6ýbû}ú»ú ü*þœâˆ>ç›°Žÿªýbüîû[ü†ý$ÿ×B&YÝÓzÿþVý9ý¯ý þ×ÿ7ô6èÜwÿ þý„üšü_ý±þ`ŽsŽÎRZHþügû7ûü¦ýÄÿò¸·³ªÝ«ÿ“ýüfûÒû8ýDÿ…ÇU·–iþ¢ü™û‚û^üöýïÿÛ[+']øL¯þlý¶ü©ü=ýNþ¤ÿùÈõšÈ©sÿ[þ—ýOý˜ýjþ§ÿjmÚŽŠøÿMýìûIû”ûÉü·þü.Ø Uìÿ8ýŽûØú:ûšü£þàÖpÄHYmþíü3üeüyý(ÿÒhî®ñÿnýUüñûVüfýêþ“/¶›äºRíþÃýýÖü?ý/þwÿâ/4EàAÿ»ý ü3ü˜üÂý{ÿo9sÒ8º¤bþfü$ûáú³ûqýºÿ4LS„Jþpü˜ûÀûÖüþ„FzÞd.ŠÕþoý¡üü@ý†þ ¶ú¶É0 “ ÿ·ýÌüsü¼ü›ýèþoð)ã÷[&ÑþCý0üÕûIü|ý2ÿØhàŒ¯²þÿü÷ûÝû¹ü]þmv½o+6üþøüšû0ûÓû`ýÿ¼¤ÑB±®§þÿüüæû™üðý—ÿ6~4;›}$ÓþËý8ý:ýÍýÚþ,‰¶»Xaø]ÿÌýüçûúûÎüFþ –³ídgUþžüûûnüþ¡VæÿSý1üûûÀüUþ[c÷¿Œdˆ^ÿYýàû<ûûÃü•þ Þ{FQÖ$ŠþOý¦ü¢ü?ýTþ«ÿ$Ý ©É—Gÿþ5ýáü.ýþnÿƒ¥$ÞÓ4Jÿuýü{ûÐûýáþú]ÚUéæ·þÖü¬û{ûKüîý°yH(_Uÿzý3üÇûNü¤ý{ÿoO¨L‰·þ/ý7üöûtü›ý'ÿÕZxé/ù|öþ£ý¾ükü¾ü ýïþlÓÝS;äUÿäýãü—üýIþúÿÌ[IVwÓÁÿ«ýü2ûcû˜ü‹þÙœEÜxi ÿý²û>ûËû1ýÿ!ÔÞhc¶þbý¦ü§ü^ý¡þ)¬ã™«œÿÆýÎübü˜üfýªþ2¾ Þ~ZËÿ“ýŒü=ü·üßýzÿ7¯‘¢ßo£ÿáý‘ü üvüÄý±ÿÕ¼ö8l¸wþ%üúúÙúÉû‘ýÏÿ ÚÚâöTZoþïü ü$üîüJþçÿx±_eÐÁv)ÿþlýHý²ýþ½ÿ'øG,ìsÿþðülü ü‡ýÿþÂÚI<Œ‰ÿŸý7ü¢ûüIý)ÿ?M’ÕD7 þuü•û¹û×ü´þçöx³dtMÿYýüûxûßûýÓþ¿{¹D &Ê;Âþ™ýòüåügýYþÿËá˜ÔˆÇ¶ÿiþ¦ýhýÂý©þöÿg´¼'á$Cþ£ü¢û„ûYüýý'eGasy£Uþ&ü&û3ûCüþ=HÆcÇùÿRý@ü ü·üþïÿÇK2O¤W³ÿ›ý¯ügüÌü¿ýÿ~ÓÐO<ž–Nÿþäý2ý ýýpþ¼ÿ!YA¶”vþ$ýjü~üeýöþæÏFðžX[ ÿâüPû´ú0û­üÛþIvóqÜZC ÿýãû–û8ü›ýhÿ>¹‘¢òµ4Âþ¤ýý+ýÝýÿþTž¢11¢¦dÿïý&ýãü4ýþNÿÀ%;Ä ÏqÄÿþ¾ü ü'üý¡þŒiØ€<P<ÿUýüû6ü±ý½ÿëÂÛðþ9Ëý ü"û=ûVü'þPdûÆ©¶(Z¦þZý²ü¿ütýšþîÿ.wâóÝÿÒþþ¥ýÂý[þXÿŽÊÓp|éËK¨þ,ý,üàûbü¡ýlÿoI• ‰+1ûþüü£û8ûÓûMýVÿ€Qf€¢ýóÿöývüÎûüQý"ÿ+ÿ7”®ÞñþMý>üûû‰ü¾ýYÿte²Vm+Ëÿþ£ý8ýZýøýöþF0±«!ÝÿþuýÔüÖüƒýÉþq,£~‹º,& þGü@û1û üÝýO õÞËÿ¦ýüZû©ûáü¶þ×Í(TŸàþwý®ü°üvýËþcé •fB¾ÿKþ-ý—ü¡üGýhþÐÿGŽn¾r™SÔÿZþ)ý€ü|ü!ýVþæÿ…ß©·©íÿ+þÇüüAüHýüþðVßk ÇþÂüiû û²ûAý_ÿ‚«Ü‹•žþý5ü:ü ýsþ©ÍJ0ë€ÿ?þbýýoýPþ‹ÿé'{IŠ[éÿrþ1ýcü1ü©ü½ýEÿ¬ì…YgÚöÿþ£üãûýûîüƒþi:†¡h ®þýÿûéûÄüdþp}×£}«‹ÿ’ý(ü—ûúû2ýúþî©Õ5¿˜RÿÚýáü“üöüéý<ÿ¦êË!ã$Ãÿˆþ•ýý,ýÎýâþC³ì¯ÏAzµþ$ýüËûVü¥ý|ÿ„S„Ù;ÌϲþæüÍû¢ûiüõýíÿãcáË2ÿýeü*ü×üCþh]xì 6þÃüúûüÐü3þâÿ‘òÈôrgƒÿ(þ)ý·üÖü…ý¡þúÿYz&AÃÀgøþÁýýôü‘ýÊþc `üu{ÿ‹ý ü\û ûÏü±þèúz®atSÿpý3üßûzüÜý®ÿˆÊ²ÌKˆÿãý¶üCü ü³ýEÿ›¾6ðœþÿnþ/ýxüdüïüÿýfÿéKKÁšÜ¥(¨þrý¿ü·üWý‡þ݆s¤@ŽÿîýÃüUü¾üôý·ÿ«^o™Ð:(þOübûtûüMþ|œ6ùÁ¡ÞÑÿíýüúûFüRýÞþ— 29Eïyÿ+þCýíü3ýþ4ÿ’âæuqàØÿÌýòü«üýûýcÿÿ~‘¯©Iÿœýpüüpü ýYÿ<ßâ Tâ)þ»üü^ü‰ýWÿhDƒÙ3³¦wþ˜ükû,ûâûcý]ÿn4T¤ïVžÿþý¯üìü´ýÙþ#V6¢ŠûõÿÝþþýœý0þ2ÿ|Ñ爆ÜýÿKþáü üüÄü>þ$«Šƒ–ïâÿäý`ü®ûôûýèþöÓ dÆ[rsþÏüäûåûÍühþ_MɈgsã >þÕüüüÈüþ•ÿ){U™EvIüÿÂþÙýdýrýýýïþF2¬í•ÿAþ=ýÉüýìýbÿÁïbùÀîÞþþü»û\ûùûwý‰ÿıáI¤Kþ€ü~ûrûUüðýëÿÙS æúÍÿ:þý§üðüÙý/ÿ«úYS'Ïÿ„þ‚ý÷üûü…ýƒþÎÿ-c7ƒ8^™ÿ/þ!ý£üÑü¨ýÿþ”{ÿc þý4ü üòüƒþ‰–7 à¾ØÿZý°ûêú1ûiüYþ—®2ØŠg­¾ÿüýÀüDüüýÞþ_³”à“ʲ…ÿþÖý©ýûý¼þÉÿö Ðå,£ÿ=þýpüjü ýFþæÿ¡G¯d›¶þýü÷û²ü)þþ~>@1ÿFýñû|ûÿûeýaÿŠmžä7¼ǺþýúûÍûtüÈýyÿ8¤} ¨EÿþiýAý¢ýqþ‡ÿ®°ZLš—pÿ]þ˜ýIý„ýFþvÿá>C·zŒ >ÿý*üûÐûïü»þàìs#ײvÿeýîû\ûÅûýðþýÃÝgÿ0_þöüDühüVý×þ˜:eÞ”1—ÿ!þý§üßü¬ýåþN§´BD¼Â-ÿþ;ýôü8ýÿý*ÿ…Ç´ß ¿<ÿÔýØü…üöüþÍÿ¯Zo¯€p8þRü&ûíú¹ûaý’ÿ×¶Ðò‰‡Šþý3üFü$ý•þBÊÖ-ÉÉiôþ¿ý ýüü“ý©þx©b„Óhÿþ$ý¯üÌüxý™þu¯v¥2%¬ ÿ—ý™üDü®üËýhÿ1ÃÊ w$TnþÝüýûüûäü†þŒ‡°g8_@ÿNý÷ûzûñû:ýÿÎí:²}Þ,ÿÊýöüÖüdýuþÑÿ/CÙÙLTÜþÛýBý/ý£ýŠþÃÿO+ƒEv/¢ÿþãü:üBüýiþ2 u‹ÆDQSþ²üÅûºû“ü&þýf Ê· *ÿ…ýüOüüüdþ8‚8y“ÿÇýsüÞûüý¦þlVóÙäoÿÝý3ýý…ýdþŒÿÃÍz®_—v/ÿþ4ýéü8ý#þ†ÿ$ªÉEýóO^ÿ‡ý-ü’ûÝûýÎþãÌ&§<öÿXý@üüªü þØÿ¦±… Kÿ¸ý¯ühüïü&þÍÿ ù'–dÎÿ¢ý£üFü’ütýÁþE¸Ù| ÁYÿþ@ýìü/ýþBÿ²û\%» ÿ¬ý´üjüêü'þßÿºMAbž$'þ”üÁûÚûÚüþ›ŽøŽ9 JOÿýfüüüÈýsÿ6¬Œ«åeâþ«ýÿüøü‘ý¨þ t¡X"Õdÿ þ ýŽü¦üXýŒþ¥üܪ” ^ÿàýÛüƒüíüþ“ÿ;œm}Åf°ÿþÐüWü·üçý¬ÿ£]w°ýzxaþ«ü¬û™ûrüþ ¥†ŽÆ\œßþý¾ü­üDý`þÁÿ#;Üíy”l9ÿ7þ—ýrýÑý©þÕÿ(_>Ÿg–K¹ÿ2þýüXüiü6ý þa;,LÉóÿ4þìü]üªüÀýiÿ<ÐÆé.¸×ÿøý‰üÜûü1ýôþîP߇^¡¦ÿØýŽüüGü@ý»þlþ&´œìÄcÿïýIý&ý‰ý`þƒÿ¼ÏØžéÓ—ÿuþ§ýZý¤ý„þÓÿN¡†ÇJp¡þ ýüÞûŒüþöÿÿ®©½äG=<þ¬üãûüý°þ¤r±%½“åÿ„ý‹üZüìü&þÅÿwá½êhUäZÿþý¿üþüÄýòþQ¥±OeóÉtÿIþ|ý.ýyýLþƒÿÚ Ô ™(¬þzýÒüçüÀý<ÿѬR3ÿý™ûûŒûîüöþ8<™˜Inqÿ»ý¤üXüÙüþ”ÿ*r'2–{Âþ¶ý)ý/ýÄýÈþ`u$Rù(ü¬ÿuþŒýý1ýÜýûþ^À߀‚Û¢…þFý™ü¦üuýßþ–=sö¢Íãþ3ýüàûü þ(àÝì_B+þ‚üœûûüþüÿÚJ OxùþÑý5ý2ýÀýºþíÿûvy5,ÿEþÅý´ý!þûþ![n$Wòû– ÿ¡ý¥üLü´üÖýÿ\ 6!Ôõçþýïûœû8ü¥ý“ÿ”9(6bØòÿ þÈü4ü}ü”ý@ÿËç>Ƙñ(ÿ™ý‘ü9ü”üýôþ}ßÛQ7˜•`;ÿTþÑýÁý*þóþûÿâdoûÜÿþ“ýüüüü¤ýâþ'‡QU„ùþý\üoûjûXü þ0OúßÒÔþ«üü<üHýçþµJQ™ójÖþ”ýäüæü‘ýÆþA´ÔjgË·]ÿàý,ýÿüZý5þdÿ´çË=&„r!Ðþ¾ýýýªýÊþ<°Ýs¨B‡ÿÙýüøû6üMý ÿôNÛu.G(ÿCýÿû™û#üƒýlÿp",aº_ŸÜþxý¯ü£üJý|þñÿT\Ù¼Íÿ­þäý“ýÅýtþ€ÿ¹ãÅ9)“…/Åþ‹ý·üoüÊüÅý8ÿát¦>/®áÿ'þÎü%üLüBýÕþ§W†÷ˆR–½þ-ýBü,ü÷ü}þhK¾rHC›©ÿÛýŒüýûCüIýØþ—+E¶u”HÖÿþ¬ýPý‚ý5þAÿm|>hÉЪÿþ·ýGýXýóý ÿjÕÅæTt¨þýúû¡û ühý9ÿ7ü3™ÎþÿsýsüGüøü]þ Õ¯ncËÿwýxü>üÒüþÍÿþÓéAýbÆþ|ý¾ü§ü6ýPþ»ÿ.e+f7¯ÿtþ‰ýý ý¸ý¾þKWú†x©þwý¿ü³ü`ý«þUc'=¯Âÿáýjü®ûØûãüœþ¢ƒâw$þE_ÿ·ý¢üVüÛüþ±ÿT›F7q!”ÿ#þý´üúüáý<ÿÅ.4§~¼ƒ þyýÂüœü ýþýRÿÈ#¦Ú¥)©þoý°ü—ü0ý[þÛÿ]—C:u…ÿþðüŠü÷ü$þÖÿ­A;b£((þ‰üŸû™ûwüþåY%°ûÿiþIýÍüýåý5ÿ¨ðÊÀâ¨Mÿþ@ýèüýÚýÿþZ­¾d¦,ÿÖýÜütü¸ü ýÿ¡)QÝ©»F–ÿþäürüÎüæýxÿ+œ|—ßy»ÿþÀü0üyü•ýJÿ7ïoé˜ÆÓþ)ýüÑû^ü¡ýVÿ¥£ô.±ÿcþ|ýýHýüý ÿDd=¯¡#ùÿÐþÜýJý<ýÀýÂþw¥gŠüÕI«þKýqüVüýgþ,øm@;[Ïíÿþ¾üüPüZýøþÇco¸)ä0uþý[ülüFýÃþ‘KœC&Mß&yþ#ý]ü>üÉüáýMÿÈýe?‘‚FÿþŠýxýìýÎþìÿ‘õªÿbþcýìüýþpÿ©Ì>ݯòÿþ=ý ü§û0üýsÿy5K…×d†ŸþýBü<ü ýzþ4Ù£s’1Ÿÿ3þ3ýÉü ýäý.ÿ¡øöva¿ªYÿêý.ýòüDýþDÿ“ο7nRþÿµþ¶ý;ýeý/þoÿã7$pûÛHšþ+ýQü>üýˆþmQЗxr¹­ÿ¼ýIüŸûàûýÃþÅðƒ?6§çÿUþ7ý¹üìü»ýöþO†^»ŒãåËÿÉþþÀýçý…þ{ÿ›±ÿng¿þ˜ýØü³ü8ýVþ×ÿtàÒŒWµúþ‚ý˜üvü&ý„þ>óB䪟ùÿeý=üâûlüÇý§ÿ¦Yo±®Û÷þ`ý`ü ü§üÓý_ÿúU8‚-Q"áÿÆþþ­ýÔýlþQÿM9ä2}–ŒÿþÓýý·ýyþ¨ÿ em鳯J…ÿÌýuüÊûøûûü¢þ–uÞ…D'o|ÿ·ý}üü‡üÈý…ÿ\åÐí5ÑbþýbüyüLý®þRÛ”|¾ˆÄþ»ý+ý)ý³ý«þÝÿ´áʽ”ÿ†þÀýgý—ýIþYÿ“½›û½åŸ(ÿÒýßüüý,þÑÿ›3:wÑ]k]þœü„ûQûü¡ý§ÿ¹mo’ÐYŠÃþ_ý¢üªüqýÀþA¡™ù³×œMÿ.þvýDý¤ý‚þ±ÿñÃÆî®ÿ}þý ý ýžý¨þùÿ[“f¦@BÝSÿèýéüŽüîüøýsÿ{cî ìÿ2þÏüü2ü.ý×þб»rI‚}ÿ¡ýOü¿ûü+ýËþ•*A¨S` ÿpþ¯ý|ýÜý¶þÑÿðÕZfôîþþlýIýªýƒþ¬ÿö([™_àÿ`þ"ýhü_üý`þ Æ9)k6eþìüü$üý†þS O؇pÓÿ‰ýü]üýUþ Ä$åßµnþ1ý‹ü˜üRýŒþg}Ž”a2ÿ:þ ý‚ýäý±þÁÿÞÛ†¿s©ˆBÿþ2ý×üýþ[ÿég„¸°Dÿ†ý>ü°ûü.ýîþ縂æ-Pÿ¯ý¡ü]üëü&þ¹ÿL„"*ÖTÿúýýÐüAýQþÅÿL˜n¥3-ÈJÿõýý”ü¿ü{ý¡þúÿPjMëá–ÿfþ‰ý-ýgý-þVÿ¬éÌÂÈ`Òþký}üCüÖüþÐÿ¢2(M’CaþÚüþûüàügþ:ûOë¹ÁC›ÿþýÃü&ý)þ‹ÿ÷&Øë]Löÿ¦þ˜ýýøü†ýþâÿ>j6~4a+ÇÿlþRý­üŸü,ý=þ¢ÿpSš1-Ã3ÿÏýÞüœüý3þ³ÿIœbe¤HŸÿþÑüPü ü¹ýXÿ&¾Í.mþý4üüÏü-þãÿ—ôºÆÞ\ãþ´ýýñüvýsþ¬ÿã䀠:gT4ÿ6þ‰ýQý¡ýmþ‘ÿÝvF|4©ÿþÛü)ü/üóüLþýÿ´ÛÙ°gþ0ý¨üëüèýaÿýb@[ªWªÿþÆü.üfüjýýþÍw«+ÛÍ;zÿáýµü-ü]ü:ýþ‰¬NZÔÛ¥jÿWþžýaý£ýWþUÿqv3|>…s9ÿþ>ýóüJý:þ“ÿ††ÛlM³ïþZýIüýûŠüÑý‰ÿYãÑì1Îbþýrü¢ü—ýÿÄHP¢*nÆþ]ýxüEüÎüôýwÿ dJ•;Q §ÿaþmýóü ýªý°þíÿ/?ï½å»tÿFþoýý^ý(þPÿŸÎœÔef¤þvýÏüâü´ýÿÊp®:êÊ"ÿUý üûýû=ýÿù¶åGÏœ÷>ÿÄýÒü˜üý0þšÿ4åüwy<ÿþûý]ýDý¶ý™þÀÿõ Ê×Âÿƒþ‚ýóü÷üŽýŸþùÿb—TqæÑeíþ´ýýýºýöþxìûbì\¨þ.ýCü&üæü_þA,½¡£À,9Kþ¾üÛûÐû–üúý¯ÿ\µ€—ô§_ÿTþºý§ýþîþõÿüÕSaø00!ÿ5þ˜ýpýÉý•þ±ÿòòFþ$àgÿþý›üïüíýlÿ©¾§|× ÿyýxüCüçü;þñÿ°Ö¿ÚY–ÿéý±ü-ü~üý%ÿ硼½P»ÿKþAýÌüúü¼ýÞþ)dYßßeŽ„sÿþûýÙý-þàþÒÿÙ¾Tr:åþØý3ý'ýÁýãþ^ë8ùø/Áòÿþ üÍûÜûÆüaþWHÍ—yƒí GþòüWü‘ü‡ýúþ”õ;ËÄiÿáý6ý,ýÂýÕþ({“:TÝð¼uÿPþ}ý"ýMýñýòþL@ÐÞjŠg5ÿ2þ™ýŽýþÿa´ÃJ$P÷XÿÇýšüütüý@ÿ)ð4ª8õ()ÿ`ý&üÁû@üý9ÿ¦­òpQÛ[ÿþeýOý×ýÔþ0‡pØæÎÿÄþöý‘ý¨ý9þ%ÿCeZó©Í¡Sÿþ8ýØüýäý#ÿŸ0ºº_Àÿ.þý€üÃüÂýCÿùšç`$r§þ ý9ü$üåüOþÞGí îÿPþý‡ü·üýäþdËÓL%r\#üþþ±ýÁýGþÿ Ä#¸µÿ¯þÝýiýwý þÿ^¿ð¯Í<{½þ.ý#üÔûTü‹ýAÿ"ÑðDÀ…× ÿ‰ýŸü‚ü.ýyþ¨×^*À*ÿÄýØü ü&ýHþÉÿV¤p’î‰ÿäýýèüLý,þVÿ—¸†ß´"ñþþœý¡ý!þÿ!H;ÄÁ+Äÿ\þ6ý–ü¤üfý½þm$‰J;^Ùûÿþ£üÞûôûÜüaþ2ï;Ì—'‹ÿþ2ýùü{ýþõÿ^~ÿH¸ÿhþmýøü"ýßýÿT–‘ wx=üþäý-ýúüQý&þQÿªóòs]µ–/¾þýäüÝü{ý þ‰³D#RúeÿäýÕüxüäüþ¡ÿcïêu!fšþýDü8ü÷üPþûÿžè”Ǿþ¿ýOý~ý9þRÿˆ¢f¬h©pÿ[þý5ýaý þÿQ–¥Lk÷³:ÿßýáüxüºü˜ý÷þ’ LÛ±ØyÚÿSþ:ýÉüý þrÿûIm*šÿþðü{üÍüàýoÿ1Éà:ÅžIÿÂý¸ü`üÄüÄý%ÿ óÙ+âýÆÿªþâýýÁýdþXÿs‚S»¥%øÿÁþ»ýýýý’þëÿ^£qŸ †äþ}ý™üoüý;þØÿˆì¶»® vþEý¿üýñý^ÿòX;dÏŸ…þCý–ü¨üný¿þTâ¿´ÿÊSÛþ¡ýáü¹ü%ýþGÿ›Ð³ÿkvMÿ,þœýŒýúý×þùÿ(#´¹.+Ýÿ‹þ€ýûü ýçý2ÿÂB[ÊukÝÿýküüœüÖýˆÿ[ïë„E¦ÿþ§ýçüäü“ýÇþ8›ŸÕÉiÿ$þ<ýâü$ýóý#ÿ„ÓÝnpéó³^ÿ+þPýõü#ýÒýåþ/twww3ñþõýyý•ýEþgÿ¿þÖŸ’þ;ý{ü}üCý¬þq6›O*9«Ðÿþ®üüFü=ý¾þ|JÎ’²céÿþ–ý/ýeýþ1ÿfKŸpÑàÊÿ¾þðýŠýžý(þÿ3bd"»ØžBÿþ3ýîüFý/þ‚ÿýO-j÷í{ñþ©ýíüêüŸýçþ@¿vsê-ÿ—ýˆü:ü¾üôýžÿeîåƒJ¯ÿþý¥ümüäüêýMÿÃòKc_8$ÿUþíýøýiþ*ÿ¸Œ¼¹ÿµþêýŠý®ýVþmÿ ¡v¥K¥ÿþÃü)üUü@ýÀþE‹×ØOÿûýëüüý8þÄÿc¼~Å{æÿWþ#ý‰ü¨üoý³þ6®ÒlfÌÀx+ÿþoýHý ýbþmÿ˜T¦‡þ ÿLþìýþŠþqÿ‰•V›SIåþ¡ýÌüšüýFþâÿ¨42hÍy­ÀþýüéûŽüåý¨ÿyôÌÝ)àIºþ…ýðü ýÊýûþ]¨“ñµöà¨ÿŒþÄýzý±ýZþVÿu…R·¢<$ÿþzý^ýÁý˜þ¿ÿ-õ9ç Ëaÿþ<ýøü\ýYþÀÿESc¼wÕÿ1þçüHürüfýóþÊÜj!u›ÿâý¦ü!üeüZýÅþ`ØßHJ.ñÿÙþþâý"þÊþ³ÿ¯ˆ-Þ6NRÿnþÖý¤ýèý—þ˜ÿÆêÉ4gDÖÿcþ3ý‡üü(ýfþ¯àöNb¸þiý¹üÊü–ýñþ zývÊþ^ýü_üýAþÞÿ‡å®Á&Žÿäý/ýýýxþ¢ÿÒÍd€(tƒ†ÿ­þ%þþMþõþÛÿÝÃ]‰>€k)ÿþý'ýÔüý÷ýKÿÜXp뫹9tÿÌý”üü[üdýüþÏ{£¬™ VÿßýõüÂüGýcþÑÿEdîÐå‡ÿBþdýýlýIþ‚ÿÜç2ì) ÌÿšþµýBýPý×ý¾þâÿ²Ý‹Ê´}ÿbþœýQý’ýUþÿ׿.Òß~óþšý½ü‹üýJþíÿ©ùZü7kþùü.ü.üóüRþªìŠp°v ¼þØý…ýÏýšþ´ÿãßqyüõÿÎþÞýTýOýÊý¯þÛÿ? X"oV«þ’ýçüÆü8ý1þ…ÿø@ m.ÛdÿþHýýŒýþ ‹¿aO‹6•ÿþäünü»ü¼ýAÿ÷‡ÕaH ÿ¾ýåü¼üDýZþÅÿ:j-­¹…MÿSþÆý½ý.þÿ û{ˆWG#ÿþoý1ýxý;þaÿ½ ˜…Ù§&¡þfý²ü¨üPýŒþ¶ö£™Ýüÿ}þiýöü:ý(þˆÿ]'>¦yüÿþ^ýÖüýÞý5ÿÃ:F±mŒ:¹ÿQþLý×üþü´ýÓþ)u|%»èѨÿ¨þ÷ý¶ýçýˆþyÿEŽZª—\ÿ7þhýýpýVþ°ÿ9¡™ð÷?ÿ¶ý¯üYüÆüãýqÿ„^‚íÃGÏþ¶ý5ýfý8þ~ÿò>HÑÌiòþµýñüÏüMýQþ«ÿ^4|3i?êÿ§þ¬ý"ýý’ýzþ©ÿëÄÙ&âÿÇþýý©ýáýþ¹ÿõ »àga•þnýÎüÝüžýóþ˜4kýËßc§ÿ þçüwüÊüÍýNÿõl^£3,ÆLÿþVý9ýºý¶þÿÿLYðþ‚šn7ÿ0þŠý_ý¯ýoþ~ÿ±Ê›ÿéW\$êþéýOý:ý³ý«þøÿU|7_êé’.ÿ þjýcýþ!ÿƒÖýÂSÅþsý«üœüKýžþRt96rXŸþCýüyü ýQþÑÿO€1EÐã¶‚ÿŠþòýÕý(þÛþÏÿШ1Vhypÿƒþàý§ýäýœþ¯ÿïòQRœÿ;þ1ý¼üñüÍý+ÿÀ2:žLRäUÿþ3ýý«ýÚþ_á‹UmÿWÿÏý¾üYü±üµý2ÿÞeyë°Ü–¿þ¸ý/ý3ýºý¦þÊÿìÖc„9¦°ÿÜþQþ'þgþ ÿõÿ÷Öh‹2b?ÿ÷ýNý0ý¯ý»þ$ŸÚ”¡ö° `þ ýWübü2ý¡þcf è òÿhþPýÞü"ý þ`ÿÚ î#´ÀuÿüýNý.ýšý€þ¯ÿò¿Ãñÿßþ þœý ýþïþ˜º`“€ZÿcþËý²ý%þÿMˆ~úÜØXÿëýçüƒüÜüêýÿHâùUß­÷ÿyýcü üü¦ý=ÿñgW ;Gû¢ÿ†þÛýºýþéþñÿøÂ*©ÜÝÿäþ!þ¸ý»ý+þúþ *$Ð ÐÀÿþ¡ý(ý:ýßýùþOŸ¡$N¥ÿKþUý÷üGýCþ°ÿG¥‚­Ü7†þ$ý\üTüýjþÍÏÇ Â1¯þ‡ýîüõü”ý§þðÿ.š™ NOYÿŸþ>þBþ¨þ]ÿ<Â¥ÜÛÿÒþùýxýiýßýËþ `‡J{ ÿŠóþŒýüVüËüîýƒÿ7® ÜS"Šæþ‘ýÏüÄütýµþA¹ÐI6åiÿþ9ýôüTýBþÿðÜ ªÌŸ_ÿGþýOý‹ý9þ7ÿV`'‰NPVÿŠþþÿýaþ)ÿ+3|qÝÒ‚ÿ1þ'ýžü¸üýØþƒ)v(DÏDþæü.ü<üývþ#¹ál@k"²ÿpþ ýfýÉý¯þãÿ‚íð½ÿ•þ¼ýTýoýþÿ1YGÐày§`ÿRþ”ýBýjý þÿFs`åæ\Z×þÕýFýNýòýÿxÎÐB $¿&ÿ°ý®üUü½üØýlÿ&¨¤ênH¸ÿ¹ýæü¾üHý_þÆÿ(<ÍÆ/*õÿÒþþ«ýÕýwþmÿ‡„5|N³Űÿªþäýý‹ý þòþCBç´Ñ’,ÿåýöüüÊü§ýýþˆÿ¡w£RÌÿeþfýýQýBþšÿ9ëõQ ¤ÿ7þ)ýµüóüØý;ÿÏ94;Hîoÿþ<ýêü3ýþ/ÿxšd³ˆèøèÿòþ@þíýþŒþbÿ_S n_ÚòÍÿ¤þ­ýý ýŽý˜þöÿh¦u©,ôþý¨üjüìüþ–ÿ+~HfЪ;ÛþÕý^ý’ýaþžÿø!ÒæW<ÒÿjþOý½üËüzý©þ°Ugåê¦Zÿ@þ†ýEý†ý;þ@ÿeq9  *ÿ'þ£ý›ýþüþ$PGÕÙF6âÿþýóü ýÈý ÿ‘”Ynfÿñýðü–ü÷üþyÿ _1]ÚÇbÿìý\ýiýþ&ÿs¨„Þ§ê̇ÿ]þ‰ý,ýUýýý ÿG~w 'ÁçÁ‚ÿ`þ‰ý ý<ýßýèþ%_]ñùrt<ÿþý£ýMþgÿ¯Û­ï”;Îþýïüéüšýßþv:Ò±×l¿ÿ-þýtüŸüwýÍþYÅÏJ)w[üþ/þØýþžþÿ›6{L²¬ÿ£þÔýaýbýáýÉþöÿ3FHþ+ú¥ÿiþ‚ý ýZý(þ^ÿ¸óʶÆ'ÿ þlýmýþFÿ´ ` œÿ ý¹ü}üúüþ¬ÿO²’ÊRBÕWÿþ:ýöüHý þMÿ‘°yÓ±82>ÿþþþˆþHÿ0Ò<<ÆóçÿØþüýý‚ýþÿd³ÀVP§týÿ‹þiýÓüðü¼ýÿ›DPé^ÿþ%ýïükýþóÿk™BD v¦þ•ý ýýÃýäþ>Ž”)3³Â‘XÿKþ•ýMý‚ý(þÿ2: ˆ[hvÿ­þ>þ?þµþˆÿŠ6~<qFùþÐýýÕüQýjþïÿŒò× w7Ôþ_ýwüKüäüþ¶ÿP›Zj̨@êþéýjý†ý2þGÿ„£nÀÞ×®ÿ¡þÛý}ý—ý%þ ÿ!/ ‘«OŠtÿ{þÉý‚ý¸ýgþjÿ¢kÂŒÔÀ‹ÿuþºý‡ýñýæþ.‚˜4'h„ÿùýÉü7üdüRýÐþŽ2kÿÎåxÕÿUþ=ý¿üðüÀýýþ^}Þ®ýáÿåþ6þíýþ§þ|ÿg:Í ã\‘¦ÿËþ%þÕýðý{þaÿs„bÞØG>ôÿ¡þ†ýÝüÏühýþ}¸p|Ôž§þ‚ýñüýçý6ÿ¶ÿKßÑ[Óþ†ý»ü˜ü*ýQþÏÿS‘Txýû­[ÿ?þ‰ýRý ý]þ^ÿhOì)ýp«Ôÿÿ‹þUþ‚þ ÿÓÿµ‚I [Y5ÿ%þ^ýý[ý7þÿöW[ɉfÿÖý¯ü/ürünýçþ’%<Dçsÿ:þyýWýßýéþ6ymàºÝŽÿ]þý!ýRýþÿOoGµ§$G<7ÿbþáýÆýþÓþÁÿ½œ5l*{ÿ…þÕý–ýãý«þËÿ (걯MÐþ„ý®ü‚üýAþÓÿwÙ¯Î(äH¨þYý™ü‘üAý|þûÿk‰ aLòþ'þØýþ¼þ´ÿº•2Óÿ9þ°ýýäý þ£ÿ¾Â„æÍ<HëþèýCý ýýuþ®ÿÿ+ö4Ðä›;ÿþCýýý¬þ l‹$N ÿ%þý³üýøýdÿõZMž;9Ö^ÿþ@ýýüXý8þeÿœ£Jw$n}ÿÉþUþFþ£þTÿ5Ï=Hæ$" ÿþeý ýaý!þBÿ”ßèzrʤ2ºþ‚ýÆü¶üOýuþçÿ\‡-$sDÞÿŒþ˜ý9ýˆýnþ¸ÿCø y^þÿ¢þ“ý ý ýÕýÿ^¦›î?)æÿ¹þÕý]ýkýòýÝþõÿèr9…–›ÿ¼þ$þïý/þÔþÃÿÎÂr³l¨ŠDÿþ3ýÛü$ýþUÿÑ44™KXõkÿþýÃü*ý0þ”ÿN/£‘>öþûý‚ý§ý^þ{ÿ·Ñˆ¼[yH ÿþ]ý<ý§ýŽþ¼ÿûÕ!ç5+öÿÏþÞýLý5ýžýpþˆÿµÈŽà±  éÿ×þþ¾ýøý°þ½ÿèò›¹:7çÿþqýÓüáüýâþjî°½kàÿoþ_ýçü ýùý:ÿ™Ñ à‚¤yEÿJþ´ý£ýþÿ#?#¦®6YB"ÿ.þˆýTý›ýTþ^ÿ‰¦‡þv‡UÿþJýý~ý\þˆÿÐð­Þx—i1ÿ1þ§ý·ý[þsÿ¼îÇ ©¯OÛþ›ýÕü¹üMýzþøÿ}»r}Ù¯<Òþ°ýý ýý©þîÿ,*¾ÍZ‚uhÿ‡þûýÝý/þàþÇÿ¼–,a$ƒ›”ÿ›þàý‹ý·ý[þ]ÿ޵š á- °ÿ`þ`ýçüýàýÿ‡ÛÑ1æÈoÿGþ•ý‚ýþ$ÿw½±Úö¥-ÿ×ýéü’üéüÜý7ÿ¶ ~O“r'ëþôýiý^ýÑý£þ¨ÿ´œ6j0šÆÛÿÿiþ.þ_þòþÇÿ¸”*S;,ÿÿý\ýBýÂýÇþˆ¼u‰ë¾@ºþ{ýÆüÅüwý¯þ-ž¸AR¹ÿ|þ¡ýZý¸ýŸþÞÿ*Eó™¥h#ÿþZý'ý~ýKþbÿ¥rØÄ?fc\ÿ€þóýÖý&þÔþ¾ÿ¼ž3^]ibÿ}þñýäý\þ@ÿfŒzíÉá|ÿ,þ6ý×ü*ý#þŽÿ!†ÒaHÃ#ÿ·ýÃü~üíüøý^ÿØï/ÏóÒ§ÿ­þþòýNþ ÿÿÿó¹.:Ù!9HÿwþíýÆý þ³þÿ£œX¯Žú ëÿËþæýkýzýþ ÿF~sïÒ& ÃÿŠþªý\ý±ýšþàÿBs+<›kêÿgþ/ý‡ü•üXý¦þ9Åü¥ží¿TñþÔý1ý"ýŸý†þ¡ÿº¡+FöT‡¹ÿ ÿ¨þþìþÿ=þ úöŽÑßÿáþþuý]ýÉý¦þÑÿEPò ½Oÿþ"ýáüLýJþ©ÿ!f-K»ž3Åþ¡ý ýýØýÿ{ÒÎ7õà€ÿEþhýýeý8þ`ÿ¡À‰Ù õÿìÿíþ.þÏýàýWþÿýÿ⛹Ciÿ°þDþ?þ¥þcÿYW)œŒøöµÿoþgýÜüòü¬ýéþmð#Īߊíÿ[þ"ýˆü©üyýÅþJºÉ? @Éÿ£þÝý¤ýûýÊþÚÿñÕVZá ÿ;þÊýÏýFþÿï{œM›©˜ÿ›þ×ýzýýþûþ+•%H/ÿ,þ¹ýÕýyþˆÿËÝ+Òß~÷þ‘ýŸüWüÈüßýaÿwmµG?ÜbÿþPý ýŒývþ¤ÿÕÍYbì$5ÿ„þ1þNþÓþœÿSì,v£­ÿ¼þüýý”ý þÝþìÿÇ·òцÿKþbýúü)ýéýÿvƽ'íë‡ÿGþrý6ý¢ý›þêÿKl  `7Îÿmþ_ýàü ýÏýÿe²¢ ×Íÿ²þêý›ýÏýuþbÿgVÿDÁÚÿÿ]þþ,þ¦þiÿP8ôWMÒüìÿÑþâýRýHýËýÄþmœZ}ùèxîþ˜ý¼ü‹üýþ~ÿú5ò ‚?ÿþ·ýíýªþÁÿñö–¦$-ôÿ»þÀý4ý:ýÌýÉþ75Ïå|ª›~ÿ‚þÒýŽý¾ýTþ3ÿ3.ñYVè&04ÿdþðýðýgþ@ÿUpUκ¸ÿfþ_ýÚüþü¿ýüþ{ë…U„=Áÿ^þcýÿüDýþTÿ¦ÍвHgL0ÿTþéý þ©þ¢ÿ¼Ä}ÁÈÀ•ÿþ«ýCýYýçýÑþíÿ ­ß˜éîÏÿ¾þîýˆýŸý-þÿ>bKǽ3< ßþõýˆý«ýWþjÿ©ÒÛ}”SüþÙý.ý%ýÀýÞþC©ÄR;Réÿ’þýý:ýïýÿJuP°‡æöëÿõþFþþ0þÃþœÿsd>³Ú×ÿÓþýýýwýäý¶þÐÿ×Öñ¢ÿiþ„ý#ýXýþ7ÿ†µ†Î}­ˆOÿJþ¹ý¾ýUþ\ÿ™È ê“­hÿÏýýàü_ýjþÊÿ<yApÍvÿHþ|ý.ýkýþÿ*-íH6à ,SÿªþTþbþÍþ„ÿhOj\ÞæÿÃþÒýBý:ý¼ý³þõÿE]ƒ~-ÙþÌý?ýRýÿýÿp²˜í¡Ê•Hÿ(þzýeýëýïþ7€… öM3ãÿþœýý%ý¼ý½þóÿ++Ç⃿»¢ÿ¤þîýžý¿ýCþÿÏ@Ië8PbÿŸþ7þ<þ¯þ}ÿ}w1{AŠt5ÿþJýýzýnþÄÿ7|Jtñàsöþ¶ýûüèü}ý—þúÿa} rh(õþ þ ýÀý]þSÿjp-}R¹ÔÍÿÑþþ³ýÆýDþÿ#šÄ~ÒÜÄÿ¼þ÷ý™ý°ý;þÿ09\;¥»¬ÿ·þþýýiþHÿq£—ê)òxÿþÿü‡üÃü¥ýÿ›5°{¦aêÿŽþý ýJýùý ÿ:VuOÀêùÿÿþBþiþêþ§ÿ€Lá!‰ÊáÿûþBþÜýàýNþÿ0¦ºNrKÿþeýPýÉý¼þýÿGSãÝ@.Þÿžþ´ýWýŸýyþ»ÿ#a/]áØuüþºýòüÉüCýBþÿîÔ¦ÙÆ¢ÿ¥þýýÈýþžþuÿf@ÚäUÿÃþþ•þÿþ®ÿLàï[ufÿdþ«ýfýªýpþžÿú@-ˆ?[{ÿþ ý¨üòüÙý/ÿ¯î9ßû¾nÿXþ¶ý«ý1þ$ÿS{ZÀšòðÂÿ§þÓýrý‘ý'þÿ%4 …“6…Ÿ­ÿÙþIþþFþËþÿrBÖîg›¬ÿÏþ:þ þUþ ÿ54Ôëqu"ºþˆýÒüÀüYýƒþ™ç­Ã*…ÿÄýýüü†ýŒþÑÿ „wë ÿhþ1þnþ ÿìÿÞ°6T d„Žÿ¯þþÓýûý‚þQÿG<þlp GF7ÿMþºýšýöýÂþÜÿ »àx”_ÿ þkýcýðýÿþS¨¯. Gÿ@þEýáü%ýþIÿ¹é:êæ˜ÿtþ°ýpýµýhþaÿnVîàSŽ¿ÿ ÿ¥þ”þÚþkÿ)ô  Å65ÿGþžý\ý‘ý;þDÿ€¹«*€l±þ˜ýúüøüý«þ jzõM3ãÿªþÏý€ýÈý˜þ¿ÿü¢©"åÿ©þ´ý9ýRýñýúþ2eRÌÂ?_PCÿjþíýÛý2þØþ°ÿ“OÅá£S~ÿÄþNþ2þ|þÿ õŽ»hœv(ÿöýýÍüýðý9ÿ± h'M’ÿEþcýýkýIþƒÿÒ鎠&9óþþÁýîý˜þ•ÿ³³Z…/ohOÿ[þ¾ý“ýäýšþ“ÿ§¢T }ò ÿ*þ¨ýýäý—þÿ ”=}I¨³ ÿ¥þüýÇýþ×þñÿ &ÆÝ`d¿þ§ý ý ý§ýÅþ(ˆ—R0Øÿ”þ¬ýLýý;þOÿ…–J€5€‰„ÿ¬þ0þ&þ‹þDÿ1 àGD×ÿ5þ¡ýuý¸ýcþ\ÿ€™wñõ|—k/ÿþký1ý‚ýOþpÿ¨¹kœEu\=ÿXþäýøý•þ˜ÿÊå¢Öq†?ãþ¸ýýêümýtþÊÿ+Lôˆ–a+ÿ2þ§ýŸýþæþíÿõÅ8<Ø!<Qÿ’þ"þþfþ ÿêÿÙ«6b$ƒ•ƒÿþÂýhý‹ý)þ*ÿc•„óZOÇþÑýUýký þÿXI“K„i<ÿFþÀýÈý[þ_ÿšÈ¤ü¾÷ÍzÿFþpý ýdý)þHÿŽ·ŒèÂ%1ÿ,þ¶ý­ýþÊþ¼ÿ¸‘T"™Éßÿ ÿqþ4þZþæþ¼ÿ²“+^b[7ÿ9þ•ýsýÞýÇþWs3¬¡GåþÉý(ý&ý»ýÉþXHµåݰÿ¨þýý×ý7þ ÿ%MAÎØa}X&ÿ þvýBýŠý<þ=ÿ]j8¥§<z€{ÿžþ þÙýþ­þÿŠh:g„ÿ»þ=þ/þ™þkÿy…Q¬}Ä£Qÿþ;ýîüAý*þ|ÿöI,w.àsÿ8þjý0ý‹ýgþ’ÿÍÔs‘0jh`ÿŒþþ þpþ+ÿ ÖNcj‡Œÿ¬þ þÈýçýmþAÿ@;ot80(ÿRþÙý×ýNþ/ÿGZ,’rÑËŸÿŠþÐý˜ýñýÏþKZõùcMìÿþ|ýðüý¸ýåþP³ÅQFªžUÿþýkýÏý•þ‘ÿ’cåÊ?„Àÿÿ·þ£þàþfÿä‹ô¹09ÿ\þÍý£ýðý°þÁÿðü´î›Ç”DÿþZý$ý…ýqþ³ÿ!Ëß]^àþðý‚ý¨ý]þ{ÿÆñ¾±ÛªZÿ1þgý ýcý"þ5ÿj‚M­™IP_ÿŸþ/þþ_þðþ±ÿz"Ž­uõ@ƒÿæþŒþŒþêþŸÿ‰w3”ìï´ÿwþýûü ý³ýØþB¨¿P?Ž_óÿ–þýý<ýúý'ÿ€¼—ì­ìÕ£ÿŸþøýÍý!þàþßÿéÁ?Nï7GTÿŠþþ÷ýCþäþÂÿ°…Z8ºó!ÿmþþþoþ.ÿÔ@?Êõîÿíþ)þÓýûý©þ¸ÿõß!Éá“#ÿßý ýÍü9ý<þ ÿf7oÇlÿHþ’ýfýÂýþ ÿ·—1Ü3^Œÿîþ þªþ ÿ®ÿq+´òÙn¼áÿ ÿVþðýæýFþÿþýÿ «ë¯üí¶ÿþµýMýqýþ*ÿhc»Á¦nÿbþ¾ý£ýþÿaª¬3tOîÿ™þ—ýý-ýÒýäþ)Y>¬›-%-ÿzþ%þ9þ«þeÿ<“ÖÃ_¼üÿIÿÁþ„þšþÿ·ÿ‘f cTÚîÿÔþéý\ýKýÂý´þ÷ÿKn(Täê˜4ÿþEýýý‹þÓÿ!-ÅÈ<@ñþ%þÕý þÃþÎÿòꃠ;iT8ÿOþÉý¶ýþàþßÿéÂKm$„¤¶ÿáþLþþ1þ°þtÿ[7á>9Ð)<ÿ~þþþŽþeÿr{M·œýï¨ÿmþ~ý ý5ý÷ý1ÿ üÿxO‹Vñÿ©þ½ýUýƒý7þEÿlk7ä-;Nÿ›þHþhþðþÈÿÀ¤B|F­ǽÿÄþþ¦ý®ý"þìþíÿ÷Úv­w×ëÚÿÙþþ¨ý²ý3þÿ#0zsîìÿáþþÄýøý¬þÁÿö¼é•Rÿæý>ý(ý«ý­þúÿGNáãY_0 ÿ0þÃýÕý\þ<ÿ>,Ñé]¬ÿäþ`þ7þpþÿÕÿš6|]Üýþ#þ˜ýzýÎýþ˜ÿ¹À{È‘ÝÑžÿ‚þ¶ý`ý—ýSþkÿ ¶s¯]wSÿeþâýäýlþ_ÿƒ’O‘G}Zÿþeý@ý©ýþ½ÿý ·âŠÂ±ÿ“þéý¨ý×ýiþDÿ3±þïƒÓ8ÿšþHþQþºþpÿU8ïUQÚìÿÒþæýXýKýÆý·þðÿ1=ßòu|?ÿþyý|ý þ ÿ7Pf)skSÿjþåýáý^þJÿk…Y¼˜ôî¹ÿ’þ³ýAýOýÙýÆþéÿ ÿ—Ä×ìçÿ÷þBþàýäýKþÿàÿ¾rÜèŽâ 2ÿˆþ/þDþÈþ¦ÿ«¦_­z­rÿSþ‡ý>ýˆý[þ‹ÿÖö±àzWÿþxýnýïýçþ@ }èøßÿÛþ#þÕýþ›þ‚ÿŒz&oL¿åæÿñþ.þ¿ý´ýþÉþºÿ·›9}R¿âßÿèþ)þÃýÏýLþ"ÿÍ% v•—ÿ·þ&þ þlþAÿWoN»ðÒÿAþUýîü$ýïý(ÿÕÁ#ì-»ÿŽþ¸ý[ý„ý(þÿ61å9 £â;ÿ¨þdþ{þçþ”ÿ^­òÞoµÐÿìþ2þÀý¸ýþäþëÿþð»i¢’nÿpþËý ýýýËþÜÿñÏE6£ªŠÿþÌý–ýñýÐþMd '¨¥RöþÔý ýûüiýQþ…ÿÅÕ‡À}ÍÚÓÿîþKþþ$þžþUÿ%äu¼²T¸QÿÉþ…þ™þÿ´ÿ…Oè0€ž–ÿ˜þÚýƒý±ý_þqÿ«Õ­ Ò ß‹ÿWþ}ý.ýxýNþ}ÿÄß’¼SoEÿ-þ®ý´ýCþ:ÿc~U¾§*ÿ6þÅýÃý.þîþÝÿΓ2ò^“¹ÿõþeþ&þEþºþrÿF¨òÝf¬Ôÿ ÿ~þMþþ7ÿ'(‹™$äÿžþýôüðü‹ýªþ‡²`nÜÆjÿøýXýIýÊý·þÙÿòÇ5(¬ÜòÿÿþYþŠþÿâÿ¾{û$í`”±ÿßþ@þïýûýfþÿéª(GþYvƒÿ©þþêý1þßþÑÿÕ·E]ö  õþþžý°ýPþ_ÿ Ó¹âÛuÿ-þAýàü ýïý&ÿ€¹˜÷Çõÿõþ@þôýþ¤þmÿE|¥uöJ–ÿÿþŸþŒþËþTÿÓø!ê[‹›ÿºþþ»ý×ýdþLÿasNÁ²åÿ¯þ»ý;ýIýêýûþ?xe׳ðºÿ¡þáý¤ý÷ýÇþåÿ—£'<÷þþ˜ý›ýþüþ è`j TpŠÿÍþTþ3þmþóþ§ÿe y süSÿýþ’þxþ½þZÿ4!ó€¤M‚h-ÿþJýýQý+þfÿÆëCý&ï—ÿcþýHý–ýhþ†ÿ³³Jeý.0<ÿ‡þ8þ^þóþÔÿË£0T XjjÿŠþðýºýëýþ\ÿQ;íRTôGlŠÿÈþEþþZþïþ¿ÿ¡l÷!Ý6MPÿsþåýÍý6þÿ0]\ô}}2äþÐý.ý$ý´ý»þIGÒÈ36 öþ)þÎýôý’þ|ÿ|\ïÔ3ZÿÊþcþ[þ³þ^ÿ2µ$Î'F^ÿþüýÄýôý‡þhÿnm=¶»LwcCÿGþ¢ýxýÏý—þ¥ÿÅ»Xt 6)ÿEþÛýúý›þ›ÿÂωÄržzCÿ8þýlý×ý·þÜÿüŒŸ1]SJÿtþöýæýDþöþÕÿ³fÑá”þ?€ÿâþ„þyþÈþfÿ1Ä@blzhÿfþ¤ýJýpýþÿN€vûöek6ÿþ˜ý¥ý7þ&ÿ=B÷5ñ:?=ÿmþþþ¥þšÿ·ÂÍ×Å”ÿ€þºýhý˜ý>þ6ÿNQn[Þ&Aÿˆþþþgþ ÿÛÿ´oîÚL„ªÿáþTþ"þ\þ÷þÔÿͱL}0riFÿ@þý`ý½ý“þ»ÿõ´ÚpŽi?ÿJþÂýÀýDþ*ÿ>CþJjwoÿþþæýHþÿ ú~‘0lldÿ}þãý¬ýäýþbÿ`Q uwWksÿ›þþÓý þ£þ|ÿoOê%ò\…›ÿÑþTþFþ®þvÿsl-„Y¬ mÿPþ‡ý>ý‹ý`þ‘ÿß ÕÆñÌ’ÿ‚þÐý›ýëýªþ¥ÿªµ Dÿ–þ8þ>þ¨þaÿC)æ\t$§ÿÀþþ¼ýÐýGþÿÕRfLYYÿƒþþóýXþÿÇ$v•”ÿ­þþøý`þ7ÿTvbàÒ4%Ùÿ˜þ›ýý%ýÅýÒþLBÉËMl^Sÿ~þþóýNþüþÒÿ©]ÊßšYšÿøþŒþrþ¯þ8ÿôÿÂ|þ*ñ^‰—ÿµþþÒýþ¨þ—ÿ©¥W•R˜kÿhþ¿ý—ýùýÑþëÿŒŽöÿßþþ¹ýìýŸþªÿÓÜÊy°˜jÿ_þ§ýcý ýMþIÿ`c)‹h‡¤ÿäþeþ?þoþëþ”ÿNõgaîI—ÿüþžþ˜þñþšÿuU qaØñÑÿµþÑý\ýqýþ!ÿg§úM5êÿ²þÊý_ýˆý7þAÿix1s0}Іÿ¬þ)þþwþ6ÿ'å]l\v†ÿ²þ!þêýþ›þ]ÿ9»É-c“ÿàþsþ`þ«þDÿ Û„ÞÒ`´ÿÒþ.þñý3þêþöÿ!1龨šBÿþHýýqý[þ˜ÿêÈ÷”¹˜mÿpþÕý´ýþÍþÀÿ¶ûÀ$b¢ÿÿ±þ¯þÿÿAóÒÒ}äQÿ›þ#þþFþáþ¼ÿ±—>‚V½ÔÇÿÅþþµýäýˆþ~ÿ˜™H}+eS2ÿ>þ°ý¨ý1þ&ÿY‰wî×. àÿ­þÄýOýjýþÿ$;~vý5Ieÿ³þPþLþ þ0ÿâÿeežmÿöþºþÍþ/ÿÌÿŒKã1¤ÖÓÿÉþèýeý[ýÕý»þëÿ*@ð¬Å”Pÿ;þýqýÞý½þÛÿúÞR>¬¿­ÿ°þþÈýþÎþÓÿéÙu˜D‡މÿ¨þþçý&þ¾þÿn3¼ïÇPŸÜÿ$ÿ›þZþnþÑþpÿ-ê}ɼW­Üÿ ÿiþþ7þ¾þ™ÿ¡¤iÅ›ïâŸÿjþ}ý ý2ýåýÿW™‰úÓ#Ûÿ½þðýžýÕý~þoÿtVä¯+Tÿ®þ[þpþãþÿt>Óù€Äèÿÿiþ þþ^þÿÚÿ¿ŠI‰¸ÄÿÚþ%þËýàý]þ0ÿ/*ïQ<¸ÙÒÿÙþ%þãý"þÖþÜÿýú¹Ja0ñþåýDý2ý®ýŸþÏÿ™­>qrtÿ¬þAþBþ¨þUÿÚ^”lõIÿìþ~þ_þšþ!ÿáÿ¶|U8¿ûÿ=þµý–ýèý¡þÿ¸ºt¼†Þß»ÿªþçý—ýÌýuþqÿŠƒ%N÷43,ÿ[þðý þžþŒÿ£¨b£a§Ÿ~ÿ~þÒýœýæýžþ˜ÿ£Ž*\ƒ­ÊÿÿþuþCþoþëþžÿb˜Ì¬<“Ïÿÿ‚þ>þVþÉþ‡ÿr]‹ŠI9"ÿ5þ£ýýþýØþ÷ÿ ­ºA]:ÿ0þµýÀýIþ/ÿ?@õ;d‚ÿÅþSþUþÇþ–ÿ}1ƒ_ÉãÕÿÔþ þ¤ý®ý%þóþíÿïÈY‡O¾ñ-ÿ„þ+þ3þ“þ;ÿ ß‹êíæ8ÿþ>þZþÞþ´ÿµ¬a©qÁ¹ÿwþ´ýoýµýxþÿÄÕ‰¼fž‘yÿŽþþúýeþ/ÿ$ÈúqŸ¸ÿãþRþ$þaþÿÛÿÍ©CVÉ÷ ÿEþËý¶ýþ®þ”ÿ‘y%xaè!2GÿŽþ-þ4þ þ[ÿ>¹÷È5Ziÿ•þþþuþGÿVhC³ Þÿ½þçý‡ý²ý]þcÿŽ¡d°xËѺÿ¾þþÊýúý‘þhÿV/Çâj·íÿ0ÿ¨þmþŠþøþ¢ÿl3Ï"·(<ÿsþñý×ý&þÔþÆÿ̶S‚<˜‹ÿ£þþíýDþÿþóÿð³v˜—ÿ­þþïýNþÿ0QCÒÛ\o@ ÿþvý_ýÌý¡þµÿÒÇf–T´Øçÿÿqþ*þ?þ§þIÿ ÁS žQÊ"zÿøþ¹þÎþ2ÿØÿ¢iþ>Œ®§ÿ¨þåýŒý¯ýKþDÿk†Z¹“ò÷×ÿÑþþáý(þáþÞÿëÍLNÔùëÿãþþ»ýÜýuþfÿ~‰U¶ ?;;ÿmþôýäý8þÜþ²ÿ“Yáò~Ò Nÿ½þvþþÛþvÿ2és´œ.µÿøþwþTþ™þ>ÿ&!ú}‡4ãþçýXýUýÞýÛþY]ììcl<ÿ&þ¬ý´ý6þÿÄûy´Ôÿ ÿxþCþoþñþªÿ~?Í ï‚Ú Dÿ£þEþ?þþ%ÿîÿÄ~ùÞL{•ÿÃþ7þþCþÝþµÿ¥rð¥ìùÿ ÿKþùý%þÇþÇÿïĵãµcÿ/þXýýIý þ*ÿiŽ^¸ü5ÿþFþ`þÏþuÿ0ØJrMçT·ÿ)ÿÎþ·þíþcÿ Ãnçìm­Êÿêþ<þáýïýgþ4ÿ58vpòòþ þ¸ýÐýdþUÿr}:‚D‹lÿrþ×ýºý#þùþ5#«³;^I/ÿKþÄý²ýþÈþ²ÿ¤mìÒOœàÿ:ÿÐþ¬þÕþ>ÿÐÿtayI×5‚ÿáþyþ`þ¢þ5ÿïÀLs(tqTÿOþ¡ýký»ý‡þ§ÿèÅÿªØ²qÿ\þ¦ýtýÉýŽþ™ÿ­’#¼7ÿ’þMþsþûþÃÿ¥oø$éZ­ÿßþKþ þ(þšþLÿï–ùÁ3v«ÿùþ€þXþˆþÿ»ÿ†:®É„è(ÿfþ÷ý÷ýlþGÿ_ièáTUÒþÎý>ý<ýÆýÀþöÿ*š•3(&ÿhþþ&þ¢þaÿ8÷všaá0{ÿçþ–þšþñþ‰ÿJ ²Ð7i…ÿ³þþÒýêýaþ"ÿÆ=OöDTXÿ„þþëýHþÿÒA;¼ßÏÿÇþþ±ýßý†þ‡ÿ«·mªc¦›zÿþÞý²ýþ½þµÿ¸(Õ+TxÿÅþ^þTþ¢þ2ÿêÿ¢8‹IÂkÿÝþ‰þƒþÎþ_ÿî¤9öWsoÿzþÅýuýšý4þ*ÿSqQƺ/@ÿ+þÀýÔý]þ?ÿD2Ѽ*8ÿxþþ&þ¨þ}ÿ}nc2˜±­ÿ½þþÍýøý„þWÿH+Ö(µ6eÿºþTþ@þ}þÿ³ÿrƒ¡lí6nÿÀþPþ9þ‡þ,ÿï¢Kƒp@ÿ5þ‚ýJý˜ý^þtÿ¤«U„4wxqÿœþ&þ$þ“þTÿ;¨Ùœ)Eÿ„þþþtþ0ÿÝUgb‹ÿ³þþãý þ†þEÿ(°Ä"Mlÿªþ+þþ=þÐþ ÿ‡QÙÁ$JbÿŸþ0þ,þ–þaÿ]XrPµ¿žÿþÎý€ý¶ýbþeÿ†ˆ6r,ÿ±þ,þþcþ ÿéÿÇyÛØ{Ó5ÿ”þ?þBþ þDÿêŸ-í\ަÿÍþ)þÚýëý`þ&ÿàZnZgiÿ•þþûýSþÿíÿÑÖ½=pˆÿ½þAþ2þšþcÿgpAª‘üÙÿ³þÔýcývýþñþ&ÿuv Nc|ÿÅþ[þPþþ.ÿéÿ¢9–QÈcÿÉþkþ\þ þ1ÿøÿÓ—R!‘·ÀÿÖþ*þÞýÿýþmÿqaR"„™–ÿ²þ!þýýOþÿùÿð²þwœÿ°þþÞý)þàþãÿýõ–Åvº¸žÿ¡þíý¥ýÌýUþ(ÿµÅ+gžÿøþŒþlþŸþÿ¿ÿv£tùLŽÿìþ…þtþÀþbÿ8Ñ86ÆöñÿìþþµýÅýRþBÿcyK¬ˆêîÉÿ¼þûý°ýäý‡þzÿ„n+ä;Ynÿ¬þ@þ8þ˜þIÿ*Ë:IöSxŽÿ¿þ,þìýþ{þ.ÿ ÞŽùÔIÈÿÿ«þŽþÅþKÿýÿ¸Mš$o™ÿÎþCþþ\þ ÿ ¦ÈeŒf+ÿþuýPýµýþ¸ÿíò•ºaŸ›‘ÿ²þ)þ þWþöþÆÿ–?ž¥WÊfÿÛþ“þ˜þêþ{ÿ2ñŽïÆ>€¬ÿëþ^þ þ=þ³þoÿO#Äü…¿Øÿÿdþ'þWþíþÍÿÀ—-Ìùÿíþþ§ý·ýFþ=ÿhŒjÙ¿'.êþþ©ý¸ý>þÿÐ1,ÅBsÿÑþuþjþ­þ-ÿÒÿvúIU®ŒÿÿØþàþ/ÿÀÿu-Á ¡äôÿüþ-þ²ý£ý þÝþîÿ ý¨AlU8ÿPþÌýÅý;þÿ %æ>Š¥¡ÿ¸þþðý8þäþÕÿÕ²<_kˆ•ÿÂþ6þþ1þ±þnÿ?þŒÑÈtä7ÿ ÿ¼þµþöþqÿ «'g]k°ÿúþtþ?þkþøþÕÿÖÊ|ÄáÒ™ÿoþ’ý*ýPýúý ÿGqN¶—ÿ øÿýþOþþBþÙþ±ÿ•SÀÍvÑ6ÿ™þLþ[þÂþmÿ9›îë˜ÿ@~ÿÛþuþ[þ“þÿÈÿBÁ÷Ó]¦Ïÿÿgþþ5þ¬þoÿV/ÎæQrtÿ‘þûýÓý(þìþüÿ¯Ë`],ÿ0þ•ý{ýâý²þÂÿÔ²2Dæ3RuÿËþqþsþÊþdÿ¿9jOð]¹ÿ#ÿ¾þžþÆþ5ÿØÿ”FË ú’á"ÿdþìýÓý#þÓþÅÿ˸Z—\³»§ÿ­þÿý¼ýôý›þŒÿ‘pþÀ#ÿkþþ;þÌþµÿ¿²[”W«²¢ÿ­þþÇýõýŠþ`ÿJ²îÑb¾bÿóþÆþæþGÿØÿ{ nhûYŸÿòþsþ=þ^þÙþœÿˆn%ˆ 4'ÿ/þ¦ý“ýþØþïÿ ù†—+ZQKÿ}þþþ•þcÿP(¹çª 4Wÿ£þEþKþ¹þxÿcFñF5À7ÿ„þ!þþlþ ÿÙÿ¯cÛÕ\©âÿ+ÿ¡þ]þnþÒþxÿ>ÿ”ßÎa©ÍÿöþSþþ'þ±þÿ’…8…Z·Á¨ÿ¨þóý±ýîýþ›ÿ°¢Al l{€ÿ±þ9þ)þ€þ+ÿþÿÉ^ „bÿïþ€þdþ¤þ4ÿýÿÙ$Z2±ìÿ\þåýËýþªþ…ÿsQôD2½þ=ÿ’þ9þEþ´þmÿH¨à°Gbÿ¡þ.þ&þ‘þ]ÿ_]%ŠvæûãÿÚþþ¹ý×ýhþOÿWI÷@‘ÄßÿÿŠþVþ‚þÿµÿz%•¸‡ _£ÿûþ†þ[þƒþûþ²ÿ„SóMLí:TbÿŽþÿýÐý þ­þÿ‰iBwŸµÿëþmþTþ©þWÿ4¶ÜPwƒÿ¬þ!þþUþÿðqMICÿlþïýßý?þùþêÿß°3XŠÁçÿ&ÿ›þYþmþÍþiÿÉO–’?²[ÿ×þ”þ¦þ ÿ»ÿŽZúI2µäéÿõþ8þÙýëývþVÿ_\nK¸ÖÕÿòþWþ(þmþÿøÿãžù„ºÉÿåþAþüý)þ¾þ¡ÿ¤•D”z÷'0AÿþþøýDþßþ¬ÿ†KÕš÷8~ÿíþ™þ•þâþmÿÁBi^¢ÿúþþuþÃþnÿUI‘š+T<ÿ4þ§ý˜ý þæþûÿífhò!#3ÿ~þ,þFþÊþ™ÿ€Sãé_˜¾ÿúþtþ?þfþãþœÿm1ŵT‹ÿâþsþTþŠþÿÇÿ‘IÊÿ×X£Ôÿÿ™þnþ¥þ1ÿöÿÆtÛÝw¼Ôÿ÷þOþ þ>þáþØÿïì™ÔŠÈµ‡ÿxþÁý~ý¾ýqþsÿ‰8WÈùGÿµþwþ“þþþÿNíZ‡h |ÞÿPÿëþÂþãþIÿâÿ”<º÷áwÊúÿ,ÿ‰þ2þ<þªþkÿWEjcï!(3ÿxþþ2þ¸þÿƒ`õ Ö#28ÿjþøýùýuþTÿj|YÓÖa‹~rÿ“þþåý+þÉþ™ÿu1³åÅ]É$ÿ(ÿúþÿdÿáÿníDa7Î9“ÿÿ þŠþÊþ]ÿ)ÍT|4†‘ƒÿ’þëý´ýüýµþ¼ÿØÒy§X—’~ÿ—þþíýJþ ÿô´žÜ÷ÿ"ÿˆþGþkþîþ³ÿ’[í,ží!]ÿÇþpþmþ·þBÿðÿ 9›·‡vÎÿ6ÿÑþµþèþdÿÇgËÙŠè8ÿ‚þþþ“þgÿlsDµ¥(âþÿý‰ý–ý%þÿ:U. šLTjÿ¸þ`þnþÕþ|ÿ8áQuJÙ>žÿÿÍþÉþÿ–ÿAõŒð ÔUÒÿÿ}þ0þ:þþHÿö®2â?g‡ÿÊþWþKþ¨þZÿ<Ì"|Ÿÿ®þþÉý þ½þÁÿÞÝŠÄ~ÇƱÿÀþþåý$þÄþ ÿ‹RÖýÆB×ÿ?ÿßþÊþÿpÿ” KJŠîÿTÿ×þ‘þ“þåþyÿ> ÃAi/–º¿ÿÐþþÁýÜýcþ@ÿGF mWÎñíÿúþFþüý(þÂþ¤ÿœw$Ô#;Rÿ—þ1þ:þ«þqÿ\:à,“Ïïÿÿ…þAþVþÄþrÿ<ù‹×Ôð@’ÿÿ©þ™þÒþMÿíÿ•'„—Z×$fÿÀþYþJþŸþJÿ0"÷›?wlLÿPþ§ýwýÇýˆþ’ÿ«¢Bp"rŠ›ÿÚþlþgþÊþwÿBÿ‚­wî-fÿÀþ`þYþ°þVÿ'û©$Ú?tœÿÛþRþþ9þªþ^ÿ/ü¤ Ð>|®ÿùþþZþ’þÿÕÿžN¹ÆrÉïÿÿbþþþœþxÿF§Œûýÿ÷þ4þÚý÷ý„þ^ÿR0ÊÐC~¯ÿÿ›þŽþÜþsÿ/æq¸©F¤ãÿ,ÿþPþWþ³þTÿêš4z¹Ýÿ ÿjþþþˆþ@ÿ Â4@ä5Pfÿ¥þ4þ)þ‰þ:ÿìÖµ0iŒÿÍþSþEþ¤þ`ÿPDmbã  ÿJþäýìýaþ)ÿø©¡ø1oÿ×þ„þƒþÑþ_ÿ ·D“›UÏ%tÿÜþ{þgþ©þ5ÿôÿÆ„ 7p™¥ÿÀþþÍýñýþ\ÿ[KùF”ÂØÿÿ~þXþœþ8ÿÏj³’EgÿŸþþÿýRþÿûÿüÚk‘Fš««ÿÅþþ×ýóýkþ&ÿýÿÍsÑß™g¶ÿÿ¼þ¢þÓþEÿàÿˆx‹NÇUÿ°þHþ<þþ6ÿõ¸*5Ó%-ÿgþ÷ýüýqþ>ÿ7*á9“½ÌÿîþUþ þXþñþÄÿ£]ÍÚ‚Öüÿ%ÿvþþþ{þ,ÿ íª%F {µÝÿÿ{þ-þ4þ‘þ)ÿëÿ­S»Ò–b¤ÿÿ—þþ¿þGÿøÿ²I›,·ÿöþnþ?þ}þÿüÿóËVrMF2ÿIþ¹ý ýþÑþÙÿêËXpazÿÍþXþCþŽþ"ÿÞÿ˜.…9°cÿÞþ–þ™þéþvÿ-è‹÷â_¦Ôÿ ÿqþ#þ0þ—þBÿã†ÞÕtÌEÿºþ…þ´þ<ÿÿÿЃéê~»ÊÿÛþ%þÎýîý…þtÿ‰“X´’ü ùÿôþ-þÆýÕýMþÿäšþ¸%q½ÿ+ÿÒþÂþûþiÿõÿ„ù=@Œùÿbÿäþþžþíþ|ÿ7ù¢ È'Nhÿ þ!þþZþ ÿóÿç²,5Ï(ÿjþ þþ¢þuÿmUø5þ^zÿ§þþëý6þÝþÄÿµ‰?s©Ïÿ ÿƒþIþgþÕþwÿ2äl¹¹rõW·ÿ0ÿÝþÎþÿmÿùÿ‹C9è]±ÿ ÿ‘þdþ”þ ÿñÿáÁe£kÂÈ©ÿœþÖýý«ýNþFÿag'wL³ÓÙÿûþdþ4þmþÿÇÿ–E«¶dÎ\ÿËþ€þ‰þäþ|ÿ7ï„Üå i®ÿÿ’þdþ„þìþ‡ÿ>ïv»°WÄ`ÿÙþšþ²þÿÄÿˆ;¸Ø”õ+ÿ^þàýÔý?þÿ <,¿Õj”~]ÿkþÒý°ýþ¾þ«ÿ iãù«Y ÿ ÿÁþÆþÿ ÿ>ÔAnVùoÒÿ?ÿÓþ¡þ¸þÿ¤ÿOùƒÐÐí-cÿ³þAþ)þoþ ÿáÿÌ*Ut’›ÿÁþ1þ þQþúþÚÿÈŒúüŽËÛÿôþEþ÷ýþ¯þÿ{$j=®Øéÿÿqþ-þLþÃþrÿ7íq«–:­}ÿÿâþöþFÿÀÿLÏ,S3ÕH¥ÿ ÿ—þgþŽþÿ»ÿ”kiWÛ ÿþ&þ«ý¥ýþéþòÿåiuKUbÿ¤þBþLþ¼þsÿF…©gÔGÿ¦þNþYþÃþwÿQ'Ï,+Î*]ÿáþrþTþˆþÿ£ÿTôd‘s‡âÿIÿØþ¨þÄþ*ÿÆÿ})¨Û´6xšÿÈþ/þñý!þ¶þ˜ÿ›@ˆX¹˺ÿ¿þ þÇýùý•þyÿtVéÜG~«ÿþþ™þ“þæþ{ÿ0ÚV†`îI“ÿòþƒþaþ•þÿÅÿŠ@Èòë#Zÿ®þBþ&þ`þêþ©ÿ|BÏïxÀèÿÿþ?þ[þÕþ‘ÿk2¼é­B`ÿžþ*þ þ„þAÿ/ àB4¹ëòÿÿPþýýþ˜þ`ÿG¼ætÇXÿÝþ­þÏþ7ÿÉÿhòL^(´mÿÕþpþPþ…þÿºÿŽZÿXWöGbnÿ™þþÙýþ¨þÿqJßáS‰«ÿïþ{þiþºþZÿ%퀼“ Fjÿ©þ.þþrþ"ÿ üÃ;Hê6Pdÿ þ%þ þWþíþ´ÿƒ6ªÌœ&ƒÑÿ2ÿÀþ—þ³þÿ£ÿFâT…jm´ÿÿxþ7þNþ½þtÿR/Þ;3Ã"ÿcþüýþnþ-ÿõœæÅFƒ¨ÿêþnþUþ¡þ@ÿÞƒÔÂN”ºÿëþUþþ=þÁþ…ÿg9Ô‘Ü/ÿ‚þþ þSþâþ¡ÿo*²ïÛ|á)sÿãþ•þ“þÞþfÿ²/dHÝ8{ÿÑþ`þIþ”þ4ÿùÁ=Kí/78ÿdþèýÞýEþÿõÿé§ ™á7ÿ¡þ^þþùþ«ÿq!—¹€ùB|ÿÎþXþ2þaþáþ“ÿa&¼ ¹"`‘ÿÜþaþ3þ\þÒþÿI‘лV´÷ÿKÿÓþ©þÔþMÿöÿ¬@}_‰ÿ¼þ*þøý5þØþÄÿÏÀh¢e¹È»ÿÇþþßýþ£þxÿa3ÁôÆF‘Ìÿÿ¦þ}þ¦þÿ°ÿ\÷do€Úÿ?ÿÈþ’þ¦þÿþÿBôƒÐÌxÜLÿ¦þFþAþ™þ=ÿè•ôíŠ×þÿ+ÿþNþsþõþºÿ–WÐåŽÞøÿ ÿNþèýòýjþ8ÿ74þnoDUaÿ—þþùý:þÆþ„ÿN²™=²ÿÿâþïþ6ÿªÿ3³4º0’ÿÿŸþƒþ¹þ<ÿ÷ÿÅ€üÚ:ZaÿƒþíýÃýþ²þ£ÿ¨#KZv‡ÿÂþMþCþŸþIÿí…ɧ'g‹ÿÀþ3þüý)þ®þpÿP$õ_žÿýþ•þvþ þ ÿœÿ<Ï5\BèbÍÿDÿéþÎþüþiÿ¨7ˆŠ6—ÌÿüþTþþýþˆþWÿVTqí üÿðþ þµýÄýEþÿÑ.©ì@ÿªþhþ‚þëþ‹ÿ=ÝGg<Ï:˜ÿ ÿ³þžþÏþ?ÿÚÿ…"“Ä«NºVÿÆþvþrþ¼þHÿ¼Y·ÀsÜOÿ®þVþ^þÃþuÿN"¾ÚP{‡ÿªþþæý-þØþÌÿÔ»S}0€‹ÿ¦þþÝýþ¦þqÿM•Ǧ@­ €ÿ%ÿ ÿ)ÿ~ÿòÿnÓ  Î`ÖÿGÿÐþ‹þŠþÑþZÿ׈-ûr§»ÿÛþ2þäýûýyþEÿ7#Ñ# оÒÿúþdþ1þgþýþÏÿ²qáìŠÙ÷ÿÿaþþþƒþ?ÿ#þ©÷”ï'eÿËþzþxþÂþGÿêÿ^h3Ç<¯ÿ7ÿòþèþÿ†ÿ¤a^‡ÑÿÿsþþþlþÿýÕ]}-x€vÿþõýËýþÀþ®ÿ¨}þÃAfÿ¹þ^þeþÆþkÿ/ãaŽdðI•ÿüþœþŽþÎþSÿ¸V¹Ò›!x½ÿÿ•þ[þoþÌþbÿÓhÃÑ“]£ÿÿœþ„þÁþGÿþÿ½[¶¶W«ÒÿûþSþþþ¢þzÿ}w4Žuì ÿVþûýþˆþIÿ)õ‡À /ŒÛÿEÿìþÞþÿ—ÿ2ÌBzgƒÛÿ7ÿ¶þwþþÖþjÿ"äŒûëk±Øÿ ÿkþþþ}þ+ÿåšÈ*Y†ÿàþ…þˆþêþ“ÿ`!¥Óœ :Xÿ™þ!þþkþÿöº.:à5ZÿÐþoþkþÂþYÿÏ\¥›H¾uÿûþ½þÉþÿšÿ9×R”‘FÂcÿËþkþXþ—þ"ÿâÿ¹z7 †¹ÎÿñþOþþ(þªþzÿhEä'ºßÿ!ÿ§þ‡þÆþVÿÍZ™yNƒÿÌþXþ>þ†þ#ÿ÷ÿÝ£%J}´×ÿÿþCþ[þÁþeÿ#Új¸½zùV«ÿÿÃþ®þáþUÿñÿš+…—\×%iÿÇþiþ`þ¶þ]ÿ7ÔAIé/@Kÿ‡þþ þoþ%ÿè‘èÛqÆÿÿLÿÖþ´þîþuÿ)âv¶R¨Üÿÿvþ%þ0þ’þ=ÿí§GšäRÿ»þfþaþ©þ4ÿçÿŸ=¡»ˆm¾ÿ*ÿÐþÁþÿŠÿ:ëvº¨=ÀÿÿwþFþzþ ÿÞÿɘBúQm|ÿ¯þ3þþqþÿûÿ✠Á%]–ÿúþ¥þ¤þóþ‚ÿ0Û]Ÿ•B³XÿÉþxþoþ²þ8ÿëÿ­\× ðƒÝWÿÁþqþuþÏþmÿ1ò‡ÔËiÇQÿÏþžþÈþDÿ÷ÿ¹Yµ²R¤Íÿüþbþ#þKþÚþ´ÿ°™Bˆ_Îô÷ÿ ÿYþþþþ4ÿ ÜÛå¢!~ÙÿVÿÿôþ"ÿ‡ÿ ’ÿ?B”ÿÿfÿæþœþšþáþqÿ-õ£/ï[ްÿíþlþEþ‚þÿÞÿµfÑÚ„ÞFÿ¯þnþ‘þÿÔÿ±uøÒ2Ukÿ¢þ$þ þTþøþÔÿ¾‹B’×Cÿ´þkþrþÃþNÿøÿž'z]÷pâÿlÿ"ÿÿHÿ°ÿ:Æ4l\q¾ÿÿþVþxþõþ·ÿšrT.¢ÉÏÿéþEþþ0þÄþ ÿ—u =n›·ÿõþ{þ]þ þ2ÿõÿº^¹Átå/yÿèþ—þ‘þÚþ`ÿ ¾T³Í /’âÿCÿÌþ•þ¦þüþ‰ÿ4Û^ª«aÝ8˜ÿÿáþôþQÿèÿ”1“¥[¿îÿÿ]þ÷ýùýhþ6ÿ:G!£±K‚uÿ™þþõýFþìþÆÿ£YÅÛ—c¸ÿ/ÿçþãþ#ÿ™ÿ(°D3énÜÿRÿéþµþÃþÿšÿBî{Ñà¡cŸÿðþvþMþ{þûþ¶ÿ„>¸â« \ŒÿÞþuþjþÂþmÿD¾ ïmš§ÿ¿þþÓýúý‹þgÿdNùH/¸ú!Vÿ¿þtþþ×þgÿ«WKŒƒÿ'ÿÿÿ[ÿÎÿTÑ,R9âZ»ÿ!ÿ®þzþ”þüþ£ÿn5Î ˜×çÿüþ?þÚýÞýNþÿÉ54É*Qÿ¬þaþyþìþ ÿj‹¥bÑKÿ¬þQþMþ¢þ:ÿÿÿÂbÂÒ”gµÿÿ¶þ“þ¶þÿ¦ÿDÓ;hV‡ñÿgÿýþÐþäþ<ÿÉÿll‘cå,[ÿžþþòý4þÒþ¹ÿ»£F„N®¾µÿÂþþÐýùý‰þ]ÿF¥×ª+zÅÿ0ÿÛþÕþÿžÿ;Î4V.Ã(~ÿåþ}þYþƒþñþ’ÿNþ‰Ö×Y¢ÿÿ™þtþ›þ ÿ­ÿb}¬ˆh§ÿöþ}þRþ„þ ÿÏÿ¡ZÏì¡ý$@ÿ„þþ þnþ'ÿü¸µýCÿœþFþLþ­þQÿÆJ…sŒïÿdÿÿçþ ÿkÿñÿƒýKZ(»%€ÿíþ‡þ_þ‚þîþ”ÿW² ¹Dfÿ¨þ)þþEþÜþ¯ÿ“Zà Í;qÿëþþsþÃþbÿ$ãl§„P„ÿÒþbþKþ•þ1ÿØŒ÷¹S„ÿÕþhþKþ„þÿ¯ÿfm•v’ûÿvÿÿöþÿlÿïÿ‚aVä>‚ÿÏþLþþ5þ¯þqÿ\?ôXVí0H_ÿ¦þ<þ8þ™þGÿæ}Ĭ<Ðÿ-ÿÅþ±þöþ‚ÿ7ëq®•%y±ÿùþvþDþiþâþ™ÿl0Ĩ LŒÿîþ‰þmþ¡þÿ¹ÿk µ D´ lÿòþ·þÉþ%ÿ»ÿh ¯ˆZ‘ÿÝþ`þ>þ{þÿæÿÊ‘4íNu–ÿÛþlþ[þ®þRÿè‚ÐÁ\µóÿDÿÇþ™þ¿þ1ÿÙÿ/–´‚`©ÿ ÿþxþ¡þÿºÿ{1¿  ¹"b˜ÿæþmþ=þeþÛþ‹ÿR ™ÝËkÏ }ÿ ÿçþÿˆÿ+ÓW›ˆp£ÿåþ_þ0þeþûþÓÿÅœ1e-˜¿Òÿÿqþ=þkþðþ¯ÿ|0©Ôª9—ìÿXÿ÷þ×þÿiÿøÿ•y–mnÆÿ'ÿ²þzþþîþ‰ÿG¢ÿ ¿,jŸÿóþ…þmþ®þ>ÿùÿ»Zµ¹eÎjÿïþÁþîþnÿ$å‡áß{ÈåÿÿXþúýþvþ8ÿ'Ò@MúWˆ´ÿÿ–þxþ­þ'ÿÏÿ€€§‡)Ÿwÿÿáþñþ?ÿ¼ÿLÕ;hRömÌÿ7ÿËþ¥þÎþEÿõÿºmèÝO…¤ÿßþWþ/þkþÿÖÿ¶uî»Q…ÿãþþ—þüþ¥ÿn(­Þ·8~­ÿñþlþ9þ]þ×þŽÿ]!¸  ¼.{Åÿ'ÿ¼þ•þ´þÿ¡ÿ=Ð<qa›ÿ0ÿ ÿ0ÿ’ÿ±1xy'’Öÿÿˆþ@þVþÎþ”ÿ‚is]ÛÿXþ÷ýþwþ9ÿ÷›íßyÖqÿúþÏþñþ[ÿôÿ˜&•`ìM¢ÿ ÿ¢þxþ—þûþÿ;âgµ¼~eÀÿ4ÿÛþÅþúþoÿ ®9Š“KÂjÿâþŸþ´þÿÌÿ“NÐýÄ.Yoÿ¢þþöý@þìþ×ÿÑ­=h&ˆ­Äÿùþoþ>þmþíþ¡ÿb ¬-¥‘ÿ;ÿÿ;ÿÿþÿyà!.ÿžŒÿÿÀþ¬þßþTÿõÿ«RÊûØb°âÿÿþLþiþâþÿv@Ñå_›Âÿÿþ]þþ1ÿüÿÌzÛÞ~Óþÿ/ÿþ@þMþ»þqÿI»»"d©ÿ ÿ«þ“þÂþ-ÿ»ÿNÎ%D'Ûlùÿ•ÿWÿLÿ{ÿÚÿWØ@woØÿ!ÿˆþ0þ0þþ<ÿ ÖWt#u‹“ÿ¾þ3þþWþüþÕÿ¸tæ÷¥A€ÿïþ¦þ¶þÿ»ÿr‡¯ e´ÿÿ±þ’þ¿þ1ÿÏÿ}„²›>µ}ÿÿÄþÆþÿ‚ÿ²2~‰M×=ŸÿÿÑþÑþÿ®ÿ`žâÌZžÀÿæþAþïý þ‹þ^ÿVCúUDÊBÿŸþQþhþÚþ‰ÿQ†·–*’ïÿcÿ ÿôþ$ÿŒÿ›?8ó|ëÿ^ÿíþ¯þ´þýþÿ(ÖpÙüÏY­æÿ)ÿ“þDþLþªþNÿâ†ä铸5vÿâþ™þ«þÿÂÿ…8°Ò’ú.Sÿ›þ)þþoþÿøÿÜš !Ø@|µÿÿ¯þþÚþVÿñÿŒHI ™“ÿ2ÿÿÿZÿÏÿZáI{n”ìÿAÿ³þ[þPþ˜þ*ÿïÿÄ >ˆÀØÿÿ`þþ0þ§þcÿ:“ͪ2ƒÇÿ'ÿÅþ»þ ÿ›ÿPýµ‘f ÿíþrþGþvþ÷þ­ÿr"ŸÍ¬=žîÿNÿÙþ§þ»þÿœÿ<ÒJˆ…?Å-”ÿÿÇþ¾þüþtÿ¸D˜¢ZÍTÿ¯þNþDþ™þ?ÿñ©'Ï$Ghÿ¯þEþ<þ“þ9ÿÊd³¨I°hÿÿåþÿ‘ÿ0ÍKˆz‚ÍÿÿþFþMþ¦þAÿÿÿÅlÝÛgÂTÿÈþyþxþÂþJÿóÿ¢9–«q÷UªÿÿÃþ¸þþþÿ*ÑRt\—ÿáþbþ8þqþÿÐÿ²z)íWŠ®ÿòþuþSþŽþÿÉÿpx2®uÿÿÌþàþ9ÿÆÿip¥2ëÿ;ÿ¨þOþ?þ~þÿ±ÿt(°ð߀â&jÿÒþ}þzþÊþZÿ ¾I’†)“ãÿ?ÿÏþ©þÛþZÿ¼S§¡BœÑÿÿ|þ9þWþÕþ•ÿrAÖ÷{¿çÿ ÿ‰þCþQþ¶þUÿÂL™˜UØC¯ÿ7ÿóþíþ(ÿ•ÿ«ce&« gÿØþ{þhþ¥þ*ÿÜÿžLÁæ³/v®ÿýþ†þgþ£þ.ÿçÿ«O®´bËaÿÜþ¦þÇþ;ÿæÿ¢Eª¹lÏ6ÿ‰þ!þþgþ ÿÞÿ»{ü)ýƒÓ UÿÅþvþsþ·þ5ÿÏÿmôKb;ácàÿpÿ*ÿ ÿTÿ»ÿ=Ä-_MïZ¨ÿûþwþ=þ\þÒþ‹ÿe3чËñÿ$ÿ‘þSþzþúþ³ÿ‚7­ËŒþBÿàþƒþ~þÎþeÿ×h·µ_ËaÿÍþuþjþªþ,ÿÕÿˆ'˜Æ¬O¿yÿúþ±þ­þñþeÿúÿ PQ˜{ÿÿêþ ÿrÿ ³I¥²cÊ/ÿ€þþþ|þ3ÿÃ18Ö!=\ÿ£þ8þ0þ†þ(ÿðÿ¹Y·ÁzöS³ÿ2ÿëþçþ%ÿ•ÿŸ=5ôƒùÿqÿÿÃþÃþÿ|ÿ¹H¦½Œr¼ÿÿ¡þtþšþ ÿ±ÿiƒ¨vûS¢ÿÿ¿þÆþ"ÿÂÿ…>ÂöÆ9j~ÿªþþÖýþ–þjÿZ:Þ.±?ÿïþ£þ£þìþkÿÿÿ’BC §1½ÿdÿ7ÿ?ÿ{ÿßÿTÆ>$ÏL²ÿÿªþvþþôþ˜ÿ]!½ ¨ú%Oÿ¢þDþFþ§þTÿ%ô‘ÜÇW§Üÿ#ÿ£þvþªþ/ÿêÿ²ZÅ׎û;uÿÏþiþTþ•þÿÈÿ}„¨ƒ –ÿÿvÿÿêþýþIÿ¼ÿ>¼C0èvðÿqÿÿëþÿ^ÿãÿs’bç7tÿÄþLþ,þnþÿßÿÌ 0_!ƒ¢­ÿÐþ6þüý,þµþyÿP޹yÓÿMÿÿþüþ?ÿ·ÿHÒ5]Bæ]Àÿ0ÿÃþ’þ¦þúþ€ÿ ÀC’žfô\·ÿ$ÿ¾þ™þ½þ"ÿ¶ÿ]ùh“qm¾ÿ!ÿ¹þŸþÚþ^ÿÒqÍÍn¿ãÿÿQþïýóý_þÿò¯"È"T‡ÿâþ†þ}þÅþIÿéÿ„ø2(áqòÿÿ7ÿ!ÿIÿ£ÿœ Q\(½*ˆÿóþˆþWþpþÑþjÿ#ÜvÒàš SŒÿáþuþ\þžþ)ÿéÿ²^È׌õ1jÿÊþsþxþÖþxÿ8óy°‹aÿïþ{þ[þ—þÿÖÿ›C²ÏšyÊÿ2ÿÌþ­þÓþ6ÿ¼ÿNÐ&D$ÐY×ÿdÿÿþþ#ÿÿ‘n‹_ñN–ÿæþfþ.þNþÅþ}ÿY/Ö+´û?ÿ“þ6þ<þŸþIÿÙj¯—1•æÿOÿîþÛþÿ“ÿ1ÍDy^ù^­ÿ ÿ•þfþ‰þ÷þ™ÿTÙÔ„ýQ£ÿÿ«þ‹þ³þÿ¢ÿ?Ñ;jU„ñÿhÿÿãþÿpÿ²M³ÍCoÿ²þ3þ þIþÜþ«ÿŒTÛÑJŽÅÿÿ°þžþàþhÿ¼@r‘ðÿaÿþþÞþ ÿwÿ ©1†–]åE—ÿþþ“þiþþöþ’ÿFúŠßé©'}Åÿÿ«þ€þ¤þ ÿ­ÿa°‘)âÿHÿãþÌþÿ„ÿ-Ùd«œ:•ÑÿÿþVþ|þùþ³ÿ„EÉýÐSŸÛÿ+ÿ·þ‘þÀþ8ÿÚÿŒ$‡¤v zßÿZÿÿêþÿuÿüÿŽdWócÀÿ(ÿ¶þ‚þ›þüþ˜ÿV´Ð?|±ÿÿþpþ©þ)ÿ×ÿ%}†?½Šÿ"ÿÿ4ÿ®ÿQýŒÕÉg¾ðÿ&ÿˆþ6þCþªþYÿ-ÿ© É:„Éÿ*ÿÅþ©þ×þBÿÓÿrý^„i”ÿ7ÿÿ+ÿ~ÿûÿŒs˜uzÊÿ%ÿ®þ}þ¡þÿ¼ÿ„?ÇápÀùÿCÿÄþ™þÆþAÿíÿ§C¢«`Ô%yÿùþÂþáþOÿ÷ÿ´`×þÍL•ÌÿÿŠþMþfþÏþnÿ+äwÌØœ$‡âÿQÿñþÎþíþIÿÏÿhö^Œy)«‘ÿ0ÿ ÿ+ÿ†ÿ¢"kn$šìÿ<ÿ²þmþ„þñþ¥ÿ{Nî<$³õCÿ£þTþfþÒþ{ÿCû‚½¢=¥ûÿeÿþþßþ ÿsÿ¢+ƒ—gùc¾ÿ&ÿ¹þ‰þ þøþ„ÿ,Ô^³ÃŽƒÝÿKÿçþÇþíþQÿßÿzÿR`'´ ‡ÿÿãþÿþcÿþÿ°Q¹Ï‹õ(MÿþþþTþûþÚÿɘG {´ÝÿÿœþjþŽþöþŽÿ2É-T7âlèÿwÿ.ÿÿEÿÿ– Qc8ÖM³ÿ$ÿ¾þ’þ¬þ ÿ™ÿAæ`‹/šèÿ?ÿÁþŒþ«þÿ¾ÿ|'ÁŽ V”ÿíþ‰þ~þËþdÿ(ê†ÕÈb´åÿÿþ.þ:þþBÿ ÎlÆÐ‹ g½ÿ-ÿÑþµþÙþ3ÿ°ÿ7¯! Æ_ïÿ‹ÿKÿ<ÿcÿ¸ÿ-©LH€Úÿ0ÿ þNþLþ¢þ>ÿ á•Å%Orÿ¶þFþ2þ€þÿéÿ¹aÁÆuà)vÿðþ±þÅþ#ÿ·ÿ\óYyLÝB˜ÿÿþzþ¢þÿÿCä]ž›YçUÁÿDÿôþÞþÿ\ÿÕÿXÇ æ…~ÿÿäþ÷þOÿßÿŽ4°á»?£ÿÏþ1þéýþ‡þQÿ= Ë êKÿ³þoþ€þäþ~ÿ0Ð@kJìeÖÿZÿ ÿÿ0ÿ“ÿ•ÿ:;•€ÿ ÿ¿þ±þàþGÿÖÿto„)šïÿJÿÈþ†þŽþáþqÿ#ÐW›1™áÿ5ÿ¹þŠþ²þ,ÿÞÿ¤VÆáŸ=gÿ­þ:þ!þfþüþ¿ÿ=ªÁ‡_°ÿÿÆþ´þèþTÿÞÿnâ&1©6Ãÿgÿ6ÿ9ÿpÿÏÿD¸>/äfËÿ)ÿ¥þUþQþšþ*ÿéÿºtö#õq±Ôÿ ÿuþ4þOþÂþsÿ>õt£x_¯ÿÿËþËþÿ©ÿUüs£h«ÿþþ…þUþxþåþ…ÿ9â\–‡6¶!‘ÿ%ÿîþõþ4ÿÿœ3.ð‰ÿÿßþæþ-ÿ©ÿFäc§ŸI°íÿ'ÿ†þ'þ"þxþÿôÿÔÍ3h–ÿêþ‚þsþ¹þBÿñÿšWFïfÍÿFÿôþåþÿ“ÿ+Ä@|0­ eÿàþ’þ‰þÆþ<ÿØÿ~r–tŠæÿIÿÒþ”þ›þçþiÿµ<Œ•T×3ÿÿ»þ»þÿ“ÿ>èe›f ÿèþjþ<þkþîþ­ÿ<½è¹:‡Äÿÿ«þŒþ»þ,ÿÆÿeé3:ÿ“ ‹ÿ+ÿÿÿlÿêÿyb‰n‡Üÿ3ÿ¨þRþFþþÿ¬ÿj›ÙÇkÑ`ÿÐþþ€þÏþ\ÿ µ:}r‘íÿYÿõþ×þÿ|ÿÀFˆzx·ÿþþrþ4þOþ¾þmÿ8üŒÔÅiÒ vÿ÷þ¶þ½þ ÿ…ÿ¤ =0êxïÿmÿ ÿÛþèþ/ÿ©ÿ<ÓK’OÏ&sÿØþpþRþƒþýþ¬ÿl”Þ,…Êÿ%ÿ·þ—þÉþBÿèÿ”$rr&œõÿXÿèþ¿þçþVÿôÿ¢7’žWÌXÿ»þ^þQþ™þ$ÿÝÿ J»ã»S¶_ÿßþœþœþÛþOÿãÿvñ>Q%ÈHÆÿXÿÿÿGÿµÿ@ÐAzn‹Ûÿ0ÿ«þjþ}þßþƒÿH’Ó»S©åÿ/ÿ¯þ~þ£þÿ»ÿqvŽWáAŸÿÿÙþáþ0ÿ·ÿ[úr«–:¥óÿAÿ±þ[þPþþ ÿ²ÿk‹Ê¾sñP°ÿ+ÿÙþÆþ÷þ\ÿäÿqä&-ô‰„ÿ)ÿÿ-ÿ’ÿ'ÈU©¯cÍ Bÿšþ8þ/þ…þ&ÿùÿÍ|áížD‚ÿéþ“þ”þáþoÿÉM‘‹AÁ'‘ÿÿäþêþ,ÿŸÿ,·"][®‰ÿ ÿ»þ¨þÖþAÿÕÿ{{§Ž1ŸúÿbÿóþÃþßþ<ÿÍÿl÷Sf/¶vÿøþ»þÏþ0ÿÐÿ>ºæ¹9z¤ÿâþ[þ(þTþÕþ’ÿh*¹÷ßxÚ!pÿìþ¦þ§þëþbÿóÿƒõ8C¿OÝÿ„ÿQÿPÿ€ÿÛÿM½;)ßdÎÿ;ÿÈþþ þùþŽÿI—éç“÷3rÿÕþ‚þþ×þnÿ(Ú\•{sÃÿ&ÿÆþ³þõþ~ÿ3ð‹æëGÿØþoþPþƒþùþœÿMë]‘7¾1®ÿGÿÿÿJÿ«ÿ"”îÞ|•ÿEÿ%ÿCÿ˜ÿ«/„—^ß-jÿ¼þHþ)þeþöþÂÿŸgïîf£Îÿÿ”þjþœþÿÉÿƒ “XÝ>Ÿÿ!ÿÞþâþ(ÿ£ÿ6È5i`ž }ÿ ÿÊþÅþýþfÿïÿùJcBçg×ÿWÿýþÙþ÷þPÿÕÿlôRsMèT´ÿ(ÿÒþÂþÿ…ÿ1åuÁ¹X®Üÿ ÿkþþ#þþCÿ"þ¯Å*i¨ÿ ÿ±þ¢þÚþLÿÛÿhÕ  Öx¢ÿ]ÿGÿfÿ²ÿ–FY4ÙWÁÿ5ÿÊþ˜þ¦þøþÿ*Ô`·Â‚þN˜ÿûþ˜þ‚þ¾þCÿôÿ«B¥\Ðrÿïþ²þËþ3ÿÖÿ“@¶Ü¬*s¨ÿöþzþOþyþïþ˜ÿSûp£‹5²›ÿ?ÿÿ(ÿnÿÖÿH®óí¤<Îÿmÿ/ÿ$ÿOÿ­ÿ0¾>“®‚r¹ÿ ÿŠþLþdþÍþwÿB ¢òêˆàTÿÀþvþ†þëþÿO€¸›3™òÿ`ÿÿñþ&ÿ˜ÿ/Á4m^ †æÿNÿÝþ¨þ¸þ ÿŽÿ/ÌJ’fûpÛÿ]ÿÿèþÿ\ÿ×ÿaÞ6X=çhÙÿWÿÿþäþÿ|ÿÄY¼Ô˜ P‚ÿÎþWþ6þsþÿÍÿ¤aàÕR›Ûÿ5ÿÌþ°þäþYÿðÿŠB>ûŒ’ÿCÿ.ÿWÿµÿ5¿4yKÛD¢ÿÿªþ‚þžþûþ‹ÿ8äpÈÛ§4”çÿNÿàþ²þÎþ-ÿ½ÿ]ïTuOäN¯ÿ(ÿÚþÖþ ÿ­ÿ^™ÞÐmÈDÿ³þlþ|þßþÿ:égŸ‡(•ôÿcÿÿàþÿdÿêÿ|öEW.ÏQËÿ\ÿÿ ÿ8ÿ˜ÿª$wdÿjÂÿ ÿ§þiþtþÊþ_ÿÑmÎà h¯ÿÿªþ“þÎþMÿóÿœ#om!nÿ ÿêþÿ„ÿÁH‘?­øÿFÿ¹þpþwþËþ`ÿÉX©±mïM«ÿ$ÿÍþ¸þäþGÿÏÿ`à7Y@ï{õÿ}ÿ)ÿÿ!ÿtÿñÿ€\{UêKšÿöþ~þNþqþâþ‘ÿY¤èÕoÏmÿòþ½þÙþ<ÿËÿfå05ñwáÿUÿñþÐþøþfÿ°K±Ïž&|¿ÿÿ–þ[þoþÉþ\ÿ ·C˜«y |ßÿUÿôþÉþâþ1ÿ¯ÿ:¾I6ènåÿiÿÿüþ&ÿÿ¶7„‰AµPÿ¾þmþoþÄþ_ÿÚo¼·]Ä `ÿàþ¤þ¹þÿ­ÿTêPpIàN±ÿ+ÿÙþÆþùþiÿýÿ&vÜÿCÿÍþþ•þÜþYÿóÿ’lƒVì[Àÿ6ÿ×þºþàþDÿÐÿhë@T!·, ÿ5ÿÿÿsÿÿÿœ)‚‘NÁ?ÿ™þ2þ!þlþÿÒÿ¨^ÖûÆH—Üÿ8ÿÉþŸþ¾þÿ§ÿ<¾6ÉWÛÿnÿ)ÿÿ7ÿ‹ÿƒõE]>âZÂÿ1ÿÃþŽþœþñþyÿ!ÄGŽB¼zÿÿÅþÓþ+ÿ·ÿVçHb3¾ |ÿøþ²þ¸þÿ¬ÿe¡àÆZ«Þÿÿþ2þ7þþ)ÿæÿ¤@¢»"’úÿtÿÿóþ ÿSÿ½ÿ1™ãýçž:Ìÿlÿ,ÿ ÿJÿ§ÿ&¬!iv>É,…ÿ÷þ›þŠþÇþKÿûÿ³P¯½uå*mÿÑþxþsþÆþ[ÿÍZ¦žH¶ kÿöþÆþâþDÿÖÿz o’mqÍÿ5ÿÈþ–þ¦þ÷þvÿ£ftHçgáÿkÿÿþþÿiÿØÿQ¼èŽœÿ<ÿ ÿÿnÿôÿ“*˜Âš"nŸÿßþSþþ9þµþuÿQ¹ìÓ SÿÊþŠþ›þ÷þ†ÿ*¾)T>ëróÿ„ÿ?ÿ.ÿWÿ±ÿ'¡BH®)˜ÿÿÂþ þ¼þÿšÿ5É?€@Í:¨ÿ2ÿñþñþ5ÿ­ÿ@Ì4_AÝGŸÿ ÿ©þ‘þÍþVÿÔ|æû³SÿÍþZþ=þxþÿ·ÿv…¦{ |àÿ]ÿ ÿïþÿlÿáÿY¾ü â“,ÅÿqÿCÿCÿvÿÑÿE¸JH —lÿìþ—þ„þ½þ8ÿâÿš@´Ü²:ŒÌÿÿ þqþ™þ ÿ·ÿny•]á;“ÿ ÿÀþÃþÿ¥ÿQõn¨’2œïÿOÿ×þžþ®þÿŠÿ&·*c^¯.«ÿEÿ ÿÿ4ÿÿsÒ ãŽ®ÿXÿ(ÿ5ÿ{ÿóÿ„~²:š×ÿÿyþ þ!þ{þ"ÿöÿφ÷Ë<Àÿ!ÿÀþ°þñþmÿŸF5ägÞÿhÿÿÿGÿ³ÿ>Ì@ƒDÏ9¢ÿ ÿÍþµþÜþ>ÿÄÿWÞBqb§™ÿ1ÿ÷þûþ<ÿ®ÿ;Ç7rm%§ uÿÿÉþÝþ:ÿÑÿ*¤Ø·B“ÊÿÿˆþMþnþáþŽÿQ‰¿§D¯}ÿÿüþ ÿ}ÿûÿ~æ!!èÿ8ÿÿ#ÿlÿßÿfçI{q,´ ‰ÿ ÿ¶þ¤þÔþBÿÛÿ…!”ǯP¹]ÿÖþþ˜þíþzÿ%ÌKŠ{%›ÿÿqÿÿøþ+ÿ ÿ9ÙYž•>¨ôÿGÿÀþ~þ‹þçþ}ÿ0Ü^¦¢YÛE´ÿFÿ ÿ ÿGÿ¯ÿ)œõÓoúÿŠÿ8ÿÿ'ÿtÿìÿ| {º¸mè;‡ÿéþþ^þþ ÿ¶ÿu$¢ÖµJ«úÿ\ÿìþÆþîþYÿìÿ†QVš ‡ÿ*ÿ ÿ7ÿ£ÿ6ÕXª²mê<Šÿôþ“þxþ¨þÿºÿdükŠ;À1ªÿAÿ ÿ ÿHÿ±ÿ1®QRª%œÿ,ÿîþîþ2ÿ®ÿEãa©¥WËoÿäþ–þšþîþ~ÿ1ßg«D± lÿûþÎþïþTÿäÿZj3Ã3¥ÿ6ÿýþÿVÿÕÿmýk >´mÿæþ“þ„þ¸þ,ÿÆÿp ƒÀ¸nñW¼ÿ:ÿêþÚþ ÿnÿôÿ|î02÷Œ ‹ÿ0ÿÿ1ÿ”ÿ!»C˜¥aÝ-wÿßþ…þ{þÇþWÿÉ`ºÂyñFœÿÿÈþÂþÿ~ÿ IAÿ‘ ’ÿ6ÿ ÿÿkÿâÿnö_š”NÕ8–ÿÿ£þ~þŸþÿ’ÿ8×Rˆ?Â/ ÿ3ÿÿÿbÿÜÿeß+6ýüÿnÿÿÒþîþSÿïÿ E¹âµ;ˆÁÿÿŒþWþyþçþ‹ÿBðl§”<³€ÿÿÔþÚþÿÿ”ý9= ±>Ëÿlÿ5ÿ2ÿfÿÄÿ:²MH‘þÿiÿìþ¥þ¢þæþgÿ ´?”›VÖ2ÿ ÿÊþÓþ%ÿ®ÿOäMsLßE£ÿÿÀþ³þöþxÿ"Î\±¸rë=Œÿôþ“þtþ¤þÿ¨ÿNåUŠ€8Ç<·ÿGÿÿøþÿrÿàÿQ±éðÄr ¥ÿYÿ;ÿVÿ¦ÿ¦!r…NÔ+sÿÎþ_þ>þsþöþ¯ÿ{1±ßµ=’Øÿ2ÿÄþ¤þÐþBÿÙÿwùFL “rÿÿÍþÛþ)ÿ¨ÿ?ÓG†„EÑ@«ÿ,ÿÖþ¹þÛþ/ÿ¨ÿ0¬ 4%âwúÿ‚ÿ)ÿÿÿ\ÿËÿJÀ*¢ ”ÿÿÙþÛþ'ÿ¯ÿZ‹Ð¿Z±åÿÿ|þ%þ'þƒþ$ÿèÿ­N©³kæAžÿÿÐþÊþÿsÿøÿzß×w›ÿKÿ%ÿ3ÿpÿÑÿB°(Õgäÿcÿøþ¼þ¼þûþmÿÿÿ—iv<Æ,‡ÿûþ¥þ—þÕþQÿòÿ–hg“îÿQÿÛþªþÊþ6ÿÔÿ‡'”´NŒÿàþeþ8þ[þÇþfÿ¹5qk&·4¹ÿXÿ%ÿ$ÿVÿ¥ÿ^Ÿ¹¥j°ÿXÿÿÿ;ÿ’ÿ “ `{QèO¡ÿüþ€þHþaþÆþiÿ*âs»¯Q³úÿEÿ¼þ{þŒþèþ{ÿ$¾+Q+Ã5žÿÿÔþÎþÿ‰ÿ!¹1rn'ªyÿüþ°þ¢þÓþ6ÿ·ÿ?´ºPÜÿsÿ+ÿÿ+ÿrÿÚÿM¶üë’ŒÿÿÅþ¶þíþbÿÿÿ«D¥»úC}ÿÍþYþ7þlþïþ£ÿf†§uûW¨ÿÿ´þžþÒþ<ÿËÿYÍ ×uÿÿ“ÿEÿ*ÿGÿ”ÿ{ç*;²1¡ÿÿ¶þ†þ”þßþ[ÿðÿ‹ _uIãW¿ÿ6ÿÕþ¶þÚþ9ÿÂÿXß5L¨wÿ÷þ­þ°þÿþ‰ÿ6àe¦–3–Ùÿ&ÿ›þTþcþ½þRÿÿÿ§(g`›‹ÿ+ÿÿÿUÿ¼ÿ*ËÛ·j™ÿ@ÿ ÿ ÿ@ÿ¢ÿ!¦i~SìX²ÿÿ‘þMþTþ£þ.ÿÜÿ“-¨qý\²ÿ"ÿÈþ¶þíþaÿôÿ‹9+ÙT½ÿ2ÿÔþ¹þéþYÿðÿ”sEÌ0ÿÿ´þ«þäþVÿåÿxó<H°/¨ÿ8ÿðþßþÿ^ÿÒÿP¿ !²AÅÿTÿÿïþÿpÿõÿ‹v˜t m¹ÿ ÿŽþTþjþÌþjÿ#ÖZœŒ3¥eÿ÷þËþêþEÿËÿYÓåyõÿuÿÿøþÿuÿûÿn‰^õc¾ÿ)ÿ¹þ‡þ™þêþlÿ£$s„VõlÚÿVÿøþÑþæþ3ÿ©ÿ0¯ 4 ÕbÞÿjÿÿ ÿ:ÿ£ÿ2ËL—˜OÅ_ÿÈþmþeþ¬þ3ÿâÿ”(~ˆKÓ@±ÿCÿÿ!ÿoÿäÿhÞ)9 ¥"—ÿ%ÿàþ×þÿ€ÿª0¬‰*Ÿfÿìþ¨þ¦þáþWÿêÿŠokˆóÿlÿ ÿìþ ÿdÿãÿnç/;œ‘ÿ,ÿÿÿzÿ¥5–¯yÿX£ÿÿžþ…þºþ5ÿÛÿŒ&Š¥w xÜÿWÿÿçþÿoÿíÿtè4G"ÎYÛÿmÿ#ÿ ÿ.ÿƒÿûÿƒÿ[‚lŸ vÿÿÆþÌþÿÿ+ÆD‰‰EÇ/—ÿ!ÿçþòþ>ÿ»ÿJÏ)D¸2©ÿ;ÿÿÿpÿÿÿ¤D¸çÇ[¶øÿ?ÿ°þcþgþµþ?ÿëÿ—*Ч‚(©£ÿKÿ&ÿ8ÿxÿÚÿK³üÃaòÿÿMÿ;ÿbÿºÿ6¾6ƒ’_ñX³ÿ!ÿÁþ¨þÙþNÿìÿš/¥nø]»ÿ7ÿîþíþ5ÿ´ÿMâPd ~âÿUÿöþ×þÿnÿ¨=¤É§F·uÿüþ¸þ´þñþ]ÿçÿwôGdL– ²ÿgÿKÿaÿ§ÿ {Ùð“Ÿÿ=ÿ ÿÿhÿæÿ„³–1•àÿ7ÿ»þ‰þ©þÿ¼ÿz+©ß¿X» cÿìþ¹þÐþ(ÿ­ÿBË*P7èzÿÿ“ÿNÿ=ÿbÿ¶ÿ(£WmIô{ñÿoÿ ÿÛþäþ$ÿ“ÿ¨_i8ÔSÍÿ`ÿ!ÿÿYÿÃÿFÅ"F(ÏH´ÿ2ÿâþ×þÿÿJý—ï÷ªUÿãþwþ]þ–þÿ¿ÿu¤‚&¡“ÿ<ÿÿ1ÿtÿ×ÿB ÞïÓ’9ÜÿŽÿeÿgÿ—ÿîÿ_Ô7ps=ÑC§ÿÿ¼þ›þ¿þ#ÿ¶ÿ[õc‘s‡çÿXÿúþßþÿ~ÿ¶;‡ˆ@»qÿñþ¯þ¼þÿ¡ÿLòp¯£QÊ+ŽÿÿÒþÐþÿ{ÿŠ÷9DÆXéÿ‰ÿQÿCÿfÿ­ÿ qÄöùЀ¬ÿXÿ-ÿ8ÿ{ÿíÿys¨™B²þÿJÿ¸þfþhþ¹þPÿÒqÒÞšc²ÿ#ÿÓþÌþÿ†ÿ«I7êtïÿxÿ*ÿÿ@ÿÿWd9Û^Õÿ\ÿÿéþÿOÿÃÿFÄ%VS³5·ÿQÿÿÿBÿ ÿ–ø) Ûißÿ]ÿÿßþÿpÿ ¿bÔüÎTÒÿÿ‡þGþ^þÂþcÿÈI…x+¯!£ÿJÿ,ÿGÿ’ÿüÿkÆø÷Åm™ÿIÿ&ÿ5ÿwÿÞÿ[Ö6li0È?°ÿ1ÿÚþ¼þÜþ5ÿ»ÿSâN€oœkÿùþÄþÖþ*ÿ±ÿQäOvW÷hËÿ?ÿèþÖþÿ‡ÿ&ËS £YÕ0†ÿýþ±þ©þèþ^ÿðÿ…ú<E±<Æÿmÿ=ÿBÿvÿÏÿ9ŸíÿÄfõÿ†ÿ4ÿ ÿÿ\ÿÉÿPÙG…„CÉ)ÿïþ“þzþ¯þ(ÿÏÿ‰/ É¦9šìÿQÿæþÀþãþDÿÌÿ]Óáw÷ÿ~ÿ-ÿÿ>ÿ ÿ'¸5€SãM«ÿ ÿÃþ¥þÅþ!ÿ¤ÿ5½!QJ §,·ÿYÿ(ÿ(ÿ[ÿ´ÿ&”íÕlìÿlÿ ÿØþçþ4ÿ·ÿXøw»¶f×'rÿàþŒþ„þÉþNÿôÿ›!ik&­ÿ,ÿÿÿeÿÙÿXÄ ×uùÿÿ#ÿùþÿ[ÿÔÿfò^–HÏ6šÿÿ¸þ˜þ¶þÿÿ$°VSª"›ÿ/ÿòþñþ*ÿ–ÿ£ C=÷ôÿlÿ ÿãþÿ[ÿäÿbzJØ<˜ÿ ÿ²þ¤þÝþUÿðÿ’bk0¿/Ÿÿ.ÿðþñþ-ÿ•ÿì Ígïÿ~ÿ+ÿÿÿcÿÓÿYÝF~{>É4“ÿÿ£þ{þ˜þôþÿ%Â<}{8Á1¦ÿ;ÿÿÿXÿÈÿG¸ÿ Üwõÿsÿÿèþÿ\ÿæÿ‡ƒ¦uÅÿ$ÿ±þƒþ þÿ‘ÿ6ÒF}r*¶+¥ÿ?ÿÿÿ:ÿ—ÿ yÑþûÉoÿÿÿ8ÿÿÿVÿÃÿK×I“VäG¦ÿÿ¾þ£þÎþ8ÿÊÿfë@S$¼4¬ÿAÿ ÿÿeÿÝÿjê=R#º)’ÿÿËþÇþ ÿŠÿ,Ñ[¬¶ze¿ÿ/ÿÏþ®þÏþ+ÿ°ÿBÌ3e]!¹9¼ÿVÿÿÿ9ÿŽÿýÿpÏå‘$ºÿhÿDÿXÿ¡ÿœp‹búd»ÿ"ÿ·þ•þ»þ&ÿÆÿsyv yÚÿSÿþþíþ ÿŒÿ©ZY¨—ÿ1ÿýþÿMÿÀÿMØEƒ…NâXÆÿGÿðþÍþçþ5ÿ¯ÿ9¾'ab.ÍSÜÿ|ÿIÿIÿ}ÿØÿG¬óäÿ:ÿÿÿdÿìÿ‘4²íÛzÛ\ÿÆþsþsþÂþQÿ´C•¡eõeÖÿhÿ*ÿ)ÿ`ÿÂÿ:«+ 䄤ÿTÿ*ÿ7ÿrÿÔÿPÇ)af5×YÕÿdÿÿÿ,ÿ†ÿPc9ØTÈÿRÿ ÿÿ@ÿ®ÿ;È3dSÿzÞÿOÿîþÎþüþlÿ ¿]Çë½L¨ñÿNÿ×þ£þ¶þ ÿŽÿ(µ"XV»DÓÿ{ÿNÿNÿyÿÊÿ)†Îñêºk ±ÿoÿVÿmÿ²ÿ”WtUûsÔÿ@ÿÑþ þ¶þÿ¨ÿVþ}¹«Q¿sÿýþÆþÛþ1ÿ¼ÿUß9W-ÊC¶ÿCÿÿÿBÿ¸ÿJßU–™ZéV½ÿ=ÿæþÆþãþ/ÿ¢ÿ"–îæ’0Óÿÿoÿ|ÿ´ÿj¿ø݇”ÿ*ÿéþäþÿ“ÿ0Ó`¸É‹Wšÿôþ‡þfþšþÿ½ÿt¢zâÿ`ÿ ÿ÷þ ÿ}ÿöÿrÑýÃcïÿ…ÿ8ÿÿ2ÿyÿäÿ`Ô&N@—™ÿ3ÿôþêþÿmÿäÿcÐ. µ<¼ÿIÿÿìþÿxÿûÿ‰þELšiÿîþ«þ°þÿ‹ÿ5ß`¥šE³YÿÔþþ•þáþcÿ™ LI ž£ÿFÿÿÿRÿ¦ÿ d¡·¢eµÿgÿ8ÿ6ÿbÿ¸ÿ+¦_tPóhÊÿ1ÿ¹þxþzþÀþ?ÿâÿ‰j}HÕ=¢ÿ!ÿÕþÌþ ÿ}ÿœ:)×VÅÿBÿìþÕþÿkÿþÿ–k{GÙD«ÿ%ÿÒþ¸þÞþ:ÿ·ÿ<¯üÿºXíÿ‘ÿUÿBÿ]ÿžÿúÿ\°åîÈv’ÿ-ÿîþâþÿxÿ¤0•º—0’Ûÿ0ÿ¬þkþuþËþ[ÿ¬+le›‚ÿ$ÿÿÿwÿòÿvàâz÷ÿ|ÿ ÿúþ ÿ[ÿÒÿYØ2WCõöÿuÿÿâþéþ(ÿ’ÿ˜GV,ÓXÔÿ`ÿÿñþ ÿXÿÉÿI½ * ·<¸ÿCÿûþìþ"ÿ‘ÿ)ÇMŸ¬mîFšÿ ÿ¬þ›þÑþGÿßÿ}üJT³1²ÿTÿ&ÿ1ÿqÿØÿL±ôÞ‹©ÿHÿÿ ÿCÿ¥ÿ'®#sŠh ‰ñÿ_ÿêþ¨þ£þÜþKÿÞÿwýZ{_„óÿrÿÿõþÿbÿÙÿXÄ ×qðÿvÿÿùþÿuÿž*Š©wÎÿ4ÿËþ£þÀþÿ£ÿ6¸.ÀLÕÿoÿ4ÿ(ÿRÿ¨ÿ‹ê")û¢,®ÿAÿúþåþÿ_ÿÛÿhíN~o$¦yÿÿþ¸þ±þïþdÿ÷ÿ S\$·/¨ÿ@ÿ ÿÿ[ÿÊÿJ»ç†ÿÿéþøþFÿÈÿbõc—…0¦gÿíþ©þ©þçþ[ÿêÿ}ô@U/Øaãÿvÿ(ÿ ÿ!ÿeÿÊÿ:¡ëõ°I×ÿnÿ&ÿ ÿ,ÿÿøÿ€øKe>ÜP¶ÿ,ÿÎþ°þ×þ>ÿÏÿmõQi?ØNÁÿKÿÿÿ:ÿ ÿ ˜ðôž%ÿ)ÿáþÓþÿtÿ¨5•ºB¶yÿüþ¯þŸþËþ+ÿ¬ÿ4°0 à} £ÿWÿ7ÿIÿ‰ÿêÿR±ë÷ÍtŒÿ/ÿÿ ÿWÿÒÿgõa’|!‘çÿGÿÐþ˜þ©þÿÿ4Ì;kV}êÿgÿ ÿëþ ÿ`ÿÚÿ_Ð-±:½ÿQÿ ÿ÷þÿpÿêÿnç@gW£™ÿ,ÿèþÛþÿcÿÙÿWà õ¡/½ÿ_ÿ+ÿ.ÿiÿÏÿI½. ³3§ÿ-ÿâþÕþÿ…ÿ"ÃJš [×/~ÿîþ”þþ¹þ1ÿÐÿve…g“ ”ÿ>ÿÿ(ÿdÿÀÿ%¼Ñ¼*Íÿ|ÿLÿDÿkÿ½ÿ+¢ Qd@ådÓÿOÿíþÃþÚþ-ÿ°ÿCÌ1[Dïoãÿfÿÿÿþ+ÿ‘ÿ£MEú{âÿQÿæþ¶þÎþ,ÿ¾ÿe}¹®]Ù9žÿ!ÿÕþÆþõþTÿÐÿRÀ &Ïsºÿ|ÿgÿzÿ´ÿXžÊˤTóÿÿAÿÿ)ÿpÿäÿtþp­¦[Õ.…ÿùþ§þ›þÛþYÿúÿœ mq0µŒÿÿåþñþ>ÿ¼ÿKÑ0YBñwðÿxÿ&ÿ ÿ%ÿuÿéÿgÙ*H3ꀒÿ:ÿ ÿÿHÿ¥ÿ†áõ£9Íÿtÿ>ÿ:ÿiÿ¿ÿ-˜í¾NÊÿNÿùþÛþÿmÿ«D¯Ó©5ŒÑÿ$ÿ§þnþ‡þçþ|ÿ&Ä8oc£§ÿRÿ.ÿBÿƒÿäÿIŸÔÝ·m®ÿeÿ<ÿBÿsÿÌÿ9¨;C»@¼ÿEÿðþÎþåþ5ÿ¯ÿ:Á'[S —Šÿ$ÿ÷þÿSÿÌÿQÊ0™ wÿûþ³þ²þøþ|ÿ$Ï\°½gÄÿ8ÿÞþÁþæþ@ÿ¸ÿ5Ÿãõ×1Óÿ‰ÿ_ÿaÿ‰ÿÔÿ/„Æå×¢Jâÿ}ÿ1ÿ ÿÿSÿ¾ÿ?Å3v|DÓ<Ÿÿÿµþ˜þÂþ.ÿÆÿiü_ƒ\õeËÿDÿêþÒþÿþcÿêÿsââuóÿyÿ#ÿÿÿrÿîÿxñFbDîqéÿmÿÿéþùþ:ÿžÿƒØýÊt §ÿXÿ.ÿ3ÿhÿÀÿ,•é Îhêÿpÿÿâþðþ<ÿ»ÿRé]›=®VÿËþ}þwþÀþCÿçÿ‹]h/Ä?Àÿ_ÿ.ÿ9ÿtÿÓÿ=•ËÏ JÜÿsÿ$ÿÿÿYÿÉÿMÏ6ps;ÕLÀÿCÿéþÁþÕþÿŽÿô,,÷– §ÿGÿÿÿPÿ¶ÿ3¬2ÏSÅÿAÿãþÀþãþFÿÕÿtjisÕÿIÿêþÈþìþIÿËÿTÈ$ú£1Àÿfÿ4ÿ8ÿkÿÅÿ.’ÙöãŸ;Éÿ_ÿÿîþÿJÿºÿBÊ9}‰WñgÏÿEÿàþ²þÄþÿÿ ªLBù…ýÿzÿÿñþ ÿWÿÎÿO õ•ÿ<ÿ ÿÿdÿÞÿkîLoSöoØÿMÿëþ¿þÖþ'ÿ£ÿ1²G?›&µÿ]ÿ/ÿ1ÿdÿ¹ÿƒÒøó¼cõÿŠÿ7ÿ ÿÿWÿÅÿNÙO—žfó\ºÿ,ÿÊþ¨þÎþ.ÿ¸ÿLÐ(D!ÊSÚÿxÿFÿMÿ‹ÿñÿgÐ"õ“‘ÿ&ÿëþìþ/ÿ¥ÿ8ÍH’œeögÏÿHÿëþÄþÜþ*ÿŸÿ'§ FH¿QàÿƒÿKÿAÿjÿ¶ÿƒÕûÂbíÿzÿ#ÿûþÿ_ÿÚÿkõ_|)¦}ÿÿãþ÷þGÿÄÿPÍ"=¼?½ÿQÿÿÿHÿ°ÿ1®B7õ†…ÿ#ÿòþúþ<ÿªÿ0µ$guHêlãÿhÿ ÿäþòþ6ÿ¢ÿ" ?Dµ@Ìÿlÿ7ÿ5ÿhÿ¿ÿ)ŽÔíσ¤ÿEÿÿÿ`ÿ×ÿmÿr­¢OÄvÿóþ©þ¨þìþgÿþÿ” PT²2µÿSÿÿÿSÿ°ÿ Œà Îv ¡ÿPÿ$ÿ)ÿaÿ¾ÿ5®R^0ÓTÌÿNÿöþÒþìþ:ÿ°ÿ4®+Ì`êÿ†ÿGÿ@ÿoÿÍÿA±!¨%”ÿÿ¿þ¬þáþUÿôÿ 9£È£;¥ÿÿcÿðþ¶þ¿þÿvÿüÿ{àë•0Íÿ|ÿSÿSÿ€ÿÊÿ(Èíå´`ýÿ™ÿNÿ(ÿ3ÿrÿÕÿNÄ!PDü‹xÿÿÛþçþ3ÿ®ÿ@Ï9kYŠøÿqÿÿîþ ÿfÿåÿnæ2? ¤”ÿ"ÿâþÞþÿŒÿ¬(w‰_ƒûÿ€ÿ&ÿýþ ÿGÿ§ÿÖ׉,Íÿ‚ÿ\ÿcÿÿÞÿ;“ÑêΉ$¶ÿUÿÿÿMÿ¹ÿEÚX¦°nñJšÿÿžþ‚þµþ(ÿÆÿoe†`|ñÿyÿ/ÿÿFÿšÿ xÏûô»_òÿŒÿAÿ ÿ2ÿvÿÞÿWÎ-ac4Ùdèÿzÿ-ÿÿ"ÿcÿÅÿ1˜áþëªKáÿ…ÿJÿ@ÿlÿÈÿ<¶MF‰öÿeÿõþ½þÌþ!ÿ­ÿT÷xº²^×/Œÿ ÿÀþ¼þûþlÿöÿ€ð/6°Gáÿ‘ÿiÿmÿ›ÿåÿ=ŒÅØÂˆ2Õÿ€ÿGÿ2ÿOÿ–ÿûÿqß3\O ž•ÿ)ÿìþéþ"ÿŽÿ¤Za&µ*›ÿ)ÿíþòþ6ÿ¬ÿ:Â(U>êlÝÿ^ÿÿëþÿsÿûÿŽb{TõuèÿmÿÿøþÿZÿÄÿ9¤ó Ö†*Ôÿ–ÿ|ÿŠÿ»ÿS›ÊѯfœÿCÿ ÿÿ<ÿ¡ÿ-ÃM­Ï¬F°_ÿàþ¢þ«þüþÿ¶,eZžÿDÿ$ÿBÿ‘ÿwÛâ…¡ÿMÿ%ÿ7ÿzÿåÿbÛ6d[»BÉÿcÿ%ÿÿ:ÿ‡ÿîÿ\¿ÿ¾aúÿÿ_ÿLÿlÿ·ÿ ’ô3= ª)œÿ%ÿÛþÑþ ÿ€ÿÁP®Ä’!ˆãÿSÿõþÖþýþ\ÿÜÿeØ+þ¦8ÌÿxÿPÿ]ÿ–ÿôÿZ¸÷ í¤B×ÿ|ÿ@ÿ2ÿTÿ¤ÿ…ò>ZFúŒ…ÿÿàþÛþÿvÿüÿ‹YsRúöÿ|ÿ)ÿÿ/ÿƒÿøÿsÜÝsôÿtÿÿïþÿ_ÿàÿves™~ÿÿñþÿMÿ»ÿ6¦õý¼]÷ÿžÿdÿVÿsÿ¹ÿqÂòõÍ}¨ÿIÿ ÿÿþ'ÿ‚ÿÿÿŒqŸAÃ)ÿ ÿ¾þ²þçþRÿßÿtòAQ&ÇNÒÿpÿ?ÿEÿ‚ÿâÿT·öÓvüÿÿ ÿðþüþDÿ¾ÿMÜM‹ˆJÛQÈÿUÿÿÿ)ÿ~ÿíÿbÂì£=Õÿxÿ<ÿ.ÿNÿ˜ÿÿÿpÕ3Ë\àÿmÿÿÿÿrÿìÿzúW|a ‡òÿhÿÿÝþ÷þKÿÆÿRÎ"=ÉUÞÿ|ÿHÿIÿ€ÿÞÿO¹ü¬:¾ÿPÿ ÿ÷þ!ÿ~ÿÿÿŒ fy-¸.¤ÿ5ÿòþåþÿhÿÜÿ]Ð!C0ÿ_ÿ<ÿMÿ‰ÿéÿT³õà!°ÿRÿ ÿ'ÿiÿ×ÿ`æOr$¤yÿ ÿÒþÞþ(ÿ¡ÿ/µJ<øªÿ]ÿEÿaÿªÿzÕ áˆÿ5ÿôþåþÿjÿæÿrö\’ŽTìgÜÿeÿÿúþÿ`ÿÍÿC®ö óªCÙÿÿPÿQÿ„ÿßÿNµ÷£,«ÿ;ÿöþîþ&ÿ—ÿ*ÃC‘œcñ\Áÿ:ÿåþÍþøþWÿÖÿ`×%=ÒhõÿÿNÿ6ÿNÿÿëÿR«éüä¢FÝÿ~ÿ<ÿ$ÿ>ÿ…ÿíÿgÚ0WJ˜˜ÿ7ÿÿÿMÿ¶ÿ3ª$ÂS×ÿjÿ&ÿÿHÿ¦ÿ# :2ì{òÿmÿ ÿãþúþMÿÏÿdó^“†;Â0œÿ$ÿÙþÈþñþHÿ¾ÿ=¯&é—6Üÿ›ÿ|ÿ…ÿ²ÿøÿG¼ÂžWøÿ”ÿBÿÿÿ[ÿÅÿIÓC„†J×A©ÿ'ÿÚþÎþÿpÿþÿDG Ÿžÿ=ÿÿ"ÿkÿÚÿZÍ6ÂMËÿVÿÿëþ ÿ[ÿÏÿTÐ.[WÁIÒÿmÿ-ÿÿ7ÿ{ÿÚÿA›Úî×›Fêÿÿoÿlÿ•ÿáÿ@ŸçêŸ/¬ÿ4ÿáþÆþîþRÿâÿ†‰µ—7§iÿ÷þÃþÖþ%ÿ¢ÿ1¶='Þoóÿƒÿ5ÿÿ0ÿrÿÒÿ;˜ØìÔ•=ÞÿŒÿWÿKÿjÿ®ÿuÕ,Ìcìÿyÿ#ÿùþÿBÿ¨ÿ#šø( 䀒ÿ=ÿÿ2ÿ~ÿïÿmÝ"-ú“ zÿÿÁþÀþÿ‚ÿ!ÃJœ©qnÓÿMÿóþÔþñþ?ÿ®ÿ'Ùõã¬\»ÿ‹ÿÿšÿÒÿg£Ã¼‘GêÿÿEÿ!ÿ+ÿcÿÅÿ>¾(hp>ÕJ²ÿ+ÿÑþ°þÕþ2ÿ»ÿQ×4U4ÞbÛÿkÿ#ÿÿHÿ©ÿ$Ÿü(Ð[ÔÿUÿ÷þÐþæþ4ÿªÿ4¸QL¶BÑÿvÿBÿ<ÿ`ÿ¦ÿZ¢Êˤ` µÿqÿNÿTÿƒÿÒÿ4•âù»XÝÿhÿ ÿÝþíþ6ÿ²ÿHÝT“ŒEÃ#‚ÿÿ´þ®þíþaÿôÿ‡ü@D ¨,¶ÿ\ÿ1ÿ:ÿuÿÏÿ5ÉÕ±h¤ÿRÿ%ÿ)ÿZÿ³ÿ"“ö3AÎcëÿ|ÿ,ÿÿÿMÿ«ÿŠà  Ö{ ™ÿAÿÿÿWÿºÿ3§ü# ÁKÄÿGÿñþÕþûþ]ÿèÿ„q”oƒçÿYÿòþÇþÙþ$ÿ”ÿƒÑñߣNõÿ¬ÿƒÿ„ÿ«ÿîÿB’ÈÜÆ)¿ÿ[ÿÿíþýþ<ÿ¤ÿ%§awSû~ðÿlÿÿ×þáþ#ÿ’ÿ˜û+$ãwùÿ„ÿ/ÿÿ)ÿwÿêÿhÔ"ò’‘ÿ+ÿôþúþ7ÿ¦ÿ.®JB™¢ÿDÿÿÿNÿ©ÿ€ÐøóÂs·ÿqÿPÿZÿ‹ÿÚÿ;—Þþñ¶Xäÿrÿÿåþéþ#ÿÿ©%u‰_üsÜÿWÿýþÛþûþSÿÐÿZÑ4¸DÌÿlÿ5ÿ6ÿkÿÃÿ0”ÙïÑ…®ÿRÿÿÿWÿºÿ7º%grEéiâÿjÿÿêþúþ9ÿžÿŠç$ü®IâÿŒÿ[ÿSÿzÿÇÿ*ÞþÅbëÿtÿÿóþÿPÿÌÿ^í]–ŽIÐ>°ÿAÿÿ ÿFÿªÿ%—çñ¬Kàÿ‰ÿYÿXÿ‰ÿâÿO¹-Úsùÿƒÿ)ÿþþÿEÿ¯ÿ0¶&n„^ “ ÿ+ÿøþùþ/ÿÿ~á&þ­DÛÿ‰ÿ]ÿbÿ—ÿñÿ\¾ñž*­ÿDÿÿýþ0ÿ˜ÿ ¬ch2ÉC¼ÿOÿÿÿFÿ©ÿ&žý-*ð­ÿXÿ-ÿ4ÿiÿÂÿ,”ã Ô~¨ÿSÿ!ÿ ÿPÿ¨ÿ—K`Añ{öÿ{ÿ"ÿùþÿJÿ¶ÿ2¨þ&Øv ©ÿmÿ`ÿ…ÿÕÿ;Ÿèç˜%¤ÿ3ÿêþÚþ ÿrÿž*ˆ­3¯ÿ$ÿñþöþ1ÿ•ÿ ƒßî =Üÿÿaÿ]ÿ€ÿÅÿx½æãµg¡ÿTÿ,ÿ6ÿoÿÔÿOÌ0hh/Æ?¸ÿHÿÿýþ.ÿÿ „âÌhõÿŽÿKÿ;ÿbÿºÿ/©EB–‚ÿÿÒþÍþÿmÿ÷ÿ‡Yx_¥(³ÿXÿ'ÿ%ÿQÿ¡ÿe³âèÅ€)Ñÿ‹ÿgÿiÿ•ÿàÿ<–ÖñÜ›:Íÿiÿ&ÿÿ=ÿ—ÿœ^n@ÙJ´ÿ0ÿÚþÅþïþSÿÜÿmë:Q)ÐVÛÿsÿ4ÿ,ÿVÿ©ÿ€ÒýøÃjüÿ‘ÿ<ÿÿÿAÿšÿ ~ä%: ÚvœÿNÿ'ÿ0ÿeÿ¼ÿ#†Ïñå®Vñÿ—ÿYÿIÿeÿ°ÿ~Óýõ´JÅÿGÿèþÀþØþ0ÿºÿ[÷m©ŸRÎ/‘ÿÿÈþ»þìþNÿÌÿK²òÞ—;àÿ˜ÿqÿpÿ—ÿØÿ(t§¾«w&Éÿoÿ-ÿÿÿZÿ¹ÿ,žü4;·BÈÿ^ÿÿ ÿ.ÿ€ÿðÿeÄúüÇfìÿtÿÿòþÿLÿÂÿHÅ> ÈH¹ÿ:ÿâþÅþçþCÿÅÿU×3XCù‡ÿ5ÿÿ ÿ9ÿŒÿîÿM–¾¿›[ÄÿŽÿuÿÿ­ÿóÿDŒ¿Ë°n¥ÿDÿÿñþÿfÿàÿièBfMøvßÿRÿèþ·þÈþÿ—ÿ)³F4ésïÿwÿ%ÿÿÿmÿÖÿI©ãëÀjÿÿ’ÿ?ÿÿÿMÿ©ÿë'ý«AÑÿnÿ,ÿÿ#ÿ_ÿ¶ÿr¶ÔÌšOõÿ¦ÿnÿ_ÿxÿºÿxÊùøÂ]ÜÿUÿçþ¥þ¢þàþXÿõÿš(†£x€âÿYÿúþÖþñþCÿ¶ÿ4áôÓ‰)Çÿ{ÿTÿWÿ…ÿÑÿ,~·É³v¾ÿhÿ,ÿÿ2ÿuÿÙÿK· 73¤1¹ÿTÿÿÿþÿlÿ×ÿL³ö ê™,¶ÿSÿÿÿ>ÿÿ”ø-&çtêÿdÿüþÉþÕþÿ–ÿ&¯PK Ÿ!§ÿKÿÿ#ÿYÿ²ÿw¹ÔÄŽ<ãÿ–ÿbÿTÿlÿ§ÿùÿPšÊÔµp¯ÿWÿÿ ÿ-ÿzÿìÿmåAjZœ {ÿÿ½þ²þæþOÿ×ÿcÚ$5 ²?ÌÿqÿAÿGÿÿÛÿF¥ãïÇr‹ÿ-ÿ÷þúþ/ÿ”ÿ‘û9DÁPÚÿvÿ7ÿ#ÿ?ÿ‚ÿßÿC˜ÓæÐ”@æÿ—ÿbÿTÿmÿ­ÿi¿öߣÿ5ÿêþÒþöþQÿÕÿkö]|,¯ÿ$ÿîþôþ4ÿ›ÿ‡×÷ã¡Bàÿÿeÿiÿ™ÿîÿR¯ïä—-µÿKÿÿëþÿUÿÆÿE¿MJ»IÔÿrÿ3ÿ"ÿ?ÿˆÿëÿX¸úù´Oáÿ{ÿ5ÿÿ4ÿ{ÿáÿT¸üï›,¶ÿSÿÿÿGÿ¬ÿ/¯VW³.«ÿDÿ ÿ ÿ@ÿ ÿ‚Ôúñ¸_üÿ£ÿiÿXÿtÿ¹ÿyÌüÛŒ!±ÿOÿ ÿúþÿeÿÓÿUÐ0fg3ÑTÐÿ^ÿÿòþ ÿYÿÇÿ@­ú¿^ôÿšÿbÿXÿÿÐÿ5•ÚôÛ$®ÿGÿÿÿþ/ÿ“ÿ¥gyOíjÞÿeÿÿöþÿ\ÿÇÿ; èî°Yüÿ©ÿvÿiÿƒÿÅÿ~Îí¢7ÅÿZÿ ÿëþþþFÿ²ÿ5µW\+ËSÙÿvÿ;ÿ7ÿdÿ¼ÿ(Þñ¯Oãÿ‡ÿOÿEÿqÿÈÿ6¥ù#ÒdäÿjÿÿéþþþIÿÀÿMÓ<tu=ÙX×ÿlÿ%ÿÿ,ÿtÿ×ÿD¦í üÈvÂÿ‚ÿeÿsÿ¦ÿõÿP¡ÙìÑ‹-Åÿkÿ0ÿ%ÿMÿ¥ÿ˜JY/ÒUÑÿbÿÿÿ=ÿœÿò&$í‹£ÿPÿ*ÿ:ÿ|ÿàÿU¼û²DÍÿeÿÿÿÿkÿÛÿ[Ô2ef5×bæÿzÿ.ÿ ÿÿVÿ¯ÿsºÜÕ§`Èÿÿ•ÿ¹ÿüÿS§çýçœ1µÿEÿôþÙþûþUÿÚÿpú^‹t#£‰ÿ$ÿ÷þÿLÿ¹ÿ5¨û Ëiÿÿžÿ`ÿIÿbÿ¢ÿþÿaµîýâŸ@Üÿÿ?ÿ%ÿ7ÿuÿÒÿ?¨ü*+üªA×ÿÿIÿ@ÿgÿ³ÿwÅïì¸cþÿ ÿ_ÿHÿhÿµÿ"–ù6:™„ÿÿËþÆþÿþpÿ–h~Wú}øÿ„ÿ6ÿÿ3ÿxÿÜÿH¨ìõ¼lÅÿŒÿuÿ„ÿ³ÿ÷ÿC…¯»žd¿ÿwÿMÿKÿvÿËÿ9«Td>äiáÿiÿÿóþÿaÿ×ÿZÍ5ÂPÙÿwÿ>ÿ;ÿnÿÏÿE· 6$ÝnëÿqÿÿíþýþDÿ³ÿ7¶V^3àv©ÿiÿRÿeÿšÿçÿ:ƒ´Æ²ƒ>÷ÿ¼ÿšÿ™ÿ¾ÿR¤ãÿð´SáÿoÿÿòþÿLÿÅÿVçY›[åP»ÿ>ÿóþäþÿxÿöÿwÝí”*Åÿ{ÿ]ÿnÿ¬ÿ nÇñ¨EÚÿ}ÿ?ÿ'ÿ?ÿÿÜÿF¦ï ÞŽ0Óÿ‹ÿeÿfÿ‘ÿÜÿ8”ÝÿÌx­ÿ^ÿ8ÿDÿÿäÿWÆ3ÈPËÿOÿùþÜþÿþ\ÿãÿzfw"¥–ÿ6ÿ ÿÿUÿ¸ÿ(Ž×õêµgÎÿ¡ÿ—ÿ³ÿëÿ5}´ÏÅ•Jîÿ•ÿNÿ(ÿ-ÿ`ÿ·ÿ(J`Dö‡ ‘ÿ7ÿ ÿÿXÿÁÿ:° 5'ç~™ÿKÿ.ÿHÿ”ÿÿÿsÖé‹–ÿ5ÿÿÿ@ÿ«ÿ.±[d8ßkùÿ—ÿYÿEÿ`ÿœÿíÿA„¬²“ZÏÿŸÿ‰ÿ—ÿÉÿmÁþÈdðÿzÿÿåþâþÿ€ÿ“c\‚÷ÿwÿÿýþÿfÿÖÿT¿ö¥:ÏÿvÿGÿKÿ~ÿÖÿ>Ÿãûä:Ïÿoÿ3ÿ#ÿFÿ“ÿüÿmÐ-ÑpŸÿUÿ0ÿ8ÿkÿ½ÿ}ÈñðÇ{ÃÿxÿQÿUÿ„ÿÖÿ=¢ñ Ïjëÿrÿÿßþéþ*ÿ›ÿ&­XX¶4µÿQÿÿÿQÿ­ÿ‡Õöê®XûÿªÿwÿmÿŽÿÐÿ'z»×É‘7Ïÿlÿ"ÿþþ ÿEÿ§ÿ!QiN“›ÿ:ÿÿþþ,ÿÿíÿ[¹òûÕŠ)ÆÿyÿSÿ\ÿ“ÿíÿTµõç”#¥ÿ;ÿöþæþÿqÿðÿví8N*×eðÿŠÿKÿ=ÿ`ÿ«ÿ kµÝØ©Zýÿ¦ÿfÿIÿXÿŽÿäÿF¤ê Êo•ÿ;ÿÿÿþ+ÿƒÿùÿxì>aNš£ÿFÿÿÿLÿ§ÿ}Ëïá¦Míÿ˜ÿfÿ_ÿŠÿÛÿA¤ðü¶LÓÿhÿÿýþÿhÿÚÿZÐ"F/ê—ÿCÿÿ&ÿ`ÿ»ÿ&ŽÞ  â–8ÛÿŒÿ_ÿXÿzÿ¾ÿn¸äæ»m £ÿNÿÿÿOÿ­ÿ%¡ MY.ÓYÛÿmÿ(ÿÿ>ÿÿûÿhÀñî¾k ³ÿyÿkÿŽÿÙÿ>¦ø$ßyùÿ|ÿÿÚþØþ ÿoÿðÿyòGkY±;Ëÿpÿ;ÿ3ÿXÿ¡ÿÿÿ_±äîÑ“?éÿ¢ÿzÿyÿ ÿæÿ=‘ÐéÔ“2Åÿbÿÿÿ)ÿÿ÷ÿ}õKhNû†Žÿ=ÿÿ:ÿƒÿíÿ]»õýÓ²ÿbÿ9ÿ?ÿvÿÒÿ@ªü'"í‘!¯ÿPÿÿÿ)ÿvÿÞÿQ¹+ í–/Íÿ|ÿQÿOÿyÿÄÿ {ÀãÙ¨Xüÿ¨ÿmÿ\ÿyÿÀÿÑý÷¿^æÿrÿÿòþÿPÿÈÿUÞH}u/½1¨ÿ9ÿùþòþ ÿzÿêÿ^¼õßšCìÿ¥ÿ}ÿ{ÿŸÿáÿ1¾ÝÖ§[þÿ¢ÿVÿ*ÿ*ÿVÿ¨ÿ|Ý+ ¾Xèÿ„ÿDÿ/ÿPÿ˜ÿþÿhÂ÷ýÒ²ÿhÿEÿWÿ›ÿrØ*ÿ¡$œÿ$ÿÕþ¿þæþEÿÈÿYÞ@qg)ÅMÙÿ{ÿCÿ7ÿWÿ–ÿèÿ;ª±–a#ßÿ¯ÿ—ÿ¢ÿÍÿ YŸÑáÉ‹/Æÿeÿÿÿÿ]ÿÊÿF¿I>ü’›ÿ@ÿÿ$ÿhÿÒÿK¼ ( ¾O×ÿlÿ'ÿÿ7ÿˆÿôÿfÆÿ á$¶ÿZÿ!ÿÿ>ÿÿöÿbÄ Ñ|¿ÿwÿTÿXÿ|ÿÂÿ]—´«€<íÿ¥ÿtÿiÿƒÿÅÿ~ÐÔxƒÿÿÛþÕþ ÿuÿ‘_rFâ\ÍÿOÿüþßþÿQÿÂÿ9¡çûàœDèÿÿrÿoÿ‘ÿÒÿ j µ¦s%Íÿzÿ=ÿ"ÿ0ÿgÿ¿ÿ$‹áú¯Làÿÿ;ÿ ÿ5ÿqÿËÿ/‰ÄØ»yºÿiÿ=ÿ@ÿwÿÕÿHº9'Üe×ÿPÿåþ®þ¸þýþqÿüÿ‹ù;C¼LÜÿ‚ÿOÿHÿlÿ±ÿX—¶°‰I¿ÿÿ€ÿ’ÿÃÿ V™Äϱr·ÿ\ÿÿÿÿaÿÉÿC»PO¶9ºÿOÿÿÿ4ÿŽÿ{ÜÝ€žÿMÿ&ÿ7ÿxÿÜÿOµûó¤:Èÿdÿ#ÿÿ8ÿ…ÿíÿ\¾ýø·]üÿ¨ÿmÿXÿlÿ ÿíÿA‹¿Ñ½Š@ïÿ¨ÿuÿgÿ}ÿ¸ÿ c³èôу¦ÿ>ÿøþæþ ÿgÿæÿvý^‹x*±!˜ÿ0ÿöþùþ2ÿ‘ÿn¼ßÒ›Kóÿ«ÿÿƒÿ­ÿ÷ÿP£àôÞ›>Ôÿrÿ,ÿ ÿÿ\ÿºÿ(”ë$ü°NçÿŒÿOÿ:ÿRÿŽÿæÿFžÜòÞ Jèÿ‘ÿWÿGÿiÿ²ÿ„áï‘“ÿ'ÿåþÛþ ÿoÿñÿ|ð;Q*Øiôÿ’ÿVÿJÿlÿµÿ d¥Ã¶†;éÿ ÿsÿlÿŠÿÏÿ&‚Ðâ–1ÅÿbÿÿÿþÿPÿ²ÿ'˜÷.8 ¼OÜÿvÿ5ÿ ÿ?ÿˆÿðÿbÆü³OãÿˆÿPÿIÿpÿ¾ÿÈè×–5Éÿfÿ%ÿÿ9ÿŒÿþÿzç1H+àwžÿWÿ:ÿOÿ‰ÿßÿ=ÈÚÃ=ëÿ¢ÿtÿkÿ‰ÿÈÿyÉü ì¥@Ïÿiÿÿûþ ÿPÿºÿ9¸Y]/ÑYÝÿvÿ6ÿ*ÿPÿžÿi¹äÞ¯`¶ÿ„ÿ}ÿ¢ÿëÿJ§ðû¹SÞÿmÿÿôþÿIÿ¶ÿ6´W]3ßrÿÿ›ÿWÿ>ÿPÿˆÿÙÿ5ŠÄÜÍšQýÿ²ÿ}ÿmÿ‡ÿÆÿ}Ó ÿµMØÿnÿ$ÿ ÿ"ÿmÿÖÿO¾ *Îiýÿ›ÿ_ÿQÿuÿ¿ÿ$ˆÙúÇr¯ÿkÿPÿgÿ¨ÿmÉù®DÒÿjÿÿÿÿVÿºÿ1¥@J(Üw¤ÿ^ÿ?ÿKÿ€ÿÑÿ0‹ÌéÞ­a ¾ÿŒÿÿœÿÜÿ2ŠÐóç­Pâÿyÿ+ÿ ÿ#ÿmÿÝÿ`Û2ZI“ ÿJÿ#ÿ2ÿsÿÓÿC©óýÁj ²ÿwÿdÿzÿ¸ÿ eµèöÙ—<Õÿxÿ4ÿÿ)ÿeÿÄÿ6© DR/ä~°ÿmÿUÿkÿ¡ÿôÿJ“º»”Qýÿ°ÿ~ÿrÿ—ÿãÿI´ A> šÿ+ÿëþâþÿ|ÿÿÿ‹PfFö‰¨ÿ_ÿCÿVÿ‘ÿçÿF›Ùðá¯gÏÿœÿ‹ÿÿÎÿe®ÞìÔ™DæÿÿQÿ=ÿTÿ—ÿöÿeË6%å„­ÿeÿIÿ`ÿ¢ÿoÌé˜/ÃÿnÿBÿKÿ…ÿçÿ[Ë G6ò† ÿ3ÿÿ ÿ?ÿ ÿ‹ë&4Ìl¯ÿrÿ\ÿlÿŸÿçÿ<‰¿ØË¡`Øÿ®ÿ¢ÿºÿîÿ3¸ÓÆ8Ðÿjÿÿøþ ÿPÿ¿ÿFÍ:uv<ÓMÇÿXÿÿ ÿ8ÿÿpÆõòÀm ®ÿlÿUÿhÿ¥ÿýÿ^¶ñå BÙÿyÿ6ÿÿ'ÿ^ÿ´ÿ~Íýè¨Túÿ®ÿ|ÿoÿ…ÿ»ÿS“·µL÷ÿ¥ÿkÿSÿiÿ§ÿpÓ%ª2«ÿ1ÿÞþÀþáþ9ÿ¹ÿLÔ7dW§+³ÿ[ÿ,ÿ1ÿcÿ³ÿg¤¼­}5èÿ¦ÿ|ÿvÿ’ÿÌÿe§ÏÒ²rÅÿwÿBÿ4ÿNÿ‹ÿäÿF¢äþì²VîÿŠÿAÿ!ÿ2ÿoÿÏÿ>¦ôüºXçÿƒÿ?ÿ+ÿKÿ–ÿrÒ  Ü~Šÿ'ÿîþëþÿ|ÿõÿrÜ1Êi¨ÿkÿUÿfÿ—ÿÛÿ(g‘™†Yáÿ±ÿšÿ¢ÿÉÿP˜ÐçØŸHÞÿsÿÿíþìþ!ÿ€ÿþÿƒ÷D\;çqìÿvÿ&ÿÿÿjÿÒÿG­ïã˜9Ôÿ†ÿ[ÿ_ÿÿÞÿ>—×ìÔ‘1Çÿgÿ#ÿ ÿ ÿ`ÿ¾ÿ+’á  äFñÿ©ÿ€ÿzÿ•ÿÍÿY«¤}9éÿšÿ_ÿFÿVÿ‘ÿéÿV½ 1#ãyùÿyÿÿÞþàþÿ…ÿ ü:B¶BÍÿmÿ:ÿ7ÿcÿ´ÿuºÚΛNûÿ¯ÿÿxÿ•ÿÒÿ"t´ÖÏ£Zýÿ¢ÿWÿ,ÿ+ÿSÿ ÿoÎ)Û®ÿ\ÿ1ÿ0ÿ]ÿ®ÿwÅóóÆx´ÿlÿKÿYÿ’ÿïÿ[¾ü±BÊÿ^ÿÿþþÿlÿÝÿWÄ & ÇeûÿŸÿcÿQÿiÿ§ÿ÷ÿM”½Â¢i"Úÿ¦ÿŽÿ›ÿÇÿ_«ã÷ä©Oâÿwÿÿìþçþÿmÿäÿiá:bWµ;Æÿiÿ4ÿ3ÿaÿ³ÿy¿ÞÏ—Dçÿ™ÿkÿiÿ“ÿãÿE¦ñÁ^ëÿÿ0ÿ ÿÿ[ÿ¼ÿ/šìÞ-Ðÿ‹ÿjÿoÿšÿâÿ6‰Çäܯi¿ÿ|ÿ[ÿaÿ‹ÿÖÿ4“Þ؃¦ÿHÿ ÿÿ.ÿ„ÿùÿvä-E)àv¢ÿbÿOÿkÿ­ÿcªÎÇ—Kóÿ ÿoÿdÿƒÿËÿ(‰Ú Ù†­ÿSÿÿÿ<ÿ‹ÿøÿjÐ1á…°ÿ`ÿ1ÿ.ÿUÿžÿýÿ]­áíÓ—Dïÿ©ÿ€ÿ}ÿ¡ÿæÿ<‘Ïé×™;Ïÿhÿ ÿÿÿfÿÑÿOÃ=-튱ÿgÿJÿZÿ•ÿéÿG”Äɦb ·ÿxÿ]ÿlÿ¢ÿ÷ÿ\¼%߃Ÿÿ?ÿÿñþÿZÿÀÿ6¢ö#"ö¦Dàÿÿ_ÿWÿvÿ¹ÿ b¦ÉÅœW¹ÿˆÿzÿ—ÿ×ÿ0ŒÖüó¼]èÿvÿÿðþøþ5ÿœÿ˜ü79 ¶IÛÿƒÿSÿMÿvÿÁÿy¿äßµk½ÿxÿXÿYÿƒÿËÿ%Èô÷Ô1ÏÿzÿBÿ2ÿLÿÿìÿT³õþÃjªÿlÿWÿlÿ¬ÿa²âçÀw¿ÿ{ÿ`ÿqÿ°ÿ vÓôŸ-±ÿEÿþþéþ ÿcÿÙÿ^Ù3^W ÃTæÿÿWÿJÿeÿ ÿðÿB‡²½¨w6òÿÀÿ¤ÿ¨ÿÎÿ VŸÖîÞ§Uðÿ‘ÿJÿ'ÿ4ÿmÿÎÿA¯2,õ—(ºÿgÿ@ÿHÿÿÚÿD¥éè¦Häÿÿ^ÿZÿƒÿÖÿ?¨þ++øŸ,¶ÿRÿÿüþÿ_ÿÂÿ2›ì÷´^ Æÿ™ÿÿ¦ÿÙÿ^‘¨£~?øÿ·ÿŒÿ‚ÿžÿÜÿ4“äï—'®ÿGÿÿúþ#ÿ~ÿøÿ{ì5I'Ôaçÿÿ=ÿ+ÿNÿšÿnÈÿ ë¥Jìÿ¢ÿvÿpÿ“ÿÒÿ#s±ÓÍ¥_ ²ÿmÿEÿCÿgÿ«ÿg¼ö úÃq¿ÿ‚ÿiÿvÿ«ÿøÿM™ÊÕ´qºÿpÿKÿRÿ‡ÿâÿR» 0×içÿkÿ ÿßþëþ.ÿ›ÿ!¡AFÁSäÿ‰ÿQÿBÿ]ÿ™ÿçÿ5x£Œ[äÿ¼ÿªÿ¸ÿßÿ`œÄδz$Äÿkÿ(ÿ ÿÿTÿ±ÿ#•ó*2µHØÿyÿ@ÿ4ÿ[ÿ¨ÿ p½äÜ¥Mäÿ…ÿCÿ,ÿIÿÿûÿp×/ÁSÜÿoÿ$ÿÿÿUÿ±ÿzÀãݳoÓÿ›ÿ‚ÿ‰ÿ®ÿëÿ0pš«r3ìÿ®ÿ†ÿ}ÿ–ÿÏÿ!yÃôú׉¨ÿ@ÿöþÜþúþIÿ¾ÿDÀK>ý•¦ÿOÿ%ÿ/ÿiÿÅÿ/ŽÐèÓ–@äÿ—ÿjÿbÿ„ÿÇÿo®ÏÇšOõÿÿZÿ7ÿ;ÿgÿ±ÿ i´äïÒ”Açÿ˜ÿcÿOÿaÿ•ÿâÿ8†¼Ï»…3ÚÿŒÿ[ÿQÿrÿ»ÿ€ÓÑpöÿxÿÿÐþÇþ÷þYÿØÿb×'C)á{ ­ÿmÿTÿfÿœÿãÿ/i†‚] Üÿ ÿzÿtÿÿËÿmµâëÍ‹0Ëÿlÿ(ÿÿÿFÿžÿ wÐõ«FÛÿ~ÿ?ÿ)ÿCÿ„ÿâÿGžØåÅ~¿ÿqÿHÿLÿ|ÿÓÿ< ì û¼Vâÿuÿ'ÿÿÿOÿ®ÿ„Ïôì¼oÈÿÿxÿ‡ÿµÿùÿD„¬µšdÌÿŒÿdÿ`ÿ~ÿ½ÿn¿õì©HÛÿtÿ%ÿÿ ÿBÿ£ÿì")ü¥4Äÿgÿ/ÿ%ÿPÿŸÿhµàß²iÃÿÿÿ™ÿÕÿ(|½ÝИBØÿsÿ'ÿÿ ÿAÿœÿ {×½bÿÿªÿoÿYÿhÿšÿãÿ3~°Â°}2áÿ–ÿfÿXÿoÿ®ÿh¾÷ ë¡6ÃÿXÿ ÿðþÿPÿ½ÿ6¨û"Û}¶ÿrÿYÿkÿ¤ÿóÿEŠ­©;ìÿ¡ÿoÿdÿ€ÿÀÿ{Ïí£;Êÿaÿÿñþüþ4ÿÿqÏ" Ît¹ÿuÿYÿcÿ’ÿÜÿ0}²Ç²|,ÕÿŒÿ_ÿXÿ|ÿÆÿ$†ÕÑ|¨ÿVÿ)ÿ/ÿbÿ»ÿ'ÞúÃl§ÿeÿIÿZÿ’ÿèÿGœØëמMõÿªÿyÿkÿ†ÿÁÿq¿ôëªOåÿ„ÿ8ÿÿÿGÿžÿ yØ+Ðs µÿvÿ`ÿsÿ­ÿüÿS˜ÄǤeÊÿ•ÿ„ÿÿÜÿ4’á  ݃ÿ>ÿÿÿ2ÿÿ€é-C'Þ{¯ÿmÿRÿbÿ–ÿåÿ;‹ÂÚΟ^Ðÿ¢ÿ“ÿ¦ÿØÿ!r¹éöÛ›?Ùÿzÿ4ÿÿ$ÿ`ÿ¾ÿ-˜îô¥Gíÿ©ÿˆÿ’ÿÄÿ_¤ÌÌ¢VùÿŸÿ\ÿ@ÿQÿ‘ÿóÿdÎ?/ðŠžÿBÿÿÿ<ÿ’ÿýÿlÉÊuÇÿ‰ÿnÿvÿ¢ÿäÿ0v©¿µMÉÿžÿ”ÿ­ÿåÿ1Ãéç¼n ¥ÿSÿ$ÿ$ÿWÿ¯ÿ ’ï%+ü¦;ÎÿuÿFÿGÿtÿÊÿ/‘Ùûñºd©ÿkÿQÿgÿ¢ÿùÿ]´õ ù¿g¤ÿ\ÿ6ÿ8ÿdÿ°ÿk¼ðüåªZ¸ÿƒÿmÿ€ÿ°ÿõÿA‚¬´™dØÿ¥ÿ’ÿ¤ÿÛÿ/‹Þñ˜$£ÿ1ÿãþÉþèþ<ÿ¶ÿ?¾MF ¬=Óÿ‚ÿZÿ]ÿˆÿÐÿ&rªÀ±ƒ=ôÿ³ÿŠÿÿ™ÿÎÿfªÖâÈ<áÿÿRÿ5ÿAÿsÿÂÿ#}ÅïíÄ}%ÏÿŒÿkÿrÿ¢ÿíÿF—ÐáÆ„(Ãÿnÿ;ÿ6ÿaÿ·ÿ&˜õ*-ù˜¡ÿ7ÿ÷þæþ ÿ]ÿÍÿ@¨ï ýÇwÏÿ—ÿ~ÿ‰ÿ²ÿïÿ1i—‚RÔÿŸÿ‚ÿ‚ÿ¡ÿÜÿ&r¯ÒЩa¥ÿUÿ$ÿÿGÿ™ÿuÖ$±CÍÿfÿ!ÿ ÿ+ÿuÿÞÿI§âïÌ…'Êÿÿ\ÿaÿ’ÿáÿ@˜×ñÝŸEÞÿ}ÿ4ÿÿÿIÿ™ÿùÿY§×ãÉ’Iþÿ¼ÿÿƒÿ–ÿÃÿþÿ=pŒ‹j1ëÿ©ÿwÿeÿuÿ­ÿc¾ÃXÚÿ`ÿÿÍþÓþÿwÿúÿ|æ&2±E×ÿ|ÿGÿ>ÿcÿªÿU”²«€<óÿ³ÿ‰ÿ‚ÿžÿÙÿ&t´×Ù²m¶ÿeÿ.ÿÿ/ÿjÿ¼ÿv¼äã½z(Õÿ–ÿtÿvÿ ÿæÿ:‹ÆáΖ>Úÿ~ÿ<ÿ$ÿ:ÿÿäÿU¾" ÀUÝÿrÿ&ÿÿÿcÿÇÿ6›ãó»h ¼ÿƒÿnÿÿ²ÿøÿ@}¡¦XØÿ©ÿ“ÿ›ÿÅÿO—ÎèÜ­]ýÿ›ÿKÿÿÿ5ÿƒÿíÿaË</ó“'»ÿjÿ>ÿEÿvÿÊÿ,ˆÊæÔ›Iîÿ¡ÿrÿmÿ’ÿÜÿ:˜áýËt ªÿ\ÿ5ÿ:ÿlÿ¾ÿ#„ÐûþÙ–Cñÿ°ÿŠÿ…ÿ¢ÿÚÿc™´±ŽSËÿ™ÿ„ÿ”ÿÈÿsÌ2&îÿ7ÿõþæþ ÿ`ÿÓÿPÂ6$çŒ(Îÿÿ|ÿ’ÿÌÿi¨Ç¾‘Gøÿ®ÿÿtÿ“ÿÕÿ-‰Ö æœ;ÖÿÿEÿ4ÿLÿŒÿåÿH¡äú̃)Ôÿ”ÿnÿpÿ˜ÿÝÿ1†Êññˆ0Ùÿ•ÿpÿsÿ¡ÿîÿMªñÏtÿMÿ#ÿ.ÿfÿÃÿ1šïç˜<çÿ§ÿÿŸÿÒÿk­Ô×´s$Ôÿ™ÿ|ÿ…ÿµÿ[±õá’.Êÿsÿ<ÿ/ÿNÿ”ÿøÿeÍC?¼Wðÿÿiÿ_ÿ~ÿ¾ÿi¯×׳r)àÿ±ÿ§ÿÂÿV®÷匰ÿWÿ$ÿ#ÿUÿ«ÿŠç*Âh Ãÿ™ÿ”ÿ·ÿôÿBŒÃßÔ¨cÇÿŽÿuÿ‚ÿ³ÿ^»12 ½YîÿÿLÿ1ÿDÿ€ÿÚÿC¦ñ ß“7ãÿ¦ÿŽÿœÿÏÿh«ÓÕ¯nÏÿ™ÿ†ÿžÿÝÿ6™ñ*7ÃXáÿxÿ/ÿÿ'ÿjÿÌÿ:£ôð¦Lôÿ°ÿ‡ÿ…ÿ¨ÿæÿ3¿äæÆ‹>òÿ³ÿŒÿ‰ÿ«ÿéÿ9‹ËïíÂx¿ÿsÿLÿOÿ~ÿÐÿ5™ëæ”1ÔÿŒÿjÿrÿ¥ÿôÿP¢ÚìÓ“?åÿŸÿtÿvÿ¡ÿïÿQ²þ(%óœ.¿ÿ^ÿÿÿ ÿdÿÄÿ0˜ê"ÃpÑÿ¢ÿ”ÿ¦ÿÓÿO„ œ|DÆÿ›ÿ‘ÿ«ÿåÿ6ŽØ æ•-¾ÿ`ÿ"ÿÿ;ÿ‹ÿúÿoÔ-Çdýÿ¢ÿgÿWÿsÿ³ÿa©ÓÖ°oÌÿÿmÿsÿ¡ÿêÿC›â åœ@Ýÿ‡ÿIÿ0ÿ?ÿrÿÀÿo²Öײv,ãÿ±ÿšÿ§ÿÑÿ]œÂÆ¡_ ´ÿqÿOÿ\ÿ’ÿëÿVº)Ùtüÿˆÿ0ÿÿ ÿBÿ¡ÿ†âï¡@Þÿÿ^ÿUÿrÿ¯ÿýÿI³»¡q2ôÿÄÿªÿ­ÿÏÿH‰¸Ì½ŽCêÿ“ÿPÿ*ÿ/ÿ\ÿªÿ rÅùã›@âÿ”ÿfÿcÿ‹ÿÓÿ/†ÈåÕœEäÿ‹ÿOÿ=ÿZÿ¢ÿpÍ ú®FÓÿmÿ$ÿÿÿQÿ¬ÿuÃðôÓ—Jþÿ¾ÿ—ÿÿ£ÿÌÿ8`ulKßÿ¬ÿ‹ÿˆÿ¦ÿàÿ.‚ÌùÜ(´ÿJÿÿþàþõþ:ÿ£ÿç Õ|¯ÿfÿEÿRÿˆÿÚÿ7‰¾Ë¬j¹ÿnÿBÿ?ÿeÿ¬ÿ`¬ÙÞ½{&ÍÿÿOÿ@ÿXÿŒÿÕÿ'n¡³¤x4ìÿ«ÿzÿkÿ|ÿªÿìÿ5y¢­”[¼ÿwÿPÿOÿxÿÇÿ*åß‚ Žÿ'ÿäþÖþÿþSÿÇÿ=¨ðð®SòÿžÿhÿYÿqÿ¨ÿñÿ<yš›}EÇÿ›ÿŠÿ—ÿÅÿH‰³Á«w)Òÿ€ÿBÿ"ÿ*ÿZÿ§ÿi»ðûÝ›?ßÿŠÿQÿ@ÿZÿ—ÿìÿG”Äʧa ±ÿlÿLÿYÿÿéÿP³ú¿Yãÿtÿÿóþúþ,ÿ‚ÿëÿQ£ÓÚ½„=úÿÄÿ«ÿ¯ÿÏÿ8jˆ‹r>þÿ»ÿ‚ÿbÿaÿƒÿÃÿp¾ôé§JÞÿwÿ*ÿÿ ÿAÿšÿ {Ö êš6Ïÿ{ÿJÿFÿlÿ¶ÿf¦Å¹†;æÿ›ÿmÿbÿÿÄÿt¿êìÃ{Àÿpÿ@ÿ8ÿUÿ•ÿæÿ>‰¹È²€9ðÿ¯ÿ…ÿzÿÿÂÿP‘ºÅªs(Õÿÿ^ÿRÿnÿ®ÿi¿ú ð©DÔÿmÿ$ÿÿÿ_ÿÂÿ3ëÊt·ÿwÿ^ÿmÿžÿæÿ2s™œ€IÊÿ ÿ“ÿ¬ÿäÿ1„Ëùâ>×ÿuÿ,ÿ ÿ ÿ>ÿŽÿóÿY³ïðºkÂÿˆÿpÿÿ¯ÿ÷ÿGÁÏ·}.Øÿÿfÿcÿ‰ÿÔÿ1’á  Ù„®ÿXÿ&ÿ$ÿQÿŸÿi¹èíʉ8êÿ±ÿ—ÿ¡ÿÌÿ PŽ´»žgÑÿ‘ÿkÿjÿÿÑÿ)ˆÚ# ËnžÿMÿÿÿ?ÿ‰ÿìÿV±ñõ½mÃÿÿÿ—ÿÐÿj«ÌÈžYºÿ€ÿmÿ‚ÿ¼ÿkºîøØ‘2ÏÿzÿGÿ=ÿbÿªÿmÃúî­Wûÿªÿrÿ_ÿqÿ¥ÿíÿ=†·Ë¹ŒGþÿ»ÿÿ‚ÿ˜ÿÏÿsÂø õ·]õÿ‘ÿEÿÿ$ÿVÿªÿwÈ÷úÔ8ãÿ¥ÿ…ÿÿ½ÿMŽ´·•Uºÿ€ÿkÿ}ÿ¹ÿsÍ %ÍkúÿŽÿ9ÿ ÿ ÿ8ÿ‰ÿðÿ[·õ ùÅx"Òÿ—ÿ|ÿÿ©ÿãÿ)j—©œs6óÿ·ÿ“ÿŽÿ¯ÿëÿ;×ÿ׊$»ÿ`ÿ&ÿÿ9ÿ€ÿáÿFžÕäLj6ãÿ£ÿ„ÿ‹ÿ»ÿW¥ØêÏ‘9Úÿ…ÿLÿ:ÿUÿ”ÿíÿOªî ûÆs²ÿgÿ7ÿ3ÿTÿ—ÿíÿI›Óéר`Èÿ•ÿÿÿºÿùÿ@|Ÿ¤†MÃÿÿ{ÿÿÄÿpÀùçž9ÊÿdÿÿÿÿgÿÍÿ@©õËu·ÿuÿYÿhÿ™ÿâÿ5µÉ¹‡Cùÿ¸ÿŠÿ}ÿ‘ÿÅÿ ZŸÎâΙOøÿ¤ÿfÿFÿLÿvÿÀÿs»äèÆ‡6äÿ£ÿ€ÿ‚ÿ¨ÿæÿ1v¤°•\ ¼ÿ|ÿ\ÿeÿœÿôÿ`ÉG?£(¬ÿCÿÿíþ ÿTÿ¹ÿ%‰Ïïé½{-æÿ¶ÿŸÿ¨ÿÌÿ>s•žŠ`%æÿ±ÿ’ÿÿ­ÿäÿ.z¹áæÄƒ*Ëÿvÿ@ÿ3ÿNÿÿíÿQªæ÷ߟFçÿ—ÿeÿ^ÿ€ÿÈÿ"~Æîç¸h ®ÿiÿJÿWÿÿäÿG§îÐ~»ÿlÿ>ÿ7ÿWÿ•ÿæÿ<†µÇ¸SÙÿµÿ«ÿ¾ÿçÿ"\§¤…KÃÿÿxÿƒÿ´ÿW­ëó³Vçÿ|ÿ,ÿÿÿMÿ°ÿ(œú-/­DÛÿˆÿXÿRÿtÿ·ÿW’®¦AüÿÁÿšÿ’ÿ­ÿãÿ,z¼æîÒ—Fîÿœÿ`ÿDÿKÿtÿºÿ _¢ËÒµ7ñÿ¸ÿšÿœÿ¾ÿûÿC‰¹Ê¶~.Ôÿ…ÿQÿGÿjÿµÿŒð2D$Õfëÿzÿ+ÿ ÿÿWÿ´ÿ „ÐõðÆ€1èÿ³ÿžÿ©ÿÏÿDw”–}MØÿ¬ÿ˜ÿ£ÿËÿ X£àÿüÔŽ2Ðÿ|ÿCÿ/ÿEÿÿÔÿ7’Öòæ³b ´ÿzÿeÿzÿ·ÿ k¾ôãžAàÿŽÿ]ÿWÿzÿÄÿ!~ËôôÉ} ÄÿwÿNÿKÿpÿµÿ]¤ÍÖ»‡CþÿÅÿ£ÿŸÿ¸ÿåÿ"Zˆ–w?ÿÿÀÿ’ÿ€ÿÿÂÿ c¹ù Ö| šÿ=ÿÿ÷þÿoÿÝÿT¼ Íp·ÿ~ÿoÿ…ÿ¾ÿ W“°«ƒBöÿ´ÿ‡ÿ|ÿ–ÿÏÿ tºçïÎ8Ýÿ‹ÿSÿ>ÿQÿ…ÿÒÿ*~¼ÜÛ·z0æÿ«ÿŠÿ‰ÿ¨ÿàÿ'jžµ«9çÿ™ÿdÿOÿeÿ¡ÿýÿgÌ9+펤ÿIÿÿÿ<ÿ‹ÿíÿPœÇ˧iÙÿ©ÿ™ÿªÿÚÿ^–²¯‹O½ÿ†ÿmÿyÿ¤ÿëÿ?‘ÐòîÆ€'Çÿwÿ@ÿ/ÿEÿÿÓÿ2ŒÑòíÁwÆÿ€ÿ\ÿ\ÿƒÿÉÿq°ÎÆ™Qÿÿ´ÿ‚ÿtÿŽÿÌÿ {ÇõöЄ"½ÿkÿ7ÿ.ÿRÿ˜ÿòÿOœÌÕº5êÿ°ÿ‘ÿ“ÿ¶ÿðÿ5y«ÀµŒLºÿ…ÿmÿ{ÿ§ÿïÿE™ÞÿÖŠ'Àÿdÿ'ÿÿ)ÿkÿËÿ6›ê à“:åÿ¥ÿ‰ÿÿºÿøÿ=x˜—t7ðÿ­ÿ€ÿwÿ•ÿÓÿ-ŒÞ!ºYëÿŠÿCÿ$ÿ1ÿgÿ¹ÿr¸ÜÝ»~3ìÿ´ÿ—ÿ™ÿ¼ÿôÿ9}°ÉÁšY Àÿƒÿeÿkÿ”ÿÝÿ4’Ûá–7Ôÿ‚ÿOÿEÿdÿ©ÿ]¨ÕÜ»},Þÿ¥ÿ‹ÿ–ÿÂÿS–ÀĤeÄÿƒÿcÿjÿ—ÿåÿE¤ò öªGÞÿ‚ÿBÿ(ÿ9ÿlÿ¼ÿs¸ÞáÂ…7éÿªÿ…ÿ€ÿœÿÔÿc¼»š`Óÿ¡ÿŽÿŸÿÎÿj°ÞçÅ"¿ÿgÿ/ÿ$ÿEÿÿîÿX²îþå¤Oóÿ§ÿwÿmÿ‹ÿÆÿ^šº´Lþÿ´ÿ|ÿeÿqÿ ÿìÿE›âá—:Ôÿzÿ9ÿÿ%ÿUÿ¡ÿüÿS›ÆÎ²|8öÿÃÿ©ÿ¯ÿÓÿ J€ž|>ðÿ¥ÿlÿTÿfÿœÿôÿW¶úÈh÷ÿŠÿ8ÿ ÿÿEÿ›ÿk¾ìòÐ;èÿ¦ÿÿ|ÿ™ÿÏÿV‹£ ~E¿ÿŒÿuÿ{ÿ¤ÿäÿ3„Äèèdž0ØÿŒÿ\ÿNÿfÿŸÿíÿ@ˆ³½¡fÍÿ‘ÿsÿ|ÿ©ÿòÿG–ÎáÉ6Øÿ„ÿPÿDÿcÿ©ÿ rËõ¯Láÿ€ÿ=ÿ!ÿ0ÿfÿ·ÿp¶Ýß¿†;òÿ·ÿ‘ÿ‹ÿŸÿËÿ:f|z_0ùÿÇÿ¦ÿ ÿ·ÿëÿ2ÅòùÚ”5Íÿmÿ)ÿ ÿÿ]ÿºÿ%ˆÒôé´c²ÿwÿcÿwÿ²ÿWŸÍÔ³rÊÿ…ÿ_ÿaÿ‡ÿÏÿ'€ÅïóÑŽ6ÚÿŠÿSÿ;ÿIÿuÿ¼ÿ X“³·œl0öÿÌÿ·ÿ¿ÿÞÿJ{••v;ðÿ¦ÿkÿNÿWÿ‰ÿÝÿD¯00þ¤0»ÿTÿÿÿ"ÿlÿÑÿ=™×êÔšGõÿ®ÿ†ÿÿœÿÕÿešµ°ŽR Ëÿ™ÿƒÿ‹ÿ°ÿìÿ3x«Å¿š\Æÿ‰ÿhÿdÿƒÿÀÿ_¢Îؼ‚4âÿÿsÿkÿ‰ÿÈÿk«ÍÉTúÿ¤ÿfÿMÿ`ÿœÿøÿaÄ +ߨÿVÿ+ÿ)ÿVÿ ÿýÿVÇ̱{8÷ÿÆÿ¬ÿ®ÿÉÿøÿ/aƒ\(ïÿÀÿ¢ÿ ÿ¼ÿòÿ:‰Ìöå¦Jäÿ„ÿ;ÿÿ ÿUÿ¬ÿÖë¡Dçÿžÿtÿsÿšÿßÿ1µÊ·ƒ5áÿ›ÿqÿmÿ‘ÿÖÿ1Ý õ±V÷ÿ¡ÿiÿRÿ_ÿ‹ÿÏÿ]¤ž}KãÿÆÿÀÿÕÿ={­ÊȨlÎÿŠÿ`ÿ\ÿ}ÿÃÿ!„Û%À[ëÿ†ÿ>ÿÿ0ÿmÿËÿ5—àöÆz$Öÿ¡ÿÿ¡ÿÑÿZ’°­‹P ÉÿšÿŠÿœÿÌÿb«Þóä´kÄÿƒÿaÿaÿ‚ÿÂÿc§ÓÝÆEöÿ²ÿ„ÿxÿÿÆÿb§ÒÜÀ„1Ûÿ•ÿlÿjÿÿÚÿ7–ã  ÝŒ$¾ÿjÿ8ÿ3ÿXÿ¢ÿ]ªÙâÅŒBûÿÅÿ©ÿ«ÿËÿÿÿ8kŠŒsBÃÿÿuÿ|ÿ¤ÿçÿ>–ä% Ëo ÿOÿÿÿ;ÿ‚ÿàÿA•ÐåÓœNýÿ·ÿ‹ÿ€ÿÿÖÿ"n¦Å¼“Lúÿ°ÿ{ÿlÿ‚ÿ¾ÿn¼òþážEãÿÿXÿDÿYÿ‘ÿÞÿ4~±Â±„EÈÿ¤ÿžÿ¶ÿçÿ)l¢ÁÁ£kÑÿÿfÿ^ÿyÿ·ÿ kÁþ Ó}µÿhÿ9ÿ8ÿ`ÿ¨ÿ_§ÒÔ²s&Üÿ¨ÿ’ÿŸÿÏÿ\™½Á¡cÌÿ“ÿzÿ†ÿ¶ÿW§â÷è±^ÿÿ£ÿ]ÿ:ÿ=ÿhÿ²ÿ k¹ìüç±gÏÿšÿ‚ÿÿ´ÿñÿ5rœª™l+äÿªÿ„ÿ€ÿ ÿßÿ4Øí¤Eáÿ‰ÿPÿ<ÿVÿ“ÿçÿD“ÄÓ¹8ðÿ¸ÿ›ÿ£ÿËÿ P’ºÂ¨q$Òÿÿfÿbÿ‚ÿÇÿ Ô#Ø‚¼ÿlÿ:ÿ/ÿLÿŠÿÝÿ7‡ÁÜÔªn'æÿ·ÿ¤ÿ±ÿ×ÿP„žž}Aúÿ¸ÿ†ÿvÿˆÿÀÿoÄÆk£ÿ_ÿ>ÿIÿ|ÿÍÿ(z´Ì¼‹Cóÿ¯ÿƒÿwÿ’ÿÌÿh«×áÉ’Göÿ®ÿÿmÿÿ±ÿûÿM—Îçݰh¾ÿzÿSÿQÿqÿ³ÿWžÉз8ñÿ¸ÿÿŸÿÅÿÿÿD©®”Y ¿ÿ€ÿbÿjÿšÿêÿN¯ú!é’&»ÿ`ÿ+ÿÿ=ÿƒÿßÿA—ÑêÜ«gÔÿ¥ÿÿ™ÿ¿ÿöÿ5k’Œd+ïÿ»ÿ›ÿ–ÿ±ÿåÿ-w·àçËŒ7ÛÿŠÿSÿ?ÿUÿÿâÿ<ÉßÍ™Nÿÿ¼ÿ’ÿŒÿ«ÿçÿ1{°Å´/ÑÿÿIÿ7ÿPÿ‘ÿðÿ[¿ /(ö¤AÛÿ‡ÿPÿ=ÿPÿ‚ÿÉÿ[‹¡—uA×ÿ¸ÿ®ÿÀÿêÿV…œ™x@ýÿ»ÿŠÿsÿÿ¯ÿùÿP¢áüï·aùÿ—ÿJÿ"ÿ'ÿXÿ¬ÿr½æä¶k»ÿ{ÿ_ÿiÿ–ÿÞÿ0|®Â±9ëÿ¦ÿxÿkÿ~ÿ³ÿûÿK“ÅÙÉœVºÿ}ÿ\ÿ[ÿyÿ±ÿöÿ;v–›‚PÕÿ¥ÿÿ“ÿ¸ÿóÿ8y¤³ži Íÿ…ÿXÿQÿqÿ¸ÿ{Ñëœ1¿ÿXÿÿöþ ÿKÿ¨ÿs½âß¹x+åÿ²ÿšÿŸÿÀÿïÿ%PlmU)ñÿ¹ÿŽÿ{ÿƒÿ¨ÿåÿ1}ºà寋7ßÿŽÿUÿ;ÿHÿyÿÂÿf »°„>ïÿ«ÿ|ÿmÿ‡ÿÁÿb§ÏϨ_¥ÿ]ÿ3ÿ9ÿgÿ¸ÿ„Õá—9Øÿ‡ÿRÿBÿXÿŒÿÔÿ"b›f1ûÿÏÿµÿ´ÿÊÿõÿ(Z~‹Z"ßÿ£ÿvÿgÿuÿ¦ÿòÿIŸå؈%¿ÿkÿ3ÿ&ÿGÿ‹ÿåÿIœÑßÁ,ÓÿŠÿaÿ]ÿÿÁÿe¤ÄÁ™YÉÿ—ÿ„ÿ”ÿÆÿ VšÅÒ»‡<ëÿ¡ÿkÿTÿ]ÿ†ÿÈÿ[“³µšg)êÿ»ÿ ÿ£ÿÂÿöÿ4p›«œo*Úÿ“ÿaÿRÿiÿ¨ÿhÈ.ß  ÿIÿÿÿ?ÿÿíÿM™ÆÌ®u0ìÿ¾ÿ©ÿ³ÿÙÿK}–”u?þÿ¾ÿÿxÿ„ÿ¯ÿñÿBŽÍïîʈ2ÙÿŠÿTÿ>ÿMÿ€ÿÊÿ!r°ÓЬm!Ùÿ£ÿ‰ÿ‘ÿ»ÿýÿH»É¯u$Ëÿ~ÿMÿDÿcÿ¬ÿ oÅùºb±ÿvÿcÿrÿ¥ÿëÿ2r˜ŸˆXßÿ±ÿ›ÿ£ÿÈÿÿÿ@|¦¹ª„Dýÿ¼ÿ‰ÿsÿ~ÿ¬ÿòÿE–ÚþÿÙ“5Ôÿ~ÿCÿ/ÿEÿ€ÿ×ÿ8’Ôóé¸oÌÿ”ÿ}ÿÿ¼ÿH…¨ª‹P Çÿ–ÿƒÿ—ÿÎÿq¿ôï´`®ÿmÿRÿYÿ†ÿÌÿi£Á¾›c ßÿ¯ÿ—ÿ ÿÂÿüÿ?€®Äº’R Áÿ‹ÿrÿ}ÿ­ÿùÿT¬óç”1Êÿrÿ;ÿ,ÿIÿŠÿâÿ=ŽÁÓ¼J ØÿÁÿÊÿîÿ'c•±¬†Fùÿ­ÿsÿXÿbÿ’ÿàÿ?œéû¹_ÿÿªÿlÿPÿ[ÿ…ÿÌÿh¡ÃÁ£k'ãÿ°ÿ•ÿ™ÿ¼ÿöÿ<€²ËÀ•R»ÿ‡ÿqÿ‚ÿ¶ÿX¥Þóà§Vûÿ«ÿqÿ]ÿoÿ¦ÿóÿG‘ÁÍ·€7îÿ³ÿ“ÿ“ÿ´ÿîÿ6z®Å¹ŽIúÿ°ÿwÿ`ÿiÿ™ÿâÿ<”Ýñ±[þÿªÿlÿNÿVÿÿÈÿi§ÉȦk$àÿ¬ÿ”ÿœÿÂÿûÿ=wœ¡ŠVÐÿžÿˆÿ—ÿÈÿl¿ùü¿füÿ›ÿPÿ)ÿ-ÿ\ÿ©ÿa©ÔÚº9òÿºÿÿŸÿ½ÿòÿ0l™¬¡y>öÿ´ÿƒÿmÿxÿ£ÿéÿ=Öþæ¥Röÿ¥ÿkÿSÿbÿÿÓÿ d’¡’f+îÿ½ÿ§ÿ±ÿÙÿ`¡ËÓ·w%ÍÿƒÿUÿOÿsÿ¼ÿÖÂf¤ÿ`ÿ?ÿFÿrÿºÿ _ ÆË±@Ïÿ´ÿ´ÿÎÿýÿ5l•¨žy@þÿÂÿ”ÿ„ÿ“ÿÃÿ Z¤Üôå³i¿ÿ‚ÿhÿsÿ¥ÿðÿF•ËàË“Hôÿ¬ÿ|ÿqÿÿÌÿn±ÚÜ»y(Öÿ•ÿrÿsÿ›ÿßÿ5ŒÒýå§TúÿªÿqÿWÿaÿ‰ÿÊÿ`š½À§y@ÙÿÅÿÇÿãÿEpŒr=ûÿºÿ…ÿmÿzÿ¬ÿûÿ]»1-ý¨>Ïÿsÿ8ÿ)ÿGÿŠÿãÿD•ËÚÁ‹?ôÿ´ÿÿ‹ÿªÿàÿ&i·²RÎÿœÿ†ÿŽÿ·ÿõÿ@‰ÅææÆ‰<ìÿ¤ÿsÿaÿrÿŸÿßÿ(h”£”l1õÿÃÿ¨ÿ­ÿÏÿ T˜ÊÚÆ9Üÿ„ÿHÿ1ÿGÿ‡ÿåÿQµ%ç‘+ÈÿzÿLÿIÿlÿ­ÿýÿL‹®±”c%éÿ»ÿ¥ÿ«ÿÊÿüÿ4i›‘l6ûÿÆÿ¡ÿ–ÿ©ÿ×ÿ_žÌÜÈ”Gðÿÿ`ÿBÿMÿ|ÿËÿ%~Äêæ½w$Ñÿ“ÿvÿ€ÿ¬ÿñÿA‰»Ç¯w'Ôÿÿaÿ[ÿ{ÿÀÿsÃöïµe¾ÿ„ÿkÿqÿ˜ÿÓÿW‡ž˜{MçÿÈÿ½ÿÊÿíÿ S˜—{GÁÿ‰ÿlÿrÿœÿåÿ@ ò$/ ¿Zéÿƒÿ;ÿÿ(ÿaÿ¶ÿu¸ÙÒ§dÔÿ©ÿšÿ°ÿàÿ `“«£}?÷ÿ´ÿÿlÿzÿ©ÿíÿ>ÈéæÄ‡;ïÿ®ÿƒÿyÿ‹ÿ¸ÿôÿ2jŒ“}NÓÿ¡ÿƒÿ†ÿ§ÿâÿ.x¶ÖÔ­g»ÿrÿMÿMÿxÿÄÿ$„ÓþØŒ.ÉÿvÿCÿ6ÿUÿ‘ÿáÿ4y¤®–g+îÿÀÿ¬ÿ²ÿÒÿ;kŠxI Íÿ—ÿvÿsÿÿÇÿ_¤ÖéÖ¢Wþÿ©ÿgÿAÿBÿgÿ©ÿýÿWžÌÖ¸~/Ýÿ™ÿnÿkÿ‰ÿÅÿ[”³©€<îÿ¥ÿsÿcÿyÿ³ÿ\«áòÛŸLñÿÿcÿJÿVÿÿÃÿR„š’q?×ÿºÿµÿÉÿòÿ(]‡š“o2êÿŸÿdÿAÿBÿhÿ®ÿ lÅ Ú„»ÿjÿ=ÿ7ÿ[ÿœÿïÿD‡¬®ŽS Ëÿ›ÿŠÿšÿÈÿK…¦¦†K½ÿ†ÿmÿyÿ¦ÿíÿ@‘Îìå»u#Îÿ‹ÿbÿ\ÿuÿ«ÿñÿ:z «—j,ëÿ²ÿ‘ÿ‹ÿ¤ÿ×ÿaœÂǪq%Òÿÿ`ÿWÿuÿ³ÿ e¶îýæªTøÿ¦ÿmÿXÿkÿÿæÿ5z¥­•c!ßÿ®ÿ”ÿœÿÃÿüÿ?|¤°™h%ÜÿŸÿxÿrÿÿÌÿq¼ðíµc©ÿ`ÿ5ÿ/ÿNÿÿáÿ8‡¾ÕÊŸaÚÿ°ÿ¡ÿ°ÿÛÿQ„œ—s6íÿ©ÿwÿeÿuÿ¬ÿûÿUªèõÁrÀÿ}ÿ`ÿgÿÿÓÿ!h›°¢y;úÿÂÿÿ˜ÿ±ÿäÿ'h ¿¾ŸdÌÿ‰ÿaÿZÿuÿ²ÿ_²òÜ’7Üÿ’ÿaÿTÿkÿŸÿçÿ3vŸª—j0óÿÇÿ³ÿ¼ÿáÿY‘±°’T»ÿ|ÿ[ÿ`ÿŒÿØÿ4’Ý ç Fêÿœÿlÿ_ÿyÿ±ÿûÿJŽ¸Ã«y5íÿ°ÿˆÿ~ÿ”ÿÄÿIˆ°¾«BÅÿÿ“ÿ¨ÿÚÿm°ÝêÓOùÿªÿrÿ\ÿjÿ™ÿàÿ0yª½­@þÿÇÿ¨ÿªÿÌÿK»Ê¶‚4áÿ”ÿbÿRÿkÿ©ÿa¼ÿç˜<Þÿÿ]ÿOÿdÿ˜ÿÞÿ.s¥»´“^%ïÿËÿÀÿÍÿïÿ!T€–”vDÈÿ™ÿ…ÿ”ÿÂÿ ]¯í ÿÏ€!ÅÿyÿQÿQÿwÿ¼ÿc¤ÈÇ£gÛÿ¬ÿœÿ®ÿÞÿ#l«Ñ×¹0Ùÿÿ_ÿOÿeÿœÿéÿB–×ùúÙQÄÿšÿÿžÿÈÿ>q”Räÿºÿ¨ÿ²ÿÖÿQ´¾¦r(Øÿ•ÿlÿgÿ‰ÿÏÿ)‰Ýþ·Xðÿ—ÿVÿ=ÿOÿ†ÿÖÿ1»ÓÉž^Õÿ«ÿ›ÿ¨ÿÐÿCy™¡Ža)ìÿ¸ÿ™ÿ–ÿ¯ÿàÿ#k¨ÓÞË™T½ÿ‰ÿpÿzÿ£ÿãÿ.r¤·ª=öÿ·ÿÿˆÿ£ÿÙÿ$n«ÌÉ \³ÿrÿTÿ^ÿ‘ÿâÿD¤òó§HäÿÿUÿ?ÿNÿ}ÿÁÿ O‚™•{Q!øÿÞÿÙÿìÿ:h†’ƒ]%âÿ¢ÿtÿbÿnÿÿåÿ<“ÙÿÛ“:Üÿ‹ÿZÿMÿiÿ§ÿöÿL”¿Å¦iÏÿ”ÿuÿ|ÿ¤ÿçÿ6‚¹ÏÁ‘H÷ÿ¬ÿuÿ`ÿnÿŸÿæÿ8†ÀÛ×±t,ãÿªÿˆÿƒÿ›ÿÊÿ=l‡ˆqFßÿ»ÿ¬ÿ·ÿÚÿN‡­¶ n%ÓÿŠÿWÿHÿ_ÿ›ÿñÿU²öÒ~¹ÿnÿHÿIÿsÿ»ÿe£ÆÁœ_Ñÿ ÿŠÿ”ÿ¹ÿïÿ,`‚‰uKÚÿ¬ÿ–ÿ›ÿ½ÿöÿ:‚»Þà‰;èÿÿhÿPÿZÿƒÿÄÿXª¨†L ËÿžÿŽÿžÿËÿW”¾À¢a ¶ÿmÿ>ÿ:ÿ_ÿ¦ÿkÃýöºd°ÿrÿYÿbÿŠÿÈÿ HqsOîÿÈÿ¶ÿ½ÿÙÿ=o’›Š_#Ýÿžÿpÿ_ÿmÿ›ÿáÿ6‹Îõ÷ד;ÝÿŠÿPÿ9ÿIÿzÿÇÿj ¸«€<õÿ¶ÿÿ‡ÿ¡ÿ×ÿ g ½¶Kûÿ­ÿrÿWÿ_ÿŠÿÏÿ#q­ÌÇ£f×ÿ¢ÿ†ÿŠÿªÿßÿX…—l7üÿÂÿ™ÿ‡ÿ‘ÿ·ÿîÿ/m™ªžv5êÿ¦ÿpÿZÿhÿ–ÿâÿ>–ÞØŒ-ÉÿvÿCÿ6ÿPÿÿÞÿ3}ª·¡p0ðÿ¿ÿ¨ÿ®ÿÏÿ=op:÷ÿ¶ÿÿiÿpÿ˜ÿÛÿ/ƒÈò÷Ü Qûÿ®ÿvÿ^ÿfÿÿÌÿZ«¨‰SÒÿ¤ÿÿ”ÿ¹ÿóÿ7x§¸§z4åÿŸÿnÿaÿwÿ¯ÿ_´ò ûÅuÃÿÿaÿdÿ‰ÿÅÿ Jw†zS!ìÿÅÿ²ÿ¾ÿâÿ[–¿Ë·‡>íÿ¡ÿhÿMÿVÿ€ÿÈÿvÁñþè±c¾ÿ‚ÿeÿkÿ‘ÿÏÿc˜´°SÏÿ¡ÿÿŸÿËÿ N‰®µšdÖÿÿÿ†ÿ®ÿñÿB’Îìä·pÉÿ‰ÿiÿlÿ‘ÿÏÿfž¼¹™b âÿ³ÿ ÿ§ÿÌÿE„¯ÃµŽN¼ÿ„ÿjÿpÿ˜ÿÛÿ0…Íúê®_ºÿ…ÿoÿÿ­ÿñÿ=«º©~@Ðÿ¸ÿ¼ÿÚÿLƒ¦¬’\Êÿÿmÿpÿ™ÿáÿ;›ì-Ó{Âÿ~ÿ\ÿ^ÿÿ¿ÿ Rޝ´q8ÖÿÁÿÇÿâÿN†®½¯†Gÿÿ¼ÿŠÿvÿ„ÿ²ÿúÿO¡àýÖ“Añÿ´ÿ’ÿ“ÿµÿîÿ3rž­›n.ìÿµÿ–ÿ™ÿ½ÿûÿE’Ìêã¸u Ïÿÿjÿlÿ‘ÿÕÿ,…ÑùÃw"Ñÿ–ÿvÿxÿ—ÿÏÿU‰¦©’f/üÿÕÿÇÿÑÿóÿ)b”²¶›g"Úÿ¡ÿÿƒÿ¨ÿêÿ<‘ÕûûÖ‘8Þÿ–ÿlÿhÿ‰ÿÊÿn³Ùݾ„:ñÿ¶ÿ–ÿ•ÿ´ÿéÿ+m´¯ŒTÏÿÿ‡ÿÿ²ÿðÿ;ˆÆíõÛ¤Z Âÿÿvÿ}ÿ£ÿÜÿ\ˆš‘p<ÛÿÄÿÈÿæÿW‘¶¿¦mÇÿyÿFÿ7ÿSÿ”ÿòÿY½&ëš9Üÿ’ÿfÿ`ÿ{ÿµÿüÿDŸ£‹]$ìÿÂÿ­ÿ²ÿÎÿûÿ2e‰—‹g0óÿ¼ÿ“ÿ„ÿ“ÿ¿ÿM•Íèâºz+Ûÿ›ÿwÿsÿ‘ÿÊÿUŠ št5íÿ®ÿ…ÿ|ÿ–ÿÏÿnµß寅.Óÿ†ÿVÿIÿeÿ ÿôÿMžÔëÝ®jÓÿ›ÿ‚ÿƒÿ£ÿÔÿIs‰…k> Üÿ¼ÿ°ÿ¼ÿÛÿ @oŠŽxH Ëÿ•ÿxÿyÿ›ÿÜÿ/…Îùâž@ÝÿƒÿFÿ.ÿ?ÿwÿÉÿ$w±È¼MÆÿžÿ•ÿ­ÿÞÿ^¨£Düÿ¸ÿƒÿkÿoÿ•ÿÑÿj§ÍÔ¼IÄÿšÿˆÿ“ÿ¸ÿìÿ)^‚ŽZ(íÿÂÿ¨ÿ©ÿÅÿøÿ8x§¼¯‚9ãÿ‘ÿRÿ5ÿBÿwÿÍÿ4šî$þ´TòÿžÿfÿRÿdÿ•ÿÚÿ"`„Ž{QèÿÄÿ´ÿ¿ÿàÿIy˜ˆ[Üÿ¡ÿ{ÿpÿÿ¯ÿñÿ=„¹ÕЬq&Ýÿ ÿÿ{ÿ˜ÿÐÿ\“°­ŒM¹ÿÿeÿmÿ–ÿÛÿ+y°É¾Hôÿ©ÿsÿ`ÿpÿ¦ÿóÿI˜ÒêÜ­gÈÿÿqÿtÿ“ÿÉÿ?h{vY/ÿÿÕÿ¼ÿ»ÿÌÿöÿ)_ŠŸœIÀÿ…ÿbÿ^ÿ~ÿºÿ eµîñ¹f¬ÿeÿBÿCÿlÿ³ÿ\›À¿aØÿªÿ—ÿ¥ÿÍÿ G|™—zAüÿ¹ÿ„ÿmÿvÿ ÿäÿ4ƒÁäåÅ‹@óÿ±ÿ†ÿxÿ†ÿ¯ÿæÿ#VzƒtOêÿÁÿªÿ®ÿËÿÿÿ@€±ËÄœX­ÿeÿ9ÿ2ÿTÿ™ÿôÿW®ìô¼oÇÿ‹ÿtÿ}ÿ§ÿäÿ)cˆ‘{NÛÿ²ÿžÿ§ÿËÿÿÿ<r”ž‰ZÔÿ™ÿsÿjÿƒÿ·ÿPšÑéá¸v'Öÿ–ÿoÿfÿ~ÿ±ÿõÿ=y «•f&âÿ©ÿ‡ÿ‚ÿžÿÔÿb›º¹–W Áÿ…ÿjÿqÿ›ÿáÿ3…ÀàÚ²nÑÿ™ÿ{ÿ€ÿ¤ÿÞÿ!^‹šj2÷ÿÅÿ¥ÿ ÿ¶ÿãÿ[‹¦¤‡Q Æÿ‹ÿhÿeÿÿ½ÿh¸õ×0Õÿ‡ÿVÿGÿ]ÿÿØÿ$f‘ f0øÿÏÿ½ÿÇÿêÿ!\¬¬S½ÿÿ^ÿ_ÿƒÿÇÿqºåíÑ–Iûÿ¶ÿŠÿ|ÿÿ½ÿûÿ>w™¡c*íÿ½ÿŸÿœÿ´ÿãÿ$cšº¾¢m%×ÿ•ÿiÿYÿoÿ¦ÿòÿKšÙõîÃ-àÿ¤ÿ„ÿ…ÿ§ÿÝÿY‚Väÿ¶ÿ¢ÿªÿÏÿ P‘»Ê¶ƒ8æÿ›ÿfÿSÿdÿ—ÿäÿ=Ððîɇ9çÿ§ÿ|ÿtÿŠÿ¼ÿÿÿD‚ª¸¨~BÊÿ£ÿ•ÿ¤ÿÊÿ=p“|KÐÿ ÿˆÿŽÿ·ÿùÿH—ÕôðÇ‚,Øÿ•ÿmÿkÿ‰ÿÄÿ Q† šw>ÿÿÇÿ¢ÿ™ÿ±ÿáÿ%j¤ÇÉ«r&ÕÿÿbÿUÿjÿŸÿìÿC”Õ÷ùÙšNýÿ¸ÿ‰ÿuÿƒÿ«ÿãÿ#[_.üÿÕÿÂÿÈÿçÿR†¦ª’ZÅÿ„ÿ^ÿYÿ{ÿ¿ÿwÉÿø¼h ¸ÿ}ÿdÿnÿšÿÛÿ%f“¢–l3õÿÂÿ¢ÿžÿ·ÿåÿ&g›¿Ã«x3éÿ©ÿ{ÿlÿxÿ¤ÿäÿ/t¨ÄÀžg$äÿ³ÿ›ÿžÿÀÿõÿ1k’ŸŽb&äÿ¯ÿÿŒÿ©ÿâÿ)o¦À¸Góÿ£ÿfÿLÿVÿ…ÿÔÿ2ŽØä¡MôÿªÿvÿdÿrÿÿÛÿZ…ltfat/inst/signals/bat.m0000664000175000017500000000416712612404256015137 0ustar susnaksusnakfunction [s,fs]=bat() %-*- texinfo -*- %@deftypefn {Function} bat %@verbatim %BAT Load the 'bat' test signal % Usage: s=bat; % % BAT loads the 'bat' signal. It is a 400 samples long recording % of a bat chirp sampled with a sampling period of 7 microseconds. % This gives a sampling rate of 143 kHz. % % [sig,fs]=BAT additionally returns the sampling frequency fs. % % The signal can be obtained from % http://dsp.rice.edu/software/bat-echolocation-chirp % % Please acknowledge use of this data in publications as follows: % % The author wishes to thank Curtis Condon, Ken White, and Al Feng of % the Beckman Institute of the University of Illinois for the bat data % and for permission to use it in this paper. % % Examples: % --------- % % Plot of 'bat' in the time-domain: % % plot((1:400)/143000,bat); % xlabel('Time (seconds)'); % ylabel('Amplitude'); % % Plot of 'bat' in the frequency-domain: % % plotfftreal(fftreal(bat),143000,90); % % Plot of 'bat' in the time-frequency-domain: % % sgram(bat,143000,90); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/bat.html} %@seealso{batmask} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_SIGNALS % REFERENCE: OK if nargin>0 error('This function does not take input arguments.') end; f=mfilename('fullpath'); s=load('-ascii',[f,'.asc']); fs=143000; ltfat/inst/signals/batmask.m0000664000175000017500000000320612612404256016004 0ustar susnaksusnakfunction c=batmask() %-*- texinfo -*- %@deftypefn {Function} batmask %@verbatim %BATMASK Load a Gabor multiplier symbol for the 'bat' test signal % Usage: c=batmask; % % BATMASK loads a Gabor multiplier with a 0/1 symbol that masks out % the main contents of the 'bat' signal. The symbol fits a Gabor % multiplier with lattice given by a=10 and M=40. % % The mask was created manually using a image processing program. The % mask is symmetric, such that the result will be real valued if the % multiplier is applied to a real valued signal using a real valued % window. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/signals/batmask.html} %@seealso{bat} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_BATMASK % REFERENCE: OK if nargin>0 error('This function does not take input arguments.') end; f=mfilename('fullpath'); c=load('-ascii',[f,'.asc']); ltfat/inst/quadratic/0000775000175000017500000000000012612404256014520 5ustar susnaksusnakltfat/inst/quadratic/wignervilledist.m0000664000175000017500000000546512612404256020123 0ustar susnaksusnakfunction W = wignervilledist(f,g) %-*- texinfo -*- %@deftypefn {Function} wignervilledist %@verbatim %WIGNERVILLEDIST Wigner-Ville distribution % Usage: W = wignervilledist(f); % W = wignervilledist(f, g); % % Input parameters: % f,g : Input vector(s) % % Output parameters: % w : Wigner-Ville distribution % % WIGNERVILLEDIST(f) computes the Wigner-Ville distribution of the vector f. The % Wigner-Ville distribution is computed by % % where R(n,m) is the instantaneous correlation matrix given by % % where m in {-L/2,..., L/2 - 1}, and where z is the analytical representation of % f, when f is real-valued. % % WIGNERVILLEDIST(f,g) computes the cross-Wigner-Ville distribution of f and g. % % *WARNING**: The quadratic time-frequency distributions are highly % redundant. For an input vector of length L, the quadratic time-frequency % distribution will be a L xL matrix. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/quadratic/wignervilledist.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven % TESTING: TEST_WIGNERVILLEDIST % REFERENCE: REF_WIGNERVILLEDIST upfname = upper(mfilename); complainif_notenoughargs(nargin, 1, upfname); complainif_toomanyargs(nargin, 2, upfname); [f,~,W]=comp_sigreshape_pre(f,upfname); if W>1 error('%s: Only one-dimensional vectors can be processed.',upfname); end if (nargin == 1) if isreal(f) z1 = comp_fftanalytic(f); else z1 = f; end z2 = z1; R = comp_instcorrmat(z1, z2); W = real(fft(R)); elseif (nargin == 2) [g,~,W]=comp_sigreshape_pre(g,upfname); if W>1 error('%s: Only one-dimensional vectors can be processed.',upfname); end if ~all(size(f)==size(g)) error('%s: f and g must have the same length.', upper(mfilename)); end; if xor(isreal(f), isreal(g)) error('%s: One input is real, the other one must be real too. ',... upfname); end if isreal(f) || isreal(g) z1 = comp_fftanalytic(f); z2 = comp_fftanalytic(g); else z1 = f; z2 = g; end; R = comp_instcorrmat(z1, z2); W = fft(R); end ltfat/inst/quadratic/drihaczekdist.m0000664000175000017500000000341712612404256017533 0ustar susnaksusnakfunction r = drihaczekdist(f) %-*- texinfo -*- %@deftypefn {Function} drihaczekdist %@verbatim %DRIHACZEKDIST discrete Rihaczek distribution % Usage r = drihaczekdist(f); % % % DRIHACZEKDIST(f) computes a discrete Rihaczek distribution of vector % f. The discrete Rihaczek distribution is computed by % % where k, l=0,...,L-1 and c is the Fourier transform of f. % % *WARNING**: The quadratic time-frequency distributions are highly % redundant. For an input vector of length L, the quadratic time-frequency % distribution will be a L xL matrix. If f is multichannel % (LxW matrix), the resulting distributions are stacked along % the third dimension such that the result is LxL xW cube. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/quadratic/drihaczekdist.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven % TESTING: TEST_DRIHACZEKDIST % REFERENCE: REF_DRIHACZEKDIST complainif_notenoughargs(nargin, 1, 'DRIHACZEKDIST'); [f,Ls]=comp_sigreshape_pre(f,upper(mfilename)); c = dgt(f, f, 1, Ls); r = dsft(c); ltfat/inst/quadratic/quadtfdist.m0000664000175000017500000000316612612404256017054 0ustar susnaksusnakfunction p = quadtfdist(f, q) %-*- texinfo -*- %@deftypefn {Function} quadtfdist %@verbatim %QUADTFDIST Quadratic time-frequency distribution % Usage p = quadtfdist(f, q); % % Input parameters: % f : Input vector:w % q : Kernel % % Output parameters: % p : Quadratic time-frequency distribution % % For an input vector of length L, the kernel should be a L x L matrix. % QUADTFDIST(f, q); computes a discrete quadratic time-frequency % distribution. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/quadratic/quadtfdist.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven complainif_notenoughargs(nargin, 2, 'QUADTFDIST'); [M,N] = size(q); if ~all(M==N) error('%s: The kernel should be a square matrix.', upper(mfilename)); end [f,~,Ls,W,~,permutedsize,order]=assert_sigreshape_pre(f,[],[],upper(mfilename)); p = comp_quadtfdist(f, q); ltfat/inst/quadratic/quadraticinit.m0000664000175000017500000000165012612404256017541 0ustar susnaksusnakstatus=1; %-*- texinfo -*- %@deftypefn {Function} quadraticinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/quadratic/quadraticinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/quadratic/Contents.m0000664000175000017500000000246312612404256016500 0ustar susnaksusnak% LTFAT - Quadratic time-frequency distributions % % Jordy van Velthoven, 2014 - 2015. % % Quadratic distributions % AMBIGUITYFUNCTION - Ambiguity function % WIGNERVILLEDIST - Wigner-Ville distribution % DRIHACZEKDIST - Discrete Rihaczek distribution % QUADTFDIST - Generic Quadratic distribution % % Plots % PLOTQUADTFDIST - Plot quadratic time-frequency distribution % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % Url: http://ltfat.github.io/doc/quadratic/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/quadratic/ambiguityfunction.m0000664000175000017500000000510412612404256020436 0ustar susnaksusnakfunction A = ambiguityfunction(f,g) %-*- texinfo -*- %@deftypefn {Function} ambiguityfunction %@verbatim %AMBIGUITYFUNCTION Ambiguity function % Usage: A = ambiguityfunction(f); % A = ambiguityfunction(f,g); % % Input parameters: % f,g : Input vector(s). % % Output parameters: % A : ambiguity function % % AMBIGUITYFUNCTION(f) computes the (symmetric) ambiguity function of f. % The ambiguity function is computed as the two-dimensional Fourier transform % of the Wigner-Ville distribution WIGNERVILLEDIST. % % *WARNING**: The quadratic time-frequency distributions are highly % redundant. For an input vector of length L, the quadratic time-frequency % distribution will be a L xL matrix. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/quadratic/ambiguityfunction.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven % TESTING: TEST_AMBIGUITYFUNCTION % REFERENCE: REF_AMBIGUITYFUNCTION upfname = upper(mfilename); complainif_notenoughargs(nargin, 1, upfname); complainif_toomanyargs(nargin, 2, upfname); [f,~,W]=comp_sigreshape_pre(f,upfname); if W>1 error('%s: Only one-dimensional vectors can be processed.',upfname); end if (nargin == 1) if isreal(f) z1 = comp_fftanalytic(f); else z1 = f; end z2 = z1; elseif (nargin == 2) [g,~,W]=comp_sigreshape_pre(g,upfname); if W>1 error('%s: Only one-dimensional vectors can be processed.',upfname); end if ~all(size(f)==size(g)) error('%s: f and g must have the same length.', upfname); end; if xor(isreal(f), isreal(g)) error('%s: One input is real, the other one must be real too. ',... upfname); end if isreal(f) || isreal(g) z1 = comp_fftanalytic(f); z2 = comp_fftanalytic(g); else z1 = f; z2 = g; end; end R = comp_instcorrmat(z1, z2); A = fftshift(fft2(fft(R))); ltfat/inst/quadratic/plotquadtfdist.m0000664000175000017500000000615212612404256017751 0ustar susnaksusnakfunction plotquadtfdist(p, varargin); %-*- texinfo -*- %@deftypefn {Function} plotquadtfdist %@verbatim %PLOTQUADTFDIST Plot quadratic time-frequency distribution % Usage: plotquadtfdist(p); % % 'plotquadtfdist(p)' plots the quadratic time-frequency distribution % on the time-frequency plane. The quadratic time-frequency distribution % should be a square matrix. % % PLOTQUADTFDIST takes the following additional arguments: % % 'dynrange',r % Limit the dynamical range to r by using a colormap in % the interval [chigh-r,chigh], where chigh is the highest % value in the plot. The default value of [] means to not % limit the dynamical range. % % 'db' Apply 20*log_{10} to the coefficients. This makes % it possible to see very weak phenomena, but it might show % too much noise. A logarithmic scale is more adapted to % perception of sound. This is the default. % % 'dbsq' Apply 10*log_{10} to the coefficients. Same as the % 'db' option, but assume that the input is already squared. % % 'lin' Show the coefficients on a linear scale. This will % display the raw input without any modifications. Only works for % real-valued input. % % 'linsq' Show the square of the coefficients on a linear scale. % % 'linabs' Show the absolute value of the coefficients on a linear scale. % % 'tc' Time centring. Move the beginning of the signal to the % middle of the plot. % % 'clim',clim Use a colormap ranging from clim(1) to clim(2). These % values are passed to imagesc. See the help on imagesc. % % 'image' Use imagesc to display the plot. This is the default. % % 'contour' Do a contour plot. % % 'surf' Do a surf plot. % % 'colorbar' Display the colorbar. This is the default. % % 'nocolorbar' Do not display the colorbar. % % 'display' Display the figure. This is the default. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/quadratic/plotquadtfdist.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven complainif_notenoughargs(nargin, 1, 'PLOTQUADTFDIST'); [N1, N2] = size(p); if N1==N2 yr = [0, 1-2/N1]; else error('%s: The input should be a square matrix.', upper(mfilename)); end; tfplot(p, 1, yr, varargin{:}); ltfat/inst/thirdparty/0000775000175000017500000000000012612404251014730 5ustar susnaksusnakltfat/inst/thirdparty/voicebox/0000775000175000017500000000000012612404256016553 5ustar susnaksusnakltfat/inst/thirdparty/voicebox/voicebox_pcmu2lin.m0000664000175000017500000000551012612404256022361 0ustar susnaksusnakfunction x=voicebox_pcmu2lin(p,s) %-*- texinfo -*- %@deftypefn {Function} voicebox_pcmu2lin %@verbatim %PCMU2LIN Convert Mu-law PCM to linear X=(P,S) % lin = pcmu2lin(pcmu) where pcmu contains a vector % of mu-law values in the range 0 to 255. % No checking is performed to see that numbers are in this range. % % Output values are divided by the scale factor s: % % s Output Range % % 1 +-8031 (integer values) % 4004.2 +-2.005649 (default) % 8031 +-1 % 8159 +-0.9843118 (+-1 nominal full scale) % % The default scaling factor 4004.189931 is equal to % sqrt((2207^2 + 5215^2)/2) this follows ITU standard G.711. % The sine wave with PCM-Mu values [158 139 139 158 30 11 11 30] % has a mean square value of unity corresponding to 0 dBm0. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/thirdparty/voicebox/voicebox_pcmu2lin.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Copyright (C) Mike Brookes 1998 % Version: $Id: pcmu2lin.m 713 2011-10-16 14:45:43Z dmb $ % % VOICEBOX is a MATLAB toolbox for speech processing. % Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You can obtain a copy of the GNU General Public License from % http://www.gnu.org/copyleft/gpl.html or by writing to % Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if nargin<2 t=9.98953613E-4; else t=4/s; end m=15-rem(p,16); q=floor(p/128); e=(127-p-m+128*q)/16; x=(q-0.5).*(pow2(m+16.5,e)-16.5)*t; ltfat/inst/thirdparty/voicebox/wavload.m0000664000175000017500000004111712612404256020372 0ustar susnaksusnakfunction [y,fs,wmode,fidx]=wavload(filename,mode,nmax,nskip) %-*- texinfo -*- %@deftypefn {Function} wavload %@verbatim %WAVLOAD Read a .WAV format sound file [Y,FS,WMODE,FIDX]=(FILENAME,MODE,NMAX,NSKIP) % % Input Parameters: % % FILENAME gives the name of the file (with optional .WAV extension) or alternatively % can be the FIDX output from a previous call to WAVLOAD % MODE specifies the following (*=default): % % Scaling: 's' Auto scale to make data peak = +-1 % 'r' Raw unscaled data (integer values) % 'q' Scaled to make 0dBm0 be unity mean square % 'p' Scaled to make +-1 equal full scale % 'o' Scale to bin centre rather than bin edge (e.g. 127 rather than 127.5 for 8 bit values) % (can be combined with n+p,r,s modes) % 'n' Scale to negative peak rather than positive peak (e.g. 128.5 rather than 127.5 for 8 bit values) % (can be combined with o+p,r,s modes) % 'g' Scale by the gain written by the "g" option in "writewav" to restore original level % Offset: 'y' Correct for offset in <=8 bit PCM data % 'z' No offset correction % File I/O: 'f' Do not close file on exit % Display; 'h' Print header information % 'w' Plot waveform % 'W' Plot spectrogram (max 10 seconds) % 'a' play audio (max 10 seconds) % 'A' play all audio even if very long % 'i' Read header only. % % NMAX maximum number of samples to read (or -1 for unlimited [default]) % NSKIP number of samples to skip from start of file % (or -1 to continue from previous read when FIDX is given instead of FILENAME [default]) % % Output Parameters: % % Y data matrix of dimension (samples,channels) % FS sample frequency in Hz % WMODE mode string needed for WRITEWAV to recreate the data file % FIDX Information row vector containing the element listed below. % % (1) file id % (2) current position in file % (3) dataoff byte offset in file to start of data % (4) nsamp number of samples % (5) nchan number of channels % (6) nbyte bytes per data value % (7) bits number of bits of precision % (8) code Data format: 1=PCM, 2=ADPCM, 3=floating point, 6=A-law, 7=Mu-law % (9) fs sample frequency % (10) mask channel mask % (11) gain gain factor in dB % % If no output parameters are specified, header information will be printed. % % !!WARNING!! % Please note that this function cannot handle compressed wav files. % % For stereo data, y(:,1) is the left channel and y(:,2) the right % The mask, if specified, is a bit field giving the channels present in the following order: % 0=FL, 1=FR, 2=FC, 3=W, 4=BL, 5=BR, 6=FLC, 7=FRC, 8=BC, 9=SL, 10=SR, 11=TC, 12=TFL, 13=TFC, 14=TFR, 15=TBL, 16=TBC, 17=TBR % where F=front, L=left, C=centre, W=woofer (low frequency), B=back, LC=left of centre, RC=right of centre, S=side, T=top % % * Note on scaling ** % If we want to scale signal values in the range +-1 to an integer in the % range [-128,127] then we have four plausible choices corresponding to % scale factors of (a) 127, (b) 127.5, (c) 128 or (d) 128.5 but each choice % has disadvantages. % For forward scaling: (c) and (d) cause clipping on inputs of +1. % For reverse scaling: (a) and (b) can generate output values < -1. % Any of these scalings can be selected via the mode input: (a) 'o', (b) default, (c) 'on', (d) 'n' % % Copyright (C) Mike Brookes 1998-2011 % Version: Id: readwav.m 713 2011-10-16 14:45:43Z dmb % % VOICEBOX is a MATLAB toolbox for speech processing. % Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html % % * NOTE ON CHANGES ** % The original name of this function in VOICEBOX was readwav. It was % renamed to avoid possible namespace clash. % Modified by: Zdenek Prusa 2015 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You can obtain a copy of the GNU General Public License from % http://www.gnu.org/copyleft/gpl.html or by writing to % Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/thirdparty/voicebox/wavload.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Bugs/suggestions: if nargin<1 error('Usage: [y,fs,wmode,fidx]=WAVLOAD(filename,mode,nmax,nskip)'); end if nargin<2 mode='p'; else mode = [mode(:).' 'p']; end k=find((mode>='p') & (mode<='s')); mno=all(mode~='o'); % scale to input limits not output limits sc=mode(k(1)); z=128*all(mode~='z'); info=zeros(1,11); if ischar(filename) % if any(mode=='d') % filename=fullfile(voicebox('dir_data'),filename); % end fid=fopen(filename,'rb','l'); if fid == -1 fn=[filename,'.wav']; fid=fopen(fn,'rb','l'); if fid ~= -1 filename=fn; end end if fid == -1 error('Can''t open %s for input',filename); end info(1)=fid; elseif isvector(filename) && numel(filename) == 11 info=filename; fid=info(1); else error('%s: The first argument must be either a filename or FIDX vector.',... upper(mfilename)); end getdat= nargout>0 && ~any(mode=='i'); getdat= getdat || any(lower(mode)=='w') || any(lower(mode)=='a'); mh=any(mode=='h'); if ~info(3) fseek(fid,8,-1); % read riff chunk header=fread(fid,4,'*char')'; if ~strcmp(header,'WAVE') fclose(fid); error('File does not begin with a WAVE chunck'); end if mh fprintf('\nWAVE file: %s\n',filename); end fmtlen=-1; datalen=-1; instlen=-1; factlen=-1; riffmt='e'; % default is original wave file format while datalen<0 % loop until FMT and DATA chuncks both found header=fread(fid,4,'uint8=>char')'; len=fread(fid,1,'uint32'); if mh fprintf(' %s chunk: %d bytes\n',header,len); end if strcmp(header,'fmt ') % ******* found FMT chunk ********* fmtlen=len; % remember the length if len>16 riffmt='x'; % might be WAVEFORMATEX format end wavfmt=fread(fid,1,'int16'); % format: 1=PCM, 6=A-law, 7-Mu-law info(8)=wavfmt; info(5)=fread(fid,1,'uint16'); % number of channels fs=fread(fid,1,'uint32'); % sample rate in Hz info(9)=fs; % sample rate in Hz rate=fread(fid,1,'uint32'); % average bytes per second (ignore) align=fread(fid,1,'uint16'); % block alignment in bytes (container size * #channels) bps=fread(fid,1,'uint16'); % bits per sample info(7)=bps; % info(6)=ceil(info(7)/8); % round up to a byte count info(6)=floor(align/info(5)); % assume block size/channels = container size if info(8)==-2 % wave format extensible cb=fread(fid,1,'uint16'); % extra bytes must be >=22 riffmt='X'; % WAVEFORMATEXTENSIBLE format wfxsamp=fread(fid,1,'uint16'); % samples union if wfxsamp>0 info(7)=wfxsamp; % valid bits per sample end info(10)=fread(fid,1,'uint32'); % channel mask wfxguida=fread(fid,1,'uint32'); % GUID wfxguidb=fread(fid,2,'uint16'); % GUID wfxguidc=fread(fid,8,'uchar'); % GUID if wfxguida<65536 info(8)=wfxguida; % turn it into normal wav format end fseek(fid,len-40,0); % skip to end of header else if align>0 && align<(info(6)+4)*info(5) info(6)=ceil(align/info(5)); end fseek(fid,len-16,0); % skip to end of header end if mh fmttypes={'?' 'PCM' 'ADPCM' 'IEEE-float' '?' '?' 'A-law' '�-law' '?'}; fprintf(' Format: %d = %s',info(8),fmttypes{1+max(min(info(8),8),0)}); if wavfmt==-2 fprintf(' (%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)\n',wfxguida,wfxguidb,wfxguidc); else fprintf('\n'); end fprintf(' %d channels at %g kHz sample rate (%d kbytes/s)\n',info(5),fs/1000,rate/1000); fprintf(' Mask=%x:',info(10)); spkpos={'FL' 'FR' 'FC' 'W' 'BL' 'BR' 'FLC' 'FRC' 'BC' 'SL' 'SR' 'TC' 'TFL' 'TFC' 'TFR' 'TBL' 'TBC' 'TBR'}; for i=1:18 if mod(floor(info(10)*pow2(1-i)),2) fprintf([' ' spkpos{i}]); end end fprintf('\n %d valid bits of %d per sample (%d byte block size)\n',info(7),bps,align); end elseif strcmp(header,'data') % ******* found DATA chunk ********* if fmtlen<0 fclose(fid); error('File %s does not contain a FMT chunck',filename); end if factlen>3 && nsamp >0 info(4)=nsamp; % take data length from FACT chunk else info(4) = fix(len/(info(6)*info(5))); % number of samples end info(3)=ftell(fid); % start of data datalen=len; if mh fprintf(' %d samples x %d channels x %d bytes/samp',info(4:6)); if prod(info(4:6))~=len fprintf(' + %d padding bytes',len-prod(info(4:6))); end fprintf(' = %g sec\n',info(4)/fs); end elseif strcmp(header,'fact') % ******* found FACT chunk ********* factlen=len; if len<4 error('FACT chunk too short'); end nsamp=fread(fid,1,'uint32'); % number of samples fseek(fid,len-4,0); % skip to end of header if mh fprintf(' %d samples = %.3g seconds\n',nsamp,nsamp/fs); end elseif strcmp(header,'inst') % ******* found INST chunk ********* instlen=len; if len<7 error('INST chunk too short'); end inst=fread(fid,3,'schar'); info(11)=double(inst(3)); % gain in dB if mh fprintf(' Gain = %d dB\n',info(11)); end fseek(fid,len-3,0); % skip to end of header else % ******* found unwanted chunk ********* fseek(fid,len,0); end end else fs=info(9); end if nargin<4 || nskip<0 nskip=info(2); % resume at current file position end ksamples=info(4)-nskip; % number of samples remaining if nargin>2 if nmax>=0 ksamples=min(nmax,ksamples); end elseif mh ksamples=min(5,ksamples); % just read 5 samples so we can print the first few data values elseif ~getdat ksamples = 0; end if ksamples>0 info(2)=nskip+ksamples; fseek(fid,info(3)+info(6)*info(5)*nskip,-1); nsamples=info(5)*ksamples; if any(info(8)==3) % floating point format pk=1; % peak is 1 switch info(6) case 4 y=fread(fid,nsamples,'float32'); case 8 y=fread(fid,nsamples,'float64'); otherwise error('cannot read %d-byte floating point numbers',info(6)); end else if ~any(info(8)==[1 6 7]) sc='r'; % read strange formats in raw integer mode end pk=pow2(0.5,8*info(6))*(1+(mno/2-all(mode~='n'))/pow2(0.5,info(7))); % use modes o and n to determine effective peak switch info(6) case 1 y=fread(fid,nsamples,'uchar'); if info(8)==1 y=y-z; elseif info(8)==6 y=voicebox_pcma2lin(y,213,1); pk=4032+mno*64; elseif info(8)==7 y=voicebox_pcmu2lin(y,1); pk=8031+mno*128; end case 2 y=fread(fid,nsamples,'int16'); case 3 y=fread(fid,3*nsamples,'uchar'); y=reshape(y,3,nsamples); y=([1 256 65536]*y-pow2(fix(pow2(y(3,:),-7)),24)).'; case 4 y=fread(fid,nsamples,'int32'); otherwise error('cannot read %d-byte integers',info(6)); end end if sc ~= 'r' if sc=='s' sf=1/max(abs(y(:))); elseif sc=='p' sf=1/pk; else if info(8)==7 sf=2.03761563/pk; else sf=2.03033976/pk; end end y=sf*y; else % mode = 'r' - output raw values if info(8)==1 y=y*pow2(1,info(7)-8*info(6)); % shift to get the bits correct end end if any(mode=='g') && info(11)~=0 y=y*10^(info(11)/20); % scale by the gain end if info(5)>1 y = reshape(y,info(5),ksamples).'; end else y=[]; end if all(mode~='f') fclose(fid); end if nargout>2 % sort out the mode input for writing this format wmode=char([riffmt sc 'z'-z/128]); if factlen>0 wmode=[wmode 'E']; end if info(6)>1 && info(6)<5 cszc=' cCL'; wmode=[wmode cszc(info(6))]; end switch info(8) case 1 % PCM modes if ~mno wmode=[wmode 'o']; end if any(mode=='n') wmode=[wmode 'n']; end wmode=[wmode num2str(info(7))]; case 3 if info(7)<=32 wmode = [wmode 'v']; else wmode = [wmode 'V']; end case 6 wmode = [wmode 'a']; case 7 wmode = [wmode 'u']; end fidx=info; end [ns,nchan]=size(y); if mh && ns>0 nsh=min(ns,5); % print first few samples for i=1:nsh fprintf(' %d:',i); fprintf(' %.3g',y(i,:)); fprintf('\n'); end end if ns>0.01*fs if any(lower(mode)=='a') nsh=min(ns,10*fs+ns*any(mode=='A')); soundsc(y(1:nsh,1:min(nchan,2)),fs); end if any(mode=='W') && any(mode=='w') error('Cannot plot waveform and spectrogram at the same time.'); end if any(mode=='W') clf; if nchan>1 for i=nchan:-1:1 subplot(nchan,1,i) maxsamp = fs sgram(y(:,i),fs,90); end else sgram(y,fs,90); end elseif any(mode=='w') clf; if nchan>1 for i=nchan:-1:1 subplot(nchan,1,i) plot((1:ns)/fs,y(:,i)); ylabel(['Chan ' num2str(i)]); if i==nchan xlabel('Time (s)'); end end else plot((1:ns)/fs,y); xlabel('Time (s)'); end end end if nargout==0 clear y; end ltfat/inst/thirdparty/voicebox/voicebox_pcma2lin.m0000664000175000017500000000601212612404256022333 0ustar susnaksusnakfunction x=voicebox_pcma2lin(p,m,s) %-*- texinfo -*- %@deftypefn {Function} voicebox_pcma2lin %@verbatim %PCMU2LIN Convert A-law PCM to linear X=(P,M,S) % lin = pcma2lin(pcma,m,s) where pcma contains a vector or matrix % of A-law values in the range 0 to 255. % No checking is performed to see that numbers are in this range. % % Input values are exclusive ored with m (default=85) % % Output values are divided by the scale factor s: % % s Output Range % % 1 +-4032 (integer values) % 2017.396342 +-1.998616 (default) % 4032 +-1 % 4096 +-0.984375 (+-1 nominal full scale) % % The default value of s is 2017.396342 which equals % sqrt((1120^2 + 2624^2)/2). This factor follows ITU standard G.711 and % the sine wave with PCM-A values [225 244 244 225 97 116 116 97] % has a mean square value of unity corresponding to 0 dBm0. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/thirdparty/voicebox/voicebox_pcma2lin.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Copyright (C) Mike Brookes 1998 % Version: $Id: pcma2lin.m 713 2011-10-16 14:45:43Z dmb $ % % VOICEBOX is a MATLAB toolbox for speech processing. % Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You can obtain a copy of the GNU General Public License from % http://www.gnu.org/copyleft/gpl.html or by writing to % Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if nargin<3 t=4.95688418E-4; if nargin<2 m=85; end else t=1/s; end if m q=bitxor(p,m); else q=p; end; k=rem(q,16); g=floor(q/128); e=(q-k-128*g)/16; f=(abs(e-1)-e+1)/2; x=(2*g-1).*(pow2(k+16.5,e)+f.*(k-15.5))*t; ltfat/inst/thirdparty/voicebox/wavsave.m0000664000175000017500000003554412612404256020420 0ustar susnaksusnakfunction fidx=wavsave(d,fs,filename,mode,nskip,mask) %-*- texinfo -*- %@deftypefn {Function} wavsave %@verbatim %WAVSAVE Creates .WAV format sound files FIDX=(D,FS,FILENAME,MODE,NSKIP,MASK) % % The input arguments for WAVSAVE are as follows: % % D The sampled data to save % FS The rate at which the data was sampled % FILENAME A string containing the name of the .WAV file to create or % alternatively the FIDX output from a previous wavsave call % MODE String containing any reasonable mixture of flags below (*=default): % NSKIP Number of samples to skip before writing or -1[default] to continue from previous write % Only valid if FIDX is specified for FILENAME % MASK specifies the speaker positions included as a bit mask (see readwav) % % MODE flags (*=default): % Precision: 'a' for 8-bit A-law PCM % 'u' for 8-bit mu-law PCM % '16' for 16 bit PCM data % '8' for 8 bit PCM data % ... any number in the range 2 to 32 for PCM % 'v' 32-bit floating point % 'V' 64-bit floating point % 'c' embed in 16 bits % 'C' embed in 24 bits % 'L' embed in 32 bits % Dither: 'w' White triangular dither of amplitude +-1 LSB (PCM modes only) % 'h' High pass dither (filtered by 1-1/z) (PCM modes only) % 'l' Low pass dither (filtered by 1+1/z) (PCM modes only) % Scaling: 's' Auto scale to make data peak = +-1 % 'r' Raw unscaled data (integer values) % 'q' Scaled to make unity mean square correspond to 0dBm according to G.711 % 'p' Scaled to make +-1 equal full scale % 'o' Scale to bin centre rather than bin edge (e.g. 127 rather than 127.5 for 8 bit values) % (can be combined with n+p,r,s modes) % 'n' Scale to negative peak rather than positive peak (e.g. 128.5 rather than 127.5 for 8 bit values) % (can be combined with o+p,r,s modes) % 'g' Include a gain factor so that "readwav" will restore the correct level % Offset: 'y' Correct for offset in <=8 bit PCM data % 'z' Do not apply offset correction % Format: 'x' use WAVEFORMATEX format (default for non PCM) % 'X' use WAVEFORMATEXTENSIBLE (default if MASK input is given) % 'e' use original WAVEFORMAT (default for PCM) % 'E' include a 'fact' chunk (default for non-PCM) % File I/O: 'f' Do not close file on exit % % % Output Parameter: % % FIDX Information row vector containing the element listed below. % % (1) file id % (2) current position in file (in samples, 0=start of file) % (3) dataoff length of file header in bytes % (4) nsamp number of samples % (5) nchan number of channels % (6) nbyte bytes per data value % (7) bits number of bits of precision % (8) code Data format: 1=PCM, 2=ADPCM, 6=A-law, 7=Mu-law % (9) fs sample frequency % (10) dither state variable % (11) gain in dB (in INST chunk) % % Note: WAVSAVE will create an 16-bit PCM, auto-scaled wave file by default. % For stereo data, d(:,1) is the left channel and d(:,2) the right % % * Note on scaling ** % If we want to scale signal values in the range +-1 to an integer in the % range [-128,127] then we have four plausible choices corresponding to % scale factors of (a) 127, (b) 127.5, (c) 128 or (d) 128.5 but each choice % has disadvantages. % For forward scaling: (c) and (d) cause clipping on inputs of +1. % For reverse scaling: (a) and (b) can generate output values < -1. % Any of these scalings can be selected via the mode input: (a) 'o', (b) default, (c) 'on', (d) 'n' %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/thirdparty/voicebox/wavsave.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Copyright (C) Mike Brookes 1998-2011 % Version: $Id: writewav.m 713 2011-10-16 14:45:43Z dmb $ % % VOICEBOX is a MATLAB toolbox for speech processing. % Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html % % *** NOTE ON CHANGES *** % The original name of this function in VOICEBOX was writewav. It was % renamed to avoid possible namespace clash. % Modified by: Zdenek Prusa 2015 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You can obtain a copy of the GNU General Public License from % http://www.gnu.org/copyleft/gpl.html or by writing to % Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Acknowledgements % Thanks to Hugh Barnes for sorting out seek problems with MATLAB 6.5 % Bugs/suggestions % Save the following factors in FIDX: (a) scale factor, (b) offset (c) low/high clip limits % (d) dither position (e) rounding position if nargin<3 error('Usage: WAVSAVE(data,fs,filename,mode,nskip)'); end if nargin<6 mask=0; end info=zeros(1,11); info(9)=fs; if nargin<4 mode='p'; else mode = [mode(:).' 'p']; % no scaling by default end info(8)=1; % default mode is PCM mno=all(mode~='o'); % scale to input limits not output limits k=find((mode>='0') & (mode<='9'),1); if k, info(7)=sscanf(mode(k:end),'%d'); % valid bits per data value else info(7)=16; end if any(mode=='c') info(6)=2; % bytes per data value = 2 elseif any(mode=='C') info(6)=3; % bytes per data value = 3 elseif any(mode=='L') info(6)=4; % bytes per data value = 4 else info(6)=ceil(info(7)/8); % bytes per data value end lo=-pow2(0.5,info(7)); hi=-1-lo; pk=pow2(0.5,8*info(6))*(1-(mno/2-all(mode~='n'))/lo); % use modes o and n to determine effective peak % should perhaps have another variable besides info(7) to control dither position (or set info(7) later) % for A and mu law the dither position is not the same as the number of bits. if any(mode=='a') info(8)=6; pk=4032+mno*64; info(7)=8; % Some sources say this should be listed as 16 valid bits info(6)=1; elseif any(mode=='u') info(8)=7; pk=8031+mno*128; info(7)=8; % Some sources say this should be listed as 16 valid bits info(6)=1; elseif any(mode=='v') pk=1; mode(end)='r'; % default scaling is 'r' info(6)=4; % bytes info(7)=32; % bits info(8)=3; % WAVE type elseif any(mode=='V') pk=1; mode(end)='r'; % default scaling is 'r' info(6)=8; % bytes info(7)=64; % bits info(8)=3; % WAVE type end % is this pk value correct ? sc=mode(find((mode>='p') & (mode<='s'),1)); % find the first scaling option (always exists) z=128*all(mode~='z'); if any(mode=='w') di='w'; % select dither mode elseif any(mode=='h') di='h'; elseif any(mode=='l') di='l'; else di='n'; end % Now sort out which wave format to use if any(mode=='e') wavtype=1; elseif any(mode=='x') wavtype=2; elseif any(mode=='X') || nargin>=6 wavtype=3; else wavtype=2-(info(8)==1); end wavfmt=info(8)*(wavtype<3)+(pow2(16)-2)*(wavtype==3); fmtlen=[16 18 40]; % length of format chunk factlen=12*(any(mode=='E') || info(8)~=1); instlen=16*any(mode=='g'); % length of INST chunk (force to be even since some readers do not like odd lengths) wavlen=[36 38 60]+factlen+instlen; % length of entire WAVE chunk except for the data (not including 8 byte RIFF header) [n,nc]=size(d); if n==1 n=nc; nc=1; else d = d.'; end; if nc>32 error('WAVSAVE: attempt to write a sound file with >32 channels'); end nc=max(nc,1); ncy=nc*info(6); % bytes per sample time nyd=n*ncy; % bytes to write if ischar(filename) if any(mode=='d') filename=fullfile(voicebox('dir_data'),filename); end ny=nyd; if isempty(findstr(filename,'.')) filename=[filename,'.wav']; end fid=fopen(filename,'wb+','l'); if fid == -1 error('Can''t open %s for output',filename); end info(1)=fid; fwrite(fid,'RIFF','uchar'); % main RIFF header fwrite(fid,wavlen(wavtype)+2*ceil(ny/2),'uint32'); % fwrite(fid,'WAVEfmt ','uchar'); % write "WAVE" ID and "fmt" chunk fwrite(fid,[fmtlen(wavtype) 0 wavfmt nc],'uint16'); % chunk size, format code, number of channels fwrite(fid,[fs fs*ncy],'uint32'); % sample rate, bytes per sec switch wavtype case 1 fwrite(fid,[ncy info(7)],'uint16'); % block size, bits-per-sample case 2 fwrite(fid,[ncy info(7)],'uint16'); % block size, bits-per-sample fwrite(fid,0,'uint16'); % size of the extension=0 case 3 fwrite(fid,[ncy 8*info(6)],'uint16'); % block size, bits-per-sample (aways a multiple of 8) fwrite(fid,[22 info(7)],'uint16'); % size of the extension=22, valid bits fwrite(fid,[mask info(8)],'uint32'); % speaker position mask, encoding format fwrite(fid,[0 16 128 43520 14336 29083],'uint16'); % GUID end if factlen fwrite(fid,'fact','uchar'); % fact chunk header fwrite(fid,[4 n],'uint32'); % length in bytes + number of samples end if instlen fwrite(fid,'inst','uchar'); % fact chunk header fwrite(fid,instlen-8,'uint32'); % length in bytes fwrite(fid,zeros(1,instlen-8),'uchar'); % inst data (zero for now) end fwrite(fid,'data','uchar'); % data header fwrite(fid,ny,'uint32'); % data length in bytes nskip=0; % over-ride any nskip argument info(3)=8+wavlen(wavtype); % length of all header information info(4)=n; % number of samples (per channel) info(2)=n; % current file position (in samples) info(10)=rand(1); % seed for dither generation else info=filename; fid=info(1); fseek(fid,0,1); % go to end of file if nargin<5 || nskip<0 nskip=info(2); % use previous high water mark end info(2)=n+nskip; % file position following this write operation (in samples) ny=nyd+nskip*ncy; % file position following this write operation (in bytes following header) if n && (info(2)>info(4)) % update high water mark if ~info(4) % if no data written previously fseek(fid,22,-1); fwrite(fid,nc,'uint16'); % update number of channels fseek(fid,28,-1); fwrite(fid,fs*ncy,'uint32'); % update bytes/second fwrite(fid,ncy,'uint16'); % update bytes/sample end fseek(fid,4,-1); fwrite(fid,wavlen(wavtype)+2*ceil(ny/2),'uint32'); % update RIFF length if factlen fseek(fid,wavlen(wavtype)-4-instlen,-1); fwrite(fid,n,'uint32'); % update FACT number of samples end fseek(fid,4+wavlen(wavtype),-1); fwrite(fid,ny,'uint32'); % update DATA length info(4)=info(2); end end info(5)=nc; if n if sc~='r' % 'r' = no scaling if sc=='s' % 's' = scale to peak signal pd=max(abs(d(:))); pd=pd+(pd==0); % scale to 1 if data is all zero elseif sc=='p' % 'p' = scale to +-1 = full scale pd=1; else % 'q' = scale to 0dBm if info(8)==7 % mu-law pd=2.03761563; else % A-law or anything else pd=2.03033976; end end if instlen info(11)=min(max(ceil(20*log10(pd)),-128),127); d=pk*10^(-0.05*info(11))*d; if fseek(fid,0,-1) % MATLAB V6.5 fails if this is omitted error('Cannot rewind file'); end if fseek(fid,info(3)-instlen+2,-1); error('Cannot seek to INST chunk gain byte'); end fwrite(fid,info(11),'schar'); % write the INST gain in dB else d=pk/pd*d; end end if fseek(fid,0,-1) % MATLAB V6.5 fails if this is omitted error('Cannot rewind file'); end if fseek(fid,info(3)+nskip*nc*info(6),-1) error('Cannot seek to byte %d in output file',info(3)+nskip*nc*info(6)); end if info(8)==3 % floating point if info(6)==4 fwrite(fid,d,'float32'); else fwrite(fid,d,'float64'); end else % integer data if info(8)<6 % PCM if di=='n' d=round(d); else [d,info(10)]=voicebox_ditherq(d,di,info(10)); end d=min(max(d,lo),hi)*pow2(1,8*info(6)-info(7)); % clip data and shift to most significant bits else % mu or A law z=0; if info(8) < 7 d=lin2pcma(d,213,1); else d=lin2pcmu(d,1); end end if info(6)<3 if info(6)<2 fwrite(fid,d+z,'uchar'); else fwrite(fid,d,'int16'); end else if info(6)<4 d=d(:)'; d2=floor(d/65536); d=d-65536*d2; fwrite(fid,[rem(d,256); floor(d/256); d2+256*(d2<0)],'uchar'); else fwrite(fid,d,'int32'); end end if rem(ny,2) % pad to an even number of bytes fwrite(fid,0,'uchar'); end end end if all(mode~='f') fclose(fid); end if nargout fidx=info; end ltfat/inst/thirdparty/voicebox/voiceboxinit.m0000664000175000017500000000166012612404256021436 0ustar susnaksusnakstatus=2; %-*- texinfo -*- %@deftypefn {Function} voiceboxinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/thirdparty/voicebox/voiceboxinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/thirdparty/voicebox/voicebox_ditherq.m0000664000175000017500000000547312612404256022300 0ustar susnaksusnakfunction [y,zf]=voicebox_ditherq(x,m,zi) %-*- texinfo -*- %@deftypefn {Function} voicebox_ditherq %@verbatim %DITHERQ add dither and quantize [Y,ZF]=(X,M,ZI) % Inputs: % x is the input signal % m specifies the mode: % 'w' white dither (default) % 'h' high-pass dither (filtered by 1 - z^-1) % 'l' low pass filter (filtered by 1 + z^-1) % 'n' no dither %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/thirdparty/voicebox/voicebox_ditherq.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Copyright (C) Mike Brookes 1997 % Version: $Id: ditherq.m 713 2011-10-16 14:45:43Z dmb $ % % VOICEBOX is a MATLAB toolbox for speech processing. % Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You can obtain a copy of the GNU General Public License from % http://www.gnu.org/copyleft/gpl.html or by writing to % Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% s=size(x); n=length(x); if nargin<3 | ~length(zi) zi=rand(1); end if nargin<2 m='w'; end if any(m=='n') y=round(x); elseif any(m=='h') | any(m=='l') v=rand(n+1,1); v(1)=zi; zf=v(end); if any(m=='h') y=round(x(:)+v(2:end)-v(1:end-1)); else y=round(x(:)+v(2:end)+v(1:end-1)-1); end else y=round(x(:)+rand(n,2)*[1;-1]); zf=rand(1); % output a random number anyway end if s(1)==1 y=y.'; end ltfat/inst/scalardistribute.m0000664000175000017500000000652212612404256016272 0ustar susnaksusnakfunction varargout=scalardistribute(varargin) %-*- texinfo -*- %@deftypefn {Function} scalardistribute %@verbatim %SCALARDISTRIBUTE Copy scalar to array shape for parameter handling % Usage: [...] = scalardistribute(...); % % [...]=SCALARDISTRIBUTE(...) copies the input parameters to the % output parameters. % % If one of the input parameters is an array, all the output parameters % will be column vectors containing the same number of elements. If one % of the other input parameters is a scalar, it will be replicated to % the correct length. This allows a scalar value to be repeated for % all conditions. % % If two or more input parameters are arrays, the must have the exact % same size. They will be converted to vectors and returned in the % output parameters. This allows two arrays to co-vary at the same time. % % This operator is usefull for sanitizing input parameters: The user is % allowed to enter scalars or arrays as input paremeters. These input % are in turn passed to SCALARDISTRIBUTE, which makes sure that the % arrays have the same shape, and that scalars are replicated. The user % of scalardistibute can now generate conditions based on all the % parameters, and be sure the have the right sizes. % % As an example, consider: % % [a,b,c]=scalardistribute(1,[2,3],[4,5]) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/scalardistribute.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . npars=length(varargin); scalartest=zeros(npars,1); for ii=1:npars if ~isnumeric(varargin{ii}) error('%s: Input no. %i must be numerical.',upper(mfilename),ii); end; if isempty(varargin{ii}) error('%s: Input no. %i is empty.',upper(mfilename),ii); end; scalartest(ii)=isscalar(varargin{ii}); end; idx=find(scalartest==0); % Tjeck that all non-scalars have the same shape for jj=1:numel(idx) ref_size = size(varargin{idx(1)}); this_size = size(varargin{idx(jj)}); if any((ref_size-this_size)~=0) error('%s: Input no. %i and no. %i must have the same shape.',upper(mfilename),idx(1),idx(jj)); end; end; if numel(idx)==0 % All arguments are scalar, so this is just a dummy, but it must % still be defined for the code not to fail. shape=1; else shape=ones(numel(varargin{idx(1)}),1); end; varargout=cell(1,npars); for ii=1:npars if scalartest(ii) % Replicate scalar varargout{ii}=shape*varargin{ii}; else % Copy input and turn it into a vector. This would be a one-liner % in Octave. tmp=varargin{ii}; varargout{ii}=tmp(:); end; end; ltfat/inst/ltfatstart.m0000664000175000017500000001761612612404256015124 0ustar susnaksusnakfunction ltfatstart(varargin) %-*- texinfo -*- %@deftypefn {Function} ltfatstart %@verbatim %LTFATSTART Start the LTFAT toolbox % Usage: ltfatstart; % % LTFATSTART starts the LTFAT toolbox. This command must be run % before using any of the functions in the toolbox. % % To configure default options for functions, you can use the % LTFATSETDEFAULTS function in your startup script. A typical startup % file could look like: % % addpath('/path/to/my/work/ltfat'); % ltfatstart; % ltfatsetdefaults('sgram','nocolorbar'); % % This will add the main LTFAT directory to you path, start the % toolbox, and configure SGRAM to not display the colorbar. % % The function walks the directory tree and adds a subdirectory % to path if the directory contain a [subdirectory,init.m] % script setting a status variable to some value greater than 0. % status==1 identifies a toolbox module any other value just a % directory to be added to path. % % LTFATSTART(0) supresses any status messages. % % !!WARNING for MATLAB users!! % ---------------------------- % % The function indirectly calls clear all, which clears all your global % and persistent variables. It comes with calling javaaddpath in % blockproc/blockprocinit.m. You can avoid calling it by passing % additional 'nojava' flag. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/ltfatstart.html} %@seealso{ltfatsetdefaults, ltfatmex, ltfathelp, ltfatstop} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: NA do_java = 1; ltfatstartprint=1; if nargin>0 scalarIds = cellfun(@isscalar,varargin); nojavaIds = strcmpi('nojava',varargin); if ~all(scalarIds | nojavaIds) error(['LTFATSTART: Only a single scalar and flag, '... '''nojava'' are recognized']); end if any(nojavaIds) do_java = 0; end scalars = varargin(scalarIds); if numel(scalars)>1 error('LTFATSTART: Only a single scalar can be passed.'); elseif numel(scalars) == 1 ltfatstartprint=scalars{1}; end end; % Get the basepath as the directory this function resides in. % The 'which' solution below is more portable than 'mfilename' % becase old versions of Matlab does not have "mfilename('fullpath')" basepath=which('ltfatstart'); % Kill the function name from the path. basepath=basepath(1:end-13); % add the base path addpath(basepath); bp=basepath; % Load the version number [FID, MSG] = fopen ([bp,filesep,'ltfat_version'],'r'); if FID == -1 error(MSG); else ltfat_version = fgetl (FID); fclose(FID); end ignored_dirs_common = {[filesep(),'mat2doc'],... [filesep(),'src']}; ignored_inits = {}; if ~do_java ignored_inits{end+1} = {'blockprocinit.m',1}; end %% --- Check for old versions of Octave and Matlab if isoctave major_rq=3; minor_rq=6; intp='Octave'; req_versionname='3.6.0'; ignore_dirs = [{[filesep(),'mex']},... ignored_dirs_common]; else major_rq=7; minor_rq=9; intp='Matlab'; req_versionname='2009b'; ignore_dirs = [{[filesep(),'oct']},... ignored_dirs_common]; end; % Split into major and minor version s=version; stops=find(s=='.'); major_no = str2num(s(1:stops(1))); if numel(stops)==1 minor_no = str2num(s(stops(1)+1:end)); bugfix_no = 0; else minor_no = str2num(s(stops(1)+1:stops(2))); bugfix_no = str2num(s(stops(2)+1:end)); end; % Do the check, multiply by some big number to make the check easy if major_rq*1000+minor_rq>major_no*1000+minor_no warning(['Your version of %s is too old for this version of LTFAT ' ... 'to function proberly. Your need at least version %s of %s.'],... intp,req_versionname,intp); end; %% ----------- install the modules ----------------- modules={}; nplug=0; % List all files in base directory d=dir(basepath); % Pick only valid directories and wrap it in a cell array d={d(arrayfun(@(dEl) dEl.isdir && ~strcmp(dEl.name(1),'.'),d))}; basedir = {filesep}; while ~isempty(d) for ii=1:length(d{1}) name=d{1}(ii).name; % Skip ignored directories if any(cellfun(@(iEl) strcmp([basedir{1},name],iEl),ignore_dirs)) continue; end % Store only valid subdirectories, we will go trough them later dtmp = dir([bp,basedir{1},name]); dtmp = dtmp(arrayfun(@(dEl) dEl.isdir && ~strcmp(dEl.name(1),'.'),dtmp)); if ~isempty(dtmp) d{end+1} = dtmp; % Store base directory too basedir{end+1} = [basedir{1},name,filesep]; end % The file is a directory and it does not start with '.' This could % be a module initfilename = [lower(name),'init.m']; initfilefullpath = [bp,basedir{1},name,filesep,initfilename]; if ~exist(initfilefullpath,'file') continue end; % Now we know that we have found a module % Set 'status' to zero if the module forgets to define it. status=0; module_version=ltfat_version; % Add the module dir to the path addpath([bp,basedir{1},name]); iffound = cellfun(@(iEl) strcmpi(initfilename,iEl{1}),ignored_inits); if any(iffound) status = ignored_inits{iffound}{2}; else % Execute the init file to see if the status is set. run(initfilefullpath); end if status>0 % Only store top-level modules if status==1 && strcmp(basedir{1},filesep) nplug=nplug+1; modules{nplug}.name=name; modules{nplug}.version=module_version; end; else % Something failed, restore the path rmpath([bp,basedir{1},name]); end; end; % Remove the just processed dir from the list basedir(1) = []; d(1) = []; end % Check if Octave was called using 'silent' %if isoctave % args=argv; % for ii=1:numel(args) % s=lower(args{ii}); % if strcmp(s,'--silent') || strcmp(s,'-q') % printbanner=0; % end; % end; %end; if ltfatstartprint try s=which('comp_pgauss'); if isempty(s) error('comp_pgauss not found, something is wrong.') end; if strcmp(s(end-1:end),'.m') backend = 'LTFAT is using the script language backend.'; else if isoctave backend = 'LTFAT is using the C++ Octave backend.'; else backend = 'LTFAT is using the MEX backend.'; end; end; catch backend = 'Error with backend, consider running "ltfatmex clean" immidiatly.'; end; banner = sprintf(['LTFAT version %s. Copyright 2005-2015 Peter L. Soendergaard. ' ... 'For help, please type "ltfathelp". %s'], ... ltfat_version,backend); disp(banner); if ~isoctave() && do_java disp('(Your global and persistent variables have just been cleared. Sorry.)'); end if exist('ltfat_binary_notes.m','file') ltfat_binary_notes; end; end; clear ltfatarghelper; %% ---------- load information into ltfathelp ------------ % As comp is now in the path, we can call ltfatarghelper ltfatsetdefaults('ltfathelp','versiondata',ltfat_version,... 'modulesdata',modules); %% ---------- other initializations --------------------- % Force the loading of FFTW, necessary for Matlab 64 bit on Linux. Thanks % to NFFT for this trick. fft([1,2,3,4]); ltfat/inst/operators/0000775000175000017500000000000012612404256014561 5ustar susnaksusnakltfat/inst/operators/spreadfun.m0000664000175000017500000000305512612404256016731 0ustar susnaksusnakfunction coef=spreadfun(T) %-*- texinfo -*- %@deftypefn {Function} spreadfun %@verbatim %SPREADFUN Spreading function of a matrix % Usage: c=spreadfun(T); % % SPREADFUN(T) computes the spreading function of the operator T, % represented as a matrix. The spreading function represent the operator T* % as a weighted sum of time-frequency shifts. See the help text for % SPREADOP for the exact definition. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/spreadfun.html} %@seealso{spreadop, tconv, spreadinv, spreadadj} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(1,1,nargin)); if ndims(T)>2 || size(T,1)~=size(T,2) error('Input symbol T must be a square matrix.'); end; L=size(T,1); % The 'full' appearing on the next line is to guard the mex file. coef=comp_col2diag(full(T)); coef=fft(coef)/L; ltfat/inst/operators/operator.m0000664000175000017500000000324512612404256016576 0ustar susnaksusnakfunction outsig=operator(Op,insig); %-*- texinfo -*- %@deftypefn {Function} operator %@verbatim %OPERATOR Apply operator % Usage: c=operator(Op,f); % % c=OPERATOR(Op,f) applies the operator Op to the input signal f. % The operator object Op must have been created using OPERATORNEW. % % If f is a matrix, the transform will be applied along the columns % of f. If f is an N-D array, the transform will be applied along % the first non-singleton dimension. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/operator.html} %@seealso{operatornew, ioperator, operatoradj} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isstruct(Op) error('%s: First agument must be a operator definition structure.',upper(mfilename)); end; switch(Op.type) case 'framemul' outsig=framemul(insig,Op.Fa,Op.Fs,Op.s); case 'spread' outsig=spreadop(insig,Op.s); end; ltfat/inst/operators/operatoreigs.m0000664000175000017500000000477112612404256017453 0ustar susnaksusnakfunction outsig=operatoreigs(Op,K,varargin); %-*- texinfo -*- %@deftypefn {Function} operatoreigs %@verbatim %OPERATOREIGS Apply the adjoint of an operator % Usage: c=operatoreigs(Op,K); % % [V,D]=OPERATOREIGS(Op,K) computes the K largest eigenvalues and % eigenvectors of the operator Op to the input signal f. The operator % object Op must have been created using OPERATORNEW. % % If K is empty, then all eigenvalues/pairs will be returned. % % D=OPERATOREIGS(...) computes only the eigenvalues. % % OPERATOREIGS takes the following parameters at the end of the line of input % arguments: % % 'tol',t Stop if relative residual error is less than the % specified tolerance. Default is 1e-9 % % 'maxit',n Do at most n iterations. % % 'iter' Call eigs to use an iterative algorithm. % % 'full' Call eig to solve the full problem. % % 'auto' Use the full method for small problems and the % iterative method for larger problems. This is the % default. % % 'crossover',c % Set the problem size for which the 'auto' method % switches. Default is 200. % % 'print' Display the progress. % % 'quiet' Don't print anything, this is the default. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/operatoreigs.html} %@seealso{operatornew, operator, ioperator} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isstruct(Op) error('%s: First argument must be a operator definition structure.',upper(mfilename)); end; switch(Op.type) case 'framemul' outsig=framemuleigs(Op.Fa,Op.Fs,Op.s,K,varargin{:}); case 'spread' outsig=spreadeigs(K,Op.s); end; ltfat/inst/operators/operatorappr.m0000664000175000017500000000344712612404256017465 0ustar susnaksusnakfunction Opout=operatorappr(Op,T) %-*- texinfo -*- %@deftypefn {Function} operatorappr %@verbatim %OPERATORAPPR Best approximation by operator % Usage: c=operatorappr(Op,K); % % Opout=OPERATORAPPR(Opin,T) computes the an operator Opout of the % same type as Opin that best approximates the matrix T in the % Frobenious norm of the matrix (the Hilbert-Schmidt norm of the % operator). % % For some operator classes, the approximation is always exact, so that % operator(Opout,f) computes the exact same result as T'*f. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/operatorappr.html} %@seealso{operatornew, operator, operatoreigs} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isstruct(Op) error('%s: First argument must be a operator definition structure.',upper(mfilename)); end; switch(Op.type) case 'framemul' s=framemulappr(Op.Fa,Op.Fs,T); Opout=operatornew('framemul',Op.Fa,Op.Fs,s); case 'spread' s=spreadfun(T); Opout=operatornew('spread',s); end; ltfat/inst/operators/framemuleigs.m0000664000175000017500000001100712612404256017416 0ustar susnaksusnakfunction varargout=framemuleigs(Fa,Fs,s,varargin) %-*- texinfo -*- %@deftypefn {Function} framemuleigs %@verbatim %FRAMEMULEIGS Eigenpairs of frame multiplier % Usage: [V,D]=framemuleigs(Fa,Fs,s,K); % D=framemuleigs(Fa,Fs,s,K,...); % % Input parameters: % Fa : Analysis frame % Fs : Synthesis frame % s : Symbol of Gabor multiplier % K : Number of eigenvectors to compute. % Output parameters: % V : Matrix containing eigenvectors. % D : Eigenvalues. % % [V,D]=FRAMEMULEIGS(Fa,Fs,s,K) computes the K largest eigenvalues % and eigen-vectors of the frame multiplier with symbol s, analysis % frame Fa and synthesis frame Fs. The eigenvectors are stored as % column vectors in the matrix V and the corresponding eigenvalues in % the vector D. % % If K is empty, then all eigenvalues/pairs will be returned. % % D=FRAMEMULEIGS(...) computes only the eigenvalues. % % FRAMEMULEIGS takes the following parameters at the end of the line of input % arguments: % % 'tol',t Stop if relative residual error is less than the % specified tolerance. Default is 1e-9 % % 'maxit',n Do at most n iterations. % % 'iter' Call eigs to use an iterative algorithm. % % 'full' Call eig to solve the full problem. % % 'auto' Use the full method for small problems and the % iterative method for larger problems. This is the % default. % % 'crossover',c % Set the problem size for which the 'auto' method % switches. Default is 200. % % 'print' Display the progress. % % 'quiet' Don't print anything, this is the default. % % Examples: % --------- % % The following example calculates and plots the first eigenvector of the % Gabor multiplier given by the BATMASK function. Note that the mask % must be converted to a column vector to work with in this framework: % % mask=batmask; % [Fa,Fs]=framepair('dgt','gauss','dual',10,40); % [V,D]=framemuleigs(Fa,Fs,mask(:)); % sgram(V(:,1),'dynrange',90); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/framemuleigs.html} %@seealso{framemul, framemulappr} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Change this to 1 or 2 to see the iterative method in action. printopts=0; if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; if nargout==2 doV=1; else doV=0; end; tolchooser.double=1e-9; tolchooser.single=1e-5; definput.keyvals.K=6; definput.keyvals.maxit=100; definput.keyvals.tol=tolchooser.(class(s)); definput.keyvals.crossover=200; definput.flags.print={'quiet','print'}; definput.flags.method={'auto','iter','full'}; [flags,kv,K]=ltfatarghelper({'K'},definput,varargin); % Do the computation. For small problems a direct calculation is just as % fast. L=framelengthcoef(Fa,size(s,1)); if (flags.do_iter) || (flags.do_auto && L>kv.crossover) if flags.do_print opts.disp=1; else opts.disp=0; end; opts.isreal = Fa.realinput; opts.maxit = kv.maxit; opts.tol = kv.tol; if doV [V,D] = eigs(@(x) framemul(x,Fa,Fs,s),L,K,'LM',opts); else D = eigs(@(x) framemul(x,Fa,Fs,s),L,K,'LM',opts); end; else % Compute the transform matrix. bigM=frsynmatrix(Fs,L)*diag(s)*frsynmatrix(Fa,L)'; if doV [V,D]=eig(bigM); else D=eig(bigM); end; end; % The output from eig and eigs is sometimes a diagonal matrix, so we must % extract the diagonal. if doV D=diag(D); end; % Sort them in descending order [~,idx]=sort(abs(D),1,'descend'); D=D(idx(1:K)); if doV V=V(:,idx(1:K)); varargout={V,D}; else varargout={D}; end; % Clean the eigenvalues, if we know that they are real-valued %if isreal(ga) && isreal(gs) && isreal(c) % D=real(D); %end; ltfat/inst/operators/framemul.m0000664000175000017500000000562412612404256016556 0ustar susnaksusnakfunction h=framemul(f,Fa,Fs,s,varargin) %-*- texinfo -*- %@deftypefn {Function} framemul %@verbatim %FRAMEMUL Frame multiplier % Usage: h=framemul(f,Fa,Fs,s); % % Input parameters: % Fa : Analysis frame % Fs : Synthesis frame % s : Symbol % f : Input signal % % Output parameters: % h : Output signal % % FRAMEMUL(f,Fa,Fs,s) applies the frame multiplier with symbol s* % to the signal f. The frame Fa is used for analysis and the frame % Fs for synthesis. % % Examples: % --------- % % In the following example Gabor coefficients obtained through the DGT % of pink noise are multiplied by the symbol batmask before resynthesis. % The result of this operation is an output signal h that is constructed % through a Gabor expansion of the modified coefficients.: % % f = pinknoise(400); % a = 10; % M = 40; % [Fa, Fs] = framepair('dgt', 'gauss', 'dual', a, M); % s = framenative2coef(Fa, batmask); % fhat = framemul(f, Fa, Fs, s); % figure(1); % plotframe(Fa,frana(Fa,f),'clim',[-100,-20]); % figure(2); % plotframe(Fa,s,'lin'); % figure(3); % plotframe(Fa,frana(Fa,fhat),'clim',[-100,-20]); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/framemul.html} %@seealso{iframemul, framemuladj} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Peter L. Soendergaard if nargin < 4 error('%s: Too few input parameters.',upper(mfilename)); end; if size(s,2)>1 error(['%s: Symbol should be a column vecor i.e. ',... 'in the common Frames framework coefficient format. ',... 'See FRAMENATIVE2COEF and FRAMECOEF2NATIVE.' ],upper(mfilename)); end % Check for compatibility L1=framelength(Fa,size(f,1)); L2=framelengthcoef(Fs,size(s,1)); if L1~=L2 error(['%s: The symbol and signal lengths are incompatible.'],upper(mfilename)); end; % This is not *strictly* necessary, but we cannot check that the symbol % is complex-valued in just the right way. if Fa.realinput && ~isreal(s) error(['%s: For real-valued-input-only frames, the symbol must also ' ... 'be real.'],upper(mfilename)); end; h=frsyn(Fs,s.*frana(Fa,f)); ltfat/inst/operators/spreadeigs.m0000664000175000017500000000321612612404256017067 0ustar susnaksusnakfunction [V,D]=spreadeigs(K,coef); %-*- texinfo -*- %@deftypefn {Function} spreadeigs %@verbatim %SPREADEIGS Eigenpairs of Spreading operator % Usage: h=spreadeigs(K,c); % % SPREADEIGS(K,c) computes the K largest eigenvalues and eigen- % vectors of the spreading operator with symbol c. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/spreadeigs.html} %@seealso{tconv, spreadfun, spreadinv, spreadadj} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(2,2,nargin)); if ndims(coef)>2 || size(coef,1)~=size(coef,2) error('Input symbol coef must be a square matrix.'); end; L=size(coef,1); % This version explicitly constucts the matrix representation T % and then applies this matrix as the final step. coef=fft(coef); T=zeros(L); for ii=0:L-1 for jj=0:L-1 T(ii+1,jj+1)=coef(ii+1,mod(ii-jj,L)+1); end; end; if nargout==2 doV=1; else doV=0; end; if doV [V,D]=eig(T); else D=eig(T); end; ltfat/inst/operators/operatornew.m0000664000175000017500000000414112612404256017304 0ustar susnaksusnakfunction Op=operatornew(otype,varargin) %-*- texinfo -*- %@deftypefn {Function} operatornew %@verbatim %OPERATORNEW Construct a new operator % Usage: F=operatornew(otype,...); % % Op=OPERATORNEW(otype,...) constructs a new operator object Op of type % otype. Arguments following otype are specific to the type of operator % chosen. % % Frame multipliers % ----------------- % % OPERATORNEW('framemul',Fa,Fs,s) constructs a frame multiplier with % analysis frame Fa, synthesis frame Fs and symbol s. See the help on % FRAMEMUL. % % Spreading operators % ------------------- % % OPERATORNEW('spread',s) constructs a spreading operator with symbol % s. See the help on SPREADOP. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/operatornew.html} %@seealso{operator, ioperator} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; if ~ischar(otype) error(['%s: First agument must be a string denoting the type of ' ... 'frame.'],upper(mfilename)); end; otype=lower(otype); switch(otype) case 'framemul' Op.Fa=varargin{1}; Op.Fs=varargin{2}; Op.s =varargin{3}; Op.L =framelengthcoef(Op.Fs,size(Op.s,1)); case 'spread' Op.s =varargin{1}; Op.L =length(Op.s); otherwise error('%s: Unknows operator type: %s',upper(mfilename),otype); end; Op.type=otype; ltfat/inst/operators/framemulappr.m0000664000175000017500000000646512612404256017445 0ustar susnaksusnakfunction [s,TA]=framemulappr(Fa,Fs,T) %-*- texinfo -*- %@deftypefn {Function} framemulappr %@verbatim %FRAMEMULAPPR Best Approximation of a matrix by a frame multiplier % Usage: s=framemulappr(Fa,Fs,T); % [s,TA]=framemulappr(Fa,Fs,T); % % Input parameters: % Fa : Analysis frame % Fs : Synthesis frame % T : The operator represented as a matrix % % Output parameters: % s : Symbol of best approximation % TA : The best approximation of the matrix T % % s=FRAMEMULAPPR(Fa,Fs,T) computes the symbol s of the frame % multiplier that best approximates the matrix T in the Frobenious norm % of the matrix (the Hilbert-Schmidt norm of the operator). The frame % multiplier uses Fa for analysis and Fs for synthesis. % % Examples: % % T = eye(2,2); % D = [0 1/sqrt(2) -1/sqrt(2); 1 -1/sqrt(2) -1/sqrt(2)]; % F = frame('gen',D); % [coeff,TA] = framemulappr(F,F,T) % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/framemulappr.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Literature : [1] P. Balazs; Irregular And Regular Gabor frame multipliers % with application to psychoacoustical masking % (Ph.D. thesis 2005) % [2] P. Balazs; Hilbert- Schmidt Operators and Frames - % Classification, Best Approximation by Multipliers and % Algorithms; % International Journal of Wavelets, Multiresolution and % Information Processing}, to appear, % http://arxiv.org/abs/math.FA/0611634 % Author: Peter Balazs and Peter L. Soendergaard if nargin < 3 error('%s: Too few input parameters.',upper(mfilename)); end; [N M] = size(T); Mfix=M; % Bootstrap the code D=frsynmatrix(Fa,Mfix); Ds=frsynmatrix(Fs,Mfix); [Nd Kd] = size(D); % TODO: Check for for correct framelengths % TODO: Check this error('The frames must have the same number of % elements.'); % TODO: Possible optimization for Fa=Fs % TODO: Express the pinv as an iterative algorithm % Compute the lower symbol. % The more elegant code % % is slower, O(k(n^2+n^2))) % see [Xxl] if 1 % Original expression %lowsym = diag(D'*T*D); % New expression lowsym = conj(diag(frana(Fa,frana(Fa,T)'))); else lowsym = zeros(Kd,1); %lower symbol for ii=1:Kd lowsym(ii) = D(:,ii)'*(T*D(:,ii)); end; end; Gram = (Ds'*Ds).*((D'*D).'); % upper symbol: s = Gram\lowsym; % synthesis if nargout>1 TA = zeros(N,M); for ii = 1:Kd P = Ds(:,ii)*D(:,ii)'; TA = TA + s(ii)*P; end; end; ltfat/inst/operators/operatorsinit.m0000664000175000017500000000165012612404256017643 0ustar susnaksusnakstatus=1; %-*- texinfo -*- %@deftypefn {Function} operatorsinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/operatorsinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/operators/operatoradj.m0000664000175000017500000000335112612404256017253 0ustar susnaksusnakfunction outsig=operatoradj(Op,insig); %-*- texinfo -*- %@deftypefn {Function} operatoradj %@verbatim %OPERATORADJ Apply the adjoint of an operator % Usage: c=operatoradj(Op,f); % % c=OPERATORADJ(Op,f) applies the adjoint operator of the operator Op* % to the input signal f. The operator object Op must have been % created using OPERATORNEW. % % If f is a matrix, the transform will be applied along the columns % of f. If f is an N-D array, the transform will be applied along % the first non-singleton dimension. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/operatoradj.html} %@seealso{operatornew, operator, ioperator} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isstruct(Op) error('%s: First argument must be a operator definition structure.',upper(mfilename)); end; switch(Op.type) case 'framemul' outsig=framemuladj(insig,Op.Fa,Op.Fs,Op.s); case 'spread' outsig=spreadadj(insig,Op.s); end; ltfat/inst/operators/ioperator.m0000664000175000017500000000331312612404256016743 0ustar susnaksusnakfunction outsig=ioperator(Op,insig); %-*- texinfo -*- %@deftypefn {Function} ioperator %@verbatim %IOPERATOR Apply inverse of operator % Usage: c=ioperator(Op,f); % % c=IOPERATOR(Op,f) applies the inverse op the operator Op to the % input signal f. The operator object Op must have been created using % OPERATORNEW. % % If f is a matrix, the transform will be applied along the columns % of f. If f is an N-D array, the transform will be applied along % the first non-singleton dimension. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/ioperator.html} %@seealso{operatornew, operator, operatoradj} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isstruct(Op) error('%s: First agument must be a operator definition structure.',upper(mfilename)); end; switch(Op.type) case 'framemul' outsig=iframemul(insig,Op.Fa,Op.Fs,Op.s); case 'spread' outsig=spreadinv(insig,Op.s); end; ltfat/inst/operators/framemuladj.m0000664000175000017500000000333312612404256017230 0ustar susnaksusnakfunction h=framemuladj(f,Fa,Fs,s,varargin) %-*- texinfo -*- %@deftypefn {Function} framemuladj %@verbatim %FRAMEMULADJ Adjoint operator of frame multiplier % Usage: h=framemuladj(f,Fa,Fs,s); % % Input parameters: % Fa : Analysis frame % Fs : Synthesis frame % s : Symbol % f : Input signal % % Output parameters: % h : Output signal % % FRAMEMULADJ(f,Fa,Fs,s) applies the adjoint of the frame multiplier % with symbol s to the signal f. The frame Fa is used for analysis % and the frame Fs for synthesis. This is equivalent to calling % framemul(f,Fs,Fa,conj(s)). % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/framemuladj.html} %@seealso{framemul, iframemul} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Peter L. Soendergaard if nargin < 4 error('%s: Too few input parameters.',upper(mfilename)); end; % Swap the analysis and synthesis frames and conjugate the symbol. h=frsyn(Fa,conj(s).*frana(Fs,f)); ltfat/inst/operators/spreadop.m0000664000175000017500000000656112612404256016564 0ustar susnaksusnakfunction h=spreadop(f,coef) %-*- texinfo -*- %@deftypefn {Function} spreadop %@verbatim %SPREADOP Spreading operator % Usage: h=spreadop(f,c); % % SPREADOP(f,c) applies the operator with spreading function c to the % input f. c must be square. % % SPREADOP(f,c) computes the following for c of size L xL: % % L-1 L-1 % h(l+1) = sum sum c(m+1,n+1)*exp(2*pi*i*l*m/L)*f(l-n+1) % n=0 m=0 % % where l=0,...,L-1 and l-n is computed modulo L. % % The combined symbol of two spreading operators can be found by using % tconv. Consider two symbols c1 and c2 and define f1 and f2 by: % % h = tconv(c1,c2) % f1 = spreadop(spreadop(f,c2),c1); % f2 = spreadop(f,h); % % then f1 and f2 are equal. % % % References: % H. G. Feichtinger and W. Kozek. Operator quantization on LCA groups. In % H. G. Feichtinger and T. Strohmer, editors, Gabor Analysis and % Algorithms, chapter 7, pages 233-266. Birkhauser, Boston, 1998. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/spreadop.html} %@seealso{tconv, spreadfun, spreadinv, spreadadj} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_SPREAD % REFERENCE: REF_SPREADOP error(nargchk(2,2,nargin)); if ndims(coef)>2 || size(coef,1)~=size(coef,2) error('Input symbol coef must be a square matrix.'); end; L=size(coef,1); % Change f to correct shape. [f,Ls,W,wasrow,remembershape]=comp_sigreshape_pre(f,'DGT',0); f=postpad(f,L); h=zeros(L,W); if issparse(coef) && nnz(coef). % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/operators/spreadadj.m0000664000175000017500000000712712612404256016703 0ustar susnaksusnakfunction cadj=spreadadj(coef) %-*- texinfo -*- %@deftypefn {Function} spreadadj %@verbatim %SPREADADJ Symbol of adjoint spreading function % Usage: cadj=spreadadj(c); % % cadj=SPREADADJ(c) computes the symbol cadj of the spreading % operator that is the adjoint of the spreading operator with symbol c. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/spreadadj.html} %@seealso{spreadop, tconv, spreadfun, spreadinv} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Florent Jaillet % TESTING: TEST_SPREAD % REFERENCE: REF_SPREADADJ REF_SPREADADJ_1 error(nargchk(1,1,nargin)); if ~isnumeric(coef) || ndims(coef)~=2 || size(coef,1)~=size(coef,2) error('Input symbol coef must be a square matrix.'); end; L=size(coef,1); % The algorithm used to compute the adjoint symbol can be expressed by % the following code. See ref_spreadadj_1 % % cadj=zeros(L); % for ii=0:L-1 % for jj=0:L-1 % cadj(ii+1,jj+1)=conj(coef(mod(L-ii,L)+1,mod(L-jj,L)+1))... % *exp(-i*2*pi*ii*jj/L); % end; % end; % % The two algorithms below for full and sparse matrices are adaptations % of this algorithm. if issparse(coef) % implementation for sparse matrix without loop [row,col,val]=find(coef); % This array keeps all possible values of the exponential that we could % possible need. Indexing this array is faster than computing the % exponential directly. temp=exp((-i*2*pi/L)*(0:L-1)'); ii=mod(L-row+1, L); jj=mod(L-col+1, L); cadj=sparse(ii+1,jj+1,conj(val).*temp(mod(ii.*jj,L)+1),L,L); else % implementation for full matrix. % % This implementation uses the direct formula with % the following Optimizations : % - Avoiding mod : In the loop of for the explicit case, we see that % mod(L-ii,L)~=L-ii only for ii==0 (idem for jj), so we can % remove the mod by processing separetly the cases ii==0 or % jj==0. % - Precomputation of exp : In the loop of the explicit case, we see that we % compute many time complex exponential terms with the same % values. Using precomputation and modulo, we can reduce the % computation time % cadj=zeros(L,assert_classname(coef)); % Proceesing for ii==0 or jj==0 cadj(1,1)=conj(coef(1,1)); cadj(2:end,1)=conj(coef(end:-1:2,1)); cadj(1,2:end,1)=conj(coef(1,end:-1:2)); % Proceesing for ii~=0 and jj~=0 % Precomputation for exponential term temp2=exp((-i*2*pi/L)*(0:L-1)); % Optimization note : Here we are computing indexes for all the % exponential terms, which leads to a highly structured matrix % which strcture can be formalized (notably it is symetric) and % used to reduce the computation cost temp=mod((1:L-1)'*(1:L-1),L)+1; % Finaly we construct the matrix containing all the needed exponential % terms. This is (part of) the DFT matrix. temp=temp2(temp); cadj(2:L,2:L)=conj(coef(L:-1:2,L:-1:2)).*temp; end; ltfat/inst/operators/gabmulappr.m0000664000175000017500000001023012612404256017065 0ustar susnaksusnakfunction [sym,lowb,upb]=gabmulappr(T,p2,p3,p4,p5); %-*- texinfo -*- %@deftypefn {Function} gabmulappr %@verbatim %GABMULAPPR Best Approximation by a Gabor multiplier % Usage: sym=gabmulappr(T,a,M); % sym=gabmulappr(T,g,a,M); % sym=gabmulappr(T,ga,gs,a,M); % [sym,lowb,upb]=gabmulappr( ... ); % % Input parameters: % T : matrix to be approximated % g : analysis/synthesis window % ga : analysis window % gs : synthesis window % a : Length of time shift. % M : Number of channels. % % Output parameters: % sym : symbol % % sym=GABMULAPPR(T,g,a,M) calculates the best approximation of the given % matrix T in the Frobenius norm by a Gabor multiplier determined by the % symbol sym over the rectangular time-frequency lattice determined by % a and M. The window g will be used for both analysis and % synthesis. % % GABMULAPPR(T,a,M) does the same using an optimally concentrated, tight % Gaussian as window function. % % GABMULAPPR(T,gs,ga,a) does the same using the window ga for analysis % and gs for synthesis. % % [sym,lowb,upb]=GABMULAPPR(...) additionally returns the lower and % upper Riesz bounds of the rank one operators, the projections resulting % from the tensor products of the analysis and synthesis frames. % % % % References: % M. Doerfler and B. Torresani. Representation of operators in the % time-frequency domain and generalized Gabor multipliers. J. Fourier % Anal. Appl., 16(2):261-293, April 2010. % % P. Balazs. Hilbert-Schmidt operators and frames - classification, best % approximation by multipliers and algorithms. International Journal of % Wavelets, Multiresolution and Information Processing, 6:315 - 330, % 2008. % % P. Balazs. Basic definition and properties of Bessel multipliers. % Journal of Mathematical Analysis and Applications, 325(1):571-585, % January 2007. % % H. G. Feichtinger, M. Hampejs, and G. Kracher. Approximation of % matrices by Gabor multipliers. IEEE Signal Procesing Letters, % 11(11):883-886, 2004. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/gabmulappr.html} %@seealso{framemulappr, demo_gabmulappr} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Monika Doeerfler % REFERENCE : REF_GABMULAPPR % TESTING : TEST_GABMULAPPR error(nargchk(3,5,nargin)); L=size(T,1); if size(T,2)~=L error('T must be square.'); end; if nargin==3 % Usage: sym=gabmulappr(T,a,M); a=p2; M=p3; ga=gabtight(a,M,L); gs=ga; end; if nargin==4 % Usage: sym=gabmulappr(T,g,a,M); ga=p2; gs=p2; a=p3; M=p4; end; if nargin==5 % Usage: sym=gabmulappr(T,ga,gm,a,M); ga=p2; gs=p3; a=p4; M=p5; end; if size(ga,2)>1 if size(ga,1)>1 error('Input g/ga must be a vector'); else % ga was a row vector. ga=ga(:); end; end; if size(gs,2)>1 if size(gs,1)>1 error('Input g/gs must be a vector'); else % gs was a row vector. gs=gs(:); end; end; N=L/a; b=L/M; Vg=dgt(gs,ga,1,L); s=spreadfun(T); A=zeros(N,M); V=zeros(N,M); for k=0:b-1 for l=0:a-1 A = A+ s(l*N+1:(l+1)*N,k*M+1:k*M+M).*conj(Vg(l*N+1:(l+1)*N,k*M+1:k*M+M)); V = V+abs(Vg(l*N+1:(l+1)*N,k*M+1:k*M+M)).^2; end; end; if nargout>1 lowb = min(V(:)); upb = max(V(:)); end; SF1=A./V; SF=zeros(N,M); jjmod=mod(-M:-1,M)+1; iimod=mod(-N:-1,N)+1; SF=SF1(iimod,jjmod); sym=b*dsft(SF)*sqrt(M)/sqrt(N); ltfat/inst/operators/iframemul.m0000664000175000017500000000632012612404256016721 0ustar susnaksusnakfunction [h,relres,iter]=iframemul(f,Fa,Fs,s,varargin) %-*- texinfo -*- %@deftypefn {Function} iframemul %@verbatim %IFRAMEMUL Inverse of frame multiplier % Usage: h=iframemul(f,Fa,Fs,s); % [h,relres,iter]=iframemul(...); % % Input parameters: % Fa : Analysis frame % Fs : Synthesis frame % s : Symbol % f : Input signal % % Output parameters: % h : Output signal % % IFRAMEMUL(f,F,s) applies the inverse of the frame multiplier with % symbol s to the signal f. The frame Fa is used for analysis % and the frame Fs for synthesis. % % Because the inverse of a frame multiplier is not necessarily again a % frame multiplier for the same frames, the problem is solved using an % iterative algorithm. % % [h,relres,iter]=IFRAMEMUL(...) additionally returns the relative % residuals in a vector relres and the number of iteration steps iter. % % IFRAMEMUL takes the following parameters at the end of the line of % input arguments: % % 'tol',t Stop if relative residual error is less than the % specified tolerance. Default is 1e-9 % % 'maxit',n Do at most n iterations. % % 'print' Display the progress. % % 'quiet' Don't print anything, this is the default. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/iframemul.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % See also: iframemul % Author: Peter L. Soendergaard if nargin < 4 error('%s: Too few input parameters.',upper(mfilename)); end; tolchooser.double=1e-9; tolchooser.single=1e-5; definput.keyvals.tol=tolchooser.(class(f)); definput.keyvals.maxit=100; definput.keyvals.printstep=10; definput.flags.print={'quiet','print'}; [flags,kv]=ltfatarghelper({},definput,varargin); % Check for compatibility L1=framelength(Fa,size(f,1)); L2=framelengthcoef(Fs,size(s,1)); if L1~=L2 error(['%s: The symbol and signal lengths are incompatible.'],upper(mfilename)); end; % This is not *strictly* necessary, but we cannot check that the symbol % is complex-valued in just the right way. if Fa.realinput && ~isreal(s) error(['%s: For real-valued-input-only frames, the symbol must also ' ... 'be real.'],upper(mfilename)); end; % The frame multiplier is not positive definite, so we cannot solve it % directly using pcg. % Apply the multiplier followed by its adjoint. A=@(x) framemuladj(framemul(x,Fa,Fs,s),Fa,Fs,s); [h,flag,dummytilde,iter1,relres]=pcg(A,framemuladj(f,Fa,Fs,s),kv.tol,kv.maxit); ltfat/inst/operators/spreadinv.m0000664000175000017500000000353612612404256016741 0ustar susnaksusnakfunction out=spreadinv(p1,p2); %-*- texinfo -*- %@deftypefn {Function} spreadinv %@verbatim %SPREADINV Apply inverse spreading operator % Usage: h=spreadinv(f,c); % % SPREADINV(c) computes the symbol of the inverse of the spreading % operator with symbol c. % % SPREADINV(f,c) applies the inverse of the spreading operator with % symbol c to the input signal f. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/spreadinv.html} %@seealso{spreadfun, tconv, spreadfun, spreadadj} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(1,2,nargin)); % FIXME This function should handle sparse symbols, and use a iterative % method instead of creating the full symbol. % FIXME This function should handle f though comp_reshape_pre and post. if nargin==1 coef=p1; else f=p1; coef=p2; end; if ndims(coef)>2 || size(coef,1)~=size(coef,2) error('Input symbol T must be a square matrix.'); end; L=size(coef,1); % Create a matrix representation of the operator. coef=ifft(full(coef))*L; T=comp_col2diag(coef); if nargin==1 % Calculate the inverse symbol. out=spreadfun(inv(T)); else out=T\f; end; ltfat/inst/operators/operatormatrix.m0000664000175000017500000000267112612404256020025 0ustar susnaksusnakfunction T=operatormatrix(Op) %-*- texinfo -*- %@deftypefn {Function} operatormatrix %@verbatim %OPERATORMATRIX Matrix representation of an operator % Usage: T=operatormatrix(Op); % % T=OPERATORMATRIX(Op) returns the matrix representation T of the % operator Op. The operator object Op must have been created using % OPERATORNEW. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/operators/operatormatrix.html} %@seealso{operatornew, operator, operatoreigs} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isstruct(Op) error('%s: First argument must be a operator definition structure.',upper(mfilename)); end; T=operator(Op,eye(Op.L)); ltfat/inst/private/0000775000175000017500000000000012612404256014215 5ustar susnaksusnakltfat/inst/private/ref_edgt_1.m0000664000175000017500000000305712612404256016377 0ustar susnaksusnakfunction c=ref_edgt_1(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_edgt_1 %@verbatim %REF_EDGT_1 Reference Even Discrete Gabor transform by DGT % Usage c=ref_edgt(f,g,a,M); % % The input window must be odd-centered of length 2L. % % M must be even %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_edgt_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); N=L/a; M=L/b; clong=ref_dgtii([f;flipud(f)],g,a,2*b); c=zeros(M*N,W); % The coefficient array is stacked from: % - The first M/2 coefficients of the first time shift. % - The body of the coefficients % - The first M/2 coefficients of the last time shift. c(:,:)=[clong(1:M/2,:); ... clong(M+1:M*N+M/2,:)]; % Scale the first coefficients correctly c(1,:)=c(1,:)/sqrt(2); c(M*(N-1)+M/2+1,:)=c(M*(N-1)+M/2+1,:)/sqrt(2); ltfat/inst/private/ref_bincoeff.m0000664000175000017500000000221512612404256017002 0ustar susnaksusnakfunction out=ref_bincoeff(u,v) %-*- texinfo -*- %@deftypefn {Function} ref_bincoeff %@verbatim %REF_BINCOEFF Binomial coefficients, possibly rational % % Compted by lambda functions. % % See formula 1.2 in Unsers paper: "Fractional splines and wavelets" %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_bincoeff.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . out=gamma(u+1)./(gamma(v+1).*gamma(u-v+1)); ltfat/inst/private/ref_rdgt.m0000664000175000017500000000310312612404256016164 0ustar susnaksusnakfunction c=ref_rdgt(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_rdgt %@verbatim %REF_RDGT Reference Real DGT % Usage: c=ref_rdgt(f,g,a,M); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transpose. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_rdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); b=L/M; N=L/a; Mhalf=ceil(M/2); F=zeros(L,M*N); l=(0:L-1).'; for n=0:N-1 % Do the unmodulated coefficient. F(:,M*n+1)=circshift(g,n*a); for m=1:Mhalf-1 F(:,M*n+2*m)=sqrt(2)*cos(2*pi*m*l/M).*circshift(g,n*a); F(:,M*n+2*m+1)=sqrt(2)*sin(2*pi*m*l/M).*circshift(g,n*a); end; if mod(M,2)==0 F(:,M*(n+1))=cos(pi*l).*circshift(g,n*a); end; end; % dot-transpose will work because F is real. c=F.'*f; ltfat/inst/private/ref_rdft_1.m0000664000175000017500000000330012612404256016402 0ustar susnaksusnakfunction c=ref_rdft_1(f) %-*- texinfo -*- %@deftypefn {Function} ref_rdft_1 %@verbatim %REF_RDFT_1 Reference RDFT by FFT % Usage: c=ref_rdft_1(f); % % Compute RDFT by doing a DFT and returning half the coefficients. % % The transform is orthonormal %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_rdft_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); Lhalf=ceil(L/2); Lend=Lhalf*2-1; if ~isreal(f) c=ref_rdft_1(real(f))+i*ref_rdft_1(imag(f)); else cc=fft(f); c=zeros(size(f)); % Copy the first coefficient, it is real c(1,:)=1/sqrt(2)*real(cc(1,:)); % Copy the cosine-part of the coefficients. c(2:2:Lend,:)=real(cc(2:Lhalf,:)); % Copy the sine-part of the coefficients. c(3:2:Lend,:)=-imag(cc(2:Lhalf,:)); % If f has an even length, we must also copy the Niquest-wave % (it is real) if mod(L,2)==0 c(end,:)=1/sqrt(2)*real(cc(L/2+1,:)); end; % Make it an ortonomal transform c=c/sqrt(L/2); end; ltfat/inst/private/ref_dgt_5.m0000664000175000017500000000440512612404256016234 0ustar susnaksusnakfunction coef=ref_dgt_5(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dgt_5 %@verbatim %REF_DGT_5 DGT algorithm 5 % % This algorithm uses explicit convolution inside the loops. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgt_5.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); N=L/a; b=L/M; [c,h_a,h_m]=gcd(-a,M); p=a/c; q=M/c; d=N/q; w=zeros(M,N); if 0 % As ref_dgt_2, but substitution mt=k+st*p % and n =u+s*q % and apply reductions as described in the paper. for r=0:c-1 for l=0:q-1 for u=0:q-1 for k=0:p-1 for s=0:d-1 for st=0:d-1 w(r+l*c+1,mod(u+s*q-l*h_a,N)+1)=w(r+l*c+1,mod(u+s*q-l*h_a,N)+1)+f(mod(r+k*M+st*p*M-l*h_a*a,L)+1)*... conj(g(mod(r+k*M-u*a+(st-s)*p*M,L)+1)); end; end; end; end; end; end; end; if 1 % As above, but the inner convolution is now explicitly expressed for r=0:c-1 for l=0:q-1 for u=0:q-1 for k=0:p-1 psi=zeros(d,1); phi=zeros(d,1); for s=0:d-1 psi(s+1)=f(mod(r+k*M+s*p*M-l*h_a*a,L)+1); phi(s+1)=g(mod(r+k*M-u*a+s*p*M,L)+1); end; innerconv = pconv(psi,phi,'r'); for s=0:d-1 w(r+l*c+1,mod(u+s*q-l*h_a,N)+1)=w(r+l*c+1,mod(u+s*q-l*h_a,N)+1)+innerconv(s+1); end; end; end; end; end; coef=fft(w); end; ltfat/inst/private/ref_idft.m0000664000175000017500000000240412612404256016155 0ustar susnaksusnakfunction f=ref_idft(c) %-*- texinfo -*- %@deftypefn {Function} ref_idft %@verbatim %REF_IDFT Reference Inverse Discrete Fourier Transform % Usage: f=ref_dft(c); % % REF_IDFT(f) computes the unitary discrete Fourier transform of the % coefficient c. % % AUTHOR: Jordy van Velthoven %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_idft.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L = length(c); f = zeros(L,1); for l=0:L-1 for k=0:L-1 f(l+1) = f(l+1) + c(k+1) * exp(2*pi*i*k*l/L); end; end; f = f/sqrt(L); ltfat/inst/private/test_wfbt.m0000664000175000017500000001055312612404256016400 0ustar susnaksusnakfunction test_failed = test_wfbt(verbose) %-*- texinfo -*- %@deftypefn {Function} test_wfbt %@verbatim %TEST_WFBTPR % % Checks perfect reconstruction of the general wavelet transform of different % filters % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_wfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('========= TEST WFBT ============'); global LTFAT_TEST_TYPE; tolerance = 2e-8; if strcmpi(LTFAT_TEST_TYPE,'single') tolerance = 1e-5; end test_failed = 0; if(nargin>0) verbose = 1; else verbose = 0; end type = {'dec'}; ext = {'per','zero','odd','even'}; J = 4; %! Mild tree wt1 = wfbtinit({'db10',6,'full'}); wt1 = wfbtremove(2,1,wt1,'force'); wt1 = wfbtremove(2,3,wt1,'force'); % %! Hardcore tree wt2 = wfbtinit({'db3',1}); wt2 = wfbtput(1,1,'mband1',wt2); wt2 = wfbtput(2,2,'mband1',wt2); wt2 = wfbtput(3,3,'mband1',wt2); wt2 = wfbtput(3,1,'db10',wt2); wt2 = wfbtput(4,1,'dgrid2',wt2); wt2 = wfbtput(5,1,'db3',wt2); %! Another tree wt3 = wfbtinit(); wt3 = wfbtput(0,0,'cmband4',wt3); wt3 = wfbtput(1,0,'cmband6',wt3); wt3 = wfbtput(1,1,'cmband6',wt3); wt3 = wfbtput(2,0,'cmband4',wt3); wt3 = wfbtput(2,1,'cmband4',wt3); wt3 = wfbtput(3,1,'cmband4',wt3); wt3 = wfbtput(3,2,'cmband4',wt3); wt3 = wfbtput(3,3,'cmband4',wt3); wt3 = wfbtput(3,4,'cmband4',wt3); % wt2 = wfbtinit(); % wt2 = wfbtput(0,0,{'db',4},wt2); % wt2 = wfbtput(1,0,{'algmband',1},wt2); % wt2 = wfbtput(1,1,{'hden',3},wt2); % wt2 = wfbtput(2,0,{'dgrid',2},wt2); % wt2 = wfbtput(2,1,{'dgrid',2},wt2); test_filters = { {'algmband2',J} % 4 filters, uniform, crit. sub. % {'db4',J} % {'algmband1',J} % 3 filters, uniform, crit. sub. %{{'hden',3},J} % 3 filters, non-uniform, no crit. sub. no correct {'dgrid1',J} % 4 filters. sub. fac. 2 wt1 wt2 wt3 }; %testLen = 4*2^7-1;%(2^J-1); testLen = 53; f = tester_rand(testLen,10); for extIdx=1:length(ext) extCur = ext{extIdx}; for typeIdx=1:length(type) for tt=1:length(test_filters) actFilt = test_filters{tt}; if verbose, if(~isstruct(actFilt))fprintf('J=%d, filt=%s, ext=%s, inLen=%d \n',actFilt{2},actFilt{1},extCur,size(f,1)); else disp('Custom'); end; end; [c,info] = wfbt(f,actFilt,extCur); fhat = iwfbt(c,actFilt,size(f,1),extCur); %MSE err = norm(f-fhat,'fro'); [test_failed,fail]=ltfatdiditfail(err,test_failed,tolerance); if(~verbose) if(~isstruct(actFilt))fprintf('J=%d, %5.5s, ext=%s, L=%d, err=%.4e %s \n',actFilt{2},actFilt{1},extCur,size(f,1),err,fail); else fprintf('Custom, err=%.4e %s\n',err,fail); end; end if strcmpi(fail,'FAILED') if verbose if(~isstruct(actFilt)) fprintf('err=%d, filt=%s, ext=%s, inLen=%d \n',err,actFilt{1},extCur,testLen); else disp('Custom'); end; figure(1);clf;stem([f,fhat]); figure(2);clf;stem([f-fhat]); break; end end fhat2 = iwfbt(c,info); err = norm(f-fhat2,'fro'); [test_failed,fail]=ltfatdiditfail(err,test_failed,tolerance); if(~isstruct(actFilt)) fprintf('INFO J=%d, %5.5s, ext=%s, L=%d, err=%.4e %s \n',actFilt{2},actFilt{1},extCur,size(f,1),err,fail); else fprintf('INFO Custom, err=%.4e %s\n',err,fail); end; if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end ltfat/inst/private/ref_dctii.m0000664000175000017500000000237412612404256016331 0ustar susnaksusnakfunction c=ref_dctii(f) %-*- texinfo -*- %@deftypefn {Function} ref_dctii %@verbatim %REF_DCTII Reference Discrete Consine Transform type II % Usage: c=ref_dctii(f); % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dctii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); % Create weights. w=ones(L,1); w(1)=1/sqrt(2); w=w*sqrt(2/L); % Create transform matrix. F=zeros(L); for m=0:L-1 for n=0:L-1 F(m+1,n+1)=w(n+1)*cos(pi*n*(m+.5)/L); end; end; % Compute coefficients. c=F'*f; ltfat/inst/private/testC/0000775000175000017500000000000012612404251015272 5ustar susnaksusnakltfat/inst/private/testC/runtests.sh0000775000175000017500000000056412612404251017525 0ustar susnaksusnak#!/bin/bash echo "Running unit tests:" for i in $(find . -name "test_*" -not -name "*.c") do if test -f $i then if $VALGRIND ./$i 2>> tests.log then echo $i PASS else echo "ERROR in test $i: here's tests.log" echo "------" tail tests.log exit 1 fi fi done echo "" ltfat/inst/private/testC/test_ltfatresample.c0000664000175000017500000001226712612404251021350 0ustar susnaksusnak/* The 2nd row of this file will be used as additional parameters to gcc ../../thirdparty/Playrec/ltfatresample.c -lm -pedantic -std=c99 */ #include "../../thirdparty/Playrec/ltfatresample.h" #include "dbg.h" #include "minunit.h" void fillrand(SAMPLE* a, size_t L) { size_t m; srand (time(NULL)); for (m = 0; m < L; m++) { a[m] = ((SAMPLE) (rand())) / RAND_MAX; } } char* test_filter() { size_t L, ii; SAMPLE *in, *out, *out2, err; EMQFfilters ef; size_t bufNo = 10; size_t bufLen = 65; L = bufNo * bufLen; in = malloc(L * sizeof * in); fillrand(in, L); out = malloc(L * sizeof * out); out2 = malloc(L * sizeof * out); ef = emqffilters_init(0.1); /* Filter by blocks */ for (ii = 0; ii < bufNo; ii++) { emqffilters_dofilter(ef, in + ii * bufLen, bufLen, out + ii * bufLen); } emqffilters_done(&ef); ef = emqffilters_init(0.1); /* Filter */ emqffilters_dofilter(ef, in, L, out2); emqffilters_done(&ef); err = 0; for (ii = 0; ii < L; ii++) { err += abs(out[ii] - out2[ii]); } free(in); free(out); free(out2); mu_assert(err < 1e-10, "FILT BY BLOCKS") return NULL; } char* test_resample_fixedLin() { size_t ii, bufNo = 1000, Lout, ratioId = 0, lInId = 0; double ratio[] = { 44100.0 / 8001.0, 8001.0 / 44100.0, 1, 0 }; size_t Lin[] = {896, 63, 10, 478, 966, 7563, 0}; SAMPLE* out, *in; resample_error re; resample_plan rp; while (Lin[lInId]) { while (ratio[ratioId]) { in = malloc(Lin[lInId] * sizeof * in); rp = resample_init(BSPLINE, ratio[ratioId]); for (ii = 0; ii < bufNo; ii++) { Lout = resample_nextoutlen(rp, Lin[lInId]); fillrand(in, Lin[lInId]); out = malloc(Lout * sizeof * out); re = resample_execute(rp, in, Lin[lInId], out, Lout); mu_assert(re == RESAMPLE_OK, "Overflow or undeflow in fixed Lin") free(out); } free(in); resample_done(&rp); ratioId++; } lInId++; } return NULL; } char* test_resample_altLin() { size_t ii, bufNo = 1000, Lout, ratioId = 0, lInId = 0; double ratio[] = { 44100.0 / 8001.0, 8001.0 / 44100.0, 1, 0 }; size_t Lin[] = {896, 63, 10, 478, 966, 7563, 0}; SAMPLE* out, *in; resample_error re; resample_plan rp; while (ratio[ratioId]) { in = malloc(Lin[lInId] * sizeof * in); rp = resample_init(BSPLINE, ratio[ratioId]); for (ii = 0; ii < bufNo; ii++) { Lout = resample_nextoutlen(rp, Lin[lInId]); fillrand(in, Lin[lInId]); out = malloc(Lout * sizeof * out); re = resample_execute(rp, in, Lin[lInId], out, Lout); mu_assert(re == RESAMPLE_OK, "Overflow or undeflow in alternating Lin") free(out); } free(in); resample_done(&rp); ratioId++; if(Lin[++lInId]==0) { lInId = 0; } } return NULL; } char* test_resample_fixedLout() { size_t ii, bufNo = 1000, Lin, ratioId = 0, lInId = 0; double ratio[] = { 44100.0 / 8001.0, 8001.0 / 44100.0, 1, 0.99, 0.23, 3.333, 0 }; size_t Lout[] = {896, 63, 40, 478, 966, 7563, 0}; SAMPLE* out, *in; resample_error re; resample_plan rp; while (Lout[lInId]) { while (ratio[ratioId]) { rp = resample_init(BSPLINE, ratio[ratioId]); out = malloc(Lout[lInId] * sizeof * out); for (ii = 0; ii < bufNo; ii++) { Lin = resample_nextinlen(rp, Lout[lInId]); in = malloc(Lin * sizeof(SAMPLE)); fillrand(in, Lin); re = resample_execute(rp, in, Lin, out, Lout[lInId]); mu_assert(re == RESAMPLE_OK, "Overflow or undeflow in fixed Lout") free(in); } free(out); resample_done(&rp); ratioId++; } lInId++; } return NULL; } char* test_resample_altLout() { size_t ii, bufNo = 1000, Lin, ratioId = 0, lInId = 0; double ratio[] = { 44100.0 / 8001.0, 8001.0 / 44100.0, 1, 0.99, 0.23, 3.333, 0 }; size_t Lout[] = {896, 63, 40, 478, 966, 7563, 0}; SAMPLE* out, *in; resample_error re; resample_plan rp; while (ratio[ratioId]) { rp = resample_init(BSPLINE, ratio[ratioId]); out = malloc(Lout[lInId] * sizeof * out); for (ii = 0; ii < bufNo; ii++) { Lin = resample_nextinlen(rp, Lout[lInId]); in = malloc(Lin * sizeof(SAMPLE)); fillrand(in, Lin); re = resample_execute(rp, in, Lin, out, Lout[lInId]); mu_assert(re == RESAMPLE_OK, "Overflow or undeflow in alternating Lout") free(in); } free(out); resample_done(&rp); ratioId++; if(Lout[++lInId]==0) { lInId = 0; } } return NULL; } char *all_tests() { mu_suite_start(); mu_run_test(test_filter); mu_run_test(test_resample_fixedLin); mu_run_test(test_resample_fixedLout); mu_run_test(test_resample_altLout); mu_run_test(test_resample_altLin); return NULL; } RUN_TESTS(all_tests) ltfat/inst/private/testC/minunit.h0000664000175000017500000000221112612404251017122 0ustar susnaksusnak/* * minunit.h -- A minimal unit test framework for C * * Originally from Jara design http://www.jera.com/techinfo/jtns/jtn002.html * Modified by Zed Shaw in http://c.learncodethehardway.org * * * NOTE: The UNUSED(x) macro is used to mute the unused parameter warning. * */ #undef NDEBUG #ifndef _minunit_h #define _minunit_h #include #include "dbg.h" #include #include #define UNUSED(x) (void)(x) #define mu_suite_start() char *message = NULL #define mu_assert(test, message) if (!(test)) { log_err(message); return message; } #define mu_run_test(test) debug("\n-----%s", " " #test); \ message = test(); tests_run++; if (message) return message; #define RUN_TESTS(name) int main(int argc, char *argv[]) {\ UNUSED(argc);\ debug("----- RUNNING: %s", argv[0]);\ printf("----\nRUNNING: %s\n", argv[0]);\ char *result = name();\ if (result != 0) {\ printf("FAILED: %s\n", result);\ }\ else {\ printf("ALL TESTS PASSED\n");\ }\ printf("Tests run: %d\n", tests_run);\ exit(result != 0);\ } int tests_run; #endif ltfat/inst/private/testC/dbg.h0000664000175000017500000000211212612404251016173 0ustar susnaksusnak/* * dbg.h -- Zed's awesome debug macros * * From http://c.learncodethehardway.org !/!4 * * * * */ #ifndef __dbg_h__ #define __dbg_h__ #include #include #include #ifdef NDEBUG #define debug(M, ...) #else #define debug(M, ...) fprintf(stderr, "DEBUG %s:%d: " M "\n", __FILE__, __LINE__, ##__VA_ARGS__) #endif #define clean_errno() (errno == 0 ? "None" : strerror(errno)) #define log_err(M, ...) fprintf(stderr, "[ERROR] (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__) #define log_warn(M, ...) fprintf(stderr, "[WARN] (%s:%d: errno: %s) " M "\n", __FILE__, __LINE__, clean_errno(), ##__VA_ARGS__) #define log_info(M, ...) fprintf(stderr, "[INFO] (%s:%d) " M "\n", __FILE__, __LINE__, ##__VA_ARGS__) #define check(A, M, ...) if(!(A)) { log_err(M, ##__VA_ARGS__); errno=0; goto error; } #define sentinel(M, ...) { log_err(M, ##__VA_ARGS__); errno=0; goto error; } #define check_mem(A) check((A), "Out of memory.") #define check_debug(A, M, ...) if(!(A)) { debug(M, ##__VA_ARGS__); errno=0; goto error; } #endif ltfat/inst/private/testC/Makefile0000664000175000017500000000123312612404251016731 0ustar susnaksusnak# # Makefile # # A common makefile for managing compilation of all tests. # By default, the makefile supplies only the basic flags, # test-specific flags, files and libraries are read directly # from a comment in test. # # Usage: # # CFLAGS=-g -Wall -Wextra -DNDEBUG LIBS= TEST_SRC=$(wildcard test_*.c) TESTS=$(patsubst %.c,%,$(TEST_SRC)) all: $(TESTS) $(TESTS): % : %.c $(CC) $(CFLAGS) $^ $(shell sed '2q;d' $^) -o $@ $(LIBS) debug: CFLAGS=-g -Wall -Wextra debug: LIBS=-lprofiler debug: all clean: rm -rf $(TESTS) .PHONY: tests tests: $(TESTS) sh ./runtests.sh valgrind: VALGRIND="valgrind --log-file=/tmp/valgrind-%p.log" $(MAKE) ltfat/inst/private/ref_irdgt3_1.m0000664000175000017500000000266012612404256016647 0ustar susnaksusnakfunction f=ref_irdgt3_1(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_irdgt3_1 %@verbatim %REF_IRDGT3_1 Reference Inverse Real DGT type 3 by IDGT3 % Usage: f=ref_irdgt3_1(c,g,a,M); % % Compute a complex coefficient layout for IDGT3 %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_irdgt3_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); W=size(c,2); R=size(g,2); b=L/M; N=L/a; Mhalf=floor(M/2); c=reshape(c,M,N,W); cc=zeros(M,N,W); for m=0:Mhalf-1 cc(m+1,:,:)=1/sqrt(2)*(c(2*m+1,:,:)-i*c(2*m+2,:,:)); cc(M-m,:,:)=1/sqrt(2)*(c(2*m+1,:,:)+i*c(2*m+2,:,:)); end; if mod(M,2)==1 cc((M+1)/2,:,:)=c(M,:,:); end; cc=reshape(cc,M*N,W); f=ref_igdgt(cc,g,a,M,0,.5,0); ltfat/inst/private/ref_idgt.m0000664000175000017500000000262012612404256016156 0ustar susnaksusnakfunction f=ref_idgt(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_idgt %@verbatim %REF_DGT Reference Inverse Discrete Gabor transform. % Usage: c=ref_idgt(f,g,a,M); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transpose. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_idgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Calculate the parameters that was not specified. L=size(g,1); b=L/M; N=L/a; W=size(c,2); % Create 2x2 grid matrix.. V=[a,0; 0,b]; % Create lattice and Gabor matrix. lat=ref_lattice(V,L); G=ref_gaboratoms(g,lat); % Apply matrix to c. f=G*c; ltfat/inst/private/ref_irdft.m0000664000175000017500000000255212612404256016343 0ustar susnaksusnakfunction c=ref_irdft(f) %-*- texinfo -*- %@deftypefn {Function} ref_irdft %@verbatim %REF_IRDFT Reference Inverse Real DFT % Usage: c=ref_irdft(f); % % Compute IRDFT by explicit formulas. % % The transform is orthonormal %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_irdft.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); Lhalf=ceil(L/2); Lend=Lhalf*2-1; F=zeros(L); F(:,1)=ones(L,1); l=(0:L-1).'/L; for m=1:Lhalf-1 F(:,2*m)=sqrt(2)*cos(2*pi*m*l); F(:,2*m+1)=sqrt(2)*sin(2*pi*m*l); end; if mod(L,2)==0 F(:,L)=cos(pi*L*l); end; F=F/sqrt(L); % dot-transpose will work because F is real. c=F*f; ltfat/inst/private/test_nonsepdgt_mesh.m0000664000175000017500000001026112612404256020447 0ustar susnaksusnakar=1:1:20; Mr=1:1:20; Lmodr=1:20; %[1 3 10 100 143]; lt1r=0:10; lt2r=1:15; test_failed=0; for lt2=lt2r lt2 for lt1=lt1r if lt1>=lt2 continue; end; if gcd(lt1,lt2)>1 continue end; for M=Mr for a=ar if a>=M continue; end; for Lmod=Lmodr L=dgtlength(1,a,M,[lt1,lt2])*Lmod; lt=[lt1,lt2]; [s0,s1,br] = shearfind(L,a,M,lt); f=tester_crand(L,1); g=tester_crand(L,1); if 0 gd = gabdual(g,a,M,'lt',lt); gd_shear = gabdual(g,a,M,'lt',lt,'nsalg',2); res=norm(gd-gd_shear)/norm(g); [test_failed,fail]=ltfatdiditfail(res,test_failed); stext=sprintf(['DUAL SHEAR L:%3i a:%3i M:%3i lt1:%2i lt2:%2i %0.5g ' ... '%s'], L,a,M,lt(1),lt(2),res,fail); disp(stext) if numel(fail)>0 error('Failed test'); end; end; if 1 cc = comp_nonsepdgt_multi(f,g,a,M,lt); cc_shear = comp_nonsepdgt_shear(f,g,a,M,s0,s1,br); res = norm(cc(:)-cc_shear(:))/norm(cc(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); stext=sprintf(['DGT SHEAR L:%3i a:%3i M:%3i lt1:%2i lt2:%2i %0.5g ' ... '%s'], L,a,M,lt(1),lt(2),res,fail); disp(stext) if numel(fail)>0 error('Failed test'); end; end; if 0 r=comp_idgt(cc_shear,gd,a,lt,0,1); res=norm(f-r,'fro')/norm(f,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); stext=sprintf(['REC SHEAR L:%3i a:%3i M:%3i lt1:%2i lt2:%2i %0.5g ' ... '%s'], L,a,M,lt(1),lt(2),res,fail); disp(stext) if numel(fail)>0 error('Failed test'); end; end; if 0 s0test=(L==noshearlength(L,a,M,lt)); s0inv=(s0==0); if s0inv~=s0test [L,a,M,s0==0, s0test] end; end; end; end; end; end; end; %-*- texinfo -*- %@deftypefn {Function} test_nonsepdgt_mesh %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_nonsepdgt_mesh.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/referenceinit.m0000664000175000017500000000165212612404256017221 0ustar susnaksusnakstatus=2; %-*- texinfo -*- %@deftypefn {Function} referenceinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/referenceinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/test_gabimagepars.m0000664000175000017500000000247712612404256020066 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} test_gabimagepars %@verbatim %TEST_GABIMAGEPARS % % This will run a simple test of the gabimagepars routine over a range % of sizes, and make a plot of the efficiancy in the end. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_gabimagepars.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . x=800; y=1200; Ntests=10000; res=zeros(Ntests,5); offset=99; for ii=1:Ntests; Ls=ii+offset; [res(ii,1),res(ii,2),res(ii,3),res(ii,4),res(ii,5)]=gabimagepars(Ls,x,y); end; figure(1); % res(:,3) is L plot(res(:,3)./((1+offset:Ntests+offset)')) ltfat/inst/private/test_dgt_alg.m0000664000175000017500000000306312612404256017035 0ustar susnaksusnakLr=[24, 24, 24, 144,108,144,24,135,35,77,20]; ar=[ 4, 3, 6, 9, 9, 12, 6, 9, 5, 7, 1]; Mr=[ 6, 4, 4, 16, 12, 24, 8, 9, 7,11,20]; for ii=1:length(Lr); L=Lr(ii); M=Mr(ii); a=ar(ii); b=L/M; N=L/a; c=gcd(a,M); d=gcd(b,N); p=a/c; q=M/c; f=tester_crand(L,1); g=tester_crand(L,1); %gd=gabdual(g,a,M); cc = ref_dgt(f,g,a,M); for jj=1:6 cc_comp = feval(['ref_dgt_',num2str(jj)],f,g,a,M); cdiff=cc-cc_comp; res=norm(cdiff(:)); s=sprintf('REF%s L:%3i a:%3i b:%3i c:%3i d:%3i p:%3i q:%3i %0.5g',num2str(jj),L, ... a,b,c,d,p,q,res); disp(s) end; end; %-*- texinfo -*- %@deftypefn {Function} test_dgt_alg %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dgt_alg.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ref_dstii.m0000664000175000017500000000250112612404256016341 0ustar susnaksusnakfunction c=ref_dstii(f) %-*- texinfo -*- %@deftypefn {Function} ref_dstii %@verbatim %REF_DSTII Reference Discrete Sine Transform type II % Usage: c=ref_dstii(f); % % The transform is computed by an FFT of 4 times the length of f. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dstii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); % Create weights. w=ones(L,1); w(L)=1/sqrt(2); w=w*sqrt(2/L); % Create transform matrix. F=zeros(L); for m=0:L-1 for n=0:L-1 F(m+1,n+1)=w(n+1)*sin(pi*(n+1)*(m+.5)/L); end; end; % Compute coefficients. c=F'*f; ltfat/inst/private/test_blocprocoffline.m0000664000175000017500000000310412612404256020576 0ustar susnaksusnakfunction test_failed = test_blocprocoffline() %-*- texinfo -*- %@deftypefn {Function} test_blocprocoffline %@verbatim % Scanario 1) Block reading from a wav and block writing to a wav % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_blocprocoffline.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . inName = 'test_in.wav'; outName = 'test_out.wav'; f = 2*rand(44100,1)*0.9-1; wavwsave(f,44100,inName); fs=block(inName,'offline','outfile',outName); flag = 1; while flag [fb,flag] = blockread(); blockwrite(fb/2); end % Scanario 2) blockwrite from vector to wav % % f = gspi; f2 = 2*rand(numel(f),1)*0.9-1; fs = block([f,f2],'fs',44100,'offline','outfile',outName); flag = 1; while flag [fb,flag] = blockread(44100); blockwrite(fb/2); end delete(inName); delete(outName); ltfat/inst/private/ref_irdgtii.m0000664000175000017500000000322312612404256016662 0ustar susnaksusnakfunction f=ref_irdgtii(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_irdgtii %@verbatim %REF_IRDGTII Reference Inverse Real DGT type II % Usage: c=ref_rdgt(f,g,a,M); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transpose. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_irdgtii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); b=L/M; N=L/a; Mhalf=ceil(M/2); F=zeros(L,M*N); l=(0:L-1).'; for n=0:N-1 % Do the unmodulated coefficient. F(:,M*n+1)=circshift(g,n*a+floor(a/2)); for m=1:Mhalf-1 F(:,M*n+2*m)=sqrt(2)*cos(2*pi*m*(l+.5)/M).*circshift(g,n*a+floor(a/2));; F(:,M*n+2*m+1)=sqrt(2)*sin(2*pi*m*(l+.5)/M).*circshift(g,n*a+floor(a/2));; end; if mod(M,2)==0 F(:,M*(n+1))=cos(pi*l).*circshift(g,n*a+floor(a/2));; end; end; % dot-transpose will work because F is real. f=F*c; ltfat/inst/private/ref_dgt2.m0000664000175000017500000000230612612404256016070 0ustar susnaksusnakfunction c=ref_dgt2(f,g1,g2,a1,a2,M1,M2); %-*- texinfo -*- %@deftypefn {Function} ref_dgt2 %@verbatim %REF_DGT2 Reference DGT2 % % Compute a DGT2 using a DGT along each dimension. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgt2.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L1=size(f,1); L2=size(f,2); N1=L1/a1; N2=L2/a2; c=dgt(f,g1,a1,M1); c=reshape(c,M1*N1,L2); c=c.'; c=dgt(c,g2,a2,M2); c=reshape(c,M2*N2,M1*N1); c=c.'; c=reshape(c,M1,N1,M2,N2); ltfat/inst/private/test_dgt_fac.m0000664000175000017500000000527112612404256017026 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} test_dgt_fac %@verbatim %TEST_DGT Test DGT full window backend % % This script runs a throrough test of the COMP_DGT_FAC % and COMP_IDGT_FAC testing them on a range of input parameters. % % Use TEST_WFAC first, to verify that COMP_WFAC and COMP_IWFAC % are working, since this tester depends on them. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dgt_fac.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lr=[24,16,144,108,144,24,135,35,77,20]; ar=[ 4, 4, 9, 9, 12, 6, 9, 5, 7, 1]; Mr=[ 6, 8, 16, 12, 24, 8, 9, 7,11,20]; test_failed=0; disp('--- Used subroutines ---'); which comp_wfac which comp_iwfac which comp_dgt_fac which comp_idgt_fac for ii=1:length(Lr); L=Lr(ii); M=Mr(ii); a=ar(ii); b=L/M; N=L/a; c=gcd(a,M); d=gcd(b,N); p=a/c; q=M/c; for W=1:3 for R=1:3 for rtype=1:2 if rtype==1 rname='REAL '; f=tester_rand(L,W); g=tester_rand(L,R); else rname='CMPLX'; f=tester_crand(L,W); g=tester_crand(L,R); end; gf=comp_wfac(g,a,M); cc=comp_dgt_fac(f,gf,a,M); cc2=ref_dgt(f,g,a,M); res=norm(cc(:)-cc2(:)); failed=''; if res>10e-10 failed='FAILED'; test_failed=test_failed+1; end; s=sprintf('DGT %s L:%3i W:%2i R:%2i a:%3i b:%3i c:%3i d:%3i p:%3i q:%3i %0.5g %s',rname,L,W,R,a,b,c,d,p,q,res,failed); disp(s) end; for rtype=1:2 if rtype==1 rname='REAL '; g=tester_rand(L,R); else rname='CMPLX'; g=tester_crand(L,R); end; cc=tester_crand(M,N*R*W); gf=comp_wfac(g,a,M); f=comp_idgt_fac(ifft(cc)*sqrt(M),gf,L,a,M); f2=ref_idgt(reshape(cc,M*N*R,W),g,a,M); res=norm(f(:)-f2(:)); failed=''; if res>10e-10 failed='FAILED'; test_failed=test_failed+1; end; s=sprintf('IDGT %s L:%3i W:%2i R:%2i a:%3i b:%3i c:%3i d:%3i p:%3i q:%3i %0.5g %s',rname,L,W,R,a,b,c,d,p,q,res,failed); disp(s) end; end; end; end; test_failed ltfat/inst/private/rand_hpe.m0000664000175000017500000000270212612404256016154 0ustar susnaksusnakfunction f=rand_hpe(varargin) %-*- texinfo -*- %@deftypefn {Function} rand_hpe %@verbatim %RAND_HPE Random HPE even function. % Usage: f=rand_hpe(s); % % RAND_HPE(s) generates an array of size s, which is HPE along the % first dimension. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/rand_hpe.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if isnumeric(varargin); s=varargin; else s=cell2mat(varargin); end; if length(s)==1 error('To avoid confusion, the size must be at least two-dimensional.'); end; shalf=s; shalf(1)=floor(shalf(1)/2); f=(randn(shalf)-.5)+(randn(shalf)-.5)*i; if rem(s(1),2)==0 f=[f;flipud(conj(f))]; else f=[f; ... randn([1 s(2:end)])-.5; ... flipud(conj(f))]; end; ltfat/inst/private/ref_col2diag.m0000664000175000017500000000223712612404256016717 0ustar susnaksusnakfunction cout=ref_col2diag(cin); %-*- texinfo -*- %@deftypefn {Function} ref_col2diag %@verbatim %REF_COL2DIAG Compute matrix represenation from spreading symbol % % This function is its own inverse. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_col2diag.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(cin,1); cout=zeros(L); for ii=0:L-1 for jj=0:L-1 cout(ii+1,jj+1)=cin(ii+1,mod(ii-jj,L)+1); end; end; ltfat/inst/private/ref_dsft.m0000664000175000017500000000227412612404256016174 0ustar susnaksusnakfunction C=ref_dsft(F) %-*- texinfo -*- %@deftypefn {Function} ref_dsft %@verbatim %REF_DSFT Reference DSFT %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dsft.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard K=size(F,1); L=size(F,2); C=zeros(L,K); for m=0:L-1 for n=0:K-1 for l=0:L-1 for k=0:K-1 C(m+1,n+1)=C(m+1,n+1)+F(k+1,l+1)*exp(2*pi*i*(k*n/K-l*m/L)); end; end; end; end; C=C/sqrt(K*L); ltfat/inst/private/ref_dgt_3.m0000664000175000017500000000502412612404256016230 0ustar susnaksusnakfunction c=ref_dgt_3(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dgt_3 %@verbatim %REF_DGT_3 DGT algorithm 3 %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgt_3.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); N=L/a; b=L/M; [c,h_a,h_m]=gcd(-a,M); p=a/c; q=M/c; d=N/q; w=zeros(M,N); if 0 % This version uses the definition. F=zeros(c,d,p,q); G=zeros(c,d,p,q); for r=0:c-1 for s=0:d-1 for k=0:p-1 for l=0:q-1 for st=0:d-1 F(r+1,s+1,k+1,l+1)=F(r+1,s+1,k+1,l+1)+f(mod(r+k*M+st*p*M-l*h_a*a,L)+1)*exp(-2*pi*i*s*st/d); G(r+1,s+1,k+1,l+1)=G(r+1,s+1,k+1,l+1)+g(mod(r+k*M-l*a+st*p*M,L)+1)*exp(-2*pi*i*s*st/d); end; end; end; end; end; for r=0:c-1 for l=0:q-1 for u=0:q-1 for s=0:d-1 for v=0:d-1 for k=0:p-1 w(r+l*c+1,mod(u+s*q-l*h_a,N)+1)=w(r+l*c+1,mod(u+s*q-l*h_a,N)+1)+... 1/d*F(r+1,v+1,k+1,l+1)*conj(G(r+1,v+1,k+1,u+1))*exp(2*pi*i*v*s/d); end; end; end; end; end; end; else % This version uses matrix-vector products and ffts F=zeros(c,d,p,q); G=zeros(c,d,p,q); C=zeros(c,d,q,q); % Set up the matrices for r=0:c-1 for s=0:d-1 for k=0:p-1 for l=0:q-1 F(r+1,s+1,k+1,l+1)=f(mod(r+k*M+s*p*M-l*h_a*a,L)+1); G(r+1,s+1,k+1,l+1)=sqrt(M*d)*g(mod(r+k*M-l*a+s*p*M,L)+1); end; end; end; end; % fft them F=dft(F,[],2); G=dft(G,[],2); % Multiply them for r=0:c-1 for s=0:d-1 GM=reshape(G(r+1,s+1,:,:),p,q); FM=reshape(F(r+1,s+1,:,:),p,q); C(r+1,s+1,:,:)=GM'*FM; end; end; % Inverse fft C=idft(C,[],2); % Place the result for r=0:c-1 for l=0:q-1 for u=0:q-1 for s=0:d-1 w(r+l*c+1,mod(u+s*q-l*h_a,N)+1)=C(r+1,s+1,u+1,l+1); end; end; end; end; end; c=dft(w); ltfat/inst/private/ref_edgtii_1.m0000664000175000017500000000246612612404256016724 0ustar susnaksusnakfunction c=ref_edgtii_1(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_edgtii_1 %@verbatim %REF_EDGTII_1 Reference Even Discrete Gabor transform type II by DGT % Usage c=ref_edgt(f,g,a,M); % % If a is even, then the input window must be odd-centered of length 2L. % % If a is odd, then the input window must be even-centered of length 2L. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_edgtii_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); N=L/a; clong=ref_gdgt([f;conj(flipud(f))],g,a,M,.5,0,floor(a/2)); c=clong(1:M*N,:); ltfat/inst/private/ref_dwilt2.m0000664000175000017500000000214512612404256016436 0ustar susnaksusnakfunction c=ref_dwilt2(f,g1,g2,M1,M2); L1=size(f,1); L2=size(f,2); c=dwilt(f,g1,M1); c=reshape(c,L1,L2); c=c.'; c=dwilt(c,g2,M2); c=reshape(c,L2,L1); c=c.'; c=reshape(c,M1*2,L1/M1/2,M2*2,L2/M2/2); %-*- texinfo -*- %@deftypefn {Function} ref_dwilt2 %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dwilt2.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/test_dtwfb2filterbank.m0000664000175000017500000001616012612404256020670 0ustar susnaksusnakfunction test_failed = test_dtwfb2filterbank %-*- texinfo -*- %@deftypefn {Function} test_dtwfb2filterbank %@verbatim % This test only %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dtwfb2filterbank.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed = 0; disp('========= TEST DTWFB ============'); global LTFAT_TEST_TYPE; tolerance = 3e-8; if strcmpi(LTFAT_TEST_TYPE,'single') tolerance = 1e-5; end L = 1000; Larray = [1100,1701]; Warray = [1,3]; dualwt{1} = {'qshift1',1}; dualwt{2} = {'qshift3',5,'first','symorth1'}; dualwt{3} = {{'qshift3',5,'full','first','ana:symorth3','leaf','db4'},... {'qshift3',5,'full','first','syn:symorth3','leaf','db4'}}; dualwt{4} = {{'ana:oddeven1',5},{'syn:oddeven1',5}}; dualwt{5} = {'qshift3',3,'first','db4'}; dualwt{6} = {{'syn:oddeven1',2,'doubleband'},{'ana:oddeven1',2,'doubleband'}}; dualwt{7} = {dtwfbinit({'syn:oddeven1',2,'doubleband'}),dtwfbinit({'ana:oddeven1',2,'doubleband'})}; dualwt{8} = {{'dual',{'syn:oddeven1',2,'doubleband'}},{'syn:oddeven1',2,'doubleband'}}; dualwt{9} = {dtwfbinit({'syn:oddeven1',3,'full'},'nat'),dtwfbinit({'ana:oddeven1',3,'full'},'nat')}; tmp= dtwfbinit({'qshift1',6,'full'}); tmp = wfbtremove(4,0,tmp,'force'); tmp = wfbtremove(4,3,tmp,'force'); tmp = wfbtremove(3,6,tmp,'force'); dualwt{10} = {tmp,tmp}; dualwt{11} = {'dden2',3}; dualwt{12} = {'optsym3',3}; tolerance = ones(numel(dualwt),1)*tolerance; % decrease the tolerance for oddeven filters tolerance([4,6,7,8,9]) = 4e-5; for ii = 1:numel(dualwt) if isempty(dualwt{ii}) continue; end if iscell(dualwt{ii}{1}) || isstruct(dualwt{ii}{1}) && numel(dualwt{ii})==2 dualwtana = dualwt{ii}{1}; dualwtsyn = dualwt{ii}{2}; else dualwtana = dualwt{ii}; dualwtsyn = dualwtana; end for order = {'nat','freq'} [g,a,info] = dtwfb2filterbank( dualwtana, 'real', order{1}); [gd,ad] = dtwfb2filterbank( dualwtsyn, 'real', order{1}); G = filterbankfreqz(g,a,L); if strcmp(order{1},'freq') % Test if is analytic.. % Except for the lowpass and highpass filters, energy in % negative frequency region should be negligible for iii=1:size(G,2) posfreqEn = norm(G(1:end/2,iii))^2; negfreqEn = norm(G(end/2+1:end,iii))^2; dtw = dtwfbinit(dualwtana); fno = numel(dtw.nodes{1}.h); if iii==1 || any(iii == [size(G,2)-fno-1:size(G,2)]) res = negfreqEn>posfreqEn/2; % No justification else res = negfreqEn>posfreqEn/100; if res>0 % Uncomment to see frequency response % G = filterbankfreqz(g,a,L,'plot','linabs'); end end if res break; end end [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE IS ANALYTIC %i %s %0.5g %s'],ii, order{1},res,fail); disp(s) end Greal = filterbankfreqz(info.g1,a,L); Ghilb = filterbankfreqz(info.g2,a,L); G2 = (Greal+1i*Ghilb); res = norm(G(:)-G2(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE %i %s %0.5g %s'],ii, order{1},res,fail); disp(s) [gc,ac,info] = dtwfb2filterbank( dualwtana, 'complex', order{1}); [gcd,acd] = dtwfb2filterbank( dualwtsyn, 'complex', order{1}); % Compare coefficients for LL = Larray for W = Warray for cmplx = {'real','complex'} if strcmp(cmplx{1},'real') f = tester_rand(LL,W); else f = tester_crand(LL,W); end if strcmp(cmplx{1},'real') c = dtwfbreal(f,dualwtana,order{1}); cfb = filterbank(f,g,a); res = cell2mat(c)-cell2mat(cfb); res = norm(res(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE COEFF %i L:%i W:%i %s %s %0.5g %s'],ii,LL,W,cmplx{1}, order{1},res,fail); disp(s) fhat = 2*real(ifilterbank(c,gd,ad,LL)); res= norm(f(:)-fhat(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE REC %i L:%i W:%i %s %s %0.5g %s'],ii,LL,W,cmplx{1}, order{1},res,fail); disp(s) cc = dtwfb(f,dualwtana,order{1}); cfbc = filterbank(f,gc,ac); res = cell2mat(cc)-cell2mat(cfbc); res = norm(res(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE COEFF COMPLEX %i L:%i W:%i %s %s %0.5g %s'],ii,LL,W,cmplx{1}, order{1},res,fail); disp(s) fhat = ifilterbank(cc,gcd,acd,LL); res= norm(f(:)-fhat(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE REC COMPLEX %i L:%i W:%i %s %s %0.5g %s'],ii,LL,W,cmplx{1}, order{1},res,fail); disp(s) res = cell2mat(c)-cell2mat(cc(1:end/2)); res = norm(res(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE COEFF EQ %i L:%i W:%i %s %s %0.5g %s'],ii,LL,W,cmplx{1}, order{1},res,fail); disp(s) else c = dtwfb(f,dualwtana,order{1}); cfb = filterbank(f,gc,ac); res = cell2mat(c)-cell2mat(cfb); res = norm(res(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE COEFF %i L:%i W:%i %s %s %0.5g %s'],ii,LL,W,cmplx{1}, order{1},res,fail); disp(s) fhat = ifilterbank(c,gcd,acd,LL); res= norm(f(:)-fhat(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE REC %i L:%i W:%i %s %s %0.5g %s'],ii,LL,W,cmplx{1}, order{1},res,fail); disp(s) end end end end end end ltfat/inst/private/test_dgts.m0000664000175000017500000000664012612404256016401 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} test_dgts %@verbatim % This is currently the tester for the % new TF-transforms. % % It does not do multiwindow. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dgts.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %Lr=[24,144,108,144,24,135,35,77]; %ar=[ 4, 9, 9, 12, 6, 9, 5, 7]; %Mr=[ 6, 16, 12, 24, 8, 9, 7,11]; Lr=[24,20,15,12]; ar=[ 4, 4, 3, 3]; Mr=[ 6, 5, 5, 4]; Wmax=2; ref_funs={{'ref_rdgt','ref_rdgt_1'},... {'ref_rdgt3','ref_rdgt3_1'},... {'ref_edgtii','ref_edgtii_1'},... }; refinv_funs={{'ref_irdgt','ref_irdgt_1'},... {'ref_irdgt3','ref_irdgt3_1'},... {'ref_iedgtii','ref_iedgtii_1'},... }; inv_funs={{'ref_rdgt','ref_irdgt'},... {'ref_rdgt3','ref_irdgt3'},... {'ref_edgtii','ref_iedgtii'},... }; % ---------- reference testing -------------------- % Test that the transforms agree on values. for funpair=ref_funs for ii=1:length(Lr); for W=1:Wmax L=Lr(ii); M=Mr(ii); a=ar(ii); %b=L/M; N=L/a; f=tester_rand(L,W); g=ref_win(funpair{1}{1},'test',L,a,M); c1=feval(funpair{1}{1},f,g,a,M); c2=feval(funpair{1}{2},f,g,a,M); res=norm(c1(:)-c2(:)); s=sprintf('REF %10s L:%3i W:%2i a:%3i M:%3i %0.5g',funpair{1}{2},L,W,a,M,res); disp(s) %if res>1e-8 % disp('Reference comparion failed:') % [L, M, N, a, b, c, d] % end; end; end; end; % ---------- reference inverse function testing --------------- % Test that the transforms agree on values. for funpair=refinv_funs for ii=1:length(Lr); for W=1:Wmax L=Lr(ii); M=Mr(ii); a=ar(ii); %b=L/M; N=L/a; c=tester_rand(M*N,W); g=ref_win(funpair{1}{1},'test',L,a,M); f1=feval(funpair{1}{1},c,g,a,M); f2=feval(funpair{1}{2},c,g,a,M); res=norm(f1(:)-f2(:)); s=sprintf('REF %10s L:%3i W:%2i a:%3i M:%3i %0.5g',funpair{1}{2},L,W,a,M,res); disp(s) %if res>1e-8 % disp('Reference comparion failed:') % [L, M, N, a, b, c, d] % end; end; end; end; %------------ inversion testing ----------------- % Test that the transforms are invertible for funpair=inv_funs for ii=1:length(Lr); for W=1:Wmax L=Lr(ii); M=Mr(ii); a=ar(ii); %b=L/M; N=L/a; f=tester_rand(L,W); g=ref_win(funpair{1}{1},'test',L,a,M); gamma=ref_tgabdual(funpair{1}{1},g,L,a,M); c=feval(funpair{1}{1},f,g,a,M); fr=feval(funpair{1}{2},c,gamma,a,M); res=norm(f(:)-fr(:)); s=sprintf('INV %10s L:%3i W:%2i a:%3i M:%3i %0.5g',funpair{1}{1},L,W,a,M,res); disp(s) %if res>1e-8 % disp('Reference comparion failed:') % [L, M, N, a, b, c, d] % end; end; end; end; ltfat/inst/private/ref_gabglasso_onb.m0000664000175000017500000000563312612404256020036 0ustar susnaksusnakfunction [xo,N]=gabglasso(ttype,xi,lambda,group); %-*- texinfo -*- %@deftypefn {Function} ref_gabglasso_onb %@verbatim %GABGLASSO group lasso estimate (hard/soft) in time-frequency domain % Usage: xo=gabglasso(ttype,x,lambda,group); % [xo,N]=gabglasso(ttype,x,lambda,group)); % % GABGLASSO('hard',x,lambda,'time') will perform % time hard group thresholding on x, i.e. all time-frequency % columns whose norm less than lambda will be set to zero. % % GABGLASSO('soft',x,lambda,'time') will perform % time soft thresholding on x, i.e. all time-frequency % columns whose norm less than lambda will be set to zero, % and those whose norm exceeds lambda will be multiplied % by (1-lambda/norm). % % GABGLASSO(ttype,x,lambda,'frequency') will perform % frequency thresholding on x, i.e. all time-frequency % rows whose norm less than lambda will be soft or hard thresholded % (see above). % % [xo,N]=GABGLASSO(ttype,x,lambda,group) additionally returns % a number N specifying how many numbers where kept. % % The function may meaningfully be applied to output from DGT, WMDCT or % from WIL2RECT(DWILT(...)). % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_gabglasso_onb.html} %@seealso{gablasso, gabelasso, demo_audioshrink} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Bruno Torresani. % REFERENCE: OK error(nargchk(4,4,nargin)); NbFreqBands = size(xi,1); NbTimeSteps = size(xi,2); xo = zeros(size(xi)); switch(lower(group)) case {'time'} for t=1:NbTimeSteps, threshold = norm(xi(:,t)); mask = (1-lambda/threshold); if(strcmp(ttype,'soft')) mask = mask * (mask>0); elseif(strcmp(ttype,'hard')) mask = (mask>0); end xo(:,t) = xi(:,t) * mask; end case {'frequency'} for f=1:NbFreqBands, threshold = norm(xi(f,:)); mask = (1-lambda/threshold); mask = mask * (mask>0); if(strcmp(ttype,'soft')) mask = mask * (mask>0); elseif(strcmp(ttype,'hard')) mask = (mask>0); end xo(f,:) = xi(f,:) * mask; end otherwise error('"group" parameter must be either "time" or "frequency".'); end if nargout==2 signif_map = (abs(xo)>0); N = sum(signif_map(:)); end ltfat/inst/private/test_dgt.m0000664000175000017500000001354512612404256016220 0ustar susnaksusnakfunction test_failed=test_dgt %-*- texinfo -*- %@deftypefn {Function} test_dgt %@verbatim %TEST_DGT Test DGT % % This script runs a throrough test of the DGT routine, % testing it on a range of input parameters. % % The computational backend is tested this way, but the % interface is not. % % The script tests dgt, idgt, gabdual and gabtight. % % Use TEST_WFAC and TEST_DGT_FAC for more specific testing % of the DGT backend. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lr=[24,16,144,108,144,24,135,35,77,20]; ar=[ 4, 4, 9, 9, 12, 6, 9, 5, 7, 1]; Mr=[ 6, 8, 16, 12, 24, 8, 9, 7,11,20]; test_failed=0; disp(' =============== TEST_DGT ================'); disp('--- Used subroutines ---'); which comp_wfac which comp_iwfac which comp_sepdgt which comp_isepdgt which comp_sepdgtreal which comp_isepdgtreal which comp_gabdual_long which comp_gabtight_long for ii=1:length(Lr); L=Lr(ii); M=Mr(ii); a=ar(ii); b=L/M; N=L/a; c=gcd(a,M); d=gcd(b,N); p=a/c; q=M/c; for rtype=1:2 if rtype==1 rname='REAL '; g=tester_rand(L,1); else rname='CMPLX'; g=tester_crand(L,1); end; global LTFAT_TEST_TYPE; if strcmpi(LTFAT_TEST_TYPE,'single') C = gabframebounds(g,a,M); while C>1e3 warning(sprintf(['The frame is too badly conditioned '... 'for single precision. Cond. num. %d. '... ' Trying again.'],C)); if rtype==1 rname='REAL '; g=tester_rand(L,1); else rname='CMPLX'; g=tester_crand(L,1); end; C = gabframebounds(g,a,M); end end gd=gabdual(g,a,M); gt=gabtight(g,a,M); % --- Test windows against their reference implementations. --- ref_gd=ref_gabdual(g,a,M); res=norm(ref_gd-gd); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['REFDUAL %s L:%3i a:%3i b:%3i c:%3i d:%3i p:%3i q:%3i '... '%0.5g %s\n'],rname,L,a,b,c,d,p,q,res,fail); ref_gt=ref_gabtight(g,a,M); res=norm(ref_gt-gt); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['REFTIGHT %s L:%3i a:%3i b:%3i c:%3i d:%3i p:%3i q:%3i '... '%0.5g %s'],rname,L,a,b,c,d,p,q,res,fail); disp(s); % ---- Test gabdualnorm -------------------------------------- res=gabdualnorm(g,gd,a,M); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['DUALNORM1 %s L:%3i a:%3i b:%3i c:%3i d:%3i p:%3i q:%3i '... '%0.5g %s'],rname,L,a,b,c,d,p,q,res,fail); disp(s); [o1,o2]=gabdualnorm(g,gd,a,M); res=o1-1+o2; [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['DUALNORM2 %s L:%3i a:%3i b:%3i c:%3i d:%3i p:%3i q:%3i '... '%0.5g %s'],rname,L,a,b,c,d,p,q,res,fail); disp(s); for W=1:3 if rtype==1 f=tester_rand(L,W); else f=tester_crand(L,W); end; % --- Test DGT against its reference implementation. --- cc=dgt(f,g,a,M); cc2=ref_dgt(f,g,a,M); cdiff=cc-cast(cc2,class(cc)); res=norm(cdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['REF %s L:%3i W:%2i a:%3i b:%3i c:%3i d:%3i p:%3i q:%3i '... '%0.5g %s'],rname,L,W,a,b,c,d,p,q,res,fail); disp(s) % --- Test reconstruction of IDGT using a canonical dual window. --- r=idgt(cc,gd,a); res=norm(f-r,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['REC %s L:%3i W:%2i a:%3i b:%3i c:%3i d:%3i p:%3i q:%3i ' ... '%0.5g %s'],rname,L,W,a,b,c,d,p,q,res,fail); disp(s) % --- Test reconstruction of IDGT using a canonical tight window. --- res=norm(f-idgt(dgt(f,gt,a,M),gt,a),'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['TIG %s L:%3i W:%2i a:%3i b:%3i c:%3i d:%3i p:%3i q:%3i ' ... '%0.5g %s'],rname,L,W,a,b,c,d,p,q,res,fail); disp(s); % Test the real valued transform if rtype==1 % --- Reference test --- ccreal=dgtreal(f,g,a,M); M2=floor(M/2)+1; cdiff=cc(1:M2,:,:)-ccreal; res=norm(cdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['REFREAL L:%3i W:%2i a:%3i b:%3i c:%3i d:%3i p:%3i ' ... 'q:%3i %0.5g %s'],L,W,a,b,c,d,p,q,res,fail); disp(s); % --- Reconstruction test --- rreal=idgtreal(ccreal,gd,a,M); res=norm(f-rreal,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['RECREAL L:%3i W:%2i a:%3i b:%3i c:%3i d:%3i p:%3i ' ... 'q:%3i %0.5g %s'],L,W,a,b,c,d,p,q,res,fail); disp(s) end; end; end; end; ltfat/inst/private/ref_dctiii_1.m0000664000175000017500000000311412612404256016713 0ustar susnaksusnakfunction c=ref_dctiii_1(f) %-*- texinfo -*- %@deftypefn {Function} ref_dctiii_1 %@verbatim %REF_DCTII Reference Discrete Consine Transform type III % Usage: c=ref_dctiii(f); % % The transform is computed by an FFT of 4 times the length of f. % See the Wikipedia article on "Discrete Cosine Transform" % % This is the inverse of REF_DCTII %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dctiii_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); if ~isreal(f) c=ref_dctiii_1(real(f))+i*ref_dctiii_1(imag(f)); else % Scale coefficients to obtain orthonormal transform. f(1,:)=sqrt(2)*f(1,:); f=f*sqrt(2*L); % Make 4x long vector lf=[f;... zeros(1,W);... -flipud(f);... -f(2:end,:);... zeros(1,W);... flipud(f(2:end,:))]; fflong=real(ifft(lf)); c=fflong(2:2:2*L,:); end ltfat/inst/private/ref_spreadop.m0000664000175000017500000000232712612404256017050 0ustar susnaksusnakfunction fout=ref_spreadop(f,c,a); %-*- texinfo -*- %@deftypefn {Function} ref_spreadop %@verbatim %REF_SPREADOP Reference Spreading operator. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_spreadop.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . W=size(f,2); M=size(c,1); N=size(c,2); L=N*a; fout=zeros(L,W,assert_classname(f,c)); for l=0:L-1 for m=0:M-1 for n=0:N-1 fout(l+1,:)=fout(l+1,:)+c(m+1,n+1)*exp(2*pi*i*l*m/M)*f(mod(l-n*a,L)+1,:); end; end; end; ltfat/inst/private/ref_lattice.m0000664000175000017500000000306012612404256016653 0ustar susnaksusnakfunction [lat]=ref_lattice(V,L); %-*- texinfo -*- %@deftypefn {Function} ref_lattice %@verbatim %REF_LATTICE List of lattice points. % Usage: lat=ref_lattice(V,L) % % Returns the lattice given by av and bv. % The output format is a 2xMxN matrix, where % each column is a point on the lattice. % % The lattice must be in lower triangular Hermite normal form. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_lattice.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . a=V(1,1); b=V(2,2); s=V(2,1); M=abs(L/b); N=abs(L/a); % Create lattice. lattice=zeros(2,M*N); for n=0:N-1 for m=0:M-1 soffset=mod(s*n,b); % Determine gridpoint in rectangular coordinates. %lat(:,m+n*M+1) = V(:,1)*n+V(:,2)*m; lat(1,m+n*M+1) = n*a; lat(2,m+n*M+1) = m*b+soffset; end; end; % Mod' the lattice. lat=mod(lat,L); ltfat/inst/private/test_pfilt.m0000664000175000017500000001077312612404256016560 0ustar susnaksusnakfunction test_failed=test_pfilt Lr =[27,100,213]; %-*- texinfo -*- %@deftypefn {Function} test_pfilt %@verbatim % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_pfilt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . gr{1}=randn(20,1); gr{2}=randn(21,1); gr{3}=firfilter('hanning',19); gr{4}=firfilter('hanning',20); gr{5}=randn(4,1); gr{6}=firfilter('hanning',20,'causal'); gr{7}=firfilter('hanning',20,'delay',13); gr{8}=firfilter('hanning',20,'delay',-13); gr{7}=firfilter('hanning',20,'delay',14); gr{8}=firfilter('hanning',20,'delay',-14); gr{9}=firfilter('hamming',19,.3); gr{10}=firfilter('hamming',19,.3,'real'); gr{11}=blfilter('hanning',.19); gr{12}=blfilter('hanning',.2); gr{13}=blfilter('hanning',.132304); gr{14}=blfilter('hanning',.23,'delay',13); gr{15}=blfilter('hamming',.23,.3); gr{16}=blfilter('hamming',.23,.3,'real'); % (almost) Allpass filter gr{17}=blfilter('hanning',2); gr{18}=blfilter('hanning',1); gr{19}=blfilter('hanning',2,1); gr{20}=blfilter('hanning',1,-1); gr{21}=blfilter('hamming',.1,-.3); gr{22}=blfilter('hanning',1.7); % REMARK: modcent is applied to fc test_failed=0; disp(' =============== TEST_PFILT =============='); disp('--- Used subroutines ---'); which comp_filterbank_td which comp_filterbank_fft which comp_filterbank_fftbl which comp_filterbank disp('--- Regular subsampling ---'); for ii=1:numel(gr) % Skip empry fields in gr g=gr{ii}; if isempty(g) continue; end for a=1:3 for jj=1:length(Lr) % Create input signal of proper length L=ceil(Lr(jj)/a)*a; for W=1:3 for rtype=1:2 if rtype==1 rname='REAL '; f=tester_rand(L,W); else rname='CMPLX'; f=tester_crand(L,W); end; h2=ref_pfilt(f,g,a); h1=pfilt(f,g,a); res=norm(h1-h2); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('PFILT %3s filtno:%3i L:%3i W:%3i a:%3i %0.5g %s',rname,ii,L,W,a,res,fail); disp(s); end; end; end; end; end; disp('--- Fractional subsampling ---'); % Pick just bl filters idx = cellfun(@(grEl) isfield(grEl,'H'),gr); tmpRange = 1:numel(gr); tmpRange = tmpRange(idx); for ii=tmpRange g = gr{ii}; for jj=1:length(Lr) L = Lr(jj); % Find support and offset of the filter tmpH = g.H(L); if numel(tmpH) == L % this is no longer a band pass filter end foff = g.foff(L); Nmin = numel(tmpH); for Nalt=[-3,-7,3,0]; % Nalt==0 painless % Nalt>0 painless % Nalt<0 not painless if Nmin + Nalt <=0 a = [L,1]; elseif Nmin + Nalt >= L % This is no longer fractional subsampling a = [L,L]; else a = [L,Nmin+Nalt]; end for W=1:3 for rtype=1:2 if rtype==1 rname='REAL '; f=tester_rand(L,W); else rname='CMPLX'; f=tester_crand(L,W); end; h2=ref_pfilt(f,g,a); h1=pfilt(f,g,a); res=norm(h1-h2); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('PFILT %3s filtno:%3i L:%3i W:%3i a:[%3i,%3i], fb: %i, %0.5g %s',... rname,ii,L,W,a(1),a(2),Nmin,res,fail); disp(s); end end end end end ltfat/inst/private/ref_gabdualns_3.m0000664000175000017500000000216012612404256017410 0ustar susnaksusnakfunction gamma=ref_gabdualns_3(g,V); %-*- texinfo -*- %@deftypefn {Function} ref_gabdualns_3 %@verbatim %REF_GABDUALNS_3 GABDUALNS by multiwindow method. % Usage: gamma=ref_gabdualns_3(g,V); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_gabdualns_3.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . [gm,a,M]=ref_nonsep2multiwin(g,V); gmd=gabdual(gm,a,M); gamma=gmd(:,1); ltfat/inst/private/ref_rdgt_1.m0000664000175000017500000000236312612404256016413 0ustar susnaksusnakfunction c=ref_rdgt_1(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_rdgt_1 %@verbatim %REF_RDGT_1 Reference Real DGT by fac. and RDFT % Usage: c=ref_rdgt_1(f,g,a,M); % % Compute the factorization and use RDFT %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_rdgt_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); R=size(g,2); N=L/a; gf=comp_wfac(g,a,M); % Compute the window application and the DFT modulation. c=zeros(M*N*R,W); c(:)=ref_rdft(comp_dgt_fw(f,gf,L,a,M)); ltfat/inst/private/ref_iwfac.m0000664000175000017500000000335712612404256016330 0ustar susnaksusnakfunction [g]=ref_iwfac(gf,L,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_iwfac %@verbatim %REF_IWFAC Compute inverse window factorization % Usage: g=ref_iwfac(gf,L,a,M); % % Input parameters: % gf : Factored Window % L : Length of transform. % a : Length of time shift. % M : Number of frequency bands. % Output parameters: % g : Window function. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_iwfac.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Calculate the parameters that was not specified R=prod(size(gf))/L; N=L/a; b=L/M; % The four factorization parameters. c=gcd(a,M); p=a/c; q=M/c; d=N/q; gf=reshape(gf,p,q*R,c,d); % Scale by the sqrt(M) comming from Walnuts representation gf=gf/sqrt(M); % fft them if d>1 gf=ifft(gf,[],4); end; g=zeros(L,R); % Set up the small matrices for w=0:R-1 for s=0:d-1 for l=0:q-1 for k=0:p-1 g((1:c)+mod(k*M-l*a+s*p*M,L),w+1)=gf(k+1,l+1+q*w,:,s+1); end; end; end; end; ltfat/inst/private/test_multiwin.m0000664000175000017500000000541012612404256017302 0ustar susnaksusnakfunction test_failed=test_multiwin %-*- texinfo -*- %@deftypefn {Function} test_multiwin %@verbatim %TEST_MULTIWIN Test multiwindow gabdual and gabtight %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_multiwin.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lr=[24,16,144,108,144,24,135,35,77,20]; ar=[ 4, 4, 9, 9, 12, 6, 9, 5, 7, 1]; Mr=[ 6, 8, 16, 12, 24, 8, 9, 7,11,20]; disp(' =============== TEST_MULTIWIN ================'); disp('--- Used subroutines ---'); which comp_wfac which comp_iwfac which comp_gabdual_long which comp_gabtight_long test_failed=0; for ii=1:length(Lr); L=Lr(ii); M=Mr(ii); a=ar(ii); r=zeros(L,1); for R=1:3 for wintype = 1:2 switch wintype case 1 g=randn(L,R); rname='REAL '; case 2 g=tester_crand(L,R); rname='CMPLX'; end; N=L/a; % ----------- test canonical dual ---------------- gd=gabdual(g,a,M); f=tester_crand(L,1); r=zeros(L,1); for ii=1:R c=dgt(f,g(:,ii),a,M); r=r+idgt(c,gd(:,ii),a); end; res=norm(f-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['MULTIDUAL %s L:%3i R:%3i a:%3i M:%3i %0.5g %s\n'],rname,L, ... R,a,M,res,fail); % ----------- test canonical tight ---------------- gt=gabtight(g,a,M); f=tester_crand(L,1); r=zeros(L,1); for ii=1:R c=dgt(f,gt(:,ii),a,M); r=r+idgt(c,gt(:,ii),a); end; res=norm(f-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['MULTITIGHT %s L:%3i R:%3i a:%3i M:%3i %0.5g %s\n'],rname,L, ... R,a,M,res,fail); % ----------- test frame bounds ---------------- B=gabframebounds(gt,a,M); res=B-1; [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['MULTIFB %s L:%3i R:%3i a:%3i M:%3i %0.5g %s\n'],rname,L, ... R,a,M,res,fail); end; end; end; ltfat/inst/private/ref_dft_1.m0000664000175000017500000000247712612404256016236 0ustar susnaksusnakfunction c=ref_dft_1(f) %-*- texinfo -*- %@deftypefn {Function} ref_dft_1 %@verbatim %REF_DFT_1 Reference DFT by doubling % Usage: c=ref_dft_1(f); % % REF_DFT_1(f) computes a DFT of f by upsampling f and inserting zeros % at the odd positions. % % This is not an efficient method, it is just meant to illustrate a % symmetry of the DFT. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dft_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); flong=zeros(2*L,W,assert_classname(f)); flong(1:2:end-1)=f; fflong=fft(flong)/sqrt(L); c=fflong(1:L,:); ltfat/inst/private/ref_idwiltiii_1.m0000664000175000017500000000425112612404256017440 0ustar susnaksusnakfunction [f]=ref_idwiltiii_1(coef,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_idwiltiii_1 %@verbatim %REF_IDWILTIII_1 Reference IDWILTIII by IDGT type III % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_idwiltiii_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author : Peter L. Soendergaard L=size(coef,1); N=L/a; W=size(coef,2); coef=reshape(coef,M,N,W); coef2=zeros(2*M,N,W); if 0 % --- loop version --- for n=0:N-1 for m=0:M-1 if rem(m+n,2)==0 coef2(m+1,n+1,:) = exp(i*pi/4)/sqrt(2)*coef(m+1,n+1,:); coef2(2*M-m,n+1,:) = exp(-i*pi/4)/sqrt(2)*coef(m+1,n+1,:); else coef2(m+1,n+1,:) = exp(-i*pi/4)/sqrt(2)*coef(m+1,n+1,:); coef2(2*M-m,n+1,:) = exp(i*pi/4)/sqrt(2)*coef(m+1,n+1,:); end; end; end; else % --- Vector version --- coef2(1:2:M,1:2:N,:) = exp(i*pi/4)/sqrt(2)*coef(1:2:M,1:2:N,:); coef2(2*M:-2:M+1,1:2:N,:) = exp(-i*pi/4)/sqrt(2)*coef(1:2:M,1:2:N,:); coef2(1:2:M,2:2:N,:) = exp(-i*pi/4)/sqrt(2)*coef(1:2:M,2:2:N,:); coef2(2*M:-2:M+1,2:2:N,:) = exp(i*pi/4)/sqrt(2)*coef(1:2:M,2:2:N,:); coef2(2:2:M,1:2:N,:) = exp(-i*pi/4)/sqrt(2)*coef(2:2:M,1:2:N,:); coef2(2*M-1:-2:M+1,1:2:N,:) = exp(i*pi/4)/sqrt(2)*coef(2:2:M,1:2:N,:); coef2(2:2:M,2:2:N,:) = exp(i*pi/4)/sqrt(2)*coef(2:2:M,2:2:N,:); coef2(2*M-1:-2:M+1,2:2:N,:) = exp(-i*pi/4)/sqrt(2)*coef(2:2:M,2:2:N,:); end; f=ref_igdgt(reshape(coef2,2*M*N,W),g,a,2*M,0,0.5,0); ltfat/inst/private/ref_rdftii.m0000664000175000017500000000255412612404256016516 0ustar susnaksusnakfunction c=ref_rdftii(f) %-*- texinfo -*- %@deftypefn {Function} ref_rdftii %@verbatim %REF_RDFTII Reference Real DFT type II % Usage: c=ref_rdftii(f); % % Compute RDFTII by explicit formulas. % % The transform is orthonormal %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_rdftii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); Lhalf=ceil(L/2); F=zeros(L); F(:,1)=ones(L,1); l=(0:L-1).'; for m=1:Lhalf-1 F(:,2*m)=sqrt(2)*cos(2*pi*m*(l+.5)/L); F(:,2*m+1)=sqrt(2)*sin(2*pi*m*(l+.5)/L); end; if mod(L,2)==0 F(:,L)=cos(pi*l); end; F=F/sqrt(L); % dot-transpose will work because F is real. c=F.'*f; ltfat/inst/private/ref_dstiv.m0000664000175000017500000000233112612404256016357 0ustar susnaksusnakfunction c=ref_dstiv(f) %-*- texinfo -*- %@deftypefn {Function} ref_dstiv %@verbatim %REF_DSTIV Reference Discrete Sine Transform type IV % Usage: c=ref_dstiv(f); % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dstiv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); % Create weights. w=sqrt(2/L); % Create transform matrix. F=zeros(L); for m=0:L-1 for n=0:L-1 F(m+1,n+1)=w*sin(pi*(n+.5)*(m+.5)/L); end; end; % Compute coefficients. c=F*f; ltfat/inst/private/tester_sprand.m0000664000175000017500000000230612612404256017251 0ustar susnaksusnakfunction f=tester_sprand(varargin); %-*- texinfo -*- %@deftypefn {Function} tester_sprand %@verbatim %TESTER_SPRAND Sparse random numbers for testing. % Usage: f=tester_sprand(p1,p2); %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/tester_sprand.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . global LTFAT_TEST_TYPE if isempty(LTFAT_TEST_TYPE) LTFAT_TEST_TYPE='double' end; f=sprand(varargin{:}); if strcmp(LTFAT_TEST_TYPE,'single') f=single(f); end; ltfat/inst/private/ref_drihaczekdist.m0000664000175000017500000000243112612404256020057 0ustar susnaksusnakfunction R=ref_drihaczekdist(f) %-*- texinfo -*- %@deftypefn {Function} ref_drihaczekdist %@verbatim %REF_DRIHACZEKDIST Reference discrete Rihaczek distribution % Usage: R=ref_drihaczekdist(f) % % REF_DRIHACZEKDIST(f) computes the discrete Rihaczek distribution of f. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_drihaczekdist.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven L = length(f); c = fft(f); for m = 0:L-1 for n=0:L-1 R(m+1, n+1) = (f(n+1).' * conj(c(m+1))) .* exp(-2*pi*i*m*n/L); end end ltfat/inst/private/ref_igdgt.m0000664000175000017500000000257612612404256016337 0ustar susnaksusnakfunction f=ref_igdgt(coef,g,a,M,c_t,c_f,c_w) %-*- texinfo -*- %@deftypefn {Function} ref_igdgt %@verbatim %REF_GDGT Reference generalized DGT % Usage: f=ref_igdgt(c,g,a,M,c_t,c_f,c_w); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transpose. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_igdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . N=size(coef,1)/M; L=N*a; F=zeros(L,M*N); l=(0:L-1).'; if length(g). % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); if ~isreal(f) c=ref_dctii_1(real(f))+i*ref_dctii_1(imag(f)); else lf=zeros(L*4,W); lf(2:2:2*L,:)=f; lf(2*L+2:2:end,:)=flipud(f); fflong=real(fft(lf)); c=fflong(1:L,:)/sqrt(2*L); % Scale first coefficients to obtain orthonormal transform. c(1,:)=1/sqrt(2)*c(1,:); end; ltfat/inst/private/test_uwpfbt.m0000664000175000017500000001107712612404256016747 0ustar susnaksusnakfunction test_failed = test_uwpfbt(verbose) %-*- texinfo -*- %@deftypefn {Function} test_uwpfbt %@verbatim %TEST_WFBTPR % % Checks perfect reconstruction of the general wavelet transform of different % filters % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_uwpfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('========= TEST UWPFBT ============'); global LTFAT_TEST_TYPE; tolerance = 1e-8; if strcmpi(LTFAT_TEST_TYPE,'single') tolerance = 2e-6; end test_failed = 0; if(nargin>0) verbose = 1; else verbose = 0; end type = {'dec'}; ext = {'per'}; J = 4; %! Mild tree wt1 = wfbtinit({'db10',6,'full'}); wt1 = wfbtremove(1,1,wt1,'force'); wt1 = wfbtremove(2,1,wt1,'force'); %! Hardcore tree wt2 = wfbtinit({'db3',1}); wt2 = wfbtput(1,1,'mband1',wt2); wt2 = wfbtput(2,2,'mband1',wt2); wt2 = wfbtput(3,3,'mband1',wt2); wt2 = wfbtput(3,1,'db10',wt2); wt2 = wfbtput(4,1,'dgrid2',wt2); wt2 = wfbtput(5,1,'db2',wt2); % wt2 = wfbtinit(); % wt2 = wfbtput(0,0,{'db',4},wt2); % wt2 = wfbtput(1,0,{'algmband',1},wt2); % wt2 = wfbtput(1,1,{'hden',3},wt2); % wt2 = wfbtput(2,0,{'dgrid',2},wt2); % wt2 = wfbtput(2,1,{'dgrid',2},wt2); test_filters = { {'algmband1',J} % 3 filters, uniform, crit. sub. {'algmband2',J} % 4 filters, uniform, crit. sub. {'db10',J} %{{'hden',3},J} % 3 filters, non-uniform, no crit. sub. no correct {'dgrid1',J} % 4 filters. sub. fac. 2 wt1 wt2 }; scaling = {'scale','sqrt','noscale'}; scalingInv = scaling(end:-1:1); interscaling = {'intscale','intsqrt','intnoscale'}; interscalingInv = interscaling(end:-1:1); for scIdx = 1:numel(scaling) for iscIdx = 1:numel(interscaling) %testLen = 4*2^7-1;%(2^J-1); testLen = 53; f = tester_rand(testLen,1); for extIdx=1:length(ext) extCur = ext{extIdx}; for typeIdx=1:length(type) for tt=1:length(test_filters) actFilt = test_filters{tt}; if verbose, if(~isstruct(actFilt))fprintf('J=%d, filt=%s, ext=%s, inLen=%d \n',actFilt{2},actFilt{1},extCur,length(f)); else disp('Custom'); end; end; [c,info] = uwpfbt(f,actFilt,scaling{scIdx},interscaling{iscIdx}); fhat = iuwpfbt(c,actFilt,scalingInv{scIdx},interscalingInv{iscIdx}); err = norm(f-fhat,'fro'); [test_failed,fail]=ltfatdiditfail(err,test_failed,tolerance); if(~verbose) if(~isstruct(actFilt)) fprintf('J=%d, %5.5s, ext=%4.4s, %s, %s, L=%d, err=%.4e %s \n',actFilt{2},actFilt{1},extCur,scaling{scIdx},interscaling{iscIdx},size(f,1),err,fail); else fprintf('Custom, %s, %s, err=%.4e %s\n',scaling{scIdx},interscaling{iscIdx},err,fail); end; end if strcmpi(fail,'FAILED') if verbose if(~isstruct(actFilt)) fprintf('err=%d, filt=%s, ext=%s, inLen=%d \n',err,actFilt{1},extCur,testLen);else disp('Fail. Custom'); end; figure(1);clf;stem([f,fhat]); figure(2);clf;stem([f-fhat]); break; end end fhat2 = iuwpfbt(c,info); err = norm(f-fhat2,'fro'); [test_failed,fail]=ltfatdiditfail(err,test_failed,tolerance); if(~isstruct(actFilt)) fprintf('INFO J=%d, %5.5s, ext=%4.4s, %s, %s, L=%d, err=%.4e %s \n',actFilt{2},actFilt{1},extCur,scaling{scIdx},interscaling{iscIdx},size(f,1),err,fail); else fprintf('INFO Custom, %s, %s, err=%.4e %s\n',scaling{scIdx},interscaling{iscIdx},err,fail); end; if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end end end ltfat/inst/private/ref_dwiltiii_1.m0000664000175000017500000000411512612404256017266 0ustar susnaksusnakfunction [coef]=ref_dwiltiii_1(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dwiltiii_1 %@verbatim %COMP_DWILT Compute Discrete Wilson transform. % % Do not call this function directly, use DWILT instead. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dwiltiii_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author : Peter L. Soendergaard. L=size(g,1); N=L/a; W=size(f,2); c=ref_gdgt(f,g,a,2*M,0,.5,0); coef2=reshape(c,2*M,N,W); % ----- Type III ------ coef=zeros(M,N,W); if 0 % --- Loop version --- for n=0:N-1 for m=0:M-1 if rem(m+n,2)==0 coef(m+1,n+1,:)= 1/sqrt(2)*(exp(-i*pi/4)*coef2(m+1,n+1,:)+exp(i*pi/4)*coef2(2*M-m,n+1,:)); else coef(m+1,n+1,:)= 1/sqrt(2)*(exp(i*pi/4)*coef2(m+1,n+1,:)+exp(-i*pi/4)*coef2(2*M-m,n+1,:)); end; end; end; else % --- Vector version--- % --- m is even --------- coef(1:2:M,1:2:N,:)= 1/sqrt(2)*(exp(-i*pi/4)*coef2(1:2:M,1:2:N,:)+exp(i*pi/4)*coef2(2*M:-2:M+1,1:2:N,:)); coef(1:2:M,2:2:N,:)= 1/sqrt(2)*(exp(i*pi/4)*coef2(1:2:M,2:2:N,:)+exp(-i*pi/4)*coef2(2*M:-2:M+1,2:2:N,:)); % --- m is odd ---------- coef(2:2:M,1:2:N,:)= 1/sqrt(2)*(exp(i*pi/4)*coef2(2:2:M,1:2:N,:)+exp(-i*pi/4)*coef2(2*M-1:-2:M+1,1:2:N,:)); coef(2:2:M,2:2:N,:)= 1/sqrt(2)*(exp(-i*pi/4)*coef2(2:2:M,2:2:N,:)+exp(i*pi/4)*coef2(2*M-1:-2:M+1,2:2:N,:)); end; coef=reshape(coef,M*N,W); ltfat/inst/private/test_fwt.m0000664000175000017500000001515412612404256016240 0ustar susnaksusnakfunction test_failed = test_fwt(verbose) %-*- texinfo -*- %@deftypefn {Function} test_fwt %@verbatim %TEST_COMP_FWTPR % % Checks perfect reconstruction of the wavelet transform of different % filters % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_fwt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('========= TEST FWT ============'); global LTFAT_TEST_TYPE; tolerance = 1e-8; if strcmpi(LTFAT_TEST_TYPE,'single') tolerance = 1e-5; end test_failed = 0; if(nargin>0) verbose = 1; which comp_filterbank_td -all which comp_ifilterbank_td -all else verbose = 0; end % curDir = pwd; % mexDir = [curDir(1:strfind(pwd,'\ltfat')+5),'\mex']; % % rmpath(mexDir); % which comp_fwt_all % addpath(mexDir) % which comp_fwt_all type = {'dec'}; ext = {'per','zero','odd','even'}; format = {'pack','cell'}; test_filters = { {'db',10} % {'apr',2} % complex filter values, odd length filters, no exact PR {'algmband',2} % 4 filters, {'db',1} %{'db',3} {'spline',4,4} %{'lemaire',80} % not exact reconstruction {'hden',3} % only one with 3 filters and different %subsampling factors %{'symds',1} {'algmband',1} % 3 filters, sub sampling factor 3, even length %{'sym',4} {'sym',9} {'symds',2} {'symtight',1} {'symtight',2} % {'symds',3} % {'symds',4} % {'symds',5} {'spline',3,5} %{'spline',3,11} %{'spline',11,3} % too high reconstruction error %{'maxflat',2} %{'maxflat',11} %{'optfs',7} % bad precision of filter coefficients %{'remez',20,10,0.1} % no perfect reconstruction {'dden',2} {'dden',5} {'dgrid',1} {'dgrid',3} %{'algmband',1} {'mband',1} {'coif',1} {'coif',2} {'coif',3} {'coif',4} {'qshifta',4} {'qshiftb',4} {'oddevenb',1} %{'hden',2} %{'hden',1} %{'algmband',2} {'symorth',1} {'symorth',2} {'symorth',3} {'symdden',1} {'symdden',2} {[0.129409522551260,-0.224143868042013,-0.836516303737808,-0.482962913144534],... [-0.482962913144534,0.836516303737808,-0.224143868042013,-0.129409522551260],... 'a',[2,2]} {[0.129409522551260,-0.224143868042013,-0.836516303737808,-0.482962913144534],... [-0.482962913144534,0.836516303737808,-0.224143868042013,-0.129409522551260]} }; %ext = {'per','zpd','sym','symw','asym','asymw','ppd','sp0'}; J = 5; %testLen = 4*2^J-1;%(2^J-1); testLen = 53; for formatIdx = 1:length(format) formatCurr = format{formatIdx}; for extIdx=1:length(ext) extCur = ext{extIdx}; %for inLenRound=0:2^J-1 inLenRound = 0; for realComplex=0:1 %f = randn(14576,1); if realComplex f = tester_crand(testLen+inLenRound,1); else f = tester_rand(testLen+inLenRound,1); end %f = 1:testLen-1;f=f'; %f = 0:30;f=f'; % multiple channels %f = [2*f,f,0.1*f]; for typeIdx=1:length(type) typeCur = type{typeIdx}; for tt=1:length(test_filters) actFilt = test_filters{tt}; %fname = strcat(prefix,actFilt{1}); %w = fwtinit(test_filters{tt}); for jj=J:J if verbose, fprintf('J=%d, filt=%s, type=%s, ext=%s, inLen=%d, format=%s \n',jj,actFilt{1},typeCur,extCur,length(f),formatCurr); end; if(strcmp(formatCurr,'pack')) [c, info] = fwt(f,test_filters{tt},jj,extCur); fhat = ifwt(c,test_filters{tt},jj,size(f,1),extCur); if ~isnumeric(test_filters{tt}{1}) fhat2 = ifwt(c,info); end elseif(strcmp(formatCurr,'cell')) [c,info] = fwt(f,test_filters{tt},jj,extCur); ccell = wavpack2cell(c,info.Lc); fhat = ifwt(ccell,test_filters{tt},jj,size(f,1),extCur); if ~isnumeric(test_filters{tt}{1}) fhat2 = ifwt(c,info); end else error('Should not get here.'); end %MSE err = norm(f-fhat,'fro'); [test_failed,fail]=ltfatdiditfail(err,test_failed,tolerance); if(~verbose) if ~isnumeric(test_filters{tt}{1}) fprintf('J=%d, %6.6s, type=%s, ext=%4.4s, L=%d, fmt=%s, err=%.4e %s \n',jj,actFilt{1},typeCur,extCur,length(f),formatCurr,err,fail); else fprintf('J=%d, numeric, type=%s, ext=%4.4s, L=%d, fmt=%s, err=%.4e %s \n',jj,typeCur,extCur,length(f),formatCurr,err,fail); end end if ~isnumeric(test_filters{tt}{1}) err = norm(f-fhat2,'fro'); [test_failed,fail]=ltfatdiditfail(err,test_failed,tolerance); fprintf('INFO J=%d, %6.6s, type=%s, ext=%4.4s, L=%d, fmt=%s, err=%.4e %s \n',jj,actFilt{1},typeCur,extCur,length(f),formatCurr,err,fail); end if strcmpi(fail,'FAILED') if verbose fprintf('err=%d, J=%d, filt=%s, type=%s, ext=%s, inLen=%d',err,jj,actFilt{1},extCur,typeCur,testLen+inLenRound); figure(1);clf;stem([f,fhat]); figure(2);clf;stem([f-fhat]); break; end end end if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end ltfat/inst/private/ref_wfac.m0000664000175000017500000000327112612404256016152 0ustar susnaksusnakfunction gf=ref_wfac(g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_wfac %@verbatim %REF_WFAC Compute window factorization % Usage: gf=ref_wfac(g,a,M); %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_wfac.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % The commented _nos code in this file can be used to test % the _nos versions of the C-library. L=size(g,1); R=size(g,2); N=L/a; b=L/M; c=gcd(a,M); p=a/c; q=M/c; d=N/q; gf=zeros(p,q*R,c,d); gf_nos=zeros(d,p,q*R,c); for w=0:R-1 for s=0:d-1 for l=0:q-1 for k=0:p-1 gf(k+1,l+1+q*w,:,s+1)=g((1:c)+c*mod(k*q-l*p+s*p*q,d*p*q),w+1); %gf_nos(s+1,k+1,l+1+q*w,:)=g((1:c)+c*mod(k*q-l*p+s*p*q,d*p*q),w+1); end; end; end; end; % dft them if d>1 gf=fft(gf,[],4); %gf_nos=fft(gf_nos); end; % Scale by the sqrt(M) comming from Walnuts representation gf=gf*sqrt(M); %gf_nos=gf_nos*sqrt(M); %gf_nos=permute(gf_nos,[2, 3, 4, 1]); %norm(gf_nos(:)-gf(:)) gf=reshape(gf,p*q*R,c*d); ltfat/inst/private/test_dft.m0000664000175000017500000000265512612404256016217 0ustar susnaksusnakfunction test_failed=test_dft Lr=[1, 19, 20]; test_failed=0; disp(' =============== TEST_DFT =============='); for jj=1:length(Lr) L=Lr(jj); for n = 1:2 if (n==1) type = 'complex'; f=tester_crand(L,1); elseif (n==2) type = 'real'; f=tester_rand(L,1); end c1=dft(f); c2=ref_dft(f); res=norm(c1-c2); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('DFT %6s L:%3i %0.5g %s',type,L,res,fail); disp(s); end end; end; %-*- texinfo -*- %@deftypefn {Function} test_dft %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dft.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ltfatchecktest.m0000664000175000017500000000301612612404256017403 0ustar susnaksusnakfunction [test_failed]=ltfatchecktest(res,outstr,test_failed,mode,tolerance); %-*- texinfo -*- %@deftypefn {Function} ltfatchecktest %@verbatim %LTFATCHECKTEST Did a test fail, new method % % [test_fail,fail]=LTFATCHECKTEST(res,test_fail) updates test_fail if % res is above threshhold and outputs the word FAIL in the variable % fail. Use only in testing scripts. % % mode = 0 prints all results % % mode = 1 is quiet mode to spot failures %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/ltfatchecktest.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<5 tolerance=1e-10; end; fail=0; if (abs(res)>tolerance) || isnan(res) fail=1; end; if (mode==0) || (fail==1) if (fail==1) outstr=[outstr,' FAILED']; end; disp(outstr); end; test_failed=test_failed+fail; ltfat/inst/private/ref_gaboratoms.m0000664000175000017500000000273712612404256017376 0ustar susnaksusnakfunction G=ref_gaboratoms(g,spoints); %-*- texinfo -*- %@deftypefn {Function} ref_gaboratoms %@verbatim %REF_GABORATOMS Create Gabor transformation matrix % Usage: G=ref_gaboratoms(g,spoints); % % Given a set a TF-sampling points, as returned % by REF_GABORLATTICE, returns the corresponding % Gabor matrix. Each column of the output matriorx is % a Gabor atom. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_gaboratoms.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); W=size(g,2); MN=size(spoints,2); % Create Gabor matrix. G=zeros(L,MN*W); jj=(0:L-1).'; % Calculate atoms from sampling points. for w=0:W-1 for p=1:MN; G(:,p+w*MN)=exp(2*pi*i*spoints(2,p)*jj/L).*circshift(g(:,w+1),spoints(1,p)); end; end; ltfat/inst/private/test_wignervilledist.m0000664000175000017500000000344412612404256020652 0ustar susnaksusnakfunction test_failed = test_wignervilledist Lr = [1, 19, 20]; test_failed = 0; disp(' =============== TEST_WIGERVILLEDIST =============='); for ii = 1: length(Lr) L = Lr(ii); for n = 1:4 if (n==1) type1 = 'auto'; type2 = 'real'; f = tester_rand(L,1); g = f; elseif (n==2) type1 = 'auto'; type2 = 'complex'; f = tester_crand(L,1); g = f; elseif (n==3) type1 = 'cross'; type2 = 'real'; f = tester_rand(L,1); g = tester_rand(L,1); elseif (n==4) type1 = 'cross'; type2 = 'complex'; f = tester_crand(L,1); g = tester_crand(L,1); end r1 = ref_wignervilledist(f,g); r2 = wignervilledist(f,g); res = norm(r1-r2); [test_failed, fail] = ltfatdiditfail(res, test_failed); s = sprintf('DWVD %3s %3s L:%3i %0.5g %s', type1, type2, L, res, fail); disp(s); end end end %-*- texinfo -*- %@deftypefn {Function} test_wignervilledist %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_wignervilledist.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ref_dftiv_1.m0000664000175000017500000000237412612404256016571 0ustar susnaksusnakfunction c=ref_dftiv_1(f) %-*- texinfo -*- %@deftypefn {Function} ref_dftiv_1 %@verbatim %REF_DFT_1 Reference DFTIV by quadrupling % Usage: c=ref_dftii_1(f); % % REF_DFTIV_1(f) computes a DFTIV of f by upsampling f and inserting zeros % at the even positions, and then doubling this signal %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dftiv_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); flong=zeros(4*L,W); flong(2:2:2*L,:)=f; fflong=fft(flong)/sqrt(L); c=fflong(2:2:2*L,:); ltfat/inst/private/test_wtfft_pr.m0000664000175000017500000000454112612404256017271 0ustar susnaksusnakfunction test_failed = test_wtfft_pr %-*- texinfo -*- %@deftypefn {Function} test_wtfft_pr %@verbatim %TEST_COMP_FWT_ALL % % Checks perfect reconstruction of the wavelet transform % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_wtfft_pr.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed = 0; load vonkoch; f=vonkoch;f=f'; %f = 0:6; %f = flipud(f'); %f = ones(7,1); %f = randn(32,1); J = 7; w = fwtinit({'dden',3}); %[w.h,w.g,abase]=wfilt_hden(1); c2 = fwt(f,w,J); fhat2 = ifwt(c2,w,J,length(f)); [h,a] = wfbtmultid({w,J},'ana'); [g,a] = wfbtmultid({w,J},'syn'); figure(3);freqzfb(h,length(f)); figure(4);freqzfb(g,length(f)); H = freqzfb(h,filterbanklength(length(f),a)); G = freqzfb(g,filterbanklength(length(f),a)); c1 = wtfft(f,H,a); figure(2);clf;plotwavc(c1); fhat = iwtfft(c1,G,a,length(f)); figure(1);clf;stem([f,fhat,fhat2]); legend({'orig','iwtfft'}); title(sprintf('norm(f-fhat)=%d',norm(f-fhat2))); c2form = cell(numel(c2)-(length(w.h)-2),1); c2form{1} = c2{1}; cSformIdx = 2; for jj=2:J+1 for ii=1:length(w.h)-1 c2form{cSformIdx} = c2{jj,ii}; cSformIdx=cSformIdx+1; end end figure(5); printCoeffs( c1,c2form); function printCoeffs( x,y) [J,N1] = size(x); for j=1:J subplot(J,1,j); % err = x{j}(:) - y{j}(:); stem([x{j}(:),y{j}(:)]); lh = line([0 length(x{j})],[eps eps]); set(lh,'Color',[1 0 0]); lh =line([0 length(x{j})],[-eps -eps]); set(lh,'Color',[1 0 0]); end function coefs = coefMatToLTFAT(C,S,lo_r,hi_r,J) coefs = cell(J+1,1); coefs{1,1} = appcoef(C,S,lo_r,hi_r,J); for j=1:J [coefs{end-j+1}] = detcoef(C,S,j); end ltfat/inst/private/ref_dgt_6.m0000664000175000017500000000347312612404256016241 0ustar susnaksusnakfunction coef=ref_dgt_6(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dgt_6 %@verbatim %REF_DGT_6 DGT algorithm 6 % % This algorithm assumes an FIR window. % % This algorithm uses OLA to compute the small convolution %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgt_6.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); Lg=size(g,1); N=L/a; b=L/M; [c,h_a,h_m]=gcd(-a,M); p=a/c; q=M/c; d=N/q; w=zeros(M,N); gwork=fir2long(g,L); % As above, but the inner convolution is now explicitly expressed for r=0:c-1 for l=0:q-1 for u=0:q-1 for k=0:p-1 psi=zeros(d,1); phi=zeros(d,1); for s=0:d-1 psi(s+1)=f(mod(r+k*M+s*p*M-l*h_a*a,L)+1); end; for s=0:d-1 offset=r+k*q*c-u*p*c; phi(s+1)=gwork(mod(offset+s*p*q*c,L)+1); end; innerconv = pconv(psi,phi,'r'); for s=0:d-1 w(r+l*c+1,mod(u+s*q-l*h_a,N)+1)=w(r+l*c+1,mod(u+s*q-l*h_a,N)+1)+innerconv(s+1); end; end; end; end; end; coef=fft(w); ltfat/inst/private/ref_fftreal.m0000664000175000017500000000214012612404256016647 0ustar susnaksusnakfunction c=ref_fftreal(f) %-*- texinfo -*- %@deftypefn {Function} ref_fftreal %@verbatim %REF_FFTREAL Reference FFTREAL % % FFTREAL is computed by doing an FFT, and keeping only the positive % frequencies. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_fftreal.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); c=fft(f); c=c(1:floor(L/2)+1,:); ltfat/inst/private/test_spread.m0000664000175000017500000001046612612404256016717 0ustar susnaksusnakfunction test_failed=test_spread %-*- texinfo -*- %@deftypefn {Function} test_spread %@verbatim %TEST_SPREAD Test spreading function. % % This script runs a throrough test of the SPREADOP routine, % testing it on a range of input parameters. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_spread.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . global LTFAT_TEST_TYPE; disp(' =============== TEST_SPREAD ================'); disp('--- Used subroutines ---'); which comp_col2diag Lr=[12, 13 ]; test_failed=0; condNoLim.('single') = 100; condNoLim.('double') = 100; for ii=1:length(Lr); L=Lr(ii); spfraction=.5; for rtype=1:2 if rtype==1 rname='REAL '; else rname='CMPLX'; end; for sptype=1:2 if sptype==1 spname='FULL '; else spname='SPARSE'; if ~strcmpi(LTFAT_TEST_TYPE,'double') disp(sprintf('Skipping. Cannot work with sparse matrices of type %s.',LTFAT_TEST_TYPE)); break; end end; condNo = 1e10; while condNo>condNoLim.(LTFAT_TEST_TYPE) if rtype==1 if sptype==1 coef=tester_rand(L,L); T=tester_rand(L,L); coef2=tester_rand(L,L); else coef=tester_sprand(L,L,spfraction); T=tester_sprand(L,L,spfraction); coef2=tester_sprand(L,L,spfraction); end; else if sptype==1 coef=tester_crand(L,L); T=tester_crand(L,L); coef2=tester_crand(L,L); else coef=tester_sprand(L,L,spfraction); T=tester_sprand(L,L,spfraction); coef2=tester_sprand(L,L,spfraction); end; end; coeftmp=ifft(full(coef))*L; % The following matrix is inverted in spreadinv. We want a nicer cond % number in order not to fail Ttmp=comp_col2diag(coeftmp); condNo = cond(Ttmp); end for W=1:3 if rtype==1 f=tester_rand(L,W); else f=tester_crand(L,W); end; % ---------- Reference testing ------------ fs=spreadop(f,coef); fs2=ref_spreadop(f,coef,1); fsdiff=fs-fs2; res=norm(fsdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REF %s %s L:%3i W:%2i %0.5g %s',rname,spname,L,W,res,fail); disp(s) % -------- Inversion testing ------------- r=spreadinv(fs,coef); rdiff=f-r; res=norm(rdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('INV %s %s L:%3i W:%2i %0.5g %s',rname,spname,L,W,res,fail); disp(s) % -------- Twisted convolution ------------------- f1=spreadop(spreadop(f,coef2),coef); f2=spreadop(f,tconv(coef,coef2)); rdiff=f1-f2; res=norm(rdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('TWI %s %s L:%3i W:%2i %0.5g %s',rname,spname,L,W,res,fail); disp(s) % -------- Spreading function --------------------- coef=spreadfun(T); rdiff=T*f-spreadop(f,coef); res=norm(rdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('FUN %s %s L:%3i W:%2i %0.5g %s',rname,spname,L,W,res,fail); disp(s) % -------- Adjoint operator ----------------------- cadj=spreadadj(coef); rdiff=T'*f-spreadop(f,cadj); res=norm(rdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('ADJ %s %s L:%3i W:%2i %0.5g %s',rname,spname,L,W,res,fail); disp(s) end; end; end; end; ltfat/inst/private/ref_irdgt_1.m0000664000175000017500000000237712612404256016571 0ustar susnaksusnakfunction f=ref_irdgt_1(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_irdgt_1 %@verbatim %REF_IRDGT_1 Reference Inverse Real DGT by fac. and IRDFT % Usage: c=ref_rdgt_1(f,g,a,M); % % Compute the factorization and use IRDFT %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_irdgt_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); R=size(g,2); W=size(c,2); %M=L/b; N=L/a; % Apply ifft to the coefficients. c=ref_irdft(reshape(c,M,N*R*W)); gf = comp_wfac(g,a,M); f = comp_idgt_fw(c,gf,L,a,M); ltfat/inst/private/test_wfbt2filterbank.m0000664000175000017500000001406612612404256020527 0ustar susnaksusnakfunction test_failed=test_wfbt2filterbank %-*- texinfo -*- %@deftypefn {Function} test_wfbt2filterbank %@verbatim %TEST_FILTERBANK test the equivalence of wfbt anf filterbank % Usage: test_wfbt2filterbank() % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_wfbt2filterbank.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp(' =============== TEST_WFBT2FILTERBANK ==========='); test_failed=0; L = [ 135, 211]; W = [1,2,3]; W = 1; gt = {}; gt{1} = {'db4',1,'dwt'}; gt{2} = {'db4',4,'full'}; gt{3} = {{'ana:spline4:4',3,'dwt'},{'syn:spline4:4',3,'dwt'}}; gt{4} = wfbtinit(gt{2}); gt{4} = wfbtremove(3,0,gt{4}); gt{4} = wfbtremove(3,1,gt{4}); gt{5} = {{'ana:symorth3',3,'dwt'},{'ana:symorth3',3,'dwt'}}; % This case tests different filters in nodes wt2 = wfbtinit({'db3',1}); wt2 = wfbtput(1,1,'db10',wt2); gt{5} = wt2; scaling = {'scale','sqrt','noscale'}; scalingInv = scaling(end:-1:1); crossoverval = 10000; for hh=1:2 if hh==1 testWhat = 'wfbt'; elseif hh==2 testWhat = 'wpfbt'; end fprintf(' =============== Testing %s ===========\n',testWhat); for jj=1:numel(gt) for ww=1:numel(W) for ii=1:numel(L) f = tester_rand(L(ii),1); gttmp = gt(jj); if isempty(gttmp{1}) continue; end if iscell(gt{jj}) && iscell(gt{jj}{1}) gttmp = gt{jj}{1}; else gttmp = gttmp{1}; end if strcmp(testWhat,'wfbt') refc = wfbt(f,gttmp); [g,a] = wfbt2filterbank(gttmp); elseif strcmp(testWhat,'wpfbt') refc = wpfbt(f,gttmp); [g,a] = wpfbt2filterbank(gttmp); end c = filterbank(f,g,a,'crossover',1); err = norm(cell2mat(c)-cell2mat(refc)); [test_failed,fail]=ltfatdiditfail(err,test_failed); if ~isstruct(gt{jj}) fprintf('FILT %d, COEF, FFT L= %d, W= %d, err=%.4e %s \n',jj,L(ii),W(ww),err,fail); else fprintf('FILT %d, COEF, FFT L= %d, W= %d, err=%.4e %s\n',jj,L(ii),W(ww),err,fail); end; c = filterbank(f,g,a,'crossover',crossoverval); err = norm(cell2mat(c)-cell2mat(refc)); [test_failed,fail]=ltfatdiditfail(err,test_failed); if ~isstruct(gt{jj}) fprintf('FILT %d, COEF, TD L= %d, W= %d, err=%.4e %s \n',jj,L(ii),W(ww),err,fail); else fprintf('FILT %d, COEF, TD L= %d, W= %d, err=%.4e %s\n',jj,L(ii),W(ww),err,fail); end; if iscell(gt{jj}) && iscell(gt{jj}{2}) gttmp = gt{jj}{2}; end if strcmp(testWhat,'wfbt') [g,a] = wfbt2filterbank(gttmp); elseif strcmp(testWhat,'wpfbt') [g,a] = wpfbt2filterbank(gttmp); end fhat = ifilterbank(refc,g,a,L(ii),'crossover',1); err = norm(fhat-f); [test_failed,fail]=ltfatdiditfail(err,test_failed); if ~isstruct(gt{jj}) fprintf('FILT %d, INV, FFT L= %d, W= %d, err=%.4e %s \n',jj,L(ii),W(ww),err,fail); else fprintf('FILT %d, INV, FFT L= %d, W= %d, err=%.4e %s\n',jj,L(ii),W(ww),err,fail); end; fhat = ifilterbank(refc,g,a,L(ii),'crossover',crossoverval); err = norm(fhat-f); [test_failed,fail]=ltfatdiditfail(err,test_failed); if ~isstruct(gt{jj}) fprintf('FILT %d, INV, TD L= %d, W= %d, err=%.4e %s \n',jj,L(ii),W(ww),err,fail); else fprintf('FILT %d, INV, TD L= %d, W= %d, err=%.4e %s\n',jj,L(ii),W(ww),err,fail); end; for scIdx = 1:numel(scaling) gttmp = gt(jj); if iscell(gt{jj}) && iscell(gt{jj}{1}) gttmp = gt{jj}{1}; else gttmp = gttmp{1}; end if strcmp(testWhat,'wfbt') urefc = uwfbt(f,gttmp,scaling{scIdx}); [g,a] = wfbt2filterbank(gttmp,scaling{scIdx}); elseif strcmp(testWhat,'wpfbt') urefc = uwpfbt(f,gttmp,scaling{scIdx}); [g,a] = wpfbt2filterbank(gttmp,scaling{scIdx}); end uc = ufilterbank(f,g,a,'crossover',crossoverval); err = norm(uc-urefc); [test_failed,fail]=ltfatdiditfail(err,test_failed); if ~isstruct(gt{jj}) fprintf('FILT %d, %s, COEF, FFT, UNDEC, L= %d, W= %d, err=%.4e %s \n',jj,scaling{scIdx},L(ii),W(ww),err,fail); else fprintf('FILT %d, %s, COEF, FFT, UNDEC, L= %d, W= %d, err=%.4e %s\n',jj,scaling{scIdx},L(ii),W(ww),err,fail); end; if iscell(gt{jj}) && iscell(gt{jj}{2}) gttmp = gt{jj}{2}; end if strcmp(testWhat,'wfbt') [g,a] = wfbt2filterbank(gttmp); elseif strcmp(testWhat,'wpfbt') [g,a] = wpfbt2filterbank(gttmp); end g = comp_filterbankscale(g,a,scalingInv{scIdx}); fhat = ifilterbank(urefc,g,ones(numel(g),1),L(ii),'crossover',crossoverval); err = norm(fhat-f); [test_failed,fail]=ltfatdiditfail(err,test_failed); if ~isstruct(gt{jj}) fprintf('FILT %d, %s, INV, FFT, UNDEC, L= %d, W= %d, err=%.4e %s \n',jj,scaling{scIdx},L(ii),W(ww),err,fail); else fprintf('FILT %d, %s INV, FFT, UNDEC, L= %d, W= %d, err=%.4e %s\n',jj,scaling{scIdx},L(ii),W(ww),err,fail); end; end end end end end end ltfat/inst/private/ref_pfilt.m0000664000175000017500000000775012612404256016356 0ustar susnaksusnakfunction h=ref_pfilt(f,g,a) %-*- texinfo -*- %@deftypefn {Function} ref_pfilt %@verbatim %REF_PFILT Reference pfilt handling structs % Usage: h=pfilt(f,g); % h=pfilt(f,g,a,dim); % % pfilt(f,g) applies the filter g to the input f. If f is a % matrix, the filter is applied along each column. % % pfilt(f,g,a) does the same, but downsamples the output keeping only % every a'th sample (starting with the first one). % % pfilt(f,g,a,dim) filters along dimension dim. The default value of % [] means to filter along the first non-singleton dimension. % % The filter g can be a vector, in which case the vector is treated % as a zero-delay FIR filter. % % The filter g can be a cell array. The following options are % possible: % % If the first element of the cell array is the name of one of the % windows from FIRWIN, the whole cell array is passed onto % FIRFILTER. % % If the first element of the cell array is 'bl', the rest of the % cell array is passed onto BLFILTER. % % If the first element of the cell array is 'pgauss', 'psech', % the rest of the parameters is passed onto the respective % function. Note that you do not need to specify the length L. % % The coefficients obtained from filtering a signal f by a filter g are % defined by % % L-1 % c(n+1) = sum f(l+1) * g(an-l+1) % l=0 % % where an-l is computed modulo L. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_pfilt.html} %@seealso{pconv} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<3 a=1; end; [L,W]=size(f); l=(0:L-1).'/L; if isstruct(g) if isfield(g,'h') g_time=circshift(postpad(g.h,L),g.offset).*exp(2*pi*1i*(round(g.fc*L/2))*l); G=fft(g_time); elseif isfield(g,'H') G=circshift(postpad(g.H(L),L),g.foff(L)).*exp(-2*pi*1i*round(g.delay)*l); else error('%s: Unknown filter definition.',upper(mfilename)); end; else G=fft(fir2long(g,L)); end; if numel(a) > 1 % This is possibly a fractional subsampling afrac = a(1)/a(2); if a(1) ~= L error('%s: The length in a(1) is not equal to L.',upper(mfilename)); end N = L/afrac; if abs(N-round(N))>1e-5 error('%s: Output length is not integer.',upper(mfilename)); else N = round(N); end foff = g.foff(L); h=zeros(N,W,assert_classname(f)); for w=1:W h(:,w) = blfilt(f(:,w),G,N,foff,afrac); if isstruct(g) && isfield(g,'realonly') && g.realonly G2 = involute(G); supp = numel(g.H(L)); foff2 = -L+mod(L-foff-supp,L)+1; h(:,w) = (h(:,w) + blfilt(f(:,w),G2,N,foff2,afrac))/2; end; end; else % This is regular subsampling case if isstruct(g) && isfield(g,'realonly') && g.realonly G=(G+involute(G))/2; end; N=L/a; h=zeros(N,W,assert_classname(f)); for w=1:W F=fft(f(:,w)); h(:,w)=ifft(sum(reshape(F.*G,N,a),2))/a; end; end function h = blfilt(f,G,N,foff,afrac) L = size(f,1); align = foff - floor(foff/N)*N; F = circshift(fft(f).*G,-foff); F = postpad(F,ceil(L/N)*N); F = circshift(F,align); F = sum(reshape(F,N,numel(F)/N),2); h = ifft(F)/afrac; ltfat/inst/private/ref_dgt_fw_time.m0000664000175000017500000000725012612404256017523 0ustar susnaksusnakfunction cout=ref_dgt_fw_time(f,gf,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dgt_fw_time %@verbatim %COMP_DGT_FW Full-window factorization of a Gabor matrix. % Usage: c=comp_dgt_fw(f,gf,a,M); % % This should be an exact copy of the comp_dgt_fw.m file in the comp/ % subdirectory in the toolbox. It is intended for timing when the original % file is masked by an oct/mex implementation. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgt_fw_time.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author : Peter L. Soendergaard. debug=0; if debug tic; end; L=size(f,1); W=size(f,2); LR=prod(size(gf)); R=LR/L; N=L/a; b=L/M; [c,h_a,h_m]=gcd(a,M); h_a=-h_a; p=a/c; q=M/c; d=N/q; ff=zeros(p,q*W,c,d); if debug disp('Initialization done'); a M L W toc; tic; end; if p==1 % --- integer oversampling --- if (c==1) && (d==1) && (W==1) && (R==1) % --- Short time Fourier transform of single signal --- % This is used for spectrograms of short signals. ff(1,:,1,1)=f(:); else for s=0:d-1 for r=0:c-1 for l=0:q-1 ff(1,l+1:q:W*q,r+1,s+1)=f(r+s*M+l*c+1,:); end; end; end; end; else % --- rational oversampling --- % Set up the small matrices % The r-loop (runs up to c) has been vectorized for w=0:W-1 for s=0:d-1 for l=0:q-1 for k=0:p-1 ff(k+1,l+1+w*q,:,s+1)=f((1:c)+mod(k*M+s*p*M-l*h_a*a,L),w+1); end; end; end; end; end; if debug disp('First FAC done.'); toc; tic; end; % This version uses matrix-vector products and ffts % fft them if d>1 ff=fft(ff,[],4); end; if debug disp('FFT done'); toc; tic; end; C=zeros(q*R,q*W,c,d); for r=0:c-1 for s=0:d-1 GM=reshape(gf(:,r+s*c+1),p,q*R); FM=reshape(ff(:,:,r+1,s+1),p,q*W); C(:,:,r+1,s+1)=GM'*FM; end; end; if debug disp('MatMul done'); toc; tic; end; % Inverse fft if d>1 C=ifft(C,[],4); end; if debug disp('IFFT done'); toc; tic; end; % Place the result cout=zeros(M,N,R,W); if p==1 % --- integer oversampling --- if (c==1) && (d==1) && (W==1) && (R==1) % --- Short time Fourier transform of single signal --- % This is used for spectrograms of short signals. for l=0:q-1 cout(l+1,mod((0:q-1)+l,N)+1,1,1)=C(:,l+1,1,1); end; else % The r-loop (runs up to c) has been vectorized for rw=0:R-1 for w=0:W-1 for s=0:d-1 for l=0:q-1 for u=0:q-1 cout((1:c)+l*c,mod(u+s*q+l,N)+1,rw+1,w+1)=C(u+1+rw*q,l+1+w*q,:,s+1); end; end; end; end; end; end; else % Rational oversampling % The r-loop (runs up to c) has been vectorized for rw=0:R-1 for w=0:W-1 for s=0:d-1 for l=0:q-1 for u=0:q-1 cout((1:c)+l*c,mod(u+s*q-l*h_a,N)+1,rw+1,w+1)=C(u+1+rw*q,l+1+w*q,:,s+1); end; end; end; end; end; end; if debug disp('Last FAC done'); toc; tic; end; cout=reshape(cout,M,N*W*R); function r=mymod(x,y) r=x-y*floor(x/y); ltfat/inst/private/test_ufwt.m0000664000175000017500000001214312612404256016420 0ustar susnaksusnakfunction test_failed = test_ufwt(verbose) %-*- texinfo -*- %@deftypefn {Function} test_ufwt %@verbatim %TEST_COMP_FWT_ALL % % Checks perfect reconstruction of the wavelet transform of different % filters % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_ufwt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('========= TEST UFWT ============'); global LTFAT_TEST_TYPE; tolerance = 1e-8; if strcmpi(LTFAT_TEST_TYPE,'single') tolerance = 1e-5; end test_failed = 0; if(nargin>0) verbose = 1; which comp_ufwt -all which comp_iufwt -all else verbose = 0; end % curDir = pwd; % mexDir = [curDir(1:strfind(pwd,'\ltfat')+5),'\mex']; % % rmpath(mexDir); % which comp_fwt_all % addpath(mexDir) % which comp_fwt_all type = {'undec'}; ext = {'per'}; prefix = 'wfilt_'; test_filters = { {'db',1} {'db',3} {'db',10} {'spline',4,4} %{'lemaire',80} % not exact reconstruction {'hden',3} % only one with 3 filters and different %subsampling factors, not working {'algmband',2} % 4 filters, subsampling by the factor of 4!, really long identical lowpass filter %{'symds',1} {'algmband',1} % 3 filters, sub sampling factor 3, even length {'sym',4} {'sym',9} %{'symds',2} % {'symds',3} % {'symds',4} % {'symds',5} {'spline',3,5} {'spline',3,11} %{'spline',11,3} % error too high %{'maxflat',2} %{'maxflat',11} %{'optfs',7} % bad precision of filter coefficients %{'remez',20,10,0.1} % no perfect reconstruction {'dden',1} {'dden',2} % {'dden',3} {'dden',4} {'dden',5} % {'dden',6} {'dgrid',1} {'dgrid',2} {'dgrid',3} %{'algmband',1} {'mband',1} {'symorth',1} {'symtight',2} %{'hden',3} %{'hden',2} %{'hden',1} %{'algmband',2} %{'apr',1} % complex filter values, odd length filters, no perfect reconstruction }; %ext = {'per','zpd','sym','symw','asym','asymw','ppd','sp0'}; scaling = {'scale','sqrt','noscale'}; scalingInv = scaling(end:-1:1); J = 4; %testLen = 10*2^J-1;%(2^J-1); testLen = 53; for scIdx = 1:numel(scaling) for extIdx=1:length(ext) %for inLenRound=0:2^J-1 for inLenRound=0:0 %f = randn(14576,1); f = tester_rand(testLen+inLenRound,1); %f = 1:testLen-1;f=f'; %f = 0:30;f=f'; % multiple channels %f = [2*f,f,0.1*f]; for typeIdx=1:length(type) typeCur = type{typeIdx}; extCur = ext{extIdx}; for tt=1:length(test_filters) actFilt = test_filters{tt}; %fname = strcat(prefix,actFilt{1}); %w = fwtinit(test_filters{tt}); for jj=1:J if verbose, fprintf('J=%d, filt=%s, inLen=%d\n',jj,actFilt{1},length(f)); end; [c,info] = ufwt(f,test_filters{tt},jj,scaling{scIdx}); %[cvec ,Lc] = cell2pack(c); %c = pack2cell(cvec,Lc); fhat = iufwt(c,test_filters{tt},jj,scalingInv{scIdx}); err = norm(f-fhat,'fro'); [test_failed,fail]=ltfatdiditfail(err,test_failed,tolerance); if(~verbose) fprintf('J=%d, %5.5s, %s, L=%d, err=%.4e %s \n',jj,actFilt{1},scaling{scIdx},length(f),err,fail); end if strcmpi(fail,'FAILED') if verbose fprintf('err=%d, J=%d, filt=%s, inLen=%d',err,jj,actFilt{1},testLen+inLenRound); figure(1);clf;stem([f,fhat]); figure(2);clf;stem([f-fhat]); break; end end fhat2 = iufwt(c,info); err = norm(f-fhat2,'fro'); [test_failed,fail]=ltfatdiditfail(err,test_failed,tolerance); fprintf('INFO J=%d, %5.5s, %s, L=%d, err=%.4e %s \n',jj,actFilt{1},scaling{scIdx},length(f),err,fail); end if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end end ltfat/inst/private/test_gga.m0000664000175000017500000000364112612404256016174 0ustar susnaksusnakfunction test_failed=test_gga disp(' =============== TEST_GGA ================'); test_failed=0; %-*- texinfo -*- %@deftypefn {Function} test_gga %@verbatim % Goertzel algorithm has a bad precision for larger L. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_gga.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . global LTFAT_TEST_TYPE; tolerance = 2e-10; if strcmpi(LTFAT_TEST_TYPE,'single') tolerance = 9e-3; end L = 36; W = 17; f=tester_crand(L,W); res = norm(fft(cast(f,'double'))-gga(f,linspace(0,1-1/L,L))); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); fprintf('RES 1 cols: L:%3i, W:%3i %s\n',L,W,fail); res = norm(fft(cast(f,'double'),[],2)-gga(f,linspace(0,1-1/W,W),[],2)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); fprintf('RES 1 rows: L:%3i, W:%3i %s\n',L,W,fail); res = norm(fft(cast(f,'double'),2*L)-gga(f,linspace(0,1-0.5/L,2*L))); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); fprintf('RES 1/2 cols: L:%3i, W:%3i %s\n',L,W,fail); res = norm(fft(cast(f,'double'),5*L)-gga(f,linspace(0,1-0.2/L,5*L))); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); fprintf('RES 1/5 cols: L:%3i, W:%3i %s\n',L,W,fail); ltfat/inst/private/test_argfirwin.m0000664000175000017500000000330012612404256017416 0ustar susnaksusnakfunction test_failed = test_argfirwin test_failed = 0; disp('---------Testing arg_firwin---------'); %-*- texinfo -*- %@deftypefn {Function} test_argfirwin %@verbatim % This test checks wheter all options from arg_firwin are actually % treated in firwin. % This is necessary as firwin itself does not use arg_firwin % Also tests for duplicates %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_argfirwin.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Get window types g = getfield(getfield(arg_firwin,'flags'),'wintype'); for ii=1:numel(g) tryfailed = 0; fprintf('Testing %12s:',g{ii}); try h = firwin(g{ii},64); catch test_failed = test_failed + 1; tryfailed = 1; fprintf('FAILED'); end if ~tryfailed fprintf('SUCCESS'); end if(sum(strcmp(g{ii},g))>1) fprintf(' has DUPLICATES'); end fprintf('\n'); end ltfat/inst/private/ref_gabmulappr_1.m0000664000175000017500000000755112612404256017611 0ustar susnaksusnakfunction sym=ref_gabmulappr_1(T,p2,p3,p4,p5); %-*- texinfo -*- %@deftypefn {Function} ref_gabmulappr_1 %@verbatim %GABMULAPPR_1 Best Approximation by a Gabor multiplier. % Usage: sym=gabmulappr(T,a,M); % sym=gabmulappr(T,g,a,M); % sym=gabmulappr(T,ga,gs,a,M); % % Input parameters: % T : matrix to be approximated % g : analysis/synthesis window % ga : analysis window % gs : synthesis window % a : Length of time shift. % M : Number of channels. % % Output parameters: % sym : symbol % % GABMULAPPR(T,g,a,M) will calculate the best approximation of the given % matrix T in the frobenius norm by a Gabor multiplier determined by the % symbol sym over the rectangular time-frequency lattice determined by a % and M. The window g will be used for both analysis and synthesis. % IMPORTANT: The chosen Gabor system has to be a frame sequence! % % GABMULAPPR(T,a,M) will do the same using an optimally concentrated, % tight Gaussian as window function. % % GABMULAPPR(T,gs,ga,a) will do the same using the window ga for analysis % and gs for synthesis. % % % % References: % P. Balazs. Hilbert-Schmidt operators and frames - classification, best % approximation by multipliers and algorithms. International Journal of % Wavelets, Multiresolution and Information Processing, 6:315 - 330, % 2008. % % P. Balazs. Basic definition and properties of Bessel multipliers. % Journal of Mathematical Analysis and Applications, 325(1):571-585, % January 2007. % % H. G. Feichtinger, M. Hampejs, and G. Kracher. Approximation of % matrices by Gabor multipliers. IEEE Signal Procesing Letters, % 11(11):883-886, 2004. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_gabmulappr_1.html} %@seealso{gabmul, demo_gabmulappr} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: P. Balazs (XXL) % ---------- Verify the input ----------------- error(nargchk(3,5,nargin)); L=size(T,1); if size(T,2)~=L error('T must be square.'); end; if nargin==3 % Usage: sym=gabmulappr(T,a,M); a=p2; M=p3; ga=gabtight(a,M,L); gs=ga; end; if nargin==4 % Usage: sym=gabmulappr(T,g,a,M); ga=p2; gs=p2; a=p3; M=p4; end; if nargin==5 % Usage: sym=gabmulappr(T,ga,gm,a,M); ga=p2; gs=p3; a=p4; M=p5; end; N=L/a; b=L/M; if size(ga,2)>1 if size(ga,1)>1 error('Input g/ga must be a vector'); else % ga was a row vector. ga=ga(:); end; end; if size(gs,2)>1 if size(gs,1)>1 error('Input g/gs must be a vector'); else % gs was a row vector. gs=gs(:); end; end; % -------- Algorithm starts here -------------------------- % Calculate the lower symbol. This is basically linear algebra part1=reshape(dgt(T',ga,a,M),M*N,L); part2=reshape(dgt(part1',gs,a,M),M*N,M*N).'; lowsym = reshape(diag(part2),M,N); % Change from lower symbol to upper symbol. This is a quick calculation % of a 2D convolution. Gramfirst = conj(dgt(ga,ga,a,M)).*dgt(gs,gs,a,M); Gramfirst = fft2(Gramfirst); lowsym = fft2(lowsym); lowsym = lowsym./Gramfirst; sym = ifft2(lowsym); ltfat/inst/private/tester_crand.m0000664000175000017500000000230712612404256017052 0ustar susnaksusnakfunction f=tester_crand(p1,p2); %-*- texinfo -*- %@deftypefn {Function} tester_crand %@verbatim %CRAND Random complex numbers for testing. % Usage: f=tester_crand(p1,p2); %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/tester_crand.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . global LTFAT_TEST_TYPE if isempty(LTFAT_TEST_TYPE) LTFAT_TEST_TYPE='double'; end; f=rand(p1,p2)-.5+i*(rand(p1,p2)-.5); if strcmp(LTFAT_TEST_TYPE,'single') f=single(f); end; ltfat/inst/private/test_signals.m0000664000175000017500000000426312612404256017077 0ustar susnaksusnakfunction test_failed=test_signals; %-*- texinfo -*- %@deftypefn {Function} test_signals %@verbatim %TEST_SIGNALS % % The script ensures that all files are correctly included by loading % the singals and checking their sizes. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_signals.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp(' =============== TEST_SIGNALS ==========='); test_failed=0; [test_failed,fail]=ltfatdiditfail(numel(bat)-400,test_failed); disp(['SIGNALS BAT ',fail]); [test_failed,fail]=ltfatdiditfail(numel(batmask)-1600,test_failed); disp(['SIGNALS BATMASK ',fail]); [test_failed,fail]=ltfatdiditfail(numel(greasy)-5880,test_failed); disp(['SIGNALS GREASY ',fail]); [test_failed,fail]=ltfatdiditfail(numel(linus)-41461,test_failed); disp(['SIGNALS LINUS ',fail]); [test_failed,fail]=ltfatdiditfail(numel(gspi)-262144,test_failed); disp(['SIGNALS GSPI ',fail]); [test_failed,fail]=ltfatdiditfail(numel(traindoppler)-157058,test_failed); disp(['SIGNALS TRAINDOPPLER',fail]); [test_failed,fail]=ltfatdiditfail(numel(otoclick)-2210,test_failed); disp(['SIGNALS OTOCLICK ',fail]); [test_failed,fail]=ltfatdiditfail(numel(cameraman)-65536,test_failed); disp(['SIGNALS CAMERAMAN ',fail]); [test_failed,fail]=ltfatdiditfail(numel(cocktailparty)-363200,test_failed); disp(['SIGNALS COCKTAILPARTY ',fail]); [test_failed,fail]=ltfatdiditfail(numel(lichtenstein)-262144*3,test_failed); disp(['SIGNALS LICHTENSTEIN ',fail]); ltfat/inst/private/ref_edgt.m0000664000175000017500000000235012612404256016152 0ustar susnaksusnakfunction c=ref_edgt(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_edgt %@verbatim %REF_EDGT Reference Even Discrete Gabor transform % Usage c=ref_edgt(f,g,a,M); % % The input window must be odd-centered. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_edgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); N=L/a; M=L/b; F=zeros(L,M*N); l=(0:L-1)'; for n=0:N-1 for m=0:M-1 F(:,1+m+n*M)=exp(2*pi*i*m.*(l+.5)*b/L).*circshift(g,n*a); end; end; c=F'*f; ltfat/inst/private/test_wfilt.m0000664000175000017500000000673612612404256016573 0ustar susnaksusnakfunction test_failed = test_wfilt() %-*- texinfo -*- %@deftypefn {Function} test_wfilt %@verbatim % This function tests if tilters provided by wfilt_* % functions indeed admit a perfect reconstruction %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_wfilt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed = 0; w = { 'algmband1' 'algmband2' 'cmband2' 'cmband3' 'cmband4' 'cmband5' 'cmband6' 'coif1' 'coif2' 'coif3' 'coif4' 'coif5' 'db1' 'db2' 'db3' 'db4' 'db5' 'db6' 'db7' 'db8' 'db9' 'db10' 'db11' 'db12' 'db13' 'db14' 'db15' 'db16' 'db17' 'db18' 'db19' 'db20' 'dden1' 'dden2' 'dden3' 'dden4' 'dden5' 'dden6' 'dgrid1' 'dgrid2' 'dgrid3' 'hden1' 'hden2' 'hden3' 'hden4' 'lemarie10' 'lemarie20' 'lemarie30' 'lemarie40' 'mband1' 'remez10:1:0.1' 'remez20:1:0.1' 'remez40:2:0.1' 'spline1:1' 'spline2:2' 'spline3:3' 'spline4:4' 'spline5:5' 'spline6:6' 'spline7:7' 'spline8:8' 'spline1:3' 'spline1:5' 'spline1:7' 'spline1:9' 'spline3:1' 'spline5:1' 'spline7:1' 'spline9:1' 'spline2:4' 'spline2:6' 'spline2:8' 'spline4:2' 'spline6:2' 'spline8:2' 'spline3:5' 'spline3:7' 'spline3:9' 'spline5:3' 'spline7:3' 'spline9:3' 'spline4:6' 'spline4:8' 'spline6:4' 'spline8:4' 'spline5:7' 'spline5:9' 'spline7:5' 'spline9:5' 'spline6:8' 'spline8:6' 'spline7:9' 'spline9:7' 'sym1' 'sym2' 'sym3' 'sym4' 'sym5' 'sym6' 'sym7' 'sym8' 'sym9' 'sym10' 'sym11' 'sym12' 'sym13' 'sym14' 'sym15' 'symdden1' 'symdden2' 'symds1' 'symds2' 'symds3' 'symds4' 'symds5' 'symorth1' 'symorth2' 'symorth3' 'symtight1' 'symtight2' 'oddevena1' 'oddevenb1' 'qshifta1' 'qshifta2' 'qshifta3' 'qshifta4' 'qshifta5' 'qshifta6' 'qshifta7' 'qshiftb1' 'qshiftb2' 'qshiftb3' 'qshiftb4' 'qshiftb5' 'qshiftb6' 'qshiftb7' 'optsyma1' 'optsyma2' 'optsyma3' 'optsymb1' 'optsymb2' 'optsymb3' 'ddena1' 'ddena2' 'ddenb1' 'ddenb2' }; globtol = 5e-8; disp('--------------TEST_WFIL-------------------'); exttype = {'per','odd','even','zero'}; L = 128; f = tester_crand(L,1); f = f/norm(f); for wfilt = w' for ext = exttype fhat = ifwt(fwt(f,wfilt{1},1,ext{1}),wfilt{1},1,L,ext{1}); res = norm(f-fhat); [test_failed,fail]=ltfatdiditfail(res,test_failed,globtol); fprintf('%s ext:%s %0.5g %s\n',wfilt{1},ext{1},res,fail); end end ltfat/inst/private/ref_nsdgt.m0000664000175000017500000000277312612404256016357 0ustar susnaksusnakfunction [c,Ls] = ref_nsdgt(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_nsdgt %@verbatim %NSDGT Non-stationary Discrete Gabor transform % Usage: c=nsdgt(f,g,a,M); % [c,Ls]=nsdgt(f,g,a,M); %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_nsdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . timepos=cumsum(a)-a(1)+1; Ls=length(f); L=nsdgtlength(Ls,a); N=numel(g); F=zeros(L,sum(M)); % Construct the analysis operator matrix explicitly Y = 1; for n = 1:length(timepos) X = length(g{n}); win_range = mod(timepos(n)+(-floor(X/2):ceil(X/2)-1)-1,L)+1; F(win_range,Y) = fftshift(g{n}); for m = 1:M(n)-1 F(win_range,Y+m) = F(win_range,Y).*exp(2*pi*i*m*(-floor(X/2):ceil(X/2)-1)/M(n)).'; end Y=Y+M(n); end cmat=F'*f; c=mat2cell(cmat,M); ltfat/inst/private/ref_dgt.m0000664000175000017500000000275712612404256016020 0ustar susnaksusnakfunction [c]=ref_dgt(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dgt %@verbatim %REF_DGT Reference Discrete Gabor transform. % Usage: c=ref_dgt(f,g,a,M); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transpose. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . g = double(g); f = double(f); % Calculate the parameters that was not specified. L=size(g,1); b=L/M; N=L/a; W=size(f,2); R=size(g,2); % Create 2x2 grid matrix.. V=[a,0; 0,b]; % Create lattice and Gabor matrix. lat=ref_lattice(V,L); G=ref_gaboratoms(g,lat); % Apply matrix to f. c=G'*f; % reshape to correct output format. c=reshape(c,M,N,R*W); ltfat/inst/private/ref_rdft.m0000664000175000017500000000251612612404256016172 0ustar susnaksusnakfunction c=ref_rdft(f) %-*- texinfo -*- %@deftypefn {Function} ref_rdft %@verbatim %REF_RDFT Reference Real DFT % Usage: c=ref_rdft(f); % % Compute RDFT by explicit formulas. % % The transform is orthonormal %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_rdft.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); Lhalf=ceil(L/2); F=zeros(L); F(:,1)=ones(L,1); l=(0:L-1).'; for m=1:Lhalf-1 F(:,2*m)=sqrt(2)*cos(2*pi*m*l/L); F(:,2*m+1)=sqrt(2)*sin(2*pi*m*l/L); end; if mod(L,2)==0 F(:,L)=cos(pi*l); end; F=F/sqrt(L); % dot-transpose will work because F is real. c=F.'*f; ltfat/inst/private/test_purefreq.m0000664000175000017500000001607012612404256017267 0ustar susnaksusnakfunction test_failed=test_purefreq disp(' =============== TEST_PUREFREQ ================'); disp('--- Used subroutines ---'); which comp_fftreal which comp_ifftreal which comp_dct which comp_dst %-*- texinfo -*- %@deftypefn {Function} test_purefreq %@verbatim % This script test all the pure frequency routines. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_purefreq.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % This is a list or pairs. The two functions in each pair % will be evaluated with the same parameters, and the output % should be the same. ref_funs={{'ref_dcti','dcti'},... {'ref_dcti','ref_dcti_1'},... {'ref_dctii','dctii'},... {'ref_dctiii','dctiii'},... {'ref_dctii','ref_dctii_1'},... {'ref_dctiii','ref_dctiii_1'},... {'ref_dctiv','dctiv'},... {'ref_dsti','dsti'},... {'ref_dsti','ref_dsti_1'},... {'ref_dstii','dstii'},... {'ref_dstiii','dstiii'},... {'ref_dstii','ref_dstii_1'},... {'ref_dstiii','ref_dstiii_1'},... {'ref_dstiv','dstiv'},... {'ref_dft','ref_dft_1'},... {'ref_rdft','ref_rdft_1'},... {'ref_irdft','ref_irdft_1'},... }; % This is a list or pairs. The two functions in each pair will be evaluated % on purely real input with the same parameters, and the output should be % the same. ref_realfuns={{'ref_dcti','dcti'},... {'ref_dcti','ref_dcti_1'},... {'ref_dctii','dctii'},... {'ref_dctiii','dctiii'},... {'ref_dctii','ref_dctii_1'},... {'ref_dctiii','ref_dctiii_1'},... {'ref_dctiv','dctiv'},... {'ref_dsti','dsti'},... {'ref_dsti','ref_dsti_1'},... {'ref_dstii','dstii'},... {'ref_dstiii','dstiii'},... {'ref_dstii','ref_dstii_1'},... {'ref_dstiii','ref_dstiii_1'},... {'ref_dstiv','dstiv'},... {'ref_dft','ref_dft_1'},... {'ref_fftreal','fftreal'},... {'ref_rdft','ref_rdft_1'},... {'ref_irdft','ref_irdft_1'},... }; % {'ref_dftii','ref_dftii_1'},... % {'ref_dftii','ref_dftii_2'},... % {'ref_idftii','ref_idftii_1'},... % {'ref_dftiv','ref_dftiv_1'},... % {'ref_rdftiii','ref_rdftiii_1'},... % {'ref_irdftiii','ref_irdftiii_1'},... % Each row is the size of a matrix. All the functions % mentioned above will be executed with input matrixes % of sizes mentioned below. ref_sizes=[1 1;... 2 1;... 3 2;... 4 3;... 5 3 100 1]; % As ref_funs, these functions should be inverses of each other. inv_funs={{'dcti','dcti'},... {'dctii','dctiii'},... {'dctiv','dctiv'},... {'ref_dsti','ref_dsti'},... {'dstii','dstiii'},... {'dstiv','dstiv'},... {'dft','idft'},... {'ref_rdft','ref_irdft'},... }; % As ref_funs, these functions should be inverses of each other. realinv_funs={{'fftreal','ifftreal'}}; % {'ref_rdftiii','ref_irdftiii'},... % {'ref_dftii','ref_idftii'},... % {'ref_dftiii','ref_idftiii'},... % {'ref_rdftiii','ref_irdftiii'},... % {'ref_dftiv','ref_idftiv'},... % Each function in the list should be unitary. They will be tested on % matrix of sizes correspondin to the first column in ref_sizes nrm_funs={'dctii','dctiii','dctiv','ref_dft','ref_rdft'}; % ---------- reference testing -------------------- % Test that the transforms agree on values. ref_failed=0; for funpair=ref_funs for ii=1:size(ref_sizes,1); %a=tester_rand(ref_sizes(ii,:)); a=tester_crand(ref_sizes(ii,1),ref_sizes(ii,2)); c1=feval(funpair{1}{1},a); c2=feval(funpair{1}{2},a); res=norm(c1(:)-c2(:)); [ref_failed,fail]=ltfatdiditfail(res,ref_failed); s=sprintf('REF %7s L:%2i W:%2i %0.5g %s',funpair{1}{2},ref_sizes(ii,1),ref_sizes(ii,2),res,fail); disp(s) end; end; % ---------- real valued reference testing -------------------- % Test that the transforms agree on values. ref_failed=0; for funpair=ref_realfuns for ii=1:size(ref_sizes,1); a=tester_rand(ref_sizes(ii,1),ref_sizes(ii,2)); c1=feval(funpair{1}{1},a); c2=feval(funpair{1}{2},a); res=norm(c1(:)-c2(:)); [ref_failed,fail]=ltfatdiditfail(res,ref_failed); s=sprintf('REA %7s L:%2i W:%2i %0.5g %s',funpair{1}{2},ref_sizes(ii,1),ref_sizes(ii,2),res,fail); disp(s) end; end; %------------ inversion testing ----------------- % Test that the transforms are invertible inv_failed=0; for funpair=inv_funs for ii=1:size(ref_sizes,1); %a=tester_rand(ref_sizes(ii,:)); a=tester_crand(ref_sizes(ii,1),ref_sizes(ii,2)); ar=feval(funpair{1}{2},feval(funpair{1}{1},a)); res=norm(a(:)-ar(:)); [inv_failed,fail]=ltfatdiditfail(res,inv_failed); s=sprintf('INV %7s L:%2i W:%2i %0.5g %s',funpair{1}{1},ref_sizes(ii,1),ref_sizes(ii,2),res,fail); disp(s) end; end; %----------- normalization test ---------------- % Test that the transforms are orthonormal nrm_failed=0; for funname=nrm_funs for ii=1:size(ref_sizes,1); L=ref_sizes(ii,1); F=feval(funname{1},eye(L)); res=norm(F*F'-eye(L)); [nrm_failed,fail]=ltfatdiditfail(res,nrm_failed); s=sprintf('NRM %7s L:%2i %0.5g %s',funname{1},ref_sizes(ii,1),res,fail); disp(s) end; end; %------------ test fftreal inversion ---------------- % Test that the transforms are invertible realinv_failed=0; for funpair=realinv_funs for ii=1:size(ref_sizes,1); a=tester_rand(ref_sizes(ii,1),ref_sizes(ii,2)); ar=ifftreal(fftreal(a),ref_sizes(ii,1)); res=norm(a(:)-ar(:)); [realinv_failed,fail]=ltfatdiditfail(res,realinv_failed); s=sprintf('RIN %7s L:%2i W:%2i %0.5g %s',funpair{1}{1},ref_sizes(ii,1),ref_sizes(ii,2),res,fail); disp(s) end; end; %------------ test fftreal postpad ---------------- % Test that fftreal works with different lengths realpostpad_failed=0; postpad_sizes = {ref_sizes(:,1)*2, ceil(ref_sizes(:,1)/2), ceil(ref_sizes(:,1)/(3/4)) }; for ii=1:size(ref_sizes,1); a=tester_rand(ref_sizes(ii,1),ref_sizes(ii,2)); for jj=1:numel(postpad_sizes); postpad_size = postpad_sizes{jj}; ar = fftreal(a,postpad_size(ii)); ar2 = fft(a,postpad_size(ii),1); M2 = floor(postpad_size(ii)/2) + 1; ar2 = ar2(1:M2,:); res=norm(ar(:)-ar2(:)); [realpostpad_failed,fail]=ltfatdiditfail(res,realinv_failed); s=sprintf('RPOSTPAD fftreal L:%2i L2:%2i W:%2i %0.5g %s',ref_sizes(ii,1),postpad_size(ii),ref_sizes(ii,2),res,fail); disp(s) end end; test_failed=ref_failed+inv_failed+nrm_failed + realpostpad_failed; ltfat/inst/private/test_wmdct.m0000664000175000017500000000454612612404256016561 0ustar susnaksusnakfunction test_failed=test_wmdct %-*- texinfo -*- %@deftypefn {Function} test_wmdct %@verbatim % Test the algorithm using LONG windows. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_wmdct.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . which comp_dwiltiii which comp_idwiltiii disp(' =============== TEST_WMDCT ================'); Lr=[4, 6, 8,12,16,12,18,32,30]; Mr=[2, 3, 2, 3, 4, 2, 3, 4, 3]; test_failed=0; for ii=1:length(Lr); for W=1:3 for ftype=1:2 for wtype=1:2 L=Lr(ii); M=Mr(ii); a=M; if wtype==1 % Full length window g=pgauss(L); gd=wildual(g,M); wtype='LONG'; else g=firwin('sqrthann',2*M,'2'); gd=g; wtype='FIR '; end; if ftype==1 % Complex-valued test case f=tester_crand(L,W); S='CMPLX'; else % Real-valued tes f=tester_rand(L,W); S='REAL '; end; c=wmdct(f,g,M,L); a=M; c2=ref_dwiltiii(f,g,a,M); r=iwmdct(c,gd); res=norm(c(:)-c2(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REF %s %s L:%3i W:%2i a:%3i M:%3i %0.5g %s',S,wtype,L,W,a,M,res,fail); disp(s); rdiff=f-r; res=norm(rdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REC %s %s L:%3i W:%2i a:%3i M:%3i %0.5g %s',S,wtype,L,W,a,M,res,fail); disp(s); g=wilorth(M,L); c=wmdct(f,g,M); r=iwmdct(c,g); rdiff=f-r; res=norm(rdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('ORTH %s %s L:%3i W:%2i a:%3i M:%3i %0.5g %s',S,wtype,L,W,a,M,res,fail); disp(s); end; end; end; end; ltfat/inst/private/ref_pconv_ola_postpad.m0000664000175000017500000000302112612404256020735 0ustar susnaksusnakfunction h=ref_pconv_ola_postpad(f,g,Lb) %-*- texinfo -*- %@deftypefn {Function} ref_pconv_ola_postpad %@verbatim % % This function implements periodic convolution using overlap-add. The % window g is supposed to be extended by postpad, so this function % cannot do zero-delay convolution. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_pconv_ola_postpad.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=length(f); Lg=length(g); % Number of blocks Nb=L/Lb; % Length of extended block and padded g Lext=Lb+Lg; gpad=postpad(g,Lext); h=zeros(L,1); for ii=0:Nb-1 block=pconv(postpad(f(ii*Lb+1:(ii+1)*Lb),Lext),gpad); h(ii*Lb+1:(ii+1)*Lb)+=block(1:Lb); % Large block s_ii=mod(ii+1,Nb); h(s_ii*Lb+1:s_ii*Lb+Lg)+=block(Lb+1:Lext); % Small block end; ltfat/inst/private/ref_wmdct2.m0000664000175000017500000000213512612404256016430 0ustar susnaksusnakfunction c=ref_wmdct2(f,g1,g2,M1,M2); L1=size(f,1); L2=size(f,2); c=wmdct(f,g1,M1); c=reshape(c,L1,L2); c=c.'; c=wmdct(c,g2,M2); c=reshape(c,L2,L1); c=c.'; c=reshape(c,M1,L1/M1,M2,L2/M2); %-*- texinfo -*- %@deftypefn {Function} ref_wmdct2 %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_wmdct2.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ref_idgt_fb.m0000664000175000017500000000665512612404256016641 0ustar susnaksusnakfunction [f]=ref_idgt_fb(coef,g,L,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_idgt_fb %@verbatim %COMP_IDGT_FB Filter bank IDGT. % Usage: f=comp_idgt_fb(c,g,L,a,M); % % This is a computational routine. Do not call it directly. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_idgt_fb.html} %@seealso{idgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK % Calculate the parameters that was not specified. N=L/a; b=L/M; R=size(g,2); W=prod(size(coef))/(M*N*R); N=L/a; b=L/M; gl=length(g); glh=floor(gl/2); % gl-half % Apply ifft to the coefficients. coef=ifft(reshape(coef,M,N*W))*sqrt(M); coef=reshape(coef,M,N,W); % The fftshift actually makes some things easier. g=fftshift(g); g f=zeros(L,W); % Make multicolumn g by replication. gw=repmat(g,1,W); ff=zeros(gl,1); % Rotate the coefficients, duplicate them until they have same % length as g, and multiply by g. for w=1:W % ----- Handle the first boundary using periodic boundary conditions. --- for n=0:ceil(glh/a)-1 delay=mod(-n*a+glh,M); for ii=0:gl/M-1 for m=0:delay-1 ff(m+ii*M+1)=coef(M-delay+m+1,n+1,w)*g(m+ii*M+1); end; for m=0:M-delay-1 ff(m+ii*M+delay+1)=coef(m+1,n+1,w)*g(m+delay+ii*M+1); end; end; sp=mod(n*a-glh,L); ep=mod(n*a-glh+gl-1,L); % Add the ff vector to f at position sp. for ii=0:L-sp-1 f(sp+ii+1,w)+=ff(1+ii); end; for ii=0:ep f(1+ii,w)+=ff(L-sp+1+ii); end; end; % ----- Handle the middle case. --------------------- for n=ceil(glh/a):floor((L-ceil(gl/2))/a) delay=mod(-n*a+glh,M); for ii=0:gl/M-1 for m=0:delay-1 ff(m+ii*M+1)=coef(M-delay+m+1,n+1,w)*g(m+ii*M+1); end; for m=0:M-delay-1 ff(m+ii*M+delay+1)=coef(m+1,n+1,w)*g(m+delay+ii*M+1); end; end; sp=mod(n*a-glh,L); ep=mod(n*a-glh+gl-1,L); % Add the ff vector to f at position sp. for ii=0:ep-sp f(ii+sp+1,w)+=ff(ii+1); end; end; % ----- Handle the last boundary using periodic boundary conditions. --- % This n is one-indexed, to avoid to many +1 for n=floor((L-ceil(gl/2))/a)+1:N-1 delay=mod(-n*a+glh,M); for ii=0:gl/M-1 for m=0:delay-1 ff(m+ii*M+1)=coef(M-delay+m+1,n+1,w)*g(m+ii*M+1); end; for m=0:M-delay-1 ff(m+ii*M+delay+1)=coef(m+1,n+1,w)*g(m+delay+ii*M+1); end; end; sp=mod(n*a-glh,L); ep=mod(n*a-glh+gl-1,L); % Add the ff vector to f at position sp. for ii=0:L-sp-1 f(sp+ii+1,w)+=ff(1+ii); end; for ii=0:ep f(1+ii,w)+=ff(L-sp+1+ii); end; end; end; % Scale correctly. f=sqrt(M)*f; ltfat/inst/private/ref_idwiltii.m0000664000175000017500000000341712612404256017052 0ustar susnaksusnakfunction f=ref_idwiltii(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_idwiltii %@verbatim %REF_DWILTII Reference Inverse Discrete Wilson Transform type II % Usage: f=ref_idwiltii(c,g,M); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_idwiltii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Setup transformation matrix. L=size(g,1); W=size(c,2); F=zeros(L,L); N=L/a; l=(0:L-1).'; for n=0:N/2-1 % Do the unmodulated coefficient. F(:,2*M*n+1)=circshift(g,2*a*n); % m odd case OK for m=1:2:M-1 F(:,m+2*M*n+1) = sqrt(2)*sin(pi*m/M*(l+.5)).*circshift(g,2*n*a); F(:,m+2*M*n+M+1) = sqrt(2)*cos(pi*m/M*(l+.5)).*circshift(g,(2*n+1)*a); end; for m=2:2:M-1 F(:,m+2*M*n+1) = sqrt(2)*cos(pi*m/M*(l+.5)).*circshift(g,2*n*a); F(:,m+2*M*n+M+1) = sqrt(2)*sin(pi*m/M*(l+.5)).*circshift(g,(2*n+1)*a); end; if rem(M,2)==0 % Do the Nyquest wave. F(:,M+2*M*n+1) = sin(pi*(l+.5)).*circshift(g,(2*n+1)*a); else F(:,M+2*M*n+1) = sin(pi*(l+.5)).*circshift(g,2*n*a); end; end; f=F*c; ltfat/inst/private/ref_wignervilledist.m0000664000175000017500000000423012612404256020441 0ustar susnaksusnakfunction W=ref_wignervilledist(f,g) %-*- texinfo -*- %@deftypefn {Function} ref_wignervilledist %@verbatim %REF_WIGNERVILLEDIST Reference wigner-Ville distribution % Usage: W=ref_wignervilledist(f) % % REF_WIGNERVILLEDIST(f,g) computes the Wigner-Ville distribution of f and g. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_wignervilledist.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven if ~all(length(f)==length(g)) error('%s: f and g must have the same length.', upper(mfilename)); end; L = length(f); H = floor(L/2); R = zeros(L,L); W = zeros(L,L); % Compute the analytic representation of f if (nargin == 1) if isreal(f) z = fft(f); z(2:L-H) = 2*z(2:L-H); z(H+2:L) = 0; z1 = ifft(z); z2 = z1; else z1 = f; z2 = z1; end elseif (nargin == 2) if isreal(f) || isreal(g) z1 = fft(f); z1(2:L-H) = 2*z1(2:L-H); z1(H+2:L) = 0; z1 = ifft(z1); z2 = fft(g); z2(2:L-H) = 2*z2(2:L-H); z2(H+2:L) = 0; z2 = ifft(z2); else z1 = f; z2 = g; end end % Compute instantaneous autocorrelation matrix R for l = 0 : L-1; for m = -min([L-l, l, round(L/2)-1]) : min([L-l, l, round(L/2)-1]); R(mod(L+m,L)+1, l+1) = z1(mod(l+m, L)+1).*conj(z2(mod(l-m, L)+1)); end end % Compute the Wigner-Ville distribution for hh=0:L-1 for ii=0:L-1 for jj = 0:L-1 W(hh+1, ii+1) = W(hh+1, ii+1) + R(jj+1, ii+1) .* exp(-2*pi*i*hh*jj/L); end end end ltfat/inst/private/test_dwilts.m0000664000175000017500000000655212612404256016750 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} test_dwilts %@verbatim % This is currently the tester for the % new TF-transforms. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dwilts.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lr=[4, 6, 8, 12,16,12,18,32,30]; Mr=[2, 3, 2, 3, 4, 2, 3, 4, 3]; Wmax=2; ref_funs={{'ref_dwilt','ref_dwilt_1'},... {'ref_dwiltii','ref_dwiltii_1'},... {'ref_dwiltiii','ref_dwiltiii_1'},... {'ref_dwiltiv','ref_dwiltiv_1'},... }; refinv_funs={{'ref_idwilt','ref_idwilt_1'},... {'ref_idwiltii','ref_idwiltii_1'},... {'ref_idwiltiii','ref_idwiltiii_1'},... {'ref_idwiltiv','ref_idwiltiv_1'},... }; inv_funs={{'ref_dwilt','ref_idwilt'},... {'ref_dwiltii','ref_idwiltii'},... {'ref_dwiltiii','ref_idwiltiii'},... {'ref_dwiltiv','ref_idwiltiv'},... }; % ---------- reference testing -------------------- % Test that the transforms agree on values. for funpair=ref_funs for ii=1:length(Lr); for W=1:Wmax L=Lr(ii); M=Mr(ii); a=M; N=L/a; f=tester_rand(L,W); g=ref_win(funpair{1}{1},'test',L,a,M); c1=feval(funpair{1}{1},f,g,a,M); c2=feval(funpair{1}{2},f,g,a,M); res=norm(c1(:)-c2(:)); if abs(res)>1e-10 fail='FAILED'; else fail=''; end; s=sprintf('REF %10s L:%3i W:%2i a:%3i M:%3i %0.5g %s',funpair{1}{2},L,W,a,M,res,fail); disp(s) end; end; end; % ---------- reference inverse function testing --------------- % Test that the transforms agree on values. for funpair=refinv_funs for ii=1:length(Lr); for W=1:Wmax L=Lr(ii); M=Mr(ii); a=M; N=L/a; c=tester_rand(M*N,W); g=ref_win(funpair{1}{1},'test',L,a,M); f1=feval(funpair{1}{1},c,g,a,M); f2=feval(funpair{1}{2},c,g,a,M); res=norm(f1(:)-f2(:)); if abs(res)>1e-10 fail='FAILED'; else fail=''; end; s=sprintf('REF %10s L:%3i W:%2i a:%3i M:%3i %0.5g %s',funpair{1}{2},L,W,a,M,res,fail); disp(s) end; end; end; %------------ inversion testing ----------------- % Test that the transforms are invertible for funpair=inv_funs for ii=1:length(Lr); for W=1:Wmax L=Lr(ii); M=Mr(ii); a=M; N=L/a; f=tester_rand(L,W); g=ref_win(funpair{1}{1},'test',L,a,M); gamma=ref_tgabdual(funpair{1}{1},g,L,a,M); c=feval(funpair{1}{1},f,g,a,M); fr=feval(funpair{1}{2},c,gamma,a,M); res=norm(f(:)-fr(:)); [test_failed,fail]=ltfatdiditfail(nres,test_failed); if abs(res)>1e-10 fail='FAILED'; else fail=''; end; s=sprintf('INV %10s L:%3i W:%2i a:%3i M:%3i %0.5g %s',funpair{1}{1},L,W,a,M,res,fail); disp(s) end; end; end; ltfat/inst/private/ref_dgt_4.m0000664000175000017500000000405412612404256016233 0ustar susnaksusnakfunction c=ref_dgt_4(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dgt_4 %@verbatim %REF_DGT_4 DGT algorithm 4 % % This algorithm makes the r-loop be the outermost loop, in order to % reduce the size of the intermediate buffers, and hopefully better % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgt_4.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); N=L/a; b=L/M; [c,h_a,h_m]=gcd(-a,M); p=a/c; q=M/c; d=N/q; w=zeros(M,N); % This version uses matrix-vector products and ffts F=zeros(d,p,q); C=zeros(d,q,q); % Setup G before we start G=zeros(c,d,p,q); for r=0:c-1 for s=0:d-1 for k=0:p-1 for l=0:q-1 G(r+1,s+1,k+1,l+1)=sqrt(M*d)*g(mod(r+k*M-l*a+s*p*M,L)+1); end; end; end; end; G=dft(G,[],2); % Set up the matrices for r=0:c-1 for s=0:d-1 for k=0:p-1 for l=0:q-1 F(s+1,k+1,l+1)=f(mod(r+k*M+s*p*M-l*h_a*a,L)+1); end; end; end; % fft them F=dft(F,[],1); % Multiply them for s=0:d-1 GM=reshape(G(r+1,s+1,:,:),p,q); FM=reshape(F(s+1,:,:),p,q); C(s+1,:,:)=GM'*FM; end; % Inverse fft C=idft(C,[],1); % Place the result for l=0:q-1 for u=0:q-1 for s=0:d-1 w(r+l*c+1,mod(u+s*q-l*h_a,N)+1)=C(s+1,u+1,l+1); end; end; end; end; c=dft(w); ltfat/inst/private/ref_dgtns_1.m0000664000175000017500000000561612612404256016576 0ustar susnaksusnakfunction coef=ref_dgtns_1(f,gamma,V) %-*- texinfo -*- %@deftypefn {Function} ref_dgtns_1 %@verbatim %REF_DGT_1 Reference DGTNS using P.Prinz algorithm % Usage: c=ref_dgtns_1(f,gamma,V); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgtns_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . a=V(1,1); b=V(2,2); r=-V(2,1); L=size(gamma,1); M=L/b; N=L/a; W=size(f,2); c=gcd(a,M); p=a/c; q=M/c; d=N/q; if r==0 % The grid is rectangular. Call another reference algorithm. coef=zeros(M*N,W); coef(:)=ref_dgt(f,gamma,a,M); return; end; % We can now assume that the grid is truly nonseperable, % and so d>1. % Conjugate. gammac=conj(gamma); % Level 2: Block diagonalize, and use that some blocks are % the same up to permutations. p1=stridep(M,L); p2=stridep(N,M*N); % Get shift offsets for stage 2 of the algorithm. [mll,all]=shiftoffsets(a,M); % Step 1: Permute s1 = f(p1,:); % Step 2: Multiply by DG' s2=zeros(M*N,W); % Do interpreter-language-optimized indexing. [n_big,m_big]=meshgrid(0:N-1,0:b-1); base=m_big*M-n_big*a+L; base=base.'; % Work arrays. work=zeros(b,M/c*W); wk=zeros(N,b); wkrect=zeros(N,b); % Create fixed modulation matrix (Does not change with k) fixedmod=zeros(N,b); for n=0:N-1 fixedmod(n+1,:)=exp(2*pi*i*r*n/L*(0:M:L-1)); end; % This loop iterates over the number of truly different wk's. for ko=0:c-1 % Create the wk of the rectangular-grid case. wkrect(:)=gammac(mod(base+ko,L)+1); % Create wk of skewed case. wk=(fixedmod.*wkrect); % Setup work array. for l=0:M/c-1 k=ko+l*c; rowmod=exp(2*pi*i*r*(0:b-1)/b*all(l+1)).'; work(:,l*W+1:(l+1)*W)=circshift(rowmod.*s1(1+(ko+l*c)*b:(ko+l*c+1)*b,:),-mll(l+1)); end; % Do the actual multiplication, work2=wk*work; % Place the result correctly. for l=0:M/c-1 k=ko+l*c; kmod=exp(2*pi*i*r*(0:N-1)*k/L).'; colmod=exp(2*pi*i*r*(0:N-1)/b*mll(l+1)).'; doublefac=exp(-2*pi*i*r/b*all(l+1)*mll(l+1)); s2(1+(ko+l*c)*N:(ko+l*c+1)*N,:)=doublefac*colmod.*kmod.*circshift(work2(:,l*W+1:(l+1)*W),all(l+1)); end; end; % Step 3: Permute again. coef = s2(p2,:); % Apply fft. for n=1:N coef((n-1)*M+1:n*M,:)=fft(coef((n-1)*M+1:n*M,:)); end; ltfat/inst/private/ref_irdftiii_1.m0000664000175000017500000000276112612404256017260 0ustar susnaksusnakfunction f=ref_irdftiii_1(c) %-*- texinfo -*- %@deftypefn {Function} ref_irdftiii_1 %@verbatim %REF_RDFTIII_1 Reference IRDFTIII by IDFTIII % Usage: f=ref_irdftiii(c); % % Only works for real functions. % % Compute IRDFT by doubling the signal and doing an IDFTIII % to obtain the reconstructed signal %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_irdftiii_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(c,1); Lhalf=floor(L/2); Lend=Lhalf*2; cc=zeros(size(c)); cc(1:Lhalf,:)=(c(1:2:Lend,:)- i*c(2:2:Lend,:))/sqrt(2); cc(L-Lhalf+1:end,:)= (c(Lend-1:-2:1,:) +i*c(Lend:-2:2,:))/sqrt(2); % If f has an even length, we must also copy the Nyquest-wave % (it is real) if mod(L,2)==1 cc((L+1)/2,:)=c(L,:); end; f=real(ref_idftiii(cc)); ltfat/inst/private/test_ltfatarghelper.py0000664000175000017500000001322612612404251020631 0ustar susnaksusnak#!/usr/bin/env python # -*- coding: utf-8 -*- # # This script searches all directories listed in dirs (relative to ltfatroot) # for occurrence of ltfatarghelper and replaces it with a defined code. # # from __future__ import print_function import os import sys from collections import defaultdict # Directories to search (relative to ltfat root) dirs = ('','auditory','blockproc','demos','filterbank','fourier','frames','gabor', 'nonstatgab','operators','quadratic','reference','signals','sigproc','wavelets') #dirs = ('g1','g2','g3') def query_yes_no(question, default="no"): """Ask a yes/no question via raw_input() and return their answer. "question" is a string that is presented to the user. "default" is the presumed answer if the user just hits . It must be "yes" (the default), "no" or None (meaning an answer is required of the user). The "answer" return value is one of "yes" or "no". """ valid = {"yes":True, "y":True, "ye":True, "no":False, "n":False} if default == None: prompt = " [y/n] " elif default == "yes": prompt = " [Y/n] " elif default == "no": prompt = " [y/N] " else: raise ValueError("invalid default answer: '%s'" % default) while 1: sys.stdout.write(question + prompt) choice = raw_input().lower() if default is not None and choice == '': return valid[default] elif choice in valid.keys(): return valid[choice] else: sys.stdout.write("Please respond with 'yes' or 'no' "\ "(or 'y' or 'n').\n") def main(): ltfatroot = os.path.join(os.path.dirname(os.path.realpath(__file__)),os.pardir) mfileswithltfatarghelper = defaultdict(list) for directory in dirs: files = list( x for x in os.listdir(os.path.join(ltfatroot,directory)) if x.endswith('.m') ) for ff in files: if ff == 'ltfatarghelper.m': continue fullpath = os.path.join(ltfatroot,os.path.join(directory,ff)) with open(fullpath,'r') as f: flines = f.readlines() for lineNo,line in enumerate(flines): if 'ltfatarghelper' in line and not line.startswith('%'): if '%MARKER' in line or 'error' in line: break # Do not use this file mfileswithltfatarghelper[fullpath].append(lineNo) print('Found in file {}:\n {}'.format(ff,line)) #for k,v in mfileswithltfatarghelper.items(): # print(k + '->' + str(v) ) for k,v in mfileswithltfatarghelper.items(): filelines = [] with open(k,'r') as f: filelines = f.readlines() for lineNo in reversed(v): print('Processing ' + k + ' with line ' + str(lineNo)) origline = filelines[lineNo] if not 'ltfatarghelper' in origline: print('This is wrong in '+k + str(v)+ '\n ' + origline) continue fcall = filelines[lineNo].split("=") toinsert = [] if len(fcall)<2: # No ret args toinsert.append("origpath = pwd;\n") toinsert.append("cd(ltfatbasepath);\n") toinsert.append(origline.rstrip()+'%MARKER\n') toinsert.append("cd([ltfatbasepath,filesep,'mex']);\n") toinsert.append(origline) toinsert.append("cd(origpath);\n") else: lhs = fcall[0] if '[' in lhs: lhs = lhs[lhs.find('[')+1:lhs.rfind(']')] rhs = fcall[1][fcall[1].find("(")+1:fcall[1].rfind(")")] lhsList = list(x.strip() for x in lhs.split(',')) lhsList2 = list(x+'2' if not x.strip()=='~' else x for x in lhsList) rhsList = rhs.split(',') #print(str(lhsList) + " ----> " + str(rhsList)) newline = '['+ ','.join(lhsList2) +']' + '=' + fcall[1] + '\n' toinsert.append("origpath = pwd;\n") toinsert.append("cd(ltfatbasepath);\n") toinsert.append("tic;\n") toinsert.append(origline.rstrip()+'%MARKER\n') toinsert.append("t0 =toc;\n") toinsert.append("fprintf('MAT: %d using %s\\n',t0,which('ltfatarghelper'));\n") toinsert.append("cd([ltfatbasepath,filesep,'mex']);\n") toinsert.append("tic;\n") toinsert.append(newline) toinsert.append("t0 =toc;\n") toinsert.append("fprintf('MEX: %d using %s\\n',t0,which('ltfatarghelper'));\n") toinsert.append("cd(origpath);\n") compareline = 'if ~(' arglist = [] for one,two in zip(lhsList,lhsList2): if one == '~': continue arglist.append('isequal('+one +','+two+')') compareline += '&&'.join(arglist) compareline += ')\n' toinsert.append(compareline); toinsert.append("error('ltfatarghelper test failed in " "%s',upper(mfilename));\n"); toinsert.append('end\n'); #print('\n'.join(filelines)) del filelines[lineNo] filelines[lineNo:lineNo] = toinsert with open(k,'w') as f: f.writelines(filelines) if __name__ == '__main__': if not query_yes_no('This will overwrite a bunch of files. Make sure you have a backup.' ' Should I continue?'): print('Quitting...') sys.exit() main() ltfat/inst/private/ref_dgt_pconv.m0000664000175000017500000000222712612404256017215 0ustar susnaksusnakfunction c=ref_dgt_pconv(f,g,a,M); %-*- texinfo -*- %@deftypefn {Function} ref_dgt_pconv %@verbatim %REF_DGT_PCONV Compute a DGT using PCONV %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgt_pconv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); N=L/a; b=L/M; c=zeros(M,N); for m=0:M-1 work = pconv(f,involute(g).*expwave(L,m*b)); c(m+1,:) = reshape(work(1:a:L),1,N); end; c=phaseunlock(c,a); ltfat/inst/private/rand_wpe.m0000664000175000017500000000302412612404256016171 0ustar susnaksusnakfunction f=rand_wpe(varargin) %-*- texinfo -*- %@deftypefn {Function} rand_wpe %@verbatim %RAND_HPE Random WPE even function. % Usage: f=rand_wpe(s); % % RAND_WPE(s) generates an array of size s, which is WPE along the % first dimension. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/rand_wpe.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if isnumeric(varargin); s=varargin; else s=cell2mat(varargin); end; if length(s)==1 error('To avoid confusion, the size must be at least two-dimensional.'); end; shalf=s; shalf(1)=floor((shalf(1)-1)/2); f=(randn(shalf)-.5)+(randn(shalf)-.5)*i; if rem(s(1),2)==0 f=[randn([1 s(2:end)])-.5; ... f; ... randn([1 s(2:end)])-.5; ... flipud(conj(f))]; else f=[randn([1 s(2:end)])-.5; ... f; ... flipud(conj(f))]; end; ltfat/inst/private/test_gabphasederiv.m0000664000175000017500000001046712612404256020246 0ustar susnaksusnakfunction test_failed = test_gabphasederiv() test_failed = 0; %-*- texinfo -*- %@deftypefn {Function} test_gabphasederiv %@verbatim % Tests whether all the algorithms return the same values %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_gabphasederiv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('-----------------test_gabphasederiv----------------------'); L = 100; l = 0:L-1; l = l(:); f1 = exp(1i*pi*0.1*l); f2 = pchirp(L,1); f3 = expchirp(L,0.2,2.2,'fc',-1.2); f4 = exp(1i*pi*0.5*L*(l./(L)).^2); f5 = exp(1i*pi*0.1*L*(l./(L)).^2); f6 = zeros(L,1); f6(floor(L/2):floor(L/2)+5) = 1; % Compare the pahse derivatives only for coefficients bigger than % relminlvl*max(c(:)) and away from the borders.. relminlvldb = 20; relminlvl = 10^(-relminlvldb/20); a = [1,1,1,4,4, 1, 4, 2]; M = [L,L,L,L,L,L/4,L/2,L/2]; %g = {{'gauss',1},'gauss',{'hann',8}}; %g = {{'hann',8}}; g = {{'gauss',1},{'gauss',4},{'gauss',1/4},... 'gauss',{'gauss',4},{'gauss',1/4},'gauss',{'hann',8}}; f = {f3,f3,f3,f3,f3,f3,f3,f3,f3}; phaseconvCell = {'relative','freqinv','timeinv','symphase'}; dflags = {'t','f','tt','ff','tf'}; for ii =1:numel(g) for phaseconvId=1:numel(phaseconvCell) phaseconv=phaseconvCell{phaseconvId}; for dflagId = 1:numel(dflags) dflag = dflags{dflagId}; c = dgt(f{ii},g{ii},a(ii),M(ii)); [~,info]=gabwin(g{ii},a(ii),M(ii),dgtlength(numel(f{ii}),a(ii),M(ii))); minlvl = max(abs(c(:)))*relminlvl; algArgs = { {'dgt',f{ii},g{ii},a(ii),M(ii)} {'phase',angle(c),a(ii)} {'cross',f{ii},g{ii},a(ii),M(ii)} {'abs',abs(c),g{ii},a(ii)} }; algRange = 1:numel(algArgs); if ~info.gauss algRange = 1:numel(algArgs)-1; end pderivs = cell(numel(algRange),1); for algId=algRange alg = algArgs{algId}; pderivs{algId}=gabphasederiv(dflag,alg{:},phaseconv); % Make it independent of L if any(strcmp(dflag,{'t','f'})) pderivs{algId} = pderivs{algId}./L; end % Mask by big enough coefficients pderivs{algId}(abs(c). % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); % Create matrix representation of the DFT F=idft(eye(L)); c=(F^order)*f; ltfat/inst/private/ref_insdgt.m0000664000175000017500000000273612612404256016527 0ustar susnaksusnakfunction f = ref_insdgt(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_insdgt %@verbatim %NSDGT Non-stationary Discrete Gabor transform % Usage: c=nsdgt(f,g,a,M); % [c,Ls]=nsdgt(f,g,a,M); %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_insdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . timepos=cumsum(a)-a(1)+1; L=sum(a); N=numel(g); F=zeros(L,sum(M)); % Construct the analysis operator matrix explicitly Y = 1; for n = 1:length(timepos) X = length(g{n}); win_range = mod(timepos(n)+(-floor(X/2):ceil(X/2)-1)-1,L)+1; F(win_range,Y) = fftshift(g{n}); for m = 1:M(n)-1 F(win_range,Y+m) = F(win_range,Y).*exp(2*pi*i*m*(-floor(X/2):ceil(X/2)-1)/M(n)).'; end Y=Y+M(n); end cmat=cell2mat(c); f=F*cmat; ltfat/inst/private/test_thresh.m0000664000175000017500000001003012612404256016721 0ustar susnaksusnakfunction test_failed=test_thresh %-*- texinfo -*- %@deftypefn {Function} test_thresh %@verbatim %TEST_THRESH Compare sparse and full thesholding %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_thresh.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed=0; disp(' =============== TEST_THRESH ================'); global LTFAT_TEST_TYPE; if ~strcmpi(LTFAT_TEST_TYPE,'double') disp(sprintf('Skipping. Cannot work with sparse matrices of type %s.',LTFAT_TEST_TYPE)); return; end lambda=0.1; ttypes={'hard','soft','wiener'}; for ii=1:2 if ii==1 g=tester_rand(3,4); field='REAL '; g(2,2)=lambda; else g=tester_crand(3,4); field='CMPLX '; g(2,2)=lambda; end; for jj=1:3 ttype=ttypes{jj}; [xo_full, Nfull] = thresh(g,lambda,ttype,'full'); [xo_sparse, Nsp] = thresh(g,lambda,ttype,'sparse'); res = xo_full-xo_sparse; res = norm(res(:)); res2 = Nfull-Nsp; [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['THRESH %s %s %0.5g %s'],field,ttype,res,fail); disp(s); [test_failed,fail]=ltfatdiditfail(res2,test_failed); s=sprintf(['THRESH N %s %s %0.5g %s'],field,ttype,res2,fail); disp(s); % Extend lambda to: % a) Vector lambdavec = lambda*ones(numel(g),1); [xo_full2, Nfull2] = thresh(g,lambdavec,ttype,'full'); [xo_sparse2, Nsp2] = thresh(g,lambdavec,ttype,'sparse'); res_full = xo_full2-xo_full; res_sparse = xo_sparse2-xo_sparse; res_full = norm(res_full(:)); res_sparse = norm(res_sparse(:)); res_nfull = Nfull2-Nfull; res_nsparse = Nfull2-Nfull; [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['THRESH VEC FULL %s %s %0.5g %s'],field,ttype,res_full,fail); disp(s); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['THRESH VEC SPARSE %s %s %0.5g %s'],field,ttype,res_sparse,fail); disp(s); [test_failed,fail]=ltfatdiditfail(res2,test_failed); s=sprintf(['THRESH VEC N FULL %s %s %0.5g %s'],field,ttype,res_nfull,fail); disp(s); [test_failed,fail]=ltfatdiditfail(res2,test_failed); s=sprintf(['THRESH VEC N SPARSE %s %s %0.5g %s'],field,ttype,res_nsparse,fail); disp(s); % b) Same shape as g lambdamat = lambda*ones(size(g)); [xo_full3, Nfull3] = thresh(g,lambdamat,ttype,'full'); [xo_sparse3, Nsp3] = thresh(g,lambdamat,ttype,'sparse'); res_full = xo_full3-xo_full; res_sparse = xo_sparse3-xo_sparse; res_full = norm(res_full(:)); res_sparse = norm(res_sparse(:)); res_nfull = Nfull3-Nfull; res_nsparse = Nfull3-Nfull; [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['THRESH MAT FULL %s %s %0.5g %s'],field,ttype,res_full,fail); disp(s); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['THRESH MAT SPARSE %s %s %0.5g %s'],field,ttype,res_sparse,fail); disp(s); [test_failed,fail]=ltfatdiditfail(res2,test_failed); s=sprintf(['THRESH MAT N FULL %s %s %0.5g %s'],field,ttype,res_nfull,fail); disp(s); [test_failed,fail]=ltfatdiditfail(res2,test_failed); s=sprintf(['THRESH MAT N SPARSE %s %s %0.5g %s'],field,ttype,res_nsparse,fail); disp(s); end; end; ltfat/inst/private/ref_dstii_1.m0000664000175000017500000000262612612404256016571 0ustar susnaksusnakfunction c=ref_dstii_1(f) %-*- texinfo -*- %@deftypefn {Function} ref_dstii_1 %@verbatim %REF_DSTII Reference Discrete Sine Transform type II % Usage: c=ref_dstii(f); % % The transform is computed by an FFT of 4 times the length of f. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dstii_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); if ~isreal(f) c=ref_dstii_1(real(f)) + i*ref_dstii_1(imag(f)); else lf=zeros(L*4,W); lf(2:2:2*L,:)=f; lf(2*L+2:2:end,:)=-flipud(f); fflong=imag(fft(lf)); c=-fflong(2:L+1,:)/sqrt(2*L); % Scale last coefficients to obtain orthonormal transform. c(end,:)=1/sqrt(2)*c(end,:); end ltfat/inst/private/ref_col2diag_1.m0000664000175000017500000000265712612404256017145 0ustar susnaksusnakfunction cout=ref_col2diag_1(cin); %-*- texinfo -*- %@deftypefn {Function} ref_col2diag_1 %@verbatim %REF_COL2DIAG_1 Compute matrix represenation from spreading symbol % % This function is its own inverse. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_col2diag_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(cin,1); cout=zeros(L); for jj=0:L-1 for ii=0:jj-1 cout(ii+1,jj+1)=cin(ii+1,ii-jj+L+1); end; for ii=jj:L-1 cout(ii+1,jj+1)=cin(ii+1,ii-jj+1); end; end; % The second code also works. if 0 for ii=0:L-1 for jj=0:ii cout(ii+1,jj+1)=cin(ii+1,ii-jj+1); end; for jj=ii+1:L-1 cout(ii+1,jj+1)=cin(ii+1,ii-jj+L+1); end; end; end; ltfat/inst/private/test_ambiguityfunction.m0000664000175000017500000000345412612404256021200 0ustar susnaksusnakfunction test_failed = test_ambiguityfunction Lr = [1, 19, 20]; test_failed = 0; disp(' =============== TEST_AMBIGUITYFUNCTION =============='); for ii = 1: length(Lr) L = Lr(ii); for n = 1:4 if (n==1) type1 = 'auto'; type2 = 'real'; f = tester_rand(L,1); g = f; elseif (n==2) type1 = 'auto'; type2 = 'complex'; f = tester_crand(L,1); g = f; elseif (n==3) type1 = 'cross'; type2 = 'real'; f = tester_rand(L,1); g = tester_rand(L,1); elseif (n==4) type1 = 'cross'; type2 = 'complex'; f = tester_crand(L,1); g = tester_crand(L,1); end r1 = ref_ambiguityfunction(f,g); r2 = ambiguityfunction(f,g); res = norm(r1-r2); [test_failed, fail] = ltfatdiditfail(res, test_failed); s = sprintf('DAF %3s %3s L:%3i %0.5g %s', type1, type2, L, res, fail); disp(s); end end %-*- texinfo -*- %@deftypefn {Function} test_ambiguityfunction %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_ambiguityfunction.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ref_sfac.m0000664000175000017500000000611512612404256016146 0ustar susnaksusnakfunction [ff]=ref_sfac(f,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_sfac %@verbatim %REF_SFAC Reference signal factorization % Usage: gf=ref_sfac(g,a,M); % % Input parameters: % f : Input signal. % a : Length of time shift. % b : Length of frequency shift. % Output parameters: % ff : Factored signal % % This function cannot handle multidimensional arrays. % Reshape to matrix BEFORE you call this. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_sfac.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Calculate the parameters that was not specified L=size(f,1); W=size(f,2); N=L/a; b=L/M; % The four factorization parameters. [c,h_a,h_m]=gcd(a,M); p=a/c; q=M/c; d=N/q; permutation=zeros(q*b,1); for k=0:p-1 for s=0:d-1 P(1+s+k*d)=s*p+k; end; end; P2=stridep(d,b)-1; % Create permutation for l=0:q-1 for k=0:p-1 for s=0:d-1 %permutation(l*b+s+k*d+1)=mod(P(s+k*d+1)*M-h_m*l*M+l*c,L)+1; %permutation(l*b+s*p+k+1)=mod(P2(s+k*d+1)*M-h_m*l*M+l*c,L)+1; permutation(l*p*d+s+k*d+1)=mod(s*c*p*q+(k-h_m*l)*c*q+l*c,L)+1; end; end; end; %ff=ref_fac(f,W,c,d,p,q,permutation); fffull=zeros(p,q,d,c); pr=reshape(permutation,d,p*q); p2=zeros(p*q,d); for l=0:q-1 for k=0:p-1 for s=0:d-1 %p2(l*p+k+1,s+1)=mod(s*c*p*q+(k-h_m*l)*c*q+l*c,L)+1; %p2(l*p+k+1,s+1)=mod(s*p*M+k*M-h_m*l*M+l*c,L)+1; p2(l*p+k+1,s+1)=mod(s*p*M+k*M+(c-h_m*M)*l,L)+1; end; end; end; % Output ff=zeros(p*q,c*d); % If d==1, it is not possible to further reduce the size of % wk. Actually, some of the following code produces an % error, because Matlab interprets an fft of a 1x q*p as a % a row operation ! if d>1 % This loop iterates over the number of truly different wk's. for ko=0:c-1 % Execute the fft and place transposed in ff. % The reshape done below is a dummy used to fix inconsistency in % octaves and matlabs handling of indices. wt=fft(reshape(f(p2+ko),p*q,d),[],2); for s=0:d-1 ff(:,1+ko*d+s)=wt(:,s+1); end; for s=0:d-1 fffull(:,:,s+1,ko+1)=reshape(wt(:,s+1),p,q,1,1); end; end; else % Work arrays. work=zeros(p*q,1); for ko=0:c-1 % Permute input. work(:)=f(pr+ko,:); % Write the block. ff(:,ko+1)=work; end end; %norm(ff(:)-fffull(:)) ltfat/inst/private/ref_iedgt_1.m0000664000175000017500000000372012612404256016545 0ustar susnaksusnakfunction f=ref_iedgt_1(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_iedgt_1 %@verbatim %REF_IEDGT_1 Reference Inverse Even DGT by IDGTII % Usage c=ref_edgt(f,g,a,M); % % The input window must be odd-centered of length 2L. % % a must be divisable by 2. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_iedgt_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1)/2; W=size(c,2); N=L/a; M=L/b; clong=zeros(M,2*N,W); % Copy the first M/2 coefficients of the first/last time shift. clong(1:M/2,1,:)=c(1:M/2,:); clong(1:M/2,N+1,:)=c(1+(N-1)*M+M/2:N*M,:); % Scale the first coefficients correctly clong(1,1,:)=clong(1,1,:)*sqrt(2); clong(1,N+1,:)=clong(1,N+1,:)*sqrt(2); % Copy the remaining coefficients to the first/last time shift, such % that we get an odd symmetry. clong(M:-1:M/2+2,1,:) = -clong(2:M/2,1,:); clong(M:-1:M/2+2,N+1,:) = -clong(2:M/2,N+1,:); % Copy the body of the coefficients clong(:,2:N,:)=c(M/2+1:M/2+M*(N-1),:); % Copy the unmodulated coefficients for the second half clong(1,N+2:2*N,:)=clong(1,N:-1:2,:); % Copy the modulated coefficients for the second half clong(2:M,N+2:2*N,:)=-clong(M:-1:2,N:-1:2,:); clong=reshape(clong,2*M*N,W); fdouble=ref_idgtii(clong,g,a,2*b); f=fdouble(1:L,:); ltfat/inst/private/ref_dwiltii_1.m0000664000175000017500000000517412612404256017123 0ustar susnaksusnakfunction [coef]=ref_dwiltii_1(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dwiltii_1 %@verbatim %COMP_DWILT Compute Discrete Wilson transform. % % Do not call this function directly, use DWILT instead. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dwiltii_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author : Peter L. Soendergaard. L=size(g,1); N=L/a; W=size(f,2); c=ref_gdgt(f,g,a,2*M,.5,0,0); coef2=reshape(c,2*M,N,W); % ----- Type II ------ %coef2=dgt(f,g,a,2*M); coef=zeros(2*M,N/2,W); if 0 % --- Loop version --- for n=0:N/2-1 % ---- m is zero --------- coef(1,n+1,:)=coef2(1,2*n+1,:); for m=1:2:M-1 % --- m is odd ---------- coef(m+1,n+1,:)= i/sqrt(2)*(coef2(m+1,2*n+1,:)+coef2(2*M-m+1,2*n+1,:)); coef(M+m+1,n+1,:)= 1/sqrt(2)*(coef2(m+1,2*n+2,:)-coef2(2*M-m+1,2*n+2,:)); end; for m=2:2:M-1 % --- m is even --------- coef(m+1,n+1,:)= 1/sqrt(2)*(coef2(m+1,2*n+1,:)-coef2(2*M-m+1,2*n+1,:)); coef(M+m+1,n+1,:)= i/sqrt(2)*(coef2(m+1,2*n+2,:)+coef2(2*M-m+1,2*n+2,:)); end; % --- m is nyquest ------ if mod(M,2)==0 coef(M+1,n+1,:) = i*coef2(M+1,2*n+2,:); else coef(M+1,n+1,:) = i*coef2(M+1,2*n+1,:); end; end; else % --- Vector version--- % ---- m is zero --------- coef(1,:,:)=coef2(1,1:2:N,:); % --- m is odd ---------- coef(2:2:M,:,:) = i/sqrt(2)*(coef2(2:2:M,1:2:N,:)+coef2(2*M:-2:M+2,1:2:N,:)); coef(M+2:2:2*M,:,:)= 1/sqrt(2)*(coef2(2:2:M,2:2:N,:)-coef2(2*M:-2:M+2,2:2:N,:)); % --- m is even --------- coef(3:2:M,:,:)= 1/sqrt(2)*(coef2(3:2:M,1:2:N,:)-coef2(2*M-1:-2:M+2,1:2:N,:)); coef(M+3:2:2*M,:,:)= i/sqrt(2)*(coef2(3:2:M,2:2:N,:)+coef2(2*M-1:-2:M+2,2:2:N,:)); % --- m is nyquest ------ if mod(M,2)==0 coef(M+1,:,:) = i*coef2(M+1,2:2:N,:); else coef(M+1,:,:) = i*coef2(M+1,1:2:N,:); end; end; coef=reshape(coef,M*N,W); ltfat/inst/private/test_nsdgt.m0000664000175000017500000001410412612404256016551 0ustar susnaksusnakfunction test_failed=test_nsdgt() %-*- texinfo -*- %@deftypefn {Function} test_nsdgt %@verbatim %TEST_NSDGT Simple test of nsdgt and associated functions % Usage: test_nsdgt() % % This function checks the exact reconstruction (up to numeric precision) % of the functions nsdgt and insdgt, when using dual windows computed with % nsgabdual, or tight windows computed with nsgabtight. % % This test is done on a single short random signal, for only one given set % of windows. % A more systematic testing would be required for a complete validation of % these functions (in particular for inclusion of the functions in LTFAT) %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_nsdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Florent Jaillet, 2009-05 test_failed=0; disp(' =============== TEST_NSDGT ================'); % First case is even numbers, painless % Second case is even numbers, non-painless % Third case has odd numbers, painless % Fouth case has odd numbers, non-painless % Fifth case is even numbers, painless, window length less than M ar ={[20,30,40],[20,30,40],[5,11,19],[5,11,19],[20,30,40]}; Mr ={[30,40,50],[30,40,50],[7,12,29],[7,12,29],[35,40,50]}; Lgr={[30,40,50],[60,80,60],[7,12,29],[9,19,33],[30,40,50]}; for tc=1:numel(ar) N=numel(ar{tc}); M=Mr{tc}; a=ar{tc}; Lg=Lgr{tc}; L=sum(a); g=cell(N,1); for ii=1:N g{ii}=randn(Lg(ii),1); end; % ----- non-uniform dual and inversion ----- ispainless=all(cellfun(@length,g)<=M.'); if ispainless gd=nsgabdual(g,a,M); gt=nsgabtight(g,a,M); end; for W=1:3 f=randn(L,W); c=nsdgt(f,g,a,M); % ----- reference --------------------- c_ref=ref_nsdgt(f,g,a,M); res=sum(cellfun(@(x,y) norm(x-y,'fro'),c,c_ref)); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['NSDGT REF tc:%3i W:%3i %0.5g %s\n'],tc,W,res,fail); % ----- reference inverse --------------- f_syn=insdgt(c,g,a); f_ref=ref_insdgt(c,g,a,M); res=norm(f_ref-f_syn,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['NSDGT INV REF tc:%3i W:%3i %0.5g %s\n'],tc,W,res,fail); % ----- inversion --------------------- if ispainless r=insdgt(c,gd,a); res=norm(f-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['NSDGT DUAL tc:%3i W:%3i %0.5g %s\n'],tc,W,res,fail); % ----- tight and inversion ----------------- ct=nsdgt(f,gt,a,M); rt=insdgt(ct,gt,a); res=norm(f-rt); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['NSDGT TIGHT tc:%3i %0.5g %s\n'],tc,res,fail); % ----- non-uniform inversion, real ----- c=nsdgtreal(f,g,a,M); r=insdgtreal(c,gd,a,M); res=norm(f-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['NSDGTREAL DUAL tc:%3i %0.5g %s\n'],tc,res,fail); end; end; end; ar ={[25,30,45],[25,30,45]}; Mr =[50,50]; Lgr={[50,50,50],[40,50,60]}; % Second test is disabled, it does not work yet. for tc=1:1 %numel(ar) N=numel(ar{tc}); M=Mr(tc); a=ar{tc}; Lg=Lgr{tc}; L=sum(a); g=cell(N,1); for ii=1:N g{ii}=randn(Lg(ii),1); end; gd=nsgabdual(g,a,M); gt=nsgabtight(g,a,M); for W=1:3 L=sum(a); f=randn(L,1); % ----- uniform dual and inversion ----- c=unsdgt(f,g,a,M); r=insdgt(c,gd,a); res=norm(f-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['UNSDGT DUAL tc:%3i W:%3i %0.5g %s\n'],tc,W,res,fail); % ----- uniform inversion, real ----- cr=unsdgtreal(f,g,a,M); r=insdgtreal(cr,gd,a,M); res=norm(f-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['UNSDGTREAL DUAL tc:%3i W:%3i %0.5g %s\n'],tc,W,res,fail); % ----- uniform tight and inversion ----------------- ct=unsdgt(f,gt,a,M); rt=insdgt(ct,gt,a); res=norm(f-rt); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['UNSDGT TIGHT tc:%3i W:%3i %0.5g %s\n'],tc,W,res,fail); % ----- framebounds ----------------- if 0 FB=nsgabframebounds(gt,a,M); res=norm(FB-1); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['UNSDGT FRAMEBOUNDS tc:%3i %0.5g %s\n'],tc,res,fail); end; end; end; % ------ Reference DGT ---------------------- if 0 a1=3; M1=4; N=8; a=a1*ones(1,N); M=M1*ones(1,N); L=a1*N; f=tester_crand(L,1); g1=tester_crand(L,1); for ii=1:N g{ii}=g1; end; c = nsdgt(f,g,a,M); c_ref = dgt(f,g1,a1,M1,'timeinv'); res=norm(reshape(cell2mat(c),M1,N)-c_ref,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['NSDGT REF %0.5g %s\n'],res,fail); end; ltfat/inst/private/spcrand.m0000664000175000017500000000234612612404256016032 0ustar susnaksusnakfunction f=spcrand(n1,n2,p); %-*- texinfo -*- %@deftypefn {Function} spcrand %@verbatim %SPCRAND Sparse Random complex numbers for testing. % Usage: f=sptester_crand(n1,n2,p); %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/spcrand.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Make a random real valued matrix, extract the indices, put complex % numbers in and recollect. f=sprand(n1,n2,p); [row,col,val]=find(f); L=numel(val); val=rand(L,1)-.5+i*(rand(L,1)-.5); f=sparse(row,col,val,n1,n2); ltfat/inst/private/ref_irdftii.m0000664000175000017500000000261012612404256016660 0ustar susnaksusnakfunction c=ref_irdftii(f) %-*- texinfo -*- %@deftypefn {Function} ref_irdftii %@verbatim %REF_IRDFTII Reference Inverse Real DFT type II % Usage: c=ref_irdftii(f); % % Compute IRDFTII by explicit formulas. % % The transform is orthonormal %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_irdftii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); Lhalf=ceil(L/2); Lend=Lhalf*2-1; F=zeros(L); F(:,1)=ones(L,1); l=(0:L-1).'; for m=1:Lhalf-1 F(:,2*m)=sqrt(2)*cos(2*pi*m*(l+.5)/L); F(:,2*m+1)=sqrt(2)*sin(2*pi*m*(l+.5)/L); end; if mod(L,2)==0 F(:,L)=cos(pi*l); end; F=F/sqrt(L); % dot-transpose will work because F is real. c=F*f; ltfat/inst/private/ref_pfilt_1.m0000664000175000017500000000254012612404256016566 0ustar susnaksusnakfunction h=ref_pfilt_1(f,g,a) %-*- texinfo -*- %@deftypefn {Function} ref_pfilt_1 %@verbatim %REF_PFILT_1 Reference PFILT implementation by FFT % % This is the old reference pfilt from before the struct filters where % introduced. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_pfilt_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . [L W]=size(f); g=fir2long(g,L); % Force FFT along dimension 1, since we have permuted the dimensions % manually if isreal(f) && isreal(g) h=ifftreal(fftreal(f,L,1).*repmat(fftreal(g,L,1),1,W),L,1); else h=ifft(fft(f,L,1).*repmat(fft(g,L,1),1,W),L,1); end; h=h(1:a:end,:); ltfat/inst/private/ref_gdgt.m0000664000175000017500000000251412612404256016156 0ustar susnaksusnakfunction c=ref_gdgt(f,g,a,M,c_t,c_f,c_w) %-*- texinfo -*- %@deftypefn {Function} ref_gdgt %@verbatim %REF_GDGT Reference generalized DGT % Usage: c=ref_dgtiv(f,g,a,M,c_t,c_f,c_w); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transpose. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_gdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); N=L/a; F=zeros(L,M*N); l=(0:L-1).'; for n=0:N-1 for m=0:M-1 F(:,M*n+m+1)=exp(2*pi*i*(m+c_f)*(l+c_t)/M).*circshift(g,n*a+c_w); end; end; c=F'*f; ltfat/inst/private/test_wpfbt.m0000664000175000017500000001115312612404256016555 0ustar susnaksusnakfunction test_failed = test_wpfbt(verbose) %-*- texinfo -*- %@deftypefn {Function} test_wpfbt %@verbatim %TEST_WFBTPR % % Checks perfect reconstruction of the general wavelet transform of different % filters % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_wpfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('========= TEST WPFBT ============'); global LTFAT_TEST_TYPE; tolerance = 1e-8; if strcmpi(LTFAT_TEST_TYPE,'single') tolerance = 2e-6; end test_failed = 0; if(nargin>0) verbose = 1; else verbose = 0; end type = {'dec'}; ext = {'per','zero','odd','even'}; format = {'pack','cell'}; J = 3; %! Mild tree wt1 = wfbtinit({'db10',6,'full'}); wt1 = wfbtremove(2,1,wt1,'force'); wt1 = wfbtremove(2,3,wt1,'force'); %! Hardcore tree wt2 = wfbtinit({'db3',1}); wt2 = wfbtput(1,1,'mband1',wt2); wt2 = wfbtput(2,2,'mband1',wt2); wt2 = wfbtput(3,3,'mband1',wt2); wt2 = wfbtput(3,1,'db10',wt2); wt2 = wfbtput(4,1,'dgrid2',wt2); wt2 = wfbtput(5,1,'db3',wt2); %! Another tree wt3 = wfbtinit(); wt3 = wfbtput(0,0,'cmband4',wt3); wt3 = wfbtput(1,0,'cmband6',wt3); wt3 = wfbtput(1,1,'cmband6',wt3); wt3 = wfbtput(2,0,'cmband4',wt3); wt3 = wfbtput(2,1,'cmband4',wt3); wt3 = wfbtput(3,1,'cmband4',wt3); wt3 = wfbtput(3,2,'cmband4',wt3); wt3 = wfbtput(3,3,'cmband4',wt3); wt3 = wfbtput(3,4,'cmband4',wt3); % wt2 = wfbtinit(); % wt2 = wfbtput(0,0,{'db',4},wt2); % wt2 = wfbtput(1,0,{'algmband',1},wt2); % wt2 = wfbtput(1,1,{'hden',3},wt2); % wt2 = wfbtput(2,0,{'dgrid',2},wt2); % wt2 = wfbtput(2,1,{'dgrid',2},wt2); test_filters = { {'algmband2',J} % 4 filters, uniform, crit. sub. {'db4',J} {'algmband1',J} % 3 filters, uniform, crit. sub. %{{'hden',3},J} % 3 filters, non-uniform, no crit. sub. no correct {'dgrid1',J} % 4 filters. sub. fac. 2 wt1 wt2 wt3 }; scaling = {'intscale','intsqrt','intnoscale'}; scalingInv = scaling(end:-1:1); %testLen = 4*2^7-1;%(2^J-1); testLen = 53; f = tester_rand(testLen,1); for scIdx = 1:numel(scaling) for extIdx=1:length(ext) extCur = ext{extIdx}; for typeIdx=1:length(type) for tt=1:length(test_filters) actFilt = test_filters{tt}; if verbose, if(~isstruct(actFilt))fprintf('J=%d, filt=%s, ext=%s, inLen=%d \n',actFilt{2},actFilt{1},extCur,size(f,1)); else disp('Custom'); end; end; [c,info] = wpfbt(f,actFilt,extCur,scaling{scIdx}); fhat = iwpfbt(c,actFilt,size(f,1),extCur,scalingInv{scIdx}); %MSE err = norm(f-fhat,'fro'); [test_failed,fail]=ltfatdiditfail(err,test_failed,tolerance); if(~verbose) if(~isstruct(actFilt))fprintf('J=%d, %5.5s, ext=%4.4s, %s, L=%d, err=%.4e %s \n',actFilt{2},actFilt{1},extCur,scaling{scIdx},size(f,1),err,fail); else fprintf('Custom, %s, err=%.4e %s \n',scaling{scIdx},err,fail); end; end if strcmpi(fail,'FAILED') if verbose if(~isstruct(actFilt)) fprintf('err=%d, filt=%s, ext=%s, inLen=%d \n',err,actFilt{1},extCur,testLen); else disp('Custom'); end; figure(1);clf;stem([f,fhat]); figure(2);clf;stem([f-fhat]); break; end end fhat2 = iwpfbt(c,info); err = norm(f-fhat2,'fro'); [test_failed,fail]=ltfatdiditfail(err,test_failed,tolerance); if(~isstruct(actFilt)) fprintf('INFO J=%d, %5.5s, ext=%4.4s, %s, L=%d, err=%.4e %s \n',actFilt{2},actFilt{1},extCur,scaling{scIdx},size(f,1),err,fail); else fprintf('INFO Custom, %s, err=%.4e %s \n',scaling{scIdx},err,fail); end; if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end end ltfat/inst/private/test_frft.m0000664000175000017500000000412712612404256016377 0ustar susnaksusnakfunction test_failed=test_frft disp(' =============== TEST_FRFT ==========='); Lr=[9,10,11,12]; test_failed=0; %-*- texinfo -*- %@deftypefn {Function} test_frft %@verbatim % Test the hermite functions and discrete frft %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_frft.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . for ii=1:length(Lr) L=Lr(ii); F=fft(eye(L))/sqrt(L); % check if hermite functions are eigenfunctions of F V=hermbasis(L,4); res=norm(abs(F*V)-abs(V)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=fprintf('HERMBASIS L:%3i %0.5g %s\n',L,res,fail); % Frft of order 1 becomes ordinary DFT f1=tester_crand(L,1); f2=tester_crand(1,L); p=4; frf1=dfracft(f1,1,[],p); frf2=dfracft(f2,1,2,p); res=norm(F*f1-frf1); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=fprintf('DFRACFT L:%3i, %0.5g %s\n',L,res,fail); res=norm(f2*F-frf2); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=fprintf('DFRACFT L:%3i, %0.5g %s\n',L,res,fail); frf1=dfracft(f1,1); frf2=dfracft(f2,1,2); res=norm(F*f1-frf1); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=fprintf('DFRACFT L:%3i %0.5g %s\n',L,res,fail); res=norm(f2*F-frf2); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=fprintf('DFRACFT L:%3i %0.5g %s\n',L,res,fail); end ltfat/inst/private/test_dtwfb.m0000664000175000017500000001271012612404256016541 0ustar susnaksusnakfunction test_failed = test_dtwfb() test_failed = 0; disp('========= TEST DTWFB ============'); global LTFAT_TEST_TYPE; tolerance = 2e-8; if strcmpi(LTFAT_TEST_TYPE,'single') tolerance = 1e-5; end Larray = [603]; Warray = [1,3]; dualwt{1} = {'qshift1',1}; dualwt{2} = {'qshift3',5,'first','symorth1'}; dualwt{3} = {{'qshift3',5,'full','first','ana:symorth3','leaf','db4'},... {'qshift3',5,'full','first','syn:symorth3','leaf','db4'}}; dualwt{4} = {{'ana:oddeven1',5},{'syn:oddeven1',5}}; dualwt{5} = {'qshift3',3,'first','db4'}; dualwt{6} = {{'syn:oddeven1',2,'doubleband'},{'ana:oddeven1',2,'doubleband'}}; dualwt{7} = {dtwfbinit({'syn:oddeven1',2,'doubleband'}),dtwfbinit({'ana:oddeven1',2,'doubleband'})}; dualwt{8} = {{'dual',{'syn:oddeven1',2,'doubleband'}},{'syn:oddeven1',2,'doubleband'}}; dualwt{9} = {dtwfbinit({'syn:oddeven1',3,'full'},'nat'),dtwfbinit({'ana:oddeven1',3,'full'},'nat')}; dualwt{10} = {'dden2',3}; dualwt{11} = {'optsym3',3}; tolerance = ones(numel(dualwt),1)*tolerance; %-*- texinfo -*- %@deftypefn {Function} test_dtwfb %@verbatim % decrease the tolerance for oddeven filters %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dtwfb.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . tolerance([4,6,7,8,9]) = 1e-5; % Perfect reconstruction for ii = 1:numel(dualwt) if isempty(dualwt{ii}) continue; end if iscell(dualwt{ii}{1}) || isstruct(dualwt{ii}{1}) && numel(dualwt{ii})==2 dualwtana = dualwt{ii}{1}; dualwtsyn = dualwt{ii}{2}; else dualwtana = dualwt{ii}; dualwtsyn = dualwtana; end for cmplx = {'real','complex'} for order = {'freq','nat'} for L = Larray for W = Warray if strcmp(cmplx{1},'real') f = tester_rand(L,W); else f = tester_crand(L,W); end if strcmp(cmplx{1},'real') [c,info] = dtwfbreal(f,dualwtana,order{1}); fhat1 = idtwfbreal(c,dualwtsyn,L,order{1}); fhat2 = idtwfbreal(c,info); res = norm(f-fhat1); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE REC %i L:%i W:%i %s %s %0.5g %s'],ii,L,W,cmplx{1},order{1}, res,fail); disp(s) res = norm(f-fhat2); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE REC INFO %i L:%i W:%i %s %s %0.5g %s'],ii,L,W,cmplx{1},order{1}, res,fail); disp(s) end [c,info] = dtwfb(f,dualwtana,order{1}); fhat1 = idtwfb(c,dualwtsyn,L,order{1}); fhat2 = idtwfb(c,info); res = norm(f-fhat1); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE REC %i L:%i W:%i %s %s %0.5g %s'],ii,L,W,cmplx{1},order{1}, res,fail); disp(s) res = norm(f-fhat2); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance(ii)); s=sprintf(['DUAL-TREE REC INFO %i L:%i W:%i %s %s %0.5g %s'],ii,L,W,cmplx{1},order{1}, res,fail); disp(s) if strcmp(order{1},'freq') cnat = dtwfb(f,dualwtana,'nat'); % Is there a subband in c with exactly the same % coefficients? for cnatId=1:numel(cnat) for cId=1:numel(c) if numel(c{cId}) == numel(cnat{cnatId}) res = norm(c{cId}-cnat{cnatId}); if res<1e-10 break; end end end if any(res)<1e-10 continue; else [test_failed,fail]=ltfatdiditfail(1,test_failed); s=sprintf(['DUAL-TREE FREQ NAT %i L:%i W:%i %s %s %s'],ii,L,W,cmplx{1},order{1}, fail); disp(s) break; end end end end end end end end % Nat vs. freq (Are te actual subbands equal?) ltfat/inst/private/ref_dwiltiii.m0000664000175000017500000000375212612404256017054 0ustar susnaksusnakfunction c=ref_dwiltiii(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dwiltiii %@verbatim %REF_DWILTIII Reference DWILT type III % Usage: c=ref_dwiltiii(f,g,a,M); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dwiltiii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); % Possibly zero-extend the window if necessary. g=fir2long(g,L); N=L/a; F=zeros(L,M*N); l=(0:L-1)'; pif=pi/4; if 0 % This is the definition where the odd and even indices are split for n=0:floor(N/2)-1 for m=0:2:M-1 F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*cos((m+.5)*pi*l/M+pif); F(:,1+m+(2*n+1)*M)=sqrt(2)*circshift(g,(2*n+1)*a).*sin((m+.5)*pi*l/M+pif); end; for m=1:2:M-1 F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*sin((m+.5)*pi*l/M+pif); F(:,1+m+(2*n+1)*M)=sqrt(2)*circshift(g,(2*n+1)*a).*cos((m+.5)*pi*l/M+pif); end; end; else % Combined definition % This is the definition where the odd and even indices are split for n=0:N-1 for m=0:M-1 if rem(m+n,2)==0 F(:,1+m+n*M)=sqrt(2)*circshift(g,n*a).*cos((m+.5)*pi*l/M+1/4*pi+(m+n)*pi); else F(:,1+m+n*M)=sqrt(2)*circshift(g,n*a).*cos((m+.5)*pi*l/M+3/4*pi+(m+n)*pi); end; end; end; end; c=F.'*f; ltfat/inst/private/test_firwin.m0000664000175000017500000000534012612404256016732 0ustar susnaksusnakfunction test_failed=test_firwin %-*- texinfo -*- %@deftypefn {Function} test_firwin %@verbatim %TEST_FIRWIN Test the firwin windows % % This test script verifies the properties listed in the help of firwin %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_firwin.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . allwins = {'hann','tria','sine', ... 'sqrttria','itersine', 'square','hamming','blackman', ... 'nuttall','nuttall10', 'nuttall01','nuttall20','nuttall11', ... 'nuttall02','nuttall30','nuttall21','nuttall03','blackman2'}; test_failed=0; disp(' =============== TEST_FIRWIN ================'); for L=[18,19,20,21] for cent=0:1 if cent==0 centtype='wp'; else centtype='hp'; end; for ii=1:length(allwins); winname=allwins{ii}; [g,info]=firwin(winname,L,centtype); res = 1-isevenfunction(fir2long(g,2*L),centtype); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['SYMM %10s %s L: %i %0.5g %s'],winname,centtype,L,res,fail); disp(s); if cent==0 res=1-g(1); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['PEAK %10s %s L: %i %0.5g %s'],winname,centtype,L,res,fail); disp(s); end; if mod(L,2)==0 if info.ispu gpu=g+fftshift(g); res=norm(gpu-gpu(1)*ones(L,1)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['PU %10s %s L: %i %0.5g %s'],winname,centtype,L,res,fail); disp(s); end; if info.issqpu gpu=g.^2+fftshift(g.^2); res=norm(gpu-gpu(1)*ones(L,1)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['SQPU %10s %s L: %i %0.5g %s'],winname,centtype,L,res,fail); disp(s); end; end; end; end; end; ltfat/inst/private/test_dgt_fb_alg.m0000664000175000017500000000443212612404256017505 0ustar susnaksusnakfunction test_failed=test_dgt_fb %-*- texinfo -*- %@deftypefn {Function} test_dgt_fb_alg %@verbatim %TEST_DGT_FB Test the filter bank algorithms in DGT % % This script runs a throrough test of the DGT routine, % testing it on a range of input parameters. % % The script test the filter bank algorithms in DGT, IDGT, GABDUAL and % GABTIGHT by comparing with the full window case. % % The computational backend is tested this way, but the % interfaces is not. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dgt_fb_alg.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lr = [24, 35, 35, 24,144,108,144,135,77,77]; ar = [ 6, 5, 5, 4, 9, 9, 12, 9, 7, 7]; Mr = [ 8, 7, 7, 6, 16, 12, 24, 9,11,11]; glr = [16, 14, 21, 12, 48, 12, 24, 18,22,11]; test_failed=0; disp(' =============== TEST_DGT_FB_ALG ================'); disp('--- Used subroutines ---'); for ii=1:length(Lr); L=Lr(ii); M=Mr(ii); a=ar(ii); gl=glr(ii); b=L/M; N=L/a; for rtype=1:2 if rtype==1 rname='REAL '; g=tester_rand(gl,1); else rname='CMPLX'; g=tester_crand(gl,1); end; if rtype==1 rname='REAL '; f=tester_rand(L,1); else rname='CMPLX'; f=tester_crand(L,1); end; cc = dgt(f,fir2long(g,L),a,M); cc_ref = ref_dgt_6(f,g,a,M); cdiff=cc-cc_ref; res=norm(cdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REF %s L:%3i a:%3i M:%3i gl:%3i %0.5g %s',rname,L,a,M,gl,res,fail); disp(s) end; end; ltfat/inst/private/test_involute.m0000664000175000017500000000242512612404256017302 0ustar susnaksusnakfunction test_failed=test_involute Lr=[9,10]; test_failed=0; disp(' =============== TEST_INVOLUTE ==========='); for ii=1:length(Lr) L=Lr(ii); f=tester_crand(L,1); r1=conj(dft(f)); r2=dft(involute(f)); res=norm(r1-r2); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('INVOLUTE L:%3i %0.5g %s',L,res,fail); disp(s); end; %-*- texinfo -*- %@deftypefn {Function} test_involute %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_involute.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ref_dctiii_2.m0000664000175000017500000000272312612404256016721 0ustar susnaksusnakfunction c=ref_dctiii_2(f) %-*- texinfo -*- %@deftypefn {Function} ref_dctiii_2 %@verbatim %DCTII Reference Discrete Consine Transform type III % Usage: c=ref_dctiii_2(f); % % The transform is real (only works for real input data) and % it is orthonormal. % % The transform is computed as the exact inverse of DCTII, i.e. all % steps in the DCTII are reversed in order of computation. % % NOT WORKING %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dctiii_2.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); R=1/sqrt(2)*[diag(exp((0:L-1)*pi*i/(2*L)));... zeros(1,L); ... [zeros(L-1,1),flipud(diag(exp(-(1:L-1)*pi*i/(2*L))))]]; R R(1,1)=1; c=real(R'*fft([f;flipud(f)])/sqrt(L)/2); ltfat/inst/private/ref_spreadfun.m0000664000175000017500000000265212612404256017223 0ustar susnaksusnakfunction coef=ref_spreadfun(T) %-*- texinfo -*- %@deftypefn {Function} ref_spreadfun %@verbatim %REF_SPREADFUN Spreading function. % Usage: c=ref_spreadfun(T); % % REF_SPREADFUN(T) computes the spreading function of the operator T. The % spreading function represent the operator T as a weighted sum of % time-frequency shifts. See the help text for SPREADOP for the exact % definition. % % SEE ALSO: SPREADOP, TCONV, SPREADINV, SPREADADJ %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_spreadfun.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(T,1); coef=zeros(L); for ii=0:L-1 for jj=0:L-1 coef(ii+1,jj+1)=T(ii+1,mod(ii-jj,L)+1); end; end; coef=fft(coef)/L; ltfat/inst/private/ref_dwiltiv.m0000664000175000017500000000273212612404256016715 0ustar susnaksusnakfunction c=ref_dwiltiv(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dwiltiv %@verbatim %REF_DWILTIV Reference DWILT type iv % Usage: c=ref_dwiltiv(f,g,a,M); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dwiltiv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); N=L/a; F=zeros(L,M*N); k=(0:L-1)'; pif=pi/4; for n=0:floor(N/2)-1 for m=0:2:M-1 F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*cos((m+.5)*pi*(k+.5)/M+pif); F(:,1+m+(2*n+1)*M)=sqrt(2)*circshift(g,(2*n+1)*a).*sin((m+.5)*pi*(k+.5)/M+pif); end; for m=1:2:M-1 F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*sin((m+.5)*pi*(k+.5)/M+pif); F(:,1+m+(2*n+1)*M)=sqrt(2)*circshift(g,(2*n+1)*a).*cos((m+.5)*pi*(k+.5)/M+pif); end; end; c=F.'*f; ltfat/inst/private/test_chirpzt.m0000664000175000017500000000422312612404256017116 0ustar susnaksusnakfunction test_failed=test_chirpzt disp(' =============== TEST_CHIRPZT ================'); test_failed=0; %-*- texinfo -*- %@deftypefn {Function} test_chirpzt %@verbatim % Goertzel algorithm has a bad precision for larger L. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_chirpzt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . global LTFAT_TEST_TYPE; tolerance = 2e-10; if strcmpi(LTFAT_TEST_TYPE,'single') tolerance = 2e-4; end L = 36; W = 17; f=tester_crand(L,W); res = norm(fft(cast(f,'double'))-chirpzt(f,L)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); fprintf('RES 1 cols: L:%3i, W:%3i %s\n',L,W,fail); res = norm(fft(cast(f,'double'),[],2)-chirpzt(f,[],[],[],[],2)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); fprintf('RES 1 rows: L:%3i, W:%3i %s\n',L,W,fail); res = norm(fft(cast(f,'double'),2*L)-chirpzt(f,2*L,0.5/L)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); fprintf('RES 1/2 cols: L:%3i, W:%3i %s\n',L,W,fail); res = norm(fft(cast(f,'double'),5*L)-chirpzt(f,5*L,0.2/L)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); fprintf('RES 1/5 cols: L:%3i, W:%3i %s\n',L,W,fail); offset = 10; c = chirpzt(f,5*L-offset,0.2/L,offset*0.2/L); cfft = fft(cast(f,'double'),5*L); res = norm(cfft(offset+1:end,:)-c); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); fprintf('RES 1/5, offset, cols: L:%3i, W:%3i %s\n',L,W,fail); ltfat/inst/private/ref_dcti_1.m0000664000175000017500000000227212612404256016375 0ustar susnaksusnakfunction c=ref_dcti_1(f) %-*- texinfo -*- %@deftypefn {Function} ref_dcti_1 %@verbatim %REF_DCTI_1 Reference Discrete Consine Transform type I % Usage: c=ref_dcti_1(f); % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dcti_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); if L==1 c=f; return; end; R=1/sqrt(2)*[eye(L);... [zeros(L-2,1),flipud(eye(L-2)),zeros(L-2,1)]]; R(1,1)=1; R(L,L)=1; c=R'*dft(R*f); ltfat/inst/private/ref_ifac.m0000664000175000017500000000253412612404256016135 0ustar susnaksusnakfunction f=ref_ifac(ff,W,c,d,p,q,permutation); %-*- texinfo -*- %@deftypefn {Function} ref_ifac %@verbatim %REF_IFAC Reference inverse factorization. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_ifac.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Output array f=zeros(c*d*p*q,W); work=zeros(p*q*d,W); if d>1 for ko=0:c-1 work(:) = ifft(reshape(ff(:,1+ko*d:(ko+1)*d),q*W*p,d).'); % Permute again. f(permutation+ko,:)=work; end; else for ko=0:c-1 % Multiply work(:)=ff(:,ko+1); % Permute again. f(permutation+ko,:)=work; end; end; ltfat/inst/private/ref_zak.m0000664000175000017500000000257112612404256016021 0ustar susnaksusnakfunction coef=ref_zak(f,K) %-*- texinfo -*- %@deftypefn {Function} ref_zak %@verbatim %REF_ZAK Reference Zak-transform. % Usage: c=ref_zak(f,K); % % This function computes a reference Zak-transform by % an explicit summation. % % It returns the coefficients in the rectangular layout. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_zak.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); % Slow, explicit method % Workspace coef=zeros(K,L/K); for jj=0:K-1 for kk=0:L/K-1 for ll=0:L/K-1 coef(jj+1,kk+1)=coef(jj+1,kk+1)+f(mod(jj-ll*K,L)+1)*exp(2*pi*i*kk*ll*K/L); end; end; end; coef=coef*sqrt(K/L); ltfat/inst/private/test_audfilters.m0000664000175000017500000000706212612404256017601 0ustar susnaksusnakfunction test_failed=test_audfilters() %-*- texinfo -*- %@deftypefn {Function} test_audfilters %@verbatim % Testing script for audfilters %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_audfilters.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed = 0; [f,fs]=greasy; % Get the test signal Ls=length(f); %% Generate a fractional ERBlet FB with V= 1 and a Hann window disp('--- Fractional non-uniform ERBlet FB, V=1, Hann window ---') [g_erb,a_erb,fc_erb]=audfilters(fs,Ls,'erb','fractional'); c_erb=filterbank(f,{'realdual',g_erb},a_erb); r_erb=2*real(ifilterbank(c_erb,g_erb,a_erb)); disp('Reconstruction error:') norm(f-r_erb) % Plot the FB response figure(1); R1=filterbankresponse(g_erb,a_erb,Ls,fs,'real','plot'); title('ERBlet FB response') ylabel('Magnitude'); % Plot frequency responses of individual filters gd_erb=filterbankrealdual(g_erb,a_erb,Ls); figure(2); subplot(2,1,1); filterbankfreqz(g_erb,a_erb,Ls,fs,'plot','linabs','posfreq'); title('ERBlet analysis filters') subplot(2,1,2); filterbankfreqz(gd_erb,a_erb,Ls,fs,'plot','linabs','posfreq'); title('Synthesis, dual filters') %% Generate a fractional uniform Barklet FB with V= 3 and a cosine window, band-limited analysis disp('--- Uniform Barklet FB, V=3, cosine window, frequency range = 100-6000 Hz ---') [g_bark,a_bark,fc_bark]=audfilters(fs,Ls,'flow',100,'fhigh',6000,'bark','fractionaluniform','spacing',1/3,'cosine'); c_bark=filterbank(f,{'realdual',g_bark},a_bark); r_bark=2*real(ifilterbank(c_bark,g_bark,a_bark)); disp('Reconstruction error:') norm(f-r_bark) % Plot the FB response figure(3); R2=filterbankresponse(g_bark,a_bark,Ls,fs,'real','plot'); title('Barklet FB response') ylabel('Magnitude'); % Plot frequency responses of individual filters gd_bark=filterbankrealdual(g_bark,a_bark,Ls); figure(4); subplot(2,1,1); filterbankfreqz(g_bark,a_bark,Ls,fs,'plot','linabs','posfreq'); title('Barklet analysis filters') subplot(2,1,2); filterbankfreqz(gd_bark,a_bark,Ls,fs,'plot','linabs','posfreq'); title('Synthesis, dual filters') %% Generate a uniform Mel FB with 30 filters and a triangular window disp('--- Uniform Mel FB, M=30, triangular window ---') [g_mel,a_mel,fc_mel,L_mel]=audfilters(fs,Ls,'mel','uniform','M',30,'tria'); if L_mel > Ls f = postpad(f,L_mel); end c_mel=filterbank(f,{'realdual',g_mel},a_mel); r_mel=2*real(ifilterbank(c_mel,g_mel,a_mel)); disp('Reconstruction error:') norm(f-r_mel) % Plot the FB response figure(5); R3=filterbankresponse(g_mel,a_mel,Ls,fs,'real','plot'); title('Mel FB response') ylabel('Magnitude'); % Plot frequency responses of individual filters gd_mel=filterbankrealdual(g_mel,a_mel,L_mel); figure(6); subplot(2,1,1); filterbankfreqz(g_mel,a_mel,Ls,fs,'plot','linabs','posfreq'); title('Mel analysis filters') subplot(2,1,2); filterbankfreqz(gd_mel,a_mel,L_mel,fs,'plot','linabs','posfreq'); title('Synthesis, dual filters') ltfat/inst/private/test_drihaczekdist.m0000664000175000017500000000274012612404256020265 0ustar susnaksusnakfunction test_failed = test_drihaczekdist Lr = [1, 19, 20]; test_failed = 0; disp(' =============== TEST_DRIHACZEKDIST =============='); for ii = 1: length(Lr) L = Lr(ii); for type = {'real', 'complex'} if strcmp(type{1}, 'real') f = tester_rand(L,1); else f = tester_crand(L,1); end r1 = ref_drihaczekdist(f); r2 = drihaczekdist(f); res = norm(r1-r2); [test_failed, fail] = ltfatdiditfail(res, test_failed); s = sprintf('DRIHACZEKDIST %3s L:%3i %0.5g %s', type{1}, L, res, fail); disp(s); end end %-*- texinfo -*- %@deftypefn {Function} test_drihaczekdist %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_drihaczekdist.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/test_ola.m0000664000175000017500000000220212612404256016201 0ustar susnaksusnak L=24; Lg=4; Lb=8; f=randn(L,1); g=randn(Lg,1); ref1=pconv(f,postpad(g,L)); ola1=ref_pconv_ola_postpad(f,g,Lb); norm(ref1-ola1) ref2=pconv(f,fir2long(g,L)); ola2=ref_pconv_ola_fir2long(f,g,Lb); norm(ref2-ola2) [ref2,ola2,ref2-ola2] %-*- texinfo -*- %@deftypefn {Function} test_ola %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_ola.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/test_blockfwt.m0000664000175000017500000000475312612404256017256 0ustar susnaksusnakfunction test_failed = test_blockfwt() test_failed = 0; disp('-------------TEST_BLOCKFWT--------------'); L = 567; W = [1,3]; Lb = [78,64,58,1021]; wa = {'dden3','ana:symorth1'}; ws = {'dden3','syn:symorth1'}; J = [5]; for wId = 1:numel(W) for lId = 1:numel(L) f = tester_rand(L(lId),W(wId)); for lbId = 1:numel(Lb) for waId=1:numel(wa) Fa = blockframeaccel(frame('fwt',wa{waId},J),Lb(lbId),'segola'); Fs = blockframeaccel(frame('fwt',ws{waId},J),Lb(lbId),'segola'); a = Fa.g.a(1); m = numel(Fa.g.g{1}.h); rmax = (a^J-1)/(a-1)*(m-1); f = postpad(f,L(lId)+rmax); block(f,'offline','L',Lb(lbId)); colC = {}; colfhat = {}; for ii=1:ceil(L(lId)/Lb(lbId)) fb = blockread(); c = blockana(Fa,fb); ccell = comp_fwtpack2cell(Fa,c); colC{end+1} = ccell; chat = cell2mat(ccell); fhat = blocksyn(Fs,chat,size(fb,1)); colfhat{end+1} = fhat; end err = 0; cwhole = fwt(f,wa{waId},J,'zero','cell'); for ii=1:numel(colC{1}) cc{ii} = cell2mat(cellfun(@(cEl) cEl{ii},colC','UniformOutput',0)); Ltmp = min([size(cwhole{ii},1),size(cc{ii},1)]); err = err + norm(cwhole{ii}(1:Ltmp,:)-cc{ii}(1:Ltmp,:)); end [test_failed,fail]=ltfatdiditfail(err,test_failed); fprintf('COEFS L:%3i, W:%3i, Lb=%3i, %s, err=%.4e %s\n',L(lId),W(wId),Lb(lbId),wa{waId},err,fail); fhat = cell2mat(colfhat.'); fhat = fhat(rmax+1:end,:); Lcrop = min([size(fhat,1),size(f,1)]); res = norm([f(1:Lcrop,:)-fhat(1:Lcrop,:)]); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf('REC L:%3i, W:%3i, Lb=%3i, %s, err=%.4e %s\n',L(lId),W(wId),Lb(lbId),wa{waId},res,fail); end end end end %-*- texinfo -*- %@deftypefn {Function} test_blockfwt %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_blockfwt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ref_tgabdual.m0000664000175000017500000000221212612404256017007 0ustar susnaksusnakfunction gd=ref_tgabdual(ttype,g,L,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_tgabdual %@verbatim %REF_WIN Compute appropriate dual window for transform % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_tgabdual.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<5 error('Too few input parameters.'); end; info=ref_transforminfo(ttype,L,a,M); gd=info.winscale*gabdual(g,info.a,info.M); ltfat/inst/private/ref_iedgtii_1.m0000664000175000017500000000276712612404256017101 0ustar susnaksusnakfunction f=ref_iedgtii_1(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_iedgtii_1 %@verbatim %REF_EDGTII_1 Reference Inverse Even DGT type II by DGT % Usage c=ref_edgt(f,g,a,M); % % The input window must be odd-centered of length 2L. % % a must be divisable by 2. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_iedgtii_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1)/2; W=size(c,2); N=L/a; clong=zeros(M,2*N,W); cr=reshape(c,M,N,W); % Copy the first half unchanged clong(:,1:N,:)=cr; % Copy the non modulated coefficients. clong(1,N+1:2*N,:)=cr(1,N:-1:1,:); % Copy the modulated coefficients. clong(2:M,N+1:2*N,:)=-cr(M:-1:2,N:-1:1,:); clong=reshape(clong,2*M*N,W); fdouble=ref_igdgt(clong,g,a,M,.5,0,floor(a/2)); f=fdouble(1:L,:); ltfat/inst/private/ref_adaptlasso.m0000664000175000017500000000611712612404256017367 0ustar susnaksusnakfunction [xo,N]=ref_adaptlasso(ttype,xi,lambda,group); %-*- texinfo -*- %@deftypefn {Function} ref_adaptlasso %@verbatim %TF_ADAPTLASSO adaptive lasso estimate (hard/soft) in time-frequency domain % Usage: xo=tf_adaptlasso(ttype,x,lambda,group); % [xo,N]=tf_grouplasso(ttype,x,lambda,group)); % % TF_ADAPTLASSO('hard',x,lambda,'time') will perform % time hard adaptive thresholding on x, i.e. coefficients % below a column dependent threshold are set to zero. The % threshold is computed from the l-1 norm of its % time-frequency column. % % TF_ADAPTLASSO('soft',x,lambda,'time') will perform % time soft adaptive thresholding on x, i.e. all coefficients % below a column dependent threshold are set to zero. % The threshold value is substracted from coefficients above % the threshold % % TF_ADAPTLASSO(ttype,x,lambda,'frequency') will perform % frequency adaptive thresholding on x, i.e. coefficients % below a row dependent threshold are set to zero. The % threshold is computed from the l-1 norm of its % time-frequency row. % % [xo,N]=TF_ADAPTLASSO(ttype,x,lambda,group) additionally returns % a number N specifying how many numbers where kept. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_adaptlasso.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(4,4,nargin)); group=lower(group); ttype=lower(ttype); tmp = size(xi); NbFreqBands = tmp(1); NbTimeSteps = tmp(2); xo = zeros(size(xi)); if (strcmp(group,'time')), for t=1:NbTimeSteps, threshold = norm(xi(:,t),1); threshold = lambda*threshold /(1+NbFreqBands*lambda); mask = abs(xi(:,t)) >= threshold; if(strcmp(ttype,'soft')) xo(mask,t) = sign(xi(mask,t)) .* (abs(xi(mask,t))-threshold); elseif(strcmp(ttype,'hard')) xo(mask,t) = sign(xi(mask,t)) .* abs(xi(mask,t)); end end elseif (strcmp(group,'frequency')), for f=1:NbFreqBands, threshold = norm(xi(f,:),1); threshold = lambda*threshold /(1+NbTimeSteps*lambda); mask = abs(xi(f,:)) >= threshold; if(strcmp(ttype,'soft')) xo(f,mask) = sign(xi(f,mask)) .* (abs(xi(f,mask))-threshold); elseif(strcmp(ttype,'hard')) xo(f,mask) = sign(xi(f,mask)) .* abs(xi(f,mask)); end end end if nargout==2 signif_map = (abs(xo)>0); N = sum(signif_map(:)); end ltfat/inst/private/ref_ufilterbank.m0000664000175000017500000000226512612404256017542 0ustar susnaksusnakfunction c=ref_ufilterbank(f,g,a); %-*- texinfo -*- %@deftypefn {Function} ref_ufilterbank %@verbatim %REF_UFILTERBANK Uniform filterbank by pconv % Usage: c=ref_ufilterbank(f,g,a); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_ufilterbank.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . [L,W]=size(f); N=L/a; M=numel(g); c=zeros(N,M,W,assert_classname(f)); for w=1:W for m=1:M c(:,m,w)=pfilt(f(:,w),g{m},a); end; end; ltfat/inst/private/ref_dsti_1.m0000664000175000017500000000236012612404256016413 0ustar susnaksusnakfunction c=ref_dsti_1(f) %-*- texinfo -*- %@deftypefn {Function} ref_dsti_1 %@verbatim %REF_DSTI_1 Reference Discrete Sine Transform type I % Usage: c=ref_dsti_1(f); % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dsti_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); if L==1 c=f; return; end; R=1/sqrt(2)*[zeros(1,L,assert_classname(f));... eye(L); zeros(1,L,assert_classname(f));... -flipud(cast(eye(L),assert_classname(f)))]; c=i*R'*dft(R*f); ltfat/inst/private/test_gabphasederivinterface.m0000664000175000017500000000540112612404256022117 0ustar susnaksusnakfunction test_falied = test_gabphasederivinterface test_failed = 0; %-*- texinfo -*- %@deftypefn {Function} test_gabphasederivinterface %@verbatim %Test whether the batch interface does the same thing as indivisual calls %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_gabphasederivinterface.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % TODO: test also wrong number of input arguments disp('---------------test_gabphasederivinterface---------------------'); f = tester_rand(128,1); a = 4; M = 8; g = 'gauss'; c = dgt(f,g,a,M); algCell = {'dgt','abs','phase','cross'}; algArgs = {{'dgt',f,g,a,M} {'abs',abs(c),g,a} {'phase',angle(c),a} {'cross',f,g,a,M} }; phaseconvCell = {'freqinv','timeinv','symphase','relative'}; dtypecombCell = { {'t','t'},... {'t','f'},... {'f','t'},... {'t','f','t'},... {'tt','t'},... {'ff','f'},... {'tf','f'},... {'tf','f','tt'},... {'tf','f','tt','tf'},... {'t','f','tt','ff','ft','tf'},... {'t','f','t','ff','tt','tt','tt'},... }; for algId=1:numel(algArgs) alg = algArgs{algId}; for dtypecombId=1:numel(dtypecombCell) dtypecomb = dtypecombCell{dtypecombId}; for phaseconvId=1:numel(phaseconvCell) phaseconv=phaseconvCell{phaseconvId}; individual = cell(1,numel(dtypecomb)); for dtypecompId = 1:numel(dtypecomb) individual{dtypecompId} = ... gabphasederiv(dtypecomb{dtypecompId},alg{:},phaseconv); end batch = gabphasederiv(dtypecomb,alg{:},phaseconv); res = sum(cellfun(@(iEl,bEl) norm(iEl(:)-bEl(:)),individual,batch))/numel(batch); [test_failed,failstring]=ltfatdiditfail( res,... test_failed,1e-8); flagcompString = sprintf('%s, ',dtypecomb{:}); fprintf('GABPHASEDERIV BATCH EQ alg:%s order:{%s} phaseconv:%s %d %s\n',alg{1},flagcompString(1:end-2),phaseconv,res,failstring); end end end ltfat/inst/private/test_fbreassign.m0000664000175000017500000001002512612404256017553 0ustar susnaksusnakfunction test_failed = test_fbreassign(varargin) test_failed = 0; try do_time = any(strcmp('time',varargin)); do_all = any(strcmp('all',varargin)); L = 44100; %-*- texinfo -*- %@deftypefn {Function} test_fbreassign %@verbatim %f = exp(2*pi*1i*((0:44099)/168))'; %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_fbreassign.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . f = sin(2*pi*((0:44099)/35+((0:44099)/300).^2)) + ... sin(2*pi*((0:44099)/10+((0:44099)/300).^2)) + ... sin(2*pi*((0:44099)/5-((0:44099)/450).^2)); f = 0.7*f'; %f=gspi; %f = zeros(L,1); %f(10000) = 1; % wavwrite(f,44100,16,'testclean.wav'); % f = gspi; % f = f(44101:88200); % fn = rand(44100,1)-.5; % fn = fn/norm(fn)*norm(f); % f = f+fn; % wavwrite(f,44100,16,'testnoisy.wav'); % f = gspi; % f = f(44101:88200); fs = 44100; [g,a,fc,L]=erbfilters(fs,44100,'fractional','spacing',1/12,'warped','complex'); if length(a) < length(g) a = [a;a(end-1:-1:2,:)]; end if do_time, tic; end [tgrad,fgrad,cs0,c]=filterbankphasegrad(f,g,a); if do_time, PGtime = toc; fprintf('PGtime=%d\n',PGtime); end if do_time, tic; end fc = cent_freqs(fs,fc); if do_time, CFtime = toc; fprintf('CFtime=%d\n',CFtime); end if do_time, tic; end [sr0,arg1,arg2]=filterbankreassign(cs0,tgrad,fgrad,a,fc); if do_time, RAtime = toc; fprintf('RAtime=%d\n',RAtime); end figure(1); clf; subplot(211); plotfilterbank(cs0,a,'fc',fs/2*fc,'db','dynrange',60); title('ERBlet spectrogram of 3 chirps'); subplot(212); plotfilterbank(sr0,a,'fc',fs/2*fc,'db','dynrange',60); title('Reassigned ERBlet spectrogram of 3 chirps'); colormap(flipud(gray)); %% clear g g2 g3 Lg = 28; a0 = 8*ones(168,1); cfreq0 = [0:84,-83:-1].'/84; gg = fftshift(firwin('hann',Lg)); for kk = 0:167 g{kk+1}.h = gg; g{kk+1}.fc = modcent(kk/84,2); g{kk+1}.offset = -Lg/2; g{kk+1}.realonly = 0; end if do_time, tic; end [tgrad,fgrad,c_s]=filterbankphasegrad(f,g,a0,filterbanklength(L,a0)); if do_time, PGtimeFIR = toc; fprintf('PGtimeFIR=%d\n',PGtimeFIR); end if do_time, tic; end [sr,arg0,arg1]=filterbankreassign(c_s,tgrad,fgrad,a0,cfreq0); if do_time, RAtimeFIR = toc; fprintf('RAtimeFIR=%d\n',RAtimeFIR); end Lg = 882; a = 90*ones(882,1); cfreq1 = [0:441,-440:-1].'/441; gg = fftshift(firwin('hann',Lg));%.*exp(-2*pi*1i*100*(-Lg/2:Lg/2-1).'./L); for kk = 0:881 g2{kk+1}.H = gg; g2{kk+1}.L = L; g2{kk+1}.foff = kk*L/882-Lg/2; g2{kk+1}.realonly = 0; g3{kk+1}.L = L; g3{kk+1}.H = comp_transferfunction(g2{kk+1},L); g3{kk+1}.foff = 0; g3{kk+1}.realonly = 0; end figure(2); clf; subplot(311); plotfilterbank(sr,a0,'fc',fs/2*cfreq0,'linabs'); if do_time, tic; end [tgrad,fgrad,c_s2]=filterbankphasegrad(f,g2,a,L); if do_time, PGtimeBL = toc; fprintf('PGtimeBL=%d\n',PGtimeBL); end if do_time, tic; end [sr2,arg0,arg1]=filterbankreassign(c_s2,tgrad,fgrad,a,cfreq1); if do_time, RAtimeBL = toc; fprintf('RAtimeBL=%d\n',RAtimeBL); end figure(2); subplot(312); plotfilterbank(sr2,a,'fc',fs/2*cfreq1,'linabs'); if do_all if do_time, tic; end [tgrad,fgrad,c_s3]=filterbankphasegrad(f,g3,a,L); if do_time, PGtimeL = toc; fprintf('PGtimeL=%d\n',PGtimeL); end if do_time, tic; end [sr3,arg0,arg1]=filterbankreassign(c_s3,tgrad,fgrad,a,cfreq1); if do_time, RAtimeL = toc; fprintf('RAtimeL=%d\n',RAtimeL); end figure(2); subplot(313); plotfilterbank(sr3,a,'fc',fs/2*cfreq1,'linabs'); end % % clear all catch test_failed = 1; end ltfat/inst/private/test_dwilt2.m0000664000175000017500000000424312612404256016642 0ustar susnaksusnakfunction test_failed=test_dwilt2 test_failed=0; disp(' =============== TEST_DWILT2 ================'); %-*- texinfo -*- %@deftypefn {Function} test_dwilt2 %@verbatim % Run some fixed test to test the interface. % This is not a thourough tester. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dwilt2.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % --- test 1 ---------------- L=64; M=8; Lf=63; W=3; f=tester_rand(Lf,Lf,W); g=pgauss(L,1); gd=wildual(g,M); [c,Ls]=dwilt2(f,g,M); r=idwilt2(c,gd,Ls); res=r-f; nres=norm(res(:)); [test_failed,fail]=ltfatdiditfail(nres,test_failed); % failed=''; % if nres>10e-10 % failed='FAILED'; % test_failed=test_failed+1; % end; s=sprintf('DWILT2 Lf:%3i L:%3i %0.5g %s',Lf,L,nres,fail); disp(s) % --- test 2 ------------------- L=256; M1=16; M2=32; W=1; f=tester_rand(L,L,1); g=pgauss(L,1); gd1=wildual(g,M1); gd2=wildual(g,M2); c=dwilt2(f,g,[M1,M2]); c2=ref_dwilt2(f,g,g,M1,M2); rc=c-c2; nres=norm(rc(:)); [test_failed,fail]=ltfatdiditfail(nres,test_failed); % failed=''; % if nres>10e-10 % failed='FAILED'; % test_failed=test_failed+1; % end; s=sprintf('DWILT2 REF M1:%3i M2:%3i %0.5g %s',M1,M2,nres,fail); disp(s) r=idwilt2(c,gd1,gd2); res=r-f; nres=norm(res(:)); [test_failed,fail]=ltfatdiditfail(nres,test_failed); % failed=''; % if nres>10e-10 % failed='FAILED'; % test_failed=test_failed+1; % end; s=sprintf('DWILT2 INV M1:%3i M2:%3i %0.5g %s',M1,M2,nres,fail); disp(s) ltfat/inst/private/test_windrivers.m0000664000175000017500000000265512612404256017636 0ustar susnaksusnakfunction test_failed=test_windrivers %-*- texinfo -*- %@deftypefn {Function} test_windrivers %@verbatim %TEST_WINDRIVERS Test if the window drivers pass certain construction %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_windrivers.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed=0; disp(' =============== TEST_WINDRIVERS ================'); a=5; M=6; L=60; % We expect that if the following commands finish, they produce the correct % output, so we only test that they do not generate fatal errors. g=gabwin('gauss',a,M,L); g=gabwin({'gauss',1},a,M,L); gd=gabwin('gaussdual',a,M,L); gd=gabwin({'tight','gauss'},a,M,L); g=gabwin({'dual',{'hann',M}},a,M,L); ltfat/inst/private/test_idft.m0000664000175000017500000000266412612404256016370 0ustar susnaksusnakfunction test_failed=test_idft Lr=[1, 19, 20]; test_failed=0; disp(' =============== TEST_IDFT =============='); for jj=1:length(Lr) L=Lr(jj); for n = 1:2 if (n==1) type = 'complex'; c=tester_crand(L,1); elseif (n==2) type = 'real'; c=tester_rand(L,1); end f1=idft(c); f2=ref_idft(c); res=norm(f1-f2); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('IDFT %6s L:%3i %0.5g %s',type,L,res,fail); disp(s); end end; end; %-*- texinfo -*- %@deftypefn {Function} test_idft %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_idft.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ref_wmdct.m0000664000175000017500000000201212612404256016340 0ustar susnaksusnakfunction c=ref_wmdct(f,g,M) %-*- texinfo -*- %@deftypefn {Function} ref_wmdct %@verbatim %REF_WMDCT Reference WMDCT % Usage: c=ref_wmdct(f,g,M); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_wmdct.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . c=ref_dwiltiii(f,g,M,M); ltfat/inst/private/test_uwfbt.m0000664000175000017500000000743412612404256016571 0ustar susnaksusnakfunction test_failed = test_uwfbt(verbose) %-*- texinfo -*- %@deftypefn {Function} test_uwfbt %@verbatim %TEST_UWFBTPR % % Checks perfect reconstruction of the general wavelet transform of different % filters % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_uwfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('========= TEST UWPFBT ============'); global LTFAT_TEST_TYPE; tolerance = 1e-8; if strcmpi(LTFAT_TEST_TYPE,'single') tolerance = 4e-6; end scaling = {'scale','sqrt','noscale'}; scalingInv = scaling(end:-1:1); test_failed = 0; if(nargin>0) verbose = 1; else verbose = 0; end type = {'dec'}; ext = {'per'}; J = 4; %! Mild tree wt1 = wfbtinit({'db10',6,'full'}); wt1 = wfbtremove(1,1,wt1,'force'); wt1 = wfbtremove(2,1,wt1,'force'); %! Hardcore tree wt2 = wfbtinit({'db3',1}); wt2 = wfbtput(1,1,'mband1',wt2); wt2 = wfbtput(2,2,'mband1',wt2); wt2 = wfbtput(3,3,'mband1',wt2); wt2 = wfbtput(3,1,'db10',wt2); wt2 = wfbtput(4,1,'dgrid2',wt2); wt2 = wfbtput(5,1,'db2',wt2); % wt2 = wfbtinit(); % wt2 = wfbtput(0,0,{'db',4},wt2); % wt2 = wfbtput(1,0,{'algmband',1},wt2); % wt2 = wfbtput(1,1,{'hden',3},wt2); % wt2 = wfbtput(2,0,{'dgrid',2},wt2); % wt2 = wfbtput(2,1,{'dgrid',2},wt2); test_filters = { {'algmband1',J} % 3 filters, uniform, crit. sub. {'algmband2',J} % 4 filters, uniform, crit. sub. {'db10',J} %{{'hden',3},J} % 3 filters, non-uniform, no crit. sub. no correct {'dgrid1',J} % 4 filters. sub. fac. 2 wt1 wt2 }; %testLen = 4*2^7-1;%(2^J-1); testLen = 53; f = tester_rand(testLen,1); for scIdx = 1:numel(scaling) for extIdx=1:length(ext) extCur = ext{extIdx}; for typeIdx=1:length(type) for tt=1:length(test_filters) actFilt = test_filters{tt}; if verbose, if(~isstruct(actFilt))fprintf('J=%d, filt=%s, ext=%s, inLen=%d \n',actFilt{2},actFilt{1},extCur,length(f)); else disp('Custom'); end; end; c = uwfbt(f,actFilt,scaling{scIdx}); fhat = iuwfbt(c,actFilt,scalingInv{scIdx}); err = norm(f-fhat,'fro'); [test_failed,fail]=ltfatdiditfail(err,test_failed,tolerance); if(~verbose) if(~isstruct(actFilt)) fprintf('J=%d, %5.5s, ext=%s, %s L=%d, err=%.4e %s \n',actFilt{2},actFilt{1},extCur,scaling{scIdx},size(f,1),err,fail); else fprintf('Custom, %s, err=%.4e %s\n',scaling{scIdx},err,fail); end; end if strcmpi(fail,'FAILED') if verbose if(~isstruct(actFilt)) fprintf('err=%d, filt=%s, ext=%s, inLen=%d \n',err,actFilt{1},extCur,testLen);else disp('Fail. Custom'); end; figure(1);clf;stem([f,fhat]); figure(2);clf;stem([f-fhat]); break; end end if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end if test_failed && verbose, break; end; end end ltfat/inst/private/ref_ambiguityfunction.m0000664000175000017500000000442612612404256020775 0ustar susnaksusnakfunction A=ref_ambiguityfunction(f, g) %-*- texinfo -*- %@deftypefn {Function} ref_ambiguityfunction %@verbatim %REF_AMBIGUITYFUNCTION Reference ambiguity function % Usage: A=ref_ambiguityfunction(f) % A=ref_ambiguityfunction(f,g) % % REF_AMBIGUITYFUNCTION(f) computes the ambiguity function of f. % REF_AMBIGUITYFUNCTION(f,g) computes the cross-ambiguity function of f and g. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_ambiguityfunction.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven if ~all(length(f)==length(g)) error('%s: f and g must have the same length.', upper(mfilename)); end; L = length(f); H = floor(L/2); R = zeros(L,L); A = zeros(L,L); % Compute the analytic representation of f if (nargin == 1) if isreal(f) z = fft(f); z(2:L-H) = 2*z(2:L-H); z(H+2:L) = 0; z1 = ifft(z); z2 = z1; else z1 = f; z2 = z1; end elseif (nargin == 2) if isreal(f) || isreal(g) z1 = fft(f); z1(2:L-H) = 2*z1(2:L-H); z1(H+2:L) = 0; z1 = ifft(z1); z2 = fft(g); z2(2:L-H) = 2*z2(2:L-H); z2(H+2:L) = 0; z2 = ifft(z2); else z1 = f; z2 = g; end end % Compute instantaneous autocorrelation matrix R for l = 0 : L-1; for m = -min([L-l, l, round(L/2)-1]) : min([L-l, l, round(L/2)-1]); R(mod(L+m,L)+1, l+1) = z1(mod(l+m, L)+1).*conj(z2(mod(l-m, L)+1)); end end % Compute ambiguity function A for hh=0:L-1 for ii=0:L-1 for jj = 0:L-1 A(hh+1, ii+1) = A(hh+1, ii+1) + R(jj+1, ii+1) .* exp(-2*pi*i*hh*jj/L); end end end A = fftshift(fft2(A)); ltfat/inst/private/test_freqorder.m0000664000175000017500000000446712612404256017436 0ustar susnaksusnakfunction test_failed = test_freqorder test_failed = 0; disp('------------TEST_FREQORDER--------------'); %-*- texinfo -*- %@deftypefn {Function} test_freqorder %@verbatim % This tests whether subbands of a wavelet filterbank tree are % ordered according to frequency %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_freqorder.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . wt = wfbtinit({'cmband3',1},'nat'); wt = wfbtput(1,1:2,'cmband3',wt); wt = wfbtput(2,0,'cmband3',wt); % Bark-like filterbank tree % Creating tree depicted in Figure 8 in the reference. w = wfbtinit({'cmband3',1}); w = wfbtput(1,0,'cmband6',w); w = wfbtput(1,1,'cmband3',w); w = wfbtput(2,0:1,'cmband5',w); w = wfbtput(2,2:3,'cmband2',w); % Well-tempered musical scale filterbank tree % Creating tree depicted in Figure 9 in the reference. w2 = wfbtinit({'cmband4',1}); w2 = wfbtput(1,0:1,'cmband6',w2); w2 = wfbtput(2,0:1,'cmband4',w2); w2 = wfbtput(3,1:4,'cmband4',w2); w3 = wfbtinit({'cmband3',5,'full'}); w3 = wfbtremove(4,0,w3,'force'); w3 = wfbtremove(3,9,w3,'force'); testcases = { {'cmband3',5,'full'},... {'cmband2',5,'full'},... {'cmband5',4,'full'},... wt,w,w2,w3}; for ii = 1:numel(testcases) [g,a]=wfbt2filterbank(testcases{ii},'freq'); glmax = max(cellfun(@(gEl)numel(gEl.h),g)); F = filterbankfreqz(g,a,2*glmax); [~,Fidpeaks] = max(abs(F)); fprintf('Tree %i:',ii) if any(Fidpeaks(2:end)-Fidpeaks(1:end-1) < 0) fprintf(' FAILED'); test_failed=test_failed +1; else fprintf(' OK'); end fprintf('\n'); end ltfat/inst/private/test_filterbank.m0000664000175000017500000001275012612404256017560 0ustar susnaksusnakfunction test_failed=test_filterbank %-*- texinfo -*- %@deftypefn {Function} test_filterbank %@verbatim %TEST_FILTERBANK test the filterbank codes % Usage: test_filterbank() % % This function checks the exact reconstruction (up to numeric precision) % of the functions ufilterbank and ifilterbank, when using dual windows computed with % filterbankdual / filterbankrealdual, or tight windows computed with % filterbanktight / filterbankrealtight %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_filterbank.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed=0; disp(' =============== TEST_FILTERBANK ================'); which comp_filterbank_td which comp_filterbank_fft which comp_filterbank which comp_ifilterbank_td which comp_ifilterbank_fft which comp_ifilterbank M=6; a=3; N=4; L=a*N; g=cell(1,M); for ii=1:M g{ii}=tester_crand(L,1); end; gd = filterbankdual(g,a,L); gt = filterbanktight(g,a,L); gtreal=filterbankrealtight(g,a,L); %% Check that filterbankbounds detect the tight frame [AF,BF]=filterbankbounds(gt,a,L); [test_failed,fail]=ltfatdiditfail(BF-1,test_failed); s=sprintf(['FB FB B %0.5g %s'],BF-1,fail); disp(s) [test_failed,fail]=ltfatdiditfail(AF-1,test_failed); s=sprintf(['FB FB A %0.5g %s'],AF-1,fail); disp(s) %% check filterbankrealbounds [AF,BF]=filterbankrealbounds(gtreal,a,L); [test_failed,fail]=ltfatdiditfail(BF-1,test_failed); s=sprintf(['FB FBR B %0.5g %s'],BF-1,fail); disp(s) [test_failed,fail]=ltfatdiditfail(AF-1,test_failed); s=sprintf(['FB FBR A %0.5g %s'],AF-1,fail); disp(s) for w=1:3 f=tester_crand(L,w); c_u_td = ufilterbank(f,g,a,'crossover',0); c_u_ref = ref_ufilterbank(f,g,a); c_nu_td = filterbank(f,g,a,'crossover',0); c_u_fft = ufilterbank(f,g,a,'crossover',1e20); c_nu_fft = filterbank(f,g,a,'crossover',1e20); %% check that filterbank and ufilterbank produce the same results. res=0; for m=1:M res=res+norm(c_nu_td{m}-squeeze(c_u_td(:,m,:))); end; [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['FB MATCH W:%2i %0.5g %s'],w,res,fail); disp(s) %% check that ufilterbank match its reference res=c_u_td-c_u_ref; res=norm(res(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['FB RES W:%2i %0.5g %s'],w,res,fail); disp(s) %% check that filterbank in time-side and frequency side match res=norm(cell2mat(c_nu_fft)-cell2mat(c_nu_td)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['FB TD FD W:%2i %0.5g %s'],w,res,fail); disp(s) %% check that ufilterbank in time-side and frequency side match res=norm(c_u_fft(:)-c_u_td(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['UFB TD FD W:%2i %0.5g %s'],w,res,fail); disp(s) %% Check that ufilterbank is invertible using dual window r=ifilterbank(c_u_td,gd,a); res=norm(f-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['FB DUAL W:%2i %0.5g %s'],w,res,fail); disp(s) %% Test that ifilterbank returns the same for the uniform and non-uniform %% case %To avoid warning whrn w==1 if w==1 c_nu_td=mat2cell(c_u_td,size(c_u_td,1),ones(1,M)); else c_nu_td=mat2cell(c_u_td,size(c_u_td,1),ones(1,M),w); end c_nu_td=cellfun(@squeeze,c_nu_td,'UniformOutput',false); r_nu=ifilterbank(c_nu_td,gd,a); res=norm(r_nu-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['FB INV MATCH W:%2i %0.5g %s'],w,res,fail); disp(s) %% Check that filterbanktight gives a tight filterbank c_ut = ufilterbank(f,gt,a); r=ifilterbank(c_ut,gt,a); res=norm(f-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['FB TIGHT W:%2i %0.5g %s'],w,res,fail); disp(s) %% Check the real valued systems, dual fr=tester_rand(L,1); gdreal=filterbankrealdual(g,a,L); c_ur=ufilterbank(fr,g,a); rreal=2*real(ifilterbank(c_ur,gdreal,a)); res=norm(fr-rreal); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['FB RDUAL W:%2i %0.5g %s'],w,res,fail); disp(s) %% Check the real valued systems, tight ct = ufilterbank(fr,gtreal,a); rrealt = 2*real(ifilterbank(ct,gtreal,a)); res=norm(fr-rrealt); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['FB RTIGHT W:%2i %0.5g %s'],w,res,fail); disp(s) %% check filterbankwin r=ifilterbank(c_u_td,{'dual',g},a); res=norm(f-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['FB WIN DUAL %0.5g %s'],res,fail); disp(s) end; ltfat/inst/private/ref_idwiltiv_1.m0000664000175000017500000000425612612404256017311 0ustar susnaksusnakfunction [f]=ref_idwiltiv_1(coef,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_idwiltiv_1 %@verbatim %REF_IDWILTIV_1 Reference IDWILTIV by IDGT type IV % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_idwiltiv_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author : Peter L. Soendergaard L=size(g,1); N=L/a; W=size(coef,2); coef=reshape(coef,M,N,W); coef2=zeros(2*M,N,W); if 0 % --- loop version --- for n=0:N-1 for m=0:M-1 if rem(m+n,2)==0 coef2(m+1,n+1,:) = exp(i*pi/4)/sqrt(2)*coef(m+1,n+1,:); coef2(2*M-m,n+1,:) = exp(i*pi*3/4)/sqrt(2)*coef(m+1,n+1,:); else coef2(m+1,n+1,:) = exp(-i*pi/4)/sqrt(2)*coef(m+1,n+1,:); coef2(2*M-m,n+1,:) = exp(-i*pi*3/4)/sqrt(2)*coef(m+1,n+1,:); end; end; end; else % --- Vector version --- coef2(1:2:M,1:2:N,:) = exp(i*pi/4)/sqrt(2)*coef(1:2:M,1:2:N,:); coef2(2*M:-2:M+1,1:2:N,:) = exp(i*pi*3/4)/sqrt(2)*coef(1:2:M,1:2:N,:); coef2(1:2:M,2:2:N,:) = exp(-i*pi/4)/sqrt(2)*coef(1:2:M,2:2:N,:); coef2(2*M:-2:M+1,2:2:N,:) = exp(-i*pi*3/4)/sqrt(2)*coef(1:2:M,2:2:N,:); coef2(2:2:M,1:2:N,:) = exp(-i*pi/4)/sqrt(2)*coef(2:2:M,1:2:N,:); coef2(2*M-1:-2:M+1,1:2:N,:) = exp(-i*pi*3/4)/sqrt(2)*coef(2:2:M,1:2:N,:); coef2(2:2:M,2:2:N,:) = exp(i*pi/4)/sqrt(2)*coef(2:2:M,2:2:N,:); coef2(2*M-1:-2:M+1,2:2:N,:) = exp(i*pi*3/4)/sqrt(2)*coef(2:2:M,2:2:N,:); end; f=ref_igdgt(reshape(coef2,2*M*N,W),g,a,2*M,0.5,0.5,0); ltfat/inst/private/ref_dgtns.m0000664000175000017500000000255412612404256016354 0ustar susnaksusnakfunction [c]=ref_dgtns(f,gamma,V) %-*- texinfo -*- %@deftypefn {Function} ref_dgtns %@verbatim %REF_DGT Reference Discrete Gabor transform for non-separable lattices. % Usage: c=ref_dgtns(f,gamma,V); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transfpose. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgtns.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Calculate the parameters that was not specified. L=size(gamma,1); % Create lattice and Gabor matrix. lat=ref_lattice(V,L); G=ref_gaboratoms(gamma,lat); % Apply matrix to f. c=G'*f; ltfat/inst/private/test_zak.m0000664000175000017500000000330712612404256016222 0ustar susnaksusnakfunction test_failed=test_zak disp(' =============== TEST_ZAK ================'); Lr=[1,12,12,12,12,12,15,15,15]; Kr=[1, 1, 2, 3, 4, 6, 3, 5,15]; ref_failed=0; inv_failed=0; W=1; for ii=1:length(Lr) L=Lr(ii); K=Kr(ii); f=tester_rand(L,W)+i*rand(L,W)-.5-i*.5; ccref=ref_zak(f,K); cc=zak(f,K); r=izak(cc); res=ccref-cc; nres=norm(res(:)); ninv=norm(f-r); s=sprintf('REF L:%3i K:%3i %0.5g',L,K,nres); disp(s) [ref_failed,fail]=ltfatdiditfail(nres,ref_failed); % if nres>10e-10 % disp('FAILED'); % ref_failed=ref_failed+1; % end; s=sprintf('INV L:%3i K:%3i %0.5g',L,K,ninv); disp(s) [inv_failed,fail]=ltfatdiditfail(ninv,inv_failed); % if nres>10e-10 % disp('FAILED'); % inv_failed=inv_failed+1; % end; end; test_failed=ref_failed+inv_failed; %-*- texinfo -*- %@deftypefn {Function} test_zak %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_zak.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ref_iedgt.m0000664000175000017500000000340312612404256016323 0ustar susnaksusnakfunction f=ref_iedgt(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_iedgt %@verbatim %REF_IEDGT Reference Inverse Even DGT % Usage f=ref_edgt(c,g,a,M); % % The input window must be odd-centered of length 2L. % % M must be even. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_iedgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L2=size(g,1); W=size(c,2); L=L2/2; M=L/b; N=L/a; F=zeros(L,M*N); l=(0:L-1).'; lsecond=(2*L-1:-1:L).'; for m=0:M/2-1 F(:,m+1) = exp(2*pi*i*m*b*(l+.5)/L).*g(l+1) + ... exp(-2*pi*i*m*b*(l+.5)/L).*g(lsecond+1); gshift=circshift(g,L); F(:,m+1+M*(N-1)+M/2) = exp(2*pi*i*m*b*(l+.5)/L).*gshift(l+1) + ... exp(-2*pi*i*m*b*(l+.5)/L).*gshift(lsecond+1); end; % Scale the first modulations correctly F(:,1)=F(:,1)/sqrt(2); F(:,M*(N-1)+M/2+1)=F(:,M*(N-1)+M/2+1)/sqrt(2); %for n=0:N-1 % for m=0:M-1 % gshift=circshift(gnew,n*a); % F(:,M*n+m+1)=exp(2*pi*i*m*b*(l+.5)/L).*gshift(l+1) + ... % exp(-2*pi*i*m*b*(l+.5)/L).*gshift(lsecond+1); % end; %end; f=F*c; ltfat/inst/private/ref_dstiii_1.m0000664000175000017500000000274112612404256016740 0ustar susnaksusnakfunction c=ref_dstiii_1(f) %-*- texinfo -*- %@deftypefn {Function} ref_dstiii_1 %@verbatim %REF_DSTII Reference Discrete Sine Transform type III % Usage: c=ref_dstiii(f); % % This is the inverse of REF_DSTII %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dstiii_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); if ~isreal(f) c=ref_dstiii_1(real(f))+i*ref_dstiii_1(imag(f)); else % Scale coefficients to obtain orthonormal transform. f(end,:)=sqrt(2)*f(end,:); f=-f*sqrt(2*L); % Make 4x long vector lf=[zeros(1,W);... i*f;... i*flipud(f(1:end-1,:));... zeros(1,W);... -i*f;... -i*flipud(f(1:end-1,:));... ]; fflong=real(ifft(lf)); c=fflong(2:2:2*L,:); end ltfat/inst/private/ref_spreadop_1.m0000664000175000017500000000251512612404256017267 0ustar susnaksusnakfunction fout=ref_spreadop_1(f,c,a); %-*- texinfo -*- %@deftypefn {Function} ref_spreadop_1 %@verbatim %REF_SPREADOP_1 Ref. Spreading function % Usage: h=ref_spreadfun_1(f,c,a); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_spreadop_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %XXX Wrong sign convention W=size(f,2); M=size(c,1); N=size(c,2); L=N*a; [c,h_a,h_m]=gcd(a,M); h_a=-h_a; p=a/c; q=M/c; d=N/q; fout=zeros(L,W); cf1=fft(coef); for j=0:M-1 for m=0:b-1 for n=0:N-1 fout(j+m*M+1,:)=fout(j+m*M+1,:)+cf1(j+1,n+1)*f(mod(j+m*M-n*a,L)+1,:); end; end; end; ltfat/inst/private/ref_dctiv.m0000664000175000017500000000233212612404256016340 0ustar susnaksusnakfunction c=ref_dctiv(f) %-*- texinfo -*- %@deftypefn {Function} ref_dctiv %@verbatim %REF_DCTIV Reference Discrete Consine Transform type IV % Usage: c=ref_dctiv(f); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dctiv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); % Create weights. w=sqrt(2/L); % Create transform matrix. F=zeros(L); for m=0:L-1 for n=0:L-1 F(m+1,n+1)=w*cos(pi*(n+.5)*(m+.5)/L); end; end; % Compute coefficients. c=F*f; ltfat/inst/private/rand_rhpe.m0000664000175000017500000000267712612404256016351 0ustar susnaksusnakfunction f=rand_rhpe(varargin) %-*- texinfo -*- %@deftypefn {Function} rand_rhpe %@verbatim %RAND_HPE Random real HPE even function. % Usage: f=rand_rhpe(s); % % RAND_RHPE(s) generates an array of size s, which is real and HPE along the % first dimension. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/rand_rhpe.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if isnumeric(varargin); s=varargin; else s=cell2mat(varargin); end; if length(s)==1 error('To avoid confusion, the size must be at least two-dimensional.'); end; shalf=s; shalf(1)=floor(shalf(1)/2); f=tester_rand(shalf)-.5; if rem(s(1),2)==0 f=[f;flipud(f)]; else f=[f; ... tester_rand([1 s(2:end)])-.5; ... flipud(f)]; end; ltfat/inst/private/test_extended_ltfat.m0000664000175000017500000000334212612404256020426 0ustar susnaksusnakfunction test_extended_ltfat() %-*- texinfo -*- %@deftypefn {Function} test_extended_ltfat %@verbatim % This test suite runs extended tests which either: % % Take long time to finish % % Their failure can only be checked by inspecting plots % % We do not care whether they work with single precision or not. % % Any that should be run at least before doing the release % but do not fit to be included in test_all_ltfat % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_extended_ltfat.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . tests_todo = { 'erbfilters',... 'fbreassign',... 'fbwarped_framebounds',... 'wfilt',... 'argfirwin',... 'gabphasederiv',... 'audfilters' }; total_tests_failed=0; list_of_failed_tests={}; for name = tests_todo tmpfailed = feval(['test_',name{1}]); if tmpfailed>0 list_of_failed_tests{end+1} = ['test_',name{1}]; total_tests_failed = total_tests_failed + tmpfailed; end end ltfat/inst/private/test_undeceq.m0000664000175000017500000000442012612404256017056 0ustar susnaksusnakfunction test_failed=test_undeceq %-*- texinfo -*- %@deftypefn {Function} test_undeceq %@verbatim % This function test whether fwt is just a subsampled version of ufwt, wfbt % of uwfbt etc. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_undeceq.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed = 0; J = 5; L = 128; f = tester_rand(L,1); wav = {'db4','spline4:4'}; for ii = 1:numel(wav) w = fwtinit(wav{ii}); [c,info] = fwt(f,wav{ii},J,'cell'); cu = ufwt(f,wav{ii},J,'noscale'); err = 0; suFac = size(cu,1)./info.Lc; for jj = 1:numel(c) err = err + norm(c{jj}-cu(1:suFac(jj):end,jj)); end [test_failed,fail]=ltfatdiditfail(err,test_failed); fprintf('DWT J=%d, %6.6s, L=%d, err=%.4e %s \n',J,wav{ii},length(f),err,fail); end for ii = 1:numel(wav) [c,info] = wfbt(f,{wav{ii},J}); cu = uwfbt(f,{wav{ii},J},'noscale'); err = 0; suFac = size(cu,1)./info.Lc; for jj = 1:numel(c) err = err + norm(c{jj}-cu(1:suFac(jj):end,jj)); end [test_failed,fail]=ltfatdiditfail(err,test_failed); fprintf('WFBT J=%d, %6.6s, L=%d, err=%.4e %s \n',J,wav{ii},length(f),err,fail); end for ii = 1:numel(wav) [c,info] = wpfbt(f,{wav{ii},J}); cu = uwpfbt(f,{wav{ii},J},'noscale'); err = 0; suFac = size(cu,1)./info.Lc; for jj = 1:numel(c) err = err + norm(c{jj}-cu(1:suFac(jj):end,jj)); end [test_failed,fail]=ltfatdiditfail(err,test_failed); fprintf('WPFBT J=%d, %6.6s, L=%d, err=%.4e %s \n',J,wav{ii},length(f),err,fail); end ltfat/inst/private/test_dsft.m0000664000175000017500000000315612612404256016377 0ustar susnaksusnakfunction test_failed = test_dsft Lr = [2, 19, 20]; test_failed = 0; disp(' =============== TEST_DSFT =============='); for ii = 1: length(Lr) L = Lr(ii); for n = 1:4 if (n == 1) type = 'real'; L2 = L; F = tester_rand(L,L); elseif (n == 2) type = 'real'; L2 = L+1; F = tester_rand(L,L2); elseif (n == 3) type = 'complex'; L2 = L; F = tester_crand(L,L); else type = 'complex'; L2 = L+1; F = tester_crand(L,L2); end r1 = ref_dsft(F); r2 = dsft(F); res = norm(r1-r2); [test_failed, fail] = ltfatdiditfail(res, test_failed); s = sprintf('DSFT %3s size: %dx%d %0.5g %s', type, L, L2, res, fail); disp(s); end end %-*- texinfo -*- %@deftypefn {Function} test_dsft %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dsft.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/test_hermbasis.m0000664000175000017500000000530112612404256017406 0ustar susnaksusnakLr=[100,101,102,103]; test_failed=0; highordercoef=0.80; disp(' =============== TEST_HERMBASIS =========='); for ii=1:length(Lr) for n=2:4 L=Lr(ii); highorder=round(L*highordercoef); [H,D]=hermbasis(L,n); r1=(H*H')-eye(L); res=norm(r1,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('HERMBASIS orth L:%3i n:%3i %0.5g %s',L,n,res,fail); disp(s); f=tester_crand(L,1); res=norm(dft(f)-H*diag(D)*H'*f); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('HERMBASIS DFT L:%3i n:%3i %0.5g %s',L,n,res,fail); disp(s); [H,D]=pherm(L,0:highorder-1,'fast'); res=norm(dft(H)-H*diag(D)); [test_failed,fail]=ltfatdiditfail(res,test_failed); end; s=sprintf('PHERM DFT L:%3i %0.5g %s',L,res,fail); disp(s); [H,D]=pherm(L,0:highorder-1,'fast','qr'); res=norm(dft(H)-H*diag(D)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('PHERM QR DFT L:%3i %0.5g %s',L,res,fail); disp(s); r1=(H'*H)-eye(highorder); res=norm(r1,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('PHERM QR orth L:%3i %0.5g %s',L,res,fail); disp(s); [H,D]=pherm(L,0:highorder-1,'fast','polar'); res=norm(dft(H)-H*diag(D)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('PHERM POL DFT L:%3i %0.5g %s',L,res,fail); disp(s); r1=(H'*H)-eye(highorder); res=norm(r1,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('PHERM POL orth L:%3i %0.5g %s',L,res,fail); disp(s); end; %-*- texinfo -*- %@deftypefn {Function} test_hermbasis %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_hermbasis.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ltfatdiditfail.m0000664000175000017500000000263712612404256017367 0ustar susnaksusnakfunction [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); %-*- texinfo -*- %@deftypefn {Function} ltfatdiditfail %@verbatim %LTFATDIDITFAIL Did a test fail % % [test_fail,fail]=LTFATDIDITFAIL(res,test_fail) updates test_fail if % res is above threshhold and outputs the word FAIL in the variable % fail. Use only in testing scripts. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/ltfatdiditfail.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . global LTFAT_TEST_TYPE; if nargin<3 tolerance=1e-10; if strcmpi(LTFAT_TEST_TYPE,'single') tolerance=2e-4; end end; fail=''; if (abs(res)>tolerance) || isnan(res) fail='FAILED'; test_failed=test_failed+1; end; ltfat/inst/private/test_pconv.m0000664000175000017500000000420412612404256016557 0ustar susnaksusnakfunction test_failed=test_pconv Lf=[9, 10 9, 9, 1]; Wf=[1, 1, 3, 1, 1]; Lg=[9, 10 9, 9, 1]; Wg=[1, 1, 1, 3, 1]; ctypes={'default','r','rr'}; test_failed=0; disp(' =============== TEST_PCONV =============='); for jj=1:length(Lf) for ii=1:3 for type = {'real','complex'} ctype=ctypes{ii}; if strcmp(type{1},'complex') f=tester_crand(Lf(jj), Wf(jj)); g=tester_crand(Lg(jj), Wg(jj)); else f=tester_rand(Lf(jj), Wf(jj)); g=tester_rand(Lg(jj), Wg(jj)); end h1=pconv(f,g,ctype); h2cell = {}; if Wf(jj) == 1 for wId = 1:Wg(jj) h2cell{end+1}=ref_pconv(f,g(:,wId),ctype); end else for wId = 1:Wf(jj) h2cell{end+1}=ref_pconv(f(:,wId),g,ctype); end end h2 = cell2mat(h2cell); res=norm(h1(:)-h2(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('PCONV %3s %6s %0.5g %s',ctype,type{1},res,fail); disp(s); end end end %-*- texinfo -*- %@deftypefn {Function} test_pconv %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_pconv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/test_pherm.m0000664000175000017500000000242412612404256016547 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} test_pherm %@verbatim % This script test the quality of the Hermite implementation. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_pherm.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % There seem to be some numerical problems for ii>66 L=200; H=pherm(L,0:159,'fast','qr'); H1=H(:,1:4:end); H2=H(:,2:4:end); H3=H(:,3:4:end); H4=H(:,4:4:end); norm(H1'*H1) norm(H2'*H2) norm(H3'*H3) norm(H4'*H4) norm(H1'*H2) norm(H1'*H3) norm(H1'*H4) norm(H2'*H3) norm(H2'*H4) norm(H3'*H4) norm(abs(H./dft(H))-1) ltfat/inst/private/ref_dctiii.m0000664000175000017500000000237712612404256016505 0ustar susnaksusnakfunction c=ref_dctiii(f) %-*- texinfo -*- %@deftypefn {Function} ref_dctiii %@verbatim %REF_DCTII Reference Discrete Consine Transform type III % Usage: c=ref_dctii(f); % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dctiii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); % Create weights. w=ones(L,1); w(1)=1/sqrt(2); w=w*sqrt(2/L); % Create transform matrix. F=zeros(L); for m=0:L-1 for n=0:L-1 F(m+1,n+1)=w(n+1)*cos(pi*n*(m+.5)/L); end; end; % Compute coefficients. c=F*f; ltfat/inst/private/ref_gabmulappr.m0000664000175000017500000001044712612404256017367 0ustar susnaksusnakfunction sym=ref_gabmulappr(T,p2,p3,p4,p5); %-*- texinfo -*- %@deftypefn {Function} ref_gabmulappr %@verbatim %GABMULMAT Best Approximation by a Gabor multiplier. % Usage: sym=gabmulappr(T,a,M); % sym=gabmulappr(T,g,a,M); % sym=gabmulappr(T,ga,gs,a,M); % % Input parameters: % T : matrix to be approximated % g : analysis/synthesis window % ga : analysis window % gs : synthesis window % a : Length of time shift. % M : Number of channels. % % Output parameters: % sym : symbol % % GABMULAPPR(T,g,a,M) will calculate the best approximation of the given % matrix T in the frobenius norm by a Gabor multiplier determined by the % symbol sym over the rectangular time-frequency lattice determined by a % and M. The window g will be used for both analysis and synthesis. % IMPORTANT: The chosen Gabor system has to be a frame sequence! % % GABMULAPPR(T,a,M) will do the same using an optimally concentrated, % tight Gaussian as window function. % % GABMULAPPR(T,gs,ga,a) will do the same using the window ga for analysis % and gs for synthesis. % % SEE ALSO: GABMUL, GABMULINV % % In this algorithm first the 'lower symbol' is calcualted, then the % so-called 'upper symbol'. % % The lower symbol is the inner product < T , P_lambda > where P_lambda % are the projections gamma_lambda otimes g_lambda . These operators % form a Bessel sequence and the lower symbol, the lower symbol is the % analysis sequence of T using this Bessel sequence. % % The upper symbol is the inner product < T , Q_lambda > where % Q_lambda are the dual projections operator. Therefore the upper % symbol is the analysis with the dual sequence (if the P have formed a % frame). Because the % % References : % P. Balazs, Basic Definition and Properties of Bessel Multipliers, % Journal of Mathematical Analysis and Applications 325(1):571--585, % January 2007. % P.~Balazs, Hilbert-Schmidt operators and frames - classification, best % approximation by multipliers and algorithms, International Journal % of Wavelets, Multiresolution and Information Processing, accepted, % to appear. % H. G. Feichtinger, M. Hampjes, G. Kracher, "Approximation of matrices % by Gabor multipliers" , IEEE Signal Procesing Letters Vol. 11, % Issue 11, pp 883-- 886 (2004) % % Author: P. Balazs (XXL) %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_gabmulappr.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(3,5,nargin)); L=size(T,1); if size(T,2)~=L error('T must be square.'); end; if nargin==3 % Usage: sym=gabmulappr(T,a,M); a=p2; M=p3; ga=gabtight(a,M,L); gs=ga; end; if nargin==4 % Usage: sym=gabmulappr(T,g,a,M); ga=p2; gs=p2; a=p3; M=p4; end; if nargin==5 % Usage: sym=gabmulappr(T,ga,gm,a,M); ga=p2; gs=p3; a=p4; M=p5; end; N=L/a; b=L/M; % gg = GBa(:,ii+jj*M); % Element of analysis frame % hh = GBs(:,ii+jj*M); % Element of synthesis frame % HS inner product : < T , g \tensor h> = < T h , g > = part1=reshape(dgt(T',ga,a,M),M*N,L); part2=reshape(dgt(part1',gs,a,M),M*N,M*N).'; lowsym = reshape(diag(part2),M,N); GBa = tfmat('dgt',ga,a,M); % Gabor frame synthesis matrix if ga ~= gs GBs = tfmat('dgt',gs,a,M); else GBs = GBa; end if ga == gs % HS Gram matrix Gram = abs(GBa'*GBa).^2; else Gram = (GBs'*GBs) .* conj(GBa'*GBa); end % The Gram matrix is square and Toeplitz. iGram=inv(Gram); sym = reshape(iGram*(lowsym(:)),M,N); % sym = involute(sym); % strange but true ? ltfat/inst/private/test_dgt_fb.m0000664000175000017500000001061612612404256016663 0ustar susnaksusnakfunction test_failed=test_dgt_fb %-*- texinfo -*- %@deftypefn {Function} test_dgt_fb %@verbatim %TEST_DGT_FB Test the filter bank algorithms in DGT % % This script runs a throrough test of the DGT routine, % testing it on a range of input parameters. % % The script test the filter bank algorithms in DGT, IDGT, GABDUAL and % GABTIGHT by comparing with the full window case. % % The computational backend is tested this way, but the % interfaces is not. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dgt_fb.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lr = [24, 35, 35, 24,144,108,144,135,77,77]; ar = [ 6, 5, 5, 4, 9, 9, 12, 9, 7, 7]; Mr = [ 8, 7, 7, 6, 16, 12, 24, 9,11,11]; glr = [16, 14, 21, 12, 48, 12, 24, 18,22,11]; test_failed=0; disp(' =============== TEST_DGT_FB ================'); disp('--- Used subroutines ---'); which comp_dgt_fb which comp_idgt_fb which comp_dgtreal_fb which comp_idgtreal_fb for phase = {'freqinv','timeinv'} for ii=1:length(Lr); L=Lr(ii); M=Mr(ii); a=ar(ii); gl=glr(ii); b=L/M; N=L/a; for rtype=1:2 if rtype==1 rname='REAL '; g=tester_rand(gl,1); else rname='CMPLX'; g=tester_crand(gl,1); end; % Test following test only makes sense if the dual is also % FIR. Otherwise the code will fail because of a missing parameter. if gl<=M gd = gabdual(g,a,M); gd_long = gabdual(fir2long(g,L),a,M,L); res = norm(fir2long(gd,L)-gd_long); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('DUAL %s L:%3i a:%3i M:%3i gl:%3i %0.5g %s',rname,L,a,M,gl,res,fail); disp(s) gt = gabtight(g,a,M); gt_long = gabtight(fir2long(g,L),a,M,L); res = norm(fir2long(gt,L)-gt_long); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('TIGHT %s L:%3i a:%3i M:%3i gl:%3i %0.5g %s',rname,L,a,M,gl,res,fail); disp(s) end; for W=1:3 if rtype==1 rname='REAL '; f=tester_rand(L,W); else rname='CMPLX'; f=tester_crand(L,W); end; cc = dgt(f,g,a,M,phase{1}); cc2 = dgt(f,fir2long(g,L),a,M,phase{1}); cdiff=cc-cc2; res=norm(cdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REF %s, %s L:%3i W:%2i a:%3i M:%3i gl:%3i %0.5g %s',rname,phase{1},L,W,a,M,gl,res,fail); disp(s) f1 = idgt(cc2,g,a,phase{1}); f2 = idgt(cc2,fir2long(g,L),a,phase{1}); cdiff=f1-f2; res=norm(cdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('IREF %s, %s L:%3i W:%2i a:%3i M:%3i gl:%3i %0.5g %s',rname,phase{1},L,W,a,M,gl,res,fail); disp(s) % Test the real valued transform if rtype==1 % --- Reference test --- ccreal=dgtreal(f,g,a,M,phase{1}); M2=floor(M/2)+1; cdiff=cc(1:M2,:,:)-ccreal; res=norm(cdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REFREAL %s L:%3i W:%2i a:%3i M:%3i gl:%3i %0.5g %s',... phase{1},L,W,a,M,gl,res,fail); disp(s); % --- Reconstruction test --- % Test following test only makes sense if the dual is also FIR. if gl<=M rreal=idgtreal(ccreal,gd,a,M,phase{1}); res=norm(f-rreal,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('RECREAL %s L:%3i W:%2i a:%3i M:%3i gl:%3i %0.5g %s',... phase{1},L,W,a,M,gl,res,fail); disp(s) end; end; end; end; end; end ltfat/inst/private/test_fwt2.m0000664000175000017500000000332312612404256016315 0ustar susnaksusnakfunction test_failed = test_fwt2 disp('========= TEST FWT2 ============'); global LTFAT_TEST_TYPE; tolerance = 1e-8; if strcmpi(LTFAT_TEST_TYPE,'single') tolerance = 1e-4; end test_failed = 0; dims = { [20,30], [150,151],[226,253], }; flags = {'standard','tensor'}; filt = {{'mband1',2},{'db10',4},{'sym8',4},{'spline4:4',4},}; for ii=1:numel(dims) f = tester_rand(dims{ii}); for jj=1:numel(flags) for ff=1:numel(filt) c = fwt2(f,filt{ff}{1},filt{ff}{2},flags{jj}); fhat = ifwt2(c,filt{ff}{1},filt{ff}{2},dims{ii},flags{jj}); err = norm(f-fhat,'fro'); [test_failed,fail]=ltfatdiditfail(err,test_failed,tolerance); fprintf('J=%d, %5.5s, dim=[%3.d,%3.d], flag=%8.8s, err=%.4e %s\n',filt{ff}{2},filt{ff}{1},size(f,1),size(f,2),flags{jj},err,fail); end end end %-*- texinfo -*- %@deftypefn {Function} test_fwt2 %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_fwt2.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/test_framemulappr.m0000664000175000017500000000407012612404256020126 0ustar susnaksusnak %-*- texinfo -*- %@deftypefn {Function} test_framemulappr %@verbatim % This test example is taken from demo_gabmulappr %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_framemulappr.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Setup parameters for the Gabor system and length of the signal L=576; % Length of the signal a=32; % Time shift M=72; % Number of modulations N=L/a; fs=44100; % assumed sampling rate SNRtv=63; % signal to noise ratio of change rate of time-variant system % construction of slowly time variant system % take an initial vector and multiply by random vector close to one A = []; c1=(1:L/2); c2=(L/2:-1:1); c=[c1 c2].^(-1); % weight of decay x^(-1) A(1,:)=(tester_rand(1,L)-0.5).*c; % convolution kernel Nlvl = exp(-SNRtv/10); Slvl = 1-Nlvl; for ii=2:L; A(ii,:)=(Slvl*circshift(A(ii-1,:),[0 1]))+(Nlvl*(tester_rand(1,L)-0.5)); end; A = A/norm(A)*0.99; % normalize matrix % perform best approximation by gabor multiplier g=gabtight(a,M,L); sym1=gabmulappr(A,g,a,M); % Now do the same using the general frame algorithm. F=frame('dgt',g,a,M); sym2=framemulappr(F,F,A); norm(sym1-reshape(sym2,M,N)) % Test for exactness testsym=tester_crand(M,N); FT=frsynmatrix(F,L); T=FT*diag(testsym(:))*FT'; sym1b=gabmulappr(T,g,a,M); sym2b=framemulappr(F,F,T); norm(testsym-sym1b) norm(testsym-reshape(sym2b,M,N)) ltfat/inst/private/ref_rdftiii.m0000664000175000017500000000256512612404256016671 0ustar susnaksusnakfunction c=ref_rdftiii(f) %-*- texinfo -*- %@deftypefn {Function} ref_rdftiii %@verbatim %REF_RDFTIII Reference Real DFT type III % Usage: c=ref_rdftiii(f); % % Compute RDFTIII by explicit formulas. % % The transform is orthonormal %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_rdftiii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); Lhalf=floor(L/2); F=zeros(L); F(:,1)=ones(L,1); l=(0:L-1).'/L; for m=0:Lhalf-1 F(:,2*m+1)=sqrt(2)*cos(2*pi*(m+.5)*l); F(:,2*m+2)=sqrt(2)*sin(2*pi*(m+.5)*l); end; if mod(L,2)==1 F(:,L)=cos(pi*L*l); end; F=F/sqrt(L); % dot-transpose will work because F is real. c=F.'*f; ltfat/inst/private/test_gabmulappr.m0000664000175000017500000000725312612404256017573 0ustar susnaksusnakfunction test_failed=test_gabmulappr %-*- texinfo -*- %@deftypefn {Function} test_gabmulappr %@verbatim %TEST_GABMULAPPR % % This script runs a thorough test of the GABMULAPPR routine, comparting % it to a reference implementation, using canonical tight Gaussian % window, random complex window for both analysis and synthesis, and % using two different randowm complex windows. % % Secondly, the script calculates the best approximation by a Gabor % multiplier to a Gabor multiplier using the same window. % % The script tests TFMAT and GABMULAPPR. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_gabmulappr.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lr=[24,16,36]; ar=[ 4, 4, 4]; Mr=[ 6, 8, 9]; test_failed=0; disp(' =============== TEST_GABMULAPPR ========='); for ii=1:length(Lr); L=Lr(ii); M=Mr(ii); a=ar(ii); N=L/a; % Random matrix T=tester_crand(L,L); % Random multiplier symbol. sym=tester_crand(M,N); % ---- Reference test, tight Gaussian window ------------ sym1=ref_gabmulappr(T,a,M); sym2=gabmulappr(T,a,M); res=norm(sym1-sym2,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REF GAUSS L:%3i a:%3i M:%3i %0.5g',L,a,M,res); disp(s) % ---- Reconstruction test, tight Gaussian window ------------ Tr=tfmat('gabmul',sym,a); symnew=gabmulappr(Tr,a,M); res=norm(sym-symnew,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REC GAUSS L:%3i a:%3i M:%3i %0.5g',L,a,M,res); disp(s) % ---- Reference test, same window for analysis and synthesis ------------ g=tester_crand(L,1); sym1=ref_gabmulappr(T,g,a,M); sym2=gabmulappr(T,g,a,M); res=norm(sym1-sym2,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); % if res>10e-10 % disp('FAILED'); % test_failed=test_failed+1; % end; s=sprintf('REF 1 WIN L:%3i a:%3i M:%3i %0.5g',L,a,M,res); disp(s) % ---- Reconstruction test, same window for analysis and synthesis ------------ Tr=tfmat('gabmul',sym,g,a); symnew=gabmulappr(Tr,g,a,M); res=norm(sym-symnew,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REC 1 WIN L:%3i a:%3i M:%3i %0.5g',L,a,M,res); disp(s) % ---- Reference test, two different windows for analysis and synthesis ------------ ga=tester_crand(L,1); gs=tester_crand(L,1); sym1=ref_gabmulappr(T,ga,gs,a,M); sym2=gabmulappr(T,ga,gs,a,M); res=norm(sym1-sym2,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REF 2 WIN L:%3i a:%3i M:%3i %0.5g',L,a,M,res); disp(s) % ---- Reconstruction test, two different windows for analysis and synthesis --------- Tr=tfmat('gabmul',sym,ga,gs,a); symnew=gabmulappr(Tr,ga,gs,a,M); res=norm(sym-symnew,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REC 2 WIN L:%3i a:%3i M:%3i %0.5g %s',L,a,M,res,fail); disp(s) end; ltfat/inst/private/test_nonsepdgt_shearola.m0000664000175000017500000000572312612404256021320 0ustar susnaksusnakfunction test_failed=test_nonsepdgt_shearola %-*- texinfo -*- %@deftypefn {Function} test_nonsepdgt_shearola %@verbatim %TEST_NONSEPDGT Test non-separable DGT % % This script runs a throrough test of the DGT routine, % testing it on a range of input parameters. % % The computational backend is tested this way, but the % interface is not. % % The script tests dgt, idgt, gabdual and gabtight. % % Use TEST_WFAC and TEST_DGT_FAC for more specific testing % of the DGT backend. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_nonsepdgt_shearola.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ar =[ 4, 4, 3, 4, 4, 4]; Mr =[ 6, 6, 5, 6, 6, 6]; lt1=[ 0, 1, 1, 1, 2, 1]; lt2=[ 1, 2, 2, 3, 3, 4]; test_failed=0; testmode=0; disp(' =============== TEST_NONSEPDGT_SHEAROLA ================'); disp('--- Used subroutines ---'); which comp_nonsepdgt_shear which comp_nonsepdgt_shearola which comp_nonsepwin2multi for ii=1:length(ar); M=Mr(ii); a=ar(ii); lt=[lt1(ii), lt2(ii)]; minL=dgtlength(1,a,M,lt); gl=minL; g=tester_crand(gl,1); bl=minL*10; Lext=bl+gl; % sanity check if Lext~=dgtlength(Lext,a,M,lt) error('Incorrect parameters.'); end for Lidx=2:3 L=bl*Lidx; if L~=dgtlength(L,a,M,lt) error('Incorrect parameters.'); end for W=1:3 f=tester_crand(L,W); % --------- test reference comparison ------------ cc_ref = dgt(f,g,a,M,'lt',lt); if 1 [s0,s1,br]=shearfind(Lext,a,M,lt); cc_ola = comp_nonsepdgt_shearola(f,g,a,M,s0,s1,br,bl); else [s0,s1,br]=shearfind(L,a,M,lt); cc_ola = comp_nonsepdgt_shear(f,fir2long(g,L),a,M,s0,s1,br); end; res = norm(cc_ref(:)-cc_ola(:))/norm(cc_ref(:)); stext=sprintf(['REF L:%3i W:%2i gl:%3i a:%3i M:%3i lt1:%2i lt2:%2i' ... ' s0:%2i s1:%2i bl:%2i Lext:%2i %0.5g'], L,W,gl,a,M,lt(1),lt(2),s0,s1,bl,Lext,res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); end; end; end; ltfat/inst/private/test_dwilt.m0000664000175000017500000000543012612404256016557 0ustar susnaksusnakfunction test_failed=test_dwilt which comp_dwilt which comp_idwilt Lr=[4, 6, 8,12,16,12,18,32,30]; Mr=[2, 3, 2, 3, 4, 2, 3, 4, 3]; disp(' =============== TEST_DWILT ================'); test_failed=0; for ii=1:length(Lr); for W=1:3 for ftype=1:2 for wtype=1:2 L=Lr(ii); M=Mr(ii); a=M; if wtype==1 % Full length window g=pgauss(L); gd=wildual(g,M); wtype='LONG'; else g=firwin('sqrthann',2*M,'2'); gd=g; wtype='FIR'; end; if ftype==1 % Complex-valued test case f=tester_crand(L,W); S='CMPLX'; else % Real-valued tes f=tester_rand(L,W); S='REAL '; end; c=dwilt(f,g,M,L); a=M; c2=ref_dwilt(f,g,a,M); r=idwilt(c,gd); res=norm(c(:)-c2(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REF %s %s L:%3i W:%2i a:%3i M:%3i %0.5g %s',S,wtype,L,W,a,M,res,fail); disp(s) rdiff=f-r; res=norm(rdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REC %s %s L:%3i W:%2i a:%3i M:%3i %0.5g %s',S,wtype,L,W,a,M,res,fail); disp(s) g=wilorth(M,L); c=dwilt(f,g,M); r=idwilt(c,g); rdiff=f-r; res=norm(rdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('ORTH %s %s L:%3i W:%2i a:%3i M:%3i %0.5g %s',S,wtype,L,W,a,M,res,fail); disp(s) c=dwilt(f,'gauss',M); r=idwilt(c,{'dual','gauss'}); res=norm(f-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('WIN %s %s L:%3i W:%2i a:%3i M:%3i %0.5g %s',S,wtype,L,W,a,M,res,fail); disp(s) c=dwilt(f,{'tight','gauss'},M); r=idwilt(c,{'tight','gauss'}); res=norm(f-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('WIN TIGHT %s %s L:%3i W:%2i a:%3i M:%3i %0.5g %s',S,wtype,L,W,a,M,res,fail); disp(s) end; end; end; end; %-*- texinfo -*- %@deftypefn {Function} test_dwilt %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dwilt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ref_nonsepdgt.m0000664000175000017500000000302612612404256017231 0ustar susnaksusnakfunction [c]=ref_nonsepdgt(f,g,a,M,lt) %-*- texinfo -*- %@deftypefn {Function} ref_nonsepdgt %@verbatim %REF_NONSEPDGT Reference non-sep Discrete Gabor transform. % Usage: c=ref_dgt(f,g,a,M,lt); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transpose. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_nonsepdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Calculate the parameters that was not specified. L=size(f,1); g=fir2long(g,L); b=L/M; N=L/a; W=size(f,2); R=size(g,2); % Create 2x2 grid matrix.. V=[a,0;... b/lt(2)*lt(1),b]; % Create lattice and Gabor matrix. lat=ref_lattice(V,L); G=ref_gaboratoms(g,lat); % Apply matrix to f. c=G'*f; % reshape to correct output format. c=reshape(c,M,N,R*W); ltfat/inst/private/test_fbwarped_framebounds.m0000664000175000017500000000513212612404256021612 0ustar susnaksusnakfunction test_failed=test_fbwarped_framebounds test_failed = 0; Ls = 44100; fs = 44100; fmax = fs/2; bins = 1; fac = [1,7/8,3/4,5/8,1/2]; eigstol = 1e-4; eigsmaxit = 100; pcgmaxit = 150; pcgtol = 1e-4; warpfun = cell(4,1); invfun = cell(4,1); %-*- texinfo -*- %@deftypefn {Function} test_fbwarped_framebounds %@verbatim % ERBlet warping %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_fbwarped_framebounds.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warpfun{3} = @freqtoerb; invfun{3} = @erbtofreq; % constant-Q warping warpfun{4} = @(x) 10*log(x); invfun{4} = @(x) exp(x/10); % sqrt-warping warpfun{2} = @(x) sign(x).*((1+abs(x)).^(1/2)-1); invfun{2} = @(x) sign(x).*((1+abs(x)).^2-1); % Linear warping warpfun{1} = @(x) x/100; invfun{1} = @(x) 100*x; fmin = [0,0,0,50]; A = zeros(4,length(fac)); B = ones(4,length(fac)); red = A; for jj = 1:4 [g,a,fc,L]=warpedfilters(warpfun{jj},invfun{jj},fs,fmin(jj),fmax,bins,Ls,'bwmul',1.5,'fractional','complex'); gf=filterbankresponse(g,a,Ls); framebound_ratio = max(gf)/min(gf); disp(['Painless system frame bound ratio: ', num2str(framebound_ratio)]); for kk = 1:length(fac) %[jj,kk] atemp = a; idx = [2:length(fc)/2,length(fc)/2+2:length(fc)]; atemp(idx,2) = ceil(atemp(idx,2).*fac(kk)); red(jj,kk) = sum(atemp(:,2)./atemp(:,1)); [g,asan]=filterbankwin(g,atemp,L,'normal'); gtemp=comp_filterbank_pre(g,asan,L,10); gtemp{1}.H = gtemp{1}.H.*sqrt(fac(kk)); gtemp{length(fc)/2+1}.H = gtemp{length(fc)/2+1}.H.*sqrt(fac(kk)); F = frame('filterbank',gtemp,asan,numel(gtemp)); [A(jj,kk),B(jj,kk)] = framebounds(F,Ls,'tol',eigstol,'pcgtol',pcgtol,'maxit',eigsmaxit,'pcgmaxit',pcgmaxit); end end disp('This is a ratio B/A. Rows - warping sunction, Cols - redundancy compared to te minimal painless case') B./A ltfat/inst/private/test_gdgt.m0000664000175000017500000000531412612404256016362 0ustar susnaksusnakfunction test_failed=test_gdgt %-*- texinfo -*- %@deftypefn {Function} test_gdgt %@verbatim %TEST_GDGT Test GDGT % % This script runs a throrough test of the COMP_GDGT routine, testing it on % a range of input parameters. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_gdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lr=[24,144,108,144,24,135,35,77,20]; ar=[ 4, 9, 9, 12, 6, 9, 5, 7, 1]; Mr=[ 6, 16, 12, 24, 8, 9, 7,11,20]; R=1; test_failed=0; disp(' =============== TEST_GDGT ================'); for ii=1:length(Lr); for ctii=0:1 c_t=ctii*.5; for cfii=0:1 c_f=cfii*.5; for W=1:3 L=Lr(ii); M=Mr(ii); a=ar(ii); b=L/M; N=L/a; c=gcd(a,M); d=gcd(b,N); p=a/c; q=M/c; %g=(1:L)'; %g=i*gabtight(a,b,L); f=tester_crand(L,W); g=tester_crand(L,R); gd=gabdual(g,a,M); gt=gabtight(g,a,M); cc=comp_gdgt(f,g,a,M,L,c_t,c_f,0,0); cc2=reshape(ref_gdgt(f,g,a,M,c_t,c_f,0),M,N,W); cdiff=cc-cc2; res=norm(cdiff(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['REF L:%3i c_t: %0.5g c_f %0.5g ', ... 'W:%2i R:%2i a:%3i b:%3i c:%3i ', ... 'd:%3i p:%3i q:%3i %0.5g %s'],... L,c_t,c_f,W,R,a,b,c,d,p,q,res,fail); disp(s) r=comp_igdgt(cc,gd,a,M,L,c_t,c_f,0,0); res=norm(f-r,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['REC L:%3i c_t: %0.5g c_f %0.5g ',... 'W:%2i R:%2i a:%3i b:%3i c:%3i ',... 'd:%3i p:%3i q:%3i %0.5g %s'],... L,c_t,c_f,W,R,a,b,c,d,p,q,res,fail); disp(s) res=norm(f-idgt(dgt(f,gt,a,M),gt,a),'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['TIG L:%3i c_t: %0.5g c_f %0.5g ',... 'W:%2i R:%2i a:%3i b:%3i c:%3i ',... 'd:%3i p:%3i q:%3i %0.5g %s'],... L,c_t,c_f,W,R,a,b,c,d,p,q,res,fail); disp(s); end; end; end; end; ltfat/inst/private/ref_dstiii.m0000664000175000017500000000244112612404256016515 0ustar susnaksusnakfunction c=ref_dstiii(f) %-*- texinfo -*- %@deftypefn {Function} ref_dstiii %@verbatim %REF_DSTIII Reference Discrete Sine Transform type III % Usage: c=ref_dstiii(f); % % This is the inverse of DSTII %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dstiii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); % Create weights. w=ones(L,1); w(L)=1/sqrt(2); w=w*sqrt(2/L); % Create transform matrix. F=zeros(L); for m=0:L-1 for n=0:L-1 F(m+1,n+1)=w(n+1)*sin(pi*(n+1)*(m+.5)/L); end; end; % Compute coefficients. c=F*f; ltfat/inst/private/ref_dwilt_1.m0000664000175000017500000000503512612404256016575 0ustar susnaksusnakfunction [coef]=ref_dwilt_1(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dwilt_1 %@verbatim %COMP_DWILT Compute Discrete Wilson transform by DGT % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dwilt_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); N=L/a; W=size(f,2); coef2=dgt(f,g,a,2*M); coef=zeros(2*M,N/2,W); if 1 % Loop version for n=0:N/2-1 % ---- m is zero --------- coef(1,n+1,:)=coef2(1,2*n+1,:); for m=1:2:M-1 % --- m is odd ---------- coef(m+1,n+1,:)= i/sqrt(2)*(coef2(m+1,2*n+1,:)-coef2(2*M-m+1,2*n+1,:)); coef(M+m+1,n+1,:)=1/sqrt(2)*(coef2(m+1,2*n+2,:)+coef2(2*M-m+1,2*n+2,:)); end; for m=2:2:M-1 % --- m is even --------- coef(m+1,n+1,:)= 1/sqrt(2)*(coef2(m+1,2*n+1,:)+coef2(2*M-m+1,2*n+1,:)); coef(M+m+1,n+1,:)=i/sqrt(2)*(coef2(m+1,2*n+2,:)-coef2(2*M-m+1,2*n+2,:)); end; % --- m is nyquest ------ if mod(M,2)==0 coef(M+1,n+1,:) = coef2(M+1,2*n+1,:); else coef(M+1,n+1,:) = coef2(M+1,2*n+2,:); end; end; else % Vector version % ---- m is zero --------- coef(1,:,:)=coef2(1,2*n+1,:); % --- m is odd ---------- % sine, first column. coef(2:2:M,:,:)=1/sqrt(2)*i*(coef2(2:2:M,1:2:N,:)-coef2(2*M:-2:M+2,1:2:N,:)); % cosine, second column coef(M+2:2:2*M,:,:)=1/sqrt(2)*(coef2(2:2:M,2:2:N,:)+coef2(2*M:-2:M+2,2:2:N,:)); % --- m is even --------- % cosine, first column. coef(3:2:M,:,:)=1/sqrt(2)*(coef2(3:2:M,1:2:N,:)+coef2(2*M-1:-2:M+2,1:2:N,:)); % sine, second column coef(M+3:2:2*M,:,:)=1/sqrt(2)*i*(coef2(3:2:M,2:2:N,:)-coef2(2*M-1:-2:M+2,2:2:N,:)); % --- m is nyquest ------ if mod(M,2)==0 coef(M+1,:,:) = coef2(M+1,1:2:N,:); else coef(M+1,:,:) = coef2(M+1,2:2:N,:); end; end; coef=reshape(coef,M*N,W); ltfat/inst/private/ref_irdgt.m0000664000175000017500000000311612612404256016341 0ustar susnaksusnakfunction f=ref_irdgt(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_irdgt %@verbatim %REF_IRDGT Reference Inverse Real DGT % Usage: c=ref_rdgt(f,g,a,M); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transpose. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_irdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); b=L/M; N=L/a; Mhalf=ceil(M/2); F=zeros(L,M*N); l=(0:L-1).'; for n=0:N-1 % Do the unmodulated coefficient. F(:,M*n+1)=circshift(g,n*a); for m=1:Mhalf-1 F(:,M*n+2*m)=sqrt(2)*cos(2*pi*m*l/M).*circshift(g,n*a);; F(:,M*n+2*m+1)=sqrt(2)*sin(2*pi*m*l/M).*circshift(g,n*a);; end; if mod(M,2)==0 F(:,M*(n+1))=cos(pi*l).*circshift(g,n*a);; end; end; % dot-transpose will work because F is real. f=F*c; ltfat/inst/private/ref_rdgt3_1.m0000664000175000017500000000256312612404256016500 0ustar susnaksusnakfunction c=ref_rdgt3_1(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_rdgt3_1 %@verbatim %REF_RDGT3_1 Reference Real DGT type 3 % Usage: c=ref_rdgt3_1(f,g,a,M); % % Compute a DGT3 and pick out the coefficients %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_rdgt3_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); R=size(g,2); N=L/a; Mhalf=floor(M/2); cc=ref_gdgt(f,g,a,M,0,.5,0); cc=reshape(cc,M,N,W); c=zeros(M,N,W); for m=0:Mhalf-1 c(2*m+1,:,:)=sqrt(2)*real(cc(m+1,:,:)); c(2*m+2,:,:)=-sqrt(2)*imag(cc(m+1,:,:)); end; if mod(M,2)==1 c(M,:,:)=cc((M+1)/2,:,:); end; c=reshape(c,M*N,W); ltfat/inst/private/test_demos.m0000664000175000017500000000253312612404256016544 0ustar susnaksusnakfunction test_failed=test_demos %-*- texinfo -*- %@deftypefn {Function} test_demos %@verbatim %TEST_DEMOS Test if all the demos runs without errors. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_demos.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed=0; s=dir([ltfatbasepath,filesep,'demos',filesep,'demo_*.m']); for ii=1:numel(s) filename = s(ii).name; disp(filename); % The demo is run in separate function to avoid % variable name clash rundemo(filename(1:end-2)); end; function rundemo(demoname) close all; eval(demoname); ltfat/inst/private/ref_pchirp.m0000664000175000017500000000467512612404256016530 0ustar susnaksusnakfunction g=ref_pchirp(L,n) %-*- texinfo -*- %@deftypefn {Function} ref_pchirp %@verbatim %PCHIRP Periodic chirp % Usage: g=pchirp(L,n); % % pchirp(L,n) returns a periodic, discrete chirp of length L that % revolves n times around the time-frequency plane in frequency. n must be % an integer number. % % To get a chirp that revolves around the time-frequency plane in time, % use : % % dft(pchirp(L,N)); % % The chirp is computed by: % % g(l+1) = exp(pi*i*n*(l-ceil(L/2))^2*(L+1)/L) for l=0,...,L-1 % % The chirp has absolute value 1 everywhere. To get a chirp with unit % l^2-norm, divide the chirp by sqrt L. % % Examples: % --------- % % A spectrogram on a linear scale of an even length chirp: % % sgram(pchirp(40,2),'lin'); % % The DFT of the same chirp, now revolving around in time: % % sgram(dft(pchirp(40,2)),'lin'); % % An odd-length chirp. Notice that the chirp starts at a frequency between % two sampling points: % % sgram(pchirp(41,2),'lin'); % % % References: % H. G. Feichtinger, M. Hazewinkel, N. Kaiblinger, E. Matusiak, and % M. Neuhauser. Metaplectic operators on c^n. The Quarterly Journal of % Mathematics, 59(1):15-28, 2008. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_pchirp.html} %@seealso{dft, expwave} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: OK % REFERENCE: OK error(nargchk(2,2,nargin)); % Compute normalized chirp % Old code, has low numerical precision and do not work correctly for odd legths. %g=(exp((0:L-1).^2/L*pi*i*n)/sqrt(L)).'; % Compute normalized chirp m = (0:L-1).'; %X = mod(n*(m-ceil(L/2)).^2*(L+1),2*L); X = mod(n*m.^2*(L+1),2*L); g = exp(pi*1i*X/L); ltfat/inst/private/ref_edgtii.m0000664000175000017500000000334612612404256016502 0ustar susnaksusnakfunction c=ref_edgtii(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_edgtii %@verbatim %REF_EDGTII Reference Even Discrete Gabor transform type II % Usage c=ref_edgt(f,g,a,M); % % If a is even, then the input window must be odd-centered of length 2L. % % If a is odd, then the input window must be even-centered of length 2L. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_edgtii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); N=L/a; b=L/M; %Fold=zeros(2*L,M*N); F=zeros(L,M*N); %l2=(0:2*L-1).'; l=(0:L-1).'; %lfirst=(0:L-1).'; lsecond=(2*L-1:-1:L).'; gnew=circshift(g,floor(a/2)); for n=0:N-1 for m=0:M-1 %Fold(:,M*n+m+1)=exp(2*pi*i*m*(l2+.5)/M).*circshift(gnew,n*a); gshift=circshift(gnew,n*a); %F(:,M*n+m+1)=exp(2*pi*i*m*(lfirst+.5)/M).*gshift(l+1) + ... % exp(2*pi*i*m*(lsecond+.5)/M).*gshift(lsecond+1); F(:,M*n+m+1)=exp(2*pi*i*m*(l+.5)/M).*gshift(l+1) + ... exp(-2*pi*i*m*(l+.5)/M).*gshift(lsecond+1); end; end; c=F'*f; ltfat/inst/private/test_pfilt_1.m0000664000175000017500000000343612612404256016776 0ustar susnaksusnakfunction test_failed=test_pfilt %-*- texinfo -*- %@deftypefn {Function} test_pfilt_1 %@verbatim % % % This is the old test_pfilt from before the struct filters was % introduced. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_pfilt_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lr =[9,9,10,10,10,12]; Lgr=[9,4,10, 7,10,12]; ar =[3,3, 5, 5, 1, 3]; test_failed=0; disp(' =============== TEST_PFILT =============='); disp('--- Used subroutines ---'); which comp_pfilt for jj=1:length(Lr) L=Lr(jj); Lg=Lgr(jj); a=ar(jj); for W=1:3 for rtype=1:2 if rtype==1 rname='REAL '; f=tester_rand(L,W); g=tester_rand(Lg,1); else rname='CMPLX'; f=tester_crand(L,W); g=tester_crand(Lg,1); end; h1=pfilt(f,g,a); h2=ref_pfilt(f,g,a); res=norm(h1-h2); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('PFILT %3s L:%3i W:%3i Lg:%3i a:%3i %0.5g %s',rname,L,W,Lg,a,res,fail); disp(s); end; end; end; ltfat/inst/private/test_dgt2.m0000664000175000017500000000432112612404256016272 0ustar susnaksusnakfunction test_failed=test_dgt2 test_failed=0; disp(' =============== TEST_DGT2 ================'); %-*- texinfo -*- %@deftypefn {Function} test_dgt2 %@verbatim % Run some fixed test to test the interface. % This is not a thourough tester. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dgt2.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % --- first test a=6; M=8; Lf=71; L=72; W=3; f=tester_rand(Lf,Lf,W); g=pgauss(L,a*M/L); gd=gabdual(g,a,M); [c,Ls]=dgt2(f,g,a,M); r=idgt2(c,gd,a,Ls); res=f-r; nres=norm(res(:)); [test_failed,fail]=ltfatdiditfail(nres,test_failed); %failed=''; %if nres>10e-10 % failed='FAILED'; % test_failed=test_failed+1; %end; s=sprintf('DGT2 Lf:%3i L:%3i %0.5g %s',Lf,L,nres,fail); disp(s) % --- second test a1=6; M1=8; a2=5; M2=10; L1=a1*M1; L2=a2*M2; W=1; f=tester_rand(L1,L2,W); g1=pgauss(L1,a1*M1/L1); g2=pgauss(L2,a2*M2/L2); gd1=gabdual(g1,a1,M1); gd2=gabdual(g2,a2,M2); c=dgt2(f,g1,g2,[a1,a2],[M1,M2]); c2=ref_dgt2(f,g1,g2,a1,a2,M1,M2); rc=c-c2; nres=norm(rc(:)); [test_failed,fail]=ltfatdiditfail(nres,test_failed); %failed=''; %if nres>10e-10 % failed='FAILED'; % test_failed=test_failed+1; %end; s=sprintf('DGT2 REF L1:%3i L2:%3i %0.5g %s',L1,L2,nres,fail); disp(s) r=idgt2(c,gd1,gd2,[a1,a2]); res=r-f; nres=norm(res(:)); [test_failed,fail]=ltfatdiditfail(nres,test_failed); %failed=''; %if nres>10e-10 % failed='FAILED'; % test_failed=test_failed+1; %end; s=sprintf('DGT2 INV L1:%3i L2:%3i %0.5g %s',L1,L2,nres,fail); disp(s) ltfat/inst/private/ref_isfac.m0000664000175000017500000000310012612404256016306 0ustar susnaksusnakfunction [f]=ref_isfac(ff,L,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_isfac %@verbatim %REF_ISFAC Reference inverse signal factorization % Usage: f=ref_sfac(ff,a,M); % % Input parameters: % ff : Factored signal % a : Length of time shift. % b : Length of frequency shift. % Output parameters: % f : Output signal. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_isfac.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Calculate the parameters that was not specified W=prod(size(ff))/L; N=L/a; M=L/b; % The four factorization parameters. [c,h_a,h_m]=gcd(a,M); p=a/c; q=M/c; d=N/q; permutation=zeros(q*b,1); P=stridep(p,b); % Create permutation for l=0:q-1 for s=0:b-1 permutation(l*b+1+s)=mod(P(s+1)-1-h_m*l,b)*M+l*c+1; end; end; f=ref_ifac(ff,W,c,d,p,q,permutation); ltfat/inst/private/test_phaselock.m0000664000175000017500000000444512612404256017412 0ustar susnaksusnakfunction test_failed=test_phaselock %-*- texinfo -*- %@deftypefn {Function} test_phaselock %@verbatim %TEST_PHASELOCK Test phaselock and phaseunlock % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_phaselock.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed=0; disp(' =============== TEST_PHASELOCK ================'); % set up parameters L=420; f=tester_rand(L,1); g=pgauss(L); a=10;b=30;M=L/b; c = dgt(f,g,a,M); cp1 = ref_phaselock(c,a); cp2 = phaselock(c,a,'lt',[0 1]); % compare original phaselock with mine for rectangular case res=norm(cp1-cp2,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['PHASELOCK REF RECT %0.5g %s\n'],res,fail); % comparisons for non-separable case c_big = dgt(f,g,a,2*M); c_quin = dgt(f,g,a,M,'lt',[1 2]); c_bigp = phaselock(c_big,a); c_quinp= phaselock(c_quin,a,'lt',[1 2]); % compare the quincunx lattice with twice transform on twice as many % chanels res=norm(c_bigp(1:2:end,1)-c_quinp(:,1),'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['PHASELOCK QUIN 1 %0.5g %s\n'],res,fail); res=norm(c_bigp(2:2:end,2)-c_quinp(:,2),'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['PHASELOCK QUIN 2 %0.5g %s\n'],res,fail); % testing of phaseunlock routine res=norm(c_big - phaseunlock(c_bigp,a),'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['PHASEUNLOCK RECT %0.5g %s\n'],res,fail); res=norm(c_quin - phaseunlock(c_quinp,a,'lt',[1 2]),'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['PHASEUNLOCK QUIN %0.5g %s\n'],res,fail); ltfat/inst/private/ref_idwiltiii.m0000664000175000017500000000471612612404256017226 0ustar susnaksusnakfunction f=ref_idwiltiii(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_idwiltiii %@verbatim %REF_IDWILTIII Reference Inverse DWILT type III % Usage: f=ref_idwiltiii(c,g,a,M); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_idwiltiii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); W=size(c,2); N=L/a; F=zeros(L,M*N); l=(0:L-1)'; pif=pi/4; for n=0:floor(N/2)-1 for m=0:2:M-1 F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*cos((m+.5)*pi*l/M+pif); F(:,1+m+(2*n+1)*M)=sqrt(2)*circshift(g,(2*n+1)*a).*sin((m+.5)*pi*l/M+pif); end; for m=1:2:M-1 F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*sin((m+.5)*pi*l/M+pif); F(:,1+m+(2*n+1)*M)=sqrt(2)*circshift(g,(2*n+1)*a).*cos((m+.5)*pi*l/M+pif); end; end; f=F*c; if 0 pif=pi/4; for n=0:floor(N/2)-1 for m=0:2:M-1 %F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*cos((m+.5)*(pi/M.*l-pi/2)); %F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*cos( ... % m*pi*l/M -m*pi/2+pi*l/(2*M)-pi/4); F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*cos((m+.5)*pi*l/M+pif); end; for m=1:2:M-1 %F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*cos((m+.5)*(pi/M.*l-pi/2)); %F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*cos( ... % m*pi*l/M -m*pi/2+pi*l/(2*M)-pi/4); F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*sin((m+.5)*pi*l/M+pif); end; %for m=0:M-1 % F(:,1+m+(2*n+1)*M)=sqrt(2)*circshift(g,(2*n+1)*a).*sin((m+.5)*(pi/M.*l-pi/2)); %end; for m=0:2:M-1 F(:,1+m+(2*n+1)*M)=sqrt(2)*circshift(g,(2*n+1)*a).*sin((m+.5)*pi*l/M+pif); end; for m=1:2:M-1 F(:,1+m+(2*n+1)*M)=sqrt(2)*circshift(g,(2*n+1)*a).*cos((m+.5)*pi*l/M+pif); end; end; end; ltfat/inst/private/ref_tconv.m0000664000175000017500000000250512612404256016362 0ustar susnaksusnakfunction h=ref_tconv(f,g,a) %-*- texinfo -*- %@deftypefn {Function} ref_tconv %@verbatim %REF_PCONV Reference TCONV % Usage: h=ref_tconv(f,g,a) % % TCONV(f,g,a) computes the twisted convolution of f and g. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_tconv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard M=size(f,1); N=size(f,2); h=zeros(M,N); theta=a/M; for m=0:M-1 for n=0:N-1 for l=0:N-1 for k=0:M-1 h(m+1,n+1)=h(m+1,n+1)+f(k+1,l+1)*g(mod(m-k,M)+1,mod(n-l,N)+1)*... exp(2*pi*i*theta*(m-k)*l); end; end; end; end; ltfat/inst/private/ref_gabtight.m0000664000175000017500000000220212612404256017014 0ustar susnaksusnakfunction gd=ref_gabtight(g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_gabtight %@verbatim %REF_GABTIGHT Reference GABTIGHT % Usage: gd=ref_gabtight(g,a,M); % % Calculate the canonical tight window by simple linear algebra %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_gabtight.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . g = double(g); G=tfmat('dgt',g,a,M); gd=(G*G')^(-1/2)*g; ltfat/inst/private/ref_rdgtii.m0000664000175000017500000000321112612404256016506 0ustar susnaksusnakfunction c=ref_rdgtii(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_rdgtii %@verbatim %REF_RDGTII Reference Real DGT type II % Usage: c=ref_rdgt(f,g,a,M); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transpose. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_rdgtii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); b=L/M; N=L/a; Mhalf=ceil(M/2); F=zeros(L,M*N); l=(0:L-1).'; for n=0:N-1 % Do the unmodulated coefficient. F(:,M*n+1)=circshift(g,n*a+floor(a/2)); for m=1:Mhalf-1 F(:,M*n+2*m)=sqrt(2)*cos(2*pi*m*(l+.5)/M).*circshift(g,n*a+floor(a/2)); F(:,M*n+2*m+1)=sqrt(2)*sin(2*pi*m*(l+.5)/M).*circshift(g,n*a+floor(a/2)); end; if mod(M,2)==0 F(:,M*(n+1))=cos(pi*l).*circshift(g,n*a+floor(a/2)); end; end; % dot-transpose will work because F is real. c=F.'*f; ltfat/inst/private/ref_lconv.m0000664000175000017500000000322312612404256016350 0ustar susnaksusnakfunction h = ref_lconv(f,g,ctype) %-*- texinfo -*- %@deftypefn {Function} ref_lconv %@verbatim %REF_LCONV Reference linear convolution % Usage: h=ref_lconv(f,g) % % PCONV(f,g) computes the linear convolution of f and g. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_lconv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven Lf = length(f); Lg = length(g); Lh = Lf+Lg-1; f = [f; zeros(Lh - Lf, 1)]; g = [g; zeros(Lh - Lg, 1)]; h = zeros(Lf+Lg-1, 1); switch(lower(ctype)) case {'default'} for ii = 0 : Lh-1 for jj = 0 : Lh-1 h(ii+1)=h(ii+1)+f(jj+1)*g(mod(ii-jj,Lh)+1); end end case {'r'} for ii=0:Lh-1 for jj=0:Lh-1 h(ii+1)=h(ii+1)+f(jj+1)*conj(g(mod(jj-ii, Lh)+1)); end; end; case {'rr'} for ii=0:Lh-1 for jj=0:Lh-1 h(ii+1)=h(ii+1)+conj(f(mod(-jj, Lh)+1))*conj(g(mod(jj-ii,Lh)+1)); end; end; end ltfat/inst/private/ref_fac.m0000664000175000017500000000355412612404256015767 0ustar susnaksusnakfunction ff=ref_fac(f,W,c,d,p,q,permutation) %-*- texinfo -*- %@deftypefn {Function} ref_fac %@verbatim %REF_FAC Reference factorization. % % This function cannot handle multidimensional arrays. % Reshape to matrix BEFORE you call this. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_fac.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Output ff=zeros(p*q*W,c*d); % If d==1, it is not possible to further reduce the size of % wk. Actually, some of the following code produces an % error, because Matlab interprets an fft of a 1x q*W*p as a % a row operation ! if d>1 % Shape to match first fft pass. work=zeros(d,q*W*p); % This loop iterates over the number of truly different wk's. for ko=0:c-1 % Permute and copy into work array. % Format is suited for fft. work(:)=f(permutation+ko,:); % Execute the fft and place transposed in ff. ff(:,1+ko*d:(ko+1)*d)=fft(work.',[],2); end; else % Work arrays. work=zeros(p*q*W,1); for ko=0:c-1 % Permute input. work(:)=f(permutation+ko,:); % Write the block. ff(:,ko+1)=work; end end; ltfat/inst/private/ref_dftiv.m0000664000175000017500000000237612612404256016353 0ustar susnaksusnakfunction c=ref_dftiv(f) %-*- texinfo -*- %@deftypefn {Function} ref_dftiv %@verbatim %REF_DFT Reference Discrete Fourier Transform Type IV % Usage: c=ref_dftiv(f); % % This is highly experimental! %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dftiv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); % Create weights. w=sqrt(1/L); % Create transform matrix. F=zeros(L); for m=0:L-1 for n=0:L-1 F(m+1,n+1)=w*exp(2*pi*i*(m+.5)*(n+.5)/L); end; end; % Compute coefficients. c=F'*f; ltfat/inst/private/test_wfac.m0000664000175000017500000000420712612404256016355 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} test_wfac %@verbatim %TEST_WFAC Test COMP_WFAC % % This script runs a test of only the comp_wfac and comp_iwfac procedures. % % The script TEST_DGT will test the complete DGT implementation. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_wfac.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lr=[24,16,144,108,144,24,135,35,77,20]; ar=[ 4, 4, 9, 9, 12, 6, 9, 5, 7, 1]; Mr=[ 6, 8, 16, 12, 24, 8, 9, 7,11,20]; test_failed=0; which comp_wfac which comp_iwfac for ii=1:length(Lr); for R=1:3 L=Lr(ii); M=Mr(ii); a=ar(ii); b=L/M; N=L/a; c=gcd(a,M); d=gcd(b,N); p=a/c; q=M/c; g=tester_crand(L,R); gf1=comp_wfac(g,a,M); gf2=ref_wfac(g,a,M); cdiff=gf1-gf2; res=norm(cdiff(:)); if res>10e-10 disp('FAILED WFAC'); test_failed=test_failed+1; end; s=sprintf('WFAC L:%3i R:%2i a:%3i b:%3i c:%3i d:%3i p:%3i q:%3i %0.5g',L,R,a,b,c,d,p,q,res); disp(s) gf=tester_crand(p*q*R,c*d); g1=comp_iwfac(gf,L,a,M); g2=ref_iwfac(gf,L,a,M); cdiff=g1-g2; res=norm(cdiff(:)); if res>10e-10 disp('FAILED IWFAC'); test_failed=test_failed+1; end; s=sprintf('IWFAC L:%3i R:%2i a:%3i b:%3i c:%3i d:%3i p:%3i q:%3i %0.5g',L,R,a,b,c,d,p,q,res); disp(s) end; end; test_failed ltfat/inst/private/test_gabmul.m0000664000175000017500000001300612612404256016701 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} test_gabmul %@verbatim % Compare approximation by Gabor Multiplier by LTFAT and XXL % % using % LTFAT - this toolbox % XXL - the collection of MATLAB files by P. Balazs found at % http://www.kfs.oeaw.ac.at/xxl/Dissertation/matlabPhDXXL.html % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_gabmul.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . clear; if exist('gabbaspIrr','file') ~= 2 disp('In this test file the LTFAT implementation is compared to the one found at'); disp('http://www.kfs.oeaw.ac.at/xxl/Dissertation/matlabPhDXXL.html .'); disp('Please download and put in search path!'); return else disp(' '); disp(' Compare approximation by Gabor Multiplier by LTFAT and XXL '); disp(' '); end L = 144; % vector length a = 8; % time parameter, hop size b = 9; % frequency parameter usetargetmult = 1; % use a multiplier as target? N = L/a; M = L/b; % number of filters red = L/(a*b); % redundancy n_fram = N*M; % number of frame elements xpo = lattp(L,a,b); % time-frequency sampling points % Creation of Windows: g = gabtight(a,M,L); g = [zeros(1,ceil(L/3)) fftshift(gaussnk(floor(2*L/3)))].'; g = g + i*g; % here tight, so dual = primal % gs = pgauss(L); % gs = gabdual(g,a,M); % gs = eye(L,1); % gs = [1 1 1 0 0 0]; % gs = g+10*eps; gs = randc(L,1); gd = gabdual(g,a,M); gsd = gabdual(gs,a,M); % Creation of target system if usetargetmult == 0 % random matrix as target T = randc(L,L)+i*randc(L,L); else % random multiplier as target origsym = randc(M,N)+i*randc(M,N); T = gabmulmat(origsym,g,gs,a); end % Frame synthesis matrices: G_xxl = gabbaspIrr(g,xpo); % XXL Ga = tfmat('dgt',g,a,M); Gs = tfmat('dgt',gs,a,M); Gd = tfmat('dgt',gd,a,M); % check frame condition if cond(Ga) == Inf disp('The analysis filterbank does not form a frame!'); else disp(sprintf('The analysis filterbank forms a frame with frame bound ratio %g.',cond(Ga)^2)); end if cond(Gs) == Inf disp('The synthesis filterbank does not form a frame!'); % check if gabmulappr gives error! else disp(sprintf('The synthesis filterbank forms a frame with frame bound ratio %g.',cond(Gs)^2)); end Gram = (Gs'*Gs) .* conj(Ga'*Ga); % Frame matrix for tensor products S_tensor = []; for ii = 1:n_fram P = Ga(:,ii)*Gs(:,ii)'; S_tensor = [S_tensor P(:)]; end; % % Gram matrix in HS if cond(S_tensor) == Inf disp('The tensor products do not form a frame sequence!'); else disp(sprintf('The tensor products form a frame sequence with frame bound ratio %g.',cond(S_tensor))); if det(Gram) ~= 0 disp('They form a Riesz sequence!'); end end disp(' '); disp('--- Comparing Gabor systems: ---'); compnorm(G_xxl.',Ga); lowsym_direct = zeros(M*N,1); %lower symbol as in GMAPPIR for ii=1:n_fram lowsym_direct(ii) = (Gs(:,ii)')*(T*Ga(:,ii)); end; lowsym_direct = reshape(lowsym_direct,M,N); % reordering (conj/invol.) due to TF structure lowsym_xxl = reshape(diag(Gs'*(T*Ga)),M,N); lowsym_ltfat = mat2low(T.',g,gs,a,M); % lowsym_ltfat(T) = lowsym_xxl(T).' = lowsym_ltfat ( T.') disp('--- Comparing lower symbols: ---'); compnorm(lowsym_xxl,lowsym_direct); compnorm(lowsym_ltfat,lowsym_xxl); % % upper symbol: pinvGram = pinv(Gram); uppsym_xxl = reshape(pinvGram*(lowsym_xxl(:)),M,N); uppsym_direct = reshape(pinvGram*(lowsym_direct(:)),M,N); % uppsym_new = low2upp(lowsym_xxl,g,gs,a); uppsym_ltfat = gabmulappr(T,g,gs,a,M); % new idea % we know: reshape(dgt(T,g,a,M),M,N)-Ga'*T == 0 % so later use (also above) the faster dgt [GM_irr,uppsym_irr] = GMAPPir(T.',xpo,g,gs); uppsym_irr = reshape(uppsym_irr,M,N); disp('--- Comparing upper symbols: ---'); compnorm(uppsym_xxl,uppsym_ltfat); compnorm(uppsym_xxl,uppsym_direct); compnorm(uppsym_irr,uppsym_direct); % compnorm(uppsym_ltfat,uppsym_new); % compnorm(uppsym_ltfat,uppsym_xxl); if usetargetmult == 1 disp(' - Comparing to original symbol: -'); compnorm(uppsym_ltfat,origsym); end % XXL GM_ltfat = gabmulmat(uppsym_ltfat,g,gs,a); % conjugation works for Gabor multiplier!! GM_test = zeros(L,L); for ii = 1:N*M P = Ga(:,ii)*Gs(:,ii)'; GM_test = GM_test + uppsym_direct(ii)*P; end; % direct GM_direct = Gs*(diag(uppsym_direct(:))*Ga'); disp('--- Comparing matrices: ---'); compnorm(GM_direct,GM_ltfat); compnorm(GM_ltfat,GM_irr.'); % !!!!!!!!!!!!!!!! % compnorm(GM_irr,GM_direct); disp('--- Approximation error: ---'); compnorm(GM_ltfat,T); compnorm(GM_irr.',T); compnorm(GM_direct,T); % %-------------------- % % new idea: % % use matrix representation of operator % % take the diagonal for multiplier: % uppsym_soend = diag(reshape(dgt(T*Gd,g,a,M),9,9)); % GM_soend = Gs*(diag(uppsym_soend(:))*Ga'); % % disp('----- Comparing new idea: -------'); % compnorm(uppsym_direct,uppsym_soend); % compnorm(GM_direct,GM_soend); % compnorm(GM_soend,T); ltfat/inst/private/ref_idwiltiv.m0000664000175000017500000000304212612404256017061 0ustar susnaksusnakfunction f=ref_idwiltiv(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_idwiltiv %@verbatim %REF_IDWILTIV Reference Inverse DWILT type IV % Usage: c=ref_idwiltiv(f,g,a,M); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_idwiltiv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); W=size(c,2); N=L/a; F=zeros(L,M*N); k=(0:L-1)'; pif=pi/4; for n=0:floor(N/2)-1 for m=0:2:M-1 F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*cos((m+.5)*pi*(k+.5)/M+pif); end; for m=1:2:M-1 F(:,1+m+2*n*M)=sqrt(2)*circshift(g,2*n*a).*sin((m+.5)*pi*(k+.5)/M+pif); end; for m=0:2:M-1 F(:,1+m+(2*n+1)*M)=sqrt(2)*circshift(g,(2*n+1)*a).*sin((m+.5)*pi*(k+.5)/M+pif); end; for m=1:2:M-1 F(:,1+m+(2*n+1)*M)=sqrt(2)*circshift(g,(2*n+1)*a).*cos((m+.5)*pi*(k+.5)/M+pif); end; end; f=F*c; ltfat/inst/private/test_wmdct2.m0000664000175000017500000000424512612404256016637 0ustar susnaksusnakfunction test_failed=test_wmdct2 test_failed=0; disp(' =============== TEST_WMDCT2 ================'); %-*- texinfo -*- %@deftypefn {Function} test_wmdct2 %@verbatim % Run some fixed test to test the interface. % This is not a thourough tester. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_wmdct2.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % --- test 1 ---------------- L=64; M=8; Lf=63; W=3; f=tester_rand(Lf,Lf,W); g=pgauss(L,1); gd=wildual(g,M); [c,Ls]=wmdct2(f,g,M); r=iwmdct2(c,gd,Ls); res=r-f; nres=norm(res(:)); [test_failed,fail]=ltfatdiditfail(nres,test_failed); % failed=''; % if nres>10e-10 % failed='FAILED'; % test_failed=test_failed+1; % end; s=sprintf('WMDCT2 Lf:%3i L:%3i %0.5g %s',Lf,L,nres,fail); disp(s) % --- test 2 ------------------- L=256; M1=16; M2=32; W=1; f=tester_rand(L,L,1); g=pgauss(L,1); gd1=wildual(g,M1); gd2=wildual(g,M2); c=wmdct2(f,g,[M1,M2]); c2=ref_wmdct2(f,g,g,M1,M2); rc=c-c2; nres=norm(rc(:)); [test_failed,fail]=ltfatdiditfail(nres,test_failed); % failed=''; % if nres>10e-10 % failed='FAILED'; % test_failed=test_failed+1; % end; s=sprintf('WMDCT2 REF M1:%3i M2:%3i %0.5g %s',M1,M2,nres,fail); disp(s) r=iwmdct2(c,gd1,gd2); res=r-f; nres=norm(res(:)); [test_failed,fail]=ltfatdiditfail(nres,test_failed); % failed=''; % if nres>10e-10 % failed='FAILED'; % test_failed=test_failed+1; % end; s=sprintf('WMDCT2 INV M1:%3i M2:%3i %0.5g %s',M1,M2,nres,fail); disp(s) ltfat/inst/private/ref_dcti.m0000664000175000017500000000262012612404256016152 0ustar susnaksusnakfunction c=ref_dcti(f) %-*- texinfo -*- %@deftypefn {Function} ref_dcti %@verbatim %REF_DCTI Reference Discrete Consine Transform type I % Usage: c=ref_dcti(f); % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dcti.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); if L==1 % Doing the algorithm explicitly for L=1 does a division by % zero, so we exit here instead. c=f; return; end; % Create weights. w=ones(L,1); w(1)=1/sqrt(2); w(L)=1/sqrt(2); % Create transform matrix. F=zeros(L); for m=0:L-1 for n=0:L-1 F(m+1,n+1)=w(n+1)*w(m+1)*cos(pi*n*m/(L-1)); end; end; F=F*sqrt(2/(L-1)); % Compute coefficients. c=F'*f; ltfat/inst/private/test_frametf.m0000664000175000017500000000351012612404256017055 0ustar susnaksusnakfunction test_failed=test_frametf %-*- texinfo -*- %@deftypefn {Function} test_frametf %@verbatim %TEST_FRAMETF Test the frames tf-plane conversion % % This tests if framecoef2tf and frametf2coef work. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_frametf.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed=0; L = 456; W = 3; f = tester_rand(L,W); Fr{1} = frame('dgt','gauss',10,20); Fr{1} = frame('dgtreal','gauss',10,20); Fr{3} = frame('dwilt','gauss',20); Fr{4} = frame('wmdct','gauss',20); gfilt={tester_rand(30,1),... tester_rand(20,1),... tester_rand(15,1),... tester_rand(10,1)}; Fr{5} = frame('ufilterbank', gfilt,3,4); Fr{6} = frame('ufwt','db4',4); Fr{7} = frame('uwfbt',{'db4',4}); Fr{8} = frame('uwpfbt',{'db4',4}); for ii=1:numel(Fr) F=Fr{ii}; % To avoid holes in Fr if isempty(F) continue; end; c = frana(F,f); ctf = framecoef2tf(F,c); c2 = frametf2coef(F,ctf); res = norm(c-c2); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf('COEFEQ %s %0.5g %s\n',F.type,res,fail); end ltfat/inst/private/ref_irdgt3.m0000664000175000017500000000276712612404256016437 0ustar susnaksusnakfunction f=ref_irdgt3(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_irdgt3 %@verbatim %REF_IRDGT3 Reference Inverse Real DGT type 3 % Usage: c=ref_irdgt3(f,g,a,M); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transpose. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_irdgt3.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); b=L/M; N=L/a; Mhalf=floor(M/2); F=zeros(L,M*N); l=(0:L-1).'/L; for n=0:N-1 for m=0:Mhalf-1 F(:,M*n+2*m+1)=sqrt(2)*cos(2*pi*(m+.5)*b*l).*circshift(g,n*a); F(:,M*n+2*m+2)=sqrt(2)*sin(2*pi*(m+.5)*b*l).*circshift(g,n*a); end; if mod(M,2)==1 F(:,M*(n+1))=cos(pi*L*l).*circshift(g,n*a); end; end; f=F*c; ltfat/inst/private/ref_dgtns_2.m0000664000175000017500000001123212612404256016566 0ustar susnaksusnakfunction coef = ref_dgtns_2(f,g,V); %-*- texinfo -*- %@deftypefn {Function} ref_dgtns_2 %@verbatim %REF_DGTNS_2 DGTNS by A.v.Leests Zak-transform method % Usage: coef = ref_dgtns_2(f,g,V); % % This function calculates the Gabor coefficients C_mk for a given % signal phi and synthesis window w, on a lattice that is described by % the parameters A, p, q, J, and L (see calcg for a description of % these parameters). The function gives only the non-zero elements. % (cf. C = reshape(phi*G',K,M) = Cmk.' with G=gabbas(w,xpo), % K = p*J, M = p*L*det(A) and Cmk the Gabor coefficients calculated % with this function % % The method is based on the Zak transform. % % % % Authors: % Marc Geilen, 1995. (rectangular lattice) % Arno J. van Leest, 1998. (non-separable lattice) % Peter L. Soendergaard, 2006 (change of variable names) %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgtns_2.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Conversion of parameters. phi=f; w=g; % V is on Peters normal form. a=V(1,1); b=V(2,2); Lpeter=size(g,1); Mpeter=Lpeter/b; Npeter=Lpeter/a; c=gcd(a,Mpeter); d=gcd(b,Npeter); ppeter=a/c; qpeter=Mpeter/c; % Conversion, part 1 -------------------------- qarno=ppeter; parno=qpeter; J=c; % --------------------------------------------- % Convert to Arnos normal form gcd1=gcd(V(1,1),V(1,2)); gcd2=gcd(V(2,1),V(2,2)); A=zeros(2); A(1,:)=V(1,:)/gcd1; A(2,:)=V(2,:)/gcd2; [gg,h0,h1] = gcd(A(1,1),A(1,2)); D = det(A); % Stupid, but needed in Octave D=round(D); % ---------- more conversion ------------- Larno=d/D; % --------------------------------------- x = A(2,:)*[h0;h1]; x = mod(x,D); A = [1 0;x D]; %function [g,nrm]=calcg(A,p,q,J,L,w); % Bereken de nodige variabelen. %A = eqform(A); swap = 0; %D=det(A); Marno=parno*Larno*D; Narno=qarno*J; K=parno*J; r=-A(2,1); h=gcd(D,qarno); f=D/h; % Conversion, part 2 ----------- Narno=a; K=Mpeter; Marno=Npeter; % ------------------------------ clear p clear q clear M clear N clear L clear a clear b clear c clear d %function a = calca(A,p,q,J,L,w,phi); %A = eqform(A); %N = q*J; %M = p*L*D; %h = gcd(D,q); %f = D/h; %r = -A(2,1); w = reshape(w,Narno,Marno); phi = reshape(phi,f*parno*Narno,h*Larno); % Bereken de zak-getransformeerde van phi en w. phiz = fft(phi,[],2); wz = fft(w,[],2); % Bereken de matrix lmwz bestaande uit p 'quasi'-periodes van de % zakgetransformeerde van w(n). size(lmwz)=(p*N,M) lmwz = zeros(f*parno*Narno,Marno); O = (0:Marno-1)/Marno; O = O(ones([1 Narno]),:); for n = 0:f*parno-1, lmwz(n*Narno+1:n*Narno+Narno,:) = wz.*exp(j*2*pi*n*O); end % Doe de nodige verschuivingen die nodig zijn voor non-separable lattices. for i = 0:f*qarno-1, lmwz(i*K+1:i*K+K,:) = circshift(lmwz(i*K+1:i*K+K,:),i*r*parno*Larno); phiz(i*K+1:i*K+K,:) = circshift(phiz(i*K+1:i*K+K,:),i*r*parno*Larno); end; % Bereken de fouriergetransformeerde van a_mk m.b.h. de vergelijking % af(n,l)= som over s= K* zphi(n+sK,l;fpN) wz*(n+sK,l;N) af = zeros(K,Marno); for n = 0:K-1, for s = 0:f*parno-1, af(n+1,s*h*Larno+1:s*h*Larno+h*Larno)= ... ... %K*diag(lmwz(n+1:K:f*parno*Narno,s*h*Larno+1:s*h*Larno+h*Larno)'*phiz(n+1:K:f*parno*Narno,:)).'; K*sum(conj(lmwz(n+1:K:f*parno*Narno,s*h*Larno+1:s*h*Larno+h*Larno)).*phiz(n+1:K:f*parno*Narno,:)); end; end; % Doe wat voorbereidingen om de array a te kunnen berekenen. O1 = (0:parno*Larno-1)/Marno; O1 = O1(ones([1 K]),:); O2 = (0:K-1).'/D/K; O2 = O2(:,ones([1 parno*Larno])); af2 = zeros(D*K,parno*Larno); for i = 0:D-1 for v = 0:D-1, af2(i*K+1:i*K+K,:) = af2(i*K+1:i*K+K,:)+af(:,v*parno*Larno+1:v*parno*Larno+parno*Larno).*exp(j*2*pi*i*v/D); end; af2(i*K+1:i*K+K,:) = af2(i*K+1:i*K+K,:).*exp(j*2*pi*(i*O1+mod(i*r,-D)*O2)); end; % Bereken de array a uit de fouriergetransformeerde af2 at = af2; a = at; for i = 0:D-1, at(i*K+1:i*K+K,:) = fft(af2(i*K+1:i*K+K,:),[],1)/K; a(i*K+1:i*K+K,:) = ifft(at(i*K+1:i*K+K,:),[],2)/D; end; a = reshape(a,K,Marno); coef=a(:); ltfat/inst/private/test_pgauss.m0000664000175000017500000000344312612404256016740 0ustar susnaksusnakfunction test_failed=test_pgauss %-*- texinfo -*- %@deftypefn {Function} test_pgauss %@verbatim %TEST_PGAUSS Test PGAUSS %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_pgauss.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed=0; disp(' =============== TEST_PGAUSS ================'); L=19; % Test that tfr=1 works res=norm(pgauss(L)-dft(pgauss(L))); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['PGAUSS 1 %0.5g %s\n'],res,fail); % Test dilation property res=norm(pgauss(L,7)-dft(pgauss(L,1/7))); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['PGAUSS 2 %0.5g %s\n'],res,fail); % Test norm res=norm(pgauss(L))-1; [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['PGAUSS 3 %0.5g %s\n'],res,fail); % Test that dft(freq shift) == time shift res=norm(dft(pgauss(L,'cf',5))-pgauss(L,'delay',5)); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['PGAUSS 3 %0.5g %s\n'],res,fail); ltfat/inst/private/test_realout.m0000664000175000017500000000614412612404256017112 0ustar susnaksusnakfunction test_failed=test_realout %-*- texinfo -*- %@deftypefn {Function} test_realout %@verbatim %TEST_REALOUT Test if functions produce real-valued output %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_realout.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed=0; disp(' =============== TEST_REALOUT ================'); a = 7; M = 19; W = 3; L = a*M*4; Nwil = L/(2*M); Nmd = L/M; Ngab = L/a; Nfft = 19; test_failed=realhelper(test_failed,'dwilt',randn(L,W),randn(L,1),M); test_failed=realhelper(test_failed,'dwilt',randn(L,W),randn(2*M,1),M); test_failed=realhelper(test_failed,'wmdct',randn(L,W),randn(L,1),M); test_failed=realhelper(test_failed,'wmdct',randn(L,W),randn(2*M,1),M); test_failed=realhelper(test_failed,'idwilt',randn(2*M,Nwil),randn(L,1)); test_failed=realhelper(test_failed,'idwilt',randn(2*M,Nwil),randn(2*M,1)); test_failed=realhelper(test_failed,'iwmdct',randn(M,Nmd),randn(L,1)); test_failed=realhelper(test_failed,'iwmdct',randn(M,Nmd),randn(2*M,1)); test_failed=realhelper(test_failed,'gabdual',randn(L,1),a,M); test_failed=realhelper(test_failed,'gabdual',randn(L,1),a,M); test_failed=realhelper(test_failed,'gabtight',randn(M,1),a,M); test_failed=realhelper(test_failed,'gabtight',randn(M,1),a,M); test_failed=realhelper(test_failed,'dcti',randn(Nfft,1)); test_failed=realhelper(test_failed,'dctii',randn(Nfft,1)); test_failed=realhelper(test_failed,'dctiii',randn(Nfft,1)); test_failed=realhelper(test_failed,'dctiv',randn(Nfft,1)); test_failed=realhelper(test_failed,'dsti',randn(Nfft,1)); test_failed=realhelper(test_failed,'dstii',randn(Nfft,1)); test_failed=realhelper(test_failed,'dstiii',randn(Nfft,1)); test_failed=realhelper(test_failed,'dstiv',randn(Nfft,1)); test_failed=realhelper(test_failed,'pfilt',randn(L,1),randn(L,1)); c=dgtreal(randn(L,W),randn(L,1),a,M); test_failed=realhelper(test_failed,'idgtreal',c,randn(L,1),a,M); test_failed=realhelper(test_failed,'idgtreal',c,randn(M,1),a,M); c=fftreal(randn(Nfft,1)); test_failed=realhelper(test_failed,'ifftreal',c,Nfft); function test_failed=realhelper(test_failed,funname,varargin) outres=feval(funname,varargin{:}); res=~isreal(outres); if res>0 outres end; [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf('REAL %s %i %s\n',funname,res,fail); ltfat/inst/private/ref_rdgt3.m0000664000175000017500000000303212612404256016250 0ustar susnaksusnakfunction c=ref_rdgt3(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_rdgt3 %@verbatim %REF_RDGT3 Reference Real DGT type 3 % Usage: c=ref_rdgtiii(f,g,a,M); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transpose. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_rdgt3.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); b=L/M; N=L/a; Mhalf=floor(M/2); F=zeros(L,M*N); l=(0:L-1).'/L; for n=0:N-1 for m=0:Mhalf-1 F(:,M*n+2*m+1)=sqrt(2)*cos(2*pi*(m+.5)*b*l).*circshift(g,n*a); F(:,M*n+2*m+2)=sqrt(2)*sin(2*pi*(m+.5)*b*l).*circshift(g,n*a); end; if mod(M,2)==1 F(:,M*(n+1))=cos(pi*L*l).*circshift(g,n*a); end; end; % dot-transpose will work because F is real. c=F.'*f; ltfat/inst/private/test_pbspline.m0000664000175000017500000000426412612404256017254 0ustar susnaksusnakfunction test_failed=test_pbspline Lr=[15,16,18,20]; ar=[ 3, 4, 6, 5]; or=[1, 1.5, 2,3]; %-*- texinfo -*- %@deftypefn {Function} test_pbspline %@verbatim %btypes={'ed','xd','stard','ec','xc','starc'}; %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_pbspline.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . btypes={'ed','xd','stard'}; centtypes={'wp','hp'}; test_failed=0; disp(' =============== TEST_PBSPLINE ============'); for ii=1:length(Lr) L=Lr(ii); a=ar(ii); N=L/a; for jj=1:length(or) order=or(jj); for kk=1:numel(btypes) btype=btypes{kk}; for ll=1:2 centstring=centtypes{ll}; [g,nlen]=pbspline(L,order,a,btype,centstring); A=zeros(L,1); for n=0:N-1 A=A+circshift(g,n*a); end; res=max(abs(A-1/sqrt(a))); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('PBSPLINE PU %2s %s L:%3i a:%3i o:%3.5g %0.5g %s', ... btype,centstring,L,a,order,res,fail); disp(s); gcutextend=middlepad(middlepad(g,nlen,centstring),L,centstring); res=norm(g-gcutextend); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('PBSPLINE NLEN %2s %s L:%3i a:%3i o:%3.5g %0.5g %s', ... btype,centstring,L,a,order,res,fail); disp(s); end; end; end; end; ltfat/inst/private/test_dgt_ola.m0000664000175000017500000000424312612404256017046 0ustar susnaksusnakfunction test_failed=test_dgt_ola %-*- texinfo -*- %@deftypefn {Function} test_dgt_ola %@verbatim %TEST_DGT_OLA Test DGT Overlap-add implementation % % This script runs a throrough test of the DGT using the OLA algorithm, % testing it on a range of input parameters. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_dgt_ola.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lr = [48,420, 4, 8,240]; ar = [ 2, 3, 2, 2, 4]; Mr = [ 4, 4, 4, 4, 6]; glr = [ 8, 24, 4, 4, 12]; blr = [16, 60, 4, 4,120]; test_failed=0; disp(' =============== TEST_DGT_OLA ================'); disp('--- Used subroutines ---'); which comp_dgt_ola which comp_dgtreal_ola for ii=1:length(Lr); L=Lr(ii); M=Mr(ii); a=ar(ii); gl=glr(ii); bl=blr(ii); b=L/M; N=L/a; for W=1:3 for rtype=1:2 if rtype==1 rname='REAL '; f=randn(L,W); g=randn(gl,1); c1 = comp_dgtreal_ola(f,g,a,M,bl); c2 = dgtreal(f,g,a,M); else rname='CMPLX'; f=tester_crand(L,W); g=tester_crand(gl,1); c1 = comp_dgt_ola(f,g,a,M,bl); c2 = dgt(f,g,a,M); end; res = c1-c2; res = norm(res(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('REF %s L:%3i W:%3i a:%3i M:%3i gl:%3i bl:%3i %0.5g %s',... rname,L,W,a,M,gl,bl,res,fail); disp(s) end; end; end; ltfat/inst/private/test_gabfirtight.m0000664000175000017500000000466212612404256017734 0ustar susnaksusnakfunction test_failed = test_gabfirtight() %-*- texinfo -*- %@deftypefn {Function} test_gabfirtight %@verbatim %TEST_GABFIRTIGHT Some of the windows returned from firwin are tight % immediatelly. This function tests for that %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_gabfirtight.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed = 0; disp(' =============== TEST_GABFIRTIGHT ================'); disp('--- Used subroutines ---'); which gabwin which comp_window shouldBeTight = [... struct('g','sine','a',10,'M',40,'L',[]),... struct('g',{{'sine',40}},'a',10,'M',40,'L',[]),... struct('g',{{'sine',28}},'a',14,'M',40,'L',[]),... struct('g','sine','a',20,'M',40,'L',[]),... struct('g',{{'sine',60}},'a',20,'M',60,'L',[]),... struct('g',{{'sine',54}},'a',18,'M',60,'L',[]),... struct('g',{{'sine',54,'inf'}},'a',18,'M',60,'L',[]),... struct('g','sine','a',5,'M',40,'L',[]),... struct('g','sqrttria','a',5,'M',40,'L',[]),... ]; shouldNotBeTight = [... struct('g','sine','a',16,'M',40,'L',[]),... struct('g',{{'sine',41}},'a',10,'M',40,'L',[]),... struct('g',{{'sine',26}},'a',10,'M',40,'L',[]),... struct('g','sqrttria','a',40,'M',40,'L',[]),... ]; for ii=1:numel(shouldBeTight) gw = shouldBeTight(ii); [~,info] = gabwin(gw.g,gw.a,gw.M,gw.L); [test_failed,fail]=ltfatdiditfail(~info.istight,test_failed,0); fprintf(['GABFIRISTIGHT g= a=%i M=%i %s\n'],gw.a,gw.M,fail); end for ii=1:numel(shouldNotBeTight) gw = shouldNotBeTight(ii); [~,info] = gabwin(gw.g,gw.a,gw.M,gw.L); [test_failed,fail]=ltfatdiditfail(info.istight,test_failed,0); fprintf(['GABFIRISNOTTIGHT g= a=%i M=%i %s\n'],gw.a,gw.M,fail); end ltfat/inst/private/ref_dwiltiv_1.m0000664000175000017500000000412712612404256017135 0ustar susnaksusnakfunction [coef]=ref_dwiltiv_1(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dwiltiv_1 %@verbatim %COMP_DWILT Compute Discrete Wilson transform. % % Do not call this function directly, use DWILT instead. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dwiltiv_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author : Peter L. Soendergaard. L=size(g,1); N=L/a; W=size(f,2); c=ref_gdgt(f,g,a,2*M,0.5,.5,0); coef2=reshape(c,2*M,N,W); % ----- Type IV ------ coef=zeros(M,N,W); if 0 % --- Loop version --- for n=0:N-1 for m=0:M-1 if rem(m+n,2)==0 coef(m+1,n+1,:)= 1/sqrt(2)*(exp(-i*pi/4)*coef2(m+1,n+1,:)+exp(-i*pi*3/4)*coef2(2*M-m,n+1,:)); else coef(m+1,n+1,:)= 1/sqrt(2)*(exp(i*pi/4)*coef2(m+1,n+1,:)+exp(i*pi*3/4)*coef2(2*M-m,n+1,:)); end; end; end; else % --- Vector version--- % --- m is even --------- coef(1:2:M,1:2:N,:)= 1/sqrt(2)*(exp(-i*pi/4)*coef2(1:2:M,1:2:N,:)+exp(-i*pi*3/4)*coef2(2*M:-2:M+1,1:2:N,:)); coef(1:2:M,2:2:N,:)= 1/sqrt(2)*(exp(i*pi/4)*coef2(1:2:M,2:2:N,:)+exp(i*pi*3/4)*coef2(2*M:-2:M+1,2:2:N,:)); % --- m is odd ---------- coef(2:2:M,1:2:N,:)= 1/sqrt(2)*(exp(i*pi/4)*coef2(2:2:M,1:2:N,:)+exp(i*pi*3/4)*coef2(2*M-1:-2:M+1,1:2:N,:)); coef(2:2:M,2:2:N,:)= 1/sqrt(2)*(exp(-i*pi/4)*coef2(2:2:M,2:2:N,:)+exp(-i*pi*3/4)*coef2(2*M-1:-2:M+1,2:2:N,:)); end; coef=reshape(coef,M*N,W); ltfat/inst/private/testinginit.m0000664000175000017500000000164312612404256016740 0ustar susnaksusnakstatus=2; %-*- texinfo -*- %@deftypefn {Function} testinginit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/testinginit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/crand.m0000664000175000017500000000203312612404256015460 0ustar susnaksusnakfunction f=crand(p1,p2); %-*- texinfo -*- %@deftypefn {Function} crand %@verbatim %CRAND Random complex numbers for testing. % Usage: f=tester_crand(p1,p2); %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/crand.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . f=rand(p1,p2)-.5+i*(rand(p1,p2)-.5); ltfat/inst/private/ref_wilbounds.m0000664000175000017500000000204212612404256017233 0ustar susnaksusnakfunction [A,B]=ref_wilbounds(g,a,M); L=length(g); N=L/a; F=ref_idwilt(eye(M*N),g,a,M); S=F'*F; d=eig(S); A=min(d); B=max(d); %-*- texinfo -*- %@deftypefn {Function} ref_wilbounds %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_wilbounds.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ref_iedgtii.m0000664000175000017500000000276212612404256016654 0ustar susnaksusnakfunction f=ref_iedgtii(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_iedgtii %@verbatim %REF_IEDGTII Inverse Reference Even DGT type II % Usage f=ref_edgt(c,g,a,M); % % If a is even, then the input window must be odd-centered of length 2L. % % If a is odd, then the input window must be even-centered of length 2L. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_iedgtii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L2=size(g,1); W=size(c,2); L=L2/2; b=L/M; N=L/a; F=zeros(L,M*N); l=(0:L-1).'; lsecond=(2*L-1:-1:L).'; gnew=circshift(g,floor(a/2)); for n=0:N-1 for m=0:M-1 gshift=circshift(gnew,n*a); F(:,M*n+m+1)=exp(2*pi*i*m*(l+.5)/M).*gshift(l+1) + ... exp(-2*pi*i*m*(l+.5)/M).*gshift(lsecond+1); end; end; f=F*c; ltfat/inst/private/ref_pconv_ola_fir2long.m0000664000175000017500000000304612612404256021014 0ustar susnaksusnakfunction h=ref_pconv_ola_fir2long(f,g,Lb) %-*- texinfo -*- %@deftypefn {Function} ref_pconv_ola_fir2long %@verbatim % % This function implements periodic convolution using overlap-add. The % window g is supposed to be extended by fir2iir. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_pconv_ola_fir2long.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=length(f); Lg=length(g); % Number of blocks Nb=L/Lb; % Length of extended block and padded g Lext=Lb+Lg; gpad=fir2long(g,Lext); b2=Lg/2; h=zeros(L,1); for ii=0:Nb-1 block=pconv(postpad(f(ii*Lb+1:(ii+1)*Lb),Lext),gpad); h(ii*Lb+1:(ii+1)*Lb)+=block(1:Lb); % Large block s_ii=mod(ii+1,Nb); h(s_ii*Lb+1:s_ii*Lb+b2)+=block(Lb+1:Lb+b2); % Small block + s_ii=mod(ii-1,Nb)+1; h(s_ii*Lb-b2+1:s_ii*Lb)+=block(Lb+b2+1:Lext); % Small block - end; ltfat/inst/private/test_nonsepdgt.m0000664000175000017500000002322212612404256017434 0ustar susnaksusnakfunction test_failed=test_nonsepdgt %-*- texinfo -*- %@deftypefn {Function} test_nonsepdgt %@verbatim %TEST_NONSEPDGT Test non-separable DGT % % This script runs a throrough test of the DGT routine, % testing it on a range of input parameters. % % The computational backend is tested this way, but the % interface is not. % % The script tests dgt, idgt, gabdual and gabtight. % % Use TEST_WFAC and TEST_DGT_FAC for more specific testing % of the DGT backend. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_nonsepdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lr =[24,24,30,36,36,48,72]; ar =[ 4, 4, 3, 4, 4, 4, 4]; Mr =[ 6, 6, 5, 6, 6, 6, 6]; lt1=[ 0, 1, 1, 1, 2, 1, 1]; lt2=[ 1, 2, 2, 3, 3, 4, 2]; test_failed=0; testmode=0; disp(' =============== TEST_NONSEPDGT ================'); disp('--- Used subroutines ---'); which comp_nonsepdgt_multi which comp_nonsepdgt_shear which comp_nonsepwin2multi for ii=1:length(Lr); L=Lr(ii); M=Mr(ii); a=ar(ii); lt=[lt1(ii), lt2(ii)]; b=L/M; N=L/a; c=gcd(a,M); d=gcd(b,N); p=a/c; q=M/c; for gtype=1:2 if gtype==1 Lw=L; else Lw=M; end; for rtype=1:2 if rtype==1 rname='REAL'; g=tester_rand(Lw,1); else rname='CMPLX'; g=tester_crand(Lw,1); end; gd=gabdual(g,a,M,'lt',lt); gd_multi=gabdual(g,a,M,'lt',lt,'nsalg',1); gd_shear=gabdual(g,a,M,'lt',lt,'nsalg',2); gt=gabtight(g,a,M,'lt',lt); gt_multi=gabtight(g,a,M,'lt',lt,'nsalg',1); gt_shear=gabtight(g,a,M,'lt',lt,'nsalg',2); % For testing, we need to call some computational subroutines directly. gsafe=fir2long(g,L); gdsafe=fir2long(gd,L); for W=1:3 if rtype==1 f=tester_rand(L,W); else f=tester_crand(L,W); end; % --------- test reference comparison ------------ cc = dgt(f,g,a,M,'lt',lt); cc_ref = ref_nonsepdgt(f,g,a,M,lt); res = norm(cc(:)-cc_ref(:))/norm(cc(:)); stext=sprintf(['REF %s L:%3i W:%2i LW:%3i a:%3i M:%3i lt1:%2i lt2:%2i' ... ' %0.5g'], rname,L,W,Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); % --------- test multiwindow --------------------- cc = comp_dgt(f,gsafe,a,M,lt,0,0,1); res = norm(cc(:)-cc_ref(:))/norm(cc(:)); stext=sprintf('DGT MULTIW %s L:%3i W:%2i LW:%3i a:%3i M:%3i lt1:%2i lt2:%2i %0.5g ',... rname,L,W,Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); % --------- test shear DGT ------------------------------- cc = comp_dgt(f,gsafe,a,M,lt,0,0,2); res = norm(cc(:)-cc_ref(:))/norm(cc(:)); stext=sprintf(['DGT SHEAR %s L:%3i W:%2i LW:%3i a:%3i ' ... 'M:%3i lt1:%2i lt2:%2i %0.5g'], rname,L,W, ... Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); % -------- test reconstruction using canonical dual ------- r=idgt(cc,gd,a,'lt',lt); res=norm(f-r,'fro')/norm(f,'fro'); stext=sprintf(['REC D %s L:%3i W:%2i LW:%3i a:%3i M:%3i ' ... 'lt1:%2i lt2:%2i %0.5g'], rname,L,W,Lw,a,M, ... lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); % -------- test reconstruction using canonical dual, multiwin algorithm ------- r=comp_idgt(cc,gdsafe,a,lt,0,1); res=norm(f-r,'fro')/norm(f,'fro'); stext=sprintf(['REC MULTIW D %s L:%3i W:%2i LW:%3i a:%3i ' ... 'M:%3i lt1:%2i lt2:%2i %0.5g ' ], rname,L,W, ... Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); % -------- test reconstruction using canonical dual, shear algorithm ------- r=comp_idgt(cc,gdsafe,a,lt,0,2); res=norm(f-r,'fro')/norm(f,'fro'); stext=sprintf(['REC SHEAR D %s L:%3i W:%2i LW:%3i a:%3i ' ... 'M:%3i lt1:%2i lt2:%2i %0.5g ' ], rname,L,W, ... Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); % -------- test reconstruction using canonical tight ------- cc_t = dgt(f,gt,a,M,'lt',lt); r=idgt(cc_t,gt,a,'lt',lt); res=norm(f-r,'fro')/norm(f,'fro'); stext=sprintf(['REC T %s L:%3i W:%2i LW:%3i a:%3i M:%3i ' ... 'lt1:%2i lt2:%2i %0.5g ' ], rname,L,W,Lw,a, ... M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); % -------- test dgtreal----------------------- if (rtype==1) && (lt(2)<=2) M2=floor(M/2)+1; cc_r = dgtreal(f,g,a,M,'lt',lt); res=cc_r-cc(1:M2,:,:); res=norm(res(:))/norm(cc_r(:));; stext=sprintf(['REFREAL L:%3i W:%2i LW:%3i a:%3i ' ... 'M:%3i lt1:%2i lt2:%2i %0.5g' ], ... L,W,Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); r_real = idgtreal(cc_r,gd,a,M,'lt',lt); res=norm(f-r_real,'fro')/norm(f,'fro'); stext=sprintf(['RECREAL L:%3i W:%2i LW:%3i a:%3i ' ... 'M:%3i lt1:%2i lt2:%2i %0.5g '], ... L,W,Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); end; end; % -------- test frame bounds for tight frame ------- B=gabframebounds(gt,a,M,'lt',lt); res=B-1; stext=sprintf(['FRB %s L:%3i LW:%3i a:%3i M:%3i lt1:%2i lt2:%2i ' ... '%0.5g'], rname,L,Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); % -------- test multiwin dual ------- res=norm(gd-gd_multi)/norm(g); stext=sprintf(['DUAL MULTI %s L:%3i LW:%3i a:%3i M:%3i lt1:%2i ' ... 'lt2:%2i %0.5g' ], rname,L,Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); % -------- test shear dual ------- res=norm(gd-gd_shear)/norm(g); stext=sprintf(['DUAL SHEAR %s L:%3i LW:%3i a:%3i M:%3i lt1:%2i ' ... 'lt2:%2i %0.5g'], rname,L,Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); % -------- test shear tight ------- res=norm(gt-gt_multi)/norm(g); stext=sprintf(['TIGHT MULTI %s L:%3i LW:%3i a:%3i M:%3i lt1:%2i ' ... 'lt2:%2i %0.5g' ], rname,L,Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); % -------- test shear tight ------- res=norm(gt-gt_shear)/norm(g); stext=sprintf(['TIGHT SHEAR %s L:%3i LW:%3i a:%3i M:%3i lt1:%2i ' ... 'lt2:%2i %0.5g' ], rname,L,Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); % ---- Test gabdualnorm -------------------------------------- res=gabdualnorm(g,gd,a,M,'lt',lt); stext=sprintf(['DUALNORM1 %s L:%3i LW:%3i a:%3i M:%3i lt1:%2i ' ... 'lt2:%2i %0.5g' ], rname,L,Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); [o1,o2]=gabdualnorm(g,gd,a,M,'lt',lt); res=o1-1+o2; stext=sprintf(['DUALNORM2 %s L:%3i LW:%3i a:%3i M:%3i lt1:%2i ' ... 'lt2:%2i %0.5g' ], rname,L,Lw,a,M,lt(1),lt(2),res); test_failed=ltfatchecktest(res,stext,test_failed,testmode); end; end; end; ltfat/inst/private/test_lconv.m0000664000175000017500000000420412612404256016553 0ustar susnaksusnakfunction test_failed=test_lconv Lf=[9, 10 9, 9, 1]; Wf=[1, 1, 3, 1, 1]; Lg=[9, 10 9, 9, 1]; Wg=[1, 1, 1, 3, 1]; ctypes={'default','r','rr'}; test_failed=0; disp(' =============== TEST_LCONV =============='); for jj=1:length(Lf) for ii=1:3 for type = {'real','complex'} ctype=ctypes{ii}; if strcmp(type{1},'complex') f=tester_crand(Lf(jj), Wf(jj)); g=tester_crand(Lg(jj), Wg(jj)); else f=tester_rand(Lf(jj), Wf(jj)); g=tester_rand(Lg(jj), Wg(jj)); end h1=lconv(f,g,ctype); h2cell = {}; if Wf(jj) == 1 for wId = 1:Wg(jj) h2cell{end+1}=ref_lconv(f,g(:,wId),ctype); end else for wId = 1:Wf(jj) h2cell{end+1}=ref_lconv(f(:,wId),g,ctype); end end h2 = cell2mat(h2cell); res=norm(h1(:)-h2(:)); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('PCONV %3s %6s %0.5g %s',ctype,type{1},res,fail); disp(s); end end end %-*- texinfo -*- %@deftypefn {Function} test_lconv %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_lconv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/private/ref_irdftiii.m0000664000175000017500000000260112612404256017031 0ustar susnaksusnakfunction c=ref_irdftiii(f) %-*- texinfo -*- %@deftypefn {Function} ref_irdftiii %@verbatim %REF_IRDFTIII Reference Inverse Real DFT type III % Usage: c=ref_irdftiii(f); % % Compute IRDFTIII by explicit formulas. % % The transform is orthonormal %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_irdftiii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); Lhalf=floor(L/2); F=zeros(L); F(:,1)=ones(L,1); l=(0:L-1).'/L; for m=0:Lhalf-1 F(:,2*m+1)=sqrt(2)*cos(2*pi*(m+.5)*l); F(:,2*m+2)=sqrt(2)*sin(2*pi*(m+.5)*l); end; if mod(L,2)==1 F(:,L)=cos(pi*L*l); end; F=F/sqrt(L); % dot-transpose will work because F is real. c=F*f; ltfat/inst/private/test_frames.m0000664000175000017500000001753612612404256016723 0ustar susnaksusnakfunction test_failed=test_frames %-*- texinfo -*- %@deftypefn {Function} test_frames %@verbatim %TEST_FRAMES Test the frames methods %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_frames.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed=0; disp(' =============== TEST_FRAMES ================'); global LTFAT_TEST_TYPE; tolchooser.double=1e-9; tolchooser.single=2e-4; tolerance = tolchooser.(LTFAT_TEST_TYPE); % Iterative algorithms need a bigger tolerance tolchooseriter.double=1e-1; tolchooseriter.single=1e-1; toleranceiter = tolchooseriter.(LTFAT_TEST_TYPE); Fr=cell(1,32); L=200; Fr{1} = frame('dgt','gauss',10,20); Fr{2} = frame('dgtreal','gauss',10,20); Fr{3} = frame('dwilt','gauss',20); Fr{4} = frame('wmdct','gauss',20); Fr{5} = frame('gen',tester_crand(200,300),20); Fr{6} = frametight(frame('dgt','gauss',10,20)); Fr{7} = frametight(frame('dgtreal','gauss',10,20)); Fr{8} = frametight(frame('dwilt','gauss',20)); Fr{9} = frametight(frame('wmdct','gauss',20)); Fr{10} = frametight(frame('gen',tester_crand(200,300),20)); Fr{11} = frame('dft'); Fr{12} = frame('dcti'); Fr{13} = frame('dctii'); Fr{14} = frame('dctiii'); Fr{15} = frame('dctiv'); Fr{16} = frame('dsti'); Fr{17} = frame('dstii'); Fr{18} = frame('dstiii'); Fr{19} = frame('dstiv'); % Repeat generation of the filters until they have a nice condition number condnum = 1e10; while condnum > 1e3 gfilt={tester_rand(30,1),... tester_rand(20,1),... tester_rand(15,1),... tester_rand(10,1)}; gfilt=cellfun(@(gEl) cast(gEl,'double'),gfilt,'UniformOutput',0); % These two frames might be badly conditioned, Fr{20} = frame('ufilterbank', gfilt,3,4); Fr{21} = frame('ufilterbankreal',gfilt,3,4); condnum = framebounds(Fr{20},128); end Fr{22} = frame('dgt','gauss',4,6,'lt',[1 2]); Fr{23} = frame('identity'); Fr{24} = frame('fusion',[1 1],Fr{1},Fr{1}); Fr{25} = frametight(frame('dgt','hamming',10,20)); Fr{26} = frametight(frame('wmdct','hamming',20)); g={randn(30,1),randn(50,1),randn(70,1),randn(90,1)}; a=[20,40,60,80]; M=[30,50,70,100]; Fr{27} = frametight(frame('nsdgt',g,a,M)); Fr{28} = frametight(frame('unsdgt',g,a,100)); Fr{29} = frametight(frame('nsdgtreal',g,a,M)); Fr{30} = frametight(frame('unsdgtreal',g,a,100)); Fr{31} = frametight(frame('dftreal')); Fr{32} = frame('fwt','ana:spline2:2',5); Fr{33} = frame('wfbt',{'syn:spline2:2',5}); %Fr{34} = frame('wpfbt',{'db4',5}); %Fr{35} = frame('wpfbt',{'db4',5}); %Fr{36} = frame('wpfbt',{'db4',5}); Fr{37} = frame('ufwt','db4',4); Fr{38} = frame('ufwt','db4',4,'scale'); Fr{39} = frame('ufwt','db4',4,'noscale'); Fr{40} = frame('uwfbt',{'db4',4}); Fr{41} = frame('uwfbt',{'db4',4},'scale'); Fr{42} = frame('uwfbt',{'db4',4},'noscale'); Fr{43} = frame('uwpfbt',{'db4',4}); Fr{44} = frame('uwpfbt',{'db4',4},'scale'); Fr{45} = frame('uwpfbt',{'db4',4},'noscale'); %Fr{36} = frame('uwfbt',{'db4',5}); %Fr{37} = frame('uwpfbt',{'db4',5}); % The tensor frame implementation is currenly broken %Fr{33} = frame('tensor',Fr{11}); %Fr{31} = frame('filterbank', gfilt,[4 3 2 2],4); %Fr{32} = frame('filterbankreal', gfilt,[4 3 2 2],4); Fr{60} = frame('erbletfb',44100,L,'real','regsampling'); Fr{61} = frame('erbletfb',44100,L,'complex','regsampling'); Fr{62} = frame('erbletfb',44100,L,'real','fractional'); Fr{63} = frame('erbletfb',44100,L,'complex','fractional'); Fr{64} = frametight(Fr{60}); Fr{65} = frametight(Fr{62}); Fr{66} = frame('cqtfb',44100,200,20000,20,L,'real','regsampling'); Fr{67} = frame('cqtfb',44100,200,20000,20,L,'complex','regsampling'); Fr{68} = frame('cqtfb',44100,200,20000,20,L,'real','fractional'); Fr{69} = frame('cqtfb',44100,200,20000,20,L,'complex','fractional'); Fr{70} = frametight(Fr{66}); Fr{71} = frametight(Fr{67}); for cmpx = {'real','complex'} if strcmp(cmpx{1},'real') f=tester_rand(L,1); else f=tester_crand(L,1); end for ii=1:numel(Fr) F=Fr{ii}; % To avoid holes in Fr if isempty(F) continue; end; % Do not test real-only frames with complex arrays if strcmp(cmpx{1},'complex') && F.realinput continue; end Fd=framedual(F); c=frana(F,f); r=frsyn(Fd,c); res=norm(r(1:L)-f); lendiff = size(c,1) - frameclength(F,L); [test_failed,fail]=ltfatdiditfail(lendiff ,test_failed); s=sprintf(['FRAMES CLENGTH frameno:%3i %s %0.5g %s'],ii,F.type,lendiff,fail); disp(s); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); s=sprintf(['FRAMES DUAL REC frameno:%3i %s %0.5g %s'],ii,F.type,res,fail); disp(s); % Checking equality F == framedual(framedual(F)) Fdd = framedual(framedual(F)); cdd = frana(Fdd,f); res_dd = norm(cdd-c); [test_failed,fail]=ltfatdiditfail(res_dd,test_failed,tolerance); s=sprintf(['FRAMES DUAL DUAL frameno:%3i %s %0.5g %s'],ii,F.type,res_dd,fail); disp(s); F2=frameaccel(F,L); F2d=frameaccel(Fd,L); c=frana(F2,f); r=frsyn(F2d,c); res=norm(r(1:L)-f); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); s=sprintf(['FRAMES ACCEL DUAL REC frameno:%3i %s %0.5g %s'],ii,F.type,res,fail); disp(s); % Checking equality F == framedual(framedual(F)) after acceleration F2dd = framedual(framedual(F2)); c2dd = frana(Fdd,f); res2_dd = norm(c2dd-c); [test_failed,fail]=ltfatdiditfail(res2_dd,test_failed,tolerance); s=sprintf(['FRAMES ACCEL DUAL DUAL frameno:%3i %s %0.5g %s'],ii,F.type,res2_dd,fail); disp(s); % Test that framebounds are able to run, not actual resting is done on % the values. [A,B]=framebounds(F,L); %% Test iterative analysis and synthesis r=frsyniter(F,c); res=norm(r(1:L)-f); [test_failed,fail]=ltfatdiditfail(res,test_failed,toleranceiter); s=sprintf(['FRSYNITER frameno:%3i %s %0.5g %s'],ii,F.type,res,fail); disp(s); c2=franaiter(Fd,f); res=norm(c2-c); [test_failed,fail]=ltfatdiditfail(res,test_failed,toleranceiter); s=sprintf(['FRANAITER frameno:%3i %s %0.5g %s'],ii,F.type,res,fail); disp(s); %% Test matrix representations if (~F.realinput) LL=framelength(F,L); G=frsynmatrix(F,LL); res=norm(c-G'*postpad(f,LL)); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); s=sprintf(['FRAMES ANA MATRIX frameno:%3i %s %0.5g %s'],ii,F.type,res,fail); disp(s); % We create a different set of coefficients here. % The old code used c and failed the test for some filterbank frames ctmp = tester_crand(numel(c),1); res=norm(frsyn(F,ctmp)-G*ctmp); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); s=sprintf(['FRAMES SYN MATRIX frameno:%3i %s %0.5g %s'],ii,F.type,res,fail); disp(s); end; %% Test the frame multipliers: test framemul, framemuladj and %% iframemul if F.realinput m=1+0.01*tester_rand(size(c,1),1); else m=1+1i+0.01*tester_crand(size(c,1),1); end; ff=framemul(f,F,Fd,m); fr=iframemul(ff,F,Fd,m); res=norm(f-fr(1:L))/norm(f); [test_failed,fail]=ltfatdiditfail(res,test_failed,tolerance); s=sprintf('IFRAMEMUL frameno:%3i %s %0.5g %s',ii, ... F.type,res,fail); disp(s); end; end ltfat/inst/private/ref_dwiltii.m0000664000175000017500000000340612612404256016677 0ustar susnaksusnakfunction c=ref_dwiltii(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dwiltii %@verbatim %REF_DWILT Reference Discrete Wilson Transform type II % Usage: c=ref_dwiltii(f,g,M); % % M must be even. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dwiltii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Setup transformation matrix. L=size(f,1); N=L/M; F=zeros(L); l=(0:L-1).'; for n=0:N/2-1 % Do the unmodulated coefficient. F(:,2*M*n+1)=circshift(g,2*a*n); % m odd case OK for m=1:2:M-1 F(:,m+2*M*n+1) = sqrt(2)*sin(pi*m/M*(l+.5)).*circshift(g,2*n*a); F(:,m+2*M*n+M+1) = sqrt(2)*cos(pi*m/M*(l+.5)).*circshift(g,(2*n+1)*a); end; for m=2:2:M-1 F(:,m+2*M*n+1) = sqrt(2)*cos(pi*m/M*(l+.5)).*circshift(g,2*n*a); F(:,m+2*M*n+M+1) = sqrt(2)*sin(pi*m/M*(l+.5)).*circshift(g,(2*n+1)*a); end; if rem(M,2)==0 % Do the Nyquest wave. F(:,M+2*M*n+1) = sin(pi*(l+.5)).*circshift(g,(2*n+1)*a); else F(:,M+2*M*n+1) = sin(pi*(l+.5)).*circshift(g,2*n*a); end; end; c=F'*f; ltfat/inst/private/ref_gabdual_fac_time.m0000664000175000017500000000244412612404256020461 0ustar susnaksusnakfunction ff=ref_gabdual_fac_time(gf,L,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_gabdual_fac_time %@verbatim %REF_GABDUAL_FAC_TIME Computes factorization of canonical dual window % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_gabdual_fac_time.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . LR=prod(size(gf)); R=LR/L; b=L/M; N=L/a; c=gcd(a,M); d=gcd(b,N); p=b/d; q=N/d; ff=zeros(p*q*R,c*d); G=zeros(p,q*R); for ii=1:c*d % This essentially computes pinv of each block. G(:)=gf(:,ii); S=G*G'; Gpinv=(S\G); ff(:,ii)=Gpinv(:); end; ltfat/inst/private/ref_phaselock.m0000664000175000017500000000250612612404256017203 0ustar susnaksusnakfunction c = ref_phaselock(c,a) %-*- texinfo -*- %@deftypefn {Function} ref_phaselock %@verbatim %REF_PHASELOCK Phaselock Gabor coefficients % Usage: c=phaselock(c,a); % % phaselock(c,a) phaselocks the Gabor coefficients c. The coefficients % must have been obtained from a DGT with parameter a. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_phaselock.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: M=size(c,1); N=size(c,2); L=N*a; b=L/M; TimeInd = (0:(N-1))*a; FreqInd = (0:(M-1))*b; phase = FreqInd'*TimeInd; phase = exp(2*1i*pi*phase/L); c=bsxfun(@times,c,phase); ltfat/inst/private/ref_idwilt.m0000664000175000017500000000563512612404256016534 0ustar susnaksusnakfunction f=ref_idwilt(c,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_idwilt %@verbatim %REF_DWILT Reference Inverse Discrete Wilson Transform % Usage: f=ref_idwilt(c,g,a,M); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_idwilt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Setup transformation matrix. L=size(g,1); W=size(c,2); N=L/a; F=zeros(L,M*N); % Weight coefficients. l=(0:L-1).'; pif=0; if 1 % This version uses sines and cosines to express the basis functions. for n=0:N/2-1 % Do the unmodulated coefficient. F(:,2*M*n+1)=circshift(g,2*a*n); % Setting this to -n*a should produce a time-invariant transform. timeinv=0; %-n*a; % m odd case for m=1:2:M-1 F(:,m+2*M*n+1) = sqrt(2)*sin(pi*m/M*(l+timeinv)+pif).*circshift(g,2*n*a); F(:,m+2*M*n+M+1) = sqrt(2)*cos(pi*m/M*(l+timeinv)+pif).*circshift(g,(2*n+1)*a); end; % m even case for m=2:2:M-1 F(:,m+2*M*n+1) = sqrt(2)*cos(pi*m/M*(l+timeinv)+pif).*circshift(g,2*n*a); F(:,m+2*M*n+M+1) = sqrt(2)*sin(pi*m/M*(l+timeinv)+pif).*circshift(g,(2*n+1)*a); end; % Most modulated coefficient, Nyquest frequency. if mod(M,2)==0 F(:,M+2*M*n+1)=(-1).^(l+timeinv).*circshift(g,2*n*a); else F(:,M+2*M*n+1)=(-1).^(l+timeinv).*circshift(g,(2*n+1)*a); end; end; else % This version uses a cosine, for n=0:N/2-1 % Do the unmodulated coefficient. F(:,2*M*n+1)=circshift(g,2*a*n); timeinv=-n*a; % m odd case for m=1:2:M-1 F(:,m+2*M*n+1) = sqrt(2)*cos(pi*m/M*(l+timeinv-M/2)+pif).*circshift(g,2*n*a); F(:,m+2*M*n+M+1) = sqrt(2)*sin(pi*m/M*(l+timeinv-M/2-a)+pif).*circshift(g,(2*n+1)*a); end; % m even case for m=2:2:M-1 F(:,m+2*M*n+1) = sqrt(2)*cos(pi*m/M*(l+timeinv-M/2)+pif).*circshift(g,2*n*a); F(:,m+2*M*n+M+1) = sqrt(2)*sin(pi*m/M*(l+timeinv-M/2-a)+pif).*circshift(g,(2*n+1)*a); end; % Most modulated coefficient, Nyquest frequency. if mod(M,2)==0 F(:,M+2*M*n+1)=(-1).^(l+timeinv).*circshift(g,2*n*a); else F(:,M+2*M*n+1)=(-1).^(l+timeinv-a).*circshift(g,(2*n+1)*a); end; end; end; f=F*c; ltfat/inst/private/ref_dgt_2.m0000664000175000017500000000351312612404256016230 0ustar susnaksusnakfunction c=ref_dgt_2(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dgt_2 %@verbatim %REF_DGT_2 DGT algorithm 2 %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgt_2.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); N=L/a; b=L/M; [c,h_a,h_m]=gcd(-a,M); p=a/c; q=M/c; d=N/q; w=zeros(M,N); % mt = m-tilde if 0 % This version uses the definition for r=0:c-1 for l=0:q-1 for n=0:N-1 for mt=0:b-1 w(r+l*c+1,mod(n-l*h_a,N)+1)=w(r+l*c+1,mod(n-l*h_a,N)+1)+f(mod(r+l*c+(mt-l*h_m)*M,L)+1)*... conj(g(mod(r+mt*M-n*a,L)+1)); end; end; end; end; else % This version uses matrix-vector products. W=zeros(b,N); V=zeros(b,q); for r=0:c-1 % Setup the matrix and vector for mt=0:b-1 for n=0:N-1 W(mt+1,n+1)=g(mod(r+mt*M-n*a,L)+1); end; for l=0:q-1 V(mt+1,l+1)=f(mod(r+mt*M+l*(c-h_m*M),L)+1); end; end; % do the product. s1=W'*V; % Arrange in w for n=0:N-1 for l=0:q-1 w(r+l*c+1,mod(n-l*h_a,N)+1)=s1(n+1,l+1); end; end; end; end; c=fft(w); ltfat/inst/private/ref_gabdualns_2.m0000664000175000017500000001035212612404256017411 0ustar susnaksusnakfunction gd=ref_gabdualns_2(g,V); %-*- texinfo -*- %@deftypefn {Function} ref_gabdualns_2 %@verbatim %REF_GABDUALNS_2 GABDUALNS by A.v.Leest's Zak-transform method. % Usage: g=ref_gabdualns_2(gamma,V); % % This function calculates the dual window g of the given window % w for the Gabor expansion on a lattice that is described by the % parameters A, p, q, J, and L. Furthermore, the l_2 norm of the % difference of the (normalized) dual window and the (normalized) % window is calculated. % % The method is based on the Zak transform. % % Marc Geilen, 1995. (rectangular lattice) % Arno J. van Leest, 1998. (non-separable lattice) % Peter L. Soendergaard, 2006 (change of variable names) %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_gabdualns_2.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % This documents Arno's variable names % % D the determinant of the matrix A and the number of time shifts % in each time segment (segment between two points on the % time-axis) % K=pJ the number of samples in the freq. domain after each time shift. % N=qJ the size of the time shift. % DN length of a time segment. % p/q the oversampling. % M=pLD the number of time shifts. % pL the number of points on the time-axis. % MN length of the signal. % MK the number of lattice points (MK/MN=K/N=p/q is the oversampling). % % (note that MN must be equal to the length of the window w). % % V is on Peters normal form. a=V(1,1); b=V(2,2); Lpeter=size(g,1); Mpeter=Lpeter/b; Npeter=Lpeter/a; c=gcd(a,Mpeter); d=gcd(b,Npeter); ppeter=a/c; qpeter=Mpeter/c; % Conversion, part 1 -------------------------- qarno=ppeter; parno=qpeter; J=c; % --------------------------------------------- % Convert to Arnos normal form gcd1=gcd(V(1,1),V(1,2)); gcd2=gcd(V(2,1),V(2,2)); A=zeros(2); A(1,:)=V(1,:)/gcd1; A(2,:)=V(2,:)/gcd2; [gg,h0,h1] = gcd(A(1,1),A(1,2)); D = det(A); % Stupid, but needed in Octave D=round(D); % ---------- more conversion ------------- Larno=d/D; % --------------------------------------- x = A(2,:)*[h0;h1]; x = mod(x,D); A = [1 0;x D]; %function [g,nrm]=calcg(A,p,q,J,L,w); % Bereken de nodige variabelen. %A = eqform(A); swap = 0; %D=det(A); Marno=parno*Larno*D; Narno=qarno*J; K=parno*J; r=-A(2,1); h=gcd(D,qarno); f=D/h; % Conversion, part 2 ----------- Narno=a; K=Mpeter; Marno=Npeter; % ------------------------------ clear p clear q clear M clear N clear L clear a clear b clear c clear d g=reshape(g,Narno,Marno); wz = fft(g,[],2); % gz zal de zakgetransformeerde van g bevatten gz=zeros(Narno,Marno); mgz=zeros(f*Narno,Marno); mwz=zeros(f*Narno,Marno); % The circshifts work along the rows! O = (0:Marno-1); O = O(ones([1 J]),:); for n=0:qarno-1, i=rem(n*parno,qarno); k=fix(n*parno/qarno); for l=0:f-1, mwz((n+l*qarno)*J+1:(n+l*qarno)*J+J,:)= ... circshift(wz(i*J+1:i*J+J,:).*exp(j*2*pi*(k+parno*l)/Marno*O),... [0 (n+l*qarno)*r*parno*Larno]); end; end for n=0:J-1, for l=0:Larno*h-1, mgz(n+1:J:f*Narno,l+1:Larno*h:Marno)=... f*parno/K*(pinv(mwz(n+1:J:f*Narno,l+1:Larno*h:Marno)))'; end; end; % Voer nu de omgekeerde bewerkingen uit van de verschuivingen en phase % correcties om gz te verkrijgen uit mgz for n=0:qarno-1, i=rem(n*parno,qarno); k=fix(n*parno/qarno); gz(i*J+1:i*J+J,:)=circshift(mgz(n*J+1:n*J+J,:),[0 -n*r*parno*Larno]) ... .*exp(-j*2*pi*k/Marno*O); end % Bereken de functie g uit gz gd = ifft(gz(1:Narno,:),[],2); gd = gd(:); if swap gd=parno/qarno*gd; end; ltfat/inst/private/ref_pbspline.m0000664000175000017500000001017512612404256017047 0ustar susnaksusnakfunction [out,nlen] = ref_pbspline(splinetype,L,order,a,centering) %-*- texinfo -*- %@deftypefn {Function} ref_pbspline %@verbatim %PBSPLINE Periodized B-spline. % Usage: out=pbspline(splinetype,L,order,a); % [out,nlen]=pbspline(splinetype,L,order,a); % % Input parameters: % splinetype : type of spline % L : Length of window. % order : Order of B-spline. % a : Time-shift parameter for partition of unity. % Output parameters: % out : Almost B-spline. % nlen : Number of non-zero elements in out. % % % Types are: % 0 - as pspline, real formed from DFT product % 1 - forced even by taking ABS value of fft. % 2 - New even % 3 - computed from continous case %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_pbspline.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. error(nargchk(4,5,nargin)); if nargin==4 centering=0; end; % Matlab and Octave uses the following definition of a fractional % power of a complex number. This is consistant with what Unser uses. % zp=abs(z).^alpha.*exp(i*alpha*angle(z)); % This is always WPE s1=middlepad([ones(a,1)],L); nlen=0; switch splinetype case 0 % (Possibly) unsymmeteric spline % If a=3,7,11,... then the Nyquest frequency will have a negative % coefficient, and generate a complex spline. if centering==0 % Method 1 out = real(ifft(fft(s1).^(order+1))); % Method 2 % Create FFT of spline. Flip over top part, to make it strickly real. % This method is more robust against a bad FFT implementation. %sf=fft(s1).^(order+1); %if rem(L,2)==0 % sf(L/2+2:L)=conj(flipud(sf(2:L/2))); %else % sf((L+3)/2:L)=conj(flipud(sf(2:(L+1)/2))); %end; %sf(L/2+1) %out = real(ifft(sf)); else s2=middlepad([ones(a,1)],L,.5); out = real(ifft(fft(s1).^order.*fft(s2))); end; case 1 % Symmetric spline if centering==0 out = real(ifft(abs(fft(s1)).^(order+1))); else s2=middlepad([ones(a,1)],L,.5); out = real(ifft(abs(fft(s1)).^order.*abs(fft(s2)))); end; case 2 % Mild symmetric intorder=floor(order); fracorder=order-intorder; if centering==0 out = real(ifft(abs(fft(s1)).^order.*fft(s1))); else s2=middlepad([ones(a,1)],L,.5); out = real(ifft(abs(fft(s1)).^order.*fft(s2))); end; case 3 Llong=ceil(a*(order+2)/L)*L; x=((0:Llong-1).')/a; x out=zeros(Llong,1); for k=0:order+1 out=out+(-1)^k*ref_bincoeff(order+1,k)*onesidedpower(x-k,order); out end; out=out/factorial(order); end; % Scale such that the elements will form a partition of unity. out=out./a.^order; % nlen cannot be larger that L nlen=min(L,nlen); % If order is a fraction nlen==L if rem(order,1)~=0 nlen=L; end; if use_row_layout out=out.'; end; % Normalize out=out/sqrt(a); % This code verifies that we have obtained a partition of unity. %pu=zeros(L,1); %for ii=0:L/a-1 % pu=pu+circshift(out,a*ii); %end; %pu % Verify middlepad claim %norm(out-middlepad(middlepad(out,nlen),L)) function xa=onesidedpower(x,a) % Compute a one-sided power. See Unser and Blu "Fractional Spline and % Wavelets", section 1.1.2 % Zero all negative values x=x.*(x>=0) % Raise xa=x.^a; ltfat/inst/private/ref_rdftiii_1.m0000664000175000017500000000303012612404256017075 0ustar susnaksusnakfunction c=ref_rdftiii_1(f) %-*- texinfo -*- %@deftypefn {Function} ref_rdftiii_1 %@verbatim %REF_RDFTIII_1 Reference RDFT by FFT % Usage: c=ref_rdftiii_1(f); % % Compute RDFTII by doing a DFTIII and returning half the coefficients. % Only works for real functions. % % The transform is orthonormal %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_rdftiii_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); Lhalf=floor(L/2); Lend=Lhalf*2; cc=ref_dftiii(f); c=zeros(size(f)); % Copy the cosine-part of the coefficients. c(1:2:Lend,:)=sqrt(2)*real(cc(1:Lhalf,:)); % Copy the sine-part of the coefficients. c(2:2:Lend,:)=-sqrt(2)*imag(cc(1:Lhalf,:)); % If f has an odd length, we must also copy the Niquest-wave % (it is real) if mod(L,2)==1 c(end,:)=real(cc((L+1)/2,:)); end; ltfat/inst/private/ref_pconv.m0000664000175000017500000000300112612404256016346 0ustar susnaksusnakfunction h=ref_pconv(f,g,ctype) %-*- texinfo -*- %@deftypefn {Function} ref_pconv %@verbatim %REF_PCONV Reference PCONV % Usage: h=ref_pconv(f,g) % % PCONV(f,g) computes the periodic convolution of f and g. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_pconv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard L=length(f); h=zeros(L,1); switch(lower(ctype)) case {'default'} for ii=0:L-1 for jj=0:L-1 h(ii+1)=h(ii+1)+f(jj+1)*g(mod(ii-jj,L)+1); end; end; case {'r'} for ii=0:L-1 for jj=0:L-1 h(ii+1)=h(ii+1)+f(jj+1)*conj(g(mod(jj-ii,L)+1)); end; end; case {'rr'} for ii=0:L-1 for jj=0:L-1 h(ii+1)=h(ii+1)+conj(f(mod(-jj,L)+1))*conj(g(mod(jj-ii,L)+1)); end; end; end; ltfat/inst/private/test_erbfilters.m0000664000175000017500000001171012612404256017573 0ustar susnaksusnakfunction test_failed=test_erbfilters %-*- texinfo -*- %@deftypefn {Function} test_erbfilters %@verbatim %TEST_ERBFILTERS Test the erbfilters filter generator %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_erbfilters.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warpname={'warped','symmetric'}; Ls = 10000; %warpname={'symmetric'}; test_failed=0; for realcomplexidx=1:2 if realcomplexidx==1 realcomplex='real'; isreal=1; else realcomplex='complex'; isreal=0; end; for warpidx=1:2 warping=warpname{warpidx}; for fracidx=2:-1:1 if fracidx==1 fractional={'regsampling'}; fracname='regsamp'; else fractional={'fractional'}; fracname='fractional'; end; for uniformidx=1:2 if uniformidx==1 isuniform=0; uniform='regsampling'; else isuniform=1; uniform='uniform'; end; [g,a]=erbfilters(16000,Ls,fractional{:},warping,uniform,... 'redmul',1,realcomplex,'nuttall30'); L=filterbanklength(Ls,a); f=randn(L,1); % Test it if 0 f=[1;zeros(L-1,1)]; ff=fft(f); ff(1999:2003)=0; f=ifft(ff); end; if 0 % Inspect it: Dual windows, frame bounds and the response disp('Frame bounds:') [A,B]=filterbankrealbounds(g,a,L); A B B/A filterbankresponse(g,a,L,'real','plot'); end; if isreal gd=filterbankrealdual(g,a,L); else gd=filterbankdual(g,a,L); end; if isuniform c=ufilterbank(f,g,a); else c=filterbank(f,g,a); end; cind = cell(numel(g),1); for ii = 1:numel(g) %clear comp_filterbank_fftbl; cind{ii} = pfilt(f,g{ii},a(ii,:)); end if isuniform cind = cell2mat(cind); res = norm(c(:) - cind(:)); else res = sum(cellfun(@(c1El,c2El) norm(c1El-c2El),cind,c)); end [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['ERBFILTER PFILT %s %s %s %s L:%3i %0.5g %s'],realcomplex,warping,fracname,uniform,L,res,fail); disp(s); r=ifilterbank(c,gd,a); if isreal r=2*real(r); end; res=norm(f-r); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['ERBFILTER DUAL %s %s %s %s L:%3i %0.5g %s'],realcomplex,warping,fracname,uniform,L,res,fail); disp(s); if isreal gt=filterbankrealtight(g,a,L); else gt=filterbanktight(g,a,L); end; if isuniform c=ufilterbank(f,gt,a); else c=filterbank(f,gt,a); end; rt=ifilterbank(c,gt,a); if isreal rt=2*real(rt); end; res=norm(f-rt); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf(['ERBFILTER TIGHT %s %s %s %s L:%3i %0.5g %s'],realcomplex,warping,fracname,uniform,L,res,fail); disp(s); end; end; end; end; ltfat/inst/private/ref_dft.m0000664000175000017500000000240412612404256016004 0ustar susnaksusnakfunction c=ref_dft(f) %-*- texinfo -*- %@deftypefn {Function} ref_dft %@verbatim %REF_DFT Reference Discrete Fourier Transform % Usage: c=ref_dft(f); % % REF_DFT(f) computes the unitary discrete Fourier transform of f. % % AUTHOR: Jordy van Velthoven %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dft.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); c= zeros(L,W); for w=1:W for k=0:L-1 for l=0:L-1 c(k+1,w) = c(k+1,w) + f(l+1,w) * exp(-2*pi*i*k*l/L); end; end; end c = c./sqrt(L); ltfat/inst/private/test_wtfft_undec.m0000664000175000017500000000473212612404256017750 0ustar susnaksusnakfunction test_failed = test_wtfft_undec; %-*- texinfo -*- %@deftypefn {Function} test_wtfft_undec %@verbatim %TEST_COMP_FWT_ALL % % Checks perfect reconstruction of the wavelet transform % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_wtfft_undec.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed = 0; load vonkoch; f=vonkoch; f = 0:2^7-1; f = f'; J = 3; w = waveletfb('db',2); wh = w.h; for ii=1:numel(wh) wh{ii}=w.h{ii}./sqrt(w.a(ii)); end [h,a] = multid(wh,J); H = freqzfb(h,length(f),a,'wtfft'); tic; c1 = wtfft(f,H,[]);toc; tic; c2 = fwt(f,w,J,'undec'); toc; printCoeffs(c1,c2); wg = w.g; for ii=1:numel(wh) wg{ii}=w.g{ii}./sqrt(w.a(ii)); end [g,a] = multid(wg,J); G = freqzfb(g,length(f),a,'syn','wtfft'); fhat = iwtfft(c1,G,[],length(f));toc; stem([f,fhat]); hlens = zeros(numel(h),1); for jj = 1:numel(h) hlens(jj) = length(h{jj}); end shifts=zeros(numel(c1),1); % check coefficients and find for jj = 1:numel(c1) if(norm(c1{jj}-c2{jj})>1e-6) for sh=1:floor(length(c1{jj})/2) if(norm(c1{jj}-circshift(c2{jj},sh))<1e-6) shifts(jj)=sh; continue; end if(norm(c1{jj}-circshift(c2{jj},-sh))<1e-6) shifts(jj)=-sh; continue; end end if(shifts(jj)~=0) continue; end; % even all coefficients shifts are not equal shifts(jj)=Inf; end end shifts function printCoeffs( x,y) [J,N1] = size(x); for j=1:J subplot(J,1,j); % err = x{j}(:) - y{j}(:); stem([x{j}(:),y{j}(:)]); lh = line([0 length(x{j})],[eps eps]); set(lh,'Color',[1 0 0]); lh =line([0 length(x{j})],[-eps -eps]); set(lh,'Color',[1 0 0]); end ltfat/inst/private/test_rangecompress.m0000664000175000017500000000274512612404256020312 0ustar susnaksusnakfunction test_failed=test_rangecompress %-*- texinfo -*- %@deftypefn {Function} test_rangecompress %@verbatim %TEST_RANGECOMPRESS Test range compression and expansion %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_rangecompress.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed=0; disp(' =============== TEST_RANGECOMPRESS ================'); x=tester_crand(5,11); y=rangecompress(x,'mulaw'); x_r=rangeexpand(y,'mulaw'); res=norm(x-x_r,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['RANGECOMPRESS MULAW %0.5g %s\n'],res,fail); y=rangecompress(x,'alaw'); x_r=rangeexpand(y,'alaw'); res=norm(x-x_r,'fro'); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf(['RANGECOMPRESS ALAW %0.5g %s\n'],res,fail); ltfat/inst/private/ref_spreadadj.m0000664000175000017500000000254512612404256017172 0ustar susnaksusnakfunction cadj=ref_spreadadj(coef); %-*- texinfo -*- %@deftypefn {Function} ref_spreadadj %@verbatim %REF_SPREADADJ Symbol of adjoint preading function. % Usage: cadj=ref_spreadadj(c); % % cadj=SPREADADJ(c) will compute the symbol cadj of the spreading % operator that is the adjoint of the spreading operator with symbol c. % % The algorithm converts the symbol to the matrix representation, % adjoints its, and finds its spreading function. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_spreadadj.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(coef,1); T=tfmat('spread',coef); cadj=spreadfun(T'); ltfat/inst/private/ref_idwilt_1.m0000664000175000017500000000540112612404256016743 0ustar susnaksusnakfunction [f]=ref_idwilt_1(coef,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_idwilt_1 %@verbatim %REF_IDWILT_1 Reference IDWILT by IDGT % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_idwilt_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author : Peter L. Soendergaard L=size(g,1); N=L/a; W=size(coef,2); coef=reshape(coef,M*2,N/2,W); coef2=zeros(2*M,N,W); if 1 % ----- Loop version --- for n=0:N/2-1 % m=0 coef2(1,2*n+1,:) = coef(1,n+1,:); for m=0:M-1 % m odd for m=1:2:M-1 coef2(m+1,2*n+1,:) = -i/sqrt(2)*coef(m+1,n+1,:); coef2(m+1,2*n+2,:) = 1/sqrt(2)*coef(M+m+1,n+1,:); coef2(2*M-m+1,2*n+1,:) = i/sqrt(2)*coef(m+1,n+1,:); coef2(2*M-m+1,2*n+2,:) = 1/sqrt(2)*coef(M+m+1,n+1,:); end; % m even for m=2:2:M-1 coef2(m+1,2*n+1,:) = 1/sqrt(2)*coef(m+1,n+1,:); coef2(m+1,2*n+2,:) = -i/sqrt(2)*coef(M+m+1,n+1,:); coef2(2*M-m+1,2*n+1,:) = 1/sqrt(2)*coef(m+1,n+1,:); coef2(2*M-m+1,2*n+2,:) = i/sqrt(2)*coef(M+m+1,n+1,:); end; end; % m=nyquest if mod(M,2)==0 coef2(M+1,2*n+1,:) = coef(M+1,n+1,:); else coef2(M+1,2*n+2,:) = coef(M+1,n+1,:); end; end; else % ----- Vector version --- % First and middle modulation are transferred unchanged. coef2(1,1:2:N,:) = coef(1,:,:); if mod(M,2)==0 coef2(M+1,1:2:N,:) = coef(M+1,:,:); else coef2(M+1,2:2:N,:) = coef(M+1,:,:); end; if M>2 coef2(3:2:M,1:2:N,:) = 1/sqrt(2)*coef(3:2:M,:,:); coef2(3:2:M,2:2:N,:) = -1/sqrt(2)*i*coef(M+3:2:2*M,:,:); coef2(2*M-1:-2:M+2,1:2:N,:) = 1/sqrt(2)*coef(3:2:M,:,:); coef2(2*M-1:-2:M+2,2:2:N,:) = 1/sqrt(2)*i*coef(M+3:2:2*M,:,:); end; % sine, first column. coef2(2:2:M,1:2:N,:) = -1/sqrt(2)*i*coef(2:2:M,:,:); coef2(2:2:M,2:2:N,:) = 1/sqrt(2)*coef(M+2:2:2*M,:,:); coef2(2*M:-2:M+2,1:2:N,:) = 1/sqrt(2)*i*coef(2:2:M,:,:); coef2(2*M:-2:M+2,2:2:N,:) = 1/sqrt(2)*coef(M+2:2:2*M,:,:); end; f=idgt(reshape(coef2,2*M,N,W),g,a); ltfat/inst/private/ref_irdft_1.m0000664000175000017500000000322012612404256016554 0ustar susnaksusnakfunction f=ref_irdft_1(c) %-*- texinfo -*- %@deftypefn {Function} ref_irdft_1 %@verbatim %REF_RDFT_1 Reference IRDFT by IFFT % Usage: f=ref_irdft(c); % % Compute IRDFT by doubling the signal and doing an IDFT % to obtain the reconstructed signal %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_irdft_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(c,1); Lhalf=ceil(L/2); Lend=Lhalf*2-1; if ~isreal(c) f=ref_irdft_1(real(c))+i*ref_irdft_1(imag(c)); else % Make it an orthonal transform. c=c*sqrt(L/2); cc=zeros(size(c),assert_classname(c)); % Copy the first coefficient, it is real cc(1,:)=c(1,:)*sqrt(2); cc(2:Lhalf,:)=c(2:2:Lend,:)- i*c(3:2:Lend,:); cc(L-Lhalf+2:end,:)= c(Lend-1:-2:2,:) +i*c(Lend:-2:3,:); % If f has an even length, we must also copy the Nyquest-wave % (it is real) if mod(L,2)==0 cc(L/2+1,:)=c(end,:)*sqrt(2); end; f=real(ifft(cc)); end; ltfat/inst/private/ref_spreadadj_1.m0000664000175000017500000000264212612404256017410 0ustar susnaksusnakfunction cadj=ref_spreadadj_1(coef); %-*- texinfo -*- %@deftypefn {Function} ref_spreadadj_1 %@verbatim %REF_SPREADADJ Symbol of adjoint preading function. % Usage: cadj=ref_spreadadj_1(c); % % cadj=SPREADADJ(c) will compute the symbol cadj of the spreading % operator that is the adjoint of the spreading operator with symbol c. % % The algorithm uses an explit algorithm to compute the entries. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_spreadadj_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(coef,1); cadj=zeros(L); for ii=0:L-1 for jj=0:L-1 cadj(ii+1,jj+1)=conj(coef(mod(L-ii,L)+1,mod(L-jj,L)+1))... *exp(-i*2*pi*ii*jj/L); end; end; ltfat/inst/private/ref_dsti.m0000664000175000017500000000230712612404256016174 0ustar susnaksusnakfunction c=ref_dsti(f) %-*- texinfo -*- %@deftypefn {Function} ref_dsti %@verbatim %REF_DSTI Reference Discrete Sine Transform type I % Usage: c=ref_dsti(f); % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dsti.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); % Create transform matrix. F=zeros(L); for m=0:L-1 for n=0:L-1 F(m+1,n+1)=sin(pi*(n+1)*(m+1)/(L+1)); end; end; F=F*sqrt(2/(L+1)); % Compute coefficients. c=F'*f; ltfat/inst/private/ref_gabdual.m0000664000175000017500000000221412612404256016625 0ustar susnaksusnakfunction gd=ref_gabdual(g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_gabdual %@verbatim %REF_GABDUAL Reference GABDUAL % Usage: gd=ref_gabdual(g,a,M); % % Calculate the canonical dual window by simple linear algebra %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_gabdual.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . g = double(g); % To avoid inacuraces G=tfmat('dgt',g,a,M); gd=(G*G')\g; ltfat/inst/private/ref_hermbasis.m0000664000175000017500000000442012612404256017204 0ustar susnaksusnakfunction [V]=ref_hermbasis(L) %-*- texinfo -*- %@deftypefn {Function} ref_hermbasis %@verbatim %REF_HERMBASIS Orthonormal basis of discrete Hermite functions. % Usage: V=hermbasis(L); % % HERMBASIS(L) will compute an orthonormal basis of discrete Hermite % functions of length L. The vectors are returned as columns in the % output. % % All the vectors in the output are eigenvectors of the discrete Fourier % transform, and resemble samplings of the continuous Hermite functions % to some degree. % % % References: % H. M. Ozaktas, Z. Zalevsky, and M. A. Kutay. The Fractional Fourier % Transform. John Wiley and Sons, 2001. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_hermbasis.html} %@seealso{dft, pherm} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_HERMBASIS % REFERENCE: OK % Create tridiagonal sparse matrix A=ones(L,3); A(:,2)=(2*cos((0:L-1)*2*pi/L)-4).'; H=spdiags(A,-1:1,L,L); H(1,L)=1; H(L,1)=1; H=H*pi/(i*2*pi)^2; % Blow it to a full matrix, and use the linear algebra % implementation. This always works. [V,D]=eig(full(H)); % If L is not a factor of 4, then all the eigenvalues of the tridiagonal % matrix are distinct. If L IS a factor of 4, then one eigenvalue has % multiplicity 2, and we must split the eigenspace belonging to this % eigenvalue into a an even and an odd subspace. if mod(L,4)==0 x=V(:,L/2); x_e=(x+involute(x))/2; x_o=(x-involute(x))/2; x_e=x_e/norm(x_e); x_o=x_o/norm(x_o); V(:,L/2)=x_o; V(:,L/2+1)=x_e; end; ltfat/inst/private/test_nonu2ufilterbank.m0000664000175000017500000000520312612404256020722 0ustar susnaksusnakfunction test_failed = test_nonu2ufilterbank %-*- texinfo -*- %@deftypefn {Function} test_nonu2ufilterbank %@verbatim % This tests equality of coefficients of a non uniform and % an identical uniform filterbanks %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_nonu2ufilterbank.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . test_failed=0; disp('-------------TEST_NONU2UFILTERBANK-------------'); for ftypeCell = {'time','freq'} ftype = ftypeCell{1}; disp(sprintf('--------------- %s ------------',ftype)); for M=[1,6]; for aCell = {(1:M)',(M:-1:1)',ones(M,1), M*ones(M,1)} a = aCell{1}; N=10; L=filterbanklength(1,a)*N; for W = 1:3 g=cell(1,M); if strcmp(ftype,'time') for ii=1:M g{ii}=tester_crand(L/2,1); end; elseif strcmp(ftype,'freq') for ii=1:M g{ii}=struct('H',tester_crand(L,1),'foff',0,'L',L); end; end f = tester_crand(L,W); % Target coefficients c_non = filterbank(f,g,a); % Do a uniform filterbank [gu,au,pk] = nonu2ufilterbank(g,a); % Identical cell-array c_u = filterbank(f,gu,au); % Identical matrix c_uu = ufilterbank(f,gu,au); res=0; for m=1:M res=res+norm(c_u{m}-squeeze(c_uu(:,m,:))); end; [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf('COEFEQ L:%3i,W:%3i,M:%3i, %0.5g %s\n',L,W,M,res,fail); % Convert back to nonuniform format c = u2nonucfmt(c_u,pk); res = norm(cell2mat(c_non) - cell2mat(c)); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf('FORMAT CELL L:%3i,W:%3i,M:%3i, %0.5g %s\n',L,W,M,res,fail); % Convert back to nonuniform format c = u2nonucfmt(c_uu,pk); res = norm(cell2mat(c_non) - cell2mat(c)); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf('FORMAT MAT L:%3i,W:%3i,M:%3i, %0.5g %s\n',L,W,M,res,fail); % Convert c_uuu = nonu2ucfmt(c_non,pk); res = norm(cell2mat(c_uuu) - cell2mat(c_u)); [test_failed,fail]=ltfatdiditfail(res,test_failed); fprintf('FORMATBACK L:%3i,W:%3i,M:%3i, %0.5g %s\n',L,W,M,res,fail); end end end end ltfat/inst/private/ref_dgt_1.m0000664000175000017500000000315112612404256016225 0ustar susnaksusnakfunction c=ref_dgt_1(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dgt_1 %@verbatim %REF_DGT_1 DGT by Poisson summation. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgt_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(g,1); N=L/a; b=L/M; w=zeros(M,N); if 0 % This version uses the definition for jj=0:M-1 for nn=0:N-1 for kk=0:b-1 w(jj+1,nn+1)=w(jj+1,nn+1)+f(jj+kk*M+1)*conj(g(mod(jj+kk*M-nn*a,L)+1)); end; end; end; else % This version uses matrix-vector products. W=zeros(b,N); v=zeros(b,1); for jj=0:M-1 % Setup the matrix and vector for kk=0:b-1 for nn=0:N-1 W(kk+1,nn+1)=g(mod(jj+kk*M-nn*a,L)+1); end; v(kk+1)=f(mod(jj+kk*M,L)+1); end; % do the product. s1=W'*v; % Arrange in w for nn=0:N-1 w(jj+1,nn+1)=s1(nn+1); end; end; end; c=fft(w); ltfat/inst/private/ref_dgt_fb.m0000664000175000017500000000637212612404256016464 0ustar susnaksusnakfunction [coef]=ref_dgt_fb(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dgt_fb %@verbatim %REF_DGT_FB Filter bank DGT % Usage: c=ref_dgt_fb(f,g,a,M); % % This should be an exact copy of comp_dgt_fb to serve for testing % the oct/mex routines and for timings. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dgt_fb.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author : Peter L. Soendergaard. % Calculate the parameters that was not specified. L=size(f,1); b=L/M; N=L/a; gl=length(g); W=size(f,2); % Number of columns to apply the transform to. glh=floor(gl/2); % gl-half % Conjugate the window here. g=conj(fftshift(g)); coef=zeros(M,N,W); % Replicate g when multiple columns should be transformed. gw=repmat(g,1,W); % ----- Handle the first boundary using periodic boundary conditions. --- for n=0:ceil(glh/a)-1 %disp(["ref: begin: ",num2str(n)]); % This code does the same using a circshift. It will also work for % the last boundary part. %fpart=circshift(f,glh-n*a); %fg=fpart(1:gl,:).*gw; fpart=[f(L-(glh-n*a)+1:L,:);... f(1:gl-(glh-n*a),:)]; fg=fpart.*gw; % Do the sum (decimation in frequency, Poisson summation) coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); % Make it frequency invariant coef(:,n+1,:)=circshift(coef(:,n+1,:),n*a-glh); end; % ----- Handle the middle case. --------------------- for n=ceil(glh/a):floor((L-ceil(gl/2))/a) %disp(["ref: middle: ",num2str(n)]); fg=f(n*a-glh+1:n*a-glh+gl,:).*gw; % Do the sum (decimation in frequency, Poisson summation) coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); coef(:,n+1,:)=circshift(coef(:,n+1,:),n*a-glh); end; % ----- Handle the last boundary using periodic boundary conditions. --- for n=floor((L-ceil(gl/2))/a)+1:N-1 %disp(["ref: end: ",num2str(n)]); fpart=[f((n*a-glh)+1:L,:);... % L-n*a+glh) elements f(1:n*a-glh+gl-L,:)]; % gl-L+n*a-glh elements fg=fpart.*gw; % Do the sum (decimation in frequency, Poisson summation) coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); coef(:,n+1,:)=circshift(coef(:,n+1,:),n*a-glh); end; coef=fft(coef); % Simple code using a lot of circshifts. % Move f initially so it lines up with the initial fftshift of the % window %f=circshift(f,glh); %for n=0:N-1 % Do the inner product. %fg=circshift(f,-n*a)(1:gl,:).*gw; % Periodize it. %fpp=zeros(M,W); %for ii=0:gl/M-1 % fpp=fpp+fg(ii*M+1:(ii+1)*M,:); %end; % fpp=sum(reshape(fg,M,gl/M,W),2); % Shift back again. % coef(:,n+1,:)=circshift(fpp,n*a-glh); %),M,1,W); %end; ltfat/inst/private/ref_fcdgt.m0000664000175000017500000000317412612404256016323 0ustar susnaksusnakfunction c=ref_fcdgt(f,g,a,M,m_t,m_f,w_t,w_f) %-*- texinfo -*- %@deftypefn {Function} ref_fcdgt %@verbatim %REF_CDGT Reference centered DGT % Usage: c=ref_dgtiv(f,g,a,M,c_t,c_f,c_w); % % Linear algebra version of the algorithm. Create big matrix % containing all the basis functions and multiply with the transpose. % % For easy work, m_t,m_f,w_t,w_f are all just 0/1 indicator variables. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_fcdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); N=L/a; b=L/M; m_t=m_t*.5; w_t=w_t*floor(a/2); w_f=w_f*ceil(b/2); F=zeros(L,M*N); l=(0:L-1).'; if m_f==0 for n=0:N-1 for m=0:M-1 F(:,M*n+m+1)=exp(2*pi*i*(m*b+w_f)*(l+m_t)/L).*circshift(g,n*a+w_t); end; end; else for n=0:N-1 for m=0:M-1 F(:,M*n+m+1)=exp(2*pi*i*(m*b+.5+w_f)*(l+m_t-n*a)/L).*circshift(g,n*a+w_t); end; end; end; c=F'*f; ltfat/inst/private/ref_idwiltii_1.m0000664000175000017500000000550312612404256017270 0ustar susnaksusnakfunction [f]=ref_idwiltii_1(coef,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_idwiltii_1 %@verbatim %REF_IDWILTII_1 Reference IDWILTII by IDGT type II % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_idwiltii_1.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author : Peter L. Soendergaard L=size(g,1); N=L/a; W=size(coef,2); coef=reshape(coef,M*2,N/2,W); coef2=zeros(2*M,N,W); if 0 % --- loop version --- for n=0:N/2-1 % m=0 coef2(1,2*n+1,:) = coef(1,n+1,:); % m odd for m=1:2:M-1 coef2(m+1,2*n+1,:) = -i/sqrt(2)*coef(m+1,n+1,:); coef2(2*M-m+1,2*n+1,:) = -i/sqrt(2)*coef(m+1,n+1,:); coef2(m+1,2*n+2,:) = 1/sqrt(2)*coef(M+m+1,n+1,:); coef2(2*M-m+1,2*n+2,:) = -1/sqrt(2)*coef(M+m+1,n+1,:); end; % m even for m=2:2:M-1 coef2(m+1,2*n+1,:) = 1/sqrt(2)*coef(m+1,n+1,:); coef2(2*M-m+1,2*n+1,:) = -1/sqrt(2)*coef(m+1,n+1,:); coef2(m+1,2*n+2,:) = -i/sqrt(2)*coef(M+m+1,n+1,:); coef2(2*M-m+1,2*n+2,:) = -i/sqrt(2)*coef(M+m+1,n+1,:); end; % m=nyquest if mod(M,2)==0 coef2(M+1,2*n+2,:) = -i*coef(M+1,n+1,:); else coef2(M+1,2*n+1,:) = -i*coef(M+1,n+1,:); end; end; else % --- Vector version --- % First and middle modulation are transferred unchanged. coef2(1,1:2:N,:) = coef(1,:,:); coef2(2:2:M,1:2:N,:) = -i/sqrt(2)*coef(2:2:M,:,:); coef2(2*M:-2:M+2,1:2:N,:) = -i/sqrt(2)*coef(2:2:M,:,:); coef2(2:2:M,2:2:N,:) = 1/sqrt(2)*coef(M+2:2:2*M,:,:); coef2(2*M:-2:M+2,2:2:N,:) = -1/sqrt(2)*coef(M+2:2:2*M,:,:); if M>2 coef2(3:2:M,1:2:N,:) = 1/sqrt(2)*coef(3:2:M,:,:); coef2(2*M-1:-2:M+2,1:2:N,:) = -1/sqrt(2)*coef(3:2:M,:,:); coef2(3:2:M,2:2:N,:) = -i/sqrt(2)*coef(M+3:2:2*M,:,:); coef2(2*M-1:-2:M+2,2:2:N,:) = -i/sqrt(2)*coef(M+3:2:2*M,:,:); end; if mod(M,2)==0 coef2(M+1,2:2:N,:) = -i*coef(M+1,:,:); else coef2(M+1,1:2:N,:) = -i*coef(M+1,:,:); end; end; f=ref_igdgt(reshape(coef2,2*M*N,W),g,a,2*M,.5,0,0); %if norm(imag(f(:)))<1e-10 % f=real(f); %end; ltfat/inst/private/test_gabmuleigs.m0000664000175000017500000000265512612404256017561 0ustar susnaksusnakfunction test_failed=test_gabmuleigs %-*- texinfo -*- %@deftypefn {Function} test_gabmuleigs %@verbatim %TEST_GABMULEIGS Test GABMULEIGS % % Test GABMULEIGS by comparing the output from the iterative and full algorithm. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_gabmuleigs.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp(' =============== TEST_GABMULEIGS ================'); test_failed=0; a=20; M=30; L=a*M; N=L/a; c=randn(M,N); g=gabtight(a,M,L); [V1,D1]=gabmuleigs(10,c,g,a,'iter'); [V2,D2]=gabmuleigs(10,c,g,a,'full'); res=norm(D1-D2); [test_failed,fail]=ltfatdiditfail(res,test_failed); s=sprintf('GABMULEIGS L:%3i a:%3i M:%3i %0.5g %s',L,a,M,res,fail); disp(s); ltfat/inst/private/tester_rand.m0000664000175000017500000000225512612404256016711 0ustar susnaksusnakfunction f=tester_rand(varargin); %-*- texinfo -*- %@deftypefn {Function} tester_rand %@verbatim %RAND Random numbers for testing. % Usage: f=tester_rand(p1,p2); %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/tester_rand.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . global LTFAT_TEST_TYPE if isempty(LTFAT_TEST_TYPE) LTFAT_TEST_TYPE='double'; end; f=rand(varargin{:}); if strcmp(LTFAT_TEST_TYPE,'single') f=single(f); end; ltfat/inst/private/ref_dwilt.m0000664000175000017500000000344212612404256016355 0ustar susnaksusnakfunction c=ref_dwilt(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} ref_dwilt %@verbatim %REF_DWILT Reference Discrete Wilson Transform % Usage: c=ref_dwilt(f,g,a,M); % % M must be even. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/reference/ref_dwilt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Setup transformation matrix. L=size(f,1); N=L/a; F=zeros(L,M*N); % Zero-extend g if necessary g=fir2long(g,L); l=(0:L-1).'; for n=0:N/2-1 % Do the unmodulated coefficient. F(:,2*M*n+1)=circshift(g,2*n*a); % m odd case for m=1:2:M-1 F(:,m+2*M*n+1) = sqrt(2)*sin(pi*m/M*l).*circshift(g,2*n*a); F(:,m+2*M*n+M+1) = sqrt(2)*cos(pi*m/M*l).*circshift(g,(2*n+1)*a); end; % m even case for m=2:2:M-1 F(:,m+2*M*n+1) = sqrt(2)*cos(pi*m/M*l).*circshift(g,2*n*a); F(:,m+2*M*n+M+1) = sqrt(2)*sin(pi*m/M*l).*circshift(g,(2*n+1)*a); end; % Most modulated coefficient, Nyquest frequency. if mod(M,2)==0 F(:,M+2*M*n+1)=(-1).^l.*circshift(g,2*n*a); else F(:,M+2*M*n+1)=(-1).^l.*circshift(g,(2*n+1)*a); end; end; c=F'*f; ltfat/inst/deprecated/0000775000175000017500000000000012612404256014643 5ustar susnaksusnakltfat/inst/deprecated/gabelitistlasso.m0000664000175000017500000001305012612404256020211 0ustar susnaksusnakfunction [tc,relres,iter,xrec] = gabelitistlasso(x,g,a,M,lambda,varargin) %-*- texinfo -*- %@deftypefn {Function} gabelitistlasso %@verbatim %GABELITISTLASSO Elitist LASSO regression in Gabor domain % Usage: [tc,xrec] = gabelitistlasso(x,g,a,M,lambda,C,tol,maxit) % Input parameters: % x : Input signal % g : Synthesis window function % a : Length of time shift % M : Number of channels % lambda : Regularization parameter, controls sparsity of the % solution % Output parameters: % tc : Thresholded coefficients % relres : Vector of residuals. % iter : Number of iterations done. % xrec : Reconstructed signal % % GABELITISTLASSO(x,g,a,M,lambda) solves the elitist LASSO regression % problem in the Gabor domain: minimize a functional of the synthesis % coefficients defined as the sum of half the l^2 norm of the % approximation error and the mixed l^2 / l^1 norm of the coefficient % sequence, with a penalization coefficient lambda. % % The matrix of Gabor coefficients is labelled in terms of groups and % members. The obtained expansion is sparse in terms of groups, no % sparsity being imposed to the members of a given group. This is achieved % by a regularization term composed of l^2 norm within a group, and l^1 norm % with respect to groups. % % [tc,relres,iter] = GABELITISTLASSO(...) returns the residuals relres* % in a vector and the number of iteration steps done, maxit. % % [tc,relres,iter,xrec] = GABELITISTLASSO(...) returns the reconstructed % signal from the coefficients, xrec. Note that this requires additional % computations. % % The function takes the following optional parameters at the end of % the line of input arguments: % % 'freq' Group in frequency (search for tonal components). This is the % default. % % 'time' Group in time (search for transient components). % % 'C',cval Landweber iteration parameter: must be larger than % square of upper frame bound. Default value is the upper % frame bound. % % 'tol',tol Stopping criterion: minimum relative difference between % norms in two consecutive iterations. Default value is % 1e-2. % % 'maxit',maxit % Stopping criterion: maximal number of iterations to do. Default value is 100. % % 'print' Display the progress. % % 'quiet' Don't print anything, this is the default. % % 'printstep',p % If 'print' is specified, then print every p'th % iteration. Default value is 10; % % The parameters C, itermax and tol may also be specified on the % command line in that order: gabgrouplasso(x,g,a,M,lambda,C,tol,maxit). % % The solution is obtained via an iterative procedure, called Landweber % iteration, involving iterative group thresholdings. % % The relationship between the output coefficients is given by : % % xrec = idgt(tc,g,a); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/gabelitistlasso.html} %@seealso{gablasso, gabframebounds} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warning(['LTFAT: GABELITISTLASSO has been deprecated, please use FRANAGROUPLASSO ' ... 'instead. See the help on FRANAGROUPLASSO for more details.']); if nargin<5 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isvector(x) error('Input signal must be a vector.'); end % Define initial value for flags and key/value pairs. definput.flags.group={'freq','time'}; definput.keyvals.C=[]; definput.keyvals.itermax=100; definput.keyvals.tol=1e-2; definput.keyvals.printstep=10; definput.flags.print={'print','quiet'}; [flags,kv]=ltfatarghelper({'C','tol','maxit'},definput,varargin); % Determine transform length, and calculate the window. [x,g,L] = gabpars_from_windowsignal(x,g,a,M,[],'GABELITISTLASSO'); if isempty(kv.C) [A_dummy,kv.C] = gabframebounds(g,a,M,L); end; tchoice = flags.do_time; N = floor(length(x)/a); % Normalization to turn lambda to a value comparable to lasso if tchoice lambda = lambda * sqrt(N); else lambda = lambda * sqrt(M); end % Various parameter initializations threshold = lambda/kv.C; % Initialization of thresholded coefficients c0 = dgt(x,g,a,M); tc0 = c0; relres = 1e16; iter = 0; % Main loop while ((iter < kv.itermax)&&(relres >= kv.tol)) tc = c0 - dgt(idgt(tc0,g,a),g,a,M); tc = tc0 + tc/kv.C; if tchoice tc = tc'; end; tc = elitistthresh(tc,threshold,'soft'); if tchoice tc = tc'; end; relres = norm(tc(:)-tc0(:))/norm(tc0(:)); tc0 = tc; iter = iter + 1; if flags.do_print if mod(iter,kv.printstep)==0 fprintf('Iteration %d: relative error = %f\n',iter,relres); end; end; end % Reconstruction if nargout>3 xrec = idgt(tc,g,a); end; ltfat/inst/deprecated/framematrix.m0000664000175000017500000000631712612404256017347 0ustar susnaksusnakfunction G=framematrix(F,L); %-*- texinfo -*- %@deftypefn {Function} framematrix %@verbatim %FRAMEMATRIX Frame synthesis operator matrix % Usage: G=framematrix(F,L); % % G=frsynmatrix(F,L) returns the matrix representation G of the frame % synthesis operator for a frame F of length L. The frame object F* % must have been created using FRAME. % % The frame synthesis operator matrix contains all the frame atoms as % column vectors. It has dimensions L xNcoef, where Ncoef is the % number of coefficients. The number of coefficients can be found as % Ncoef=framered(F)*L. This means that the frame matrix is usually % *very* large, and this routine should only be used for small values of % L. % % The action of the frame analysis operator FRANA is equal to % multiplication with the Hermitean transpose of the frame % matrix. Consider the following simple example: % % L=200; % F=frame('dgt','gauss',10,20); % G=frsynmatrix(F,L); % testsig = randn(L,1); % res = frana(F,testsig)-G'*testsig; % norm(res) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/framematrix.html} %@seealso{frame, frana, frsyn} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warning(['LTFAT: FRAMEMATRIX has been deprecated and will be removed',... ' in the future releases, please use FRSYNMATRIX instead.']); if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; Lcheck=framelength(F,L); if Lcheck~=L error('%s: Incompatible frame length.',upper(mfilename)); end; if F.realinput %switch(F.type) % case 'dgtreal' % This code correctly reproduces the matrix represenation of the % analysis operator, but not of the synthesis. % % F2=frame('dgt',F.g,F.a,F.M); % G2=frsynmatrix(F2,L); % M2=floor(F.M/2)+1; % N=L/F.a; % G=zeros(L,M2*N); % for n=0:N-1 % G(:,1+n*M2:(n+1)*M2)=G2(:,1+n*F.M:M2+n*F.M); % end; % otherwise error(['%s: The synthesis operator of real-valued-input frames does is ' ... 'non-linear and does not have a matrix represenation.']); %end; else % Generic code handles all frames where there are no extra coefficients % in the representation Ncoef = framered(F)*L; % sprintf for Octave compatibility assert(abs(Ncoef-round(Ncoef))<1e-3,sprintf('%s: There is a bug. Ncoef=%d should be an integer.',upper(mfilename),Ncoef)); Ncoef=round(Ncoef); coef=eye(Ncoef); G = frsyn(F,coef); end; ltfat/inst/deprecated/gablasso.m0000664000175000017500000000315412612404256016617 0ustar susnaksusnakfunction [tc,relres,iter,xrec] = gablasso(x,g,a,M,lambda,varargin) %-*- texinfo -*- %@deftypefn {Function} gablasso %@verbatim %GABLASSO LASSO regression in Gabor domain % Usage: [tc,xrec] = gablasso(x,a,M,lambda,C,tol,maxit) % % GABLASSO has been deprecated. Please use FRANALASSO instead. % % A call to GABLASSO(x,g,a,M,lambda) can be replaced by : % % F=frame('dgt',[],g,a,M); % tc=franalasso(F,lambda); % % Any additional parameters passed to GABLASSO can be passed to % FRANALASSO in the same manner. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/gablasso.html} %@seealso{frame, franalasso} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warning(['LTFAT: GABLASSO has been deprecated, please use FRANALASSO ' ... 'instead. See the help on GABLASSO for more details.']); F=newframe('dgt',[],g,a,M); [tc,relres,iter,xrec] = franalasso(F,lambda,varargin{:}); ltfat/inst/deprecated/gabmul.m0000664000175000017500000000616712612404256016302 0ustar susnaksusnakfunction h=gabmul(f,c,p3,p4,p5) %-*- texinfo -*- %@deftypefn {Function} gabmul %@verbatim %GABMUL Apply Gabor multiplier % Usage: h=gabmul(f,c,a); % h=gabmul(f,c,g,a); % h=gabmul(f,c,ga,gs,a); % % Input parameters: % f : Input signal % c : symbol of Gabor multiplier % g : analysis/synthesis window % ga : analysis window % gs : synthesis window % a : Length of time shift. % Output parameters: % h : Output signal % % GABMUL has been deprecated. Please use construct a frame multiplier % and use FRAMEMUL instead. % % A call to GABMUL(f,c,ga,gs,a) can be replaced by : % % [Fa,Fs]=framepair('dgt',ga,gs,a,M); % fout=framemul(f,Fa,Fs,s); % % Original help: % -------------- % % GABMUL(f,c,g,a) filters f by a Gabor multiplier determined by % the symbol c over the rectangular time-frequency lattice determined by % a and M, where M is deduced from the size of c. The rows of c* % correspond to frequency, the columns to temporal sampling points. The % window g will be used for both analysis and synthesis. % % GABMUL(f,c,a) does the same using an optimally concentrated, tight % Gaussian as window function. % % GABMUL(f,c,ga,gs,a) does the same using the window ga for analysis % and gs for synthesis. % % The adjoint operator of GABMUL(f,c,ga,gs,a) is given by % GABMUL(f,conj(c),gs,ga,a). % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/gabmul.html} %@seealso{dgt, idgt, gabdual, gabtight} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warning(['LTFAT: GABMUL has been deprecated, please use FRAMEMUL ' ... 'instead. See the help on GABMUL for more details.']); error(nargchk(3,5,nargin)); M=size(c,1); N=size(c,2); if nargin==3 a=p3; L=a*N; ga=gabtight(a,M,L); gs=ga; end; if nargin==4; ga=p3; gs=p3; a=p4; end; if nargin==5; ga=p3; gs=p4; a=p5; end; if numel(c)==1 error('Size of symbol is too small. You probably forgot to supply it.'); end; assert_squarelat(a,M,'GABMUL',0); % Change f to correct shape. [f,Ls,W,wasrow,remembershape]=comp_sigreshape_pre(f,'DGT',0); [coef,Ls]=dgt(f,ga,a,M); if(~strcmp(class(c),'double')) coef = cast(coef,class(c)); end for ii=1:W coef(:,:,ii)=coef(:,:,ii).*c; end; h=idgt(coef,gs,a,Ls); % Change h to have same shape as f originally had. h=comp_sigreshape_post(h,Ls,wasrow,remembershape); ltfat/inst/deprecated/iunsdgtreal.m0000664000175000017500000000440712612404256017347 0ustar susnaksusnakfunction f=iunsdgtreal(c,g,a,M,Ls) %-*- texinfo -*- %@deftypefn {Function} iunsdgtreal %@verbatim %IUNSDGTREAL Inverse uniform non-stationary discrete Gabor transform % Usage: f=iunsdgtreal(c,g,a,M,Ls); % % Input parameters: % c : Cell array of coefficients. % g : Cell array of window functions. % a : Vector of time positions of windows. % M : Numbers of frequency channels. % Ls : Length of input signal. % Output parameters: % f : Signal. % % IUNSDGTREAL(c,g,a,M,Ls) computes the inverse uniform non-stationary Gabor % expansion of the input coefficients c. % % IUNSDGTREAL is used to invert the function UNSDGTREAL. Read the help of % UNSDGTREAL for details of variables format and usage. % % For perfect reconstruction, the windows used must be dual windows of % the ones used to generate the coefficients. The windows can be % generated unsing NSGABDUAL. % % % % References: % P. Balazs, M. Doerfler, F. Jaillet, N. Holighaus, and G. A. Velasco. % Theory, implementation and applications of nonstationary Gabor frames. % J. Comput. Appl. Math., 236(6):1481-1496, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/iunsdgtreal.html} %@seealso{unsdgt, nsgabdual, nsgabtight, demo_nsdgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet and Peter L. Soendergaard % TESTING: TEST_NSDGT % REFERENCE: OK warning(['LTFAT: IUNSDGTREAL has been deprecated, use INSDGTREAL instead.']); f=insdgtreal(varargin{:}); ltfat/inst/deprecated/demo_gablasso.m0000664000175000017500000000375312612404256017630 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_gablasso %@verbatim %DEMO_GABLASSO Sparse regression by Lasso method %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/demo_gablasso.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warning('LTFAT: DEMO_GABLASSO has been deprecated.'); % Signals siglen=512; t=((0:siglen-1)/siglen).'; x0 = sin(2*pi*64*t); x=x0+randn(size(x0))/2; % DCGT parameters a=2; M=128; % Regression parameters lambda = 0.1; maxit=500; tol=1e-2; F=frametight(frame('dgtreal','gauss',a,M)); % LASSO [tcl,relres,iter,xrecl] = franalasso(F,x,lambda,'maxit',maxit,'tol',tol); % GLASSO [tcgl,relres,iter,xrecgl] = franagrouplasso(F,x,lambda*sqrt(M),'maxit',maxit,'tol',tol); % Displays figure(1); subplot(2,2,1); plot(x0); axis tight; grid; title('Original') subplot(2,2,2); plot(x); axis tight; grid; title('Noisy') subplot(2,2,3); plot(real(xrecl)); axis tight; grid; title('LASSO') subplot(2,2,4); plot(real(xrecgl)); axis tight; grid; title('GLASSO') dr=80; figure(2); subplot(2,2,1); framegram(F,x0,'dynrange',dr); title('Original') subplot(2,2,2); framegram(F,x,'dynrange',dr); title('Noisy') subplot(2,2,3); framegram(F,xrecl,'dynrange',dr); title('LASSO') subplot(2,2,4); framegram(F,xrecgl,'dynrange',dr); title('Group LASSO') ltfat/inst/deprecated/gabgrouplasso.m0000664000175000017500000000331112612404256017667 0ustar susnaksusnakfunction [tc,relres,iter,xrec] = gabgrouplasso(x,g,a,M,lambda,varargin) %-*- texinfo -*- %@deftypefn {Function} gabgrouplasso %@verbatim %GABGROUPLASSO Group LASSO regression in Gabor domain % Usage: [tc,xrec] = gabgrouplasso(x,g,a,M,group,lambda,C,maxit,tol) % % GABGROUPLASSO has been deprecated. Please use FRANAGROUPLASSO instead. % % A call to GABGROUPLASSO(x,g,a,M,lambda) can be replaced by : % % F=frame('dgt',g,a,M); % tc=franagrouplasso(F,lambda); % % Any additional parameters passed to GABGROUPLASSO can be passed to % FRANAGROUPLASSO in the same manner. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/gabgrouplasso.html} %@seealso{frame, franagrouplasso} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warning(['LTFAT: GABGROUPLASSO has been deprecated, please use FRANAGROUPLASSO ' ... 'instead. See the help on FRANAGROUPLASSO for more details.']); F=newframe('dgt',[],g,a,M); [tc,relres,iter,xrec] = framegrouplasso(F,lambda,varargin{:}); ltfat/inst/deprecated/tfmat.m0000664000175000017500000001340112612404256016133 0ustar susnaksusnakfunction F=tfmat(ttype,p2,p3,p4,p5) %-*- texinfo -*- %@deftypefn {Function} tfmat %@verbatim %TFMAT Matrix of transform / operator % Usage: F=tfmat('fourier',L); % F=tfmat('dcti',L); % F=tfmat('dgt',g,a,M); % F=tfmat('dwilt',g,M); % F=tfmat('wmdct',g,M); % F=tfmat('zak',L,a); % F=tfmat('gabmul',sym,a); % F=tfmat('spread',c); % % TFMAT has been deprecated. Please construct a frame (using FRAME) % and use FRSYNMATRIX, or construct an operator (using OPERATORNEW) % and use OPERATORMATRIX instead. % % Original help % ------------- % % TFMAT returns a matrix F containing the basis functions / atoms of % one of the transforms in the toolbox. The atoms are placed as column % vectors in the matrix. A forward transform (analysis) can be done by: % % c=F'*f; % % and a backwards or adjoint transform (synthesis) can be done by: % % r=F*c; % % The possibilities are: % % TFMAT('fourier',L) returns the matrix of the unitary Fourier % transform of length L. See DFT. % % TFMAT('dcti',L) returns the matrix of the DCTI transform of length % L. Similarly for 'dctii', 'dctiii', 'dctiv', 'dsti', 'dstii', % 'dstiii' or 'dstiv'. % % TFMAT('dgt',g,a,M) returns a matrix containing all the atoms of the % Gabor frame with window g and lattice constants a and M. % TFMAT('dgt',g,a,M,L) will do the same for a FIR window g. % % TFMAT('dwilt',g,M) returns a matrix containing all the atoms of the % Wilson basis with window g and M channels. TFMAT(g,M,L) will do the % same for a FIR window g. % % TFMAT('wmdct',g,M) and TFMAT('wmdct',g,M,L) does the same for an WMDCT % with M channels. % % TFMAT('gabmul',sym,a) return the matrix of the Gabor multiplier with % symbol sym and time shift a. TFMAT('gabmul',c,g,a) does the same % using the window g for both analysis and synthesis. % TFMAT('gabmul',sym,ga,gs,a) does the same using ga as analysis window % and gs as synthesis window. % % TFMAT('spread',c) returns the matrix of the spreading operator with % symbol c. % % TFMAT('zak',L,a) returns the transform matrix for a Zak transform of % length L and parameter a. % % This function should mainly be used for educational purposes or for % experimenting with systems, as the generated matrix can % become very large. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/tfmat.html} %@seealso{frsynmatrix, operatormatrix} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warning(['LTFAT: TFMAT has been deprecated, please use FRSYNMATRIX ' ... 'or OPERATORMATRIX instead.']); if (nargin<1) || ~ischar(ttype) error('You must specify the transform type') end; switch(lower(ttype)) case {'fourier','dft'} error(nargchk(2,2,nargin)); F=idft(eye(p2)); case {'dcti'} error(nargchk(2,2,nargin)); F=dcti(eye(p2))'; case {'dctii'} error(nargchk(2,2,nargin)); F=dctii(eye(p2))'; case {'dctiii'} error(nargchk(2,2,nargin)); F=dctiii(eye(p2))'; case {'dctiv'} error(nargchk(2,2,nargin)); F=dctiv(eye(p2))'; case {'dsti'} error(nargchk(2,2,nargin)); F=dsti(eye(p2))'; case {'dstii'} error(nargchk(2,2,nargin)); F=dstii(eye(p2))'; case {'dstiii'} error(nargchk(2,2,nargin)); F=dstiii(eye(p2))'; case {'dstiv'} error(nargchk(2,2,nargin)); F=dstiv(eye(p2))'; case {'gabor','dgt'} error(nargchk(4,5,nargin)); g=p2; if nargin==4 L=length(g); else L=p5; end; a=p3; M=p4; N=L/a; c=reshape(eye(M*N),M,N,M*N); F=idgt(c,g,a); case {'wilson','dwilt'} error(nargchk(3,4,nargin)); g=p2; if nargin==3 L=length(g); else L=p4; end; M=p3; N=L/M; c=reshape(eye(M*N),2*M,N/2,M*N); F=idwilt(c,g); case {'wmdct'} error(nargchk(3,4,nargin)); g=p2; if nargin==3 L=length(g); else L=p4; end; M=p3; N=L/M; c=reshape(eye(M*N),M,N,M*N); F=iwmdct(c,g); case {'spread','spreadop'} error(nargchk(2,2,nargin)); c=p2; L=size(c,2); F=spreadop(eye(L),c); case {'gabmul'} error(nargchk(3,5,nargin)); sym=p2; M=size(sym,1); N=size(sym,2); switch(nargin) case 3 a=p3; L=a*N; F=gabmul(eye(L),sym,a); case 4 g=p3; a=p4; L=a*N; F=gabmul(eye(L),sym,g,a); case 5 ga=p3; gs=p4; a=p5; L=a*N; F=gabmul(eye(L),sym,ga,gs,a); end; case {'ndgt'} error(nargchk(5,5,nargin)); g=p2; a=p3; M=p4; L=p5; %!!! the computation using eye matrix doesn't work if M>sigLen N=length(a); % number of time positions MN=sum(M); % total number of frame elements F=zeros(L,MN); jj=0; for ii=1:N c={eye(M(ii))}; F(:,jj+(1:M(ii)))=indgt(c,g(ii),a(ii),L); jj=jj+M(ii); end case {'zak'} error(nargchk(3,5,nargin)) L=p2; a=p3; N=L/a; c=reshape(eye(L),a,N,L); F=izak(c); otherwise error('Unknown transform.'); end; ltfat/inst/deprecated/gabmuleigs.m0000664000175000017500000001314412612404256017143 0ustar susnaksusnakfunction [V,D]=gabmuleigs(K,c,p3,varargin) %-*- texinfo -*- %@deftypefn {Function} gabmuleigs %@verbatim %GABMULEIGS Eigenpairs of Gabor multiplier % Usage: h=gabmuleigs(K,c,g,a); % h=gabmuleigs(K,c,a); % h=gabmuleigs(K,c,ga,gs,a); % % Input parameters: % K : Number of eigenvectors to compute. % c : symbol of Gabor multiplier % g : analysis/synthesis window % ga : analysis window % gs : synthesis window % a : Length of time shift. % Output parameters: % V : Matrix containing eigenvectors. % D : Eigenvalues. % % GABMULEIGS has been deprecated. Please use construct a frame multiplier % and use FRAMEMULEIGS instead. % % A call to GABMULEIGS(K,c,ga,gs,a) can be replaced by : % % [Fa,Fs]=framepair('dgt',ga,gs,a,M); % [V,D]=framemuleigs(Fa,Fs,s,K); % % Original help: % -------------- % % GABMULEIGS(K,c,g,a) computes the K largest eigenvalues and eigen- % vectors of the Gabor multiplier with symbol c and time shift a. The % number of channels is deduced from the size of the symbol c. The % window g will be used for both analysis and synthesis. % % GABMULEIGS(K,c,ga,gs,a) does the same using the window the window ga* % for analysis and gs for synthesis. % % GABMULEIGS(K,c,a) does the same using the a tight Gaussian window of % for analysis and synthesis. % % If K is empty, then all eigenvalues/pairs will be returned. % % GABMULEIGS takes the following parameters at the end of the line of input % arguments: % % 'tol',t Stop if relative residual error is less than the % specified tolerance. Default is 1e-9 % % 'maxit',n Do at most n iterations. % % 'iter' Call eigs to use an iterative algorithm. % % 'full' Call eig to sole the full problem. % % 'auto' Use the full method for small problems and the % iterative method for larger problems. This is the % default. % % 'crossover',c % Set the problem size for which the 'auto' method % switches. Default is 200. % % 'print' Display the progress. % % 'quiet' Don't print anything, this is the default. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/gabmuleigs.html} %@seealso{gabmul, dgt, idgt, gabdual, gabtight} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warning(['LTFAT: GABMULEIGS has been deprecated, please use FRAMEMULEIGS ' ... 'instead. See the help on FRAMEMULEIGS for more details.']); % Change this to 1 or 2 to see the iterative method in action. printopts=0; if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; if nargout==2 doV=1; else doV=0; end; M=size(c,1); N=size(c,2); istight=1; if numel(p3)==1 % Usage: h=gabmuleigs(c,K,a); a=p3; L=N*a; ga=gabtight(a,M,L); gs=ga; arglist=varargin; else if numel(varargin{1})==1 % Usage: h=gabmuleigs(c,K,g,a); ga=p3; gs=p3; a=varargin{1}; L=N*a; arglist=varargin(2:end); else if numel(varargin{2})==1 % Usage: h=gabmuleigs(c,K,ga,gs,a); ga=p3; gs=varargin{1}; a =varargin{2}; L=N*a; istight=0; arglist=varargin(3:end); end; end; end; definput.keyvals.maxit=100; definput.keyvals.tol=1e-9; definput.keyvals.crossover=200; definput.flags.print={'quiet','print'}; definput.flags.method={'auto','iter','full'}; [flags,kv]=ltfatarghelper({},definput,arglist); % Do the computation. For small problems a direct calculation is just as % fast. if (flags.do_iter) || (flags.do_auto && L>kv.crossover) if flags.do_print opts.disp=1; else opts.disp=0; end; opts.isreal = false; opts.maxit = kv.maxit; opts.tol = kv.tol; % Setup afun afun(1,c,ga,gs,a,M,L); if doV [V,D] = eigs(@afun,L,K,'LM',opts); else D = eigs(@afun,L,K,'LM',opts); end; else % Compute the transform matrix. bigM=tfmat('gabmul',c,ga,gs,a); if doV [V,D]=eig(bigM); else D=eig(bigM); end; end; % The output from eig and eigs is a diagonal matrix, so we must extract the % diagonal. D=diag(D); % Sort them in descending order [~,idx]=sort(abs(D),1,'descend'); D=D(idx(1:K)); if doV V=V(:,idx(1:K)); end; % Clean the eigenvalues, if we know that they are real-valued %if isreal(ga) && isreal(gs) && isreal(c) % D=real(D); %end; % The function has been written in this way, because Octave (at the time % of writing) does not accept additional parameters at the end of the % line of input arguments for eigs function y=afun(x,c_in,ga_in,gs_in,a_in,M_in,L_in) persistent c; persistent ga; persistent gs; persistent a; persistent M; persistent L; if nargin>1 c = c_in; ga = ga_in; gs = gs_in; a = a_in; M = M_in; L = L_in; else y=comp_idgt(c.*comp_dgt(x,ga,a,M,[0 1],0,0,0),gs,a,[0 1],0,0); end; ltfat/inst/deprecated/convolve.m0000664000175000017500000000401512612404256016654 0ustar susnaksusnakfunction h=convolve(f,g,varargin) %-*- texinfo -*- %@deftypefn {Function} convolve %@verbatim %CONVOLVE Convolution % Usage: h=convolve(f,g); % % CONVOLVE has been deprecated. Please use LCONV instead. % % A call to CONVOLVE(f,g) can be replaced by : % % lconv(f,g); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/convolve.html} %@seealso{lconv} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warning(['LTFAT: CONVOLVE has been deprecated, please use LCONV ' ... 'instead. See the help on LCONV for more details.']); if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.L=[]; definput.keyvals.dim=[]; [flags,kv,L,dim]=ltfatarghelper({'L','dim'},definput,varargin); [f,L1,Lf,Wf,dimout,permutedsize_f,order_f]=assert_sigreshape_pre(f,L,dim,'CONVOLVE'); [g,L2,Lg,Wg,dimout,permutedsize_g,order_g]=assert_sigreshape_pre(g,L,dim,'CONVOLVE'); Lh=Lf+Lg-1; if (Wf>1) && (Wg>1) error('%s: Only one of the inputs can be multi-dimensional.',upper(mfilename)); end; W=max(Wf,Wg); if Wf. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/deprecated/deprecatedinit.m0000664000175000017500000000165412612404256020013 0ustar susnaksusnakstatus=1; %-*- texinfo -*- %@deftypefn {Function} deprecatedinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/deprecatedinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/deprecated/iunsdgt.m0000664000175000017500000000422512612404256016501 0ustar susnaksusnakfunction f=iunsdgt(c,g,a,varargin) %-*- texinfo -*- %@deftypefn {Function} iunsdgt %@verbatim %IUNSDGT Inverse uniform non-stationary discrete Gabor transform % Usage: f=iunsdgt(c,g,a,Ls); % % Input parameters: % c : Cell array of coefficients. % g : Cell array of window functions. % a : Vector of time positions of windows. % Ls : Length of input signal. % Output parameters: % f : Signal. % % IUNSDGT(c,g,a,Ls) computes the non-stationary Gabor expansion of the % input coefficients c. % % IUNSDGT is used to invert the function NSDGT. Read the help of NSDGT % for details of variables format and usage. % % For perfect reconstruction, the windows used must be dual windows of % the ones used to generate the coefficients. The windows can be % generated unsing NSGABDUAL. % % % % References: % P. Balazs, M. Doerfler, F. Jaillet, N. Holighaus, and G. A. Velasco. % Theory, implementation and applications of nonstationary Gabor frames. % J. Comput. Appl. Math., 236(6):1481-1496, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/iunsdgt.html} %@seealso{unsdgt, nsgabdual, nsgabtight, demo_nsdgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet % TESTING: TEST_NSDGT % REFERENCE: % Last changed 2009-05 warning(['LTFAT: IUNSDGT has been deprecated, use INSDGT instead.']); f=insdgt(varargin{:}); ltfat/inst/deprecated/uwpfbtbounds.m0000664000175000017500000000461612612404256017552 0ustar susnaksusnakfunction [AF,BF]=uwpfbtbounds(wt,varargin) %-*- texinfo -*- %@deftypefn {Function} uwpfbtbounds %@verbatim %UWPFBTBOUNDS Frame bounds of Undecimated WPFBT % Usage: fcond=uwpfbtbounds(wt,L); % [A,B]=uwpfbtbounds(wt,L); % % UWPFBTBOUNDS(wt,L) calculates the ratio B/A of the frame bounds % of the undecimated wavelet packet filterbank specified by wt for a % system of length L. The ratio is a measure of the stability of the % system. % % [A,B]=uwfbtbounds(wt,L) returns the lower and upper frame bounds % explicitly. % % See WFBT for explanation of parameter wt. % % Additionally, the function accepts the following flags: % % 'intsqrt'(default),'intnoscale', 'intscale' % The filters in the filterbank tree are scaled to reflect the % behavior of UWPFBT and IUWPFBT with the same flags. % % 'sqrt'(default),'noscale','scale' % The filters in the filterbank tree are scaled to reflect the % behavior of UWPFBT and IUWPFBT with the same flags. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/uwpfbtbounds.html} %@seealso{uwpfbt, filterbankbounds} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa warning('UWPFBTBOUNDS is deprecated. Instead, use WPFBTBOUNDS with appropriate flags'); complainif_notenoughargs(nargin,1,'UWPFBTBOUNDS'); definput.keyvals.L = []; definput.flags.scaling={'sqrt','scale','noscale'}; definput.flags.interscaling = {'intsqrt', 'intscale', 'intnoscale'}; [flags,~,L]=ltfatarghelper({'L'},definput,varargin); if nargout<2 AF = wpfbtbounds(wt,L,flags.scaling,flags.interscaling); elseif nargout == 2 [AF, BF] = wpfbtbounds(wt,L,flags.scaling,flags.interscaling); end ltfat/inst/deprecated/uwfbtbounds.m0000664000175000017500000000457412612404256017375 0ustar susnaksusnakfunction [AF,BF]=uwfbtbounds(wt,varargin) %-*- texinfo -*- %@deftypefn {Function} uwfbtbounds %@verbatim %UWFBTBOUNDS Frame bounds of Undecimated WFBT % Usage: fcond=uwfbtbounds(wt,L); % [A,B]=uwfbtbounds(wt,L); % [...]=uwfbtbounds(wt); % % UWFBTBOUNDS(wt,L) calculates the ratio B/A of the frame bounds % of the undecimated filterbank specified by wt for a system of length % L. The ratio is a measure of the stability of the system. % % UWFBTBOUNDS({w,J,'dwt'},L) calculates the ratio B/A of the frame % bounds of the undecimated DWT (|UFWT|) filterbank specified by w and % J for a system of length L. % % UWFBTBOUNDS(wt) does the same thing, but L is the length of the % longest filter in the identical filterbank. % % [A,B]=UWFBTBOUNDS(...) returns the lower and upper frame bounds % explicitly. % % See WFBT for explanation of parameter wt and FWT for explanation % of parameters w and J. % % The function supports the following flags: % % 'sqrt'(default),'noscale','scale' % The filters in the filterbank tree are scaled to reflect the % behavior of UWFBT and IUWFBT with the same flags. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/uwfbtbounds.html} %@seealso{uwfbt, filterbankbounds} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warning('UWFBTBOUNDS is deprecated. Please use WFBTBOUNDS with a appropriate flag.'); complainif_notenoughargs(nargin,1,'UWFBTBOUNDS'); definput.keyvals.L = []; definput.import = {'uwfbtcommon'}; [flags,~,L]=ltfatarghelper({'L'},definput,varargin); if nargout<2 AF = wfbtbounds(wt,L,flags.scaling); elseif nargout == 2 [AF,BF] = wfbtbounds(wt,L,flags.scaling); end ltfat/inst/deprecated/iufilterbank.m0000664000175000017500000000250312612404256017500 0ustar susnaksusnakfunction f=iufilterbank(varargin); %-*- texinfo -*- %@deftypefn {Function} iufilterbank %@verbatim %IUFILTERBANK Filter bank inversion, DEPRECATED % Usage: f=iufilterbank(c,g,a); % % IUFILTERBANK has been deprecated by IFILTERBANK. Call IFILTERBANK % with the exact same parameters as the old call to IUFILTERBANK. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/deprecated/iufilterbank.html} %@seealso{ifilterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . warning(['LTFAT: IUFILTERBANK has been deprecated, please use IFILTERBANK ' ... 'instead.']); f=ifilterbank(varargin{:}); ltfat/inst/AUTHORS0000664000175000017500000000046312612404251013611 0ustar susnaksusnakPeter Soendergaard Zdenek Prusa Nicki Holighaus Christoph Wiesmeyr Peter Balazs Bruno Torresani ltfat/inst/INDEX0000664000175000017500000001204612612404251013333 0ustar susnaksusnakltfat >> Time-frequency analysis and Wavelets signals ctestfun noise pinknoise expchirp bat batmask greasy cocktailparty gspi linus ltfatlogo otoclick traindoppler cameraman lichtenstein ltfattext quadratic ambiguityfunction wignervilledist drihaczekdist quadtfdist plotquadtfdist operators operatornew operator ioperator operatoradj operatorappr operatoreigs operatormatrix framemul iframemul framemuladj framemulappr framemuleigs gabmulappr spreadop spreadinv spreadadj spreadfun spreadeigs deprecated convolve gabelitistlasso gabgrouplasso gablasso gabmuleigs gabmul framematrix iufilterbank iunsdgt iunsdgtreal tfmat uwfbtbounds uwpfbtbounds sigproc rms normalize gaindb crestfactor uquant firwin firkaiser fir2long long2fir firfilter blfilter warpedblfilter pfilt magresp transferfunction pgrpdelay rampup rampdown rampsignal thresh largestr largestn dynlimit groupthresh rgb2jpeg jpeg2rgb qam4 iqam4 gabor tconv dsft zak izak col2diag s0norm dgt idgt isgram isgramreal dgt2 idgt2 dgtreal idgtreal gabwin projkern dgtlength dwilt idwilt dwilt2 idwilt2 wmdct iwmdct wmdct2 iwmdct2 wil2rect rect2wil wilwin dwiltlength gabdual gabtight gabfirdual gaboptdual gabfirtight gabopttight gabconvexopt gabprojdual gabmixdual wilorth wildual gabframebounds gabrieszbounds wilbounds gabdualnorm gabframediag wilframediag gabphasegrad gabphasederiv gabreassign gabreassignadjust constructphase constructphasereal phaselock phaseunlock symphase matrix2latticetype latticetype2matrix shearfind noshearlength tfplot plotdgt plotdgtreal plotdwilt plotwmdct sgram gabimagepars resgram instfreqplot phaseplot blockproc block blockdevices blockread blockplay blockpanel blockpanelget blockdone blockwrite blockframeaccel blockframepairaccel blockana blocksyn blockfigure blockplot ltfatplay demos demo_dgt demo_gabfir demo_wavelets demo_imagecompression demo_audiocompression demo_audiodenoise demo_ofdm demo_audioshrink demo_gabmulappr demo_bpframemul demo_frsynabs demo_filterbanksynchrosqueeze demo_nsdgt demo_pgauss demo_pbspline demo_gabmixdual demo_framemul demo_phaseplot demo_phaseret demo_nextfastfft demo_filterbanks demo_audscales demo_auditoryfilterbank demo_wfbt demo_blockproc_basicloop demo_blockproc_paramequalizer demo_blockproc_denoising demo_blockproc_slidingsgram demo_blockproc_slidingcqt demo_blockproc_slidingerblets demo_blockproc_dgtequalizer demo_blockproc_effects auditory semiaudplot audtofreq freqtoaud audspace audspacebw erbtofreq freqtoerb erbspace erbspacebw audfiltbw rangecompress rangeexpand gammatonefir nonstatgab nsdgt unsdgt insdgt nsdgtreal unsdgtreal insdgtreal nsgabdual nsgabtight nsgabframebounds nsgabframediag plotnsdgt plotnsdgtreal wavelets fwt ifwt fwt2 ifwt2 ufwt iufwt fwtlength fwtclength wfbt iwfbt uwfbt iuwfbt wpfbt iwpfbt uwpfbt iuwpfbt wpbest wfbtlength wfbtclength wpfbtclength dtwfb idtwfb dtwfbreal idtwfbreal wfbtinit dtwfbinit wfbtput wfbtremove wfbt2filterbank wpfbt2filterbank dtwfb2filterbank fwtinit wfbtbounds wpfbtbounds dtwfbbounds plotwavelets wfiltinfo wfiltdtinfo wavfun wavcell2pack wavpack2cell wfilt_algmband wfilt_cmband wfilt_coif wfilt_db wfilt_dden wfilt_dgrid wfilt_hden wfilt_lemarie wfilt_matlabwrapper wfilt_mband wfilt_remez wfilt_symds wfilt_spline wfilt_sym wfilt_symdden wfilt_symorth wfilt_symtight wfilt_qshifta wfilt_qshiftb wfilt_oddevena wfilt_oddevenb wfilt_optsyma wfilt_optsymb wfilt_ddena wfilt_ddenb wfiltdt_qshift wfiltdt_optsym wfiltdt_oddeven wfiltdt_dden filterbank filterbank ufilterbank ifilterbank filterbankwin filterbanklength filterbanklengthcoef cqt icqt erblett ierblett cqtfilters erbfilters warpedfilters audfilters filterbankdual filterbanktight filterbankrealdual filterbankrealtight filterbankbounds filterbankrealbounds filterbankresponse filterbankfreqz nonu2ufilterbank u2nonucfmt nonu2ucfmt plotfilterbank filterbankphasegrad filterbankreassign filterbanksynchrosqueeze fourier fftindex modcent floor23 floor235 ceil23 ceil235 nextfastfft dft idft fftreal ifftreal gga chirpzt fftgram plotfft plotfftreal involute peven podd pconv pxcorr lconv lxcorr isevenfunction middlepad expwave pchirp pgauss psech pbspline shah pheaviside prect psinc pherm hermbasis dfracft ffracft fftresample dctresample pderiv fftanalytic dcti dctii dctiii dctiv dsti dstii dstiii dstiv frames frame framepair framedual frametight frameaccel frana frsyn frsynmatrix frgramian frameoperator framediag franaiter frsyniter plotframe framegram framebounds framered framelength framelengthcoef frameclength framecoef2native framenative2coef framecoef2tf frametf2coef framecoef2tfplot franabp franalasso franagrouplasso frsynabs base ltfatstart ltfatstop ltfathelp ltfatmex ltfatbasepath isoctave ltfatarghelper ltfatgetdefaults ltfatsetdefaults scalardistribute mulaclab ltfat/inst/sigproc/0000775000175000017500000000000012612404256014211 5ustar susnaksusnakltfat/inst/sigproc/gaindb.m0000664000175000017500000000463012612404256015616 0ustar susnaksusnakfunction inoutsig = gaindb(inoutsig,gn,varargin) %-*- texinfo -*- %@deftypefn {Function} gaindb %@verbatim %GAINDB Increase/decrease level of signal % Usage: outsig = gaindb(insig,gn); % % GAINDB(insig,gn) increases the energy level of the signal by gn* % dB. % % If gn is a scalar, the whole input signal is scaled. % % If gn is a vector, each column is scaled by the entries in % gn. The length of gn must match the number of columns. % % GAINDB(insig,gn,dim) scales the signal along dimension dim. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/gaindb.html} %@seealso{rms} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard, 2009 % ------ Checking of input parameters --------- if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isnumeric(inoutsig) error('%s: insig must be numeric.',upper(mfilename)); end; if ~isnumeric(gn) error('%s: gn must be numeric.',upper(mfilename)); end; definput.keyvals.dim=[]; [flags,kv]=ltfatarghelper({'dim'},definput,varargin); % ------ Computation -------------------------- if isscalar(gn) inoutsig = inoutsig*10^(gn/20); else if isvector(gn) M=length(gn); [inoutsig,L,Ls,W,dim,permutedsize,order]=... assert_sigreshape_pre(inoutsig,[],kv.dim,upper(mfilename)); if M~=W error('%s: Length of gn and signal size must match.',upper(mfilename)); end; for ii=1:W inoutsig(:,ii)=inoutsig(:,ii)*10^(gn(ii)/20); end; inoutsig=assert_sigreshape_post(inoutsig,kv.dim,permutedsize,order); else if ~isnumeric(gn) error('%s: gn must be a scalar or vector.',upper(mfilename)); end; end; end; ltfat/inst/sigproc/largestn.m0000664000175000017500000000560312612404256016212 0ustar susnaksusnakfunction [xo,Nout]=largestn(xi,N,varargin) %-*- texinfo -*- %@deftypefn {Function} largestn %@verbatim %LARGESTN Keep N largest coefficients % Usage: xo=largestn(x,N); % xo=largestn(x,N,mtype); % % LARGESTN(x,N) returns an array of the same size as x keeping % the N largest coefficients. % % LARGESTN takes the following flags at the end of the line of input % arguments: % % 'hard' Perform hard thresholding. This is the default. % % 'wiener' Perform empirical Wiener shrinkage. This is in between % soft and hard thresholding. % % 'soft' Perform soft thresholding. % % 'full' Returns the output as a full matrix. This is the default. % % 'sparse' Returns the output as a sparse matrix. % % If the coefficients represents a signal expanded in an orthonormal % basis then this will be the best N-term approximation. % % *Note:* If soft- or Wiener thresholding is selected, only N-1 % coefficients will actually be returned. This is caused by the N*'th % coefficient being set to zero. % % % References: % S. Mallat. A wavelet tour of signal processing. Academic Press, San % Diego, CA, 1998. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/largestn.html} %@seealso{largestr} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard and Bruno Torresani. % TESTING: OK % REFERENCE: OK if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'thresh'}; [flags,keyvals]=ltfatarghelper({},definput,varargin); if (prod(size(N))~=1 || ~isnumeric(N)) error('N must be a scalar.'); end; if flags.do_sparse if ndims(xi)>2 error('Sparse output is only supported for 1D/2D input. This is a limitation of Matlab/Octave.'); end; end; % Determine the size of the array. ss=numel(xi); % Sort the absolute values of the coefficients. sxi=sort(abs(xi(:))); % Find the coeffiecient sitting at position N through the array, % and use this as a threshing value. if N<=0 % Choose a thresh value higher than max lambda=sxi(end)+1; else lambda=sxi(ss-N+1); end; [xo,Nout]=thresh(xi,lambda,flags.outclass,flags.iofun); ltfat/inst/sigproc/blfilter.m0000664000175000017500000001524112612404256016175 0ustar susnaksusnakfunction gout=blfilter(winname,fsupp,varargin) %-*- texinfo -*- %@deftypefn {Function} blfilter %@verbatim %BLFILTER Construct a band-limited filter % Usage: g=blfilter(winname,fsupp,fc); % g=blfilter(winname,fsupp,fc,...); % % Input parameters: % winname : Name of prototype % fsupp : Support length of the prototype % % BLFILTER(winname,fsupp) constructs a band-limited filter. The parameter % winname specifies the shape of the frequency response. The name must be % one of the shapes accepted by FIRWIN. The support of the frequency % response measured in normalized frequencies is specified by fsupp. % % BLFILTER(winname,fsupp,fc) constructs a filter with a centre % frequency of fc measured in normalized frequencies. % % If one of the inputs is a vector, the output will be a cell array % with one entry in the cell array for each element in the vector. If % more input are vectors, they must have the same size and shape and the % the filters will be generated by stepping through the vectors. This % is a quick way to create filters for FILTERBANK and UFILTERBANK. % % BLFILTER accepts the following optional parameters: % % 'fs',fs If the sampling frequency fs is specified then the support % fsupp and the centre frequency fc is specified in Hz. % % 'complex' Make the filter complex valued if the centre frequency % is non-zero.necessary. This is the default. % % 'real' Make the filter real-valued if the centre frequency % is non-zero. % % 'delay',d Set the delay of the filter. Default value is zero. % % 'scal',s Scale the filter by the constant s. This can be % useful to equalize channels in a filter bank. % % 'pedantic' Force window frequency offset (g.foff) to a subsample % precision by a subsample shift of the firwin output. % % % It is possible to normalize the transfer function of the filter by % passing any of the flags from the NORMALIZE function. The default % normalization is 'energy'. % % The filter can be used in the PFILT routine to filter a signal, or % in can be placed in a cell-array for use with FILTERBANK or % UFILTERBANK. % % Output format: % -------------- % % The output g from BLFILTER is a structure. This type of structure can % be used to describe any bandlimited filter defined in terms of its % transfer function. The structure contains the following fields: % % g.H This is an anonymous function taking the transform length L as % input and producing the bandlimited transfer function in the % form of a vector. % % g.foff This is an anonymous function taking the transform length L as % input and procing the frequency offset of H as an integer. The % offset is the value of the lowest frequency of H measured in % frequency samples. foff is used to position the bandlimited % tranfer function stored in H correctly when multiplying in the % frequency domain. % % g.delay This is the desired delay of the filter measured in samples. % % g.realonly % This is an integer with value 1 if the filter defined a % real-valued filter. In this case, the bandlimited transfer % function H will be mirrored from the positive frequencies to % the negative frequencies. If the filter is a natural lowpass % filter correctly centered around 0, realonly does not need % to be 1. % % g.fs The intended sampling frequency. This is an optional parameter % that is *only* used for plotting and visualization. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/blfilter.html} %@seealso{firfilter, firwin, pfilt, filterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Define initial value for flags and key/value pairs. definput.import={'normalize'}; definput.importdefaults={'energy'}; definput.keyvals.delay=0; definput.keyvals.fc=0; definput.keyvals.fs=[]; definput.keyvals.scal=1; definput.keyvals.min_win=1; definput.flags.pedantic = {'nopedantic','pedantic'}; definput.flags.real={'complex','real'}; [flags,kv]=ltfatarghelper({'fc'},definput,varargin); if flags.do_pedantic error('%s: TO DO: Pedantic option not implemented yet.',... upper(mfilename)); end [fsupp,kv.fc,kv.delay,kv.scal]=scalardistribute(fsupp,kv.fc,kv.delay,kv.scal); if ~isempty(kv.fs) fsupp=fsupp/kv.fs*2; kv.fc=kv.fc/kv.fs*2; else %If fs is not specified, allow fsupp to be in range 0-2 assert(all(fsupp>0) && all(fsupp<=2),... '%s: Filter support should be in range ]0-2].',... upper(mfilename)); end; % Sanitize kv.fc=modcent(kv.fc,2); Nfilt=numel(fsupp); gout=cell(1,Nfilt); if ischar(winname) wn = {winname}; elseif iscell(winname) wn = winname; else error('%s: Incorrect format of winname.',upper(mfilename)); end for ii=1:Nfilt g=struct(); if flags.do_1 || flags.do_area g.H=@(L) fftshift(firwin(wn{1},max([kv.min_win,... round(L/2*fsupp(ii))]),wn{2:end},... flags.norm))*kv.scal(ii)*L; end; if flags.do_2 || flags.do_energy g.H=@(L) fftshift(firwin(wn{1},max([kv.min_win,... round(L/2*fsupp(ii))]),wn{2:end},... flags.norm))*kv.scal(ii)*sqrt(L); end; if flags.do_inf || flags.do_peak g.H=@(L) fftshift(firwin(wn{1},max([kv.min_win,... round(L/2*fsupp(ii))]),wn{2:end},... flags.norm))*kv.scal(ii); end; g.foff=@(L) floor(L/2*kv.fc(ii))-floor(max([kv.min_win,round(L/2*fsupp(ii))])/2); g.realonly=flags.do_real; g.delay=kv.delay(ii); g.fs=kv.fs; gout{ii}=g; end; if Nfilt==1 gout=g; end; ltfat/inst/sigproc/thresh.m0000664000175000017500000001515612612404256015674 0ustar susnaksusnakfunction [xo,N]=thresh(xi,lambda,varargin); %-*- texinfo -*- %@deftypefn {Function} thresh %@verbatim %THRESH Coefficient thresholding % Usage: x=thresh(x,lambda,...); % [x,N]=thresh(x,lambda,...); % % THRESH(x,lambda) will perform hard thresholding on x, i.e. all % elements with absolute value less than scalar lambda will be set to zero. % % THRESH(x,lambda,'soft') will perform soft thresholding on x, % i.e. lambda will be subtracted from the absolute value of every element % of x. % % The lambda parameter can also be a vector with number of elements % equal to numel(xi) or it can be a numeric array of the same shape % as xi. lambda is then applied element-wise and in a column major % order if lambda is a vector. % % [x,N]=THRESH(x,lambda) additionally returns a number N specifying % how many numbers where kept. % % THRESH takes the following flags at the end of the line of input % arguments: % % 'hard' Perform hard thresholding. This is the default. % % 'wiener' Perform empirical Wiener shrinkage. This is in between % soft and hard thresholding. % % 'soft' Perform soft thresholding. % % 'full' Returns the output as a full matrix. This is the default. % % 'sparse' Returns the output as a sparse matrix. % % The function wTHRESH in the Matlab Wavelet toolbox implements some of % the same functionality. % % The following code produces a plot to demonstrate the difference % between hard and soft thresholding for a simple linear input: % % t=linspace(-4,4,100); % plot(t,thresh(t,1,'soft'),'r',... % t,thresh(t,1,'hard'),'.b',... % t,thresh(t,1,'wiener'),'--g'); % legend('Soft thresh.','Hard thresh.','Wiener thresh.','Location','NorthWest'); % % % References: % S. Ghael, A. Sayeed, and R. Baraniuk. Improved wavelet denoising via % empirical Wiener filtering. In Proceedings of SPIE, volume 3169, pages % 389-399. San Diego, CA, 1997. % % J. Lim and A. Oppenheim. Enhancement and bandwidth compression of noisy % speech. Proceedings of the IEEE, 67(12):1586-1604, 1979. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/thresh.html} %@seealso{largestr, largestn} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Kai Siedenburg, Bruno Torresani and Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK complainif_notenoughargs(nargin,2,'THRESH'); is_sameshape = ndims(lambda)==ndims(xi) && all(size(lambda)==size(xi)); if ~isnumeric(lambda) || ... ~isscalar(lambda) && ... % lambda is not scalar numel(lambda)~=numel(xi) && ... % lambda does not have the same number of elements ~(is_sameshape) % lambda does not have the same shape error(['%s: lambda must be a scalar, a vector with ',... 'numel(lambda)==numel(xi) or whatever shape xi has such that ',... 'all(size(lambda)==size(xi))'],upper(mfilename)); end; % Define initial value for flags and key/value pairs. definput.import={'thresh'}; [flags,keyvals]=ltfatarghelper({},definput,varargin); if flags.do_sparse if ndims(xi)>2 error(['%s: Sparse output is only supported for 1D/2D input. This ',... 'is a limitation of Matlab/Octave.'],upper(mfilename)); end; if ~isa(xi,'double') error(['%s: Input is not double prec. data array and sparse output can,'... 'be double precision data type only. This is a ',... 'Matlab/Octave limitation.'],upper(mfilename)); end end; % Reshape lambda if it is a vector if ~is_sameshape && ~isscalar(lambda) lambda = reshape(lambda,size(xi)); end if flags.do_sparse xo=sparse(size(xi,1),size(xi,2)); if flags.do_hard if isscalar(lambda) % Create a significance map pointing to the non-zero elements. signifmap=find(abs(xi)>=lambda); else signifmap=abs(xi)>=lambda; end xo(signifmap)=xi(signifmap); else if isscalar(lambda) % Create a significance map pointing to the non-zero elements. signifmap=find(abs(xi)>lambda); else signifmap=abs(xi)>lambda; end if flags.do_wiener if isscalar(lambda) xo(signifmap) = 1 - (lambda./abs(xi(signifmap))).^2; else xo(signifmap) = 1 - (lambda(signifmap)./abs(xi(signifmap))).^2; end xo(signifmap) = xi(signifmap).*xo(signifmap); end; if flags.do_soft if isscalar(lambda) % xo(signifmap)=xi(signifmap) - sign(xi(signifmap))*lambda; xo(signifmap)=(abs(xi(signifmap)) - lambda) .* ... exp(i*angle(xi(signifmap))); else xo(signifmap)=(abs(xi(signifmap)) - lambda(signifmap)) .* ... exp(i*angle(xi(signifmap))); end % The line above produces very small imaginary values when the input % is real-valued. The next line fixes this if isreal(xi) xo=real(xo); end; end; end if nargout==2 N=numel(signifmap); end; else % Dense case xo=zeros(size(xi),assert_classname(xi)); % Create a mask with a value of 1 for non-zero elements. For full % matrices, this is faster than the significance map. if flags.do_hard if nargout==2 mask=abs(xi)>=lambda; N=sum(mask(:)); xo=xi.*mask; else xo=xi.*(abs(xi)>=lambda); end; end; if flags.do_soft % In the following lines, the +0 is significant: It turns % -0 into +0, oh! the joy of numerics. if nargout==2 xa=abs(xi)-lambda; mask=xa>=0; xo=(mask.*xa+0).*sign(xi); N=sum(mask(:))-sum(xa(:)==0); else xa=abs(xi)-lambda; xo=((xa>=0).*xa+0).*sign(xi); end; end; if flags.do_wiener xa = lambda./abs(xi); xa(isinf(xa)) = 0; xa = 1 - xa.^2; if nargout==2 mask = xa>0; xo = xi.*xa.*mask; N = sum(mask(:)); else xo = xi.*xa.*(xa>0); end end; end; ltfat/inst/sigproc/groupthresh.m0000664000175000017500000001015512612404256016743 0ustar susnaksusnakfunction [xo]=groupthresh(xi,lambda,varargin) %-*- texinfo -*- %@deftypefn {Function} groupthresh %@verbatim %GROUPTHRESH Group thresholding % Usage: xo=groupthresh(xi,lambda); % % GROUPTHRESH(x,lambda) performs group thresholding on x, with % threshold lambda. x must be a two-dimensional array, the first % dimension labelling groups, and the second one labelling members. This % means that the groups are the row vectors of the input (the vectors % along the 2nd dimension). % % Several types of grouping behaviour are available: % % GROUPTHRESH(x,lambda,'group') shrinks all coefficients within a given % group according to the value of the l^2 norm of the group in % comparison to the threshold lambda. This is the default. % % GROUPTHRESH(x,lambda,'elite') shrinks all coefficients within a % given group according to the value of the l^1 norm of the % group in comparison to the threshold value lambda. % % GROUPTHRESH(x,lambda,dim) chooses groups along dimension % dim. The default value is dim=2. % % GROUPTHRESH accepts all the flags of THRESH to choose the % thresholding type within each group and the output type (full / sparse % matrix). Please see the help of THRESH for the available % options. Default is to use soft thresholding and full matrix output. % % % % References: % M. Kowalski. Sparse regression using mixed norms. Appl. Comput. Harmon. % Anal., 27(3):303-324, 2009. % % M. Kowalski and B. Torresani. Sparsity and persistence: mixed norms % provide simple signal models with dependent coefficients. Signal, Image % and Video Processing, 3(3):251-264, 2009. % % G. Yu, S. Mallat, and E. Bacry. Audio Denoising by Time-Frequency Block % Thresholding. IEEE Trans. Signal Process., 56(5):1830-1839, 2008. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/groupthresh.html} %@seealso{thresh, demo_audioshrink} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Kai Siedenburg, Bruno Torresani. % REFERENCE: OK if nargin<2 error('Too few input parameters.');k end; if (prod(size(lambda))~=1 || ~isnumeric(lambda)) error('lambda must be a scalar.'); end; % Define initial value for flags and key/value pairs. definput.import={'thresh','groupthresh'}; definput.importdefaults={'soft'}; definput.keyvals.dim=2; [flags,keyvals,dim]=ltfatarghelper({'dim'},definput,varargin); % kv.dim (the time or frequency selector) is handled by assert_sigreshape_pre [xi,L,NbMembers,NbGroups,dim,permutedsize,order]=assert_sigreshape_pre(xi,[],dim,'GROUPTHRESH'); if flags.do_sparse xo = sparse(size(xi)); else xo = zeros(size(xi)); end; if flags.do_group groupnorm = sqrt(sum(abs(xi).^2)); w = thresh(groupnorm, lambda, flags.iofun,flags.outclass)./groupnorm; % Clean w for NaN. NaN appears if the input has a group with norm % exactly 0. w(isnan(w)) = 0; xo = bsxfun(@times,xi,w); end if flags.do_elite for ii=1:NbGroups, y = sort(abs(xi(:,ii)),'descend'); rhs = cumsum(y); rhs = rhs .* lambda ./ (1 + lambda * (1:NbMembers)'); M_ii = find(diff(sign(y-rhs))); if (M_ii~=0) tau_ii = lambda * norm(y(1:M_ii),1)/(1+lambda*M_ii); else tau_ii = 0; end % FIXME: The following line does not work for sparse matrices. xo(:,ii) = thresh(xi(:,ii),tau_ii,flags.iofun,flags.outclass); end end; xo=assert_sigreshape_post(xo,dim,permutedsize,order); ltfat/inst/sigproc/dynlimit.m0000664000175000017500000000242212612404256016220 0ustar susnaksusnakfunction xo=dynlimit(xi,dynrange,varargin); %-*- texinfo -*- %@deftypefn {Function} dynlimit %@verbatim %DYNLIMIT Limit the dynamical range of the input % Usage: xo=dynlimit(xi,dynrange); % % DYNLIMIT(xi,dynrange) will threshold the input such that the % difference between the maximum and minumum value of xi is exactly % dynrange. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/dynlimit.html} %@seealso{thresh, largestr, largestn} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . xmax=max(xi(:)); xo=xi; xo(xo. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Assert correct input. if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'pfilt'}; definput.keyvals.a=1; definput.keyvals.dim=[]; [flags,kv,a,dim]=ltfatarghelper({'a','dim'},definput,varargin); [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],dim,upper(mfilename)); [g,info] = comp_fourierwindow(g,L,upper(mfilename)); outIsReal = isreal(f) &&... (isfield(g,'h') && isreal(g.h) && ~(isfield(g,'fc') && g.fc~=0) || isfield(g,'H') && g.realonly); asan = comp_filterbank_a(a,1); g = comp_filterbank_pre({g},a,L,kv.crossover); c = comp_filterbank(f,g,a); c = c{1}; permutedsize(1)=size(c,1); c=assert_sigreshape_post(c,dim,permutedsize,order); if outIsReal c = real(c); end ltfat/inst/sigproc/warpedblfilter.m0000664000175000017500000001371712612404256017406 0ustar susnaksusnakfunction gout=warpedblfilter(winname,fsupp,fc,fs,freqtoscale,scaletofreq,varargin) %-*- texinfo -*- %@deftypefn {Function} warpedblfilter %@verbatim %WARPEDBLFILTER Construct a warped band-limited filter % Usage: g=warpedblfilter(winname,fsupp,fc,fs,freqtoscale,scaletofreq); % % Input parameters: % winname : Name of prototype. % fsupp : Support length of the prototype (in scale units). % fc : Centre frequency (in Hz). % fs : Sampling rate % freqtoscale : Function handle to convert Hz to scale units % scaletofreq : Function to convert scale units into Hz. % % Output parameters: % g : Filter definition, see BLFILTER. % % WARPEDBLFILTER(winname,fsupp,fc,fs,freqtoscale,scaletofreq) constructs % a band-limited filter that is warped on a given frequency scale. The % parameter winname specifies the basic shape of the frequency response. % The name must be one of the shapes accepted by FIRWIN. The support of % the frequency response measured on the selected frequency scale is % specified by fsupp, the centre frequency by fc and the scale by the % function handle freqtoscale of a function that converts Hz into the % choosen scale and scaletofreq doing the inverse. % % If one of the inputs is a vector, the output will be a cell array % with one entry in the cell array for each element in the vector. If % more input are vectors, they must have the same size and shape and the % the filters will be generated by stepping through the vectors. This % is a quick way to create filters for FILTERBANK and UFILTERBANK. % % WARPEDBLFILTER accepts the following optional parameters: % % 'complex' Make the filter complex valued if the centre frequency % is non-zero. This is the default. % % 'real' Make the filter real-valued if the centre frequency % is non-zero. % % 'symmetric' The filters with fc<0 (or fc>fs/2) will be created % on the positive frequencies and mirrored. This allows % using freqtoscale defined only for the positive % numbers. % % 'delay',d Set the delay of the filter. Default value is zero. % % 'scal',s Scale the filter by the constant s. This can be % useful to equalize channels in a filterbank. % % It is possible to normalize the transfer function of the filter by % passing any of the flags from the NORMALIZE function. The default % normalization is 'energy'. % % The filter can be used in the PFILT routine to filter a signal, or % in can be placed in a cell-array for use with FILTERBANK or % UFILTERBANK. % % The output format is the same as that of BLFILTER. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/warpedblfilter.html} %@seealso{blfilter, firwin, pfilt, filterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . capmname = upper(mfilename); complainif_notenoughargs(nargin,6,capmname); complainif_notposint(fs,'fs',capmname); if isempty(freqtoscale) || ~isa(freqtoscale,'function_handle') error('%s: freqtoscale must be a function handle',capmname); end if isempty(scaletofreq) || ~isa(scaletofreq,'function_handle') error('%s: scaletofreq must be a function handle',capmname); end if isempty(fc) || ~isnumeric(fc) error('%s: fc must be numeric',capmname); end if isempty(fsupp) || ~isnumeric(fsupp) error('%s: fc must be numeric',capmname); end % Define initial value for flags and key/value pairs. definput.import={'normalize'}; definput.importdefaults={'energy'}; definput.keyvals.delay=0; definput.keyvals.scal=1; definput.flags.real={'complex','real'}; definput.flags.symmetry = {'nonsymmetric','symmetric'}; [flags,kv]=ltfatarghelper({},definput,varargin); if ~isscalar(kv.scal) error('%s: scal must be a scalar',capmname); end if ~isscalar(kv.delay) error('%s: delay must be a scalar',capmname); end [fsupp,fc,kv.delay,kv.scal]=scalardistribute(fsupp,fc,kv.delay,kv.scal); Nfilt=numel(fsupp); gout=cell(1,Nfilt); for ii=1:Nfilt g=struct(); if flags.do_1 || flags.do_area g.H=@(L) comp_warpedfreqresponse( winname,fc(ii), ... fsupp(ii),fs,L,freqtoscale, ... scaletofreq, flags.norm,... flags.symmetry)*kv.scal(ii)*L; end; if flags.do_2 || flags.do_energy g.H=@(L) comp_warpedfreqresponse(winname,fc(ii), ... fsupp(ii),fs,L,freqtoscale,scaletofreq, ... flags.norm,flags.symmetry)*kv.scal(ii)*sqrt(L); end; if flags.do_inf || flags.do_peak g.H=@(L) comp_warpedfreqresponse(winname,fc(ii), ... fsupp(ii),fs,L,freqtoscale,scaletofreq, ... flags.norm,flags.symmetry)*kv.scal(ii); end; g.foff=@(L) comp_warpedfoff(fc(ii),fsupp(ii),fs,L,freqtoscale,... scaletofreq,flags.do_symmetric); g.realonly=flags.do_real; if kv.delay~=0 g.delay=kv.delay(ii); end g.fs=fs; gout{ii}=g; end; if Nfilt==1 gout=g; end; ltfat/inst/sigproc/crestfactor.m0000664000175000017500000000227312612404256016712 0ustar susnaksusnakfunction c=crestfactor(insig) %-*- texinfo -*- %@deftypefn {Function} crestfactor %@verbatim %CRESTFACTOR Crest factor of input signal in dB % Usage: c=crestfactor(insig); % % CRESTFACTOR(insig) computes the crest factor of the input signal % insig. The output is measured in dB. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/crestfactor.html} %@seealso{rms, gaindb} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . c=20*log10(norm(insig,Inf)/rms(insig)); ltfat/inst/sigproc/normalize.m0000664000175000017500000000760212612404256016374 0ustar susnaksusnakfunction [f,fnorm]=normalize(f,varargin) %-*- texinfo -*- %@deftypefn {Function} normalize %@verbatim %NORMALIZE Normalize input signal by specified norm % Usage: h=normalize(f,...); % % NORMALIZE(f,...) will normalize the signal f by the specified norm. % % [f,fnorm]=NORMALIZE(f,...) does the same thing, but in addition % returns norm fnorm of a signal f. % % The norm is specified as a string and may be one of: % % '1' Normalize the l^1 norm to be 1. % % 'area' Normalize the area of the signal to be 1. This is exactly the same as '1'. % % '2' Normalize the l^2 norm to be 1. % % 'energy' Normalize the energy of the signal to be 1. This is exactly % the same as '2'. % % 'inf' Normalize the l^{inf} norm to be 1. % % 'peak' Normalize the peak value of the signal to be 1. This is exactly % the same as 'inf'. % % 'rms' Normalize the Root Mean Square (RMS) norm of the % signal to be 1. % % 's0' Normalize the S0-norm to be 1. % % 'wav' Normalize to the l^{inf} norm to be 0.99 to avoid % possible clipping introduced by the quantization procedure % when saving as a wav file. This only works with floating % point data types. % % 'null' Do NOT normalize, output is identical to input. % % % It is possible to specify the dimension: % % 'dim',d % Work along specified dimension. The default value of [] % means to work along the first non-singleton one. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/normalize.html} %@seealso{rms, s0norm} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if ~isnumeric(f) error('%s: Input must be numerical.',upper(mfilename)); end; if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'normalize'}; definput.keyvals.dim=[]; [flags,kv]=ltfatarghelper({},definput,varargin); if flags.do_null || flags.do_norm_notset || isempty(f); return end; if isa(f,'integer') && ~flags.do_wav error('%s: Integer data types are unsupported.',upper(mfilename)); end %% ------ Computation -------------------------- [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],kv.dim, ... upper(mfilename)); fnorm = zeros(W,1); for ii=1:W if flags.do_1 || flags.do_area fnorm(ii) = norm(f(:,ii),1); f(:,ii)=f(:,ii)/fnorm(ii); end; if flags.do_2 || flags.do_energy fnorm(ii) = norm(f(:,ii),2); f(:,ii)=f(:,ii)/fnorm(ii); end; if flags.do_inf || flags.do_peak fnorm(ii) = norm(f(:,ii),Inf); f(:,ii)=f(:,ii)/fnorm(ii); end; if flags.do_rms fnorm(ii) = rms(f(:,ii)); f(:,ii)=f(:,ii)/fnorm(ii); end; if flags.do_s0 fnorm(ii) = s0norm(f(:,ii)); f(:,ii)=f(:,ii)/fnorm(ii); end; if flags.do_wav if isa(f,'float') fnorm(ii) = norm(f(:,ii),Inf); f(:,ii) = 0.99*f(:,ii)/fnorm(ii); else error(['%s: TO DO: Normalizing integer data types not supported ',... 'yet.'],upper(mfilename)); end end; end; f=assert_sigreshape_post(f,kv.dim,permutedsize,order); ltfat/inst/sigproc/iqam4.m0000664000175000017500000000347412612404256015412 0ustar susnaksusnakfunction xo=iqam4(xi) %-*- texinfo -*- %@deftypefn {Function} iqam4 %@verbatim %IQAM4 Inverse QAM of order 4 % % IQAM4(xi) demodulates a signal mapping the input coefficients to the % closest complex root of unity, and returning the associated bit % pattern. This is the inverse operation of QAM4. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/iqam4.html} %@seealso{qam4, demo_ofdm} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Define the optimal ordering of bits bitorder=[0;1;3;2]; % nbits is number of bits used. Everything will be ordered % in groups of this size. nbits=2; symbols=length(xi); L=symbols*nbits; % We round the argument of the complex numbers to the closest root of % unity of order 4 work=round(angle(xi)/(2*pi)*4); % work now contains negative numbers. Get rid of these work=mod(work,4); % Reverse the optimal bit ordering. reversebitorder=zeros(4,1); reversebitorder(bitorder+1)=(0:3).'; % Apply the reverse ordering work=reversebitorder(work+1); xo=zeros(nbits,symbols); % Reconstruct the bits for bit=1:nbits xo(bit,:)=bitget(work,bit).'; end; xo=xo(:); ltfat/inst/sigproc/firwin.m0000664000175000017500000002716512612404256015700 0ustar susnaksusnakfunction [g,info]=firwin(name,M,varargin); %-*- texinfo -*- %@deftypefn {Function} firwin %@verbatim %FIRWIN FIR window % Usage: g=firwin(name,M); % g=firwin(name,M,...); % g=firwin(name,x); % % FIRWIN(name,M) will return an FIR window of length M of type name. % % All windows are symmetric and generate zero delay and zero phase % filters. They can be used for the Wilson and WMDCT transform, except % when noted otherwise. % % FIRWIN(name,x) where x is a vector will sample the window % definition as the specified points. The normal sampling interval for % the windows is -.5< x <.5. % % In the following PSL means "Peak Sidelobe level", and the main lobe % width is measured in normalized frequencies. % % If a window g forms a "partition of unity" (PU) it means specifically % that: % % g+fftshift(g)==ones(L,1); % % A PU can only be formed if the window length is even, but some windows % may work for odd lengths anyway. % % If a window is the square root of a window that forms a PU, the window % will generate a tight Gabor frame / orthonormal Wilson/WMDCT basis if % the number of channels is less than M. % % The windows available are: % % 'hann' von Hann window. Forms a PU. The Hann window has a % mainlobe with of 8/M, a PSL of -31.5 dB and decay rate % of 18 dB/Octave. % % 'sine' Sine window. This is the square root of the Hanning % window. The sine window has a mainlobe width of 8/M, % a PSL of -22.3 dB and decay rate of 12 dB/Octave. % Aliases: 'cosine', 'sqrthann' % % 'rect' (Almost) rectangular window. The rectangular window has a % mainlobe width of 4/M, a PSL of -13.3 dB and decay % rate of 6 dB/Octave. Forms a PU if the order is odd. % Alias: 'square' % % 'tria' (Almost) triangular window. Forms a PU. Alias: 'bartlett' % % 'sqrttria' Square root of the triangular window. % % 'hamming' Hamming window. Forms a PU that sums to 1.08 instead % of 1.0 as usual. The Hamming window has a % mainlobe width of 8/M, a PSL of -42.7 dB and decay % rate of 6 dB/Octave. This window should not be used for % a Wilson basis, as a reconstruction window cannot be % found by WILDUAL. % % 'blackman' Blackman window. The Blackman window has a % mainlobe width of 12/M, a PSL of -58.1 dB and decay % rate of 18 dB/Octave. % % 'blackman2' Alternate Blackman window. This window has a % mainlobe width of 12/M, a PSL of -68.24 dB and decay % rate of 6 dB/Octave. % % 'itersine' Iterated sine window. Generates an orthonormal % Wilson/WMDCT basis. This window is described in % Wesfreid and Wickerhauser (1993) and is used in the % ogg sound codec. Alias: 'ogg' % % 'nuttall' Nuttall window. The Nuttall window has a % mainlobe width of 16/M, a PSL of -93.32 dB and decay % rate of 18 dB/Octave. % % 'nuttall10' 2-term Nuttall window with 1 continuous derivative. % Alias: 'hann', 'hanning'. % % 'nuttall01' 2-term Nuttall window with 0 continuous derivatives. % This is a slightly improved Hamming window. It has a % mainlobe width of 8/M, a PSL of -43.19 dB and decay % rate of 6 dB/Octave. % % 'nuttall20' 3-term Nuttall window with 3 continuous derivatives. % The window has a mainlobe width of 12/M, a PSL of % -46.74 dB and decay rate of 30 dB/Octave. % % 'nuttall11' 3-term Nuttall window with 1 continuous derivative. % The window has a mainlobe width of 12/M, a PSL of % -64.19 dB and decay rate of 18 dB/Octave. % % 'nuttall02' 3-term Nuttall window with 0 continuous derivatives. % The window has a mainlobe width of 12/M, a PSL of % -71.48 dB and decay rate of 6 dB/Octave. % % 'nuttall30' 4-term Nuttall window with 5 continuous derivatives. % The window has a mainlobe width of 16/M, a PSL of % -60.95 dB and decay rate of 42 dB/Octave. % % 'nuttall21' 4-term Nuttall window with 3 continuous derivatives. % The window has a mainlobe width of 16/M, a PSL of % -82.60 dB and decay rate of 30 dB/Octave. % % 'nuttall12' 4-term Nuttall window with 1 continuous derivatives. % Alias: 'nuttall'. % % 'nuttall03' 4-term Nuttall window with 0 continuous derivatives. % The window has a mainlobe width of 16/M, a PSL of % -98.17 dB and decay rate of 6 dB/Octave. % % FIRWIN understands the following flags at the end of the list of input % parameters: % % 'shift',s Shift the window by s samples. The value can be a % fractional number. % % 'wp' Output is whole point even. This is the default. It % corresponds to a shift of s=0. % % 'hp' Output is half point even, as most Matlab filter % routines. This corresponds to a shift of s=-.5 % % % 'taper',t Extend the window by a flat section in the middle. The % argument t is the ratio of the rising and falling % parts as compared to the total length of the % window. The default value of 1 means no % tapering. Accepted values lie in the range from 0 to 1. % % Additionally, FIRWIN accepts flags to normalize the output. Please see % the help of NORMALIZE. Default is to use 'peak' normalization, % which is useful for using the output from FIRWIN for windowing in the % time-domain. For filtering in the time-domain, a normalization of '1' % or 'area' is preferable. % % Examples: % --------- % % The following plot shows the magnitude response for some common % windows: % % hold all; % L=30; % dr=110; % % magresp(firwin('hanning',L,'1'),'fir','dynrange',dr); % magresp(firwin('hamming',L,'1'),'fir','dynrange',dr); % magresp(firwin('blackman',L,'1'),'fir','dynrange',dr); % magresp(firwin('nuttall',L,'1'),'fir','dynrange',dr); % magresp(firwin('itersine',L,'1'),'fir','dynrange',dr); % % legend('Hann','Hamming','Blackman','Nuttall','Itersine'); % % % References: % A. V. Oppenheim and R. W. Schafer. Discrete-time signal processing. % Prentice Hall, Englewood Cliffs, NJ, 1989. % % A. Nuttall. Some windows with very good sidelobe behavior. IEEE Trans. % Acoust. Speech Signal Process., 29(1):84-91, 1981. % % F. Harris. On the use of windows for harmonic analysis with the % discrete Fourier transform. Proceedings of the IEEE, 66(1):51 - 83, jan % 1978. % % E. Wesfreid and M. Wickerhauser. Adapted local trigonometric transforms % and speech processing. IEEE Trans. Signal Process., 41(12):3596-3600, % 1993. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/firwin.html} %@seealso{pgauss, pbspline, firkaiser, normalize} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHORS : Peter L. Soendergaard, Nicki Holighaus. % REFERENCE: NA if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; if ~ischar(name) error('%s: First input argument must the name of a window.',upper(mfilename)); end; % Always set to this info.isfir=1; % Default values, may be overwritten later in the code info.ispu=0; info.issqpu=0; name=lower(name); % Define initial value for flags and key/value pairs. definput.import={'normalize'}; definput.importdefaults={'null'}; definput.flags.centering={'wp','hp','shift'}; definput.keyvals.shift=0; definput.keyvals.taper=1; [flags,kv]=ltfatarghelper({},definput,varargin); if flags.do_wp kv.shift=0; end; if flags.do_hp kv.shift=0.5; end; if M==0 g=[]; return; end; if numel(M)==1 % Deal with tapering if kv.taper<1 if kv.taper==0 % Window is only tapering, do this and bail out, because subsequent % code may fail. g=ones(M,1); return; end; % Modify M to fit with tapering Morig=M; M=round(M*kv.taper); Mtaper=Morig-M; p1=round(Mtaper/2); p2=Mtaper-p1; % Switch centering if necessary if flags.do_wp && p1~=p2 kv.shift=.5; end; if flags.do_hp && p1~=p2 kv.shift=1; end; end; % This is the normally used sampling vector. if mod(M,2) == 0 % For even M the sampling interval is [-.5,.5-1/M] x = [0:1/M:.5-1/M,-.5:1/M:-1/M]'; else % For odd M the sampling interval is [-.5+1/(2M),.5-1/(2M)] x = [0:1/M:.5-.5/M,-.5+.5/M:1/M:-1/M]'; end x = x+kv.shift/M; else % Use sampling vector specified by the user x=M; end; do_sqrt=0; switch name case {'hanning','hann','nuttall10'} g=(0.5+0.5*cos(2*pi*x)); info.ispu=1; case {'sine','cosine','sqrthann'} g=firwin('hanning',M,varargin{:}); info.issqpu=1; do_sqrt=1; case 'hamming' g=0.54+0.46*cos(2*pi*(x)); % This is the definition taken from the Harris paper %case 'hammingacc' %g=25/46+21/46*cos(2*pi*(x)); case 'nuttall01' g=0.53836+0.46164*cos(2*pi*(x)); case {'square','rect'} g=double(abs(x) < .5); case {'tria','triangular','bartlett'} g=1-2*abs(x); info.ispu=1; case {'sqrttria'} g=firwin('tria',M,flags.centering); info.issqpu=1; do_sqrt=1; % Rounded version of blackman2 case {'blackman'} g=0.42+0.5*cos(2*pi*(x))+0.08*cos(4*pi*(x)); case {'blackman2'} g=7938/18608+9240/18608*cos(2*pi*(x))+1430/18608*cos(4*pi*(x)); case {'nuttall','nuttall12'} g = 0.355768+0.487396*cos(2*pi*(x))+0.144232*cos(4*pi*(x)) ... +0.012604*cos(6*pi*(x)); case {'itersine','ogg'} g=sin(pi/2*cos(pi*x).^2); info.issqpu=1; case {'nuttall20'} g=3/8+4/8*cos(2*pi*(x))+1/8*cos(4*pi*(x)); case {'nuttall11'} g=0.40897+0.5*cos(2*pi*(x))+0.09103*cos(4*pi*(x)); case {'nuttall02'} g=0.4243801+0.4973406*cos(2*pi*(x))+0.0782793*cos(4*pi*(x)); case {'nuttall30'} g = 10/32+15/32*cos(2*pi*(x))+6/32*cos(4*pi*(x))+1/32*cos(6*pi*(x)); case {'nuttall21'} g = 0.338946+0.481973*cos(2*pi*(x))+0.161054*cos(4*pi*(x)) ... +0.018027*cos(6*pi*(x)); case {'nuttall03'} g=0.3635819+0.4891775*cos(2*pi*(x))+0.1365995*cos(4*pi*(x)) ... +0.0106411*cos(6*pi*(x)); otherwise error('Unknown window: %s.',name); end; % Force the window to 0 outside (-.5,.5) g = g.*(abs(x) < .5); if numel(M) == 1 && kv.taper<1 % Perform the actual tapering. g=[ones(p1,1);g;ones(p2,1)]; end; % Do sqrt if needed. if do_sqrt g=sqrt(g); end; g=normalize(g,flags.norm); ltfat/inst/sigproc/qam4.m0000664000175000017500000000354712612404256015242 0ustar susnaksusnakfunction xo=qam4(xi) %-*- texinfo -*- %@deftypefn {Function} qam4 %@verbatim %QAM4 Quadrature amplitude modulation of order 4 % Usage: xo=qam4(xi); % % QAM4(xi) converts a vector of 0's and 1's into the complex roots of % unity (QAM4 modulation). Every 2 input coefficients are mapped into 1 % output coefficient. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/qam4.html} %@seealso{iqam4, demo_ofdm} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Verify input if ~all((xi==0) + (xi==1)) error('Input vector must consist of only 0s and 1s'); end; % Define the optimal ordering of bits bitorder=[0;1;3;2]; % nbits is number of bits used. Everything will be ordered % in groups of this size. nbits=2; L=length(xi); symbols=L/nbits; % nbits must divide L if rem(symbols,1)~=0 error('Length of input must be a multiple of 2'); end; xi=reshape(xi,nbits,symbols); two_power=(2.^(0:nbits-1)).'; % This could be vectorized by a repmat. xo=zeros(symbols,1); xo(:)=sum(bsxfun(@times,xi,two_power)); % xo now consist of numbers in the range 0:3 % Convert to the corresponding complex root of unity. xo=exp(2*pi*i*bitorder(xo+1)/4); ltfat/inst/sigproc/sigprocinit.m0000664000175000017500000000164312612404256016725 0ustar susnaksusnakstatus=1; %-*- texinfo -*- %@deftypefn {Function} sigprocinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/sigprocinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/sigproc/rgb2jpeg.m0000664000175000017500000000566612612404256016106 0ustar susnaksusnakfunction YCbCr = rgb2jpeg(RGB) %-*- texinfo -*- %@deftypefn {Function} rgb2jpeg %@verbatim %RGB2JPEG Coverts from RGB format to the YCbCr format used by JPEG % Usage: YCbCr = rgb2jpeg(RGB); % % Input parameters: % RGB : 3d data-cube, containing RGB information of the image % % Output parameters: % YCbCr : 3d data-cube, containing the YCbCr information of the % image % % 'rgb2jpeg(RGB)' performs a transformation of the 3d data-cube RGB with % dimensions N xM x3, which contains information of the % colours "red", "green" and "blue". The output variable YCbCr is a 3d % data-cube of the same size containing information about "luminance", % "chrominance blue" and "chrominance red". The output will be of % the uint8 type. % % See http://en.wikipedia.org/wiki/YCbCr and % http://de.wikipedia.org/wiki/JPEG. % % Examples: % --------- % % In the following example, the Lichtenstein test image is split into % its three components. The very first subplot is the original image: % % f=lichtenstein; % % f_jpeg=rgb2jpeg(f); % % subplot(2,2,1); % image(f);axis('image'); % % Ymono=zeros(512,512,3,'uint8'); % Ymono(:,:,1)=f_jpeg(:,:,1); % Ymono(:,:,2:3)=128; % fmono=jpeg2rgb(Ymono); % subplot(2,2,2); % image(fmono);axis('image'); % % Cbmono=zeros(512,512,3,'uint8'); % Cbmono(:,:,2)=f_jpeg(:,:,2); % Cbmono(:,:,3)=128; % fmono=jpeg2rgb(Cbmono); % subplot(2,2,3); % image(fmono);axis('image'); % % Crmono=zeros(512,512,3,'uint8'); % Crmono(:,:,3)=f_jpeg(:,:,3); % Crmono(:,:,2)=128; % fmono=jpeg2rgb(Crmono); % subplot(2,2,4); % image(fmono);axis('image'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/rgb2jpeg.html} %@seealso{jpeg2rgb} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Markus Faulhuber, February 2013 [s1,s2,s3] = size(RGB); RGB = double(RGB); if s3 ~= 3 disp('Sorry, this routine is for RGB of dimension NxMx3 only') return; end YCbCr(:,:,1) = 0.299*RGB(:,:,1)+0.587*RGB(:,:,2)+0.114*RGB(:,:,3); YCbCr(:,:,2) = 128-0.168736*RGB(:,:,1)-0.331264*RGB(:,:,2)+0.5*RGB(:,:,3); YCbCr(:,:,3) = 128+0.5*RGB(:,:,1)-0.418688*RGB(:,:,2)-0.081312*RGB(:,:,3); YCbCr = uint8(YCbCr); ltfat/inst/sigproc/firkaiser.m0000664000175000017500000000741312612404256016353 0ustar susnaksusnakfunction g=firkaiser(L,beta,varargin) %-*- texinfo -*- %@deftypefn {Function} firkaiser %@verbatim %FIRKAISER Kaiser-Bessel window % Usage: g=firkaiser(L,beta); % g=firkaiser(L,beta,...); % % FIRKAISER(L,beta) computes the Kaiser-Bessel window of length L with % parameter beta. The smallest element of the window is set to zero when % the window has an even length. This gives the window perfect whole-point % even symmetry, and makes it possible to use the window for a Wilson % basis. % % FIRKAISER takes the following flags at the end of the input arguments: % % 'normal' Normal Kaiser-Bessel window. This is the default. % % 'derived' Derived Kaiser-Bessel window. % % 'wp' Generate a whole point even window. This is the default. % % 'hp' Generate half point even window. % % Additionally, FIRKAISER accepts flags to normalize the output. Please % see the help of NORMALIZE. Default is to use 'peak' normalization. % % % References: % A. V. Oppenheim and R. W. Schafer. Discrete-time signal processing. % Prentice Hall, Englewood Cliffs, NJ, 1989. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/firkaiser.html} %@seealso{firwin, normalize} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<2 error('Too few input arguments.'); end; if numel(beta)>1 error('beta must be a scalar.'); end; % Define initial value for flags and key/value pairs. definput.import={'normalize'}; definput.importdefaults={'null'}; definput.flags.centering={'wp','hp'}; definput.flags.stype={'normal','derived'}; [flags,keyvals]=ltfatarghelper({},definput,varargin); cent=0; if flags.do_hp cent=.5; end; if flags.do_normal if (L == 1) g = 1; else m = L - 1; k = (0:L-1)'+rem(L,2)/2-.5+cent; k = 2*beta/(L-1)*sqrt(k.*(L-1-k)); g = besseli(0,k)/besseli(0,beta); end; g=ifftshift(g); if ((flags.do_wp && rem(L,2)==0) || ... (flags.do_hp && rem(L,2)==1)) % Explicitly zero last element. This is done to get the right % symmetry, and because that element sometimes turn negative. g(floor(L/2)+1)=0; end; else if rem(L,2)==1 error('The length of the choosen window must be even.'); end; if flags.do_wp if rem(L,4)==0 L2=L/2+2; else L2=L/2+1; end; else L2=floor((L+1)/2); end; % Compute a normal Kaiser window g_normal=fftshift(firkaiser(L2,beta,flags.centering)); g1=sqrt(cumsum(g_normal(1:L2))./sum(g_normal(1:L2))); if flags.do_wp if rem(L,2)==0 g=[flipud(g1);... g1(2:L/2)]; else g=[flipud(g1);... g1(1:floor(L/2))]; end; else g=[flipud(g1);... g1]; end; if ((flags.do_wp && rem(L,2)==0) || ... (flags.do_hp && rem(L,2)==1)) % Explicitly zero last element. This is done to get the right % symmetry, and because that element sometimes turn negative. g(floor(L/2)+1)=0; end; end; % The besseli computation sometimes generates a zero imaginary component. g=real(g); g=normalize(g,flags.norm); ltfat/inst/sigproc/fir2long.m0000664000175000017500000000415012612404256016111 0ustar susnaksusnakfunction gout=fir2long(gin,Llong); %-*- texinfo -*- %@deftypefn {Function} fir2long %@verbatim %FIR2LONG Extend FIR window to LONG % Usage: g=fir2long(g,Llong); % % FIR2LONG(g,Llong) will extend the FIR window g to a length Llong* % window by inserting zeros. Note that this is a slightly different % behaviour than MIDDLEPAD. % % FIR2LONG can also be used to extend a FIR window to a longer FIR % window, for instance in order to satisfy the usual requirement that the % window length should be divisible by the number of channels. % % If the input to FIR2LONG is a cell, FIR2LONG will recurse into % the cell array. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/fir2long.html} %@seealso{long2fir, middlepad} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(2,2,nargin)); if iscell(gin) gout=cellfun(@(x) fir2long(x,Llong),gin,'UniformOutput',false); else Lfir=length(gin); if Lfir>Llong error('Llong must be larger than length of window.'); end; if rem(Lfir,2)==0 % HPE middlepad works the same way as the FIR extension (e.g. just % inserting zeros) for even-length signals. gout=middlepad(gin,Llong,'hp'); else % WPE middlepad works the same way as the FIR extension (e.g. just % inserting zeros) for odd-length signals. gout=middlepad(gin,Llong); end; end; ltfat/inst/sigproc/pgrpdelay.m0000664000175000017500000000440412612404256016360 0ustar susnaksusnakfunction ggd = pgrpdelay(g,L) %-*- texinfo -*- %@deftypefn {Function} pgrpdelay %@verbatim %PGRPDELAY Group delay of a filter with periodic boundaries % Usage: ggd = pgrpdelay(g,L); % % PGRPDELAY(g,L) computes group delay of filter g as a negative % derivative of the phase frequency response of filter g assuming % periodic (cyclic) boundaries i.e. the delay may be a negative number. % The derivative is calculated using the second order centered difference % approximation. % The resulting group delay is in samples. % % Example: % -------- % % The following example shows a group delay of causal, moving average % 6tap FIR filter and it's magnitude frequency response for comparison. % The dips in the group delay correspond to places where modulus of the % frequency response falls to zero.: % % g = struct(struct('h',ones(6,1),'offset',0)); % L = 512; % figure(1); % subplot(2,1,1); % plot(-L/2+1:L/2,fftshift(pgrpdelay(g,512))); % axis tight;ylim([0,4]); % % subplot(2,1,2); % magresp(g,L,'nf'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/pgrpdelay.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . g = comp_fourierwindow(g,L,upper(mfilename)); H = comp_transferfunction(g,L); Harg = angle(H); % Forward approximation tgrad_1 = Harg-circshift(Harg,-1); tgrad_1 = tgrad_1 - 2*pi*round(tgrad_1/(2*pi)); % Backward approximation tgrad_2 = circshift(Harg,1)-Harg; tgrad_2 = tgrad_2 - 2*pi*round(tgrad_2/(2*pi)); % Average ggd = (tgrad_1+tgrad_2)/2; ggd = ggd/(2*pi)*L; ltfat/inst/sigproc/rampsignal.m0000664000175000017500000000601712612404256016530 0ustar susnaksusnakfunction outsig=rampsignal(insig,varargin) %-*- texinfo -*- %@deftypefn {Function} rampsignal %@verbatim %RAMPSIGNAL Ramp signal % Usage: outsig=rampsignal(insig,L); % % RAMPSIGNAL(insig,L) applies a ramp function of length L to the % beginning and the end of the input signal. The default ramp is a % sinusoide starting from zero and ending at one (also known as a cosine % squared ramp). % % If L is scalar, the starting and ending ramps will be of the same % length. If L is a vector of length 2, the first entry will be used % for the rising ramp, and the second for the falling. % % If the input is a matrix or an N-D array, the ramp will be applied % along the first non-singleton dimension. % % RAMPSIGNAL(insig) will use a ramp length of half the signal. % % RAMPSIGNAL(insig,L,wintype) will use another window for ramping. This % may be any of the window types from FIRWIN. Please see the help on % FIRWIN for more information. The default is to use a piece of the % Hann window. % % RAMPSIGNAL accepts the following optional parameters: % % 'dim',d Apply the ramp along dimension d. The default value of [] % means to use the first non-singleton dimension. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/rampsignal.html} %@seealso{rampdown, rampsignal, firwin} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . definput.import={'firwin'}; definput.keyvals.dim=[]; definput.keyvals.L=[]; [flags,kv]=ltfatarghelper({'L','dim'},definput,varargin); [insig,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(insig,[],kv.dim,'RAMPSIGNAL'); % Note: Meaning of L has changed, it is now the length of the signal. switch numel(kv.L) case 0 L1=L/2; L2=L/2; case 1 L1=kv.L; L2=kv.L; case 2 L1=kv.L(1); L2=kv.L(2); otherwise error('%s: The length must a scalar or vector.',upper(mfilename)); end; if rem(L1,1)~=0 || rem(L2,1)~=0 error('The length of the ramp must be an integer.'); end; if L. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Bruno Torresani. if nargin<2 error('Too few input parameters.'); end; if (prod(size(lambda))~=1 || ~isnumeric(lambda)) error('lambda must be a scalar.'); end; % Define initial value for flags and key/value pairs. definput.flags.iofun={'hard','soft'}; definput.flags.outclass={'full','sparse'}; [flags,keyvals]=ltfatarghelper({},definput,varargin,mfilename); NbGroups = size(xi,1); NbMembers = size(xi,2); if flags.do_sparse xo = sparse(size(xi)); else xo = zeros(size(xi)); end; for g=1:NbGroups, y = sort(abs(xi(g,:)),'descend'); rhs = cumsum(y); rhs = rhs .* lambda ./ (1 + lambda * (1:NbMembers)); M_g = find(diff(sign(y-rhs))); if (M_g~=0) tau_g = lambda * norm(y(1:M_g),1)/(1+lambda*M_g); else tau_g = 0; end xo(g,:) = thresh(xi(g,:),tau_g,flags.iofun,flags.outclass); end ltfat/inst/sigproc/largestr.m0000664000175000017500000000563712612404256016225 0ustar susnaksusnakfunction [xo,Nout]=largestr(xi,p,varargin) %-*- texinfo -*- %@deftypefn {Function} largestr %@verbatim %LARGESTR Keep fixed ratio of largest coefficients % Usage: xo=largestr(x,p); % xo=largestr(x,p,mtype); % [xo,N]=largestr(...); % % LARGESTR(x,p) returns an array of the same size as x keeping % the fraction p of the coefficients. The coefficients with the largest % magnitude are kept. % % [xo,n]=LARGESTR(xi,p) additionally returns the number of coefficients % kept. % % *Note:* If the function is used on coefficients coming from a % redundant transform or from a transform where the input signal was % padded, the coefficient array will be larger than the original input % signal. Therefore, the number of coefficients kept might be higher than % expected. % % LARGESTR takes the following flags at the end of the line of input % arguments: % % 'hard' Perform hard thresholding. This is the default. % % 'wiener' Perform empirical Wiener shrinkage. This is in between % soft and hard thresholding. % % 'soft' Perform soft thresholding. % % 'full' Returns the output as a full matrix. This is the default. % % 'sparse' Returns the output as a sparse matrix. % % *Note:* If soft- or Wiener thresholding is selected, one less % coefficient will actually be returned. This is caused by that % coefficient being set to zero. % % % References: % S. Mallat. A wavelet tour of signal processing. Academic Press, San % Diego, CA, 1998. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/largestr.html} %@seealso{largestn} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: OK % REFERENCE: OK if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'thresh'}; [flags,keyvals]=ltfatarghelper({},definput,varargin); if (prod(size(p))~=1 || ~isnumeric(p)) error('p must be a scalar.'); end; wascell=iscell(xi); if wascell [xi,shape]=cell2vec(xi); end; % Determine the size of the array. ss=numel(xi); N=round(ss*p); [xo,Nout]=largestn(xi,N,flags.outclass,flags.iofun); if wascell xo=vec2cell(xo,shape); end; ltfat/inst/sigproc/rampup.m0000664000175000017500000000320212612404256015670 0ustar susnaksusnakfunction outsig=rampup(L,wintype) %-*- texinfo -*- %@deftypefn {Function} rampup %@verbatim %RAMPUP Rising ramp function % Usage: outsig=rampup(L); % % RAMPUP(L) will return a rising ramp function of length L. The % ramp is a sinusoide starting from zero and ending at one. The ramp % is centered such that the first element is always 0 and the last % element is not quite 1, such that the ramp fits with following ones. % % RAMPUP(L,wintype) will use another window for ramping. This may be any % of the window types from FIRWIN. Please see the help on FIRWIN for % more information. The default is to use a piece of the Hann window. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/rampup.html} %@seealso{rampdown, rampsignal, firwin} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(1,2,nargin)) if nargin==1 wintype='hann'; end; win=firwin(wintype,2*L,'inf'); outsig=win(L+1:2*L); ltfat/inst/sigproc/jpeg2rgb.m0000664000175000017500000000414512612404256016075 0ustar susnaksusnakfunction RGB = jpeg2rgb(YCbCr) %-*- texinfo -*- %@deftypefn {Function} jpeg2rgb %@verbatim %JPEG2RGB Coverts from RGB format to YCbCr format % Usage: RGB = jpeg2rgb(YCbCr); % % Input parameters: % YCbCr : 3d data-cube, containing the YCbCr information of the % image % % Output parameters: % RGB : 3d data-cube, containing RGB information of the image % % 'jpeg2rgb(YCbCr)' performs a transformation of the 3d data-cube YCbCr with % dimensions N xM x3, which contains information of % "luminance", "chrominance blue" and "chrominance red". The output % variable RGB is a 3d data-cube of the same size containing information % about the colours "red", "green" and "blue". The output will be of % the uint8 type. % % For more information, see % http://en.wikipedia.org/wiki/YCbCr and http://de.wikipedia.org/wiki/JPEG % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/jpeg2rgb.html} %@seealso{rgb2jpeg} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Markus Faulhuber, February 2013 [s1,s2,s3] = size(YCbCr); YCbCr = double(YCbCr); if s3 ~= 3 disp('Sorry, this routine is for YCbCr of dimension NxMx3 only') return; end RGB(:,:,1) = YCbCr(:,:,1)+1.402*(YCbCr(:,:,3)-128); RGB(:,:,2) = YCbCr(:,:,1)-0.3441*(YCbCr(:,:,2)-128)-0.7141*(YCbCr(:,:,3)-128); RGB(:,:,3) = YCbCr(:,:,1)+1.772*(YCbCr(:,:,2)-128); RGB = uint8(RGB); ltfat/inst/sigproc/long2fir.m0000664000175000017500000000502412612404256016112 0ustar susnaksusnakfunction g=long2fir(g,varargin); %-*- texinfo -*- %@deftypefn {Function} long2fir %@verbatim %LONG2FIR Cut LONG window to FIR % Usage: g=long2fir(g,L); % % LONG2FIR(g,L) will cut the LONG window g to a length L FIR window by % cutting out the middle part. Note that this is a slightly different % behaviour than MIDDLEPAD. % % LONG2FIR(g,L,'wp') or LONG2FIR(g,L,'hp') does the same assuming the % input window is a whole-point even or half-point even window, % respectively. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/long2fir.html} %@seealso{fir2long, middlepad} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; definput.flags.centering = {'unsymmetric','wp','hp'}; definput.keyvals.L = []; definput.keyvals.cutrel = []; [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); W=length(g); if Wmaxval*kv.cutrel; L=W-2*min(abs(find(mask)-L/2)); end; if isempty(L) error(['%s: You must specify a way to shorten the window, either by ' ... 'specifying the length or through a flag.'],upper(mfilename)); end; if flags.do_unsymmetric % No assumption on the symmetry of the window. if rem(L,2)==0 % HPE middlepad works the same way as the FIR cutting (e.g. just % removing middle points) for even values of L. g=middlepad(g,L,'hp'); else % WPE middlepad works the same way as the FIR cutting (e.g. just % removing middle points) for odd values of L. g=middlepad(g,L); end; else if flags.do_wp g=middlepad(g,L); if rem(L,2)==0 g(L/2+1)=0; end; else g=middlepad(g,L,'hp'); if rem(L,2)==1 g(ceil(L/2))=0; end; end; end; ltfat/inst/sigproc/Contents.m0000664000175000017500000000507112612404256016167 0ustar susnaksusnak% LTFAT - Signal processing tools % % Peter L. Soendergaard, 2007 - 2015. % % General % RMS - Root Mean Square norm of signal. % NORMALIZE - Normalize signal by specified norm. % GAINDB - Scale input signal % CRESTFACTOR - Compute the crest factor of a signal. % UQUANT - Simulate uniform quantization. % % Window functions % FIRWIN - FIR windows (Hanning,Hamming,Blackman,...). % FIRKAISER - FIR Kaiser-Bessel window. % FIR2LONG - Extend FIR window to LONG window. % LONG2FIR - Cut LONG window to FIR window. % % Filtering % FIRFILTER - Construct an FIR filter. % BLFILTER - Construct a band-limited filter. % WARPEDBLFILTER - Warped, band-limited filter. % PFILT - Apply filter with periodic boundary conditions. % MAGRESP - Magnitude response plot. % TRANSFERFUNCTION - Compute the transfer function of a filter. % PGRPDELAY - Periodic Group Delay % % Ramping % RAMPUP - Rising ramp. % RAMPDOWN - Falling ramp. % RAMPSIGNAL - Ramp a signal. % % Thresholding methods % THRESH - Coefficient thresholding. % LARGESTR - Keep largest ratio of coefficients. % LARGESTN - Keep N largest coefficients. % DYNLIMIT - Limit the dynamical range. % GROUPTHRESH - Group thresholding. % % Image processing % RGB2JPEG - Convert RGB values to the JPEG colour model % JPEG2RGB - Convert values from the JPEG colour model to RGB % % Tools for OFDM % QAM4 - Quadrature amplitude modulation, order 4 % IQAM4 - Inverse QAM of order 4 % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % % Url: http://ltfat.github.io/doc/sigproc/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/sigproc/rampdown.m0000664000175000017500000000325112612404256016217 0ustar susnaksusnakfunction outsig=rampdown(L,wintype) %-*- texinfo -*- %@deftypefn {Function} rampdown %@verbatim %RAMPDOWN Falling ramp function % Usage: outsig=rampdown(siglen); % % RAMPDOWN(siglen) will return a falling ramp function of length % siglen. The ramp is a sinusoid starting from one and ending at % zero. The ramp is centered such that the first element is always one and % the last element is not quite zero, such that the ramp fits with % following zeros. % % RAMPDOWN(L,wintype) will use another window for ramping. This may be % any of the window types from FIRWIN. Please see the help on FIRWIN % for more information. The default is to use a piece of the Hann window. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/rampdown.html} %@seealso{rampup, rampsignal, firwin} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(1,2,nargin)) if nargin==1 wintype='hann'; end; win=firwin(wintype,2*L,'inf'); outsig=win(1:L); ltfat/inst/sigproc/transferfunction.m0000664000175000017500000000240712612404256017764 0ustar susnaksusnakfunction H=transferfunction(g,L) %-*- texinfo -*- %@deftypefn {Function} transferfunction %@verbatim %TRANSFERFUNCTION The transferfunction of a filter % Usage: H=transferfunction(g,L); % % TRANSFERFUNCTION(g,L) computes the transferfunction of length L* % of the filter defined by g. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/transferfunction.html} %@seealso{pfilt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(2,2,nargin)); [g,info] = comp_fourierwindow(g,L,upper(mfilename)); H=comp_transferfunction(g,L); ltfat/inst/sigproc/magresp.m0000664000175000017500000001175512612404256016036 0ustar susnaksusnakfunction magresp(g,varargin); %-*- texinfo -*- %@deftypefn {Function} magresp %@verbatim %MAGRESP Magnitude response plot of window % Usage: magresp(g,...); % magresp(g,fs,...); % magresp(g,fs,dynrange,....); % % MAGRESP(g) will display the magnitude response of the window on a log % scale (dB); % % MAGRESP(g,fs) does the same for windows that are intended to be used % with signals with sampling rate fs. The x-axis will display Hz. % % MAGRESP(g,fs,dynrange) will limit the dynamic range (see below). % % MAGRESP takes the following parameters at the end of the line of % input arguments. % % 'dynrange',r Limit the dynamic range of the plot to r dB. % % 'fir' Indicate that the input is an FIR window. MAGRESP will % zero-extend the window to display a smooth magnitude % response. % % 'L',L Zero-extend the window to length L. % % 'posfreq' Show only positive frequencies. % % 'nf' Show also negative frequencies % % 'autoposfreq' Show positive frequencies for real-valued signals, % otherwise show also the negative frequencies. This is % the default. % % 'opts',op Pass options onto the plot command. The extra options % op are specified as a cell array % % In addition to these flags, it is possible to speficy any of the % normalization flags from NORMALIZE to normalize the input before % calculation of the magnitude response. Specifying '1' or 'area' will % display a magnitude response which peaks at 0 dB. % % Examples: % --------- % % The following will display the magnitude response of a Hann window % of length 20 normalized to a peak of 0 dB: % % magresp({'hann',20},'1'); % % The following will display the magnitude response of a Gaussian window % of length 100: % % magresp('gauss','L',100) % % The following passes additional options to the plot command to draw % in red: % % magresp({'nuttall11',30},'opts',{'r'}); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/magresp.html} %@seealso{demo_gabfir} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: NA % REFERENCE: NA if nargin<1 error('Too few input arguments.'); end; L=[]; fs=[]; donf=0; % Define initial value for flags and key/value pairs. definput.flags.posfreq={'autoposfreq','posfreq','nf'}; definput.import={'normalize'}; definput.importdefaults={'null'}; definput.keyvals.fs=[]; definput.keyvals.opts={}; definput.keyvals.L=[]; definput.flags.wintype={'notype','fir','long'}; definput.keyvals.dynrange=[]; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); [g,info] = comp_fourierwindow(g,kv.L,'MAGRESP'); do_real=flags.do_posfreq; if flags.do_autoposfreq do_real=info.wasreal; end; if flags.do_fir info.isfir=1; end; if isempty(kv.L) if info.isfir % Choose a strange length, such that we don't accidentically hit all % the zeros in the response. kv.L=info.gl*13+47; else if isempty(info.gl) % Default value kv.L=4177; else kv.L=info.gl; end; end; end; if (isstruct(g)) && isfield(g,'fs') && (~isempty(g.fs)) && (isempty(fs)) fs=g.fs; end; g=pfilt([1;zeros(kv.L-1,1)],g); g=normalize(g,flags.norm); if do_real % Compute spectrum and normalize FF=abs(fftreal(real(g))); % Convert to dB. Add eps to avoid log of zero. FF=20*log10(FF+realmin); xmin=0; else % Compute spectrum and normalize. fftshift to center correctly for plotting. FF=fftshift(abs(fft(g))); % Convert to dB. Add eps to avoid log of zero. FF=20*log10(FF+realmin); xmin=-1; end; ymax=max(FF); if ~isempty(kv.dynrange) ymin=ymax-kv.dynrange; else ymin=min(FF); end; Lplot=length(FF); % Only plot positive frequencies for real-valued signals. if isempty(fs) xrange=linspace(xmin,1,Lplot).'; axisvec=[xmin 1 ymin ymax]; else xrange=linspace(xmin*floor(fs/2),floor(fs/2),Lplot).'; axisvec=[xmin*fs/2 fs/2 ymin ymax]; end; plot(xrange,FF,kv.opts{:}); set(gca,'yscale','linear'); if ymax-ymin~=0 axis(axisvec); end ylabel('Magnitude response (dB)'); if isempty(fs) xlabel('Frequency (normalized) '); else xlabel('Frequency (Hz)'); end; legend('off'); ltfat/inst/sigproc/firfilter.m0000664000175000017500000000722012612404256016356 0ustar susnaksusnakfunction gout=firfilter(name,M,varargin) %-*- texinfo -*- %@deftypefn {Function} firfilter %@verbatim %FIRFILTER Construct an FIR filter % Usage: g=firfilter(name,M); % g=firfilter(name,M,...); % % FIRFILTER(name,M) creates an FIR filter of length M. This is % exactly the same as calling FIRWIN. The name must be one of the % accepted window types of FIRWIN. % % FIRFILTER(name,M,fc) constructs a filter with a centre % frequency of fc measured in normalized frequencies. % % If one of the inputs is a vector, the output will be a cell array % with one entry in the cell array for each element in the vector. If % more input are vectors, they must have the same size and shape and the % the filters will be generated by stepping through the vectors. This % is a quick way to create filters for FILTERBANK and UFILTERBANK. % % FIRFILTER accepts the following optional parameters: % % 'fs',fs If the sampling frequency fs is specified then the length % M is specified in seconds and the centre frequency % fc in Hz. % % 'complex' Make the filter complex valued if the centre frequency % is non-zero. This is the default. % % 'real' Make the filter real-valued if the centre frequency % is non-zero. % % 'delay',d Set the delay of the filter. Default value is zero. % % 'causal' Create a causal filter starting at the first sample. If % specified, this flag overwrites the delay setting. % % It is possible to normalize the impulse response of the filter by % passing any of the flags from the NORMALIZE function. The default % normalization is 'energy'. % % The filter can be used in the PFILT routine to filter a signal, or % in can be placed in a cell-array for use with FILTERBANK or UFILTERBANK. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/firfilter.html} %@seealso{blfilter, firwin, pfilt, filterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % XXX Implement passing additional parameters to firwin % Define initial value for flags and key/value pairs. definput.import={'normalize'}; definput.importdefaults={'energy'}; definput.keyvals.delay=0; definput.keyvals.fc=0; definput.keyvals.fs=[]; definput.flags.delay={'delay','causal'}; definput.flags.real={'complex','real'}; [flags,kv]=ltfatarghelper({'fc'},definput,varargin); [M,kv.fc,kv.delay]=scalardistribute(M,kv.fc,kv.delay); if ~isempty(kv.fs) M=round(M*kv.fs); kv.fc=kv.fc/kv.fs*2; end; Nfilt=numel(M); gout=cell(1,Nfilt); for ii=1:Nfilt g=struct(); if flags.do_causal g.offset=0; smallshift=0; else d=floor(kv.delay); smallshift=d-floor(d); g.offset=d-floor(M/2); end; g.h=fftshift(firwin(name,M(ii),'shift',smallshift(ii),flags.norm)); g.fc=kv.fc(ii); g.realonly=flags.do_real; g.fs=kv.fs; gout{ii}=g; end; if Nfilt==1 gout=g; end; ltfat/inst/sigproc/uquant.m0000664000175000017500000000615112612404256015707 0ustar susnaksusnakfunction xo=uquant(xi,varargin); %-*- texinfo -*- %@deftypefn {Function} uquant %@verbatim %UQUANT Simulate uniform quantization % Usage: x=uquant(x); % x=uquant(x,nbits,xmax,...); % % UQUANT(x,nbits,xmax) simulates the effect of uniform quantization of % x using nbits bits. The output is simply x rounded to 2^{nbits} % different values. The xmax parameters specify the maximal value that % should be quantifiable. % % UQUANT(x,nbits) assumes a maximal quantifiable value of 1. % % UQUANT(x) additionally assumes 8 bit quantization. % % UQUANT takes the following flags at the end of the input arguments: % % 'nbits' Number of bits to use in the quantization. Default is 8. % % 'xmax' Maximal quantifiable value. Default is 1. % % 's' Use signed quantization. This assumes that the signal % has a both positive and negative part. Useful for sound % signals. This is the default. % % 'u' Use unsigned quantization. Assumes the signal is positive. % Negative values are silently rounded to zero. % Useful for images. % % If this function is applied to a complex signal, it will be applied to % the real and imaginary part separately. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/uquant.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard and Bruno Torresani. % TESTING: OK % REFERENCE: OK if nargin<1 error('Too few input parameters.'); end; % Define initial value for flags and key/value pairs. definput.flags.sign={'s','u'}; definput.keyvals.nbits=8; definput.keyvals.xmax=1; [flags,keyvals,nbits,xmax]=ltfatarghelper({'nbits','xmax'},definput,varargin); % ------ handle complex values ------------------ if ~isreal(xi) xo = uquant(real(xi),nbits,xmax,varargin{:}) + ... i*uquant(imag(xi),nbits,xmax,varargin{:}); return end; if nbits<2 error('Must specify at least 2 bits.'); end; % Calculate number of buckets. nbuck=2^nbits; if xmax0); xo=round(xi/bucksize)*bucksize; end; ltfat/inst/sigproc/rms.m0000664000175000017500000000540012612404256015167 0ustar susnaksusnakfunction y = rms(f,varargin) %-*- texinfo -*- %@deftypefn {Function} rms %@verbatim %RMS RMS value of signal % Usage: y = rms(f); % y = rms(f,...); % % RMS(f) computes the RMS (Root Mean Square) value of a finite sampled % signal sampled at a uniform sampling rate. This is a vector norm % equal to the l^2 averaged by the length of the signal. % % If the input is a matrix or ND-array, the RMS is computed along the % first (non-singleton) dimension, and a vector of values is returned. % % The RMS value of a signal x of length N is computed by % % N % rms(f) = 1/sqrt(N) ( sum |f(n)|^2 )^(1/2) % n=1 % % RMS takes the following flags at the end of the line of input % parameters: % % 'ac' Consider only the AC component of the signal (i.e. the mean is % removed). % % 'dim',d Work along specified dimension. The default value of [] % means to work along the first non-singleton one. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/sigproc/rms.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard %% ------ Checking of input parameters --------- if ~isnumeric(f) error('%s: Input must be numerical.',upper(mfilename)); end; if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.dim=[]; definput.flags.mean={'noac','ac'}; [flags,kv]=ltfatarghelper({},definput,varargin); %% ------ Computation -------------------------- % It is better to use 'norm' instead of explicitly summing the squares, as % norm (hopefully) attempts to avoid numerical overflow. [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],kv.dim, ... upper(mfilename)); permutedsize(1)=1; y=zeros(permutedsize); if flags.do_ac for ii=1:W y(1,ii) = norm(f(:,ii)-mean(f(:,ii)))/sqrt(L); end; else for ii=1:W y(1,ii)=norm(f(:,ii))/sqrt(L); end; end; y=assert_sigreshape_post(y,kv.dim,permutedsize,order); ltfat/inst/INSTALL-Matlab0000664000175000017500000001232412612404251014767 0ustar susnaksusnak-------- Compatibility ---------------------------------- The toolbox should work and compile on all versions of Matlab later than 2009b. -------- What can be compiled ------------------------------- - Static backend libraries libltfat.a, libltfatf.a OR Shared backend libraries ltfat.dll, ltfatf.dll on Windows. - Fast Mex-interfaces linking to the backend libs. - Mex-interface PolygonClip using Generic Polygon Clipper Block processing framework (optional) - Mex-interface playrec - Java classes for blockproc GUI ------------------------------------------------------------------------ -------- Compiling backend libs and the MEX interfaces ---------------- ------------------------------------------------------------------------ LTFAT comes with C Mex interfaces to replace (shadow) all computationally intensitive functions in the toolbox. To compile the Mex-interfaces, type "ltfatmex" on the Matlab command prompt. This will compile the backend libraries and all the available mex-functions and also the PoligonClip mex function. If you have downloaded a binary release, everything is already compiled and you should not need to do anything else. The Mex-files and the backend libs links to certain additional libraries, which has to be present at your system. The library management varies between OS see below. The depending libraries are: FFTW3, BLAS, LAPACK --------- Compiling on MacOS ------------------------------------------- The GCC compiler is needed to compile the LTFAT on Mac OS X. When the Xcode Command Line Tools are installed the compilation of the LTFAT should work without any problem. Alternatively, Clang could be used to compile the LTFAT. The BLAS, LAPACK and FFTW libraries are taken directly from the Matlab installation and doesn’t have to be installed separately. --------- Compiling on Microsoft Windows ------------------------------- On Windows, we rely on the MinGW compiler system: - Install MinGW compiler system. The easiest is to download and install TDM-GCC compiler suite from http://tdm-gcc.tdragon.net/download. After installation, ensure that the [MinGW]/bin directory is in the system PATH, where [MinGW] stands for installation directory. - Ensure there is not another MinGW/MSYS toolchain in PATH and, expecially, that there is no sh.exe in PATH. - Manually install binaries of FFTW. The easiest way is to download them from http://www.fftw.org/install/windows.html. Copy all *.dll files to the ltfat/mex directory. This step is necessary since the FFTW lib shipped with Matlab does not contain some of the routines we need. - Run "ltfatmex". BLAS and LAPACK libraries are taken directly from the Matlab installation. Both 32bit and 64bit versions of Matlab are supported. Please use appropriate versions of FFTW and TDM-GCC. --------- Compiling on Linux ------------------------------------ The dependencies are taken directly from Matlab installation and you should not need to install anything. Just typing "ltfatmex" should do the trick. ----------------------------------------------------------------------- --------- Compiling parts for block processing framework -------------- ----------------------------------------------------------------------- Everything should be already compiled if you have downloaded the binary release. In order to get the block processing framework working from the source, one has to compile the MEX-interface playrec and the JAVA GUI classes. This can be done by typing "ltfatmex playrec" and "ltfatmex java". Playrec MEX depends on the PORTAUDIO library, which has to be installed on your system prior running the commands. Compiling JAVA classes requires Java Development Kit to be installed. NOTE: Compiled Java classes (packed in blockproc.jar) are platform independent so compiling it and installing JDK can be avoided by taking the archive from any binary LTFAT package (from ltfat/blockproc/java). --------- Compiling on Mac ------------ It is recommended to compile PortAudio v19 to use with the block processing framework. PortAudio v19 only compiles on OS X version 10.4 or later. Several versions of the Java Development Kit, which is needed to compile the JAVA classes, could be downloaded through the Apple Developer Downloads. --------- Compiling on Microsoft Windows -------------------------- Unfortunately, portaudio on Windows is not distributed in a binary package. One can follow instructions on http://www.portaudio.com/ to compile the library from the source with support for different sound APIs like DirectSound, MME, WASAPI, ASIO. Build a shared (dynamically linked) library (dll) and copy it to the ltfat/thirdparty/Playrec directory. Alternatively, when no such library is found in ltfat/thirdparty/Playrec, ltfatmex attempts to link portaudio library shipped with Matlab. Expect much worse audio performance in this case. --------- Compiling on Linux ------------------------------------ - On Redhat / Fedora, TBD - On Debian / Ubuntu, install the packages 'portaudio19-dev', 'openjdk-7-jdk' Recent versions of Matlab already contain the portaudio lib so there is no need for installing it. To use a custom (or system) portaudio lib, adjust the symbolic link found here >>[matlabroot, filesep, 'bin', filesep, computer('arch')] ltfat/inst/INSTALL0000664000175000017500000000143012612404251013565 0ustar susnaksusnak --------- Running the toolbox -------------------- In Matlab or Octave type "ltfatstart" as the first command from the installation directory. This will set up the correct paths. In Octave you can put this command in your ~/.octaverc file. In Matlab you can put this command in your startup.m file. Your startup file of choice should contain some lines like this: addpath /path/to/ltfat ltfatstart; The ltfatstart command will add all the necessary subdirectories (so please don't add these manually), and it will print a statement telling you which backend you are currently using. -------- Compiling the toolbox ------- ------------ - If you wish to use the toolbox with Matlab, see the file INSTALL-Matlab - If you wish to use the toolbox with Octave, see the file INSTALL-Octave ltfat/inst/gabor/0000775000175000017500000000000012612404256013635 5ustar susnaksusnakltfat/inst/gabor/gabdual.m0000664000175000017500000001341412612404256015415 0ustar susnaksusnakfunction gd=gabdual(g,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} gabdual %@verbatim %GABDUAL Canonical dual window of Gabor frame % Usage: gd=gabdual(g,a,M); % gd=gabdual(g,a,M,L); % gd=gabdual(g,a,M,'lt',lt); % % Input parameters: % g : Gabor window. % a : Length of time shift. % M : Number of channels. % L : Length of window. (optional) % lt : Lattice type (for non-separable lattices). % Output parameters: % gd : Canonical dual window. % % GABDUAL(g,a,M) computes the canonical dual window of the discrete Gabor % frame with window g and parameters a, M. % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of GABWIN for more details. % % If the length of g is equal to M, then the input window is assumed % to be an FIR window. In this case, the canonical dual window also has % length of M. Otherwise the smallest possible transform length is chosen % as the window length. % % GABDUAL(g,a,M,L) returns a window that is the dual window for a system % of length L. Unless the dual window is a FIR window, the dual window % will have length L. % % GABDUAL(g,a,M,'lt',lt) does the same for a non-separable lattice % specified by lt. Please see the help of MATRIX2LATTICETYPE for a % precise description of the parameter lt. % % If a>M then the dual window of the Gabor Riesz sequence with window % g and parameters a and M will be calculated. % % Examples: % --------- % % The following example shows the canonical dual window of the Gaussian % window: % % a=20; % M=30; % L=300; % g=pgauss(L,a*M/L); % gd=gabdual(g,a,M); % % % Simple plot in the time-domain % figure(1); % plot(gd); % % % Frequency domain % figure(2); % magresp(gd,'dynrange',100); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabdual.html} %@seealso{gabtight, gabwin, fir2long, dgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: TEST_DGT % REFERENCE: REF_GABDUAL. %% ---------- Assert correct input. if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.L=[]; definput.keyvals.lt=[0 1]; definput.keyvals.nsalg=0; [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); %% ------ step 2: Verify a, M and L if isempty(L) if isnumeric(g) % Use the window length Ls=length(g); else % Use the smallest possible length Ls=1; end; % ----- step 2b : Verify a, M and get L from the window length ---------- L=dgtlength(Ls,a,M,kv.lt); else % ----- step 2a : Verify a, M and get L Luser=dgtlength(L,a,M,kv.lt); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i. See the help of DGTLENGTH for the requirements.'],... upper(mfilename),L,Luser); end; end; %% ----- step 3 : Determine the window [g,info]=gabwin(g,a,M,L,kv.lt,'callfun',upper(mfilename)); if LM*R % Handle the Riesz basis (dual lattice) case. % Swap a and M, and scale differently. scale=a/M; tmp=a; a=M; M=tmp; end; % -------- Compute ------------- if kv.lt(2)==1 % Rectangular case if (info.gl<=M) && (R==1) % Diagonal of the frame operator d = gabframediag(g,a,M,L); gd=g./long2fir(d,info.gl); else % Long window case % Just in case, otherwise the call is harmless. g=fir2long(g,L); gd=comp_gabdual_long(g,a,M)*scale; end; else % Non-separable case g=fir2long(g,L); if (kv.nsalg==1) || (kv.nsalg==0 && kv.lt(2)<=2) mwin=comp_nonsepwin2multi(g,a,M,kv.lt,L); gdfull=comp_gabdual_long(mwin,a*kv.lt(2),M)*scale; % We need just the first vector gd=gdfull(:,1); else [s0,s1,br] = shearfind(L,a,M,kv.lt); if s1 ~= 0 p1 = comp_pchirp(L,s1); g = p1.*g; end b=L/M; Mr = L/br; ar = a*b/br; if s0 == 0 gd=comp_gabdual_long(g,ar,Mr); else p0=comp_pchirp(L,-s0); g = p0.*fft(g); gd=comp_gabdual_long(g,L/Mr,L/ar)*L; gd = ifft(conj(p0).*gd); end if s1 ~= 0 gd = conj(p1).*gd; end end; if (info.gl<=M) && (R==1) gd=long2fir(gd,M); end; end; % --------- post process result ------- if isreal(g) && (kv.lt(2)==1 || kv.lt(2)==2) % If g is real and the lattice is either rectangular or quinqux, then % the output is known to be real. gd=real(gd); end; if info.wasrow gd=gd.'; end; ltfat/inst/gabor/wildual.m0000664000175000017500000000637612612404256015470 0ustar susnaksusnakfunction [gamma]=wildual(g,M,L) %-*- texinfo -*- %@deftypefn {Function} wildual %@verbatim %WILDUAL Wilson dual window % Usage: gamma=wildual(g,M); % gamma=wildual(g,M,L); % % Input parameters: % g : Gabor window. % M : Number of modulations. % L : Length of window. (optional) % Output parameters: % gamma : Canonical dual window. % % WILDUAL(g,M) returns the dual window of the Wilson or WMDCT basis with % window g, parameter M and length equal to the length of the window g. % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of WILWIN for more details. % % If the length of g is equal to 2*M then the input window is % assumed to be an FIR window. In this case, the dual window also has % length of 2*M. Otherwise the smallest possible transform length is % chosen as the window length. % % WILDUAL(g,M,L) does the same, but now L is used as the length of the % Wilson basis. % % The input window g must be real and whole-point even. If g is not % whole-point even, then reconstruction using the dual window will not be % perfect. For a random window g, the window closest to g that satisfies % these restrictions can be found by : % % g_wpe = real(peven(g)); % % All windows in the toolbox satisfies these restrictions unless % clearly stated otherwise. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/wildual.html} %@seealso{dwilt, wilwin, wmdct, wilorth, isevenfunction} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: TEST_DWILT % REFERENCE: OK error(nargchk(2,3,nargin)); if nargin==2 L=[]; end; %% ------ step 2: Verify a, M and L if isempty(L) if isnumeric(g) % Use the window length Ls=length(g); else % Use the smallest possible length Ls=1; end; % ----- step 2b : Verify M and get L from the window length ---------- L=dwiltlength(Ls,M); else % ----- step 2a : Verify M and get L Luser=dwiltlength(L,M); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i. See the help of DWILTLENGTH for the requirements.'],... upper(mfilename),L,Luser); end; end; %% ----- step 3 : Determine the window [g,info]=wilwin(g,M,L,upper(mfilename)); if L. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin < 4 error('Too few input arguments'); end Ltest=dgtlength(L,a,M,lt); if Ltest~=L error(['%s: Incorrect transform length L=%i specified. '... 'See the help of DGTLENGTH for the requirements.'],... upper(mfilename),L); end; b=L/M; s=b*lt(1)/lt(2); [Labfac,sfac,lenLabfac] = lattfac(a,b,s,L); %lenLabfac = size(Labfac,2); if s/a == round(s/a) if s/a <= b/2 s1 = -s/a; else s1 = b-s/a; end s0 = 0; X = b; elseif ones(1,lenLabfac) == (min(Labfac(3,:),Labfac(4,:)) <= sfac(2,1:end-1)) s0 = 0; [Y,alpha,temp] = gcd(a,b); s1 = -alpha*s/Y; B = prod(Labfac(1,:).^max(Labfac(4,:)-Labfac(3,:),0)); if abs(s1) > B/2 s1 = s1+sign(alpha)*B; end X = b; s1 = mod(s1,b); elseif ones(1,lenLabfac) == (Labfac(3,:) < sfac(2,1:end-1)) s1 = 0; [X,alpha,temp] = gcd(s,b); if alpha < 0 alpha = b/X + alpha; end s0 = mod(alpha*a/X,a*lt(2)); else s1fac = (Labfac(3,:) == sfac(2,1:end-1)).*(Labfac(3,:) < Labfac(4,:)); s1 = prod(Labfac(1,:).^s1fac); if s1*a/b == round(s1*a/b) s1 = 0; else B = prod(Labfac(1,:).^max(Labfac(4,:)-Labfac(3,:),0)); if s1 > B/2 s1 = s1-B; end end [X,alpha,temp] = gcd(s1*a+s,b); if alpha < 0 alpha = b/X + alpha; end tempX = factor(X); tempalph = factor(alpha); Xfac = zeros(1,length(lenLabfac)); alphfac = zeros(1,length(lenLabfac)+1); for kk = 1:lenLabfac Xfac(kk) = sum(tempX == Labfac(1,kk)); tempX = tempX(tempX ~= Labfac(1,kk)); alphfac(kk) = sum(tempalph == Labfac(1,kk)); tempalph = tempalph(tempalph ~= Labfac(1,kk)); end alphfac(lenLabfac+1) = prod(tempalph); s0fac = [Labfac(3,:)+min(alphfac(1:end-1),Labfac(4,:)-Xfac)-Xfac,0]; pwrs = max(Labfac(4,:)-Xfac-alphfac(1:end-1),0); pwrs2 = max(-Labfac(4,:)+Xfac+alphfac(1:end-1),0); K = ceil(alphfac(end).*prod(Labfac(1,:).^(pwrs2-pwrs))-.5); s0fac(end) = K*prod(Labfac(1,:).^pwrs) - alphfac(end).*prod(Labfac(1,:).^pwrs2); s0 = prod(Labfac(1,:).^s0fac(1:end-1))*s0fac(end); if s0*X^2/(a*b) == round(s0*X^2/(a*b)) s0 = 0; end end s0=rem(s0,L); s1=rem(s1,L); end function [Labfac,sfac,lenLabfac] = lattfac(a,b,s,L) tempL = factor(L); tempa = factor(a); if tempa == 1 tempa = []; end tempb = factor(b); if tempb == 1 tempb = []; end Labfac = unique(tempL); lenLabfac = length(Labfac); Labfac = [Labfac;zeros(3,lenLabfac)]; for kk = 1:lenLabfac Labfac(2,kk) = sum(tempL == Labfac(1,kk)); tempL = tempL(tempL ~= Labfac(1,kk)); Labfac(3,kk) = sum(tempa == Labfac(1,kk)); tempa = tempa(tempa ~= Labfac(1,kk)); Labfac(4,kk) = sum(tempb == Labfac(1,kk)); tempb = tempb(tempb ~= Labfac(1,kk)); end if isempty(tempa) == 0 || isempty(tempb) == 0 error('a and b must be divisors of L'); end if s*L/(a*b) ~= round(s*L/(a*b)); error('s must be a multiple of a*b/L'); end temps = factor(s); sfac = [Labfac(1,:),0;zeros(1,lenLabfac+1)]; for kk = 1:lenLabfac sfac(2,kk) = sum(temps == sfac(1,kk)); temps = temps(temps ~= sfac(1,kk)); end sfac(:,lenLabfac+1) = [prod(temps);1]; end ltfat/inst/gabor/idgt.m0000664000175000017500000001331712612404256014747 0ustar susnaksusnakfunction [f,g]=idgt(coef,g,a,varargin) %-*- texinfo -*- %@deftypefn {Function} idgt %@verbatim %IDGT Inverse discrete Gabor transform % Usage: f=idgt(c,g,a); % f=idgt(c,g,a,Ls); % f=idgt(c,g,a,Ls,lt); % % Input parameters: % c : Array of coefficients. % g : Window function. % a : Length of time shift. % Ls : Length of signal. % lt : Lattice type (for non-separable lattices) % Output parameters: % f : Signal. % % IDGT(c,g,a) computes the Gabor expansion of the input coefficients % c with respect to the window g and time shift a. The number of % channels is deduced from the size of the coefficients c. % % IDGT(c,g,a,Ls) does as above but cuts or extends f to length Ls. % % [f,g]=IDGT(...) additionally outputs the window used in the % transform. This is useful if the window was generated from a description % in a string or cell array. % % For perfect reconstruction, the window used must be a dual window of the % one used to generate the coefficients. % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of GABWIN for more details. % % If g is a row vector, then the output will also be a row vector. If c is % 3-dimensional, then IDGT will return a matrix consisting of one column % vector for each of the TF-planes in c. % % Assume that f=IDGT(c,g,a,L) for an array c of size M xN. % Then the following holds for k=0,...,L-1: % % N-1 M-1 % f(l+1) = sum sum c(m+1,n+1)*exp(2*pi*i*m*l/M)*g(l-a*n+1) % n=0 m=0 % % Non-separable lattices: % ----------------------- % % IDGT(c,g,a,'lt',lt) computes the Gabor expansion of the input % coefficients c with respect to the window g, time shift a and % lattice type lt. Please see the help of MATRIX2LATTICETYPE for a % precise description of the parameter lt. % % Assume that f=dgt(c,g,a,L,lt) for an array c of size MxN. % Then the following holds for k=0,...,L-1: % % N-1 M-1 % f(l+1) = sum sum c(m+1,n+1)*exp(2*pi*i*m*l/M)*g(l-a*n+1) % n=0 m=0 % % Additional parameters: % ---------------------- % % IDGT takes the following flags at the end of the line of input % arguments: % % 'freqinv' Compute an IDGT using a frequency-invariant phase. This % is the default convention described above. % % 'timeinv' Compute an IDGT using a time-invariant phase. This % convention is typically used in FIR-filter algorithms. % % Examples: % --------- % % The following example demostrates the basic pricinples for getting % perfect reconstruction (short version): % % f=greasy; % test signal % a=32; % time shift % M=64; % frequency shift % gs={'blackman',128}; % synthesis window % ga={'dual',gs}; % analysis window % % [c,Ls]=dgt(f,ga,a,M); % analysis % % % ... do interesting stuff to c at this point ... % % r=idgt(c,gs,a,Ls); % synthesis % % norm(f-r) % test % % The following example does the same as the previous one, with an % explicit construction of the analysis and synthesis windows: % % f=greasy; % test signal % a=32; % time shift % M=64; % frequency shift % Ls=length(f); % signal length % % % Length of transform to do % L=dgtlength(Ls,a,M); % % % Analysis and synthesis window % gs=firwin('blackman',128); % ga=gabdual(gs,a,M,L); % % c=dgt(f,ga,a,M); % analysis % % % ... do interesting stuff to c at this point ... % % r=idgt(c,gs,a,Ls); % synthesis % % norm(f-r) % test % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/idgt.html} %@seealso{dgt, gabwin, dwilt, gabtight} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: TEST_DGT % REFERENCE: OK % Check input paramameters. if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; if numel(g)==1 error('g must be a vector (you probably forgot to supply the window function as input parameter.)'); end; definput.keyvals.Ls=[]; definput.keyvals.lt=[0 1]; definput.keyvals.dim=[]; definput.flags.phase={'freqinv','timeinv'}; [flags,kv,Ls]=ltfatarghelper({'Ls'},definput,varargin); M=size(coef,1); N=size(coef,2); W=size(coef,3); if ~isnumeric(a) || ~isscalar(a) error('%s: "a" must be a scalar',upper(mfilename)); end; if rem(a,1)~=0 error('%s: "a" must be an integer',upper(mfilename)); end; L=N*a; Ltest=dgtlength(L,a,M,kv.lt); if Ltest~=L error(['%s: Incorrect size of coefficient array or "a" parameter. See ' ... 'the help of DGTLENGTH for the requirements.'], ... upper(mfilename)) end; g=gabwin(g,a,M,L,kv.lt,'callfun',upper(mfilename)); f=comp_idgt(coef,g,a,kv.lt,flags.do_timeinv,0); % Cut or extend f to the correct length, if desired. if ~isempty(Ls) f=postpad(f,Ls); else Ls=L; end; f=comp_sigreshape_post(f,Ls,0,[0; W]); ltfat/inst/gabor/dwiltlength.m0000664000175000017500000000400412612404256016336 0ustar susnaksusnakfunction [L,tfr]=dwiltlength(Ls,M); %-*- texinfo -*- %@deftypefn {Function} dwiltlength %@verbatim %DWILTLENGTH DWILT/WMDCT length from signal % Usage: L=dwiltlength(Ls,M); % % DWILTLENGTH(Ls,M) returns the length of a Wilson / WMDCT system with % M channels system is long enough to expand a signal of length % Ls. Please see the help on DWILT or WMDCT for an explanation of the % parameter M. % % If the returned length is longer than the signal length, the signal will % be zero-padded by DWILT or WMDCT. % % A valid transform length must be divisable by 2M. This % means that the minumal admissable transform length is : % % Lsmallest = 2*M; % % and all valid transform lengths are multipla of Lsmallest* % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/dwiltlength.html} %@seealso{dwilt, wmdct} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(2,2,nargin)); if ~isnumeric(M) || ~isscalar(M) error('%s: M must be a scalar',upper(mfilename)); end; if rem(M,1)~=0 || M<=0 error('%s: M must be a positive integer',upper(mfilename)); end; if ~isnumeric(Ls) error('%s: Ls must be numeric.',upper(mfilename)); end; if ~isscalar(Ls) error('%s: Ls must a scalar.',upper(mfilename)); end; Lsmallest=2*M; L=ceil(Ls/Lsmallest)*Lsmallest; b=L/(2*M); tfr=M/b; ltfat/inst/gabor/plotdgt.m0000664000175000017500000000472412612404256015477 0ustar susnaksusnakfunction coef=plotdgt(coef,a,varargin) %-*- texinfo -*- %@deftypefn {Function} plotdgt %@verbatim %PLOTDGT Plot DGT coefficients % Usage: plotdgt(coef,a); % plotdgt(coef,a,fs); % plotdgt(coef,a,fs,dynrange); % % PLOTDGT(coef,a) plots the Gabor coefficients coef. The coefficients % must have been produced with a time shift of a. % % PLOTDGT(coef,a,fs) does the same assuming a sampling rate of % fs Hz of the original signal. % % PLOTDGT(coef,a,fs,dynrange) additionally limits the dynamic range. % % The figure generated by this function places the zero-frequency in % the center of the y-axis, with positive frequencies above and % negative frequencies below. % % C=PLOTDGT(...) returns the processed image data used in the % plotting. Inputting this data directly to imagesc or similar % functions will create the plot. This is useful for custom % post-processing of the image data. % % PLOTDGT supports all the optional parameters of TFPLOT. Please see % the help of TFPLOT for an exhaustive list. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/plotdgt.html} %@seealso{dgt, tfplot, sgram, plotdgtreal} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: NA % REFERENCE: NA complainif_notenoughargs(nargin,2,mfilename); complainif_notposint(a,'a',mfilename); definput.import={'ltfattranslate','tfplot'}; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); M=size(coef,1); % Move zero frequency to the center and Nyquist frequency to the top. if rem(M,2)==0 coef=circshift(coef,M/2-1); yr=[-1+2/M, 1]; else coef=circshift(coef,(M-1)/2); yr=[-1+2/M, 1-2/M]; end; coef=tfplot(coef,a,yr,'argimport',flags,kv); if nargout<1 clear coef; end ltfat/inst/gabor/gabreassign.m0000664000175000017500000001006012612404256016275 0ustar susnaksusnakfunction sr=gabreassign(s,tgrad,fgrad,a) %-*- texinfo -*- %@deftypefn {Function} gabreassign %@verbatim %GABREASSIGN Reassign time-frequency distribution % Usage: sr = gabreassign(s,tgrad,fgrad,a); % % GABREASSIGN(s,tgrad,fgrad,a) reassigns the values of the positive % time-frequency distribution s using the phase gradient given by fgrad* % and tgrad. The lattice is determined by the time shift a and the % number of channels deduced from the size of s. % % fgrad and tgrad can be obtained by the routine GABPHASEGRAD. % % Examples: % --------- % % The following example demonstrates how to manually create a % reassigned spectrogram. An easier way is to just call RESGRAM: % % % Create reassigned vector field of the bat signal. % a=4; M=100; % [tgrad, fgrad, c] = gabphasegrad('dgt',bat,'gauss',a,M); % % % Perform the actual reassignment % sr = gabreassign(abs(c).^2,tgrad,fgrad,a); % % % Display it using plotdgt % plotdgt(sr,a,143000,50); % % % References: % F. Auger and P. Flandrin. Improving the readability of time-frequency % and time-scale representations by the reassignment method. IEEE Trans. % Signal Process., 43(5):1068-1089, 1995. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabreassign.html} %@seealso{resgram, gabphasegrad} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard, 2008. thisname = upper(mfilename); complainif_notenoughargs(nargin,4,thisname); complainif_notposint(a,'a',thisname); % Basic checks if any(cellfun(@(el) isempty(el) || ~isnumeric(el),{s,tgrad,fgrad})) error('%s: s, tgrad, fgrad must be non-empty and numeric.',... upper(mfilename)); end % Check if argument sizes are consistent if ~isequal(size(s),size(tgrad),size(fgrad)) error('%s: s, tgrad, fgrad must all have the same size.',... upper(mfilename)); end % Check if any argument is not real if any(cellfun(@(el) ~isreal(el),{tgrad,fgrad})) error('%s: tgrad, fgrad must be real.',... upper(mfilename)); end % if any(s<0) % error('%s: s must contain positive numbers only.',... % upper(mfilename)); % end sr=comp_gabreassign(s,tgrad,fgrad,a); % The following code is currently not actived. It calculates the % reassigment using anti-aliasing, but it make very little visual % difference, and it is slower. % [M,N,W]=size(s); % L=N*a; % b=L/M; % freqpos=fftindex(M); % tgrad=bsxfun(@plus,tgrad/b,freqpos); % timepos=fftindex(N); % fgrad=bsxfun(@plus,fgrad/a,timepos.'); % tgrad=round(tgrad); % fgrad=round(fgrad); % tgrad=mod(tgrad,M); % fgrad=mod(fgrad,N); % sr=zeros(M,N,W); % fk=mod(floor(tgrad),M)+1; % ck=mod(ceil(tgrad),M)+1; % fn=mod(floor(fgrad),N)+1; % cn=mod(ceil(fgrad),N)+1; % alpha = fgrad-floor(fgrad); % beta = tgrad-floor(tgrad); % m1 =(1-alpha).*(1-beta).*s; % m2 =(1-alpha).*beta.*s; % m3 =alpha.*(1-beta).*s; % m4 =alpha.*beta.*s; % for ii=1:M % for jj=1:N % sr(fk(ii,jj),fn(ii,jj))=sr(fk(ii,jj),fn(ii,jj))+m1(ii,jj); % sr(ck(ii,jj),fn(ii,jj))=sr(ck(ii,jj),fn(ii,jj))+m2(ii,jj); % sr(fk(ii,jj),cn(ii,jj))=sr(fk(ii,jj),cn(ii,jj))+m3(ii,jj); % sr(ck(ii,jj),cn(ii,jj))=sr(ck(ii,jj),cn(ii,jj))+m4(ii,jj); % end; % end; % end; ltfat/inst/gabor/gabimagepars.m0000664000175000017500000000620012612404256016433 0ustar susnaksusnakfunction [a,M,L,N,Ngood]=gabimagepars(Ls,x,y) %-*- texinfo -*- %@deftypefn {Function} gabimagepars %@verbatim %GABIMAGEPARS Find Gabor parameters to generate image % Usage: [a,M,L,N,Ngood]=gabimagepars(Ls,x,y); % % [a,M,L,N,Ngood]=GABIMAGEPARS(Ls,x,y) will compute a reasonable set of % parameters a, M and L to produce a nice Gabor 'image' of a signal % of length Ls. The approximate number of pixels in the time direction is % given as x and the number of pixels in the frequency direction is given % as y. % % The output parameter Ngood contains the number of time steps (columns % in the coefficients matrix) that contains relevant information. The % columns from Ngood until N only contains information from a % zero-extension of the signal. % % If you use this function to calculate a grid size for analysis of a % real-valued signal (using DGTREAL), please input twice of the desired % size y. This is because DGTREAL only returns half as many % coefficients in the frequency direction as DGT. % % An example: We wish to compute a Gabor image of a real valued signal f* % of length 7500. The image should have an approximate resolution of % 600 x800 pixels: % % [f,fs]=linus; f=f(4001:4000+7500); % [a,M,L,N,Ngood] = gabimagepars(7500,800,2*600); % c = dgtreal(f,'gauss',a,M); % plotdgtreal(c,a,M,fs,90); % % The size of c is (M/2)+1 xN equal to 601 x700 pixels. % % For this function to work properly, the specified numbers for x and % y must not be large prime numbers. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabimagepars.html} %@seealso{dgt, dgtreal, sgram} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if min(x,y)>Ls % Small values case, just do an STFT M=Ls; N=Ls; a=1; Ngood=N; L=Ls; else % Set M and N to be what the user specified M=y; N=x; % Determine the minimum transform size. K=lcm(M,N); % This L is good, but is it not the same as DGT will choose. Llong=ceil(Ls/K)*K; % Fix a from the long L a=Llong/N; % Now we have fixed a and M, so we can use the standard method of choosing L Lsmallest=lcm(a,M); L=ceil(Ls/Lsmallest)*Lsmallest; % We did not get N as desired. N=L/a; % Number of columns to display Ngood=ceil(Ls/a); if M<=a error('LTFAT:noframe',['Cannot generate a frame, the signal is too long as compared ' ... 'to the size of the image. Increase x and y.']); end; end; ltfat/inst/gabor/gabphasegrad.m0000664000175000017500000001261212612404256016425 0ustar susnaksusnakfunction [tgrad,fgrad,c]=gabphasegrad(method,varargin) %-*- texinfo -*- %@deftypefn {Function} gabphasegrad %@verbatim %GABPHASEGRAD Phase gradient of the DGT % Usage: [tgrad,fgrad,c] = gabphasegrad('dgt',f,g,a,M); % [tgrad,fgrad] = gabphasegrad('phase',cphase,a); % [tgrad,fgrad] = gabphasegrad('abs',s,g,a); % % [tgrad,fgrad]=GABPHASEGRAD(method,...) computes the time-frequency % gradient of the phase of the DGT of a signal. The derivative in time % tgrad is the relative instantaneous frequency while the frequency % derivative fgrad is the local group delay. % % tgrad and fgrad measure the deviation from the current time and % frequency, so a value of zero means that the instantaneous frequency is % equal to the center frequency of the considered channel. % % tgrad is scaled such that distances are measured in samples. Similarly, % fgrad is scaled such that the Nyquist frequency (the highest possible % frequency) corresponds to a value of L/2. The absolute time and % frequency positions can be obtained as % % tgradabs = bsxfun(@plus,tgrad,fftindex(M)*L/M); % fgradabs = bsxfun(@plus,fgrad,(0:L/a-1)*a); % % The computation of tgrad and fgrad is inaccurate when the absolute % value of the Gabor coefficients is low. This is due to the fact the the % phase of complex numbers close to the machine precision is almost % random. Therefore, tgrad and fgrad may attain very large random values % when abs(c) is close to zero. % % The computation can be done using four different methods. % % 'dgt' Directly from the signal using algorithm by Auger and % Flandrin. % % 'cross' Directly from the signal using algorithm by Nelson. % % 'phase' From the phase of a DGT of the signal. This is the % classic method used in the phase vocoder. % % 'abs' From the absolute value of the DGT. Currently this % method works only for Gaussian windows. % % [tgrad,fgrad]=GABPHASEGRAD('dgt',f,g,a,M) computes the time-frequency % gradient using a DGT of the signal f. The DGT is computed using the % window g on the lattice specified by the time shift a and the number % of channels M. The algorithm used to perform this calculation computes % several DGTs, and therefore this routine takes the exact same input % parameters as DGT. % % The window g may be specified as in DGT. If the window used is % 'gauss', the computation will be done by a faster algorithm. % % [tgrad,fgrad,c]=GABPHASEGRAD('dgt',f,g,a,M) additionally returns the % Gabor coefficients c, as they are always computed as a byproduct of the % algorithm. % % [tgrad,fgrad]=GABPHASEGRAD('cross',f,g,a,M) does the same as above % but this time using algorithm by Nelson which is based on computing % several DGTs. % % [tgrad,fgrad]=GABPHASEGRAD('phase',cphase,a) computes the phase % gradient from the phase cphase of a DGT of the signal. The original DGT % from which the phase is obtained must have been computed using a % time-shift of a using the default phase convention ('freqinv') e.g.: % % [tgrad,fgrad]=gabphasegrad('phase',angle(dgt(f,g,a,M)),a) % % [tgrad,fgrad]=GABPHASEGRAD('abs',s,g,a) computes the phase gradient % from the spectrogram s. The spectrogram must have been computed using % the window g and time-shift a e.g.: % % [tgrad,fgrad]=gabphasegrad('abs',abs(dgt(f,g,a,M)),g,a) % % [tgrad,fgrad]=GABPHASEGRAD('abs',s,g,a,difforder) uses a centered finite % diffence scheme of order difforder to perform the needed numerical % differentiation. Default is to use a 4th order scheme. % % Currently the 'abs' method only works if the window g is a Gaussian % window specified as a string or cell array. % % % References: % F. Auger and P. Flandrin. Improving the readability of time-frequency % and time-scale representations by the reassignment method. IEEE Trans. % Signal Process., 43(5):1068-1089, 1995. % % E. Chassande-Mottin, I. Daubechies, F. Auger, and P. Flandrin. % Differential reassignment. Signal Processing Letters, IEEE, % 4(10):293-294, 1997. % % J. Flanagan, D. Meinhart, R. Golden, and M. Sondhi. Phase Vocoder. The % Journal of the Acoustical Society of America, 38:939, 1965. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabphasegrad.html} %@seealso{resgram, gabreassign, dgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard, 2008; Zdenek Průša 2015 %error(nargchk(4,6,nargin)); if nargout<3 phased = gabphasederiv({'t','f'},method,varargin{:},'relative'); else [phased,c] = gabphasederiv({'t','f'},method,varargin{:},'relative'); end [tgrad,fgrad] = deal(phased{:}); ltfat/inst/gabor/col2diag.m0000664000175000017500000000337512612404256015507 0ustar susnaksusnakfunction cout=col2diag(cin) %-*- texinfo -*- %@deftypefn {Function} col2diag %@verbatim %COL2DIAG Move columns of a matrix to diagonals % Usage: cout=col2diag(cin); % % COL2DIAG(cin) will rearrange the elements in the square matrix cin so % that columns of cin appears as diagonals. Column number n will appear % as diagonal number -n and L-n, where L is the size of the matrix. % % The function is its own inverse. % % COL2DIAG performs the underlying coordinate transform for spreading % function and Kohn-Nirenberg calculus in the finite, discrete setting. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/col2diag.html} %@seealso{spreadop, spreadfun, tconv} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: TEST_SPREAD % REFERENCE: OK % Assert correct input. error(nargchk(1,1,nargin)); if ndims(cin)~=2 || size(cin,1)~=size(cin,2) error('Input matrix must be square.'); end; if ~isnumeric(cin) error('Input must be numerical.'); end; cout=comp_col2diag(full(cin)); ltfat/inst/gabor/gabmixdual.m0000664000175000017500000000573312612404256016140 0ustar susnaksusnakfunction gamma=gabmixdual(g1,g2,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} gabmixdual %@verbatim %GABMIXDUAL Computes the mixdual of g1 % Usage: gamma=mixdual(g1,g2,a,M) % % Input parameters: % g1 : Window 1 % g2 : Window 2 % a : Length of time shift. % M : Number of modulations. % % Output parameters: % gammaf : Mixdual of window 1. % % GABMIXDUAL(g1,g2,a,M) computes a dual window of g1 from a mix of the % canonical dual windows of g1 and g2. % % % % References: % T. Werther, Y. Eldar, and N. Subbana. Dual Gabor Frames: Theory and % Computational Aspects. IEEE Trans. Signal Process., 53(11), 2005. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabmixdual.html} %@seealso{gabdual, gabprojdual, demo_gabmixdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % Assert correct input. if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.L=[]; definput.keyvals.lt=[0 1]; definput.flags.phase={'freqinv','timeinv'}; [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); %% ------ step 2: Verify a, M and L if isempty(L) % Minimum transform length by default. Ls=1; % Use the window lengths, if any of them are numerical if isnumeric(g1) Ls=max(length(g1),Ls); end; if isnumeric(g2) Ls=max(length(g2),Ls); end; % ----- step 2b : Verify a, M and get L from the window length ---------- L=dgtlength(Ls,a,M,kv.lt); else % ----- step 2a : Verify a, M and get L Luser=dgtlength(L,a,M,kv.lt); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i. See the help of DGTLENGTH for the requirements.'],... upper(mfilename),L,Luser) end; end; [g1,info_g1] = gabwin(g1,a,M,L,kv.lt,'callfun',upper(mfilename)); [g2,info_g2] = gabwin(g2,a,M,L,kv.lt,'callfun',upper(mfilename)); % gm must have the correct length, otherwise dgt will zero-extend it % incorrectly using postpad instead of fir2long g1=fir2long(g1,L); g2=fir2long(g2,L); gf1=comp_wfac(g1,a,M); gf2=comp_wfac(g2,a,M); gammaf=comp_gabmixdual_fac(gf1,gf2,L,a,M); gamma=comp_iwfac(gammaf,L,a,M); ltfat/inst/gabor/gabwin.m0000664000175000017500000001075012612404256015265 0ustar susnaksusnakfunction [g,info] = gabwin(g,a,M,varargin); %-*- texinfo -*- %@deftypefn {Function} gabwin %@verbatim %GABWIN Compute a Gabor window from text or cell array % Usage: [g,info] = gabwin(g,a,M,L); % % [g,info]=GABWIN(g,a,M,L) computes a window that fits well with the % specified number of channels M, time shift a and transform length % L. The window itself is specified by a text description or a cell array % containing additional parameters. % % The window can be specified directly as a vector of numerical % values. In this case, GABWIN only checks assumptions about transform % sizes etc. % % [g,info]=GABWIN(g,a,M) does the same, but the window must be a FIR % window, as the transform length is unspecified. % % GABWIN(g,a,M,L,lt) or GABWIN(g,a,M,[],lt) does as above but for a % non-separable lattice specified by lt. Please see the help of % MATRIX2LATTICETYPE for a precise description of the parameter lt. % % The window can be specified as one of the following text strings: % % 'gauss' Gaussian window fitted to the lattice, % i.e. tfr=a*M/L. % % 'dualgauss' Canonical dual of Gaussian window. % % 'tight' Tight window generated from a Gaussian. % % In these cases, a long window is generated with a length of L. % % It is also possible to specify one of the window names from FIRWIN. In % such a case, GABWIN will generate the specified FIR window with a length % of M. % % The window can also be specified as cell array. The possibilities are: % % {'gauss',...} % Additional parameters are passed to PGAUSS. % % {'dual',...} % Canonical dual window of whatever follows. See the examples below. % % {'tight',...} % Canonical tight window of whatever follows. % % It is also possible to specify one of the window names from FIRWIN as % the first field in the cell array. In this case, the remaining % entries of the cell array are passed directly to FIRWIN. % % Some examples: To compute a Gaussian window of length L fitted for a % system with time-shift a and M channels use: % % g=gabwin('gauss',a,M,L); % % To compute Gaussian window with equal time and frequency support % irrespective of a and M*: % % g=gabwin({'gauss',1},a,M,L); % % To compute the canonical dual of a Gaussian window fitted for a % system with time-shift a and M channels: % % gd=gabwin('gaussdual',a,M,L); % % To compute the canonical tight window of the Gaussian window fitted % for the system: % % gd=gabwin({'tight','gauss'},a,M,L); % % To compute the dual of a Hann window of length 20: % % g=gabwin({'dual',{'hann',20}},a,M,L); % % The structure info provides some information about the computed % window: % % info.gauss % True if the window is a Gaussian. % % info.tfr % Time/frequency support ratio of the window. Set whenever it makes sense. % % info.wasrow % Input was a row window % % info.isfir % Input is an FIR window % % info.isdual % Output is the dual window of the auxiliary window. % % info.istight % Output is known to be a tight window. % % info.auxinfo % Info about auxiliary window. % % info.gl % Length of window. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabwin.html} %@seealso{pgauss, firwin, wilwin} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Assert correct input. if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.L=[]; definput.keyvals.lt=[0 1]; definput.keyvals.callfun='GABWIN'; definput.flags.phase={'freqinv','timeinv'}; [flags,kv,L,lt]=ltfatarghelper({'L','lt'},definput,varargin); [g,info] = comp_window(g,a,M,L,lt,kv.callfun); if (info.isfir) if info.istight %g=g/sqrt(2); end; end; ltfat/inst/gabor/idwilt2.m0000664000175000017500000000560312612404256015375 0ustar susnaksusnakfunction [f]=idwilt2(c,g1,p3,p4) %-*- texinfo -*- %@deftypefn {Function} idwilt2 %@verbatim %IDWILT2 2D Inverse Discrete Wilson transform % Usage: f=idwilt2(c,g); % f=idwilt2(c,g1,g2); % f=idwilt2(c,g1,g2,Ls); % % Input parameters: % c : Array of coefficients. % g,g1,g2 : Window functions. % Ls : Size of reconstructed signal. % Output parameters: % f : Output data, matrix. % % IDWILT2(c,g) calculates a separable two dimensional inverse % discrete Wilson transformation of the input coefficients c using the % window g. The number of channels is deduced from the size of the % coefficients c. % % IDWILT2(c,g1,g2) does the same using the window g1 along the first % dimension, and window g2 along the second dimension. % % IDWILT2(c,g1,g2,Ls) cuts the signal to size Ls after the transformation % is done. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/idwilt2.html} %@seealso{dwilt2, dgt2, wildual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard error(nargchk(2,4,nargin)); Ls=[]; switch nargin case 2 g2=g1; case 3 if prod(size(p3))>2 % Two windows was specified. g2=p3; else g2=g1; Ls=p3; end; case 4 g2=p3; Ls=p4; end; if ndims(c)<4 || ndims(c)>5 error('c must be 4 or 5 dimensional.'); end; M1=size(c,1)/2; N1=size(c,2)*2; M2=size(c,3)/2; N2=size(c,4)*2; W=size(c,5); L1=M1*N1; L2=M2*N2; [g1,info]=wilwin(g1,M1,L1,'IDWILT2'); [g2,info]=wilwin(g2,M2,L2,'IDWILT2'); % If input is real, and window is real, output must be real as well. inputwasreal = (isreal(g1) && isreal(g2) && isreal(c)); if isempty(Ls) Ls(1)=L1; Ls(2)=L2; else Ls=bsxfun(@times,Ls,[1 1]); end; % --- first dimension % Change c to correct shape. c=reshape(c,2*M1,N1/2,L2*W); c=comp_idwilt(c,g1); c=postpad(c,Ls(1)); c=reshape(c,Ls(1),L2,W); c=permute(c,[2,1,3]); % --- second dimension % Change c to correct shape. c=reshape(c,2*M2,N2/2,Ls(1)*W); c=comp_idwilt(c,g2); c=postpad(c,Ls(2)); c=reshape(c,Ls(2),Ls(1),W); f=permute(c,[2,1,3]); % Clean signal if it is known to be real if inputwasreal f=real(f); end; ltfat/inst/gabor/dgtreal.m0000664000175000017500000001233312612404256015437 0ustar susnaksusnakfunction [c,Ls,g]=dgtreal(f,g,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} dgtreal %@verbatim %DGTREAL Discrete Gabor transform for real-valued signals % Usage: c=dgtreal(f,g,a,M); % c=dgtreal(f,g,a,M,L); % [c,Ls]=dgtreal(f,g,a,M); % [c,Ls]=dgtreal(f,g,a,M,L); % % Input parameters: % f : Input data % g : Window function. % a : Length of time shift. % M : Number of modulations. % L : Length of transform to do. % Output parameters: % c : M*N array of coefficients. % Ls : Length of input signal. % % DGTREAL(f,g,a,M) computes the Gabor coefficients (also known as a % windowed Fourier transform) of the real-valued input signal f with % respect to the real-valued window g and parameters a and M. The % output is a vector/matrix in a rectangular layout. % % As opposed to DGT only the coefficients of the positive frequencies % of the output are returned. DGTREAL will refuse to work for complex % valued input signals. % % The length of the transform will be the smallest multiple of a and M* % that is larger than the signal. f will be zero-extended to the length of % the transform. If f is a matrix, the transformation is applied to each % column. The length of the transform done can be obtained by % L=size(c,2)*a. % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of GABWIN for more details. % % DGTREAL(f,g,a,M,L) computes the Gabor coefficients as above, but does % a transform of length L. f will be cut or zero-extended to length L before % the transform is done. % % [c,Ls]=DGTREAL(f,g,a,M) or [c,Ls]=DGTREAL(f,g,a,M,L) additionally % returns the length of the input signal f. This is handy for % reconstruction: % % [c,Ls]=dgtreal(f,g,a,M); % fr=idgtreal(c,gd,a,M,Ls); % % will reconstruct the signal f no matter what the length of f is, provided % that gd is a dual window of g. % % [c,Ls,g]=DGTREAL(...) additionally outputs the window used in the % transform. This is useful if the window was generated from a description % in a string or cell array. % % See the help on DGT for the definition of the discrete Gabor % transform. This routine will return the coefficients for channel % frequencies from 0 to floor(M/2). % % DGTREAL takes the following flags at the end of the line of input % arguments: % % 'freqinv' Compute a DGTREAL using a frequency-invariant phase. This % is the default convention described in the help for DGT. % % 'timeinv' Compute a DGTREAL using a time-invariant phase. This % convention is typically used in filter bank algorithms. % % DGTREAL can be used to manually compute a spectrogram, if you % want full control over the parameters and want to capture the output % : % % f=greasy; % Input test signal % fs=16000; % The sampling rate of this particular test signal % a=10; % Downsampling factor in time % M=200; % Total number of channels, only 101 will be computed % % % Compute the coefficients using a 20 ms long Hann window % c=dgtreal(f,{'hann',0.02*fs'},a,M); % % % Visualize the coefficients as a spectrogram % dynrange=90; % 90 dB dynamical range for the plotting % plotdgtreal(c,a,M,fs,dynrange); % % % References: % K. Groechenig. Foundations of Time-Frequency Analysis. Birkhauser, 2001. % % H. G. Feichtinger and T. Strohmer, editors. Gabor Analysis and % Algorithms. Birkhauser, Boston, 1998. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/dgtreal.html} %@seealso{dgt, idgtreal, gabwin, dwilt, gabtight, plotdgtreal} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: TEST_DGT % REFERENCE: OK % Assert correct input. if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.L=[]; definput.flags.phase={'freqinv','timeinv'}; definput.keyvals.lt=[0 1]; [flags,kv]=ltfatarghelper({'L'},definput,varargin); [f,g,~,Ls] = gabpars_from_windowsignal(f,g,a,M,kv.L); if ~isreal(g) error('%s: The window must be real-valued.',upper(mfilename)); end; if kv.lt(2)>2 error('%s: Only rectangular or quinqux lattices are supported.',... upper(mfilename)); end; if kv.lt(2)~=1 && flags.do_timeinv error(['%s: Time-invariant phase for quinqux lattice is not ',... 'supported.'],upper(mfilename)); end c=comp_dgtreal(f,g,a,M,kv.lt,flags.do_timeinv); ltfat/inst/gabor/rect2wil.m0000664000175000017500000000327412612404256015554 0ustar susnaksusnakfunction cout=rect2wil(cin); %-*- texinfo -*- %@deftypefn {Function} rect2wil %@verbatim %RECT2WIL Inverse of WIL2RECT % Usage: c=rect2wil(c); % % RECT2WIL(c) takes Wilson coefficients processed by WIL2RECT and % puts them back in the compact form used by DWILT and IDWILT. The % coefficients can then be processed by IDWILT. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/rect2wil.html} %@seealso{wil2rect, dwilt, idwilt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK error(nargchk(1,1,nargin)); M=size(cin,1)-1; N=size(cin,2); W=size(cin,3); cout=zeros(2*M,N/2,W,assert_classname(cin)); if rem(M,2)==0 for ii=0:N/2-1 cout(1:M+1 ,ii+1,:)=cin(1:M+1,2*ii+1,:); cout(M+2:2*M,ii+1,:)=cin(2:M,2*ii+2,:); end; else for ii=0:N/2-1 cout(1:M ,ii+1,:)=cin(1:M,2*ii+1,:); cout(M+2:2*M,ii+1,:)=cin(2:M,2*ii+2,:); cout(M+1 ,ii+1,:)=cin(M+1,2*ii+2,:); end; end; ltfat/inst/gabor/dgt2.m0000664000175000017500000000712412612404256014657 0ustar susnaksusnakfunction [c,Ls]=dgt2(f,g1,p3,p4,p5,p6) %-*- texinfo -*- %@deftypefn {Function} dgt2 %@verbatim %DGT2 2-D Discrete Gabor transform % Usage: c=dgt2(f,g,a,M); % c=dgt2(f,g1,g2,[a1,a2],[M1,M2]); % c=dgt2(f,g1,g2,[a1,a2],[M1,M2],[L1,L2]); % [c,Ls]=dgt2(f,g1,g2,[a1,a2],[M1,M2]); % [c,Ls]=dgt2(f,g1,g2,[a1,a2],[M1,M2],[L1,L2]); % % Input parameters: % f : Input data, matrix. % g,g1,g2 : Window functions. % a,a1,a2 : Length of time shifts. % M,M1,M2 : Number of modulations. % L1,L2 : Length of transform to do % % Output parameters: % c : array of coefficients. % Ls : Original size of input matrix. % % DGT2(f,g,a,M) will calculate a separable two-dimensional discrete % Gabor transformation of the input signal f with respect to the window % g and parameters a and M. % % For each dimension, the length of the transform will be the smallest % possible that is larger than the length of the signal along that dimension. % f will be appropriately zero-extended. % % DGT2(f,g,a,M,L) computes a Gabor transform as above, but does % a transform of length L along each dimension. f will be cut or % zero-extended to length L before the transform is done. % % [c,Ls]=DGT2(f,g,a,M) or [c,Ls]=DGT2(f,g,a,M,L) additionally returns % the length of the input signal f. This is handy for reconstruction: % % [c,Ls]=dgt2(f,g,a,M); % fr=idgt2(c,gd,a,Ls); % % will reconstruct the signal f no matter what the size of f is, provided % that gd is a dual window of g. % % DGT2(f,g1,g2,a,M) makes it possible to use a different window along the % two dimensions. % % The parameters a, M, L and Ls can also be vectors of length 2. % In this case the first element will be used for the first dimension % and the second element will be used for the second dimension. % % The output c has 4 or 5 dimensions. The dimensions index the % following properties: % % 1. Number of translation along 1st dimension of input. % % 2. Number of channel along 1st dimension of input % % 3. Number of translation along 2nd dimension of input. % % 4. Number of channel along 2nd dimension of input % % 5. Plane number, corresponds to 3rd dimension of input. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/dgt2.html} %@seealso{dgt, idgt2, gabdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(4,6,nargin)); L=[]; if prod(size(p3))>2 % Two windows was specified. g2=p3; a=p4; M=p5; if nargin==6 L=p6; end; else g2=g1; a=p3; M=p4; if nargin==5 L=p5; end; end; if isempty(L) L1=[]; L2=[]; else L1=L(1); L2=L(2); end; % Expand 'a' and M if necessary to two elements a=bsxfun(@times,a,[1 1]); M=bsxfun(@times,M,[1 1]); Ls=size(f); Ls=Ls(1:2); c=dgt(f,g1,a(1),M(1),L1); c=dgt(c,g2,a(2),M(2),L2,'dim',3); ltfat/inst/gabor/wil2rect.m0000664000175000017500000000353312612404256015552 0ustar susnaksusnakfunction cout=wil2rect(cin); %-*- texinfo -*- %@deftypefn {Function} wil2rect %@verbatim %WIL2RECT Arrange Wilson coefficients in a rectangular layout % Usage: c=wil2rect(c); % % WIL2RECT(c) rearranges the coefficients c in a rectangular shape. The % coefficients must have been obtained from DWILT. After rearrangement % the coefficients are placed correctly on the time/frequency-plane. % % The rearranged array is larger than the input array: it contains % zeros on the spots where the Wilson transform is missing a DC or % Nyquest component. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/wil2rect.html} %@seealso{rect2wil, dwilt, wmdct} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(1,1,nargin)); M=size(cin,1)/2; N=size(cin,2)*2; W=size(cin,3); cout=zeros(M+1,N,W,assert_classname(cin)); if rem(M,2)==0 for ii=0:N/2-1 cout(1:M+1,2*ii+1,:)=cin(1:M+1 ,ii+1,:); cout(2:M,2*ii+2,:) =cin(M+2:2*M,ii+1,:); end; else for ii=0:N/2-1 cout(1:M,2*ii+1,:) =cin(1:M ,ii+1,:); cout(2:M,2*ii+2,:) =cin(M+2:2*M,ii+1,:); cout(M+1,2*ii+2,:) =cin(M+1 ,ii+1,:); end; end; ltfat/inst/gabor/wmdct2.m0000664000175000017500000000653212612404256015221 0ustar susnaksusnakfunction [c,Ls]=wmdct2(f,g1,p3,p4,p5) %-*- texinfo -*- %@deftypefn {Function} wmdct2 %@verbatim %WMDCT2 2D Discrete windowed MDCT transform % Usage: c=wmdct2(f,g,M); % c=wmdct2(f,g1,g2,[M1,M2]); % c=wmdct2(f,g1,g2,[M1,M2],[L1,L2]); % [c,L]=wmdct2(f,g1,g2,[M1,M2],[L1,L2]); % % Input parameters: % f : Input data, matrix. % g,g1,g2 : Window functions. % M,M1,M2 : Number of bands. % L1,L2 : Length of transform to do. % Output parameters: % c : array of coefficients. % Ls : Original size of input matrix. % % WMDCT2(f,g,M) calculates a two dimensional Modified Discrete Cosine % transform of the input signal f using the window g and parameter % M along each dimension. % % For each dimension, the length of the transform will be the smallest % possible that is larger than the length of the signal along that % dimension. f will be appropriately zero-extended. % % All windows must be whole-point even. % % WMDCT2(f,g,M,L) computes a 2D windowed MDCT as above, but does a % transform of length L along each dimension. f will be cut or % zero-extended to length L before the transform is done. % % [c,Ls]=wmdct(f,g,M) or [c,Ls]=wmdct(f,g,M,L) additionally return the % length of the input signal f. This is handy for reconstruction. % % c=WMDCT2(f,g1,g2,M) makes it possible to use different windows along % the two dimensions. % % The parameters L, M and Ls can also be vectors of length 2. In this case % the first element will be used for the first dimension and the second % element will be used for the second dimension. % % The output c has 4 or 5 dimensions. The dimensions index the following % properties: % % 1. Number of translation along 1st dimension of input. % % 2. Number of channel along 1st dimension of input % % 3. Number of translation along 2nd dimension of input. % % 4. Number of channel along 2nd dimension of input % % 5. Plane number, corresponds to 3rd dimension of input. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/wmdct2.html} %@seealso{wmdct, iwmdct2, dgt2, wildual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. error(nargchk(3,5,nargin)); L=[]; if prod(size(p3))>2 % Two windows was specified. g2=p3; M=p4; if nargin==5 L=p5; end; else g2=g1; M=p3; if nargin==4 L=p4; end; end; if isempty(L) L1=[]; L2=[]; else L1=L(1); L2=L(2); end; % Expand M if necessary to two elements M=bsxfun(@times,M,[1 1]); Ls=size(f); Ls=Ls(1:2); c=wmdct(f,g1,M(1),L1); c=wmdct(c,g2,M(2),L2,'dim',3); ltfat/inst/gabor/dgt.m0000664000175000017500000001602112612404256014571 0ustar susnaksusnakfunction [c,Ls,g]=dgt(f,g,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} dgt %@verbatim %DGT Discrete Gabor transform % Usage: c=dgt(f,g,a,M); % c=dgt(f,g,a,M,L); % c=dgt(f,g,a,M,'lt',lt); % [c,Ls]=dgt(...); % % Input parameters: % f : Input data. % g : Window function. % a : Length of time shift. % M : Number of channels. % L : Length of transform to do. % lt : Lattice type (for non-separable lattices). % Output parameters: % c : M xN array of coefficients. % Ls : Length of input signal. % % DGT(f,g,a,M) computes the Gabor coefficients (also known as a windowed % Fourier transform) of the input signal f with respect to the window % g and parameters a and M. The output is a vector/matrix in a % rectangular layout. % % The length of the transform will be the smallest multiple of a and M* % that is larger than the signal. f will be zero-extended to the length of % the transform. If f is a matrix, the transformation is applied to each % column. The length of the transform done can be obtained by % L=size(c,2)*a; % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of GABWIN for more details. % % DGT(f,g,a,M,L) computes the Gabor coefficients as above, but does % a transform of length L. f will be cut or zero-extended to length L before % the transform is done. % % [c,Ls]=DGT(f,g,a,M) or [c,Ls]=DGT(f,g,a,M,L) additionally returns the % length of the input signal f. This is handy for reconstruction: % % [c,Ls]=dgt(f,g,a,M); % fr=idgt(c,gd,a,Ls); % % will reconstruct the signal f no matter what the length of f is, provided % that gd is a dual window of g. % % [c,Ls,g]=DGT(...) additionally outputs the window used in the % transform. This is useful if the window was generated from a description % in a string or cell array. % % The Discrete Gabor Transform is defined as follows: Consider a window g* % and a one-dimensional signal f of length L and define N=L/a. % The output from c=DGT(f,g,a,M) is then given by: % % L-1 % c(m+1,n+1) = sum f(l+1)*conj(g(l-a*n+1))*exp(-2*pi*i*m*l/M), % l=0 % % where m=0,...,M-1 and n=0,...,N-1 and l-an is computed % modulo L. % % Non-separable lattices: % ----------------------- % % DGT(f,g,a,M,'lt',lt) computes the DGT for a non-separable lattice % given by the time-shift a, number of channels M and lattice type % lt. Please see the help of MATRIX2LATTICETYPE for a precise % description of the parameter lt. % % The non-separable discrete Gabor transform is defined as follows: % Consider a window g and a one-dimensional signal f of length L and % define N=L/a. The output from c=DGT(f,g,a,M,L,lt) is then given % by: % % L-1 % c(m+1,n+1) = sum f(l+1)*conj(g(l-a*n+1))*exp(-2*pi*i*(m+w(n))*l/M), % l=0 % % where m=0,...,M-1 and n=0,...,N-1 and l-an are computed % modulo L. The additional offset w is given by w(n)=mod(n*lt_1,lt_2)/lt_2 % in the formula above. % % Additional parameters: % ---------------------- % % DGT takes the following flags at the end of the line of input % arguments: % % 'freqinv' Compute a DGT using a frequency-invariant phase. This % is the default convention described above. % % 'timeinv' Compute a DGT using a time-invariant phase. This % convention is typically used in FIR-filter algorithms. % % Examples: % --------- % % In the following example we create a Hermite function, which is a % complex-valued function with a circular spectrogram, and visualize % the coefficients using both imagesc and PLOTDGT: % % a=10; % M=40; % L=a*M; % h=pherm(L,4); % 4th order hermite function. % c=dgt(h,'gauss',a,M); % % % Simple plot: The squared modulus of the coefficients on % % a linear scale % figure(1); % imagesc(abs(c).^2); % % % Better plot: zero-frequency is displayed in the middle, % % and the coefficients are show on a logarithmic scale. % figure(2); % plotdgt(c,a,'dynrange',50); % % % % References: % K. Groechenig. Foundations of Time-Frequency Analysis. Birkhauser, 2001. % % H. G. Feichtinger and T. Strohmer, editors. Gabor Analysis and % Algorithms. Birkhauser, Boston, 1998. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/dgt.html} %@seealso{idgt, gabwin, dwilt, gabdual, phaselock, demo_dgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: TEST_DGT % REFERENCE: REF_DGT %% ---------- Assert correct input. if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.L=[]; definput.keyvals.lt=[0 1]; definput.keyvals.dim=[]; definput.flags.phase={'freqinv','timeinv'}; [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); %% ----- step 1 : Verify f and determine its length ------- % Change f to correct shape. %[f,Ls,W,wasrow,remembershape]=comp_sigreshape_pre(f,upper(mfilename),0); [f,~,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],kv.dim,upper(mfilename)); %% ------ step 2: Verify a, M and L if isempty(L) % ----- step 2b : Verify a, M and get L from the signal length f---------- L=dgtlength(Ls,a,M,kv.lt); else % ----- step 2a : Verify a, M and get L Luser=dgtlength(L,a,M,kv.lt); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i. See the help of DGTLENGTH for the requirements.'],... upper(mfilename),L,Luser); end; end; %% ----- step 3 : Determine the window [g,info]=gabwin(g,a,M,L,kv.lt,'callfun',upper(mfilename)); if L2) && size(c,1)==1 c = squeeze(c); end ltfat/inst/gabor/gabfirdual.m0000664000175000017500000001321512612404256016115 0ustar susnaksusnakfunction [gd,relres,iter]=gabfirdual(Ldual,g,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} gabfirdual %@verbatim %GABFIRDUAL Compute FIR dual window % Usage: gd=gabfirdual(Ldual,g,a,M); % gd=gabfirdual(Ldual,g,a,M, varagin); % % Input parameters: % Ldual : Length of dual window % g : Window function % a : Time shift % M : Number of Channels % alpha1 : Weight of l^1-norm in the time domain % alpha2 : Weight of l^1-norm in the freq. domain % % Output parameters: % gd : Dual window % % GABFIRDUAL(Ldual,g,a,M) computes an FIR window gd which is an % approximate dual window of the Gabor system defined by g, a and % M. The FIR dual window will be supported on Ldual samples. % % This function solve a convex optimization problem that can be written % as: % % gd = argmin_x || alpha x||_1 + || beta Fx||_1 % % + || omega (x -g_l) ||_2^2 + delta || x ||_S0 % % + gamma || nabla F x ||_2^2 + mu || nabla x ||_2^2 % % such that x is a dual windows of g % % *Note**: This function require the unlocbox. You can download it at % http://unlocbox.sourceforge.net % % The function uses an iterative algorithm to compute the approximate % FIR dual. The algorithm can be controlled by the following flags: % % 'alpha',alpha Weight in time. If it is a scalar, it represent the % weights of the entire L1 function in time. If it is a % vector, it is the associated weight assotiated to each % component of the L1 norm (length: Ldual). % Default value is alpha=0. % *Warning**: this value should not be too big in order to % avoid the the L1 norm proximal operator kill the signal. % No L1-time constraint: alpha=0 % % 'beta',beta Weight in frequency. If it is a scalar, it represent the % weights of the entire L1 function in frequency. If it is a % vector, it is the associated weight assotiated to each % component of the L1 norm in frequency. (length: Ldual). % Default value is beta=0. % *Warning**: this value should not be too big in order to % avoid the the L1 norm proximal operator kill the signal. % No L1-frequency constraint: beta=0 % % 'omega',omega Weight in time of the L2-norm. If it is a scalar, it represent the % weights of the entire L2 function in time. If it is a % vector, it is the associated weight assotiated to each % component of the L2 norm (length: Ldual). % Default value is omega=0. % No L2-time constraint: omega=0 % % 'glike',g_l g_l is a windows in time. The algorithm try to shape % the dual window like g_l. Normalization of g_l is done % automatically. To use option omega should be different % from 0. By default g_d=0. % % 'mu',mu Weight of the smooth constraint Default value is 1. % No smooth constraint: mu=0 % % 'gamma',gamma Weight of the smooth constraint in frequency. Default value is 1. % No smooth constraint: gamma=0 % % 'delta',delta Weight of the S0-norm. Default value is 0. % No S0-norm: delta=0 % % 'dual' Look for a dual windows (default) % % 'painless' Construct a starting guess using a painless-case % approximation. This is the default % % 'zero' Choose a starting guess of zero. % % 'rand' Choose a random starting phase. % % 'tol',t Stop if relative residual error is less than the % specified tolerance. % % 'maxit',n Do at most n iterations. default 200 % % 'print' Display the progress. % % 'debug' Display all the progresses. % % 'quiet' Don't print anything, this is the default. % % 'fast' Fast algorithm, this is the default. % % 'slow' Safer algorithm, you can try this if the fast algorithm % is not working. Before using this, try to iterate more. % % 'printstep',p If 'print' is specified, then print every p'th % iteration. Default value is p=10; % % 'hardconstraint' Force the projection at the end (default) % % 'softconstaint' Do not force the projection at the end % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabfirdual.html} %@seealso{gaboptdual, gabdual, gabtight, gabfirtight, gaboptdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Nathanael Perraudin % Date : 18 Feb 2014 if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end; % l=length(varargin); % varargin(l+1)=cellstr('support'); % varargin(l+2)=num2cell(Ldual); [gd,relres,iter]=gabconvexopt(g,a,M,varargin{:}, 'support',Ldual); ltfat/inst/gabor/plotdgtreal.m0000664000175000017500000000437012612404256016340 0ustar susnaksusnakfunction coef=plotdgtreal(coef,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} plotdgtreal %@verbatim %PLOTDGTREAL Plot DGTREAL coefficients % Usage: plotdgtreal(coef,a,M); % plotdgtreal(coef,a,M,fs); % plotdgtreal(coef,a,M,fs,dynrange); % % PLOTDGTREAL(coef,a,M) plots Gabor coefficient from DGTREAL. The % parameters a and M must match those from the call to DGTREAL. % % PLOTDGTREAL(coef,a,M,fs) does the same assuming a sampling rate of fs* % Hz of the original signal. % % PLOTDGTREAL(coef,a,M,fs,dynrange) additionally limits the dynamic % range. % % C=PLOTDGTREAL(...) returns the processed image data used in the % plotting. Inputting this data directly to imagesc or similar % functions will create the plot. This is usefull for custom % post-processing of the image data. % % PLOTDGTREAL supports all the optional parameters of TFPLOT. Please % see the help of TFPLOT for an exhaustive list. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/plotdgtreal.html} %@seealso{dgtreal, tfplot, sgram, plotdgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: NA % REFERENCE: NA complainif_notenoughargs(nargin,3,mfilename); complainif_notposint(a,'a',mfilename); complainif_notposint(M,'M',mfilename); definput.import={'ltfattranslate','tfplot'}; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); if rem(M,2)==0 yr=[0,1]; else yr=[0,1-2/M]; end; coef=tfplot(coef,a,yr,'argimport',flags,kv); if nargout<1 clear coef; end ltfat/inst/gabor/izak.m0000664000175000017500000000354112612404256014754 0ustar susnaksusnakfunction f=izak(c); %-*- texinfo -*- %@deftypefn {Function} izak %@verbatim %IZAK Inverse Zak transform % Usage: f=izak(c); % % IZAK(c) computes the inverse Zak transform of c. The parameter of % the Zak transform is deduced from the size of c. % % % References: % A. J. E. M. Janssen. Duality and biorthogonality for discrete-time % Weyl-Heisenberg frames. Unclassified report, Philips Electronics, % 002/94. % % H. Boelcskei and F. Hlawatsch. Discrete Zak transforms, polyphase % transforms, and applications. IEEE Trans. Signal Process., % 45(4):851-866, april 1997. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/izak.html} %@seealso{zak} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_ZAK % REFERENCE: OK error(nargchk(1,1,nargin)); a=size(c,1); N=size(c,2); W=size(c,3); L=a*N; % Create output matrix. f=zeros(L,W,assert_classname(c)); for ii=1:W % Iterate through third dimension of c. % We use a normalized DFT, as this gives the correct normalization % of the Zak transform. f(:,ii)=reshape(idft(c(:,:,ii),[],2),L,1); end; ltfat/inst/gabor/isgramreal.m0000664000175000017500000001732612612404256016152 0ustar susnaksusnakfunction [f,relres,iter]=isgramreal(s,g,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} isgramreal %@verbatim %ISGRAMREAL Spectrogram inversion (real signal) % Usage: f=isgramreal(s,g,a,M); % f=isgramreal(s,g,a,M,Ls); % [f,relres,iter]=isgramreal(...); % % Input parameters: % c : Array of coefficients. % g : Window function. % a : Length of time shift. % M : Number of channels. % Ls : length of signal. % Output parameters: % f : Signal. % relres : Vector of residuals. % iter : Number of iterations done. % % ISGRAMREAL(s,g,a,M) attempts to invert a spectrogram computed by : % % s = abs(dgtreal(f,g,a,M)).^2; % % by an iterative method. % % ISGRAMREAL(s,g,a,M,Ls) does as above but cuts or extends f to length Ls. % % If the phase of the spectrogram is known, it is much better to use % DGTREAL % % f,relres,iter]=ISGRAMREAL(...) additionally returns the residuals in a % vector relres and the number of iteration steps done. % % Generally, if the spectrogram has not been modified, the iterative % algorithm will converge slowly to the correct result. If the % spectrogram has been modified, the algorithm is not guaranteed to % converge at all. % % ISGRAMREAL takes the following parameters at the end of the line of % input arguments: % % 'lt',lt Specify the lattice type. See the help on % MATRIX2LATTICETYPE. Only the rectangular or quinqux % lattices can be specified. % % 'zero' Choose a starting phase of zero. This is the default % % 'rand' Choose a random starting phase. % % 'int' Construct a starting phase by integration. Only works % for Gaussian windows. % % 'griflim' Use the Griffin-Lim iterative method, this is the % default. % % 'bfgs' Use the limited-memory Broyden Fletcher Goldfarb % Shanno (BFGS) method. % % 'tol',t Stop if relative residual error is less than the specified tolerance. % % 'maxit',n Do at most n iterations. % % 'print' Display the progress. % % 'quiet' Don't print anything, this is the default. % % 'printstep',p % If 'print' is specified, then print every p'th % iteration. Default value is p=10. % % The BFGS method makes use of the minFunc software. To use the BFGS method, % please install the minFunc software from: % http://www.cs.ubc.ca/~schmidtm/Software/minFunc.html. % % % References: % R. Decorsiere and P. L. Soendergaard. Modulation filtering using an % optimization approach to spectrogram reconstruction. In Proceedings of % the Forum Acousticum, 2011. % % D. Griffin and J. Lim. Signal estimation from modified short-time % Fourier transform. IEEE Trans. Acoust. Speech Signal Process., % 32(2):236-243, 1984. % % D. Liu and J. Nocedal. On the limited memory BFGS method for large % scale optimization. Mathematical programming, 45(1):503-528, 1989. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/isgramreal.html} %@seealso{dgtreal, idgtreal} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Remi Decorsiere and Peter L. Soendergaard. % REFERENCE: OK % Check input paramameters. if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; if numel(g)==1 error('g must be a vector (you probably forgot to supply the window function as input parameter.)'); end; definput.keyvals.Ls=[]; definput.keyvals.lt=[0 1]; definput.keyvals.tol=1e-6; definput.keyvals.maxit=100; definput.keyvals.printstep=10; definput.flags.method={'griflim','bfgs'}; definput.flags.print={'print','quiet'}; definput.flags.startphase={'zero','rand','int'}; [flags,kv,Ls]=ltfatarghelper({'Ls','tol','maxit'},definput,varargin); N=size(s,2); W=size(s,3); % Make a dummy call to test the input parameters Lsmallest=dgtlength(1,a,M,kv.lt); M2=floor(M/2)+1; if M2~=size(s,1) error('Mismatch between the specified number of channels and the size of the input coefficients.'); end; L=N*a; if rem(L,Lsmallest)>0 error('%s: Invalid size of coefficient array.',upper(mfilename)); end; %% ----- step 3 : Determine the window [g,info]=gabwin(g,a,M,L,kv.lt,'callfun',upper(mfilename)); if L1 error(['%s: The integration initilization is not implemented for ' ... 'non-sep lattices.'],upper(mfilename)); end; s2=zeros(M,N); s2(1:M2,:)=s; if rem(M,2)==0 s2(M2+1:M,:)=flipud(s(2:end-1,:)); else s2(M2+1:M,:)=flipud(s(2:end)); end; c=constructphase(s2,g,a); c=c(1:M2,:); end; gd = gabdual(g,a,M); % For normalization purposes norm_s=norm(s,'fro'); relres=zeros(kv.maxit,1); if flags.do_griflim for iter=1:kv.maxit f=comp_idgtreal(c,gd,a,M,kv.lt,0); c=comp_dgtreal(f,g,a,M,kv.lt,0); relres(iter)=norm(abs(c).^2-s,'fro')/norm_s; c=sqrt_s.*exp(1i*angle(c)); if flags.do_print if mod(iter,kv.printstep)==0 fprintf('ISGRAMREAL: Iteration %i, residual = %f.\n',iter,relres(iter)); end; end; if relres(iter). % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard %% ------ Checking of input parameters --------- if ~isnumeric(f) error('%s: Input must be numerical.',upper(mfilename)); end; if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; definput.flags.rel={'norel','rel'}; definput.keyvals.dim=[]; [flags,kv]=ltfatarghelper({},definput,varargin); %% ------ Computation -------------------------- [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],kv.dim, ... upper(mfilename)); permutedsize(1)=1; y=zeros(permutedsize,assert_classname(f)); g=pgauss(L); for ii=1:W % Compute the STFT by the simple algorithm and sum each column of the % STFT as they are computed, to avoid L^2 memory usage. for jj=0:L-1 y(1,ii)=y(1,ii)+sum(abs(fft(f(:,ii).*circshift(g,jj)))); end; if flags.do_rel y(1,ii)=y(1,ii)/norm(f(:,ii)); end; end; y=y/L; y=assert_sigreshape_post(y,dim,permutedsize,order); ltfat/inst/gabor/phaseunlock.m0000664000175000017500000000461612612404256016336 0ustar susnaksusnakfunction c = phaseunlock(c,a,varargin) %-*- texinfo -*- %@deftypefn {Function} phaseunlock %@verbatim %PHASEUNLOCK Undo phase lock of Gabor coefficients % Usage: c=phaseunlock(c,a); % % PHASEUNLOCK(c,a) removes phase locking from the Gabor coefficients c. % The coefficient must have been obtained from a DGT with parameter a. % % Phase locking the coefficients modifies them so as if they were obtained % from a time-invariant Gabor system. A filter bank produces phase locked % coefficients. % % % References: % M. Puckette. Phase-locked vocoder. Applications of Signal Processing to % Audio and Acoustics, 1995., IEEE ASSP Workshop on, pages 222 -225, % 1995. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/phaseunlock.html} %@seealso{dgt, phaselock, symphase} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter Balazs, Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.lt=[0 1]; [flags,kv]=ltfatarghelper({},definput,varargin); if (prod(size(a))~=1 || ~isnumeric(a)) error('a must be a scalar'); end; if rem(a,1)~=0 error('a must be an integer'); end; M=size(c,1); N=size(c,2); L=N*a; b=L/M; if rem(b,1)~=0 error('Lattice error. The a parameter is probably incorrect.'); end; TimeInd = (0:(N-1))*a; FreqInd = (0:(M-1)); phase = FreqInd'*TimeInd; phase = mod(phase,M); phase = exp(-2*1i*pi*phase/M); if kv.lt(1)>0 % truly non-separable case for n=0:(N-1) w = mod(n*kv.lt(1)/kv.lt(2),1); phase(:,n+1) = phase(:,n+1)*exp(-2*pi*1i*a*w*n/M); end end % Handle multisignals c=bsxfun(@times,c,phase); ltfat/inst/gabor/wilorth.m0000664000175000017500000000770312612404256015512 0ustar susnaksusnakfunction [gt]=wilorth(p1,p2,p3) %-*- texinfo -*- %@deftypefn {Function} wilorth %@verbatim %WILORTH Wilson orthonormal window % Usage: gt=wilorth(M,L); % gt=wilorth(g,M); % gt=wilorth(g,M,L); % % Input parameters: % g : Auxiliary window window function (optional). % M : Number of modulations. % L : Length of window (optional). % Output parameters: % gt : Window generating an orthonormal Wilson basis. % % WILORTH(M,L) computes a nice window of length L generating an % orthonormal Wilson or WMDCT basis with M frequency bands for signals % of length L. % % WILORTH(g,M) computes a window generating an orthonomal basis from the % window g and number of channels M. % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of WILWIN for more details. % % If the length of g is equal to 2xM, then the input window is % assumed to be a FIR window. In this case, the orthonormal window also % has length of 2xM. Otherwise the smallest possible transform % length is chosen as the window length. % % WILORTH(g,M,L) pads or truncates g to length L before calculating % the orthonormal window. The output will also be of length L. % % The input window g must be real whole-point even. If g is not % whole-point even, the computed window will not generate an orthonormal % system (i.e. reconstruction will not be perfect). For a random window % g, the window closest to g that satisfies these restrictions can be % found by : % % g_wpe = real(peven(g)); % % All Gabor windows in the toolbox satisfies these restrictions unless % clearly stated otherwise. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/wilorth.html} %@seealso{dwilt, wmdct, wildual, isevenfunction} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_DWILT TEST_WMDCT % REFERENCE: OK error(nargchk(2,3,nargin)); wasrow=0; % Detect which parameters was entered, and do simple transformations. if nargin == 3 g=p1; M=p2; L=p3; if size(g,2)>1 if size(g,1)>1 error('g must be a vector'); else % g was a row vector. wasrow=1; g=g(:); end; end; assert_squarelat(M,M,1,'WILORTH',0); [b,N,L]=assert_L(L,length(g),L,M,2*M,'WILORTH'); % fir2long is now safe. g=fir2long(g,L); else if numel(p1)>1 % First parameter is a vector. g=p1; M=p2; if size(g,2)>1 if size(g,1)>1 error('g must be a vector'); else % g was a row vector. wasrow=1; g=g(:); end; end; assert_squarelat(M,2*M,1,'WILORTH',0); [b,N,L]=assert_L(length(g),length(g),[],M,2*M,'WILORTH'); else M=p1; L=p2; assert_squarelat(M,M,1,'WILORTH',0); [b,N,L]=assert_L(L,L,L,M,2*M,'WILORTH'); a=M; b=L/(2*M); % Create default window, a Gaussian. g=comp_pgauss(L,a/b,0,0); end; end; a=M; b=L/(2*M); % Multiply by sqrt(2), because comp_gabtight will return a normalized % tight frame, i.e. the framebounds are A=B=1 instead of A=B=2. This means % that the returned gt only has norm=.701 and not norm=1. gt=sqrt(2)*comp_gabtight_long(g,a,2*M); if wasrow gt=gt.'; end; ltfat/inst/gabor/gabframediag.m0000664000175000017500000000501012612404256016400 0ustar susnaksusnakfunction d=gabframediag(g,a,M,L,varargin) %-*- texinfo -*- %@deftypefn {Function} gabframediag %@verbatim %GABFRAMEDIAG Diagonal of Gabor frame operator % Usage: d=gabframediag(g,a,M,L); % d=gabframediag(g,a,M,L,'lt',lt); % % Input parameters: % g : Window function. % a : Length of time shift. % M : Number of channels. % L : Length of transform to do. % lt : Lattice type (for non-separable lattices). % Output parameters: % d : Diagonal stored as a column vector % % GABFRAMEDIAG(g,a,M,L) computes the diagonal of the Gabor frame operator % with respect to the window g and parameters a and M. The % diagonal is stored a as column vector of length L. % % The diagonal of the frame operator can for instance be used as a % preconditioner. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabframediag.html} %@seealso{dgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.lt=[0 1]; [flags,kv]=ltfatarghelper({},definput,varargin); % ----- step 2a : Verify a, M and get L Luser=dgtlength(L,a,M,kv.lt); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i. See the help of DGTLENGTH for the requirements.'],... upper(mfilename),L,Luser); end; %% ----- step 3 : Determine the window [g,info]=gabwin(g,a,M,L,kv.lt,'callfun',upper(mfilename)); if L. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_WMDCT % REFERENCE: REF_WMDCT if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.L=[]; definput.keyvals.dim=[]; [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); %% ----- step 1 : Verify f and determine its length ------- % Change f to correct shape. [f,dummy,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],kv.dim,upper(mfilename)); %% ------ step 2: Verify a, M and L if isempty(L) % ----- step 2b : Verify a, M and get L from the signal length f---------- L=dwiltlength(Ls,M); else % ----- step 2a : Verify a, M and get L Luser=dwiltlength(L,M); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i. See the help of DWILTLENGTH for the requirements.'],... upper(mfilename),L,Luser); end; end; %% ----- step 3 : Determine the window [g,info]=wilwin(g,M,L,upper(mfilename)); if L. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lmin=dgtlength(1,a,M,lt); if lt(1)==0 Lsmallest=Lmin; else c=gcd(a,M); % if lt(1)>0 then ks is everything in c which is relatively prime to % lt(2) kmax=c; while 1 z=gcd(kmax,lt(2)); if z==1 break; end; kmax=kmax/z; end; Lsmallest=Lmin*c./kmax; end; L=ceil(Ls/Lsmallest)*Lsmallest; ltfat/inst/gabor/gabphasederiv.m0000664000175000017500000010074512612404256016626 0ustar susnaksusnakfunction [phased,c]=gabphasederiv(type,method,varargin) %-*- texinfo -*- %@deftypefn {Function} gabphasederiv %@verbatim %GABPHASEDERIV DGT phase derivatives % Usage: [phased,c] = gabphasederiv(dflag,'dgt',f,g,a,M); % phased = gabphasederiv(dflag,'cross',f,g,a,M) % phased = gabphasederiv(dflag,'phase',cphase,a,difforder); % phased = gabphasederiv(dflag,'abs',s,g,a); % [{phased1,phased2,...}] = gabphasederiv({dflag1,dflag2,...},...); % [{phased1,phased2,...},c] = gabphasederiv({dflag1,dflag2,...},'dgt',...); % % phased=GABPHASEDERIV(dflag,method,...) computes the time-frequency % derivative dflag of the phase of the DGT of a signal using algorithm % method. % % The following strings can be used in place of dflag: % % 't' First phase derivative in time. % % 'f' First phase derivative in frequency. % % 'tt' Second phase derivative in time. % % 'ff' Second phase derivative in frequency. % % 'tf' or 'ft' Second order mixed phase derivative. % % phased is scaled such that (possibly non-integer) distances are measured % in samples. Similarly, the frequencies are scaled such that the Nyquist % frequency (the highest possible frequency) corresponds to a value of L/2. % % The computation of phased is inaccurate when the absolute % value of the Gabor coefficients is low. This is due to the fact the the % phase of complex numbers close to the machine precision is almost % random. Therefore, phased attain very large random values when abs(c) % is close to zero. % % The phase derivative computation can be done using four different methods % depending on the string method: % % 'dgt' Directly from the signal using algorithm by Auger and % Flandrin. % % 'cross' Directly from the signal using algorithm by Nelson. % % 'phase' From the unwrapped phase of a DGT of the signal using a % finite differences scheme. This is the classic method used % in the phase vocoder. % % 'abs' From the absolute value of the DGT exploiting explicit % dependency between partial derivatives of log-magnitudes and % phase. % Currently this method works only for Gaussian windows. % % phased=GABPHASEDERIV(dflag,'dgt',f,g,a,M) computes the time-frequency % derivative using a DGT of the signal f. The DGT is computed using the % window g on the lattice specified by the time shift a and the number % of channels M. The algorithm used to perform this calculation computes % several DGTs, and therefore this routine takes the exact same input % parameters as DGT. % % [phased,c]=GABPHASEDERIV(dflag,'dgt',f,g,a,M) additionally returns % the Gabor coefficients c, as they are always computed as a byproduct % of the algorithm. % % phased=GABPHASEDERIV(dflag,'cross',f,g,a,M) does the same as above % but this time using algorithm by Nelson which is based on computing % several DGTs. % % phased=GABPHASEDERIV(dflag,'phase',cphase,a) computes the phase % derivative from the phase cphase of a DGT of the signal. The original DGT % from which the phase is obtained must have been computed using a % time-shift of a using the default phase convention ('freqinv') e.g.: % % phased=gabphasederiv(dflag,'phase',angle(dgt(f,g,a,M)),a) % % phased=GABPHASEDERIV(dflag,'abs',s,g,a) computes the phase derivative % from the absolute values of DGT coefficients s. The spectrogram must have % been computed using the window g and time-shift a e.g.: % % phased=gabphasederiv(dflag,'abs',abs(dgt(f,g,a,M)),g,a) % % Currently the 'abs' method only works if the window g is a Gaussian % window specified as a string or a cell array. % % phased=GABPHASEDERIV(dflag,'abs',s,g,a,difforder) uses a centered finite % diffence scheme of order difforder to perform the needed numerical % differentiation. Default is to use a 4th order scheme. % % Phase conventions % ----------------- % % First derivatives in either direction are subject to phase convention. % The following additional flags define the phase convention the original % phase would have had: % % 'freqinv' Derivatives reflect the frequency-invariant phase of dgt. % This is the default. % % 'timeinv' Derivatives reflect the time-invariant phase of dgt. % % 'symphase' Derivatives reflect the symmetric phase of dgt. % % 'relative' This is a combination of 'freqinv' and 'timeinv'. % It uses 'timeinv' for derivatives along frequency and % and 'freqinv' for derivatives along time and for the % mixed derivative. % This is usefull for the reassignment functions. % % Please see ltfatnote042 for the description of relations between the % phase derivatives with differnet phase conventions. Note that for the % 'relative' convention, the following holds: % % gabphasederiv('t',...,'relative') == gabphasederiv('t',...,'freqinv') % gabphasederiv('f',...,'relative') == -gabphasederiv('f',...,'timeinv') % gabphasederiv('tt',...,'relative') == gabphasederiv('tt',...) % gabphasederiv('ff',...,'relative') == -gabphasederiv('ff',...) % gabphasederiv('tf',...,'relative') == gabphasederiv('tf',...,'freqinv') % % Several derivatives at once % --------------------------- % % phasedcell=GABPHASEDERIV({dflag1,dflag2,...},...) computes several % phase derivatives at once while reusing some temporary computations thus % saving computation time. % {dflag1,dflag2,...} is a cell array of the derivative flags and % cell elements of the returned phasedcell contain the corresponding % derivatives i.e.: % % [pderiv1,pderiv2,...] = deal(phasedcell{:}); % % [phasedcell,c]=GABPHASEDERIV({dflag1,dflag2,...},'dgt',...) works the % same as above but in addition returns coefficients c which are the % byproduct of the 'dgt' method. % % Other flags and parameters work as before. % % % References: % F. Auger and P. Flandrin. Improving the readability of time-frequency % and time-scale representations by the reassignment method. IEEE Trans. % Signal Process., 43(5):1068-1089, 1995. % % E. Chassande-Mottin, I. Daubechies, F. Auger, and P. Flandrin. % Differential reassignment. Signal Processing Letters, IEEE, % 4(10):293-294, 1997. % % J. Flanagan, D. Meinhart, R. Golden, and M. Sondhi. Phase Vocoder. The % Journal of the Acoustical Society of America, 38:939, 1965. % % K. R. Fitz and S. A. Fulop. A unified theory of time-frequency % reassignment. CoRR, abs/0903.3080, 2009. % % D. J. Nelson. Instantaneous higher order phase derivatives. Digital % Signal Processing, 12(2-3):416-428, 2002. [1]http ] % % F. Auger, E. Chassande-Mottin, and P. Flandrin. On phase-magnitude % relationships in the short-time fourier transform. Signal Processing % Letters, IEEE, 19(5):267-270, May 2012. % % Z. Průša. STFT and DGT phase conventions and phase derivatives % interpretation. Technical report, Acoustics Research Institute, % Austrian Academy of Sciences, 2015. % % References % % 1. http://dx.doi.org/10.1006/dspr.2002.0456 % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabphasederiv.html} %@seealso{resgram, gabreassign, dgt, pderiv, gabphasegrad} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard, 2008; Zdenek Průša, 2015 % REMARK: There is no problem with phase conventions with the second % derivatives. complainif_notenoughargs(nargin,2,upper(mfilename)); definput.flags.type = {'t','f','tt','ff','tf','ft'}; definput.flags.method = {'dgt','phase','abs','cross'}; definput.flags.phaseconv = {'freqinv','timeinv','symphase','relative'}; typewascell = 0; if ischar(type) types = {type}; elseif iscell(type) %error('Multiple derivatives at once were not implemented yet.'); types = type; typewascell = 1; else error('%s: First argument must be either char or a cell array.',... upper(mfilename)); end types = lower(types); for ii=1:numel(types) type = types{ii}; if ~ischar(type) || ~any(strcmpi(type, definput.flags.type)) error(['%s: First argument must contain the type of the derivative: %s'],... upper(mfilename),... strjoin(cellfun(@(el) sprintf('"%s"',el),... definput.flags.type,'UniformOutput',0),', ')); end end if ~ischar(method) || ~any(strcmpi(method, definput.flags.method)) error(['%s: Second argument must be the method name: %s '], ... upper(mfilename),... strjoin(cellfun(@(el) sprintf('"%s"',el),... definput.flags.method,'UniformOutput',0),', ')); end; foundFlags = cellfun(@(el)ischar(el) && any(strcmpi(el,definput.flags.phaseconv)),... varargin); flags1 = ltfatarghelper({},definput,{types{1},method,varargin{foundFlags}}); definput = []; % Definput is used again later varargin(foundFlags) = []; % Remove the phaseconv flags switch flags1.method case {'phase','abs'} if nargout>1 error('%s: Too many output arguments. ', upper(mfilename)); end end % Change ft to tf as they are equal if any(strcmpi('ft',types)) types(strcmpi('ft',types)) = {'tf'}; end % Get only unique flags [~,tmpidx] = unique(types,'first'); dflagsUnique = types(sort(tmpidx)); % Find duplicates dflagsDupl = cellfun(@(tEl) strcmpi(tEl,types),dflagsUnique,'UniformOutput',0); % Sort the unique flags according to character count [~,dflagsOrder]=sort(cellfun(@length,dflagsUnique)); % Sort dflagsUnique = dflagsUnique(dflagsOrder); % Allocate the output cell array phased2 = cell(1,numel(dflagsUnique)); switch flags1.method case {'dgt','cross'} complainif_notenoughargs(numel(varargin),4,mfilename); [f,gg,a,M]=deal(varargin{1:4}); definput.keyvals.L=[]; definput.keyvals.minlvl=eps; definput.keyvals.lt=[0 1]; [~,kv,L,minlvl]=ltfatarghelper({'L','minlvl'},definput,varargin(5:end)); % Change f to correct shape. [f,Ls]=comp_sigreshape_pre(f,upper(mfilename),0); % Even though this check is also in dgt, we must do it here too if isempty(L) L = dgtlength(Ls,a,M,kv.lt); else Luser = dgtlength(L,a,M,kv.lt); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i. See the help of DGTLENGTH for the requirements.'],... upper(mfilename),L,Luser); end end % Extend or crop f to correct length f=postpad(f,L); N = L/a; b = L/M; end switch flags1.method case 'dgt' % --------------------------- DGT method ------------------------ % % Naming conventions used here: % c - dgt coefficients using window g % c_s - second power of c with small values set to minlvl*max(c_s) % c_h - dgt coefficietns computed using time-weighted window hg % c_d - dgt coefficients computed using time-derived window dg % c_h2 - dgt coefficients computed using twice time-weighted window hg2 % c_d2 - dgt coefficients computed using second derivative of window g: hg2 % c_hd - dgt coefficients computed using time-weighted derivative of window g: hdg % c_dh - dgt coefficients computed using derivative of time-weighted window g: dhg % % Call dgt once to check all the parameters % This computes frequency invariant phase. [c,~,g] = dgt(f,gg,a,M,L,'lt',kv.lt); % Compute spectrogram and remove small values because we need to % divide by c_s. % This will also set the derivative to zeros in the regions % containing only small coefficients. c_s = abs(c).^2; c_s = max(c_s,minlvl*max(c_s(:))); % We also need info for info.gauss [~,info]=gabwin(gg,a,M,L,kv.lt,'callfun',upper(mfilename)); % These could be shared dg = []; c_d = []; hg = []; c_h = []; for typedId=1:numel(dflagsUnique) typed = dflagsUnique{typedId}; if info.gauss % TODO: Save computations for 2nd derivatives end switch typed case 't' if info.gauss && ~isempty(c_h) phased = -imag(c_h.*conj(c)./c_s)/info.tfr; else % fir2long is here to avoid possible boundary effects % as the time support of the Inf derivative is not FIR dg = pderiv(fir2long(g,L),[],Inf)/(2*pi); c_d = comp_dgt(f,flipwin(dg),a,M,kv.lt,0,0,0); phased = imag(c_d.*conj(c)./c_s); end switch flags1.phaseconv case {'freqinv','relative'} % Do nothing case 'timeinv' phased = bsxfun(@plus,phased,fftindex(M)*b); case 'symphase' phased = bsxfun(@plus,phased,fftindex(M)*b/2); end case 'f' if info.gauss && ~isempty(c_d) phased = -real(c_d.*conj(c)./c_s)*info.tfr; else % Compute the time weighted version of the window. % g is already a column vector hg = fftindex(size(g,1)).*g; c_h = comp_dgt(f,flipwin(hg),a,M,kv.lt,0,0,0); phased = real(c_h.*conj(c)./c_s); end switch flags1.phaseconv case 'timeinv' % Do nothing case 'relative' phased = -phased; case 'freqinv' phased = bsxfun(@plus,phased,-fftindex(N).'*a); case 'symphase' phased = bsxfun(@plus,phased,-fftindex(N).'*a/2); end case 'tt' if isempty(dg) dg = pderiv(fir2long(g,L),[],Inf)/(2*pi); c_d = comp_dgt(f,flipwin(dg),a,M,kv.lt,0,0,0); end dg2 = pderiv(dg,[],Inf); c_d2 = comp_dgt(f,flipwin(dg2),a,M,kv.lt,0,0,0); phased = imag(c_d2.*conj(c)./c_s - 2*pi*(c_d.*conj(c)./c_s).^2)/L; % Phase convention does not have any effect case 'ff' if isempty(hg) % Time weighted window hg = fftindex(size(g,1)).*g; c_h = comp_dgt(f,flipwin(hg),a,M,kv.lt,0,0,0); end hg2 = fftindex(size(g,1)).^2.*g; c_h2 = comp_dgt(f,flipwin(hg2),a,M,kv.lt,0,0,0); phased = imag(-c_h2.*conj(c)./c_s + (c_h.*conj(c)./c_s).^2)*2*pi/L; switch flags1.phaseconv case 'relative' phased = -phased; end case {'ft','tf'} if isempty(hg) hg = fftindex(size(g,1)).*g; c_h = comp_dgt(f,flipwin(hg),a,M,kv.lt,0,0,0); end if isempty(dg) dg = pderiv(fir2long(g,L),[],Inf)/(2*pi); c_d = comp_dgt(f,flipwin(dg),a,M,kv.lt,0,0,0); end hdg = (fftindex(size(dg,1))/L).*dg; c_hd = comp_dgt(f,flipwin(hdg),a,M,kv.lt,0,0,0); % This is mixed derivative tf for freq. invariant phased = real(c_hd.*conj(c)./c_s - (1/L)*c_h.*c_d.*(conj(c)./c_s).^2)*2*pi; switch flags1.phaseconv case {'freqinv','relative'} % Do nothing case 'timeinv' phased = phased + 1; case 'symphase' phased = phased + 1/2; end otherwise error('%s: This should never happen.',upper(mfilename)); end phased2{typedId} = phased; end case 'phase' % ---------- Direct numerical derivative of the phase ---------------- complainif_notenoughargs(numel(varargin),2,mfilename); [cphase,a]=deal(varargin{1:2}); complainif_notposint(a,'a',mfilename) if ~isreal(cphase) error(['%s: Input phase must be real valued. Use the "angle" ' ... 'function to compute the argument of complex numbers.'],... upper(mfilename)); end; % --- linear method --- [M,N,W]=size(cphase); L=N*a; b=L/M; tgrad = []; fgrad = []; for typedId=1:numel(dflagsUnique) typed = dflagsUnique{typedId}; % REMARK: Second derivative in one direction does not need phase % unwrapping if isempty(tgrad) && any(strcmpi(typed,{'t','tt','ft','tf'})) % This is the classic phase vocoder algorithm by Flanagan modified to % yield a second order centered difference approximation. % Perform derivative along rows while unwrapping the phase by 2*pi tgrad = pderivunwrap(cphase,2,2*pi); % Normalize %tgrad = tgrad/(2*pi); % Normalize again using time step tgrad = tgrad/(a); end if isempty(fgrad) && any(strcmpi(typed,{'f','ff'})) % Phase-lock the angles. % We have the frequency invariant phase ... TimeInd = (0:(N-1))*a; FreqInd = (0:(M-1))/M; phl = FreqInd'*TimeInd; cphaseLock = cphase+2*pi.*phl; % ... and now the time-invariant phase. % Perform derivative along cols while unwrapping the phase by 2*pi fgrad = pderivunwrap(cphaseLock,1,2*pi); % Convert from radians to relative frequencies %fgrad = fgrad/(2*pi); % Normalize again using frequency step fgrad = fgrad/(b); end % tgrad fgrad here are relative quantites switch typed case 't' phased = tgrad*L/(2*pi); switch flags1.phaseconv case {'freqinv','relative'} % Do nothing case 'timeinv' phased = bsxfun(@plus,phased,fftindex(M)*b); case 'symphase' phased = bsxfun(@plus,phased,fftindex(M)*b/2); end case 'f' phased = fgrad*L/(2*pi); switch flags1.phaseconv case 'timeinv' % Do nothing case 'relative' phased = -phased; case 'freqinv' phased = bsxfun(@plus,phased,-fftindex(N).'*a); case 'symphase' phased = bsxfun(@plus,phased,-fftindex(N).'*a/2); end case 'tt' % Second derivatives should be independent of the phase % convention. % tgrad is already unwrapped along time, we can call pderiv % directly. phased = pderiv(tgrad,2,2)/(2*pi); % Phase convention does not have any effect. case 'ff' % fgrad is already unwrapped along frequency phased = pderiv(fgrad,1,2)/(2*pi); switch flags1.phaseconv case 'relative' phased = -phased; end case {'tf','ft'} % Phase has not yet been unwrapped along frequency phased = pderivunwrap(tgrad,1,2*pi)*M/(2*pi); switch flags1.phaseconv case 'timeinv' phased = phased +1; case {'freqinv','relative'} % Do nothing case 'symphase' phased = phased +1/2; end % Phase has not yet been unwrapped along time % phased = pderivunwrap(fgrad,2,2*pi)*N/(2*pi); otherwise error('%s: This should never happen.',upper(mfilename)); end phased2{typedId} = phased; end case 'abs' % --------------------------- abs method ------------------------ complainif_notenoughargs(numel(varargin),3,mfilename); [s,g,a]=deal(varargin{1:3}); complainif_notposint(a,'a',mfilename) if numel(varargin)>3 difforder=varargin{4}; else difforder=4; end; if ~(all(s(:)>=0)) error('%s: s must be positive or zero.',mfilename); end; [M,N,W]=size(s); L=N*a; [~,info]=gabwin(g,a,M,L,'callfun',upper(mfilename)); if ~info.gauss error(['%s: The window must be a Gaussian window (specified as a string or ' ... 'as a cell array).'],upper(mfilename)); end; L=N*a; b=L/M; % We must avoid taking the log of zero. % Therefore we add the smallest possible % number logs=log(s+realmin); % XXX REMOVE Add a small constant to limit the dynamic range. This should % lessen the problem of errors in the differentiation for points close to % (but not exactly) zeros points. maxmax=max(logs(:)); tt=-11; % This is equal to about 95dB of 'normal' dynamic range logs(logs0 l = fftindex(gl)/gl; fshiftop = @(g) g.*exp(1i*2*pi*fshift*l); end if abs(tshift) >0 tshiftop = @(g) circshift(g,tshift); end if timeshiftfirst g = fshiftop(tshiftop(g)); else g = tshiftop(fshiftop(g)); end ltfat/inst/gabor/gabframebounds.m0000664000175000017500000001005212612404256016770 0ustar susnaksusnakfunction [AF,BF]=gabframebounds(g,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} gabframebounds %@verbatim %GABFRAMEBOUNDS Calculate frame bounds of Gabor frame % Usage: fcond=gabframebounds(g,a,M); % [A,B]=gabframebounds(g,a,M); % [A,B]=gabframebounds(g,a,M,L); % [A,B]=gabframebounds(g,a,M,'lt',lt); % % Input parameters: % g : The window function. % a : Length of time shift. % M : Number of channels. % L : Length of transform to consider. % lt : Lattice type (for non-separable lattices). % Output parameters: % fcond : Frame condition number (B/A) % A,B : Frame bounds. % % GABFRAMEBOUNDS(g,a,M) calculates the ratio B/A of the frame bounds % of the Gabor system with window g, and parameters a, M. % % [A,B]=GABFRAMEBOUNDS(...) returns the frame bounds A and B* % instead of just the ratio. % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of GABWIN for more details. % % GABFRAMEBOUNDS(g,a,M,L) will cut or zero-extend the window to length % L. % % GABFRAMEBOUNDS(g,a,M,'lt',lt) does the same for a non-separable % lattice specified by lt. Please see the help of MATRIX2LATTICETYPE % for a precise description of the parameter lt. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabframebounds.html} %@seealso{gabrieszbounds, gabwin} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %% ---------- Assert correct input. if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.L=[]; definput.keyvals.lt=[0 1]; [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); %% ------ step 2: Verify a, M and L if isempty(L) if isnumeric(g) % Use the window length Ls=length(g); else % Use the smallest possible length Ls=1; end; % ----- step 2b : Verify a, M and get L from the window length ---------- L=dgtlength(Ls,a,M,kv.lt); else % ----- step 2a : Verify a, M and get L Luser=dgtlength(L,a,M,kv.lt); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i. See the help of DGTLENGTH for the requirements.'],... upper(mfilename),L,Luser); end; end; %% ----- step 3 : Determine the window [g,info]=gabwin(g,a,M,L,kv.lt,'callfun',upper(mfilename)); if LM*R % This can is not a frame, so A is identically 0. AF=0; else AF=lambdas(1); end; BF=lambdas(s); if nargout<2 % Avoid the potential warning about division by zero. if AF==0 AF=Inf; else AF=BF/AF; end; end; ltfat/inst/gabor/gabfirtight.m0000664000175000017500000001310212612404256016302 0ustar susnaksusnakfunction [gt,relres,iter]=gabfirtight(Lsupport,g,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} gabfirtight %@verbatim %GABFIRTIGHT Compute FIR tight window % Usage: gt=gabfirtight(Lsupport,g,a,M); % gt=gabfirtight(Lsupport,g,a,M, varagin); % % Input parameters: % Lsupport : Length of the tight window % g : Initial window function % a : Time shift % M : Number of Channels % % Output parameters: % gt : Tight window % % GABFIRTIGHT(Lsupport,g,a,M) computes an FIR window gd which is tight. % The FIR dual window will be supported on Lsupport samples. % % This function solve a convex optimization problem that can be written % as: % % gd = argmin_x || alpha x||_1 + || beta Fx||_1 % % + || omega (x -g_l) ||_2^2 + delta || x ||_S0 % % + gamma || nabla F x ||_2^2 + mu || nabla x ||_2^2 % % such that x is a tight FIR windows % % *Note**: This function require the unlocbox. You can download it at % http://unlocbox.sourceforge.net % % The function uses an iterative algorithm to compute the approximate % FIR tight windows. Warning The algorithm solve a non convex problem and % might be stack in bad local minima. The algorithm can be controlled by % the following flags: % % 'alpha',alpha Weight in time. If it is a scalar, it represent the % weights of the entire L1 function in time. If it is a % vector, it is the associated weight assotiated to each % component of the L1 norm (length: Ldual). % Default value is alpha=0. % *Warning**: this value should not be too big in order to % avoid the the L1 norm proximal operator kill the signal. % No L1-time constraint: alpha=0 % % 'beta',beta Weight in frequency. If it is a scalar, it represent the % weights of the entire L1 function in frequency. If it is a % vector, it is the associated weight assotiated to each % component of the L1 norm in frequency. (length: Ldual). % Default value is beta=0. % *Warning**: this value should not be too big in order to % avoid the the L1 norm proximal operator kill the signal. % No L1-frequency constraint: beta=0 % % 'omega',omega % Weight in time of the L2-norm. If it is a scalar, % it represent the % weights of the entire L2 function in time. If it is a % vector, it is the associated weight assotiated to each % component of the L2 norm (length: Ldual). % Default value is omega=0. % No L2-time constraint: omega=0 % % 'glike',g_l g_l is a windows in time. The algorithm try to shape % the dual window like g_l. Normalization of g_l is done % automatically. To use option omega should be different % from 0. By default g_d=0. % % 'mu',mu Weight of the smooth constraint Default value is 1. % No smooth constraint: mu=0 % % 'gamma',gamma Weight of the smooth constraint in frequency. % Default value is 1. No smooth constraint: gamma=0 % % 'delta',delta Weight of the S0-norm. Default value is 0. % No S0-norm: delta=0 % % 'dual' Look for a dual windows (default) % % 'painless' Construct a starting guess using a painless-case % approximation. This is the default % % 'zero' Choose a starting guess of zero. % % 'rand' Choose a random starting phase. % % 'tol',t Stop if relative residual error is less than the % specified tolerance. % % 'maxit',n Do at most n iterations. default 200 % % 'print' Display the progress. % % 'debug' Display all the progresses. % % 'quiet' Don't print anything, this is the default. % % 'fast' Fast algorithm, this is the default. % % 'slow' Safer algorithm, you can try this if the fast algorithm % is not working. Before using this, try to iterate more. % % 'printstep',p If 'print' is specified, then print every p'th % iteration. Default value is p=10; % % 'hardconstraint' Force the projection at the end (default) % % 'softconstaint' Do not force the projection at the end % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabfirtight.html} %@seealso{gaboptdual, gabdual, gabtight, gabfirdual, gabconvexopt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Nathanael Perraudin % Date : 18 Feb 2014 if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end; [gt,relres,iter]=gabconvexopt(g,a,M,varargin{:}, 'support',Lsupport,'tight'); ltfat/inst/gabor/latticetype2matrix.m0000664000175000017500000000325412612404256017655 0ustar susnaksusnakfunction V=latticetype2matrix(L,a,M,lt); %-*- texinfo -*- %@deftypefn {Function} latticetype2matrix %@verbatim %LATTICETYPE2MATRIX Convert lattice description to matrix form % Usage: V=latticetype2matrix(L,a,M,lt); % % V=LATTICETYPE2MATRIX(L,a,M,lt) converts a standard description of a % lattice using the a, M and lt parameters into a 2x2 % integer matrix description. The conversion is only valid for the % specified transform length L. % % The output will be in lower triangular Hemite normal form. % % For more information, see % http://en.wikipedia.org/wiki/Hermite_normal_form. % % An example: % % V = latticetype2matrix(120,10,12,[1 2]) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/latticetype2matrix.html} %@seealso{matrix2latticetype} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L2=dgtlength(L,a,M,lt); if L~=L2 error('%s: Invalid transform length.',upper(mfilename)); end; b=L/M; s=b/lt(2)*lt(1); V=[a 0;... s b]; ltfat/inst/gabor/constructphase.m0000664000175000017500000000464212612404256017066 0ustar susnaksusnakfunction [c,newphase,tgrad,fgrad]=constructphase(s,g,a,tol) %-*- texinfo -*- %@deftypefn {Function} constructphase %@verbatim %CONSTRUCTPHASE Construct the phase of a DGT % Usage: c=constructphase(s,g,a); % c=constructphase(s,g,a,tol); % % CONSTRUCTPHASE(s,g,a) will construct a suitable phase for the postive % valued coefficients s. % % If s is the absolute values of the Gabor coefficients of a signal % obtained using the window g and time-shift a, i.e.: % % c=dgt(f,g,a,M); % s=abs(c); % % then constuctphase(s,g,a) will attempt to reconstruct c. % % The window g must be Gaussian, i.e. g must have the value 'gauss' % or be a cell array {'gauss',tfr}. % % CONSTRUCTPHASE(s,g,a,tol) does as above, but sets the phase of % coefficients less than tol to random values. % By default, tol has the value 1e-10. % % This function requires a computational subroutine that is only % available in C. Use LTFATMEX to compile it. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/constructphase.html} %@seealso{dgt, gabphasegrad, ltfatmex} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard, Zdenek Prusa if nargin<4 tol=1e-10; else if ~iscalar(tol) error('%s: tol must be scalar.',upper(mfilename)); end end % Compute phase gradients, check parameteres [tgrad,fgrad] = gabphasegrad('abs',s,g,a,2); % Build the phase (calling a MEX file) newphase=comp_heapint(s,tgrad,fgrad,a,tol); % Set phase of the coefficients below tol to random values absthr = max(s(:))*tol; toosmallidx = s. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Nathanael Perraudin % Date : 18 Feb 2014 if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; if 0 gt=g; for ii=1:50 gt=gabconvexopt(gt,a,M,varargin{:},'quiet','dual'); figure(1); plot(abs(gt)); drawnow fprintf('Error at iteration %i: %g\n',ii,gabdualnorm(gt,gt,a,M,length(gt))); end gt=gabconvexopt(g,a,M,'alpha',0,'beta',0,'gamma',0,'mu',0,'omega',0, 'tight'); else [gt,relres,iter]=gabconvexopt(g,a,M,varargin{:}, 'tight'); end end ltfat/inst/gabor/tconv.m0000664000175000017500000000567612612404256015162 0ustar susnaksusnakfunction h=tconv(f,g) %-*- texinfo -*- %@deftypefn {Function} tconv %@verbatim %TCONV Twisted convolution % Usage: h=tconv(f,g); % % TCONV(f,g) computes the twisted convolution of the square matrices % f and g. % % Let h=TCONV(f,g) for f,g being L xL matrices. Then h is given by % % L-1 L-1 % h(m+1,n+1) = sum sum f(k+1,l+1)*g(m-k+1,n-l+1)*exp(-2*pi*i*(m-k)*l/L); % l=0 k=0 % % where m-k and n-l are computed modulo L. % % If both f and g are of class sparse then h will also be a sparse % matrix. The number of non-zero elements of h is usually much larger than % the numbers for f and g. Unless f and g are very sparse, it can be % faster to convert them to full matrices before calling TCONV. % % The routine SPREADINV can be used to calculate an inverse convolution. % Define h and r by: % % h=tconv(f,g); % r=tconv(spreadinv(f),h); % % then r is equal to g. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/tconv.html} %@seealso{spreadop, spreadfun, spreadinv} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_SPREAD % REFERENCE: REF_TCONV error(nargchk(2,2,nargin)); if any(size(f)~=size(g)) error('Input matrices must be same size.'); end; if size(f,1)~=size(f,2) error('Input matrices must be square.'); end; L=size(f,1); if issparse(f) && issparse(g) % Version for sparse matrices. % precompute the Lth roots of unity % Optimization note : the special properties and symmetries of the % roots of unity could be exploited to reduce this computation. % Furthermore here we precompute every possible root if some are % unneeded. temp=exp((-i*2*pi/L)*(0:L-1)'); [rowf,colf,valf]=find(f); [rowg,colg,valg]=find(g); h=sparse(L,L); for indf=1:length(valf) for indg=1:length(valg) m=mod(rowf(indf)+rowg(indg)-2, L); n=mod(colf(indf)+colg(indg)-2, L); h(m+1,n+1)=h(m+1,n+1)+valf(indf)*valg(indg)*temp(mod((m-(rowf(indf)-1))*(colf(indf)-1),L)+1); end end else % The conversion to 'full' is in order for Matlab to work. f=ifft(full(f))*L; g=ifft(full(g))*L; Tf=comp_col2diag(f); Tg=comp_col2diag(g); Th=Tf*Tg; h=spreadfun(Th); end; ltfat/inst/gabor/iwmdct2.m0000664000175000017500000000553712612404256015376 0ustar susnaksusnakfunction [f]=iwmdct2(c,g1,p3,p4) %-*- texinfo -*- %@deftypefn {Function} iwmdct2 %@verbatim %IWMDCT2 2D Inverse windowed MDCT transform % Usage: f=iwmdct2(c,g); % f=iwmdct2(c,g1,g2); % f=iwmdct2(c,g1,g2,Ls); % % Input parameters: % c : Array of coefficients. % g,g1,g2 : Window functions. % Ls : Size of reconstructed signal. % Output parameters: % f : Output data, matrix. % % IWMDCT2(c,g) calculates a separable two dimensional inverse WMDCT % transform of the input coefficients c using the window g. The number of % channels is deduced from the size of the coefficients c. % % IWMDCT2(c,g1,g2) does the same using the window g1 along the first % dimension, and window g2 along the second dimension. % % IWMDCT2(c,g1,g2,Ls) cuts the signal to size Ls after the transform % is done. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/iwmdct2.html} %@seealso{wmdct2, dgt2, wildual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard error(nargchk(2,4,nargin)); Ls=[]; switch nargin case 2 g2=g1; case 3 if prod(size(p3))>2 % Two windows was specified. g2=p3; else g2=g1; Ls=p3; end; case 4 g2=p3; Ls=p4; end; if ndims(c)<4 || ndims(c)>5 error('c must be 4 or 5 dimensional.'); end; M1=size(c,1); N1=size(c,2); M2=size(c,3); N2=size(c,4); W=size(c,5); L1=M1*N1; L2=M2*N2; [g1,info]=wilwin(g1,M1,L1,'IWMDCT2'); [g2,info]=wilwin(g2,M2,L2,'IWMDCT2'); % If input is real, and window is real, output must be real as well. inputwasreal = (isreal(g1) && isreal(g2) && isreal(c)); if isempty(Ls) Ls(1)=L1; Ls(2)=L2; else Ls=bsxfun(@times,Ls,[1 1]); end; % --- first dimension % Change c to correct shape. c=reshape(c,M1,N1,L2*W); c=comp_idwiltiii(c,g1); c=postpad(c,Ls(1)); c=reshape(c,Ls(1),L2,W); c=permute(c,[2,1,3]); % --- second dimension % Change c to correct shape. c=reshape(c,M2,N2,Ls(1)*W); c=comp_idwiltiii(c,g2); c=postpad(c,Ls(2)); c=reshape(c,Ls(2),Ls(1),W); f=permute(c,[2,1,3]); % Clean signal if it is known to be real if inputwasreal f=real(f); end; ltfat/inst/gabor/matrix2latticetype.m0000664000175000017500000000761312612404256017660 0ustar susnaksusnakfunction [a,M,lt] = matrix2latticetype(L,V); %-*- texinfo -*- %@deftypefn {Function} matrix2latticetype %@verbatim %MATRIX2LATTICETYPE Convert matrix form to standard lattice description % Usage: [a,M,lt] = matrix2latticetype(L,V); % % [a,M,lt]=MATRIX2LATTICETYPE(L,V) converts a 2x2 integer matrix % description into the standard description of a lattice using the a, % M and lt. The conversion is only valid for the specified transform % length L. % % The lattice type lt is a 1 x2 vector [lt_1,lt_2] denoting an % irreducible fraction lt_1/lt_2. This fraction describes the distance % in frequency (counted in frequency channels) that each coefficient is % offset when moving in time by the time-shift of a. Some examples: % lt=[0 1] defines a square lattice, lt=[1 2] defines the quinqux % (almost hexagonal) lattice, lt=[1 3] describes a lattice with a % 1/3 frequency offset for each time shift and so forth. % % An example: % % [a,M,lt] = matrix2latticetype(120,[10 0; 5 10]) % % Coefficient layout: % ------------------- % % The following code generates plots which show the coefficient layout % and enumeration of the first 4 lattices in the time-frequecy plane: % % a=6; % M=6; % L=36; % b=L/M; % N=L/a; % cw=3; % ftz=12; % % [x,y]=meshgrid(a*(0:N-1),b*(0:M-1)); % % lt1=[0 1 1 2]; % lt2=[1 2 3 3]; % % for fignum=1:4 % subplot(2,2,fignum); % z=y; % if lt2(fignum)>0 % z=z+mod(lt1(fignum)*x/lt2(fignum),b); % end; % for ii=1:M*N % text(x(ii)-cw/4,z(ii),sprintf('%2.0i',ii),'Fontsize',ftz); % rectangle('Curvature',[1 1], 'Position',[x(ii)-cw/2,z(ii)-cw/2,cw,cw]); % end; % axis([-cw L -cw L]); % axis('square'); % title(sprintf('lt=[%i %i]',lt1(fignum),lt2(fignum)),'Fontsize',ftz); % end; % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/matrix2latticetype.html} %@seealso{latticetype2matrix} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % The Hermite normal form code was originally written by Arno J. van Leest, 1999. % Positive determinant by Peter L. Soendergaard, 2004. % Unique form by Christoph Wiesmeyr, 2012 if nargin~=2 error('%s: Wrong number of input arguments.',upper(mfilename)); end; % Check if matrix has correct size. if size(V,1)~=2 || size(V,2)~=2 error('%s: V must be a 2x2 matrix.',upper(mfilename)); end; % Integer values if norm(mod(V,1))~=0 error('%s: V must have all integer values.',upper(mfilename)); end; % Convert to Arnos normal form. gcd1=gcd(V(1,1),V(1,2)); gcd2=gcd(V(2,1),V(2,2)); A=zeros(2); A(1,:)=V(1,:)/gcd1; A(2,:)=V(2,:)/gcd2; D = det(A); % Exchange vectors if determinant is negative. if D<0 D=-D; A=fliplr(A); end; [g,h0,h1] = gcd(A(1,1),A(1,2)); x = A(2,:)*[h0;h1]; x = mod(x,D); % Octave does not automatically round the double division to integer % numbers, and this causes confusion later in the GCD computations. a = gcd1; b = round(D*gcd2); s = round(x*gcd2); % compute nabs format of b1 = gcd(s*lcm(a,L)/a,L); [a,k1] = gcd(a,L); s = k1*s; % update b b = gcd(b,gcd(b1,L)); % update s s = mod(s,b); % conversion from nabs to latticetype M=L/b; k=gcd(s,b); lt=[s/k b/k]; ltfat/inst/gabor/gabconvexopt.m0000664000175000017500000005113512612404256016517 0ustar susnaksusnakfunction [gd,relres,iter] = gabconvexopt(g,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} gabconvexopt %@verbatim %GABCONVEXOPT Compute a window using convex optimization % Usage: gout=gabconvexopt(g,a,M); % gout=gabconvexopt(g,a,M, varagin); % % Input parameters: % g : Window function /initial point (tight case) % a : Time shift % M : Number of Channels % % Output parameters: % gout : Output window % iter : Number of iterations % relres : Reconstruction error % % GABCONVEXOPT(g,a,M) computes a window gout which is the optimal % solution of the convex optimization problem below % % gd = argmin_x || alpha x||_1 + || beta Fx||_1 % % + || omega (x -g_l) ||_2^2 + delta || x ||_S0 % % + gamma || nabla F x ||_2^2 + mu || nabla x ||_2^2 % % such that x satifies the constraints % % Three constraints are possible: % % x is dual with respect of g % % x is tight % % x is compactly supported on Ldual % % *Note**: This function require the unlocbox. You can download it at % http://unlocbox.sourceforge.net % % The function uses an iterative algorithm to compute the approximate. % The algorithm can be controlled by the following flags: % % 'alpha',alpha Weight in time. If it is a scalar, it represent the % weights of the entire L1 function in time. If it is a % vector, it is the associated weight assotiated to each % component of the L1 norm (length: Ldual). % Default value is alpha=0. % *Warning**: this value should not be too big in order to % avoid the the L1 norm proximal operator kill the signal. % No L1-time constraint: alpha=0 % % 'beta',beta Weight in frequency. If it is a scalar, it represent the % weights of the entire L1 function in frequency. If it is a % vector, it is the associated weight assotiated to each % component of the L1 norm in frequency. (length: Ldual). % Default value is beta=0. % *Warning**: this value should not be too big in order to % avoid the the L1 norm proximal operator kill the signal. % No L1-frequency constraint: beta=0 % % 'omega',omega Weight in time of the L2-norm. If it is a scalar, it represent the % weights of the entire L2 function in time. If it is a % vector, it is the associated weight assotiated to each % component of the L2 norm (length: Ldual). % Default value is omega=0. % No L2-time constraint: omega=0 % % 'glike',g_l g_l is a windows in time. The algorithm try to shape % the dual window like g_l. Normalization of g_l is done % automatically. To use option omega should be different % from 0. By default g_d=0. % % 'mu', mu Weight of the smooth constraint Default value is 1. % No smooth constraint: mu=0 % % 'gamma', gamma Weight of the smooth constraint in frequency. Default value is 1. % No smooth constraint: gamma=0 % % 'delta', delta Weight of the S0-norm. Default value is 0. % No S0-norm: delta=0 % % 'support' Ldual Add a constraint on the support. The windows should % be compactly supported on Ldual. % % 'tight' Look for a tight windows % % 'dual' Look for a dual windows (default) % % 'painless' Construct a starting guess using a painless-case % approximation. This is the default % % 'zero' Choose a starting guess of zero. % % 'rand' Choose a random starting phase. % % 'tol',t Stop if relative residual error is less than the % specified tolerance. % % 'maxit',n Do at most n iterations. default 200 % % 'print' Display the progress. % % 'debug' Display all the progresses. % % 'quiet' Don't print anything, this is the default. % % 'fast' Fast algorithm, this is the default. % % 'slow' Safer algorithm, you can try this if the fast algorithm % is not working. Before using this, try to iterate more. % % 'printstep',p If 'print' is specified, then print every p'th % iteration. Default value is p=10; % % 'hardconstraint' Force the projection at the end (default) % % 'softconstaint' Do not force the projection at the end % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabconvexopt.html} %@seealso{gaboptdual, gabdual, gabtight, gabfirtight, gabopttight} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Nathanael Perraudin % Date : 18 Feb 2014 if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end; if numel(g)==1 error('g must be a vector (you probably forgot to supply the window function as input parameter.)'); end; definput.keyvals.L=[]; definput.keyvals.lt=[0 1]; definput.keyvals.tol=1e-6; definput.keyvals.maxit=200; definput.keyvals.printstep=10; definput.flags.print={'quiet','print','debug'}; definput.flags.algo={'fast','slow'}; definput.flags.constraint={'hardconstraint','softconstaint'}; definput.flags.startphase={'painless','zero','rand'}; definput.flags.type={'dual','tight'}; definput.keyvals.alpha=0; definput.keyvals.omega=0; definput.keyvals.beta=0; definput.keyvals.mu=1; definput.keyvals.gamma=1; definput.keyvals.vart=0; definput.keyvals.varf=0; definput.keyvals.var2t=0; definput.keyvals.var2f=0; definput.keyvals.support=0; definput.keyvals.delta=0; definput.keyvals.deltaw=0; definput.keyvals.glike=zeros(size(g)); [flags,kv]=ltfatarghelper({'L','tol','maxit'},definput,varargin); % Determine the window. The window /must/ be an FIR window, so it is % perfectly legal to specify L=[] when calling gabwin [g,info]=gabwin(g,a,M,[],kv.lt,'callfun',upper(mfilename)); if kv.support Ldual=kv.support; % Determine L. L must be longer than L+Ldual+1 to make sure that no convolutions are periodic L=dgtlength(info.gl+Ldual+1,a,M); else L=length(g); Ldual=L; end b=L/M; % Determine the initial guess if flags.do_zero gd_initial=zeros(Ldual,1); end; if flags.do_rand gd_initial=rand(size(g)); end; if flags.do_painless gsmall=long2fir(g,M); gdsmall=gabdual(gsmall,a,M); gd_initial=fir2long(gdsmall,Ldual); end; % -------- do the convex optimization stuff % Define the long original window glong=fir2long(g,L); %gabframebounds(g,a,M) % Initial point xin=gd_initial; xin=fir2long(xin,L); % -- * Setting the different prox for ppxa *-- % ppxa will minimize all different proxes % value test for the selection constraint nb_priors=0; % - variance - if kv.vart % constraint in time if flags.do_debug param_l1.verbose=1; % display the results else param_l1.verbose=0; % do not display anything end % alpha is a scalar if mod(L,2) w=[0:1:(L-1)/2,(L-1)/2:-1:1]'; else w=[0:1:L/2-1,L/2:-1:1]'; end w=w.^2/L; param_l1.weights=w; nb_priors=nb_priors+1; g11.prox= @(x,T) prox_l1(x,kv.vart*T,param_l1); % define the prox_l1 as operator g11.eval= @(x) kv.vart*norm(w.*x,1); % the objectiv function is the l1 norm else % no L1 in time constraint g11.prox= @(x,T) x; g11.eval= @(x) 0; end % - variance - if kv.varf % constraint in time param_l1_fourier.A= @(x) 1/sqrt(L)*fft(x); % Fourier operator param_l1_fourier.At= @(x) sqrt(L)*ifft(x); % adjoint of the Fourier operator if flags.do_debug param_l1_fourier.verbose=1; % display the results else param_l1_fourier.verbose=0; % do not display anything end if mod(L,2) w=[0:1:(L-1)/2,(L-1)/2:-1:1]'; else w=[0:1:L/2-1,L/2:-1:1]'; end w=w.^2/L; param_l1_fourier.weights=w; nb_priors=nb_priors+1; g12.prox= @(x,T) prox_l1(x,kv.varf*T,param_l1_fourier); % define the prox_l1 as operator g12.eval= @(x) kv.varf*norm(w.*x,1); % the objectiv function is the l1 norm else % no L1 in time constraint g12.prox= @(x,T) x; g12.eval= @(x) 0; end % - variance2 - if kv.var2t % constraint in time if flags.do_debug param_l2.verbose=1; % display the results else param_l2.verbose=0; % do not display anything end % alpha is a scalar if mod(L,2) w=[0:1:(L-1)/2,(L-1)/2:-1:1]'; else w=[0:1:L/2-1,L/2:-1:1]'; end w=w/sqrt(L); param_l2.weights=w; nb_priors=nb_priors+1; g13.prox= @(x,T) prox_l2(x,kv.var2t*T,param_l2); % define the prox_l1 as operator g13.eval= @(x) kv.var2t*norm(w.*x,2)^2; % the objectiv function is the l1 norm else % no L1 in time constraint g13.prox= @(x,T) x; g13.eval= @(x) 0; end % - variance2 - if kv.var2f % constraint in time param_l2_fourier.A= @(x) 1/sqrt(L)*fft(x); % Fourier operator param_l2_fourier.At= @(x) sqrt(L)*ifft(x); % adjoint of the Fourier operator if flags.do_debug param_l2_fourier.verbose=1; % display the results else param_l2_fourier.verbose=0; % do not display anything end if mod(L,2) w=[0:1:(L-1)/2,(L-1)/2:-1:1]'; else w=[0:1:L/2-1,L/2:-1:1]'; end w=w/sqrt(L); param_l2_fourier.weights=w; nb_priors=nb_priors+1; g14.prox= @(x,T) prox_l2(x,kv.var2f*T,param_l2_fourier); % define the prox_l1 as operator g14.eval= @(x) kv.var2f*norm(w.*x,2)^2; % the objectiv function is the l1 norm else % no L1 in time constraint g14.prox= @(x,T) x; g14.eval= @(x) 0; end % - small L1 norm in coefficient domain - if kv.alpha % constraint in time if flags.do_debug param_l1.verbose=1; % display the results else param_l1.verbose=0; % do not display anything end if length(kv.alpha)==1 % alpha is a scalar kv.alpha=ones(size(xin))*kv.alpha; end param_l1.weights=kv.alpha; nb_priors=nb_priors+1; g1.prox= @(x,T) prox_l1(x,T,param_l1); % define the prox_l1 as operator g1.eval= @(x) norm(kv.alpha.*x,1); % the objectiv function is the l1 norm else % no L1 in time constraint g1.prox= @(x,T) x; g1.eval= @(x) 0; end % - small L1 norm in Fourier domain - if kv.beta %frequency constraint param_l1_fourier.A= @(x) 1/sqrt(L)*fft(x); % Fourier operator param_l1_fourier.At= @(x) sqrt(L)*ifft(x); % adjoint of the Fourier operator if flags.do_debug param_l1_fourier.verbose=1; % display the results else param_l1_fourier.verbose=0; % Do not display anything end if length(kv.beta)==1 % alpha is a scalar kv.beta=ones(size(xin))*kv.beta; end param_l1_fourier.weights=kv.beta; % Here are the step for the prox % 2) go into the Fourier domain (prox_l1) % 3) soft thresholding (prox_l1) % 4) back in the time domain (prox_l1) nb_priors=nb_priors+1; g3.prox= @(x,T) prox_l1(x,T,param_l1_fourier); g3.eval= @(x) norm(kv.beta.*fft(x),1); % objectiv function else % no L1 in frequency constraint g3.prox= @(x,T) x; g3.eval= @(x) 0; % objectiv function end % - DUAL OR TIGHT?- if flags.do_tight % tight windows g2.prox= @(x,T) gabtight(x,a,M); % set the prox g2.eval= @(x) norm(x-gabdual(x,a,M,L)); % objectiv function else % - projection on a B2 ball - % Frame-type matrix of the adjoint lattice %G=tfmat('dgt',glong,M,a); Fal=frame('dgt',glong,M,a); G=framematrix(Fal,L); d=[a/M;zeros(a*b-1,1)]; % Using a B2 ball projection % || Gcut' x - b ||_2 < epsilon % param_proj.A = @(x) G'*x; % forward operator % param_proj.At = @(x) G*x; % adjoint operator % param_proj.y = d; % param_proj.maxit = 200; % maximum of iteration % param_proj.tight=0; % not a tight frame % param_proj.nu=norm(G)^2; % frame bound on Gcut' % param_proj.verbose=0; % diplay summary at the end % param_proj.epsilon=10*eps; % radius of the B2 ball % g2.prox= @(x,T) fast_proj_b2(x,T,param_proj); % set the prox % Using a direct projection (better solution) param_proj.verbose=flags.do_debug; param_proj.y=d; param_proj.A=G'; param_proj.AAtinv=(G'*G)^(-1); g2.prox= @(x,T) proj_dual(x,T,param_proj); % set the prox g2.eval= @(x) norm(G'*x-d); % objectiv function end % SUPPORT CONSTRAINT if kv.support % - set null coefficient g4.prox = @(x,T) forceeven(fir2long(long2fir(x,Ldual),L)); g4.eval = @(x) 0; % - function apply the two projections thanks to a poc algorithm. if flags.do_tight G={g2,g4}; paramPOCS.tol=20*eps; paramPOCS.maxit=5000; paramPOCS.verbose=flags.do_print+flags.do_debug; paramPOCS.abs_tol=1; g5.prox = @(x,T) pocs(x,G,paramPOCS); % g5.prox = @(x,T) ppxa(x,G,paramPOCS); % g5.prox = @(x,T) douglas_rachford(x,g2,g4,paramPOCS); % g5.prox = @(x,T) pocs2(x,g2,g4,20*eps,2000, flags.do_print+flags.do_debug); g5.eval = @(x) 0; else Fal=frame('dgt',glong,M,a); G=framematrix(Fal,L); d=[a/M;zeros(a*b-1,1)]; Lfirst=ceil(Ldual/2); Llast=Ldual-Lfirst; Gcut=G([1:Lfirst,L-Llast+1:L],:); param_proj2.verbose=flags.do_debug; param_proj2.y=d; param_proj2.A=Gcut'; param_proj2.AAtinv=pinv(Gcut'*Gcut); g5.prox= @(x,T) fir2long(proj_dual(long2fir(x,Ldual),T,param_proj2),L); % set the prox g5.eval= @(x) norm(G'*x-d); % objectiv function end else g4.prox= @(x,T) x; g4.eval= @(x) 0; % objectiv function g5=g2; end % - function apply the two projections thanks to a douglas rachford algorithm. % param_douglas.verbose=1; % param_douglas.abs_tol=1; % param_douglas.maxit=2000; % param_douglas.tol=20*eps; % g6.prox = @(x,T) douglas_rachford(x,g2,g4,param_douglas); % g6.eval = @(x) 0; % - small gradient norm - % this is the smoothing parameter if kv.mu if flags.do_debug param_l2grad.verbose=1; % display the results else param_l2grad.verbose=0; % Do not display anything end nb_priors=nb_priors+1; g7.prox = @(x,T) prox_l2grad(fir2long(x,L),kv.mu*T,param_l2grad); g7.eval = @(x) norm(gradient(x))^2; else g7.prox = @(x,T) x; g7.eval = @(x) 0; end % - small gradient norm in fourrier- % this is the smoothing parameter if kv.gamma if flags.do_debug param_l2grad.verbose=1; % display the results else param_l2grad.verbose=0; % Do not display anything end nb_priors=nb_priors+1; g9.prox = @(x,T) prox_l2gradfourier(fir2long(x,L),kv.gamma*T,param_l2grad); g9.eval = @(x) norm(gradient(1/sqrt(L)*fft(x)))^2; else g9.prox = @(x,T) x; g9.eval = @(x) 0; end % - small L2 norm in coefficient domain - if kv.omega % constraint in time if flags.do_debug param_l2.verbose=1; % display the results else param_l2.verbose=0; % do not display anything end if length(kv.omega)==1 % alpha is a scalar kv.alpha=ones(size(xin))*kv.omega; end param_l2.weights=kv.omega; if sum(kv.glike) kv.glike=fir2long(kv.glike,L); glike=kv.glike/norm(kv.glike)*norm(gabdual(g,a,M)); param_l2.y=fir2long(glike,L); end nb_priors=nb_priors+1; g8.prox= @(x,T) prox_l2(x,T,param_l2); % define the prox_l2 as operator g8.eval= @(x) norm(kv.omega.*x-kv.glike,'fro')^2; % the objectiv function is the l2 norm else % no L1 in time constraint g8.prox= @(x,T) x; g8.eval= @(x) 0; end % - small S0 norm - if kv.delta %frequency constraint gauss=pgauss(L,1); [A,B]=gabframebounds(gauss,1,L); AB=(A+B)/2; param_S0.A= @(x) dgt(x,gauss,1,L)/sqrt(AB); param_S0.At= @(x) idgt(x,gauss,1,L)/sqrt(AB); if flags.do_debug param_S0.verbose=1; % display the results else param_S0.verbose=0; % Do not display anything end nb_priors=nb_priors+1; g10.prox= @(x,T) prox_l1(x,T*kv.delta,param_S0); g10.eval= @(x) kv.delta*norm(reshape(dgt(x,gauss,1,L),[],1),1); % objectiv function else % no L1 in frequency constraint g10.prox= @(x,T) x; g10.eval= @(x) 0; % objectiv function end % - small weighted S0 norm - if kv.deltaw %frequency constraint gauss=pgauss(L,1); [A,B]=gabframebounds(gauss,1,L); AB=(A+B)/2; param_S0.A= @(x) dgt(x,gauss,1,L)/sqrt(AB); param_S0.At= @(x) idgt(x,gauss,1,L)/sqrt(AB); if flags.do_debug param_S0.verbose=1; % display the results else param_S0.verbose=0; % Do not display anything end if mod(L,2) w=[0:1:(L-1)/2,(L-1)/2:-1:1]'; else w=[0:1:L/2-1,L/2:-1:1]'; end w=w/sqrt(L); %W=w*w'; W=repmat(w,1,L).^2+repmat(w',L,1).^2; W=sqrt(W); param_S0.weights=W; nb_priors=nb_priors+1; g15.prox= @(x,T) prox_l1(x,T*kv.deltaw,param_S0); g15.eval= @(x) kv.deltaw*norm(reshape(dgt(x,gauss,1,L),[],1),1); % objectiv function else % no L1 in frequency constraint g15.prox= @(x,T) x; g15.eval= @(x) 0; % objectiv function end % -- * PPXA function, the solver * -- % parameter for the solver param.maxit=kv.maxit; % maximum number of iteration param.tol=kv.tol; if flags.do_quiet param.verbose=0; end % Definition of the function f (the order is important) if flags.do_fast && flags.do_tight F={g1, g3,g7,g9,g8, g2, g4,g10,g11,g12,g13,g14,g15}; else F={g1, g3,g7,g9,g8, g5,g10,g11,g12,g13,g14,g15}; end % solving the problem if nb_priors [gd,iter,~]=ppxa(xin,F,param); % Force the hard constraint if flags.do_hardconstraint % In case of use of the douglas rachford algo instead of POCS % gd=g6.prox(gd,0); % force the constraint gd=g5.prox(gd,0); end else fprintf( ' Warning!!! No prior selected! -- Only perform a projection. \n') gd=g5.prox(xin,0); end % compute the error if flags.do_tight relres=gabdualnorm(gd,gd,a,M,L); else relres=gabdualnorm(g,gd,a,M,L); end if kv.support % set the good size gd=long2fir(gd,Ldual); end end % function x=pocs2(x,g1,g2,tol,maxii,flagp) % % this function implement a POCS algorithm, projection onto convex Set % % using the differents projection of the algorithm. % tola=1; % ii=0; % tola_old=tola; % while (tola>tol) % x=g2.prox(g1.prox(x,0),0); % tola=g1.eval(x); % ii=ii+1; % if (logical(1-logical(mod(ii,50))) && flagp) % fprintf(' POCS sub-iteration: %i -- Tol : %g\n',ii,tola) % end % if ii> maxii % break; % end % if abs(tola_old-tola)/tola1 will give better % frequency resolution at the expense of a worse time % resolution. A value of 0. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: NA % REFERENCE: NA if nargin<1 error('Too few input arguments.'); end; if sum(size(f)>1)>1 error('Input must be a vector.'); end; definput.import={'ltfattranslate','normalize','tfplot'}; % Override the setting from tfplot, because SGRAM does not support the % 'dbsq' setting (it does not make sense). definput.flags.log={'db','lin'}; % Define initial value for flags and key/value pairs. definput.flags.wlen={'nowlen','wlen'}; definput.flags.thr={'nothr','thr'}; if isreal(f) definput.flags.posfreq={'posfreq','nf'}; else definput.flags.posfreq={'nf','posfreq'}; end; definput.keyvals.tfr=1; definput.keyvals.wlen=0; definput.keyvals.thr=0; definput.keyvals.fmax=[]; definput.keyvals.xres=800; definput.keyvals.yres=600; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); % Downsample if ~isempty(kv.fmax) if ~isempty(fs) resamp=kv.fmax*2/fs; else resamp=kv.fmax*2/length(f); end; f=fftresample(f,round(length(f)*resamp)); kv.fs=2*kv.fmax; end; Ls=length(f); if flags.do_posfreq kv.yres=2*kv.yres; end; try [a,M,L,N,Ndisp]=gabimagepars(Ls,kv.xres,kv.yres); catch err=lasterror; if strcmp(err.identifier,'LTFAT:noframe') error(sprintf(['The signal is too long. SGRAM cannot visualize all the details.\n' ... 'Try a shorter signal or increase the image resolution by calling:\n\n' ... ' sgram(...,''xres'',xres,''yres'',yres);\n\n' ... 'for larger values of xres and yres.\n'... 'The current values are:\n xres=%i\n yres=%i'],kv.xres,kv.yres)); else rethrow(err); end; end; % Set an explicit window length, if this was specified. if flags.do_wlen kv.tfr=kv.wlen^2/L; end; g={'gauss',kv.tfr,flags.norm}; if flags.do_nf coef=abs(dgt(f,g,a,M)); else coef=abs(dgtreal(f,g,a,M)); end; % Cut away zero-extension. coef=coef(:,1:Ndisp); if flags.do_thr % keep only the largest coefficients. coef=largestr(coef,kv.thr); end if flags.do_nf coef=plotdgt(coef,a,'argimport',flags,kv); else coef=plotdgtreal(coef,a,M,'argimport',flags,kv); end; if nargout>0 varargout={coef}; end; ltfat/inst/gabor/dwilt2.m0000664000175000017500000000741512612404256015227 0ustar susnaksusnakfunction [c,Ls]=dwilt2(f,g1,p3,p4,p5) %-*- texinfo -*- %@deftypefn {Function} dwilt2 %@verbatim %DWILT2 2D Discrete Wilson transform % Usage: c=dwilt2(f,g,M); % c=dwilt2(f,g1,g2,[M1,M2]); % c=dwilt2(f,g1,g2,[M1,M2],[L1,L2]); % [c,Ls]=dwilt2(f,g1,g2,[M1,M2],[L1,L2]); % % Input parameters: % f : Input data, matrix. % g,g1,g2 : Window functions. % M,M1,M2 : Number of bands. % L1,L2 : Length of transform to do. % Output parameters: % c : array of coefficients. % Ls : Original size of input matrix. % % DWILT2(f,g,M) calculates a two dimensional discrete Wilson transform % of the input signal f using the window g and parameter M along each % dimension. % % For each dimension, the length of the transform will be the smallest % possible that is larger than the length of the signal along that dimension. % f will be appropriately zero-extended. % % All windows must be whole-point even. % % DWILT2(f,g,M,L) computes a Wilson transform as above, but does % a transform of length L along each dimension. f will be cut or % zero-extended to length L before the transform is done. % % [c,Ls]=dwilt(f,g,M) or [c,Ls]=dwilt(f,g,M,L) additionally returns the % length of the input signal f. This is handy for reconstruction. % % c=DWILT2(f,g1,g2,M) makes it possible to use a different window along the % two dimensions. % % The parameters L, M and Ls can also be vectors of length 2. In % this case the first element will be used for the first dimension and the % second element will be used for the second dimension. % % The output c has 4 or 5 dimensions. The dimensions index the % following properties: % % 1. Number of translations along 1st dimension of input. % % 2. Number of channels along 1st dimension of input % % 3. Number of translations along 2nd dimension of input. % % 4. Number of channels along 2nd dimension of input % % 5. Plane number, corresponds to 3rd dimension of input. % % Examples: % --------- % % The following example visualize the DWILT2 coefficients of a test % image. For clarity, only the 50 dB largest coefficients are show: % % c=dwilt2(cameraman,'itersine',16); % c=reshape(c,256,256); % % figure(1); % imagesc(cameraman), colormap(gray), axis('image'); % % figure(2); % cc=dynlimit(20*log10(abs(c)),50); % imagesc(cc), colormap(flipud(bone)), axis('image'), colorbar; % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/dwilt2.html} %@seealso{dwilt, idwilt2, dgt2, wildual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. error(nargchk(3,5,nargin)); L=[]; if prod(size(p3))>2 % Two windows was specified. g2=p3; M=p4; if nargin==5 L=p5; end; else g2=g1; M=p3; if nargin==4 L=p4; end; end; if isempty(L) L1=[]; L2=[]; else L1=L(1); L2=L(2); end; % Expand M if necessary to two elements M=bsxfun(@times,M,[1 1]); Ls=size(f); Ls=Ls(1:2); c=dwilt(f,g1,M(1),L1); c=dwilt(c,g2,M(2),L2,'dim',3); ltfat/inst/gabor/gabprojdual.m0000664000175000017500000000711412612404256016310 0ustar susnaksusnakfunction gd=gabprojdual(gm,g,a,M,varargin); %-*- texinfo -*- %@deftypefn {Function} gabprojdual %@verbatim %GABPROJDUAL Gabor Dual window by projection % Usage: gd=gabprojdual(gm,g,a,M) % gd=gabprojdual(gm,g,a,M,L) % % Input parameters: % gm : Window to project. % g : Window function. % a : Length of time shift. % M : Number of modulations. % L : Length of transform to consider % Output parameters: % gd : Dual window. % % GABPROJDUAL(gm,g,a,M) calculates the dual window of the Gabor frame given % by g, a and M closest to gm measured in the l^2 norm. The % function projects the suggested window gm onto the subspace of % admissable dual windows, hence the name of the function. % % GABPROJDUAL(gm,g,a,M,L) first extends the windows g and gm to % length L. % % GABPROJDUAL(...,'lt',lt) does the same for a non-separable lattice % specified by lt. Please see the help of MATRIX2LATTICETYPE for a % precise description of the parameter lt. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabprojdual.html} %@seealso{gabdual, gabtight, gabdualnorm, fir2long} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.L=[]; definput.keyvals.lt=[0 1]; definput.flags.phase={'freqinv','timeinv'}; [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); %% ------ step 2: Verify a, M and L if isempty(L) % Minimum transform length by default. Ls=1; % Use the window lengths, if any of them are numerical if isnumeric(g) Ls=max(length(g),Ls); end; if isnumeric(gm) Ls=max(length(gm),Ls); end; % ----- step 2b : Verify a, M and get L from the window length ---------- L=dgtlength(Ls,a,M,kv.lt); else % ----- step 2a : Verify a, M and get L Luser=dgtlength(L,a,M,kv.lt); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i. See the help of DGTLENGTH for the requirements.'],... upper(mfilename),L,Luser) end; end; [g, info_g] = gabwin(g, a,M,L,kv.lt,'callfun',upper(mfilename)); [gm,info_gm] = gabwin(gm,a,M,L,kv.lt,'callfun',upper(mfilename)); % gm must have the correct length, otherwise dgt will zero-extend it % incorrectly using postpad instead of fir2long gm=fir2long(gm,L); % Calculate the canonical dual. gamma0=gabdual(g,a,M,'lt',kv.lt); % Get the residual gres=gm-gamma0; % Calculate parts that lives in span of adjoint lattice. if isreal(gres) && isreal(gamma0) && isreal(g) && kv.lt(2)<=2 gk=idgtreal(dgtreal(gres,gamma0,M,a,'lt',kv.lt),g,M,a,'lt',kv.lt)*M/a; else gk=idgt(dgt(gres,gamma0,M,a,'lt',kv.lt),g,M,'lt',kv.lt)*M/a; end; % Construct dual window gd=gamma0+(gres-gk); ltfat/inst/gabor/iwmdct.m0000664000175000017500000000652212612404256015307 0ustar susnaksusnakfunction [f,g]=iwmdct(c,g,Ls) %-*- texinfo -*- %@deftypefn {Function} iwmdct %@verbatim %IWMDCT Inverse MDCT % Usage: f=iwmdct(c,g); % f=iwmdct(c,g,Ls); % % Input parameters: % c : M*N array of coefficients. % g : Window function. % Ls : Final length of function (optional) % Output parameters: % f : Input data % % IWMDCT(c,g) computes an inverse windowed MDCT with window g. The % number of channels is deduced from the size of the coefficient array c. % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of WILWIN for more details. % % IWMDCT(f,g,Ls) does the same, but cuts or zero-extends the final % result to length Ls. % % [f,g]=IWMDCT(...) additionally outputs the window used in the % transform. This is usefull if the window was generated from a % description in a string or cell array. % % % References: % H. Boelcskei and F. Hlawatsch. Oversampled Wilson-type cosine modulated % filter banks with linear phase. In Asilomar Conf. on Signals, Systems, % and Computers, pages 998-1002, nov 1996. % % H. S. Malvar. Signal Processing with Lapped Transforms. Artech House % Publishers, 1992. % % J. P. Princen and A. B. Bradley. Analysis/synthesis filter bank design % based on time domain aliasing cancellation. IEEE Transactions on % Acoustics, Speech, and Signal Processing, ASSP-34(5):1153-1161, 1986. % % J. P. Princen, A. W. Johnson, and A. B. Bradley. Subband/transform % coding using filter bank designs based on time domain aliasing % cancellation. Proceedings - ICASSP, IEEE International Conference on % Acoustics, Speech and Signal Processing, pages 2161-2164, 1987. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/iwmdct.html} %@seealso{wmdct, wilwin, dgt, wildual, wilorth} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_WMDCT error(nargchk(2,3,nargin)); wasrow=0; if isnumeric(g) if size(g,2)>1 if size(g,1)>1 error('g must be a vector'); else % g was a row vector. g=g(:); % If the input window is a row vector, and the dimension of c is % equal to two, the output signal will also % be a row vector. if ndims(c)==2 wasrow=1; end; end; end; end; M=size(c,1); N=size(c,2); W=size(c,3); a=M; L=M*N; assert_L(L,0,L,a,2*M,'IWMDCT'); g=wilwin(g,M,L,'IWMDCT'); f=comp_idwiltiii(c,g); % Check if Ls was specified. if nargin==3 f=postpad(f,Ls); else Ls=L; end; f=comp_sigreshape_post(f,Ls,wasrow,[0; W]); ltfat/inst/gabor/gabreassignadjust.m0000664000175000017500000001421312612404256017514 0ustar susnaksusnakfunction sr=gabreassignadjust(s,pderivs,a,varargin) %-*- texinfo -*- %@deftypefn {Function} gabreassignadjust %@verbatim %GABREASSIGNADJUST Adjustable reassignment of a time-frequency distribution % Usage: sr = gabreassignadjust(s,pderivs,a,mu); % % GABREASSIGNADJUST(s,pderivs,a,mu) reassigns the values of the positive % time-frequency distribution s using first and second order phase % derivatives given by pderivs and parameter mu*>0. % The lattice is determined by the time shift a and the number of % channels deduced from the size of s. % % pderivs is a cell array of phase derivatives which can be obtained % as follows: % % pderivs = gabphasederiv({'t','f','tt','ff','tf'},...,'relative'); % % Please see help of GABPHASEDERIV for description of the missing % parameters. % % gabreassign(s,pderivs,a,mu,despeckle) works as above, but some % coeficients are removed prior to the reassignment process. More % precisely a mixed phase derivative pderivs{5} is used to determine % which coefficients m,n belong to sinusoidal components (such that % abs(1+pderivs{5}(m,n)) is close to zero) and to impulsive % components (such that abs(pderivs{5}(m,n)) is close to zero). % Parameter despeckle determines a threshold on the previous quantities % such that coefficients with higher associated values are set to zeros. % % Algorithm % --------- % % The routine uses the adjustable reassignment presented in the % references. % % Examples: % --------- % % The following example demonstrates how to manually create a % reassigned spectrogram.: % % % Compute the phase derivatives % a=4; M=100; % [pderivs, c] = gabphasederiv({'t','f','tt','ff','tf'},'dgt',bat,'gauss',a,M,'relative'); % % % Reassignemt parameter % mu = 0.1; % % Perform the actual reassignment % sr = gabreassignadjust(abs(c).^2,pderivs,a,mu); % % % Display it using plotdgt % plotdgt(sr,a,143000,50); % % % References: % F. Auger, E. Chassande-Mottin, and P. Flandrin. On phase-magnitude % relationships in the short-time fourier transform. Signal Processing % Letters, IEEE, 19(5):267-270, May 2012. % % F. Auger, E. Chassande-Mottin, and P. Flandrin. Making reassignment % adjustable: The Levenberg-Marquardt approach. In Acoustics, Speech and % Signal Processing (ICASSP), 2012 IEEE International Conference on, % pages 3889-3892, March 2012. % % Z. Průša. STFT and DGT phase conventions and phase derivatives % interpretation. Technical report, Acoustics Research Institute, % Austrian Academy of Sciences, 2015. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabreassignadjust.html} %@seealso{gabphasederiv, gabreassign} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard, 2008; Zdeněk Průša 2015 thisname = upper(mfilename); complainif_notenoughargs(nargin,3,thisname); complainif_notposint(a,'a',thisname); definput.keyvals.mu=0; definput.keyvals.despeckle=0; [~,~,mu,despeckle] = ltfatarghelper({'mu','despeckle'},definput,varargin); if ~(isscalar(mu) && mu>=0) error('%s: mu must be a real positive number.',thisname); end if ~(isscalar(despeckle) && despeckle>=0) error('%s: despeckle must be a real positive number.',thisname); end [M,N,W] = size(s); if W>1 error(['%s: c must be 2D matrix.'],thisname); end if ~(iscell(pderivs) && numel(pderivs) == 5) error(['%s: pderiv must be a cell array of phase derivatives in ',... 'the following order t,f,tt,ff,tf.'],thisname); end % Basic checks if any(cellfun(@(el) isempty(el) || ~isnumeric(el),{s,pderivs{:}})) error(['%s: s and elements of the cell array pderivs must be ',... 'non-empty and numeric.'],upper(mfilename)); end % Check if argument sizes are consistent sizes = cellfun(@size,pderivs,'UniformOutput',0); if ~isequal(size(s),sizes{:}) error(['%s: s and all elements of the cell array pderivs must ',... 'have the same size.'], upper(mfilename)); end % Check if any argument is not real if any(cellfun(@(el) ~isreal(el),{s,pderivs{:}})) error('%s: s and all elements of the cell array pderivs must be real.',... upper(mfilename)); end if any(s<0) error('%s: s must contain positive numbers only.',... upper(mfilename)); end [tgrad,fgrad,ttgrad,ffgrad,tfgrad] = deal(pderivs{:}); if despeckle~=0 % Removes coefficients which are neither sinusoidal component or % impulse component based on the mixed derivative. % How reassigned time position changes over time thatdt = -tfgrad; % How reassigned frequency position changes along frequency ohatdo = 1+tfgrad; % Only coefficients with any of the previous lower than despeckle is % kept. s(~(abs(ohatdo). % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Assert correct input. error(nargchk(2,4,nargin)); if nargin==2 L=[]; end; % Basic discovery: Some windows depend on L, and some windows help define % L, so the calculation of L is window dependant. % Default values. info.gauss=0; info.wasrow=0; info.isfir=0; info.istight=0; info.isdual=0; % Manually get the list of window names definput=arg_firwin(struct); firwinnames = definput.flags.wintype; % Create window if string was given as input. if ischar(g) winname=lower(g); switch(winname) case {'pgauss','gauss'} complain_L(L,callfun); g=comp_pgauss(L,2*M*M/L,0,0); info.gauss=1; info.tfr=2*M*M/L; case {'psech','sech'} complain_L(L,callfun); g=psech(L,2*M*M/L); info.tfr=a*M/L; case {'dualgauss','gaussdual'} complain_L(L,callfun); g=comp_pgauss(L,2*M*M/L,0,0); g=wildual(g,M); info.isdual=1; info.tfr=a*M/L; case {'tight'} complain_L(L,callfun); g=wilorth(M,L); info.tfr=2*M*M/L; info.istight=1; case firwinnames [g,firinfo]=firwin(winname,2*M,'2'); info.isfir=1; if firinfo.issqpu info.istight=1; end; otherwise error('%s: Unknown window type: %s',callfun,winname); end; end; if iscell(g) if isempty(g) || ~ischar(g{1}) error('First element of window cell array must be a character string.'); end; winname=lower(g{1}); switch(winname) case {'pgauss','gauss'} complain_L(L,callfun); [g,info.tfr]=pgauss(L,g{2:end}); info.gauss=1; case {'psech','sech'} complain_L(L,callfun); [g,info.tfr]=psech(L,g{2:end}); case {'dual'} gorig = g{2}; [g,info.auxinfo] = wilwin(gorig,M,L,callfun); g = wildual(g,M,L); % gorig can be string or cell array if info.auxinfo.isfir && test_isfir(gorig,M) info.isfir = 1; end info.isdual=1; case {'tight'} gorig = g{2}; [g,info.auxinfo] = wilwin(g{2},M,L,callfun); g = wilorth(g,M,L); % gorig can be string or cell array if info.auxinfo.isfir && test_isfir(gorig,M) info.isfir = 1; end info.istight=1; case firwinnames g=firwin(winname,g{2},'energy',g{3:end}); info.isfir=1; otherwise error('Unsupported window type.'); end; end; if isnumeric(g) if size(g,2)>1 if size(g,1)==1 % g was a row vector. g=g(:); info.wasrow=1; end; end; end; if rem(length(g),2*M)~=0 % Zero-extend the window to a multiple of 2*M g=fir2long(g,ceil(length(g)/(2*M))*2*M); end; % Information to be determined post creation. info.wasreal = isreal(g); info.gl = length(g); if (~isempty(L) && (info.gl1 && isnumeric(gorig{2}) && gorig{2}<=2*M... || ischar(gorig) isfir = 1; else isfir = 0; end ltfat/inst/gabor/resgram.m0000664000175000017500000001730112612404256015455 0ustar susnaksusnakfunction varargout=resgram(f,varargin) %-*- texinfo -*- %@deftypefn {Function} resgram %@verbatim %RESGRAM Reassigned spectrogram plot % Usage: resgram(f,op1,op2, ... ); % resgram(f,fs,op1,op2, ... ); % % RESGRAM(f) plots a reassigned spectrogram of f. % % RESGRAM(f,fs) does the same for a signal with sampling rate fs* % (sampled with fs samples per second). % % Because reassigned spectrograms can have an extreme dynamical range, % consider always using the 'dynrange' or 'clim' options (see below) % in conjunction with the 'db' option (on by default). An example: % % resgram(greasy,16000,'dynrange',70); % % This will produce a reassigned spectrogram of the GREASY signal % without drowning the interesting features in noise. % % C=RESGRAM(f, ... ) returns the image to be displayed as a matrix. Use this % in conjunction with imwrite etc. These coefficients are *only* intended to % be used by post-processing image tools. Reassignment should be done % using the GABREASSIGN function instead. % % RESGRAM accepts the following additional arguments: % % % 'dynrange',r Limit the dynamical range to r by using a colormap in % the interval [chigh-r,chigh], where chigh is the highest % value in the plot. The default value of [] means to not % limit the dynamical range. % % 'db' Apply 20*log10 to the coefficients. This makes it possible to % see very weak phenomena, but it might show too much noise. A % logarithmic scale is more adapted to perception of sound. % This is the default. % % 'sharp',alpha % Set the sharpness of the plot. If alpha=0 the regular % spectrogram is obtained. alpha=1 means full % reassignment. Anything in between will produce a partially % sharpened picture. Default is alpha=1. % % 'lin' Show the energy of the coefficients on a linear scale. % % 'tfr',v Set the ratio of frequency resolution to time resolution. % A value v=1 is the default. Setting v>1 will give better % frequency resolution at the expense of a worse time % resolution. A value of 0. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: NA % REFERENCE: NA % BUG: Setting the sharpness different from 1 produces a black line in the % middle of the plot. if nargin<1 error('Too few input arguments.'); end; if sum(size(f)>1)>1 error('Input must be a vector.'); end; definput.import={'ltfattranslate','normalize','tfplot'}; % Define initial value for flags and key/value pairs. definput.flags.wlen={'nowlen','wlen'}; definput.flags.thr={'nothr','thr'}; definput.flags.tc={'notc','tc'}; definput.flags.plottype={'image','contour','mesh','pcolor'}; % Override the setting from tfplot, because SGRAM does not support the % 'dbsq' setting (it does not make sense). definput.flags.log={'db','lin'}; if isreal(f) definput.flags.posfreq={'posfreq','nf'}; else definput.flags.posfreq={'nf','posfreq'}; end; definput.keyvals.sharp=1; definput.keyvals.tfr=1; definput.keyvals.wlen=0; definput.keyvals.thr=0; definput.keyvals.fmax=[]; definput.keyvals.xres=800; definput.keyvals.yres=600; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); if (kv.sharp<0 || kv.sharp >1) error(['RESGRAM: Sharpness parameter must be between (including) ' ... '0 and 1']); end; % Downsample if ~isempty(kv.fmax) if ~isempty(kv.fs) resamp=kv.fmax*2/fs; else resamp=kv.fmax*2/length(f); end; f=fftresample(f,round(length(f)*resamp)); kv.fs=2*kv.fmax; end; Ls=length(f); if flags.do_posfreq kv.yres=2*kv.yres; end; try [a,M,L,N,Ndisp]=gabimagepars(Ls,kv.xres,kv.yres); catch err=lasterror; if strcmp(err.identifier,'LTFAT:noframe') error(sprintf(['The signal is too long. RESGRAM cannot visualize all the details.\n' ... 'Try a shorter signal or increase the image resolution by calling:\n\n' ... ' sgram(...,''xres'',xres,''yres'',yres);\n\n' ... 'for larger values of xres and yres.\n'... 'The current values are:\n xres=%i\n yres=%i'],kv.xres,kv.yres)); else rethrow(err); end; end; % Set an explicit window length, if this was specified. if flags.do_wlen kv.tfr=kv.wlen^2/L; end; g={'gauss',kv.tfr,flags.norm}; [tgrad,fgrad,c]=gabphasegrad('dgt',f,g,a,M); coef=gabreassign(abs(c).^2,kv.sharp*tgrad,kv.sharp*fgrad,a); % Cut away zero-extension. coef=coef(:,1:Ndisp); if flags.do_thr % keep only the largest coefficients. coef=largestr(coef,kv.thr); end if flags.do_posfreq coef=coef(1:floor(M/2)+1,:); plotdgtreal(coef,a,M,'argimport',flags,kv); else plotdgt(coef,a,'argimport',flags,kv); end; if nargout>0 varargout={coef}; end; ltfat/inst/gabor/dgtlength.m0000664000175000017500000000734312612404256016002 0ustar susnaksusnakfunction [L,tfr]=dgtlength(Ls,a,M,varargin); %-*- texinfo -*- %@deftypefn {Function} dgtlength %@verbatim %DGTLENGTH DGT length from signal % Usage: L=dgtlength(Ls,a,M); % L=dgtlength(Ls,a,M,lt); % % DGTLENGTH(Ls,a,M) returns the length of a Gabor system that is long % enough to expand a signal of length Ls. Please see the help on % DGT for an explanation of the parameters a and M. % % If the returned length is longer than the signal length, the signal % will be zero-padded by DGT. % % A valid transform length must be divisable by both a and M. This % means that the minumal admissable transform length is : % % Lsmallest = lcm(a,M); % % and all valid transform lengths are multipla of Lsmallest* % % Non-separable lattices: % ----------------------- % % DGTLENGTH(Ls,a,M,lt) does as above for a non-separable lattice with % lattice-type lt. For non-separable lattices, there is the additinal % requirement on the transform length, that the structure of the % lattice must be periodic. This gives a minimal transform length of : % % Lsmallest = lcm(a,M)*lt(2); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/dgtlength.html} %@seealso{dgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; % This function takes some of the same input parameters as DGT. The phase % parameter is ignore, because it does not change the length of the % transform, but is included to not cause problem when dgtlength is % called via framelength. definput.keyvals.lt=[0 1]; definput.flags.phase={'freqinv','timeinv'}; [flags,kv,lt]=ltfatarghelper({'lt'},definput,varargin); if ~isnumeric(M) || ~isscalar(M) error('%s: M must be a scalar',upper(mfilename)); end; if ~isnumeric(a) || ~isscalar(a) error('%s: "a" must be a scalar',upper(mfilename)); end; if rem(M,1)~=0 || M<=0 error('%s: M must be a positive integer',upper(mfilename)); end; if rem(a,1)~=0 || a<=0 error('%s: "a" must be a positive integer',upper(mfilename)); end; if ~isnumeric(Ls) error('%s: Ls must be numeric.',upper(mfilename)); end; if ~isscalar(Ls) error('%s: Ls must a scalar.',upper(mfilename)); end; if nargin<4 Lsmallest=lcm(a,M); else if ~isnumeric(lt) || ~isvector(lt) || length(lt)~=2 error('%s: lt must be a vector of length 2.',upper(mfilename)); end; if (mod(lt(2),1)>0) || lt(2)<=0 error('%s: lt(2) must be a positive integer.',upper(mfilename)); end; if (mod(lt(1),1)>0) || lt(1)<0 || lt(1)>=lt(2) error(['%s: lt(1)=%i must be a positive integer that is larger than 0 but ' ... 'smaller than lt(2)=%i.'],upper(mfilename),lt(1),lt(2)); end; if lt(1)==0 && lt(2)~=1 error('%s: The rectangular lattice can only be specified by lt=[0 1].',upper(mfilename)); end; if gcd(lt(1),lt(2))>1 error('%s: lt(1)/lt(2) must be an irriducible fraction.',upper(mfilename)); end; Lsmallest=lcm(a,M)*lt(2); end; L=ceil(Ls/Lsmallest)*Lsmallest; ltfat/inst/gabor/idgt2.m0000664000175000017500000001014212612404256015022 0ustar susnaksusnakfunction [f]=idgt2(c,g1,p3,p4,p5) %-*- texinfo -*- %@deftypefn {Function} idgt2 %@verbatim %IDGT2 2D Inverse discrete Gabor transform % Usage: f=idgt2(c,g,a); % f=idgt2(c,g1,g2,a); % f=idgt2(c,g1,g2,[a1 a2]); % f=idgt2(c,g,a,Ls); % f=idgt2(c,g1,g2,a,Ls); % f=idgt2(c,g1,g2,[a1 a2],Ls); % % Input parameters: % c : Array of coefficients. % g,g1,g2 : Window function(s). % a,a1,a2 : Length(s) of time shift. % Ls : Length(s) of reconstructed signal (optional). % % Output parameters: % f : Output data, matrix. % % IDGT2(c,g,a,M) will calculate a separable two dimensional inverse % discrete Gabor transformation of the input coefficients c using the % window g and parameters a, along each dimension. The number of channels % is deduced from the size of the coefficients c. % % IDGT2(c,g1,g2,a) will do the same using the window g1 along the first % dimension, and window g2 along the second dimension. % % IDGT2(c,g,a,Ls) or IDGT2(c,g1,g2,a,Ls) will cut the signal to size Ls* % after the transformation is done. % % The parameters a and Ls can also be vectors of length 2. % In this case the first element will be used for the first dimension % and the second element will be used for the second dimension. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/idgt2.html} %@seealso{dgt2, gabdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard error(nargchk(3,5,nargin)); if ndims(c)<4 || ndims(c)>5 error('c must be 4 or 5 dimensional.'); end; doLs=0; switch nargin case 3 g2=g1; a=p3; case 4 if prod(size(p3))>2 % Two windows was specified. g2=p3; a=p4; else g2=g1; a=p3; Ls=p4; doLs=1; end; case 5 g2=p3; a=p4; Ls=p5; doLs=1; end; if size(g1,2)>1 if size(g1,1)>1 error('g1 must be a vector'); else % g1 was a row vector. g1=g1(:); end; end; if size(g2,2)>1 if size(g2,1)>1 error('g2 must be a vector'); else % g2 was a row vector. g2=g2(:); end; end; if prod(size(a))>2 || prod(size(a))==0 error('a must be a scalar or 1x2 vector'); end; if length(a)==2 a1=a(1); a2=a(2); else a1=a; a2=a; end; Lwindow1=size(g1,1); Lwindow2=size(g2,1); M1=size(c,1); N1=size(c,2); M2=size(c,3); N2=size(c,4); W=size(c,5); L1=a1*N1; L2=a2*N2; % Length of window must be dividable by M. % We cannot automically zero-extend the window, as it can % possible break some symmetry properties of the window, and we don't % know which symmetries to preserve. if rem(Lwindow1,M1)~=0 error('Length of window no. 1 must be dividable by M1.') end; if rem(Lwindow2,M2)~=0 error('Length of window no. 2 must be dividable by M2.') end; % --- first dimension % Change c to correct shape. c=reshape(c,M1,N1,M2*N2*W); c=comp_idgt(c,g1,a1,[0 1],0,0); % Check if Ls was specified. if doLs c=postpad(c,Ls(1)); else Ls(1)=L1; end; % Change to correct size c=reshape(c,Ls(1),M2*N2,W); % Exchange first and second dimension. c=permute(c,[2,1,3]); % --- second dimension % Change c to correct shape. c=reshape(c,M2,N2,Ls(1)*W); c=comp_idgt(c,g2,a2,[0 1],0,0); % Check if Ls was specified. if doLs c=postpad(c,Ls(2)); else Ls(2)=L2; end; % Change to correct size c=reshape(c,Ls(2),Ls(1),W); % Exchange first and second dimension. f=permute(c,[2,1,3]); ltfat/inst/gabor/longpar.m0000664000175000017500000000556712612404256015472 0ustar susnaksusnakfunction [L,tfr]=longpar(varargin) %-*- texinfo -*- %@deftypefn {Function} longpar %@verbatim %LONGPAR Parameters for LONG windows % Usage: [L,tfr]=longpar(Ls,a,M); % [L,tfr]=longpar('dgt',Ls,a,M); % [L,tfr]=longpar('dwilt',Ls,M); % [L,tfr]=longpar('wmdct',Ls,M); % % [L,tfr]=LONGPAR(Ls,a,M) or [L,tfr]=LONGPAR('dgt',Ls,a,M) calculates the % minimal transform length L for a DGT of a signal of length Ls with % parameters a and M. L is always larger than Ls. The parameters tfr* % describes the time-to-frequency ratio of the chosen lattice. % % An example can most easily describe the use of LONGPAR. Assume that % we wish to perform Gabor analysis of an input signal f with a % suitable Gaussian window and lattice given by a and M. The following % code will always work: % % Ls=length(f); % [L,tfr]=longpar(Ls,a,M); % g=pgauss(L,tfr); % c=dgt(f,g,a,M); % % [L,tfr]=LONGPAR('dwilt',Ls,M) and [L,tfr]=LONGPAR('wmdct',Ls,M) will % do the same for a Wilson/WMDCT basis with M channels. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/longpar.html} %@seealso{dgt, dwilt, pgauss, psech, pherm} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(3,4,nargin)); if ischar(varargin{1}) ttype=varargin{1}; pstart=2; else ttype='dgt'; pstart=1; end; Ls=varargin{pstart}; if (numel(Ls)~=1 || ~isnumeric(Ls)) error('Ls must be a scalar.'); end; if rem(Ls,1)~=0 error('Ls must be an integer.'); end; switch(lower(ttype)) case 'dgt' if nargin. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard, Jordy van Velthoven (TESTING). % TESTING: TEST_DSFT % REFERENCE: REF_DSFT error(nargchk(1,1,nargin)); D=ndims(F); if (D<2) || (D>3) error('Input must be two/three dimensional.'); end; W=size(F,3); if W==1 F=dft(idft(F).'); else % Apply to set of planes. R1=size(F,1); R2=size(F,2); Fo=zeros(R2,R1,W,assert_classname(F)); for w=1:W Fo(:,:,w)=dft(idft(F(:,:,w).')); end; F=Fo; end; ltfat/inst/gabor/proj_dual.m0000664000175000017500000000627112612404256016000 0ustar susnaksusnakfunction [ sol ] = proj_dual( x,~, param ) %-*- texinfo -*- %@deftypefn {Function} proj_dual %@verbatim %PROJ_DUAL projection onto the dual windows space % Usage: sol=proj_proj(x, ~, param) % [sol, infos]=proj_b2(x, ~, param) % % Input parameters: % x : Input signal. % param : Structure of optional parameters. % Output parameters: % sol : Solution. % infos : Structure summarizing informations at convergence % % PROJ_DUAL(x,~,param) solves: % % sol = argmin_{z} ||x - z||_2^2 s.t. A z=y % % param is a Matlab structure containing the following fields: % % param.y : measurements (default: 0). % % param.A : Matrix (default: Id). % % param.AAtinv : (A A^*)^(-1) Define this parameter to speed up computation. % % param.verbose : 0 no log, 1 a summary at convergence, 2 print main % steps (default: 1) % % % infos is a Matlab structure containing the following fields: % % infos.algo : Algorithm used % % infos.iter : Number of iteration % % infos.time : Time of execution of the function in sec. % % infos.final_eval : Final evaluation of the function % % infos.crit : Stopping critterion used % % infos.residue : Final residue % % % Rem: The input "~" is useless but needed for compatibility issue. % % % References: % M.-J. Fadili and J.-L. Starck. Monotone operator splitting for % optimization problems in sparse recovery. In Image Processing (ICIP), % 2009 16th IEEE International Conference on, pages 1461-1464. IEEE, % 2009. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/proj_dual.html} %@seealso{prox_l2, proj_b1} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % % Author: Nathanael Perraudin % Date: Feb 20, 2013 % % Start the time counter t1 = tic; % Optional input arguments if ~isfield(param, 'y'), param.y = 0; end if ~isfield(param, 'A'), param.A = eye(length(x)); end if ~isfield(param, 'AAtinv'), param.AAtinv=pinv(A*At); end if ~isfield(param, 'verbose'), param.verbose = 1; end % Projection sol = x - param.A'*param.AAtinv*(param.A*x-param.y); crit = 'TOL_EPS'; iter = 0; u = NaN; % Log after the projection onto the L2-ball error=norm(param.y-param.A *sol ); if param.verbose >= 1 fprintf([' Proj. dual windows: ||y-Ax||_2 = %e,', ... ' %s, iter = %i\n'],error , crit, iter); end % Infos about algorithm infos.algo=mfilename; infos.iter=iter; infos.final_eval=error; infos.crit=crit; infos.residue=u; infos.time=toc(t1); end ltfat/inst/gabor/constructphasereal.m0000664000175000017500000000660712612404256017735 0ustar susnaksusnakfunction [c,newphase,tgrad,fgrad]=constructphasereal(s,g,a,M,tol) %-*- texinfo -*- %@deftypefn {Function} constructphasereal %@verbatim %CONSTRUCTPHASEREAL Construct the phase of a DGTREAL % Usage: c=constructphasereal(s,g,a,M); % c=constructphasereal(s,g,a,M,tol); % % CONSTRUCTPHASEREAL(s,g,a,M) will construct a suitable phase for the postive % valued coefficients s. % % If s is the absolute values of the Gabor coefficients of a signal % obtained using the window g, time-shift a and number of channels M, i.e.: % % c=dgtreal(f,g,a,M); % s=abs(c); % % then constuctphasereal(s,g,a,M) will attempt to reconstruct c. % % The window g must be Gaussian, i.e. g must have the value 'gauss' % or be a cell array {'gauss',tfr}. % % CONSTRUCTPHASEREAL(s,g,a,M,tol) does as above, but sets the phase of % coefficients less than tol to random value. % By default, tol has the value 1e-10. % % This function requires a computational subroutine that is only % available in C. Use LTFATMEX to compile it. % % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/constructphasereal.html} %@seealso{dgt, gabphasegrad, ltfatmex} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard, Zdenek Prusa thismfilename = upper(mfilename); complainif_notposint(a,'a',thismfilename); complainif_notposint(M,'M',thismfilename); if ~isnumeric(s) || ~isreal(s) error('%s: *s* must be a real matrix.',thismfilename); end if nargin<5 tol=1e-10; else if ~isscalar(tol) error('%s: *tol* must be scalar.',thismfilename); end end [M2,N,W] = size(s); if W>1 error('%s: *s* must not be 3 dimensional.',thismfilename); end M2true = floor(M/2) + 1; if M2true ~= M2 error('%s: Mismatch between *M* and the size of *s*.',thismfilename); end L=N*a; b=L/M; [~,info]=gabwin(g,a,M,L,'callfun',upper(mfilename)); if ~info.gauss error(['%s: The window must be a Gaussian window (specified ',... 'as a string or as a cell array)'],upper(mfilename)); end % Here we try to avoid calling gabphasegrad as it only works with full % dgts. logs=log(s+realmin); tt=-11; logs(logs. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: TEST_DWILT % REFERENCE: OK error(nargchk(2,3,nargin)); M=size(c,1)/2; N=2*size(c,2); W=size(c,3); a=M; L=M*N; assert_L(L,0,L,a,2*M,'IDWILT'); [g,info]=wilwin(g,M,L,'IDWILT'); wasrow=0; if (ndims(c)==2 && info.wasrow) wasrow=1; end; f=comp_idwilt(c,g); % Check if Ls was specified. if nargin==3 f=postpad(f,Ls); else Ls=L; end; f=comp_sigreshape_post(f,Ls,wasrow,[0; W]); ltfat/inst/gabor/wilframediag.m0000664000175000017500000000326312612404256016452 0ustar susnaksusnakfunction d=wilframediag(g,M,L,varargin) %-*- texinfo -*- %@deftypefn {Function} wilframediag %@verbatim %WILFRAMEDIAG Diagonal of Wilson and WMDCT frame operator % Usage: d=wilframediag(g,M,L); % % Input parameters: % g : Window function. % M : Number of channels. % L : Length of transform to do. % Output parameters: % d : Diagonal stored as a column vector % % WILFRAMEDIAG(g,M,L) computes the diagonal of the Wilson or WMDCT frame % operator with respect to the window g and number of channels M. The % diagonal is stored a as column vector of length L. % % The diagonal of the frame operator can for instance be used as a % preconditioner. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/wilframediag.html} %@seealso{dwilt, wmdct, gabframediag} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; d=gabframediag(g,M,2*M,L)/2; ltfat/inst/gabor/phaseplot.m0000664000175000017500000001306012612404256016012 0ustar susnaksusnakfunction varargout=phaseplot(f,varargin) %-*- texinfo -*- %@deftypefn {Function} phaseplot %@verbatim %PHASEPLOT Phase plot % Usage: phaseplot(f,op1,op2, ... ); % phaseplot(f,fs,op1,op2, ... ); % % PHASEPLOT(f) plots the phase of f using a DGT. % % PHASEPLOT(f,fs) does the same for a signal with sampling rate fs Hz. % % PHASEPLOT should only be used for short signals (shorter than the % resolution of the screen), as there will otherwise be some visual % aliasing, such that very fast changing areas will look very smooth. % PHASEPLOT always calculates the phase of the full time/frequency plane % (as opposed to SGRAM), and you therefore risk running out of memory % for long signals. % % PHASEPLOT takes the following flags at the end of the line of input % arguments: % % 'tfr',v Set the ratio of frequency resolution to time resolution. % A value v=1 is the default. Setting v>1 will give better % frequency resolution at the expense of a worse time % resolution. A value of 0. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: NA if nargin<1 error('Too few input arguments.'); end; if sum(size(f)>1)>1 error('Input must be a vector.'); end; definput.import={'ltfattranslate','normalize','tfplot'}; % Override the setting from tfplot, because phaseplot only uses the 'lin' % plotting. definput.flags.log={'lin'}; definput.importdefaults={'lin'}; % Define initial value for flags and key/value pairs. definput.flags.wlen={'nowlen','wlen'}; definput.flags.tc={'notc','tc'}; definput.flags.fmax={'nofmax','fmax'}; definput.flags.phase={'timeinv','freqinv'}; if isreal(f) definput.flags.posfreq={'posfreq','nf'}; else definput.flags.posfreq={'nf','posfreq'}; end; definput.keyvals.tfr=1; definput.keyvals.wlen=0; definput.keyvals.fmax=[]; definput.keyvals.thr=[]; [flags,kv,fs]=ltfatarghelper({'fs'},definput,varargin); % Downsample if ~isempty(kv.fmax) if ~isempty(fs) resamp=kv.fmax*2/fs; else resamp=kv.fmax*2/length(f); end; f=fftresample(f,round(length(f)*resamp)); kv.fs=2*kv.fmax; end; % Always do the full STFT L=length(f); a=1; b=1; M=L; N=L; % Set an explicit window length, if this was specified. if flags.do_wlen kv.tfr=kv.wlen^2/L; end; g={'gauss',kv.tfr,flags.norm}; if flags.do_nf coef=dgt(f,g,a,M,flags.phase); else coef=dgtreal(f,g,a,M,flags.phase); end; if ~isempty(kv.thr) % keep only the largest coefficients. maxc=max(abs(coef(:))); mask=abs(coef)0 varargout={coef}; end; ltfat/inst/gabor/gaboptdual.m0000664000175000017500000001247112612404256016142 0ustar susnaksusnakfunction [gd,relres,iter]=gaboptdual(g,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} gaboptdual %@verbatim %GABOPTDUAL Compute dual window % Usage: gd=gaboptdual(g,a,M); % gd=gaboptdual(g,a,M, varagin); % % Input parameters: % g : Window function % a : Time shift % M : Number of Channels % % Output parameters: % gd : Dual window % % GABOPTDUAL(g,a,M) computes a window gd which is an % approximate dual window of the Gabor system defined by g, a and % M. % % This function solve a convex optimization problem that can be written % as: % % gd = argmin_x || alpha x||_1 + || beta Fx||_1 % % + || omega (x -g_l) ||_2^2 + delta || x ||_S0 % % + gamma || nabla F x ||_2^2 + mu || nabla x ||_2^2 % % such that x is a dual windows of g % % *Note**: This function require the unlocbox. You can download it at % http://unlocbox.sourceforge.net % % The function uses an iterative algorithm to compute the approximate % optimized dual. The algorithm can be controlled by the following flags: % % 'alpha',alpha Weight in time. If it is a scalar, it represent the % weights of the entire L1 function in time. If it is a % vector, it is the associated weight assotiated to each % component of the L1 norm (length: Ldual). % Default value is alpha=0. % *Warning**: this value should not be too big in order to % avoid the the L1 norm proximal operator kill the signal. % No L1-time constraint: alpha=0 % % 'beta',beta Weight in frequency. If it is a scalar, it represent the % weights of the entire L1 function in frequency. If it is a % vector, it is the associated weight assotiated to each % component of the L1 norm in frequency. (length: Ldual). % Default value is beta=0. % *Warning**: this value should not be too big in order to % avoid the the L1 norm proximal operator kill the signal. % No L1-frequency constraint: beta=0 % % 'omega',omega Weight in time of the L2-norm. If it is a scalar, it represent the % weights of the entire L2 function in time. If it is a % vector, it is the associated weight assotiated to each % component of the L2 norm (length: Ldual). % Default value is omega=0. % No L2-time constraint: omega=0 % % 'glike',g_l g_l is a windows in time. The algorithm try to shape % the dual window like g_l. Normalization of g_l is done % automatically. To use option omega should be different % from 0. By default g_d=0. % % 'mu',mu Weight of the smooth constraint Default value is 1. % No smooth constraint: mu=0 % % 'gamma',gamma Weight of the smooth constraint in frequency. Default value is 1. % No smooth constraint: gamma=0 % % 'delta',delta Weight of the S0-norm. Default value is 0. % No S0-norm: delta=0 % % 'dual' Look for a dual windows (default) % % 'painless' Construct a starting guess using a painless-case % approximation. This is the default % % 'zero' Choose a starting guess of zero. % % 'rand' Choose a random starting phase. % % 'tol',t Stop if relative residual error is less than the % specified tolerance. % % 'maxit',n Do at most n iterations. default 200 % % 'print' Display the progress. % % 'debug' Display all the progresses. % % 'quiet' Don't print anything, this is the default. % % 'fast' Fast algorithm, this is the default. % % 'slow' Safer algorithm, you can try this if the fast algorithm % is not working. Before using this, try to iterate more. % % 'printstep',p If 'print' is specified, then print every p'th % iteration. Default value is p=10; % % 'hardconstraint' Force the projection at the end (default) % % 'softconstaint' Do not force the projection at the end % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gaboptdual.html} %@seealso{gabfirdual, gabdual, gabtight, gabopttight, gaboptdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Nathanael Perraudin % Date : 18 Feb 2014 if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end; [gd,relres,iter]=gabconvexopt(g,a,M,varargin{:}); ltfat/inst/gabor/dwilt.m0000664000175000017500000001371712612404256015147 0ustar susnaksusnakfunction [c,Ls,g]=dwilt(f,g,M,varargin) %-*- texinfo -*- %@deftypefn {Function} dwilt %@verbatim %DWILT Discrete Wilson transform % Usage: c=dwilt(f,g,M); % c=dwilt(f,g,M,L); % [c,Ls]=dwilt(...); % % Input parameters: % f : Input data % g : Window function. % M : Number of bands. % L : Length of transform to do. % Output parameters: % c : 2M xN array of coefficients. % Ls : Length of input signal. % % DWILT(f,g,M) computes a discrete Wilson transform with M bands and % window g. % % The length of the transform will be the smallest possible that is % larger than the signal. f will be zero-extended to the length of the % transform. If f is a matrix, the transformation is applied to each column. % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of WILWIN for more details. % % DWILT(f,g,M,L) computes the Wilson transform as above, but does a % transform of length L. f will be cut or zero-extended to length L* % before the transform is done. % % [c,Ls]=DWILT(f,g,M) or [c,Ls]=DWILT(f,g,M,L) additionally return the % length of the input signal f. This is handy for reconstruction: % % [c,Ls]=dwilt(f,g,M); % fr=idwilt(c,gd,M,Ls); % % will reconstruct the signal f no matter what the length of f is, provided % that gd is a dual Wilson window of g. % % [c,Ls,g]=DWILT(...) additionally outputs the window used in the % transform. This is useful if the window was generated from a description % in a string or cell array. % % A Wilson transform is also known as a maximally decimated, even-stacked % cosine modulated filter bank. % % Use the function WIL2RECT to visualize the coefficients or to work % with the coefficients in the TF-plane. % % Assume that the following code has been executed for a column vector f*: % % c=dwilt(f,g,M); % Compute a Wilson transform of f. % N=size(c,2)*2; % Number of translation coefficients. % % The following holds for m=0,...,M-1 and n=0,...,N/2-1: % % If m=0: % % L-1 % c(m+1,n+1) = sum f(l+1)*g(l-2*n*M+1) % l=0 % % % If m is odd and less than M % % L-1 % c(m+1,n+1) = sum f(l+1)*sqrt(2)*sin(pi*m/M*l)*g(k-2*n*M+1) % l=0 % % L-1 % c(m+M+1,n+1) = sum f(l+1)*sqrt(2)*cos(pi*m/M*l)*g(k-(2*n+1)*M+1) % l=0 % % If m is even and less than M % % L-1 % c(m+1,n+1) = sum f(l+1)*sqrt(2)*cos(pi*m/M*l)*g(l-2*n*M+1) % l=0 % % L-1 % c(m+M+1,n+1) = sum f(l+1)*sqrt(2)*sin(pi*m/M*l)*g(l-(2*n+1)*M+1) % l=0 % % if m=M and M is even: % % L-1 % c(m+1,n+1) = sum f(l+1)*(-1)^(l)*g(l-2*n*M+1) % l=0 % % else if m=M and M is odd % % L-1 % c(m+1,n+1) = sum f(l+1)*(-1)^l*g(l-(2*n+1)*M+1) % l=0 % % % References: % H. Boelcskei, H. G. Feichtinger, K. Groechenig, and F. Hlawatsch. % Discrete-time Wilson expansions. In Proc. IEEE-SP 1996 Int. Sympos. % Time-Frequency Time-Scale Analysis, june 1996. % % I. Daubechies, S. Jaffard, and J. Journe. A simple Wilson orthonormal % basis with exponential decay. SIAM J. Math. Anal., 22:554-573, 1991. % % Y.-P. Lin and P. Vaidyanathan. Linear phase cosine modulated maximally % decimated filter banks with perfectreconstruction. IEEE Trans. Signal % Process., 43(11):2525-2539, 1995. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/dwilt.html} %@seealso{idwilt, wilwin, wil2rect, dgt, wmdct, wilorth} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: TEST_DWILT % REFERENCE: REF_DWILT if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.L=[]; definput.keyvals.dim=[]; [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); %% ----- step 1 : Verify f and determine its length ------- % Change f to correct shape. [f,dummy,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],kv.dim,upper(mfilename)); %% ------ step 2: Verify a, M and L if isempty(L) % ----- step 2b : Verify a, M and get L from the signal length f---------- L=dwiltlength(Ls,M); else % ----- step 2a : Verify a, M and get L Luser=dwiltlength(L,M); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i. See the help of DWILTLENGTH for the requirements.'],... upper(mfilename),L,Luser); end; end; %% ----- step 3 : Determine the window [g,info]=wilwin(g,M,L,upper(mfilename)); if L1 will give better % frequency resolution at the expense of a worse time % resolution. A value of 0. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % REFERENCE: NA % TESTING: NA if nargin<1 error('Too few input arguments.'); end; if sum(size(f)>1)>1 error('Input must be a vector.'); end; % Define initial value for flags and key/value pairs. definput.flags.wlen={'nowlen','wlen'}; definput.flags.tc={'notc','tc'}; definput.flags.method={'dgt','phase','abs'}; definput.flags.clim={'noclim','clim','climsym'}; if isreal(f) definput.flags.posfreq={'posfreq','nf'}; else definput.flags.posfreq={'nf','posfreq'}; end; definput.keyvals.tfr=1; definput.keyvals.wlen=0; definput.keyvals.thr=[]; definput.keyvals.clim=[0,1]; definput.keyvals.climsym=1; definput.keyvals.fmax=[]; definput.keyvals.xres=800; definput.keyvals.yres=600; definput.keyvals.fs=[]; [flags,kv,fs]=ltfatarghelper({'fs'},definput,varargin); % Override the setting from tfplot, because INSTFREQPLOT does not support the % dB-settings flags.do_lin=1; flags.do_db=0; flags.do_dbsq=0; dofs=~isempty(fs); % Downsample if ~isempty(kv.fmax) if ~isempty(kv.fs) resamp=kv.fmax*2/fs; else resamp=kv.fmax*2/length(f); end; f=fftresample(f,round(length(f)*resamp)); kv.fs=2*kv.fmax; end; Ls=length(f); if flags.do_posfreq kv.yres=2*kv.yres; end; try [a,M,L,N,Ndisp]=gabimagepars(Ls,kv.xres,kv.yres); catch err=lasterror; if strcmp(err.identifier,'LTFAT:noframe') error(sprintf(['The signal is too long. INSTFREQPLOT cannot visualize all the details.\n' ... 'Try a shorter signal or increase the image resolution by calling:\n\n' ... ' sgram(...,''xres'',xres,''yres'',yres);\n\n' ... 'for larger values of xres and yres.\n'... 'The current values are:\n xres=%i\n yres=%i'],kv.xres,kv.yres)); else rethrow(err); end; end; b=L/N; % Set an explicit window length, if this was specified. if flags.do_wlen kv.tfr=kv.wlen^2/L; end; g={'gauss',kv.tfr}; if flags.do_dgt [coef,fgrad,dgtcoef]=gabphasegrad('dgt',f,g,a,M); end; if flags.do_phase dgtcoef=dgt(f,g,a,M); [coef,fgrad]=gabphasegrad('phase',angle(dgtcoef),a); end; if flags.do_abs dgtcoef=dgt(f,g,a,M); [coef,fgrad]=gabphasegrad('abs',abs(dgtcoef),g,a); end; if ~isempty(kv.thr) % keep only the largest coefficients. maxc=max(abs(dgtcoef(:))); mask=abs(dgtcoef)0 varargout={coef}; end; ltfat/inst/gabor/plotwmdct.m0000664000175000017500000000405512612404256016034 0ustar susnaksusnakfunction C=plotwmdct(coef,varargin) %-*- texinfo -*- %@deftypefn {Function} plotwmdct %@verbatim %PLOTWMDCT Plot WMDCT coefficients % Usage: plotwmdct(coef); % plotwmdct(coef,fs); % plotwmdct(coef,fs,dynrange); % % PLOTWMDCT(coef) plots coefficients from WMDCT. % % PLOTWMDCT(coef,fs) does the same assuming a sampling rate of % fs Hz of the original signal. % % PLOTWMDCT(coef,fs,dynrange) additionally limits the dynamic % range. % % C=PLOTWMDCT(...) returns the processed image data used in the % plotting. Inputting this data directly to imagesc or similar % functions will create the plot. This is useful for custom % post-processing of the image data. % % PLOTWMDCT supports all the optional parameters of TFPLOT. Please % see the help of TFPLOT for an exhaustive list. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/plotwmdct.html} %@seealso{wmdct, tfplot, sgram, plotdgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: NA % REFERENCE: NA if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'ltfattranslate','tfplot'}; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); M=size(coef,1); yr=[.5/M, 1-.5/M]; C = tfplot(coef,M,yr,'argimport',flags,kv); if nargout<1 clear C; end ltfat/inst/gabor/plotdwilt.m0000664000175000017500000000525112612404256016040 0ustar susnaksusnakfunction C=plotdwilt(coef,varargin) %-*- texinfo -*- %@deftypefn {Function} plotdwilt %@verbatim %PLOTDWILT Plot DWILT coefficients % Usage: plotdwilt(coef); % plotdwilt(coef,fs); % plotdwilt(coef,fs,dynrange); % % PLOTDWILT(coef) will plot coefficients from DWILT. % % PLOTDWILT(coef,fs) will do the same assuming a sampling rate of fs* % Hz of the original signal. Since a Wilson representation does not % contain coefficients for all positions on a rectangular TF-grid, there % will be visible 'holes' among the lowest (DC) and highest (Nyquist rate) % coefficients. See the help on WIL2RECT. % % PLOTDWILT(coef,fs,dynrange) will additionally limit the dynamic % range. % % C=PLOTDWILT(...) returns the processed image data used in the % plotting. Inputting this data directly to imagesc or similar % functions will create the plot. This is useful for custom % post-processing of the image data. % % PLOTDWILT supports all the optional parameters of TFPLOT. Please % see the help of TFPLOT for an exhaustive list. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/plotdwilt.html} %@seealso{dwilt, tfplot, sgram, wil2rect} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: NA % REFERENCE: NA if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'ltfattranslate','tfplot'}; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); M=size(coef,1)/2; % Find smallest value in the coefficients, because we will be inserting % zeros, which messes up the dynamic range. Set a minimum value of the % dynamic range based on this maxc=max(abs(coef(:))); minc=min(abs(coef(:))); if isempty(kv.dynrange) if flags.do_db kv.dynrange=20*log10(maxc/minc); end; if flags.do_dbsq kv.dynrange=10*log10(maxc/minc); end; end; coef=wil2rect(coef); yr=[0,1]; C=tfplot(coef,M,yr,'argimport',flags,kv); if nargout<1 clear C; end ltfat/inst/gabor/Contents.m0000664000175000017500000001157712612404256015623 0ustar susnaksusnak% LTFAT - Gabor analysis % % Peter L. Soendergaard, 2007 - 2015. % % Basic Time/Frequency analysis % TCONV - Twisted convolution % DSFT - Discrete Symplectic Fourier Transform % ZAK - Zak transform % IZAK - Inverse Zak transform % COL2DIAG - Move columns of a matrix to diagonals % S0NORM - S0-norm % % Gabor systems % DGT - Discrete Gabor transform % IDGT - Inverse discrete Gabor transform % ISGRAM - Iterative reconstruction from spectrogram % ISGRAMREAL - Iterative reconstruction from spectrogram for real-valued signals % DGT2 - 2D Discrete Gabor transform % IDGT2 - 2D Inverse discrete Gabor transform % DGTREAL - DGT for real-valued signals % IDGTREAL - IDGT for real-valued signals % GABWIN - Evaluate Gabor window % PROJKERN - Projection of Gabor coefficients onto kernel space % DGTLENGTH - Length of Gabor system to expand a signal % % Wilson bases and WMDCT % DWILT - Discrete Wilson transform % IDWILT - Inverse discrete Wilson transform % DWILT2 - 2-D Discrete Wilson transform % IDWILT2 - 2-D inverse discrete Wilson transform % WMDCT - Modified Discrete Cosine transform % IWMDCT - Inverse WMDCT % WMDCT2 - 2-D WMDCT % IWMDCT2 - 2-D inverse WMDCT % WIL2RECT - Rectangular layout of Wilson coefficients % RECT2WIL - Inverse of WIL2RECT % WILWIN - Evaluate Wilson window % DWILTLENGTH - Length of Wilson/WMDCT system to expand a signal % % Reconstructing windows % GABDUAL - Canonical dual window % GABTIGHT - Canonical tight window % GABFIRDUAL - FIR optimized dual window % GABOPTDUAL - Optimized dual window % GABFIRTIGHT - FIR optimized tight window % GABOPTTIGHT - Optimized tight window % GABCONVEXOPT - Optimized window % GABPROJDUAL - Dual window by projection % GABMIXDUAL - Dual window by mixing windows % WILORTH - Window of Wilson/WMDCT orthonormal basis % WILDUAL - Riesz dual window of Wilson/WMDCT basis % % Conditions numbers % GABFRAMEBOUNDS - Frame bounds of Gabor system % GABRIESZBOUNDS - Riesz sequence/basis bounds of Gabor system % WILBOUNDS - Frame bounds of Wilson basis % GABDUALNORM - Test if two windows are dual % GABFRAMEDIAG - Diagonal of Gabor frame operator % WILFRAMEDIAG - Diagonal of Wilson/WMDCT frame operator % % Phase gradient methods and reassignment % GABPHASEGRAD - Instantaneous time/frequency from signal % GABPHASEDERIV - Phase derivatives % GABREASSIGN - Reassign positive distribution % GABREASSIGNADJUST - Adjustable t-f reassignment % % Phase reconstruction % CONSTRUCTPHASE - Phase construction from abs. values of DGT % CONSTRUCTPHASEREAL - CONSTRUCTPHASE for DGTREAL % % Phase conversions % PHASELOCK - Phase Lock Gabor coefficients to time % PHASEUNLOCK - Undo phase locking % SYMPHASE - Convert to symmetric phase % % Support for non-separable lattices % MATRIX2LATTICETYPE - Matrix form to standard lattice description % LATTICETYPE2MATRIX - Standard lattice description to matrix form % SHEARFIND - Shears to transform a general lattice to a separable % NOSHEARLENGTH - Next transform side not requiring a frequency side shear % % Plots % TFPLOT - Plot coefficients on the time-frequency plane % PLOTDGT - Plot DGT coefficients % PLOTDGTREAL - Plot DGTREAL coefficients % PLOTDWILT - Plot DWILT coefficients % PLOTWMDCT - Plot WMDCT coefficients % SGRAM - Spectrogram based on DGT % GABIMAGEPARS - Choose parameters for nice Gabor image % RESGRAM - Reassigned spectrogram % INSTFREQPLOT - Plot of the instantaneous frequency % PHASEPLOT - Plot of STFT phase % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % Url: http://ltfat.github.io/doc/gabor/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/gabor/idgtreal.m0000664000175000017500000001325712612404256015616 0ustar susnaksusnakfunction [f,g]=idgtreal(coef,g,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} idgtreal %@verbatim %IDGTREAL Inverse discrete Gabor transform for real-valued signals % Usage: f=idgtreal(c,g,a,M); % f=idgtreal(c,g,a,M,Ls); % % Input parameters: % c : Array of coefficients. % g : Window function. % a : Length of time shift. % M : Number of channels. % Ls : length of signal. % Output parameters: % f : Signal. % % IDGTREAL(c,g,a,M) computes the Gabor expansion of the input coefficients % c with respect to the real-valued window g, time shift a and number of % channels M. c is assumed to be the positive frequencies of the Gabor % expansion of a real-valued signal. % % It must hold that size(c,1)==floor(M/2)+1. Note that since the % correct number of channels cannot be deduced from the input, IDGTREAL % takes an additional parameter as opposed to IDGT. % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of GABWIN for more details. % % IDGTREAL(c,g,a,M,Ls) does as above but cuts or extends f to length Ls. % % [f,g]=IDGTREAL(...) additionally outputs the window used in the % transform. This is usefull if the window was generated from a description % in a string or cell array. % % For perfect reconstruction, the window used must be a dual window of the % one used to generate the coefficients. % % If g is a row vector, then the output will also be a row vector. If c is % 3-dimensional, then IDGTREAL will return a matrix consisting of one column % vector for each of the TF-planes in c. % % See the help on IDGT for the precise definition of the inverse Gabor % transform. % % IDGTREAL takes the following flags at the end of the line of input % arguments: % % 'freqinv' Use a frequency-invariant phase. This is the default % convention described in the help for DGT. % % 'timeinv' Use a time-invariant phase. This convention is typically % used in filter bank algorithms. % % Examples: % --------- % % The following example demostrates the basic pricinples for getting % perfect reconstruction (short version): % % f=greasy; % test signal % a=32; % time shift % M=64; % frequency shift % gs={'blackman',128}; % synthesis window % ga={'dual',gs}; % analysis window % % [c,Ls]=dgtreal(f,ga,a,M); % analysis % % % ... do interesting stuff to c at this point ... % % r=idgtreal(c,gs,a,M,Ls); % synthesis % % norm(f-r) % test % % The following example does the same as the previous one, with an % explicit construction of the analysis and synthesis windows: % % f=greasy; % test signal % a=32; % time shift % M=64; % frequency shift % Ls=length(f); % signal length % % % Length of transform to do % L=dgtlength(Ls,a,M); % % % Analysis and synthesis window % gs=firwin('blackman',128); % ga=gabdual(gs,a,M,L); % % c=dgtreal(f,ga,a,M); % analysis % % % ... do interesting stuff to c at this point ... % % r=idgtreal(c,gs,a,M,Ls); % synthesis % % norm(f-r) % test % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/idgtreal.html} %@seealso{idgt, gabwin, gabdual, dwilt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: TEST_DGT % REFERENCE: OK % Check input paramameters. if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end; if prod(size(g))==1 error('g must be a vector (you probably forgot to supply the window function as input parameter.)'); end; % Define initial value for flags and key/value pairs. definput.keyvals.Ls=[]; definput.keyvals.lt=[0 1]; definput.flags.phase={'freqinv','timeinv'}; [flags,kv,Ls]=ltfatarghelper({'Ls'},definput,varargin); N=size(coef,2); W=size(coef,3); % Make a dummy call to test the input parameters Lsmallest=dgtlength(1,a,M,kv.lt); M2=floor(M/2)+1; if M2~=size(coef,1) error('Mismatch between the specified number of channels and the size of the input coefficients.'); end; L=N*a; if rem(L,Lsmallest)>0 error('%s: Invalid size of coefficient array.',upper(mfilename)); end; if kv.lt(2)>2 error('Only rectangular or quinqux lattices are supported.'); end; if kv.lt(2)~=1 && flags.do_timeinv error(['%s: Time-invariant phase for quinqux lattice is not ',... 'supported.'],upper(mfilename)); end %% ----- step 3 : Determine the window [g,info]=gabwin(g,a,M,L,kv.lt,'callfun',upper(mfilename)); if L. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: TEST_ZAK % REFERENCE: REF_ZAK error(nargchk(2,2,nargin)); if (prod(size(a))~=1 || ~isnumeric(a)) error([callfun,': a must be a scalar']); end; if rem(a,1)~=0 error([callfun,': a must be an integer']); end; if size(f,2)>1 && size(f,1)==1 % f was a row vector. f=f(:); end; L=size(f,1); W=size(f,2); N=L/a; if rem(N,1)~=0 error('The parameter for ZAK must divide the length of the signal.'); end; c=zeros(a,N,W,assert_classname(f)); for ii=1:W % Compute it, it can be done in one line! % We use a normalized DFT, as this gives the correct normalization % of the Zak transform. c(:,:,ii)=dft(reshape(f(:,ii),a,N),[],2); end; ltfat/inst/gabor/gabrieszbounds.m0000664000175000017500000000503612612404256017040 0ustar susnaksusnakfunction [AF,BF]=gabrieszbounds(varargin) %-*- texinfo -*- %@deftypefn {Function} gabrieszbounds %@verbatim %GABRIESZBOUNDS Calculate Riesz sequence/basis bounds of Gabor frame % Usage: fcond=gabrieszbounds(g,a,M); % [A,B]=gabrieszbounds(g,a,M); % [A,B]=gabrieszbounds(g,a,M,L); % % Input parameters: % g : The window function. % a : Length of time shift. % M : Number of channels. % L : Length of transform to consider. % Output parameters: % fcond : Frame condition number (B/A) % A,B : Frame bounds. % % GABRIESZBOUNDS(g,a,M) calculates the ratio B/A of the Riesz bounds % of the Gabor system with window g, and parameters a, M. % % [A,B]=GABRIESZBOUNDS(g,a,M) calculates the Riesz bounds A and B* % instead of just the ratio. % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of GABWIN for more details. % % If the optional parameter L is specified, the window is cut or % zero-extended to length L. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabrieszbounds.html} %@seealso{gabframebounds, gabwin, gabdualnorm} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard. if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; % The computation is done by computing the frame bounds of the Gabor % system on the dual lattice (interchange a and M) followed by an % appropriate scaling. % % See the note gabrieszbounds.pdf in the doc directory written by Monika % Dorfler. % Get a and M a=varargin{2}; M=varargin{3}; % Switch their role newargs=varargin; newargs{2}=M; newargs{3}=a; if nargout<2 AF=gabframebounds(newargs{:}); else [AF,BF]=gabframebounds(newargs{:}); AF=AF*M/a; BF=BF*M/a; end; ltfat/inst/gabor/projkern.m0000664000175000017500000000475612612404256015661 0ustar susnaksusnakfunction c=projkern(c,p2,p3,p4,p5); %-*- texinfo -*- %@deftypefn {Function} projkern %@verbatim %PROJKERN Projection onto generating kernel space % Usage: cout=projkern(cin,a); % cout=projkern(cin,g,a); % cout=projkern(cin,ga,gs,a); % % Input parameters: % cin : Input coefficients % g : analysis/synthesis window % ga : analysis window % gs : synthesis window % a : Length of time shift. % Output parameters: % cout : Output coefficients % % cout=PROJKERN(cin,a) projects a set of Gabor coefficients c onto the % space of possible Gabor coefficients. This means that cin and cout* % synthesize to the same signal. A tight window generated from a Gaussian % will be used for both analysis and synthesis. % % The rationale for this function is a follows: Because the coefficient % space of a Gabor frame is larger than the signal space (since the frame % is redundant) then there are many coefficients that correspond to the % same signal. % % Therefore, you might desire to work with the coefficients cin, but you % are in reality working with cout. % % cout=PROJKERN(cin,g,a) does the same, using the window g for analysis % and synthesis. % % cout=PROJKERN(cin,ga,gs,a) does the same, but for different analysis % ga and synthesis gs windows. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/projkern.html} %@seealso{dgt, idgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(2,4,nargin)); M=size(c,1); N=size(c,2); if nargin==2 a=p2; L=a*N; ga=gabtight(a,M,L); gs=ga; end; if nargin==3; ga=p2; gs=p2; a=p3; L=a*N; end; if nargin==4; ga=p2; gs=p3; a=p4; L=a*N; end; assert_squarelat(a,M,1,'PROJKERN'); c=dgt(idgt(c,gs,a),ga,a,M); ltfat/inst/gabor/gabdualnorm.m0000664000175000017500000001130112612404256016302 0ustar susnaksusnakfunction [o1,o2]=gabdualnorm(g,gamma,a,M,varargin); %-*- texinfo -*- %@deftypefn {Function} gabdualnorm %@verbatim %GABDUALNORM Measure of how close a window is to being a dual window % Usage: dn=gabdualnorm(g,gamma,a,M); % dn=gabdualnorm(g,gamma,a,M,L); % dn=gabdualnorm(g,gamma,a,M,'lt',lt); % [scal,res]=gabdualnorm(...); % % Input parameters: % gamma : input window.. % g : window function. % a : Length of time shift. % M : Number of modulations. % L : Length of transform to consider % Output parameters: % dn : dual norm. % scal : Scaling factor % res : Residual % % GABDUALNORM(g,gamma,a,M) calculates how close gamma is to being a % dual window of the Gabor frame with window g and parameters a and M. % % The windows g and gamma may be vectors of numerical values, text strings % or cell arrays. See the help of GABWIN for more details. % % [scal,res]=GABDUALNORM(...) computes two entities: scal determines % if the windows are scaled correctly, it must be 1 for the windows to be % dual. res is close to zero if the windows (scaled correctly) are dual % windows. % % GABDUALNORM(g,gamma,a,M,L) does the same, but considers a transform % length of L. % % GABDUALNORM(g,gamma,a,M,'lt',lt) does the same for a non-separable % lattice specified by lt. Please see the help of MATRIX2LATTICETYPE % for a precise description of the parameter lt. % % GABDUALNORM can be used to get the maximum relative reconstruction % error when using the two specified windows. Consider the following code % for some signal f, windows g, gamma, parameters a and M and % transform-length L (See help on DGT on how to obtain L*): % % fr=idgt(dgt(f,g,a,M),gamma,a); % er=norm(f-fr)/norm(f); % eest=gabdualnorm(g,gamma,a,M,L); % % Then er. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %% ---------- Assert correct input. if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.L=[]; definput.keyvals.lt=[0 1]; [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); %% ------ step 2: Verify a, M and L if isempty(L) % Minimum transform length by default. Ls=1; % Use the window lengths, if any of them are numerical if isnumeric(g) Ls=max(length(g),Ls); end; if isnumeric(gamma) Ls=max(length(gamma),Ls); end; % ----- step 2b : Verify a, M and get L from the window length ---------- L=dgtlength(Ls,a,M,kv.lt); else % ----- step 2a : Verify a, M and get L Luser=dgtlength(L,a,M,kv.lt); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i. See the help of DGTLENGTH for the requirements.'],... upper(mfilename),L,Luser) end; end; [g, info_g] = gabwin(g, a,M,L,kv.lt,'callfun',upper(mfilename)); [gamma,info_gamma] = gabwin(gamma,a,M,L,kv.lt,'callfun',upper(mfilename)); % gamma must have the correct length, otherwise dgt will zero-extend it % incorrectly using postpad instead of fir2long gamma=fir2long(gamma,L); g =fir2long(g,L); % Handle the Riesz basis (dual lattice) case. if a>M % Calculate the right-hand side of the Wexler-Raz equations. rhs=dgt(gamma,g,a,M,L,'lt',kv.lt); scalconst=1; else % Calculate the right-hand side of the Wexler-Raz equations. rhs=dgt(gamma,g,M,a,L,'lt',kv.lt); scalconst=a/M; end; if nargout<2 % Subtract from the first element to make it zero, if the windows are % dual. rhs(1)=rhs(1)-scalconst; o1=norm(rhs(:),1); else % Scale the first element to make it one, if the windows are dual. o1=rhs(1)/scalconst; o2=norm(rhs(2:end),1); end; ltfat/inst/gabor/phaselock.m0000664000175000017500000000567212612404256015776 0ustar susnaksusnakfunction c = phaselock(c,a,varargin) %-*- texinfo -*- %@deftypefn {Function} phaselock %@verbatim %PHASELOCK Phaselock Gabor coefficients % Usage: c=phaselock(c,a); % % PHASELOCK(c,a) phaselocks the Gabor coefficients c. The coefficients % must have been obtained from a DGT with parameter a. % % Phaselocking the coefficients modifies them so as if they were obtained % from a time-invariant Gabor system. A filter bank produces phase locked % coefficients. % % Phaselocking of Gabor coefficients correspond to the following transform: % Consider a signal f of length L and define N=L/a. % The output from c=PHASELOCK(dgt(f,g,a,M),a) is given by % % L-1 % c(m+1,n+1) = sum f(l+1)*exp(-2*pi*i*m*(l-n*a)/M)*conj(g(l-a*n+1)), % l=0 % % where m=0,...,M-1 and n=0,...,N-1 and l-an is computed modulo L. % % PHASELOCK(c,a,'lt',lt) does the same for a non-separable lattice % specified by lt. Please see the help of MATRIX2LATTICETYPE for a % precise description of the parameter lt. % % % References: % M. Puckette. Phase-locked vocoder. Applications of Signal Processing to % Audio and Acoustics, 1995., IEEE ASSP Workshop on, pages 222 -225, % 1995. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/phaselock.html} %@seealso{dgt, phaseunlock, symphase} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Christoph Wiesmeyr, Peter L. Soendergaard. % TESTING: test_phaselock % REFERENCE: OK if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.lt=[0 1]; [flags,kv]=ltfatarghelper({},definput,varargin); if (prod(size(a))~=1 || ~isnumeric(a)) error('a must be a scalar'); end; if rem(a,1)~=0 error('a must be an integer'); end; M=size(c,1); N=size(c,2); L=N*a; b=L/M; if rem(b,1)~=0 error('Lattice error. The a parameter is probably incorrect.'); end; TimeInd = (0:(N-1))*a; FreqInd = (0:(M-1)); phase = FreqInd'*TimeInd; phase = mod(phase,M); phase = exp(2*1i*pi*phase/M); if kv.lt(1)>0 % truly non-separable case for n=0:(N-1) w = mod(n*kv.lt(1)/kv.lt(2),1); phase(:,n+1) = phase(:,n+1)*exp(2*pi*1i*a*w*n/M); end end % Handle multisignals c=bsxfun(@times,c,phase); ltfat/inst/gabor/tfplot.m0000664000175000017500000001453612612404256015334 0ustar susnaksusnakfunction coef=tfplot(coef,step,yr,varargin) %-*- texinfo -*- %@deftypefn {Function} tfplot %@verbatim %TFPLOT Plot coefficient matrix on the TF plane % Usage: tfplot(coef,step,yr); % tfplot(coef,step,yr,...); % % TFPLOT(coef,step,yr) will plot a rectangular coefficient array on the % TF-plane. The shift in samples between each column of coefficients is % given by the variable step. The vector yr is a 1 x2 vector % containing the lowest and highest normalized frequency. % % C=TFPLOT(...) returns the processed image data used in the % plotting. Inputting this data directly to imagesc or similar % functions will create the plot. This is usefull for custom % post-processing of the image data. % % TFPLOT is not meant to be called directly. Instead, it is called by % other plotting routines to give a uniform display format. % % TFPLOT (and all functions that call it) takes the following arguments. % % 'dynrange',r % Limit the dynamical range to r by using a colormap in % the interval [chigh-r,chigh], where chigh is the highest % value in the plot. The default value of [] means to not % limit the dynamical range. % % 'db' Apply 20*log_{10} to the coefficients. This makes % it possible to see very weak phenomena, but it might show % too much noise. A logarithmic scale is more adapted to % perception of sound. This is the default. % % 'dbsq' Apply 10*log_{10} to the coefficients. Same as the % 'db' option, but assume that the input is already squared. % % 'lin' Show the coefficients on a linear scale. This will % display the raw input without any modifications. Only works for % real-valued input. % % 'linsq' Show the square of the coefficients on a linear scale. % % 'linabs' Show the absolute value of the coefficients on a linear scale. % % 'tc' Time centering. Move the beginning of the signal to the % middle of the plot. % % 'clim',clim Use a colormap ranging from clim(1) to clim(2). These % values are passed to imagesc. See the help on imagesc. % % 'image' Use imagesc to display the plot. This is the default. % % 'contour' Do a contour plot. % % 'surf' Do a surf plot. % % 'colorbar' Display the colorbar. This is the default. % % 'nocolorbar' Do not display the colorbar. % % 'display' Display the figure. This is the default. % % 'nodisplay' Do not display figure. This is usefull if you only % want to obtain the output for further processing. % % If both 'clim' and 'dynrange' are specified, then 'clim' takes % precedence. % % It is possible to customize the text by setting the following values: % % 'time', t The word denoting time. Default is 'Time' % % 'frequency',f The word denoting frequency. Default is 'Frequency' % % 'samples',s The word denoting samples. Default is 'samples' % % 'normalized',n Defult value is 'normalized'. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/tfplot.html} %@seealso{sgram, plotdgt, plotdgtreal, plotwmdct, plotdwilt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: NA % REFERENCE: NA if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'ltfattranslate','tfplot'}; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); M=size(coef,1); N=size(coef,2); if size(coef,3)>1 error('Input is multidimensional.'); end; % Apply transformation to coefficients. if flags.do_db coef=20*log10(abs(coef)+realmin); end; if flags.do_dbsq coef=10*log10(abs(coef)+realmin); end; if flags.do_linsq coef=abs(coef).^2; end; if flags.do_linabs coef=abs(coef); end; if flags.do_lin if ~isreal(coef) error(['Complex valued input cannot be plotted using the "lin" flag.',... 'Please use the "linsq" or "linabs" flag.']); end; end; % 'dynrange' parameter is handled by converting it into clim % clim overrides dynrange, so do nothing if clim is already specified if ~isempty(kv.dynrange) && isempty(kv.clim) maxclim=max(coef(:)); kv.clim=[maxclim-kv.dynrange,maxclim]; end; % Handle clim by thresholding and cutting if ~isempty(kv.clim) coef(coefkv.clim(2))=kv.clim(2); end; if flags.do_tc xr=(-floor(N/2):floor((N-1)/2))*step; coef=fftshift(coef,2); else xr=(0:N-1)*step; end; if flags.do_display if ~isempty(kv.fs) xr=xr/kv.fs; yr=yr*fs/2; end; % Convert yr to range of values yr=linspace(yr(1),yr(2),M); switch(flags.plottype) case 'image' % Call imagesc explicitly with clim. This is necessary for the % situations where the data (is by itself limited (from above or % below) to within the specified range. Setting clim explicitly % avoids the colormap moves in the top or bottom. if isempty(kv.clim) imagesc(xr,yr,coef); else imagesc(xr,yr,coef,kv.clim); end; case 'contour' contour(xr,yr,coef); case 'surf' surf(xr,yr,coef,'EdgeColor','none'); case 'pcolor' pcolor(xr,yr,coef); end; if flags.do_colorbar colorbar; end; axis('xy'); if ~isempty(kv.fs) xlabel(sprintf('%s (s)',kv.time)); ylabel(sprintf('%s (Hz)',kv.frequency)); else xlabel(sprintf('%s (%s)',kv.time,kv.samples)); ylabel(sprintf('%s (%s)',kv.frequency,kv.normalized)); end; end; if nargout<1 clear coef; end ltfat/inst/gabor/isgram.m0000664000175000017500000002054112612404256015277 0ustar susnaksusnakfunction [f,relres,iter]=isgram(s,g,a,varargin) %-*- texinfo -*- %@deftypefn {Function} isgram %@verbatim %ISGRAM Spectrogram inversion % Usage: f=isgram(c,g,a); % f=isgram(c,g,a,Ls); % [f,relres,iter]=isgram(...); % % Input parameters: % c : Array of coefficients. % g : Window function. % a : Length of time shift. % Ls : length of signal. % Output parameters: % f : Signal. % relres : Vector of residuals. % iter : Number of iterations done. % % ISGRAM(s,g,a) attempts to invert a spectrogram computed by : % % s = abs(dgt(f,g,a,M)).^2; % % using an iterative method. % % ISGRAM(c,g,a,Ls) does as above but cuts or extends f to length Ls. % % If the phase of the spectrogram is known, it is much better to use % idgt. % % [f,relres,iter]=ISGRAM(...) additionally return the residuals in a % vector relres and the number of iteration steps iter. % % Generally, if the spectrogram has not been modified, the iterative % algorithm will converge slowly to the correct result. If the % spectrogram has been modified, the algorithm is not guaranteed to % converge at all. % % ISGRAM takes the following parameters at the end of the line of input % arguments: % % 'lt',lt Specify the lattice type. See the help on MATRIX2LATTICETYPE. % % 'zero' Choose a starting phase of zero. This is the default % % 'rand' Choose a random starting phase. % % 'int' Construct a starting phase by integration. Only works % for Gaussian windows. % % 'griflim' Use the Griffin-Lim iterative method, this is the % default. % % 'bfgs' Use the limited-memory Broyden Fletcher Goldfarb % Shanno (BFGS) method. % % 'tol',t Stop if relative residual error is less than the specified tolerance. % % 'maxit',n Do at most n iterations. % % 'print' Display the progress. % % 'quiet' Don't print anything, this is the default. % % 'printstep',p If 'print' is specified, then print every p'th % iteration. Default value is p=10; % % The BFGS method makes use of the minFunc software. To use the BFGS method, % please install the minFunc software from: % http://www.cs.ubc.ca/~schmidtm/Software/minFunc.html. % % Examples: % --------- % % To reconstruct the phase of 'greasy', use the following: % % % Setup the problem and the coefficients % f=greasy; % g='gauss'; % a=20; M=200; % c=dgt(f,g,a,M); % s=abs(c).^2; % theta=angle(c); % % % Reconstruct and get spectrogram and angle % r=isgram(s,g,a); % c_r=dgt(r,g,a,M); % s_r=abs(c_r).^2; % theta_r=angle(c_r); % % % Compute the angular difference % d1=abs(theta-theta_r); % d2=2*pi-d1; % anglediff=min(d1,d2); % % % Plot the difference in spectrogram and phase % figure(1); % plotdgt(s./s_r,a,16000,'clim',[-10,10]); % colormap([bone;flipud(bone)]) % title('Relative difference in spectrogram'); % % figure(2); % plotdgt(anglediff,a,16000,'lin'); % colormap(bone); % title('Difference in angle'); % % % References: % R. Decorsiere and P. L. Soendergaard. Modulation filtering using an % optimization approach to spectrogram reconstruction. In Proceedings of % the Forum Acousticum, 2011. % % D. Griffin and J. Lim. Signal estimation from modified short-time % Fourier transform. IEEE Trans. Acoust. Speech Signal Process., % 32(2):236-243, 1984. % % D. Liu and J. Nocedal. On the limited memory BFGS method for large % scale optimization. Mathematical programming, 45(1):503-528, 1989. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/isgram.html} %@seealso{isgramreal, frsynabs, dgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Remi Decorsiere and Peter L. Soendergaard. % REFERENCE: OK % Check input paramameters. if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; if numel(g)==1 error('g must be a vector (you probably forgot to supply the window function as input parameter.)'); end; definput.keyvals.Ls=[]; definput.keyvals.lt=[0 1]; definput.keyvals.tol=1e-6; definput.keyvals.maxit=100; definput.keyvals.printstep=10; definput.flags.method={'griflim','bfgs'}; definput.flags.print={'quiet','print'}; definput.flags.startphase={'zero','rand','int'}; [flags,kv,Ls]=ltfatarghelper({'Ls','tol','maxit'},definput,varargin); M=size(s,1); N=size(s,2); W=size(s,3); if ~isnumeric(a) || ~isscalar(a) error('%s: "a" must be a scalar',upper(mfilename)); end; if rem(a,1)~=0 error('%s: "a" must be an integer',upper(mfilename)); end; L=N*a; Ltest=dgtlength(L,a,M,kv.lt); if Ltest~=L error(['%s: Incorrect size of coefficient array or "a" parameter. See ' ... 'the help of DGTLENGTH for the requirements.'], ... upper(mfilename)) end; sqrt_s=sqrt(s); if flags.do_zero % Start with a phase of zero. c=sqrt_s; end; if flags.do_rand c=sqrt_s.*exp(2*pi*i*rand(M,N)); end; if flags.do_int if kv.lt(2)>1 error(['%s: The integration initilization is not implemented for ' ... 'non-sep lattices.'],upper(mfilename)); end; c=constructphase(s,g,a); end; % gabwin is called after constructphase above, because constructphase % needs the window as a string/cell g=gabwin(g,a,M,L,kv.lt,'callfun',upper(mfilename)); gd = gabdual(g,a,M,L); % For normalization purposes norm_s=norm(s,'fro'); relres=zeros(kv.maxit,1); if flags.do_griflim for iter=1:kv.maxit %c = comp_dgt_proj(c,g,gd,a,M,L); if kv.lt(2)==1 f=comp_idgt(c,gd,a,kv.lt,0,0); c=comp_dgt(f,g,a,M,kv.lt,0,0,0); else f=comp_idgt(c,gd,a,kv.lt,0,0); c=comp_dgt(f,g,a,M,kv.lt,0,0,0); end; relres(iter)=norm(abs(c).^2-s,'fro')/norm_s; c=sqrt_s.*exp(i*angle(c)); if flags.do_print if mod(iter,kv.printstep)==0 fprintf('ISGRAM: Iteration %i, residual = %f\n',iter,relres(iter)); end; end; if relres(iter). % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHORS : Peter Balazs, Peter L. Soendergaard. if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.lt=[0 1]; [flags,kv]=ltfatarghelper({},definput,varargin); if (prod(size(a))~=1 || ~isnumeric(a)) error('a must be a scalar'); end; if rem(a,1)~=0 error('a must be an integer'); end; M=size(c,1); N=size(c,2); L=N*a; b=L/M; if rem(b,1)~=0 error('Lattice error. The a parameter is probably incorrect.'); end; TimeInd = (0:(N-1))*a; FreqInd = (0:(M-1)); phase = FreqInd'*TimeInd; phase = mod(phase,M); phase = exp(1i*pi*phase/M); if kv.lt(1)>0 % truly non-separable case for n=0:(N-1) w = mod(n*kv.lt(1)/kv.lt(2),1); phase(:,n+1) = phase(:,n+1)*exp(pi*1i*a*w*n/M); end end % Handle multisignals c=bsxfun(@times,c,phase); ltfat/inst/gabor/wilbounds.m0000664000175000017500000000527312612404256016030 0ustar susnaksusnakfunction [AF,BF]=wilbounds(g,M,varargin) %-*- texinfo -*- %@deftypefn {Function} wilbounds %@verbatim %WILBOUNDS Calculate frame bounds of Wilson basis % Usage: [AF,BF]=wilbounds(g,M) % [AF,BF]=wilbounds(g,M,L) % % Input parameters: % g : Window function. % M : Number of channels. % L : Length of transform to do (optional) % Output parameters: % AF,BF : Frame bounds. % % WILBOUNDS(g,M) calculates the frame bounds of the Wilson frame operator % of the Wilson basis with window g and M channels. % % [A,B]=WILBOUNDS(g,a,M) returns the frame bounds A and B instead of % just the ratio. % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of WILWIN for more details. % % If the length of g is equal to 2*M then the input window is % assumed to be a FIR window. Otherwise the smallest possible transform % length is chosen as the window length. % % If the optional parameter L is specified, the window is cut or % zero-extended to length L. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/wilbounds.html} %@seealso{wilwin, gabframebounds} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<2 error('Too few input parameters.'); end; definput.keyvals.L=[]; [flags,keyvals]=ltfatarghelper({'L'},definput,varargin); L=keyvals.L; if size(M,1)>1 || size(M,2)>1 error('M must be a scalar'); end; if rem(M,1)~=0 error('M must be an integer.') end; [g,info]=wilwin(g,M,L,'WILBOUNDS'); Lwindow=length(g); [b,N,L]=assert_L(Lwindow,Lwindow,L,M,2*M,'WILBOUNDS'); g=fir2long(g,L); a=M; N=L/a; if rem(N,2)==1 error('L/M must be even.'); end; % Get the factorization of the window. gf=comp_wfac(g,a,2*M); % Compute all eigenvalues. lambdas=comp_gfeigs(gf,L,a,2*M); % Min and max eigenvalue. AF=lambdas(1); BF=lambdas(size(lambdas,1)); % Divide by 2 (only difference to gfeigs). AF=AF/2; BF=BF/2; if nargout<2 AF=BF/AF; end; ltfat/inst/gabor/gaborinit.m0000664000175000017500000000163512612404256015776 0ustar susnaksusnakstatus=1; %-*- texinfo -*- %@deftypefn {Function} gaborinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gaborinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/gabor/gabtight.m0000664000175000017500000001460312612404256015610 0ustar susnaksusnakfunction gt=gabtight(varargin) %-*- texinfo -*- %@deftypefn {Function} gabtight %@verbatim %GABTIGHT Canonical tight window of Gabor frame % Usage: gt=gabtight(a,M,L); % gt=gabtight(g,a,M); % gt=gabtight(g,a,M,L); % gd=gabtight(g,a,M,'lt',lt); % % Input parameters: % g : Gabor window. % a : Length of time shift. % M : Number of modulations. % L : Length of window. (optional) % lt : Lattice type (for non-separable lattices). % Output parameters: % gt : Canonical tight window, column vector. % % GABTIGHT(a,M,L) computes a nice tight window of length L for a % lattice with parameters a, M. The window is not an FIR window, % meaning that it will only generate a tight system if the system % length is equal to L. % % GABTIGHT(g,a,M) computes the canonical tight window of the Gabor frame % with window g and parameters a, M. % % The window g may be a vector of numerical values, a text string or a % cell array. See the help of GABWIN for more details. % % If the length of g is equal to M, then the input window is assumed to % be a FIR window. In this case, the canonical dual window also has % length of M. Otherwise the smallest possible transform length is % chosen as the window length. % % GABTIGHT(g,a,M,L) returns a window that is tight for a system of % length L. Unless the input window g is a FIR window, the returned % tight window will have length L. % % GABTIGHT(g,a,M,'lt',lt) does the same for a non-separable lattice % specified by lt. Please see the help of MATRIX2LATTICETYPE for a % precise description of the parameter lt. % % If a>M then an orthonormal window of the Gabor Riesz sequence with % window g and parameters a and M will be calculated. % % Examples: % --------- % % The following example shows the canonical tight window of the Gaussian % window. This is calculated by default by GABTIGHT if no window is % specified: % % a=20; % M=30; % L=300; % gt=gabtight(a,M,L); % % % Simple plot in the time-domain % figure(1); % plot(gt); % % % Frequency domain % figure(2); % magresp(gt,'dynrange',100); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/gabor/gabtight.html} %@seealso{gabdual, gabwin, fir2long, dgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: TEST_DGT % REFERENCE: OK %% ------------ decode input parameters ------------ if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; if numel(varargin{1})==1 % First argument is a scalar. a=varargin{1}; M=varargin{2}; g='gauss'; varargin=varargin(3:end); else % First argument assumed to be a vector. g=varargin{1}; a=varargin{2}; M=varargin{3}; varargin=varargin(4:end); end; definput.keyvals.L=[]; definput.keyvals.lt=[0 1]; definput.keyvals.nsalg=0; [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); %% ------ step 2: Verify a, M and L if isempty(L) if isnumeric(g) % Use the window length Ls=length(g); else % Use the smallest possible length Ls=1; end; % ----- step 2b : Verify a, M and get L from the window length ---------- L=dgtlength(Ls,a,M,kv.lt); else % ----- step 2a : Verify a, M and get L Luser=dgtlength(L,a,M,kv.lt); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i. See the help of DGTLENGTH for the requirements.'],... upper(mfilename),L,Luser); end; end; %% ----- step 3 : Determine the window [g,info]=gabwin(g,a,M,L,kv.lt,'callfun',upper(mfilename)); if LM*R % Handle the Riesz basis (dual lattice) case. % Swap a and M, and scale differently. scale=sqrt(a/M); tmp=a; a=M; M=tmp; end; % -------- Compute ------------- if kv.lt(2)==1 % Rectangular case if (info.gl<=M) && (R==1) % Diagonal of the frame operator d = gabframediag(g,a,M,L); gt=g./sqrt(long2fir(d,info.gl)); else % Long window case % Just in case, otherwise the call is harmless. g=fir2long(g,L); gt=comp_gabtight_long(g,a,M)*scale; end; else % Just in case, otherwise the call is harmless. g=fir2long(g,L); if (kv.nsalg==1) || (kv.nsalg==0 && kv.lt(2)<=2) mwin=comp_nonsepwin2multi(g,a,M,kv.lt,L); gtfull=comp_gabtight_long(mwin,a*kv.lt(2),M)*scale; % We need just the first vector gt=gtfull(:,1); else [s0,s1,br] = shearfind(L,a,M,kv.lt); if s1 ~= 0 p1 = comp_pchirp(L,s1); g = p1.*g; end b=L/M; Mr = L/br; ar = a*b/br; if s0 == 0 gt=comp_gabtight_long(g,ar,Mr); else p0=comp_pchirp(L,-s0); g = p0.*fft(g); gt=comp_gabtight_long(g,L/Mr,L/ar)*sqrt(L); gt = ifft(conj(p0).*gt); end if s1 ~= 0 gt = conj(p1).*gt; end end; if (info.gl<=M) && (R==1) gt=long2fir(gt,M); end; end; % --------- post process result ------- if isreal(g) && (kv.lt(2)<=2) % If g is real and the lattice is either rectangular or quinqux, then % the output is known to be real. gt=real(gt); end; if info.wasrow gt=gt.'; end; ltfat/inst/README0000664000175000017500000000260412612404251013420 0ustar susnaksusnakTo use the toolbox, 'cd' to the LTFAT directory and execute 'ltfatstart'. In Octave you can put this command in your ~/.octaverc file. Directory struture. The toolbox is organized in subdirectories including the following: fourier - Fourier analysis, DCT/DST transforms and filtering. gabor - Gabor, Wilson and WMDCT analysis/synthesis functions. wavelets - Wavelet analysis/synthesis, wavelet filter banks filterbank - General and auditory inspired filterbanks. nonstatgab - Non-stationary Gabor frames. quadratic - Quadratic distributions frames - Frame objects and linear operators associated with frames. sigproc - A collection of simple, signal processing tools. blockproc - Methods for block processing and block-adapted transforms. auditory - Auditory scales and common filters types. demos - Demos showing applications or aspects of LTFAT functions. signals - Test signals for use with the examples. comp - Computational subroutines. These should not be called directly. src - C implementation of the most computationally intensive routines. mex - Mex files to speed up the toolbox (if compiled) oct - Octave C++-files to speed up the toolbox (if compiled) The file INSTALL contains instructions for compiling the C-library and the Octave and Matlab interfaces.ltfat/inst/blockproc/0000775000175000017500000000000012612404256014521 5ustar susnaksusnakltfat/inst/blockproc/block.m0000664000175000017500000005475312612404256016007 0ustar susnaksusnakfunction [fs,classid] = block(source,varargin) %-*- texinfo -*- %@deftypefn {Function} block %@verbatim %BLOCK Initialize block stream % Usage: block(source); % % Input parameters: % source : Block stream input. % Output parameters: % fs : Sampling rate. % classid : Data type. % % BLOCK(source) initializes block data stream from source which % can be one of the following (the letter-case is ignored for strings): % % 'file.wav' % name of a wav file % % 'dialog' % shows the file dialog to choose a wav file. % % data % input data as columns of a matrix for each input channel % % 'rec' % input is taken from a microphone/auxilary input; % % {'rec','file.wav'} or {'rec','dialog'} or {'rec',data} % does the same as 'rec' but plays a chosen audio data simultaneously. % % 'playrec' % loopbacks the input to the output. In this case, the block size % (in BLOCKREAD) cannot change during the playback. % % BLOCK accepts the following optional key-value pairs % % 'fs',fs % Required sampling rate - Some devices might support only a % limited range of samp. frequencies. Use BLOCKDEVICES to list % supported sampling rates of individual devices. % When the target device does not support the chosen sampling rate, % on-the-fly resampling will be performed in the background. % This option overrides sampling rate read from a wav file. % % The default value is 44100 Hz, min. 4000 Hz, max. 96000 Hz % % 'L',L % Block length - Specifying L fixes the buffer length, which cannot be % changed in the loop. % % The default is 1024. In the online mode the minimum is 32. % % 'devid',dev % Whenever more input/output devices are present in your system, % 'devid' can be used to specify one. For the 'playrec' option the % devId should be a two element vector [playDevid, recDevid]. List % of the installed devices and their IDs can be obtained by % BLOCKDEVICES. % % 'playch',playch % If device supports more output channels, 'playch' can be used to % specify which ones should be used. E.g. for two channel device, [1,2] % can be used to specify channels. % % 'recch',recch % If device supports more input channels, 'recch' can be used to % specify which ones should be used. % % 'outfile','file.wav' % Creates a wav file header for on-the-fly storing of block data using % BLOCKWRITE. Existing file will be overwritten. Only 16bit fixed % point precision is supported in the files. % % 'nbuf',nbuf % Max number of buffers to be preloaded. Helps avoiding glitches but % increases delay. % % 'loadind',loadind % How to show the load indicator. loadind can be the following: % % 'nobar' % Suppresses any load display. % % 'bar' % Displays ascii load bar in command line (Does not work in Octave). % % obj % Java object which has a public method updateBar(double). % % Optional flag groups (first is default) % % 'noloop', 'loop' % Plays the input in a loop. % % 'single', 'double' % Data type to be used. In the offline mode (see below) the flag is % ignored and everything is cast do double. % % 'online', 'offline' % Use offline flag for offline blockwise processing of data input or a % wav file without initializing and using the playrec MEX. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/block.html} %@seealso{blockread, blockplay, blockana, blocksyn, demo_blockproc_basicloop, demo_blockproc_slidingsgram} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Zdenek Prusa % The function uses the Playrec tool by Robert Humphrey % http://www.playrec.co.uk/ which in turn relies on % Portaudio lib http://www.portaudio.com/ complainif_notenoughargs(nargin,1,'BLOCK'); definput.keyvals.devid=[]; definput.keyvals.nbuf=[]; definput.keyvals.fs=[]; definput.keyvals.playch=[]; definput.keyvals.recch=[]; definput.keyvals.outfile=[]; definput.keyvals.L=[]; definput.keyvals.loadind= 'nobar'; definput.flags.fmt={'single','double'}; definput.flags.loop={'noloop','loop'}; definput.flags.onoff={'online','offline'}; [flags,kv]=ltfatarghelper({},definput,varargin); failIfNotPositiveInteger(kv.L,'L'); failIfNotPositiveInteger(kv.fs,'fs'); failIfNotPositiveInteger(kv.nbuf,'nbuf'); % Reset all persistent data block_interface('reset'); if ~flags.do_offline % Octave version check skipLoadin = 0; if isoctave octs=strsplit(version,'.'); octN=str2num(octs{1})*1000+str2num(octs{2}); if octN<3007 warning('%s: Using Octave < 3.7. Disabling load indicator.',mfilename); skipLoadin = 1; end end if ~skipLoadin if ischar(kv.loadind) if ~strcmpi(kv.loadind,'bar') && ~strcmpi(kv.loadind,'nobar') error('%s: Incorrect value parameter for the key ''loadin''.',... upper(mfilename)); end elseif isjava(kv.loadind) try javaMethod('updateBar',kv.loadind,0); catch error('%s: Java object does not contain updateBar method.',... upper(mfilename)) end end end % Store option for displaying the loop playback block_interface('setIsLoop',flags.do_loop); else % Check whether any of incompatible params are set failIfInvalidOfflinePar(kv,'devid'); failIfInvalidOfflinePar(kv,'playch'); failIfInvalidOfflinePar(kv,'recch'); failIfInvalidOfflinePar(kv,'nbuf'); failIfInvalidOfflinePar(kv,'loadind',definput.keyvals.loadind); failIfInvalidOfflinePar(flags,'loop',definput.flags.loop{1}); kv.loadind = 'nobar'; % Different behavior for the fmt flag flags.fmt = 'double'; % fs is maybe needed for setting fs for the output wav block_interface('setOffline',1); end playChannels = 0; recChannels = 0; play = 0; record = 0; % Here we can define priority list of the host APIs. % If none of the preferred API devices is present, the first one is taken. hostAPIpriorityList = {}; % Force portaudio to use buffer of the following size pa_bufLen = -1; do_recaudio = 0; oldsource = source; % Handle {'rec',...} format if iscell(source) && strcmpi(source{1},'rec') recChannels = 1; record = 1; source = source{2}; if isempty(kv.nbuf) kv.nbuf = 3; end do_recaudio = 1; end if ischar(source) if(strcmpi(source,'rec')) recChannels = 1; record = 1; if isempty(kv.nbuf) kv.nbuf = 3; end elseif strcmpi(source,'playrec') playChannels = 2; recChannels = 1; record = 1; play = 1; if isempty(kv.nbuf) kv.nbuf = 1; end elseif strcmpi(source,'dialog') [fileName,pathName] = uigetfile('*.wav','Select the *.wav file'); if fileName == 0 error('%s: No file chosen.',upper(mfilename)); end source = fullfile(pathName,fileName); if isempty(kv.fs) [~, kv.fs] = wavload(source, 'i'); end play = 1; elseif(numel(source)>4) if(strcmpi(source(end-3:end),'.wav')) if exist(source,'file')~=2 error('%s: File "%s" does not exist.',upper(mfilename),source); end if isoctave warning('off','Octave:fopen-file-in-path'); end if isempty(kv.fs) [~, kv.fs] = wavload(source, 'i'); end play = 1; else error('%s: "%s" is not valid wav filename.',upper(mfilename),source); end else error('%s: Unrecognized source "%s".',upper(mfilename),source); end elseif(isnumeric(source)) if isempty(kv.fs) && flags.do_online kv.fs = 44100; warning('%s: Sampling rate not specified. Using default value %i Hz.',... upper(mfilename),kv.fs); end play = 1; else error('%s: Unrecognized source.',upper(mfilename)); end if play && ~record playChannels = 2; if isempty(kv.nbuf) kv.nbuf = 3; end end if isempty(kv.fs) kv.fs = 44100; end is_wav = ischar(source) && numel(source)>4 && strcmpi(source(end-3:end),'.wav'); is_numeric = isnumeric(source); if flags.do_offline if ~is_wav && ~is_numeric error(['%s: In the offline mode, only wav file or a data vector can ',... ' be used as a source.'],upper(mfilename)); end if isempty(kv.fs) && ~isempty(kv.outfile) error('%s: Missing fs for the output file.',upper(mfilename)); end end % Store option for displaying the load bar block_interface('setDispLoad',kv.loadind); % Store data type. block_interface('setClassId',flags.fmt); % Store length of the buffer circular queue block_interface('setBufCount',kv.nbuf); % if ~isempty(kv.outfile) && ~strcmpi(kv.outfile(end-3:end),'.wav') error('%s: %s does not contain *.wav suffix.',upper(mfilename),kv.outfile); end % Return parameters classid = flags.fmt; fs = kv.fs; % Set block length if isempty(kv.L) block_interface('setBufLen',-1); else if kv.L<32 && flags.do_online error('%s: Minimum buffer length is 32.',upper(mfilename)) end block_interface('setBufLen',kv.L); end % Store data block_interface('setSource',source); block_interface('setFs',fs); % Handle sources with known input length if is_wav [~,~,~,fid] = wavload(source,'i'); Ls = fid(4); chanNo = fid(5); block_interface('setLs',[Ls,chanNo]); block_interface('setSource',@(pos,endSample)... cast(wavload(source,'',endSample-pos+1,pos-1),... block_interface('getClassId')) ); % block_interface('setSource',@(pos,endSample)... % cast(wavread(source,[pos,endSample]),... % block_interface('getClassId')) ); elseif is_numeric source = comp_sigreshape_pre(source,'BLOCK'); if size(source,2)>8 error('%s: More than 8 channels not allowed.',upper(mfilename)); end block_interface('setLs',size(source)); block_interface('setSource',@(pos,endSample)... cast(source(pos:endSample,:),... block_interface('getClassId'))); end % Modify the source just added to block_interface if do_recaudio block_interface('setSource',{'rec',block_interface('getSource')}); % By default, we only want a single speaker to be active playChannels = 1; end % Not a single playrec call has been done until now if ~flags.do_offline if flags.do_online && kv.fs<4000 || kv.fs>96000 error('%s: Sampling rate must be in range 4-96 kHz ',upper(mfilename)); end % From now on, playrec is called isPlayrecInit = 0; try isPlayrecInit = playrec('isInitialised'); catch err = lasterror; if ~isempty(strfind(err.message,'The specified module could not be found')) error('%s: playrec found but portaudio cannot be found.', upper(mfilename)); end if ~isempty(strfind(err.message,'Undefined function')) error('%s: playrec could not be found.', upper(mfilename)); end error('%s: Error loading playrec.',upper(mfilename)); end if isPlayrecInit playrec('reset'); end clear playrec; if isempty(kv.playch) kv.playch = 1:playChannels; end if isempty(kv.recch) kv.recch = 1:recChannels; end devs = playrec('getDevices'); if isempty(devs) error(['%s: No sound devices available. portaudio lib is probably ',... 'incorrectly built.'],upper(mfilename)); end prioriryPlayID = -1; priorityRecID = -1; % Get all installed play devices playDevStructs = devs(arrayfun(@(dEl) dEl.outputChans,devs)>0); % Search for priority play device for ii=1:numel(hostAPIpriorityList) hostAPI = hostAPIpriorityList{ii}; priorityHostNo = find(arrayfun(@(dEl) ... ~isempty(strfind(lower(dEl.hostAPI),... lower(hostAPI))),playDevStructs)>0); if ~isempty(priorityHostNo) prioriryPlayID = playDevStructs(priorityHostNo(1)).deviceID; break; end end % Get IDs of all play devices playDevIds = arrayfun(@(dEl) dEl.deviceID, playDevStructs); % Get all installed recording devices recDevStructs = devs(arrayfun(@(dEl) dEl.inputChans,devs)>0); % Search for priority rec device for ii=1:numel(hostAPIpriorityList) hostAPI = hostAPIpriorityList{ii}; priorityHostNo = find(arrayfun(@(dEl) ... ~isempty(strfind(lower(dEl.hostAPI),... lower(hostAPI))),recDevStructs)>0); if ~isempty(priorityHostNo) priorityRecID = recDevStructs(priorityHostNo(1)).deviceID; break; end end % Get IDs of all rec devices recDevIds = arrayfun(@(dEl) dEl.deviceID,recDevStructs); if play && record if ~isempty(kv.devid) if(numel(kv.devid)~=2) error('%s: devid should be 2 element vector.',upper(mfilename)); end if ~any(playDevIds==kv.devid(1)) error('%s: There is no play device with id = %i.',... upper(mfilename),kv.devid(1)); end if ~any(recDevIds==kv.devid(2)) error('%s: There is no rec device with id = %i.',... upper(mfilename),kv.devid(2)); end else % Use the priority device if present if prioriryPlayID~=-1 && priorityRecID~=-1 kv.devid = [prioriryPlayID, priorityRecID]; else kv.devid = [playDevIds(1), recDevIds(1)]; end end try if pa_bufLen~=-1 playrec('init', kv.fs, kv.devid(1), kv.devid(2),... max(kv.playch),max(kv.recch),pa_bufLen); else playrec('init', kv.fs, kv.devid(1), kv.devid(2)); end catch failedInit(devs,kv); end if ~do_recaudio if numel(kv.recch) >1 && numel(kv.recch) ~= numel(kv.playch) error('%s: Using more than one input channel.',upper(mfilename)); end end block_interface('setPlayChanList',kv.playch); block_interface('setRecChanList',kv.recch); elseif play && ~record if ~isempty(kv.devid) if numel(kv.devid) >1 error('%s: devid should be scalar.',upper(mfilename)); end if ~any(playDevIds==kv.devid) error('%s: There is no play device with id = %i.',upper(mfilename),kv.devid); end else % Use prefered device if present if prioriryPlayID~=-1 kv.devid = prioriryPlayID; else % Use the first (hopefully default) device kv.devid = playDevIds(1); end end try if pa_bufLen~=-1 playrec('init', kv.fs, kv.devid, -1,max(kv.playch),-1,pa_bufLen); else playrec('init', kv.fs, kv.devid, -1); end catch failedInit(devs,kv); end block_interface('setPlayChanList',kv.playch); if(playrec('getPlayMaxChannel')1) error('%s: devid should be scalar.',upper(mfilename)); end if ~isempty(kv.devid) if ~any(recDevIds==kv.devid) error('%s: There is no rec device with id = %i.',upper(mfilename),kv.devid); end else % Use asio device if present if priorityRecID~=-1 kv.devid = priorityRecID; else % Use the first (hopefully default) device kv.devid = recDevIds(1); end end try if pa_bufLen~=-1 playrec('init', kv.fs, -1, kv.devid,-1,max(kv.recch),pa_bufLen); else playrec('init', kv.fs, -1, kv.devid); end catch failedInit(devs,kv); end block_interface('setRecChanList',kv.recch); else error('%s: Play or record should have been set.',upper(mfilename)); end % From the playrec author: % This slight delay is included because if a dialog box pops up during % initialisation (eg MOTU telling you there are no MOTU devices % attached) then without the delay Ctrl+C to stop playback sometimes % doesn't work. pause(0.1); if(~playrec('isInitialised')) error ('%s: Unable to initialise playrec correctly.',upper(mfilename)); end if(playrec('pause')) %fprintf('Playrec was paused - clearing all previous pages and unpausing.\n'); playrec('delPage'); playrec('pause', 0); end % Reset skipped samples playrec('resetSkippedSampleCount'); if play chanString = sprintf('%d,',kv.playch); dev = devs(find(arrayfun(@(dEl) dEl.deviceID==kv.devid(1),devs))); fprintf(['Play device: ID=%d, name=%s, API=%s, channels=%s, default ',... 'latency: %d--%d ms\n'],... dev.deviceID,dev.name,dev.hostAPI,chanString(1:end-1),... floor(1000*dev.defaultLowOutputLatency),... floor(1000*dev.defaultHighOutputLatency)); end if record chanString = sprintf('%d,',kv.recch); dev = devs(find(arrayfun(@(dEl) dEl.deviceID==kv.devid(end),devs))); fprintf(['Rec. device: ID=%d, name=%s, API=%s, channels=%s, default ',... 'latency: %d--%d ms\n'],... dev.deviceID,dev.name,dev.hostAPI,chanString(1:end-1),... floor(1000*dev.defaultLowInputLatency),... floor(1000*dev.defaultHighInputLatency)); end % Another slight delay to allow printing all messages prior to the playback % starts. pause(0.1); end % Handle output file if ~isempty(kv.outfile) % Use number of recording channes only if mic is an input. if (record && ~play) || (record && play) blockreadChannels = numel(block_interface('getRecChanList')); else Ls = block_interface('getLs'); blockreadChannels = Ls(2); end headerStruct = writewavheader(blockreadChannels,kv.fs,kv.outfile); block_interface('setOutFile',headerStruct); end %%%%%%%%%%%%% % END BLOCK % %%%%%%%%%%%%% function failedInit(devs,kv) % Common function for playrec initialization error messages errmsg = ''; % playFs = devs([devs.deviceID]==kv.devid(1)).supportedSampleRates; % if ~isempty(playFs) && ~any(playFs==kv.fs) % fsstr = sprintf('%d, ',playFs); % fsstr = ['[',fsstr(1:end-2),']' ]; % errmsg = [errmsg, sprintf(['Device %i does not ',... % 'support the required fs. Supported are: %s \n'],... % kv.devid(1),fsstr)]; % end % % if numel(kv.devid)>1 % recFs = devs([devs.deviceID]==kv.devid(2)).supportedSampleRates; % if ~isempty(recFs) && ~any(recFs==kv.fs) % fsstr = sprintf('%d, ',recFs); % fsstr = ['[',fsstr(1:end-2),']' ]; % errmsg = [errmsg, sprintf(['Recording device %i does not ',... % 'support the required fs. Supported are: %s \n'],... % kv.devid(2),fsstr)]; % end % end if isempty(errmsg) err = lasterror; error('%s',err.message); else error(errmsg); end function failIfInvalidOfflinePar(kv,field,defval) % Helper function for checking if field of kv is empty or not % equal to defval. failed = 0; if nargin<3 if ~isempty(kv.(field)) failed = 1; end else if ~isequal(kv.(field),defval) failed = 1; end end if failed error('%s: ''%s'' is not a valid parameter in the offline mode',... upper(mfilename),field); end function failIfNotPositiveInteger(par,name) if ~isempty(par) if ~isscalar(par) || ~isnumeric(par) || rem(par,1)~=0 || par<=0 error('%s: %s should be positive integer.',upper(mfilename),name); end end function headerStruct = writewavheader(Nchan,fs,filename) %WRITEWAVHEADER(NCHAN, FS, FILENAME) % %Creates a new WAV File and writes only the header into it. %No audio data is written here. % %Note that this implementation is hardcoded to 16 Bits/sample. % %input parameters: % NCHAN - 1: Mono, 2: Stereo % FS - Sampling rate in Hz % FILENAME - Name of the WAVE File including the suffix '.wav' % Original copyright: %--------------------------------------------------------------- % Oticon A/S, Bjoern Ohl, March 9, 2012 %--------------------------------------------------------------- % Modified: Zdenek Prusa % predefined elements: bitspersample = 16; % hardcoded in this implementation, as other % quantizations do not seem relevant mainchunk = 'RIFF'; chunktype = 'WAVE'; subchunk = 'fmt '; subchunklen = 16; % 16 for PCM format = 1; % 1 = PCM (linear quantization) datachunk = 'data'; % calculated elements: alignment = Nchan * bitspersample / 8; %dlength = Total_Nsamp*alignment; % total amount of audio data in bytes dlength = 0; flength = dlength + 36; % dlength + 44 bytes (header) - 8 bytes (definition) bytespersecond = fs*alignment; % data rate in bytes/s % write header into file: fid = fopen(filename,'w'); %writing access fwrite(fid, mainchunk); fwrite(fid, flength, 'uint32'); fwrite(fid, chunktype); fwrite(fid, subchunk); fwrite(fid, subchunklen, 'uint32'); fwrite(fid, format, 'uint16'); fwrite(fid, Nchan, 'uint16'); fwrite(fid, fs, 'uint32'); fwrite(fid, bytespersecond, 'uint32'); fwrite(fid, alignment, 'uint16'); fwrite(fid, bitspersample, 'uint16'); fwrite(fid, datachunk); fwrite(fid, dlength, 'uint32'); fclose(fid); % close file headerStruct = struct('filename',filename,'Nchan',Nchan,... 'alignment',alignment); ltfat/inst/blockproc/private/0000775000175000017500000000000012612404256016173 5ustar susnaksusnakltfat/inst/blockproc/private/block_ifwt.m0000664000175000017500000000523312612404256020477 0ustar susnaksusnakfunction f = block_ifwt(c,w,J,Lb) %-*- texinfo -*- %@deftypefn {Function} block_ifwt %@verbatim %BLOCK_IFWT IFWT wrapper for blockstream processing % Usage: f=block_ifwt(c,w,J,Lb); % % f = BLOCK_IFWT(c,w,J,Lb) returns block of data reconstructed % from coefficients c using the SegDWT algorithm (based on overlap-add % block convolution) with wavelet filters w and J levels. The % reconstructed block contains overlap to the next block(s). % % Do not call this function directly. It is called from BLOCKSYN when % using 'fwt' frame type with 'segola' block transform handling (see % BLOCKFRAMEACCEL). % % Function should be independent of block_interface. % % % References: % Z. Průša. Segmentwise Discrete Wavelet Transform. PhD thesis, Brno % University of Technology, Brno, 2012. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/private/block_ifwt.html} %@seealso{block, block_ifwt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end; w = fwtinit(w); %Lc = fwtclength(Lb,g,J,'per'); filtNo = length(w.g); subbNo = (filtNo-1)*J+1; Lc = zeros(subbNo,1); runPtr = 0; levelLen = Lb; for jj=1:J for ff=filtNo:-1:2 Lc(end-runPtr) = floor(levelLen/w.a(ff)); runPtr = runPtr + 1; end levelLen = ceil(levelLen/w.a(1)); end Lc(1)=levelLen; c = mat2cell(c,Lc); m = numel(w.g{1}.h); a = w.a(1); % Do the extension cstartZeros = zeros(numel(Lc),1); filtNo = length(w.g); runPtr = 0; for jj=1:J-1 for ff=filtNo:-1:2 cstartZeros(end-runPtr) = (a^(J-jj)-1)/(a-1)*(m-a); runPtr = runPtr + 1; end end % Pad with zeros () cext = cellfun(@(cEl,cZEl) zeros(size(cEl,1)+cZEl,size(cEl,2)),c,num2cell(cstartZeros),'UniformOutput',0); for jj=1:numel(cext) cext{jj}(end+1-size(c{jj},1):end,:) = c{jj}; end Ls = Lb + (a^(J)-1)/(a-1)*(m-a); %% ----- Run computation f = comp_ifwt(cext,w.g,w.a,J,Ls,'valid'); ltfat/inst/blockproc/private/block_fwt.m0000664000175000017500000000663012612404256020330 0ustar susnaksusnakfunction c = block_fwt( f, w, J) %-*- texinfo -*- %@deftypefn {Function} block_fwt %@verbatim %BLOCK_FWT FWT func. wrapper for a block processing % Usage: c = block_fwt( f, w, J); % % Input parameters: % f : Input data. % w : Analysis Wavelet Filterbank. % J : Number of filterbank iterations. % % Output parameters: % c : Coefficient vector. % % c = BLOCK_FWT(f,w,J) accepts suitably extended block of data f* % and produces correct coefficients using the SegDWT algorithm (based on % overlap-save block convolution) with wavelet filters defined by w % and J levels. f is expected to be a column vector or a matrix and % the processing is done column-wise. % % Do not call this function directly. The function is called from % BLOCKANA when used with frame type 'fwt' and 'segola' block transform % handling see BLOCKFRAMEACCEL. % % Function should be independent of block_interface. % % % References: % Z. Průša. Segmentwise Discrete Wavelet Transform. PhD thesis, Brno % University of Technology, Brno, 2012. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/private/block_fwt.html} %@seealso{block, block_ifwt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; % Initialize the wavelet filters structure %h = fwtinit(h,'ana'); if any(w.a~=w.a(1)) error('%s: Non-equal subsampling factors are not supported.',upper(mfilename)); end w = fwtinit(w); % Extended block length Ls = size(f,1); % Low-pass filter length m = numel(w.h{1}.h); % Low-pass subsampling factor a = w.a(1); % Extension length rred = (a^J-1)/(a-1)*(m-a); % Block boundaries blocksize=w.a(1)^J; % Input signal samples to be processed % This is effectivelly the "negative" right extension described in chapter % 4.1.4 in the reference. L=rred+floor((Ls-rred)/blocksize)*blocksize; levelLen = L; filtNo = length(w.h); subbNo = (filtNo-1)*J+1; Lc = zeros(subbNo,1); runPtr = 0; for jj=1:J for ff=filtNo:-1:2 Lc(end-runPtr) = floor((levelLen-m-1)/w.a(ff)); runPtr = runPtr + 1; end levelLen = floor((levelLen-m-1)/w.a(1)); end Lc(1)=levelLen; % %[Lc, L] = fwtclength(Ls,h,J,'valid'); % Crop to the right length if(Ls>L) f=postpad(f,L); end if Ls. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if ~isempty(which('javaaddpath')) try % Here it gets somewhat confusing. This script is called in % ltfatstart, but the jar is created in ltfatmex. It prints nasty % warning, if it cannot find the jar. Adding a folder to the classpath, % which is then filled with compiled classes by ltfatmex is fine. % % Moreover, according to the Matlab documentation: % % MATLAB calls the 'clear java' command whenever you change the dynamic path. % It clears definition of all Java classes defined by files on the dynamic class path, % removes all variables from the base workspace, and removes all compiled scripts, functions, % global, persistent variables and MEX-functions from memory. jarFile = 'blockproc.jar'; javaDirPath = [basepath,filesep,'blockproc',filesep,'java']; jarPath = [javaDirPath,filesep,jarFile]; if exist(jarPath,'file') if any(cellfun(@(cpEl)strcmp(cpEl,javaDirPath),javaclasspath)) javarmpath(javaDirPath); end % Adding a jar file. Once added to the classpath, it cannot be % deleted. Removing it from the classpath issues again the 'clear % java' command, but the jar cannot be removed while Matlab is % running at all. % http://www.mathworks.com/support/solutions/en/data/1-37JYLQ/?product=ML&solution=1-37JYLQ javaaddpath([basepath,filesep,'blockproc',filesep,'java',filesep,jarFile]); else % Adding directory with *.class files. Does not block. javaaddpath([basepath,filesep,'blockproc',filesep,'java']); end catch % Use lasterr for Octave compatibility err=lasterr; if ltfatstartprint warning(sprintf('%s: JVM support not present.',upper(mfilename))); end; end % Check if Java is not only in a headless state % We are not using warning_isjavaheadless directly because it migh not % yet be in the path % ge = javaMethod('getLocalGraphicsEnvironment','java.awt.GraphicsEnvironment'); % if javaMethod('isHeadless',ge) % warning(sprintf(['%s: JRE is available in headless mode only. ',... % 'Block processing GUI will not work. Consider ',... % 'installing full JRE.'],upper(mfilename))); % end else if ltfatstartprint warning(sprintf('%s: Java toolbox not present.',upper(mfilename))); end; end ltfat/inst/blockproc/blockwrite.m0000664000175000017500000000700212612404256017043 0ustar susnaksusnakfunction blockwrite(f) %-*- texinfo -*- %@deftypefn {Function} blockwrite %@verbatim %BLOCKWRITE Append block to an existing file % Usage: blockwrite(f); % % Input parameters: % f : Block stream input. % % Function appends f to a existing file. The file must have been % explicitly defined as the 'outfile' parameter of BLOCK prior % calling this function. If not, the function does nothing. % % The function expect exactly the same format of f as is returned by % BLOCKREAD. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blockwrite.html} %@seealso{block} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Authors: Bjoern Ohl, Zdenek Prusa complainif_notenoughargs(nargin,1,'BLOCKWRITE'); filestruct = block_interface('getOutFile'); if isempty(filestruct) % Do nothing if the file was not setup in block. return; %error('%s: Output file was not specified in block function.',... % upper(mfilename)); end filename = filestruct.filename; % Reformat f if necessary f = comp_sigreshape_pre(f,'BLOCKPLAY',0); [L, W] = size(f); Wread = filestruct.Nchan; if Wread ~= W error(['%s: %s was initialized to work with %i channels but', ... ' only %i provided. '],upper(mfilename),filename,Wread,W); end if W>2 error('%s: Cannot work with more than 2 channels.',upper(mfilename)); end % prepare data depending on mono/stereo: if W == 2 % stereo f = f.'; f = f(:); end % flength = dlength + 36; % We need to read one field from the header and % update two. fid = fopen(filename,'r+'); fseek(fid,40,-1); dataLenInBytes = fread(fid,1,'uint32'); dataLenInBytes = dataLenInBytes + filestruct.alignment*L; fileLenInBytes = dataLenInBytes + 36; try if fseek(fid,4,-1) ~= 0 error('d'); end if fwrite(fid,fileLenInBytes,'uint32')<=0 error('d'); end if fseek(fid,40,-1)~=0 error('d'); end if fwrite(fid,dataLenInBytes,'uint32') <=0 error('d'); end catch % We have to check whether the header was modified properly. error(['%s: An error has ocurred when modifying header of the ',... ' wav file. The file might be unreadable. Consider',... ' starting over.'],upper(mfilename)); end fclose(fid); % And now we can append the actual data fid = fopen(filename,'a'); %write data into file (amplified by 2^15 to suit int16-range (from -2^15 to +2^15): maxval = 1-(1/2^16); minval = -1; % Allow clipping since it is hard to do some sensible normalization. f(f >= maxval) = maxval; f(f <= minval) = minval; % clipping check: %if (max(tempvec) >= maxval) || (min(tempvec) <= minval) %We have no way how to find out how to properly normalize in blocks %warning('Clipping! Audio data limited to [-1, +1)'); %end fwrite(fid, f*2^15, 'int16'); fclose(fid); %close file ltfat/inst/blockproc/blocksyn.m0000664000175000017500000002253512612404256016532 0ustar susnaksusnakfunction [fhat, fola] = blocksyn(F, c , Lb, fola) %-*- texinfo -*- %@deftypefn {Function} blocksyn %@verbatim %BLOCKSYN Blockwise synthesis interface % Usage: blocksyn(F, c, Lb) % % Input parameters: % F : Synthesis frame object. % c : Coefficients of a block. % Lb : Length of the block. % fola : Explicitly defined overlap. % Output parameters: % fhat : Reconstructed block of signal. % fola : Stored overlap. % % fhat=BLOCKSYN(F,c,Lb) reconstructs the signal block fhat from the % coefficients c using the frame defined by F. If some overlap is used, % it is stored internally using block_interface. Note that the function is % capable of handling overlaps internally only for a single call % to the function in the blockproc. loop.% % % [fhat,fola]=BLOCKSYN(F,c,Lb,fola) does the same, but the block algorithm % uses fola to read and store overlap explicitly. fola can be empty. % % *Note:* To get perfect reconstruction, the synthesis frame F must % be a dual frame of the analysis frame used in BLOCKANA. % % % References: % N. Holighaus, M. Doerfler, G. A. Velasco, and T. Grill. A framework for % invertible, real-time constant-Q transforms. IEEE Transactions on % Audio, Speech and Language Processing, 21(4):775 -785, 2013. % % Z. Průša. Segmentwise Discrete Wavelet Transform. PhD thesis, Brno % University of Technology, Brno, 2012. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blocksyn.html} %@seealso{block, blockana, framedual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,3,'BLOCKSYN'); complainif_notvalidframeobj(F,'BLOCKSYN'); if ~isfield(F,'blockalg') F.blockalg = 'naive'; end if ~isfield(F,'L') error(['%s: The frame object was not accelerated. See ',... 'BLOCKFRAMEACCEL.'],upper(mfilename)); end if nargin<4 fola = []; end % Next block index start (from a global point of view, starting with zero) nextSb = block_interface('getPos'); % Block index start (from a global point of view, starting with zero) Sb = nextSb-Lb; if strcmp(F.blockalg,'naive') if F.L < Lb error(['%s: The frame object was accelerated with incompatible ',... 'length. The block length is %i but the accelerated ',... 'length is %i.'],upper(mfilename),Lb,F.L); end % Most general. Should work for anything. % Produces awful block artifacts when coefficients are altered. fhat = F.frsyn(c); fhat = fhat(1:Lb,:); elseif strcmp(F.blockalg,'sliced') if F.L < 2*Lb error(['%s: The frame object was accelerated with incompatible ',... 'length. The block length is %i but the accelerated ',... 'length is %i.'],upper(mfilename),Lb,F.L); end % General processing % Equal block length assumption % Reconstruct f = F.frsyn(c); % If the transform length differs from the 2*Lb, % Pick the correct part from the result pad = size(f,1) - 2*Lb; sIdx = floor(pad/2); % Result should not be longer than 2*Lb f = f(1+sIdx:sIdx+2*Lb,:); % Multiply by a slicing window f = bsxfun(@times,F.sliwin,f); % Load and add overlap (first half) ol = loadOverlap(Lb,size(f,2),fola); olLen = size(ol,1); f(1:olLen,:) = f(1:olLen,:) + ol; % Store overlap (second half) if nargout>1 fola=storeOverlap(f,Lb); else storeOverlap(f,Lb); end % Return first half fhat = f(1:Lb,:); elseif strcmp(F.blockalg,'segola') if ~isfield(F,'winLen') error('%s: Frame does not have FIR windows.',upper(mfilename)); end Lw = F.winLen; switch(F.type) case 'fwt' % The SegDWT algorithm J = F.J; w = F.g; m = numel(w.g{1}.h); a = w.a(1); blocksize = a^J; r = (a^J-1)/(a-1)*(m-1); Lbrec = (floor(nextSb/blocksize) - floor(Sb/blocksize))*blocksize; rSb = (a^J-1)/(a-1)*(m-a) + mod(Sb,a^J); over = r - rSb; f = block_ifwt(c,w,J,Lbrec); ol = loadOverlap(r-mod(Sb, a^J),size(c,2),fola); olLen = size(ol,1); f(1:olLen-over,:) = f(1:olLen-over,:) + ol(1+over:end,:); f = [ol(1:over,:);f]; if nargout>1 fola=storeOverlap(f,r-mod(nextSb, a^J)); else storeOverlap(f,r-mod(nextSb, a^J)); end fhat = f(1:Lb,:); case {'dgt','dgtreal','dwilt','wmdct'} % Time step a = F.a; % Length of the left half of the window Lwl = floor(Lw/2); Sbonelmax = ceil((Lw-1)/a)*a + a-1; Sbolen = ceil((Lw-1)/a)*a + mod(Sb,a); % Next block overlap length nextSbolen = ceil((Lw-1)/a)*a + mod(nextSb,a); Lext = Sbolen + Lb - mod(nextSb,a); Lextc = Sbolen + Lb - nextSbolen + Lwl; startc = ceil(Lwl/a)+1; endc = ceil((Lextc)/a); cc = F.coef2native(c,size(c)); chat = zeros(size(cc,1),ceil(F.L/a),size(cc,3),class(cc)); chat(:,startc:endc,:) = cc; chat = F.native2coef(chat); f = F.frsyn(chat); f = f(1:Lext,:); over = Sbonelmax - Sbolen; ol = loadOverlap(Sbonelmax-mod(Sb,a),size(c,2),fola); olLen = size(ol,1); f(1:olLen-over,:) = f(1:olLen-over,:) + ol(1+over:end,:); f = [ol(1:over,:);f]; if nargout>1 fola=storeOverlap(f,Sbonelmax-mod(nextSb,a)); else storeOverlap(f,Sbonelmax-mod(nextSb,a)); end fhat = f(1:Lb,:); case {'filterbank','filterbankreal'} lcma = F.lcma; % Time step a = F.a(:,1); % Length of the left half of the window Lwl = max(-F.g_info.offset); if Lw-1 < a Sbonelmax = lcma-1; Sbolen = mod(Sb,lcma); nextSbolen = mod(nextSb,lcma); else Sbonelmax = ceil((Lw-1)/lcma)*lcma + lcma-1; Sbolen = ceil((Lw-1)/lcma)*lcma + mod(Sb,lcma); nextSbolen = ceil((Lw-1)/lcma)*lcma + mod(nextSb,lcma); end Lext = Sbolen + Lb - mod(nextSb,lcma); Lextc = Sbolen + Lb - nextSbolen + Lwl; startc = ceil(Lwl./a)+1; endc = ceil((Lextc)./a); cc = F.coef2native(c,size(c)); chat = cell(numel(cc),1); for ii=1:numel(cc) chat{ii} = zeros(ceil(F.L./a(ii)),size(cc{ii},2)); chat{ii}(startc(ii):endc(ii),:) = cc{ii}; end chat = F.native2coef(chat); f = F.frsyn(chat); f = f(1:Lext,:); over = Sbonelmax - Sbolen; ol = loadOverlap(Sbonelmax-mod(Sb,lcma),size(c,2),fola); olLen = size(ol,1); f(1:olLen-over,:) = f(1:olLen-over,:) + ol(1+over:end,:); f = [ol(1:over,:);f]; if nargout>1 fola=storeOverlap(f,Sbonelmax-mod(nextSb,lcma)); else storeOverlap(f,Sbonelmax-mod(nextSb,lcma)); end fhat = f(1:Lb,:); otherwise error('%s: Unsupported frame.',upper(mfilename)); end else error('%s: Frame was not created with blockaccel.',upper(mfilename)); end end function overlap = loadOverlap(L,chan,overlap) %LOADOVERLAP Loads overlap % % if isempty(overlap) overlap = block_interface('getSynOverlap'); end if isempty(overlap) overlap = zeros(L,chan,block_interface('getClassId')); end Lo = size(overlap,1); if nargin<1 L = Lo; end if L>Lo % Required more samples than stored if 0 error('%s: Required more samples than stored.',upper(mfilename)); else % pad with zeros overlapTmp = zeros(L,chan,block_interface('getClassId')); overlapTmp(end-Lo+1:end,:) = overlap; overlap = overlapTmp; end end overlap = overlap(end-L+1:end,:); end function overlap = storeOverlap(fext,L) %STOREOVERLAP Stores overlap % % if L>size(fext,1) error('%s: Storing more samples than passed.',upper(mfilename)); end overlap = fext(end-L+1:end,:); if nargout<1 block_interface('setSynOverlap',overlap); end end % STOREOVERLAP ltfat/inst/blockproc/ltfatplay.m0000664000175000017500000000524312612404256016703 0ustar susnaksusnakfunction ltfatplay(source,varargin) %-*- texinfo -*- %@deftypefn {Function} ltfatplay %@verbatim %LTFATPLAY Play data samples or a wav file % Usage: ltfatplay('file.wav') % ltfatplay(data,'fs',fs) % ltfatplay(...,'devid',devid) % % % LTFATPLAY('file.wav') plays a wav file using the default sound device. % % LTFATPLAY('file.wav','devid',devid) plays a wav file using the sound % device with id devid. A list of available devices can be obtained by % BLOCKDEVICES. % % LTFATPLAY(data,'fs',fs,...) works entirely similar, but data is % expected to be a vector of length L or a LxW matrix with % columns as individual channels and fs to be a sampling rate to be used. % When no sampling rate is specified, 44.1 kHz is used. % % In addition, individual channels of the output sound device can be % selected by using an additional key-value pair % % 'playch',playch % A vector of channel indexes starting at 1. % % This function has the advantage over sound and soundsc that one can % directly specify output device chosen from BLOCKDEVICES. Similar % behavior can be achieved using audioplayer and audiodevinfo but % only in Matlab. Audioplayer is not yet supported in Octave. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/ltfatplay.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Zdenek Prusa % Initialize block stream block(source,varargin{:}); sourceHandle = block_interface('getSource'); % Allow playing data and wav files only if ~isa(sourceHandle,'function_handle') error('%s: Specified source cannot be played.',upper(mfilename)); end % Make the vector safe Ls = block_interface('getLs'); Lssafe = max([256,Ls(1)]); f = postpad(sourceHandle(1,Ls(1)),Lssafe); % If one channel is used, broadcast it to all output channels chanList = block_interface('getPlayChanList'); if size(f,2)==1 f = repmat(f,1,numel(chanList)); end % Finally play it at once playrec('play',f,chanList); ltfat/inst/blockproc/blockframeaccel.m0000664000175000017500000001146112612404256017777 0ustar susnaksusnakfunction Fo = blockframeaccel(F, Lb, varargin) %-*- texinfo -*- %@deftypefn {Function} blockframeaccel %@verbatim %BLOCKFRAMEACCEL Precompute structures for block processing % Usage: F = blockframeaccel(F,Lb); % % F=BLOCKFRAMEACCEL(F,Lb) has to be called for each frame object prior to % entering the main loop where BLOCKANA and BLOCKSYN are called. % The function works entirely like FRAMEACCEL but in addition, it prepares % structures for the processing of a consecutive stream of blocks. % % 'sliwin',sliwin : Slicing window. sliwin have to be a window % of length 2Lb or a string accepted % by the FIRWIN function. It is used only in % the slicing window approach. The default is % 'hann'. % % 'zpad',zpad : Number of zero samples the block will be padded % after it is windowed by a slicing window. This % does not affect the synthesis windowing. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blockframeaccel.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'BLOCKFRAMEACCEL'); complainif_notvalidframeobj(F,'BLOCKFRAMEACCEL'); definput.flags.blockalg = {'naive','sliced','segola'}; definput.keyvals.sliwin = []; definput.keyvals.zpad = 0; [flags,kv]=ltfatarghelper({},definput,varargin); isSliProp = ~isempty(kv.sliwin) || kv.zpad~=0; assert(~(~flags.do_sliced && isSliProp),... sprintf(['%s: Definig slicing window properties without setting the',... ' ''sliced'' flag.'], mfilename)); if flags.do_sliced if isempty(kv.sliwin) kv.sliwin = 'hann'; end if ~isnumeric(kv.sliwin) kv.sliwin = fftshift(sqrt(firwin(kv.sliwin,2*Lb))); end Fo = frameaccel(F,2*Lb+2*kv.zpad); Fo.sliwin = kv.sliwin; Fo.zpad = kv.zpad; elseif flags.do_segola % Determine window length without calling frameaccel % Fo = frameaccel(F,Lb); winLen = framefirlen(F); if winLen==-1 error(['%s: Segment overlap cannot be used with this frame.,'... ' It does not have FIR windows.'],upper(mfilename)); end switch(F.type) case {'fwt'} Fo = frameaccel(F,Lb); Fo.a = F.g.a(:); case {'dgt','dgtreal'} Fo = frameaccel(F,Lb+winLen-1+F.a); % case {'filterbank','filterbankreal','ufilterbank','ufilterbankreal'} % lcma = filterbanklength(1,F.a(:,1)); % Fo = frameaccel(F,Lb+winLen-1+lcma); % assert(all(Fo.a(:,2)==1), '%s: Fractional subsampling is not supported',upper(mfilename) ); % Fo.lcma = lcma; case {'dwilt'} Fo = frameaccel(F,Lb+winLen-1+2*F.M); Fo.a = 2*Fo.M; case {'wmdct'} Fo = frameaccel(F,Lb+winLen-1+F.M); Fo.a = Fo.M; otherwise error('%s: Unsupported frame for segola.',upper(mfilename)); end % This is important otherwise we would get 0 coefficients for some % blocks. assert(max(Fo.a(:,1)) <= Lb ,sprintf(['%s: Time step %i is bigger than the',... ' block length %i.'],upper(mfilename),max(Fo.a(:,1)),Lb)); Fo.winLen = winLen; elseif flags.do_naive Fo = frameaccel(F,Lb); end Fo.blockalg = flags.blockalg; function winLen = framefirlen(F) %FRAMEFIRLEN Frame window/filter length % % Function returns length of the longest FIR window/filter. The function % returns -1 if the frame does not have FIR windows. winLen = -1; info = []; switch(F.type) case {'dgt','dgtreal'} [~, info] = gabwin(F.g,F.a,F.M,[],F.kv.lt); case {'dwilt','wmdct'} [~, info] = wilwin(F.g,F.M,[],upper(mfilename)); case {'filterbank','ufilterbank'} [~, ~,info] = filterbankwin(F.g,F.a); case {'filterbankreal','ufilterbankreal'} [~, ~,info] = filterbankwin(F.g,F.a,'real'); case 'fwt' winLen = (F.g.a(1)^F.J-1)/(F.g.a(1)-1)*(numel(F.g.g{1}.h)-1)+1; end; if ~isempty(info) && isfield(info,'isfir') && info.isfir if isfield(info,'longestfilter') winLen = info.longestfilter; else winLen = max(info.gl); end end ltfat/inst/blockproc/blockread.m0000664000175000017500000002567312612404256016642 0ustar susnaksusnakfunction [f,valid] = blockread(L) %-*- texinfo -*- %@deftypefn {Function} blockread %@verbatim %BLOCKREAD Read one block from input % Usage: f=blockread(L) % % Input parameters: % L : Number of samples. % Output parameters: % f : Samples. % valid : Input data valid flag. % % f=BLOCKREAD(L) reads next L audio samples according to source % specified in BLOCK. f is a LxW matrix, where columns are % channels in the stream. % % [f,valid]=blockrad(...) does the same and in addition it returns valid* % flag, which is set to 1, except for the last block of the stream (e.g. % at the end of a file). % % Function also control the playback, so it does not have to rely on % whether the user called BLOCKPLAY. % % Block streaming uses several buffers to compensate for the processing % delay variation. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blockread.html} %@seealso{block, blockplay} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa persistent Lwav; persistent clearStr; persistent readTime; persistent t1; persistent t2; %global delayLog; %global delayLog2; is_offline = block_interface('getOffline'); Lbuf = block_interface('getBufLen'); if nargin==1 if Lbuf>0 && Lbuf~=L error('%s: Buffer length was fixed to %i, but now requiring %i.',... upper(mfilename),Lbuf,L); end if L<32 && ~is_offline error('%s: Minimum buffer length is 32.',upper(mfilename)); end else if Lbuf<0 L = 1024; else L = Lbuf; end end do_updateGUI = 0; do_updateBAR = 0; loadind = block_interface('getDispLoad'); if ischar(loadind) if strcmp('bar',loadind) do_updateBAR = 1; end elseif isjava(loadind) do_updateGUI = 1; else error('%s: Something went wrong. Should not ever get here.',upper(mfilename)); end if do_updateBAR || do_updateGUI if block_interface('getPageNo')>0 procTime = toc(t1); res = 2; % This returns the actual sampling rate value Portaudio was % initialized with. We however want the Matlab side sampling rate. % fs= playrec('getSampleRate'); fs= block_interface('getFs'); load = floor(100*(procTime+readTime)/(L/fs)); if do_updateBAR msg = sprintf(['Load : |',repmat('*',1,ceil(min([load,100])/res)),repmat(' ',1,floor((100-min([load,100]))/res)),'| \n']); droppedStr = sprintf('Dropped samples: %i\n',playrec('getSkippedSampleCount')); fprintf([clearStr,msg,droppedStr]); clearStr = repmat(sprintf('\b'), 1, length(msg)+length(droppedStr)); elseif do_updateGUI javaMethod('updateBar',loadind,load); else error('%s: Something went wrong. Should not ever get here.',upper(mfilename)); end block_interface('setSkipped',playrec('getSkippedSampleCount')); if playrec('getSkippedSampleCount') > block_interface('getSkipped') block_interface('setSkipped',playrec('getSkippedSampleCount')); end else clearStr = ''; %delayLog = []; %delayLog2 = [0]; procTime = 0; end t2 = tic; end valid = 1; source = block_interface('getSource'); pos = block_interface('getPos') +1; % convert to the Matlab indexing block_interface('incPageNo'); pageNo = block_interface('getPageNo'); classid = block_interface('getClassId'); % Update sample counter block_interface('setPos',pos+L-1); % convert back the Matlab indexing %%% %% REC, source is a mic/aux, no loopback % if strcmp(source,'rec') recChanList = block_interface('getRecChanList'); if do_updateBAR || do_updateGUI readTime = toc(t2); end % Issue reading buffers up to max while block_interface('getEnqBufCount') <= block_interface('getBufCount') block_interface('pushPage', playrec('rec', L, recChanList)); end pageList = block_interface('getPageList'); % Block until the first page is loaded while(playrec('isFinished', pageList(1)) == 0) end % Read the data. Cast to the specified type f = cast(playrec('getRec',pageList(1)),classid); % Delete page playrec('delPage', pageList(1)); % Throw away the page id block_interface('popPage'); %%% %% PLAYREC, source is a mic, loopback to an output % elseif strcmp(source,'playrec') recChanList = block_interface('getRecChanList'); if pageNo<=1 % "Fix" the buffer length to L passed to the first call to blockread block_interface('setBufLen',L); blockplay(zeros(L,numel(recChanList),classid)); end % Enqueue already processed fhat = block_interface('getToPlay'); if isempty(fhat) fhat = zeros(L,numel(recChanList),classid); end chanList = block_interface('getPlayChanList'); % Copy a single input channel to all output chanels. if size(fhat,2)==1 fhat = repmat(fhat,1,numel(chanList)); end % Play and record block_interface('pushPage',playrec('playrec', fhat, chanList, -1,... recChanList)); if do_updateBAR || do_updateGUI readTime = toc(t2); end pageList = block_interface('getPageList'); % Playback is block_interface('getBufCount') behind the input if block_interface('getPageNo') <= block_interface('getBufCount') f = zeros(L,numel(recChanList),classid); else % Block until the first page is loaded while(playrec('isFinished', pageList(1)) == 0) end % Read the data f = cast(playrec('getRec',pageList(1)),classid); playrec('delPage', pageList(1)); % Throw away the page id block_interface('popPage'); end %%% %% PLAY: Source is a *.wav file or a data vector % elseif isa(source,'function_handle') % Number of wav samples (is chached, since it is a disk read operation) Lwav = block_interface('getLs'); % Internal data pointer for audio data pos = block_interface('getDatapos') +1; block_interface('setDatapos',pos+L-1); % Determine valid samples endSample = min(pos + L - 1, Lwav(1)); %f = cast(wavread(source,[pos, endSample]),block_interface('getClassId')); f = cast(source(pos,endSample),classid); % Pad with zeros if some samples are missing if (pos + L - 1) >= Lwav(1) ftmp = zeros(L,Lwav(2),classid); ftmp(1:size(f,1),:) = f; f = ftmp; % Rewind if loop option was set. if block_interface('getIsLoop') block_interface('setDatapos',0); % Throw away stored overlaps. if ~isempty(block_interface('getAnaOverlap')) block_interface('setAnaOverlap',[]); end if ~isempty(block_interface('getSynOverlap')) block_interface('setSynOverlap',[]); end else valid = 0; end end if ~is_offline % Get play channel list (could be chached) chanList = block_interface('getPlayChanList'); % Get already processed (from blockplay) fhat = block_interface('getToPlay'); % Create something if blockplay was not called if isempty(fhat) fhat = zeros(L,numel(chanList),classid); end % Broadcast single input channel to all output chanels. if size(fhat,2)==1 fhat = repmat(fhat,1,numel(chanList)); end % playrec('play',... - enques fhat to be played % block_interface('pushPage', - stores page number in an inner FIFO % queue block_interface('pushPage', playrec('play', fhat, chanList)); if do_updateBAR || do_updateGUI readTime = toc(t2); end % If enough buffers are enqued, block the execution here until the % first one is finished. if block_interface('getEnqBufCount') > block_interface('getBufCount') pageId = block_interface('popPage'); % "Aggresive" chceking if page was played. % Another (supposedly slower) option is: % playrec('block',pageId); while(playrec('isFinished', pageId) == 0), end; end end %%% %% {'rec',...} Recording while playing % elseif iscell(source) recChanList = block_interface('getRecChanList'); playChanList = block_interface('getPlayChanList'); if do_updateBAR || do_updateGUI readTime = toc(t2); end source = source{2}; Lwav = block_interface('getLs'); % Issue reading buffers up to max while block_interface('getEnqBufCount') <= block_interface('getBufCount') % Internal data pointer for audio data pos = block_interface('getDatapos') +1; block_interface('setDatapos',pos+L-1); % Determine valid samples endSample = min(pos + L - 1, Lwav(1)); %f = cast(wavread(source,[pos, endSample]),block_interface('getClassId')); fin = source(pos,endSample); % Pad with zeros if some samples are missing if (pos + L - 1) >= Lwav(1) ftmp = zeros(L,Lwav(2),classid); ftmp(1:size(fin,1),:) = fin; fin = ftmp; % Rewind if loop option was set. if block_interface('getIsLoop') block_interface('setDatapos',0); % Throw away stored overlaps. if ~isempty(block_interface('getAnaOverlap')) block_interface('setAnaOverlap',[]); end if ~isempty(block_interface('getSynOverlap')) block_interface('setSynOverlap',[]); end else valid = 0; end end % Broadcast single input channel to all output chanels. if size(fin,2)==1 fin = repmat(fin,1,numel(playChanList)); end % Play and record block_interface('pushPage',playrec('playrec', fin, playChanList, -1,... recChanList)); end pageList = block_interface('getPageList'); % Block until the first page is loaded while(playrec('isFinished', pageList(1)) == 0) end % Read the data. Cast to the specified type f = cast(playrec('getPlayrec',pageList(1)),classid); % Delete page playrec('delPage', pageList(1)); % Throw away the page id block_interface('popPage'); end if ~is_offline if pageNo<=1 playrec('resetSkippedSampleCount'); end if do_updateBAR || do_updateGUI t1=tic; end end ltfat/inst/blockproc/blockpanel.m0000664000175000017500000000751512612404256017021 0ustar susnaksusnakfunction p = blockpanel(varargin) %-*- texinfo -*- %@deftypefn {Function} blockpanel %@verbatim %BLOCKPANEL Control panel % Usage: blockpanel(params) % % Input parameters: % params: Cell-array of parameters specifications. % % Output parameters: % p : Control panel Java object % % BLOCKPANEL(params) creates a Java object containing GUI for changing % parameters during the playback. params should be a cell-array, whose % elements are another cell array of the following format: % % {'var','label',minVal,maxVal,defVal,valCount} % % Example: % % params = { % {'G','Gain',-20,20,0,21} % } % % The function takes in the additional optional arguments: % % 'location',location: Window initial position. location % has to be 2 element row vector [x,y] % defining distance from the top-left % corner of the screen. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blockpanel.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . definput.keyvals.location = [50,50]; definput.keyvals.params = {}; [~,kv,params]=ltfatarghelper({'params'},definput,varargin); if ~isvector(kv.location) || any(size(kv.location)~=[1,2]) ||... any(kv.location<0) || ~isreal(kv.location) error(['%s: Location has to be a 2 element row vector of ',... ' positive numbers.'],upper(mfilename)); end if ~iscell(params) error('%s: Input should be a nonempty cell array.',upper(mfilename)); end if ~isempty(params) && ~iscell(params{1}) params = {params}; end complainif_isjavaheadless('BLOCKPANEL'); try p = javaObject('net.sourceforge.ltfat.ContFrame'); catch% err error(['%s: Could not load net.sourceforge.ltfat.ContFrame. It is not ',... 'compiled or it is not in Matlab classpath. In the latter case, ',... 'ltfatstart should do the trick.'],upper(mfilename)); end % Using Java LinkedList class for passing the cell-array % (since there is no way how to pass the cell-array directly) paramList = javaObject('java.util.LinkedList'); for ii = 1:numel(params) param = params{ii}; if numel(param)<6 error('%s: Parameter %i is not in format {''var'',''label'',minVal,maxVal,defVal,valCount}.',upper(mfilename),ii); end if param{3}>=param{4} error('%s: In parameter %i: minVal cannot be greater or equal to maxVal.',upper(mfilename),ii); end if param{5}param{4} error('%s: In parameter %i: defVal is not in range minVal-maxVal.',upper(mfilename),ii); end if param{6}<=1 error('%s: In parameter %i: valCount has to be >=2.',upper(mfilename),ii); end % Each element of the linked list paramList is again a linked list paramListEl = javaObject('java.util.LinkedList'); for jj=1:numel(param) javaMethod('add',paramListEl,param{jj}); end javaMethod('add',paramList,paramListEl); end % Pass the data javaMethod('addControlElements',p,paramList); javaMethod('setLocation',p,kv.location(1),kv.location(2)); % Give the object time to initialize properly. pause(0.1); ltfat/inst/blockproc/blockana.m0000664000175000017500000002141312612404256016452 0ustar susnaksusnakfunction [c, fola] = blockana(F, f, fola) %-*- texinfo -*- %@deftypefn {Function} blockana %@verbatim %BLOCKANA Blockwise analysis interface % Usage: c=blockana(F, f) % % Input parameters: % Fa : Analysis frame object. % f : Block of signal. % fola : Explicitly defined overlap % Output parameters: % c : Block coefficients. % fola : Stored overlap % % c=BLOCKANA(Fa,f) calculates the coefficients c of the signal block f using % the frame defined by F. The block overlaps are handled according to the % F.blokalg. Assuming BLOCKANA is called in the loop only once, fola* % can be omitted and the overlaps are handled in the background % automatically. % % % References: % N. Holighaus, M. Doerfler, G. A. Velasco, and T. Grill. A framework for % invertible, real-time constant-Q transforms. IEEE Transactions on % Audio, Speech and Language Processing, 21(4):775 -785, 2013. % % Z. Průša. Segmentwise Discrete Wavelet Transform. PhD thesis, Brno % University of Technology, Brno, 2012. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blockana.html} %@seealso{block, blocksyn, blockplay} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'BLOCKANA'); complainif_notvalidframeobj(F,'BLOCKANA'); if nargin<3 fola = []; end if ~isfield(F,'blockalg') F.blockalg = 'naive'; end % Block length Lb = size(f,1); if ~isfield(F,'L') error(['%s: The frame object was not accelerated. See ',... 'BLOCKFRAMEACCEL.'],upper(mfilename)); end % Next block index start (from a global point of view, starting with zero) nextSb = block_interface('getPos'); % Block index start (from a global point of view, starting with zero) Sb = nextSb-Lb; do_sliced = strcmp(F.blockalg,'sliced'); do_segola = strcmp(F.blockalg,'segola'); if strcmp(F.blockalg,'naive') if F.L < Lb error(['%s: The frame object was accelerated with incompatible ',... 'length. The block length is %i but the accelerated ',... 'length is %i.'],upper(mfilename),Lb,F.L); end % Most general. Should work for anything. % Produces awful block artifacts when coefficients are altered. f = [f; zeros(F.L-size(f,1),size(f,2))]; c = F.frana(f); elseif do_sliced || do_segola %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% STEP 1) Determine overlap lengths %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if do_sliced if F.L < 2*Lb error(['%s: The frame object was accelerated with incompatible ',... 'length. The effective block length is %i but the accelerated ',... 'length is %i.'],upper(mfilename),2*Lb,F.L); end % Sliced real-time block processing % Equal block length assumtion Sbolen = Lb; nextSbolen = Lb; else if ~isfield(F,'winLen') error('%s: Frame does not have FIR windows.',upper(mfilename)); end % Window length Lw = F.winLen; switch(F.type) case 'fwt' J = F.J; w = F.g; m = numel(w.h{1}.h); a = w.a(1); if Lb1 && isempty(fola) % Avoiding case when empty fola means just uninitialized % custom overlap. fola = 0; end % Append the previous block fext = [loadOverlap(Sbolen,size(f,2),fola);f]; % Save the current block if nargout>1 fola = storeOverlap(fext,nextSbolen); else storeOverlap(fext,nextSbolen); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% STEP 3) Do the rest %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if do_sliced % Multiply by the slicing window (all channels) fwin = bsxfun(@times,F.sliwin,fext); % If some padding is necessary, do it symmetrically pad = F.L-size(fwin,1); W = size(fwin,2); fwin = [zeros(floor(pad/2),W);... fwin;... zeros(ceil(pad/2),W)]; % Apply transform c = F.frana(fwin); else switch(F.type) case 'fwt' c = block_fwt(fext,w,J); case {'dgtreal','dgt','dwilt','wmdct'} Lwl = floor(Lw/2); Lext = Sbolen + Lb - nextSbolen + Lwl; startc = ceil(Lwl/a)+1; endc = ceil((Lext)/a); % Pad with zeros to comply with the frame requirements fext = [fext; zeros(F.L-size(fext,1),size(fext,2))]; c = F.frana(fext(1:F.L,:)); % Pick just valid coefficients cc = F.coef2native(c,size(c)); cc = cc(:,startc:endc,:); c = F.native2coef(cc); case {'filterbank','filterbankreal'} % Subsampling factors a = F.a(:,1); % Filter lengths gl = F.g_info.gl; % Filter offsets Lwl = max(gl+F.g_info.offset-1); Lext = Sbolen + Lb - nextSbolen + Lwl; startc = ceil(Lwl./a)+1; endc = ceil((Lext)./a); fext = [fext; zeros(F.L-size(fext,1),size(fext,2))]; c = F.frana(fext(1:F.L,:)); cc = F.coef2native(c,size(c)); cc = cellfun(@(cEl,sEl,eEl) cEl(sEl:eEl,:),cc,num2cell(startc),num2cell(endc),'UniformOutput',0); c = F.native2coef(cc); end end else error('%s: Frame was not created with blockaccel.',upper(mfilename)); end end % BLOCKANA function overlap = loadOverlap(L,chan,overlap) %LOADOVERLAP Loads overlap % % if isempty(overlap) overlap = block_interface('getAnaOverlap'); end % Supply zeros if it is empty if isempty(overlap) overlap = zeros(L,chan,block_interface('getClassId')); end Lo = size(overlap,1); if nargin<1 L = Lo; end % If required more than stored, do zero padding if L>Lo oTmp = zeros(L,chan); oTmp(end-Lo+1:end,:) = oTmp(end-Lo+1:end,:)+overlap; overlap = oTmp; else overlap = overlap(end-L+1:end,:); end end % LOADOVERLAP function overlap = storeOverlap(fext,L) %STOREOVERLAP Stores overlap % % if L>size(fext,1) error('%s: Storing more samples than passed.',upper(mfilename)); end overlap = fext(end-L+1:end,:); if nargout<1 block_interface('setAnaOverlap',overlap); end end % STOREOVERLAP ltfat/inst/blockproc/blockplot.m0000664000175000017500000000667712612404256016710 0ustar susnaksusnakfunction cola=blockplot(p,arg0,arg1,cola) %-*- texinfo -*- %@deftypefn {Function} blockplot %@verbatim %BLOCKPLOT Plot block coefficients % Usage: blockplot(p,c); % blockplot(p,F,c); % blockplot(p,F,c,cola); % % Input parameters: % p : JAVA object of the class net.sourceforge.ltfat.SpectFrame. % F : Frame object. % c : Block coefficients. % cola : (Optional) overlap from previous block. % % Output parameters: % cola : Overlap to the next block. % % BLOCKPLOT(p,F,c) appends the block coefficients c to the running % coefficient plot in p. The coefficients must have been obtained by % c=blockana(F,...). The format of c is changed to a rectangular % layout according to the type of F. p must be a Java object with a % append method. % % cola=BLOCKPLOT(p,F,c,cola) does the same, but adds cola to the % first respective coefficients in c and returns last coefficients from % c. This is only relevant for the sliced window blocking approach. % % BLOCKPLOT(p,c) or BLOCKPLOT(p,[],c) does the same, but expects c % to be already formatted matrix of real numbers. The data dimensions % are not restricted, but it will be shrinked or expanded to fit with % the running plot. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blockplot.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'BLOCKPLOT'); if ~isempty(arg0) && isstruct(arg0) && isfield(arg0,'frana') F = arg0; c = arg1; complainif_notenoughargs(nargin,3,'BLOCKPLOT'); complainif_notvalidframeobj(F,'BLOCKPLOT'); if size(c,2)>1 error('%s: Only one channel input is supported.',upper(mfilename)); end ctf = framecoef2tfplot(F,c(:,1)); if strcmp(F.blockalg,'sliced') % DO the coefficient overlapping or cropping %ctf = ctf(:,floor(end*3/8):floor(end*5/8)+1); if nargin>3 olLen = ceil(size(ctf,2)/2); if isempty(cola) cola = zeros(size(ctf,1),olLen,class(ctf)); end ctf(:,1:olLen) = ctf(:,1:olLen) + cola; cola = ctf(:,end+1-olLen:end); ctf = ctf(:,1:olLen); end end ctf = abs(ctf); else if ~isempty(arg0) c = arg0; elseif nargin>2 c = arg1; else error('%s: Not enough input arguments',upper(mfilename)); end if ~isreal(c) error('%s: Complex values are not supported',upper(mfilename)); end ctf = c; end if isoctave % The JAVA 2D-array handling is row-major ctf = cast(ctf,'double').'; javaMethod('append',p,ctf(:),size(ctf,2),size(ctf,1)); else % Matlab casts correctly ctf = cast(ctf,'single'); javaMethod('append',p,ctf); end ltfat/inst/blockproc/blockframepairaccel.m0000664000175000017500000000636712612404256020664 0ustar susnaksusnakfunction [Fao,Fso] = blockframepairaccel(Fa, Fs, Lb, varargin) %-*- texinfo -*- %@deftypefn {Function} blockframepairaccel %@verbatim %BLOCKFRAMEPAIRACCEL Precompute structures for block processing % Usage: F = blockframepairaccel(Fa,Fs,Lb); % % [Fao,Fso]=BLOCKFRAMEPAIRACCEL(Fa,Fs,Lb) works similar to % BLOCKFRAMEACCEL with a pair of frames. The only difference from % calling BLOCKFRAMEACCEL separatelly for each frame is correct % default choice of the slicing windows. Frame objects Fa,Fs will be % accelerated for length 2*Lb. % % The following optional arguments are recognized: % % 'anasliwin',anasliwin : Analysis slicing window. sliwin have to % be a window of length 2Lb or a string % accepted by the FIRWIN function. It is % used only in the slicing window approach. % The default is 'hann'. % % 'synsliwin',synsliwin : Synthesis slicing window. The same as the % previous one holds. The default is 'rect'. % % 'zpad',zpad : Number of zero samples the block will be padded % after it is windowed by a slicing window. Note the % frames will be accelerated for length % 2*Lb+2*kv.zpad. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blockframepairaccel.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,3,'BLOCKFRAMEPAIRACCEL'); complainif_notvalidframeobj(Fa,'BLOCKFRAMEPAIRACCEL'); complainif_notvalidframeobj(Fs,'BLOCKFRAMEPAIRACCEL'); definput.flags.blockalg = {'naive','sliced','segola'}; definput.keyvals.anasliwin = []; definput.keyvals.synsliwin = []; definput.keyvals.zpad = 0; [flags,kv]=ltfatarghelper({},definput,varargin); isSliProp = ~isempty(kv.anasliwin) || ~isempty(kv.synsliwin) || kv.zpad~=0; assert(~(~flags.do_sliced && isSliProp),... sprintf(['%s: Definig slicing window properties without setting the',... ' ''sliced'' flag.'], mfilename)); if flags.do_sliced if isempty(kv.anasliwin) kv.anasliwin = 'hann'; end if isempty(kv.synsliwin) kv.synsliwin = 'hann'; end Fao = blockframeaccel(Fa,Lb,'sliced','sliwin',kv.anasliwin,... 'zpad',kv.zpad); Fso = blockframeaccel(Fs,Lb,'sliced','sliwin',kv.synsliwin,... 'zpad',kv.zpad); else Fao = blockframeaccel(Fa,Lb,flags.blockalg); Fso = blockframeaccel(Fs,Lb,flags.blockalg); end ltfat/inst/blockproc/Contents.m0000664000175000017500000000357312612404256016504 0ustar susnaksusnak% LTFAT - Block processing % % Zdenek Prusa, 2013 - 2015. % % Basic methods % BLOCK - Setup a new block-stream % BLOCKDEVICES - List available audio I/O devices % BLOCKREAD - Read samples from file/device % BLOCKPLAY - Play block (sound output) % BLOCKPANEL - Block-stream control GUI % BLOCKPANELGET - Obtain parameter(s) from GUI % BLOCKDONE - Closes block-stream and frees resources % BLOCKWRITE - Appends data to a wav file % % Block-adapted transforms % BLOCKFRAMEACCEL - Prepare a frame for a block-stream processing % BLOCKFRAMEPAIRACCEL - Prepare a pair of frames for a block-stream processing % BLOCKANA - Block analysis % BLOCKSYN - Block synthesis % % Running visualisation % BLOCKFIGURE - Initialize figure for redrawing % BLOCKPLOT - Append coefficients to the running plot % % Other % LTFATPLAY - Replacement for the sound command allowing selecting an output device % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % Url: http://ltfat.github.io/doc/blockproc/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/blockproc/blockdevices.m0000664000175000017500000000441112612404256017334 0ustar susnaksusnakfunction devs = blockdevices() %-*- texinfo -*- %@deftypefn {Function} blockdevices %@verbatim %BLOCKDEVICES Lists audio devices % Usage: devs = blockdevices(); % % BLOCKDEVICES lists the available audio input and output devices. The % ID can be used in the BLOCK function to specify which device should % be used. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blockdevices.html} %@seealso{block} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . clear playrec; devs = playrec('getDevices'); fprintf('\nAvailable output devices:\n'); for k=1:length(devs) if(devs(k).outputChans) fs = sprintf('%d, ',devs(k).supportedSampleRates); fs = ['[',fs(1:end-2),']' ]; fprintf(['ID =%2d: %s (%s) %d chan., latency %d--%d ms,'... ' fs %s\n'], ... devs(k).deviceID, devs(k).name, ... devs(k).hostAPI, devs(k).outputChans,... floor(1000*devs(k).defaultLowOutputLatency),... floor(1000*devs(k).defaultHighOutputLatency),... fs); end end fprintf('\nAvailable input devices:\n'); for k=1:length(devs) if(devs(k).inputChans) fs = sprintf('%d, ',devs(k).supportedSampleRates); fs = ['[',fs(1:end-2),']' ]; fprintf(['ID =%2d: %s (%s) %d chan., latency %d--%d ms,'... ' fs %s\n'], ... devs(k).deviceID, devs(k).name, ... devs(k).hostAPI, devs(k).inputChans,... floor(1000*devs(k).defaultLowInputLatency),... floor(1000*devs(k).defaultHighInputLatency),fs); end end ltfat/inst/blockproc/java/0000775000175000017500000000000012612404251015435 5ustar susnaksusnakltfat/inst/blockproc/java/net/0000775000175000017500000000000012612404251016223 5ustar susnaksusnakltfat/inst/blockproc/java/net/sourceforge/0000775000175000017500000000000012612404251020546 5ustar susnaksusnakltfat/inst/blockproc/java/net/sourceforge/ltfat/0000775000175000017500000000000012612404251021660 5ustar susnaksusnakltfat/inst/blockproc/java/net/sourceforge/ltfat/ContFrame.java0000664000175000017500000003243312612404251024406 0ustar susnaksusnak/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package net.sourceforge.ltfat; import java.awt.*; import javax.swing.*; import java.awt.KeyEventDispatcher; import java.awt.KeyboardFocusManager; import java.util.List; import java.awt.event.KeyEvent; import java.lang.Override; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.lang.Throwable; /** * * @author zprusa */ public class ContFrame { volatile private boolean showLoadInd = false; private JFrame jf = null; private Map paramMap = null; private Map sliderParamMap = null; private Map paramComponentsMap = null; private Map sliderBoundsMap = null; private KeyboardFocusManager kfm = null; private KeyEventDispatcher ked = null; public double flag = 1; private ExecutorService executor = Executors.newSingleThreadExecutor(); JLabel loadLabel; JProgressBar loadBar; JLabel loadTxt; // Components private int defXPad = 3; private int defYPad = 10; private int namePrefferedSize = 70; private int sliderPrefferedSize = 170; private int valuePrefferedSize = 30; /* Sanity check. Attempt to close the window if there was an exeption in the Matlab code */ @Override public void finalize() throws Throwable { //System.out.println("Finalize called on ContFrame"); try { this.close(); } catch (Throwable t) { throw t; } finally { super.finalize(); } } public void setVisibleParam(String param, boolean visible ) throws NoSuchFieldException { // Do nothing if paramSliderMap has not been initlialized yet if (paramComponentsMap == null) return; List s = (List) paramComponentsMap.get(param); if (s == null) { throw new NoSuchFieldException("Parameter " + param + " not found."); } for (JComponent c : s) { c.setVisible(visible); } //s.disable(); //s.setVisible(false); } public double getParam(String key) throws NoSuchFieldException { if (paramMap == null) return 0; Double d = (Double) paramMap.get(key); if (d == null) { throw new NoSuchFieldException("Parameter " + key + " not found."); } return (Double)paramMap.get(key); } public double[] getParams(String... key) throws NoSuchFieldException { int keyLen = key.length; double[] out = new double[keyLen]; for (int ii = 0; ii < keyLen; ii++) { try { out[ii] = getParam(key[ii]); } catch (NoSuchFieldException err) { throw(err); } } return out; } public double[] getParams() { int outLen = paramMap.size(); if (outLen == 0) { throw new NullPointerException("Parameter map is empty"); } Iterator it = paramMap.entrySet().iterator(); double[] out = new double[outLen]; int ii = 0; while (it.hasNext()) { Map.Entry act = (Map.Entry) it.next(); out[ii++] = (Double) act.getValue(); } return out; } public void addControlElements(final List params) { // Ensure everything is done in the EDT runInEDT(new Runnable() { @Override public void run() { paramMap = new LinkedHashMap(); sliderParamMap = new HashMap(); paramComponentsMap = new HashMap>(); sliderBoundsMap = new HashMap(); initFrameComponents(params); jf.pack(); jf.validate(); jf.setVisible(true); } }); } public void close() { // This is uded to escape the main loop flag = 0; // We have to remove the Ctrl-C blocker if (kfm != null && ked != null) { kfm.removeKeyEventDispatcher(ked); } // Dispose the JFrame, this object lives on if (jf != null) { jf.setVisible(false); jf.dispose(); } } private void onExit() { close(); } private void runInEDT(Runnable r) { if (SwingUtilities.isEventDispatchThread()) { // System.out.println("We are on on EDT. Strange...."); try { r.run(); } catch (Exception e) {} catch (Throwable t) {} } else { try { SwingUtilities.invokeLater(r); } catch (Exception e) {} catch (Throwable t) {} } } private void runInPool(Runnable r) { if (SwingUtilities.isEventDispatchThread()) { System.out.println("Warning! We are on on EDT. Strange...."); } try { executor.execute(r); } catch (Exception e) {} catch (Throwable t) {} } public void updateBar(final double val) { runInPool( new Runnable() { public void run() { if (loadLabel == null || loadBar == null || loadTxt == null) return; if (!showLoadInd) { loadLabel.setVisible(true); loadBar.setVisible(true); loadTxt.setVisible(true); if(jf != null) { jf.pack(); } } loadBar.setValue((int)val); loadTxt.setText(String.format(" %d%%", ((int)val))); if ((int)val > 80) { loadTxt.setForeground(Color.red); } else { loadTxt.setForeground(Color.black); } showLoadInd = true; loadBar.repaint(); loadTxt.repaint(); } }); } public ContFrame() { runInEDT( new Runnable() { @Override public void run() { /* try { // Set System L&F UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (UnsupportedLookAndFeelException e) { // handle exception } catch (ClassNotFoundException e) { // handle exception } catch (InstantiationException e) { // handle exception } catch (IllegalAccessException e) { // handle exception } */ jf = initFrame(); } }); } public void requestFocus() { runInEDT(new Runnable() { @Override public void run() { if (jf != null) { jf.requestFocus(); } } }); } public void setLocation(final double x, final double y) { runInEDT( new Runnable() { @Override public void run() { jf.setLocation((int)x, (int)y); } }); } private JFrame initFrame() { final JFrame buildJF = new JFrame("LTFAT Control Panel"); buildJF.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); buildJF.addWindowListener(new java.awt.event.WindowAdapter() { @Override public void windowClosing(java.awt.event.WindowEvent windowEvent) { close(); } }); // Add a global Ctrc-C keyboard shortcut listener kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager(); ked = new KeyEventDispatcher() { @Override public boolean dispatchKeyEvent(KeyEvent e) { if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_C && e.getID() == KeyEvent.KEY_PRESSED) { // The Ctrl-C is consumed here. It is not passed further. e.consume(); close(); } return false; } }; kfm.addKeyEventDispatcher(ked); return buildJF; } private void initFrameComponents(List params) { GridBagLayout gl = new GridBagLayout(); jf.setLayout(gl); GridBagConstraints labelConst = new GridBagConstraints(); GridBagConstraints sliderConst = new GridBagConstraints(); GridBagConstraints valConst = new GridBagConstraints(); labelConst.gridx = 0; labelConst.gridy = 0; labelConst.fill = GridBagConstraints.VERTICAL; labelConst.ipadx = defXPad; labelConst.ipady = defYPad; labelConst.anchor = GridBagConstraints.CENTER; labelConst.weightx = 0.2; labelConst.weighty = 1.0 / params.size(); sliderConst.gridx = 1; sliderConst.gridy = 0; sliderConst.fill = GridBagConstraints.HORIZONTAL; sliderConst.ipadx = defXPad; sliderConst.ipady = defYPad; sliderConst.anchor = GridBagConstraints.CENTER; sliderConst.weightx = 0.7; sliderConst.weighty = 1.0 / params.size(); valConst.gridx = 2; valConst.gridy = 0; valConst.fill = GridBagConstraints.BOTH; valConst.ipadx = defXPad; valConst.ipady = defYPad; valConst.anchor = GridBagConstraints.LINE_START; valConst.weightx = 0.1; valConst.weighty = 1.0 / params.size(); valConst.insets = new Insets(10, 0, 0, 0); for (List lEl : params) { String name = new String("noname"); String label = new String("nolabel"); Object labelObj = lEl.get(1); if (labelObj instanceof Character) { label = ((Character)labelObj).toString(); } else if (labelObj instanceof String) { label = (String)labelObj; } Object nameObj = lEl.get(0); if (nameObj instanceof Character) { name = ((Character)nameObj).toString(); } else if (nameObj instanceof String) { name = (String)nameObj; } Double minVal = (Double) lEl.get(2); Double maxVal = (Double)lEl.get(3); Double defaultVal = (Double)lEl.get(4); int noVal = ((Double)lEl.get(5)).intValue(); int defValSlider = val2slider(defaultVal, minVal, maxVal, noVal); JLabel jname = new JLabel(label); JSlider jval = new JSlider(0, noVal - 1, defValSlider); final JLabel jvalTxt = new JLabel(String.format("%.3g ", slider2val(jval.getValue(), minVal, maxVal, noVal))); jvalTxt.setPreferredSize(new Dimension(50, 10)); jval.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JSlider jslider = (JSlider) e.getSource(); int sliIntVal = jslider.getValue(); double sliMinVal = ((SliderBounds)sliderBoundsMap.get(jslider)).getMinVal(); double sliMaxVal = ((SliderBounds)sliderBoundsMap.get(jslider)).getMaxVal(); double sliVal = slider2val(sliIntVal, sliMinVal, sliMaxVal, jslider.getMaximum() + 1); final Dimension jvalTxtDim = jvalTxt.getPreferredSize(); jvalTxt.setMinimumSize(jvalTxtDim); jvalTxt.setMaximumSize(jvalTxtDim); jvalTxt.setText(String.format("%.3g", sliVal)); paramMap.put(sliderParamMap.get(jslider), sliVal ); } }); jf.add(jname, labelConst); labelConst.gridy += 1; jf.add(jval, sliderConst); sliderConst.gridy += 1; jf.add(jvalTxt, valConst); valConst.gridy += 1; paramMap.put(name, defaultVal); sliderParamMap.put(jval, name); ArrayList l = new ArrayList(); l.add(jname); l.add(jval); l.add(jvalTxt); paramComponentsMap.put(name, l); sliderBoundsMap.put(jval, new SliderBounds(minVal, maxVal)); } loadTxt = new JLabel("0%"); loadTxt.setPreferredSize(new Dimension(50, 10)); loadLabel = new JLabel("Load:"); loadBar = new JProgressBar(); jf.add(loadLabel, labelConst); jf.add(loadBar, sliderConst); jf.add(loadTxt, valConst); loadLabel.setVisible(false); loadBar.setVisible(false); loadTxt.setVisible(false); } private int val2slider(double val, double minVal, double maxVal, int noVal) { int retVal = (int)Math.round((val - minVal) / (maxVal - minVal) * (noVal - 1)); return Math.min(Math.max(retVal, 0), noVal); } private double slider2val(int slider, double minVal, double maxVal, int noVal) { double retVal = ((double)slider) / (noVal - 1) * (maxVal - minVal) + minVal; return Math.min(Math.max(retVal, minVal), maxVal); } private class SliderBounds { private double minVal = 0.0; private double maxVal = 0.0; SliderBounds(double minVal, double maxVal) { this.minVal = minVal; this.maxVal = maxVal; } double getMaxVal() { return maxVal; } double getMinVal() { return minVal; } } } ltfat/inst/blockproc/java/net/sourceforge/ltfat/thirdparty/0000775000175000017500000000000012612404251024052 5ustar susnaksusnakltfat/inst/blockproc/java/net/sourceforge/ltfat/thirdparty/JRangeSlider.java0000664000175000017500000007543612612404251027245 0ustar susnaksusnakpackage net.sourceforge.ltfat.thirdparty; /* This code is part of the prefuse project: http://prefuse.org/, which is distributed under BSD licence. Copyright (c) 2004-2011 Regents of the University of California. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ import java.awt.BasicStroke; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.util.ArrayList; import java.util.Iterator; import javax.swing.BoundedRangeModel; import javax.swing.DefaultBoundedRangeModel; import javax.swing.JComponent; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** *

Implements a Swing-based Range slider, which allows the user to enter a * range (minimum and maximum) value.

* * @author Ben Bederson * @author Jesse Grosjean * @author Jon Meyer * @author Lance Good * @author jeffrey heer * @author Colin Combe */ public class JRangeSlider extends JComponent implements MouseListener, MouseMotionListener, KeyListener { /* * NOTE: This is a modified version of the original class distributed by * Ben Bederson, Jesse Grosjean, and Jon Meyer as part of an HCIL Tech * Report. It is modified to allow both vertical and horitonal modes. * It also fixes a bug with offset on the buttons. Also fixed a bug with * rendering using (x,y) instead of (0,0) as origin. Also modified to * render arrows as a series of lines rather than as a GeneralPath. * Also modified to fix rounding errors on toLocal and toScreen. * * With inclusion in prefuse, this class has been further modified to use a * bounded range model, support keyboard commands and more extensize * parameterization of rendering/appearance options. Furthermore, a stub * method has been introduced to allow subclasses to perform custom * rendering within the slider through. */ final public static int VERTICAL = 0; final public static int HORIZONTAL = 1; final public static int LEFTRIGHT_TOPBOTTOM = 0; final public static int RIGHTLEFT_BOTTOMTOP = 1; public static int PREFERRED_BREADTH = 16; public static int PREFERRED_LENGTH = 80; final protected static int ARROW_SZ = 16; final protected static int ARROW_WIDTH = 8; final protected static int ARROW_HEIGHT = 4; protected BoundedRangeModel model; protected int orientation; protected int direction; protected boolean empty; protected int increment = 1; protected int minExtent = 0; // min extent, in pixels protected ArrayList listeners = new ArrayList(); protected ChangeEvent changeEvent = null; protected ChangeListener lstnr; protected Color thumbColor = new Color(150,180,220); // ------------------------------------------------------------------------ /** * Create a new range slider. * * @param minimum - the minimum value of the range. * @param maximum - the maximum value of the range. * @param lowValue - the current low value shown by the range slider's bar. * @param highValue - the current high value shown by the range slider's bar. * @param orientation - construct a horizontal or vertical slider? */ public JRangeSlider(int minimum, int maximum, int lowValue, int highValue, int orientation) { this(new DefaultBoundedRangeModel(lowValue, highValue - lowValue, minimum, maximum), orientation,LEFTRIGHT_TOPBOTTOM); } /** * Create a new range slider. * * @param minimum - the minimum value of the range. * @param maximum - the maximum value of the range. * @param lowValue - the current low value shown by the range slider's bar. * @param highValue - the current high value shown by the range slider's bar. * @param orientation - construct a horizontal or vertical slider? * @param direction - Is the slider left-to-right/top-to-bottom or right-to-left/bottom-to-top */ public JRangeSlider(int minimum, int maximum, int lowValue, int highValue, int orientation, int direction) { this(new DefaultBoundedRangeModel(lowValue, highValue - lowValue, minimum, maximum), orientation, direction); } /** * Create a new range slider. * * @param model - a BoundedRangeModel specifying the slider's range * @param orientation - construct a horizontal or vertical slider? * @param direction - Is the slider left-to-right/top-to-bottom or right-to-left/bottom-to-top */ public JRangeSlider(BoundedRangeModel model, int orientation, int direction) { super.setFocusable(true); this.model = model; this.orientation = orientation; this.direction = direction; setForeground(Color.LIGHT_GRAY); this.lstnr = createListener(); model.addChangeListener(lstnr); addMouseListener(this); addMouseMotionListener(this); addKeyListener(this); } /** * Create a listener to relay change events from the bounded range model. * @return a ChangeListener to relay events from the range model */ protected ChangeListener createListener() { return new RangeSliderChangeListener(); } /** * Listener that fires a change event when it receives change event from * the slider list model. */ protected class RangeSliderChangeListener implements ChangeListener { public void stateChanged(ChangeEvent e) { fireChangeEvent(); } } /** * Returns the current "low" value shown by the range slider's bar. The low * value meets the constraint minimum <= lowValue <= highValue <= maximum. */ public int getLowValue() { return model.getValue(); } /** * Sets the low value shown by this range slider. This causes the range slider to be * repainted and a ChangeEvent to be fired. * @param lowValue the low value to use */ public void setLowValue(int lowValue) { int e = (model.getValue()-lowValue)+model.getExtent(); model.setRangeProperties(lowValue, e, model.getMinimum(), model.getMaximum(), false); model.setValue(lowValue); } /** * Returns the current "high" value shown by the range slider's bar. The high * value meets the constraint minimum <= lowValue <= highValue <= maximum. */ public int getHighValue() { return model.getValue()+model.getExtent(); } /** * Sets the high value shown by this range slider. This causes the range slider to be * repainted and a ChangeEvent to be fired. * @param highValue the high value to use */ public void setHighValue(int highValue) { model.setExtent(highValue-model.getValue()); } /** * Set the slider range span. * @param lowValue the low value of the slider range * @param highValue the high value of the slider range */ public void setRange(int lowValue, int highValue) { model.setRangeProperties(lowValue, highValue-lowValue, model.getMinimum(), model.getMaximum(), false); } /** * Gets the minimum possible value for either the low value or the high value. * @return the minimum possible range value */ public int getMinimum() { return model.getMinimum(); } /** * Sets the minimum possible value for either the low value or the high value. * @param minimum the minimum possible range value */ public void setMinimum(int minimum) { model.setMinimum(minimum); } /** * Gets the maximum possible value for either the low value or the high value. * @return the maximum possible range value */ public int getMaximum() { return model.getMaximum(); } /** * Sets the maximum possible value for either the low value or the high value. * @param maximum the maximum possible range value */ public void setMaximum(int maximum) { model.setMaximum(maximum); } /** * Sets the minimum extent (difference between low and high values). * This method does not change the current state of the * model, but can affect all subsequent interaction. * @param minExtent the minimum extent allowed in subsequent interaction */ public void setMinExtent(int minExtent) { this.minExtent = minExtent; } /** * Sets whether this slider is empty. * @param empty true if set to empty, false otherwise */ public void setEmpty(boolean empty) { this.empty = empty; repaint(); } /** * Get the slider thumb color. This is the part of the slider between * the range resize buttons. * @return the slider thumb color */ public Color getThumbColor() { return thumbColor; } /** * Set the slider thumb color. This is the part of the slider between * the range resize buttons. * @param thumbColor the slider thumb color */ public void setThumbColor(Color thumbColor) { this.thumbColor = thumbColor; } /** * Get the BoundedRangeModel backing this slider. * @return the slider's range model */ public BoundedRangeModel getModel() { return model; } /** * Set the BoundedRangeModel backing this slider. * @param brm the slider range model to use */ public void setModel(BoundedRangeModel brm) { model.removeChangeListener(lstnr); model = brm; model.addChangeListener(lstnr); repaint(); } /** * Registers a listener for ChangeEvents. * @param cl the ChangeListener to add */ public void addChangeListener(ChangeListener cl) { if ( !listeners.contains(cl) ) listeners.add(cl); } /** * Removes a listener for ChangeEvents. * @param cl the ChangeListener to remove */ public void removeChangeListener(ChangeListener cl) { listeners.remove(cl); } /** * Fire a change event to all listeners. */ protected void fireChangeEvent() { repaint(); if ( changeEvent == null ) changeEvent = new ChangeEvent(this); Iterator iter = listeners.iterator(); while ( iter.hasNext() ) ((ChangeListener)iter.next()).stateChanged(changeEvent); } /** * @see java.awt.Component#getPreferredSize() */ public Dimension getPreferredSize() { if (orientation == VERTICAL) { return new Dimension(PREFERRED_BREADTH, PREFERRED_LENGTH); } else { return new Dimension(PREFERRED_LENGTH, PREFERRED_BREADTH); } } // ------------------------------------------------------------------------ // Rendering /** * Override this method to perform custom painting of the slider trough. * @param g a Graphics2D context for rendering * @param width the width of the slider trough * @param height the height of the slider trough */ protected void customPaint(Graphics2D g, int width, int height) { // does nothing in this class // subclasses can override to perform custom painting } /** * @see javax.swing.JComponent#paintComponent(java.awt.Graphics) */ public void paintComponent(Graphics g) { Rectangle bounds = getBounds(); int width = (int)bounds.getWidth() - 1; int height = (int)bounds.getHeight() - 1; int min = toScreen(getLowValue()); int max = toScreen(getHighValue()); // Paint the full slider if the slider is marked as empty if (empty) { if (direction == LEFTRIGHT_TOPBOTTOM) { min = ARROW_SZ; max = (orientation == VERTICAL) ? height-ARROW_SZ : width-ARROW_SZ; } else { min = (orientation == VERTICAL) ? height-ARROW_SZ : width-ARROW_SZ; max = ARROW_SZ; } } Graphics2D g2 = (Graphics2D)g; g2.setColor(getBackground()); g2.fillRect(0, 0, width, height); g2.setColor(getForeground()); g2.drawRect(0, 0, width, height); customPaint(g2, width, height); // Draw arrow and thumb backgrounds g2.setStroke(new BasicStroke(1)); if (orientation == VERTICAL) { if (direction == LEFTRIGHT_TOPBOTTOM) { g2.setColor(getForeground()); g2.fillRect(0, min - ARROW_SZ, width, ARROW_SZ-1); paint3DRectLighting(g2,0,min-ARROW_SZ,width,ARROW_SZ-1); if ( thumbColor != null ) { g2.setColor(thumbColor); g2.fillRect(0, min, width, max - min-1); paint3DRectLighting(g2,0,min,width,max-min-1); } g2.setColor(getForeground()); g2.fillRect(0, max, width, ARROW_SZ-1); paint3DRectLighting(g2,0,max,width,ARROW_SZ-1); // Draw arrows g2.setColor(Color.black); paintArrow(g2, (width-ARROW_WIDTH) / 2.0, min - ARROW_SZ + (ARROW_SZ-ARROW_HEIGHT) / 2.0, ARROW_WIDTH, ARROW_HEIGHT, true); paintArrow(g2, (width-ARROW_WIDTH) / 2.0, max + (ARROW_SZ-ARROW_HEIGHT) / 2.0, ARROW_WIDTH, ARROW_HEIGHT, false); } else { g2.setColor(getForeground()); g2.fillRect(0, min, width, ARROW_SZ-1); paint3DRectLighting(g2,0,min,width,ARROW_SZ-1); if ( thumbColor != null ) { g2.setColor(thumbColor); g2.fillRect(0, max, width, min-max-1); paint3DRectLighting(g2,0,max,width,min-max-1); } g2.setColor(getForeground()); g2.fillRect(0, max-ARROW_SZ, width, ARROW_SZ-1); paint3DRectLighting(g2,0,max-ARROW_SZ,width,ARROW_SZ-1); // Draw arrows g2.setColor(Color.black); paintArrow(g2, (width-ARROW_WIDTH) / 2.0, min + (ARROW_SZ-ARROW_HEIGHT) / 2.0, ARROW_WIDTH, ARROW_HEIGHT, false); paintArrow(g2, (width-ARROW_WIDTH) / 2.0, max - ARROW_SZ + (ARROW_SZ-ARROW_HEIGHT) / 2.0, ARROW_WIDTH, ARROW_HEIGHT, true); } } else { if (direction == LEFTRIGHT_TOPBOTTOM) { g2.setColor(getForeground()); g2.fillRect(min - ARROW_SZ, 0, ARROW_SZ-1, height); paint3DRectLighting(g2,min-ARROW_SZ,0,ARROW_SZ-1,height); if ( thumbColor != null ) { g2.setColor(thumbColor); g2.fillRect(min, 0, max - min - 1, height); paint3DRectLighting(g2,min,0,max-min-1,height); } g2.setColor(getForeground()); g2.fillRect(max, 0, ARROW_SZ-1, height); paint3DRectLighting(g2,max,0,ARROW_SZ-1,height); // Draw arrows g2.setColor(Color.black); paintArrow(g2, min - ARROW_SZ + (ARROW_SZ-ARROW_HEIGHT) / 2.0, (height-ARROW_WIDTH) / 2.0, ARROW_HEIGHT, ARROW_WIDTH, true); paintArrow(g2, max + (ARROW_SZ-ARROW_HEIGHT) / 2.0, (height-ARROW_WIDTH) / 2.0, ARROW_HEIGHT, ARROW_WIDTH, false); } else { g2.setColor(getForeground()); g2.fillRect(min, 0, ARROW_SZ - 1, height); paint3DRectLighting(g2,min,0,ARROW_SZ-1,height); if ( thumbColor != null ) { g2.setColor(thumbColor); g2.fillRect(max, 0, min - max - 1, height); paint3DRectLighting(g2,max,0,min-max-1,height); } g2.setColor(getForeground()); g2.fillRect(max-ARROW_SZ, 0, ARROW_SZ-1, height); paint3DRectLighting(g2,max-ARROW_SZ,0,ARROW_SZ-1,height); // Draw arrows g2.setColor(Color.black); paintArrow(g2, min + (ARROW_SZ-ARROW_HEIGHT) / 2.0, (height-ARROW_WIDTH) / 2.0, ARROW_HEIGHT, ARROW_WIDTH, true); paintArrow(g2, max - ARROW_SZ + (ARROW_SZ-ARROW_HEIGHT) / 2.0, (height-ARROW_WIDTH) / 2.0, ARROW_HEIGHT, ARROW_WIDTH, false); } } } /** * This draws an arrow as a series of lines within the specified box. * The last boolean specifies whether the point should be at the * right/bottom or left/top. */ protected void paintArrow(Graphics2D g2, double x, double y, int w, int h, boolean topDown) { int intX = (int)(x+0.5); int intY = (int)(y+0.5); if (orientation == VERTICAL) { if (w % 2 == 0) { w = w - 1; } if (topDown) { for(int i=0; i<(w/2+1); i++) { g2.drawLine(intX+i,intY+i,intX+w-i-1,intY+i); } } else { for(int i=0; i<(w/2+1); i++) { g2.drawLine(intX+w/2-i,intY+i,intX+w-w/2+i-1,intY+i); } } } else { if (h % 2 == 0) { h = h - 1; } if (topDown) { for(int i=0; i<(h/2+1); i++) { g2.drawLine(intX+i,intY+i,intX+i,intY+h-i-1); } } else { for(int i=0; i<(h/2+1); i++) { g2.drawLine(intX+i,intY+h/2-i,intX+i,intY+h-h/2+i-1); } } } } /** * Adds Windows2K type 3D lighting effects */ protected void paint3DRectLighting(Graphics2D g2, int x, int y, int width, int height) { g2.setColor(Color.white); g2.drawLine(x+1,y+1,x+1,y+height-1); g2.drawLine(x+1,y+1,x+width-1,y+1); g2.setColor(Color.gray); g2.drawLine(x+1,y+height-1,x+width-1,y+height-1); g2.drawLine(x+width-1,y+1,x+width-1,y+height-1); g2.setColor(Color.darkGray); g2.drawLine(x,y+height,x+width,y+height); g2.drawLine(x+width,y,x+width,y+height); } /** * Converts from screen coordinates to a range value. */ protected int toLocal(int xOrY) { Dimension sz = getSize(); int min = getMinimum(); double scale; if (orientation == VERTICAL) { scale = (sz.height - (2 * ARROW_SZ)) / (double) (getMaximum() - min); } else { scale = (sz.width - (2 * ARROW_SZ)) / (double) (getMaximum() - min); } if (direction == LEFTRIGHT_TOPBOTTOM) { return (int) (((xOrY - ARROW_SZ) / scale) + min + 0.5); } else { if (orientation == VERTICAL) { return (int) ((sz.height - xOrY - ARROW_SZ) / scale + min + 0.5); } else { return (int) ((sz.width - xOrY - ARROW_SZ) / scale + min + 0.5); } } } /** * Converts from a range value to screen coordinates. */ protected int toScreen(int xOrY) { Dimension sz = getSize(); int min = getMinimum(); double scale; if (orientation == VERTICAL) { scale = (sz.height - (2 * ARROW_SZ)) / (double) (getMaximum() - min); } else { scale = (sz.width - (2 * ARROW_SZ)) / (double) (getMaximum() - min); } // If the direction is left/right_top/bottom then we subtract the min and multiply times scale // Otherwise, we have to invert the number by subtracting the value from the height if (direction == LEFTRIGHT_TOPBOTTOM) { return (int)(ARROW_SZ + ((xOrY - min) * scale) + 0.5); } else { if (orientation == VERTICAL) { return (int)(sz.height-(xOrY - min) * scale - ARROW_SZ + 0.5); } else { return (int)(sz.width-(xOrY - min) * scale - ARROW_SZ + 0.5); } } } /** * Converts from a range value to screen coordinates. */ protected double toScreenDouble(int xOrY) { Dimension sz = getSize(); int min = getMinimum(); double scale; if (orientation == VERTICAL) { scale = (sz.height - (2 * ARROW_SZ)) / (double) (getMaximum()+1 - min); } else { scale = (sz.width - (2 * ARROW_SZ)) / (double) (getMaximum()+1 - min); } // If the direction is left/right_top/bottom then we subtract the min and multiply times scale // Otherwise, we have to invert the number by subtracting the value from the height if (direction == LEFTRIGHT_TOPBOTTOM) { return ARROW_SZ + ((xOrY - min) * scale); } else { if (orientation == VERTICAL) { return sz.height-(xOrY - min) * scale - ARROW_SZ; } else { return sz.width-(xOrY - min) * scale - ARROW_SZ; } } } // ------------------------------------------------------------------------ // Event Handling static final int PICK_NONE = 0; static final int PICK_LEFT_OR_TOP = 1; static final int PICK_THUMB = 2; static final int PICK_RIGHT_OR_BOTTOM = 3; int pick; int pickOffsetLow; int pickOffsetHigh; int mouse; private int pickHandle(int xOrY) { int min = toScreen(getLowValue()); int max = toScreen(getHighValue()); int pick = PICK_NONE; if (direction == LEFTRIGHT_TOPBOTTOM) { if ((xOrY > (min - ARROW_SZ)) && (xOrY < min)) { pick = PICK_LEFT_OR_TOP; } else if ((xOrY >= min) && (xOrY <= max)) { pick = PICK_THUMB; } else if ((xOrY > max) && (xOrY < (max + ARROW_SZ))) { pick = PICK_RIGHT_OR_BOTTOM; } } else { if ((xOrY > min) && (xOrY < (min + ARROW_SZ))) { pick = PICK_LEFT_OR_TOP; } else if ((xOrY <= min) && (xOrY >= max)) { pick = PICK_THUMB; } else if ((xOrY > (max - ARROW_SZ) && (xOrY < max))) { pick = PICK_RIGHT_OR_BOTTOM; } } return pick; } private void offset(int dxOrDy) { model.setValue(model.getValue()+dxOrDy); } /** * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent) */ public void mousePressed(MouseEvent e) { if (orientation == VERTICAL) { pick = pickHandle(e.getY()); pickOffsetLow = e.getY() - toScreen(getLowValue()); pickOffsetHigh = e.getY() - toScreen(getHighValue()); mouse = e.getY(); } else { pick = pickHandle(e.getX()); pickOffsetLow = e.getX() - toScreen(getLowValue()); pickOffsetHigh = e.getX() - toScreen(getHighValue()); mouse = e.getX(); } repaint(); } /** * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent) */ public void mouseDragged(MouseEvent e) { requestFocus(); int value = (orientation == VERTICAL) ? e.getY() : e.getX(); int minimum = getMinimum(); int maximum = getMaximum(); int lowValue = getLowValue(); int highValue = getHighValue(); switch (pick) { case PICK_LEFT_OR_TOP: int low = toLocal(value-pickOffsetLow); if (low < minimum) { low = minimum; } if (low > maximum - minExtent) { low = maximum - minExtent; } if (low > highValue-minExtent) { setRange(low, low + minExtent); } else setLowValue(low); break; case PICK_RIGHT_OR_BOTTOM: int high = toLocal(value-pickOffsetHigh); if (high < minimum + minExtent) { high = minimum + minExtent; } if (high > maximum) { high = maximum; } if (high < lowValue+minExtent) { setRange(high - minExtent, high); } else setHighValue(high); break; case PICK_THUMB: int dxOrDy = toLocal(value - pickOffsetLow) - lowValue; if ((dxOrDy < 0) && ((lowValue + dxOrDy) < minimum)) { dxOrDy = minimum - lowValue; } if ((dxOrDy > 0) && ((highValue + dxOrDy) > maximum)) { dxOrDy = maximum - highValue; } if (dxOrDy != 0) { offset(dxOrDy); } break; } } /** * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent) */ public void mouseReleased(MouseEvent e) { pick = PICK_NONE; repaint(); } /** * @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent) */ public void mouseMoved(MouseEvent e) { if (orientation == VERTICAL) { switch (pickHandle(e.getY())) { case PICK_LEFT_OR_TOP: setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); break; case PICK_RIGHT_OR_BOTTOM: setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); break; case PICK_THUMB: setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); break; case PICK_NONE : setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); break; } } else { switch (pickHandle(e.getX())) { case PICK_LEFT_OR_TOP: setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); break; case PICK_RIGHT_OR_BOTTOM: setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); break; case PICK_THUMB: setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); break; case PICK_NONE : setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); break; } } } /** * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) */ public void mouseClicked(MouseEvent e) { } /** * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent) */ public void mouseEntered(MouseEvent e) { } /** * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent) */ public void mouseExited(MouseEvent e) { } private void grow(int increment) { model.setRangeProperties(model.getValue()-increment, model.getExtent()+2*increment, model.getMinimum(), model.getMaximum(), false); } /** * @see java.awt.event.KeyListener#keyPressed(java.awt.event.KeyEvent) */ public void keyPressed(KeyEvent e) { int kc = e.getKeyCode(); boolean v = (orientation == VERTICAL); boolean d = (kc == KeyEvent.VK_DOWN); boolean u = (kc == KeyEvent.VK_UP); boolean l = (kc == KeyEvent.VK_LEFT); boolean r = (kc == KeyEvent.VK_RIGHT); int minimum = getMinimum(); int maximum = getMaximum(); int lowValue = getLowValue(); int highValue = getHighValue(); if ( v&&r || !v&&u ) { if ( lowValue-increment >= minimum && highValue+increment <= maximum ) { grow(increment); } } else if ( v&&l || !v&&d ) { if ( highValue-lowValue >= 2*increment ) { grow(-1*increment); } } else if ( v&&d || !v&&l ) { if ( lowValue-increment >= minimum ) { offset(-increment); } } else if ( v&&u || !v&&r ) { if ( highValue+increment <= maximum ) { offset(increment); } } } /** * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent) */ public void keyReleased(KeyEvent e) { } /** * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent) */ public void keyTyped(KeyEvent e) { } @Override public void setPreferredSize(Dimension dim){ PREFERRED_BREADTH = dim.height; PREFERRED_LENGTH = dim.width; } } // end of class JRangeSlider ltfat/inst/blockproc/java/net/sourceforge/ltfat/Utils.java0000664000175000017500000001201012612404251023615 0ustar susnaksusnak/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package net.sourceforge.ltfat; import java.awt.image.BufferedImage; import java.awt.image.DataBufferFloat; /** * * @author zprusa */ public class Utils { public static void abs(float[][] in) { int width = in[0].length; int height = in.length; for(int yy=0;yymax){ max = in[yy][xx]; } } } return max; } public static void clipToRange(float[][] in, float min, float max) { int width = in[0].length; int height = in.length; for(int yy=0;yymax){ in[yy][xx]=max; } if(in[yy][xx]max){ in[yy]=max; } if(in[yy]max){ in[yy]=max; } if(in[yy]width){ g2.drawImage(image,startsrunPos,heightRed*height, width,0,0,0,(int)colWidth,(int)colHeight, null); srunPos -= width; startsrunPos = 0; } g2.drawImage(image,startsrunPos,heightRed*height, srunPos,0,0,0,(int)colWidth,(int)colHeight, null); } spectPanel.repaint(); } }); } public void append(final float[][] col) { final int colWidth = col[0].length; final int colHeight = col.length; runInPool(new Runnable() { @Override public void run() { Utils.pow(col); Utils.db(col); Float mindb = new Float(climMin); Float maxdb = new Float(climMax); Utils.clipToRange(col, mindb, maxdb); byte[] pixels = new byte[colWidth*colHeight]; Utils.toByte(col, pixels, mindb, maxdb); //System.out.println(pixels); DataBuffer dbuf = new DataBufferByte(pixels, colWidth*colHeight, 0); SampleModel smod = new MultiPixelPackedSampleModel( DataBuffer.TYPE_BYTE, colWidth,colHeight, 8); WritableRaster raster = Raster.createWritableRaster(smod, dbuf, null); BufferedImage image = new BufferedImage(cm, raster, false, null); Graphics2D g2 = (Graphics2D) spectPanel.getGraphics2D(); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); synchronized(graphicsLock) { int startsrunPos = srunPos; srunPos += spectStep; if(srunPos>width){ g2.drawImage(image,startsrunPos,heightRed*height, width,0,0,0,colWidth,colHeight, null); srunPos -= width; startsrunPos = 0; } g2.drawImage(image,startsrunPos,heightRed*height, srunPos,0,0,0,colWidth,colHeight, null); } spectPanel.repaint(); } }); } public void append(double[][] col) { // System.out.println("Jessss"+col.length); } private void runInEDT(Runnable r){ if (SwingUtilities.isEventDispatchThread()) { // System.out.println("We are on on EDT. Strange...."); try{ r.run(); } catch(Exception e){} catch(Throwable t){} } else { try{ SwingUtilities.invokeLater(r); } catch(Exception e){} catch(Throwable t){} } } private void runInPool(Runnable r){ if (SwingUtilities.isEventDispatchThread()) { System.out.println("Warning! We are on on EDT. Strange...."); } try{ executor.execute(r); } catch(Exception e){} catch(Throwable t){} } private class SpectPanel extends JPanel{ private BufferedImage spectbf = null; private float zoom = 1.0f; public void addWheelListener(){ this.addMouseWheelListener(new MouseWheelListener() { @Override public void mouseWheelMoved(MouseWheelEvent e) { if(e.getWheelRotation()>0){ zoom+=0.05; zoom = Math.min(zoom,1.0f); } else{ zoom-=0.05; zoom = Math.max(zoom,0.05f); } } }); } public void addPopupMenu(JPopupMenu jpm){ this.setComponentPopupMenu(jpm); } public SpectPanel(int width, int height) { Dimension dim = new Dimension(width, height); setSize(dim); setPreferredSize(dim); spectbf = new BufferedImage(width, heightRed*height, BufferedImage.TYPE_4BYTE_ABGR); Graphics2D bfGraphics = (Graphics2D) spectbf.getGraphics(); bfGraphics.setColor(Color.LIGHT_GRAY); bfGraphics.fillRect(0, 0, width, heightRed*height); } public void setImage(BufferedImage bf){ spectbf = bf; } protected void setZoom(float zoom) { this.zoom = zoom; } @Override public void paintComponent(Graphics g) { //super.paint(g); Dimension thisSize = this.getSize(); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_SPEED); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED); if (spectbf != null) { //synchronized(bfLock){ synchronized(graphicsLock) { int winIdx = (int) (thisSize.width * srunPos/((float)spectbf.getWidth())); int sbfH=(int)((1.0f-zoom)*spectbf.getHeight()); g2d.drawImage(spectbf,thisSize.width-winIdx,0,thisSize.width,thisSize.height, 0,sbfH, srunPos,spectbf.getHeight(), null); g2d.drawImage(spectbf,0,0,thisSize.width-winIdx,thisSize.height, srunPos,sbfH,spectbf.getWidth() , spectbf.getHeight(), null); } } } public Graphics2D getGraphics2D(){ return (Graphics2D) spectbf.getGraphics(); } } } ltfat/inst/blockproc/java/Makefile0000664000175000017500000000070712612404251017101 0ustar susnaksusnak# Use Make to process this file. JC=javac FLAGS=-source 1.6 -target 1.6 include ../../../src/ostools.mk default: $(JC) $(FLAGS) net/sourceforge/ltfat/*.java net/sourceforge/ltfat/thirdparty/*.java jar cf blockproc.jar net/sourceforge/ltfat/*.class net/sourceforge/ltfat/thirdparty/*.class clean: classclean $(RM) *.jar classclean: $(RM) net$(PS)sourceforge$(PS)ltfat$(PS)*.class $(RM) net$(PS)sourceforge$(PS)ltfat$(PS)thirdparty$(PS)*.class ltfat/inst/blockproc/blockdone.m0000664000175000017500000000347312612404256016646 0ustar susnaksusnakfunction blockdone(varargin) %-*- texinfo -*- %@deftypefn {Function} blockdone %@verbatim %BLOCKDONE Destroy the current blockstream % Usage: blockdone(); % % BLOCKDONE() closes the current blockstream. The function resets % the playrec tool and clear all buffers in block_interface. % % BLOCKDONE(p1,p2,...) in addition tries to call close methods on % all input arguments which are JAVA objects (which are passed by reference). % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blockdone.html} %@seealso{block} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % TO DO: Process additional zeros to compensate for the delay block_interface('clearAll'); if playrec('isInitialised') playrec('reset'); end clear playrec; for ii=1:numel(varargin) p = varargin{ii}; if isjava(p) try javaMethod('close',p); catch warning(sprintf('%s: Object %i does not have a close method.',... upper(mfilename),ii)); end elseif isstruct(p) && isfield(p,'destructor') &&... isa(p.destructor,'function_handle') p.destructor(); end end ltfat/inst/blockproc/blockpanelget.m0000664000175000017500000000504312612404256017513 0ustar susnaksusnakfunction [par,varargout] = blockpanelget(p,varargin) %-*- texinfo -*- %@deftypefn {Function} blockpanelget %@verbatim %BLOCKPANELGET Get parameters from GUI % Usage: [par,...] = blockpanelget(p,spar,...) % % Input parameters: % p : JAVA object % spar : String. Name of the parameter. % % Output parameters: % par : Single value or vector of parameters. % % par = BLOCKPANELGET(p,'spar') gets a current value of the parameter % 'spar' from the GUI specified in p. % par = BLOCKPANELGET(p,'spar1','spar2','spar3') gets current values % of the parameters 'spar1', 'spar2' and 'spar3' from the GUI and % stores them in a vector p. % [par1,par2,par3] = BLOCKPANELGET(p,'spar1','spar2','spar3') gets % current values of the parameters 'spar1', 'spar2' and 'spar3' % from the GUI and stores them in the separate variables par1,par2 % and par3. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blockpanelget.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . nout = nargout(); complainif_notenoughargs(nargin,1,'BLOCKPANELGET'); if nout~=1 && nargin==1 error(['%s: Ambiguous output. When no parameter is explicitly defined,',... ' the function cannot return more tha one output parameter.'],mfilename); end if nargin>1 if nout~=1 && nout ~= numel(varargin) error('%s: Number of inputs does not match with number of outputs.',upper(mfilename)); end res = javaMethod('getParams',p,varargin); if nout == 1 if numel(res)==1 par = res(1); else par = res; end else par = res(1); varargout = num2cell(res(2:end)); end else par = javaMethod('getParams',p); if isoctave parTmp = par; par = zeros(numel(parTmp),1); for ii=1:numel(parTmp) par(ii) = parTmp(ii); end end end ltfat/inst/blockproc/blockfigure.m0000664000175000017500000000601712612404256017177 0ustar susnaksusnakfunction p = blockfigure(varargin) %-*- texinfo -*- %@deftypefn {Function} blockfigure %@verbatim %BLOCKFIGURE Block figure object % Usage: p=blockfigure(); % p=blockfigure('cm',cmaps); % % Output parameters: % p : JAVA object of the class net.sourceforge.ltfat.SpectFrame % % p=BLOCKFIGURE() initializes a JAVA object for the BLOCKPLOT % routine. % % Optional key-value pairs: % % 'cm',cmaps : Custom colormap (a L x3 matrix) or colormaps % (cell array of matrixes). % % The function takes in the additional optional arguments: % % 'location',location: Window inital position. location % has to be 2 element row vector [x,y] % defining distance from the top-left % corner of the screen. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blockfigure.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . definput.keyvals.cm=[]; definput.keyvals.location=[50,120]; [flags,kv]=ltfatarghelper({},definput,varargin); complainif_isjavaheadless('BLOCKFIGURE'); p = []; try p = javaObject('net.sourceforge.ltfat.SpectFrame'); javaMethod('setLocation',p,kv.location(1),kv.location(2)); catch% err error(['%s: Could not load net.sourceforge.ltfat.SpectFrame. It is not ',... 'compiled or it is not in Matlab classpath. In the latter case, ',... 'ltfatstart should do the trick.'],upper(mfilename)); end if ~isvector(kv.location) || any(size(kv.location)~=[1,2]) ||... any(kv.location<0) || ~isreal(kv.location) error(['%s: Location has to be a 2 element row vector of ',... ' positive numbers.'],upper(mfilename)); end % Gives p time to be correctly initialized. Otherwise, calling methods % of the object can fail. pause(0.1); if isempty(kv.cm) % Create a default colormap. kv.cm = {jet(256)}; elseif isnumeric(kv.cm) % Enclose the colormap to a single element cell array. kv.cm = {kv.cm}; elseif iscell(kv.cm) if numel(kv.cm)>1 error('%s: TO DO: More than one colormap is not supported yet.',upper(mfilename)); end end % Set the colormap. if isoctave javaMethod('setColormap',p,kv.cm{1}(:),size(kv.cm{1},1),size(kv.cm{1},2)); else javaMethod('setColormap',p,kv.cm{1}); end javaMethod('show',p); ltfat/inst/blockproc/blockplay.m0000664000175000017500000000334012612404256016657 0ustar susnaksusnakfunction blockplay(f) %-*- texinfo -*- %@deftypefn {Function} blockplay %@verbatim %BLOCKPLAY Schedules block to be played % Usage: blockplay(L) % % Input parameters: % f : Samples. % % Function schedules samples in f to be played. Since playrec handles % playing and recording in a single command, the actual relay of samples % to playrec is done in the next call of BLOCKREAD. % In case no audio output is expected (in the rec only mode), % the function does nothing. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/blockproc/blockplay.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,1,'BLOCKPLAY'); source = block_interface('getSource'); if ( iscell(source) && strcmp(source{1},'rec')) || ... strcmp(source,'rec') % Do nothing in rec only mode. return; % error('%s: Blocks cannot be played in the rec only mode.',upper(mfilename)); end % Reformat f if necessary f = comp_sigreshape_pre(f,'BLOCKPLAY',0); block_interface('setToPlay',f); ltfat/inst/demos/0000775000175000017500000000000012612404256013652 5ustar susnaksusnakltfat/inst/demos/demo_blockproc_paramequalizer.m0000664000175000017500000001663512612404256022127 0ustar susnaksusnakfunction demo_blockproc_paramequalizer(source,varargin) %-*- texinfo -*- %@deftypefn {Function} demo_blockproc_paramequalizer %@verbatim %DEMO_BLOCKPROC_PARAMEQUALIZER Real-time equalizer demonstration % Usage: demo_blockproc_paramequalizer('gspi.wav') % % For additional help call DEMO_BLOCKPROC_PARAMEQUALIZER without arguments. % % This demonstration shows an example of a octave parametric % equalizer. See chapter 5.2 in the book by Zolzer. % % References: % U. Zolzer. Digital Audio Signal Processing. John Wiley and Sons Ltd, 2 % edition, 2008. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_blockproc_paramequalizer.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if demo_blockproc_header(mfilename,nargin) return; end % Buffer length % Larger the number the higher the processing delay. 1024 with fs=44100Hz % makes ~23ms. % The value can be any positive integer. % Note that the processing itself can introduce additional delay. % Quality parameter of the peaking filters Q = sqrt(2); % Filters filts = [ struct('Hb',[1;0],'Ha',[1;0],'G',0,'Z',[0;0],'type','lsf'),... struct('Hb',[1;0;0],'Ha',[1;0;0],'G',0,'Z',[0;0],'type','peak'),... struct('Hb',[1;0;0],'Ha',[1;0;0],'G',0,'Z',[0;0],'type','peak'),... struct('Hb',[1;0;0],'Ha',[1;0;0],'G',0,'Z',[0;0],'type','peak'),... struct('Hb',[1;0;0],'Ha',[1;0;0],'G',0,'Z',[0;0],'type','peak'),... struct('Hb',[1;0;0],'Ha',[1;0;0],'G',0,'Z',[0;0],'type','hsf')... ]; % Control pannel (Java object) % Each entry determines one parameter to be changed during the main loop % execution. pcell = cell(1,numel(filts)); for ii=1:numel(filts) pcell{ii} = {sprintf('band%i',ii),'Gain',-10,10,filts(ii).G,41}; end p = blockpanel(pcell); % Setup blocktream try fs = block(source,varargin{:},'loadind',p); catch % Close the windows if initialization fails blockdone(p); err = lasterror; error(err.message); end % Buffer length (30 ms) bufLen = floor(30e-3*fs); % Cutoff/center frequency feq = [0.0060, 0.0156, 0.0313, 0.0625, 0.1250, 0.2600]*fs; % Build the filters [filts(1).Ha, filts(1).Hb] = parlsf(feq(1),blockpanelget(p,'band1'),fs); [filts(2).Ha, filts(2).Hb] = parpeak(feq(2),Q,blockpanelget(p,'band2'),fs); [filts(3).Ha, filts(3).Hb] = parpeak(feq(3),Q,blockpanelget(p,'band3'),fs); [filts(4).Ha, filts(4).Hb] = parpeak(feq(4),Q,blockpanelget(p,'band4'),fs); [filts(5).Ha, filts(5).Hb] = parpeak(feq(5),Q,blockpanelget(p,'band5'),fs); [filts(6).Ha, filts(6).Hb] = parhsf(feq(6),blockpanelget(p,'band6'),fs); flag = 1; %Loop until end of the stream (flag) and until panel is opened while flag && p.flag % Obtain gains of the respective filters G = blockpanelget(p,'band1','band2','band3','band4','band5','band6'); % Check if any of the user-defined gains is different from the actual ones % and do recomputation. for ii=1:numel(filts) if G(ii)~=filts(ii).G filts(ii).G = G(ii); if strcmpi('lsf',filts(ii).type) [filts(ii).Ha, filts(ii).Hb] = parlsf(feq(ii),filts(ii).G,fs); elseif strcmpi('hsf',filts(ii).type) [filts(ii).Ha, filts(ii).Hb] = parhsf(feq(ii),filts(ii).G,fs); elseif strcmpi('peak',filts(ii).type) [filts(ii).Ha, filts(ii).Hb] = parpeak(feq(ii),Q,filts(ii).G,fs); else error('Uknown filter type.'); end end end % Read block of length bufLen [f,flag] = blockread(bufLen); % Do the filtering. Output of one filter is passed to the input of the % following filter. Internal conditions are used and stored. for ii=1:numel(filts) [f,filts(ii).Z] = filter(filts(ii).Ha,filts(ii).Hb,f,filts(ii).Z); end % Play the block blockplay(f); end blockdone(p); function [Ha,Hb]=parlsf(fc,G,Fs) % PARLSF Parametric Low-Shelwing filter % Input parameters: % fm : Cut-off frequency % G : Gain in dB % Fs : Sampling frequency % Output parameters: % Ha : Transfer function numerator coefficients. % Hb : Transfer function denominator coefficients. % % For details see Table 5.4 in the reference. Ha = zeros(3,1); Hb = zeros(3,1); %b0 Hb(1) = 1; Ha(1) = 1; K = tan(pi*fc/Fs); if G>0 V0=10^(G/20); den = 1 + sqrt(2)*K + K*K; % a0 Ha(1) = (1+sqrt(2*V0)*K+V0*K*K)/den; % a1 Ha(2) = 2*(V0*K*K-1)/den; % a2 Ha(3) = (1-sqrt(2*V0)*K+V0*K*K)/den; % b1 Hb(2) = 2*(K*K-1)/den; % b2 Hb(3) = (1-sqrt(2)*K+K*K)/den; elseif G<0 V0=10^(-G/20); den = 1 + sqrt(2*V0)*K + V0*K*K; % a0 Ha(1) = (1+sqrt(2)*K+K*K)/den; % a1 Ha(2) = 2*(K*K-1)/den; % a2 Ha(3) = (1-sqrt(2)*K+K*K)/den; % b1 Hb(2) = 2*(V0*K*K-1)/den; % b2 Hb(3) = (1-sqrt(2*V0)*K+V0*K*K)/den; end function [Ha,Hb]=parpeak(fc,Q,G,Fs) % PARLSF Parametric Peaking filter % Input parameters: % fm : Cut-off frequency % Q : Filter quality. Q=fc/B, where B is filter bandwidth. % G : Gain in dB % Fs : Sampling frequency % Output parameters: % Ha : Transfer function numerator coefficients. % Hb : Transfer function denominator coefficients. % % For details see Table 5.3 in the reference. Ha = zeros(3,1); Hb = zeros(3,1); %b0 Hb(1) = 1; Ha(1) = 1; K = tan(pi*fc/Fs); if G>0 V0=10^(G/20); den = 1 + K/Q + K*K; % a0 Ha(1) = (1+V0*K/Q+K*K)/den; % a1 Ha(2) = 2*(K*K-1)/den; % a2 Ha(3) = (1-V0*K/Q+K*K)/den; % b1 Hb(2) = 2*(K*K-1)/den; % b2 Hb(3) = (1-K/Q+K*K)/den; elseif G<0 V0=10^(-G/20); den = 1 + V0*K/Q + K*K; % a0 Ha(1) = (1+K/Q+K*K)/den; % a1 Ha(2) = 2*(K*K-1)/den; % a2 Ha(3) = (1-K/Q+K*K)/den; % b1 Hb(2) = 2*(K*K-1)/den; % b2 Hb(3) = (1-V0*K/Q+K*K)/den; end function [Ha,Hb]=parhsf(fm,G,Fs) % PARLSF Parametric High-shelving filter % Input parameters: % fm : Cut-off frequency % G : Gain in dB % Fs : Sampling frequency % Output parameters: % Ha : Transfer function numerator coefficients. % Hb : Transfer function denominator coefficients. % % For details see Table 5.3 in the reference. Ha = zeros(3,1); Hb = zeros(3,1); %b0 Hb(1) = 1; Ha(1) = 1; K = tan(pi*fm/Fs); if G>0 V0=10^(G/20); den = 1 + sqrt(2)*K + K*K; % a0 Ha(1) = (V0+sqrt(2*V0)*K+K*K)/den; % a1 Ha(2) = 2*(K*K-V0)/den; % a2 Ha(3) = (V0-sqrt(2*V0)*K+K*K)/den; % b1 Hb(2) = 2*(K*K-1)/den; % b2 Hb(3) = (1-sqrt(2)*K+K*K)/den; elseif G<0 V0=10^(-G/20); den = V0 + sqrt(2*V0)*K + K*K; % a0 Ha(1) = (1+sqrt(2)*K+K*K)/den; % a1 Ha(2) = 2*(K*K-1)/den; % a2 Ha(3) = (1-sqrt(2)*K+K*K)/den; % b1 Hb(2) = 2*(K*K/V0-1)/den; % b2 Hb(3) = (1-sqrt(2/V0)*K+K*K/V0)/den; end ltfat/inst/demos/demo_blockproc_slidingerblets.m0000664000175000017500000000475612612404256022120 0ustar susnaksusnakfunction demo_blockproc_slidingerblets(source,varargin) %-*- texinfo -*- %@deftypefn {Function} demo_blockproc_slidingerblets %@verbatim %DEMO_BLOCKPROC_SLIDINGERBLETS Basic real-time rolling erblet-spectrogram visualization % Usage: demo_blockproc_slidingerblets('gspi.wav') % % For additional help call DEMO_BLOCKPROC_SLIDINGERBLETS without arguments. % % This demo shows a simple rolling erblet-spectrogram of whatever is specified in % source. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_blockproc_slidingerblets.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if demo_blockproc_header(mfilename,nargin) return; end % Control pannel (Java object) % Each entry determines one parameter to be changed during the main loop % execution. p = blockpanel({ {'GdB','Gain',-20,20,0,21},... {'cMult','C mult',0,80,20,81} }); fobj = blockfigure(); % Setup blocktream try fs=block(source,varargin{:},'loadind',p); catch % Close the windows if initialization fails blockdone(p,fobj); err = lasterror; error(err.message); end % Buffer length (30 ms) bufLen = floor(30e-3*fs); zpad = floor(bufLen/2); % Number of filters M = 200; F = frame('erbletfb',fs,2*bufLen+2*zpad,'fractionaluniform','M',M); Fa = blockframeaccel(F,bufLen,'sliced','zpad',zpad); flag = 1; cola = []; %Loop until end of the stream (flag) and until panel is opened while flag && p.flag % Get parameters [gain,mult] = blockpanelget(p,'GdB','cMult'); gain = 10^(gain/20); mult = 10^(mult/20); % Read block of length bufLen [f,flag] = blockread(bufLen); f = f*gain; % Apply analysis frame c = blockana(Fa, f); % Plot cola = blockplot(fobj,Fa,mult*c(:,1),cola); blockplay(f); end blockdone(p,fobj,Fa); ltfat/inst/demos/demo_wavelets.m0000664000175000017500000000546112612404256016674 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_wavelets %@verbatim %DEMO_WAVELETS Wavelet filter banks % % This demo exemplifies the use of the wavelet filter bank trees. All % representations use "least asymmetric" Daubechies wavelet orthonormal % filters 'sym8' (8-regular, length 16). % % Figure 1: DWT representation % % The filter bank tree consists of 11 levels of iterated 2-band basic % wavelet filter bank, where only the low-pass output is further % decomposed. This results in 12 bands with octave resolution. % % Figure 2: 8-band DWT representation % % The filter bank tree (effectively) consists of 3 levels of iterated % 8-band basic wavelet filter bank resulting in 22 bands. Only the % low-pass output is decomposed at each level. % % Figure 3: Full Wavelet filter bank tree representation % % The filter bank tree depth is 8 and it is fully decomposed meaning % both outputs (low-pass and high-pass) of the basic filter bank is % plot further. This results in 256 bands linearly covering the % frequency axis. % % Figure 4: Full Wavelet filter bank tree representation % % The same case as before, but symmetric nearly orthogonal basic % filter bank is used. % % Figure 5: Full Dual-tree Wavelet filter bank representation % % This is a 2 times redundant representation using Q-shift dual-tree % wavelet filters. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_wavelets.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Read the test signal and crop it to the range of interest [f,fs]=gspi; f=f(10001:100000); dr=50; figure(1); [c1,info]=fwt(f,'sym8',11); plotwavelets(c1,info,fs,'dynrange',dr); figure(2); [c2,info]=wfbt(f,{'sym8',3,'quadband'}); plotwavelets(c2,info,fs,'dynrange',dr); figure(3); [c3,info]=wfbt(f,{'sym8',8,'full'}); plotwavelets(c3,info,fs,'dynrange',dr); figure(4); [c4,info]=wfbt(f,{'symorth3',8,'full'}); plotwavelets(c4,info,fs,'dynrange',dr); figure(5); [c5,info]=dtwfbreal(f,{'qshift5',8,'full','first','symorth3'}); plotwavelets(c5,info,fs,'dynrange',dr); ltfat/inst/demos/demosinit.m0000664000175000017500000000163612612404256016031 0ustar susnaksusnakstatus=1; %-*- texinfo -*- %@deftypefn {Function} demosinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demosinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/demos/demo_nsdgt.m0000664000175000017500000000565712612404256016170 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_nsdgt %@verbatim %DEMO_NSDGT Non-stationary Gabor transform demo % % This script sets up a non-stationary Gabor frame with the specified % parameters, computes windows and corresponding canonical dual windows % and a test signal, and plots the windows and the energy of the % coefficients. % % Figure 1: Windows + dual windows % % This figure shows the window functions used and the corresponding % canonical dual windows. % % Figure 2: Spectrogram (absolute value of coefficients in dB) % % This figure shows a (colour-coded) image of the nsdgt coefficient % modulus. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_nsdgt.html} %@seealso{nsdgt, insdgt, nsgabdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp(['Type "help demo_nsdgt" to see a description of how this example',... ' works.']); % Setup parameters and length of signal. Ls=965; % Length of signal. N=16; % Number of time positions % Define a set of windows with length growing linearly. The step beetween % to consecutive windows also grows linearly. M=round(linspace(40,200,N)'); a=cumsum(round(M/2)); a=a-a(1); a_new=round(M/2); g={}; for ii=1:length(M) g{ii}=firwin('hann',M(ii)); end % Compute corresponding dual windows gd=nsgabdual(g,a_new,M,Ls); % Plot them figure(1); color = ['b', 'r']; for ii = 1:length(a) subplot(2,1,1); hold on; plot(a(ii)-1-floor(M(ii)/2)+(1:M(ii)), fftshift(g{ii}),... color(rem(ii,2)+1)); subplot(2,1,2); hold on; plot(a(ii)-1-floor(M(ii)/2)+(1:M(ii)), fftshift(gd{ii}),... color(rem(ii,2)+1)); end subplot(2,1,1); title('Analysis windows'); xlabel('Time index'); subplot(2,1,2); title('Dual synthesis windows'); xlabel('Time index'); % Define a sinus test signal so it is periodic. f=sin(2*pi*(289/Ls)*(0:Ls-1)'); % Calculate coefficients. c=nsdgt(f,g,a_new,M); % Plot corresponding spectrogram figure(2); plotnsdgt(c,a,'dynrange',100); title('Spectrogram of test signal') % Test reconstruction f_r=insdgt(c,gd,a_new,Ls); % Print relative error of reconstruction. rec_err = norm(f-f_r)/norm(f); fprintf(['Relative error of reconstruction (should be close to zero.):'... ' %e \n'],rec_err); ltfat/inst/demos/demo_frsynabs.m0000664000175000017500000000435312612404256016670 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_frsynabs %@verbatim %DEMO_FRSYNABS Construction of a signal with a given spectrogram % % This demo demonstrates iterative reconstruction of a spectrogram. % % Figure 1: Original spectrogram % % This figure shows the target spectrogram % % Figure 2: Linear reconstruction % % This figure shows a spectrogram of a linear reconstruction of the % target spectrogram. % % Figure 3: Iterative reconstruction using the Griffin-Lim method. % % This figure shows a spectrogram of an iterative reconstruction of the % target spectrogram using the Griffin-Lim projection method. % % Figure 4: Iterative reconstruction using the BFGS method. % % This figure shows a spectrogram of an iterative reconstruction of the % target spectrogram using the BFGS method. % % The BFGS method makes use of the minFunc software. To use the BFGS method, % please install the minFunc software from: % http://www.cs.ubc.ca/~schmidtm/Software/minFunc.html. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_frsynabs.html} %@seealso{isgramreal, isgram} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . s=ltfattext; figure(1); imagesc(s); colormap(gray); axis('xy'); figure(2); F = frame('dgtreal','gauss',8,800); scoef = framenative2coef(F,s); sig_lin = frsyn(F,sqrt(scoef)); sgram(sig_lin,'dynrange',100); figure(3); sig_griflim = frsynabs(F,scoef); sgram(sig_griflim,'dynrange',100); figure(4); sig_bfgs = frsynabs(F,scoef,'bfgs'); sgram(sig_bfgs,'dynrange',100); ltfat/inst/demos/demo_blockproc_slidingcqt.m0000664000175000017500000000641112612404256021235 0ustar susnaksusnakfunction demo_blockproc_slidingcqt(source,varargin) %-*- texinfo -*- %@deftypefn {Function} demo_blockproc_slidingcqt %@verbatim %DEMO_BLOCKPROC_SLIDINGCQT Basic real-time rolling CQT-spectrogram visualization % Usage: demo_blockproc_slidingcqt('gspi.wav') % % For additional help call DEMO_BLOCKPROC_SLIDINGCQT without arguments. % % This demo shows a simple rolling CQT-spectrogram of whatever is specified in % source. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_blockproc_slidingcqt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if demo_blockproc_header(mfilename,nargin) return; end % Control pannel (Java object) % Each entry determines one parameter to be changed during the main loop % execution. p = blockpanel({ {'GdB','Gain',-20,20,0,21},... {'cMult','C mult',-40,40,10,41} }); fobj = blockfigure(); % Buffer length % Larger the number the higher the processing delay. 1024 with fs=44100Hz % makes ~23ms. % Note that the processing itself can introduce additional delay. % Setup blocktream try fs=block(source,varargin{:},'loadind',p); catch % Close the windows if initialization fails blockdone(p,fobj); err = lasterror; error(err.message); end % Buffer length (30 ms) bufLen = floor(30e-3*fs); zpad = floor(bufLen/2); % Prepare CQT filters in range floor(fs/220),floor(fs/2.2) Hz, % 48 bins per octave % 320 + 2 filters in total (for fs = 44100 Hz). % And a frame object representing the filterbank F = frame('cqtfb',fs,floor(fs/220),floor(fs/2.2),48,2*bufLen+2*zpad,'fractionaluniform'); % Accelerate the frame object to be used with the "sliced" block processing % handling. Fa = blockframeaccel(F,bufLen,'sliced','zpad',zpad); % This variable holds overlaps in coefficients needed in the sliced block % handling between consecutive loop iterations. cola = []; flag = 1; %Loop until end of the stream (flag) and until panel is opened while flag && p.flag % Get parameters [gain, mult] = blockpanelget(p,'GdB','cMult'); % Overal gain of the input gain = 10^(gain/20); % Coefficient magnitude mult. factor % Introduced to make coefficients to tune % the coefficients to fit into dB range used by % blockplot. mult = 10^(mult/20); % Read block of length bufLen [f,flag] = blockread(bufLen); f = f*gain; % Apply analysis frame c = blockana(Fa, f); % Append coefficients to plot cola = blockplot(fobj,Fa,mult*c(:,1),cola); % Play the samples blockplay(f); end % Close the stream, destroy the objects blockdone(p,Fa,fobj); ltfat/inst/demos/demo_filterbanks.m0000664000175000017500000001415112612404256017342 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_filterbanks %@verbatim %DEMO_FILTERBANKS CQT, ERBLET and AUDLET filterbanks % % This demo shows CQT (Constant Quality Transform), ERBLET (Equivalent % Rectangular Bandwidth -let transform), and AUDLET (Auditory -let) % representations acting as filterbanks with high and low redundancies. % Note that ERBLET and AUDLET are similar concepts. The main difference % is that ERBlet uses only the perceptual ERB scale while AUDlet allows % for various perceptual scales like Bark or Mel scales. In short, % ERBFILTERS is a wrapper of AUDFILTERS for the ERB scale. % Filterbanks are build such that the painless condition is always satisfied. % Real input signal and filters covering only the positive frequency range % are used. The redundancy is calculated as a ratio of the number of (complex) % coefficients and the input length times two to account for the storage % requirements of complex numbers. % % The high redundancy representation uses 'uniform' subsampling i.e. % all channels are subsampled with the same subsampling factor which % is the lowest from the filters according to the painless condition % rounded towards zero. % % The low redundancy representation uses 'fractional' subsampling % which results in the least redundant representation still % satisfying the painless condition. Actual time positions of atoms % can be non-integer, hence the word fractional. % % Figure 1: ERBLET representations % % The high-redundany plot (top) consists of 400 channels (~9 filters % per ERB) and low-redundany plot (bottom) consists of 44 channels % (1 filter per ERB). % % Figure 2: CQT representations % % Both representations consist of 280 channels (32 channels per octave, % frequency range 50Hz-20kHz). The high-redundany represention is on % the top and the low-redundancy repr. is on the bottom. % % Figure 3: AUDLET representations % % The first representation consists of 72 channels BARKlet FB (3 filters % per Bark in the frequency range 100Hz-16kHz using fractional subsampling. % The second representation consists of 40 channels MELlet FB using % uniform subsampling and triangular windows. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_filterbanks.html} %@seealso{audfilters, erbfilters, cqtfilters} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Read the test signal and crop it to the range of interest [f,fs]=gspi; f=f(10001:100000); dr=50; figure(1); subplot(2,1,1); % Create the ERB filterbank using 400 filters linearly spaced in the % ERB scale and using uniform subsampling. [g,a,fc]=erbfilters(fs,numel(f),'M',400,'uniform'); % Compute the filterbank response c1=filterbank(f,g,a); % Compute redundancy erb1_redundancy = 2*sum(1./a); % Plot the representation plotfilterbank(c1,a,fc,fs,dr,'audtick'); title('ERBLET representations') subplot(2,1,2); % Create the ERB filterbank using 44 filters linearly spaced in the % ERB scale and using fractional subsampling. [g,a,fc]=erbfilters(fs,numel(f),'fractional'); % Compute the filterbank response c2=filterbank(f,g,a); % Compute redundancy erb2_redundancy = 2*sum(a(:,2)./a(:,1)); % Plot the representation plotfilterbank(c2,a,fc,fs,dr,'audtick'); fprintf('ERBLET high redundancy %.2f, low redundany %.2f.\n',... erb1_redundancy,erb2_redundancy); figure(2); subplot(2,1,1); % Create the CQT filterbank using 32 channels per octave in frequency % range 50Hz-20kHz using uniform subsampling. [g,a,fc] = cqtfilters(fs,50,20000,32,numel(f),'uniform'); % Compute the filterbank response c3=filterbank(f,g,a); % Compute redundancy cqt1_redundancy = 2*sum(1./a); % Plot the representation plotfilterbank(c3,a,fc,fs,'dynrange',dr); title('CQT representations') subplot(2,1,2); % Create the CQT filterbank using 32 channels per octave in frequency % range 50Hz-20kHz using fractional subsampling. [g,a,fc] = cqtfilters(fs,50,20000,32,numel(f),'fractional'); % Compute the filterbank response c4=filterbank(f,g,a); % Compute redundancy cqt2_redundancy = 2*sum(a(:,2)./a(:,1)); % Plot the representation plotfilterbank(c4,a,fc,fs,'dynrange',dr); fprintf('CQT high redundancy %.2f, low redundany %.2f.\n',... cqt1_redundancy,cqt2_redundancy); % Finally two settings of AUDFILTERS are illustrated, namely an analysis on % the Bark scale (top) and one on the Mel scale using triangular windows (bottom). figure(3); subplot(2,1,1); % Create a Barklet FB with 3 filters per Bark in the % frequency range 100Hz-16kHz using fractional subsampling. [g,a,fc]=audfilters(fs,numel(f),100,16000,'bark','fractional','spacing',1/3); % Compute the filterbank response c5=filterbank(f,{'realdual',g},a); % Compute redundancy bark_redundancy = 2*sum(a(:,2)./a(:,1)); % Plot the representation plotfilterbank(c5,a,fc,fs,dr,'audtick'); title('AUDLET representations: Bark scale (top) and Mel scale (bottom)') fprintf('BARKLET redundancy %.2f\n',bark_redundancy); subplot(2,1,2); % Create a MELlet FB with 40 filters and a triangular window using % uniform subsampling. [g,a,fc]=audfilters(fs,numel(f),'mel','uniform','M',40,'tria'); % Compute the filterbank response c6=filterbank(f,{'realdual',g},a); % Compute redundancy mel_redundancy = 2*sum(a.^-1); % Plot the representation plotfilterbank(c6,a,fc,fs,dr,'audtick'); title('MELlet representation') fprintf('MELLET redundancy %.2f\n',mel_redundancy); ltfat/inst/demos/demo_blockproc_dgtequalizer.m0000664000175000017500000000606512612404256021601 0ustar susnaksusnakfunction demo_blockproc_dgtequalizer(source,varargin) %-*- texinfo -*- %@deftypefn {Function} demo_blockproc_dgtequalizer %@verbatim %DEMO_BLOCKPROC_DGTEQUALIZER Real-time audio manipulation in the transform domain % Usage: demo_blockproc_dgtequalizer('gspi.wav') % % For additional help call DEMO_BLOCKPROC_DGTEQUALIZER without arguments. % % This script demonstrates a real-time Gabor coefficient manipulation. % Frequency bands of Gabor coefficients are multiplied (weighted) by % values taken from sliders having a similar effect as a octave equalizer. % The shown spectrogram is a result of a re-analysis of the synthetized % block to show a frequency content of what is actually played. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_blockproc_dgtequalizer.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if demo_blockproc_header(mfilename,nargin) return; end M = 1000; fobj = blockfigure(); octaves = 6; voices = 1; eqbands = (octaves)*voices; d = floor((floor(M/2)+1)*2.^(-(0:eqbands-1)./(voices))); d = fliplr([d,0]); % Basic Control pannel (Java object) parg = {{'GdB','Gain',-20,20,0,21}}; for ii=1:eqbands parg{end+1} = {sprintf('G%idB',ii),sprintf('band%i',ii),-20,20,0,21}; end p = blockpanel(parg); % Setup blocktream try fs=block(source,varargin{:},'loadind',p); catch % Close the windows if initialization fails blockdone(p,fobj); err = lasterror; error(err.message); end % Buffer length (30 ms) bufLen = floor(30e-3*fs); % Window length in ms winLenms = 20; %floor(fs*winLenms/1e3) [F,Fdual] = framepair('dgtreal',{'hann',floor(fs*winLenms/1e3)},'dual',40,M); [Fa,Fs] = blockframepairaccel(F,Fdual, bufLen,'segola'); flag = 1; ola = []; ola2 = []; %Loop until end of the stream (flag) and until panel is opened while flag && p.flag gain = blockpanelget(p); gain = 10.^(gain/20); [f,flag] = blockread(bufLen); f=f*gain(1); gain = gain(2:end); [c, ola] = blockana(Fa, f, ola); cc = framecoef2tf(Fa,c); % Do the weighting for ii=1:eqbands cc(d(ii)+1:d(ii+1),:,:) = gain(ii)*cc(d(ii)+1:d(ii+1),:,:); end c = frametf2coef(Fa,cc); fhat = blocksyn(Fs, c, size(f,1)); blockplay(fhat); % Do re-analysis of the modified [c2, ola2] = blockana(Fa, fhat, ola2); blockplot(fobj,Fa,c2(:,1)); end blockdone(p,fobj); ltfat/inst/demos/demo_gabmixdual.m0000664000175000017500000000676712612404256017171 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_gabmixdual %@verbatim %DEMO_GABMIXDUAL How to use GABMIXDUAL % % This script illustrates how one can produce dual windows % using GABMIXDUAL % % The demo constructs a dual window that is more concentrated in % the time domain by mixing the original Gabor window by one that is % extremely well concentrated. The result is somewhat in the middle % of these two. % % The lower framebound of the mixing Gabor system is horrible, % but this does not carry over to the gabmixdual. % % Figure 1: Gabmixdual of two Gaussians. % % The first row of the figure shows the canonical dual window % of the input window, which is a Gaussian function perfectly % localized in the time and frequency domains. % % The second row shows the canonical dual window of the window we % will be mixing with: This is a Gaussian that is 10 times more % concentrated in the time domain than in the frequency domain. % The resulting canonical dual window has rapid decay in the time domain. % % The last row shows the gabmixdual of these two. This is a non-canonical % dual window of the first Gaussian, with decay resembling that of the % second. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_gabmixdual.html} %@seealso{gabmixdual, gabdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('Type "help demo_gabmixdual" to see a description of how this demo works.'); L=120; a=10; M=12; % Compute frequency shift. b=L/M; % Optimally centered Gaussian g1=pgauss(L); % Compute and print framebounds. [A1,B1]=gabframebounds(g1,a,M); disp(''); disp('Framebounds of initial Gabor system:'); A1, B1 % Narrow Gaussian g2=pgauss(L,.1); % Compute and print framebounds. [A2,B2]=gabframebounds(g2,a,M); disp(''); disp('Framebounds of mixing Gabor system:'); A2, B2 % Create a gabmixdual. The window gd is a dual window to g1 gd=gabmixdual(g1,g2,a,M); % Compute and print framebounds. [Am,Bm]=gabframebounds(gd,a,M); disp(''); disp('Framebounds of gabmixdual Gabor system:'); Am, Bm % Create canonical duals, for plotting. gc1=gabdual(g1,a,M); gc2=gabdual(g2,a,M); % Standard note on plotting: % % - The windows are all centered around zero, but this % is not visually pleasing, so the window must be % shifted to the middle by an FFTSHIFT figure(1); subplot(3,2,1); plot(fftshift(gc1)); title('Canonical dual window.'); subplot(3,2,2); plot(20*log10(abs(fftshift(gc1)))); title('Decay of canonical dual window.'); subplot(3,2,3); plot(fftshift(gc2)); title('Can. dual of mix. window.'); subplot(3,2,4); plot(20*log10(abs(fftshift(gc2)))); title('Decay of can.dual of mix. window.') subplot(3,2,5); plot(fftshift(gd)); title('Gabmixdual'); subplot(3,2,6); plot(20*log10(abs(fftshift(gd)))); title('Decay of gabmixdual'); ltfat/inst/demos/demo_firwin.m0000664000175000017500000000240012612404256016326 0ustar susnaksusnakclf; hold all; L=30; dr=110; magresp(firwin('hanning',L,'1'),'fir','dynrange',dr); magresp(firwin('hamming',L,'1'),'fir','dynrange',dr); magresp(firwin('blackman',L,'1'),'fir','dynrange',dr); magresp(firwin('nuttall',L,'1'),'fir','dynrange',dr); magresp(firwin('itersine',L,'1'),'fir','dynrange',dr); legend('Hann','Hamming','Blackman','Nuttall','Itersine'); %-*- texinfo -*- %@deftypefn {Function} demo_firwin %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_firwin.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/demos/demo_audiocompression.m0000664000175000017500000000541612612404256020425 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_audiocompression %@verbatim %DEMO_AUDIOCOMPRESSION Audio compression using N-term approx % % This demos shows how to do audio compression using best N-term % approximation of an WMDCT transform. % % The signal is transformed using an orthonormal WMDCT transform. % Then approximations with a fixed number N of coefficients are obtained % by: % % Linear approximation: The N coefficients with lowest frequency % index are kept. % % Non-linear approximation: The N largest coefficients (in % magnitude) are kept. % % The corresponding approximated signal can be computed using IWMDCT. % % Figure 1: Rate-distorition plot % % The figure shows the output Signal to Noise Ratio (SNR) as a function % of the number of retained coefficients. % % Note: The inverse WMDCT is not needed for computing computing % SNRs. Instead Parseval theorem states that the norm of a signal equals % the norm of the sequence of its WMDCT coefficients. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_audiocompression.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Load audio signal % Use the 'glockenspiel' signal. sig=gspi; % Shorten signal L = 2^16; sig = sig(1:L); % Number of frequency channels M = 1024; % Number of time steps N = L/M; % Generate window gamma = wilorth(M,L); % Compute wmdct coefficients c = wmdct(sig,gamma,M); % L2 norm of signal InputL2Norm = norm(c,'fro'); % Approximate, and compute SNR values kmax = M; kmin = kmax/32; % 32 is an arbitrary choice krange = kmin:32:(kmax-1); % same remark for k = krange, ResL2Norm_NL = norm(c-largestn(c,k*N),'fro'); SNR_NL(k) = 20*log10(InputL2Norm/ResL2Norm_NL); ResL2Norm_L = norm(c(k:kmax,:),'fro'); SNR_L(k) = 20*log10(InputL2Norm/ResL2Norm_L); end % Plot figure(1); set(gca,'fontsize',14); plot(krange*N,SNR_NL(krange),'x-b',... krange*N,SNR_L(krange),'o-r'); axis tight; grid; legend('Best N-term','Linear'); xlabel('Number of Samples', 'fontsize',14); ylabel('SNR (dB)','fontsize',14); ltfat/inst/demos/demo_blockproc_denoising.m0000664000175000017500000000533212612404256021054 0ustar susnaksusnakfunction demo_blockproc_denoising(source,varargin) %-*- texinfo -*- %@deftypefn {Function} demo_blockproc_denoising %@verbatim %DEMO_BLOCKPROC_DENOISING Variable coefficients thresholding % Usage: demo_blockproc_denoising('gspi.wav') % % For additional help call DEMO_BLOCKPROC_DENOISING without arguments. % % The present demo allows you to set the coefficient threshold during the % playback using the control panel. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_blockproc_denoising.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if demo_blockproc_header(mfilename,nargin) return; end % Control pannel (Java object) % Each entry determines one parameter to be changed during the main loop % execution. p = blockpanel({ {'GdB','Gain',-20,20,0,21},... {'Thr','Treshold',0,0.1,0,1000} }); % Number of frequency channels M = 1000; % Setup blocktream try fs=block(source,varargin{:},'loadind',p); catch % Close the windows if initialization fails blockdone(p); err = lasterror; error(err.message); end % Buffer length (30 ms) bufLen = floor(30e-3*fs); % Window length in ms winLenms = 20; %floor(fs*winLenms/1e3) [F,Fdual] = framepair('dgtreal',{'hann',floor(fs*winLenms/1e3)},'dual',40,M); % Or using fwt %[F,Fdual] = framepair('fwt','ana:symorth3','dual',7); [Fa,Fs] = blockframepairaccel(F,Fdual, bufLen,'segola'); flag = 1; %Loop until end of the stream (flag) and until panel is opened while flag && p.flag % Obtain parameters from the control panel gain = 10^(p.getParam('GdB')/20); % dB -> val thres = p.getParam('Thr'); %bufLen = floor(p.getParam('bufLen')); % Read block of length bufLen [f,flag] = blockread(bufLen); % Apply analysis frame c = blockana(Fa, f*gain); % Plot % blockplot(fobj,F,c); % Apply thresholding c = thresh(c,thres,'soft'); % Apply synthesis frame fhat = real(blocksyn(Fs, c, size(f,1))); % Play the block %fhat = f; blockplay(fhat); end blockdone(p); ltfat/inst/demos/demo_blockproc_basicloop.m0000664000175000017500000000400312612404256021042 0ustar susnaksusnakfunction demo_blockproc_basicloop(source,varargin) %-*- texinfo -*- %@deftypefn {Function} demo_blockproc_basicloop %@verbatim %DEMO_BLOCKPROC_BASICLOOP Basic real-time audio manipulation % Usage: demo_blockproc_basicloop('gspi.wav') % % For additional help call DEMO_BLOCKPROC_BASICLOOP without arguments. % % The demo runs simple playback loop allowing to set gain in dB. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_blockproc_basicloop.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if demo_blockproc_header(mfilename,nargin) return; end % Basic Control pannel (Java object) p = blockpanel({ {'GdB','Gain',-20,20,0,21},... }); % Setup blocktream try fs = block(source,varargin{:},'loadind',p); catch % Close the windows if initialization fails blockdone(p); err = lasterror; error(err.message); end % Set buffer length to 30 ms L = floor(30e-3*fs); flag = 1; %Loop until end of the stream (flag) and until panel is opened while flag && p.flag gain = blockpanelget(p,'GdB'); gain = 10^(gain/20); [f,flag] = blockread(L); % The following does nothing in the rec only mode. blockplay(f*gain); % The following does nothing if 'outfile' was not specified blockwrite(f); end blockdone(p); ltfat/inst/demos/demo_wfbt.m0000664000175000017500000000711412612404256016001 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_wfbt %@verbatim %DEMO_WFBT Auditory filterbanks built using filterbank tree structures % % This demo shows two specific constructions of wavelet filterbank trees % using several M-band filterbanks with possibly different M (making the % thee non-homogenous) in order to approximate auditory frequency bands % and a musical scale respectively. Both wavelet trees produce perfectly % reconstructable non-redundant representations. % % The constructions are the following: % % 1) Auditory filterbank, approximately dividing the frequency band % into intervals reminisent of the bask scale. % % 2) Musical filterbank, approximately dividing the freq. band into % intervals reminicent of the well-tempered musical scale. % % Shapes of the trees were taken from fig. 8 and fig. 9 from the refernece. % Sampling frequency of the test signal is 48kHz as used in the article. % % Figure 1: Frequency responses of the auditory filterbank. % % Both axes are in logarithmic scale. % % Figure 2: TF plot of the test signal using the auditory filterbank. % % Figure 3: Frequency responses of the musical filterbank. % % Both axes are in logarithmic scale. % % Figure 4: TF plot of the test signal using the musical filterbank. % % References: % F. Kurth and M. Clausen. Filter bank tree and M-band wavelet packet % algorithms in audio signal processing. Signal Processing, IEEE % Transactions on, 47(2):549-554, Feb 1999. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_wfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Load a test signal and resample it to 48 kHz since such sampling % rate is assumed in the reference. f = resample(greasy,3,1); fs = 48000; % Bark-like filterbank tree % Creating tree depicted in Figure 8 in the reference. w = wfbtinit({'cmband3',1}); w = wfbtput(1,0,'cmband6',w); w = wfbtput(1,1,'cmband3',w); w = wfbtput(2,0:1,'cmband5',w); w = wfbtput(2,2:3,'cmband2',w); % Convert to filterbank [g,a] = wfbt2filterbank(w); % Plot frequency responses figure(1); filterbankfreqz(g,a,2*2048,'plot','fs',fs,'dynrange',30,'posfreq','flog'); % Do the transform [c,info] = wfbt(f,w); disp('The reconstruction should be close to zero:') norm(f-iwfbt(c,info)) figure(2); plotwavelets(c,info,fs,'dynrange',60); % Well-tempered musical scale filterbank tree % Creating tree depicted in Figure 9 in the reference. w2 = wfbtinit({'cmband4',1}); w2 = wfbtput(1,0:1,'cmband6',w2); w2 = wfbtput(2,0:1,'cmband4',w2); w2 = wfbtput(3,1:4,'cmband4',w2); % Convert to filterbank [g2,a2] = wfbt2filterbank(w2); figure(3); filterbankfreqz(g2,a2,2*2048,'plot','fs',fs,'dynrange',30,'posfreq','flog'); [c2,info2] = wfbt(f,w2); disp('The reconstruction should be close to zero:') norm(f-iwfbt(c2,info2)) figure(4); plotwavelets(c2,info2,fs,'dynrange',60); ltfat/inst/demos/demo_pgauss.m0000664000175000017500000000661312612404256016344 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_pgauss %@verbatim %DEMO_PGAUSS How to use PGAUSS % % This script illustrates various properties of the Gaussian function. % % Figure 1: Window+Dual+Tight % % This figure shows an optimally centered Gaussian for a % given Gabor system, its canonical dual and tight windows % and the DFTs of these windows. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_pgauss.html} %@seealso{pgauss} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('Type "help demo_pgauss" to see a description of how this demo works.'); % A quick test: If the second input parameter to % pgauss is not specified, the output will be % invariant under an unitary DFT. Matlabs FFT is does not % preserve the norm, so it must be scaled a bit. L=128; g=pgauss(L); disp(''); disp('Test of DFT invariance: Should be close to zero.'); norm(g-dft(g)) % Setup parameters and length of signal. % Note that it must hold that L=M*b=N*a for some integers % b and N, and that a <= M L=72; % Length of signal. a=6; % Time shift. M=9; % Number of modulations. % Calculate the frequency shift. b=L/M; % For this Gabor system, the optimally concentrated Gaussian % is given by g=pgauss(L,a/b); % This is not invarient with respect to a DFT, but it is still % real and whole point even disp(''); disp('The function is WP even. The following should be 1.'); isevenfunction(g) disp('Therefore, its DFT is real.'); disp('The norm of the imaginary part should be close to zero.'); norm(imag(dft(g))) % Calculate the canonical dual. gdual=gabdual(g,a,M); % Calculate the canonical tight window. gtight=gabtight(g,a,M); % Plot them: % Standard note on plotting: % % - All windows have real DFTs, but Matlab does not % always recoqnize this, so we have to filter away % the small imaginary part by calling REAL(...) % % - The windows are all centered around zero, but this % is not visually pleasing, so the window must be % shifted to the middle by an FFTSHIFT % gf_plot = fftshift(real(dft(g))); gdual_plot = fftshift(gdual); gdualf_plot = fftshift(real(dft(gdual))); gtight_plot = fftshift(gtight); gtightf_plot = fftshift(real(dft(gtight))); figure(1); subplot(3,2,1); x=(1:L).'; plot(x,fftshift(g),'-',... x,circshift(fftshift(g),a),'-',... x,circshift(fftshift(g),-a),'-'); title('g=pgauss(72,6/8)'); subplot(3,2,2); plot(gf_plot); title('g, frequency domain'); subplot(3,2,3); plot(gdual_plot); title('Dual window of g'); subplot(3,2,4); plot(gdualf_plot); title('dual window, frequency domain'); subplot(3,2,5); plot(gtight_plot); title('Tight window generated from g'); subplot(3,2,6); plot(gtightf_plot); title('tight window, frequency domain'); ltfat/inst/demos/demo_filterbanksynchrosqueeze.m0000664000175000017500000001021112612404256022160 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_filterbanksynchrosqueeze %@verbatim %DEMO_FILTERBANKSYNCHROSQUEEZE Filterbank synchrosqueezing and inversion % % The demo shows that the synchrosqueezed filterbank representation can be % directly used to reconstruct the original signal. % Since we do not work with a filterbank which forms a tight frame % (its FILTERBANKRESPONSE is not constant) the direct reconstruction % (mere summing all the channels) does not work well. We can fix that by % filtering (equalizing) the result by the inverse of the overall analysis % filterbank frequency response. % % Figure 1: ERBlet spectrogram (top) and synchrosqueezed ERBlet spectrogram (bottom) % % The signal used is the first second from GSPI. Only the energy of % the coefficients is show. Both representations are in fact complex and % invertible. % % Figure 2: Errors of the direct and the equalized reconstructions % % There is still a small DC offset of the signal obtained by the direct % summation. % % References: % N. Holighaus, Z. Průša, and P. L. Soendergaard. Reassignment and % synchrosqueezing for general time-frequency filter banks, subsampling % and processing. Signal Processing, submitted, 2015. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_filterbanksynchrosqueeze.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Get one second of gspi Ls = 44100; [f,fs] = gspi; f = f(1:Ls); % Create an UNIFORM filterbank [g,a,fc] = erbfilters(fs,Ls,'uniform','M',400); % We will not do no subsampling. % This is the main requirement for synchrosqueezing to work. a = 1; % Compute the time phase derivative and the coefficients [tgrad,~,~,c] = filterbankphasegrad(f,g,a); % Do the synchrosqueezing cs = filterbanksynchrosqueeze(c,tgrad,cent_freqs(fs,fc)); % Plot spectrograms figure(1);clf; subplot(2,1,1); plotfilterbank(c,a,fc,fs,60); subplot(2,1,2); plotfilterbank(cs,a,fc,fs,60); % Reformat the coefficients to matrices cmat = cell2mat(c.'); csmat = cell2mat(cs.'); % Compute the overall analysis filterbank response. Frespall = sum(filterbankfreqz(g,a,Ls),2); % The fiterbank is defined only for positive frequencies, we % sum the response with its involution Frespfull = Frespall + involute(Frespall); % The filterbank is not tight, so the direct reconstruction % will not give a good reconstruction. % We do that anyway for comparison. % % Just scale so that the response is around 1 C = mean(abs(Frespfull)); Frespfull = Frespfull/C; % Direct reconstruction from the original coefficients fhat1 = 2*real(sum(cmat,2))/C; % Direct reconstruction from the synchrosqueezed coefficents fhat1s = 2*real(sum(csmat,2))/C; % Reconstruction errors err1 = norm(f-fhat1)/norm(f); err1s = norm(f-fhat1s)/norm(f); % We "equalize" the reconstruction by inverse of Frespfull fhat2 = real(ifft(fft(fhat1)./Frespfull)); fhat2s = real(ifft(fft(fhat1s)./Frespfull)); % Compute errors err2 = norm(f-fhat2)/norm(f); err2s = norm(f-fhat2s)/norm(f); % Plot errors for comparison figure(2);clf; title('Error of the reconstruction'); plot([f-fhat1s, f-fhat2s]); legend({'notequalized','equalized'}); fprintf(['Direct reconstruction MSE:\n From the coefficients: %e\n',... ' From the synchrosqueezed coefficients: %e\n'],err1,err1s); fprintf(['Equalized reconstruction MSE:\n From the coefficients: %e\n',... ' From the synchrosqueezed coefficients: %e\n'],err2,err2s); ltfat/inst/demos/demo_audscales.m0000664000175000017500000000357012612404256017005 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_audscales %@verbatim %DEMO_AUDSCALES Plot of the different auditory scales % % This demos generates a simple figure that shows the behaviour of % the different audiory scales in the frequency range from 0 to 8000 Hz. % % Figure 1: Auditory scales % % The figure shows the behaviour of the audiory scales on a normalized % frequency plot. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_audscales.html} %@seealso{freqtoaud, audtofreq, audspace, audspacebw} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp(['Type "help demo_audscales" to see a description of how this ', ... 'demo works.']); % Set the limits flow=0; fhigh=8000; plotpoints=50; xrange=linspace(flow,fhigh,plotpoints); figure(1); types = {'erb','bark','mel','erb83','mel1000'}; symbols = {'k-' ,'ro' ,'gx' ,'b+' ,'y*'}; hold on; for ii=1:numel(types) curve = freqtoaud(xrange,types{ii}); % Normalize the frequency to a maximum of 1. curve=curve/curve(end); plot(xrange,curve,symbols{ii}); end; hold off; legend(types{:},'Location','SouthEast'); xlabel('Frequency (Hz)'); ylabel('Auditory unit (normalized)'); ltfat/inst/demos/demo_dgt.m0000664000175000017500000001261612612404256015620 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_dgt %@verbatim %DEMO_DGT Basic introduction to DGT analysis/synthesis % % This demo shows how to compute Gabor coefficients of a signal. % % Figure 1: Spectrogram of the 'bat' signal. % % The figure shows a spectrogram of the 'bat' signal. The % coefficients are shown on a linear scale. % % Figure 2: Gabor coefficients of the 'bat' signal. % % The figure show a set of Gabor coefficients for the 'bat' signal, % computed using a DGT with a Gaussian window. The coefficients % contains all the information to reconstruct the signal, even though % there a far fewer coefficients than the spectrogram contains. % % Figure 3: Real-valued Gabor analysis % % This figure shows only the coefficients for the positive % frequencies. As the signal is real-value, these coefficients % contain all the necessary information. Compare to the shape of the % spectrogram shown on Figure 1. % % Figure 4: DGT coefficients on a spectrogram % % This figure shows how the coefficients from DGTREAL can be picked % from the coefficients computed by a full Short-time Fourier % transform, as visualized by a spectrogram. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_dgt.html} %@seealso{sgram, dgt, dgtreal} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('Type "help demo_dgt" to see a description of how this demo works.'); % Load a test signal f=bat; % sampling rate of the test signal, only important for plotting fs=143000; % Length of signal Ls=length(f); disp(' '); disp('------ Spectrogram analysis -----------------------------------'); figure(1); c_sgram=sgram(f,fs,'lin'); title('Spectrogram of the bat test signal.'); % Number of coefficients in the Spectrogram no_sgram=numel(c_sgram); disp(' '); disp('The spectrogram is highly redundant.'); fprintf('No. of coefficients in the signal: %i\n',Ls); fprintf('No. of coefficients in the spectrogram: %i\n',no_sgram); fprintf('Redundacy of the spectrogram: %f\n',no_sgram/Ls); % WARNING: In the above code, the spectrogram routine SGRAM returns the % coefficients use to plot the image. These coefficients are ONLY % intended to be used by post-processing image tools, and in this % example, the are only used to illustrate the redundancy of the % spectogram. Numerical Gabor signal analysis and synthesis should ALWAYS % be done using the DGT, IDGT, DGTREAL and IDGTREAL functions, see the % following sections of this example. disp(' '); disp('---- Simple Gabor analysis using a standard Gaussian window. ----'); disp('Setup parameters for a Discrete Gabor Transform.') disp('Time shift:') a=20 disp('Number of frequency channels.'); M=40 disp(' '); disp('Note that it must hold that L = M*b = N*a for some integers b, N and L,'); disp('and that a. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % -------- first part: Analytically known FIR window ----------------- % The lattice constants to use. a=16; M=2*a; % When working with FIR windows, some routines (gabdualnorm, magresp) % require a transform length. Strictly speaking, this should be infinity, % but this is not possible in the current implementation. Choosing an % LLong that is some high multiple of M provides a very good approximation % of the correct result. LLong=M*16; % Compute the iterated sine window. This window is a tight window when used % with a Gabor system where the number of channels is larger than or % equal to the length of the window. g=gabwin('itersine',a,M); disp(''); disp('Reconstruction error using itersine window, should be close to zero:'); gabdualnorm(g,g,a,M,LLong) figure(1); % Plot the window in the time-domain. subplot(2,1,1); plot(fftshift(g)); title('itersine FIR window.'); % Plot the magnitude response of the window (the frequency representation of % the window on a dB scale). subplot(2,1,2); magresp(g,'fir','dynrange',100); title('Magnitude response of itersine window.'); % -------- second part: True, short FIR window ------------------------- % If the length of the window is less than or equal to the number of % channels M, then the canonical dual and tight windows will have the % same support. This case is explicitly supported by gabdual % Set up a nice Kaiser-Bessel window. g=firkaiser(M,3.2,'energy'); % Compute the canonical dual window gd=gabdual(g,a,M); disp(''); disp('Reconstruction error canonical dual of Kaiser window, should be close to zero:'); gabdualnorm(g,gd,a,M) figure(2); % Plot the window in the time-domain. subplot(2,2,1); plot(fftshift(g)); title('Kaiser window.'); % Plot the magnitude response of the window (the frequency representation of % the window on a dB scale). subplot(2,2,2); magresp(g,'fir','dynrange',100); title('Magnitude response of Kaiser window.'); % Plot the window in the time-domain. subplot(2,2,3); plot(fftshift(gd)); title('Dual of Kaiser window.'); % Plot the magnitude response of the window (the frequency representation of % the window on a dB scale). subplot(2,2,4); magresp(gd,'fir','dynrange',100); title('Magnitude response of dual Kaiser window.'); % -------- Third part, cutting a LONG window -------------- % We can now work with any lattice constants and lower redundancies. a=12; M=18; % LLong plays the same role as in the first part. It must be a multiple of % both 'a' and M. LLong=M*a*16; % Construct an LONG Gaussian window with optimal time/frequency resolution. glong=pgauss(LLong,a*M/LLong); % Cut it to a FIR window, preserving the WPE symmetry. % The length must be a multiple of M. gfir=long2fir(glong,2*M,'wp'); % Extend the cutted window, and compute the dual window of this. gfirextend=fir2long(gfir,LLong); gd_long=gabdual(gfirextend,a,M); % Cut it, preserving the WPE symmetry gd_fir=long2fir(gd_long,6*M,'wp'); % Compute the reconstruction error disp(''); disp('Reconstruction error using cutted dual window.'); recerr = gabdualnorm(gfir,gd_fir,a,M,LLong) disp(''); disp('or expressed in dB:'); 10*log10(recerr) figure(3); % Plot the window in the time-domain. subplot(2,2,1); plot(fftshift(gfir)); title('Gaussian FIR window.'); % Plot the magnitude response of the window (the frequency representation of % the window on a dB scale). subplot(2,2,2); magresp(gfir,'fir','dynrange',100); title('Magnitude response of FIR Gaussian.') % Plot the window in the time-domain. subplot(2,2,3); plot(fftshift(gd_fir)); title('Dual of Gaussian FIR window.'); % Plot the magnitude response of the window (the frequency representation of % the window on a dB scale). subplot(2,2,4); magresp(gd_fir,'fir','dynrange',100); title('Magnitude response.'); % ----- Fourth part, cutting a tight LONG window -------------- % We reuse all the parameters of the previous demo. % Get a tight window. gt_long = gabtight(a,M,LLong); % Cut it gt_fir = long2fir(gt_long,6*M); % Compute the reconstruction error disp(''); disp('Reconstruction error using cutted tight window.'); recerr = gabdualnorm(gt_fir,gt_fir,a,M,LLong) disp(''); disp('or expressed in dB:'); 10*log10(recerr) figure(4); % Plot the window in the time-domain. subplot(2,1,1); plot(fftshift(gt_fir)); title('Almost tight FIR window.'); % Plot the magnitude response of the window (the frequency representation of % the window on a dB scale). subplot(2,1,2); magresp(gt_fir,'fir','dynrange',100); title('Magnitude response.'); ltfat/inst/demos/demo_framemul.m0000664000175000017500000001030212612404256016640 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_framemul %@verbatim %DEMO_FRAMEMUL Time-frequency localization by a Gabor multiplier % % This script creates several different time-frequency symbols % and demonstrate their effect on a random, real input signal. % % Figure 1: Cut a circle in the TF-plane % % This figure shows the symbol (top plot, only the positive frequencies are displayed), % the input random signal (bottom) and the output signal (middle). % % Figure 2: Keep low frequencies (low-pass) % % This figure shows the symbol (top plot, only the positive frequencies are displayed), % the input random signal (bottom) and the output signal (middle). % % Figure 3: Keep middle frequencies (band-pass) % % This figure shows the symbol (top plot, only the positive frequencies are displayed), % the input random signal (bottom) and the output signal (middle). % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_framemul.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('Type "help demo_framemul" to see a description of how this demo works.'); % Setup some suitable parameters for the Gabor system L=480; a=20; M=24; b=L/M; N=L/a; % Plotting initializations t_axis = (0:(M-1))*a; f_max = floor(N/2)-1; f_range = 1:(f_max+1); f_axis = f_range*b; xlabel_angle = 7; ylabel_angle = -11; % Create a tight window, so it can be used for both analysis and % synthesis. % Frames framework equivalent g=gabtight(a,M,L); F = frametight(frame('dgt','gauss',a,M)); % Create the random signal. f=randn(L,1); % ------- sharp cutoff operator --------- % This cuts out a circle in the TF-plane. symbol1=zeros(M,N); for m=0:M-1 for n=0:N-1 if (m-M/2)^2+(n-N/2)^2 <(M/4)^2 symbol1(m+1,n+1)=1; end; end; end; % The symbol as defined by the above loops is centered such % that it keeps the high frequencys. To obtain the low ones, we % move the symbol along the first dimension: symbol1=fftshift(symbol1,1); % Do the actual filtering % Frames framework equivalent to ff1=gabmul(f,symbol1,g,a); ff1 = framemul(f,F,F,framenative2coef(F,symbol1)); % plotting figure(1); subplot(3,1,1); mesh(t_axis,f_axis,symbol1(f_range,:)); if isoctave xlabel('Time'); ylabel('Frequency'); else xlabel('Time','rotation',xlabel_angle); ylabel('Frequency','rotation',ylabel_angle); end; subplot(3,1,2); plot(real(ff1)); subplot(3,1,3); plot(f); % ---- Tensor product symbol, keep low frequencies. t1=pgauss(M); t2=pgauss(N); symbol2=fftshift(t1*t2',2); % Do the actual filtering % Frames framework equivalent to ff2=gabmul(f,symbol2,g,a); ff2 = framemul(f,F,F,framenative2coef(F,symbol2)); figure(2); subplot(3,1,1); mesh(t_axis,f_axis,symbol2(f_range,:)); if isoctave xlabel('Time'); ylabel('Frequency'); else xlabel('Time','rotation',xlabel_angle); ylabel('Frequency','rotation',ylabel_angle); end; subplot(3,1,2); plot(real(ff2)); subplot(3,1,3); plot(f); % ----- Tensor product symbol, keeps middle frequencies. t1=circshift(pgauss(M,.5),round(M/4))+circshift(pgauss(M,.5),round(3*M/4)); t2=pgauss(N); symbol3=fftshift(t1*t2',2); % Do the actual filtering % Frames framework equivalent to ff3=gabmul(f,symbol3,g,a); ff3 = framemul(f,F,F,framenative2coef(F,symbol3)); figure(3); subplot(3,1,1); mesh(t_axis,f_axis,symbol3(f_range,:)); if isoctave xlabel('Time'); ylabel('Frequency'); else xlabel('Time','rotation',xlabel_angle); ylabel('Frequency','rotation',ylabel_angle); end; subplot(3,1,2); plot(real(ff3)); subplot(3,1,3); plot(f); ltfat/inst/demos/demo_pbspline.m0000664000175000017500000000744112612404256016656 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_pbspline %@verbatim %DEMO_PBSPLINE How to use PBSPLINE % % This script illustrates various properties of the % PBSPLINE function. % % Figure 1: Three first splines % % This figure shows the three first splines (order 0,1 and 2) % and their dual windows. % % Note that they are calculated for an even number of the parameter a, % meaning that they are not exactly splines, but a slightly smoother % construction, that still form a partition of unity. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_pbspline.html} %@seealso{pbspline, middlepad} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('Type "help demo_pbspline" to see a description of how this demo works.'); % Setup parameters and length of signal. % Note that it must hold that L=M*b=N*a for some integers % b and N, and that a <= M L=72; % Length of signal. a=6; % Time shift. M=9; % Number of modulations. % Calculate the frequency shift. b=L/M; % The following call creates a B-spline of order 2. % The translates of a multiple of 'a' of this function % creates a partition of unity. % 'ntaps' contains the number of non-zero elements of g [g,ntaps]=pbspline(L,2,a); disp(''); disp('Length of the generated window:'); ntaps % This DFT of g is real and whole point even disp(''); disp('Norm of imaginary part. Should be close to zero.'); norm(imag(dft(g))) disp(''); disp('Window is whole point even. Should be 1.'); isevenfunction(g) % We can cut g to length ntap without loosing any information: % Cut g gcut=middlepad(g,ntaps); disp(''); disp('Length of g after cutting.'); length(gcut) % extend gcut again gextend=middlepad(gcut,L); % gextend is identical to g disp(''); disp('difference between original g, and gextend.'); disp('Should be close to zero.'); norm(g-gextend) % Plot the three first splines and their canonical dual windows: % Calculate the splines. g1=pbspline(L,0,a); g2=pbspline(L,1,a); g3=pbspline(L,2,a); % Calculate their dual windows. g1d=gabdual(g1,a,M); g2d=gabdual(g2,a,M); g3d=gabdual(g3,a,M); % Standard note on plotting: % % - All windows have real DFTs, but Matlab does not % always recoqnize this, so we have to filter away % the small imaginary part by calling REAL(...) % % - The windows are all centered around zero, but this % is not visually pleasing, so the window must be % shifted to the middle by an FFTSHIFT % figure(1); xplot=(0:L-1).'; subplot(3,2,1); plot(xplot,fftshift(g1),... xplot,circshift(fftshift(g1),a),... xplot,circshift(fftshift(g1),-a)); title('Zero order spline.'); subplot(3,2,2); plot(xplot,fftshift(g1d)); title('Dual window.'); subplot(3,2,3); plot(xplot,fftshift(g2),... xplot,circshift(fftshift(g2),a),... xplot,circshift(fftshift(g2),-a)); title('First order spline.'); subplot(3,2,4); plot(xplot,fftshift(g2d)); title('Dual window.'); subplot(3,2,5); plot(xplot,fftshift(g3),... xplot,circshift(fftshift(g3),a),... xplot,circshift(fftshift(g3),-a)); title('Second order spline.'); subplot(3,2,6); plot(xplot,fftshift(g3d)); title('Dual window.'); ltfat/inst/demos/demo_audiodenoise.m0000664000175000017500000000521612612404256017510 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_audiodenoise %@verbatim %DEMO_AUDIODENOISE Audio denoising using thresholding % % This demos shows how to do audio denoising using thresholding % of WMDCT transform. % % The signal is transformed using an orthonormal WMDCT transform % followed by a thresholding. Then the signal is reconstructed % and compared with the original. % % Figure 1: Denoising % % The figure shows the original signal, the noisy signal and denoised % signals using hard and soft threshholding applied to the WMDCT of the % noise signal. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_audiodenoise.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Load audio signal % Use the 'glockenspiel' signal. sig=gspi; SigLength = 2^16; sig = sig(1:SigLength); % Initializations NbFreqBands = 1024; sigma = 0.5; Relative_Threshold = 0.1; tau = Relative_Threshold*sigma; % Generate window gamma = wilorth(NbFreqBands,SigLength); % add noise to the signal sigma = sigma * std(sig); nsig = sig + sigma * randn(size(sig)); % Compute wmdct coefficients c = wmdct(nsig,gamma,NbFreqBands); % Hard Thresholding chard=thresh(c,tau); % Reconstruct hrec = real(iwmdct(chard,gamma)); % Soft thresholding csoft=thresh(c,tau,'soft'); % Reconstruct srec = real(iwmdct(csoft,gamma)); % Plot figure(1); subplot(4,1,1); plot(sig); legend('Original'); subplot(4,1,2); plot(nsig); legend('Noisy'); subplot(4,1,3); plot(hrec); legend('Hard threshold'); subplot(4,1,4); plot(srec); legend('Soft threshold'); % Results InputSNR = 20 *log10(std(sig)/std(nsig-sig)); OutputSNR_h = 20 *log10(std(sig)/std(hrec-sig)); OutputSNR_s = 20 *log10(std(sig)/std(srec-sig)); fprintf(' RESULTS:\n'); fprintf(' Input SNR: %f dB.\n',InputSNR); fprintf(' Output SNR (hard): %f dB.\n',OutputSNR_h); fprintf(' Output SNR (soft): %f dB.\n',OutputSNR_s); fprintf(' Signals are stored in variables sig, nsig, hrec, srec\n'); ltfat/inst/demos/Contents.m0000664000175000017500000000630612612404256015632 0ustar susnaksusnak% LTFAT - Demos % % Peter L. Soendergaard, 2007 - 2015. % % This page documents the demos. % % Basic demos % DEMO_DGT - DGT and comparison to SGRAM % DEMO_GABFIR - FIR windows in Gabor systems. % DEMO_WAVELETS - Wavelet representations using FWT and WFBT. % % Compression % DEMO_IMAGECOMPRESSION - Image compression using DWILT and FWT % DEMO_AUDIOCOMPRESSION - Audio compression using a WMDCT. % % Denoising % DEMO_AUDIODENOISE - Audio denoising using a WMDCT. % % Applications % DEMO_OFDM - Simple OFDM demo. % DEMO_AUDIOSHRINK - Lasso shrinkage of audio signal. % DEMO_GABMULAPPR - Approx. of time-varying system. % DEMO_BPFRAMEMUL - A Gabor multiplier as a time-varying bandpass filter. % DEMO_FRSYNABS - Synthetic spectrogram iterative reconstruction. % DEMO_FILTERBANKSYNCHROSQUEEZE - Reconstruction from synchrosqueezed representation. % % Aspects of particular functions % DEMO_NSDGT - Non-stationary Gabor systems % DEMO_PGAUSS - How to use PGAUSS. % DEMO_PBSPLINE - How to use PBSPLINE. % DEMO_GABMIXDUAL - How to use GABMIXDUAL. % DEMO_FRAMEMUL - Time-frequency localization by Gabor multiplier. % DEMO_PHASEPLOT - Phaseplots. % DEMO_PHASERET - Spectrogram phase retrieval and phase difference % DEMO_NEXTFASTFFT - Next fast FFT size. % DEMO_FILTERBANKS - Non-stationary Gabor systems defined in frequency domain % % Auditory scales and filters % DEMO_AUDSCALES - Different auditory scales. % DEMO_AUDITORYFILTERBANK - Erb-spaced auditory filter bank. % DEMO_WFBT - Auditory filter banks created using WFBT. % % Block-processing demos % DEMO_BLOCKPROC_BASICLOOP - Simple audio playback loop. % DEMO_BLOCKPROC_PARAMEQUALIZER - Parametric equalizer. % DEMO_BLOCKPROC_DENOISING - Variable noise-reduction. % DEMO_BLOCKPROC_SLIDINGSGRAM - Sliding spectrogram plot. % DEMO_BLOCKPROC_SLIDINGCQT - Sliding CQT plot. % DEMO_BLOCKPROC_SLIDINGERBLETS - Sliding Erblets plot. % DEMO_BLOCKPROC_DGTEQUALIZER - Variable Gabor Multiplier as equalizer. % DEMO_BLOCKPROC_EFFECTS - Real-time vocoder effects. % % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % Url: http://ltfat.github.io/doc/demos/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/demos/demo_phaseret.m0000664000175000017500000000433512612404256016654 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_phaseret %@verbatim %DEMO_PHASERET Phase retrieval and phase difference % % This demo demonstrates iterative reconstruction of a spectrogram and % the phase difference. % % Figure 1: Original spectrogram % % This figure shows the target spectrogram of an excerpt of the gspi % signal % % Figure 2: Phase difference % % This figure shows a difference between the original phase and the % reconstructed using 100 iterations of a Fast Griffin-Lim algorithm. % Note: The figure in the LTFAT 2.0 paper differs slightly because it % is genarated using 1000 iterations. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_phaseret.html} %@seealso{frsynabs, plotframe} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Here the number of iterations is set to 100 to speedup the execution maxit = 100; [f,fs]=gspi; f=f(10001:100000); g='gauss'; a=100; M=1000; F = frame('dgtreal',g,a,M); c = frana(F,f); % Spectrogram values s=abs(c).^2; % Original phase theta=angle(c); % Do the reconstruction using the magnitude only r = frsynabs(F,sqrt(s),'fgriflim','maxit',maxit); % Re-analyse using the original frame c_r = frana(F,r); % Obtain phase of the re-analysis s_r = abs(c_r).^2; theta_r=angle(c_r); d1=abs(theta-theta_r); d2=2*pi-d1; anglediff=min(d1,d2); % Plot the original spectrogram figure(1); plotframe(F,c,fs,'dynrange',50); % Plot the phase difference figure(2); anglediff(abs(c)<10^(-50/20)) = 0; plotframe(F,anglediff,fs,'lin'); ltfat/inst/demos/demo_audioshrink.m0000664000175000017500000000650212612404256017357 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_audioshrink %@verbatim %DEMO_AUDIOSHRINK Decomposition into tonal and transient parts % % This demos shows how to do audio coding and "tonal + transient" % decomposition using group lasso shrinkage of two WMDCT transforms % with different time-frequency resolutions. % % The signal is transformed using two orthonormal WMDCT bases. % Then group lasso shrinkage is applied to the two transforms % in order to: % % select fixed frequency lines of large WMDCT coefficients on the % wide window WMDCT transform % % select fixed time lines of large WMDCT coefficients on the % narrow window WMDCT transform % % The corresponding approximated signals are computed with the % corresponding inverse, IWMDCT. % % Figure 1: Plots and time-frequency images % % The upper plots in the figure show the tonal parts of the signal, the % lower plots show the transients. The TF-plots on the left are the % corresponding wmdct coefficients found by appropriate group lasso % shrinkage % % Corresponding reconstructed tonal and transient sounds may be % listened from arrays rec1 and rec2 (sampling rate: 44.1 kHz) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_audioshrink.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Load audio signal and add noise % ------------------------------- % Use the 'glockenspiel' signal. sig=gspi; fs=44100; % Shorten signal siglen = 2^16; sig = sig(1:siglen); % Add Gaussian white noise nsig = sig + 0.01*randn(size(sig)); % Tonal layer % ----------- % Create a WMDCT basis with 256 channels F1=frametight(frame('wmdct','gauss',256)); % Group lasso and invert c1 = franagrouplasso(F1,nsig,0.8,'soft','freq'); rec1 = frsyn(F1,c1); % Transient layer % --------------- % Create a WMDCT basis with 32 channels F2=frametight(frame('wmdct','gauss',32)); c2 = franagrouplasso(F2,nsig,0.5,'soft','time'); rec2 = frsyn(F2,c2); % Plots % ----- % Dynamic range for plotting dr=50; xplot=(0:siglen-1)/fs; figure(1); subplot(2,2,1); plot(xplot,rec1); xlabel('Time (s)'); axis tight; subplot(2,2,2); plotframe(F1,c1,fs,dr); subplot(2,2,3); plot(xplot,rec2); xlabel('Time (s)'); axis tight; subplot(2,2,4); plotframe(F2,c2,fs,dr); % Count the number of non-zero coefficients N1=sum(abs(c1)>0); N2=sum(abs(c2)>0); p1 = 100*N1/siglen; p2 = 100*N2/siglen; p=p1+p2; fprintf('Percentage of retained coefficients: %f + %f = %f\n',p1,p2,p); disp('To play the original, type "soundsc(sig,fs)"'); disp('To play the tonal part, type "soundsc(rec1,fs)"'); disp('To play the transient part, type "soundsc(rec2,fs)"'); ltfat/inst/demos/demo_imagecompression.m0000664000175000017500000000565412612404256020412 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_imagecompression %@verbatim %DEMO_IMAGECOMPRESSION Image compression using N-term approximation % % This demo shows how to perform a simple imagecompression using either % a Wilson basis or a Wavelet. The compression step is done by % retaining only 5% of the coefficients. % % Figure 1: Wilson and WMDCT basis % % This right figure shows the image compressed using a DWILT basis with % 8 channels. This corresponds quite closely to JPEG compression, % except that the borders between neigbouring blocs are smoother, % since the DWILT uses a windowing function. % % The left figure shows the same, now % using a MDCT basis. The MDCT produces more visible artifacts, as the % slowest changing frequency in each block has a half-wave % modulation. This is visible on otherwise smooth backgrounds. % % Figure 2: Wavelet % % The Wavelet used is the DB6 with J=5 levels. On the right figure % the standard layout has been used, on the left the tensor layout % was used. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_imagecompression.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %% Parameters for the problem formulation % Use the cameraman image f=cameraman; % Ratio to keep r=0.05; %% Parameters for the Wilson systems % Analysis window ga='itersine'; % synthesis window gs='itersine'; % No. of channels M=8; %% Parameters for the Wavelet system % Analysis filters wa='db6'; % Synthesis filters ws='db6'; % No. of levels J=5; %% Compute the Wilson figures figure(1); subplot(1,2,1); c_dwilt =dwilt2(f,ga,M); cc_dwilt=largestr(c_dwilt,r); r_dwilt =idwilt2(cc_dwilt,gs); imagesc(r_dwilt); colormap(gray), axis('image'); subplot(1,2,2); c_wmdct =wmdct2(f,ga,M); cc_wmdct=largestr(c_wmdct,r); r_wmdct =iwmdct2(cc_wmdct,gs); imagesc(r_wmdct); colormap(gray), axis('image'); %% Compute the Wavelet figures figure(2); subplot(1,2,1); c_fwt =fwt2(f,wa,J); [cc_fwt,n]=largestr(c_fwt,r); r_fwt =ifwt2(cc_fwt,ws,J); imagesc(r_fwt); colormap(gray), axis('image'); subplot(1,2,2); c_fwt =fwt2(f,wa,J,'tensor'); cc_fwt=largestr(c_fwt,r); r_fwt =ifwt2(cc_fwt,ws,J,'tensor'); imagesc(r_fwt); colormap(gray), axis('image'); ltfat/inst/demos/demo_phaseplot.m0000664000175000017500000001040212612404256017030 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_phaseplot %@verbatim %DEMO_PHASEPLOT Give demos of nice phaseplots % % This script creates a synthetic signal and then uses PHASEPLOT on it, % using several of the possible options. % % For real-life signal only small parts should be analyzed. In the chosen % demo the fundamental frequency of the speaker can be nicely seen. % % Figure 1: Synthetic signal % % Compare this to the pictures in reference 2 and 3. In % the first two figures a synthetic signal is analyzed. It consists of a % sinusoid, a small Delta peak, a periodic triangular function and a % Gaussian. In the time-invariant version in the first part the periodicity % of the sinusoid can be nicely seen also in the phase coefficients. Also % the points of discontinuities can be seen as asymptotic lines approached % by parabolic shapes. In the third part both properties, periodicity and % discontinuities can be nicely seen. A comparison to the spectogram shows % that the rectangular part in the middle of the signal can be seen by the % phase plot, but not by the spectogram. % % In the frequency-invariant version, the fundamental frequency of the % sinusoid can still be guessed as the position of an horizontal % asymptotic line. % % Figure 2: Synthetic signal, thresholded. % % This figure shows the same as Figure 1, except that values with low % magnitude has been removed. % % Figure 3: Speech signal. % % The figure shows a part of the 'linus' signal. The fundamental % frequency of the speaker can be nicely seen. % % References: % R. Carmona, W. Hwang, and B. Torresani. Multiridge detection and % time-frequency reconstruction. IEEE Trans. Signal Process., 47:480-492, % 1999. % % R. Carmona, W. Hwang, and B. Torresani. Practical Time-Frequency % Analysis: continuous wavelet and Gabor transforms, with an % implementation in S, volume 9 of Wavelet Analysis and its Applications. % Academic Press, San Diego, 1998. % % A. Grossmann, M. Holschneider, R. Kronland-Martinet, and J. Morlet. % Detection of abrupt changes in sound signals with the help of wavelet % transforms. Inverse Problem, pages 281-306, 1987. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_phaseplot.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('Type "help demo_phaseplot" to see a description of how this demo works.'); tt=0:98; f1=sin(2*pi*tt/33); % sinusoid f2=zeros(1,100); f2(50)=1; % delta-like f3=fftshift(firwin('tria',32)).'; f4 = fftshift(pgauss(100)).'; f4 = f4/max(f4); sig = 0.9*[f1 0 f2 f3 -f3 f3 f4 0 0 0 0]; figure(1); sgram(sig,'lin','nf'); figure(2); subplot(3,1,1); plot(sig); title('Synthetic signal'); subplot(3,1,2); phaseplot(sig,'freqinv'); title('Phaseplot of synthetic signal - frequency-invariant phase'); subplot(3,1,3); phaseplot(sig,'timeinv') title('Phaseplot of synthetic signal - time-invariant phase'); figure(3); subplot(3,1,1); plot(sig); title('Synthetic signal'); subplot(3,1,2); phaseplot(sig,'freqinv','thr',0.001) title('Phaseplot of synthetic signal - thresholded version, freq. inv. phase'); subplot(3,1,3); phaseplot(sig,'thr',0.001) title('Phaseplot of synthetic signal - thresholded version, time inv. phase'); figure(4); f=linus; f = f(4500:8000); subplot(3,1,1); plot(f); axis tight; title('Speech signal: linus'); subplot(3,1,2); phaseplot(f) title('Phaseplot of linus'); subplot(3,1,3); phaseplot(f,'thr',.001) title('Phaseplot of linus - thresholded version'); ltfat/inst/demos/demo_nextfastfft.m0000664000175000017500000000441012612404256017367 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_nextfastfft %@verbatim %DEMO_NEXTFASTFFT Next fast FFT number % % This demo shows the behaviour of the NEXTFASTFFT function. % % Figure 1: Benchmark of the FFT routine % % The figure shows the sizes returned by the NEXTFASTFFT function % compared to using nextpow2. As can be seen, the NEXTFASTFFT % approach gives FFT sizes that are much closer to the input size. % % Figure 2: Efficiency of the table % % The figure show the highest output/input ratio for varying input % sizes. As can be seen, the efficiency is better for larger input % values, where the output size is at most a few percent larger than % the input size. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_nextfastfft.html} %@seealso{nextfastfft} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Range to use for testing. % It is important for this script that % range_max = 2^nextpow2(range_max) = nextfastfft(range_max), so it must % be a power of 2. range_min=100; range_max=1024; r=range_min:range_max; % r2 contains the next higher sizes using nextpow2 r2=2.^nextpow2(r); % r3 contains the next higher sizes using nextfastfft r3=nextfastfft(r); figure(1); plot(r,r,r,r2,r,r3); xlabel('Input size.'); ylabel('FFT size.'); legend('Same size','nextpow2','nextfastfft','Location','SouthEast'); %% Efficiency analysis of the table [dummy,table]=nextfastfft(1); eff=table(2:end)./(table(1:end-1)+1); figure(2); semilogx(table(2:end),eff); xlabel('Input size.'); ylabel('Output/input ratio.'); mean(eff) ltfat/inst/demos/demo_gabmulappr.m0000664000175000017500000001026112612404256017166 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_gabmulappr %@verbatim %DEMO_GABMULAPPR Approximate a slowly time variant system by a Gabor multiplier % % This script construct a slowly time variant system and performs the % best approximation by a Gabor multiplier with specified parameters % (a and L see below). Then it shows the action of the slowly time % variant system (A) as well as of the best approximation of (A) by a % Gabor multiplier (B) on a sinusoids and an exponential sweep. % % Figure 1: Spectrogram of signals % % The figure shows the spectogram of the output of the two systems applied on a % sinusoid (left) and an exponential sweep. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_gabmulappr.html} %@seealso{gabmulappr} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter Balazs. % based on demo_gabmulappr.m disp('Type "help demo_gabmulappr" to see a description of how this demo works.'); % Setup parameters for the Gabor system and length of the signal L=576; % Length of the signal a=32; % Time shift M=72; % Number of modulations fs=44100; % assumed sampling rate SNRtv=63; % signal to noise ratio of change rate of time-variant system % construction of slowly time variant system % take an initial vector and multiply by random vector close to one A = []; c1=(1:L/2); c2=(L/2:-1:1); c=[c1 c2].^(-1); % weight of decay x^(-1) A(1,:)=(rand(1,L)-0.5).*c; % convolution kernel Nlvl = exp(-SNRtv/10); Slvl = 1-Nlvl; for ii=2:L; A(ii,:)=(Slvl*circshift(A(ii-1,:),[0 1]))+(Nlvl*(rand(1,L)-0.5)); end; A = A/norm(A)*0.99; % normalize matrix % perform best approximation by gabor multiplier sym=gabmulappr(A,a,M); % creation of 3 different input signals (sinusoids) x=2*pi*(0:L-1)/L.'; f1 = 1000; % frequency in Hz s1=0.99*sin((fs/f1).*x); % Ramp the signal to avoid distortions at the end, ramp are 5% of total % length of the signal. s1=rampsignal(s1,round(L*.05)); L1=ceil(L*0.9); e1=0.99*expchirp(L1,500,fs/2*0.9,'fs',fs); % Ramp signal as before. e1=rampsignal(e1,round(L1*.05)); e1=[e1;zeros(L-L1,1)]; % application of the slowly time variant system As1=A*s1'; Ae1=A*e1; % application of the Gabor multiplier F = frametight(frame('dgt','gauss',a,M)); Gs1=framemul(s1(:),F,F,framenative2coef(F,sym)); Ge1=framemul(e1(:),F,F,framenative2coef(F,sym)); % Plotting the results %% ------------- figure 1 ------------------------------------------ clim=[-40,13]; figure(1); subplot(2,2,1); sgram(real(As1),'tfr',10,'clim',clim,'nocolorbar'); title (sprintf('Spectogram of output signal: \n Time-variant system applied on sinusoid'),'Fontsize',14); set(get(gca,'XLabel'),'Fontsize',14); set(get(gca,'YLabel'),'Fontsize',14); subplot(2,2,2); sgram(real(Ae1),'tfr',10,'clim',clim,'nocolorbar'); title (sprintf('Spectogram of output signal: \n Time-variant system applied on exponential sweep'),'Fontsize',14); set(get(gca,'XLabel'),'Fontsize',14); set(get(gca,'YLabel'),'Fontsize',14); subplot(2,2,3); sgram(real(Gs1),'tfr',10,'clim',clim,'nocolorbar'); title (sprintf('Spectogram of output signal: \n Best approximation by Gabor multipliers applied on sinusoid'),'Fontsize',14); set(get(gca,'XLabel'),'Fontsize',14); set(get(gca,'YLabel'),'Fontsize',14); subplot(2,2,4); sgram(real(Ge1),'tfr',10,'clim',clim,'nocolorbar'); title (sprintf('Spectogram of output signal: \n Best approximation by Gabor multipliers applied on exponential sweep'),'Fontsize',14); set(get(gca,'XLabel'),'Fontsize',14); set(get(gca,'YLabel'),'Fontsize',14); ltfat/inst/demos/demo_blockproc_slidingsgram.m0000664000175000017500000000467312612404256021567 0ustar susnaksusnakfunction demo_blockproc_slidingsgram(source,varargin) %-*- texinfo -*- %@deftypefn {Function} demo_blockproc_slidingsgram %@verbatim %DEMO_BLOCKPROC_SLIDINGSGRAM Basic real-time rolling spectrogram visualization % Usage: demo_blockproc_slidingsgram('gspi.wav') % % For additional help call DEMO_BLOCKPROC_SLIDINGSGRAM without arguments. % % This demo shows a simple rolling spectrogram of whatever is specified in % source. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_blockproc_slidingsgram.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if demo_blockproc_header(mfilename,nargin) return; end % Basic Control pannel (Java object) p = blockpanel({ {'GdB','Gain',-20,20,0,21},... }); % Basic sepctrogram figure (Java object) fobj = blockfigure(); % Setup blockstream try fs=block(source,varargin{:},'loadind',p); catch % Close the windows if initialization fails blockdone(p,fobj); err = lasterror; error(err.message); end % 30 ms bufLen = floor(30e-3*fs); % Using dgtreal with 20ms hann window, hop factor 80, 1000 channels. % Redundancy factor 12.5 winLenms = 40; a = 100; M = 3000; F = frame('dgtreal',{'hann',floor(fs*winLenms/1e3)},a,M); F = blockframeaccel(F, bufLen,'segola'); flag = 1; %Loop until end of the stream (flag) and until panel is opened while flag && p.flag % Obtain the global gain value gain = blockpanelget(p,'GdB'); gain = 10^(gain/20); % Read the next block of samples [f,flag] = blockread(bufLen); f=f*gain; % Do analysis using the specified frame. c = blockana(F, f); % Draw the first channel coefficients blockplot(fobj,F,c(:,1)); % Enqueue to play blockplay(f); end blockdone(p,fobj); ltfat/inst/demos/demo_ofdm.m0000664000175000017500000001141112612404256015757 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_ofdm %@verbatim %DEMO_OFDM Demo of Gabor systems used for OFDM % % This demo shows how to use a Gabor Riesz basis for OFDM. % % We want to transmit a signal consisting of 0's and 1's through a % noisy communication channel. This is accomplished in the following % steps in the demo: % % 1) Convert this digital signal into complex valued coefficients by % QAM modulation. % % 2) Construct the signal to be transmitted by an inverse Gabor % transform of the complex coefficients % % 3) "Transmit" the signal by applying a spreading operator to the % signal and adding white noise % % 4) Convert the received signal into noisy coefficients by a Gabor % transform % % 5) Convert the noisy coefficients into bits by inverse QAM. % % Some simplifications used to make this demo simple: % % We assume that the whole spectrum is available for transmission. % % The window and its dual have full length support. This is not % practical, because all data would have to be processed at once. % Instead, an FIR should be used, with both the window and its dual % having a short length. % % The window is periodic. The data at the very end interferes with % the data at the very beginning. A simple way to solve this is to % transmit zeros at the beginning and at the end, to flush the system % properly. % % Figure 1: Received coefficients. % % This figure shows the distribution in the complex plane of the % received coefficients. If the channel was perfect, all the points % should appear at the complex roots of unity (1,i,-1 and -i). This % demo is random, so everytime it is run it produces a new plot, and % the error rate may vary. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_ofdm.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . disp('Type "help demo_ofdm" to see a description of how this demo works.'); %% ----------- setup of signal and transmission system -------------------- % Number of channels to use M=20; % Time-distance between succesive transmission. This must be % larger than M, otherwise the symbols will interfere. a=24; % Number of bits to transmit, must be divisable by 2*M nbits=16000; % Length (in samples) of transmitted signal. L=nbits/(2*M)*a; % We choose an orthonormal window. g=gabtight(a,M,L); %% ----------- Setup of communication channel --------------------------- % Larger means more random howrandom=.3; % Rate of decay away from (1,1). Larger means smaller spread (faster decay). spreaddecay=1.2; % Noiselevel for the channel. noiselevel=0.05; % Define the symbol of the spreading operator symbol=sparse(L,L); for ii=1:3 for jj=1:3 symbol(ii,jj)=(1-abs(randn(1)*howrandom))*exp(-(ii+jj-1)*spreaddecay); end; end; % Make the symbol conserve real signals. symbol=(symbol+involute(symbol))/2; % Make sure that energy is conserved symbol=symbol/sum(abs(symbol(:))); %% ------------ Convert input data into analog signal ------------------- % Create a random stream of bits. inputdata=round(rand(nbits,1)); % QAM modulate it transmitdata=qam4(inputdata); % Create the signal to be tranmitted f=idgt(reshape(transmitdata,M,[]),g,a); % --- transmission of signal - influence of the channel ---------- % Apply the underspread operator. f=spreadop(f,symbol); % add white noise. noise = ((randn(size(f))-.5)+i*(randn(size(f))-.5)); f=f+noise*noiselevel/norm(noise)*norm(f); % --- reconstruction of received signal ------------------------ % Obtain the noisy coefficients from the transmitted signal receivedcoefficients = dgt(f,g,a,M); % Convert the analog signal to the digital coefficients by inverse QAM receivedbits=iqam4(receivedcoefficients(:)); %% --- visualization and print output ------------------------- % Plot the coefficients in the complex plane. figure(1); plot(receivedcoefficients(:),'.'); axis([-1 1 -1 1]); % Test for errors. disp(' '); disp('Number of faulty bits:'); faulty=sum(abs(receivedbits-inputdata)) disp(' '); disp('Error rate:'); faulty/nbits ltfat/inst/demos/demo_blockproc_effects.m0000664000175000017500000002044112612404256020512 0ustar susnaksusnakfunction demo_blockproc_effects(source,varargin) %-*- texinfo -*- %@deftypefn {Function} demo_blockproc_effects %@verbatim %DEMO_BLOCKPROC_EFFECTS Various vocoder effects using DGT % Usage: demo_blockproc_effects('gspi.wav') % % For additional help call DEMO_BLOCKPROC_EFFECTS without arguments. % This demo works correctly only with the sampling rate equal to 44100 Hz. % % This script demonstrates several real-time vocoder effects. Namely: % % 1) Robotization effect: Achieved by doing DGT reconstruction using % absolute values of coefficients only. % % 2) Whisperization effect: Achieved by randomizing phase of DGT % coefficients. % % 3) Pitch shifting effect: Achieved by stretching/compressing % coefficients along frequency axis. % % 4) Audio morphing: Input is morphed with a background sound such % that the phase of DGT coefficients is substituted by phase % of DGT coefficients of the background signal. % File beat.wav (at 44,1kHz) (any sound will do) is expected to % be in the search path, oherwise the effect will be disabled. % % This demo was created for the Lange Nacht der Forschung 4.4.2014 event. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_blockproc_effects.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHORS: Zdenek Prusa, Nicki Holighaus if demo_blockproc_header(mfilename,nargin) return; end fobj = blockfigure(); % Common block setup bufLen = 1024; % Morphing params Fmorph = frametight(frame('dgtreal',{'hann',512},128,512,'timeinv')); Fmorph = blockframeaccel(Fmorph, bufLen,'segola'); haveWav = 0; try ff = 0.4*wavread('beat.wav'); %ff = 0.8*resample(ff,4,1); ffblocks = reshape(postpad(ff,ceil(numel(ff)/bufLen)*bufLen),bufLen,[]); cidx = 1; haveWav = 1; catch warning('beat.wav not found. morphing effect is disabled.'); end % Plain analysis params Fana = frame('dgtreal',{'hann',882},300,3000); Fana = blockframeaccel(Fana, bufLen,'segola'); % Robotization params Mrob = 2^12; Frob = frametight(frame('dgtreal',{'hann',Mrob},Mrob/8,Mrob,'timeinv')); Frob = blockframeaccel(Frob, bufLen,'segola'); % Whisperization params Mwhis = 512; Fwhis = frametight(frame('dgtreal',{'hann',512},128,Mwhis)); Fwhis = blockframeaccel(Fwhis, bufLen,'segola'); % Pitch shift % Window length in ms M = 1024; a = 512; [F] = frametight(frame('dgtreal',{'hann',1024},a,M,'timeinv')); Fa = blockframeaccel(F, bufLen,'segola'); Fs = Fa; Mhalf = floor(M/2) + 1; scale = (0:Mhalf-1)/Mhalf; scale = scale(:); shiftRange = 12; scaleTable = round(scale*2.^(-(1:shiftRange)/12)*Mhalf)+1; scaleTable2 = round(scale*2.^((1:shiftRange)/12)*Mhalf)+1; scaleTable2(scaleTable2>Mhalf) = Mhalf; phaseCorr = exp(abs(bsxfun(@minus,scaleTable,(1:size(scaleTable,1))'))./M*2*pi*1i*a); phaseCorr2 = exp(abs(bsxfun(@minus,scaleTable2,(1:size(scaleTable2,1))'))./M*2*pi*1i*a); fola = []; phasecorrVect = ones(Mhalf,1,'single'); if haveWav % Basic Control pannel (Java object) parg = { {'GdB','Gain',-20,20,0,21},... {'Eff','Effect',0,4,0,5},... {'Shi','Shift',-shiftRange,shiftRange,0,2*shiftRange+1} }; else parg = { {'GdB','Gain',-20,20,0,21},... {'Eff','Effect',0,3,0,4},... {'Shi','Shift',-shiftRange,shiftRange,0,2*shiftRange+1} }; end p = blockpanel(parg); % Setup blocktream try fs=block(source,varargin{:},'loadind',p,'L',bufLen); catch % Close the windows if initialization fails blockdone(p,fobj); err = lasterror; error(err.message); end if fs~=44100 error('%s: This demo only works with fs=44100 Hz.',upper(mfilename)); end p.setVisibleParam('Shi',0); oldEffect = 0; flag = 1; ffola = []; %Loop until end of the stream (flag) and until panel is opened while flag && p.flag gain = blockpanelget(p,'GdB'); gain = 10.^(gain/20); effect = blockpanelget(p,'Eff'); shift = fix(blockpanelget(p,'Shi')); effectChanged = 0; if oldEffect ~= effect effectChanged = 1; end oldEffect = effect; % Read block of data [f,flag] = blockread(); % Apply gain f=f*gain; if effect ==0 % Just plot spectrogram if effectChanged % Flush overlaps used in blockana and blocksyn p.setVisibleParam('Shi',0); % Now we can merrily continue end % Obtain DGT coefficients c = blockana(Fana, f); blockplot(fobj,Fana,c(:,1)); fhat = f; elseif effect == 1 % Robotization if effectChanged % Flush overlaps used in blockana and blocksyn p.setVisibleParam('Shi',0); % Now we can merrily continue end % Obtain DGT coefficients c = blockana(Frob, f); % Do the actual coefficient shift cc = Frob.coef2native(c,size(c)); if(strcmpi(source,'playrec')) % Hum removal (aka low-pass filter) cc(1:2,:,:) = 0; end c = Frob.native2coef(cc); c = abs(c); % Plot the transposed coefficients blockplot(fobj,Frob,c(:,1)); % Reconstruct from the modified coefficients fhat = blocksyn(Frob, c, size(f,1)); elseif effect == 2 % Whisperization if effectChanged p.setVisibleParam('Shi',0); % Now we can merrily continue end c = blockana(Fwhis, f); % Do the actual coefficient shift cc = Fwhis.coef2native(c,size(c)); if(strcmpi(source,'playrec')) % Hum removal (aka low-pass filter) cc(1:2,:,:) = 0; end c = Fwhis.native2coef(cc); c = abs(c).*exp(i*2*pi*randn(size(c))); % Plot the transposed coefficients blockplot(fobj,Fwhis,c(:,1)); % Reconstruct from the modified coefficients fhat = blocksyn(Fwhis, c, size(f,1)); elseif effect == 3 if effectChanged p.setVisibleParam('Shi',1); % Now we can merrily continue end % Obtain DGT coefficients c = blockana(Fa, f); % Do the actual coefficient shift cc = Fa.coef2native(c,size(c)); cTmp = zeros(size(cc),class(c)); if shift<0 slices = size(cc,2); for s = 1:slices phasecorrVect = phasecorrVect.*phaseCorr(:,-shift); cTmp(scaleTable(:,-shift),s,:) =... bsxfun(@times,cc(1:numel(scaleTable(:,-shift)),s,:),phasecorrVect); end elseif shift>0 slices = size(cc,2); for s = 1:slices phasecorrVect = phasecorrVect.*phaseCorr2(:,shift); cTmp(scaleTable2(:,shift),s,:) =... bsxfun(@times,cc(1:numel(scaleTable2(:,shift)),s,:),phasecorrVect); end %cc = [zeros(shift,size(cc,2),size(cc,3))]; else cTmp = cc; end c = Fa.native2coef(cTmp); % Reconstruct from the modified coefficients fhat = blocksyn(Fs, c, size(f,1)); [c2,fola] = blockana(Fa,fhat,fola); % Plot the transposed coefficients blockplot(fobj,Fa,c2(:,1)); elseif effect == 4 if effectChanged % Flush overlaps used in blockana and blocksyn p.setVisibleParam('Shi',0); % Now we can merrily continue end % Audio morphing effect [cff,ffola] = blockana(Fmorph, ffblocks(:,cidx), ffola); cidx = mod(cidx,size(ffblocks,2)) + 1; % Obtain DGT coefficients c = blockana(Fmorph, f); c = bsxfun(@times,abs(c),exp(1i*(angle(cff) ))); % Plot the transposed coefficients blockplot(fobj,Fmorph,c(:,1)); % Reconstruct from the modified coefficients fhat = blocksyn(Fmorph, c, size(f,1)); end % Enqueue to be played blockplay(fhat); blockwrite(fhat); end % Clear and close all blockdone(p,fobj); ltfat/inst/demos/demo_bpframemul.m0000664000175000017500000001455512612404256017200 0ustar susnaksusnakfunction demo_bpframemul %-*- texinfo -*- %@deftypefn {Function} demo_bpframemul %@verbatim %DEMO_BPFRAMEMUL Frame multiplier acting as a time-varying bandpass filter % % This demo demonstrates creation and effect of a Gabor multiplier. The % multiplier performs a time-varying bandpass filtering. The band-pass % filter with center frequency changing over time is explicitly created % but it is treated as a "black box" system. The symbol is identified by % "probing" the system with a white noise and dividing DGT of the output % by DGT of the input element-wise. The symbol is smoothed out by a 5x5 % median filter. % % Figure 1: The symbol of the multiplier. % % This figure shows a symbol used in the Gabor multiplier. % % Figure 2: Spectroram obtained by re-analysis of the test signal after applying the multiplier % % This figure shows a spectrogram of the test signal after applying % the estimated Gabor multiplier. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_bpframemul.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Sampling rate fs = 44100; % Input signal f = gspi; % Input length L = numel(gspi); % Initial center frequency of the band-pass filter fc = 5000; % Modulation parameter for the center frequency of the band-pass filter fvar = 4800; % Gabor system parameters win = {'tight','hann',882}; a = 200; M = 1000; % The bandpass filter chnges it's center frequency every 2*a samples Lch = ceil(L/(2*a)); L = Lch*2*a; % Center frequencies l = 0:Lch-1; l = l(:); fcm = fc+fvar*sin(2*pi*l/Lch*10); % Parameters of the bandpass filter G = 40; Q = 4; Ha = zeros(Lch,3); Hb = zeros(Lch,3); % Design a IIR peaking filters ... for l=1:Lch [Ha(l,:),Hb(l,:)]=parpeak(fcm(l),Q,G,fs); end % ...and make them band-pass filters. Ha = Ha/10^(G/20); % Create a white noise and divide it into input into blocks ff = randn(L,1); fblocks = reshape(ff,numel(ff)/Lch,Lch); % Do a blockwise filtering of the white noise y = blockfilter(fblocks,Ha,Hb); % Obtain DGT of the output ... cy = dgtreal(y(:),win,a,M); % And the input cx = dgtreal(fblocks(:),win,a,M); % Create a symbol by a plain division of DGT of the output and the input. % (This would be a deconvolution if Fourier multiplier was used) symbol = cy./cx; % Smooth out the extremes using a 2D 5x5 median filter symbol = cmedfilt2(symbol,[5,5]); % Plot the symbol figure(1); plotdgtreal(symbol,a,M,44100,'dynrange',50); % Apply the symbol to a test signal f = postpad(f,L); c = dgtreal(f,win,a,M); c = c.*symbol; fhat = idgtreal(c,win,a,M,L); % Plot spectrogram of the resulting signal figure(2); c = dgtreal(fhat,win,a,M); plotdgtreal(c,a,M,44100,'dynrange',50); % Filter the input signal by the time-varying band-pass filter directly y = blockfilter(reshape(f,numel(f)/Lch,Lch),Ha,Hb); % Export the signals (since we are in a function) assignin('base','forig', f(:)); assignin('base','fmul', fhat(:)); assignin('base','fdir', y(:)); disp('The original signal can be played by typing: sound(forig,44100);'); disp(['The signal obtained by a direct filtering cen be played by ',... '(this is what is approximated by the multiplier): sound(fdir,44100);']); disp(['The signal obtained by applying the Gabor multiplier: sound(fmul,44100);']); function y = blockfilter(fb,Ha,Hb) %BLOCKFILTER Block filtering y = zeros(size(fb)); Lch = size(fb,2); Z = zeros(2,1); for l=1:Lch [y(:,l),Z] = filter(Ha(l,:),Hb(l,:),fb(:,l),Z); end function fo = cmedfilt2(f,d) % CMEDFILT2 Complex 2D median filter if any(rem(d,2)~=1) error('%s: Median filer window should have odd dimensions.',... upper(mfilename)); end dims = size(f); if dims(1) < d(1) error('%s: Median filer height is bigger than the image height.',... upper(mfilename)); end if dims(2) < d(2) error('%s: Median filer width is bigger than the image width.',... upper(mfilename)); end fo = f; whalf = floor(d(2)/2); hhalf = floor(d(1)/2); % Safely inside of the image % The border values are taken from the input for ii=(1+hhalf):(dims(1)-hhalf) for jj=(1+whalf):(dims(2)-whalf) neigh = sort(reshape(f(ii-hhalf:ii+hhalf,jj-whalf:jj+whalf),[],1)); fo(ii,jj) = neigh(ceil(end/2)); end end % Top rows for ii=1:hhalf for jj=(1+whalf):(dims(2)-whalf) neigh = sort(reshape(f(1:ii+hhalf,jj-whalf:jj+whalf),[],1)); fo(ii,jj) = neigh(ceil(end/2)); end end % Top bottom rows for ii=1:hhalf for jj=(1+whalf):(dims(2)-whalf) neigh = sort(reshape(f(end+1-(ii+hhalf):end,jj-whalf:jj+whalf),[],1)); fo(end+1-ii,jj) = neigh(ceil(end/2)); end end % The leftmost and rightmost collumns are not processed... function [Ha,Hb]=parpeak(fc,Q,G,Fs) % PARLSF Parametric Peaking filter % Input parameters: % fm : Cut-off frequency % Q : Filter quality. Q=fc/B, where B is filter bandwidth. % G : Gain in dB % Fs : Sampling frequency % Output parameters: % Ha : Transfer function numerator coefficients. % Hb : Transfer function denominator coefficients. % % For details see Table 5.3 in the Zolzer: Digital Audio Signal % Processing, 2nd Edition, ISBN: 978-0-470-99785-7 Ha = zeros(3,1); Hb = zeros(3,1); %b0 Hb(1) = 1; Ha(1) = 1; K = tan(pi*fc/Fs); if G>0 V0=10^(G/20); den = 1 + K/Q + K*K; % a0 Ha(1) = (1+V0*K/Q+K*K)/den; % a1 Ha(2) = 2*(K*K-1)/den; % a2 Ha(3) = (1-V0*K/Q+K*K)/den; % b1 Hb(2) = 2*(K*K-1)/den; % b2 Hb(3) = (1-K/Q+K*K)/den; elseif G<0 V0=10^(-G/20); den = 1 + V0*K/Q + K*K; % a0 Ha(1) = (1+K/Q+K*K)/den; % a1 Ha(2) = 2*(K*K-1)/den; % a2 Ha(3) = (1-K/Q+K*K)/den; % b1 Hb(2) = 2*(K*K-1)/den; % b2 Hb(3) = (1-V0*K/Q+K*K)/den; end ltfat/inst/demos/demo_auditoryfilterbank.m0000664000175000017500000000725112612404256020743 0ustar susnaksusnak%-*- texinfo -*- %@deftypefn {Function} demo_auditoryfilterbank %@verbatim %DEMO_AUDITORYFILTERBANK Construct an auditory filterbank % % In this file we construct a uniform filterbank using a the impulse % response of a 4th order gammatone for each channel. The center frequencies % are equidistantly spaced on an ERB-scale, and the width of the filter are % choosen to match the auditory filter bandwidth as determined by Moore. % % Each channel is subsampled by a factor of 8 (a=8), and to generate a % nice plot, 4 channels per Erb has been used. % % The filterbank covers only the positive frequencies, so we must use % FILTERBANKREALDUAL and FILTERBANKREALBOUNDS. % % Figure 1: Classic spectrogram % % A classic spectrogram of the spoken sentense. The dynamic range has % been set to 50 dB, to highlight the most important features. % % Figure 2: Auditory filterbank representation % % Auditory filterbank representation of the spoken sentense using % gammatone filters on an Erb scale. The dynamic range has been set to % 50 dB, to highlight the most important features. % % % References: % B. R. Glasberg and B. Moore. Derivation of auditory filter shapes from % notched-noise data. Hearing Research, 47(1-2):103, 1990. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/demos/demo_auditoryfilterbank.html} %@seealso{freqtoaud, audfiltbw, gammatonefir, ufilterbank, filterbankrealdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Use part of the 'cocktailparty' spoken sentense. f=cocktailparty; f=f(20001:80000,:); fs=44100; a=8; channels_per_erb=2; filterlength=5000; dynrange_for_plotting=50; % Determine minimal transform length Ls=length(f); L=ceil(filterlength/a)*a; % Number of channels, slightly less than 1 ERB(Cambridge) per channel. M=ceil(freqtoerb(fs/2)*channels_per_erb); % Compute center frequencies. fc=erbspace(0,fs/2,M); %% --------------- display classic spectrogram ------------------- figure(1); sgram(f,fs,dynrange_for_plotting); %% --------------- Gammatone filters ---------------------------- if 1 g_gam=gammatonefir(fc,fs,filterlength,'peakphase'); % In production code, it is not necessary to call 'filterbankrealbounds', % this is just for veryfying the setup. disp('Frame bound ratio for gammatone filterbank, should be close to 1 if the filters are choosen correctly.'); filterbankrealbounds(g_gam,a,L) % Create reconstruction filters gd_gam=filterbankrealdual(g_gam,a,L); % Analysis transform coef_gam=ufilterbank(f,g_gam,a); % Synthesis transform r_gam=2*real(ifilterbank(coef_gam,gd_gam,a,Ls)); disp('Relative error in reconstruction, should be close to zero.'); norm(f-r_gam)/norm(f) figure(2); plotfilterbank(coef_gam,a,fc,fs,dynrange_for_plotting,'audtick'); F = frame('ufilterbankreal',g_gam,a,M); c2 = frana(F,f); Ls=length(f); [r_iter,relres,iter] = frsyniter(F,c2,Ls); disp('Relative error in interative reconstruction, should be close to zero.'); norm(f-r_iter)/norm(f) end; ltfat/inst/ltfatstop.m0000664000175000017500000000625512612404256014751 0ustar susnaksusnakfunction ltfatstop() %-*- texinfo -*- %@deftypefn {Function} ltfatstop %@verbatim %LTFATSTOP Stops the LTFAT toolbox % Usage: ltfatstop; % % LTFATSTOP removes all LTFAT subdirectories from the path. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/ltfatstop.html} %@seealso{ltfatstart} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard, Zdenek Prusa dirlist = {}; jarsubpath = ['blockproc', filesep(), 'java', filesep(), 'blockproc.jar']; % Old versions of Matlab does not have "mfilename('fullpath')" pkg_folder = which(mfilename); % Kill the function name from the path. -3 for .m and / pkg_folder=pkg_folder(1:end-numel(mfilename)-3); d= dir(pkg_folder); % Take only valid directories d= {d(arrayfun(@(dEl) dEl.isdir && ~strcmp(dEl.name(1),'.'),d))}; basedir = {filesep()}; while ~isempty(d) for ii=1:numel(d{1}) name = d{1}(ii).name; dtmp = dir([pkg_folder basedir{1},name]); dtmp = dtmp(arrayfun(@(dEl) dEl.isdir && ~strcmp(dEl.name(1),'.'),dtmp)); if ~isempty(dtmp) d{end+1} = dtmp; basedir{end+1} = [basedir{1},name,filesep]; end if exist([pkg_folder,basedir{1},name,filesep(),lower(name),'init.m'],'file') dirtmp = [pkg_folder,basedir{1},name]; pathCell = regexp(path, pathsep, 'split'); if ispc % Windows is not case-sensitive onPath = any(strcmpi(dirtmp, pathCell)); else onPath = any(strcmp(dirtmp, pathCell)); end % Add to the list only if it is already in path if onPath dirlist{end+1} = [basedir{1},name]; end end end basedir(1) = []; d(1) = []; end % Remove directories from the path cellfun(@(dEl) rmpath([pkg_folder,dEl]),dirlist); % Remove the root dir pathCell = regexp(path, pathsep, 'split'); if ispc % Windows is not case-sensitive onPath = any(strcmpi(pkg_folder, pathCell)); else onPath = any(strcmp(pkg_folder, pathCell)); end % This can actually remove user hardcoded path to LTFAT's root. if onPath rmpath(pkg_folder); end % Clean the classpath if ~isempty(which('javaclasspath')) try jp = javaclasspath(); if any(strcmp([pkg_folder filesep() jarsubpath],jp)) javarmpath([pkg_folder, filesep(), jarsubpath]); end catch % Do nothing. At this point, user is most probably aware that % there is something wrong with the JAVA support. end end ltfat/inst/ltfatmex.m0000664000175000017500000004177612612404256014564 0ustar susnaksusnakfunction ltfatmex(varargin) %-*- texinfo -*- %@deftypefn {Function} ltfatmex %@verbatim %LTFATMEX Compile Mex/Oct interfaces % Usage: ltfatmex; % ltfatmex(...); % % LTFATMEX compiles the C backend in order to speed up the execution of % the toolbox. The C backend is linked to Matlab and Octave through Mex % and Octave C++ interfaces. % Please see INSTALL-Matlab or INSTALL-Octave for the requirements. % % The action of LTFATMEX is determined by one of the following flags: % % 'compile' Compile stuff. This is the default. % % 'clean' Removes the compiled functions. % % 'test' Run some small tests that verify that the compiled % functions work. % % The target to work on is determined by on of the following flags. % % General LTFAT: % % 'lib' Perform action on the LTFAT C library. % % 'mex' Perform action on the mex / oct interfaces. % % 'gpc' Perform action on the GPC code for use with MULACLAB % % 'auto' Choose automatically which targets to work on from the % previous ones based on the operation system etc. This is % the default. % % Block-processing framework related: % % 'playrec' Perform action on the playrec code for use with real-time % block streaming framework. % % 'java' Perform compilation of JAVA classes into the bytecode. % The classes makes the GUI for the blockproc. framework. % % Other: % % 'verbose' Print action details. % % 'debug' Build a debug version. This will disable compiler % optimizations and include debug symbols. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/ltfatmex.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: NA % REFERENCE: NA % Verify that comp_pgauss is in path if ~exist('comp_pgauss','file') disp(' '); disp('--- LTFAT - The Linear Time Frequency Analysis toolbox. ---'); disp(' ') disp('To start the toolbox, call LTFATSTART as the first command.'); disp(' '); return; end; bp=mfilename('fullpath'); bp=bp(1:end-length(mfilename)); definput.flags.target={'auto','lib','mex','gpc','playrec','java','blockproc'}; % This has to be also defined definput.flags.comptarget={'release','debug'}; definput.flags.command={'compile','clean','test'}; definput.flags.verbosity={'noverbose','verbose'}; s = which('ltfatarghelper'); if strcmpi(mexext,s(end-numel(mexext)+1:end)) % We must avoid calling corrupt ltfatarghelper.mexext % The following must not fail try ltfatarghelper({},struct(),{}); catch if any(strcmpi('verbose',varargin)) fprintf('Removing corrupt ltfatarghelper.%s',mexext); end delete(s); % Now there is just a ltfatarghelper.m end end [flags,kv]=ltfatarghelper({},definput,varargin); % Remember the current directory. curdir=pwd; % Compile backend lib? do_lib = flags.do_lib || flags.do_auto; % Compile MEX/OCT interfaces? do_mex = flags.do_mex || flags.do_auto; % Compile MEX PolygonClip.mex... using Generic Polygon Clipper % (relevant only for the mulaclab, which does not work in Octave) do_gpc = flags.do_gpc || (flags.do_auto && ~isoctave); % Compile MEX playrec.mex... using Portaudio library. % (relevant only for the bloc processing framework) do_playrec = flags.do_playrec || flags.do_blockproc; % Compile Java classes containing GUI for the bloc proc. framework. do_java = flags.do_java || flags.do_blockproc; if isoctave && flags.do_gpc error('%s: Compiling GPC is not relevant for Octave.',upper(mfilename)); end if isoctave extname='oct'; ext='oct'; else extname='mex'; ext=mexext; end; fftw_lib_names = {'fftw3', 'fftw3f' }; % Check if we are on Windows if ispc makefilename='Makefile_mingw'; make_exe = 'mingw32-make'; sharedExt = 'dll'; %fftw_lib_names = {'fftw3', 'fftw3f' }; % The pre-compiled Octave for Windows comes only in 32bit version (3.6.4) % We use different Makefiles if isoctave makefilename='Makefile_mingwoct'; end end; % Check if we are on Unix-type system if isunix makefilename='Makefile_unix'; make_exe = 'make'; sharedExt = 'so'; end; % Check if we are on Mac if ismac makefilename='Makefile_mac'; make_exe = 'make'; sharedExt = 'dylib'; end; clear mex; % -------------- Handle cleaning -------------------------------- if flags.do_clean if do_lib disp('========= Cleaning libltfat ==============='); cd([bp,'src']); callmake(make_exe,makefilename,'target','clean',flags.verbosity); %[status,result]=system([make_exe, ' -f ',makefilename,' clean']); %disp('Done.'); end; if do_mex fprintf('========= Cleaning %s interfaces =========\n', upper(extname)); cd([bp,extname]); callmake(make_exe,makefilename,'target','clean','ext',ext,flags.verbosity); %[status,result]=system([make_exe, ' -f ',makefilename,' clean',... % ' EXT=',ext]); end; if do_gpc disp('========= Cleaning GPC ===================='); cd([bp,'thirdparty',filesep,'PolygonClip']); clear mex; callmake(make_exe,makefilename,'target','clean','ext',mexext,flags.verbosity); %[status,result]=system([make_exe, ' -f ',makefilename,' clean',' EXT=',mexext]); end; if do_playrec % Use the correct makefile if isoctave if ~strcmpi(makefilename(end-2:end),ext) makefilename = [makefilename,ext]; end end disp('========= Cleaning PLAYREC ================'); cd([bp,'thirdparty',filesep,'Playrec']); clear mex; %[status,result]=system([make_exe, ' -f ',makefilename,' clean',' EXT=',mexext]); callmake(make_exe,makefilename,'target','clean','ext',mexext,flags.verbosity); end; if do_java disp('========= Cleaning JAVA ================'); cd([bp,'blockproc',filesep,'java']); %[status,result]=system([make_exe,' clean']); callmake(make_exe,[],'target','clean',flags.verbosity); end; cd(curdir); end; % -------------- Handle compiling -------------------------------- if flags.do_compile if do_lib disp('========= Compiling libltfat =============='); cd([bp,'src']); clear mex; dfftw = ['-l',fftw_lib_names{1}]; sfftw = ['-l',fftw_lib_names{2}]; if ispc && ~isoctave fftw_lib_found_names = searchfor(bp,fftw_lib_names,sharedExt); if ~isempty(fftw_lib_found_names) dfftw = ['-l:',fftw_lib_found_names{1}]; sfftw = ['-l:',fftw_lib_found_names{2}]; end end % DFFTW and SFFTW are not used in the unix_makefile [status,result] = callmake(make_exe,makefilename,'matlabroot','arch',... 'dfftw',dfftw,'sfftw',sfftw,flags.verbosity,... 'comptarget',flags.comptarget); if(~status) disp('Done.'); else error('Failed to build LTFAT libs:\n %s',result); end %end; end; if do_mex fprintf('========= Compiling %s interfaces ========\n', upper(extname)); clear mex; cd([bp,extname]); dfftw = ['-l',fftw_lib_names{1}]; sfftw = ['-l',fftw_lib_names{2}]; if ~isoctave fftw_lib_found_names = searchfor(bp,fftw_lib_names,sharedExt); if ~isempty(fftw_lib_found_names) if ~ismac dfftw = ['-l:',fftw_lib_found_names{1}]; sfftw = ['-l:',fftw_lib_found_names{2}]; else % We need a full path here. dfftw = [binDirPath(),filesep,fftw_lib_found_names{1}]; sfftw = [binDirPath(),filesep,fftw_lib_found_names{2}]; end end end [status,result] = callmake(make_exe,makefilename,'matlabroot','arch',... 'ext',ext,'dfftw',dfftw,'sfftw',sfftw,... flags.verbosity,... 'comptarget',flags.comptarget); if(~status) disp('Done.'); else error('Failed to build %s interfaces: %s \n',upper(extname),result); end end; if do_gpc disp('========= Compiling GPC ==================='); % Compile the PolygonClip interface to GPC for use with mulaclab cd([bp,'thirdparty',filesep,'PolygonClip']); clear mex; [status,result] = callmake(make_exe,makefilename,'matlabroot','arch',... 'ext',ext,flags.verbosity); if(~status) disp('Done.'); else error('Failed to build GPC:\n %s',result); end end; if do_playrec disp('========= Compiling PLAYREC ==============='); cd([bp,'thirdparty',filesep,'Playrec']); clear mex; % Compile the Playrec (interface to portaudio) for the real-time block- % stream processing portaudioLib = '-lportaudio'; binArchPath = binDirPath(); playrecRelPath = ['thirdparty',filesep,'Playrec']; foundPAuser = []; if ispc foundPAuser = dir([bp,playrecRelPath,filesep,'*portaudio*',sharedExt,'*']); end foundPAmatlab = []; if ~isoctave % Check if portaudio library is present in the Matlab installation foundPAmatlab = dir([binArchPath,filesep,'*portaudio*',sharedExt,'*']); end if ~isempty(foundPAuser) if numel(foundPAuser)>1 error('Ambiguous portaudio libraries in %s. Please leave just one.',playrecRelPath); end foundPAuser = foundPAuser(1).name; elseif ~isempty(foundPAmatlab) if numel(foundPAmatlab)>1 if ispc %This should not happen on Windows %Use the first one on Linux error('Ambiguous portaudio libraries in %s.',binArchPath); end end foundPAmatlab = foundPAmatlab(1).name; else if ispc && isoctave || ispc error(['Portaudio not found. Please download Portaudio http://www.portaudio.com\n',... 'and build it as a shared library and copy it to the\n',... '%s directory. \n'],playrecPath); end end if isoctave if ~strcmpi(makefilename(end-2:end),ext) makefilename = [makefilename,ext]; end end doPAuser = ~isempty(foundPAuser); doPAmatlab = ~isempty(foundPAmatlab) && ~doPAuser; if doPAmatlab if ismac % Full path is needed on MAC since % clang does not understand -l: prefix. portaudioLib = [binArchPath,filesep,foundPAmatlab]; else portaudioLib = ['-l:',foundPAmatlab]; end fprintf(' ...using %s from Matlab installation.\n',foundPAmatlab); elseif doPAuser portaudioLib = ['-l:',foundPAuser]; fprintf(' ...using %s from ltfat%s%s.\n',... foundPAuser,filesep,playrecRelPath); end [status,result] = callmake(make_exe,makefilename,'matlabroot','arch',... 'ext',mexext,'portaudio',portaudioLib,'extra','HAVE_PORTAUDIO',... flags.verbosity); if(~status) disp('Done.'); else error('Failed to build PLAYREC:\n %s',result); end end; if do_java disp('========= Compiling JAVA classes ==================='); % Compile the JAVA classes cd([bp,'blockproc',filesep,'java']); clear mex; [status,result] = callmake(make_exe,'Makefile',flags.verbosity); if(~status) disp('Done.'); else error('Failed to build JAVA classes:\n %s',result); end end; end; % -------------- Handle testing --------------------------------------- if flags.do_test if do_mex fprintf('========= Testing %s interfaces ==========\n', extname); fprintf('1.: Test if comp_pgauss.%s was compiled: ',ext); fname=['comp_pgauss.',ext]; if exist(fname,'file') disp('SUCCESS.'); else disp('FAILED.'); end; fprintf('2.: Test if pgauss executes: '); pgauss(100); % If the execution of the script makes it here, we know that pgauss % did not crash the system, so we can just print success. Same story % with the following entries. disp('SUCCESS.'); fprintf('3.: Test if fftreal executes: '); fftreal(randn(10,1),10); disp('SUCCESS.'); fprintf('4.: Test if dgt executes: '); dgt(randn(12,1),randn(12,1),3,4); disp('SUCCESS.'); end; end; % Jump back to the original directory. cd(curdir); function status = filesExist(filenames) if(~iscell(filenames)) filenames={filenames}; end for ii=1:length(filenames) filename = filenames{ii}; if(~exist(filename,'file')) error('%s: File %s not found.',mfilename,filename); end end function found_files=searchfor(bp,files,sharedExt) found_names = {}; if ispc for ii=1:numel(files) % Search the ltfat/mex lib L = dir([bp,'mex',filesep,'*',files{ii},'*.',sharedExt]); if isempty(L) error(['%s: %s could not be found in ltfat/mex subdir.',... ' Please download the FFTW dlls and install them.'],... upper(mfilename),files{ii}); end found_files{ii} = L(1).name; fprintf(' ...using %s from ltfat/mex.\n',L(1).name); end elseif isunix for ii=1:numel(files) L = dir([binDirPath(),filesep,'*',files{ii},'*.',sharedExt,'*']); if isempty(L) error('%s: Matlab FFTW libs were not found. Strange.',... upper(mfilename)); end found_files{ii} = L(1).name; fprintf(' ...using %s from Matlab installation.\n',... found_files{ii}); end end; function path=binDirPath() path = [matlabroot,filesep,'bin',filesep,computer('arch')]; function [status,result]=callmake(make_exe,makefilename,varargin) %CALLMAKE % Usage: callmake(make_exe,makefilename); % callmake(make_exe,makefilename,'matlabroot',matlabroot,...); % % `callmake(make_exe,makefilename)` is a platform independent wrapper for % calling the make command `make_exe` on `makefilename` file. When % `makefilename` is missing or is empty, the default `Makefile` file is % used. % % `callmake(...,'target',target)` used `target` from the makefile. % % Flags: % % matlabroot: Pass MATLABROOT=matlabroot variable to the makefile. % % arch: Pass ARCH=computer('arch') variable to the makefile. % % Key-value parameters: % % ext: Pass EXT variable to the makefile. % % portaudio: Pass PORTAUDIO variable to the makefile. % % dfftw: Pass DFFTW variable to the makefile. % % sfftw: Pass SFFTW variable to the makefile. if nargin < 2 || isempty(makefilename) systemCommand = make_exe; else systemCommand = [make_exe, ' -f ',makefilename]; end definput.flags.matlabroot={'none','matlabroot'}; definput.flags.arch={'none','arch'}; definput.keyvals.ext=[]; definput.keyvals.dfftw=[]; definput.keyvals.sfftw=[]; definput.keyvals.target=[]; definput.keyvals.comptarget=[]; definput.keyvals.portaudio=[]; definput.keyvals.extra=[]; definput.flags.verbosity={'noverbose','verbose'}; [flags,kv]=ltfatarghelper({},definput,varargin); if flags.do_matlabroot systemCommand = [systemCommand, ' MATLABROOT=','"',matlabroot,'"']; end if flags.do_arch systemCommand = [systemCommand, ' ARCH=',computer('arch')]; end if ~isempty(kv.ext) systemCommand = [systemCommand, ' EXT=',kv.ext]; end if ~isempty(kv.dfftw) systemCommand = [systemCommand, ' DFFTW=',kv.dfftw]; end if ~isempty(kv.sfftw) systemCommand = [systemCommand, ' SFFTW=',kv.sfftw]; end if ~isempty(kv.portaudio) systemCommand = [systemCommand, ' PORTAUDIO=',kv.portaudio]; end if ~isempty(kv.comptarget) && ~strcmpi(kv.comptarget,'release') systemCommand = [systemCommand, ' COMPTARGET=',kv.comptarget]; end if ~isempty(kv.extra) systemCommand = [systemCommand, ' ',kv.extra,'=1']; end if ~isempty(kv.target) systemCommand = [systemCommand,' ',kv.target]; end if flags.do_verbose fprintf('Calling:\n %s\n\n',systemCommand); end [status,result]=system(systemCommand); if flags.do_verbose && ~isoctave disp(result); end ltfat/inst/ltfathelp.m0000664000175000017500000000607412612404256014713 0ustar susnaksusnakfunction op1=ltfathelp(varargin) %-*- texinfo -*- %@deftypefn {Function} ltfathelp %@verbatim %LTFATHELP Help on the LTFAT toolbox % Usage: ltfathelp; % v=ltfathelp('version'); % mlist=ltfathelp('modules'); % % LTFATHELP displays some general help on the LTFAT toolbox. % % LTFATHELP('version') returns the version number. % % LTFATHELP('modules') returns a cell array of installed modules and % corresponding version numbers. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/ltfathelp.html} %@seealso{ltfatstart} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: NA % REFERENCE: NA % Verify that comp_pgauss is in path if ~exist('comp_pgauss','file') disp(' '); disp('--- LTFAT - The Linear Time Frequency Analysis toolbox. ---'); disp(' ') disp('To start the toolbox, call LTFATSTART as the first command.'); disp(' '); return; end; bp=ltfatbasepath; definput.keyvals.versiondata=[]; definput.keyvals.modulesdata=[]; definput.flags.mode={'general','version','modules'}; [flags,kv]=ltfatarghelper({},definput,varargin); if flags.do_general disp(' '); disp('--- LTFAT - The Linear Time Frequency Analysis toolbox. ---'); disp(' ') disp(['Version ',kv.versiondata]); disp(' '); disp('Installed modules:'); disp(' '); disp('Name: Version: Description'); modinfo=ltfathelp('modules'); for ii=1:length(modinfo); s=sprintf(' %-15s %7s %s',modinfo{ii}.name,modinfo{ii}.version, ... modinfo{ii}.description); disp(s); end; disp('Type "help modulename" where "modulename" is the name of one') disp('of the modules to see help on that module.') disp(' '); disp('For other questions, please don''t hesitate to send an email to ltfat-help@lists.sourceforge.net.'); end; if flags.do_version op1=kv.versiondata; end; if flags.do_modules op1={}; for ii=1:numel(kv.modulesdata) p=kv.modulesdata{ii}; % Get the first line of the help file [FID, MSG] = fopen ([bp,p.name,filesep,'Contents.m'],'r'); if FID==-1 error('Module %s does not contain a Contents.m file.',p.name); end; firstline = fgetl (FID); fclose(FID); % Load the information into the cell array. op1{ii}.name=p.name; op1{ii}.version=p.version; op1{ii}.description=firstline(2:end); end; end; ltfat/inst/ltfatbasepath.m0000664000175000017500000000225712612404256015551 0ustar susnaksusnakfunction bp = ltfatbasepath; %-*- texinfo -*- %@deftypefn {Function} ltfatbasepath %@verbatim %LTFATBASEPATH The base path of the LTFAT installation % Usage: bp = ltfatbasepath; % % LTFATBASEPATH returns the top level directory in which the LTFAT % files are installed. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/ltfatbasepath.html} %@seealso{ltfatstart} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . f=mfilename('fullpath'); bp = f(1:end-13); ltfat/inst/ChangeLog0000664000175000017500000004103712612404251014315 0ustar susnaksusnakVersion 2.1.1 x/10 2015 * New function for computing higher order phase derivatives: gabphasederiv * New function doing the adjustable reassignment: gabreassignadjust * New function for the Gabor transform phase reconstruction: constructphase, constructphasereal * New filterbank-generating function: audfilters * New generic quadratic TF distribution function: quadtfdist * New functions for reading and writing wav files (since wavread and wavwrite were removed in Matlab 2015b): wavload, wavsave (taken from VOICEBOX http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html) * Added 'nojava' flag to ltfatstart to optionally disable adding the blockproc JAVA classes to the classpath. * Updated the lBFGS method in frsynabs according to the new paper. * Fixed bug in gabphasegrad which prevented it from being used with any window other than Gaussian. * Fixed bug in comp_ifilterbank_fftbl for non-painless filterbanks. Version 2.1.0 6/5 2015 * New filterbank-generating function: warpedfilters * New filterbank spectrogram reassignment function: filterbankreassign * ltfatarghelper is now also implemented as a MEX file. * The block function can now handle synchronized simultaneous playback and recording. E.g. {'rec','file.wav'} plays a wav file while recording. This is different from the option 'playrec', which works the "other way" i.e. it records and play the recorded. * Function framebounds(...,'iter') now uses pcg to represent the inverse of the frame operator when calculating the lowest eigenvalue using eigs. * Added implementation of some quadratic time-frequency representations: Rihaczek, Wigner-Ville * Fixed #112 (Sourceforge): Octave package now compiles on Windows (mxe version) thanks to John Donoghue. * Related to #111 (Sourceforge): Wavelet filters were hand-centered around the origin. * comp_filterbank, comp_ifilterbank and ltfatarghelper can be compiled as MEX files on Octave. Version 2.0.1 8/10 2014 (released only at Octave-Forge) * Included test suite. Version 2.0.0 7/10 2014 * Fixed bug in filterbankdual and filterbankrealdual for the uniform case. Also the routines are now much faster. * Added possibility to force treatment of a filterbank as a painless filterbank using 'forcepainless' flag in filterbank(real)dual routines. * Fixed bug in comp_ifilterbank MEX causing crashes for mixed type filterbanks. * Added implementation of dual-tree wavelet transform, general dual-tree wavelet filterbanks and *M*-band transforms. * New dual-tree wavelet filters: wfiltdt_qshift, wfiltdt_oddeven, wfiltdt_optsym, wfiltdt_dden * New regular DWT filters: wfilt_symorth, wfilt_symtight * wfilt_ functions now return filters in a format compatible with LTFAT filter format (struct with .h and .offset fields). * Closed #100 FEATURE: Add on-the-fly sample rate conversion to the blockproc framework. It effectivelly allows recording and playback at arbitrary sampling rates. * Added support for cross-compilation (src/Makefile_crossmingw): Producing Windows binaries on an Unix system using MXE (http://mxe.cc/). Works only with MEX files for Matlab. * Blockproc. framework now supports any sampling rate from interval 4-96kHz trough on-the-fly resampling in the background. * Fixed compilation issue with gcc 4.7. Version 1.4.5 7/5 2014 * Phase locking in DGT ('timeinv' flag) moved to the C backend. It was too slow in Octave. * Added franabp - solving a basis pursuit problem argmin ||c||_1 s.t. Fc = f for an arbitrary frame F. * The lambda parameter in franabp and franalasso can now be a vector. => thresh acceps such lambda too. * New demos to accompany the LTFAT 2.0 paper: demo_filterbanks, demo_wavelets, demo_wfbt, demo_bpframemul, demo_phaseret * New blockproc demo: demo_blockproc_effects * blockproc framework can be now used offline without a single call to the playrec MEX. * Closed #49: blockwrite method. Allows blockwise storage of audio data to a wav file. * All wavelet routines were correctly included in the frames framework. Correct computation of canonical dual and tight frames for undecimated wavelet filterbanks. * New wrapper frame types in the frames framework: erbletfb, cqtfb * Removed demo_blockproc_pitchshift. It is now part of demo_blockproc_effects. * Removed some esoteric wavelet filters. Version 1.4.4 25/2 2014 * Mostly bug fixes and doc updates. * Reworked build system on Linux and Mac OS. * Most of the code moved from Mex/Oct interfaces to the backend. * The C code was revised: consistence of argument naming and order, introduced ltfatInt data type for array lengths. * New block processing demos: real-time CQT and Erblets (fast enough only in Matlab). * Added routines for calculating Gabor dual frames using convex optimization (requires UNLocBoX http://unlocbox.sourceforge.net/). * Improved usability of the blockproc GUI: Added possibility to set initial window positions, capturing Ctrl-C shortcut. * Closed #22: Wilson and MDCT transforms are now completely implemented in C. * Renamed framematrix to frsynmatrix Version 1.4.3 22/11 2013 * Fixed bug in nsgabframebounds.m * Added chirped Z-transform * Block processing demos now work in Octave (on Linux) * Backend library now uses C99 complex number format only * Faster block processing via block_interface MEX function * New zoomig features for blockplot Version 1.4.2 17/9 2013 * Added mexExecuter to speed up cell array handling in the backends * All filterbank algorithms are now in the backend * franalasso now packs the FISTA algorithm * More block processing demos: pitch shifting * Added the generalized Goertzel algorithm Version 1.4.1 18/7 2013 * Major change in the output format from the wfilt_ functions. If a wfilt_ function generates a tigth frames, its two outputs are now identical. * Close #67, #68, Mex compilation now works on Mac * Experimental filter backend added to handle filters defined on the frequency side and on the time side using structs and anonymous functions * Limited support for fractional downsampling in filters and filterbanks * erbfilters routine added to generate Erb-spaced filterbanks * Fixed bug #6, demo_audioshrink now works again * All DCT and DST routines now call FFTW directly. * Fixed bug #55, FWT on Octave can now handle complex values * Added floor23, floor234, ceil23 and ceil235 to find the next nice number. Useful for constructing downsampling rates in filterbanks. Version 1.4.0 3/6 2013 * All routines calling the C backend now support single precision * Frames framework has been rewritten for greater speed using anonymous functions * New "operators" directory for the comming inclusion of more operator classes * First alpha version of the block processing framework introduced in "blocks" * The noshearlength routine computes next efficient transform length for a Gabor system on a non-separable lattice * The frames framework now support non-stationary Gabor systems * Compilation of functions calling BLAS and LAPACK has been fixed, so gabdual and gabtight now works in C on all platforms * Better speed when computing many Hermite functions, support for orthonormalization in the sampled continous case * Fast and discrete fractional Fourier transform added * cqt and erblett transforms added Version 1.3.1 5/4 2013 * Fixed compilation on Unix * Wavelets now works in Octave * Improved firwin featuring all the windows from the Nuttall paper Version 1.3.0 20/3 2013 * This is the first full release of the wavelets. Too many changes to list here, but the major features are listed below: * fwt - Fast wavelet transform * fwt2 - 2D FWT with different layouts * ufwt - Undecimated FWT * wfbt - Wavelet filter bank tree * wpfbt - Wavelet packet filter bank tree * wpbest - Best basis search of a wavelet packet tree * wfilt_ functions defines a lot of different possible wavelet and scaling functions. * Mex compiled code is now supported for Windows 64 bit (Windows Vista, 7). Support for Windows 32 has been dropped. * Color test image, lichenstein, added and jpeg color model support in rgb2jpeg * frame multipliers added with the usual functions, framemul, framemulinv, framemuladj, framemuleigs and framemulappr Version 1.2.0 13/12 2012 * Full support for non-separable Gabor lattices with support in the C backend. * Improved non-stationary Gabor systems: bugfixes for system with odd-length shifts, tester has been extented to cover all these cases. * Iterative analysis and synthesis for frames: franaiter and frsyniter uses the conjugate gradients algorithm. * The "frames" framework has changed so that each frame object only includes one frame. This means that you will need to create two frames if you want to perform analysis/synthesis with a bi-orthogonal / canonical dual system. On the other hand, a lot of duplication was removed. * Small bugfixes: idgt2, gabdualnorm Version 1.1.2 2/10 2012 * Almost full support for non-separable Gabor laticces * Multi-win support re-enabled in gabdual and gabtight * Demos finally converted to new documentation system Version 1.1.1 30/3 2012 * Initial inclusion of the frames framework * New and more flexible groupthresh * Much improved framelasso and framegrouplasso replaces the old lasso methods Version 1.0.0 16/6 2011 * Auditory scales: Erb, bark, mel * Gammatone filters. * Filterbanks with a full set of support functions. * non-stationary Gabor frames with a full set of support functions. * rangecompress and rangeexpand does ulaw and alaw. * cocktailparty test signal replaces older 'greasylong' * plot functions for visualizing coefficients of all transforms. * C implementation improved: speedup in gabdual and gabtight, implementation of dgtreal, pfilt and ufilterbank. * nextfastfft computes next larger problem size with a fast FFT. * isgramreal can use BFGS method, requires external software. Version 0.98.2 25/3 2011 * Added C code for IDGT using FIR filters. * WinXP compilation now works without LCC. Version 0.98.1 25/2 2011 * New iterative spectrogram reconstruction featuring the word "LTFAT". * Features added to ltfatarghelper to support importing definitions from aux. functions. Version 0.98 28/1 2011 * The flags 'freqinv' and 'timeinv' can be passed to the DGT, IDGT, DGTREAL and IDGTREAL to select a time- or frequency-invariant phase. * Three new functions to ramp a signal (create a smooth transition from 0 to 1), RAMPUP, RAMPDOWN and RAMPSIGNAL. * nuttall window added to FIRWIN. General cleanup of FIRWIN. If is now possible to taper the window in the middle. * Support for different normalization of the function in all window functions. This is done through the function NORMALIZE. * PGAUSS takes options for shifting the center frequency and specifying the bandwidth, in both samples or Hz. * PINKNOISE: Pink noise generator. * ISGRAM: Spectrogram reconstruction using the classical iterative method by Griffin and Lim. * ELITISTHRESH: Elitist LASSO thresholding. * PRECT and PSINC: periodic rectangular and periodic Sinc function. Version 0.97.2 * The GPC source code is now distributed with LTFAT. A popup dialog has been added to mulaclab to explan the license conditions. * The algorithm for computing dgtreal with a FIR window is now implemented in C. Version 0.97.1 * Support for Octave on Windows XP. * It is now possible to specify various targets and commands in ltfatmex. Version 0.97 * Toolbox is now built upon a standalone C library. * The 'mulaclab' is a graphical user interface for manipulating the spectrogram of a signal. The gui works only in Matlab. * All functions in the LTFAT C library are now available in both single and double precision * Compilation and interfaces for both Matlab and Octave interfaces now works on Windows XP. * It is now possible to supply a window described by a text string or a cell array to all relevant functions. See the help on gabwin or wilwin for a description of the possibilities. * Much better support for optional arguments in functions, and for setting default at startup. See the function ltfatsetdefaults, ltfatgetdefaults and ltfatarghelper * GABRIESZBOUNDS: compute Gabor Riesz bounds for a Gabor Riesz sequence. * WIL2RECT and RECT2WIL: arrange Wilson coefficients in a rectangular shape (with holes) at the correct position in the TF-plane. * PEVEN and PODD extracts the even and odd part of a signal. Version 0.96 12/1 2009 svn no 728 * Matlab MEX compilation now works under Windows. See the instructions in the INSTALL file. * Speed optimizations in the C-code used by DGT, DWILT and MDCT and their inverses. * New functions DGTREAL and IDGTREAL works with the positive frequencies of the DGT of real valued signals. * New functions FFTREAL computes only the positive frequencies of the FFT of a real valued input signal. * More systematic naming of functions: CANDUAL -> GABDUAL CANTIGHT -> GABTIGHT MIXDUAL -> GAMIXDUAL PROJDUAL -> GABPROJDUAL GFBOUNDS -> GABFRAMEBOUNDS and GABRIESZBOUNDS TF_ADAPTLASSO -> GABELITISTLASSO TF_GROUPLASSO -> GABGROUPLASSO * Reassignment is a method for sharpening the spectrogram. Support for reassignment is included in the new function REASSIGN and an easy to use plot RESGRAM. * Easy to use plot for plotting instantantaneous frequency: INSTFREQPLOT * Three different methos for computing instantaneous time and frequency: INSTTFDGT, INSTTFPHASE and INSTTFABS. * General speedup of many of the SPREAD* routines based on speedup in COL2DIAG and more efficient algorithms for sparse matrices. * COL2DIAG provides the basic coordinate change needed for efficient implementation of spreading function methods. COL2DIAG has a C-implementation. * New function WIL2RECT converts Wilson coefficients from the standard compact layout to a more loose layout, where the coefficients are appropriatly placed on the TF-plane. The rectangular format is welll suited for visualizing Wilson coefficients. * The functionality of GFBOUNDS was split into two methods computing either frame bounds or Riesz basis bounds * Dynamic range in SGRAM and RESGRAM is now specified by the 'dynrange' parameter instead of previously 'range'. * greasylong and doppler signals added. * Periodic Heaviside function added, PHEAVISIDE. * Simple exponential wave added as EXPMODE. Version 0.95 6/3 2008 svn no. 595 * DCT based resampling function. Version 0.94 24/10 2007 svn no. 556 * Numerically stable computation of Hermite functions. Thanks to Thomasz Hrycak. * gabmulappr (approximation of an operator by a Gabor multiplier) now works with fast algorithm. * group lasso shrinkage and adaptive lasso shrinkage added with an example (examp_audioshrink) * Removed all support of lattices in the spreading operator routines, as this is not practically usefull. * Special support in candual for windows shorter than the number of channels. * The configure style system has been removed. Use ltfatmex instead. * phaseplot now uses the phaselocked dgt by default. Version 0.93 10/8 2007 svn no. 504 * Easy compilation of Mex/Octave interfaces by 'ltfatmex' command * Bug fixed for Wilson bases. * Better support of choosing an alternative dimension for the various transforms. * fmax option added to sgram * fftresample does Fourier interpolation * phaseplot changed to always do full STFT * moved to GPL v 3.0 license ltfat/inst/auditory/0000775000175000017500000000000012612404256014403 5ustar susnaksusnakltfat/inst/auditory/audfiltbw.m0000664000175000017500000000514312612404256016545 0ustar susnaksusnakfunction bw = audfiltbw(fc,varargin) %-*- texinfo -*- %@deftypefn {Function} audfiltbw %@verbatim %AUDFILTBW Bandwidth of auditory filter % Usage: bw = audfiltbw(fc) % % AUDFILTBW(fc) returns the critical bandwidth of the auditory filter % at center frequency fc defined in equivalent rectangular bandwidth. % The function uses the relation: % % bw = 24.7 + fc/9.265 % % as estimated in Glasberg and Moore (1990). % % AUDFILTBW(fc,'bark') returns the critical bandwidth at fc according % to the Bark scale using the relation: % % bw = 25 + 75 ( 1+1.4*10^{-6} fc^2 )^0.69 % % as estimated by Zwicker and Terhardt (1980). % % % References: % E. Zwicker and E. Terhardt. Analytical expressions for criticalâ€band % rate and critical bandwidth as a function of frequency. The Journal of % the Acoustical Society of America, 68(5):1523-1525, 1980. [1]http ] % % B. R. Glasberg and B. Moore. Derivation of auditory filter shapes from % notched-noise data. Hearing Research, 47(1-2):103, 1990. % % References % % 1. http://scitation.aip.org/content/asa/journal/jasa/68/5/10.1121/1.385079 % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/audfiltbw.html} %@seealso{freqtoerb, erbspace} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % ------ Checking of input parameters --------- % error(nargchk(1,1,nargin)); if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isnumeric(fc) || any(fc(:)<0) error('AUDFILTBW: fc must be non-negative.'); end; definput.flags.audscale={'erb','bark'}; [flags,kv]=ltfatarghelper({},definput,varargin); % ------ Computation -------------------------- % FIXME: What is the upper frequency for which the estimation is valid? if flags.do_erb bw = 24.7 + fc/9.265; end if flags.do_bark bw = 25 + 75*(1 + 1.4E-6*fc.^2).^0.69; end ltfat/inst/auditory/audtofreq.m0000664000175000017500000000443612612404256016562 0ustar susnaksusnakfunction freq = audtofreq(aud,varargin) %-*- texinfo -*- %@deftypefn {Function} audtofreq %@verbatim %AUDTOFREQ Converts auditory units to frequency (Hz) % Usage: freq = audtofreq(aud); % % AUDTOFREQ(aud,scale) converts values on the selected auditory scale to % frequencies measured in Hz. % % See the help on FREQTOAUD to get a list of the supported values of % the scale parameter. If no scale is given, the erb-scale will be % selected by default. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/audtofreq.html} %@seealso{freqtoaud, audspace, audfiltbw} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard %% ------ Checking of input parameters --------- if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isnumeric(aud) error('%s: aud must be a number.',upper(mfilename)); end; definput.import={'freqtoaud'}; [flags,kv]=ltfatarghelper({},definput,varargin); %% ------ Computation -------------------------- if flags.do_mel freq = 700*sign(aud).*(exp(abs(aud)*log(17/7)/1000)-1); end; if flags.do_mel1000 freq = 1000*sign(aud).*(exp(abs(aud)*log(2)/1000)-1); end; if flags.do_erb freq = (1/0.00437)*sign(aud).*(exp(abs(aud)/9.2645)-1); end; if flags.do_bark % This one was found through http://www.ling.su.se/STAFF/hartmut/bark.htm freq = sign(aud).*1960./(26.81./(abs(aud)+0.53)-1); end; if flags.do_erb83 freq = 14363./(1-exp(aud-43.0)/11.7)-14675; end; if flags.do_freq freq=aud; end; if flags.do_log10 freq = 10^(aud); end if flags.do_semitone freq = 10^(aud); end ltfat/inst/auditory/erbspace.m0000664000175000017500000000240112612404256016342 0ustar susnaksusnakfunction [y,bw] = erbspace(flow,fhigh,n) %-*- texinfo -*- %@deftypefn {Function} erbspace %@verbatim %ERBSPACE Equidistantly spaced points on erbscale % Usage: y=erbspace(flow,fhigh,n); % % This is a wrapper around AUDSPACE that selects the erb-scale. Please % see the help on AUDSPACE for more information. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/erbspace.html} %@seealso{audspace, freqtoaud} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard [y,bw] = audspace(flow,fhigh,n,'erb'); ltfat/inst/auditory/rangecompress.m0000664000175000017500000000473212612404256017437 0ustar susnaksusnakfunction [outsig, sigweight] = rangecompress(insig,varargin) %-*- texinfo -*- %@deftypefn {Function} rangecompress %@verbatim %RANGECOMPRESS Compress the dynamic range of a signal % Usage: [outsig, sigweight] = rangecompress(insig,mu); % % [outsig, sigweight]=RANGECOMPRESS(insig,mu) range-compresss the input % signal insig using mu-law range-compression with parameter mu. % % RANGECOMPRESS takes the following optional arguments: % % 'mulaw' Do mu-law compression, this is the default. % % 'alaw' Do A-law compression. % % 'mu',mu mu-law parameter. Default value is 255. % % 'A',A A-law parameter. Default value is 87.7. % % The following plot shows how the output range is compressed for input % values between 0 and 1: % % x=linspace(0,1,100); % xc=rangecompress(x); % plot(x,xc); % xlabel('input'); % ylabel('output'); % title('mu-law compression'); % % References: % S. Jayant and P. Noll. Digital Coding of Waveforms: Principles and % Applications to Speech and Video. Prentice Hall, 1990. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/rangecompress.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Bruno Torresani and Peter L. Soendergaard if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; definput.flags.method={'mulaw','alaw'}; definput.keyvals.mu=255; definput.keyvals.A=87.7; [flags,kv]=ltfatarghelper({},definput,varargin); if flags.do_mulaw tmp = log(1+kv.mu); sigweight = max(abs(insig(:))); outsig = sign(insig) .* log(1+kv.mu*abs(insig))/tmp; end; if flags.do_alaw absx=abs(insig); tmp=1+log(kv.A); mask=absx<1/kv.A; outsig = sign(insig).*(mask.*kv.A.*absx./tmp+(1-mask).*(1+log(kv.A*absx))/tmp); end; ltfat/inst/auditory/rangeexpand.m0000664000175000017500000000413612612404256017061 0ustar susnaksusnakfunction outsig = rangeexpand(insig,varargin); %-*- texinfo -*- %@deftypefn {Function} rangeexpand %@verbatim %RANGEEXPAND Expand the dynamic range of a signal % Usage: sig = rangeexpand(insig,mu,sigweight); % % RANGEEXPAND(insig,mu,sigweight) inverts a previously % applied mu-law companding to the signal insig. The parameters % mu and sigweight must match those from the call to RANGECOMPRESS % % RANGEEXPAND takes the following optional arguments: % % 'mulaw' Do mu-law compression, this is the default. % % 'alaw' Do A-law compression. % % 'mu',mu mu-law parameter. Default value is 255. % % References: % S. Jayant and P. Noll. Digital Coding of Waveforms: Principles and % Applications to Speech and Video. Prentice Hall, 1990. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/rangeexpand.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Bruno Torresani and Peter L. Soendergaard definput.flags.method={'mulaw','alaw'}; definput.keyvals.mu=255; definput.keyvals.A=87.7; [flags,kv]=ltfatarghelper({},definput,varargin); if flags.do_mulaw cst = (1+kv.mu); outsig = cst.^(abs(insig)); outsig = sign(insig) .* (outsig-1); outsig = outsig/kv.mu; end; if flags.do_alaw absx=abs(insig); tmp=1+log(kv.A); mask=absx<1/tmp; outsig = sign(insig).*(mask.*(absx*tmp/kv.A)+(1-mask).*exp(absx*tmp-1)/kv.A); end; ltfat/inst/auditory/freqtoerb.m0000664000175000017500000000236112612404256016554 0ustar susnaksusnakfunction erb = freqtoerb(freq); %-*- texinfo -*- %@deftypefn {Function} freqtoerb %@verbatim %FREQTOERB Converts frequencies (Hz) to erbs % Usage: erb = freqtoerb(freq); % % This is a wrapper around FREQTOAUD that selects the erb-scale. Please % see the help on FREQTOAUD for more information. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/freqtoerb.html} %@seealso{freqtoaud, demo_audscales} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard erb = freqtoaud(freq,'erb'); ltfat/inst/auditory/semiaudplot.m0000664000175000017500000000520512612404256017111 0ustar susnaksusnakfunction h=semiaudplot(x,y,varargin) %-*- texinfo -*- %@deftypefn {Function} semiaudplot %@verbatim %SEMIAUDPLOT 2D plot on auditory scale % Usage: h=semiaudplot(x,y); % % SEMIAUDPLOT(x,y) plots the data (x,y) on an auditory scale. By % default the values of the x-axis will be shown on the Erb-scale. % % SEMIAUDPLOT takes the following parameters at the end of the line of input % arguments: % % 'x' Make the x-axis use the auditory scale. This is the default. % % 'y' Make the y-axis use the auditory scale. % % 'opts',c Pass options stored in a cell array onto the plot % function. % % In addition to these parameters, the auditory scale can be % specified. All scales supported by FREQTOAUD are supported. The default % is to use the erb-scale. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/semiaudplot.html} %@seealso{freqtoaud} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import = {'ltfattranslate','freqtoaud'}; definput.flags.plotdir= {'x','y'}; definput.keyvals.tick = [0,100,250,500,1000,2000,4000,8000,16000]; definput.keyvals.res = 500; definput.keyvals.opts = {}; [flags,kv]=ltfatarghelper({},definput,varargin); n=500; tickpos=freqtoaud(kv.tick,flags.audscale); if flags.do_x xmin=min(x); xmax=max(x); audminmax=freqtoaud([xmin,xmax],flags.audscale); plotval=spline(x,y,audspace(xmin,xmax,n,flags.audscale)); plot(linspace(audminmax(1),audminmax(2),n),plotval,kv.opts{:}); set(gca,'XTick',tickpos); set(gca,'XTickLabel',num2str(kv.tick(:))); xlabel(sprintf('%s (Hz)',kv.frequency)); end; if flags.do_y ymin=min(y); ymax=max(y); audminmax=freqtoaud([ymin,ymax],flags.audscale); plot(x,freqtoerb(y),kv.opts{:}); set(gca,'YTick',tickpos); set(gca,'YTickLabel',num2str(tick(:))); ylabel(sprintf('%s (Hz)',kv.frequency)); end; ltfat/inst/auditory/erbspacebw.m0000664000175000017500000000256612612404256016707 0ustar susnaksusnakfunction [y,n] = erbspacebw(flow,fhigh,varargin) %-*- texinfo -*- %@deftypefn {Function} erbspacebw %@verbatim %ERBSPACEBW Erbscale points specified by bandwidth % Usage: y=erbspacebw(flow,fhigh,bw,hitme); % y=erbspacebw(flow,fhigh,bw); % y=erbspacebw(flow,fhigh); % % This is a wrapper around AUDSPACEBW that selects the erb-scale. Please % see the help on AUDSPACEBW for more information. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/erbspacebw.html} %@seealso{audspacebw, freqtoaud} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard [y,n] = audspacebw(flow,fhigh,varargin{:},'erb'); ltfat/inst/auditory/erbtofreq.m0000664000175000017500000000272512612404256016560 0ustar susnaksusnakfunction freq = erbtofreq(erb); %-*- texinfo -*- %@deftypefn {Function} erbtofreq %@verbatim %ERBTOFREQ Converts erb units to frequency (Hz) % Usage: freq = erbtofreq(erb); % % This is a wrapper around AUDTOFREQ that selects the erb-scale. Please % see the help on AUDTOFREQ for more information. % % The following figure shows the corresponding frequencies for erb % values up to 31: % % erbs=0:31; % freqs=erbtofreq(erbs); % plot(erbs,freqs); % xlabel('Frequency / erb'); % ylabel('Frequency / Hz'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/erbtofreq.html} %@seealso{audtofreq, freqtoaud} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard freq = audtofreq(erb,'erb'); ltfat/inst/auditory/gammatonefir.m0000664000175000017500000001265712612404256017245 0ustar susnaksusnakfunction b=gammatonefir(fc,fs,varargin); %-*- texinfo -*- %@deftypefn {Function} gammatonefir %@verbatim %GAMMATONEFIR Gammatone filter coefficients % Usage: b = gammatonefir(fc,fs,n,betamul); % b = gammatonefir(fc,fs,n); % b = gammatonefir(fc,fs); % % Input parameters: % fc : center frequency in Hz. % fs : sampling rate in Hz. % n : max. filter length. % beta : bandwidth of the filter. % % Output parameters: % b : FIR filters as an cell-array of structs. % % GAMMATONEFIR(fc,fs,n,betamul) computes the filter coefficients of a % digital FIR gammatone filter with length at most n, center % frequency fc, 4th order rising slope, sampling rate fs and % bandwith determined by betamul. The bandwidth beta of each filter % is determined as betamul times AUDFILTBW of the center frequency % of corresponding filter. The actual length of the inpulse response % depends on fc (the filter is longer for low center frequencies), % fs and betamul but it is never bigger than n. % % GAMMATONEFIR(fc,fs,n) will do the same but choose a filter bandwidth % according to Glasberg and Moore (1990). betamul is choosen to be 1.0183. % % GAMMATONEFIR(fc,fs) will do as above and choose a sufficiently long % filter to accurately represent the lowest subband channel. % % If fc is a vector, each entry of fc is considered as one center % frequency, and the corresponding coefficients are returned as column % vectors in the output. % % The inpulse response of the gammatone filter is given by % % g(t) = a*t^(4-1)*cos(2*pi*fc*t)*exp(-2*pi*beta*t) % % The gammatone filters as implemented by this function generate % complex valued output, because the filters are modulated by the % exponential function. Using real on the output will give the % coefficients of the corresponding cosine modulated filters. % % To create the filter coefficients of a 1-erb spaced filter bank using % gammatone filters use the following construction: % % g = gammatonefir(erbspacebw(flow,fhigh),fs); % % % % References: % A. Aertsen and P. Johannesma. Spectro-temporal receptive fields of % auditory neurons in the grassfrog. I. Characterization of tonal and % natural stimuli. Biol. Cybern, 38:223-234, 1980. % % B. R. Glasberg and B. Moore. Derivation of auditory filter shapes from % notched-noise data. Hearing Research, 47(1-2):103, 1990. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/gammatonefir.html} %@seealso{erbspace, audspace, audfiltbw, demo_auditoryfilterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % ------ Checking of input parameters --------- if nargin<2 error('Too few input arguments.'); end; if ~isnumeric(fs) || ~isscalar(fs) || fs<=0 error('%s: fs must be a positive scalar.',upper(mfilename)); end; if ~isnumeric(fc) || ~isvector(fc) || any(fc<0) || any(fc>fs/2) error(['%s: fc must be a vector of positive values that are less than half ' ... 'the sampling rate.'],upper(mfilename)); end; definput.import={'normalize'}; definput.importdefaults={'null'}; definput.flags.real={'complex','real'}; definput.keyvals.n=[]; definput.flags.phase={'causalphase','peakphase'}; definput.keyvals.betamul=1.0183; [flags,keyvals,n,betamul] = ltfatarghelper({'n','betamul'},definput,varargin); nchannels = length(fc); % ourbeta is used in order not to mask the beta function. ourbeta = betamul*audfiltbw(fc); if isempty(n) % Calculate a good value for n % FIXME actually do this n=5000; end; b=cell(nchannels,1); for ii = 1:nchannels delay = 3/(2*pi*ourbeta(ii)); scalconst = 2*(2*pi*ourbeta(ii))^4/factorial(4-1)/fs; nfirst = ceil(fs*delay); if nfirst>n/2 error(['%s: The desired filter length is too short to accomodate the ' ... 'beginning of the filter. Please choose a filter length of ' ... 'at least %i samples.'],upper(mfilename),nfirst*2); end; nlast = floor(n/2); t=[(0:nfirst-1)/fs-nfirst/fs+delay,(0:nlast-1)/fs+delay].'; % g(t) = a*t^(n-1)*cos(2*pi*fc*t)*exp(-2*pi*beta*t) if flags.do_real bwork = scalconst*t.^(4-1).*cos(2*pi*fc(ii)*t).*exp(-2*pi* ... ourbeta(ii)*t); else bwork = scalconst*t.^(4-1).*exp(2*pi*i*fc(ii)*t).*exp(-2*pi* ... ourbeta(ii)*t); end; if flags.do_peakphase bwork=bwork*exp(-2*pi*i*fc(ii)*delay); end; % Insert zeros before the start of the signal. %bwork = fftshift([bwork(1:nlast);zeros(n-nlast-nfirst,1);bwork(nlast+1:nlast+nfirst)]); bwork = normalize(bwork,flags.norm); b{ii} = struct('h',bwork,'offset',-nfirst,'realonly',0); end; ltfat/inst/auditory/auditoryinit.m0000664000175000017500000000164612612404256017314 0ustar susnaksusnakstatus=1; %-*- texinfo -*- %@deftypefn {Function} auditoryinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/auditoryinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/auditory/Contents.m0000664000175000017500000000346012612404256016361 0ustar susnaksusnak% LTFAT - Simple auditory processing % % Peter L. Soendergaard, 2011 - 2015 % % Plots % SEMIAUDPLOT - 2D plot on auditory scale. % % Auditory scales % AUDTOFREQ - Auditory unit to frequency conversion. % FREQTOAUD - Frequency to auditory unit conversion. % AUDSPACE - Auditory unit spaced vector % AUDSPACEBW - Auditory unit spaced vector by equal bandwidth. % ERBTOFREQ - Erb scale to frequency conversion. % FREQTOERB - Frequency to erb scale conversion. % ERBSPACE - Equidistant points on the erb scale. % ERBSPACEBW - Equidistant points by equal bandwidth. % AUDFILTBW - Bandwidth of audiory filters. % % Range compression % RANGECOMPRESS - Compress range of signal (mu-law etc). % RANGEEXPAND - Expand range of signal. % % Auditory filters % GAMMATONEFIR - Gammatone FIR approximation. % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % Url: http://ltfat.github.io/doc/auditory/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/auditory/audspace.m0000664000175000017500000000505012612404256016346 0ustar susnaksusnakfunction [y,bw] = audspace(flow,fhigh,n,varargin) %-*- texinfo -*- %@deftypefn {Function} audspace %@verbatim %AUDSPACE Equidistantly spaced points on auditory scale % Usage: y=audspace(flow,fhigh,n,scale); % % AUDSPACE(flow,fhigh,n,scale) computes a vector of length n* % containing values equidistantly scaled on the selected auditory scale % between the frequencies flow and fhigh. All frequencies are % specified in Hz. % % See the help on FREQTOAUD to get a list of the supported values of the % scale parameter. % % [y,bw]=AUDSPACE(...) does the same but outputs the bandwidth between % each sample measured on the selected scale. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/audspace.html} %@seealso{freqtoaud, audspacebw, audfiltbw} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard %% ------ Checking of input parameters --------- if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; % Default parameters. if ~isnumeric(flow) || ~isscalar(flow) error('%s: flow must be a scalar.',upper(mfilename)); end; if ~isnumeric(fhigh) || ~isscalar(fhigh) error('%s: fhigh must be a scalar.',upper(mfilename)); end; if ~isnumeric(n) || ~isscalar(n) || n<=0 || fix(n)~=n error('%s: n must be a positive, integer scalar.',upper(mfilename)); end; if flow>fhigh error('%s: flow must be less than or equal to fhigh.',upper(mfilename)); end; definput.import={'freqtoaud'}; [flags,kv]=ltfatarghelper({},definput,varargin); %% ------ Computation -------------------------- audlimits = freqtoaud([flow,fhigh],flags.audscale); y = audtofreq(linspace(audlimits(1),audlimits(2),n),flags.audscale); bw=(audlimits(2)-audlimits(1))/(n-1); % Set the endpoints to be exactly what the user specified, instead of the % calculated values y(1)=flow; y(end)=fhigh; ltfat/inst/auditory/audspacebw.m0000664000175000017500000000707612612404256016711 0ustar susnaksusnakfunction [y,n] = audspacebw(flow,fhigh,varargin) %-*- texinfo -*- %@deftypefn {Function} audspacebw %@verbatim %AUDSPACEBW Auditory scale points specified by bandwidth % Usage: y=audspacebw(flow,fhigh,bw,hitme); % y=audspacebw(flow,fhigh,bw); % y=audspacebw(flow,fhigh); % [y,n]=audspacebw(...); % % AUDSPACEBW(flow,fhigh,bw,scale) computes a vector containing values % equistantly scaled between frequencies flow and fhigh on the % selected auditory scale. All frequencies are specified in Hz.The % distance between two consecutive values is bw on the selected scale, % and the points will be centered on the scale between flow and fhigh. % % See the help on FREQTOAUD to get a list of the supported values of the % scale parameter. % % AUDSPACEBW(flow,fhigh,bw,hitme,scale) will do as above, but one of % the points is quaranteed to be the frequency hitme. % % [y,n]=AUDSPACEBW(...) additionally returns the number of points n in % the output vector y. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/audspacebw.html} %@seealso{freqtoaud, audspace, audfiltbw} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % ------ Checking of input parameters --------- if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isnumeric(flow) || ~isscalar(flow) || flow<0 error('%s: flow must be a non-negative scalar.',upper(mfilename)); end; if ~isnumeric(fhigh) || ~isscalar(fhigh) || fhigh<0 error('%s: fhigh must be a non-negative scalar.',upper(mfilename)); end; if flow>fhigh error('%s: flow must be less than or equal to fhigh.',upper(mfilename)); end; definput.import={'freqtoaud'}; definput.keyvals.hitme=[]; definput.keyvals.bw=1; [flags,kv,bw]=ltfatarghelper({'bw','hitme'},definput,varargin); if ~isnumeric(bw) || ~isscalar(bw) || bw<=0 error('%s: bw must be a positive scalar.',upper(mfilename)); end; %% ------ Computation -------------------------- if isempty(kv.hitme) % Convert the frequency limits to auds. audlimits = freqtoaud([flow,fhigh],flags.audscale); audrange = audlimits(2)-audlimits(1); % Calculate number of points, excluding final point n = floor(audrange/bw); % The remainder is calculated in order to center the points % correctly between flow and fhigh. remainder = audrange-n*bw; audpoints = audlimits(1)+(0:n)*bw+remainder/2; % Add the final point n=n+1; else % Convert the frequency limits to auds. audlimits = freqtoaud([flow,fhigh,kv.hitme],flags.audscale); audrangelow = audlimits(3)-audlimits(1); audrangehigh = audlimits(2)-audlimits(3); % Calculate number of points, exluding final point. nlow = floor(audrangelow/bw); nhigh = floor(audrangehigh/bw); audpoints=(-nlow:nhigh)*bw+audlimits(3); n=nlow+nhigh+1; end; y = audtofreq(audpoints,flags.audscale); ltfat/inst/auditory/freqtoaud.m0000664000175000017500000001232112612404256016552 0ustar susnaksusnakfunction aud = freqtoaud(freq,varargin); %-*- texinfo -*- %@deftypefn {Function} freqtoaud %@verbatim %FREQTOAUD Converts frequencies (Hz) to auditory scale units % Usage: aud = freqtoaud(freq,scale); % % FREQTOAUD(freq,scale) converts values on the frequency scale (measured % in Hz) to values on the selected auditory scale. The value of the % parameter scale determines the auditory scale: % % 'erb' A distance of 1 erb is equal to the equivalent rectangular % bandwidth of the auditory filters at that point on the % frequency scale. The scale is normalized such that 0 erbs % corresponds to 0 Hz. The width of the auditory filters were % determined by a notched-noise experiment. The erb scale is % defined in Glasberg and Moore (1990). This is the default. % % 'mel' The mel scale is a perceptual scale of pitches judged by % listeners to be equal in distance from one another. The % reference point between this scale and normal frequency % measurement is defined by equating a 1000 Hz tone, 40 dB above % the listener's threshold, with a pitch of 1000 mels. % The mel-scale is defined in Stevens et. al (1937). % % 'mel1000' Alternative definition of the mel scale using a break % frequency of 1000 Hz. This scale was reported in Fant (1968). % % 'bark' The bark-scale is originally defined in Zwicker (1961). A % distance of 1 on the bark scale is known as a critical % band. The implementation provided in this function is % described in Traunmuller (1990). % % 'erb83' This is the original defintion of the erb scale given in % Moore. et al. (1983). % % 'freq' Return the frequency in Hz. % % If no flag is given, the erb-scale will be selected. % % % References: % S. Stevens, J. Volkmann, and E. Newman. A scale for the measurement of % the psychological magnitude pitch. J. Acoust. Soc. Am., 8:185, 1937. % % E. Zwicker. Subdivision of the audible frequency range into critical % bands (frequenzgruppen). J. Acoust. Soc. Am., 33(2):248-248, 1961. % [1]http ] % % G. Fant. Analysis and synthesis of speech processes. In B. Malmberg, % editor, Manual of phonetics. North-Holland, 1968. % % B. R. Glasberg and B. Moore. Derivation of auditory filter shapes from % notched-noise data. Hearing Research, 47(1-2):103, 1990. % % H. Traunmuller. Analytical expressions for the tonotopic sensory scale. % J. Acoust. Soc. Am., 88:97, 1990. % % B. Moore and B. Glasberg. Suggested formulae for calculating % auditory-filter bandwidths and excitation patterns. J. Acoust. Soc. % Am., 74:750, 1983. % % References % % 1. http://link.aip.org/link/?JAS/33/248/1 % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/auditory/freqtoaud.html} %@seealso{freqtoaud, audspace, audfiltbw} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard %% ------ Checking of input parameters --------- if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isnumeric(freq) error('%s: freq must be number.',upper(mfilename)); end; definput.import={'freqtoaud'}; [flags,kv]=ltfatarghelper({},definput,varargin); %% ------ Computation -------------------------- if flags.do_mel aud = 1000/log(17/7)*sign(freq).*log(1+abs(freq)/700); end; if flags.do_mel1000 aud = 1000/log(2)*sign(freq).*log(1+abs(freq)/1000); end; if flags.do_erb % There is a round-off error in the Glasberg & Moore paper, as % 1000/(24.7*4.37)*log(10) = 21.332 and not 21.4 as they state. % The error is tiny, but may be confusing. % On page 37 of the paper, there is Fortran code with yet another set % of constants: % 2302.6/(24.673*4.368)*log10(1+freq*0.004368); aud = 9.2645*sign(freq).*log(1+abs(freq)*0.00437); end; if flags.do_bark % The bark scale seems to have several different approximations available. % This one was found through http://www.ling.su.se/STAFF/hartmut/bark.htm aud = sign(freq).*((26.81./(1+1960./abs(freq)))-0.53); % The one below was found on Wikipedia. %aud = 13*atan(0.00076*freq)+3.5*atan((freq/7500).^2); end; if flags.do_erb83 aud = sign(freq).*(11.17*log((abs(freq)+312)./(abs(freq)+14675))+43.0); end; if flags.do_freq aud = freq; end; if flags.do_log10 aud = log10(freq); end if flags.do_semitone aud = log10(freq); end ltfat/inst/Contents.m0000664000175000017500000000314512612404256014521 0ustar susnaksusnak% LTFAT - Base routines % % Peter L. Soendergaard, 2009 - 2015. % % Basic routines % LTFATSTART - Start the toolbox % LTFATSTOP - Stop the toolbox % LTFATHELP - Help % LTFATMEX - Compile Mex/Oct interfaces % LTFATBASEPATH - Return the base path % ISOCTAVE - True if interpreter is Octave % % Parameter handling % LTFATARGHELPER - Handle optional parameters of functions % LTFATGETDEFAULTS - Get the default values for a function % LTFATSETDEFAULTS - Get the default values for a function % SCALARDISTRIBUTE - Expand parameters to common size % % Graphical user interfaces % MULACLAB - Short Time-Fourier transform modification in Matlab % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % Url: http://ltfat.github.io/doc/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/isoctave.m0000664000175000017500000000240512612404256014537 0ustar susnaksusnakfunction t=isoctave() %-*- texinfo -*- %@deftypefn {Function} isoctave %@verbatim %ISOCTAVE True if the operating environment is octave % Usage: t=isoctave(); % % ISOCTAVE returns 1 if the operating environment is Octave, otherwise % it returns 0 (Matlab) %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/isoctave.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: NA % REFERENCE: NA persistent inout; if isempty(inout), inout = exist('OCTAVE_VERSION','builtin') ~= 0; end; t = inout; ltfat/inst/ltfatgetdefaults.m0000664000175000017500000000255512612404256016272 0ustar susnaksusnakfunction d=ltfatgetdefaults(fname) %-*- texinfo -*- %@deftypefn {Function} ltfatgetdefaults %@verbatim %LTFATGETDEFAULTS Get default parameters of function % % LTFATGETDEFAULTS(fname) returns the default parameters % of the function fname as a cell array. % % LTFATGETDEFAULTS('all') returns all the set defaults. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/ltfatgetdefaults.html} %@seealso{ltfatsetdefaults, ltfatstart} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<1 error('%s: Too few input arguments',upper(mfilename)); end; if strcmpi(fname,'all') d=ltfatarghelper('all'); else d=ltfatarghelper('get',fname); end; ltfat/inst/comp/0000775000175000017500000000000012612404256013501 5ustar susnaksusnakltfat/inst/comp/comp_framelength_tensor.m0000664000175000017500000000220012612404256020555 0ustar susnaksusnakfunction L=comp_framelength_tensor(F,Ls); %-*- texinfo -*- %@deftypefn {Function} comp_framelength_tensor %@verbatim %COMP_FRAMELENGTH_TENSOR Helper function for the Tensor frame % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_framelength_tensor.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(['For the tensor product frame, call framelength for the ', ... 'individual subframes']); ltfat/inst/comp/arg_firwin.m0000664000175000017500000000260512612404256016011 0ustar susnaksusnakfunction definput=arg_firwin(definput) definput.flags.wintype={ 'hanning','hann','sine','cosine', ... 'sqrthann','hamming', 'square','rect', ... 'tria','bartlett', ... 'triangular','sqrttria','blackman','blackman2', ... 'nuttall','nuttall10','nuttall01','nuttall20', ... 'nuttall11','nuttall03', 'nuttall12','nuttall21', ... 'nuttall30', 'ogg','itersine'}; %-*- texinfo -*- %@deftypefn {Function} arg_firwin %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_firwin.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_idgt.m0000664000175000017500000000525312612404256015631 0ustar susnaksusnakfunction f=comp_idgt(coef,g,a,lt,phasetype,algns) %-*- texinfo -*- %@deftypefn {Function} comp_idgt %@verbatim %COMP_IDGT Compute IDGT % Usage: f=comp_idgt(c,g,a,lt,phasetype); % % Input parameters: % c : Array of coefficients. % g : Window function. % a : Length of time shift. % lt : Lattice type % phasetype : Type of phase % Output parameters: % f : Signal. % % Value of the algorithm chooser % % algns=0 : Choose the fastest algorithm % % algns=0 : Always choose multi-win % % algns=1 : Always choose shear %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. M=size(coef,1); N=size(coef,2); W=size(coef,3); L=N*a; if lt(2)==1 f = comp_isepdgt(coef,g,L,a,M,phasetype); else if (algns==1) || (algns==0 && lt(2)<=2) % FIXME : Calls non-comp function if phasetype==1 coef=phaseunlock(coef,a,'lt',lt); end; % ----- algorithm starts here, split into sub-lattices --------------- mwin=comp_nonsepwin2multi(g,a,M,lt,L); % phase factor correction (backwards), for more information see % analysis routine E = exp(2*pi*i*a*kron(0:N/lt(2)-1,ones(1,lt(2))).*... rem(kron(ones(1,N/lt(2)), 0:lt(2)-1)*lt(1),lt(2))/M); coef=bsxfun(@times,coef,E); % simple algorithm: split into sublattices and add the result from each % sublattice. f=zeros(L,W,assert_classname(coef,g)); for ii=0:lt(2)-1 % Extract sublattice sub=coef(:,ii+1:lt(2):end,:); f=f+comp_idgt(sub,mwin(:,ii+1),lt(2)*a,[0 1],0,0); end; else g=fir2long(g,L); [s0,s1,br] = shearfind(L,a,M,lt); f=comp_inonsepdgt_shear(coef,g,a,s0,s1,br); end; end; ltfat/inst/comp/comp_iwfbt.m0000664000175000017500000000552012612404256016012 0ustar susnaksusnakfunction f=comp_iwfbt(c,wtNodes,outLens,rangeLoc,rangeOut,ext) %-*- texinfo -*- %@deftypefn {Function} comp_iwfbt %@verbatim %COMP_IWFBT Compute Inverse Wavelet Filter-Bank Tree % Usage: f=comp_iwfbt(c,wtNodes,outLens,rangeLoc,rangeOut,ext) % % Input parameters: % c : Coefficients stored in the cell array. % wtNodes : Filterbank tree nodes (elementary filterbanks) in % reverse BF order. Length nodeNo cell array of structures. % outLens : Output lengths of each node. Length nodeNo array. % rangeLoc : Idxs of each node inputs. Length nodeNo % cell array of vectors. % rangeOut : Input subband idxs of each node inputs. % ext : Type of the forward transform boundary handling. % % Output parameters: % f : Reconstructed outLens(end)*W array. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_iwfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Do non-expansve transform if ext='per' doPer = strcmp(ext,'per'); ca = {}; % Go over all nodes in breadth-first order for jj=1:length(wtNodes) % Node filters to a cell array % gCell = cellfun(@(gEl) conj(flipud(gEl.h(:))),wtNodes{jj}.g(:),'UniformOutput',0); gCell = cellfun(@(gEl) gEl.h(:),wtNodes{jj}.g(:),'UniformOutput',0); % Node filters subs. factors a = wtNodes{jj}.a; % Node filters initial skips if(doPer) % offset = cellfun(@(gEl) 1-numel(gEl.h)-gEl.offset,wtNodes{jj}.g(:)); offset = cellfun(@(gEl) gEl.offset,wtNodes{jj}.g(:)); else offset = -(a-1); end filtNo = numel(gCell); % Prepare input cell-array catmp = cell(filtNo,1); % Read data from subbands catmp(rangeLoc{jj}) = c(rangeOut{jj}); diffRange = 1:filtNo; diffRange(rangeLoc{jj}) = []; % Read data from intermediate outputs (filters are taken in reverse order) catmp(diffRange(end:-1:1)) = ca(1:numel(diffRange)); %Run filterbank catmp = comp_ifilterbank_td(catmp,gCell,a,outLens(jj),offset,ext); %Save intermediate output ca = [ca(numel(diffRange)+1:end);catmp]; end f = catmp; ltfat/inst/comp/assert_sigreshape_pre.m0000664000175000017500000000533612612404256020247 0ustar susnaksusnakfunction [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,callfun) %-*- texinfo -*- %@deftypefn {Function} assert_sigreshape_pre %@verbatim %ASSERT_SIGRESHAPE_PRE Preprocess and handle dimension input. % % Input parameters: % f : signal, possibly ND-array % L : L parameter % dim : dim parameter % callfun : Name of calling function % Output parameters: % f : Input signal as matrix % L : Verified L % Ls : Length of signal along dimension to be processed % W : Number of transforms to do. % dim : Verified dim % permutedsize : pass to assert_sigreshape_post % order : pass to assert_sigreshape_post %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/assert_sigreshape_pre.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if ~isnumeric(f) error('%s: The input must be numeric.',callfun); end; D=ndims(f); % Dummy assignment. order=1; if isempty(dim) dim=1; if sum(size(f)>1)==1 % We have a vector, find the dimension where it lives. dim=find(size(f)>1); end; else if (numel(dim)~=1 || ~isnumeric(dim)) error('%s: dim must be a scalar.',callfun); end; if rem(dim,1)~=0 error('%s: dim must be an integer.',callfun); end; if (dim<1) || (dim>D) error('%s: dim must be in the range from 1 to %d.',callfun,D); end; end; if (numel(L)>1 || ~isnumeric(L)) error('%s: L must be a scalar.',callfun); end; if (~isempty(L) && rem(L,1)~=0) error('%s: L must be an integer.',callfun); end; if dim>1 order=[dim, 1:dim-1,dim+1:D]; % Put the desired dimension first. f=permute(f,order); end; Ls=size(f,1); % If L is empty it is set to be the length of the transform. if isempty(L) L=Ls; end; % Remember the exact size for later and modify it for the new length permutedsize=size(f); permutedsize(1)=L; % Reshape f to a matrix. if ~isempty(f) f=reshape(f,size(f,1),numel(f)/size(f,1)); end; W=size(f,2); ltfat/inst/comp/comp_gfeigs.m0000664000175000017500000000337612612404256016152 0ustar susnaksusnakfunction lambdas=comp_gfeigs(gf,L,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_gfeigs %@verbatim %COMP_GFEIGS_SEP % Usage: lambdas=comp_gfeigs(gf,a,M); % % Compute Eigenvalues of a Gabor frame operator in % the separable case. % % This is a computational routine, do not call it directly. % % See help on GFBOUNDS %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_gfeigs.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. LR=prod(size(gf)); R=LR/L; b=L/M; N=L/a; c=gcd(a,M); d=gcd(b,N); p=b/d; q=N/d; % Initialize eigenvalues AF=Inf; BF=0; % Holds subsubmatrix. C=zeros(p,q*R,assert_classname(gf)); lambdas=zeros(p,c*d,assert_classname(gf)); % Iterate through all the subsubmatrices. for k=0:c*d-1 % Extract p x q*R matrix of array. C(:)=gf(:,k+1); % Get eigenvalues of 'squared' subsubmatrix. lambdas(:,1+k)=eig(C*C'); end; % Clean eigenvalues, they are real, and % scale them correctly. lambdas=real(lambdas); % Reshape and sort. lambdas=sort(lambdas(:)); ltfat/inst/comp/comp_ifilterbank_td.m0000664000175000017500000000444112612404256017661 0ustar susnaksusnakfunction f=comp_ifilterbank_td(c,g,a,Ls,offset,ext) %-*- texinfo -*- %@deftypefn {Function} comp_ifilterbank_td %@verbatim %COMP_IFILTERBANK_TD Synthesis filterbank by conv2 % Usage: f=comp_ifilterbank_td(c,g,a,Ls,skip,ext); % % Input parameters: % c : Cell array of length M, each element is N(m)*W matrix. % g : Filterbank filters - length M cell-array, each element is vector of length filtLen(m) % a : Upsampling factors - array of length M. % skip : Delay of the filters - scalar or array of length M. % Ls : Output length. % ext : Border exension technique. % % Output parameters: % f : Output Ls*W array. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_ifilterbank_td.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %input channel number W=size(c{1},2); %filter number M=numel(g); %length of filters filtLen = cellfun(@(x) numel(x),g(:)); skip = -(1-filtLen-offset(:)); % Allow filter delay only in the filter support range if(any(skip(:)>=filtLen) || any(skip)<0) error('%s: The filter zero index position outside of the filter support.', upper(mfilename)); end if(numel(skip)==1) skip = skip*ones(M,1); end % Output memory allocation f=zeros(Ls,W,assert_classname(c{1},g{1})); if(~strcmp(ext,'per')) ext = 'zero'; end skipOut = a(:).*(filtLen-1)+skip(:); % W channels are done simultaneously for m=1:M cext = comp_extBoundary(c{m},filtLen(m)-1,ext,'dim',1); ftmp = conv2(conj(flipud(g{m}(:))),comp_ups(cext,a(m))); f = f + ftmp(1+skipOut(m):Ls+skipOut(m),:); end ltfat/inst/comp/comp_idgt_long.m0000664000175000017500000000422312612404256016644 0ustar susnaksusnakfunction f=comp_idgt_long(coef,g,L,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_idgt_long %@verbatim %COMP_IDGT_FAC Full-window factorization of a Gabor matrix. % Usage: f=comp_idgt_long(c,g,L,a,M) % % Input parameters: % c : M x N x W array of coefficients. % g : Window. % a : Length of time shift. % M : Number of frequency shifts. % Output parameters: % f : Reconstructed signal. % % Do not call this function directly, use IDGT. % This function does not check input parameters! % % If input is a matrix, the transformation is applied to % each column. % % This function does not handle multidimensional data, take care before % you call it. % % References: % T. Strohmer. Numerical algorithms for discrete Gabor expansions. In % H. G. Feichtinger and T. Strohmer, editors, Gabor Analysis and % Algorithms, chapter 8, pages 267-294. Birkhauser, Boston, 1998. % % P. L. Soendergaard. An efficient algorithm for the discrete Gabor % transform using full length windows. IEEE Signal Process. Letters, % submitted for publication, 2007. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idgt_long.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % Get the factorization of the window. gf = comp_wfac(g,a,M); % Call the computational subroutine. f = comp_idgt_fac(coef,gf,L,a,M); ltfat/inst/comp/arg_fwt.m0000664000175000017500000000206212612404256015310 0ustar susnaksusnakfunction definput = arg_fwt(definput) %-*- texinfo -*- %@deftypefn {Function} arg_fwt %@verbatim %definput.flags.ext= {'per','zpd','sym','symw','asym','asymw','ppd','sp0'}; %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_fwt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . definput.flags.ext = {'per','zero','even','odd'}; ltfat/inst/comp/comp_fourierwindow.m0000664000175000017500000001213212612404256017577 0ustar susnaksusnakfunction [g,info] = comp_fourierwindow(g,L,callfun); %-*- texinfo -*- %@deftypefn {Function} comp_fourierwindow %@verbatim %COMP_FOURIERWINDOW Compute the window from numeric, text or cell array. % Usage: [g,info] = comp_fourierwindow(g,L,callfun); % % [g,info]=COMP_FOURIERWINDOW(g,L,callfun) will compute the window % from a text description or a cell array containing additional % parameters. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_fourierwindow.html} %@seealso{gabwin, wilwin} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Basic discovery: Some windows depend on L, and some windows help define % L, so the calculation of L is window dependant. % Default values. info.gauss=0; info.isfir=0; % Manually get the list of window names definput=arg_firwin(struct); firwinnames = definput.flags.wintype; % Create window if string was given as input. if ischar(g) winname=lower(g); switch(winname) case {'pgauss','gauss'} complain_L(L,callfun); g=comp_pgauss(L,1,0,0); info.gauss=1; info.tfr=1; case {'psech','sech'} complain_L(L,callfun); g=psech(L,1); info.tfr=1; otherwise error('%s: Unknown window type: %s',callfun,winname); end; end; if iscell(g) if isempty(g) || ~ischar(g{1}) error('First element of window cell array must be a character string.'); end; winname=lower(g{1}); switch(winname) case {'pgauss','gauss'} complain_L(L,callfun); [g,info.tfr]=pgauss(L,g{2:end}); info.gauss=1; case {'psech','sech'} complain_L(L,callfun); [g,info.tfr]=psech(L,g{2:end}); case firwinnames g=firwin(winname,g{2:end}); info.isfir=1; otherwise error('Unsupported window type.'); end; end; if isnumeric(g) % The DGT window format to struct with .h field format if size(g,2)>1 if size(g,1)>1 error('%s: g must be a vector',callfun); else % g was a row vector. g=g(:); end; end; g_time=g; g=struct(); g.h=fftshift(g_time); info.gl=numel(g_time); g.offset=-floor(info.gl/2); g.fc=0; g.realonly=0; info.wasreal=isreal(g.h); % And continue processing this since it becomes a FIR filter. end if isstruct(g) if isfield(g,'h') && isnumeric(g.h) && isvector(g.h) info.wasreal=isreal(g.h); info.gl=length(g.h); info.isfir=1; % g.h was a row vector if size(g.h,2)>1 g.h = g.h(:); end % In case a filter lacks .offset, treat it as if it was % a zero delay FIR window. if ~isfield(g,'offset') g.h=fftshift(g.h); g.offset=-floor(info.gl/2); end elseif isfield(g,'H') && ... ( isnumeric(g.H) && isvector(g.H) || isa(g.H,'function_handle') ) info.wasreal=isfield(g,'realonly') && g.realonly; info.gl=[]; % g.H was a row vector if size(g.H,2)>1 g.H = g.H(:); end % In case a filter lacks .foff, make a low-pass filter of it. if ~isfield(g,'foff') g.foff= @(L) 0; end if isa(g.H,'function_handle') if ~isa(g.foff,'function_handle') error('%s: g.foff should be a function handle.',... callfun); end elseif isnumeric(g.H) if ~isfield(g,'L') error('%s: .H is numeric, but g.L was not defined.',... callfun); end end else error(['%s: The struct. defining a filter must contain ',... 'either .h (numeric vector) or .H (numeric vector, ',... 'anonymous fcn) fields.'],callfun); end; else % We can probably never get here % Information to be determined post creation. info.wasreal = isreal(g); info.gl = length(g); if (~isempty(L) && (info.gl. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % FIXME: Not sufficiently safe in the case where there is only one % channel, or when attempting to specify a uniform filterbank with % fractional downsampling. % info.isfractional=0; info.isuniform=0; % Sanity checks % All numers in a must be integers if ~isnumeric(a) || any(a(:)<=0) error('%s: All subsampling factors must be positive.',upper(mfilename)); end % Avoid a being scalar if M>1 if isscalar(a) a = a*ones(M,1); end % One filter expect a to be a single value or a 2 element row vector if M==1 && (size(a,1)~=1 || ~any(size(a,2)==[1,2])) error('%s: One channel, but more subsampling factors.',upper(mfilename)); end % .. and sanitize if it is a column vector if M==1 && size(a,2)==1 a = [a,1]; end % Two filters can have [a1,a2],[a1;a2], [a1,a1;a2,a2] if M==2 && ~any(size(a)==2) error('%s: Bad format of a.',upper(mfilename)); end % .. and sanitize if M==2 && isvector(a) a = [a(:),ones(numel(a),1)]; end % In another configuration, there is no confusion % e.g. for M = 3, a can be: % a = [a1,a2,a3] % a = [a1;a2;a3] % a = [a1,a1;a2,a2;a3,a3]; % Make column vector if M>2 && isvector(a) a = a(:); end if isvector(a) && M~=1 && size(a,2)<2 if numel(a)~=M error(['%s: The number of entries in "a" must match the number of ' ... 'filters.'],upper(mfilename)); end if all(a==a(1)) info.isuniform=1; end; a=[a,ones(M,1)]; else if size(a,2)>2 error(['%s: Bad format of a.'],upper(mfilename)); end % We need to check against the case where this routine has already % been run if isequal(a(:,2),ones(M,1)) if all(a(:,1)==a(1)) info.isuniform=1; end; else info.isfractional=1; end; % If the filterbank uses fractional downsampling, it cannot be % treated by the uniform algorithms, even though the sampling rate is uniform. % FIXME: Fractional, uniform filterbanks are not handled, they are % not allowed. end; info.a=a; ltfat/inst/comp/comp_frsyn_fusion.m0000664000175000017500000000227012612404256017422 0ustar susnaksusnakfunction outsig=comp_frsyn_fusion(F,insig) W=size(insig,2); L=size(insig,1)/framered(F); outsig=zeros(L,W); idx=0; for ii=1:F.Nframes coeflen=L*framered(F.frames{ii}); outsig=outsig+frsyn(F.frames{ii},insig(idx+1:idx+coeflen,:))*F.w(ii); idx=idx+coeflen; end; %-*- texinfo -*- %@deftypefn {Function} comp_frsyn_fusion %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_frsyn_fusion.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_painlessfilterbank.m0000664000175000017500000000372312612404256020562 0ustar susnaksusnakfunction gout = comp_painlessfilterbank(g,a,L,type,do_real) %-*- texinfo -*- %@deftypefn {Function} comp_painlessfilterbank %@verbatim %COMP_PAINLESSFILTERBANK % % Function computes filterbank dual or tight frame for the painless case. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_painlessfilterbank.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . M = numel(g); F = comp_filterbankresponse(g,a,L,do_real); % inf here ensures FIR filters will stay FIR g = comp_filterbank_pre(g,a,L,inf); if strcmpi(type,'tight') F = sqrt(F); elseif strcmpi(type,'dual') % Do nothing else %Fail error('%s: Internal error. Unrecognized frame type.',upper(mfilename)); end gout=cell(1,M); for m=1:M thisgd=struct(); if isfield(g{m},'H') H=circshift(comp_transferfunction(g{m},L)./F,-g{m}.foff); thisgd.H=H(1:numel(g{m}.H)); thisgd.foff=g{m}.foff; thisgd.realonly=0; thisgd.delay=0; thisgd.L = L; elseif isfield(g{m},'h') H=comp_transferfunction(g{m},L)./F; thisgd = ifft(H); end gout{m}=thisgd; end; % Convert appropriate filters to structs with .h fields. gId = cellfun(@(gEl) isfield(gEl,'h'),g); if any(gId) gout(gId) = filterbankwin(gout(gId),a(gId)); end ltfat/inst/comp/arg_ltfattranslate.m0000664000175000017500000000223312612404256017540 0ustar susnaksusnakfunction definput=arg_ltfattranslate(definput) definput.keyvals.frequency='Frequency'; definput.keyvals.time='Time'; definput.keyvals.samples='samples'; definput.keyvals.normalized='normalized'; definput.keyvals.magnitude='Magnitude'; %-*- texinfo -*- %@deftypefn {Function} arg_ltfattranslate %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_ltfattranslate.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_dgtreal_ola.m0000664000175000017500000000437012612404256017156 0ustar susnaksusnakfunction coef=comp_dgtreal_ola(f,g,a,M,Lb,phasetype) %-*- texinfo -*- %@deftypefn {Function} comp_dgtreal_ola %@verbatim % % This function implements periodic convolution using overlap-add. The % window g is supposed to be extended by fir2iir. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dgtreal_ola.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . [L W]=size(f); gl=length(g); N=L/a; M2=floor(M/2)+1; % Length of extended block and padded g Lext=Lb+gl; % Number of blocks Nb=L/Lb; % Number of time positions per block Nblock = Lb/a; if rem(Nblock,1)~=0 error('The length of the time shift must devide the block length.'); end; % Number of time positions in half extension b2 = gl/2/a; if rem(b2,1)~=0 error(['The length of the time shift must devide the window length by ' ... 'an even number.']) end; % Extend window to length of extended block. gpad=fir2long(g,Lext); coef=zeros(M2,N,W,assert_classname(f,g)); for ii=0:Nb-1 block=comp_sepdgtreal(postpad(f(ii*Lb+1:(ii+1)*Lb,:),Lext),gpad,a,M,phasetype); % Large block coef(:,ii*Nblock+1:(ii+1)*Nblock,:) = coef(:,ii*Nblock+1:(ii+1)*Nblock,:)+block(:,1:Nblock,:); % Small block + s_ii=mod(ii+1,Nb); coef(:,s_ii*Nblock+1 :s_ii*Nblock+b2,:) = coef(:,s_ii*Nblock+1 ... :s_ii*Nblock+b2,:)+ block(:,Nblock+1:Nblock+b2,:); % Small block - s_ii=mod(ii-1,Nb)+1; coef(:,s_ii*Nblock-b2+1:s_ii*Nblock,:) =coef(:,s_ii*Nblock-b2+1:s_ii*Nblock,:)+ block(:,Nblock+b2+1:Nblock+2*b2,:); end; ltfat/inst/comp/comp_idgtreal_fb.m0000664000175000017500000000723712612404256017150 0ustar susnaksusnakfunction [f]=comp_idgtreal_fb(coef,g,L,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_idgtreal_fb %@verbatim %COMP_IDGT_FB Filter bank IDGT. % Usage: f=comp_idgt_fb(c,g,L,a,M); % % This is a computational routine. Do not call it directly. % % Input must be in the M x N*W format, so the N and W dimension is % combined. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idgtreal_fb.html} %@seealso{idgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK % Calculate the parameters that was not specified. N=L/a; b=L/M; %W=size(coef,2)/N; W = size(coef,3); N=L/a; b=L/M; gl=length(g); glh=floor(gl/2); % gl-half %if ndims(coef)>2 % error('Reshape to M2 x N*W'); %end; % Apply ifft to the coefficients. coef=ifftreal(coef,M)*sqrt(M); %coef=reshape(coef,M,N,W); % The fftshift actually makes some things easier. g=fftshift(g); f=zeros(L,W,assert_classname(coef,g)); % Make multicolumn g by replication. gw=repmat(g,1,W); ff=zeros(gl,1,assert_classname(coef,g)); % Rotate the coefficients, duplicate them until they have same % length as g, and multiply by g. for w=1:W % ----- Handle the first boundary using periodic boundary conditions. --- for n=0:ceil(glh/a)-1 delay=mod(-n*a+glh,M); for ii=0:gl/M-1 for m=0:delay-1 ff(m+ii*M+1)=coef(M-delay+m+1,n+1,w)*g(m+ii*M+1); end; for m=0:M-delay-1 ff(m+ii*M+delay+1)=coef(m+1,n+1,w)*g(m+delay+ii*M+1); end; end; sp=mod(n*a-glh,L); ep=mod(n*a-glh+gl-1,L); % Add the ff vector to f at position sp. for ii=0:L-sp-1 f(sp+ii+1,w)=f(sp+ii+1,w)+ff(1+ii); end; for ii=0:ep f(1+ii,w)=f(1+ii,w)+ff(L-sp+1+ii); end; end; % ----- Handle the middle case. --------------------- for n=ceil(glh/a):floor((L-ceil(gl/2))/a) delay=mod(-n*a+glh,M); for ii=0:gl/M-1 for m=0:delay-1 ff(m+ii*M+1)=coef(M-delay+m+1,n+1,w)*g(m+ii*M+1); end; for m=0:M-delay-1 ff(m+ii*M+delay+1)=coef(m+1,n+1,w)*g(m+delay+ii*M+1); end; end; sp=mod(n*a-glh,L); ep=mod(n*a-glh+gl-1,L); % Add the ff vector to f at position sp. for ii=0:ep-sp f(ii+sp+1,w)=f(ii+sp+1,w)+ff(ii+1); end; end; % ----- Handle the last boundary using periodic boundary conditions. --- % This n is one-indexed, to avoid to many +1 for n=floor((L-ceil(gl/2))/a)+1:N-1 delay=mod(-n*a+glh,M); for ii=0:gl/M-1 for m=0:delay-1 ff(m+ii*M+1)=coef(M-delay+m+1,n+1,w)*g(m+ii*M+1); end; for m=0:M-delay-1 ff(m+ii*M+delay+1)=coef(m+1,n+1,w)*g(m+delay+ii*M+1); end; end; sp=mod(n*a-glh,L); ep=mod(n*a-glh+gl-1,L); % Add the ff vector to f at position sp. for ii=0:L-sp-1 f(sp+ii+1,w)=f(sp+ii+1,w)+ff(1+ii); end; for ii=0:ep f(1+ii,w)=f(1+ii,w)+ff(L-sp+1+ii); end; end; end; % Scale correctly. f=sqrt(M)*f; ltfat/inst/comp/comp_idwiltiv.m0000664000175000017500000000345212612404256016534 0ustar susnaksusnakfunction [coef2]=comp_idwiltiv(coef,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_idwiltiv %@verbatim %COMP_IDWILTIV Compute Inverse discrete Wilson transform type IV. % % This is a computational routine. Do not call it % directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idwiltiv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard N=size(coef,1)/M; W=size(coef,2); L=N*a; coef=reshape(coef,M,N,W); coef2=zeros(2*M,N,W,assert_classname(coef)); coef2(1:2:M,1:2:N,:) = exp(i*pi/4)/sqrt(2)*coef(1:2:M,1:2:N,:); coef2(2*M:-2:M+1,1:2:N,:) = exp(i*pi*3/4)/sqrt(2)*coef(1:2:M,1:2:N,:); coef2(1:2:M,2:2:N,:) = exp(-i*pi/4)/sqrt(2)*coef(1:2:M,2:2:N,:); coef2(2*M:-2:M+1,2:2:N,:) = exp(-i*pi*3/4)/sqrt(2)*coef(1:2:M,2:2:N,:); coef2(2:2:M,1:2:N,:) = exp(-i*pi/4)/sqrt(2)*coef(2:2:M,1:2:N,:); coef2(2*M-1:-2:M+1,1:2:N,:) = exp(-i*pi*3/4)/sqrt(2)*coef(2:2:M,1:2:N,:); coef2(2:2:M,2:2:N,:) = exp(i*pi/4)/sqrt(2)*coef(2:2:M,2:2:N,:); coef2(2*M-1:-2:M+1,2:2:N,:) = exp(i*pi*3/4)/sqrt(2)*coef(2:2:M,2:2:N,:); ltfat/inst/comp/comp_idgtreal_long.m0000664000175000017500000000435712612404256017520 0ustar susnaksusnakfunction f=comp_idgtreal_long(coef,g,L,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_idgtreal_long %@verbatim %COMP_IDGTREAL_FAC Full-window factorization of a Gabor matrix assuming. % Usage: f=comp_idgtreal_long(c,g,L,a,M) % % Input parameters: % c : M x N x W array of coefficients. % g : window (from facgabm). % a : Length of time shift. % M : Number of frequency shifts. % Output parameters: % f : Reconstructed signal. % % Do not call this function directly, use IDGT. % This function does not check input parameters! % % If input is a matrix, the transformation is applied to % each column. % % This function does not handle multidimensional data, take care before % you call it. % % References: % T. Strohmer. Numerical algorithms for discrete Gabor expansions. In % H. G. Feichtinger and T. Strohmer, editors, Gabor Analysis and % Algorithms, chapter 8, pages 267-294. Birkhauser, Boston, 1998. % % P. L. Soendergaard. An efficient algorithm for the discrete Gabor % transform using full length windows. IEEE Signal Process. Letters, % submitted for publication, 2007. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idgtreal_long.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK % Get the factorization of the window. gf = comp_wfac(g,a,M); % Call the computational subroutine. f = comp_idgtreal_fac(coef,gf,L,a,M); ltfat/inst/comp/complainif_toomanyargs.m0000664000175000017500000000213412612404256020423 0ustar susnaksusnakfunction complainif_toomanyargs(fnargin,limit,callfun) if nargin<3 callfun = mfilename; end if fnargin>limit error('%s: Too many input arguments.',upper(callfun)); end %-*- texinfo -*- %@deftypefn {Function} complainif_toomanyargs %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/complainif_toomanyargs.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_wpfbtscale.m0000664000175000017500000000377212612404256017040 0ustar susnaksusnakfunction wt = comp_wpfbtscale(wt,interscaling) %-*- texinfo -*- %@deftypefn {Function} comp_wpfbtscale %@verbatim %COMP_WPFBTSCALE Scale filters in the filterbank tree %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_wpfbtscale.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Here we handle scaling of intermediate outputs in the tree if ~strcmpi(interscaling,'intnoscale') if strcmp('intscale',interscaling) interscalingfac = 1/2; elseif strcmp('intsqrt',interscaling) interscalingfac = 1/sqrt(2); end wtPath = nodeBForder(0,wt); rangeLoc = nodesLocOutRange(wtPath,wt); wtNodes = wt.nodes(wtPath); for ii=1:numel(wtPath) range = 1:numel(wtNodes{ii}.h); % Remove the outputs which are terminal range(rangeLoc{ii}) = []; wtNodes{ii}.h(range) = ... cellfun(@(hEl) setfield(hEl,'h',hEl.h*interscalingfac),... wtNodes{ii}.h(range),... 'UniformOutput',0); wtNodes{ii}.g(range) = ... cellfun(@(hEl) setfield(hEl,'h',hEl.h*interscalingfac),... wtNodes{ii}.g(range),... 'UniformOutput',0); end % Write the scaled ones back wt.nodes(wtPath) = wtNodes; end ltfat/inst/comp/comp_dgt.m0000664000175000017500000000467312612404256015465 0ustar susnaksusnakfunction c=comp_dgt(f,g,a,M,lt,phasetype,algfir,algns) %-*- texinfo -*- %@deftypefn {Function} comp_dgt %@verbatim %COMP_DGT Compute a DGT % Usage: c=comp_dgt(f,g,a,M,L,phasetype); % % Input parameters: % f : Input data % g : Window function. % a : Length of time shift. % M : Number of modulations. % L : Length of transform to do. % lt : Lattice type % phasetype : Type of phase % algtype : Select algorithm % Output parameters: % c : M*N*W array of coefficients. % % If phasetype is zero, a freq-invariant transform is computed. If % phase-type is one, a time-invariant transform is computed. % % The algorithm chooser do the following: % % algfir=0 : Default value, automatically choose the fastest % algorithm. % % algfir=1 : Choose the algorithm depending on the input. % % algns=0 : Default value, automatically choose the fastest % algorithm. % % algns=1 : Always choose multiwindow. % % algns=2 : Always choose shear %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK L=size(f,1); if lt(2)==1 c=comp_sepdgt(f,g,a,M,phasetype); else g=fir2long(g,L); if (algns==0 && lt(2)<=2) || (algns==1) c=comp_nonsepdgt_multi(f,g,a,M,lt); else [s0,s1,br] = shearfind(L,a,M,lt); c=comp_nonsepdgt_shear(f,g,a,M,s0,s1,br); end; % FIXME : Calls non-comp function if phasetype==1 c=phaselock(c,a,'lt',lt); end; end; ltfat/inst/comp/comp_fwt.m0000664000175000017500000000603412612404256015500 0ustar susnaksusnakfunction c = comp_fwt(f,h,a,J,ext) %-*- texinfo -*- %@deftypefn {Function} comp_fwt %@verbatim %COMP_FWT Compute DWT using FWT % Usage: c=comp_fwt(f,h,J,a,Lc,ext); % % Input parameters: % f : Input data - L*W array. % h : Analysis Wavelet filters - cell-array of length filtNo. % J : Number of filterbank iterations. % a : Subsampling factors - array of length filtNo. % ext : 'per','zero','even','odd' Type of the forward transform boundary handling. % % Output parameters: % c : Cell array of length M. Each element is Lc(m)*W array. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_fwt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % This could be removed with some effort. The question is, are there such % wavelet filters? If your filterbank has different subsampling factors following the first two filters, please send a feature request. assert(a(1)==a(2),'First two elements of *a* are not equal. Such wavelet filterbank is not suported.'); % Time-reversed, complex conjugate impulse responses. filtNo = length(h); %hCell = cellfun(@(hEl) conj(flipud(hEl.h(:))),h,'UniformOutput',0); hCell = cellfun(@(hEl) hEl.h(:),h,'UniformOutput',0); if(strcmp(ext,'per')) % Initial shift of the filter to compensate for it's delay. % "Zero" delay transform is produced % offset = cellfun(@(hEl) 1-numel(hEl.h)-hEl.offset,h); offset = cellfun(@(hEl) hEl.offset,h); elseif strcmp(ext,'valid') offset = -cellfun(@(hEl) numel(hEl.h)-1,h); else % No compensation for the filter delay (filters are made causal with respect to the output sequences). % This creates relative shift between levels of coefficients. % Initial shift determines type of subsampling. % This is even subsampling. e.g. subs. [1,2,3,4,5,6] by a factor 3 becomes [3,6] % The number of output coefficients depends on it. offset = -(a-1); % For odd subsampling skip = 0; but it requires slight touches % elsewhere. end M = (filtNo-1)*J+1; c = cell(M,1); runPtr = M-filtNo+2; ctmp = f; for jj=1:J % Run filterbank ctmp = comp_filterbank_td(ctmp,hCell,a,offset,ext); % Bookkeeping c(runPtr:runPtr+filtNo-2) = ctmp(2:end); ctmp = ctmp{1}; runPtr = runPtr - (filtNo - 1); end % Save final approximation coefficients c{1} = ctmp; ltfat/inst/comp/comp_filterbankphasegrad.m0000664000175000017500000000274512612404256020705 0ustar susnaksusnakfunction [tgrad,fgrad,s] = comp_filterbankphasegrad(c,ch,cd,L,minlvl) %-*- texinfo -*- %@deftypefn {Function} comp_filterbankphasegrad %@verbatim % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_filterbankphasegrad.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Compute spectrogram and % remove small values because we need to divide by cs temp = cell2mat(c); minlvl = minlvl*max(abs(temp(:)).^2); s = cellfun(@(x) max(abs(x).^2,minlvl),c,'UniformOutput',false); % Compute instantaneous frequency tgrad=cellfun(@(x,y,z) real(x.*conj(y)./z)/L*2,cd,c,s,'UniformOutput',false); % Limit tgrad = cellfun(@(fEl) fEl.*(abs(fEl)<=2) ,tgrad,'UniformOutput',0); % Compute group delay fgrad=cellfun(@(x,y,z) imag(x.*conj(y)./z),ch,c,s,'UniformOutput',false); ltfat/inst/comp/comp_inonsepdgt_shear.m0000664000175000017500000000726112612404256020237 0ustar susnaksusnakfunction f=comp_inonsepdgt_shear(coef,g,a,s0,s1,br) %-*- texinfo -*- %@deftypefn {Function} comp_inonsepdgt_shear %@verbatim %COMP_INONSEPDGT_SHEAR Compute IDGT % Usage: f=comp_inonsepdgt_shear(c,g,a,lt,phasetype); % % Input parameters: % c : Array of coefficients. % g : Window function. % a : Length of time shift. % s0,s1,br : shearfind parameters % Output parameters: % f : Signal. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_inonsepdgt_shear.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . M=size(coef,1); N=size(coef,2); W=size(coef,3); L=N*a; b=L/M; ar = a*b/br; Mr = L/br; Nr = L/ar; ind = [ar 0; 0 br]*[kron((0:L/ar-1),ones(1,L/br));kron(ones(1,L/ar), ... (0:L/br-1))]; phs = reshape(mod((s1*(ind(1,:)-s0*ind(2,:)).^2+s0*ind(2,:).^2)*(L+1) ... -2*(s0 ~= 0)*ind(1,:).*ind(2,:),2*L),L/br,L/ar); phs = exp(-pi*1i*phs/L); ind_final = [1 0;-s1 1]*[1 -s0;0 1]*ind; ind_final = mod(ind_final,L); if s1 ~= 0 g = comp_pchirp(L,s1).*g; end if s0 == 0 c_rect = zeros(Mr,Nr,W,assert_classname(coef,g)); if 0 for w=0:W-1 c_rect(ind(2,:)/br+1+(ind(1,:)/ar)*Mr+w*M*N) = ... coef(floor(ind_final(2,:)/b)+1+(ind_final(1,:)/a)*M+w*M*N); c_rect(:,:,w+1) = phs.*c_rect(:,:,w+1); end; else tmp1=mod(s1*a*(L+1),2*N); for k=0:Nr-1 phsidx= mod(mod(tmp1*k,2*N)*k,2*N); for m=0:Mr-1 phs = exp(-pi*1i*phsidx/N); idx1 = mod( k ,N); idx2 = floor(mod(-s1*k*a+m*b,L)/b); for w=0:W-1 c_rect(m+1,k+1,w+1) = coef(idx2+1,idx1+1,w+1).*phs; end; end; end; end; f = comp_idgt(c_rect,g,ar,[0 1],0,0); else c_rect = zeros(Nr,Mr,W,assert_classname(coef,g)); p = comp_pchirp(L,-s0); g = p.*fft(g); twoN=2*N; cc1=ar/a; cc2=mod(-s0*br/a,twoN); cc3=mod(a*s1*(L+1),twoN); cc4=mod(cc2*br*(L+1),twoN); cc5=mod(2*cc1*br,twoN); cc6=mod((s0*s1+1)*br,L); for k=0:Nr-1 for m=0:Mr-1 sq1=mod(k*cc1+cc2*m,twoN); phsidx = mod(mod(cc3*sq1.^2,twoN)-mod(m*(cc4*m+k*cc5),twoN),twoN); phs = exp(-pi*1i*phsidx/N); idx1 = mod( k*cc1 +cc2*m,N); idx2 = floor(mod(-s1*k*ar+(s0*s1+1)*m*br,L)/b); for w=0:W-1 c_rect(mod(-k,Nr)+1,m+1,w+1) = coef(idx2+1,idx1+1,w+1).*phs; end; end; end; f = comp_idgt(c_rect,g,br,[0 1],0,0); f = ifft(bsxfun(@times,comp_pchirp(L,s0),f)); end if s1 ~= 0 f = bsxfun(@times,comp_pchirp(L,-s1),f); end ltfat/inst/comp/comp_ifilterbank_fft.m0000664000175000017500000000236412612404256020033 0ustar susnaksusnakfunction F = comp_ifilterbank_fft(c,G,a) %-*- texinfo -*- %@deftypefn {Function} comp_ifilterbank_fft %@verbatim %COMP_IFILTERBANK_FFT Compute filtering in FD % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_ifilterbank_fft.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . W = size(c{1},2); M = numel(G); L = numel(G{1}); F = zeros(L,W,assert_classname(c{1},G{1})); for m=1:M for w=1:W % This repmat cannot be replaced by bsxfun F(:,w)=F(:,w)+repmat(fft(c{m}(:,w)),a(m),1).*conj(G{m}); end; end ltfat/inst/comp/block_interface.m0000664000175000017500000001133212612404256016771 0ustar susnaksusnakfunction varargout = block_interface(varargin) %-*- texinfo -*- %@deftypefn {Function} block_interface %@verbatim %BLOCK_INTERFACE Common block processing backend % % Object-like interface for sharing data between block handling % functions. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/block_interface.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end % Persistent data persistent pos; persistent datapos; % Second data pointer persistent pageNo; persistent sourceName; persistent maxBufCount; persistent pageList; persistent playChanList; persistent recChanList; persistent skipCounter; persistent classid; persistent toPlayBlock; persistent anaOverlap; persistent synOverlap; persistent dispLoad; persistent Ls; persistent Fs; persistent loop; % DEFAULTS persistent bufLen; persistent outFile; persistent offline; command = varargin{1}; switch command case {'reset','clearAll'} pos = 0; datapos = 0; sourceName = []; maxBufCount = 3; pageList = []; playChanList = []; recChanList = []; pageNo = 0; skipCounter = 0; classid = 'double'; anaOverlap = []; synOverlap = []; toPlayBlock = []; dispLoad = 1; loop = 0; Ls = -1; bufLen = 1024; outFile = []; offline = 0; Fs = 0; %% SETTERS %%% case 'setLs' Ls = varargin{2}; case 'setFs' Fs = varargin{2}; case 'setOutFile' outFile = varargin{2}; case 'setOffline' offline = varargin{2}; case 'setPos' pos = varargin{2}; case 'setDatapos' datapos = varargin{2}; case 'setBufCount' maxBufCount = varargin{2}; case 'setPlayChanList' playChanList = varargin{2}; case 'setRecChanList' recChanList = varargin{2}; case 'setPageNo' pos = varargin{2}; case 'setSkipped' skipCounter = varargin{2}; case 'setBufLen' bufLen = varargin{2}; case 'setClassId' classid = varargin{2}; case 'setAnaOverlap' anaOverlap = varargin{2}; case 'setSynOverlap' synOverlap = varargin{2}; case 'setDispLoad' dispLoad = varargin{2}; case 'setToPlay' toPlayBlock=varargin{2}; case 'setIsLoop' loop = varargin{2}; case 'setSource' sourceName = varargin{2}; %% GETTERS %%% case 'getLs' varargout{1}=Ls; case 'getFs' varargout{1}=Fs; case 'getOutFile' varargout{1}=outFile; case 'getOffline' varargout{1}=offline; case 'getPos' varargout{1}=pos; case 'getDatapos' varargout{1}=datapos; case 'getBufCount' varargout{1}= maxBufCount; case 'getPlayChanList' varargout{1}=playChanList; case 'getRecChanList' varargout{1}=recChanList; case 'getPageList' varargout{1}=pageList; case 'getPageNo' varargout{1}=pageNo; case 'getSkipped' varargout{1}=skipCounter; case 'getBufLen' varargout{1}=bufLen; case 'getClassId' varargout{1}=classid; case 'getAnaOverlap' varargout{1}=anaOverlap; case 'getSynOverlap' varargout{1}=synOverlap; case 'getDispLoad' varargout{1}=dispLoad; case 'getToPlay' varargout{1}=toPlayBlock; toPlayBlock = []; case 'getIsLoop' varargout{1}=loop; case 'getSource' if isnumeric(sourceName) varargout{1}='numeric'; else varargout{1}=sourceName; end case 'getEnqBufCount' varargout{1}= numel(pageList); %% OTHER %%% case 'incPageNo' pageNo = pageNo +1; case 'flushBuffers' anaOverlap = []; synOverlap = []; case 'popPage' varargout{1}=pageList(1); pageList = pageList(2:end); case 'pushPage' pageList = [pageList, varargin{2}]; % case 'incSkipped' % skipCounter = skipCounter + varargin{2}; % case 'readNumericBlock' % L = varargin{2}; % varargout{1}=sourceName(pos+1:pos+1+L,:); otherwise error('%s: Unrecognized command.',upper(mfilename)); end ltfat/inst/comp/comp_sepdgtreal.m0000664000175000017500000000327012612404256017031 0ustar susnaksusnakfunction [coef]=comp_sepdgtreal(f,g,a,M,phasetype) %-*- texinfo -*- %@deftypefn {Function} comp_sepdgtreal %@verbatim %COMP_SEPDGTREAL Filter bank DGT % Usage: c=comp_sepdgtreal(f,g,a,M); % % This is a computational routine. Do not call it directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_sepdgtreal.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % See help on DGT. % AUTHOR : Peter L. Soendergaard. L=size(f,1); Lwindow=size(g,1); if Lwindow. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. gf=comp_wfac(g,a,M); % Compute the window application cout=comp_dgt_walnut(f,gf,a,M); % Apply dft modulation. cout=fft(cout)/sqrt(M); % Change to the right shape L=size(f,1); W=size(f,2); N=L/a; cout=reshape(cout,M,N,W); ltfat/inst/comp/comp_dwilt.m0000664000175000017500000000454412612404256016027 0ustar susnaksusnakfunction [coef]=comp_dwilt(f,g,M) %-*- texinfo -*- %@deftypefn {Function} comp_dwilt %@verbatim %COMP_DWILT Compute Discrete Wilson transform. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dwilt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L = size(f,1); a=M; N=L/a; W=size(f,2); coef=zeros(2*M,N/2,W,assert_classname(f,g)); coef2=comp_sepdgt(f,g,a,2*M,0); if (isreal(f) && isreal(g)) % If the input coefficients are real, the calculations can be % be simplified. The complex case code also works for the real case. % Unmodulated case. coef(1,:,:)=coef2(1,1:2:N,:); % cosine, first column. coef(3:2:M,:,:)=sqrt(2)*real(coef2(3:2:M,1:2:N,:)); % sine, second column coef(M+3:2:2*M,:,:)=-sqrt(2)*imag(coef2(3:2:M,2:2:N,:)); % sine, first column. coef(2:2:M,:,:)=-sqrt(2)*imag(coef2(2:2:M,1:2:N,:)); % cosine, second column coef(M+2:2:2*M,:,:)=sqrt(2)*real(coef2(2:2:M,2:2:N,:)); % Nyquest case if mod(M,2)==0 coef(M+1,:,:) = coef2(M+1,1:2:N,:); else coef(M+1,:,:) = coef2(M+1,2:2:N,:); end; else % Complex valued case % Unmodulated case. coef(1,:,:)=coef2(1,1:2:N,:); % odd value of m coef(2:2:M,:,:)=1/sqrt(2)*i*(coef2(2:2:M,1:2:N,:)-coef2(2*M:-2:M+2,1:2:N,:)); coef(M+2:2:2*M,:,:)=1/sqrt(2)*(coef2(2:2:M,2:2:N,:)+coef2(2*M:-2:M+2,2:2:N,:)); % even value of m coef(3:2:M,:,:)=1/sqrt(2)*(coef2(3:2:M,1:2:N,:)+coef2(2*M-1:-2:M+2,1:2:N,:)); coef(M+3:2:2*M,:,:)=1/sqrt(2)*i*(coef2(3:2:M,2:2:N,:)-coef2(2*M-1:-2:M+2,2:2:N,:)); % Nyquest case if mod(M,2)==0 coef(M+1,:,:) = coef2(M+1,1:2:N,:); else coef(M+1,:,:) = coef2(M+1,2:2:N,:); end; end; ltfat/inst/comp/arg_fwtext.m0000664000175000017500000000207312612404256016033 0ustar susnaksusnakfunction definput = arg_fwtext(definput) %-*- texinfo -*- %@deftypefn {Function} arg_fwtext %@verbatim %definput.flags.ext= {'per','zpd','sym','symw','asym','asymw','ppd','sp0'}; %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_fwtext.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . definput.flags.ext = {'per','zero','even','odd'}; ltfat/inst/comp/comp_gabmixdual_fac.m0000664000175000017500000000367412612404256017635 0ustar susnaksusnakfunction gammaf=comp_gabmixdual_fac(gf1,gf2,L,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_gabmixdual_fac %@verbatim %COMP_GABMIXDUAL_FAC Computes factorization of mix-dual. % Usage: gammaf=comp_gabmixdual_fac(gf1,gf2,a,M) % % Input parameters: % gf1 : Factorization of first window % gf2 : Factorization of second window % L : Length of window. % a : Length of time shift. % M : Number of channels. % % Output parameters: % gammaf : Factorization of mix-dual % % GAMMAF is a factorization of a dual window of gf1 % % This function does not verify input parameters, call % GABMIXDUAL instead % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_gabmixdual_fac.html} %@seealso{gabmixdual, comp_fac, compute_ifac} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK LR=prod(size(gf1)); R=LR/L; b=L/M; N=L/a; c=gcd(a,M); d=gcd(b,N); p=b/d; q=N/d; gammaf=zeros(p*q*R,c*d,assert_classname(gf1,gf2)); G1=zeros(p,q*R,assert_classname(gf1,gf2)); G2=zeros(p,q*R,assert_classname(gf1,gf2)); for ii=1:c*d G1(:)=gf1(:,ii); G2(:)=gf2(:,ii); S=G2*G1'; Gpinv=M*S\G2; gammaf(:,ii)=Gpinv(:); end; ltfat/inst/comp/compinit.m0000664000175000017500000000163212612404256015503 0ustar susnaksusnakstatus=2; %-*- texinfo -*- %@deftypefn {Function} compinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/compinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_dwiltiv.m0000664000175000017500000000315212612404256016360 0ustar susnaksusnakfunction [coef]=comp_dwiltiv(coef2,a) %-*- texinfo -*- %@deftypefn {Function} comp_dwiltiv %@verbatim %COMP_DWILTIV Compute Discrete Wilson transform type IV. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dwiltiv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . M=size(coef2,1)/2; N=size(coef2,2); W=size(coef2,3); L=N*a; coef=zeros(M,N,W,assert_classname(coef2)); % --- m is even --------- coef(1:2:M,1:2:N,:)= 1/sqrt(2)*(exp(-i*pi/4)*coef2(1:2:M,1:2:N,:)+exp(-i*pi*3/4)*coef2(2*M:-2:M+1,1:2:N,:)); coef(1:2:M,2:2:N,:)= 1/sqrt(2)*(exp(i*pi/4)*coef2(1:2:M,2:2:N,:)+exp(i*pi*3/4)*coef2(2*M:-2:M+1,2:2:N,:)); % --- m is odd ---------- coef(2:2:M,1:2:N,:)= 1/sqrt(2)*(exp(i*pi/4)*coef2(2:2:M,1:2:N,:)+exp(i*pi*3/4)*coef2(2*M-1:-2:M+1,1:2:N,:)); coef(2:2:M,2:2:N,:)= 1/sqrt(2)*(exp(-i*pi/4)*coef2(2:2:M,2:2:N,:)+exp(-i*pi*3/4)*coef2(2*M-1:-2:M+1,2:2:N,:)); coef=reshape(coef,M*N,W); ltfat/inst/comp/comp_idgt_fac.m0000664000175000017500000000712112612404256016436 0ustar susnaksusnakfunction f=comp_idgt_fac(coef,gf,L,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_idgt_fac %@verbatim %COMP_IDGT_FAC Full-window factorization of a Gabor matrix. % Usage: f=comp_idgt_fac(c,g,a,M) % % Input parameters: % c : M x N array of coefficients. % gf : Factorization of window (from facgabm). % a : Length of time shift. % M : Number of frequency shifts. % Output parameters: % f : Reconstructed signal. % % Do not call this function directly, use IDGT. % This function does not check input parameters! % % If input is a matrix, the transformation is applied to % each column. % % This function does not handle multidimensional data, take care before % you call it. % % References: % T. Strohmer. Numerical algorithms for discrete Gabor expansions. In % H. G. Feichtinger and T. Strohmer, editors, Gabor Analysis and % Algorithms, chapter 8, pages 267-294. Birkhauser, Boston, 1998. % % P. L. Soendergaard. An efficient algorithm for the discrete Gabor % transform using full length windows. IEEE Signal Process. Letters, % submitted for publication, 2007. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idgt_fac.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK % Calculate the parameters that was not specified. N=L/a; b=L/M; R=prod(size(gf))/L; W=prod(size(coef))/(M*N*R); N=L/a; b=L/M; [c,h_a,h_m]=gcd(a,M); h_a=-h_a; p=a/c; q=M/c; d=N/q; ff=zeros(p,q*W,c,d,assert_classname(coef,gf)); C=zeros(q*R,q*W,c,d,assert_classname(coef,gf)); f=zeros(L,W,assert_classname(coef,gf)); % Apply ifft to the coefficients. %coef=ifft(reshape(coef,M,N*W))*sqrt(M); coef=ifft(coef)*sqrt(M); % Set up the small matrices coef=reshape(coef,M,N,R,W); if p==1 for rw=0:R-1 for w=0:W-1 for s=0:d-1 for l=0:q-1 for u=0:q-1 C(u+1+rw*q,l+1+w*q,:,s+1)=coef((1:c)+l*c,mod(u+s*q+l,N)+1,rw+1,w+1); end; end; end; end; end; else % Rational oversampling for rw=0:R-1 for w=0:W-1 for s=0:d-1 for l=0:q-1 for u=0:q-1 C(u+1+rw*q,l+1+w*q,:,s+1)=coef((1:c)+l*c,mod(u+s*q-l*h_a,N)+1,rw+1,w+1); end; end; end; end; end; end; % FFT them if d>1 C=fft(C,[],4); end; % Multiply them for r=0:c-1 for s=0:d-1 CM=reshape(C(:,:,r+1,s+1),q*R,q*W); GM=reshape(gf(:,r+s*c+1),p,q*R); ff(:,:,r+1,s+1)=GM*CM; end; end; % Inverse FFT if d>1 ff=ifft(ff,[],4); end; % Place the result if p==1 for s=0:d-1 for w=0:W-1 for l=0:q-1 f((1:c)+mod(s*M+l*a,L),w+1)=reshape(ff(1,l+1+w*q,:,s+1),c,1); end; end; end; else % Rational oversampling for w=0:W-1 for s=0:d-1 for l=0:q-1 for k=0:p-1 f((1:c)+mod(k*M+s*p*M-l*h_a*a,L),w+1)=reshape(ff(k+1,l+1+w*q,:,s+1),c,1); end; end; end; end; end; ltfat/inst/comp/comp_edgt6.m0000664000175000017500000000214412612404256015707 0ustar susnaksusnakfunction cout=comp_edgt6(cin,a) %-*- texinfo -*- %@deftypefn {Function} comp_edgt6 %@verbatim %COMP_EDGT6 Compute Even DGT type 6 % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_edgt6.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . M=size(cin,1); N=size(cin,2)/2; W=size(cin,3); cout=zeros(M,N,W,assert_classname(cin)); cout=cin(:,1:N,:); cout=reshape(cout,M*N,W); ltfat/inst/comp/arg_freqtoaud.m0000664000175000017500000000204412612404256016502 0ustar susnaksusnakfunction definput=arg_freqtoaud(definput) definput.flags.audscale={'erb','mel','mel1000','bark','erb83','freq','log10','semitone'}; %-*- texinfo -*- %@deftypefn {Function} arg_freqtoaud %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_freqtoaud.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_isepdgtreal.m0000664000175000017500000000363512612404256017207 0ustar susnaksusnakfunction [f]=comp_isepdgtreal(coef,g,L,a,M,phasetype) %-*- texinfo -*- %@deftypefn {Function} comp_isepdgtreal %@verbatim %COMP_ISEPDGTREAL Separable IDGT. % Usage: f=comp_isepdgtreal(c,g,L,a,M); % % This is a computational routine. Do not call it directly. % % Input must be in the M x N x W format, so the N and W dimension is % combined. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_isepdgtreal.html} %@seealso{idgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK Lwindow=size(g,1); if phasetype==1 % Change from time-invariant phase convention to a % frequency-invariant one b=L/M; M2=floor(M/2)+1; N=size(coef,2); %M2short=ceil(M/2); TimeInd = (0:(N-1))/N; FreqInd = (0:(M2-1))*b; phase = FreqInd'*TimeInd; phase = exp(-2*1i*pi*phase); % Handle multisignals coef = bsxfun(@times,coef,phase); end; if L==Lwindow % Do full-window algorithm. % Call the computational subroutine. f = comp_idgtreal_long(coef,g,L,a,M); else % Do filter bank algorithm. % Call the computational subroutine. f = comp_idgtreal_fb(coef,g,L,a,M); end; ltfat/inst/comp/comp_filterbank_td.m0000664000175000017500000000531312612404256017507 0ustar susnaksusnakfunction c=comp_filterbank_td(f,g,a,offset,ext) %-*- texinfo -*- %@deftypefn {Function} comp_filterbank_td %@verbatim %COMP_FILTERBANK_TD Non-uniform filterbank by conv2 % Usage: c=comp_filterbank_td(f,g,a,skip,ext); % % Input parameters: % f : Input data - L*W array. % g : Filterbank filters - length M cell-array of vectors of lengths filtLen(m). % a : Subsampling factors - array of length M. % offset: Offset of the filters - scalar or array of length M. % ext : Border exension technique. % % Output parameters: % c : Cell array of length M. Each element is N(m)*W array. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_filterbank_td.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %input data length L=size(f,1); %input channel number W=size(f,2); %filter number M=numel(g); %filter lengths filtLen = cellfun(@(x) numel(x),g(:)); skip = -offset(:); % Allow filter delay only in the filter support range if any(skip(:)>=filtLen) || any(skip<0) error('%s: The filter zero index position outside of the filter support.', upper(mfilename)); end % Determine output lengths % Lext -- length of the signal after convolution before subsampling % N -- after subsampling if strcmp(ext,'per') Lext = L; N = ceil(Lext./a); elseif strcmp(ext,'valid') Lext = L-(filtLen-1); N = ceil(Lext./a); else Lext = (L+filtLen-1); N = ceil((Lext(:)-skip(:))./a(:)); end N = N(:); Lreq = a(:).*(N-1) + 1; % Output cell allocation c=cell(M,1); % for m=1:M % c{m}=zeros(N(m),W,assert_classname(f)); % end; % Explicitly extend the input. length(fext) = length(f) + 2*(filtLen-1) % CONV2 with 'valid' does 2-D linear convolution and crops (filtLen-1) samples from both ends. % length(fextconv2) = length(f) + (filtLen-1) % length(c{m}) = N(m) % W channels are done simultaneously for m=1:M fext = comp_extBoundary(f,filtLen(m)-1,ext,'dim',1); c{m} = comp_downs(conv2(fext,g{m}(:),'valid'),a(m),skip(m),Lreq(m)); end ltfat/inst/comp/comp_iedgt6.m0000664000175000017500000000240712612404256016062 0ustar susnaksusnakfunction [cout]=comp_iedgt6(cin,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_iedgt6 %@verbatim %COMP_IEDGT6 Compute inverse even DGT type 6 % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_iedgt6.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . N=size(cin,1)/M; W=size(cin,2); L=N*a; cin=reshape(cin,M,N,W); cout=zeros(M,2*N,W,assert_classname(cin)); cout(:,1:N,:)=cin; % Copy the non modulated coefficients. cout(1,N+1:2*N,:)=cin(1,N:-1:1,:); % Copy the modulated coefficients. cout(2:M,N+1:2*N,:)=-cin(M:-1:2,N:-1:1,:); ltfat/inst/comp/comp_nonsepdgtreal_quinqux.m0000664000175000017500000000346012612404256021337 0ustar susnaksusnakfunction c=comp_nonsepdgtreal_quinqux(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_nonsepdgtreal_quinqux %@verbatim %COMP_NONSEPDGTREAL_QUINQUX Compute Non-separable Discrete Gabor transform % Usage: c=comp_nonsepdgtreal_quinqux(f,g,a,M); % % This is a computational subroutine, do not call it directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_nonsepdgtreal_quinqux.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Nicki Holighaus and Peter L. Soendergaard % TESTING: TEST_NONSEPDGT % REFERENCE: REF_NONSEPDGT lt=[1 2]; L=size(f,1); W=size(f,2); N=L/a; M2=floor(M/2)+1; % ----- algorithm starts here, split into sub-lattices --------------- c=zeros(M,N,W,assert_classname(f,g)); mwin=comp_nonsepwin2multi(g,a,M,[1 2],L); % simple algorithm: split into sublattices for ii=0:1 c(:,ii+1:2:end,:)=comp_dgt(f,mwin(:,ii+1),2*a,M,[0 1],0,0,0); end; % Phase factor correction E = zeros(1,N,assert_classname(f,g)); for win=0:1 for n=0:N/2-1 E(win+n*2+1) = exp(-2*pi*i*a*n*rem(win,2)/M); end; end; c=bsxfun(@times,c(1:M2,:,:),E); ltfat/inst/comp/comp_filterbankreassign.m0000664000175000017500000001021712612404256020553 0ustar susnaksusnakfunction [sr,repos] = comp_filterbankreassign(s,tgrad,fgrad,a,cfreq) Lc = cellfun(@numel,s); M = numel(s); oneover2 = 1/2; sr = cell(M,1); cfreq2 = zeros(M,1); for mm = 1:M sr{mm} = zeros(Lc(mm),1); cfreq2(mm) = cfreq(mm) - floor(cfreq(mm)*oneover2)*2; end if nargout>1 chan_pos = [0;cumsum(Lc)]; repos = cell(sum(cellfun(@numel,sr)),1); end %-*- texinfo -*- %@deftypefn {Function} comp_filterbankreassign %@verbatim %% Compute reassigned frequencies and times %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_filterbankreassign.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . for mm = M:-1:1 tgradIdx = zeros(Lc(mm),1); fgradIdx = zeros(Lc(mm),1); cfreqm = cfreq2(mm); for jj = 1:Lc(mm) tgradmjj = tgrad{mm}(jj) + cfreqm; oldtgrad = 10; tgradIdx(jj) = 0; if tgrad{mm}(jj) > 0 pos = mm; for ii = mm:M pos = ii; tmptgrad = cfreq2(ii) - tgradmjj; if tmptgrad >= 0 if abs(tmptgrad) < abs(oldtgrad) tgradIdx(jj) = pos; else tgradIdx(jj) = pos-1; end break; end oldtgrad = tmptgrad; end if pos == M && tmptgrad < 0 for ii = 1:mm pos = ii; tmptgrad = cfreq2(ii) - tgradmjj + 2; if tmptgrad >= 0 if abs(tmptgrad) < abs(oldtgrad) tgradIdx(jj) = pos; else tgradIdx(jj) = pos-1; end break; end oldtgrad = tmptgrad; end end if tgradIdx(jj) < 1 tgradIdx(jj) = M; end else pos = mm; for ii = mm:-1:1 pos = ii; tmptgrad = cfreq2(ii) - tgradmjj; if tmptgrad <= 0 if abs(tmptgrad) < abs(oldtgrad) tgradIdx(jj) = pos; else tgradIdx(jj) = pos+1; end break; end oldtgrad = tmptgrad; end if pos == 1 && tmptgrad > 0 for ii = M:-1:mm pos = ii; tmptgrad = cfreq2(ii) - tgradmjj - 2; if tmptgrad <= 0 if abs(tmptgrad) < abs(oldtgrad) tgradIdx(jj) = pos; else tgradIdx(jj) = pos+1; end break; end oldtgrad = tmptgrad; end end if tgradIdx(jj) >= M+1 tgradIdx(jj) = 1; end end end for jj = 1:Lc(mm) tmpIdx = tgradIdx(jj); fgradIdx(jj) = mod(round((fgrad{mm}(jj) + a(mm)*(jj-1))./a(tmpIdx)),Lc(tmpIdx))+1; end for jj=1:Lc(mm) sr{tgradIdx(jj)}(fgradIdx(jj)) = sr{tgradIdx(jj)}(fgradIdx(jj))+s{mm}(jj); end if nargout>1 for jj=1:Lc(mm) repos{chan_pos(tgradIdx(jj))+fgradIdx(jj)}(end+1,1) = chan_pos(mm)+jj; end end end ltfat/inst/comp/assert_L.m0000664000175000017500000000530512612404256015436 0ustar susnaksusnakfunction [b,N,L]=assert_L(Ls,Lwindow,L,a,M,callfun) %-*- texinfo -*- %@deftypefn {Function} assert_L %@verbatim %ASSERT_L Validate lattice and window size. % Usage: [b,N,L]=assert_L(Ls,Lwindow,L,a,M,callfun); % % Input parameters: % Ls : Length of signal (see below). % Lwindow : Length of window. % L : Specified length of transform (may be []) % a : Length of time shift. % M : Number of modulations. % callfun : Name of calling function. % Output parameters: % b : Length of frequency shift. % N : Number of translations. % L : Transform length. % % Calculate a minimal transform length, or verify a user specified % input length. % % The routine assumes that a and M has already been checked. use % assert_squarelat for this. % % If the window length is not yet determined, it is safe to pass Lwindow=0 %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/assert_L.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if ~isempty(L) if (prod(size(L))~=1 || ~isnumeric(L)) error([callfun,': L must be a scalar']); end; if rem(L,1)~=0 error([callfun,': L must be an integer']); end; end; % Length of window must be dividable by M. if rem(Lwindow,M)~=0 error('%s: Length of window must be dividable by M = %i.',... callfun,M); end; if isempty(L) % Smallest length transform. Lsmallest=lcm(a,M); % Choose a transform length larger than both the length of the % signal and the window. % The ",1" is to always get a transform of at least Lsmallest L=ceil(max([Ls,Lwindow,1])/Lsmallest)*Lsmallest; else if rem(L,M)~=0 error('%s: The length of the transform must be divisable by M = %i',... callfun,M); end; if rem(L,a)~=0 error('%s: The length of the transform must be divisable by a = %i',... callfun,a); end; if L. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_dgtreal_long.m0000664000175000017500000000440312612404256017337 0ustar susnaksusnakfunction cout=comp_dgtreal_long(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_dgtreal_long %@verbatim %COMP_DGTREAL_LONG Full-window factorization of a Gabor matrix. % Usage: c=comp_dgtreal_long(f,g,a,M); % % Input parameters: % f : Factored input data % g : Window % a : Length of time shift. % M : Number of channels. % Output parameters: % c : M x N*W*R array of coefficients, where N=L/a % % Do not call this function directly, use DGT instead. % This function does not check input parameters! % % References: % T. Strohmer. Numerical algorithms for discrete Gabor expansions. In % H. G. Feichtinger and T. Strohmer, editors, Gabor Analysis and % Algorithms, chapter 8, pages 267-294. Birkhauser, Boston, 1998. % % P. L. Soendergaard. An efficient algorithm for the discrete Gabor % transform using full length windows. IEEE Signal Process. Letters, % submitted for publication, 2007. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dgtreal_long.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING : TEST_DGT % REFERENCE : OK L=size(f,1); W=size(f,2); N=L/a; M2=floor(M/2)+1; gf=comp_wfac(g,a,M); % Compute the window application % We know the output is real, but comp_dgt_walnut cannot detect this, so % we force the output to be real. cout=real(comp_dgt_walnut(f,gf,a,M)); % FFT with only positive frequencies cout=fftreal(cout)/sqrt(M); cout=reshape(cout,M2,N,W); ltfat/inst/comp/comp_igdgt.m0000664000175000017500000000410512612404256015773 0ustar susnaksusnakfunction f=comp_igdgt(c,g,a,M,L,c_t,c_f,c_w,timeinv) %-*- texinfo -*- %@deftypefn {Function} comp_igdgt %@verbatim %COMP_IGDGT Compute IGDGT % Usage: f=comp_igdgt(c,g,a,M,L,c_t,c_f,c_w,timeinv); % % Input parameters: % c : Array of coefficients. % g : Window function. % a : Length of time shift. % M : Number of modulations. % L : length of transform. % c_t : Centering in time of modulation. % c_f : Centering in frequency of modulation. % c_w : Centering in time of window. % timeinv : Should we compute a time invariant Gabor system. % % Output parameters: % f : Signal. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_igdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. b=L/M; N=L/a; Lwindow=size(g,1); W=size(c,3); % Pre-process if c_t is different from 0. if (c_t~=0) halfmod=repmat(exp(2*pi*i*c_t*((0:M-1)+c_f).'/M),1,N*W); % The following is necessary because REPMAT does not work for % 3D arrays. halfmod=reshape(halfmod,M,N,W); c=c.*halfmod; end; % Eventual phaselocking if timeinv c=phaseunlock(c,a); end; f=comp_idgt(c,g,a,[0 1],0,0); % Postprocess to handle c_f different from 0. if (c_f~=0) halfmod=exp(2*pi*i*c_f*(0:L-1).'/M); f=f.*repmat(halfmod,1,W); end; ltfat/inst/comp/comp_sepdgt.m0000664000175000017500000000262412612404256016167 0ustar susnaksusnakfunction [coef]=comp_sepdgt(f,g,a,M,phasetype) %-*- texinfo -*- %@deftypefn {Function} comp_sepdgt %@verbatim %COMP_SEPDGT Separable DGT % Usage: c=comp_sepdgt(f,g,a,M); % % This is a computational routine. Do not call it directly. % % See help on DGT. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_sepdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. L=size(f,1); Lwindow=size(g,1); if Lwindow. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Nicki Holighaus % Date: 10.04.13 %% Check input arguments if nargin < 5 dual = 1; if nargin < 3 error('Not enough input arguments'); end end if iscell(c) == 0 % If matrix format coefficients were used, convert to % cell [M,N,CH] = size(c); c = reshape(c,N*M,CH); c = mat2cell(c,M*ones(N,1),CH); else N = length(c); CH = size(c{1},2); M = cellfun(@(x) size(x,1),c); end timepos = cumsum(shift); % Calculate positions from shift vector NN = timepos(end); % Reconstruction length before truncation timepos = timepos-shift(1); % Adjust positions fr = zeros(NN,CH,assert_classname(c{1},g{1})); % Initialize output if nargin < 4 Ls = NN; % If original signal length is not given do not truncate end if dual == 1 % Attempt to compute canonical dual frame g = nsgabdual(g,shift,M,Ls); end %% The overlap-add procedure including multiplication with the synthesis % windows if numel(M) == 1 M = M*ones(N,1); end for ii = 1:N Lg = length(g{ii}); win_range = mod(timepos(ii)+(-floor(Lg/2):ceil(Lg/2)-1),NN)+1; temp = fft(c{ii})*M(ii); temp = temp(mod([end-floor(Lg/2)+1:end,1:ceil(Lg/2)]-1,M(ii))+1,:); fr(win_range,:) = fr(win_range,:) + ... bsxfun(@times,temp,g{ii}([Lg-floor(Lg/2)+1:Lg,1:ceil(Lg/2)])); end fr = ifft(fr); fr = fr(1:Ls,:); % Truncate the signal to original length (if given) ltfat/inst/comp/comp_nonsepdgt_shear.m0000664000175000017500000001026312612404256020062 0ustar susnaksusnakfunction c=comp_nonsepdgt_shear(f,g,a,M,s0,s1,br); %-*- texinfo -*- %@deftypefn {Function} comp_nonsepdgt_shear %@verbatim %COMP_NONSEPDGT_SHEAR Compute Non-separable Discrete Gabor transform % Usage: c=nonsepdgt(f,g,a,M,lt); % % This is a computational subroutine, do not call it directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_nonsepdgt_shear.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Nicki Holighaus and Peter L. Soendergaard % TESTING: TEST_NONSEPDGT % REFERENCE: REF_NONSEPDGT % Assert correct input. L=size(f,1); W=size(f,2); b=L/M; N=L/a; c=zeros(M,N,W,assert_classname(f,g)); ar = a*b/br; Mr = L/br; Nr = L/ar; if s1 ~= 0 p = comp_pchirp(L,s1); g = p.*g; f = bsxfun(@times,p,f); end if s0 == 0 c_rect = comp_dgt_long(f,g,a,M); tmp1=mod(s1*a*(L+1),2*N); for k=0:Nr-1 phsidx= mod(mod(tmp1*k,2*N)*k,2*N); phs = exp(pi*1i*phsidx/N); idx2 = floor(mod(-s1*k*a+(0:Mr-1)*b,L)/b); c(idx2+1,k+1,:) = c_rect(:,k+1,:).*phs; end; else twoN=2*N; cc1=ar/a; cc2=mod(-s0*br/a,twoN); cc3=mod(a*s1*(L+1),twoN); cc4=mod(cc2*br*(L+1),twoN); cc5=mod(2*cc1*br,twoN); cc6=mod((s0*s1+1)*br,L); p = comp_pchirp(L,-s0); g = p.*fft(g)/L; f = bsxfun(@times,p,fft(f)); c_rect = comp_dgt_long(f,g,br,Nr); for k=0:Nr-1 for m=0:Mr-1 sq1=mod(k*cc1+cc2*m,twoN); phsidx = mod(mod(cc3*sq1.^2,twoN)-mod(m*(cc4*m+k*cc5),twoN),twoN); phs = exp(pi*1i*phsidx/N); idx1 = mod( cc1*k+cc2*m,N); idx2 = floor(mod(-s1*ar*k+cc6*m,L)/b); c(idx2+1,idx1+1,:) = c_rect(mod(-k,Nr)+1,m+1,:).*phs; end; end; end; % This is some old code just kept around for historical/documentational % purposes if 0 ind = [ar 0; 0 br]*[kron((0:L/ar-1),ones(1,L/br));kron(ones(1,L/ar), ... (0:L/br-1))]; phs = reshape(mod((s1*(ind(1,:)-s0*ind(2,:)).^2+s0*ind(2,:).^2)*(L+1) ... -2*(s0 ~= 0)*ind(1,:).*ind(2,:),2*L),Mr,Nr); ind_final = [1 0;-s1 1]*[1 -s0;0 1]*ind; phs = exp(pi*1i*phs/L); ind_final = mod(ind_final,L); if s1 ~= 0 g = comp_pchirp(L,s1).*g; f = bsxfun(@times,comp_pchirp(L,s1),f); end if s0 ~= 0 g = comp_pchirp(L,-s0).*fft(g)/L; f = bsxfun(@times,comp_pchirp(L,-s0),fft(f)); c_rect = comp_dgt_long(f,g,br,Nr); for w=0:W-1 c(floor(ind_final(2,:)/b)+1+(ind_final(1,:)/a)*M+w*M*N) = ... c_rect(ind(1,[1:Mr,end:-1:Mr+1])/ar+1+(ind(2,:)/br)*Nr+w*M*N).* ... phs(ind(2,:)/br+1+(ind(1,:)/ar)*Mr); end; else c_rect = comp_dgt_long(f,g,ar,Mr); for w=1:W c_rect(:,:,w) = phs.*c_rect(:,:,w); end; % The code line below this comment executes the commented for-loop % using Fortran indexing. % % for jj = 1:size(ind,2) % c(floor(ind_final(2,jj)/b)+1, ind_final(1,jj)/a+1) = ... % c_rect(ind(2,jj)/br+1, ind(1,jj)/ar+1); % end for w=0:W-1 c(floor(ind_final(2,:)/b)+1+(ind_final(1,:)/a)*M+w*M*N) = ... c_rect(ind(2,:)/br+1+(ind(1,:)/ar)*Mr+w*M*N); end; end; end; ltfat/inst/comp/arg_plotfilterbank.m0000664000175000017500000000217712612404256017537 0ustar susnaksusnakfunction definput=arg_plotfilterbank(definput) definput.keyvals.fc=[]; definput.keyvals.ntickpos=10; definput.keyvals.tick=[]; definput.groups.audtick={'tick',[0,100,250,500,1000,2000,4000,8000,16000,32000]}; %-*- texinfo -*- %@deftypefn {Function} arg_plotfilterbank %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_plotfilterbank.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_idwiltii.m0000664000175000017500000000365112612404256016520 0ustar susnaksusnakfunction [coef2]=comp_idwiltii(coef,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_idwiltii %@verbatim %COMP_IDWILTII Compute Inverse discrete Wilson transform type II % % This is a computational routine. Do not call it % directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idwiltii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard N=size(coef,1)/M; W=size(coef,2); L=N*a; coef=reshape(coef,M*2,N/2,W); coef2=zeros(2*M,N,W,assert_classname(coef)); % First and middle modulation are transferred unchanged. coef2(1,1:2:N,:) = coef(1,:,:); coef2(2:2:M,1:2:N,:) = -i/sqrt(2)*coef(2:2:M,:,:); coef2(2*M:-2:M+2,1:2:N,:) = -i/sqrt(2)*coef(2:2:M,:,:); coef2(2:2:M,2:2:N,:) = 1/sqrt(2)*coef(M+2:2:2*M,:,:); coef2(2*M:-2:M+2,2:2:N,:) = -1/sqrt(2)*coef(M+2:2:2*M,:,:); if M>2 coef2(3:2:M,1:2:N,:) = 1/sqrt(2)*coef(3:2:M,:,:); coef2(2*M-1:-2:M+2,1:2:N,:) = -1/sqrt(2)*coef(3:2:M,:,:); coef2(3:2:M,2:2:N,:) = -i/sqrt(2)*coef(M+3:2:2*M,:,:); coef2(2*M-1:-2:M+2,2:2:N,:) = -i/sqrt(2)*coef(M+3:2:2*M,:,:); end; if mod(M,2)==0 coef2(M+1,2:2:N,:) = -i*coef(M+1,:,:); else coef2(M+1,1:2:N,:) = -i*coef(M+1,:,:); end; ltfat/inst/comp/comp_ufilterbank_td.m0000664000175000017500000000503312612404256017673 0ustar susnaksusnakfunction c=comp_ufilterbank_td(f,g,a,skip,ext) %-*- texinfo -*- %@deftypefn {Function} comp_ufilterbank_td %@verbatim %COMP_UFILTERBANK_TD Uniform filterbank by conv2 % Usage: c=comp_ufilterbank_td(f,g,a,skip,ext); % % Input parameters: % f : Input data - L*W array. % g : Filterbank filters - filtLen*M array. % a : Subsampling factor - scalar. % skip: Delay of the filters - scalar or array of length M. % ext : Border exension technique. % % Output parameters: % c : N*M*W array of coefficients % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_ufilterbank_td.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %input data length L=size(f,1); %input channel number W=size(f,2); %filter number M=size(g,2); %length of filters filtLen = size(g,1); % Allow filter delay only in the filter support range if(all(skip>=filtLen) || all(skip<0)) error('%s: The filter zero index position outside of the filter support.', upper(mfilename)); end if(numel(skip)==1) skip = skip*ones(M,1); end % Determine output length % Lext -- length of the signal after convolution before subsampling % N -- after subsampling if(strcmp(ext,'per')) Lext = L; N = ceil(Lext/a); else Lext = (L+filtLen-1); N = ceil((Lext-skip)/a); end %The minimum input signal length which produces N output samples Lreq = a*(N-1) + 1; % Output memory allocation c=zeros(N,M,W,assert_classname(f,g)); % Explicitly extend the input. length(fext) = length(f) + 2*(filtLen-1) fext = comp_extBoundary(f,filtLen-1,ext,'dim',1); % CONV2 does 2-D linear convolution. 'valid' option crops tails % length(fextconv2) = length(f) + (filtLen-1) % length(c(:,m,:)) = N % W channels done simultaneously by conv2 for m=1:M c(:,m,:) = comp_downs(conv2(fext,g(:,m),'valid'),a,skip(m),Lreq); end; ltfat/inst/comp/comp_gabreassign.m0000664000175000017500000000420612612404256017164 0ustar susnaksusnakfunction sr=comp_gabreassign(s,tgrad,fgrad,a); %-*- texinfo -*- %@deftypefn {Function} comp_gabreassign %@verbatim %COMP_GABREASSIGN Reassign time-frequency distribution. % Usage: sr = comp_gabreassign(s,tgrad,fgrad,a); % % COMP_GABREASSIGN(s,tgrad,fgrad,a) will reassign the values of the positive % time-frequency distribution s using the instantaneous time and frequency % fgrad and ifdummy. The lattice is determined by the time shift a and % the number of channels deduced from the size of s. % % % References: % F. Auger and P. Flandrin. Improving the readability of time-frequency % and time-scale representations by the reassignment method. IEEE Trans. % Signal Process., 43(5):1068-1089, 1995. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_gabreassign.html} %@seealso{gabreassign} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK [M,N,W]=size(s); L=N*a; b=L/M; freqpos=fftindex(M); tgrad=bsxfun(@plus,tgrad/b,freqpos); timepos=fftindex(N); fgrad=bsxfun(@plus,fgrad/a,timepos.'); tgrad=round(tgrad); fgrad=round(fgrad); tgrad=mod(tgrad,M); fgrad=mod(fgrad,N); sr=zeros(M,N,W,assert_classname(s,tgrad,fgrad)); fgrad=fgrad+1; tgrad=tgrad+1; for w=1:W for ii=1:M for jj=1:N sr(tgrad(ii,jj),fgrad(ii,jj),w) = sr(tgrad(ii,jj),fgrad(ii,jj),w)+s(ii,jj,w); end; end; end; ltfat/inst/comp/comp_dwiltiii.m0000664000175000017500000000414412612404256016516 0ustar susnaksusnakfunction [coef]=comp_dwiltiii(f,g,M) %-*- texinfo -*- %@deftypefn {Function} comp_dwiltiii %@verbatim %COMP_DWILTIII Compute Discrete Wilson transform type III. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dwiltiii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L = size(f,1); a=M; N=L/a; W=size(f,2); fwasreal = isreal(f); coef=zeros(M,N,W,assert_classname(f,g)); halfmod=exp(-pi*i*(0:L-1).'/(2*M)); f=f.*repmat(halfmod,1,W); coef2=comp_sepdgt(f,g,a,2*M,0); if (isreal(g) && fwasreal) % --- m is even --------- coef(1:2:M,1:2:N,:)= real(coef2(1:2:M,1:2:N,:)) + imag(coef2(1:2:M,1:2:N,:)); coef(1:2:M,2:2:N,:)= real(coef2(1:2:M,2:2:N,:)) - imag(coef2(1:2:M,2:2:N,:)); % --- m is odd ---------- coef(2:2:M,1:2:N,:)= real(coef2(2:2:M,1:2:N,:)) - imag(coef2(2:2:M,1:2:N,:)); coef(2:2:M,2:2:N,:)= real(coef2(2:2:M,2:2:N,:)) + imag(coef2(2:2:M,2:2:N,:)); else % --- m is even --------- coef(1:2:M,1:2:N,:)= 1/sqrt(2)*(exp(-i*pi/4)*coef2(1:2:M,1:2:N,:)+exp(i*pi/4)*coef2(2*M:-2:M+1,1:2:N,:)); coef(1:2:M,2:2:N,:)= 1/sqrt(2)*(exp(i*pi/4)*coef2(1:2:M,2:2:N,:)+exp(-i*pi/4)*coef2(2*M:-2:M+1,2:2:N,:)); % --- m is odd ---------- coef(2:2:M,1:2:N,:)= 1/sqrt(2)*(exp(i*pi/4)*coef2(2:2:M,1:2:N,:)+exp(-i*pi/4)*coef2(2*M-1:-2:M+1,1:2:N,:)); coef(2:2:M,2:2:N,:)= 1/sqrt(2)*(exp(-i*pi/4)*coef2(2:2:M,2:2:N,:)+exp(i*pi/4)*coef2(2*M-1:-2:M+1,2:2:N,:)); end ltfat/inst/comp/comp_ufilterbank_fft.m0000664000175000017500000000270112612404256020042 0ustar susnaksusnakfunction c=comp_ufilterbank_fft(f,g,a); %-*- texinfo -*- %@deftypefn {Function} comp_ufilterbank_fft %@verbatim %COMP_UFILTERBANK_FFT Classic filtering by FFT % Usage: c=comp_ufilterbank_fft(f,g,a); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_ufilterbank_fft.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=size(f,1); W=size(f,2); M=size(g,2); N=L/a; c=zeros(N,M,W,assert_classname(f,g)); % This routine does not yet use FFTREAL, because it must be able to % handle downsampling, which is much easier to express in the FFT case. G=fft(fir2long(g,L)); for w=1:W F=fft(f(:,w)); for m=1:M c(:,m,w)=ifft(sum(reshape(F.*G(:,m),N,a),2))/a; end; end; if isreal(f) && isreal(g) c=real(c); end; ltfat/inst/comp/comp_ifftreal.m0000664000175000017500000000231112612404256016466 0ustar susnaksusnakfunction f=comp_ifftreal(c,N) %-*- texinfo -*- %@deftypefn {Function} comp_ifftreal %@verbatim %COMP_IFFTREAL Compute an IFFTREAL %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_ifftreal.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . N2=floor(N/2)+1; % Force IFFT along dimension 1, since we have permuted the dimensions % manually if rem(N,2)==0 f=[c;... flipud(conj(c(2:end-1,:)))]; else f=[c;... flipud(conj(c(2:end,:)))]; end; f=real(ifft(f,N,1)); ltfat/inst/comp/comp_dgt_ola.m0000664000175000017500000000436412612404256016315 0ustar susnaksusnakfunction coef=comp_dgt_ola(f,g,a,M,Lb) %-*- texinfo -*- %@deftypefn {Function} comp_dgt_ola %@verbatim % % This function implements periodic convolution using overlap-add. The % window g is supposed to be extended by fir2iir. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dgt_ola.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . [L W]=size(f); gl=length(g); N=L/a; % Length of extended block and padded g Lext=Lb+gl; % Number of blocks Nb=L/Lb; % Number of time positions per block Nblock = Lb/a; Next = Lext/a; if rem(Nblock,1)~=0 error('The length of the time shift must devide the block length.'); end; % Number of time positions in half extension b2 = gl/2/a; if rem(b2,1)~=0 error(['The length of the time shift must devide the window length by ' ... 'an even number.']) end; % Extend window to length of extended block. gpad=fir2long(g,Lext); coef=zeros(M,N,W,assert_classname(f,g)); for ii=0:Nb-1 block=comp_dgt_long(postpad(f(ii*Lb+1:(ii+1)*Lb,:),Lext),gpad,a,M); block=reshape(block,M,Next,W); % Large block coef(:,ii*Nblock+1:(ii+1)*Nblock,:) = coef(:,ii*Nblock+1:(ii+1)*Nblock,:)+block(:,1:Nblock,:); % Small block + s_ii=mod(ii+1,Nb); coef(:,s_ii*Nblock+1 :s_ii*Nblock+b2,:) = coef(:,s_ii*Nblock+1 ... :s_ii*Nblock+b2,:)+ block(:,Nblock+1:Nblock+b2,:); % Small block - s_ii=mod(ii-1,Nb)+1; coef(:,s_ii*Nblock-b2+1:s_ii*Nblock,:) =coef(:,s_ii*Nblock-b2+1:s_ii*Nblock,:)+ block(:,Nblock+b2+1:Nblock+2*b2,:); end; ltfat/inst/comp/arg_pfilt.m0000664000175000017500000000173612612404256015635 0ustar susnaksusnakfunction definput=arg_pfilt(definput) definput.keyvals.crossover=120; %-*- texinfo -*- %@deftypefn {Function} arg_pfilt %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_pfilt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_idwiltiii.m0000664000175000017500000000377012612404256016673 0ustar susnaksusnakfunction [f]=comp_idwiltiii(coef,g) %-*- texinfo -*- %@deftypefn {Function} comp_idwiltiii %@verbatim %COMP_IDWILTIII Compute Inverse discrete Wilson transform type III. % % This is a computational routine. Do not call it % directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idwiltiii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK M=size(coef,1); N=size(coef,2); W=size(coef,3); a=M; L=N*M; coef2=zeros(2*M,N,W,assert_classname(coef,g)); coef2(1:2:M,1:2:N,:) = exp( i*pi/4)*coef(1:2:M,1:2:N,:); coef2(2*M:-2:M+1,1:2:N,:) = exp(-i*pi/4)*coef(1:2:M,1:2:N,:); coef2(1:2:M,2:2:N,:) = exp(-i*pi/4)*coef(1:2:M,2:2:N,:); coef2(2*M:-2:M+1,2:2:N,:) = exp( i*pi/4)*coef(1:2:M,2:2:N,:); coef2(2:2:M,1:2:N,:) = exp(-i*pi/4)*coef(2:2:M,1:2:N,:); coef2(2*M-1:-2:M+1,1:2:N,:) = exp( i*pi/4)*coef(2:2:M,1:2:N,:); coef2(2:2:M,2:2:N,:) = exp( i*pi/4)*coef(2:2:M,2:2:N,:); coef2(2*M-1:-2:M+1,2:2:N,:) = exp(-i*pi/4)*coef(2:2:M,2:2:N,:); % Apply the generalized DGT and scale. %f=comp_igdgt(coef2,g,a,2*M,L,0,.5,0,0)/sqrt(2); f = comp_isepdgt(coef2,g,L,a,2*M,0); halfmod=exp(pi*i*(0:L-1).'/(2*M))/sqrt(2); f=f.*repmat(halfmod,1,W); if isreal(coef) && isreal(g) f=real(f); end; ltfat/inst/comp/comp_dst.m0000664000175000017500000000504312612404256015471 0ustar susnaksusnakfunction c = comp_dst(f,type) %-*- texinfo -*- %@deftypefn {Function} comp_dst %@verbatim %COMP_DST Calculates DST % Input parameters: % f : Input data. % type : DST version. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dst.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . [L,W] = size(f); switch type case 1 c=zeros(L,W,assert_classname(f)); s1=dft([zeros(1,W,assert_classname(f));... f;... zeros(1,W,assert_classname(f));... -flipud(f)]); % This could be done by a repmat instead. for w=1:W c(:,w)=s1(2:L+1,w)-s1(2*L+2:-1:L+3,w); end; c=c*1i/2; case 2 c=zeros(L,W,assert_classname(f)); m1=1/sqrt(2)*exp(-(1:L)*pi*i/(2*L)).'; m1(L)=-i; m2=-1/sqrt(2)*exp((1:L-1)*pi*i/(2*L)).'; s1=i*fft([f;-flipud(f)])/sqrt(L)/2; % This could be done by a repmat instead. for w=1:W c(:,w)=s1(2:L+1,w).*m1+[s1(2*L:-1:L+2,w).*m2;0]; end; case 3 c=zeros(2*L,W,assert_classname(f)); m1=1/sqrt(2)*exp((1:L)*pi*i/(2*L)).'; m1(L)=i; m2=-1/sqrt(2)*exp(-(L-1:-1:1)*pi*i/(2*L)).'; for w=1:W c(:,w)=[0;m1.*f(:,w);m2.*f(L-1:-1:1,w)]; end; c=-sqrt(L)*2*i*ifft(c); c=c(1:L,:); case 4 s1=zeros(2*L,W,assert_classname(f)); c=zeros(L,W,assert_classname(f)); m1=1/sqrt(2)*exp(-(0:L-1)*pi*i/(2*L)).'; m2=-1/sqrt(2)*exp((1:L)*pi*i/(2*L)).'; for w=1:W s1(:,w)=[m1.*f(:,w);flipud(m2).*f(L:-1:1,w)]; end; s1=i*exp(-pi*i/(4*L))*fft(s1)/sqrt(2*L); % This could be done by a repmat instead. for w=1:W c(:,w)=s1(1:L,w).*m1+s1(2*L:-1:L+1,w).*m2; end; otherwise error('%s: Type not supported.',upper(mfilename)); end if isreal(f) c=real(c); end; ltfat/inst/comp/comp_gabtight_long.m0000664000175000017500000000312312612404256017504 0ustar susnaksusnakfunction gt=comp_gabtight_long(g,a,M); %-*- texinfo -*- %@deftypefn {Function} comp_gabtight_long %@verbatim %COMP_GABTIGHT_LONG Compute tight window % % This is a computational subroutine, do not call it directly, use % GABTIGHT instead. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_gabtight_long.html} %@seealso{gabtight} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=length(g); R=size(g,2); gf=comp_wfac(g,a,M); b=L/M; N=L/a; c=gcd(a,M); d=gcd(b,N); p=b/d; q=N/d; G=zeros(p,q*R,assert_classname(g)); if p==1 % Integer oversampling, including Wilson basis. for ii=1:c*d gf(:,ii)=gf(:,ii)/norm(gf(:,ii)); end; else for ii=1:c*d G(:)=gf(:,ii); % Compute thin SVD [U,sv,V] = svd(G,'econ'); Gtight=U*V'; gf(:,ii)=Gtight(:); end; end; gt=comp_iwfac(gf,L,a,M); if isreal(g) gt=real(gt); end; ltfat/inst/comp/comp_warpedfreqresponse.m0000664000175000017500000000673212612404256020624 0ustar susnaksusnakfunction H=comp_warpedfreqresponse(wintype,fc,bw,fs,L,freqtoscale,scaletofreq,varargin) %-*- texinfo -*- %@deftypefn {Function} comp_warpedfreqresponse %@verbatim %COMP_WARPEDFREQRESPONSE Transfer function of warped filter % Usage: H=comp_warpedfreqresponse(wintype,fc,bw,fs,L,freqtoscale); % H=comp_warpedfreqresponse(wintype,fc,bw,fs,L,freqtoscale,normtype); % % Input parameters: % wintype : Type of window (from firwin) % fc : Centre frequency, in scale units. % bw : Bandwith, in scale units. % fs : Sampling frequency in Hz. % L : Transform length (in samples). % freqtoscale : Function to convert Hz into scale units. % scaletofreq : Function to convert scale units into Hz. % normtype : Normalization flag to pass to NORMALIZE. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_warpedfreqresponse.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . definput.import={'normalize'}; definput.flags.symmetry = {'nonsymmetric','symmetric'}; [flags,kv]=ltfatarghelper({},definput,varargin); fcwasnegative = fc < 0; if fcwasnegative && flags.do_symmetric fc = -fc; end fcscale = freqtoscale(fc); if ~flags.do_symmetric % Compute the values in Aud of the channel frequencies of an FFT of % length L. bins_lo = freqtoscale(modcent(fs*(0:L-1)/L,fs)).'; else bins_lo = freqtoscale(fs*(0:L-1)/L).'; end % This one is necessary to represent the highest frequency filters, which % overlap into the negative frequencies. nyquest2 = 2*freqtoscale(fs/2); bins_hi = nyquest2+bins_lo; % firwin makes a window of width 1 centered around 0 on the scale, so we rescale the % bins in order to pass the correct width to firwin and subtract fc bins_lo=(bins_lo-fcscale)/bw; bins_hi=(bins_hi-fcscale)/bw; pos_lo=comp_warpedfoff(fc,bw,fs,L,freqtoscale,scaletofreq,flags.do_symmetric); % The "floor" below often cuts away a non-zero sample, but it makes % the support stay below the limit needed for the painless case. Same % deal 4 lines below. pos_hi=floor(scaletofreq(fcscale+.5*bw)/fs*L); if pos_hi>L/2 % Filter is high pass and spilling into the negative frequencies pos_hi=floor(scaletofreq(fcscale+.5*bw-nyquest2)/fs*L); end; win_lo=firwin(wintype,bins_lo); win_hi=firwin(wintype,bins_hi); H=win_lo+win_hi; H(isnan(H)) = 0; H=normalize(H,flags.norm); H=circshift(H,-pos_lo); upidx=modcent(pos_hi-pos_lo,L); % ------ Testing --------------- if 0 bb=circshift(bins_lo,-pos_lo); if bb(1)<-0.5 % Adjust bin_lo error('Could do better here.'); end; if (bb(upidx+1)<0.5) && (bb(upidx+1)>0) disp('Chopped non-zero sample.'); bb(upidx+1) end; end; H=H(1:upidx); if fcwasnegative && flags.do_symmetric H = H(end:-1:1); end ltfat/inst/comp/comp_dgtreal.m0000664000175000017500000000276412612404256016330 0ustar susnaksusnakfunction c=comp_dgtreal(f,g,a,M,lt,phasetype) %-*- texinfo -*- %@deftypefn {Function} comp_dgtreal %@verbatim %COMP_DGTREAL Compute a DGTREAL % Usage: c=comp_dgt_real(f,g,a,M,lt,phasetype); % % Input parameters: % f : Input data % g : Window function. % a : Length of time shift. % M : Number of modulations. % L : Length of transform to do. % Output parameters: % c : M/2+1*N array of coefficients. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dgtreal.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. if lt(2)==1 c = comp_sepdgtreal(f,g,a,M,phasetype); else % Quinqux lattice c = comp_nonsepdgtreal_quinqux(f,g,a,M); end; ltfat/inst/comp/comp_ifwt.m0000664000175000017500000000673212612404256015656 0ustar susnaksusnakfunction f = comp_ifwt(c,g,a,J,Ls,ext) %-*- texinfo -*- %@deftypefn {Function} comp_ifwt %@verbatim %COMP_IFWT Compute Inverse DWT % Usage: f = comp_ifwt(c,g,J,a,Ls,ext); % % Input parameters: % c : Cell array of length M = J*(filtNo-1)+1. Each element is Lc(m)*W array % g : Synthesis wavelet filters - cell-array of length filtNo. % J : Number of filterbank iterations. % a : Upsampling factors - array of length filtNo. % Ls : Length of the reconstructed signal. % ext : 'per','zero','odd','even', Type of the forward transform boundary handling. % % Output parameters: % f : Reconstructed data - Ls*W array. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_ifwt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % see comp_fwt for explanantion assert(a(1)==a(2),'First two elements of a are not equal. Such wavelet filterbank is not suported.'); % Impulse responses to a correct format. filtNo = numel(g); %gCell = cellfun(@(gEl) conj(flipud(gEl.h(:))),g,'UniformOutput',0); gCell = cellfun(@(gEl) gEl.h(:),g,'UniformOutput',0); if strcmp(ext,'per') % Initial shift of the filter to compensate for it's delay. % "Zero" delay reconstruction is produced. % offset = cellfun(@(gEl) gEl.offset,g); %offset = cellfun(@(gEl) 1-numel(gEl.h)-gEl.offset,g); offset = cellfun(@(gEl) gEl.offset,g); elseif strcmp(ext,'valid') offset = -cellfun(@(gEl) numel(gEl.h)-1,g); else % -1 + 1 = 0 is used for better readability and to be consistent % with the shift in comp_fwt. % Here we are cheating, because we are making the filters % anti-causal to compensate for the delay introduced by causal % analysis filters. % Instead, we could have used causal filters here and do the % delay compensation at the end (cropping f). % offset = -cellfun(@(gEl) numel(gEl),gCell) + (a -1) +1; offset = -(a-1); end Lc = cellfun(@(cEl) size(cEl,1),c); Lc(end+1) = Ls; tempca = c(1); cRunPtr = 2; for jj=1:J tempca=comp_ifilterbank_td([tempca;c(cRunPtr:cRunPtr+filtNo-2)],gCell,a,Lc(cRunPtr+filtNo-1),offset,ext); cRunPtr = cRunPtr + filtNo -1; end % Save reconstructed data. f = tempca; % for ch=1:chans % tempca = c(LcStart(1):LcEnd(1),ch); % LcRunPtr = filtNo+1; % cRunPtr = 2; % for jj=1:J % tempca = comp_upconv({tempca}, Lc(LcRunPtr),{tmpg{1}},a(1),skip(1),ext,0); % for ff=2:filtNo % % tempca = tempca + comp_upconv({c{cRunPtr}(:,ch)}, Lc(LcRunPtr),{tmpg},a(ff),skip,doNoExt,0); % tempca = tempca + comp_upconv({c(LcStart(cRunPtr):LcEnd(cRunPtr),ch)}, Lc(LcRunPtr),{tmpg{ff}},a(ff),skip(ff),ext,0); % cRunPtr = cRunPtr + 1; % end % LcRunPtr = LcRunPtr + filtNo -1; % end % f(:,ch) = tempca; % end ltfat/inst/comp/arg_uwfbtcommon.m0000664000175000017500000000204012612404256017044 0ustar susnaksusnakfunction definput = arg_uwfbtcommon(definput) %-*- texinfo -*- %@deftypefn {Function} arg_uwfbtcommon %@verbatim % Filter scaling %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_uwfbtcommon.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . definput.flags.scaling={'sqrt','scale','noscale','scaling_notset'}; ltfat/inst/comp/comp_iufwt.m0000664000175000017500000000441412612404256016036 0ustar susnaksusnakfunction f = comp_iufwt(c,g,a,J,scaling) %-*- texinfo -*- %@deftypefn {Function} comp_iufwt %@verbatim %COMP_IUFWT Compute Inverse Undecimated DWT % Usage: f = comp_iufwt(c,g,J,a); % % Input parameters: % c : L*M*W array of coefficients, M=J*(filtNo-1)+1. % g : Synthesis wavelet filters-Cell-array of length filtNo. % J : Number of filterbank iterations. % a : Upsampling factors - array of length filtNo. % % Output parameters: % f : Reconstructed data - L*W array. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_iufwt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % see comp_fwt for explanantion assert(a(1)==a(2),'First two elements of a are not equal. Such wavelet filterbank is not suported.'); % For holding the impulse responses. filtNo = length(g); gOffset = cellfun(@(gEl) gEl.offset,g(:)); % Optionally scale the filters g = comp_filterbankscale(g(:),a(:),scaling); %Change format to a matrix gMat = cell2mat(cellfun(@(gEl) gEl.h(:),g(:)','UniformOutput',0)); % Read top-level appr. coefficients. ca = squeeze(c(:,1,:)); cRunPtr = 2; for jj=1:J % Current iteration filter upsampling factor. filtUps = a(1)^(J-jj); % Zero index position of the upsampled filetrs. offset = filtUps.*gOffset ;%+ filtUps; % Run the filterbank ca=comp_iatrousfilterbank_td([reshape(ca,size(ca,1),1,size(ca,2)),... c(:,cRunPtr:cRunPtr+filtNo-2,:)],gMat,filtUps,offset); % Bookkeeping cRunPtr = cRunPtr + filtNo -1; end % Copy to the output. f = ca; ltfat/inst/comp/comp_transferfunction.m0000664000175000017500000000320712612404256020271 0ustar susnaksusnakfunction H=comp_transferfunction(g,L) %-*- texinfo -*- %@deftypefn {Function} comp_transferfunction %@verbatim %COMP_TRANSFERFUNCTION Compute the transfer function % % COMP_TRANSFERFUNCTION(g,L) computes length L transfer function % (frequency response) of a single filter g. This function can only % handle filters in a proper internal format i.e. already processed by % FILTERBANKWIN. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_transferfunction.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Setting crossover to 0 ensures FIR filters to be transformed to % full-length Frequency-domain defined filters with g.H and g.foff fields. g = comp_filterbank_pre({g},1,L,0); % Band-limited filters have to be made full-length H = circshift(postpad(g{1}.H(:),L),g{1}.foff); % Realonly has to be treated separatelly for band-limited filters if isfield(g,'realonly') && g.realonly H=(H+involute(H))/2; end; ltfat/inst/comp/comp_hermite.m0000664000175000017500000000345212612404256016336 0ustar susnaksusnakfunction y = comp_hermite(n, x); %-*- texinfo -*- %@deftypefn {Function} comp_hermite %@verbatim %COMP_HERMITE Compute sampling of continuous Hermite function. % Usage: y = comp_hermite(n, x); % % COMP_HERMITE(n, x) evaluates the n-th Hermite function at the vector x. % The function is normalized to have the L^2(-inf,inf) norm equal to one. % % A minimal effort is made to avoid underflow in recursion. % If used to evaluate the Hermite quadratures, it works for n <= 2400 % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_hermite.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: % T. Hrycak, Oct 5, 2005 % Last modified July 17, 2007 rt = 1 / sqrt(sqrt(pi)); if n == 0 y = rt * exp(-0.5 * x.^2); end if n == 1 y = rt * sqrt(2) * x .* exp(-0.5 * x.^2); end % % if n > 2, conducting the recursion. % if n >= 2 ef = exp(-0.5 * (x.^2) / (n+1)); tmp1 = rt * ef; tmp2 = rt * sqrt(2) * x .* (ef.^2); for k = 2:n y = sqrt(2)*x.*tmp2 - sqrt(k-1)*tmp1 .* ef; y = ef .* y / sqrt(k); tmp1 = tmp2; tmp2 = y; end end ltfat/inst/comp/comp_wpfbt.m0000664000175000017500000000665212612404256016030 0ustar susnaksusnakfunction c=comp_wpfbt(f,wtNodes,rangeLoc,ext,interscaling) %-*- texinfo -*- %@deftypefn {Function} comp_wpfbt %@verbatim %COMP_WPFBT Compute Wavelet Packet Filterbank Tree % Usage: c=comp_wpfbt(f,wtNodes,ext); % % Input parameters: % f : Input L*W array. % wtNodes : Filterbank tree nodes (elementary filterbanks) in % BF order. Length nodeNo cell array of structures. % ext : Type of the forward transform boundary handling. % % Output parameters: % c : Coefficients stored in cell-array. Each element is one % subband (matrix with W columns). % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_wpfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Do non-expansve transform if ext=='per' doPer = strcmp(ext,'per'); % Pre-allocated output c = cell(sum(cellfun(@(wtEl) numel(wtEl.h),wtNodes)),1); interscalingfac = 1; if strcmp('intscale',interscaling) interscalingfac = 1/2; elseif strcmp('intsqrt',interscaling) interscalingfac = 1/sqrt(2); end % OLD code doing the scaling directly on filters in the tree % if do_scale % for ii=1:numel(wtNodes) % range = 1:numel(wtNodes{ii}.h); % range(rangeLoc{ii}) = []; % wtNodes{ii}.h(range) = cellfun(@(hEl) setfield(hEl,'h',hEl.h/sqrt(2)),wtNodes{ii}.h(range),... % 'UniformOutput',0); % end % end ca = f; cOutRunIdx = 1; cInRunIdxs = []; % Go over all nodes in breadth-first order for jj=1:numel(wtNodes) % Node filters to a cell array %hCell = cellfun(@(hEl) conj(flipud(hEl.h(:))),wtNodes{jj}.h(:),... % 'UniformOutput',0); hCell = cellfun(@(hEl) hEl.h(:),wtNodes{jj}.h(:),'UniformOutput',0); % Node filters subs. factors a = wtNodes{jj}.a; % Node filters initial skips if(doPer) %offset = cellfun(@(hEl) 1-numel(hEl.h)-hEl.offset,wtNodes{jj}.h); offset = cellfun(@(hEl) hEl.offset,wtNodes{jj}.h); else offset = -(a-1); end filtNo = numel(hCell); % Run filterbank c(cOutRunIdx:cOutRunIdx + filtNo-1)=... comp_filterbank_td(ca,hCell,a,offset,ext); % Bookeeping. Store idxs of just computed outputs. outRange = cOutRunIdx:cOutRunIdx+filtNo-1; % Omit those, which are not decomposed further outRange(rangeLoc{jj}) = []; cInRunIdxs = [cInRunIdxs,outRange]; cOutRunIdx = cOutRunIdx + filtNo; % Prepare input for the next iteration % Scaling introduced in order to preserve energy % (parseval tight frame) if ~isempty(cInRunIdxs) c{cInRunIdxs(1)} = c{cInRunIdxs(1)}*interscalingfac; ca = c{cInRunIdxs(1)}; cInRunIdxs(1) = []; end end ltfat/inst/comp/comp_idgt_fb.m0000664000175000017500000000720212612404256016274 0ustar susnaksusnakfunction [f]=comp_idgt_fb(coef,g,L,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_idgt_fb %@verbatim %COMP_IDGT_FB Filter bank IDGT. % Usage: f=comp_idgt_fb(c,g,L,a,M); % % This is a computational routine. Do not call it directly. % % Input must be in the M x N*W format, so the N and W dimension is % combined. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idgt_fb.html} %@seealso{idgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK % Calculate the parameters that was not specified. N=L/a; b=L/M; %W=prod(size(coef))/(M*N); W = size(coef,3); N=L/a; b=L/M; gl=length(g); glh=floor(gl/2); % gl-half %if ndims(coef)>2 % error('Reshape to M x N*W'); %end; % Apply ifft to the coefficients. coef=ifft(coef)*sqrt(M); %coef=reshape(coef,M,N,W); % The fftshift actually makes some things easier. g=fftshift(g); f=zeros(L,W,assert_classname(coef,g)); ff=zeros(gl,1,assert_classname(coef,g)); % Rotate the coefficients, duplicate them until they have same % length as g, and multiply by g. % FIXME Kill the loop over w by bsxfun for w=1:W % ----- Handle the first boundary using periodic boundary conditions. --- for n=0:ceil(glh/a)-1 delay=mod(-n*a+glh,M); for ii=0:gl/M-1 for m=0:delay-1 ff(m+ii*M+1)=coef(M-delay+m+1,n+1,w)*g(m+ii*M+1); end; for m=0:M-delay-1 ff(m+ii*M+delay+1)=coef(m+1,n+1,w)*g(m+delay+ii*M+1); end; end; sp=mod(n*a-glh,L); ep=mod(n*a-glh+gl-1,L); % Add the ff vector to f at position sp. for ii=0:L-sp-1 f(sp+ii+1,w)=f(sp+ii+1,w)+ff(1+ii); end; for ii=0:ep f(1+ii,w)=f(1+ii,w)+ff(L-sp+1+ii); end; end; % ----- Handle the middle case. --------------------- for n=ceil(glh/a):floor((L-ceil(gl/2))/a) delay=mod(-n*a+glh,M); for ii=0:gl/M-1 for m=0:delay-1 ff(m+ii*M+1)=coef(M-delay+m+1,n+1,w)*g(m+ii*M+1); end; for m=0:M-delay-1 ff(m+ii*M+delay+1)=coef(m+1,n+1,w)*g(m+delay+ii*M+1); end; end; sp=mod(n*a-glh,L); ep=mod(n*a-glh+gl-1,L); % Add the ff vector to f at position sp. for ii=0:ep-sp f(ii+sp+1,w)=f(ii+sp+1,w)+ff(ii+1); end; end; % ----- Handle the last boundary using periodic boundary conditions. --- % This n is one-indexed, to avoid to many +1 for n=floor((L-ceil(gl/2))/a)+1:N-1 delay=mod(-n*a+glh,M); for ii=0:gl/M-1 for m=0:delay-1 ff(m+ii*M+1)=coef(M-delay+m+1,n+1,w)*g(m+ii*M+1); end; for m=0:M-delay-1 ff(m+ii*M+delay+1)=coef(m+1,n+1,w)*g(m+delay+ii*M+1); end; end; sp=mod(n*a-glh,L); ep=mod(n*a-glh+gl-1,L); % Add the ff vector to f at position sp. for ii=0:L-sp-1 f(sp+ii+1,w)=f(sp+ii+1,w)+ff(1+ii); end; for ii=0:ep f(1+ii,w)=f(1+ii,w)+ff(L-sp+1+ii); end; end; end; % Scale correctly. f=sqrt(M)*f; ltfat/inst/comp/comp_warpedfoff.m0000664000175000017500000000241312612404256017020 0ustar susnaksusnakfunction foff=comp_warpedfoff(fc,bw,fs,L,freqtoscale,scaletofreq,do_symmetric) %-*- texinfo -*- %@deftypefn {Function} comp_warpedfoff %@verbatim %COMP_WARPEDFOFF foff for warped filters %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_warpedfoff.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . fcwasnegative = fc < 0; if fcwasnegative && do_symmetric fc = -fc; fcscale = freqtoscale(fc); foff = -floor(scaletofreq(fcscale+.5*bw)/fs*L)+1; else fcscale = freqtoscale(fc); foff = floor(scaletofreq(fcscale-.5*bw)/fs*L)+1; end ltfat/inst/comp/comp_iwfac.m0000664000175000017500000000433212612404256015770 0ustar susnaksusnakfunction [g]=comp_iwfac(gf,L,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_iwfac %@verbatim %COMP_IWFAC Compute inverse window factorization % Usage: g=comp_iwfac(gf,a,M); % % Input parameters: % gf : Factored Window % a : Length of time shift. % M : Number of frequency bands. % Output parameters: % g : Window function. % % References: % T. Strohmer. Numerical algorithms for discrete Gabor expansions. In % H. G. Feichtinger and T. Strohmer, editors, Gabor Analysis and % Algorithms, chapter 8, pages 267-294. Birkhauser, Boston, 1998. % % P. L. Soendergaard. An efficient algorithm for the discrete Gabor % transform using full length windows. IEEE Signal Process. Letters, % submitted for publication, 2007. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_iwfac.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK % Calculate the parameters that was not specified R=prod(size(gf))/L; N=L/a; b=L/M; % The four factorization parameters. c=gcd(a,M); p=a/c; q=M/c; d=N/q; gf=reshape(gf,p,q*R,c,d); % Scale by the sqrt(M) comming from Walnuts representation gf=gf/sqrt(M); % fft them if d>1 gf=ifft(gf,[],4); end; g=zeros(L,R,assert_classname(gf)); % Set up the small matrices for w=0:R-1 for s=0:d-1 for l=0:q-1 for k=0:p-1 g((1:c)+mod(k*M-l*a+s*p*M,L),w+1)=reshape(gf(k+1,l+1+q*w,:,s+1),c,1); end; end; end; end; ltfat/inst/comp/comp_phasegradfilters.m0000664000175000017500000000630412612404256020227 0ustar susnaksusnakfunction [gh,gd,g]=comp_phasegradfilters(g,a,L) %-*- texinfo -*- %@deftypefn {Function} comp_phasegradfilters %@verbatim % Number of filters %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_phasegradfilters.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . M = numel(g); % Precompute filters for length L if not done already g = comp_filterbank_pre(g,a,L,100); % Divide filters to time domain and frequency domain groups mFreqBl = 1:M; mTime = mFreqBl(cellfun(@(gEl) isfield(gEl,'h'),g(:))>0); mFreqBl(mTime) = []; mFreqL = mFreqBl(cellfun(@(gEl) isfield(gEl,'H') && numel(gEl.H) == L,g)>0); mFreqBl(mFreqL) = []; % For FIR/full-length frequency response filters, compute center frequency if numel(mFreqBl) < M cfreq = zeros(M,1); tempind = [mTime,mFreqL]; cfreq(tempind) = round(L/2*cent_freqs(g(tempind),L)); end; % Determine impulse response or transfer function length Lg = L*ones(M,1); Lg(mTime) = cellfun(@(gEl) length(gEl.h),g(mTime)); Lg(mFreqBl) = cellfun(@(gEl) length(gEl.H),g(mFreqBl)); gh = g; gd = g; fftind = fftindex(L,0); % Set Nyquist frequency to 0! %% ------ algorithm starts -------------------- % Construct time/frequency weighted versions of filters % defined on the time side for mId = mTime % Compute time weighted version. tempind = (g{mId}.offset:Lg(mId)+g{mId}.offset-1).'; gh{mId}.h = tempind.*g{mId}.h; % Compute frequency weighted version. gH = comp_transferfunction(g{mId},L); gd{mId}.H = circshift(fftind,cfreq(mId)).*gH; gd{mId}=rmfield(gd{mId},'h'); gd{mId}=rmfield(gd{mId},'offset'); gd{mId}.foff = 0; end; % Construct time/frequency weighted versions of bandlimited filters % defined on the frequency side for mId = mFreqBl % Compute frequency weighted version. tempind = [L-floor(Lg(mId)/2)+1:L, ... 1:ceil(Lg(mId)/2)]; gd{mId}.H = fftind(tempind).*g{mId}.H; % Compute time weighted version. % The code below is a quick and dirty version of % longg = fftshift(g{mId}.H); % gd2{mId}.H = fftshift(pderiv(longg,[],Inf)/(2*pi)); n=fftindex(Lg(mId),0); gh{mId}.H = L/Lg(mId)*real(fftshift( ... ifft(1i.*n.*fft(fftshift(g{mId}.H))))); end; % Construct time/frequency weighted versions of full-length filters % defined on the frequency side for mId = mFreqL % Compute frequency weighted version. gd{mId}.H = circshift(fftind,cfreq(mId)).*g{mId}.H; % Compute time weighted version. gh{mId}.H = real(ifft(1i.*fftind.*fft(g{mId}.H))); end; ltfat/inst/comp/comp_iuwpfbt.m0000664000175000017500000000535512612404256016365 0ustar susnaksusnakfunction f=comp_iuwpfbt(c,wtNodes,nodesUps,pOutIdxs,chOutIdxs,scaling,interscaling) %-*- texinfo -*- %@deftypefn {Function} comp_iuwpfbt %@verbatim %COMP_IUWPFBT Compute Inverse Undecimated Wavelet Packet Filter-Bank Tree % Usage: f=comp_iuwpfbt(c,wtNodes,nodesUps,pOutIdxs,chOutIdxs) % % Input parameters: % c : Coefficients stored in L*M*W array. % wtNodes : Filterbank tree nodes (elementary filterbans) in % reverse BF order. Cell array of structures of length nodeNo. % nodesUps : Filters upsampling factor of each node. Array of % length nodeNo. % pOutIdxs : Idx of each node's parent. Array of length nodeNo. % chOutIdxs : Idxs of each node children. Cell array of vectors of % length nodeNo. % % Output parameters: % f : Reconstructed data in L*W array. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_iuwpfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . interscalingfac = 1; if strcmp('intscale',interscaling) interscalingfac = 1/2; elseif strcmp('intsqrt',interscaling) interscalingfac = 1/sqrt(2); end % For each node in tree in the BF order... for jj=1:length(wtNodes) % Node filters subs. factors a = wtNodes{jj}.a; % Optionally scale the filters g = comp_filterbankscale(wtNodes{jj}.g(:),a(:),scaling); % Node filters to a matrix gMat = cell2mat(cellfun(@(gEl) gEl.h(:),g','UniformOutput',0)); % Node filters initial skips gOffset = cellfun(@(gEl) gEl.offset,wtNodes{jj}.g); % Zero index position of the upsampled filters. offset = nodesUps(jj).*(gOffset);% + nodesUps(jj); % Run filterbank ctmp = comp_iatrousfilterbank_td(c(:,chOutIdxs{jj},:),gMat,nodesUps(jj),offset); if(pOutIdxs(jj)) % Add to the existing subband c(:,pOutIdxs(jj),:) = interscalingfac*(c(:,pOutIdxs(jj),:)+reshape(ctmp,size(ctmp,1),1,size(ctmp,2))); else % We are at the root. f = ctmp; end end ltfat/inst/comp/assert_groworder.m0000664000175000017500000000317112612404256017254 0ustar susnaksusnakfunction order=assert_groworder(order) %-*- texinfo -*- %@deftypefn {Function} assert_groworder %@verbatim %ASSERT_GROWORDER Grow the order parameter % % ASSERT_GROWORDER is meant to be used in conjunction with % assert_sigreshape_pre and assert_sigreshape_post. It is used to % modify the order parameter in between calls in order to expand the % processed dimension by 1, i.e. for use in a routine that creates 2D % output from 1D input, for instance in dgt or filterbank. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/assert_groworder.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if numel(order)>1 % We only need to handle the non-trivial order, where dim>1 p=order(1); % Shift orders higher that the working dimension by 1, to make room for % the new dimension, but leave lower dimensions untouched. order(order>p)=order(order>p)+1; order=[p,p+1,order(2:end)]; end; ltfat/inst/comp/comp_hermite_all.m0000664000175000017500000000360412612404256017165 0ustar susnaksusnakfunction y = comp_hermite_all(n, x) %-*- texinfo -*- %@deftypefn {Function} comp_hermite_all %@verbatim %COMP_HERMITE_ALL Compute all Hermite functions up to an order % Usage: y = hermite_fun_all(n, x); % % This function evaluates the Hermite functions % of degree 0 through n-1 at the vector x. % The functions are normalized to have the L^2 norm % on (-inf,inf) equal to one. No effort is made to % avoid unerflow during recursion. % % Input parameters: % n : the number of Hermite functions % x : the vector of arguments % % Output parameters: % y : the values of the first n Hermite functions at % the nodes x %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_hermite_all.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % T. Hrycak, Mar. 22, 2006 % Last modified July 17, 2007 % % % rt = 1 / sqrt(sqrt(pi)); % % conducting the recursion. % y = zeros(length(x), n); y(:, 1) = rt * exp(-0.5 * x.^2); if n > 1 y(:, 2) = rt * sqrt(2) * x .* exp(-0.5 * x.^2); end for k = 2:n-1 y(:, k+1) = sqrt(2)*x.*y(:, k) - sqrt(k-1)*y(:, k-1); y(:, k+1) = y(:, k+1)/sqrt(k); end ltfat/inst/comp/comp_dtwfb.m0000664000175000017500000000254212612404256016006 0ustar susnaksusnakfunction c = comp_dtwfb(f,nodes,dualnodes,rangeLoc,rangeOut,ext,do_complex) %-*- texinfo -*- %@deftypefn {Function} comp_dtwfb %@verbatim % First tree %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dtwfb.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . c1 = comp_wfbt(f,nodes,rangeLoc,rangeOut,ext); % Second tree c2 = comp_wfbt(f,dualnodes,rangeLoc,rangeOut,ext); % Combine outputs of trees c = cellfun(@(crEl,ciEl) (crEl+1i*ciEl)/2,c1,c2,'UniformOutput',0); if do_complex % Non-real specific cneg = cellfun(@(crEl,ciEl) (crEl-1i*ciEl)/2,c1,c2,... 'UniformOutput',0); c = [c;cneg(end:-1:1)]; end ltfat/inst/comp/comp_pgauss.m0000664000175000017500000000357612612404256016212 0ustar susnaksusnakfunction [g]=comp_pgauss(L,w,c_t,c_f) %-*- texinfo -*- %@deftypefn {Function} comp_pgauss %@verbatim %COMP_PGAUSS Sampled, periodized Gaussian. % % Computational routine: See help on PGAUSS. % % center=0 gives whole-point centered function. % center=.5 gives half-point centered function. % % Does not check input parameters, do not call this % function directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_pgauss.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK % c_t - time centering % c_f - frequency centering % Input data type cannot be determined g=zeros(L,1); if L==0 return; end; sqrtl=sqrt(L); safe=4; % Keep the delay in a sane interval c_t=rem(c_t,L); % Outside the interval [-safe,safe] then exp(-pi*x.^2) is numerically zero. nk=ceil(safe/sqrt(L/sqrt(w))); lr=(0:L-1).'+c_t; for k=-nk:nk g=g+exp(-pi*(lr/sqrtl-k*sqrtl).^2/w+2*pi*i*c_f*(lr/L-k)); end; % Normalize it exactly. g=g/norm(g); % This normalization is only approximate, it works for the continous case % but not for the discrete %g=g*(w*L/2)^(-.25); ltfat/inst/comp/arg_normalize.m0000664000175000017500000000246112612404256016513 0ustar susnaksusnakfunction definput=arg_normalize(definput) %-*- texinfo -*- %@deftypefn {Function} arg_normalize %@verbatim % Both 'null' and 'empty' do no scaling when normalize is called % directly. % When used in different functions, % 'empty' can be set as default by definput.importdefaults={'empty'}; % to detect whether any of the other flags were set. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_normalize.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . definput.flags.norm={'2','1','inf','area','energy','peak',... 's0','rms','null','wav','norm_notset'}; ltfat/inst/comp/demo_blockproc_header.m0000664000175000017500000000403312612404256020151 0ustar susnaksusnakfunction failed=demo_blockproc_header(demo_name,demo_nargin) failed = 0; if demo_nargin<1 fprintf(['\n%s:\nTo run the demo, use one of the following:\n\n',... '%s(''gspi.wav'') to play gspi.wav (any wav file will do).\n',... '%s(''dialog'') to choose the wav file via file chooser dialog GUI.\n',... '%s(f,''fs'',fs) to play from a column vector f using sampling frequency fs.\n',... '%s(''playrec'') to record from a mic and play simultaneously.\n\n',... 'Avalable input and output devices can be listed by |blockdevices|.\n',... 'Particular device can be chosen by passing additional key-value pair ''devid'',devid.\n',... 'Output channels of the device cen be selected by additional key-value pair ''playch'',[ch1,ch2].\n',... 'Input channels of the device cen be selected by additional key-value pair ''recch'',[ch1].\n\n',... ]... ,upper(demo_name),demo_name,demo_name,demo_name,demo_name); failed=1; end try playrec('isInitialised'); catch error('%s: playrec or portaudio are not properly compiled. ',demo_name); end %-*- texinfo -*- %@deftypefn {Function} demo_blockproc_header %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/demo_blockproc_header.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_dwiltii.m0000664000175000017500000000327212612404256016346 0ustar susnaksusnakfunction [coef]=comp_dwiltii(coef2,a) %-*- texinfo -*- %@deftypefn {Function} comp_dwiltii %@verbatim %COMP_DWILT Compute Discrete Wilson transform. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dwiltii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . M=size(coef2,1)/2; N=size(coef2,2); W=size(coef2,3); L=N*a; coef=zeros(2*M,N/2,W,assert_classname(coef2)); % ---- m is zero --------- coef(1,:,:)=coef2(1,1:2:N,:); % --- m is odd ---------- coef(2:2:M,:,:) = i/sqrt(2)*(coef2(2:2:M,1:2:N,:)+coef2(2*M:-2:M+2,1:2:N,:)); coef(M+2:2:2*M,:,:)= 1/sqrt(2)*(coef2(2:2:M,2:2:N,:)-coef2(2*M:-2:M+2,2:2:N,:)); % --- m is even --------- coef(3:2:M,:,:)= 1/sqrt(2)*(coef2(3:2:M,1:2:N,:)-coef2(2*M-1:-2:M+2,1:2:N,:)); coef(M+3:2:2*M,:,:)= i/sqrt(2)*(coef2(3:2:M,2:2:N,:)+coef2(2*M-1:-2:M+2,2:2:N,:)); % --- m is nyquest ------ if mod(M,2)==0 coef(M+1,:,:) = i*coef2(M+1,2:2:N,:); else coef(M+1,:,:) = i*coef2(M+1,1:2:N,:); end; coef=reshape(coef,M*N,W); ltfat/inst/comp/arg_fwt2.m0000664000175000017500000000174612612404256015402 0ustar susnaksusnakfunction definput = arg_fwt2(definput) definput.flags.type2d = {'standard','tensor'}; %-*- texinfo -*- %@deftypefn {Function} arg_fwt2 %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_fwt2.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/nonsepgabpars_from_window.m0000664000175000017500000000351612612404256021140 0ustar susnaksusnakfunction [g,L,info] = nonsepgabpars_from_window(g,a,M,lt,L,callfun) %-*- texinfo -*- %@deftypefn {Function} nonsepgabpars_from_window %@verbatim %NONSEPGABPARS_FROM_WINDOW Compute g and L from window % Usage: [g,g.info,L] = gabpars_from_window(f,g,a,M,lt,L); % % Use this function if you know a window and a lattice % for the NONSEPDGT. The function will calculate a transform length L and % evaluate the window g into numerical form. % % If the transform length is unknown (as it usually is unless explicitly % specified by the user), set L to be [] in the input to this function. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/nonsepgabpars_from_window.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<6 stacknames=dbstack; callfun=stacknames(2).name; end; if isempty(L) if isnumeric(g) L=length(g); else L=dgtlength(1,a,M,lt); end; else Lcheck=dgtlength(L,a,M,lt); if Lcheck~=L error('%s: Invalid transform size L',upper(mfilename)); end; end; [g,info] = comp_window(g,a,M,L,lt,'NONSEPGABDUAL'); if (info.isfir) if info.istight g=g/sqrt(2); end; end; ltfat/inst/comp/comp_chirpzt.m0000664000175000017500000000407412612404256016365 0ustar susnaksusnakfunction c = comp_chirpzt(f,K,deltao,o) Ls = size(f,1); W = size(f,2); q = 1; if 0 %Use the decimation scheme % q fft of length q = ceil(Ls/K); Lfft = 2^nextpow2(2*K-1); fext = zeros(q*W,K); for w=0:W-1 fext(1+w*q*K:w*q*K+Ls) = f(:,w+1); end f = fext.'; Ls = K; k = (0:K-1).'; W2 = exp(-1i*q*deltao*(k.^2)./2); preChirp = W2(1:K).*exp(-1i*k*q*o); postChirp = zeros(K,q); for jj=0:q-1 postChirp(:,jj+1) = exp(-1i*jj*(k*deltao+o)).*W2(1:K); end else %Reference: fft of the following length Lfft = nextfastfft(Ls+K-1); n = (0:max([Ls,K])-1).'; W2 = exp(-1i*deltao*(n.^2)./2); preChirp = W2(1:Ls).*exp(-1i*o*(0:Ls-1).'); postChirp = W2(1:K); end chirpFilt = zeros(Lfft,1); chirpFilt(1:K) = conj(W2(1:K)); chirpFilt(end:-1:end-Ls+2) = conj(W2(2:Ls)); chirpFilt = fft(chirpFilt); ff = bsxfun(@times,f,preChirp); c = ifft(bsxfun(@times,fft(ff,Lfft),chirpFilt)); if q>1 ctmp = c; c = zeros(K,W,assert_classname(f)); for w=0:W-1 c(:,w+1) = sum(ctmp(1:K,1+w*q:(w+1)*q).*postChirp,2); end else c = bsxfun(@times,c(1:K,:),postChirp); end %-*- texinfo -*- %@deftypefn {Function} comp_chirpzt %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_chirpzt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_gga.m0000664000175000017500000000440412612404256015435 0ustar susnaksusnakfunction c = comp_gga(f,indvec) %-*- texinfo -*- %@deftypefn {Function} comp_gga %@verbatim %COMP_GGA Generalized Goertzel Algorithm % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_gga.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %% Initialization L = size(f,1); W = size(f,2); no_freq = length(indvec); %number of frequencies to compute classname = assert_classname(f); c = zeros(no_freq,W,classname); %memory allocation for the output coefficients %% Computation via second-order system % loop over the particular frequencies for cnt_freq = 1:no_freq %for a single frequency: %a/ precompute the constants pik_term = 2*pi*(indvec(cnt_freq))/(L); cos_pik_term2 = cos(pik_term) * 2; cc = exp(-1i*pik_term); % complex constant for w=1:W %b/ state variables s0 = 0; s1 = 0; s2 = 0; %c/ 'main' loop for ind = 1:L-1 %number of iterations is (by one) less than the length of signal %new state s0 = f(ind,w) + cos_pik_term2 * s1 - s2; % (*) %shifting the state variables s2 = s1; s1 = s0; end %d/ final computations s0 = f(L,w) + cos_pik_term2 * s1 - s2; %correspond to one extra performing of (*) c(cnt_freq,w) = s0 - s1*cc; %resultant complex coefficient %complex multiplication substituting the last iteration %and correcting the phase for (potentially) non-integer valued %frequencies at the same time c(cnt_freq,w) = c(cnt_freq,w) * exp(-1i*pik_term*(L-1)); end end ltfat/inst/comp/comp_zerofilt.m0000664000175000017500000000322412612404256016534 0ustar susnaksusnakfunction H = comp_zerofilt(wintype,fs,chan_min,freqtoscale,scaletofreq,bwmul,bins,Ls) %-*- texinfo -*- %@deftypefn {Function} comp_zerofilt %@verbatim %COMP_ZEROFILT low-pass filter for warped filter banks %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_zerofilt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . kk = chan_min; while scaletofreq(kk+bwmul) > fs/Ls kk = kk-1/bins; end Minfilt = kk; Maxpos = floor(Ls/fs*scaletofreq(chan_min-1/bins+bwmul)); samples = freqtoscale((0:Maxpos)*fs/Ls); if samples(1) == -Inf samples(1) = samples(2); end FILTS = zeros(round(bins*(chan_min-Minfilt)),numel(samples)); for kk = 1:size(FILTS,1) FILTS(kk,:) = firwin(wintype,(samples-(chan_min-kk/bins))/(2*bwmul)); end H = zeros(2*numel(samples)-1,1); H(numel(samples):end) = sqrt(sum(abs(FILTS.^2),1)); H(1:numel(samples)-1) = H(end:-1:numel(samples)+1); ltfat/inst/comp/comp_ups.m0000664000175000017500000000772112612404256015513 0ustar susnaksusnakfunction fups = comp_ups(f,varargin) %-*- texinfo -*- %@deftypefn {Function} comp_ups %@verbatim %COMP_UPS Upsampling % Usage: fups = comp_ups(f,a) % fups = comp_ups(f,a,type,'dim',dim) % fups = comp_ups(f,a,skip,L,'dim',dim) % % Input parameters: % f : Input vector/matrix. % a : Upsampling factor. % type : Type of the upsampling/initial skip. % L : Required output length. % dim : Direction of upsampling. % Output parameters: % fups : Upsampled vector/matrix. % % Upsamples input f by a factor a (puts a-1 zeros between data elements) % along dimension dim. If dim is not specified, first non-singleton % dimension is used. Parameter type (integer from [0:3]) specifies whether the upsampling % includes beginning/tailing zeros: % % type=0 (default): Includes just tailing zeros. % type=1: No beginning nor tailing zeros. % type=2: Includes just begining zeros. % type=3: Includes both. % % If non-empty parameter L is passed, it specifies the required output % length and the type changes to skip which denotes how many zeros to % add before the first sample. % % Examples: % --------- % % The outcome of the default upsampling type is equal to the upsampling performed % directly in the frequency domain using repmat: % % f = 1:4; % a = 3; % fupsTD = comp_ups(f,a) % fupsFD = real(ifft(repmat(fft(f),1,a))) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_ups.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . definput.keyvals.dim = []; definput.keyvals.a = 2; definput.keyvals.type = 0; definput.keyvals.L = []; [flags,kv,a,type,L]=ltfatarghelper({'a','type','L'},definput,varargin); % a have to be positive integer if(a<1) a = 1; end if(type<0) type = 0; end if(a<0 || rem(a,1)~=0) error('%s: Parameter *a* have to be a positive integer.',upper(mfilename)); end % if L == [], supported types are 0-3 if(isempty(L)&&(type<0||type>3)) error('%s: Unsupported upsampling type.',upper(mfilename)); end if(~isempty(L)&&type>=L) error('%s: Initial zeros count is bigger than the output length.',upper(mfilename)); end if(ndims(f)>2) error('%s: Multidimensional signals (d>2) are not supported.',upper(mfilename)); end %% ----- step 1 : Verify f and determine its length ------- [f,~,Ls,~,dim,~,order]=assert_sigreshape_pre(f,[],kv.dim,upper(mfilename)); if(~isempty(L)) fups=zeros(L,size(f,2),assert_classname(f)); fbound = min(ceil((L-type)/a),Ls); fups(1+type:a:fbound*a+type,:)=f(1:fbound); else if(type==0) % Include just tailing zeros. fups=zeros(a*Ls,size(f,2),assert_classname(f)); fups(1:a:end,:)=f; elseif(type==1) % Do not include beginning nor tailing zeros. fups=zeros(a*Ls-(a-1),size(f,2),assert_classname(f)); fups(1:a:end,:)=f; elseif(type==2) % Include just beginning zeros. fups=zeros(a*Ls,size(f,2),assert_classname(f)); fups(a:a:end,:)=f; elseif(type==3) % Include both beginning and tailing zeros. fups=zeros(a*Ls+a-1,size(f,2),assert_classname(f)); fups(a:a:end,:)=f; end end permutedSizeAlt = size(fups); fups=assert_sigreshape_post(fups,dim,permutedSizeAlt,order); ltfat/inst/comp/comp_gabdual_long.m0000664000175000017500000000273612612404256017323 0ustar susnaksusnakfunction gd=comp_gabdual_long(g,a,M); %-*- texinfo -*- %@deftypefn {Function} comp_gabdual_long %@verbatim %COMP_GABDUAL_LONG Compute dual window % % This is a computational subroutine, do not call it directly, use % GABDUAL instead. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_gabdual_long.html} %@seealso{gabdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=length(g); R=size(g,2); gf=comp_wfac(g,a,M); b=L/M; N=L/a; c=gcd(a,M); d=gcd(b,N); p=b/d; q=N/d; gdf=zeros(p*q*R,c*d,assert_classname(g)); G=zeros(p,q*R,assert_classname(g)); for ii=1:c*d % This essentially computes pinv of each block. G(:)=gf(:,ii); S=G*G'; Gpinv=(S\G); gdf(:,ii)=Gpinv(:); end; gd=comp_iwfac(gdf,L,a,M); if isreal(g) gd=real(gd); end; ltfat/inst/comp/gabpars_from_windowsignal.m0000664000175000017500000000470112612404256021110 0ustar susnaksusnakfunction [f,g,L,Ls,W,info] = gabpars_from_windowsignal(f,g,a,M,L,lt,callfun) %-*- texinfo -*- %@deftypefn {Function} gabpars_from_windowsignal %@verbatim %GABPARS_FROM_WINDOWSIGNAL Compute g and L from window and signal % Usage: [g,g.info,L] = gabpars_from_windowsignal(f,g,a,M,L); % % Use this function if you know an input signal, a window and a lattice % for the DGT. The function will calculate a transform length L and % evaluate the window g into numerical form. The signal will be padded and % returned as a column vector. % % If the transform length is unknown (as it usually is unless explicitly % specified by the user), set L to be [] in the input to this function. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/gabpars_from_windowsignal.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<6 stacknames=dbstack; callfun=stacknames(2).name; end; % ----- step 1 : Verify f and determine its length ------- % Change f to correct shape. [f,Ls,W,wasrow,remembershape]=comp_sigreshape_pre(f,callfun,0); if isempty(L) % ----- step 2b : Verify a, M and get L from the signal length f---------- L=dgtlength(Ls,a,M); else % ----- step 2a : Verify a, M and get L Luser=dgtlength(L,a,M); if Luser~=L error(['%s: Incorrect transform length L=%i specified. Next valid length ' ... 'is L=%i.'],callfun,L,Luser) end; end; % ----- step 3 : Determine the window [g,info]=gabwin(g,a,M,L,'callfun',callfun); if L. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_iuwfbt.m0000664000175000017500000000566212612404256016206 0ustar susnaksusnakfunction f=comp_iuwfbt(c,wtNodes,nodesUps,rangeLoc,rangeOut,scaling) %-*- texinfo -*- %@deftypefn {Function} comp_iuwfbt %@verbatim %COMP_IUWFBT Compute Inverse Undecimated Wavelet Filter-Bank Tree % Usage: f=comp_iuwfbt(c,wtNodes,nodesUps,rangeLoc,rangeOut) % % Input parameters: % c : Coefficient array of dim. L*M*W. % wtNodes : Filterbank tree nodes (elementary filterbanks) in % BF order. Length nodeNo cell array of structures. % nodesUps : Filters upsampling factor of each node. Array of % length nodeNo. % rangeLoc : Idxs of each node inputs. Length nodeNo % cell array of vectors. % rangeOut : Input subband idxs of each node inputs. % % Output parameters: % f : Reconstructed data L*W array. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_iuwfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L = size(c,1); W = size(c,3); catmp = []; ca = []; % For each node in tree in the BF order... for jj=1:length(wtNodes) % Node filters subs. factors a = wtNodes{jj}.a; % Optionally scale the filters g = comp_filterbankscale(wtNodes{jj}.g(:),a(:),scaling); % Node filters to a matrix gMat = cell2mat(cellfun(@(gEl) gEl.h(:),g','UniformOutput',0)); % Node filters initial skips gOffset = cellfun(@(gEl) gEl.offset,wtNodes{jj}.g); % Zero index position of the upsampled filters. offset = nodesUps(jj).*(gOffset) ;%- nodesUps(jj); % Re-allocate catmp if the filtNo differs from the one used in previous % iteration. filtNo = size(gMat,2); if(filtNo~=size(catmp,2)) catmp = zeros(L,filtNo,W,class(c)); end % Read from input subbands catmp(:,rangeLoc{jj},:) = c(:,rangeOut{jj},:); diffRange = 1:filtNo; diffRange(rangeLoc{jj}) = []; % Read from intermediate outputs if(~isempty(diffRange)) catmp(:,diffRange(end:-1:1),:) = ca(:,1:numel(diffRange),:); end %Run filterbank catmp = comp_iatrousfilterbank_td(catmp,gMat,nodesUps(jj),offset); %Save intermediate output ca = horzcat(ca(:,numel(diffRange)+1:end,:),reshape(catmp,size(catmp,1),1,size(catmp,2))); end f = catmp; ltfat/inst/comp/comp_filterbank_fftbl.m0000664000175000017500000000437012612404256020177 0ustar susnaksusnakfunction c=comp_filterbank_fftbl(F,G,foff,a,realonly) %-*- texinfo -*- %@deftypefn {Function} comp_filterbank_fftbl %@verbatim %COMP_FILTERBANK_FFTBL Compute filtering in FD % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_filterbank_fftbl.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . M = numel(G); [L,W] = size(F); c = cell(M,1); if size(a,2)>1 afrac=a(:,1)./a(:,2); else afrac = a(:,1); end N = L./afrac; assert(all(N-round(N)<1e-6),'%s: Bad output length. \n',upper(mfilename)); N = round(N); fsuppRangeSmall = cellfun(@(fEl,GEl) mod([fEl:fEl+numel(GEl)-1].',L)+1 ,num2cell(foff),G,'UniformOutput',0); for m=1:M c{m}=zeros(N(m),W,assert_classname(F,G{m})); for w=1:W Ftmp = F(fsuppRangeSmall{m},w).*G{m}; postpadL = ceil(max([N(m),numel(G{m})])/N(m))*N(m); Ftmp = postpad(Ftmp,postpadL); Ftmp = sum(reshape(Ftmp,N(m),numel(Ftmp)/N(m)),2); Ftmp = circshift(Ftmp,foff(m)); c{m}(:,w)=ifft(Ftmp)/afrac(m); end; end % Handle the real only as a separate filter using recursion realonlyRange = 1:M; realonlyRange = realonlyRange(realonly>0); if ~isempty(realonlyRange) Gconj = cellfun(@(gEl) conj(gEl(end:-1:1)),G(realonlyRange),'UniformOutput',0); LG = cellfun(@(gEl) numel(gEl),Gconj); foffconj = -L+mod(L-foff(realonlyRange)-LG,L)+1; aconj = a(realonlyRange,:); cconj = comp_filterbank_fftbl(F,Gconj,foffconj,aconj,0); for ii=1:numel(cconj) c{realonlyRange(ii)} = (c{realonlyRange(ii)} + cconj{ii})/2; end end ltfat/inst/comp/comp_idgtreal_fac.m0000664000175000017500000000716712612404256017314 0ustar susnaksusnakfunction f=comp_idgtreal_fac(coef,gf,L,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_idgtreal_fac %@verbatim %COMP_IDGTREAL_FAC Full-window factorization of a Gabor matrix assuming. % Usage: f=comp_idgtreal_fac(c,gf,L,a,M) % % Input parameters: % c : M x N array of coefficients. % gf : Factorization of window (from facgabm). % a : Length of time shift. % M : Number of frequency shifts. % Output parameters: % f : Reconstructed signal. % % Do not call this function directly, use IDGT. % This function does not check input parameters! % % If input is a matrix, the transformation is applied to % each column. % % This function does not handle multidimensional data, take care before % you call it. % % References: % T. Strohmer. Numerical algorithms for discrete Gabor expansions. In % H. G. Feichtinger and T. Strohmer, editors, Gabor Analysis and % Algorithms, chapter 8, pages 267-294. Birkhauser, Boston, 1998. % % P. L. Soendergaard. An efficient algorithm for the discrete Gabor % transform using full length windows. IEEE Signal Process. Letters, % submitted for publication, 2007. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idgtreal_fac.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK % Calculate the parameters that was not specified. N=L/a; b=L/M; M2=floor(M/2)+1; R=prod(size(gf))/L; %W=size(coef,2)/(N*R); W = size(coef,3); N=L/a; b=L/M; [c,h_a,h_m]=gcd(a,M); h_a=-h_a; p=a/c; q=M/c; d=N/q; ff=zeros(p,q*W,c,d,assert_classname(coef,gf)); C=zeros(q*R,q*W,c,d,assert_classname(coef,gf)); f=zeros(L,W,assert_classname(coef,gf)); % Apply ifft to the coefficients. coef=ifftreal(coef,M)*sqrt(M); % Set up the small matrices coef=reshape(coef,M,N,R,W); if p==1 for rw=0:R-1 for w=0:W-1 for s=0:d-1 for l=0:q-1 for u=0:q-1 C(u+1+rw*q,l+1+w*q,:,s+1)=coef((1:c)+l*c,mod(u+s*q+l,N)+1,rw+1,w+1); end; end; end; end; end; else % Rational oversampling for rw=0:R-1 for w=0:W-1 for s=0:d-1 for l=0:q-1 for u=0:q-1 C(u+1+rw*q,l+1+w*q,:,s+1)=coef((1:c)+l*c,mod(u+s*q-l*h_a,N)+1,rw+1,w+1); end; end; end; end; end; end; % FFT them if d>1 C=fft(C,[],4); end; % Multiply them for r=0:c-1 for s=0:d-1 CM=reshape(C(:,:,r+1,s+1),q*R,q*W); GM=reshape(gf(:,r+s*c+1),p,q*R); ff(:,:,r+1,s+1)=GM*CM; end; end; % Inverse FFT if d>1 ff=ifft(ff,[],4); end; % Place the result if p==1 for s=0:d-1 for w=0:W-1 for l=0:q-1 f((1:c)+mod(s*M+l*a,L),w+1)=reshape(ff(1,l+1+w*q,:,s+1),c,1); end; end; end; else % Rational oversampling for s=0:d-1 for w=0:W-1 for l=0:q-1 for k=0:p-1 f((1:c)+mod(k*M+s*p*M-l*h_a*a,L),w+1)=reshape(ff(k+1,l+1+w*q,:,s+1),c,1); end; end; end; end; end; f=real(f); ltfat/inst/comp/comp_dct.m0000664000175000017500000000460412612404256015453 0ustar susnaksusnakfunction c = comp_dct(f,type) %-*- texinfo -*- %@deftypefn {Function} comp_dct %@verbatim %COMP_DCT Calculates DCT % Input parameters: % f : Input data. % type : DCT version. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dct.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . [L,W] = size(f); switch type case 1 c=zeros(L,W,assert_classname(f)); f2=[f;flipud(f(2:L-1,:))]/sqrt(2); f2(1,:)=f2(1,:)*sqrt(2); f2(L,:)=f2(L,:)*sqrt(2); s1=fft(f2)/sqrt(2*L-2); c=s1(1:L,:)+[zeros(1,W);s1(2*L-2:-1:L+1,:);zeros(1,W)]; c(2:L-1,:)=c(2:L-1,:)/sqrt(2); case 2 c=zeros(L,W,assert_classname(f)); m1=1/sqrt(2)*exp(-(0:L-1)*pi*i/(2*L)).'; m1(1)=1; m2=1/sqrt(2)*exp((1:L-1)*pi*i/(2*L)).'; s1=fft([f;flipud(f)]); c=bsxfun(@times,s1(1:L,:),m1)+[zeros(1,W);bsxfun(@times,s1(2*L:-1:L+2,:),m2)]; c=c/sqrt(L)/2; case 3 c=zeros(2*L,W,assert_classname(f)); m1=1/sqrt(2)*exp(-(0:L-1)*pi*i/(2*L)).'; m1(1)=1; m2=1/sqrt(2)*exp((L-1:-1:1)*pi*i/(2*L)).'; c=[bsxfun(@times,m1,f);zeros(1,W);bsxfun(@times,m2,f(L:-1:2,:))]; c=fft(c)/sqrt(L); c=c(1:L,:); case 4 s1=zeros(2*L,W,assert_classname(f)); c=zeros(L,W,assert_classname(f)); m1=1/sqrt(2)*exp(-(0:L-1)*pi*i/(2*L)).'; m2=1/sqrt(2)*exp((1:L)*pi*i/(2*L)).'; s1=[bsxfun(@times,m1,f);bsxfun(@times,flipud(m2),f(L:-1:1,:))]; s1=exp(-pi*i/(4*L))*fft(s1)/sqrt(2*L); c=bsxfun(@times,s1(1:L,:),m1)+bsxfun(@times,s1(2*L:-1:L+1,:),m2); otherwise error('%s: Type not supported.',upper(mfilename)); end if isreal(f) c=real(c); end; ltfat/inst/comp/arg_plotfwt.m0000664000175000017500000000234012612404256016206 0ustar susnaksusnakfunction definput=arg_plotfwt(definput) definput.flags.frqbands = {'uni', 'dyad'}; definput.flags.wavplottype = {'image', 'stem', 'surf','waterfall'}; definput.keyvals.fc=[]; definput.keyvals.ntickpos=10; definput.keyvals.tick=[]; definput.groups.audtick={'tick',[0,100,250,500,1000,2000,4000,8000,16000,32000]}; %-*- texinfo -*- %@deftypefn {Function} arg_plotfwt %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_plotfwt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_quadtfdist.m0000664000175000017500000000254512612404256017053 0ustar susnaksusnakfunction p = comp_quadtfdist(f, q);; %-*- texinfo -*- %@deftypefn {Function} comp_quadtfdist %@verbatim % Comp_QUADTFDIST Compute quadratic time-frequency distribution % Usage p = comp_quadtfdist(f, q);; % % Input parameters: % f : Input vector % q : Kernel % % Output parameters: % p : Quadratic time-frequency distribution % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_quadtfdist.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven if isreal(f) z = comp_fftanalytic(f); else z = f; end; R = comp_instcorrmat(z,z); c = ifft2(fft2(R).*fft2(q)); p = fft(c); ltfat/inst/comp/comp_fftreal.m0000664000175000017500000000214212612404256016317 0ustar susnaksusnakfunction f=comp_fftreal(f) %-*- texinfo -*- %@deftypefn {Function} comp_fftreal %@verbatim %COMP_FFTREAL Compute an FFTREAL %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_fftreal.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . N=size(f,1); N2=floor(N/2)+1; % Force FFT along dimension 1, since we have permuted the dimensions % manually f=fft(f,N,1); f=f(1:N2,:); ltfat/inst/comp/comp_cellcoef2tf.m0000664000175000017500000000346612612404256017076 0ustar susnaksusnakfunction coef = comp_cellcoef2tf(coef,maxLen) %-*- texinfo -*- %@deftypefn {Function} comp_cellcoef2tf %@verbatim %COMP_CELLCOEF2TF Cell to a tf-layout % Usage: coef = comp_cellcoef2tf(coef,maxLen) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_cellcoef2tf.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . coefLenMax = max(cellfun(@(cEl)size(cEl,1),coef)); if nargin>1 coefLenMax = min([coefLenMax,maxLen]); end coefTmp = zeros(coefLenMax,numel(coef),size(coef{1},2),class(coef{1})); for ii=1:numel(coef) if size(coef{ii},1) == 1 coefTmp(:,ii) = coef{ii}; continue; end if ~isoctave coefTmp(:,ii) = interp1(coef{ii},linspace(1,size(coef{ii},1),... coefLenMax),'nearest'); else coefRe = interp1(real(coef{ii}),linspace(1,size(coef{ii},1),... coefLenMax),'nearest'); coefIm = interp1(imag(coef{ii}),linspace(1,size(coef{ii},1),... coefLenMax),'nearest'); coefTmp(:,ii) = coefRe + 1i*coefIm; end end coef = coefTmp'; ltfat/inst/comp/comp_filterbank_fft.m0000664000175000017500000000232112612404256017653 0ustar susnaksusnakfunction c=comp_filterbank_fft(F,G,a) %-*- texinfo -*- %@deftypefn {Function} comp_filterbank_fft %@verbatim %COMP_FILTERBANK_FFT Compute filtering in FD % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_filterbank_fft.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . M = numel(G); [L,W] = size(F); c = cell(M,1); N = L./a; for m=1:M c{m}=zeros(N(m),W,assert_classname(F,G{m})); for w=1:W c{m}(:,w)=ifft(sum(reshape(F(:,w).*G{m},N(m),a(m)),2))/a(m); end; end ltfat/inst/comp/arg_groupthresh.m0000664000175000017500000000177212612404256017071 0ustar susnaksusnakfunction definput=arg_groupthresh(definput) definput.flags.grouptype={'group','elite'}; %-*- texinfo -*- %@deftypefn {Function} arg_groupthresh %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_groupthresh.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_inonsepdgtreal_quinqux.m0000664000175000017500000000471612612404256021515 0ustar susnaksusnakfunction f=comp_inonsepdgtreal_quinqux(coef,g,a,M,do_timeinv) %-*- texinfo -*- %@deftypefn {Function} comp_inonsepdgtreal_quinqux %@verbatim %COMP_INONSEPDGTREAL_QUINQUX Compute Inverse discrete Gabor transform % Usage: f=inonsepdgt(c,g,a,M); % % Input parameters: % c : Array of coefficients. % g : Window function. % a : Length of time shift. % M : Number of channels % do_timeinv : Do a time invariant phase ? % Output parameters: % f : Signal. % % % This is a computational subroutine, do not call it directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_inonsepdgtreal_quinqux.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Nicki Holighaus and Peter L. Soendergaard % TESTING: TEST_NONSEPDGT % REFERENCE: OK % Check input paramameters. M2=size(coef,1); N=size(coef,2); W=size(coef,3); L=N*a; coef2=zeros(M,N,W,assert_classname(coef,g)); coef2(1:M2,:,:)=coef; if rem(M,2)==0 coef2(M2+1:M,1:2:N-1,:)=conj(coef(M2-1:-1:2,1:2:N-1,:)); coef2(M2:M,2:2:N ,:) =conj(coef(M2-1:-1:1,2:2:N,:)); else coef2(M2+1:M,1:2:N-1,:)=conj(coef(M2:-1:2,1:2:N-1,:)); coef2(M2+1:M,2:2:N ,:)=conj(coef(M2-1:-1:1,2:2:N,:)); end; coef=coef2; lt=[1 2]; mwin=comp_nonsepwin2multi(g,a,M,lt,L); % phase factor correction (backwards), for more information see % analysis routine E = exp(2*pi*i*a*kron(0:N/2-1,ones(1,2)).*... rem(kron(ones(1,N/2), 0:2-1),2)/M); coef = bsxfun(@times,coef,E); % simple algorithm: split into sublattices and add the result from eacg % sublattice. f=zeros(L,W,assert_classname(coef,g)); for ii=0:2-1 % Extract sublattice sub=coef(:,ii+1:2:end,:); f=f+comp_idgt(sub,mwin(:,ii+1),2*a,[0 1],0,0); end; ltfat/inst/comp/assert_squarelat.m0000664000175000017500000000364112612404256017245 0ustar susnaksusnakfunction assert_squarelat(a,M,R,callfun,flag) %-*- texinfo -*- %@deftypefn {Function} assert_squarelat %@verbatim %ASSERT_SQUARELAT Validate lattice and window size. % Usage: assert_squarelat(a,M,R,callfun,flag); % % Input parameters: % a : Length of time shift. % M : Number of modulations. % R : Number of multiwindows. % callfun : Name of calling function. % flag : See below. % % if flag>0 test if system is at least critically sampled. % % This routine deliberately checks the validity of M before a, such % that it can be used for DWILT etc., where you just pass a=M. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/assert_squarelat.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin==4 flag=0; end; if (prod(size(M))~=1 || ~isnumeric(M)) error('%s: M must be a scalar',callfun); end; if (prod(size(a))~=1 || ~isnumeric(a)) error('%s: a must be a scalar',callfun); end; if rem(M,1)~=0 error('%s: M must be an integer',callfun); end; if rem(a,1)~=0 error('%s: a must be an integer',callfun); end; if flag>0 if a>M*R error('%s: The lattice must not be undersampled',callfun); end; end; ltfat/inst/comp/comp_fftanalytic.m0000664000175000017500000000245612612404256017210 0ustar susnaksusnakfunction z = comp_fftanalytic(s) %-*- texinfo -*- %@deftypefn {Function} comp_fftanalytic %@verbatim %COMP_FFTANALYTIC Compute analytic representation % % Usage: z = comp_fftanalytic(s); % % COMP_FFTANALYTIC(s) computes the analytic representation of s. % The analytic representation is computed through the FFT of f. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_fftanalytic.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven Ls = size(s,1); H = floor(Ls/2); z = fft(s); z(2:Ls-H,:) = 2*z(2:Ls-H,:); z(H+2:Ls,:) = 0; z = ifft(z); ltfat/inst/comp/assert_classname.m0000664000175000017500000000327212612404256017212 0ustar susnaksusnakfunction classname = assert_classname(varargin) %-*- texinfo -*- %@deftypefn {Function} assert_classname %@verbatim % ASSERT_CLASSNAME % % Returns name of the least "simplest" common data type. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/assert_classname.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Array of data types to be checked. Ordered from the "simplest" to the % most "complex". typesToTest = {'single','double'}; if nargin==0 || isempty(varargin) classname = 'double'; return; end if ~all(cellfun(@(vEl) isnumeric(vEl),varargin)) error('%s: Parameters are not numeric types. ',upper(mfilename)); end % Shortcut to double if all(cellfun(@(vEl) isa(vEl,'double'),varargin)) classname = 'double'; return; end % Go trough all the types, halt if any of the inputs is of the specified % type. for ii=1:numel(typesToTest) if any(cellfun(@(vEl) isa(vEl,typesToTest{ii}),varargin)) classname = typesToTest{ii}; return; end end ltfat/inst/comp/comp_irdgt.m0000664000175000017500000000270112612404256016006 0ustar susnaksusnakfunction cout=comp_irdgt(cin,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_irdgt %@verbatim %COMP_IRDGT Compute inverse real DGT. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_irdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . N=size(cin,1)/M; W=size(cin,2); L=N*a; cin=reshape(cin,M,N,W); Mhalf=ceil(M/2); Mend=Mhalf*2-1; cout=zeros(M,N,W,assert_classname(cin)); % Copy the first coefficient, it is real cout(1,:,:)=cin(1,:,:); cout(2:Mhalf,:,:)=(cin(2:2:Mend,:,:)- i*cin(3:2:Mend,:,:))/sqrt(2); cout(M-Mhalf+2:M,:,:)= (cin(Mend-1:-2:2,:,:) +i*cin(Mend:-2:3,:,:))/sqrt(2); % If f has an even length, we must also copy the Nyquest-wave % (it is real) if mod(M,2)==0 cout(M/2+1,:,:)=cin(M,:,:); end; ltfat/inst/comp/comp_pchirp.m0000664000175000017500000000263612612404256016171 0ustar susnaksusnakfunction g=comp_pchirp(L,n) %-*- texinfo -*- %@deftypefn {Function} comp_pchirp %@verbatim %COMP_PCHIRP Compute periodic chirp % Usage: g=comp_pchirp(L,n); % % pchirp(L,n) returns a periodic, discrete chirp of length L that % revolves n times around the time-frequency plane in frequency. n must be % an integer number. % % This is a computational routine. Do not call it unless you have % verified the input parameters. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_pchirp.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: OK % REFERENCE: OK l= (0:L-1).'; X = mod(mod(mod(n*l,2*L).*l,2*L)*(L+1),2*L); g = exp(pi*1i*X/L); ltfat/inst/comp/comp_filterbankscale.m0000664000175000017500000000267512612404256020040 0ustar susnaksusnakfunction g = comp_filterbankscale(g,a,scaling) if strcmp(scaling,'scale') g = cellfun(@(gEl,aEl) setfield(gEl,'h',gEl.h./aEl),g(:),... num2cell(a(:)),... 'UniformOutput',0); elseif strcmp(scaling,'noscale') % Do nothing elseif strcmp(scaling,'sqrt') g = cellfun(@(gEl,aEl) setfield(gEl,'h',gEl.h./sqrt(aEl)),g(:),... num2cell(a(:)),... 'UniformOutput',0); else error('%s: Unrecognized scaling flag.',upper(mfilename) ); end %-*- texinfo -*- %@deftypefn {Function} comp_filterbankscale %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_filterbankscale.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_fwtpack2cell.m0000664000175000017500000000436212612404256017263 0ustar susnaksusnakfunction ccell=comp_fwtpack2cell(F,c) %-*- texinfo -*- %@deftypefn {Function} comp_fwtpack2cell %@verbatim %COMP_FWTPACK2CELL Change FWT coef. format from pack to cell % Usage: ccell=comp_fwtpack2cell(F,c) % % Input parameters: % F : FWT frame object % c : Coefficients in pack format % Output parameters: % ccell : Coefficients in cell format % % COMP_FWTPACK2CELL(F,c) exctracts individual FWT subbands from % coefficients in packed format c as elements of a cell array. F must % be of type 'fwt' e.g. obtained by F=frame('fwt',...) and c must % be a Lc xW matrix, obtained by FRANA or BLOCKANA. % % The inverse operation is mere c=cell2mat(ccel) % % THE FUNCTION DOES NOT CHECK THE INPUT PARAMETERS IN ANY WAY! % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_fwtpack2cell.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . w = F.g; filtNo = numel(w.g); J = F.J; subbNo = (filtNo-1)*J+1; Lc = zeros(subbNo,1); runPtr = 0; levelLen = size(c,1)/F.red; for jj=1:J for ff=filtNo:-1:2 Lc(end-runPtr) = ceil(levelLen/w.a(ff)); runPtr = runPtr + 1; end levelLen = ceil(levelLen/w.a(1)); end Lc(1)=levelLen; ccell = mat2cell(c,Lc); % The following does not work for a not being all equal. % % filtNo = numel(F.g.g); % a = F.g.a(1); % J = F.J; % % subbNo = (filtNo-1)*J+1; % Lc = zeros(subbNo,1); % % Lc(1:filtNo) = size(c,1)/(1+(filtNo-1)*(a^(J)-1)/(a-1)); % % Lc(filtNo+1:end) = kron(Lc(1).*a.^(1:J-1),ones(1,filtNo-1)); % % ccell = mat2cell(c,Lc); ltfat/inst/comp/arg_fwtcommon.m0000664000175000017500000000200512612404256016516 0ustar susnaksusnakfunction definput = arg_fwtcommon(definput) %-*- texinfo -*- %@deftypefn {Function} arg_fwtcommon %@verbatim %definput.flags.ansy = {'syn','ana'}; %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_fwtcommon.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . definput.keyvals.a = []; ltfat/inst/comp/comp_nonsepwin2multi.m0000664000175000017500000000234312612404256020054 0ustar susnaksusnakfunction mwin=comp_nonsepwin2multi(g,a,M,lt,L); %-*- texinfo -*- %@deftypefn {Function} comp_nonsepwin2multi %@verbatim % Create multiwindow from non-sep win %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_nonsepwin2multi.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . g=fir2long(g,L); Lg=size(g,1); b=L/M; mwin=zeros(Lg,lt(2),assert_classname(g)); l=long2fir((0:L-1).'/L,Lg); for ii=0:lt(2)-1 wavenum=mod(ii*lt(1),lt(2))*b/lt(2); mwin(:,ii+1)=exp(2*pi*i*l*wavenum).*circshift(g,ii*a); end; ltfat/inst/comp/comp_idwilt.m0000664000175000017500000000430612612404256016174 0ustar susnaksusnakfunction [f]=comp_idwilt(coef,g) %-*- texinfo -*- %@deftypefn {Function} comp_idwilt %@verbatim %COMP_IDWILT Compute Inverse discrete Wilson transform. % % This is a computational routine. Do not call it % directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idwilt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK M=size(coef,1)/2; N=2*size(coef,2); W=size(coef,3); a=M; L=N*a; coef2=zeros(2*M,N,W,assert_classname(coef,g)); % First and middle modulation are transferred unchanged. coef2(1,1:2:N,:) = coef(1,:,:); if mod(M,2)==0 coef2(M+1,1:2:N,:) = coef(M+1,:,:); else coef2(M+1,2:2:N,:) = coef(M+1,:,:); end; if M>2 % cosine, first column. coef2(3:2:M,1:2:N,:) = 1/sqrt(2)*coef(3:2:M,:,:); coef2(2*M-1:-2:M+2,1:2:N,:) = 1/sqrt(2)*coef(3:2:M,:,:); % sine, second column coef2(3:2:M,2:2:N,:) = -1/sqrt(2)*i*coef(M+3:2:2*M,:,:); coef2(2*M-1:-2:M+2,2:2:N,:) = 1/sqrt(2)*i*coef(M+3:2:2*M,:,:); end; % sine, first column. coef2(2:2:M,1:2:N,:) = -1/sqrt(2)*i*coef(2:2:M,:,:); coef2(2*M:-2:M+2,1:2:N,:) = 1/sqrt(2)*i*coef(2:2:M,:,:); % cosine, second column coef2(2:2:M,2:2:N,:) = 1/sqrt(2)*coef(M+2:2:2*M,:,:); coef2(2*M:-2:M+2,2:2:N,:) = 1/sqrt(2)*coef(M+2:2:2*M,:,:); f = comp_isepdgt(coef2,g,L,a,2*M,0); % Apply the final DGT %f=comp_idgt(coef2,g,a,[0 1],0,0); % Clean signal if it is known to be real if (isreal(coef) && isreal(g)) f=real(f); end; ltfat/inst/comp/arg_filterbankdual.m0000664000175000017500000000204212612404256017475 0ustar susnaksusnakfunction definput = arg_filterbankdual(definput) definput.flags.painless = {'none','forcepainless'}; definput.keyvals.L = []; %-*- texinfo -*- %@deftypefn {Function} arg_filterbankdual %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_filterbankdual.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_irdgtii.m0000664000175000017500000000271512612404256016335 0ustar susnaksusnakfunction [cout]=comp_irdgtii(cin,a) %-*- texinfo -*- %@deftypefn {Function} comp_irdgtii %@verbatim %COMP_IRDGTII Compute inverse real DGT type II % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_irdgtii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . M=size(cin,1); N=size(cin,2); W=size(cin,3); L=N*a; Mhalf=ceil(M/2); Mend=Mhalf*2-1; cout=zeros(M,N,W,assert_classname(cin)); % Copy the first coefficient, it is real cout(1,:,:)=cin(1,:,:); cout(2:Mhalf,:,:)=(cin(2:2:Mend,:,:)- i*cin(3:2:Mend,:,:))/sqrt(2); cout(M-Mhalf+2:M,:,:)= -(cin(Mend-1:-2:2,:,:) +i*cin(Mend:-2:3,:,:))/sqrt(2); % If f has an even length, we must also copy the Nyquest-wave % (it is imaginary) if mod(M,2)==0 cout(M/2+1,:,:)=-i*cin(M,:,:); end; ltfat/inst/comp/comp_idgtreal.m0000664000175000017500000000303112612404256016465 0ustar susnaksusnakfunction f=comp_idgtreal(coef,g,a,M,lt,phasetype) %-*- texinfo -*- %@deftypefn {Function} comp_idgtreal %@verbatim %COMP_IDGTREAL Compute IDGTREAL % Usage: f=comp_idgtreal(c,g,a,M,lt,phasetype); % % Input parameters: % c : Array of coefficients. % g : Window function. % a : Length of time shift. % M : Number of modulations. % lt : lattice type % Output parameters: % f : Signal. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idgtreal.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: TEST_DGT % REFERENCE: OK N=size(coef,2); L=N*a; if lt(2)==1 f = comp_isepdgtreal(coef,g,L,a,M,phasetype); else % Quinqux lattice f=comp_inonsepdgtreal_quinqux(coef,g,a,M); end; ltfat/inst/comp/complainif_notenoughargs.m0000664000175000017500000000214412612404256020744 0ustar susnaksusnakfunction complainif_notenoughargs(fnargin,limit,callfun) if nargin<3 callfun = mfilename; end if fnargin. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_ifilterbank.m0000664000175000017500000001043512612404256017172 0ustar susnaksusnakfunction f = comp_ifilterbank(c,g,a,L) %-*- texinfo -*- %@deftypefn {Function} comp_ifilterbank %@verbatim %COMP_IFILTERBANK Compute inverse filterbank %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_ifilterbank.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . M = numel(g); classname = assert_classname(c{1}); % Divide filters into time domain and frequency domain groups mFreq = 1:M; mTime = mFreq(cellfun(@(gEl) isfield(gEl,'h') ,g)>0); mFreq(mTime) = []; f = []; if ~isempty(mTime) % Pick imp. resp. gtime = cellfun(@(gEl) gEl.h, g(mTime),'UniformOutput',0); % Call the routine gskip = cellfun(@(gEl) gEl.offset ,g(mTime)); f = comp_ifilterbank_td(c(mTime),gtime,a(mTime),L,gskip,'per'); end if ~isempty(mFreq) % Pick frequency domain filters gfreq = g(mFreq); % Divide filters into the full-length and band-limited groups mFreqFullL = 1:numel(gfreq); amFreqCell = mat2cell(a(mFreq,:).',size(a,2),ones(1,numel(mFreq))); mFreqBL = mFreqFullL(cellfun(@(gEl,aEl) numel(gEl.H)~=L || (numel(aEl)>1 && aEl(2) ~=1), gfreq(:),amFreqCell(:))>0); mFreqFullL(mFreqBL) = []; mFreqFullL = mFreq(mFreqFullL); mFreqBL = mFreq(mFreqBL); F = []; if ~isempty(mFreqBL) conjG = cellfun(@(gEl) cast(gEl.H,classname), g(mFreqBL),'UniformOutput',0); foff = cellfun(@(gEl) gEl.foff, g(mFreqBL)); % Cast from logical to double. realonly = cellfun(@(gEl) cast(isfield(gEl,'realonly') && gEl.realonly,'double'), g(mFreqBL)); F = comp_ifilterbank_fftbl(c(mFreqBL),conjG,foff,a(mFreqBL,:),realonly); end if ~isempty(mFreqFullL) conjG = cellfun(@(gEl) cast(gEl.H,classname), g(mFreqFullL),'UniformOutput',0); % In case some of the filters were BL if isempty(F) F = comp_ifilterbank_fft(c(mFreqFullL),conjG,a(mFreqFullL)); else F = F + comp_ifilterbank_fft(c(mFreqFullL),conjG,a(mFreqFullL)); end end % In case some of the filters were TD if isempty(f) f = ifft(F); else f = f + ifft(F); end end % W = size(c{1},2); % M = numel(g); % classname = assert_classname(c{1}); % % f=zeros(L,W,classname); % % % This routine must handle the following cases % % % % * Time-side or frequency-side filters (test for isfield(g,'H')) % % % % * Cell array or matrix input (test for iscell(c)) % % % % * Regular or fractional subsampling (test for info.isfractional) % % % for m=1:M % conjG=conj(comp_transferfunction(g{m},L)); % % % For Octave 3.6 compatibility % conjG=cast(conjG,classname); % % % Handle fractional subsampling (this implies frequency side filters) % if isfield(g{m},'H') && numel(g{m}.H)~=L % N=size(c{m},1); % Llarge=ceil(L/N)*N; % amod=Llarge/N; % % for w=1:W % % This repmat cannot be replaced by bsxfun % innerstuff=middlepad(circshift(repmat(fft(c{m}(:,w)),amod,1),-g{m}.foff),L); % innerstuff(numel(g{m}.H)+1:end) = 0; % f(:,w)=f(:,w)+(circshift(innerstuff.*circshift(conjG,-g{m}.foff),g{m}.foff)); % end; % else % if iscell(c) % for w=1:W % % This repmat cannot be replaced by bsxfun % f(:,w)=f(:,w)+(repmat(fft(c{m}(:,w)),a(m),1).*conjG); % end; % else % for w=1:W % % This repmat cannot be replaced by bsxfun % f(:,w)=f(:,w)+(repmat(fft(c(:,m,w)),a(m),1).*conjG); % end; % end; % end; % end; % % f = ifft(f); ltfat/inst/comp/comp_downs.m0000664000175000017500000000622612612404256016035 0ustar susnaksusnakfunction fdowns = comp_downs(f,a,varargin) %-*- texinfo -*- %@deftypefn {Function} comp_downs %@verbatim %COMP_DOWNS Downsampling % Usage: fdowns = comp_downs(f,a) % fdowns = comp_downs(f,a,skip,L,'dim',dim) % % Input parameters: % f : Input vector/matrix. % a : Downsampling factor. % skip : Skipped initial samples. % L : Length of the portion of the input to be used. % dim : Direction of downsampling. % Output parameters: % fdowns : Downsampled vector/matrix. % % Downsamples input f by a factor a (leaves every a*th sample) along % dimension dim. If dim is not specified, first non-singleton % dimension is used. Parameter skip (integer) specifies how % many samples to skip from the beginning and L defines how many % elements of the input data are to be used starting at index 1+skip. % % Examples: % --------- % % The default behavior is equal to the subsampling performed % in the frequency domain using reshape and sum: % % f = 1:9; % a = 3; % fupsTD = comp_downs(f,a) % fupsFD = real(ifft(sum(reshape(fft(f),length(f)/a,a),2).'))/a % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_downs.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if(nargin<2) error('%s: Too few input parameters.',upper(mfilename)); end definput.keyvals.dim = []; definput.keyvals.skip = 0; definput.keyvals.L = []; [flags,kv,skip,L]=ltfatarghelper({'skip','L','dim'},definput,varargin); % a have to be a positive integer if(a<1) a = 1; end if(a<0 || rem(a,1)~=0) error('%s: Parameter *a* have to be a positive integer.',upper(mfilename)); end % supported type are [0--a-1] % if(type<0||type>(a-1)) % error('%s: Unsupported downsampling type.',upper(mfilename)); % end if(ndims(f)>2) error('%s: Multidimensional signals (d>2) are not supported.',upper(mfilename)); end % ----- Verify f and determine its length ------- [f,Lreq,Ls,~,dim,permutedsize,order]=assert_sigreshape_pre(f,L,kv.dim,upper(mfilename)); if(skip>=Ls) error('%s: Parameter *skip* have to be less than the input length.',upper(mfilename)); end if(~isempty(L)) if(Lreq+skip>Ls) error('%s: Input length is less than required samples count: L+skip>Ls.',upper(mfilename)); end Ls = Lreq+skip; end % Actual computation fdowns = f(1+skip:a:Ls,:); permutedSizeAlt = size(fdowns); fdowns=assert_sigreshape_post(fdowns,dim,permutedSizeAlt,order); ltfat/inst/comp/comp_atrousfilterbank_td.m0000664000175000017500000000435512612404256020752 0ustar susnaksusnakfunction c=comp_atrousfilterbank_td(f,g,a,offset) %-*- texinfo -*- %@deftypefn {Function} comp_atrousfilterbank_td %@verbatim %COMP_ATROUSFILTERBANK_TD Uniform filterbank by conv2 % Usage: c=comp_atrousfilterbank_fft(f,g,a,skip); % % Input parameters: % f : Input data - L*W array. % g : Filterbank filters - filtLen*M array. % a : Filter upsampling factor - scalar. % offset: Delay of the filters - scalar or array of length M. % % Output parameters: % c : L*M*W array of coefficients % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_atrousfilterbank_td.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %input data length L=size(f,1); %input channel number W=size(f,2); %filter number M=size(g,2); g = comp_ups(g,a,1); %length of filters filtLen = size(g,1); skip = -offset; % Allow filter delay only in the filter support range if(all(skip>=filtLen) || all(skip<0)) error('%s: The filter zero index position outside of the filter support.', upper(mfilename)); end if(numel(skip)==1) skip = skip*ones(M,1); end % Output memory allocation c=zeros(L,M,W,assert_classname(f,g)); % Explicitly extend the input. length(fext) = length(f) + 2*(filtLen-1) fext = comp_extBoundary(f,filtLen-1,'per','dim',1); % CONV2 does 2-D linear convolution. 'valid' option crops tails % length(fextconv2) = length(f) + (filtLen-1) % length(c(:,m,:)) = N % W channels done simultaneously by conv2 for m=1:M c(:,m,:) = comp_downs(conv2(fext,g(:,m),'valid'),1,skip(m),L); end; ltfat/inst/comp/arg_tfplot.m0000664000175000017500000000247612612404256016031 0ustar susnaksusnakfunction definput=arg_tfplot(definput) definput.flags.tc={'notc','tc'}; definput.flags.plottype={'image','contour','surf','pcolor'}; definput.flags.log={'db','dbsq','lin','linsq','linabs'}; definput.flags.colorbar={'colorbar','nocolorbar'}; definput.flags.display={'display','nodisplay'}; definput.keyvals.fontsize=14; definput.keyvals.fs=[]; definput.keyvals.clim=[]; definput.keyvals.dynrange=[]; %-*- texinfo -*- %@deftypefn {Function} arg_tfplot %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_tfplot.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_nyquistfilt.m0000664000175000017500000000314612612404256017274 0ustar susnaksusnakfunction H = comp_nyquistfilt(wintype,fs,chan_max,freqtoscale,scaletofreq,bwmul,bins,Ls) %-*- texinfo -*- %@deftypefn {Function} comp_nyquistfilt %@verbatim %COMP_NYQUISTFILT high-pass filter for warped filter banks %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_nyquistfilt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . kk = chan_max; while scaletofreq(kk-bwmul) < fs/2; kk = kk+1/bins; end Maxfilt = kk; Minpos = ceil(Ls/fs*scaletofreq(chan_max+1/bins-bwmul)); samples = freqtoscale((Minpos-1:floor(Ls/2))*fs/Ls); FILTS = zeros(round(bins*(Maxfilt-chan_max)),numel(samples)); for kk = 1:size(FILTS,1) FILTS(kk,:) = firwin(wintype,(samples-(chan_max+kk/bins))/(2*bwmul)); end H = zeros(2*numel(samples)-1,1); H(1:numel(samples)) = sqrt(sum(abs(FILTS.^2),1)); H(numel(samples)+1:end) = H(numel(samples)-1:-1:1); ltfat/inst/comp/comp_framelength_fusion.m0000664000175000017500000000273512612404256020563 0ustar susnaksusnakfunction L=comp_framelength_fusion(F,Ls); %-*- texinfo -*- %@deftypefn {Function} comp_framelength_fusion %@verbatim % This is highly tricky: Get the minimal transform length for each % subframe, and set the length as the lcm of that. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_framelength_fusion.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . Lsmallest=1; for ii=1:F.Nframes Lsmallest=lcm(Lsmallest,framelength(F.frames{ii},1)); end; L=ceil(Ls/Lsmallest)*Lsmallest; % Verify that we did not screw up the assumptions. for ii=1:F.Nframes if L~=framelength(F.frames{ii},L) error(['%s: Cannot determine a frame length. Frame no. %i does ' ... 'not support a length of L=%i.'],upper(mfilename),ii,L); end; end; ltfat/inst/comp/comp_instcorrmat.m0000664000175000017500000000321312612404256017241 0ustar susnaksusnakfunction R = comp_instcorrmat(f, g); %-*- texinfo -*- %@deftypefn {Function} comp_instcorrmat %@verbatim %COMP_INSTCORRMAT Compute instantaneous correlation matrix % Usage R = comp_instcorrmat(f, g); % % Input parameters: % f,g : Input vectors of the same length. % % Output parameters: % R : Instantaneous correlation matrix. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_instcorrmat.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven if ~all(size(f)==size(g)) error('%s: f and g must have the same size.', upper(mfilename)); end Ls = size(f, 1); if ~all(mod(Ls,2) == 0) f = postpad(f, Ls+1); g = postpad(g, Ls+1); end R = zeros(Ls,Ls,assert_classname(f,g)); for l = 0 : Ls-1; m = -min([Ls-l, l, round(Ls/2)-1]) : min([Ls-l, l, round(Ls/2)-1]); R(mod(Ls+m,Ls)+1, l+1) = f(mod(l+m, Ls)+1).*conj(g(mod(l-m, Ls)+1)); end R = R(1:Ls, 1:Ls); ltfat/inst/comp/comp_window.m0000664000175000017500000001307512612404256016212 0ustar susnaksusnakfunction [g,info] = comp_window(g,a,M,L,lt,callfun); %-*- texinfo -*- %@deftypefn {Function} comp_window %@verbatim %COMP_WINDOW Compute the window from numeric, text or cell array. % Usage: [g,info] = comp_window(g,a,M,L,s,callfun); % % [g,info]=COMP_WINDOW(g,a,M,L,lt,callfun) will compute the window % from a text description or a cell array containing additional % parameters. % % This function is the driving routine behind GABWIN and WILWIN. % % See the help on GABWIN and WILWIN for more information. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_window.html} %@seealso{gabwin, wilwin} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Basic discovery: Some windows depend on L, and some windows help define % L, so the calculation of L is window dependant. % Default values. info.gauss=0; info.wasrow=0; info.isfir=0; info.istight=0; info.isdual=0; isrect=(lt(2)==1); % Manually get the list of window names definput=arg_firwin(struct); firwinnames = definput.flags.wintype; % Create window if string was given as input. if ischar(g) winname=lower(g); switch(winname) case {'pgauss','gauss'} complain_L(L,callfun); g=comp_pgauss(L,a*M/L,0,0); info.gauss=1; info.tfr=a*M/L; case {'psech','sech'} complain_L(L,callfun); g=psech(L,a*M/L); info.tfr=a*M/L; case {'dualgauss','gaussdual'} complain_L(L,callfun); g=comp_pgauss(L,a*M/L,0,0); if isrect g=gabdual(g,a,M); else g=gabdual(g,a,M,'lt',lt); end; info.isdual=1; info.tfr=a*M/L; case {'tight'} complain_L(L,callfun); if isrect g=gabtight(a,M,L); else g=gabtight(a,M,L,'lt',lt); end; info.tfr=a*M/L; info.istight=1; case firwinnames [g,firinfo]=firwin(winname,M,'2'); info.isfir=1; if isrect if firinfo.issqpu && test_isfirtight(g,a,M) info.istight=1; end; end otherwise error('%s: Unknown window type: %s',callfun,winname); end; end; if iscell(g) if isempty(g) || ~ischar(g{1}) error('First element of window cell array must be a character string.'); end; winname=lower(g{1}); switch(winname) case {'pgauss','gauss'} complain_L(L,callfun); [g,info.tfr]=pgauss(L,g{2:end}); info.gauss=1; case {'psech','sech'} complain_L(L,callfun); [g,info.tfr]=psech(L,g{2:end}); case {'dual'} gorig = g{2}; [g,info.auxinfo] = comp_window(gorig,a,M,L,lt,callfun); if isrect g = gabdual(g,a,M,L); else g = gabdual(g,a,M,L,'lt',lt); end; % gorig can be string or cell array if info.auxinfo.isfir && test_isfir(gorig,M) info.isfir = 1; end info.isdual=1; case {'tight'} gorig = g{2}; [g,info.auxinfo] = comp_window(gorig,a,M,L,lt,callfun); if isrect g = gabtight(g,a,M,L); else g = gabtight(g,a,M,L,'lt',lt); end; % The same as in dual? if info.auxinfo.isfir && test_isfir(gorig,M) info.isfir = 1; end info.istight=1; case firwinnames [g,firinfo]=firwin(winname,g{2},'energy',g{3:end}); info.isfir=1; if isrect if firinfo.issqpu && test_isfirtight(g,a,M) info.istight=1; end; end otherwise error('Unsupported window type.'); end; end; if isnumeric(g) if size(g,2)>1 if size(g,1)==1 % g was a row vector. g=g(:); info.wasrow=1; end; end; end; if rem(length(g),M)~=0 % Zero-extend the window to a multiple of M g=fir2long(g,ceil(length(g)/M)*M); end; % Information to be determined post creation. info.wasreal = isreal(g); info.gl = length(g); if (~isempty(L) && (info.gl1 && isnumeric(gorig{2}) && gorig{2}<=M... || ischar(gorig) isfir = 1; else isfir = 0; end function istight=test_isfirtight(g,a,M) % Tests whether the Gabor system given by *a*, *M* and the FIR window % *g* forms a tight frame by computing *a* elements of the diagonal of % the frame operator. if numel(g) > M % There is still a small probability that the system is tight % or at least tight numerically. We have no cheap way how to % figure it out. istight = 0; return; end Lsmallest = lcm(a,M); Nsmallest = Lsmallest/a; glong = fir2long(g,Lsmallest).^2; gdiag = sum(reshape(glong,a,Nsmallest),2); istight = all(abs(gdiag(1)-gdiag)<1e-14); ltfat/inst/comp/comp_wfbt.m0000664000175000017500000000524212612404256015642 0ustar susnaksusnakfunction c=comp_wfbt(f,wtNodes,rangeLoc,rangeOut,ext) %-*- texinfo -*- %@deftypefn {Function} comp_wfbt %@verbatim %COMP_WFBT Compute Wavelet Filterbank Tree % Usage: c=comp_wfbt(f,wtNodes,rangeLoc,rangeOut,ext); % % Input parameters: % f : Input L*W array. % wtNodes : Filterbank tree nodes (elementary filterbanks) in % BF order. Length nodeNo cell array of structures. % rangeLoc : Idxs of each node terminal outputs. Length nodeNo % cell array of vectors. % rangeOut : Output subband idxs of each node terminal outputs. % ext : Type of the forward transform boundary handling. % % Output parameters: % c : Cell array of coefficients. Each element is one % subband (matrix with W columns). % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_wfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Do non-expansve transform if ext=='per' doPer = strcmp(ext,'per'); % Pre-allocated output c = cell(sum(cellfun(@(rEl) numel(rEl),rangeOut)),1); ca = {f}; % Go over all nodes in breadth-first order for jj=1:numel(wtNodes) % Load current filterbank wtNode = wtNodes{jj}.h(:); % Node filters to a cell array % hCell = cellfun(@(hEl) conj(flipud(hEl.h(:))),wtNode,'UniformOutput',0); hCell = cellfun(@(hEl) hEl.h(:),wtNode,'UniformOutput',0); % Node filters subs. factors a = wtNodes{jj}.a; % Node filters initial skips if(doPer) %offset = cellfun(@(hEl) 1-numel(hEl.h)-hEl.offset,wtNode); offset = cellfun(@(hEl) hEl.offset,wtNode); else offset = -(a-1); end % Run filterbank catmp=comp_filterbank_td(ca{1},hCell,a,offset,ext); % Pick what goes directy to the output... c(rangeOut{jj}) = catmp(rangeLoc{jj}); % and save the rest. diffRange = 1:numel(hCell); diffRange(rangeLoc{jj}) = []; ca = [ca(2:end);catmp(diffRange)]; end ltfat/inst/comp/comp_uwfbt.m0000664000175000017500000000552712612404256016035 0ustar susnaksusnakfunction c=comp_uwfbt(f,wtNodes,nodesUps,rangeLoc,rangeOut,scaling) %-*- texinfo -*- %@deftypefn {Function} comp_uwfbt %@verbatim %COMP_UWFBT Compute Undecimated Wavelet Filterbank Tree % Usage: c=comp_uwfbt(f,wtNodes,nodesUps,rangeLoc,rangeOut); % % Input parameters: % f : Input L*W array. % wtNodes : Filterbank tree nodes (elementary filterbanks) in % BF order. Length nodeNo cell array of structures. % nodesUps : Filters upsampling factor of each node. Array of % length nodeNo. % rangeLoc : Idxs of each node terminal outputs. Length nodeNo % cell array of vectors. % rangeOut : Output subband idxs of each node terminal outputs. % % Output parameters: % c : Coefficient array of dim. L*M*W. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_uwfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Pre-allocated output [L, W] = size(f); M = sum(cellfun(@(rEl) numel(rEl),rangeOut)); c = zeros(L,M,W,assert_classname(f,wtNodes{1}.h{1}.h)); % Convenience input reshape ca = reshape(f,size(f,1),1,size(f,2)); % For each node in tree in the BF order... for jj=1:numel(wtNodes) % Node filters subs. factors a = wtNodes{jj}.a; % Optionally scale the filters h = comp_filterbankscale(wtNodes{jj}.h(:),a(:),scaling); % Node filters to a matrix % hMat = cell2mat(cellfun(@(hEl) conj(flipud(hEl.h(:))),h','UniformOutput',0)); hMat = cell2mat(cellfun(@(hEl) hEl.h(:),h','UniformOutput',0)); % Node filters initial skips % hOffset = cellfun(@(hEl) 1-numel(hEl.h)-hEl.offset,wtNodes{jj}.h); hOffset = cellfun(@(hEl) hEl.offset,wtNodes{jj}.h); % Zero index position of the upsampled filters. offset = nodesUps(jj).*(hOffset); % Run filterbank. catmp=comp_atrousfilterbank_td(squeeze(ca(:,1,:)),hMat,nodesUps(jj),offset); % Bookkeeping % Copy what goes directly to the output... c(:,rangeOut{jj},:)=catmp(:,rangeLoc{jj},:); % ...and save the rest. diffRange = 1:size(hMat,2); diffRange(rangeLoc{jj}) = []; ca = [ca(:,2:end,:), catmp(:,diffRange,:)]; end ltfat/inst/comp/arg_thresh.m0000664000175000017500000000203512612404256016005 0ustar susnaksusnakfunction definput=arg_thresh(definput) definput.flags.iofun={'hard','soft','wiener'}; definput.flags.outclass={'full','sparse'}; %-*- texinfo -*- %@deftypefn {Function} arg_thresh %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_thresh.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/assert_sigreshape_post.m0000664000175000017500000000215612612404256020443 0ustar susnaksusnakfunction f=assert_sigreshape_post(f,dim,permutedsize,order) %-*- texinfo -*- %@deftypefn {Function} assert_sigreshape_post %@verbatim % Restore the original, permuted shape. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/assert_sigreshape_post.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . f=reshape(f,permutedsize); if dim>1 % Undo the permutation. f=ipermute(f,order); end; ltfat/inst/comp/comp_idtwfb.m0000664000175000017500000000276512612404256016166 0ustar susnaksusnakfunction f = comp_idtwfb(c,nodes,dualnodes,Lc,rangeLoc,rangeOut,ext,do_complex) if do_complex % Split the coefficients c1 = cellfun(@(cEl1,cEl2) (cEl1 + cEl2)/2, c(1:end/2),c(end:-1:end/2+1),... 'UniformOutput',0); c2 = cellfun(@(cEl1,cEl2) (-1i*cEl1 + 1i*cEl2)/2, c(1:end/2),c(end:-1:end/2+1),... 'UniformOutput',0); else c1 = cellfun(@real,c,'UniformOutput',0); c2 = cellfun(@imag,c,'UniformOutput',0); end f1 = comp_iwfbt(c1,nodes,Lc,rangeLoc,rangeOut,ext); f = f1 + comp_iwfbt(c2,dualnodes,Lc,rangeLoc,rangeOut,ext); if ~do_complex f = real(f); end %-*- texinfo -*- %@deftypefn {Function} comp_idtwfb %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_idtwfb.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_frsyn_tensor.m0000664000175000017500000000221712612404256017432 0ustar susnaksusnakfunction outsig=comp_frsyn_tensor(F,insig) outsig=frsyn(F.frames{1},insig); perm=circshift((1:F.Nframes).',-1); for ii=2:F.Nframes outsig=permute(outsig,perm); outsig=frsyn(F.frames{ii},outsig); end; outsig=permute(outsig,perm); %-*- texinfo -*- %@deftypefn {Function} comp_frsyn_tensor %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_frsyn_tensor.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_iufilterbank_td.m0000664000175000017500000000421712612404256020047 0ustar susnaksusnakfunction f=comp_iufilterbank_td(c,g,a,Ls,skip,ext) %-*- texinfo -*- %@deftypefn {Function} comp_iufilterbank_td %@verbatim %COMP_IUFILTERBANK_TD Synthesis Uniform filterbank by conv2 % Usage: f=comp_iufilterbank_td(c,g,a,Ls,skip,ext); % % Input parameters: % c : N*M*W array of coefficients. % g : Filterbank filters - filtLen*M array. % a : Upsampling factor - scalar. % Ls : Output length. % skip : Delay of the filters - scalar or array of length M. % ext : Border exension technique. % % Output parameters: % f : Output Ls*W array. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_iufilterbank_td.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %input channel number W=size(c,3); %filter number M=size(g,2); %length of filters filtLen = size(g,1); % Allow filter delay only in the filter support range if(all(skip>=filtLen) || all(skip<0)) error('%s: The filter zero index position outside of the filter support.', upper(mfilename)); end if(numel(skip)==1) skip = skip*ones(M,1); end % Output memory allocation f=zeros(Ls,W,assert_classname(c,g)); if(~strcmp(ext,'per')) ext = 'zero'; end skipOut = a*(filtLen-1)+skip; % W channels are done simultaneously for m=1:M cext = comp_extBoundary(squeeze(c(:,m,:)),filtLen-1,ext,'dim',1); ftmp = conv2(g(:,m),comp_ups(cext,a)); f = f + ftmp(1+skipOut(m):Ls+skipOut(m),:); end ltfat/inst/comp/comp_ufwt.m0000664000175000017500000000513612612404256015667 0ustar susnaksusnakfunction c = comp_ufwt(f,h,a,J,scaling) %-*- texinfo -*- %@deftypefn {Function} comp_ufwt %@verbatim %COMP_UFWT Compute Undecimated DWT % Usage: c=comp_ufwt(f,h,J,a); % % Input parameters: % f : Input data - L*W array. % h : Analysis Wavelet filters - cell-array of length filtNo. % J : Number of filterbank iterations. % a : Subsampling factors - array of length filtNo. % % Output parameters: % c : L*M*W array of coefficients, where M=J*(filtNo-1)+1. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_ufwt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % This could be removed with some effort. The question is, are there such % wavelet filters? If your filterbank has different subsampling factors after first two filters, please send a feature request. assert(a(1)==a(2),'First two elements of a are not equal. Such wavelet filterbank is not suported.'); % For holding the time-reversed, complex conjugate impulse responses. filtNo = length(h); % Optionally scale the filters h = comp_filterbankscale(h(:),a(:),scaling); %Change format to a matrix %hMat = cell2mat(cellfun(@(hEl) conj(flipud(hEl.h(:))),h(:)','UniformOutput',0)); hMat = cell2mat(cellfun(@(hEl) hEl.h(:),h(:)','UniformOutput',0)); %Delays %hOffset = cellfun(@(hEl) 1-numel(hEl.h)-hEl.offset,h(:)); hOffset = cellfun(@(hEl) hEl.offset,h(:)); % Allocate output [L, W] = size(f); M = J*(filtNo-1)+1; c = zeros(L,M,W,assert_classname(f,hMat)); ca = f; runPtr = size(c,2) - (filtNo-2); for jj=1:J % Zero index position of the upsampled filters. offset = a(1)^(jj-1).*(hOffset); % Run filterbank. ca=comp_atrousfilterbank_td(ca,hMat,a(1)^(jj-1),offset); % Bookkeeping c(:,runPtr:runPtr+filtNo-2,:)=ca(:,2:end,:); ca = squeeze(ca(:,1,:)); runPtr = runPtr - (filtNo - 1); end % Saving final approximation coefficients. c(:,1,:) = ca; ltfat/inst/comp/comp_uwpfbt.m0000664000175000017500000000612112612404256016204 0ustar susnaksusnakfunction c=comp_uwpfbt(f,wtNodes,rangeLoc,nodesUps,scaling,interscaling) %-*- texinfo -*- %@deftypefn {Function} comp_uwpfbt %@verbatim %COMP_UWPFBT Compute Undecimated Wavelet Packet Filterbank Tree % Usage: c=comp_uwpfbt(f,wtNodes,nodesUps); % % Input parameters: % f : Input data as L*W array. % wtNodes : Filterbank tree nodes (elementary filterbanks) in % BF order. Cell array of structures of length nodeNo. % nodesUps : Filters upsampling factor of each node. Array of % length nodeNo. % % Output parameters: % c : Coefficients stored in L*M*W array. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_uwpfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Pre-allocated output [L, W] = size(f); M = sum(cellfun(@(wtEl) numel(wtEl.h),wtNodes)); c = zeros(L,M,W,assert_classname(f,wtNodes{1}.h{1}.h)); % Convenience input reshape ca = reshape(f,size(f,1),1,size(f,2)); cOutRunIdx = 1; cInRunIdxs = [1]; interscalingfac = 1; if strcmp('intscale',interscaling) interscalingfac = 1/2; elseif strcmp('intsqrt',interscaling) interscalingfac = 1/sqrt(2); end % For each node in tree in the BF order... for jj=1:numel(wtNodes) % Node filters subs. factors a = wtNodes{jj}.a; % Optionally scale the filters h = comp_filterbankscale(wtNodes{jj}.h(:),a(:),scaling); % Node filters to a matrix % hMat = cell2mat(cellfun(@(hEl) conj(flipud(hEl.h(:))),h','UniformOutput',0)); hMat = cell2mat(cellfun(@(hEl) hEl.h(:),h','UniformOutput',0)); % Node filters initial skips % hOffet = cellfun(@(hEl) 1-numel(hEl.h)-hEl.offset,wtNodes{jj}.h); hOffet = cellfun(@(hEl) hEl.offset, wtNodes{jj}.h); % Number of filters of the current node filtNo = size(hMat,2); % Zero index position of the upsampled filters. offset = nodesUps(jj).*(hOffet); % Run filterbank c(:,cOutRunIdx:cOutRunIdx + filtNo-1,:)=... comp_atrousfilterbank_td(squeeze(ca(:,1,:)),hMat,nodesUps(jj),offset); % Bookkeeping outRange = cOutRunIdx:cOutRunIdx+filtNo-1; outRange(rangeLoc{jj}) = []; cInRunIdxs = [cInRunIdxs(2:end),outRange]; cOutRunIdx = cOutRunIdx + filtNo; % Prepare input for the next iteration if ~isempty(cInRunIdxs) c(:,cInRunIdxs(1),:) = c(:,cInRunIdxs(1),:)*interscalingfac; ca = c(:,cInRunIdxs(1),:); end end ltfat/inst/comp/comp_filterbankresponse.m0000664000175000017500000000305412612404256020577 0ustar susnaksusnakfunction gf=comp_filterbankresponse(g,a,L,do_real) M=numel(g); if size(a,2)>1 % G1 is done this way just so that we can determine the data type. G1=comp_transferfunction(g{1},L); gf=abs(G1).^2*(L/a(1,1)*a(1,2)); for m=2:M gf=gf+abs(comp_transferfunction(g{m},L)).^2*(L/a(m,1)*a(m,2)); end; else % G1 is done this way just so that we can determine the data type. G1=comp_transferfunction(g{1},L); gf=abs(G1).^2*(L/a(1)); for m=2:M gf=gf+abs(comp_transferfunction(g{m},L)).^2*(L/a(m)); end; end; if do_real gf=gf+involute(gf); end; gf=gf/L; %-*- texinfo -*- %@deftypefn {Function} comp_filterbankresponse %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_filterbankresponse.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_isepdgt.m0000664000175000017500000000334712612404256016343 0ustar susnaksusnakfunction [f]=comp_isepdgt(coef,g,L,a,M,phasetype) %-*- texinfo -*- %@deftypefn {Function} comp_isepdgt %@verbatim %COMP_ISEPDGT Separable IDGT. % Usage: f=comp_isepdgt(c,g,L,a,M); % % This is a computational routine. Do not call it directly. % % Input must be in the M x N x W format. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_isepdgt.html} %@seealso{idgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK Lwindow=size(g,1); % FIXME : Calls non-comp function if phasetype==1 coef=phaseunlock(coef,a); end; if L==Lwindow % Do full-window algorithm. % coef=reshape(coef,M,prod(size(coef))/M); % Get the factorization of the window. %gf = comp_wfac(g,a,M); % Call the computational subroutine. f = comp_idgt_long(coef,g,L,a,M); else %coef=reshape(coef,M,prod(size(coef))/M); % Do filter bank algorithm. % Call the computational subroutine. f=comp_idgt_fb(coef,g,L,a,M); end; ltfat/inst/comp/comp_dgt_fb.m0000664000175000017500000000600512612404256016123 0ustar susnaksusnakfunction [coef]=comp_dgt_fb(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_dgt_fb %@verbatim %COMP_DGT_FB Filter bank DGT % Usage: c=comp_dgt_fb(f,g,a,M); % % This is a computational routine. Do not call it directly. % % See help on DGT. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dgt_fb.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % Calculate the parameters that was not specified. L=size(f,1); N=L/a; gl=length(g); W=size(f,2); % Number of columns to apply the transform to. glh=floor(gl/2); % gl-half % Conjugate the window here. g=conj(fftshift(g)); coef=zeros(M,N,W,assert_classname(f,g)); % ----- Handle the first boundary using periodic boundary conditions. --- for n=0:ceil(glh/a)-1 % Periodic boundary condition. fpart=[f(L-(glh-n*a)+1:L,:);... f(1:gl-(glh-n*a),:)]; fg=bsxfun(@times,fpart,g); % Do the sum (decimation in frequency, Poisson summation) coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); end; % ----- Handle the middle case. --------------------- for n=ceil(glh/a):floor((L-ceil(gl/2))/a) fg=bsxfun(@times,f(n*a-glh+1:n*a-glh+gl,:),g); % Do the sum (decimation in frequency, Poisson summation) coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); end; % ----- Handle the last boundary using periodic boundary conditions. --- for n=floor((L-ceil(gl/2))/a)+1:N-1 % Periodic boundary condition. fpart=[f((n*a-glh)+1:L,:);... % L-n*a+glh elements f(1:n*a-glh+gl-L,:)]; % gl-L+n*a-glh elements fg=bsxfun(@times,fpart,g); % Do the sum (decimation in frequency, Poisson summation) coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); end; % --- Shift back again to make it a frequency-invariant system. --- for n=0:N-1 coef(:,n+1,:)=circshift(coef(:,n+1,:),n*a-glh); end; coef=fft(coef); % Simple code using a lot of circshifts. % Move f initially so it lines up with the initial fftshift of the % window %f=circshift(f,glh); %for n=0:N-1 % Do the inner product. %fg=circshift(f,-n*a)(1:gl,:).*gw; % Periodize it. %fpp=zeros(M,W); %for ii=0:gl/M-1 % fpp=fpp+fg(ii*M+1:(ii+1)*M,:); %end; % fpp=sum(reshape(fg,M,gl/M,W),2); % Shift back again. % coef(:,n+1,:)=circshift(fpp,n*a-glh); %),M,1,W); %end; ltfat/inst/comp/arg_wfbtcommon.m0000664000175000017500000000215512612404256016666 0ustar susnaksusnakfunction definput = arg_wfbtcommon(definput) %-*- texinfo -*- %@deftypefn {Function} arg_wfbtcommon %@verbatim % definput.keyvals.J = 1; % definput.flags.treetype = {'full','dwt'}; % Frequency vs. natral ordering of the output subbands %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/arg_wfbtcommon.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . definput.flags.forder = {'freq','nat'}; ltfat/inst/comp/comp_wfac.m0000664000175000017500000000474412612404256015626 0ustar susnaksusnakfunction gf=comp_wfac(g,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_wfac %@verbatim %COMP_WFAC Compute window factorization % Usage: gf=comp_wfac(g,a,M); % % References: % T. Strohmer. Numerical algorithms for discrete Gabor expansions. In % H. G. Feichtinger and T. Strohmer, editors, Gabor Analysis and % Algorithms, chapter 8, pages 267-294. Birkhauser, Boston, 1998. % % P. L. Soendergaard. An efficient algorithm for the discrete Gabor % transform using full length windows. IEEE Signal Process. Letters, % submitted for publication, 2007. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_wfac.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK L=size(g,1); R=size(g,2); N=L/a; b=L/M; c=gcd(a,M); p=a/c; q=M/c; d=N/q; gf=zeros(p,q*R,c,d,assert_classname(g)); % Set up the small matrices % The w loop is only used for multiwindows, which should be a rare occurence. % Therefore, we make it the outermost if p==1 % Integer oversampling if (c==1) && (d==1) && (R==1) % --- Short time Fourier transform of single signal --- % This is used for spectrograms of short signals. for l=0:q-1 gf(1,l+1,1,1)=g(mod(-l,L)+1); end; else for w=0:R-1 for s=0:d-1 for l=0:q-1 gf(1,l+1+q*w,:,s+1)=g((1:c)+mod(-l*a+s*p*M,L),w+1); end; end; end; end; else % Rational oversampling for w=0:R-1 for s=0:d-1 for l=0:q-1 for k=0:p-1 gf(k+1,l+1+q*w,:,s+1)=g((1:c)+c*mod(k*q-l*p+s*p*q,d*p*q),w+1); end; end; end; end; end; % dft them if d>1 gf=fft(gf,[],4); end; % Scale by the sqrt(M) comming from Walnuts representation gf=gf*sqrt(M); gf=reshape(gf,p*q*R,c*d); ltfat/inst/comp/comp_sigreshape_pre.m0000664000175000017500000000331212612404256017674 0ustar susnaksusnakfunction [f,fl,W,wasrow,remembershape]=comp_sigreshape_pre(f,callfun,do_ndim) %-*- texinfo -*- %@deftypefn {Function} comp_sigreshape_pre %@verbatim %COMP_SIGRESHAPE_PRE % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_sigreshape_pre.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK if ~isnumeric(f) || isempty(f) error('%s: The input must be non-empty numeric.',upper(callfun)); end wasrow=0; % Rember the shape if f is multidimensional. remembershape=size(f); fd=length(remembershape); % Multi-dimensional mode, apply to first dimension. if fd>2 if (do_ndim>0) && (fd>do_ndim) error([callfun,': ','Cannot process multidimensional arrays.']); end; fl=size(f,1); W=prod(remembershape)/fl; % Reshape to matrix if multidimensional. f=reshape(f,fl,W); else if size(f,1)==1 wasrow=1; % Make f a column vector. f=f(:); end; fl=size(f,1); W=size(f,2); end; ltfat/inst/comp/vect2cell.m0000664000175000017500000000235212612404256015544 0ustar susnaksusnakfunction c = vect2cell(x,idx) %-*- texinfo -*- %@deftypefn {Function} vect2cell %@verbatim %VECT2CELL Vector to cell % % Works exactly like mat2cell(x,idx,size(x,2)) % but it is faster. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/vect2cell.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if sum(idx)~=size(x,1) error('%s: Sizes do not comply.',upper(mfilename)); end idxEnd = cumsum(idx(:)); idxStart = [1;1+idxEnd(1:end-1)]; c = arrayfun(@(idS,idE) x(idS:idE,:),idxStart,idxEnd,'UniformOutput',0); ltfat/inst/comp/comp_sigreshape_post.m0000664000175000017500000000232512612404256020076 0ustar susnaksusnakfunction f=comp_sigreshape_post(f,fl,wasrow,remembershape) %-*- texinfo -*- %@deftypefn {Function} comp_sigreshape_post %@verbatim %COMP_SIGRESHAPE_POST % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_sigreshape_post.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK % Get original dimensionality fd=length(remembershape); if fd>2 f=reshape(f,[fl,remembershape(2:fd)]); else if wasrow f=f.'; end; end; ltfat/inst/comp/comp_inonsepdgt.m0000664000175000017500000001027012612404256017047 0ustar susnaksusnakfunction f=comp_inonsepdgt(coef,g,a,lt,do_timeinv,alg) %-*- texinfo -*- %@deftypefn {Function} comp_inonsepdgt %@verbatim %COMP_INONSEPDGT Compute Inverse discrete Gabor transform % Usage: f=inonsepdgt(c,g,a,lt); % f=inonsepdgt(c,g,a,lt,Ls); % % Input parameters: % c : Array of coefficients. % g : Window function. % a : Length of time shift. % lt : Lattice type % do_timeinv : Do a time invariant phase ? % alg : Choose algorithm % Output parameters: % f : Signal. % % inonsepdgt(c,g,a,lt) computes the Gabor expansion of the input % coefficients c with respect to the window g, time shift a and % lattice type lt. The number of channels is deduced from the size of % the coefficients c. % % alg=0 : Choose the fastest algorithm % % alg=0 : Always choose multi-win % % alg=1 : Always choose shear % % This is a computational subroutine, do not call it directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_inonsepdgt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Nicki Holighaus and Peter L. Soendergaard % TESTING: TEST_NONSEPDGT % REFERENCE: OK % Check input paramameters. M=size(coef,1); N=size(coef,2); W=size(coef,3); L=N*a; if (alg==1) || (alg==0 && lt(2)<=2) % ----- algorithm starts here, split into sub-lattices --------------- mwin=comp_nonsepwin2multi(g,a,M,lt,L); % phase factor correction (backwards), for more information see % analysis routine E = exp(2*pi*i*a*kron(0:N/lt(2)-1,ones(1,lt(2))).*... rem(kron(ones(1,N/lt(2)), 0:lt(2)-1)*lt(1),lt(2))/M); coef=bsxfun(@times,coef,E); % simple algorithm: split into sublattices and add the result from eacg % sublattice. f=zeros(L,W,assert_classname(coef,g)); for ii=0:lt(2)-1 % Extract sublattice sub=coef(:,ii+1:lt(2):end); f=f+comp_idgt(sub,mwin(:,ii+1),lt(2)*a,M,L,0); end; else [s0,s1,br] = shearfind(L,a,M,lt); b=L/M; ar = a*b/br; Mr = L/br; Nr = L/ar; ind = [ar 0; 0 br]*[kron((0:L/ar-1),ones(1,L/br));kron(ones(1,L/ar), ... (0:L/br-1))]; phs = reshape(mod((s1*(ind(1,:)-s0*ind(2,:)).^2+s0*ind(2,:).^2)*(L+1) ... -2*(s0 ~= 0)*ind(1,:).*ind(2,:),2*L),L/br,L/ar); phs = exp(-pi*1i*phs/L); ind_final = [1 0;-s1 1]*[1 -s0;0 1]*ind; ind_final = mod(ind_final,L); if s1 ~= 0 g = comp_pchirp(L,s1).*g; end if s0 ~= 0 c_rect = zeros(Nr,Mr,W,assert_classname(coef,g)); g = comp_pchirp(L,-s0).*fft(g); for w=0:W-1 c_rect(ind(1,[1:Mr,end:-1:Mr+1])/ar+1+(ind(2,:)/br)*Nr+w*M*N) = ... coef(floor(ind_final(2,:)/b)+1+(ind_final(1,:)/a)*M+w*M* ... N).*phs(ind(2,:)/br+1+(ind(1,:)/ar)*Mr); end; f = comp_idgt(c_rect,g,br,Nr,L,0); f = ifft(bsxfun(@times,comp_pchirp(L,s0),f)); else c_rect = zeros(Mr,Nr,W,assert_classname(coef,g)); for w=0:W-1 c_rect(ind(2,:)/br+1+(ind(1,:)/ar)*Mr+w*M*N) = ... coef(floor(ind_final(2,:)/b)+1+(ind_final(1,:)/a)*M+w*M*N); c_rect(:,:,w+1) = phs.*c_rect(:,:,w+1); end; f = comp_idgt(c_rect,g,ar,Mr,L,0); end if s1 ~= 0 f = bsxfun(@times,comp_pchirp(L,-s1),f); end end; ltfat/inst/comp/comp_iwpfbt.m0000664000175000017500000000551312612404256016174 0ustar susnaksusnakfunction f=comp_iwpfbt(c,wtNodes,pOutIdxs,chOutIdxs,Ls,ext,interscaling) %-*- texinfo -*- %@deftypefn {Function} comp_iwpfbt %@verbatim %COMP_IWFBT Compute Inverse Wavelet Packet Filter-Bank Tree % Usage: f=comp_iwpfbt(c,wtNodes,pOutIdxs,chOutIdxs,Ls,ext) % % Input parameters: % c : Coefficients stored in cell array. % wtNodes : Filterbank tree nodes (elementary filterbans) in % reverse BF order. Cell array of structures of length nodeNo. % pOutIdxs : Idx of each node's parent. Array of length nodeNo. % chOutIdxs : Idxs of each node children. Cell array of vectors of % length nodeNo. % ext : Type of the forward transform boundary handling. % % Output parameters: % f : Reconstructed data in L*W array. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_iwpfbt.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Do non-expansve transform if ext=='per' doPer = strcmp(ext,'per'); interscalingfac = 1; if strcmp('intscale',interscaling) interscalingfac = 1/2; elseif strcmp('intsqrt',interscaling) interscalingfac = 1/sqrt(2); end % For each node in tree in the BF order... for jj=1:length(wtNodes) % Node filters to a cell array %gCell = cellfun(@(gEl)conj(flipud(gEl.h(:))),wtNodes{jj}.g(:),'UniformOutput',0); gCell = cellfun(@(gEl)gEl.h(:),wtNodes{jj}.g(:),'UniformOutput',0); % Node filters subs. factors a = wtNodes{jj}.a; % Node filters initial skips if(doPer) %offset = cellfun(@(gEl) 1-numel(gEl.h)-gEl.offset,wtNodes{jj}.g); offset = cellfun(@(gEl) gEl.offset,wtNodes{jj}.g); else offset = -(a-1); end if(pOutIdxs(jj)) % Run filterbank and add to the existing subband. ctmp = comp_ifilterbank_td(c(chOutIdxs{jj}),gCell,a,size(c{pOutIdxs(jj)},1),offset,ext); c{pOutIdxs(jj)} = c{pOutIdxs(jj)}+ctmp; c{pOutIdxs(jj)} = interscalingfac*c{pOutIdxs(jj)}; else % We are at the root. f = comp_ifilterbank_td(c(chOutIdxs{jj}),gCell,a,Ls,offset,ext); end end ltfat/inst/comp/comp_filterbank.m0000664000175000017500000000517112612404256017022 0ustar susnaksusnakfunction c=comp_filterbank(f,g,a); %-*- texinfo -*- %@deftypefn {Function} comp_filterbank %@verbatim %COMP_FILTERBANK Compute filtering % % Function groups filters in g according to a presence of .h and .H % fields. If .H is present, it is further decided whether it is a full % frequency response or a band-limited freq. resp. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_filterbank.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . [L,W]=size(f); M=numel(g); c = cell(M,1); % Divide filters into time domain and frequency domain groups mFreq = 1:M; mTime = mFreq(cellfun(@(gEl) isfield(gEl,'h') ,g)>0); mFreq(mTime) = []; if ~isempty(mTime) % Pick imp. resp. gtime = cellfun(@(gEl) gEl.h, g(mTime),'UniformOutput',0); % Call the routine gskip = cellfun(@(gEl) gEl.offset ,g(mTime)); c(mTime) = comp_filterbank_td(f,gtime,a(mTime),gskip,'per'); end if ~isempty(mFreq) % Filtering in the frequency domain F=fft(f); % Pick frequency domain filters gfreq = g(mFreq); % Divide filters into the full-length and band-limited groups mFreqFullL = 1:numel(gfreq); amFreqCell = mat2cell(a(mFreq,:).',size(a,2),ones(1,numel(mFreq))); mFreqBL = mFreqFullL(cellfun(@(gEl,aEl) numel(gEl.H)~=L || (numel(aEl)>1 && aEl(2) ~=1), gfreq(:),amFreqCell(:))>0); mFreqFullL(mFreqBL) = []; mFreqFullL = mFreq(mFreqFullL); mFreqBL = mFreq(mFreqBL); if ~isempty(mFreqFullL) G = cellfun(@(gEl) gEl.H, g(mFreqFullL),'UniformOutput',0); c(mFreqFullL) = comp_filterbank_fft(F,G,a(mFreqFullL)); end if ~isempty(mFreqBL) G = cellfun(@(gEl) gEl.H, g(mFreqBL),'UniformOutput',0); foff = cellfun(@(gEl) gEl.foff, g(mFreqBL)); % Cast from logical to double. realonly = cellfun(@(gEl) cast(isfield(gEl,'realonly') && gEl.realonly,'double'), g(mFreqBL)); c(mFreqBL) = comp_filterbank_fftbl(F,G,foff,a(mFreqBL,:),realonly); end end ltfat/inst/comp/comp_iatrousfilterbank_td.m0000664000175000017500000000415112612404256021115 0ustar susnaksusnakfunction f=comp_iatrousfilterbank_td(c,g,a,offset) %-*- texinfo -*- %@deftypefn {Function} comp_iatrousfilterbank_td %@verbatim %COMP_IATROUSFILTERBANK_TD Synthesis Uniform filterbank by conv2 % Usage: f=comp_iatrousfilterbank_td(c,g,a,skip); % % Input parameters: % c : L*M*W array of coefficients. % g : Filterbank filters - filtLen*M array. % a : Filters upsampling factor - scalar. % skip : Delay of the filters - scalar or array of length M. % % Output parameters: % f : Output L*W array. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_iatrousfilterbank_td.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %input channel number W=size(c,3); %filter number M=size(g,2); g = comp_ups(g,a,1); %length of filters filtLen = size(g,1); L=size(c,1); skip = -(1-filtLen-offset(:)); % Allow filter delay only in the filter support range if(all(skip>=filtLen) || all(skip<0)) error('%s: The filter zero index position outside of the filter support.', upper(mfilename)); end if(numel(skip)==1) skip = skip*ones(M,1); end % Output memory allocation f=zeros(L,W,assert_classname(c,g)); skipOut = (filtLen-1)+skip; % W channels are done simultaneously for m=1:M cext = comp_extBoundary(squeeze(c(:,m,:)),filtLen-1,'per','dim',1); ftmp = conv2(conj(flipud(g(:,m))),cext); f = f + ftmp(1+skipOut(m):L+skipOut(m),:); end ltfat/inst/comp/comp_nonsepdgt_multi.m0000664000175000017500000000345612612404256020120 0ustar susnaksusnakfunction c=comp_nonsepdgt_multi(f,g,a,M,lt) %-*- texinfo -*- %@deftypefn {Function} comp_nonsepdgt_multi %@verbatim %COMP_NONSEPDGT_MULTI Compute Non-separable Discrete Gabor transform % Usage: c=comp_nonsepdgt_multi(f,g,a,M,lt); % % This is a computational subroutine, do not call it directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_nonsepdgt_multi.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Nicki Holighaus and Peter L. Soendergaard % TESTING: TEST_NONSEPDGT % REFERENCE: REF_NONSEPDGT % Assert correct input. L=size(f,1); W=size(f,2); N=L/a; % ----- algorithm starts here, split into sub-lattices --------------- c=zeros(M,N,W,assert_classname(f,g)); mwin=comp_nonsepwin2multi(g,a,M,lt,L); % simple algorithm: split into sublattices for ii=0:lt(2)-1 c(:,ii+1:lt(2):end,:)=comp_dgt(f,mwin(:,ii+1),lt(2)*a,M,[0 1],0,0,0); end; % Phase factor correction E = zeros(1,N,assert_classname(f,g)); for win=0:lt(2)-1 for n=0:N/lt(2)-1 E(win+n*lt(2)+1) = exp(-2*pi*i*a*n*rem(win*lt(1),lt(2))/M); end; end; c=bsxfun(@times,c,E); ltfat/inst/comp/complainif_notvalidframeobj.m0000664000175000017500000000223012612404256021403 0ustar susnaksusnakfunction complainif_notvalidframeobj(F,callfun) if nargin<2 callfun = mfilename; end if ~isstruct(F) || ~isfield(F,'frana') error('%s: Agument F must be a frame definition structure.',... upper(callfun)); end; %-*- texinfo -*- %@deftypefn {Function} complainif_notvalidframeobj %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/complainif_notvalidframeobj.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/comp/comp_irdgtiii.m0000664000175000017500000000264112612404256016504 0ustar susnaksusnakfunction cout=comp_irdgtiii(cin,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_irdgtiii %@verbatim %COMP_IRDGTIII Compute inverse real DGT type III. % % This is a computational routine. Do not call it % directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_irdgtiii.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard N=size(cin,1)/M; W=size(cin,2); L=N*a; cin=reshape(cin,M,N,W); Mhalf=floor(M/2); cout=zeros(M,N,W,assert_classname(cin)); for m=0:Mhalf-1 cout(m+1,:,:)=1/sqrt(2)*(cin(2*m+1,:,:)-i*cin(2*m+2,:,:)); cout(M-m,:,:)=1/sqrt(2)*(cin(2*m+1,:,:)+i*cin(2*m+2,:,:)); end; if mod(M,2)==1 cout((M+1)/2,:,:)=cin(M,:,:); end; ltfat/inst/comp/comp_dgt_walnut.m0000664000175000017500000001031412612404256017044 0ustar susnaksusnakfunction cout=comp_dgt_walnut(f,gf,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_dgt_walnut %@verbatim %COMP_DGT_WALNUT First step of full-window factorization of a Gabor matrix. % Usage: c=comp_dgt_walnut(f,gf,a,M); % % Input parameters: % f : Factored input data % gf : Factorization of window (from facgabm). % a : Length of time shift. % M : Number of channels. % Output parameters: % c : M x N*W*R array of coefficients, where N=L/a % % Do not call this function directly, use DGT instead. % This function does not check input parameters! % % The length of f and gamma must match. % % If input is a matrix, the transformation is applied to % each column. % % This function does not handle the multidim case. Take care before % calling this. % % References: % T. Strohmer. Numerical algorithms for discrete Gabor expansions. In % H. G. Feichtinger and T. Strohmer, editors, Gabor Analysis and % Algorithms, chapter 8, pages 267-294. Birkhauser, Boston, 1998. % % P. L. Soendergaard. An efficient algorithm for the discrete Gabor % transform using full length windows. IEEE Signal Process. Letters, % submitted for publication, 2007. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dgt_walnut.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK L=size(f,1); W=size(f,2); LR=numel(gf); R=LR/L; N=L/a; [c,h_a,h_m]=gcd(a,M); h_a=-h_a; p=a/c; q=M/c; d=N/q; ff=zeros(p,q*W,c,d,assert_classname(f,gf)); if p==1 % --- integer oversampling --- if (c==1) && (d==1) && (W==1) && (R==1) % --- Short time Fourier transform of single signal --- % This is used for spectrograms of short signals. ff(1,:,1,1)=f(:); else for s=0:d-1 for r=0:c-1 for l=0:q-1 ff(1,l+1:q:W*q,r+1,s+1)=f(r+s*M+l*c+1,:); end; end; end; end; else % --- rational oversampling --- % Set up the small matrices % The r-loop (runs up to c) has been vectorized for w=0:W-1 for s=0:d-1 for l=0:q-1 for k=0:p-1 ff(k+1,l+1+w*q,:,s+1)=f((1:c)+mod(k*M+s*p*M-l*h_a*a,L),w+1); end; end; end; end; end; % This version uses matrix-vector products and ffts % fft them if d>1 ff=fft(ff,[],4); end; C=zeros(q*R,q*W,c,d,assert_classname(f,gf)); for r=0:c-1 for s=0:d-1 GM=reshape(gf(:,r+s*c+1),p,q*R); FM=reshape(ff(:,:,r+1,s+1),p,q*W); C(:,:,r+1,s+1)=GM'*FM; end; end; % Inverse fft if d>1 C=ifft(C,[],4); end; % Place the result cout=zeros(M,N,R,W,assert_classname(f,gf)); if p==1 % --- integer oversampling --- if (c==1) && (d==1) && (W==1) && (R==1) % --- Short time Fourier transform of single signal --- % This is used for spectrograms of short signals. for l=0:q-1 cout(l+1,mod((0:q-1)+l,N)+1,1,1)=C(:,l+1,1,1); end; else % The r-loop (runs up to c) has been vectorized for rw=0:R-1 for w=0:W-1 for s=0:d-1 for l=0:q-1 for u=0:q-1 cout((1:c)+l*c,mod(u+s*q+l,N)+1,rw+1,w+1)=C(u+1+rw*q,l+1+w*q,:,s+1); end; end; end; end; end; end; else % Rational oversampling % The r-loop (runs up to c) has been vectorized for rw=0:R-1 for w=0:W-1 for s=0:d-1 for l=0:q-1 for u=0:q-1 cout((1:c)+l*c,mod(u+s*q-l*h_a,N)+1,rw+1,w+1)=C(u+1+rw*q,l+1+w*q,:,s+1); end; end; end; end; end; end; cout=reshape(cout,M,N*W*R); ltfat/inst/comp/comp_dgtreal_fb.m0000664000175000017500000000615412612404256016774 0ustar susnaksusnakfunction [coef]=comp_dgtreal_fb(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} comp_dgtreal_fb %@verbatim %COMP_DGTREAL_FB Filter bank DGT % Usage: c=comp_dgt_fb(f,g,a,M,boundary); % % This is a computational routine. Do not call it directly. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_dgtreal_fb.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % See help on DGT. % AUTHOR : Peter L. Soendergaard. % Calculate the parameters that was not specified. L=size(f,1); N=L/a; gl=length(g); W=size(f,2); % Number of columns to apply the transform to. glh=floor(gl/2); % gl-half M2=floor(M/2)+1; % Conjugate the window here. g=conj(fftshift(g)); coef=zeros(M,N,W,assert_classname(f,g)); % Replicate g when multiple columns should be transformed. gw=repmat(g,1,W); % ----- Handle the first boundary using periodic boundary conditions. --- for n=0:ceil(glh/a)-1 % Periodic boundary condition. fpart=[f(L-(glh-n*a)+1:L,:);... f(1:gl-(glh-n*a),:)]; fg=fpart.*gw; % Do the sum (decimation in frequency, Poisson summation) coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); end; % ----- Handle the middle case. --------------------- for n=ceil(glh/a):floor((L-ceil(gl/2))/a) fg=f(n*a-glh+1:n*a-glh+gl,:).*gw; % Do the sum (decimation in frequency, Poisson summation) coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); end; % ----- Handle the last boundary using periodic boundary conditions. --- for n=floor((L-ceil(gl/2))/a)+1:N-1 % Periodic boundary condition. fpart=[f((n*a-glh)+1:L,:);... % L-n*a+glh elements f(1:n*a-glh+gl-L,:)]; % gl-L+n*a-glh elements fg=fpart.*gw; % Do the sum (decimation in frequency, Poisson summation) coef(:,n+1,:)=sum(reshape(fg,M,gl/M,W),2); end; % --- Shift back again to make it a frequency-invariant system. --- for n=0:N-1 coef(:,n+1,:)=circshift(coef(:,n+1,:),n*a-glh); end; coef=fftreal(coef); coef=reshape(coef,M2,N,W); %c=c(1:M2,:); % Simple code using a lot of circshifts. % Move f initially so it lines up with the initial fftshift of the % window %f=circshift(f,glh); %for n=0:N-1 % Do the inner product. %fg=circshift(f,-n*a)(1:gl,:).*gw; % Periodize it. %fpp=zeros(M,W); %for ii=0:gl/M-1 % fpp=fpp+fg(ii*M+1:(ii+1)*M,:); %end; % fpp=sum(reshape(fg,M,gl/M,W),2); % Shift back again. % coef(:,n+1,:)=circshift(fpp,n*a-glh); %),M,1,W); %end; ltfat/inst/comp/complainif_isjavaheadless.m0000664000175000017500000000314112612404256021045 0ustar susnaksusnakfunction complainif_isjavaheadless(callfun) %-*- texinfo -*- %@deftypefn {Function} complainif_isjavaheadless %@verbatim % COMPLAINIF_ISJAVAHEADLESS % % Prints warning if the available JRE ius in headless mode. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/complainif_isjavaheadless.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<1 callfun=mfilename; end try ge = javaMethod('getLocalGraphicsEnvironment','java.awt.GraphicsEnvironment'); catch % No java support at all. Either we are running matlab -nojvm % or octave(<3.8.0) without octave-java package. % Both cases shoud have already been caught somewhere. return; end if javaMethod('isHeadless',ge) error(['%s: JRE is available in headless mode only. ',... 'Block processing GUI will not work. Consider ',... 'installing full JRE.'],upper(callfun)); end ltfat/inst/comp/gabpars_from_window.m0000664000175000017500000000451312612404256017713 0ustar susnaksusnakfunction [g,L,info] = gabpars_from_window(g,a,M,L,callfun) %-*- texinfo -*- %@deftypefn {Function} gabpars_from_window %@verbatim %GABPARS_FROM_WINDOW Compute g and L from window % Usage: [g,g.info,L] = gabpars_from_window(f,g,a,M); % % Use this function if you know a window and a lattice % for the DGT. The function will calculate a transform length L and % evaluate the window g into numerical form. % % If the transform length is unknown (as it usually is unless explicitly % specified by the user), set L to be [] in the input to this function. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/gabpars_from_window.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<5 stacknames=dbstack; callfun=stacknames(2).name; end; assert_squarelat(a,M,1,callfun,0); if ~isempty(L) if (prod(size(L))~=1 || ~isnumeric(L)) error('%s: L must be a scalar',callfun); end; if rem(L,1)~=0 error('%s: L must be an integer',callfun); end; end; if isnumeric(g) Lwindow=length(g); else Lwindow=0; end; if isempty(L) % Smallest length transform. Lsmallest=lcm(a,M); % Choose a transform length larger than both the length of the % signal and the window. L=ceil(Lwindow/Lsmallest)*Lsmallest; else if rem(L,M)~=0 error('%s: The length of the transform must be divisable by M = %i',... callfun,M); end; if rem(L,a)~=0 error('%s: The length of the transform must be divisable by a = %i',... callfun,a); end; if L. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. Lwindow=size(g,1); W=size(f,2); N=L/a; % Preprocess to handle c_f different from 0. if (c_f~=0) halfmod=exp(-2*pi*i*c_f*(0:L-1).'/M); f=f.*repmat(halfmod,1,W); end; c=comp_dgt(f,g,a,M,L,0); if timeinv c=phaselock(c,a); end; % Post-process if c_t is different from 0. if (c_t~=0) % The following is necessary because REPMAT does not work for % 3D arrays. halfmod=reshape(repmat(exp(-2*pi*i*c_t*((0:M-1)+c_f).'/M),1,N*W),M,N,W); c=c.*halfmod; end; c=reshape(c,M,N,W); ltfat/inst/comp/comp_filterbank_pre.m0000664000175000017500000001271712612404256017674 0ustar susnaksusnakfunction g = comp_filterbank_pre(g,a,L,crossover) %-*- texinfo -*- %@deftypefn {Function} comp_filterbank_pre %@verbatim %COMP_FILTERBANK_PRE Return sanitized filterbank % % The purpose of this function is to evauate all parameters of the % filters, which can be evaluated knowing L. The function can work only % with g and a in proper formats i.e. processed by % FILTERBANKWINDOW. % % This function expects all numeric g{ii}.H to be instantiated with a % proper L. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_filterbank_pre.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<4 crossover = 0; end M=numel(g); % Divide filters to time domain and frequency domain groups mFreq = 1:M; mTime = mFreq(cellfun(@(gEl,aEl) isfield(gEl,'h') && numel(gEl.h)<=crossover,g(:),num2cell(a(:,1)))>0); mFreq(mTime) = []; % Prepare time-domain filters for m = mTime % Handle .fc parameter if isfield(g{m},'fc') && g{m}.fc~=0 l = (g{m}.offset:g{m}.offset+numel(g{m}.h)-1).'/L; g{m}.h = g{m}.h.*exp(2*pi*1i*round(g{m}.fc*L/2)*l); g{m}.fc = 0; end if isfield(g{m},'realonly') && g{m}.realonly g{m}.h = real(g{m}.h); g{m}.realonly = 0; end % Do zero padding when the offset is big enough so the initial imp. resp. % support no longer intersects with zero if g{m}.offset > 0 g{m}.h = [zeros(g{m}.offset,1,class(g{m}.h));g{m}.h(:)]; g{m}.offset = 0; end if g{m}.offset < -(numel(g{m}.h)-1) g{m}.h = [g{m}.h(:);zeros(-g{m}.offset-numel(g{m}.h)+1,1,class(g{m}.h))]; g{m}.offset = -(numel(g{m}.h)-1); end end % Prepare frequency-domain filters %l=(0:L-1).'/L; for m=mFreq if isfield(g{m},'h') tmpg = circshift(postpad(g{m}.h,L),g{m}.offset); g{m}=rmfield(g{m},'h'); g{m}=rmfield(g{m},'offset'); if isfield(g{m},'fc') l=(0:L-1).'/L; tmpg = tmpg.*exp(2*pi*1i*round(g{m}.fc*L/2)*l); g{m}=rmfield(g{m},'fc'); end; g{m}.H = fft(tmpg); % The following parameters have to be set to zeros, because they % have already been incorporated in the freq. resp. calculation. g{m}.foff = 0; % Store the length used g{m}.L = L; elseif isfield(g{m},'H') if isnumeric(g{m}.H) if isfield(g{m},'L') if g{m}.L~=L % middlepad in the time domain. This will break %g.H = fft(middlepad(ifft(circshift(postpad(g.H(:),g.L),g.foff)),L)); %g.foff = 0; %g.L = L; error(['%s: g.H was already instantialized with L=%i, but ',... 'it is now used with L=%i.'],upper(mfilename),g{m}.L,L); end else % We do not know which L was g.H created with, there is no way % how to handle this properly. error('%s: g.H is already a numeric vector, but g.L was not specified.',... upper(mfilename)); end elseif isa(g{m}.H,'function_handle') g{m}.H=g{m}.H(L); if numel(g)>1 && isempty(g{m}.H) fprintf('%s: Warning: Filter %4d has zero bandwidth.\n',upper(mfilename),m); end if numel(g{m}.H) > L error('%s: Filter bandwidth is bigger than L.\n',upper(mfilename)); end % Store the length used g{m}.L = L; else error('%s: SENTINEL: Wrong format of g{ii}.H ',upper(mfilename)); end if isfield(g{m},'foff') if isa(g{m}.foff,'function_handle') g{m}.foff=g{m}.foff(L); elseif isscalar(g{m}.foff) % Nothing else error('%s: SENTINEL: Wrong format of g{ii}.foff ',upper(mfilename)); end else g.foff = 0; end end if isfield(g{m},'H') && isfield(g{m},'delay') && g{m}.delay~=0 % handle .delay parameter lrange = mod(g{m}.foff:g{m}.foff+numel(g{m}.H)-1,L).'/L; g{m}.H=g{m}.H.*exp(-2*pi*1i*round(g{m}.delay)*lrange); g{m}.delay = 0; end % Treat full-length .H, but only for non-fractional subsampling % % Just find out whether we are working with fract. subsampling. [~,info]=comp_filterbank_a(a,M,struct); if numel(g{m}.H)==L && ~info.isfractional if isfield(g{m},'foff') && g{m}.foff~=0 % handle .foff parameter for full-length freq. resp. g{m}.H = circshift(g{m}.H,g{m}.foff); % to avoid any other moving g{m}.foff = 0; end if isfield(g{m},'realonly') && g{m}.realonly % handle .realonly parameter for full-length freq. resp. g{m}.H=(g{m}.H+involute(g{m}.H))/2; g{m}.realonly = 0; end; end end; ltfat/inst/comp/comp_extBoundary.m0000664000175000017500000001222312612404256017201 0ustar susnaksusnakfunction fout = comp_extBoundary(f,extLen,ext,varargin) %-*- texinfo -*- %@deftypefn {Function} comp_extBoundary %@verbatim %EXTENDBOUNDARY Extends collumns % Usage: fout = comp_extBoundary(f,extLen,ext); % fout = comp_extBoundary(f,extLen,ext,'dim',dim); % % Input parameters: % f : Input collumn vector/matrix % extLen : Length of extensions % ext : Type of extensions % Output parameters: % fout : Extended collumn vector/matrix % % Extends input collumn vector or matrix f at top and bottom by % extLen elements/rows. Extended values are determined from the input % according to the type of extension ext. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_extBoundary.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if(ndims(f)>2) error('%s: Multidimensional signals (d>2) are not supported.',upper(mfilename)); end definput.flags.ext = {'per','ppd','perdec','odd','even','sym','asym',... 'symw','asymw','zero','zpd','sp0'}; definput.keyvals.a = 2; definput.keyvals.dim = []; [flags,kv,a]=ltfatarghelper({'a'},definput,varargin); % How slow is this? [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],kv.dim,upper(mfilename)); fout = zeros(size(f,1) + 2*extLen,size(f,2),assert_classname(f)); fout(extLen+1:end-extLen,:) = f; legalExtLen = min([size(f,1),extLen]); timesExtLen = floor(extLen/size(f,1)); moduloExtLen = mod(extLen,size(f,1)); % zero padding by default % ext: 'per','zpd','sym','symw','asym','asymw','ppd','sp0' if(strcmp(ext,'perdec')) % possible last samples replications moda = mod(size(f,1),a); repl = a-moda; if(moda) % version with replicated last sample fout(end-extLen+1:end-extLen+repl,:) = f(end,:); fRepRange = 1+extLen:extLen+length(f)+repl; fRep = fout(fRepRange,:); fRepLen = length(fRepRange); timesExtLen = floor(extLen/fRepLen); moduloExtLen = mod(extLen,fRepLen); fout(1+extLen-timesExtLen*fRepLen:extLen,:) = repmat(fRep,timesExtLen,1); fout(1:moduloExtLen,:) = fRep(end-moduloExtLen+1:end,:); timesExtLen = floor((extLen-repl)/fRepLen); moduloExtLen = mod((extLen-repl),fRepLen); fout(end-extLen+repl+1:end-extLen+repl+timesExtLen*fRepLen,:) = repmat(fRep,timesExtLen,1); fout(end-moduloExtLen+1:end,:) = f(1:moduloExtLen,:); %fout(rightStartIdx:end-extLen+timesExtLen*length(f)) = repmat(f(:),timesExtLen,1); %fout(1+extLen-legalExtLen:extLen-repl)= f(end-legalExtLen+1+repl:end); else fout = comp_extBoundary(f,extLen,'per',varargin{:}); % fout(1+extLen-legalExtLen:extLen) = f(end-legalExtLen+1:end); % fout(1:extLen-legalExtLen) = f(end-(extLen-legalExtLen)+1:end); % fout(end-extLen+1:end-extLen+legalExtLen) = f(1:legalExtLen); end elseif(strcmp(ext,'per') || strcmp(ext,'ppd')) % if ext > length(f) fout(1+extLen-timesExtLen*size(f,1):extLen,:) = repmat(f,timesExtLen,1); fout(end-extLen+1:end-extLen+timesExtLen*size(f,1),:) = repmat(f,timesExtLen,1); % mod(extLen,length(f)) samples are the rest fout(1:moduloExtLen,:) = f(end-moduloExtLen+1:end,:); fout(end-moduloExtLen+1:end,:) = f(1:moduloExtLen,:); elseif(strcmp(ext,'sym')||strcmp(ext,'even')) fout(1+extLen-legalExtLen:extLen,:) = f(legalExtLen:-1:1,:); fout(end-extLen+1:end-extLen+legalExtLen,:) = f(end:-1:end-legalExtLen+1,:); elseif(strcmp(ext,'symw')) legalExtLen = min([size(f,1)-1,extLen]); fout(1+extLen-legalExtLen:extLen,:) = f(legalExtLen+1:-1:2,:); fout(end-extLen+1:end-extLen+legalExtLen,:) = f(end-1:-1:end-legalExtLen,:); elseif(strcmp(ext,'asym')||strcmp(ext,'odd')) fout(1+extLen-legalExtLen:extLen,:) = -f(legalExtLen:-1:1,:); fout(end-extLen+1:end-extLen+legalExtLen,:) = -f(end:-1:end-legalExtLen+1,:); elseif(strcmp(ext,'asymw')) legalExtLen = min([size(f,1)-1,extLen]); fout(1+extLen-legalExtLen:extLen,:) = -f(legalExtLen+1:-1:2,:); fout(end-extLen+1:end-extLen+legalExtLen,:) = -f(end-1:-1:end-legalExtLen,:); elseif(strcmp(ext,'sp0')) fout(1:extLen,:) = f(1,:); fout(end-extLen+1:end,:) = f(end,:); elseif(strcmp(ext,'zpd')||strcmp(ext,'zero')||strcmp(ext,'valid')) % do nothing else error('%s: Unsupported flag.',upper(mfilename)); end % Reshape back according to the dim. permutedsizeAlt = size(fout); fout=assert_sigreshape_post(fout,dim,permutedsizeAlt,order); ltfat/inst/comp/comp_ifilterbank_fftbl.m0000664000175000017500000000465012612404256020351 0ustar susnaksusnakfunction F = comp_ifilterbank_fftbl(c,G,foff,a,realonly) %-*- texinfo -*- %@deftypefn {Function} comp_ifilterbank_fftbl %@verbatim %COMP_IFILTERBANK_FFTBL Compute filtering in FD % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_ifilterbank_fftbl.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . M = numel(c); W = size(c{1},2); if size(a,2)>1 afrac=a(:,1)./a(:,2); else afrac = a(:,1); end N = cellfun(@(cEl) size(cEl,1),c); if 0 L = N.*afrac; assert(all(rem(L,1))<1e-6,'%s: Bad subband lengths. \n',upper(mfilename)); L = round(L); assert(all(L==L(1)),'%s:Bad subband lengths. \n',upper(mfilename)); L = L(1); else L = round(afrac(1).*size(c{1},1)); end F = zeros(L,W,assert_classname(c{1},G{1})); fsuppRangeSmall = cellfun(@(fEl,GEl) mod([fEl:fEl+numel(GEl)-1].',L)+1,... num2cell(foff),G,'UniformOutput',0); % for w=1:W for m=1:M % Un-circshift Ctmp = circshift(fft(c{m}(:,w)),-foff(m)); % Periodize and cut to the bandwidth of G{m} periods = ceil(numel(G{m})/N(m)); Ctmp = postpad(repmat(Ctmp,periods,1),numel(G{m})); F(fsuppRangeSmall{m},w)=F(fsuppRangeSmall{m},w) + Ctmp.*conj(G{m}); end; end % Handle the real only as a separate filter using recursion realonlyRange = 1:M; realonlyRange = realonlyRange(realonly>0); if ~isempty(realonlyRange) Gconj = cellfun(@(gEl) conj(gEl(end:-1:1)),G(realonlyRange),'UniformOutput',0); LG = cellfun(@(gEl) numel(gEl),Gconj); foffconj = -L+mod(L-foff(realonlyRange)-LG,L)+1; aconj = a(realonlyRange,:); cconj = comp_ifilterbank_fftbl(F,Gconj,L,foffconj,aconj,0); for ii=1:numel(cconj) c{realonlyRange(ii)} = (c{realonlyRange(ii)} + cconj{ii})/2; end end ltfat/inst/comp/comp_frana_fusion.m0000664000175000017500000000225512612404256017353 0ustar susnaksusnakfunction outsig=comp_frana_fusion(F,insig) %-*- texinfo -*- %@deftypefn {Function} comp_frana_fusion %@verbatim % All frames must use the same length signal. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_frana_fusion.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L=F.length(size(insig,1)); insig=postpad(insig,L); coefs = cell(F.Nframes,1); for ii=1:F.Nframes coefs(ii)={F.w(ii)*frana(F.frames{ii},insig)}; end; outsig=cell2mat(coefs); ltfat/inst/comp/comp_col2diag.m0000664000175000017500000000274512612404256016371 0ustar susnaksusnakfunction cout=comp_col2diag(cin); %-*- texinfo -*- %@deftypefn {Function} comp_col2diag %@verbatim %COMP_COL2DIAG transforms columns to diagonals (in a special way) % % This function transforms the first column to the main diagonal. The % second column to the first side-diagonal below the main diagonal and so % on. % % This way fits well the connection of matrix and spreading function, see % spreadfun. % % This function is its own inverse. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/comp/comp_col2diag.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: OK % REFERENCE: OK L=size(cin,1); cout=zeros(L,assert_classname(cin)); jj=(0:L-1).'; for ii=0:L-1 cout(ii+1,:)=cin(ii+1,mod(ii-jj,L)+1); end; ltfat/inst/nonstatgab/0000775000175000017500000000000012612404256014703 5ustar susnaksusnakltfat/inst/nonstatgab/nsgabdual.m0000664000175000017500000001003112612404256017014 0ustar susnaksusnakfunction gd=nsgabdual(g,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} nsgabdual %@verbatim %NSGABDUAL Canonical dual window for non-stationary Gabor frames % Usage: gd=nsgabdual(g,a,M); % gd=nsgabdual(g,a,M,L); % % Input parameters: % g : Cell array of windows. % a : Vector of time shift. % M : Vector of numbers of channels. % L : Transform length. % Output parameters: % gd : Cell array of canonical dual windows % % NSGABDUAL(g,a,M,L) computes the canonical dual windows of the % non-stationary discrete Gabor frame defined by windows given in g an % time-shifts given by a. % % NSGABDUAL is designed to be used with the functions NSDGT and % INSDGT. See the help on NSDGT for more details about the variables % structure. % % The computed dual windows are only valid for the 'painless case', that % is to say that they ensure perfect reconstruction only if for each % window the number of frequency channels used for computation of NSDGT is % greater than or equal to the window length. This correspond to cases % for which the frame operator is diagonal. % % % References: % P. Balazs, M. Doerfler, F. Jaillet, N. Holighaus, and G. A. Velasco. % Theory, implementation and applications of nonstationary Gabor frames. % J. Comput. Appl. Math., 236(6):1481-1496, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/nsgabdual.html} %@seealso{nsgabtight, nsdgt, insdgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet % TESTING: TEST_NSDGT % REFERENCE: if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isnumeric(a) error('%s: a must be numeric.',upper(mfilename)); end; if ~isnumeric(M) error('%s: M must be numeric.',upper(mfilename)); end; definput.keyvals.L=sum(a); [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); timepos=cumsum(a)-a(1); N=length(a); [g,info]=nsgabwin(g,a,M); a=info.a; M=info.M; if info.isfac if info.ispainless f=zeros(L,1); % Diagonal of the frame operator % Compute the diagonal of the frame operator: f=nsgabframediag(g,a,M); % Initialize the result with g gd=g; % Correct each window to ensure perfect reconstrution for ii=1:N shift=floor(length(g{ii})/2); tempind=mod((1:length(g{ii}))+timepos(ii)-shift-1,L)+1; gd{ii}(:)=circshift(circshift(g{ii},shift)./f(tempind),-shift); end else if 0 % Convert to freq. domain and run filterbankdual % The code does not work gf=cell(1,N); gd=cell(1,N); for ii=1:N gf{ii}=circshift(fft(fir2long(g{ii},L)),timepos(ii)); end; gfd=filterbankdual(gf,M); for ii=1:N gd{ii}=ifft(circshift(gfd{ii},-timepos(ii))); end; else error('Not implemented yet.'); end; end; else error(['%s: The canonical dual frame of this system is not a ' ... 'non-stationary Gabor frame. You must call an iterative ' ... 'method to perform the desired inverstion. Please see ' ... 'FRANAITER or FRSYNITER.'],upper(mfilename)); end; ltfat/inst/nonstatgab/nsdgt.m0000664000175000017500000001406312612404256016204 0ustar susnaksusnakfunction [c,Ls] = nsdgt(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} nsdgt %@verbatim %NSDGT Non-stationary Discrete Gabor transform % Usage: c=nsdgt(f,g,a,M); % [c,Ls]=nsdgt(f,g,a,M); % % Input parameters: % f : Input signal. % g : Cell array of window functions. % a : Vector of time shifts. % M : Vector of numbers of frequency channels. % Output parameters: % c : Cell array of coefficients. % Ls : Length of input signal. % % NSDGT(f,g,a,M) computes the non-stationary Gabor coefficients of the % input signal f. The signal f can be a multichannel signal, given in % the form of a 2D matrix of size Ls xW, with Ls the signal % length and W the number of signal channels. % % The non-stationary Gabor theory extends standard Gabor theory by % enabling the evolution of the window over time. It is therefor necessary % to specify a set of windows instead of a single window. This is done by % using a cell array for g. In this cell array, the n'th element g{n} % is a row vector specifying the n'th window. % % The resulting coefficients also require a storage in a cell array, as % the number of frequency channels is not constant over time. More % precisely, the n'th cell of c, c{n}, is a 2D matrix of size % M(n) xW and containing the complex local spectra of the signal channels % windowed by the n'th window g{n} shifted in time at position a(n). % c{n}(m,w) is thus the value of the coefficient for time index n, % frequency index m and signal channel w. % % The variable a contains the distance in samples between two % consequtive blocks of coefficients. The variable M contains the % number of channels for each block of coefficients. Both a and M are % vectors of integers. % % The variables g, a and M must have the same length, and the result c* % will also have the same length. % % The time positions of the coefficients blocks can be obtained by the % following code. A value of 0 correspond to the first sample of the % signal: % % timepos = cumsum(a)-a(1); % % [c,Ls]=NSDGT(f,g,a,M) additionally returns the length Ls of the input % signal f. This is handy for reconstruction: % % [c,Ls]=nsdgt(f,g,a,M); % fr=insdgt(c,gd,a,Ls); % % will reconstruct the signal f no matter what the length of f is, % provided that gd are dual windows of g. % % Notes: % ------ % % NSDGT uses circular border conditions, that is to say that the signal is % considered as periodic for windows overlapping the beginning or the % end of the signal. % % The phaselocking convention used in NSDGT is different from the % convention used in the DGT function. NSDGT results are phaselocked (a % phase reference moving with the window is used), whereas DGT results are % not phaselocked (a fixed phase reference corresponding to time 0 of the % signal is used). See the help on PHASELOCK for more details on % phaselocking conventions. % % % % References: % P. Balazs, M. Doerfler, F. Jaillet, N. Holighaus, and G. A. Velasco. % Theory, implementation and applications of nonstationary Gabor frames. % J. Comput. Appl. Math., 236(6):1481-1496, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/nsdgt.html} %@seealso{insdgt, nsgabdual, nsgabtight, phaselock, demo_nsdgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet and Nicki Holighaus % TESTING: TEST_NSDGT % REFERENCE: REF_NSDGT % Notes: % - The choice of a different phaselocking convention than the one used in % dgt is motivated by the will to keep a diagonal frame operator in the % painless case and to keep the circular border condition. With the other % convention, there is in general a problem for windows overlapping the % beginning and the end of the signal (except if time positions and % signal length have some special ratio properties). if ~isnumeric(a) error('%s: a must be numeric.',upper(mfilename)); end; if ~isnumeric(M) error('%s: M must be numeric.',upper(mfilename)); end; %% ----- step 1 : Verify f and determine its length ------- % Change f to correct shape. [f,Ls,W,wasrow,remembershape]=comp_sigreshape_pre(f,upper(mfilename),0); L=nsdgtlength(Ls,a); f=postpad(f,L); [g,info]=nsgabwin(g,a,M); timepos=cumsum(a)-a(1); N=length(a); % Number of time positions c=cell(N,1); % Initialisation of the result % The actual transform for ii = 1:N Lg = length(g{ii}); % This is an explicit fftshift idx=[Lg-floor(Lg/2)+1:Lg,1:ceil(Lg/2)]; win_range = mod(timepos(ii)+(-floor(Lg/2):ceil(Lg/2)-1),L)+1; if M(ii) < Lg % if the number of frequency channels is too small, aliasing is introduced col = ceil(Lg/M(ii)); temp = zeros(col*M(ii),W,assert_classname(f,g{1})); temp([end-floor(Lg/2)+1:end,1:ceil(Lg/2)],:) = bsxfun(@ ... times,f(win_range,:),g{ii}(idx)); temp = reshape(temp,M(ii),col,W); X = squeeze(fft(sum(temp,2))); c{ii}=X; else temp = zeros(M(ii),W,assert_classname(f,g{1})); temp([end-floor(Lg/2)+1:end,1:ceil(Lg/2)],:) = bsxfun(@times, ... f(win_range,:),g{ii}(idx)); c{ii} = fft(temp); end end ltfat/inst/nonstatgab/plotnsdgt.m0000664000175000017500000000704712612404256017107 0ustar susnaksusnakfunction coef = plotnsdgt(coef,a,varargin) %-*- texinfo -*- %@deftypefn {Function} plotnsdgt %@verbatim %PLOTNSDGT Plot non-stationary Gabor coefficients % Usage: plotnsdgt(c,a,fs,dynrange); % % Input parameters: % coef : Cell array of coefficients. % a : Vector of time positions of windows. % fs : signal sample rate in Hz (optional) % dynrange : Color scale dynamic range in dB (optional). % % PLOTNSDGT(coef,a) plots coefficients computed using NSDGT or % UNSDGT. For more details on the format of the variables coef and a, % please read the function help for these functions. % % PLOTNSDGT(coef,a,fs) does the same assuming a sampling rate of % fs Hz of the original signal. % % PLOTNSDGT(coef,a,fs,dynrange) additionally limits the dynamic range. % % C=PLOTNSDGT(...) returns the processed image data used in the % plotting. Inputting this data directly to imagesc or similar % functions will create the plot. This is useful for custom % post-processing of the image data. % % PLOTNSDGT supports all the optional parameters of TFPLOT. Please % see the help of TFPLOT for an exhaustive list. In addition, the % following parameters may be specified: % % 'xres',xres Approximate number of pixels along x-axis / time. % The default value is 800 % % 'yres',yres Approximate number of pixels along y-axis / frequency % The default value is 600 % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/plotnsdgt.html} %@seealso{tfplot, nsdgt, unsdgt, nsdgtreal} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet and Peter L. Soendergaard % TESTING: OK % REFERENCE: NA if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'ltfattranslate','tfplot'}; definput.keyvals.xres=800; definput.keyvals.yres=600; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); timepos=cumsum(a)-a(1); N=length(a); cwork=zeros(kv.yres,N); %% -------- Interpolate in frequency --------------------- for ii=1:N column=coef{ii}; M=length(column); cwork(:,ii)=interp1(linspace(0,1,M),column,linspace(0,1,kv.yres),'nearest'); end; %% -------- Interpolate in time ------------------------- % Time step in next equidistant spacing on the x-axis (in samples) aplot=timepos(end)/kv.xres; % Time positions where we want our pixels plotted (in samples) xr=(0:kv.xres-1)*aplot; % Move zero frequency to the center and Nyquist frequency to the top. if rem(kv.yres,2)==0 cwork=circshift(cwork,kv.yres/2-1); else cwork=circshift(cwork,(kv.yres-1)/2); end; coef=zeros(kv.yres,kv.xres); for ii=1:kv.yres data=interp1(timepos,cwork(ii,:).',xr,'nearest').'; coef(ii,:)=data; end; yr=[-1+2/kv.yres,1]; coef=tfplot(coef,aplot,yr,'argimport',flags,kv); if nargout<1 clear coef; end ltfat/inst/nonstatgab/nonstatgabinit.m0000664000175000017500000000165412612404256020113 0ustar susnaksusnakstatus=1; %-*- texinfo -*- %@deftypefn {Function} nonstatgabinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/nonstatgabinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/nonstatgab/nsgabtight.m0000664000175000017500000001000112612404256017203 0ustar susnaksusnakfunction gt=nsgabtight(g,a,M,varargin) %-*- texinfo -*- %@deftypefn {Function} nsgabtight %@verbatim %NSGABTIGHT Canonical tight window for non-stationary Gabor frames % Usage: gt=nsgabtight(g,a,M); % gt=nsgabtight(g,a,M,L); % % Input parameters: % g : Cell array of windows % a : Vector of time shifts of windows. % M : Vector of numbers of channels. % L : Transform length. % Output parameters: % gt : Cell array of canonical tight windows % % NSGABTIGHT(g,a,M) computes the canonical tight windows of the % non-stationary discrete Gabor frame defined by windows given in g and % time-shifts given by a. % % NSGABTIGHT is designed to be used with functions NSDGT and % INSDGT. Read the help on NSDGT for more details about the variables % structure. % % The computed tight windows are only valid for the 'painless case', that % is to say that they ensure perfect reconstruction only if for each % window the number of frequency channels used for computation of NSDGT is % greater than or equal to the window length. This correspond to cases % for which the frame operator is diagonal. % % % References: % P. Balazs, M. Doerfler, F. Jaillet, N. Holighaus, and G. A. Velasco. % Theory, implementation and applications of nonstationary Gabor frames. % J. Comput. Appl. Math., 236(6):1481-1496, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/nsgabtight.html} %@seealso{nsgabtight, nsdgt, insdgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet % TESTING: TEST_NSDGT % REFERENCE: if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isnumeric(a) error('%s: a must be numeric.',upper(mfilename)); end; if ~isnumeric(M) error('%s: M must be numeric.',upper(mfilename)); end; definput.keyvals.L=sum(a); [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); timepos=cumsum(a)-a(1); N=length(a); [g,info]=nsgabwin(g,a,M); a=info.a; M=info.M; if info.isfac if info.ispainless f=zeros(L,1); % Diagonal of the frame operator % Compute the diagonal of the frame operator: f=nsgabframediag(g,a,M); % As we want tight frame, we will use the sqrt of the operator f=sqrt(f); % Initialize the result with g gt=g; % Correct each window to ensure perfect reconstrution for ii=1:N shift=floor(length(g{ii})/2); tempind=mod((1:length(g{ii}))+timepos(ii)-shift-1,L)+1; gt{ii}(:)=circshift(circshift(g{ii},shift)./f(tempind),-shift); end else if 0 % Convert to freq. domain and run filterbanktight gf=cell(1,N); gt=cell(1,N); for ii=1:N gf{ii}=circshift(fft(fir2long(g{ii},L)),timepos(ii)); end; gft=filterbanktight(gf,M); for ii=1:N gt{ii}=ifft(circshift(gft{ii},-timepos(ii))); end; else error(['%s: Not implemented yet.'],upper(mfilename)); end; end; else error(['%s: The canonical tight frame of this system is not a ' ... 'non-stationary Gabor frame.'],upper(mfilename)); end; ltfat/inst/nonstatgab/insdgt.m0000664000175000017500000000634312612404256016357 0ustar susnaksusnakfunction f=insdgt(c,g,a,varargin) %-*- texinfo -*- %@deftypefn {Function} insdgt %@verbatim %INSDGT Inverse non-stationary discrete Gabor transform % Usage: f=insdgt(c,g,a,Ls); % % Input parameters: % c : Cell array of coefficients. % g : Cell array of window functions. % a : Vector of time positions of windows. % Ls : Length of input signal. % Output parameters: % f : Signal. % % INSDGT(c,g,a,Ls) computes the inverse non-stationary Gabor transform % of the input coefficients c. % % INSDGT is used to invert the functions NSDGT and UNSDGT. Please % read the help of these functions for details of variables format and % usage. % % For perfect reconstruction, the windows used must be dual windows of the % ones used to generate the coefficients. The windows can be generated % using NSGABDUAL or NSGABTIGHT. % % % % References: % P. Balazs, M. Doerfler, F. Jaillet, N. Holighaus, and G. A. Velasco. % Theory, implementation and applications of nonstationary Gabor frames. % J. Comput. Appl. Math., 236(6):1481-1496, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/insdgt.html} %@seealso{nsdgt, nsgabdual, nsgabtight, demo_nsdgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet and Nicki Holighaus % TESTING: TEST_NSDGT % REFERENCE: REF_INSDGT % Last changed 2009-05 if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isnumeric(a) error('%s: a must be numeric.',upper(mfilename)); end; definput.keyvals.Ls=[]; [flags,kv,Ls]=ltfatarghelper({'Ls'},definput,varargin); timepos=cumsum(a)-a(1); L=sum(a); if iscell(c) % ---- invert the non-uniform case --------- M=cellfun(@(x) size(x,1),c); N=length(c); W=size(c{1},2); f=zeros(L,W,assert_classname(c{1})); else % ---- invert the uniform case ---------------- [M, N, W]=size(c); f=zeros(L,W,assert_classname(c)); end [g,info]=nsgabwin(g,a,M); for ii = 1:N Lg = length(g{ii}); gt = g{ii}; % This is an explicit fftshift gt = gt([Lg-floor(Lg/2)+1:Lg,1:ceil(Lg/2)]); win_range = mod(timepos(ii)+(-floor(Lg/2):ceil(Lg/2)-1),L)+1; if iscell(c) M = size(c{ii},1); temp = ifft(c{ii},[],1)*M; else temp = ifft(c(:,ii,:),[],1)*M; end idx = mod([M-floor(Lg/2)+1:M,1:ceil(Lg/2)]-1,M)+1; temp = temp(idx,:); f(win_range,:) = f(win_range,:) + bsxfun(@times,temp,gt); end if ~isempty(Ls) f = f(1:Ls,:); end; ltfat/inst/nonstatgab/Contents.m0000664000175000017500000000343712612404256016665 0ustar susnaksusnak% LTFAT - Non-stationary Gabor systems % % Florent Jaillet and Peter L. Soendergaard, 2011 - 2015 % % Transforms % NSDGT - Non-stationary DGT % UNSDGT - Uniform non-stationary DGT % INSDGT - Inverse NSDGT and UNSDGT % NSDGTREAL - Non-stationary DGT for real-valued signals % UNSDGTREAL - Uniform non-stationary DGT for real-valued signals % INSDGTREAL - Inverse NSDGTREAL and UNSDGTREAL % % Window construction and bounds % NSGABDUAL - Non-stationary dual windows % NSGABTIGHT - Non-stationary tight windows % NSGABFRAMEBOUNDS - Frame bounds of an NSDGT system % NSGABFRAMEDIAG - Diagonal of non-stationary Gabor frame operator % % Plots % PLOTNSDGT - Plot output coefficients from NSDGT % PLOTNSDGTREAL - Plot output coefficients from NSDGTREAL % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % Url: http://ltfat.github.io/doc/nonstatgab/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/nonstatgab/nsgabwin.m0000664000175000017500000000775612612404256016710 0ustar susnaksusnakfunction [g,info] = nsgabwin(g,a,M); %-*- texinfo -*- %@deftypefn {Function} nsgabwin %@verbatim %NSGABWIN Compute a set of non-stationary Gabor windows from text or cell array % Usage: [g,info] = nsgabwin(g,a,M); % % [g,info]=NSGABWIN(g,a,M,L) computes a window that fits well with % time-shift a, number of channels M and and transform length L. % The window itself is as a cell array containing additional parameters. % % The window can be specified directly as a cell array of vectors of % numerical values. In this case, NSGABWIN only checks assumptions % about transform sizes etc. % % [g,info]=NSGABWIN(g,a,M) does the same, but the windows must be FIR % windows, as the transform length is unspecified. % % The window can also be specified as cell array. The possibilities are: % % {'dual',...} % Canonical dual window of whatever follows. See the examples below. % % {'tight',...} % Canonical tight window of whatever follows. See the examples below. % % The structure info provides some information about the computed % window: % % info.gauss True if the windows are Gaussian. % % info.tfr Time/frequency support ratios of the window. % Set whenever it makes sense. % % info.isfir Input is an FIR window % % info.isdual Output is the dual window of the auxiliary window. % % info.istight Output is known to be a tight window. % % info.auxinfo Info about auxiliary window. % % info.gl Length of windows. % % info.isfac True if the frame generated by the window has a fast % factorization. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/nsgabwin.html} %@seealso{filterbank, filterbankdual, filterbankrealdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Assert correct input. if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; if ~iscell(g) error('%s: Window g must be a cell array.',upper(mfilename)); end; if isempty(g) error('%s: Window g must not be empty.',upper(mfilename)); end; info.isdual=0; info.istight=0; % To stop the madness, all index/lengths vectors are converted to columns a=a(:); M=M(:); if ischar(g{1}) winname=lower(g{1}); switch(winname) case {'dual'} [g,info.auxinfo] = nsgabwin(g{2},a,M); g = nsgabdual(g,a,M); info.isdual=1; case {'tight'} [g,info.auxinfo] = nsgabwin(g{2},a,M); g = nsgabtight(g,a,M); info.istight=1; otherwise error('%s: Unsupported window type %s.',winname,upper(mfilename)); end; end; info.gl=cellfun(@length,g); info.gl=info.gl(:); info.L=sum(a); info.a=a; N=length(a); if N~=numel(g) error(['%s: The number of time-shifts %i must match the number of windows ' ... '%i.'],upper(mfilename),N,numel(g)); end; if numel(M)~=1 && numel(M)~=N error(['%s: The arrays "a" and "M" must be equally long. ' ... 'numel(a)=%i, numel(M)=%i.'],upper(mfilename),N,numel(M)); end; if any(info.L. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet and Nicki Holighaus % TESTING: TEST_NSDGT % REFERENCE: % Last changed 2009-05 if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isnumeric(a) error('%s: a must be numeric.',upper(mfilename)); end; definput.keyvals.Ls=[]; [flags,kv,Ls]=ltfatarghelper({'Ls'},definput,varargin); timepos=cumsum(a)-a(1); L=sum(a); [g,info]=nsgabwin(g,a,M); if iscell(c) % ---- invert the non-uniform case --------- N=length(c); % Number of time positions W=size(c{1},2); % Number of signal channels f=zeros(L,W,assert_classname(c{1})); % Initialisation of the result else % ---- invert the uniform case ---------------- [M2, N, W]=size(c); f=zeros(L,W,assert_classname(c)); % Initialisation of the result if ~info.isuniform error('%s: M must be a scalar or a constant vector.',upper(mfilename)); end; M=M(1); end for ii = 1:N Lg = length(g{ii}); gt = g{ii}; % This is an explicit fftshift idx=[Lg-floor(Lg/2)+1:Lg,1:ceil(Lg/2)]; gt = gt(idx); win_range = mod(timepos(ii)+(-floor(Lg/2):ceil(Lg/2)-1),L)+1; if iscell(c) temp = ifftreal(c{ii},M(ii),1)*M(ii); idx = mod([M(ii)-floor(Lg/2)+1:M(ii),1:ceil(Lg/2)]-1,M(ii))+1; else temp = ifftreal(c(:,ii,:),M,1)*M; idx = mod([M-floor(Lg/2)+1:M,1:ceil(Lg/2)]-1,M)+1; end temp = temp(idx,:); f(win_range,:) = f(win_range,:) + bsxfun(@times,temp,gt); end if ~isempty(Ls) f = f(1:sum(a),:); end; ltfat/inst/nonstatgab/nsdgtreal.m0000664000175000017500000001547312612404256017056 0ustar susnaksusnakfunction [c,Ls] = nsdgtreal(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} nsdgtreal %@verbatim %NSDGTREAL Non-stationary Discrete Gabor transform for real valued signals % Usage: c=nsdgtreal(f,g,a,M); % [c,Ls]=nsdgtreal(f,g,a,M); % % Input parameters: % f : Input signal. % g : Cell array of window functions. % a : Vector of time positions of windows. % M : Vector of numbers of frequency channels. % Output parameters: % c : Cell array of coefficients. % Ls : Length of input signal. % % NSDGTREAL(f,g,a,M) computes the non-stationary Gabor coefficients of the % input signal f. The signal f can be a multichannel signal, given in % the form of a 2D matrix of size Ls xW, with Ls the signal % length and W the number of signal channels. % % As opposed to NSDGT only the coefficients of the positive frequencies % of the output are returned. NSDGTREAL will refuse to work for complex % valued input signals. % % The non-stationary Gabor theory extends standard Gabor theory by % enabling the evolution of the window over time. It is therefor necessary % to specify a set of windows instead of a single window. This is done by % using a cell array for g. In this cell array, the n'th element g{n} % is a row vector specifying the n'th window. % % The resulting coefficients also require a storage in a cell array, as % the number of frequency channels is not constant over time. More % precisely, the n'th cell of c, c{n}, is a 2D matrix of size % M(n)/2+1 xW and containing the complex local spectra of the % signal channels windowed by the n'th window g{n} shifted in time at % position a(n). c{n}(m,l) is thus the value of the coefficient for % time index n, frequency index m and signal channel l. % % The variable a contains the distance in samples between two % consequtive blocks of coefficients. The variable M contains the % number of channels for each block of coefficients. Both a and M are % vectors of integers. % % The variables g, a and M must have the same length, and the result c* % will also have the same length. % % The time positions of the coefficients blocks can be obtained by the % following code. A value of 0 correspond to the first sample of the % signal: % % timepos = cumsum(a)-a(1); % % [c,Ls]=NSDGTREAL(f,g,a,M) additionally returns the length Ls of the input % signal f. This is handy for reconstruction: % % [c,Ls]=nsdgtreal(f,g,a,M); % fr=insdgtreal(c,gd,a,Ls); % % will reconstruct the signal f no matter what the length of f is, % provided that gd are dual windows of g. % % Notes: % ------ % % NSDGTREAL uses circular border conditions, that is to say that the signal is % considered as periodic for windows overlapping the beginning or the % end of the signal. % % The phaselocking convention used in NSDGTREAL is different from the % convention used in the DGT function. NSDGTREAL results are phaselocked (a % phase reference moving with the window is used), whereas DGT results are % not phaselocked (a fixed phase reference corresponding to time 0 of the % signal is used). See the help on PHASELOCK for more details on % phaselocking conventions. % % % % References: % P. Balazs, M. Doerfler, F. Jaillet, N. Holighaus, and G. A. Velasco. % Theory, implementation and applications of nonstationary Gabor frames. % J. Comput. Appl. Math., 236(6):1481-1496, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/nsdgtreal.html} %@seealso{nsdgt, insdgtreal, nsgabdual, nsgabtight, phaselock, demo_nsdgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet % TESTING: TEST_NSDGTREAL % REFERENCE: if ~isnumeric(a) error('%s: a must be numeric.',upper(mfilename)); end; if ~isnumeric(M) error('%s: M must be numeric.',upper(mfilename)); end; %% ----- step 1 : Verify f and determine its length ------- % Change f to correct shape. [f,Ls,W,wasrow,remembershape]=comp_sigreshape_pre(f,upper(mfilename),0); L=nsdgtlength(Ls,a); f=postpad(f,L); [g,info]=nsgabwin(g,a,M); if L. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; L=sum(a); timepos=cumsum(a)-a(1); N=length(a); [g,info]=nsgabwin(g,a,M); a=info.a; M=info.M; d=zeros(L,1,assert_classname(g{1})); for ii=1:N shift=floor(length(g{ii})/2); temp=abs(circshift(g{ii},shift)).^2*M(ii); tempind=mod((1:length(g{ii}))+timepos(ii)-shift-1,L)+1; d(tempind)=d(tempind)+temp; end ltfat/inst/nonstatgab/plotnsdgtreal.m0000664000175000017500000000657112612404256017754 0ustar susnaksusnakfunction coef = plotnsdgtreal(coef,a,varargin) %-*- texinfo -*- %@deftypefn {Function} plotnsdgtreal %@verbatim %PLOTNSDGTREAL Plot NSDGTREAL coefficients % Usage: plotnsdgtreal(c,a,fs,dynrange); % % Input parameters: % coef : Cell array of coefficients. % a : Vector of time positions of windows. % fs : signal sample rate in Hz (optional). % dynrange : Colorscale dynamic range in dB (optional). % % PLOTNSDGTREAL(coef,a) plots coefficients computed using NSDGTREAL or % UNSDGTREAL. For more details on the format of the variables coef and a, % please read the function help for these functions. % % PLOTNSDGTREAL(coef,a,fs) does the same assuming a sampling rate of % fs Hz of the original signal. % % PLOTNSDGTREAL(coef,a,fs,dynrange) additionally limits the dynamic range. % % C=PLOTNSDGTREAL(...) returns the processed image data used in the % plotting. Inputting this data directly to imagesc or similar % functions will create the plot. This is useful for custom % post-processing of the image data. % % PLOTNSDGTREAL supports all the optional parameters of TFPLOT. Please % see the help of TFPLOT for an exhaustive list. In addition, the % following parameters may be specified: % % 'xres',xres Approximate number of pixels along x-axis /time. % Default value is 800 % % 'yres',yres Approximate number of pixels along y-axis / frequency % Default value is 600 % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/plotnsdgtreal.html} %@seealso{tfplot, nsdgt, nsdgtreal} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet & Peter L. Soendergaard % TESTING: OK % REFERENCE: NA if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'ltfattranslate','tfplot'}; definput.keyvals.xres=800; definput.keyvals.yres=600; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); timepos=cumsum(a)-a(1); N=length(a); cwork=zeros(kv.yres,N); %% -------- Interpolate in frequency --------------------- for ii=1:N column=coef{ii}; M=length(column); cwork(:,ii)=interp1(linspace(0,1,M),column,linspace(0,1,kv.yres),'nearest'); end; %% -------- Interpolate in time ------------------------- % Time step in next equidistant spacing on the x-axis (in samples) aplot=timepos(end)/kv.xres; % Time positions where we want our pixels plotted (in samples) xr=(0:kv.xres-1)*aplot; coef=zeros(kv.yres,kv.xres); for ii=1:kv.yres data=interp1(timepos,cwork(ii,:).',xr,'nearest').'; coef(ii,:)=data; end; yr=[0,1]; coef=tfplot(coef,aplot,yr,'argimport',flags,kv); if nargout<1 clear coef; end ltfat/inst/nonstatgab/nsdgtlength.m0000664000175000017500000000345312612404256017407 0ustar susnaksusnakfunction L=nsdgtlength(Ls,a); %-*- texinfo -*- %@deftypefn {Function} nsdgtlength %@verbatim %NSDGTLENGTH NSDGT length from signal % Usage: L=nsdgtlength(Ls,a); % % NSDGTLENGTH(Ls,a) returns the length of an NSDGT with time shifts % a, such that it is long enough to expand a % signal of length Ls. % % If the returned length is longer than the signal length, the signal % will be zero-padded by NSDGT or UNSDGT. % % If instead a set of coefficients are given, call NSDGTLENGTHCOEF. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/nsdgtlength.html} %@seealso{nsdgt, nsdgtlengthcoef} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if ~isnumeric(Ls) error('%s: Ls must be numeric.',upper(mfilename)); end; if ~isscalar(Ls) error('%s: Ls must a scalar.',upper(mfilename)); end; if ~isnumeric(a) error('%s: a must be numeric.',upper(mfilename)); end; if ~isvector(a) || any(a<0) error('%s: "a" must be a vector of non-negative numbers.',upper(mfilename)); end; L=sum(a); if Ls>L error('%s: The signal must have at most %i samples.',upper(mfilename),L); end; ltfat/inst/nonstatgab/unsdgt.m0000664000175000017500000001231212612404256016364 0ustar susnaksusnakfunction [c,Ls] = unsdgt(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} unsdgt %@verbatim %UNSDGT Uniform Non-stationary Discrete Gabor transform % Usage: c=unsdgt(f,g,a,M); % [c,Ls]=unsdgt(f,g,a,M); % % Input parameters: % f : Input signal. % g : Cell array of window functions. % a : Vector of time positions of windows. % M : Numbers of frequency channels. % Output parameters: % c : Cell array of coefficients. % Ls : Length of input signal. % % UNSDGT(f,g,a,M) computes the uniform non-stationary Gabor coefficients % of the input signal f. The signal f can be a multichannel signal, % given in the form of a 2D matrix of size Ls xW, with Ls being % the signal length and W the number of signal channels. % % The non-stationary Gabor theory extends standard Gabor theory by % enabling the evolution of the window over time. It is therefore necessary % to specify a set of windows instead of a single window. This is done by % using a cell array for g. In this cell array, the n'th element g{n} % is a row vector specifying the n'th window. However, the uniformity % means that the number of channels is fixed. % % The resulting coefficients is stored as a M xN xW % array. c(m,n,w) is thus the value of the coefficient for time index n, % frequency index m and signal channel w. % % The variable a contains the distance in samples between two consecutive % blocks of coefficients. a is a vectors of integers. The variables g and % a must have the same length. % % The time positions of the coefficients blocks can be obtained by the % following code. A value of 0 correspond to the first sample of the % signal: % % timepos = cumsum(a)-a(1); % % [c,Ls]=nsdgt(f,g,a,M) additionally returns the length Ls of the input % signal f. This is handy for reconstruction: % % [c,Ls]=unsdgt(f,g,a,M); % fr=iunsdgt(c,gd,a,Ls); % % will reconstruct the signal f no matter what the length of f is, % provided that gd are dual windows of g. % % Notes: % ------ % % UNSDGT uses circular border conditions, that is to say that the signal is % considered as periodic for windows overlapping the beginning or the % end of the signal. % % The phaselocking convention used in UNSDGT is different from the % convention used in the DGT function. UNSDGT results are phaselocked % (a phase reference moving with the window is used), whereas DGT results % are not phaselocked (a fixed phase reference corresponding to time 0 of % the signal is used). See the help on PHASELOCK for more details on % phaselocking conventions. % % % % References: % P. Balazs, M. Doerfler, F. Jaillet, N. Holighaus, and G. A. Velasco. % Theory, implementation and applications of nonstationary Gabor frames. % J. Comput. Appl. Math., 236(6):1481-1496, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/unsdgt.html} %@seealso{insdgt, nsgabdual, nsgabtight, phaselock, demo_nsdgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet % TESTING: TEST_NSDGT % REFERENCE: if ~isnumeric(a) error('%s: a must be numeric.',upper(mfilename)); end; if ~isnumeric(M) error('%s: M must be numeric.',upper(mfilename)); end; %% ----- step 1 : Verify f and determine its length ------- % Change f to correct shape. [f,Ls,W,wasrow,remembershape]=comp_sigreshape_pre(f,upper(mfilename),0); L=nsdgtlength(Ls,a); f=postpad(f,L); [g,info]=nsgabwin(g,a,M); if ~info.isuniform error('%s: M must be a scalar or a constant vector.',upper(mfilename)); end; M=M(1); timepos=cumsum(a)-a(1); N=length(a); % Number of time positions c=zeros(M,N,W,assert_classname(f,g{1})); % Initialisation of the result for ii = 1:N Lg = length(g{ii}); gt = g{ii}; gt = gt([end-floor(Lg/2)+1:end,1:ceil(Lg/2)]); win_range = mod(timepos(ii)+(-floor(Lg/2):ceil(Lg/2)-1),L)+1; if M < Lg % if the number of frequency channels is too small, aliasing is introduced col = ceil(Lg/M); temp = zeros(col*M,W,assert_classname(f,g{1})); temp([col*M-floor(Lg/2)+1:end,1:ceil(Lg/2)],:) = bsxfun(@times,f(win_range,:),gt); temp = reshape(temp,M,col,W); c(:,ii,:)=fft(sum(temp,2)); else temp = zeros(M,W,assert_classname(f,g{1})); temp([end-floor(Lg/2)+1:end,1:ceil(Lg/2)],:) = bsxfun(@times, ... f(win_range,:),gt); c(:,ii,:)=fft(temp); end end ltfat/inst/nonstatgab/nsgabframebounds.m0000664000175000017500000000503512612404256020404 0ustar susnaksusnakfunction [AF,BF]=nsgabframebounds(g,a,M) %-*- texinfo -*- %@deftypefn {Function} nsgabframebounds %@verbatim %NSGABFRAMEBOUNDS Frame bounds of non-stationary Gabor frame % Usage: fcond=nsgabframebounds(g,a,M); % [A,B]=nsgabframebounds(g,a,M); % % Input parameters: % g : Cell array of windows % a : Vector of time positions of windows. % M : Vector of numbers of frequency channels. % Output parameters: % fcond : Frame condition number (B/A) % A,B : Frame bounds. % % NSGABFRAMEBOUNDS(g,a,Ls) calculates the ratio B/A of the frame % bounds of the non-stationary discrete Gabor frame defined by windows % given in g at positions given by a. Please see the help on NSDGT % for a more thourough description of g and a. % % [A,B]=NSGABFRAMEBOUNDS(g,a,Ls) returns the actual frame bounds A* % and B instead of just the their ratio. % % The computed frame bounds are only valid for the 'painless case' when % the number of frequency channels used for computation of NSDGT is greater % than or equal to the window length. This correspond to cases for which % the frame operator is diagonal. % % % References: % P. Balazs, M. Doerfler, F. Jaillet, N. Holighaus, and G. A. Velasco. % Theory, implementation and applications of nonstationary Gabor frames. % J. Comput. Appl. Math., 236(6):1481-1496, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/nsgabframebounds.html} %@seealso{nsgabtight, nsdgt, insdgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet % TESTING: TEST_NSDGT % Compute the diagonal of the frame operator. f=nsgabframediag(g,a,M); AF=min(f); BF=max(f); if nargout<2 % Avoid the potential warning about division by zero. if AF==0 AF=Inf; else AF=BF/AF; end; end; ltfat/inst/nonstatgab/unsdgtreal.m0000664000175000017500000001353012612404256017233 0ustar susnaksusnakfunction [c,Ls] = unsdgtreal(f,g,a,M) %-*- texinfo -*- %@deftypefn {Function} unsdgtreal %@verbatim %UNSDGTREAL Uniform non-stationary Discrete Gabor transform % Usage: c=unsdgtreal(f,g,a,M); % [c,Ls]=unsdgtreal(f,g,a,M); % % Input parameters: % f : Input signal. % g : Cell array of window functions. % a : Vector of time positions of windows. % M : Vector of numbers of frequency channels. % Output parameters: % c : Cell array of coefficients. % Ls : Length of input signal. % % UNSDGTREAL(f,g,a,M) computes the non-stationary Gabor coefficients of the % input signal f. The signal f can be a multichannel signal, given in % the form of a 2D matrix of size Ls xW, with Ls the signal % length and W the number of signal channels. % % As opposed to NSDGT only the coefficients of the positive frequencies % of the output are returned. UNSDGTREAL will refuse to work for complex % valued input signals. % % The non-stationary Gabor theory extends standard Gabor theory by % enabling the evolution of the window over time. It is therefore % necessary to specify a set of windows instead of a single window. This % is done by using a cell array for g. In this cell array, the n'th % element g{n} is a row vector specifying the n'th window. The % uniformity means that the number of channels is not allowed to vary over % time. % % The resulting coefficients is stored as a M/2+1 xN xW % array. c(m,n,l) is thus the value of the coefficient for time index n, % frequency index m and signal channel l. % % The variable a contains the distance in samples between two % consecutive blocks of coefficients. The variable M contains the % number of channels for each block of coefficients. Both a and M are % vectors of integers. % % The variables g, a and M must have the same length, and the result c* % will also have the same length. % % The time positions of the coefficients blocks can be obtained by the % following code. A value of 0 correspond to the first sample of the % signal: % % timepos = cumsum(a)-a(1); % % [c,Ls]=UNSDGTREAL(f,g,a,M) additionally returns the length Ls of the input % signal f. This is handy for reconstruction: % % [c,Ls]=unsdgtreal(f,g,a,M); % fr=insdgtreal(c,gd,a,Ls); % % will reconstruct the signal f no matter what the length of f is, % provided that gd are dual windows of g. % % Notes: % ------ % % UNSDGTREAL uses circular border conditions, that is to say that the signal is % considered as periodic for windows overlapping the beginning or the % end of the signal. % % The phaselocking convention used in UNSDGTREAL is different from the % convention used in the DGT function. UNSDGTREAL results are phaselocked (a % phase reference moving with the window is used), whereas DGT results are % not phaselocked (a fixed phase reference corresponding to time 0 of the % signal is used). See the help on PHASELOCK for more details on % phaselocking conventions. % % % % References: % P. Balazs, M. Doerfler, F. Jaillet, N. Holighaus, and G. A. Velasco. % Theory, implementation and applications of nonstationary Gabor frames. % J. Comput. Appl. Math., 236(6):1481-1496, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/nonstatgab/unsdgtreal.html} %@seealso{nsdgt, insdgtreal, nsgabdual, nsgabtight, phaselock, demo_nsdgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Florent Jaillet % TESTING: TEST_NSDGTREAL % REFERENCE: if ~isnumeric(a) error('%s: a must be numeric.',upper(mfilename)); end; if ~isnumeric(M) error('%s: M must be numeric.',upper(mfilename)); end; L=sum(a); [f,Ls,W,wasrow,remembershape]=comp_sigreshape_pre(f,'UNSDGTREAL',0); f=postpad(f,L); [g,info]=nsgabwin(g,a,M); if ~info.isuniform error('%s: M must be a scalar or a constant vector.',upper(mfilename)); end; M=M(1); timepos=cumsum(a)-a(1); N=length(a); % Number of time positions M2=floor(M/2)+1; c=zeros(M2,N,W,assert_classname(f,g{1})); % Initialisation of the result for ii=1:N shift=floor(length(g{ii})/2); temp=zeros(M,W,assert_classname(f,g{1})); % Windowing of the signal. % Possible improvements: The following could be computed faster by % explicitely computing the indexes instead of using modulo and the % repmat is not needed if the number of signal channels W=1 (but the time % difference when removing it whould be really small) temp(1:length(g{ii}))=f(mod((1:length(g{ii}))+timepos(ii)-shift-1,L)+1,:).*... repmat(conj(circshift(g{ii},shift)),1,W); temp=circshift(temp,-shift); if M Maintainer: Zdenek Prusa Title: The Large Time-Frequency Analysis Toolbox Description: The Large Time/Frequency Analysis Toolbox (LTFAT) is a Matlab/Octave toolbox for working with time-frequency analysis, wavelets and signal processing. It is intended both as an educational and a computational tool. The toolbox provides a large number of linear transforms including Gabor and wavelet transforms along with routines for constructing windows (filter prototypes) and routines for manipulating coefficients. License: GPLv3+ Depends: octave (>= 3.8.0) BuildRequires: fftw3 [Debian] libfftw3-3, lapack [Debian] liblapack3, blas [Debian] libblas3, portaudio [Debian] portaudio19-dev Java Runtime [Debian] default-jre Url: http://ltfat.github.io/ ltfat/inst/wavelets/0000775000175000017500000000000012612404256014375 5ustar susnaksusnakltfat/inst/wavelets/wfiltdt_optsym.m0000664000175000017500000000366612612404256017656 0ustar susnaksusnakfunction [h,g,a,info] = wfiltdt_optsym(N) %-*- texinfo -*- %@deftypefn {Function} wfiltdt_optsym %@verbatim %WFILTDT_OPTSYM Optimizatized Symmetric Self-Hilbertian Filters % % Usage: [h,g,a] = wfiltdt_optsym(N); % % [h,g,a]=WFILTDT_OPTSYM(N) with N in {1,2,3} returns filters % suitable for dual-tree complex wavelet transform with optimized % symmetry. % % Examples: % --------- % : % wfiltdtinfo('optsym3'); % % References: % B. Dumitrescu, I. Bayram, and I. W. Selesnick. Optimization of % symmetric self-hilbertian filters for the dual-tree complex wavelet % transform. IEEE Signal Process. Lett., 15:146-149, 2008. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfiltdt_optsym.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa [h(:,1),g(:,1),a,info] = wfilt_optsyma(N); [h(:,2),g(:,2)] = wfilt_optsymb(N); % Default first and leaf filters % They are chosen to be orthonormal near-symmetric here in order not to % break the orthonormality of the overal representation. [info.defaultfirst, info.defaultfirstinfo] = fwtinit('symorth1'); [info.defaultleaf, info.defaultleafinfo] = ... deal(info.defaultfirst,info.defaultfirstinfo); ltfat/inst/wavelets/fwt2.m0000664000175000017500000001022212612404256015432 0ustar susnaksusnakfunction c = fwt2(f,w,J,varargin) %-*- texinfo -*- %@deftypefn {Function} fwt2 %@verbatim %FWT2 Fast Wavelet Transform 2D % Usage: c = fwt2(f,w,J); % c = fwt2(f,w,J,...); % % Input parameters: % f : Input data. % w : Wavelet filter bank definition. % J : Number of filter bank iterations. % % Output parameters: % c : Coefficients stored in a matrix. % % c=FWT2(f,w,J) returns wavelet coefficients c of the input matrix f* % using J iterations of the basic wavelet filter bank defined by w. % Please see FWT for description of w and J. % % FWT2 supports just the non-expansive boundary condition 'per' and % critically subsampled filter banks in order to be able to pack the % coefficients in a matrix. Also the J is limited to some maximum value % for the same reason. % % Additional flags make it possible to specify how the algorithm % should subdivide the matrix: % % 'standard' % Standard behaviour of the JPEG 2000 standard. % This is the default. % % 'tensor' % This corresponds to doing a full FWT along each dimension of % the matrix. % % Examples: % --------- % % Some simple example of calling the FWT2 function, compare with the % CAMERAMAN image. Only the 70 dB largest coefficients are shown, to % make the structures more visible. % % The first example uses the standard layout: % % c = fwt2(cameraman,'db8',4); % imagesc(dynlimit(20*log10(abs(c)),70)); % axis('image'); colormap(gray); % % The second example uses the tensor product layout: % % c = fwt2(cameraman,'db8',4,'tensor'); % imagesc(dynlimit(20*log10(abs(c)),70)); % axis('image'); colormap(gray); % % % % References: % S. Mallat. A wavelet tour of signal processing. Academic Press, San % Diego, CA, 1998. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/fwt2.html} %@seealso{ifwt2, fwtinit, demo_imagecompression} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; complainif_notposint(J,'J'); [M,N]=size(f); if(M==1||N==1) error('%s: The input data is vector.',upper(mfilename)); end % Initialize the wavelet filters structure w = fwtinit(w); if(~all(w.a==length(w.h))) error('%s: Non-critically subsampled filter banks not supported.',... upper(mfilename)); end %Do not allow single wavelet coefficient at two consecutive levels if(any(w.a(1)^J>size(f))) error(['%s: %d-level decomposition of the input is not possible. ',... 'Maximum J is %d.'],... upper(mfilename),J,floor(log(min(size(f)))/log(w.a(1)))); end %% ----- step 0 : Check inputs ------- definput.import = {'fwt2'}; [flags,kv]=ltfatarghelper({},definput,varargin); nFilts = numel(w.h); Lcrows = fwtclength(size(f,1),w,J); Lccols = fwtclength(size(f,2),w,J); if(flags.do_standard) Jstep = 1; c = fwt(f,w,Jstep,'dim',1,'per'); c = fwt(c,w,Jstep,'dim',2,'per'); for jj=1:J-1 colRange = 1:Lcrows(end-jj*(nFilts-1)+1); rowRange = 1:Lccols(end-jj*(nFilts-1)+1); c(colRange,rowRange) = fwt(c(colRange,rowRange),w,Jstep,'dim',1,'per'); c(colRange,rowRange) = fwt(c(colRange,rowRange),w,Jstep,'dim',2,'per'); end elseif(flags.do_tensor) c = fwt(f,w,J,'dim',1,'per'); c = fwt(c,w,J,'dim',2,'per'); else error('%s: Should not get here. Bug somewhere else.',upper(mfilename)); end ltfat/inst/wavelets/wfilt_coif.m0000664000175000017500000001134412612404256016703 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_coif(K) %-*- texinfo -*- %@deftypefn {Function} wfilt_coif %@verbatim %WFILT_COIF Coiflets % % Usage: [h,g,a] = wfilt_coif(K); % % [h,g,a]=WFILT_COIF(K) with K in {1,2,3,4,5} returns a Coiflet % filters of order 2K the number of vanishing moments of both the % scaling and the wavelet functions. % % Values are taken from table 8.1 from the reference. REMARK: There is % a typo in 2nd element for K==1. % % Examples: % --------- % : % wfiltinfo('coif2'); % % : % wfiltinfo('coif5'); % % References: % I. Daubechies. Ten Lectures on Wavelets. Society for Industrial and % Applied Mathematics, Philadelphia, PA, USA, 1992. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_coif.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa info.istight = 1; a = [2;2]; switch(K) case 1 hlp = [ -0.011070271529 -0.051429728471 0.272140543058 0.602859456942 0.238929728471 -0.051429728471 ]; d = [-3,-3]; case 2 hlp = [ -0.000509505399 -0.001289203356 0.003967883613 0.016744410163 -0.042026480461 -0.054085607092 0.294867193696 0.574682393857 0.273021046535 -0.047639590310 -0.029320137980 0.011587596739 ]; d = [-7,-5]; case 3 hlp = [ -0.000024465734 -0.000050192775 0.000329665174 0.000790205101 -0.001820458916 -0.006369601011 0.011229240962 0.024434094321 -0.058196250762 -0.050770140755 0.302983571773 0.561285256870 0.286503335274 -0.043220763560 -0.046507764479 0.016583560479 0.005503126709 -0.002682418671 ]; d= [-11,-7]; case 4 hlp = [ -0.000001262175 -0.000002304942 0.000022082857 0.000044080354 -0.000183829769 -0.000416500571 0.000895594529 0.002652665946 -0.004001012886 -0.010756318517 0.017735837438 0.027813640153 -0.068038127051 -0.047112738865 0.307157326198 0.553126452562 0.293667390895 -0.039652648517 -0.057464234429 0.018867235378 0.011362459244 -0.005194524026 -0.001152224852 0.000630961046 ]; d= [-15,-9]; case 5 hlp = [ -0.0000000673 -0.0000001184 0.0000014593 0.0000026408 -0.0000150720 -0.0000292321 0.0000993776 0.0002137298 -0.0004512270 -0.0011758222 0.0017206547 0.0047830014 -0.0064800900 -0.0139736879 0.0231107770 0.0291958795 -0.0746522389 -0.0438660508 0.3097068490 0.5475054294 0.2980923235 -0.0368000736 -0.0649972628 0.0199178043 0.0165520664 -0.0071637819 -0.0029411108 0.0015402457 0.0002535612 -0.0001499638 ]; d= [-19,-11]; otherwise error('%s: No such COIFLET filters.',upper(mfilename)); end hlp = hlp*sqrt(2); harr = [hlp, (-1).^(0:size(hlp,1)-1).'.*flipud(hlp)]; h=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); h=cellfun(@(hEl,dEl) struct('h',hEl(:),'offset',dEl),h,num2cell(d),... 'UniformOutput',0); g = h; ltfat/inst/wavelets/uwpfbt.m0000664000175000017500000001203212612404256016060 0ustar susnaksusnakfunction [c,info]=uwpfbt(f,wt,varargin) %-*- texinfo -*- %@deftypefn {Function} uwpfbt %@verbatim %UWPFBT Undecimated Wavelet Packet FilterBank Tree % Usage: c=uwpfbt(f,wt); % [c,info]=uwpfbt(...); % % Input parameters: % f : Input data. % wt : Wavelet Filterbank tree % % Output parameters: % c : Coefficients in a L xM matrix. % % c=UWPFBT(f,wt) returns coefficients c obtained by applying the % undecimated wavelet filterbank tree defined by wt to the input data % f using the "a-trous" algorithm. Number of columns in c (*M*) is % defined by the total number of outputs of each node. The outputs c(:,jj) % are ordered in the breadth-first node order manner. % % [c,info]=UWPFBT(f,wt) additionally returns struct. info containing % the transform parameters. It can be conviniently used for the inverse % transform IUWPFBT e.g. fhat = iUWPFBT(c,info). It is also required % by the PLOTWAVELETS function. % % If f is a matrix, the transformation is applied to each of W columns % and the coefficients in c are stacked along the third dimension. % % Please see help for WFBT description of possible formats of wt. % % Scaling of intermediate outputs: % -------------------------------- % % The following flags control scaling of intermediate outputs and % therefore the energy relations between coefficient subbands. An % intermediate output is an output of a node which is further used as an % input to a descendant node. % % 'intsqrt' % Each intermediate output is scaled by 1/sqrt(2). % If the filterbank in each node is orthonormal, the overall % undecimated transform is a tight frame. % This is the default. % % 'intnoscale' % No scaling of intermediate results is used. This is % necessaty for the WPBEST function to correctly work with % the cost measures. % % 'intscale' % Each intermediate output is scaled by 1/2. % % If 'intnoscale' is used, 'intscale' must be used in IUWPFBT (and vice % versa) in order to obtain a perfect reconstruction. % % Scaling of filters: % ------------------- % % When compared to WPFBT, the subbands produced by UWPFBT are % gradually more and more redundant with increasing depth in the tree. % This results in energy grow of the coefficients. There are 3 flags % defining filter scaling: % % 'sqrt' % Each filter is scaled by 1/sqrt(a), there a is the hop % factor associated with it. If the original filterbank is % orthonormal, the overall undecimated transform is a tight % frame. % This is the default. % % 'noscale' % Uses filters without scaling. % % 'scale' % Each filter is scaled by 1/a. % % If 'noscale' is used, 'scale' must be used in IUWPFBT (and vice % versa) in order to obtain a perfect reconstruction. % % Examples: % --------- % % A simple example of calling the UWPFBT function using the "full % decomposition" wavelet tree: % % [f,fs] = greasy; % J = 6; % [c,info] = uwpfbt(f,{'db10',J,'full'}); % plotwavelets(c,info,fs,'dynrange',90); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/uwpfbt.html} %@seealso{iuwpfbt, wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'UWPFBT'); definput.import = {'wfbtcommon','uwfbtcommon'}; definput.flags.interscaling = {'intsqrt', 'intscale', 'intnoscale'}; [flags,kv]=ltfatarghelper({},definput,varargin); % Initialize the wavelet tree structure wt = wfbtinit(wt,flags.forder); %% ----- step 1 : Verify f and determine its length ------- [f,Ls]=comp_sigreshape_pre(f,upper(mfilename),0); if(Ls<2) error('%s: Input signal seems not to be a vector of length > 1.',... upper(mfilename)); end %% ----- step 3 : Run computation wtPath = nodeBForder(0,wt); nodesUps = nodesFiltUps(wtPath,wt); rangeLoc = nodesLocOutRange(wtPath,wt); c = comp_uwpfbt(f,wt.nodes(wtPath),rangeLoc,nodesUps,flags.scaling,... flags.interscaling); %% ----- Optional : Fill the info struct. ----- if nargout>1 info.fname = 'uwpfbt'; info.wt = wt; info.fOrder = flags.forder; info.isPacked = 0; info.interscaling = flags.interscaling; info.scaling = flags.scaling; end ltfat/inst/wavelets/wfbtput.m0000664000175000017500000001444012612404256016251 0ustar susnaksusnakfunction wt = wfbtput(d,k,w,wt,forceStr) %-*- texinfo -*- %@deftypefn {Function} wfbtput %@verbatim %WFBTPUT Put node to the filterbank tree % Usage: wt = wfbtput(d,k,w,wt); % wt = wfbtput(d,k,w,wt,'force'); % % Input parameters: % d : Level in the tree (0 - root). % k : Index (array of indexes) of the node at level d (starting at 0). % w : Node, basic wavelet filterbank. % wt : Wavelet filterbank tree structure (as returned from % WFBTINIT). % % Output parameters: % wt : Modified filterbank structure. % % WFBTPUT(d,k,w,wt) puts the basic filterbank w to the filter % tree structure wt at level d and index(es) k. The output is a % modified tree structure. d and k have to specify unconnected output % of the leaf node. Error is issued if d and k points to already % existing node. For possible formats of parameter w see help of FWT. % Parameter wt has to be a structure returned by WFBTINIT. % % WFBTPUT(d,k,w,wt,'force') does the same but replaces node at d and k* % if it already exists. If the node to be replaced has any children, % the number of outputs of the replacing node have to be equal to number of % outputs of the node beeing replaced. % % Examples: % --------- % % This example shows magnitude frequency responses of a tree build from % the root: % % % Initialize empty struct % wt = wfbtinit(); % % Put root node to the empty struct % wt1 = wfbtput(0,0,'db8',wt); % % Connect a different nodes to both outputs of the root % wt2 = wfbtput(1,[0,1],'db10',wt1); % % Connect another nodes just to high-pass outputs of nodes just added % wt3 = wfbtput(2,[1,3],'db10',wt2); % % Add another node at level 3 % wt4 = wfbtput(3,1,'db16',wt3); % % % Create identical filterbanks % [g1,a1] = wfbt2filterbank(wt1,'freq'); % [g2,a2] = wfbt2filterbank(wt2,'freq'); % [g3,a3] = wfbt2filterbank(wt3,'freq'); % [g4,a4] = wfbt2filterbank(wt4,'freq'); % % % Plot frequency responses of the growing tree. Linear scale % % (both axis) is used and positive frequencies only are shown. % subplot(4,1,1); % filterbankfreqz(g1,a1,1024,'plot','linabs','posfreq'); % subplot(4,1,2); % filterbankfreqz(g2,a2,1024,'plot','linabs','posfreq'); % subplot(4,1,3); % filterbankfreqz(g3,a3,1024,'plot','linabs','posfreq'); % subplot(4,1,4); % filterbankfreqz(g4,a4,1024,'plot','linabs','posfreq'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtput.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa if nargin<4 error('%s: Too few input parameters.',upper(mfilename)); end %if isfield(wt,'dualnodes') % error('%s: Cannot modify the dual-tree struct.',upper(mfilename)); %end do_force = 0; if nargin==5 if ~ischar(forceStr) error('%s: Fifth parameter should be a string.',upper(mfilename)); end if strcmpi(forceStr,'force') do_force = 1; end end % This was replaced. Calling ltfatargheler was too slow. %definput.flags.force = {'noforce','force'}; %[flags,kv]=ltfatarghelper({},definput,varargin); node = fwtinit(w); oldnodecount = numel(wt.nodes); nodeschanged = []; [nodeNoArray,nodeChildIdxArray] = depthIndex2NodeNo(d,k,wt); for ii=1:numel(nodeNoArray) nodeNo = nodeNoArray(ii); nodeChildIdx = nodeChildIdxArray(ii); if(nodeNo==0) % adding root if(~isempty(find(wt.parents==0,1))) if(do_force) rootId = find(wt.parents==0,1); % if root has children, check if the new root has the same % number of them if(~isempty(find(wt.children{rootId}~=0,1))) if(length(w.g)~=length(wt.nodes{rootId}.g)) error('%s: The replacing root have to have %d filters.',mfilename,length(wt.nodes{rootId}.g)); end end else error('%s: Root already defined. Use FORCE option to replace.',mfilename); end wt.nodes{rootId} = node; nodeschanged(end+1) = rootId; if isfield(wt,'dualnodes') wt.dualnodes{rootId} = node; end continue; end wt.nodes{end+1} = node; wt.parents(end+1) = nodeNo; wt.children{end+1} = []; if isfield(wt,'dualnodes') wt.dualnodes{end+1} = node; end continue; end childrenIdx = find(wt.children{nodeNo}~=0); found = find(childrenIdx==nodeChildIdx,1); if(~isempty(found)) if(do_force) %check if childrenIdx has any children tmpnode = wt.children{nodeNo}(found); if(~isempty(find(wt.children{tmpnode}~=0, 1))) if length(node.g)~=length(wt.nodes{tmpnode}.g) error('%s: The replacing node must have %d filters.',mfilename,length(wt.nodes{tmpnode}.g)); end end wt.nodes{tmpnode} = node; nodeschanged(end+1) = tmpnode; if isfield(wt,'dualnodes') wt.dualnodes{tmpnode} = node; end % Since we are replacing a node, all links are already correct continue; else error('%s: Such node (depth=%d, idx=%d) already exists. Use FORCE option to replace.',mfilename,d,k); end end wt.nodes{end+1} = node; wt.parents(end+1) = nodeNo; wt.children{end+1} = []; wt.children{nodeNo}(nodeChildIdx) = numel(wt.parents); if isfield(wt,'dualnodes') wt.dualnodes{end+1} = node; end end % We have to correctly shuffle filters in the just added (or modified) filters % if the tree was already defined as frequency ordered. if wt.freqOrder wt = nat2freqOrder(wt,[nodeschanged,oldnodecount+1:numel(wt.nodes)]); end ltfat/inst/wavelets/dtwfbinit.m0000664000175000017500000002460412612404256016553 0ustar susnaksusnakfunction [dualwt,info] = dtwfbinit(dualwtdef,varargin) %-*- texinfo -*- %@deftypefn {Function} dtwfbinit %@verbatim %DTWFBINIT Dual-Tree Wavelet Filterbank Initialization % Usage: dualwt=dtwfbinit(dualwtdef); % % Input parameters: % dualwtdef : Dual-tree filterbank definition. % % Output parameters: % dualwt : Dual-tree filtarbank structure. % % dtwfinit() (a call without aguments) creates an empty structure. It % has the same fields as the struct. returned from WFBTINIT plus a field % to hold nodes from the second tree: % % .nodes Filterbank nodes of the first tree % % .dualnodes Filterbank nodes of the second tree % % .children Indexes of children nodes % % .parents Indexes of a parent node % % .forder Frequency ordering of the resultant frequency bands. % % dtwfinit({dualw,J,flag}) creates a structure representing a dual-tree % wavelet filterbank of depth J, using dual-tree wavelet filters % specified by dualw. The shape of the tree is controlled by flag. % Please see help on DTWFB or DTWFBREAL for description of the % parameters. % % [dualwt,info]=dtwfinit(...) additionally returns info struct which % provides some information about the computed window: % % info.tight % True if the overall tree construct a tight frame. % % info.dw % A structure containing basic dual-tree filters as returned from % fwtinit(dualwtdef,'wfiltdt_'). % % Additional optional flags % ------------------------- % % 'freq','nat' % Frequency or natural ordering of the resulting coefficient subbands. % Default ordering is 'freq'. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/dtwfbinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Output structure definition. % The structure has the same fields as returned by wfbtinit % but contains additional field .dualnodes containing % filters of the dual tree %%%%%%%%%%%%%%%%%%%%%%%%%%%%% dualwt = wfbtinit(); dualwt.dualnodes = {}; %%%%%%%%%%%%%%%%%%%%%%%%%%%%% info.istight = 0; if nargin < 1 return; end % Frequency or natural ordering definput.import = {'wfbtcommon'}; [flags,kv]=ltfatarghelper({},definput,varargin); % Strict throws an error if filterbank is not tight and ana: or syn: % is not specified. do_strict = 0; % Dual returns the 'other' filterbank. do_dual = 0; % Check 'strict' if iscell(dualwtdef) && ischar(dualwtdef{1}) && strcmpi(dualwtdef{1},'strict') do_strict = 1; dualwtdef = dualwtdef{2:end}; end % Check 'dual' if iscell(dualwtdef) && ischar(dualwtdef{1}) && strcmpi(dualwtdef{1},'dual') do_dual = 1; dualwtdef = dualwtdef{2:end}; end % FIRST, check if dtwdef is already a struct if isstruct(dualwtdef) if isfield(dualwtdef,'nodes') && isfield(dualwtdef,'dualnodes') dualwt = dualwtdef; if do_dual || do_strict nodesArg = dualwt.nodes; % Undo the frequency ordering if dualwt.freqOrder dualwt = nat2freqOrder(dualwt,'rev'); end doDualTreeFilt = cellfun(@(nEl) strcmp(nEl.wprefix,'wfiltdt_'),... nodesArg); if do_dual nodesArg = cellfun(@(nEl) {'dual',nEl},nodesArg,... 'UniformOutput',0); end if do_strict nodesArg = cellfun(@(nEl) {'strict',nEl},nodesArg,... 'UniformOutput',0); end info.istight = 1; dualwt.nodes = {}; dualwt.dualnodes = {}; rangeRest = 1:numel(nodesArg); rangeRest(dualwt.parents==0) = []; for ii=rangeRest if doDualTreeFilt(ii) % This is dual-tree specific filterbank [dualwt.nodes{ii},infotmp] = fwtinit(nodesArg{ii},'wfiltdt_'); dualwt.dualnodes{ii} = dualwt.nodes{ii}; dualwt.nodes{ii}.h(:,2) = []; dualwt.nodes{ii}.g(:,2) = []; dualwt.dualnodes{ii}.h(:,1) = []; dualwt.dualnodes{ii}.g(:,1) = []; else [dualwt.nodes{ii},infotmp] = fwtinit(nodesArg{ii}); dualwt.dualnodes{ii} = dualwt.nodes{ii}; end info.istight = info.istight && infotmp.istight; end % Treat root separately [rootNode,infotmp] = fwtinit(nodesArg{dualwt.parents==0}); dualwt = replaceRoots(dualwt,rootNode); info.istight = info.istight && infotmp.istight; % Do the filter frequency shuffling again, since the filters were % overwritten in fwtinit. if dualwt.freqOrder dualwt = nat2freqOrder(dualwt); end end % Do filter shuffling if flags.do_freq differs from the wt.freqOrder. % Frequency and natural oreding coincide for DWT. if dualwt.freqOrder && ~flags.do_freq dualwt = nat2freqOrder(dualwt,'rev'); dualwt.freqOrder = ~dualwt.freqOrder; elseif ~dualwt.freqOrder && flags.do_freq dualwt = nat2freqOrder(dualwt); dualwt.freqOrder = ~dualwt.freqOrder; end else error('%s: Invalid dual-tree structure format.',upper(mfilename)); end return; end % Parse the other params % Tree type definput.flags.treetype = {'dwt','full','doubleband','quadband',... 'octaband','root'}; % First stage filterbank definput.keyvals.first = []; % Leaf filterbank definput.keyvals.leaf = []; % Depth of the tree definput.keyvals.J = []; wdef = dualwtdef{1}; [flags2,kv2,J]=ltfatarghelper({'J'},definput,dualwtdef(2:end)); complainif_notposint(J,'J'); % Now dtwdef is this {dtw,J,flag,'first',w} if do_dual wdef = {'dual',wdef}; end if do_strict wdef = {'strict',wdef}; end if ~(ischar(wdef) || iscell(wdef)) error('%s: Unrecognized format of dual-tree filters.',upper(mfilename)); end % Get the dual-tree filters [w, dtinfo] = fwtinit(wdef,'wfiltdt_'); info.istight = dtinfo.istight; info.dw = w; % Determine the first-stage wavelet filters if ~isfield(dtinfo,'defaultfirst') && isempty(kv2.first) error('%s: No first stage wavelet filters specified.',upper(mfilename)); end if ~isempty(kv2.first) if do_dual kv2.first = {'dual',kv2.first}; end if do_strict kv2.first = {'strict',kv2.first}; end [kv2.first, firstinfo] = fwtinit(kv2.first); isfirsttight = firstinfo.istight; else kv2.first = dtinfo.defaultfirst; isfirsttight = dtinfo.defaultfirstinfo.istight; end isleaftight = []; if ~(flags2.do_dwt || flags2.do_root) % Determine leaf nodes (only valid for wavelet packets) if ~isfield(dtinfo,'defaultleaf') && isempty(kv2.leaf) error('%s: No leaf wavelet filters specified.',... upper(mfilename)); else if isempty(kv2.leaf) kv2.leaf = dtinfo.defaultleaf; isleaftight = dtinfo.defaultleafinfo.istight; else if do_dual kv2.leaf = {'dual',kv2.leaf}; end if do_strict kv2.leaf = {'strict',kv2.leaf}; end [kv2.leaf, leafinfo] = fwtinit(kv2.leaf); isleaftight = leafinfo.istight; end end end % Extract filters for dual trees % This is a bit clumsy... w1 = w; w1.h = w1.h(:,1); w1.g = w1.g(:,1); w2 = w; w2.h = w2.h(:,2); w2.g = w2.g(:,2); % Initialize both trees dualwt = wfbtinit({w1,J,flags2.treetype}, 'nat'); dtw2 = wfbtinit({w2,J,flags2.treetype}, 'nat'); % Merge tree definitions to a single struct. dualwt.dualnodes = dtw2.nodes; dualwt = replaceRoots(dualwt,kv2.first); % Replace the 'packet leaf nodes' (see Bayram) if ~(flags2.do_dwt || flags2.do_root) filtNo = numel(w1.g); if flags2.do_doubleband for jj=1:J-1 dualwt = wfbtput(2*(jj+1)-1,1:filtNo-1,kv2.leaf,dualwt,'force'); end elseif flags2.do_quadband idx = 1:filtNo-1; idx = [idx,idx+filtNo]; dualwt = wfbtput(2,idx,kv2.leaf,dualwt,'force'); for jj=1:J-1 dualwt = wfbtput(3*(jj+1)-2,1:filtNo-1,kv2.leaf,dualwt,'force'); dualwt = wfbtput(3*(jj+1)-1,1:2*filtNo-1,kv2.leaf,dualwt,'force'); end elseif flags2.do_octaband idx = 1:filtNo-1;idx = [idx,idx+filtNo]; dualwt = wfbtput(2,idx,kv2.leaf,dualwt,'force'); idx = 1:2*filtNo-1;idx = [idx,idx+2*filtNo]; dualwt = wfbtput(3,idx,kv2.leaf,dualwt,'force'); for jj=1:J-1 dualwt = wfbtput(4*(jj+1)-3,1:filtNo-1,kv2.leaf,dualwt,'force'); dualwt = wfbtput(4*(jj+1)-2,1:2*filtNo-1,kv2.leaf,dualwt,'force'); dualwt = wfbtput(4*(jj+1)-1,1:4*filtNo-1,kv2.leaf,dualwt,'force'); end elseif flags2.do_full for jj=2:J-1 idx = 1:filtNo^jj-1; idx(filtNo^(jj-1))=[]; dualwt = wfbtput(jj,idx,kv2.leaf,dualwt,'force'); end else error('%s: Something is seriously wrong!',upper(mfilename)); end end % Do filter shuffling if frequency ordering is required, dualwt.freqOrder = flags.do_freq; if flags.do_freq dualwt = nat2freqOrder(dualwt); end % info.istight = isfirsttight && info.istight; if ~isempty(isleaftight) info.istight = info.istight && isleaftight; end function dtw = replaceRoots(dtw,rootNode) % Replace the root nodes firstTmp = rootNode; firstTmp.h = cellfun(@(hEl) setfield(hEl,'offset',hEl.offset+1),... firstTmp.h,'UniformOutput',0); firstTmp.g = cellfun(@(gEl) setfield(gEl,'offset',gEl.offset+1),... firstTmp.g,'UniformOutput',0); % First tree root dtw.nodes{dtw.parents==0} = rootNode; % Second tree root (shifted by 1 sample) dtw.dualnodes{dtw.parents==0} = firstTmp; ltfat/inst/wavelets/wfbt.m0000664000175000017500000001170012612404256015514 0ustar susnaksusnakfunction [c,info]=wfbt(f,wt,varargin) %-*- texinfo -*- %@deftypefn {Function} wfbt %@verbatim %WFBT Wavelet FilterBank Tree % Usage: c=wfbt(f,wt); % c=wfbt(f,wt,ext); % [c,info]=wfbt(...); % % Input parameters: % f : Input data. % wt : Wavelet filterbank tree definition. % % Output parameters: % c : Coefficients stored in a cell-array. % info : Transform parameters struct. % % WFBT(f,wt) returns coefficients c obtained by applying a wavelet % filterbank tree defined by wt to the input data f. % % [c,info]=WFBT(f,wt) additionally returns struct. info containing % transform parameters. It can be conviniently used for the inverse % transform IWFBT e.g. fhat = iWFBT(c,info). It is also required by % the PLOTWAVELETS function. % % wt defines a tree shaped filterbank structure build from the % elementary two (or more) channel wavelet filters. The tree can have any % shape and thus provide a flexible frequency covering. The outputs of the % tree leaves are stored in c. % % The wt parameter can have two formats: % % 1) Cell array containing 3 elements {w,J,treetype}, where w is % the basic wavelet filterbank definition as in FWT function, J* % stands for the depth of the tree and the flag treetype defines % the type of the tree to be used. Supported options are: % % 'dwt' % Plain DWT tree (default). This gives one band per octave freq. % resolution when using 2 channel basic wavelet filterbank and % produces coefficients identical to the ones in FWT. % % 'full' % Full filterbank tree. Both (all) basic filterbank outputs are % decomposed further up to depth J achieving linear frequency band % division. % % 'doubleband','quadband','octaband' % The filterbank is designed such that it mimics 4-band, 8-band or % 16-band complex wavelet transform provided the basic filterbank % is 2 channel. In this case, J is treated such that it defines % number of levels of 4-band, 8-band or 16-band transform. % % 2) Structure returned by the WFBTINIT function and possibly % modified by WFBTPUT and WFBTREMOVE. % % Please see WFBTINIT for a detailed description and more options. % % If f is row/column vector, the coefficient vectors c{jj} are columns. % % If f is a matrix, the transformation is by default applied to each of % W columns [Ls, W]=size(f). % % In addition, the following flag groups are supported: % % 'per'(default),'zero','odd','even' % Type of the boundary handling. Please see the help on FWT for a % description of the boundary condition flags. % % 'freq'(default),'nat' % Frequency or natural ordering of the coefficient subbands. The direct % usage of the wavelet tree ('nat' option) does not produce coefficient % subbans ordered according to the frequency. To achieve that, some % filter shuffling has to be done ('freq' option). % % Examples: % --------- % % A simple example of calling the WFBT function using the "full % decomposition" wavelet tree: % % f = gspi; % J = 7; % [c,info] = wfbt(f,{'sym10',J,'full'}); % plotwavelets(c,info,44100,'dynrange',90); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbt.html} %@seealso{iwfbt, wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,2,'WFBT'); definput.import = {'fwt','wfbtcommon'}; [flags,kv]=ltfatarghelper({},definput,varargin); % Initialize the wavelet tree structure wt = wfbtinit(wt,flags.forder); %% ----- step 1 : Verify f and determine its length ------- [f,Ls]=comp_sigreshape_pre(f,upper(mfilename),0); % Determine next legal input data length. L = wfbtlength(Ls,wt,flags.ext); % Pad with zeros if the safe length L differ from the Ls. if(Ls~=L) f=postpad(f,L); end %% ----- step 3 : Run computation [nodesBF, rangeLoc, rangeOut] = treeBFranges(wt); c = comp_wfbt(f,wt.nodes(nodesBF),rangeLoc,rangeOut,flags.ext); %% ----- Optionally : Fill info struct ---- if nargout>1 info.fname = 'wfbt'; info.wt = wt; info.ext = flags.ext; info.Lc = cellfun(@(cEl) size(cEl,1),c); info.Ls = Ls; info.fOrder = flags.forder; info.isPacked = 0; end ltfat/inst/wavelets/ifwt2.m0000664000175000017500000000607312612404256015614 0ustar susnaksusnakfunction f = ifwt2(c,w,J,varargin) %-*- texinfo -*- %@deftypefn {Function} ifwt2 %@verbatim %IFWT2 Inverse Fast Wavelet Transform % Usage: f = ifwt2(c,w,J) % f = ifwt2(c,w,J,Ls,...) % % Input parameters: % c : Coefficients stored in a matrix. % w : Wavelet filters definition. % J : Number of filterbank iterations. % Ls : Size of the reconstructed signal. % % Output parameters: % f : Reconstructed data. % % f = IFWT2(c,w,J) reconstructs signal f from the wavelet coefficients % c using a J*-iteration synthesis filterbank build from the basic % synthesis filterbank defined by w. f is a matrix with % size(f)==size(c). % % f = IFWT2(c,w,J,Ls) works as above but the result f is cut or % extended to size Ls if Ls is a two-element vector or to [Ls,Ls] % if Ls is a scalar. % % This function takes the same optional parameters as FWT2. Please see % the help on FWT2 for a description of the parameters. % % % % References: % S. Mallat. A wavelet tour of signal processing. Academic Press, San % Diego, CA, 1998. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/ifwt2.html} %@seealso{fwt2, fwtinit, demo_imagecompression} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; if ~isnumeric(c) error('%s: Unrecognized coefficient format.',upper(mfilename)); end; % Initialize the wavelet filters structure w = fwtinit(w); %% PARSE INPUT definput.keyvals.Ls=[]; definput.import = {'fwt','fwt2'}; [flags,kv,Ls]=ltfatarghelper({'Ls'},definput,varargin); if (isempty(Ls)) Ls = size(c); end if (numel(Ls)==1) Ls = [Ls,Ls]; end Lcrows = fwtclength(Ls(1),w,J,'per'); Lccols = fwtclength(Ls(2),w,J,'per'); nFilts = numel(w.g); if flags.do_standard Jstep = 1; for jj=1:J-1 LcIdx = jj*(nFilts-1)+2; colRange = 1:Lcrows(LcIdx); rowRange = 1:Lccols(LcIdx); c(colRange,rowRange) = ifwt(c(colRange,rowRange),w,Jstep,Lcrows(LcIdx),'dim',1,'per'); c(colRange,rowRange) = ifwt(c(colRange,rowRange),w,Jstep,Lccols(LcIdx),'dim',2,'per'); end c = ifwt(c,w,Jstep,Ls(1),'dim',1,'per'); f = ifwt(c,w,Jstep,Ls(2),'dim',2,'per'); end; if flags.do_tensor f = ifwt(c,w,J,Ls(1),'dim',1,'per'); f = ifwt(f,w,J,Ls(2),'dim',2,'per'); end; ltfat/inst/wavelets/wavfun.m0000664000175000017500000001100612612404256016057 0ustar susnaksusnakfunction [wfunc,sfunc,xvals] = wavfun(w,varargin) %-*- texinfo -*- %@deftypefn {Function} wavfun %@verbatim % WAVFUN Wavelet Function % Usage: [w,s,xvals] = wavfun(g) % [w,s,xvals] = wavfun(g,N) % % Input parameters: % w : Wavelet filterbank % N : Number of iterations % Output parameters: % wfunc : Approximation of wavelet function(s) % sfunc : Approximation of the scaling function % xvals : Correct x-axis values % % Iteratively generate (*N iterations) a discrete approximation of wavelet % and scaling functions using filters obtained from w. The possible formats of w* % are the same as for the FWT function. The algorithm is equal to the % DWT reconstruction of a single coefficient at level N+1 set to 1. xvals* % contains correct x-axis values. All but last columns belong to the % wfunc, last one to the sfunc. % % The following flags are supported (first is default): % % 'fft', 'conv' % How to do the computations. Whatever is faster depends on % the speed of the conv2 function. % % *WARNING**: The output array lengths L depend on N exponentially like: % % L=(m-1)*(a^N-1)/(a-1) + 1 % % where a is subsamling factor after the lowpass filter in the wavelet % filterbank and m is length of the filters. Expect issues for % high N e.g. 'db10' (m=20) and N=20 yields a ~150MB array. % % Examples: % --------- % % Approximation of a Daubechies wavelet and scaling functions from the % 12 tap filters: % % [wfn,sfn,xvals] = wavfun('db6'); % plot(xvals,[wfn,sfn]); % legend('wavelet function','scaling function'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wavfun.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa definput.keyvals.N = 6; definput.flags.howcomp = {'conv','fft'}; [flags,kv,N]=ltfatarghelper({'N'},definput,varargin); w = fwtinit({'strict',w}); a = w.a(1); filtNo = length(w.g); % Copy impulse responses as columns of a single matrix. lo = w.g{1}.h(:); wtemp = zeros(length(lo),filtNo); for ff=1:filtNo wtemp(:,ff) = w.g{ff}.h(:); end filtsAreReal = isreal(wtemp); if(flags.do_conv) % Linear convolutions in the time domain. for n=2:N wtemp = conv2(comp_ups(wtemp,a,1),lo); end elseif(flags.do_fft) % Cyclic convolutions and upsampling in freqency domain. m = length(lo); L = (m-1)*(a^N-1)/(a-1) + 1; % Initial padding with zeros to avoid time aliasing. wtmpFFT = fft(wtemp,nextfastfft(2*m-1)); for n=2:N loFFT = fft(lo,a*size(wtmpFFT,1)); wtmpFFT = bsxfun(@times,repmat(wtmpFFT,a,1),loFFT); end wtemp = ifft(wtmpFFT); wtemp = wtemp(1:L,:); else error('%s: Unexpected flag.',upper(mfilename)); end % Flipud because the impulse responses are time-reversed wtemp=flipud(wtemp); % Final fomating if filtsAreReal sfunc = real(wtemp(:,1)); wfunc = real(wtemp(:,2:end)); else sfunc = wtemp(:,1); wfunc = wtemp(:,2:end); end if(nargout>2) % Calculate xvals xvals = zeros(length(sfunc),filtNo); zeroPos = findFuncZeroPos(-w.g{1}.offset,a,N); sxvals = -zeroPos + (1:length(sfunc)); xvals(:,end)= (length(lo)-1)*sxvals/length(sfunc);%linspace(0,length(lo)-1,length(s)); for ii=1:filtNo-1 zeroPos = findFuncZeroPos(-w.g{ii+1}.offset,a,N); sxvals = -zeroPos + (1:length(sfunc)); xvals(:,ii)= (length(lo)-1)*sxvals/length(sfunc);%linspace(0,length(lo)-1,length(s)); end % Flipud because the impulse responses are time-reversed wtemp=flipud(wtemp); end %END WAVFUN function zeroPos = findFuncZeroPos(baseZeroPos,a1,N) %FINDFUNCZEROPOS Finds zero index position in the *N* iteration approfimation of % the wavelet or scaling functions. zeroPos = baseZeroPos; for n=2:N zeroPos = zeroPos*a1-(a1-1) + baseZeroPos-1; end ltfat/inst/wavelets/iuwfbt.m0000664000175000017500000000667512612404256016071 0ustar susnaksusnakfunction f=iuwfbt(c,par,varargin) %-*- texinfo -*- %@deftypefn {Function} iuwfbt %@verbatim %IUWFBT Inverse Undecimated Wavelet Filterbank Tree % Usage: f = iuwfbt(c,info) % f = iuwfbt(c,wt) % % Input parameters: % c : Coefficients stored in L xM matrix. % info,wt : Transform parameters struct/Wavelet tree definition. % % Output parameters: % f : Reconstructed data. % % f = IUWFBT(c,info) reconstructs signal f from the coefficients c* % using parameters from info struct. both returned by the UWFBT % function. % % f = IUWFBT(c,wt) reconstructs signal f from the wavelet coefficients % c using the undecimated wavelet filterbank tree described by wt. % % Please see help for WFBT description of possible formats of wt. % % Filter scaling: % --------------- % % As in UWFBT, the function recognizes three flags controlling scaling % of the filters: % % 'sqrt' % Each filter is scaled by 1/sqrt(a), there a is the hop % factor associated with it. If the original filterbank is % orthonormal, the overall undecimated transform is a tight % frame. % This is the default. % % 'noscale' % Uses filters without scaling. % % 'scale' % Each filter is scaled by 1/a. % % If 'noscale' is used, 'scale' must have been used in UWFBT (and vice % versa) in order to obtain a perfect reconstruction. % % Examples: % --------- % % A simple example showing perfect reconstruction using the "full % decomposition" wavelet tree: % % f = greasy; % J = 6; % c = uwfbt(f,{'db8',J,'full'}); % fhat = iuwfbt(c,{'db8',J,'full'}); % % The following should give (almost) zero % norm(f-fhat) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/iuwfbt.html} %@seealso{uwfbt, plotwavelets} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'IUWFBT'); if(isstruct(par)&&isfield(par,'fname')) complainif_toomanyargs(nargin,2,'IUWFBT'); wt = wfbtinit({'dual',par.wt},par.fOrder); scaling = par.scaling; % Use the "oposite" scaling if strcmp(scaling,'scale') scaling = 'noscale'; elseif strcmp(scaling,'noscale') scaling = 'scale'; end else %% PARSE INPUT definput.import = {'wfbtcommon','uwfbtcommon'}; flags=ltfatarghelper({},definput,varargin); % Initialize the wavelet tree structure wt = wfbtinit(par,flags.forder); scaling = flags.scaling; end %% ----- step 2 : Prepare input parameters [nodesBF, rangeLoc, rangeOut] = treeBFranges(wt,'rev'); nodesUps = nodesFiltUps(nodesBF,wt); %% ----- step 3 : Run computation f = comp_iuwfbt(c,wt.nodes(nodesBF),nodesUps,rangeLoc,rangeOut,scaling); ltfat/inst/wavelets/wfilt_symtight.m0000664000175000017500000000703012612404256017630 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_symtight(K) %-*- texinfo -*- %@deftypefn {Function} wfilt_symtight %@verbatim %WFILT_SYMTIGHT Symmetric Nearly Shift-Invariant Tight Frame Wavelets % % Usage: [h,g,a] = wfilt_symtight(K); % % [h,g,a]=WFILT_SYMTIGHT(K) with K in {1,2} returns 4-band % symmetric nearly shift-invariant tight framelets. % % % % Examples: % --------- % : % wfiltinfo('symtight1'); % % : % wfiltinfo('symtight2'); % % References: % A. F. Abdelnour and I. W. Selesnick. Symmetric nearly shift-invariant % tight frame wavelets. IEEE Transactions on Signal Processing, % 53(1):231-239, 2005. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_symtight.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa info.istight = 1; a = [2;2;2;2]; switch(K) case 1 % Example 1. from the reference. hlp = [ -0.00055277114224 -0.00033767136406 -0.01132578895076 0.01854042113559 -0.03673606302189 -0.02613107863916 0.00608048256466 -0.21256591159938 0.23533603943029 -0.12220989795770 0.51430488230650 0.34270413842472 0.51430488230650 0.34270413842472 0.23533603943029 -0.12220989795770 0.00608048256466 -0.21256591159938 -0.03673606302189 -0.02613107863916 -0.01132578895076 0.01854042113559 -0.00055277114224 -0.00033767136406 ]; case 2 % Example 2. from the reference. hlp = [ -0.00006806716035 0.00033470718376 -0.00052662487214 -0.00010709617646 -0.00117716147891 -0.00083815645134 0.00133411634276 -0.00184900827809 0.01000587257073 0.00040715239482 0.01000587257073 0.01797012314831 -0.02668232685528 0.05528765033433 -0.07024530947614 0.00398035279221 0.00400234902829 -0.21067061941896 0.26015268683895 -0.15449251248712 0.52030537367790 0.28997740695853 0.52030537367790 0.28997740695853 0.26015268683895 -0.15449251248712 0.00400234902829 -0.21067061941896 -0.07024530947614 0.00398035279221 -0.02668232685528 0.05528765033433 0.01000587257073 0.01797012314831 0.01000587257073 0.00040715239482 0.00133411634276 -0.00184900827809 -0.00117716147891 -0.00083815645134 -0.00052662487214 -0.00010709617646 -0.00006806716035 0.00033470718376 ]; otherwise error('%s: No such SYMTIGHT filters.',upper(mfilename)); end harr = [hlp, ... (-1).^(0:size(hlp,1)-1).'.*hlp(:,2),... (-1).^(0:size(hlp,1)-1).'.*hlp(:,1)]; h=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); h=cellfun(@(hEl) struct('h',hEl(:),'offset',-numel(hEl)/2),h,'UniformOutput',0); g = h; ltfat/inst/wavelets/wfilt_db.m0000664000175000017500000000745112612404256016354 0ustar susnaksusnakfunction [h, g, a, info] = wfilt_db(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_db %@verbatim %WFILT_DB Daubechies FIR filterbank % Usage: [h,g] = wfilt_db(N); % % Input parameters: % N : Order of Daubechies filters. % Output parameters: % H : cell array of analysing filters impulse reponses % G : cell array of synthetizing filters impulse reponses % a : array of subsampling (or hop) factors accociated with % corresponding filters % % [H,G] = dbfilt(N) computes a two-channel Daubechies FIR filterbank % from prototype maximum-phase analysing lowpass filter obtained by % spectral factorization of the Lagrange interpolator filter. N also % denotes the number of zeros at z=-1 of the lowpass filters of length % 2N. The prototype lowpass filter has the following form (all roots of % R(z) are outside of the unit circle): % % H_l(z)=(1+z^-1)^N*R(z), % % where R(z) is a spectral factor of the Lagrange interpolator P(z)=2R(z)*R(z^{-1}) % All subsequent filters of the two-channel filterbank are derived as % follows: % % H_h(z)=H_l((-z)^-1) % G_l(z)=H_l(z^-1) % G_h(z)=-H_l(-z) % % making them an orthogonal perfect-reconstruction QMF. % % Examples: % --------- % : % % wfiltinfo('db8'); % % References: % I. Daubechies. Ten Lectures on Wavelets. Society for Industrial and % Applied Mathematics, Philadelphia, PA, USA, 1992. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_db.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa if(nargin<1) error('%s: Too few input parameters.',upper(mfilename)); end if(N<1) error('Minimum N is 1.'); end if(N>20) warning('Instability may occur when N is too large.'); end h = cell(2,1); flen = 2*N; % Calculating Lagrange interpolator coefficients sup = [-N+1:N]; a = zeros(1,N); for n = 1:N non = sup(sup ~= n); a(n) = prod(0.5-non)/prod(n-non); end P = zeros(1,2*N-1); P(1:2:end) = a; P = [P(end:-1:1),1,P]; R = roots(P); % Roots outside of the unit circle and in the right halfplane R = R(abs(R)<1 & real(R)>0); % roots of the 2*conv(lo_a,lo_r) filter hroots = [R(:);-ones(N,1)]; % building synthetizing low-pass filter from roots h{1}= real(poly(sort(hroots,'descend'))); % normalize h{1}= h{1}/norm(h{1}); % QMF modulation low-pass -> highpass h{2}= (-1).^(0:flen-1).*h{1}(end:-1:1); % The reverse is here, because we use different convention for % filterbanks than in Ten Lectures on Wavelets h{1} = fliplr(h{1}); h{2} = fliplr(h{2}); Lh = numel(h{1}); % Default offset d = cellfun(@(hEl) -length(hEl)/2,h); if N>2 % Do a filter alignment according to "center of gravity" d(1) = -floor(sum((1:Lh).*abs(h{1}).^2)/sum(abs(h{1}).^2)); d(2) = -floor(sum((1:Lh).*abs(h{2}).^2)/sum(abs(h{2}).^2)); if rem(d(1)-d(2),2)==1 % Shift d(2) just a bit d(2) = d(2) + 1; end end % Format filters h{1} = struct('h',h{1},'offset',d(1)); h{2} = struct('h',h{2},'offset',d(2)); g=h; a = [2;2]; % This also means that g==h info.istight=1; ltfat/inst/wavelets/wpfbt2filterbank.m0000664000175000017500000001105412612404256020022 0ustar susnaksusnakfunction [g,a] = wpfbt2filterbank( wt, varargin) %-*- texinfo -*- %@deftypefn {Function} wpfbt2filterbank %@verbatim %WPFBT2FILTERBANK WPFBT equivalent non-iterated filterbank % Usage: [g,a] = wpfbt2filterbank(wt) % % Input parameters: % wt : Wavelet filter tree definition % % Output parameters: % g : Cell array containing filters % a : Vector of sub-/upsampling factors % % WPFBT2FILTERBANK(wt) calculates the impulse responses g and the % subsampling factors a of non-iterated filterbank, which is equivalent % to the wavelet packet filterbank tree described by wt. The returned % parameters can be used directly in FILTERBANK, UFILTERBANK or % FILTERBANK. % % Please see help on WFBT for description of wt. The function % additionally support the following flags: % % 'freq'(default),'nat' % The filters are ordered to produce subbands in the same order as % WPFBT with the same flag. % % 'intsqrt'(default),'intnoscale', 'intscale' % The filters in the filterbank tree are scaled to reflect the % behavior of WPFBT and IWPFBT with the same flags. % % 'scaling_notset'(default),'noscale','scale','sqrt' % Support for scaling flags as described in UWPFBT. By default, % the returned filterbank g and a is equivalent to WPFBT, % passing any of the non-default flags results in a filterbank % equivalent to UWPFBT i.e. scaled and with a(:)=1. % % Examples: % --------- % % The following two examples create a multirate identity filterbank % using a tree of depth 3. In the first example, the filterbank is % identical to the DWT tree: % % [g,a] = wpfbt2filterbank({'db10',3,'dwt'}); % filterbankfreqz(g,a,1024,'plot','linabs','posfreq'); % % % In the second example, the filterbank is identical to the full % wavelet tree: % % [g,a] = wpfbt2filterbank({'db10',3,'full'}); % filterbankfreqz(g,a,1024,'plot','linabs','posfreq'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wpfbt2filterbank.html} %@seealso{wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,1,'WPFBT2FILTERBANK'); definput.import = {'wfbtcommon','uwfbtcommon'}; definput.importdefaults = {'scaling_notset'}; definput.flags.interscaling={'intsqrt','intnoscale','intscale'}; [flags]=ltfatarghelper({},definput,varargin); % build the tree wt = wfbtinit({'strict',wt},flags.forder); wt = comp_wpfbtscale(wt,flags.interscaling); nIdx = nodesLevelsBForder(wt); % Now we need to walk the tree by levels g = {}; a = []; for ii=1:numel(nIdx) rangeLoc = cellfun(@(eEl) 1:numel(eEl.h),wt.nodes(nIdx{ii}),... 'UniformOutput',0); rangeOut = cellfun(@(eEl) numel(eEl.h),wt.nodes(nIdx{ii})); rangeOut = mat2cell(1:sum(rangeOut),1,rangeOut); [gtmp,atmp] = nodesMultid(nIdx{ii},rangeLoc,rangeOut,wt); g(end+1:end+numel(gtmp)) = gtmp; a(end+1:end+numel(atmp)) = atmp; end g = g(:); a = a(:); if ~flags.do_scaling_notset g = comp_filterbankscale(g,a,flags.scaling); a = ones(numel(g),1); end function nodesIdxs = nodesLevelsBForder(treeStruct) %find root nodeNo = find(treeStruct.parents==0); toGoTrough = [nodeNo]; nodesIdxs = {nodeNo}; inLevel = [1]; counter = 0; level = 2; chIdxSum = 0; while ~isempty(toGoTrough) chtmp = find(treeStruct.children{toGoTrough(1)}~=0); chIdxtmp = treeStruct.children{toGoTrough(1)}(chtmp); counter = counter + 1; if(length(nodesIdxs). % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa offset = []; switch(N) case 1 % from the software package filters1.m garr = [ 0.14301535070442 -0.01850334430500 -0.04603639605741 0.51743439976158 -0.06694572860103 -0.16656124565526 0.63958409200212 -0.07389654873135 0.00312998080994 0.24429938448107 0.00042268944277 0.67756935957555 -0.07549266151999 0.58114390323763 -0.46810169867282 -0.05462700305610 -0.42222097104302 0 ]; garr = flipud(garr); offset = [-4,-2,-2]; case 2 % from the paper Table 2.2. garr = [ 0.14301535070442 -0.08558263399002 -0.43390145071794 0.51743439976158 -0.30964087862262 0.73950431733582 0.63958409200212 0.56730336474330 -0.17730428251781 0.24429938448107 0.04536039941690 -0.12829858410007 -0.07549266151999 -0.12615420862311 0 -0.05462700305610 -0.09128604292445 0 ]; garr = flipud(garr); offset = [-4]; case 3 % from the paper Table 2.3. garr = [ 0.14301535070442 -0.04961575871056 -0.06973280238342 0.51743439976158 -0.17951150139240 -0.25229564915399 0.63958409200212 -0.02465426871823 0.71378970545825 0.24429938448107 0.62884602337929 -0.39176125392083 -0.07549266151999 -0.21760444148150 0 -0.05462700305610 -0.15746005307660 0 ]; garr = flipud(garr); offset = [-4,-2,-2]; case 4 % from the paper Table 2.5. garr = [ 0 0 0 0.05857000614054 -0.01533062192062 0.00887131217814 0.30400518363062 -0.07957295618112 -0.33001182554443 0.60500290681752 -0.10085811812745 0.74577631077164 0.52582892852883 0.52906821581280 -0.38690622229177 0.09438203761968 -0.15144941570477 -0.14689062498210 -0.14096408166391 -0.23774566907201 0.06822592840635 -0.06179010337508 -0.05558739119206 0.04093512146217 0.01823675069101 0.06967275075248 0 0.01094193398389 0.04180320563276 0 ]; garr = flipud(garr); offset = [-6]; case 5 % from the paper Table 2.6. garr = [ 0 0 0 0.05857000614054 0.00194831075352 0.00699621691962 0.30400518363062 0.01011262602523 0.03631357326930 0.60500290681752 0.02176698144741 0.04759817780411 0.52582892852883 0.02601306210369 -0.06523665620369 0.09438203761968 -0.01747727200822 -0.22001495718527 -0.14096408166391 -0.18498449534896 -0.11614112361411 -0.06179010337508 -0.19373607227976 0.64842789652539 0.01823675069101 0.66529265123158 -0.33794312751535 0.01094193398389 -0.32893579192449 0 ]; garr = flipud(garr); offset = [-6,-2,-2]; case 6 % from the software package filters2.m garr = [ 0.00069616789827 -0.00014203017443 0.00014203017443 -0.02692519074183 0.00549320005590 -0.00549320005590 -0.04145457368920 0.01098019299363 -0.00927404236573 0.19056483888763 -0.13644909765612 0.07046152309968 0.58422553883167 -0.21696226276259 0.13542356651691 0.58422553883167 0.33707999754362 -0.64578354990472 0.19056483888763 0.33707999754362 0.64578354990472 -0.04145457368920 -0.21696226276259 -0.13542356651691 -0.02692519074183 -0.13644909765612 -0.07046152309968 0.00069616789827 0.01098019299363 0.00927404236573 0 0.00549320005590 0.00549320005590 0 -0.00014203017443 -0.00014203017443 ]; offset = [-5]; otherwise error('%s: No such Double Density DWT filter',upper(mfilename)); end; g=mat2cell(garr,size(garr,1),ones(1,size(garr,2))); if isempty(offset) g = cellfun(@(gEl) struct('h',gEl,'offset',-floor((length(gEl)+1)/2)),g,'UniformOutput',0); elseif numel(offset)==1 g = cellfun(@(gEl) struct('h',gEl,'offset',offset),g,'UniformOutput',0); elseif isvector(offset) g = cellfun(@(gEl,ofEl) struct('h',gEl,'offset',ofEl),g,num2cell(offset),... 'UniformOutput',0); end h = g; a= [2;2;2]; info.istight=1; ltfat/inst/wavelets/dtwfb.m0000664000175000017500000002003712612404256015663 0ustar susnaksusnakfunction [c,info]=dtwfb(f,dualwt,varargin) %-*- texinfo -*- %@deftypefn {Function} dtwfb %@verbatim %DTWFB Dual-Tree Wavelet Filter Bank % Usage: c=dtwfb(f,dualwt); % c=dtwfb(f,{dualw,J}); % [c,info]=dtwfb(...); % % Input parameters: % f : Input data. % dualwt : Dual-tree Wavelet Filter bank definition. % % Output parameters: % c : Coefficients stored in a cell-array. % info : Additional transform parameters struct. % % c=DTWFBt(f,dualwt) computes dual-tree complex wavelet coefficients % of the signal f. The representation is approximately % time-invariant and provides analytic behaviour. Due to these facts, % the resulting subbands are nearly aliasing free making them suitable % for severe coefficient modifications. The representation is two times % redundant, provided critical subsampling of all involved filter banks. % % The shape of the filterbank tree and filters used is controlled by % dualwt (for possible formats see below). The output c is a % cell-array with each element containing a single subband. The subbands % are ordered with the increasing subband centre frequency. % % In addition, the function returns struct. info containing transform % parameters. It can be conveniently used for the inverse transform % IDTWFB e.g. fhat = iDTWFB(c,info). It is also required by % the PLOTWAVELETS function. % % If f is a matrix, the transform is applied to each column. % % Two formats of dualwt are accepted: % % 1) Cell array of parameters. First two elements of the array are % mandatory {dualw,J}. % % dualw % Basic dual-tree filters % J* % Number of levels of the filter bank tree % % Possible formats of dualw are the same as in FWTINIT except the % wfiltdt_ prefix is used when searching for function specifying % the actual impulse responses. These filters were designed specially % for the dual-tree filter bank to achieve the half-sample shift % ultimately resulting in analytic (complex) behaviour of the % transform. % % The default shape of the filter bank tree is DWT i.e. only low-pass % output is decomposed further (*J times in total). % % Different filter bank tree shapes can be obtained by passing % additional flag in the cell array. Supported flags (mutually % exclusive) are: % % 'dwt' % Plain DWT tree (default). This gives one band per octave freq. % resolution when using 2 channel basic wavelet filter bank. % % 'full' % Full filter bank tree. Both (all) basic filter bank outputs are % decomposed further up to depth J achieving linear frequency band % division. % % 'doubleband','quadband','octaband' % The filter bank is designed such that it mimics 4-band, 8-band or % 16-band complex wavelet transform provided the basic filter bank % is 2 channel. In this case, J is treated such that it defines % number of levels of 4-band, 8-band or 16-band transform. % % The dual-tree wavelet filter bank can use any basic wavelet % filter bank in the first stage of both trees, provided they are % shifted by 1 sample (done internally). A custom first stage % filter bank can be defined by passing the following % key-value pair in the cell array: % % 'first',w % w defines a regular basic filter bank. Accepted formats are the % same as in FWTINIT assuming the wfilt_ prefix. % % Similarly, when working with a filter bank tree containing % decomposition of high-pass outputs, some filters in both trees must % be replaced by a regular basic filter bank in order to achieve the % approximately analytic behaviour. A custom filter bank can be % specified by passing another key-value pair in the cell array: % % 'leaf',w % w defines a regular basic filter bank. Accepted formats are the % same as in FWTINIT assuming the wfilt_ prefix. % % 2) Another possibility is to pass directly a struct. returned by % DTWFBINIT and possibly modified by WFBTREMOVE. % % Optional args.: % --------------- % % In addition, the following flag groups are supported: % % 'freq','nat' % Frequency or natural (Paley) ordering of coefficient subbands. % By default, subbands are ordered according to frequency. The natural % ordering is how the subbands are obtained from the filter bank tree % without modifications. The ordering differs only in non-plain DWT % case. % % Boundary handling: % ------------------ % % In contrast with FWT, WFBT and WPFBT, this function supports % periodic boundary handling only. % % Examples: % --------- % % A simple example of calling the DTWFB function using the regular % DWT iterated filter bank. The second figure shows a magnitude frequency % response of an identical filter bank.: % % [f,fs] = greasy; % J = 6; % [c,info] = dtwfb(f,{'qshift3',J}); % figure(1); % plotwavelets(c,info,fs,'dynrange',90); % figure(2); % [g,a] = dtwfb2filterbank({'qshift3',J}); % filterbankfreqz(g,a,1024,'plot','linabs'); % % The second example shows a decomposition using a full filter bank tree % of depth J*: % % [f,fs] = greasy; % J = 5; % [c,info] = dtwfb(f,{'qshift4',J,'full'}); % figure(1); % plotwavelets(c,info,fs,'dynrange',90); % figure(2); % [g,a] = dtwfb2filterbank({'qshift4',J,'full'}); % filterbankfreqz(g,a,1024,'plot','linabs'); % % % References: % I. Selesnick, R. Baraniuk, and N. Kingsbury. The dual-tree complex % wavelet transform. Signal Processing Magazine, IEEE, 22(6):123 - 151, % nov. 2005. % % N. Kingsbury. Complex wavelets for shift invariant analysis and % filtering of signals. Applied and Computational Harmonic Analysis, % 10(3):234 - 253, 2001. % % I. Bayram and I. Selesnick. On the dual-tree complex wavelet packet and % m-band transforms. Signal Processing, IEEE Transactions on, % 56(6):2298-2310, June 2008. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/dtwfb.html} %@seealso{dtwfbreal, idtwfb, plotwavelets, dtwfb2filterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Zdenek Prusa % Date: 30.6.2014 complainif_notenoughargs(nargin,2,'DTWFB'); definput.import = {'wfbtcommon'}; flags =ltfatarghelper({},definput,varargin); % Initialize the wavelet tree structure dtw = dtwfbinit(dualwt,flags.forder); %% ----- step 1 : Verify f and determine its length ------- [f,Ls]=comp_sigreshape_pre(f,upper(mfilename),0); % Determine next legal input data length. L = wfbtlength(Ls,dtw,'per'); % Pad with zeros if the safe length L differs from the Ls. if(Ls~=L) f=postpad(f,L); end %% ----- step 3 : Run computation [nodesBF, rangeLoc, rangeOut] = treeBFranges(dtw); c = comp_dtwfb(f,dtw.nodes(nodesBF),dtw.dualnodes(nodesBF),rangeLoc,... rangeOut,'per',1); %% ----- Optionally : Fill info struct ---- if nargout>1 % Transform name info.fname = 'dtwfb'; % Dual-Tree struct. info.wt = dtw; % Periodic boundary handling info.ext = 'per'; % Lengths of subbands info.Lc = cellfun(@(cEl) size(cEl,1),c); % Signal length info.Ls = Ls; % Ordering of the subbands info.fOrder = flags.forder; % Cell format info.isPacked = 0; end ltfat/inst/wavelets/dtwfbreal.m0000664000175000017500000002040612612404256016527 0ustar susnaksusnakfunction [c,info]=dtwfbreal(f,dualwt,varargin) %-*- texinfo -*- %@deftypefn {Function} dtwfbreal %@verbatim %DTWFBREAL Dual-Tree Wavelet FilterBank for real-valued signals % Usage: c=dtwfbreal(f,dualwt); % c=dtwfbreal(f,{dualw,J}); % [c,info]=dtwfbreal(...); % % Input parameters: % f : Input data. % dualwt : Dual-tree Wavelet Filterbank definition. % % Output parameters: % c : Coefficients stored in a cell-array. % info : Additional transform parameters struct. % % c=dtwfbtreal(f,dualwt) computes dual-tree complex wavelet coefficients % of the real-valued signal f. The representation is approximately % time-invariant and provides analytic behavior. Due to these facts, % the resulting subbands are nearly aliasing free making them suitable % for severe coefficient modifications. The representation is two times % redundant, provided critical subsampling of all involved filterbanks, % but one half of the coefficients is complex conjugate of the other. % % The shape of the filterbank tree and filters used is controlled by % dualwt (for possible formats see below). The output c is a % cell-array with each element containing a single subband. The subbands % are ordered with increasing subband center frequency. % % In addition, the function returns struct. info containing transform % parameters. It can be conviniently used for the inverse transform % IDTWFBREAL e.g. fhat = iDTWFBREAL(c,info). It is also required by % the PLOTWAVELETS function. % % If f is a matrix, the transform is applied to each column. % % Two formats of dualwt are accepted: % % 1) Cell array of parameters. First two elements of the array are % mandatory {dualw,J}. % % dualw % Basic dual-tree filters % J* % Number of levels of the filterbank tree % % Possible formats of dualw are the same as in FWTINIT except the % wfiltdt_ prefix is used when searching for function specifying % the actual impulse responses. These filters were designed specially % for the dual-tree filterbank to achieve the half-sample shift % ultimatelly resulting in analytic (complex) behavior of the % transform. % % The default shape of the filterbank tree is DWT i.e. only low-pass % output is decomposed further (*J times in total). % % Different filterbank tree shapes can be obtained by passing % additional flag in the cell array. Supported flags (mutually % exclusive) are: % % 'dwt' % Plain DWT tree (default). This gives one band per octave freq. % resolution when using 2 channel basic wavelet filterbank. % % 'full' % Full filterbank tree. Both (all) basic filterbank outputs are % decomposed further up to depth J achieving linear frequency band % division. % % 'doubleband','quadband','octaband' % The filterbank is designed such that it mimics 4-band, 8-band or % 16-band complex wavelet transform provided the basic filterbank % is 2 channel. In this case, J is treated such that it defines % number of levels of 4-band, 8-band or 16-band transform. % % The dual-tree wavelet filterbank can use any basic wavelet % filterbank in the first stage of both trees, provided they are % shifted by 1 sample (done internally). A custom first stage % filterbank can be defined by passing the following % key-value pair in the cell array: % % 'first',w % w defines a regular basic filterbank. Accepted formats are the % same as in FWTINIT assuming the wfilt_ prefix. % % Similarly, when working with a filterbank tree containing % decomposition of high-pass outputs, some filters in both trees must % be replaced by a regular basic filterbank in order to achieve the % aproximatelly analytic behavior. A custom filterbank can be % specified by passing another key-value pair in the cell array: % % 'leaf',w % w defines a regular basic filterbank. Accepted formats are the % same as in FWTINIT assuming the wfilt_ prefix. % % 2) Another possibility is to pass directly a struct. returned by % DTWFBINIT and possibly modified by WFBTREMOVE. % % Optional args.: % --------------- % % In addition, the following flag groups are supported: % % 'freq','nat' % Frequency or natural (Paley) ordering of coefficient subbands. % By default, subbands are ordered according to frequency. The natural % ordering is how the subbands are obtained from the filterbank tree % without modifications. The ordering differ only in non-plain DWT % case. % % Boundary handling: % ------------------ % % In contrast with FWT, WFBT and WPFBT, this function supports % periodic boundary handling only. % % Examples: % --------- % % A simple example of calling the DTWFBREAL function using the regular % DWT iterated filterbank. The second figure shows a magnitude frequency % response of an identical filterbank.: % % [f,fs] = greasy; % J = 6; % [c,info] = dtwfbreal(f,{'qshift3',J}); % figure(1); % plotwavelets(c,info,fs,'dynrange',90); % figure(2); % [g,a] = dtwfb2filterbank({'qshift3',J},'real'); % filterbankfreqz(g,a,1024,'plot','linabs'); % % The second example shows a decomposition using a full filterbank tree % of depth J*: % % [f,fs] = greasy; % J = 5; % [c,info] = dtwfbreal(f,{'qshift4',J,'full'}); % figure(1); % plotwavelets(c,info,fs,'dynrange',90); % figure(2); % [g,a] = dtwfb2filterbank({'qshift4',J,'full'},'real'); % filterbankfreqz(g,a,1024,'plot','linabs'); % % % References: % I. Selesnick, R. Baraniuk, and N. Kingsbury. The dual-tree complex % wavelet transform. Signal Processing Magazine, IEEE, 22(6):123 - 151, % nov. 2005. % % N. Kingsbury. Complex wavelets for shift invariant analysis and % filtering of signals. Applied and Computational Harmonic Analysis, % 10(3):234 - 253, 2001. % % I. Bayram and I. Selesnick. On the dual-tree complex wavelet packet and % m-band transforms. Signal Processing, IEEE Transactions on, % 56(6):2298-2310, June 2008. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/dtwfbreal.html} %@seealso{dtwfb, idtwfbreal, plotwavelets, dtwfb2filterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Zdenek Prusa % Date: 30.6.2014 complainif_notenoughargs(nargin,2,'DTWFBREAL'); if ~isreal(f) error('%s: Input signal must be real.',upper(mfilename)); end definput.import = {'wfbtcommon'}; flags =ltfatarghelper({},definput,varargin); % Initialize the wavelet tree structure dtw = dtwfbinit(dualwt,flags.forder); %% ----- step 1 : Verify f and determine its length ------- [f,Ls]=comp_sigreshape_pre(f,upper(mfilename),0); % Determine next legal input data length. L = wfbtlength(Ls,dtw,'per'); % Pad with zeros if the safe length L differs from the Ls. if(Ls~=L) f=postpad(f,L); end %% ----- step 3 : Run computation [nodesBF, rangeLoc, rangeOut] = treeBFranges(dtw); c = comp_dtwfb(f,dtw.nodes(nodesBF),dtw.dualnodes(nodesBF),rangeLoc,... rangeOut,'per',0); %% ----- Optionally : Fill info struct ---- if nargout>1 % Transform name info.fname = 'dtwfbreal'; % Dual-Tree struct. info.wt = dtw; % Periodic boundary handling info.ext = 'per'; % Lengths of subbands info.Lc = cellfun(@(cEl) size(cEl,1),c); % Signal length info.Ls = Ls; % Ordering of the subbands info.fOrder = flags.forder; % Cell format info.isPacked = 0; end ltfat/inst/wavelets/wfbt2filterbank.m0000664000175000017500000000700312612404256017641 0ustar susnaksusnakfunction [g,a] = wfbt2filterbank( wt, varargin) %-*- texinfo -*- %@deftypefn {Function} wfbt2filterbank %@verbatim %WFBT2FILTERBANK WFBT equivalent non-iterated filterbank % Usage: [g,a] = wfbt2filterbank(wt) % % Input parameters: % wt : Wavelet filter tree definition % % Output parameters: % g : Cell array containing filters % a : Vector of sub-/upsampling factors % % [g,a]=WFBT2FILTERBANK(wt) calculates the impulse responses g and the % subsampling factors a of non-iterated filterbank, which is equivalent % to the wavelet filterbank tree described by wt used in WFBT. The % returned parameters can be used directly in FILTERBANK and other routines. % % [g,a]=WFBT2FILTERBANK({w,J,'dwt'}) does the same for the DWT (|FWT|) % filterbank tree. % % Please see help on WFBT for description of wt and help on FWT for % description of w and J. % % The function additionally support the following flags: % % 'freq'(default),'nat' % The filters are ordered to produce subbands in the same order as % WFBT with the same flag. % % 'scaling_notset'(default),'noscale','scale','sqrt' % Support for scaling flags as described in UWFBT. By default, % the returned filterbank g and a is equivalent to WFBT, % passing any of the non-default flags results in a filterbank % equivalent to UWFBT i.e. scaled and with a(:)=1. % % Examples: % --------- % % The following two examples create a multirate identity filterbank % using a tree of depth 3. In the first example, the filterbank is % identical to the DWT tree: % % [g,a] = wfbt2filterbank({'db10',3,'dwt'}); % filterbankfreqz(g,a,1024,'plot','linabs','posfreq'); % % In the second example, the filterbank is identical to the full % wavelet tree: % % [g,a] = wfbt2filterbank({'db10',3,'full'}); % filterbankfreqz(g,a,1024,'plot','linabs','posfreq'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbt2filterbank.html} %@seealso{wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,1,'WFBT2FILTERBANK'); definput.import = {'uwfbtcommon', 'wfbtcommon'}; definput.importdefaults = {'scaling_notset'}; flags = ltfatarghelper({},definput,varargin); % build the tree wt = wfbtinit({'strict',wt},flags.forder); % Pick just nodes with outputs % wtPath = 1:numel(wt.nodes); % wtPath(nodesOutputsNo(1:numel(wt.nodes),wt)==0)=[]; % % rangeLoc = nodesLocOutRange(wtPath,wt); % rangeOut = nodesOutRange(wtPath,wt); [nodesBF, rangeLoc, rangeOut] = treeBFranges(wt); slice = ~cellfun(@isempty,rangeOut); % Limit to nodes with unconnected outputs [g,a] = nodesMultid(nodesBF(slice),rangeLoc(slice),rangeOut(slice),wt); if ~flags.do_scaling_notset g = comp_filterbankscale(g,a,flags.scaling); a = ones(numel(g),1); end ltfat/inst/wavelets/wfilt_qshiftb.m0000664000175000017500000000434712612404256017430 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_qshiftb(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_qshiftb %@verbatim %WFILT_QSHIFTB Improved Orthogonality and Symmetry properties % % Usage: [h,g,a] = wfilt_qshiftb(N); % % [h,g,a]=WFILT_QSHIFTB(N) with N in {1,2,3,4,5,6,7} returns % Kingsbury's Q-shift wavelet filters for tree B. % % Examples: % --------- % : % figure(1); % wfiltinfo('qshiftb3'); % % References: % N. G. Kingsbury. A dual-tree complex wavelet transform with improved % orthogonality and symmetry properties. In ICIP, pages 375-378, 2000. % % N. Kingsbury. Design of q-shift complex wavelets for image processing % using frequency domain energy minimization. In Image Processing, 2003. % ICIP 2003. Proceedings. 2003 International Conference on, volume 1, % pages I-1013-16 vol.1, Sept 2003. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_qshiftb.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa [ha,~,a,info] = wfilt_qshifta(N); hlp = ha{1}.h; offset = -(numel(hlp)/2); range = (0:numel(hlp)-1) + offset; % Create the filters according to the reference paper. % % REMARK: The phase of the alternating +1 and -1 is crucial here. % harr = [... flipud(hlp),... (-1).^(range).'.*hlp,... ]; htmp=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); h(1:2,1) = cellfun(@(hEl)struct('h',hEl,'offset',offset),htmp(1:2),... 'UniformOutput',0); g = h; ltfat/inst/wavelets/wfbtmanip/0000775000175000017500000000000012612404256016364 5ustar susnaksusnakltfat/inst/wavelets/wfbtmanip/nodesSub.m0000664000175000017500000000246312612404256020331 0ustar susnaksusnakfunction subNo = nodesSub(nodeNo,wt) if(any(nodeNo>numel(wt.nodes))) error('%s: Invalid node index range. Number of nodes is %d.\n',upper(mfilename),numel(wt.nodes)); end nodeNoa = cellfun(@(nEl) nEl.a,wt.nodes(nodeNo),'UniformOutput',0); nodeNoUps = nodesFiltUps(nodeNo,wt); nodesCount = numel(nodeNo); subNo = cell(1,nodesCount); for ii=1:nodesCount subNo{ii} = nodeNoUps(ii)*nodeNoa{ii}; end %-*- texinfo -*- %@deftypefn {Function} nodesSub %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/nodesSub.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/wavelets/wfbtmanip/wfbtmanipinit.m0000664000175000017500000000166212612404256021422 0ustar susnaksusnakstatus=2; %-*- texinfo -*- %@deftypefn {Function} wfbtmanipinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/wfbtmanipinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/wavelets/wfbtmanip/treeBFranges.m0000664000175000017500000000451512612404256021116 0ustar susnaksusnakfunction [nodesBF, rangeLoc, rangeOut] = treeBFranges(wt,varargin) %-*- texinfo -*- %@deftypefn {Function} treeBFranges %@verbatim %TREEBFRANGES Tree nodes output ranges in BF order % Usage: [nodesBF, rangeLoc, rangeOut] = treeBFranges(wt); % [nodesBF, rangeLoc, rangeOut] = treeBFranges(wt,'rev'); % % Input parameters: % wt : Filterbank tree struct. % Output parameters: % nodesBF : All nodes in a breadth-first order % rangeLoc : Local ranges of unconnected (terminal) outputs % rangeOut : Global ranges of unconnected (terminal) outputs % % [nodesBF, rangeLoc, rangeOut] = TREEBFRANGES(wt) is a helper function % extracting all nodes of a tree in a BF order (root and low-pass first) % (numeric array of indexes nodesBF), and two cell arrays of ranges of % outputs. Each element of rangeLoc specifies range of unconnected % outputs of a node with at the corresponding position in nodesBF. % Elements rangeOut specify contain the resulting global indexes % (in the resulting coefficient cell array) of such unconnected nodes. % % [nodesBF, rangeLoc, rangeOut] = TREEBFRANGES(wt,'rev') does the same % but the arrays are reversed. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/treeBFranges.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . nodesBF = nodeBForder(0,wt); do_rev = 0; if ~isempty(varargin(strcmp('rev',varargin))); nodesBF = fliplr(nodesBF); do_rev = 1; end rangeLoc = nodesLocOutRange(nodesBF,wt); rangeOut = treeOutRange(wt); if do_rev %rangeOut = nodesOutRange(nodesBF,wt); rangeOut = rangeOut(end:-1:1); end ltfat/inst/wavelets/wfbtmanip/treeSub.m0000664000175000017500000000361312612404256020156 0ustar susnaksusnakfunction a = treeSub(wt) %-*- texinfo -*- %@deftypefn {Function} treeSub %@verbatim %TREESUB Identical subsampling factors % Usage: a = treeSub(wt) % % Input parameters: % wt : Structure containing description of the filter tree. % % Output parameters: % a : Subsampling factors. % % a = TREESUB(wt) returns subsampling factors asociated with the tree % subbands. For definition of the structure see WFBINIT. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/treeSub.html} %@seealso{wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Get nodes in BF order nodesBF = nodeBForder(0,wt); % All nodes with at least one final output. termNslice = nodesOutputsNo(nodesBF,wt)~=0; termN = nodesBF(termNslice); % Range in filter outputs outRangeTermN = nodesLocOutRange(termN,wt); %cRangeTermN = nodesOutRange(termN,wt); rangeOut = treeOutRange(wt); % Get only nodes with some output cRangeTermN = rangeOut(termNslice); noOut = sum(cellfun(@numel,cRangeTermN)); % Subsampling factors of the terminal nodes subTermN = nodesSub(termN,wt); a = zeros(noOut, 1); for ii=1:numel(termN) a(cRangeTermN{ii}) = subTermN{ii}(outRangeTermN{ii}); end ltfat/inst/wavelets/wfbtmanip/nodesOutLen.m0000664000175000017500000000446612612404256021013 0ustar susnaksusnakfunction Lc = nodesOutLen(nodeNo,L,outRange,doNoExt,wt) %-*- texinfo -*- %@deftypefn {Function} nodesOutLen %@verbatim %NODESOUTLEN Length of the node output % Usage: Lc = nodesOutLen(nodeNo,inLen,doExt,wt); % % Input parameters: % nodeNo : Node index(es). % inLen : Filter thee input signal length. % outRange : Cell array. Each element is a vector of local out. % indexes. % doNoExt : Expansive representation indicator. % wt : Structure containing description of the filter tree. % % Output parameters: % Lin : Length of the node input signal % % NODESOUTLEN(nodeNo,inLen,doExt,treeStruct) return length of the input % signal of the node nodeNo. For definition of the structure see wfbinit. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/nodesOutLen.html} %@seealso{wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if isempty(outRange) outRange = cellfun(@(nEl) 1:numel(nEl.g),wt.nodes(nodeNo),'UniformOutput',0); end Lc = zeros(sum(cellfun(@numel,outRange)),1); inLens = nodesInLen(nodeNo,L,doNoExt,wt); Lcidx = 1; for ii=1:numel(inLens) nodeHlen = cellfun(@(nEl) numel(nEl.h),... wt.nodes{nodeNo(ii)}.g(outRange{ii})); nodea = wt.nodes{nodeNo(ii)}.a(outRange{ii}); if(~doNoExt) Lc(Lcidx:Lcidx+numel(nodeHlen)-1) = floor((inLens(ii)... +nodeHlen(:)-1)./nodea(:)); else Lc(Lcidx:Lcidx+numel(nodeHlen)-1) = ceil(inLens(ii)./nodea(:)); end Lcidx = Lcidx + numel(nodeHlen); end ltfat/inst/wavelets/wfbtmanip/depthIndex2NodeNo.m0000664000175000017500000000445112612404256022027 0ustar susnaksusnakfunction [nodeNo,nodeChildIdx] = depthIndex2NodeNo(d,k,wt) %-*- texinfo -*- %@deftypefn {Function} depthIndex2NodeNo %@verbatim %DEPTHINDEX2NODENO Get node from depth and index in the tree % Usage: [nodeNo,nodeChildIdx] = depthIndex2NodeNo(d,k,wt) % % [nodeNo,nodeChildIdx] = DEPTHINDEX2NODENO(d,k,wt) returns node % nodeNo and an array of its children nodes nodeChildIdx positioned % in depth g and index k in the tree wt. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/depthIndex2NodeNo.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if(d==0) nodeNo=0; nodeChildIdx=0; return; end % find ordered nodes at depth d-1 nodesNo = getNodesInDepth(d,wt); if(isempty(nodesNo)) error('%s: Depth of the tree is less than given d.',mfilename); end % k is index in children of ordered nodes at depth d nodeNo = zeros(numel(k),1); nodeChildIdx = zeros(numel(k),1); chNo = cumsum(cellfun( @(nEl) length(nEl.g),wt.nodes(nodesNo))); chNoZ = [0;chNo(:)]; for kIdx=1:numel(k) ktmp = k(kIdx); idx = find(chNo>ktmp,1); if isempty(idx) error('%s: Index k=%i out of bounds.',mfilename,ktmp); end nodeNo(kIdx) = nodesNo(idx); nodeChildIdx(kIdx) = ktmp-chNoZ(idx)+1; end function nodd = getNodesInDepth(d,wt) % find all nodes with d steps to the root ordered if d==1 % return root nodd = find(wt.parents==0); return; end nbf = nodeBForder(0,wt); nbfTmp = nbf; tempd = 0; while tempd. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if(any(nodeNo>numel(wt.nodes))) error('%s: Invalid node index range. Number of nodes is %d.\n',upper(mfilename),numel(wt.nodes)); end nodesCount = length(nodeNo); outRange = cell(nodesCount,1); nodeChans = cellfun(@(nEl) numel(nEl.g), wt.nodes(nodeNo)); chIdx = cellfun(@(chEl) find(chEl~=0), wt.children(nodeNo),'UniformOutput',0); for ii = 1:nodesCount outRangeTmp = 1:nodeChans(ii); outRangeTmp(chIdx{ii}) = []; outRange{ii} = outRangeTmp; end ltfat/inst/wavelets/wfbtmanip/nodesInLen.m0000664000175000017500000000441612612404256020605 0ustar susnaksusnakfunction L = nodesInLen(nodeNo,inLen,doNoExt,wt) %-*- texinfo -*- %@deftypefn {Function} nodesInLen %@verbatim %NODESINLEN Length of the node input signal % Usage: L = nodesInLen(nodeNo,inLen,doExt,treeStruct); % % Input parameters: % nodeNo : Node index. % inLen : Filter thee input signal length. % doNoExt : Expansive representation indicator. % wt : Structure containing description of the filter tree. % % Output parameters: % Lin : Length of the node input signal % % NODESINLEN(nodeNo,inLen,doExt,treeStruct) return length of the input % signal of the node nodeNo. For definition of the structure see wfbinit. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/nodesInLen.html} %@seealso{wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . L = zeros(numel(nodeNo),1); for nn=1:length(nodeNo) subPat = []; filtLenPat = []; tmpNodeNo = nodeNo(nn); while(wt.parents(tmpNodeNo)) parentNo = wt.parents(tmpNodeNo); tmpIdx = find(wt.children{parentNo}==tmpNodeNo); subPat(end+1) = wt.nodes{parentNo}.a(tmpIdx); filtLenPat(end+1) = length(wt.nodes{parentNo}.g{tmpIdx}.h); tmpNodeNo=parentNo; end subPat = subPat(end:-1:1); filtLenPat = filtLenPat(end:-1:1); L(nn) = inLen; if(~doNoExt) for ii=1:length(subPat) L(nn) = floor((L(nn)+filtLenPat(ii)-1)/subPat(ii)); end else for ii=1:length(subPat) L(nn) = ceil(L(nn)/subPat(ii)); end end end ltfat/inst/wavelets/wfbtmanip/nodesMultid.m0000664000175000017500000001063612612404256021037 0ustar susnaksusnakfunction [g,a] = nodesMultid(wtPath,rangeLoc,rangeOut,wt) %-*- texinfo -*- %@deftypefn {Function} nodesMultid %@verbatim %NODESMULTID Filter tree multirate identity filterbank % Usage: [g,a]=nodesMultid(wtPath,rangeLoc,rangeOut,wt); % % Input parameters: % wtPath : Indexes of nodes to be processed in that order. % rangeLoc : Idxs of each node terminal outputs. Length % cell array of vectors. % rangeOut : Output subband idxs of each node terminal outputs. % wt : Filter-Tree defining structure. % % Output parameters: % g : Cell array containing filters % a : Vector of subsampling factors %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/nodesMultid.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %clean cache nodePredecesorsMultId(); % number of outputs of the tree treeOutputs = sum(cellfun(@(rEl) numel(rEl),rangeOut)); g = cell(treeOutputs,1); a = zeros(treeOutputs,1); for ii = 1:numel(wtPath) iiNode = wtPath(ii); hmi = nodePredecesorsMultId(iiNode,wt); locRange = rangeLoc{ii}; outRange = rangeOut{ii}; for jj = 1:length(locRange) tmpUpsFac = nodesFiltUps(iiNode,wt); tmpFilt = wt.nodes{iiNode}.g{locRange(jj)}; g{outRange(jj)} = struct(); g{outRange(jj)}.h = conv2(hmi,comp_ups(tmpFilt.h(:),tmpUpsFac,1)); g{outRange(jj)}.offset = -nodePredecesorsOrig(-tmpFilt.offset,iiNode,wt); end atmp = nodesSub(iiNode,wt); a(outRange) = atmp{1}(locRange); end % clean the cache nodePredecesorsMultId(); function hmi = nodePredecesorsMultId(nodeNo,wt) % Build multirate identity of nodes preceeding nodeNo % chache of the intermediate multirate identities persistent multIdPre; % if no paramerer passed, clear the cache if(nargin==0), multIdPre = {}; return; end % in case nodePredecesorsMultId with nodeNo was called before % if(~isempty(multIdPre)) % if(length(multIdPre)>=nodeNo&&~isempty(multIdPre{pre(jj)})) % hmi = multIdPre{nodeNo}; % end % end startIdx = 1; hmi = [1]; pre = nodePredecesors(nodeNo,wt); pre = [nodeNo,pre]; for jj = 1:length(pre) if(~isempty(multIdPre)) if(length(multIdPre)>=pre(jj)&&~isempty(multIdPre{pre(jj)})) hmi = multIdPre{pre(jj)}; startIdx = length(pre)+1 -jj; break; end end end pre = pre(end:-1:1); for ii=startIdx:length(pre)-1 id = pre(ii); hcurr = wt.nodes{id}.g{wt.children{id}==pre(ii+1)}.h(:); hcurr = comp_ups(hcurr,nodesFiltUps(id,wt),1); hmi = conv2(hmi,hcurr); end function predori = nodePredecesorsOrig(baseOrig,nodeNo,wt) % Calculate total offset of a filter identical to a path from root to % node nodeNo in treeStruct. The last filter in the chain itself has % offset equal to baseOrig % Get nodes from the path from root to nodeNo pre = nodePredecesors(nodeNo,wt); pre = pre(end:-1:1); % Shortcut out if nodeNo is the root node if(isempty(pre)) predori = baseOrig; return; end % Add the curernt node to the list pre(end+1) = nodeNo; predori = 0; % Do from root to nodeNo for ii=1:length(pre)-1 % Get node id id = pre(ii); % Find which path to go childLogInd = wt.children{id}==pre(ii+1); % Obtain offset tmpOffset = -wt.nodes{id}.g{childLogInd}.offset; % Update te current offset predori = nodesFiltUps(id,wt)*tmpOffset + predori; end % We do not know here which filter from the node are we working with so % this line substitutes the last iteration of the previous loop predori = nodesFiltUps(nodeNo,wt)*baseOrig + predori; function pred = nodePredecesors(nodeNo,treeStruct) pred = []; tmpNodeNo = nodeNo; while treeStruct.parents(tmpNodeNo)~=0 tmpNodeNo = treeStruct.parents(tmpNodeNo); pred(end+1) = tmpNodeNo; end ltfat/inst/wavelets/wfbtmanip/nodeBForder.m0000664000175000017500000000503412612404256020735 0ustar susnaksusnakfunction nodesIdxs = nodeBForder(nodeNo,wt) %-*- texinfo -*- %@deftypefn {Function} nodeBForder %@verbatim %NODEBFORDER Nodes in the Breadth-First search order % Usage: nodesIdxs = nodeBForder(nodeNo,wt) % % Input parameters: % nodeNo : Id of a node. % wt : Structure containing description of the filter tree. % % Output parameters: % nodesIdxs : Node indexes in the Breadth-First search order. % % NODEBFORDER(nodeNo,wt) For definition of the structure see % wfbinit. nodeNo defaults to the root node if it is empty or equal % to 0. % % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/nodeBForder.html} %@seealso{wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if isempty(nodeNo) || nodeNo==0 %find root nodeNo = find(wt.parents==0); end complainif_notposint(nodeNo,'NODEBFORDER'); nodesIdxs = [nodeNo,nodeSubtreeBF(nodeNo,wt)]; function nodesIdxs = nodeSubtreeBF(nodeNo,wt) %NODESUBTREEBF Node subtree nodes in Breath-First order % Usage: noOut = nodeSubtreeBF(nodeNo,wt); % % Input parameters: % nodeNo : Node index. % wt : Structure containing description of the filter tree. % % Output parameters: % noOut : Nodes in a Breath-First order. % % subtreeIdx = []; % % children = treeStruct.children{nodeNo}(find(treeStruct.children{nodeNo}~=0)); % subtreeIdx(end+1:end+length(children)) = children; % % for ii=1:length(children) % tmpSbIdx = nodeSubtreeBF(children(ii),treeStruct); % subtreeIdx(end+1:end+length(tmpSbIdx)) = tmpSbIdx; % end toGoTrough = [nodeNo]; nodesIdxs = []; while ~isempty(toGoTrough) % chtmp = find(wt.children{toGoTrough(1)}~=0); chIdxtmp = wt.children{toGoTrough(1)}(wt.children{toGoTrough(1)}~=0); nodesIdxs = [nodesIdxs,chIdxtmp]; toGoTrough = [toGoTrough(2:end),chIdxtmp]; end ltfat/inst/wavelets/wfbtmanip/nat2freqOrder.m0000664000175000017500000000767312612404256021275 0ustar susnaksusnakfunction wt = nat2freqOrder(wt,varargin) %-*- texinfo -*- %@deftypefn {Function} nat2freqOrder %@verbatim %NAT2FREQORDER Natural To Frequency Ordering % Usage: wt = nat2freqOrder(wt); % % Input parameters: % wt : Structure containing description of the filter tree. % % Output parameters: % wt : Structure containing description of the filter tree. % % NAT2FREQORDER(wt) Creates new wavelet filterbank tree definition % with permuted order of some filters for purposes of the correct frequency % ordering of the resultant identical filters and coefficient subbands. % For definition of the structure see WFBINIT and DTWFBINIT. % % NAT2FREQORDER(wt,nodes) does the same but works only with nodes % listed in nodes. % % NAT2FREQORDER(...,'rev') changes the frequency ordering back to % natural ordering. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/nat2freqOrder.html} %@seealso{wfbtinit, wfbtmultid, nodebforder} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,1,'NAT2FREQORDER'); do_rev = ~isempty(varargin(strcmp('rev',varargin))); if do_rev %Remove the 'rev' flag from varargin varargin(strcmp('rev',varargin)) = []; end bftreepath = nodeBForder(0,wt); if isempty(varargin) treePath = bftreepath(2:end);% skip root else % Work with specified nodes only nodes = varargin{1}; % Omit root nodes(wt.parents(nodes)==0) = []; % Use the rest treePath = nodes; end % Dual-tree complex wavelet packets require some more tweaking. if isfield(wt,'dualnodes') locIdxs = arrayfun(@(tEl) find(wt.children{wt.parents(tEl)}==tEl,1),treePath); treeNodes = treePath(rem(locIdxs,2)~=1); % Root was removed so the following will not fail jj = treeNodes(find(treeNodes(wt.parents(wt.parents(treeNodes))==0),1)); while ~isempty(jj) && ~isempty(wt.children{jj}) sanChild = postpad(wt.children{jj},numel(wt.nodes{jj}.g)); % Reverse child nodes wt.children{jj} = sanChild(end:-1:1); if do_rev jj = wt.children{jj}(1); else jj = wt.children{jj}(end); end end end % Array indexed by nodeId reordered = zeros(size(bftreepath)); % Long version if 1 for nodeId=bftreepath ch = postpad(wt.children{nodeId},numel(wt.nodes{nodeId}.g)); odd = 1; if reordered(nodeId) && rem(numel(ch),2)==1 odd = 0; end for m=0:numel(ch)-1 if ch(m+1) ~= 0 if rem(m,2)==odd reordered(ch(m+1)) = 1; end end end end end % Reorder filters for nodeId=treePath(logical(reordered(treePath))) wt = reorderFilters(nodeId,wt); end function wt = reorderFilters(nodeId,wt) % now for the filter reordering wt.nodes{nodeId}.g = wt.nodes{nodeId}.g(end:-1:1); wt.nodes{nodeId}.h = wt.nodes{nodeId}.h(end:-1:1); wt.nodes{nodeId}.a = wt.nodes{nodeId}.a(end:-1:1); % Do the same with the dual tree if it exists if isfield(wt,'dualnodes') wt.dualnodes{nodeId}.g = wt.dualnodes{nodeId}.g(end:-1:1); wt.dualnodes{nodeId}.h = wt.dualnodes{nodeId}.h(end:-1:1); wt.dualnodes{nodeId}.a = wt.dualnodes{nodeId}.a(end:-1:1); end ltfat/inst/wavelets/wfbtmanip/nodesOutputsNo.m0000664000175000017500000000325212612404256021555 0ustar susnaksusnakfunction noOut = nodesOutputsNo(nodeNo,wt) %-*- texinfo -*- %@deftypefn {Function} nodesOutputsNo %@verbatim %NODESOUTPUTSNO Number of node Outputs % Usage: noOut = nodesOutputsNo(nodeNo,wt); % % Input parameters: % nodeNo : Node index. % wt : Structure containing description of the filter tree. % % Output parameters: % noOut : Number of node outputs. % % NODESOUTPUTSNO(nodeNo,wt) Return number of the terminal % outputs of the node nodeNo. For definition of the structure % see wfbinit. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/nodesOutputsNo.html} %@seealso{wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if(any(nodeNo>numel(wt.nodes))) error('%s: Invalid node index range. Number of nodes is %d.\n',upper(mfilename),numel(wt.nodes)); end noOut = cellfun(@(nEl) numel(nEl.g), wt.nodes(nodeNo)) -... cellfun(@(chEl) numel(chEl(chEl~=0)), wt.children(nodeNo)); ltfat/inst/wavelets/wfbtmanip/treeOutLen.m0000664000175000017500000000361012612404256020630 0ustar susnaksusnakfunction Lc = treeOutLen(L,doNoExt,wt) %-*- texinfo -*- %@deftypefn {Function} treeOutLen %@verbatim %TREEOUTLEN Lengths of tree subbands % Usage: Lc = treeOutLen(L,doNoExt,wt) % % Input parameters: % L : Input signal length. % doNoExt : Flag. Expansive = false, Nonexpansive=true % wt : Structure containing description of the filter tree. % % Output parameters: % Lc : Subband lengths. % % Lc = TREEOUTLEN(L,doNoExt,wt) returns lengths of tree subbands given % input signal length L and flag doNoExt. When true, the transform is % assumed to be non-expansive. % For definition of the structure see WFBINIT. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/treeOutLen.html} %@seealso{wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . [termN, rangeLoc, rangeOut] = treeBFranges(wt); slice = ~cellfun(@isempty,rangeOut); % Limit to nodes with unconnected outputs rangeOut=rangeOut(slice); cRange = cell2mat(cellfun(@(rEl) rEl(:),rangeOut(:),... 'UniformOutput',0)); Lctmp = nodesOutLen(termN(slice),L,rangeLoc(slice),doNoExt,wt); Lc = zeros(size(Lctmp)); Lc(cRange) = Lctmp; ltfat/inst/wavelets/wfbtmanip/treeWpBFrange.m0000664000175000017500000000420312612404256021234 0ustar susnaksusnakfunction [pOutIdxs,chOutIdxs] = treeWpBFrange(wt) %-*- texinfo -*- %@deftypefn {Function} treeWpBFrange %@verbatim %TREEWPBFRANGE Wavelet packet tree output ranges in BF order % Usage: [pOutIdxs,chOutIdxs] = treeBFranges(wt); % % Input parameters: % wt : Filterbank tree struct. % Output parameters: % pOutIdxs : Array of parent nodes in BF order % chOutIdxs : Cell array of children nodes in BF order % % [pOutIdxs,chOutIdxs] = treeBFranges(wt) is a helper function % determining direct relationship between nodes in tree wt. % Elements in both returned arrays are ordered according to the BF order. % pOutIdxs is array of indices in the subbands % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/treeWpBFrange.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . treePath = nodeBForder(0,wt); trLen = numel(treePath); pOutIdxs = zeros(1,trLen); chOutIdxs = cell(1,trLen); pRunIdx = [0]; chRunIdx = 1; % do trough tree and look for nodeNo and its parent for ii=1:trLen tmpfiltNo = length(wt.nodes{treePath(ii)}.g); locRange = nodesLocOutRange(treePath(ii),wt); diffRange = 1:tmpfiltNo; diffRange(locRange{1})=[]; chOutIdxs{ii} = chRunIdx:chRunIdx+tmpfiltNo-1; chRunIdx = chRunIdx + tmpfiltNo; pOutIdxs(ii) = pRunIdx(1); pRunIdx = [pRunIdx(2:end),chOutIdxs{ii}(diffRange)]; end pOutIdxs = pOutIdxs(end:-1:1); chOutIdxs = chOutIdxs(end:-1:1); ltfat/inst/wavelets/wfbtmanip/nodeSubtreeDelete.m0000664000175000017500000000632412612404256022151 0ustar susnaksusnakfunction wt = nodeSubtreeDelete(nodeNo,wt) %-*- texinfo -*- %@deftypefn {Function} nodeSubtreeDelete %@verbatim %DELETESUBTREE Removes subtree with root node % Usage: wt = nodeSubtreeDelete(nodeNo,wt) % % Input parameters: % nodeNo : Node index. % wt : Structure containing description of the filter tree. % % Output parameters: % wt : Modified wt. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/nodeSubtreeDelete.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'DELETESUBTREE'); complainif_notposint(nodeNo,'DELETESUBTREE'); % All nodes to be deleted in breadth-first order toDelete = nodeBForder(nodeNo,wt); % Start deleting from the deepest nodes to avoid deleting nodes with % children for ii = length(toDelete):-1:1 wt = nodeDelete(toDelete(ii),wt); biggerIdx = toDelete>toDelete(ii); toDelete(biggerIdx) = toDelete(biggerIdx) - 1; end %wt = nodeDelete(nodeNo,wt); function wt = nodeDelete(nodeNo,wt) %DELETENODE Removes specified node from the tree % Usage: wt = nodeDelete(nodeNo,wt) % % Input parameters: % nodeNo : Node index. % wt : Structure containing description of the filter tree. % % Output parameters: % wt : Modified wt. complainif_notenoughargs(nargin,2,'DELETENODE'); complainif_notposint(nodeNo,'DELETENODE'); if any(wt.children{nodeNo}~=0) error('%s: Deleting a non-leaf node!',upper(mfilename)); end % Removing a root node if wt.parents(nodeNo)==0 % Better clear all fields, than simply call wfbtinit fNames = fieldnames(wt); for ii=1:numel(fNames) wt.(fNames{ii})(:) = []; end return; end % Remove the node from it's parent children node list parId = wt.parents(nodeNo); wt.children{parId}(wt.children{parId}==nodeNo) = 0; % newIdx = 1:length(wt.nodes); % newIdx = newIdx(find(newIdx~=nodeNo)); % wt.nodes = wt.nodes(newIdx); % wt.parents = wt.parents(newIdx); % wt.children = wt.children(newIdx); % Remove the node from the structure completely wt.nodes(nodeNo) = []; if isfield(wt,'dualnodes') wt.dualnodes(nodeNo) = []; end wt.parents(nodeNo) = []; wt.children(nodeNo) = []; % Since node was removed, the interconnections are now wrong. % Let's fix that. for ii =1:length(wt.children) biggerIdx = wt.children{ii}>nodeNo; wt.children{ii}(biggerIdx) = wt.children{ii}(biggerIdx)-1; end % .. ant the same in the parents array biggerIdx = wt.parents>nodeNo; wt.parents(biggerIdx) = wt.parents(biggerIdx)-1; ltfat/inst/wavelets/wfbtmanip/nodesFiltUps.m0000664000175000017500000000355112612404256021165 0ustar susnaksusnakfunction upsNo = nodesFiltUps(nodeNo,wt) %-*- texinfo -*- %@deftypefn {Function} nodesFiltUps %@verbatim %NODEFILTUPS Node upsamplig factor % Usage: upsNo = nodesFiltUps(nodeNo,wt) % % Input parameters: % wt : Structure containing description of the filter tree. % % Output parameters: % upsNo : Accumulated upsampling factor along path to root. % % NODESFILTUPS(wt) Returns upsampling factor, which can be used to % upsample the node filters using the a-trous algorithm. % For definition of the structure see WFBINIT. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/nodesFiltUps.html} %@seealso{wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if(any(nodeNo>numel(wt.nodes))) error('%s: Invalid node index range. Number of nodes is %d.\n',upper(mfilename),numel(wt.nodes)); end nodesCount = numel(nodeNo); upsNo = zeros(nodesCount,1); for ii=1:nodesCount tmpNodeNo = nodeNo(ii); upsNo(ii) = 1; while(wt.parents(tmpNodeNo)) parentNo = wt.parents(tmpNodeNo); upsNo(ii)=upsNo(ii)*wt.nodes{parentNo}.a(wt.children{parentNo}==tmpNodeNo); tmpNodeNo=parentNo; end end ltfat/inst/wavelets/wfbtmanip/treeOutRange.m0000664000175000017500000000521112612404256021145 0ustar susnaksusnakfunction outRange = treeOutRange(wt) %-*- texinfo -*- %@deftypefn {Function} treeOutRange %@verbatim %TREEOUTRANGE Index range of the outputs % Usage: outRange = treeOutRange(wt); % % Input parameters: % wt : Structure containing description of the filter tree. % % Output parameters: % outRange : Subband idx range. % % TREEOUTRANGE(nodeNo,wt) returns index range in the global % tree subbands associated. For definition of the % structure see wfbinit. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtmanip/treeOutRange.html} %@seealso{wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . nodesIdBF = nodeBForder(0,wt); nodesIdBFinv = zeros(size(nodesIdBF)); nodesIdBFinv(nodesIdBF) = 1:numel(nodesIdBF); % Filterbank structs in BF order nodesFbBF = wt.nodes(nodesIdBF); % Number of filters in each node in BF order M = cellfun(@(nEl) numel(nEl.h),nodesFbBF); % Number of unconnected outputs of nodes in BF order. Munc = cellfun(@(nEl,chEl) numel(nEl.h)-numel(chEl(chEl~=0)),... nodesFbBF,wt.children(nodesIdBF)); childrenBForder = wt.children(nodesIdBF); Munccumsum = [0,cumsum(Munc)]; outRange = zeros(1,sum(Munc)); idxLIFO = { {1,1,1} }; k = 1; % n indexes are indices of BF order while ~isempty(idxLIFO) % Pop first element [n,mstart,munc] = idxLIFO{end}{:}; idxLIFO = idxLIFO(1:end-1); for m=mstart:M(n) % If m is among children of the current node if m<=numel(childrenBForder{n}) && childrenBForder{n}(m) ~= 0 % Idex of next node in BF order nnext = nodesIdBFinv(childrenBForder{n}(m)); if m. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'IWPFBT'); if(~iscell(c)) error('%s: Unrecognized coefficient format.',upper(mfilename)); end if(isstruct(par)&&isfield(par,'fname')) complainif_toomanyargs(nargin,2,'IWPFBT'); if ~strcmpi(par.fname,'wpfbt') error('%s: Wrong func name in info struct. The info parameter was created by %s.',upper(mfilename),par.fname); end wt = wfbtinit({'dual',par.wt},par.fOrder); Ls = par.Ls; ext = par.ext; interscaling = par.interscaling; % Use the "oposite" scaling if strcmp(interscaling,'intscale') interscaling = 'intnoscale'; elseif strcmp(interscaling,'intnoscale') interscaling = 'intscale'; end % Determine next legal input data length. L = wfbtlength(Ls,wt,ext); else if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end %% PARSE INPUT definput.keyvals.Ls=[]; definput.import = {'fwt','wfbtcommon'}; definput.flags.interscaling = {'intsqrt', 'intscale', 'intnoscale'}; [flags,kv,Ls]=ltfatarghelper({'Ls'},definput,varargin); complainif_notposint(Ls,'Ls'); ext = flags.ext; interscaling = flags.interscaling; % Initialize the wavelet tree structure wt = wfbtinit(par,flags.forder); [Lc,L]=wpfbtclength(Ls,wt,ext); % Do a sanity check if ~isequal(Lc,cellfun(@(cEl) size(cEl,1),c)) error(['%s: The coefficients subband lengths do not comply with the'... ' signal length *Ls*.'],upper(mfilename)); end end wtPath = fliplr(nodeBForder(0,wt)); [pOutIdxs,chOutIdxs] = treeWpBFrange(wt); f = comp_iwpfbt(c,wt.nodes(wtPath),pOutIdxs,chOutIdxs,L,ext,interscaling); f = postpad(f,Ls); ltfat/inst/wavelets/wpbest.m0000664000175000017500000002574512612404256016074 0ustar susnaksusnakfunction [c,info] = wpbest(f,w,J,varargin) %-*- texinfo -*- %@deftypefn {Function} wpbest %@verbatim %WPBEST Best Tree selection % Usage: c = wpbest(f,w,J,cost); % [c,info] = wpbest(...); % % Input parameters: % f : Input data. % w : Wavelet Filterbank. % J : Maximum depth of the tree. % % Output parameters: % c : Coefficients stored in a cell-array. % info : Transform parameters struct. % % [c,info]=WPBEST(f,w,J,cost) selects the best sub-tree info.wt from % the full tree with max. depth J, which minimizes the cost function. % % Only one-dimensional input f is accepted. The supported formats of % the parameter w can be found in help for FWT. The format of the % coefficients c and the info struct is the same as in WFBT. % % Please note that w should define orthonormal wavelet filters. % % First, the depth J wavelet packet decomposition is performed using WPFBT. % Then the nodes are traversed in the breadth-first and bottom-up order % and the value of the cost function of the node input and cost of the % combined node outputs is compared. If the node input cost function value % is less than the combined output cost, the current node and all % possible descendant nodes are marked to be deleted, if not, the input is % assigned the combined output cost. At the end, the marked nodes are % removed and the resulting tree is considered to be a best basis (or % near-best basis) in the chosen cost function sense. % % The cost parameter can be a cell array or an user-defined function handle. % accepting a single column vector. The cell array should consist of a % string, followed by a numerical arguments. % The possible formats are listed in the following text. % % Additive costs: % --------------- % % The additive cost E of a vector x is a real valued cost function % such that: % % .. % E(x) = sum E(x(k)), % k % % and E(0)=0. Given a collection of vectors x_i being coefficients in % orthonormal bases B_i, the best basis relative to E is the one for % which the E(x_i) is minimal. % % Additive cost functions allows using the fast best-basis search algorithm % since the costs can be precomputed and combined cost of two vectors is % just a sum of their costs. % % {'shannon'} % A cost function derived from the Shannon entropy: % % .. % E_sh(x) = -sum |x(k)|^2 log(|x(k)|^2), % k:x(k)~=0 % % {'log'} % A logarithm of energy: % % .. % E_log(x) = sum log(|x(k)|^2), % k:x(k)~=0 % % {'lpnorm',p} % Concentration in l^p norm: % % .. % E_lp(x) = ( sum (|x(k)|^p) ), % k % % {'thre',th} % Number of coefficients above a threshold th. % % % Non-additive costs: % ------------------- % % Cost function, which is not additive cost but which is used for the % basis selection is called a non-additive cost. The resulting basis for % which the cost is minimal is called near-best, because the non-additive % cost cannot guarantee the selection of a best basis relative to the % cost function. % % {'wlpnorm',p} % The weak-l^p norm cost function: % % .. % E_wlp(x) = max k^{\frac{1}{p}}v_k(x), % % where 0. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,3,'WPBEST'); complainif_notposint(J,'J','WPBEST'); if numel(nonzeros(size(f)>1))>1 error('%s: Function accepts only single channel inputs.',upper(mfilename)); end definput.import = {'fwt','wfbtcommon'}; definput.flags.buildOrder = {'bottomup','topdown'}; definput.flags.bestWhat = {'tree','level'}; definput.keyvals.cost = {'shannon'}; [flags,kv]=ltfatarghelper({'cost'},definput,varargin); if flags.do_topdown error('%s: Flag %s not supported yet.',upper(mfilename),flags.buildOrder); end if flags.do_level error('%s: Flag %s not supported yet.',upper(mfilename),flags.bestWhat); end if(~iscell(kv.cost)) kv.cost = {kv.cost}; end % test if the chosen entropy measure is additive do_additive = isAdditive(kv.cost); if(flags.do_bottomup) % Do full-tree Wavelet Packet decomposition beforehand and prune. [c,info] = wpfbt(normalize(f,'2'),{w,J,'full'},'nat',flags.ext,'intnoscale'); % Nodes in the reverse BF order treePath = fliplr(nodeBForder(0,info.wt)); % Relationships between nodes [pOutIdxs,chOutIdxs] = treeWpBFrange(info.wt); % Nodes to be removed removeNodes = []; % Energy normalization % totalE = sum(cellfun(@(cEl) sum(cEl.^2),c)); % c = cellfun(@(cEl) cEl.^2/totalE,c,'UniformOutput',0); % pre-calculate entropy of all subbands cEnt = cellfun(@(cEl) wcostwrap(cEl,kv.cost,0),c); if do_additive for ii=1:length(pOutIdxs)-1 pEnt = cEnt(pOutIdxs(ii)); chEnt = sum(cEnt(chOutIdxs{ii})); if pEnt<=chEnt removeNodes(end+1) = treePath(ii); else % Set parent entropy to the sum of the children entropy. cEnt(pOutIdxs(ii)) = chEnt; end end else for ii=1:length(pOutIdxs)-1 pEnt = cEnt(pOutIdxs(ii)); chEnt = wcostwrap(c(chOutIdxs{ii}),kv.cost,0); % Set parent entropy to value obtanied by concatenating child % subbands. if(pEnt<=chEnt) removeNodes(end+1) = treePath(ii); else % Search the pOutIdxs(ii) in chOutIdxs % There should be the only one.. foundId = cellfun(@(chEl)find(chEl==pOutIdxs(ii)),chOutIdxs,... 'UniformOutput',0); chId = find(~cellfun(@isempty,foundId)); chOutIdxs{chId}(chOutIdxs{chId} == pOutIdxs(ii)) = []; chOutIdxs{chId} = [chOutIdxs{chId},chOutIdxs{ii}]; end end end % Do tree prunning. for ii=1:length(removeNodes) [info.wt] = nodeSubtreeDelete(removeNodes(ii),info.wt); end end % Finally do the analysis using the created best tree. with correct % frequency bands order [c,info] = wfbt(f,info.wt,flags.ext,flags.forder); %END WPBEST function ad = isAdditive(entFunc) x = 1:5; %x = x./norm(x); ent1 = wcostwrap(x',entFunc,0); ent2 = sum(arrayfun(@(xEl) wcostwrap(xEl,entFunc,0),x)); ad = ent1==ent2; function E = wcostwrap(x,fname,do_normalization) %WENTWRAP Entropy functions wrapper % Usage: E = wentwrap(x,fname,varargin) % % `E = wentwrap(x,fname,varargin)` passes given parameters further to the % appropriate function. % if iscell(x) x = cell2mat(x); end if do_normalization x = x./norm(x); end if isa(fname,'function_handle') E = fname(x); return; end if numel(fname)>1 E = feval(sprintf('%s%s','wcost_',fname{1}),x,fname{2:end}); else E = feval(sprintf('%s%s','wcost_',fname{1}),x); end %%%%%%%%%%%%%%%%%% % ADDITIVE COSTS % %%%%%%%%%%%%%%%%%% function E = wcost_shannon(x) % Cost function derived from the Shannon-Weaver entropy. u = abs(x(x~=0)).^2; E = -sum(u.*log(u)); function E = wcost_log(x) % Logarithm of energy. % It may be interpreted as the entropy of a Gauss-Markov process, composed % of numel(x) uncorrelated Gaussian random variables of variences % x(1),..,x(end). Minimizing the function finds the best approximation to % the Karhuen-loeve basis for the process. x = x(x~=0); E = sum(log(x(:).^2)); function E = wcost_thre(x,th) % Number of coefficients above a treshold. % It gives a number of coefficients needed to transimt the signal to % precision th. E = numel(x(abs(x)>th)); function E = wcost_lpnorm(x,p) % Concentration in l^p norm, p<2 % The smaller is the l^p norm of a signal with l^2 equal to 1, the more % concentrated is its energy into a few coefficients. assert(0. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa % if K<1 || rem(K,1) ~= 0 % error('%s: Regularity K has to be at least 1.',upper(mfilename)); % end if M<2 || rem(M,1) ~= 0 error('%s: Number of channels M has to be at least 2.',upper(mfilename)); end h = cell(M,1); if 0 N = 2*M; n=0:N-1; p = sin(pi*(2*n+1)/(2*N)); for m=0:M-1 c = zeros(1,N); for n=0:N-1 c(n+1) = cos(pi*(2*m+1)*(n-(2*M-1)/2)/(2*M)+(-1)^m*pi/4); end h{m+1} = p.*c; end scal = sqrt(M)/sum(h{1}); h = cellfun(@(hEl) hEl*scal,h,'UniformOutput',0); else N = 4*M; gamma = 0.4717 + exp(-0.00032084024272*M^3 + 0.01619976915653*M^2 - ... 0.39479347799199*M - 2.24633148545678); beta = zeros(1,M); for n=0:M-1 beta(n+1) = gamma + n*(pi-4*gamma)/(2*(M-1)); end beta = repmat([beta, beta(end:-1:1)],1,2); n=0:N-1; p = sqrt(1/(2*M))*(cos(beta)- cos(pi*(2*n+1)/(4*M)) ); for m=0:M-1 c = zeros(1,N); for n=0:N-1 c(n+1) = cos(pi*(2*m+1)*(n-(2*M-1)/2)/(2*M)+(-1)^m*pi/4); end h{m+1} = p.*c; end scal = sqrt(M)/sum(h{1}); h = cellfun(@(hEl) hEl*scal,h,'UniformOutput',0); end h = cellfun(@(gEl) struct('h',gEl,'offset',-floor((length(gEl))/2)),h,'UniformOutput',0); g = h; info.istight = 1; a = M*ones(M,1); ltfat/inst/wavelets/wpfbtclength.m0000664000175000017500000000350312612404256017243 0ustar susnaksusnakfunction [Lc,L]=wpfbtclength(Ls,wt,varargin) %-*- texinfo -*- %@deftypefn {Function} wpfbtclength %@verbatim %WPFBTCLENGTH WPFBT subband length from a signal length % Usage: Lc=wpfbtclength(Ls,wt); % [Lc,L]=wpfbtclength(Ls,wt); % % Lc=WPFBTCLENGTH(Ls,wt) returns the lengths of coefficient subbands % obtained from WPFBT for a signal of length Ls. Please see the help % on WPFBT for an explanation of the parameter wt. % % [Lc,L]=WPFBTCLENGTH(...) additionally returns the next legal length % of the input signal for the given extension type. % % The function support the same boundary-handling flags as the FWT % does. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wpfbtclength.html} %@seealso{wpfbt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa definput.import = {'fwt'}; [flags,kv]=ltfatarghelper({},definput,varargin); % Initialize the wavelet filters structure wt = wfbtinit(wt); if(flags.do_per) a = treeSub(wt); L = filterbanklength(Ls,a); else L = Ls; end wtPath = nodeBForder(0,wt); Lc = nodesOutLen(wtPath,L,[],flags.do_per,wt); ltfat/inst/wavelets/wfilt_lemarie.m0000664000175000017500000000643712612404256017410 0ustar susnaksusnakfunction [h,g,a,info]=wfilt_lemarie(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_lemarie %@verbatim %WFILT_LEMARIE Battle and Lemarie filters % Usage: [h,g,a]=wfilt_lemarie(N) % % Input parameters: % N : Filter length, must be even. % % [h,g,a]=WFILT_LEMARIE(N) calculates N (even) truncated coeficients % of orthonormal Battle-Lemarie wavelets. Filter coefficients are obtained % by frequency domain sampling and trunctating the impulse response. % Due to the truncation, the filterbank might not achieve a perfect % reconstruction. The filetrs are included nevertheless since they were % the original ones used in the first MRA paper. % % Examples: % --------- % : % wfiltinfo('lemarie50'); % % References: % S. G. Mallat. A theory for multiresolution signal decomposition: The % wavelet representation. IEEE Trans. Pattern Anal. Mach. Intell., % 11(7):674-693, July 1989. [1]http ] % % References % % 1. http://dx.doi.org/10.1109/34.192463 % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_lemarie.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Original copyright goes to: % Copyright (C) 1994, 1995, 1996, by Universidad de Vigo % Author: Jose Martin Garcia % e-mail: Uvi_Wave@tsc.uvigo.es if rem(N,2)~=0 error('%s: Filter length must be even.',upper(mfilename)); end num_coefs = N; L = 1024; H = wfreq_lemarie(L); hh=real(ifft(H{1},L)); hh=[ hh(L-floor(num_coefs/2)+1:L) hh(1:ceil(num_coefs/2))]; hh=hh/norm(hh); g{1} = (hh); g{2} = -(-1).^(1:length(hh)).*g{1}(end:-1:1); g = cellfun(@(gEl) struct('h',gEl,'offset',-floor(numel(gEl)/2)),g,'UniformOutput',0); h = g; a= [2;2]; info.istight = 1; function [H,G] = wfreq_lemarie(L) %WFREQ_LEMARIE Battle and Lemarie filters frequency resp. sampling % Usage: [H,G]=wfreq_lemarie(L) % % Input parameters: % N : Number of samples of the frequency response. % % `[H,G]=wfreq_lemaire(L)` calculates $L$ samples of the Battle and % Lemarie filters frequency responses. % % References: mallat89atheory % % % Original copyright goes to: % Copyright (C) 1994, 1995, 1996, by Universidad de Vigo % Author: Jose Martin Garcia % e-mail: Uvi_Wave@tsc.uvigo.es % frequency axis w=[0:2*pi/L:2*pi*(1-1/L)]; w(1)=eps; w(L/2+1)=w(L/2+1)+1e-15; % calculation of frequency response of analysis lowpass filter num=0;den=0; K=36; for k=-K:K, num=1./((w+2*pi*k).^8)+num; den=1./((2*w+2*pi*k).^8)+den; end H = cell(2,1); H{1}=sqrt(num./(2.^8*den)); H{1}(1)=1; H{2} = fftshift(H{1}); G = cell(2,1); G{1} = fliplr(H{1}); G{2} = fliplr(H{2}); ltfat/inst/wavelets/wpfbt.m0000664000175000017500000001077712612404256015711 0ustar susnaksusnakfunction [c,info]=wpfbt(f,wt,varargin) %-*- texinfo -*- %@deftypefn {Function} wpfbt %@verbatim %WPFBT Wavelet Packet FilterBank Tree % Usage: c=wpfbt(f,wt); % [c,info]=wpfbt(...); % % Input parameters: % f : Input data. % wt : Wavelet Filterbank tree definition. % % Output parameters: % c : Coefficients stored in a cell-array. % info : Transform parameters struct. % % c=WPFBT(f,wt) returns wavelet packet coefficients c obtained by % applying a wavelet filterbank tree defined by wt to the input data % f. % % [c,info]=WPFBT(f,wt) additionally returns struct. info containing % transform parameters. It can be conviniently used for the inverse % transform IWPFBT e.g. fhat = iWPFBT(c,info). It is also required % by the PLOTWAVELETS function. % % In contrast to WFBT, the cell array c contain every intermediate % output of each node in the tree. c{jj} are ordered according to % nodes taken in the breadth-first order. % % If f is row/column vector, the coefficient vectors c{jj} are % columns. If f is a matrix, the transformation is applied to each of % column of the matrix. % % Scaling of intermediate outputs: % -------------------------------- % % The following flags control scaling of intermediate outputs and % therefore the energy relations between coefficient subbands. An % intermediate output is an output of a node which is further used as an % input to a descendant node. % % 'intsqrt' % Each intermediate output is scaled by 1/sqrt(2). % If the filterbank in each node is orthonormal, the overall % undecimated transform is a tight frame. % This is the default. % % 'intnoscale' % No scaling of intermediate results is used. This is % necessaty for the WPBEST function to correctly work with % the cost measures. % % 'intscale' % Each intermediate output is scaled by 1/2. % % If 'intnoscale' is used, 'intscale' must be used in IWPFBT (and vice % versa) in order to obtain a perfect reconstruction. % % Please see help for WFBT description of possible formats of wt and % of the additional flags defining boundary handling. % % Examples: % --------- % % A simple example of calling the WPFBT function using the "full % decomposition" wavelet tree: % % f = gspi; % J = 6; % [c,info] = wpfbt(f,{'sym10',J,'full'}); % plotwavelets(c,info,44100,'dynrange',90); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wpfbt.html} %@seealso{wfbt, iwpfbt, wfbtinit, plotwavelets, wpbest} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,2,'WPFBT'); definput.import = {'fwt','wfbtcommon'}; definput.flags.interscaling = {'intsqrt', 'intscale', 'intnoscale'}; [flags]=ltfatarghelper({},definput,varargin); % Initialize the wavelet tree structure wt = wfbtinit(wt,flags.forder); %% ----- step 1 : Verify f and determine its length ------- [f,Ls]=comp_sigreshape_pre(f,upper(mfilename),0); if(Ls<2) error('%s: Input signal seems not to be a vector of length > 1.',... upper(mfilename)); end % Determine next legal input data length. L = wfbtlength(Ls,wt,flags.ext); % Pad with zeros if the safe length L differ from the Ls. if(Ls~=L) f=postpad(f,L); end %% ----- step 3 : Run computation wtPath = nodeBForder(0,wt); rangeLoc = nodesLocOutRange(wtPath,wt); c = comp_wpfbt(f,wt.nodes(wtPath),rangeLoc,flags.ext,flags.interscaling); %% ----- Optional : Fill the info struct. ----- if nargout>1 info.fname = 'wpfbt'; info.wt = wt; info.ext = flags.ext; info.Lc = cellfun(@(cEl) size(cEl,1),c); info.Ls = Ls; info.fOrder = flags.forder; info.isPacked = 0; info.interscaling = flags.interscaling; end ltfat/inst/wavelets/iwfbt.m0000664000175000017500000000716612612404256015700 0ustar susnaksusnakfunction f=iwfbt(c,par,varargin) %-*- texinfo -*- %@deftypefn {Function} iwfbt %@verbatim %IWFBT Inverse Wavelet Filterbank Tree % Usage: f=iwfbt(c,info); % f=iwfbt(c,wt,Ls); % % Input parameters: % c : Coefficients stored in a cell-array. % info,wt : Transform parameters struct/Wavelet Filterbank tree % Ls : Length of the reconstructed signal. % % Output parameters: % f : Reconstructed data. % % f = IWFBT(c,info) reconstructs signal f from the coefficients c* % using parameters from info struct. both returned by WFBT function. % % f = IWFBT(c,wt,Ls) reconstructs signal f from the coefficients c* % using filterbank tree defined by wt. Plese see WFBT function for % possible formats of wt. The Ls parameter is mandatory due to the % ambiguity of reconstruction lengths introduced by the subsampling % operation and by boundary treatment methods. Note that the same flag as % in the WFBT function have to be used, otherwise perfect reconstruction % cannot be obtained. Please see help for WFBT for description of the % flags. % % Examples: % --------- % % A simple example showing perfect reconstruction using IDTWFB: % % f = gspi; % J = 7; % wt = {'db6',J}; % c = wfbt(f,wt); % fhat = iwfbt(c,wt,length(f)); % % The following should give (almost) zero % norm(f-fhat) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/iwfbt.html} %@seealso{wfbt, wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,2,'IWFBT'); if(~iscell(c)) error('%s: Unrecognized coefficient format.',upper(mfilename)); end if(isstruct(par)&&isfield(par,'fname')) complainif_toomanyargs(nargin,2,'IWFBT'); if ~strcmpi(par.fname,'wfbt') error(['%s: Wrong func name in info struct. ',... ' The info parameter was created by %s.'],... upper(mfilename),par.fname); end wt = wfbtinit({'dual',par.wt},par.fOrder); Ls = par.Ls; ext = par.ext; L = wfbtlength(Ls,wt,ext); else complainif_notenoughargs(nargin,3,'IWFBT'); %% PARSE INPUT definput.keyvals.Ls=[]; definput.keyvals.dim=1; definput.import = {'fwt','wfbtcommon'}; [flags,kv,Ls]=ltfatarghelper({'Ls'},definput,varargin); complainif_notposint(Ls,'Ls'); ext = flags.ext; % Initialize the wavelet tree structure wt = wfbtinit(par,flags.forder); [Lc,L]=wfbtclength(Ls,wt,ext); % Do a sanity check if ~isequal(Lc,cellfun(@(cEl) size(cEl,1),c)) error(['%s: The coefficient subband lengths do not comply with the'... ' signal length *Ls*.'],upper(mfilename)); end end %% ----- step 3 : Run computation [nodesBF, rangeLoc, rangeOut] = treeBFranges(wt,'rev'); outLengths = nodesInLen(nodesBF,L,strcmpi(ext,'per'),wt); outLengths(end) = L; f = comp_iwfbt(c,wt.nodes(nodesBF),outLengths,rangeLoc,rangeOut,ext); f = postpad(f,Ls); ltfat/inst/wavelets/iufwt.m0000664000175000017500000000756412612404256015725 0ustar susnaksusnakfunction f = iufwt(c,par,varargin) %-*- texinfo -*- %@deftypefn {Function} iufwt %@verbatim %IUFWT Inverse Undecimated Fast Wavelet Transform % Usage: f = iufwt(c,info) % f = iufwt(c,w,J); % % Input parameters: % c : Coefficients stored in L xJ+1 matrix. % info,w : Transform parameters struct/Wavelet filters definition. % J : Number of filterbank iterations. % % Output parameters: % f : Reconstructed data. % % f = IUFWT(c,info) reconstructs signal f from the wavelet % coefficients c using parameters from info struct. both returned by % UFWT function. % % f = IUFWT(c,w,J) reconstructs signal f from the wavelet % coefficients c using the wavelet filterbank consisting of the J* % levels of the basic synthesis filterbank defined by w using the "a-trous" % algorithm. Node that the same flag as in the ufwt function have to be used. % % Please see the help on UFWT for a description of the parameters. % % Filter scaling % -------------- % % As in UFWT, 3 flags defining scaling of filters are recognized: % % 'sqrt' % Each filter is scaled by 1/sqrt(a), there a is the hop % factor associated with it. If the original filterbank is % orthonormal, the overall undecimated transform is a tight % frame. % This is the default. % % 'noscale' % Uses filters without scaling. % % 'scale' % Each filter is scaled by 1/a. % % If 'noscale' is used, 'scale' must have been used in UFWT (and vice % versa) in order to obtain a perfect reconstruction. % % Examples: % --------- % % A simple example showing perfect reconstruction: % % f = gspi; % J = 8; % c = ufwt(f,'db8',J); % fhat = iufwt(c,'db8',J); % % The following should give (almost) zero % norm(f-fhat) % % % References: % S. Mallat. A wavelet tour of signal processing. Academic Press, San % Diego, CA, 1998. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/iufwt.html} %@seealso{ufwt, plotwavelets} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,2,'IUFWT'); if(isstruct(par)&&isfield(par,'fname')) complainif_toomanyargs(nargin,2,'IUFWT'); if ~strcmpi(par.fname,'ufwt') error(['%s: Wrong func name in info struct. ',... ' The info parameter was created by %s.'],... upper(mfilename),par.fname); end % Ensure we are using the correct wavelet filters w = fwtinit({'dual',par.wt}); J = par.J; scaling = par.scaling; % Use the "oposite" scaling if strcmp(scaling,'scale') scaling = 'noscale'; elseif strcmp(scaling,'noscale') scaling = 'scale'; end else complainif_notenoughargs(nargin,3,'IUFWT'); definput.keyvals.J = []; definput.import = {'uwfbtcommon'}; [flags, ~, J]=ltfatarghelper({'J'},definput,varargin); complainif_notposint(J,'J'); % Initialize the wavelet filters % It is up to user to use the correct ones. w = fwtinit(par); scaling = flags.scaling; end %% Run computation f = comp_iufwt(c,w.g,w.a,J,scaling); ltfat/inst/wavelets/dtwfbbounds.m0000664000175000017500000000455112612404256017101 0ustar susnaksusnakfunction [AF,BF]=dtwfbbounds(dualwt,L) %-*- texinfo -*- %@deftypefn {Function} dtwfbbounds %@verbatim %DTWFBBOUNDS Frame bounds of DTWFB % Usage: fcond=dtwfbbounds(dualwt,L); % [A,B]=dtwfbbounds(dualwt,L); % [...]=dtwfbbounds(dualwt); % % DTWFBBOUNDS(dualwt,L) calculates the ratio B/A of the frame bounds % of the dual-tree filterbank specified by dualwt for a system of % length L. The ratio is a measure of the stability of the system. % % DTWFBBOUNDS(dualwt) does the same thing, but L is the next compatible % length bigger than the longest filter in the identical filterbank. % % [A,B]=DTWFBBOUNDS(...) returns the lower and upper frame bounds % explicitly. % % See DTWFB for explanation of parameter dualwt. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/dtwfbbounds.html} %@seealso{dtwfb, filterbankbounds} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,1,'DTWFBBOUNDS'); dualwt = dtwfbinit({'strict',dualwt},'nat'); if nargin<2 L = []; end; if ~isempty(L) if L~=wfbtlength(L,dualwt) error(['%s: Specified length L is incompatible with the length of ' ... 'the time shifts.'],upper(mfilename)); end end % Do the equivalent filterbank using multirate identity property [gmultid,amultid] = dtwfb2filterbank(dualwt,'complex'); if isempty(L) L = wfbtlength(max(cellfun(@(gEl) numel(gEl.h),gmultid)),dualwt); end % Do the equivalent uniform filterbank [gu,au] = nonu2ufilterbank(gmultid,amultid); if nargout<2 AF = filterbankbounds(gu,au,L); elseif nargout == 2 [AF, BF] = filterbankbounds(gu,au,L); end ltfat/inst/wavelets/wfilt_symds.m0000664000175000017500000002346612612404256017132 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_symds(K) %-*- texinfo -*- %@deftypefn {Function} wfilt_symds %@verbatim %WFILT_SYMDS Symmetric wavelets dyadic sibling % Usage: [h,g,a] = wfilt_symds(K); % % [h,g,a]=WFILT_SYMDS(K) with K in {1,2,3,4,5} returns symmetric % dyadic sibling wavelet frame filters from the reference. % % The returned filterbank has redundancy equal to 2 and it does not form % a tight frame. % % Examples: % --------- % : % wfiltinfo('ana:symds3'); % % : % wfiltinfo('syn:symds3'); % % References: % F. Abdelnour. Symmetric wavelets dyadic sibling and dual frames. Signal % Processing, 92(5):1216 - 1229, 2012. [1]http ] % % % References % % 1. http://www.sciencedirect.com/science/article/pii/S0165168411003963 % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_symds.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa info.istight = 0; a = [2;2;2;2]; switch(K) case 1 % Example 1. Not a tight frame! harr = [ -5 3 -1 0 -7 17 -2 -1 35 11 -3 -2 105 -31 12 -3 105 -31 -3 12 35 11 -2 -3 -7 17 -1 -2 -5 3 0 -1 ]; harr(:,1)=harr(:,1)*sqrt(2)/2^8; harr(:,2)=harr(:,2)/2^7; harr(:,3:4)=harr(:,3:4)/2^4; hoffset = [-4,-4,-4,-4]; garr = [ 0 0 0 0 -3 -5 0 -1 5 -13 -1 -2 30 18 -2 6 30 18 6 -2 5 -13 -2 -1 -3 -5 -1 0 0 0 0 0 ]; garr(:,1)=garr(:,1)*sqrt(2)/2^6; garr(:,2)=garr(:,2)/2^6; garr(:,3:4)=garr(:,3:4)/2^3; goffset = [-4,-4,-4,-4]; case 2 % Example 2. Not a tight frame! harr = [ 0 0 0 0 0 0 0 0 0 -sqrt(2)/2^5 -1/2^3 0 -sqrt(2)/2^5 -4*sqrt(2)/2^5 -2/2^3 -1/2^3 0 sqrt(2)/2^5 6/2^3 -2/2^3 9*sqrt(2)/2^5 8*sqrt(2)/2^5 -2/2^3 6/2^3 16*sqrt(2)/2^5 sqrt(2)/2^5 -1/2^3 -2/2^3 9*sqrt(2)/2^5 -4*sqrt(2)/2^5 0 -1/2^3 0 -sqrt(2)/2^5 0 0 -sqrt(2)/2^5 0 0 0 ]; hoffset = [-3,-5,-5,-5]; garr = [ -sqrt(2)/2^5 0 0 1/2^6 0 -sqrt(2)/2^5 1/2^6 2/2^6 9*sqrt(2)/2^5 -4*sqrt(2)/2^5 2/2^6 0 16*sqrt(2)/2^5 sqrt(2)/2^5 0 -18/2^6 9*sqrt(2)/2^5 8*sqrt(2)/2^5 -18/2^6 30/2^6 0 sqrt(2)/2^5 30/2^6 -18/2^6 -sqrt(2)/2^5 -4*sqrt(2)/2^5 -18/2^6 0 0 -sqrt(2)/2^5 0 2/2^6 0 0 2/2^6 1/2^6 0 0 1/2^6 0 ]; goffset = [-3,-5,-5,-5]; case 3 % Example 3. Not a tight frame! harr = [ 0 35*sqrt(2)/2^12 0.003385355341795 0 35*sqrt(2)/2^12 185*sqrt(2)/2^12 0.011757930078244 0.003385355341795 -45*sqrt(2)/2^12 208*sqrt(2)/2^12 0.038383315957975 0.011757930078244 -252*sqrt(2)/2^12 -648*sqrt(2)/2^12 0.127426546608992 0.038383315957975 420*sqrt(2)/2^12 -706*sqrt(2)/2^12 -0.112865104706813 0.127426546608992 1890*sqrt(2)/2^12 706*sqrt(2)/2^12 -0.710280910094278 -0.112865104706813 1890*sqrt(2)/2^12 648*sqrt(2)/2^12 0.710280910094278 -0.710280910094278 420*sqrt(2)/2^12 -208*sqrt(2)/2^12 0.112865104706813 0.710280910094278 -252*sqrt(2)/2^12 -185*sqrt(2)/2^12 -0.127426546608992 0.112865104706813 -45*sqrt(2)/2^12 -35*sqrt(2)/2^12 -0.038383315957975 -0.127426546608992 35*sqrt(2)/2^12 0 -0.011757930078244 -0.038383315957975 0 0 -0.003385355341795 -0.011757930078244 0 0 0 -0.003385355341795 ]; hoffset = [-7,-7,-7,-5]; garr = [ 0 0 0 0 0 0 0 0 35*sqrt(2)/2^12 0 0 -0.043136204314165 -45*sqrt(2)/2^12 35*sqrt(2)/2^12 -0.043136204314165 -0.022725249453801 -252*sqrt(2)/2^12 185*sqrt(2)/2^12 -0.022725249453801 -0.016002341917868 420*sqrt(2)/2^12 208*sqrt(2)/2^12 -0.016002341917868 0.463586703221768 1890*sqrt(2)/2^12 -648*sqrt(2)/2^12 0.463586703221768 -0.463586703221768 1890*sqrt(2)/2^12 -706*sqrt(2)/2^12 -0.463586703221768 0.016002341917868 420*sqrt(2)/2^12 706*sqrt(2)/2^12 0.016002341917868 0.022725249453801 -252*sqrt(2)/2^12 648*sqrt(2)/2^12 0.022725249453801 0.043136204314165 -45*sqrt(2)/2^12 -208*sqrt(2)/2^12 0.043136204314165 0 35*sqrt(2)/2^12 -185*sqrt(2)/2^12 0 0 0 -35*sqrt(2)/2^12 0 0 % 0 0 0 0 ]; goffset = [-7,-7,-7,-5]; case 4 % Example 4. Not a tight frame! harr = [ 0 99 0.0008317898274 0 99 837 0.00527762349601 0.0008317898274 351 2630 0.01705880266437 0.00527762349601 -286 2778 0.02633268946272 0.01705880266437 -2574 -3195 0.03753999326488 0.02633268946272 -1287 -10429 -0.00195902477575 0.03753999326488 10725 -6348 -0.0711227784702 -0.00195902477575 25740 6348 -0.54534348089652 -0.0711227784702 25740 10429 0.54534348089652 -0.54534348089652 10725 3195 0.0711227784702 0.54534348089652 -1287 -2778 0.00195902477575 0.0711227784702 -2574 -2630 -0.03753999326488 0.00195902477575 -286 -837 -0.02633268946272 -0.03753999326488 351 -99 -0.01705880266437 -0.02633268946272 99 0 -0.00527762349601 -0.01705880266437 0 0 -0.0008317898274 -0.00527762349601 0 0 0 -0.0008317898274 ]; harr(:,1:2)=harr(:,1:2)*sqrt(2)/2^16; hoffset = [-9,-9,-9,-7]; garr = [ 0 0 0 0 0 0 0 0 99 0 0 -0.0054868984046 351 99 -0.0054868984046 -0.03102895771555 -286 837 -0.03102895771555 -0.05109382225012 -2574 2630 -0.05109382225012 -0.05321999995116 -1287 2778 -0.05321999995116 0.1089262550963 10725 -3195 0.1089262550963 0.6365944921083 25740 -10429 0.6365944921083 -0.6365944921083 25740 -6348 -0.6365944921083 -0.1089262550963 10725 6348 -0.1089262550963 0.05321999995116 -1287 10429 0.05321999995116 0.05109382225012 -2574 3195 0.05109382225012 0.03102895771555 -286 -2778 0.03102895771555 0.0054868984046 351 -2630 0.0054868984046 0 99 -837 0 0 0 -99 0 0 ]; garr(:,1:2)=garr(:,1:2)*sqrt(2)/2^16; goffset = [-9,-9,-9,-7]; case 5 % Example 5. Not a tight frame! harr = [ -5 35 0 5 -7 -35 35 -7 35 -665 -35 -35 105 665 -665 105 105 665 665 -105 35 -665 665 35 -7 -35 -665 7 -5 35 -35 -5 0 0 35 0 ]; harr(:,[1 4])=harr(:,[1 4])*sqrt(2)/2^8; harr(:,2:3)=harr(:,2:3)*sqrt(2)/2^12; hoffset = [-5,-5,-5,-5]; garr = [ 0 0 0 0 -5 0 -1 -5 -7 -1 -1 7 35 -1 2 35 105 2 2 -105 105 2 -1 105 35 -1 -1 -35 -7 -1 0 -7 -5 0 0 5 ]; garr(:,[1 4])=garr(:,[1 4])*sqrt(2)/2^8; garr(:,2:3)=garr(:,2:3)*sqrt(2)/2^3; goffset = [-5,-5,-5,-5]; otherwise error('%s: No such filters.',upper(mfilename)); end g=mat2cell(garr,size(garr,1),ones(1,size(garr,2))); g = cellfun(@(gEl,ofEl) struct('h',gEl(:),'offset',ofEl),... g,num2cell(goffset),'UniformOutput',0); h=mat2cell(flipud(harr),size(harr,1),ones(1,size(harr,2))); h = cellfun(@(hEl,ofEl) struct('h',hEl(:),'offset',ofEl),... h,num2cell(hoffset),'UniformOutput',0); ltfat/inst/wavelets/ufwt.m0000664000175000017500000001173512612404256015547 0ustar susnaksusnakfunction [c,info] = ufwt(f,w,J,varargin) %-*- texinfo -*- %@deftypefn {Function} ufwt %@verbatim %UFWT Undecimated Fast Wavelet Transform % Usage: c = ufwt(f,w,J); % [c,info] = ufwt(...); % % Input parameters: % f : Input data. % w : Wavelet Filterbank. % J : Number of filterbank iterations. % % Output parameters: % c : Coefficients stored in L xJ+1 matrix. % info : Transform paramaters struct. % % UFWT(f,w,J) computes redundant time (or shift) invariant % wavelet representation of the input signal f using wavelet filters % defined by w in the "a-trous" algorithm. % % For all accepted formats of the parameter w see the FWTINIT function. % % [c,info]=UFWT(f,w,J) additionally returns the info struct. % containing the transform parameters. It can be conviniently used for % the inverse transform IUFWT e.g. fhat = iUFWT(c,info). It is also % required by the PLOTWAVELETS function. % % The coefficents c are so called undecimated Discrete Wavelet transform % of the input signal f, if w defines two-channel wavelet filterbank. % Other names for this version of the wavelet transform are: the % time-invariant wavelet transform, the stationary wavelet transform, % maximal overlap discrete wavelet transform or even the "continuous" % wavelet transform (as the time step is one sample). However, the % function accepts any number filters (referred to as M) in the basic % wavelet filterbank and the number of columns of c is then J(M-1)+1. % % For one-dimensional input f of length L, the coefficients c are % stored as columns of a matrix. The columns are ordered with inceasing % central frequency of the respective subbands. % % If the input f is L xW matrix, the transform is applied % to each column and the outputs are stacked along third dimension in the % L xJ(M-1)+1 xW data cube. % % Filter scaling % -------------- % % When compared to FWT, UFWT subbands are gradually more and more % redundant with increasing level of the subband. If no scaling of the % filters is introduced, the energy of subbands tends to grow with increasing % level. % There are 3 flags defining filter scaling: % % 'sqrt' % Each filter is scaled by 1/sqrt(a), where a is the hop % factor associated with it. If the original filterbank is % orthonormal, the overall undecimated transform is a tight % frame. % This is the default. % % 'noscale' % Uses filters without scaling. % % 'scale' % Each filter is scaled by 1/a. % % If 'noscale' is used, 'scale' has to be used in IUFWT (and vice % versa) in order to obtain a perfect reconstruction. % % Boundary handling: % ------------------ % % c=UFWT(f,w,J) uses periodic boundary extension. The extensions are % done internally at each level of the transform, rather than doing the % prior explicit padding. % % Examples: % --------- % % A simple example of calling the UFWT function: % % [f,fs] = greasy; % J = 8; % [c,info] = ufwt(f,'db8',J); % plotwavelets(c,info,fs,'dynrange',90); % % % References: % M. Holschneider, R. Kronland-Martinet, J. Morlet, and P. Tchamitchian. % A real-time algorithm for signal analysis with the help of the wavelet % transform. In Wavelets. Time-Frequency Methods and Phase Space, % volume 1, page 286, 1989. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/ufwt.html} %@seealso{iufwt, plotwavelets} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,3,'UFWT'); complainif_notposint(J,'J'); definput.import = {'uwfbtcommon'}; [flags]=ltfatarghelper({},definput,varargin); % Initialize the wavelet filters structure w = fwtinit(w); %% ----- step 1 : Verify f and determine its length ------- % Change f to correct shape. [f,Ls]=comp_sigreshape_pre(f,upper(mfilename),0); if(Ls<2) error('%s: Input signal seems not to be a vector of length > 1.',upper(mfilename)); end %% ----- step 2 : Run computation c = comp_ufwt(f,w.h,w.a,J,flags.scaling); %% ----- Optionally : Fill info struct ---- if nargout>1 info.fname = 'ufwt'; info.wt = w; info.J = J; info.scaling = flags.scaling; end ltfat/inst/wavelets/wfiltdtinfo.m0000664000175000017500000001216012612404256017104 0ustar susnaksusnakfunction wfiltdtinfo(dw,varargin) %-*- texinfo -*- %@deftypefn {Function} wfiltdtinfo %@verbatim %WFILTDTINFO Plots dual-tree filters info % Usage: wfiltdtinfo(dw); % % Input parameters: % dw : Wavelet dual-tree filterbank % % WFILTDTINFO(w) plots impulse responses, frequency responses and % approximation of the scaling and of the wavelet function(s) associated % with the dual-tree wavelet filters defined by w in a single figure. % Format of dw is the same as in DTWFB. % % The figure is organized as follows: % % First row shows impulse responses of the first (real) tree. % % Second row shows impulse responses of the second (imag) tree. % % Third row contains plots of real (green), imaginary (red) and absolute % (blue) parts of approximation of scaling and wavelet function(s). % % Fourth and fifth row show magnitude and phase frequency responses % respectivelly of filters from rows 1 and 2 with matching colors. % % Optionally it is possible to define scaling of the y axis of the % frequency seponses. Supported are: % % 'db','lin' % dB or linear scale respectivelly. By deault a dB scale is used. % % Examples: % --------- % : % wfiltdtinfo('qshift4'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfiltdtinfo.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,1,'WFILTDTINFO'); definput.flags.freqzscale = {'db','lin'}; [flags]=ltfatarghelper({},definput,varargin); [dwstruct,info] = dtwfbinit({'strict',{dw,6,'dwt'}}); dw = info.dw; filtNo = size(dw.g,1); grayLevel = [0.6,0.6,0.6]; clf; colorAr ={repmat('rbk',1,filtNo),repmat('cmg',1,filtNo)}; for ii=1:2 subplot(5,filtNo,filtNo*(ii-1)+1); title(sprintf('Scaling imp. response, tree %i',ii)); loAna = dw.g{1,ii}.h; loShift = -dw.g{1,ii}.offset; xvals = -loShift + (0:length(loAna)-1); hold on; if ~isempty(loAna(loAna==0)) stem(xvals(loAna==0),loAna(loAna==0),'Color',grayLevel); end loAnaNZ = find(loAna~=0); stem(xvals(loAnaNZ),loAna(loAnaNZ),colorAr{ii}(1)); axis tight; hold off; end for ii=1:2 for ff=2:filtNo subplot(5,filtNo,ff+filtNo*(ii-1)); title(sprintf('Wavelet imp. response no: %i, tree %i',ff-1,ii)); filtAna = dw.g{ff,ii}.h; filtShift = -dw.g{ff,ii}.offset; xvals = -filtShift + (0:length(filtAna)-1); filtNZ = find(filtAna~=0); hold on; if ~isempty(filtAna(filtAna==0)) stem(xvals(filtAna==0),filtAna(filtAna==0),'Color',grayLevel); end stem(xvals(filtNZ),filtAna(filtNZ),colorAr{ii}(ff)); axis tight; hold off; end end L = wfbtlength(1024,dwstruct,'per'); Lc = wfbtclength(L,dwstruct,'per'); c = wavpack2cell(zeros(sum([Lc;Lc(end:-1:1)]),1),... [Lc;Lc(end:-1:1)]); c{1}(1) = 1; sfn = idtwfb(c,dwstruct,L); subplot(5,filtNo,[2*filtNo+1]); xvals = ((-floor(L/2)+1:floor(L/2)).'); plot(xvals,fftshift([abs(sfn),real(sfn),imag(sfn)],1)); axis tight; title('Scaling function'); %legend({'abs','real','imag'},'Location','south','Orientation','horizontal') for ff=2:filtNo subplot(5,filtNo,[2*filtNo+ff]); c{ff-1}(1) = 0; c{ff}(1) = 1; wfn = idtwfb(c,dwstruct,L); plot(xvals,fftshift([abs(wfn),real(wfn),imag(wfn)],1)); axis tight; %legend({'abs','real','imag'},'Location','south','Orientation','horizontal') title(sprintf('Wavelet function: %i',ff-1)); end subplot(5,filtNo,3*filtNo + (1:filtNo) ); title('Magnitude frequency response'); maxLen=max(cellfun(@(gEl) numel(gEl.h),dw.g)); Ls = nextfastfft(max([maxLen,1024])); H = filterbankfreqz(dw.g(:),[dw.a(:);dw.a(:)],Ls); %[H] = wtfftfreqz(w.g); if flags.do_db plotH = 20*log10(abs(H)); elseif flags.do_lin plotH = abs(H); else error('%s: Unknown parameter',upper(mfilaname)); end xVals = linspace(0,1,numel(H(:,1))); hold on; for ii=1:2 for ff=1:filtNo plot(xVals,plotH(:,ff+(ii-1)*filtNo),colorAr{ii}(ff)); axis tight; end end if flags.do_db ylim([-30,max(plotH(:))]) end ylabel('|\itH|[dB]'); xlabel('\omega [-]') hold off; subplot(5,filtNo,4*filtNo + (1:filtNo) ); title('Phase frequency response'); hold on; for ii=1:2 for ff=1:filtNo plot(xVals,unwrap(angle((H(:,ff+(ii-1)*filtNo))))/pi,colorAr{ii}(ff)); axis tight; end end ylabel('arg H(\omega)[\pi rad]'); xlabel('\omega [-]') axis tight; % plot(unwrap(angle([H]))); % axis tight; hold off; ltfat/inst/wavelets/fwtinit.m0000664000175000017500000004025212612404256016242 0ustar susnaksusnakfunction [w,info] = fwtinit(wdef,prefix) %-*- texinfo -*- %@deftypefn {Function} fwtinit %@verbatim %FWTINIT Wavelet Filterbank Structure Initialization % Usage: w = fwtinit(wdef); % w = fwtinit(wdef,prefix); % [w,info]=fwtinit(...) % % Input parameters: % wdef : Wavelet filters specification. % prefix : Function name prefix % % Output parameters: % w : Structure defining the filterbank. % % FWTINIT(wdef) produces a structure describing the analysis % (field w.h) and synthesis (field w.g) filterbanks and a hop factors % (field w.a) of a basic wavelet-type filterbank defined by wdef. % % The analysis filterbank w.h is by default used in FWT and the % synthesis filterbank w.g in IFWT. % % Both w.h and w.g are cell arrays of structs defining FIR filters % compatible with FILTERBANK, IFILTERBANK and related functions. % More preciselly, each elemement of either cell array is a struct with % fields .h and .offset defining impulse response and the initial % shift respectivelly. % % [w,info]=FWTINIT(...) additionally returns a info struct which % provides some information about the wavelet filterbank: % % info.istight % Wavelet filterbank forms a tight frame. In such case, w.h and % w.g are identical. % % The function is a wrapper for calling all the functions with the % wfilt_ prefix defined in the LTFAT wavelets directory. % % The possible formats of the wdef are the following: % % 1) Cell array with first element being the name of the function defining % the basic wavelet filters (wfilt_ prefix) and the other elements % are the parameters of the function. % % 2) Character string as concatenation of the name of the wavelet % filters defining function (as above) and the numeric parameters % delimited by ':' character. Examples: % % {'db',10} or 'db10' % Daubechies with 10 vanishing moments. It calls wfilt_db(10) % internally. % % {'spline',4,4} or 'spline4:4' % Biorthogonal spline wavelet filters with 4 vanishing moments. % Calls wfilt_spline(4,4) internally. % % {'dden',1} or 'dden1' % Double density wavelet filters. Calls wfilt_dden(1) where % the filters are stored as numerical vectors. % % 3) Cell array of one dimensional numerical vectors directly defining % the wavelet filter impulse responses. By default, outputs of the % filters are subsampled by a factor equal to the number of the % filters. Pass additional key-value pair 'a',a (still inside of the % cell array) to define the custom subsampling factors, e.g.: % {h1,h2,'a',[2,2]}. % % 4) The fourth option is to pass again the structure obtained from the % FWTINIT function. The structure is checked whether it has a valid % format. % % 5) Two element cell array. First element is the string 'dual' and the % second one is in format 1), 2) or 4). This returns a dual of whatever % is passed as the second argument. % % 6) Two element cell array. First element is the string 'strict' and the % second one is in format 1), 2), 4) or 5). This in the non tight case % the filters has to be defined explicitly using 'ana' and 'syn' % identifiers. See below. % % 7) Two element cell array. First element is a cell array of structures % defining FIR filterbank (.h and .offset fields) as in FILTERBANKWIN % and the second element is a numeric vector of subsampling factors. % % One can interchange the filter in w.h and w.g and use the % filterbank indended for synthesis in FWT and vice versa by % re-using the items 1) and 2) in the following way: % % 1) Add 'ana' or 'syn' as the first element in the cell array e.g. % {'ana','spline',4,4} or {'syn','spline',4,4}. % % 2) Add 'ana:' or 'syn:' to the beginning of the string e.g. % 'ana:spline4:4' or 'syn:spline4:4'. % % This only makes difference if the filterbanks are biorthogonal % (e.g. wfilt_spline) or a general frame (e.g. 'symds2'), in other % cases, the analysis and synthesis filters are identical. % % Please note that using e.g. c=fwt(f,'ana:spline4:4',J) and % fhat=ifwt(c,'ana:spline4:4',J,size(f,1)) will not give a perfect % reconstruction. % % The output structure has the following additional field: % % w.origArgs % Original parameters in format 1). % % % References: % S. Mallat. A Wavelet Tour of Signal Processing, Third Edition: The % Sparse Way. Academic Press, 3rd edition, 2008. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/fwtinit.html} %@seealso{fwt, ifwt, wfilt_db} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % **Remark:** Function names with the `wfilt_` prefix cannot contain numbers % and cannot start with 'ana' or 'syn'! % wavelet filters functions definition prefix wprefix = 'wfilt_'; waveletsDir = 'wavelets'; % output structure definition %%%%%%%%%%%%%%%%%%%%%%%%%%%%% w.origArgs = {}; w.wprefix = wprefix; w.h = {}; w.g = {}; w.a = []; %%%%%%%%%%%%%%%%%%%%%%%%%%%%% info.istight = 0; % return empty struct if no argument was passed if nargin<1 return; end; if isempty(wdef) error('%s: Input argument is empty.',upper(mfilename)); end if nargin>1 if ischar(prefix) && ~isempty(prefix) wprefix = prefix; w.wprefix = wprefix; else error('%s: Bad format of prefix.',upper(mfilename)); end end do_strict = 0; do_dual = 0; % Check 'strict' if iscell(wdef) && ischar(wdef{1}) && strcmpi(wdef{1},'strict') do_strict = 1; wdef = wdef{2:end}; end if iscell(wdef) && ischar(wdef{1}) && strcmpi(wdef{1},'dual') do_dual = 1; wdef = wdef{2:end}; end if isstruct(wdef) %%%%%%%%%%%%%%%%%%%%%%%%%%%% % Process wdef in format 4)% % Do checks and return quicky % %%%%%%%%%%%%%%%%%%%%%%%%%%%% % Check the fields if isequal(fieldnames(wdef),fieldnames(w)) if ~do_dual && ~do_strict w = wdef; %cachw = w; return; else if ~isempty(wdef.origArgs) wdef = wdef.origArgs; else error('%s: The structure was not built using compatible formats.',upper(mfilename)); end end else error('%s: Passed structure has different fields.',upper(mfilename)); end end if iscell(wdef) wname = wdef; if ~ischar(wname{1}) %%%%%%%%%%%%%%%%%%%%%%%%%%%% % Process wdef in format 3)% %%%%%%%%%%%%%%%%%%%%%%%%%%%% if isnumeric(wname{1}) complainDual(do_dual,'numeric cell array'); equalsa = cellfun(@(wEl)strcmp(wEl,'a'),wname); apos = find(equalsa==1); if isempty(apos) apos = numel(wname)+1; w.a = ones(numel(wname),1)*numel(wname); else if apos==numel(wname)-1 && isnumeric(wname{apos+1}) && numel(wname{apos+1})==apos-1 w.a = wname{apos+1}; else error('%s: Key ''a'' have to be followed by a vector of length %i.',upper(mfilename),apos-1); end end w.h = formatFilters(wname(1:apos-1),[]); w.g = formatFilters(wname(1:apos-1),[]); w.origArgs = wname; elseif iscell(wname{1}) && numel(wname)==2 && numel(wname{1})>1 complainDual(do_dual,'filterbank cell array'); g = wname{1}; a = wname{2}; [g,asan,infotmp]=filterbankwin(g,a,'normal'); if ~infotmp.isfir error('%s: Only FIR filters are supported.',upper(mfilename)); end w.h = g; w.g = g; w.a = asan(:,1); w.origArgs = wname; else error('%s: Unrecognizer format of the filterbank definition.',upper(mfilename)); end %cachw = w; return; end elseif ischar(wdef) %%%%%%%%%%%%%%%%%%%%%%%%%%%% % Process wdef in format 2)% %%%%%%%%%%%%%%%%%%%%%%%%%%%% try wname = parseNameValPair(wdef,wprefix); % Octave does not support the "catch err" stament, so use "lasterror" % instead %catch err catch err=lasterror; % If failed, clean the cache. cachwDesc = []; cachw = []; error(err.message); end else error('%s: First argument must be a string, cell or struct.',upper(mfilename)); end; do_forceAna = []; is_tight = 0; % Check whether wavelet definition starts with ana or syn if ischar(wname{1}) && numel(wname{1})==3 if strcmpi(wname{1},'ana') || strcmpi(wname{1},'syn') % Set field only if ana or syn was explicitly specified. do_forceAna = strcmpi(wname{1},'ana'); wname = wname(2:end); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % wname now contains wdef in format 1)% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Search for m-file containing string wname wfiltFile = dir(fullfile(ltfatbasepath,sprintf('%s/%s%s.m',waveletsDir,wprefix,lower(wname{1})))); if(isempty(wfiltFile)) error('%s: Unknown wavelet type: %s',upper(mfilename),wname{1}); else % if found, crop '.m' from the filename tmpFile = wfiltFile.name(1:end-2); end % There is a bug in nargout in version 3.6 of Octave, but not in later % stable versions if isoctave octs=strsplit(version,'.'); octN=str2num(octs{1})*1000+str2num(octs{2}); if octN<3008 try feval(tmpFile); catch end; end; end; wfiltNargout = nargout(tmpFile); if(nargin(tmpFile)~=numel(wname)-1) error('%s: Incorrect number of parameters to be passed to the %s func.',upper(mfilename),tmpFile); end if(wfiltNargout==3) [w.h, w.g, w.a] = feval(tmpFile,wname{2:end}); elseif(wfiltNargout==4) [w.h, w.g, w.a, info] = feval(tmpFile,wname{2:end}); else error('%s: Function %s does not return 3 or 4 arguments.',upper(mfilename),upper(tmpFile)); end if ~isempty(info)&&isfield(info,'istight') is_tight = info.istight; else info.istight = 0; end % d = []; % if isfield(info,'d') % d = info.d; % end % % if numel(tmph)~=numel(w.a) || numel(tmpg)~=numel(w.a) % error('%s: Variables returned by %s have different element counts.',upper(mfilename),upper(tmpFile)); % end if ~is_tight && do_strict && isempty(do_forceAna) error(['%s: %s filters does not form a tight frame. Choose either ',... '''ana:%s'' or ''syn:%s'' '],upper(mfilename),tmpFile,... wcell2str(wname),wcell2str(wname)); end % w.h = formatFilters(tmph,d); % w.g = formatFilters(tmpg,d); w.origArgs = wname; if ~isempty(do_forceAna) if do_dual do_forceAna = ~do_forceAna; end if do_forceAna w.g = w.h; w.origArgs = [{'ana'}, w.origArgs]; % Hande the Dual-tree specific stuff if ~isempty(info) && isfield(info,'defaultfirst') info.defaultfirst.g = info.defaultfirst.h; info.defaultfirst.origArgs = [{'ana'},info.defaultfirst.origArgs]; end if ~isempty(info) && isfield(info,'defaultleaf') info.defaultleaf.g = info.defaultleaf.h; info.defaultleaf.origArgs = [{'ana'},info.defaultleaf.origArgs]; end else w.h = w.g; w.origArgs = [{'syn'}, w.origArgs]; % Hande the Dual-tree specific stuff if ~isempty(info) && isfield(info,'defaultfirst') info.defaultfirst.h = info.defaultfirst.g; info.defaultfirst.origArgs = [{'syn'},info.defaultfirst.origArgs]; end if ~isempty(info) && isfield(info,'defaultleaf') info.defaultleaf.h = info.defaultleaf.g; info.defaultleaf.origArgs = [{'syn'},info.defaultleaf.origArgs]; end end end end %END FWTINIT function filts = formatFilters(cellf,d) noFilts = numel(cellf); filts = cell(noFilts,1); if(isempty(d)) d = findFiltDelays(cellf,'half'); end for ff=1:noFilts %filts{ff} = wfiltstruct('FIR'); filts{ff}.h = cellf{ff}(:); filts{ff}.offset = -d(ff); end end %END FORMATFILTERS function wcell = parseNameValPair(wchar,wprefix) %PARSENAMEVALPAIR %Parses string in the following format wnameN1:N2... , where wname have to %be name of the existing function with wfilt_ prefix. N1,N2,... are doubles %delimited by character ':'. %The output is cell array {wname,str2double(N1),str2double(N2),...} %The wfilt_ function name cannot contain numbers wcell = {}; numDelimiter = ':'; % Check whether the first 4 characters are 'ana:' or 'syn:' if numel(wchar)>4 if strcmpi(wchar(1:4),'ana:') wcell = [wcell,{'ana'}]; wchar = wchar(5:end); elseif strcmpi(wchar(1:4),'syn:') wcell = [wcell,{'syn'}]; wchar = wchar(5:end); end end % Take out all numbers from the string wcharNoNum = wchar(1:find(isstrprop(wchar,'digit')~=0,1)-1); % List all files satysfying the following: [ltfatbase]/wavelets/wfilt_*.m? wfiltFiles = dir(fullfile(ltfatbasepath,sprintf('%s/%s*.m','wavelets',wprefix))); % Get just the filanames without the wfilt_ prefix wfiltNames = arrayfun(@(fEl) fEl.name(1+find(fEl.name=='_',1):find(fEl.name=='.',1,'last')-1),wfiltFiles,'UniformOutput',0); % Compare the filenames with a given string wcharMatch = cellfun(@(nEl) strcmpi(wcharNoNum,nEl),wfiltNames); % Find index(es) of the matches. wcharMatchIdx = find(wcharMatch~=0); % Handle faulty results. if(isempty(wcharMatchIdx)) dirListStr = cell2mat(cellfun(@(wEl) sprintf('%s, ',wEl), wfiltNames(:)','UniformOutput',0)); if ~all(cellfun(@isempty,wfiltNames)) error('%s: Unknown wavelet filter definition string: %s.\nAccepted are:\n%s',upper(mfilename),wcharNoNum,dirListStr(1:end-2)); else error('%s: Cannot find %s%s',upper(mfilename),wprefix,wcharNoNum); end end if(numel(wcharMatchIdx)>1) error('%s: Ambiguous wavelet filter definition string. Probably bug somewhere.',upper(mfilename)); end match = wfiltNames{wcharMatchIdx}; wcell = [wcell,{match}]; % Extract the numerical parameters from the string (delimited by :) numString = wchar(numel(match)+1:end); if(isempty(numString)) error('%s: No numeric parameter specified in %s.',upper(mfilename),wchar); end % Parse the numbers. wcharNum = textscan(numString,'%f','Delimiter',numDelimiter); if(~isnumeric(wcharNum{1})||any(isnan(wcharNum{1}))) error('%s: Incorrect numeric part of the wavelet filter definition string.',upper(mfilename)); end wcell = [wcell, num2cell(wcharNum{1}).']; end %END PARSENAMEVALPAIR function d = findFiltDelays(cellh,type) filtNo = numel(cellh); d = ones(filtNo,1); for ff=1:filtNo if(strcmp(type,'half')) d(ff) = floor((length(cellh{ff})+1)/2); % elseif(strcmp(type,'energycent')) % tmphh =cellh{ff}; % tmphLen = length(tmphh); % ecent = sum((1:tmphLen-1).*tmphh(2:end).^2)/sum(tmphh.^2); % if(do_ana) % d(ff) = round(ecent)+1; % if(rem(abs(d(ff)-d(1)),2)~=0) % d(ff)=d(ff)+1; % end % else % anad = round(ecent)+1; % d(ff) = tmphLen-anad; % if(rem(abs(d(ff)-d(1)),2)~=0) % d(ff)=d(ff)-1; % end % end else error('TO DO: Unsupported type.'); end end end %END FINDFILTDELAYS function complainDual(dual,whereStr) if dual error('%s: ''dual'' option not allowed for the %s input.',upper(mfilename),whereStr); end end % END COMPLAINA function str = wcell2str(wcell) strNums = cellfun(@(wEl) [num2str(wEl),':'],wcell(2:end),'UniformOutput',0); strNums = cell2mat(strNums); str = [wcell{1},strNums(1:end-1)]; end ltfat/inst/wavelets/wavcell2pack.m0000664000175000017500000000437512612404256017142 0ustar susnaksusnakfunction [cvec,Lc] = wavcell2pack(ccell,varargin) %-*- texinfo -*- %@deftypefn {Function} wavcell2pack %@verbatim %WAVCELL2PACK Changes wavelet coefficients storing format % Usage: [cvec,Lc] = wavcell2pack(ccell); % [cvec,Lc] = wavcell2pack(ccell,dim); % % Input parameters: % ccell : Coefficients stored in a collumn cell-array. % dim : Dimension along which the data were transformed. % % Output parameters: % cvec : Coefficients in packed format. % Lc : Vector containing coefficients lengths. % % [cvec,Lc] = WAVCELL2PACK(ccell) assembles a column vector or a matrix % cvec using elements of the cell-array ccell in the following % manner: % % cvec(1+sum(Lc(1:j-1)):sum(Lc(1:j),:)=ccell{j}; % % where Lc is a vector of length numel(ccell) containing number of % rows of each element of ccell. % % [cvec,Lc] = WAVCELL2PACK(ccell,dim) with dim==2 returns a % transposition of the previous. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wavcell2pack.html} %@seealso{wavpack2cell, fwt, wfbt, wpfbt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa if(nargin<1) error('%s: Too few input parameters.',upper(mfilename)); end definput.keyvals.dim = 1; [flags,kv,dim]=ltfatarghelper({'dim'},definput,varargin); if(dim>2) error('%s: Multidimensional data is not accepted.',upper(mfilename)); end % Actual computation Lc = cellfun(@(x) size(x,1), ccell); cvec = cell2mat(ccell); % Reshape back to rows if(dim==2) cvec = cvec.'; end ltfat/inst/wavelets/wfilt_matlabwrapper.m0000664000175000017500000000345712612404256020632 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_matlabwrapper(wname) %-*- texinfo -*- %@deftypefn {Function} wfilt_matlabwrapper %@verbatim %WFILT_MATLABWRAPPER Wrapper of the Matlab Wavelet Toolbox wfilters function % Usage: [h,g,a] = wfilt_matlabwrapper(wname); % % [h,g,a]=WFILT_MATLABWRAPPER(wname) calls Matlab Wavelet Toolbox % function wfilters and passes the parameter wname to it. % % This function requires the Matlab Wavelet Toolbox. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_matlabwrapper.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa if ~exist('wfilters',2) error('%s: Matlab Wavelet Toolbox is not present.',upper(mfilename)); end a = [2;2]; [lo,hi,lo_s,hi_s] = wfilters(wname); h=cell(2,1); h{1} = lo(:); h{2} = hi(:); g=cell(2,1); g{1} = flipud(lo_s(:)); g{2} = flipud(hi_s(:)); if all(h{1}==g{1}) && all(h{2}==g{2}) info.istight = 1; else info.istight = 0; end g = cellfun(@(gEl) struct('h',gEl(:),'offset',-numel(gEl)/2),g,'UniformOutput',0); h = cellfun(@(hEl) struct('h',hEl(:),'offset',-numel(hEl)/2),h,'UniformOutput',0); ltfat/inst/wavelets/ifwt.m0000664000175000017500000001165312612404256015532 0ustar susnaksusnakfunction f = ifwt(c,par,varargin) %-*- texinfo -*- %@deftypefn {Function} ifwt %@verbatim %IFWT Inverse Fast Wavelet Transform % Usage: f = ifwt(c,info) % f = ifwt(c,w,J,Ls) % f = ifwt(c,w,J,Ls,dim) % % Input parameters: % c : Wavelet coefficients. % info,w : Transform parameters struct/Wavelet filters definition. % J : Number of filterbank iterations. % Ls : Length of the reconstructed signal. % dim : Dimension to along which to apply the transform. % % Output parameters: % f : Reconstructed data. % % f = IFWT(c,info) reconstructs signal f from the wavelet coefficients % c using parameters from info struct. both returned by FWT % function. % % f = IFWT(c,w,J,Ls) reconstructs signal f from the wavelet coefficients % c using J*-iteration synthesis filterbank build from the basic % filterbank defined by w. The Ls parameter is mandatory due to the % ambiguity of lengths introduced by the subsampling operation and by % boundary treatment methods. Note that the same flag as in the FWT % function have to be used, otherwise perfect reconstruction cannot be % obtained. % % In both cases, the fast wavelet transform algorithm (Mallat's algorithm) % is employed. The format of c can be either packed, as returned by the % FWT function or cell-array as returned by WAVPACK2CELL function. % % Please see the help on FWT for a detailed description of the parameters. % % Examples: % --------- % % A simple example showing perfect reconstruction: % % f = gspi; % J = 8; % c = fwt(f,'db8',J); % fhat = ifwt(c,'db8',J,length(f)); % % The following should give (almost) zero % norm(f-fhat) % % % References: % S. Mallat. A wavelet tour of signal processing. Academic Press, San % Diego, CA, 1998. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/ifwt.html} %@seealso{fwt, wavpack2cell, wavcell2pack} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,2,'IFWT'); if ~(iscell(c) || isnumeric(c)) || isempty(c) error('%s: Unrecognized coefficient format.',upper(mfilename)); end if(isstruct(par)&&isfield(par,'fname')) complainif_toomanyargs(nargin,2,'IFWT'); if ~strcmpi(par.fname,'fwt') error(['%s: Wrong func name in info struct. ',... ' The info parameter was created by %s.'],... upper(mfilename),par.fname); end % process info struct w = fwtinit({'dual',par.wt}); J = par.J; Lc = par.Lc; Ls = par.Ls; dim = par.dim; ext = par.ext; L = fwtlength(Ls,w,J,ext); else complainif_notenoughargs(nargin,4,'IFWT'); %% PARSE INPUT definput.import = {'fwt'}; definput.keyvals.dim = []; definput.keyvals.Ls = []; definput.keyvals.J = []; [flags,~,J,Ls,dim]=ltfatarghelper({'J','Ls','dim'},definput,varargin); complainif_notposint(J,'J'); complainif_notposint(Ls,'Ls'); ext = flags.ext; %If dim is not specified use the first non-singleton dimension. if(isempty(dim)) dim=find(size(c)>1,1); else if(~any(dim==[1,2])) error('%s: Parameter *dim* should be 1 or 2.',upper(mfilename)); end end % Initialize the wavelet filters structure w = fwtinit(par); %% ----- Determine input data length. L = fwtlength(Ls,w,J,ext); %% ----- Determine number of ceoefficients in each subband Lc = fwtclength(L,w,J,ext); end %% ----- Change c to correct shape according to the dim. if(isnumeric(c)) %Check *Lc* if(sum(Lc)~=size(c,dim)) error('%s: Coefficient subband lengths does not comply with parameter *Ls*.',upper(mfilename)); end %Change format c = wavpack2cell(c,Lc,dim); elseif(iscell(c)) %Just check *Lc* if(~isequal(Lc,cellfun(@(x) size(x,1),c))) error('%s: Coefficient subband lengths does not comply with parameter *Ls*.',upper(mfilename)); end else error('%s: Unrecognized coefficient format.',upper(mfilename)); end; %% ----- Run computation f = comp_ifwt(c,w.g,w.a,J,L,ext); f = postpad(f,Ls); %% ----- FINALIZE: Reshape back according to the dim. if(dim==2) f = f.'; end %END IFWT ltfat/inst/wavelets/wfbtbounds.m0000664000175000017500000000613012612404256016730 0ustar susnaksusnakfunction [AF,BF]=wfbtbounds(wt,varargin) %-*- texinfo -*- %@deftypefn {Function} wfbtbounds %@verbatim %WFBTBOUNDS Frame bounds of WFBT % Usage: fcond=wfbtbounds(wt,L); % [A,B]=wfbtbounds(wt,L); % [...]=wfbtbounds(wt); % % WFBTBOUNDS(wt,L) calculates the ratio B/A of the frame bounds % of the filterbank tree specified by wt for a system of length % L. The ratio is a measure of the stability of the system. % % WFBTBOUNDS({w,J,'dwt'},L) calculates the ratio B/A of the frame % bounds of the DWT (|FWT|) filterbank specified by w and J for a % system of length L. % % WFBTBOUNDS(wt) does the same thing, but L is assumed to be the % next compatible length bigger than the longest filter in the identical % filterbank. % % [A,B]=WFBTBOUNDS(...) returns the lower and upper frame bounds % explicitly. % % See WFBT for explanation of parameter wt and FWT for explanation % of parameters w and J. % % The function supports the following flag groups: % % 'scaling_notset'(default),'noscale','scale','sqrt' % Support for scaling flags as described in UWFBT. By default, % the bounds are computed for WFBT, passing any of the non-default % flags results in framebounds for UWFBT. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtbounds.html} %@seealso{wfbt, fwt, filterbankbounds} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,1,'WFBTBOUNDS'); % Frequency or natural ordering should not make a difference wt = wfbtinit({'strict',wt},'nat'); definput.keyvals.L = []; definput.import = {'uwfbtcommon'}; definput.importdefaults = {'scaling_notset'}; [flags,~,L]=ltfatarghelper({'L'},definput,varargin); if ~isempty(L) && flags.do_scaling_notset if L~=wfbtlength(L,wt) error(['%s: Specified length L is incompatible with the length of ' ... 'the time shifts.'],upper(mfilename)); end; end % Do the equivalent filterbank using multirate identity property [gmultid,amultid] = wfbt2filterbank(wt,flags.scaling); if isempty(L) L = wfbtlength(max(cellfun(@(gEl) numel(gEl.h),gmultid)),wt); end % Do the equivalent uniform filterbank if any(amultid~=amultid(1)) [gu,au] = nonu2ufilterbank(gmultid,amultid); else [gu,au] = deal(gmultid,amultid); end if nargout<2 AF = filterbankbounds(gu,au,L); elseif nargout == 2 [AF, BF] = filterbankbounds(gu,au,L); end ltfat/inst/wavelets/wfiltdt_qshift.m0000664000175000017500000000461612612404256017615 0ustar susnaksusnakfunction [h,g,a,info] = wfiltdt_qshift(N) %-*- texinfo -*- %@deftypefn {Function} wfiltdt_qshift %@verbatim %WFILTDT_QSHIFT Improved Orthogonality and Symmetry properties % % Usage: [h,g,a] = wfiltdt_qshift(N); % % [h,g,a]=WFILTDT_QSHIFT(N) with N in {1,2,3,4,5,6,7} returns % Kingsbury's Q-shift filters suitable for dual-tree complex wavelet % transform. % Filters in both trees are orthogonal and based on a single prototype % low-pass filter with a quarter sample delay. Other filters are % derived by modulation and time reversal such that they fulfil the % half-sample delay difference between the trees. % % Examples: % --------- % : % wfiltdtinfo('qshift3'); % % References: % N. G. Kingsbury. A dual-tree complex wavelet transform with improved % orthogonality and symmetry properties. In ICIP, pages 375-378, 2000. % % N. Kingsbury. Design of q-shift complex wavelets for image processing % using frequency domain energy minimization. In Image Processing, 2003. % ICIP 2003. Proceedings. 2003 International Conference on, volume 1, % pages I-1013-16 vol.1, Sept 2003. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfiltdt_qshift.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa [h(:,1),g(:,1),a,info] = wfilt_qshifta(N); [h(:,2),g(:,2)] = wfilt_qshiftb(N); % Default first and leaf filters % They are chosen to be orthonormal near-symmetric here in order not to % break the orthonormality of the overal representation. [info.defaultfirst, info.defaultfirstinfo] = fwtinit('symorth1'); [info.defaultleaf, info.defaultleafinfo] = ... deal(info.defaultfirst,info.defaultfirstinfo); ltfat/inst/wavelets/wfilt_algmband.m0000664000175000017500000000713212612404256017530 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_algmband(K) %-*- texinfo -*- %@deftypefn {Function} wfilt_algmband %@verbatim %WFILT_ALGMBAND An ALGebraic construction of orthonormal M-BAND wavelets with perfect reconstruction % Usage: [h,g,a] = wfilt_algmband(K); % % [h,g,a]=WFILT_ALGMBAND(K) with K in {1,2} returns wavelet filters % from the reference paper. The filters are 3-band (K==1) and 4-band % (K==2) with critical subsampling. % % Examples: % --------- % : % wfiltinfo('algmband1'); % % : % wfiltinfo('algmband2'); % % References: % T. Lin, S. Xu, Q. Shi, and P. Hao. An algebraic construction of % orthonormal M-band wavelets with perfect reconstruction. Applied % mathematics and computation, 172(2):717-730, 2006. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_algmband.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa switch(K) case 1 % from the paper Example 1. garr = [ 0.33838609728386 -0.11737701613483 0.40363686892892 0.53083618701374 0.54433105395181 -0.62853936105471 0.72328627674361 -0.01870574735313 0.46060475252131 0.23896417190576 -0.69911956479289 -0.40363686892892 0.04651408217589 -0.13608276348796 -0.07856742013185 -0.14593600755399 0.42695403781698 0.24650202866523 ]; a= [3;3;3]; offset = [-3,-3,-3]; case 2 garr = [ 0.0857130200 -0.1045086525 0.2560950163 0.1839986022 0.1931394393 0.1183282069 -0.2048089157 -0.6622893130 0.3491805097 -0.1011065044 -0.2503433230 0.6880085746 0.5616494215 -0.0115563891 -0.2484277272 -0.1379502447 0.4955029828 0.6005913823 0.4477496752 0.0446493766 0.4145647737 -0.2550401616 0.0010274000 -0.0823301969 0.2190308939 -0.4264277361 -0.0621881917 -0.0923899104 -0.1145361261 -0.0827398180 0.5562313118 -0.0233349758 -0.0952930728 0.0722022649 -0.2245618041 0.0290655661 -0.1306948909 0.2684936992 -0.3300536827 0.0702950474 -0.0827496793 0.1691549718 -0.2088643503 0.0443561794 0.0719795354 -0.4437039320 0.2202951830 -0.0918374833 0.0140770701 0.0849964877 0.0207171125 0.0128845052 0.0229906779 0.1388163056 0.0338351983 0.0210429802 0.0145382757 0.0877812188 0.0213958651 0.0133066389 -0.0190928308 -0.1152813433 -0.0280987676 -0.0174753464 ]; a= [4;4;4;4]; offset = [-12,-8,-8,-12]; otherwise error('%s: No such orthonormal M-band wavelet filter bank.',upper(mfilename)); end g=mat2cell(flipud(garr),size(garr,1),ones(1,size(garr,2))); g = cellfun(@(gEl,offEl) struct('h',gEl,'offset',offEl),g,num2cell(offset),... 'UniformOutput',0); h = g; info.istight=1; ltfat/inst/wavelets/idtwfb.m0000664000175000017500000000724312612404256016040 0ustar susnaksusnakfunction f=idtwfb(c,par,varargin) %-*- texinfo -*- %@deftypefn {Function} idtwfb %@verbatim %IDTWFB Inverse Dual-tree Filterbank % Usage: f=idtwfb(c,info); % f=idtwfb(c,dualwt,Ls); % % Input parameters: % c : Input coefficients. % info : Transform params. struct % dualwt : Dual-tree Wavelet Filterbank definition % Ls : Length of the reconstructed signal. % % Output parameters: % f : Reconstructed data. % % f = IDTWFB(c,info) reconstructs signal f from the coefficients c* % using parameters from info struct. both returned by DTWFB function. % % f = IDTWFB(c,dualwt,Ls) reconstructs signal f from the coefficients % c using dual-tree filterbank defined by dualwt. Plese see DTWFB % for supported formats. The Ls parameter is mandatory due to the % ambiguity of reconstruction lengths introduced by the subsampling % operation. % Note that the same flag as in the DTWFB function have to be used, % otherwise perfect reconstruction cannot be obtained. Please see help % for DTWFB for description of the flags. % % Examples: % --------- % % A simple example showing perfect reconstruction using IDTWFB: % % f = gspi; % J = 7; % wtdef = {'qshift3',J}; % c = dtwfb(f,wtdef); % fhat = idtwfb(c,wtdef,length(f)); % % The following should give (almost) zero % norm(f-fhat) % % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/idtwfb.html} %@seealso{dtwfb, dtwfbinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'IDTWFB'); if ~iscell(c) error('%s: Unrecognized coefficient format.',upper(mfilename)); end if(isstruct(par)&&isfield(par,'fname')) complainif_toomanyargs(nargin,2,'IDTWFB'); if ~strcmpi(par.fname,'dtwfb') error(['%s: Wrong func name in info struct. ',... ' The info parameter was created by %s.'],... upper(mfilename),par.fname); end dtw = dtwfbinit({'dual',par.wt},par.fOrder); Ls = par.Ls; ext = 'per'; L = wfbtlength(Ls,dtw,ext); else complainif_notenoughargs(nargin,3,'IDTWFB'); %% PARSE INPUT definput.keyvals.Ls=[]; definput.import = {'wfbtcommon'}; [flags,kv,Ls]=ltfatarghelper({'Ls'},definput,varargin); complainif_notposint(Ls,'Ls'); ext = 'per'; % Initialize the wavelet tree structure dtw = dtwfbinit(par,flags.forder); [Lc,L]=wfbtclength(Ls,dtw,ext); Lc = [Lc;Lc(end:-1:1)]; % Do a sanity check if ~isequal(Lc,cellfun(@(cEl) size(cEl,1),c)) error(['%s: The coefficient subband lengths do not comply with the'... ' signal length *Ls*.'],upper(mfilename)); end end %% ----- step 3 : Run computation [nodesBF, rangeLoc, rangeOut] = treeBFranges(dtw,'rev'); outLengths = nodesInLen(nodesBF,L,strcmpi(ext,'per'),dtw); outLengths(end) = L; f = comp_idtwfb(c,dtw.nodes(nodesBF),dtw.dualnodes(nodesBF),outLengths,... rangeLoc,rangeOut,ext,1); f = postpad(f,Ls); ltfat/inst/wavelets/wfilt_oddevenb.m0000664000175000017500000000674112612404256017556 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_oddevenb(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_oddevenb %@verbatim %WFILT_ODDEVENB Kingsbury's symmetric odd filters % % Usage: [h,g,a] = wfilt_oddevenb(N); % % [h,g,a]=WFILT_ODDEVENB(N) with N in {1} returns Kingsbury's % odd filters. % % Examples: % --------- % : % figure(1); % wfiltinfo('ana:oddevenb1'); % % figure(2); % wfiltinfo('syn:oddevenb1'); % % References: % N. Kingsbury. Complex wavelets for shift invariant analysis and % filtering of signals. Applied and Computational Harmonic Analysis, % 10(3):234 - 253, 2001. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_oddevenb.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa info.istight = 0; a = [2;2]; switch(N) case 1 % Example 1. from the reference. Symmetric near-orthogonal garr = [ 0 0 0 -7.062639508928571e-05 0 0 -0.0017578125 1.341901506696429e-03 0 -1.883370535714286e-03 0.022265625 -7.156808035714285e-03 -0.046875 2.385602678571428e-02 -0.0482421875 5.564313616071428e-02 0.2968750 -5.168805803571428e-02 0.55546875 -2.997576032366072e-01 0.2968750 5.594308035714286e-01 -0.0482421875 -2.997576032366072e-01 -0.046875 -5.168805803571428e-02 0.022265625 5.564313616071428e-02 0 2.385602678571428e-02 -0.0017578125 -7.156808035714285e-03 0 -1.883370535714286e-03 0 1.341901506696429e-03 0 0 0 -7.062639508928571e-05 ]; % This scaling is not in the reference paper, but it is here to be % consistent garr = garr*sqrt(2); %garr = normalize(garr,'energy'); offset = -10; otherwise error('%s: No such filters.',upper(mfilename)); end %garr = [garr(:,3:4),garr(:,1:2)]; modrange = (-1).^((0:size(garr,1)-1) + offset+1).'; modrange2 = (-1).^((0:size(garr,1)-1) + offset).'; harr = [garr(:,2).*modrange2,... garr(:,1).*modrange,... ]; % In the biorthogonal case, the filters do not get time reversed garr = flipud(garr); htmp=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); h = cellfun(@(hEl)struct('h',hEl,'offset',offset),htmp(1:2),... 'UniformOutput',0); gtmp=mat2cell(garr,size(garr,1),ones(1,size(garr,2))); g = cellfun(@(gEl)struct('h',gEl,'offset',offset),gtmp(1:2),... 'UniformOutput',0); ltfat/inst/wavelets/wfilt_hden.m0000664000175000017500000001105012612404256016673 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_hden(K) %-*- texinfo -*- %@deftypefn {Function} wfilt_hden %@verbatim %WFILT_HDEN Higher DENsity dwt filters (tight frame, frame) % Usage: [h,g,a] = wfilt_hden(K); % % [h,g,a]=WFILT_HDEN(K) with K in {1,2,3,4} returns Higher DENsity % dwt filters (tight frame, frame) from the reference. The filterbanks % have 3 channels and unusual non-uniform subsamplig factors [2,2,1]. % % Examples: % --------- % : % wfiltinfo('hden3'); % % : % wfiltinfo('ana:hden4'); % % References: % I. Selesnick. A higher density discrete wavelet transform. IEEE % Transactions on Signal Processing, 54(8):3039-3048, 2006. % % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_hden.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa a= [2;2;1]; info.istight = 1; switch(K) case 1 % from the paper Example 1. garr = [ 0 0 0 0.353553390593274 0.353553390593274 0.5 0.707106781186548 0 -0.5 0.353553390593274 -0.353553390593274 0 ]; d = [-2,-2,-2]; case 2 % from the paper Example 2. garr = [ 0 0 0 0.189604909379 0.025752563665 0.010167956157 0.631450512121 0.075463998066 0.046750380120 0.655505518357 -0.064333341412 -0.009172584871 0.099615139800 -0.327704691428 -0.354664087684 -0.163756210215 0.228185687127 0.499004628714 -0.023958870736 0.252240693362 -0.192086292435 0.025752563665 -0.189604909379 0 ]; d = [-3,-5,-5]; case 3 % from the paper Example 3. garr = [ 0 0 0 0.022033327573 0.048477254777 0.031294135831 0.015381522616 0.019991451948 0.013248398005 -0.088169084245 -0.304530024033 -0.311552292833 0.051120949834 0.165478923930 0.497594326648 0.574161374258 0.308884916012 -0.235117092484 0.717567366340 -0.214155508410 -0.020594576659 0.247558418377 -0.074865474330 0.015375249485 -0.076963057605 0.028685132531 0.009751852004 -0.048477254777 0.022033327573 0 ]; d = [-6,-4,-4]; case 4 info.istight = 0; % from the paper Example 5. Is not a tight frame! harr = [ 0 0 0 0 0 0 0.027222 0.044889 0 0.011217 0.005671 0.027671 -0.112709 -0.286349 0.007159 0.096078 0.235789 -0.277671 0.685299 0.235789 0.485682 0.685299 -0.286349 -0.277671 0.096078 0.005671 0.007159 -0.112709 0.044889 0.027671 0.011217 0 0 0.027222 0 0 ]; d = [-5,-5,-5]; harr = flipud(harr); h=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); h=cellfun(@(gEl,dEl) struct('h',gEl,'offset',dEl),h,num2cell(d),... 'UniformOutput',0); garr = [ 0 0 0 -0.039237 0.023794 0.011029 -0.073518 0.037784 0.019204 0.181733 -0.070538 -0.020024 0.638129 -0.253037 -0.269204 0.638129 0.261996 0.517991 0.181733 0.261996 -0.269204 -0.073518 -0.253037 -0.020024 -0.039237 -0.070538 0.019204 0 0.037784 0.011029 0 0.023794 0 0 0 0 ]; g=mat2cell(garr,size(garr,1),ones(1,size(garr,2))); g=cellfun(@(gEl,dEl) struct('h',gEl,'offset',dEl),g,num2cell(d),... 'UniformOutput',0); return; otherwise error('%s: No such Higher Density Wavelet Transform Filters..',upper(mfilename)); end %garr = flipud(harr); g=mat2cell(garr,size(garr,1),ones(1,size(garr,2))); g = cellfun(@(gEl,dEl) struct('h',gEl,'offset',dEl),g,num2cell(d),'UniformOutput',0); h = g; ltfat/inst/wavelets/wfilt_spline.m0000664000175000017500000001564212612404256017262 0ustar susnaksusnakfunction [h,g,a,info]=wfilt_spline(m,n) %-*- texinfo -*- %@deftypefn {Function} wfilt_spline %@verbatim % WFILT_SPLINE Biorthogonal spline wavelets % Usage: [h,g,a]=wfilt_spline(m,n); % % Input parameters: % m : Number of zeros at z=-1 of the lowpass filter in g{1} % n : Number of zeros at z=-1 of the lowpass filter in h{1} % % [h,g,a]=WFILT_SPLINE(m,n) with m+n being even returns biorthogonal % spline wavelet filters. % % Examples: % --------- % : % wfiltinfo('ana:spline4:2'); % % : % wfiltinfo('syn:spline4:2'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_spline.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Original copyright goes to: % Copyright (C) 1994, 1995, 1996, by Universidad de Vigo % Author: Jose Martin Garcia % e-mail: Uvi_Wave@tsc.uvigo.es if(nargin<2) error('%s: Too few input parameters.',upper(mfilename)); end if(rem(m+n,2)~=0) error('%s: M+N must be even.',upper(mfilename)); end if m==1 && n==1 [h,g,a,info]=wfilt_db(1); return; end % Calculate rh coefficients, RH(z)=sqrt(2)*((1+z^-1)/2)^m; rh=sqrt(2)*(1/2)^m*binewton(m); % Calculate h coefficients, H(-z)=sqrt(2)*((1+z^-1)/2)^n*P(z) % First calculate P(z) (pol) if (rem(n,2)==0) N=n/2+m/2; else N=(n+m-2)/2+1; end pol=trigpol(N); % Now calculate ((1+z*-1)/2)^n; r0=(1/2)^n*binewton(n); hrev=sqrt(2)*conv(r0,pol); l=length(hrev); hh=hrev(l:-1:1); [h{2}, g{2}]=calhpf(hh,rh); h{1} = hh; g{1} = rh; if(length(h{1})>length(h{2})) if(rem(length(h{1}),2)~=1) r0 = (length(h{1})-length(h{2}))/2; l0 = r0; else r0 = (length(h{1})-length(h{2}))/2+1; l0 = (length(h{1})-length(h{2}))/2-1; end h{2} = [zeros(1,l0), h{2}, zeros(1,r0) ]; else if(rem(length(h{1}),2)~=1) r0 = (length(h{2})-length(h{1}))/2; l0 = r0; else r0 = (length(h{2})-length(h{1}))/2+1; l0 = (length(h{2})-length(h{1}))/2-1; end h{1} = [zeros(1,l0), h{1}, zeros(1,r0) ]; end if(length(g{1})>length(g{2})) if(rem(length(g{1}),2)~=1) r0 = (length(g{1})-length(g{2}))/2; l0 = r0; else r0 = (length(g{1})-length(g{2}))/2+1; l0 = (length(g{1})-length(g{2}))/2-1; end g{2} = [zeros(1,l0), g{2}, zeros(1,r0) ]; else if(rem(length(g{1}),2)~=1) r0 = (length(g{2})-length(g{1}))/2; l0 = r0; else r0 = (length(g{2})-length(g{1}))/2+1; l0 = (length(g{2})-length(g{1}))/2-1; end g{1} = [zeros(1,l0), g{1}, zeros(1,r0) ]; end % adding "the convenience" zero if(rem(length(h{1}),2)) h{1}= [0, h{1}]; h{2}= [0, h{2}]; g{1}= [0, g{1}]; g{2}= [0, g{2}]; end % Ajust the initial filter position if rem(m,2)==1 d = [-numel(h{1})/2, -numel(h{1})/2]; else d = [-numel(h{1})/2+1, -numel(h{1})/2-1]; end g = cellfun(@(gEl,dEl) struct('h',gEl(:),'offset',dEl),g,num2cell(d),... 'UniformOutput',0); h = cellfun(@(hEl,dEl) struct('h',flipud(hEl(:)),'offset',dEl),h,num2cell(d),... 'UniformOutput',0); %h = cellfun(@(hEl) hEl(end:-1:1),h,'UniformOutput',0); a= [2;2]; info.istight = 0; function c=binewton(N) % BINEWTON generate coefficients of Newton binomial. % % BINEWTON(N) generates the N+1 coefficients of % the Nth order Newton binomial. % % See also: NUMCOMB %-------------------------------------------------------- % Copyright (C) 1994, 1995, 1996, by Universidad de Vigo % % % Uvi_Wave is free software; you can redistribute it and/or modify it % under the terms of the GNU General Public License as published by the % Free Software Foundation; either version 2, or (at your option) any % later version. % % Uvi_Wave is distributed in the hope that it will be useful, but WITHOUT % ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or % FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License % for more details. % % You should have received a copy of the GNU General Public License % along with Uvi_Wave; see the file COPYING. If not, write to the Free % Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. % % Author: Nuria Gonzalez Prelcic % e-mail: Uvi_Wave@tsc.uvigo.es %-------------------------------------------------------- c=[1]; for j=1:N, c=[c,numcomb(N,j)]; end function y=numcomb(n,k) if n==k, y=1; elseif k==0, y=1; elseif k==1, y=n; else y=fact(n)/(fact(k)*fact(n-k)); end function y=fact(x) for j=1:length(x) if x(j)==0, y(j)=1; else y(j)=x(j)*fact(x(j)-1); end end function polinomio=trigpol(N) coefs=zeros(N,2*N-1); coefs(1,N)=1; for i=1:N-1 fila=[1 -2 1]; for j=2:i fila=conv(fila,[1 -2 1]); end; fila=numcomb(N-1+i,i)*(-0.25)^i*fila; fila=[ zeros(1,(N-i-1)) fila zeros(1,(N-i-1))]; coefs(i+1,:)=fila; end for i=0:(2*(N-1)) polinomio(i+1)=0; for j=1:N polinomio(i+1)=polinomio(i+1)+coefs(j,i+1); end end; function [g,rg]=calhpf(h,rh) % CALHPF Obtain high pass analysis and synthesis filters % in a biortoghonal filterbank. lrh=length(rh); if (rem(lrh,2)) % rh has odd length nrh=(lrh-1)/2; % Support [-nrh,nrh] else % rh has even length nrh=lrh/2-1; % Support [-nrh,nrh+1] end if (rem(nrh,2)) % nrh is odd flag=1; else % nrh is even flag=0; end grev=chsign(rh(lrh:-1:1),flag); g=grev(lrh:-1:1); lh=length(h); if (rem(lh,2)) % h has odd length nh=(lh-1)/2; % Support [-nh,nh] else % h has even length nh=lh/2-1; % Support [-nh,nh+1] end if (rem(nh,2))% nh is odd flag=1; else flag=0; % nh is even end rg=chsign(h,flag); function y=chsign(x,flag) lx=length(x); if (flag==1) y=(-1).^(1:lx).*x; else y=-(-1).^(1:lx).*x; end ltfat/inst/wavelets/wfilt_ddenb.m0000664000175000017500000000613312612404256017037 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_ddenb(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_ddenb %@verbatim %WFILT_DDENB Double-Density Dual-Tree DWT filters % % Usage: [h,g,a] = wfilt_ddenb(N); % % [h,g,a]=WFILT_DDENB(N) with N in {1,2} returns filters suitable % for dual-tree double density complex wavelet transform tree A. % % Examples: % --------- % : % wfiltinfo('ddena1'); % % References: % I. Selesnick. The double-density dual-tree DWT. Signal Processing, IEEE % Transactions on, 52(5):1304-1314, May 2004. % % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_ddenb.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa info.istight = 1; a = [2;2;2]; switch(N) case 1 % Example 1. from the reference. harr = [ 0.0138231641 0.0003671189 0.0008108446 0.1825175668 0.0048473455 0.0107061875 0.5537956151 0.0129572726 0.0264224754 0.6403205201 -0.0061082309 -0.0424847245 0.2024025378 -0.0656840149 -0.2095602589 -0.1327035751 -0.0968519623 -0.0055184660 -0.0714378446 -0.0211208454 0.6504107366 0.0179754457 0.5492354832 -0.4735663386 0.0085233088 -0.4154148634 0.0427795440 -0.0010031763 0.0377726968 0 ]; d = [-3,-7,-7]; case 2 % Example 2. From the reference. harr = [ 0.0016678785 0.0000019623 0.0000067421 0.0427009907 0.0000502404 0.0001726122 0.2319241351 0.0002359631 0.0007854598 0.5459409911 -0.0003026422 -0.0016861130 0.6090383368 -0.0044343824 -0.0181424716 0.2145936637 -0.0123017187 -0.0350847982 -0.1629587558 -0.0156330903 0.0180629832 -0.1283958243 0.0044955076 0.1356963431 0.0309676536 0.0781684245 0.0980877181 0.0373820215 0.1319270081 -0.1963413775 -0.0038525812 -0.1244353736 -0.3762491967 -0.0053106600 -0.4465930970 0.5674107094 0.0003304362 0.5772994700 -0.2017431422 0.0001955983 -0.1972513705 0.0090245313 -0.0000103221 0.0087730988 0 ]; d = [-4,-12,-12]; otherwise error('%s: No such filters.',upper(mfilename)); end htmp=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); h = cellfun(@(hEl,dEl)struct('h',hEl,'offset',dEl),... htmp(1:3),num2cell(d(1:3)),... 'UniformOutput',0); g = h; ltfat/inst/wavelets/wfilt_sym.m0000664000175000017500000003135712612404256016601 0ustar susnaksusnakfunction [h,g,a,info]=wfilt_sym(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_sym %@verbatim %WFILT_SYM Symlet filters % Usage: [h,g,a]=wfilt_sym(N); % % [h,g,a]=WFILT_SYM(N) generates the "least asymmetric" Daubechies' % orthogonal wavelets or "symlets" with N vanishing moments and % length 2N. % Zeros of the trigonometrical polynomial the filters consist of in the % Z-plane are selected alternatingly inside and outside the unit circle. % % Remark: Filters generated by this routine differ slightly from the % ones in the reference (table 6.3, figure. 6.4) because of the ambiguity % in the algorithm. % % Examples: % --------- % : % wfiltinfo('sym8'); % % References: % I. Daubechies. Ten Lectures on Wavelets. Society for Industrial and % Applied Mathematics, Philadelphia, PA, USA, 1992. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_sym.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Original copyright goes to: % Copyright (C) 1994, 1995, 1996, by Universidad de Vigo % Author: Jose Martin Garcia % e-mail: Uvi_Wave@tsc.uvigo.es num_coefs = 2*N; a = [2;2]; info.istight = 1; if num_coefs==2 % Haar filters [h,g,a,info]=wfilt_db(1); return end N=num_coefs/2; poly=trigpol(N); %Calculate trigonometric polynomial ceros=roots(poly); %Calculate roots realzeros=[]; imagzeros=[]; numrealzeros=0; numimagzeros=0; for i=1:2*(N-1) if (imag(ceros(i))==0) numrealzeros=numrealzeros+1; realzeros(numrealzeros)=ceros(i); else numimagzeros=numimagzeros+1; imagzeros(numimagzeros)=ceros(i); end end %% complex zeros are grouped together i=0; for cont=1:numimagzeros/4 modulos(cont)=abs(imagzeros(cont+i)); alfa(cont)=angle(imagzeros(cont+i)); i=i+1; end %% Calculate phase contribution of complex and real zeros for all the %% combination of these zeros. Each group of zeros is identified with a binary %% number. indice=2^(numimagzeros/4+numrealzeros/2); fase=zeros(indice,1001); for cont=0:indice-1, bin=dec2bina(cont,log2(indice)); for i=1:length(bin)-numrealzeros/2 if bin(i) R=1/modulos(i); else R=modulos(i); end alf=alfa(i); fase(cont+1,:)=fase(cont+1,:)+atang1(R,alf); end ind=1; for i=length(bin)-numrealzeros/2+1:length(bin) if bin(i) R=realzeros(ind+1); R=realzeros(ind+1); else R=realzeros(ind); end ind=ind+2; fase(cont+1,:)=fase(cont+1,:)+atang2(R); end end %% To retain only the non linear part of the phase. fas=linealiz(fase); imagzeros=[]; zerosreales=[]; %% To see which phase is closer to zero we select the one with minimun variance [maximo,pos]=min(sum(fas'.^2)); bin=dec2bina(pos-1,log2(indice)); for i=1:length(bin)-numrealzeros/2 if bin(i) z1=1/modulos(i)*exp(j*alfa(i)); else z1=modulos(i)*exp(j*alfa(i)); end imagzeros=[imagzeros z1 conj(z1)]; end ind=1; for i=length(bin)-numrealzeros/2+1:length(bin) if bin(i) zerosreales=[zerosreales realzeros(ind+1)]; else zerosreales=[zerosreales realzeros(ind)]; end ind=ind+2; end % Construction of rh from its zeros numrealzeros=numrealzeros/2; numimagzeros=numimagzeros/2; rh=[1 1]; for i=2:N rh=conv(rh,[1 1]); end for i=1:numrealzeros rh=conv(rh,[1 -zerosreales(i)]); end for i=1:2:numimagzeros rh=conv(rh,[1 -2*real(imagzeros(i)) abs(imagzeros(i))^2]); end % Once ho is factorized in its zeros, it must be normalized multiplying by "cte". cte=sqrt(2)/sum(rh); rh=cte*rh; fLen = length(rh); % Some odd values of N produce flipped filters % Bigger N jut take forever to calculate. if any(N==[7,9]) || ( N>=13 && rem(N,2) == 1) rh = rh(end:-1:1); end g{1} = rh; g{2} = -(-1).^(0:fLen-1).*g{1}(end:-1:1); Lh = numel(rh); d = cellfun(@(gEl) -length(gEl)/2,g); if N>2 % Do a filter alignment according to "center of mass" d(1) = -find(abs(g{1})==max(abs(g{1})),1,'first')+1; d(2) = -find(abs(g{2})==max(abs(g{2})),1,'first')+1; if abs(rem(d(1)-d(2),2))==1 % Shift d(2) just a bit d(2) = d(2) - 1; end end g = cellfun(@(gEl,dEl) struct('h',gEl(:),'offset',dEl),g,num2cell(d),'UniformOutput',0); h = g; function bin=dec2bina(num,bits) %DEC2BINA BIN = DEC2BINA(NUM,BITS) returns a vector which contains % the decimal number NUM in binary format, with a number of % digits equal to BITS. It is an auxiliary function used by % SYMLETS. %-------------------------------------------------------- % Copyright (C) 1994, 1995, 1996, by Universidad de Vigo % % % Uvi_Wave is free software; you can redistribute it and/or modify it % under the terms of the GNU General Public License as published by the % Free Software Foundation; either version 2, or (at your option) any % later version. % % Uvi_Wave is distributed in the hope that it will be useful, but WITHOUT % ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or % FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License % for more details. % % You should have received a copy of the GNU General Public License % along with Uvi_Wave; see the file COPYING. If not, write to the Free % Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. % % Author: Jose Martin Garcia % e-mail: Uvi_Wave@tsc.uvigo.es %-------------------------------------------------------- if nargin<2 flag=0; else flag=1; end bin=[]; coc=num; while coc>1 bin=[rem(coc,2) bin]; coc=fix(coc/2); end bin=[coc bin]; if flag if length(bin)0.0001 w=[0:2*pi/1e3:2*pi]; [m,n]=size(f); fase=zeros(m,n); for cont=1 : m if sum(f(cont,:)) >0 fase(cont,:)=f(cont,:)-w/2; else fase(cont,:)=f(cont,:)+w/2; end end else fase=f; end function polinomio=trigpol(N) coefs=zeros(N,2*N-1); coefs(1,N)=1; for i=1:N-1 fila=[1 -2 1]; for j=2:i fila=conv(fila,[1 -2 1]); end; fila=numcomb(N-1+i,i)*(-0.25)^i*fila; fila=[ zeros(1,(N-i-1)) fila zeros(1,(N-i-1))]; coefs(i+1,:)=fila; end for i=0:(2*(N-1)) polinomio(i+1)=0; for j=1:N polinomio(i+1)=polinomio(i+1)+coefs(j,i+1); end end; function y=numcomb(n,k) if n==k, y=1; elseif k==0, y=1; elseif k==1, y=n; else y=fact(n)/(fact(k)*fact(n-k)); end function y=fact(x) % FACT Factorial. % FACT(X) is the factorial of the elements in X vector. for j=1:length(x) if x(j)==0, y(j)=1; else y(j)=x(j)*fact(x(j)-1); end end ltfat/inst/wavelets/wfilt_oddevena.m0000664000175000017500000000637412612404256017557 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_oddevena(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_oddevena %@verbatim %WFILT_ODDEVENA Kingsbury's symmetric even filters % % Usage: [h,g,a] = wfilt_oddevena(N); % % [h,g,a]=WFILT_ODDEVENA(N) with N in {1} returns Kingsbury's % even filters. % % Examples: % --------- % : % figure(1); % wfiltinfo('ana:oddevena1'); % % figure(2); % wfiltinfo('syn:oddevena1'); % % References: % N. Kingsbury. Complex wavelets for shift invariant analysis and % filtering of signals. Applied and Computational Harmonic Analysis, % 10(3):234 - 253, 2001. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_oddevena.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa info.istight = 0; a = [2;2]; switch(N) case 1 % Example 1. from the reference. Symmetric near-orthogonal garr = [ 0 0 0 0 0 -0.0004645 0 0.0013349 -0.0058109 0.0022006 0.0166977 -0.0130127 -0.0000641 0.0015360 -0.0834914 0.0869008 0.0919537 0.0833552 0.4807151 -0.4885957 0.4807151 0.4885957 0.0919537 -0.0833552 -0.0834914 -0.0869008 -0.0000641 -0.0015360 0.0166977 0.0130127 -0.0058109 -0.0022006 0 -0.0013349 0 0.0004645 0 0 0 0 ]; % This scaling is not in the reference paper, but it is here to be % consistent garr = garr*sqrt(2); %garr = normalize(garr,'energy'); offset = -10; otherwise error('%s: No such filters.',upper(mfilename)); end %garr = [garr(:,3:4),garr(:,1:2)]; modrange = (-1).^((0:size(garr,1)-1) + offset+1).'; modrange2 = (-1).^((0:size(garr,1)-1) + offset).'; harr = [garr(:,2).*modrange2,... garr(:,1).*modrange,... ]; % In the biorthogonal case, the filters do not get time reversed garr = flipud(garr); htmp=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); h = cellfun(@(hEl)struct('h',hEl,'offset',offset),htmp(1:2),... 'UniformOutput',0); gtmp=mat2cell(garr,size(garr,1),ones(1,size(garr,2))); g = cellfun(@(gEl)struct('h',gEl,'offset',offset),gtmp(1:2),... 'UniformOutput',0); ltfat/inst/wavelets/wfilt_dgrid.m0000664000175000017500000000721112612404256017052 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_dgrid(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_dgrid %@verbatim %WFILT_DGRID Dense GRID framelets (tight frame, symmetric) % Usage: [h,g,a] = wfilt_dgrid(N); % % [h,g,a]=WFILT_DGRID(N) computes Dense GRID framelets. Redundancy % equal to 2. % % Examples: % --------- % : % % wfiltinfo('dgrid3'); % % References: % A. Abdelnour. Dense grid framelets with symmetric lowpass and bandpass % filters. In Signal Processing and Its Applications, 2007. ISSPA 2007. % 9th International Symposium on, volume 172, pages 1-4, 2007. % % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_dgrid.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa switch(N) case 1 garr = [ 0 0 0 0 -sqrt(2)/32 -sqrt(2)/32 0.0104677975 0 0 -2*sqrt(2)/32 0.0370823430 0.0104677975 9*sqrt(2)/32 7*sqrt(2)/32 0.0651503417 0.0370823430 16*sqrt(2)/32 0 0.0897493772 0.0651503417 9*sqrt(2)/32 -7*sqrt(2)/32 -0.575618139 0.0897493772 0 2*sqrt(2)/32 0.3731682798 -0.575618139 -sqrt(2)/32 sqrt(2)/32 0 0.3731682798 ]; offset = [-4,-4,-6,-6]; case 2 garr = [ -5*sqrt(2)/256 -5*sqrt(2)/256 0.0422028267 0 -7*sqrt(2)/256 23*sqrt(2)/256 0.0784808462 0.0422028267 35*sqrt(2)/256 -13*sqrt(2)/256 0.0274495253 0.0784808462 105*sqrt(2)/256 -41*sqrt(2)/256 -0.1272844093 0.0274495253 105*sqrt(2)/256 41*sqrt(2)/256 -0.4611848140 -0.1272844093 35*sqrt(2)/256 13*sqrt(2)/256 0.5488035631 -0.4611848140 -7*sqrt(2)/256 -23*sqrt(2)/256 -0.1084675382 0.5488035631 -5*sqrt(2)/256 5*sqrt(2)/256 0 -0.1084675382 ]; offset = [-4,-4,-4,-4]; case 3 garr = [ -7*sqrt(2)/1024 -7*sqrt(2)/1024 0.0019452732 0 -27*sqrt(2)/1024 43*sqrt(2)/1024 -0.0020062621 0.0019452732 0 -80*sqrt(2)/1024 0.0070362139 -0.0020062621 168*sqrt(2)/1024 8*sqrt(2)/1024 -0.0305577537 0.0070362139 378*sqrt(2)/1024 138*sqrt(2)/1024 -0.1131305218 -0.0305577537 378*sqrt(2)/1024 -138*sqrt(2)/1024 -0.0700905154 -0.1131305218 168*sqrt(2)/1024 -8*sqrt(2)/1024 0.0845961181 -0.0700905154 0 80*sqrt(2)/1024 0.6026545312 0.0845961181 -27*sqrt(2)/1024 -43*sqrt(2)/1024 -0.4804470835 0.6026545312 -7*sqrt(2)/1024 7*sqrt(2)/1024 0 -0.4804470835 ]; offset = [-5,-5,-7,-7]; otherwise error('%s: No such Dense Grid Framelet filters.',upper(mfilename)); end; g = mat2cell(garr,size(garr,1),ones(1,size(garr,2))); g = cellfun(@(gEl,ofEl) struct('h',gEl,'offset',ofEl),g,num2cell(offset),... 'UniformOutput',0); h = g; a = [2;2;2;2]; info.istight=1; ltfat/inst/wavelets/fwt.m0000664000175000017500000001571312612404256015362 0ustar susnaksusnakfunction [c,info] = fwt(f,w,J,varargin) %-*- texinfo -*- %@deftypefn {Function} fwt %@verbatim %FWT Fast Wavelet Transform % Usage: c = fwt(f,w,J); % c = fwt(f,w,J,dim); % [c,info] = fwt(...); % % Input parameters: % f : Input data. % w : Wavelet definition. % J : Number of filterbank iterations. % dim : Dimension to along which to apply the transform. % % Output parameters: % c : Coefficient vector. % info : Transform parameters struct. % % FWT(f,w,J) returns discrete wavelet coefficients of the input signal % f using J iterations of the basic wavelet filterbank defined by % w using the fast wavelet transform algorithm (Mallat's algorithm). % The coefficients are the Discrete Wavelet transform (DWT) of the input % signal f, if w defines two-channel wavelet filterbank. The following % figure shows DWT with J=3. % % The function can apply the Mallat's algorithm using basic filterbanks % with any number of the channels. In such case, the transform have a % different name. % % Several formats of the basic filterbank definition w are recognized. % One of them is a text string formed by a concatenation of a function % name with the wfilt_ prefix followed by a list of numerical arguments % delimited by :. For example 'db10' will result in a call to % wfilt_db(10) or 'spline4:4' in call to wfilt_spline(4,4) etc. % All filter defining functions can be listed by running % dir([ltfatbasepath,filesep,'wavelets',filesep,'wfilt_*']); % Please see help of the respective functions and follow references % therein. % % For other recognized formats of w please see FWTINIT. % % [c,info]=FWT(f,w,J) additionally returns struct. info containing % transform parameters. It can be conviniently used for the inverse % transform IFWT e.g. as fhat = iFWT(c,info). It is also required % by the PLOTWAVELETS function. % % If f is row/column vector, the subbands c are stored % in a single row/column in a consecutive order with respect to the % inceasing central frequency. The lengths of subbands are stored in % info.Lc so the subbands can be easily extracted using WAVPACK2CELL. % Moreover, one can pass an additional flag 'cell' to obtain the % coefficient directly in a cell array. The cell array can be again % converted to a packed format using WAVCELL2PACK. % % If the input f is a matrix, the transform is applied to each column % if dim==1 (default) and [Ls, W]=size(f). If dim==2 % the transform is applied to each row [W, Ls]=size(f). % The output is then a matrix and the input orientation is preserved in % the orientation of the output coefficients. The dim paramerer has to % be passed to the WAVPACK2CELL and WAVCELL2PACK when used. % % Boundary handling: % ------------------ % % FWT(f,w,J,'per') (default) uses the periodic extension which considers % the input signal as it was a one period of some infinite periodic signal % as is natural for transforms based on the FFT. The resulting wavelet % representation is non-expansive, that is if the input signal length is a % multiple of a J-th power of the subsampling factor and the filterbank % is critically subsampled, the total number of coefficients is equal to % the input signal length. The input signal is padded with zeros to the % next legal length L internally. % % The default periodic extension can result in "false" high wavelet % coefficients near the boundaries due to the possible discontinuity % introduced by the zero padding and periodic boundary treatment. % % FWT(f,w,J,ext) with ext other than 'per' computes a slightly % redundant wavelet representation of the input signal f with the chosen % boundary extension ext. The redundancy (expansivity) of the % represenation is the price to pay for using general filterbank and % custom boundary treatment. The extensions are done at each level of the % transform internally rather than doing the prior explicit padding. % % The supported possibilities are: % % 'zero' Zeros are considered outside of the signal (coefficient) % support. % % 'even' Even symmetric extension. % % 'odd' Odd symmetric extension. % % Note that the same flag has to be used in the call of the inverse % transform function IFWT if the info struct is not used. % % Examples: % --------- % % A simple example of calling the FWT function using 'db8' wavelet % filters.: % % [f,fs] = greasy; % J = 10; % [c,info] = fwt(f,'db8',J); % plotwavelets(c,info,fs,'dynrange',90); % % Frequency bands of the transform with x-axis in a log scale and band % peaks normalized to 1. Only positive frequency band is shown. : % % [g,a] = wfbt2filterbank({'db8',10,'dwt'}); % filterbankfreqz(g,a,20*1024,'linabs','posfreq','plot','inf','flog'); % % % References: % S. Mallat. A wavelet tour of signal processing. Academic Press, San % Diego, CA, 1998. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/fwt.html} %@seealso{ifwt, plotwavelets, wavpack2cell, wavcell2pack, thresh} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,3,'FWT'); complainif_notposint(J,'J'); % Initialize the wavelet filters structure w = fwtinit(w); %% ----- step 0 : Check inputs ------- definput.import = {'fwt'}; definput.keyvals.dim = []; definput.flags.cfmt = {'pack','cell'}; [flags,~,dim]=ltfatarghelper({'dim'},definput,varargin); %% ----- step 1 : Verify f and determine its length ------- [f,~,Ls,~,dim]=assert_sigreshape_pre(f,[],dim,upper(mfilename)); %% ----- step 2 : Determine number of ceoefficients in each subband *Lc* % and next legal input data length *L*. [Lc, L] = fwtclength(Ls,w,J,flags.ext); % Pad with zeros if the safe length L differ from the Ls. if(Ls~=L) f=postpad(f,L); end %% ----- step 3 : Run computation. c = comp_fwt(f,w.h,w.a,J,flags.ext); %% ----- FINALIZE: Change format of coefficients. if flags.do_pack c = wavcell2pack(c,dim); end %% ----- FILL INFO STRUCT ---------------------- if nargout>1 info.fname = 'fwt'; info.wt = w; info.ext = flags.ext; info.Lc = Lc; info.J = J; info.dim = dim; info.Ls = Ls; info.isPacked = flags.do_pack; end %END FWT ltfat/inst/wavelets/wfiltdt_dden.m0000664000175000017500000000326712612404256017232 0ustar susnaksusnakfunction [h,g,a,info] = wfiltdt_dden(N) %-*- texinfo -*- %@deftypefn {Function} wfiltdt_dden %@verbatim %WFILTDT_DDEN Double-Density Dual-Tree DWT filters % % Usage: [h,g,a] = wfiltdt_dden(N); % % [h,g,a]=WFILTDT_DDEN(N) with N in {1,2} returns filters suitable % for dual-tree double density complex wavelet transform. % % Examples: % --------- % : % wfiltdtinfo('dden1'); % % : % wfiltdtinfo('dden2'); % % References: % I. Selesnick. The double-density dual-tree DWT. Signal Processing, IEEE % Transactions on, 52(5):1304-1314, May 2004. % % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfiltdt_dden.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa [h(:,1),g(:,1),a,info] = wfilt_ddena(N); [h(:,2),g(:,2)] = wfilt_ddenb(N); [info.defaultfirst, info.defaultfirstinfo] = fwtinit('symdden2'); [info.defaultleaf, info.defaultleafinfo] = ... deal(info.defaultfirst,info.defaultfirstinfo); ltfat/inst/wavelets/plotwavelets.m0000664000175000017500000001224312612404256017306 0ustar susnaksusnakfunction C = plotwavelets(c,info,varargin) %-*- texinfo -*- %@deftypefn {Function} plotwavelets %@verbatim %PLOTWAVELETS Plot wavelet coefficients % Usage: plotwavelets(c,info,fs) % plotwavelets(c,info,fs,'dynrange',dynrange,...) % % PLOTWAVELETS(c,info) plots the wavelet coefficients c using % additional parameters from struct. info. Both parameters are returned % by any forward transform function in the wavelets directory. % % PLOTWAVELETS(c,info,fs) does the same plot assuming a sampling rate % fs Hz of the original signal. % % plowavelets(c,info,fs,'dynrange',dynrange) additionally limits the % dynamic range. % % C=PLOTWAVELETS(...) returns the processed image data used in the % plotting. Inputting this data directly to imagesc or similar functions % will create the plot. This is usefull for custom post-processing of the % image data. % % PLOTWAVELETS supports optional parameters of TFPLOT. Please see % the help of TFPLOT for an exhaustive list. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/plotwavelets.html} %@seealso{fwt, tfplot, complainif_notenoughargs(nargin,2,'plotwavelets');} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if isempty(c) || ~(iscell(c) || isnumeric(c)) error('%s: c must be non-empty cell or numeric array.',upper(mfilename)); end if ~isstruct(info) || ~isfield(info,'fname') error(['%s: info must be struct obtained as the 2nd return param. ',... 'of the comp. routine.'],upper(mfilename)); end definput.import={'tfplot'}; definput.flags.fwtplottype = {'tfplot','stem'}; definput.keyvals.fs = []; definput.keyvals.dynrange = []; [flags,kv]=ltfatarghelper({'fs','dynrange'},definput,varargin); if(flags.do_stem) error('%s: Flag %s not supported yet.',upper(mfilename),flags.fwtplottype); end switch info.fname case {'ufwt','uwfbt','uwpfbt'} % Only one channel signals can be plotted. if(ndims(c)>2) error('%s: Multichannel not supported.',upper(mfilename)); end case {'wfbt','dtwfbreal','dtwfb','wpfbt'} if any(cellfun(@(cEl) size(cEl,2)>1,c)) error('%s: Multichannel input not supported.',upper(mfilename)); end end maxSubLen = 800; draw_ticks = 1; switch info.fname case 'fwt' %% FWT plot % Change to the cell format if(isnumeric(c)) c = wavpack2cell(c,info.Lc,info.dim); end maxSubLen = max(info.Lc); % Only one channel signals can be plotted. if(size(c{1},2)>1) error('%s: Multichannel input not supported.',upper(mfilename)); end subbNo = numel(c); w = fwtinit(info.wt); aBase = w.a; filtNo = numel(w.h); J = info.J; a = [aBase(1).^J, reshape(aBase(2:end)*aBase(1).^(J-1:-1:0),1,[])]'; case 'ufwt' subbNo = size(c,2); a = ones(subbNo,1); w = fwtinit(info.wt); filtNo = numel(w.h); J = info.J; case {'wfbt','dtwfbreal','dtwfb'} maxSubLen = max(cellfun(@(cEl) size(cEl,1),c)); a = treeSub(info.wt); subbNo = numel(c); draw_ticks = 0; case 'uwfbt' subbNo = size(c,2); a = ones(subbNo,1); draw_ticks = 0; case 'wpfbt' maxSubLen = max(cellfun(@(cEl) size(cEl,1),c)); aCell = nodesSub(nodeBForder(0,info.wt),info.wt); a = cell2mat(cellfun(@(aEl) aEl(:)',aCell,'UniformOutput',0)); draw_ticks = 0; case 'uwpfbt' subbNo = size(c,2); a = ones(subbNo,1); draw_ticks = 0; otherwise error('%s: Unknown function name %s.',upper(mfilename),info.fname); end % POST optional operations switch info.fname case 'dtwfb' % Do subband equivalent of fftshift [c(1:end/2), c(end/2+1:end)] = deal( c(end/2+1:end), c(1:end/2)); a = [a(end:-1:1);a]; end % Use plotfilterbank C=plotfilterbank(c,a,[],kv.fs,kv.dynrange,flags.plottype,... flags.log,flags.colorbar,flags.display,'fontsize',kv.fontsize,'clim',kv.clim,'xres',min([maxSubLen,800])); if(draw_ticks) % Redo the yticks and ylabel yTickLabels = cell(1,subbNo); yTickLabels{1} = sprintf('a%d',J); Jtmp = ones(filtNo-1,1)*(J:-1:1); for ii=1:subbNo-1 yTickLabels{ii+1} = sprintf('d%d',Jtmp(ii)); end ylabel('Subbands','fontsize',kv.fontsize); set(gca,'ytick',1:subbNo); set(gca,'ytickLabel',yTickLabels,'fontsize',kv.fontsize); end % To avoid printing all the coefficients in the command window when a % semicolon is forgotten if nargout < 1 clear C; end ltfat/inst/wavelets/wfiltinfo.m0000664000175000017500000000765712612404256016573 0ustar susnaksusnakfunction wfiltinfo(w,varargin) %-*- texinfo -*- %@deftypefn {Function} wfiltinfo %@verbatim %WFILTINFO Plots filters info % Usage: wfiltinfo(w); % % Input parameters: % w : Basic wavelet filterbank. % % WFILTINFO(w) plots impulse responses, frequency responses and % approximation of the scaling and of the wavelet function(s) associated % with the wavelet filters defined by w in a single figure. Format of % w is the same as in FWT. % % Optionally it is possible to define scaling of the y axis of the % frequency seponses. Supported are: % % 'db','lin' % dB or linear scale respectivelly. By deault a dB scale is used. % % Examples: % --------- % % Details of the 'syn:spline8:8' wavelet filters (see WFILT_SPLINE): % % wfiltinfo('syn:spline8:8'); % % Details of the 'ana:spline8:8' wavelet filters: % % wfiltinfo('ana:spline8:8'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfiltinfo.html} %@seealso{wfilt_db} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa definput.flags.freqzscale = {'db','lin'}; [flags]=ltfatarghelper({},definput,varargin); w = fwtinit({'strict',w}); clf; filtNo = length(w.g); grayLevel = [0.6,0.6,0.6]; colorAr = repmat('rbkcmg',1,filtNo); subplot(4,filtNo,1); title('Scaling imp. response'); loAna = w.g{1}.h; loShift = -w.g{1}.offset; xvals = -loShift + (0:length(loAna)-1); hold on; if ~isempty(loAna(loAna==0)) stem(xvals(loAna==0),loAna(loAna==0),'Color',grayLevel); end loAnaNZ = find(loAna~=0); stem(xvals(loAnaNZ),loAna(loAnaNZ),colorAr(1)); axis tight; hold off; for ff=2:filtNo subplot(4,filtNo,ff); title(sprintf('Wavelet imp. response no: %i',ff-1)); filtAna = w.g{ff}.h; filtShift = -w.g{ff}.offset; xvals = -filtShift + (0:length(filtAna)-1); filtNZ = find(filtAna~=0); hold on; if ~isempty(filtAna(filtAna==0)) stem(xvals(filtAna==0),filtAna(filtAna==0),'Color',grayLevel); end stem(xvals(filtNZ),filtAna(filtNZ),colorAr(ff)); axis tight; hold off; end [wfn,sfn,xvals] = wavfun(w,'fft'); subplot(4,filtNo,[filtNo+1]); plot(xvals(:,end),sfn,colorAr(1)); axis tight; title('Scaling function'); for ff=2:filtNo subplot(4,filtNo,[filtNo+ff]); plot(xvals(:,ff-1),wfn(:,ff-1),colorAr(ff)); axis tight; title(sprintf('Wavelet function: %i',ff-1)); end subplot(4,filtNo,2*filtNo + (1:filtNo) ); title('Magnitude frequency response'); maxLen=max(cellfun(@(gEl) numel(gEl.h),w.g)); Ls = nextfastfft(max([maxLen,1024])); H = filterbankfreqz(w.g,w.a,Ls); %[H] = wtfftfreqz(w.g); if flags.do_db plotH = 20*log10(abs(H)); elseif flags.do_lin plotH = abs(H); else error('%s: Unknown parameter',upper(mfilaname)); end xVals = linspace(0,1,numel(H(:,1))); hold on; for ff=1:filtNo plot(xVals,plotH(:,ff),colorAr(ff)); axis tight; end if flags.do_db ylim([-30,max(plotH(:))]) end ylabel('|\itH|[dB]'); xlabel('\omega [-]') hold off; subplot(4,filtNo,3*filtNo + (1:filtNo) ); title('Phase frequency response'); hold on; for ff=1:filtNo plot(xVals,unwrap(angle((H(:,ff))))/pi,colorAr(ff)); axis tight; end ylabel('arg H(\omega)[\pi rad]'); xlabel('\omega [-]') axis tight; % plot(unwrap(angle([H]))); % axis tight; hold off; ltfat/inst/wavelets/fwtlength.m0000664000175000017500000000403412612404256016556 0ustar susnaksusnakfunction L=fwtlength(Ls,w,J,varargin) %-*- texinfo -*- %@deftypefn {Function} fwtlength %@verbatim %FWTLENGTH FWT length from signal % Usage: L=fwtlength(Ls,w,J); % % FWTLENGTH(Ls,w,J) returns the length of a Wavelet system that is long % enough to expand a signal of length Ls. Please see the help on % FWT for an explanation of the parameters w and J. % % If the returned length is longer than the signal length, the signal % will be zero-padded by FWT to length L. % % In addition, the function accepts flags defining boundary extension % technique as in FWT. The returned length can be longer than the % signal length only in case of 'per' (periodic extension). % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/fwtlength.html} %@seealso{fwt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notposint(Ls,'Ls','FWTLENGTH'); complainif_notposint(J,'J','FWTLENGTH'); % Initialize the wavelet filters structure w = fwtinit(w); definput.import = {'fwtext'}; [flags,kv]=ltfatarghelper({},definput,varargin); if flags.do_per blocksize=w.a(1)^J; L=ceil(Ls/blocksize)*blocksize; % elseif flags.do_valid % m = numel(w.g{1}.h); % a = w.a(1); % rred = (a^J-1)/(a-1)*(m-a); % blocksize=w.a(1)^J; % L=rred+floor((Ls-rred)/blocksize)*blocksize; else L = Ls; end ltfat/inst/wavelets/wfilt_ddena.m0000664000175000017500000000620612612404256017037 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_ddena(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_ddena %@verbatim %WFILT_DDENA Double-Density Dual-Tree DWT filters % % Usage: [h,g,a] = wfilt_ddena(N); % % [h,g,a]=wfil_ddena(N) with N in {1,2} returns filters suitable % for dual-tree double density complex wavelet transform tree A. % % Examples: % --------- % : % wfiltinfo('ddena1'); % % References: % I. Selesnick. The double-density dual-tree DWT. Signal Processing, IEEE % Transactions on, 52(5):1304-1314, May 2004. % % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_ddena.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa info.istight = 1; a = [2;2;2]; switch(N) case 1 % Example 1. from the reference. harr = [ 0.0691158205 0.0000734237 0.0001621689 0.3596612703 0.0003820788 0.0008438861 0.6657851023 -0.0059866448 -0.0136616968 0.4659189433 -0.0343385512 -0.0781278793 -0.0191014398 -0.0554428419 -0.0840435464 -0.1377522956 0.0018714327 0.2230705831 -0.0087922813 0.1386271745 0.3945086960 0.0194794983 0.3321168878 -0.6566499317 0.0000995795 -0.5661664438 0.2138977202 -0.0002006352 0.1888634841 0 ]; d = [-3,-7,-7]; case 2 % Example 2. From the reference. harr = [ 0.0116751500 0.0000002803 0.0000009631 0.1121045343 0.0000026917 0.0000092482 0.3902035988 -0.0000945824 -0.0003285657 0.6376600221 -0.0009828317 -0.0034113692 0.4515927116 -0.0032260080 -0.0098485834 -0.0177905271 -0.0033984723 0.0011435281 -0.1899509889 0.0053478454 0.0535846285 -0.0363317137 0.0269410607 0.0710003404 0.0511638041 0.0499929334 -0.0732656061 0.0130979774 -0.0076424664 -0.2335672955 -0.0081410874 -0.2115533011 -0.0478802585 -0.0016378610 -0.1367235355 0.5808457358 0.0005650673 0.6180972127 -0.4014544851 0.0000043492 -0.3981725189 0.0631717194 -0.0000014745 0.0614116921 0 ]; d = [-4,-12,-12]; otherwise error('%s: No such filters.',upper(mfilename)); end htmp=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); h = cellfun(@(hEl,dEl)struct('h',hEl,'offset',dEl),... htmp(1:3),num2cell(d(1:3)),... 'UniformOutput',0); g = h; ltfat/inst/wavelets/idtwfbreal.m0000664000175000017500000000746712612404256016714 0ustar susnaksusnakfunction f=idtwfbreal(c,par,varargin) %-*- texinfo -*- %@deftypefn {Function} idtwfbreal %@verbatim %IDTWFBREAL Inverse Dual-tree Filterbank for real-valued signals % Usage: f=idtwfbreal(c,info); % f=idtwfbreal(c,dualwt,Ls); % % Input parameters: % c : Input coefficients. % info : Transform params. struct % dualwt : Dual-tree Wavelet Filterbank definition % Ls : Length of the reconstructed signal. % % Output parameters: % f : Reconstructed data. % % f = IDTWFBREAL(c,info) reconstructs real-valued signal f from the % coefficients c using parameters from info struct. both returned by % DTWFBREAL function. % % f = IDTWFBREAL(c,dualwt,Ls) reconstructs real-valued signal f from the % coefficients c using dual-tree filterbank defined by dualwt. Plese % see DTWFBREAL for supported formats. The Ls parameter is mandatory % due to the ambiguity of reconstruction lengths introduced by the % subsampling operation. % Note that the same flag as in the DTWFBREAL function have to be used, % otherwise perfect reconstruction cannot be obtained. Please see help % for DTWFBREAL for description of the flags. % % Examples: % --------- % % A simple example showing perfect reconstruction using IDTWFBREAL: % % f = gspi; % J = 7; % wtdef = {'qshift3',J}; % c = dtwfbreal(f,wtdef); % fhat = idtwfbreal(c,wtdef,length(f)); % % The following should give (almost) zero % norm(f-fhat) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/idtwfbreal.html} %@seealso{dtwfbreal, dtwfbinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'IDTWFBREAL'); if(~iscell(c)) error('%s: Unrecognized coefficient format.',upper(mfilename)); end if(isstruct(par)&&isfield(par,'fname')) complainif_toomanyargs(nargin,2,'IDTWFBREAL'); if ~strcmpi(par.fname,'dtwfbreal') error(['%s: Wrong func name in info struct. ',... ' The info parameter was created by %s.'],... upper(mfilename),par.fname); end dtw = dtwfbinit({'dual',par.wt},par.fOrder); Ls = par.Ls; ext = 'per'; L = wfbtlength(Ls,dtw,ext); else complainif_notenoughargs(nargin,3,'IDTWFBREAL'); %% PARSE INPUT definput.keyvals.Ls=[]; definput.keyvals.dim=1; definput.import = {'wfbtcommon'}; [flags,kv,Ls]=ltfatarghelper({'Ls'},definput,varargin); complainif_notposint(Ls,'Ls'); ext = 'per'; % Initialize the wavelet tree structure dtw = dtwfbinit(par,flags.forder); [Lc,L]=wfbtclength(Ls,dtw,ext); % Do a sanity check if ~isequal(Lc,cellfun(@(cEl) size(cEl,1),c)) error(['%s: The coefficient subband lengths do not comply with the'... ' signal length *Ls*.'],upper(mfilename)); end end %% ----- step 3 : Run computation [nodesBF, rangeLoc, rangeOut] = treeBFranges(dtw,'rev'); outLengths = nodesInLen(nodesBF,L,strcmpi(ext,'per'),dtw); outLengths(end) = L; f = comp_idtwfb(c,dtw.nodes(nodesBF),dtw.dualnodes(nodesBF),outLengths,... rangeLoc,rangeOut,ext,0); f = postpad(f,Ls); ltfat/inst/wavelets/wavpack2cell.m0000664000175000017500000000612312612404256017133 0ustar susnaksusnakfunction [ccell,dim] = wavpack2cell(cvec,Lc,varargin) %-*- texinfo -*- %@deftypefn {Function} wavpack2cell %@verbatim %WAVPACK2CELL Changes wavelet coefficients storing format % Usage: % ccell = wavpack2cell(cvec,Lc); % ccell = wavpack2cell(cvec,Lc,dim); % % Input parameters: % cvec : Coefficients in packed format. % Lc : Vector containing coefficients lengths. % dim : Dimension along which the data were transformed. % % Output parameters: % ccell : Coefficients stored in a cell-array. Each element is % a column vector or a matrix. % dim : Return used dim. Usefull as an input of the % complementary function WAVCELL2PACK. % % ccell = WAVPACK2CELL(cvec,Lc) copies coefficients from a single column % vector or columns of a matrix cvec of size [sum(Lc), W] to the cell % array ccell of length length(Lc). Size of j*-th element of ccell* % is [Lc(j), W] and it is obtained by: % % ccell{j}=cvec(1+sum(Lc(1:j-1)):sum(Lc(1:j),:); % % ccell = WAVPACK2CELL(cvec,Lc,dim) allows specifying along which % dimension the coefficients are stored in cvec. dim==1 (default) % considers columns (as above) and dim==2 rows to be coefficients % belonging to separate channels. Other values are not supported. For % dim=2, cvec size is [W, sum(Lc)], Size of j*-th element of ccell* % is [Lc(j), W] and it is obtained by: % % ccell{j}=cvec(:,1+sum(Lc(1:j-1)):sum(Lc(1:j)).'; % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wavpack2cell.html} %@seealso{wavcell2pack, fwt, wfbt, wpfbt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa if(nargin<2) error('%s: Too few input parameters.',upper(mfilename)); end if(~isnumeric(cvec)) error('%s: *cvec* is not a numeric array.',upper(mfilename)); end definput.keyvals.dim = []; [flags,kv,dim]=ltfatarghelper({'dim'},definput,varargin); %If dim is not specified use first non-singleton dimension. if(isempty(dim)) dim=find(size(cvec)>1,1); end if(dim>2) error('%s: Multidimensional data is not accepted.',upper(mfilename)); end if(dim==2) cvec = cvec.'; end if(sum(Lc)~=size(cvec,1)) error('%s: Sum of elements of Lc is not equal to vector length along dimension %d. Possibly wrong dim?',upper(mfilename),dim); end % Actual computation ccell = mat2cell(cvec,Lc); ltfat/inst/wavelets/wfbtinit.m0000664000175000017500000001715212612404256016407 0ustar susnaksusnak function [wt,info] = wfbtinit(wtdef,varargin) %-*- texinfo -*- %@deftypefn {Function} wfbtinit %@verbatim %WFBTINIT Initialize Filterbank Tree % Usage: wt = wfbtinit(wtdef); % % Input parameters: % wtdef : Filterbank tree definition. % % Output parameters: % wt : Structure describing the filter tree. % % WFBTINIT({w,J,flag}) creates a filterbank tree of depth J. The % parameter w defines a basic wavelet filterbank. For all possible % formats see FWT. The following optional flags (still inside of the % cell-array) are recognized: % % 'dwt','full','doubleband','quadband','octaband' % Type of the tree to be created. % % WFBTINIT({w,J,flag,'mod',mod}) creates a filterbank tree as before, % but modified according to the value of mod. % Recognized options: % % 'powshiftable' % Changes subsampling factors of the root to 1. This results in redundant % near-shift invariant representation. % % The returned structure wt has the following fields: % % .nodes % Cell-array of structures obtained from FWTINIT. Each element % define a basic wavelet filterbank. % % .children % Indexes of children nodes % % .parents % Indexes of a parent node % % .forder % Frequency ordering of the resultant frequency bands. % % The structure together with functions from the wfbtmanip % subdirectory acts as an abstract data structure tree. % % Regular WFBTINIT flags: % % 'freq','nat' % Frequency or natural ordering of the coefficient subbands. The direct % usage of the wavelet tree ('nat' option) does not produce coefficient % subbans ordered according to the frequency. To achieve that, some % filter shuffling has to be done ('freq' option). % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtinit.html} %@seealso{wfbtput, wfbtremove} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa % TO DO: Do some caching % Output structure definition. % Effectively, it describes a ADT tree. % .nodes, .children, .parents ale all arrays of the same length and the j-th % node in the tree is desribed by wt.nodes{j}, wt.children{j} and % wt.parents(j). wt.nodes{j} is the actual data stored in the tree node % (a structure returned form fwtinit) and wt.parents(j) and wt.children{j} % define relationship to other nodes. wt.parents(j) is an index of the % parent in the arrays. wt.children{j} is an array of indexes of the % children nodes. %%%%%%%%%%%%%%%%%%%%%%%%%%%%% wt.nodes = {}; wt.children = {}; wt.parents = []; wt.freqOrder = 0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%% info.istight = 0; % return empty struct if no argument was passed if(nargin<1) return; end do_strict = 0; do_dual = 0; % Check 'strict' if iscell(wtdef) && ischar(wtdef{1}) && strcmpi(wtdef{1},'strict') do_strict = 1; wtdef = wtdef{2:end}; end % Check 'dual' if iscell(wtdef) && ischar(wtdef{1}) && strcmpi(wtdef{1},'dual') do_dual = 1; wtdef = wtdef{2:end}; end definput.import = {'wfbtcommon'}; [flags,kv]=ltfatarghelper({},definput,varargin); % If wtdef is already a structure if (isstruct(wtdef)&&isfield(wtdef,'nodes')) if isempty(wtdef.nodes) error('%s: The tree struct is empty.',upper(mfilename)); end wt = wtdef; if do_dual || do_strict nodesArg = wt.nodes; if do_dual nodesArg = cellfun(@(nEl) {'dual',nEl},nodesArg,'UniformOutput',0); end if do_strict nodesArg = cellfun(@(nEl) {'strict',nEl},nodesArg,'UniformOutput',0); end info.istight = 1; wt.nodes = {}; for ii=1:numel(nodesArg) % wt.nodes = cellfun(@(nEl) fwtinit(nEl),nodesArg,'UniformOutput',0); [wt.nodes{ii},infotmp] = fwtinit(nodesArg{ii}); if info.istight info.istight = infotmp.istight; end end % Do the filter frequency shuffling again, since the filters were % overwritten in fwtinit. if wt.freqOrder wt = nat2freqOrder(wt); end end % Do filter shuffling if flags.do_freq differs from the wt.freqOrder. % Frequency and natural oreding coincide for DWT. if wt.freqOrder ~= flags.do_freq wt = nat2freqOrder(wt); wt.freqOrder = ~wt.freqOrder; end return; end % break if the input parameter is not in the correct format if ~(iscell(wtdef)) || isempty(wtdef) error('%s: Unsupported filterbank tree definition.',upper(mfilename)); end % Creating new tree % Now wtdef is this {w,J,flag} wdef = wtdef{1}; definput = []; definput.flags.treetype = {'full','dwt','doubleband','quadband',... 'octaband','root'}; definput.keyvals.mod = []; definput.keyvals.overcomplete = []; definput.keyvals.J = []; [flags2,kv2,J]=ltfatarghelper({'J'},definput,wtdef(2:end)); complainif_notposint(J,'J'); if do_dual wdef = {'dual',wdef}; end if do_strict wdef = {'strict',wdef}; end do_powshiftable = 0; % Is the first level filterbank different? if ~isempty(kv2.mod) if ischar(kv2.mod) if strcmpi(kv2.mod,'powshiftable') if ~flags2.do_dwt error('%s: powshiftable is only valid with the dwt flag.',... upper(mfilename)); end do_powshiftable = 1; else error('%s: Not recognized value for the mod key.',upper(mfilename)); end else error('%s: Not recognized value for the first key.',upper(mfilename)); end end if ~isempty(kv2.overcomplete) error('%s: TO DO: overcomplete.',upper(mfilename)); end [w, info] = fwtinit(wdef); % Doing one-node tree if flags2.do_root J = 1; end if flags2.do_dwt % fill the structure to represent a DWT tree for jj=0:J-1 wt = wfbtput(jj,0,w,wt); end elseif flags2.do_full % fill the structure to represent a full wavelet tree for jj=0:J-1 % for ii=0:numel(w.g)^(jj)-1 wt = wfbtput(jj,0:numel(w.g)^(jj)-1,w,wt); % end end elseif flags2.do_doubleband % fill the structure to represent a double band tree for jj=0:J-1 % for ii=0:numel(w.g)^(jj)-1 wt = wfbtput(2*jj,0,w,wt); wt = wfbtput(2*jj+1,0:1,w,wt); % end end elseif flags2.do_quadband % fill the structure to represent a quad band tree for jj=0:J-1 % for ii=0:numel(w.g)^(jj)-1 wt = wfbtput(3*jj,0,w,wt); wt = wfbtput(3*jj+1,0:1,w,wt); wt = wfbtput(3*jj+2,0:3,w,wt); % end end elseif flags2.do_octaband % fill the structure to represent a octa band tree for jj=0:J-1 % for ii=0:numel(w.g)^(jj)-1 wt = wfbtput(4*jj,0,w,wt); wt = wfbtput(4*jj+1,0:1,w,wt); wt = wfbtput(4*jj+2,0:3,w,wt); wt = wfbtput(4*jj+3,0:7,w,wt); % end end end % Do filter shuffling if frequency ordering is required, wt.freqOrder = flags.do_freq; if flags.do_freq wt = nat2freqOrder(wt); end if do_powshiftable % Change subsampling factors of the root to 1 wt.nodes{wt.parents==0}.a(:) = 1; end ltfat/inst/wavelets/wfilt_symorth.m0000664000175000017500000001106612612404256017471 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_symorth(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_symorth %@verbatim %WFILT_SYMORTH Symmetric nearly-orthogonal and orthogonal nearly-symmetric % % Usage: [h,g,a] = wfilt_symorth(N); % % [h,g,a]=WFILT_SYMORTH(N) with Nin {1,2,3} returns orthogonal % near-symmetric (N==1) and symmetric near-orthogonal (N==[2,3]) % wavelet filters from the reference. % % The filters exhibit a coiflet-like behavior i.e. the scaling filter % has vanishing moments too. % % Examples: % --------- % : % wfiltinfo('ana:symorth2'); % % : % wfiltinfo('syn:symorth2'); % % References: % F. Abdelnour and I. W. Selesnick. Symmetric nearly orthogonal and % orthogonal nearly symmetric wavelets. The Arabian Journal for Science % and Engineering, 29(2C):3 - 16, 2004. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_symorth.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa info.istight = 0; a = [2;2]; offset = []; switch(N) case 1 % Example 3. From the reference. Orthogonal near-symmetric % K=2 wanishing moments A = -sqrt(2)/4+sqrt(30)/16; hlp = [-sqrt(2)/16,... sqrt(2)/16,... A+sqrt(2)/2,... A+sqrt(2)/2,... sqrt(2)/16,... -sqrt(2)/16,... -A,... -A... ].'; harr = [flipud(hlp), (-1).^(1:numel(hlp)).'.*hlp]; garr = harr; info.istight = 1; offset = [-5,-3]; case 2 % Example 2. From the reference. Symmetric near-orthogonal % K=3 wanishing moments hlp = [ -0.0019128844 0.0033707110 0.0092762126 -0.0855138167 0.0851905285 0.6966960301 0.6966960301 0.0851905285 -0.0855138167 0.0092762126 0.0033707110 -0.0019128844 ]; glp = [ 0.0025454063 0.0044852837 0.0037033492 -0.0855138167 0.0851905285 0.6966960301 0.6966960301 0.0851905285 -0.0855138167 0.0037033492 0.0044852837 0.0025454063 ]; harr = [hlp, (-1).^(0:numel(glp)-1).'.*flipud(glp)]; garr = [glp, (-1).^(0:numel(hlp)-1).'.*flipud(hlp)]; offset = [-6,-6]; case 3 % Example 1. from the reference. Symmetric near-orthogonal % K=5 vanishing moments (both low and high pass) % L=8 first zero derivatives of frequency response ar omega=0 hlp = [ 0.0001605988 0.0002633873 -0.0028105671 -0.0022669755 0.0246782363 -0.0061453735 -0.1137025792 0.1226794070 0.6842506470 0.6842506470 0.1226794070 -0.1137025792 -0.0061453735 0.0246782363 -0.0022669755 -0.0028105671 0.0002633873 0.0001605988 ]; glp = [ 0.0002809102 -0.0004607019 -0.0014760379 -0.0016765216 0.0192309116 -0.0001723898 -0.1099707039 0.1091804942 0.6921708203 0.6921708203 0.1091804942 -0.1099707039 -0.0001723898 0.0192309116 -0.0016765216 -0.0014760379 -0.0004607019 0.0002809102 ]; harr = [hlp, (-1).^(1:numel(glp)).'.*glp]; garr = [glp, (-1).^(1:numel(hlp)).'.*hlp]; offset = [-9,-9]; otherwise error('%s: No such filters.',upper(mfilename)); end h=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); h=cellfun(@(hEl,offEl) struct('h',hEl(:),'offset',offEl),h,num2cell(offset),'UniformOutput',0); g=mat2cell(garr,size(garr,1),ones(1,size(garr,2))); g=cellfun(@(gEl,offEl) struct('h',gEl(:),'offset',offEl),g,num2cell(offset),'UniformOutput',0); ltfat/inst/wavelets/wfilt_remez.m0000664000175000017500000003450212612404256017106 0ustar susnaksusnakfunction [h,g,a,info]=wfilt_remez(L,K,B) %-*- texinfo -*- %@deftypefn {Function} wfilt_remez %@verbatim %WFILT_REMEZ Filters designed using Remez exchange algorithm % Usage: [h,g,a]=wfilt_remez(L,K,B) % % Input parameters: % L : Length of the filters. % K : Degree of flatness (regularity) at z=-1. % B : Normalized transition bandwidth. % % [h,g,a]=WFILT_REMEZ(L,K,B) calculates a set of wavelet filters. % Regularity, frequency selectivity, and length of the filters can be % controlled by K, B and L parameters respectivelly. % % The filter desigh algorithm is based on a Remez algorithm and a % factorization of the complex cepstrum of the polynomial. % % Examples: % --------- % : % % wfiltinfo('remez50:2:0.1'); % % References: % O. Rioul and P. Duhamel. A remez exchange algorithm for orthonormal % wavelets. Circuits and Systems II: Analog and Digital Signal % Processing, IEEE Transactions on, 41(8):550 -560, aug 1994. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_remez.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Original copyright goes to: % Copyright (C) 1994, 1995, 1996, by Universidad de Vigo % Author: Jose Martin Garcia % e-mail: Uvi_Wave@tsc.uvigo.es if(nargin<3) error('%s: Too few input parameters.',upper(mfilename)); end complainif_notposint(L,'L',mfilename); complainif_notposint(L,'K',mfilename); if B>0.2 error(['%s: Bandwidth of the transition band should not be',... ' bigger than 0.2.'],upper(mfilename)); end poly=remezwav(L,K,B); rh=fc_cceps(poly); g{1} = flipud(rh(:)); g{2} = -(-1).^(1:length(rh)).'.*flipud(g{1}); % Default offset d = [0,0]; % Do a filter alignment according to "center of gravity" d(1) = -floor(sum((1:L)'.*abs(g{1}).^2)/sum(abs(g{1}).^2)); d(2) = -floor(sum((1:L)'.*abs(g{2}).^2)/sum(abs(g{2}).^2)); if rem(d(1)-d(2),2)==1 % Shift d(2) just a bit d(2) = d(2) + 1; end g = cellfun(@(gEl,dEl) struct('h',gEl,'offset',dEl),g,num2cell(d),... 'UniformOutput',0); h = g; a= [2;2]; info.istight = 1; function [p,r]=remezwav(L,K,B) %REMEZWAV P=REMEZWAV(L,K,B) gives impulse response of maximally % frequency selective P(z), product filter of paraunitary % filter bank solution H(z) of length L satisfying K flatness % constraints (wavelet filter), with normalized transition % bandwidth B (optional argument if K==L/2). % % [P,R]=REMEZWAV(L,K,B) also gives the roots of P(z) which can % be used to determine H(z). % % See also: REMEZFLT, FC_CCEPS. % % References: O. Rioul and P. Duhamel, "A Remez Exchange Algorithm % for Orthonormal Wavelets", IEEE Trans. Circuits and % Systems - II: Analog and Digital Signal Processing, % 41(8), August 1994 % % Author: Olivier Rioul, Nov. 1, 1992 (taken from the % above reference) % Modified by: Jose Martin Garcia % e-mail: Uvi_Wave@tsc.uvigo.es %-------------------------------------------------------- computeroots=(nargout>1); %%%%%%%%%%%%%%%%%%%%%%%%%% STEP 1 %%%%%%%%%%%%%%%%%%%%%%%%%%% if rem(L,2), error('L must be even'); end if rem(L/2-K,2), K=K+1; end N=L/2-K; %%%%%%%%%%%%%%%%%%%%%%%%%% STEP 2 %%%%%%%%%%%%%%%%%%%%%%%%%% % Daubechies solution % PK(z)=z^(-2K-1))+AK(z^2) if K==0, AK=0; else binom=pascal(2*K,1); AK=binom(2*K,1:K)./(2*K-1:-2:1); AK=[AK AK(K:-1:1)]; AK=AK/sum(AK); end %%%%%%%%%%%%%%%%%%%%%%%%%%% STEP 2' %%%%%%%%%%%%%%%%%%%%%%%%%%% % Daubechies factor % PK(z)=((1+z^(-1))/2)^2*K QK(z) if computeroots && K>0 QK=binom(2*K,1:K); QK=QK.*abs(QK); QK=cumsum(QK); QK=QK./abs(binom(2*K-1,1:K)); QK=[QK QK(K-1:-1:1)]; QK=QK/sum(QK)*2; end %%%%%%%%%%%%%%%%%%%%%%%%%%%% STEP 3 %%%%%%%%%%%%%%%%%%%%%%%%%%%% % output Daubechies solution PK(z) if K==L/2 p=zeros(1,2*L-1); p(1:2:2*L-1)=AK; p(L)=1; if computeroots r=[roots(QK); -ones(L,1)]; end return end %%%%%%%%%%%%%%%%%%%%%%%%%%%%% STEP 4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Daubechies polinomial % PK(x)=1+x*DK(x^2) if K==0, DK=0; else binom=pascal(K,1); binom=binom(K,:); DK=binom./(1:2:2*K-1); DK=fliplr(DK)/sum(DK); end wp=(1/2-B)*pi; % cut-off frequency gridens=16*(N+1); % grid density found=0; % boolean for Remez loop %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% STEP I %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Initial estimate of yk a=min(4,K)/10; yk=linspace(0,1-a,N+1); yk=(yk.^2).*(3+a-(2+a)*yk); yk=1-(1-yk)*(1-cos(wp)^2); ykold=yk; iter=0; while 1 % REMEZ LOOP iter=iter+1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% STEP II %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Compute delta Wyk=sqrt(yk).*((1-yk).^K); Dyk=(1-sqrt(yk).*polyval(DK,yk))./Wyk; for k=1:N+1 dy=yk-yk(k); dy(k)=[]; dy=dy(1:N/2).*dy(N:-1:N/2+1); Lk(k)=prod(dy); end invW(1:2:N+1)=2./Wyk(1:2:N+1); delta=sum(Dyk./Lk)/sum(invW./Lk); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% STEP III %%%%%%%%%%%%%%%%%%%%%%%%%%%%% % compute R(y) on fine grid Ryk=Dyk-delta.*invW; Ryk(N+1)=[]; Lk=(yk(1:N)-yk(N+1))./Lk(1:N); y=linspace(cos(wp)^2,1-K*1e-7,gridens); yy=ones(N,1)*y-yk(1:N)'*ones(1,gridens); % yy contain y-yk on each line ind=find(yy==0); % avoid division by 0 if ~isempty(ind) yy(ind)=1e-30*ones(size(ind)); end yy=1./yy; Ry=((Ryk.*Lk)*yy)./(Lk*yy); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% STEP IV %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % find next yk Ey=1-delta-sqrt(y).*(polyval(DK,y)+((1-y).^K).*Ry); k=find(abs(diff(sign(diff(Ey))))==2)+1; % N extrema if length(k)>N % may happen if L and K are large k=k(1:N); end yk=[yk(1) y(k)]; % N+1 extrema including wp if K==0, yk=[yk 1]; end % extrema at y==1 added if all(yk==ykold), break; end ykold=yk; end % REMEZ LOOP %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% STEP A %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % compute impulse response w=(0:2*N-2)*pi/(2*N-1); y=cos(w).^2; yy=ones(N,1)*y-yk(1:N)'*ones(1,2*N-1); ind=find(yy==0); if ~isempty(ind) yy(ind)=1e-30*ones(size(ind)); end yy=1./yy; Ry=((Ryk.*Lk)*yy)./(Lk*yy); Ry(2:2:2*N-2)=-Ry(2:2:2*N-2); r=Ry*cos(w'*(2*(0:N-1)+1)); % partial real IDFT done r=r/(2*N-1); r=[r r(N-1:-1:1)]; p1=[r 0]+[0 r]; pp=p1; % save p1 for later use for k=1:2*K p1=[p1 0]-[0 p1]; end if rem(K,2), p1=-p1; end p1=p1/2^(2*K+1); p1(N+1:N+2*K)=p1(N+1:N+2*K)+AK; % add Daubechies response: p(1:2:2*L-1)=p1; p(L)=1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% STEP A' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % compute roots if computeroots Q(1:2:2*length(pp)-1)=pp; for k=1:2*K Q=[Q 0]-[0 Q]; end if rem(K,2), Q=-Q; end Q=Q/2; if K>0 % add Daubechies factor QK Q(2*N+1:L-1)=Q(2*N+1:L-1)+QK; else Q(L)=1; end r=[roots(Q); -ones(2*K,1)]; end function h=fc_cceps(poly,ro) %FC_CCEPS Performs a factorization using complex cepstrum. % % H = FC_CCEPS (POLY,RO) provides H that is the spectral % factor of a FIR transfer function POLY(z) with non-negative % frequency response. This methode let us obtain lowpass % filters of a bank structure without finding the POLY zeros. % The filter obtained is minimum phase (all zeros are inside % unit circle). % % RO is a parameter used to move zeros out of unit circle. % It is optional and the default value is RO=1.02. % % See also: INVCCEPS, MYCCEPS, REMEZWAV. % % References: P.P Vaidyanathan, "Multirate Systems and Filter % Banks", pp. 849-857, Prentice-Hall, 1993 %-------------------------------------------------------- % Copyright (C) 1994, 1995, 1996, by Universidad de Vigo % % % Uvi_Wave is free software; you can redistribute it and/or modify it % under the terms of the GNU General Public License as published by the % Free Software Foundation; either version 2, or (at your option) any % later version. % % Uvi_Wave is distributed in the hope that it will be useful, but WITHOUT % ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or % FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License % for more details. % % You should have received a copy of the GNU General Public License % along with Uvi_Wave; see the file COPYING. If not, write to the Free % Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. % % Author: Jose Martin Garcia % e-mail: Uvi_Wave@tsc.uvigo.es %-------------------------------------------------------- if nargin < 2 ro=1.02; end L=4096; % number points of fft. N=(length(poly)-1)/2; %% Moving zeros out of unit circle roo=(ro).^[0:2*N]; g=poly./roo; %% Calculate complex cepstrum of secuence g ghat=mycceps(g,L); %% Fold the anticausal part of ghat, add it to the causal part and divide by 2 gcausal=ghat(1 : L/2); gaux1=ghat(L/2+1 : L); gaux2=gaux1(L/2 :-1: 1); gantic=[0 gaux2(1 : L/2-1)]; xhat=0.5*(gcausal+gantic); %% Calculate cepstral inversion h=invcceps(xhat,N+1); %% Low-pass filter has energie sqrt(2) h=h*sqrt(2)/sum(h); function x=invcceps(xhat,L) %INVCCEPS Complex cepstrum Inversion % % X= INVCCEPS (CX,L) recovers X from its complex cepstrum sequence % CX. X has to be real, causal, and stable (X(z) has no zeros % outside unit circle) and x(0)>0. L is the length of the % recovered secuence. % % See also: MYCCEPS, FC_CCEPS, REMEZWAV. % % References: P.P Vaidyanathan, "Multirate Systems and Filter % Banks", pp. 849-857, Prentice-Hall, 1993 %-------------------------------------------------------- % Copyright (C) 1994, 1995, 1996, by Universidad de Vigo % % % Uvi_Wave is free software; you can redistribute it and/or modify it % under the terms of the GNU General Public License as published by the % Free Software Foundation; either version 2, or (at your option) any % later version. % % Uvi_Wave is distributed in the hope that it will be useful, but WITHOUT % ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or % FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License % for more details. % % You should have received a copy of the GNU General Public License % along with Uvi_Wave; see the file COPYING. If not, write to the Free % Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. % % Author: Jose Martin Garcia % e-mail: Uvi_Wave@tsc.uvigo.es %-------------------------------------------------------- x=zeros(1,L); %% First point of x x(1)=exp(xhat(1)); %% Recursion to obtain the other point of x for muestra=1:L-1 for k=1:muestra x(muestra+1)=x(muestra+1)+k/muestra*xhat(k+1)*x(muestra-k+1); end end function xhat=mycceps(x,L) %MYCCEPS Complex Cepstrum % % CX = MYCCEPS (X,L) calculates complex cepstrum of the % real sequence X. L is the number of points of the fft % used. L is optional and its default value is 1024 points. % % See also: FC_CEPS, INVCCEPS, REMEZWAV. %-------------------------------------------------------- % Copyright (C) 1994, 1995, 1996, by Universidad de Vigo % % % Uvi_Wave is free software; you can redistribute it and/or modify it % under the terms of the GNU General Public License as published by the % Free Software Foundation; either version 2, or (at your option) any % later version. % % Uvi_Wave is distributed in the hope that it will be useful, but WITHOUT % ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or % FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License % for more details. % % You should have received a copy of the GNU General Public License % along with Uvi_Wave; see the file COPYING. If not, write to the Free % Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. % % Author: Jose Martin Garcia % e-mail: Uvi_Wave@tsc.uvigo.es %-------------------------------------------------------- if nargin < 2 L=1024; end H = fft(x,L); %% H must not be zero ind=find(abs(H)==0); if length(ind) > 0 H(ind)=H(ind)+1e-25; end logH = log(abs(H))+sqrt(-1)*rcunwrap(angle(H)); xhat = real(ifft(logH)); function y = rcunwrap(x) %RCUNWRAP Phase unwrap utility used by CCEPS. % RCUNWRAP(X) unwraps the phase and removes phase corresponding % to integer lag. See also: UNWRAP, CCEPS. % Author(s): L. Shure, 1988 % L. Shure and help from PL, 3-30-92, revised % Copyright (c) 1984-94 by The MathWorks, Inc. % $Revision: 1.4 $ $Date: 1994/01/25 17:59:42 $ n = max(size(x)); y = unwrap(x); nh = fix((n+1)/2); y(:) = y(:)' - pi*round(y(nh+1)/pi)*(0:(n-1))/nh; ltfat/inst/wavelets/wfilt_symdden.m0000664000175000017500000000624612612404256017433 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_symdden(K) %-*- texinfo -*- %@deftypefn {Function} wfilt_symdden %@verbatim %WFILT_SYMDDEN Symmetric Double-Density DWT filters (tight frame) % Usage: [h,g,a] = wfilt_symdden(K); % % [h,g,a]=WFILT_SYMDDEN(K) with K in {1,2} returns oversampled % symmetric double-density DWT filters. % The redundancy of the basic filterbank is equal to 1.5. % % Examples: % --------- % : % wfiltinfo('symdden1'); % % : % wfiltinfo('symdden2'); % % References: % I. Selesnick and A. Abdelnour. Symmetric wavelet tight frames with two % generators. Appl. Comput. Harmon. Anal., 17(2):211-225, 2004. % % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_symdden.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa switch(K) case 1 garr = [ 0.00069616789827 0.00120643067872 -0.00020086099895 -0.02692519074183 -0.04666026144290 0.00776855801988 -0.04145457368921 -0.05765656504458 0.01432190717031 0.19056483888762 -0.21828637525088 -0.14630790303599 0.58422553883170 0.69498947938197 -0.24917440947758 0.58422553883170 -0.24917440947758 0.69498947938197 0.19056483888762 -0.14630790303599 -0.21828637525088 -0.04145457368921 0.01432190717031 -0.05765656504458 -0.02692519074183 0.00776855801988 -0.04666026144290 0.00069616789827 -0.00020086099895 0.00120643067872 ]; offset = [-5,-5,-5]; case 2 garr = [ 0.00069616789827 -0.00014203017443 0.00014203017443 -0.02692519074183 0.00549320005590 -0.00549320005590 -0.04145457368920 0.01098019299363 -0.00927404236573 0.19056483888763 -0.13644909765612 0.07046152309968 0.58422553883167 -0.21696226276259 0.13542356651691 0.58422553883167 0.33707999754362 -0.64578354990472 0.19056483888763 0.33707999754362 0.64578354990472 -0.04145457368920 -0.21696226276259 -0.13542356651691 -0.02692519074183 -0.13644909765612 -0.07046152309968 0.00069616789827 0.01098019299363 0.00927404236573 0 0.00549320005590 0.00549320005590 0 -0.00014203017443 -0.00014203017443 ]; offset = [-5,-5,-5]; otherwise error('%s: No such Double Density DWT filter',upper(mfilename)); end; g=mat2cell(garr,size(garr,1),ones(1,size(garr,2))); g = cellfun(@(gEl,ofEl) struct('h',gEl(:),'offset',ofEl),... g,num2cell(offset),'UniformOutput',0); h = g; a= [2;2;2]; info.istight=1; ltfat/inst/wavelets/Contents.m0000664000175000017500000001474412612404256016362 0ustar susnaksusnak% LTFAT - Wavelets % % Zdenek Prusa, 2013 - 2015. % % Basic analysis/synthesis % FWT - Fast Wavelet Transform % IFWT - Inverse Fast Wavelet Transform % FWT2 - 2D Fast Wavelet Transform % IFWT2 - 2D Inverse Fast Wavelet Transform % UFWT - Undecimated Fast Wavelet Transform % IUFWT - Inverse Undecimated Fast Wavelet Transform % FWTLENGTH - Length of Wavelet system to expand a signal % FWTCLENGTH - Lengths of the wavelet coefficient subbands % % Advanced analysis/synthesis % WFBT - Transform using general Wavelet Filter Bank Tree % IWFBT - Inverse transform using general Wavelet Filter Bank Tree % UWFBT - Undecimated transform using general Wavelet Filter Bank Tree % IUWFBT - Inverse Undecimated transform using general Wavelet Filter Bank Tree % WPFBT - Wavelet Packet Transform using general Wavelet Filter Bank Tree % IWPFBT - Inverse Wavelet Packet Transform using general Wavelet Filter Bank Tree % UWPFBT - Undecimated Wavelet Packet Transform using general Wavelet Filter Bank Tree % IUWPFBT - Inverse Undecimated Wavelet Packet Transform using general Wavelet Filter Bank Tree % WPBEST - Best Tree selection % WFBTLENGTH - Length of Wavelet filter bank system to expand a signal % WFBTCLENGTH - Lengths of Wavelet filter bank coefficient subbands % WPFBTCLENGTH - Lengths of Wavelet Packet transform coefficient subbands % % Dual-tree complex wavelet transform % DTWFB - Dual-Tree Wavelet Filter Bank % IDTWFB - Inverse Dual-Tree Wavelet Filter Bank % DTWFBREAL - Dual-Tree Wavelet Filter Bank for real-valued signals % IDTWFBREAL - Inverse Dual-Tree Wavelet Filter Bank for real-valued signals % % Wavelet Filterbank trees manipulation % WFBTINIT - Wavelet Filter Bank tree structure initialization % DTWFBINIT - Dual-Tree wavelet filter bank structure initialization % WFBTPUT - Puts node (basic filter bank) to the specific tree coordinates % WFBTREMOVE - Removes node (basic filter bank) from the specific tree coordinates % WFBT2FILTERBANK - WFBT or FWT non-iterated filter bank using the multi-rate identity % WPFBT2FILTERBANK - WPFBT non-iterated filter bank using the multi-rate identity % DTWFB2FILTERBANK - DTWFB or DTWFBREAL non-iterated filter bank % FWTINIT - Basic Wavelet Filters structure initialization % % Frame properties of wavelet filter banks: % WFBTBOUNDS - Frame bounds of WFBT and FWT (or UWFBT and UFWT) % WPFBTBOUNDS - Frame bounds of WPFBT or UWPFBT % DTWFBBOUNDS - Frame bounds of DTWFB % % Plots % PLOTWAVELETS - Plot wavelet coefficients % WFILTINFO - Plot wavelet filters impulse and frequency responses and approximation of scaling and wavelet functions % WFILTDTINFO - Plot the same as WFILTINFO but for dual-tree wavelet transform % % Auxilary % WAVFUN - Approximate of the continuous scaling and wavelet functions % WAVCELL2PACK - Changes wavelet coefficient storing format % WAVPACK2CELL - Changes wavelet coefficient storing format back % % Wavelet Filters defined in the time-domain % WFILT_ALGMBAND - An ALGebraic construction of orthonormal M-BAND wavelets with perfect reconstruction % WFILT_CMBAND - M-Band cosine modulated wavelet filters % WFILT_COIF - Coiflets % WFILT_DB - DauBechies orthogonal filters (ortonormal base) % WFILT_DDEN - Double-DENsity dwt filters (tight frame) % WFILT_DGRID - Dense GRID framelets (tight frame, symmetric) % WFILT_HDEN - Higher DENsity dwt filters (tight frame, frame) % WFILT_LEMARIE - Battle and Lemarie quadrature filters % WFILT_MATLABWRAPPER - Wrapper of the wfilters function from the Matlab Wavelet Toolbox % WFILT_MBAND - M-band filters % WFILT_REMEZ - Wavelet orthonogal filters based on the Remez Exchange algorithm % WFILT_SYMDS - SYMmetric wavelet Dyadic Siblings (frames) % WFILT_SPLINE - Biorthogonal spline wavelet filters % WFILT_SYM - Least asymmetric Daubechies wavelet filters % WFILT_SYMDDEN - Symmetric Double-DENsity dwt filters (tight frame) % WFILT_SYMORTH - Symmetric nearly-orthogonal and orthogonal nearly-symmetric wav. filters % WFILT_SYMTIGHT - Symmetric nearly shift-invariant tight frame wavelets % WFILT_QSHIFTA - First tree filters from WFILTDT_QSHIFT % WFILT_QSHIFTB - Second tree filters from WFILTDT_QSHIFT % WFILT_ODDEVENA - First tree filters from WFILTDT_ODDEVEN % WFILT_ODDEVENB - Second tree filters from WFILTDT_ODDEVEN % WFILT_OPTSYMA - First tree filters from WFILTDT_OPTSYM % WFILT_OPTSYMB - Second tree filters from WFILTDT_OPTSYM % WFILT_DDENA - First tree filters from WFILTDT_DDEN % WFILT_DDENB - Second tree filters from WFILTDT_DDEN % % Dual-Tree Filters % WFILTDT_QSHIFT - Kingsbury's quarter-shift filters % WFILTDT_OPTSYM - Optimizatized Symmetric Self-Hilbertian Filters % WFILTDT_ODDEVEN - Kingsbury's symmetric odd and even biorthogonal filters % WFILTDT_DDEN - Double-density dual-tree filters % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % Url: http://ltfat.github.io/doc/wavelets/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/wavelets/wfilt_optsyma.m0000664000175000017500000000625212612404256017461 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_optsyma(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_optsyma %@verbatim %WFILT_OPTSYMA Optimizatized Symmetric Self-Hilbertian Filters % % Usage: [h,g,a] = wfilt_optsyma(N); % % [h,g,a]=wfiltdt_optsyma(N) with N in {1,2,3} returns filters % suitable with optimized symmetry suitable for for dual-tree complex % wavelet transform tree A. % % Examples: % --------- % : % wfiltinfo('optsyma3'); % % References: % B. Dumitrescu, I. Bayram, and I. W. Selesnick. Optimization of % symmetric self-hilbertian filters for the dual-tree complex wavelet % transform. IEEE Signal Process. Lett., 15:146-149, 2008. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_optsyma.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa info.istight = 1; a = [2;2]; switch(N) case 1 hlp = [ -0.0023380687 0.0327804569 -0.0025090221 -0.1187657989 0.2327030100 0.7845762950 0.5558782330 0.0139812814 -0.0766273710 -0.0054654533 0 0 ]; case 2 % hlp = [ 0.0001598067 0.0000007274 0.0235678740 0.0015148138 -0.0931304005 0.2161894746 0.7761070855 0.5778162235 0.0004024156 -0.0884144581 0 0 0 0 ]; case 3 hlp = [ 0.0017293259 -0.0010305604 -0.0128374477 0.0018813576 0.0359457035 -0.0395271550 -0.1048144141 0.2663807401 0.7636351894 0.5651724402 0.0101286691 -0.1081211791 0.0133197551 0.0223511379 0 0 0 0 ]; otherwise error('%s: No such filters.',upper(mfilename)); end % numel(hlp) must be even offset = -(floor(numel(hlp)/2)); range = (0:numel(hlp)-1) + offset; % Create the filters according to the reference paper. % % REMARK: The phase of the alternating +1 and -1 is crucial here. % harr = [... hlp,... (-1).^(range).'.*flipud(hlp),... %flipud(hlp),... %(-1).^(range).'.*hlp,... ]; htmp=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); h = cellfun(@(hEl)struct('h',hEl,'offset',offset),htmp(1:2),... 'UniformOutput',0); g = h; ltfat/inst/wavelets/wfilt_mband.m0000664000175000017500000000564212612404256017050 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_mband(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_mband %@verbatim %WFILT_MBAND Generates 4-band coder % Usage: [h,g,a] = wfilt_mband(N); % % [h,g,a]=WFILT_MBAND(1) returns linear-phase 4-band filters % from the reference. % % The filters are not actually proper wavelet filters, because the % scaling filter is not regular, therefore it is not stable under % iterations (does not converge to a scaling function). % % % Examples: % --------- % : % % wfiltinfo('mband1'); % % References: % O. Alkin and H. Caglar. Design of efficient M-band coders with % linear-phase and perfect-reconstruction properties. Signal Processing, % IEEE Transactions on, 43(7):1579 -1590, jul 1995. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_mband.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa a= [4;4;4;4]; switch(N) case 1 harr = [ [ 0.036796442259 -0.024067904384 -0.064951364125 -0.042483542576 -0.030838286810 0.174767766545 0.409804433561 0.540933249858 0.540933249858 0.409804433561 0.174767766545 -0.030838286810 -0.042483542576 -0.064951364125 -0.024067904384 0.036796442259 ],... [ 0.024067904384 -0.036796442259 -0.042483542576 -0.064951364125 -0.174767766545 0.030838286810 0.540933249858 0.409804433561 -0.409804433561 -0.540933249858 -0.030838286810 0.174767766545 0.064951364125 0.042483542576 0.036796442259 -0.024067904384 ],... [ 0.024067904384 0.036796442259 -0.042483542576 0.064951364125 -0.174767766544 -0.030838286810 0.540933249858 -0.409804433561 -0.409804433561 0.540933249858 -0.030838286810 -0.174767766545 0.064951364125 -0.042483542576 0.036796442259 0.024067904384 ],... [ 0.036796442259 0.024067904384 -0.064951364125 0.042483542576 -0.030838286810 -0.174767766545 0.409804433561 -0.540933249858 0.540933249858 -0.409804433561 0.174767766545 0.030838286810 -0.042483542576 0.064951364125 -0.024067904384 -0.036796442259 ] ]; otherwise error('%s: No such M-Band filters.',upper(mfilename)); end g=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); g=cellfun(@(gEl) struct('h',gEl,'offset',-numel(gEl)/2),g,'UniformOutput',0); h = g; info.istight = 1; ltfat/inst/wavelets/wpfbtbounds.m0000664000175000017500000000653412612404256017120 0ustar susnaksusnakfunction [AF,BF]=wpfbtbounds(wt,varargin) %-*- texinfo -*- %@deftypefn {Function} wpfbtbounds %@verbatim %WPFBTBOUNDS Frame bounds of WPFBT % Usage: fcond=wpfbtbounds(wt,L); % [A,B]=wpfbtbounds(wt,L); % [...]=wpfbtbounds(wt); % % WPFBTBOUNDS(wt,L) calculates the ratio B/A of the frame bounds % of the wavelet packet filterbank specified by wt for a system of length % L. The ratio is a measure of the stability of the system. % % WPFBTBOUNDS(wt) does the same, except L is chosen to be the next % compatible length bigger than the longest filter from the identical % filterbank. % % [A,B]=WPFBTBOUNDS(...) returns the lower and upper frame bounds % explicitly. % % See WFBT for explanation of parameter wt. % % Additionally, the function accepts the following flags: % % 'intsqrt'(default),'intnoscale', 'intscale' % The filters in the filterbank tree are scaled to reflect the % behavior of WPFBT and IWPFBT with the same flags. % % 'scaling_notset'(default),'noscale','scale','sqrt' % Support for scaling flags as described in UWPFBT. By default, % the bounds are caltulated for WPFBT, passing any of the non-default % flags results in bounds for UWPFBT. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wpfbtbounds.html} %@seealso{wpfbt, filterbankbounds} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,1,'WPFBTBOUNDS'); definput.keyvals.L = []; definput.flags.interscaling = {'intsqrt', 'intscale', 'intnoscale'}; definput.import = {'uwfbtcommon'}; definput.importdefaults = {'scaling_notset'}; [flags,~,L]=ltfatarghelper({'L'},definput,varargin); wt = wfbtinit({'strict',wt},'nat'); if ~isempty(L) && flags.do_scaling_notset if L~=wfbtlength(L,wt) error(['%s: Specified length L is incompatible with the length of ' ... 'the time shifts.'],upper(mfilename)); end; end for ii=1:numel(wt.nodes) a = wt.nodes{ii}.a; assert(all(a==a(1)),sprintf(['%s: One of the basic wavelet ',... 'filterbanks is not uniform.'],... upper(mfilename))); end % Do the equivalent filterbank using multirate identity property [gmultid,amultid] = wpfbt2filterbank(wt,flags.interscaling,flags.scaling); if isempty(L) L = wfbtlength(max(cellfun(@(gEl) numel(gEl.h),gmultid)),wt); end % Do the equivalent uniform filterbank if any(amultid~=amultid(1)) [gu,au] = nonu2ufilterbank(gmultid,amultid); else [gu,au] = deal(gmultid,amultid); end if nargout<2 AF = filterbankbounds(gu,au,L); elseif nargout == 2 [AF, BF] = filterbankbounds(gu,au,L); end ltfat/inst/wavelets/wfilt_qshifta.m0000664000175000017500000001530512612404256017423 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_qshifta(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_qshifta %@verbatim %WFILT_QSHIFTA Improved Orthogonality and Symmetry properties % % Usage: [h,g,a] = wfilt_qshifta(N); % % [h,g,a]=wfilt_qshift(N) with N in {1,2,3,4,5,6,7} returns % Kingsbury's Q-shift wavelet filters for tree A. % % Examples: % --------- % : % figure(1); % wfiltinfo('qshifta3'); % % References: % N. G. Kingsbury. A dual-tree complex wavelet transform with improved % orthogonality and symmetry properties. In ICIP, pages 375-378, 2000. % % N. Kingsbury. Design of q-shift complex wavelets for image processing % using frequency domain energy minimization. In Image Processing, 2003. % ICIP 2003. Proceedings. 2003 International Conference on, volume 1, % pages I-1013-16 vol.1, Sept 2003. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_qshifta.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa info.istight = 1; a = [2;2]; switch(N) case 1 % Example 1. from the reference 1. Symmetric near-orthogonal % More precise values (more decimal places) were taken from % the Python DTCWT package hlp = [ 0.0351638365714947 % z^4 0 -0.0883294244510729 % z^2 0.233890320607236 % z^1 0.760272369066126 % z^0 <-- origin 0.587518297723561 % z^-1 0 -0.114301837144249 % z^-3 0 0 ]; case 2 % hlp = [ 0.0511304052838317 -0.0139753702468888 -0.109836051665971 0.263839561058938 0.766628467793037 0.563655710127052 0.000873622695217097 -0.100231219507476 -0.00168968127252815 -0.00618188189211644 ]; case 3 % Example 2. From the reference 1. hlp = [ 0.00325314276365318 -0.00388321199915849 0.0346603468448535 -0.0388728012688278 -0.117203887699115 0.275295384668882 0.756145643892523 % <-- origin 0.568810420712123 0.0118660920337970 -0.106711804686665 0.0238253847949203 0.0170252238815540 -0.00543947593727412 -0.00455689562847549 ]; case 4 % hlp = [ -0.00476161193845591 -0.000446022789262285 -7.14419732796501e-05 0.0349146123068422 -0.0372738957998980 -0.115911457427441 0.276368643133032 0.756393765199037 0.567134484100133 0.0146374059644734 -0.112558884257522 0.0222892632669227 0.0184986827241562 -0.00720267787825835 -0.000227652205897772 0.00243034994514868 ]; case 5 % Example 3. From the reference 1. hlp = [ -0.00228412744027053 % z^8 0.00120989416307344 % z^7 -0.0118347945154308 % z^6 0.00128345699934440 % z^5 0.0443652216066170 % z^4 -0.0532761088030473 % z^3 -0.113305886362143 % z^2 0.280902863222187 % z^1 0.752816038087856 % z^0 <-- origin 0.565808067396459 % z^-1 0.0245501524336666 % z^-2 -0.120188544710795 % z^-3 0.0181564939455465 % z^-4 0.0315263771220847 % z^-5 -0.00662879461243006 % z^-6 -0.00257617430660079 % z^-7 0.00127755865380700 % z^-8 0.00241186945666628 % z^-9 ]; case 6 % From reference 2 % Generated using software by Prof. Nick Kingsbury % http://sigproc.eng.cam.ac.uk/foswiki/pub/Main/NGK/qshiftgen.zip % hlp = qshiftgen([26,1/3,1,1,1]); hlp = hlp/norm(hlp); hlp = [9.69366641745754e-05;3.27432154422329e-05;... -0.000372508343063683;0.000265822010615719;0.00420106192587724;... -0.000851685012123638;-0.0194099330331787;0.0147647107515980;... 0.0510823932256706;-0.0665925933116249;-0.111697066192884;... 0.290378669551088;0.744691179589718;0.565900493333378;... 0.0350864022239272;-0.130600567220340;0.0106673205278386;... 0.0450881734744377;-0.0116452911371123;-0.0119726865351617;... 0.00464728269258923;0.00156428519208473;-0.000193257944314871;... -0.000997377567082884;-4.77392249288136e-05;0.000126793092000602]; case 7 % hlp = qshiftgen([38,1/3,1,1,1]); hlp = hlp/norm(hlp); hlp = [-5.60092763439975e-05;5.48406024854987e-05;... 9.19038839527110e-05;-8.70402717115631e-05;... -0.000220539629671714;0.000281927965110883;... 0.000785261918054103;-0.000284818785208508;... -0.00347903355232634;0.00106170047948173;0.0112918523131508;... -0.00661418560030456;-0.0275662474083655;0.0256353066092428;... 0.0558968886331913;-0.0797279144129786;-0.109398280267440;... 0.299471557624693;0.735969669961052;0.565697237934440;... 0.0456103326499340;-0.139358668718518;0.00372525621820399;... 0.0578449676250133;-0.0102649107519070;-0.0227204202705973;... 0.00707541881254841;0.00739220672191233;-0.00294716840272524;... -0.00194108140290843;0.000711544068828577;0.000568969033823645;... -0.000141696506233205;-0.000156935421570824;... -9.35020254608262e-07;-2.40218618976427e-05;... 2.34727799564078e-05;1.31525730967674e-05]; otherwise error('%s: No such filters.',upper(mfilename)); end % numel(hlp) must be even offset = -(numel(hlp)/2); range = (0:numel(hlp)-1) + offset; % Create the filters according to the reference paper. % % REMARK: The phase of the alternating +1 and -1 is crucial here. % harr = [... hlp,... (-1).^(range).'.*flipud(hlp),... % flipud(hlp),... % (-1).^(range).'.*hlp,... ]; htmp=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); h(1:2,1) = cellfun(@(hEl)struct('h',hEl,'offset',offset),htmp(1:2),... 'UniformOutput',0); g = h; ltfat/inst/wavelets/wfbtclength.m0000664000175000017500000000351712612404256017070 0ustar susnaksusnakfunction [Lc,L]=wfbtclength(Ls,wt,varargin) %-*- texinfo -*- %@deftypefn {Function} wfbtclength %@verbatim %WFBTCLENGTH WFBT subband lengths from a signal length % Usage: Lc=wfbtclength(Ls,wt); % [Lc,L]=wfbtclength(...); % % Lc=WFBTCLENGTH(Ls,wt) returns the lengths of coefficient subbands % obtained from WFBT for a signal of length Ls. Please see the help % on WFBT for an explanation of the parameters wt. % % [Lc,L]=WFBTCLENGTH(...) additionally returns the next legal length % of the input signal for the given extension type. % % The function support the same boundary-handling flags as the FWT % does. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtclength.html} %@seealso{wfbt, wfbtlength} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notposint(Ls,'Ls','WFBTCLENGTH'); definput.import = {'fwt'}; [flags,kv]=ltfatarghelper({},definput,varargin); % Initialize the wavelet filters structure wt = wfbtinit(wt); if(flags.do_per) a = treeSub(wt); L = filterbanklength(Ls,a); Lc = L./a; else L = Ls; Lc = treeOutLen(L,0,wt); end ltfat/inst/wavelets/wfilt_optsymb.m0000664000175000017500000000406112612404256017456 0ustar susnaksusnakfunction [h,g,a,info] = wfilt_optsymb(N) %-*- texinfo -*- %@deftypefn {Function} wfilt_optsymb %@verbatim %WFILT_OPTSYMB Optimizatized Symmetric Self-Hilbertian Filters % % Usage: [h,g,a] = wfilt_optsymb(N); % % [h,g,a]=wfiltdt_optsymb(N) with N in {1,2,3} returns filters % suitable with optimized symmetry suitable for for dual-tree complex % wavelet transform tree B. % % Examples: % --------- % : % wfiltinfo('optsymb3'); % % References: % B. Dumitrescu, I. Bayram, and I. W. Selesnick. Optimization of % symmetric self-hilbertian filters for the dual-tree complex wavelet % transform. IEEE Signal Process. Lett., 15:146-149, 2008. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfilt_optsymb.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa [ha,~,a,info] = wfilt_optsyma(N); hlp = ha{1}.h; offset = -(numel(hlp)/2); range = (0:numel(hlp)-1) + offset; % Create the filters according to the reference paper. % % REMARK: The phase of the alternating +1 and -1 is crucial here. % harr = [... flipud(hlp),... (-1).^(range).'.*hlp,... ]; htmp=mat2cell(harr,size(harr,1),ones(1,size(harr,2))); h(1:2,1) = cellfun(@(hEl)struct('h',hEl,'offset',offset),htmp(1:2),... 'UniformOutput',0); g = h; ltfat/inst/wavelets/fwtclength.m0000664000175000017500000000525512612404256016727 0ustar susnaksusnakfunction [Lc,L]=fwtclength(Ls,w,J,varargin) %-*- texinfo -*- %@deftypefn {Function} fwtclength %@verbatim %FWTCLENGTH FWT subbands lengths from a signal length % Usage: Lc=fwtclength(Ls,w,J); % [Lc,L]=fwtclength(...); % % Lc=FWTCLENGTH(Ls,w,J) returns the lengths of the wavelet coefficient % subbands for a signal of length Ls. Please see the help on FWT for % an explanation of the parameters w and J. % % [Lc,L]=FWTCLENGTH(...) additianally the function returns the next % legal length of the input signal for the given extension type. % % The function support the same boundary-handling flags as the FWT % does. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/fwtclength.html} %@seealso{fwt, fwtlength} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notposint(Ls,'Ls','FWTCLENGTH'); complainif_notposint(J,'J','FWTCLENGTH'); w = fwtinit(w); definput.import = {'fwtext'}; [flags,kv]=ltfatarghelper({},definput,varargin); % Get the next legal length L = fwtlength(Ls,w,J,flags.ext); filtNo = length(w.g); subbNo = (filtNo-1)*J+1; Lc = zeros(subbNo,1); runPtr = 0; levelLen = L; if flags.do_per % Non-expansive case for jj=1:J for ff=filtNo:-1:2 Lc(end-runPtr) = ceil(levelLen/w.a(ff)); runPtr = runPtr + 1; end levelLen = ceil(levelLen/w.a(1)); end % elseif flags.do_valid % % Valid coef. case % filts = w.g; % for jj=1:J % for ff=filtNo:-1:2 % Lc(end-runPtr) = floor((levelLen-(length(filts{ff}.h)-1))/w.a(ff)); % runPtr = runPtr + 1; % end % levelLen = floor((levelLen-(length(filts{1}.h)-1))/w.a(1)); % end else % Expansive case filts = w.g; for jj=1:J for ff=filtNo:-1:2 skip = w.a(ff) - 1; Lc(end-runPtr) = ceil((levelLen+(length(filts{ff}.h)-1)-skip)/w.a(ff)); runPtr = runPtr + 1; end skip = w.a(1) - 1; levelLen = ceil((levelLen+(length(filts{1}.h)-1)-skip)/w.a(1)); end end Lc(1)=levelLen; ltfat/inst/wavelets/wfiltdt_oddeven.m0000664000175000017500000000344312612404256017740 0ustar susnaksusnakfunction [h,g,a,info] = wfiltdt_oddeven(N) %-*- texinfo -*- %@deftypefn {Function} wfiltdt_oddeven %@verbatim %WFILTDT_ODDEVEN Kingsbury's symmetric odd and even filters % % Usage: [h,g,a] = wfiltdt_oddeven(N); % % [h,g,a]=wfilt_oddeven(N) with N in {1} returns the original odd % and even symmetric filters suitable for dual-tree complex wavelet % transform. The filters in individual trees are biorthogonal. % % Examples: % --------- % : % wfiltdtinfo('ana:oddeven1'); % % References: % N. Kingsbury. Complex wavelets for shift invariant analysis and % filtering of signals. Applied and Computational Harmonic Analysis, % 10(3):234 - 253, 2001. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfiltdt_oddeven.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa [h(:,1),g(:,1),a,info] = wfilt_oddevena(N); [h(:,2),g(:,2)] = wfilt_oddevenb(N); [info.defaultfirst, info.defaultfirstinfo] = fwtinit('oddevenb1'); [info.defaultleaf, info.defaultleafinfo] = ... deal(info.defaultfirst,info.defaultfirstinfo); ltfat/inst/wavelets/wfbtremove.m0000664000175000017500000000734512612404256016744 0ustar susnaksusnakfunction wt = wfbtremove(d,kk,wt,varargin) %-*- texinfo -*- %@deftypefn {Function} wfbtremove %@verbatim %WFBTREMOVE Remove node(s) from the filterbank tree % Usage: wt = wbftremove(d,kk,wt); % wt = wfbtremove(d,kk,wt,'force'); % % Input parameters: % d : Level in the tree (0 - root). % kk : Index of the node at level d (starting at 0) or array % of indexes. % wt : Wavelet filterbank tree structure (as returned from % WFBTINIT). % % Output parameters: % wt : Modified filterbank structure. % % WFBTREMOVE(d,kk,wt) removes existing node at level d and index kk* % from the filterbank tree structure wt. The function fails if the % node has any children (it is not a leaf node). % % WFBTREMOVE(d,k,wt,'force') does the same, but any childern of the % node are removed too. % % Examples: % --------- % % The following example shows magnitude frequency responses of filterbank % tree before and after prunning.: % % % Create a full filterbank tree usinf 'db10' basic filterbank. % wt1 = wfbtinit({'db10',4,'full'}); % % Remove a subtree starting by root's high-pass filter. Force flag % % is used because we are removing a non-leaf node. % wt2 = wfbtremove(1,1,wt1,'force'); % % % Create identical filterbanks % [g1,a1] = wfbt2filterbank(wt1,'freq'); % [g2,a2] = wfbt2filterbank(wt2,'freq'); % % % Plot the frequency responses % subplot(2,1,1); % filterbankfreqz(g1,a1,1024,'plot','posfreq','linabs'); % subplot(2,1,2); % filterbankfreqz(g2,a2,1024,'plot','posfreq','linabs'); % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtremove.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,3,'WFBTREMOVE'); definput.flags.force = {'noforce','force'}; flags=ltfatarghelper({},definput,varargin); if isempty(wt.nodes) error('%s: Tree is empty.',mfilename); end for k=kk [nodeNo,nodeChildIdx] = depthIndex2NodeNo(d,k,wt); if(nodeNo==0) % removing root rootNo = find(wt.parents==0); % check for any children of the root if any(wt.children{rootNo}~=0) && ~flags.do_force error(['%s: Deleting root node. To delete the whole tree ',... 'use FORCE option.'],mfilename,d,k); else wt = nodeSubtreeDelete(rootNo,wt); continue; end end % check if node exists childrenIdx = find(wt.children{nodeNo}~=0); found = find(childrenIdx==nodeChildIdx,1); if(isempty(found)) error('%s: Such node (depth=%d, idx=%d) does not exist.',mfilename,d,k); end nodeToDelete = wt.children{nodeNo}(nodeChildIdx); % Check if it is a leaf (terminal node) if any(wt.children{nodeToDelete}~=0) && ~flags.do_force error(['%s: Deleting a non-leaf node. To delete whole subtree use ',... 'FORCE option.'],mfilename); else wt = nodeSubtreeDelete(nodeToDelete,wt); end end ltfat/inst/wavelets/wfbtlength.m0000664000175000017500000000353712612404256016727 0ustar susnaksusnakfunction L=wfbtlength(Ls,wt,varargin); %-*- texinfo -*- %@deftypefn {Function} wfbtlength %@verbatim %WFBTLENGTH WFBT length from signal % Usage: L=wfbtlength(Ls,wt); % % WFBTLENGTH(Ls,wt) returns the length of a Wavelet system that is long % enough to expand a signal of length Ls. Please see the help on % WFBT for an explanation of the parameter wt. % % If the returned length is longer than the signal length, the signal % will be zero-padded by WFBT to length L. % % In addition, the function accepts flags defining boundary extension % technique as in WFBT. The returned length can be longer than the % signal length only in case of 'per' (periodic extension). % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/wfbtlength.html} %@seealso{wfbt, fwt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notposint(Ls,'Ls','WFBTLENGTH'); definput.import = {'fwt'}; [flags,kv]=ltfatarghelper({},definput,varargin); % Initialize the wavelet filters structure if ~isstruct(wt) wt = wfbtinit(wt); end if(flags.do_per) a = treeSub(wt); L = filterbanklength(Ls,a); else L = Ls; end ltfat/inst/wavelets/uwfbt.m0000664000175000017500000000772612612404256015716 0ustar susnaksusnakfunction [c,info]=uwfbt(f,wt,varargin) %-*- texinfo -*- %@deftypefn {Function} uwfbt %@verbatim %UWFBT Undecimated Wavelet FilterBank Tree % Usage: c=uwfbt(f,wt); % [c,info]=uwfbt(...); % % Input parameters: % f : Input data. % wt : Wavelet Filterbank tree % % Output parameters: % c : Coefficients stored in L xM matrix. % % UWFBT(f,wt) computes redundant time (or shift) invariant % representation of the input signal f using the filterbank tree % definition in wt and using the "a-trous" algorithm. % Number of columns in c (*M*) is defined by the total number of % outputs of nodes of the tree. % % [c,info]=UWFBT(f,wt) additionally returns struct. info containing % the transform parameters. It can be conviniently used for the inverse % transform IUWFBT e.g. fhat = iUWFBT(c,info). It is also required % by the PLOTWAVELETS function. % % If f is a matrix, the transformation is applied to each of W columns % and the coefficients in c are stacked along the third dimension. % % Please see help for WFBT description of possible formats of wt and % description of frequency and natural ordering of the coefficient subbands. % % Filter scaling % -------------- % % When compared to WFBT, the subbands produced by UWFBT are % gradually more and more redundant with increasing depth in the tree. % This results in energy grow of the coefficients. There are 3 flags % defining filter scaling: % % 'sqrt' % Each filter is scaled by 1/sqrt(a), there a is the hop % factor associated with it. If the original filterbank is % orthonormal, the overall undecimated transform is a tight % frame. % This is the default. % % 'noscale' % Uses filters without scaling. % % 'scale' % Each filter is scaled by 1/a. % % If 'noscale' is used, 'scale' has to be used in IUWFBT (and vice % versa) in order to obtain a perfect reconstruction. % % Examples: % --------- % % A simple example of calling the UWFBT function using the "full decomposition" wavelet tree: % % f = greasy; % J = 8; % [c,info] = uwfbt(f,{'sym10',J,'full'}); % plotwavelets(c,info,16000,'dynrange',90); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/uwfbt.html} %@seealso{iuwfbt, wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa complainif_notenoughargs(nargin,2,'UWFBT'); definput.import = {'wfbtcommon','uwfbtcommon'}; flags=ltfatarghelper({},definput,varargin); % Initialize the wavelet tree structure wt = wfbtinit(wt,flags.forder); %% ----- step 1 : Verify f and determine its length ------- [f,Ls]=comp_sigreshape_pre(f,upper(mfilename),0); if(Ls<2) error('%s: Input signal seems not to be a vector of length > 1.',upper(mfilename)); end %% ----- step 2 : Prepare input parameters [nodesBF, rangeLoc, rangeOut] = treeBFranges(wt); nodesUps = nodesFiltUps(nodesBF,wt); %% ----- step 3 : Run computation c = comp_uwfbt(f,wt.nodes(nodesBF),nodesUps,rangeLoc,rangeOut,flags.scaling); %% ----- Optional : Fill the info struct. ----- if nargout>1 info.fname = 'uwfbt'; info.wt = wt; info.fOrder = flags.forder; info.isPacked = 0; info.scaling = flags.scaling; end ltfat/inst/wavelets/dtwfb2filterbank.m0000664000175000017500000001234412612404256020011 0ustar susnaksusnakfunction [g,a,info] = dtwfb2filterbank( dualwt, varargin) %-*- texinfo -*- %@deftypefn {Function} dtwfb2filterbank %@verbatim %DTWFB2FILTERBANK DTWFB equivalent non-iterated filterbank % Usage: [g,a] = dtwfb2filterbank(dualwt) % [g,a,info] = dtwfb2filterbank(...) % % Input parameters: % dualwt : Dual-tree wavelet filterbank specification. % % Output parameters: % g : Cell array of filters. % a : Downsampling rate for each channel. % info : Additional information. % % [g,a] = DTWFB2FILTERBANK(dualwt) constructs a set of filters g and % subsampling factors a of a non-iterated filterbank, which is % equivalent to the dual-tree wavelet filterbank defined by dualwt. % The returned parameters can be used directly in FILTERBANK and other % routines. The format of dualwt is the same as in DTWFB and % DTWFBREAL. % % The function internally calls DTWFBINIT and passes dualwt and all % additional parameters to it. % % [g,a,info] = DTWFB2FILTERBANK(...) additionally outputs a info* % struct containing equivalent filterbanks of individual real-valued % trees as fields info.g1 and info.g2. % % Additional parameters: % ---------------------- % % 'real' % By default, the function returns a filtebank equivalent to DTWFB. % The filters can be restricted to cover only the positive frequencies % and to be equivivalent to DTWFBREAL by passing a 'real' flag. % % 'freq'(default),'nat' % The filters are ordered to produce subbands in the same order as % DTWFB or DTWFBREAL with the same flag. % % Examples: % --------- % % The following two examples create a multirate identity filterbank % using a duel-tree of depth 3: % % [g,a] = dtwfb2filterbank({'qshift3',3},'real'); % filterbankfreqz(g,a,1024,'plot','linabs'); % % In the second example, the filterbank is identical to the full % wavelet tree: % % [g,a] = dtwfb2filterbank({'qshift3',3,'full'},'real'); % filterbankfreqz(g,a,1024,'plot','linabs'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/dtwfb2filterbank.html} %@seealso{dtwfbinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,1,'DTWFB2FILTERBANK'); % Search for the 'real' flag do_real = ~isempty(varargin(strcmp('real',varargin))); if do_real %Remove the 'real' flag from varargin varargin(strcmp('real',varargin)) = []; end if ~isempty(varargin(strcmp('complex',varargin))) %Remove the 'complex' flag from varargin %It is not used elsewhere anyway varargin(strcmp('complex',varargin)) = []; end % Initialize the dual-tree dtw = dtwfbinit({'strict',dualwt},varargin{:}); % Determine relation between the tree nodes [wtPath, rangeLoc, rangeOut] = treeBFranges(dtw); slice = ~cellfun(@isempty,rangeOut); % Limit to nodes with unconnected outputs wtPath = wtPath(slice); rangeLoc = rangeLoc(slice); rangeOut = rangeOut(slice); % Multirate identity filters of the first tree [g1,a] = nodesMultid(wtPath,rangeLoc,rangeOut,dtw); % Multirate identity filters of the second tree dtw.nodes = dtw.dualnodes; g2 = nodesMultid(wtPath,rangeLoc,rangeOut,dtw); if nargin>2 % Return the filterbanks before doing the alignment info.g1 = cellfun(@(gEl) setfield(gEl,'h',gEl.h/2),g1,'UniformOutput',0); info.g2 = cellfun(@(gEl) setfield(gEl,'h',gEl.h/2),g2,'UniformOutput',0); end % Align filter offsets so they can be summed for ii = 1:numel(g1) % Sanity checks assert(g1{ii}.offset<=0,sprintf('%s: Invalid wavelet filters.',upper(mfilename))); assert(g2{ii}.offset<=0,sprintf('%s: Invalid wavelet filters.',upper(mfilename))); % Insert zeros and update offsets offdiff = g1{ii}.offset-g2{ii}.offset; if offdiff>0 g1{ii}.offset = g1{ii}.offset - offdiff; g1{ii}.h = [zeros(offdiff,1);g1{ii}.h(:)]; elseif offdiff<0 g2{ii}.offset = g2{ii}.offset + offdiff; g2{ii}.h = [zeros(-offdiff,1);g2{ii}.h(:)]; end % Pad with zeros to a common length lendiff = numel(g1{ii}.h) - numel(g2{ii}.h); if lendiff~=0 maxLen = max(numel(g1{ii}.h),numel(g2{ii}.h)); g1{ii}.h = postpad(g1{ii}.h,maxLen); g2{ii}.h = postpad(g2{ii}.h,maxLen); end end % Filters covering the positive frequencies g = cellfun(@(gEl,g2El) setfield(gEl,'h',(gEl.h+1i*g2El.h)/2),g1,g2,'UniformOutput',0); % Mirror the filters when negative frequency filters are required too if ~do_real gneg = cellfun(@(gEl,g2El) setfield(gEl,'h',(gEl.h-1i*g2El.h)/2),g1,g2,'UniformOutput',0); g = [g;gneg(end:-1:1)]; a = [a;a(end:-1:1)]; end ltfat/inst/wavelets/waveletsinit.m0000664000175000017500000000164712612404256017301 0ustar susnaksusnakstatus = 1; %-*- texinfo -*- %@deftypefn {Function} waveletsinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/waveletsinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/wavelets/iuwpfbt.m0000664000175000017500000001163212612404256016236 0ustar susnaksusnakfunction f=iuwpfbt(c,par,varargin) %-*- texinfo -*- %@deftypefn {Function} iuwpfbt %@verbatim %IUWPFBT Inverse Undecimated Wavelet Packet Filterbank Tree % Usage: f=iuwpfbt(c,info); % f=iuwpfbt(c,wt); % % Input parameters: % c : Coefficients stored in L xM matrix. % info,wt : Transform parameters struct/Wavelet tree definition. % % Output parameters: % f : Reconstructed data. % % f = IUWPFBT(c,info) reconstructs signal f from the wavelet packet % coefficients c using parameters from info struct. both returned by % the UWPFBT function. % % f = IUWPFBT(c,wt) reconstructs signal f from the wavelet packet % coefficients c using the undecimated wavelet filterbank tree % described by wt. % % Please see help for WFBT description of possible formats of wt. % % Filter scaling: % --------------- % % As in UWPFBT, the function recognizes three flags controlling scaling % of filters: % % 'sqrt' % Each filter is scaled by 1/sqrt(a), there a is the hop % factor associated with it. If the original filterbank is % orthonormal, the overall undecimated transform is a tight % frame. % This is the default. % % 'noscale' % Uses filters without scaling. % % 'scale' % Each filter is scaled by 1/a. % % If 'noscale' is used, 'scale' must have been used in UWPFBT (and vice % versa) in order to obtain a perfect reconstruction. % % Scaling of intermediate outputs: % -------------------------------- % % The following flags control scaling of the intermediate coefficients. % The intermediate coefficients are outputs of nodes which ale also % inputs to nodes further in the tree. % % 'intsqrt' % Each intermediate output is scaled by 1/sqrt(2). % If the filterbank in each node is orthonormal, the overall % undecimated transform is a tight frame. % This is the default. % % 'intnoscale' % No scaling of intermediate results is used. % % 'intscale' % Each intermediate output is scaled by 1/2. % % If 'intnoscale' is used, 'intscale' must have been used in UWPFBT % (and vice versa) in order to obtain a perfect reconstruction. % % Examples: % --------- % % A simple example showing perfect reconstruction using the "full % decomposition" wavelet tree: % % f = greasy; % J = 7; % wtdef = {'db10',J,'full'}; % c = uwpfbt(f,wtdef); % fhat = iuwpfbt(c,wtdef); % % The following should give (almost) zero % norm(f-fhat) % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/wavelets/iuwpfbt.html} %@seealso{wfbt, wfbtinit} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'IUWPFBT'); if isempty(c) || ~isnumeric(c) error('%s: Unrecognized coefficient format.',upper(mfilename)); end if(isstruct(par)&&isfield(par,'fname')) complainif_toomanyargs(nargin,2,'IUWPFBT'); if ~strcmpi(par.fname,'uwpfbt') error(['%s: Wrong func name in info struct. The info parameter ',... 'was created by %s.'],upper(mfilename),par.fname); end wt = wfbtinit({'dual',par.wt},par.fOrder); scaling = par.scaling; interscaling = par.interscaling; % Use the "oposite" scaling of intermediate node outputs if strcmp(interscaling,'intscale') interscaling = 'intnoscale'; elseif strcmp(interscaling,'intnoscale') interscaling = 'intscale'; end % Use the "oposite" scaling of filters if strcmp(scaling,'scale') scaling = 'noscale'; elseif strcmp(scaling,'noscale') scaling = 'scale'; end else definput.import = {'wfbtcommon','uwfbtcommon'}; definput.flags.interscaling = {'intsqrt', 'intscale', 'intnoscale'}; [flags]=ltfatarghelper({},definput,varargin); scaling = flags.scaling; interscaling = flags.interscaling; % Initialize the wavelet tree structure wt = wfbtinit(par,flags.forder); end wtPath = fliplr(nodeBForder(0,wt)); [pOutIdxs,chOutIdxs] = treeWpBFrange(wt); nodesUps = nodesFiltUps(wtPath,wt); f = comp_iuwpfbt(c,wt.nodes(wtPath),nodesUps,pOutIdxs,chOutIdxs,scaling,... interscaling); ltfat/inst/filterbank/0000775000175000017500000000000012612404256014664 5ustar susnaksusnakltfat/inst/filterbank/filterbanksynchrosqueeze.m0000664000175000017500000001300012612404256022165 0ustar susnaksusnakfunction [cr,repos,Lc]=filterbanksynchrosqueeze(c,tgrad,var) %-*- texinfo -*- %@deftypefn {Function} filterbanksynchrosqueeze %@verbatim %FILTERBANKSYNCHROSQUEEZE Synchrosqueeze filterbank spectrogram % Usage: cr = filterbanksynchrosqueeze(c,tgrad,cfreq); % cr = filterbanksynchrosqueeze(c,tgrad,g); % [cr,repos,Lc] = filterbanksynchrosqueeze(...); % % Input parameters: % c : Coefficients to be synchrosqueezed. % tgrad : Instantaneous frequency relative to original position. % cfreq : Vector of relative center frequencies in ]-1,1]. % g : Set of filters. % Output parameters: % cr : Synchrosqueezed filterbank coefficients. % repos : Reassigned positions. % Lc : Subband lengths. % % FILTERBANKSYNCHROSQUEEZE(c,tgrad,cfreq) will reassign the values of % the filterbank coefficients c according to instantaneous frequency % tgrad. The frequency center frequencies of filters are given by cfreq. % The filterbank coefficients c are assumed to be obtained from a % non-subsampled filterbank (a=1). % % FILTERBANKSYNCHROSQUEEZE(s,tgrad,g) will do the same thing except % the center frequencies are estimated from a set of filters g. % % [sr,repos,Lc]=FILTERBANKSYNCHROSQUEEZE(...) does the same thing, but % in addition returns a vector of subband lengths Lc (Lc = cellfun(@numel,s)) % and cell array repos with sum(Lc) elements. Each element corresponds % to a single coefficient obtained by cell2mat(sr) and it is a vector % of indices identifying coefficients from cell2mat(s) assigned to % the particular time-frequency position. % % The arguments s, tgrad must be cell-arrays of vectors % of the same lengths. Arguments cfreq or g must have the % same number of elements as the cell arrays with coefficients. % % Examples: % --------- % % This example shows how to synchrosqueeze a ERB filterbank spectrogram: % % % Genrate 3 chirps half a second long % L = 22050; fs = 44100; l = 0:L-1; % % f = sin(2*pi*(l/35+(l/300).^2)) + ... % sin(2*pi*(l/10+(l/300).^2)) + ... % sin(2*pi*(l/5-(l/450).^2)); % f = 0.7*f'; % % % Create ERB filterbank % [g,~,fc]=erbfilters(fs,L,'uniform','spacing',1/12,'warped'); % % % Compute phase gradient % [tgrad,~,~,c]=filterbankphasegrad(f,g,1); % % Do the reassignment % sr=filterbanksynchrosqueeze(c,tgrad,cent_freqs(fs,fc)); % figure(1); subplot(211); % plotfilterbank(c,1,fc,fs,60); % title('ERBlet spectrogram of 3 chirps'); % subplot(212); % plotfilterbank(sr,1,fc,fs,60); % title('Synchrosqueezed ERBlet spectrogram of 3 chirps'); % % % References: % N. Holighaus, Z. Průša, and P. L. Soendergaard. Reassignment and % synchrosqueezing for general time-frequency filter banks, subsampling % and processing. Signal Processing, submitted, 2015. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbanksynchrosqueeze.html} %@seealso{filterbankphasegrad, gabreassign} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Nicki Holighaus. % Sanity checks complainif_notenoughargs(nargin,3,'FILTERBANKSYNCHROSQUEEZE'); if isempty(c) || ~iscell(c) error('%s: s should be a nonempty cell array.',upper(mfilename)); end if isempty(tgrad) || ~iscell(tgrad) || any(~cellfun(@isreal,tgrad)) error('%s: tgrad should be a nonempty cell array.',upper(mfilename)); end if any(cellfun(@(sEl,tEl) ~isvector(sEl) || ~isvector(tEl) ... , c,tgrad)) error('%s: s, tgrad, must be cell arrays of numeric vectors.',... upper(mfilename)); end if ~isequal(size(c),size(tgrad)) || ... any(cellfun(@(sEl,tEl) ~isequal(size(sEl),size(tEl)), ... c,tgrad)) error('%s: s, tgrad does not have the same format.',upper(mfilename)); end W = cellfun(@(sEl)size(sEl,2),c); if any(W>1) error('%s: Only one-channel signals are supported.',upper(mfilename)); end % Number of channels M = numel(c); % Number of elements in channels Lc = cellfun(@(sEl)size(sEl,1),c); % Check if a comply with subband lengths L = Lc; if any(abs(L-L(1))>1e-6) error(['%s: Subsampling factors and subband lengths do not ',... 'comply.'],upper(mfilename)); end L = L(1); % Determine center frequencies if isempty(var) || numel(var)~=M || ~isvector(var) && ~iscell(var) error(['%s: cfreq must be length-M numeric vector or a cell-array ',... 'containg M filters.'],upper(mfilename)); else if iscell(var) cfreq = cent_freqs(var,L); else cfreq = var; end end % Dummy fgrad fgrad = tgrad; for m=1:numel(fgrad); fgrad{m} = zeros(L,1); end a = ones(M,1); % Do the computations if nargout>1 [cr,repos] = comp_filterbankreassign(c,tgrad,fgrad,a,cfreq); else cr = comp_filterbankreassign(c,tgrad,fgrad,a,cfreq); end ltfat/inst/filterbank/filterbanklengthcoef.m0000664000175000017500000000357412612404256021233 0ustar susnaksusnakfunction L=filterbanklengthcoef(coef,a) %-*- texinfo -*- %@deftypefn {Function} filterbanklengthcoef %@verbatim %FILTERBANKLENGTHCOEF Filterbank length from coefficients % Usage: L=filterbanklengthcoef(coef,a); % % FILTERBANKLENGTHCOEF(coef,a) returns the length of a filterbank with % time-shifts a, such that the filterbank is long enough to expand the % coefficients coef. % % If instead a signal is given, call FILTERBANKLENGTH. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbanklengthcoef.html} %@seealso{filterbank, filterbanklength} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,upper(mfilename)); if iscell(coef) cl=cellfun(@(x) size(x,1),coef); else Mcoef=size(coef,2); cl=ones(1,Mcoef)*size(coef,1); end; cl=cl(:); % Make 'a' have the length of ' if isvector(a) a=bsxfun(@times,a,ones(numel(cl),1)); a=a(:); L=a.*cl; else L=a(:,1).*cl./a(:,2); end; if var(L)>0 error(['%s: Invalid set of coefficients. The product of the no. of ' ... 'coefficients and the channel time shift must be the same for ' ... 'all channels.'],upper(mfilename)); end; L=L(1); ltfat/inst/filterbank/filterbank.m0000664000175000017500000000563712612404256017176 0ustar susnaksusnakfunction c=filterbank(f,g,a,varargin) %-*- texinfo -*- %@deftypefn {Function} filterbank %@verbatim %FILTERBANK Apply filterbank % Usage: c=filterbank(f,g,a); % % FILTERBANK(f,g,a) applies the filters given in g to the signal % f. Each subband will be subsampled by a factor of a (the % hop-size). In contrast to UFILTERBANK, a can be a vector so the % hop-size can be channel-dependant. If f is a matrix, the % transformation is applied to each column. % % The filters g must be a cell-array, where each entry in the cell % array corresponds to an FIR filter. % % The output coefficients are stored a cell array. More precisely, the % n'th cell of c, c{m}, is a 2D matrix of size M(n) xW and % containing the output from the m'th channel subsampled at a rate of % a(m). c{m}(n,l) is thus the value of the coefficient for time index % n, frequency index m and signal channel l. % % The coefficients c computed from the signal f and the filterbank % with windows g_m are defined by % % L-1 % c_m(n+1) = sum f(l+1) * g_m (a(m)n-l+1) % l=0 % % where an-l is computed modulo L. % % % References: % H. Boelcskei, F. Hlawatsch, and H. G. Feichtinger. Frame-theoretic % analysis of oversampled filter banks. Signal Processing, IEEE % Transactions on, 46(12):3256-3268, 2002. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbank.html} %@seealso{ufilterbank, ifilterbank, pfilt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'pfilt'}; definput.keyvals.L=[]; [~,kv,L]=ltfatarghelper({'L'},definput,varargin); [f,Ls]=comp_sigreshape_pre(f,'FILTERBANK',0); if ~isnumeric(a) || isempty(a) error('%s: a must be non-empty numeric.',upper(mfilename)); end; if isempty(L) L=filterbanklength(Ls,a); end; [g,asan]=filterbankwin(g,a,L,'normal'); % if size(a,1)>1 % if size(a,1)~= numel(g); % error(['%s: The number of entries in "a" must match the number of ' ... % 'filters.'],upper(mfilename)); % end; % end; f=postpad(f,L); g=comp_filterbank_pre(g,asan,L,kv.crossover); c=comp_filterbank(f,g,asan); ltfat/inst/filterbank/filterbankinit.m0000664000175000017500000000165412612404256020055 0ustar susnaksusnakstatus=1; %-*- texinfo -*- %@deftypefn {Function} filterbankinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbankinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/filterbank/filterbankrealtight.m0000664000175000017500000000760412612404256021076 0ustar susnaksusnakfunction gtout=filterbankrealtight(g,a,L) %-*- texinfo -*- %@deftypefn {Function} filterbankrealtight %@verbatim %FILTERBANKREALTIGHT Tight filters of filterbank for real signals only % Usage: gt=filterbankrealtight(g,a,L); % gt=filterbankrealtight(g,a); % % filterabankrealtight(g,a,L) computes the canonical tight filters of % g for a channel subsampling rate of a (hop-size) and a system % length L. L must be compatible with subsampling rate a as % L==filterbanklength(L,a). The tight filters work only for real-valued % signals. Use this function on the common construction where the filters % in g only covers the positive frequencies. % % filterabankrealtight(g,a) does the same, but the filters must be FIR % filters, as the transform length is unspecified. L will be set to % next suitable length equal or bigger than the longest impulse response. % % The format of the filters g are described in the help of FILTERBANK. % % REMARK: The resulting system is tight for length L. In some cases, % using tight system calculated for shorter L might work but check the % reconstruction error. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbankrealtight.html} %@seealso{filterbank, ufilterbank, ifilterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FILTERBANKREALTIGHT'); if nargin<3 L = []; end [g,asan,info]=filterbankwin(g,a,L,'normal'); if isempty(L) if info.isfir % Pick shortest possible length for FIR filterbank L = filterbanklength(info.longestfilter,asan); else % Just thow an error, nothing reasonable can be done without L error(['%s: L must be specified when not working with FIR ',...' 'filterbanks.'], upper(mfilename)); end end M=info.M; if L~=filterbanklength(L,a) error(['%s: Specified length L is incompatible with the length of ' ... 'the time shifts.'],upper(mfilename)); end; % Prioritize painless over uniform algorithm if info.isuniform && info.ispainless info.isuniform = 0; end if info.isuniform % Uniform filterbank, use polyphase representation a=a(1); % Transfer functions of individual filters as cols G = filterbankfreqz(g,a,L); thisclass = class(G); N=L/a; gt=zeros(M,N,thisclass); for w=0:N-1 idx_a = mod(w-(0:a-1)*N,L)+1; idx_b = mod((0:a-1)*N-w,L)+1; Ha = G(idx_a,:); Hb = conj(G(idx_b,:)); Ha=sqrtm(Ha*Ha'+Hb*Hb')\Ha; gt(:,idx_a)=Ha.'; end; % gt was created transposed because the indexing gt(:,idx_a) % is much faster than gt(idx_a,:) gt = gt.'; gt=ifft(gt)*sqrt(a); % Matrix cols to cell elements + cast gtout = cellfun(@(gtEl) cast(gtEl,thisclass), num2cell(gt,1),... 'UniformOutput',0); else if info.ispainless gtout = comp_painlessfilterbank(g,asan,L,'tight',1); else error(['%s: The canonical dual frame of this system is not a ' ... 'filterbank. You must call an iterative ' ... 'method to perform the desired inverstion. Please see ' ... 'FRANAITER or FRSYNITER.'],upper(mfilename)); end; end; ltfat/inst/filterbank/filterbankresponse.m0000664000175000017500000000654112612404256020750 0ustar susnaksusnakfunction gf=filterbankresponse(g,a,L,varargin) %-*- texinfo -*- %@deftypefn {Function} filterbankresponse %@verbatim %FILTERBANKRESPONSE Response of filterbank as function of frequency % Usage: gf=filterbankresponse(g,a,L); % % gf=FILTERBANKRESPONSE(g,a,L) computes the total response in frequency % of a filterbank specified by g and a for a signal length of % L. This corresponds to summing up all channels. The output is a % usefull tool to investigate the behaviour of the windows, as peaks % indicate that a frequency is overrepresented in the filterbank, while % a dip indicates that it is not well represented. % % CAUTION: This function computes a sum of squares of modulus of the % frequency responses, which is also the diagonal of the Fourier % transform of the frame operator. % Use FILTERBANKFREQZ for evaluation or plotting of frequency responses % of filters. % % FILTERBANKRESPONSE(g,a,L,'real') does the same for a filterbank % intended for positive-only filterbank. % % FILTERBANKRESPONSE(g,a,L,fs) specifies the sampling rate fs. This % is only used for plotting purposes. % % gf=FILTERBANKRESPONSE(g,a,L,'individual') returns responses % in frequency of individual filters as columns of a matrix. The total % response can be obtained by gf = sum(gf,2). % % FILTERBANKRESPONSE takes the following optional parameters: % % 'fs',fs % Sampling rate, used only for plotting. % % 'complex' % Assume that the filters cover the entire frequency % range. This is the default. % % 'real' % Assume that the filters only cover the positive % frequencies (and is intended to work with real-valued % signals only). % % 'noplot' % Don't plot the response, just return it. % % 'plot' % Plot the response using PLOTFFTREAL or PLOTFFT. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbankresponse.html} %@seealso{filterbank, filterbankbounds} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . definput.flags.ctype={'complex','real'}; definput.flags.plottype={'noplot','plot'}; definput.flags.type={'total','individual'}; definput.keyvals.fs=[]; [flags,kv,fs]=ltfatarghelper({'fs'},definput,varargin); [g,asan]=filterbankwin(g,a,L,'normal'); M=numel(g); gf = zeros(L,M); for m=1:M gf(:,m) = comp_filterbankresponse(g(m),asan(m,:),L,flags.do_real); end if flags.do_total gf = sum(gf,2); end if flags.do_plot if flags.do_real plotfftreal(gf(1:floor(L/2)+1,:),fs,'lin'); else plotfft(gf,fs,'lin'); end; end; ltfat/inst/filterbank/filterbanktight.m0000664000175000017500000000744312612404256020233 0ustar susnaksusnakfunction gtout=filterbanktight(g,a,L) %-*- texinfo -*- %@deftypefn {Function} filterbanktight %@verbatim %FILTERBANKTIGHT Tight filterbank % Usage: gt=filterbanktight(g,a,L); % gt=filterbanktight(g,a); % % FILTERBANKTIGHT(g,a,L) computes the canonical tight filters of g % for a channel subsampling rate of a (hop-size) and a system length L. % L must be compatible with subsampling rate a as % L==filterbanklength(L,a). % % FILTERBANKTIGHT(g,a,L) does the same, but the filters must be FIR % filters, as the transform length is unspecified. L will be set to % next suitable length equal or bigger than the longest impulse response. % % The input and output format of the filters g are described in the % help of FILTERBANK. % % REMARK: The resulting system is tight for length L. In some cases, % using tight system calculated for shorter L might work but check the % reconstruction error. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbanktight.html} %@seealso{filterbank, filterbankdual, ufilterbank, ifilterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FILTERBANKTIGHT'); if nargin<3 L = []; end [g,asan,info]=filterbankwin(g,a,L,'normal'); if isempty(L) if info.isfir % Pick shortest possible length for FIR filterbank L = filterbanklength(info.longestfilter,asan); else % Just thow an error, nothing reasonable can be done without L error(['%s: L must be specified when not working with FIR ',...' 'filterbanks.'], upper(mfilename)); end end M=info.M; if L~=filterbanklength(L,a) error(['%s: Specified length L is incompatible with the length of ' ... 'the time shifts.'],upper(mfilename)); end; % Prioritize painless over uniform algorithm if info.isuniform && info.ispainless info.isuniform = 0; end if info.isuniform % Uniform filterbank, use polyphase representation a=a(1); % Transfer functions of individual filters as cols G = filterbankfreqz(g,a,L); thisclass = class(G); N=L/a; gt=zeros(M,N,thisclass); for w=0:N-1 idx = mod(w-(0:a-1)*N,L)+1; H = G(idx,:); [U,S,V]=svd(H,'econ'); H=U*V'; gt(:,idx)=H.'; end; % gt was created transposed because the indexing gt(:,idx_a) % is much faster than gt(idx_a,:) gt = gt.'; gt=ifft(gt)*sqrt(a); % Matrix cols to cell elements + cast gtout = cellfun(@(gtEl) cast(gtEl,thisclass), num2cell(gt,1),... 'UniformOutput',0); % All filters in gdout will be treated as FIR of length L. Convert them % to a struct with .h and .offset format. gtout = filterbankwin(gtout,a); else if info.ispainless gtout = comp_painlessfilterbank(g,asan,L,'tight',0); else error(['%s: The canonical dual frame of this system is not a ' ... 'filterbank. You must call an iterative ' ... 'method to perform the desired inverstion. Please see ' ... 'FRANAITER or FRSYNITER.'],upper(mfilename)); end; end; ltfat/inst/filterbank/filterbankdual.m0000664000175000017500000001105012612404256020026 0ustar susnaksusnakfunction gdout=filterbankdual(g,a,varargin) %-*- texinfo -*- %@deftypefn {Function} filterbankdual %@verbatim %FILTERBANKDUAL Dual filters % Usage: gd=filterbankdual(g,a,L); % gd=filterbankdual(g,a); % % % FILTERBANKDUAL(g,a,L) computes the canonical dual filters of g for a % channel subsampling rate of a (hop-size) and system length L. % L must be compatible with subsampling rate a as % L==filterbanklength(L,a). This will create a dual frame valid for % signals of length L. % % filterabankrealdual(g,a) does the same, but the filters must be FIR % filters, as the transform length is unspecified. L will be set to % next suitable length equal or bigger than the longest impulse response % such that L=filterbanklength(gl_longest,a). % % The input and output format of the filters g are described in the % help of FILTERBANK. % % In addition, the funtion recognizes a 'forcepainless' flag which % forces treating the filterbank g and a as a painless case % filterbank. % % To actually invert the output of a filterbank, use the dual filters % together with the IFILTERBANK function. % % REMARK: In general, perfect reconstruction can be obtained for signals % of length L. In some cases, using dual system calculated for shorter % L might work but check the reconstruction error. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbankdual.html} %@seealso{filterbank, ufilterbank, ifilterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FILTERBANKDUAL'); definput.import={'filterbankdual'}; [flags,~,L]=ltfatarghelper({'L'},definput,varargin); [g,asan,info]=filterbankwin(g,a,L,'normal'); if isempty(L) if info.isfir % Pick shortest possible length for FIR filterbank L = filterbanklength(info.longestfilter,asan); else % Just thow an error, nothing reasonable can be done without L error(['%s: L must be specified when not working with FIR ',...' 'filterbanks.'], upper(mfilename)); end end M=info.M; % Force usage of the painless algorithm if flags.do_forcepainless info.ispainless = 1; end % Check user defined L if L~=filterbanklength(L,a) error(['%s: Specified length L is incompatible with the length of ' ... 'the time shifts.'],upper(mfilename)); end; % Prioritize painless over uniform algorithm if both are suitable if info.isuniform && info.ispainless info.isuniform = 0; end % Factorization of frame operator to block-diagonal matrix if info.isuniform % Uniform filterbank, use polyphase representation a=a(1); % Transfer functions of individual filters as cols G = filterbankfreqz(g,a,L); N=L/a; gd=zeros(M,N,class(G)); for w=0:N-1 idx = mod(w-(0:a-1)*N,L)+1; H = G(idx,:); H=pinv(H)'; gd(:,idx)=H.'; end; % gd was created transposed because the indexing gd(:,idx_a) % is much faster than gd(idx_a,:) gd = gd.'; gd=ifft(gd)*a; % Matrix cols to cell elements + cast gdout = cellfun(@(gdEl) cast(gdEl,class(G)), num2cell(gd,1),... 'UniformOutput',0); % All filters in gdout will be treated as FIR of length L. Convert them % to a struct with .h and .offset format. gdout = filterbankwin(gdout,a); elseif info.ispainless % Factorized frame operator is diagonal. gdout = comp_painlessfilterbank(g,asan,L,'dual',0); else error(['%s: The canonical dual frame of this system is not a ' ... 'filterbank. You must either call an iterative ' ... 'method to perform the desired inverstion or transform ',... 'or transform the filterbank to uniform one. Please see ' ... 'FRANAITER or FRSYNITER for the former and ',... 'NONU2UFILTERBANK for the latter case.'],upper(mfilename)); end; ltfat/inst/filterbank/ufilterbank.m0000664000175000017500000000541012612404256017350 0ustar susnaksusnakfunction c=ufilterbank(f,g,a,varargin) %-*- texinfo -*- %@deftypefn {Function} ufilterbank %@verbatim %UFILTERBANK Apply Uniform filterbank % Usage: c=ufilterbank(f,g,a); % % UFILTERBANK(f,g,a) applies the filter given in g to the signal % f. Each subband will be subsampled by a factor of a (the % hop-size). If f is a matrix, the transformation is applied to each % column. % % The filters g must be a cell-array, where each entry in the cell % array corresponds to a filter. % % If f is a single vector, then the output will be a matrix, where each % column in f is filtered by the corresponding filter in g. If f is % a matrix, the output will be 3-dimensional, and the third dimension will % correspond to the columns of the input signal. % % The coefficients c computed from the signal f and the filterbank % with windows g_m are defined by % % L-1 % c(n+1,m+1) = sum f(l+1) * g_m (an-l+1) % l=0 % % % % References: % H. Boelcskei, F. Hlawatsch, and H. G. Feichtinger. Frame-theoretic % analysis of oversampled filter banks. Signal Processing, IEEE % Transactions on, 46(12):3256-3268, 2002. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/ufilterbank.html} %@seealso{ifilterbank, filterbankdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; if isempty(a) || ~all(a(:,1)==a(1)) ... || ~isnumeric(a) || any(rem(a(:),1)~=0) error(['%s: a has to be either scalar or a numel(g) vector of equal',... ' integers.'], upper(mfilename)); end definput.import={'pfilt'}; definput.keyvals.L=[]; [~,kv,L]=ltfatarghelper({'L'},definput,varargin); [f,Ls,W]=comp_sigreshape_pre(f,'UFILTERBANK',0); a=a(1); if isempty(L) L=filterbanklength(Ls,a); end; [g,asan]=filterbankwin(g,a,L,'normal'); M=numel(g); N=L/a; f=postpad(f,L); g = comp_filterbank_pre(g,asan,L,kv.crossover); ctmp=comp_filterbank(f,g,asan); c=zeros(N,M,W,assert_classname(f)); for m=1:M c(:,m,:)=ctmp{m}; end; ltfat/inst/filterbank/plotfilterbank.m0000664000175000017500000001610012612404256020060 0ustar susnaksusnakfunction C = plotfilterbank(coef,a,varargin) %-*- texinfo -*- %@deftypefn {Function} plotfilterbank %@verbatim %PLOTFILTERBANK Plot filterbank and ufilterbank coefficients % Usage: plotfilterbank(coef,a); % plotfilterbank(coef,a,fc); % plotfilterbank(coef,a,fc,fs); % plotfilterbank(coef,a,fc,fs,dynrange); % % PLOTFILTERBANK(coef,a) plots filterbank coefficients coef obtained from % either the FILTERBANK or UFILTERBANK functions. The coefficients must % have been produced with a time-shift of a. For more details on the % format of the variables coef and a, see the help of the FILTERBANK % or UFILTERBANK functions. % % PLOTFILTERBANK(coef,a,fc) makes it possible to specify the center % frequency for each channel in the vector fc. % % PLOTFILTERBANK(coef,a,fc,fs) does the same assuming a sampling rate of % fs Hz of the original signal. % % PLOTFILTERBANK(coef,a,fc,fs,dynrange) makes it possible to specify % the dynamic range of the coefficients. % % C=PLOTFILTERBANK(...) returns the processed image data used in the % plotting. Inputting this data directly to imagesc or similar % functions will create the plot. This is usefull for custom % post-processing of the image data. % % PLOTFILTERBANK supports all the optional parameters of TFPLOT. Please % see the help of TFPLOT for an exhaustive list. % % In addition to the flags and key/values in TFPLOT, PLOTFILTERBANK % supports the following optional arguments: % % 'fc',fc Centre frequencies of the channels. fc must be a vector with % the length equal to the number of channels. The % default value of [] means to plot the channel % no. instead of its frequency. % % 'ntickpos',n Number of tick positions along the y-axis. The % position of the ticks are determined automatically. % Default value is 10. % % 'tick',t Array of tick positions on the y-axis. Use this % option to specify the tick position manually. % % 'audtick' Use ticks suitable for visualizing an auditory % filterbank. Same as 'tick',[0,100,250,500,1000,...]. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/plotfilterbank.html} %@seealso{filterbank, ufilterbank, tfplot, sgram} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'plotfilterbank','tfplot','ltfattranslate'}; definput.keyvals.xres=800; [flags,kv]=ltfatarghelper({'fc','fs','dynrange'},definput,varargin); C = coef; if iscell(C) M=numel(C); a = comp_filterbank_a(a,M); if all(rem(a(:,1),1)==0) && any(a(:,2)~=1) % Well behaved fractional case % a(:,1) = L % a(:,2) = cellfun(@(cEl) size(cEl,1),c); L = a(1); else % Non-fractional case and non-integer hop factors L=a(1)*size(C{1},1); % Sanity check assert(rem(L,1)<1e-3,sprintf('%s: Invalid hop size.',upper(mfilename))); end N=kv.xres; coef2=zeros(M,N); for ii=1:M row=C{ii}; if numel(row)==1 coef2(ii,:) = row; continue; end coef2(ii,:)=interp1(linspace(0,1,numel(row)),row,... linspace(0,1,N),'nearest'); end; C=coef2; delta_t=L/N; else a=a(1); Nc=size(C,1); N=kv.xres; M=size(C,2); C=interp1(linspace(0,1,Nc),C,... linspace(0,1,N),'nearest'); C=C.'; delta_t=a*Nc/N; end; % Freq. pos is just number of the channel. yr=1:M; if size(C,3)>1 error('Input is multidimensional.'); end; % Apply transformation to coefficients. if flags.do_db C=20*log10(abs(C)+realmin); end; if flags.do_dbsq C=10*log10(abs(C)+realmin); end; if flags.do_linsq C=abs(C).^2; end; if flags.do_linabs C=abs(C); end; if flags.do_lin if ~isreal(C) error(['Complex valued input cannot be plotted using the "lin" flag.',... 'Please use the "linsq" or "linabs" flag.']); end; end; % 'dynrange' parameter is handled by converting it into clim % clim overrides dynrange, so do nothing if clim is already specified if ~isempty(kv.dynrange) && isempty(kv.clim) maxclim=max(C(:)); kv.clim=[maxclim-kv.dynrange,maxclim]; end; % Handle clim by thresholding and cutting if ~isempty(kv.clim) C(Ckv.clim(2))=kv.clim(2); end; if flags.do_tc xr=(-floor(N/2):floor((N-1)/2))*a; else xr=(0:N-1)*delta_t; end; if ~isempty(kv.fs) xr=xr/kv.fs; end; switch(flags.plottype) case 'image' % Call imagesc explicitly with clim. This is necessary for the % situations where the data (is by itself limited (from above or % below) to within the specified range. Setting clim explicitly % avoids the colormap moves in the top or bottom. if isempty(kv.clim) imagesc(xr,yr,C); else imagesc(xr,yr,C,kv.clim); end; case 'contour' contour(xr,yr,C); case 'surf' surf(xr,yr,C,'EdgeColor','none'); case 'pcolor' pcolor(xr,yr,C); end; if flags.do_colorbar colorbar; end; axis('xy'); if ~isempty(kv.fs) xlabel(sprintf('%s (s)',kv.time),'fontsize',kv.fontsize); else xlabel(sprintf('%s (%s)',kv.time,kv.samples),'fontsize',kv.fontsize); end; if isempty(kv.fc) ylabel('Channel No.','fontsize',kv.fontsize); else if isempty(kv.tick) tickpos=linspace(1,M,kv.ntickpos); tick=spline(1:M,kv.fc,tickpos); set(gca,'YTick',tickpos); set(gca,'YTickLabel',num2str(tick(:),3)); else nlarge=1000; tick=kv.tick; % Create a crude inverse mapping to determine the positions of the % ticks. Include half a channel in each direction, because it is % possible to display a tick mark all the way to the edge of the % plot. manyticks=spline(1:M,kv.fc,linspace(0.5,M+0.5,nlarge)); % Keep only ticks <= than highest frequency+.5*bandwidth tick=tick(tick<=manyticks(end)); % Keep only ticks >= lowest frequency-.5*bandwidth tick=tick(tick>=manyticks(1)); nticks=length(tick); tickpos=zeros(nticks,1); for ii=1:nticks jj=find(manyticks>=tick(ii)); tickpos(ii)=jj(1)/nlarge*M; end; set(gca,'YTick',tickpos); set(gca,'YTickLabel',num2str(tick(:))); end; ylabel(sprintf('%s (Hz)',kv.frequency),'fontsize',kv.fontsize); end; % To avoid printing all the coefficients in the command window when a % semicolon is forgotten if nargout < 1 clear C; end ltfat/inst/filterbank/ierblett.m0000664000175000017500000000503412612404256016656 0ustar susnaksusnakfunction fr = ierblett(c,g,shift,Ls,dual) %-*- texinfo -*- %@deftypefn {Function} ierblett %@verbatim %IERBLETT ERBlet non-stationary Gabor synthesis % Usage: fr = ierblett(c,g,shift,Ls,dual) % fr = ierblett(c,g,shift,Ls) % fr = ierblett(c,g,shift) % % Input parameters: % c : Transform coefficients (matrix or cell array) % g : Cell array of Fourier transforms of the analysis % windows % shift : Vector of frequency shifts % Ls : Original signal length (in samples) % dual : Synthesize with the dual frame % Output parameters: % fr : Synthesized signal (Channels are stored in the % columns) % Given the cell array c of non-stationary Gabor coefficients, and a % set of filters g and frequency shifts shift this function computes % the corresponding ERBlet synthesis. % % If dual is set to 1 (default), an attempt is made to compute the % canonical dual frame for the system given by g, shift and the size % of the vectors in c. This provides perfect reconstruction in the % painless case, see the references for more information. % % % References: % T. Necciari, P. Balazs, N. Holighaus, and P. L. Soendergaard. The ERBlet % transform: An auditory-based time-frequency representation with perfect % reconstruction. In Proceedings of the 38th International Conference on % Acoustics, Speech, and Signal Processing (ICASSP 2013), pages 498-502, % Vancouver, Canada, May 2013. IEEE. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/ierblett.html} %@seealso{erblett} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Nicki Holighaus % Date: 10.04.13 if ~exist('dual','var') dual = 1; end fr = comp_insdgfb(c,g,shift,Ls,dual); ltfat/inst/filterbank/ifilterbank.m0000664000175000017500000000530712612404256017341 0ustar susnaksusnakfunction [f,Ls]=ifilterbank(c,g,a,varargin); %-*- texinfo -*- %@deftypefn {Function} ifilterbank %@verbatim %IFILTERBANK Filter bank inversion % Usage: f=ifilterbank(c,g,a); % % IFILTERBANK(c,g,a) synthesizes a signal f from the coefficients c* % using the filters stored in g for a channel subsampling rate of a (the % hop-size). The coefficients has to be in the format returned by % either FILTERBANK or UFILTERBANK. % % The filter format for g is the same as for FILTERBANK. % % If perfect reconstruction is desired, the filters must be the duals % of the filters used to generate the coefficients. See the help on % FILTERBANKDUAL. % % % References: % H. Boelcskei, F. Hlawatsch, and H. G. Feichtinger. Frame-theoretic % analysis of oversampled filter banks. Signal Processing, IEEE % Transactions on, 46(12):3256-3268, 2002. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/ifilterbank.html} %@seealso{filterbank, ufilterbank, filterbankdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<3 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'pfilt'}; definput.keyvals.Ls=[]; [flags,kv,Ls]=ltfatarghelper({'Ls'},definput,varargin); L=filterbanklengthcoef(c,a); if iscell(c) M=numel(c); else M=size(c,2); end; [g,asan]=filterbankwin(g,a,L,'normal'); if numel(g)~=M error(['%s: Number of filters must be equal to the number of channels ' ... 'of coefficients.'],upper(mfilename)); end if size(a,1)>1 if size(a,1)~=M error(['%s: The number of entries in "a" must match the number of ' ... 'filters.'],upper(mfilename)); end; end; g = comp_filterbank_pre(g,asan,L,kv.crossover); % Handle ufilterbank output format here if isnumeric(c) ctmp = c; c = cell(M,1); for m=1:M c{m}=squeeze(ctmp(:,m,:)); end; end f = comp_ifilterbank(c,g,asan,L); % Cut or extend f to the correct length, if desired. if ~isempty(Ls) f=postpad(f,Ls); else Ls=L; end; ltfat/inst/filterbank/cqt.m0000664000175000017500000002333412612404256015636 0ustar susnaksusnakfunction [c,Ls,g,shift,M] = cqt(f,fmin,fmax,bins,fs,varargin) %-*- texinfo -*- %@deftypefn {Function} cqt %@verbatim %CQT Constant-Q non-stationary Gabor filterbank % Usage: [c,Ls,g,shift,M] = cqt(f,fmin,fmax,bins,fs,M) % [c,Ls,g,shift,M] = cqt(f,fmin,fmax,bins,fs) % [c,Ls,g,shift] = cqt(...) % [c,Ls] = cqt(...) % c = cqt(...) % % Input parameters: % f : The signal to be analyzed (For multichannel % signals, input should be a matrix which each % column storing a channel of the signal). % fmin : Minimum frequency (in Hz) % fmax : Maximum frequency (in Hz) % bins : Vector consisting of the number of bins per octave % fs : Sampling rate (in Hz) % M : Number of time channels (optional) % If M is constant, the output is converted to a % matrix % Output parameters: % c : Transform coefficients (matrix or cell array) % Ls : Original signal length (in samples) % g : Cell array of Fourier transforms of the analysis % windows % shift : Vector of frequency shifts % M : Number of time channels % % This function computes a constant-Q transform via non-stationary Gabor % filterbanks. Given the signal f, the constant-Q parameters fmin, % fmax and bins, as well as the sampling rate fs of f, the % corresponding constant-Q coefficients c are given as output. For % reconstruction, the length of f and the filterbank parameters can % be returned also. % % The transform produces phase-locked coefficients in the % sense that each filter is considered to be centered at % 0 and the signal itself is modulated accordingly. % % Optional input arguments arguments can be supplied like this: % % cqt(f,fmin,fmax,bins,fs,'min_win',min_win) % % The arguments must be character strings followed by an % argument: % % 'min_win',min_win Minimum admissible window length % (in samples) % % 'Qvar',Qvar Bandwidth variation factor % % 'M_fac',M_fac Number of time channels are rounded to % multiples of this % % 'winfun',winfun Filter prototype (see FIRWIN for available % filters) % 'fractional' Allow fractional shifts and bandwidths % % % Example: % -------- % % The following example shows analysis and synthesis with CQT and ICQT: % % [f,fs] = gspi; % fmin = 200; % fmax = fs/2; % [c,Ls,g,shift,M] = cqt(f,fmin,fmax,48,fs); % fr = icqt(c,g,shift,Ls); % rel_err = norm(f-fr)/norm(f); % plotfilterbank(c,Ls./M,[],fs,'dynrange',60); % % % References: % N. Holighaus, M. Doerfler, G. A. Velasco, and T. Grill. A framework for % invertible, real-time constant-Q transforms. IEEE Transactions on % Audio, Speech and Language Processing, 21(4):775 -785, 2013. % % G. A. Velasco, N. Holighaus, M. Doerfler, and T. Grill. Constructing an % invertible constant-Q transform with non-stationary Gabor frames. % Proceedings of DAFX11, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/cqt.html} %@seealso{icqt, firwin} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Authors: Nicki Holighaus, Gino Velasco % Date: 10.04.13 %% Check input arguments if nargin < 5 error('Not enough input arguments'); end [f,Ls,W]=comp_sigreshape_pre(f,upper(mfilename),0); % Set defaults definput.keyvals.usrM = []; definput.keyvals.Qvar = 1; definput.keyvals.M_fac = 1; definput.keyvals.min_win = 4; definput.keyvals.winfun = 'hann'; definput.flags.fractype = {'nofractional','fractional'}; % Check input arguments [flags,keyvals,usrM]=ltfatarghelper({'usrM'},definput,varargin); %% Create the CQ-NSGT dictionary % Nyquist frequency nf = fs/2; % Limit fmax if fmax > nf fmax = nf; end % Number of octaves b = ceil(log2(fmax/fmin))+1; if length(bins) == 1; % Constant number of bins in each octave bins = bins*ones(b,1); elseif length(bins) < b % Pick bins for octaves for which it was not specified. bins = bins(:); bins( bins<=0 ) = 1; bins = [bins ; bins(end)*ones(b-length(bins),1)]; end % Prepare frequency centers in Hz fbas = zeros(sum(bins),1); ll = 0; for kk = 1:length(bins); fbas(ll+(1:bins(kk))) = ... fmin*2.^(((kk-1)*bins(kk):(kk*bins(kk)-1)).'/bins(kk)); ll = ll+bins(kk); end % Get rid of filters with frequency centers >=fmax and nf temp = find(fbas>=fmax,1); if fbas(temp) >= nf fbas = fbas(1:temp-1); else fbas = fbas(1:temp); end Lfbas = length(fbas); % Add filter at zero and nf frequencies fbas = [0;fbas;nf]; % Mirror other filters % Length of fbas is now 2*(Lfbas+1) fbas(Lfbas+3:2*(Lfbas+1)) = fs-fbas(Lfbas+1:-1:2); % Convert frequency to samples fbas = fbas*(Ls/fs); % Set bandwidths bw = zeros(2*Lfbas+2,1); % Bandwidth of the low-pass filter around 0 bw(1) = 2*fmin*(Ls/fs); bw(2) = (fbas(2))*(2^(1/bins(1))-2^(-1/bins(1))); for k = [3:Lfbas , Lfbas+2] bw(k) = (fbas(k+1)-fbas(k-1)); end % Bandwidth of last filter before the one at the nf bw(Lfbas+1) = (fbas(Lfbas+1))*(2^(1/bins(end))-2^(-1/bins(end))); % Mirror bandwidths bw(Lfbas+3:2*Lfbas+2) = bw(Lfbas+1:-1:2); % Make frequency centers integers posit = zeros(size(fbas)); posit(1:Lfbas+2) = floor(fbas(1:Lfbas+2)); posit(Lfbas+3:end) = ceil(fbas(Lfbas+3:end)); % Keeping center frequency and changing bandwidth => Q=fbas/bw bw = keyvals.Qvar*bw; % M - number of coefficients in output bands (number of time channels). if flags.do_fractional % Be pedantic about center frequencies by % sub-sample precision positioning of the frequency window. warning(['Fractional sampling might lead to a warning when ', ... 'computing the dual system']); fprintf(''); corr_shift = fbas-posit; M = ceil(bw+1); else % Using the integer frequency window position. bw = round(bw); M = bw; end % Do not allow lower bandwidth than keyvals.min_win for ii = 1:numel(bw) if bw(ii) < keyvals.min_win; bw(ii) = keyvals.min_win; M(ii) = bw(ii); end end if flags.do_fractional % Generate windows, while providing the x values. % x - shift correction % y - window length % z - 'safe' window length g = arrayfun(@(x,y,z) ... firwin(keyvals.winfun,([0:ceil(z/2),-floor(z/2):-1]'-x)/y)/sqrt(y),corr_shift,... bw,M,'UniformOutput',0); else % Generate window, normalize to g = arrayfun(@(x) firwin(keyvals.winfun,x)/sqrt(x),... bw,'UniformOutput',0); end % keyvals.M_fac is granularity of output bands lengths % Round M to next integer multiple of keyvals.M_fac M = keyvals.M_fac*ceil(M/keyvals.M_fac); % Middle-pad windows at 0 and Nyquist frequencies % with constant region (tapering window) if the bandwidth is larger than % of the next in line window. for kk = [1,Lfbas+2] if M(kk) > M(kk+1); g{kk} = ones(M(kk),1); g{kk}((floor(M(kk)/2)-floor(M(kk+1)/2)+1):(floor(M(kk)/2)+... ceil(M(kk+1)/2))) = firwin('hann',M(kk+1)); g{kk} = g{kk}/sqrt(M(kk)); end end % The number of frequency channels N = length(posit); % Handle the user defined output bands lengths. if ~isempty(usrM) if numel(usrM) == 1 M = usrM*ones(N,1); elseif numel(usrM)==N M = usrM; else error(['%s: Number of enties of parameter M does not comply ',... 'with the number of frequency channels.'],upper(mfilename)); end end %% The CQ-NSG transform % some preparation f = fft(f); c=cell(N,1); % Initialisation of the result % Obtain input type ftype = assert_classname(f); % The actual transform for ii = 1:N Lg = length(g{ii}); idx = [ceil(Lg/2)+1:Lg,1:ceil(Lg/2)]; win_range = mod(posit(ii)+(-floor(Lg/2):ceil(Lg/2)-1),Ls)+1; if M(ii) < Lg % if the number of frequency channels is too small, % aliasing is introduced col = ceil(Lg/M(ii)); temp = zeros(col*M(ii),W,ftype); temp([end-floor(Lg/2)+1:end,1:ceil(Lg/2)],:) = ... bsxfun(@times,f(win_range,:),g{ii}(idx)); temp = reshape(temp,M(ii),col,W); c{ii} = squeeze(ifft(sum(temp,2))); % Using c = cellfun(@(x) squeeze(ifft(x)),c,'UniformOutput',0); % outside the loop instead does not provide speedup; instead it is % slower in most cases. else temp = zeros(M(ii),W,ftype); temp([end-floor(Lg/2)+1:end,1:ceil(Lg/2)],:) = ... bsxfun(@times,f(win_range,:),g{ii}(idx)); c{ii} = ifft(temp); end end % Reshape to a matrix if coefficient bands have uniform lengths. % This is maybe too confuzing. if max(M) == min(M) c = cell2mat(c); c = reshape(c,M(1),N,W); end % Return relative shifts between filters in frequency in samples % This does not correctly handle the fractional frequency positioning. if nargout > 3 shift = [mod(-posit(end),Ls); diff(posit)]; end ltfat/inst/filterbank/filterbankphasegrad.m0000664000175000017500000001067012612404256021046 0ustar susnaksusnakfunction [tgrad,fgrad,s,c]=filterbankphasegrad(f,g,a,L,minlvl) %-*- texinfo -*- %@deftypefn {Function} filterbankphasegrad %@verbatim %FILTERBANKPHASEGRAD Phase gradient of a filterbank representation % Usage: [tgrad,fgrad,s,c] = filterbankphasegrad(f,g,a,L,minlvl); % [tgrad,fgrad,s,c] = filterbankphasegrad(f,g,a,L); % [tgrad,fgrad,s,c] = filterbankphasegrad(f,g,a,minlvl); % [tgrad,fgrad,s,c] = filterbankphasegrad(f,g,a); % [tgrad,fgrad,s] = filterbankphasegrad(...) % [tgrad,fgrad] = filterbankphasegrad(...) % % Input parameters: % f : Signal to be analyzed. % g : Cell array of filters % a : Vector of time steps. % L : Signal length (optional). % minlvl: Regularization parameter (optional, required < 1). % Output parameters: % tgrad : Instantaneous frequency relative to original position. % fgrad : Group delay relative to original position. % cs : Filterbank spectrogram. % c : Filterbank coefficients. % % [tgrad,fgrad,s,c] = FILTERBANKPHASEGRAD(f,g,a,L) computes the group % delay fgrad and instantaneous frequency tgrad of the filterbank % spectrogram s obtained from the signal f and filterbank % parameters g and a. Both quantities are specified relative to the % original coefficient position. tgrad is given in samples, while % fgrad is given as values on the unit circle, easily converted into % relative frequencies by log(tgrad)/(pi*i). % This routine uses the equivalence of the filterbank coefficients in % each channel with coefficients obtained from an STFT obtained with a % certain window (possibly different for every channel). As a consequence % of this equivalence, the formulas derived in the reference apply. % % References: % F. Auger and P. Flandrin. Improving the readability of time-frequency % and time-scale representations by the reassignment method. IEEE Trans. % Signal Process., 43(5):1068-1089, 1995. % % N. Holighaus, Z. Průša, and P. L. Soendergaard. Reassignment and % synchrosqueezing for general time-frequency filter banks, subsampling % and processing. Signal Processing, submitted, 2015. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbankphasegrad.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Nicki Holighaus. complainif_notenoughargs(nargin,3,'FILTERBANKPHASEGRAD'); % Reshape input signal [f,~,W]=comp_sigreshape_pre(f,'FILTERBANKPHASEGRAD',0); Ls = size(f,1); if W>1 error('%s: Only one-channel signals supported.',upper(mfilename)); end if nargin < 5 if nargin < 4 L = filterbanklength(Ls,a); minlvl = eps; else if ~(isscalar(L) && isnumeric(L) ) && L>0 error('%s: Fourth argument shoud be a positive number.',... upper(mfilename)); end if L >= 1 minlvl = eps; else minlvl = L; end; end end; complainif_notposint(L,'L','FILTERBANKPHASEGRAD'); Luser = filterbanklength(L,a); if Luser~=L error(['%s: Incorrect transform length L=%i specified. ', ... 'Next valid length is L=%i. See the help of ',... 'FILTERBANKLENGTH for the requirements.'],... upper(mfilename),L,Luser); end % Unify format of coefficients [g,asan]=filterbankwin(g,a,L,'normal'); % Precompute filters [gh, gd, g] = comp_phasegradfilters(g, asan, L); f=postpad(f,L); c=comp_filterbank(f,g,asan); % Compute filterbank coefficients with frequency weighted window ch=comp_filterbank(f,gh,asan); % Compute filterbank coefficients with time weighted window cd=comp_filterbank(f,gd,asan); % Run the computation [tgrad,fgrad,s] = comp_filterbankphasegrad(c,ch,cd,L,minlvl); ltfat/inst/filterbank/filterbankbounds.m0000664000175000017500000000746412612404256020411 0ustar susnaksusnakfunction [AF,BF]=filterbankbounds(g,a,L) %-*- texinfo -*- %@deftypefn {Function} filterbankbounds %@verbatim %FILTERBANKBOUNDS Frame bounds of a filterbank % Usage: fcond=filterbankbounds(g,a,L); % [A,B]=filterbankbounds(g,a,L); % [...]=filterbankbounds(g,a); % % FILTERBANKBOUNDS(g,a,L) calculates the ratio B/A of the frame bounds % of the filterbank specified by g and a for a system of length % L. The ratio is a measure of the stability of the system. % % FILTERBANKBOUNDS(g,a) does the same, but the filters must be FIR % filters, as the transform length is unspecified. L will be set to % next suitable length equal or bigger than the longest impulse response % such that L=filterbanklength(gl_longest,a). % % [A,B]=FILTERBANKBOUNDS(...) returns the lower and upper frame bounds % explicitly. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbankbounds.html} %@seealso{filterbank, filterbankdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FILTERBANKBOUNDS'); if nargin<3 L = []; end [g,asan,info]=filterbankwin(g,a,L,'normal'); if isempty(L) if info.isfir % Pick shortest possible length for FIR filterbank L = filterbanklength(info.longestfilter,asan); else % Just thow an error, nothing reasonable can be done without L error(['%s: L must be specified when not working with FIR ',...' 'filterbanks.'], upper(mfilename)); end end M=info.M; if L~=filterbanklength(L,asan) error(['%s: Specified length L is incompatible with the length of ' ... 'the time shifts.'],upper(mfilename)); end; AF=Inf; BF=0; % Prioritize painless over uniform algorithm if info.isuniform && info.ispainless info.isuniform = 0; end if info.isuniform % Uniform filterbank, use polyphase representation a=a(1); N=L/a; % G1 is done this way just so that we can determine the data type. G1=comp_transferfunction(g{1},L); thisclass=assert_classname(G1); G=zeros(L,M,thisclass); G(:,1)=G1; for ii=2:M G(:,ii)=cast(comp_transferfunction(g{ii},L),thisclass); end; %H=zeros(a,M,thisclass); for w=0:N-1 idx = mod(w-(0:a-1)*N,L)+1; H = G(idx,:); % A 'real' is needed here, because the matrices are known to be % Hermitian, but sometimes Matlab/Octave does not recognize this. work=real(eig(H*H')); AF=min(AF,min(work)); BF=max(BF,max(work)); end; AF=AF/a; BF=BF/a; else if info.ispainless % Compute the diagonal of the frame operator. f=comp_filterbankresponse(g,asan,L,0); AF=min(f); BF=max(f); else error(['%s: There is no fast method to find the frame bounds of ' ... 'this filterbank as it is neither uniform nor painless. ' ... 'Please see FRAMEBOUNDS for an iterative method that can ' ... 'solve the problem.'],upper(mfilename)); end; end; if nargout<2 % Avoid the potential warning about division by zero. if AF==0 AF=Inf; else AF=BF/AF; end; end; ltfat/inst/filterbank/audfilters.m0000664000175000017500000003741212612404256017213 0ustar susnaksusnakfunction [g,a,fc,L]=audfilters(fs,Ls,varargin) %-*- texinfo -*- %@deftypefn {Function} audfilters %@verbatim % AUDFILTERS generates AUD-spaced filters % Usage: [g,a,fc,L]=audfilters(fs,Ls); % [g,a,fc,L]=audfilters(fs,Ls,...); % % Input parameters: % fs : Sampling rate (in Hz). % Ls : Signal length. % Output parameters: % g : Cell array of filters. % a : Downsampling rate for each channel. % fc : Center frequency of each channel. % L : Next admissible length suitable for the generated filters. % % [g,a,fc,L]=AUDFILTERS(fs,Ls) constructs a set of filters g that are % equidistantly spaced on a perceptual frequency scale (see FREQTOAUD) between % 0 and the Nyquist frequency and with bandwidths that are proportional to the critical % bandwidth of the auditory filters AUDFILTBW. The filters are intended to work % with signals with a sampling rate of fs. The signal length Ls is mandatory, % since we need to avoid too narrow frequency windows. % % By default the ERB scale is chosen but other frequency scales are % possible. See 'freqtoaud' for all available options. The most scales % are 'erb', 'bark', and 'mel'. % % By default, a Hann window on the frequency side is chosen, but the % window can be changed by passing any of the window types from % FIRWIN as an optional parameter. % Run getfield(getfield(arg_firwin,'flags'),'wintype') to get a cell % array of window types available. % % The integer downsampling rates of the channels must all divide the % signal length, FILTERBANK will only work for input signal lengths % being multiples of the least common multiple of the downsampling rates. % See the help of FILTERBANKLENGTH. % The fractional downsampling rates restrict the filterbank to a single % length L=Ls. % % [g,a,fc,L]=AUDFILTERS(fs,Ls,flow,figh) constructs a set of filters that are % equidistantly spaced between flow and fhigh. In that case two % additional filters will be positioned at the 0 and Nyquist frequencies % so as to cover the full spectrum. The values of flow and fhigh can % be instead specified using a key/value pair as: % % [g,a,fc,L]=audfilters(fs,Ls,...,'flow',flow,'fhigh',figh) % % [g,a,fc,L]=AUDFILTERS(...,'regsampling') constructs a non-uniform % filterbank with integer subsampling factors. % % [g,a,fc,L]=AUDFILTERS(...,'uniform') constructs a uniform filterbank % where the integer downsampling rate is the same for all the channels. This % results in most redundant representation which produces nice plots. % % [g,a,fc,L]=AUDFILTERS(...,'fractional') constructs a filterbank with % fractional downsampling rates a. % This results in the least redundant system. % % [g,a,fc,L]=AUDFILTERS(...,'fractionaluniform') constructs a filterbank with % fractional downsampling rates a, which are uniform for all filters % except the "filling" low-pass and high-pass filters can have different % fractional downsampling rates. This is usefull when uniform subsampling % and low redundancy at the same time are desirable. % % AUDFILTERS accepts the following optional parameters: % % 'spacing',b Specify the spacing in Ecritical bandwidth (ERB or Bark % depending on the scale) between the filters. Default value % is b=1. % % 'M',M Specify the total number of filters between 'flow' and 'fhigh', M. % If this parameter is specified, it overwrites the % 'spacing' parameter. % % 'redmul',redmul Redundancy multiplier. Increasing the value of this % will make the system more redundant by lowering the % channel downsampling rates. It is only used if the % filterbank is a non-uniform filterbank. Default % value is 1. If the value is less than one, the % system may no longer be painless. % % 'symmetric' Create filters that are symmetric around their centre % frequency. This is the default.'sqrtsquare','sqrtrect' % % 'warped' Create asymmetric filters that are asymmetric on the % ERB scale. The warping does not work with other % scales yet. % % 'complex' Construct a filterbank that covers the entire % frequency range. % % % 'bwmul',bwmul Bandwidth of the filters relative to the bandwidth % returned by AUDFILTBW. Default is bwmul=1. % % 'min_win',min_win Minimum admissible window length (in samples). % Default is 4. This restrict the windows not % to become too narrow when L is low. % % Examples: % --------- % % In the first example, we construct a highly redudant uniform % filterbank on the ERB scale and visualize the result: % % [f,fs]=greasy; % Get the test signal % [g,a,fc,L]=audfilters(fs,length(f),'uniform','M',100); % c=filterbank(f,g,a); % plotfilterbank(c,a,fc,fs,90,'audtick'); % % In the second example, we construct a non-uniform filterbank with % fractional sampling that works for this particular signal length, and % test the reconstruction. The plot displays the response of the % filterbank to verify that the filters are well-behaved both on a % normal and an ERB-scale. The second plot shows frequency responses of % filters used for analysis (top) and synthesis (bottom). : % % [f,fs]=greasy; % Get the test signal % L=length(f); % [g,a,fc,L]=audfilters(fs,L,'fractional'); % c=filterbank(f,{'realdual',g},a); % r=2*real(ifilterbank(c,g,a)); % norm(f-r) % % % Plot the response % figure(1); % subplot(2,1,1); % R=filterbankresponse(g,a,L,fs,'real','plot'); % % subplot(2,1,2); % semiaudplot(linspace(0,fs/2,L/2+1),R(1:L/2+1)); % ylabel('Magnitude'); % % % Plot frequency responses of individual filters % gd=filterbankrealdual(g,a,L); % figure(2); % subplot(2,1,1); % filterbankfreqz(gd,a,L,fs,'plot','linabs','posfreq'); % % subplot(2,1,2); % filterbankfreqz(g,a,L,fs,'plot','linabs','posfreq'); % % % % References: % T. Necciari, P. Balazs, N. Holighaus, and P. L. Soendergaard. The ERBlet % transform: An auditory-based time-frequency representation with perfect % reconstruction. In Proceedings of the 38th International Conference on % Acoustics, Speech, and Signal Processing (ICASSP 2013), pages 498-502, % Vancouver, Canada, May 2013. IEEE. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/audfilters.html} %@seealso{erbfilters, filterbank, ufilterbank, ifilterbank, ceil23} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Authors: Peter L. Soendergaard (original 'erbfilters' function) % Modified by: Thibaud Necciari % Date: 30.09.15 %% ------ Checking of input parameters --------- if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; complainif_notposint(fs,'fs'); complainif_notposint(Ls,'Ls'); definput.import={'freqtoaud','firwin'}; definput.keyvals.M=[]; definput.keyvals.bwmul=1; definput.keyvals.redmul=1; definput.keyvals.min_win = 4; definput.keyvals.spacing=1; definput.keyvals.flow=0; definput.keyvals.fhigh=fs/2; definput.flags.warp = {'symmetric','warped'}; definput.flags.real = {'real','complex'}; definput.flags.sampling = {'regsampling','uniform','fractional',... 'fractionaluniform'}; [flags,kv,flow,fhigh]=ltfatarghelper({'flow','fhigh'},definput,varargin); % Default parameters. if ~isnumeric(flow) || ~isscalar(flow) error('%s: flow must be a scalar.',upper(mfilename)); end; if ~isnumeric(fhigh) || ~isscalar(fhigh) error('%s: fhigh must be a scalar.',upper(mfilename)); end; if flow>fhigh error('%s: flow must be less than or equal to fhigh.',upper(mfilename)); end; if fhigh>fs/2 error('%s: fhigh must be smaller or equal to the Nyquist frequency.',upper(mfilename)); end; % Get the bandwidth of the chosen window by doing a probe winbw=norm(firwin(flags.wintype,1000)).^2/1000;% This is the ERB at 1000 Hz % Construct the AUD filterbank if flags.do_real if isempty(kv.M) M2=ceil(freqtoaud(fhigh,flags.audscale)-freqtoaud(flow,flags.audscale))/kv.spacing+1; % M=M2; else M=kv.M; M2=M; end; else if isempty(kv.M) M2=ceil(freqtoaud(fs/2,flags.audscale)/kv.spacing)+1; M=2*(M2-1); else M=kv.M; if rem(M,2)>0 error(['%s: M must be even for full frequency range ' ... 'filterbanks.',upper(mfilename)]); end; M2=M/2+1; end; end; % The spacing will be used below to compute "virtual" filters... spac = (freqtoaud(fhigh,flags.audscale)-freqtoaud(flow,flags.audscale))/M2; % Compute center frequencies on the perceptual scale fc=audspace(flow,fhigh,M2,flags.audscale).'; % Compute bandwidths on the corresponding auditory scale if flags.do_erb || flags.do_erb83 cb = audfiltbw(fc,'erb'); elseif flags.do_bark cb = audfiltbw(fc,'bark'); % else % No auditory bandwidth concept applies to other scales, the frequency support % will then be computed below so as to achieve approx. 50% overlap between channels end %% Compute the frequency support if flags.do_symmetric % fsupp is measured in Hz if flags.do_erb || flags.do_erb83 || flags.do_bark fsupp=round(cb/winbw*kv.bwmul); % Add additional filters if required if flow > 0 fc = [0;fc]; fsupp = [2*flow;fsupp]; M2 = M2 + 1; end if fhigh < fs/2 fc = [fc;fs/2]; fsupp = [fsupp;2*(fs/2-fhigh)]; M2 = M2 + 1; end else % First check for frequency range and add additional filters if required if flow > 0 fc = [0;fc]; M2 = M2 + 1; end if fhigh < fs/2 fc = [fc;fs/2]; M2 = M2 + 1; end fsupp = zeros(M2,1); fsupp(1) = 2*fc(find(fc,1)); for k = 2:M2-1 fsupp(k) = (fc(k+1)-fc(k-1)); end if fhigh < fs/2 % Correct the bandwidth of the last filter positioned at fhigh % Frequency of the (virtual) filter positioned at fhigh+spac f1 = min(fs/2,audtofreq(freqtoaud(fhigh,flags.audscale)+spac,flags.audscale)); fsupp(M2-1)= f1-fc(end-1); end fsupp(M2) = 2*(fs/2-fc(M2-1)); end else if flags.do_erb || flags.do_erb83 % fsupp_erb is measured in Erbs % The scaling is incorrect, it does not account for the warping fsupp_erb=1/winbw*kv.bwmul; % Convert fsupp into the correct widths in Hz, necessary to compute % "a" in the next if-statement fsupp=audtofreq(freqtoaud(fc,flags.audscale)+fsupp_erb/2,flags.audscale)... -audtofreq(freqtoaud(fc,flags.audscale)-fsupp_erb/2,flags.audscale); else % [FIXME] WARPING ON OTHER SCALES? error('%s: Warped asymmetric filters can only be achieved on the ERB scale.',upper(mfilename)); end end; % Do not allow lower bandwidth than keyvals.min_win fsuppmin = kv.min_win/Ls*fs; for ii = 1:numel(fsupp) if fsupp(ii) < fsuppmin; fsupp(ii) = fsuppmin; end end % Find suitable channel subsampling rates % If flow > 0 and fhigh < fs/2, then do not apply redmul to channels 1 and M2 % as it produces unecessarily badly conditioned frames! aprecise=fs./fsupp/kv.redmul; if flow > 0 aprecise(1)=aprecise(1)*kv.redmul; end if fhigh < fs/2 aprecise(end)=aprecise(end)*kv.redmul; end aprecise=aprecise(:); %% Compute the downsampling rate if flags.do_regsampling % Shrink "a" to the next composite number a=floor23(aprecise); % Determine the minimal transform length L=filterbanklength(Ls,a); % Heuristic trying to reduce lcm(a) while L>2*Ls && ~(all(a)==a(1)) maxa = max(a); a(a==maxa) = 0; a(a==0) = max(a); L = filterbanklength(Ls,a); end elseif flags.do_fractional L = Ls; N=ceil(Ls./aprecise); a=[repmat(Ls,M2,1),N]; elseif flags.do_fractionaluniform L = Ls; N=ceil(Ls./min(aprecise)); a= repmat([Ls,N],M2,1); elseif flags.do_uniform a=floor(min(aprecise)); L=filterbanklength(Ls,a); a = repmat(a,M2,1); end; % Get an expanded "a" afull=comp_filterbank_a(a,M2,struct()); %% Compute the scaling of the filters scal=sqrt(afull(:,1)./afull(:,2)); %% Construct the real or complex filterbank if flags.do_real % Scale the first and last channels scal(1)=scal(1)/sqrt(2); scal(M2)=scal(M2)/sqrt(2); else % Replicate the centre frequencies and sampling rates, except the first and % last a=[a;flipud(a(2:M2-1,:))]; scal=[scal;flipud(scal(2:M2-1))]; fc =[fc; -flipud(fc(2:M2-1))]; if flags.do_symmetric fsupp=[fsupp;flipud(fsupp(2:M2-1))]; end; end; %% Compute the filters if flags.do_symmetric % This is actually much faster than the vectorized call. g = cell(1,numel(fc)); if flow > 0 % Frequency of the filter that would be positioned left below flow on the perceptual scale f0 = max(0,audtofreq(freqtoaud(flow,flags.audscale)-spac,flags.audscale)); if flags.do_erb || flags.do_erb83 || flags.do_bark cb0 = audfiltbw(f0,flags.audscale); fsupp0 = round(cb0/winbw*kv.bwmul); else f00 = audtofreq(freqtoaud(flow,flags.audscale)-2*spac,flags.audscale); fsupp0= fc(2)-f00; end % Compute the filter amd middle-pad it to cover the full frequency % range not covered by the filter bank g{1} = blfilter({flags.wintype,'taper',fsupp0/(2*fsupp(1))},fsupp(1),fc(1),'fs',fs,'scal',scal(1),... 'inf','min_win',kv.min_win); else g{1}=blfilter(flags.wintype,fsupp(1),fc(1),'fs',fs,'scal',scal(1),... 'inf','min_win',kv.min_win); end for m=2:numel(g)-1 g{m}=blfilter(flags.wintype,fsupp(m),fc(m),'fs',fs,'scal',scal(m),... 'inf','min_win',kv.min_win); end if fhigh < fs/2 % Do the same on the high frequency side, frequency of the filter right next % above fhigh on the perceptual scale f0 = min(fs/2,audtofreq(freqtoaud(fhigh,flags.audscale)+spac,flags.audscale)); if flags.do_erb || flags.do_erb83 || flags.do_bark cb0 = audfiltbw(f0,flags.audscale); fsupp0 = round(cb0/winbw*kv.bwmul); else f1 = audtofreq(freqtoaud(fhigh,flags.audscale)+2*spac,flags.audscale); fsupp0= f1-fc(end-1); end % Compute the filter and middle-pad it g{end} = blfilter({flags.wintype,'taper',fsupp0/(2*fsupp(end))},fsupp(end),fc(end),'fs',fs,'scal',scal(end),... 'inf','min_win',kv.min_win); else g{end}=blfilter(flags.wintype,fsupp(end),fc(end),'fs',fs,'scal',scal(end),... 'inf','min_win',kv.min_win); end else g = cell(1,numel(fc)); for m=1:numel(g) g{m}=warpedblfilter(flags.wintype,fsupp_erb,fc(m),fs,@freqtoaud,@audtofreq, ... 'scal',scal(m),'inf'); end end; end ltfat/inst/filterbank/erbfilters.m0000664000175000017500000002434412612404256017212 0ustar susnaksusnakfunction [g,a,fc,L]=erbfilters(fs,Ls,varargin) %-*- texinfo -*- %@deftypefn {Function} erbfilters %@verbatim %ERBFILTERS ERB-spaced filters % Usage: [g,a,fc]=erbfilters(fs,Ls); % [g,a,fc]=erbfilters(fs,Ls,...); % % Input parameters: % fs : Sampling rate (in Hz). % Ls : Signal length. % Output parameters: % g : Cell array of filters. % a : Downsampling rate for each channel. % fc : Center frequency of each channel. % L : Next admissible length suitable for the generated filters. % % [g,a,fc]=ERBFILTERS(fs,Ls) constructs a set of filters g that are % equidistantly spaced on the ERB-scale (see FREQTOERB) with bandwidths % that are proportional to the width of the auditory filters % AUDFILTBW. The filters are intended to work with signals with a % sampling rate of fs. The signal length Ls is mandatory, since we % need to avoid too narrow frequency windows. % % By default, a Hann window on the frequency side is choosen, but the % window can be changed by passing any of the window types from % FIRWIN as an optional parameter. % Run getfield(getfield(arg_firwin,'flags'),'wintype') to get a cell % array of window types available. % % The integer downsampling rates of the channels must all divide the % signal length, FILTERBANK will only work for input signal lengths % being multiples of the least common multiple of the downsampling rates. % See the help of FILTERBANKLENGTH. % The fractional downsampling rates restrict the filterbank to a single % length L=Ls. % % [g,a]=ERBFILTERS(...,'regsampling') constructs a non-uniform % filterbank with integer subsampling factors. % % [g,a]=ERBFILTERS(...,'uniform') constructs a uniform filterbank % where the integer downsampling rate is the same for all the channels. This % results in most redundant representation which produces nice plots. % % [g,a]=ERBFILTERS(...,'fractional') constructs a filterbank with % fractional downsampling rates a. % This results in the least redundant system. % % [g,a]=ERBFILTERS(...,'fractionaluniform') constructs a filterbank with % fractional downsampling rates a, which are uniform for all filters % except the "filling" low-pass and high-pass filters can have different % fractional downsampling rates. This is usefull when uniform subsampling % and low redundancy at the same time are desirable. % % ERBFILTERS accepts the following optional parameters: % % 'spacing',b Specify the spacing in ERBS between the % filters. Default value is b=1. % % 'M',M Specify the number of filters, M. If this % parameter is specified, it overwrites the % 'spacing' parameter. % % 'redmul',redmul Redundancy multiplier. Increasing the value of this % will make the system more redundant by lowering the % channel downsampling rates. It is only used if the % filterbank is a non-uniform filterbank. Default % value is 1. If the value is less than one, the % system may no longer be painless. % % 'symmetric' Create filters that are symmetric around their centre % frequency. This is the default.'sqrtsquare','sqrtrect' % % 'warped' Create asymmetric filters that are symmetric on the % Erb-scale. % % 'complex' Construct a filterbank that covers the entire % frequency range. % % % 'bwmul',bwmul Bandwidth of the filters relative to the bandwidth % returned by AUDFILTBW. Default is bwmul=1. % % 'min_win',min_win Minimum admissible window length (in samples). % Default is 4. This restrict the windows not % to become too narrow when L is low. % % Examples: % --------- % % In the first example, we construct a highly redudant uniform % filterbank and visualize the result: % % [f,fs]=greasy; % Get the test signal % [g,a,fc]=erbfilters(fs,length(f),'uniform','M',100); % c=filterbank(f,g,a); % plotfilterbank(c,a,fc,fs,90,'audtick'); % % In the second example, we construct a non-uniform filterbank with % fractional sampling that works for this particular signal length, and % test the reconstruction. The plot displays the response of the % filterbank to verify that the filters are well-behaved both on a % normal and an ERB-scale. The second plot shows frequency responses of % filters used for analysis (top) and synthesis (bottom). : % % [f,fs]=greasy; % Get the test signal % L=length(f); % [g,a,fc]=erbfilters(fs,L,'fractional'); % c=filterbank(f,{'realdual',g},a); % r=2*real(ifilterbank(c,g,a)); % norm(f-r) % % % Plot the response % figure(1); % subplot(2,1,1); % R=filterbankresponse(g,a,L,fs,'real','plot'); % % subplot(2,1,2); % semiaudplot(linspace(0,fs/2,L/2+1),R(1:L/2+1)); % ylabel('Magnitude'); % % % Plot frequency responses of individual filters % gd=filterbankrealdual(g,a,L); % figure(2); % subplot(2,1,1); % filterbankfreqz(gd,a,L,fs,'plot','linabs','posfreq'); % % subplot(2,1,2); % filterbankfreqz(g,a,L,fs,'plot','linabs','posfreq'); % % % % References: % T. Necciari, P. Balazs, N. Holighaus, and P. L. Soendergaard. The ERBlet % transform: An auditory-based time-frequency representation with perfect % reconstruction. In Proceedings of the 38th International Conference on % Acoustics, Speech, and Signal Processing (ICASSP 2013), pages 498-502, % Vancouver, Canada, May 2013. IEEE. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/erbfilters.html} %@seealso{filterbank, ufilterbank, ifilterbank, ceil23} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Authors: Peter L. Soendergaard % Modified by: Zdenek Prusa % Date: 01.04.14 if nargin<2 error('%s: Not enough input argumets.',upper(mfilename)) end complainif_notposint(fs,'fs'); complainif_notposint(Ls,'Ls'); definput.import = {'firwin'}; definput.keyvals.M=[]; definput.keyvals.bwmul=1; definput.keyvals.redmul=1; definput.keyvals.min_win = 4; definput.keyvals.spacing=1; definput.flags.warp = {'symmetric','warped'}; definput.flags.real = {'real','complex'}; definput.flags.sampling = {'regsampling','uniform','fractional',... 'fractionaluniform'}; [flags,kv]=ltfatarghelper({},definput,varargin); % Get the bandwidth of the choosen window by doing a probe winbw=norm(firwin(flags.wintype,1000)).^2/1000; % Construct the Erb filterbank if flags.do_real if isempty(kv.M) M2=ceil(freqtoerb(fs/2)/kv.spacing)+1; M=M2; else M=kv.M; M2=M; end; else if isempty(kv.M) M2=ceil(freqtoerb(fs/2)/kv.spacing)+1; M=2*(M2-1); else M=kv.M; if rem(M,2)>0 error(['%s: M must be even for full frequency range ' ... 'filterbanks.',upper(mfilename)]); end; M2=M/2+1; end; end; fc=erbspace(0,fs/2,M2).'; %% Compute the frequency support if flags.do_symmetric % fsupp is measured in Hz fsupp=round(audfiltbw(fc)/winbw*kv.bwmul); else % fsupp_erb is measured in Erbs % The scaling is incorrect, it does not account for the warping fsupp_erb=1/winbw*kv.bwmul; % Convert fsupp into the correct widths in Hz, necessary to compute % "a" in the next if-statement fsupp=erbtofreq(freqtoerb(fc)+fsupp_erb/2)-erbtofreq(freqtoerb(fc)-fsupp_erb/2); end; % Do not allow lower bandwidth than keyvals.min_win fsuppmin = kv.min_win/Ls*fs; for ii = 1:numel(fsupp) if fsupp(ii) < fsuppmin; fsupp(ii) = fsuppmin; end end % Find suitable channel subsampling rates aprecise=fs./fsupp/kv.redmul; aprecise=aprecise(:); %% Compute the downsampling rate if flags.do_regsampling % Shrink "a" to the next composite number a=floor23(aprecise); % Determine the minimal transform length L=filterbanklength(Ls,a); % Heuristic trying to reduce lcm(a) while L>2*Ls && ~(all(a)==a(1)) maxa = max(a); a(a==maxa) = 0; a(a==0) = max(a); L = filterbanklength(Ls,a); end elseif flags.do_fractional L = Ls; N=ceil(Ls./aprecise); a=[repmat(Ls,M2,1),N]; elseif flags.do_fractionaluniform L = Ls; N=ceil(Ls./min(aprecise)); a= repmat([Ls,N],M2,1); elseif flags.do_uniform a=floor(min(aprecise)); L=filterbanklength(Ls,a); a = repmat(a,M2,1); end; % Get an expanded "a" afull=comp_filterbank_a(a,M2,struct()); %% Compute the scaling of the filters scal=sqrt(afull(:,1)./afull(:,2)); %% Construct the real or complex filterbank if flags.do_real % Scale the first and last channels scal(1)=scal(1)/sqrt(2); scal(M2)=scal(M2)/sqrt(2); else % Replicate the centre frequencies and sampling rates, except the first and % last a=[a;flipud(a(2:M2-1,:))]; scal=[scal;flipud(scal(2:M2-1))]; fc =[fc; -flipud(fc(2:M2-1))]; if flags.do_symmetric fsupp=[fsupp;flipud(fsupp(2:M2-1))]; end; end; %% Compute the filters if flags.do_symmetric % This is actually much faster than the vectorized call. g = cell(1,numel(fc)); for m=1:numel(g) g{m}=blfilter(flags.wintype,fsupp(m),fc(m),'fs',fs,'scal',scal(m),... 'inf','min_win',kv.min_win); end else g = cell(1,numel(fc)); for m=1:numel(g) g{m}=warpedblfilter(flags.wintype,fsupp_erb,fc(m),fs,@freqtoerb,@erbtofreq, ... 'scal',scal(m),'inf'); end end; end ltfat/inst/filterbank/u2nonucfmt.m0000664000175000017500000000651612612404256017152 0ustar susnaksusnakfunction c = u2nonucfmt(cu, p) %-*- texinfo -*- %@deftypefn {Function} u2nonucfmt %@verbatim %U2NONUCFMT Uniform to non-uniform filterbank coefficient format % Usage: c=u2nonucfmt(cu,pk) % % Input parameters: % cu : Uniform filterbank coefficients. % % Output parameters: % c : Non-uniform filterbank coefficients. % p : Numbers of copies of each filter. % % c = U2NONUCFMT(cu,pk) changes the coefficient format from % uniform filterbank coefficients cu (M=sum(p) channels) to % non-uniform coefficients c (numel(p) channels) such that each % channel of c consinst of p(m) interleaved channels of cu. % % The output c is a cell-array in any case. % % % References: % S. Akkarakaran and P. Vaidyanathan. Nonuniform filter banks: New % results and open problems. In P. M. C.K. Chui and L. Wuytack, editors, % Studies in Computational Mathematics: Beyond Wavelets, volume 10, pages % 259 -301. Elsevier B.V., 2003. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/u2nonucfmt.html} %@seealso{nonu2ufilterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,mfilename); if isempty(cu) error('%s: cu must be non-empty.',upper(mfilename)); end if iscell(cu) if any(cellfun(@isempty,cu)); error('%s: Elements of cu must be non-empty.',upper(mfilename)); end M = numel(cu); W = size(cu{1},2); Lc = size(cu{1},1); if any(Lc~=cellfun(@(cEl)size(cEl,1),cu)) error('%s: Coefficient subbands do not have an uniform length',... upper(mfilename)); end elseif isnumeric(cu) M = size(cu,2); W = size(cu,3); Lc = size(cu,1); else error('%s: cu must be a cell array or numeric.',upper(mfilename)); end if isempty(p) || ~isvector(p) error('%s: p must be a non-empty vector.',upper(mfilename)); end if sum(p) ~= M error(['%s: Total number of filters in p does not comply with ',... 'number of channels'],upper(mfilename)); end Mnonu = numel(p); c = cell(Mnonu,1); p = p(:); pkcumsum = cumsum([1;p]); crange = arrayfun(@(pEl,pcEl)pcEl:pcEl+pEl-1,p,pkcumsum(1:end-1),'UniformOutput',0); if iscell(cu) for m=1:Mnonu ctmp = [cu{crange{m}}].'; c{m} = reshape(ctmp(:),W,[]).'; end else for m=1:Mnonu c{m} = zeros(p(m)*Lc,W,assert_classname(cu)); for w=1:W c{m}(:,w) = reshape(cu(:,crange{m},w).',1,[]); end end end % Post check whether there is the same number of coefficients if sum(cellfun(@(cEl) size(cEl,1),c)) ~= M*Lc error(['%s: Invalid number of coefficients in subbands.'],upper(mfilename)); end ltfat/inst/filterbank/filterbanklength.m0000664000175000017500000000343512612404256020372 0ustar susnaksusnakfunction L=filterbanklength(Ls,a) %-*- texinfo -*- %@deftypefn {Function} filterbanklength %@verbatim %FILTERBANKLENGTH Filterbank length from signal % Usage: L=filterbanklength(Ls,a); % % FILTERBANKLENGTH(Ls,a) returns the length of a filterbank with % time shifts a, such that it is long enough to expand a signal of % length Ls. % % If the filterbank length is longer than the signal length, the signal % will be zero-padded by FILTERBANK or UFILTERBANK. % % If instead a set of coefficients are given, call FILTERBANKLENGTHCOEF. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbanklength.html} %@seealso{filterbank, filterbanklengthcoef} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,upper(mfilename)); complainif_notposint(Ls,'Ls',upper(mfilename)); if ~isnumeric(a) || any(a(:)<=0) error('%s: "a" must be numeric consisting of positive numbers ony.',... upper(mfilename)); end; if isvector(a) a= a(:); end lcm_a=a(1); for m=2:size(a,1) lcm_a=lcm(lcm_a,a(m,1)); end; L=ceil(Ls/lcm_a)*lcm_a; ltfat/inst/filterbank/icqt.m0000664000175000017500000000510012612404256015776 0ustar susnaksusnakfunction fr = icqt(c,g,shift,Ls,dual) %-*- texinfo -*- %@deftypefn {Function} icqt %@verbatim %ICQT Constant-Q non-stationary Gabor synthesis % Usage: fr = icqt(c,g,shift,Ls,dual) % fr = icqt(c,g,shift,Ls) % fr = icqt(c,g,shift) % % Input parameters: % c : Transform coefficients (matrix or cell array) % g : Cell array of Fourier transforms of the analysis % windows % shift : Vector of frequency shifts % Ls : Original signal length (in samples) % dual : Synthesize with the dual frame % Output parameters: % fr : Synthesized signal (Channels are stored in the % columns) % % Given the cell array c of non-stationary Gabor coefficients, and a % set of filters g and frequency shifts shift this function computes % the corresponding constant-Q synthesis. % % If dual is set to 1 (default), an attempt is made to compute the % canonical dual frame for the system given by g, shift and the size % of the vectors in c. This provides perfect reconstruction in the % painless case, see the references for more information. % % % References: % N. Holighaus, M. Doerfler, G. A. Velasco, and T. Grill. A framework for % invertible, real-time constant-Q transforms. IEEE Transactions on % Audio, Speech and Language Processing, 21(4):775 -785, 2013. % % G. A. Velasco, N. Holighaus, M. Doerfler, and T. Grill. Constructing an % invertible constant-Q transform with non-stationary Gabor frames. % Proceedings of DAFX11, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/icqt.html} %@seealso{cqt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Author: Nicki Holighaus % Date: 10.04.13 if ~exist('dual','var') dual = 1; end fr = comp_insdgfb(c,g,shift,Ls,dual); ltfat/inst/filterbank/Contents.m0000664000175000017500000000570712612404256016650 0ustar susnaksusnak% LTFAT - Filterbanks % % Peter L. Soendergaard, 2011 - 2015 % % Transforms and basic routines % FILTERBANK - Filter bank % UFILTERBANK - Uniform Filter bank % IFILTERBANK - Inverse normal/uniform filter bank % FILTERBANKWIN - Evaluate filter bank window % FILTERBANKLENGTH - Length of filter bank to expand signal % FILTERBANKLENGTHCOEF - Length of filter bank to expand coefficients % % Auditory inspired filter banks % CQT - Constant-Q transform % ICQT - Inverse constant-Q transform % ERBLETT - Erb-let transform % IERBLETT - Inverse Erb-let transform % % Filter generators % CQTFILTERS - Logarithmically spaced filters % ERBFILTERS - ERB-spaced filters % WARPEDFILTERS - Frequency-warped band-limited filters % AUDFILTERS - Filters based on auditory scales % % Window construction and bounds % FILTERBANKDUAL - Canonical dual filters % FILTERBANKTIGHT - Canonical tight filters % FILTERBANKREALDUAL - Canonical dual filters for real-valued signals % FILTERBANKREALTIGHT - Canonical tight filters for real-valued signals % FILTERBANKBOUNDS - Frame bounds of filter bank % FILTERBANKREALBOUNDS - Frame bounds of filter bank for real-valued signals % FILTERBANKRESPONSE - Total frequency response (a frame property) % % Auxilary % FILTERBANKFREQZ - Frequency responses of filters % NONU2UFILTERBANK - Non-uni. to uniform filter bank transformation % U2NONUCFMT - Change format of coefficients % NONU2UCFMT - Change format of coefficients back % % Plots % PLOTFILTERBANK - Plot normal/uniform filter bank coefficients % % Reassignment and phase gradient % FILTERBANKPHASEGRAD - Instantaneous time/frequency from signal % FILTERBANKREASSIGN - Reassign filterbank spectrogram % FILTERBANKSYNCHROSQUEEZE - Synchrosqueeze filterbank spectrogram % % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % Url: http://ltfat.github.io/doc/filterbank/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/filterbank/cent_freqs.m0000664000175000017500000000562412612404256017202 0ustar susnaksusnakfunction cfreq = cent_freqs(g,L) %-*- texinfo -*- %@deftypefn {Function} cent_freqs %@verbatim %CENT_FREQS Determine relative center frequencies % Usage: cfreq = cent_freqs(g); % cfreq = cent_freqs(g,L); % cfreq = cent_freqs(fs,fc); % cfreq = cent_freqs(g,fc); % % Input parameters: % g : Set of filters. % L : Signal length. % fs : Sampling rate (in Hz). % fc : Vector of center frequencies (in Hz). % Output parameters: % cfreq : Vector of relative center frequencies in ]-1,1]. % % CENT_FREQS(g) will compute the center frequencies of the filters % contained in g by determining their circular center of gravity. To % that purpose, the transfer function of each filter will be computed for % a default signal length on 10000 samples. For improved accuracy, the % factual signal length L can be supplied as an optional parameter. % Alternatively, the center frequencies can be obtained from a set of % center frequencies fc (in Hz) and the sampling rate fs. The % sampling rate can also be determined from the field fs of the filter % set g. % % Note: If g.H contains full-length, numeric transfer functions, L* % must be specified for correct results. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/cent_freqs.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,1,'FILTERBANKCENTFREQS'); if nargin > 1 % Try to determine cfreq from fc and fs in Hz if numel(g) == 1 && isnumeric(g) && numel(L) > 1 cfreq = modcent(2*L/g,2); return elseif numel(g) == numel(L) && ( numel(g) > 1 || isfield(g,'fs') ) cfreq = cellfun(@(fcEl,gEl) modcent(2*fcEl/gEl.fs,2),num2cell(L),g.'); return end else L = 10000; % Default value end g = filterbankwin(g,1,L,'normal'); % Compute l1-normalized absolute value of the transfer functions gH = cellfun(@(gEl) comp_transferfunction(gEl,L),g,'UniformOutput',false); gH = cellfun(@(gHEl) abs(gHEl)./norm(gHEl,1),gH,'UniformOutput',false); % Compute circular center of gravity circInd = exp(2*pi*1i*(0:L-1)/L).'; cfreq = cellfun(@(gHEl) sum(circInd.*gHEl),gH.'); cfreq = real((pi*1i)\log(cfreq)); ltfat/inst/filterbank/cqtfilters.m0000664000175000017500000003223212612404256017224 0ustar susnaksusnakfunction [g,a,fc,L]=cqtfilters(fs,fmin,fmax,bins,Ls,varargin) %-*- texinfo -*- %@deftypefn {Function} cqtfilters %@verbatim %CQTFILTERS CQT-spaced filters % Usage: [g,a,fc]=cqtfilters(fs,fmin,fmax,bins,Ls,varargin); % % % Input parameters: % fs : Sampling rate (in Hz). % fmin : Minimum frequency (in Hz) % fmax : Maximum frequency (in Hz) % bins : Vector consisting of the number of bins per octave. % Ls : Signal length. % Output parameters: % g : Cell array of filters. % a : Downsampling rate for each channel. % fc : Center frequency of each channel. % L : Next admissible length suitable for the generated filters. % % [g,a,fc]=CQTFILTERS(fs,fmin,fmax,bins,Ls) constructs a set of % band-limited filters g which cover the required frequency range % fmin-fmax with bins filters per octave starting at fmin. All % filters have (approximately) equal Q=f_c/f_b, hence constant-Q. The % remaining frequency intervals not covered by these filters are captured % by two additional filters (low-pass, high-pass). The signal length Ls* % is mandatory, since we need to avoid too narrow frequency windows. % % By default, a Hann window on the frequency side is chosen, but the % window can be changed by passing any of the window types from % FIRWIN as an optional parameter. % Run getfield(getfield(arg_firwin,'flags'),'wintype') to get a cell % array of window types available. % % Because the downsampling rates of the channels must all divide the % signal length, FILTERBANK will only work for multiples of the % least common multiple of the downsampling rates. See the help of % FILTERBANKLENGTH. % % [g,a]=CQTFILTERS(...,'regsampling') constructs a non-uniform % filter bank. The downsampling rates are constant in the octaves but % can differ among octaves. This approach was chosen in order to minimize % the least common multiple of a, which determines a granularity of % admissible input signal lengths. % % [g,a]=CQTFILTERS(...,'uniform') constructs a uniform filter bank % where the downsampling rate is the same for all the channels. This % results in most redundant representation, which produces nice plots. % % [g,a]=CQTFILTERS(...,'fractional') constructs a filter bank with % fractional downsampling rates a. The rates are constructed such % that the filter bank can handle signal lengths that are multiples of % L, so the benefit of the fractional downsampling is that you get to % choose the value returned by FILTERBANKLENGTH. This results in the % least redundant system. % % [g,a]=CQTFILTERS(...,'fractionaluniform') constructs a filter bank with % fractional downsampling rates a, which are uniform for all filters % except the "filling" low-pass and high-pass filters can have different % fractional downsampling rates. This is useful when uniform subsampling % and low redundancy at the same time are desirable. % % The filters are intended to work with signals with a sampling rate of % fs. % % CQTFILTERS accepts the following optional parameters: % % 'Qvar',Qvar Bandwidth variation factor. Multiplies the % calculated bandwidth. Default value is 1. % If the value is less than one, the % system may no longer be painless. % % 'subprec' Allow subsample window positions and % bandwidths to better approximate the constant-Q % property. % % 'complex' Construct a filter bank that covers the entire % frequency range. When missing, only positive % frequencies are covered. % % 'min_win',min_win Minimum admissible window length (in samples). % Default is 4. This restrict the windows not % to become too narrow when L is low. This % however brakes the constant-Q property for such % windows and creates rippling in the overall % frequency response. % % 'redmul',redmul Redundancy multiplier. Increasing the value of % this will make the system more redundant by % lowering the channel downsampling rates. Default % value is 1. If the value is less than one, % the system may no longer be painless. % % Examples: % --------- % % In the first example, we construct a highly redundant uniform % filter bank and visualize the result: % % [f,fs]=greasy; % Get the test signal % [g,a,fc]=cqtfilters(fs,100,fs,32,length(f),'uniform'); % c=filterbank(f,g,a); % plotfilterbank(c,a,fc,fs,90,'audtick'); % % In the second example, we construct a non-uniform filter bank with % fractional sampling that works for this particular signal length, and % test the reconstruction. The plot displays the response of the % filter bank to verify that the filters are well-behaved both on a % normal and an log scale. The second plot shows frequency responses of % filters used for analysis (top) and synthesis (bottom). : % % [f,fs]=greasy; % Get the test signal % L=length(f); % [g,a,fc]=cqtfilters(fs,100,fs,8,L,'fractional'); % c=filterbank(f,{'realdual',g},a); % r=2*real(ifilterbank(c,g,a)); % norm(f-r) % % % Plot the response % figure(1); % subplot(2,1,1); % R=filterbankresponse(g,a,L,fs,'real','plot'); % % subplot(2,1,2); % semiaudplot(linspace(0,fs/2,L/2+1),R(1:L/2+1)); % ylabel('Magnitude'); % % % Plot frequency responses of individual filters % gd=filterbankrealdual(g,a,L); % figure(2); % subplot(2,1,1); % filterbankfreqz(gd,a,L,fs,'plot','linabs','posfreq'); % % subplot(2,1,2); % filterbankfreqz(g,a,L,fs,'plot','linabs','posfreq'); % % % References: % N. Holighaus, M. Doerfler, G. A. Velasco, and T. Grill. A framework for % invertible, real-time constant-Q transforms. IEEE Transactions on % Audio, Speech and Language Processing, 21(4):775 -785, 2013. % % G. A. Velasco, N. Holighaus, M. Doerfler, and T. Grill. Constructing an % invertible constant-Q transform with non-stationary Gabor frames. % Proceedings of DAFX11, 2011. % % C. Schoerkhuber, A. Klapuri, N. Holighaus, and M. Doerfler. A Matlab % Toolbox for Efficient Perfect Reconstruction Time-Frequency Transforms % with Log-Frequency Resolution. In Audio Engineering Society Conference: % 53rd International Conference: Semantic Audio. Audio Engineering % Society, 2014. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/cqtfilters.html} %@seealso{erbfilters, cqt, firwin, filterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Authors: Nicki Holighaus, Gino Velasco % Date: 10.04.13 % Modified by: Zdenek Prusa % Date: 10.02.14 %% Check input arguments complainif_notenoughargs(nargin,5,upper(mfilename)); complainif_notposint(fs,'fs',upper(mfilename)); complainif_notposint(fmin,'fmin',upper(mfilename)); complainif_notposint(fmax,'fmax',upper(mfilename)); complainif_notposint(bins,'bins',upper(mfilename)); complainif_notposint(Ls,'Ls',upper(mfilename)); if fmin>=fmax error('%s: fmin has to be less than fmax.',upper(mfilename)); end definput.import = {'firwin'}; definput.keyvals.L=[]; definput.keyvals.Qvar = 1; definput.keyvals.redmul=1; definput.keyvals.min_win = 4; definput.flags.real = {'real','complex'}; definput.flags.subprec = {'nosubprec','subprec'}; definput.flags.sampling = {'regsampling','uniform',... 'fractional','fractionaluniform'}; [flags,kv]=ltfatarghelper({},definput,varargin); if flags.do_subprec error('%s: TO DO: Subsample window positioning is not implemented yet.',... upper(mfilename)); end % Nyquist frequency nf = fs/2; % Limit fmax if fmax > nf fmax = nf; end % Number of octaves b = ceil(log2(fmax/fmin))+1; if length(bins) == 1; % Constant number of bins in each octave bins = bins*ones(b,1); elseif length(bins) < b % Pick bins for octaves for which it was not specified. bins = bins(:); bins( bins<=0 ) = 1; bins = [bins ; bins(end)*ones(b-length(bins),1)]; end % Prepare frequency centers in Hz fc = zeros(sum(bins),1); ll = 0; for kk = 1:length(bins); fc(ll+(1:bins(kk))) = ... fmin*2.^(((kk-1)*bins(kk):(kk*bins(kk)-1)).'/bins(kk)); ll = ll+bins(kk); end % Get rid of filters with frequency centers >=fmax and nf % This will leave the first bigger than fmax it it is lower than nf temp = find(fc>=fmax ,1); if fc(temp) >= nf fc = fc(1:temp-1); else fc = fc(1:temp); end M = length(fc); % Add filter at zero and nf frequencies fc = [0;fc;nf]; M2 = M + 2; % Set bandwidths fsupp = zeros(M2,1); % Bandwidth of the low-pass filter around 0 fsupp(1) = 2*fmin; fsupp(2) = (fc(2))*(2^(1/bins(1))-2^(-1/bins(1))); for k = [3:M , M] fsupp(k) = (fc(k+1)-fc(k-1)); end fsupp(M+1) = (fc(M+1))*(2^(1/bins(end))-2^(-1/bins(end))); fsupp(M+2) = 2*(nf-fc(end-1)); % Keeping center frequency and changing bandwidth => Q=fbas/bw % Do that only for the constant Q filters fsupp(2:end-1) = kv.Qvar*fsupp(2:end-1); % Lowpass and highpass filters has to be treated differently fsupp([1,end]) = fsupp([1,end]); % Do not allow lower bandwidth than keyvals.min_win fsuppmin = kv.min_win/Ls*fs; for ii = 1:numel(fsupp) if fsupp(ii) < fsuppmin; fsupp(ii) = fsuppmin; end end % Find suitable channel subsampling rates aprecise=fs./fsupp; aprecise=aprecise(:); if any(aprecise<1) error(['%s: Bandwidth of one of the filters is bigger than fs. ',... 'Check fmin and fmax, number of bins and Qval'],upper(mfilename)); end aprecise=aprecise/kv.redmul; if any(aprecise<1) error('%s: The maximum redundancy mult. for this setting is %5.2f',... upper(mfilename), min(fs./fsupp)); end %% Compute the downsampling rate if flags.do_regsampling % Find minimum a in each octave and floor23 it. s = M-cumsum(bins); bins=bins(1:find(s<=0,1)); bins(end) = bins(end)-(sum(bins)-M); aocts = mat2cell(aprecise(2:end-1),bins); aocts = [{aprecise(1)};aocts;aprecise(end)]; %aocts{1} = [aprecise(1);aocts{1}]; %aocts{end} = [aocts{end};aprecise(end)]; a=cellfun(@(aEl) floor23(min(aEl)),aocts); % Determine the minimal transform length lcm(a) L = filterbanklength(Ls,a); % Heuristic trying to reduce lcm(a) while L>2*Ls && ~(all(a==a(1))) maxa = max(a); a(a==maxa) = 0; a(a==0) = max(a); L = filterbanklength(Ls,a); end % Deal the integer subsampling factors a = cell2mat(cellfun(@(aoEl,aEl) ones(numel(aoEl),1)*aEl,... aocts,mat2cell(a,ones(numel(a),1)),'UniformOutput',0)); elseif flags.do_fractional L = Ls; N=ceil(Ls./aprecise); a=[repmat(Ls,M2,1),N]; elseif flags.do_fractionaluniform L = Ls; aprecise(2:end-1) = min(aprecise(2:end-1)); N=ceil(Ls./aprecise); a=[repmat(Ls,M2,1),N]; elseif flags.do_uniform a=floor(min(aprecise)); L=filterbanklength(Ls,a); a = repmat(a,M2,1); end; % Get an expanded "a" afull=comp_filterbank_a(a,M2,struct()); %% Compute the scaling of the filters % Individual filter peaks are made square root of the subsampling factor scal=sqrt(afull(:,1)./afull(:,2)); if flags.do_real % Scale the first and last channels scal(1)=scal(1)/sqrt(2); scal(M2)=scal(M2)/sqrt(2); else % Replicate the centre frequencies and sampling rates, except the first and % last a=[a;flipud(a(2:M2-1,:))]; scal=[scal;flipud(scal(2:M2-1))]; fc =[fc; -flipud(fc(2:M2-1))]; fsupp=[fsupp;flipud(fsupp(2:M2-1))]; end; % This is actually much faster than the vectorized call. g = cell(1,numel(fc)); for m=1:numel(g) g{m} = blfilter(flags.wintype,fsupp(m),fc(m),'fs',fs,'scal',scal(m),... 'inf','min_win',kv.min_win); end % Middle-pad windows at 0 and Nyquist frequencies % with constant region (tapering window) if the bandwidth is larger than % of the next in line window. kkpairs = [1,2;M2,M2-1]; for idx = 1:size(kkpairs,1) Mk = fsupp(kkpairs(idx,1)); Mknext = fsupp(kkpairs(idx,2)); if Mk > Mknext g{kkpairs(idx,1)} = blfilter({'hann','taper',Mknext/Mk},... Mk,fc(kkpairs(idx)),'fs',fs,'scal',... scal(kkpairs(idx)),'inf'); end end ltfat/inst/filterbank/erblett.m0000664000175000017500000001467112612404256016514 0ustar susnaksusnakfunction [c,Ls,g,shift,M] = erblett(f,bins,fs,varargin) %-*- texinfo -*- %@deftypefn {Function} erblett %@verbatim %ERBLETT ERBlet non-stationary Gabor filterbank % Usage: [c,Ls,g,shift,M] = erblett(f,bins,fs,varargin) % [c,Ls,g,shift] = erblett(...) % [c,Ls] = erblett(...) % c = erblett(...) % % Input parameters: % f : The signal to be analyzed (For multichannel % signals, input should be a matrix which each % column storing a channel of the signal) % bins : Desired bins per ERB % fs : Sampling rate of f (in Hz) % varargin : Optional input pairs (see table below) % Output parameters: % c : Transform coefficients (matrix or cell array) % Ls : Original signal length (in samples) % g : Cell array of Fourier transforms of the analysis % windows % shift : Vector of frequency shifts % M : Number of time channels % % This function computes an ERBlet constant-Q transform via non-stationary % Gabor filterbanks. Given the signal f, the ERBlet parameter bins, % as well as the sampling rate fs of f, the corresponding ERBlet % coefficients c are given as output. For reconstruction, the length of % f and the filterbank parameters can be returned also. % % The transform produces phase-locked coefficients in the % sense that each filter is considered to be centered at % 0 and the signal itself is modulated accordingly. % % Optional input arguments arguments can be supplied like this: % % erblett(f,bins,fs,'Qvar',Qvar) % % The arguments must be character strings followed by an % argument: % % 'Qvar',Qvar Bandwidth variation factor % % 'M_fac',M_fac Number of time channels are rounded to % multiples of this % % 'winfun',winfun Filter prototype (see FIRWIN for available % filters) % % Examples: % --------- % % The following example shows analysis and synthesis with ERBLETT and % IERBLETT: % % [f,fs] = gspi; % binsPerERB = 4; % [c,Ls,g,shift,M] = erblett(f,binsPerERB,fs); % fr = ierblett(c,g,shift,Ls); % rel_err = norm(f-fr)/norm(f) % plotfilterbank(c,Ls./M,[],fs,'dynrange',60); % % % References: % T. Necciari, P. Balazs, N. Holighaus, and P. L. Soendergaard. The ERBlet % transform: An auditory-based time-frequency representation with perfect % reconstruction. In Proceedings of the 38th International Conference on % Acoustics, Speech, and Signal Processing (ICASSP 2013), pages 498-502, % Vancouver, Canada, May 2013. IEEE. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/erblett.html} %@seealso{ierblett, firwin} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Authors: Thibaud Necciari, Nicki Holighaus % Date: 10.04.13 %% Check input arguments if nargin < 3 error('Not enough input arguments'); end [f,Ls,W]=comp_sigreshape_pre(f,upper(mfilename),0); % Set defaults definput.keyvals.usrM = []; definput.keyvals.Qvar = 1; definput.keyvals.M_fac = 1; definput.keyvals.winfun = 'nuttall'; % Check input arguments [flags,keyvals,usrM]=ltfatarghelper({'usrM'},definput,varargin); %% Create the ERBlet dictionary df = fs/Ls; % frequency resolution in the FFT fmin = 0; fmax = fs/2; % Convert fmin and fmax into ERB erblims = freqtoerb([fmin,fmax]); % Determine number of freq. channels Nf = bins*ceil(erblims(2)-erblims(1)); % Determine center frequencies fc = erbspace(fmin,fmax,Nf)'; % Concatenate "virtual" frequency positions of negative-frequency windows fc = [fc ; flipud(fc(1:end-1))]; gamma = audfiltbw(fc); % ERB scale % Convert center frequencies in Hz into samples posit = round(fc/df);% Positions of center frequencies in samples posit(Nf+1:end) = Ls-posit(Nf+1:end);% Extension to negative freq. % Compute desired essential (Gaussian) support for each filter Lwin = 4*round(gamma/df); % Nuttall windows are slightly broader than Gaussians, this is offset by % the factor 1.1 M = round(keyvals.Qvar*Lwin/1.1); % Compute cell array of analysis filters g = arrayfun(@(x) firwin(keyvals.winfun,x)/sqrt(x),M,'UniformOutput',0); g{1}=1/sqrt(2)*g{1}; g{end}=1/sqrt(2)*g{end}; M = keyvals.M_fac*ceil(M/keyvals.M_fac); N = length(posit); % The number of frequency channels if ~isempty(usrM) if numel(usrM) == 1 M = usrM*ones(N,1); else M = usrM; end end %% The ERBlet transform % some preparation f = fft(f); c=cell(N,1); % Initialisation of the result % The actual transform for ii = 1:N Lg = length(g{ii}); idx = [ceil(Lg/2)+1:Lg,1:ceil(Lg/2)]; win_range = mod(posit(ii)+(-floor(Lg/2):ceil(Lg/2)-1),Ls)+1; if M(ii) < Lg % if the number of frequency channels is too small, % aliasing is introduced col = ceil(Lg/M(ii)); temp = zeros(col*M(ii),W,assert_classname(f)); temp([end-floor(Lg/2)+1:end,1:ceil(Lg/2)],:) = ... bsxfun(@times,f(win_range,:),g{ii}(idx)); temp = reshape(temp,M(ii),col,W); c{ii} = squeeze(ifft(sum(temp,2))); % Using c = cellfun(@(x) squeeze(ifft(x)),c,'UniformOutput',0); % outside the loop instead does not provide speedup; instead it is % slower in most cases. else temp = zeros(M(ii),W,assert_classname(f)); temp([end-floor(Lg/2)+1:end,1:ceil(Lg/2)],:) = ... bsxfun(@times,f(win_range,:),g{ii}(idx)); c{ii} = ifft(temp); end end if max(M) == min(M) c = cell2mat(c); c = reshape(c,M(1),N,W); end if nargout > 3 shift = [Ls-posit(end); diff(posit)];% Frequency hop sizes in samples end ltfat/inst/filterbank/nonu2ufilterbank.m0000664000175000017500000001011712612404256020332 0ustar susnaksusnakfunction [gu,au,p]=nonu2ufilterbank(g,a) %-*- texinfo -*- %@deftypefn {Function} nonu2ufilterbank %@verbatim %NONU2UFILTERBANK Non-uniform to uniform filterbank transform % Usage: [gu,au]=nonu2ufilterbank(g,a) % % Input parameters: % g : Filters as a cell array of structs. % a : Subsampling factors. % % Output parameters: % gu : Filters as a cell array of structs. % au : Uniform subsampling factor. % pk : Numbers of copies of each filter. % % [gu,au]=NONU2UFILTERBANK(g,a) calculates uniform filterbank gu, % au=lcm(a) which is identical to the (possibly non-uniform) filterbank % g, a in terms of the equal output coefficients. Each filter g{k} % is replaced by p(k)=au/a(k) advanced versions of itself such that % z^{ma(k)}G_k(z) for m=0,...,p-1. % % This allows using the factorisation algorithm when determining % filterbank frame bounds in FILTERBANKBOUNDS and % FILTERBANKREALBOUNDS and in the computation of the dual filterbank % in FILTERBANKDUAL and FILTERBANKREALDUAL which do not work % with non-uniform filterbanks. % % One can change between the coefficient formats of gu, au and % g, a using NONU2UCFMT and U2NONUCFMT in the reverse direction. % % % References: % S. Akkarakaran and P. Vaidyanathan. Nonuniform filter banks: New % results and open problems. In P. M. C.K. Chui and L. Wuytack, editors, % Studies in Computational Mathematics: Beyond Wavelets, volume 10, pages % 259 -301. Elsevier B.V., 2003. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/nonu2ufilterbank.html} %@seealso{ufilterbank, filterbank, filterbankbounds, filterbankdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'NONU2UFILTERBANK'); try [g,asan] = filterbankwin(g,a,'normal'); catch err = lasterror; if strcmp(err.identifier,'L:undefined') % If it blotched because of the undefined L, explain that. % This should capture only formats like {'dual',...} and {'gauss'} error(['%s: Function cannot handle g in a format which ',... 'requires L. Consider pre-formatting the filterbank by ',... 'calling g = FILTERBANKWIN(g,a,L).'],upper(mfilename)); else % Otherwise just rethrow the error error(err.message); end end % This function does not work for fractional subsampling if size(asan,2)==2 && ~all(asan(:,2)==1) && rem(asan(:,1),1)~=0 error(['%s: Filterbanks with fractional subsampling are not',... ' supported.'],upper(mfilename)); end % This is effectivelly lcm(a) au=filterbanklength(1,asan); % Numbers of copies of each filter p = au./asan(:,1); if all(asan(:,1)==asan(1,1)) % Filterbank is already uniform, there is nothing to be done. gu = g; au = asan; return; end % Do the actual filter copies % This only changes .delay or .offset gu=cell(sum(p),1); auIdx = 1; for m=1:numel(g) for ii=0:p(m)-1 gu{auIdx} = g{m}; if(isfield(gu{auIdx},'H')) if(~isfield(gu{auIdx},'delay')) gu{auIdx}.delay = 0; end gu{auIdx}.delay = gu{auIdx}.delay-asan(m)*ii; end if(isfield(gu{auIdx},'h')) if(~isfield(gu{auIdx},'offset')) gu{auIdx}.offset = 0; end gu{auIdx}.offset = gu{auIdx}.offset-asan(m)*ii; end auIdx = auIdx+1; end end ltfat/inst/filterbank/filterbankfreqz.m0000664000175000017500000000426312612404256020240 0ustar susnaksusnakfunction gf = filterbankfreqz(g,a,L,varargin) %-*- texinfo -*- %@deftypefn {Function} filterbankfreqz %@verbatim %FILTERBANKFREQZ Filterbank frequency responses % Usage: gf = filterbankfreqz(g,a,L) % % gf = FILTERBANKFREQZ(g,a,L) calculates length L frequency responses % of filters in g and returns them as columns of gf. % % If an optional parameters 'plot' is passed to FILTERBANKFREQZ, % the frequency responses will be plotted using PLOTFFT. Any % optional parameter undestood by PLOTFFT can be passed in addition % to 'plot'. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbankfreqz.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,3,'FILTERBANKFREQZ'); complainif_notposint(L,'L','FILTERBANKFREQZ'); % Wrap g if it is not a cell. The format of g will be checked % further in filterbankwin. if ~iscell(g) g = {g}; end % The only place we need a % It is necessary for cases when filterbank is given by e.g. % {'dual',g} g = filterbankwin(g,a,L,'normal'); M = numel(g); G1=comp_transferfunction(g{1},L); gf = zeros(L,M,class(G1)); gf(:,1) = G1; for m=2:M gf(:,m) = cast(comp_transferfunction(g{m},L),class(G1)); end % Search for the 'plot' flag do_plot = any(strcmp('plot',varargin)); if do_plot % First remove the 'plot' flag from the arguments varargin(strcmp('plot',varargin)) = []; % and pass everything else to plotfft plotfft(gf,varargin{:}); end; if nargout<1 clear gf; end ltfat/inst/filterbank/filterbankrealdual.m0000664000175000017500000001115412612404256020677 0ustar susnaksusnakfunction gdout=filterbankrealdual(g,a,varargin) %-*- texinfo -*- %@deftypefn {Function} filterbankrealdual %@verbatim %FILTERBANKREALDUAL Dual filters of filterbank for real signals only % Usage: gd=filterbankrealdual(g,a,L); % gd=filterbankrealdual(g,a); % % FILTERBANKREALDUAL(g,a,L) computes the canonical dual filters of g* % for a channel subsampling rate of a (hop-size) and a system length L. % L must be compatible with subsampling rate a as % L==filterbanklength(L,a). The dual filters work only for real-valued % signals. Use this function on the common construction where the filters % in g only covers the positive frequencies. % % filterabankrealdual(g,a) does the same, but the filters must be FIR % filters, as the transform length is unspecified. L will be set to % next suitable length equal or bigger than the longest impulse response. % % The format of the filters g are described in the help of FILTERBANK. % % In addition, the function recognizes a 'forcepainless' flag which % forces treating the filterbank g and a as a painless case % filterbank. % % To actually invert the output of a filterbank, use the dual filters % together with 2*real(ifilterbank(...)). % % REMARK: Perfect reconstruction can be obtained for signals of length % L. In some cases, using dual system calculated for shorter L might % work but check the reconstruction error. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbankrealdual.html} %@seealso{filterbank, ufilterbank, ifilterbank} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FILTERBANKREALDUAL'); definput.import={'filterbankdual'}; [flags,~,L]=ltfatarghelper({'L'},definput,varargin); [g,asan,info]=filterbankwin(g,a,L,'normal'); if isempty(L) if info.isfir % Pick shortest possible length for FIR filterbank L = filterbanklength(info.longestfilter,asan); else % Just thow an error, nothing reasonable can be done without L error(['%s: L must be specified when not working with FIR ',...' 'filterbanks.'], upper(mfilename)); end end M=info.M; % Force usage of the painless algorithm if flags.do_forcepainless info.ispainless = 1; end if L~=filterbanklength(L,a) error(['%s: Specified length L is incompatible with the length of ' ... 'the time shifts.'],upper(mfilename)); end; % Prioritize painless over uniform algorithm if info.isuniform && info.ispainless info.isuniform = 0; end if info.isuniform % Uniform filterbank, use polyphase representation a=a(1); % Transfer functions of individual filters as cols G = filterbankfreqz(g,a,L); thisclass = class(G); N=L/a; % This is the original code %for k=0:a-1 % Ha(k+1,:) = G(mod(w-k*N,L)+1,:); % Hb(k+1,:) = conj(G(mod(k*N-w,L)+1,:)); %end; gd=zeros(M,N,thisclass); for w=0:N-1 idx_a = mod(w-(0:a-1)*N,L)+1; idx_b = mod((0:a-1)*N-w,L)+1; Ha = G(idx_a,:); Hb = conj(G(idx_b,:)); Ha=(Ha*Ha'+Hb*Hb')\Ha; gd(:,idx_a)=Ha.'; end; % The gd was created transposed because the indexing gd(:,idx_a) % is much faster than gd(idx_a,:) gd=gd.'; gd=ifft(gd)*a; gdout = cellfun(@(gdEl) cast(gdEl,thisclass), num2cell(gd,1),... 'UniformOutput',0); % All filters in gdout will be treated as FIR of length L. Convert them % to a struct with .h and .offset format. gdout = filterbankwin(gdout,a); elseif info.ispainless gdout = comp_painlessfilterbank(g,asan,L,'dual',1); else error(['%s: The canonical dual frame of this system is not a ' ... 'filterbank. You must call an iterative ' ... 'method to perform the desired inverstion. Please see ' ... 'FRANAITER or FRSYNITER.'],upper(mfilename)); end; ltfat/inst/filterbank/filterbankreassign.m0000664000175000017500000001336412612404256020726 0ustar susnaksusnakfunction [sr,repos,Lc]=filterbankreassign(s,tgrad,fgrad,a,var) %-*- texinfo -*- %@deftypefn {Function} filterbankreassign %@verbatim %FILTERBANKREASSIGN Reassign filterbank spectrogram % Usage: sr = filterbankreassign(s,tgrad,fgrad,a,cfreq); % sr = filterbankreassign(s,tgrad,fgrad,a,g); % [sr,repos,Lc] = filterbankreassign(...); % % Input parameters: % s : Spectrogram to be reassigned. % tgrad : Instantaneous frequency relative to original position. % fgrad : Group delay relative to original position. % a : Vector of time steps. % cfreq : Vector of relative center frequencies in ]-1,1]. % g : Set of filters. % Output parameters: % sr : Reassigned filterbank spectrogram. % repos : Reassigned positions. % Lc : Subband lengths. % % FILTERBANKREASSIGN(s,tgrad,fgrad,a,cfreq) will reassign the values of % the filterbank spectrogram s using the group delay fgrad and % instantaneous frequency tgrad. The time-frequency sampling % pattern is determined from the time steps a and the center % frequencies cfreq. % % FILTERBANKREASSIGN(s,tgrad,fgrad,a,g) will do the same thing except % the center frequencies are estimated from a set of filters g. % % [sr,repos,Lc]=FILTERBANKREASSIGN(...) does the same thing, but in addition % returns a vector of subband lengths Lc (Lc = cellfun(@numel,s)) % and cell array repos with sum(Lc) elements. Each element corresponds % to a single coefficient obtained by cell2mat(sr) and it is a vector % of indices identifying coefficients from cell2mat(s) assigned to % the particular time-frequency position. % % The arguments s, tgrad and fgrad must be cell-arrays of vectors % of the same lengths. Arguments a and cfreq or g must have the % same number of elements as the cell arrays with coefficients. % % Examples: % --------- % % This example shows how to reassign a ERB filterbank spectrogram: % % % Genrate 3 chirps 1 second long % L = 44100; fs = 44100; l = 0:L-1; % % f = sin(2*pi*(l/35+(l/300).^2)) + ... % sin(2*pi*(l/10+(l/300).^2)) + ... % sin(2*pi*(l/5-(l/450).^2)); % f = 0.7*f'; % % % Create ERB filterbank % [g,a,fc]=erbfilters(fs,L,'fractional','spacing',1/12,'warped'); % % % Compute phase gradient % [tgrad,fgrad,cs,c]=filterbankphasegrad(f,g,a); % % Do the reassignment % sr=filterbankreassign(cs,tgrad,fgrad,a,cent_freqs(fs,fc)); % figure(1); subplot(211); % plotfilterbank(cs,a,fc,fs,60); % title('ERBlet spectrogram of 3 chirps'); % subplot(212); % plotfilterbank(sr,a,fc,fs,60); % title('Reassigned ERBlet spectrogram of 3 chirps'); % % % References: % N. Holighaus, Z. Průša, and P. L. Soendergaard. Reassignment and % synchrosqueezing for general time-frequency filter banks, subsampling % and processing. Signal Processing, submitted, 2015. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbankreassign.html} %@seealso{filterbankphasegrad, gabreassign} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Nicki Holighaus. % Sanity checks complainif_notenoughargs(nargin,5,'FILTERBANKREASSIGN'); if isempty(s) || ~iscell(s) error('%s: s should be a nonempty cell array.',upper(mfilename)); end if isempty(tgrad) || ~iscell(tgrad) || any(~cellfun(@isreal,tgrad)) error('%s: tgrad should be a nonempty cell array of real vectors.',... upper(mfilename)); end if isempty(fgrad) || ~iscell(fgrad) || any(~cellfun(@isreal,fgrad)) error('%s: fgrad should be a nonempty cell array of real vectors.',... upper(mfilename)); end if any(cellfun(@(sEl,tEl,fEl) ~isvector(sEl) || ~isvector(tEl) || ... ~isvector(fEl), s,tgrad,fgrad)) error('%s: s, tgrad, fgrad must be cell arrays of numeric vectors.',... upper(mfilename)); end if ~isequal(size(s),size(tgrad),size(fgrad)) || ... any(cellfun(@(sEl,tEl,fEl) ~isequal(size(sEl),size(tEl),size(fEl)), ... s,tgrad,fgrad)) error('%s: s, tgrad, fgrad does not have the same format.',upper(mfilename)); end W = cellfun(@(sEl)size(sEl,2),s); if any(W>1) error('%s: Only one-channel signals are supported.',upper(mfilename)); end % Number of channels M = numel(s); % Number of elements in channels Lc = cellfun(@(sEl)size(sEl,1),s); % Sanitize a a=comp_filterbank_a(a,M); a = a(:,1)./a(:,2); % Check if a comply with subband lengths L = Lc.*a; if any(abs(L-L(1))>1e-6) error(['%s: Subsampling factors and subband lengths do not ',... 'comply.'],upper(mfilename)); end L = L(1); % Determine center frequencies if isempty(var) || numel(var)~=M || ~isvector(var) && ~iscell(var) error(['%s: cfreq must be length-M numeric vector or a cell-array ',... 'containg M filters.'],upper(mfilename)); else if iscell(var) cfreq = cent_freqs(var,L); else cfreq = var; end end % Do the computations if nargout>1 [sr,repos] = comp_filterbankreassign(s,tgrad,fgrad,a,cfreq); else sr = comp_filterbankreassign(s,tgrad,fgrad,a,cfreq); end ltfat/inst/filterbank/filterbankrealbounds.m0000664000175000017500000001014512612404256021243 0ustar susnaksusnakfunction [AF,BF]=filterbankrealbounds(g,a,L); %-*- texinfo -*- %@deftypefn {Function} filterbankrealbounds %@verbatim %FILTERBANKREALBOUNDS Frame bounds of filter bank for real signals only % Usage: fcond=filterbankrealbounds(g,a,L); % [A,B]=filterbankrealbounds(g,a,L); % [...]=filterbankrealbounds(g,a); % % FILTERBANKREALBOUNDS(g,a,L) calculates the ratio B/A of the frame % bounds of the filterbank specified by g and a for a system of length % L. The ratio is a measure of the stability of the system. Use this % function on the common construction where the filters in g only covers % the positive frequencies. % % FILTERBANKREALBOUNDS(g,a) does the same, but the filters must be FIR % filters, as the transform length is unspecified. L will be set to % next suitable length equal or bigger than the longest impulse response % such that L=filterbanklength(gl_longest,a). % % [A,B]=FILTERBANKREALBOUNDS(g,a) returns the lower and upper frame % bounds explicitly. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbankrealbounds.html} %@seealso{filterbank, filterbankdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FILTERBANKREALBOUNDS'); if nargin<3 L = []; end [g,asan,info]=filterbankwin(g,a,L,'normal'); if isempty(L) if info.isfir % Pick shortest possible length for FIR filterbank L = filterbanklength(info.longestfilter,asan); else % Just thow an error, nothing reasonable can be done without L error(['%s: L must be specified when not working with FIR ',...' 'filterbanks.'], upper(mfilename)); end end M=info.M; if L~=filterbanklength(L,asan) error(['%s: Specified length L is incompatible with the length of ' ... 'the time shifts.'],upper(mfilename)); end; AF=Inf; BF=0; % Prioritize painless over uniform algorithm if info.isuniform && info.ispainless info.isuniform = 0; end if info.isuniform % Uniform filterbank, use polyphase representation a=a(1); N=L/a; % G1 is done this way just so that we can determine the data type. G1=comp_transferfunction(g{1},L); thisclass=assert_classname(G1); G=zeros(L,M,thisclass); G(:,1)=G1; for ii=2:M G(:,ii)=cast(comp_transferfunction(g{ii},L),thisclass); end; Ha=zeros(a,M,thisclass); Hb=zeros(a,M,thisclass); for w=0:N-1 idx_a = mod(w-(0:a-1)*N,L)+1; idx_b = mod((0:a-1)*N-w,L)+1; Ha = G(idx_a,:); Hb = conj(G(idx_b,:)); % A 'real' is needed here, because the matrices are known to be % Hermitian, but sometimes Matlab/Octave does not recognize this. work=real(eig(real(Ha*Ha'+Hb*Hb'))); AF=min(AF,min(work)); BF=max(BF,max(work)); end; AF=AF/a; BF=BF/a; else if info.ispainless % Compute the diagonal of the frame operator. f=comp_filterbankresponse(g,asan,L,1); AF=min(f); BF=max(f); else error(['%s: There is no fast method to find the frame bounds of ' ... 'this filterbank as it is neither uniform nor painless. ' ... 'Please see FRAMEBOUNDS for an iterative method that can ' ... 'solve the problem.'],upper(mfilename)); end; end; if nargout<2 % Avoid the potential warning about division by zero. if AF==0 AF=Inf; else AF=BF/AF; end; end; ltfat/inst/filterbank/warpedfilters.m0000664000175000017500000003573412612404256017731 0ustar susnaksusnakfunction [g,a,fc,L]=warpedfilters(freqtoscale,scaletofreq,fs,fmin,fmax,bins,Ls,varargin) %-*- texinfo -*- %@deftypefn {Function} warpedfilters %@verbatim %WARPEDFILTERS Frequency-warped band-limited filters % Usage: [g,a,fc]=warpedfilters(freqtoscale,scaletofreq,fs,fmin,fmax,bins,Ls); % % Input parameters: % freqtoscale : Function converting frequency (Hz) to scale units % scaletofreq : Function converting scale units to frequency (Hz) % fs : Sampling rate (in Hz). % fmin : Minimum frequency (in Hz) % fmax : Maximum frequency (in Hz) % bins : Vector consisting of the number of bins per octave. % Ls : Signal length. % Output parameters: % g : Cell array of filters. % a : Downsampling rate for each channel. % fc : Center frequency of each channel (in Hz). % L : Next admissible length suitable for the generated filters. % % [g,a,fc]=WARPEDFILTERS(freqtoscale,scaletofreq,fs,fmin,fmax,bins,Ls) % constructs a set of band-limited filters g which cover the required % frequency range fmin-fmax with bins filters per scale unit. The % filters are always centered at full (fractional k/bins) scale units, % where the first filter is selected such that its center is lower than % fmin. % % By default, a Hann window on the frequency side is choosen, but the % window can be changed by passing any of the window types from % FIRWIN as an optional parameter. % Run getfield(getfield(arg_firwin,'flags'),'wintype') to get a cell % array of window types available. % % With respect to the selected scale, all filters have equal bandwidth % and are uniformly spaced on the scale axis, e.g. if freqtoscale is % log(x), then we obtain constant-Q filters with geometric spacing. % The remaining frequency intervals not covered by these filters are % captured one or two additional filters (high-pass always, low-pass if % necessary). The signal length Ls is required in order to obtain the % optimal normalization factors. % % Attention: When using this function, the user needs to be aware of a % number of things: % % a) Although the freqtoscale and scaletofreq can be chosen % freely, it is assumed that freqtoscale is an invertible, % increasing function from {R} or {R}^+ onto % {R} and that freqtoscale is the inverse function. % b) If freqtoscale is from {R}^+ onto {R}, then % necessarily freqtoscale(0) = -infty. % c) If the slope of freqtoscale is (locally) too steep, then % there is the chance that some filters are effectively 0 or % have extremely low bandwidth (1-3 samples), and consequently % very poor localization in time. If freqtoscale is from % {R}^+ onto {R} then this usually occurs close % to the DC component and can be alleviated by increasing fmin. % d) Since the input parameter bins is supposed to be integer, % freqtoscale and scaletofreq have to be scaled % appropriately. Note that freqtoscale(fs) is in some sense % proportional to the resulting number of frequency bands and % inversely proportional to the filter bandwidths. For example, % the ERB scale defined by 21.4log_{10}(1+f/228.8) works % nicely out of the box, while the similar mel scale % 2595log_{10}(1+f/700) most likely has to be rescaled in % order not to provide a filter bank with 1000s of channels. % % If any of these guidelines are broken, this function is likely to break % or give undesireable results. % % By default, a Hann window is chosen as the transfer function prototype, % but the window can be changed by passing any of the window types from % FIRWIN as an optional parameter. % % The integer downsampling rates of the channels must all divide the % signal length, FILTERBANK will only work for input signal lengths % being multiples of the least common multiple of the downsampling rates. % See the help of FILTERBANKLENGTH. % The fractional downsampling rates restrict the filterbank to a single % length L=Ls. % % [g,a]=WARPEDFILTERS(...,'regsampling') constructs a non-uniform % filterbank with integer subsampling factors. % % [g,a]=WARPEDFILTERS(...,'uniform') constructs a uniform filterbank % where the the downsampling rate is the same for all the channels. This % results in most redundant representation, which produces nice plots. % % [g,a]=WARPEDFILTERS(...,'fractional') constructs a filterbank with % fractional downsampling rates a. This results in the % least redundant system. % % [g,a]=WARPEDFILTERS(...,'fractionaluniform') constructs a filterbank % with fractional downsampling rates a, which are uniform for all filters % except the "filling" low-pass and high-pass filters can have different % fractional downsampling rates. This is usefull when uniform subsampling % and low redundancy at the same time are desirable. % % The filters are intended to work with signals with a sampling rate of % fs. % % WARPEDFILTERS accepts the following optional parameters: % % 'bwmul',bwmul % Bandwidth variation factor. Multiplies the % calculated bandwidth. Default value is 1. % If the value is less than one, the % system may no longer be painless. % % 'complex' % Construct a filterbank that covers the entire % frequency range. When missing, only positive % frequencies are covered. % % 'redmul',redmul % Redundancy multiplier. Increasing the value of % this will make the system more redundant by % lowering the channel downsampling rates. Default % value is 1. If the value is less than one, % the system may no longer be painless. % % Examples: % --------- % % In the first example, we use the ERB scale functions freqtoerb and % erbtofreq to construct a filter bank and visualize the result: % % [s,fs] = gspi; % Get a test signal % Ls = numel(gspi); % % % Fix some parameters % fmax = fs/2; % bins = 1; % % % Compute filters, using fractional downsampling % [g,a,fc]=warpedfilters(@freqtoerb,@erbtofreq,fs,0,fmax,bins,... % Ls,'bwmul',1.5,'real','fractional'); % % % Plot the filter transfer functions % figure(1); % filterbankfreqz(g,a,Ls,'plot','linabs','posfreq'); % title('ERBlet filter transfer functions'); % % % Compute the frame bounds % gf=filterbankresponse(g,a,Ls,'real'); framebound_ratio = max(gf)/min(gf); % disp(['Painless system frame bound ratio of ERBlets: ',... % num2str(framebound_ratio)]); % % % Plot the filter bank coefficients of the test signal % figure(2); % c=filterbank(s,g,a); % plotfilterbank(c,a,fc,fs,60); % title('ERBlet transform of the test signal'); % % In the second example, we look at the same test signal using a % constant-Q filter bank with 4 bins per scale unit and the standard % (semi-regular) sampling scheme: % % [s,fs] = gspi; % Get a test signal % Ls = numel(gspi); % % % Fix some parameters % fmax = fs/2; % bins = 1; % % % Define the frequency-to-scale and scale-to-frequency functions % warpfun_log = @(x) 10*log(x); % invfun_log = @(x) exp(x/10); % % bins_hi = 4; % Select bins/unit parameter % fmin = 50; % The logarithm's derivative 1/x tends to Inf for x towards 0 % % % Compute filters, using fractional downsampling % [g,a,fc]=warpedfilters(warpfun_log,invfun_log,fs,fmin,fmax,bins_hi,Ls,'bwmul',1,'real'); % % % Plot the filter transfer functions % figure(1); % filterbankfreqz(g,a,Ls,'plot','linabs','posfreq'); % title('constant-Q filter transfer functions (4 bins)'); % % % Compute the frame bounds % gf=filterbankresponse(g,a,Ls,'real'); framebound_ratio = max(gf)/min(gf); % disp(['Painless system frame bound ratio (constant-Q - 4 bins): ', num2str(framebound_ratio)]); % % % Plot the filter bank coefficients of the test signal % figure(2); % c=filterbank(s,g,a); % plotfilterbank(c,a,fc,fs,60); % title('constant-Q transform of the test signal (4 bins)'); % % % References: % N. Holighaus, Z. Průša, and C. Wiesmeyr. Designing tight filter bank % frames for nonlinear frequency scales. Sampling Theory and Applications % 2015, submitted, 2015. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/warpedfilters.html} %@seealso{erbfilters, cqtfilters, firwin, filterbank, warpedblfilter} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Authors: Nicki Holighaus, Zdenek Prusa % Date: 14.01.15 %% Check input arguments capmname = upper(mfilename); complainif_notenoughargs(nargin,7,capmname); complainif_notposint(fs,'fs',capmname); complainif_notposint(fmin+1,'fmin',capmname); complainif_notposint(fmax,'fmax',capmname); complainif_notposint(bins,'bins',capmname); complainif_notposint(Ls,'Ls',capmname); if ~isa(freqtoscale,'function_handle') error('%s: freqtoscale must be a function handle',capmname) end if ~isa(scaletofreq,'function_handle') error('%s: scaletofreq must be a function handle',capmname) end if fmin>=fmax error('%s: fmin has to be less than fmax.',capmname); end definput.import = {'firwin'}; definput.keyvals.bwmul = 1; definput.keyvals.redmul = 1; definput.keyvals.min_win = 1; definput.flags.real = {'real','complex'}; definput.flags.sampling = {'regsampling','uniform',... 'fractional','fractionaluniform'}; [flags,kv]=ltfatarghelper({},definput,varargin); if ~isscalar(kv.bwmul) error('%s: bwmul must be scalar',capmname) end if ~isscalar(kv.redmul) error('%s: redmul must be scalar',capmname) end if ~isscalar(kv.min_win) error('%s: min_win must be scalar',capmname) end % Nyquist frequency nf = fs/2; % Limit fmax if fmax > nf fmax = nf; end % Limit fmin if fmin <= 0 && freqtoscale(0) == -Inf fmin = scaletofreq(freqtoscale(1)); end %Determine range/number of windows chan_min = floor(bins*freqtoscale(fmin))/bins; if chan_min >= fmax; error('%s: Invalid frequency scale, try lowering fmin',... upper(mfilename)); end chan_max = chan_min; while scaletofreq(chan_max) <= fmax chan_max = chan_max+1/bins; end while scaletofreq(chan_max+kv.bwmul) >= nf chan_max = chan_max-1/bins; end % Prepare frequency centers in Hz scalevec = (chan_min:1/bins:chan_max)'; fc = [scaletofreq(scalevec);nf]; if fmin~=0 fc = [0;fc]; end M = length(fc); %% ---------------------------------- % Set bandwidths fsupp = zeros(M,1); % Bandwidth of the low-pass filter around 0 (Check whether floor and/or +1 % is sufficient!!!) fsuppIdx = 1; if fmin~=0 fsupp(1) = ceil(2*scaletofreq(chan_min-1/bins+kv.bwmul))+2; fsuppIdx = 2; end fsupp(fsuppIdx:M-1) = ceil(scaletofreq(scalevec+kv.bwmul)-scaletofreq(scalevec-kv.bwmul))+2; fsupp(M) = ceil(2*(nf-scaletofreq(chan_max+1/bins-kv.bwmul)))+2; % Find suitable channel subsampling rates % Do not apply redmul to channels 1 and M as it produces uneccesarily % badly conditioned frames aprecise=fs./fsupp; aprecise(2:end-1)=aprecise(2:end-1)/kv.redmul; aprecise=aprecise(:); if any(aprecise<1) error('%s: The maximum redundancy mult. for this setting is %5.2f',... upper(mfilename), min(fs./fsupp)); end %% Compute the downsampling rate if flags.do_regsampling % Shrink "a" to the next composite number a=floor23(aprecise); % Determine the minimal transform length L=filterbanklength(Ls,a); % Heuristic trying to reduce lcm(a) while L>2*Ls && ~(all(a==a(1))) maxa = max(a); a(a==maxa) = 0; a(a==0) = max(a); L = filterbanklength(Ls,a); end elseif flags.do_fractional L = Ls; N=ceil(Ls./aprecise); a=[repmat(Ls,M,1),N]; elseif flags.do_fractionaluniform L = Ls; N=ceil(Ls./min(aprecise)); a= repmat([Ls,N],M,1); elseif flags.do_uniform a=floor(min(aprecise)); L=filterbanklength(Ls,a); a = repmat(a,M,1); end; % Get an expanded "a" afull=comp_filterbank_a(a,M,struct()); %% Compute the scaling of the filters % Individual filter peaks are made square root of the subsampling factor scal=sqrt(afull(:,1)./afull(:,2)); if flags.do_real % Scale the first and last channels scal(1)=scal(1)/sqrt(2); scal(M)=scal(M)/sqrt(2); else % Replicate the centre frequencies and sampling rates, except the first and % last a=[a;flipud(a(2:M-1,:))]; scal=[scal;flipud(scal(2:M-1))]; fc =[fc; -flipud(fc(2:M-1))]; fsupp=[fsupp;flipud(fsupp(2:M-1))]; end; g = cell(1,numel(fc)); gIdxStart = 1; if fmin~=0 % Low-pass filter g{1} = zerofilt(flags.wintype,fs,chan_min,freqtoscale,scaletofreq,scal(1),kv.bwmul,bins,Ls); gIdxStart = gIdxStart + 1; end % High-pass filter g{M} = nyquistfilt(flags.wintype,fs,chan_max,freqtoscale,scaletofreq,scal(M),kv.bwmul,bins,Ls); symmetryflag = 'nonsymmetric'; if freqtoscale(0) < -1e10, symmetryflag = 'symmetric'; end; % All the other filters for gIdx = [gIdxStart:M-1,M+1:numel(fc)] g{gIdx}=warpedblfilter(flags.wintype,kv.bwmul*2,fc(gIdx),fs,freqtoscale,scaletofreq, ... 'scal',scal(gIdx),'inf',symmetryflag); end function g = nyquistfilt(wintype,fs,chan_max,freqtoscale,scaletofreq,scal,bwmul,bins,Ls) % This function constructs a high-pass filter centered at the Nyquist % frequency such that the summation properties of the filter bank % remain intact. g=struct(); % Inf normalization as standard g.H = @(L) comp_nyquistfilt(wintype,fs,chan_max,freqtoscale,scaletofreq,bwmul,bins,Ls)*scal; g.foff=@(L) floor(L/2)+1-(numel(g.H(L))+1)/2; g.fs=fs; function g = zerofilt(wintype,fs,chan_min,freqtoscale,scaletofreq,scal,bwmul,bins,Ls) % This function constructs a low-pass filter centered at the zero % frequency such that the summation properties of the filter bank % remain intact. g=struct(); % Inf normalization as standard g.H = @(L) comp_zerofilt(wintype,fs,chan_min,freqtoscale,scaletofreq,bwmul,bins,Ls)*scal; g.foff=@(L) -(numel(g.H(L))+1)/2+1; g.fs=fs; ltfat/inst/filterbank/nonu2ucfmt.m0000664000175000017500000000710612612404256017146 0ustar susnaksusnakfunction cu = nonu2ucfmt(c, p) %-*- texinfo -*- %@deftypefn {Function} nonu2ucfmt %@verbatim %NONU2UCFMT Non-uniform to uniform filterbank coefficient format % Usage: cu=nonu2ucfmt(c,pk) % % Input parameters: % c : Non-uniform filterbank coefficients. % % Output parameters: % cu : Uniform filterbank coefficients. % p : Numbers of copies of each filter. % % cu = NONU2UCFMT(c,p) changes the coefficient format from % non-uniform filterbank coefficients c (M=numel(p) channels) to % uniform coefficients c (sum(p) channels) such that each % channel of cu consinst of de-interleaved samples of channels of c. % % The output cu is a cell-array in any case. % % % References: % S. Akkarakaran and P. Vaidyanathan. Nonuniform filter banks: New % results and open problems. In P. M. C.K. Chui and L. Wuytack, editors, % Studies in Computational Mathematics: Beyond Wavelets, volume 10, pages % 259 -301. Elsevier B.V., 2003. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/nonu2ucfmt.html} %@seealso{nonu2ufilterbank, u2nonucfmt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,mfilename); if isempty(c) error('%s: c must be non-empty.',upper(mfilename)); end if isempty(p) || ~isvector(p) error('%s: pk must be a non-empty vector.',upper(mfilename)); end if iscell(c) M = numel(c); Lc = cellfun(@(cEl) size(cEl,1),c); if all(Lc==Lc(1)) if ~all(p==1) || numel(p)~=M error('%s: Bad format of p for uniform coefficients.',... upper(mfilename)); else cu = c; % End here, this is already uniform. return; end end elseif isnumeric(c) M = size(c,2); if ~all(p==1) || numel(p)~=M error('%s: Bad format of p for uniform coefficients.',... upper(mfilename)); end % Just convert to cell-array and finish cu = cell(M,1); for m=1:M cu{m}=squeeze(c(:,m,:)); end; % End here, there is nothing else to do. return; else error('%s: c must be a cell array or numeric.',upper(mfilename)); end if numel(p) ~= M error(['%s: Number of elements of p does not comply with ',... 'number of channels passed.'],upper(mfilename)); end p = p(:); Mu = sum(p); cu = cell(Mu,1); pkcumsum = cumsum([1;p]); crange = arrayfun(@(pEl,pcEl)pcEl:pcEl+pEl-1,p,pkcumsum(1:end-1),... 'UniformOutput',0); % c can be only cell array at this point for m=1:M for k=1:p(m) cu{crange{m}(k)} = c{m}(k:p(m):end,:); end end % Post check whether the output is really uniform and the numbers of % coefficients are equal Lcu = cellfun(@(cEl) size(cEl,1),cu); if any(Lcu~=Lcu(1)) || sum(Lcu)~=sum(Lc) error(['%s: The combination of c and p does not result in uniform ',... 'coefficients.'],upper(mfilename)); end ltfat/inst/filterbank/filterbankwin.m0000664000175000017500000001573512612404256017714 0ustar susnaksusnakfunction [g,asan,info] = filterbankwin(g,a,varargin); %-*- texinfo -*- %@deftypefn {Function} filterbankwin %@verbatim %FILTERBANKWIN Compute set of filter bank windows from text or cell array % Usage: [g,info] = filterbankwin(g,a,L); % % [g,info]=FILTERBANKWIN(g,a,L) computes a window that fits well with % time shift a and transform length L. The window itself is as a cell % array containing additional parameters. % % The window can be specified directly as a cell array of vectors of % numerical values. In this case, FILTERBANKWIN only checks assumptions % about transform sizes etc. % % [g,info]=FILTERBANKWIN(g,a) does the same, but the windows must be FIR % windows, as the transform length is unspecified. % % FILTERBANKWIN(...,'normal') computes a window for regular % filterbanks, while FILTERBANKWIN(...,'real') does the same for the % positive-frequency only filterbanks. % % The window can also be specified as cell array. The possibilities are: % % {'dual',...} % Canonical dual window of whatever follows. See the examples below. % % {'realdual',...} % Canonical dual window for a positive-frequency filterbank % of whatever follows. See the examples below. % % {'tight',...} % Canonical tight window of whatever follows. See the examples below. % % {'realtight',...} % Canonical tight window for a real-valued for a positive % frequency filterbank of whatever follows. % % The structure info provides some information about the computed % window: % % info.M % Number of windows (equal to the number of channels) % % info.longestfilter % Length of the longest filter % % info.gauss % True if the windows are Gaussian. % % info.tfr % Time/frequency support ratios of the window. Set whenever it makes sense. % % info.isfir % Input is an FIR window % % info.isdual % Output is the dual window of the auxiliary window. % % info.istight % Output is known to be a tight window. % % info.auxinfo % Info about auxiliary window. % % info.gl % Length of windows. % % info.isfac % True if the frame generated by the window has a fast factorization. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/filterbank/filterbankwin.html} %@seealso{filterbank, filterbankdual, filterbankrealdual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % TO DO: Why is there a realtype flag? % Assert correct input. if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; if ~iscell(g) error('%s: Window(s) g must be a cell array.',upper(mfilename)); end; if isempty(g) || any(cellfun(@isempty,g)) error('%s: Window(s) g must not be empty.',upper(mfilename)); end; definput.keyvals.L=[]; definput.flags.realtype={'normal','real'}; [flags,kv,L]=ltfatarghelper({'L'},definput,varargin); if ischar(g{1}) winname=lower(g{1}); switch(winname) case {'dual'} optArgs = g(3:end); [g,~,info.auxinfo] = filterbankwin(g{2},a,L); g = filterbankdual(g,a,L,optArgs{:}); info.isdual=1; case {'realdual'} optArgs = g(3:end); [g,~,info.auxinfo] = filterbankwin(g{2},a,L); g = filterbankrealdual(g,a,L,optArgs{:}); info.isdual=1; case {'tight'} [g,~,info.auxinfo] = filterbankwin(g{2},a,L); g = filterbanktight(g,a,L); info.istight=1; case {'realtight'} [g,~,info.auxinfo] = filterbankwin(g{2},a,L); g = filterbankrealtight(g,a,L); info.istight=1; otherwise error('%s: Unsupported window type %s.',winname,upper(mfilename)); end; end; do_info = nargout>2; info.M=numel(g); info.gl=zeros(info.M,1); info.offset=zeros(info.M,1); info.ispainless=1; info.isfractional=0; info.isuniform=0; info.isfir=1; [asan,info]=comp_filterbank_a(a,info.M,info); for m=1:info.M [g{m},info_win] = comp_fourierwindow(g{m},L,upper(mfilename)); if do_info if isfield(g{m},'H') % Here we only want to find out the frequency support if isa(g{m}.H,'function_handle') if isempty(L) error('L:undefined',... ['%s: L is necessary for determining support ',... 'of g.H'],upper(mfilename)); end tmpH=g{m}.H(L); elseif isnumeric(g{m}.H) tmpH=g{m}.H; if isempty(L) || L == g{m}.L; % There has to be g{m}.L already present L = g{m}.L; else % In case L ~= g{m}.L we cannot be sure whether g is % still band-limited info.ispainless=0; end end; % Check the painless condition if numel(tmpH) > L/asan(m,1)*asan(m,2); info.ispainless=0; end else % No subsampling means painless case for any filter if ~(info.isuniform && asan(m,1) == 1) info.ispainless=0; end info.gl(m)=numel(g{m}.h); info.offset(m)=g{m}.offset; end; end if info_win.isfir && asan(m,2) ~=1 % FIR filter cannot have a fractional subsampling if rem(asan(m,1)/asan(m,2),1)==0 % ... but this is still an integer subsampling asan = [asan(m,1)/asan(m,2),1]; info.a(m,:) = asan; else error(['%s: Fractional subsampling cannot be used with FIR '... 'filters.'],upper(mfilename)); end end % info.isfir==1 only if all filters are FIR if isfield(info_win,'isfir') if ~info_win.isfir && info.isfir info.isfir = 0; end end end; info.isfac=info.isuniform || info.ispainless; if info.isfractional && info.isuniform error('%s: The uniform algorithms cannot handle fractional downsampling.', ... upper(mfilename)); end; if info.isfir info.longestfilter=max(info.gl); % Does not evaluate as true if L is empty if L> Time-frequency analysis and Wavelets signals ctestfun noise pinknoise expchirp bat batmask greasy cocktailparty gspi linus ltfatlogo otoclick traindoppler cameraman lichtenstein ltfattext quadratic ambiguityfunction wignervilledist drihaczekdist quadtfdist plotquadtfdist operators operatornew operator ioperator operatoradj operatorappr operatoreigs operatormatrix framemul iframemul framemuladj framemulappr framemuleigs gabmulappr spreadop spreadinv spreadadj spreadfun spreadeigs deprecated convolve gabelitistlasso gabgrouplasso gablasso gabmuleigs gabmul framematrix iufilterbank iunsdgt iunsdgtreal tfmat uwfbtbounds uwpfbtbounds sigproc rms normalize gaindb crestfactor uquant firwin firkaiser fir2long long2fir firfilter blfilter warpedblfilter pfilt magresp transferfunction pgrpdelay rampup rampdown rampsignal thresh largestr largestn dynlimit groupthresh rgb2jpeg jpeg2rgb qam4 iqam4 gabor tconv dsft zak izak col2diag s0norm dgt idgt isgram isgramreal dgt2 idgt2 dgtreal idgtreal gabwin projkern dgtlength dwilt idwilt dwilt2 idwilt2 wmdct iwmdct wmdct2 iwmdct2 wil2rect rect2wil wilwin dwiltlength gabdual gabtight gabfirdual gaboptdual gabfirtight gabopttight gabconvexopt gabprojdual gabmixdual wilorth wildual gabframebounds gabrieszbounds wilbounds gabdualnorm gabframediag wilframediag gabphasegrad gabphasederiv gabreassign gabreassignadjust constructphase constructphasereal phaselock phaseunlock symphase matrix2latticetype latticetype2matrix shearfind noshearlength tfplot plotdgt plotdgtreal plotdwilt plotwmdct sgram gabimagepars resgram instfreqplot phaseplot blockproc block blockdevices blockread blockplay blockpanel blockpanelget blockdone blockwrite blockframeaccel blockframepairaccel blockana blocksyn blockfigure blockplot ltfatplay demos demo_dgt demo_gabfir demo_wavelets demo_imagecompression demo_audiocompression demo_audiodenoise demo_ofdm demo_audioshrink demo_gabmulappr demo_bpframemul demo_frsynabs demo_filterbanksynchrosqueeze demo_nsdgt demo_pgauss demo_pbspline demo_gabmixdual demo_framemul demo_phaseplot demo_phaseret demo_nextfastfft demo_filterbanks demo_audscales demo_auditoryfilterbank demo_wfbt demo_blockproc_basicloop demo_blockproc_paramequalizer demo_blockproc_denoising demo_blockproc_slidingsgram demo_blockproc_slidingcqt demo_blockproc_slidingerblets demo_blockproc_dgtequalizer demo_blockproc_effects auditory semiaudplot audtofreq freqtoaud audspace audspacebw erbtofreq freqtoerb erbspace erbspacebw audfiltbw rangecompress rangeexpand gammatonefir nonstatgab nsdgt unsdgt insdgt nsdgtreal unsdgtreal insdgtreal nsgabdual nsgabtight nsgabframebounds nsgabframediag plotnsdgt plotnsdgtreal wavelets fwt ifwt fwt2 ifwt2 ufwt iufwt fwtlength fwtclength wfbt iwfbt uwfbt iuwfbt wpfbt iwpfbt uwpfbt iuwpfbt wpbest wfbtlength wfbtclength wpfbtclength dtwfb idtwfb dtwfbreal idtwfbreal wfbtinit dtwfbinit wfbtput wfbtremove wfbt2filterbank wpfbt2filterbank dtwfb2filterbank fwtinit wfbtbounds wpfbtbounds dtwfbbounds plotwavelets wfiltinfo wfiltdtinfo wavfun wavcell2pack wavpack2cell wfilt_algmband wfilt_cmband wfilt_coif wfilt_db wfilt_dden wfilt_dgrid wfilt_hden wfilt_lemarie wfilt_matlabwrapper wfilt_mband wfilt_remez wfilt_symds wfilt_spline wfilt_sym wfilt_symdden wfilt_symorth wfilt_symtight wfilt_qshifta wfilt_qshiftb wfilt_oddevena wfilt_oddevenb wfilt_optsyma wfilt_optsymb wfilt_ddena wfilt_ddenb wfiltdt_qshift wfiltdt_optsym wfiltdt_oddeven wfiltdt_dden filterbank filterbank ufilterbank ifilterbank filterbankwin filterbanklength filterbanklengthcoef cqt icqt erblett ierblett cqtfilters erbfilters warpedfilters audfilters filterbankdual filterbanktight filterbankrealdual filterbankrealtight filterbankbounds filterbankrealbounds filterbankresponse filterbankfreqz nonu2ufilterbank u2nonucfmt nonu2ucfmt plotfilterbank filterbankphasegrad filterbankreassign filterbanksynchrosqueeze fourier fftindex modcent floor23 floor235 ceil23 ceil235 nextfastfft dft idft fftreal ifftreal gga chirpzt fftgram plotfft plotfftreal involute peven podd pconv pxcorr lconv lxcorr isevenfunction middlepad expwave pchirp pgauss psech pbspline shah pheaviside prect psinc pherm hermbasis dfracft ffracft fftresample dctresample pderiv fftanalytic dcti dctii dctiii dctiv dsti dstii dstiii dstiv frames frame framepair framedual frametight frameaccel frana frsyn frsynmatrix frgramian frameoperator framediag franaiter frsyniter plotframe framegram framebounds framered framelength framelengthcoef frameclength framecoef2native framenative2coef framecoef2tf frametf2coef framecoef2tfplot franabp franalasso franagrouplasso frsynabs base ltfatstart ltfatstop ltfathelp ltfatmex ltfatbasepath isoctave ltfatarghelper ltfatgetdefaults ltfatsetdefaults scalardistribute mulaclab ltfat/inst/ltfat/PKG_ADD0000644000175000017500000000036612612404251014667 0ustar susnaksusnak# Only execute it if it exists on the path. PKG_ADD also gets called from the directory # where the binaries are installed, and here ltfatstart should not be called. if exist("ltfatstart","file") # Start ltfat quietly ltfatstart(0); end; ltfat/inst/ltfat/DESCRIPTION0000664000175000017500000000155312612404251015362 0ustar susnaksusnakName: LTFAT Version: 2.1.1 Date: 2015-10-23 Author: Peter L. Soendergaard Maintainer: Zdenek Prusa Title: The Large Time-Frequency Analysis Toolbox Description: The Large Time/Frequency Analysis Toolbox (LTFAT) is a Matlab/Octave toolbox for working with time-frequency analysis, wavelets and signal processing. It is intended both as an educational and a computational tool. The toolbox provides a large number of linear transforms including Gabor and wavelet transforms along with routines for constructing windows (filter prototypes) and routines for manipulating coefficients. License: GPLv3+ Depends: octave (>= 3.8.0) BuildRequires: fftw3 [Debian] libfftw3-3, lapack [Debian] liblapack3, blas [Debian] libblas3, portaudio [Debian] portaudio19-dev Java Runtime [Debian] default-jre Url: http://ltfat.github.io/ ltfat/inst/ltfat/inst/0000775000175000017500000000000012612404251014625 5ustar susnaksusnakltfat/inst/ltfat/inst/CITATION0000664000175000017500000000120612612404251015761 0ustar susnaksusnakTo cite LTFAT in publications please use: Peter L. Søndergaard, Bruno Torrésani, Peter Balazs. The Linear Time-Frequency Analysis Toolbox. International Journal of Wavelets, Multiresolution Analysis and Information Processing, 10(4), 2012. A BibTex entry for LaTex users: @article{ltfatnote015, author = "Peter L. S{\o}ndergaard and Bruno Torr\'esani and Peter Balazs", title = {{The Linear Time Frequency Analysis Toolbox}}, journal = "International Journal of Wavelets, Multiresolution Analysis and Information Processing", year = 2012, volume = 10, number = 4, doi = "10.1142/S0219691312500324" } ltfat/inst/test_all_ltfat.m0000664000175000017500000000761712612404256015735 0ustar susnaksusnakfunction [total_tests_failed,list_of_failed_tests]=test_all_ltfat(prec,varargin) global LTFAT_TEST_TYPE; definput.keyvals.tests=[]; definput.keyvals.ignore={}; [flags,kv]=ltfatarghelper({'tests'},definput,varargin); tests_todo={ 'dgt','dwilt','wmdct',... 'dgt_fb','multiwin','gabfirtight',... 'purefreq','zak',... 'gabmulappr',... 'dgt2','dwilt2','wmdct2',... 'firwin',... 'spread', 'dsft', 'thresh',... 'pconv','lconv','involute',... 'signals','realout','windrivers',... 'nsdgt','filterbank',... 'pgauss','pfilt',... 'rangecompress',... 'gabmuleigs','phaselock',... 'fwt','blockfwt','ufwt','wfbt','uwfbt','wpfbt','uwpfbt','fwt2','undeceq',... 'wfbt2filterbank','freqorder','gga','chirpzt',... 'frames', 'frametf', 'frft', 'nonu2ufilterbank', 'dtwfb', 'dtwfb2filterbank',... 'ambiguityfunction','wignervilledist' }; if ~isempty(kv.tests) if ischar(kv.tests) kv.tests = {kv.tests}; end tests_todo = kv.tests; end if ~isempty(kv.ignore) if ischar(kv.ignore) kv.ignore = {kv.ignore}; end if ~iscell(kv.ignore) error('%s: Ignored tests list is incorrect.',upper(mfilename)); end ignoreList = []; ignoreUsed = []; ignoreCell = kv.ignore; for ii=1:numel(tests_todo) res = cellfun(@(iEl) strcmpi(tests_todo{ii},iEl) , ignoreCell); if any(res) ignoreList(end+1) = ii; disp(sprintf('Ignoring test: %s',tests_todo{ii})) end [~,idx]=find(res>0); ignoreUsed(end+1:end+numel(idx)) = idx; end if ~isempty(ignoreList) tests_todo(ignoreList) = []; end if numel(ignoreUsed)~=numel(ignoreCell) ignoreCell(ignoreUsed) = []; strToPlot = cellfun(@(iEl) [iEl,', '],ignoreCell,'UniformOutput',0); strToPlot = cell2mat(strToPlot); error('%s: The following ignored tests were not found: %s',... upper(mfilename),strToPlot(1:end-2)); end end precarray={'double','single'}; if nargin >0 && ~strcmpi(prec,'all') if any(cellfun(@(pEl)strcmpi(pEl,prec),precarray)) precarray={prec}; else error('%s: Unknown data precision.',upper(mfilename)); end end %-*- texinfo -*- %@deftypefn {Function} test_all_ltfat %@verbatim % Testing of pbspline has been removed, as it causes too much trouble. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/testing/test_all_ltfat.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . total_tests_failed=0; list_of_failed_tests={}; for precidx=1:numel(precarray) prec=precarray{precidx}; LTFAT_TEST_TYPE=prec; for ii=1:length(tests_todo) test_failed=feval(['test_',tests_todo{ii}]); total_tests_failed=total_tests_failed+test_failed; if test_failed>0 list_of_failed_tests{end+1}=['test_',tests_todo{ii},' ',prec]; end; end; end; clear -global LTFAT_TEST_TYPE; disp(' '); if total_tests_failed==0 disp('ALL TESTS PASSED'); else s=sprintf('%i TESTS FAILED',total_tests_failed); disp(s); disp('The following test scripts contained failed tests'); for ii=1:length(list_of_failed_tests) disp([' ',list_of_failed_tests{ii}]); end; end; ltfat/inst/fourier/0000775000175000017500000000000012612404256014216 5ustar susnaksusnakltfat/inst/fourier/fftanalytic.m0000664000175000017500000000514412612404256016704 0ustar susnaksusnakfunction z = fftanalytic(f,varargin) %-*- texinfo -*- %@deftypefn {Function} fftanalytic %@verbatim %FFTANALYTIC Compute analytic representation % Usage: z = fftanalytic(f); % z = fftanalytic(f,L); % z = fftanalytic(f,L,dim); % % Input parameters: % f : Input data. % L : Extend or truncate f to this length. % dim : Dimension to along which to apply the computations. % Output parameters: % z : Analytic signal. % % FFTANALYTIC(f) computes the analytic representation of a % real-valued signal f. The analytic representation is computed % through the FFT of f. The computations are done along the first % non-singleton dimension. % % FFTANALYTIC(f,L) acts as before but f is padded with zeros or % truncated to length L. % % FFTANALYTIC(f,L,dim) in addition allows specifying the dimension % along which the computation should be done. % % The real part of the analytic representation z equals the signal % f and the imaginary part is the Hilbert transform of f. % % The instananeous amplitude (a Hilbert envelope) of the signal f can % be computed as: % % abs(fftanalytic(f)); % % The instantaneous phase of the function f can be computed as: % % angle(fftanalytic(f)); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/fftanalytic.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven if ~isreal(f) error('%s: The input should be a real-valued numeric array.',... upper(mfilename)); end; definput.keyvals.dim=[]; definput.keyvals.L=[]; [~,~,L,dim]=ltfatarghelper({'L','dim'},definput,varargin); % Pre-shape the signal [f,L,~,~,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,upper(mfilename)); f = postpad(f,L); % Run the computation z = comp_fftanalytic(f); % Post-shape the signal z = assert_sigreshape_post(z,dim,permutedsize,order); ltfat/inst/fourier/dctii.m0000664000175000017500000000646412612404256015502 0ustar susnaksusnakfunction c=dctii(f,L,dim) %-*- texinfo -*- %@deftypefn {Function} dctii %@verbatim %DCTII Discrete Consine Transform type II % Usage: c=dctii(f); % c=dctii(f,L); % c=dctii(f,[],dim); % c=dctii(f,L,dim); % % DCTII(f) computes the discrete cosine transform of type II of the % input signal f. If f is multi-dimensional, the transformation is % applied along the first non-singleton dimension. % % DCTII(f,L) zero-pads or truncates f to length L before doing the % transformation. % % DCTII(f,[],dim) or DCTII(f,L,dim) applies the transformation along % dimension dim. % % The transform is real (output is real if input is real) and orthonormal. % % This is the inverse of DCTIII. % % Let f be a signal of length L, let c=DCTII(f) and define the % vector w of length L by % % w = [1/sqrt(2) 1 1 1 1 ...] % % Then % % L-1 % c(n+1) = sqrt(2/L) * sum w(n+1)*f(m+1)*cos(pi*n*(m+.5)/L) % m=0 % % Examples: % --------- % % The following figures show the first 4 basis functions of the DCTII of % length 20: % % % The dctiii is the adjoint of dctii. % F=dctiii(eye(20)); % % for ii=1:4 % subplot(4,1,ii); % stem(F(:,ii)); % end; % % % References: % K. Rao and P. Yip. Discrete Cosine Transform, Algorithms, Advantages, % Applications. Academic Press, 1990. % % M. V. Wickerhauser. Adapted wavelet analysis from theory to software. % Wellesley-Cambridge Press, Wellesley, MA, 1994. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/dctii.html} %@seealso{dctiii, dctiv, dstii} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_PUREFREQ % REFERENCE: REF_DCTII error(nargchk(1,3,nargin)); if nargin<3 dim=[]; end; if nargin<2 L=[]; end; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'DCTII'); if ~isempty(L) f=postpad(f,L); end; c=comp_dct(f,2); % c=zeros(L,W,assert_classname(f)); % % m1=1/sqrt(2)*exp(-(0:L-1)*pi*i/(2*L)).'; % m1(1)=1; % % m2=1/sqrt(2)*exp((1:L-1)*pi*i/(2*L)).'; % % s1=fft([f;flipud(f)]); % % % This could be done by a repmat instead. % for w=1:W % c(:,w)=s1(1:L,w).*m1+[0;s1(2*L:-1:L+2,w).*m2]; % end; % % c=c/sqrt(L)/2; if isreal(f) c=real(c); end; c=assert_sigreshape_post(c,dim,permutedsize,order); % This is a slow, but convenient way of expressing the algorithm. %R=1/sqrt(2)*[diag(exp((0:L-1)*pi*i/(2*L)));... % zeros(1,L); ... % [zeros(L-1,1),flipud(diag(exp(-(1:L-1)*pi*i/(2*L))))]]; %R(1,1)=1; %c=R'*fft([f;flipud(f)])/sqrt(L)/2; ltfat/inst/fourier/middlepad.m0000664000175000017500000001153112612404256016320 0ustar susnaksusnakfunction f=middlepad(f,L,varargin) %-*- texinfo -*- %@deftypefn {Function} middlepad %@verbatim %MIDDLEPAD Symmetrically zero-extends or cuts a function % Usage: h=middlepad(f,L); % h=middlepad(f,L,dim); % h=middlepad(f,L,...); % % MIDDLEPAD(f,L) cuts or zero-extends f to length L by inserting % zeros in the middle of the vector, or by cutting in the middle % of the vector. % % If f is whole-point even, MIDDLEPAD(f,L) will also be whole-point % even. % % MIDDLEPAD(f,L,dim) does the same along dimension dim. % % If f has even length, then f will not be purely zero-extended, but % the last element will be repeated once and multiplied by 1/2. % That is, the support of f will increase by one! % % Adding the flag 'wp' as the last argument will cut or extend whole point % even functions. Adding 'hp' will do the same for half point even % functions. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/middlepad.html} %@seealso{isevenfunction, fir2long, fftresample} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: OK % REFERENCE: OK if nargin<2 error('Too few input parameters.'); end; if (numel(L)~=1 || ~isnumeric(L)) error('L must be a scalar'); end; if rem(L,1)~=0 error('L must be an integer.'); end; if L<1 error('L must be larger than 0.'); end; % Define initial value for flags and key/value pairs. definput.flags.centering = {'wp','hp'}; definput.keyvals.dim = []; [flags,keyvals,dim]=ltfatarghelper({'dim'},definput,varargin); [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'MIDDLEPAD'); Lorig=Ls; % Skip the main section if there is nothing to do. This is necessary % because some of the code below cannot handle the case of 'nothing to do' if L~=Ls if flags.do_wp % --------------- WPE case -------------------------------------- if Lorig==1 % Rather trivial case f=[f(1,:);zeros(L-1,W,assert_classname(f))]; else if Lorig>L % Cut if mod(L,2)==0 % L even. Use average of endpoints. f=[f(1:L/2,:);(f(L/2+1,:)+f(Lorig-L/2+1,:))/2;f(Lorig-L/2+2:Lorig,:)]; else % No problem, just cut. f=[f(1:(L+1)/2,:);f(Lorig-(L-1)/2+1:Lorig,:)]; end; else d=L-Lorig; % Extend if mod(Lorig,2)==0 % Lorig even. We must split a value. f=[f(1:Lorig/2,:);... f(Lorig/2+1,:)/2;... zeros(d-1,W,assert_classname(f));... f(Lorig/2+1,:)/2;... f(Lorig/2+2:Lorig,:)]; else % Lorig is odd, we can just insert zeros. f=[f(1:(Lorig+1)/2,:);zeros(d,W,assert_classname(f));f((Lorig+3)/2:Lorig,:)]; end; end; end; else % ------------------ HPE case ------------------------------------ if Lorig==1 else if Lorig>L d=Lorig-L; % Cut if mod(L,2)==0 % L even % No problem, just cut. f=[f(1:L/2,:);... f(Lorig-L/2+1:Lorig,:);]; else % Average of endpoints. f=[f(1:(L-1)/2,:);(f((L+1)/2,:)+f(Lorig-(L-1)/2,:))/2;... f(Lorig-(L-1)/2+1:Lorig,:);]; end; else d=L-Lorig; % Extend if mod(Lorig,2)==0 % Lorig even. We can just insert zeros in the middle. f=[f(1:Lorig/2,:);... zeros(d,W,assert_classname(f));... f(Lorig/2+1:Lorig,:)]; else % Lorig odd. We need to split a value in two f=[f(1:(Lorig-1)/2,:);... f((Lorig+1)/2,:)/2;... zeros(d-1,W,assert_classname(f));... f((Lorig+1)/2,:)/2;... f((Lorig-1)/2+2:Lorig,:)]; end; end; end; end; end; f=assert_sigreshape_post(f,dim,permutedsize,order); ltfat/inst/fourier/pxcorr.m0000664000175000017500000000317112612404256015713 0ustar susnaksusnakfunction h=pxcorr(f,g,varargin) %-*- texinfo -*- %@deftypefn {Function} pxcorr %@verbatim %PXCORR Periodic cross correlation % Usage: h=pxcorr(f,g) % % PXCORR(f,g) computes the periodic cross correlation of the input % signals f and g. The cross correlation is defined by % % L-1 % h(l+1) = sum f(k+1) * conj(g(k-l+1)) % k=0 % % In the above formula, k-l is computed modulo L. % % PXCORR(f,g,'normalize') does the same, but normalizes the output by % the product of the l^2-norm of f and g. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/pxcorr.html} %@seealso{dft, pfilt, involute} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard, Jordy van Velthoven definput.flags.type={'nonormalize','normalize'}; flags = ltfatarghelper({},definput,varargin); h = pconv(f, g, 'r'); if flags.do_normalize h = h/(norm(f)*norm(g)); end ltfat/inst/fourier/plotfftreal.m0000664000175000017500000001164712612404256016727 0ustar susnaksusnakfunction plotfftreal(coef,varargin) %-*- texinfo -*- %@deftypefn {Function} plotfftreal %@verbatim %PLOTFFTREAL Plot the output from FFTREAL % Usage: plotfftreal(coef); % plotfftreal(coef,fs); % % PLOTFFTREAL(coef) plots the output from the FFTREAL function. The % frequency axis will use normalized frequencies between 0 and 1 (the % Nyquist frequency). It is assumed that the length of the original % transform was even. % % PLOTFFTREAL(coef,fs) does the same for the FFTREAL of a signal % sampled at a sampling rate of fs Hz. % % PLOTFFTREAL(coef,fs,dynrange) additionally limits the dynamic range of the % plot. See the description of the 'dynrange' parameter below. % % PLOTFFTREAL accepts the following optional arguments: % % 'dynrange',r Limit the dynamical range to r by using a colormap in % the interval [chigh-r,chigh], where chigh is the highest % value in the plot. The default value of [] means to not % limit the dynamical range. % % 'db' Apply 20*log_{10} to the coefficients. This makes % it possible to see very weak phenomena, but it might show % too much noise. This is the default. % % 'dbsq' Apply 10*log_{10} to the coefficients. Same as the % 'db' option, but assumes that the input is already squared. % % 'lin' Show the coefficients on a linear scale. This will % display the raw input without any modifications. Only works for % real-valued input. % % 'linsq' Show the square of the coefficients on a linear scale. % % 'linabs' Show the absolute value of the coefficients on a linear % scale. % % 'N',N Specify the transform length N. Use this if you are % unsure if the original input signal was of even length. % % 'dim',dim If coef is multidimensional, dim indicates the % dimension along which are the individual channels oriented. % Value 1 indicates columns, value 2 rows. % % 'flog' Use logarithmic scale for the frequency axis. % % % In addition to these parameters, PLOTFFTREAL accepts any of the flags % from NORMALIZE. The coefficients will be normalized as specified % before plotting. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/plotfftreal.html} %@seealso{plotfft, fftreal} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; definput.import={'ltfattranslate','normalize'}; definput.importdefaults={'null'}; definput.flags.log={'db','dbsq','lin','linsq','linabs'}; definput.flags.freqscale={'flin','flog'}; definput.keyvals.fs=[]; definput.keyvals.dynrange=[]; definput.keyvals.opts={}; definput.keyvals.N=[]; definput.keyvals.dim=[]; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); % if ~isvector(coef) % error('%s: Input is multidimensional.',upper(mfilename)); % end; [coef,~,Lc]=assert_sigreshape_pre(coef,[],kv.dim,upper(mfilename)); N=kv.N; if isempty(N) N=2*(Lc-1); end N2=floor(N/2)+1; if N2~=Lc error('%s: Size mismatch.',upper(mfilename)); end; coef=normalize(coef,flags.norm); % Apply transformation to coefficients. if flags.do_db coef=20*log10(abs(coef)+realmin); end; if flags.do_dbsq coef=10*log10(abs(coef)+realmin); end; if flags.do_linsq coef=abs(coef).^2; end; if flags.do_linabs coef=abs(coef); end; if flags.do_lin if ~isreal(coef) error(['Complex valued input cannot be plotted using the "lin" flag.',... 'Please use the "linsq" or "linabs" flag.']); end; end; % 'dynrange' parameter is handled by thresholding the coefficients. if ~isempty(kv.dynrange) maxclim=max(coef(:)); coef(coef. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/fourier/pderiv.m0000664000175000017500000000453512612404256015674 0ustar susnaksusnakfunction fd=pderiv(f,dim,difforder) %-*- texinfo -*- %@deftypefn {Function} pderiv %@verbatim %PDERIV Derivative of smooth periodic function % Usage: fd=pderiv(f); % fd=pderiv(f,dim); % fd=pderiv(f,dim,difforder); % % PDERIV(f) will compute the derivative of f using a using a 4th order % centered finite difference scheme. f must have been obtained by a % regular sampling. If f is a matrix, the derivative along the columns % will be found. % % PDERIV(f,dim) will do the same along dimension dim. % % PDERIV(f,dim,difforder) uses a centered finite difference scheme of % order difforder instead of the default. % % PDERIV(f,dim,Inf) will compute the spectral derivative using a DFT. % % PDERIV assumes that f is a regular sampling of a function on the % torus [0,1). The derivative of a function on a general torus [0,T) % can be found by scaling the output by 1/T. %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/pderiv.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Assert correct input. error(nargchk(1,3,nargin)); if nargin==1 dim=[]; end; if nargin<3 difforder=4; end; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],dim,'PDERIV'); switch(difforder) case 2 fd = L*(circshift(f,-1)-circshift(f,1))/2; case 4 fd = L*(-circshift(f,-2)+8*circshift(f,-1)-8*circshift(f,1)+ ... circshift(f,2))/12; case Inf n=fftindex(L,0); n=repmat(n,1,W); fd=2*pi*ifft(i*n.*fft(f)); if isreal(f) fd=real(fd); end; otherwise error('The specified differentation order is not implemented.'); end; fd=assert_sigreshape_post(fd,dim,permutedsize,order); ltfat/inst/fourier/dfracft.m0000664000175000017500000000513512612404256016011 0ustar susnaksusnakfunction frf=dfracft(f,a,varargin) %-*- texinfo -*- %@deftypefn {Function} dfracft %@verbatim %DFRACFT Discrete Fractional Fourier transform % Usage: V=dfracft(f,a,p); % V=dfracft(f,a); % % DFRACFT(f,a) computes the discrete fractional Fourier Transform of the % signal f to the power a. For a=1 it corresponds to the ordinary % discrete Fourier Transform. If f is multi-dimensional, the % transformation is applied along the first non-singleton dimension. % % DFRACFT(f,a,dim) does the same along dimension dim. % % DFRACFT(f,a,[],p) or DFRACFT(f,a,dim,p) allows to choose the order % of approximation of the second difference operator (default: p=2*). % % % References: % A. Bultheel and S. Martinez. Computation of the Fractional Fourier % Transform. Appl. Comput. Harmon. Anal., 16(3):182-202, 2004. % % H. M. Ozaktas, Z. Zalevsky, and M. A. Kutay. The Fractional Fourier % Transform. John Wiley and Sons, 2001. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/dfracft.html} %@seealso{ffracft, dft, hermbasis, pherm} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Christoph Wiesmeyr % TESTING: TEST_HERMBASIS % REFERENCE: OK if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.p = 2; definput.keyvals.dim = []; [flags,keyvals,dim,p]=ltfatarghelper({'dim','p'},definput,varargin); [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],dim,upper(mfilename)); H = hermbasis(L,p); % set up the eigenvalues k=0:L-1; lam = exp(-1i*k*a*pi/2); lam=lam(:); % correction for even signal lengths if ~rem(L,2) lam(end)=exp(-1i*L*a*pi/2); end % shuffle the eigenvalues in the right order even=~mod(L,2); cor=2*floor(L/4)+1; for k=(cor+1):2:(L-even) lam([k,k+1])=lam([k+1,k]); end frf =H*(bsxfun(@times,lam,H'*f)); frf=assert_sigreshape_post(frf,dim,permutedsize,order); ltfat/inst/fourier/dctiv.m0000664000175000017500000000625712612404256015517 0ustar susnaksusnakfunction c=dctiv(f,L,dim) %-*- texinfo -*- %@deftypefn {Function} dctiv %@verbatim %DCTIV Discrete Consine Transform type IV % Usage: c=dctiv(f); % % DCTIV(f) computes the discrete cosine transform of type IV of the % input signal f. If f is multi-dimensional, the transformation is % applied along the first non-singleton dimension. % % DCTIV(f,L) zero-pads or truncates f to length L before doing the % transformation. % % DCTIV(f,[],dim) or DCTIV(f,L,dim) applies the transformation along % dimension dim. % % The transform is real (output is real if input is real) and % orthonormal. It is its own inverse. % % Let f be a signal of length L and let c=DCTIV(f). Then % % L-1 % c(n+1) = sqrt(2/L) * sum f(m+1)*cos(pi*(n+.5)*(m+.5)/L) % m=0 % % Examples: % --------- % % The following figures show the first 4 basis functions of the DCTIV of % length 20: % % % The dctiv is its own adjoint. % F=dctiv(eye(20)); % % for ii=1:4 % subplot(4,1,ii); % stem(F(:,ii)); % end; % % % References: % K. Rao and P. Yip. Discrete Cosine Transform, Algorithms, Advantages, % Applications. Academic Press, 1990. % % M. V. Wickerhauser. Adapted wavelet analysis from theory to software. % Wellesley-Cambridge Press, Wellesley, MA, 1994. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/dctiv.html} %@seealso{dctii, dctiii, dstii} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_PUREFREQ % REFERENCE: REF_DCTIV error(nargchk(1,3,nargin)); if nargin<3 dim=[]; end; if nargin<2 L=[]; end; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'DCTIV'); if ~isempty(L) f=postpad(f,L); end; c = comp_dct(f,4); % s1=zeros(2*L,W,assert_classname(f)); % c=zeros(L,W,assert_classname(f)); % % m1=1/sqrt(2)*exp(-(0:L-1)*pi*i/(2*L)).'; % m2=1/sqrt(2)*exp((1:L)*pi*i/(2*L)).'; % % for w=1:W % s1(:,w)=[m1.*f(:,w);flipud(m2).*f(L:-1:1,w)]; % end; % % s1=exp(-pi*i/(4*L))*fft(s1)/sqrt(2*L); % % % This could be done by a repmat instead. % for w=1:W % c(:,w)=s1(1:L,w).*m1+s1(2*L:-1:L+1,w).*m2; % end; % % if isreal(f) % c=real(c); % end; c=assert_sigreshape_post(c,dim,permutedsize,order); % This is a slow, but convenient way of expressing the algorithm. %R=1/sqrt(2)*[diag(exp(-(0:L-1)*pi*i/(2*L)));... % flipud(diag(exp((1:L)*pi*i/(2*L))))]; %c=exp(-pi*i/(4*L))*R.'*fft(R*f)/sqrt(2*L); ltfat/inst/fourier/floor23.m0000664000175000017500000000620612612404256015666 0ustar susnaksusnakfunction [nfft,tableout]=floor23(n) %-*- texinfo -*- %@deftypefn {Function} floor23 %@verbatim %FLOOR23 Previous number with only 2,3 factors % Usage: nceil=floor23(n); % % FLOOR23(n) returns the first number less than or equal to n, % which can be written as a product of powers of 2 and 3. % % The algorithm will look up the best size in a table, which is computed % the first time the function is run. If the input size is larger than the % largest value in the table, the input size will be reduced by factors of % 2, until it is in range. % % [nceil,table]=FLOOR23(n) additionally returns the table used for lookup. % % Examples: % --------- % % Return the first number smaller or equal to 26 that can be written % solely as products of powers of 2 and 3*: % % floor23(26) % % This plot shows the behaviour of FLOOR23 and CEIL23 for numbers % up to 100: % % x=1:100; % plot(x,floor23(x),x,ceil23(x)); % legend('floor23','ceil23','Location','Northwest'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/floor23.html} %@seealso{ceil23, floor235, nextfastfft} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard persistent table; maxval=2^20; if isempty(table) % Compute the table for the first time, it is empty. l2=log(2); l3=log(3); l5=log(5); lmaxval=log(maxval); table=zeros(143,1); ii=1; prod2=1; for i2=0:floor(lmaxval/l2) prod3=prod2; for i3=0:floor((lmaxval-i2*l2)/l3) table(ii)=prod3; prod3=prod3*3; ii=ii+1; end; prod2=prod2*2; end; table=sort(table); end; % Copy input to output. This allows us to efficiently work in-place. nfft=n; % Handle input of any shape by Fortran indexing. for ii=1:numel(n) n2reduce=0; if n(ii)>maxval % Reduce by factors of 2 to get below maxval n2reduce=ceil(log2(nfft(ii)/maxval)); nfft(ii)=nfft(ii)/2^n2reduce; end; % Use a simple bisection method to find the answer in the table. from=1; to=numel(table); while from<=to mid = round((from + to)/2); diff = table(mid)-nfft(ii); if diff<0 from=mid+1; else to=mid-1; end end if nfft(ii)~=table(from) nfft(ii)=table(from-1); end; % Add back the missing factors of 2 (if any) nfft(ii)=nfft(ii)*2^n2reduce; end; tableout=table; ltfat/inst/fourier/pbspline.m0000664000175000017500000002663512612404256016224 0ustar susnaksusnakfunction [g,nlen] = pbspline(L,order,a,varargin) %-*- texinfo -*- %@deftypefn {Function} pbspline %@verbatim %PBSPLINE Periodized B-spline % Usage: g=pbspline(L,order,a,...); % [g,nlen]=pbspline(L,order,a,...); % % Input parameters: % L : Length of window. % order : Order of B-spline. % a : Time-shift parameter for partition of unity. % Output parameters: % g : Fractional B-spline. % nlen : Number of non-zero elements in out. % % PBSPLINE(L,order,a) computes a (slightly modified) B-spline of order % order of total length L. % % If shifted by the distance a, the returned function will form a % partition of unity. The result is normalized such that the functions sum % to 1/sqrt(a). % % PBSPLINE takes the following flags at the end of the input arguments: % % 'ed' Even discrete fractional spline. This is the default % % 'xd' 'flat' discrete fractional spline. % % 'stard' 'pointy' discrete fractional spline % % 'ec' Even fractional spline by sampling. % % 'xc' 'flat' fractional spline by sampling. % % 'starc' 'pointy' fractional spline by sampling. % % 'wp' Generate whole point centered splines. This is the default. % % 'hp' Generate half point centered splines. % % The different types are accurately described in the referenced paper. % Generally, the 'd' types of splines are very fast to compute, while % the 'c' types are samplings of the continuous splines. The 'e' types % coincides with the regular B-splines for integer orders. The 'x' types % do not coincide, but generate Gabor frames with favorable frame % bounds. The default type is 'ed' to guarantee fast computation and a % familiar shape of the splines. % % [out,nlen]=PBSPLINE(...) will additionally compute the number of % non-zero elements in out. % % If nlen = L, the function returned will be a periodization of a % B-spline. % % If nlen < L, you can choose to remove the additional zeros by calling % g=middlepad(g,nlen). % % Additionally, PBSPLINE accepts flags to normalize the output. Please % see the help of NORMALIZE. Default is to use 'peak' normalization. % % % % References: % P. L. Soendergaard. Symmetric, discrete fractional splines and Gabor % systems. preprint, 2008. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/pbspline.html} %@seealso{pgauss, firwin, middlepad, normalize, demo_pbspline} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % TESTING: TEST_PBSPLINE % REFERENCE: OK % FIXME: In some very special cases, a spline that should be compactly % supported is not. See this output from test_pbspline % PBSPLINE NLEN ec HPE L: 15 a: 3 o: 3 0.00063001 FAILED % PBSPLINE NLEN starc HPE L: 15 a: 3 o: 3 0.00063001 FAILED % --------- checking of input parameters --------------- if nargin<3 error('Too few input arguments.'); end; if prod(size(L))~=1 error('L must be a scalar'); end; if rem(L,1)~=0 error('L must be an integer.') end; if prod(size(L))~=1 error('a must be a scalar'); end; if rem(a,1)~=0 error('a must be an integer.') end; if size(a,1)>1 || size(a,2)>1 error('order must be a scalar'); end; % Define initial value for flags and key/value pairs. definput.import={'normalize'}; definput.importdefaults={'inf'}; definput.flags.centering={'wp','hp'}; definput.flags.stype={'ed','xd','stard','ec','xc','starc'}; [flags,keyvals]=ltfatarghelper({},definput,varargin); dodisc=1; splinetype=3; switch(lower(flags.stype)) %case {'+d'} % dodisc=1; % splinetype=0; case {'stard'} dodisc=1; splinetype=1; case {'xd'} dodisc=1; splinetype=2; case {'ed'} dodisc=1; splinetype=3; %case {'+c'} % dodisc=0; % splinetype=0; case {'starc'} dodisc=0; splinetype=1; case {'xc'} dodisc=0; splinetype=2; case {'ec'} dodisc=0; splinetype=3; end; % -------- compute the function -------------- N=L/a; if dodisc if flags.do_wp if order<=-1 error('Order must be larger than -1 for this type of spline.'); end; else if order<0 error('Order must be larger than or equal to zero for this type of spline.'); end; end; % -------- compute the discrete fractional splines ----------- % Constuct a rectangular function in the odd case, % and a rectangular function with 0.5 in both ends % in the even case. This is always WPE s1=middlepad(ones(a,1),L); switch splinetype %case 0 % Asymmeteric spline % If a=3,7,11,... then the Nyquist frequency will have a negative % coefficient, and generate a complex spline. % if cent==0 % g = real(ifft(fft(s1).^(order+1))); % else % s2=middlepad([ones(a,1)],L,'hp'); % g = real(ifft(fft(s1).^order.*fft(s2))); % end; case 1 % Unsers symmetric spline (signed power) if flags.do_wp g = real(ifft(abs(fft(s1)).^(order+1))); else % Producing the unsigned power spline of order zero is slightly % complicated in this case. s2=middlepad([ones(a,1)],L,'hp'); l=(0:L-1).'; minv=exp(-pi*i*l/L); m=exp(pi*i*l/L); h1=fft(s2).*minv; h3=[abs(h1(1:floor(L/2)+1));... -abs(h1(floor(L/2)+2:L))]; %h5=real(ifft(h3.*m)); gf=abs(fft(s1)).^order.*h3; g = ifft(gf.*m); g=real(g); end; case 2 % unsigned power spline. if flags.do_wp % We must remove the zero imaginary part from s, otherwise % it will confuse the sign function. s=real(fft(s1)); g = real(ifft(sign(s).*abs(s).^(order+1))); else s2=middlepad([ones(a,1)],L,'hp'); g = real(ifft(abs(fft(s1)).^order.*fft(s2))); end; case 3 % even spline if flags.do_wp g = ifftreal(real(fftreal(s1)).^(order+1),L); else s2=middlepad([ones(a,1)],L,'hp'); g=real(ifft(real(fft(s1).^order).*fft(s2))); end; end % Scale such that the elements will form a partition of unity. g=g./a.^order; % Normalize %g=g/sqrt(a); else % -------- compute the sampled and periodized continuous splines ------- if order<0 error('Order must be larger than or equal to zero for this type of spline.'); end; if flags.do_hp % Handle all HPE splines by subsampling the WPE spline of double the size % and double a. g=pbspline(2*L,order,2*a,flags.stype); g=sqrt(2)*g(2:2:2*L); else % Check for order 0 if order==0 if splinetype==1 error('The zero-th order spline of type starc cannot be sampled and periodized.'); else % Compute it explicitly. g=middlepad(ones(a,1),L)/sqrt(a); end; else gf=zeros(L,1); switch splinetype %case 0 % % Asymmetric spline % if rem(a,2)==0 % wt1=(-1)^(-order-1); % for m=1:L/2 % z1=myhzeta(order+1,1-m/L); % z2=myhzeta(order+1,m/L); % s=sin(pi*m/N)^(order+1); % gf(m+1)=(sin(pi*m/N)/(pi*a)).^(order+1)*(wt1*z1+z2); % end; % else % wt1=(-1)^(-order-1); % wt2=(-1)^(order+1); % for m=1:L/2 % z1=wt1*myhzeta(order+1, 1 - m/(2*L)); % z2= myhzeta(order+1, m/(2*L)); % z3= myhzeta(order+1,.5 - m/(2*L)); % z4=wt2*myhzeta(order+1,.5 + m/(2*L)); % gf(m+1)=(sin(pi*m/N)/(2*pi*a)).^(order+1)*(z1+z2+z3+z4); % end; % end; case 1 % Unsers symmetric spline (unsigned power) for m=1:L/2 gf(m+1)=(abs(sin(pi*m/N)/(pi*a))).^(order+1)*(myhzeta(order+1,1-m/L)+myhzeta(order+1,m/L)); end; case 2 % Signed power spline if rem(a,2)==0 for m=1:L/2 gf(m+1)=(sin(pi*m/N)*abs(sin(pi*m/N)).^order)*(-myhzeta(order+1,1-m/L)+myhzeta(order+1,m/L)); end; % Scale gf=gf/((pi*a).^(order+1)); else for m=1:L/2 z1=-myhzeta(order+1,1-m/(2*L)); z2=myhzeta(order+1,m/(2*L)); z3=myhzeta(order+1,.5-m/(2*L)); z4=-myhzeta(order+1,.5+m/(2*L)); gf(m+1)=(sin(pi*m/N)*abs(sin(pi*m/N)).^order)*(z1+z2+z3+z4); end; % Scale gf=gf/((2*pi*a).^(order+1)); end; case 3 % Real part spline. if rem(a,2)==0 wt1=(-1)^(-order-1); for m=1:L/2 z1=myhzeta(order+1,1-m/L); z2=myhzeta(order+1,m/L); s=sin(pi*m/N)^(order+1); gf(m+1)=real((sin(pi*m/N)/(pi*a)).^(order+1)*(wt1*z1+z2)); end; else wt1=(-1)^(-order-1); wt2=(-1)^(order+1); for m=1:L/2 z1=wt1*myhzeta(order+1,1-m/(2*L)); z2=myhzeta(order+1,m/(2*L)); z3=myhzeta(order+1,.5-m/(2*L)); z4=wt2*myhzeta(order+1,.5+m/(2*L)); gf(m+1)=real((sin(pi*m/N)/(2*pi*a)).^(order+1)*(z1+z2+z3+z4)); end; end; end; gf(1)=1; % This makes it even by construction! gf(floor(L/2)+2:L)=conj(flipud(gf(2:ceil(L/2)))); g=real(ifft(gf)); % Normalize it correctly. g=g*sqrt(a); end; % order < 0 end; end; % Calculate the length of the spline % If order is a fraction then nlen==L if rem(order,1)~=0 nlen=L; else if flags.do_wp if dodisc if rem(a,2)==0 nlen=a*(order+1)+1; else nlen=(a-1)*(order+1)+1; end; else if rem(a,2)==0 nlen=a*(order+1)-1; else nlen=(a-1)*(order+1)+3; end; end; else aeven=floor(a/2)*2; if dodisc if rem(a,2)==0 nlen=aeven*(order+1); else nlen=aeven*(order+1)+2; end; else if rem(a,2)==0 nlen=aeven*(order+1); else nlen=aeven*(order+1)+2; end; end; end; if (((splinetype==1) && (rem(order,2)==0)) || ... ((splinetype==2) && (rem(order,2)==1))) % The unsigned/signed power splines generate infinitely % supported splines in these cases nlen=L; end; end; % nlen cannot be larger that L nlen=min(L,nlen); g=normalize(g,flags.norm); function Z=myhzeta(z,v); if isoctave Z=hzeta(z,v); else % Matlab does not have a true zeta function. Instead it calls Maple. % Unfortunately, the zeta function it Matlab does not provide access % to the full functionality of the Maple zeta function, so we need % to call it directly. % The following line assures that numbers are converted at full % precision, and that we avoid a lot of overhead in converting % double -> sym -> char %expr1 = maple('Zeta',sym(0),sym(z),sym(v)); %Z=double(maple('evalf',expr1)); out=maplemex(['Zeta(0,',num2str(z,16),',',num2str(v,16),');']); Z=double(sym(out)); if isempty(Z) error(['Zeta ERROR: ',out]); end; end; ltfat/inst/fourier/prect.m0000664000175000017500000000414412612404256015514 0ustar susnaksusnakfunction f=prect(L,n) %-*- texinfo -*- %@deftypefn {Function} prect %@verbatim %PRECT Periodic rectangle % Usage: f=prect(L,n); % % psinc(L,n) computes the periodic rectangle (or square) function of % length L supported on n samples. The DFT of the periodic % rectangle function in the periodic sinc function, PSINC. % % If n is odd, the output will be supported on exactly n samples % centered around the first sample. % % If n is even, the output will be supported on exactly n+1 samples % centered around the first sample. The function value on the two % samples on the edge of the function will have half the magnitude of % the other samples. % % Examples: % --------- % % This figure displays an odd length periodic rectangle: % % stem(prect(30,11)); % ylim([-.2 1.2]); % % This figure displays an even length periodic rectangle. Notice the % border points: % % stem(prect(30,12)); % ylim([-.2 1.2]); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/prect.html} %@seealso{psinc} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(2,2,nargin)); if ~(numel(L)==1) || ~(isnumeric(L)) || mod(L,1)~=0 || L<=0 error('%s: L has to be a positive integer.',upper(mfilename)); end; if ~(numel(n)==1) || ~(isnumeric(L)) || mod(n,1)~=0 || n<=0 error('%s: n has to be a positive integer.',upper(mfilename)); end; f=pbspline(L,0,n); ltfat/inst/fourier/isevenfunction.m0000664000175000017500000000437612612404256017445 0ustar susnaksusnakfunction t=isevenfunction(f,varargin); %-*- texinfo -*- %@deftypefn {Function} isevenfunction %@verbatim %ISEVENFUNCTION True if function is even % Usage: t=isevenfunction(f); % t=isevenfunction(f,tol); % % ISEVENFUNCTION(f) returns 1 if f is whole point even. Otherwise it % returns 0. % % ISEVENFUNCTION(f,tol) does the same, using the tolerance tol to measure % how large the error between the two parts of the vector can be. Default % is 1e-10. % % Adding the flag 'hp' as the last argument does the same for half point % even functions. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/isevenfunction.html} %@seealso{middlepad, peven} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: OK % REFERENCE: OK if nargin<1 error('Too few input parameters.'); end; if size(f,2)>1 if size(f,1)>1 error('f must be a vector'); else % f was a row vector. f=f(:); end; end; % Define initial values for flags definput.flags.centering = {'wp','hp'}; definput.keyvals.tol = 1e-10; [flags,keyvals,tol]=ltfatarghelper({'tol'},definput,varargin); L=size(f,1); if flags.do_wp % Determine middle point of sequence. if rem(L,2)==0 middle=L/2; else middle=(L+1)/2; end; % Relative norm of difference between the parts of the signal. d=norm(f(2:middle)-conj(flipud(f(L-middle+2:L))))/norm(f); else middle=floor(L/2); d=norm(f(1:middle)-conj(flipud(f(L-middle+1:L))))/norm(f); end; % Return true if d less than tolerance. t=d<=tol; ltfat/inst/fourier/fftreal.m0000664000175000017500000000343612612404256016025 0ustar susnaksusnakfunction f=fftreal(f,N,dim); %-*- texinfo -*- %@deftypefn {Function} fftreal %@verbatim %FFTREAL FFT for real valued input data % Usage: f=fftreal(f); % f=fftreal(f,N,dim); % % FFTREAL(f) computes the coefficients corresponding to the positive % frequencies of the FFT of the real valued input signal f. % % The function takes exactly the same arguments as fft. See the help on % fft for a thorough description. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/fftreal.html} %@seealso{ifftreal, dft} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING : TEST_PUREFREQ % REFERENCE : OK error(nargchk(1,3,nargin)); if nargin<3 dim=[]; end; if nargin<2 N=[]; end; if ~isreal(f) error('Input signal must be real.'); end; [f,N,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,N,dim,'FFTREAL'); if ~isempty(N) f=postpad(f,N); end N2=floor(N/2)+1; f=comp_fftreal(f); % Set the new size in the first dimension. permutedsize(1)=N2; f=assert_sigreshape_post(f,dim,permutedsize,order); ltfat/inst/fourier/nextfastfft.m0000664000175000017500000000751012612404256016733 0ustar susnaksusnakfunction [nfft,tableout]=nextfastfft(n) %-*- texinfo -*- %@deftypefn {Function} nextfastfft %@verbatim %NEXTFASTFFT Next higher number with a fast FFT % Usage: nfft=nextfastfft(n); % % NEXTFASTFFT(n) returns the next number greater than or equal to n, % for which the computation of a FFT is fast. Such a number is solely % comprised of small prime-factors of 2, 3, 5 and 7. % % NEXTFASTFFT is intended as a replacement of nextpow2, which is often % used for the same purpose. However, a modern FFT implementation (like % FFTW) usually performs well for sizes which are powers or 2,3,5 and 7, % and not only just for powers of 2. % % The algorithm will look up the best size in a table, which is computed % the first time the function is run. If the input size is larger than the % largest value in the table, the input size will be reduced by factors of % 2, until it is in range. % % [n,nfft]=NEXTFASTFFT(n) additionally returns the table used for % lookup. % % % % References: % J. Cooley and J. Tukey. An algorithm for the machine calculation of % complex Fourier series. Math. Comput, 19(90):297-301, 1965. % % M. Frigo and S. G. Johnson. The design and implementation of FFTW3. % Proceedings of the IEEE, 93(2):216-231, 2005. Special issue on "Program % Generation, Optimization, and Platform Adaptation". % % P. L. Soendergaard. LTFAT-note 17: Next fast FFT size. Technical report, % Technical University of Denmark, 2011. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/nextfastfft.html} %@seealso{ceil23, ceil235, demo_nextfastfft} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard and Johan Sebastian Rosenkilde Nielsen persistent table; maxval=2^20; if isempty(table) % Compute the table for the first time, it is empty. l2=log(2); l3=log(3); l5=log(5); l7=log(7); lmaxval=log(maxval); table=zeros(1286,1); ii=1; prod2=1; for i2=0:floor(lmaxval/l2) prod3=prod2; for i3=0:floor((lmaxval-i2*l2)/l3) prod5=prod3; for i5=0:floor((lmaxval-i2*l2-i3*l3)/l5) prod7=prod5; for i7=0:floor((lmaxval-i2*l2-i3*l3-i5*l5)/l7) table(ii)=prod7; prod7=prod7*7; ii=ii+1; end; prod5=prod5*5; end; prod3=prod3*3; end; prod2=prod2*2; end; table=sort(table); end; % Copy input to output. This allows us to efficiently work in-place. nfft=n; % Handle input of any shape by Fortran indexing. for ii=1:numel(n) n2reduce=0; if n(ii)>maxval % Reduce by factors of 2 to get below maxval n2reduce=ceil(log2(nfft(ii)/maxval)); nfft(ii)=nfft(ii)/2^n2reduce; end; % Use a simple bisection method to find the answer in the table. from=1; to=numel(table); while from<=to mid = round((from + to)/2); diff = table(mid)-nfft(ii); if diff<0 from=mid+1; else to=mid-1; end end nfft(ii)=table(from); % Add back the missing factors of 2 (if any) nfft(ii)=nfft(ii)*2^n2reduce; end; tableout=table; ltfat/inst/fourier/lconv.m0000664000175000017500000000601712612404256015521 0ustar susnaksusnakfunction h=lconv(f,g,varargin) %-*- texinfo -*- %@deftypefn {Function} lconv %@verbatim %LCONV Linear convolution % Usage: h=lconv(f,g); % % LCONV(f,g) computes the linear convolution of f and g. The linear % convolution is given by % % Lh-1 % h(l+1) = sum f(k+1) * g(l-k+1) % k=0 % % with L_{h} = L_{f} + L_{g} - 1 where L_{f} and L_{g} are the lengths of f and g, % respectively. % % LCONV(f,g,'r') computes the linear convolution of f and g where g is reversed. % This type of convolution is also known as linear cross-correlation and is given by % % Lh-1 % h(l+1) = sum f(k+1) * conj(g(k-l+1)) % k=0 % % LCONV(f,g,'rr') computes the alternative where both f and g are % reversed given by % % Lh-1 % h(l+1) = sum conj(f(-k+1)) * conj(g(k-l+1)) % k=0 % % In the above formulas, l-k, k-l and -k are computed modulo L_{h}. % % The input arrays f and g can be 1D vectors or one of them can be % a multidimensional array. In either case, the convolution is performed % along columns with row vectors transformed to columns. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/lconv.html} %@seealso{pconv} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven % TESTING: TEST_LCONV % REFERENCE: REF_LCONV complainif_notenoughargs(nargin, 2, 'LCONV'); definput.keyvals.L=[]; definput.keyvals.dim=[]; definput.flags.type={'default', 'r', 'rr'}; [flags,~,L,dim]=ltfatarghelper({'L','dim'},definput,varargin); [f,~,Lf,Wf,dimoutf,permutedsize_f,order_f]=assert_sigreshape_pre(f,L,dim,'LCONV'); [g,~,Lg,Wg,dimoutg,permutedsize_g,order_g]=assert_sigreshape_pre(g,L,dim,'LCONV'); if (Wf>1) && (Wg>1) error('%s: Only one of the inputs can be multi-dimensional.',upper(mfilename)); end; W=max(Wf,Wg); if Wf. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: OK % REFERENCE: OK error(nargchk(2,3,nargin)); if nargin==2 cent=0; end; h = exp(2*pi*i*((0:L-1)+cent)/L*m).'; ltfat/inst/fourier/peven.m0000664000175000017500000000235512612404256015516 0ustar susnaksusnakfunction f=peven(f,dim) %-*- texinfo -*- %@deftypefn {Function} peven %@verbatim %PEVEN Even part of periodic function % Usage: fe=peven(f); % fe=peven(f,dim); % % PEVEN(f) returns the even part of the periodic sequence f. % % PEVEN(f,dim) does the same along dimension dim. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/peven.html} %@seealso{podd, dft, involute, pconv} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin==1 f=(f+involute(f))/2; else f=(f+involute(f,dim))/2; end; ltfat/inst/fourier/fftgram.m0000664000175000017500000000511212612404256016021 0ustar susnaksusnakfunction fftgram(f, varargin) %-*- texinfo -*- %@deftypefn {Function} fftgram %@verbatim %FFTGRAM Plot the energy of the discrete Fourier transform % Usage: fftgram(f) % fftgram(f, fs) % % FFTGRAM(f) plots the energy of the discrete Fourier transform computed % from the function f. The function forms a Fourier pair with the periodic % autocorrelation function. % % FFTGRAM(f,fs) does the same for a signal sampled with a sampling % frequency of fs Hz. If fs is no specified, the plot will display % normalized frequencies. % % FFTGRAM(f,fs,dynrange) additionally specifies the dynamic range to % display on the figure. % % Additional arguments for FFTGRAM: % % 'db' Plots the energy on a dB scale. This is the default. % % 'lin' Plots the energy on a linear scale. % % In addition to these parameters, FFTGRAM accepts any of the flags from % NORMALIZE. The input signal will be normalized as specified. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/fftgram.html} %@seealso{dft, plotfft} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven % Assert correct number of input parameters. complainif_notenoughargs(nargin, 1, 'FFTGRAM'); definput.import={'ltfattranslate','normalize'}; definput.keyvals.fs=[]; definput.keyvals.clim=[]; definput.keyvals.dynrange=[]; definput.flags.powscale={'db', 'lin'}; [flags, kv] = ltfatarghelper({'fs','dynrange'},definput,varargin); if isreal(f) p = (fftreal(f).*conj(fftreal(f))); else p = (fft(f).*conj(fft(f))); end; p = normalize(p, flags.norm); if flags.do_db if isreal(f) plotfftreal(p,kv.fs, kv.dynrange); else plotfft(p,kv.fs, kv.dynrange); end; ylabel('Energy (dB)'); end; if flags.do_lin if isreal(f) plotfftreal(p, kv.fs, kv.dynrange, 'lin'); else plotfft(p, kv.fs, kv.dynrange,'lin'); end; ylabel('Energy'); end; ltfat/inst/fourier/ceil235.m0000664000175000017500000000605012612404256015543 0ustar susnaksusnakfunction [nfft,tableout]=ceil235(n) %-*- texinfo -*- %@deftypefn {Function} ceil235 %@verbatim %CEIL235 Next number with only 2,3 and 5 factors % Usage: nceil=ceil235(n); % % CEIL235(n) returns the next number greater than or equal to n, % which can be written as a product of powers of 2, 3 and 5. % % The algorithm will look up the best size in a table, which is computed % the first time the function is run. If the input size is larger than the % largest value in the table, the input size will be reduced by factors of % 2, until it is in range. % % [nceil,table]=CEIL235(n) additionally returns the table used for lookup. % % Examples: % --------- % % Return the first number larger or equal to 19 that can be written % solely as products of powers of 2, 3 and 5*: % % ceil235(19) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/ceil235.html} %@seealso{floor235, ceil23, nextfastfft} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard persistent table; maxval=2^20; if isempty(table) % Compute the table for the first time, it is empty. l2=log(2); l3=log(3); l5=log(5); lmaxval=log(maxval); table=zeros(511,1); ii=1; prod2=1; for i2=0:floor(lmaxval/l2) prod3=prod2; for i3=0:floor((lmaxval-i2*l2)/l3) prod5=prod3; for i5=0:floor((lmaxval-i2*l2-i3*l3)/l5) table(ii)=prod5; prod5=prod5*5; ii=ii+1; end; prod3=prod3*3; end; prod2=prod2*2; end; table=sort(table); end; % Copy input to output. This allows us to efficiently work in-place. nfft=n; % Handle input of any shape by Fortran indexing. for ii=1:numel(n) n2reduce=0; if n(ii)>maxval % Reduce by factors of 2 to get below maxval n2reduce=ceil(log2(nfft(ii)/maxval)); nfft(ii)=nfft(ii)/2^n2reduce; end; % Use a simple bisection method to find the answer in the table. from=1; to=numel(table); while from<=to mid = round((from + to)/2); diff = table(mid)-nfft(ii); if diff<0 from=mid+1; else to=mid-1; end end nfft(ii)=table(from); % Add back the missing factors of 2 (if any) nfft(ii)=nfft(ii)*2^n2reduce; end; tableout=table; ltfat/inst/fourier/pgauss.m0000664000175000017500000001450312612404256015701 0ustar susnaksusnakfunction [g,tfr]=pgauss(L,varargin) %-*- texinfo -*- %@deftypefn {Function} pgauss %@verbatim %PGAUSS Sampled, periodized Gaussian % Usage: g=pgauss(L); % g=pgauss(L,tfr); % g=pgauss(L,...); % [g,tfr]=pgauss( ... ); % % Input parameters: % L : Length of vector. % tfr : ratio between time and frequency support. % % Output parameters: % g : The periodized Gaussian. % % PGAUSS(L,tfr) computes samples of a periodized Gaussian. The function % returns a regular sampling of the periodization of the function % exp(-pi*(x.^2/tfr)). % % The l^2 norm of the returned Gaussian is equal to 1. % % The parameter tfr determines the ratio between the effective support % of g and the effective support of the DFT of g. If tfr>1 then g* % has a wider support than the DFT of g. % % PGAUSS(L) does the same setting tfr=1. % % [g,tfr] = PGAUSS( ... ) will additionally return the time-to-frequency % support ratio. This is useful if you did not specify it (i.e. used the % 'width' or 'bw' flag). % % The function is whole-point even. This implies that fft(PGAUSS(L,tfr)) % is real for any L and tfr. The DFT of g is equal to % PGAUSS(L,1/tfr). % % In addition to the 'width' flag, PGAUSS understands the following % flags at the end of the list of input parameters: % % 'fs',fs Use a sampling rate of fs Hz as unit for specifying the % width, bandwidth, centre frequency and delay of the % Gaussian. Default is fs=[] which indicates to measure % everything in samples. % % 'width',s Set the width of the Gaussian such that it has an % effective support of s samples. This means that % approx. 96% of the energy or 79% of the area % under the graph is contained within s samples. % This corresponds to -6dB or to width at the % half of the height. % This is equivalent to calling PGAUSS(L,pi*s^2/4L*log(2)). % % 'atheight',ah Used only in conjuction with 'width'. Forces the % Gaussian to width s at the ah fraction of the % height. % % 'bw',bw As for the 'width' argument, but specifies the width % in the frequency domain. The bandwidth is measured in % normalized frequencies, unless the 'fs' value is given. % % 'cf',cf Set the centre frequency of the Gaussian to fc. % % 'wp' Output is whole point even. This is the default. % % 'hp' Output is half point even, as most Matlab filter % routines. % % 'delay',d Delay the output by d. Default is zero delay. % % In addition to these parameteres, PGAUSS accepts any of the flags % from NORMALIZE. The output will be normalized as specified. % % If this function is used to generate a window for a Gabor frame, then % the window giving the smallest frame bound ratio is generated by % PGAUSS(L,a*M/L). % % Examples: % --------- % % This example creates a Gaussian function, and demonstrates that it is % its own Discrete Fourier Transform: % % g=pgauss(128); % % % Test of DFT invariance: Should be close to zero. % norm(g-dft(g)) % % The next plot shows the Gaussian in the time domain: % % plot(fftshift(pgauss(128))); % % The next plot shows the Gaussian in the frequency domain on a log scale: % % magresp(pgauss(128),'dynrange',100); % % The next plot shows the Gaussian in the time-frequency plane: % % sgram(pgauss(128),'tc','nf','lin'); % % % % References: % S. Mallat and Z. Zhang. Matching pursuits with time-frequency % dictionaries. IEEE Trans. Signal Process., 41(12):3397-3415, 1993. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/pgauss.html} %@seealso{dgtlength, psech, firwin, pbspline, normalize, demo_pgauss} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % First reference on this found in mazh93 eq. 63 if nargin<1 error('Too few input parameters.'); end; if (prod(size(L,1))~=1 || ~isnumeric(L)) error('L must be a scalar'); end; if rem(L,1)~=0 error('L must be an integer.') end; % Define initial value for flags and key/value pairs. definput.import={'normalize'}; definput.flags.centering={'wp','hp'}; definput.flags.delay={'nodelay','delay'}; definput.flags.width={'tfr','width','bw'}; definput.keyvals.tfr=1; definput.keyvals.delay=0; definput.keyvals.width=0; definput.keyvals.fs=[]; definput.keyvals.cf=0; definput.keyvals.bw=0; definput.keyvals.atheight=[]; [flags,keyvals,tfr]=ltfatarghelper({'tfr'},definput,varargin); if (prod(size(tfr,1))~=1 || ~isnumeric(tfr)) error('tfr must be a scalar.'); end; if ~isempty(keyvals.atheight) && ~flags.do_width error(['%s: Param. ''atheight'' must be used together with param.',... ' ''width''. '],upper(mfilename)); end if isempty(keyvals.atheight) keyvals.atheight = 0.5; end if keyvals.atheight >= 1 || keyvals.atheight <=0 error('%s: Param. ''atheight'' must be in the range ]0,1[.',... upper(mfilename)); end fs=keyvals.fs; if flags.do_wp cent=0; else cent=0.5; end; if isempty(fs) if flags.do_width tfr=pi/(4*log(1/keyvals.atheight))*keyvals.width^2/L; end; if flags.do_bw tfr=L/(keyvals.bw*L/2)^2; end; delay_s=keyvals.delay; cf_s =keyvals.cf; else if flags.do_width tfr=(keyvals.width*fs)^2/L; end; if flags.do_bw tfr=L/(keyvals.bw/fs*L)^2; end; delay_s=keyvals.delay*fs; cf_s =keyvals.cf/fs*L; end; g=comp_pgauss(L,tfr,cent-delay_s,cf_s); g=normalize(g,flags.norm); ltfat/inst/fourier/dctiii.m0000664000175000017500000000643412612404256015650 0ustar susnaksusnakfunction c=dctiii(f,L,dim) %-*- texinfo -*- %@deftypefn {Function} dctiii %@verbatim %DCTIII Discrete Consine Transform type III % Usage: c=dctiii(f); % c=dctiii(f,L); % c=dctiii(f,[],dim); % c=dctiii(f,L,dim); % % DCTIII(f) computes the discrete cosine transform of type III of the % input signal f. If f is multi-dimensional, the transformation is % applied along the first non-singleton dimension. % % DCTIII(f,L) zero-pads or truncates f to length L before doing the % transformation. % % DCTIII(f,[],dim) or DCTIII(f,L,dim) applies the transformation along % dimension dim. % % The transform is real (output is real if input is real) and orthonormal. % % This is the inverse of DCTII. % % Let f be a signal of length L, let c=DCTIII(f) and define the vector % w of length L by % % w = [1/sqrt(2) 1 1 1 1 ...] % % Then % % L-1 % c(n+1) = sqrt(2/L) * sum w(m+1)*f(m+1)*cos(pi*(n+.5)*m/L) % m=0 % % Examples: % --------- % % The following figures show the first 4 basis functions of the DCTIII of % length 20: % % % The dctii is the adjoint of dctiii. % F=dctii(eye(20)); % % for ii=1:4 % subplot(4,1,ii); % stem(F(:,ii)); % end; % % % References: % K. Rao and P. Yip. Discrete Cosine Transform, Algorithms, Advantages, % Applications. Academic Press, 1990. % % M. V. Wickerhauser. Adapted wavelet analysis from theory to software. % Wellesley-Cambridge Press, Wellesley, MA, 1994. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/dctiii.html} %@seealso{dctii, dctiv, dstii} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_PUREFREQ % REFERENCE: REF_DCTIII error(nargchk(1,3,nargin)); if nargin<3 dim=[]; end; if nargin<2 L=[]; end; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'DCTIII'); if ~isempty(L) f=postpad(f,L); end; c=comp_dct(f,3); % c=zeros(2*L,W,assert_classname(f)); % % m1=1/sqrt(2)*exp(-(0:L-1)*pi*i/(2*L)).'; % m1(1)=1; % % m2=1/sqrt(2)*exp((L-1:-1:1)*pi*i/(2*L)).'; % % for w=1:W % c(:,w)=[m1.*f(:,w);0;m2.*f(L:-1:2,w)]; % end; % % c=fft(c)/sqrt(L); % % c=c(1:L,:); % % if isreal(f) % c=real(c); % end; c=assert_sigreshape_post(c,dim,permutedsize,order); % This is a slow, but convenient way of expressing the above algorithm. %R=1/sqrt(2)*[diag(exp(-(0:L-1)*pi*i/(2*L)));... % zeros(1,L); ... % [zeros(L-1,1),flipud(diag(exp((1:L-1)*pi*i/(2*L))))]]; %R(1,1)=1; %c=fft(R*f)/sqrt(L); %c=c(1:L,:); ltfat/inst/fourier/dctresample.m0000664000175000017500000000405612612404256016704 0ustar susnaksusnakfunction f=dctresample(f,L,dim) %-*- texinfo -*- %@deftypefn {Function} dctresample %@verbatim %DCTRESAMPLE Resample signal using Fourier interpolation % Usage: h=dctresample(f,L); % h=dctresample(f,L,dim); % % DCTRESAMPLE(f,L) returns a discrete cosine interpolation of the signal f* % to length L. If the function is applied to a matrix, it will apply % to each column. % % DCTRESAMPLE(f,L,dim) does the same along dimension dim. % % If the input signal is not a periodic signal (or close to), this method % will give much better results than FFTRESAMPLE at the endpoints, as % this method assumes than the signal is even a the endpoints. % % The algorithm uses a DCT type iii. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/dctresample.html} %@seealso{fftresample, middlepad, dctiii} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % ------- Checking of input -------------------- error(nargchk(2,3,nargin)); if nargin<3 dim=[]; end; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'DCTRESAMPLE'); wasreal=isreal(f); % The 'dim=1' below have been added to avoid dct and middlepad being % smart about choosing the dimension. f=dctiii(postpad(dctii(f,[],1),L))*sqrt(L/Ls); f=assert_sigreshape_post(f,dim,permutedsize,order); if wasreal f=real(f); end; ltfat/inst/fourier/dstiv.m0000664000175000017500000000571512612404256015535 0ustar susnaksusnakfunction c=dstiv(f,L,dim) %-*- texinfo -*- %@deftypefn {Function} dstiv %@verbatim %DSTIV Discrete Sine Transform type IV % Usage: c=dstiv(f); % c=dstiv(f,L); % c=dstiv(f,[],dim); % c=dstiv(f,L,dim); % % DSTIV(f) computes the discrete sine transform of type IV of the input % signal f. If f is a matrix, then the transformation is applied to % each column. For N-D arrays, the transformation is applied to the first % non-singleton dimension. % % DSTIV(f,L) zero-pads or truncates f to length L before doing the % transformation. % % DSTIV(f,[],dim) applies the transformation along dimension dim. % DSTIV(f,L,dim) does the same, but pads or truncates to length L. % % The transform is real (output is real if input is real) and % it is orthonormal. It is its own inverse. % % Let f be a signal of length L and let c=DSTIV(f). Then % % L-1 % c(n+1) = sqrt(2/L) * sum f(m+1)*sin(pi*(n+.5)*(m+.5)/L) % m=0 % % Examples: % --------- % % The following figures show the first 4 basis functions of the DSTIV of % length 20: % % % The dstiv is its own adjoint. % F=dstiv(eye(20)); % % for ii=1:4 % subplot(4,1,ii); % stem(F(:,ii)); % end; % % % References: % K. Rao and P. Yip. Discrete Cosine Transform, Algorithms, Advantages, % Applications. Academic Press, 1990. % % M. V. Wickerhauser. Adapted wavelet analysis from theory to software. % Wellesley-Cambridge Press, Wellesley, MA, 1994. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/dstiv.html} %@seealso{dstii, dstiii, dctii} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_PUREFREQ % REFERENCE: REF_DSTIV error(nargchk(1,3,nargin)); if nargin<3 dim=[]; end; if nargin<2 L=[]; end; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'DSTIV'); if ~isempty(L) f=postpad(f,L); end; c = comp_dst(f,4); c=assert_sigreshape_post(c,dim,permutedsize,order); % This is a slow, but convenient way of expressing the algorithm. %R=1/sqrt(2)*[diag(exp(-(0:L-1)*pi*i/(2*L)));... % flipud(diag(-exp((1:L)*pi*i/(2*L))))]; %c=i*(exp(-pi*i/(4*L))*R.'*fft(R*f)/sqrt(2*L)); ltfat/inst/fourier/gga.m0000664000175000017500000001032112612404256015127 0ustar susnaksusnakfunction c = gga(f,fvec,fs,dim) %-*- texinfo -*- %@deftypefn {Function} gga %@verbatim %GGA Generalized Goertzel algorithm % Usage: c = gga(x,fvec) % c = gga(x,fvec,fs) % % Input parameters: % x : Input data. % fvec : Indices to calculate. % fs : Sampling frequency. % % Output parameters: % c : Coefficient vector. % % c=GGA(f,fvec) computes the discrete-time fourier transform DTFT of % f at frequencies in fvec as c(k)=F(2pi f_{vec}(k)) where % F=DTFT(f), k=1,dots K and K=length(fvec) using the generalized % second-order Goertzel algorithm. Thanks to the generalization, values % in fvec can be arbitrary numbers in range 0-1 and not restricted to % l/Ls, l=0,dots Ls-1 (usual DFT samples) as the original Goertzel % algorithm is. Ls is the length of the first non-singleton dimension % of f. If fvec is empty or ommited, fvec is assumed to be % (0:Ls-1)/Ls and results in the same output as fft. % % c=GGA(f,fvec,fs) computes the same with fvec in Hz relative to fs. % % The input f is processed along the first non-singleton dimension or % along dimension dim if specified. % % *Remark:** % Besides the generalization the algorithm is also shortened by one % iteration compared to the conventional Goertzel. % % Examples: % --------- % % Calculating DTFT samples of interest: % % % Generate input signal % fs = 8000; % L = 2^10; % k = (0:L-1).'; % freq = [400,510,620,680,825]; % phase = [pi/4,-pi/4,-pi/8,pi/4,-pi/3]; % amp = [5,3,4,1,2]; % f = arrayfun(@(a,f,p) a*sin(2*pi*k*f/fs+p),... % amp,freq,phase,'UniformOutput',0); % f = sum(cell2mat(f),2); % % % This is equal to fft(f) % ck = gga(f); % % %GGA to FFT error: % norm(ck-fft(f)) % % % DTFT samples at 400,510,620,680,825 Hz % ckgga = gga(f,freq,fs); % % % Plot modulus of coefficients % figure(1);clf;hold on; % stem(k/L*fs,2*abs(ck)/L,'k'); % stem(freq,2*abs(ckgga)/L,'r:'); % set(gca,'XLim',[freq(1)-50,freq(end)+50]); % set(gca,'YLim',[0 6]); % xlabel('f[Hz]'); % ylabel('|c(k)|'); % hold off; % % % Plot phase of coefficients % figure(2);clf;hold on; % stem(k/L*fs,angle(ck),'k'); % stem(freq,angle(ckgga),'r:'); % set(gca,'XLim',[freq(1)-50,freq(end)+50]); % set(gca,'YLim',[-pi pi]); % xlabel('f[Hz]'); % ylabel('angle(c(k))'); % hold off; % % % References: % P. Sysel and P. Rajmic. Goertzel algorithm generalized to non-integer % multiples of fundamental frequency. EURASIP Journal on Advances in % Signal Processing, 2012(1):56, 2012. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/gga.html} %@seealso{chirpzt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % The original copyright goes to % 2013 Pavel Rajmic, Brno University of Technology, Czech Rep. %% Check the input arguments if nargin < 1 error('%s: Not enough input arguments.',upper(mfilename)) end if isempty(f) error('%s: X must be a nonempty vector or a matrix.',upper(mfilename)) end if nargin<4 dim=[]; end; if nargin<3 || isempty(fs) fs=1; end; [f,~,Ls,~,dim,permutedsize,order]=assert_sigreshape_pre(f,[],dim,'GGA'); if nargin > 1 && ~isempty(fvec) if ~isreal(fvec) || ~isvector(fvec) error('%s: INDVEC must be a real vector.',upper(mfilename)) end else fvec = (0:Ls-1)/Ls; end c = comp_gga(f,fvec/fs*Ls); permutedsize(1)=numel(fvec); c=assert_sigreshape_post(c,dim,permutedsize,order); ltfat/inst/fourier/lxcorr.m0000664000175000017500000000321412612404256015705 0ustar susnaksusnakfunction h=lxcorr(f,g,varargin) %-*- texinfo -*- %@deftypefn {Function} lxcorr %@verbatim %LXCORR Linear crosscorrelation % Usage: h=lxcorr(f,g) % % LXCORR(f) computes the linear crosscorrelation of the input signal f and g. % The linear cross-correlation is computed by % % Lh-1 % h(l+1) = sum f(k+1) * conj(g(k-l+1)) % k=0 % % with L_{h} = L_{f} + L_{g} - 1 where L_{f} and L_{g} are the lengths of f and g, % respectively. % % LXCORR(f,'normalize') does the same, but normalizes the output by % the product of the l^2-norm of f and g. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/lxcorr.html} %@seealso{pxcorr, lconv} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven definput.flags.type={'nonormalize','normalize'}; flags = ltfatarghelper({},definput,varargin); h = lconv(f, g, 'r'); if flags.do_normalize h = h/(norm(f)*norm(g)); end ltfat/inst/fourier/psinc.m0000664000175000017500000000340412612404256015511 0ustar susnaksusnakfunction f=psinc(L,n) %-*- texinfo -*- %@deftypefn {Function} psinc %@verbatim %PSINC Periodic Sinc function (Dirichlet function) % Usage: f=psinc(L,n); % % PSINC(L,n) computes the periodic Sinc function of length L with % n-1 local extrema. The DFT of the periodic Sinc function is the % periodic rectangle, PRECT, of length n. % % Examples: % --------- % % This figure displays a the periodic sinc function with 6 local extremas: % % plot(psinc(30,7)); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/psinc.html} %@seealso{prect} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(2,2,nargin)); if ~(numel(L)==1) || ~(isnumeric(L)) || mod(L,1)~=0 || L<=0 error('%s: L has to be a positive integer.',upper(mfilename)); end; if ~(numel(n)==1) || ~(isnumeric(L)) || mod(n,1)~=0 || n<=0 error('%s: n has to be a positive integer.',upper(mfilename)); end; x=(2*pi*(0:L-1)/L).'; n_odd = n-(1-mod(n,2)); f = sin(n_odd.*x./2)./(n_odd.*sin(x./2)); f(1) = 1; if (mod(n,2))==0; f = f+cos(x*n/2)/n_odd; end; ltfat/inst/fourier/dsti.m0000664000175000017500000000576212612404256015351 0ustar susnaksusnakfunction c=dsti(f,L,dim) %-*- texinfo -*- %@deftypefn {Function} dsti %@verbatim %DSTI Discrete Sine Transform type I % Usage: c=dsti(f); % c=dsti(f,L); % c=dsti(f,[],dim); % c=dsti(f,L,dim); % % DSTI(f) computes the discrete sine transform of type I of the % input signal f. If f is multi-dimensional, the transformation is % applied along the first non-singleton dimension. % % DSTI(f,L) zero-pads or truncates f to length L before doing the % transformation. % % DSTI(f,[],dim) or DSTI(f,L,dim) applies the transformation along % dimension dim. % % The transform is real (output is real if input is real) and orthonormal. % % This transform is its own inverse. % % Let f be a signal of length L and let c=DSTI(f). Then % % L-1 % c(n+1) = sqrt(2/(L+1)) * sum sin(pi*(n+1)*(m+1)/(L+1)) % m=0 % The implementation of this functions uses a simple algorithm that requires % an FFT of length 2N+2, which might potentially be the product of a large % prime number. This may cause the function to sometimes execute slowly. % If guaranteed high speed is a concern, please consider using one of the % other DST transforms. % % Examples: % --------- % % The following figures show the first 4 basis functions of the DSTI of % length 20: % % % The dsti is its own adjoint. % F=dsti(eye(20)); % % for ii=1:4 % subplot(4,1,ii); % stem(F(:,ii)); % end; % % % References: % K. Rao and P. Yip. Discrete Cosine Transform, Algorithms, Advantages, % Applications. Academic Press, 1990. % % M. V. Wickerhauser. Adapted wavelet analysis from theory to software. % Wellesley-Cambridge Press, Wellesley, MA, 1994. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/dsti.html} %@seealso{dcti, dstiii, dstiv} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_PUREFREQ % REFERENCE: REF_DSTI error(nargchk(1,3,nargin)); if nargin<3 dim=[]; end; if nargin<2 L=[]; end; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'DSTI'); if ~isempty(L) f=postpad(f,L); end; if L==1 c=f; else c = comp_dst(f,1); end; c=assert_sigreshape_post(c,dim,permutedsize,order); ltfat/inst/fourier/dft.m0000664000175000017500000000356612612404256015163 0ustar susnaksusnakfunction f=dft(f,N,dim); %-*- texinfo -*- %@deftypefn {Function} dft %@verbatim %DFT Normalized Discrete Fourier Transform % Usage: f=dft(f); % f=dft(f,N,dim); % % DFT computes a normalized or unitary discrete Fourier transform. The % unitary discrete Fourier transform is computed by % % L-1 % c(k+1) = 1/sqrt(L) * sum f(l+1)*exp(-2*pi*i*k*l/L) % l=0 % % for k=0,...,L-1. % % The output of DFT is a scaled version of the output from fft. The % function takes exactly the same arguments as fft. See the help on fft % for a thorough description. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/dft.html} %@seealso{idft} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard, Jordy van Velthoven % TESTING: TEST_DFT % REFERENCE: REF_DFT error(nargchk(1,3,nargin)); if nargin<3 dim=[]; end; if nargin<2 N=[]; end; [f,N,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,N,dim,'DFT'); % Force FFT along dimension 1, since we have permuted the dimensions % manually f=fft(f,N,1)/sqrt(N); f=assert_sigreshape_post(f,dim,permutedsize,order); ltfat/inst/fourier/floor235.m0000664000175000017500000000645212612404256015756 0ustar susnaksusnakfunction [nfft,tableout]=floor235(n) %-*- texinfo -*- %@deftypefn {Function} floor235 %@verbatim %FLOOR235 Previous number with only 2,3 and 5 factors % Usage: nfloor=floor235(n); % % FLOOR235(n) returns the next number greater than or equal to n, % which can be written as a product of powers of 2, 3 and 5. % % The algorithm will look up the best size in a table, which is computed % the first time the function is run. If the input size is larger than the % largest value in the table, the input size will be reduced by factors of % 2, until it is in range. % % [nfloor,table]=FLOOR235(n) additionally returns the table used for lookup. % % Examples: % --------- % % Return the first number smaller or equal to 26 that can be written % solely as products of powers of 2, 3 and 5*: % % floor235(26) % % This plot shows the behaviour of FLOOR235 and CEIL235 for numbers % up to 100: % % x=1:100; % plot(x,floor235(x),x,ceil235(x)); % legend('floor235','ceil235','Location','Northwest'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/floor235.html} %@seealso{floor23, ceil235, nextfastfft} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard persistent table; maxval=2^20; if isempty(table) % Compute the table for the first time, it is empty. l2=log(2); l3=log(3); l5=log(5); lmaxval=log(maxval); table=zeros(511,1); ii=1; prod2=1; for i2=0:floor(lmaxval/l2) prod3=prod2; for i3=0:floor((lmaxval-i2*l2)/l3) prod5=prod3; for i5=0:floor((lmaxval-i2*l2-i3*l3)/l5) table(ii)=prod5; prod5=prod5*5; ii=ii+1; end; prod3=prod3*3; end; prod2=prod2*2; end; table=sort(table); end; % Copy input to output. This allows us to efficiently work in-place. nfft=n; % Handle input of any shape by Fortran indexing. for ii=1:numel(n) n2reduce=0; if n(ii)>maxval % Reduce by factors of 2 to get below maxval n2reduce=ceil(log2(nfft(ii)/maxval)); nfft(ii)=nfft(ii)/2^n2reduce; end; % Use a simple bisection method to find the answer in the table. from=1; to=numel(table); while from<=to mid = round((from + to)/2); diff = table(mid)-nfft(ii); if diff<0 from=mid+1; else to=mid-1; end end if nfft(ii)~=table(from) nfft(ii)=table(from-1); end; % Add back the missing factors of 2 (if any) nfft(ii)=nfft(ii)*2^n2reduce; end; tableout=table; ltfat/inst/fourier/modcent.m0000664000175000017500000000230312612404256016023 0ustar susnaksusnakfunction x=modcent(x,r); %-*- texinfo -*- %@deftypefn {Function} modcent %@verbatim %MODCENT Centered modulo % Usage: y=modcent(x,r); % % MODCENT(x,r) computes the modulo of x in the range [-r/2,r/2[. % % As an example, to compute the modulo of x in the range [-pi,pi[ use % the call: % % y = modcent(x,2*pi); %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/modcent.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . x=mod(x,r); idx=x>r/2; x(idx)=x(idx)-r; ltfat/inst/fourier/shah.m0000664000175000017500000000377412612404256015332 0ustar susnaksusnakfunction f=shah(L,a); %-*- texinfo -*- %@deftypefn {Function} shah %@verbatim %SHAH Discrete Shah-distribution % Usage: f=shah(L,a); % % SHAH(L,a) computes the discrete, normalized Shah-distribution of % length L with a distance of a between the spikes. % % The Shah distribution is defined by % % f(n*a+1)=1/sqrt(L/a) % % for integer n, otherwise f is zero. % % This is also known as an impulse train or as the comb function, because % the shape of the function resembles a comb. It is the sum of unit % impulses ('diracs') with the distance a. % % If a divides L, then the DFT of SHAH(L,a) is SHAH(L,L/a). % % The Shah function has an extremely bad time-frequency localization. % It does not generate a Gabor frame for any L and a. % % Examples: % --------- % % A simple spectrogram of the Shah function (includes the negative % frequencies to display the whole TF-plane): % % sgram(shah(256,16),'dynrange',80,'nf') % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/shah.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: OK % REFERENCE: OK if nargin~=2 error('Wrong number of input parameters.'); end; %if mod(L,a)~=0 % error('a must divide L.'); %end; f=zeros(L,1); f(1:a:L)=1/sqrt(L/a); ltfat/inst/fourier/dstii.m0000664000175000017500000000600212612404256015506 0ustar susnaksusnakfunction c=dstii(f,L,dim) %-*- texinfo -*- %@deftypefn {Function} dstii %@verbatim %DSTII Discrete Sine Transform type II % Usage: c=dstii(f); % c=dstii(f,L); % c=dstii(f,[],dim); % c=dstii(f,L,dim); % % DSTII(f) computes the discrete sine transform of type II of the % input signal f. If f is multi-dimensional, the transformation is % applied along the first non-singleton dimension. % % DSTII(f,L) zero-pads or truncates f to length L before doing the % transformation. % % DSTII(f,[],dim) or DSTII(f,L,dim) applies the transformation along % dimension dim. % % The transform is real (output is real if input is real) and orthonormal. % % The inverse transform of DSTII is DSTIII. % % Let f be a signal of length L, let c=DSTII(f) and define the vector % w of length L by % % w = [1 1 1 1 ... 1/sqrt(2)] % % Then % % L-1 % c(n+1) = sqrt(2/L) * sum w(n+1)*f(m+1)*sin(pi*n*(m+.5)/L) % m=0 % % Examples: % --------- % % The following figures show the first 4 basis functions of the DSTII of % length 20: % % % The dstiii is the adjoint of dstii. % F=dstiii(eye(20)); % % for ii=1:4 % subplot(4,1,ii); % stem(F(:,ii)); % end; % % % References: % K. Rao and P. Yip. Discrete Cosine Transform, Algorithms, Advantages, % Applications. Academic Press, 1990. % % M. V. Wickerhauser. Adapted wavelet analysis from theory to software. % Wellesley-Cambridge Press, Wellesley, MA, 1994. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/dstii.html} %@seealso{dctii, dstiii, dstiv} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_PUREFREQ % REFERENCE: REF_DSTII error(nargchk(1,3,nargin)); if nargin<3 dim=[]; end; if nargin<2 L=[]; end; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'DSTII'); if ~isempty(L) f=postpad(f,L); end; c = comp_dst(f,2); c=assert_sigreshape_post(c,dim,permutedsize,order); % This is a slow, but convenient way of expressing the above algorithm. %R=1/sqrt(2)*[zeros(1,L); ... % diag(exp((1:L)*pi*i/(2*L)));... % [flipud(diag(-exp(-(1:L-1)*pi*i/(2*L)))),zeros(L-1,1)]]; %R(L+1,L)=i; %c=i*(R'*fft([f;-flipud(f)])/sqrt(L)/2); ltfat/inst/fourier/Contents.m0000664000175000017500000000735112612404256016177 0ustar susnaksusnak% LTFAT - Basic Fourier and DCT analysis. % % Peter L. Soendergaard, 2008 - 2015. % % Support routines % FFTINDEX - Index of positive and negative frequencies. % MODCENT - Centered modulo operation. % FLOOR23 - Previous number with only 2,3 factors % FLOOR235 - Previous number with only 2,3,5 factors % CEIL23 - Next number with only 2,3 factors % CEIL235 - Next number with only 2,3,5 factors % NEXTFASTFFT - Next efficient FFT size (2,3,5,7). % % Basic Fourier analysis % DFT - Unitary discrete Fourier transform. % IDFT - Inverse of DFT. % FFTREAL - FFT for real valued signals. % IFFTREAL - Inverse of FFTREAL. % GGA - Generalized Goertzel Algorithm. % CHIRPZT - Chirped Z-transform. % FFTGRAM - Plot energy of FFT. % PLOTFFT - Plot FFT coefficients. % PLOTFFTREAL - Plot FFTREAL coefficients. % % Simple operations on periodic functions % INVOLUTE - Involution. % PEVEN - Even part of periodic function. % PODD - Odd part of periodic function. % PCONV - Periodic convolution. % PXCORR - Periodic crosscorrelation. % LCONV - Linear convolution. % LXCORR - Linear crosscorrelation. % ISEVENFUNCTION - Test if function is even. % MIDDLEPAD - Cut or extend even function. % % Periodic functions % EXPWAVE - Complex exponential wave. % PCHIRP - Periodic chirp. % PGAUSS - Periodic Gaussian. % PSECH - Periodic SECH. % PBSPLINE - Periodic B-splines. % SHAH - Shah distribution. % PHEAVISIDE - Periodic Heaviside function. % PRECT - Periodic rectangle function. % PSINC - Periodic sinc function. % % Hermite functions and fractional Fourier transforms % PHERM - Periodic Hermite functions. % HERMBASIS - Orthonormal basis of Hermite functions. % DFRACFT - Discrete Fractional Fourier transform % FFRACFT - Fast Fractional Fourier transform % % Approximation of continuous functions % FFTRESAMPLE - Fourier interpolation. % DCTRESAMPLE - Cosine interpolation. % PDERIV - Derivative of periodic function. % FFTANALYTIC - Analytic representation of a function. % % Cosine and Sine transforms. % DCTI - Discrete cosine transform type I % DCTII - Discrete cosine transform type II % DCTIII - Discrete cosine transform type III % DCTIV - Discrete cosine transform type IV % DSTI - Discrete sine transform type I % DSTII - Discrete sine transform type II % DSTIII - Discrete sine transform type III % DSTIV - Discrete sine transform type IV % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % Url: http://ltfat.github.io/doc/fourier/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/fourier/chirpzt.m0000664000175000017500000001105612612404256016062 0ustar susnaksusnakfunction c = chirpzt(f,K,fdiff,foff,fs,dim) %-*- texinfo -*- %@deftypefn {Function} chirpzt %@verbatim %CHIRPZT Chirped Z-transform % Usage: c = chirpzt(f,K,fdiff) % c = chirpzt(f,K,fdiff,foff) % c = chirpzt(f,K,fdiff,foff,fs) % % Input parameters: % f : Input data. % K : Number of values. % fdiff : Frequency increment. % foff : Starting frequency. % fs : Sampling frequency. % % Output parameters: % c : Coefficient vector. % % c = CHIRPZT(f,K,fdiff,foff) computes K samples of the discrete-time % fourier transform DTFT c of f at values c(k+1)=F(2pi(f_{off}+kf_{diff})) % for k=0,dots,K-1 where F=DTFT(f). Values foff and fdiff should % be in range of 0-1. If foff is ommited or empty, it is considered to % be 0. If fdiff is ommited or empty, K equidistant values % c(k+1)=F(2pi k/K) are computed. If even K is ommited or empty, % input length is used instead resulting in the same values as fft does. % % c = CHIRPZT(f,K,fdiff,foff,fs) computes coefficients using frequency % values relative to fs c(k+1)=F(2pi(f_{off}+kf_{diff})/fs) for k=0,dots,K-1. % % The input f is processed along the first non-singleton dimension or % along dimension dim if specified. % % Examples: % --------- % % Calculating DTFT samples of interest (aka zoom FFT): % % % Generate input signal % fs = 8000; % L = 2^10; % k = (0:L-1).'; % f1 = 400; % f2 = 825; % f = 5*sin(2*pi*k*f1/fs + pi/4) + 2*sin(2*pi*k*f2/fs - pi/3); % % % This is equal to fft(f) % ck = chirpzt(f,L); % % %chirpzt to FFT error: % norm(ck-fft(f)) % % % Frequency "resolution" in Hz % fdiff = 0.4; % % Frequency offset in Hz % foff = 803.9; % % Number of frequency values % K = 125; % % DTFT samples. The frequency range of interest is 803.9-853.5 Hz % ckchzt = chirpzt(f,K,fdiff,foff,fs); % % % Plot modulus of coefficients % figure(1); % fax=foff+fdiff.*(0:K-1); % hold on; % stem(k/L*fs,abs(ck),'k'); % stem(fax,abs(ckchzt),'r:'); % set(gca,'XLim',[foff,foff+K*fdiff]); % set(gca,'YLim',[0 1065]); % xlabel('f[Hz]'); % ylabel('|ck|'); % % % Plot phase of coefficients % figure(2); % hold on; % stem(k/L*fs,angle(ck),'k'); % stem(fax,angle(ckchzt),'r:'); % set(gca,'XLim',[foff,foff+K*fdiff]); % set(gca,'YLim',[-pi pi]); % xlabel('f[Hz]'); % ylabel('angle(ck)'); % % % References: % L. Rabiner, R. Schafer, and C. Rader. The chirp Z-transform algorithm. % Audio and Electroacoustics, IEEE Transactions on, 17(2):86-92, 1969. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/chirpzt.html} %@seealso{gga} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . %% Check the input arguments if nargin < 1 error('%s: Not enough input arguments.',upper(mfilename)) end if isempty(f) error('%s: X must be a nonempty vector or a matrix.',upper(mfilename)) end if nargin<6 dim=[]; end; [f,~,Ls,~,dim,permutedsize,order]=assert_sigreshape_pre(f,[],dim,'CHIRPZT'); if nargin > 1 && ~isempty(K) if ~isreal(K) || ~isscalar(K) || rem(K,1)~=0 error('%s: K must be a real integer.',upper(mfilename)) end else K = size(f,1); end if nargin > 2 && ~isempty(fdiff) if ~isreal(K) || ~isscalar(K) error('%s: fdiff must be a real scalar.',upper(mfilename)) end else fdiff = 1/K; end if nargin > 3 && ~isempty(foff) if ~isreal(K) || ~isscalar(K) error('%s: foff must be a real scalar.',upper(mfilename)) end else foff = 0; end if nargin > 4 && ~isempty(fs) if ~isreal(fs) || ~isscalar(fs) error('%s: fs must be a real scalar.',upper(mfilename)) end else fs = 1; end c = comp_chirpzt(f,K,2*pi*fdiff/fs,2*pi*foff/fs); permutedsize(1)=K; c=assert_sigreshape_post(c,dim,permutedsize,order); ltfat/inst/fourier/ffracft.m0000664000175000017500000000760512612404256016017 0ustar susnaksusnakfunction frf=ffracft(f,a,varargin) %-*- texinfo -*- %@deftypefn {Function} ffracft %@verbatim %FFRACFT Approximate fast fractional Fourier transform % Usage: frf=ffracft(f,a) % frf=ffracft(f,a,dim) % % FFRACFT(f,a) computes an approximation of the fractional Fourier % transform of the signal f to the power a. If f is % multi-dimensional, the transformation is applied along the first % non-singleton dimension. % % FFRACFT(f,a,dim) does the same along dimension dim. % % FFRACFT takes the following flags at the end of the line of input % arguments: % % 'origin' Rotate around the origin of the signal. This is the % same action as the DFT, but the signal will split in % the middle, which may not be the correct action for % data signals. This is the default. % % 'middle' Rotate around the middle of the signal. This will not % break the signal in the middle, but the DFT cannot be % obtained in this way. % % Examples: % --------- % % The following example shows a rotation of the LTFATLOGO test % signal: % % sgram(ffracft(ltfatlogo,.3,'middle'),'lin','nf'); % % % References: % A. Bultheel and S. Martinez. Computation of the Fractional Fourier % Transform. Appl. Comput. Harmon. Anal., 16(3):182-202, 2004. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/ffracft.html} %@seealso{dfracft, hermbasis, pherm} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Christoph Wiesmeyr % TESTING: ?? if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.p = 2; definput.keyvals.dim = []; definput.flags.center = {'origin','middle'}; [flags,keyvals,dim,p]=ltfatarghelper({'dim','p'},definput,varargin); [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],dim,upper(mfilename)); % correct input a=mod(a,4); if flags.do_middle f=fftshift(f); end; % special cases switch(a) case 0 frf=f; case 1 frf=fft(f)/sqrt(L); case 2 frf=flipud(f); case 3 frf=fft(flipud(f)); otherwise % reduce to interval 0.5 < a < 1.5 if (a>2.0), a = a-2; f = flipud(f); end if (a>1.5), a = a-1; f = fft(f)/sqrt(L); end if (a<0.5), a = a+1; f = ifft(f)*sqrt(L); end % general setting alpha = a*pi/2; tana2 = tan(alpha/2); sina = sin(alpha); % oversample and zero pad f (sinc interpolation) m=norm(f); f=ifft(middlepad(fft(f),2*L))*sqrt(2); f=middlepad(f,4*L); % chirp multiplication chrp = fftshift(exp(-i*pi/L*tana2/4*((-2*L):(2*L-1))'.^2)); f=f.*chrp; % chirp convolution c = pi/L/sina/4; chrp2=fftshift(exp(i*c*((-2*L):(2*L-1))'.^2)); frf=(pconv(middlepad(chrp2,8*L),middlepad(f,8*L))); frf(2*L+1:6*L)=[]; % chirp multiplication frf=frf.*chrp; % normalize and downsample frf(L+1:3*L)=[]; ind=ceil(L/2); ft=fft(frf); ft(ind+1:ind+L)=[]; frf=ifft(ft); frf = exp(-i*(1-a)*pi/4)*frf; frf=normalize(frf)*m; end; if flags.do_middle frf=ifftshift(frf); end; frf=assert_sigreshape_post(frf,dim,permutedsize,order); ltfat/inst/fourier/plotfft.m0000664000175000017500000001272312612404256016057 0ustar susnaksusnakfunction plotfft(coef,varargin) %-*- texinfo -*- %@deftypefn {Function} plotfft %@verbatim %PLOTFFT Plot the output from FFT % Usage: plotfft(coef); % plotfft(coef,fs); % % PLOTFFT(coef) plots the output from the fft function. The % frequency axis will use normalized frequencies between 0 and 1 (the % Nyquist frequency). % % PLOTFFT(coef,fs) does the same for the FFT of a signal sampled at % a sampling rate of fs Hz. % % PLOTFFT(coef,fs,dynrange) additionally limits the dynamic range of the % plot. See the description of the 'dynrange' parameter below. % % PLOTFFT accepts the following optional arguments: % % 'dynrange',r Limit the dynamical range to r by using a colormap in % the interval [chigh-r,chigh], where chigh is the highest % value in the plot. The default value of [] means to not % limit the dynamical range. % % 'db' Apply 20*log_{10} to the coefficients. This makes % it possible to see very weak phenomena, but it might show % too much noise. This is the default. % % 'dbsq' Apply 10*log_{10} to the coefficients. Same as the % 'db' option, but assumes that the input is already squared. % % 'lin' Show the coefficients on a linear scale. This will % display the raw input without any modifications. Only works for % real-valued input. % % 'linsq' Show the square of the coefficients on a linear scale. % % 'linabs' Show the absolute value of the coefficients on a linear % scale. % % 'nf' Display negative frequencies, with the zero-frequency % centered in the middle. This is the default. % % 'posfreq' Display only the positive frequencies. % % 'dim',dim If coef is multidimensional, dim indicates the % dimension along which are the individual channels oriented. % Value 1 indicates columns, value 2 rows. % % 'flog' Use logarithmic scale for the frequency axis. This flag is % only valid in conjuction with the 'posfreq' flag. % % % In addition to these parameters, PLOTFFT accepts any of the flags % from NORMALIZE. The coefficients will be normalized as specified % before plotting. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/plotfft.html} %@seealso{plotfftreal} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin<1 error('%s: Too few input parameters.',upper(mfilename)); end; % if ~isvector(coef) % error('%s: Can only plot vectors.',upper(mfilename)); % end; definput.import={'ltfattranslate','normalize'}; definput.importdefaults={'null'}; definput.flags.log={'db','dbsq','lin','linsq','linabs'}; definput.flags.posfreq={'nf','posfreq'}; definput.flags.freqscale={'flin','flog'}; definput.keyvals.fs=[]; definput.keyvals.dynrange=[]; definput.keyvals.opts={}; definput.keyvals.dim=[]; [flags,kv,fs]=ltfatarghelper({'fs','dynrange'},definput,varargin); if flags.do_nf && flags.do_flog warning(sprintf(['%s: Disabling the ''flog'' flag. It cannot be used ',... 'in plot containing negative frequences.'],... upper(mfilename))); flags.do_flog = 0; end [coef,~,N]=assert_sigreshape_pre(coef,[],kv.dim,upper(mfilename)); coef=normalize(coef,flags.norm); % Apply transformation to coefficients. if flags.do_db coef=20*log10(abs(coef)+realmin); end; if flags.do_dbsq coef=10*log10(abs(coef)+realmin); end; if flags.do_linsq coef=abs(coef).^2; end; if flags.do_linabs coef=abs(coef); end; if flags.do_lin if ~isreal(coef) error(['Complex valued input cannot be plotted using the "lin" flag.',... 'Please use the "linsq" or "linabs" flag.']); end; end; % 'dynrange' parameter is handled by thresholding the coefficients. if ~isempty(kv.dynrange) maxclim=max(coef(:)); coef(coef. % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % Assert correct input. % AUTHOR : Peter L. Soendergaard % TESTING: TEST_INVOLUTE % REFERENCE: OK error(nargchk(1,2,nargin)); if nargin==1 dim=[]; end; L=[]; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'INVOLUTE'); % This is where the calculation is performed. % The reshape(...,size(f) ensures that f will keep its % original shape if it is multidimensional. f=reshape(conj([f(1,:); ... flipud(f(2:L,:))]),size(f)); f=assert_sigreshape_post(f,dim,permutedsize,order); ltfat/inst/fourier/dcti.m0000664000175000017500000000706112612404256015323 0ustar susnaksusnakfunction c=dcti(f,L,dim) %-*- texinfo -*- %@deftypefn {Function} dcti %@verbatim %DCTI Discrete Cosine Transform type I % Usage: c=dcti(f); % c=dcti(f,L); % c=dcti(f,[],dim); % c=dcti(f,L,dim); % % DCTI(f) computes the discrete cosine transform of type I of the % input signal f. If f is a matrix then the transformation is applied to % each column. For N-D arrays, the transformation is applied to the first % non-singleton dimension. % % DCTI(f,L) zero-pads or truncates f to length L before doing the % transformation. % % DCTI(f,[],dim) or DCTI(f,L,dim) applies the transformation along % dimension dim. % % The transform is real (output is real if input is real) and % it is orthonormal. % % This transform is its own inverse. % % Let f be a signal of length L, let c=dcti(f) and define the vector % w of length L by % % w = [1/sqrt(2) 1 1 1 1 ...1/sqrt(2)] % % Then % % L-1 % c(n+1) = sqrt(2/(L-1)) * sum w(n+1)*w(m+1)*f(m+1)*cos(pi*n*m/(L-1)) % m=0 % % The implementation of this functions uses a simple algorithm that require % an FFT of length 2L-2, which might potentially be the product of a large % prime number. This may cause the function to sometimes execute slowly. % If guaranteed high speed is a concern, please consider using one of the % other DCT transforms. % % Examples: % --------- % % The following figures show the first 4 basis functions of the DCTI of % length 20: % % % The dcti is its own adjoint. % F=dcti(eye(20)); % % for ii=1:4 % subplot(4,1,ii); % stem(F(:,ii)); % end; % % % References: % K. Rao and P. Yip. Discrete Cosine Transform, Algorithms, Advantages, % Applications. Academic Press, 1990. % % M. V. Wickerhauser. Adapted wavelet analysis from theory to software. % Wellesley-Cambridge Press, Wellesley, MA, 1994. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/dcti.html} %@seealso{dctii, dctiv, dsti} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_PUREFREQ % REFERENCE: REF_DCTI error(nargchk(1,3,nargin)); if nargin<3 dim=[]; end; if nargin<2 L=[]; end; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'DCTI'); if ~isempty(L) f=postpad(f,L); end; if L==1 c=f; else c = comp_dct(f,1); % c=zeros(L,W,assert_classname(f)); % % f2=[f;flipud(f(2:L-1,:))]/sqrt(2); % f2(1,:)=f2(1,:)*sqrt(2); % f2(L,:)=f2(L,:)*sqrt(2); % % % Do DFT. % s1=fft(f2)/sqrt(2*L-2); % % % This could be done by a repmat instead. % for w=1:W % c(:,w)=s1(1:L,w)+[0;s1(2*L-2:-1:L+1,w);0]; % end; % % c(2:L-1,:)=c(2:L-1,:)/sqrt(2); % % if isreal(f) % c=real(c); % end; end; c=assert_sigreshape_post(c,dim,permutedsize,order); ltfat/inst/fourier/podd.m0000664000175000017500000000234312612404256015324 0ustar susnaksusnakfunction f=podd(f,dim) %-*- texinfo -*- %@deftypefn {Function} podd %@verbatim %PODD Odd part of periodic function % Usage: fe=podd(f); % fe=podd(f,dim); % % PODD(f) returns the odd part of the periodic sequence f. % % PODD(f,dim) does the same along dimension dim. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/podd.html} %@seealso{peven, dft, involute, pconv} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if nargin==1 f=(f-involute(f))/2; else f=(f-involute(f,dim))/2; end; ltfat/inst/fourier/fftindex.m0000664000175000017500000000315212612404256016204 0ustar susnaksusnakfunction n=fftindex(N,nyquistzero) %-*- texinfo -*- %@deftypefn {Function} fftindex %@verbatim %FFTINDEX Frequency index of FFT modulations % Usage: n=fftindex(N); % % FFTINDEX(N) returns the index of the frequencies of the standard FFT of % length N as they are ordered in the output from the fft routine. The % numbers returned are in the range -ceil(N/2)+1:floor(N/2) % % FFTINDEX(N,0) does as above, but sets the Nyquist frequency to zero. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/fftindex.html} %@seealso{dft} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: OK % REFERENCE: OK error(nargchk(1,2,nargin)); if nargin ==1 if rem(N,2)==0 n=[0:N/2,-N/2+1:-1].'; else n=[0:(N-1)/2,-(N-1)/2:-1].'; end; else if rem(N,2)==0 n=[0:N/2-1,0,-N/2+1:-1].'; else n=[0:(N-1)/2,-(N-1)/2:-1].'; end; end; ltfat/inst/fourier/pherm.m0000664000175000017500000001446212612404256015516 0ustar susnaksusnakfunction [g,D]=pherm(L,order,varargin) %-*- texinfo -*- %@deftypefn {Function} pherm %@verbatim %PHERM Periodized Hermite function % Usage: g=pherm(L,order); % g=pherm(L,order,tfr); % [g,D]=pherm(...); % % Input parameters: % L : Length of vector. % order : Order of Hermite function. % tfr : ratio between time and frequency support. % Output parameters: % g : The periodized Hermite function % % PHERM(L,order,tfr) computes samples of a periodized Hermite function % of order order. order is counted from 0, so the zero'th order % Hermite function is the Gaussian. % % The parameter tfr determines the ratio between the effective support % of g and the effective support of the DFT of g. If tfr>1 then g* % has a wider support than the DFT of g. % % PHERM(L,order) does the same setting tfr=1. % % If order is a vector, PHERM will return a matrix, where each column % is a Hermite function with the corresponding order. % % [g,D]=PHERM(...) also returns the eigenvalues D of the Discrete % Fourier Transform corresponding to the Hermite functions. % % The returned functions are eigenvectors of the DFT. The Hermite % functions are orthogonal to all other Hermite functions with a % different eigenvalue, but eigenvectors with the same eigenvalue are % not orthogonal (but see the flags below). % % PHERM takes the following flags at the end of the line of input % arguments: % % 'accurate' Use a numerically very accurate that computes each % Hermite function individually. This is the default. % % 'fast' Use a less accurate algorithm that calculates all the % Hermite up to a given order at once. % % 'noorth' No orthonormalization of the Hermite functions. This is % the default. % % 'polar' Orthonormalization of the Hermite functions using the % polar decomposition orthonormalization method. % % 'qr' Orthonormalization of the Hermite functions using the % Gram-Schmidt orthonormalization method (usign qr). % % If you just need to compute a single Hermite function, there is no % speed difference between the 'accurate' and 'fast' algorithm. % % Examples: % --------- % % The following plot shows the spectrograms of 4 Hermite functions of % length 200 with order 1, 10, 100, and 190: % % subplot(2,2,1); % sgram(pherm(200,1),'nf','tc','lin','nocolorbar'); axis('square'); % % subplot(2,2,2); % sgram(pherm(200,10),'nf','tc','lin','nocolorbar'); axis('square'); % % subplot(2,2,3); % sgram(pherm(200,100),'nf','tc','lin','nocolorbar'); axis('square'); % % subplot(2,2,4); % sgram(pherm(200,190),'nf','tc','lin','nocolorbar'); axis('square'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/pherm.html} %@seealso{hermbasis, pgauss, psech} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHORs: Thomasz Hrycak and Peter L. Soendergaard. % if nargin<2 error('%s: Too few input parameters.',upper(mfilename)); end; definput.keyvals.tfr=1; definput.flags.phase={'accurate','fast'}; definput.flags.orthtype={'noorth','polar','qr'}; [flags,kv,tfr]=ltfatarghelper({'tfr'},definput,varargin); if size(L,1)>1 || size(L,2)>1 error('L must be a scalar'); end; if rem(L,1)~=0 error('L must be an integer.') end; % Parse tfr and order. if sum(1-(size(tfr)==1))>1 error('tfr must be a scalar or vector'); end; if sum(1-(size(order)==1))>1 error('"order" must be a scalar or vector'); end; W=length(order); order=order(:); % Calculate W windows. if flags.do_accurate % Calculate W windows. g=zeros(L,W); for w=1:W thisorder=order(w); safe=get_safe(thisorder); % Outside the interval [-safe,safe] then H(thisorder) is numerically zero. nk=ceil(safe/sqrt(L/sqrt(tfr))); sqrtl=sqrt(L); lr=(0:L-1).'; for k=-nk:nk xval=(lr/sqrtl-k*sqrtl)/sqrt(tfr); g(:,w)=g(:,w)+comp_hermite(thisorder, sqrt(2*pi)*xval); end; end; else highestorder=max(order); safe=get_safe(highestorder); % Outside the interval [-safe,safe] then H(thisorder) is numerically zero. nk=ceil(safe/sqrt(L/sqrt(tfr))); g=zeros(L,highestorder+1); sqrtl=sqrt(L); lr=(0:L-1).'; for k=-nk:nk xval=(lr/sqrtl-k*sqrtl)/sqrt(tfr); g=g+comp_hermite_all(highestorder+1, sqrt(2*pi)*xval); end; g=g(:,order+1); end; if flags.do_polar % Orthonormalize within each of the 4 eigenspaces for ii=0:3 subidx=(rem(order,4)==ii); gsub=g(:,subidx); [U,S,V]=svd(gsub,0); gsub=U*V'; g(:,subidx)=gsub; end; end; if flags.do_qr % Orthonormalize within each of the 4 eigenspaces for ii=0:3 subidx=(rem(order,4)==ii); gsub=g(:,subidx); [Q,R]=qr(gsub,0); g(:,subidx)=Q; end; end; if flags.do_noorth % Just normalize it, no orthonormalization g=normalize(g); end; if nargout>1 % set up the eigenvalues D = exp(-1i*order*pi/2); end; function safe=get_safe(order) % These numbers have been computed numerically. if order<=6 safe=4; else if order<=18 safe=5; else if order<=31 safe=6; else if order<=46 safe=7; else % Anything else, use a high number. safe=12; end; end; end; end; ltfat/inst/fourier/fftresample.m0000664000175000017500000000405012612404256016703 0ustar susnaksusnakfunction f=fftresample(f,L,dim) %-*- texinfo -*- %@deftypefn {Function} fftresample %@verbatim %FFTRESAMPLE Resample signal using Fourier interpolation % Usage: h=fftresample(f,L); % h=fftresample(f,L,dim); % % FFTRESAMPLE(f,L) returns a Fourier interpolation of the signal f* % to length L. If the function is applied to a matrix, it will apply % to each column. % % FFTRESAMPLE(f,L,dim) does the same along dimension dim. % % If the input signal is *not* a periodic signal (or close to), the % DCTRESAMPLE method gives much better results at the endpoints. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/fftresample.html} %@seealso{dctresample, middlepad} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % ------- Checking of input -------------------- error(nargchk(2,3,nargin)); if nargin<3 dim=[]; end; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'FFTRESAMPLE'); wasreal=isreal(f); % The 'dim=1' below have been added to avoid fft and middlepad being % smart about choosing the dimension. % In addition, postpad is explicitly told to pad with zeros. if isreal(f) L2=floor(L/2)+1; f=ifftreal(postpad(fftreal(f,[],1),L2,1),L,0,1)/Ls*L; else f=ifft(middlepad(fft(f,[],1),L,1))/Ls*L; end; f=assert_sigreshape_post(f,dim,permutedsize,order); ltfat/inst/fourier/pchirp.m0000664000175000017500000000476612612404256015676 0ustar susnaksusnakfunction g=pchirp(L,n) %-*- texinfo -*- %@deftypefn {Function} pchirp %@verbatim %PCHIRP Periodic chirp % Usage: g=pchirp(L,n); % % PCHIRP(L,n) returns a periodic, discrete chirp of length L that % revolves n times around the time-frequency plane in frequency. n must be % an integer number. % % To get a chirp that revolves around the time-frequency plane in time, % use : % % dft(pchirp(L,N)); % % The chirp is computed by: % % g(l+1) = exp(pi*i*n*(l-ceil(L/2))^2*(L+1)/L) for l=0,...,L-1 % % The chirp has absolute value 1 everywhere. To get a chirp with unit % l^2-norm, divide the chirp by sqrt L. % % Examples: % --------- % % A spectrogram on a linear scale of an even length chirp: % % sgram(pchirp(40,2),'lin'); % % The DFT of the same chirp, now revolving around in time: % % sgram(dft(pchirp(40,2)),'lin'); % % An odd-length chirp. Notice that the chirp starts at a frequency between % two sampling points: % % sgram(pchirp(41,2),'lin'); % % % References: % H. G. Feichtinger, M. Hazewinkel, N. Kaiblinger, E. Matusiak, and % M. Neuhauser. Metaplectic operators on c^n. The Quarterly Journal of % Mathematics, 59(1):15-28, 2008. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/pchirp.html} %@seealso{dft, expwave} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard % TESTING: OK % REFERENCE: OK error(nargchk(2,2,nargin)); if ~isnumeric(L) || ~isscalar(L) error('%s: L must be a scalar',upper(mfilename)); end; if ~isnumeric(n) || ~isscalar(n) error('%s: n must be a scalar',upper(mfilename)); end; if rem(L,1)~=0 error('%s: L must be an integer',upper(mfilename)); end; if rem(n,1)~=0 error('%s: n must be an integer',upper(mfilename)); end; g=comp_pchirp(L,n); ltfat/inst/fourier/pheaviside.m0000664000175000017500000000362212612404256016520 0ustar susnaksusnakfunction h=pheaviside(L) %-*- texinfo -*- %@deftypefn {Function} pheaviside %@verbatim %PHEAVISIDE Periodic Heaviside function % Usage: h=pheaviside(L); % % PHEAVISIDE(L) returns a periodic Heaviside function. The periodic % Heaviside function takes on the value 1 for indices corresponding to % positive frequencies, 0 corresponding to negative frequencies and the % value .5 for the zero and Nyquist frequencies. % % To get a function that weights the negative frequencies by 1 and the % positive by 0, use involute(PHEAVISIDE(L)) % % As an example, the PHEAVISIDE function can be use to calculate the % Hilbert transform for a column vector f*: % % h=2*ifft(fft(f).*pheaviside(length(f))); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/pheaviside.html} %@seealso{middlepad, involute, fftindex} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard. % REFERENCE: OK % TESTING: OK error(nargchk(1,1,nargin)); h=zeros(L,1); if L>0 % First term is .5 h(1)=.5; % Set positive frequencies to 1. h(2:ceil(L/2))=1; % Last term (Nyquist frequency) is also .5, if it exists. if rem(L,2)==0 h(L/2+1)=.5; end; end; ltfat/inst/fourier/hermbasis.m0000664000175000017500000001027412612404256016355 0ustar susnaksusnakfunction [V,D]=hermbasis(L,p) %-*- texinfo -*- %@deftypefn {Function} hermbasis %@verbatim %HERMBASIS Orthonormal basis of discrete Hermite functions % Usage: V=hermbasis(L,p); % V=hermbasis(L); % [V,D]=hermbasis(...); % % HERMBASIS(L,p) computes an orthonormal basis of discrete Hermite % functions of length L. The vectors are returned as columns in the % output. p is the order of approximation used to construct the % position and difference operator. % % All the vectors in the output are eigenvectors of the discrete Fourier % transform, and resemble samplings of the continuous Hermite functions % to some degree (for low orders). % % [V,D]=HERMBASIS(...) also returns the eigenvalues D of the Discrete % Fourier Transform corresponding to the Hermite functions. % % Examples: % --------- % % The following plot shows the spectrograms of 4 Hermite functions of % length 200 with order 1, 10, 100, and 190: % % H=hermbasis(200); % % subplot(2,2,1); % sgram(H(:,1),'nf','tc','lin','nocolorbar'); axis('square'); % % subplot(2,2,2); % sgram(H(:,10),'nf','tc','lin','nocolorbar'); axis('square'); % % subplot(2,2,3); % sgram(H(:,100),'nf','tc','lin','nocolorbar'); axis('square'); % % subplot(2,2,4); % sgram(H(:,190),'nf','tc','lin','nocolorbar'); axis('square'); % % % References: % A. Bultheel and S. Martinez. Computation of the Fractional Fourier % Transform. Appl. Comput. Harmon. Anal., 16(3):182-202, 2004. % % H. M. Ozaktas, Z. Zalevsky, and M. A. Kutay. The Fractional Fourier % Transform. John Wiley and Sons, 2001. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/hermbasis.html} %@seealso{dft, pherm} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Christoph Wiesmeyr, A. Bultheel % TESTING: TEST_HERMBASIS if nargin==1 p=2; end % compute vector with values for side diagonals d2 = [1 -2 1]; d_p = 1; s = 0; st = zeros(1,L); for k = 1:p/2, d_p = conv(d2,d_p); st([L-k+1:L,1:k+1]) = d_p; st(1) = 0; temp = [1:k;1:k]; temp = temp(:)'./[1:2*k]; s = s + (-1)^(k-1)*prod(temp)*2/k^2*st; end; % build discrete Hamiltonian P2=toeplitz(s); X2=diag(real(fft(s))); H =P2+X2; % Construct transformation matrix V (even and odd vectors) r = floor(L/2); even = ~rem(L,2); T1 = (eye(L-1) + flipud(eye(L-1))) / sqrt(2); T1(L-r:end,L-r:end) = -T1(L-r:end,L-r:end); if (even), T1(r,r) = 1; end T = eye(L); T(2:L,2:L) = T1; % Compute eigenvectors of two banded matrices THT = T*H*T'; E = zeros(L); Ev = THT(1:r+1,1:r+1); [ve,ee] = eig(Ev); Od = THT(r+2:L,r+2:L); [vo,eo] = eig(Od); % % malab eig returns sorted eigenvalues % if different routine gives unsorted eigvals, then sort first % % [d,inde] = sort(diag(ee)); [d,indo] = sort(diag(eo)); % ve = ve(:,inde'); vo = vo(:,indo'); % V(1:r+1,1:r+1) = fliplr(ve); V(r+2:L,r+2:L) = fliplr(vo); V = T*V; % shuffle eigenvectors ind = [1:r+1;r+2:2*r+2]; ind = ind(:); if (even) ind([L,L+2]) = []; else ind(L+1) = []; end cor=2*floor(L/4)+1; for k=(cor+1):2:(L-even) ind([k,k+1])=ind([k+1,k]); end V = V(:,ind'); if nargout>1 % set up the eigenvalues k=0:L-1; D = exp(-1i*k*pi/2); D=D(:); % correction for even signal lengths if ~rem(L,2) D(end)=exp(-1i*L*pi/2); end % shuffle the eigenvalues in the right order even=~mod(L,2); cor=2*floor(L/4)+1; for k=(cor+1):2:(L-even) D([k,k+1])=D([k+1,k]); end end; ltfat/inst/fourier/pconv.m0000664000175000017500000000605512612404256015527 0ustar susnaksusnakfunction h=pconv(f,g,varargin) %-*- texinfo -*- %@deftypefn {Function} pconv %@verbatim %PCONV Periodic convolution % Usage: h=pconv(f,g) % h=pconv(f,g,ftype); % % PCONV(f,g) computes the periodic convolution of f and g. The convolution % is given by % % L-1 % h(l+1) = sum f(k+1) * g(l-k+1) % k=0 % % PCONV(f,g,'r') computes the convolution where g is reversed % (involuted) given by % % L-1 % h(l+1) = sum f(k+1) * conj(g(k-l+1)) % k=0 % % This type of convolution is also known as cross-correlation. % % PCONV(f,g,'rr') computes the alternative where both f and g are % reversed given by % % L-1 % h(l+1) = sum conj(f(-k+1)) * conj(g(k-l+1)) % k=0 % % In the above formulas, l-k, k-l and -k are computed modulo L. % % The input arrays f and g can be 1D vectors or one of them can be % a multidimensional array. In either case, the convolution is performed % along columns with row vectors transformed to columns. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/pconv.html} %@seealso{dft, involute} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard, Jordy van Velthoven % TESTING: TEST_PCONV % REFERENCE: REF_PCONV complainif_notenoughargs(nargin, 2, 'PCONV'); definput.keyvals.L=[]; definput.keyvals.dim=[]; definput.flags.type={'default', 'r', 'rr'}; [flags,~,L,dim]=ltfatarghelper({'L','dim'},definput,varargin); [f,~,~,Wf,dimout,permutedsize_f,order_f]=assert_sigreshape_pre(f,L,dim,'PCONV'); [g,~,~,Wg,dimout,permutedsize_g,order_g]=assert_sigreshape_pre(g,L,dim,'PCONV'); if (Wf>1) && (Wg>1) error('%s: Only one of the inputs can be multi-dimensional.',upper(mfilename)); end; if size(f,1)~=size(g,1) error(['%s: f and g must have the same size in the direction of the',... ' convolution.'],upper(mfilename)); end; W=max(Wf,Wg); if Wf1 then g* % has a wider support than the DFT of g. % % PSECH(L) does the same setting tfr=1. % % PSECH(L,s,'samples') returns a hyperbolic secant with an effective % support of s samples. This means that approx. 96% of the energy or 74% % or the area under the graph is contained within s samples. This is % equivalent to PSECH(L,s^2/L). % % [g,tfr] = PSECH( ... ) additionally returns the time-to-frequency % support ratio. This is useful if you did not specify it (i.e. used % the 'samples' input format). % % The function is whole-point even. This implies that fft(PSECH(L,tfr)) % is real for any L and tfr. % % If this function is used to generate a window for a Gabor frame, then % the window giving the smallest frame bound ratio is generated by % PSECH(L,a*M/L). % % Examples: % --------- % % This example creates a PSECH function, and demonstrates that it is % its own Discrete Fourier Transform: % % g=psech(128); % % % Test of DFT invariance: Should be close to zero. % norm(g-dft(g)) % % The next plot shows the PSECH in the time domain compared to the Gaussian: % % plot((1:128)',fftshift(pgauss(128)),... % (1:128)',fftshift(psech(128))); % legend('pgauss','psech'); % % The next plot shows the PSECH in the frequency domain on a log % scale compared to the Gaussian: % % hold all; % magresp(pgauss(128),'dynrange',100); % magresp(psech(128),'dynrange',100); % legend('pgauss','psech'); % % The next plot shows PSECH in the time-frequency plane: % % sgram(psech(128),'tc','nf','lin'); % % % References: % A. J. E. M. Janssen and T. Strohmer. Hyperbolic secants yield Gabor % frames. Appl. Comput. Harmon. Anal., 12(2):259-267, 2002. % % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/psech.html} %@seealso{pgauss, pbspline, pherm} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . error(nargchk(1,4,nargin)); if nargin==1 tfr=1; end; if size(L,1)>1 || size(L,2)>1 error('L must be a scalar'); end; if rem(L,1)~=0 error('L must be an integer.') end; switch(nargin) case 1 tfr=1; cent=0; case 2 tfr=p2; cent=0; case 3 if ischar(p3) switch(lower(p3)) case {'s','samples'} tfr=p2^2/L; otherwise error('Unknown argument %s',p3); end; cent=0; else tfr=p2; cent=p3; end; case 4 tfr=p2^2/L; cent=p4; end; safe=12; g=zeros(L,1); sqrtl=sqrt(L); w=tfr; % Outside the interval [-safe,safe] then sech(pi*x) is numerically zero. nk=ceil(safe/sqrt(L/sqrt(w))); lr=(0:L-1).'; for k=-nk:nk g=g+sech(pi*(lr/sqrtl-k*sqrtl)/sqrt(w)); end; % Normalize it. g=g*sqrt(pi/(2*sqrt(L*w))); ltfat/inst/fourier/idft.m0000664000175000017500000000362212612404256015325 0ustar susnaksusnakfunction f=idft(c,N,dim) %-*- texinfo -*- %@deftypefn {Function} idft %@verbatim %IDFT Inverse normalized Discrete Fourier Transform % Usage: f=idft(c); % f=idft(c,N,dim); % % IDFT computes a normalized or unitary inverse discrete Fourier transform. % The unitary discrete Fourier transform is computed by % % L-1 % f(l+1) = 1/sqrt(L) * sum c(k+1)*exp(2*pi*i*k*l/L) % k=0 % % for l=0,...,L-1. % % The output of IDFT is a scaled version of the output from ifft. The % function takes exactly the same arguments as ifft. See the help on ifft % for a thorough description. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/idft.html} %@seealso{dft} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard, Jordy van Velthoven % TESTING: TEST_IDFT % REFERENCE: TEST_DFT error(nargchk(1,3,nargin)); if nargin<3 dim=[]; end; if nargin<2 N=[]; end; [c,N,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(c,N,dim,'IDFT'); % Force IFFT along dimension 1, since we have permuted the dimensions % manually f=ifft(c,N,1)*sqrt(N); f=assert_sigreshape_post(f,dim,permutedsize,order); ltfat/inst/fourier/ifftreal.m0000664000175000017500000000330412612404256016170 0ustar susnaksusnakfunction f=ifftreal(c,N,dim); %-*- texinfo -*- %@deftypefn {Function} ifftreal %@verbatim %IFFTREAL Inverse FFT for real valued signals % Usage: f=ifftreal(c,N); % f=ifftreal(c,N,dim); % % IFFTREAL(c,N) computes an inverse FFT of the positive frequency % Fourier coefficients c. The length N must always be specified, % because the correct transform length cannot be determined from the % size of c. % % IFFTREAL(c,N,dim) does the same along dimension dim. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/ifftreal.html} %@seealso{fftreal} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Peter L. Soendergaard error(nargchk(2,3,nargin)); if nargin==2 dim=[]; end; N2=floor(N/2)+1; [c,N2,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(c,N2,dim,'IFFTREAL'); % Clean for safety c(1,:)=real(c(1,:)); f=comp_ifftreal(c,N); % Restore the full size in the first dimension. permutedsize(1)=N; f=assert_sigreshape_post(f,dim,permutedsize,order); ltfat/inst/fourier/dstiii.m0000664000175000017500000000601412612404256015662 0ustar susnaksusnakfunction c=dstiii(f,L,dim) %-*- texinfo -*- %@deftypefn {Function} dstiii %@verbatim %DSTIII Discrete sine transform type III % Usage: c=dstiii(f); % c=dstiii(f,L); % c=dstiii(f,[],dim); % c=dstiii(f,L,dim); % % DSTIII(f) computes the discrete sine transform of type III of the % input signal f. If f is multi-dimensional, the transformation is % applied along the first non-singleton dimension. % % DSTIII(f,L) zero-pads or truncates f to length L before doing the % transformation. % % DSTIII(f,[],dim) or DSTIII(f,L,dim) applies the transformation along % dimension dim. % % The transform is real (output is real if input is real) and orthonormal. % % This is the inverse of DSTII. % % Let f be a signal of length L, let c=DSTIII(f) and define the vector % w of length L by % % w = [1 1 1 1 ... 1/sqrt(2)] % % Then % % L-1 % c(n+1) = sqrt(2/L) * sum w(m+1)*f(m+1)*sin(pi*(n+.5)*m/L) % m=0 % % % Examples: % --------- % % The following figures show the first 4 basis functions of the DSTIII of % length 20: % % % The dstii is the adjoint of dstiii. % F=dstii(eye(20)); % % for ii=1:4 % subplot(4,1,ii); % stem(F(:,ii)); % end; % % References: % K. Rao and P. Yip. Discrete Cosine Transform, Algorithms, Advantages, % Applications. Academic Press, 1990. % % M. V. Wickerhauser. Adapted wavelet analysis from theory to software. % Wellesley-Cambridge Press, Wellesley, MA, 1994. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/dstiii.html} %@seealso{dctii, dstii, dstiv} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard % TESTING: TEST_PUREFREQ % REFERENCE: REF_DSTIII error(nargchk(1,3,nargin)); if nargin<3 dim=[]; end; if nargin<2 L=[]; end; [f,L,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,L,dim,'DSTIII'); if ~isempty(L) f=postpad(f,L); end; c = comp_dst(f,3); c=assert_sigreshape_post(c,dim,permutedsize,order); % This is a slow, but convenient way of expressing the above algorithm. %R=1/sqrt(2)*[zeros(1,L); ... % diag(exp((1:L)*pi*i/(2*L)));... % [flipud(diag(-exp(-(1:L-1)*pi*i/(2*L)))),zeros(L-1,1)]]; %R(L+1,L)=i; % %c2=-sqrt(L)*2*i*ifft(R*f); % %c=c2(1:L,:); ltfat/inst/fourier/ceil23.m0000664000175000017500000000561612612404256015465 0ustar susnaksusnakfunction [nfft,tableout]=ceil23(n) %-*- texinfo -*- %@deftypefn {Function} ceil23 %@verbatim %CEIL23 Next number with only 2,3 factors % Usage: nceil=ceil23(n); % % CEIL23(n) returns the next number greater than or equal to n, % which can be written as a product of powers of 2 and 3. % % The algorithm will look up the best size in a table, which is computed % the first time the function is run. If the input size is larger than the % largest value in the table, the input size will be reduced by factors of % 2, until it is in range. % % [nceil,table]=CEIL23(n) additionally returns the table used for lookup. % % Examples: % --------- % % Return the first number larger or equal to 19 that can be written % solely as products of powers of 2 and 3*: % % ceil23(19) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/fourier/ceil23.html} %@seealso{floor23, ceil235, nextfastfft} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Peter L. Soendergaard persistent table; maxval=2^20; if isempty(table) % Compute the table for the first time, it is empty. l2=log(2); l3=log(3); l5=log(5); lmaxval=log(maxval); table=zeros(143,1); ii=1; prod2=1; for i2=0:floor(lmaxval/l2) prod3=prod2; for i3=0:floor((lmaxval-i2*l2)/l3) table(ii)=prod3; prod3=prod3*3; ii=ii+1; end; prod2=prod2*2; end; table=sort(table); end; % Copy input to output. This allows us to efficiently work in-place. nfft=n; % Handle input of any shape by Fortran indexing. for ii=1:numel(n) n2reduce=0; if n(ii)>maxval % Reduce by factors of 2 to get below maxval n2reduce=ceil(log2(nfft(ii)/maxval)); nfft(ii)=nfft(ii)/2^n2reduce; end; % Use a simple bisection method to find the answer in the table. from=1; to=numel(table); while from<=to mid = round((from + to)/2); diff = table(mid)-nfft(ii); if diff<0 from=mid+1; else to=mid-1; end end nfft(ii)=table(from); % Add back the missing factors of 2 (if any) nfft(ii)=nfft(ii)*2^n2reduce; end; tableout=table; ltfat/inst/frames/0000775000175000017500000000000012612404256014020 5ustar susnaksusnakltfat/inst/frames/framecoef2tfplot.m0000664000175000017500000000427412612404256017447 0ustar susnaksusnakfunction coef=framecoef2tfplot(F,coef) %-*- texinfo -*- %@deftypefn {Function} framecoef2tfplot %@verbatim %FRAMECOEF2TFPLOT Convert coefficients to time-frequency plane matrix % Usage: cout=framecoef2tfplot(F,cin); % % FRAMECOEF2TFPLOT(F,coef) converts the frame coefficients coef into % the time-frequency plane layout matrix. The frame object F must have % been created using FRAME. The function acts exactly as % FRAMECOEF2TF for frames which admit regular (rectangular) sampling % of a time-frequency plane and converts irregularly sampled coefficients % to a rectangular matrix. This is usefull for custom plotting. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framecoef2tfplot.html} %@seealso{frame, frametf2coef, framecoef2native, blockplot} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FRAMECOEF2TFPLOT'); complainif_notvalidframeobj(F,'FRAMECOEF2TFPLOT'); switch(F.type) % We could have done a try-catch block here, but it is slow case {'dgt','dgtreal','dwilt','wmdct','ufilterbank','ufwt','uwfbt','uwpfbt'} coef=framecoef2tf(F,coef); return; case 'fwt' coef = comp_fwtpack2cell(F,coef); case {'wfbt','wpfbt','filterbank','filterbankreal'} coef = F.coef2native(coef,size(coef)); end switch(F.type) case {'fwt','wfbt','wpfbt','filterbank','filterbankreal'} coef = comp_cellcoef2tf(coef); otherwise error('%s: TF-plane plot not supported for this transform.',upper(mfilename)); end; ltfat/inst/frames/frsynabs.m0000664000175000017500000002511212612404256016026 0ustar susnaksusnakfunction [f,relres,iter,c]=frsynabs(F,s,varargin) %-*- texinfo -*- %@deftypefn {Function} frsynabs %@verbatim %FRSYNABS Reconstruction from magnitude of coefficients % Usage: f=frsynabs(F,s); % f=frsynabs(F,s,Ls); % [f,relres,iter,c]=frsynabs(...); % % Input parameters: % F : Frame % s : Array of coefficients. % Ls : length of signal. % Output parameters: % f : Signal. % relres : Vector of residuals. % iter : Number of iterations done. % c : Coefficients with the reconstructed phase % % FRSYNABS(F,s) attempts to find a signal which has s as the absolute % value of its frame coefficients : % % s = abs(frana(F,f)); % % using an iterative method. % % FRSYNABS(F,s,Ls) does as above but cuts or extends f to length Ls. % % If the phase of the coefficients s is known, it is much better to use % frsyn. % % [f,relres,iter]=FRSYNABS(...) additionally returns the residuals in a % vector relres and the number of iteration steps iter. The residuals % are computed as: % % relres = norm(abs(cn)-s,'fro')/norm(s,'fro') % % where c_n is the Gabor coefficients of the signal in iteration n. % % [f,relres,iter,c]=FRSYNABS(...,'griflim'|'fgriflim') additionally returns % coefficients c with the reconstructed phase prior to the final reconstruction. % This is usefull for determining the consistency (energy lost in the nullspace % of F) of the reconstructed spectrogram. c will only be equal to frana(F,f) % if the spectrogram is already consistent (i.e. already in the range space of F*). % This is possible only for 'griflim' and 'fgriflim' methods. % % Generally, if the absolute value of the frame coefficients has not been % modified, the iterative algorithm will converge slowly to the correct % result. If the coefficients have been modified, the algorithm is not % guaranteed to converge at all. % % FRSYNABS takes the following parameters at the end of the line of input % arguments. % % Initial phase guess: % % 'input' Choose the starting phase as the phase of the input % s. This is the default % % 'zero' Choose a starting phase of zero. % % 'rand' Choose a random starting phase. % % The Griffin-Lim algorithm related parameters: % % 'griflim' Use the Griffin-Lim iterative method. This is the % default. % % 'fgriflim' Use the Fast Griffin-Lim iterative method. % % % 'Fd',Fd A canonical dual frame object or an anonymous function % acting as the synthesis operator of the canonical dual frame. % If not provided, the function attempts to create one using % Fd=framedual(F). % % 'alpha',a Parameter of the Fast Griffin-Lim algorithm. It is % ignored if not used together with 'fgriflim' flag. % % The BFGS method related paramaters: % % 'bfgs' Use the limited-memory Broyden Fletcher Goldfarb % Shanno (BFGS) method. % % 'p',p Parameter for the compressed version of the obj. function % in the l-BFGS method. It is ignored if not used together % with 'bfgs' flag. % % Other: % % 'tol',t Stop if relative residual error is less than the % specified tolerance. % % 'maxit',n Do at most n iterations. % % 'print' Display the progress. % % 'quiet' Don't print anything, this is the default. % % 'printstep',p If 'print' is specified, then print every p'th % iteration. Default value is p=10; % % The BFGS method makes use of the minFunc software. To use the BFGS method, % please install the minFunc software from: % http://www.cs.ubc.ca/~schmidtm/Software/minFunc.html. % % % References: % D. Griffin and J. Lim. Signal estimation from modified short-time % Fourier transform. IEEE Trans. Acoust. Speech Signal Process., % 32(2):236-243, 1984. % % N. Perraudin, P. Balazs, and P. L. Soendergaard. A fast Griffin-Lim % algorithm. In Applications of Signal Processing to Audio and Acoustics % (WASPAA), 2013 IEEE Workshop on, pages 1-4, Oct 2013. % % R. Decorsiere, P. Soendergaard, E. MacDonald, and T. Dau. Inversion of % auditory spectrograms, traditional spectrograms, and other envelope % representations. Audio, Speech, and Language Processing, IEEE/ACM % Transactions on, 23(1):46-56, Jan 2015. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/frsynabs.html} %@seealso{dgt, idgt} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Remi Decorsiere and Peter L. Soendergaard. % REFERENCE: OK % Check input paramameters. complainif_notenoughargs(nargin,2,'FRSYNABS'); complainif_notvalidframeobj(F,'FRSYNABS'); definput.keyvals.Ls=[]; definput.keyvals.tol=1e-6; definput.keyvals.Fd=[]; definput.keyvals.maxit=100; definput.keyvals.printstep=10; definput.keyvals.alpha=0.99; definput.keyvals.p=2; definput.flags.print={'quiet','print'}; definput.flags.startphase={'input','zero','rand'}; definput.flags.method={'griflim','bfgs','fgriflim'}; [flags,kv,Ls]=ltfatarghelper({'Ls','tol','maxit'},definput,varargin); % Determine the proper length of the frame L=framelengthcoef(F,size(s,1)); W=size(s,2); if flags.do_input % Start with the phase given by the input. c=s; end; if flags.do_zero % Start with a phase of zero. c=abs(s); end; if flags.do_rand c=abs(s).*exp(2*pi*i*rand(size(s))); end; % Use only abs(s) in the residum evaluations s = abs(s); % For normalization purposes norm_s=norm(s,'fro'); relres=zeros(kv.maxit,1); if isempty(kv.Fd) try Fd=frameaccel(framedual(F),L); Fdfrsyn = @(insig) Fd.frsyn(insig); catch % Canonical dual frame cannot be creted explicitly % TO DO: use pcg error('%s: The canonical dual frame is not available.',upper(mfilename)); end else if isstruct(kv.Fd) && isfield(kv.Fd,'frsyn') % The canonical dual frame was passed explicitly as a frame object Fd = frameaccel(kv.Fd,L); Fdfrsyn = @(insig) Fd.frsyn(insig); elseif isa(kv.Fd,'function_handle') % The anonymous function is expected to do (FF*)^(-1)F Fdfrsyn = kv.Fd; else error('%s: Invalid format of Fd.',upper(mfielname)); end end % Initialize windows to speed up computation F=frameaccel(F,L); if flags.do_griflim for iter=1:kv.maxit f=Fdfrsyn(c); c2=F.frana(f); c=s.*exp(1i*angle(c2)); relres(iter)=norm(abs(c2)-s,'fro')/norm_s; if flags.do_print if mod(iter,kv.printstep)==0 fprintf('FRSYNABS: Iteration %i, residual = %f.\n',iter,relres(iter)); end; end; if relres(iter)3 error('%s: 4th argument cannot be returned when using the BFGS method.',... upper(mfilename)); end % Setting up the options for minFunc opts = struct; if flags.do_quiet opts.Display = 'off'; end opts.MaxIter = kv.maxit; opts.optTol = kv.tol; opts.progTol = kv.tol; if nargout>1 % This custom function is called after each iteration. % We cannot use the objective function itself as it might be called % several times in a single iteration. % We use outputFcn to keep track of norm(abs(c)+s) % because the objective function is different: norm(abs(c).^p+s.^p) opts.outputFcn = @outputFcn; opts.outputFcn('init',kv.maxit,F,s); end % Don't limit the number of function evaluations, just the number of % time-steps. opts.MaxFunEvals = 1e9; opts.usemex = 0; f0 = Fdfrsyn(c); if kv.p ~= 2 objfun = @(x) gradfunp(x,F,s,kv.p); else objfun = @(x) gradfun(x,F,s); end [f,~,~,output] = minFunc(objfun,f0,opts); if nargout > 1 iter = output.iterations; res = opts.outputFcn('getRes'); relres = res/norm_s; end end; % Cut or extend f to the correct length, if desired. if ~isempty(Ls) f=postpad(f,Ls); else Ls=L; end; f=comp_sigreshape_post(f,Ls,0,[0; W]); % Subfunction to compute the objective function for the BFGS method. function [f,df]=gradfun(x,F,s) % f obj function value % df gradient value c=F.frana(x); inner = abs(c).^2-s.^2; f = norm(inner,'fro')^2; df = 4*real(conj(F.frsyn(inner.*c))); % Subfunction to compute the p-compressed objective function for the BFGS method. function [f,df]=gradfunp(x,F,s,p) c=F.frana(x); inner = abs(c).^p-s.^p; f = norm(inner,'fro')^2; df = 2*p*real(conj(F.frsyn( inner.*abs(c).^(p/2-1).*c))); function stop = outputFcn(x,iterationType,itNo,funEvals,f,t,gtd,g,d,optCond) % This is unfortunatelly a messy function. % Moreover, it computes one more analysis persistent res; persistent F; persistent s; if ischar(x) switch x case 'init' res = zeros(iterationType,1); F = itNo; s = funEvals; return; case 'getRes' stop = res; F = []; s=[]; res = []; return; end end if isempty(res) error('OUTPUTFCN: Initialize res first!'); end res(itNo+1) = norm(abs(F.frana(x)) - s,'fro'); stop = 0; ltfat/inst/frames/framecoef2native.m0000664000175000017500000000310512612404256017415 0ustar susnaksusnakfunction coef=framecoef2native(F,coef) %-*- texinfo -*- %@deftypefn {Function} framecoef2native %@verbatim %FRAMECOEF2NATIVE Convert coefficients to native format % Usage: coef=framecoef2native(F,coef); % % FRAMECOEF2NATIVE(F,coef) converts the frame coefficients coef into % the native coefficient format of the frame. The frame object F must % have been created using FRAME. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framecoef2native.html} %@seealso{frame, framenative2coef, framecoef2tf} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FRAMECOEF2NATIVE'); complainif_notvalidframeobj(F,'FRAMECOEF2NATIVE'); [MN,W]=size(coef); % .coef2native field is not mandatory since for some frames, both % coefficient formats are identical if isfield(F,'coef2native') coef=F.coef2native(coef,size(coef)); end; ltfat/inst/frames/frsyniter.m0000664000175000017500000001220612612404256016224 0ustar susnaksusnakfunction [f,relres,iter]=frsyniter(F,c,varargin) %-*- texinfo -*- %@deftypefn {Function} frsyniter %@verbatim %FRSYNITER Iterative synthesis % Usage: f=frsyniter(F,c); % f=frsyniter(F,c,Ls); % [f,relres,iter]=frsyniter(F,c,...); % % Input parameters: % F : Frame % c : Array of coefficients. % Ls : length of signal. % Output parameters: % f : Signal. % relres : Vector of residuals. % iter : Number of iterations done. % % f=FRSYNITER(F,c) iteratively inverts the analysis operator of F, so % FRSYNITER always performs the inverse operation of FRANA, even % when a perfect reconstruction is not possible by using FRSYN. % % [f,relres,iter]=FRSYNITER(...) additionally returns the relative % residuals in a vector relres and the number of iteration steps iter. % % *Note:* If it is possible to explicitly calculate the canonical dual % frame then this is usually a much faster method than invoking % FRSYNITER. % % FRSYNITER takes the following parameters at the end of the line of % input arguments: % % 'tol',t Stop if relative residual error is less than the % specified tolerance. Default is 1e-9 (1e-5 for single precision) % % 'maxit',n Do at most n iterations. % % 'cg' Solve the problem using the Conjugate Gradient % algorithm. This is the default. % % 'pcg' Solve the problem using the Preconditioned Conjugate Gradient % algorithm. % % 'print' Display the progress. % % 'quiet' Don't print anything, this is the default. % % Examples % -------- % % The following example shows how to rectruct a signal without ever % using the dual frame: % % F=frame('dgtreal','gauss',10,20); % c=frana(F,bat); % [r,relres]=frsyniter(F,c,'tol',1e-14); % norm(bat-r)/norm(bat) % semilogy(relres); % title('Conversion rate of the CG algorithm'); % xlabel('No. of iterations'); % ylabel('Relative residual'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/frsyniter.html} %@seealso{frame, frana, frsyn, franaiter} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHORS: Nicki Holighaus & Peter L. Soendergaard complainif_notenoughargs(nargin,2,'FRSYNITER'); complainif_notvalidframeobj(F,'FRSYNITER'); tolchooser.double=1e-9; tolchooser.single=1e-5; definput.keyvals.Ls=[]; definput.keyvals.tol=tolchooser.(class(c)); definput.keyvals.maxit=100; definput.flags.alg={'cg','pcg'}; definput.keyvals.printstep=10; definput.flags.print={'quiet','print'}; [flags,kv,Ls]=ltfatarghelper({'Ls'},definput,varargin); % Determine L from the first vector, it must match for all of them. L=framelengthcoef(F,size(c,1)); F=frameaccel(F,L); A=@(x) F.frsyn(F.frana(x)); % It is possible to specify the initial guess, but this is not % currently done if flags.do_pcg d=framediag(F,L); M=spdiags(d,0,L,L); [f,flag,~,iter,relres]=pcg(A,F.frsyn(c),kv.tol,kv.maxit,M); else [f,flag,~,iter,relres]=pcg(A,F.frsyn(c),kv.tol,kv.maxit); end; if nargout>1 relres=relres/norm(c(:)); end; % Cut or extend f to the correct length, if desired. if ~isempty(Ls) f=postpad(f,Ls); else Ls=L; end; if 0 % This code has been disabled, as the PCG algorithm is so much faster. if flags.do_unlocbox % Get the upper frame bound (Or an estimation bigger than the bound) [~,B]=framebounds(F,L,'a'); % Set the parameter for the fast projection on a B2 ball param.At=@(x) frsyn(F,x); % adjoint operator param.A=@(x) frana(F,x); % direct operator param.y=c; % coefficient param.tight=0; % It's not a tight frame param.max_iter=kv.maxit; param.tol=kv.tol; param.nu=B; % Display parameter 0 nothing, 1 summary at convergence, 2 all % steps if flags.do_print param.verbose=1; else param.verbose=0; end; % Make the projection. Requires UNLocBOX [f, ~] = fast_proj_B2(zeros(L,1), 0, param); % compute the residue res = param.A(f) - param.y; norm_res = norm(res(:), 2); relres=norm_res/norm(c(:), 2); iter=0; % The code of the fast_proj_B2 is not yet compatible with this end; end; ltfat/inst/frames/framelength.m0000664000175000017500000000304112612404256016470 0ustar susnaksusnakfunction L=framelength(F,Ls); %-*- texinfo -*- %@deftypefn {Function} framelength %@verbatim %FRAMELENGTH Frame length from signal % Usage: L=framelength(F,Ls); % % FRAMELENGTH(F,Ls) returns the length of the frame F, such that % F is long enough to expand a signal of length Ls. % % If the frame length is longer than the signal length, the signal will be % zero-padded by FRANA. % % If instead a set of coefficients are given, call FRAMELENGTHCOEF. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framelength.html} %@seealso{frame, framelengthcoef, frameclength} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . callfun = upper(mfilename); complainif_notenoughargs(nargin,2,callfun); complainif_notposint(Ls,'Ls',callfun); complainif_notvalidframeobj(F,callfun); % .length field is mandatory L=F.length(Ls); ltfat/inst/frames/framebounds.m0000664000175000017500000001630512612404256016510 0ustar susnaksusnakfunction [AF,BF]=framebounds(F,varargin); %-*- texinfo -*- %@deftypefn {Function} framebounds %@verbatim %FRAMEBOUNDS Frame bounds % Usage: fcond=framebounds(F); % [A,B]=framebounds(F); % [...]=framebounds(F,Ls); % % FRAMEBOUNDS(F) calculates the ratio B/A of the frame bounds of the % frame given by F. The length of the system the frame bounds are % calculated for is given by L=framelength(F,1). % % FRAMEBOUNDS(F,Ls) additionally specifies a signal length for which % the frame should work. The actual length used is L=framelength(F,Ls). % % [A,B]=FRAMEBOUNDS(F) returns the frame bounds A and B instead of % just their ratio. % % % 'framebounds` accepts the following optional parameters: % % 'fac' Use a factorization algorithm. The function will throw % an error if no algorithm is available. % % 'iter' Call eigs to use an iterative algorithm. % % 'full' Call eig to solve the full problem. % % 'auto' Choose the fac method if possible, otherwise % use the full method for small problems and the % iter method for larger problems. % This is the default. % % 'crossover',c % Set the problem size for which the 'auto' method % switches between full and iter. Default is 200. % % The following parameters specifically related to the iter method: % % 'tol',t Stop if relative residual error of eighs is less than the % specified tolerance. Default is 1e-9 % % 'maxit',n Do at most n iterations in eigs. Default is 100. % % 'pcgtol',t Stop if relative residual error of pcg is less than the % specified tolerance. Default is 1e-6 % % 'pcgmaxit',n Do at most n iterations in pcg. Default is 150. % % 'p',p The number of Lanzcos basis vectors to use. More vectors % will result in faster convergence, but a larger amount of % memory. The optimal value of p is problem dependent and % should be less than L. The default value chosen % automatically by eigs. % % 'print' Display the progress. % % 'quiet' Don't print anything, this is the default. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framebounds.html} %@seealso{frame, framered} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,1,'FRAMEBOUNDS'); complainif_notvalidframeobj(F,'FRAMEBOUNDS'); % We handle the container frames first if strcmp(F.type,'fusion') AF=0; BF=0; for ii=1:F.Nframes [A,B]=framebounds(F.frames{ii},varargin{:}); AF=AF+(A*F.w(ii)).^2; BF=BF+(B*F.w(ii)).^2; end; AF=sqrt(AF); BF=sqrt(BF); return; end; if strcmp(F.type,'tensor') AF=1; BF=1; for ii=1:F.Nframes [A,B]=framebounds(F.frames{ii},varargin{:}); AF=AF*A; BF=BF*B; end; return; end; definput.keyvals.Ls=1; definput.keyvals.maxit=100; definput.keyvals.tol=1e-9; definput.keyvals.pcgmaxit=150; definput.keyvals.pcgtol=1e-6; definput.keyvals.crossover=200; definput.keyvals.p=[]; definput.flags.print={'quiet','print'}; definput.flags.method={'auto','fac','iter','full'}; [flags,kv]=ltfatarghelper({'Ls'},definput,varargin); F=frameaccel(F,kv.Ls); L=F.L; % Default values, works for the pure frequency transforms. AF=1; BF=1; % Simple heuristic: If F.g is defined, the frame uses windows. if isfield(F,'g') if isempty(F.g) error('%s: No analysis frame is defined.', upper(mfilename)); end; g=F.g; op = @frana; opadj = @frsyn; end; F_isfac = isfield(F,'isfac') && F.isfac; if flags.do_fac && ~F_isfac error('%s: The type of frame has no factorization algorithm.',upper(mfilename)); end; if (flags.do_auto && F_isfac) || flags.do_fac switch(F.type) case 'gen' V=svd(g); AF=min(V)^2; BF=max(V)^2; case {'dgt','dgtreal'} [AF,BF]=gabframebounds(g,F.a,F.M,L); case {'dwilt','wmdct'} [AF,BF]=wilbounds(g,F.M,L); case {'filterbank','ufilterbank'} [AF,BF]=filterbankbounds(g,F.a,L); case {'filterbankreal','ufilterbankreal'} [AF,BF]=filterbankrealbounds(g,F.a,L); case 'fwt' [AF,BF]=wfbtbounds({g,F.J,'dwt'},L); case 'wfbt' [AF,BF]=wfbtbounds(g,L); case 'ufwt' [AF,BF]=wfbtbounds({g,F.J,'dwt'},L,F.flags.scaling); case 'uwfbt' [AF,BF]=wfbtbounds(g,L,F.flags.scaling); case 'wpfbt' [AF,BF]=wpfbtbounds(g,L,F.flags.interscaling); case 'uwpfbt' [AF,BF]=wpfbtbounds(g,L,F.flags.interscaling,F.flags.scaling); end; end; if (flags.do_auto && ~F_isfac && F.L>kv.crossover) || flags.do_iter if flags.do_print opts.disp=1; else opts.disp=0; end; opts.isreal = F.realinput; opts.maxit = kv.maxit; opts.tol = kv.tol; opts.issym = 0; if ~isempty(kv.p) opts.p = kv.p; end pcgopts.maxit = kv.pcgmaxit; pcgopts.tol = kv.pcgtol; % Upper frame bound frameop = @(x) F.frsyn(F.frana(x)); BF = real(eigs(frameop,L,1,'LM',opts)); % Lower frame bound frameop2 = @(x) F.frsyn(F.frana(x)); invfrop = @(x) pcg(frameop2,x,pcgopts.tol,pcgopts.maxit); % Test convergence of pcg test = randn(L,1); if ~F.realinput, test = test +1i*randn(L,1); end [~,flag] = invfrop(test); % If PCG converges, estimate the smallest eigenvalue, otherwise assume % AF = 0; if ~flag AF = real(eigs(invfrop,L,1,'SM',opts)); else AF = 0; end end; if (flags.do_auto && ~F_isfac && F.L<=kv.crossover) || flags.do_full % Compute thee transform matrix. bigM=opadj(F,op(F,eye(L))); D=eig(bigM); % Clean the eigenvalues, we know they are real D=real(D); AF=min(D); BF=max(D); end; if nargout<2 % Avoid the potential warning about division by zero. if AF==0 AF=Inf; else AF=BF/AF; end; end; end % The function has been written in this way, because Octave (at the time % of writing) does not accept additional parameters at the end of the % line of input arguments for eigs function y=afun(x,F_in,op_in,opadj_in) persistent F; persistent op; persistent opadj; if nargin>1 F = F_in; op = op_in; opadj = opadj_in; else y=opadj(F,op(F,x)); end; end ltfat/inst/frames/framepair.m0000664000175000017500000000446712612404256016157 0ustar susnaksusnakfunction [F1,F2]=framepair(ftype,g1,g2,varargin) %-*- texinfo -*- %@deftypefn {Function} framepair %@verbatim %FRAMEPAIR Construct a new frame % Usage: [F1,F2]=framepair(ftype,g1,g2,...); % % [F1,F2]=FRAMEPAIR(ftype,g1,g2,...) constructs two new frame objects % F1 and F2 of the same type ftype using the windows g1 and g2. % The windows are specific to choosen frame type. See the help on frame* % for the windows and arguments. % % This function makes it easy to create a pair of canonical dual frames: % simply specify 'dual' as window if one frame should be the dual of the % other. % % This is most easily explained through some examples. The following % example creates a Gabor frame for real-valued signals with a Gaussian % analysis window and its canonical dual frame as the synthesis frame: % % f=greasy; % [Fa,Fs]=framepair('dgtreal','gauss','dual',20,294); % c=frana(Fa,f); % r=frsyn(Fs,c); % norm(f-r) % % The following example creates a Wilson basis with a Gaussian % synthesis window, and its canonical dual frame as the analysis % frame: % % [Fa,Fs]=framepair('dwilt','dual','gauss',20); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framepair.html} %@seealso{frame, framedual, frametight} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,3,'FRAMEPAIR'); ftype=lower(ftype); if ~strcmp(g1,'dual') F1=frame(ftype,g1,varargin{:}); end; if ~strcmp(g2,'dual') F2=frame(ftype,g2,varargin{:}); end; if strcmp(g1,'dual') F1=framedual(F2); end; if strcmp(g2,'dual') F2=framedual(F1); end; ltfat/inst/frames/frsyn.m0000664000175000017500000000355112612404256015343 0ustar susnaksusnakfunction outsig=frsyn(F,insig); %-*- texinfo -*- %@deftypefn {Function} frsyn %@verbatim %FRSYN Frame synthesis operator % Usage: f=frsyn(F,c); % % f=FRSYN(F,c) constructs a signal f from the frame coefficients c* % using the frame F. The frame object F must have been created using % FRAME. % % Examples: % --------- % % In the following example a signal f is constructed through the frame % synthesis operator using a Gabor frame. The coefficients associated with % this Gabor expansion are contained in an identity matrix. The identity % matrix corresponds to a diagonal in the time-frequency plane, that is, % one atom at each time position with increasing frequency.: % % a = 10; % M = 40; % % F = frame('dgt', 'gauss', a, M); % % c = framenative2coef(F, eye(40)); % % f = frsyn(F, c); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/frsyn.html} %@seealso{frame, frana, plotframe} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FRSYN'); complainif_notvalidframeobj(F,'FRSYN'); L=framelengthcoef(F,size(insig,1)); F=frameaccel(F,L); outsig=F.frsyn(insig); ltfat/inst/frames/franalasso.m0000664000175000017500000002143212612404256016331 0ustar susnaksusnakfunction [tc,relres,iter,frec,cd] = franalasso(F,f,lambda,varargin) %-*- texinfo -*- %@deftypefn {Function} franalasso %@verbatim %FRANALASSO Frame LASSO regression % Usage: tc = franalasso(F,f,lambda) % tc = franalasso(F,f,lambda,C,tol,maxit) % [tc,relres,iter,frec,cd] = franalasso(...) % % Input parameters: % F : Frame definition % f : Input signal % lambda : Regularisation parameter, controls sparsity of the solution % C : Step size of the algorithm. % tol : Reative error tolerance. % maxit : Maximum number of iterations. % Output parameters: % tc : Thresholded coefficients % relres : Vector of residuals. % iter : Number of iterations done. % frec : Reconstructed signal % cd : The min c||_2 solution using the canonical dual frame. % % FRANALASSO(F,f,lambda) solves the LASSO (or basis pursuit denoising) % regression problem for a general frame: minimize a functional of the % synthesis coefficients defined as the sum of half the l^2 norm of the % approximation error and the l^1 norm of the coefficient sequence, with % a penalization coefficient lambda such that % % argmin lambda||c||_1 + 1/2||Fc - f||_2^2 % % The solution is obtained via an iterative procedure, called Landweber % iteration, involving iterative soft thresholdings. % % The following flags determining an algorithm to be used are recognized % at the end of the argument list: % % 'ista' % The basic (Iterative Soft Thresholding) algorithm given F and f % and parameters C*>0, lambda >0 acts as follows: % % Initialize c % repeat until stopping criterion is met % c <- soft(c + F*(f - Fc)/C,lambda/C) % end % % 'fista' % The fast version of the previous. This is the default option. % : % % Initialize c(0),z,tau(0)=1,n=1 % repeat until stopping criterion is met % c(n) <- soft(z + F*(f - Fz)/C,lambda/C) % tau(n) <- (1+sqrt(1+4*tau(n-1)^2))/2 % z <- c(n) + (c(n)-c(n-1))(tau(n-1)-1)/tau(n) % n <- n + 1 % end % % [tc,relres,iter] = FRANALASSO(...) returns the residuals relres in % a vector and the number of iteration steps done iter. % % [tc,relres,iter,frec,cd] = FRANALASSO(...) returns the reconstructed % signal from the coefficients, frec and coefficients cd obtained by % analysing using the canonical dual system. % Note that this requires additional computations. % % The relationship between the output coefficients and frec is % given by : % % frec = frsyn(F,tc); % % The function takes the following optional parameters at the end of % the line of input arguments: % % 'C',cval % Landweber iteration parameter: must be larger than square of upper % frame bound. Default value is the upper frame bound. % % 'tol',tol % Stopping criterion: minimum relative difference between norms in % two consecutive iterations. Default value is 1e-2. % % 'maxit',maxit % Stopping criterion: maximal number of iterations to do. Default % value is 100. % % 'print' % Display the progress. % % 'quiet' % Don't print anything, this is the default. % % 'printstep',p % If 'print' is specified, then print every p'th iteration. Default % value is 10; % % The parameters C, itermax and tol may also be specified on the % command line in that order: FRANALASSO(F,x,lambda,C,tol,maxit). % % *Note**: If you do not specify C, it will be obtained as the upper % framebound. Depending on the structure of the frame, this can be an % expensive operation. % % Examples: % --------- % % The following example shows how FRANALASSO produces a sparse % representation of a test signal greasy*: % % f = greasy; % % Gabor frame with redundancy 8 % F = frame('dgtreal','gauss',64,512); % % Choosing lambda (weight of the sparse regularization param.) % lambda = 0.1; % % Solve the basis pursuit problem % [c,~,~,frec,cd] = franalasso(F,f,lambda); % % Plot sparse coefficients % figure(1); % plotframe(F,c,'dynrange',50); % % % Plot coefficients obtained by applying an analysis operator of a % % dual Gabor system to f % figure(2); % plotframe(F,cd,'dynrange',50); % % % Check the (NON-ZERO) reconstruction error . % % frec is obtained by applying the synthesis operator of frame F % % to sparse coefficients c. % norm(f-frec) % % % Compare decay of coefficients sorted by absolute values % % (compressibility of coefficients) % figure(3); % semilogx([sort(abs(c),'descend')/max(abs(c)),... % sort(abs(cd),'descend')/max(abs(cd))]); % legend({'sparsified coefficients','dual system coefficients'}); % % % References: % I. Daubechies, M. Defrise, and C. De Mol. An iterative thresholding % algorithm for linear inverse problems with a sparsity constraint. % Communications in Pure and Applied Mathematics, 57:1413-1457, 2004. % % A. Beck and M. Teboulle. A fast iterative shrinkage-thresholding % algorithm for linear inverse problems. SIAM J. Img. Sci., 2(1):183-202, % Mar. 2009. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/franalasso.html} %@seealso{frame, frsyn, framebounds, franabp, franagrouplasso} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR : Bruno Torresani. % TESTING: OK % XXX Removed Remark: When the frame is an orthonormal basis, the solution % is obtained by soft thresholding of the basis coefficients, with % threshold lambda. When the frame is a union of orthonormal bases, the % solution is obtained by applying soft thresholding cyclically on the % basis coefficients (BCR algorithm) % complainif_notenoughargs(nargin,2,'FRANALASSO'); complainif_notvalidframeobj(F,'FRANALASSO'); if sum(size(f)>1)>1 error('%s: Too many input channels.',upper(mfilename)); end % Define initial value for flags and key/value pairs. definput.keyvals.C=[]; definput.keyvals.tol=1e-2; definput.keyvals.maxit=100; definput.keyvals.printstep=10; definput.flags.print={'print','quiet'}; definput.flags.algorithm={'fista','ista'}; [flags,kv]=ltfatarghelper({'C','tol','maxit'},definput,varargin); % Accelerate frame, we will need it repeatedly Ls = size(f,1); F=frameaccel(F,Ls); L=F.L; % Use the upper framebound as C if isempty(kv.C) [~,kv.C] = framebounds(F,L); end; % Initialization of thresholded coefficients % frana is used instead of F.frana to get the correct zero padding of f c0 = frana(F,f); % Various parameter initializations threshold = lambda/kv.C; tc0 = c0; relres = 1e16; iter = 0; if flags.do_ista % Main loop while ((iter < kv.maxit)&&(relres >= kv.tol)) tc = c0 - F.frana(F.frsyn(tc0)); tc = tc0 + tc/kv.C; tc = thresh(tc,threshold,'soft'); relres = norm(tc(:)-tc0(:))/norm(tc0(:)); tc0 = tc; iter = iter + 1; if flags.do_print if mod(iter,kv.printstep)==0 fprintf('Iteration %d: relative error = %f\n',iter,relres); end; end; end elseif flags.do_fista tz0 = c0; tau0 = 1; % Main loop while ((iter < kv.maxit)&&(relres >= kv.tol)) tc = c0 - F.frana(F.frsyn(tz0)); tc = tz0 + tc/kv.C; tc = thresh(tc,threshold,'soft'); tau = 1/2*(1+sqrt(1+4*tau0^2)); tz0 = tc + (tau0-1)/tau*(tc-tc0); relres = norm(tc(:)-tc0(:))/norm(tc0(:)); tc0 = tc; tau0 = tau; iter = iter + 1; if flags.do_print if mod(iter,kv.printstep)==0 fprintf('Iteration %d: relative error = %f\n',iter,relres); end; end; end end % Optional reconstruction if nargout>3 frec = postpad(F.frsyn(tc),Ls); end; % Calculate coefficients using the canonical dual system % May be conviniently used for comparison if nargout>4 try Fd = framedual(F); cd = frana(Fd,f); catch warning(sprintf(['%s: Dual frame is not available. Using franaiter'],... upper(mfilename))); cd = franaiter(F,f); end end; ltfat/inst/frames/frame.m0000664000175000017500000005560112612404256015277 0ustar susnaksusnakfunction F=frame(ftype,varargin); %-*- texinfo -*- %@deftypefn {Function} frame %@verbatim %FRAME Construct a new frame % Usage: F=frame(ftype,...); % % F=FRAME(ftype,...) constructs a new frame object F of type % ftype. Arguments following ftype are specific to the type of frame % chosen. % % Time-frequency frames % --------------------- % % FRAME('dgt',g,a,M) constructs a Gabor frame with window g, % time-shift a and M channels. See the help on DGT for more % information. % % FRAME('dgtreal',g,a,M) constructs a Gabor frame for real-valued % signals with window g, time-shift a and M channels. See the help % on DGTREAL for more information. % % FRAME('dwilt',g,M) constructs a Wilson basis with window g and M* % channels. See the help on DWILT for more information. % % FRAME('wmdct',g,M) constructs a windowed MDCT basis with window g* % and M channels. See the help on WMDCT for more information. % % FRAME('filterbank',g,a,M) constructs a filterbank with filters g, % time-shifts of a and M channels. For the ease of implementation, it % is necessary to specify M, even though it strictly speaking could be % deduced from the size of the windows. See the help on FILTERBANK for % more information on the parameters. Similarly, you can construct a % uniform filterbank by selecting 'ufilterbank', a positive-frequency % filterbank by selecting 'filterbankreal' or a uniform % positive-frequency filterbank by selecting 'ufilterbankreal'. % % FRAME('nsdgt',g,a,M) constructs a non-stationary Gabor frame with % filters g, time-shifts of a and M channels. See the help on % NSDGT for more information on the parameters. Similarly, you can % construct a uniform NSDGT by selecting 'unsdgt', an NSDGT for % real-valued signals only by selecting 'nsdgtreal' or a % uniform NSDGT for real-valued signals by selecting 'unsdgtreal'. % % Wavelet frames % -------------- % % FRAME('fwt', w, J) constructs a wavelet frame with wavelet definition % w and J number of filterbank iterations. Similarly, a redundant time % invariant wavelet representation can be constructed by selecting 'ufwt'. % See the help on FWT and UFWT for more information. % % FRAME('wfbt', wt) constructs a wavelet filterbank tree defined by % the wavelet filterbank tree definition wt. Similarly, an undecimated % wavelet filterbank tree can be constructed by selecting 'uwfbt'. See the % help on WFBT and UWFBT for more information. % % FRAME('wpfbt', wt) constructs a wavelet packet filterbank tree % defined by the wavelet filterbank tree definition wt. Similarly, an % undecimated wavelet packet filterbank tree can be constructed by selecting % 'uwpfbt'. See the help on WPFBT and UWPFBT for more information. % % Pure frequency frames % --------------------- % % FRAME('dft') constructs a basis where the analysis operator is the % DFT, and the synthesis operator is its inverse, IDFT. Completely % similar to this, you can enter the name of any of the cosine or sine % transforms DCTI, DCTII, DCTIII, DCTIV, DSTI, DSTII, % DSTIII or DSTIV. % % FRAME('dftreal') constructs a normalized FFTREAL basis for % real-valued signals of even length only. The basis is normalized % to ensure that is it orthonormal. % % Special / general frames % ------------------------ % % FRAME('gen',g) constructs an general frame with analysis matrix g. % The frame atoms must be stored as column vectors in the matrices. % % FRAME('identity') constructs the canonical orthonormal basis, meaning % that all operators return their input as output, so it is the dummy % operation. % % Container frames % ---------------- % % FRAME('fusion',w,F1,F2,...) constructs a fusion frame, which is % the collection of the frames specified by F1, F2,... The vector % w contains a weight for each frame. If w is a scalar, this weight % will be applied to all the sub-frames. % % FRAME('tensor',F1,F2,...) constructs a tensor product frame, where the % frames F1, F2,... are applied along the 1st, 2nd etc. dimensions. If % you don't want any action along a specific dimension, use the identity % frame along that dimension. Any remaining dimensions in the input % signal are left alone. % % Wrapper frames % -------------- % % Frames types in this section are "virtual". They serve as a wrapper for % a different type of frame. % % FRAME('erbletfb',fs,Ls,...) constructs an Erb-let filterbank frame for % a given samp. frequency fs working with signals of length Ls. See % ERBFILTERS for a description of additional parameters as all % parameters other than the frame type string 'erbletfb' are passed to it. % NOTE: The resulting frame is defined only for a single signal length % Ls. Shorter signals will be zero-padded, signals longer than Ls* % cannot be processed. % The actual frame type is 'filterbank' or 'filterbankreal'. % % FRAME('cqtfb',fs,fmin,fmax,bins,Ls,...) constructs a CQT filterbank % frame for a given samp. frequency fs working with signals of length % Ls. See CQTFILTERS for a description of other parameters. % NOTE: The resulting frame is defined only for a single signal length % Ls. Shorter signals will be zero-padded, signals longer than Ls* % cannot be processed. % The actual frame type is 'filterbank' or 'filterbankreal'. % % Examples % -------- % % The following example creates a Modified Discrete Cosine Transform frame, % analyses an input signal and plots the frame coefficients: % % F=frame('wmdct','gauss',40); % c=frana(F,greasy); % plotframe(F,c,'dynrange',60); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/frame.html} %@seealso{frana, frsyn, plotframe} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,1,'FRAME'); if ~ischar(ftype) error(['%s: First argument must be a string denoting the type of ' ... 'frame.'],upper(mfilename)); end; ftype=lower(ftype); % True if the frame only works with real-valued input. F.realinput=0; % True if the frame only works with a fixed length. F.fixedlength = 0; % Handle the windowed transforms switch(ftype) case {'dgt','dwilt','wmdct','filterbank','ufilterbank',... 'nsdgt','unsdgt','wfbt','uwfbt','wpfbt'} F.g=varargin{1}; case {'dgtreal','filterbankreal','ufilterbankreal',... 'nsdgtreal','unsdgtreal'} F.g=varargin{1}; F.realinput=1; case {'fwt','ufwt'} F.g=varargin{1}; F.J=varargin{2}; complainif_notposint(F.J,'J','FRAME'); end; % Input param checking switch(ftype) case 'fusion' wtmp = varargin{1}; % Check w if ~isnumeric(varargin{1}) || ... ~(isscalar(wtmp) || numel(wtmp) == numel(varargin) -1) error('%s: Weights are not in a correct format.',upper(mfilename)); end % Check frame objects for ii=2:numel(varargin) complainif_notvalidframeobj(varargin{ii},'FRAME'); end case 'tensor' % Check frame objects for ii=1:numel(varargin) complainif_notvalidframeobj(varargin{ii},'FRAME'); end end % For parsing optional parameters to the transforms. vargs={}; definput=struct(); %% ---- Pre-optional parameters % Common operations to deal with the input parameters. switch(ftype) case {'dgt','dgtreal'} F.a=varargin{2}; F.M=varargin{3}; vargs=varargin(4:end); definput.keyvals.lt=[0 1]; definput.flags.phase={'freqinv','timeinv'}; case {'dwilt','wmdct'} F.M=varargin{2}; case {'filterbank','ufilterbank','filterbankreal','ufilterbankreal'} F.a=varargin{2}; F.M=varargin{3}; [F.a,~]=comp_filterbank_a(F.a,F.M,struct()); case {'nsdgt','unsdgt','nsdgtreal','unsdgtreal'} F.a=varargin{2}; F.M=varargin{3}; % Sanitize 'a' and 'M'. Make M a column vector of length N, % where N is determined from the length of 'a' F.a=F.a(:); F.N=numel(F.a); F.M=bsxfun(@times,F.M(:),ones(F.N,1)); case {'ufwt'} vargs=varargin(3:end); definput.flags.scaling={'sqrt','noscale','scale'}; case {'uwfbt'} vargs=varargin(2:end); definput.flags.scaling={'sqrt','noscale','scale'}; case {'wpfbt'} vargs=varargin(2:end); definput.flags.interscaling={'intsqrt','intnoscale','intscale'}; case {'uwpfbt'} vargs=varargin(2:end); definput.flags.interscaling={'intsqrt','intnoscale','intscale'}; definput.flags.scaling={'sqrt','noscale','scale'}; end; [F.flags,F.kv]=ltfatarghelper({},definput,vargs); F.type=ftype; F.origargs=varargin; F.vargs=vargs; %% ------ Post optional parameters % Default value, works for all bases F.red=1; % Default value, frame works for all lengths F.length=@(Ls) Ls; switch(ftype) case 'gen' F.g=varargin{1}; F.frana=@(insig) F.g'*insig; F.frsyn=@(insig) F.g*insig; F.length = @(Ls) size(F.g,1); F.red = size(F.g,2)/size(F.g,1); case 'identity' F.frana=@(insig) insig; F.frsyn=@(insig) insig; case 'dft' F.frana=@(insig) dft(insig,[],1); F.frsyn=@(insig) idft(insig,[],1); case 'dftreal' F.frana=@(insig) fftreal(insig,[],1)/sqrt(size(insig,1)); F.frsyn=@(insig) ifftreal(insig,(size(insig,1)-1)*2,1)*sqrt((size(insig,1)-1)*2); F.length=@(Ls) ceil(Ls/2)*2; F.lengthcoef=@(Ncoef) (Ncoef-1)*2; F.realinput=1; F.clength = @(L) floor(L/2)+1; case 'dcti' F.frana=@(insig) dcti(insig,[],1); F.frsyn=@(insig) dcti(insig,[],1); case 'dctii' F.frana=@(insig) dctii(insig,[],1); F.frsyn=@(insig) dctiii(insig,[],1); case 'dctiii' F.frana=@(insig) dctiii(insig,[],1); F.frsyn=@(insig) dctii(insig,[],1); case 'dctiv' F.frana=@(insig) dctiv(insig,[],1); F.frsyn=@(insig) dctiv(insig,[],1); case 'dsti' F.frana=@(insig) dsti(insig,[],1); F.frsyn=@(insig) dsti(insig,[],1); case 'dstii' F.frana=@(insig) dstii(insig,[],1); F.frsyn=@(insig) dstiii(insig,[],1); case 'dstiii' F.frana=@(insig) dstiii(insig,[],1); F.frsyn=@(insig) dstii(insig,[],1); case 'dstiv' F.frana=@(insig) dstiv(insig,[],1); F.frsyn=@(insig) dstiv(insig,[],1); case 'dgt' F.coef2native=@(coef,s) reshape(coef,[F.M,s(1)/F.M,s(2)]); F.native2coef=@(coef) reshape(coef,[size(coef,1)*size(coef,2),size(coef,3)]); F.frana=@(insig) F.native2coef(comp_dgt(insig,F.g,F.a,F.M,F.kv.lt,F.flags.do_timeinv,0,0)); F.frsyn=@(insig) comp_idgt(F.coef2native(insig,size(insig)),F.g,F.a,F.kv.lt,F.flags.do_timeinv,0); F.length=@(Ls) dgtlength(Ls,F.a,F.M,F.kv.lt); F.red=F.M/F.a; case 'dgtreal' F.coef2native=@(coef,s) reshape(coef,[floor(F.M/2)+1,s(1)/(floor(F.M/ ... 2)+1),s(2)]); F.native2coef=@(coef) reshape(coef,[size(coef,1)*size(coef,2),size(coef,3)]); F.frana=@(insig) F.native2coef(comp_dgtreal(insig,F.g,F.a,F.M,F.kv.lt,F.flags.do_timeinv)); F.frsyn=@(insig) comp_idgtreal(F.coef2native(insig,size(insig)),F.g,F.a,F.M,F.kv.lt,F.flags.do_timeinv); F.length=@(Ls) dgtlength(Ls,F.a,F.M,F.kv.lt); F.red=F.M/F.a; F.lengthcoef=@(Ncoef) Ncoef/(floor(F.M/2)+1)*F.a; F.clength = @(L) L/F.a*(floor(F.M/2)+1); case 'dwilt' F.coef2native=@(coef,s) reshape(coef,[2*F.M,s(1)/F.M/2,s(2)]); F.native2coef=@(coef) reshape(coef,[size(coef,1)*size(coef,2),size(coef,3)]); F.frana=@(insig) F.native2coef(comp_dwilt(insig,F.g,F.M)); F.frsyn=@(insig) comp_idwilt(F.coef2native(insig,size(insig)),F.g); F.length=@(Ls) dwiltlength(Ls,F.M); case 'wmdct' F.coef2native=@(coef,s) reshape(coef,[F.M,s(1)/F.M,s(2)]); F.native2coef=@(coef) reshape(coef,[size(coef,1)*size(coef,2),size(coef,3)]); F.frana=@(insig) F.native2coef(comp_dwiltiii(insig,F.g,F.M)); F.frsyn=@(insig) comp_idwiltiii(F.coef2native(insig,size(insig)),F.g); F.length=@(Ls) dwiltlength(Ls,F.M); case 'filterbank' F.red=sum(F.a(:,2)./F.a(:,1)); F.length=@(Ls) filterbanklength(Ls,F.a); F.lengthcoef=@(Ncoef) Ncoef/F.red; F.native2coef=@(coef) cell2mat(coef(:)); F.coef2native=@(coef,s) vect2cell(coef,round(s(1)/F.red*F.a(:,2)./F.a(:,1))); F.frana=@(insig) F.native2coef(comp_filterbank(insig,F.g,F.a)); F.frsyn=@(insig) comp_ifilterbank(F.coef2native(insig,size(insig)),... F.g,F.a,round(size(insig,1)/F.red)); F.destructor=@() clear('comp_filterbank','comp_ifilterbank'); case 'filterbankreal' F.red=2*sum(F.a(:,2)./F.a(:,1)); F.length=@(Ls) filterbanklength(Ls,F.a); F.lengthcoef=@(Ncoef) 2*Ncoef/(F.red); F.native2coef=@(coef) cell2mat(coef(:)); F.coef2native=@(coef,s) vect2cell(coef,round(2*s(1)/F.red*F.a(:,2)./F.a(:,1))); F.frana=@(insig) F.native2coef(comp_filterbank(insig,F.g,F.a)); F.frsyn=@(insig) 2*real(comp_ifilterbank(F.coef2native(insig,size(insig)),F.g,F.a,... 2*round(size(insig,1)/F.red))); F.destructor=@() clear('comp_filterbank','comp_ifilterbank'); case 'ufilterbank' F.red=sum(F.a(:,2)./F.a(:,1)); F.length=@(Ls) filterbanklength(Ls,F.a); F.lengthcoef=@(Ncoef) round(Ncoef/F.red); F.coef2native=@(coef,s) reshape(coef,[s(1)/F.M,F.M,s(2)]); F.native2coef=@(coef) reshape(coef,[size(coef,1)*size(coef,2),size(coef,3)]); F.frana=@(insig) F.native2coef(ufilterbank(insig,F.g,F.a)); F.frsyn=@(insig) ifilterbank(F.coef2native(insig,size(insig)),F.g,F.a); case 'ufilterbankreal' F.red=2*sum(F.a(:,2)./F.a(:,1)); F.length=@(Ls) filterbanklength(Ls,F.a); F.lengthcoef=@(Ncoef) round(Ncoef/F.red*2); F.coef2native=@(coef,s) reshape(coef,[s(1)/F.M,F.M,s(2)]); F.native2coef=@(coef) reshape(coef,[size(coef,1)*size(coef,2),size(coef,3)]); F.frana=@(insig) F.native2coef(ufilterbank(insig,F.g,F.a)); F.frsyn=@(insig) 2*real(ifilterbank(F.coef2native(insig,size(insig)),F.g, ... F.a)); case 'nsdgt' F.coef2native=@(coef,s) mat2cell(coef,F.M,s(2)); F.native2coef=@(coef) cell2mat(coef(:)); F.length=@(Ncoef) sum(F.a); F.lengthcoef=@(Ncoef) sum(F.a); F.red=sum(F.M)/sum(F.a); F.frana=@(insig) F.native2coef(nsdgt(insig,F.g,F.a,F.M)); F.frsyn=@(insig) insdgt(F.coef2native(insig,size(insig)),F.g,F.a); case 'unsdgt' F.coef2native=@(coef,s) reshape(coef,[F.M(1),s(1)/F.M(1),s(2)]); F.native2coef=@(coef) reshape(coef,[size(coef,1)*size(coef,2),size(coef,3)]); F.frana=@(insig) F.native2coef(unsdgt(insig,F.g,F.a,F.M)); F.frsyn=@(insig) insdgt(F.coef2native(insig,size(insig)),F.g,F.a); F.length=@(Ncoef) sum(F.a); F.lengthcoef=@(Ncoef) sum(F.a); F.red=sum(F.M)/sum(F.a); case 'nsdgtreal' F.coef2native=@(coef,s) mat2cell(coef,floor(F.M/2)+1,s(2)); F.native2coef=@(coef) cell2mat(coef(:)); F.frana=@(insig) F.native2coef(nsdgtreal(insig,F.g,F.a,F.M)); F.frsyn=@(insig) insdgtreal(F.coef2native(insig,size(insig)),F.g,F.a,F.M); F.length=@(Ncoef) sum(F.a); F.lengthcoef=@(Ncoef) sum(F.a); F.red=sum(F.M)/sum(F.a); F.clength=@(L) sum(floor(F.M/2)+1); case 'unsdgtreal' F.coef2native=@(coef,s) reshape(coef,floor(F.M(1)/2)+1,s(1)/ ... (floor(F.M(1)/2)+1),s(2)); F.native2coef=@(coef) reshape(coef,[size(coef,1)*size(coef,2),size(coef,3)]); F.frana=@(insig) F.native2coef(unsdgtreal(insig,F.g,F.a,F.M)); F.frsyn=@(insig) insdgtreal(F.coef2native(insig,size(insig)),F.g,F.a,F.M); F.length=@(Ncoef) sum(F.a); F.lengthcoef=@(Ncoef) sum(F.a); F.red=sum(F.M)/sum(F.a); F.clength=@(L) numel(F.M)*(floor(F.M(1)/2)+1); case 'fusion' F.w=varargin{1}; F.frames=varargin(2:end); if any(cellfun(@(fEl) fEl.realinput,F.frames)) error(['%s: Real-valued-input-only frames are not currently ',... 'supported in the fusion frame.'],upper(mfilename)); end F.Nframes=numel(F.frames); F.w=bsxfun(@times,F.w(:),ones(F.Nframes,1)); F.length = @(Ls) comp_framelength_fusion(F,Ls); F.red=sum(cellfun(@framered,F.frames)); % These definitions binds F itself, so they must execute last F.frana=@(insig) comp_frana_fusion(F,insig); F.frsyn=@(insig) comp_frsyn_fusion(F,insig); case 'tensor' % This frame type is currently broken. It must be reworked to reshape % to the standard layout in order not to break all the assumptions. F.frames=varargin; F.Nframes=numel(F.frames); for ii=1:F.Nframes if F.frames{ii}.realinput error(['It is not safe to embed a real-valued-input-only frame ' ... 'into the tensor frame.']); end; end; F.frana=@(insig) comp_frana_tensor(F,insig); F.frsyn=@(insig) comp_frsyn_tensor(F,insig); F.length=@(Ls) comp_framelength_tensor(F,Ls); F.red=prod(cellfun(@framered,F.frames)); case {'fwt','dwt'} % We have to initialize F.g here already [F.g, F.info]=fwtinit({'strict',F.g}); F.red= 1/(F.g.a(1)^(F.J)) + sum(1./(F.g.a(1).^(0:F.J-1))*sum(1./F.g.a(2:end))); F.frana=@(insig) wavcell2pack(comp_fwt(insig,F.g.h,F.g.a,F.J,'per')); F.frsyn=@(insig) comp_ifwt(... wavpack2cell(insig,fwtclength(size(insig,1)/F.red,F.g,F.J)),... F.g.g,F.g.a,F.J,size(insig,1)/F.red,'per'); F.length=@(Ls) fwtlength(Ls,F.g,F.J); case {'wfbt'} [F.g,F.info]=wfbtinit({'strict',F.g}); F.red = sum(1./treeSub(F.g)); % comp_ specific [F.wtPath, F.rangeLoc, F.rangeOut] = treeBFranges(F.g); F.coef2native = @(coef,s) wavpack2cell(coef,wfbtclength(s(1)/F.red,F.g)); F.native2coef = @(coef) wavcell2pack(coef); F.frana=@(insig) F.native2coef(comp_wfbt(insig,F.g.nodes(F.wtPath),... F.rangeLoc,F.rangeOut,'per')); F.frsyn=@(insig) comp_iwfbt(F.coef2native(insig,size(insig)),... F.g.nodes(F.wtPath(end:-1:1)),... [nodesInLen(F.wtPath(end:-1:1),size(insig,1)/F.red,1,F.g);size(insig,1)/F.red],... F.rangeLoc(end:-1:1),F.rangeOut(end:-1:1),... 'per'); F.length=@(Ls) wfbtlength(Ls,F.g); case {'wpfbt'} F.g=wfbtinit({'strict',F.g}); F.red = sum(cellfun(@(aEl) sum(1./aEl),nodesSub(nodeBForder(0,F.g),F.g))); % comp_ specific F.wtPath = nodeBForder(0,F.g); F.rangeLoc = nodesLocOutRange(F.wtPath,F.g); [F.pOutIdxs,F.chOutIdxs] = treeWpBFrange(F.g); F.coef2native = @(coef,s) wavpack2cell(coef,... s(1)./cell2mat(cellfun(@(aEl) aEl(:),... reshape(nodesSub(nodeBForder(0,F.g),F.g),[],1),... 'UniformOutput',0))./F.red); F.native2coef = @(coef) wavcell2pack(coef); F.frana=@(insig) F.native2coef(... comp_wpfbt(insig,F.g.nodes(F.wtPath),... F.rangeLoc,'per',F.flags.interscaling)); F.frsyn=@(insig) comp_iwpfbt(F.coef2native(insig,size(insig)),... F.g.nodes(F.wtPath(end:-1:1)),... F.pOutIdxs,F.chOutIdxs,... size(insig,1)/F.red,... 'per',F.flags.interscaling); F.length=@(Ls) wfbtlength(Ls,F.g); case {'ufwt'} F.g=fwtinit({'strict',F.g}); F.coef2native = @(coef,s) reshape(coef,[s(1)/(F.J*(numel(F.g.a)-1)+1),F.J*(numel(F.g.a)-1)+1,s(2)]); F.native2coef = @(coef) reshape(coef,[size(coef,1)*size(coef,2),size(coef,3)]); F.frana=@(insig) F.native2coef(comp_ufwt(insig,F.g.h,F.g.a,F.J,F.flags.scaling)); F.frsyn=@(insig) comp_iufwt(F.coef2native(insig,size(insig)),F.g.g,F.g.a,F.J,F.flags.scaling); F.length=@(Ls) Ls; F.red=(F.J*(numel(F.g.a)-1)+1); case {'uwfbt'} F.g=wfbtinit({'strict',F.g}); % comp_ specific [F.wtPath, F.rangeLoc, F.rangeOut] = treeBFranges(F.g); F.nodesUps = nodesFiltUps(F.wtPath,F.g); F.red = sum(cellfun(@numel,F.rangeOut)); F.coef2native = @(coef,s) reshape(coef,[s(1)/F.red,F.red,s(2)]); F.native2coef = @(coef) reshape(coef,[size(coef,1)*size(coef,2),size(coef,3)]); F.frana=@(insig) F.native2coef(... comp_uwfbt(insig,F.g.nodes(F.wtPath),F.nodesUps,... F.rangeLoc,F.rangeOut,F.flags.scaling)); F.frsyn=@(insig) comp_iuwfbt(F.coef2native(insig,size(insig)),... F.g.nodes(F.wtPath(end:-1:1)),... F.nodesUps(end:-1:1),F.rangeLoc(end:-1:1),... F.rangeOut(end:-1:1),F.flags.scaling); F.length=@(Ls) Ls; case {'uwpfbt'} F.g= wfbtinit({'strict',varargin{1}}); F.red = sum(cellfun(@(fEl) numel(fEl.g),F.g.nodes)); % comp_ specific F.wtPath = nodeBForder(0,F.g); F.nodesUps = nodesFiltUps(F.wtPath,F.g); F.rangeLoc = nodesLocOutRange(F.wtPath,F.g); [F.pOutIdxs,F.chOutIdxs] = treeWpBFrange(F.g); F.coef2native = @(coef,s) reshape(coef,[s(1)/F.red,F.red,s(2)]); F.native2coef = @(coef) reshape(coef,[size(coef,1)*size(coef,2),size(coef,3)]); F.frana=@(insig) F.native2coef(... comp_uwpfbt(insig,F.g.nodes(F.wtPath),F.rangeLoc,... F.nodesUps,F.flags.scaling,... F.flags.interscaling)); F.frsyn=@(insig) comp_iuwpfbt(F.coef2native(insig,size(insig)),... F.g.nodes(F.wtPath(end:-1:1)),... F.nodesUps(end:-1:1),F.pOutIdxs,F.chOutIdxs,... F.flags.scaling,F.flags.interscaling); F.length=@(Ls) Ls; %%%%%%%%%%%%%%%%%%%% %% WRAPPER FRAMES %% %%%%%%%%%%%%%%%%%%%% case {'erbletfb','cqtfb'} switch(ftype) case 'erbletfb' [g,a,~,L] = erbfilters(varargin{:}); case 'cqtfb' [g,a,~,L] = cqtfilters(varargin{:}); end % Search for the 'complex' flag do_complex = ~isempty(varargin(strcmp('complex',varargin))); if do_complex F = frameaccel(frame('filterbank',g,a,numel(g)),L); else F = frameaccel(frame('filterbankreal',g,a,numel(g)),L); end F.fixedlength = 1; otherwise error('%s: Unknown frame type: %s',upper(mfilename),ftype); end; % This one is placed at the end, to allow for F.red to be defined % first. if ~isfield(F,'lengthcoef') F.lengthcoef=@(Ncoef) Ncoef/framered(F); end; ltfat/inst/frames/frameoperator.m0000664000175000017500000000311712612404256017046 0ustar susnaksusnakfunction h = frameoperator(F, f); %-*- texinfo -*- %@deftypefn {Function} frameoperator %@verbatim %FRAMEOPERATOR Frame Operator % Usage: o=frameoperator(F, f); % % Input parameters: % F : frame % f : input vector % % Output parameter: % h : output vector % % h=FRAMEOPERATOR(F,f) applies the frame operator associated with the frame % F to the input f. % % If the frame F is a tight frame, then h equals f up to the constant % frac{1}{A} where A is the lower frame bound of F. If the frame F* % is an orthonormal basis, or more general a Parseval frame, then h equals % f. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/frameoperator.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven complainif_notenoughargs(nargin, 2, 'FRAMEOPERATOR'); h = frsyn(F, (frana(F,f))); ltfat/inst/frames/frameclength.m0000664000175000017500000000415312612404256016640 0ustar susnaksusnakfunction [Ncoef, L]=frameclength(F,Ls) %-*- texinfo -*- %@deftypefn {Function} frameclength %@verbatim %FRAMECLENGTH Number of coefficients from length of signal % Usage: Ncoef=frameclength(F,Ls); % [Ncoef,L]=frameclength(...); % % Ncoef=FRAMECLENGTH(F,Ls) returns the total number of coefficients % obtained by applying the analysis operator of frame F to a signal % of length Ls i.e. size(frana(F,f),1) for Ls=length(f). % % [Ncoef,L]=FRAMECLENGTH(F,Ls) additionally returns L, which is the % same as returned by FRAMELENGTH. % % If the frame length L is longer than the signal length Ls, the % signal will be zero-padded to L by FRANA. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/frameclength.html} %@seealso{frame, framelengthcoef} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . callfun = upper(mfilename); complainif_notposint(Ls,'Ls',callfun); complainif_notvalidframeobj(F,callfun); L = F.length(Ls); % Some frames need special function if isfield(F,'clength') Ncoef = F.clength(L); else % Generic, works for any non-realonly frame and for % all representaions not having any extra coefficients Ncoef = L*F.red; if F.realinput Ncoef=Ncoef/2; end assert(abs(Ncoef-round(Ncoef))<1e-3,... sprintf('%s: There is a bug. L=%d should be an integer.',... upper(mfilename),Ncoef)); Ncoef=round(Ncoef); end ltfat/inst/frames/frametight.m0000664000175000017500000001122512612404256016331 0ustar susnaksusnakfunction Ft=frametight(F); %-*- texinfo -*- %@deftypefn {Function} frametight %@verbatim %FRAMETIGHT Construct the canonical tight frame % Usage: Ft=frametight(F); % % Ft=FRAMETIGHT(F) returns the canonical tight frame of F. % % The canonical tight frame can be used to get perfect reconstruction if % it is used for both analysis and synthesis. This is demonstrated in the % following example: % % % Create a frame and its canonical tight % F=frame('dgt','hamming',32,64); % Ft=frametight(F); % % % Compute the frame coefficients and test for perfect % % reconstruction % f=gspi; % c=frana(Ft,f); % r=frsyn(Ft,c); % norm(r(1:length(f))-f) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/frametight.html} %@seealso{frame, framepair, framedual} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,1,'FRAMETIGHT'); complainif_notvalidframeobj(F,'FRAMETIGHT'); % Default operation, works for a lot of frames Ft=F; % Handle the windowed transforms switch(F.type) case {'dgt','dgtreal','dwilt','wmdct','filterbank','ufilterbank',... 'nsdgt','unsdgt','nsdgtreal','unsdgtreal'} Ft=frame(F.type,{'tight',F.g},F.origargs{2:end}); case {'filterbankreal','ufilterbankreal'} Ft=frame(F.type,{'realtight',F.g},F.origargs{2:end}); case 'gen' [U,sv,V] = svd(F.g,'econ'); Ft=frame('gen',U*V'); case 'tensor' for ii=1:F.Nframes tight_frames{ii}=frametight(F.frames{ii}); end; F=frame('tensor',tight_frames{:}); case 'fusion' tight_w=1./F.w; for ii=1:F.Nframes tight_frames{ii}=frametight(F.frames{ii}); end; Ft=frame('fusion',tight_w,tight_frames{:}); case 'ufwt' % The canonical tight made from ufwt might not keep the iterated % filterbank structure [g,a] = wfbt2filterbank({F.g,F.J,'dwt'}); g = comp_filterbankscale(g,a,F.flags.scaling); Ft = frametight(frame('filterbank',g,ones(numel(g),1),numel(g))); case 'uwfbt' % The canonical tight made from uwfbt might not keep the iterated % filterbank structure [g,a] = wfbt2filterbank(F.g,F.J); g = comp_filterbankscale(g,a,F.flags.scaling); Ft = frametight(frame('filterbank',g,ones(numel(g),1),numel(g))); case 'uwpfbt' % The canonical tight made from uwpfbt might not keep the iterated % filterbank structure [g, a] = wpfbt2filterbank(F.g,F.flags.interscaling); g = comp_filterbankscale(g,a,F.flags.scaling); Ft = frametight(frame('filterbank',g,ones(numel(g),1),numel(g))); case 'fwt' is_basis = abs(sum(1./F.g.a)-1)<1e-6; is_tight = F.info.istight; if is_basis && is_tight Ft = F; else error(['%s: Cannot create the canonical tight frame with the ',... 'same structure. Consider casting the system to an ',... 'uniform filterbank.'],... upper(mfilename)); end case 'wfbt' is_basis = all(cellfun(@(nEl) abs(sum(1./nEl.a)-1)<1e-6,F.g.nodes)); is_tight = F.info.istight; if is_basis && is_tight Ft = F; else error(['%s: Cannot create the canonical tight frame with the ',... 'same structure. Consider casting the system to an ',... 'uniform filterbank.'],... upper(mfilename)); end case 'wpfbt' % WPFBT is too wierd. error(['%s: Canonical tight frame of wpfbt might not keep the ',... 'same structure. '],upper(mfilename)) end; switch(F.type) case {'ufwt','uwfbt','uwpfbt'} warning(sprintf(['%s: The canonical tight system does not preserve ',... 'the iterated filterbank structure.'],... upper(mfilename))); end % Treat the fixed length frames if isfield(F,'fixedlength') && F.fixedlength && isfield(F,'L') Ft = frameaccel(Ft,F.L); Ft.fixedlength = 1; end ltfat/inst/frames/frana.m0000664000175000017500000000522012612404256015264 0ustar susnaksusnakfunction outsig=frana(F,insig); %-*- texinfo -*- %@deftypefn {Function} frana %@verbatim %FRANA Frame analysis operator % Usage: c=frana(F,f); % % c=FRANA(F,f) computes the frame coefficients c of the input % signal f using the frame F. The frame object F must have been % created using FRAME or FRAMEPAIR. % % If f is a matrix, the transform will be applied along the columns % of f. If f is an N-D array, the transform will be applied along % the first non-singleton dimension. % % The output coefficients are stored as columns. This is usually % *not* the same format as the 'native' format of the frame. As an % examples, the output from FRANA for a gabor frame cannot be % passed to IDGT without a reshape. % % Examples: % --------- % % In the following example the signal bat is analyzed through a wavelet % frame. The result are the frame coefficients associated with the input % signal bat and the analysis frame 'fwt': % % f = bat; % w = 'sym8'; % J = 7; % F = frame('fwt', w, J); % c = frana(F, f); % % A plot of the frame coefficients % plotframe(F, c, 'dynrange', 100); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/frana.html} %@seealso{frame, framepair, frsyn, plotframe} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FRANA'); complainif_notvalidframeobj(F,'FRANA'); if size(insig,1) == 1 error('%s: Currently only column vectors are supported. See bug #59.',... upper(mfilename)); end %% ----- step 1 : Verify f and determine its length ------- % Change f to correct shape. [insig,~,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(insig,[],[],upper(mfilename)); F=frameaccel(F,Ls); insig=postpad(insig,F.L); %% ----- do the computation ---- outsig=F.frana(insig); %% --- cleanup ----- permutedsize=[size(outsig,1),permutedsize(2:end)]; outsig=assert_sigreshape_post(outsig,dim,permutedsize,order); ltfat/inst/frames/franagrouplasso.m0000664000175000017500000001537612612404256017420 0ustar susnaksusnakfunction [tc,relres,iter,frec] = franagrouplasso(F,f,lambda,varargin) %-*- texinfo -*- %@deftypefn {Function} franagrouplasso %@verbatim %FRANAGROUPLASSO Group LASSO regression in the TF-domain % Usage: tc = franagrouplasso(F,f,lambda) % tc = franagrouplasso(F,f,lambda,C,tol,maxit) % [tc,relres,iter,frec] = franagrouplasso(...) % % Input parameters: % F : Frame definition % f : Input signal % lambda : Regularisation parameter, controls sparsity of the solution % C : Step size of the algorithm. % tol : Reative error tolerance. % maxit : Maximum number of iterations. % Output parameters: % tc : Thresholded coefficients % relres : Vector of residuals. % iter : Number of iterations done. % frec : Reconstructed signal % % FRANAGROUPLASSO(F,f,lambda) solves the group LASSO regression problem % in the time-frequency domain: minimize a functional of the synthesis % coefficients defined as the sum of half the l^2 norm of the % approximation error and the mixed l^1 / l^2 norm of the coefficient % sequence, with a penalization coefficient lambda. % % The matrix of time-frequency coefficients is labelled in terms of groups % and members. By default, the obtained expansion is sparse in terms of % groups, no sparsity being imposed to the members of a given group. This % is achieved by a regularization term composed of l^2 norm within a % group, and l^1 norm with respect to groups. See the help on % GROUPTHRESH for more information. % % *Note* the involved frame F must support regular time-frequency % layout of coefficients. % % [tc,relres,iter] = FRANAGROUPLASSO(...) returns the residuals relres in % a vector and the number of iteration steps done, maxit. % % [tc,relres,iter,frec] = FRANAGROUPLASSO(...) returns the reconstructed % signal from the coefficients, frec. Note that this requires additional % computations. % % The function takes the following optional parameters at the end of % the line of input arguments: % % 'freq' Group in frequency (search for tonal components). This is the % default. % % 'time' Group in time (search for transient components). % % 'C',cval Landweber iteration parameter: must be larger than % square of upper frame bound. Default value is the upper % frame bound. % % 'maxit',maxit % Stopping criterion: maximal number of iterations. % Default value is 100. % % 'tol',tol Stopping criterion: minimum relative difference between % norms in two consecutive iterations. Default value is % 1e-2. % % 'print' Display the progress. % % 'quiet' Don't print anything, this is the default. % % 'printstep',p % If 'print' is specified, then print every p'th % iteration. Default value is 10; % % In addition to these parameters, this function accepts all flags from % the GROUPTHRESH and THRESH functions. This makes it possible to % switch the grouping mechanism or inner thresholding type. % % The parameters C, maxit and tol may also be specified on the % command line in that order: FRANAGROUPLASSO(F,x,lambda,C,tol,maxit). % % The solution is obtained via an iterative procedure, called Landweber % iteration, involving iterative group thresholdings. % % The relationship between the output coefficients is given by : % % frec = frsyn(F,tc); % % % References: % M. Kowalski. Sparse regression using mixed norms. Appl. Comput. Harmon. % Anal., 27(3):303-324, 2009. % % M. Kowalski and B. Torresani. Sparsity and persistence: mixed norms % provide simple signal models with dependent coefficients. Signal, Image % and Video Processing, 3(3):251-264, 2009. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/franagrouplasso.html} %@seealso{franalasso, framebounds} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,3,'FRANAGROUPLASSO'); complainif_notvalidframeobj(F,'FRANAGROUPLASSO'); if ~isvector(f) error('Input signal must be a vector.'); end % Define initial value for flags and key/value pairs. definput.import={'thresh','groupthresh'}; definput.flags.group={'freq','time'}; definput.keyvals.C=[]; definput.keyvals.maxit=100; definput.keyvals.tol=1e-2; definput.keyvals.printstep=10; definput.flags.print={'quiet','print'}; [flags,kv]=ltfatarghelper({'C','tol','maxit'},definput,varargin); L=framelength(F,length(f)); F=frameaccel(F,L); if isempty(kv.C) [~,kv.C] = framebounds(F,L); end; % Initialization of thresholded coefficients c0 = frana(F,f); % We have to convert the coefficients to time-frequency layout to % discover their size tc = framecoef2tf(F,c0); % [M,N]=size(tc); % Normalization to turn lambda to a value comparable to lasso %if flags.do_time % lambda = lambda*sqrt(N); %else % lambda = lambda*sqrt(M); %end % Various parameter initializations threshold = lambda/kv.C; tc0 = c0; relres = 1e16; iter = 0; % Choose the dimension to group along if flags.do_freq kv.dim=2; else kv.dim=1; end; if F.red==1 tc=groupthresh(tc,threshold,kv.dim,flags.iofun); % Convert back from TF-plane tc=frametf2coef(F,tc); else % Main loop while ((iter < kv.maxit)&&(relres >= kv.tol)) tc = c0 - frana(F,frsyn(F,tc0)); tc = tc0 + tc/kv.C; % ------------ Convert to TF-plane --------- tc = framecoef2tf(F,tc); tc = groupthresh(tc,threshold,'argimport',flags,kv); % Convert back from TF-plane tc=frametf2coef(F,tc); % ------------------------------------------- relres = norm(tc(:)-tc0(:))/norm(tc0(:)); tc0 = tc; iter = iter + 1; if flags.do_print if mod(iter,kv.printstep)==0 fprintf('Iteration %d: relative error = %f\n',iter,relres); end; end; end end; % Reconstruction if nargout>3 frec = frsyn(F,tc); end; ltfat/inst/frames/framenative2coef.m0000664000175000017500000000265712612404256017430 0ustar susnaksusnakfunction coef=framenative2coef(F,coef); %-*- texinfo -*- %@deftypefn {Function} framenative2coef %@verbatim %FRAMENATIVE2COEF Convert coefficient from native format % Usage: coef=framenative2coef(F,coef); % % FRAMENATIVE2COEF(F,coef) converts the frame coefficients from the % native format of the transform into the common column format. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framenative2coef.html} %@seealso{frame, framecoef2native} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FRAMENATIVE2COEF'); complainif_notvalidframeobj(F,'FRAMENATIVE2COEF'); % .native2coef is not a mandatory field if isfield(F,'native2coef') coef=F.native2coef(coef); end ltfat/inst/frames/framelengthcoef.m0000664000175000017500000000351412612404256017332 0ustar susnaksusnakfunction L=framelengthcoef(F,Ncoef); %-*- texinfo -*- %@deftypefn {Function} framelengthcoef %@verbatim %FRAMELENGTHCOEF Frame length from coefficients % Usage: L=framelengthcoef(F,Ncoef); % % FRAMELENGTHCOEF(F,Ncoef) returns the length of the frame F, such that % F is long enough to expand the coefficients of length Ncoef. % % If instead a signal is given, call FRAMELENGTH. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framelengthcoef.html} %@seealso{frame, framelength} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . callfun = upper(mfilename); complainif_notenoughargs(nargin,2,callfun); complainif_notposint(Ncoef,'Ncoef',callfun); complainif_notvalidframeobj(F,callfun); L = F.lengthcoef(Ncoef); % sprintf for Octave compatibility assert(abs(L-round(L))<1e-3,... sprintf('%s: There is a bug. L=%d should be an integer.',... upper(mfilename),L)); L=round(L); % Verify the computed length if ~(L==framelength(F,L)) error(['%s: The coefficient number given does not correspond to a valid ' ... 'set of coefficients for this type of frame.'],upper(mfilename)); end; ltfat/inst/frames/framedual.m0000664000175000017500000001222412612404256016137 0ustar susnaksusnakfunction Fd=framedual(F) %-*- texinfo -*- %@deftypefn {Function} framedual %@verbatim %FRAMEDUAL Construct the canonical dual frame % Usage: Fd=framedual(F); % % Fd=FRAMEDUAL(F) returns the canonical dual frame of F. % % The canonical dual frame can be used to get perfect reconstruction as in % the following example: % % % Create a frame and its canonical dual % F=frame('dgt','hamming',32,64); % Fd=framedual(F); % % % Compute the frame coefficients and test for perfect % % reconstruction % f=gspi; % c=frana(F,f); % r=frsyn(Fd,c); % norm(r(1:length(f))-f) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framedual.html} %@seealso{frame, framepair, frametight} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,1,'FRAMEDUAL'); complainif_notvalidframeobj(F,'FRAMEDUAL'); % Default operation, work for a lot of frames Fd=F; % Handle the windowed transforms switch(F.type) case {'dgt','dgtreal','dwilt','wmdct','filterbank','ufilterbank',... 'nsdgt','unsdgt','nsdgtreal','unsdgtreal'} Fd=frame(F.type,{'dual',F.g},F.origargs{2:end}); case {'filterbankreal','ufilterbankreal'} Fd=frame(F.type,{'realdual',F.g},F.origargs{2:end}); case 'gen' Fd=frame('gen',pinv(F.g)'); case 'tensor' for ii=1:F.Nframes dual_frames{ii}=framedual(F.frames{ii}); end; Fd=frame('tensor',dual_frames{:}); case 'fusion' dual_w=1./(F.Nframes*F.w); for ii=1:F.Nframes dual_frames{ii}=framedual(F.frames{ii}); end; Fd=frame('fusion',dual_w,dual_frames{:}); case 'ufwt' % The canonical dual of ufwt might not keep the iterated % filterbank structure [g, a] = wfbt2filterbank({F.g,F.J,'dwt'}); g = comp_filterbankscale(g,a,F.flags.scaling); Fd = framedual(frame('filterbank',g,ones(numel(g),1),numel(g))); warning(sprintf(['%s: The canonical dual system does not preserve ',... 'the iterated filterbank structure.'],... upper(mfilename))); case 'uwfbt' % The canonical dual of uwfbt might not keep the iterated % filterbank structure [g, a] = wfbt2filterbank(F.g); g = comp_filterbankscale(g,a,F.flags.scaling); Fd = framedual(frame('filterbank',g,ones(numel(g),1),numel(g))); warning(sprintf(['%s: The canonical dual system does not preserve ',... 'the iterated filterbank structure.'],... upper(mfilename))); case 'uwpfbt' % The canonical dual of uwfbt might not keep the iterated % filterbank structure [g, a] = wpfbt2filterbank(F.g, F.flags.interscaling); g = comp_filterbankscale(g, a, F.flags.scaling); Fd = framedual(frame('filterbank',g,ones(numel(g),1),numel(g))); warning(sprintf(['%s: The canonical dual system of frame type %s ',... 'does not preserve iterated filterbank structure.'],... upper(mfilename),F.type)); case 'fwt' is_basis = abs(sum(1./F.g.a)-1)<1e-6; is_tight = F.info.istight; % If the frame is a basis, there is only one dual frame. % If the basic filterbank is a parseval tight frame, the overal repr. % is also a tight frame. if is_basis || is_tight Fd = frame('fwt',{'dual',F.g},F.J); else error(['%s: Cannot create the canonical dual frame with the ',... 'same structure. Consider casting the system to an ',... 'uniform filterbank or using franaiter/frsyniter.'],... upper(mfilename)); end case 'wfbt' is_basis = all(cellfun(@(nEl) abs(sum(1./nEl.a)-1)<1e-6,F.g.nodes)); is_tight = F.info.istight; if is_basis || is_tight Fd = frame('wfbt',{'dual',F.g}); else error(['%s: Cannot create the canonical dual frame with the ',... 'same structure. Consider casting the system to an ',... 'uniform filterbank or using franaiter/frsyniter.'],... upper(mfilename)); end case 'wpfbt' % WPFBT is too wierd. error(['%s: Canonical dual frame of wpfbt might not keep the ',... 'same structure. Consider using franaiter/frsyniter.'],upper(mfilename)); end; % Treat the fixed length frames if isfield(F,'fixedlength') && F.fixedlength && isfield(F,'L') Fd = frameaccel(Fd,F.L); Fd.fixedlength = 1; end ltfat/inst/frames/plotframe.m0000664000175000017500000001102212612404256016163 0ustar susnaksusnakfunction outsig=plotframe(F,insig,varargin) %-*- texinfo -*- %@deftypefn {Function} plotframe %@verbatim %PLOTFRAME Plot frame coefficients % Usage: plotframe(F,c,…); % C = plotframe(...); % % PLOTFRAME(F,c) plots the frame coefficients c using the plot % command associated to the frame F. % % C=PLOTFRAME(...) for frames with time-frequency plots returns the % processed image data used in the plotting. The function produces an % error for frames which does not have a time-frequency plot. % % PLOTFRAME(F,c,...) passes any additional parameters to the native % plot routine. Please see the help on the specific plot routine for a % complete description. % % The following common set of parameters are supported by all plotting % routines: % % 'dynrange',r % Limit the dynamical range to r. The default value of [] % means to not limit the dynamical range. % % 'db' Apply 20*log_{10} to the coefficients. This makes % it possible to see very weak phenomena, but it might show % too much noise. A logarithmic scale is more adapted to % perception of sound. This is the default. % % 'dbsq' Apply 10*log_{10} to the coefficients. Same as the % 'db' option, but assume that the input is already squared. % % 'lin' Show the coefficients on a linear scale. This will % display the raw input without any modifications. Only works for % real-valued input. % % 'linsq' Show the square of the coefficients on a linear scale. % % 'linabs' Show the absolute value of the coefficients on a linear scale. % % 'clim',clim % Only show values in between clim(1) and clim(2). This % is usually done by adjusting the colormap. See the help on imagesc. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/plotframe.html} %@seealso{frame, frana} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'PLOTFRAME'); complainif_notvalidframeobj(F,'PLOTFRAME'); switch(F.type) case {'dft','dftreal','dcti','dctii','dctiii','dctiv',... 'dsti','dstii','dstiii','dstiv'} if nargout>0 error(['%s: Plot function of %s frame does not produce a ',... 'TF image'],upper(mfilename),F.type); end end; switch(F.type) case {'fwt','ufwt','wfbt','wpfbt','uwfbt','uwpfbt'} info.fname = F.type; info.wt = F.g; end; switch(F.type) case 'dgt' outsig = plotdgt(framecoef2native(F,insig),F.a,varargin{:}); case 'dgtreal' outsig = plotdgtreal(framecoef2native(F,insig),F.a,F.M,varargin{:}); case 'dwilt' outsig = plotdwilt(framecoef2native(F,insig),varargin{:}); case 'wmdct' outsig = plotwmdct(framecoef2native(F,insig),varargin{:}); case 'gen' error(['%s: There is no default way of visualizing general frame ' ... 'coefficients.'],upper(mfilename)); case 'dft' plotfft(insig,varargin{:}); case 'dftreal' plotfftreal(insig, varargin{:}); case {'dcti','dctii','dctiii','dctiv',... 'dsti','dstii','dstiii','dstiv'} % FIXME : This is not strictly correct, as half the transforms use an % odd frequency centering. plotfftreal(insig,varargin{:}); case 'fwt' info.Lc = fwtclength(size(insig,1)/F.red,F.g,F.J); info.J = F.J; info.dim = 1; plotwavelets(insig,info,varargin{:}); case 'ufwt' info.J = F.J; outsig = plotwavelets(framecoef2native(F,insig),info,varargin{:}); case {'wfbt','wpfbt'} outsig = plotwavelets(framecoef2native(F,insig),info,varargin{:}); case {'uwfbt','uwpfbt'} outsig = plotwavelets(framecoef2native(F,insig),info,varargin{:}); case {'filterbank','filterbankreal','ufilterbank','ufilterbankreal'} outsig = plotfilterbank(framecoef2native(F,insig),F.a,[],varargin{:}); end; if nargout<1 clear outsig; end ltfat/inst/frames/frametf2coef.m0000664000175000017500000000366112612404256016547 0ustar susnaksusnakfunction coef=frametf2coef(F,coef) %-*- texinfo -*- %@deftypefn {Function} frametf2coef %@verbatim %FRAMETF2COEF Convert coefficients from TF-plane format % Usage: cout=frametf2coef(F,cin); % % FRAMETF2COEF(F,cin) converts the frame coefficients from the % time-frequency plane layout into the common column format. % % Not all types of frames support this coefficient conversion. The supported % types of frames are: 'dgt', 'dgtreal', 'dwilt', 'wmdct', 'ufilterbank', % 'ufwt','uwfbt' and 'uwpfbt'. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/frametf2coef.html} %@seealso{frame, framecoef2tf, framecoef2native} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FRAMETF2COEF'); complainif_notvalidframeobj(F,'FRAMETF2COEF'); switch(F.type) case {'dgt','dgtreal','wmdct'} [M,N,W]=size(coef); coef=reshape(coef,[M*N,W]); case {'dwilt'} coef=framenative2coef(F,rect2wil(coef)); case {'ufilterbank'} coef=permute(coef,[2,1,3]); [M,N,W]=size(coef); coef=reshape(coef,[M*N,W]); case {'ufwt','uwfbt','uwpfbt'} coef = F.native2coef(permute(coef,[2,1,3])); otherwise error('%s: TF-plane layout not supported for this transform.',upper(mfilename)); end; ltfat/inst/frames/framecoef2tf.m0000664000175000017500000000457412612404256016553 0ustar susnaksusnakfunction coef=framecoef2tf(F,coef) %-*- texinfo -*- %@deftypefn {Function} framecoef2tf %@verbatim %FRAMECOEF2TF Convert coefficients to time-frequency plane % Usage: cout=framecoef2tf(F,cin); % % FRAMECOEF2TF(F,cin) converts the frame coefficients cin into the % time-frequency plane layout. The frame object F must have been % created using FRAME. % % The time-frequency plane layout is a matrix, where the first % dimension indexes frequency and the second dimension time. This is % similar to the output format from DGT and WMDCT. % % Not all types of frames support this coefficient conversion. The supported % types of frames are: 'dgt', 'dgtreal', 'dwilt', 'wmdct', 'ufilterbank', % 'ufwt','uwfbt' and 'uwpfbt'. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framecoef2tf.html} %@seealso{frame, frametf2coef, framecoef2native} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,2,'FRAMECOEF2TF'); complainif_notvalidframeobj(F,'FRAMECOEF2TF'); switch(F.type) case 'dgt' [MN,W]=size(coef); N=MN/F.M; coef=reshape(coef,[F.M,N,W]); case 'dgtreal' [MN,W]=size(coef); M2=floor(F.M/2)+1; N=MN/M2; coef=reshape(coef,[M2,N,W]); case 'dwilt' [MN,W]=size(coef); N=MN/F.M; coef=wil2rect(reshape(coef,[2*F.M,N/2,W])); case 'wmdct' [MN,W]=size(coef); N=MN/F.M; coef=reshape(coef,[F.M,N,W]); case 'ufilterbank' [MN,W]=size(coef); M=numel(F.g); N=MN/M; coef=permute(reshape(coef,[N,M,W]),[2,1,3]); case {'ufwt','uwfbt','uwpfbt'} coef = permute(F.coef2native(coef,size(coef)),[2,1,3]); otherwise error('%s: TF-plane layout not supported for this transform.',upper(mfilename)); end; ltfat/inst/frames/framediag.m0000664000175000017500000000404112612404256016114 0ustar susnaksusnakfunction d=framediag(F,L); %-*- texinfo -*- %@deftypefn {Function} framediag %@verbatim %FRAMEDIAG Compute the diagonal of the frame operator % Usage: d=framediag(F,L); % % FRAMEDIAG(F,L) computes the diagonal of the frame operator for a % frame of type F of length L. % % The diagonal of the frame operator can for instance be used as a % preconditioner. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framediag.html} %@seealso{franaiter, frsyniter} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . callfun = upper(mfilename); complainif_notenoughargs(nargin,2,callfun); complainif_notposint(L,'L',callfun); complainif_notvalidframeobj(F,callfun); % Standard response, works for all tight and orthonormal systems d=ones(L,1); switch(F.type) case 'gen' d=diag(F.g*F.g'); case {'dgt','dgtreal'} d=gabframediag(F.g,F.a,F.M,L,F.vargs{:}); case {'dwilt','wmdct'} d=wilframediag(F.g,F.M,L); case {'filterbank','ufilterbank','filterbankreal','ufilterbankreal'} error('%s: TO DO: Not supported yet',upper(mfilename)); case {'nsdgt','unsdgt','nsdgtreal','unsdgtreal'} d=nsgabframediag(F.g,F.a,F.M); case 'fusion' error('Not implemented yet.'); case {'fwt','ufwt','wfbt','uwfbt','wpfbt','uwpfbt'} error('%s: TO DO: Not supported yet',upper(mfilename)); end; ltfat/inst/frames/franaiter.m0000664000175000017500000001015512612404256016153 0ustar susnaksusnakfunction [c,relres,iter]=franaiter(F,f,varargin) %-*- texinfo -*- %@deftypefn {Function} franaiter %@verbatim %FRANAITER Iterative analysis % Usage: c=franaiter(F,f); % [c,relres,iter]=franaiter(F,f,...); % % Input parameters: % F : Frame. % f : Signal. % Ls : Length of signal. % Output parameters: % c : Array of coefficients. % relres : Vector of residuals. % iter : Number of iterations done. % % c=FRANAITER(F,f) computes the frame coefficients c of the signal f* % using an iterative method such that perfect reconstruction can be % obtained using FRSYN. FRANAITER always works, even when FRANA % cannot generate perfect reconstruction coefficients. % % [c,relres,iter]=FRANAITER(...) additionally returns the relative % residuals in a vector relres and the number of iteration steps iter. % % *Note:* If it is possible to explicitly calculate the canonical dual % frame then this is usually a much faster method than invoking % FRANAITER. % % FRANAITER takes the following parameters at the end of the line of % input arguments: % % 'tol',t Stop if relative residual error is less than the % specified tolerance. Default is 1e-9 (1e-5 for single precision) % % 'maxit',n Do at most n iterations. % % 'pg' Solve the problem using the Conjugate Gradient % algorithm. This is the default. % % 'pcg' Solve the problem using the Preconditioned Conjugate Gradient % algorithm. % % 'print' Display the progress. % % 'quiet' Don't print anything, this is the default. % % Examples % -------- % % The following example shows how to rectruct a signal without ever % using the dual frame: % % f=greasy; % F=frame('dgtreal','gauss',40,60); % [c,relres,iter]=franaiter(F,f,'tol',1e-14); % r=frsyn(F,c); % norm(f-r)/norm(f) % semilogy(relres); % title('Conversion rate of the CG algorithm'); % xlabel('No. of iterations'); % ylabel('Relative residual'); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/franaiter.html} %@seealso{frame, frana, frsyn, frsyniter} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHORS: Peter L. Soendergaard complainif_notenoughargs(nargin,2,'FRANAITER'); complainif_notvalidframeobj(F,'FRANAITER'); tolchooser.double=1e-9; tolchooser.single=1e-5; definput.keyvals.Ls=[]; definput.keyvals.tol=tolchooser.(class(f)); definput.keyvals.maxit=100; definput.flags.alg={'cg','pcg'}; definput.keyvals.printstep=10; definput.flags.print={'quiet','print'}; [flags,kv,Ls]=ltfatarghelper({'Ls'},definput,varargin); %% ----- step 1 : Verify f and determine its length ------- % Change f to correct shape. [f,~,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],[],upper(mfilename)); F=frameaccel(F,Ls); L=F.L; %% -- run the iteration A=@(x) F.frsyn(F.frana(x)); % An explicit postpad is needed for the pcg algorithm to not fail f=postpad(f,L); if flags.do_pcg d=framediag(F,L); M=spdiags(d,0,L,L); [fout,flag,~,iter,relres]=pcg(A,f,kv.tol,kv.maxit,M); else [fout,flag,~,iter,relres]=pcg(A,f,kv.tol,kv.maxit); end; c=F.frana(fout); if nargout>1 relres=relres/norm(fout(:)); end; %% --- cleanup ----- permutedsize=[size(c,1),permutedsize(2:end)]; c=assert_sigreshape_post(c,dim,permutedsize,order); ltfat/inst/frames/framegram.m0000664000175000017500000000257112612404256016144 0ustar susnaksusnakfunction framegram(F,x,varargin) %-*- texinfo -*- %@deftypefn {Function} framegram %@verbatim %FRAMEGRAM Easy visualization of energy in transform domain % Usage: framegram(F,x,...); % % FRAMEGRAM(F,x) plots the energy of the frame coefficients computed % from the input signal x using the frame F for analysis. This is % just a shorthand for: % % plotframe(F,abs(frana(F,x)).^2); % % Any additional arguments given to FRAMEGRAM are passed onto % PLOTFRAME. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framegram.html} %@seealso{plotframe} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . plotframe(F,abs(frana(F,x)).^2,varargin{:}); ltfat/inst/frames/frgramian.m0000664000175000017500000000447312612404256016154 0ustar susnaksusnakfunction o = frgramian(c, Fa, Fs) %-*- texinfo -*- %@deftypefn {Function} frgramian %@verbatim %FRGRAMIAN Frame Gramian operator % Usage: o=frgramian(c, F); % o=frgramian(c, Fa, Fs); % % Input parameters: % c : Input coefficients % Fa : Analysis frame % Fs : Synthesis frame % % Output parameters: % o : Output coefficients % % o=FRGRAMIAN(c,F) applies the Gramian operator or Gram matrix of the % frame F. The entries of the Gram matrix are the inner products of the % frame elements of F. The frame must have been created using FRAME. % If the frame F is a Parseval frame, the Gramian operator is a projection % onto the range of the frame analysis operator. % % o=FRGRAMIAN(c, Fa, Fs) applies the (cross) Gramian operator with the % frames Fa and Fs. Here Fs is the frame associated with the frame % synthesis operator and Fa the frame that is associated with the % frame analysis operator. The entries of the matrix that is constructed % through the Gramian operator are the inner products of the frame % elements of Fa and Fs. % If Fa and Fs are canonical dual frames, the Gramian operator is a % projection onto the range of the frame analysis operator. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/frgramian.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Jordy van Velthoven complainif_notenoughargs(nargin, 2, 'FRGRAMIAN'); complainif_notvalidframeobj(Fa,'FRGRAMIAN'); if (nargin == 2) Fs = Fa; else complainif_notvalidframeobj(Fs,'FRGRAMIAN'); end; o = frana(Fa, frsyn(Fs, c)); ltfat/inst/frames/Contents.m0000664000175000017500000000535012612404256015776 0ustar susnaksusnak% LTFAT - Frames % % Peter L. Soendergaard, 2012 - 2015. % % Creation of a frame object % FRAME - Construct a new frame % FRAMEPAIR - Construct a pair of frames % FRAMEDUAL - The canonical dual frame % FRAMETIGHT - The canonical tight frame % FRAMEACCEL - Precompute arrays for faster application % % Linear operators % FRANA - Frame analysis % FRSYN - Frame synthesis % FRSYNMATRIX - Frame synthesis operator matrix % FRGRAMIAN - Frame Gramian operator % FRAMEOPERATOR - Frame operator % FRAMEDIAG - Diagonal of frame operator % FRANAITER - Iterative perfect reconstruction analysis % FRSYNITER - Iterative perfect reconstruction synthesis % % Visualization % PLOTFRAME - Plot frame coefficients % FRAMEGRAM - Plot energy of signal in frame space % % Information about a frame % FRAMEBOUNDS - Frame bounds % FRAMERED - Redundancy of frame % FRAMELENGTH - Length of frame to expand signal % FRAMELENGTHCOEF - Length of frame given a set of coefficients % FRAMECLENGTH - Number of coefficients given input signal length % % Coefficients conversions % FRAMECOEF2NATIVE - Convert to native transform format % FRAMENATIVE2COEF - Convert native to column format % FRAMECOEF2TF - Convert to time-frequency plane layout % FRAMETF2COEF - Convert TF-plane layout to native % FRAMECOEF2TFPLOT - Convert to time-frequency plane layout for plotting % % Non-linear analysis and synthesis % FRANABP - Basis pursuit using the SALSA algorithm. % FRANALASSO - LASSO thresholding using Landweber iterations. % FRANAGROUPLASSO - Group LASSO thresholding. % FRSYNABS - Frame synthesis from magnitude of coefficients % % For help, bug reports, suggestions etc. please visit % http://github.com/ltfat/ltfat/issues % % Url: http://ltfat.github.io/doc/frames/Contents.html % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/frames/franabp.m0000664000175000017500000002421312612404256015611 0ustar susnaksusnakfunction [c,relres,iter,frec,cd] = franabp(F,f,varargin) %-*- texinfo -*- %@deftypefn {Function} franabp %@verbatim %FRANABP Frame Analysis Basis Pursuit % Usage: c = franabp(F,f) % c = franabp(F,f,lambda,C,tol,maxit) % [c,relres,iter,frec,cd] = franabp(...) % % Input parameters: % F : Frame definition % f : Input signal % lambda : Regularisation parameter. % C : Step size of the algorithm. % tol : Reative error tolerance. % maxit : Maximum number of iterations. % Output parameters: % c : Sparse coefficients. % relres : Last relative error. % iter : Number of iterations done. % frec : Reconstructed signal such that frec = frsyn(F,c) % cd : The min c||_2 solution using the canonical dual frame. % % c = FRANABP(F,f) solves the basis pursuit problem % % argmin ||c||_1 subject to Fc = f % % for a general frame F using SALSA (Split Augmented Lagrangian % Srinkage algorithm) which is an appication of ADMM (Alternating % Direction Method of Multipliers) to the basis pursuit problem. % % The algorithm given F and f and parameters C >0, lambda >0 % (see below) acts as follows: % % Initialize c,d % repeat % v <- soft(c+d,lambda/C) - d % d <- F*(FF*)^(-1)(f - Fv) % c <- d + v % end % % When compared to other algorithms, Fc = f holds exactly (up to a num. % prec) in each iteration. % % For a quick execution, the function requires analysis operator of the % canonical dual frame F*(FF*)^(-1). By default, the function attempts % to call FRAMEDUAL to create the canonical dual frame explicitly. % If it is not available, the conjugate gradient method algorithm is % used for inverting the frame operator in each iteration of the % algorithm. % Optionally, the canonical dual frame object or an anonymous function % acting as the analysis operator of the canonical dual frame can be % passed as a key-value pair 'Fd',Fd see below. % % Optional positional parameters (lambda,C,tol,maxit) % --------------------------------------------------- % % lambda % A parameter for weighting coefficients in the objective % function. For lambda~=1 the basis pursuit problem changes to % % argmin ||lambda c||_1 subject to Fc = f % % lambda can either be a scalar or a vector of the same length % as c (in such case the product is carried out elementwise). % One can obtain length of c from length of f by % FRAMECLENGTH. FRAMECOEF2NATIVE and FRAMENATIVE2COEF will % help with defining weights specific to some regions of % coefficients (e.g. channel-specific weighting can be achieved % this way). % The default value of lambda is 1. % % C % A step parameter of the SALSA algorithm. % The default value of C is the upper frame bound of F. % Depending on the structure of the frame, this can be an expensive % operation. % % tol % Defines tolerance of relres which is a norm or a relative % difference of coefficients obtained in two consecutive iterations % of the algorithm. % The default value 1e-2. % % maxit % Maximum number of iterations to do. % The default value is 100. % % Other optional parameters % ------------------------- % % Key-value pairs: % % 'Fd',Fd % A canonical dual frame object or an anonymous function % acting as the analysis operator of the canonical dual frame. % % 'printstep',printstep % Print current status every printstep iteration. % % Flag groups (first one listed is the default): % % 'print','quiet' % Enables/disables printing of notifications. % % 'zeros','frana' % Starting point of the algorithm. With 'zeros' enabled, the % algorithm starts from coefficients set to zero, with 'frana' % the algorithm starts from c=frana(F,f). % % Returned arguments: % ------------------- % % [c,relres,iter] = FRANABP(...) returns the residuals relres in a % vector and the number of iteration steps done iter. % % [c,relres,iter,frec,cd] = FRANABP(...) returns the reconstructed % signal from the coefficients, frec (this requires additional % computations) and a coefficients cd minimising the c||_2 norm % (this is a byproduct of the algorithm). % % The relationship between the output coefficients frec and c is % given by : % % frec = frsyn(F,c); % % And cd and f by : % % cd = frana(framedual(F),f); % % Examples: % --------- % % The following example shows how FRANABP produces a sparse % representation of a test signal greasy still maintaining a perfect % reconstruction: % % f = greasy; % % Gabor frame with redundancy 8 % F = frame('dgtreal','gauss',64,512); % % Solve the basis pursuit problem % [c,~,~,frec,cd] = franabp(F,f); % % Plot sparse coefficients % figure(1); % plotframe(F,c,'dynrange',50); % % % Plot coefficients obtained by applying an analysis operator of a % % dual Gabor system to f* % figure(2); % plotframe(F,cd,'dynrange',50); % % % Check the reconstruction error (should be close do zero). % % frec is obtained by applying the synthesis operator of frame F* % % to sparse coefficients c. % norm(f-frec) % % % Compare decay of coefficients sorted by absolute values % % (compressibility of coefficients) % figure(3); % semilogx([sort(abs(c),'descend')/max(abs(c)),... % sort(abs(cd),'descend')/max(abs(cd))]); % legend({'sparsified coefficients','dual system coefficients'}); % % % References: % S. Boyd, N. Parikh, E. Chu, B. Peleato, and J. Eckstein. Distributed % optimization and statistical learning via the alternating direction % method of multipliers. Found. Trends Mach. Learn., 3(1):1-122, Jan. % 2011. [1]http ] % % I. Selesnick. L1-Norm Penalized Least Squares with SALSA. OpenStax_CNX, % Jan. 2014. % % References % % 1. http://dx.doi.org/10.1561/2200000016 % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/franabp.html} %@seealso{frame, frana, frsyn, framebounds, franalasso} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % AUTHOR: Zdenek Prusa % TO DO: Detect when F is a tight frame and simplify the algorithm. % Maybe add a 'tight' flag to indicate the frame is already tight. complainif_notenoughargs(nargin,2,'FRANABP'); complainif_notvalidframeobj(F,'FRANABP'); % Define initial value for flags and key/value pairs. definput.keyvals.C=[]; definput.keyvals.lambda=[]; definput.keyvals.tol=1e-2; definput.keyvals.maxit=100; definput.keyvals.printstep=10; definput.keyvals.Fd=[]; definput.flags.print={'print','quiet'}; definput.flags.startpoint={'zeros','frana'}; [flags,kv,lambda,C]=ltfatarghelper({'lambda','C','tol','maxit'},definput,varargin); if isempty(lambda) lambda = 1; end if ~isnumeric(lambda) || any(lambda)<0 error('%s: ''lambda'' parameter must be positive.',... upper(mfilename)); end %% ----- step 1 : Verify f and determine its length ------- % Change f to correct shape. [f,~,Ls,W,dim,permutedsize,order]=assert_sigreshape_pre(f,[],[],upper(mfilename)); if W>1 error('%s: Input signal can be single channel only.',upper(mfilename)); end % Do a correct postpad so that we can call F.frana and F.frsyn % directly. L = framelength(F,Ls); f = postpad(f,L); if isempty(C) % Use the upper framebound as C [~,C] = framebounds(F,L); else if ~isnumeric(C) || C<=0 error('%s: ''C'' parameter must be a positive scalar.',... upper(mfilename)); end end; if isempty(kv.Fd) % If the dual frame was not explicitly passed try creating it try % Try to create and accelerate the dual frame Fd = frameaccel(framedual(F),L); Fdfrana = @(insig) Fd.frana(insig); catch warning(sprintf(['The canonical dual system is not available for a given ',... 'frame.\n Using franaiter.'],upper(mfilename))); % err = lasterror.message; % The dual system cannot be created. % We will use franaiter instead Fdfrana = @(insig) franaiter(F,insig,'tol',1e-14); end else if isstruct(kv.Fd) && isfield(kv.Fd,'frana') % The canonical dual frame was passed explicitly as a frame object Fd = frameaccel(kv.Fd,L); Fdfrana = @(insig) Fd.frana(insig); elseif isa(kv.Fd,'function_handle') % The anonymous function is expected to do F*(FF*)^(-1) Fdfrana = kv.Fd; else error('%s: Invalid format of Fd.',upper(mfielname)); end end % Accelerate the frame F = frameaccel(F,L); % Cache the constant part cd = Fdfrana(f); % Intermediate results d = zeros(size(cd)); % Initial point if flags.do_frana tc0 = F.frana(f); elseif flags.do_zeros tc0 = zeros(size(cd)); end c = tc0; threshold = lambda./C; relres = 1e16; iter = 0; % Main loop while ((iter < kv.maxit)&&(relres >= kv.tol)) % Main part of the algorithm v = thresh(c + d,threshold,'soft') - d; d = cd - Fdfrana(F.frsyn(v)); c = d + v; % Bookkeeping relres = norm(c(:)-tc0(:))/norm(tc0(:)); tc0 = c; iter = iter + 1; if flags.do_print if mod(iter,kv.printstep)==0 fprintf('Iteration %d: relative error = %f\n',iter,relres); end; end; end if nargout>3 % Do a reconstruction with the original frame frec = postpad(F.frsyn(c),Ls); % Reformat to the original shape frec = assert_sigreshape_post(frec,dim,permutedsize,order); end ltfat/inst/frames/frsynmatrix.m0000664000175000017500000000653312612404256016573 0ustar susnaksusnakfunction G=frsynmatrix(F,L); %-*- texinfo -*- %@deftypefn {Function} frsynmatrix %@verbatim %FRSYNMATRIX Frame synthesis operator matrix % Usage: G=frsynmatrix(F,L); % % G=FRSYNMATRIX(F,L) returns the matrix representation G of the frame % synthesis operator for a frame F of length L. The frame object F* % must have been created using FRAME. % % The frame synthesis operator matrix contains all the frame atoms as % column vectors. It has dimensions L xNcoef, where Ncoef is the % number of coefficients. The number of coefficients can be found as % Ncoef=frameclength(L). This means that the frame matrix is usually % *very* large, and this routine should only be used for small values of % L. % % The action of the frame analysis operator FRANA is equal to % multiplication with the Hermitean transpose of the frame % matrix. Consider the following simple example: % % L=200; % F=frame('dgt','gauss',10,20); % G=frsynmatrix(F,L); % testsig = randn(L,1); % res = frana(F,testsig)-G'*testsig; % norm(res) % % Show the matrix (real and imaginary parts) % figure(1); imagesc(real(G)); % figure(2); imagesc(imag(G)); % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/frsynmatrix.html} %@seealso{frame, frana, frsyn} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . callfun = upper(mfilename); complainif_notenoughargs(nargin,2,callfun); complainif_notposint(L,'L',callfun); complainif_notvalidframeobj(F,callfun); Lcheck=framelength(F,L); if Lcheck~=L error('%s: Incompatible frame length. Next compatible one is %i.',... upper(mfilename),Lcheck); end; if F.realinput %switch(F.type) % case 'dgtreal' % This code correctly reproduces the matrix represenation of the % analysis operator, but not of the synthesis. % % F2=frame('dgt',F.g,F.a,F.M); % G2=frsynmatrix(F2,L); % M2=floor(F.M/2)+1; % N=L/F.a; % G=zeros(L,M2*N); % for n=0:N-1 % G(:,1+n*M2:(n+1)*M2)=G2(:,1+n*F.M:M2+n*F.M); % end; % otherwise error(['%s: The synthesis operator of real-valued-input frames is ' ... 'non-linear and does not have a matrix represenation.'],... upper(mfilename)); %end; else % Generic code handles all frames where there are no extra coefficients % in the representation Ncoef = framered(F)*L; % sprintf for Octave compatibility assert(abs(Ncoef-round(Ncoef))<1e-3,... sprintf('%s: There is a bug. Ncoef=%d should be an integer.',... upper(mfilename),Ncoef)); Ncoef=round(Ncoef); coef=eye(Ncoef); G = frsyn(F,coef); end; ltfat/inst/frames/framered.m0000664000175000017500000000326312612404256015767 0ustar susnaksusnakfunction red=framered(F); %-*- texinfo -*- %@deftypefn {Function} framered %@verbatim %FRAMERED Redundancy of a frame % Usage red=framered(F); % % FRAMERED(F) computes the redundancy of a given frame F. If the % redundancy is larger than 1 (one), the frame transform will produce more % coefficients than it consumes. If the redundancy is exactly 1 (one), % the frame is a basis. % % Examples: % --------- % % The following simple example shows how to obtain the redundancy of a % Gabor frame: % % F=frame('dgt','gauss',30,40); % framered(F) % % The redundancy of a basis is always one: % % F=frame('wmdct','gauss',40); % framered(F) % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framered.html} %@seealso{frame, frana, framebounds} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . complainif_notenoughargs(nargin,1,'FRAMERED'); complainif_notvalidframeobj(F,'FRAMERED'); % .red field is mandatory so no checking here red=F.red; ltfat/inst/frames/framesinit.m0000664000175000017500000000163712612404256016346 0ustar susnaksusnakstatus=1; %-*- texinfo -*- %@deftypefn {Function} framesinit %@verbatim %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/framesinit.html} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . ltfat/inst/frames/frameaccel.m0000664000175000017500000000762312612404256016270 0ustar susnaksusnakfunction F=frameaccel(F,Ls); %-*- texinfo -*- %@deftypefn {Function} frameaccel %@verbatim %FRAMEACCEL Precompute structures % Usage: F=frameaccel(F,Ls); % % F=FRAMEACCEL(F,Ls) precomputes certain structures that makes the basic % frame operations FRANA and FRSYN faster (like instantiating the % window from a textual description). If you only need to call the % routines once, calling FRAMEACCEL first will not provide any total % gain, but if you are repeatedly calling these routines, for instance in % an iterative algorithm, it will be a benefit. % % Notice that you need to input the signal length Ls, so this routines % will only be a benefit if Ls stays fixed. % % If FRAMEACCEL is called twice for the same transform length, no % additional computations will be done. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/frames/frameaccel.html} %@seealso{frame, frana, framelength, framelengthcoef} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . callfun = upper(mfilename); complainif_notenoughargs(nargin,2,callfun); complainif_notposint(Ls,'Ls',callfun); complainif_notvalidframeobj(F,callfun); L=framelength(F,Ls); if isfield(F,'L') if L==F.L % Quick return, we have already accelerated return elseif isfield(F,'fixedlength') && F.fixedlength error(['%s: Incompatible signal length. The frame was specified for ',... 'fixed signal length L=%i.'],upper(mfilename),F.L); end end; F.L=L; if strcmp(F.type,'fusion') for ii=1:F.Nframes accel_frames{ii}=frameaccel(F.frames{ii},Ls); end; F=frame('fusion',F.w,accel_frames{:}); F.L=L; return; end; if strcmp(F.type,'tensor') for ii=1:F.Nframes accel_frames{ii}=frameaccel(F.frames{ii},Ls); end; F=frame('tensor',accel_frames{:}); F.L=L; return; end; if ~isfield(F,'g') % Quick exit, the frame does not use a window. In this case, the frame % always has a factorization % Default values for a lot of transforms F.isfac=1; return; end; % From this point and on, we are sure that F.g exists if ~isempty(F.g) switch(F.type) case 'gen' F.isfac=~issparse(F.g); case {'dgt','dgtreal'} [g, info] = gabwin(F.g,F.a,F.M,L,F.kv.lt); F = frame(F.type,g,F.origargs{2:end}); F.g_info = info; F.isfac=1; case {'dwilt','wmdct'} [g, info] = wilwin(F.g,F.M,L,upper(mfilename)); F = frame(F.type,g,F.origargs{2:end}); F.g_info = info; F.isfac=1; case {'filterbank','ufilterbank'} [g, asan, info] = filterbankwin(F.g,F.a,L); g = comp_filterbank_pre(g,asan,L,1000); F = frame(F.type,g,asan,numel(g)); F.g_info = info; F.isfac=F.g_info.isfac; case {'filterbankreal','ufilterbankreal'} [g,asan,info] = filterbankwin(F.g,F.a,L,'real'); g = comp_filterbank_pre(g,asan,L,1000); F = frame(F.type,g,asan,numel(g)); F.g_info = info; F.isfac=F.g_info.isfac; case {'nsdgt','unsdgt','nsdgtreal','unsdgtreal'} [F.g,F.g_info] = nsgabwin(F.g,F.a,F.M); F.isfac=F.g_info.isfac; case {'fwt','ufwt','wfbt','uwfbt','wpfbt','uwpfbt'} F.isfac = 1; end; end; F.L=L; ltfat/inst/ltfatarghelper.m0000664000175000017500000002145512612404256015734 0ustar susnaksusnakfunction [flags,keyvals,varargout] = ltfatarghelper(posdepnames,definput,arglist,callfun) %-*- texinfo -*- %@deftypefn {Function} ltfatarghelper %@verbatim %LTFATARGHELPER Parse arguments for LTFAT % Usage: [flags,varargout] = ltfatarghelper(posdepnames,definput,arglist,callfun); % % Input parameters: % posdepnames : Names of the position dependant parameters. % definput : Struct to define the allowed input % arglist : Commandline of the calling function (varargin) % callfun : Name of calling function (optional) % % Output parameters: % flags : Struct with information about flags. % keyvals : Struct with key / values. % varargout : The position dependant pars. properly initialized % % [flags,keyvals]=LTFATARGHELPER(posdepnames,definput,arglist) assists in % parsing input parameters for a function in LTFAT. Parameters come in % four categories: % % Position dependant parameters. These must not be strings. These are % the first parameters passed to a function, and they are really just a % short way of specifying key/value pairs. See below. % % Flags. These are single string appearing after the position dependant % parameters. % % Key/value pairs. The key is always a string followed by the value, % which can be anything. % % Expansions. These appear as flags, that expand into a pre-defined list % of parameters. This is a short-hand way of specifying standard sets of % flags and key/value pairs. % % The parameters are parsed in order, so parameters appearing later in % varargin will override previously set values. % % The following example for calling LTFATARGHELPER is taken from DGT: % % definput.keyvals.L=[]; % definput.flags.phase={'freqinv','timeinv'}; % [flags,kv]=ltfatarghelper({'L'},definput,varargin); % % The first line defines a key/value pair with the key 'L' having an % initial value of [] (the empty matrix). % % The second line defines a group of flags by the name of phase. The % group phase contains the flags 'freqinv' and 'timeinv', which can % both be specified on the command line by the user. The group-name % phase is just for internal use, and does not appear to the user. The % flag mentioned first in the list will be selected by default, and only % one flag in a group can be selected at any time. A group can contain as % many flags as desired. % % The third line is the actual call to LTFATARGHELPER which defines the % output flags and kv. The input {'L'} indicates that the value of % the parameter 'L' can also be given as the very first value in % varargin. % % The output struct kv contains the key/value pairs, so the value % associated to 'L' is stored in kv.L. % % The output struct flags contains information about the flags choosen % by the user. The value of flags.phase will be set to the selected flag % in the group phase and additionally, the value of flags.do_timeinv % will be 1 if 'timeinv' was selected and 0 otherwise, and similarly for % 'freqinv'. This allows for easy checking of selected flags. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/ltfatarghelper.html} %@seealso{ltfatgetdefaults, ltfatsetdefaults} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . persistent TF_CONF; if isempty(TF_CONF) % basepath=which('ltfatarghelper'); % % Kill the function name and comp from the path. % basepath=basepath(1:end-22); % % add the base path % addpath(basepath); % ltfatstart; TF_CONF.fundefs = struct; end; if ischar(posdepnames) % Special interface needed for ltfatsetdefaults and ltfatgetdefaults, % activated when first argument is a string. % First input argument, posdepnames, is a string, one of the options % in the "switch" section below % Second input argument, definput, is a function name to get or set % Third input argument, arglist , is a cell-array with options to set. switch(lower(posdepnames)) case 'get' if isfield(TF_CONF.fundefs,definput) flags=TF_CONF.fundefs.(definput); else flags={}; end; case 'set' TF_CONF.fundefs.(definput)=arglist; case 'all' flags=TF_CONF.fundefs; case 'clearall' TF_CONF.fundefs=struct; end; return end; if nargin<4 f=dbstack; callfun=f(2).name; end; nposdep=numel(posdepnames); % Resolve import specifications BEFORE adding our own specifications. if isfield(definput,'import') for imp = definput.import; definput=feval(['arg_',imp{1}],definput); end; end; if isfield(definput,'flags') defflags=definput.flags; else defflags=struct; end; if isfield(definput,'keyvals') defkeyvals=definput.keyvals; else defkeyvals=struct; end; if isfield(definput,'groups') groups=definput.groups; else groups=struct; end; total_args = numel(arglist); % Determine the position of the first optional argument. % If no optional argument is given, return nposdep+1 first_str_pos = 1; while first_str_pos<=total_args && ~ischar(arglist{first_str_pos}) first_str_pos = first_str_pos +1; end; % If more than nposdep arguments are given, the first additional one must % be a string if (first_str_pos>nposdep+1) error('%s: Too many input arguments',upper(callfun)); end; n_first_args=min(nposdep,first_str_pos-1); keyvals=defkeyvals; % Copy the given first arguments for ii=1:n_first_args keyvals.(posdepnames{ii})=arglist{ii}; end; % Initialize the position independent parameters. % and create reverse mapping of flag -> group flagnames=fieldnames(defflags); flags=struct; % In order for flags to start with a number, it is necessary to add % 'x_' before the flag when the flags are used a field names in % flagreverse. Externally, flags are never used a field names in % structs, so this is an internal problem in ltfatarghelper that is % fixed this way. flagsreverse=struct; for ii=1:numel(flagnames) name=flagnames{ii}; flaggroup=defflags.(name); flags.(name)=flaggroup{1}; for jj=1:numel(flaggroup) flagsreverse.(['x_', flaggroup{jj}])=name; flags.(['do_',flaggroup{jj}])=0; end; flags.(['do_',flaggroup{1}])=1; end; %Get the rest of the arguments restlist = arglist(first_str_pos:end); %Check for default arguments if isfield(TF_CONF.fundefs,callfun) s=TF_CONF.fundefs.(callfun); restlist=[s,restlist]; end; % Check for import defaults if isfield(definput,'importdefaults') % Add the importdefaults before the user specified arguments. restlist=[definput.importdefaults,restlist]; end; while ~isempty(restlist) argname=restlist{1}; restlist=restlist(2:end); % pop found=0; % Is this name a flag? If so, set it if isfield(flagsreverse,['x_',argname]) % Unset all other flags in this group flaggroup=defflags.(flagsreverse.(['x_',argname])); for jj=1:numel(flaggroup) flags.(['do_',flaggroup{jj}])=0; end; flags.(flagsreverse.(['x_',argname]))=argname; flags.(['do_',argname])=1; found=1; end; % Is this name the key of a key/value pair? If so, set the value. if isfield(defkeyvals,argname) keyvals.(argname)=restlist{1}; restlist=restlist(2:end); found=1; end; % Is this name a group definition? If so, put the group in front of the parameters if isfield(groups,argname) s=groups.(argname); restlist=[s,restlist]; found=1; end; % Is the name == 'argimport' if strcmp('argimport',argname) fieldnames_flags= fieldnames(restlist{1}); fieldnames_kvs = fieldnames(restlist{2}); for ii=1:numel(fieldnames_flags) importname=fieldnames_flags{ii}; flags.(importname)=restlist{1}.(importname); end; for ii=1:numel(fieldnames_kvs) importname=fieldnames_kvs{ii}; keyvals.(importname)=restlist{2}.(importname); end; restlist=restlist(3:end); found=1; end; if found==0 if ischar(argname) error('%s: Unknown parameter: %s',upper(callfun),argname); else error('%s: Parameter is not a string, it is of class %s',upper(callfun),class(argname)); end; end; %ii=ii+1; end; % Fill varargout varargout=cell(1,nposdep); for ii=1:nposdep varargout(ii)={keyvals.(posdepnames{ii})}; end; ltfat/inst/ltfat_version0000664000175000017500000000000612612404251015334 0ustar susnaksusnak2.1.1 ltfat/inst/ltfatsetdefaults.m0000664000175000017500000000270112612404256016277 0ustar susnaksusnakfunction ltfatsetdefaults(fname,varargin) %-*- texinfo -*- %@deftypefn {Function} ltfatsetdefaults %@verbatim %LTFATSETDEFAULTS Set default parameters of function % % LTFATSETDEFAULTS(fname,...) sets the default parameters to be the % parameters specified at the end of the list of input arguments. % % LTFATSETDEFAULTS(fname) clears any default parameters for the function % fname. % % LTFATSETDEFAULTS('clearall') clears all defaults from all functions. % %@end verbatim %@strong{Url}: @url{http://ltfat.github.io/doc/ltfatsetdefaults.html} %@seealso{ltfatgetdefaults, ltfatstart} %@end deftypefn % Copyright (C) 2005-2015 Peter L. Soendergaard . % This file is part of LTFAT version 2.1.1 % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation, either version 3 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . if strcmpi(fname,'clearall') ltfatarghelper('clearall'); else ltfatarghelper('set',fname,varargin); end; ltfat/inst/INSTALL-Octave0000664000175000017500000001115212612404251015006 0ustar susnaksusnak-------- Compatibility ---------------------------------- The toolbox should work and compile on all versions of Octave later than version 3.4, but it is generally recommended to upgrade Octave to the latest stable release. For demos etc. to work, you will need to install some of the Octave-forge packages. All versions of LTFAT from 1.4.2 are also itself an Octave-forge package and the easiest way to install the toolbox is by typing the command pkg install -forge ltfat on the Octave prompt, which downloads LTFAT directly from the Octave-forge and compiles everything. This was tested on Linux, on Windows with MXE-Octave and Mac X unsing Octave from Homebrew. Since you are reading this, you have probably downloaded LTFAT from elsewhere and you want to compile sources by yourself. -------- What can be compiled ------------------------------- - Static backend libraries libltfat.a, libltfatf.a - Fast Oct-interfaces linking to the backend libraries and some additional MEX files. Block processing framework (optional, experimental) - Mex-interface playrec - Java classes for blockproc GUI ------------------------------------------------------------------------ -------- Compiling backend libs and the Octave interfaces ------------- ------------------------------------------------------------------------ LTFAT comes with C++ Octave interfaces to replace (shadow) all computationally intensitive functions in the toolbox. To compile the Octave interfaces, type "ltfatmex" on the Octave command prompt. This will compile the LTFAT C library and all the available oct-functions. LTFAT backend lib and Oct-interfaces depends on the following libraries: FFTW3, BLAS, LAPACK, which are usually distributed with Octave itself, so there is no need for installing them separately. --------- Compiling on MacOS ------------------------------------------ The GCC compiler is needed to compile the LTFAT on Mac OS X. When the Xcode Command Line Tools are installed the compilation of the LTFAT should work without any problem. Alternatively, Clang could be used to compile the LTFAT. The BLAS, LAPACK and FFTW libraries are taken directly from the Octave installation and doesn’t have to be installed separately. --------- Compiling on Microsoft Windows ------------------------------ Currently, there is no direct way of compiling ltfat on MXE-Octave. Please use the Octave-forge package. --------- Compiling on Linux ---------------------------------------- To compile, you must have installed the Octave development package and all its dependencies (the 'mkoctfile' script must be available). This will also install all necessary libraries and header files needed for compilation. * On Fedora / Redhat this package is called "octave-devel" * On Debian / Ubuntu this package is called "octave-headers" Install the octave-forge packages to add extra toolboxes available for Octave. --------------------------------------------------------------------------- -------- Compiling parts for the block processing framework ———------------ --------------------------------------------------------------------------- Everything should be already compiled if you have downloaded the binary release. In order to get the block processing framework working from the source, one has to compile the MEX-interface playrec and the JAVA GUI classes. This can be done by typing "ltfatmex playrec" and "ltfatmex java". Playrec MEX depends on the PORTAUDIO library, which has to be installed on your system prior running the commands. Compiling JAVA classes requires Java Development Kit to be installed. From Octave 3.8.0 the JAVA package is part of core Octave, so it doesn’t have to be installed separately. NOTE: Compiled Java classes (packed in blockproc.jar) are platform independent so compiling it and installing JDK can be avoided by taking the archive from any binary LTFAT package (from ltfat/blockproc/java). --------- Compiling on Mac ------------ It is recommended to compile PortAudio v19 to use with the block processing framework. PortAudio v19 only compiles on OS X version 10.4 or later. For any version of Octave older than 3.8.0 the JAVA package should be installed which requires the Java Development Kit to be installed. The Java Development Kit could be downloaded through the Apple Developer Downloads. --------- Compiling on Microsoft Windows -------------------------- Currently, there is no direct way of compiling ltfat on MXE-Octave. Please use the Octave-forge package. --------- Compiling on Linux ------------------------------------ - On Redhat / Fedora, TBD - On Debian / Ubuntu, install the packages 'portaudio19-dev', 'openjdk-7-jdk' ltfat/src/0000775000175000017500000000000012612404256012355 5ustar susnaksusnakltfat/src/ltfat_complexindependent_bl.c0000664000175000017500000000047412612404251020255 0ustar susnaksusnak#ifdef LTFAT_COMPLEXTYPE # undef LTFAT_COMPLEXTYPE #endif // LTFAT_COMPLEXTYPE #include "config.h" #include "ltfat.h" #include "ltfat_types.h" #include "gabdual.c" #include "gabtight.c" #define LTFAT_COMPLEXTYPE #include "ltfat_types.h" #include "gabdual.c" #include "gabtight.c" #undef LTFAT_COMPLEXTYPE ltfat/src/Makefile_crossmingw0000664000175000017500000001337412612404251016273 0ustar susnaksusnak# This makefile cross-compiles the whole LTFAT for Matlab on Windows 32 and 64 bit # # It was tested with M cross environment http://mxe.cc/ # # To cross-compile, one must define paths to Matlab (and other libs) in MATLIBS variable # and a destination directory OUTDIR. The makefile creates a directory structure mirroring # the tree structure of LTFAT i.e. it creates subdirectories mex, thirdparty/Playrec and # thirdparty/PolygonClip # # The MATLIBS dir must contain: # libfftw3-3.dll,libfft3f-3.dll obtainable from http://www.fftw.org/install/windows.html (select correct 32 or 64 bit) # # libmex.dll, libmx.dll libmwblas.dll and libmwlapack.dll from a Windows # Matlab instalation path MATLAB/bin/{arch}, where arch is win64 or win32. # # matrix.h, mex.h, tmwtypes.h from a Windows Matlab installation path # MATLAB/extern/include # # portaudio_x64.dll - I am using a version compiled on Windows, but it should be # possible to cross-compile that too. Change the library name accordingly. # # When cross compiling for 32bin windows, specify EXT=mexw32 in addition to other params. # # !!!!!!!!!!!!!!!!!! NO SPACES IN PATHS !!!!!!!!!!!!!!!!!!!!!!! # # Example 1: Cross compiling for 64 bit # # make -f Makefile_crossmingw CROSS=x86_64-w64-mingw32- MATLIBS=/home/susnak/Dropbox/win64libs OUTDIR=/home/susnak/Dropbox/ltfat_win64 EXT=mexw64 PORTAUDIOLIB=portaudio_x64.dll # # Example 2: Cross compiling for 32 bit # # make -f Makefile_crossmingw CROSS=i686-pc-mingw32- MATLIBS=/home/susnak/Dropbox/win32libs OUTDIR=/home/susnak/Dropbox/ltfat_win32 EXT=mexw32 PORTAUDIOLIB=portaudio_x86.dll # # ifndef MATLIBS MATLIBS=/home/susnak/Dropbox/win64libs endif ifndef OUTDIR OUTDIR=/home/susnak/Dropbox/ltfat_win64 endif ifndef EXT EXT=mexw64 endif ifndef CROSS $(error CROSS variable should be set as a prefix to Mingw tools) endif CC=$(CROSS)gcc LD=$(CROSS)ld AR=$(CROSS)ar MKDIR_P = mkdir -p ifndef PORTAUDIOLIB = portaudio_x64.dll endif include filedefs.mk include ../mex/filedefs.mk include ostools.mk DFILES = $(addprefix d,$(files)) $(files_notypechange) DFILES_BLASLAPACK = $(addprefix d,$(files_blaslapack)) SFILES = $(addprefix s,$(files) ) SFILES_BLASLAPACK = $(addprefix s,$(files_blaslapack)) MEXBASE = $(MEXBASESAFE) $(MEXBASEMORE) MEXS = $(addsuffix .$(EXT),$(MEXBASE)) MEXCOMPFLAGS=-I$(MATLIBS) -DMATLAB_MEX_FILE MEXLINKFLAGS=-static-libgcc -Wl,--dll -L$(MATLIBS) \ -lmex -lmx -lmwlapack -lmwblas CFLAGS=-O2 -s -Wall -Wextra -std=c99 -I./thirdparty/ -I./ -DDLL_EXPORT_SYMBOLS -DNDEBUG all: clean makedirtree backlib $(MEXS) ltfatarghelper polygonclip playrec copyrest clean backlib: CFLAGS=-O2 -s -Wall -Wextra -std=c99 -I./thirdparty/ -I./ -DMATLABFORTRAN -DDLL_EXPORT_SYMBOLS -DNDEBUG backlib: backlib_double backlib_single backlib_double: $(DFILES) $(DFILES_BLASLAPACK) Makefile_crossmingw $(CC) -shared -Wl,--dll -L$(MATLIBS) -lfftw3-3 -lmwlapack -lmwblas $(DFILES) $(DFILES_BLASLAPACK) \ -o $(OUTDIR)/mex/ltfat.dll -static-libgcc -Wl,--out-implib,$(OUTDIR)/lib/libltfat_dll.a backlib_single: $(SFILES) $(SFILES_BLASLAPACK) Makefile_crossmingw $(CC) -shared -Wl,--dll -L$(MATLIBS) -lfftw3-3 -lfftw3f-3 -lmwlapack -lmwblas -L$(OUTDIR)/mex -lltfat $(SFILES) $(SFILES_BLASLAPACK) \ -o $(OUTDIR)/mex/ltfatf.dll -static-libgcc -Wl,--out-implib,$(OUTDIR)/lib/libltfatf_dll.a backlib_noblas: backlib_noblas_double backlib_noblas_single backlib_noblas_double: $(DFILES) Makefile_crossmingw $(CC) -shared -Wl,--dll -L$(MATLIBS) -lfftw3-3 $(DFILES) \ -o $(OUTDIR)/mex/ltfatnoblas.dll -static-libgcc -Wl,--out-implib,$(OUTDIR)/lib/libltfatnoblas_dll.a backlib_noblas_single: $(SFILES) Makefile_crossmingw $(CC) -shared -Wl,--dll -L$(MATLIBS) -lfftw3-3 -lfftw3f-3 -L$(OUTDIR)/mex -lltfatnoblas $(SFILES) \ -o $(OUTDIR)/mex/ltfatfnoblas.dll -static-libgcc -Wl,--out-implib,$(OUTDIR)/lib/libltfatfnoblas_dll.a $(MEXS): CFLAGS=-O2 -shared -s -Wall -std=c99 -I./thirdparty -I./ -fvisibility=hidden -DNDEBUG $(MEXS): %.$(EXT): ../mex/%.c $(CC) $(CFLAGS) $(MEXCOMPFLAGS) $< -o $(OUTDIR)/mex/$@ -L$(OUTDIR)/mex -lfftw3-3 -lfftw3f-3 -lltfat -lltfatf $(MEXLINKFLAGS) polygonclip: CFLAGS=-std=c99 -s -O2 -Wall -shared -DMATLAB_MEX_FILE -DNDEBUG polygonclip: $(CC) $(CFLAGS) -I../thirdparty/PolygonClip -I../thirdparty/GPC -I$(MATLIBS) \ ../thirdparty/PolygonClip/PolygonClip.c ../thirdparty/GPC/gpc.c \ -L$(MATLIBS) -lmex -lmx -static-libgcc \ -o $(OUTDIR)/thirdparty/PolygonClip/PolygonClip.$(EXT) playrec: CFLAGS=-static-libgcc -std=c99 -O2 -Wall -shared -DMATLAB_MEX_FILE -DHAVE_PORTAUDIO -DNDEBUG playrec: $(CC) $(CFLAGS) -I../thirdparty/Playrec -I./thirdparty -I$(MATLIBS) \ ../thirdparty/Playrec/mex_dll_core.c ../thirdparty/Playrec/pa_dll_playrec.c \ ../thirdparty/Playrec/ltfatresample.c \ -L$(MATLIBS) -l:$(PORTAUDIOLIB) -lmex -lmx -static-libgcc \ -o $(OUTDIR)/thirdparty/Playrec/playrec.$(EXT) ltfatarghelper: CFLAGS=-static-libgcc -std=c99 -O2 -Wall -shared -DMATLAB_MEX_FILE -DNDEBUG -I./utils -I../mex ltfatarghelper: $(CC) $(CFLAGS) $(MEXCOMPFLAGS) -o $(OUTDIR)/mex/ltfatarghelper.$(EXT) ../mex/ltfatarghelper.c utils/list.c $(MEXLINKFLAGS) makedirtree: $(MKDIR_P) $(OUTDIR) $(MKDIR_P) $(OUTDIR)/mex $(MKDIR_P) $(OUTDIR)/lib $(MKDIR_P) $(OUTDIR)/thirdparty $(MKDIR_P) $(OUTDIR)/thirdparty/Playrec $(MKDIR_P) $(OUTDIR)/thirdparty/PolygonClip copyrest: $(CP) $(MATLIBS)/libfftw3-3.dll $(OUTDIR)/mex $(CP) $(MATLIBS)/libfftw3f-3.dll $(OUTDIR)/mex $(CP) $(MATLIBS)/$(PORTAUDIOLIB) $(OUTDIR)/thirdparty/Playrec s%.o: %.c $(CC) $(CFLAGS) -DLTFAT_SINGLE -c $< -o s$*.o d%.o: %.c $(CC) $(CFLAGS) -DLTFAT_DOUBLE -c $< -o d$*.o %.o: %.c $(CC) $(CFLAGS) -DLTFAT_DOUBLE -c $< clean: $(RM) ../mex/*.$(EXT) $(RM) *.o $(RM) *.a $(RM) ../thirdparty/Playrec/*.o $(RM) ../thirdparty/PolygonClip/*.o .PHONY: all clean makedirtree copyrest ltfat/src/drivers.c0000664000175000017500000000446512612404251014203 0ustar susnaksusnak#include "config.h" #include "ltfat.h" #include "winmanip.h" /* Compute canonical dual/tight window. This last parameter * indicates the type: 0 = dual, 1 = tight. */ void fircanon_r(const double *g, const ltfatInt Lg, const ltfatInt L, const ltfatInt a, const ltfatInt M, double *gdual, const ltfatInt Ldual, const ltfatInt symm, const ltfatInt wintype) { double *tmp_fir, *tmp_iir; tmp_fir = (double*)ltfat_malloc(Lg*sizeof(double)); tmp_iir = (double*)ltfat_malloc(L*sizeof(double)); /* Move center of window from the middle of the vector to the beginning. */ ifftshift_r(g, Lg, tmp_fir); /* Extend the FIR window to an IIR window. */ fir2iir_r(tmp_fir, Lg, L, tmp_iir); if (wintype==0) { gabdualreal_long(g, L, 1, a, M, tmp_iir); } else { gabtightreal_long(g, L, 1, a, M, tmp_iir); } /* Cut dual IIR window to a FIR window. */ iir2fir_r(tmp_iir, L, Ldual, symm, tmp_fir); /* Move center of window to the middle of the vector. */ fftshift_r(tmp_fir, Ldual, gdual); ltfat_free(gdualf); ltfat_free(gf); ltfat_free(tmp_iir); ltfat_free(tmp_fir); } /* Driver routine to calculate dual of FIR window. This routine * Input: * g : pointer to FIR window * Lg : Length of g * L : Length of system for which g and gdual should be * dual windows. * a : Length of time step (hop size) * M : Number of channels. * gdual : pointer to dual window * Ldual : Length of dual window * symm : Symmetry of input window, see the help for iir2fir * */ void firdual_r(const double *g, const ltfatInt Lg, const ltfatInt L, const ltfatInt a, const ltfatInt M, double *gdual, const ltfatInt Ldual, const ltfatInt symm) { /* The final 0 indicates that we want the dual window.*/ fircanon_r(g, Lg, L, a, M, gdual, Ldual, symm, 0); } /* Driver routine to calculate tight window of FIR window. Same input/output * parameters as firdual_r */ void firtight_r(const double *g, const ltfatInt Lg, const ltfatInt L, const ltfatInt a, const ltfatInt M, double *gdual, const ltfatInt Ldual, const ltfatInt symm) { /* The final 1 indicates that we want the tight window.*/ fircanon_r(g, Lg, L, a, M, gdual, Ldual, symm, 1); } ltfat/src/thirdparty/0000775000175000017500000000000012612404251014542 5ustar susnaksusnakltfat/src/thirdparty/f77-fcn.h0000664000175000017500000001264512612404251016072 0ustar susnaksusnak/* Copyright (C) 1996, 1997 John W. Eaton This file is part of Octave. Octave is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. Octave is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Octave; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #if !defined (octave_f77_fcn_h) #define octave_f77_fcn_h 1 #ifdef __cplusplus extern "C" { #endif /* Hack to stringize macro results. */ #define xSTRINGIZE(x) #x #define STRINGIZE(x) xSTRINGIZE(x) /* How to print an error for the F77_XFCN macro. */ #if !defined (F77_FCN) #define F77_FCN(f, F) F77_FUNC (f, F) #endif #if defined (F77_USES_CRAY_CALLING_CONVENTION) #include /* Use these macros to pass character strings from C to Fortran. */ #define F77_CHAR_ARG(x) octave_make_cray_ftn_ch_dsc (x, strlen (x)) #define F77_CONST_CHAR_ARG(x) \ octave_make_cray_const_ftn_ch_dsc (x, strlen (x)) #define F77_CHAR_ARG2(x, l) octave_make_cray_ftn_ch_dsc (x, l) #define F77_CONST_CHAR_ARG2(x, l) octave_make_cray_const_ftn_ch_dsc (x, l) #define F77_CXX_STRING_ARG(x) \ octave_make_cray_const_ftn_ch_dsc (x.c_str (), x.length ()) #define F77_CHAR_ARG_LEN(l) #define F77_CHAR_ARG_DECL octave_cray_ftn_ch_dsc #define F77_CONST_CHAR_ARG_DECL octave_cray_ftn_ch_dsc #define F77_CHAR_ARG_LEN_DECL /* Use these macros to write C-language functions that accept Fortran-style character strings. */ #define F77_CHAR_ARG_DEF(s, len) octave_cray_ftn_ch_dsc s #define F77_CONST_CHAR_ARG_DEF(s, len) octave_cray_ftn_ch_dsc s #define F77_CHAR_ARG_LEN_DEF(len) #define F77_CHAR_ARG_USE(s) s.ptr #define F77_CHAR_ARG_LEN_USE(s, len) (s.mask.len>>3) #define F77_RET_T int #define F77_RETURN(retval) return retval; /* FIXME -- these should work for SV1 or Y-MP systems but will need to be changed for others. */ typedef union { const char *const_ptr; char *ptr; struct { unsigned off : 6; unsigned len : 26; unsigned add : 32; } mask; } octave_cray_descriptor; typedef void *octave_cray_ftn_ch_dsc; #ifdef __cplusplus #define OCTAVE_F77_FCN_INLINE inline #else #define OCTAVE_F77_FCN_INLINE #endif static OCTAVE_F77_FCN_INLINE octave_cray_ftn_ch_dsc octave_make_cray_ftn_ch_dsc (char *ptr_arg, unsigned long len_arg) { octave_cray_descriptor desc; desc.ptr = ptr_arg; desc.mask.len = len_arg << 3; return *((octave_cray_ftn_ch_dsc *) &desc); } static OCTAVE_F77_FCN_INLINE octave_cray_ftn_ch_dsc octave_make_cray_const_ftn_ch_dsc (const char *ptr_arg, unsigned long len_arg) { octave_cray_descriptor desc; desc.const_ptr = ptr_arg; desc.mask.len = len_arg << 3; return *((octave_cray_ftn_ch_dsc *) &desc); } #ifdef __cplusplus #undef OCTAVE_F77_FCN_INLINE #endif #elif defined (F77_USES_VISUAL_FORTRAN_CALLING_CONVENTION) /* Use these macros to pass character strings from C to Fortran. */ #define F77_CHAR_ARG(x) x, strlen (x) #define F77_CONST_CHAR_ARG(x) F77_CHAR_ARG (x) #define F77_CHAR_ARG2(x, l) x, l #define F77_CONST_CHAR_ARG2(x, l) F77_CHAR_ARG2 (x, l) #define F77_CXX_STRING_ARG(x) F77_CONST_CHAR_ARG2 (x.c_str (), x.length ()) #define F77_CHAR_ARG_LEN(l) #define F77_CHAR_ARG_DECL char *, int #define F77_CONST_CHAR_ARG_DECL const char *, int #define F77_CHAR_ARG_LEN_DECL /* Use these macros to write C-language functions that accept Fortran-style character strings. */ #define F77_CHAR_ARG_DEF(s, len) char *s, int len #define F77_CONST_CHAR_ARG_DEF(s, len) const char *s, int len #define F77_CHAR_ARG_LEN_DEF(len) #define F77_CHAR_ARG_USE(s) s #define F77_CHAR_ARG_LEN_USE(s, len) len #define F77_RET_T void #define F77_RETURN(retval) #else /* Assume f2c-compatible calling convention. */ /* Use these macros to pass character strings from C to Fortran. */ #define F77_CHAR_ARG(x) x #define F77_CONST_CHAR_ARG(x) F77_CHAR_ARG (x) #define F77_CHAR_ARG2(x, l) x #define F77_CONST_CHAR_ARG2(x, l) F77_CHAR_ARG2 (x, l) #define F77_CXX_STRING_ARG(x) F77_CONST_CHAR_ARG2 (x.c_str (), x.length ()) #define F77_CHAR_ARG_LEN(l) , l #define F77_CHAR_ARG_DECL char * #define F77_CONST_CHAR_ARG_DECL const char * #define F77_CHAR_ARG_LEN_DECL , long /* Use these macros to write C-language functions that accept Fortran-style character strings. */ #define F77_CHAR_ARG_DEF(s, len) char *s #define F77_CONST_CHAR_ARG_DEF(s, len) const char *s #define F77_CHAR_ARG_LEN_DEF(len) , long len #define F77_CHAR_ARG_USE(s) s #define F77_CHAR_ARG_LEN_USE(s, len) len #define F77_RET_T int #define F77_RETURN(retval) return retval; #endif /* Build a C string local variable CS from the Fortran string parameter S declared as F77_CHAR_ARG_DEF(s, len) or F77_CONST_CHAR_ARG_DEF(s, len). The string will be cleaned up at the end of the current block. Needs to include and . */ #define F77_CSTRING(s, len, cs) \ OCTAVE_LOCAL_BUFFER (char, cs, F77_CHAR_ARG_LEN_USE (s, len) + 1); \ memcpy (cs, F77_CHAR_ARG_USE (s), F77_CHAR_ARG_LEN_USE (s, len)); \ cs[F77_CHAR_ARG_LEN_USE(s, len)] = '\0' #ifdef __cplusplus } #endif #endif /* ;;; Local Variables: *** ;;; mode: C++ *** ;;; End: *** */ ltfat/src/thirdparty/cblas.h0000664000175000017500000010214712612404251016004 0ustar susnaksusnak#ifndef CBLAS_H #ifndef CBLAS_ENUM_DEFINED_H #define CBLAS_ENUM_DEFINED_H enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102 }; enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113, AtlasConj=114}; enum CBLAS_UPLO {CblasUpper=121, CblasLower=122}; enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132}; enum CBLAS_SIDE {CblasLeft=141, CblasRight=142}; #endif #ifndef CBLAS_ENUM_ONLY #define CBLAS_H #define CBLAS_INDEX int int cblas_errprn(int ierr, int info, char *form, ...); /* * =========================================================================== * Prototypes for level 1 BLAS functions (complex are recast as routines) * =========================================================================== */ float cblas_sdsdot(const int N, const float alpha, const float *X, const int incX, const float *Y, const int incY); double cblas_dsdot(const int N, const float *X, const int incX, const float *Y, const int incY); float cblas_sdot(const int N, const float *X, const int incX, const float *Y, const int incY); double cblas_ddot(const int N, const double *X, const int incX, const double *Y, const int incY); /* * Functions having prefixes Z and C only */ void cblas_cdotu_sub(const int N, const void *X, const int incX, const void *Y, const int incY, void *dotu); void cblas_cdotc_sub(const int N, const void *X, const int incX, const void *Y, const int incY, void *dotc); void cblas_zdotu_sub(const int N, const void *X, const int incX, const void *Y, const int incY, void *dotu); void cblas_zdotc_sub(const int N, const void *X, const int incX, const void *Y, const int incY, void *dotc); /* * Functions having prefixes S D SC DZ */ float cblas_snrm2(const int N, const float *X, const int incX); float cblas_sasum(const int N, const float *X, const int incX); double cblas_dnrm2(const int N, const double *X, const int incX); double cblas_dasum(const int N, const double *X, const int incX); float cblas_scnrm2(const int N, const void *X, const int incX); float cblas_scasum(const int N, const void *X, const int incX); double cblas_dznrm2(const int N, const void *X, const int incX); double cblas_dzasum(const int N, const void *X, const int incX); /* * Functions having standard 4 prefixes (S D C Z) */ CBLAS_INDEX cblas_isamax(const int N, const float *X, const int incX); CBLAS_INDEX cblas_idamax(const int N, const double *X, const int incX); CBLAS_INDEX cblas_icamax(const int N, const void *X, const int incX); CBLAS_INDEX cblas_izamax(const int N, const void *X, const int incX); /* * =========================================================================== * Prototypes for level 1 BLAS routines * =========================================================================== */ /* * Routines with standard 4 prefixes (s, d, c, z) */ void cblas_sswap(const int N, float *X, const int incX, float *Y, const int incY); void cblas_scopy(const int N, const float *X, const int incX, float *Y, const int incY); void cblas_saxpy(const int N, const float alpha, const float *X, const int incX, float *Y, const int incY); void catlas_saxpby(const int N, const float alpha, const float *X, const int incX, const float beta, float *Y, const int incY); void catlas_sset (const int N, const float alpha, float *X, const int incX); void cblas_dswap(const int N, double *X, const int incX, double *Y, const int incY); void cblas_dcopy(const int N, const double *X, const int incX, double *Y, const int incY); void cblas_daxpy(const int N, const double alpha, const double *X, const int incX, double *Y, const int incY); void catlas_daxpby(const int N, const double alpha, const double *X, const int incX, const double beta, double *Y, const int incY); void catlas_dset (const int N, const double alpha, double *X, const int incX); void cblas_cswap(const int N, void *X, const int incX, void *Y, const int incY); void cblas_ccopy(const int N, const void *X, const int incX, void *Y, const int incY); void cblas_caxpy(const int N, const void *alpha, const void *X, const int incX, void *Y, const int incY); void catlas_caxpby(const int N, const void *alpha, const void *X, const int incX, const void *beta, void *Y, const int incY); void catlas_cset (const int N, const void *alpha, void *X, const int incX); void cblas_zswap(const int N, void *X, const int incX, void *Y, const int incY); void cblas_zcopy(const int N, const void *X, const int incX, void *Y, const int incY); void cblas_zaxpy(const int N, const void *alpha, const void *X, const int incX, void *Y, const int incY); void catlas_zaxpby(const int N, const void *alpha, const void *X, const int incX, const void *beta, void *Y, const int incY); void catlas_zset (const int N, const void *alpha, void *X, const int incX); /* * Routines with S and D prefix only */ void cblas_srotg(float *a, float *b, float *c, float *s); void cblas_srotmg(float *d1, float *d2, float *b1, const float b2, float *P); void cblas_srot(const int N, float *X, const int incX, float *Y, const int incY, const float c, const float s); void cblas_srotm(const int N, float *X, const int incX, float *Y, const int incY, const float *P); void cblas_drotg(double *a, double *b, double *c, double *s); void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P); void cblas_drot(const int N, double *X, const int incX, double *Y, const int incY, const double c, const double s); void cblas_drotm(const int N, double *X, const int incX, double *Y, const int incY, const double *P); /* * Routines with S D C Z CS and ZD prefixes */ void cblas_sscal(const int N, const float alpha, float *X, const int incX); void cblas_dscal(const int N, const double alpha, double *X, const int incX); void cblas_cscal(const int N, const void *alpha, void *X, const int incX); void cblas_zscal(const int N, const void *alpha, void *X, const int incX); void cblas_csscal(const int N, const float alpha, void *X, const int incX); void cblas_zdscal(const int N, const double alpha, void *X, const int incX); /* * Extra reference routines provided by ATLAS, but not mandated by the standard */ void cblas_crotg(void *a, void *b, void *c, void *s); void cblas_zrotg(void *a, void *b, void *c, void *s); void cblas_csrot(const int N, void *X, const int incX, void *Y, const int incY, const float c, const float s); void cblas_zdrot(const int N, void *X, const int incX, void *Y, const int incY, const double c, const double s); /* * =========================================================================== * Prototypes for level 2 BLAS * =========================================================================== */ /* * Routines with standard 4 prefixes (S, D, C, Z) */ void cblas_sgemv(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY); void cblas_sgbmv(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int KL, const int KU, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY); void cblas_strmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const float *A, const int lda, float *X, const int incX); void cblas_stbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const float *A, const int lda, float *X, const int incX); void cblas_stpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const float *Ap, float *X, const int incX); void cblas_strsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const float *A, const int lda, float *X, const int incX); void cblas_stbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const float *A, const int lda, float *X, const int incX); void cblas_stpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const float *Ap, float *X, const int incX); void cblas_dgemv(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY); void cblas_dgbmv(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int KL, const int KU, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY); void cblas_dtrmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const double *A, const int lda, double *X, const int incX); void cblas_dtbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const double *A, const int lda, double *X, const int incX); void cblas_dtpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const double *Ap, double *X, const int incX); void cblas_dtrsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const double *A, const int lda, double *X, const int incX); void cblas_dtbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const double *A, const int lda, double *X, const int incX); void cblas_dtpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const double *Ap, double *X, const int incX); void cblas_cgemv(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_cgbmv(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int KL, const int KU, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_ctrmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *A, const int lda, void *X, const int incX); void cblas_ctbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const void *A, const int lda, void *X, const int incX); void cblas_ctpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *Ap, void *X, const int incX); void cblas_ctrsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *A, const int lda, void *X, const int incX); void cblas_ctbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const void *A, const int lda, void *X, const int incX); void cblas_ctpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *Ap, void *X, const int incX); void cblas_zgemv(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_zgbmv(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int KL, const int KU, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_ztrmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *A, const int lda, void *X, const int incX); void cblas_ztbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const void *A, const int lda, void *X, const int incX); void cblas_ztpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *Ap, void *X, const int incX); void cblas_ztrsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *A, const int lda, void *X, const int incX); void cblas_ztbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const int K, const void *A, const int lda, void *X, const int incX); void cblas_ztpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int N, const void *Ap, void *X, const int incX); /* * Routines with S and D prefixes only */ void cblas_ssymv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY); void cblas_ssbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const int K, const float alpha, const float *A, const int lda, const float *X, const int incX, const float beta, float *Y, const int incY); void cblas_sspmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *Ap, const float *X, const int incX, const float beta, float *Y, const int incY); void cblas_sger(const enum CBLAS_ORDER Order, const int M, const int N, const float alpha, const float *X, const int incX, const float *Y, const int incY, float *A, const int lda); void cblas_ssyr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *X, const int incX, float *A, const int lda); void cblas_sspr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *X, const int incX, float *Ap); void cblas_ssyr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *X, const int incX, const float *Y, const int incY, float *A, const int lda); void cblas_sspr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const float *X, const int incX, const float *Y, const int incY, float *A); void cblas_dsymv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY); void cblas_dsbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const int K, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY); void cblas_dspmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *Ap, const double *X, const int incX, const double beta, double *Y, const int incY); void cblas_dger(const enum CBLAS_ORDER Order, const int M, const int N, const double alpha, const double *X, const int incX, const double *Y, const int incY, double *A, const int lda); void cblas_dsyr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *X, const int incX, double *A, const int lda); void cblas_dspr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *X, const int incX, double *Ap); void cblas_dsyr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *X, const int incX, const double *Y, const int incY, double *A, const int lda); void cblas_dspr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const double *X, const int incX, const double *Y, const int incY, double *A); /* * Routines with C and Z prefixes only */ void cblas_chemv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_chbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const int K, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_chpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *Ap, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_cgeru(const enum CBLAS_ORDER Order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda); void cblas_cgerc(const enum CBLAS_ORDER Order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda); void cblas_cher(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const void *X, const int incX, void *A, const int lda); void cblas_chpr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const float alpha, const void *X, const int incX, void *A); void cblas_cher2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda); void cblas_chpr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *Ap); void cblas_zhemv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_zhbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const int K, const void *alpha, const void *A, const int lda, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_zhpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *Ap, const void *X, const int incX, const void *beta, void *Y, const int incY); void cblas_zgeru(const enum CBLAS_ORDER Order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda); void cblas_zgerc(const enum CBLAS_ORDER Order, const int M, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda); void cblas_zher(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const void *X, const int incX, void *A, const int lda); void cblas_zhpr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const double alpha, const void *X, const int incX, void *A); void cblas_zher2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *A, const int lda); void cblas_zhpr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, const void *alpha, const void *X, const int incX, const void *Y, const int incY, void *Ap); /* * =========================================================================== * Prototypes for level 3 BLAS * =========================================================================== */ /* * Routines with standard 4 prefixes (S, D, C, Z) */ void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc); void cblas_ssymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc); void cblas_ssyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const float alpha, const float *A, const int lda, const float beta, float *C, const int ldc); void cblas_ssyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc); void cblas_strmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const float alpha, const float *A, const int lda, float *B, const int ldb); void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const float alpha, const float *A, const int lda, float *B, const int ldb); void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc); void cblas_dsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc); void cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const double alpha, const double *A, const int lda, const double beta, double *C, const int ldc); void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc); void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const double alpha, const double *A, const int lda, double *B, const int ldb); void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const double alpha, const double *A, const int lda, double *B, const int ldb); void cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_csymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_csyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *beta, void *C, const int ldc); void cblas_csyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_ctrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const void *alpha, const void *A, const int lda, void *B, const int ldb); void cblas_ctrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const void *alpha, const void *A, const int lda, void *B, const int ldb); void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_zsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_zsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *beta, void *C, const int ldc); void cblas_zsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_ztrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const void *alpha, const void *A, const int lda, void *B, const int ldb); void cblas_ztrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const void *alpha, const void *A, const int lda, void *B, const int ldb); /* * Routines with prefixes C and Z only */ void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_cherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const float alpha, const void *A, const int lda, const float beta, void *C, const int ldc); void cblas_cher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const float beta, void *C, const int ldc); void cblas_zhemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const int M, const int N, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const void *beta, void *C, const int ldc); void cblas_zherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const double alpha, const void *A, const int lda, const double beta, void *C, const int ldc); void cblas_zher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const void *alpha, const void *A, const int lda, const void *B, const int ldb, const double beta, void *C, const int ldc); int cblas_errprn(int ierr, int info, char *form, ...); #endif /* end #ifdef CBLAS_ENUM_ONLY */ #endif ltfat/src/thirdparty/portaudio.h0000664000175000017500000013141112612404251016722 0ustar susnaksusnak#ifndef PORTAUDIO_H #define PORTAUDIO_H /* * $Id: portaudio.h 1745 2011-08-25 17:44:01Z rossb $ * PortAudio Portable Real-Time Audio Library * PortAudio API Header File * Latest version available at: http://www.portaudio.com/ * * Copyright (c) 1999-2002 Ross Bencina and Phil Burk * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files * (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* * The text above constitutes the entire PortAudio license; however, * the PortAudio community also makes the following non-binding requests: * * Any person wishing to distribute modifications to the Software is * requested to send the modifications to the original developer so that * they can be incorporated into the canonical version. It is also * requested that these non-binding requests be included along with the * license above. */ /** @file @ingroup public_header @brief The portable PortAudio API. */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** Retrieve the release number of the currently running PortAudio build, eg 1900. */ int Pa_GetVersion( void ); /** Retrieve a textual description of the current PortAudio build, eg "PortAudio V19-devel 13 October 2002". */ const char* Pa_GetVersionText( void ); /** Error codes returned by PortAudio functions. Note that with the exception of paNoError, all PaErrorCodes are negative. */ typedef int PaError; typedef enum PaErrorCode { paNoError = 0, paNotInitialized = -10000, paUnanticipatedHostError, paInvalidChannelCount, paInvalidSampleRate, paInvalidDevice, paInvalidFlag, paSampleFormatNotSupported, paBadIODeviceCombination, paInsufficientMemory, paBufferTooBig, paBufferTooSmall, paNullCallback, paBadStreamPtr, paTimedOut, paInternalError, paDeviceUnavailable, paIncompatibleHostApiSpecificStreamInfo, paStreamIsStopped, paStreamIsNotStopped, paInputOverflowed, paOutputUnderflowed, paHostApiNotFound, paInvalidHostApi, paCanNotReadFromACallbackStream, paCanNotWriteToACallbackStream, paCanNotReadFromAnOutputOnlyStream, paCanNotWriteToAnInputOnlyStream, paIncompatibleStreamHostApi, paBadBufferPtr } PaErrorCode; /** Translate the supplied PortAudio error code into a human readable message. */ const char *Pa_GetErrorText( PaError errorCode ); /** Library initialization function - call this before using PortAudio. This function initializes internal data structures and prepares underlying host APIs for use. With the exception of Pa_GetVersion(), Pa_GetVersionText(), and Pa_GetErrorText(), this function MUST be called before using any other PortAudio API functions. If Pa_Initialize() is called multiple times, each successful call must be matched with a corresponding call to Pa_Terminate(). Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not required to be fully nested. Note that if Pa_Initialize() returns an error code, Pa_Terminate() should NOT be called. @return paNoError if successful, otherwise an error code indicating the cause of failure. @see Pa_Terminate */ PaError Pa_Initialize( void ); /** Library termination function - call this when finished using PortAudio. This function deallocates all resources allocated by PortAudio since it was initialized by a call to Pa_Initialize(). In cases where Pa_Initialise() has been called multiple times, each call must be matched with a corresponding call to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically close any PortAudio streams that are still open. Pa_Terminate() MUST be called before exiting a program which uses PortAudio. Failure to do so may result in serious resource leaks, such as audio devices not being available until the next reboot. @return paNoError if successful, otherwise an error code indicating the cause of failure. @see Pa_Initialize */ PaError Pa_Terminate( void ); /** The type used to refer to audio devices. Values of this type usually range from 0 to (Pa_GetDeviceCount()-1), and may also take on the PaNoDevice and paUseHostApiSpecificDeviceSpecification values. @see Pa_GetDeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification */ typedef int PaDeviceIndex; /** A special PaDeviceIndex value indicating that no device is available, or should be used. @see PaDeviceIndex */ #define paNoDevice ((PaDeviceIndex)-1) /** A special PaDeviceIndex value indicating that the device(s) to be used are specified in the host api specific stream info structure. @see PaDeviceIndex */ #define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2) /* Host API enumeration mechanism */ /** The type used to enumerate to host APIs at runtime. Values of this type range from 0 to (Pa_GetHostApiCount()-1). @see Pa_GetHostApiCount */ typedef int PaHostApiIndex; /** Retrieve the number of available host APIs. Even if a host API is available it may have no devices available. @return A non-negative value indicating the number of available host APIs or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. @see PaHostApiIndex */ PaHostApiIndex Pa_GetHostApiCount( void ); /** Retrieve the index of the default host API. The default host API will be the lowest common denominator host API on the current platform and is unlikely to provide the best performance. @return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1) indicating the default host API index or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. */ PaHostApiIndex Pa_GetDefaultHostApi( void ); /** Unchanging unique identifiers for each supported host API. This type is used in the PaHostApiInfo structure. The values are guaranteed to be unique and to never change, thus allowing code to be written that conditionally uses host API specific extensions. New type ids will be allocated when support for a host API reaches "public alpha" status, prior to that developers should use the paInDevelopment type id. @see PaHostApiInfo */ typedef enum PaHostApiTypeId { paInDevelopment=0, /* use while developing support for a new host API */ paDirectSound=1, paMME=2, paASIO=3, paSoundManager=4, paCoreAudio=5, paOSS=7, paALSA=8, paAL=9, paBeOS=10, paWDMKS=11, paJACK=12, paWASAPI=13, paAudioScienceHPI=14 } PaHostApiTypeId; /** A structure containing information about a particular host API. */ typedef struct PaHostApiInfo { /** this is struct version 1 */ int structVersion; /** The well known unique identifier of this host API @see PaHostApiTypeId */ PaHostApiTypeId type; /** A textual description of the host API for display on user interfaces. */ const char *name; /** The number of devices belonging to this host API. This field may be used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate all devices for this host API. @see Pa_HostApiDeviceIndexToDeviceIndex */ int deviceCount; /** The default input device for this host API. The value will be a device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice if no default input device is available. */ PaDeviceIndex defaultInputDevice; /** The default output device for this host API. The value will be a device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice if no default output device is available. */ PaDeviceIndex defaultOutputDevice; } PaHostApiInfo; /** Retrieve a pointer to a structure containing information about a specific host Api. @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) @return A pointer to an immutable PaHostApiInfo structure describing a specific host API. If the hostApi parameter is out of range or an error is encountered, the function returns NULL. The returned structure is owned by the PortAudio implementation and must not be manipulated or freed. The pointer is only guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate(). */ const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi ); /** Convert a static host API unique identifier, into a runtime host API index. @param type A unique host API identifier belonging to the PaHostApiTypeId enumeration. @return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. The paHostApiNotFound error code indicates that the host API specified by the type parameter is not available. @see PaHostApiTypeId */ PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type ); /** Convert a host-API-specific device index to standard PortAudio device index. This function may be used in conjunction with the deviceCount field of PaHostApiInfo to enumerate all devices for the specified host API. @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1) @param hostApiDeviceIndex A valid per-host device index in the range 0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1) @return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1) or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. A paInvalidHostApi error code indicates that the host API index specified by the hostApi parameter is out of range. A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter is out of range. @see PaHostApiInfo */ PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi, int hostApiDeviceIndex ); /** Structure used to return information about a host error condition. */ typedef struct PaHostErrorInfo{ PaHostApiTypeId hostApiType; /**< the host API which returned the error code */ long errorCode; /**< the error code returned */ const char *errorText; /**< a textual description of the error if available, otherwise a zero-length string */ }PaHostErrorInfo; /** Return information about the last host error encountered. The error information returned by Pa_GetLastHostErrorInfo() will never be modified asynchronously by errors occurring in other PortAudio owned threads (such as the thread that manages the stream callback.) This function is provided as a last resort, primarily to enhance debugging by providing clients with access to all available error information. @return A pointer to an immutable structure constraining information about the host error. The values in this structure will only be valid if a PortAudio function has previously returned the paUnanticipatedHostError error code. */ const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void ); /* Device enumeration and capabilities */ /** Retrieve the number of available devices. The number of available devices may be zero. @return A non-negative value indicating the number of available devices or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. */ PaDeviceIndex Pa_GetDeviceCount( void ); /** Retrieve the index of the default input device. The result can be used in the inputDevice parameter to Pa_OpenStream(). @return The default input device index for the default host API, or paNoDevice if no default input device is available or an error was encountered. */ PaDeviceIndex Pa_GetDefaultInputDevice( void ); /** Retrieve the index of the default output device. The result can be used in the outputDevice parameter to Pa_OpenStream(). @return The default output device index for the default host API, or paNoDevice if no default output device is available or an error was encountered. @note On the PC, the user can specify a default device by setting an environment variable. For example, to use device #1.
 set PA_RECOMMENDED_OUTPUT_DEVICE=1
The user should first determine the available device ids by using the supplied application "pa_devs". */ PaDeviceIndex Pa_GetDefaultOutputDevice( void ); /** The type used to represent monotonic time in seconds. PaTime is used for the fields of the PaStreamCallbackTimeInfo argument to the PaStreamCallback and as the result of Pa_GetStreamTime(). PaTime values have unspecified origin. @see PaStreamCallback, PaStreamCallbackTimeInfo, Pa_GetStreamTime */ typedef double PaTime; /** A type used to specify one or more sample formats. Each value indicates a possible format for sound data passed to and from the stream callback, Pa_ReadStream and Pa_WriteStream. The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8 and aUInt8 are usually implemented by all implementations. The floating point representation (paFloat32) uses +1.0 and -1.0 as the maximum and minimum respectively. paUInt8 is an unsigned 8 bit format where 128 is considered "ground" The paNonInterleaved flag indicates that audio data is passed as an array of pointers to separate buffers, one buffer for each channel. Usually, when this flag is not used, audio data is passed as a single buffer with all channels interleaved. @see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo @see paFloat32, paInt16, paInt32, paInt24, paInt8 @see paUInt8, paCustomFormat, paNonInterleaved */ typedef unsigned long PaSampleFormat; #define paFloat32 ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */ #define paInt32 ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */ #define paInt24 ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */ #define paInt16 ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */ #define paInt8 ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */ #define paUInt8 ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */ #define paCustomFormat ((PaSampleFormat) 0x00010000) /**< @see PaSampleFormat */ #define paNonInterleaved ((PaSampleFormat) 0x80000000) /**< @see PaSampleFormat */ /** A structure providing information and capabilities of PortAudio devices. Devices may support input, output or both input and output. */ typedef struct PaDeviceInfo { int structVersion; /* this is struct version 2 */ const char *name; PaHostApiIndex hostApi; /**< note this is a host API index, not a type id*/ int maxInputChannels; int maxOutputChannels; /** Default latency values for interactive performance. */ PaTime defaultLowInputLatency; PaTime defaultLowOutputLatency; /** Default latency values for robust non-interactive applications (eg. playing sound files). */ PaTime defaultHighInputLatency; PaTime defaultHighOutputLatency; double defaultSampleRate; } PaDeviceInfo; /** Retrieve a pointer to a PaDeviceInfo structure containing information about the specified device. @return A pointer to an immutable PaDeviceInfo structure. If the device parameter is out of range the function returns NULL. @param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1) @note PortAudio manages the memory referenced by the returned pointer, the client must not manipulate or free the memory. The pointer is only guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate(). @see PaDeviceInfo, PaDeviceIndex */ const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device ); /** Parameters for one direction (input or output) of a stream. */ typedef struct PaStreamParameters { /** A valid device index in the range 0 to (Pa_GetDeviceCount()-1) specifying the device to be used or the special constant paUseHostApiSpecificDeviceSpecification which indicates that the actual device(s) to use are specified in hostApiSpecificStreamInfo. This field must not be set to paNoDevice. */ PaDeviceIndex device; /** The number of channels of sound to be delivered to the stream callback or accessed by Pa_ReadStream() or Pa_WriteStream(). It can range from 1 to the value of maxInputChannels in the PaDeviceInfo record for the device specified by the device parameter. */ int channelCount; /** The sample format of the buffer provided to the stream callback, a_ReadStream() or Pa_WriteStream(). It may be any of the formats described by the PaSampleFormat enumeration. */ PaSampleFormat sampleFormat; /** The desired latency in seconds. Where practical, implementations should configure their latency based on these parameters, otherwise they may choose the closest viable latency instead. Unless the suggested latency is greater than the absolute upper limit for the device implementations should round the suggestedLatency up to the next practical value - ie to provide an equal or higher latency than suggestedLatency wherever possible. Actual latency values for an open stream may be retrieved using the inputLatency and outputLatency fields of the PaStreamInfo structure returned by Pa_GetStreamInfo(). @see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo */ PaTime suggestedLatency; /** An optional pointer to a host api specific data structure containing additional information for device setup and/or stream processing. hostApiSpecificStreamInfo is never required for correct operation, if not used it should be set to NULL. */ void *hostApiSpecificStreamInfo; } PaStreamParameters; /** Return code for Pa_IsFormatSupported indicating success. */ #define paFormatIsSupported (0) /** Determine whether it would be possible to open a stream with the specified parameters. @param inputParameters A structure that describes the input parameters used to open a stream. The suggestedLatency field is ignored. See PaStreamParameters for a description of these parameters. inputParameters must be NULL for output-only streams. @param outputParameters A structure that describes the output parameters used to open a stream. The suggestedLatency field is ignored. See PaStreamParameters for a description of these parameters. outputParameters must be NULL for input-only streams. @param sampleRate The required sampleRate. For full-duplex streams it is the sample rate for both input and output @return Returns 0 if the format is supported, and an error code indicating why the format is not supported otherwise. The constant paFormatIsSupported is provided to compare with the return value for success. @see paFormatIsSupported, PaStreamParameters */ PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, double sampleRate ); /* Streaming types and functions */ /** A single PaStream can provide multiple channels of real-time streaming audio input and output to a client application. A stream provides access to audio hardware represented by one or more PaDevices. Depending on the underlying Host API, it may be possible to open multiple streams using the same device, however this behavior is implementation defined. Portable applications should assume that a PaDevice may be simultaneously used by at most one PaStream. Pointers to PaStream objects are passed between PortAudio functions that operate on streams. @see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream, Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive, Pa_GetStreamTime, Pa_GetStreamCpuLoad */ typedef void PaStream; /** Can be passed as the framesPerBuffer parameter to Pa_OpenStream() or Pa_OpenDefaultStream() to indicate that the stream callback will accept buffers of any size. */ #define paFramesPerBufferUnspecified (0) /** Flags used to control the behavior of a stream. They are passed as parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be ORed together. @see Pa_OpenStream, Pa_OpenDefaultStream @see paNoFlag, paClipOff, paDitherOff, paNeverDropInput, paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags */ typedef unsigned long PaStreamFlags; /** @see PaStreamFlags */ #define paNoFlag ((PaStreamFlags) 0) /** Disable default clipping of out of range samples. @see PaStreamFlags */ #define paClipOff ((PaStreamFlags) 0x00000001) /** Disable default dithering. @see PaStreamFlags */ #define paDitherOff ((PaStreamFlags) 0x00000002) /** Flag requests that where possible a full duplex stream will not discard overflowed input samples without calling the stream callback. This flag is only valid for full duplex callback streams and only when used in combination with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using this flag incorrectly results in a paInvalidFlag error being returned from Pa_OpenStream and Pa_OpenDefaultStream. @see PaStreamFlags, paFramesPerBufferUnspecified */ #define paNeverDropInput ((PaStreamFlags) 0x00000004) /** Call the stream callback to fill initial output buffers, rather than the default behavior of priming the buffers with zeros (silence). This flag has no effect for input-only and blocking read/write streams. @see PaStreamFlags */ #define paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008) /** A mask specifying the platform specific bits. @see PaStreamFlags */ #define paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000) /** Timing information for the buffers passed to the stream callback. Time values are expressed in seconds and are synchronised with the time base used by Pa_GetStreamTime() for the associated stream. @see PaStreamCallback, Pa_GetStreamTime */ typedef struct PaStreamCallbackTimeInfo{ PaTime inputBufferAdcTime; /**< The time when the first sample of the input buffer was captured at the ADC input */ PaTime currentTime; /**< The time when the stream callback was invoked */ PaTime outputBufferDacTime; /**< The time when the first sample of the output buffer will output the DAC */ } PaStreamCallbackTimeInfo; /** Flag bit constants for the statusFlags to PaStreamCallback. @see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow, paPrimingOutput */ typedef unsigned long PaStreamCallbackFlags; /** In a stream opened with paFramesPerBufferUnspecified, indicates that input data is all silence (zeros) because no real data is available. In a stream opened without paFramesPerBufferUnspecified, it indicates that one or more zero samples have been inserted into the input buffer to compensate for an input underflow. @see PaStreamCallbackFlags */ #define paInputUnderflow ((PaStreamCallbackFlags) 0x00000001) /** In a stream opened with paFramesPerBufferUnspecified, indicates that data prior to the first sample of the input buffer was discarded due to an overflow, possibly because the stream callback is using too much CPU time. Otherwise indicates that data prior to one or more samples in the input buffer was discarded. @see PaStreamCallbackFlags */ #define paInputOverflow ((PaStreamCallbackFlags) 0x00000002) /** Indicates that output data (or a gap) was inserted, possibly because the stream callback is using too much CPU time. @see PaStreamCallbackFlags */ #define paOutputUnderflow ((PaStreamCallbackFlags) 0x00000004) /** Indicates that output data will be discarded because no room is available. @see PaStreamCallbackFlags */ #define paOutputOverflow ((PaStreamCallbackFlags) 0x00000008) /** Some of all of the output data will be used to prime the stream, input data may be zero. @see PaStreamCallbackFlags */ #define paPrimingOutput ((PaStreamCallbackFlags) 0x00000010) /** Allowable return values for the PaStreamCallback. @see PaStreamCallback */ typedef enum PaStreamCallbackResult { paContinue=0, /**< Signal that the stream should continue invoking the callback and processing audio. */ paComplete=1, /**< Signal that the stream should stop invoking the callback and finish once all output samples have played. */ paAbort=2 /**< Signal that the stream should stop invoking the callback and finish as soon as possible. */ } PaStreamCallbackResult; /** Functions of type PaStreamCallback are implemented by PortAudio clients. They consume, process or generate audio in response to requests from an active PortAudio stream. When a stream is running, PortAudio calls the stream callback periodically. The callback function is responsible for processing buffers of audio samples passed via the input and output parameters. The PortAudio stream callback runs at very high or real-time priority. It is required to consistently meet its time deadlines. Do not allocate memory, access the file system, call library functions or call other functions from the stream callback that may block or take an unpredictable amount of time to complete. In order for a stream to maintain glitch-free operation the callback must consume and return audio data faster than it is recorded and/or played. PortAudio anticipates that each callback invocation may execute for a duration approaching the duration of frameCount audio frames at the stream sample rate. It is reasonable to expect to be able to utilise 70% or more of the available CPU time in the PortAudio callback. However, due to buffer size adaption and other factors, not all host APIs are able to guarantee audio stability under heavy CPU load with arbitrary fixed callback buffer sizes. When high callback CPU utilisation is required the most robust behavior can be achieved by using paFramesPerBufferUnspecified as the Pa_OpenStream() framesPerBuffer parameter. @param input and @param output are either arrays of interleaved samples or; if non-interleaved samples were requested using the paNonInterleaved sample format flag, an array of buffer pointers, one non-interleaved buffer for each channel. The format, packing and number of channels used by the buffers are determined by parameters to Pa_OpenStream(). @param frameCount The number of sample frames to be processed by the stream callback. @param timeInfo Timestamps indicating the ADC capture time of the first sample in the input buffer, the DAC output time of the first sample in the output buffer and the time the callback was invoked. See PaStreamCallbackTimeInfo and Pa_GetStreamTime() @param statusFlags Flags indicating whether input and/or output buffers have been inserted or will be dropped to overcome underflow or overflow conditions. @param userData The value of a user supplied pointer passed to Pa_OpenStream() intended for storing synthesis data etc. @return The stream callback should return one of the values in the ::PaStreamCallbackResult enumeration. To ensure that the callback continues to be called, it should return paContinue (0). Either paComplete or paAbort can be returned to finish stream processing, after either of these values is returned the callback will not be called again. If paAbort is returned the stream will finish as soon as possible. If paComplete is returned, the stream will continue until all buffers generated by the callback have been played. This may be useful in applications such as soundfile players where a specific duration of output is required. However, it is not necessary to utilize this mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also be used to stop the stream. The callback must always fill the entire output buffer irrespective of its return value. @see Pa_OpenStream, Pa_OpenDefaultStream @note With the exception of Pa_GetStreamCpuLoad() it is not permissible to call PortAudio API functions from within the stream callback. */ typedef int PaStreamCallback( const void *input, void *output, unsigned long frameCount, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void *userData ); /** Opens a stream for either input, output or both. @param stream The address of a PaStream pointer which will receive a pointer to the newly opened stream. @param inputParameters A structure that describes the input parameters used by the opened stream. See PaStreamParameters for a description of these parameters. inputParameters must be NULL for output-only streams. @param outputParameters A structure that describes the output parameters used by the opened stream. See PaStreamParameters for a description of these parameters. outputParameters must be NULL for input-only streams. @param sampleRate The desired sampleRate. For full-duplex streams it is the sample rate for both input and output @param framesPerBuffer The number of frames passed to the stream callback function, or the preferred block granularity for a blocking read/write stream. The special value paFramesPerBufferUnspecified (0) may be used to request that the stream callback will receive an optimal (and possibly varying) number of frames based on host requirements and the requested latency settings. Note: With some host APIs, the use of non-zero framesPerBuffer for a callback stream may introduce an additional layer of buffering which could introduce additional latency. PortAudio guarantees that the additional latency will be kept to the theoretical minimum however, it is strongly recommended that a non-zero framesPerBuffer value only be used when your algorithm requires a fixed number of frames per stream callback. @param streamFlags Flags which modify the behavior of the streaming process. This parameter may contain a combination of flags ORed together. Some flags may only be relevant to certain buffer formats. @param streamCallback A pointer to a client supplied function that is responsible for processing and filling input and output buffers. If this parameter is NULL the stream will be opened in 'blocking read/write' mode. In blocking mode, the client can receive sample data using Pa_ReadStream and write sample data using Pa_WriteStream, the number of samples that may be read or written without blocking is returned by Pa_GetStreamReadAvailable and Pa_GetStreamWriteAvailable respectively. @param userData A client supplied pointer which is passed to the stream callback function. It could for example, contain a pointer to instance data necessary for processing the audio buffers. This parameter is ignored if streamCallback is NULL. @return Upon success Pa_OpenStream() returns paNoError and places a pointer to a valid PaStream in the stream argument. The stream is inactive (stopped). If a call to Pa_OpenStream() fails, a non-zero error code is returned (see PaError for possible error codes) and the value of stream is invalid. @see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream, Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable */ PaError Pa_OpenStream( PaStream** stream, const PaStreamParameters *inputParameters, const PaStreamParameters *outputParameters, double sampleRate, unsigned long framesPerBuffer, PaStreamFlags streamFlags, PaStreamCallback *streamCallback, void *userData ); /** A simplified version of Pa_OpenStream() that opens the default input and/or output devices. @param stream The address of a PaStream pointer which will receive a pointer to the newly opened stream. @param numInputChannels The number of channels of sound that will be supplied to the stream callback or returned by Pa_ReadStream. It can range from 1 to the value of maxInputChannels in the PaDeviceInfo record for the default input device. If 0 the stream is opened as an output-only stream. @param numOutputChannels The number of channels of sound to be delivered to the stream callback or passed to Pa_WriteStream. It can range from 1 to the value of maxOutputChannels in the PaDeviceInfo record for the default output device. If 0 the stream is opened as an output-only stream. @param sampleFormat The sample format of both the input and output buffers provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream. sampleFormat may be any of the formats described by the PaSampleFormat enumeration. @param sampleRate Same as Pa_OpenStream parameter of the same name. @param framesPerBuffer Same as Pa_OpenStream parameter of the same name. @param streamCallback Same as Pa_OpenStream parameter of the same name. @param userData Same as Pa_OpenStream parameter of the same name. @return As for Pa_OpenStream @see Pa_OpenStream, PaStreamCallback */ PaError Pa_OpenDefaultStream( PaStream** stream, int numInputChannels, int numOutputChannels, PaSampleFormat sampleFormat, double sampleRate, unsigned long framesPerBuffer, PaStreamCallback *streamCallback, void *userData ); /** Closes an audio stream. If the audio stream is active it discards any pending buffers as if Pa_AbortStream() had been called. */ PaError Pa_CloseStream( PaStream *stream ); /** Functions of type PaStreamFinishedCallback are implemented by PortAudio clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback function. Once registered they are called when the stream becomes inactive (ie once a call to Pa_StopStream() will not block). A stream will become inactive after the stream callback returns non-zero, or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio output, if the stream callback returns paComplete, or Pa_StopStream is called, the stream finished callback will not be called until all generated sample data has been played. @param userData The userData parameter supplied to Pa_OpenStream() @see Pa_SetStreamFinishedCallback */ typedef void PaStreamFinishedCallback( void *userData ); /** Register a stream finished callback function which will be called when the stream becomes inactive. See the description of PaStreamFinishedCallback for further details about when the callback will be called. @param stream a pointer to a PaStream that is in the stopped state - if the stream is not stopped, the stream's finished callback will remain unchanged and an error code will be returned. @param streamFinishedCallback a pointer to a function with the same signature as PaStreamFinishedCallback, that will be called when the stream becomes inactive. Passing NULL for this parameter will un-register a previously registered stream finished callback function. @return on success returns paNoError, otherwise an error code indicating the cause of the error. @see PaStreamFinishedCallback */ PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); /** Commences audio processing. */ PaError Pa_StartStream( PaStream *stream ); /** Terminates audio processing. It waits until all pending audio buffers have been played before it returns. */ PaError Pa_StopStream( PaStream *stream ); /** Terminates audio processing immediately without waiting for pending buffers to complete. */ PaError Pa_AbortStream( PaStream *stream ); /** Determine whether the stream is stopped. A stream is considered to be stopped prior to a successful call to Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream. If a stream callback returns a value other than paContinue the stream is NOT considered to be stopped. @return Returns one (1) when the stream is stopped, zero (0) when the stream is running or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive */ PaError Pa_IsStreamStopped( PaStream *stream ); /** Determine whether the stream is active. A stream is active after a successful call to Pa_StartStream(), until it becomes inactive either as a result of a call to Pa_StopStream() or Pa_AbortStream(), or as a result of a return value other than paContinue from the stream callback. In the latter case, the stream is considered inactive after the last buffer has finished playing. @return Returns one (1) when the stream is active (ie playing or recording audio), zero (0) when not playing or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped */ PaError Pa_IsStreamActive( PaStream *stream ); /** A structure containing unchanging information about an open stream. @see Pa_GetStreamInfo */ typedef struct PaStreamInfo { /** this is struct version 1 */ int structVersion; /** The input latency of the stream in seconds. This value provides the most accurate estimate of input latency available to the implementation. It may differ significantly from the suggestedLatency value passed to Pa_OpenStream(). The value of this field will be zero (0.) for output-only streams. @see PaTime */ PaTime inputLatency; /** The output latency of the stream in seconds. This value provides the most accurate estimate of output latency available to the implementation. It may differ significantly from the suggestedLatency value passed to Pa_OpenStream(). The value of this field will be zero (0.) for input-only streams. @see PaTime */ PaTime outputLatency; /** The sample rate of the stream in Hertz (samples per second). In cases where the hardware sample rate is inaccurate and PortAudio is aware of it, the value of this field may be different from the sampleRate parameter passed to Pa_OpenStream(). If information about the actual hardware sample rate is not available, this field will have the same value as the sampleRate parameter passed to Pa_OpenStream(). */ double sampleRate; } PaStreamInfo; /** Retrieve a pointer to a PaStreamInfo structure containing information about the specified stream. @return A pointer to an immutable PaStreamInfo structure. If the stream parameter invalid, or an error is encountered, the function returns NULL. @param stream A pointer to an open stream previously created with Pa_OpenStream. @note PortAudio manages the memory referenced by the returned pointer, the client must not manipulate or free the memory. The pointer is only guaranteed to be valid until the specified stream is closed. @see PaStreamInfo */ const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream ); /** Returns the current time in seconds for a stream according to the same clock used to generate callback PaStreamCallbackTimeInfo timestamps. The time values are monotonically increasing and have unspecified origin. Pa_GetStreamTime returns valid time values for the entire life of the stream, from when the stream is opened until it is closed. Starting and stopping the stream does not affect the passage of time returned by Pa_GetStreamTime. This time may be used for synchronizing other events to the audio stream, for example synchronizing audio to MIDI. @return The stream's current time in seconds, or 0 if an error occurred. @see PaTime, PaStreamCallback, PaStreamCallbackTimeInfo */ PaTime Pa_GetStreamTime( PaStream *stream ); /** Retrieve CPU usage information for the specified stream. The "CPU Load" is a fraction of total CPU time consumed by a callback stream's audio processing routines including, but not limited to the client supplied stream callback. This function does not work with blocking read/write streams. This function may be called from the stream callback function or the application. @return A floating point value, typically between 0.0 and 1.0, where 1.0 indicates that the stream callback is consuming the maximum number of CPU cycles possible to maintain real-time operation. A value of 0.5 would imply that PortAudio and the stream callback was consuming roughly 50% of the available CPU time. The return value may exceed 1.0. A value of 0.0 will always be returned for a blocking read/write stream, or if an error occurs. */ double Pa_GetStreamCpuLoad( PaStream* stream ); /** Read samples from an input stream. The function doesn't return until the entire buffer has been filled - this may involve waiting for the operating system to supply the data. @param stream A pointer to an open stream previously created with Pa_OpenStream. @param buffer A pointer to a buffer of sample frames. The buffer contains samples in the format specified by the inputParameters->sampleFormat field used to open the stream, and the number of channels specified by inputParameters->numChannels. If non-interleaved samples were requested using the paNonInterleaved sample format flag, buffer is a pointer to the first element of an array of buffer pointers, one non-interleaved buffer for each channel. @param frames The number of frames to be read into buffer. This parameter is not constrained to a specific range, however high performance applications will want to match this parameter to the framesPerBuffer parameter used when opening the stream. @return On success PaNoError will be returned, or PaInputOverflowed if input data was discarded by PortAudio after the previous call and before this call. */ PaError Pa_ReadStream( PaStream* stream, void *buffer, unsigned long frames ); /** Write samples to an output stream. This function doesn't return until the entire buffer has been consumed - this may involve waiting for the operating system to consume the data. @param stream A pointer to an open stream previously created with Pa_OpenStream. @param buffer A pointer to a buffer of sample frames. The buffer contains samples in the format specified by the outputParameters->sampleFormat field used to open the stream, and the number of channels specified by outputParameters->numChannels. If non-interleaved samples were requested using the paNonInterleaved sample format flag, buffer is a pointer to the first element of an array of buffer pointers, one non-interleaved buffer for each channel. @param frames The number of frames to be written from buffer. This parameter is not constrained to a specific range, however high performance applications will want to match this parameter to the framesPerBuffer parameter used when opening the stream. @return On success PaNoError will be returned, or paOutputUnderflowed if additional output data was inserted after the previous call and before this call. */ PaError Pa_WriteStream( PaStream* stream, const void *buffer, unsigned long frames ); /** Retrieve the number of frames that can be read from the stream without waiting. @return Returns a non-negative value representing the maximum number of frames that can be read from the stream without blocking or busy waiting or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. */ signed long Pa_GetStreamReadAvailable( PaStream* stream ); /** Retrieve the number of frames that can be written to the stream without waiting. @return Returns a non-negative value representing the maximum number of frames that can be written to the stream without blocking or busy waiting or, a PaErrorCode (which are always negative) if PortAudio is not initialized or an error is encountered. */ signed long Pa_GetStreamWriteAvailable( PaStream* stream ); /* Miscellaneous utilities */ /** Retrieve the size of a given sample format in bytes. @return The size in bytes of a single sample in the specified format, or paSampleFormatNotSupported if the format is not supported. */ PaError Pa_GetSampleSize( PaSampleFormat format ); /** Put the caller to sleep for at least 'msec' milliseconds. This function is provided only as a convenience for authors of portable code (such as the tests and examples in the PortAudio distribution.) The function may sleep longer than requested so don't rely on this for accurate musical timing. */ void Pa_Sleep( long msec ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* PORTAUDIO_H */ ltfat/src/thirdparty/fftw3.h0000664000175000017500000003327312612404251015754 0ustar susnaksusnak/* * Copyright (c) 2003, 2006 Matteo Frigo * Copyright (c) 2003, 2006 Massachusetts Institute of Technology * * The following statement of license applies *only* to this header file, * and *not* to the other files distributed with FFTW or derived therefrom: * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /***************************** NOTE TO USERS ********************************* * * THIS IS A HEADER FILE, NOT A MANUAL * * If you want to know how to use FFTW, please read the manual, * online at http://www.fftw.org/doc/ and also included with FFTW. * For a quick start, see the manual's tutorial section. * * (Reading header files to learn how to use a library is a habit * stemming from code lacking a proper manual. Arguably, it's a * *bad* habit in most cases, because header files can contain * interfaces that are not part of the public, stable API.) * ****************************************************************************/ /* header file for fftw3 */ /* (The following is the CVS ID for this file, *not* the version number of FFTW:) */ /* $Id: fftw3.h,v 1.90 2006-01-17 04:03:33 stevenj Exp $ */ #ifndef FFTW3_H #define FFTW3_H #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* If is included, use the C99 complex type. Otherwise define a type bit-compatible with C99 complex */ #if !defined(FFTW_NO_Complex) && defined(_Complex_I) && defined(complex) && defined(I) # define FFTW_DEFINE_COMPLEX(R, C) typedef R _Complex C #else # define FFTW_DEFINE_COMPLEX(R, C) typedef R C[2] #endif #define FFTW_CONCAT(prefix, name) prefix ## name #define FFTW_MANGLE_DOUBLE(name) FFTW_CONCAT(fftw_, name) #define FFTW_MANGLE_FLOAT(name) FFTW_CONCAT(fftwf_, name) #define FFTW_MANGLE_LONG_DOUBLE(name) FFTW_CONCAT(fftwl_, name) /* IMPORTANT: for Windows compilers, you should add a line #define FFTW_DLL here and in kernel/ifftw.h if you are compiling/using FFTW as a DLL, in order to do the proper importing/exporting, or alternatively compile with -DFFTW_DLL or the equivalent command-line flag. This is not necessary under MinGW/Cygwin, where libtool does the imports/exports automatically. */ #if defined(FFTW_DLL) && (defined(_WIN32) || defined(__WIN32__)) /* annoying Windows syntax for shared-library declarations */ # if defined(COMPILING_FFTW) /* defined in api.h when compiling FFTW */ # define FFTW_EXTERN extern __declspec(dllexport) # else /* user is calling FFTW; import symbol */ # define FFTW_EXTERN extern __declspec(dllimport) # endif #else # define FFTW_EXTERN extern #endif enum fftw_r2r_kind_do_not_use_me { FFTW_R2HC=0, FFTW_HC2R=1, FFTW_DHT=2, FFTW_REDFT00=3, FFTW_REDFT01=4, FFTW_REDFT10=5, FFTW_REDFT11=6, FFTW_RODFT00=7, FFTW_RODFT01=8, FFTW_RODFT10=9, FFTW_RODFT11=10 }; struct fftw_iodim_do_not_use_me { int n; /* dimension size */ int is; /* input stride */ int os; /* output stride */ }; /* huge second-order macro that defines prototypes for all API functions. We expand this macro for each supported precision X: name-mangling macro R: real data type C: complex data type */ #define FFTW_DEFINE_API(X, R, C) \ \ FFTW_DEFINE_COMPLEX(R, C); \ \ typedef struct X(plan_s) *X(plan); \ \ typedef struct fftw_iodim_do_not_use_me X(iodim); \ \ typedef enum fftw_r2r_kind_do_not_use_me X(r2r_kind); \ \ FFTW_EXTERN void X(execute)(const X(plan) p); \ \ FFTW_EXTERN X(plan) X(plan_dft)(int rank, const int *n, \ C *in, C *out, int sign, unsigned flags); \ \ FFTW_EXTERN X(plan) X(plan_dft_1d)(int n, C *in, C *out, int sign, \ unsigned flags); \ FFTW_EXTERN X(plan) X(plan_dft_2d)(int nx, int ny, \ C *in, C *out, int sign, unsigned flags); \ FFTW_EXTERN X(plan) X(plan_dft_3d)(int nx, int ny, int nz, \ C *in, C *out, int sign, unsigned flags); \ \ FFTW_EXTERN X(plan) X(plan_many_dft)(int rank, const int *n, \ int howmany, \ C *in, const int *inembed, \ int istride, int idist, \ C *out, const int *onembed, \ int ostride, int odist, \ int sign, unsigned flags); \ \ FFTW_EXTERN X(plan) X(plan_guru_dft)(int rank, const X(iodim) *dims, \ int howmany_rank, \ const X(iodim) *howmany_dims, \ C *in, C *out, \ int sign, unsigned flags); \ FFTW_EXTERN X(plan) X(plan_guru_split_dft)(int rank, const X(iodim) *dims, \ int howmany_rank, \ const X(iodim) *howmany_dims, \ R *ri, R *ii, R *ro, R *io, \ unsigned flags); \ \ FFTW_EXTERN void X(execute_dft)(const X(plan) p, C *in, C *out); \ FFTW_EXTERN void X(execute_split_dft)(const X(plan) p, R *ri, R *ii, \ R *ro, R *io); \ \ FFTW_EXTERN X(plan) X(plan_many_dft_r2c)(int rank, const int *n, \ int howmany, \ R *in, const int *inembed, \ int istride, int idist, \ C *out, const int *onembed, \ int ostride, int odist, \ unsigned flags); \ \ FFTW_EXTERN X(plan) X(plan_dft_r2c)(int rank, const int *n, \ R *in, C *out, unsigned flags); \ \ FFTW_EXTERN X(plan) X(plan_dft_r2c_1d)(int n,R *in,C *out,unsigned flags); \ FFTW_EXTERN X(plan) X(plan_dft_r2c_2d)(int nx, int ny, \ R *in, C *out, unsigned flags); \ FFTW_EXTERN X(plan) X(plan_dft_r2c_3d)(int nx, int ny, \ int nz, \ R *in, C *out, unsigned flags); \ \ \ FFTW_EXTERN X(plan) X(plan_many_dft_c2r)(int rank, const int *n, \ int howmany, \ C *in, const int *inembed, \ int istride, int idist, \ R *out, const int *onembed, \ int ostride, int odist, \ unsigned flags); \ \ FFTW_EXTERN X(plan) X(plan_dft_c2r)(int rank, const int *n, \ C *in, R *out, unsigned flags); \ \ FFTW_EXTERN X(plan) X(plan_dft_c2r_1d)(int n,C *in,R *out,unsigned flags); \ FFTW_EXTERN X(plan) X(plan_dft_c2r_2d)(int nx, int ny, \ C *in, R *out, unsigned flags); \ FFTW_EXTERN X(plan) X(plan_dft_c2r_3d)(int nx, int ny, \ int nz, \ C *in, R *out, unsigned flags); \ \ FFTW_EXTERN X(plan) X(plan_guru_dft_r2c)(int rank, const X(iodim) *dims, \ int howmany_rank, \ const X(iodim) *howmany_dims, \ R *in, C *out, \ unsigned flags); \ FFTW_EXTERN X(plan) X(plan_guru_dft_c2r)(int rank, const X(iodim) *dims, \ int howmany_rank, \ const X(iodim) *howmany_dims, \ C *in, R *out, \ unsigned flags); \ \ FFTW_EXTERN X(plan) X(plan_guru_split_dft_r2c)( \ int rank, const X(iodim) *dims, \ int howmany_rank, \ const X(iodim) *howmany_dims, \ R *in, R *ro, R *io, \ unsigned flags); \ FFTW_EXTERN X(plan) X(plan_guru_split_dft_c2r)( \ int rank, const X(iodim) *dims, \ int howmany_rank, \ const X(iodim) *howmany_dims, \ R *ri, R *ii, R *out, \ unsigned flags); \ \ FFTW_EXTERN void X(execute_dft_r2c)(const X(plan) p, R *in, C *out); \ FFTW_EXTERN void X(execute_dft_c2r)(const X(plan) p, C *in, R *out); \ \ FFTW_EXTERN void X(execute_split_dft_r2c)(const X(plan) p, \ R *in, R *ro, R *io); \ FFTW_EXTERN void X(execute_split_dft_c2r)(const X(plan) p, \ R *ri, R *ii, R *out); \ \ FFTW_EXTERN X(plan) X(plan_many_r2r)(int rank, const int *n, \ int howmany, \ R *in, const int *inembed, \ int istride, int idist, \ R *out, const int *onembed, \ int ostride, int odist, \ const X(r2r_kind) *kind, unsigned flags); \ \ FFTW_EXTERN X(plan) X(plan_r2r)(int rank, const int *n, R *in, R *out, \ const X(r2r_kind) *kind, unsigned flags); \ \ FFTW_EXTERN X(plan) X(plan_r2r_1d)(int n, R *in, R *out, \ X(r2r_kind) kind, unsigned flags); \ FFTW_EXTERN X(plan) X(plan_r2r_2d)(int nx, int ny, R *in, R *out, \ X(r2r_kind) kindx, X(r2r_kind) kindy, \ unsigned flags); \ FFTW_EXTERN X(plan) X(plan_r2r_3d)(int nx, int ny, int nz, \ R *in, R *out, X(r2r_kind) kindx, \ X(r2r_kind) kindy, X(r2r_kind) kindz, \ unsigned flags); \ \ FFTW_EXTERN X(plan) X(plan_guru_r2r)(int rank, const X(iodim) *dims, \ int howmany_rank, \ const X(iodim) *howmany_dims, \ R *in, R *out, \ const X(r2r_kind) *kind, unsigned flags); \ FFTW_EXTERN void X(execute_r2r)(const X(plan) p, R *in, R *out); \ \ FFTW_EXTERN void X(destroy_plan)(X(plan) p); \ FFTW_EXTERN void X(forget_wisdom)(void); \ FFTW_EXTERN void X(cleanup)(void); \ \ FFTW_EXTERN void X(set_timelimit)(double); \ \ FFTW_EXTERN void X(plan_with_nthreads)(int nthreads); \ FFTW_EXTERN int X(init_threads)(void); \ FFTW_EXTERN void X(cleanup_threads)(void); \ \ FFTW_EXTERN void X(export_wisdom_to_file)(FILE *output_file); \ FFTW_EXTERN char *X(export_wisdom_to_string)(void); \ FFTW_EXTERN void X(export_wisdom)(void (*write_char)(char c, void *), \ void *data); \ FFTW_EXTERN int X(import_system_wisdom)(void); \ FFTW_EXTERN int X(import_wisdom_from_file)(FILE *input_file); \ FFTW_EXTERN int X(import_wisdom_from_string)(const char *input_string); \ FFTW_EXTERN int X(import_wisdom)(int (*read_char)(void *), void *data); \ \ FFTW_EXTERN void X(fprint_plan)(const X(plan) p, FILE *output_file); \ FFTW_EXTERN void X(print_plan)(const X(plan) p); \ \ FFTW_EXTERN void *X(malloc)(size_t n); \ FFTW_EXTERN void X(free)(void *p); \ \ FFTW_EXTERN void X(flops)(const X(plan) p, \ double *add, double *mul, double *fmas); \ FFTW_EXTERN double X(estimate_cost)(const X(plan) p); \ \ FFTW_EXTERN const char X(version)[]; \ FFTW_EXTERN const char X(cc)[]; \ FFTW_EXTERN const char X(codelet_optim)[]; /* end of FFTW_DEFINE_API macro */ FFTW_DEFINE_API(FFTW_MANGLE_DOUBLE, double, fftw_complex) FFTW_DEFINE_API(FFTW_MANGLE_FLOAT, float, fftwf_complex) FFTW_DEFINE_API(FFTW_MANGLE_LONG_DOUBLE, long double, fftwl_complex) #define FFTW_FORWARD (-1) #define FFTW_BACKWARD (+1) #define FFTW_NO_TIMELIMIT (-1.0) /* documented flags */ #define FFTW_MEASURE (0U) #define FFTW_DESTROY_INPUT (1U << 0) #define FFTW_UNALIGNED (1U << 1) #define FFTW_CONSERVE_MEMORY (1U << 2) #define FFTW_EXHAUSTIVE (1U << 3) /* NO_EXHAUSTIVE is default */ #define FFTW_PRESERVE_INPUT (1U << 4) /* cancels FFTW_DESTROY_INPUT */ #define FFTW_PATIENT (1U << 5) /* IMPATIENT is default */ #define FFTW_ESTIMATE (1U << 6) /* undocumented beyond-guru flags */ #define FFTW_ESTIMATE_PATIENT (1U << 7) #define FFTW_BELIEVE_PCOST (1U << 8) #define FFTW_NO_DFT_R2HC (1U << 9) #define FFTW_NO_NONTHREADED (1U << 10) #define FFTW_NO_BUFFERING (1U << 11) #define FFTW_NO_INDIRECT_OP (1U << 12) #define FFTW_ALLOW_LARGE_GENERIC (1U << 13) /* NO_LARGE_GENERIC is default */ #define FFTW_NO_RANK_SPLITS (1U << 14) #define FFTW_NO_VRANK_SPLITS (1U << 15) #define FFTW_NO_VRECURSE (1U << 16) #define FFTW_NO_SIMD (1U << 17) #define FFTW_NO_SLOW (1U << 18) #define FFTW_NO_FIXED_RADIX_LARGE_N (1U << 19) #define FFTW_ALLOW_PRUNING (1U << 20) #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ #endif /* FFTW3_H */ ltfat/src/gabtight_fac.c0000664000175000017500000000567712612404251015135 0ustar susnaksusnak#include "ltfat.h" #include "ltfat_types.h" LTFAT_EXTERN void LTFAT_NAME(gabtight_fac)(const LTFAT_COMPLEX *gf, const ltfatInt L,const ltfatInt R, const ltfatInt a, const ltfatInt M, LTFAT_COMPLEX *gtightf) { ltfatInt h_a, h_m; LTFAT_COMPLEX *Sf, *U, *VT, *gfwork; LTFAT_REAL *S; const LTFAT_COMPLEX zzero = (LTFAT_COMPLEX) 0.0;//{0.0, 0.0 }; const LTFAT_COMPLEX alpha = (LTFAT_COMPLEX) (1.0+0.0*I);//{1.0, 0.0 }; const ltfatInt N=L/a; const ltfatInt c=gcd(a, M,&h_a, &h_m); const ltfatInt p=a/c; const ltfatInt q=M/c; const ltfatInt d=N/q; S = ltfat_malloc(p*sizeof*S); Sf = ltfat_malloc(p*p*sizeof*Sf); U = ltfat_malloc(p*p*sizeof*U); VT = ltfat_malloc(p*q*R*sizeof*VT); gfwork = ltfat_malloc(L*R*sizeof*gfwork); /* Copy the contents of gf to gfwork because LAPACK overwrites * the input. */ memcpy(gfwork,gf,L*R*sizeof*gfwork); for (ltfatInt rs=0; rs0) { memcpy(out+shiftMod,in,(L-shiftMod)*sizeof*out); memcpy(out,in+L-shiftMod,shiftMod*sizeof*out); } else { memcpy(out,in,L*sizeof*out); } } LTFAT_EXTERN void LTFAT_NAME(reverse_array)(LTFAT_TYPE *in, LTFAT_TYPE *out,const ltfatInt L) { if(in==out) { LTFAT_TYPE tmpVar = (LTFAT_TYPE) 0.0; for(ltfatInt ii=0; iiLTFAT_COMPLEXH(cabs)(*max) ) #else if(in[ii]>*max) #endif { *max = in[ii]; *idx = ii; } } } LTFAT_EXTERN int LTFAT_NAME(findmaxinarraywrtmask)(const LTFAT_TYPE *in, const int *mask, const ltfatInt L, LTFAT_TYPE* max, ltfatInt* idx) { int found = 0; *max = -1e99; *idx = 0; for (ltfatInt ii = 0; ii < L; ++ii) { #ifdef LTFAT_COMPLEXTYPE if(!mask[ii] && LTFAT_COMPLEXH(cabs)(in[ii])>LTFAT_COMPLEXH(cabs)(*max)) #else if(!mask[ii] && in[ii]>*max) #endif { *max = in[ii]; *idx = ii; found = 1; } } return found; } #endif // LTFAT_TYPE ltfat/src/dst.c0000664000175000017500000000516212612404251013312 0ustar susnaksusnak/* NOT PROCESSED DIRECTLY, dst_ci.c */ #ifdef LTFAT_TYPE #include "ltfat.h" #include "ltfat_types.h" LTFAT_EXTERN LTFAT_FFTW(plan) LTFAT_NAME(dst_init)( const ltfatInt L, const ltfatInt W, LTFAT_TYPE *cout, const dst_kind kind) { LTFAT_FFTW(iodim) dims, howmanydims; LTFAT_FFTW(plan) p; #ifdef LTFAT_COMPLEXTYPE dims.n = L; dims.is = 2; dims.os = 2; howmanydims.n = W; howmanydims.is = 2*L; howmanydims.os = 2*L; unsigned flag = FFTW_ESTIMATE | FFTW_UNALIGNED; #else dims.n = L; dims.is = 1; dims.os = 1; howmanydims.n = W; howmanydims.is = L; howmanydims.os = L; unsigned flag = FFTW_ESTIMATE; #endif LTFAT_FFTW(r2r_kind) kindFftw = (LTFAT_FFTW(r2r_kind)) kind; p = LTFAT_FFTW(plan_guru_r2r)(1, &dims, 1, &howmanydims, (LTFAT_REAL*)cout, (LTFAT_REAL*)cout, &kindFftw, flag); return p; } // f and cout cannot be equal, because creating plan can tamper with the array LTFAT_EXTERN void LTFAT_NAME(dst)(const LTFAT_TYPE *f, const ltfatInt L, const ltfatInt W, LTFAT_TYPE *cout, const dst_kind kind) { LTFAT_FFTW(plan) p = LTFAT_NAME(dst_init)( L, W, cout, kind); LTFAT_NAME(dst_execute)(p, f, L, W, cout, kind); LTFAT_FFTW(destroy_plan)(p); } // f and cout can be equal, provided plan was already created LTFAT_EXTERN void LTFAT_NAME(dst_execute)(LTFAT_FFTW(plan) p, const LTFAT_TYPE *f, const ltfatInt L, const ltfatInt W, LTFAT_TYPE *cout, const dst_kind kind) { // Copy input to the output if(cout!=f) memcpy(cout,f,L*W*sizeof*f); if(L==1) return; ltfatInt N = 2*L; LTFAT_REAL sqrt2 = (LTFAT_REAL) sqrt(2.0); LTFAT_REAL postScale = (LTFAT_REAL) 1.0/sqrt2; LTFAT_REAL scale = (LTFAT_REAL) sqrt2*(1.0/(double)N)*sqrt((double)L); if(kind==DSTIII) { for(ltfatInt ii=0; ii. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: http://github.com/ltfat/ltfat/issues about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='LTFAT' PACKAGE_TARNAME='ltfat' PACKAGE_VERSION='2.1.1' PACKAGE_STRING='LTFAT 2.1.1' PACKAGE_BUGREPORT='http://github.com/ltfat/ltfat/issues' PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS have_libportaudio MKOCTFILE_CHECK ac_ct_CXX CXXFLAGS CXX OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures LTFAT 2.1.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/ltfat] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of LTFAT 2.1.1:";; esac cat <<\_ACEOF Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF LTFAT configure 2.1.1 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by LTFAT $as_me 2.1.1, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu #AC_CONFIG_MACRO_DIR([m4/]) # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_blas.html # =========================================================================== # # SYNOPSIS # # AX_BLAS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro looks for a library that implements the BLAS linear-algebra # interface (see http://www.netlib.org/blas/). On success, it sets the # BLAS_LIBS output variable to hold the requisite library linkages. # # To link with BLAS, you should link with: # # $BLAS_LIBS $LIBS $FLIBS # # in that order. FLIBS is the output variable of the # AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is # sometimes necessary in order to link with F77 libraries. Users will also # need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same # reason. # # Many libraries are searched for, from ATLAS to CXML to ESSL. The user # may also use --with-blas= in order to use some specific BLAS # library . In order to link successfully, however, be aware that you # will probably need to use the same Fortran compiler (which can be set # via the F77 env. var.) as was used to compile the BLAS library. # # ACTION-IF-FOUND is a list of shell commands to run if a BLAS library is # found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is # not found. If ACTION-IF-FOUND is not specified, the default action will # define HAVE_BLAS. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 11 # This is what autoupdate's m4 run will expand. It fires # the warning (with _au_warn_XXX), outputs it into the # updated configure.ac (with AC_DIAGNOSE), and then outputs # the replacement expansion. # This is an auxiliary macro that is also run when # autoupdate runs m4. It simply calls m4_warning, but # we need a wrapper so that each warning is emitted only # once. We break the quoting in m4_warning's argument in # order to expand this macro's arguments, not AU_DEFUN's. # Finally, this is the expansion that is picked up by # autoconf. It tells the user to run autoupdate, and # then outputs the replacement expansion. We do not care # about autoupdate's warning because that contains # information on what to do *after* running autoupdate. # =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_lapack.html # =========================================================================== # # SYNOPSIS # # AX_LAPACK([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro looks for a library that implements the LAPACK linear-algebra # interface (see http://www.netlib.org/lapack/). On success, it sets the # LAPACK_LIBS output variable to hold the requisite library linkages. # # To link with LAPACK, you should link with: # # $LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS # # in that order. BLAS_LIBS is the output variable of the AX_BLAS macro, # called automatically. FLIBS is the output variable of the # AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is # sometimes necessary in order to link with F77 libraries. Users will also # need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same # reason. # # The user may also use --with-lapack= in order to use some specific # LAPACK library . In order to link successfully, however, be aware # that you will probably need to use the same Fortran compiler (which can # be set via the F77 env. var.) as was used to compile the LAPACK and BLAS # libraries. # # ACTION-IF-FOUND is a list of shell commands to run if a LAPACK library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_LAPACK. # # LICENSE # # Copyright (c) 2009 Steven G. Johnson # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 7 # This is what autoupdate's m4 run will expand. It fires # the warning (with _au_warn_XXX), outputs it into the # updated configure.ac (with AC_DIAGNOSE), and then outputs # the replacement expansion. # This is an auxiliary macro that is also run when # autoupdate runs m4. It simply calls m4_warning, but # we need a wrapper so that each warning is emitted only # once. We break the quoting in m4_warning's argument in # order to expand this macro's arguments, not AU_DEFUN's. # Finally, this is the expansion that is picked up by # autoconf. It tells the user to run autoupdate, and # then outputs the replacement expansion. We do not care # about autoupdate's warning because that contains # information on what to do *after* running autoupdate. # The checks for BLAS and Lapack have been disabled because they # provoke an error about a missing install-sh #dnl Check for BLAS libraries #sinclude(ax_blas.m4) #AX_BLAS #if test "$ax_blas_ok" = "no"; then # AC_MSG_ERROR([Cannot find BLAS libraries]) #fi #dnl Check for LAPACK libraries #sinclude(ax_lapack.m4) #AX_LAPACK #if test "$ax_lapack_ok" = "no"; then # AC_MSG_ERROR([Cannot find LAPACK libraries]) #fi # Extract the first word of "mkoctfile", so it can be a program name with args. set dummy mkoctfile; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MKOCTFILE_CHECK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MKOCTFILE_CHECK"; then ac_cv_prog_MKOCTFILE_CHECK="$MKOCTFILE_CHECK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MKOCTFILE_CHECK=""yes"" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MKOCTFILE_CHECK=$ac_cv_prog_MKOCTFILE_CHECK if test -n "$MKOCTFILE_CHECK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKOCTFILE_CHECK" >&5 $as_echo "$MKOCTFILE_CHECK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MKOCTFILE_CHECK" != "yes" ; then as_fn_error $? "Please install mkoctfile." "$LINENO" 5 fi #AC_CHECK_HEADERS([fftw3.h],[],[AC_MSG_ERROR([fftw was not found])]) # Checking for portaudio, we pack portaudio.h with LTFAT # AC_CHECK_HEADER(portaudio.h) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Pa_GetHostApiCount in -lportaudio" >&5 $as_echo_n "checking for Pa_GetHostApiCount in -lportaudio... " >&6; } if ${ac_cv_lib_portaudio_Pa_GetHostApiCount+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lportaudio $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char Pa_GetHostApiCount (); int main () { return Pa_GetHostApiCount (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_portaudio_Pa_GetHostApiCount=yes else ac_cv_lib_portaudio_Pa_GetHostApiCount=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_portaudio_Pa_GetHostApiCount" >&5 $as_echo "$ac_cv_lib_portaudio_Pa_GetHostApiCount" >&6; } if test "x$ac_cv_lib_portaudio_Pa_GetHostApiCount" = xyes; then : have_libportaudio=1 else have_libportaudio=0 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Portaudio lib not found. Disabling support of the block processing framework." >&5 $as_echo "$as_me: WARNING: Portaudio lib not found. Disabling support of the block processing framework." >&2;} fi ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by LTFAT $as_me 2.1.1, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ LTFAT config.status 2.1.1 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ltfat/src/wfac.c0000664000175000017500000001237412612404251013443 0ustar susnaksusnak#include "ltfat.h" #include "ltfat_types.h" LTFAT_EXTERN void LTFAT_NAME_COMPLEX(wfac)(const LTFAT_COMPLEX *g, const ltfatInt L, const ltfatInt R, const ltfatInt a, const ltfatInt M, LTFAT_COMPLEX *gf) { ltfatInt h_a, h_m, s; LTFAT_REAL *sbuf, *gfp; ltfatInt rem, negrem; LTFAT_FFTW(plan) p_before; const ltfatInt b = L/M; const ltfatInt c=gcd(a, M,&h_a, &h_m); const ltfatInt p=a/c; const ltfatInt q=M/c; const ltfatInt d=b/p; const double sqrtM=sqrt(M); sbuf = (LTFAT_REAL*)ltfat_malloc(2*d*sizeof(LTFAT_REAL)); /* Create plan. In-place. */ p_before = LTFAT_FFTW(plan_dft_1d)(d, (LTFAT_COMPLEX*)sbuf, (LTFAT_COMPLEX*)sbuf, FFTW_FORWARD, FFTW_MEASURE); const ltfatInt ld3=c*p*q*R; gfp=(LTFAT_REAL*)gf; for (ltfatInt r=0; r #else // C99 complex header // fftw3.h will define: // typedef double _Complex fftw_complex #include #endif #include #include #include #include //#include // We do not use bool anyway #include #include "fftw3.h" #include "cblas.h" #define HAVE_BLAS 1 #define HAVE_LAPACK 1 #ifndef PI #define PI 3.1415926535897932384626433832795 #endif /* defined(PI) */ // "Vectorizes" a function call #define LTFAT_APPLYFN(type,fn,...) do{ \ const type list[] = {(const type)0,__VA_ARGS__}; \ size_t len = sizeof(list)/sizeof(*list) - 1; \ for(size_t ii=0;ii in order to use some specific # LAPACK library . In order to link successfully, however, be aware # that you will probably need to use the same Fortran compiler (which can # be set via the F77 env. var.) as was used to compile the LAPACK and BLAS # libraries. # # ACTION-IF-FOUND is a list of shell commands to run if a LAPACK library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_LAPACK. # # LICENSE # # Copyright (c) 2009 Steven G. Johnson # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 7 AU_ALIAS([ACX_LAPACK], [AX_LAPACK]) AC_DEFUN([AX_LAPACK], [ AC_REQUIRE([AX_BLAS]) ax_lapack_ok=no AC_ARG_WITH(lapack, [AS_HELP_STRING([--with-lapack=], [use LAPACK library ])]) case $with_lapack in yes | "") ;; no) ax_lapack_ok=disable ;; -* | */* | *.a | *.so | *.so.* | *.o) LAPACK_LIBS="$with_lapack" ;; *) LAPACK_LIBS="-l$with_lapack" ;; esac # Get fortran linker name of LAPACK function to check for. AC_F77_FUNC(cheev) # We cannot use LAPACK if BLAS is not found if test "x$ax_blas_ok" != xyes; then ax_lapack_ok=noblas LAPACK_LIBS="" fi # First, check LAPACK_LIBS environment variable if test "x$LAPACK_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$LAPACK_LIBS $BLAS_LIBS $LIBS $FLIBS" AC_MSG_CHECKING([for $cheev in $LAPACK_LIBS]) AC_TRY_LINK_FUNC($cheev, [ax_lapack_ok=yes], [LAPACK_LIBS=""]) AC_MSG_RESULT($ax_lapack_ok) LIBS="$save_LIBS" if test $ax_lapack_ok = no; then LAPACK_LIBS="" fi fi # LAPACK linked to by default? (is sometimes included in BLAS lib) if test $ax_lapack_ok = no; then save_LIBS="$LIBS"; LIBS="$LIBS $BLAS_LIBS $FLIBS" AC_CHECK_FUNC($cheev, [ax_lapack_ok=yes]) LIBS="$save_LIBS" fi # Generic LAPACK library? for lapack in lapack lapack_rs6k; do if test $ax_lapack_ok = no; then save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" AC_CHECK_LIB($lapack, $cheev, [ax_lapack_ok=yes; LAPACK_LIBS="-l$lapack"], [], [$FLIBS]) LIBS="$save_LIBS" fi done AC_SUBST(LAPACK_LIBS) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_lapack_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_LAPACK,1,[Define if you have LAPACK library.]),[$1]) : else ax_lapack_ok=no $2 fi ])dnl AX_LAPACK ltfat/src/m4/ax_blas.m40000664000175000017500000001513612612404251014551 0ustar susnaksusnak# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_blas.html # =========================================================================== # # SYNOPSIS # # AX_BLAS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro looks for a library that implements the BLAS linear-algebra # interface (see http://www.netlib.org/blas/). On success, it sets the # BLAS_LIBS output variable to hold the requisite library linkages. # # To link with BLAS, you should link with: # # $BLAS_LIBS $LIBS $FLIBS # # in that order. FLIBS is the output variable of the # AC_F77_LIBRARY_LDFLAGS macro (called if necessary by AX_BLAS), and is # sometimes necessary in order to link with F77 libraries. Users will also # need to use AC_F77_DUMMY_MAIN (see the autoconf manual), for the same # reason. # # Many libraries are searched for, from ATLAS to CXML to ESSL. The user # may also use --with-blas= in order to use some specific BLAS # library . In order to link successfully, however, be aware that you # will probably need to use the same Fortran compiler (which can be set # via the F77 env. var.) as was used to compile the BLAS library. # # ACTION-IF-FOUND is a list of shell commands to run if a BLAS library is # found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it is # not found. If ACTION-IF-FOUND is not specified, the default action will # define HAVE_BLAS. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 11 AU_ALIAS([ACX_BLAS], [AX_BLAS]) AC_DEFUN([AX_BLAS], [ AC_PREREQ(2.50) AC_REQUIRE([AC_F77_LIBRARY_LDFLAGS]) ax_blas_ok=no AC_ARG_WITH(blas, [AS_HELP_STRING([--with-blas=], [use BLAS library ])]) case $with_blas in yes | "") ;; no) ax_blas_ok=disable ;; -* | */* | *.a | *.so | *.so.* | *.o) BLAS_LIBS="$with_blas" ;; *) BLAS_LIBS="-l$with_blas" ;; esac # Get fortran linker names of BLAS functions to check for. AC_F77_FUNC(sgemm) AC_F77_FUNC(dgemm) ax_blas_save_LIBS="$LIBS" LIBS="$LIBS $FLIBS" # First, check BLAS_LIBS environment variable if test $ax_blas_ok = no; then if test "x$BLAS_LIBS" != x; then save_LIBS="$LIBS"; LIBS="$BLAS_LIBS $LIBS" AC_MSG_CHECKING([for $sgemm in $BLAS_LIBS]) AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes], [BLAS_LIBS=""]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi fi # BLAS linked to by default? (happens on some supercomputers) if test $ax_blas_ok = no; then save_LIBS="$LIBS"; LIBS="$LIBS" AC_MSG_CHECKING([if $sgemm is being linked in already]) AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) if test $ax_blas_ok = no; then AC_CHECK_LIB(atlas, ATL_xerbla, [AC_CHECK_LIB(f77blas, $sgemm, [AC_CHECK_LIB(cblas, cblas_dgemm, [ax_blas_ok=yes BLAS_LIBS="-lcblas -lf77blas -latlas"], [], [-lf77blas -latlas])], [], [-latlas])]) fi # BLAS in PhiPACK libraries? (requires generic BLAS lib, too) if test $ax_blas_ok = no; then AC_CHECK_LIB(blas, $sgemm, [AC_CHECK_LIB(dgemm, $dgemm, [AC_CHECK_LIB(sgemm, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lsgemm -ldgemm -lblas"], [], [-lblas])], [], [-lblas])]) fi # BLAS in Intel MKL library? if test $ax_blas_ok = no; then AC_CHECK_LIB(mkl, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lmkl"]) fi # BLAS in Apple vecLib library? if test $ax_blas_ok = no; then save_LIBS="$LIBS"; LIBS="-framework vecLib $LIBS" AC_MSG_CHECKING([for $sgemm in -framework vecLib]) AC_TRY_LINK_FUNC($sgemm, [ax_blas_ok=yes;BLAS_LIBS="-framework vecLib"]) AC_MSG_RESULT($ax_blas_ok) LIBS="$save_LIBS" fi # BLAS in Alpha CXML library? if test $ax_blas_ok = no; then AC_CHECK_LIB(cxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-lcxml"]) fi # BLAS in Alpha DXML library? (now called CXML, see above) if test $ax_blas_ok = no; then AC_CHECK_LIB(dxml, $sgemm, [ax_blas_ok=yes;BLAS_LIBS="-ldxml"]) fi # BLAS in Sun Performance library? if test $ax_blas_ok = no; then if test "x$GCC" != xyes; then # only works with Sun CC AC_CHECK_LIB(sunmath, acosp, [AC_CHECK_LIB(sunperf, $sgemm, [BLAS_LIBS="-xlic_lib=sunperf -lsunmath" ax_blas_ok=yes],[],[-lsunmath])]) fi fi # BLAS in SCSL library? (SGI/Cray Scientific Library) if test $ax_blas_ok = no; then AC_CHECK_LIB(scs, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lscs"]) fi # BLAS in SGIMATH library? if test $ax_blas_ok = no; then AC_CHECK_LIB(complib.sgimath, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lcomplib.sgimath"]) fi # BLAS in IBM ESSL library? (requires generic BLAS lib, too) if test $ax_blas_ok = no; then AC_CHECK_LIB(blas, $sgemm, [AC_CHECK_LIB(essl, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lessl -lblas"], [], [-lblas $FLIBS])]) fi # Generic BLAS library? if test $ax_blas_ok = no; then AC_CHECK_LIB(blas, $sgemm, [ax_blas_ok=yes; BLAS_LIBS="-lblas"]) fi AC_SUBST(BLAS_LIBS) LIBS="$ax_blas_save_LIBS" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_blas_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_BLAS,1,[Define if you have a BLAS library.]),[$1]) : else ax_blas_ok=no $2 fi ])dnl AX_BLAS ltfat/src/dgt_shearola.c0000664000175000017500000001071712612404251015156 0ustar susnaksusnak#include "ltfat.h" #include "ltfat_types.h" LTFAT_EXTERN LTFAT_NAME(dgt_shearola_plan) LTFAT_NAME(dgt_shearola_init)(const LTFAT_COMPLEX *g, const ltfatInt gl, const ltfatInt W, const ltfatInt a, const ltfatInt M, const ltfatInt s0, const ltfatInt s1, const ltfatInt br, const ltfatInt bl, unsigned flags) { LTFAT_NAME(dgt_shearola_plan) plan; plan.bl = bl; plan.gl = gl; plan.W = W; const ltfatInt Lext = bl+gl; const ltfatInt Nblocke = Lext/a; plan.buf = ltfat_malloc(Lext*W*sizeof(LTFAT_COMPLEX)); plan.gext = ltfat_malloc(Lext*sizeof(LTFAT_COMPLEX)); plan.cbuf = ltfat_malloc(M*Nblocke*W*sizeof(LTFAT_COMPLEX)); LTFAT_NAME(fir2long_c)(g, gl, Lext, plan.gext); /* Zero the last part of the buffer, it will always be zero. */ for (ltfatInt w=0; wL; ltfatInt W = p[0]->W; // This is necessary since F us used as an accumulator memset(F, 0, W * L * sizeof * F); for (ltfatInt m = 0; m < M; m++) { LTFAT_NAME(upconv_fft_execute)(p[m], cin[m], G[m], F); } } // Inverse LTFAT_EXTERN void LTFAT_NAME(upconv_fft)(const LTFAT_COMPLEX *cin, const LTFAT_COMPLEX *G, const ltfatInt L, const ltfatInt W, const ltfatInt a, LTFAT_COMPLEX *F) { LTFAT_NAME(upconv_fft_plan) p = LTFAT_NAME(upconv_fft_init)(L, W, a); LTFAT_NAME(upconv_fft_execute)(p, cin, G, F); LTFAT_NAME(upconv_fft_done)(p); } LTFAT_EXTERN LTFAT_NAME(upconv_fft_plan) LTFAT_NAME(upconv_fft_init)(const ltfatInt L, const ltfatInt W, const ltfatInt a) { ltfatInt N = L / a; int Nint = (int) N; const LTFAT_FFTW(iodim) dims = {.n = Nint, .is = 1, .os = 1}; const LTFAT_FFTW(iodim) howmany_dims = {.n = W, .is = Nint, .os = Nint}; LTFAT_COMPLEX* buf = ltfat_malloc(W * N * sizeof * buf); LTFAT_FFTW(plan) p_many = LTFAT_FFTW(plan_guru_dft)(1, &dims, 1, &howmany_dims, buf, buf, FFTW_FORWARD, FFTW_ESTIMATE); struct LTFAT_NAME(upconv_fft_plan_struct) p_struct = { .L = L, .a = a, .W = W, .p_c = p_many, .buf = buf, .bufLen = W * N }; LTFAT_NAME(upconv_fft_plan) p = ltfat_malloc(sizeof * p); memcpy(p, &p_struct, sizeof * p); return p; } LTFAT_EXTERN void LTFAT_NAME(upconv_fft_execute)(LTFAT_NAME(upconv_fft_plan) p, const LTFAT_COMPLEX *cin, const LTFAT_COMPLEX *G, LTFAT_COMPLEX *F) { const ltfatInt L = p->L; const ltfatInt a = p->a; const ltfatInt W = p->W; LTFAT_COMPLEX* buf = p->buf; ltfatInt N = L / a; memcpy(buf, cin, W * N * sizeof * cin); // New array execution, inplace LTFAT_FFTW(execute_dft)(p->p_c, buf, buf); for (ltfatInt w = 0; w < W; w++) { LTFAT_COMPLEX *FPtr = F + w * L; LTFAT_COMPLEX *GPtr = (LTFAT_COMPLEX *) G; for (ltfatInt jj = 0; jj < a; jj++) { for (ltfatInt ii = 0; ii < N; ii++) { // Really readable ;) *FPtr++ += LTFAT_COMPLEXH(conj)(*GPtr++) * buf[ii + N * w]; } } } } LTFAT_EXTERN void LTFAT_NAME(upconv_fft_done)(LTFAT_NAME(upconv_fft_plan) p) { LTFAT_FFTW(destroy_plan)(p->p_c); ltfat_free(p->buf); } LTFAT_EXTERN void LTFAT_NAME(ifilterbank_fftbl)(const LTFAT_COMPLEX *cin[], const LTFAT_COMPLEX *G[], const ltfatInt L, const ltfatInt Gl[], const ltfatInt W, const double a[], const ltfatInt M, const ltfatInt foff[], const int realonly[], LTFAT_COMPLEX *F) { // This is necessary since F us used as an accumulator memset(F, 0, W * L * sizeof * F); for (ltfatInt m = 0; m < M; m++) { LTFAT_NAME(upconv_fftbl)(cin[m], G[m], L, Gl[m], W, a[m], foff[m], realonly[m], F); } } LTFAT_EXTERN void LTFAT_NAME(ifilterbank_fftbl_execute)(LTFAT_NAME(upconv_fftbl_plan) p[], const LTFAT_COMPLEX *cin[], const LTFAT_COMPLEX *G[], const ltfatInt M, const ltfatInt foff[], const int realonly[], LTFAT_COMPLEX *F) { ltfatInt L = p[0]->L; ltfatInt W = p[0]->W; // This is necessary since F us used as an accumulator memset(F, 0, W * L * sizeof * F); for (ltfatInt m = 0; m < M; m++) { LTFAT_NAME(upconv_fftbl_execute)(p[m], cin[m], G[m], foff[m], realonly[m], F); } } LTFAT_EXTERN void LTFAT_NAME(upconv_fftbl)(const LTFAT_COMPLEX *cin, const LTFAT_COMPLEX *G, const ltfatInt L, const ltfatInt Gl, const ltfatInt W, const double a, const ltfatInt foff, const int realonly, LTFAT_COMPLEX *F) { LTFAT_NAME(upconv_fftbl_plan) p = LTFAT_NAME(upconv_fftbl_init)( L, Gl, W, a); LTFAT_NAME(upconv_fftbl_execute)(p, cin, G, foff, realonly, F); LTFAT_NAME(upconv_fftbl_done)( p); } LTFAT_EXTERN LTFAT_NAME(upconv_fftbl_plan) LTFAT_NAME(upconv_fftbl_init)( const ltfatInt L, const ltfatInt Gl, const ltfatInt W, const double a) { ltfatInt N = (ltfatInt) floor(L / a + 0.5); int Nint = (int) N; int bufLen = N>Gl? N: Gl; const LTFAT_FFTW(iodim) dims = {.n = Nint, .is = 1, .os = 1}; const LTFAT_FFTW(iodim) howmany_dims = {.n = W, .is = bufLen, .os = bufLen}; LTFAT_COMPLEX* buf = ltfat_malloc(bufLen * W * sizeof * buf); LTFAT_FFTW(plan) p_many = LTFAT_FFTW(plan_guru_dft)(1, &dims, 1, &howmany_dims, buf, buf, FFTW_FORWARD, FFTW_ESTIMATE); struct LTFAT_NAME(upconv_fftbl_plan_struct) p_struct = { .L = L, .Gl = Gl, .a = a, .W = W, .p_c = p_many, .buf = buf, .bufLen = bufLen }; LTFAT_NAME(upconv_fftbl_plan) p = ltfat_malloc(sizeof * p); memcpy(p, &p_struct, sizeof * p); return p; } LTFAT_EXTERN void LTFAT_NAME(upconv_fftbl_execute)(const LTFAT_NAME(upconv_fftbl_plan) p, const LTFAT_COMPLEX *cin, const LTFAT_COMPLEX *G, const ltfatInt foff, const int realonly, LTFAT_COMPLEX *F) { ltfatInt Gl = p->Gl; if(!Gl) return; // Bail out if filter has zero bandwidth const ltfatInt bufLen = p->bufLen; const ltfatInt L = p->L; const ltfatInt W = p->W; const double a = p->a; LTFAT_COMPLEX* cbuf = p->buf; ltfatInt N = (ltfatInt) floor(L / a + 0.5); for(ltfatInt w=0;wp_c, cbuf, cbuf); for (ltfatInt w = 0; w < W; w++) { LTFAT_NAME_COMPLEX(circshift)(cbuf + w * bufLen, cbuf + w * bufLen, N, -foff); // This does nothing if bufLen == N LTFAT_NAME_COMPLEX(periodize_array)(cbuf + w * bufLen, N, cbuf + w * bufLen, bufLen); const LTFAT_COMPLEX* GPtrTmp = G; LTFAT_COMPLEX* FPtrTmp = F + w * L; LTFAT_COMPLEX* CPtrTmp = cbuf + w * bufLen; ltfatInt Gltmp = Gl; // Determine range of G ltfatInt foffTmp = foff; ltfatInt over = 0; if (foffTmp + Gltmp > (ltfatInt)L) { over = foffTmp + Gltmp - (ltfatInt)L; } if (foffTmp < 0) { ltfatInt toCopy = (-foffTmp) < Gltmp ? -foffTmp : Gltmp; FPtrTmp = F + (w + 1) * L + foffTmp; for (ltfatInt ii = 0; ii < toCopy; ii++) { LTFAT_COMPLEX tmp = *CPtrTmp++ * LTFAT_COMPLEXH(conj)(*GPtrTmp++); FPtrTmp[ii] += tmp; } Gltmp -= toCopy; foffTmp = 0; } FPtrTmp = F + w * L + foffTmp; for (ltfatInt ii = 0; ii < Gltmp - over; ii++) { LTFAT_COMPLEX tmp = *CPtrTmp++ * LTFAT_COMPLEXH(conj)(*GPtrTmp++); FPtrTmp[ii] += tmp; } FPtrTmp = F + w * L; for (ltfatInt ii = 0; ii < over; ii++) { LTFAT_COMPLEX tmp = (*CPtrTmp++ * LTFAT_COMPLEXH(conj)(*GPtrTmp++)); FPtrTmp[ii] += tmp; } } if (realonly) { const ltfatInt foffconj = -L + positiverem(L - foff - Gl, L) + 1; LTFAT_COMPLEX *Gconj = ltfat_malloc(Gl * sizeof * Gconj); LTFAT_NAME_COMPLEX(reverse_array)((LTFAT_COMPLEX *)G, Gconj, Gl); LTFAT_NAME_COMPLEX(conjugate_array)(Gconj, Gconj, Gl); LTFAT_NAME(upconv_fftbl_execute)(p, cin, Gconj, foffconj, 0, F); ltfat_free(Gconj); } } LTFAT_EXTERN void LTFAT_NAME(upconv_fftbl_done)(LTFAT_NAME(upconv_fftbl_plan) p) { LTFAT_FFTW(destroy_plan)(p->p_c); if(p->buf) ltfat_free(p->buf); } ltfat/src/dgt_long.h0000664000175000017500000000300012612404251014307 0ustar susnaksusnaktypedef struct { ltfatInt a; ltfatInt M; ltfatInt L; ltfatInt W; ltfatInt c; ltfatInt h_a; dgt_phasetype ptype; LTFAT_FFTW(plan) p_before; LTFAT_FFTW(plan) p_after; LTFAT_FFTW(plan) p_veryend; LTFAT_REAL *sbuf; const LTFAT_COMPLEX *f; LTFAT_COMPLEX *gf; LTFAT_COMPLEX *cout; LTFAT_REAL *ff, *cf; } LTFAT_NAME(dgt_long_plan); LTFAT_EXTERN void LTFAT_NAME_COMPLEX(dgt_long)(const LTFAT_COMPLEX *f, const LTFAT_COMPLEX *g, const ltfatInt L, const ltfatInt W, const ltfatInt a, const ltfatInt M, const dgt_phasetype ptype, LTFAT_COMPLEX *cout); LTFAT_EXTERN void LTFAT_NAME(dgt_long)(const LTFAT_REAL *f, const LTFAT_REAL *g, const ltfatInt L, const ltfatInt W, const ltfatInt a, const ltfatInt M, const dgt_phasetype ptype, LTFAT_COMPLEX *cout); LTFAT_EXTERN LTFAT_NAME(dgt_long_plan) LTFAT_NAME(dgt_long_init)(const LTFAT_COMPLEX *f, const LTFAT_COMPLEX *g, const ltfatInt L, const ltfatInt W, const ltfatInt a, const ltfatInt M, LTFAT_COMPLEX *cout, const dgt_phasetype ptype, unsigned flags); LTFAT_EXTERN void LTFAT_NAME(dgt_long_execute)(const LTFAT_NAME(dgt_long_plan) plan); LTFAT_EXTERN void LTFAT_NAME(dgt_long_done)(LTFAT_NAME(dgt_long_plan) plan); LTFAT_EXTERN void LTFAT_NAME(dgt_walnut_plan)(LTFAT_NAME(dgt_long_plan) plan); ltfat/src/reassign_ci.c0000664000175000017500000000034312612404251015002 0ustar susnaksusnak#ifdef LTFAT_COMPLEXTYPE # undef LTFAT_COMPLEXTYPE #endif // LTFAT_COMPLEXTYPE #include "ltfat_types.h" #include "reassign.c" #define LTFAT_COMPLEXTYPE #include "ltfat_types.h" #include "reassign.c" #undef LTFAT_COMPLEXTYPE ltfat/src/comptarget.mk0000664000175000017500000000012512612404251015044 0ustar susnaksusnakifeq ($(COMPTARGET),debug) # Do debug stuff here else CFLAGS += -O2 -DNDEBUG endif ltfat/src/dgt_shear.c0000664000175000017500000002055212612404251014460 0ustar susnaksusnak#include "ltfat.h" #include "ltfat_types.h" // long is only "at least 32 bit" static inline long long positiverem_long(long long a, long long b) { const long long c = a % b; return (c < 0 ? c + b : c); } LTFAT_EXTERN void LTFAT_NAME(pchirp)(const long long L, const long long n, LTFAT_COMPLEX *g) { const long long LL = 2 * L; const long long Lponen = positiverem_long((L + 1) * n, LL); for (long long m = 0; m < L; m++) { const long long idx = positiverem_long( positiverem_long(Lponen * m, LL) * m, LL); g[m] = cexp(1.0 * I * PI * idx / L); } /* const LTFAT_REAL LL=2.0*L; */ /* const LTFAT_REAL Lpone=L+1; */ /* for (ltfatInt m=0;m