From 172fa66b1f64dca73de99cc088a36f4eb2af0ef1 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Thu, 18 Aug 2016 11:57:36 +0200 Subject: [PATCH 1/7] hotfix for memory leak in server --- slsDetectorSoftware/eigerDetectorServer/Beb.c | 243 +++++++++--------- slsDetectorSoftware/eigerDetectorServer/Beb.h | 9 +- .../eigerDetectorServer/FebRegisterDefs.h | 1 + ...eigerDetectorServerv2.0.5.14.0.1-beamline} | Bin 277374 -> 277442 bytes .../slsDetectorServer_funcs.c | 7 +- 5 files changed, 126 insertions(+), 134 deletions(-) rename slsDetectorSoftware/eigerDetectorServer/bin/{eigerDetectorServerv2.0.5.14.0 => eigerDetectorServerv2.0.5.14.0.1-beamline} (59%) diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.c b/slsDetectorSoftware/eigerDetectorServer/Beb.c index 106e72730b..a2a8824d6b 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.c +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.c @@ -44,7 +44,7 @@ unsigned int* Beb_recv_data; short Beb_bit_mode; - + int BEB_MMAP_SIZE = 0x1000; void BebInfo_BebInfo(struct BebInfo* bebInfo, unsigned int beb_num){ @@ -144,20 +144,19 @@ void Beb_Beb(){ } - void Beb_GetModuleCopnfiguration(int* master, int* top){ *top = 0; *master = 0; //mapping new memory to read master top module configuration - u_int32_t baseaddr; + u_int32_t* csp0base=0; int ret; //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0){ cprintf(BG_RED,"Module Configuration FAIL\n"); }else{ //read data - ret = Beb_Read32(baseaddr, MODULE_CONFIGURATION_MASK); + ret = Beb_Read32(csp0base, MODULE_CONFIGURATION_MASK); printf("Module Configuration OK\n"); printf("Beb: value =0x%x\n",ret); if(ret&TOP_BIT_MASK) @@ -165,24 +164,25 @@ void Beb_GetModuleCopnfiguration(int* master, int* top){ if(ret&MASTER_BIT_MASK) *master = 1; //close file pointer - Beb_close(fd); + Beb_close(fd,csp0base); } } /* do not work at the moment */ int Beb_SetMasterViaSoftware(){ //mapping new memory - u_int32_t baseaddr, value = 0, ret = 1; + u_int32_t* csp0base=0; + u_int32_t value = 0, ret = 1; //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0) cprintf(BG_RED,"Set Master FAIL\n"); else{ - value = Beb_Read32(baseaddr, MASTERCONFIG_OFFSET); + value = Beb_Read32(csp0base, MASTERCONFIG_OFFSET); value|=MASTER_BIT; value|=OVERWRITE_HARDWARE_BIT; - int newval = Beb_Write32(baseaddr, MASTERCONFIG_OFFSET,value); + int newval = Beb_Write32(csp0base, MASTERCONFIG_OFFSET,value); if(newval!=value) cprintf(BG_RED,"Could not set Master via Software\n"); else @@ -191,7 +191,7 @@ int Beb_SetMasterViaSoftware(){ //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return ret; } @@ -199,17 +199,18 @@ int Beb_SetMasterViaSoftware(){ /* do not work at the moment */ int Beb_SetSlaveViaSoftware(){ //mapping new memory - u_int32_t baseaddr, value = 0, ret = 1; + u_int32_t* csp0base=0; + u_int32_t value = 0, ret = 1; //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0) cprintf(BG_RED,"Set Slave FAIL\n"); else{ - value = Beb_Read32(baseaddr, MASTERCONFIG_OFFSET); + value = Beb_Read32(csp0base, MASTERCONFIG_OFFSET); value&=~MASTER_BIT; value|=OVERWRITE_HARDWARE_BIT; - int newval = Beb_Write32(baseaddr, MASTERCONFIG_OFFSET,value); + int newval = Beb_Write32(csp0base, MASTERCONFIG_OFFSET,value); if(newval!=value) cprintf(BG_RED,"Could not set Slave via Software\n"); else @@ -218,29 +219,30 @@ int Beb_SetSlaveViaSoftware(){ //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return ret; } int Beb_Activate(int enable){ //mapping new memory - u_int32_t baseaddr, value = 0, ret = -1; + u_int32_t* csp0base=0; + u_int32_t value = 0, ret = -1; //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0) cprintf(BG_RED,"Deactivate FAIL\n"); else{ if(enable > -1){ - value = Beb_Read32(baseaddr, MASTERCONFIG_OFFSET); + value = Beb_Read32(csp0base, MASTERCONFIG_OFFSET); printf("Deactivate register value before:%d\n",value); if(enable) value&=~DEACTIVATE_BIT; else value|=DEACTIVATE_BIT; - int newval = Beb_Write32(baseaddr, MASTERCONFIG_OFFSET,value); + int newval = Beb_Write32(csp0base, MASTERCONFIG_OFFSET,value); if(newval!=value){ if(enable) cprintf(BG_RED,"Could not activate via Software\n"); @@ -249,7 +251,7 @@ int Beb_Activate(int enable){ } } - value = Beb_Read32(baseaddr, MASTERCONFIG_OFFSET); + value = Beb_Read32(csp0base, MASTERCONFIG_OFFSET); if(value&DEACTIVATE_BIT) ret = 0; else ret = 1; if(enable == -1){ @@ -262,7 +264,7 @@ int Beb_Activate(int enable){ } //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return ret; } @@ -270,7 +272,8 @@ int Beb_Activate(int enable){ int Beb_SetNetworkParameter(enum detNetworkParameter mode, int val){ //mapping new memory - u_int32_t baseaddr, valueread = 0; + u_int32_t* csp0base=0; + u_int32_t valueread = 0; u_int32_t offset = TXM_DELAY_LEFT_OFFSET; char modename[100] = ""; @@ -295,40 +298,40 @@ int Beb_SetNetworkParameter(enum detNetworkParameter mode, int val){ default: cprintf(BG_RED,"Unrecognized mode in network parameter: %d\n",mode); return -1; } //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0){ cprintf(BG_RED,"Could not read register to set network parameter. FAIL\n"); return -1; } else{ if(val > -1){ - valueread = Beb_Read32(baseaddr, offset); + valueread = Beb_Read32(csp0base, offset); //cprintf(BLUE, "%s value before:%d\n",modename,valueread); - Beb_Write32(baseaddr, offset,val); + Beb_Write32(csp0base, offset,val); cprintf(BLUE,"%s value:%d\n", modename,valueread); } - valueread = Beb_Read32(baseaddr, offset); + valueread = Beb_Read32(csp0base, offset); //cprintf(BLUE,"%s value:%d\n", modename,valueread); } //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return valueread; } - int Beb_ResetToHardwareSettings(){ //mapping new memory - u_int32_t baseaddr, value = 0, ret = 1; + u_int32_t* csp0base=0; + u_int32_t value = 0, ret = 1; //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0) cprintf(BG_RED,"Reset to Hardware Settings FAIL\n"); else{ - value = Beb_Write32(baseaddr, MASTERCONFIG_OFFSET,0); + value = Beb_Write32(csp0base, MASTERCONFIG_OFFSET,0); if(value) cprintf(BG_RED,"Could not reset to hardware settings\n"); else @@ -337,7 +340,7 @@ int Beb_ResetToHardwareSettings(){ //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return ret; } @@ -346,21 +349,22 @@ int Beb_ResetToHardwareSettings(){ u_int32_t Beb_GetFirmwareRevision(){ //mapping new memory - u_int32_t baseaddr, value = 0; + u_int32_t* csp0base=0; + u_int32_t value = 0; //open file pointer - int fd = Beb_open(XPAR_VERSION,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_VERSION); if(fd < 0) cprintf(BG_RED,"Firmware Revision Read FAIL\n"); else{ - value = Beb_Read32(baseaddr, FIRMWARE_VERSION_OFFSET); + value = Beb_Read32(csp0base, FIRMWARE_VERSION_OFFSET); if(!value) cprintf(BG_RED,"Firmware Revision Number does not exist in this version\n"); } //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return value; } @@ -368,41 +372,42 @@ u_int32_t Beb_GetFirmwareRevision(){ u_int32_t Beb_GetFirmwareSoftwareAPIVersion(){ //mapping new memory - u_int32_t baseaddr, value = 0; + u_int32_t* csp0base=0; + u_int32_t value = 0; //open file pointer - int fd = Beb_open(XPAR_VERSION,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_VERSION); if(fd < 0) cprintf(BG_RED,"Firmware Software API Version Read FAIL\n"); else{ - value = Beb_Read32(baseaddr, FIRMWARESOFTWARE_API_OFFSET); + value = Beb_Read32(csp0base, FIRMWARESOFTWARE_API_OFFSET); if(!value) cprintf(BG_RED,"Firmware Software API Version does not exist in this version\n"); } //close file pointer if(fd > 0) - Beb_close(fd); + Beb_close(fd,csp0base); return value; } void Beb_ResetFrameNumber(){ //mapping new memory to read master top module configuration - u_int32_t baseaddr; + u_int32_t* csp0base=0; //open file pointer - int fd = Beb_open(XPAR_PLB_GPIO_SYS_BASEADDR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_PLB_GPIO_SYS_BASEADDR); if(fd < 0){ cprintf(BG_RED,"Reset Frame Number FAIL\n"); }else{ //write a 1 - Beb_Write32(baseaddr, FRAME_NUM_RESET_OFFSET, 1); + Beb_Write32(csp0base, FRAME_NUM_RESET_OFFSET, 1); usleep(100000); //100ms //write a 0 - Beb_Write32(baseaddr, FRAME_NUM_RESET_OFFSET, 0); + Beb_Write32(csp0base, FRAME_NUM_RESET_OFFSET, 0); printf("Frame Number Reset OK\n"); //close file pointer - Beb_close(fd); + Beb_close(fd,csp0base); } } @@ -583,8 +588,7 @@ int Beb_SetByteOrder(){ int Beb_SetUpUDPHeader(unsigned int beb_number, int ten_gig, unsigned int header_number, char* dst_mac, char* dst_ip, unsigned int dst_port){ u_int32_t bram_phy_addr; - volatile u_int32_t* bram_ptr; - bram_ptr = NULL; + u_int32_t* csp0base=0; if (ten_gig) bram_phy_addr = 0xC6002000; else @@ -592,29 +596,22 @@ int Beb_SetUpUDPHeader(unsigned int beb_number, int ten_gig, unsigned int header if(!Beb_SetHeaderData(beb_number,ten_gig,dst_mac,dst_ip,dst_port)) return 0; - int fd = open("/dev/mem", O_RDWR | O_SYNC, 0); - if (fd == -1) - cprintf(BG_RED,"\nCan't find /dev/mem!\n"); - else{ -#ifdef VERBOSE - printf("/dev/mem opened\n"); -#endif - bram_ptr = mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, bram_phy_addr); - if (bram_ptr == MAP_FAILED) { - cprintf(BG_RED,"\nCan't map memmory area!!\n"); - fd = -1; - } -#ifdef VERBOSE - else printf("CSP0 mapped\n"); -#endif - } - memcpy(bram_ptr+header_number*16, &udp_header, sizeof(udp_header)); - close(fd); + + int fd = Beb_open(&csp0base,bram_phy_addr); + if(fd < 0){ + cprintf(BG_RED,"Set up UDP Header FAIL\n"); + }else{ + //read data + memcpy(csp0base+header_number*16, &udp_header, sizeof(udp_header)); + //close file pointer + Beb_close(fd,csp0base); + } return 1; } + //int Beb_SetUpUDPHeader(unsigned int beb_number, int ten_gig, unsigned int header_number, char* dst_mac, char* dst_ip, unsigned int dst_port){ // unsigned int i = 1;/*Beb_GetBebInfoIndex(beb_number);*/ // @@ -814,27 +811,27 @@ int Beb_SetUpTransferParameters(short the_bit_mode){ int Beb_StopAcquisition() { - u_int32_t baseaddr; + u_int32_t* csp0base=0; volatile u_int32_t valuel,valuer; //open file pointer - int fd = Beb_open(XPAR_CMD_GENERATOR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_CMD_GENERATOR); if(fd < 0){ cprintf(BG_RED,"Beb Stop Acquisition FAIL\n"); return 0; }else{ //find value - valuel = Beb_Read32(baseaddr, (LEFT_OFFSET+STOP_ACQ_OFFSET)); - valuer = Beb_Read32(baseaddr, (RIGHT_OFFSET+STOP_ACQ_OFFSET)); + valuel = Beb_Read32(csp0base, (LEFT_OFFSET+STOP_ACQ_OFFSET)); + valuer = Beb_Read32(csp0base, (RIGHT_OFFSET+STOP_ACQ_OFFSET)); //high - Beb_Write32(baseaddr, (LEFT_OFFSET + STOP_ACQ_OFFSET),(valuel|STOP_ACQ_BIT)); - Beb_Write32(baseaddr, (RIGHT_OFFSET + STOP_ACQ_OFFSET),(valuer|STOP_ACQ_BIT)); + Beb_Write32(csp0base, (LEFT_OFFSET + STOP_ACQ_OFFSET),(valuel|STOP_ACQ_BIT)); + Beb_Write32(csp0base, (RIGHT_OFFSET + STOP_ACQ_OFFSET),(valuer|STOP_ACQ_BIT)); //low - Beb_Write32(baseaddr, (LEFT_OFFSET + STOP_ACQ_OFFSET),(valuel&(~STOP_ACQ_BIT))); - Beb_Write32(baseaddr, (RIGHT_OFFSET + STOP_ACQ_OFFSET),(valuer&(~STOP_ACQ_BIT))); + Beb_Write32(csp0base, (LEFT_OFFSET + STOP_ACQ_OFFSET),(valuel&(~STOP_ACQ_BIT))); + Beb_Write32(csp0base, (RIGHT_OFFSET + STOP_ACQ_OFFSET),(valuer&(~STOP_ACQ_BIT))); printf("Beb Stop Acquisition OK\n"); //close file pointer - Beb_close(fd); + Beb_close(fd,csp0base); } return 1; } @@ -889,10 +886,10 @@ int Beb_RequestNImages(unsigned int beb_number, int ten_gig, unsigned int dst_nu u_int32_t right_port_value = 0x2000; - u_int32_t baseaddr; + u_int32_t* csp0base=0; volatile u_int32_t value; //open file pointer - int fd = Beb_open(XPAR_CMD_GENERATOR,&baseaddr); + int fd = Beb_open(&csp0base,XPAR_CMD_GENERATOR); if(fd < 0){ cprintf(BG_RED,"Beb Request N Images FAIL\n"); return 0; @@ -915,27 +912,27 @@ int Beb_RequestNImages(unsigned int beb_number, int ten_gig, unsigned int dst_nu //"0x20 << 8" is dst_number (0x00 for left, 0x20 for right) //Left - Beb_Write32(baseaddr, (LEFT_OFFSET + FIRST_CMD_PART1_OFFSET),0); - Beb_Write32(baseaddr, (LEFT_OFFSET + FIRST_CMD_PART2_OFFSET),send_header_command); - Beb_Write32(baseaddr, (LEFT_OFFSET + SECOND_CMD_PART1_OFFSET),0); - Beb_Write32(baseaddr, (LEFT_OFFSET + SECOND_CMD_PART2_OFFSET),send_frame_command); - value = Beb_Read32(baseaddr,(LEFT_OFFSET + TWO_REQUESTS_OFFSET)); - if(in_two_requests) Beb_Write32(baseaddr, (LEFT_OFFSET + TWO_REQUESTS_OFFSET),(value | TWO_REQUESTS_BIT)); - else Beb_Write32(baseaddr, (LEFT_OFFSET + TWO_REQUESTS_OFFSET),(value &~(TWO_REQUESTS_BIT))); + Beb_Write32(csp0base, (LEFT_OFFSET + FIRST_CMD_PART1_OFFSET),0); + Beb_Write32(csp0base, (LEFT_OFFSET + FIRST_CMD_PART2_OFFSET),send_header_command); + Beb_Write32(csp0base, (LEFT_OFFSET + SECOND_CMD_PART1_OFFSET),0); + Beb_Write32(csp0base, (LEFT_OFFSET + SECOND_CMD_PART2_OFFSET),send_frame_command); + value = Beb_Read32(csp0base,(LEFT_OFFSET + TWO_REQUESTS_OFFSET)); + if(in_two_requests) Beb_Write32(csp0base, (LEFT_OFFSET + TWO_REQUESTS_OFFSET),(value | TWO_REQUESTS_BIT)); + else Beb_Write32(csp0base, (LEFT_OFFSET + TWO_REQUESTS_OFFSET),(value &~(TWO_REQUESTS_BIT))); // Right - Beb_Write32(baseaddr, (RIGHT_OFFSET + FIRST_CMD_PART1_OFFSET),0); - Beb_Write32(baseaddr, (RIGHT_OFFSET + FIRST_CMD_PART2_OFFSET),send_header_command | right_port_value); - Beb_Write32(baseaddr, (RIGHT_OFFSET + SECOND_CMD_PART1_OFFSET),0); - Beb_Write32(baseaddr, (RIGHT_OFFSET + SECOND_CMD_PART2_OFFSET),send_frame_command | right_port_value); - value = Beb_Read32(baseaddr,(RIGHT_OFFSET + TWO_REQUESTS_OFFSET)); - if(in_two_requests) Beb_Write32(baseaddr, (RIGHT_OFFSET + TWO_REQUESTS_OFFSET),(value | TWO_REQUESTS_BIT)); - else Beb_Write32(baseaddr, (RIGHT_OFFSET + TWO_REQUESTS_OFFSET),(value &~(TWO_REQUESTS_BIT))); + Beb_Write32(csp0base, (RIGHT_OFFSET + FIRST_CMD_PART1_OFFSET),0); + Beb_Write32(csp0base, (RIGHT_OFFSET + FIRST_CMD_PART2_OFFSET),send_header_command | right_port_value); + Beb_Write32(csp0base, (RIGHT_OFFSET + SECOND_CMD_PART1_OFFSET),0); + Beb_Write32(csp0base, (RIGHT_OFFSET + SECOND_CMD_PART2_OFFSET),send_frame_command | right_port_value); + value = Beb_Read32(csp0base,(RIGHT_OFFSET + TWO_REQUESTS_OFFSET)); + if(in_two_requests) Beb_Write32(csp0base, (RIGHT_OFFSET + TWO_REQUESTS_OFFSET),(value | TWO_REQUESTS_BIT)); + else Beb_Write32(csp0base, (RIGHT_OFFSET + TWO_REQUESTS_OFFSET),(value &~(TWO_REQUESTS_BIT))); // Set number of frames - Beb_Write32(baseaddr, (LEFT_OFFSET + COMMAND_COUNTER_OFFSET), nimages*(2+in_two_requests)); - Beb_Write32(baseaddr, (RIGHT_OFFSET + COMMAND_COUNTER_OFFSET), nimages*(2+in_two_requests)); + Beb_Write32(csp0base, (LEFT_OFFSET + COMMAND_COUNTER_OFFSET), nimages*(2+in_two_requests)); + Beb_Write32(csp0base, (RIGHT_OFFSET + COMMAND_COUNTER_OFFSET), nimages*(2+in_two_requests)); #ifdef MARTIN for (i=0; i < 10; i++) @@ -943,7 +940,7 @@ int Beb_RequestNImages(unsigned int beb_number, int ten_gig, unsigned int dst_nu printf("%d\n",in_two_requests); #endif - Beb_close(fd); + Beb_close(fd,csp0base); #ifdef MARTIN printf("----Beb_RequestNImages----\n"); @@ -991,31 +988,22 @@ int Beb_Test(unsigned int beb_number){ // Temperature value is cropped and not well rounded int Beb_GetBebFPGATemp() { - int temperature=0; - volatile u_int32_t *ptr1; - int fd; - - fd = open("/dev/mem", O_RDWR | O_SYNC, 0); - if (fd == -1) - { - printf("\nCan't find /dev/mem!\n"); - return 0; - } - - u_int32_t CSP0BASE = (u_int32_t)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, XPAR_SYSMON_0_BASEADDR ); - if (CSP0BASE == (u_int32_t)MAP_FAILED) - { - printf("\nCan't map memmory area!!\n"); - return 0; + u_int32_t* csp0base=0; + int temperature=0; + int ret; + //open file pointer + int fd = Beb_open(&csp0base,XPAR_SYSMON_0_BASEADDR); + if(fd < 0){ + cprintf(BG_RED,"Module Configuration FAIL\n"); + }else{ + //read data + ret = Beb_Read32(csp0base, FPGA_TEMP_OFFSET); + temperature = ((((float)(ret)/65536.0f)/0.00198421639f ) - 273.15f); // Static conversation, copied from xps sysmon standalone driver + //close file pointer + Beb_close(fd,csp0base); } - ptr1=(u_int32_t*)(CSP0BASE + 0x200); // temperature register in xps sysmon core is at 0x200 - close(fd); - - temperature = ((((float)(*ptr1)/65536.0f)/0.00198421639f ) - 273.15f); // Static conversation, copied from xps sysmon standalone driver - - return temperature; } @@ -1023,7 +1011,7 @@ int Beb_GetBebFPGATemp() -int Beb_open(u_int32_t baseaddr, u_int32_t* csp0base){ +int Beb_open(u_int32_t** csp0base, u_int32_t offset){ int fd = open("/dev/mem", O_RDWR | O_SYNC, 0); if (fd == -1) @@ -1032,33 +1020,34 @@ int Beb_open(u_int32_t baseaddr, u_int32_t* csp0base){ #ifdef VERBOSE printf("/dev/mem opened\n"); #endif - *csp0base = (u_int32_t)mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, baseaddr); - if (*csp0base == (u_int32_t)MAP_FAILED) { + *csp0base = (u_int32_t*)mmap(0, BEB_MMAP_SIZE, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, fd, offset); + if (*csp0base == MAP_FAILED) { cprintf(BG_RED,"\nCan't map memmory area!!\n"); fd = -1; } #ifdef VERBOSE - else printf("CSP0 mapped\n"); + else printf("CSP0 mapped %p\n",(void*)*csp0base); #endif } return fd; } -u_int32_t Beb_Read32 (u_int32_t baseaddr, u_int32_t offset){ - volatile u_int32_t *ptr1; - ptr1=(u_int32_t*)(baseaddr + offset); - return *ptr1; +u_int32_t Beb_Read32 (u_int32_t* baseaddr, u_int32_t offset){ + volatile u_int32_t value; + value=* (u_int32_t*)(baseaddr + offset/(sizeof(u_int32_t))); + return value; } -u_int32_t Beb_Write32 (u_int32_t baseaddr, u_int32_t offset, u_int32_t data){ +u_int32_t Beb_Write32 (u_int32_t* baseaddr, u_int32_t offset, u_int32_t data){ volatile u_int32_t *ptr1; - ptr1=(u_int32_t*)(baseaddr + offset); + ptr1=(u_int32_t*)(baseaddr + offset/(sizeof(u_int32_t))); *ptr1 = data; return *ptr1; } -void Beb_close(int fd){ +void Beb_close(int fd,u_int32_t* csp0base){ if(fd >= 0) close(fd); + munmap(csp0base,BEB_MMAP_SIZE); } diff --git a/slsDetectorSoftware/eigerDetectorServer/Beb.h b/slsDetectorSoftware/eigerDetectorServer/Beb.h index e5ddedeb08..1c8efa5188 100644 --- a/slsDetectorSoftware/eigerDetectorServer/Beb.h +++ b/slsDetectorSoftware/eigerDetectorServer/Beb.h @@ -88,10 +88,11 @@ struct BebInfo{ int Beb_GetBebFPGATemp(); - int Beb_open(u_int32_t baseaddr, u_int32_t* csp0base); - u_int32_t Beb_Read32 (u_int32_t baseaddr, u_int32_t offset); - u_int32_t Beb_Write32 (u_int32_t baseaddr, u_int32_t offset, u_int32_t data); - void Beb_close(int fd); + int Beb_open(u_int32_t** csp0base, u_int32_t offset); + u_int32_t Beb_Read32 (u_int32_t* baseaddr, u_int32_t offset); + u_int32_t Beb_Write32 (u_int32_t* baseaddr, u_int32_t offset, u_int32_t data); + void Beb_close(int fd,u_int32_t* csp0base); + #endif diff --git a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h index f1cc52140a..7bfd919ff9 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h @@ -121,6 +121,7 @@ #define MASTER_BIT 0x1 #define OVERWRITE_HARDWARE_BIT 0x2 #define DEACTIVATE_BIT 0x4 +#define FPGA_TEMP_OFFSET 0x200 #define TXM_DELAY_LEFT_OFFSET 0x180 #define TXM_DELAY_RIGHT_OFFSET 0x1A0 diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.0.5.14.0 b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.0.5.14.0.1-beamline similarity index 59% rename from slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.0.5.14.0 rename to slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.0.5.14.0.1-beamline index b9b7cebb8a95d1e6ca063b8cb2e32d99afbbf564..71d0facee9f25665c67b01983c4b4c3d7e3d933f 100755 GIT binary patch delta 43795 zcmc${4SY?<_CLI5P7+C)utO4&*Aod6f)j#-goNNA2%?P&4n>0?2#q$HqoR!#O-vXn z2=x;8>TMJay&=LEgK=l^^@&y!DgXU|$| z)~s2xX3d(Hef;)|`u=~^k|2*$ilW3RhHKW+$Z2j{GZnfuvvhTkYo$VCek$EJ+T)x` z-;fV;A9W^-IywN}QcbjWnDaPd(TZ$%+{*e%yEw%H|;RInPCIeznH1^8cU z?Paa1bThML*DkD!Yb*A=>v9(4)`|@`_^>D3R5sB?J<@2&kHIvlf0|vRiqSo!9`IGJIspW z;j6vxt~lW0kwFtx!>)6R(%Vl!%ff991@3fr2~m96NyXi4*l?`y4Bc%FwcYJ*Rg{#i z0=Ds*Ss|`w+Bbw1KheW&NCrUltmcWfWGB1)M0dZ+!hiYa_WPI3R=BDmIk{Yk>1W$r z$%4JQke%G*LX9lj>*J99C54K+HB50Ad_m-!sHoIr8IlcVAuPkYVZ*=K@Pmeo2@TToI;3WhgHF3k-&Qz`X?=bb;}pwSsMdiy=S0LQ#R6DsXxg!A({0 zP4SA&243!HN~S0iZ&h5;-0h9@?4EZhdNZKqQ}};w%bxguMVlaYqGcyK#LDVhb|M~3 zZ58S{q)ZcI{WX@`K7yV2%9~e35f_%zYJLYJYIHFvl@-gnjL0wWfK-ZNUG~hx{AH2I zy9(*c?yXaM78)V05?`Yz1uZ1-HngKcJE|0YYom5{nhooH%!;AB5m&CHn+@!c5WCBF4Yt!d&c7_-4TeLd)hu{xi&uHks= z%I^C_6do?{puR%#8qCA6dz95hs1SBBG#Gq3zC;HZ0F}ZvRvxp09AU<;W9f5OSzgzd=#p#f zZr7n?IZN&~G5jtX7_ck?gGoxdWG)665yKji(pcm0V0N@yg!frEhG5O=7q4Nrx^)~i zJW}`y=aINLMVPHL@vTaLU|_Ngk1`vU#0sY9xw|^k4ChK0A7Pg6qe6$Hv5Suhw*t~4 zjM1NU7Da&XV&}TgbQ=zvSe(G(O??L*Bw~b@Y*T#U++57cfjh_tARml;3*@gMZ$v&) za#4ntYx3vK)$$`U*g;b#lEkiPFZwy&0&xs^b6HGm=k{s&I`~L4 zvb{Q4ILnXi(&3h%f;((!HY}RejB!VBa=|KA(sO{H zfVyWWYG2_cl8ma75S?(28*4}ayWg`_VX+44TO}MwX%{)z!TBv6-mgH1D_V_qc>f9= ze$W}7d_{*Jc7~_q>hPn^@WNpx9Z}lKLU)B*mKQHKXO!zX0va4|PJ&`&Ja;lf)vz%8jd+$7+IO{$(@ zuQ<-Rz^oX(K)f@2PNfb{bcWBZ*WqSo_Sqx z@CIl2*)kpelY|#G8r?^AI^wQ#fxo5e@cYj2+F}h(6leIw)jHh88UA;@3y8ZT+$ACU z@N}@htqv1mg_tdLrJ!(K-=Uz1 z>c>3vh67fzcMXQ2 zjUY8KucU5tR6I*edf#(Yrlb;+l3L14E2t84DiTiTw}Wdf{y-xh?ar4K<1| z6ZuK_e7$J|hv#c0Pnf4O`+l+RUG9Qvc7 z;!m9)*9%V{fh`1}HNMjJm5Xn!8!=G~hY>G(j@Hae7-GZ8M3$b>iH%N+`Cl^5oaD^- zlcnoM^k;933<2}QBf-2x8ku08{#-n>j`}kYiK7>J=)P1|I-hk)H~O7(G$88u)C zl4Ye&>;Je`Wn8dZjTAyG5)sgvm30rqAVC;zG%KfWv-{~Epwd%g=5)9vsz`{21vagR z!=0n>vAbC9N`E$ctfOj6me27B&@@-tZrwNzb{oen^h{S98>eY*oP*Yc-v}EYMUFA^ z_(5blTRpyG`*ah!AkuLdh;~}PK)1+s_vlOP;`ok_9ZRFvGv6oopz@WA-j&zdaQfm|g;5R7YX79f6UPSXyQ%J?+YJGG9YwcQY4x=o6Xf z#q|T&feDW00p+l9Pq(G7da#_QgM6-lYjD#T8or!ue0m$$#7|t|ako)l=`W6F?XtQ# z=qo*I>+r{Qw0XN(q1j+;>|#~iQnpZ2hKJf0%&18jlPy>9(BJY-_7(h?Y!*MMpA++E z*%MP*d5-b5D~;9U1cnX~J4u;#BhvXfk+dEH2TqKlYOViYUBfJs{}-$WixFoMEMtvh zQbqYDoeVz4vZkznPU@yS?>VLjL6y;7*pC^fcOn;4Gc*s z&K*2XNphG2A)c?-btSM+*qR!C^B_KlLC6>0i3!9&v ziN>7Cp6!`oZ0twPxLdMqvy9DJ)pK@GGaICRSF*g>L)vE~ijHv{ji|@LHS|5tDz=5P zUuO?PeW`O$pEi99yHOX%vD&J(%#hQ3T)vsp#<{+r@Q{bwmQkX&4K6o6gx$}11$7k7 zo#Ro}*renn6T31$hz*)Iz?oqn?LCHN6?A9alik@D^Mp3y=g;vt)vV;uCPl1!cS&;= zaj~pow=cVrD=Z^*!L#jp=^YUXVI$@GTkaY5T*FQ+=+V4%kE<+r;p-^5Z(#&>fod0y zXm{E^0ie9GseF$R7Pn}??}}o&CPj(K6QY#mMUZeXj9{PV#dut9Y?HcpM4{Z-ZDQU1 zhF&H1BlgS^?+&=LI!=|FEr#w#^t^9^(Pm3Xw%JMtDAv*`V%ui-mS$z;W+vvc0N|ur zG`{`C&RF*aI-_79S2Zg*UdLe)++ErXm%sv+bZXKAOMh_++p{FdbG%n$8wIG#a{xs( zfu4Kbb9|~pb_(lfZRI)M;sp9*K0pNypm>)1cE^rycGcxcGb=kT>F;K<@@9hmo{sl1 z%)B&=jAz+PBk=##OW)`_ej~at({WsAvs9N^&ZBz#Ibp-HR_k8uZFa`4*z?23K5jBV3q7Vb9VN_2AzFah#@bBqFH&~gWZ3A5RPJ!Ux*mCUq~)C>=27z zw~K==RbYhOiB7;ol51A- zyR!Nh!bmA|FX$f9j3&w<5L&r_WfX`A+v%9zGcf6Ga&yuFCl4xMma19Vx?a#Z;8yD85Q=S;z3zaMLqjv? zt;?Oug?1XL7lb))ZD!7$Vwv$pXOo37I-6_H!e-_wELiok2n7n|#v1>xt#|VI2s_WxR*FSp)yfkN zVx(tfLnmdQ70e3C7X`(VD`kuG!V@7-nZP|fj6>H5xEQ)-CGWF!<3_P1uZXon*(;89 zXiarz9~Z0SDyu6F?eS3XgGoGiy*7fLoUTu2zWTU@c7txR+JU_vtBT-gs6w3GsWN6z z79L|It9lH4vJ%qCU{-(yH%%2mNt!unc*jSm`yP&e}Z2o3<1PVBBeN{9q z`&I5yhw@s?m;Pb~%X+Q%z{feNb`KyK2H=vnu>ar=aqMwPjxK_}vm!$C=Q3E-YO$;< zT0PtIser~hOs8=6yT;A!DU;a{(1Dp=e|&WT-dc5wS3bJBr_6S)-0~KAiUqCB^sb1n zFx2D7$S}h8+AvnKda~zJ)9qAxY~uU7mHG?qqm6mt%_uzXN&miiKKfvkjuquZ_xU!(-EHpa`V$UYbH0|Ru(jcfGm%oEx3bdXj}3R* zB(a=z^5kn>n8$XQ3MOP4%NzQVuKe~_q!n{vVUucwJYoyW`oxYZJ%BtaUA&Q~RXIK?$+aWO!|8)d>{i)CkBhQ)MJ^x5Vb8;q)z-m-G*r%E-8cARrR)qZ*_-RD zca$6}(n}axy0ZEWk6)FvY{#baXFTeYpj@%iXSF<#dR=3;_`;c)BAk50ir3o}bGG7O z8;voJR;AZ?(KeGMGu>?P+OD-TbNZusc^zRjpNFw2+3xJyjRDb{VA0~}+CFL{q1kw; z4X56-E?_a6!pInwwrQ+qW|O(6uOGy|-J}xNhg7qWt$ic0c_i#{l{LK4zIWzhR`#A_ znzd6O1DQDb^?1O{n+HVuHIvr_d9?u0N#13*S=Ht)Scn=g_h)NYv|`ca{vN`x?M`hx z+fwcyE)MQhp(kl4<%(z+Y;muap@sezb(vly$06){bHMEpf{h=*ev||8$I)EMA(P@~EJ#-ZXVl7Xb zmk+=sCPqp!_G@Qjw`@9YjC8;uw~Pa*+%0{WF*)04`J*qjrArc6@(3pdEb(Eh-wdUT z@4#w0vQOSj^L)ApRq7@q_wB{jsk0M6c)@~q4PdYA3Sf(N`LY8@w;}yvmn%EGs}q)I zb-Vhue7fA;k)q#u)epqaK!01ql6U(%juFf5pmt+4wLE=FjBQ!H@P_oa3Cw(~6Rrf% z-&V4k-JPNjH5&;Sxo+8Z`X;}-a1B%UbRsiY{GRTN?FnFodwkgmq<`GghJCZglbzWU zLH4s-d**x8%hJ*dJ~y5nsq`lg^>$?;0(@r$lv?qbz|Irnmc!)qP7O|i#^bZmsj1`gm(4)Oc0|XD-ADTCRHqJ{mm)gQ&tZ<4*G}jJ zbAXXmr25mj_t24@nC+EF_Wd7Q`A^I<(|dCAiZxE$=+IWN{tIEV_W5^RE^Hqd_|l07 z&GhaeA-C=uiUr)sH&ms}benhzWL;UnTVY+#Iux!q)Bim9?}hJzY%!~SYoLEtaFP-2 z)(<{Jlm^sz7WJork5%q3_gK-Np6rn&HfBtXK?MDUXo70+hsGWKWdZYgyS?W_8tChv zmDx-NFEjo57^``EXtZ<+sK-7{2;cIEX<`;eN7XdXtUQRI4I6Fir%Sjilq2@{1AfQT zK3k|_!5gWIzdAmQq&s;=`oktHdLv^kN)Mf;1T>k=Xcp@<(;fI^H=`M&(`<0yV_Ejh zlMWZp=nq|WqB9PRa+@*o&}n{kpviHjxpRYMzSF+jqdNG9+oG6B$=c{V)_)kxD&N`K zGHa&*%YdKW*|ctM5SxF%NW59efsX9U1FhMa1FanW_lzU#`hkBtY=x_f%`Es(TO8Ts zPIZiDgv&a5NbDRr!JF-SS>Fx9_%~ka&OYAVg8gZm>Nf2NI?;FCoc45DDf6lhbF6$C z98C3p9M=t5Q`x4&{sB-u>=fi@lo!T{J6<80#8B+&V zRpREEbstKz`($nCUVG0U`)W>Zsaazzy94RXcCt0yliSis+nK4v$@foMiiJTYD>&NH zb5ejq1sSaVXt&1>!TOQRbZmfd%KyH=jL98o7HQ6S;%7~aPp+17JXu7ecMkxi`X14oOi z{oqCB_Ll`HRCC5j?c*P?iobNE<1aDw>{Bf4R142ZC5@a+r>2kv&P`#z6K~KuSC)Ue zeaA_aNpPjVdx}QC@Mblqp9w#={P!XW`bC1%gfp&P^N3;W9k%bUVK`ebULM3+eGuk3 zS!tBM;p7rJcFaSH_>QJuZLWp%LsARrn5xe%@tkaI(Q7;M}wnM(2q~C*H3t`+_V0klbcMm;p8)Hz&T$W9y<*z+&B3B`Y#V= z@#klE9&zt~C%}jc5TGYUcTdmB8I27W+xayEJH;mW&x{P@OSdcdq7Pek0`YaIUUu;U^Qf{*$#Opl@=HNrV-mHSlqv3wn2Jw= z+WBbEW|1`gq#e8XNqf&J$#&v(p9ThA*#Bta3rASor=xwGH*V>L39RhX(b2;3JGzI* zEG-6?Vj#3*_rCOJZ;$X}=@&bCPRU1gnzy!Id^vDR8T6q-AM%{PNgp4dhd&w`-3t+d zV~7zY3p=gsQgOXo30^nRpAPz&)r}eDIpttu^Zp)4|F&P8DAPgbA7MCu{d?+THU75= zEb<@Y!Y>Q)AVfe?@*|cO^!$xRhj8K_0pxUZe~_|e-Q_UcsW4ui=4ol#`xQg!`^#+oBI|va)~93$(X(5X-#;l(J!__7 z^sa`+5te@6XaOC;7)qh(9cO#*nFHW_l9m z@b-nl)WgVM0CRo&>P=q}(l%|_O|1ide-r&QcjULT+=eJtQQv}n`c*?$d1O`)YRKNo)-|z)};i7m{E##Ic6!5u`Qqy)kpr)8Syak&AC@KY6f#DR`Y zbQ<92;pmZ`IFDFb6*`DDPRjzFmvdNpe6fzRpg+8tmJcVenQ&v=q!erjDhbJoQaXUB zrBjHnpf*{i<;he^a7?a15rNC?aa{r|8IC=G1W1oRkhIFQjR^yY+^?6H(CP6ltmNw; zzg2cDG_L5Fxvb{vK>umwV5&Ncdu$|Y`1;ktqxY~Epx}5$?0^Y*b~ed#bg}SKXsOvj zBaq|hF-@Lh`c;By^$7zMb5o0tiLr*;*-ED1)w5>WElq>R{6v@7X$w!`Ly+#`lN5Sv znWzK^)qzR4-kkcT<{WcnQS}kwo6r$vfkj9Bgp#SwE&KC@13C5oAs%4sWu;Ln)dL-%UZ|i}l7o!U_-GM9aiYIPplhH4FUxP?OBKE&dGev!_IV~2n4?&k_wweg_LkoB7BpYE{SU)!=azs#pIEUf64 z?tTdlM7df`f9fEKzW8M*ol(M~{u2hTX8sSlUS0+<(?246Zx0pAiM?akPyaK~`zO6s z81I#(EbD$Cow<|c-|s^%va0)Y@ZAS=5!iW5!K)GZ;&^Lrl2utYd0akppJ^romrGT3 zZl|e=^qk8|9`vRIy#Wr3-DNLS_{`_|g+*V<4Kx{?5aT^NP8fjLhcT0sF)ZM>j&!Ck zOa5&>NjgyVTYo}lrm+UwD7y2l^~og6d#dzc=ms-MzOg=s1or6U+MH2h#eh2T8JC%a zPH2uZlm7eHA0~bMXNq$=c`Sks^^&`V^vxUGosiF?ubY)(c>|%zoA3D9th{tn+N9;# zU^9I)$*jDMouwXreB^i%v7w5%^E66Yx;-0jraNwM3nig$&t~BLBrl?*NBd{^93&kVU9T!!eb01v}Lxtj>8vp z3fT~ha^JsA+POnMgh9La@p1#1NS5=v2GW!4<1sE|3X;_>_#TK?n4*2GgHg9yn72$*m9OHY|4o4 zh%_trS8i|z;eJ-~qkqftdk%;ciI~fc?xc@jqk%OVk@D*8u!D<4ywUeOJMQ zmUk7|Aaa3UaVNc7&Pr=y`9I-c8A?M(@?;Ov)>|Ao>r(uBRl|7jA`jBrzf;OX=A_(9 z;k6#3x@_Jc(l@Sh)f39!$8$W%i!EoB2o+%n zFeg9Kmb-hAR^%<7Bb4brRxS2pjqc^jN^?W zjE@JLic1DM+zPljV-zbtg!i*6n#ABoH19~XnOB)z>ww$B)4j>WF}KW=i%*OMTQNE6 zZ0Eq)@nw%;>#aN8Gg_5%lAG9WxWn&zldUc1NSo7~>W0Di-YABvF&Io0tw?+RTT5bU zIj2A`g=u#EexBHheBE+RIo{=AThE#~wcMnVh^{cyOK;gb2oZ%lA_@^6V+PNOG}AH> zPT^e?Ej!JvD(UvLd@mL7o;5jHBW!<{_bu$B9($Y!)An+wGuBsylU zoP~r}GSgD&a$=2hgE9T3+owvvWn%!30{pN8{D`d4I5!S(d1kK#J*C@qcrxHc4)m)a ze0vD4#w+b*w_+M3YGd~*bJLo-taK7DX+!#v^ZZ;JGPZxE3|;iNRGY3XbF&~DdL3WQ z!MlQ0{G(Zwl=3WJ(t~dE;3d9fa^Rl9x`z=luI6DZb92nJB#Ae;ksv=9ot(XM&G1O9DtIJ}!XtqyDkg$P9OFInSau9FzSkuDm{k>~1;F+5~%fOm%rE`4@4U zS7D|_uqPv#gD*L68OZ=Lk{d(dl1GP=NOD#CxHJ7d;=-#UNE`l9IC-7Ebe89KBAw|= zTdK=Dkrt%-^$3zi$S@6R4bh>kI>K?&WrqZ~3t1(gue2b=)sfvvAfb6Tc(RFn?tMm= zN;T6(r+HK?d4_D_t7Az7DdttNqz{t%Scp~3qk53;NHTj!U`Y=NtnER@`F#ebhmpKs zxwbS}5N=lfx}Ddo5e}&*>Fs^7$z~Re2x6Hc>7Atv8Pcqzp zz6w(-a1KLrL%1=Hgoe%+RfXHTJb5co;%%BkiB;wsc~%_h+<*Qd9dE!z8r^5jkI|co zdU6MgAQ-8PxO>*j&k*$qJYYWjR2EC(2oP05)P;Ndxw3Ow-?euckS?9x2 za$UKl7xAZd8Rl(zgbbIPWSAeV@tQA(m$MA>e&%((NH;nU6GCq?(BDypd294?t~|Rp z>F7WAYLhM=h)pzf<-Bmdvp4#15mg}px0|uTWqD^tcW8W7EmO4>#?fM4I zoNJ)boW7Eq+EjMVSwY*gCO1oz4>8JR2%?bv#XKRtSJQ(;@#MZ_9JF25 zm;3`sPCrCY#k`^){9ZA?qUF>?G6=bhM2Ra-l(>>;|2yPKg1jH8=jT#j*3<4io^;xF zK^n}>1Iehug^{{F)tl+GVG#Tl3Sugp=iqjxIo^xHeH%liq_NDqY^GE3$v4KdVyMHI z_7c1RyD2n?PbEn57DEwMh}zt2lzz$ih|NH!cHjYn5U~r#G%cDZ4kAHGXYlILWLyR@ z1?MIiRT@8QVY)W0YIVrd#;wZqgeiI*mW7$TB$Wh?vdB#s5jew#>0@f4oLC@VxaI?< zZbHXhM6cINo{HNsT&b#XsH;e?YZlKPO#EjqEK3-ma zSm4aT9xFHqwn*=&DY`?pg!8n)B+zqFoW^3x&yFkt3n$y1u_F)Zh|F|KS51m3V&hMf zOz9yUR+U4i{Ep%#%bhXjj#`wXwQ%wU$-5PuGOS5+e~;y+A*6HbMa4pUO_Sr~$ZQBS=qghh@fu5MDb1K@Lidz>feG^T;&BKE=E!O*+}b zY2+#7)RAOJ%f+hBDZoshT4fivV5BUzbEGWhGD;SUA0>;Gj3PriFV1Kx_N0e!7@Fs# z8O@uxVYFlwHCnPN9xYiN9WAPsg9(j5)fv#Irm3iONuQoB>8sKu{q=M*)Vr>!%5jHy z{1|e)^O7h5Gt;r+cSGcX59R{hH!MkPq91#n8^;oV|0S6Yu)V^9VvS4kc-mMfYcbCk z$q~MDEIM{QKO>R_{MJ~~KJ*VGn=G)A|4yy$F(6baz>DKZ+YToM2eDl&<|H&4SJ~fx%gLye_e!~%LE4V|%o%)QsVpiQs@(RrFUrI) z5j#DN8#Ky?Tbkp{$~QmrybLlY{JcZ$*f~AxyuYp--@jozX&WxRe4~*oM;a@JytvMN z;IxRv|kQ zrAvT!tNUwt{8T3S2-+x_K<4-~j!tdUfA}@-^)%T^-}mGDp2pz4t5+0bro#!p^)v}= zoiAd@;3jW4>=F-{C|yqCL^(vJPn6^F=tLPZAqnKIv&dl7n3*LBtXXz~ApT<(F#;p0 zx=kV{@!l{=x`^P(d@MJbo%HX+4g4{P^6dB*ATIhM5l9#P>}lojsRkYupEU^SY@d)N^U2mLG_{#%W{- z-R#ZNr(p-E)=UQ;;w5{`IFk}YGG>FrHEx|v zI=TrCebJKHWHwDW!~^D#d2Y|AnQ6iizIqO*YkAci(l()Xgzb2&7#E@rlV!iij}dAt ztPvhSzac8&#|AsnZOFl5^`5p|p5LDsJG6kUA(~w~!=V#&=lHxnAID?IF^9ZJOMH0R zT+$`v#v@4OTw|tvCh)SkWDyLtJv?7<(dn>r zI8V-qmjQ17LYfBd^_f1ntPd5BnJnT&ceC7Woj9 zyj%wv;*xk(u9V>nz>PBW#QIzAixfOmJa~bF3_aKL%mri#?Qx0ME+Cy;FPdr3VcHZh zU=Io5sS8OP>{?_lB(psWuPNzKclb&{snq)^|aG zrjuA~>ntMkNhv?Ki1hU=NY}uotJP{Ad6o7qa2S`}iez(t41$N(p zsHs~>HO8$Qaa)Giyz4A}do1o1vgiLdJ|Gwt#-PhU!UbStz^ z(O}s{-v%r!!uwulmJ+s}S1l!rTx)<1;Ze_HFdIx3E1XE@J3Pal%|sUaN63a4Oo~y zrqR&Y3#3yA_?Kv$S;(Cf@gatyeTea9mR7}bG%-4aCto6o!4AF;0=?ueI#ClSYA&}H zAo_eMnO79R9D50u+J}E%K*rIREWC0BaGh2Opoy0)BQxns1^oUp06R+OYvO4yl9%aA zJ9(|3>~K$`j4Z^8`!k+jNFoyMJQNSm$Yl?~l=tN;f)PlW_kb@Z$Y5P^W zDazo&q^yt=92imH(1S0L?$KAYk=eeNPAYsXI=jfI*9q%x-%j#xFp_9~o{%TF*9!7P zp)1xqURvRBxgyuJRiv+R+Pg}(-?+OHzDvhrcl}2>vo^+RG+b&r)>tH`4ef)WH#3@| zhwxc?*^&{qds1hGe`zg#DN%&a;Ujg4_X)EL^XQ;wFKf1Ce83x4kUxYDjBe(w(8!h2 zqRrIUi)XDRU07kL5C5r%1iGy>0SK?M5*}tHhGp12p0*OZ0xMBp7&ePnlHvVV?!@~_ zO>3k9m13)F&$$Gn{mUkK;ssb`Fkt#1v%~hB<9An*FdzMQd=wXZaUS(D=@R|35LKua z&i9T8ZZveIom@ZO1D66pF14wXZ+Qf{*zb_S@!FTk=*CLbMzHA>O!UD#>lG5#^_+y( zR0hY_;Yx-gobi$r2h{}t54&3lR~E8Gs*Sg*BYw#MT?c5qP>8T-m}t6S6>HoRBmA-a z=oLT1&|E>l%Q;Is^GYfvp?)zAH1WES1w6NyM8w8u((Nf|l5X)MI`(DVFoUCogo*F2 zBEJ&)ay-BPD)wR9A-sEy^!9u?SF_%BSgF58KJk26_n85^s?DpR5OR~}t!awF+V+z3 zB#gw5-(4g2lw*0!TGG+;m0*pJKjyr(m^WWB>v=3>*OIXsoq{R2Fd0owE-)(#!zB$} zk5kok*s7k(bJsz8TN1>+MG!x+j>)>tNK@8pR<=Ck z)KLd7+(?3bX4zXPR2XYHn8|lC1UQ-8w~UPTd$^qPhdVsKjCATc$zIUD=*2HI$`cLz zX6|tj7VDqEyO|U)Jy(Wh&k>=TK;C~nIg1M1H();7B^HoD?Uve^LC=}ca~9f+D0%M! zK79k0Ae+XB#d{#%y@3SKjfB^1fV~&vM?g1VR=LT2Ig-;nUL@Oj7RM?0N}exrQ+YW@ zi1*51ewdT~bdxL3+K4?oBf0};@Efm*+5_pI~+Pc{-G z-RL11@K&3MJGsHF0$-|;B?+?0bVFBOwF%Qb287sV2!4Zn<@dnex+Yca9M63>lL1}# zJ_1FA)i>9o>>BH4tl=~H!Oi4fp{sJu)cq~FbEnYlnmy4pVNbEjs(rkwoQxgV;wJDd zN7z2@;4qN%)yC3#Z6LKct(7IGv;ncI4tza?HHdW%Pu(J8`Wz&#nPz3$S-x=#bc9u_ z9kP_yxt#aQXeydhw>H~X`Vmst5esC*1%&WRbaf4RZV$rH@BMaSLEjLrw zW4w49;=k7vyqB`7&=_8~4RXL}Dr91+Ak#cw)AsUb!Mw^V;C%e} zQy1-fPaGQbO){#6gy`4udG2=fIMUU6TDhHk+ir|-<*`O(D^lMk2SOA0z8$1XJ8vDG zno{e4zpCS}=wx7eHWtJmE2SSwOhX? zE%@eLBo0S3wY#to{_Q4D+)es;WC~s;WpxZM*iC{u^fD`6;SPr61>+)S^4l>ZiPh5HvEs)`OxjcFkwPi}XBoBm> zUJbk~gW#?RW#pC_reQJl!+EbRFp~#!bt%h4IZQ`hfDx4Q%1~PL7rc4H9@4877zsxz zgDWM9u-v{eS-O`E&{JHY(|*?%k_I$M+EGaAc;Q%!6_nMLnxyxIq+-WRmWj6#i&^P- zp6{!~tZm{xd2L0iwq@1+hp6f$PY0CAfBp;*YO^!SRMDj6t9E$D(q3> zHRzR!#a=VMAyq zUuNh#8fPpp11QT^$fpenBWb2AebKU3Tg;GOqV=+3SgaPNlTwbbLgyjdq8Rt`ia(K{ zk)H`=#u{HYivF;>0J-->em>u<$W&D8)l3EAs+w+%#@id-CjAP1A2CWCgbx*$SRc{T zuj@Vib2yYQwlHKFF-pX*(VLYp`zJ2;KusTAuTR(d`X~Kzt9E-wI1I-@<0z(&xM0|C zByRd>;|nd<{moxdPiP0dm9n1XMt}2qnO@IG$QLKri#+^|3(8#Guph?+M|BEuu&9;R zMyzlsUfPHa8~MAHhuBrztnv~?WBuc*W|a$p+o5v*jwNwA$@s_D9=b}_UML2i9LkzK z1@A(WAK_w4^kMV^ZeA+la7dOxlkpX>xL*{4c|su;!^;(B^25|-ct{qqQggp00)I{5 zHP0$O99Kfl@|pr%Gw^zc4D#s(f!uX{+HmiIaLYRg4vM(-9c%>L*~F9I#R9G79o!H) z%+I_-UKn3wKZ$@j2g6=vsD{WnYJ}}Ou^WXMqC_q)w4vK@6V-hLpux4-{whgLl(6Mn@^Zg1yh?~-wa4&C)_ z<9Z*KsOSy2CDWR9N_^cYBfde|Z&wh`6w@Ey_1}&cbh_b@$MBj_V0pUnAS6o=^{iPZ z{NQ8k>023?H*W8cTSp#Gd&`g4RFhYFIkfMa6#YC${&*68T0-29K?kmr16-Ih%pEb* zx7T>VVba@e9Xj+|?DF)*nayNkJb1%V^6Z30Va4bkVY~5}+_rp- z#&wzp`g!Cddqt!9I-FM>LxU%C({Th7RYF)`pvO?KBuFDf%XGh z94rd-^SnZ!>vgozOm18ST6B{@XY$L(NoXLm2M&?Ii(m7K((y~UdP3kM_3}}`&jmh4 z#}{xj@aD1pHy4k9{5k9A?6%Ck$}-R)$A{cYbM=lXX(BYTc<+0pTrn}(HS6>Nt5);xA=AN7%ANX zyr&^~i#8S@41SBiQQ$AfXkOS!;C&AZd~GSWzK_AMx=GwG6RIKZT7&0L!%!_Qocw?z zKT6}d^{-^Tz9ey&FHghQx9A0-9p_6u{$kRg%;f4MU7Ay9lzq;`uh_Ma$J7XZMfjt` ziGa&40o-@_04>0pt|Tj>JNW7kh-cpx_jI_g9geUlSUP5<#Z`Nm3@lJffjmJksLkhBLUNpUbn(kVE3%Z-Nw2&|8!+zC^2Nt!p$lo+WL4 zZV8Z?e6FjS7Vwg@q#s{#mgJ3Gg$BtYs9gL$qHw{B9bl>!!?}te!A>WBK@FQLt|J{_ zP=?DL?)4Gr*x%j=S8rH{arpox3Uo1OFkC@`$@Q!%d0?!`;WJhoctwzE=U`!Wik377qpXj%sJAnM_ERaQ8mQh zEXx*`6c7wy{%M?k0<^9yLq}Y;TiH&oo)9-znS4<31(r`(Knt3#iBb zZ*wU2ckz!uIq=g*ciDBFA5N8QHeL~mtMdKcBR)KNA#uU{)^J?x@k5pX8Jg<G?DUCACq)(T?5CK9uehQglr}k#gJ{3w^0w|;#H;w2J_XmB)HmA zOI{>y>k)%~>cOvHAVd1EH-Zvdz=l|%#ijt{lQGbMu9fw2nT1IYQ^6Xt?13$4I0mUbSQBhomW^L>9F|4VX)Lv-j_u>RT*0{b%N-KXgZg+(~JPCRzK>kJ) zxv)w1hehBqmzzE%9b4AUl_n?TB^SnU>v`huw!Q-RW8C^F`IuDl^o!Vf!Y=7W5>fry zMG|j_%@IKf<_FOs4oA0@IofiUh#A-k&VTv`HbQfF)MZ@P&4GC&V+t`#VP*GJ=J4s4 zu}hi5i;?&VKEFX#qS?CgK~aOkB&WJwBqWKe|HRjKXY^qUC4M-8C;pT42^Y6mJ~o`Tpit!oh2Q@tV&b!lx$$%2-~P;L zu*2bz+@WfPV9-~xR5rM4#&|Y~XMRrFdp72Mc*#Q2oj>so@!}^wCnM;YliceHb{)=) z=lNI2nv;B?yTm43$M6C-1v+CCX@VXfEBv2^EqQCN3k^cHx_q)zEB-gPl6~eSdsU( zSEqeLo;CQ@L&|`ru6p+Z!k=OMRs(sDzw{kRrkmV({TAK?fE^a zC9OBbITt;!R}}k|Zc3LW=sT;p*AKWPx2c%#`+)?u-2ay7Pm^U6X0CT|q3Z|oC;v@i zN{JKI3%k=6npHRj_>qiyG;R~W|0DT3efu82_!GMN?KM34XR@RHpB8|(%W~m);e$%M zyjdq?Yy6pE@~5-aF29hMDE;GUUVN9}qEEHy9(lI~eRIb8db-D3hHVf5k@}8%)#Zfl z@gf1$sV!+MSK?Kj(T0BBhQw8yI?;I^^t&_F6(;(ZHt4$PsdOkD)V@^uP5aY(t@u|e zF+_I9hb!tRt724L+FS7NY+6-1SjBUy`tV@-Bq{u`!S>*z66fc`8ZG}}6;g}-Ugu2H zyv#=m@J2l9f1z`(tMH-9A7boW;Qt+cZgb%Zn*prN^8YuLn|_B!ax+}JW)*x`s}rR2 zJ7yYCebh`1?(JM`zj-%jtAaVZQA*pH$m#YL1qQ_y4aRwaE6{5VZuA zm*c6#a}ZAro^yCEY>ZyJ-xnBPY-n-rfgQ zI`b%=Q+Uo*$Iql6(F7=eD>S_g9kw0Xwm%g`P49M?W4g^)oj8l`jEV@F7#BNt+>AWq z;#~Y{dAiX&W9sx73ynikhNXE1O*GBL!mYadI_g1rT`5hk&MBiGxD=+_Y)hu&IfF;l z(&r93{zu(A75E20>6^ zvz3D}y>GMayoG-hInrj^m5DUoX4@TrG!5xRq!ybEx0>qTpb>sXMNuO0h(D3W*le>> zxp6Z^B#VD$xdI^Zhgy_un{DBJp0%0wi@u92Dv*DWNP*-_YLV7!AO)>a(2D0OdCg|p zb4)Hc9n?`EC%!hD6)C>r*8T)63NWFZWCvIx6jF@*eH{h?Njj91%Tvo~CvutRl+&Tn zrvMFhD0R_hTX)U@1`UvUn~h!OSIX%`lFH+^&`x7&Py#KKf2f~YZMGfIky4|96agy( z4BVBY4zNm_?M+cms6hM)x}(r{dUe$ndXQ|Wpl!XyKf&#VCk@YP9$7&<6C#iwyNS0 zCEk$=dUxP+k>Z~_R=noh;GOXgi6ONK))X%d02uknEi^t^rIwv|D)H>YQ-uc}#c~)= z4W2W2YVlmea|O?JJh$-tgy$}v`_*aNX(n+Ig7Td^XaY4@_!m29D0Ok?Hkp?2us3NK zxz7i@39v^RpCYoic%jI)j^f)y+Qyfk(5Sx95}Qb>c-T%LLsULMq@n42ib%uKc;QZ< zFY|38+g;@+L~4rRUx+l;%xxm=wOivsh+c+ ze&(vZ^I_F=5_OH|mDQBHxgxT2i>w}enC>8M9x$kuxA^TN^pO3%@;&;QbFv;ra?PcpY2r=|!M`cn&F zoc%!PwoDMxU5e7Khagl7@RadSkJDjpK4z8rWb^hXXrgE9C>7QL`}%alB|3n=agr|N z?P}-~ZW^Mxa}7LzXB%HoLBFm0*r}GeX|U>$_h}UIfO`FbZ}SGfbA$%-@6S+AZu^S1 z<7@sxm$~^W0?pM^^oL2lsLyoVOJv+)GI53(0)bA-7Nt+S&ze7057&gnsLxbJg zVqdGR7mqkY%RMmeLqHJlDxdNpJ*Ea?mjW&8DZ~;OzWyvNa=naf9S{AG_HheQRf^#_ z@k9EN{XOO*I**2w@bZsnkXuM3ipB6_AJH+Mq3J4ytfB<|^a$NAQg)Wr*@C0&Hm1O%YB~MtI0oA zR4j<9*ZqwKkO>#TSyO0umZ(H3G(1i~r9wL#6t7aD#tK0o6>1C+uTr65f`c|ZB8mmA zRH!kM8*1r09?(yBDA72snLONjfqJ=K5!mX|3p9whMZsL7BCFr|gj$JPj7g<2XL$TY zdfcr$^a?+A|02DhzgK^Hi6#+GQw%;pG-Gc51P1;-zw!?#O@me6{s$dQJY!**eK1Zs z4sBlhZ=ZoS7JBI8TixoPqWaj?U{=mepVJebai~2m9!7gl*kcg)y+Q}L#U%r1<`b^a z@7?-9)&Yn4sH+f3d#~>BFB(WD)cDx7*{1=onl}5K5m2ekq>bWLYBRw_5J+vt7l>D> z&G>lnD$TQBo}iW5j4$RJzo74W99H475s3U*nB;K&+j-i8Pxz7+_^7`%TIT>s#Cu(% zXFZc)a>>^frRzE80t?!S`LKH$77-R7?x7xB@}6 zgKw>;uc(puQ4tv82co<{S6}`bO7I-GQN`4uD6wBP(w4eu!0KK%sR!{)&BuD&3xjF0 zaQ$Z}S8v1hYfwJ%HhtD}uoo!KC`#`b4hkc`bsHU~E#vuv+jNlI;7kx~q4$n{}N;HHwgP~X)@#ym~eGbtYJE#v1!%c^e|*lVSCBF z452RMa5Y%^5HTHtUEAtaeGNkhxn5n{&oG8Sx786zq97E!s=r~lLCnjSQVhRgTZ3O3 zXh;$9MZh3KUlCtq3^Mdai}`Aig6@=n4^}s%8v2k^)$yr@Pq&bK?)9Z1EcOZv9FHLv zUFeEObfpU(3|D0U9s?e#g<&ETBNurVigh(2n8KsX!z0MWAEGb$WQfR0yo=}xbS1p< zOGA4%5rKKAy!J~&gb2#SLo@k(aC5aHq_cA4SHPUY>nVly&E;ud8A9C<4k9GPH>ig8 zoj!IquD3E7F@-c4^Nh==kHIi#QStK<)`)fl-I!NIqBAd()i{uSnCz7Sy{ohDD zxJe}KcqS6p8hlY$$BX`Lh(H}mm-c+$zYR|nLakDNQa^emEA%PU4E;*|iM*Shhpr^O zh+Kh}5v#zv>vh;%CQP^{vj=jW@6mlR*8e--(C zz}w4jK>jCw@Eb$79$TdpDAx+;_fSJJ#hRGdCSm>`dGnJOmonUVYaFqt>mfS8AcZhl@;mWU$i-o1h=M=3~P;_(St6P z8eWFWAV*{-|L+p1k}u6@c&d(%LlcUD5)%Xtgk4fp@(#)?hjsjus&b_U#^a^upHWF+ z{ap}b>VP~l${=FKou3*trW_OH{JPgaR%)gMBKQ1gju+ zh9^|zD+_p3>G;2^N-es;#ZLckl^Bh{>n(Qu1@H0?^!Rft^i;{R%Xo{|7`Sy*m5JqG zp!d03PnG1Y20l&4kAk_2QL9(rHd!T6KOwJc$ZfHzoHz=bNY?4`53NNXcEImY$=A>T zx>TCtlWs?_5Jron(Li->pQvQ=UF1u21~*mWg$k)|BX0Lp>S*O0IoW{dw@y~q9^EmjiGxtls7e%cSi%(2P2=ZNipTwENGde!*a=GAQF!FS$SyZ=_E@JX9W78%y~fF7 zk4l1$07r5*e!^y?WAjuCRkBtv(8sA~ z6c~tcsx$CR#k>5|8B74a0029F9`d5RJ--H%%Rc0-n(=sUR*CA1zPzgm=n2R4H!(_d ztM@G2uae^>P))W@a0-2M9|YI+JjU^R!a9W`f;D+Ux65FCc1QAri%PoIA+MKzB2Xp& zr>k?1uDhuA_)L>xBqzyEa`HZTG&yNbLahN(8ib3X7D=T@lvJwJl@wD6+D9m*yb32u z#0V85)@8-0X^C1eEP{m9s#Sv)Dc&w`s}YN|5H)JJH!K50soHzJpZU%HkwfQ?^85bw zWA^OXv-iyWPRl!|z}i9Pxm2Mhu#=CVV!7C0fURC%GINy}=K*`%zsS5s>=jJOS)zE0 z6Lt+u%luUEAO29hORSv+E>Zp=JmNZ3k7RydY{P1BqtbsvZEzm)^rXpr0T47*I3o)W zt>s07cVXrmC@co6!U!Y&^+pWN@CqXw;L|#x@AGpSDG{^(2p&73^d(~6H46QR;%24* zXyzOy?MAK;dlyp>7M}dTI5@&F)@;^iPGw0#* zi2UZQxju4I%wKjhfYtCPnbXMsz#KH~;505`gu#d@pIKZX-VDsp4zhCHcR?p0L3z!J zQ4J%&7Cc5Z%p!Gn61WQwc!RQ*l6vFNbqcaB7xM=^WOn5l{Exs|M%2uUW)*Ow3z|15 z>(gRyIgG^@EBzZ{USk>B9g0UunY{>T%FJR}9&@W?rPBYCDI})CDa?9a>^_3pN*?}q z2D}D?GeGA!J5Owk4#IVweU6wKw+c3Th1tuY1r1Egro67e!1OMqyJZRgoBHmSw1CTpY``yX4(f~ z_A#-~xESbD`YU3WjDb5n&f(T~?=(26BhD!l`*Ir{YEb1Q#Lk_@MQtkZ9;#V70&&G1 zVu!oHA$_aZ+o0PjrGFk;(7?2uZ%EqX{pdgHJ&^Nlu|Fkzl3`iQ8D&e<3a181&QUSX z#SqXr&N+$85C~nG^Lt4fTT5Ots_+dlS4_aa&Kn?^Z}o`ei`|PyjpiAtN8c#%7b+C) zLQ?m5(nKEUBkFs62XYC*LGvRLHXzxv%xSZCxsbThh-#~uP`U`haRfA|1rM!1&e=^@ zg|N^6$5HxU(5@Df$#R&2u$ai#gWmW2y5qw-Im!9U?|Cl`*X zfhWZtK8(SKlz*1gopeE>F3$}PQ%;HRFt?ZvM}Zn6xi#Qk#Tbyg92d5LGkg%|t`+;w z1Rl_3ntKx-Sq;6{cbMBpEpRd8^l=i&{gR|5_a4+2tb*JJ#Z)+#9#(-7It0IIz>n!L zl7gRx?xH$0kYe>3L1?;E{?Fuv0kGzU+&Sb=%=71EvNhV&&5KblkawQgni8;QT{t`;xD(07MOo7gE-koB<&wy;F(mzLslL)GTd0!X%GdG1AqL&5PLVPz!s~58LHO~=sHFDZ}%5Nq|RUikL8nDIAMc%4XrfPw{ctA+X^cck#UH@~X`w#H8#E`+ z`j2wjZE-IT`Z+D&tT)(>ftrd73jG~y#<0>WDW}e*>VX0_6cY#NQ1eK^Wu#_SMVN{U zu4cro@avQmY!~~4TSX@@z}5eP&vJU5r9-v2;6bk01qChI;kRWWsg{uOnXurn*q#jN zGu}f5|4j$eDIJ_~crD~W@v2)%YG7f$n4DfPc_OI)h1DoXS;vLUSs_usFvE9Hc#->z z1s?JS6%w?=F%+~aeT}%y6g&X5pxLn1*eq1U(5q>=rdaX3)v?Bs*x8> z%J7JoRRaj}>IT5Eh*+W@0Dux{8X* z#Qu%}nyI8$Sj3j;w6kcn;tRz-<~ne5#1s{+p+gje9Twd|W*Y+QKELR0F_$rbbff%V z5VMIXv15uE;L}kC6w=4I5t&3jsXjHsED^99VTh~6T*RD)iKm3GHuqv+crGuwR7~{&_-DPo zk~YfyBStc$9N**KzPICksSNuaZxA0#_VLE8KTypf0P@2C+Zd2cGr@lwK^R z)On;^aVs6*fiMP2*MKoN^ib*bJO>SaTIp?EyB%G^Q>QBU4AsyDQC#six#EmCRt$1+ zIpV+hW$g6py!1)#fCTcG@}IE-D*dh4k)io1DgCS1W;|v!D9bWk{tcS9sH}_)L^m(m zy~46uu|rh|Xwa3t7Z2@*9>E$sR7Q1t$Qi7uxa>w!vBM$%o#YK?psunq2KY`F10mj% z#6@$w&>$)!YWMYG@t_)TkRWSMp-%{Zml%UID9c{qL*xlAD4M)S%Feh}i=8F*x2NV~ zDwfMhY9;#my#8479T?!|R1Ju6&9>?YSl4xo!|9$buqL9|wfbv?e&1oN8v}Qy$loqD zvmdM;iQR+#@f7;~Vm~m3L37@KWQ>DAUndL`YSFWl-vl_J_&Lh+tq7>gVsqR!ZN%QS zN+*h!w!*KexICQ>cY|HEBkIfF!E?~yr7ImrYb+f6BUM8HUTcoB^G3BlaDd@=0hxbNYzCa`xfpjPkrM zu*g)rP3#X*5C&aE5ofox&^1w2aGVY<6vmW)6+yKc`bNbZJYMVpYo4g+5j)NRZL!kt z5c?s>b_(q3f5lfc2B`4=eia<#VK@v7vl5udm;uppI$+zr3^7Bf8s z)|jZIHvG61d3A9m8=A|PkU4dgRC4&-dn^3T0Aiw&%j+O!2DScIx`TvsS;+7L_kPae za0D+yADX9ESus1O=}_mqDi8VqbPc+yCb9oIm_jGl?-+zW;0ILo33k<;;6|s!5)M2Ax**n%K`Y;Q=*pQIsv%5QHu- zzlidD?=U#os4p(!pb_Imh_7+K(g1h*b-rl5*yr7xjVeDIkl@#AI;V^7V+Yj*{fN@P zC3YbOga$4mvGvC>XhP|H@^)XtlXg-&AhVsdjXhpe891$W^rv+AcZ$Uj3R*qAnp^3z zKIppctIrktTm;;vboPkvn+1<4zLp>y2dlx=p8yZI^%uUlRm?Lh=^#|lFVpxs(HR5e4#LAUKT1&lY>l6#P4s&Zc&% zYhHi+JPdRmPy^%CmgJ4@g;t~ZC&dmPM4?(3r&u(MK-a_)=bO!^H-b-S2Tu`%$5Rw? zmOR!3R*%I`@V^q8M4x&nPGYK>fqt>d|67u25AB*)P@64gtef(y%cQmhTF?-n)i!Wg z9pXVdsO2-;7gmEc>T9{koV^%4bl*T+=;YtRQ%=#L=p zI&2~JvSV8OBe9Qnfe(59jal+5r#UA}l)>_sr7t@8|ZZx?g^aYi(!xR`CZbEzt* zs}Xx2aDf_J$Ik#iybj!={42PwcR{NjsUr^r8y>$5lcw%EvHw>!@1nY-*sJ&90WCIl zyScNO1nVlPkfl6Qm{KoVbGg&E-FXS@4r@&e-aDDK6022 zbPf}FVlElNAhkGAfr3->3KIW8Y8?Pi`4J{A7ki==`H-J#c{>K#KBe=K{YE;pJ&L)O zJL){{g4osn1poW2$pbKGkR(`ki>AS+RA3O7VPH6d#3N$&yBN_ZPW)W#e@#NyYMD63 zbI_2dCH{!~BoFGL#NYTj-iLf#&;Ruq-1`l~pbF}_t4(%;o4o<`d_*!tb+`)ZKPU?> z9fE$!C!YFFNqe*({dz%B|8ZzR^9Iy!7xR8%AoM^zsXfL3IA`F0JW#)f9{{%TLNi(Y zV`9oz&X2JE0L5l95b*p*c@CO(@CQ!21H4$G2D1#;IQpo^4cvHKHN=$mE3W6{gvU+0 z*8heJ*fzTzrksD4NPm;;r^Ny9XQN@8o0#zOELVD ziXRAn^8)5KFAckisf`GJROh5&m=`H?-0%dS)m&z5R|P+T-U$x*p9goP;Mc)!%9MT% zo7jJK?cc`VLAA;A&Gt<u+^W%gl!D8@ArIt^0<}*LPfZ^R|xbZrIkb zX-n6JrOTR|E;L&=T;H+z=1n&(U3THQjRD%eeq(^neG6^bTWA-U6&tQw`Z3eGerwk) z>$h%LbroRs{w;awTi%wn;<6PTS6+E(TgTO_K62UqlO^d(V!4}c-n?mjPfN??t5>af RPse#n8~0~ikiLE4{{vO>ZyW#s delta 43103 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 Date: Mon, 10 Oct 2016 08:17:34 +0200 Subject: [PATCH 2/7] fixed bug in gui that overwrites the individual sls file path values with the multi value --- slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index f902e24d70..d33ba18a56 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -4674,7 +4674,8 @@ string multiSlsDetector::checkReceiverOnline() { string multiSlsDetector::setFilePath(string s) { string ret="errorerror", ret1; - if(!s.empty()){ + //if the sls file paths are different, it should be realized by always using setfilepath even if string empty + //if(!s.empty()){ for (int idet=0; idetnumberOfDetectors; idet++) { if (detectors[idet]) { @@ -4688,7 +4689,7 @@ string multiSlsDetector::setFilePath(string s) { } } fileIO::setFilePath(ret); - } + //} return fileIO::getFilePath(); } From 64fd82f92c91eb19e981e644a22bdc3049c9192c Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Mon, 10 Oct 2016 08:39:46 +0200 Subject: [PATCH 3/7] fixed bug in gui that overwrites the individual sls file path values with the multi value, included a febl and febr temp read --- .../commonFiles/sls_detector_defs.h | 2 ++ .../commonFiles/sls_detector_funcs.h | 1 - .../eigerDetectorServer/FebControl.c | 19 ++++++++++++++++++ .../eigerDetectorServer/FebControl.h | 5 ++++- .../eigerDetectorServer/FebRegisterDefs.h | 2 ++ ....0.14.0 => eigerDetectorServerv2.1.0.14.1} | Bin 277482 -> 277923 bytes .../slsDetectorFunctionList.c | 6 ++++++ .../slsDetectorServer_defs.h | 2 +- .../slsDetector/slsDetectorCommand.cpp | 17 ++++++++++++++++ .../slsDetectorServer_funcs.c | 12 ++++++++--- 10 files changed, 60 insertions(+), 6 deletions(-) rename slsDetectorSoftware/eigerDetectorServer/bin/{eigerDetectorServerv2.1.0.14.0 => eigerDetectorServerv2.1.0.14.1} (56%) diff --git a/slsDetectorSoftware/commonFiles/sls_detector_defs.h b/slsDetectorSoftware/commonFiles/sls_detector_defs.h index d4fce83e81..ddc7d62c6f 100755 --- a/slsDetectorSoftware/commonFiles/sls_detector_defs.h +++ b/slsDetectorSoftware/commonFiles/sls_detector_defs.h @@ -362,6 +362,8 @@ enum dacIndex { TEMPERATURE_DCDC, /**< temperature sensor (close to DCDC) */ TEMPERATURE_SODL, /**< temperature sensor (close to SODL) */ TEMPERATURE_SODR, /**< temperature sensor (close to SODR) */ + TEMPERATURE_FPGA2, /**< temperature sensor (fpga2 (eiger:febl) */ + TEMPERATURE_FPGA3, /**< temperature sensor (fpga3 (eiger:febr) */ V_POWER_A = 100, /**new chiptest board */ V_POWER_B = 101, /**new chiptest board */ V_POWER_C = 102, /**new chiptest board */ diff --git a/slsDetectorSoftware/commonFiles/sls_detector_funcs.h b/slsDetectorSoftware/commonFiles/sls_detector_funcs.h index 047f0c10b0..c4fa4cb66e 100644 --- a/slsDetectorSoftware/commonFiles/sls_detector_funcs.h +++ b/slsDetectorSoftware/commonFiles/sls_detector_funcs.h @@ -103,7 +103,6 @@ enum { F_SET_RATE_CORRECT, /** < set/reset rate correction tau */ F_GET_RATE_CORRECT, /** < get rate correction tau */ - F_ACTIVATE, /** < activate/deactivate readout */ F_SET_NETWORK_PARAMETER /**< set network parameters such as transmission delay, flow control */ /* Always append functions hereafter!!! */ diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.c b/slsDetectorSoftware/eigerDetectorServer/FebControl.c index a07d6b2fbb..e9ee781f35 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.c +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.c @@ -1968,3 +1968,22 @@ int Feb_Control_PrintCorrectedValues(){ return 1; } + +int Feb_Control_GetLeftFPGATemp(){ + unsigned int temperature=0; + Feb_Interface_ReadRegister(Module_GetTopLeftAddress (&modules[1]),FEB_REG_STATUS, &temperature); + temperature = temperature >> 16; + //division done in client to send int over network + return temperature; +} + +int Feb_Control_GetRightFPGATemp(){ + unsigned int temperature=0; + Feb_Interface_ReadRegister(Module_GetTopRightAddress (&modules[1]),FEB_REG_STATUS, &temperature); + temperature = temperature >> 16; + //division done in client to send int over network + return (int)temperature; +} + + + diff --git a/slsDetectorSoftware/eigerDetectorServer/FebControl.h b/slsDetectorSoftware/eigerDetectorServer/FebControl.h index cb87558ad5..62ba70a174 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebControl.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebControl.h @@ -192,4 +192,7 @@ int Feb_Control_GetModuleNumber(); void Feb_Control_SetRateCorrectionVariable(int activate_rate_correction); int Feb_Control_PrintCorrectedValues(); -#endif + int Feb_Control_GetLeftFPGATemp(); + int Feb_Control_GetRightFPGATemp(); + + #endif diff --git a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h index 1dbd97b599..dc88de3a10 100644 --- a/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h +++ b/slsDetectorSoftware/eigerDetectorServer/FebRegisterDefs.h @@ -149,3 +149,5 @@ #define FRAME_NUM_RESET_OFFSET 0xA0 +//temp so far +#define FEB_REG_STATUS 0xa diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.1.0.14.0 b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.1.0.14.1 similarity index 56% rename from slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.1.0.14.0 rename to slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServerv2.1.0.14.1 index 2060a26d530118f4b6ffac9926d498b52b516cda..6dce1aa1da668603efd332f21d15315d34710ff2 100755 GIT binary patch delta 52563 zcmc${eOy&l);NCl0Tr%@R|7;uxF8~L>IJbtLD5i;ii(QwZ&yV_MMXoy!tSNCut?F3 zZZs?$FNH-#qmEjZSlVD?6HVIK3{E)dGdf|>q?0!4{jIgnKKGt`(Rt?k{GQME`^V+% zm$lbkd+oK>UVH6*4uAjIxc^_q@<{nxpY2hLhV3hrWcW!^2Z_L63I0Of=%xN7Nv@UT zgd0%aNz}_we+cUNZ~Li-4SVkxW%YN^o2>GZl~!8lJyEWWIe5x@qPKN_lO*{DAZDXi zZHy#^J*1{<&O%>-B7F`z($dY6Y=5JB`H`-Z<3@CEnOx_y|i?NB!z0}DoN_CrR|awuBGcF z$)u$ZNm2x+t-$uzj!ROcR&h#_`e^C1k`$$-&q-2WE!`|h{j~IDNs7_Zt&$Y0rEf@5 zoR+>LN%126y0;`HXlXy_zrU6VkfZ@xI#iMdYUwCRGHdAsNlMhx$&!?$rPCy7ke1Gr zq+~6fB}s#|bdDrF%+nPSj<#YS`L%K)1<*bxB_GABa+I}Ee$5uIC9IVntOhN1#!+k$OriDVpZGkOD#sM65dgdKii(fi7W{$*dq@D`)D^BBLmjndn&}rO*Cx;czlk09Ri-T7S4mI#Jt^;Rr5Rnq zdERqDp8;dQyips;K(CTn0CP(rfR_x_f z1Vh+K&vpq3sl0~OI11=6G)*$fW(&s_vBN(ot}@nH`wB5bt#@%}uOeG#yP3CmMasr9 zv-Cy`&G4Tt!((o@So*<3zL-4gAM&u>oM@5=Z)or;+8$@;NJ@rFK8R?0ygeDaOtg&k z(O^mdhK6QHzU=y=6HdGx5TShHie`R>17Qr|ve#Q`aR|$m@Z`7t#OHxXMBo%i;PV8D&4pMCkmyBXiY6q6F2~f9N zk-Vy$byZTf;!|vb%*u1%#!0yyiHm%f~I!wVjY)J>?;T0bd{wU=4LcU4l8zBD@l`FRQ$v~p2!6$&N* zfKB8MCva#7`Nav;9Fjp3dPU3ouhN`eN%9MqXlbwM)87b2s#BJ|;iHP< z3tu1tv*o}o{0f3f{PQPSM6FXx#x7dHorUOBpJcz*J_{D_&0= zL#)6hb%S~)$woLGYa+K~g(oxA3C*yx5odkQuFqYwQ&wKokOG+TbhNDBugb5uM1d$j?pAJ%9cva94Q>^&W6MSPS@-hs=R|pvd-+5Sk6?~Q&?Jpe zKX>>kF^I>yJ)YY>-H4~&5gl-qcX48dNtAQ*;3}UrSCpggpu;n#N|d9q)s=U4!`=4D9>`0TXF8!XozxL6s)z<t{PM=gM%B`q= zFyg98(V)t`LG>w7UhQ6P&lBZ#_wrf|zSh0GP9wC=z1&*gDiED=uQ*gE${XFwk7_JE z=U)DvhUbEN`EgM$>xC2s{9zf#Z;h8T+#57VqT^=w@{ck^d5e4bsd7<%*}eR?rJ}se zz5L7tQGNrpqO(z=;+A`Z-&ct8JMQI8XVr2dxtE`766N0RC6GLb}T9OPpJ2v`NO1#4gxD43W`%|oIMZ^oz#Qa-r+Ln39U*)(K%NcK#%bOm}g z*f3A+0;y2+bP8Xzg9%)a}J3qx8!JqGFPs1`;>I1+P z2vECNw$sgDe?>x#z%DCjUD~j591Vdcd^T`*Ve7=vU|AD_nx*XO)Zt!tw3UfdQhnf- z;x7D1FxM0b=Xrw{0u-H;OQb%&aVnQ3MERztR!dl-g!*eAMS>=?eZV>Y08>@dwA z9%gk8CX-`#^Yk9ut@$wE=|$=4WwR|?0u&pxdZ5@`GF>1+vqa2q z%8q$Ki?XZlPiJm77*ruRa-jolUXBrarDUKRre^XcEK9cl16I5l<8lrcgGVD76t6|^ z>UxKb?c^$2{%DZAID*zb3O-;OZGJQ|X>$DokZ_L*I^p%2i~!Qz)SMZVG`aEq%@*Aj zwDEdfv&po2K^WbY$$5Jyb7Y9-Nq&AEXQ2c(F2(A$Jd+wnEkb4&j_OA~pvKW*^u1BN zNeQIF>CdBj$e&DuX&!1`wc@iO(R7xs%o!rl3#)$2g5!gQn!9bH=GUXFGu#*y-o#rtAShPRpccPa18^ z4hwk@d#2CYF}X+Y5oiy929qM4-dVh?7gsk_-|hWC7Lq4(na-QcNot+E+%TmOX-JI) zk}Oj~%>ZG<>R0;5>m`9iY%uT3-w{Vd?@LWW!V#WTkG9I1&Bm zt2yy*=)j7PnHEEq(1K|pajMxmp81?)Zty1erfJg$pyu1kde9$U?m_oVS8!~X zr^DFVT-=%wB2Vg1TSfu5X1H_fjkPp-X7a?TD62+2rRu(PA_|p{MS{Qy>}vSrKX+3>7Qr0vv~Hi{U;Q^(5DDRVEb^% zxP1ZgP)dPDU=^q4LU*Aq%ai3x8)n1aOzp)noA+Xw^NeAt&Dl%A`f2poGJiU0Zn%Cj z-IUqWTt84)$Hh|fypW)&Z9J9*6IIeri)Br1qn3F?+`D*;cAnqWFtsXOlU3XDkT3-U zxHH{n)g7d}0*f>;!B|ZyYhU<+md^iAaF0P-V;0OhiwIoI8Z(M+TEG>^$MU2h$Ir>3 zGRtxu**g}#?Uu_^6zRQXI3LJ+>lO&!?3H2!`G^Eo;T*SB7z7(4FQW*+2SfZXal~GN zvBzLq^w>bk7X5iZP8w!ils!61pz$;;5P*2}7_D9$?P+&~iqPi8(GQ%fN7HF&ZakSq zmE35#Y#uFu%oSRd`y|Rs@RCS5r)&TWl>%XX)m6JaApByyhTMWq&tW-idILF&VqC&ktF+|6rRIyF^?$!{N~Q7ih9muU4=cUs2Mk2VoKaP%)gDIk=gG8&f0)R$l;O`JR0@`KztF|&tUw~k(z87h&q<^pz}++(5|b1Hk?G2SEf}nNPk+iD#?Qu|3^;petck(eSkZ-%sEyClan-f zbw9G3W~_D}`5P-~!K7aFyTV}l>gssI48C&n*)XjdPs0lWVCFn#!}go?o}CWf=QcR> zx5L*2gY%ZMCM@!eYp|Vxz?+l+qNDH;*z|%>yO5Lcw5bE3Er|lYM&(Gx zA>0spCEum3Yr=bPL3|+E&KRp%a<`!V$rCs|{KN#9kiB*&nLx|d_9K1UiQ#LvY0KIm zdC&&hQV6V4x!oI9odeS}rv!*Fxri9_5}o^azldW%1P}l5rLamWh8|&!a_to8efX3# zxgDQY7Y38bw6rkX#D^u=ge#u6*^Ny#^qaLkAQq3^k-rpU}d{=V$W^Cx(_X9z8mLlz6BGRzF?dKtPu#?%4zC;T)^zhxF zitPR?w0uLazS|)e19exl;ea5Qf(GAWT}2u0*~_pF=&Utj?A2kvd>2c;-GjX_|n=Z!(1z( z>b$6KJMJ|fxF9ABrhZR_g~Trb@^}ay27s2Ed!dT-)z)aa(YT6{)C%nv26> zWzH@hkmNbmxCl+l6=}03b6hpF4L8`gA#&Aq+FIPNKNq}`;Zh7PwZK4_F>Z27ImK?e zR0W1`V^CadPnaffR${xs(*#dnct*jKz!OeNVs66|?03wM)V6WF^?)}0sx^x3B18z3 z?A3SO>teV<0ugZV_i6`^y7QtP7@1f0dej{gb)a>xcqnyP3P{9A0J{h84)~E#~dU=bWJQLE1BAo&0W3;j)JYq8lKey%& zG?(aLJ^GB&DgWju?})vIGmd0a!ht@MCw71qJ$tt0bX#0BJaWz{G7;}@C2!e zybe#0n#e2g1Zj!92v3lf$n&)7*#%^T=emgl?7GE=ZrkJo@r%k$VGp=)k9I8 zYjsaG>Ge)@K($e(cWJ}(A#Uy)Jr5pB01bYw2RQ)F(`vHUbG!}DtsrA*!t-H6aze59 z_O>qkB9?P)lGgF{2Q@}Nez8sOA@Atfj)Lt!atiJ|--Ddixk`P>F;7ZV&IkKW5c`+_ zTD=M47@_GVi~uQsd{3)&rcO*KKOIdpsr7o+;pExAfwc!FO7RN4`EMt1TV9X2ZFqc( zTQJQ-H3Jpgin==(+j?_;HoXueZ~f8f6UT}6;us(-cwsIN^whknz?Pz?ln@Zyi zXA|?bDV}_D(G>Y0zV$%C0h$W8)23}fhS@H+rfu7Fl|=*OEeqTAza^FTKRe3Vzwy(w zEWlGDj5A-o6HT*G0s~yz@xZZ~M1fi5FlNi_OvNh@S8UZph?5IizI`A8z1;3TInS$l z*>bWIeeC_N^7E&G4u#I$VVLa69yIYmYzaUG(QYs( zv|&fcfakb@#$tEDeh!sd>kgJGj42g#qds(^)sDSrSnw!DJ44aHHR_Hd+<#8pL)!r! z?TCll)BT#RKc$?W+|kpz`5NeBFqXTMy;+*^Hzj8_Opt$87WAGw?iRrphA1$+2`zINAn z^fFsym|dN25@G7>$`IMVFU_wECmU&5%5}y7sJo3)LD8d)`^6z)~ZjoeFD>Mmd-W&Nq3Gt1k!LNi(oGbCTpj#+elgGg(T^=TFLHPEuSv5?44j*^-5O=ywtriBbG4^+BOLH1E zoHXIpkdRJe)nZSR)oC)dygKq>=YfYGOcO>SaS0FL*sH)RmeyZ%S{fJ)p4&jZAGJ*n ziQ8~Ra1rmHqJc%j5(B+?NY@59v#aidL8@x^6=lO3npYj(VKSnDBg8R0P&c=fV?gm! zXDd)Hy6!1|ZnKkv4fJ00181j$FHQN?f>C_Wi!Lch6)qGYm2>SlY`s6GZri;#Vtspq z?{%J<-|Rtu`qglGZWB%3A3fV^nwy+k=1C>P!J~s-(lfvvT@L5Hxo{z{FYKtfi|%#! z0hqfuWnFXGwV)zgp=*BAorUW@qvhknv`5n^_AJ9ZG}j{V%5OfH=pB0xaJD>D zID1?kt*RML7SiULcruv!ycQ2J!DRS*ky>6G5`-J}{hooL3miKgrT?RzaqZv|Rj z3mNU$sg7)3Fmc^HJLpB6KvtLwT3%}-F|Up52VKvm}Rfvb^y2*6#f>(M_QH5hBnmihUL zeET+z3T;S6m4xaHty}?Ayl^tV7@*eB%D2M%V+28KTMeZn{@b?oihS!B&3-%5u!`t+ zek13fO9zp4+xf}2b^|_5=vsjmz0jf2;w!LbJ^oFgO}>>*z2AWg(rq;1ov@J$V+9kl z)bY(nyJ&WLaq`cj^yTdgi~RFpu^6^@|J(xXST)YgsX#KK5=v1jbK-0YR{st74UA*IdEvh{vqP zREVpnH48FR!b!Hf5%}pMh*4CcMM@Gd3c$?tfH@{$(ANTK;CS*pV0H?aT{=9Ljf-dN zu2IWBtr0+tIz$B?h$aY_Uvx0}9x&kSF569;e;qdQeo}KI5u2K&1=;Qu)0RTn*2VPHh${uYwIFOv7#zXz^ zFy)Z@+0Bx5H22Udye*S*biHAL4IA=lYul#Ks>40V7TRKQJ4i!Yp7tC6Ant}c?-i+T z_~MJ6&>jaEV6x>O*3s(oPTA7JLyLfrBmKY(R>Sd$^}SARfucoVZI3+dq_WaUW%js* zwCAxP@FqQ|Y~OE4YmFwp;J2y{p1L1Wg&a=O9$rubLW=7s4|4!mTFGz`OyUmN{l>gt z&3#E;FbYV1lxm@m1&5q8<4J<$eGE8xSp4=h%YUEe;?)3o-n@1@^m&6}XFQYMIqq** z(B$j_f*<_Gthk)7Z9rA?Bd+HNKgtY^K=>Z8MV7B^*E|id;dt6Z6e$yZF)jLno3{I{ zuU&#UV!ps$3#8fQ(ej)R+L1qJr;B`UFjZ5(el9hh=;*Q55BS?OF*B|{)z}BW{|K|C z>+)~=c$c%sw(D|s1jMB#(QnRl<10a;$>QVW8{VJFZ5Y}<4tbxcxdNQm#5kP3IjXBX zb8x%;!OSi^9@cWQ2e}0C#YuGAZ^I3i7-xqCA3Z^)QFEiahBZDd_y3GGH4Z}qY&v{;+|ICY(FO8+QPDdInmULL{ z#AT_TUUJK1n(;}m4zm<#P6V}lGBU}s2{h%w9;n>1@qu2$l=JO8%_(njPjkvk;2eyn zlRoNUupD&`ui&Hg@{}&^nPw$7T|66zUYG~Vvey91qUCIG;LfZ!SS~m*8b6&%zV>7o zY&#>RB81U-j{irC_@8f6<#*u(E(JD)s7ooAlemd}aXHtl4C>GQ_c9aU-T>Sv=-S{* z+s*_TEG`9UnY5UmI2%Bg{qGa~^%i>cvv5-5N%Z)`{~6KaU*d6e>+c5{7Wz3kj28hq zeI5W_vxivX=Kk%^{al`|r;GHUV7UB8+^3_&iA#}@U${sfAdiJDxktcv>@-mPbatjA z=}y0F>StJJN_Ug#^B^8y^oZyn#wlKOlqz5l9zNxghdhIF^0`a2>5Gsd3o}6tf=d>t zFKOWhY~$#u;546m>;I1+ox4tR{?HG06vclSi2L$C^oqSEd;#3bWVrU_CXB&>IbWFP z99!ETLV~{B47?JSeqn>N%JgMO$d{sp$Ch3Gavsh3GSaZ{mJ{0cWyp{}+*I*HxP;xzL1{#vfbgV{D-|-GocM=+0~_4zaNFWh;gIVdC1=b0sx~XfX(R1 zK086;=;!D985ZHNxl6O-{Av*Eg7ZNki?V=1Bg_&P9oH;<0pWJdr1Psa(U0PNEbYwW z0X;tY8TI?B7pQs0a|+F#($TOe-^H`9LgdeH;$2Dk(Jl9p{YdEslILMzvU!;n0?PYi z#s2m3f#lh(r_lXC{pJVv7J)ehP2!@N)p4N{c7kbJfZQynB=*0{l_cyiqOvdU*BxB;n%W}+=}EdB6;(B9@hQe6 z(YeR(4Wu;;-DCOWQ;72R?F(i8Y8hUI=^F@n*#m|^83Z@u(vk91c2AB+r{P9@Y^w)9Y0;Va_gjq--%Hp#JJozl| zk7f2+L;MHq3KC3_|E9Nah`*ntD@Pa~z;aZ@Em zJYby;KyuBN+$_M?7v_iWKOkQKdF)GrukwJeROF9t>fjq7e-3k6sexfnUa3As&X9epAH7v2K{QPhh&X5Mn)q5c7xBTHr zV6FlcMi&!5T%sX&4ei6RwDxLbuT7;ft=zsUt*b(oh9U)^ARtZ0t|K;7Mw_p_ ziZ-dfjmTscu*T>0A zD{1rf(elzd8udLq8fZQ~&e22oxJvJQKgQY#UOs5Hg_Ba(&HANx_z4=UV6G2~h%#}4 zrbtO6aJoVzudBkkRx8r4mtmR6mqVUk9~60;AS?x#Q>rn?cEUV6_ z?YYo6$v-cJk3nsi%NxEkSl3WdX?+Lo)=spFT?% z^H3dQz}@(HirjYbVCJnSNmyQ)im*;J7Xe3AHL7Xz?d9_KUsL55SgI}TcuxYSCBOL6 zL%)EhlFRc49lvxU;NOUzqV&Df&^uGQ=fNq)8xwQ{6j0lpiCyx}@;P}G)(iOn{qvn( z^0H!j>(0aSvN~$MI}w>_yBi{B9!5C{NpQYZwKCl%ZJa-~2;_36LNYgUF-i#JV&p{z zFQdkL5bwxkww@$_X58y2XZiw2c;Y_owJhu6KNndyeajCh`Tm$h-qh+)Q}~{dJUW3^ z-i!9nYt_aB?wy66y$ALrm$u#;NnWP|9nZ`50(#W(oP71t&I~d@UKX{pfJ`JcJ5P{s z|FC&{5d<|;$jD1OTSDhyrrnT=e<1Lm#NM!%Noh}*9LkoWVWhHe>3Tn3u z-E4l%30HaUjmdWQJRyr^do^o?rvCP79h<9}Z6FDz)i=6heOoB$!4}9QJZ{->MJnYN zaa|6}{_~3T%r$5X%g(YJifji{Tn|y0e+04*WO)00IV{opPs1JNHM$Opamr!K9IUom zo&Yc`+=~o~T%N58)&4FhlVFm3IEb{oQZ4`0O_u#@(uaNCix}9(P|_LY6YS{ny16+;XBy6O;0?6=24-#=u4xlfdd^#tU|#MQNm2LRyp>lKY4bE@j90eZ=O8GkjZh`S1N&R}-PuOkl@-$iqQ# zo7-uibZ0a3@rBm;-fXTfsO#M;h=uHBb9_lJ`R=={$d^3qpO06IM0a-yM{4TNyQ^B~ zs=4z4)P$33%w&MxVk6r3_OA$*543j7&p_U?4`&mY7_7*980}10m;45O(IbAO zUy%L&)7TV9%tLJu@F|u$@ugOgj=!Xn3bYX3FfQ>)7<(bmjLQ^QoBU=)-p#)8Bm0-F z1SflUDpX~Itf18phGnH0$|ImW1S}d$ z?7J?cpKLE;0sbV(y7H7FSFRK2QA9QLtx!Ji{^;3t;p#N1=vM{1(6cX~Oh4LU%nN6e zYcc2v>YohHsDbRXKN&3Bi`gB2GQ@usHw&tl%KB;_V=^*hJn?23MiNH9?-{}lb%hyQ zl_UBDw(Vkn>`MCi+tKaQy0W3OWOlY(0CHRn2)eH-ROFp^k?uhat7^wP&aY%mP;T7` zmgf9eO-^B-jI<)l%wt9DzN92mzP|*eaP_!M;>FQ0;5pL{}0PHjoZHPs>v>7Ie6P75gKFaLf z$T-7J+#kq1e+%;!hj}~O>QgMMJK1BX=;q9~LEcJN^1QVAvWtm3&Tt&2)i=OD&eoh} zMc%;&o@gqNp!}$=e76c;0GmeLTix=G5>Xxu<(qWy%Ygn!pxv0ld;>^ebOHa&n5uI- zw9TInxTdHZ+{l%Tx0f@YKoS|Y?=77^okbUx!+;K#_yWwP0P@I$n>vspq`_<{NLJ+S zAgu6pGjJZjA5U=#xTNoX`-yI-xcH|47d7VE`~(@8%r;Y6iWyqqp|D4Ao9-+1)%NQ*yJdDp}EGvQxk>9Ri)my+pTJT2_)X9pA z<_mpytt1&D!1Ll^W{f0%^0!0uR=ip&KYM`r#gH)fvW+YyhOCwCMphR?mg6%x7Wp!s zn2wB(g7wJ_yd<_g3ftZLqi{?nQAa+HCId+qJrz&0&M_q1qv(+s^0DT0K+R_jBuoA6S9_bpTes3dBWoB);H809*S?Hpn2EpD-lF5a zGYxyf%er!B8p@k><<2yeH|WZpX(+#d<>@BLdtq!xZNGV(!{RzR$k%?{H5cpnR@~`~ zs^W1Jfpt1kyDO25i?p|T6ko->Zmq0i`H8T#fDuQ0wILwrX(^9pQn=JauEC(*&5=oMbXSaLrXPrp4}FX#smb8GPS0 zuu!jM-z1YB@|s)hRx*i8FW|=%V5qzx-eLldf_t#mTX60cbcC^G37&hgZcxM81jLT@ zid?`J3?_p}0i%P-@R4izRt5$OtqQh?R`{h{4$U#!)`C4MxS|w}D}X2TyLJ>0}#HCz0MDh8#GsAACY2%qjkMBEhz-zoEy~{ zUx_S)7b?8NoeFs5&E$Ycql{ zCjmzFyrjoNb!`u*GxT^ew%1z%zRQ6b8}Imm@3b{<0&uOft#~l-LXAn_ex(THoVW)d z=kPk@Jv|9wmLcF)JO^g|(%Vp#FLINnU<| z58X^L&I*{j;PH-DkMoK=HfR`GAwS;8s)vyv^4O6h!$@b+rBIunJVjp0J|9kc1syb& z443?R$3l!bejGpEOkHu%xGMuXUfP$njZ+7hmO(MwHKetyZUn5Qg`3#f5hOY&ciq3i!yOZ` zootUs8HsorSl&p$v-s-=;px*GwerE_Tpmd#S_|(8p}nfei(`RHXxPE*=xyI(f>BnK zAM~LzUh%5sFc!3Zi|{rA*gmfoFfM+G3(EM}3Ve)(WbF0Y1QA$2gikbaW9WVt)G9CP zP#P{3hzbx9@5F{?a(PoWx~8iS#rkxUQBGO5j$fSC z2vUica#I%wf-LLI%$!L=`Yv24+7qz5Ld(~2w+q_hSsmEiMQn8@2{){ptDcc88q3N@ zf!M6eXZ47}a{WFi3RQkAEKyM`WItq*UWRp5DvE`l2^5@)UQuiAgP~4f=%8U(F^cr^ zU3X4kVB1E)@*##XZh_`W>xXe!#b6POz(V{!&^cZvCBg2L;1VL(wcbxfYdNncEM(*Y zZ57brUC)i3B3rtslvy_G@LmF=Sg&I<=TWc3-t7mtK2s%c0YBvgbg_Wuf=b?nZtU!6 z64!0L1xa)*#S2)cF(f`>{$YU*B=SxMSO_r3^KYw?x!$J83)s{#rhU>_>=)9MmNKlrhw~tg=J9Et7iswG^k;HT|209 zg@llK>`g^oteO-OIePtNPcYXq(2^+b$QygZ%7g@(rTq!To#gGwJ8?)GoEE3O~XThco&@^O``S>(VP|@W~AaHk}mf7$L<#i%oH<|SEyNc2R$b%Jm zCUZ;xeE^8yi7KXyi7KY*i7KXZ6WuW-Od@fyo}QxPD4a)#2ux9e3;lFvodgjzKwmXU zMSp6Niash^ML#oJMGu69_!n{YS1FtJfi`)kvel-o*=p0Q$!b&EWLMMfMMqt|=Iq2t z+Vu>ud2cjHVtuBN)zddfTu0=opMezcTX!I_!g6g0a5bI^A!+{o2W?3ezRCu(4rU8Z zbfRfP7P~ry#F44&p{Xz*b-P){R9GPE*0EgvoXkq$8CKWdrFYIQxm&5oQ}(gY$4NYU zXDA6~opVUId@>OAC75OAkcY@!R=tPxVvj?5_9=dQpcoF|ad8JOp;qVIiYzd%3S=QvygpXujk4}F+r1A&*+TUqFI@S0%LXq!&r zx@^$R>m+t$Ixq;N>B4j}5uY(LR8g2agT%$P7fNn%s-MIoW8vk?mL6 zUw+Q#mw znPMQYZjBZLQQyu?H0@6S;(bCT$$;wwD2P~@N3(YpkQv=zd4OWk9PHj`*29A4*~oG% zWV!ECm3-plQS7%CvMu735|n258GGuKXbmPglRdGJ3>x>;Eo2x7mU9iV9)P~#&;`Ze z+26qjC~?m$UAnC)mi5_h(eQ>^YrZS8eIo^1fBO@7f0^sx_D~@6T|`nl6vHHCvN4ND zyl-)aO4Ot5sYN8*x7em-_b(y}xz1V_ks%$5YZduX7QdJb^(}5t0Y_Q=bN z$#5bcoOz@MH6E+lKhrNfx?-M0Y^^L)n-Ww5Ml67O0A`ihBuI9+pimAmHguxS6M{2eloH^d{VNV@} z3D`!IC*mokED764!e>4=o8o#X7Z-y9J7z!UnD)3xe!;Nrdk*+-AqVN>#qIt4LDh#tKy^ z9$6@6CPX<@>Jyg zDbrMNyyMszR=-MhfQ}dFs2sdToaUfWb*Iv}Mn~n~-XhlA)DA8e;G9$@vsc%sR37EU zg34s}(;D&w8N^nsCH*=+U8l&&v3wb(U3>Lp&1=C08^nHEOI8@3zO2ZD=8bpU+Q%9m z2ZGC{u}zPIaF)fgdRVqY@3x=Lr`uExC9$6$Co^RG1(sb1Ug(Q!SY9C+;%kjjs}tFq zg=7*|-zg;HlI#~OzUnnUv>h0RggL;)LX+7GIli6N^Sr2sOL@KMt2Z9%XupsnbxIKj z|9=Fhr+FReK1_{cs_WAJvl~rP3Unar5$KS&FQco!g>;7y)O=L9o&U~heH!0 zkYOW8dzRJ?qULHl7>KPi&=#wHz(E_h6Q|YJ-i|OpYQs4Pq^AE7Qoxz(Ymzi#fYU92 z6Ez+7@K)UlGq7(AFSJ-;zdR5GldFZ$M60%@!csKg?yjeanPteN<47PF{)-K2Ef`QV zFD5{a?t^O@rB26n_1;jA{W$B{_US`S0WgS*DU_<|TDtt)_qz?#o1?bA)Um&d{Da<&X82I?)Ca82DpOq7lp)VH* zN&zW;MxgTFjL&qRcBd3M0q(r;|BP7lWFywgoa?U12a z^l}4W*$+>W@CjP;XU$Ml1I=@=Nvg?t{MPKGTn(?olswDb1a(T{d#Wg(J&P#kJVoNi z+M9EIy(L5=)J^od37n#MyqAeHt1+rM$Cs4e2Nq5OQQ9O{ zs<^(a;3*Qc9O2~laF$JFfC}X{OV{mX==M`xw<=D{rdohS5=~gAGG#2)O8toUh&0B=r7H(_uS^3_kn8WO`C8_6IUvZfs*nyrFccnDoDpmPLtJ%^V2 zy$c{KPEz$>po4Vzm;IsB&txJT2M^(!Iq(?8na*=<^NMijil4emwlZqGVJ zj_TX4O!}B_on2&p1oC7fLF~g4;wQhe25AlU%Xr0s-?4{LR9$CnCFGgN=Omo)6#QRX za-VDN8v9%Zbk&~~JgeSI>&68juV=}?zRw*} zSMWZ80u;b+$`$h z>cmfcyYJjO%aNSfiKgeX0Y>w&n_U7LIaajI8}GP1f#dDvLfjuK&C>Im()A+RJ+gx+ zuNUQ9%7WyGi>zKIW?KENH!J@a=|nED#!YyL(ZT{YLr5dj8D9o16XSoLYndWP1TxDO z*oay;llb&fU`9kYl~HmPbf(!BbXs@}1des|$WZ;jVwQr*GqJyIhGW0dY)p234gyK` z7#8y!8DK3fhN2}ZR)UHPdUYTt6^;*7tH!UxVVNDugnf0EA)J?h^X3%6dIwI4hR3e2 z6L^KSRF_b*7pgqybO5a0ADm}x&yk?$16nh_%8F(k1S-C)g6eav4X{EhzQaU$0pD`3 z_B|pb*u4cGlq|}OI$|5NG+3$Tjj=rT&xwTmWsiJ|mKXRVz`sg2C3g^)(+aVQv!(}Wrf zmOC3efU6;gSam5xU=Db*hEg~osy(Eex)hZNsPo%GA`@#5@qEJpZ&&9}=mkbdU+HC4 zD|@pATgW!qew?*!A-~3_{RK3qG0Y@`eS;_7kOfCShCTiwgg3T84E9Ab03sT{eUUs8 zy+u*cglPLEyrYKXbKdatabNJ+qsq`!UtlxK$TPlM#A4U;$hT!Ap1|ogGj1hA3|ksh zT)}~AjL*6i?z64|gR_-H8@Aj~D|@U#hNZFOZDfG&3nsNNh^^R0rgnKD3$yCF6~unG z4feFFzhFM)(ENp?0y2^F8~)#4D6^K6@Q4?#Dsm96k}6*;FM3113-Az>>P6T}2eA|7 zWN7~v#W(|(q*xv*9q(v9pqoz|D;SFx3)MaXS-#_BEHA>|DiEnb*+mK(Am0V!Y<*bQ9Ryx;3sx6L{~g3A+fA66FBhgW+YXQq zwv1KpfL&K15&8bCc?TR_zdAt;kw#Ide6=TLA}7Ac%@4%F6x%ma7F?XlfSXR>sdUF% zQ6RCt7Ijo*oX55k84!WV06WtCGo64osO!kv`&d0CK@;EJ;<+RN{tUpMsYtupEmvCK z@FC@POCR*pfraiSy}CJX-XRwgEr(lJMg>_V!?V7EObjY(-&Csmf(7h^lgqMnPjVEg zZYRs$3CarX^L9c2t!g)G*h&71dHXI9_%}CWcrzsASF^OX+lNatw=a-z$%H$lZ%*FD z0PN*Nm8BVs^dgt|y2=U}_#4+*8H1Si7TB@#XAL_C&#;$EG<1N*3?iEBe8E}TvV;Xx zBFqRKObWoH>0tV@oJt5wU18LyJ~b*BIi>1N*-=II zxrP#h;V9O!w|)H1=M@s&@o%6#|wY&nST}Z{^mss|zB-$7L8za~-MefL~uae>DKs3Bc zMvui^c!tD#RCk*#>OfyA1kk-;F!cKni~`v11A76{PO2tTxwKcq6u^|6ttN{MFWpKv zfh)cY@+tes5ZISJzK^7{CK(P^%-*C!JP+2D5;S^9A2@ghaMgU&cVFl5Z}{X$n}*@K zg|9FSWdprQN43@SrytNN6?bF$R#B{eAKa|jn$6nwfn31T?^h%wY-{$GSk)`p9S`9Q zXk?b8SAbxz)L4MY{1y3*%wp#KpnW5lvY*6-$bkq2*CQ}&AK)^%hg7U+*5?QYF$rF&U)gw zBHHo@1Po}1uI`Me8{8-mzoM&rOH}gBtQf*MUHwb&PmB|o`8BxwSA&ZhZ2i22OH`x! zZ#;%v1D=aSoOknxgI^XxdB!%Xhf||l#cKk9pHBa8dwfl>id*v+Yoa{*GNsLNDoBmV zy|a7#Jj|mrRlHT=B=^qjw*Yy^MAK1;l5TKJjyD1ogDW+_sn_}(4S>_2kh^2m0ZN=X z@5a}_G4ku=8N)U+*I06Q6w9h5ks;f102c4wfJ?9~AM3!B`$3s6E3GB(8MfI}_&Wf9 z0CaC#m74$8*Q~l8Z2S9lq%-@=0a9q#)+lNQv$=1OMZViqpN;&&UacpgD&Y5TkRn65 zQ3d=Zf)%_;;{3}KFwY$!a{C&qeG{x|d5#Km8^1a&JeG1n%IzgAp^nUsF0XU7yLA`f zaE@UZgh|%7RWqI{vfMG|P+V;ke$iN+j9h~V3xiO8Uy$i21?Whp-z@2x=bA}xk z)cjA|cl{cwsh`Ngmi}E>A1D5rAAS zgJizJek0vv?3fz+i65&wNc!~Nhf*TEy&E9KM9V|W-uAJ-CH*XIsF*Bi91z|m~qb--ab zCk85u4wJ~F3eH27gdgyG7Y|U1AJSFf|DivtpG_j!_lJqeT9K?xj6!}`a-VCfpm`N3 zP)Ee#jUF(T;wIThk12%BiCC=^e#wR}ke2A>y({A>XUlM9KHu z7MrUp8d>rY@OZulK{-Og!Yc4mO*4+w_Nr{*YaO|MU7fG*m$14c@B)Qy4ziEJ9Nhi4 zb5IT-fjXk^;>AOwLR$B+#-n5kPEY7D5@y(`?nWARnpx&C@YA3?&!fEj7~Cb?ndUil z?D#Qonvbq;2O9~1YkH3ab=(P8 zjsAX@8Y%2P-Y0!VdYVRIA1piV00(at;l4rrSUKJVc=pqpfOd2gzK`!?-r-#0FJjdM zF#G#tz?7PRbW?+b?Y670=LsdM3FS*i82^WB+~0!lkLcU0^?2W3Te}3_BT>h}mo@A> zuIl&SIB6b$XttgHg=O>lJEA@m>I0$Pq}G2Tvr??z6)fsa3b~B`NCekOY!99tuTK{BQBYq4 z^|)=s`g`maujiHsG&Kh5S3*5{dQks~H#46kVUfEEMf(J(AI$44r@^80`i!R~=%?T$ zjISn`Rh$HSRfAuGKo3gZG&;j`t|HBc!P=^6d zu*84;LMRr0RSVlBns!x!!WvzM;jgEKJQS8d8v%0^VBEiiKrUUkv1O-7g#WGz)GU5M zko@&67WFY%5pf%F=;%7`PS;-}SpCN^m2a`LACpNFxMG1R@e-Fbkg5iEsxD2w4^_?W zscPB4@=k%I?mF%w>Qd^F%2TAf98wbsEDQy+!#}wSLlfHoVDYI>z^jI5t9S-dP9e?nSn?V2c1Pw7X~M3a zflD9&Q~oJzq~KZmDNe1Co&A(7H?U9?1%>=+@{x?+0WN=*A!Gw&_m5kc&+lRNWpj09 zfc*Ecg0fBNCRlW?u}YTzdsyaJEx^xXWxpp+cVuT3^3~VO_&L15tGPPouQU7S76E_K=R1DGK?6 zFKhXdj2>2*4L}e{^GZa4bq0sY7n5DiO=X^72nhBUsn7weRF!3r-ppgV%veKwe4q$y z;TNNr?OXE5WQ3@NJ&>%B&%eMSqe}5*s7gvk42h=7L!49|^{M4iAArX%`2_Qif0HK7 zTy6p!D_O#M(yz-()G|&mX`0L|=fMJ3HbM0VtoS_nyHHI%p z+6!jnw39)WK(Zbe5*8 z<4j4jo$AJp{)LQOUXzR>3#Zelq1tMjtTOHsR0Qvm;o7UoH5tI@VApQ(lkNARBUv|p zDowzQlK7fr_<{#)6K;`d?6YrRn@|I9`F#U|QXohAg|MjTZp~ZWW#LXmQ@;2<=DiVnRXZQW@;CTtBa2g+^36DT^DJhi!`;15xk3#8pX2< zQ06Lye6$SB;;^8a1pFAi_}9rA|I*mGZ^_8%yQ>v)5?vAq;_YtcUGYyTiZ)~1*1`m| zktIt-8UN^HO&TwYb}wW3m*EZVlN~rd6)qd*5MB%6ubF5Xi}Q+Q7u5dupgY3pLvHdk zx6?J*coUZkIo^Im8b-VNE9v(DSmt|$1p3#gnx+m)VF_1Iz}?GcULkQq8t_^Mnj4tb zJ!-u=t=!~br?!qYiu=ar#Mk2;cP7*N@)Z1UOV%1bM%dG+O;p|BV}vq9iKuP5F}lHd zpdN*y0Iz8nH9mmCI?1vbY7{q~phB~a|3xCY?`hD4ANCHQ03X8M;lD_bbkl4>Z&Y+%AI(WG`zni2wCZ-Z4S>p1`Jp=L@FcURph^sxM43>DCC3NFjrb% z^^m{DnFOZ3WSLu=_QoaVDp?d=ldZwqd}|U?@9+2}u==ZL_>x)6RS2lmWU%0C5W{?# z2Y=KZ`tcDQkFciv6F#iq8hU;TtGGr+2EE*-kmD#=8nL$&^8Q`cdW}Sf)MS(l*Iv1B znABzYy)S@iM)(R#8q51Td0MWCVddB1p1{4olVE>$s#*D6*g1l+$^H&DsPHu2gE+t^ z-;p%z-Mf_x>sSTTdTbw4S|OTJlZL&e#!7@W^du1B|A2I5Z?=+eMIT9?=$o#qwyfy^@NrxQzd2#o59sD5uq+~PVB3Eny}MW8_9fV5$_{_Q8h$|bWw18>OlGDw z^tlyQ*#^!^RSIipBYir&HQw=KU*>m%gt3l4l2b^{*&o5(^cbwqKR6XEO*{+!L6&x} z%60Ga*9X|ue;`xb`kc>x^%Dukj*tI@9ow+uNcmmxyKj(J;;N29a09}P{C}ys{}&Zf z&ttk~OBMLt@AhO(H^|#TRrSzmG7c1FKn*^;bC;QKk|FH(H%Y+#0d})nH_2LSO@UYm zxnR2luO<%#NtfsAiY{NQ);s+ki%x(o?ykt&x9{Tu;CkgO}>XOQsmJ&UjTJ} zk7}~iwl_=_9P9lpBE&(#q(SKpTr!qYQ#l_{*~XEJViO|CFG!Mskj`8))okhj)g z8OW~q7E4VY&biCsdF#x5Mw^=gwiCCfpm}%9>437Yw`-Vq~IiuXdBW|Wit#2P5$!Di-lPBexx!ljPy0w{$V(0R+E)G`x ztT#?0k5WxeKPyK!{wj^%9;VUe;djl|uRr4*e_6-*$}avwx(%yQT_RNia`-yn?u_Ml zIAb}$_!!mkdZV}McBi|v)MhDt0cWkN^En=z_EmEy$k!nSYR4ZC^1gt0{WC^=0%Uh#sEWpcqAmmYe zH&~@z{;SgBT~P|zcbipu$>7JhccvQ2B4H$p7#PX1N7i}EXFAKq;3FAE*}sF_+3!ep zp#0~DNb-?{Sb4QCX*^PuB!Bdf{3jn~87+^NKdxc5qvhx1ePzr%MqU*8afFRPP}s-o zwUh|SIMF7VjNW~&8l?d?qdcb4C@Wb<4vmqg6Ki9hJ!udw|-sjIL6%b_kj)r z;0N;Wp8&rU_+`Q`8-8=)mj}N>_}SnGg!@;*&knzO_}zgY5`2ecbH~fr83Z}_ZI#@^6I_`}u@c4O_dFKB+c+dI==R2vL z*B(*k$b|-&ol+pS-LC@5fQHheM~*L%cgX(B%8c@|3iwsQ&wgZXp8Tntx(DW|3g&ok zk>lR0b6vkza$ISBxt6XvvS5XrVYb#f9P5rd9P44NTbHLkpYU_#u?~M&#_KDgPWxp$ z98cLCjwkcg-&3%se9A}sg5jyzB*x}d)mD@7K^QbG2b-W(S zpuXH&_cJ;im3QD*rT+F5Ivjg|Q2q;sr9F|vNf{`DB=Um`MH9QL(j-oPnZh{d3JOKhr(%=arEUAKL zi^K6uGd!WgX915494O0!r}_VD>sr9-Dz5d+?8AWoNrpE80*6P!BN$H-jCr7v1RJb; zN)&BWYS3VfSBw~m&25R$N|iQI(Gn+DNhHZhM8zvw?4g!Mv{BK-lvwm~ZB%SfiDE=e zH7ZK~wf8#Vv|so4?QiCv^_Vqlt$FOddEjL)=xWo%L`(M~RJKk`Y$JxYiHV1xSYbrI zV*H27ER>xn7fnp;twC8jF|jWnW#z=gBUz?=hsubr9uxSbWZZO7nLjbHuGMVap|ax+ z;LlICp@}YZBM{vU<)&|kTAEu1I7;ofG;WxFTMo(*YQW{ijbZ#$nEah;!KyxJ!pQ9l z>@pT{!$|O#*qn>na?nQJDGF*UoS0}B0v_i!7%0o&oj%jKQ)S}?(cn(CGB*XSxb2HH z4NOejPn?0a)u@laXI@kCu)0dN8sEbzdsQO%t0$#Y!^Fg{8sOfbww8&B-K3=_sI47s z@QgSW)YdaGv8Uanw85dR<67+~#9fEGM_ap^=r-kTYPKrrF?DTfq1xMMy4ut)&s|%g z)!ItjRk+vTuEt%1dlPPK=4+d9W6rL{oL$?B+lRXYcPH*Hf9)>imTFg*soSmYRv{xM zVvkBy?q)NG%Fsk}px&KFk7gMsx^;O8QWz6*D)TDMK`Q5MHy=|uzsp4IMY*8g%%O5|tGSTM9%-N^zQ6;11kNZ@5c*uyxnBeSe|C-0t@0DqN zRF%4&R&(M}b-ml&tT9^uRgbACi-Fnjgu2rmng~Lp|NAFYip9Wqo>I4jhc;^X17Dc# zW1V@QsA%(Qr;6~e?@|)XHiOydS3g#vy=K6#j5{n$tFR9LE!}Fj438Ml@T3qCubH79 zwJ*xmhaY`_k(ZNVBAJ0_)u&fZ?LtC^JSp?Fnp%Xa>sh;+PpywpRcBFk7gZxWiDAgD zR#Ej$yXvLt->5omJMrFUx7L`MJ?ancs9H^dJldn4aYrF*P{*I!{oEbZ1{>PVz57*y zJE|A;K77el-ppt?GscA_VkuO)H%oj!R(pk*F<(q40`3$uv0q)_j_F5z%v|)GDs;yp z-H;{CLn`!Das^b3zePR2J15q&nk%Bb_qOV6v#Zl}?I!3)F@4?oTTN6drdrW8|o zNNqE74yXusJaQYUR(L>to*9o0;=3_Rzo4;pl2zhKA<`qss(4ruKWJ9Hh@m84xCzZ> zyGJ2FWg z>eh}-QY5w7k(oJ4RXZ|Cy~JQgCaIRHc4U(5fZCBsSx3BfWRe=p8GS0nJ!31z*J3X2 zQxCb*7Qv+LW~@&g4Ah^0Mcv^}!`x3>XMXsqI@_JLUDFi1>s8`$>Z=c`^_iZ;D0El@ z=d?`UxM7Wu_yIprD#YBw(Gc#y-DQp+RIA*cK}~bB=n$gBb@yxPdX-*kZhlQAyFCcK zXUsIerdEZgBSrHn@sr%=o(@Z??0>(ai@H}{8-gY58m;MKX z?sDf<5!wHzBPvW2ZUp((`2&ub2+m zf6Z|lC@V5ACKBCp!0p_kx)b-&jTkvRGCd9&ggN?uw6$0s4{0}+&0G;#HYjRJh z74DToVDp#_C)9j*Nhyi=A3LE^J=h@quTHc26?PMUYn1h>qD^C6tX*mJ7bI9$NUYud zdlRh!OGRxmH+ZZ?{_m2lrzMtE|5G!qYb7m%s4VecoMt6T72o6sQ>Vm2=1ItXa*2uU@5{DUNK8=w)LbjZ6`ogRWy-6qpLv>0%^6mzDO_M( z;(zcAYp0?_U*ffDC34f>InSy>UJfv`&t~?6d9I=?tUk+{=~By!{96`Nr^`G1=(Iv2 zdj9dH)+&i``7b^PDi9z4Gv``Av}l`^%dPL>G9y=5%jnopyuw;S$A*R#)ruCSW5ngf>^`k;uhM!9(+KzFdc8r@* z(A+z_h1%I|Vuw-R)r22YZ!(2;y&3gpQ)Sn;qrTm2wd<{@x0)`y-i3OXIZE~2TZP)a z)wteAeNVqod;0O^i0UJ#kC<|*`@BN=yrz!odmHV#kLv9?cKy)%7JioAYfjqbk4(x3 zz>gSHOy$@OrkcvB_)tJ)ag*tx^87wCOy!jsCh|j+1JV>w`QCk|!Y+52MwIU3B|_v1 z)A=F#i$;CURc7!*>&<%j36~{AB$dcV_{qjo9SmPNc$$OZF9%PzF%FN6HREQ+n9tB> z?ZUEY>%*dI<5tEoHePG(vQOSHAl6}kBXI%8IT+4#a6ID?#t9CFQ*nVm(ZO)6gJ(Fn z9bZI_TZc0oLoq4I&~zAP8wyN@o=Jw9hL5b&==OYIiS{Iv*J!KVYdSx&E?U0Jwu|Ml zEbp@W0VYSh5Ev*h4fL?H7U1}TGZ^qNaGNRm*t)v@o?>7Z_~2l9n^yNA7^iUqaA^?! zjkfk2Vhn%CN3`{5IdB=|VV`^k*cXKV4139+0s0ZpT|xL=VP=k6^XMl(%0{ija{it{ zPzAKXyH*B9VTTh<@RGIQ-|!EByG+>$D@~4?niE#)CB9Q&r3D?%w{~jF37*Fep7p4< z==n~BG5t*~e@RYngoof1>q}=-l_}B6#@}o4k1jI=z4gQWa9y#(=PH06m}B>Ypu3i7 z`MY-DZl+(Z#oHL9JCgBQEkAAmeKq4+?4bkLUHY7UT$|}23i>GHU%|-~^fuTDC%Ycd zG4cd?t(FzEYq@{KG=GZhxXlA^9pd(nw7AuauU7C!qZ#_tIy1c&RF(=U*K$i8wB$S7 zAvN~)?;V5N=qwQ!c1W|9cOweY#e5xFUR?_ukb6#xV-({~roX90KXSqq;QvrdPoHTU zgBA3p3f|jT0QORc-F*>K&rT`ES8JI|bI{9pqqd(ZRT1MRE$Qran!a1h5lX31rvE`( zd&_}2>h9OIT+;^J%=F{%-qdP@kKOP7T8q(EQ}Y=NOD)8>IQ*eA5Z3WYMWG(xq98m6 zcy$n7q~%{?Acx)*lw4#W>_c zm_IBL8R5@DhvSZdu(=pvHw4&~VHm--O5if4SD=HOAo?v@{I&%0iA=B4@>Y)-`rJxO zKY;n<k`Gqw%!`A>l zHfzeYFq7m6WByI4(Q;#h>HGrSR-u`PH|0-S-b7-Y2vgpHSi2dcZkKnUz1Nv;;abak ziI3wLo`X?V81G5s$6goOx!dsdXs-;ycVlg%#BOln8UB!#x(Dt(<(MCiS$d=nbWYUp zr?h-N5yM-@^aJpg5A1vD+>3Qf4l@3cmZhcm?rWVnuNhK-Zrb1{Qp4kp_yZ>3 zNnkIFy#acGY5s?my8Oi_SgQKMm_7^IfQA{UTtVuaP%vadVgPercsG8%Hyn8Tq)Dw*!g>7JFGsMP_sMM7}}G z8@lJ!Jo0TVK0IogzqC^4@1fyv_Dpqau@PYjYjgBWjiRqZq!_M3c1=yeF4AI#(0%$L zw6YhbuEZ(`4$;D5tF<_Jz<9p0(&}r_Yauu9)Z&X0V4l-cJGJ##7%6w0HWf)aKuK22 z{0EU_`M~VNssFF#V>yu5O#d8C?wzDhi^dudl=Rc)Xkqq$Wu=o5t|~`p8fC6GNazl2 zJr1STh-1VwymQ-I5JcaGPDm*mfj?O(e{2bkImRs?+%t)af_DIPZ`fQ7Jk(N zzkcuymQH$~6w<}|-`4VA8TvcG{9_12k7)+~wZ0&GqcSmWiYQN#sI!6lfcfYYwOY&Z zPT0w59(Ajh7ELOij8S;0R5Hr)I9Epf7V^bLe~UHMhw%pd8MPnnEkXE2;KCq`HSzOi z;3~)7s1GoG5`lU8M4g16gEBQb0$ZjAz0={3p08zX6L1IPQemF>){3q_3KMd;ZG#qv zVS{2HM{m}$rx;`7(=gb&n`#^&!8@J}xJLgr50O!7#VlC&vS!&2p6myvt$LkP05910g z+bC$wjDM+RS}!msM+}l-4`DVm<_Qdhg33XRc@~(Qr7$_*)R>p`rQ#E0lU2zcKe4~S^gab#%>4IYy%{x~(39Z{mU~9aD={F+_QYbDxyozCz*oP5_<9@% z$GNm<-Hz^fIf;vR-dlzFn4X3m&I^8yP#jKn|5pUPJgef)*K%J0Fgrf(Qe-Llg&i4p zo0eT$K_7PPjk`;)kS8`xrdZsAc<%@UWD$3`Plr4+L_3VLEXDO{SgynRg+cZyLb2|z%W0~*ITHa57=D5X=!R(?S zz29j0c^mQ}%i&K5*J1#Elbo;#$y(BbQs4xXFdGL{xFPVUkg!-RbRj;KVBq*Cyo8fm4lwx>C-HhE|-Wbsjk{KSGrQ?)1Q(% zO@3O7X5@BY$4Pu%%WUMVYGHBgIKFkJLAvHf`_OwJCNnf_DmJ~O)@z2SXnH`o&Rpih z$*|Xvo$*I>T^l5GSc{HIsMyN%cQFF=ZR^AcW_$+z3R9z8sTsQwZ>-CT7Mi3~`XB_z z`H_^TWiQ?`fG^rd@gYA!KIt;Zyakx_lZ)|E zG<^WmWvi2aNzc$LNK<4%|NnX>^CRg~Ef=?#8q1Yde-hF>{gP*4o$G@Oc{xbNWB(qA ziAd;%`S>&;eZPvo8Nu_cC|X= zOU8Fe-_an30WB+sCS#oZ3Er?*nIe}fwf?OJv=2CPDN$PfbQE%pjL(1`@1&lT1zP^F z7ML?G1t;I#!@!*HDOd5Qye7wQ_-tbBjSZ6jnU;~Hj|ZM|r@qwkl>{-|qva(PFz6&3 zfaA}vkbELw;427RKQJ$#DQ{}|8xQ!|Qz<9$0N81~Aub#zJfrPT2l)8EB81s)a!j6cxw+d_04(EA-|_60hw z)TvtLuSTWa;ZM!d@=reSbBI$5@GN}>aq?c53Rf;Afi4#KiI!)c1ZD$MvBeCX0_Lfd zdbgH;Zh*o>=HHHI&vxKp#$6mbtl1Nv!JuBq+85}!QeUsvGQJD78Wwn8%k$O&moxrW zi}%NXc?4+~Q3|=9W1p6X4qAaZ3Df2Qmj~hVw77HAq(N!r7(gWGqmKTx`f5Dx=AdCU zH*CRXO*o(N16u6Iq91T^norA>16YW79ZRFd1nhyyo`&3*O9t~KNc%fx9eIowgEYKd zm>mnu1E}}7p@2GM22ZLMcYDww$J~Q=n!ZHPY1hPR;#sBT_r*c+z2L8N2IRr+b9*=F4K~KF$Ku7)BXF7QVTMof{*DadobdcxQl(GFY{0Zu zY+(9495(a8U**WB7vhCkDKHz5jze$Wfgp_cc=Y8I%OK8i^>~SUyOu{OW}U2HJ4Q?j zIHu`%BQP)ue2D2UXc+aW^FRGFEkjeV@5eG7`)j2a z^3-2FUKwQIF{Ggc3V7qsI15QeBjOD@<035wTY$?P1sT_9dEs_oo+TNZu)sh*U~tA= zz!WkbK*lyLUT%W^fc#!9n-0OilxR^;?<_JfqP%7Z6mSRcpl)BlxH87Hc%f)gK_*`C zhc-fgnKQ!7DLUkE9dSC-EYp6;PuP*qOs6_sj1jWrNElEO4gbS{%w>3>As4qg24v!a zs-6sTl0;-~L`a5!c|@65A@^nhdzt?cE$^X__!z&4x0B<*JfO^f8&Kv+Eg#h|AhF&N z$kJL|KryLgjJ-9UTsH2EFe_Wj)mtG@$MhB0oZ2Tl$hsIVCl9cJS?jdi&@IURGD1F)Gqj(I6H zEBqd7KU^MoZ#Fvt+ioxLphKUHZMa}HrWKEP_7z$@7zU3tGyQrkPf;hMjPKO)9|xen zm+`$?zUsmFB`4ABJy*V77SnD_U&s#s`8FRxkiMC1HSm46mH1!y@N^ zGy6+CXAJ`%aQL$mwU{vq%pu55*Rrra5;3V@hUHo;7{rK9GG3)c>`0IToS3$>V}xvQ zHhxOuiVEN&=Kncf-NC>>4rI3=hbXCeT4q0_l^}WcPez?)C@5j-QW1LkRy zP0#HR2)rxJJ^_Utz&zp{3EUinqkw6|0lHUKwcj zJyrxddm!g!?Ee`Ufjq?m^p+GJIX!}7T0ZLmy^`q@TD}es1-8%JaMbM!bX>WZc0QuB z2Xg0X`5ZzlvmE){Wm=^AKzed9%X813yEQ~lX3v##6Pa}YS%2|kV|3_O- zg5Sl@pt%o&W?yUoh!=Sw&mPEq9%scOFa!*Ei+%tHm>0JC+z~Bi7Eg{a7rRwT)1*M& z6x8j@=^!r|&r=kVe8=ECOvB6Cfjb$OYH@KJLfXXmS}l^gK`&=~Gfuyi=r7X7^&$@; zI1ekE#S2H?1K915M6#6yc0<^{fN|wLL%#!n4g}Mm)$({7_=gxD)FJ|OdtpO(@{S-R zCjmJmd3ZUv_jHI$z<@VB$^!;=S>7oKj7$p5i3Ua%2NcZ72ObN;MOuD0>hHzxImx)Q z#cem;uzv1YXL}c+cFiWLEjFv7UCB$%S|B!Dcm1068*jRG?pcfH71-#uYpQK@*1yme z2h-+z{rjR_y~%pzb+wn=aQ(X4AC#?JR({=0HU2B+x?T=V{=s$Eu32&O`q~XQSFZs} P>2*Jus)C+2Xg5vw*J1QC)>h-Pg9rGnD>|Rm}ixM4l z&`^;}hPzt0;cBIYrJELQxLIqPZn$f$ZPx0hySi!jch1Z__dfTcefRhMd_TY6AD3rd z&YU@O=FB-~&dl@R{K@?Hf1Ar<)l0Qo;^q#jN>EhzDM~Aaz+VOaLf-5reu|>jDr)i# zD1SiKt5BZ<_58Qx1E>aXfJ-tCu{PlDx(5R=&6(vAVR|0K%x<*j~_4EPgH&n6n zj%(@_rL|shOi_aM^hrf&qo*4crLCSmrzq|8^aUVYPhVD)_ImoNqIA&HHx#9#p1z|f zAu|1nKlC4}XMzN+&%XsVL!kI!;j{^mMYKbkWoO6eUtmXDCWnJw04eqV@DR zMX~7V97T!2v>n*~N}i&`>J{@9rJJ5!q9}2CdX=Jd*V9Fc(nC*gP?Q8cU8*RFdb(Uu zlJs5?z4T1IqV(3&#}uWHo<6B4Rz2OQC@FgSoT8-a=?jX|S5IG7 zlzw{ps-pDQ(>E05L7py;aa}74RQHt;C4_c6p#*Av+rPG-R`)rgT(|l-6lKV6EZY&J zDWsLA4qQs>TBk;hs(~Uiv~9+=v{*3@c9{JEM_ftdzQ(P=QSnvQfq$;*H@MmCZ@+jg zyLj-vCi|bm3I_h!<+5+OmX%ehBoB1$Yof!0lhl2Uv>zb;w{PqQfs6n8DMbtx>1RwApSm4qC{e^8O1 zU!ms5`qRcX5fN+?R^uq3!^jN9tXge|jh)!qHY{oT8F%e&Vuf1&qSk(ej@H#pyv1%M z8_TRp?P;3TcA5&0y!MIoc*h`2Hnxp;u(~P5q7dHD^?A#~Dk{VwwH@9}A285qT}RC&T3teOx}>U`ifKugY13+t;waJ< z*47H~+_VA_SZ%c^dj3{NElkU%izqHAlAzkcu{<4CkzBDCfMK{ouuRd*w!WA~n_^?% zcq!5m7%&EA+HsJEbf2L*QfNW*@GQ+uUZfUY zq$iV~QJ=U(wO*6e!dA4h7vzGdrT0j6&3{tzW8ICGI40_ErP?Gw@s414Q zOX%g^v2E8}2Tc(vmhtMtG^9`bgt4ojD16<#M+(=)LF-nyqE|1}*^?#M1JXYh%GXRs ztiYaIz#ha}_ z0!{p_Bg3k>${XvtyhDP5gs+}MZPtN9dZ7+0+oObl*7w(x`mT@`)%;d&@c}Ispet|FYbk>}pMYTpYD(QHgi5hYI0{eD z>HAMpE%iaugwrBhTR}@wqf8T;WVV*prGl8Br)Ar^(NEI5((t}B)Pr?&Ro~PO6VAgN zm_0MU;t;EfCULAPkp$AqeLEoBt-b^72kSB|W+gpwK%Ee2uC<_Ry?kJiELTLQdikI# zSzhm5o^?T%%OU9SLkeX1F)w&~;%KX^Xz;2?99<^M8@HQwd5I()5n`2n5K1K#EKI(<2v^scBcmmQq; zE6zo7lO%BZ-5MbIbZO>xx{s+XWP_tpcqKJtW zVUZT0Q-ckyq7SGpwPgf5z$Wqn2NYxv+-jOAnGRX=jKy^DRKS*D8d`nc==&4}fO{WM zeF4kB;D>-i5F)zC@9*Wl?^bYGV7GbnK*pdk91Vdcd`fV$;dp?f!LlXE3L?U$uv=lHqdSz^gF{)whn$Y zU?TX+k4~ja21nW5gBi}TdpUZKrt6*zIC^o0de!Qfa2il_*6V>{Yw=*=_#s2K#8*oR zudU6raEG!&_*M%R0OiSU|H>+cd07C#w85r`cf^Oe;4G#MtWk#0AycC0>!qFOvaCp) z*V3#gwCxA7=Bm{fsCfu@-W7ECkmtQd{8$@*&2Qd1y;qvGB#h1-8tx6#3w+ACXLT6f zG2bn@=Y(@ePWSn(GsEUi%)d9;a}U87SAk~{*~j7M8nR322iRbyvd3XrrVaS9c>igS z$2b?<9L1#h&6#BA9k#vM^J&?zFm=ueT00CJ!wdAnu-Me>!h0i`!`&?CgxBjL14z@U zb$D26cG-QJac2>l@p?})+jUwsJBn@}&beGad}xI3UVidD@}?NJHMk*%P5WhP9x)f$ zzG_4d@(MMNjG}Li=t>qsDw_U#L?`vsO-K$IWk&( z_Y}P|auitye|ylyqbvk``%xp+cfO~QS`YfusA%<_S0Fix%;W_xXciJm4`@SUh4_N_ zMIuqKzxNThyh+qN`nRTR&uVBIy~Z%_G<(eBVeT2uK_vPNQ*(8E(*34*#wD2IaA2ue z>&m&CG-2!vu4u+SYszjA)PQ_8Pt2g%<0k(fbeX%+yURbEfG!8o_r~)XY90^WN~I6o z7EGAcp}GwAmZ&5BaiSb15TND>&mfKSCq8b~aQ?Udc@8b4$>T0?n zyLXsdQ5o5Dfu7Eeint$pa&B*()TwJCst2IKqA92P7cK0UM`c2|8oj-|_ zbam1q)1(ZfAw3aDvQ3UqCx1+viVFz54tC(r*SfbVz-i3v|wsPl2GINwpNz}soL|vK$sn{iPDr0zNPh36GW~JWGXo>wnki`Z99 z-&aVrGt@dWB5d+e9^rxsD(<02xF#Q^wwVKra*{pfG1_`oJJaO(nNmi#E{%v9g;CvH z@5%In=r9s2HL<`bh3}y}|0XS&^I<1-) z@2j8XQlb~;#ou>shg_tQ^Lv7w(dNgiFWjXCkolNa&WF(W1sc8}R-H1OW-N$Mv)a?# z1&?xdvEWHlj>q8}{^%?N^SIXO^q3jcM8ac9@h!Lnv<}(=;|hV`>22UtAK+{u&7a%H z-U{?zFid3;@IjI30-fhjJ|EJmEJs1|lj(7g_Lpg-3g%{tKdwuzfc!ESN*sZrE+;$F zd)`7czs%2U3LTW+FDj>0HVg*!1f*u%g+`tQU6$X6jHV6wJxB~~d_1b{{?lnyepevE z={MF@caw%JoMoC?fGv2a1()Ba3q#08Y8?~i%c7Nwx_GY;b-+PdzbF>DetuDG?9@`6 ze4{GzR+s~B(#XZpFjEMNoo45w|d}3TC}tWS}FwH&wp~P=KL47@o-(JoWJ8&|bvuEyP}$vt!>@oJxLrBJDDF{@=|FY|j}B=QREx zrDUw@)djTX@g5`-#kY--##iZAt2(KvDb&1jZ09z*I|3A0Jd~!6psQB)h&c=Nc#e50 zl_KaJbgy9#=*>t_{~c3;?#0M>x_Olu+~2BI(J_3Kl80#XAcStD@0CQ_yedq!js^m| z(Jrfdnx-XiC^V1rM!B`yROf5IX*KF^7{3;B=aHZa1M~3<#KHq ztT@2_LNs~b*FJ6a*$Rg`KBJ<~K^V~PvqK_^gi3yVo_mm3wD<`qDs&f>J@KSzTDc)Ro4)L5XPQ>$RrFmU6g9ewnqHr^ z$hle)I!;rZU1eH>bg@ilLs}n94#;B`$YY6EqX)JKX?O0@2Z42ha?yZkS3uTsjrvZwUOiWMOa8ZleGhiFBHgZ(r4Lrn%gpjVoJi^l!!9$J1MaPA%9Eiq z@2O#AFRgkic1+=MI7KOz z|IM(4e^6?#7XIhgMPq$ zN{TrQ2@sQ*gYX0~iFpN{ASN-p;0fXpvkjgg9x*S{`t`HPbYH`ZTgyEg%w!v_+Yt3& z3!f2N;t862=+Z06;bkJKc>WiI5EeWK%m*SufGZ$rMVn~O#zCnM7lG2@9yS((gB5~% zH_b2lGbq>hdBVpLuC&-~eYvrdS{_O*l@VSJ2mO9)NhjL(*${F9oUe!Jo@c|!Vc(%< zkIB!|lx;+AF2d#J!V~A?(lz-q64p{1Ms34#zN(Z}+%n4;M zNl#exO-mo9>r2APSzp@3Gz8K-ZxYfnF6zf-k^*fJbs2=+mt%v;af0hzV(G!;+=_E>M{ZeNwJ7}BeQTOA+}%^ zv4t)Ne{nWn&F`dco=Fcp?>(EF`{QhW_k2fnbI{foW|?xWI5h4+);*m=kG){JztI_b zKcf@T3PuQ8aLs49VkKGVU@s9v$sOnJr0j_tT2k5;_XD=F-s+1(Xjz#zg)erd*Ghq~ ze0Lk`AdObN7!aT9(EP&1ijiKk*Hj2c5v}8W2@MYwgswh#A3`hiPMP_2GL1g@Qm{_x z3zJ$<`a+_hv|eunk@kMHXmbm@{a;WPhC%`?Ts7KI@znow3S;Fee+-| z>qEdB_u=HGNrJx1Zu%@+29HjcN}1beK#XD-;@OUe;FT7xBp?bV?6_?@M9)LeSPP{g zR1=@Tq>>b%7hQaPPh|x`59b|vDcO>sty^)GUMtn8jrud|-$=j=cife;U0MJPk)iBt zKqToF_r;Pc$cX!g$~xk*(eFcCp^oy1-p_^Jo0ezA_E)$MS72CRh?k$C7CIre8hg>P z;E|4g7NaX^xJ5w2Msl!UAg04;L9DMc(|)f3JtxxsEV(z48^1*qDVFJ+nUXhGJoD6k zh!GVG;uhwuHZcO+WoXKZE$*Nz3>IzxH5=Q2jtz9sjpbqXrMy`3Lk`+c<`;zOVsQYtk=`(~PXtXXFZNc!~6*h1(uA zP50=OtewMX&+TTg4J~%Q3+butVPuPMg$Vk#qDz>`eN@<%PzMY1XutWqU)>BJU=Q9m z*3>qX-eGe`PPb)RMD%)HPq+&Niyl1JbZ_@N7%!~hNsGC7uo7N8TU;kv*L`f^x{*@~ zHDy_UT2s*n%+$Gx*of);W}(pnh|NPALd`qEM(Ssr!ILEG!5a_eRt%)(0`}3eY4Bm_ zU#w!?^q1v#qU(2rlcltBM?|X8ZFY>nwT%s6&w%ov@45qF?$og^M|Z5}J6G3~?$o+7 zz%=~^a*dmltesOZkkK+m6#eorLp%bu(TjqPX(ds(u+RJ^&w=H~#btkA+*%KW#I8gaveLH%hGSoC9%{`Xp z%Ed7;FxX#?4|qkP#TwDY=h&}e?<+nJT%y+9QK>T;cqG*;3@yuy7cG?;Ihj(-sAG48 z8gPnM?(PvZU264k>e$nV{Bo<gp%8U{njX_!;@|M;BB4B;h zSU?ah+%ps{>Qf-K@pMtmIMX9{+&pWj zSq#B%pVbFmI<0?YFt`eqeVu6QeIaB#q$ZhN@zk`)UsY)BLLUP#&K{ zYoP*Ssjv1{9}n7E3$DV}+D`PLeI3;mhcLCg79-9ZYL}VvZ0i_Gts{YiO-uhLyUV0n?HsbmjO&)H#TIwhDKWC`+ z>!Abk4itmLOOc4o1Zhpn2ay;)rEuK>5Q}&a3z%+A{m;yMPXDsd7Sq2J&c+X5sJw1$ z4?4Rfjy`vwU0B{#O}(9o6O&?@X?8QJ>Gi3U91QC<6_*{>T5U6vHTBjZq?sG=N~J`! z^29swqR7k)fJ&rw2cvuKGPJd6>c4OQk8KM8Y6Z=IEmmFnChoh!W|n7yTp13RLI7eC zZFtRKc73;1_gl#7zu>6g_4v8fWzu2E2YRe>?-mYQrAXK+fn#U81azYjLw^CeQjc(M zKT5rc&Y-)z#p+l81$J?FI6d~d$>hb*$9vCg@)=FArrvy0*8=Wo6wdzzT2R*qRa>36 zQd~F$*$Or^mi|zeVVZdrs1aIEoNRQW_Cp~t8082Dy2IsM6$zR>a|PEJ9;01;)7n1E zKP{SMd#Q2tpWDEG$EDbmRMBi!Ai(7Mz^srk==K0RIG%hTnDG*3y8(~Q3&yVgGf@Ja zHXthS0#g6kO2Yid0JFp!<~p2zE}SIe2_Z6`pdXtH8CF`#6Nu|Sx#MhAW^rc%I^ZF9 zC?Db$SlC=>%H+|~K(+$!HBeKsCsErQW7NEl>47&=BWCefCGN~M^*Y{y);9nb=&d*U zkV`b7z6YL@)O#OLEr4^P`ek_2CHv?a)2uAsy~1Pp8m&Lv2?DImHm?8}=;XNK!Cui0 zbdwXj-Q;;UecO2-MsSV%LoXPicYH_q-4`f2c^KcB3-leqb1cVO-h|Hu-FxI|H{rQ% z!kdmhLAw7Joqsn|c22W47(Ujr4=!N4E!WjA3%fG<|n9_Llk*RJ}h4{nO_6`(U$^-tNZKv(#}WUY)w1+D^_g z%?|V+96d{&I>J}H{&$|H+6>#Y-^H3{TQV)~OHG}-sb9gB5jcPVR}-akNG0D?$XjGH z+H1;;FKFTKhNjLQUi?e`qxw~Uw}mnKiIcx?;V4W##r?#|uYjj8mcIT$C(~@p^ zbZ#JR_mRQ-`mZhipAJ#mN4P(5d=w$Va?$kdkIZ=N`;qqqPYC6qYEG7CQ8Z7SNB`Iu zLW=)y$vQuTHhmloHxmtH_58gVJTqUi#=b(YP3uelajXY@=l8*;*^O?FiNpIYH2RYe z@Pd8R8*=U4Pda-1RbP(XFZ8T_h8tkqgh=^{g-O$S*IOOEt%Y70y_6PA%w(Ajqyzn~ zsfTHHvr%}vsOQkSV=OxXPfg*>Q-%UYccs~9y_R9Y*+(Ds+1sd}?$FhrM-T8D@1Qbm z{vhuyBO>aj3y?|r>5x>jz6`jpllbW?bjcrjfB`H2L!YjEj|>EnSep6dz<4P@M%8q61Oi;{(vFr(_-v&&8OjmY)9{b ztiLz1vj+vCzR1oVrj4IQlg{+&r@cG0sGLfZ&%tGBewk1m0iM7)?^QEm0ceQM^!T|+ zCfhaWfGhW{gKf0%vv!?l`d;D_6wC>xRiA}Ld~(J!qxZ1>!-J^fTv(DZ8Zhi@7PM&XzHA7m??|`g=c2nV^^xZ5hFb!4 zV~5e7&PSW(Y|uFlSBB@&=e`K}pKqjWos&=F{?sW3WAMKmnzFpVoPPADb{-Yt&53J& zx^H+&{qSp={N=KUIW;iqmeCRQ!H{)zkctTEC}I1Scn35~{BX7|VkahF^Gf!+`$^G4pEzrYcOrB;vNg4I}W}@aoI1 zo^Is@BoN)gAe^Rtz)!_}5Zv)5Z>&HE4UI^4bPf!nPBy^#sOcbX`z|8fv zPCU}!?(zCF&NNN&{|p&!cYarBKl!70*H_6V00YsKxmB8aa)+jzyeacXA-{=cUkVG@ zy9#@zR#)f)A{20ymRy3DA+FMsmtyU4*KrqsUmVD27`W5+yAR=dP25E&Yb(m|x>4N6 zkXLs{1+MGB4x`sXnFidZ(P=jId2x-WZA{uI z6iH>^iyi>;izq@ML6OorV(_1DhJoW8sith*t10uZ<4F59%x!{qldsc)8)5P99hXJd zG^JI0&Mf^i1L}Kwp$n6yzDMv??@)U8Fa4uBf(tvoJ<^Y>Vf}t@hSTi7hJ}s)7*PuT zzPCW2II)zOZ6uVf%_U*%lM)hwZ-+WFQ0NgCq|+dcZ*v90{v8bc$=#%%Y=tR>)(ga$n@k@PW^T`hx~|ho-70cCi98Nv8Ri{~7kte!eWD{0axc zqyk{BrZi5c1z(4$eh<=;uVdA~IC|jgN88S;#7kFB8A zD`5kUi3?il@i!$2HXu#&Fyi=hNp>#Q_idOzUoiG~d+N9nmUMhA@Kp02&GD`}D$i(+ z6WVYkHul&y7=(t^DVF(5py_b0L8xzk{D%Lx|01UO1;RwUwT}9K*IS)mO8b2mufElt z=6x4GYi~bYFQKsG_duZkKo7}peg<4djf0&u00+|ybtj-41bc5k;Rm;9yMs1=7o{%y ze(Tjv;QWPOjaOG(r&(9Q*}F<@SC`r6UqH%WHGps(eFc#TB7}5rh$lIh4os0ZhI!Ejpp{TOvY zF1_*nNOi#yn(+fX9CQOd%4s7$YH7$nM%n$db}1I<3;r=5MHdhp}xzm z9$nU8`ALR+1ngV2AlVU3N+MyG1w@$bXVegwx?nB`WYTJS=Wdjm-i9SJ(pgmx(>>Q7 zX|v#%XD;gL1J@sF>kI~5`ium#=ANKR3a=-{I<3$ju3fwaAzvnUS`DyPmIbhHT)Q5i zc3yCfqlFPc+&kFeg2M*z*EIDIZFi$b(4*q*6UYs|(NlfYMwi@(fD7i&-FQK*u3*_q zNDR9eLmr?RHy?!pT61%5`$tP0QHJ+4)YoaJe~ne03bp>b3$_2NQ`<)ma8e)uR=fy` z3;x|L6pW3$Gon1ohpDNreNVH0>O_D1*Fe?j4{cN1K6>8J&L7&vhP?)sz}@f)=brjn z3~%`EzelN$1=7G>D-A#uWQ-+;LlhEA+f!#v;n=tR}ByHi)bw@!N<_?<`Qd48RyR>LvuMl`efx`bDG`8^lZl-RBjV3^&H^o`BG zCgiKy>jc=UEKC#Sdv9+44e7@EL=qFb7)e?SbEYiJlhxo&Z2Y+B=`NsOPjzPr{v;}B zp+nZOiT-4iy6+sT@F(#P%Eb@fsUy(Y&$xwvS4e8t4THl(!x?j0Gx{H=HnAK2B+2CL zmuUe-vJh}3v?5VMo&EUWBrdEgPOPq3XB+$Zx}KvyUzaE^`3Q5+0yaGn@RYP7&zlz3 zYHC#wEX-Ea{LeI&6F?%SFRT;f@0rAzr7Yy;M^pC<;eCpg#~BI%XKq-nwneZt+Ou}7 z>+Z+W#NcKxS+rjySMVP8K>&$vwFs8m9`;=TS!rJ!$1hEw4ocGB-IHbV(gX+*+7Jx1 z-au?Awnh0MaAFaQ;C+?1Io}=Xu7}aXBCje6BA@dSDXZ5S3}8($yZ8WU6JK44!!qdT ze!vcNp}FIPbtx8LmpPCO8cdHE$X-cE+LL?^%+y&hhyuH|V#L?tT;1d(4<3R=Me zD*`Sw-+htUOe9LRyov62+sZEtRikCqY8Dwp9t=x7*kS=HKOJQGLC}0r4LcS@x)8Ww za3hRVvbQ0l-uZ%^hlXtzo%A5RlZZ&8$yDCm%d0&#KYcA~+B1g z>Y`>hcLnz=y}7^hxVv5-cw}o5A75RC%(w@W(G%cCkuy2JH5t%bOo)8x*_*Lko+V?s z99CDcrq(2^&0_Ad0As^7bqD*gHDPTQ+i=qLA{I<~ggNg$wbn3V9q53lP?7RLKOre^ zA2vt|Dh+g%!liqKZ@_Z@-fCN1q^T8ba2w)WxcC4h)1fLG)wv^SDle8 zuN@iCb_rJ%Fa~hUws+?rW7?if%&ed%@n=-wDEg#tmiBW+o>p$%FS*o!PZ2XISKICP5yZs;BD zA(h^S3cR6lM>JX%2OVV^5Tu}5u_>1}!W?nJQj}%6%)bK}V=50qIG)eNJUz_YIhM_5 z2Re|QCfeSe&+bTe+P5y{d1cuK4-dDT;W#YI%E3p@*8OQs-NFZ+Vp&!N`g-xZH_T3LQ5>DHCU zUbr6Ltu&%{3w`j3E)D{a%OT{U@m&oIt`JGE+LoQu)G`oN__i7N65y$0WI%|wV(h(a z#XWl^?OACkiC0Ar500$m@j*$2uuZmQm!S*XJKjq-p#gwJ%fI2a1Yx+20&OuMR_Z9D zh0&G2)KRQ7jEuy-&xMhHwOR&?{U!EEC(@_Y@+?gHg=4ZzQ(t5cd6J96$=hnDU97Y- z>A@y;CIi(@=|>=hMImb|OQ#R}OAu0?V*~1L#a$GKo9Vrw8dn+8C)=#}+4$XrCgMKvo)PI07`N{;G2vE9ymdVnujw@)AC4dkbPC z`-uF3KIGB1&XTSc`Rc85sE%2zWSZ(MmHV|nlTf?UVPLvD4IB6khH`fr%8Lx;?lhF! z4CU@Ll;cA3&$KB1a}opeEodHxMWN{%W5lt#c7L-QwQAYRr~G#>6^HeacHP zZ!nSLSYrxoGGMfKQbAidUBEM^uP86=E6N)opX$^&N)UEX=2=5_{fw?xFqkH=-tS+6 zG#G*vb3{yX1#C+{*w3sv5SPq+0rbXB+vgr%c@MpmdHTLCz;1!qwC zL4;XYQ(Hj+U}kUkBV$7gNDT+?fGTmV|P_!c3L(%defqOYO8r~Ew zV_!Z9i)<5RzqV&qJh>mmDl(?>{8u z;L1Z{zAb5DzHMnj4$9I*`Ds}mm=1ZT#@Em=r!0$?v$niaa`yuD>x|0IPJNv@2h5_JEt>6bp zMgrNj0VKk-=(yn1qOL3}hJ+y>lLwNyxZcVJk};USFpxZt`TPu$iqFanQ2+2eFZ02f zWGLpdGe!M|Oi|w;^EWcZ{3H(|vFhUr%N|6+dObD==;W&m{Yx><$1#{0KGt>B=UCz~ zMhB6_>f`y_2a_=J=#fr?No&&PaeaF7HFW{&lSR6O9jYrHtOR#WgeWtdbm2A8^u<7! zEekqc(4A$E6$7lyA`u;&n)ioyVW6k8$Zyrh&ojpm*dEPCXH54}wM+}(N(5YuLr84Y zJd9||*cRfEU&j^}R%5|K!HlkqW648FeAv9zzkr9kBw}xQ4?MLTkByy1JafOeKc2a` zF7Hpz@L^+QOBm#mR;sNaz@4e)?=lkZolXD;rKCy4$!* zkINiXuUzIUxyJ>#iBMN_*eAnDv}xrXiE=c%HUi{k6~uf;k}h%IO9~AbR)q+5*zgN+ zptx;p;t0~kv?@bjuzf5r=tRusv3hSJR*jP=TInc00u({3R!J1>A0xnmNDO0U-Mj}8 z8w7^g(hk@NEUyX5g2zUhRl|QDlQ*@jh7(xr12cGS0F^|%&L*EAAA@>uK9!d_WNlh~1~H~4~i z3_){>yeVz&3bqLegwvwNqSk5%>Tmrnv8LvwFxvzWIUu+Wa86i#?EW~vI`rS+eB=-= zUt|o|^PQ_vRSKV}^59|VH3x|egw2(=@=3b;MCw-NiGqp?c+x}vkOp)gxwk= zlzsA8Q1(vkNIvLR(q@erCm9@)NKKv2UKmIEwpn9{Y2>nx#*v=9`8e3I0UFDAG7F!M z@d91_c#?#jH{%n^gC~f5@MIFvW=)C29{+^P$7daYZ^V+r?RgmLVOLd-jN0KWVNo+cUuEyYVEIt)EPmPkW*YAvE~X9*6)PO&_3m1$E*5}C|aPJtQu^$Aur1&rjc zcd?WFxt3jlXVkB!>iXE@78OPcawhF%MJq{9)-HpDv&A_iT5ZV06%)>Ca!5zgef!I# z3;Pt3Gv4QBq6kjg(Y{OHoUduO-=e&|1AF2yFaQ)f-iz|#B`o*AH579=WQg)ZD4twI zgnjgi9uPv+!H-Rp@9wgKsbtZN_davuMZKYX*x4K3yKlPdfw`W3&s_J0d&}J~&<|HS z>OY2W^Yf#KZmeM~X^VTHqG{kb!LG4+8cAwXXqeXttkc859}uUshsgwdmOLy(;n>3@ zDXFDYa+On6ScMbrrI^gQQjz77PN1Oh$kI<8zku&)=*6!?*-N=3BdYW=An+6M>(VQF z+F>fain^NBg^&<-2QFrW6`q71B83A2n?KIgzxU!H=5cKBbkZm070w3~D3AcTSy^j{ z!j5B`r;|<*vPU?mC{B<)@+DAxg`daQN0PB-Ab@V0SiKt7E_@0h-E;xebE@X;j zZ9SHGEXZiqF;8gcv^=pGZF#Ug2QtjFNCf*s9?8|Z3?OVr!QqM#?!_ynrMS&unnbIh*& zD8b${_vC!p8uarp_QyG-@0cemkYgZZZi8gs&(Fs#C>HBKf)jk)P$`#U^hIW0|5vW! z?XP@S2*=pr_78pp?KEsPzca)Z&L!!so@_+?ug)bsgPv>_R1IZc&Lz=7Pg(S=-#h}> zx!AaQWI(H@G)*1KUYJJ)20djH07KX(^GG*O_Q+53$Y7!#x^*OD0r`VJB$#;-iSUiS zq%9&nyAyrnpeXY}{N<-reF8Nli(tywAy&T#PA;CRhyVIBL6`~)&UR_LvB|3AFvBiTe83xLDfW|w3kj^?TK}(#A zk)%}nQztbw9fP^LSEI?Pg}V+ImJkEA+78_s>w1SPIjjc;Bx4&{o`NTshWsS1sTX8y~?>PucuQe%ty388p!j+`ML-t>ZZaJV7~ho`*A zlos1^b`IczicSi+{;XYr@FEflpm-fuY?|7i%_|^J#on7TeGQIvy?KV2mkW0&a)p7) zekfgj?XyWe66N8Mre}ZwKLXZ`u-h zw1#U9JtE5^llCCzy^uO^$^oh6e}xoq&JVIEIx*0p0|>>H4mdjc=CJq^3( z-XNEJRmdg#v~EcC?>>BS)un8yYn4umH0EGUK z@!di;ypT-j;I!og`Qdx0I$Lb4c`XT>>a@)d@;a5UNg^Qx&}%f{LMx8kQGq*FL%-NA z(1=gAy8!K2yS1dtT#j07{)B`{)OM?;CVv5_hfCDDY6OPaxvYb80encFDNx$aLwdjD zSBRl(8@slYq_Ki&#Kgy^HW}&R5P>%Le&e&;quqQ>?Fsi` z#6KyKJVsvN;M}}*59}eK^!==gL*E|2$a-cb@fSf zX^YsMCrL!Qvq-coPSez+yFkVP1NrE9`Da?p`niJ+TMn>n;!`Agyt{c56ukn?bFfLe z#eLdP<_GyJhz4~7h`;RhnWF##7lnk; zlZ-0L2_hx;fQ2)`MAoN>Oo?@Fm>)!p=r-^kmG#n6C3a^`Pm!=i2&cA$v#n1CR4BJX zJ%}~30lNLr(5=8}Tdx5ul4!v?0~hpqnCpbQT*%-!FEATc073#!);mz=3Z5j4mlK$V zSc(UWvp!%%8N#Mm)*r=kp*Wpo9)CC?)U(W0XPMBqpFByrLMXzS&n`R-A>sAsGc6eH zbmnij!ws$3Pm{hX)H$}2c=mg^s)wN267+@y%?8jgHU1D{2fsL*jkA+SRcCc#15#vt^1np4V@b2ez(b8ro8_m8ZPcW*l~0B z-bU8s0Jq`wkNM`aV=?I%u^|mNolw`kXg7S|d|emZgn~c&9&8?qAut}d5IE)6w_$@r zl%M#TZ-3(0bH$|Rv=e)MDaokHii0offOGNc3Ew(R?bf|TnerarM0=<_F&?Q5V^PnL zVD+^fKx%j}T*Af=*TWbpLs|ASxO3NsTXTnFK(>0X9?>` z@9rD8-UsM~61o6KW>q%weF0!np^iPZp7iOyF-Ms1*iZ=?DM2e_r=Txl*eC1BFni3` z5R;Sf-WVPq7W~?Hl+&xm@UtcN23?KWDC^+{#gBWrf9Za|Acpfg#j^1l!06IhMBTEM&}b5jK=y&muPx6S^k}8}Ts1 z!B%aAu*R?yABP9g^3|oOmQdEP3Bnp*Z6rN2pRI+0_JT)hC3NKRW0VKD7YD~X?wBSrIwVhUijfkht(VcR{Pjpmi-(Fi?1Cn zn{n$Zo3)Z<+?>Lq=gTz&zE6LQZ!J+&z@^-!e_03#_HMz6Rb`pkK&(wqJ6b!7)+PEC z8uA-_@(w*O@yCF^7dJ~JnE|o`w9-O1WtD(3svXX9OGs4jS8wq0hT7qH*D_tfrTfHa zg8;}mdk(By*L7m@;f0k>5zpm8L4TYkT)UvLvk_5><<*?+n;;7FY7Mh&f`g)0a||<= zCTM`VC7VcW%B$SeSsPxh@$|js9>VwB2C*I^*}I#_X4RR;vY#iv!KeQVphrP)94hEF zc;cm5+OA6i`}75fYdi;m*cV7|*lqPFB@e|vcSWG-tZ$R>jv7+WStHG1A=^-jI=YY@ zEhWzcl}H;Geq`8-q$g1euCs!d$N*D`P2lPjD)tm#y##k$3({G_W)g2IDHoMtE0A9q ztb8-+9aPdF3PagPo5_?mC08*k%vC7sSq6LAWw%*=88qLNDq(}v`6)Hya-N+9$XbDY|q1%Dg>!P(FF>gw?V!Q#@f2E z8rRF*;E0DJdp5hUG!mAi*v zCU(N}T=_sKOoM>RIJh~L1y`MhYifJE76tMegbM}-#aZllHwywUSw&F)u|Yf=gaJ7S zyV7zJHsRnQUsDA5vjG2a_y+9wd(`p1;iJVZOdj;p3PX(%9d@tK+aVWIZ1oOSRZfbAjJh4!bnLE!A=6U?%m`~~y=3agFCqsj#{>zg3A@GIJ#v6t66;b(O$*5aH96s9GA>wMrli^1-|C*}xKZkw>GRzoMyu{LMo+DcLKeQAIb`FGYDF zjvd%VCX)x4YZvJfuSf14ctwDblVaJtkgKT=e2W5uQ78siP+COo@^_Q?fO?0f%sb0$ zdq|jXRPU&}zL;HxbkYk2Vs!@`7JVt_5Wm!LC0-$yetUG>tvK!o?=YYzob$pCmbC}Y zypWE$hglu83wlB7v{vk^J!CLC5SA)3ax`wgvlQN?*nc?0P)kEJwbd@r7|8~5aQlz- z(hBq2V4zJ(3jvnBUPY#Gao-D*0F#oum&`SlR%BYh178UFioIk2@nfIvC7I0pJB-^` zlcWKq*ES^z&tOMS@m)puC&dGxkzab^J?oa}bM_!8s3)HtIaxzqBC(}65P{I9isC__^oQ|+wtdl`UHc=v`>Cl) zs4NM`7C>#F8=AQAEEl1ZW!(}(-9=fKW$3BNP=8$3=g77L40U^DUH^Ppx!X|5{Z#0b z?>^-a&Kc?#z<(Z2X8Es@wsz++Km>a=f9cCOYcMaRtp)}|-1qBw%wc#|?IDM+I)((R1ReG4|Dv@rb9h2Jg;(K68)Gstlb~`E*tRbpa`slR{pV7i(B{ zE$PxdR8xXu3@%YHoY6yc{^wl)4x;*E8Kf7ovRV+GlLy#=TF_R`a@JH!I<=1xfI13NA>$lrQsbSoyE9Ubs!5-v#I%sqaA z@78g4=U1S>e?CZ7lf!J)YjDSDb3Hro8Yt||jV$v}udv-anz|H%PY_{8}5w3%koIeD_^bqF&_8vTY65 z$Ujf8w0gK42C`CAPiC2%<(U?9Kzbs`(B*o#FTNH)r7z|z2T3J*9+pKpi#tquhi$bY z1%l_-hw!T-ibg_B&MvhKGeHgzj!uOQ(cCs31seK`;91FXu)10MVFk4zxXq>+EL z!jrIA7Jr0T>|4+2a|RWeaJ|Y52#mK&VR>ymuaO_{KWG5^)G|N}Wz-+wS3^Dr<~>Br z!VfobiHhr1sx{p%-32HkOH@@3Uk=0BcyW_O$KCKFJa6U4Di*occt(* z(0=UB5i&UCuw4ED@=_{zn^dj?)duv95WN3^>sxCT&1XxFf{iS46LH4v;C|Mw22kH1^NnRv+6ApHP=&~);z%i-#}Pk(0h54VmnYS8T>*{l(U@M z6DSiGnO#y4%B=wV8Ede?rUPDDn3^2<_Zkg!)bK_6D*Bd05yW z=CD#e8yesS{>f)q_6ZUdQSOku1-^dW9mFIO#uQ+6oZQJuczva;kJQNJ@1foz>#JD< zuRkj5El`jDPb5y(JJ>B=e@@oNLH##%5a@CDm zl3A7?Yxcl0~L%$56a9@~6Zjg^kcl+ilHK-awxJIEQ6@0osgbPVQxbWk{8REY3D|yKBWEwM@Xz3~(DrN0_8IBa zJyEg`OcD!}TmT_Di#N2vRI+49!{!&my>Jx^KHvjopf%5SMOPHwQ2Lw%n3x8pLDk47 z`i z-y!q_epvy4Z)5eJli#bXkZ*qcp`;aS_#^3dUqaxdwj3=2tPst^M5wFy5*QB8WAFqRxJvLd@JS4dyF5^L1KI=3 zk;n_A2k8}xE6ZWe3P)cCO*Fj7jW4`#Edac&@bLCb3M;rs9*jMGTlh4mr^5mg;jvw= zQpxuN8UeV|7s<$2ru#^sK~Hbg6@wHKSko2~FFhqKw6jm~pE`D-HY-n^a0JhwYR z&ePuesSkuBp&Ku;dAn+Wzv{D}YRs^E&7t#(PiIYr#!Wt*_2OQOcW0Lk@Rxl$yI`o} zjLC4EgxJwnWauL2IVn@P>UC>XUF=xh4-N2oM8@!>p0<< z;T(J&B!ty9lc!bZRc5^en#p-yuLocHD$BbBQBHW4UcwW=%dGGx4~*~zE;GwtNT(4o z*eu-wH$4TPuNb1lV7r{tE656IP;|H}J}-M* z0nyBWK2W7xkYW$Z`u)RcHoq(IT)=GaU}W#Fq_yh2!Xp0)Uj<+{I8owb4A(ps_5EH3 z!j~Y@6kCNqhXtaGlbntCoeub3MlaeOC|sHvd+{CEck0ObXG-{MozrK305kKI1$D+qqs+|FStfjuf>nbGQjD0zl0`oC$NF!)VOiNXBvV%V&c_60TvAhPJA~(A#0hDH^T7%C z%5X19%=#E%;kxNTc(1VmUy9k`zmb?RJ8b$=fISKWx{ub12Vg=AXU}p%V zm$K3;WMsVaYNlng%Xd!#12d|JtL)Ylk~C;%KaCte3zH#n?#zb#3C@iFMy1%kC3D+4 zuj%mcJ-SBL^etFsc#gY^+U*?wtPd-@i(Xta%lzX9aW z>aLRj_M5+xa8xRdeIYq%`J zD8IFz*}fz1sLs>Oa+UPRfy_{DZ8Ca5jp`3{L|k11nPhdL`6n zUnASYb{>WLaF6~vynn3gpQD-O2KL^}#@!H1ExJKwvEN=7>}k3VzRS+@Eb=BWxqc&y z{3rPaDfIubn==<;*rf71@*een!k3or8Tb!=J0k9en(JE zaEey|x+dJab0;@*o?v&4VZT&k@#&0jINY0kVaM-yh;!aC_GN~!-YrArc~*Cej9FCU zFSQFN1UckrUBja#8aX%`;fvkAOATHWHux?F`3)0q0&4tG{h@J%Wo7VPYVgZu+;^GE zKE6$Q#n%M?&nl%Rm|6Y<(h1M(|M)mEP*wzWlM&Co!X-74oLk=E5z2)aGfpQtk5m~4Iek^25>k*xJ>(RqRSM?9Cz@-%?(z12Lit^lBPR& zoF_&trZ$+}xC2q|8ZOkLvzloJCnozJcfvo;6`CP40P|bB>&Ywvq-_~5$ zL2It-;0d}emMwCT43qN)cd1~jA(h>&BNtpGmH@i#MD6X1h^sk3z||Z)xtfC~S93M| z@G3{~RdY}eYHsb3yQ&&R;GizjUwtXQMgeC14B{Hcw{MmDHNKbiU{#z(_MT-;{%Vvj z5nP=CQm)S63F>V0k%O(&Gp*Hj*NzmnSKGEyO_z_9gsES4B*91KC#lPWNY#;Zebx6m zs$Vp-ic#uF_2fm?JW735t%5@=c(XS4J<@W~H~otd6vq z)lnfwu4?KuVn0*my8B_4_wP)B$e*#n(=5|v-Y_lN)Vc1SX@XzFFT?q?v$yEn2jKs< z-r`G~-KW6nllS4we?#1v=KJF~bIqr&vrh+S91=h|a(=8D5g1{rcm3SD)aQ2+^5Bo> zsQc{g5?nvGy8*vQ`NZ`9SHFI)Q9rlKf)2;QFBg9E;a32^BKVcSuN;0=@H+s%qwoX5 z+cm-O0{pJHem3`mClG7y#|o#akJ~#yx?{%wZ@dJVOvhmOg~Klne%2#()6~hW z?89J$!zz4!zGc4o{|Vl={{Hy~MCVOMO7hfIrX!J$saw^y`N?KAzaRWE;5Yopv4!e~ zYWmA}TtDv$as9lz(Didwp69nG$CEae>*-xb-d&<*S?x_O*XqkI*BT9;W#ainKTjU( z@P}o*z5(j=U!lwORISVPWV!e~l>m9G{AIyY&tn?PF@MAGbGTggGMmfwQjN>C87em~ zk+9vBMa-`dD-P!1`iVKa;>a^rv*lS0iJoljnnWfaJdTW;kf}u1n}gj z%T+udo{jK42~Qw+y+1r*#2WyQ8t8JBmcbJ^L7`p+?v*!#%~wlZuI&g=<#N3Yh}AnT zSIrVd@q>}ooQEfj@|6mBj&r&8!S>D1=5oC{j@9p0|DU$52d>KM{J-bCmn&XSAN~ml zUM_!x3o=5)LM4ZaY0F=uMU9FQ9a}cdkx_FC2bC*IYShm<{wCEGm{Gckjdrb>Qc+Qw zLnCLOC|S}(rHPKxH5b3{dEe*C-9CFipVxD~=XuU^p7T7<`SYIl^^!7qO$jQd;ntT< zvqwi)cB!FfWk$>pemv5LB7LD5W98`R+8X73PR`9-2MDrt5&nhh_i9Olc9Gto8tBGP zy{h3kIrF+K+1eNU>9c{r&$E`5vmL`&0`bah<;w~rC=he6B*ecWI;ti^A ztGrycrm5&=`M|st;923porc?s8{>0DF75){MYxyXUW&UEcRB7#+^ca{;jZ@gHcO|F zzEaiKA|I2EcD1S%4{RZ2YNM6*tL-{-(=>S|J_bxMUQ>^DfG)~V?_jjmMJ=rm@j zTBXytrD~&2-GSULIvrNib-Hj+U8B=Q-D;IiuPRp?pO=rz#T_c4O(we>?SwwT z*ctwP+vOi5KEjYoop!0ZcDuaY8Bzw0e*Yi0%LtQ!I{Z8NkTay8(0%`HJ7ppW7EpCB z$-7)m7}eE;FOr^MnUDTWMyjlrWSIZp%Tkz5n?ZfJTiz<2^(y}rshrLplH;oVhhCA* z!sTirSkf@U-d9C?<+cb%Hy$IQB(G=D6mOPglg9c*iFiQWf``WIxGIkn9a=6wi z2Aah9)ULPDmC5Mt8%9kNurB1&szw3j^&m`n(UduD_ zOVnfU%0y=z#%x@<+WD^B;&dBOsX~>!C-(>P$@}GlPB+H9J6FB9UtZyKSCAfJC-!R| zJHPvYT$AeVk3fS}FwUk)_pDuJ2z&)-z@j+^BT=~;ca6IGeR-WT$wzu@`re0^IRB%A z@^f(%7m4J*rnVS@~S#b5)m>FF?LP4O#g@ zNQ+mhVx5+~p;qhk@K&`+ zr~Nb39xI)%29P>WU<7#k6`e$Tgjk=Rq6$u$M`~dwT&7`!>lE<_J6U*wjbSSrPqZ=Y zW#dT}#@>-JRv6SbeYuP=o-JI!7;~zHu_>|SM_Kp>CX8qoL|X+W3~A#S8^f43p3JzO zaV+B=#u$6L0T>n+Iuvi?ZQW}4lzA}4RuqF$E1Dco6j&>I8E}E>KW(}rw;cc$D4&9K zIhosf6b+fzF7R1;as3XGKC2yIZHPB?eWV7k?&v{#F2L>uTQJ}O;FZcZWZqWWFaYcT z9}Fz+CD{PST*8>68-{}LqhvO(W(<3X=gEA21h@qCp`Un}%(mhn{3htyo&owH;MO2~ z%uwsUFlXowFxtN`4~o3zb)agkVO=u?y|CPgB3Q|s`5*Wy;8N9o#!M2us^^U9{$9&w zusUEt7~g!B*m)l8Zh&7Pv!w*|P^KRt@jx!HUX@`K^DBEz6^W73!rzebWvMC}Hr=(y zAy*dLe2#n=p`F`-(;f3kyi^6eo9Q=_(FdbB!x{g8#Hl5qmodf~k%uS_>9*T(tk?Tc z(1#fR5_%s1_CZhR?Rc7^#E>qiW&v#^UTaswP%QGEPFU*zm!Bfz?l|Q+3wxxgqO;~@ z$rYe-t&ma@8xtWV+vX0bvR41bvoM?9N(8zc(n#Vls3Y_a1!f7^LE<)y1reyXkBs9D zkkiieBV_b+K+ORE2@;-_PoIMl9_2X)<5l;9d#TOsycUrMX$EsUZzGYZhhQ$#?;&F! zB2X4Ft|x1Idx_pm;zSMjhnW5foI0ZA*-mvHCb6stxRL26VY~_95Xjbd{)3F64XQ^g zHnk7k+F&z|i-(}5F+t-z@N$0;o(_B=2p8Zlqw4x>-f{C$-xox`o{Uv(V;vcXq1%Qi zGW0G5LuK3=sui9h6nI&I`^mT?8x?98!w+jJ(16|^!VlwKA~9VnSkCxu5>xf)NMqa& z1%egCgV4arG5Mh(WL!l35atiXj$6Duga$9#0zz{jpbQn*l%eRsQ%itLn2x9OmhK?> zU4%cPgZgnyuOYFvQx%PvNy$4foLaefFXACCNRMtZ&W7Tzu$b-?c>v|z%y*HD1K|)? zW#jP?ByPB%I!DZ$loroev*TC55xSmM6T@#j{$$xb9z|cGSqF-_d*fdtai^}vfiV74 zXum|2e2He~SEIbs9&Iin@hi>8estmd0dJKW!B^X&rz*CFYYnDyz)ScsOvO5|>ui6z zwveE5nD>IMz6*o2rxil;watg$awv_zcE0HgUBwGDa#@9oTA7Q516Vvt*nb z1m-b4p&gSzn-*>xZ32Sy@B!dr=HCw^YRpEQ@DYi&Vbmw4p98&Oj6N|EbASVwgMQ+4 zGL-utX0leoQE6A2h{$c}399rUnJ;u>fa=E~%tRCGK}X~T8lCtQuolWnOl&3NL3mQO zvbl33xv zl((Dlqh$O8hLoj@H<6gMS=B+VY~G=K|HRa(Pm@AASpFv@-it$fUCcjB;#=iv82l@m zgY=C^g@?6Awf^vM#1-hzN?_hOMU;{F=Q`-gVIFZe2~!U$9*hw2!#yxW#ls? zx_W`jx&BTPi9x{_`5uV}5mO?L=|h-5(Ow|NqQ>K(P(R#b>aez%QHb^rmZKPH=#p<^@+wbb90X>0blI`9aVd51IIYXXsSbVJe|Z$wok1>TbZ7OEocw; zS??I^?2d#&E|031MVMaDFTsY7xgLhoc40%t+)Lv3rJxVk`o=s=3&j^jV<8svYn(b( zfT4&R+(scCb$W%dr=^%~5>+Lj53zt#Fc3YJ>qrvoo+@!*%=Do(j=#ydBqk%CLPBlk z$#d{7ZSpY0_6Ldmn#9?aW5E>bBBOUV>T|TlCXo2}0QlKx zvFX^I!UloogxJ{#E-k;$ZZGx*5|K~namNkD-iNuMTls{;z2MG42<~7;?8Dwh{{#D| z*baEdi+b$+*tfB7>ju{L#OfD&6vmEwS~`-FJ5g(?EhTOuVy=m~FayRRMpipik#x8t zKZiGjkNL{bZLg|Aby24pLC!NNi2M>6jXl8C%>Fuw^folJi7^(O))Lh(9XXLLa6-Vz z@dUB>2Hb?$IQ&-{BwkfvIxd?J&$v46%JF{$Q*=;X^TXRuvMBx9N!w7EuItY*>WJ(r^z4+-+2m0FFigI2Brrdz`@LY-V1&3--USYR0 z<(HTN_W-9ceh!c2di-hm+Q>WfK|6*^gB^iWUe+g&%BSV;7#s_cDQ8H`&d1k2h_p?p zU22OeO)TLsJ$Xd(_o9_a)>TPAS?4}hChqtk)y zM5k(ZI;KX6Zy+%6tTgo&60a^%{Z22=Z2=@RZw0i@UY$R)Hkp%sRYhvjE28< zprLBU{h(PFFs`ZCmrTEaOq)%2k0Y^XHTc=3?pSOfeW3Hw=FY*h^c-EGgDYH3;xZjW zs~KY>b*vMZhmO07#2eaGaZJCD#ElvcFvfqCvRs8Zdi1PexLZ)yxLP>a-`?MGI zAzOaZcQGGz1D7$bU4zA$P{6)R`WYE}t090*ob)h>#lVs$t|T0eHT%HNgF6YQJUNZP z9P~+gE4Dd^{xKQp(ZGQYoCIAf!1ZfAf{e#tfxvNvClU<1!Jt=3%%Glp68{PhqL+}U z834V}?t$mW*v_;8b2NJzNnEH0e+|+O zU{Ju`Y}Voo7b}wWr33pkc_TJ<9bh=X4g7{g2owk?n2d?0z8DJiGW{Lr3uTw)7I!PelK0^knD zw;%{1AP|HpKL*w=;|`?Y1^YV)S{bO1v$*=zFnJ=^M~AX3zchfO zDH8VA1#@5$tq})Fs$QP!fVoGhSQ}b~fZ3<1kCJ#?yQGx`;?O3u2^c-Ht4KTpD+Hds(=erHjeyScN*azsAJ8#Y+s74NM~{Io3B)G;@CINuSy~^7 zH0=_$P#PwtsymfJdza{Y^ups7t z3sZeI+7FzIP5TtfY6UosG6Qy^GcRBmaSziyWc=SSEYN7v({o6iZvsD0t?BmX&5rw@{t3%Xfu(=*1CF%v-;GQv2HjA%U(1O#NH;-r5GddM1Q z;Nz8>%7Kfx!U7!4)q$Tal7V?3c(uz|L1MIO%t9Gh+^&bk1TQujn@PNt3(TV=15cK< zFQCD|S!f1c1GOv#W*=sB1Eazvj6HXY4$1)iJQ?l1=pmcj8$x0`p#gTGHZ!^-<(GVW>vuCguS#R10QLe%FV z_STX3EEIH(5if>aith0R=5K<eLI+(c|{N6GC zTI&fKI506}enw)Ic1bpCjA3}g65w_lXGM|mT_1c}&p4BeDZ4>0Wqdh_a6l2x_$utM z5X2_W8(Ftval@z(O%}b@$hrgE)`bFGSvC5@eKcUO030g}u0(}?#!r$F2D+uN3;dhm zl1+ddlv%C7+M)scdlI4(m}4euAL#V~I!uxE5egat1;Bp?ZXCnYv5URf;V+7G)QFgw z#=Upmu_kBM6}kDyEnlZ|v(%v|N5Y)^*~Z!*-o9+jJ$K%nGi&yYTnpX1e6@vU{2Oi7 aztJxDr$;+F6Z~eb Date: Mon, 10 Oct 2016 08:41:03 +0200 Subject: [PATCH 4/7] ask only 1 for frames caught for 9m --- .../multiSlsDetector/multiSlsDetector.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index d33ba18a56..5d6ef18f47 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -4932,6 +4932,16 @@ int multiSlsDetector::getReceiverCurrentFrameIndex() { int multiSlsDetector::resetFramesCaught() { int ret=-100, ret1; + + if(thisMultiDetector->numberOfDetectors>10) { + if (detectors[0]){ + ret =detectors[0]->getFramesCaughtByReceiver(); + if(detectors[0]->getErrorMask()) + setErrorMask(getErrorMask()|(1<<0)); + } + return ret; + } + for (int i=0; inumberOfDetectors; i++){ if (detectors[i]){ ret1=detectors[i]->resetFramesCaught(); From 7f293115c4710c9e5e0160df9b0eaf8873ae6aa8 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Mon, 10 Oct 2016 08:43:18 +0200 Subject: [PATCH 5/7] moved f_activate to receiver funcs from detectors funcs --- slsReceiverSoftware/include/sls_receiver_funcs.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/slsReceiverSoftware/include/sls_receiver_funcs.h b/slsReceiverSoftware/include/sls_receiver_funcs.h index e1ef930402..c5e99c1b96 100644 --- a/slsReceiverSoftware/include/sls_receiver_funcs.h +++ b/slsReceiverSoftware/include/sls_receiver_funcs.h @@ -49,7 +49,9 @@ enum { F_ENABLE_RECEIVER_OVERWRITE, /**< set overwrite flag in receiver */ F_ENABLE_RECEIVER_TEN_GIGA, /**< enable 10Gbe in receiver */ - F_SET_RECEIVER_FIFO_DEPTH /**< set receiver fifo depth */ + F_SET_RECEIVER_FIFO_DEPTH, /**< set receiver fifo depth */ + + F_ACTIVATE /** < activate/deactivate readout */ /* Always append functions hereafter!!! */ }; From 4a7e2466040542d164b037f6cd2f6aee3aeadec7 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 19 Oct 2016 10:21:29 +0200 Subject: [PATCH 6/7] removed asking only 1 for framescaugh --- .../multiSlsDetector/multiSlsDetector.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp index 5d6ef18f47..aea44e42f8 100644 --- a/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp +++ b/slsDetectorSoftware/multiSlsDetector/multiSlsDetector.cpp @@ -4933,15 +4933,6 @@ int multiSlsDetector::getReceiverCurrentFrameIndex() { int multiSlsDetector::resetFramesCaught() { int ret=-100, ret1; - if(thisMultiDetector->numberOfDetectors>10) { - if (detectors[0]){ - ret =detectors[0]->getFramesCaughtByReceiver(); - if(detectors[0]->getErrorMask()) - setErrorMask(getErrorMask()|(1<<0)); - } - return ret; - } - for (int i=0; inumberOfDetectors; i++){ if (detectors[i]){ ret1=detectors[i]->resetFramesCaught(); From 839896c7e688f6c3fdd49593e4aa71fe65ade383 Mon Sep 17 00:00:00 2001 From: Dhanya Maliakal Date: Wed, 19 Oct 2016 15:53:26 +0200 Subject: [PATCH 7/7] fixed the print file packet loss progress bug --- .../src/UDPStandardImplementation.cpp | 49 +++++++++++++------ 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index d64692b658..bb758f6792 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -1359,9 +1359,12 @@ int UDPStandardImplementation::setupWriter(){ int UDPStandardImplementation::createNewFile(){ FILE_LOG(logDEBUG) << __AT__ << " called"; + int index = 0; - if(packetsCaught) + if(packetsCaught){ index = frameIndex; + cout << endl << "File:" << completeFileName <