From 8caab4e5628365ce88dd18d96078395e2bb4f7d7 Mon Sep 17 00:00:00 2001 From: Anna Bergamaschi Date: Tue, 13 Jun 2017 15:28:45 +0200 Subject: [PATCH] Modicfications for chiptestboard and moench03 module --- .../commonFiles/communication_funcs.c | 4 +- .../commonFiles/sls_detector_defs.h | 10 +- .../jctbDetectorServer/Makefile.ctb | 3 +- .../jctbDetectorServer/firmware_funcs.c | 1055 +++++++++-------- .../jctbDetectorServer/firmware_funcs.h | 21 +- .../jungfrauDetectorServerTest | Bin 130828 -> 114652 bytes .../jctbDetectorServer/mcb_funcs.c | 119 +- .../jctbDetectorServer/registers_m.h | 21 +- .../jctbDetectorServer/server_funcs.c | 406 ++++--- .../jctbDetectorServer/server_funcs.h | 3 + .../slsDetector/slsDetector.cpp | 2 +- .../slsDetector/slsDetectorActions.h | 3 - .../slsDetector/slsDetectorCommand.cpp | 86 +- 13 files changed, 974 insertions(+), 759 deletions(-) diff --git a/slsDetectorSoftware/commonFiles/communication_funcs.c b/slsDetectorSoftware/commonFiles/communication_funcs.c index 48aae9d30..c72722c92 100755 --- a/slsDetectorSoftware/commonFiles/communication_funcs.c +++ b/slsDetectorSoftware/commonFiles/communication_funcs.c @@ -328,9 +328,9 @@ int receiveData(int file_des, void* buf,int length, intType itype){ int nreceiving; int nreceived; if (file_des<0) return -1; - //#ifdef VERY_VERBOSE + #ifdef VERY_VERBOSE printf("want to receive %d Bytes\n", length); - //#endif + #endif while(length>0){ nreceiving = (length>send_rec_max_size) ? send_rec_max_size:length; diff --git a/slsDetectorSoftware/commonFiles/sls_detector_defs.h b/slsDetectorSoftware/commonFiles/sls_detector_defs.h index 6c44b47e5..faa425780 100755 --- a/slsDetectorSoftware/commonFiles/sls_detector_defs.h +++ b/slsDetectorSoftware/commonFiles/sls_detector_defs.h @@ -29,6 +29,9 @@ #define MAX_FPGAPROGRAMSIZE (2 * 1024 *1024) + +#define MAX_SCAN_LEVELS 2 + typedef char mystring[MAX_STR_LENGTH]; typedef double mysteps[MAX_SCAN_STEPS]; @@ -373,7 +376,12 @@ enum dacIndex { V_POWER_D = 103, /**new chiptest board */ V_POWER_IO =104, /**new chiptest board */ V_POWER_CHIP=105 ,/**new chiptest board */ - V_LIMIT=106 /**new chiptest board */ + I_POWER_A=106 , /**new chiptest board */ + I_POWER_B=107 , /**new chiptest board */ + I_POWER_C=108 , /**new chiptest board */ + I_POWER_D=109 , /**new chiptest board */ + I_POWER_IO=110 , /**new chiptest board */ + V_LIMIT=111 /**new chiptest board */ }; /** diff --git a/slsDetectorSoftware/jctbDetectorServer/Makefile.ctb b/slsDetectorSoftware/jctbDetectorServer/Makefile.ctb index ca00d71b9..52b5bb8df 100644 --- a/slsDetectorSoftware/jctbDetectorServer/Makefile.ctb +++ b/slsDetectorSoftware/jctbDetectorServer/Makefile.ctb @@ -16,7 +16,8 @@ INSTMODE= 0777 BINS = testlib_sharedlibc -SRCS = server.c server_funcs.c communication_funcs.c firmware_funcs.c mcb_funcs.c sharedmemory.c +SRCS = server.c server_funcs.c communication_funcs.c firmware_funcs.c slow_adc.c blackfin.c +#mcb_funcs.c sharedmemory.c OBJS = $(SRCS:%.c=%.o) diff --git a/slsDetectorSoftware/jctbDetectorServer/firmware_funcs.c b/slsDetectorSoftware/jctbDetectorServer/firmware_funcs.c index a95eed4e5..2fd223172 100755 --- a/slsDetectorSoftware/jctbDetectorServer/firmware_funcs.c +++ b/slsDetectorSoftware/jctbDetectorServer/firmware_funcs.c @@ -6,6 +6,7 @@ #include "server_defs.h" #include "firmware_funcs.h" #include "mcb_funcs.h" +#include "slow_adc.h" #include "registers_m.h" //#define VERBOSE @@ -47,6 +48,7 @@ #include #include +#include "blackfin.h" typedef struct ip_header_struct { u_int16_t ip_len; u_int8_t ip_tos; @@ -64,9 +66,6 @@ typedef struct ip_header_struct { struct timeval tss,tse,tsss; //for timing -//for memory mapping -u_int32_t CSP0BASE; - FILE *debugfp, *datafp; @@ -89,7 +88,7 @@ int adcConfigured=-1; u_int16_t *ram_values=NULL; char volatile *now_ptr=NULL; //u_int32_t volatile *values; -u_int16_t volatile *values; +extern u_int16_t volatile *values; int ram_size=0; int64_t totalTime=1; @@ -139,93 +138,96 @@ int digitalEnable=0; int vLimit=-100; +int nDacs; +int nAdcs; +char mtdvalue[10]; +int initDetector() { -int mapCSP0(void) { - printf("Mapping memory\n"); -#ifndef VIRTUAL - int fd; - fd = open("/dev/mem", O_RDWR | O_SYNC, 0); - if (fd == -1) { - printf("\nCan't find /dev/mem!\n"); - return FAIL; - } - printf("/dev/mem opened\n"); - - CSP0BASE = (u_int32_t)mmap(0, MEM_SIZE, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, CSP0); - if (CSP0BASE == (u_int32_t)MAP_FAILED) { - printf("\nCan't map memmory area!!\n"); - return FAIL; - } - printf("CSP0 mapped\n"); + int imod; + // sls_detector_module *myModule; + int n=getNModBoard(); + nModX=n; +#ifdef VERBOSE + printf("Board is for %d modules\n",n); #endif -#ifdef VIRTUAL - CSP0BASE = malloc(MEM_SIZE); - printf("memory allocated\n"); -#endif -#ifdef SHAREDMEMORY - if ( (res=inism(SMSV))<0) { - printf("error attaching shared memory! %i",res); - return FAIL; - } -#endif - printf("CSPObase is 0x%08x \n",CSP0BASE); - printf("CSPOBASE=from %08x to %08x\n",CSP0BASE,CSP0BASE+MEM_SIZE); - u_int32_t address; - address = FIFO_DATA_REG;//_OFF; - //values=(u_int32_t*)(CSP0BASE+address*2); - values=(u_int16_t*)(CSP0BASE+address*2); - printf("statusreg=%08x\n",bus_r(STATUS_REG)); - printf("\n\n"); - return OK; -} + + // nChans=N_CHAN; + // nChips=N_CHIP; + nDacs=N_DAC; + // nAdcs=N_ADC; -u_int16_t bus_r16(u_int32_t offset){ - volatile u_int16_t *ptr1; - ptr1=(u_int16_t*)(CSP0BASE+offset*2); - return *ptr1; -} +/* detectorModules=malloc(n*sizeof(sls_detector_module)); */ +/* detectorDacs=malloc(n*N_DAC*sizeof(int)); */ +/* detectorAdcs=malloc(n*N_ADC*sizeof(int)); */ +/* detectorChips=NULL; */ +/* detectorChans=NULL; */ +/* detectorAdcs=NULL; */ +/* if(myDetectorType != JUNGFRAU){ */ +/* detectorChips=malloc(n*N_CHIP*sizeof(int)); */ +/* detectorChans=malloc(n*N_CHIP*N_CHAN*sizeof(int)); */ +/* } */ -u_int16_t bus_w16(u_int32_t offset, u_int16_t data) { - volatile u_int16_t *ptr1; - ptr1=(u_int16_t*)(CSP0BASE+offset*2); - *ptr1=data; - return OK; -} +/* #ifdef VERBOSE */ +/* printf("modules from 0x%x to 0x%x\n",(unsigned int)(detectorModules), (unsigned int)(detectorModules+n)); */ +/* printf("dacs from 0x%x to 0x%x\n",(unsigned int)(detectorDacs), (unsigned int)(detectorDacs+n*N_DAC)); */ +/* printf("adcs from 0x%x to 0x%x\n",(unsigned int)(detectorAdcs), (unsigned int)(detectorAdcs+n*N_ADC)); */ +/* if(myDetectorType != JUNGFRAU){ */ +/* printf("chips from 0x%x to 0x%x\n",(unsigned int)(detectorChips), (unsigned int)(detectorChips+n*N_CHIP)); */ +/* printf("chans from 0x%x to 0x%x\n",(unsigned int)(detectorChans), (unsigned int)(detectorChans+n*N_CHIP*N_CHAN)); */ +/* } */ +/* #endif */ -/** ramType is DARK_IMAGE_REG or GAIN_IMAGE_REG */ -u_int16_t ram_w16(u_int32_t ramType, int adc, int adcCh, int Ch, u_int16_t data) { - unsigned int adr = (ramType | adc << 8 | adcCh << 5 | Ch ); - // printf("Writing to addr:%x\n",adr); - return bus_w16(adr,data); -} -/** ramType is DARK_IMAGE_REG or GAIN_IMAGE_REG */ -u_int16_t ram_r16(u_int32_t ramType, int adc, int adcCh, int Ch){ - unsigned int adr = (ramType | adc << 8 | adcCh << 5 | Ch ); - // printf("Reading from addr:%x\n",adr); - return bus_r16(adr); -} +/* for (imod=0; imoddacs=detectorDacs+imod*N_DAC; */ +/* (detectorModules+imod)->adcs=detectorAdcs+imod*N_ADC; */ +/* if(myDetectorType != JUNGFRAU){ */ +/* (detectorModules+imod)->chipregs=detectorChips+imod*N_CHIP; */ +/* (detectorModules+imod)->chanregs=detectorChans+imod*N_CHIP*N_CHAN; */ +/* } */ +/* (detectorModules+imod)->ndac=N_DAC; */ +/* (detectorModules+imod)->nadc=N_ADC; */ +/* (detectorModules+imod)->nchip=N_CHIP; */ +/* (detectorModules+imod)->nchan=N_CHIP*N_CHAN; */ +/* (detectorModules+imod)->module=imod; */ +/* (detectorModules+imod)->gain=0; */ +/* (detectorModules+imod)->offset=0; */ +/* (detectorModules+imod)->reg=0; */ +/* /\* initialize registers, dacs, retrieve sn, adc values etc *\/ */ +/* } */ +/* thisSettings=UNINITIALIZED; */ +/* sChan=noneSelected; */ +/* sChip=noneSelected; */ +/* sMod=noneSelected; */ +/* sDac=noneSelected; */ +/* sAdc=noneSelected; */ + +/* /\* */ +/* setCSregister(ALLMOD); //commented out by dhanya */ +/* setSSregister(ALLMOD); */ +/* counterClear(ALLMOD); */ +/* clearSSregister(ALLMOD); */ +/* putout("0000000000000000",ALLMOD); */ +/* *\/ */ -u_int32_t bus_w(u_int32_t offset, u_int32_t data) { - volatile u_int32_t *ptr1; +/* /\* initialize dynamic range etc. *\/ */ +/* /\* dynamicRange=getDynamicRange(); //always 16 not required commented out */ +/* nModX=setNMod(-1);*\/ */ - ptr1=(u_int32_t*)(CSP0BASE+offset*2); - *ptr1=data; +/* // dynamicRange=32; */ +/* // initChip(0, 0,ALLMOD); */ +/* //nModX=n; */ +/* // */ + allocateRAM(); return OK; } -u_int32_t bus_r(u_int32_t offset) { - volatile u_int32_t *ptr1; - ptr1=(u_int32_t*)(CSP0BASE+offset*2); - return *ptr1; -} - @@ -470,16 +472,24 @@ int configureFrequency(int val, int i) { u_int32_t tot; u_int32_t odd=1;//0; - + printf("Want to configure frequency of counter %d to %d\n",i,val); // printf("PLL reconfig reset\N"); bus_w(PLL_CNTRL_REG,(1<3) + if (i<0 || i>3) { + printf("wrong counter number %d\n",i); return -1; + } - if (val<=0) + if (val<=0) { + + printf("get value %d %d \n",i,clkDivider[i]); return clkDivider[i]; - - if (i==1 || i==2){ - if (val>40) printf("Too high frequency %d MHz for these ADCs!\n", val); + } + if (i==adc_clk_c){ + if (val>40) + { + printf("Too high frequency %d MHz for these ADCs!\n", val); + return clkDivider[i]; + } } tot= PLL_VCO_FREQ_MHZ/val; @@ -489,10 +499,10 @@ int configureFrequency(int val, int i) { h=l+1; odd=1; } - else - { - odd=0; - } + else + { + odd=0; + } printf("Counter %d: Low is %d, High is %d\n",i, l,h); @@ -518,7 +528,11 @@ int configureFrequency(int val, int i) { bus_w(PLL_CNTRL_REG,((1<> 32; - vMSB=v64&(0xffffffff); - bus_w(aMSB,vMSB); - // printf("Wreg64(%x,%x) %08x %08x %016llx\n", aLSB>>11, aMSB>>11, vLSB, vMSB, value); - } - return get64BitReg(aLSB, aMSB); - -} - -int64_t get64BitReg(int aLSB, int aMSB){ - int64_t v64; - u_int32_t vLSB,vMSB; - vLSB=bus_r(aLSB); - vMSB=bus_r(aMSB); - v64=vMSB; - v64=(v64<<32) | vLSB; - - // printf("reg64(%x,%x) %x %x %llx\n", aLSB, aMSB, vLSB, vMSB, v64); - - return v64; -} - int64_t setFrames(int64_t value){ return set64BitReg(value, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG); } @@ -1599,11 +1583,11 @@ int setDACRegister(int idac, int val, int imod) { /* #endif */ /* return val; */ } + - -int getTemperature(int tempSensor, int imod){ +int getTemperature(int tempSensor){ int val; - imod=0;//ignoring more than 1 mod for now + int imod=0;//ignoring more than 1 mod for now int i,j,repeats=6; u_int32_t tempVal=0; #ifdef VERBOSE @@ -1643,13 +1627,21 @@ int initHighVoltage(int val, int imod){ u_int32_t offw,codata; - u_int16_t valw, dacvalue; + u_int16_t valw, dacvalue=-1; int i,ddx,csdx,cdx;//iru, float alpha=0.55;//, fval=val; + + offw=DAC_REG; - if (val!=-1) { - - if (val<60) { + if (val!=-1) { + if (val<0) { + printf("val is %d: should switch the relais!\n", val); + val=-100; + dacvalue=0; + } else if (val==0) { + dacvalue=0; + val=0; + } else if (val<60) { dacvalue=0; val=60; } else if (val>=200) { @@ -1661,9 +1653,8 @@ int initHighVoltage(int val, int imod){ } printf ("****************************** setting val %d, dacval %d\n",val, dacvalue); - if (val>=0) { + // if (dacvalue>=0) { - offw=DAC_REG; ddx=8; csdx=10; cdx=9; codata=((dacvalue)&0xff); @@ -1681,24 +1672,24 @@ int initHighVoltage(int val, int imod){ valw=(valw&(~(0x1<=0) { + valw=bus_r(offw)|0xff00;; //switch on HV + } else { + valw=bus_r(offw)&0x7fff;//switch off HV + } + + bus_w(offw,(valw)); // stop point =start point of course */ - printf("Writing %d in HVDAC \n",dacvalue); bus_w(HV_REG,val); - } else { - valw=bus_r(offw)&0x7fff; - bus_w(offw,(valw)); - bus_w(HV_REG,0); - } - } + // } + } - return bus_r(HV_REG); + return (int16_t)bus_r(HV_REG); @@ -1709,18 +1700,18 @@ int initHighVoltage(int val, int imod){ int initConfGain(int isettings,int val,int imod){ int retval; - u_int32_t addr=CONFGAIN_REG; +/* u_int32_t addr=CONFGAIN_REG; */ - if(isettings!=-1){ -#ifdef VERBOSE - printf("Setting Gain of module:%d with val:%d\n",imod,val); -#endif - bus_w(addr,val); - } - retval=(bus_r(addr)); -#ifdef VERBOSE - printf("Value read from Gain reg is %d\n",retval); -#endif +/* if(isettings!=-1){ */ +/* #ifdef VERBOSE */ +/* printf("Setting Gain of module:%d with val:%d\n",imod,val); */ +/* #endif */ +/* bus_w(addr,val); */ +/* } */ +/* retval=(bus_r(addr)); */ +/* #ifdef VERBOSE */ +/* printf("Value read from Gain reg is %d\n",retval); */ +/* #endif */ return retval; } @@ -2163,7 +2154,7 @@ u_int16_t* fifo_read_event(int ns) if (i!=0 || ns!=0) { a=0; while (*((u_int16_t*)now_ptr)==*((u_int16_t*)(now_ptr)-1) && a++<10) { - *((u_int16_t*)now_ptr)=*values; + *((u_int16_t*)now_ptr)=*values; } } now_ptr+=2; @@ -2174,13 +2165,13 @@ u_int16_t* fifo_read_event(int ns) } } if (digitalEnable) { - // printf("+"); + printf("+"); bus_w16(DUMMY_REG,1<<9); // read strobe to digital fifo bus_w16(DUMMY_REG,0<<9); // read strobe to digital fifo *((u_int64_t*)now_ptr)=get64BitReg(FIFO_DIGITAL_DATA_LSB_REG,FIFO_DIGITAL_DATA_MSB_REG); //bit17 is clkout - printf("%d",(*((u_int64_t*)now_ptr)>>17)&1); + // printf("%d",(*((u_int64_t*)now_ptr)>>17)&1); now_ptr+=8; } @@ -2412,16 +2403,17 @@ int allocateRAM() { #ifdef VERBOSE printf("\nnmodx=%d nmody=%d dynamicRange=%d dataBytes=%d nFrames=%d nTrains=%d, size=%d\n",nModX,nModY,dynamicRange,dataBytes,nf,nt,(int)size ); #endif + if (size<=0) return FAIL; - if (size==ram_size) { + if (size==ram_size) { //#ifdef VERBOSE - printf("RAM of size %d already allocated: nothing to be done\n",(int) size); + printf("RAM of size %d already allocated: nothing to be done\n",(int) size); //#endif - return OK; - } - + return OK; + } + //#ifdef VERBOSE printf("reallocating ram %x, size %d\n",(unsigned int)ram_values, (int)size); @@ -2505,243 +2497,6 @@ int writeADC(int addr, int val) { return OK; } -int prepareSlowADCSeq() { - - // u_int16_t vv=0x3c40; - u_int16_t codata=( 1<<13) | (7<<10) | (7<<7) | (1<<6) | (0<<3) | (2<<1) | 1; - - u_int32_t valw; - int obit, ibit; - - int cnv_bit=16, sdi_bit=17, sck_bit=18; - - - // int oval=0; - - - printf("Codata is %04x\n",codata); - - /* //convert */ - valw=(1<> (13-ibit)) & 1); - // printf("%d",obit); - valw = obit << sdi_bit; - - bus_w(ADC_WRITE_REG,valw); - - usleep(20); - - bus_w(ADC_WRITE_REG,valw|(1<> (13-ibit)) & 1); - // printf("%d",obit); - valw = obit << sdi_bit; - - bus_w(ADC_WRITE_REG,valw); - - usleep(20); - - bus_w(ADC_WRITE_REG,valw|(1<7) - return -1; - - - prepareSlowADC(ichan); - - - /* printf("Codata is %04x\n",codata); */ - - /* /\* //convert *\/ */ - /* valw=(1<> (13-ibit)) & 1); */ - /* // printf("%d",obit); */ - /* valw = obit << sdi_bit; */ - - /* bus_w(ADC_WRITE_REG,valw); */ - - /* usleep(20); */ - - /* bus_w(ADC_WRITE_REG,valw|(1<> 8); - // printf("%i: %i %i\n",a, frame[a],v); - avg[a] += ((double)frame[a])/(double)frames; - //if(frame[a] == 8191) - // printf("ch %i: %u\n",a,frame[a]); - } - // printf("********\n"); - numberFrames++; - } - - //no more data or no data - else { - if(getFrames()>-2) { - dataret=FAIL; - printf("no data and run stopped: %d frames left\n",(int)(getFrames()+2)); - - } else { - dataret=FINISHED; - printf("acquisition successfully finished\n"); - - } - printf("dataret %d\n",dataret); - } - } - - - - //double nf = (double)numberFrames; - for(i =0; i < 1280; i++){ - adc = i / 256; - adcCh = (i - adc * 256) / 32; - Ch = i - adc * 256 - adcCh * 32; - adc--; - double v2 = avg[i]; - avg[i] = avg[i]/ ((double)numberFrames/(double)frames); - unsigned short v = (unsigned short)avg[i]; - printf("setting avg for channel %i(%i,%i,%i): %i (double= %f (%f))\t", i,adc,adcCh,Ch, v,avg[i],v2); - v=i*100; - ram_w16(DARK_IMAGE_REG,adc,adcCh,Ch,v-4096); - if(ram_r16(DARK_IMAGE_REG,adc,adcCh,Ch) != v-4096){ - printf("value is wrong (%i,%i,%i): %i \n",adc,adcCh,Ch, ram_r16(DARK_IMAGE_REG,adc,adcCh,Ch)); - } - } - - /*for(adc = 1; adc < 5; adc++){ - for(adcCh = 0; adcCh < 8; adcCh++){ - for(Ch=0 ; Ch < 32; Ch++){ - int channel = (adc+1) * 32 * 8 + adcCh * 32 + Ch; - double v2 = avg[channel]; - avg[channel] = avg[channel]/ ((double)numberFrames/(double)frames); - unsigned short v = (unsigned short)avg[channel]; - printf("setting avg for channel %i: %i (double= %f (%f))\t", channel, v,avg[channel],v2); - ram_w16(DARK_IMAGE_REG,adc,adcCh,Ch,v-4096); - if(ram_r16(DARK_IMAGE_REG,adc,adcCh,Ch) != v-4096){ - printf("value is wrong (%i,%i,%i): %i \n",adc,adcCh,Ch, ram_r16(DARK_IMAGE_REG,adc,adcCh,Ch)); - } - } - } - }*/ - - - - printf("frames: %i\n",numberFrames); - printf("corrected avg by: %f\n",(double)numberFrames/(double)frames); - - printf("restoring previous condition\n"); - setFrames(framesBefore); - setPeriod(periodBefore); - - printf("---------------------------\n"); - return 0; -} uint64_t readPatternWord(int addr) { uint64_t word=0; int cntrl=0; @@ -3586,8 +3223,8 @@ int getDacRegister(int dacnum) { bus_w(DAC_NUM_REG, dacnum); - printf("READ dac register value %d address %d\n",bus_r(DAC_VAL_OUT_REG),bus_r(DAC_NUM_REG)) ; - return bus_r(DAC_VAL_OUT_REG); + printf("READ dac register value %d address %d\n",(int16_t)bus_r(DAC_VAL_OUT_REG),bus_r(DAC_NUM_REG)) ; + return (int16_t)bus_r(DAC_VAL_OUT_REG); /* #define DAC_VAL_REG 121<<11 */ /* #define DAC_NUM_REG 122<<11 */ /* #define DAC_VAL_OUT_REG 42<<11 */ @@ -3757,6 +3394,136 @@ int setPower(int ind, int val) { } +void defineGPIOpins(){ + //define the gpio pins + system("echo 7 > /sys/class/gpio/export"); + system("echo 9 > /sys/class/gpio/export"); + //define their direction + system("echo in > /sys/class/gpio/gpio7/direction"); + system("echo out > /sys/class/gpio/gpio9/direction"); +} + +void resetFPGA(){ + cprintf(BLUE,"\n*** Reseting FPGA ***\n"); + FPGAdontTouchFlash(); + FPGATouchFlash(); + usleep(250*1000); +} + +void FPGAdontTouchFlash(){ + //tell FPGA to not touch flash + system("echo 0 > /sys/class/gpio/gpio9/value"); + //usleep(100*1000); +} + +void FPGATouchFlash(){ + //tell FPGA to touch flash to program itself + system("echo 1 > /sys/class/gpio/gpio9/value"); +} + + +int startWritingFPGAprogram(FILE** filefp){ +#ifdef VERY_VERBOSE + printf("\n at startWritingFPGAprogram \n"); +#endif + + //getting the drive + char output[255]; + FILE* fp = popen("awk \'$4== \"\\\"bitfile(spi)\\\"\" {print $1}\' /proc/mtd", "r"); + fgets(output, sizeof(output), fp); + pclose(fp); + strcpy(mtdvalue,"/dev/"); + char* pch = strtok(output,":"); + if(pch == NULL){ + cprintf(RED,"Could not get mtd value\n"); + return FAIL; + } + strcat(mtdvalue,pch); + printf ("\nFlash drive found: %s\n",mtdvalue); + + + FPGAdontTouchFlash(); + + //writing the program to flash + *filefp = fopen(mtdvalue, "w"); + if(*filefp == NULL){ + cprintf(RED,"Unable to open %s in write mode\n",mtdvalue); + return FAIL; + } + printf("flash ready for writing\n"); + + return OK; +} + + +void eraseFlash(){ +#ifdef VERY_VERBOSE + printf("\n at eraseFlash \n"); +#endif + + char command[255]; + sprintf(command,"flash_eraseall %s",mtdvalue); + system(command); + printf("flash erased\n"); +} + +int stopWritingFPGAprogram(FILE* filefp){ +#ifdef VERY_VERBOSE + printf("\n at stopWritingFPGAprogram \n"); +#endif + + int wait = 0; + if(filefp!= NULL){ + fclose(filefp); + wait = 1; + } + + //touch and program + FPGATouchFlash(); + + if(wait){ +#ifdef VERY_VERBOSE + printf("Waiting for FPGA to program from flash\n"); +#endif + //waiting for success or done + char output[255]; + int res=0; + while(res == 0){ + FILE* sysFile = popen("cat /sys/class/gpio/gpio7/value", "r"); + fgets(output, sizeof(output), sysFile); + pclose(sysFile); + sscanf(output,"%d",&res); +#ifdef VERY_VERBOSE + printf("gpi07 returned %d\n",res); +#endif + } + } + printf("FPGA has picked up the program from flash\n\n"); + + + return OK; +} + +int writeFPGAProgram(char* fpgasrc, size_t fsize, FILE* filefp){ +#ifdef VERY_VERBOSE + printf("\n at writeFPGAProgram \n"); + cprintf(BLUE,"address of fpgasrc:%p\n",(void *)fpgasrc); + cprintf(BLUE,"fsize:%d\n",fsize); + cprintf(BLUE,"pointer:%p\n",(void*)filefp); +#endif + + if(fwrite((void*)fpgasrc , sizeof(char) , fsize , filefp )!= fsize){ + cprintf(RED,"Could not write FPGA source to flash\n"); + return FAIL; + } +#ifdef VERY_VERBOSE + cprintf(BLUE,"program written to flash\n"); +#endif + return OK; +} + + + int powerChip(int arg) { //#ifndef CTB @@ -4050,3 +3817,249 @@ int setReadOutMode(int arg) { return v1; } + + +int writePowerI2C(int val, int nbit) { + + int nc=nbit/8; + int ic, ib, ii; + int ack; + int bsd=PWR_I2C_SDA_BIT, bsc=PWR_I2C_SCL_BIT,esd=PWR_I2C_SDA_EN_BIT, esc=PWR_I2C_SCL_EN_BIT; + + u_int16_t co; + + printf("Write power I2C\n"); + co=(1<>ib)&1)<>ib)&1)); + } + printf("\n"); + co=co&(~(1<>ib)&1)<>ib)&1)); + } + printf("\n"); + co=co&(~(1<St!R4{i%s4Gywp@IL6xL?r*k;C8&xZIkyY7 zA!+&}D0KwU0lNi9NL;Rh?jk;AJtO_}QN}<$dI>cUB%80X$IOh?;cjwS#5Uw0NUv@e zE`_An7z-;h7PHtK(dEqN8R^7!&V2p&fTj$w>!y8ao*0MxI8FXb+X={23qwI_*sheL zny$S%G@%2^4%cNDBh6+SU7mbK+BeGME*3vNphxhyIKhLwi5WoCXc22|08|S=L$_aB zLnKW%Gtv_*XI3k4O^h@yqs`rhO0!s}{J(j$)0HgddUd*g4b+zV&1j2Q4|oXDHxDo} zk#jp9_Ocgc#$@XHF&FzW-OfoZjMRUH&Y%aK(hi~mg7o(XbXG=sXK!vZW0(ibUPAgy zmPyUm9gGySU05ELq-$QmpvZ|8f+Nfr^3xT<(J+(k$O?`J|Dfn+P}j0LJA zNM-)YgpL+bwYk_Pi+B{J5v1G)x*d!m)W}G~$ANB7fNoFZi6`<{g!=$JuHGVk(8M6* ziD$+j`Al90k|UA4^ALlOC!RyoSDW+*gq*N5!W`lqExZts9)9Tn=J)~O zT!c~o0a`|o{<2N@GQwn2a=0=Ua~e(Qk*Vhdby$-{FQbdRlvs?~dIXD@-k(9>Iy0F- z+D@eH>`$FlOMPGf97CfskYbHuL~B%=CgnslBc8BDb1i{FjWLYa7*noE@o1kz3*ZKx)VPsf^)&UGeg(n?05;Za;?k|xcVf&OQ3ox?O~ z9Z0ivAknNzbdF|3=V-1oS(CPS3?nWc!*veVq~(qUf@8VPR83kr(#nyRqDgBl~>mcs2)=$>BOjY0?Z68PPD2>&(!kotp%SG>Pj> z*Q6bu%!r34bDg6#X;+bU6=`GqX*P?fo5~z?SW1pg=Q?>! zng?kfq>a<0)fF&eT>;mbtw}pRgAtF<;5x@^(hkoAg0`7lXO1Ru=PXR6SzPA?O`2sk zBU)y2op)){(u={W#a!nPHE9=-b`fcfnzUnc81dK~u5+R$?RW{0Dd9RNBMtLkFVE}! z<&3z$oa>yTDOfb05sT(?odue-bMrvzd0giVO@uz*GSMASz`( zT>j^1A$w;TUj+cv&%$(4eS(MT5=vgm|1%V#(t8DcOqxvvVJKilL%{`P@b_BG8j2fC zK?EPfb-8j41EA!nHG>JyNZh?TYoj~K+yz)4OmLvPJd_5$A-1W@#p=S0R6h#ZX(JJ0 zo{u4PhH%b^q);y%q_cW3atuZS;zat@*fyD;+JKij_GUGVn+rDd6a zY=oeT%k)$B1N7j7f_G5q(H&(x>!U&Ah&wUXh8;Sq(_QbXb=SK1=!dy`U9n}@P832* zD@rA3xsdUWET!rhDA; z@qZlB%gh0BaCcvz{g4OCkOOR~GsOE>AREol0UY(?_WYf;HQwClDi*u2Y3kZb8o2MP z$>TPd8?bln!f+u--)tdB)Da{8D-)DB;UB4OkQ)lyt33DDRIt76HUjHy%9Qh*F6~}3 z3VTi3bqA2;3qip`8n_?V(ZF@fLjLtsT03ti5uU80>00mdxGjyYU}nYTq-6FIN$>6S5dh#9aaP#{vlJ21k1idjO^$$pNLMBoYyTIvgakW9vlZYqb?_2B2 zjd9B_JrROcqd+Vv3`KYw#k!p1T0;2#{17bHmMz3W-7*Wsp;xN(sPd)hK`HEO%iA?# zAEjj;zcF0!7|oTc+}{sU?JxW}NOk_f0AGGS{7$6$-Gelu4p7M=I>6bE!uQdibDM>n z_%vHKy6EwBabu-N9^(E!W@<&@R=My`HtU1LE(t{~b36_NdNN1D@ZP;rwYB@zJmGKg zL;Vx@JUVy2kd(Aibgp?_w_`QFR}H_@1kOe0>fPm7)U4ozT9=}4MPe1d2<$Hwisoxq|lLfDBl0aR>01?}yS^|W$#B^IFkVcSBZnC(TDAe%AXL)OxuEOHZ!|b)99D?-nrdV^H%ZxH-E!dOCFw!gYyWCXE8>5R1HFmGD zK)qum<7~!YhX#;`?~d6pftj5y-aQUAH!!R|hNG`)ra^c&G2V6$!|Fv_hkY(wjwC#eH~9p5bs$F;F{1>6bYmm&Q#}ykAx3CS3??Xe{z2(74YuW=EQ0jO z#^xYWcUCmYwnPi^5v2DvhMOHOQvK*}Ge}f~90cj~#(Id-SP-w-l`k%z8G`Vd>+K+^ z@vDu!=UhDmGHdgRji-{^fT+$e7^<}@ULH?Yg)S{E3X3=R(*nAgDqimQ=he$XI=3He z)fc0%CnGhMfkxQ92K?h!i5q9KqOEb}E(~tT1K5wPQxx)*K;`z@+e8=<8!eX z?ZEMEn7bljlQhHP%9bO|mlx-D&4?c^V#UKn&tkwAY*TnDjFFb72sOh@>EpBZ=|Z7d(~?#! z8ZlXnm@E5zX{2w&AuX;!I6f@FHcX>d>kPdYX>FrDC1iG>_wsfG)THeQ8YUH5Ve{+5 zx`-L%ohIu`>l)_Q9&LX0QRV#${>=6O?}Pg}nfsj@8XN-+j>$Cm?fuY*!1S~*wV}bT z+bSqOyPsBFo)i?UyyY(8yg4r9z!>36b5fy7sWumA1#Lpvk#X{}OH-mh3A!|KHClu^+;jb1Rdq44`VYilN4sb8Rwy${a|4?M z&j*8rPm*g{t5B9Q#Hb{5O-_)Ob{iy9a4eB5Jepz(Y0VUlrWh;L-YDZ<>(`8E>FYhr zwHmti9Og6YRVEjbh9}HEnA8QS5j>*1lKdmuYe2X8^J-mNUD1I-6>P%?*){>%?T4%I zK2mwh(Mc{-P1Bjn_;npl73J5G+Z88>d|niL{NuRDH9kjP8gaR zZ;J&E9^ZJ8?8LlI^7JuYH;1adgq+lz(wEs2joT?+vV!*E^|=z ztEhgp=+CIVUas9Gm+FGbqD6(9jbp~yRH{-g6`)evNx6%w&`++(gNQo2)Sgp+ok&-S z*p6@IfC*#+V*QO7;!9rp(r#GF^k~3nu6OIrfwT~$MVkdK&1Acou}`OmP^@=1wOYhX z*klo;xOI)K^*Fn%7roxbll8#=`{ZH$9VSZTI(4GZBn#&V9?3)K2f`O=k+%0u4p}uI ztDC9@ylv9)4(u`?06vNinx@(`HUitfQ4(q{x(nyAQrL!XAx z@hExPS8^gssCtb(l13Z(c8mha^}u+MC0jLv>I{Q0dSuC_(gD)+Tx|ciCc%8#)#bBXlWbya zsK7zHrqRd~H-na&XJ2rAjctj#+kI+{6CGy|t?)%G@E`%-t;S{CTp&+;{4W-Mg9yh(t4K0px< z;CtltB6_Q4uQk@EUn|Nbm;eaqFlMA&M)&H|ck#lnGn4!{e+-x(&wdkC&Tsj@7#&-wIMh@l zr&`X5TrI2{n`CQ60)q5LhLtHq%`V;P(IdHg5y;LX-gFu zi^&1zC{hrl>Z)|4v|*;fDk5G&>ZKB@eWVI8-w9AyDJzDRUP0>5sx*w?<6Y9#RpEEP zu^q5_&BsKXnyxddHahKuTxJx0$tT$Y;$>Qpc$tV;2Tp@K4(Q-L62PeE#G40fO{MUQ zC{^VEBaN=gLp>HjnOE^fHBS|`92OTDy6r$k(@FP_F%O3FB)u8KWMs9Y;r0WV_tpMy z7?zlQdISz;noBTnUy=>n3X0_565M3_5VaJUb*4gVp4u>=iFEP53?Vs^36wKSMVFqD z{%T!`=C6(r4B19opv#OTj^L`v!$}>CsTho@r7(C|)ieyNbp)(>N-ZvkP&FuBQ<{JU zWZ$Mh`32U1ydWc(TGy!bz^0+v_8~o~wgsJ1nj)e({hJ1I8f%NTAX2A{hJ z8q^tbg2s4EuQ4VjgvU|OL0)7HrtYX-sF^jWUB@vaBTXM8Y#kpEnFm3RgQbsILFtWw zRWf|YowjTLknJ9ca_MzBx>%_n&VF~g+yS5eYlbTz>0!~J9sGI9c^ zc0IfO=BgED(bWJYdxKS{FXkF#W7S2l&c#yISmklOkJ;Ir>TtKXXPT8*s~nr|i>)6) zdAYt=c^bvW`C?Nj&*sk1Y_%L9l%wA8F{X>v0uB2^+GJ}nvJSl~SUMpjN zT%gfuKm{6|Ob}U-8;T7$0&;`aFN`|SL6AOOp>ji>co8FY zaqc^)7cP&Kj~BE9Ws|2_9?nM9^U=#SwD<*h4W69-*+!b&Ag&#|6Vh9$S(R^lPQ6*omh2^;K?=RY(XK><#YjrE?R?jEZzpQ?|DJv=PMNB= zrzp2VI6EoHb~RO@NFsEcdbD3(rmixK^x^W?Tn_9B6sN0v@nBg9LSSETVYvs)%V|U@ zW1vI04*&;2+P+*p>IWBsbT18T??L_UF+TRRBP&)G8%oh14s?KE9G@W`yQUam80iNC zg+r6GY!45-lVGS^PmB~8$Lc$lzFRI$z0k+riACE2EDE1QACLFs(OJtcf=3-V^RZf4 z{a?9ed3h*;>s(Q}Dv;W+M+=AXmyz}-INfdLHW!O;W4zP-4!$YRi1K^(&j9JWz#e|J*d&+%QpBL9q((j3XM|# zM*A9F64dBnU!$h@QeR((_?sHwtD$yJ?{CRQ{d;g(4w@qDZb6wPI%N8q`qmdu4QgtY zuc?0;jdK4!MMDGSF9tm&@$3l_&za?{mOkkFiu!#|1e4%~-wP)CUPII~25{l)MHng4Iq3As;Ml&ja-Na&k|47NFH$9FJ9i zt_GQ3#psFq(>8^2OQdW9s-395lW<#1k%sIQ}j$8BRz?99emXM^+yY_7|3?bDv~-6$M^G8 zCra1@ma3Cnm^Lke9|C-7f8Se+(Ibbbc(n-|Z)_7tdNHxW{%NVU?>I%~_ua`4sx4w6 zI*A~?xP)Bl0`&akjy2yv%^K81kbWT7RB@$M(r^8+HL2#0Hcdx+ilWm?hRa8e-cVg+ zEcdELAv_3@97Ge&CFSVTjMaqVX`FQ8mIoR~koGNc%6C^S0OCuItymQgd|QW2-k+@5IdC77T1W5P;HLYAuUE84Es&~rVe3--ScFxVep zuy=tlmt%yNEh#o_(%)j*P>64UV$+~-M4O!Q@e&w+mMAH2%PBc1ljAG%TRCMaQl|P+ zUPnsz8m;Z@I8xeOwAVj96fOf`nPf$Kwn;zoXZ<-iOFHDwc{nMklJoi4P;&n=u^u?HKH)br#y=y$Ds%y>=ZyZ-n!o`U zBm08WkySucj)K*-}OphEv)l>#rHZ(Iv?68T}szleO~+N6`dY%?4T zig~s?0ODh%i1agmiKl%fR3PoX5=ZX@8k|Qid#_}LE5rNc&ngf z+Ga#IR~S$zZ&8=;Qr0MV^1PoospAb4--CPvDH|YK0m6l}!$?Dr(iaKkg(W%15j`%0 zxUsM&h+m_48}bpPe=Q`z^1>=cdMiaDF)}``AQ!B^EF?{9I>$(7hci(587UPz zEkz#>D5|>otf-s+b1X(btr9Y3WY`p{3~b5;s+XPFE!$gOYw2p~hhCSXLxYE7+7Hj| zeBDcc$b-UyiwTzb)ZqSwdh_It*MVI%(yHaOM;EH1j3gPkRQNUsvg_;Gs5Tj)zy_){ z(&u=(I7;|y{Oo!d-8ej-?4ReXfgQsqKA{>7JXJk1 zutdILB}Nsoq^TAvI(R>G$2!l;bzXHHa@$=I2BR=%R)5=Z^cF#KEYM2l${WWI=Li?<^>^bOxJj^(mZ1(L{ z^9<^SG;l!F?Ne9A8-%o?fHS`bh4InW;LP{>`#Qq)RDn(-hg87RKI~lmg@oC-KI_{noJSYV&kq4pA6XUX z!p~8u>$YNR_y0d#XslGaP&A6VuypBdyHMJr3p3=B0n<%1OgAgxIpTCH3PB%Jz~S$3 zH#*!s|09gqJ1|g?y&(nPAM5Yb;n!D^LV^8@TF0*BkJ zP%?v8f5lX;AhicbQK=Ysb_LJ82lcn-(GC8*HrH=mD}CqU!h3U~{WOTH#C_q)3+Q(t zXrS`#!aLGnENGzY22#I=23kcoNdGGZ4W`al2K~q=1(^2muDAZQ$-M7V*j}$WJ1~9DwrZtsU zfNAuKz$VL#>bDmS*Ovc3bIBSEMtDU(%oI59rvE2g@&}#5C7QL-C$CTG)OkWDN-Cqb z=!A^2R9+Q<`_a$+m1IJDe0e}3JP)9!u~~3b!rix$k(%ZSkCqKiH!i@9)CH>51TcM` z+mE2Q;`mAm=ysiOsw~C!ayr~@+%a&tZ9!*#FUNG|a#yqL!8u8e%a&zX22JnP4RzVc z_IG1zGU>C5jdY|xbq!Kg7xD}lkt#xqE|U*e@bY14l4Hrf*dW9TToYYpS1kN~PgI5= zXm1Lz^Mn`5jTw6}2mvgmh@Qk&vHUPXXfKbm{V_tNIq2bQ>9i(IZT$^@+SeGH24BgO z03V?0Yl!8!DliP^F$@UO%jFi=JPACN=m_Foh z`qwgBDCO_*r~X2N(0wvOr-2>~>?Xvh8H=mRbsx~U++z$&BUavyJQhFrodB;6;sk%{ zy>L-E^AE+Qm?AP}Tz8TiE5~81$}-$Yp}Zo+X1Hz7yx}VGr)V0v>QCh%-vaU(_?MAy zg=$9)TM#0KEhs=d6d_Oe^s?^)HS#bkfshPOO>zjcxKu`!B&YKhb}9%ovQ&tDWva zAcGUrJ0IQD-j(@pS9_4x`&x9o%EwNVfIdMcFSZ6>+E_nfd+UnH{ye8JzjB0a$Q`@i z)yuNd^EATaQwwjaVxaFg=f=x&b9g41_OY48Jx~wyIC#?t|E`QNW58oFct4-I(Q66&Q9qTdNQ|nQY*fySoWIuG5Da8{xTi z!S%kYt{Fa-fNASZ5|twM#e@d+V<;zA*Trz}0}L&LaA|ms(pX$K0pM!Vp&Bvubcny` zQYK+bhEvmlhkPA~^YfY90UJC(w)lI1`v#x|g0!WSX5AQLldB6rah6uZ^OJCq6t^*p zV)-jhjt`g58>6Nh`DETKF0s_(C@91l%9B}v!PWcovvfReTrI?ntA#KvmKKY3@Uy6c zQz(wK77+9>Py_D=-8+y>1fMN%0Qi6mk~{(SGA(39)52nmRBRsul_(DsfeKtkQ-&+- zw!`)BP<6Q4K-sWmM*NemEkonLhfombIOU0z)5z0B7+A=oncUYW{iImT1pb-8AM=}Y zuBmnZ3^zO@tsy|ZbQ$d|>S2Jkh$ZMTg7id*@XG}WD~B%QtaY7TUeX(Xx1`aX`xAH^ zEvf6g?4{+X&9w{Ze_vV;u@I=bwxoMan|lkknxl~0v6L}X(F}lF%hkPPrWk^<2M^(O zoqUz`5LcH<)eHE0wjiW7T>;3xmrh*y||h7t`}nxQ3>S!OS~Ju`ytj6FHA3T( z!MVMeS7Dmirgm4v86D$iBB4z_2v_66CrdJN4-~aJv=G(Nbve}ep^R?NMue^<#`3EF zV`b{4e_Azl<1ULb#a=tM^x2TiKhIJxaxfRkx8j;}GM3XeoK@6gt?FLmaTl43#iE6J z1mV#YgF`0F5}sa>W>H^n>HwQ|fV&q|_O_zmoR3N3H*AnsUIbt%yKv#gigfl~;rW&E zY_%|bWqjfyuc}($fi}LXn!_-VgN|1!7Vcj;ik%>rO{cPKqVWF8_=(Z}8rP4CcPT`T2!$PE+ z!V4>nAs^lpEGv!dAB3i=c=nX=i>e81vmoO8u<%_~eBwUTQuGRCi~{s}NEo|%2)k97 zwR)sJX9;He5_rGP6zW!+jI;ceJa9c21;13fBXOZpIKDa|Bg>yj$sFI}QpYLTpX0;| zc-I18zj1ZhsEr!qvg~!l|{!grE8o>3zM?+>5?3%bPEJxi%r=34gXS zX0d)~_5K_V(4LwvWUos}Snp44L?=cYCz-840xuWL7q+fTSXk=Mreuy!_CvGybIgFY zU_LgiC#T@K!=@K&gL;?gFP8y@lR*EWLil7|!p1@V3`*wsaemM`e-01OLuJsR=C0QE zlkKfOd59ehUTlG3q!_2EdIWS9iimo_tyr`OdIUV8C*2$*%-xzOEZG`cM4k)RAcx@o zQnmvwm~@*;)iLwLb{xdEFQM&pq;(e*$kGyRZroBBW0#&p-M@;MD+`n>eu8ytf-rMqH1t{1Xo%^uE;o6V&tn#&=L1KZMQ$XlJqw^C^RdNhdc^2J z8P-=Oc7gEpMsp38-V8c8WTfvZakTta{jP3DT^YMjS4>++6~Nyzs3~nqo3B=TCGGP9 zCC_BgDr*JS2vTB!S;Rx5(w{Pfq)kcChmQHGwN@&i$@}Jo454yUc}3hl5MZCOC{{E* z=B_X+MaX=$-dF8GO|=ynjI8WJFnV!!4$jtb`{p^I3!rTT=@U|qmasV~p6k$?}6??53dFQBH6~m-=LzMvNJxi5`CRgR>He*L^%xyN(69{4} z@>-F{NEP|rYwF#P!k4vj{AB`>$Rv5Z#a{bhLz8(nz|9WD!)!U-DWE@KcT zHPhwuPx4w^>DX_0rA42KPVxq6u*XhFKts6~@bShmgWVlCeaW5TViNpWfh4vqsE{5?roY6b_7ylW1UI768MX1tLLQX82lC|a3-nF*LM zxC|0@-jf!73XPsxCLFsb19#;|qzfP3GYz*1z8p!F`!T|kTTJ0T6fL#p@Gg|@S|+Tk zrP6PW6b{$ssM+t;CaIrSYKsS_E@#Bl#QzM@ao9T2kaofC(ksomW$L3^Fr9?-`_r<&pSV4-7V7Uetq!I~pL7E@ zx1)ah&Hn(qTfMMb-$$4Fz%I^q2~f>rD-)3aw5xmE4svp`!F)L0vJ46{Yl_Q-$*FanYDcegOZSD%`i7 zW|t>baBPo*9C{(ufGG?gW#FLWpD9r*AM)4vajNjq_S~dgOgRMUv8nQ6i`1UdyOYaVhpP{CamLqN)ZR8!*%nmg=_$%#OiT(0#8%HRCAYGg+R6mq; zx1t%t{OBtd3R1VD2!izHWV2X?iINOZ`%{!}TAX&J_-=a%%N~w5G14zne6?ZL3}xy? z#@Qe;t(Ye%LgT|}ai8BsR^DPL1$t7Tu$sl*B|N#)l)rMU*66!vEbhJBRoCKbp|_$I z!|+?z>}uX#YMT zL#&mR9RJwD5L{5Ph&Mpz8!LA-pM(zdw@Jd2j|?t0ufl6ltCXa-C(+eS9x1#p<+qc} z;(9-6o~>F9(ma|BtM~*hg$W;T4oEX}U=TX9(8Dnkgrr9kK$%)pd%0J&cd42wE+MGi zAk_OVN7(gfT23y8FjszY%l8FCt65wj3)6p?87T^rYfArOl#$CJ_gbmU1BJbs+9WrX z-#SJ+2rXl9_?x5fK$X9v3D#Zcs2lJH1%V+}nks`SJ`ep(23r_YYz2=0PjKL{i<#JpH$sfx#PyBFJn(Y0%KmE^*=!Ulm7Z-3*3*|@p5g(OgGDl##(F2M#%}?!w4LF7SVy~ zRdnwQmfl>LRuMnAN_1U8ynCWh-jI-y3MDjkU-ueL!0Lf)1j#XxHcn00IFS(@Z=TWaOU?C7P!pH8HoZZPkvYgT@`q02o6OM1N_2P(1Z8~=dSXoBTiUHDQ!NUIx~`V)HFcd=y>K<2&WP`x zgZH9!e_5@&t~u9`8(#+wq9?Iy(6<`v4#>b$6U^dKFC7L`trcb*XT}hf_@SnbdIfSc?e}KVxyIb#2-Spe1cHBcQ9n>cP4r7X=5wvIRGFfFOp~21BurhW^tBW@}9(#{@iqVTfQ!lke@B*S`%AeB(qiB zi=O79Yiu&9Ou?4yFXi3i+z>5!5(RMO?Huy9*B! z;@w0Yokn|*jv!6RCWRSKzKb>@MP?8JTe4ZJh{Y~|gi10a%8|V4aw{a{0cCUZ!JA#`1QUFUUgmf0(bc)CB;m->vHTKDO7uP2{UEuwKX7LnDsS24~jb==B@ z#zeJ$5Kj+1lpwEUHC?j){WucYXF(Cl-5vzxPsGQoki1DwE*3Xq>TV`o+OQMniqJnN z@5kDnEHW%~ym$nk#)H zxrZVAxzVbA<~HT1pZ7IAX1Wt(!Fb4W=K|XfW!jY1>Y?tmI!LUL8(EjD4*l(Nnc+lp zC%yg~2+HA@=kwTrl zGPjV7Mc8zsz4pk}4X#6wnGa_PPaa+#*A3^KZv4!ba_p|egj8Pjk&0?Oca9ob_xI6{HY5$B9-h7(Ww7AUxrW6{I}zfoH9?Jpg5LuKj8h3na#Q-{6g7`_GN4>PSr!UM zpUX%{$7lLJN+*#Q2l1ww--Y();_|=vLSd3Fmoe&##Df@9r2;VBHz{Y2Bq?-OVG8=+T={=-JzJerxa zRc<5_05`~u#N(@4ZiK#81vR4fLr8f(%@k}LC-n0J=<|-j!b8s|Bs~1ZBxKMG@VM_a zv)0q@tw7%^-SdU;%jXA&tocHC>v_HpQ1q)hK1vLDA;UQG3-}&#v8bMeU6;q5C<8Hl zAymGQ8m`b*c=Uy-2}+gQjf?Hx&$Z+73`nL_P{(B?z^VhO9T$2JS80XrZqvF&gHrst zAwYDT1JLb%qT@78E9Vo}`CH*^zLELQo1qaO(nm8iH2s5`8Sig~UY?@y@7+o<*F?kA zyEjV!uH&=by`g5#e-@zGd5AgRsPK-vih6T^Ifzht5X38aKT}zt-F+a4U}VPkN?&~@ z{L+#39|Al3*=(7gIEbc-K7h4;CYYN4Q(#S>Es=qdn>GFLj5@@ee8Aw98a@*qYo0O; zx-6ZL1~gZS5rvf7Y^Ws$N1HafNqKf7WP&B!xXzwe?SLK=?~VuJMPWEJ)~ENz)6k=YN` zJJN;vm!}$Ys&Oz=-R+pvtnAf8dBW;?y70lv=BaoMmJ3F2mk*Icld-h;(REhXvSQ0bVU=h+jiNJ+3JiGqnvbB;Z?sa~N9OSb{N3zKD(_5%ch^j|W7)A>{ihv5r@!8_3?H8VFx+vrb53XlG5A#Aq^F@)2Y z7~zwj)fwR66QdX$lVgO{Kc71FFbH$F`pHZkX%<84((%xIBkG=vR?gwc za`7!}A>Vo_^_ghF`5M_m_D2gheol+*wrC;s7i0^mj25bYLAH>o(Zbldfjdsy=dP$pFeU7eSN6}Nx*hdkl8Z8DOHtPx%GW1RYKgC+ za(%g}bu@+i)Z9}(%bPna4ShN~Y5v24HgwAARw<8x%uhhu{ z@u9)vR=(ah=xm^REeaz@14cj>$M>GKP3U}oRMqhfaK_wkA@eV8G*v3q9EMsTa@31` zNT`zX3NCjC;Cz`%mqcpepH^lhl#k-)YKuXUqkw&Mt)dBjoQly#+}67GUe_)(_d#l{ zs{#MhLy39o@faiZd#n%VNBlU~1vTXYm=6Hv0~zI4Qv)c=2rpF7D>5kmmj=~+4yEf; z43)knN(>wys2&0pzR-9CD_V`v@~c5bPoOIO;)Ts#Q z$npTnW0PIsghaW4Qa9GNpmR%8g=lB7txyJbP_JYgz)Oa8bab4anuuqPoOtR)JC-Ko zBS`V7YAS~xR|$O66_UVeL$;~qsDU6&%Ym@MH-eOl@1yueuu0j7oJ9md%9Kx2l#38l z`6|*8qzl6_rtjheGAeNBu0}y6HA~)tU*rA z`aIF59(ZrS(YbQ49XRm*W;BWM>%(!{Cg8M9$Pwq&)jb~M%w z5TB=$8Y?{=><%N$ly)+JTbin z59HS5qa|Ai{t)hShbx)%y>UEFi~$Hi>eL+K66qLd9OTFl4)-Sr#T42g!kxtnNS&@g4-{byjcxn>dn;(9{jos2es z{GUY3WdK8vn$`1VI$x3Rp^^Rix+Axl&erHfuJX}3z8gO#uBRD}S_n984mibW4X1RE ztqw2Yf|<79TD)q15Y9Ty6Bx;&kAOyfI$xQrll02}IVgyW6@YxMhKBL+lrC3&X?+=O zv2{Xo^PnVE!3s@`RS`C3FAj7~5%g~E#$)K-dr8A0AaMH+9QPb1X4Z*ln;@96*(f;17vGo{Yw5xd^< z>^8z=PHe*&((qa}VFc&l+gNG^o6^-v`eng3H|@KyN&*IgbpNnOtH*bs%)x2f>5Auf zTSEB|=%=@!pWgB+Gk$c0znqN^E=V!Fljy5Pv37qf7)WFUW36?6f&G7@dx`m87t3FS zwr7N&>5l3~T&t{i`x}u@x9dK=<)uSIEh7I6w*{~y9Y`s}VN%w+Sc?wV@NU|YK;7eO_nR?Mh1Wd&$uyQ_oF$Ob${QGsg%whxNuLV3`4u0>=|F;LOg?*xLBy5-*|2fYe>IV}5 zh>0M1;C0Z5Um=}j{ZG05exRVTvpRe@M~4r&>-)HUp$2=Eb%Hr(M!x`*0Jr~gsFvG* zAv62pv;f6CHvgmx2A6~ezmMAu{S)lp_nUp=Q=<3&|A5*Lg7Rhq#G4VH3ThA)TcP-GU({BtIC z9AUhRJeJ7dEN=UV??-BCSZ|gKqMi-SXP{7!Q0OHS;!#4C0)6*ICzlBLGW8|xzYXop zQ?eh4cAj>GYQ@hunPWpVJ?*>sKLE6fU{4XFh5mXd6ee&%$;Nr0YKo~GukXqNhg{Hf zFn*YEx?R`V?d^6HVI_l7Qcp@r-KX6$O|Ih-db@i^$8~6Eivecw#_P}?y@_>5X|Q^w z%p2X%ihg<%-j(umL(n|q$tee#rN)uyxhS~B4W@;=ZljICp9`*Q0P}Goj@E!oP9yCV zRfNbP=zoV!s~??Dzaw<4K<8;6Iv0(KkI+rk8_y=cHZYHaH;9bU5%lVa523?B2$72( zc`oOLlJeDxatP9{M9@eFeOpdFgH#0R!9*NioL77ia83{9@_IAOo<`|I_z0srde`yaVF{V zRnL+UccPq9lo_a!6{2iBJoH-&k$=Rn5hyx>OAhh1HAt?M)}t-GoSK*^Jbfg~L@4)- zu|>uBLzXc9=jdRJ|0t(^JlcoxujHs_bO7TY$tlj!0gRt!Z-?;#mM{kEJR(Z3U})&{5(YUqdkKMB|{w@@Aa5E;5{;Aj~Sxxs4;QC&Zp_J(xS zy92#=JCWQdZza=RO8O~dg%c}S{0#FZyyLt{IcKKc=c4zzYEroJtz6{6M2lzvWh^K` zxufEPA&g_mQp%S4G&Q=gP>JFQ(g#MEM)6&}DOn8RLeTs~{2WX>o&X|$s9NM8NT-eT zF5&&ypzlWtg4AjhcCJsbeGc!3Y5}e#xTxy?g8iQ=A3;$B>4;pp7?n>T1wr~DOc6>g zvdnsriXffwr;_7_nvb6`FKZ}=CoM{y-$ZBZP9r3k{M$IYrpWFTJ_MTBa@ARg+|9^w zYd%Aw?<%SyNQcqau+4a!Wit#-MxneWAzY~{)Yhc%0VrMW>#o+HadtmD`n(hs?N&ui zNZXLg1y|ylgm)fFOZWp8Bc{~j?sjySw!y=v3qGZnaZvXgub_X}q(9?rM}k-Kcm@99 zOyR`8j@gaz>``I)ms7*fZq|!uHw!O($s10@;CDesjY@CqM&nPzwn38i?0#w#uN z3Wl#L)xzt($_n#JgT2C$uhP`CGhdkvqfp);m;d~h(DhY%bc{ct?be$vA^Iz`Fth8R z;njh;e3V@7{#(K)U73cb{RxY134<>;8j6shK#II2ym~p)km*nO*G=K`%g5Dbk6uZL z@(ds}!+>VP%@>6~d_7cXzY=aZCZ`he8*U0$u1r>IWPd#w$Yy zn!I&GIQw<#fD!(L&KrkZZ(2%tq3xT&LfqAt4F46YcA)--aOP^J;m7`j>Knq1t49p; zkf1;ta6@o>lVq6cPq_KrkKg%*4cBds6m^?lYx{O7%Vr3pyGO7?gn8XU$h$GGb#_}> z)+EfjK0D;!(XSo49v&X@b^oWHWw(dC(ceCRW!Hrlp>omYHy&l#1a`1jI{eLlyWY0! zdXG5^BM~zLEc<)C{g)wZI`SU)=C7{bQ{Fksi$LDXdi$ji_OQ__nZIdwBj-KJX#<3C zn@(pJgdz`gfBG{=RU+e6TMzHlE zuj-!GvDM-Gf#m+pZ*0`DzYU2U8o{jni)&QYU)=AwshL4~RJASy>`@x&62CAd14uZ)7B}PqIUHq~-GVxg*QlaU(dfpdZhQyFbBNY5!9q`*8S~15iQ^ z*r!_9B%3J?C**PU>-G4HcaY+S@T(cv$KoP*J^rqSo|XO-UlhuPTl<-bvg`CbUjw24 z!L52j_Zl0|N7OhYV3jt-<%=&h5G;Zcf^UM52?!QB-4sXgU>t8C_%$#d)sSCNOf@Hz zpjZU#CNb8cE`!}59?hR zbA8Pfye0*QZB|(Yzv-8r&0HMB%&@ymY=7Iw_2D9dxm5h5J__LhzF6FeqpqC|Lz>_- z;pMXNy3)E7(ZZ1P&7%gs1%~hXZ=DhR0+74Co{<*IXNRw&!GHBD7V8@57KR@G7c`~w zTVD(}42pY%pS5-tZbnraIgZ88-_E z(om{>j*$ENim$(+44KUd4IKuiu3-_+HLb43iWnNu0YaI{EsOYFNcD!;-yF&=44D&Z zPe@|3a%gx<_7Qw5jwfhE%s<}1(gZ40 z?_1CmVP=?($ICG>JU6!3nr0ZT4WY{)d<%5#`aH3#K3}|Af8`Xk?s^un5X9it8bkih zIHZrgCws;{G!16>ra?7B4Lo-vA}Yk}hkRfZ#aTfL{-S9HJUj z@?Zn5GoeJWxF7R)KUy)qS_&u;^ZEHgq%{hkYngD+YAq9D4y`GW=g%+X`Ev>HNQ5$8 zY0V9DcB$xTh(gGEim{GB*QV=ZtPvHKGJbKoee0)YhOQ$_(A(cLv!;b-x3J>bEpN(t zHgjRRj$tmrLUynr52*xE$tAQHiPw>+lymUkmm`h9sfmJa3A(YM$$-ChOEPOtI=f}- ztJFDyk9Wg$V}3cq@ELvuPbqDGG?|?oB69YV$!z+VJ_JmVd{M-_4s3?&FZP%ecBnoe zO6+%~u&E)1I{WezHjDkW{c&WoKehiXg&jX66o(e{J2KsCay#Gfew-Y^KlCCtz4otD zusBuOCk$tQ%>56yEO|%tvsh^^ZNbkbZn0k+&eq0m;mGB67XOWNVoNI~@2~6|QrXAD zyXy^NcfI|3Dw`F1;#=si-|{VWFUB@iIN(}ipELrmoiG@CrXh60N^6*PLJb{QPr~m9 z;I*!hLZE*o+`eZ7yJzITqjiRFhuvL~uA33p&kC2?EpW=%(lw8CfK_EuM3|orlV~7*5p^O-4nSPr6X?wmT@bN#J3vZ#h;FP>8N*L>3kfr>b4d=g&#TC z8kx;4Y+5?+DP84kK<#o%ta%+FFa_c7k_ti7S&0Cq8emUXz zZ+{_!eJLa%)LuB6U2ba*jVR~cu5G* z+V}B!Kd7Y(P^T4jdas#wV_W|CZe31s*tXyLa%o5`lw zoMA02ev?u@-2UleHpX-ciwG@MoFU5eu%De3D%-gwths#9HN1Rpy0wP1 zgCh@>q9{<6T}8A4~*15uCE?`YEuC`n&-+v@?F%EzHa+_^#8$b`&hlDKe#$ru5pt9wl};5_yB z2z~#!e_QDHOlU4Fh@{lV{@!11%~+gn_e%Y)zVU1pdm<#dZ8zNyWN-z`AhzwcFCWL| zhSwg55Ni+EpB=}VGG00Wx*wpCVlFHlVC4V5;?6y+s_RVnYaO<5L`1|RA|g2=AR@uz z5s@GwL4t@#kRT$V1QZDB2@o!Z7~(;tmRLejsoM~0s3nFNN~mKLsU_6UI@Vzv#yAeO zj`ddS7=wgCN*zbP-#%z-dYSqD_?~B;$JgJ!tjoLJ_g$C0_6EKhWxQI>^4e9*G=-V$ z94ELeznWJ%7E!OvktU}%^!`}8EMFq3r&&horVpqY6t9aLuXdT`pze*Y)gyDIpM4br zSXI7yZLSOoeQT1F**~EoXG@lI_P?jOzb_W+^~U!+4bNZg?w0&4DcxaGsOgym>tgMS zHYsY?GAF6A!O|ym`CqxWc#?a$ z#e5}mjB$9s6K4AMf9YA5_V%lT!Fb{4{c6HI>7j zt6y!MCj)dj{p!Ve(m%42A4hqzSgzcvMOnpG?e7o?$frail>L*DG<*iI)seIeCr*p# zi--A>#E0Keqe7&2=5u#VJP6EUWc_R9O=2beq`YsI|M}l2-`;Z)KbPmSE6T~i@aTH~ zUG*fjB>buD**DmtrLHyNw*^{>3_$#^{U~>*(0*iWL^sw`FOJ^1W%O9X6TNJ4@wgpo z@O&8%RzaI8wrV~9@saj*lVLd}j70)=MwuL6)V{u~5aZ12cdkfZ$3xBImhYV}y<#f1 zeww7!J(e_UM6lxo&)}rhS$ao@KU&CT=k}L09S_^mVTtPrSoxbaJ^En2TraI24ZytnV zRqc7m(=OCW$KMJaQRV0S4ihca&zwh8Ip#d_RfP6oX_;-#)ux4!@vL#1_I&Vo*uUDi zZRAOTk1n{b#bAgwI5uw6hU8{~tC_!q9mRO14WJ{Vl9oYxo@5(<&}87g$FO}*tq)^m zIb*zfAxs+W+sN7Wj`|=>Cg`f1)%XPrLfOu$Wr6hZ%5ko6;_nPxweX=AtCvjePhWj9 zRu-Ifwl0t+-I}k|D+^?a%WAf`)P&#tRNEP24LU*14wrt;H@5M`)HZ(M%r?H7 z+NSOemqxdCYHYXZs`J!zKhF8_chs}tGBmX79c@+Zc(sea-OVrL=Epd+P#Xy#ZHrPn z6WkXf%4sCG6K!(3r$#K4o<1#<)bh^okF-=HrM7cC&FpFpFvrqLz1Gsr3#C_5JH~9^ zrr*g_!o!~Sb2wdG>Dsn(w|?iFyn0;ZLBwJ>j6}T=j70zXr8*QLy>-9%a%9X3UL;+0t&dZrFOnX*J&#YS7fCl=#p9E9 zEt%y@wR@2?PI&oC7jygKNBs7OktGgMr+&UhPIB*bb}_cEvon3O{smvEeT&e~$5xh` zYL1ky-i4#)n6&MeP?Pr48tsp?O$?D~Z~T3m_Wb|o`UhXByPlUpx_`c{o_JoSs7}!` zV1CPx{|`eG1C9D5d&gM@$^NMugYgf!YD)C~iU0Q_W9NE~GOfte{wmoJb6y}D47_Jl zUyGKLbbmiu-5xEyJignfO~>|`quI&Q3eZNUACG!;ZNnqAGn)3Vysci0mZ7>UV~-kM zkUD7%{-U2hH>VBz>u$N5$5x_QuH*gx*7Nw+s@7Odxn}HzWC_+rC)3J+0s!9 zmdL5P{~V{*ERja%BbUGab#$A_MddB`)oJ(^{hTEs^2YmT?tMp*Mc@$o)kx zgI&dsi zF4}KGQSgx#5AN#SSUJVVc*AIZbp7KSE~c+-w_?!d(e>A^*rU-9&3<(K_y48_EtP({ zrOs-~QbwWYoYjp>Ws&X=|DoPqD*Nm|C=pjbC{ZuR$yECmj$2C9@MY5d$@R2lGV00k z{$(=6B9?EOST_#an+ zBLlBCerik7Z*Hop9?NB@+_QNz~xJ12}C^zZYwo6$d8|)w8h6g3;@CsRDFG@#W6{Tu* zlJw+QXveKd(kI4H`klWUebrDZgzi)Qd*gZBoWmSyDCM_qmX42JZCZMD7CC2?>UccV zzh}qeWgKUY$oS|LxH_1-!KJGEOENTa^7WAoI$rV8r))o6&6@E#^U+*Ub|~&@bZOV8 zj{HB_yfrQKcV9gE{%;>WiglXF+Ax{5VRETj`;zpqPp0(b(xYu0%O^JINtR{0X?AMd zN<4bBPhG!KRy?`azfy*~q*Fk8=_s~oU*YJLQZ+nFUy(opVXhdET^#y{LRaiy z*9U*~q_aP|9`%oEXr>HHI9aiTwY%=>$%;{V4jg%yzGW79V=UfAN3-6tC9OV9+lrXN z=Fg++9lz3L4z%$Tl|4p&dSE8c?~3PS(|<0T#X9U{g(ISNWy;GkUHu?SF7*B7KRGaP zyYc#IESbB`X+3prR6V->nJU-F$!^W(G|jYxJUH9&DLIRPbC*=p8X1&z zo{9H7Q}!CObaM988{@9_a;4XH#h$Zn&br?j#ZeDOJ@1U)x!!z?zcVZNs|@_Uh5p&Q z^;y~n1}1)6OyN()nLOyQ2Y+qctwrO=_U3P1l~Z)(RHv=XneFtdek~JQ_Tww2wbJDE z-#_@Po7c*%Pxn5@Y-ZD6|5^>omL5SPc}KRA|FX+Jd5>amdyxC$H|oZ08B1A_kN3pY z)7jEr_q&VgK(;KGVQN8+Tq-B3$8u15`frY2$dNZBdjIrQ>HEj`J~RH$QI9+sE7e{0 zvh`@-I+?4p@7*@~YA?&A4Ki%94?k#p`Hw#Zplx3MdgOKg(cf>7V|7P8^QDVCnpwb` zE4A%)>EjVPK?n;{gls~#B0G>>6OQ)1E_di$qn}@FT$i7nQ)cwdHv0Q!&vaBbmau7c zdWsMy5I4{N6|w$rRs6VKw($R#S}v|&^^1P|cOE&5+(a~G6yzbt!^i;Q=qZlAUn2im zswKPS^rNqo$q#jE_je75G`Ha~RDn#LP-;_)9h1ksXDnvU@=l%f4!yM;6cQj_R+^4v@ zE=Or(Zvq=FFACA{qB^uy23eDGigQYgF^Nl_H+&QoL z7EgKE^qR08$7HRulonZY!i-TxIawPt%M_HB7z=WZg^#N(%2}JUZX-7wZMjfr6;){o zsVqjTEX+6C*LSQC{}0OK_~TK|W1Pv_y-`WKb|S%Uws_jP~PP_H!l_0tu){6&Iq-hVpn-#R|? z-&mmc&+kqCvkEspPH=Oz8n9iqs@30-O?H!g&?(fLp@dpcu=+_xGkd`7Qp`+h= zN6uCJ(P^Z*Fk^9^t(O(Qv94rop0Ok^$5@nO$y!%DP18i(`L3L*{`g(_cjM@3C8fnh zIj=7CHHDTrs;|_@e?J=kJ=rA3CKlxsX4%G_=c5-NE#1XB&DzvNgd*+838WjTN3Q%8 zxxlrYwRr```Njz2?BX|zXRoE_70-UPa9zRdoU+1#qLPvO&;1Yg*X0`@r?5U?P|8u%E3mZ6x^1>a?`aJ)M?;B=|MQfPes_Z5Y#r2HQx+l|POdw(?9*mu7ve z{YY`P5Wt)x70-D(;a^Xe^~MI{44>eI3yt3C-fPyCz{@zEe1(25{FMzcC?Lc#_XbX8;NnkIy=nh zTkI&_cv8U1{H!$=+mKsOn3K;v)+&#O;nxbXbDorA8;^;Ytn4=_rpT586A7#B#w$5R zS;aY777O_)cqFmy8u|*cmI3_F-96%~5rg@X%4X}ltYTx~y0sf}vW=yMwitafe&-ey zyf!i^5U#eCk2HMxpJokP3B?7aMQi^wgV@wRdZIyL;mr8N`a*$>s8yhVjDM%ucbJuGG9(n0}G@{ z?XQ({_1dbE>oe7HJLP1xce^}ntvJJq^s$)#K?vu^;s&3bYscDk?L36EPsCr#_b*KE z=UEZK^@zr#$JEZXdzxt1v~!=Q#N}T^q&Rz#FV6pML<}(Cv9wo#otXp zK~GByee>#9HgQsQTd3dT&gf)L(!-?KqyDNxP8nUs z=^&@qY^Q2Zhg5XE3)Bl8JhF9#tM@ykztz4@2>ZQ?us;GjAkkuf7UDqrE3gj^D8hj# zc2J-zbb~(7ABI4FGn7LtjEBtE4jIq_3*lzC71qK!xE~&Xm*F+VDjcZTfr=dl;1EOs z2Nclra|C)v=mGgX8Tue-hEXsEroc3~9_B+T(o>Os7u*96z=N;@cEYpp9J~f^!XbFy zs)*5!LX38XUeFtwVF-+YagY{`rbVNffkqd>t#CWs1MA^I*a|!033v`(fH&c7cppAg zgrhT0Ag<6G`oR!r#dMBw93;RDxCR!%jc_~M0bAiAcmke+^>CjeCzc2~u}qPMLLm($ ziX7i94fNWf$k71_EA?~3S1AdnzgTs1I*HQ1>R7^-4-G4 z;*PsicK5U*`cDec&;9-zkPYhrJx>r6IDoYVeBcpy9A1RP%V0GzhgAkCXRr-omBDUB z+-nx%9#$Gk5@IM5=D~c$Dg_@1id;pCd`K(A3D^UB;blcie<5WEjDXSb5bS`b;aNrM zT!qvbp&5q3449`#yFelBLSZzFg;>cBYuR@Ja-VXP|21QOw7INAexE>ZNavlwumkVjoJQ@@dDP%|jOo8cG z+8#?gK`hZ{#T0$`xvvJEh6GOE158g>yW0kjz(M!`7j)x-i;DQ#B*fRDnA{1IyTb<9 z1bg6lOiq^`+z)TT0Zg5Osi}B~bVE&8HXX~Nu&5H!Drz}6#f5G-1Rr8rOeblnq~(&9 z$RqFs9Dw&Ru?Hshhn?^wyaoF)trw>ChM6#1k%|i;=#Hf-uv87~fSp(h3r)*Vq|Y5O zUHS}SDm0phM)QU-k-${=EF=z6aY(0H{kiV5ew+m3yL@={zno2_L+=#*>p0D=XggEV&KGsOB6(jeZPa99xr z?i;x8#&tKYPqGLxsSu*jBovy0LQ_!4YX?tOHHsj-#I#ffO20%Q{E`(hgO<;r)|knP(7Up1UIE2MaMj6t01}Silnt7!?uD z^>D6-qd+(cM7jzQ>86Ni&ZCPMD5Ljta6l0+^znW9fFfcpu+F=vh}a??dp0U!>1H98 zZdJsx+d?esQ$!;1oJiMSK|Ci3MZC06h?j`V_jW3b?1gVH>REwV(JA&7%9j|K|VgrsQy@@5lb{FV&)zpX4Wer zfEEVO!dXFVqL>x&Y@HC#?p4I>Dwf^VSn3d#I--c+FcvluiU>i05EPi-jAdG|#9=Ja zPJ=y!u)e_P8ACxa6tskdOGp??0kIUYl;B%R@Wo+?I4rTuj0Hjz5g#B#d=M6J6k>(5 zB9g+fL?o8Dh9z#&@)TO021{TWY=_6;9oVmkv1LMxEryhgaYYf({=W@bLr`nt(zE(iupXh)WW2$wY#4BEh*L z7e&_-oPh+V2@;%c1gBevw!ha<vMyF|ZcaK}IyxM&aTfTW)sBE;k{ zm;_VcLD&kpKUup^gC^6U$+UPfE%tC0!owBD!34M-=0j^G2UQ%@!+mrUVqprg;As@X z(+6U5PfYGfOn4F#Q}Epsd^eTrQ@QSyNq5Rtgf|L!qkwO!5WeZ0_i%ombISFl-03JV z9R+;5I6ujGFz2E4f8U#2xXlGxI-Qozh^PA{LR>KeSNKzqKLyRCqM1}QlLBT^0DpW# z1YpX5YFG=0;RAva1!keZtdsCG#D%kP;j95Tq=-OV7KqCN!(ascKadQ8WC$#Sb#3va_dqMm4emS_%26Cx-BHo_)&7M`Ow4AL8h6)^`_&B0Z3N?;k| z1`5nYfjLJw@1Xyi(9nd2W;X^F510&7A@i4c2N{CMV1`_ut6ks7^-Y`~=e!GIp}ANn zm>>%#$bwNY7zO8%eje%PaeW@w=V8%#STux~2_a@eilB8P2lyxiAH~t4I9jwUk8Wn+ zB|0Vwjez(*6yHDRF2r-5oUi9RAL6o5T=rZn*W+OYtfZe~f%#Y7IG6xy;4X-Qkti5>nf@P1MbA44@w^KRgeJHZZioBf z0f?`j?@;)zLx?ESMUgIwbWs^_4W!^G3XU3t!wO%JvE%8)&`xiPrZ+{Of@k0*c!iOV z;CzALjA^0&$Fwox(Xv=twiKT&#bkqDffvrA$W3Y~~EBfl0%i18?Z3h?S>> zSlJC};YwP#5|^yRB`c|5B^6|tgvbb1M2ba-ltOqMb}3>N6|ACyRrPS6B2sC2DlJbf zfn|zV?IOf#1N4FZFdb&n|5p=Cs|lvnWw0D>hdW>$+zWBRYFw}yU#`ZNtLcubPrz>2 z124kM@D{uShv0ohq|x#;TAt<#-JlWra6g{=iHcb3$Bs(?{Xb_18&Nfi$Z3IXkl@H6 zICA>opdunLRRpHW%N8Op4-y-B+u;>>LlNtG*wi?$i1jGA9tAhh@(r|n1Nkvl3p@kQDk2}><>R{ooe%}~unV44L}3GuzKx35NWa}k zx7}C)E8$6a8s3Dr74Zi7-yr`RQ7}dk%}qiyH!I?x5aOW1^?a@uL4x)TD^c4_#%3)e zDc)#>18_(YWuE*dZ6geXCRhclAuTSW#c$G*H)+Y6i7*+K!wQJ&-o$lplKxH7ze(?T zvqKS^XwW7aR8IPG(wCRe|I5ob*v$&+D^PHY zhY(x5U>eMT^>CjewhpolGOUPgAwp~mQ$!`Euf+7<#&zGub=xlqvHgl7svLQ^cZS3C z|0=q}JH0}@a|s5+P(|!W;O%4*BqnyWDdM|W;Ja90$0^RwK)TTm@_pBZ>jp>#-=%_T z#)E3cgX&Fivm$ox5@P2bMeGXaO=l!*fQ|4Ryr78PPW1oXE{dq5g>|&BE*GwcC*Ub~ z3li1e_Yvaz{)*V+C&ZorMf@OIh#$m4V&Dgrkb-|e!9O6#en60646#qIhz~l1_@Gk} zjsEP11aeOA_<-Kgh~kYX-e{%bMk;P>g3XW&jar60Xo2{!5g-2WrVu~8t%x7B3Gt)D z5L5pMQ#X;WiF8fV^2w31-4)@IG;if#I~OovGbU`tH_iB_`2k;T2t|BM0UuMq#}P0Jroc2<1UJIH zumNJZkFngx#Ky4rUu_^}6Hl6gUY7zo2)1f-%LQ&DRY?-o*^D|CaTYbD*MDDWu?e2Rjf zqF@{O+Q`?I4l^N^ZL?z9L)+tDr|j-FIRJL%g=-;QtF@ojq?On?{RWknp*331FGx5ll+~x>HnP+@JlZIk_+dndD~s9h>Nt~A}#oNix59=Q^bi9 zUfYzxbMS&9et`vkfdx)Q3UMkLa(;^QFWZIq@;JLPY3#~mK=R!yhcw{c9!Rj?BUtZO z330z#5yMIJ|6zRh5Ys%wG!Ko?2cqf2gAj!tqR_)KNI?(xz%cQYNY7|RK4Ucr`AjeeEwBv^!eK=k zIX7zOHJtAv!!9!Hf!(l2k-qF@_?i^y7bm12yD)y2;Wb6h5JJvSAiFvBac)4CBKy6|j=0Wq z19}nmX_^=J7EMaiNGZ_XGwRC>w#Q1!Od_hJPo@cE#66scg14SctyNjCdAw2 za4Xyn8|nXVH&GB#TSL_Dj3+}POo3^z3Rc5Au%CiFDagn}CItpjU_>Q~RPkUzfzcGW z6c;VUMc+#m;(O_^6P|!H@Ow0HCobEG%XaxwP9U^m;$4`y&Vz-97n1_P(?;+dtHbwu z74aP(A-?0!%4mR<(GaUxVqya^v7rGrLM*TW3s?@Ycs&R^U?;o?FSF*uaekA6DPC$Tt5x! z_hfgsjNM%!MU*0S=+5{ z7y<1V0R!0{4)mgc6BKX?o`V<2Prtv%NT^#wJ_{^@8_8EfzH-P&YDbLpC9n@pO!ei$ zB6t#7yE#CkK1?}?=7alSGsJZFc2F=C>)a^N2L?f28Q3vr*fD3=F}B;qliou5O`J1l z*tM}g%^aW*g!eqi@5RnPWB=G>*bciOL;lzvMLLJDQBFUU&U=J(u7{1V3HCwuug6jG zI7~P;j0`c5$zyCTJOB^Di|`uhy+|Jf(;)Z9`H_$F@mO;F4p;{pd82clH#)tL{cytr zcvHMA4Yw8XfGB=ILDLQjIgNt7@tHTKo4!fN>6;Zf(_6@yeoR79OhPC!o1OXDC^)BC z$T^1d7jBnmB38uhmSgQzcJnEeUZ^J%COlK6B&M4qBz(701 z__>ksa}(p|5ysCBdVf2;|2QkngRC^^GcBitXgR}5(vg*bjlxJ=HMCwa|i=- z7^49hj*%hAU5Fr07y+Z$@6@s1X%C&C3mYngROD&)L0}Y2p);q@nODU!@DeGj=mV?h z1FP1MKikzv)l?N_5*$z5cjSIcq0E3_zlCg%2 zb*T(r>98Eq+3L2#9gtzHj?TDeAJ0wuVGE>_@9BV@l$%Ytd5jiVtQw2GYZT&LA3Ei` zVH`w2G=CS(-=*MpDfrzgSPikzyIAPm`|u%(*rSLe429uTOoeq+SVv!~Yk`MhI~8N{ zJ(#@C%y|gxg_jf|NiRviK95}ltA&FD92|th@BsrYCfR(OaF7&I+J)7Odm*NOVqG1=>wtcd$X+%G0*iwW9%57N_sf_gS?_L0w@e1R|? zCc+EwBKh6O?*Rj$2}Z+MXvL?mU4~MDgn=@VchJ9oSFB3Ki?2Cp1D_Q-o`Z zsHljFiY%}YZiU++E-S)iMHk^^_yC0kin~HLh@!@^T;+(XoFOJxF}aE*R4lQ#4A+(8GCy3V zZOXkzf%Ozv9|5Ca6Kuw36!1O;yuSz56BAgV0Shz~!Hsms!*oZw+3rDtc9_|o3O=QR zPdWdT^ELyszB`liX(neH(0>KefUl`-8|PN0l!^P84)!z0F^i8aV{VIOZi|Pl@DOA=ab`Lh=g3^=OvYp~rZUy^GtDqH zO>`o^E7uuU3<{(?1LYZ*nhd!1tII-s#grG!)D_Ge8C(nNU@ns~uMuQ0b6_w&u_LJL z2r4@U5IY7CmLr1Yh*;Rk=KBfQ4SN*v?645eK48ekB|*64*$U1p;c?gnsqoor-1p|b zA0$SCh>@U5SOq&^Cmf>x2i@ldijEg3_Rt6V!xC5q8(36^yxDW1!hu{%-3Z8-VV?F(tpb`X?7_H-z7<=djJzxL~f)OwZ(xA~aXml=I z4>!ThumSOA98jSr6;36HrV>O`iG``ef|ozr5P>iiro*jpJNqDvl+PryJ#m2TiGyrU zC~QyYA+DQ->!uMq(}*4K{X%#jfTv+Mi&hkwjv~_op^3$-C;i{Y$iXI7v71@NQm`)t z`w~391dlHk@x>y(1f?%Q=@-lDHXioD0p1)(^X51f=EEXLz8U13fv;!a>lyfZ2EO)p z=FPGzqJ8Oe&s9aLyz+12BC6rVmJi8L$#o zK};QhsRR1qAg`YNc=a3rsc04z&7!H$HGA&7q-J4kOXtI1Q*~%UO{6zvnvdR;k<%2@Cq7>&845urJv8m zw{!9BTzozkp9htPFQgIFRQODv>i3u)OxTDFjuEv$ok6|snd z7g2DeBTq!mJP~2ZC@i@+oV~V4Hf&(DM#_z*+~|6^51xnCUS1Kq@`@N=zCgwo$oRr> z*adIG+q^pVX5Jv%V-LMA^!w0;g4&W7a5Uhr^ zupJ(U_;?vUj`!x3wI3{jWe``!&XJTVH!K%zL2C{El1>tPo>$wxOjKDx1oxMl^eSwV|e(Bc(?aF}=D!MqC( zg{|-qq`M~3U0>pNM2eR%?MtaJ9a8X16#NoCeF>i?JMpgE1=8YVTAYlDlQD7f0eFy| zAzZf-*R4DRkH8*y9zNu0SjTL4g4ymAlNK#@qQz`q2xo8Rl6dBlMCJnP0F%KGW4t3{ zyfb4qH{7`~6$PfEfDzXiag9$PBczFutC^9jg@I`w1Jiy6p7jho`3x{23@~Ag9}SEj zjf?|C_v||Qdk6i!lkSHFgRx);3WT7*{5EIuSdf-nLL zL|}mkqBw#mUQ|J}R}!4w1g9TCNX0Q!yo7?6P;e|2#!}(ZQ^eF6VrCODvzgckBQ_$4 z1v9Y_f@`qc3OD+HQZ&AZ#pJg!c^{u05F{A{Ng5f_$dFOac?G5Hj{CnARE7 z(lUQqHj@fxQei+Wrj5t622AUYX^SxJMof#PW@9N+C8n*yv>uq&ixCY)=Ap=Z8Ze&* zEWqar@c9DDT|l`DXutv*5MGaE_hCuOTcmxI^Mb&X3Z`_%l&)|H-p7=CF=Yd$Y{Hby zm=agT;i_e%TSmHgS{zS{6Z`1}gG99_mNa6?(^#^bt(Oe8Ue@qo2BuDR!=fmXh9YUT zunsoT|I?aCh~}%%Jk>}-AGizdfyZGNya+Gjf?iy3iI$|$k~CUCOBd17j1pW#KhL1x z3<^%UMfBgHTr9H+%d8?sRuLns1|i)sEeQouU_Sjnt%w6ENTY(ZVfcVeB7F5SzIr(p z#^dwL`1~3^_rd4>@F70e;rsjWA>E1sohfi!AWJwCF~E4>!g%144f9x%WwIp8CMM{P z6X=cx>N8N^#2Whl#9b_@&ak99OORkfcTDJUgx3ijtc*HY8J!?#4iYr2@Fu*?3doHW zkOx7uogmr)DcDHC(+I9<1lRNj#FQYmLSZ-ymK`iuYKXBSVr(NM7W@Z@HETY>h6QH! z!1DxM7(o{S8(<^BXHW1s!aQhU0YQrcY4NkP>{(hCgsFot_3TuFGM%8@NKkHK`o@KG zaN*o=rsYV2)QKQ*DzY6gT_qIMHeyBXiM;M+E$lNsN3>zR$_`IR$?n1_`>)3A)co|2gTaAF^SgW8)$a zn#hM@omQUfX9oy5+oYG#2E-llM2v_J;*SLCWy~Pbua~hUNFicD@{ls58mU4mkqV@i zw8O{)y(t>k=wjLPblcXbBZ9F(JW7C=!lDBGE`J5|1Pz z$w(@aj$|U)NFHKA3K5iCQihZx6-Xsgg;XQ8NFA~lY0z8cl12`ikY=O>X+sVp?Z|PY z3pt6LM!Jz63F) zNv%SfIY#MKO^9~ff}rp!6kc^2=|*~x^GGjp3AuvwBZJ5={$KTgf&`)lptmJKeZgGKq`@H zq!y_|_96{PBhrMlAZ^HDq#ZeqbRj2^(?~bcgPcctkxR%Gb3GL|Z&5otkA zBJId=qzkD-nvlcDUZeqOM%s{Sq*gDtk!Ra!q#Nl$$iMA4{@+FcTc~6Um2aVvEhw|4 z61jq))K(*+-6QiBGHyAK^dgrK3frnjTo41|j(8$Yl>0z0EB%pVgmNky5R|Cw*UN8{ h=G)PTZ#Mr?*|(b!D){ytz1&VA+ryDegnQeY|1Xm}^nm~X literal 130828 zcmb?^3w%`7wfC8X$4QvL2>~1o$O)nbL>(f^gojQ73Pd17Oc539grJ}z1OyEaaS~7> zqRt3b^xAfU++OO%-U(`(!_an6i?p@vpx#fkROfgwM(blht$_mb{ny^-HIs+7-fAe}*)WB!k$>+##= zU*9E@RY917a23MU2-lW4f+1C%j^|a8QEeOuB(k%6}UpW!HYVubCLbZFgdUT&um52Y0e@+e<9TJ4p zVkIY6$}h=Xdgr$7KdcHZ6h?=XoQ@F{z#tc)+}X$FRli30uYa{r5dE(IaI_0Tv^QEN zP(AcU&qjWVD|hCyGG%IFAC+_9ccCy-ZMrK5K@17bel8<_xwE&c%uP_LOjvff^xPV0 z4GY@O9yRI`+8;*T$%x>OL`8oRArZY_PAH8BrN)l1=#xsM5bC}Q_1-0D|K};ed6|?@ zM0d`j*04kDCwbM+?h+_ydma`2p0;(V!9_@4lwRJs)S)_;maB3!3qjEKZx@`?QC3J&(`BG|sE1(B@ zX2CfZEjWspqj#4!p90T6i&~RWk9=HlxTQ+bM;r?Nt`yxaf1py(W|a{9TT3$2J$iao zNnde@tGm>xB@*!JwM;-50D9lHH3?o!qF>9@0fIxlx?Ie8wa}}MLJkCN@YWpgp&M`R zWgNd*z)#Rdl*H!5qUZ^y=sKVbbxv}{6wx`%H5XLx*q4jo@k`sh>MWF;wX75++*>Qu zu`lN$c#%?}j>q%(mjygmn`I~kT#qtKmzAN+kZ#KmrEh%3sA~o*w+rQVEt`pyQ;!&R z#cXvIVph<`jpJ_))Nrx>j1=&|C|k;T;|PN_<3x8ytyfJ6Wz~>VfQ+E+ctp?! z&aY65L8s!E^FtNtC_IgNSqdHUij@`WEWFKnndsGPIeK%spj{2jIqjv;Our~*OMH2~QF2@fU`C5$yr%>)ri0i{81HZ z4KEaEB#2H?It=;bMN1L1x3(k|;&np?2<;Am#%R7wqs9&cQnMeVWi&zRw)1Rp zO=AVMX{^*X!WLJ3iJ(?rBDKl3IQddRl`oarifnNKx1a{xQrr2qxE&>^w?t|iWs8d- zE`qp`wm9$QXz%4x+Xc2b{}qDjzd~xe&=x06fPOMTYP-l5SL_kgVvp1|+7`ETA|&fX zscnoc&NUfhc(T-1Y>P`EE`hjp)xw;wISQPR{`@ zbELM3wzwlzf_kJ%YMW$>8&(ZotCrfXft=8#Mtd(^PFYfO5hUTF<@+G9+?Y|gEXDla zROwcANp^cNUzj61ns^i18SMN6?JW0z7}6ER2*t)#jeG_1Y zgBBFgISw!lD57(WS>iR6cx`z(=AJABf;zCNP&VKlMe0$&D+j!K9Y?2`dJL(@ka`NK zcLc|%qksczG2WlMh-g4qSu}VWahWveRp(H9)xCleGi)?4`l=85pQtJL<57!l!%${e z-G?Z1X>bPUZEsn&Tb#h;_kyDWW7W zPbO*hbq;hT6_0a(OH8Yy9wqDRK19iBo4vBVSBItb>R^dV4}@-P=osm}3q5KxK|T+2 zF#7X~FevARM&yO2lvEsIFIIaVR#L$o zptCO??M%~W%(S3MQ<2fs-nYBZ)?IbEHG<{^JsWhmTQ20B)4$8nbMfOM`aGsYq7l%r zw<`jy`nW_H`q219R0Q6MXm9qP^4Ynij}%9VOrE(0wPkY4Bw(LpeAKyRmzZfLw_we0 z@Qc+OhtRe|by;ZJn~zz%G7NMiUg^4RzkZC?cGM$bU|MQ&3-xp#teFLE$z{RlW#9^9 zbaRQpbwrXFeUXb+g^yhtj27CsM{o`TpM`C_oXIVD4^f|oS^MdYqVY`_YHhF<`(vI3V+8VRr)DD`p*G&Y?JfPVDogW%6=!qZB2hB+L z6m$yBy)4eSm*j%MQP%?kt-eSiH0w}j0;}%&c#@fB>9loN*X9VG7Fr3!qbkFkq?Og< z(h7$vt=IyI@b073J>|cXbAqGwkN1L%m%yWg6BCJbB;8%iuM$oP-p}Ho3 zyPv|kG|TM(PpjY{6?Prru|9ymQICIU-e2au8P%diau_QD%JrtAAy-zT;GeDzlKZOJ zeOl-B^`B(9`pYfQ-$$*0X1GGozS=}s&`N^JS==SE(Gp{nZxaWYvDiFVWyzY`xMY?SnZlHL`60POLgq(kqq4WoJ*J0n2JNHn0- zMOP@}`j5?Dq2yP3)$M5E_7!~fQYBbCJikX+Ct;_Eu^zV5Vkkz1G15fmK#A(JdOveK z-L~l)IjmSRw@D;PABpY+-3^Jo0PS1=`d4oH0C@#%zyge5SB^iSG7qVo|5ufZnSEPa$aYH&TBRr?~LTWju}eVZbk< zOB+K14LrYl`Pj=$i|F!^Y-o9~p^>H0;+6=wCBjC<&mW;t(ZRHjuSSwy*xih>{SlJs z0j$o0O8RW*O5^5yaI?LxOm05gND_a%E2hk^BxyX_zot?Y`$C5(f=%Z}Jm+9`Jy4!R zPfsh3m4~B!n;Gl)HT4id70>j+MR+!ob9>=b-^x+x)HQD0>BQlNH56?`sGNJ*6SWvVDAyM-vs(0Zw$S4!4xl~ ztc(?j3>&Ta6oRHHdzAyg=X6y#I#VX93_^R+KftxGj_Z{(!qG|K1Q~GUds>hh3S5r& z8F-(;-X9KJ%*q-ihNHyDv>f$;bMYQPi2y567wFtS14G#DKn?`WAD|u%03SDczWbgW z!FqD2s~PQn31tzq@<4N1Z_HW}WP3<4q$6l0fj*dRY28KtspKJ~AZQl^0vO-7fzD$+fEkJA2pSo0jfewp(K!VAuOShCKf;)iXlCX4erv{A>mH;q ziP&PM1=uXbBw{<)<4A`CcbR&PvLY$%vk0;?+&|nM%;kxs>p8 zz#2{KB^r-mj7QS$+hJ2{Px8hk&L=9BP64Pi62&hA660fJp6!#j|_a|Rj(lS znFk0?7=1{xl%(#Xb0g6_`2c#yb=u*>`xIJPqDB|ZJ~U_KNM6+gxE{cz75#z-EGf`= zbu=8Uq*AojsL?go0?;mzG1Ii_bnR`Xg^kq_ldF9GPuQrs0IgWC>KRb-=bL$-30hL- zH0=d!6KvhXrRGTKSHN`jC7Z=;Xq|*ng}G1Cq{oq#!*@*bLq;66oJ+h2lfGlX>Bjuq zmBh2-mnrd%ZRjV*z^8G@*dVxfFECnC6|l|dSh-`p3L3)ZkO03P(D`uPd1N8sG&Fd4 z#d)1q83u3GnrR6eZ%Uo!>N-%cj!{qq1#51{eg>#nh1!y6ch_t3uO6bA)r}d+i}~7z zSt$aH`?L8rfl@ix**Y+m`WLeXdV$*|B$iH`OS}5U4pm$Mox!p8JT%8p9-}8>X?X@p z)7`P#F)x8jt)9SI7jlr(%|54pFg(fTbdfAyXdQI1^CC9w#^AX>4mW6-K9>*1T;4x= zt=o^fI6eiT0=DWrRV!7m_0O$tJXri-aI&pk4{I)>8xZ4=vs#PrVJ&=q2xG}EJw*~?CZJ~xfV%t#FC0>L#AEp z4lnY7_7o#k`l53c6%wb;#8L_ox6+EAB$=Q!kEnzG08U1K)Ui=P?}F1M{TF!f(~J42 zsKcl*xIGO0*y<-f8VG(*ykBPFXwYZ)Kt=x0_+&gC&smUH=> zi!CmXK^6;6;_?`*5nXdR&qExX00%ewVm5kG>j?t2o-j1lNgIG+46P>)Rv8D67#{0_ zgYPt39n+;I>7vEDE^5rqQb?+VZ$T5)?1rY{#@;Z+{Je=<9BA&ac7)4dc^PVsR-SWv zQvx}R@oS6<+F>R*4>l#ixq|kWDy$MV5@ez{U~)tpspo9HYga zD~w!WmTN!DCHQ6Vw>ty3iUL2yz`^xwf!e z7LDTjj223v7@iGDWW^rxMi6gMFo9=d7oBL<&oxHfm3r!?4(xyA0*lAa3q*6VZ(zh_ zA#M}m0{Vyyuo1~Msln1yt?;cGvsui=JQawBTH#lPxfVg&y)M{ljL+b{09tkRcg#kC z9!BJk*U9pnlA5It?;E2=fbH6SH!XR%bw#UVyzuPaM3$U=NN|Zy2+xX71Y4V1_X4XD zUod*SHHeic&7tfEvqlt#nVv;+zoAnNE)?C+2Yg}lhOzTt%v*iUH1Lh~ z_GW`S1ntk86Ra2UUputf=uts?Wplt9;jlZO%f@&RoWk`{&b6hR$$HftkB`jY@sXS3 zJ@9zJW*PxT-xJs8Zl*Cxe2o8TJZ5n_*+zoEK|<(?mnXt+Z3qm9(=0PMLzv~LLHV=x*9-{(V1_(d^sf+MFN zW+jRZf)iqBYnDf*c7(zZWjP#a_TA%muZ*7Q(P?<+xTd!R)nUDn-?jXBc0icm{AY8f}QC%eX*4cyw3 zK=09fWA!ub=vfx!!RU3`(c_jJgHoBAMd_LmuuqaLWZ0}&^njAo_wqks@)dM&!^Uy8K7ziq@9%IMKedKvMtrv46=z!H04cLC{>Npk8T-K=+o0#) zWyVHK-ssI}Wao{gz-H-cnh7f!>@?_XMX{I4Z2i9aUNZa&FQZkC=*+WmR1@Ggt)^M< z+=kApVZOTH?VIJ|tBd}f+IKZt!g&qayzav*w0CaHF4VPa^((0B7;FYsfBtK2sb+0i z-bGvX1O9$StCzZ1+1uOFc20L~dH0;}*Onuw>&WWo(UuMW4{iD4KI)h2x@b!h@RO_e z0{)!uXiK2mw%pTYTWAk4-B&=o7q-}YccLy=K+x7+nuKf`b}u|l?xj7^zjwWazBV!&(i$Tj;T50~bV5 zBv038kq1G`y-z@%9nb`mh)J^gz4wu}OuN!sQ5Kq$4!8O~_z2wx`F=0$gls^W-H1WZ zKEAgYF{_cA)qwou&3hWDr-3DGBn;whNY7!=Dl#zk)e9(EgK^y&S10Ys=LB0xOO5@oNMM+LQNEOV0<^n-H^U4dM02 zdyST!gK}0&k0A$wwvM%w{AS0m1(dadwvx4!<{#Ml)J=%pw3Z|WcPu@)XQYfm8d zSNC=v;c-Z?W?drPJR|{4TZI2jrUaWa#IVHJCD>FmHf|gD++QJGVqcXeu_xe7g4d$- z8xj7Q7N(g}>sGYlCA8_KwFW+dR(fw4%E3-@`T zCKa6XpaD2huk$xjNL*w-!-^_JflX9`efjjhTm-VLatz6X)W}Kv{u=N>(7sunj>oT2 zt6nxFx(zQ{vV$g20zo^v+Q>n6Z0=<{5Wb;;_S3;6yM=Y|Ze2$+)a$E%2(0&yibW5z zRbpT45qX>=q!|7WgEicu9oA%{q($U;ZOnVpI?!evY%8mcIQVq0zQ8OcrBQq`a!+1& zE;NtA4Oaf?z|@e=WIHx$bfIi|tIG#xQol5f`sU0A-GiUKNNGuUZ=EhQwG!sPX4Qw? zvNT?~6+(pA9nFQ58A`j~7A9AKMyEX)mQ{Jqvw6*U$2pd<>#T44V2u zCI7lDe&}@fTUytfgL<+G+;czo1ftoVbe(9Axfih9LGWl_mr*a|&nk*}2ox}SLv)^> zMx9~ciNlINx*}SmltPoK(={PG_L-yVrB%1cs?q>$`wqXDTOl>D9sm8{zWwWr9e;uf zf3@?&(U$17utw5bfW2LjHWkr@v*hv@wuV1_f7vf~(ej2s(Vcp6D`6 z&$*qI8?3+mo|WqlO)MDw5Vm}ybP%P3;OQF}JtP~2N>*94f##3Bx*%IYow0pP$Gg8H(pg-FHq3_cuxfVy%4rt@@rY*cjQ(|&8&CokfUzB(K}wX z81D$$O6+v(9!YXyx{Naw=hIU;o=&i*DR^pOQpAI&3Kn-cp88!x`7XuN7c6x&p88%u zaij2*%brHysfazDi>Jx#X|T-w`M+V1sGlNT_R~hz4iSCe0iFojdG~alc_Pt|v0wG3 zGFA1h&ql~{CnNdpY&V@AxfcCYqg%BlP%)A=D|P650NDkGu13Apfc!MlItEgH>Mg$4 z!u6dPdTTeZLD1e=Y4O(n_0SpDlYafoI%{kn1B~u_?!k35Pg|Ua^C@Ygaxi)@z*Zzw ztHH&Y<1o3hH|?}(vo47BW$F=Nb!0th<(2C?Q_gPrYXGKX`RmNZtB^u;F=qFr zET^HL6CeMFgM1}ou*F5NN=zVxZTNl-9KK$^4>;t3GDdIQFp$;|-SKqCTB1w@={2s1 zB3DZ8G3xG<+{T5u8)a36;vHgtbA*^X=P5$j6JI}ou(>6ch(I?*-_bxyngM1=OS zx!;3xB}y-fGcSrJ@%2Lc8Z*;}lv>!64{6p)qQh8ti}Ci~;4a4*lmO14INTNB@BQcV zUMqw~SdF$;-*3!Tuv@KoQ3)%?d%5brKMTQHi@v=g1}P!gW(B_6zZ-B6v?VJH+c3rn zdao`&k-;Ix_^CxoK9h4i=gs-yPJK2vpIeIgSQ0QdLd!STc-*gp`0;?QLr%}{Y2>u8 zA-Y&R>FzQ2VV0X(+hA*L=g}7b9;2;v#jO}^Bv<{AtFv^u`Zj3x_Wg!jB`vEDtO0^1 z!e%rbTt{bw+RlkY%kWHTF1(*|MQ~~{t_;QV5u{zN=c`8iC3uGK21*y>DF-=bA~vq% z<7t}fJiXM_h;y-=U*M^LJ>{SbNz_=HL~R9^wxUnptF!C|O%msw&Le&uQfS22=zVby z%c=KPJC}nAjCRubRXxvgtbNEHBKmh=R1SCPPdR;{Szvti?<*BxmlwOg8Dm!5fHmU= zvRR$2CyNp!nX@-w!QXtcVbw{uG!>&n@rL(M;-h+tUy2|r;f*UC)fTF|W1 z=x+l!PY=RqHKe&^iQ7=`Rkv;sC}__wr#2HmPJq^I*r)_}Cqcj0Pp|Dh=%6!ez*T_f zsuj;qwF%lD#Ea1Q&GOsw!50Zzdn0IXWP@=Y0eZu7Yc8UdHBpqTpwxx~dK>OW8_4$4 znQQz=A&SeuOFjsifL`-hZfl$yKIk2_Nx*E-Va^@E=Yp>3a^gO(8V6kvwDUk0;yR;m z#`jqAe^K&lltj=RtfbYxu6EPoHriy)vQw6y58oX4@??uS`O;o!TSgDM9&o6x2Lx^G zavxg!2-eWV*&CmK;Cwi7fFMx?lGBYrL3 zX+`;-(|-2&pXM9(4Yon5neyAP(b?NXTC|;WeEpNKE(_oe0o>6DT1`icH6FQLm$ZnJ zwTb9){01`eU)Dd481KvQPJWs5*M%%*`$GVa>Pt|;k78`$SCt0 zGv(qD>1A5Xl$$c3?LtZic0qqs8UV%)eM~)_XO4Ti+W-0bmONjR zM{C+Ejgwr0A9~*PLTd}@d8FgX>a!_N+si3y9IOKWt$KhgnM3a#qkerBr;(cJMAj(* zzFWYNq*>Q17zeXgQJEWV!bvc|+4=xZ+yg?Hy9!#)%vBs-xjT4UnHofT5b5nmr__mh zDtXFPxE($V!cjfPXfwx;^c)6^gr37?<~WoA|tw9@`HZ zwBj8>>wmWg@3A=^H~j`?Uptk4y|c^s@6?HSo2tI{KsLg0=!`2{Xq_?ytvJ54^w_@C z#A8uF`wY+!w2zlkpIjo3^CuO@^%Idk3F%3kDsVkE!QE$Zw%hHMN*WLL%g&+yjU9eZ z)oAyF-iMr7?s{+UdHvj_-ts;VIcN4MpXyaR0JY-*C+dnWP3qp}qv0obxUlrtuTZNL zz^#nk>}GHFWA+w%H%5>i&wV?ATa{Z zW2S#~73Du)qJAnyukA~fg2o=Vqr?L$l%kdSZqa?!v0tW){x1l5Q0MVTNz1)0FSaCG zdZPz@XiMEl_#ls@F+sJF*V-Gv>J5ff*3w*g;xQU6NyH^tT*qCR(lUnehdGg*TT%MO z8P+x%s(z+pPd{T9C=a`gZ-YPCI0L1AYNqg!E#tHYtSg_YT>JQ00L>Fad4g6Pk|E}DTo4dC1c>~Y;?pLspNi()Un zi|QhN`Yyk{n5|Wrnud5+KWG|^m(L@q>46Srz_srjayu30nGU9H{S^8I<8=5xH0xH6 zCvy$khPD5U+{~wRvzZoCexY2IVe9C?EKK}j(SH`&Iji9n(7zb;Z`Nm;mAY2bwQMh7 zw6r+At5p}@b+y-&Ns|qC_GYV_J4chIXi&t`AV(T4?_`4;j1*eS9MG}NV>yjA0Ig*@ zw{sENxu}8GBrmPB+IcpoCqDZrTdDuQwli06=Mr{9MCW$?0yuD4mbvz5MvA?iPqUo7 zog@SLLk9d1GJq^JqW>dp^;K8;P)c>6G-97fr;T5D;V@2(}AZ`8MdB3=)6~N>>`oO+S zP>d5Yh4Fg@KyGx@1RA(Hu5va<1d%+@fcxzn(ooS<&s_VzaAJR zK(Ed_{@0qVwblW~T7q;RtF8Od*8L4+$^5j=(ro!E&gcU=6=;>n#CgFIYB`-v#$N9r zPJ`~PU!N>aU%edf%iGYelY}|OQaZ1N((yk6{Esw{eR#{iiT~-v9DlMa1-}#jhcoaG zb&LO|4E*i(9gCV@1OKlZPN42FHXG6^l(E&KELT~S~H&ON}+{=G9d#5>%OUG@1NaN3_YIf2(6}Mf%$vc$=zBP-G<^XJ)*OSqS!% zf$MHBQ*LlCy!}@9)Z3@K<=ZWr^fMQ8xxw+C061OaJ;uavATTs=8eztQnmR6nZE*&E z{mi(pzzGd{&iCP$4Lu&)aV7t$mw4E)_< zaJ^aABpU`Z%vg7tT~g5Qx{dtj_`NdaY7qPrY@CYsYy^u}R^4XRJrZ>rB@Etnneh3@ z=4VJr7jkymceT#;M(^gn!$kAmfZDxu``O*JZyAKYei;7xmL`BhdYD-an=PFkqkNVO z$()y@+aeg7{akUTTijR_!M+#ST@%cn4&2#E+=#6PoTPxR5y6Qof_$LUN!)joMB4eZ z4;GQdl=Ir7z4$ID`A9eDaT|LXT-kYzu-Z(E*mMy~ZzkIlUxT!=HOO6n-#yKopqbtB z*?BcUzA5B`*^?%A-=d*xM)>#=+6Rm=56l>|2@ps2V^-7y3hn&2VuT`S<%{B=seSdt z{Vut_#xWOwIcas4ltesRCw-M|(1&IYVNdxD70+P%ccKWp-z4|7XhbB#a>dR zwl4Z}oU+gHXMv{%*OBfRfMp&&Uce4Pd$IN@;Ea89h41aje%ejU@ef4)kCsdR`nDu| zOJG}G7L0oSQ_${TR^N6!MPoUxG$Q^#mj~EAj|RL)YH4rgZmgI_BX!Sm!C3>2>;>PX zUhqv4oadnKR_r3Q9^^8mA9l2kV;_`eCh}8)%w0tK(MkAqd{r1%is!i8xbFy-+t!0T z*TB$WrNduVja%=$jq{AO#)Aa`f-w-DPDX9yAEiGdb`);Y8+8zSu4aybp-KMnnTJK^p}M+Jf4+Lg$H$HJk%$xYjUPgyW=5xgHjgJRtH$6Gd14G6G}-Q`tx2so4aqdLg90Iif5&hYfYU9IKF zpGD>T$q1dR;is3WU;8bjT4~1x_j&+R1l;vdQbc262&_>zFQgk_i*R0J0Blm#>`l=A zv6OD%^dLWi_T|EJkzdF=XDIP;ZV^$w47FjuD~;}s>Rh+OOJ0)RseNDkgZopbUY zicM{-HsDx&L~<^UdH5Ba4qCR1`a9r!8kqLcaof#s^8q&mt$CrKove{c$ojbiaR}N| zi2D+8L>qN+8Rn)U^)^Awy&GqaN#F5oLc2B@`VPD^Q4T?yv~VH%GlDk+ZT!NU@z#nr z1nrWA)p$FEHw5j%g|qP%#~Xq+V&S!TJAyX^&9(4qye064pye<0;H@2R2wLvKad=DO z4MEFZNIpcT@rIzCt|4zp5x5~}-_#7ln}jz6?TZ>Z#p=Qvg7$F@o#2u2hM*;ChzpDH zhM>J$(^1W}w<%beV-`7OJB%{BrK#W5D8$?%@6N)_)Hk zQOlGBp^nAo^EO@+?Jr>E*K)FD;@;Ngc(k<{J5bFepJLIxBF|2m6-8&UE21>z^~Qh6 zS?fBDS)lQt*a+JA#1iWn9QkCR+zYRfPI0rnQ?urYPjxgW7k9M0&&o@Ukav1{{!AS0 z#eKHeGf4>u4b=q4mNuKxQjiiU!BGu(+pKhshn2VSU|^G#N{|C{s6^ zni%kB$k5RB;l_jIk2fB~35|Jp3XmPzz{v3fIOL zhpG*%U#}iC?-pP&Gh&tIn5RQ(MEx6C{fz;%B=4ch#)Az5Hdk7u3`{p}X*}52&>MAb z%zmZ(kL5$=-TFP?XW@1v!q5&+3e62m?xF6+gV_OxpYBzn8$}4$j^-F>MiRcGC5G{U zy~1W8@5DgjAhLCH-_Vnhi7h9?6PtjT=gz*nBcfWtZM+l_hAJb{^9VBJ=U0ukRS3i_kGRbO<+#%2+#0+i2JZHAN-Kd z5l&ZWGiInNPYd1A;=m1VxMw->%FPtCsmFRRF>_|tE2pK{>n%u2sj*?y$4oi3C%@Th!>O}I>nQ%zo?uvl zMBwQu?eAu)iLJ>$)c?7D=>G=y;N~%-|0B^;d*b03{s+Tx{P#glo!TQoQrRiHAJ8GM zd=cDko=(~SNlUS}aA#VIy@gMvr8L;u-jtToY)e^}mU6(Bvdm05wdZiN%jAZIw)p&= zR{T6O9$e}y)bCcGYs+zsnd8)+kS)H{j3+A8+{R%NuZ&GgX||<|FjEM-B(zei&+=_) z`8yM7Y1w8PVL8IYGM1JrdB*4$!W4R_4f=;>TI4(U_piuF5GQ^UdJYHhpL&3ga{Ksx?=(1|6&$cHllp&3OR-ZwmX>0t z{)=fT4K}X%Sz1c7E#>L7lmoVut!4_1AWI$wZ1MR!t@u@DeERsda@3kRXw+EoH<+4g{?qa!Adza}+_27(8*qdX8%3K+sOzOnn;1?3~Ep2er@t4W|rYH$zk&H zi)M-dUJlYe#lBzS`xN;Z66&XBKI*B9rJec+ax5VZ#ySAh%#@1{nq~M1$~SARH&Z0k z`U6($I@xb)_1vA_v=-cImI$&|mm)W{`oLluJ3b|j5j=ONFRjcqW*N#Wxr@yDJ!XoG z`UkW6C!y7$opostMw$7>$U#=$!;5K@2AISM?F^*l&NFjUUdcVqtWPjg+^Fwww41Uo zTTZqn_9a>kxsfAa^$!j}(AsZ;CWhzT4;86d60Pxndn2uqJgPf|GkN9Rrf#> zd;>8E+8c=BH=D_-!?C-v4q9W5zq#^UKv;QWg*qSiOV59uEFk(*h(kPz@(9`<2C)JV zI}n4QJ$I9lmsa1sHsda@&4PBsj4i-9Fb*p}L>{&cKAgKmu3?+|!7t^tn`BjRljccl zB_k(nQ@#qd9=Oy47v#Xo|3QISBT&)<_`A{m8F)s}7T!dfFQmP$*KwOmCcI?ylp;N8 z&*N~n!so85e62s1p0dtv(Vida*R9RVuzS?HX9pM!*Kw1iN4p?1E+Ltj+MH*i6>!9DgG`4JOstQv*m1Y~F{m-`+@;L7cJC z?d?NwuVX9wo{;ZpVd}#*bnbPHKdzKjkuA*k50n(teo2>IblnE3!Hl-x5h_KS;@{bP?p`5@mFO8RWh%w47L4S$6$&LgP-EYd$J;@wDIsp8wGprsOa1l=C89XP(Tsl6j7!jFqRiQ2L z;n1nT?w!>zhu6w_(<|c8kj9cZ7qG zDoLdY5+$gV%?m4Da8?96Gu|eAIil%gcrWIKOXjyI#f&D6=mFyF^^3jgeB?mT-oL@> zp(AHFk1Snm@yMUg5X~~%Xwi(z72H)1+nfs&L3=Z};1n#_A(j2_c4DyHe9g5+{Xn55?o7%^mn^Qw!` z7mJzYwD*y?C1<)Y864>FV;@ME04s@60$!Tkl(qPbx#*8@<`?*i_~>TU|bnL)dVdaIx$fUGbxx{&d1QlOG2Ie^}vx{Sk)! z$$j{e-jb88YB$&?bnNGyCd?8#X64lh;9CxSiQ8)ZuAED7>c?me?NSW~Pn3ZZEN+lO z-~=(>6$Q^5IS0}iJeJ3@U0bPDpaN_VV9G5zgVIq8%MA7{X`hVz|60Rx|4;L2 z#vu-KJ}e+)au`WOvY?HC)=l#$_Gw)7RG%7$SvDWo8<-f&>qpP@F=P3kFa+Zp2RUVxmy*E=X?%NhE*2|Yb{ zM#9c<5?1y8Eam<)F5Iy|DfMS)L}nu`4oPN=@q>ji?5E~pZ#IB@3H2!%{%I z_4au3;uyu_d4BkQP=509aM|-C9$$@fNr-o{_#6hO56f@dY--Fi#y((QmlBrM*-TsC zaME~s{G^eO^l&3~(@C0-g}hv}OspV1gO^))(kUYzry3CN&Y5Mz&okjIMoIV(u$y~& z!GD8p!zEojVai>5Jw97KJ8bn_npV%#W<4X#dM;=6uv4bc-@B{{8Vc>#a2!edrJWM& z<3g$<;9hH56U@LHg7!^S9DOLBWar(`FVHXDHDDh;75dgI;T&VsiKVT*He)sEY1@z* zqn^e$OGm2z6w2|v5kcE=Ggf3sS)VFxqt)9Ez})e0nR@79eBlNy*m`{;I!5ilIgk&P zayR_51e}?<5uBn8zn;gJsc#_f8xPY>cYj)t#2sabM;-Vs1!CU3*+?fJlV2m9TJU87 z<)QOfag>cetba+BoyTgp(Q^#g9J}9KTW16Jly+N(!Bg47j2c=UE-+%yCuCbW0^AX_ ziB-fKpqQA_DmuurP^KQ;gEj9^`jWw6cQS>$e2`i*JoDB}lFp6>7l(z*&$6rw@bURR`cphyw-~ z<)f_ppTFhp9x%XxG`h!=dj<;(tDu&R&fI9~phx z3w=yH9YJmcZT?(PoZExgn!tXZpJb0+&!lfL^RHjQ?!?Pry$wGPz(UYU=IY-j1s5Ir zhw)|7l=l8VOlt%i)67N`_CPjv;C}%$L}-`IWY@_5wj(Uerqyl7Y@$^%THkye@x8zG zG_S$#tfBMLcZB-lJ3?z(Jk2T1`E3IEF#f+KuIHd-3iL+@pyaFr8Tv{b#HBmFmZvz z01oXbP5Pd+-js%?FDz*P-6NhI)9kc9J`FxV*AcDPHScfE^%qoU`KzlX_m+8CxW&b* z9s_3|dt^=XKJ;p~Z*6n5Im<0Ba%T6<>gQhLqjK;;+6o_}tvt{1O1h8Dg&3C}(_Sg7 zi_KnqhP8RaS)9G$o$m zj<38}@7n4x{4!|GdJfjC`*{Xz3 zp=V#3BdfLM*xJJQtm2G8V_lBHhAHe$X$x)fWcMMT5{G3kX7fN=45Wqi&LtmO7yz`U zlr{-1Jiyu`tH%cfA+NIhT&}%&HO`snm`ehc>m%&&`zuRpZUp^DoT2*x_(}cdF3ayl z`CPL+N&F_19?D7!XW(fYodFGEG<)xWRpmJ5HGDT5fq!FS%p9+}3h%47stVnBIC2in z{02>oZ_%x3+1G+E$-we69##Zt8+0?2LD2p%+tVCyhFr8yC&KQ}^N?T8Ju+!NOQBWb zL~UbzGrpW&a!$zpHZN>{+m`kghec%9R@{EN^+V+!k;_}^;3u5RzP5CDw!M@TqI2U( ztRlw4!eyNGgY8osE9LkNOA%Rz4BRj;SDVk+o8lPLy@N5dDYlg~lAq4z8il>4x#6VJ zApWrcdh;T(ynC7(#3u@k^0Z%-KzRf$Fx!f)_t&8xCwz741)>RmyY?$1o%Y6f{Zw9f zRG^^wXYXUVjWn_m;rk=_+xJ3M=)Gt}Udz(yzmNGk-HSCYha-hvnM&>ERSg0wdxy*`lL?v$=|y^-Y4n3yos%R$*N=FTL24@_2vU74SN)p@<;7@?=NO? zX!~AZUn$K=6u>vQFQ;#u@jsjSq1({d#|_h0a7BR4LBjf7tB%J7hXKHqPJ4APBb3uz>VcR4L&yT zGmI%u15UKi!1BH0;2v%2bed1F%iAk#lU=K(;9jn4$zPSrcYf}K&sBL$?}LRA+T5Ss zARX1?EFD_k{4RDq=vzAVZC|GnHT5kOay?G_zYe|-v09{9Sv`cZS0NsE>`mu$iQq3% z@9;KY2maitG+z@=<7V3DnMD9rpmgg7k%YJU(7&%5>)Th0DSaQ+Rew= zZp8zR>iV`5sWrz=q$qac@f_?~S~lwXk4~i0bBsPtw`tFo>1&MKu1(UabH2fV6zc>@ za+mre*b~J~0`BX)@E*lk1tV9M&yLAA$*yXUuq$g=s?+oTEg1nvQ16z4BU%cn9hvx1 zX`^-NrGL|9ZFYQKND_TwNurvNa?G=*{WQ6T^}$y30fP2U#hPYAR|+Ku%T)3?Rx*`A z@5Ut0M>gB_`g2NqG|4%Xk7;8MURG}*Z2)!?55DhvGMog|g-QCqI%&7((EMMa`k=r0 z=%fo@)nWA0H>pT3NJN#7K1kJL9Jwo6+dfFqTcFlaExL>Sj(HR#_*>iF2WOYa^=)6^ zjZU>FAE~Jhy^NZw|0tPSGJ8oSoq&;5uh81|ajFTW+F0%r*ar?{#TSW&!F_ZdBaUxL zy$2tJ1Lc^H@MXccB0*MQHMp3@u$XtEAO;JX#H6r2Utc+auO}vyz-$Lf(XZhA7IPZy zm?ohc>;lDiJxXI_c!hn{Ytf9`$&P)AR);&VqP#x^k5Kf^bxf0evzV=%X}`D zzWvK2aNhxaCZ#=wdMc5#h*?%Pe@SPZH_f-!(;JXZdzu5Wu7{ng!m#75M7$uUv`t@< z2grW37D4;3nU+*vf^~C$CcRE!b@|MOIHWdNaCp0yd`UNJ6Qz!#EP^%@WfQo)4qy0l zd)%qno}FuUKIC&|_s;r@@9#bZ-kS|`p)EXDhX1gg_ zd!h&7X%N11%3B1zIFQn6zp#4j7X7(MEfZ4OJX?wn&xG6azzrHb_RGm@=T9@NKBE&A zUR8cfpr8e2aH#p9QwhqFmqmXYZxnxl`GZ+XXQ0H4$B5g1HY15MJDb zL6)ih@K&Ju?@X)z(HRcEYFT~Jc7rDKOd9fXb6C0EfQg{3(6M_M*lC}0?0$>gcH(C0 z*>^v;wTtN(9kmwSNfz1Ozbl>h9dLINPOwxusx4UL2SV*S`#F=rqLp?=w;d5@6StEU zl5l(EbJ8y+N+<_@SowK<+o{y0a!ONiL-i;<_8k^m|Iw)w-C93Ng6#_}N6=oH4x86m zkDHf%^>ey~`!v!{KSnm4kEW9rlptCI_Dg9{{(^Bpu|H?A73zA(;`L-Ta;|szY6R_? zO2QDbz>(5QKR2))4@xGYi{;~rT{rbO=VGOxb7Kg*tGaJkRY-bLe2T1wy_gntIlN1# zef^S|CL{rTd9t|M%1 zTP)MvytJA-t!b}~*SFq#Iu%*Tzi&s9v7hRz>WnuT9%T+qBLRvkfHni;nN*Gf9 z<3irI#?4K1Cay_*v+&JsYoWVPGi#A5je1BENv{XB<#kufPuaR-pber}a@cH_Fx5L% z)N!`(ivz#*!bVndimfC+RZBfImc^3SlEcSOA{bP%Fc(X#XQ`whv=7u$L6JjVxF+ED zfS0^~n!H)n**IZk@V}V%Rw1Y1clGlDFII9nEd}IL7*FdNqh{`3NT)jS{ae%poy}}( z&pgCozf%x2W=Tk5(ve!phX?E5Q4;Kac}0*koVx;8{kMi`uB83Wq*4#=PbxAj1wGjX z3;&LDjhMaWItMt3P z2sh)I{9q~(T&gI17y-JB;77twkdv!S1EfRNRkDQ?U{VceVlobr-_v%2J?%P-PcA+0`xNtsNHf^VPkGFyPsy(y+$l<~jo8sz1o|y{ zd?jLthU88B<7r7Iqc$qrp|>R?uPD5xuP&wYi4M0kk9LW@>UPw({qY9n31|@;r>Vf8 zpCG8wDCyUY$~MJr4X1XrDBzjg7Yo?0DB@n_0N($*fc=V`4&#G-EzRx8#7T4lPK3l4 zF(302aQuy|N`h8q^mKa`qnmw(JRf`V!fl+EgR#mqY+{)f8~WZ~$KnLIl1pa0E$ySU z`G$QN5IU+Ug~9uM1k6!qjeaJpT!rcazAnsAfgDtA>k?4 z38WuII)e88RQQu+VHVK(`pi7wBSW8rMGF)$-mIC$d5lPwkdnk1Pb3 zIjR*uRuokc+uGl>{Q1&L{{p2A`-1VEKs#nXY3DLEu0-LXwhya)BR8*$u<6{MjlkW~ zCvyc^{oU2Hjt`(kO`uZ{bRtU#_EJF^1noq*Wk;ZMD+XnL)*kl5Hypd=_SpYmv2Mi1 zaBKKlK)M4q5J#19D*)|F8+h8wJ;2HhsVCq49kbTj@b;xhjY_0E@!dtAl6P7nio8kq-B>)=9Uh4rQ-H)ypQdfUN?0^ zul}r_=Q3)~X0baE`>)aK*sbyuXkAb(zzDB{`_%w^g8fy*YtXs!Klc<_<0t4 zbtife2L-`Fd?!8z?uo$_8go!tYq%BGn$|E`rFywe)jknjC(}8(+0egQBTF!jy6UZa zSv~zSYQKxc3W%k7CW7xKr1$2{Xp6yLG-@mkn!`$JK8qsPu$cFJ^O--$v9<%{WLb?x z*D(8BOu>$+Hy4sn#0ifGc#SM;&=qoCFPs6|ADiJ--$pCn4xUh`oj*i7#YMz7VUDzoI%dLfQh#bB`<3O;T=1UmhDY@9-0hK zqZ!GNyli$dMnXI3>fn2vW6N<~Mbnj5JvCw5c*V${U_m#ae0fPx}g5mIvUdP_m9`*K``a!ARC z&w5aC;Y*r?1ySMIPX^$r6i-iml8YxgH}S+Lz43G-o*uQ~^1H%oO$nb`W*N@$-dXt6}8K4)OrsVM%+5+I?OPPGYl_-zfwN1jswHtu40V51JSjh3hX+c zV06O2ko><^$PUCWWAQh9GSiH|jm0ly@z;HFqZxlAi=PL~V$ti7O4xz9pe5L-Puy0Wy94?m|}YfKPBDL&^t!=dt>@FJ!Mz zTzYH)iwq%U z+2m5dC!7<%FVElDZqefJg-@I14W7TK8@kXPT^v{FSj-ceIJun>uVqc;luDZ}x z%aOv{%~}j@{{FSlC`oxQm!8eMa-rb}rbe{Ar5BKmL|eaW9RrM>ep@mmgH z(>O6WJ6=dKd&R$8TjXOtnk1C2>Y}#r$DEH<>@8;2Ht}DsZOzAgjM8nPg++dHM6=j$IDOUGb?9G>gh3wtu=HUw?^6x@v!!rfT#L3wOS zN_*`yDOwawX@kCSN6Vs~o#Zi-(*El+W2K0FoX@dCj#~Y0ROTR$2osnRRnT|?cH*Ge^=ckFB`Gd(|46`ro{2=ztynX($|{bVGlxLfXNX=yppLboBh_paF6 z*WKSe81>dnZU%kutu7x~_+VYcp5WQknvc$6Urte^n2Zm#c4wvJmc3HtUe+=Am;?`^d@ZyzeUXs$Zk8 zzYf)aas`u#ev?i5O-Q5P(o6K4o1PF<;R*PkPlBHxo)NTPPLh-&NWdeXx|K5g?*6+q zu6Ix3TIMdY8pD>rzn$a23P8m;qWxL$HNHk8;+*NpTDmc5Z}ipZ46M~XfbMyM^yPz- zpjoo>x--~b;RaP^HyRGS4w4UE?L77#J+|+4_{I#%B4~F^68(Y79A+C|{3+E58xqoH zJ#iQ}E8-i_lQ^W$D~>B1iciHkN#sD#Dkf2`mgp+*Y)y2Ag>sD`gZ zPF4L+WFvHhOPe_#X1l2^{z>HXOS=#rd@qM?c#_o>SdDV)-bDXeSQ5VYB)z?T^p-t? zU0cCy?>`e9_s31#Pb3K5;pm63r_-vbB1J7G9<*?$`?pVGmx+I!MhQc1L-VHnaoo^} zGZv@9vU<0P&wI=t_-CISVLLE)3*@)<>LBG*NbLHJ@f^kxbAstjA^4*)+A-3|Pbn7L&22KGK5 zbtLgEF@$`gRTCkP)Z^enowFhZ|Ptc9l$tcBnk1Z^2gq_i@`O54&?Y9@YH zZN7=5OPrsGgHxXcyl26wn14`C!VL?(r8vI9gy(IzBLg+=Mh*n+iis0}4Nniu!Sl9> z45OEjj-Xw@${#4FTsUz%FCF?2)Jf+J-u%E`XTOOth1Ri|yweH^97iwEU9S@QB930_ zFD+pd&jZD8X4DnsR@NuI7|oqH9}Sy`3*UbRU;g9+YGca>HVd42Hx=#m(0XQoYp*g8 z>yHs*B4iYu?9_PSA9U1A?!ZD2j(B}9QsF!VuycV*&et@&_9^xkd?#v0j;md zbI7pzb)B!{eaj|d<&fM5U`s2j!fa)F4%vNqta^^1ykRxAm$&LA-ybV~?0rKYIiPzE z88(#k(ssWit8{ahwb|hZ-zWM!_kLGYYkc3}MY{hu8}}cV;*Pv_^nFTO^?oTN=^FHZ zN?Z0mxD9fWr!0Qo$g}W$BgZ}Od-T+0@6%58F^rRAPtZ`o?b~>2Re-3CsAB zmBZ(c`W1KoOQjlibLsr;n8&soCxCZAOQw491vos>SB1}$cjHOI(@;6gbm(AokQ~I5 zjJN?9!F3n~!DueVFfZF1PlP$%FpJT*>emAc1ns2>)UF!bZ4+>gae37M;t{mn6L42( zxU9Wzzc<@Cpk+{^QmU zz(vs3PbdOq49H?t5z`1>?Gow`Kurw@L)1eZvnoqUP=1_j+|^)0`pP}IH`f1SB2jk+I}@Ogh+HUR&ew^QsR~o z&=Lap)+A}%nIr3e7)CU*s16V6@N8F6N9f8za5$Y;wR6V|q$6mJR~oTWD2zQY&Ofvw zG-pY+Pt568c9izXj9pn;%@@M59l)*U*z<$E4s&5`L*)#e>VuBm zhadH?+I}4Pm0g*HS6`sgIx|YP3{b_?P3bNK(yJ}(aAyguxdyMp@{F5CXpbu!`j350 zPG=jbEZ+g6Igm84l=ip35{(>PV`&V>z}?BZT{ zzlbiH;TpW4%sjfm#hUL9Ohp`Q=ky)bGI*hE2V?~8tt(<^Kf%8CuhyJIoavay<0snU z`51Fl^OQ^e3XNnDyW0sq$iFJ2Q-7nU02h-k*+M<;l!9-ed9I3|uRR%2!XAG|1z{8e zzx0De@8seG(OB&P>@Q zhSd?4D-V?O=Qvt5*QmLD0GkWac|(#&&uCN{u{H=O9{&9>+|Voe#i}r@F0El&TQ?we zr805RO2`Y>Y~n#Xf6=YoJ3vhY?X&T8K6p3Y5VViRlSE6n%GCYa@dcXgJ0X*kkubZV zo%(d}6^6EBL4;2eth{7@>IJQvG#;)O(fs_@dtJ@Xd*8Eq+0q8=vwJggbk;WPIfCz5 z7|@t0!2A$H`*B_dJB?qXJqX(U2ZH8Q^6RL9_E&>v7kULenRBdwC^6?f z!v4Ejb%BjC=HUGM?1Zy?_lJO8cIh=)(3LS%&{L{OGU{RM|AO+mGzrhS!^6GcSP*=BX58q*6}8KN%fqrrS&Nbet2wY;WMOUdMr?%?x0Opgnsz z-A@Fc@Gr18_NC$5K)OHxIS{l*E>GIzYHtDOQF|DvOOU#RrMdyt4X-vMbuChtB6TTC_2bD8 zU5wx?!t)~indji~h9oG%sJQ?VpZoAw5a$9SheJ@TRPvtV{vc9_V>TH%c`Xtw_89lL z5rwy7Urv>@95tJ<7p_cATalEON(Qc!ZxYrt|)RHM^Nq2Sg z)({k&knKa1qHT3|&=ykD&7V>sUp&32o;aG#}k?yfIT4wK~rf%{N zEJ-k~?5gDhOUV8m-<$tp*LCr9-;1Fh(t|C~$}kU*zSbcAuvy9C46;u=?u~5OX`NsmL<2 zk6A=~;eC62cn{*2?%|Dx^PBhWiAVBbOEt=Hn-ytDxTBNug&jG$(6*n&s7KIz<4CI+ z3#*U?gz!*XM7CKir+NWsZ3n8Rt zwx`{VTLPos%CHCF_He10w|4xGuy*{BpuNk=wj*^eQhgbze_&{9>wsRTvA8}a%Tt-?uar^inEbg$9&^>4C(ckNTMCW$?FK_Px7iE?Ik3VyNW*Fc> zMj3RJ2fH|0GRG%t(Qd=VL=qTAZqj8R0t1a!>$?|oYXiJd>lQ5Q3Tg?|Zr0WYuBA9y zqNZ+H;daw%ixG9LY{RbLZT|1i^UT0N*4Fp8|1YoCFms;gTt4S>KId~gpL34=ZCJZV z)hVf%At?(|gE@6?UwHPabCyn#3Z4mx=)X+=A29d-pv?WyoF1HW!(n*)EyM}}hQ}2c zULTU$kJKOxok(p(&aFz$ZEuCQGssVVG(;D`%PO>V04*I*T3S8?ir=8!U~AZ6JMbIa z?MJs99FK0a)UCASK}%mE^`(-Uh1B4?)PZ(Y3IC&8LqF+^4@CN}L8Sj0W&GbFjuQdf zz=3BDIe*tZJFh2)~21lU(&2X9+VbqXhaqJEsn z8fxq3!BgV~+fph2f7cfIX$^{;ONNAqhAyXS&vdg$EpHO0wNU%T{%&aVgd)MWGEfUOII0B-v71;bFKEzAc`8RNfAc7~_MGFJR_(O-j>ESR-?VDSC3M68jPL8a6<&2S%HOQ? zV&~;_;$;b})6 z0?*r(r`+{CKT7#!R8Fso746UrMvHFzj}tTS-zL(I@EEZO|D!}1|04j|ey$5%u|~kv zxQ0A)KfgSr4a3UCtW-5)vL_E94?aDm138Arl@ZUOwNJNSXyoYA6M6Y!oOu+)wxZ{T z`?6HM7w3f!+dHVPpAL>uDBt2xO&B+NcA>fkq;)XQ@Vdy?K<9vyCxkpQJ0U?-IZZ2i zpB{vt0kB`*NU7sPQXe8UnDfv<@_w43al4Vl00;3(8KnBF_2#EVD`zS}zFUHicw z&i_I=X@5&dR%oyzlr*mpPocdHeEvr$vz6b#jb?|1jT# zb%1{IfKz;WKAi-wF@EFI^RG$7J;9A|#u%*`Oo^?-ToncaJ0~~5%shhq56lk9^CI+7U((CN1jO9eXtXw`^lK(R$7bqoD1=gfl~>T zwS{f4c8Ai>h%gVyp!X@&vlTP()jpzb^7Myf1la_tPB^I5MRkRAuQ!2(HycS$)OV@9 z8`KF0^MC#N0JjL%bpqv1DCJJzovL4+#j~@@vkzV$Ue{p$uJ5U9*FarD6Zm2i!L{{! z>UwHeU37j!FV;4(?+4{CZX({)_&U~mkV;lk^+*lAdoWnHs{0(nJR9Vt>KO@yP1;AG z_HZ`pnXS}w=P;;3Ib`IJl^iz@`;!uI&K`up=#kFUkmAc`^JQ{UFySCVf|F~ zRkaqvk2CC@I?ihU=-uc6eEuA8{anGPFs#)OJ}AHTd+Pe~wNMXgQCF=}*T=7g##!xS zcwO%!e@LED4A@TKunO90pyyPd`u*N{_4^#O(KcT#Mopy>;z-bkQN9aa&n{n)*oFBK z^?El_I}vHs22b(`@ZgZAtPB1}#Y3;e*g+o&-UsW){2IJ(bOL70cbA}@2^d`8r1mpoSlazs8)^xy zcm8r%=_$w^UfaY$EMuP2S|F`_53cf&UK|5`oW@SYw$z7JY_#77D#f`uPQvLOBCQOl z>v$3*br;@u1>x&^b!fU5>7#gmH2D6+uypsZ{D+36yI!R`PF3EbVqhO~gr{Fbx(_Y% z1zXrMEdA`T{7(!^Z+KN5ot+(KtPM7d8CrYYtJLGo!(dqcYF{&P%s|h(ueK>vw@lf4 zq^xJ=agmZ8wJCdnCnMs!OI_#8t5Vi9X)Td%_9cz_E@;$uL8HD48ueXx#+T75UaH@^ zR*O$h$2*|O-nJ^li{8~9iqg!Ppw1#11FB2*m0;a3LXZ&=E2FLw)K!9YD2f6`#Af7F z?D>E%%1tB2S;OI}8-T}y8>pxb59;usj$G7{i~CmjGI}!{9*SQbgvS(wrwh5sgGtGB4jY5lkUL{7)@9ay-a%CO+NHgi({#dcGh~+r{>$b8 z%Z|<%jn-N2GssrT}{Lsqu zcu@2zu>HCom&;P3fiNko)&yXX04&Od3eJj%8v$WtqGjK_M zx(?v79oX26_BRLHpLu|wt{T?HHN)zddLX%lMkCPkz=55h&^GWz;z`wRa5+%u#rDBo z;}!x?srs%uU;TwRoV-;3e$e6mwQqE60fu_pt_mA<>!sa*u^SWwe`%1mE=Da_Z*})7 zEsVtq|BtKl$R%o>ZK#=ICWw;$jNXUiZvQLcxcLpy@W9nMf*ccg(zmAEcI;j~uGENKKa@9sYjqE9xu?t>&mQ;YIW^ywnY^5M&#N z)qV9VShI&!j`hk{XvDjH#FM%QMqI+0>L5=FJ+DIKn94`~6Hog2I<5cb>%Qpt7r4oA zo@BU09kWnf|CuLsLRSva4e_K9Jaq%`{3o6?6rQ0xX~)GXJSsg6%3V5JgJfhlHaEO{ zA)I@WD|}>Dy^L9ivEICHlfr{mp#`EWT0PN0;|qD!2V(+b6~9)t?*>M;Nl04=NqeC_ zp6zzWB0g9npDq>hmdLqz*xj(aX79v@%6;V>rwhw{NH6n(3zu|wd?m1Wz?JiIeT(JW zI%@JRTymvvB}%STN>U66ZVmKRqa@@@-d!k(_>nvv_7~X8>}5hW-7YdJ{RY-uMmtLB ziGaA)`i@RTq6Ovumu~+d^!w1dX)Sb)s&KLToMCqKLQi1rea(y7=~)}CqA7O@z5LD4 zS^4k3t7WWTQjQu$UwiW#_1R85>-H7kqMrNEa*;|4z2HD(MTN?e z<<>DKL`|X75r~=|hZaY4V3Auv2PXLm-wWWC*ly~;5%kPhc~?!OanCy5jO^h)Gfgi?!wr6vz6b;;j( zS*`Ehes!jV@D@|whF%>Wqe64)i=p+J|BiE@-c`@7D#eO1_M5yL=(z?_XvC3j!#vpO z%L^N~t<9ZoM1O^i%Kk9j8(3Dx5)z5O3SJJ9CxbZucG*tIuJ94Pa1M>4*Q<5Y7%#&Z zFI!J~lsd-Gj^BxvcA}-wIFdI0=K*azH0Gp@H;(CrM`XGyBt=Ny7@X^5E00ioD-@$j z&()J;dLd6X1N)oTpKhkH{^fY0`#{ex4?>dQJ1_YC^c(QXBW9m)-Rm0(U%p*A7a+iq zcL*_Lh;Psfi!m3-&p#0clF(*X)|+~j8le4SHUhA(vW$ly$Zdkg5E{i*MF+F z6Q_!N3EKJ+qr3>z)eWtF)H(M{p;{Bd43IJ5IrYg#90h^oFESibA1opF7O| zr_w0h>rPZk@!4+dIOxI-g+{>8ht$a|mNYw6zoT(H2HqS-6w-+qBg_ zrY=ZZ;-k3h<588iNHbE$RzlqKw`Xbnm=IOvJqqveqk~j6TI>eZ`7RI9R<1%@9%v*X zzZcnB!ho&S3tOwVm$+XQYN~paH1NIzb=0DIhuSztU!s|91-4Z`pel_HzobIANYVW% zZZq62dikZHBfM*%j&KRNWuOkkaVoK&;Z(FyDRT`pV`xXJrGgvghFWlcL_6UY-$O`; zTX-v8BE3Ewvip!D+)DWc(&6v#9Ds=|x?Sj3xXhrhpKpv|?w!;vwB?`h-X(Ql2H$GtK;K`SIrc4EAmF<#A&s$&p`dcxDu!_p=| zLu&=9by@rp&5br+anQP~!)$NHDIbv3unI%xo{;C^VyvQZ)-;@}x3gmk+v^^lhwRPG zk81HDd-H3BCk}cU-W-P+1^s~5=jep-|6MKZ!CKl-S6kRDB%P-jqtXjJ^akc+0q2B;2dV@+4QRsPi+BhtIe)mvJc>a$t@$%UJ z22DH>tmV6C!VXN>gP3?=H)6)a($&M#_YA|tE4%-1Xkx~H1ry`{117?`iyl1>=RRk5 z4dp&x?h0{od!*L((qydv0&kaZQ2jEWI=V57$%7|Drf6jHSBCsD-c4z^m=05c9*2*vJPZRxohmQIF5<}hV14pgq)&y9#Y~h4AFJz; z4uAiX&cT`ILhCz$|DC~kHw6%?-iq54U5-`=Li3J0q2Ad`aVAGm2A`gIXbrva#E_5X zC(s6IPxPsiWa~S{E+w@YCk=<}Xo{{^Zl6;u@MPuImzesHhL1Vg-rLazT~zfFZNW+0 zfu5IpyC6kLmq_&A&++EBf;j9}G{Aj?fwEpm>QG!*FC=w`0@eHQ+w){I{+rdUEeh zK#a4(KBoWPPw4;kr|5jW0~2Z0IM8#lmr^fHRN)&5IH~u8kaVGc>&DDv^6j|8;1ps1 z7Nuu7VYUbLqPpY{!9!^S4UsHVB&(zp+8cAyqOaJ&}u>Bu5hHrg( zAsqbWf}{4x1)q)sg`Neq;nUL^58D&odGf0a(xSc@ng}eoH}JOCHv^+i*4zG1!)fw~ zPr_+(fr9r(KKtMHYQd*Jo+h6IO?LVIg|X_z=_CYOh!*F5qKZHu{PyhGG)A?^W_+Z62ZG<9d`6VH*r`TsgNBv#B4<~Jss+CIu}YOwdZ~}) zN*{0e|A8tyKUVRz66X(xILnX67ht^L+`V_;EOpWfS}us8h5=t-sC}B1v0;>&g?$Dg z8+b6Dk_n$sjT<8Vqfc4Pfq*`pQwg;O|iuOs5WZUpW^&xj-992?|6 zik&P+mEA4DUrPR7Gq7)kC1rYYJVVmg|4+*EApw9y#iOA)@jw? zN+DjRT%i=zY1pgPU$kemv1aemm9Y}N<-L6w=B(CkgQ(x5S*A7N9Il;~y>^biLnSph zrN26DsZwVTd>cG>debB}{V`EWWLoPyTcqW84w^Lvi)QTU(o}fSMp~-mPFXO;7_l48 zWMCdQ@!mtt*rU|^V6o6t?bTYX4z9$?Zf5r~!CUW6bFXo)c1ILWK#!MKJEf0O<0ZXv z#@EkBCNuR{;>a5rPC&=mUn_H}vP}gVi^<{ioGmw4bT*A;lzH%P8SXR|ppp`EXEtW)KCHgVlveMCCnu2~< zlz!Mv@k&3mtY}z2G+w)uX8nV$)%>tMof#~v96Hdf4)?OrxITvURD;!MBVQrcv&-gW zRQt7-(qQe8{{c%HuTz>~J!E@&&WY5T*Oou9)5mcU6;`E>AK8*|3n=yWk2c(@Bavre zC|=GjRPmAkyr?-}A1HILZCA&C!pjU+mD5=;hc&rGU_xt2kvW+#(J6B!ylIK@)Sx`2 zaaNx`>Pkf3$YD=8R|K%~3l~mmbEB*`lBKwF3nof)*lKspYx)Dn&@ZBddiM>WgNTAV z*?p|nw>&$Ly2Tf%^zm*$uKr4}wWFsZ>+J~9fW?u|1WsmHEz!r9UP}pgT`WX+{cnVr^`*2Wscf8L@JvKS~7^K3tQX$P%y~dC_xaS(;0H$Ixmcdrl@aVxdX)^yHiNRyUl2kcO%$$R<8(QdOv5a@1>?EFtu2@!*`*JX(%DU{I_F4gqdV7AYkn+tEIU)Kl^;ve zSnf?YU7qZ@$8{DZ3zN>Fc_BW4D){iX1~rl+h(yWQD(o^a?0_; zX1~VES)UlGs{lThPLw`QZT0Cv$5rT87G^r`fQ@Yhb*j`nv%rE`KHn2*(W9k_9^P0V zoaGftewqOzmHg@)r~D5(mST(^R#uR7mbxHRu|sB??pr)boo#DvkD2ujn#*QkHha>0 zv-f7!VCJ-%Ipd{tjAv+GYX|1_+asJz<$kyS;QrIR_7BW!SaX~%IIqu*2#xMjBYywA zSWv0q*g*c@EBR-G)9p|FHr8UibI@arBA;R(pi(6QjfU1eQ){F*^R7Gne)BK_4m{}Sb=+acA})t z*89;H_1EPiW-FY&J8YKE`OaBhI#5nf%F&GI37Zi{$4$(RIia)s(V;(}$)?#tb6txQ zGTu#{$f~lJX20d$04K0}%3bQbYjgE>Y&0KE(8}E|I*W7~ zBN=%=myutyH)HASw7zW8`J9p-Gs9p#C|D~llIfnP0H?>!dIQ^rAppnH>qtrL~Yb~IQavYNy)7-9(FyKp>u4>*y5N0TKk1~3+R%5@i?WK zk6dpTtjq0o>wN5(as#63Jj8~i(JyUYM^4S&Gt2k_MNccB^BCiC-!^YO7H5P^JLzi8 zJq>A5yDKKKX79?CL^-Q=#dEd0>cmyM8i~q4Ne6SM573eyl4WHTon*;s%vz1MD?6nC zPpWkumXlI&IKv3ZqRBI7N0nt1h=5>4t}!y-PG_Wy$N3wGf-mEZhtZeAv!lu`!X;DV z%x*^!yObof{3lmD`W4AmyZTGH3c_s+ZgJU^Nj<5_Q*$-A#xbK5&6c_h;G7=|hsu|` zon?vs2LqZpG%8oR)Vl6>)x2if`32|~XAL3O%3v=20Y051C?~sIob}m+a#zjXDOELl zw=OSY^ISL^(0d5?1R3o`Y>|uFdC|p{2wuAFF+$5}bKNNgL;G?t!vOfBfXf@gYBI{# zgT~0`spELYS#Puxbr`KxY01WECKDk4osj5%l&kiN{y%bB^9}Yye-mdhTOFEt2@F*3 z#{JoWXsyh9% zr)8s9N}5U&9XYx@Z`$dc5G7EooDLe1R{qRoDN{5g9%q5ie%~c{6VO|=)NZAY4_q3o zr^d6tWq#!v#dLCC>02(UTPGiM(V4zFZri3w{s46ElI6v0bpDyrWR~WS2KAVK8=q$f z1tu)bC@@d$Z=EdFyjHS&Yb(bsU{7J*n3pHyjF+ONWOg`jOwNgHU4eEgCne;}J#xst_;DH(D>X z5r*H7=H^{2YON75*0Kfc^1QRaO;`L~>;-Q%lPpE7$V=s`=e&?{&)E6wS?_d9JF{#5 z$4k#PN>r=S`hEh*=Pl7Z>nuMl$CwM_6WGq%m%2@Iq}e+1Nw1~soIJ_=Ts&8z<&VUR zem6#mq=|+l7ii0Q?Ho6!Jyd9rb+ScXESvH!l^MUr9?cTVq7~>zvfUm_**u&S?8|t_ zCgHT$n!TUEPWr4mr4YZCUIeU;%i|;8Q^qu!>&#!94;_u2DJA?iXMLF0oMSIgQlQ~K zKV;8KE+|dwn|&syvB026NDHGmPq=&=xGZyEq)mE$i9LgLWNM_{C8N!{u@&rEy7>mw zz?<%3?Vcu9=N^VZ~V+f6!8(byVknLmcmwgia-@L<~uwg znE&j0faS6n*x#^c_g>8{_W>8$MLC?h(T*%gSN1jPC73PAj@w}_>IZd5wlC?ydkCS}d>%^t}tWxOjA?Ypp$HpAPHq_zH4xSU0n-OaAV z=-+IoyjSvd_7pY~eXTaPv%jIQq`#lWxSw8W&K}7+F#@k8(JUZ3G0G>CxRM0Mdmn;L z@x>{B(G=yPw< z18gpfNBIYAqtHw0brJi05;+slY%+!{g`1E*^@MnQGaNBiw1HQF|&55yU=}gfkvBA;D)AWk4om2za83UQR}Oz8sV$Bet5qq_C-#3Z7lB>u!Gf-FQ+LK4yA7jg5M8gpBG{a+a<2iWE(%OQJ zk`bK8j=4O#8lQ*u7leBCr^zZ7F2cC&@J<4))5zWG?ezLGQXS8F-E6vLk-|wky&I+J z$~gUYGVy^Z{*Q5k*r}e($?qo79Hg;YGMRAoY1~{^0q8b(W_Z>O%vcrvI#&$aqR3vr z?`~rAm2u2>U#4KN8snIP(Yh)r79+TR+@9~vxxmHAKXt9mr&(7rS+xbDU<1W4I}*;@qN%ThgsiIUEGi7gr}-{CM>yT+0v`_(|Zr{k|ft1I0`rPV`TjXX{y zCUb`97*D;{R%w0JsLTk)pQ6&b-pyF zDG;Eo7C~DrY9>w9%UzCM>^OEbV1!gqrOlx{l03~>BysL#M7tDy%ty(Z8Z*{yxr4NLj+#c~5N*_+;3k>k({2IQT^YG=28LK~F$o?Fq z$jUPoF2>34{?yu+YZE||iouH`7P0v?@= zVbv%(aX9sCK2Q0Yh4!#nC zvkN_@XF^04JTPicqaFT^Ijp~2e?ZIOM0a@Cj5ZT&g#L2BPw<5I`3cMLKA*IZCr9nG zWuVUn8@zpv^YGkM%;^SBRurB}U99wt7X@hvdPhAA@A3Ugk5_W3uzxSm<6JNNLtUxW zo*m|g9oO=|v>P)a|8#<6yD2?#2`mz09!27s>`~Ch+QCQlxl`C4P~V=}*2+o#^QJuW zZ${PZ{WtjG$(m|tW3#K|Y@)Dxk~F}^GZt=M|77~L5x-c{RLgtgMuK;oU0SpET$QHa zY|h9T&A!dPcaqvV+RSd-R~?%=7I>aSJ47Q}J$JCP<*UsO8@xKUSj4=q#aX%2TqD^> z^3L+h*<5dpJIkG4xXgWUa-8z)I^|i8`<=oSZf(*e{zTk29nltl!ckW=W=bV{Fv(y! zHjeOj1lq$W8{{v)GH#_S%HpwU;Ma?QZ8MwIdP&C-aRAKBe09c+NJ?Wbf$ADzd)Q%v z_I6wit?P*EeCd4HN976Lqy)=!TLNDacdDb_e5Iqe<4so|EToxs(&)TFDRm87={7M& z`Vr&GHQIEyzfh}ayef`K1?O#TB3p%cn8LxhwTdk=E&rZYL9!?|3U2P;`tzM^ZC-!& zIB2y0NL6*v+0ddz@{(IGa&YpjG~(8C*-dE?5@(%gi{K~NMwu_M{gF30uCXNAuHi4T zZ#Pd6QZORwxeX$?Vli`oFY2^f>xXeJ{Nl7!&p#8eqt&Ldo=kuR4HzkB3hZ=V?ss|F zB+KczV)hsFdkORo{C%LFza{jRzTu*J=+|qoJ9`X_*@JRTlSdNG49Nyh5AHImdCgpX zdK1U>`qHf9Y*}my%GEn&Sl=2ugT3v;S+nLhI+EG5<;P?fq+INHvUV<$bc(!5hLp2Q z|MF=oY>Jed!(VNm!J0G4!W#z*PnC1}iiy&goRhvcinSGerPnKx&ICypU3FfSbl43O zU7Z9;r?pP9O-1`z4!!l!v2XZZR{W?OAb44U;fNe({%8Cpka)}71_gqxka!8A3biWp z{EE!0Gu1=p*-aZEVMzC|@T2XIL*_ZE#wxJ!ip;Bl%)6Vl7mk9gYlN(8Y`zzMc#?Pf z=9;E@If6y4m6M$&(eyE-ltI?Z$6Xfrh)*XQD#ll=ah*uTsd>@|sjGGwx#ihdiF!Cu zDlV?wl_Wwl&#v9IK^!Sz2ZU$UE|&(|G$r`;6>qyZwdBz}_z#IIX*@lt%d)wvR_z+6 zS+(m@aP8&QR5Hbri*iqBLcY6wx#XcYdF)e9r2c|^mAaU%+Ojijg43GyaH0j`mRLk%h^03CDw!CWBB^)QM+VzO0cGsok^+C&ziZ%(SkL8XJ z!78;D-^6Oz((FT?2iPkfyQMD`vZ$s37IKQmsHOTV@cR>3A!99fdG5q-llFI>k&q?^ zZ4~}%wA(x>1#uSDgJjp<4XyDmkFy{JHcMvptej48)Elcab7~59vKw=D7m#$p;B~Z%z9Cw~{9B$BlQ)_<9mBpIS=K733I==2OPQ3za zKL2)YJ9akkRR^8OXi%Q;IP;W`ycqtuvGC7*FhGN-C$Z}Y=-(!G!Xvw{-9Z6kZ{MumqL1bH~wRhlp!KGWTy@NlEzX&RK1 zHJ&Np;fcVoS%KQ)BAJ!X?(trM^|5Ss0anJAx=&1|r#AHA9>}t6_o%|OXPIf2xo1}d5h>%BV z(BqVlqnX;#y13N@|I#GsFsQ0zIeD2jW;SwvN4vT?Z_ycHd&w;b|POY*qhL^ML$&jcx+EKBm#k%wb0_>=14SSBtW;)iO4AL@2U;Vh=f_hl>$`l4I`WJ>+Pqg8;WvUKT&qA`6!b>b0&dlR_ON#@Z1J?9ExthU zMr|7KMsbQa>hJJICEKS!H+WR>My<}AOaq#tK-^OhT>lm9l46{jf019gNH_J zD{%RnVLquc#U~Xiv)iVYc{*W%G*|ItF<6U(cgN-BlTo()_fQJb$|}SJyI7BK&{T~wj_0?EFG5tNK}thRnQ}K zSI{GsGT@O~@SPs1b(7UObTRx`FLc%_VT;pEe$iwvodU9VG>_q>09oZ`uv(cu; zrqR014QZl(tX^w2J4l}h+;8-dO+arVnCQPkFL=+$Etz(6Bt|S2sT6QIqt!o#a#f{K zzL{>(|LGa6r`jD|@P#YXc76VZ+m3Lg!9Fq16aC}#h|4nbHl1~pFbI#%8f~L?qp)_X zwrmY+`BN9Q+gCcgUB9bBk>kl&ADc$&W4|>h>tp08Ij>DbTPau_yF$-gdlNX*R=~j~?O1LFyw}hqKaR zq(uL<`bhIAhZk~Q@CvXBv0r$ORo7qIpK~UQboQn>FU$!qMd$uY`j$+CIZ+wY6Tp6~ z`FaI%r$R~8&PI<_r`Jx+O|?!$%p}!FYaoA4TQQ_AqkKNsszdBa?s)&JXI6Xqnu~EiU>)|*pb0YF693~ncgC~al)LrAA!r}^U zg*AwES;fxf3%CBNUMxSIx)dmZS=DNO=B<(n_E zr6N*?2d&!8`|S6j$Fcfk?}{MKSLD-}?91N)U0yFgED}9Fk6MP-@nOOw|5d2#TE}?* z%V+95XJwlgc5O{Hd}WAJDG;U6jCy$s`WTIE&@rWo%^#4*n*E<`rTIZ`P+}es5 z=3?6Nca6Vuk7Et)8f!)2WyVWcjdhj#Hsj~pwX%A1<*gbXD7J!P?`3BT(-6Bf0~YO7 z`Yg8Jo5ysK5lSyUK4bDkB2uc!J=2|2xYoT`Mno69T)x@l=d!>DQxAX2ZeY@vVRA&m zRw7UJ?RMX6=;6@CKdI3aMpn|g<1K7F-o@sfTgXRd3}}8cSeJqo#9D#|On@eQ=6zce z49z=zm`4~Iyw|ET%XaN4pGLbiZT}pJspB;<;YQb`@FOh?&c_=t9xoJ<2Ui`DPNnUA zE-U0Q%^6ByOTX%!tV<2u7?w9YxfJ zNvSCzn>4!jT|ZIm%|kAtqX}Xj_6tePCvIMMHA?GHXzkasoUj_@lMbn;vX^p z95nI*q;}tkX7NQhI?uH^>KMwM6R?!U3DdM(O6Qc3Bp3gZ!+L{(96&lnyGWC3ybj=J6 z(SjiTx)m))>#)C-NACCVq)o<2%cUbl&_cvDtxo?=?o3N6Yv!Cvtp=smeaN>l?Hp=V z*WRzJn@Xp#D`yhvI6GU?J|#mZfUd+PE&oV$R_IVZ9I7WS1QmK11Fn&xrM?D^ycZa# zZ&;sdFI1Wf^~vdv+3mt*sC1P+3Jt_ z^09m4`c#9(?nv>ENkeb_OF!UxetKy#Ta!Hjx7CF|&AU{+y?LMezBwZ9YkSFE&c5>P zDL2Rj)0tMf33=2oOpG7a7xf-lRUV7O`fVMSR~<{DAnf$rft|lQ2y=tu;PiVn;dl@9 zd=mIJHK=Vl{rSW4zIB1TUm2Y6t&ZeoSj~=#CfrQ#xWRvNvynbxmjB7rdn>pdKI<)3|gl-4E~6diU|rHb=E#t z$b|aa%CIJ+P-Q63^!7qlgQtejQ^eCvZ;xR)xFPRU8)CY8j7p!>vDgQ`8_Pvoz9^k$ zjP)({T;%WKeto<gVKYk722j|K9ZsTV8 z>wIQ>GV4<@ex7E=8*Q|wYJn6Z=1UxxUq1sp9``bzCthF_Ij#bEzKC-1@5wpraG_3skXRJ5}*8f z6EL^nX-{*YXX?2-fz$rDCC^}O7`qeuHmCTx=TiOp=RV)gA*De|ixk(B6-kkVxJNsB zp)_ORY>ej&W|pn^F5{^F=yRsXOYL(zXvAk=_B?*g!)*&XLcNG%ncIm5)R7OL7jrv8 zaM4KTHc+i)oEfKZa6SHL5B@tNv=s}2yD7ITbK#_769jq=o)e`kf7f%7_$007p=;5Xla+gTfa#-Kj$aB z)pjMy=`g>HfFp|0+rJ6>a#cR5$|u@mkj+iViO;0nDkmT92!NZ~b@TP&wqswOA1%>az@RsYD{qZCx+_5N zX!1rfKW6hi0!94HWM8%Yq5aZ!+39+4#)lt_B%6gH@5M^eZ$+ng|rD_-)<5~OS)|h&4GuQKXNR~GHAPqb&K8SKp zIM(9-<3cX~amQ#|UVXaNg7yToCp@Q{e=F8EudJZ^PpMa?J-n7^_94t%^<9*xo9}7b zdVFz!lPCEX2eux+CougcDiv8VgUywfd7@xjUM7z-$H>s>jWwR+quT-kcC^7d6g_hY z8jHv2A!3G*#G=! z+jqD9l2Ve|HrcK{wl$E&u1&&>PC8vmvyy0=cpb$!aojmz3mypK*N8rBgrsulH@5VZ zZ*0$!Tn#CAy5-D@P2Jet`1?4?CQbx32sTTlhvd3r0i+JjuH`_*h!8M?^Dd~@iu9JV zeiG+WB*qT3LTykB&$diF9?O{`E%0`1Y_DkB*!G#idrjQ4?F13!<)xSOBwuPr}BtCg-U2BRQ zS;_NG2XCgDOg6zf#x6w0JEqB2F%feP_jcNOa}3saI38!**{7B9yv3HPw73f`<~DN; zDQzZk5C*QnUCD7TKl2vfl`vXV;WXQ7k6z4Wl-YAQsk&IGCm0Dno~JjLguTgVLmzQB zh1ph>R@=t6*fY7=d^=Z?p_jn>J z8>Qm<1x=%+wKof^?HRpswcu%jblLo3)RQYs7e&O>MhTiot0PM?SDLKT;yZn&J=3DJ zq6u|dMN=e;$+DbI$Y`o55%{mi2l!n@IGwcTA((S+My9UAF;sS$FAzJKYO0?R-TSoDbA04zyDY>Rd6pOd9>Xz%b(tA#s@Nx%Ro(2Aq&z`cY13~ zI@YFTVAhesycxaN*E-9ejJ(OMiJSTtnk$jpd=70n(U!B-E@k441)rGo2a4wur}*uy z8LKt;Z*yc3!Of_)gV%N&bl|QqN%$rHlw)8 zG=unZ$L9-cz?qW)KkY!DDI_yqvNN}QrhL_{xveX29dYzrK#P4u8eX)=@Z;=}Ql0eq zLeFZVwqnbfxY6mUjL$OSdkMuj9JNH*=W4!d^?BTDrQ#+)= z^?q+Vq}6>j%=Tuiq7_j>j)^TNTB>oUc8v6^v{7p(?U(|7L3Z^#)OeYqdk?jqs>B(^jYM79{o)973~en*6u z4tOpbm25TGL~tgHBU*H><zdLuU-p;in3o?gNcXL4^Du%vS>Dae@&6k0w~^eWg)= zbIw;LON8wkw*mSzQQ%7!dYbW7gwk7krgKf8=bf)rKcMQXRDB~iYB(ug8X--OvfDLN zI}5(Z;dCQ~gX#SX$H;5*Mo60VIM+bX?dR;8-)q)uexGV>lnlcEz%Q6;HP~Cbbz*#@ zW-X=hhkCj^RMV`q(Q;j$7VAz2(`)voEYt3Z(U0E~lO8KkZQ9>^c Cu~>gx>m4D% z?ng~pQL`4c%o5=@<|Q}N3YxVeA}#43#%k7T*1iwPAscupM(VqRFX#o7V}&QX<2ZBO zh&rtOb2IUY;iHBAJnn$qI-(BH=nfarZ!><2Iz6~nV&(YC&V{=cRv{|N+&H4KwL5|{ zYxM_WZZJdXaqGIgDLSn%qVWO5E5~?6g^oxM5g4N1IZq>JJs0=+LbGJ4%xDzWaX6L# z3|4z+wBQG3r_0S!rkCF(Pg)kO;=#L0Wi%3 zBqJmvU^3y?IFX=Yo@Bg_!@3+nbp%k2#P5&G>yDiZ(0s6z)xlrG!COba0{CUH$1p_t znf(bCi`Jwu+Pwr5t*MefSk*qco*ROGI~CSF`iatPfA{Em2zgIa+c_LMKiBANB|IDhKUSWckVXbKD zkHfgY&WaP;N_*SL9~2Az7r{zt9j*>s#Rxw|py#VE1!+`+%ITCDjI*9|SR&*X zkI}|jCEzEVp2Ij>xrtICeD9jPBY1z6F_|sua5hwRRJ7G~Y{W^HC)&0m27Tjkf%{!$ z4t6uoFJB8jbRF+NU^zR~3XKfbC-J{}Z)bJ&-jte@0{vdI zJ6PgJvV`awp3nHvA}$>5CL8OF6fa7f(|i@c!o$?b7k~8oea1!gZ~*<92w)tL3{*h z8iAhbb3C--K+i1TRrHr|v`V5CRSrqAihLqG*RkpJCc(N2+Fm2Hw#HUr_2T1S2WGNG z_+3fu7A@2vWBkA@;Re@qGC?^5{N=XDaqo z%&B%|Xboceur-JVJIh)PX;fS!ZM%UKc~E`1Th6=WmvOw)Hc_(VTJVRjAo?lo;IThk2mmD z_dMNJ8T^IY2%~LTz*;0elj>8MB_|qfS8>tOg8JN>=fnO}u^L<7ly;{4GSB|}h_Y4r zE=!cd<(*r?TM|6UCW8A}FTov&vbS+lEwPTN%3IUGs0j5d=1{)PNYdY)gWf^%zvc@9A50_e>D01A0`UlNp z92zFit1%0<+^183fx6~eV4xl=4oKNE+Q6F{EKDa_yh1}Ui}lK76B{6nIPcS`*o~pi zKJpxVqWBFsM3xvTO0a5?!sId&=I?xI7V7PfOBGYBZu{->eD;pVTp#5%AVxmfmgynS z-V7_l`VaE+m)o9t+KCkGiOgHv` z+^0=uxVP8V*+KapjXBssxz@(i%H&1;V@zM^49M?`Y#ODWhhj8JEf3R1s&XWtKB z(;2#=Q^u()I*YX`ER``TBo#4q!dnhJd;W4Q>N=}U#ty$;?7kyN<_00j4?>a~qn>L< z+79*6q*zU~3Y6+^+d^wTRl#+?wk@jd$#Mv<14EkLAt>NJs9^s0*?207!aL00>1LMG&Ft` zTf%W)pl=n*ITAXXQC=l-^C!a-%gN^Xf9p01dU(2@Du&!$$jO)Cd9Tm!OSmbWJ%Col zm@4c4*eCh>&KKUqVgDCdHc48}Iv=(dy+4Z;LXW`Bze5^c7x{YEz@tIA&Iwgk4{E7A zzor;I8rh3l((o)AoGz=EqN@7vMnLaf^)zbdG_HnZ@qU(kbX|bA?kl(1qA{Xe&u$Ha z#G8775=T*jcFs~gz#-y_xSn@4CfH(n*o2+f`^EJ}%gn zXd_(Dq5;g~CWtM#r+o`bf9JNh1@vMO|2@jDTA=Oifu z)W_pvt-S5ll!gWM61(=XvkP!8R{}vvr-dR|^rQ314@T6-? zegj{B5A1?>qB8vl@Z`W2vLs+xHE6|rw03mI;>QR(Lc@)~WCT8hS;Fd#h{QACEUn&X zgZLL)f9adwJWM-!=ilF@cNGnZNrC*oK+X`qaN@KW1J1A+j6vy72=qLu zln@%efSsQzOJQ#QQu8-Z`|U$rq?8)Tg^S(l*1}9d&`+AaGbd zI{AyXK+jQSRfcH(q_SQT!QI(v!0PLdTX)t8h@{0TFW2)y1pIx?fu0XeR$2Q>@5iEX zMVqNyl`xy1BMC#%2DsheIf}I*?;fqu59+R)pCdl-2gE-7!G{$W%m#{HFu`A?MlU#5 zW32=pe5?=_IM*29shi12>Xe}eⅇs0>2ThA3J?N8``ScBDMY9tu~_7#$c-iDYdHR z=6d=pDz{W)5f&MyD4xD#77zZ{Do|t)t#g0VrbevHP`H+=!=5ypgZ>3>qQr$wXEP9g zZn7rXS6btYBTZRM2E3C$t%AQokoL{Vzv**V%hN}mhW{~BTw_U3wb~IGl5AOH%#{(> zvd#@l4(qk6-5Dm~G`#$zDMeO(;c9(4aR+j$J)muN(So|woCmf+BmF4m01#>uvCT@nvN+pSEZE&WBh7ra{}s0$vdC_dSSdA zg_igtF=t=lJB11GO0GKTl!}^@5LLGB8+T4}fqhLFMWLBXmDAL9fwx z4z<}=FUqv9(Ta!Kz^k8YY;J5n)NXGtY6sVTPN*;1L|D4c@hi4sfYOO-F%CgmS810h zJqu4F@!{}$9yds(>k+xL9&>_9lwnRFeg&U-mhL&UKdSOd7~{^7UNvm9r(; zbGgWSjh4%>J{O6o!a&ayJY^ndyAw2a1;!y)9))>54j$mkp`!z5|K_X{>x|cV zXXH{2vb;XCa9G{E&y(VPXpXZ5vE%JFk>kj_&D*socR$LJ$I7fkrHoP_e#Q_ua@Tp4 zUdgu4CnA=IB6%>Lx{0f&Wb%0v*N|?1qWMJopalcu0gEwG zjdg^*C}V^T^r#W|n0lRUR+>>nN-OaDQ+eP|Baak|aE=)?53JEf(>qN}JyxJ>=7F5G zO3wbQkbVN$irTe^Z00meTH=vcSQjlK#m8gr2@T#hUTGtS-hkFZCk2x(V&JZM%qfvi zewj7O_IO&2H3Iww=YuM{2-c+So5SOzZJnr*akd23Cal=67U-$@s26u!kZq zP7vA?*WE$d&bfsZCC+siF<^!~IMi1cm;CJFP1IL+bMo=G0x9*?&7yxExApjmfQC6U zJC4f%4!i=MGv0Sh4ooSFFm_s*Tx;TFdN=J~ZzJZSFR-(jB2kJ;C=x}FlZWXUCvQF8 zA27%xw|&z#3jH9f{TXQVdWTyUwp}ZJ)uzRo4n1wf(@{2f{B)z(H?YlGasoZSd7s{M zJ>Agc^|lJ7#!KNjICFr0?uvIJ*wx#%=-Y9I<;D3r|lD{?(v#s!^ zi1C>+(G&IqNNE+*j~@p^%nw65( zVI@C(Zx-4$qg5(-3MB(Q{tqDA9Me(qjbfcx#_oiba~S@4v;AUeG9rWC4Vbg00qQ@w z+-Q|UtAr`q#eq8wP&N{0j+uoz;E$eBjoaR%+9N6p+3#=H$QEh-Bn7oO(=@ z0zEs93G9@T{|3|vpR3=9dcQ`!@MC=_0)lq}8D$e$GRhh%A}gmMozLp$kjFAT=nbt$ zlx9MgW>@0*#Brs+SSnN5^nbkv>uq}ijT?<7Z?@XD z;rCXoe2>N{AG&!&!#>dHrEttqE`|t=x4`w?XT z4d?dik_Q3%1E2Tbapn%4I1Ocpmb(H~B{daWj~@)=!gp6Fjb5lh1lGgFYk$^Kf@m4V z+B>}v5eOby8KP*3{xPqV*v((Z&6H|?mWuOdZeo0;Uc8A#lz9}dzlK{N5o82mWF#l&qH+aBUaIikGRZsQ^iw*EUN`Tr1z5an%d z|Fau8e7xHhZKJ2nfx??Kh!snL)<@~u01q$Iv~7HGidQXFc+>P}yPCy}NSq21VWWPG zM?VB!uuliZQX{QOo6ZJau4r@nx1;v$8#lJitIWlY?iyfP1ia3Mx-@#LwoPv}&_@VX zXT$uqjoar{4vwAyGj}K2i*@9BlaIa~sOF=BbxcRf;vHH~a@wW99Twy4ORd{M6MFmA z?3NOpxFPM%l5${w`@*fqzX^Ni2(yf2pHjjpaBtvNHIjf+<<^wVh9ka zwV7ll7aS%r7YIB)7$`+b5xEEgQjB1Ez%L>qA{UE@ibzqBA|fIs5)mn-l=@Jll=;2) zJ~NXEBK7I_`}+O<`2K>&&zybsW$m@s-h1t}*FNV`S>i(Ph8Ll)TYW8-2sJnLZD9P& zDe&}V96cTNcO>(okF(ohgPDcuWM}aMIrpAC>PtEKg)jN!F`upZEeWbV@yw=y`n!|v zRJGpV^0YAfzWfU(K10kQvc;Y)+YB=rFSRdxZtNN5zGnGje_HeM8b*<>^J`X)ugjOx zI`l&PP$NvY=c5O{iu!8@%SNe2dRvJar_cvD?nzv#Jc}aYHsq`DUS^`I(YXF!AN8d|$yxkc?{8~Q z+R^|8F~fh_F+q)p4rccF`N@oAw|V066-xOU4m@1@n^=0eVJiDqM(@6iqA6c}MsGjY z29MH){k|oX%&3!}T7Q@HZTO?lo+??l#69jPE>iZRUsBQy@v1heCVjW2&ma1boqC*a zqqu^7(3VUZzMsSi|FA6;+rwgf@f-40J~sPT@wS-QIE%(J2?bl*;g_1+@VT#V!!e&) zIWGN2y~$fuqi&3|YKJe4!%3bKus|M-uZ{T_%iCdd9x*F%|^Usk3&*Pa}wHkgB{12WIP5JKe#JzgFVXj`a^S+J?tB%Ma)NMpoRZ zSCYp~R%;PkD)Y(yzaS|&D&EhCcW2zTlfSvr+;a!k-0|_Hv~k@c2C#l-S=-Ms93-YwTEi0v2mKn=?j-E|!_`}!Q<-Yc;i?fLt)ecf`zlEJh*;eOtbpm@4J^1;bAY|;P^N-c1dl~p6swU zN9KpU{J>HhGkt1Ca`c%FSs5LXuBe36m9;Tj;?5O@pNy5%jUyNr!rp9_KcqfpZ4}pZ zQbjGr%MCrE_N#%y(=lOh)}9dMH3THZ=}t}u1ug`SR>8S&wG5)aN#j($9@cH^JX$M(et)Y_t=SsflueITQ@i1*|{ zfemUD#W_pE{1l(=Fr+>fnqt?o#(CMkv?Vn0{(j;rUqVI6w{23@Q?4P}?=cDvG{#FK zCavFKSH6#Phtzjo`^2kJ{J$}`UhIl>UK`ETGV?*lkotQm?cTLvI`?oq9fxuk&DApV z0kqRho@TC{|4_?C(|5mTn@;`T&xjq9mTSX8F)u$nDuTL>%{o;aA1SMbJKlcPo^ykr z&iC5*PW(qhzzU}%$nTGkq*f<)OU=fi^|@jOU1 ztaX~ts`9cZPnCYDLky$p$)356z6}S^i1hhA@@F(#rsm*m-;McUW{gXv>2W16Q$098 zeZCr}%`7`M2YXokEoqKfMUJR1I@GMUD7;(O;k$pT@vd1`$6KLZ^RRu}Qso+|Qp+J2cDc5m%BijT!xE&e@kjpWV@QXiJs?-CQm0v)Q%wAfcYM z5uCFu<5$^QbD1i!{GaXS^B#erYKAakJ1uMO`ETA~J}_Zu{i8_iqiaXoJ#hoDPq?M+ ze6Qx)_v-k&{G5ES0S~?@*tXv2F)8d1gUvCb|MvCS{tY0>w%w_rN z^aHzqnvy$tYS*L6P{M06l(yT0kxR9d`Rp^}MslJlU3oT~$T4cxtMe&V%f~0wu2MFc zUF%z7OKEOSUZ0)y!FnU1>%#Hu;@kK_5ATJIN?bT)y(Iyv)}LLD)YAXS<#RzF9HpHq zf6*J**G$72$Jcl{Db~0%x`}fj>Kt9bnx`yz%A%)ibwRsz%pgXqfIV57-^UpZD=+MN z{vFokuU*T|_rUy!l9~06+JdB;P5RFwNA8VSY?Xg~jLCj?+#T!=_1tL3-e}J(R8p&Y@Iuk4q~a;fa< zZn+tsBE{Y1I=yB6RC!pIPnFi9Wz>8teq{b#NvW#G;Ypin|HQ{J&HSP%G4wDRX>Cv*)KMV<^xd?w%>tmMhEYbwv+HRu_)CA7^? z#NVEC&)OsSLWIN&LDRT%(UJ6MG%UX2m1|E@bMceo<~M{%BKGq&XjeAJJ(SS(`I6_A zMDVT>4t6_O3x_*mv5h90%DNdwuFY7z(S}^U6RkP@zP1is#oj!Atv>hi5~a0DD0zO( zE8Sj-UDEA$%7-}MKRlRc2HLt0jn49c59l?ml7?i2@s@^_$0N+}B{$H|Mc6BpRH%&Q zyA4UK-PD_3d?#9-{=5H-pSAyykFRArM|QT-_}b@B$%rz)E4C%!QK?2~M~?ZA;&96B z1>N7a3CCj^`|Ivhy!v>L85U%$%(jD=xF7Rp|+*A7;>5f>}t@_^Pzqh+?<~|lGqT){!i%ib2 zo0rOB8U4bE-OOy~xC#H-a87H8-f^~kbIT(}a0Z()*jHC$TC}Npk1gMU*UfJtVzDA5 zJHnVf@cDp~7g?>S=N2E7zoFs~Cj@x&X;@rOZ^R8j_XukEB1Lx%g?|IX9%s>4?O92;^>JZrz!@x#dZTVklQZT1EDS+QSJE4~w9 z-y}C|_n9Zjo6~IO$xifB#iQ-IK1zEY0(E_3Zj6`a>TOJ^(kv<})`tH^6{~f7>DJ>d zB*w)5?~j&-b{AUPQ+RWHR~EbQyE0Xqu|MrgJqB{-PuX#kSs~qm@7Spixa0r$p}^Uw z{Q8k_rJ1V5@$JuyYlio04z+%ivyn!;qB$V{mhNXy`mT8T?$4&hCSA-=%f-3{#j{f9 zKiqP@J=e~Ad{hk-e?#M`IBB`j`STx+oj;o|?XZgx^j!#z7szk^!?RLb&fl3~&uxsU zG|mVa!rDFFv2|l7><&@p0^K))!zmSZ|-T02kqas{%u39en$~LdT3c~9W@!Y{A~TUqq`lqnI##=Q!j3P zi?_G#=6&MtPP2{4<;_RCe{t>&IkB4fXz|lxd54mO{iD#9oxxHxJ~|pLHNAGQ&ZGJ6 zmUCu4@Ji479m%Wgx$)S5mmZ5vYUTVV?>29>@VEMneOuP2;^!5%@O}qxuwj%O&W@o` z(!5?oy>-I(_~l2Mt8W3W3gfiO&m8S}Lw9@50IDy8sh#;p$uHLFaa23-$j~{c6NRVr z9?XUeTiBkQo{qbNZ(&lSzW9B4Rr@J_-gDbcfBVIFvgYsE?p)e7X^C#Zi@F7)<4b5q zBi_a?PBYV9a!T#!lzg*2#uHYe-u!-K`#&G)X8tGrFrp+JZ6GoZPmm0yWpg^pGpl4^ zRJ%Ad(|_2A_bBOvmx9T^(w_rLE&1_uq+s&B0Chl5KjC z*yoBR$ryKW`(|?ncWrpfXcoRu+eo_^iLS`8f6B$~3z@yFT*bM&*@fwSb&>EL>uSCVaPY8goY1Bm+O@+6?RwtnBY# zXG6jw^Pd?R&uq^7GO;9Qu->u9sr@Od{W3mkhF?M8ZruUZW}J#1-Zd$(hvhr*`~h{g zX(0ZXjeAX2>ZcE=_Ex_c3!y{3kt5~{CCRZ1FK<^pB0T=Pt!eloHxKT@@os;{ok+%E z{8G@gWCuP|J9vLdk}al1g5AVth!8`EDF4`t_()y+T?D@_^Xu~OTFxJzv^A*2>9#x)k3GasRxNfg>;XCo6THimIhdMCL z6Q(RPS#9IipuH%|_5fv@s$0Ve%dU%*-WTOk)@gfE*Jqv_xA-Lb;G$UcOXa~AaSdBr z<8HdDkMd)kx-v1Te*5|Dt+j_yb2zdgU%km`s43U<_OaetqO|&}--}~uy^&h$edd_j zxop8H7^OeH#d<7@x%TFG>rVL$Y~;QCp@34vj_J}tp8Mu<#QVFU07Rpx^8w3ebTqKuInpl z*`*<8s{?Tov1};+hQZ|2)W4yX>0tLott!6$LTSW}>j}ksp^laoVd>@X8nJj4DOofPX>XWl1Eaq|>-gw~}$}i6Q z@dm>S`V^QNOKKuAIRz4dKYX;~=Z?3F6YJ;5<>%Xkc=IW(V$cyanyE8D%F-5rZQhQ) z6>c8i`d9r0>fZALzS`k3<(0(xFQlo5AmM$x^C@Gd%P9bK4{ubTb}x@V*YxkB&+)8)BBo!H)7dn^~!@5>N1jvG|YE)f*LCa{9XkmI%A<*=iNmpLe>XI}H2Z+dSZS zAR{lsMk_|LAKIO_QcKvMdv@V%hu^dbr2eu^4)4E|nB#4}U>$T!pXt1sE=AS9`kqB{ z@Ou`mDJ=n;eppNgtWxSb6di-#v-n9uT1x&mB+Ptg3Wbujql0_?>GZs&BzQO+cHm#%HZ)1Ho>}PIy zBkJ5uX)$k+3w4G6$~NXeb1s;s-l}+bwDs1+u-qG6f8>p*(Z7lx`3+z2WX;Hz1=`Q> z72m)aezU&z@_X65vq8e6I;!_;OUL|9^skSzdc}n~QZsIHv>jn@-bcUT@^MjLOic5C zFR>s)eKE1|dx?t5aNdPEeRrQ)dzku8mMu)J>Tj*RiFLB|RmeN?lkI=#a1-y@jCOrw zeRbNNh_{&C_3^M&zRqZGzORifW=woo%zb=KQPKanygF2UWART!a6SL;N}S*H99g&>yW_e1yqx}yi}`O3wME7A zu4bFPQ~XW5`)Nt)--=?9qjQCv77ZJmI(ZE5Q{zpTR>^PWO8&2UVr_BpR@T%fQlpW# z`%{~Z$Nj-*EaS8EUWgoOmA70>2epAx!hI?)5?H2cU8G7t3dKnzs$li zuZs-Iyw}KYQfXDm&x^~ds!E&{Wc~fTo958N%r2{}EG_W3O=m@M^#r%KsxrlFl1Y$U zsjMn1uXI;TbXSDtTUPG&n(C2hJxejGy^nayCV9>BvI<2uUwI#;9*@#Vqel{-%7-Q~ zsfvnhc5y`$ze^=Q^m8jm^Y&|mX{I!#RK<&q&M5O%Rg`(IE)J&YV1JgOCHjNh6%}O_ z9VvfsS(&R~vRnO>j9}YLaF&}B+!M+wCads?DW;>QON}B|ipm>r(yJ?VBlYOf!%QqJ zaTh*PHM!hvmZ~bZ!{tm~3{bBz%yw)T1Ia$_;e5>Gqn+!m7rTJrI~x zW&Tnm!|A=F3Q?%4uJAG(gfN;s^|MNMmFcaXP~fgG%ZmJssY(vyc@5fOiF$6OFD!9- zi`@Y!@aI%YVWsqb)keCtt+>UMHNjc)1LZZ+hzV0b|I zc~t3STqC=n+=fJk#r^{P{UlE0G!6>qxGr)@Ycz1KST2h`)mF4(87YfPE2*z8Z){@= z2Euh8HjA_%g!XW=pjx$TV(hI4^<@UGNLJcKaGud~?RftjexDZ0yZ-gx&_QO-z_d(rcv?o*kP!pT z^wFap{NYr{?+-r=J|WK`nZpJK@2~qq^|$LrupW|UV3f8vVXFH7h=fGZZTTajQpVV{ zA-O|F4E_<3e>~keqeqPRKbogj4SxiQM5*cGKuCT>-2agf{D}NU<&MnG9+>&VF@Gfg zGShO?%poJpK|=7R=667#yTt1sx8IRaz&K(rG{gdv&yN4VkR{f7wGKt#=x`kvQjU4lG&w3 z#i&FT*TWWbq*pEV(3w%&i0@UiFxj9Po7PxZR$i{wBf(5fkGsekOGAg=N~MoiRu)xz zJd@2L|ALA9{A0J8nbB!2J?*Nnkf|kFbS(c&8&EgZ#H{Cbm4koGRx&-PH)|uV0P0`dC7MfnI z!8{(NO*i~RSv5U^)vq~`m9knSXr02+yA!=`Og+e^lLc29oI_XguZFrpe51Tu z>tt3g6{Qm<=tXT%t0JDY4plkpM~&-UGf}N-jg2d9KT0SzgK8F#gsI<7c z!mSh{9p0se^@_*C|FJ#z`S)|Rn*4b|sa`SpjY9~VM38@3V9=ZLN z5Y-?3TvrTe9JKxPsJLq6w^lWZm|G?sEu3(HP0pFsZ$T@y9R`2?q0lxx!ilS*TF z|@ACw1rRj_W) zNlwHUY1Qjzznu~b3v1BtKfvC4mw)^XF6j$KV*kj-JkC|~0Pm~d%2w-fB}{6?=Vw=U zzX=m+nl5VDl%mfuEWt^}4XSI|(WonN1KqhOu)ua}n;t`*N7+`q%q1RdjEPejX<&BF$Xxgzm>)E62%nvYS?a;2SH3?i z2R!5d{n$0)g{E7=^G#f<|3$peH2-h^zVt6>vtPxBe}}$Z*C}KFb)KoRy#D9Mz)4Q@ zS#21!EWOBgx?i=GtJNC61*S4EI=C>l`v;2e>pP%Cf_A z8`p4WdAaJ|fnAQCF89Qq-0(=EtqBw@+hqpA)jmPsx2d*)*sk!$^KX`@-4ZsI+|G_F zZpNr=2j*m@+pFIr3!IgDXM|~x#Xb|E6=!66+Ngp3wdq}lEAyH*hFI$rte<}4h)Q5$ zD>Tcis~8|m-A__bm38DkkGjNRyuhKk*s-Eg35QRlJPs(Tbl+_aIHNR*7Vc(^Ku= zj>D{6j+6w4ekm>TH>10%#9=;W7FW2-&8)F{7JbZQv&p>6Wp?7Ij`i>6;m^WhM*k?A)(=}k z{^b+o)=#9_3#SeKQgo}CnWKjff6&YsIC#jY+<`gf$oo|vSM8dUHeBm6r4!0MZnaI$ z7&fT1$iE}6w49J940dTQy`W;}Qi*IidQ%xadXf{>-;vB}z(hXSB-edf2Sl5atz!k3 zE@*k)CeP^?X5r*Qk2|=sXN{_jF8+;5tqy8aN@W!dtXF$}8^HJDDN76Tt~bT4NP&LG z8e2+P8fya#sv(0_;6FWna${|VDV5#7&BnN1`G{Yk#WN^volnZU3az5Vf|E<2@Lm?N2yt3)Sioy z;UU>*x$NFoR!>lEz!arcaEwip>2T}`YjeGt9rRY9znO>;EZH2%21efCbh1U2FLD;T z1J6dOW>WJkKTwN@JDKLaZhu0GXpDy$?0WH7(Yy7CsMUW(65F~~Zi;`(ETqh95*;L} zTepmnqlaahsGz1Y;qt$<+<}4JfsknGr&#m_a#Z=_+@K~QYq~*xEt?R1o<5cphcw(WT1AX12U(iRx3@`3O~ivE0=rCN~h{@YQY>WTCy#>P$|Y9z0grh zb;ToQ-X?XX{wXHy!zgE|U^F=czb-y>%=1@8jp3{ZtRHuO~zO(PeIeCsGwjbmH{B77^Ui1>+wPG!xPYGl%0pB zt;Y9*{&eaEBiar5 zTxVF8Azm{hxG>K4FN`%mwNCA~F8?346_dZJ8S7##Ux9(bIT6nfjAVXY-Rx4D*rl|) z{!c9}OU*>K_HZr0)uhNw>{8UVYm`_lgCCZ(U6lY^o*t)FYHSmhdP?6_B^692w8)Yj zI$uoF9;~B9z8T# zGDwft<^@HY-@>5f!Rm*lRsGdyTIhKMOPTev()y)n7^@wd)Gl~%jPy&Dvh)OuVDvM! zJNd7pT~BttFIE}V=>M$A#{4`(St_)Y;+~+0M_-qT+OYs1F15ZQY@+rj&>|p~&jB=t z40NNgAgD3Am=U1}(}m@g&}fqmgjhqDRZw7DQ+-8^#btp`Mb`+)Px-wCvXe229@BDk zQPhr6d}+K5Jl6xAdOjGr4W+&HOCly$H?H1X1Gr+ivbeH!F~PRbeOc}61jce@2W{f> z1z!U9O1p8I_<<4DbdFGSt8P82sEG%I&1|)c#a8j+0;Ie`$RgO5jGvXNiX_r<6=+B$ z$AQ2CH$Bl!4?&uhR62{8P1P;G1NJ~Q%B%ICHeRWY>of~=k(6cJIQdi@1S+&{!ZyhO;*QKfm6q+Czot+ooaGUDL2YYK>M}e}vF@{@+%ndjn9?V-EilE@qU#^ewa%hs*yYB2;kMjLlJaN_p7| zks2d5##3pn@N0x={#Y@-mzIF5!)>` zXdR`z#K|*7jb4`9u74ygHPsFjW22TpFjQ^TBW56NNK!^d+~t%l9nHTf-CBnA)?bKw zF#Qth8d=at`_*Bp5+N}gX(!)*gLsQ}|ETS+cN5|%peg;8Rha#+X1$;OMq(9RTEIg1 z-$<*@U8~rN# z40B$fj6%PiP)&D1dU)QXk+{+PP=WqG#VHjQurn$ir!;E1KOk+<*Dn`W&}wU`uGWOQ z`qq+A^%XVoHZ9K|ThG@`$_}Uy*OYjR1~Wi-W36?6LF_FWnl_21`&wzP6*<6LfBSu} z`2yAKepNdLDxXPH4)Knp)fHF&Wi7AWvHfjql9`oPuyunP)(_Estu)t)tEki3Y;~1- ze6F+Reo9=tul0A(=e;^sxZ|iCWQ}&&_+%) zZR9|Gipq;w8xs-bDHzw^C#Z|RHkSMkBJRIiAx)FY;5tMFc6k+_Fssz+64yg)o&H9?!Uaycpc<-`!E~d!m`N*uGaikcqQasJyVwo zQ_uHP278cH*;s1-c>M!zN{5AXE z{NsHB|DXOTc@6xjeUQN4opP6$;;0cv9-l>twMS#$F7XT-Kc(u?aT3O7sr7b>%`P3- zVY#sx2P^qfp4xSZRXZ-t*n{!k+nU`N+p^V7afEuyYx2sfU8O~X+yjdTJJT{o>1{kQ z?{wUC+Z{vLpNSv`l}>Nr7(%Yiq?w&J?Awem{>NWn{iO8;GeGVCk4-qhsl%rK%y5$z z@u+`I!>@gpZ`)~H@84nj_y0AG|B1cv-@Eo7_b)VuL-xjhyX`;jUm(4x?Z5x4|7v~H zeA9iu@Xhf3(l^uhgm0GbSH9W4U;F0xp7hQ2J>{F{o9|oTTj+b*x5&5H_l$3eZ>evY z?^)k+-*0>?e9!sne9!w<`d0Z~@cq`e+V@|+HNLgJ7k&TBx6b#HZ@uqj-v-|+zKypZm-#>hpegE_+ zn~2)c4bvk@1be^D7+3IvW5+i}noA40k@qmQlvZ++#L3MZnQ9~P(pK8ZEs`L&N_*+R zxYtoS$!*eEy2$Nvha^f@=_YqdcgDmX(o-DLOOoVn=`BBzK5~yFOJDX>@0EViUk1p1 zk}6IqkV0{Zn~!)GONo@qczHxTGC{mjCcM*}eb`E=l4_YKlcYu_%M|&kJS0Dphvnyz z|8J%L4|z=fQ>Mz}QY+JBy8J?B$S-B4JR!5>S2A0EEpy~anJZ7pJee;GWT8AQi)67p zBTHndER$ztx%@^}$a7LB&&x_#B`?TtWwrd5tdX_yqWmveCojo*d095dE3#2ul}+-R zY?jw$i)@u`vR&Sg-^mVnQ+CQ*vP<5UcjR5!E$_)5d0+O*?`5BSARo#{vR^)y1M&ws zD4)n7`BVn93=*%?D&Jr@&U#zp zj8C6QliK6=Ony5pqm4J>wb!;R9Q5Dc-SrMdnlyb}zc(u%|6=6L)k+`g z#$4r}3xiW3GvPJnH*aC(PmxBZz*aZijAX^qI*;-HdC1<={&|(-GuEFZdP_aZsT8tt z0Kh1MUxq%vSy?HZK*s-0`F<&@5I3AAQ~SA`2E#iMHx0bDOx9H{4j`&?u9JgL$}7s0 z$2q$dSRpH_%a!v$rL`l7LgyhIFOi-s8~|$>9!!caO(`Zsvh|z4CCz`}TD!bqAy&?> z-eMWZxmKll=#=N^MXrr zwbwZj2TFAkGH~WDxH;ta^I_Y0LMey9;fIT(*)T#C7@#s;`$qby4;-50SW=)iIGtFf zYTuVZigoPvu~3E?n1V517glh@{4ReEo>K24SMh{fWnXUO_7HWPIpo%#PvC&MD1RD` z(N5MrN18L3`0xtU4RNifkb>7yMOk@8sgpg@(z3!T%aULb#UcaawB~SQC3JhJ^J$ve za`tb7F8cmdLp&aLF`IOiZucWF-|4zbJCW;ruBJs*yHe6C${t})zr3`ZTsdrC!9iG0 z@Zi0+7bv@L*#swUhm8?nF@A=D$J!IWv9VngteeO=u?z#C@=BlyaN1Xn2Y!)4SX30) z8kB{=k!aloLblW;Ga&T(36ez52{K&oBw5zy$rB37JRA(LYNnXvKd|jLUF*ZU%KKY} zAXQbRMWs0BR&aiPA~XgJ9hQl*Y0ZXd@75$;e53C!iL3{AnaBrW?e!$XU~teN zPv?V=7NfG+h$<`OeE_ZsPGMK*Y;g-?o18qLI%CujcJnK$3psJk-fECR0W$oh1%#QS zsOlslwem})cIi@foW{O6&>x3G>5K`K;q-D+_IoMRs~&=Zm7X$O8FWv_C&Lm(YY+(Z zHES2fa_mrgI!jeGy>Ls%_l90BUGnQRpSIYet4?#fr{%+)7XS+I4NKdR6Y-G`kJbBU_{i$ zvSMfoxHl`WV_f>3WTsvYz&R7AI=HUAyqP=F^kZcQaI&2noHd$8>OpLHVR?QEA6h+=gTlw8q?{&|r-gDM zQS4W47HYDZq&5{0`3fhVauuYw=EN5`TZ4B3qNcWu;m;`TgH)-9JAa!62NFE4D=K9a zgAyBvxQ_bgW7Q&M-n;ys;+fh`WzE!qJ>%dEG#s8QQPqvE=FOlGSv&ChysR>9`7;YX zR(xsfHcf(qufhmWrZZ6q8lN;(9vZ`g85QAo#l+h*Rhoax`&tjxeowi7lu~|Ua1d$o zAGV>D;Z>kLolMik%4Hq##Sf`*mL6esVAV%myn01K?yGqd2Ay7O0D)i^b0J>1%Do`q z1`q44k#tm9QPm_Q7*`VQ7atNw`@Um34kpqmH2rRbgF&gFx~Pajwo=cRja<%UEUwf( z|8#eKEKpGzsH49GMCRJ@6e}C!_(fZLgX-O2PBwin_sWv$D$R(X#Np=8DCMQAVsiE$ zHZNxagSU|DoIATbip5$>YQ16#fX%+vi z2bFHTtV`H851sLc=pl+BFf@sOXdBXVq`!w|mg2_uXmweYlflD!+lk7TRHb;rX{)~S z?O+`82kDU&-(a;sU=z}>Ye%ScgZfJ`@%gG$|DvTQN40uZmI(jJU4^{Y#;>C%dYLEn z2{4@mtCg@`R4Y%;Dsm}5V`T|bVQP3$8?dD?6FG_HYIAQ)!ly z$NtxNciv{3WOD_6D-8W>de`_QG+Y@-On<=g?KWBd2A9H+OOt4PWwB5 z9x5OIrD(ivdLCZ=ypdY#*VWHM%YWhZ(7UTs{$G0k11t#*jz?Ys*Sb|U(bsB_OUbF? zTmT#W<86=K7Skdqp9yD0E`+1`wMfW}xv}$8QLF4vHk%Xq>xd_enc=?-o1w~6vYg5l zcOKcMb6hX3l5^$%-M1pyb?R9B0iN_X$Bt+Vpg%&KcsevI>Ti72YBdBi<_gG~-<8so?>;i+b;BA;x`k@ARF zOT103Y*-93FrZ* zfKx$OX`ctK09S$=z)j#Ta5s1mJPbm*{j?!botQ0d=bm!ylpEED`xKD!qbNUWC^!Oq z7%Tue!VxtQoC(ebmw_w5_25R3a-t|F>JWGYJPn=&ui$YLW=M1^ur+wQ^0Ed~zyaV0 zFb6CEi@=HC6mT{;7o;+GQ=M7t*B(e4B0~Uc^@I`PvcoO9KJsZV#&o=5qzA5C3CSps0p44_?OHBkFAn8+~ zJC*dQ)4`eGVem8v-Kp>+gZgER13h3lI2D{@*oM6!wqejS>;QP!u#F|(vE(~81xyE_ zYb^2edW$VD6(pa$Y_JBb1^0j-8n!~{D(nIF0s9#?7yNa>Ul;syL2tsh@c$D0Plo^G z)1J>cwr>wsfseuOZ20~VcpN+hzvJL{JbYd)wvOw-GvK%Ic?Eoa0sIg=1YZsK8Vyoz z_W|Hsa2dE4JOIC-BLzBA(!oLS1A0;w|HgwgAo-=zE~%88de*R|QEplS{KhQR zBmCJ3e|8(TY{Ijlb8IL0;sAGp`@nPHMfh<${OAUjfF8s4V7%BKG~r8U_(FIg`4sMf zFEQ|?6*v`~X)s(0!xu;&6#5`r3b?;gxiP|vltKEqjXrK$3@$SytO{+ZhI{(BjXrMM z4;}>1faiFQY8e&>l3y74g^^Df`Gm~^=YaI7F#1&3hu{H_z8Xef4X5aEJ2(u?2A6|% z;689acoIAfUREO||5|{pz^UMLunv3ygf0WR4C-Z2FZJE)2ouZ&^S}k*VsIz;jvki<6bGN;;By>&Zrwwqb&?@%`iZnjH6;E3 zv(zC&+ESmk)TiAbk#<83xfOog3O`KhZ&Lr;NjGqUpsffrw#CF6MTZ6*3i?2`m~`w z?WkWn>epeTNQcdabXw19W}_jury|;!hTLiAn?*5(bdTiCEz#fs5We2Eg4NVYLmY1) z`a2CtI>m<(&lu9X72TjUd|3uxRv6NEqDbE6{dvN&Tl#|Ebh}9QA*g`p=>M^Qdx^@|(C{ZRNxz1vXloU^=L<~;J(9r<%W=Vs{K#{C-Z*MaaU z9zM10gIuP7(9;%r+QrZgv0wsdg4C}a^}7W=+yWnNA^t7IzXiH(fv#IV1P>UJfSe>C zCkZ@H;CVtG_z+kEdcfJ>TyQtI7d#1`rXSD_x6%%`wg%gQwBxO`V|(&xPd@FDtM=L8 zTyO#MLH#;VKNI;fk+06=*O~n8*d%ht7Vgh*e~$YL++Q-JOE*^FJ?K}|Cz1Me$>u(n z`*iLHaes;XEA%(gcO`u{2mP!!^2YN!d4A`9@F4O=cz43PF9++u%gCJ|f7I_T>UY;3 zaGxPPdW-Z(2D89nU^!R?E&vyUo55`$@q4KFj4M4DS9*|NPx9;84r~u*f>~ezSOnIB zGr&6V1rYxCg#SGcf`>u)*%N;DBp(O)IN*~5J~^P@0sX!5MS8hF=;#FX`t&Q|?L!`L8Mp%c7QD!K z2;KdmyFdM?KmBL`^bUaD0kq2i+T}jv=04=+KHA|v+Tp&L;B4?|a0v)K_d(BnJHdAt zM`2`oA8-md6?_BSX-EeA&49n@l%G!d>Bqn?32#q$ClER_pflqkFdu}^8SpuSdS+11 zjPu|HLoy>pGNVD_WfCuwc$vh@Tn}yp$v2aH2SV>a=p9J^8%X~f1igcxcQEZXxE;uN zFqrWmD~|Cl9=yzWCyeh)7~hvO?!Cacw+6n>gRf7+*KGKj%Xk;dco%2LNb(s;J|laB z$%bUpZrQZk1JQinq6OF)Ol16-&G<8yc)7&OV|=7Nb7{|?C5!y5pCO}NoM0&dH-TFW z8RO*?T?M!RTx`hLew?C81wCN7A$fLIyD?w_XoBRMN4|OVk39NEUO89=P6elfbHI5Z ze9wdLd27IR;AU_e_zt)SgwJ{KIqx{w0GrIBtai}-28B#)iCFEC{&xr~b2p>w} zL+MfQxFO^BiHzTG$Rp742y}RAMLaXWZQu^@40z6v2`zYQQ!7Kfl;`1mXMH5-1-J_;TO zlfizpUk>dz2HXpN2oi4&@#e&V@n8w)G2}`3|0Mi>lJ<8nTk|R#M(7_^=8- ztm+2#0O98<`1u0$d4c-8Z~?qT`c9<39fS|Rg%7`d7%Twa0C$44>u)a`vKoG@h99fR zXEph(ehjQNWK9wlsXkyG_yR~h*HF(jv%opv4se$tYZLe;r3n&$t%`q~@CNRMd&7_y zDfdOnU6&}bj{dyP1D1nF!Q+O!1pi-x|1VMBm#FVc2f#yytSA0@;;+vI^T6d`ogpv7 z|Ciza%jw`C!t)7tfp362!F}LEKLoF}MtT5nK<_u3Kr>-=#uVCgsBaH{t(o_`Mr`zc+(?W*M@LdT*oN z+bC}vI@`(YHz&_v{a2~iB+(tc3>e(5D&K=PCF7om& z^71Zn_AYYv?ly1-cnCZ~y4Iv?2X+P%!DZkIa1FQ)d;FcFyy1hL_VqoDfc7F z{h0DTro2zaiG1>~A%_-=99jl$2DgEfbBJ;dodM4o@+owG3f+gl6*+v-kk8^oK8pt{ zz=?)@UMKST3n23KIr8i-q>KS_O0Qs0w%zLh5+hgJFL^|kr6FT0coHr?F zC+)P8b~;c+yc!TWJb)bj0sj91{=Xe2@^&Ohytj$>HgvxY-S6b{MpPF_Iqy);+p`Ft z!#(_Y2mZY4L0-ziDd1FaIamj-12=%=^Dg=9K8IX?3&N-O1o=J+9tY2Z7Yx~hobN%- z_hf;?kRJ!~(;F-SJs^C0AHKa$ecq=&?>B&_4Eg;Ik>Bq!WFPXd4|&*k5IhX>d>_yE zBQN`rm;JNBxghcP6Mz4Q-~rm(OM6#D z!9?m~P#-(k8%zeX!CbHwoIyPL$zJ-&-iN^g5W4q5_uf;wOMEumpar zh9572^p}0~m;K|ZzZaz4_S0@3^Za9;9~(x!v#B5aZh+q>CsL0o^wZnvr`^Co;81W3 zI1Zc%&IT8Q%Scat$H?#4GH?a?>?WVR;7RZ_@rsBy9wgrn$oClSa*TFqIK=ZKgu|B) z;L8Vx!K3tl+TkPG;UnbiBjoHDa()asKQRD4ro;Cb_#O+LTcGm|#t-QJ5V}7~Bz|}B zMQ}ZM20TZ7KnL||pk58o*8qL{$!9`w;!5w9Kb+Vh-x zG*FNIYY1Nl|4jJT8LR?pK;-aaAyYbzl;-~+|D@Hjqywv&kV2}tO8eqFCtHSkf(jn5eFUdgdZjRIO7}g^BMB)4@X;z9BpUFkyPF&mI)%CN084WTR`~tIpuv$d7mE#8;HN0_;ui6 z@F?ZBpxjnq9{7+Uf3%DIF$RnW6F~U&NBH%}dEnC^75F3VdK`H;jyxPE-{a(4|AI*U z8t^oD){rmPa|&uB_$_#mc(KHb15L0q=m2{YAO6?F|9aZ1p7yFw0SAz-GwBk+-e5AA z31%TD$jymza2>b-d2t~xC14d;1D*xx*C$DLl5{5S;Pu-Q9{&7Nq;S@?1mzWfEc{{r2AnF>zlTZ3an&Ldan zk;C)n4EY=Pe`7zQZG+g_DtkZs9_D)R9T0oEc?>*h*gBeG>&SjYm&0P~a@4Thwo+`j zVXyC+Bet$%z;dt({1#+?q3cobIJgHSpROmt)8KNj4qOjn&+o>*K(`i#EfM>D;$H5v zxE}^$-|vQfztkeD;g7dW$V9nSFz&**92X*dAa%=Yh?JEoYF}a)yHJ6XbZn1t8CJ)_|0g zvkBY+LSGK_<*+}K!+ysohuB8-0f&MkK=v_4c@5iW_D4pa11Wzr<&Q~V>%gQQ%c#c+ z!KNH%mUdjNmu}G0e2a;4x7c+;T^-)cedF2F6Mq4_v}~nC0^fU z-0$FiANSDPmwY=zXJ_c_(wX+5{ckym9q}}H4*V87J#rO^Ty-eI-Zvh5AK@n99cx88 z&cHr=JNDsj*!vb^?^}i)Zwhw2so4F%JHSNbHxcmlTI5%T&v{qJ@9-(+j(J1)b2p&iYAm#3( z+&_^152Qaho_6!nZq)k|>ir4nKOy}m@beS+d5HQSqW+&U{(Q>#^Xb#z5^yuPjd>uB z_KT<8;LB(5<+I)3UfPXvk5KNB0pZV4_;d6kc$x867=I1MTiU0d_W6?h zz9hdBq(4FWug}x27idS?`4sJZYCX6SJPIDCJ%`esBWTB|wBvN}0Cmjw9Ic>wL1PCF96 z3-Rx8(0<5gVlM5L$GQ>zZi2s?^I0FdK-zyZ?f<%mb}FY`#?UU~&`aU_d+>cv5&GzO z^35jST=HE&zKh9sF8MAXU*shbdD;9T`K%|OmE^OUeBj>}_!kidy^&xaFa<=;A}T=Q zM-aaqjBVEd{k70P10+0w@X^#`H1!xW6FcH;_En(&M(B^*!~V!VLsFMvhg*StC{=EhNc14TqY5|S_b3p2| zi~8*P5Ilgs-VMFI2RIIV7{0)#_u$ie$jf`k%RcDa2Ym;tkk1O?^(o*VFLz4CS7o+|(V^W0xWG;L|+#w19LANVi}kxEZ_*{X#wLU<~*e zSZm1C6298t0V}|X;5_hY_%IbdOeY=uTmU~8%m(LzZ-6^VZ<4+(hsZY{ zL~a%$H;drwBKW$w8~lflvl8*v>W=;F0`{{@*emI;9{THqe%LEh4fzk~{}1T@kE7sm zLmq>^$Dr@A)8JX`ek-y2t){+_)HfR33x0?lkbEB}-^b^I3*f^+_;48dsP}y8y&xX? z5(qy=_?Lw5CVVg9od~}jyWA%1a$B&sAs0_07q3yyYn1caPVgP@IM{&QrxkXe)?jVja==}*@Iyck$*41IW0|+dGH>Tai!BfRC2ujvy!;^g!Gq`r z=1$TbAU=K|88boV=?v!avFHh7(UZn9|Bq$<&wGq?Gr&3EJklK@-Iw@56yXO^0pgdC zIvYF+Hh|ya7a`;aof!{<=q(v4zxL$U9qa=RAV28MgWf#!sk~g`btfKrM;>}Y9(uxq zcIb?uJm@jeTYdr`egYr*q>8Oi7D)bm;6oquj6Ucg_mKZRoxntpa_*T3J_fD;Um*Q1 z(tik^1kaML2k9uUPXRa{Tn%mpzXW-H5BlFd+@}~~OKAn7C#57Bw*C)^tv~J1zZQfq z{kA9H$mR?g6EiF>xXXGZ-m(T5x?IU z=poz#|}XZX9JEp&#*KU5SVTi5EePd~ncetgFP@DTf~$bVPlzXx*N1G(-| z1k&FZoS{FRL;k1J4`yQ5B>hIxZ~PKGiT$!S_RD0Da$lv~O)Z#@S}{J5ZZqj#C;WB7 zx4(m3Zx7>9D&tWm2)(_aw-@>KBEQzPBCThDv%$ISuf?&y7LQ&64g^O-=V<60L;5kK zA2STh2I2P@_&pA~$3gcv?#FTe^o#WS_23rp4a(_5IVsrlAI7d~2Y~4y^v;Fex#T~W{O8UA=YdDT8V$+T`F(|Uj-z#Q;2cow8y)2P>U@|{k;(^J7rkn*Qf{`8696tEVge$$tO zb>JRwAA0>z^m_R8X{&j`n+w_IqvvxCx}Z=P0kPpGaLQ_z;*6z6h=d_ktg?KN8RWNCHUy z&y#vFQjh1T$8)E_ zv+UDRo|p2xTfjHKqu_Cn=U$$dwV=FKhCCX>zFjOxJszbV70^=wJ(WDKIfl_aS`>NIN`AJ3KlEoCm%Dt^s#|yTF6sVUYHJl=iQn z{0hpi7zSp8E)Y4Xp#BxqzhW`C45XY2%Bk1~?gzgFPeNZO=(`FgWG5?(yt)>iVwj9v{P@|DH$aFbEL1k9l7WRJ`FBG zF2azDNctu8&V}AZiO6er^oI554I4rD@EUx0?F@L1@oqZf-Au;2p^SGUK>ES!^n=%T zgL}ct=+A;4JpfDx3&0|9CO8{JUbY}FTd2nt>apblc!_Gzxh&p_86=-Nm5@cDK4{Q5EQOTv+Z&B(#)DcldByg15> zC%lgE7YK*G*P(ASak=b^7WjXsiv zJ~9kE4w7FUdR88KOIjp)Of=zR2pX+cCek z=YBKy+qg%+>5qOh;C8VM=!V{L8NEW#FZP26(J!Fuo)nOI`yS@)dlrC;nak0m`W**r zK=haX(A|F-_p`X4!#(-+C%=BXx&IJ7Fd99ug<&fgAhv>Zkopu*p91ue0`#E*2iO}w zOxih|b`D35!;#}~Zvn=G3Cw3E^I2!GJLmw%faCBhT7zHFIB;+Is`Mn$Yy}Lcw z2|rEbwi$BUY%lmBcpkifk2~erDbEg_cIdQs1ABn|z*KMqm;>g6|4&8tA5!(b$8r4Y zkal!t&csYAn^(l_6z7_=GPM@XPENf}oBhB=gp`DcHzcHKM7TINBxFdFkRg|d5Q&I> zm^kOcs}d0rBO)RqBqCf$NJL27M}NF{?s&f6&-?v(ecs>C`JV52(;Cq}5ju|Ig~SV; z#|vm4A@c~0;25f>ka`NK-;nwZi5C(tLA(U<63ipPJQCJp0dB`~G_M5nN;rxwcoI+J zFL)j=;UJ2WAWp)4e26dbCBDNC@%{;iAV^F`^G`JY!~!hBa;(7pcmP}Q7@o#6Xg-PN zlQ@W1a18I@LwtlU@il(HkMY45$wBZ%DrRFY7GW_~U^O1VLwF32;~6}Q7w|W{g4gg4 zPU0hc;(l<_{oq}%tz(jPOiIOc%*XZEgw4pGB>p5#<2`+nd|%9WX$8sg*nkJI8+-63 zj^G^5`(AInCB|EF6|dt{e6D|Tk^adL6Z0b(yLzml|iOahA^Gd(RWBPnz{fJBlr+j?&aonmp3vk)G@RG9T4n zy827^_jG?>mKX%flCcms;c+~nA2UZkW*)X;8xG(_yo>ksXIkgw)_FM}mh)lxbDW6} zGRuM>b34i}Q+_KQx6*Mduj4R2!x#D|cj%vt;uC!4IiEbTwVnfB@*Hr`bHGf`0au}U{lmO+Qr!2a;TYb*8GPmbKimC(E=I9ZAMYl8 zye0SupZGp7^wigJ)5_tyOPpKkDQBOdqH7!_E&M#-rGaeaQDP-^26x zUVmqS{>~ya?{((A?mS+=ahyQotvBBKFh=Z){EhH8V*U~Hk64e0^@u#ir)b=WasT<= z{ngHw7iQ4PAc)uD^okIAdRQ+y=*OsKgpH-wo!wfnOW=wP6CM^=FD- zD1PBN`~~mf1AK|E^<#SfYwv$ugvHo`>i+9K?AN#1rf;(ypWzFAntbv-I`H`v_p`My0r2)3`s{dgcg*zrie+@oww6@(Ij8JQ;`2r{zs4F2{iwx`A5}9RDJB?&o2J# zI)I1pzj#T%W{-Z&UUYng<10SkN6*`idfwK8{WyU9`;LE=i+s&b#J$*nG3-X?S319H zg+9;Ks9vkoYt;!niTtbLUv)_TXA%}*5gx&$oe4t=Fj?7|p+^!@!apF{FqB=5xyK35L6t{tbKIaK6=l-$d@d>WLwW{>zQjFx#qD}K5OL@Hs7%MhM(Xw*Z(E^z@Y1z9}#{O z%(-6YU2mDLw^gnW>$cIlZ9b{)PpfC+Y%xyh1@-wGUc;NHj!Wm%T}a&}xev2m+pO2N z7O|gAdGBgb7ssr3qV-O;uIbh_6Yt`E>v+~Wp0i&3uI6{$ zA^siaS1;fC^t1NpXYJMJTAq4GERkYzMJRgdp`cg$N%!taaE41w!c){U+T8;aR(op z`Pk|?QN8Cx`}HkbhdtI|UpqfLFoxY|{`<_oUjFs+-;?3E6=;3-Sf4%We~!W&nYzCkH-7KKJ|lrsy@}Y>9`&Xa2Dsptq`{w593iZ zzURKdK6Scp-t(+%&$DvTeD<49(g*AP(RzEm*z4p>_g$;3ySiGUu9m2`CF(6D>b|Pd z`meJ7*?0=O+$YIzsr=H+JI%b)jgxMiW&ByjpA7zF@Mk%{m-9Q*JTlE=Wr6#ZBKIl$ zUd8V$zGU$w%k`Y)dj2ZS{YZxTIir5g;$wX3e&mt+ktgaYLp|{`w-?n{-dpz({LANC zKHt_JR9}tw3}2`-d4=T_9>go^ElItl;Bh>G#$RXr2!A5{iF9L+IyCPB^DY?1QS~VP z2Js8UD-^G&-{kZFK!N zx$ZZ)?n`{mShsJj+s^IkwHz!|!%c=M6aTqT_cv zelNCRJBstWIAe<(pNQ&YtPxLP7v9H*_y*tV4{XvO*o-mk)+ZPQ!FW8b#vE+N4(!8z zbiI$e-v5l3M+mLkpVsZqR&3Mn=l%bAU#h{R_a~Dv6|L)}b)9tlq~j;WofLOcUX${g z5Wxyb0q?^kA>&Kx3W*-Eo|G-!|_*)X5*}t*&WzQcvUztI>U{GEe&xC5gokG~t^;~M;q((o!2_wQcn zqkbBoi*%WWLUBKh(l|}fG~J^I^cT(1V|q%@X@-pV(`+cNqm|mIojT|gby1AO>*%H) z60<|h4lz6A(CPfn`B2=+0LADuR;M_f3-sRK<5A2`F+0WV6!WxmPhX}Xx=PnWab3Hq zG8Fgo1RkVKbc)39>hgE|*?B+T^Lj7l&<_7yLfh!me@Cf?8mN()sF_-+joPV$x~YeH zsgL?;fG*Ny8X|dheadT?MroWTXqrCd@PPiJ$Mlq*(+s_$S(>AHdQS^-4Je*Mltd|% zMj5n%R#P5@DME#`iArc2MX8c%XgBSp20BQM)I`nHN^R6m9dwGisGEAIm-?um2Iw*k z(N(%m!!%0cG#!eI88>F!m~msqjTtv)+?aD?;>L_0Gkz>aV#LIVi4hYcCdPk~D237} zgI0v%dX3k+mm26G8K+mAUNL@sMGK+0zJTH>M8^1amgZ=l-iP7_c2krpsfLU@u$sge z$fGcAqHPqR63U@M+CgFuv{MJkVW5e`ALykRbyE*D(f8m4jTr-4x1E$7^NOi$@KIscaPZ#n;l7&pYeA;t~4+~}n_>JG)-jL@g| zoO{E0H)iM+&62ThX3%QNp*#xHics8e5^bVJGS2W2$>DZDj=fz&?bJuZWUSi@p|}xa MjZ{)A$zx>r|42{9fB*mh diff --git a/slsDetectorSoftware/jctbDetectorServer/mcb_funcs.c b/slsDetectorSoftware/jctbDetectorServer/mcb_funcs.c index b67b8fef4..695c31688 100755 --- a/slsDetectorSoftware/jctbDetectorServer/mcb_funcs.c +++ b/slsDetectorSoftware/jctbDetectorServer/mcb_funcs.c @@ -811,19 +811,20 @@ int initHighVoltageByModule(int val, int imod) int initConfGainByModule(int isettings,int val, int imod) { - int im; - //for the particular module - if (imod>=0 && imod=0 && imod= nModX) { - ret=FAIL; - sprintf(mess,"Module %d disabled\n",imod); - break; - } - if (testShiftIn(imod)) retval|=(1<<(ibit)); - ibit++; - if (testShiftOut(imod)) retval|=(1<<(ibit)); - ibit++; - if (testShiftStSel(imod)) retval|=(1<<(ibit)); - ibit++; - //if ( testDataInOut(0x123456, imod)) retval|=(1<<(ibit++)); - //if ( testExtPulse(imod)) retval|=(1<<(ibit++)); - // for (ow=0; ow<6; ow++) - // ow=1; - //#ifndef PICASSOD - for (ow=0; ow<5; ow++) { - //#endif - if (testDataInOutMux(imod, ow, 0x789abc)) retval|=(1<=getNModBoard() || imod<0) ret=FAIL; -#ifdef MCB_FUNCS + //#ifdef MCB_FUNCS switch (ind) { case TEMPERATURE_FPGA: idac=TEMP_FPGA; @@ -1180,16 +1097,51 @@ int get_adc(int file_des) { case TEMPERATURE_ADC: idac=TEMP_ADC; break; + + case V_POWER_D: + idac++; + case V_POWER_C: + idac++; + case V_POWER_B: + idac++; + case V_POWER_A: + idac++; + case V_POWER_IO: + idac+=100; + break; + + case I_POWER_D: + idac++; + case I_POWER_C: + idac++; + case I_POWER_B: + idac++; + case I_POWER_A: + idac++; + case I_POWER_IO: + idac+=200; + break; + default: - printf("Unknown DAC index %d\n",ind); + // printf("Unknown DAC index %d\n",ind); sprintf(mess,"Unknown DAC index %d\n",ind); ret=FAIL; break; } + printf("DAC index %d (%d)\n",idac,ind); - if (ret==OK) - retval=getTemperatureByModule(idac,imod); - else { + if (ret==OK) { + + + if (idac>=200) + retval=getCurrent(idac-200); + else if (idac>=100) + retval=getVoltage(idac-100); + else + retval=getTemperature(idac); + + + }else if (ind>=1000) { retval=readSlowADC(ind-1000); if (retval>=0) { ret=OK; @@ -1198,7 +1150,7 @@ int get_adc(int file_des) { } -#endif + //#endif #ifdef VERBOSE printf("ADC is %d V\n", retval); @@ -1263,9 +1215,7 @@ int set_channel(int file_des) { ret=FAIL; sprintf(mess,"Detector locked by %s\n",lastClientIP); } else { -#ifdef MCB_FUNCS - retval=initChannelbyNumber(myChan); -#endif + } } /* Maybe this is done inside the initialization funcs */ @@ -1338,9 +1288,6 @@ int get_channel(int file_des) { if (ret==OK) { -#ifdef MCB_FUNCS - ret=getChannelbyNumber(&retval); -#endif if (differentClients && ret==OK) ret=FORCE_UPDATE; } @@ -1410,9 +1357,7 @@ int set_chip(int file_des) { ret=FAIL; sprintf(mess,"Detector locked by %s\n",lastClientIP); } else { -#ifdef MCB_FUNCS - retval=initChipbyNumber(myChip); -#endif + ; } /* Maybe this is done inside the initialization funcs */ //copyChip(detectorChips[myChip.module]+(myChip.chip), &myChip); @@ -1467,9 +1412,6 @@ int get_chip(int file_des) { if (ret==OK) { -#ifdef MCB_FUNCS - ret=getChipbyNumber(&retval); -#endif if (differentClients && ret==OK) ret=FORCE_UPDATE; } @@ -1584,11 +1526,6 @@ int set_module(int file_des) { ret=FAIL; sprintf(mess,"Detector locked by %s\n",lastClientIP); } else { -#ifdef MCB_FUNCS - retval=initModulebyNumber(myModule); - if(retval != myModule.reg) - ret = FAIL; -#endif } } @@ -1694,9 +1631,6 @@ int get_module(int file_des) { if (imod>=0 && imodretval) { + configureFrequency(retval,sync_clk_c); + printf("--Configuring sync clk to %d MHz\n",val); + } else if (configureFrequency(-1,dbit_clk_c)>val && configureFrequency(-1,adc_clk_c)>retval) { + printf("++Configuring sync clk to %d MHz\n",val); + configureFrequency(retval,sync_clk_c); + } break; /* case PHASE_SHIFT: */ @@ -2535,11 +2446,25 @@ int set_speed(int file_des) { case ADC_CLOCK: retval=configureFrequency(val,adc_clk_c);//setClockDivider(val,1); - configureFrequency(val,sync_clk_c); + if (configureFrequency(-1,sync_clk_c)>val) { + configureFrequency(retval,sync_clk_c); + printf("--Configuring sync clk to %d MHz\n",val); + } else if (configureFrequency(-1,dbit_clk_c)>val && configureFrequency(-1,run_clk_c)>retval) { + printf("++Configuring sync clk to %d MHz\n",val); + configureFrequency(retval,sync_clk_c); + } break; case DBIT_CLOCK: retval=configureFrequency(val,dbit_clk_c);//setClockDivider(val,2); + if (configureFrequency(-1,sync_clk_c)>retval){ + configureFrequency(retval,sync_clk_c); + printf("--Configuring sync clk to %d MHz\n",val); + } else if (configureFrequency(-1,adc_clk_c)>retval && configureFrequency(-1,run_clk_c)>retval) { + printf("++Configuring sync clk to %d MHz\n",val); + configureFrequency(retval,sync_clk_c); + } + break; @@ -2760,7 +2685,7 @@ int send_update(int file_des) { n = sendDataOnly(file_des,&nModY,sizeof(nModY)); n = sendDataOnly(file_des,&dynamicRange,sizeof(dynamicRange)); n = sendDataOnly(file_des,&dataBytes,sizeof(dataBytes)); - t=setSettings(GET_SETTINGS,-1); + t=GET_SETTINGS;//setSettings(GET_SETTINGS,-1); n = sendDataOnly(file_des,&t,sizeof(t)); /* thr=getThresholdEnergy(); n = sendDataOnly(file_des,&thr,sizeof(thr));*/ @@ -2859,7 +2784,7 @@ int configure_mac(int file_des) { //#ifdef VERBOSE printf("Configuring MAC of module %d at port %x\n", imod, udpport); //#endif -#ifdef MCB_FUNCS + //#ifdef MCB_FUNCS if (ret==OK){ if(runBusy()){ ret=stopStateMachine(); @@ -2871,7 +2796,7 @@ int configure_mac(int file_des) { configureMAC(ipad,imacadd,idetectormacadd,detipad,digitalTestBit,udpport); retval=getAdcConfigured(); } -#endif + //#endif if (ret==FAIL) printf("configuring MAC of mod %d failed\n", imod); else @@ -3196,7 +3121,7 @@ int stop_receiver(int file_des) { strcpy(mess,"Could not stop receiver\n"); /* execute action if the arguments correctly arrived*/ -#ifdef MCB_FUNCS + //#ifdef MCB_FUNCS if (lockStatus==1 && differentClients==1){//necessary??? sprintf(mess,"Detector locked by %s\n", lastClientIP); ret=FAIL; @@ -3204,7 +3129,7 @@ int stop_receiver(int file_des) { else ret=startReceiver(0); -#endif + //#endif if(ret==OK && differentClients){ @@ -3536,3 +3461,160 @@ int power_chip(int file_des) { return ret; } + + +int reset_fpga(int file_des) { + int ret=OK; + int n; + sprintf(mess,"Reset FPGA unsuccessful\n"); + + resetFPGA(); + initializeDetector(); + + ret = FORCE_UPDATE; + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) + n += sendDataOnly(file_des,mess,sizeof(mess)); + + /*return ok/fail*/ + return ret; +} + + +int program_fpga(int file_des) { + int ret=OK; + int n; + sprintf(mess,"Program FPGA unsuccessful\n"); + char* fpgasrc = NULL; + FILE* fp = NULL; + size_t filesize = 0; + size_t unitprogramsize = 0; + size_t totalsize = 0; + + + //filesize + n = receiveDataOnly(file_des,&filesize,sizeof(filesize)); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + totalsize = filesize; +#ifdef VERY_VERBOSE + printf("\n\n Total size is:%d\n",totalsize); +#endif + + //lock + if (ret==OK && differentClients==1 && lockStatus==1) { + ret=FAIL; + sprintf(mess,"Detector locked by %s\n",lastClientIP); + filesize = 0; + } + + //opening file pointer to flash and telling FPGA to not touch flash + if(ret == OK && startWritingFPGAprogram(&fp) != OK){ + sprintf(mess,"Could not write to flash. Error at startup.\n"); + cprintf(RED,"%s",mess); + ret=FAIL; + filesize = 0; + } + + //---------------- first ret ---------------- + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) + n += sendDataOnly(file_des,mess,sizeof(mess)); + //---------------- first ret ---------------- + + + //erasing flash + if(ret != FAIL){ + eraseFlash(); + fpgasrc = (char*)malloc(MAX_FPGAPROGRAMSIZE); + } + + + + //writing to flash part by part + while(ret != FAIL && filesize){ + + unitprogramsize = MAX_FPGAPROGRAMSIZE; //2mb + if(unitprogramsize > filesize) //less than 2mb + unitprogramsize = filesize; +#ifdef VERY_VERBOSE + printf("unit size to receive is:%d\n",unitprogramsize); + printf("filesize:%d currentpointer:%d\n",filesize,currentPointer); +#endif + + + //receive + n = receiveDataOnly(file_des,fpgasrc,unitprogramsize); + if (n < 0) { + sprintf(mess,"Error reading from socket\n"); + ret=FAIL; + } + + + if (ret==OK) { + if(!(unitprogramsize - filesize)){ + fpgasrc[unitprogramsize]='\0'; + filesize-=unitprogramsize; + unitprogramsize++; + }else + filesize-=unitprogramsize; + + ret = writeFPGAProgram(fpgasrc,unitprogramsize,fp); + } + + + //---------------- middle rets ---------------- + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) { + n += sendDataOnly(file_des,mess,sizeof(mess)); + cprintf(RED,"Failure: Breaking out of program receiving\n"); + } + //---------------- middle rets ---------------- + + + if(ret != FAIL){ + //print progress + printf("Writing to Flash:%d%%\r",(int) (((double)(totalsize-filesize)/totalsize)*100) ); + fflush(stdout); + } + + } + + + + printf("\n"); + + //closing file pointer to flash and informing FPGA + if(stopWritingFPGAprogram(fp) == FAIL){ + sprintf(mess,"Could not write to flash. Error at end.\n"); + cprintf(RED,"%s",mess); + ret=FAIL; + } + + if(ret!=FAIL){ + ret=FORCE_UPDATE; + } + + + //---------------- last ret ---------------- + n = sendDataOnly(file_des,&ret,sizeof(ret)); + if (ret==FAIL) + n += sendDataOnly(file_des,mess,sizeof(mess)); + //---------------- last ret ---------------- + + + //free resources + if(fpgasrc != NULL) + free(fpgasrc); + if(fp!=NULL) + fclose(fp); +#ifdef VERY_VERBOSE + printf("Done with program receiving command\n"); +#endif + /*return ok/fail*/ + return ret; +} + + diff --git a/slsDetectorSoftware/jctbDetectorServer/server_funcs.h b/slsDetectorSoftware/jctbDetectorServer/server_funcs.h index 8d131d83b..eac4fedfa 100755 --- a/slsDetectorSoftware/jctbDetectorServer/server_funcs.h +++ b/slsDetectorSoftware/jctbDetectorServer/server_funcs.h @@ -96,4 +96,7 @@ int set_ctb_pattern(int); int write_adc_register(int); int power_chip(int); +int reset_fpga(int); +int program_fpga(int); + #endif diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index db2b3cbe6..7f6a26e20 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -6625,7 +6625,7 @@ int slsDetector::programFPGA(string fname){ size_t filesize=0; char* fpgasrc = NULL; - if(thisDetector->myDetectorType != JUNGFRAU){ + if(thisDetector->myDetectorType != JUNGFRAU && thisDetector->myDetectorType != JUNGFRAUCTB){ std::cout << "Not implemented for this detector" << std::endl; return FAIL; } diff --git a/slsDetectorSoftware/slsDetector/slsDetectorActions.h b/slsDetectorSoftware/slsDetector/slsDetectorActions.h index 5aff24f79..a034e6bf0 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorActions.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorActions.h @@ -8,9 +8,6 @@ #include - -#define MAX_SCAN_LEVELS 2 - using namespace std; /** diff --git a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp index 14d17fe1d..873cfd70c 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorCommand.cpp @@ -467,6 +467,15 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) { descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdAdvanced; i++; + + + /* chip */ + descrToFuncMap[i].m_pFuncName="led"; + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdAdvanced; + i++; + + + /* versions/ serial numbers getId */ descrToFuncMap[i].m_pFuncName="moduleversion"; // @@ -835,6 +844,46 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) { i++; + descrToFuncMap[i].m_pFuncName="i_a"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdADC; + i++; + + descrToFuncMap[i].m_pFuncName="i_b"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdADC; + i++; + + descrToFuncMap[i].m_pFuncName="i_c"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdADC; + i++; + + descrToFuncMap[i].m_pFuncName="i_d"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdADC; + i++; + + descrToFuncMap[i].m_pFuncName="i_io"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdADC; + i++; + + descrToFuncMap[i].m_pFuncName="vm_a"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdADC; + i++; + + descrToFuncMap[i].m_pFuncName="vm_b"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdADC; + i++; + + descrToFuncMap[i].m_pFuncName="vm_c"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdADC; + i++; + + descrToFuncMap[i].m_pFuncName="vm_d"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdADC; + i++; + + descrToFuncMap[i].m_pFuncName="vm_io"; // + descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdADC; + i++; + /* r/w timers */ descrToFuncMap[i].m_pFuncName="timing"; // @@ -4016,7 +4065,7 @@ string slsDetectorCommand::cmdADC(int narg, char *args[], int action) { return helpADC(narg, args, action); else if (action==PUT_ACTION) return string("cannot set ")+cmd; - + if (sscanf(args[0],"adc:%d",&idac)==1) { // printf("chiptestboard!\n"); adc=(dacIndex)(idac+1000); @@ -4038,6 +4087,26 @@ string slsDetectorCommand::cmdADC(int narg, char *args[], int action) { adc=TEMPERATURE_FPGA2; else if (cmd=="temp_fpgafr") adc=TEMPERATURE_FPGA3; + else if (cmd=="i_a") + adc=I_POWER_A; + else if (cmd=="i_b") + adc=I_POWER_B; + else if (cmd=="i_c") + adc=I_POWER_C; + else if (cmd=="i_d") + adc=I_POWER_D; + else if (cmd=="vm_a") + adc=V_POWER_A; + else if (cmd=="vm_b") + adc=V_POWER_B; + else if (cmd=="vm_c") + adc=V_POWER_C; + else if (cmd=="vm_d") + adc=V_POWER_D; + else if (cmd=="vm_io") + adc=V_POWER_IO; + else if (cmd=="i_io") + adc=I_POWER_IO; else return string("cannot decode adc ")+cmd; @@ -4546,6 +4615,19 @@ string slsDetectorCommand::cmdAdvanced(int narg, char *args[], int action) { } sprintf(ans,"%d",myDet->powerChip()); return string(ans); + } else if (cmd=="led") { + char ans[100]; + int val=0; + myDet->setOnline(ONLINE_FLAG); + if (action==PUT_ACTION){ + int ival = -1; + if (!sscanf(args[1],"%d",&ival)) + return string("could not scan powerchip parameter " + string(args[1])); + val=myDet->readRegister(0x4d); + myDet->writeRegister(0x4d,(val&(~1))|((~ival)&1));//config register + } + sprintf(ans,"%d",~(myDet->readRegister(0x4d))&1); + return string(ans); } else return string("unknown command ")+cmd; @@ -4563,11 +4645,13 @@ string slsDetectorCommand::helpAdvanced(int narg, char *args[], int action) { os << "programfpga f \t programs the fpga with file f (with .pof extension)." << std::endl; os << "resetfpga f \t resets fpga, f can be any value" << std::endl; + os << "led s \t sets led status (0 off, 1 on)" << std::endl; } if (action==GET_ACTION || action==HELP_ACTION) { os << "extsig:i \t gets the mode of the external signal i. can be \n \t \t \t off, \n \t \t \t gate_in_active_high, \n \t \t \t gate_in_active_low, \n \t \t \t trigger_in_rising_edge, \n \t \t \t trigger_in_falling_edge, \n \t \t \t ro_trigger_in_rising_edge, \n \t \t \t ro_trigger_in_falling_edge, \n \t \t \t gate_out_active_high, \n \t \t \t gate_out_active_low, \n \t \t \t trigger_out_rising_edge, \n \t \t \t trigger_out_falling_edge, \n \t \t \t ro_trigger_out_rising_edge, \n \t \t \t ro_trigger_out_falling_edge" << std::endl; os << "flags \t gets the readout flags. can be none, storeinram, tot, continous, parallel, nonparallel, safe, digital, analog_digital, unknown" << std::endl; + os << "led \t returns led status (0 off, 1 on)" << std::endl; } return os.str();