- initial import

git-svn-id: http://moon:8086/svn/mips@1 a8ebac50-d88d-4704-bea3-6648445a41b3
This commit is contained in:
2014-07-20 15:01:37 +00:00
commit 26291bca3d
1549 changed files with 3997969 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
#
# Makefile
#
#
# RTEMS_MAKEFILE_PATH is typically set in an environment variable
#
PGM=${ARCH}/base_sp.exe
# optional managers required
MANAGERS=all
# C source names
CSRCS = init.c apptask.c raytrace.c life.c
COBJS = $(CSRCS:%.c=${ARCH}/%.o)
include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
include $(RTEMS_CUSTOM)
include $(PROJECT_ROOT)/make/leaf.cfg
CPU_CFLAGS += -lm -lc -DJMIPS_VGA
OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)
all: ${ARCH} $(PGM)
$(PGM): $(OBJS)
$(make-exe)
+442
View File
@@ -0,0 +1,442 @@
/* Application_task
*
* This routine is as an example of an application task which
* prints a message including its RTEMS task id. This task
* then invokes exit to return to the monitor.
*
* Input parameters: NONE
*
* Output parameters: NONE
*
* COPYRIGHT (c) 1989-1999.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id: apptask.c,v 1.12 2003/09/04 18:53:41 joel Exp $
*/
#include "system.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
rtems_isr user_isr(rtems_vector_number vector)
{
volatile uint32_t *pReg = (uint32_t*)J3K_GPIO_0_BASE;
rtems_interrupt_level level = 1;
/* rtems_interrupt_disable(level);*/
printk("Interrupt %d\n", vector);
while(*pReg);
/* rtems_interrupt_enable(level);*/
}
#define PI_SCALE 10000
#define PI_MAXARR 2800
#define PI_ARRINIT 2000
int Test15_pi_calc()
{
int i, j, k;
int carry = 0;
int arr[PI_MAXARR+1];
uint32_t int_part, result;
uint16_t pi_res[200] = {0};
uint16_t pi_ref[200] =
{
3141,5926,5358,9793,2384,6264,3383,2795, 288,4197,1693,9937,5105,8209,7494,4592,3078,1640,6286,2089,9862,8034,8253,4211,
7067,9821,4808,6513,2823, 664,7093,8446, 955, 582,2317,2535,9408,1284,8111,7450,2841, 270,1938,5211, 555,9644,6229,4895,
4930,3819,6442,8810,9756,6593,3446,1284,7564,8233,7867,8316,5271,2019, 914,5648,5669,2346, 348,6104,5432,6648,2133,9360,
7260,2491,4127,3724,5870, 660,6315,5881,7488,1520,9209,6282,9254, 917,1536,4367,8925,9036, 11,3305,3054,8820,4665,2138,
4146,9519,4151,1609,4330,5727, 365,7595,9195,3092,1861,1738,1932,6117,9310,5118,5480,7446,2379,9627,4956,7351,8857,5272,
4891,2279,3818,3011,9491,2983,3673,3624,4065,6643, 860,2139,4946,3952,2473,7190,7021,7986, 943,7027,7053,9217,1762,9317,
6752,3846,7481,8467,6694, 513,2000,5681,2714,5263,5608,2778,5771,3427,5778,9609,1736,3717,8721,4684,4090,1224,9534,3014,
6549,5853,7105, 792,2796,8925,8923,5420,1995,6112,1290,2196, 864, 344,1815,9813,6297,7477,1309,9605,1870,7211,3499,9999,
8372,9780,4995,1059,7317,3281,6096,3185
};
// setbuf(stdout, NULL);
k = 0;
for (i = 0; i <= PI_MAXARR; ++i)
arr[i] = PI_ARRINIT;
for (i = PI_MAXARR; i; i -= 14)
{
int sum = 0;
for (j = i; j > 0; --j)
{
sum = sum*j + PI_SCALE*arr[j];
arr[j] = sum % (j*2-1);
sum /= (j*2-1);
}
result = carry + sum/PI_SCALE;
int_part = PI_SCALE * (result / PI_SCALE);
pi_res[k] = (uint16_t)(result - int_part);
carry = sum % PI_SCALE;
k++;
}
for (k=0; k < sizeof(pi_ref)/sizeof(uint16_t); k++)
{
printf("%d", pi_res[k]);
}
printf("\n");
if(memcmp(pi_res, pi_ref, sizeof(pi_ref)))
return -1;
return 0;
}
#define TEST_SIZE (16*1024*1024) // Bytes
#define SMALL_TEST_SIZE (8192) // Bytes
uint32_t clock_us(void)
{
rtems_status_code sc;
rtems_clock_time_value val;
sc = rtems_clock_get(RTEMS_CLOCK_GET_TIME_VALUE, &val);
if (sc != RTEMS_SUCCESSFUL)
fprintf(stderr, "rtems_clock_get(): Error %08X\n", sc);
return 1000000*val.seconds + val.microseconds;
}
void mem_test(void)
{
int result, i, j, cnt, size;
uint32_t start, end;
FILE *pFile;
uint8_t *ram8 = NULL;
uint16_t *ram16 = NULL;
uint32_t *ram32 = NULL;
uint32_t *pSrc32, *pDst32;
pFile = fopen("/dev/psaux0", "w+");
if (!pFile)
{
fprintf(stderr, "Error opening /dev/ttyS0\n");
exit(1);
}
// Memtest BEGIN
fprintf(pFile, "SDRAM Memory Test\n");
fprintf(pFile, "Test size %d kByte\n\n", TEST_SIZE/1024);
ram8 = (uint8_t*)calloc(TEST_SIZE,sizeof(uint8_t));
fprintf(pFile, "Zeroize Memory (memset)...");
start = clock_us();
memset(ram8, 0, TEST_SIZE);
end = clock_us();
fprintf(pFile, "done (%.2f MByte/s)\n", (double)TEST_SIZE/(end-start));
free(ram8);
ram8 = (uint8_t*)calloc(TEST_SIZE,sizeof(uint8_t));
fprintf(pFile, "Zeroize Memory (8-Bit access)...");
start = clock_us();
for (i=0; i < TEST_SIZE; i++)
ram8[i] = (uint8_t)0;
end = clock_us();
fprintf(pFile, "done (%.2f MByte/s)\n", (double)TEST_SIZE/(end-start));
free(ram8);
ram16 = (uint16_t*)calloc(TEST_SIZE/2,sizeof(uint16_t));
fprintf(pFile, "Zeroize Memory (16-Bit access)...");
start = clock_us();
for (i=0; i < TEST_SIZE/2; i++)
ram16[i] = (uint16_t)0;
end = clock_us();
fprintf(pFile, "done (%.2f MByte/s)\n", (double)TEST_SIZE/(end-start));
free(ram16);
ram32 = (uint32_t*)calloc(TEST_SIZE/4,sizeof(uint32_t));
fprintf(pFile, "Zeroize Memory (32-Bit access)...");
start = clock_us();
for (i=0; i < TEST_SIZE/4; i++)
ram32[i] = (uint32_t)0;
end = clock_us();
fprintf(pFile, "done (%.2f MByte/s)\n", (double)TEST_SIZE/(end-start));
free(ram32);
ram8 = (uint8_t*)calloc(TEST_SIZE,sizeof(uint8_t));
fprintf(pFile, "Write (8-Bit access)...");
start = clock_us();
for (i=0; i < TEST_SIZE; i++)
ram8[i] = (uint8_t)i;
end = clock_us();
fprintf(pFile, "done (%.2f MByte/s)\n", (double)TEST_SIZE/(end-start));
fprintf(pFile, "Verify (8-Bit access)...");
start = clock_us();
for (i=TEST_SIZE-1; i >= 0; i--)
if (ram8[i] != (uint8_t)i)
break;
end = clock_us();
i++;
if (i)
fprintf(pFile, "failed\r\n");
else
fprintf(pFile, "passed (%.2f MByte/s)\n", (double)TEST_SIZE/(end-start));
free(ram8);
ram16 = (uint16_t*)calloc(TEST_SIZE/2,sizeof(uint16_t));
fprintf(pFile, "Write (16-Bit access)...");
start = clock_us();
for (i=0; i < TEST_SIZE/2; i++)
ram16[i] = (uint16_t)i;
end = clock_us();
fprintf(pFile, "done (%.2f MByte/s)\n", (double)TEST_SIZE/(end-start));
fprintf(pFile, "Verify (16-Bit access)...");
start = clock_us();
for (i=TEST_SIZE/2-1; i >= 0; i--)
if (ram16[i] != (uint16_t)i)
break;
end = clock_us();
i++;
if (i)
fprintf(pFile, "failed\r\n");
else
fprintf(pFile, "passed (%.2f MByte/s)\n", (double)TEST_SIZE/(end-start));
free(ram16);
ram32 = (uint32_t*)calloc(TEST_SIZE/4,sizeof(uint32_t));
fprintf(pFile, "Write (32-Bit access)...");
start = clock_us();
for (i=0; i < TEST_SIZE/4; i++)
{
ram32[i] = (uint32_t)i;
}
end = clock_us();
fprintf(pFile, "done (%.2f MByte/s)\n", (double)TEST_SIZE/(end-start));
fprintf(pFile, "Verify (32-Bit access)...");
start = clock_us();
for (i=TEST_SIZE/4-1; i >= 0; i--)
{
if (ram32[i] != (uint32_t)i)
break;
}
end = clock_us();
i++;
if (i)
fprintf(pFile, "failed\r\n");
else
fprintf(pFile, "passed (%.2f MByte/s)\n", (double)TEST_SIZE/(end-start));
free(ram32);
fprintf(pFile, "Memcpy() Test \n");
pSrc32 = (uint32_t*)calloc(TEST_SIZE/8,sizeof(uint32_t));
pDst32 = (uint32_t*)calloc(TEST_SIZE/8,sizeof(uint32_t));
fprintf(pFile, "Copying %d kBytes...", TEST_SIZE/(2*1024));
start = clock_us();
memcpy(pDst32, pSrc32, TEST_SIZE/2);
end = clock_us();
fprintf(pFile, "done (%.2f MByte/s)\n", (double)TEST_SIZE/(2*(end-start)));
free(pSrc32);
free(pDst32);
fprintf(pFile, "Memmove() Test \n");
pSrc32 = (uint32_t*)calloc(TEST_SIZE/8,sizeof(uint32_t));
pDst32 = (uint32_t*)calloc(TEST_SIZE/8,sizeof(uint32_t));
fprintf(pFile, "Moving %d kBytes...", TEST_SIZE/(2*1024));
start = clock_us();
memmove(pDst32, pSrc32, TEST_SIZE/2);
end = clock_us();
fprintf(pFile, "done (%.2f MByte/s)\n", (double)TEST_SIZE/(2*(end-start)));
free(pSrc32);
free(pDst32);
fprintf(pFile, "Small data test\r\n");
fprintf(pFile, "Test size %d kByte\n\n", SMALL_TEST_SIZE/1024);
fprintf(pFile, "Write (32-Bit access)...");
ram32 = (uint32_t*)calloc(SMALL_TEST_SIZE/4,sizeof(uint32_t));
start = clock_us();
for (j=0; j < TEST_SIZE/SMALL_TEST_SIZE; j++)
for (i=0; i < SMALL_TEST_SIZE/4; i++)
ram32[i] = (uint32_t)i;
end = clock_us();
fprintf(pFile, "done (%.2f MByte/s)\n", (double)TEST_SIZE/(end-start));
// -------------------------------------------------------------------
// Verify
fprintf(pFile, "Verify (32-Bit access)...");
start = clock_us();
for (j=0; j < TEST_SIZE/SMALL_TEST_SIZE; j++)
for (i=SMALL_TEST_SIZE/4-1; i >= 0; i--)
if (ram32[i] != (uint32_t)i)
break;
end = clock_us();
i++;
if (i)
fprintf(pFile, "failed\r\n");
else
fprintf(pFile, "passed (%.2f MByte/s)\n", (double)TEST_SIZE/(end-start));
// -------------------------------------------------------------------
free(ram32);
fprintf(pFile, "Boot code read \n");
size = 0x2000;
pSrc32 = (uint32_t*)0xBFC00000;
pDst32 = (uint32_t*)calloc(size,sizeof(uint32_t));
memcpy(pDst32, pSrc32, size);
fprintf(pFile, "Verify Boot code...");
for (i=size/4-1; i >= 0; i--)
if (pDst32[i] != pSrc32[i])
break;
i++;
if (i)
fprintf(pFile, "failed\r\n");
else
fprintf(pFile, "passed\r\n");
free(pDst32);
fclose(pFile);
// Memtest END
// ----------------------------------------------------------
}
extern void PrintConsoleInfo(int minor);
rtems_task Application_task1(rtems_task_argument argument)
{
rtems_id tid;
rtems_status_code status;
rtems_time_of_day time;
int lastmin = 0;
status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &tid );
printf( "Application task was invoked with argument (%d) "
"and has id of 0x%x\n", argument, tid );
rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
lastmin = time.minute;
while(1)
{
Test15_pi_calc();
rtems_cpu_usage_report_with_plugin(stdout, (rtems_printk_plugin_t)fprintf);
rtems_stack_checker_report_usage_with_plugin(stdout, (rtems_printk_plugin_t)fprintf);
rtems_clock_get( RTEMS_CLOCK_GET_TOD, &time );
printf( "%02d:%02d:%02d %02d/%02d/%04d\n", time.hour, time.minute, time.second, time.month, time.day, time.year);
if (((lastmin) <= time.minute) || !time.minute)
{
status = rtems_task_ident(rtems_build_name( 'L', 'I', 'F', 'E' ), RTEMS_SEARCH_ALL_NODES, &tid);
if (status == RTEMS_SUCCESSFUL)
{
if (RTEMS_ALREADY_SUSPENDED == rtems_task_is_suspended(tid))
{
printf("Trying to restart task 0x%08x..", tid);
status = rtems_task_restart(tid, 0);
if (status == RTEMS_SUCCESSFUL)
printf("success\n");
else
printf("failed\n");
lastmin = (time.minute + 5) % 60;
}
else
{
printf("Trying to suspend task 0x%08x..", tid);
status = rtems_task_suspend(tid);
if (status == RTEMS_SUCCESSFUL)
printf("success\n");
else
printf("failed\n");
lastmin = (time.minute + 1) % 60;
}
}
}
rtems_cpu_usage_reset();
rtems_task_wake_after(1000);
}
}
rtems_task Application_task2(rtems_task_argument argument)
{
rtems_id tid;
rtems_status_code status;
status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &tid );
printf( "Application task was invoked with argument (%d) "
"and has id of 0x%x\n", argument, tid );
while(1)
{
mem_test();
rtems_task_wake_after(10000);
}
}
void raytrace(void);
rtems_task Application_task3(rtems_task_argument argument)
{
rtems_id tid;
rtems_status_code status;
rtems_isr_entry old;
status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &tid );
status = rtems_interrupt_catch(user_isr, J3K_IRQ_DEBUG, &old);
if (status != RTEMS_SUCCESSFUL)
fprintf(stderr, "rtems_interrupt_catch(): Error %08X\n", status);
printf( "Application task was invoked with argument (0x%x) "
"and has id of 0x%x\n", argument, tid );
while(1)
{
raytrace();
rtems_task_wake_after(30000);
}
}
void life(uint32_t seed);
rtems_task Application_task4(rtems_task_argument argument)
{
rtems_id tid;
rtems_status_code status;
status = rtems_task_ident( RTEMS_SELF, RTEMS_SEARCH_ALL_NODES, &tid );
printf( "Application task was invoked with argument (0x%x) "
"and has id of 0x%x\n", argument, tid );
life(clock_us());
rtems_task_delete(RTEMS_SELF);
}
File diff suppressed because it is too large Load Diff
+12
View File
@@ -0,0 +1,12 @@
#
# $Id: base_sp.doc,v 1.8 2003/09/04 18:53:41 joel Exp $
#
# COPYRIGHT (c) 1989-1999.
# On-Line Applications Research Corporation (OAR).
#
# The license and distribution terms for this file may be
# found in the file LICENSE in this distribution or at
# http://www.rtems.com/license/LICENSE.
#
+5
View File
@@ -0,0 +1,5 @@
*** SAMPLE SINGLE PROCESSOR APPLICATION ***
Creating and starting an application task
Application task was invoked with argument (0) and has id of 0x10002
*** END OF SAMPLE SINGLE PROCESSOR APPLICATION ***
+148
View File
@@ -0,0 +1,148 @@
/* Init
*
* This routine is the initialization task for this test program.
* It is called from init_exec and has the responsibility for creating
* and starting the tasks that make up the test. If the time of day
* clock is required for the application, the current time might be
* set by this task.
*
* Input parameters: NONE
*
* Output parameters: NONE
*
* COPYRIGHT (c) 1989-1999.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id: init.c,v 1.11 2003/09/04 18:53:41 joel Exp $
*/
#define CONFIGURE_INIT
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include "system.h"
#define ARGUMENT 0
uint64_t *pPixelBuf;
uint32_t screen_nx;
uint32_t screen_ny;
rtems_task Init(
rtems_task_argument argument
)
{
volatile uint32_t *pVGA_ctrl = (uint32_t*)J3K_VGA_CTRL;
volatile uint32_t *pVGA_fb_front = (uint32_t*)J3K_VGA_FB_FRONT;
volatile uint32_t *pVGA_fb_back = (uint32_t*)J3K_VGA_FB_BACK;
volatile uint32_t *pVGA_cgcol = (uint32_t*)J3K_VGA_CGCOL;
volatile uint32_t *pVGA_res = (uint32_t*)J3K_VGA_RES;
rtems_name task_name;
rtems_id tid;
rtems_status_code status;
rtems_time_of_day time_of_day;
char sel[80];
screen_nx = *pVGA_res & 0xFFF;
screen_ny = (*pVGA_res >> 12) & 0xFFF;
*pVGA_ctrl &= ~J3K_VGA_BIT_MSTEN;
pPixelBuf = (uint64_t*)calloc(screen_nx*screen_ny, sizeof(uint32_t));
*pVGA_fb_front = (uint32_t)pPixelBuf;
*pVGA_fb_back = (uint32_t)pPixelBuf;
*pVGA_cgcol = 0x0000F000;
memset(&time_of_day, 0, sizeof(rtems_time_of_day));
setbuf(stdout, NULL);
status = rtems_clock_get(RTEMS_CLOCK_GET_TOD, &time_of_day);
if (status != RTEMS_SUCCESSFUL)
{
printf("Set current time and date!\n");
do
{
printf("Date\n");
printf("Year : ");
scanf("%uL", &time_of_day.year);
printf("Month : ");
scanf("%uL", &time_of_day.month);
printf("Day : ");
scanf("%uL", &time_of_day.day);
printf("Time\n");
printf("Hour : ");
scanf("%uL", &time_of_day.hour);
printf("Minute : ");
scanf("%uL", &time_of_day.minute);
printf("Second : ");
scanf("%uL", &time_of_day.second);
status = rtems_clock_set(&time_of_day);
if (status != RTEMS_SUCCESSFUL)
{
printf("Invalid date. Try again.\n");
continue;
}
printf("\nOK? [y/n]: ");
scanf("%s", sel);
printf("sel=%d\n", (int)sel[0]);
} while(toupper(sel[0]) == 'N');
rtems_clock_get(RTEMS_CLOCK_GET_TOD, &time_of_day);
setRealTime(&time_of_day);
}
printf( "\n\n*** SAMPLE SINGLE PROCESSOR APPLICATION ***\n" );
printf( "Creating and starting an application task\n" );
task_name = rtems_build_name( 'P', 'I', ' ', ' ' );
status = rtems_task_create( task_name, 100, 4*RTEMS_MINIMUM_STACK_SIZE,
RTEMS_TIMESLICE | RTEMS_PREEMPT, RTEMS_DEFAULT_ATTRIBUTES, &tid );
if (status != RTEMS_SUCCESSFUL)
rtems_panic("Can't create task: %s", rtems_status_text(status));
status = rtems_task_start( tid, Application_task1, ARGUMENT );
if (status != RTEMS_SUCCESSFUL)
rtems_panic("Can't start task: %s", rtems_status_text(status));
task_name = rtems_build_name( 'M', 'E', 'M', ' ' );
status = rtems_task_create( task_name, 90, RTEMS_MINIMUM_STACK_SIZE,
RTEMS_TIMESLICE | RTEMS_PREEMPT, RTEMS_DEFAULT_ATTRIBUTES, &tid );
if (status != RTEMS_SUCCESSFUL)
rtems_panic("Can't create task: %s", rtems_status_text(status));
status = rtems_task_start( tid, Application_task2, ARGUMENT );
if (status != RTEMS_SUCCESSFUL)
rtems_panic("Can't start task: %s", rtems_status_text(status));
task_name = rtems_build_name( 'R', 'A', 'Y', ' ' );
status = rtems_task_create( task_name, 100, 2*RTEMS_MINIMUM_STACK_SIZE,
RTEMS_TIMESLICE | RTEMS_PREEMPT, RTEMS_DEFAULT_ATTRIBUTES, &tid );
if (status != RTEMS_SUCCESSFUL)
rtems_panic("Can't create task: %s", rtems_status_text(status));
status = rtems_task_start( tid, Application_task3, ARGUMENT );
if (status != RTEMS_SUCCESSFUL)
rtems_panic("Can't start task: %s", rtems_status_text(status));
task_name = rtems_build_name( 'L', 'I', 'F', 'E' );
status = rtems_task_create( task_name, 80, 128*RTEMS_MINIMUM_STACK_SIZE,
RTEMS_TIMESLICE | RTEMS_PREEMPT, RTEMS_DEFAULT_ATTRIBUTES, &tid );
if (status != RTEMS_SUCCESSFUL)
rtems_panic("Can't create task: %s", rtems_status_text(status));
status = rtems_task_start( tid, Application_task4, ARGUMENT );
if (status != RTEMS_SUCCESSFUL)
rtems_panic("Can't start task: %s", rtems_status_text(status));
*pVGA_ctrl |= J3K_VGA_BIT_MSTEN;
status = rtems_task_delete( RTEMS_SELF );
}
+212
View File
@@ -0,0 +1,212 @@
/* life.c - demonstrator for later Mips+LCD game of life
*
* 23.03.06 - MACRO-based version
* 22.02.06 - new file
*/
//#include "ks0108.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "system.h"
extern uint64_t *pPixelBuf;
extern uint32_t screen_nx;
extern uint32_t screen_ny;
#define NX (screen_nx/4) // 70 // 128 // 48 // 128
#define NY (3*NX/4) // 31 // 64 // 27 // 64
#define SCREEN_X screen_nx
#define SCREEN_Y screen_ny
#define SCALE_X (2)
#define SCALE_Y (2)
#define OFFSET_X ((SCREEN_X-(SCALE_X*NX))/1)
#define OFFSET_Y ((SCREEN_Y-(SCALE_Y*NY))/1)
// OCCUPIED must be uneven, EMPTY even.
#define OCCUPIED 0x77771111
#define EMPTY 0xeeee0000
#define MATRIX( row, col ) (*(matrix + (NX*col) + row ))
#define FUTURE( row, col ) (*(future + (NX*col) + row ))
static uint32_t *g_gx_buff;
int clock_lfsr32()
{
return rand();
}
/* return a pseudo-random integer in the range 0..1023 */
int random1023() {
int tmp;
tmp = clock_lfsr32();
return tmp & 0x000003ff;
}
typedef struct _scolor_t
{
uint8_t r, g, b, a;
} __attribute__ ((__packed__)) color_t;
void DrawPixel(uint32_t x, uint32_t y, color_t *pColor)
{
int i, j;
for (i=0; i < SCALE_Y; i++)
for (j=0; j < SCALE_X; j++)
g_gx_buff[(OFFSET_X+SCALE_X*x+j) + SCREEN_X*(OFFSET_Y+SCALE_Y*y+i)] = *((uint32_t*)pColor);
}
/* MSB/LSB in y-Richtung vertauscht */
void displayBoard1( int* matrix )
{
int x, y;
int mask, accu;
uint32_t color;
for( x=0; x < NX; x++ )
{
mask = 0x80;
accu = 0x00;
for( y=0; y < NY; y++ )
{
color = (uint32_t)-(MATRIX(x,y) & 0x1);
DrawPixel(x, y, (color_t*)&color);
// if (MATRIX( x, y ) != OCCUPIED)
// {
// accu |= mask;
// }
// mask = mask >> 1;
// color = 0;
// DrawPixel(x, (y>>3), (color_t*)&color);
// if (mask == 0)
// {
// color = accu;
// DrawPixel(x, (y>>3), (color_t*)&color);
// mask = 0x80;
// accu = 0x00;
// }
}
// color = accu;
// DrawPixel(x, (y>>3), (color_t*)&color);
}
// *(matrix-15) = 0xdead0000;
// *(matrix-16) = *(matrix-16) + 1;
}
void initializeBoard( int* matrix ) {
int x, y;
for( x=0; x < NX; x++ ) {
for( y=0; y < NY; y++ ) {
int d = random1023();
if (d > 920) MATRIX( x, y ) = OCCUPIED;
else MATRIX( x, y ) = EMPTY;
}
}
}
int countNeighbors( int* matrix, int i, int j ) {
int im = i-1;
int ip = i+1;
int jm = j-1;
int jp = j+1;
int n = 0;
// wrap-around
if (ip >= NX) ip = 0;
if (jp >= NY) jp = 0;
if (im < 0) im = NX-1;
if (jm < 0) jm = NY-1;
// check eight neighbors
n += MATRIX(im, jm ) & 0x1; // nw
n += MATRIX(im, j ) & 0x1; // west
n += MATRIX(im, jp ) & 0x1; // sw
n += MATRIX(i, jm ) & 0x1; // north
// n += MATRIX(i, j ) & 0x1; // center
n += MATRIX(i, jp ) & 0x1; // south
n += MATRIX(ip, jm ) & 0x1; // ne
n += MATRIX(ip, j ) & 0x1; // east
n += MATRIX(ip, jp ) & 0x1; // se
return n;
}
/**
* the actual game of life algorithm: cell is born when three neighbors,
* survives when exactly two live neighbors, dies otherwise.
*/
void nextGeneration( int* matrix, int* future ) {
int i, j;
int lifes = 0;
for( i=0; i < NX; i++ ) {
for( j=0; j < NY; j++ ) {
// count neighbors
int n = countNeighbors( matrix, i, j );
//if ((n != 0) && (random1023() > 990)) { // some slight random offset
// if (random1023() > 500) FUTURE(i,j) = OCCUPIED;
// else FUTURE(i,j) = EMPTY;
//}
// else if (n == 3) FUTURE(i,j) = OCCUPIED;
if (n == 3) FUTURE(i,j) = OCCUPIED;
else if ((n == 2) && (MATRIX(i,j) == OCCUPIED)) FUTURE(i,j) = OCCUPIED;
else FUTURE(i,j) = EMPTY;
if (FUTURE(i,j) == OCCUPIED) lifes++;
}
}
// generation ++;
// avoid extinction :-)
if (lifes < 10) {
// printf( "CREATING A NEW POPULATION\n\n\n" );
initializeBoard( matrix );
}
else { // swap buffers: C PROHIBITS ASSIGNING TO ARRAY TYPES
for( i=0; i < NX; i++ ) {
for( j=0; j < NY; j++ ) {
MATRIX(i,j) = FUTURE(i,j);
}
}
}
}
void life(uint32_t seed)
{
int matrix[320*240];
int future[320*240];
g_gx_buff = (uint32_t*)pPixelBuf;
srand(seed);
initializeBoard( matrix );
while( 1 )
{
displayBoard1( matrix );
nextGeneration( matrix, future );
rtems_task_wake_after(50);
}
}
Binary file not shown.
File diff suppressed because it is too large Load Diff
+819
View File
@@ -0,0 +1,819 @@
S01A00006F2D6F7074696D697A652F626173655F73702E73726563F1
S3FF40000200000000003C06400024C6021400C0000800000000000000003C022410344200E040826000408068003C020410344200E0408260003C0240002442024400400008000000003C1C4004279C99003C02400324421D203C03400B246350F0AC4000000043082B1420FFFD244200043C08400B250850F02508FFE00100E821000020210C000F88000000000C0000A400402021000000001000FFFE000000000000000027BDFFD8AFB300203C13400392621D20AFBF0024AFB2001CAFB1001814400023AFB000143C0240033C034003245210082463100C007218233C104003000318838E041D242471FFFF0091102B1040000F3C0200002484000100048E
S3FF400002FA1080024210218C430000000000000060F809AE041D248E041D24000000000091102B1440FFF6248400012484FFFF3C0200002442000010400005240200013C0440030C0000002484D19024020001A2621D208FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD00283C02000027BDFFE82442000010400006AFBF00143C0440033C0540032484D1900C00000024A51D283C0440038C82101000000000104000073C0200002459000013200004248410108FBF00140320000827BD00188FBF00140000000003E0000827BD00180000000027BDFFE800002821AFB00010AFBF00140C000104008080218F848018000000008C82003C41
S3FF400003F40000000010400003000000000040F809000000000C00252D0200202127BDFFC8AFB7002C8F978018AFBE0030AFB60028AFB40020AFBF0034AFB50024AFB3001CAFB20018AFB10014AFB00010AFA4003800A0A02126F60148241E00018EF20148000000001240004002C0A8218E430004000000002470FFFF0600000C246200010002108002428821128000172462FFFF8E22010000000000105400132462FFFF2610FFFF0601FFF82631FFFC14600046000000008E420000000000001040004300000000AEA200000C002348024020218EA2000000000000104000230040902108000118000000008E2600001050002E00000000AE20000010C096
S3FF400004EEFFE9021E20048E420188000000000082102410400022006098218E42018C000000000082102414400024000000008E2500808FA4003800C0F809000000008E430004000000001473FFC6000000008EA20000000000001052FFD42610FFFF8EF20148000000001640FFC202C0A8218FBF00348FBE00308FB7002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD003800C0F809000000000800014B00000000AE5000040800013B020018218E24008000C0F809000000000800014B000000008E420000080001330240A821000000000000000027BDFF50AFB000883C10A003360200148C4800008C46000000
S3FF400005E831080FFF0006330230C60FFF00C800188E0700002402FFFD00E238243C0340033C024003AC6620F8AC4820F424050004AE070000AFBF00ACAFB1008CAFBE00A800002012AFB700A4AFB600A0AFB5009CAFB40098AFB300940C0021CCAFB2009036030018AC620000360400103403F0003610001CAE02000027B1001CAC8300008F838014AFA0001CAE200004AE200008AE20000CAE200010AE200014AE2000188C640008000028213C0340030C0076F4AC6220F0000020210C003240022028211440009D000000003C0440030C0075722484D2E03C0440030C0075722484D3103C04504927B0001834842020240500643406800024070200AFA026
S3FF400006E200100C003814AFB0001414400084000000003C0540008FA4001824A519000C0039440000302114400075000000003C044D4534844D202405005A2406200024070200AFA000100C003814AFB0001414400063000000003C0540008FA4001824A516D40C0039440000302114400054000000003C04524134845920240500642406400024070200AFA000100C003814AFB0001414400042000000003C0540008FA4001824A50A900C0039440000302114400033000000003C044C4934844645240500503C06001024070200AFB000140C003814AFA0001014400021000000003C0540008FA4001824A50B780C00394400003021104000083C03A003AE
S3FF400007DC0C0021EC004020213C0440032484D3540C002275004028213C03A0038C6200000000202134420002AC6200000C003878000000008FBF00AC8FBE00A88FB700A48FB600A08FB5009C8FB400988FB300948FB200908FB1008C8FB0008803E0000827BD00B00C0021EC004020213C0440032484D33C0C00227500402821080001F13C0540000C0021EC004020213C0440032484D3540C00227500402821080001E73C044C490C0021EC004020213C0440032484D33C0C00227500402821080001E03C0540000C0021EC004020213C0440032484D3540C00227500402821080001D63C0452410C0021EC004020213C0440032484D33C0C0022750040FD
S3FF400008D62821080001CF3C0540000C0021EC004020213C0440032484D3540C00227500402821080001C53C044D450C0021EC004020213C0440032484D33C0C00227500402821080001BE3C0540003C0440030C0075722484D2303C0340033C0240032470D260245ED2C427B7002027B6002427B5002827B4002C27B300300800025E2412004E3C0440030C0075722484D2A883A400380C0079C0000000001452003E000000003C0440030C0075722484D24C3C0440030C0074942484D254022028210C0076E2020020213C0440030C0074942484D26402E028210C0076E2020020213C0440030C0074942484D27002C028210C0076E2020020213C044003AF
S3FF400009D00C0075722484D27C3C0440030C0074942484D28402A028210C0076E2020020213C0440030C0074942484D290028028210C0076E2020020213C0440030C0074942484D29C020020210C0076E2026028210C003320022020211440FFCB03C020210C007494000000003C0440032484D2D40C0076E227A500383C04400383A500380C0074942484D2D883A400380C0079C0000000001052FFC400000000000020210C003240022028210C0013EB02202021080001AD3C044003000000000000000027BDFFE0AFB000180000282127A6001000808021AFBF001C0C0038AC000020213C04400027A6001424841B1C0C003578240500221440000C004092
S3FF40000ACA30213C0440038FA600102484D3B80C007494020028210C000B1B000000000C00399024047530080002B8000000008F8280143C0540038C44000C0C006CD424A5D390080002B43C04400327BDFFE024040004AFBF001C0C00324027A5001010400006004030218F8280143C0540038C44000C0C006CD424A5D4008FA400108FBF001C000410C000041A00006218230003118000431023004410218FA30014000211800043102103E0000827BD002027BDFFE0AFB0001827A600100080802100002821AFBF001C0C0038AC000020218FA600103C044003020028210C0074942484D3B80C0002C5000000000C000CDB004020210C0038780000202174
S3FF40000BC48FBF001C8FB0001803E0000827BD00203C0440033C05400327BDFFC82484D42024A5D42CAFB3001CAFBF0034AFBE0030AFB7002CAFB60028AFB50024AFB40020AFB20018AFB100140C006CCFAFB000101040026D004098213C044003004038212484D44C24050001240600120C006ED43C15400324064000026020210C006CD426A5D4603C0401000C0021CC240500013C04400302603821004088212484D478240500010C006ED42406001A0C0002C53C14400302202021000028213C0601000C007038004080210C0002C53C1640030C000E10005020238E85D8E48E84D8E0006038210C000CF800403021006038210040302126C5D4940C007E
S3FF40000CBE6CD4026020210C002348022020213C0401000C0021CC240500013C0440032484D4AC2405000124060020026038210C006ED4004080210C0002C500000000004088213C0201000202182102001021A0400000244200011443FFFD000000000C0002C5000000000C000E10005120238E85D8E48E84D8E0006038210C000CF800403021006038210040302126C5D4940C006CD4026020210C002348020020213C0400800C0021CC240500023C0440032484D4D02405000124060021026038210C006ED4004080210C0002C500000000004088213C0201000202182102001021A4400000244200021443FFFD000000000C0002C5000000000C000E10E4
S3FF40000DB8005120238E85D8E48E84D8E0006038210C000CF800403021006038210040302126C5D4940C006CD4026020210C002348020020213C0400400C0021CC240500043C0440032484D4F42405000124060021026038210C006ED4004080210C0002C500000000004088213C0201000202182102001021AC400000244200041443FFFD000000000C0002C5000000000C000E10005120238E85D8E48E84D8E0006038210C000CF800403021006038210040302126C5D4940C006CD4026020210C002348020020213C0401000C0021CC240500013C0440032484D5182405000124060017026038210C006ED4004080210C0002C500000000004088210000CB
S3FF40000EB218213C04010002031021A0430000246300011464FFFD020310210C0002C5000000000C000E10005120238E85D8E48E84D8E0006038210C000CF8004030210060382102602021004030210C006CD426C5D4943C04400324050001240600182484D5300C006ED4026038210C0002C500000000004088213C0200FF3445FFFF080003D02406FFFF10A601AD00000000020510219044000030A300FF1083FFFA24A5FFFF0C0002C524A500013C0440032484D54C24050001240600080C006ED4026038210C002348020020213C0400800C0021CC240500023C0440032484D5702405000124060018026038210C006ED4004088210C0002C500000000F1
S3FF40000FAC0040802102201821000010213C040080A4620000244200011444FFFD246300020C0002C5000000000C000E10005020238E85D8E48E84D8E0006038210C000CF8004030210060382102602021004030210C006CD426C5D4943C0440032484D58C24050001240600190C006ED4026038210C0002C500000000004080213C0200FF3442FFFE3C03007F022228213464FFFF080004132406FFFF1086017B24A5FFFE94A300003082FFFF1062FFFB2484FFFF0C0002C5248400013C0440032484D54C24050001240600080C006ED4026038210C002348022020213C1740033C0400400C0021CC2405000426E4D5A82405000124060018026038210C0043
S3FF400010A66ED4004088210C0002C5000000000040802102201821000010213C040040AC620000244200011444FFFD246300040C0002C53C1E40030C000E10005020238E85D8E48E84D8E0006038210C000CF8004030210060382102602021004030210C006CD426C5D49427C4D5C424050001240600190C006ED4026038210C0002C500000000004090213C0200FF3C03003F3442FFFC3470FFFF02222021080004542403FFFF1203010E2484FFFC8C820000000000001202FFFB2610FFFF0C0002C526100001004020212402FFFF12020107000000003C0440032484D54C24050001240600080C006ED4026038210C002348022020213C04400302603821FE
S3FF400011A02406000F2484D5E00C006ED4240500013C0400200C0021CC24050004240500043C0400200C0021CC004080213C054003240620000260202124A5D5F00C006CD4004090210C0002C500000000004088213C0200800202402102003021024038218CC200008CC300048CC400088CC5000C24C60010ACE20000ACE30004ACE40008ACE5000C14C8FFF624E700100C0002C500000000005110230C000E10000220408E85D8E48E84D8E0006038210C000CF800403021006038210040302126C5D4940C006CD4026020210C002348020020210C002348024020213C04400302603821240600102484D6080C006ED4240500013C0400200C0021CC24056B
S3FF4000129A0004240500043C0400200C0021CC004088213C054003004090210260202124A5D61C0C006CD4240620000C0002C500000000022028213C060080024020210C006FE8004080210C0002C500000000005010230C000E10000220408E85D8E48E84D8E0006038210C000CF800403021006038210040302126C5D4940C006CD4026020210C002348022020210C002348024020213C044003026038212484D630240500010C006ED4240600110260202126A5D4600C006CD424060008240600180260382126E4D5A80C006ED424050001240408000C0021CC240500040C0002C5004088210040802100002821240408000220182100001021AC6200007B
S3FF40001394244200011444FFFD2463000424A5000114A2FFF8000000000C0002C5000000000C000E10005020238E85D8E48E84D8E0006038210C000CF8004030210060382102602021004030210C006CD426C5D49427C4D5C424050001240600190C006ED4026038210C0002C50000000000409021000028212404FFFF240608000220182108000509241007FF120400062463FFFC8C621FFC000000001050FFFB2610FFFF2610000124A5000114A6FFF5022018210C0002C500000000004020212402FFFF12020088000000003C0440032484D54C24050001240600080C006ED4026038210C002348022020213C04400324060010026038212484D6440C001F
S3FF4000148E6ED424050001240420000C0021CC240500043C06BFC0004080210040382124C820008CC200008CC300048CC400088CC5000C24C60010ACE20000ACE30004ACE40008ACE5000C14C8FFF624E700103C0440032484D65824050001240600130C006ED4026038213C03BFC034661FFC02002821240407FF080005462407FFFF24A5FFFC1087006824C6FFFC8CA31FFC8CC20000000000001062FFF92484FFFF248400013C0440032484D54C24050001240600080C006ED4026038210C00234802002021026020218FBF00348FBE00308FB7002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001008006B2327BD00380C0002C5AB
S3FF4000158800000000004020210C000E10009220238E85D8E48E84D8E0006038210C000CF8004030213C0540030260202124A5D558006038210C006CD40040302108000464000000008F8280143C0440038C47000C2484D430240500010C006ED4240600190C0000F4240400010C0002C5000000000C000E10005120238E85D8E48E84D8E0006038210C000CF8004030213C0540030260202124A5D558006038210C006CD400403021080003DD000000000C0002C5000000000C000E10005020238E85D8E48E84D8E0006038210C000CF8004030213C0540030260202124A5D558006038210C006CD4004030210800041F000000000C000E10009220238E8564
S3FF40001682D8E48E84D8E0006038210C000CF8004030213C0540030260202124A5D558006038210C006CD4004030210800051D000000003C0440032484D66C24050001240600080C006ED402603821080005520000000027BDFFE0AFB00018000028210080802127A60010AFBF001C0C0038AC000020213C0440038FA600102484D6780C007494020028210C0002F5000000000C00399024042710080005C20000000027BDD0F03C024003AFB22F042446D75027B201A0AFBF2F0CAFB32F08AFB12F00AFB02EFC0240382124C801908CC200008CC300048CC400088CC5000C24C60010ACE20000ACE30004ACE40008ACE5000C14C8FFF624E7001027B1033008
S3FF4000177C0220102127A42EF4240307D0AC430000244200041482FFFD27B3001002602021000028210C0070382406019024080AF0026080210260502124090AF00000602119000036240B27100008108000081840022238212466FFFF00002821010500188CE400002508FFFF00041880000411C000431023004410210002188000431021000211000000281200A228210000000014C0000200A6001A0007000D24C6FFFE00001810ACE30000000028121D00FFEB24E7FFFC1560000200AB001A0007000D000030100000281200AC2821000000001560000200AB001B0007000D2529FFF2012040210000201200041880000411C000431023004410210002D5
S3FF400018761880004310210002110000A22823A545000011200006254A00021D00FFCC00C060210000282108000611000030213C0240032451D6BC96050000022020210C007494261000021650FFFB000000000C0074B42404000A02602021024028210C006F54240601908FBF2F0C0002102B000210238FB32F088FB22F048FB12F008FB02EFC03E0000827BD2F1027BDFF98AFB6005827B60020AFB00040000028210080802102C0302100002021AFBF0064AFBE0060AFB7005CAFB50054AFB40050AFB3004CAFB200480C0038ACAFB100448FA600203C044003020028212484D6780C00749427B40024000020210C003240028028213C0240023C03400393
S3FF400019702451B3502472D6C03C024C493C0340038FB0003434554645247ED7142417000F0800066A2413003C0C001FA7000000000C003990240403E80C0005C8000000008F828014000000008C4400080C001F18022028218F828014000000008C4400080C001E5C02202821000020210C003240028028218FA200288FA3002CAFA200108FA500308FA200248FA600348FA7003802402021AFA300140C007494AFA200188FA30034000000000070102B1040000302A020211460FFDC00000000000028210C0038AC02C030211440FFD7000000008FA400200C003900000000001057001A3C0440038FA500200C00749403C020218FA400200C003970000015
S3FF40001A6A00001440000D000000003C0440030C0075722484D7048FA200340000000024420001166000020053001B0007000D0000801008000666000000003C0440030C0075722484D70C080006A0000000008FA500200C0074942484D6E48FA400200C003920000028211440000D000000003C0440030C0075722484D7048FA200340000000024420005166000020053001B0007000D0000801008000666000000003C0440030C0075722484D70C080006B900000000008028213C04400327BDFFE8AFBF00140C0027DA2484D7343C03A0008C620000000000001440FFFD000000008FBF00140000000003E0000827BD001800000000000000003C0340036D
S3FF40001B643C0240032463D8E82442D9180083182100821021806500008046000024A5FFC024C6FFC03C0240033C03400328840016AC45211414800008AC6621383C02400300001821AC43212C240400023C03400303E00008AC6421103C02400324030009AC43212C240400023C03400303E00008AC64211010A0000C3C03400300C5302600C6001800051FC2000010120082102A104000020065182100C530260003284314A0FFF63C03400303E00008AC6621143C0240038C451584080006F6000030213C0340033C02400327BDFFE02463D8E82442D918AFB1001800821021AFBF001CAFB000140083182180490000806800002529FFC02508FFC03C1102
S3FF40001C5E40033C02400328840016AC49213800C0582100E0602114800076AE282114000030213C0240038C4A15743C034003010A0018AC66212C8FA30030240400023C024003AC4421108FA40034000A40800000381200A738230007282300CA0018000030120166302300000000012A001800001012018210230000000000A300188FA3003800002812000000000000000000C40018000020120000000000000000006200180000181200000000000000001540000200AA001A0007000D00002812000000000000000015400002008A001A0007000D0000201200A428230000000015400002006A001A0007000D0000181200A38023000000000042001835
S3FF40001D5800001012000000000000000000E7001800003812000000000000000000C600180000301200000000000000000210001800001812000000000000000015400002004A001A0007000D0000101200021023000000001540000200EA001A0007000D0000381200471023004810211540000200CA001A0007000D00003012004610230000000015400002006A001A0007000D00001812004310210440001B004A00183C0240038C451584000020120C0006F6000030218E242114000000000090102A1440000F000000000C000D9C00902021006028210C000DD4004020218FBF001C3C034003AC6221048FB100188FB0001403E0000827BD002008005A
S3FF40001E5207202406000908000788000420238FBF001C2402FFFF3C034003AC6221048FB100188FB0001403E0000827BD002027BDFFB0AFB0002800808021AFBE0048AFB70044AFB60040AFB5003CAFB40038AFB30034AFB20030AFB1002CAFBF004C8FBE00608FB700648FB6006800A0A02100C0982100E090213C1140033C154003120000202A02002C104000290000000002002021028028210260302102403821AFBE0010AFB70014AFB60018AFA0001C0C000709AFA000208E232104000000001860000D000000008FA2006C0000000012020009000000008EA2211C000000000062102A1040000B3C0440033C044003AC9020FCAEA3211C261000015C
S3FF40001F4C1600FFE22A02002C2403FFFF3C024003080007B8AC4320FC3C0540038CA220FC000000000440FFF300000000080007D3261000018FBF004C8FBE00488FB700448FB600408FB5003C8FB400388FB300348FB200308FB1002C8FB0002803E0000827BD005027BDFFA0AFB70054AFB30044AFB20040AFB1003CAFB000380080882100A0982100C080218FB700708FB200748FA2007CAFB600500000202100E0B021022028210260302102003821AFBF005CAFBE0058AFB5004CAFB40048AFA2001CAFB60010AFB700140C0007A0AFB200188FA2007800000000184001113C0340038C6920FC000000000520010D3C0240038C44211C3C0340030244EC
S3FF4000204600182463D8E801231821806500003C0240038C4815743C0240032442D918012210218046000024AAFFC024CBFFC03C1E4003000038123C02400329250016AC4B213802C40018AFCA211400001812000000000000000002E40018000020120000000000000000150000020068001A0007000D0000181200711821AFA30030150000020088001A0007000D0000201200932021AFA4002C1500000200E8001A0007000D0000381200F0382114A00155AFA700280000182100001021014800188FA4002C3C114003008230233C024003AC43212C8FA2003024030002AE2321108FA30028240700033C1340033C154003000028123C144003004528232C
S3FF4000214000C580210168001800108040AE652100AE86212000002012006420230090802300A50018AEA4213C00002812000000000000000014E000020207001A0007000D0000801200000000000000000084001800002012008520210000000000C60018000030120C000705008620218E2321103C024003146000020203001A0007000D8C4C15743C0240038C5120FC8FC52114000080120000000000000000021000180000801200101940001080C0018C0018020380210010108002028021000020120000000000000000148000020204001A0007000D0000801210A00025AFB000348E6221008E84212000021023004C0018000420238EA3213C00002C
S3FF4000223A000000031823000010120000000000000000008C0018000020120000000000000000006C001800001812000000000000000014A000020065001A0007000D00001812AEA3213C0000000014A000020045001A0007000D00001012AE6221000000000014A000020085001A0007000D00002012AE8421208E6721008E8B212002C700188FA400788EA8213C2482FFFFAFA20018000C1FC2006C18210003184300031823AFB1001CAFA00020AFA000248FA40030000050128FA5002C8FA6002802EB001800001012004A1021000000000248001800004812004910210000000015800002004C001A0007000D00001012AFC2211400000000004800181A
S3FF4000233400004012000000000000000000470018000038120000000000000000004B0018000010120000000000000000146000020103001A0007000D0000401201124021AFA800141460000200E3001A0007000D0000381200F6382100000000146000020043001A0007000D00001012005710210C0007ECAFA200103C0840033C0A40033C0B40038D6721248D05210C8D462130000727C2000517C200061FC20045102100872021006618210002384300031843000420432A220016AD07210CAD43213010400098AD6421242405000224060004020010210047102110A0009EAD02210C020010210043102114C00002AD422130AFA000348FA300340000DF
S3FF4000242E0000006410218D04210C0000000004810058AD6221248D442130000010210481005FAD02210C8D6421240000102104810066AD42213008000985000010213C0240038C4C15808FA4007800000000108C0084260400021A400086025200183C0240038C4715743C0B40033C0840033C0A400300002012000000000000000014E000020087001A0007000D000020120004288000043100000419C000A630210065182300041040000428C00045102100641821000221000044102314E000020047001A0007000D0006288000C5302100063023000318400003182300001012244200FFAD42213014E0000200C7001A0007000D0000301224C600FF87
S3FF40002528AD66212414E000020067001A0007000D00001812246300FFAD03210C8FA2007800000000104C0010000000008D05210C8D4621308D672124000517C200061FC2000727C2004510210066182100872021000210430003184300042043AD02210CAD432130AD6421248D04210C000000000480FFAA000000003C0240038C42157C000000000082182A1060000200000000008010218D442130000000000480FFA3AD02210C3C0240038C42157C000000000082182A1060000200000000008010218D642124000000000480FF9CAD4221303C0240038C42157C000000000082182A1060000200000000008010218FBF005CAD6221248FBE00588FB7D1
S3FF4000262200548FB600508FB5004C8FB400488FB300448FB200408FB1003C8FB0003803E0000827BD0060000810C00048102108000840240300092A22001E14400048000028212A220026104000702A22002C2405000200003021000010210047102114A0FF64AD02210C080009060000102118800071000490C31E40FF7C025200183C0340038C691574240200053C0B4003000020120000000000000000152000020089001A0007000D000030120000000000000000144000020122001A0007000D0000101200C2102A10400027AD6621240006108000062140000628400082202300061980000611000062182300451023000229000045102315200002FC
S3FF4000271C0049001A0007000D00033900006718230086202100043100008620233C0840033C0A400300001012244200FFAD02210C152000020069001A0007000D00001812246300FFAD632124152000020089001A0007000D00002012248400FF08000951AD44213008000901000030212402FFFB144000020122001A0007000D3C0840033C0A40030000101200C21021000230C0000229800002208000A6282300021900008220210045282300621823000211C000621823152000020069001A0007000D0004310000862021000420230005284000001812246300A8AD432130152000020089001A0007000D000020122484006FAD6421241520000200A933
S3FF40002816001A0007000D0000281224A500D508000951AD05210C14400007000028212402002C1222000F00000000240500020800090100003021240600040800099F0000102124020014144000020082001A0007000D0000901200000000080009A80252001824050002240600040800099F0000102127BDFFB0AFBE0048AFB70044AFB60040AFB5003CAFB40038AFB30034AFB20030AFB1002CAFB00028AFBF004CAFA40050AFA5005400C0802100E088213C1540033C1440033C1340033C1E40033C1240033C1740032416FFFF3C0240038C4515748EAA15688FA20050000520C0004A0018000530400005114000C23023008220213C0240038C481DC047
S3FF400029108FA200543C0340038C6D15603C0340038C6915703C074003000058128CEC1564020B58212508FFEC004A00182529000F3C0740038CEE156C3C0740038CE21580AFA5001000003821AFA20018AFA00014AFB6001CAFA00020AFA00024000018122610000102231821008B001800002012000000000000000000C3001800003012000000000000000015A00002008D001A0007000D0000201200000000000000001580000200CC001A0007000D0000301200000000000000001540000200CA001A0007000D00003012000000000000000015400002008A001A0007000D00002012000000000000000001050018000040120088202100000000012589
S3FF40002A0A001800004812000000000000000000AE0018000028120C0007EC00C930213C0340038E8521348E6621188E4721088C62210C8EA815688FC321308EE421240045102100661821008720210208282AAE822134AE63211814A0FF9FAE442108263100010228102A1440FF9B000080218FBF004C8FBE00488FB700448FB600408FB5003C8FB400388FB300348FB200308FB1002C8FB0002803E0000827BD005027BDFFC8AFB400203C144003AFBE0030AFB7002CAFB60028AFB50024AFB3001CAFB20018AFB10014AFB00010AFBF00343C1740030080802100A088213C1640030280F0213C1540033C13400308000AF43C1240038E6315688C822118D7
S3FF40002B043C054003146000020043001A0007000D8CA421088FC521348EA720F48E48212800E630230206302126100001000010120000000000000000146000020083001A0007000D0000201200000000000000001460000200A3001A0007000D000028120000000000000000146000020043001A0007000D00001012000212003042FFFF146000020083001A0007000D00002012308400FF000424001460000200A3001A0007000D004410250000281230A500FF00451025022700180000381200C730210006308001064021AD020000000030213C024003020020210220282100003821AC402108AEE021180C000A22AE8021348EC615600000000002063D
S3FF40002BFE102A1440FFBE3C0440038FBF00348FBE00308FB7002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD003827BDFFE8AFB000102490FFFF12000003AFBF00140C000B0E02002021020028218FBF00148FB000100000202108000AAA27BD00183C0940038D2220F40000000000023842000718403C0240030067182104600020AC4715603C0240038C4820F0000350833C0240033C034003AC4A156419400016AC6821280000302118E0000F00000000000028218D2220F400000000004600180047102300A2102124A5000100A7202A000018120043102100021080010210211480FFF4AC40000024C60001A7
S3FF40002CF800CA102A1440FFED0000000008000B0E0140202108000B24246300030000000000000000000000003C0240038C491DD00080702100A06821000040213C0C40033C0B4003240A0002000038218D8420F48D6520F80004188200031040004310210002108201A210230002104000451021004810210044001801C318230003184000671821006418218CC5000024E700010000101200621821000318800123182114EAFFEAAC650000250800011507FFE70000382103E000080000000027BDFFC8AFB200243C1240038E4220F4AFB5003000021082AFBF0034AFB4002CAFB30028AFB10020AFB0001C1040002B0080A821000098210000882127B444
S3FF40002DF200108E4320F400000000000318820003104000431021000210821040001A0000000000008021000028210065001802202021028030212610000100001812007118210003188002A318218C6200000000000030420001000210230C000B48AFA200108E4320F400000000000318820003104000431021000210820202102B1440FFEA020028218E4220F426730001000210820262102B1440FFDA026088218FBF00348FB500308FB4002C8FB300288FB200248FB100208FB0001C03E0000827BD00383C0240038C4320F424AC00010003488200A068210189102B00C028210080582125AAFFFF24C6FFFF1440000224A400010000602100091040B0
S3FF40002EEC00491021000210820082182B14600039008900180540003A0000382104C1000200A900182446FFFF00ED10210002108000EC1821016210218C44000000031880016318218C680000014738210007388001673821310800010000281230840001018510210002108000C900180145282101621021000528808C430000016528218CA9000000882021306300018CE80000008320213129000100892021000030123108000100CA102100CD2821000210800162102100CC3021000528808C4700000165282100063080016630218CA300000088202130E700018CC200000087202130630001008320213042000103E00008008210210000381205411B
S3FF40002FE6FFC80000000008000BC2252AFFFF080075910000000027BDFFE8AFBF00140C007591000000008FBF0014304203FF03E0000827BD001827BDFFC8AFB300203C1340038E6220F4AFB5002800021082AFBF0034AFB70030AFB6002CAFB40024AFB2001CAFB10018AFB000141040003E0080A8213C027777345711110000A021000090213C16EEEE8E6320F400000000000318820003104000431021000210821040002B000000000000882108000C37000080218E6220F48E6320F40002108202020018000318822631000100001012005210210002108002A21021AC5700000003104000431021000210820222102B10400017022080210C000BFFE9
S3FF400030E000000000284203991040FFEB000000008E6220F48E6320F40002108202020018000318822631000100001012005210210002108002A21021AC5600000003104000431021000210820222102B1440FFEB022080218E6220F426940001000210820282102B1440FFC9028090218FBF00348FB700308FB6002C8FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD00383C0240038C4320F427BDFFC8AFB2001800039082AFB7002CAFB60028AFBF0034AFBE0030AFB50024AFB40020AFB3001CAFB10014AFB000100080B0211240006000A0B82100121040005210210002A8820000F021000098210000A02112A00024000096
S3FF400031DA00000000882108000C8600008021104300470212001800001012005410210002208002E41021263100013C03EEEEAC4300000235102B104000150220802102C02021026028210C000BAD02203021240300031443FFEE24030002021200183C0377773463111127DE000100001012005410210002108002E21021AC430000263100010235102B1440FFED02208021267300010272102B1440FFD80260A0212BC2000A1440002E000048210000402112A0000F00000000000030210000382100F2001824C6000100D5282B00C0382100001012004810210002108002E218218C64000002C2102114A0FFF5AC440000252900010132102B1440FFEDD2
S3FF400032D4012040218FBF00348FBE00308FB7002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD003800001012005410210002208002C418218C6200003C037777346311111443FFB602E41021AC43000008000C9627DE000102C020218FBF00348FBE00308FB7002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001008000C0727BD00383C03000827BD80103463E0303C024003AFBF7FECAFB17FE8AFB07FE403A3E8238C4320F027B000103C0240030C00758CAC431DD00C000C07020020213C0200043442B000020288210C000B6D02002021020020210C000C5E022028210C00399024048E
S3FF400033CE003208000CED00000000000000000000000027BDFFA0AFB1005427B10020AFB00050AFA50014AFA400100220282127A4001027B00038AFBF005CAFA7001CAFA600180C000F30AFB2005827A400180C000F30020028218FA40020000000002C8200021440004A000000008FA50038000000002CA2000214400058240600048FA200248FA3003C00000000004310261086003DAFA20024240200021082003A0000000010A600470000182110A2006F000000008FA200288FAF00308FBF00488FA3004001FFC82B00432023AFA400288FAE00348FB0004C1720005C0000000013EF005801D0102B0000682100006021000048213C0810000000C02182
S3FF400034C808000D402412003D006578230080702100E0682100C06021000E17C2000F18400043782501FFC82B016048210140402113120035000E70400009184201882025000817C000082842004310250080302101A9182501D0202300A0502100603821004058212718000101C4282B1720FFEA01FF182317EFFFE401D0102B1440FFE7000E17C208000D35006578231085000C3C024003022020210C000E88000000008FBF005C00402021008010218FB200588FB100548FB0005003E0000827BD006008000D582444D95000001021AFA30034AFA20030AFA0002808000D58022020210C000E88020020218FBF005C00402021008010218FB200588FB13B
S3FF400035C200548FB0005003E0000827BD006031A300FF240200801062001A31A2010002202021AFAD00340C000E88AFAC00308FBF005C00402021008010218FB200588FB100548FB0005003E0000827BD00601040FFA800000000000E1FC2000F1040006278252484FFFFAFA40028000E704008000D2D01FFC82BAFA6002008000D58022020211440FFE70220202101EE10251040FFE425A20080004D182B2404FF00006C602108000D78004468240000000027BDFFC824020003AFB10030AFBF0034AFB0002CAFA200101480000D00048FC224020002AFA2001027A400100C000E88AFB10014006028218FBF003400A018218FB100308FB0002C03E00008F2
S3FF400036BC27BD0038162000143C028000008080212402003C02002021AFA20018AFA000200C000E5CAFB000242445001D18A0FFEB30A200201040000C0010104200B01004AFA20020AFA000242402003C0045102308000DA6AFA20018108200090004802308000DB42402003C000518270062100600B02004AFA2002008000DC1AFA400243C0240038C45D94C08000DAA3C02C1E00000000027BDFFC8AFA50014AFA4001027A50018AFBF00340C000F3027A400108FA3001824020002106200182C620002144000162402000410620019000000008FA3002000000000046000102862001F104000132402003C0043282330A300201060001D000518278FA241
S3FF400037B600280000000000A218068FA2001C00000000104000040000000008000DF700031823000018218FBF00340060102103E0000827BD00388FA2001C00000000144000063C027FFF8FBF00343443FFFF0060102103E0000827BD00388FBF00343C0380000060102103E0000827BD00388FA200288FA4002C000210400062100400A4180608000DF00043182527BDFFD0AFB00028AFBF002C1480000C0080802124020002AFA2001027A400100C000E88AFA000148FBF002C00402021008010218FB0002803E0000827BD0030240200032403003CAFA20010AFA30018AFA000200C000E5CAFA400242445001D04A0001A0005182310A0FFEC30A2002047
S3FF400038B0104000100010104200B01004AFA20020AFA000242402003C27A4001000451023AFA200180C000E88AFA000148FBF002C00402021008010218FB0002803E0000827BD0030000518270062100600B02004AFA2002008000E31AFA4002430620020104000020070200600002021000038211040000E00003021000010212442FFFF00501024104000032402003C240700010000302100E4182500451023AFA30024AFA2001808000E17AFA600202402000108000E4B0062100400000000000000003C0200010082102B1040000C3C0201002C8201001440001D2405001824020008004418063C0240032442D970006218219062000003E0000800A262
S3FF400039AA10230082102B1040000A2405000824020010004418063C0240032442D97000621821906200002405001003E0000800A2102324020018004418063C0240032442D970006218219062000003E0000800A2102300001021004418063C0240032442D97000621821906200002405002003E0000800A210238C83000027BDFFD8AFB00010AFBF0024AFB40020AFB3001CAFB20018AFB100142C6200028C8800108C8500148C90000414400015240200041062001D2402000210620003010510251440001C000000000000382100003021001027C08FBF0024008620250080102100E018218FB400208FB3001C8FB200188FB100148FB0001003E0000832
S3FF40003AA427BD00283C0200073442FFFF3C03000F010210253463FFFF004310243C047FF00044302508000E9E2407FFFF0000382108000E9E3C067FF08C840008000000002882FC0214400026288204001040FFF730A300FF2402008010620019248403FF24A3007F0065102B00484021006028213C0220000102102B144000073C02000F000817C0000518420043282500084042248400013C02000F3442FFFF308407FF00081A02006218240004250000052A02000816000083302508000E9E0045382530A201001040FFEB3C02200024A300800065102B0048402108000EC5006028212402FC020044202328830039106000310000182130820020104063
S3FF40003B9E003E000418272402000100823004008888060000A021000018212464FFFF0083102B24C3FFFF0043102100489024008598240260282102402021000038210C000F740000302124030001104300040271302524130001000090210271302530C300FF24020080106200170254202524C5007F00A6182B006420213C0210000082102B1440000200001821240300010004160000054A0200494825000442023C02000F3442FFFF00031D00010210240062302508000E9E012038210000482108000F0F0000402130C201001440FFE924C500803C0210000082102B1440000200001821240300010004160000064A020049482508000F0F000442028C
S3FF40003C980008104000621004008588062403000100518825008318040088A00608000EEE00003021000000008C83000000A0482100031502304607FF3C02000F00032FC23442FFFF8C8800040062182414C0001BAD250004006810251040001500033A002403FC0200081602AD2300082403000300082A0000473825AD2300002406FC023C08100000051FC2000710400062382500E8202B000528401480FFFA24C6FFFFAD250014AD26000803E00008AD2700102402000203E00008AD220000240207FF10C2000D0003220000081602004420253C031000000812000083202524C5FC01AD22001424020003AD250008AD22000003E00008AD2400100068E1
S3FF40003D92102510400007000314C21440000824020001AD220000AD28001403E00008AD2300102402000403E00008AD22000008000F6AAD20000000000000000000000086102B1440000E0000000000C4102B144000090000000000A7102B144000080000000000E5102B144000030000000003E000082402000103E000082402000203E0000800001021000000000000000027BDFFD0AFBF002CAFB10028AFB00024AFA00010AFA00014AFA00018AFA0001C40026000000000002403FFFE004310244082600000000000188000383C02400310A00036000000008CA500000000000010A000313C024003AC4521403C11400327A4001027A5001427A6001848
S3FF40003E8C27A7001C0C001010263015088E0400048FA200148FA3001000441023006210210062182B1060003E3C0440030C001027AE2215080C0039CD020020218FA200188FA400108FA6001C1040001D00C02821004020210C000FF8000030210C00100C000000000C0039CB000000000C001008000000000C0039C4000000000C001004000000000C0039C0000000000C000FF400000000000010218FBF002C8FB100288FB0002403E0000827BD00303C0240032442DA703C03400308000F9FAC6221403082000710400003248300082402FFF8006220248E2215082403FFF00044102310C0FFDC0043282400A6102B1040FFD900C028213C0440030C001A
S3FF40003F8627DA2484DAA40C000FF4000000008FBF002C2402FFFF8FB100288FB0002403E0000827BD00300C0027DA2484DA780C000FF40000000008000FC92402FFFF000000000000000000000000080000A400002021000000000000000027BDFFE8AFBF00140C002410000000000C0023B4000000008FBF00140800253827BD0018000000000000000000000000080025F800000000000000000000000003E0000800000000000000000000000003E000080000000000000000000000003C08400B3C034000250850F0246300003C020400006818232442000000431021ACA20000AC880000ACE0000003E00008ACC0000003E000080000000024034000B0
S3FF400040803C020400AC8300082442000034038000AC82000003E00008AC8300043402FF0040826000000000000800149C000000003C03A000346300208C62000000000000000220C00002104003E00008004410213C07A00034E8001C34E900188D0400008D2300002402FFFC006218243C024003308400018C4523ACAD230000AD0400008CA2000C8D06000000021900000210808D240000004310210002188034E500300043102130C600013484000334E70020ACE00000ACA20000AD060000AD24000003E00008000000003C04A000348600183484001C8C8500008CC200002403FFFC0043102430A50001ACC20000AC85000003E00008000000003C0406
S3FF4000417AA000348600183484001C8C8500008CC200002403FFFC0043102430A50001ACC20000AC85000003E000080000000027BDFFE82405002A240600013C024003AFBF0014AC4021500C00137C000000003C0440003C034003248440B00C003318AC62214C3C06A00034C8001C34C900188D0400008D2300002402FFFC006218243C024003308400018C4523ACAD230000AD0400008CA2000C8D07000000021900000210808D250000004310210002188034CA00300043102130E7000134A500033C04400034C60020ACC000008FBF0014AD42000024844178AD07000027BD0018AD25000008006A700000000027BDFFE0AFB10018008088213C04400080
S3FF40004274248442B0AFBF001CAFB000140C00106A00A080218FBF001C3C0240033C034003AC511590AC702148000010218FB100188FB0001403E0000827BD00203C0340038C6221500000000024420001AC6221500800335000000000000000000004260000042603008028210800170924040002000419403C024003000420C000641823244215E027BDFFE800431021AFB000103C0440038C500004AFBF00140C0075722484DACC8E0500103C0440030C0074942484DAF08E0500203C0440030C0074942484DB088E0500243C0440030C0074942484DB208E0500BC3C0440030C0074942484DB388E0500C03C0440030C0074942484DB508E0500783C04DE
S3FF4000436E40030C0074942484DB688E0500643C0440030C0074942484DB808E05005C3C0440030C0074942484DB988E0500603C0440030C0074942484DBB08E0500883C0440030C0074942484DBC88E0500803C0440030C0074942484DBE08E0500843C0440038FBF00148FB000102484DBF80800749427BD001827BDFFE0AFB000143C04400300C080218CC600082484DC10AFB10018AFBF001C0C0027DA00A088218E03000424024100106200082402410110620010020020218FBF001C8FB100188FB0001408002EC327BD002024020005122200113C0440038FBF001CAE00000C000010218FB100188FB0001403E0000827BD0020240200051622FFF7B2
S3FF400044683C0440030C0027DA2484DC4C0C00134E0000000008001111000000000C0027DA2484DC388E0400080C00135000000000080011110000000008002CFE00C0202108002D8500C020210800300C00C020212CA20006104000133C034003000510400045102124420001000210C0246315E0006218218C670004240200018CE800000000000011020004000000003C0740030800308E24E7DCB03C0740030800308E24E7DCD003E000082402000A8CA2000827BDFFE8AFB0001000808021AFBF00140C0027F83044100F004028213C0200073442080100A2102B10400008000000000C00165B020020218FBF0014000010218FB0001003E0000827BDAC
S3FF4000456200180C003A4C240400198CC200002CA300068C460028146000032402000A03E000080000000000052140000510C03C03400300822023246315E0006418213C05000700C0202134A508000800322CAC66000427BDFFE0AFB000143C104003AFBF001CAFB100180C002868008088210C00166D000000003C0240038E0415E0244216B43C03400302202821000030210C0021BEAC6221541440003A261015E08E040018022028210C0021BE2406000114400034022028218E0400300C0021BE240600021440002F022028218E0400480C0021BE240600031440002A3C0340033C0240038E04006024421674246316940220282124060004AE0200686A
S3FF4000465C0C0021BEAE03006C1440001F240400023C024003244215C08C43000C0000000010640014000000008C42001C000000001044000C3C0240038E040078022028210C0021BE2406000514400011004020218FBF001C8FB100188FB0001403E0000827BD00202442168CAE020080080011A5AE0000843C02400324421684AE020080080011A5AE0000840C003A4C004020210C003A4C000000000000000000000000000000003C02400327BDFFE08C431E14AFB20018AFB10014AFB00010AFBF001C00A0802100C088210060F80900E090211040001D3C0440033C0240038C431E003C024003AE0300008C431E043C024003AE230000AE4000003C03E1
S3FF4000475640038C451DF88C621E088C831E1000A210240002202B00A318241060000200042080348400013C0340038C621E0C0000000000A210241440000B000000008FA2003000000000AC440000240200018FBF001C8FB200188FB100148FB0001003E0000827BD0020080011E5348400023C0640038CC31DF4000000002C62000514400004008028210000302103E0000800C01021000310803C0340032463DCF0006218218C64000000000000008000080000000028A20080104000480000000024020001004500183C0340038C621E04ACC01DF4240600010000201200441023AC621E0403E0000800C0102130A300F8240200801462FFE40000000024
S3FF4000485000051027304200073C03400324040001ACC41DF4AC621DF8080011F80000302128A20080144000042403000124020100004528232403FFFF000510230043001824030003ACC31DF4000030213C03400300001012AC621E0403E0000800C0102128A20080144000220000000024020100004528232402FFFF004500183C0440038C851E0024020004ACC21DF40000302100C01021000018120065182103E00008AC831E0028A20080144000130000000024020100004528232402FFFF0045001824030002ACC31DF4000030213C03400300001012AC621E0003E0000800C010212402010000452823080012062402FFFF0800123224020001080044
S3FF4000494A1243240200013C0740038CE31DF4240800031068002B0080282124020004106200163C0940031460001200000000308200401040000F00043180000421033C02400330A5000C308400030005290030C600FFAC441DF83C0340033C024003AC461E00AC651E04ACE81DF403E000080000102103E00008000010213C0840038D021E048D261E003083003F0062182528C40080ACE01DF414800003AD031E0424C2FF00AD221E002862008014400003000000002462FF00AD021E0403E00008240200013C0440038C831E0030A2003F0043102524030004AC821E00ACE31DF403E00008000010213C0640038CC51DF42407000110A7001824020002A1
S3FF40004A4410A2000D2882008014A00009000000003082000810400006308300033C024003AC431DF8ACC71DF403E000080000102103E000080000102114400002000000002484FF003C02400300041823AC431E04ACC01DF403E00008240200012882008014400002000000002484FF003C02400324030002AC441E00ACC31DF403E0000800001021080015BD0000202127BDFFE8AFBF0014808200008085000380830001000216008084000200A2282500031C0000A32825000422003C06400300A4202524C61DF00C00359400002821144000053C0440008FBF001424844BF0080015BD27BD00183C0440038FBF00142484DD1000402821080027DA27BD8E
S3FF40004B3E00183C02400027BDFFE03C03400324424A303C0440033C054003AFB20018AFB10014AFB000103C1140033C1240033C104003AC621E142484DD34240200022406000124A5DD60AFBF001CAE421E10AE261E080C0027DAAE001E0C8E231E088E021E0C8E441E1000431025004410253C034003AC621DFC8FBF001C3C0240033C044003AC401DF83C0340033C024003AC401E048FB20018000010218FB100148FB00010AC801DF4AC601E0003E0000827BD002030A3FFFF3C04400327BDFFD800602821240200032484DD64AFBF0024AFA20010A7A30014A3A000160C0027DAA3A000173C0240038C441DF027A500100C0035A82406000C8FBF0024BC
S3FF40004C380000000003E0000827BD002827BDFFA0AFBE0058AFB70054AFB60050AFB5004CAFB40048AFB30044AFB20040AFB1003CAFB00038AFBF005C00A0882100C080212416FFFF27B4001C27B3002027B5002427B200183C1E400327B700282610FFFF02402821028030211216001902603821822400000C0011C0AFB500101040FFF7263100018FA200248FA30018A7A2002C8FA2001CA7A3002E8FC41DF08FA3002002E028212406000CA7A200302610FFFF24020001A7A300320C0035A8AFA2002802402821028030211616FFE9026038218FBF005C8FBE00588FB700548FB600508FB5004C8FB400488FB300448FB200408FB1003C8FB0003803E024
S3FF40004D32000827BD0060080015BF0000202127BDFFE8AFBF0014808200008085000380830001000216008084000200A2282500031C0000A32825000422003C06400300A4202524C61DF00C00359400002821144000143C0440030C0012D000000000240300013C024003AC431E08240500023C0340033C0440003C024000AC651E1024424A303C0340033C0540038FBF001424844C4427BD0018AC621E14080015BFACA01E0C8FBF00142484DD1000402821080027DA27BD0018000000000000000027BDFFE0AFBF001C14C000090080182100A0202127A600100C004FD7006028218FBF001C8FA2001003E0000827BD00200C00357827A600108FBF001C8E
S3FF40004E2C8FA2001003E0000827BD002000000000000000003C0240038C43215800000000146000030080302103E00008000000003C0240038C44216C3C024003000429400004188000651821244216EC006218218C650008000000008CB90004000000000320000800C028213C0240038C43215827BDFFC8AFBF003410600013AFB0003027B00010000020210C003240020028213C0340038C64216C3C024003000419400004288000A32821244216EC00A228218CA30008000000008C6600080000000000C0F809020028218FBF00348FB0003003E0000827BD00383C0240038C43215827BDFFA8AFBF0054AFB1005014600007AFB0004C8FBF00542402D1
S3FF40004F26FFFF8FB100508FB0004C03E0000827BD005827B00010020028210C003240000020213C0340038C64216C3C024003000419400004288000A32821244216EC00A228218CA3000827B1002C8C6600040000000000C0F809022028210C00336C02002021022020210C00336C004080218FBF0054020210238FB100508FB0004C03E0000827BD00583C0240038C43215827BDFFE8AFB00010AFBF001414600006008080212402FFFF8FBF00148FB0001003E0000827BD00180C0033A4000000001040FFF83C0240038C44216C3C024003000429400004188000651821244216EC006218218C650008000000008CA30008000000000060F8090200282112
S3FF40005020080013F3000010213C0240038C43215827BDFFC8AFBF003410600011AFB000303C0240038C44216C3C024003000429400004188000651821244216EC006218218C65000827B000108CA30004000000000060F809020028210C003320020020218FBF00348FB0003003E0000827BD003827BDFFD8AFB200183C1240038E421710AFB40020AFBF0024AFB3001CAFB10014AFB00010104000670080A0213C024003245016F8000088218E0200000000000010400005000000000040F8090220202114400013240300018E421710263100010222102B1440FFF4261000243C0240038C43215800000000146000562402000A8FBF00248FB400208FB372
S3FF4000511A001C8FB200188FB100148FB0001003E0000827BD00283C0440033C024003AC432158AC91216C8C86216C3C0440032484DD840C0021BE028028211440004100111880001111403C04400300621821249316EC007318218C6500083C0240038C44216C8CA30000000000000060F809263000018E421710000000000202102B1040002300101080001019400043102102621021080014722451000C8E421710261000010202102B10400019263100248E220000000000001040FFF8000000000040F809020020211040FFF4028028218E24FFF40C0021BE0200302114400019000000008E23FFFC020020218C620000000000000040F8092610000105
S3FF400052148E421710000000000202102B1440FFE9263100240C00140A000000008FBF0024000010218FB400208FB3001C8FB200188FB100148FB0001003E0000827BD00280800143F000088210C003A4C00402021080014503C044003000000003C024000244755B83C06800024E800208CE200008CE300048CE400088CE5000CA8C20000B8C20003A8C30004B8C30007A8C40008B8C4000BA8C5000C24E70010B8C5000F14E8FFF224C600108CE200008CE30004A8C20000B8C200033C024000A8C30004244755A43C028000B8C3000724E80020344600408CE200008CE300048CE400088CE5000CA8C20000B8C20003A8C30004B8C30007A8C40008B8C475
S3FF4000530E000BA8C5000C24E70010B8C5000F14E8FFF224C600108CE200008CE30004A8C20000B8C200033C024000A8C30004244755903C028000B8C3000724E80020344600808CE200008CE300048CE400088CE5000CA8C20000B8C20003A8C30004B8C30007A8C40008B8C4000BA8C5000C24E70010B8C5000F14E8FFF224C600108CE200008CE30004A8C20000B8C20003A8C3000408001D84B8C30007000000000000000027BDFFC83C024003AFB400202454DE143C024003AFBE0030AFB7002CAFB60028AFB50024AFB3001CAFB20018AFBF0034AFB10014AFB000100080F0212456E554000098212412001F24150007241700038E9100003C04400304
S3FF400054082484DED00C0027DA0220282108001509000080210C0027DA000000000C00794C0220202102A210230202102B02C020211440FFF82610000116E000020277001A0007000D0012108003C210218C4500003C0440032402000A2484DED826730001000030100006302B0C0027DA004630238E920004000000000641FFDF269400083C0440038FBF00348FBE00308FB7002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB000102484D640080027DA27BD003827BDFFE0AFB20018AFBF001CAFB10014AFB000100080102100A09021401160000000000040106800000000003C044003004028210C0027DA2484DEE43C024003244207
S3FF40005502DD903203007C006218218C6700003C04400302202821020030210C0027DA2484DEFC0C0014EC024020210C003A4C240400010080282140026800000000003C034003000210823046001F8C62239000062080004410218C5900000000000013200003000000000320000800C020210800153000C02021000000000000000003E000083402FC0000000000000000003C1A4001275A3C480340000800000000000000003C1A4001275A3C380340000800000000000000003C1ABFC0375A01800340000800000000000000000000000018C00026008040218C8200108C83000890A4000000621821A06400008D0200108D03000424420001004310242F
S3FF400055FCAD0200108D0300108D02000C00000000106200152407000100E6102A1040001000A720218D0200108D0300089084000000621821A06400008D0200108D0300042442000100431024AD0200108D0300108D02000C000000001462FFEF24E7000103E0000800E0102103E0000800E01021080015970000382118C0001D008038218C8300108C82000C000000001062001800000000080015AB000040218CE300108CE2000C000000001062000F000000008CE4000C8CE200082508000100441021904300000106202AA0A300008CE2000C8CE300042442000100431024ACE2000C1480FFEE24A5000103E0000801001021080015B90000402103E0D9
S3FF400056F60008000000003C02400303E00008AC4421643C0240038C43215C3C0240038C6400048C42216427BDFFE0AFBF001C8C8400001040000527A50010A3A40010000020210040F809240600018FBF001C0000000003E0000827BD00200004104000441021244200013C034003000210C0246315E000621821008038218C64000427BDFFE8AFBF00148C89000418C0002B00A0402100072100000718803C0240030064182124421E20004338218CE500108CE300089104000000651821A06400008CE200108CE300042442000100431024ACE200108CE300108CE2000C00000000106200142405000100A6102A010520211040001024A500018CE2001000
S3FF400057F08CE300089084000000621821A06400008CE200108CE300042442000100431024ACE200108CE300108CE2000C000000001462FFEF00A6102A0C001BBF012020218FBF00140000102103E0000827BD0018000410400044102127BDFFC03C03400324420001AFB50038000210C0247515E002A210218C430000AFB100288C710004AFB40034AFB30030AFB2002CAFB00024AFBF003C0080A0210000802127B20010241300100C001BEA022020211040002F022020210C001BCF000000000250182126100001A06200001613FFF602402821001418C0001411400043102302A210218C4400040C00297C02003021104000053C0440032484E19C0280C4
S3FF400058EA28210C0027DA0040302140106000000000002402FFFE0202102440826000000000000C001BAF0220202140026000000000002403FFFE00431024321000010202802540906000000000008FBF003C2402FFFF8FB500388FB400348FB300308FB2002C8FB100288FB0002403E0000827BD00401200FFE527A5001008001631001418C00004104000441021244200013C034003000210C0246315E0006218218C630004240200018C64000000000000108200030000000003E00008000000008C64000408001B99000000003C04400327BDFFD8248415A0AFBF0024AFB30020AFB2001CAFB100180C001B94AFB000143C044003248415B00C001B941F
S3FF400059E43C1040033C1340030C001910260415C0261015C00C001910266415D08E03000C3C1140033C12400324040001AE20216010640017AE40215C8E02001C00000000104400363C044000240400021064001D000000008E02001C00000000104400243C0440008FBF00243C0240033C0340038FB300208FB2001C8FB100188FB00014AC402164AC60216803E0000827BD00283C04400024845E8024050028240600010C00137CAE3021608E2421600C0018CA000000008E03000C240400021464FFE5000000003C0440002484570824050028240600010C00137CAE50215C8E44215C0C0018CA000000000800169200000000266215D0248457082405FF
S3FF40005ADE0029240600010C00137CAE42215C8E44215C0C0018CA00000000080016920000000024845E802405002924060001266215D00C00137CAE2221608E2421600C0018CA000000008E03000C0800168C2404000200052E001080002B00052E032402FFDC10A2002A28A2FFDD1440000D2402FFB52402FFF610A2002D28A2FFF7144000132402FFDF2402FFFC10A200222402002610A2001A00052E0008001D0D00052E0310A2002028A2FFB61440000E2402FFA72402FFC410A2001F2402FFD614A2FFF600052E0008001D0D2405FFD610A2001B2402FFE414A2FFF000052E0008001D0D2405FFE410A2000D2402FFB014A2FFEA00052E0008001D0DDC
S3FF40005BD82405FFB008001D0D2405FFE603E000080000000008001D0D2405FFDC08001D0D2405FFFC08001D0D2405FFA708001D0D2405FFB508001D0D2405FFF608001D0D2405FFC408001D0D2405FFDF0004104000441021244200013C034003000210C0246315E027BDFFE000621821AFB100188C710004AFB000148E2300000005860024020001AFBF001C10620009001086032402000310620010000000008FBF001C8FB100188FB0001403E0000827BD00202402000A12020018000000008E240004020028218FBF001C8FB100188FB0001408001BDD27BD00208E2400040C0016CC020028212402000A1602FFEC000000008E2400040C001D3800009E
S3FF40005CD200008E2400048FBF001C8FB100188FB000142405000D080016CC27BD00208E2400040C001BDD2405000D080017250000000027BDFFE0AFB20018AFB10014AFB00010AFBF001C00C088210080902110C0000700A0802182050000024020210C0017092631FFFF1620FFFB261000018FBF001C000010218FB200188FB100148FB0001003E0000827BD00200004104000441021244200013C034003000210C0246315E0006218218C64000400052E008C830000240200011062000600052E0324020003106200060000000003E00008000000008C84000408001BDD000000008C840004080016CC0000000027BDFFE0AFBF001C0C001A2C27A40010DE
S3FF40005DCC104000052402FFFF8FBF001C83A2001003E0000827BD00208FBF001C0000000003E0000827BD00200004104000441021244200013C034003246315E0000210C0004310218C440000240200018C830000000000001062000524020002106200060000102103E00008000000008C84000408001BCF000000008C8400040800176F0000000027BDFFE8AFB00010AFBF0014008080210C00177D020020211C40FFFD000000008FBF00148FB0001003E0000827BD001808001B150000000027BDFFC83C024003AFB40030245415E08E830024AFB100248C710004AFB3002CAFB20028AFB00020AFBF00340000802127B20010241300100C001BF80220CA
S3FF40005EC620210250202110400031024028218E230004261000018C6200001613FFF7A08200008E84001C0C00297C02003021144000363C0440030C001BFF022020211040001B3C024003080017D924501E208E0300248E0200200000000010620020000000008E0500208E02001C8E0300208E06001800451021246300018045000000661824AE0300200C001BDD000000008E8200280000000024420001AE8200280C001BF1022020211440FFE9022020218FBF00348FB400308FB3002C8FB200288FB100248FB0002003E0000827BD00381200FFD927A50010080017BA000000000C001BC7022020218E8500280000000010A0FFEFAE8000288E84001C62
S3FF40005FC00C00295C00000000080017DD000000002484E1CC004030210C0027DA24050001080017BF0000000027BDFFC83C024003AFB40030245415E08E83000CAFB100248C710004AFB3002CAFB20028AFB00020AFBF00340000802127B20010241300100C001BF80220202110400033022020210C001BCF000000000250182126100001A06200001613FFF6024028218E8400040C00297C02003021144000363C0440030C001BFF022020211040001B3C0240030800183224501E208E0300108E02000C0000000010620020000000008E05000C8E0200088E03000C8E06000400451021246300018045000000661824AE03000C0C001BDD000000008E8266
S3FF400060BA00100000000024420001AE8200100C001BF1022020211440FFE9022020218FBF00348FB400308FB3002C8FB200288FB100248FB0002003E0000827BD00381200FFD927A5001008001813000000000C001BC7022020218E8500100000000010A0FFEFAE8000108E8400040C00295C0000000008001836000000002484E1CC004030210C0027DA0000282108001818000000008C840008000000001080000300000000080023480000000003E000080000000027BDFFE8AC800010AFB00010008080218E03001024A2FFFFAE020004AE03000CAE050000AFBF00140C00244C00A020218FBF0014AE0200088FB0001003E0000827BD00183C06A0004B
S3FF400061B434C8000834C6000C8CC500008D030000240203E8144000020062001B0007000D00053880000511C00047102300451021000210C0240903E80000181200621821006438218CC400008D03000000042880152000020069001B0007000D000411C00045102300441021000210C000001812006218210067182B1460FFF20000000003E00008000000008C83000030A500FF8C62000000000000304200011040FFFC000000008C82000400000000AC45000003E00008000000008C83000027BDFFE08C620000AFB1001830420004AFB00014AFBF001C008088211440000C00A08021120000113C0281000C00186C240400018E2300002610FFFF8C62CB
S3FF400062AE000000000000304200041040FFF6000000008E2200048FBF001C8C4200008FB100188FB0001403E0000827BD00208FBF001C344200018FB100188FB0001403E0000827BD002027BDFFE8AFB00010AFBF001400808021020020210C00189B2405000A0441FFFD020020218FBF00148FB0001003E0000827BD00188C830000000000008C6200000000000034420040AC62000003E00008000000008C8200002404FFBF8C4300000000000000641824AC43000003E00008000000008C830000000000008C6200000000000034420020AC62000003E00008000000008C8200002404FFDF8C4300000000000000641824AC43000003E0000800000000F4
S3FF400063A827BDFFE0AFB100188C83000000808821AFBF001CAFB0001430A400FF8C62000000000000304200011040FFFC00C028218E22000400000000AC4400000C00189B0220202100408021240200FA1202000C3C0440038E250008020030210C0027DA2484E1EC8FBF001C3C028101020210258FB100188FB0001403E0000827BD00208FBF001C000010218FB100188FB0001403E0000827BD002027BDFFE08C850008AFB10014AC80000C008088213C0440032484E21CAFBF001CAFB000100C0027DAAFB200180C0018BD0220202102202021240500FF0C0018EA240603E80440004500408021022020210C00189B240503E800408021240200AA1202E1
S3FF400064A2000B3C044003020028210C0027DA2484E2508FBF001C020010218FB200188FB100148FB0001003E0000827BD00203C1240030C0027DA2644E260022020210C00189B2405000A044000373C0440031440FFFA3C0440038E2500080C0027DA2484E3CC02202021240500F20C0018EA240603E80440003500408021022020210C00189B240503E88E2500083C044003304600FF0C0027DA2484E3F48E2500083C0440030C0027DA2484E41402202021240500F40C0018EA240603E8044000A2004080210C0027DA2644E26024020002AE22000C241000020C0018BD022020218FBF001C020010218FB200188FB100148FB0001003E0000827BD002062
S3FF4000659C3C044003004028210C0027DA2484E23C8FBF001C020010218FB200188FB100148FB0001003E0000827BD00208E2500080C0027DA2484E26C02202021240500F20C0018EA240603E804410007004080213C0440032484E2900C0027DA020028210800195E00000000240503E80C00189B0220202102202021240503E80C00189B004080218E2500083C044003320600FF304700FF0C0027DA2484E2AC02202021240500F00C0018EA240603E80440006D0040802102202021000028210C0018EA240603E80440006D00408021022020210C00189B240503E88E2500083C044003004030212484E3100C0027DA004080212402000212020011000070
S3FF4000669600008E2500083C0440030C0027DA2484E33C02202021240500F00C0018EA240603E80440006F0040802102202021240500020C0018EA240603E80440003F004080210000802102202021240500ED0C0018EA240603E82610000124050002240603E80440004D022020210C0018EA000000000440004F240400640C00186C0000000002202021240500ED0C0018EA240603E824050004240603E80440003F022020210C0018EA0000000004400041240400640C00186C0000000002202021240500ED0C0018EA240603E8022020212405000104400031240603E80C0018EA0000000004400033240400640C00186C00000000240200041602FFD429
S3FF4000679002202021240500ED0C0018EA240603E80440002F0040802102202021000028210C0018EA240603E8044000350040802124020001AE22000C0800195E241000013C0440032484E3840C0027DA004028210800195E000000003C0440032484E2540C0027DA004028210800195E000000003C0440032484E2D00C0027DA004028210800195E000000003C0440032484E2F00C0027DA004028210800195E000000003C0440032484E3A40C0027DA00402821080019E5022020213C0440032484E3B80C0027DA00402821080019E5022020213C0440032484E3A40C0027DA004028210800195E000000003C0440032484E3640C0027DA0040282108008B
S3FF4000688A195E000000003C0440032484E3B80C0027DA004028210800195E0000000000000000000000003C0640033C02400394431E5294C51E50000000001065000B008038213C02400324421E5800A210219044000024A30001306300FFA0E400002402000103E00008A4C31E5003E000080000102127BDFFE0AFB00018AFBF001C27B000100C001A2C020020211040FFFD000000008FBF001C83A200108FB0001803E0000827BD002027BDFFD8AFB20020AFB1001CAFB00018AFBF0024AFA0001427B1001027B2001408001A5D2410001924840018160000020090001B0007000D000020120C003990000000000C001A2C022020211440000B0000000042
S3FF400069848FA40014000000001480FFF200000000240400030C003240024028218FA4001408001A57248400188FBF002483A200108FB200208FB1001C8FB0001803E0000827BD002827BDFFE83C024003AFB00010008080218C442160AFBF00140C00189B000028210440002700000000304400FF24020014108200542C8200151440002624020011240200E010820034240200F01082004524020059108200233C05400380A21E553C08400381031E540002302B10600002000633C034C62000000426003C024003000426032403001C80471E561083005A3C02400308001A9B2443E44010820058240200012463000490620000000000001440FFFA00002C
S3FF40006A7E0000A0A01E55A1001E54000010218FBF00148FB0001003E0000827BD001810820018240200121482FFDF3C05400380A21E5500000000104000303C03400390621E56A0A01E55304200FEA0621E56000010218FBF00148FB0001003E0000827BD00183C02400324030001A0431E548FBF0014000010218FB0001003E0000827BD00183C05400380A21E5500000000104000203C03400390621E56A0A01E55304200FDA0621E5608001AB4000010213C02400324030001A0431E558FBF0014000010218FB0001003E0000827BD00183C05400380A21E5500000000104000133C03400390621E56A0A01E55304200FBA0621E5608001AB40000102170
S3FF40006B7890621E56A0A01E5534420001A0621E5608001AB40000102190621E56A0A01E5534420002A0621E5608001AB40000102190621E56A0A01E5534420004A0621E5608001AB4000010212443E4402402000110E2000F2402000210E200100000000080630001000000001060FFA70007120000C21025304280001440FFA324020001A0A01E55A1001E5408001AA3A20300008063000208001AF8000000008063000308001AF80000000027BDFFE0AFB00018AFBF001C27B000100C001A72020020211040FFFD000000008FBF001C83A200108FB0001803E0000827BD002027BDFFE8AFB000103C10400396021E523C04400324841E58AFBF00140C00D6
S3FF40006C721A72008220211040000C240200FF96031E52000000001062000200002021246400013C02400394431E50000000001083000200000000A6041E528FBF00148FB0001003E0000827BD00180000000003E000080000000003E000082402000127BDFFB8AFB0003C0004114000A08021000418808E0600048CA50000006218213C0240038E0700088E08000C8E0900108E0A0014244216EC0062182124A5F89424C6FFFF27A40010AFBF0044AFB10040AFA500248C710018AFA60020AFA7001CAFA80018AFA900140C007152AFAA0010004030213C0240038C4423AC8E0500188C83000C8FBF004400650018000010218FB0003C00001812AE230000C1
S3FF40006D6CAE2600048FB1004003E0000827BD0048000419403C0240030004208000832021244216EC008220218C83001827BDFFD8AFB100208C7100008C620004AFB0001C27A4001000A08021AFBF00240C006EE4AFA20010AE000000AE000004AE000008AE00000CAE000010AE000014AE0000188C4300148C4400108C4900008C46000C8C4700088C4800043C0240032463076C8C4523AC24840001AE030000AE040004AE060008AE07000CAE080010AE0900148CA3000C8FBF0024146000020223001B0007000D0000102100008812AE1100188FB100208FB0001C03E0000827BD0028000000008C82000000000000AC40000003E000080000000027BDC2
S3FF40006E66FFE8AFB000108C900008AFBF00140C00A9E0000521003C0340038C64E5100C00A950004028213C0340038C65E5140C00A934004020210C00A558004020218FBF00142442FFFFAE0200008FB0001003E0000827BD00188C830000000000008C6200000000000034420040AC62000003E00008000000008C8200002404FFBF8C4300000000000000641824AC43000003E00008000000008C830000000000008C6200000000000034420020AC62000003E00008000000008C8200002404FFDF8C4300000000000000641824AC43000003E00008000000008C830000000000008C620000000000003042001010400006000000008C820004000000007B
S3FF40006F608C42000003E000080000000003E000082402FFFF00052E008C83000000052E038C62000000000000304200011440FFFC000000008C82000400000000AC45000003E00008000000008C830000000000008C620000000000000002110203E00008304200018C830000000000008C620000000000003842000103E00008304200018C830000000000008C620000000000000002124203E00008304200018C830000000000008C620000000000000002120203E000083042000100000000000000008C8200188C87001C8C830000AC450000ACE600008C6200000000000034420002AC62000003E00008000000008C8200002404FFFD8C430000000064
S3FF4000705A000000641824AC43000003E0000800000000AFA5000410800022AFA600088C8B0000000000008D62000000000000304201001440FFFC3C02A00324E9FFFF344A00643445002034460050344700283448005827A300043442006027A40008ACA30000ACC40000AC490000ACE00000AD000000AD4000008D6300003C02FFFE3442FFFF00621824AD6300008D6200000000000034420100AD62000003E00008000000003C0240038C44215408001C1E0000000000A078211080003400C070218C8200148C8C00008C4300008C420000306D0FFF8D82000000000000304201001440FFFC00ED00188FA5001C3C02A00334430058000D4880344A006442
S3FF4000715434470020344B00503448002824A5FFFF344200608FA60020AC690000AC450000000020128FA30018008E2021006D00180004208024C6FFFF01E42021ACE40000AD460000AD0900008FA2001400001812006218218FA200100003188000431021AD6200008D8300003C02FFFE3442FFFF00621824AD8300008D8200000000000034420100AD82000003E00008000000003C0240038C44215408001C460000000000A068211080002B00C060218C8200148C8B00008C4300008C42000030680FFF8D62000000000000304201001440FFFC00E800188FA500108FA400143C02A00300872023344A005434490050344600583447006000AC2823344233
S3FF4000724E006400084080ACC8000000001812ACE50000006C18210003188001A31821AC440000AD2300008FA2001800000000AD4200008D6300003C02000100621825AD6300008D6200000000000034420100AD62000003E00008000000003C0240038C44215408001C800000000000A060211080002A00C058218C8200148C8A00008C4300008C42000030630FFF8D42000000000000304201001440FFFC3C02A0038FA40010000000000083001800033080344500603443005800EB3823AC660000ACA700008FA30014344800543449005034420064AD030000AC400000000020123C020001008B20210004208001842021AD2400008D4300000000000067
S3FF4000734800621825AD4300008D4200000000000034420100AD42000003E00008000000003C0240038C44215408001CB10000000000A060211080002900C058218C8200148C8A00008C4300008C42000030630FFF8D42000000000000304201001440FFFC00E300188FA500103C02A00300A72823000330803448005434430058344900503447006034420064AC660000AC4500008FA30014000020123C020001008B20210004208001842021AD030000ACE00000AD2400008D4300000000000000621825AD4300008D4200000000000034420100AD42000003E00008000000003C0240038C44215408001CE10000000000052E001080000B00052E038C8361
S3FF400074420000000000008C62000000000000304200011040FFFC000000008C82000400000000AC45000003E00008000000001080000B000000008C830000000000008C62000000000000304200011040FFFC000000008C82000C00000000AC45000003E00008000000001080000B000000008C830000000000008C62000000000000304200011040FFFC000000008C82001000000000AC45000003E00008000000001080000C000000008C840000000000008C82000000000000304200011040FFFC000000008C8200000000000034420020AC82000003E00008000000001080001C000000008C830000000000008C62000000000000304200011040FFFC38
S3FF4000753C000000008C6200000000000034420010AC6200008C62000000000000304200011040FFFC000000008C82000C00000000AC4000008C62000000000000304200011040FFFC000000008C82001000000000AC40000003E000080000000008001D47000000008C830014000000008C62000003E0000830420FFF8C830014000000008C620000000000000002130203E0000830420FFF8C830014000000008C62000003E00008000216020000000000000000000000000800244C00000000000000000000000003E000080000000003E000080000000003E000080000000003E000080000000003E000080000102103E000080000000003E00008000093
S3FF40007636000003E000080000000003E000080000000003E000080000000003E000080000000003E000080000102103E000080000000003E000080000000003E000080000000003E000080000000003E00008420000204084F80003E000084200002103E00008420000224084F80003E0000842000023420000204200002203E000080000000000000000000000003C0640038CC21F6000000000144000103C0540033C02600D24A4217034420D06AC82000C3C02FEED240300013442F00DACC31F60ACA221703C030BAD3C02DEAD34630D063442F00DAC830004AC82000803E00008000000008C820008000000001040000C008018213C0440032482217095
S3FF400077308C8621708C6300C88C45000C8C4700048C440008AC650014AC660008AC67000CAC64001003E0000800000000000528822483001000052880006528210065102B10400011000000003C02A5A58C8400103442A5A510820009246300042463FFFC03E00008006010218C620000000000001444000700601021246300040065102B1440FFF90000000003E000080000102103E000080000000027BDFFB8AFB00020AFBF0044AFBE0040AFB7003CAFB60038AFB50034AFB40030AFB3002CAFB20028AFB1002410800038008080213C1E40038FD51F680000000012A000332402FFFF10820044249300C48C9600F08E6200048E630000245100102474C3
S3FF4000782AFFF0022020210C001DD7028028211040004B00402021023410210044B8231200003F27A600188E1100083C1240038E501F64022020210C0035E8240500053C0540030200202124A5E5180220302102A0F809004038218E6700008E6600048FC81F688E441F6424E7FFFF3C054003AFB60010AFB4001424A5E5380100F80900C738213C0340038C621F603C044003104000133C0340033C0540038C631F688C841F6424A5E5680060F80902E030218FBF00448FBE00408FB7003C8FB600388FB500348FB400308FB3002C8FB200288FB100248FB0002003E0000827BD00488C631F688C841F643C0540030060F80924A5E55808001E360000000061
S3FF400079243C024003244221808C430004000000001060FFE8004098210000802108001E070000B0213C1240038E441F643C05400324A5E52802A0F8092406FFFF08001E200000000008001E120000B82127BDFFD8AFB30020AFB2001CAFB000143C12400300A080213C1340033C054003AFBF0024AFB10018AE441F64AE701F6824A5E5700200F809008088213C054003022020210200F80924A5E5883C0440000C003FA8248477C80C001DF22404FFFF8FBF0024AE401F64AE601F688FB2001C8FB300208FB100188FB0001403E0000827BD00283C05400124A59FA008001E5C0000202127BDFFE0AFB10018AFB00014AFBF001C008088218C8600088C8785
S3FF40007A1E000C3C04400330B000FF2484E5D40C0027DA022028218E2700C48E2500C824E6FFFF3C0440032484E6140C0027DA00A6302112000003000000000C003A4C240400818E2500C83C0440032484E64424A500080C0027DA2406001008001E960000000027BDFFE0AFB000103C1040038E0323D4AFBE00188C6400C803A0F02103C4102BAFBF001C10400016AFB100143C0240038C431F60000000001460001B0000882124050001122000030000000014A0001D000010218E0423D40C001E810000000003C0E8218FBF001C240200018FBE00188FB100148FB0001003E0000827BD00208C6200C40000000000821021005E182B3C0240033871000107
S3FF40007B188C431F60000000001060FFE7000000003C05400324A52170248400080C006F542406001008001EB12C45000103C0E8218FDF001C8FBE00188FB100148FB0001003E0000827BD002027BDFFE08C8300C8AFBE001803A0F02103C3102BAFB00014AFBF001C0080802114400007246400088E0200C40000000000621021005E182B1060000D3C0540033C05400324A521700C006F542406001003C0E8218FBE0018020020218FBF001C8FB000142C45000108001E8127BD002024A521700C006F5424060010104000080200202103C0E8218FBE00188FBF001C8FB000140000282108001E8127BD002003C0E8218FBF001C8FBE00188FB0001403E010
S3FF40007C12000827BD002027BDFFE8AFB00010AFBF00140C001DB000A0802112000005000000008E0600C48E0400C80C007038240500A58FBF0014240200018FB0001003E0000827BD0018000000000000000027BDFF88AFB50064AFB40060AFBF0074AFBE0070AFB7006CAFB60068AFB3005CAFB20058AFB10054AFB0005000A0A82110A0006C0080A0210C003E5427A400203C04400324842A2C27A500200C004BAC27A600283C0540030280202102A0F80924A5E6803C034003247322D027B60040241703E827BE00308E6200000000000010400048000000008C52000400000000124000453C0240039644001000000000108000412411000108001F5CF2
S3FF40007D0C0000000003C0202127A5002827A600180C004B4827A7001C8FA700348FA2001816E0000200F7001B0007000D8FA3001C8FA600303C0540030280202124A5E6DCAFA200100000381202A0F809AFA3001496440010000000000091102B144000273C0240038E42001C00111880004310218C50000002C030212405000D1200FFF6263100018E0400080C0035E8000000003C0540038E0600080280202124A5E6C802A0F80902C038218E0300848E0200883C0540038CA423D4AFA30030AFA200348C8300088E020008000000001462FFCD3C04400327A5002027A600380C004BAC248423DC03C020210C004B2C27A5003808001F4503C020213C0286
S3FF40007E06400326730004244222E01453FFB1240203E88FA7002C000000001440000200E2001B0007000D3C0540038FA60028028020210000381202A0F80924A5E6F48FBF00748FBE00708FB7006C8FB600688FB500648FB400608FB3005C8FB200588FB100548FB0005003E0000827BD00783C05400124A59FA008001F1800002021000000000000000000000000AC80008803E00008AC80008427BDFFE8AFB000103C104003AFBF00140C003E5426042A2C26022A2C8C4600043C0340038E052A2C246223DC3C0440008FBF00148FB0001024847E90AC46000427BD001808003FA8AC6523DC00000000000000003C0540033C0640033C07400324A5E730B8
S3FF40007F0024C6F27008001FC424E7F1F0000000003C0240038C48142427BDFFD024020010AFB30028AFB20024AFB10020AFB0001CAFBF002C0080802100A0882100C098211102000900E0902124030020000010212404000511030004244200011444FFFD00031840240800803C06400324C6D474240741ED3C0240030000202124050001AC481F700C00501CAFA000103C0340032466F070AE020018AE110020AE12001C2607003024C800308CC200008CC300048CC400088CC5000C24C60010ACE20000ACE30004ACE40008ACE5000C14C8FFF624E70010240400010C0021CC2405000C10400010004020218E03001824020001AC820000AC920008AC621B
S3FF40007FFA0038AC930004AE04002C000010218FBF002C8FB300288FB200248FB100208FB0001C03E0000827BD00308E0400180C002348000000000C006AC8000000002403000CAC430000080020022402FFFF00000000000000008C83000027BDFF98AFA3002494620034AFB100602C420008AFBF0064AFB0005C00A088211040001F00C0202127B00034020028210C0053B427A6001827A200240220202102003021240500033407A1FF0C00501CAFA2001010400018000028218FA3002427A4001C9462003400000000244200010C002380A46200348FA3001C8FA2002400002021AC4300488FBF0064008010218FB100608FB0005C03E0000827BD00681C
S3FF400080F40C006AC8000000002403001FAC430000080020372404FFFF0C006AC8000000002403000CAC430000080020372404FFFF00000000000000000000000027BDFF98AFB3006027B3002CAFB2005CAFB1005800A0902100C088210260282127A60018AFB00054AFBF00640C0053B400E080213243F000240240001062001C34028000106200182402600010620003240220001462001800000000AFB1001CAFB00020240500028FA4007827A2001C02603021024038210C00501CAFA200101040001300000000000010218FBF00648FB300608FB2005C8FB100588FB0005403E0000827BD0068080020662405000508002066240500010C006AC8000076
S3FF400081EE000024030016AC4300000800206F2402FFFF0C006AC8000000002403000CAC4300000800206F2402FFFF00000000000000008C85000827BDFFE88CA3004C2402000114620007AFBF0014ACA4005C000010218FBF00140000000003E0000827BD00180C006AC80000000024030014AC430000080020902402FFFF00000000000000008C830000000000008C62004C03E00008000000000000000000000000000000008C84000027BDFFE88C83004C240200041462001CAFBF001410C00016000038218C8200500000000080480000000000001100001000000000080020BB000048218C820050000000000047102180480000000000001100000730
S3FF400082E80000000024E7000100A9102100E6182BA04800001460FFF400E048218FBF001400E0102103E0000827BD00180C006AC80000000024030016AC430000080020C12407FFFF0000000027BDFFA0AFB1005427B1002CAFB20058AFB000500080902100A0802100C0202102202821AFBF005C0C0053B427A600180C0078140200202110400014AFA2001C27A2001C0240202102203021240500043407A1FF0C00501CAFA200101040000800000000000010218FBF005C8FB200588FB100548FB0005003E0000827BD00608FA4001C0C002348000000000C006AC8000000002403000CAC430000080020E62402FFFF00000000000000000000000027BDD4
S3FF400083E2FFC8AFB000288C900000240200038E03004CAFB1002CAFBF0034AFB200301462001C008088218E0600500000000010C0002427B200188C8300088C8200048C85000C02402021AFA30020AFA2001CAFA500240C005094AFA600188E0400502402000194830034000000001062001B2462FFFFA4820034000028210C00238027A400108E0300508FA2001000000000AC6200488E220004000000008C430034000000000060F809022020218FBF00348FB200308FB1002C8FB0002803E0000827BD00380C006AC80000000024030016AC430000080021232402FFFF8FA2001C000000008C430034000000000060F809024020211040FFE72402FFFF71
S3FF400084DC08002123000000000000000000000000000000008C84000827BDFFE88C83004C240200011462000BAFBF00148C82005C000000001040000D00000000AC80005C000010218FBF00140000000003E0000827BD00180C006AC80000000024030014AC430000080021482402FFFF0C006AC80000000024030016AC430000080021482402FFFF8C83000000001021AC66004403E00008AC65004000000000000000000000000027BDFFC8AFB1002427B10010AFB3002C0220302100A098212407000100002821AFB40030AFB20028AFB00020AFBF00340C0022D00080A0218FA30018004080218C6200108FB2001010400018000000000040F80902206E
S3FF400085D6202112000027004018218FA200180000000010400038000000008C42001C0000000010400034000000000040F809022020212402000D8FBF00348FB400308FB3002C8FB200288FB100248FB0002003E0000827BD00388C62001C0000000010400003000000000040F809022020210C006AC8000000008FBF003424030086AC4300008FB400302402FFFF8FB3002C8FB200288FB100248FB0002003E0000827BD0038240200021462FFD800000000028020210C00794CAE740000AE6200048E4300508FA40018AE6300088E42005410800012AE62000C8C82001C000000001040000E000000000040F8090220202108002183000010218FBF003400
S3FF400086D02402000D8FB400308FB3002C8FB200288FB100248FB0002003E0000827BD0038080021830000102127BDFFE800C0382100A03021AFBF00140C002498240521FF1040000200000000240200058FBF00140000000003E0000827BD00180000000000A4001827BDFFE03C034003AFB10014247122008E220014AFB2001824420001AFB00010AFBF001CAE220014000090120C00244C02402021104000050040802102403021004020210C007038000028218E2300048FBF001C2463FFFF02001021AE2300048FB200188FB100148FB0001003E0000827BD00200000000000000000008028213C0440030800548C2484EAC027BDFFD03C022000AFB5F1
S3FF400087CA00280082A824AFB40024AFB2001CAFB00014AFBF002CAFB30020AFB100180080A02100A0802112A0001100C090213C0440038C832188000000002462000110600006AC8221883C0340038C6223140000000024420001AC6223148C82218800000000284200031040003B000010218F828014000000008C4400080C006BB4000000003C0340003C028FFF3442FFFF028318241460004602829824000088218F828014024030218C44000C0C00839102002821166000310040902112200010000000001A200007000000000C00783402202021804300000000000014600039000000008F8280143C0540038C44000C24A5E7900C006CD40220302102
S3FF400088C4024290218F8280143C0540038C44000C0C006CD424A5D640004080218F828014000000008C44000C0C006BB4000000003C03300002831824106000080212102112A0002D3C054003000020210C00228424A5E7A40C00252D022020218FBF002C8FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD00308F8280143C0440038C50000C026028210C00548C2484EAC03C0540030200202124A5E7700C006CD40040302108002221024290210C006AC8000000008C5100000800221A000000008F828014000000008C50000C0C007834022020213C0540030200202124A5E7800C006CD40040302108002232024290213C054A
S3FF400089BE400324A5E7BC0C002284000020210C006A680000000027BDFFE027A20024AFA50024AFA6002800802821004030213C042000AFBF001CAFA7002C0C0021F0AFA200108FBF001C0000000003E0000827BD002027BDFFE027A20028AFA6002800403021AFBF001CAFA7002C0C0021F0AFA200108FBF001C0000000003E0000827BD002027BDFFD0AFBF002CAFB10028AFB0002410A00036008040218CA60008000000008CC700000000000010E0002627B100108CA4000C8CA200008CA30004AFA4001C3C044003AFA60018AFA20010AFA300142484D4900100282100E0F8090220302114400011004080218FA2001800000000104000070000000015
S3FF40008AB88C42001C0000000010400003000000000040F809022020218FBF002C020010218FB100288FB0002403E0000827BD00308FBF002C2410FFFF020010218FB100288FB0002403E0000827BD00300C006AC82410FFFF8FBF002C24030086AC4300008FB10028020010218FB0002403E0000827BD00300C006AC82410FFFF24030005080022B4AC43000027BDFFD8AFB30020AFB2001CAFB00014AFBF0024AFB100180080402100A0902100C080211080006000E0982110C000592402002F8083000000000000106200102402005C1062000F3C0240031060000D000038218C431760000000008C6600108C6200048C6400088C65000CAE020000AE0450
S3FF40008BB20004AE050008080022FBAE06000C3C0240038C431760240700018C6600208C6200148C6400188C65001CAE020000AE040004AE050008AE06000C8E020008000000008C420000000000001040003002402821010720210040F809020030211440000F004088211260000D000000008E030008000000008C620010000000001040001D000000000040F809020020212442FFFD2C42000214400009000000008FBF0024022010218FB300208FB2001C8FB100188FB0001403E0000827BD00288E020008000000008C590034000000001320001E02002021024028218FBF00248FB300208FB2001C8FB100188FB000140320000827BD00288C62001CFF
S3FF40008CAC0000000010400003000000000040F809020020210C006AC82411FFFF2403008608002314AC4300000C006AC82411FFFF2403000508002314AC4300000C006AC82411FFFF2403000E08002314AC4300008C42001C000000001440FFEC0000000008002330000000000000000000000000000000003C034003246322008C62000C27BDFFE024420001AFB00014AFBF001CAFB100180080802110800014AC62000C3C0240038C4424B4240300031083001E3C0240038C421D4400000000104000063C1140038C420008000000000040F809020020213C114003262421A80C0043180200282110400006262221A88FBF001C8FB100188FB0001403E0F7
S3FF40008DA6000827BD00203C0440038C47001C8C460018020028218FBF001C8FB100188FB000142484EC30080027DA27BD00200C0023E8000000001440FFE03C024003020020218FBF001C8FB100188FB00014080023FB27BD00200000000027BDFFD8AFB10020AFBF0024AFB0001C108000210080882140106000000000002402FFFE0202102440826000000000000C003E2827A4001040026000000000002403FFFE00431024321000010202802540906000000000008FA30014240203E8144000020062001B0007000D8FA2001000002021AE22000000001812AE2300048FBF0024008010218FB100208FB0001C03E0000827BD00280C006AC80000000010
S3FF40008EA02403000EAC430000080023A02404FFFF080023800000000000A020210800238000C0282100000000000000000000000027BDFFE0AFB000183C1040038E041420000000001080001BAFBF001C0C0021CC24050034004030213C024003AC46218C10C0002300C020218E0514203C0240032403000110A3000EAC46219024C200342404000124840001AC42FFF41485FFFD2442003400041880000411000043102300441021000210802442FFCC00C22021AC8000283C044C423C024003244221943484494F2405000124060054000038210C0035ECAFA2001014400007000000008FBF001C8FB00018080054D027BD00200C003A4C2404001A0C0083
S3FF40008F9A3A4C004020213C0240038C4323140000000014600005000000003C0240038C4323B003E000082C62000103E00008000010213C0440033C024003248321982442219CAC822198AC63000803E00008AC600004008028213C04400308003C742484219827BDFFE83C024003AFB00010AFBF001408002407245021980C002348000000000C003C8C020020211440FFFB004020218FBF00148FB0001003E0000827BD0018000000003C0240038C421D4427BDFFE0AFB20018AFB10014AFB00010AFBF001C0080902100A088211040000500C080218C420000000000000040F809000000000C0023F3000000003C0240038C431D4800000000106000235E
S3FF40009094020028218C630000000000000060F80902402021004080213C0240038C4323AC00000000906400280000000014800012020020213C044003248421A802002821022030210C003EE024070008104000113C0340038C6222008FBF001C022210218FB200188FB100148FB00010AC62220003E0000827BD0020000028210C00703802203021080024333C0440030800242B024080210C003A4C000020213C034003246322008C62000427BDFFE024420001AFB20018AC62000400809021AFBF001CAFB100140C0023FFAFB00010124000273C0240038C4424B4240300031083001F3C044003248421A80C0043000240282110400026004080210040BD
S3FF4000918E88213C0240038C421D4C0000000010400003024028210040F809022020213C0240038C421D440000000010400006022080218C420004000000000040F80902202021022080218FBF001C020010218FB200188FB100148FB0001003E0000827BD00200C0023E8000000001440FFDF3C0440038FBF001C00008021020010218FB200188FB100148FB0001003E0000827BD00203C0240038C421D480000000010400007000000008C430004000000000060F809024020211440FFD2004088210C006AC8000000002403000C08002475AC43000027BDFFB830A3F000AFB30040AFB2003CAFB00034AFBF0044AFB1003800A080210080402100E0982139
S3FF400092881060005B00C0902124021000106200172402002F8083000000000000106200202402005C1062001F3C0240031060001D000038218C431760000000008C65000C8C6200048C6600108C640008AFA50024AFA2001C8FA20024AFA400208C420004000000001440001DAFA600280C006AC80000000024030086AC4300002410FFFF8FBF0044020010218FB300408FB2003C8FB100388FB0003403E0000827BD00483C0240038C431760240700018C65001C8C6200148C6600208C640018AFA50024AFA2001C8FA20024AFA400208C420004000000001040FFE5AFA6002827B1001C01072021022028210040F80927A600181440FFE2000000008FA259
S3FF400093820024000000008C430014000000001060001E020028218FA40018AFB10010026038210060F80902403021004080218FA20024000000001040FFD3000000008C42001C000000001040FFCF000000000040F809022020218FBF0044020010218FB300408FB2003C8FB100388FB0003403E0000827BD00480C006AC82410FFFF24030016080024C2AC4300008C42001C000000001040FFB7000000000040F80902202021080024BD00000000000000003C0240038C4424B427BDFFE824030003AFBF001410830005AFB000108FBF00148FB0001003E0000827BD00188F8280142790802010500005000000000C0075B002002021AF9080140200102176
S3FF4000947C8C4400040C006B23000000008F838014000000008C6400080C006B23000000008F8380148FBF00148C64000C8FB0001008006B2327BD001827BDFFE8AFB00010AFBF00140C00B47F008080210C00250C000000000C003A28020020210800253600000000278280143C03400327848020AC62239C03E00008AF848014000000000000000027BDFFE0AFB20018AFB10014AFBF001CAFB00010008090211085001B00A088218CB00104000000001200000827828020120200063C054001020020210C006E6F24A595940C004E940200202112510007AE2001048FBF001C8FB200188FB100148FB0001003E0000827BD00208FBF001C8FB200188FB138
S3FF4000957600148FB00010AF80801403E0000827BD00208F9080140800254A0000000027BDFFE8AFB00010AFBF00140C006BC0008080212C42000314400008000000000C006B23020020218FBF0014000010218FB0001003E0000827BD00189602000C00000000304200801040FFF7000000008E0400100C002348000000009602000C8FBF00143042FF7FA602000CAE000010AE000000000010218FB0001003E0000827BD001827BDFFE024040400AFB10018AFB00014AFBF001C0C004E9800A0882110400064004080212446007C24450014244402EC24420348AE0200083C024003260303A42442E198AE03000CAE040004AE000000AE000010AE00001456
S3FF4000967024030001A0A00018ACA00004ACA00008ACA0000CACA00010ACA00014AE02003400001021AE000030AE000038AE00003CAE000040AE000044AE000048AE00004CAE000050AE000054AE000058AE00005CA2000060AE00007CACC00004ACC00008ACC0000CACC00010ACC00014ACC00018ACC0001CACC00020AE0300ACAE0200A8240312342402ABCDA60200B2A60300B42402E66D2403DEECA60200B6A60300B82405330E240200052403000BA60500B0A60200BAA60300BCAE0000A0AE0000C0AE0000C4AE0000C8AE0000CCAE0000D0AE0000D4AE0000FCAE000100AE000104AE000108AE00010CAE000110AE000114AE000118AE00011CAE00DC
S3FF4000976A0120A20000D8A20000E0AE0000F8AE000148AE00014CAE000150AE00015400002821AE0002D424060114AE0001D4AE0002DCAE0002E0AE0002E40C007038AE0002E88FBF001CAE300104240200018FB100188FB0001403E0000827BD00208FBF001C000010218FB100188FB0001403E0000827BD002027BDFFE0AFB100183C1140032624DC880000282100003021AFB00014AFBF001C0C0026182410FFFF1050000B2624DC88240500010C002618000030211050000B240500012624DC880C00261800003021105000093C0453548FBF001C8FB100188FB0001403E0000827BD00203C0453540C003A4C348444310C003A4C3484443227BDFFB89D
S3FF4000986424A20001AFB0002C3043000230500001AFB30038AFB20034AFBF0044AFB50040AFB4003CAFB1003000A09821AFA60050AFA700540080902110600002001080803610000227A20054AFA200108FB500500C00564E00000000104000390040882127B400140200282102402021028030210C0022D0240700012403FFFF1043005032630A0024020A001062003B028080218FA300148FA20018AE23002C026020218E30000C0C00568EAE2200308E230030005010258FA400188FA500208C680000AE22000C8FA3001C8FA20014AE240014AE220010AE23001811000043AE25001C0240282102A03821022020210100F809026030211040002500403A
S3FF4000995E9021028080210C005630022020211200000E000000008E020008000000001040000A000000008C42001C0000000010400006000000000040F809020020210800266A00000000241200170C006AC800000000AC5200002402FFFF8FBF00448FB500408FB4003C8FB300388FB200348FB100308FB0002C03E0000827BD0048241200111220FFE200000000080026590000000032620400144000203C1040033C1040038E03218C3C02C4EC0223182334424EC50003188300620018000010120800266E000000000C006AC8000000008C4300002402000214620008326202001440002C000080210800267824120002028080210800267824120086AC
S3FF40009A580C006AC8000000008C520000000000001240FFE40000802108002678000000008E02218C3C04C4EC022210230002108334844EC500440018000020120C005560000028211040FFD8004090210C006AC8000000008C430000000000001460001D000000008E02218C3C04C4EC0222102334844EC50002108300440018000020120C005528000088211240FFC60000802108002678000000000240202136A58000000038210C002498000030211440FFD40240202100002821028030210C0022D0240700011040FF7500008021080026782412000D0C006AC8000000008C520000080026AF0000000000A0202100C028210800261800E0302127BD36
S3FF40009B52FFA8AFB40040AFB20038AFBF0054AFBE0050AFB7004CAFB60048AFB50044AFB3003CAFB10034AFB000300080A02180840000000000001080007D00A090213C15400327BE0010240200251482002B240300308284000100000000108300D426850001241300202402002D108200C42482FFD0304200FF2C42000A104000C8AFA0002800008021001010C0001018400062182124A500010064182180A40000000000002482FFD0304200FF2C42000A1440FFF52470FFD000A0A0210200B0212402006C108200AB000000002482FFBC304200FF2C430035106000083C0340032463EC8000021080006210218C43000000000000006000080000000039
S3FF40009C4C8EA21670000000000040F8090240B8212694000182840000000000001080004502E09021080026E6000000000000102124110008240300018E5000001043004F26570004162000020211001B0007000D00001012104000A902003021000020210800272F004080210200302100A08021162000020211001B0007000D03C4182124840001000028120000000000000000021100180000101200C2102314A0FFF2A06200002492000103C410210256182B02C088211060000AA050000000138600001086038EA316702631FFFF0060F809020020210251102B1440FFFA000000001240FFCB0000802103D288210010102702221021804300003C02FC
S3FF40009D4640032442EC68004318218EA516708064000000A0F809261000010212102B1440FFF4000000002694000182840000000000001480FF8702E090218FBF00548FBE00508FB7004C8FB600488FB500448FB400408FB3003C8FB200388FB100348FB0003003E0000827BD005824020001240300012411000A8E5000001443FFB3265700040601FFB1000000008EA21670000000000040F8092404002D12C0FFAB001080230800272426D6FFFF00001021080027202411000A8E530000000000008262000000000000104000512657000402601821000090212463000180620000000000001440FFFC265200018FA2002800000000144000350250102A7A
S3FF40009E4010400033024088218EA31670263100010060F809240400200230102A1440FFFA000000001EC00032000000008FA30028000000001060FF790256102A1040FF77024080218EA31670261000010060F809240400200216102A1440FFFA000000000800271826940001824400038EA21670000000000040F80926570004080027182694000180A400010800270724B4000124A5000180A40000240300012482FFD0304200FF2C42000A1440FF3AAFA3002800A0A02100008021080027040000B0218284000226850002080026EE241300301600FFD400000000080027990240B0218EA21670000000000040F80926730001826400000000000014803F
S3FF40009F3AFFF9000000000800279B00000000000020210800273D241200010800278C0000902100001021080027202411001027BDFFE027A20024AFA5002400402821AFBF001CAFA60028AFA7002C0C0026D4AFA200108FBF001C0000000003E0000827BD00200000000027BDFFE027A2002800A0202100402821AFBF001CAFA20010AFA600280C0026D4AFA7002C8FBF001C0000102103E0000827BD0020000000000000000000000000240200091082005A000000002882000A14400016240200042402000E10820058000000002882000F144000222402000B24021002108200583C020001288210031440003A2402000F240210031082004E3C02000362
S3FF4000A0342402100414820021000000003C02000703E00008344208001082004200000000288200051040001B240200062402000110820034000000002882000214400047240200021082004100000000240200031482000E0000000003E000082402006E10820036000000002882000B14400018000000002402000C1082001E000000002402000D108200210000000003E000082402FFFF1082001900000000288200061440000900000000240200071082002900000000240200081482FFF40000000003E000082402025803E000082402009603E00008240207081082000E00000000240210011482FFE90000000003E000083402E10003E00008240207
S3FF4000A12E12C003E00008240200C803E000082402003203E000082402258003E000083402960003E00008240204B003E000082402008703E0000824024B0003E000083442840003E000082402096003E000083442C20003E000082402004B03E000082402012C1480FFCB0000000003E00008000010213C0340038C62223027BDFFE010400005AFBF001C8FBF001C0000000003E0000827BD00203C0454522462223034846D692405000124060054000038210C0035ECAFA200101040FFF3000000000C003A4C004020210000000000000000000000003C024003AC4417243C0340033C024003AC46172CAC65172803E00008000010218C8400C40800347C7E
S3FF4000A228240500028C8200B827BDFFE03042040324030401AFB00010AFBF001CAFB20018AFB100141043005C008080218C8200B8240400023042000310440082260500498E0300808E02008400000000106200430000000040046000000000002402FFFE0082102440826000000000008E050090AE00009040026000000000002403FFFE00431024308400010082202540846000000000008E0300848E02008800A328211440000200A2001B0007000D8E030094240200020000901010620099AE1200848E0200800000000010520054000000008E0200B824030210304202101043007A000000008E020080000000000052102B14400026000000008E02C6
S3FF4000A322008000000000005288238E0200B800000000304206001040000200000000241100018E05007C240200018E0300A48E040010AE02009400B228210060F80902203021AE1200848FBF001C022010218FB200188FB100148FB0001003E0000827BD00208E020094000000001044007300000000000088218FBF001C022010218FB200188FB100148FB0001003E0000827BD00208E020088080028CB005288238C8300A48C8400102605004A0060F8092406000140046000000000002402FFFE0082102440826000000000008E0300908E0200B82463FFFF34420002AE0200B8AE03009040026000000000002403FFFE004310243084000100822025A3
S3FF4000A41C40846000000000008FBF001C24110001022010218FB200188FB100148FB0001003E0000827BD00208E0200D40000000010400004AE0000948E0500D80040F8092604003000008821080028DAAE1200848E0300A48E0400100060F8092406000140056000000000002402FFFE00A2102440826000000000008E0400908E0200B82403FFFD004310242484FFFFAE0200B8AE04009040026000000000002403FFFE0043102430A5000100A2282540856000000000008FBF001C24110001022010218FB200188FB100148FB0001003E0000827BD002040046000000000002402FFFE0082102440826000000000008E0200B82403000134420020AE0236
S3FF4000A51600B8AE03009440026000000000002403FFFE004310243084000100822025408460000000000000008821080028DAAE1200848E04008C0C0037D400000000080028BA000000008E04008C0C0037D400008821080028E6000000008C8200908C8600B427BDFFE80045102124030002AFBF001410C30012AC8200908C8300CC240200051462000B3C0240038C4220340000000010400003000000000040F809000000008FBF00140000102103E0000827BD00188FBF00140800288B27BD00188C8400C80C00347C240500021040FFF5000000000C003A4C004020218C8200CC27BDFFB83C034003AFB3002C0002114024731F80026210218C42001046
S3FF4000A610AFB40030AFB20028AFB10024AFBF0044AFBE0040AFB7003CAFB60038AFB50034AFB000200080882100A090211040002B00C0A02110C0000E000000000800299A00C080218E2200CC0000000000021140026210218C42001082440000022028210040F8092610FFFF1600FFF6265200018E2200E4000000001440000B0000B8218E2200DC0000000010400007000000008E2500E00040F8092624003024020001AE2200E40000B8218FBF004402E010218FBE00408FB7003C8FB600388FB500348FB400308FB3002C8FB200288FB100248FB0002003E0000827BD00482482004A248300302407FFFF2694FFFFAFA20014AFA300100000B821000003
S3FF4000A70AB0211287005E241EFFFE8E2200B8825300003042020010400009000000009222004A000000001262007B000000009222004900000000126200580000000016C0005A000000008E2200608E23006424420001146000020043001B0007000D00008010401560000000000002BE102440826000000000008E22005C8E2300648E250064006218230070182114A000020065001B0007000D8E2400C0000010100082102B10400014000000008E2200B800000000304200011440000F000000008E2200B80000000034420001AE2200B88E2300B824020400306304021062006A000000008E2200B824030100304201041043007A0000000040026000AB
S3FF4000A80400000000005E102432A300010043102540826000000000008E23005C0000000010700047000000008E2200580000000000501021A05300008E2300E4AE3000601460000C000000008E2200DC0000000010400008000000008FA400108E2500E00040F809AFA70018240400018FA70018AE2400E4265200012694FFFF1687FFA4000000008E2200788E240068005710210C0037D4AE220078080029AE000000008E2200B82404FFEF00441024AE2200B88E2200B82403002030420030104300032416000108002A1F265200014010600000000000021E102440826000000000008E2200B82404FFDF8E2300940044102414600016AE2200B8400291
S3FF4000A8FE600000000000005E10243203000100431025408260000000000008002A3224160001922200490000000012620014000000008E2200B8000000003442001008002A2DAE2200B826F7000108002A1F265200018E2200848E25007C8E2300A48E240010AFA7001800A228210060F809240600018FA7001808002A3F000000008E2200B8000000003842001008002A2DAE2200B88E2200B8000000003042002014400005000000008E220094000000001440FF94000000008E2200B88E2300A4344200028E2400108FA50014AFA70018AE2200B80060F809240600018FA7001808002A00000000008E2200B88E2300AC344200041060FF83AE2200B808
S3FF4000A9F88E2400100060F809AFA700188FA7001808002A00000000008CC200B427BDFFC8AFBE0030AFB60028AFB00010AFBF0034AFB7002CAFB50024AFB40020AFB3001CAFB20018AFB1001400C080210080182100A0B021104000570080F0218CD5008010A000642413FFFE241400028E03008826A20001146000020043001B0007000D0000B81002E0A8214003600000000000007310244082600000000000307100018E120084000000001657001800000000AE1400944002600000000000005310240222102540826000000000008E04008C000028210C0036B8000030211440002A000000004002600000000000005318244083600000000000305105
S3FF4000AAF200018E020084000000001052FFEA000000008E0400808E02007C93C3000000441021A04300008E040094AE1700801480000C000000008E0200B8000000003042001010400014000000008E0200B80000000034420020AE0200B824020001AE02009440026000000000000053102400511025408260000000000026D6FFFF12C0001E27DE000108002A99000000000C003A4C004020218E0200848E05007C8E0300A48E04001000A228210060F8092406000108002AD4240200018CC400108CD900A48FBF003402C030218FBE00308FB7002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB00010006028210320000827BD003862
S3FF4000ABEC8FBF00348FBE00308FB7002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD00388CA3003427BDFFE830620001AFB00010AFBF001400A080211040000FA3A40018308400FF24020009108200262C82000A104000112402000A2402000814820012306200028CA2002800000000184000022442FFFFACA200280200302127A400180C002A84240500018FBF00148FB0001003E0000827BD00181082001C2402000D1082002730620002144000333C0540038CA2186000000000004410219043000000000000306300201460FFEC020030218E020028000000002442000108002B1EAE0200288CA60028240291
S3FF4000ACE600083065180030C400072403180010A3002B0044382300E6102108002B1DAE020028306200201040000230620004ACA000281040FFD7020030213C0440032484ED60240500010C002A840200302108002B1DAE0000283062001010400005306200088CA20028000000001040FFCC30620008104000042402000A306300201060FFC3A3A2001808002B1DAE0000288CA31860000000000064182190620000000000003042000210400002000000002484FFE0A3A4001808002B2B308400FF00E610213C044003AE0200282484ED6400E028210C002A840200302108002B21000000008CA2003C27BDFFE030420200AFB00018AFBF001C00A08021D4
S3FF4000ADE01040000A308400FF3C0240038C431860000000000064182190620000000000003042002014400007240200090C002B07020028218FBF001C8FB0001803E0000827BD00201082FFF92402000A1082FFF7388300402402005E27A400100200302124050002A3A200100C002A84A3A300118E0200288FBF001C24420002AE0200288FB0001803E0000827BD00208C86002027BDFFD0AFB20018AFB00010AFBF002CAFB60028AFB50024AFB40020AFB3001CAFB100140080802110C0003800A0902114A000303C0240038C87003C3C0340032456ED742474ED70241300093C1540038E08001C24C5FFFFAE0500200105102130E300088044000010601B
S3FF4000AEDA00190000000016400004309100FF30E2001010400089000000001233004B000000008EA2186000000000005110219043000000000000306300201460002330E202003C0440032484ED74240500030C002A84020030218E0200280000000014400037000000001240000E000000008E0600200000000010C0000A000000008E07003C08002BB0000000008C87003C0000000030E200081440005B30E20010AC8000208FBF002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD00301040FFE602C02021240500030C002A84020030218E02002800000000144000603C0440038EA2186000000000005110215A
S3FF4000AFD49043000000000000306300201060FFCF000000008E07003C0000000030E202001040FFD22484ED74240500030C002A84020030218E020028000000001040FFCB000000002442FFFF08002BD0AE0200288E11002C10A00013000000008EA6186030E70200000020210104102190430000248400011073002000C31021904200000000000030420020104000170000000010E00002000000002631000214A4FFF3010410218E020028000000000222102A1040FFAE0000000002802021240500010C002A84020030218E020028000000002442FFFF0222182A1460FFF7AE02002808002BD00000000014A4FFDF2631000108002C1E000000003622E1
S3FF4000B0CE000714A4FFDA2451000108002C1E000000001440FF723C02400390840044AE0000200C002B72020028218E02003C00000000304200201040FF9D0200282108002C472404000A92040043020028218FBF002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001008002B7227BD00302442FFFF08002BF2AE02002827BDFFE0AFB1001800A088218CA50030AFB0001430A20020AFBF001C10400002309000FF3210007F30A202001040000C2402000D3C0240038C43186000000000007018219062000000000000304200011440002002002021309000FF2402000D120200482402000A1202001C30A200401600001C000000006E
S3FF4000B1C83C0340038C6217248E2400202442FFFF0082102A10400040000000008E22003C000000003042000814400047000000008E22001C2483000100441021A0500000AE230020000010218FBF001C8FB100188FB0001403E0000827BD002008002C6A2604002014400036000000008E23003C00000000306200021040FFE100000000922200430000000010500035022020219222004400000000105000420000000092220045000000001050FFE7240200012402000A1202002E306200489222004C00000000105000053062000892220051000000001450FFCA3062000810400003020020210C002B72022028218E2200208E23001C244400010062DF
S3FF4000B2C21821A0700000AE24002008002C842402000130A200801040000730A201008FBF001C000010218FB100188FB0001403E0000827BD00201040FFCE0000000008002C8D2410000A08002C8D2410000D020020210C002B72022028218E24002008002C7E000000000C002B9B0000282108002C8400001021104000032404000A0C002B72022028218E2400208E22001C24850001004410212403000AA0430000AE25002008002C84240200010C002B9B2405000108002C84000010218CA2003C27BDFFE030420E78AFB10018AFB00014AFBF001C00A0882114400007309000FF020020218FBF001C8FB100188FB0001408002C5427BD00208CA400183A
S3FF4000B3BC000030210C0036B800002821020020210C002C54022028218E2400180C0037D4004080218FBF001C020010218FB100188FB0001403E0000827BD00208C82000027BDFFD8AFB200188C520028AFB400200080A0218E4400180000282100003021AFB3001CAFBF0024AFB100140C0036B8AFB000101440000F004098218E4300CC3C0240030003194024421F80004310218C42000C000000001040000F024020210040F809028028218E4400180C0037D4004098218FBF0024026010218FB400208FB3001C8FB200188FB100148FB0001003E0000827BD00288E42003400000000304200011040001A000000008E91000C8E900008122000090000D6
S3FF4000B4B6102192040000024028210C002B072631FFFF1620FFFB261000018E82000C00000000AE8200148E4400180C0037D4000000008FBF0024026010218FB400208FB3001C8FB200188FB100148FB0001003E0000827BD00288E8400088E85000C0C002A840240302108002D34000000008C8200B427BDFFE0AFB00010AFBF001CAFB20018AFB100141040002D0080802140036000000000002402FFFE006210244082600000000000306400018E0300848E020080000000001062001A241200022411FFFEAE1200944002600000000000005110240082102540826000000000008E04008C000028210C0036B800003021144000190000000040036000B4
S3FF4000B5B000000000007110244082600000000000306400018E0300848E020080000000001462FFE90000000040026000000000002403FFFE004310240082102540826000000000008FBF001C8FB200188FB100148FB0001003E0000827BD00200C003A4C004020218C82000027BDFFB8AFB000208C500028AFB7003C0080B8218E04001400002821AFB60038AFB40030AFB3002CAFBF0044AFBE0040AFB50034AFB20028AFB100248EF3000C8EF400080C0036B800003021144000100040B0218E0300CC3C0240030003194024421F80004310218C4200080000000010400014020020210040F80902E028218E040014AE0000E40C0037D40040B0218FBF05
S3FF4000B6AA004402C010218FBE00408FB7003C8FB600388FB500348FB400308FB3002C8FB200288FB100248FB0002003E0000827BD00488E0300248E02002000000000106200220000000012600017000000008E0400248E020020000000000082102A144000080000000008002DD4000000008E020020000000000082102A1040000A000000008E02001C2673FFFF004410219043000024840001A2830000AE0400241660FFF3269400018EE2000CAE0000E400531023AEE200148E0400140C0037D40000000008002DAA000000008E0200288E0300A0AE02002CAE000020AE00002410600005006028218E0200B4000000001040007B000000002602004909
S3FF4000B7A48E110074AFA20018241200013C154003241E02028E03005C8E0200600000000010620046000000008EA217248E0300202442FFFF0062182A10600040000000008E02005C8E04006424420001148000020044001B0007000D8E0300588E0600BC000028100065182190710000AE05005C8E0200608E0300648E0400640062182100651823148000020064001B0007000D000010100046102B10400019000000008E0200B82403FFFE00431024AE0200B88E0300B80000000030630202107E0039000000008E0200B800000000304201001040000B000000008E0200B82404FFFB8E0300B000441024AE0200B810600004000000008E0400100060AC
S3FF4000B89EF809000000008E02003C00000000304200021040001B022020210C002CDF020028211040000200000000000090218E03005C8E0200608E1100701462FFBC0000000016400005000000001640FFB30000000008002DBC000000008E0400688E05006C0C0036B8022030211440FF79000000001640FFA90000000008002DBC000000000C002CDF02002821920300478E020020000000000043102A1440FFE40000000008002E33000090218E0200940000000010400006000000008E0200B800000000304200201040FFC0000000008E0300A48E0400108FA500180060F8092406000108002E29000000008E02003C0000000030420002144000376C
S3FF4000B9980000000092020047000000001440000527B200109202004600000000144000412404000227B100148E0400100060F8090000000004410015304400FF92020047000000001040003C00000000920200460000000010400005000000008E0200200000000014400038240400020C003990240400018E0300A08E0400100060F809000000000440FFED304400FF0C002CDF02002821920300478E020020000000000043102A1040FF2C000000001060000500000000920200460000000014400014240400028E0300A008002E70000000000C003990240400018E0500A08E04001000A0F80900000000304400FF0440FFF8020028210C002CDF00000A
S3FF4000BA9200001440FF16000000008E0500A008002E9D000000000C003240024028218E0300A008002E70000000000C00324027A500108E0300A008002E6F27B2001092020046000000001040FF05240400020C003240022028218FA300108FA200148E040054004310230082102B1040FFC10000000008002DBC000000008C82000027BDFFD0AFB1001C8C510028AC80000CAFB30024008098218E24001800002821AFB20020AFB00018AFBF002CAFB400288E7000080C0036B80000302114400011004090218E630004240200041062002D2C620005104000153C04400424020002106200732C62000314400052240200010C002D49022020218E240018C6
S3FF4000BB8C0C0037D4000000008FBF002CAE72000C024010218FB400288FB300248FB200208FB1001C8FB0001803E0000827BD00303482667F10620052348266800062102B1040001B3482741A2402000510620013000000008E2300CC3C02400324421F8000031940006218218C62001800000000104000DC022020210040F8090260282108002EE2004090218E0200048E030000AE2200E008002EE2AE2300DC8E0200048E030000AE2200D808002EE2AE2300D41062001D3C0280043442741B1462FFE53C0340038E2200CC24701F8000021140020210218C4200040000000010400004000000000040F80902202021004090218E620008AE2000D08C443C
S3FF4000BC8600000000000000041940020318218C620000000000001040FFBAAE2400CC0040F8090220202108002EE2004090218E6300088E2200CC08002EE2AC6200001462FFC6262600308E670008262800508CC200008CC300048CC400088CC5000C24C60010ACE20000ACE30004ACE40008ACE5000C14C8FFF624E700108CC2000008002EE2ACE200008E2300608E22005C000000000062282304A0007D000000008E2200208E2300248E640008004310230045102108002EE2AC8200008E660008263000300200382124C800208CC200008CC300048CC400088CC5000C24C60010ACE20000ACE30004ACE40008ACE5000C14C8FFF624E700108CC30000A8
S3FF4000BD8000000000ACE300008E2200B8000000003042020010400023000000008E22003000000000304204001440001E000000008E2200B82403FDEF00431024AE2200B88E2300B80000000030630020106000150000000040146000000000002402FFFE0282102440826000000000008E2200B82403FFDF8E2400940043102414800083AE2200B840026000000000002403FFFE00431024328400010044102540826000000000008E2200B800000000304204001040000E000000008E220030000000003042100014400009000000008E2200B82403FBFF00431024AE2200B88E2300B82402FFFD00621824AE2300B88E2200B80000000030420100144055
S3FF4000BE7A003F000000008E2400380000000004800055000000008E230030000000003062100010400006306204008E2200B80000000034420400AE2200B83062040010400005000000008E2200B80000000034420200AE2200B88E22003C00000000304200021040001024040003AE20006CAE200070AE2000748E2200A8000000001040FF23000000008E2400100040F8090200282108002EE2000000008E22006408002F4900A228210C00324027A500108FA20010922400462403000A008200180000101200000000146000020043001B0007000D0000181210800028AE23005492220047AE20006C1440FFE2AE23007008002FBCAE23007408002EE298
S3FF4000BF742412000A8E2400380000000004800017000000008E2200B82403FEFF00431024AE2200B88E2300B8000000003063000410600009000000008E2200B00000000010400005000000008E2400100040F809000000008E2400388E2200B82403FFFB0043102408002FA2AE2200B88E2200B8000000003442010008002FA4AE2200B892220047000000001440FFB92402000108002FBCAE22006C8E2200848E25007C8E2300A48E24001000A228210060F8092406000108002F810000000027BDFFE0AFB200183C1240038C820000AFB10014008088218E44223000002821AFB00010AFBF001C8C5000280C0036B8000030211440005E000000008E020A
S3FF4000C06E0008000000002442FFFF14400040AE0200088E0300CC3C0240030003194024421F80004310218C4200040000000010400052000000000040F809020020218E0300B42402000210620040000000008E02009C0000000010400005000000008E04000C8E0500100040F809022030218E03000000000000106000443C0240038E02000400000000AC6200048E020004000000001040004500000000AC4300008E0400140C00367C000000008E0400180C00367C000000008E04008C0C00367C000000008E0300A0000000001060001A240200028E0300B40000000010620016000000008E0400580C002348000000008E04007C0C00234800000000D8
S3FF4000C1688E04001C0C002348000000000C002348020020218E4422300C0037D4000000008FBF001C000010218FB200188FB100148FB0001003E0000827BD00208E0400680C00367C0000000008003054000000008E0400C40C00347C2405000114400006000000008E0400C80C00347C240500011040FFB8000000000C003A4C004020210C002D49020020210800302B000000008E030004000000001060000AAC432234AC6000008E0300000800303E000000003C0240031060FFBBAC43223808003043AC6000043C02400308003043AC40223827BDFFC0AFB700343C174003AFB20020008090218EE42230AFBE0038AFB5002C00C0F02100A0A8210000BB
S3FF4000C262302100002821AFB60030AFB30024AFBF003CAFB40028AFB1001CAFB000180C0036B800E0B02114400028004098213C1440038E902238000000001600000724040001080030D8000000008E100000000000001200002A240400018E02000C000000001452FFF9000000008E020010000000001455FFF5000000008E0200088FC3000024440001AC7000281440000CAE0400088E02009800000000104000040240202102A028210040F80903C030218E0300B424020002106200B33C0540018EE422300C0037D4000000008FBF003C026010218FBE00388FB700348FB600308FB5002C8FB400288FB300248FB200208FB1001C8FB0001803E0000894
S3FF4000C35C27BD00400C0021CC240500E800408821104000AE004080213C0240038C43172800000000AE2300648E2400640C00244C00000000104000A3AE2200583C0240038C43172C00000000AE2300888E2400880C00244C00000000104000A1AE22007C3C0240038C4417240C00244C00000000104000B5AE22001C8E822238AE2000D4AE2000D8AE2000DCAE2000E0AE2000E4AE22000010400002AE200004AC5100043C0340038C62223400000000104000C9AE9122383C034003806217303C145452368469002623001400442025240500012406005400003821AFA30010AE3500100C0035ECAE32000C144000743C0340038062173036846F0026233B
S3FF4000C4560018004420252405000124060054000038210C0035ECAFA30010144000693C03400380621730368478002623008C004420250000282124060020000038210C0035ECAFA300101440005E000000008EC200008EC9001C8EC300048EC400088EC5000C8EC600108EC700148EC80018AE22009824020002AE23009CAE2400A0AE2500A4AE2600A8AE2700ACAE2800B0AE20009411220074AE2900B48E2200A0000000001040005B240200028E2300B400000000106200583C034003AE2000B88E2400648E2300643C0240038045173000031040004310210002108224A30001AE2200C03C024003A04317302402250224031805AE220030240208BD5B
S3FF4000C550AE230034AE2200383403823B24020003AE23003CA22200412403001C2402007FA2230042A22200432403001524020004A2230044A22200452403001124020013A2230049A222004A2403001A24020012A223004BA222004D2403000F2402001700042042A223004EA222004F240300162402007AA2230050AE2400BCA220004C14A2FF42A2200051240300613C024003080030B7A04317308E0400C424A5C7F00C00394402003021144000073C0540018E0400C824A5C7380C003944020030211040FF43000000000C003A4C004020210C002348022020218EE422300C0037D42413001A080030CB000000008E2400582413001A0C002348000014
S3FF4000C64A00000C002348022020218EE422300C0037D400000000080030CB000000003C034003806217303C0454523484720026230068004420250000282124060024000038210C0035ECAFA300101040FF9E0000000008003186000000008E24007C0C0023482413001A8E24005808003191000000003C034003806217303C04547834845400262300C8004420252405000A2406040024070500AFA300140C003814AFA000101440FFCA3C034003806217303C04527834845400262300C400442025240500092406040024070500AFA300140C003814AFA000101040FF7300000000080031860000000008003104AC71223427BDFFD83C024003AFB20020F4
S3FF4000C744AFB1001CAFB00018AFBF00240080802124521F8027B100102404000324050002000030210C0033E0022038218FA20010000000003042000114400017020020218E0200CC0000000000021140024210218C4200140000000010400003000000000040F809000000000C00288B020020212404000324050002000030210C0033E0022038218FA2001000000000304200011040FFEB02002021AE0000C80C00387800002021080031D82404000327BDFFD0AFB30028AFB20024AFB10020AFB0001CAFBF002C0080802127B1001427B300102412FFFF0220382124050002000030210C0033E0240400038FA3001400000000306300011460001600008B
S3FF4000C83E00008E0400108E0300A0000000000060F8090000000002002021026028211052FFEE240600010C00297CA3A200100220382124050002000030210C0033E0240400038FA3001400000000306300011060FFEC00000000AE0000C40C003878000020210800320702203821000000000000000027BDFFE8AFB0001000808021AFBF00140C00577800A02021004020212402FFFF108200072403EFF08E020038000000000043102400821025AE020038000010218FBF00148FB0001003E0000827BD001827BDFFE8AFB00010AFBF001410A0002F00A080212C820005144000063C0340032402000A8FBF00148FB0001003E0000827BD0018000410802C
S3FF4000C9382463ED80006218218C6400000000000000800008000000008FBF00148FB0001000A02021080032E427BD00180C003288000000008FBF0014AE020000000010218FB0001003E0000827BD00180C003294000000008FBF0014AE020000000010218FB0001003E0000827BD00188FBF00148FB0001000A020210800327827BD00188FBF00148FB0001000A020210800329827BD001808003249240200090000000000000000000000001080000D000000003C024003904323280000000010600006000000003C0240038C4323A40000102103E00008AC83000003E000082402000B03E00008240200093C0240038C4324B03C02000F34424240146009
S3FF4000CA3200020043001B0007000D0000101203E000080000000000000000000000003C0340038C62246403E000080000000027BDFFA8AFB10050AFBF0054AFB0004C10800043008088213C0240039043232800000000146000062402000B8FBF00548FB100508FB0004C03E0000827BD005840106000000000002402FFFE0202102440826000000000000C003E2827A4001840026000000000002403FFFE00431024321000010202802540906000000000008FA3001C240203E8144000020062001B0007000D8FA2001827A4001027A50020AFA20010000018120C006EE8AFA300143C0340038C6224B08FA400148FA30034144000020082001B0007000D12
S3FF4000CB2C8FA200302463076C24420001AE230000AE2200048FA3002C8FA20028AE230008AE22000C8FA300248FA200208FBF0054AE220014AE230010000010218FB0004C00002012AE2400188FB1005003E0000827BD0058080032A324020009000000000000000027BDFFD8AFB10020AFBF0024AFB0001C1080002C008088213C0240039043232800000000146000072404000B8FBF0024008010218FB100208FB0001C03E0000827BD002840106000000000002402FFFE0202102440826000000000000C003E2827A4001040026000000000002403FFFE00431024321000010202802540906000000000008FA30014240203E8144000020062001B0007FA
S3FF4000CC26000D8FBF00248FA2001000002021AE2200008FB0001C0080102100001812AE2300048FB1002003E0000827BD0028080032EF240400090000000010800005000000003C024003AC4424B803E000080000102103E000082402000927BDFFE0AFB00018AFBF001C10800025008080210C0033A40000000014400005240200148FBF001C8FB0001803E0000827BD00200C00336C020020213C0340038E0400188C6524B03C06400300850018AFA200108CC323140000000024630001ACC323140000201200042880000411C00045102300441021000210C0AFA200140C003E9027A400100C00456E000000008FBF001C000010218FB0001803E000082B
S3FF4000CD2027BD00208FBF001C240200098FB0001803E0000827BD0020000000000000000027BDFFE8AFBF00140C003EB8000000003C0440030C004E3C248423F40C004AB0000000003C024003904323E400000000106000053C0240038C4323140000000010600005000000008FBF00140000102103E0000827BD00180C0044F4000000008FBF00140000102103E0000827BD00188C8500008C82000830A700030080402110E000302446FFFF8C8200043C0340032463EDA00002104024A5F83C000528820043102194440000000518C00005118000621821006518213C024003008648212442EDD4000720400003308000822021006618219482000000038B
S3FF4000CE1A1880006518218D04000C00431021004910218D07001000022A4000041980000211C00004208000A228230064182300671821000531008D0400143C0221DA00C53023000339803442E500000318800082202100E3382300061100004610230087202103E00008008210218C820004080033732442000D10800039008028213C0240038C4424B03C03000F34634240148000020064001B0007000D8CA20018000018120043102B1040002D000000008CA20014000000002C42003C10400028000000008CA20010000000002C42003C10400023000000008CA2000C000000002C4200181040001E000000008CA30004000000001060001A0000000063
S3FF4000CF142C62000D10400017000000008CA60000000000002CC207C414400012000000008CA40008000000001080000E0000000030C2000314400002000000002463000D3C0240032442EDE000031880006218218C620000000000000044102B03E000083842000103E000080000102127BDFFE8AFBF0014AFB0001010E0001E008018213C1040038E0223D4000000008C42010814800008000000008C4200008FBF0014ACE200008FB000100060102103E0000827BD00183C0240038C4323140000000024630001AC4323140C003408000000000C00456E000000008E0223D48FBF00148C4300348FB000100060102103E0000827BD00188FBF00142403F3
S3FF4000D00E0009006010218FB0001003E0000827BD001827BDFFE03C024003AFB000148C5023D4AFBF001CAFB10018AE0000348E09010840036000000000002402FFFE006210244082600000000000306A00018D23000000000000008340241100000530A200011088003630A200021440003430A20001144000233C11400324020001AE222DD0AE050030AE040024AE07002840026000000000002403FFFE00431024004A1025408260000000000014C000403C034001020020210C0049102405010040026000000000002403FFFE004318244083600000000000304600018E242DD024020001AE202DD010820025020028218FBF001C8FB100188FB0001402
S3FF4000D1080800433027BD002040026000000000002403FFFE00431024004A102540826000000000008FBF001C2403000DAE0300348FB100188FB00014ACE8000003E0000827BD00200008102700431024AD22000040026000000000002403FFFE00431024004A102540826000000000008FBF001C8FB100188FB00014ACE8000003E0000827BD002040026000000000002403FFFE004310240046102540826000000000008FBF001C8FB100188FB0001403E0000827BD00208E0200082463D4C03C044003AE030064AE020068AE060054AE000050AE00006C248423F40C004D4426050048080034310200202127BDFFE0AFB0001800A08021AFBF001C0C00ED
S3FF4000D202457C27A50010004028218FA20010000000001440001D240200048CA3010840046000000000002402FFFE0082102440826000000000008C6200000000000000501025AC62000040026000000000002403FFFE00431024308400010082202540846000000000000C0034A800A020210C00456E000000008FBF001C000010218FB0001803E0000827BD00208FBF001C8FB0001803E0000827BD00200000000027BDFFE8AFB00010AFBF0014008080218C8701088C89003040036000000000002402FFFE006210244082600000000000306800018CE600008C840024000000000086282410A000433C0240038C4323B000000000106000053C024003C3
S3FF4000D2FC8C4323D400000000120300523C0A40038E02001000000000304201001440000C0000000040026000000000002403FFFE004310240048102540826000000000008FBF00148FB0001003E0000827BD001810850003312200021040FFF200000000000510278E03002800461024ACE20000AE000024AC65000040026000000000002403FFFE0043102400481025408260000000000040036000000000002402FFFE006210244082600000000000306400018E030050240200021062001A2402000340026000000000002403FFFE004310240044102540826000000000003C051003020020218FBF00148FB0001034A5FFF80800440C27BD0018400214
S3FF4000D3F66000000000002403FFFE004310240048102540826000000000008FBF00148FB0001003E0000827BD0018AE02005040026000000000002403FFFE004310240044102540826000000000000C004DE826040048080034F73C0510038D432DD02402000110620005000000008D432DD0240200021462FFA800000000108500033122000210400009000000008E020028000518270066182424040003ACE30000AD442DD0AE000024AC45000040026000000000002403FFFE004310240048102540826000080034CF0000000027BDFFE0AFBF001C0C00457C27A50010004020218FA2001000000000144000210000000040026000000000002403FFFE0D
S3FF4000D4F0004318244083600000000000304500018C820024000000001040001A3C0240038C4323D40000000010830026AC80002424020006AC82003440026000000000002403FFFE004310240045102540826000000000003C0510030C00440C34A5FFF83C0340038C622314000000002442FFFFAC6223148FBF001C0000000003E0000827BD00203C0340038C622314000000002442FFFFAC62231440026000000000002403FFFE004310240045102540826000000000008FBF001C0000000003E0000827BD00203C0340038C622DD0000000002C4200021040FFD624020002AC622DD0080035492402000600000000000000003C0240038C43190027BDB2
S3FF4000D5EAFFE82463FFFF0065182B00A03821AFBF00141460000F00802821108000090000000010C00007000000000C004FD900E020218FBF00140000102103E0000827BD00188FBF00142402000903E0000827BD00188FBF00142402000A03E0000827BD00180000000000A01821008010213C04400327BDFFE800C0382124842DD400603021AFBF00140C004274004028213C034003000210802463F0408FBF0014004310218C42000003E0000827BD0018000000000000000027BDFFC8AFB20030AFB1002CAFB00028AFBF003400A080210080882110A0002600C090213C04400324842DD4022028210C0041FC27A60020004020218FA200200000000047
S3FF4000D6E4104000083C027FFF8FBF0034240200048FB200308FB1002C8FB0002803E0000827BD0038020028210240302102203821248400143442FFFFAFA20014AFA00010AFA000180C003CB0AFA0001C0C00456E004080210C0035E0020020218FBF00348FB200308FB1002C8FB0002803E0000827BD00388FBF0034240200098FB200308FB1002C8FB0002803E0000827BD00380000000000000000000000003C0240032442174000042080008220218C82000003E000080000000000000000080041A000000000000000000000000027BDFFB8AFB5003CAFB40038AFB30034AFB00028AFBF0044AFB60040AFB20030AFB1002C0080A02100A0982100C0CF
S3FF4000D7DE80211080002500E0A8218FA20058000000001040000A2402000930C300C01060001130D1003024020010122200142402002012220013320200042402000B8FBF00448FB600408FB5003C8FB400388FB300348FB200308FB1002C8FB0002803E0000827BD00481220000E2E6200021440000C2402000A0800360700000000320200041040FFED240200C01462FFF62402000B080036070000000008003607240200033C0340038C6223140000000024420001AC6223143C1640030C003FDC26C4223C1040003D004090211220001AAC50001032020040104000313202008024020002AFA20020240200101222003724020002AFA20018A3A0001CEE
S3FF4000D8D83A6600012CC600012644001427A500180C003D24AFB50024240300061443001426C4223C0C004108024028210C00456E000000000800360724020013320200041040001D0000000024020001AFA200142402FFFF026030212644001427A50010AFA20010AFA000180C003DF0AFA000248E45000826C3223C8C64001C30A2FFFF00021080008220218FA20058AE54000CAC9200000C00456EAC450000080036070000102110400015320200042402000308003631AFA200200800364AAFA000140C00456E0000000008003607240200058FA30020000000002C6200021440FFC7AFA000182C6200041040FFC63A6600012402000108003637A3A2B8
S3FF4000D9D2001C104000032402000108003631AFA2002008003631AFA000200000000027BDFFD8AFB100203C1140030080282127A60010AFB0001CAFBF00240C0041FC2624223C004080218FA200100000000010400006240200048FBF00248FB100208FB0001C03E0000827BD00288E020010000000003043003010600020260400148E020064000000001440000B240200201062000A000028210C00456E000000008FBF00242402000C8FB100208FB0001C03E0000827BD0028000028210C003D20240600042624223C0C004014020028212624223C0C004108020028210C00456E000000008FBF0024000010218FB100208FB0001C03E0000827BD002879
S3FF4000DACC000028210C003DEC24060002080036A62624223C27BDFFD0AFB0001C008080213C044003AFB30028AFB1002000C0982100A0882127A600102484223C0200282127A70014AFBF002C0C004170AFB20024004030218FA200100000000010400008240200048FBF002C8FB300288FB200248FB100208FB0001C03E0000827BD00308CC200100000000030420030104000323C1240033C0840038D022314000000001040000832220001144000063C0340038C6224B4000000002C42000210400084000020218E4523D48FA40014ACA000348CC200640000000014400049240300018CC200700000000010A200AA322200011040007A24020001400324
S3FF4000DBC66000000000008FA200142404FFFE00641824304200010062182540836000000000008E4423D424020001AC8200348E4223D4000000008C4400340C003804000000008FBF002C8FB300288FB200248FB100208FB0001C03E0000827BD00308E4723D48FA50014ACE000348CC2005C000000001440001A2442FFFF322200011040006D3C03400340026000000000002403FFFE0043102430A4000100441025408260000000000024030001ACE300348E4223D4000000008C4400340C00380B000000008FBF002C8FB300288FB200248FB100208FB0001C03E0000827BD0030ACC2005C40026000000000002403FFFE0043102430A40001004410252A
S3FF4000DCC0408260000800371D00000000ACC00064ACC500708CA200088CC7005CACC200742402000210E2000DACC300682402000310E2000A0000000040026000000000002403FFFE00431024308400010044102540826000080036FD000000008CA2001C0000000024420001ACA2001C8CC3005C240200031462FFF0000000008CC200608CA3001400000000104300560043102B1440006A2402000624030001ACA20034ACC30064ACC000688CA2001C000000002442FFFFACA2001C40026000000000002403FFFE00431024308400010044102540826000080036FD00000000000028210C003F7824060013ACC200448D03231424C2001424630001ACB01C
S3FF4000DDBA0020ACA20044AD03231440036000000000008FA200142404FFFE006418243042000100621825408360000000000024C400140C003D5C02602821080036FD000000008C6223140000000024420001AC6223142402000124C40014ACC20044ACF00020ACE4004440026000000000002403FFFE0043102430A500010045102540826000000000003C064001026028210C00470424C622C00C00456E000000000800371D000000008CC300540000000014600017240200018CC200680000000024420001ACC2006840026000000000002403FFFE00431024308400010044102540826000080036FD0000000040026000000000002403FFFE0043102489
S3FF4000DEB4308400010044102540826000080036FD000000001462FF3C3222000124020002ACA2003440026000000000002403FFFE00431024308400010044102540826000080036FD000000008D0223140000000024420001AD02231440026000000000002403FFFE00431024308400010044102540826000000000008CC500608CC400700C00435C000030210C00456E00000000080036FD000000000000000027BDFFE0AFB00018008080213C0440032484223C02002821AFBF001C0C0041FC27A60010004020218FA200100000000010400005240200048FBF001C8FB0001803E0000827BD00208C82001000000000304200301440000C02002821248441
S3FF4000DFAE00140C003DFC000030210C00456E004080210C00380B020020218FBF001C8FB0001803E0000827BD0020248400140C003D80000030210C00456E004080210C003804020020218FBF001C8FB0001803E0000827BD00200000000000000000000000003C0240032442EE5000042080008220218C82000003E00008000000003C0240032442EE6C00042080008220218C82000003E0000800000000000000000000000027BDFFA8AFB700508FB7006CAFB6004CAFB40044AFB2003CAFB10038AFBF0054AFB50048AFB30040AFB000340080A02100A0882100C0B02112E0005100E0902110800034240200038FA30068000000003062800014400009C8
S3FF4000E0A80000000010A0002D240200133C03400390621504000000000045102B14400027240200133C1540038EA423CC0C003BB03C1340030C003FDC2664227C1040003500408021001212023842000100121A423042000130630001324800FF2664227C02C038210200282100003021AFB10014AFA20018AFA3001CAFA80024AFB40028AFA000100C0045ACAFA000201040001600000000001212828E0500088E03010838420001304200018EA423CCA06200080C003C64AEE50000000010218FBF00548FB700508FB6004C8FB500488FB400448FB300408FB2003C8FB100388FB0003403E0000827BD00588E0400080C00413C00000000004020210C007D
S3FF4000E1A24108020028218EA423CC0C003C6400000000080038592402000D8EA423CC0C003C640000000008003859240200050800385924020009000000000000000027BDFFD8AFB100203C114003AFB0001C008080218E2423CCAFBF00240C003BB000000000020020210C00457C27A50010004080218FA200100000000014400018000000008E0400080C00413C00000000004020210C004464020028218E0400080C00413C00000000004020210C004108020028218E2423CC0C003C64000000000C00456E000000008FBF0024000010218FB100208FB0001C03E0000827BD00288E2423CC0C003C64000000008FBF0024240200048FB100208FB0001CC0
S3FF4000E29C03E0000827BD002800000000000000000000000027BDFFE800C03821AFBF00140080102110E0001900A030211480000A000020213C0240038C4323D48FBF00148C62000800000000ACE2000027BD001803E00008008010213C0440032484227C0C004274004028213C034003000210802463F040004310218C4400008FBF00140080102103E0000827BD00188FBF0014240400090080102103E0000827BD0018000000003C0240038C4323AC27BDFFC88C640040AFB2002C8C82002CAFBF0034AFB30030AFB10028AFB000248C920028104000190000000012400017004080210000882127B300188E0400008E0500088E0600048E0700148E02BC
S3FF4000E396000CAFB300140C003814AFA2001014400013004030218FA400188E0500108E0600180C003944000000001440000B263100010232102B1440FFED2610001C8FBF00348FB300308FB2002C8FB100288FB0002403E0000827BD003800403021240400010C003F782405000127BDFFE0AFBF001C0C00457C27A50010004018218FA200100000000010400005240200048FBF001C0000000003E0000827BD00208C620010000000003042000210400007000000000C00456E000000008FBF001C2402000F03E0000827BD00200C00456E000000008FBF001C0000102103E0000827BD0020000000000000000027BDFFE0AFB0001800A08021AFBF001C73
S3FF4000E4900C00457C27A50010004020218FA20010000000001440000D24020004020030210C0048C4000028211440000C000000000C00456E000000008FBF001C2402000E8FB0001803E0000827BD00208FBF001C8FB0001803E0000827BD00200C00456E000000008FBF001C000010218FB0001803E0000827BD0020000000000000000027BDFFD0AFB10028AFB00024AFBF002C00A0802110A0002000C088210C00457C27A50018004020218FA20018000000001040000702003021240200048FBF002C8FB100288FB0002403E0000827BD003000002821000038210C004A14AFB1001014400009000000000C00456E000000008FBF002C2402000E8FB164
S3FF4000E58A00288FB0002403E0000827BD00300C00456E0000000008003953000010218FBF002C240200098FB100288FB0002403E0000827BD003027BDFFE0AFBF001C0C00457C27A50010004020218FA200100000000010400005240200048FBF001C0000000003E0000827BD00208C820010000000003042000210400007000000000C00456E000000008FBF001C2402000F03E0000827BD00200C004A2C000000000C00456E000000008FBF001C0000102103E0000827BD00203C0340038C62231427BDFFE024420001AFB10018AFBF001CAFB0001400808821AC622314108000193C1040038E0423D40C004910240500088E0523D43C0240018CA30008F4
S3FF4000E684244213703C044003ACA20064ACA30068ACB10054ACA00050ACA0006C248423F40C004D4424A500480C00456E000000008FBF001C000010218FB100188FB0001403E0000827BD00200C004AE0000000000C00456E000000008FBF001C000010218FB100188FB0001403E0000827BD0020000000000000000000000000240300023C02400308004A04AC4324B427BDFFE8AFBF00140C003A54000000008FBF001408003B5427BD001808003B3C0000000027BDFFE0AFB00014AFBF001CAFB100180080802140026000000000002403FFFE0043102440826000000000001080004A3C0440013C024003248413D03C1140030C004FB8AC5023AC0C0036
S3FF4000E77E5C6CAE2024B40C003B34000000008E0500048E040000240300013C024003AC4323140C004EAB000000008E05003C8E0400380C004BC4000000000C003F90000000000C0042A0000000003C0240032442232C3C034003240400010C003C54AC6222D03C0440030C003B8C248423CC3C024003A44023C83C0340033C0240032463244024422460A4600000246300021443FFFD000000000C004DD0000000008E04000C0C003E80000000008E0500088E0400100C004624000000000C003B08020020218E0400080C003A38000000008E0500308E06002C8E0400340C003A6A000000000C003AD4020020210C003AAC0200202124020001AE2224B43E
S3FF4000E8788FBF001C8FB100188FB000140800449C27BD002000002021240500010C003F7800003021000000003C0640038CC224B427BDFFB02403000410430006AFBF004C3C05400324A522E027A400100C004ED4ACC324B48FBF004C0000000003E0000827BD005000000000008038213C04400327BDFFD8240200442403000424842E142405000224060009AFBF0024AFA20010AFA300180C004224AFA000148FBF00240000000003E0000827BD002800000000000000000000000027BDFFE80080302100002821AFBF00140C003F7824040001000000000000000027BDFFE0AFB100183C1140038E222E54AFBF001C1040000BAFB0001400008021020032
S3FF4000E9722021000028210C005C84000030218E232E54261000010203182B1460FFF9020020218FBF001C8FB100188FB0001403E0000827BD002027BDFFD800A6102BAFB30020AFB2001CAFB10018AFBF0024AFB0001400A0902100C088211440000C008098213C0240033C034003AC442E58AC652E548FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD0028000610C000068140020280230C004E9C0200202100402021020030213C0340033C10400300002821AC712E540C007038AE022E581240FFEB000058218E0C2E5800005021026A10218C4900148C4400008C4500048C4600088C47000C8C480010256B0001018A18210172102BAA
S3FF4000EA6CAC690014AC640000AC650004AC660008AC67000CAC6800101440FFEF254A00188FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD0028000000000000000027BDFFE8AFB000108C9000480000000012000020AFBF00148E0500208E0600248E0400003C024003244225183C0340030C005859AC6222DC8E0400040C005810000000008E0400080C0057F0000000008E04001C0C005800000000008E04000C0C005820000000008E0400100C005830000000008E0400140C005840000000008E0400188FBF00148FB000100800587027BD00183C02400308003AB22450EFD027BDFFE8AFB000108C9000440000000012000029AFBFA8
S3FF4000EB6600148E0400143C024003244229883C0340030C005908AC6222D88E05002C8E0600308E0400000C0059C1000000008E0400080C005880000000008E04000C0C005894000000008E0400040C0058CC000000008E0400180C0058A8000000008E04001C0C005ACC000000008E0400100C005AB8000000008E0400200C0058E0000000008E0400240C0058F4000000008E0400288FBF00148FB00010080059A427BD00183C02400308003ADA2450F00000000000000000000000000027BDFFE8AFB000103C0240038C90004024422A003C034003AFBF00140C005B1CAC6222D48E0400000C005BC4000000008E0400080C005B70000000000C005B98EB
S3FF4000EC60000000000C005B18000000008E0400100C005B20000000008E04000C0C005B84000000008E0400140C005B34000000008E0400180C005B5C000000008E04001C0C005B04000000008E0400200C005B48000000008E0400248FBF00148FB0001008005AF027BD001800000000000000003C0440033C024003248324CC244224D0AC8224CCAC63000803E00008AC60000427BDFFE03C024003AFB000143C0340038C5024CCAFB10018247124D01211000BAFBF001C8E0200080000000010400003000000000040F809000000008E100000000000001611FFF7000000008FBF001C8FB100188FB0001403E0000827BD002027BDFFE03C024003AFB0F5
S3FF4000ED5A00143C0340038C5024CCAFB10018247124D01211000BAFBF001C8E02000C0000000010400003000000000040F809000000008E100000000000001611FFF7000000008FBF001C8FB100188FB0001403E0000827BD002027BDFFE03C024003AFB000103C0340038C5024CCAFB10014247124D0AFBF001C1211000DAFB200183C1240038E0200100000000010400004000000008E4423D40040F809000000008E100000000000001611FFF6000000008FBF001C8FB200188FB100148FB0001003E0000827BD0020008028213C04400308003C74248424CC27BDFFC8AFB100283C114003AFB30030AFB2002C008098212412000126242400240200021C
S3FF4000EE54AFBF0034AFB00024AFB20010AFA20018A3A000140C003FDCAFA0001C0040802127A50010244400100C003D2424060001263124009602000A8E23001C0002108000621821AC700000AE12000C8FBF0034AE7000008FB2002C8FB300308FB100288FB0002403E0000827BD003827BDFFE8AFBF00140080302140046000000000002402FFFE0082102440826000000000003C0840038D02231400000000104000073C0240033C0340038C6224B4000000002C420002104000713C0240038C4523D400000000ACA000348CC20060000000001040001830870001ACC000608CA200088CC3005824040001ACC2007024020002ACC5006C10620028ACC4C8
S3FF4000EF4E0064240200031062002A0000000040026000000000002403FFFE004310240047102540826000000000008FBF00140000000003E0000827BD00188CC2006C0000000010A20034000000008D0323148CC2000824630001ACA2002024C4001024020001AD032314ACC20040ACA4004440026000000000002403FFFE00431024004710254082600000000000000028218FBF001424C4001008003D5C27BD00188CA2001C000000002442000108003BD7ACA2001C8CA2001C8CA3001424420001ACA2001C8CC2005C00000000104300310043102B1440003724020006ACA20034ACC40060ACC000648CA2001C000000002442FFFFACA2001C400260004E
S3FF4000F048000000002403FFFE00431024004710254082600008003BDE000000008CC30050000000001060000C240200011462FFC824020002ACA2003440026000000000002403FFFE00431024004710254082600008003BDE000000008CC200640000000024420001ACC2006440026000000000002403FFFE00431024004710254082600008003BDE0000000000002021000028210C003F782406001340026000000000002403FFFE00431024004710254082600008003BDE000000008D0223140000000024420001AD02231440026000000000002403FFFE004310240047102540826000000000008CC5005C8CC4006C0C00435C000030218FBF00140800DF
S3FF4000F142456E27BD00180000000000000000008038213C04400327BDFFD824020074248424002405000124060002AFBF0024AFA20010AFA000140C004224AFA000188FBF00240000000003E0000827BD00283C0240038C43231427BDFFE824630001AFBF0014AC4323148C850008000030210C003D80248400108FBF00140800456E27BD001800000000000000000000000040066000000000002402FFFE00C21024408260000000000024820004ACA200008C830008AC850008ACA30004AC65000040026000000000002403FFFE0043102430C6000100C23025408660000000000003E0000800000000000000000000000040066000000000002402FFFE3B
S3FF4000F23C00C2102440826000000000008C8500002482000410A2000F000000008CA2000000000000AC820000AC44000440026000000000002403FFFE0043102430C4000100441025408260000000000003E0000800A010210000282140026000000000002403FFFE0043102430C4000100441025408260000000000003E0000800A01021000000008C82004C27BDFFD00046102BAFB50028AFB40024AFB30020AFB2001CAFB10018AFBF002CAFB000140080902100C0982100A0A02193B1004B1440003000E0A8218C8300480000000010600036000000008E420044000000000062102B144000410000000012200026240200023C0240038C4323B0000081
S3FF4000F336000014600038000000003C0240038C4323D440046000000000002402FFFE0082102440826000000000008FA20044AC750020AC62002424020001AE420030AC730030AC74002CAC72004440026000000000002403FFFE00431024308400010082202540846000000000003C0640018FA5004C024020210C00470424C622C008003CF024020007240200018FBF002C8FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD00300C004664000000001040001E004080218C44002C028028210C006F80026030218FA200448E030028AE020024AC73000008003CF00000102108003CF0240200030C003C8C264400681040FFFBC8
S3FF4000F4300040802102802821244400100C006F8002603021AE13000C8FA3004402402021AE0300088FA600440C005CCC0200282108003CF0000010218E43004808003CC4000000000000000000000000000000000800484400000000000000000000000000A040218CA300008D0700088CA500048D02000C27BDFFE8AFBF0014AC830040AC850044AC82004CAC870048AC86005014C00018AC8000583C0240038C4523D424030001AC8300548CA20008AC85005CAC8200602402000210E200032402000314E2000F000000008CA200148C83004C000000000043102B14400012240200068CA2001C000000002442000108003D4CACA2001CAC800054AC80F0
S3FF4000F52A005CAC8000608D050008240604000005282B0C004858240700058FBF00140000102103E0000827BD00188FBF00140000000003E0000827BD001800000000000000000000000027BDFFE08C820048AFB000143C0340030080802124040002AFB10018AFBF001C00A088218C6523D41044000E000000008E0200583C06400124420001AE02005802002021022028210C00470424C622C08FBF001C8FB100188FB000140800456E27BD00208E04005C8CA500148C8200140000000000A2102B1040FFED000000000C00435C0000302108003D68000000009082004427BDFFE8AFB00010AFBF0014008080218C84005C1040000A3C0240038C4323D436
S3FF4000F6240000000010830006240300038FBF0014006010218FB0001003E0000827BD00188E020054000000001040001F2442FFFF14400023AE0200548E030048240200021062003424020003106200320000000024020002AE00005C10620021AE000060240200031062001E000000000C004664020020211040003E004020218C4200088E050048AE0200602403000124020002AE03005410A20031AE04005C2402000310A20021000000008FBF001400001821006010218FB0001003E0000827BD00188E030040000000001060FFF7240200011462FFD92403000208003D8C000000008C82001C000000001440FFE0000000008C8500188C8200140000CD
S3FF4000F71E000010A2FFDB000000000C00435C2406000108003DA4000000008C82001C000000002442FFFF08003D9DAC82001C8C82001C8C83001424420001AC82001C8E05004C0000000000A3182B1060FFD8000000000C00435C0000302108003D8C000018218C82001C000018212442000108003D8CAC82001C24020001AE02005008003D8C00001821000000000000000000000000080048440000000000000000000000008CA700048CA30000AC870044AC8300408CA50004AC86004838A500012CA500012406020008004858240700030000000027BDFFE8AFB00010AFBF00140C0046640080802110400006000028218FBF001400A010218FB000108B
S3FF4000F81803E0000827BD001840046000000000002402FFFE0082102440826000000000008E0300488E020040000000000062102B1440000F246200012405000440026000000000002403FFFE00431024308400010044102540826000000000008FBF001400A010218FB0001003E0000827BD0018AE02004808003E150000282100000000000000000000000027BDFFD8AFB0001CAFBF0024AFB1002000808021AFA00010AFA0001440116000000000002402FFFE0222102440826000000000003C044003248223A43C0340038C4500048C6324B88C8223A4AE05000410600004AE0200000060F80900000000AFA2001440026000000000002403FFFE004331
S3FF4000F912102432240001004410254082600000000000020020210C004B2C27A500108FBF00248FB100208FB0001C03E0000827BD002800000000000000000000000027BDFFD8AFB0001CAFBF0024AFB1002000808021AFA00010AFA0001440116000000000002402FFFE0222102440826000000000003C044003248223943C0340038C4500048C6324B88C822394AE05000410600004AE0200000060F80900000000AFA2001440026000000000002403FFFE0043102432240001004410254082600000000000020020210C004B2C27A500108FBF00248FB100208FB0001C03E0000827BD00280000000000000000000000003C0221DA3C0540033C084003AF
S3FF4000FA0C3442E50024A623A4250723943C034003ACA223A43C024003AC6424B0ACC00004ACE00004A040232803E00008AD002394000000003C0240038C43231427BDFFE024630001AFB00014AFBF001CAFB1001800808021AC4323143C1140038C8300008E2623A4000000000066102A144000123C04400300663023248423E80C004CF0000028218E0400048E050000262223A4AC440004240300013C024003AE2523A48FBF001C8FB100188FB0001427BD00200800456EA043232800C33023248423E80C004CF02405000108003EA400000000000000003C0240038C4324B03C07400300032080000311C027BDFFD88CE624640044102300431021AFB091
S3FF4000FB06001C3C04400327B0001024C6000102002821000210C024842394AFBF0024ACE62464AFB10020AFA200140C004B2CAFA000103C044003020028210C004B2C248423A410400008004080213C024003245123E82610FFFF0C004E3C022020211600FFFD2610FFFF8FBF00248FB100208FB0001C03E0000827BD002800E048210080602100A0702114E0004300C06821240900080000202125C20008152000020049001B0007000D000018101060000300000000012210210043102314800033244AFFF824040010014E10232442000801A2182B1460002BAD84001401A21023152000020049001B0007000D0000181000435823116000233C074003B7
S3FF4000FC008CE52080014B2021240600013562000101CD182124A80001AD890010AD4C0008AD420004AD490000AC890004AC8B0000AD4C000CAD8D002CAD86003CAD850028AD8B0030AD8B0034AD860038AD800040AD800044AD800048AD80004CAD800050AD800054AD83001CACE82080AD8E0018AD8A0008AD8A000CAD8A0020AD84002403E000082562FFFC03E00008000010212522001008003EF30044202330E400071080000224E300080064482324020010152000020049001B0007000D0000201008003EE825C200082482000414A000020045001B0007000D00001810106000030000000000A2102100431023004028210046102B104000030085BA
S3FF4000FCFA102B00C028210085102B14400002000000000000282103E0000800A010218CA300042402FFFE006238248C82001400E640230102102B00A05021008058211440001A00C0482100A610218CA700088CA6000C352300010048282135040001AD430004AC470008AC46000CACA80000AC440004ACC20008ACE2000C8D6300308D620034006918230062102B10400002AD630030AD6300348D630040012010212463000103E00008AD63004000A720218C8200048CA5000834420001AC8200048D6300388D42000C2463FFFFACA2000CAD630038AC45000808003F5D00E0482100000000000000003C024003244323BC30A700FF27BDFFE8AC66000847
S3FF4000FDF4A0670004AC4423BCAFBF00140C004C2E00E02821240400053C034003AC6424B440026000000000002403FFFE00431024408260000000000008003F8B0000000000000000000000000000000027BDFFE8AFB000103C1040038E0419003C034003000420803C024003AFBF0014AC6023B00C004E9CA04024688E0619003C0340038FBF00148FB0001000402021000630800000282127BD001808007038AC62239000000000000000000000000027BDFFD8AFB3001CAFBF0024AFB40020AFB20018AFB10014AFB0001010800023008098213C0240033C034003245222D0247422E08E4200000000000010400018000000008C5100040000000012206B
S3FF4000FEEE001400000000962500100000000010A0001000000000241000018E22001C00101880004310218C4300002610000110600005006020210260F80900000000962500100000000000B0102B1040FFF300000000265200041692FFE3000000008FBF00248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD0028000000008C82001827BDFFE0AFB00014AFBF001CAFB100181440000800808021000028218FBF001C00A010218FB100188FB0001403E0000827BD0020249100200C003C8C022020210040282192020012000000001040FFF30000000010A00019000000009604000A94A3000A8E02001400641823144000020062001B3B
S3FF4000FFE80007000D8E0400309602002C8FBF001C2442FFFFA602002C8FB100188FB0001427BD00200000181200031880008320218C820000000000002442FFFFAC82000003E0000800A010210C00401C020020210C003C8C022020211040FFD30040282108003FF40000000094A2000A8C83001C000210800062182108004260AC600000000000000000000027BDFFB0AFB00028948600109490000AAFB2003000D0102BAFBF004CAFBE0048AFB70044AFB60040AFB5003CAFB40038AFB30034AFB1002C10400091008090218C830014020098210000F0210000882124140001240400039242001200663021144000A6AFA600208FA200200090202100820C
S3FF400100E220210C004E9C000420800040B021964200100014188002C3A8210202102B144000A602A3B8211200000702E0202100001821246300010070102BAC8000001440FFFC24840004001EA08002B41021AC4000008E43001402D42021026328210265102B10400009AC8000000013108002E2202102601821246300010065102BAC8000001440FFFC2484000440056000000000002402FFFE00A2102440826000000000008E420000964400043C0300010002160000431025000426C0004410258FA40020AE5500303083FFFF004310258E440034AE57001CAE42000CA6430010AE56003440026000000000002403FFFE0043102430A5000100A228250F
S3FF400101DC408560000000000010800003000000000C004E94000000008E4300149242001200000000104000770011A8808E4400188E50003400640018000020120C004E98021580218E430034AE020000007518218C6500000000000010A0002227B400108E4600148E470018028020210C005CB40260802126510020080040A13C1300018E420000964300040002160000031EC00053102500431025005010250C003C74ACC20008261000010C003C8C0280202100403021004028211440FFF1022020218E4200308E43001400551021AC4300009644002C8E4200140000000000441021A642002C8FBF004C8FBE00488FB700448FB600408FB5003C8FB4CB
S3FF400102D600388FB300348FB200308FB1002C8FB0002803E0000827BD00508C830014000000001460000200C3001B0007000D0000281210A0004100A0F0218C840034000000008C820000000000001040003B0000000002009821080040D1000088218C820004000000001040000524840004263100010225102B1440FFF9026398210266102B1440FFA724B4000100141040080040320054202100902021008620210C004E98000420801040FFD00040B021964200100014188002C3A8210202102B1040FF5C02A3B821001EA0808E450034028030210C006F8002C020218E45003002A020210C006F8002803021964600108E45001C020630210006308059
S3FF400103D00C006F8002E020210800404C02B410218E4400188E50003400640018000020120C004E9C021580218E430034AE020000007518218C6500000800408F27B4001002009821080040D5000088210000000027BDFFE0AFB000100080802124840020AFB20018AFB10014AFBF001C8E1200140C003C7400A08821920200120000000010400018000000009604000A9623000A8E02001400641823144000020062001B0007000D9602002C8E05003000122042244200013042FFFF009220210082202BA602002C000018120003188000A328218CA20000000000002442000114800007ACA200008FBF001C8FB200188FB100148FB0001003E0000827BDD0
S3FF400104CA0020020020218FBF001C8FB200188FB100148FB00010080042A427BD002000000000000000000080282100042602308400070800414400052EC20000000000000000000000002482FFFF27BDFFE02C420004AFB10018AFB00014AFBF001C008088211040000300A0802114A0000800000000000018218FBF001C006010218FB100188FB0001403E0000827BD00200C005E10000000000440FFF7000018210050102B1440FFF43C02400300111880244222CC006218218C630000000000001060FFEC00101080006210218C430000000000001060FFE80000000094620010000000001440FFE40000000008004150000018210000000030A5FFFF12
S3FF400105C440026000000000002403FFFE0043182440836000000000003048000194820010000000000045102B1440000C000518808C82001C00000000004310218C440000000000001080001000000000ACE80000ACC0000003E000080080102140026000000000002403FFFE0043102400481025408260000000000024030001ACC30000080041860000202140026000000000002403FFFE004310240048102540826000000000002403000108004186ACC3000000000000000000000000000027BDFFC8AFB10028AFB00024AFBF0034AFB30030AFB2002C00A0882114A0000A00C08021000080218FBF0034020010218FB300308FB2002C8FB100288FB048
S3FF400106BE002403E0000827BD003810C0FFF700000000108000343C024003008090210C00413C024020211040FFEF0040982102402821004020210C0041FC27A60010004018218FA20010000000001440FFE60000000092620038000000001040002727A800148C68000C000000001100001A020038212625FFFF10A00017020038218104000000000000108000133C094003080041D90000302181040000000000001080000D000000008D22186024C60001004410218043000025080001306300971460000200C5102B2404002AA0E400001440FFF124E700010C00456EA0E00000080041AA000000008C4323D4000000008C720008080041B70000000034
S3FF400107B88C62000C0000000000021E020002240200022A02A3A00018A3A30014A3A40015A3A50016080041CCA3A2001700000000000000000000000027BDFFE08C820008AFB20018241200010242102394830010004528210065182BAFB10014AFBF001CAFB000101460001500C088213C0340038C6223140000000024420001AC6223148C82001C00051880004310218C500000000000001200000C00000000ACC000008FBF001C020010218FB200188FB100148FB0001003E0000827BD0020ACD2000008004216000080210C00456E0000000008004216AE3200003C024003244222CC00054880012248213C027FFF3442FFFF3C0300010005460000E22D
S3FF400108B26824010340258D2A0000000616C0010240258FAC001800061080000D182B0142502197AB001293A900173C0240030103402500073FC22442209031830003A0890038AD440000AC8B0018A0870012AC82001CAC880008AC850000A4860004AC800030AC800034A480002C1460000BAC8D0014018028212482002424830020A485003AAC820020AC83002815A0000DAC80002403E0000800000000258300042402FFFC006228242482002424830020A485003AAC820020AC83002811A0FFF5AC8000240800401CA4800010000000009082003827BDFFE8AFB00010AFBF00141040000700A080218CA4000C0000000010800003000000000C004E94CF
S3FF400109AC00000000AE00000C8FBF00148FB0001003E0000827BD001800000000000000000000000010E000262403000210A00016240300019489001000000000112000120000000014C000123C027FFF1120000E240300018C84001C240600018C83000424C600010126402B10600005248400048C62000C000000001045000C000000001100FFF62403000103E00008006010213442FFFF10C2FFED2402000114C2FFFA240300010800427E000000008C62000800001821ACE2000003E000080060102103E000080060102100000000000000000000000003E0000800000000000000000000000027BDFFD8AFB10018948200109491000A8C85001400514F
S3FF40010AA6102314A000020045001B0007000DAFB30020AFBF0024AFB2001CAFB000140000301210C00012008098218C830030000000008C6200000000000010A2001300602021080042C0000018218C8200040000000010A2000E24840004246300010066102B022588211440FFF8000390808FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD0028000090218E630020080042DF000000008E620014000000000222102100A2102B1040000F006020218C7000000C005C9C000000001200000E020018218E020000000000001040000A000000009465000A0000000000B1102B1040FFED000000008C700000000000001600FFF40200182102
S3FF40010BA08E62003400000000005210218C4400000C004E94000000008E6300309664002C00721821AC6000008E6200348E6300148FBF00240052102100832023A664002C8FB2001C8FB300208FB100188FB00014AC40000003E0000827BD00280000000027BDFFE0AFB200183C124003AFB10014008088218E4423CCAFB00010AFBF001C0C003BB000A08021022020210C005D3C020028218E4423CC0C003C64004080218FBF001C020010218FB200188FB100148FB0001003E0000827BD00200000000027BDFFE0AFB200183C124003AFB10014008088218E4423CCAFB00010AFBF001C0C003BB000A08021022020210C005D88020028218E4423CC0C00FD
S3FF40010C9A3C64004080218FBF001C020010218FB200188FB100148FB0001003E0000827BD0020000000008CA3005027BDFFE824020002AFB00010AFBF001400A0802110620010ACA0004440026000000000002403FFFE0043102430C400010044102540826000000000003C051003020020218FBF00148FB0001034A5FFF80800440C27BD001824020003ACA2005040026000000000002403FFFE0043102430C400010044102540826000000000000C004DE824A400483C051003020020218FBF00148FB0001034A5FFF80800440C27BD0018000000000000000027BDFFD8AFB0001400808021AFB30020AFB2001CAFB10018AFBF002400A088218C92001001
S3FF40010D940C00499030D300FF8E0200140000000010510003022028210C0048F40200202140026000000000002403FFFE004318244083600000000000304600018E040010240200041082002032420004144000032402FFFB00821024AE02001040026000000000002403FFFE004310240046102540826000000000003C0300033463BEE00083182414600008020028218FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD00288E0400448FBF00248FB300208FB2001C8FB100188FB000140800487827BD0028104000493C05400340026000000000002403FFFE0043102400461025408260000000000040086000000000002402FFFE010282
S3FF40010E8E1024408260000000000094A223C8000000003045FFFF2CA301003C0240038C4722C01060004F3C0440032486EE8000C510219043000000000000246400083C03400324632440000410400043102194420000000000002C4301001060003C0000000000C21021904300000000000024630008000411000062102100021900000210800062182300E318213C0240038C6400008C4223D43C03400310820007AC6423A0904200760000000010400003240300013C024003A04323E440026000000000002403FFFE00431024310400010044102540826000000000008FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD00288E040090A1
S3FF40010F8896030096948200000000000000431025A482000094A323C896020094AE000010004310253042FFFFA4A223C812600014000000008E02008C000000008C430000AE020004AC500000AC70000408004399AE0300000002120200C2102190430000080043C1000411002486EE800005120200C2102190440000080043B43C0340038E02008C0000000024430004AE0300008C440008AC500008AE04000408004399AC900000000000000080382100A0202140026000000000002403FFFE004318244083600000000000304800018CE50010000000000085102410400037000410270045102414400034ACE200108CE5009094E3009694A200008CE400
S3FF40011082008C00431025A4A200003C06400394C523C894E2009424830004ACE300008C830008004510253042FFFFAC870008A4C223C8ACE30004AC67000040026000000000002403FFFE0043102400481025408260000000000040036000000000002402FFFE006210244082600000000000306600013C0540038CA323A08CE400148C620014000000000082102B104000153C0240038C4323D4ACA723A0906200760000000014400003240300011480000E00C040213C024003A04323E400C0402140026000000000002403FFFE0043102401021025408260000000000003E000080000000000C0402140026000000000002403FFFE0043102401021025E9
S3FF4001117C408260000000000003E00008000000000000000094A2000A8C83001C0002108027BDFFE000621821AFB20018AFB10014AFBF001CAFB0001000A0902100808821AC6000003C1040038E02231400A020212442FFFFAE0223140C004C74000000008E0223140000000024420001AE022314022020210C00401402402821024020210C004910240500010C0048300240202114400005240200028E4300500000000010620010000000000C0049F0024020218E4401140000000010800003AE4000CC0C004E94000000008FBF001CAE4001148FB100148FB200188FB0001003E0000827BD00200C004DE826440048080044890000000027BDFFB8AFB26A
S3FF40011276003C3C124003AFB10038264424703C114003AFB00034AFBF00440C003FDCAFB300408E2323143C10400324630001AE0224BCAE2323143C1340038E6223AC3C0340038C4400188C6715008E0524BC00E4102B104000023C02400300803821904815043C0240032403000126442470000030212442F060AFA80014AFA30018AFA20028AFA00010AFA0001CAFA000200C0045ACAFA000248E6223AC8E2323148E0824BC8C4600142463FFFFAE2323143C0240033C034003010020210000282100003821AC4823D4AC6823A00C004A14AFA000108FBF00448FB300408FB2003C8FB100388FB0003403E0000827BD004800000000000000000000000073
S3FF4001137027BDFFE0AFBF001C0C00457C27A50010004020218FA200100000000014400009000000003C0510030C00440C34A5FFF83C0340038C622314000000002442FFFFAC6223148FBF001C0000000003E0000827BD002000000000000000000000000027BDFFB8AFB400303C144003AFB10024AFBF0044AFBE0040AFB7003CAFB60038AFB50034AFB3002CAFB20028AFB000208E9123D440026000000000002403FFFE004318244083600000000000304400013C134003926223E400000000104000433C12400327BE001027B7001824160001080045442415FFFE4002600000000000005510240044102540826000000000000C003E5403C020213C04B4
S3FF4001146A400302E03021248423DC0C004BAC03C02821262400840C004B2C02E028213C0240038C46239C8FA200103C034003AC6223DC8FA300143C024003244223DC022020210200282110C00007AC4300048CC2000000000000AE2201048E03010400000000ACC300000C004CD400000000262400D00C004ED4260500D08E9123D4400260000000000000551824408360000000000030440001926223E4000000001040000C000000003C0240038C5023A0AE5623148E02007CA26023E41456FFC8AE9023D43C0340038C6222C408004512AE020078AE40231440026000000000002403FFFE004310240082102540826000000000003C0340038C6223B80B
S3FF40011564000000001440000500000000922200750000000010400003000000000C003B6CA22000758FBF00448FBE00408FB7003C8FB600388FB500348FB400308FB3002C8FB200288FB100248FB0002003E0000827BD00483C0240038C432314000000002463FFFFAC4323148C44231400000000108000030000000003E0000800000000080044F40000000000000000008038211080001A00A0302100041E02306300072462FFFF2C420004104000112402000100042EC214A2001B000318803C024003244222CC006218218C620000000000001040001A000000008C440004000000001080001300000000080041FC00E02821ACA2000003E000080000E0
S3FF4001165E10213C0240038C4323140000000024630001AC4323143C024003ACA000008C4223D403E0000800000000ACC2000003E0000800001021ACC5000003E000080000102103E00008ACC50000000000000000000027BDFFD0AFB60028AFB50024AFB40020AFB3001CAFB10014AFB00010AFBF002CAFB200180080B02100A080218FB300448FB5004C93B4004B10C0005800E08821A0A000C000E018213C1140038E2423B4AE0600C8AE0300C4AE000050AE000064AE000068AE00006C14800037AE000104AE000114000090218FA20050A21400ACAE0200B42402000216A20005AE1500B03C0240038C4322C400000000AE0300788FA200540200202130
S3FF40011758AE0200B824020001AE020010AE000044AE00001CAE000070AE130018AE1300BC0C0048F4026028219602000A8EC3001C00021080006218218FA20058AC700000AE02000CAE000084AE0000880C004C5002002021144000082402000112400003000000000C004E94024020210C0049F002002021000010218FBF002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD0030248400010C004E98000420801040FFEF004090218E2323B4AE0201142402FFFF1062FFC302402821000020218E2223B400041880244200012484000100A318210082102B1440FFF9AC600000080045CA0000000000A020210C00DA
S3FF4001185249C400E0282110400009004018210051102B144000063C11400324020001A20200C08E0600CC080045BF00000000080045F40000102100000000000000003C0240038C4623AC27BDFFD88CC300248CC200202C6300012C420001AFBF0024AFB0002014430031008038213C104003920415043C024003248400010004190000042080006420233C034003AC4523B4AC6722C43C0240033C034003A04023E4AC6023D43C0240033C034003AC6023B80C004E9CAC4023A03C03400392061504AC6222C0004020210000282124A500012482000400C5182BAC820000AC800004AC8400081060FFF92484000C2402011C3C044003AFA200102403000146
S3FF4001194C2402000824842470240500012406000124070001AFA300140C004224AFA200188FBF00248FB0002003E0000827BD002800002021240500010C003F782406000F000000008C83003427BDFFE824020001AFB00010AFBF00141062001B008080213C024001244279800040F809020020210040282140046000000000002402FFFE00821024408260000000000010A0001B0000000040026000000000002403FFFE00431024308400010044102540826000000000008FBF001400A010218FB0001003E0000827BD00183C02400124421A700040F809020020210040282140046000000000002402FFFE00821024408260000000000014A0FFE700002B
S3FF40011A4600008E020030000000002442FFFF2C4200021040FFE13C024003240300038C4523D408004678AE03003027BDFFE0AFBF001CAFB10018AFB0001440036000000000002402FFFE00621024408260000000000030680001000028210080302124070004000518800005110000431023008210218CD000002442000424A500011602001124C6000C14A7FFF70005188040026000000000002403FFFE00431024004810254082600000000000000088218FBF001C022010218FB100188FB0001403E0000827BD00208E0400382602003CAE0000448E0500008E03000410820036020088218E0700408C860000ACA40004AC640000AC830004AC850000CA
S3FF40011B408E0300388E02004000000000106200062483003C24820038ACC20004AC860038AC870040ACE300008E03005024020002106200122402000340026000000000002403FFFE004310240048102540826000000000003C051003020020210C00440C34A5FFF88FBF001C022010218FB100188FB0001403E0000827BD0020AE02005040026000000000002403FFFE004310240048102540826000000000000C004DE8260400483C051003020020210C00440C34A5FFF8080046BD00000000ACA30004080046DAAC650000000000000000000027BDFFD03C024003AFB0001C8C5023D4AFB3002800A098218C850038AFB100200080882102002021AFB224
S3FF40011C3A0024AFBF002C0C00491000C0902116600019240200018E23003400000000106200233C0240013C02400124427AA002202021020028210040F80927A60010004020212402000110820004000000008FA600100C004330020028218FBF002C8FB300288FB200248FB100208FB0001C03E0000827BD00308E0200083C044003AE020068AE120064AE130054AE000050AE00006C248423F40C004D44260500488E230034240200011462FFDF3C0240010800471A24421CF08CAA00140080702124A2003C24A3003831440020ACA20038ACA30040ACA0003C8DCD00381480004D000A118200021900000210800062102301C2102100407821244B0004DE
S3FF40011D34240CFFFE4003600000000000006C10244082600000000000306900018DE700000000000010EB00D3000000008CE8001400000000010A102B104000CC000000008CE700000000000010EB00C8000000008CE8001400000000010A102B1440001500000000080047E4012058218CE700000000000010EB0077000000008CE8001400000000010A102B10400072000000008CE700000000000010EB006E000000008CE8001400000000010A102B1040006900000000400260000000000031230001004C10240062182540836000000000004004600000000000008C10244082600000000000308400018CE200100000000001A210241440FFDD00808B
S3FF40011E2E48214002600000000000004C102400821025408260000800474E0000000000021900000210800062102301C258213C184003240CFFFE016078219302150400000000244800014003600000000000006C10244082600000000000306900018DE700080000000011670080000000008CE80014000000000148102B1040007B000000008CE700040000000011670077000000008CE80014000000000148102B1440001500000000080047ED012058218CE700040000000010EB0031000000008CE80014000000000148102B1040002C000000008CE700040000000010EB0028000000008CE80014000000000148102B1040002300000000400260003A
S3FF40011F280000000031230001004C10240062182540836000000000004004600000000000008C10244082600000000000308400018CE200100000000001A210241440FFDD008048214002600000000000004C102400821025408260000800479A0000000000804821008058218DC30030240200011062001C00000000ACCB000003E000080060102100804821008058218DC30030240200011462FFF80000000011480023ADC000308CE20000ACA70004ACA20000ACAE0044ACE50000AC45000440026000000000002403FFFE004310243124000100441025408260000000000003E000082402000111480011ADC000308CE20004ACA70000ACA20004ACAE4C
S3FF400120220044AC450000ACE5000440026000000000002403FFFE004310243124000100441025408260000000000003E000082402000124E2003C8C430004ACA20000ACA30004ACAE0044AC650000AC45000440036000000000002404FFFE006418243162000100431025408260000000000003E0000824020001080047ED01205821080047E40120582101205821080047E42408FFFF0000000000000000000000008C8300103C0200033442BEE027BDFFE800621824AFBF001414600005008028218FBF00140000102103E0000827BD00188C8400440C005EC8000000008FBF00142402000103E0000827BD00180000000027BDFFE0AFB10018AFB0001418
S3FF4001211CAFBF001C008088210800484C00C08021AC5000340C004664022020211440FFFC000000008FBF001C8FB100188FB0001403E0000827BD00200000000000000000000000002402000100804821AC860038AC87003CAC85003410A20006AC80003024820004AC820000AD24000803E00008AC800004248300042525000C248400102526001C252700182528002825220024AD22002CAD230000AD24000CAD250014AD260018AD270020AD280024AD200004AD290008AD200010AD20001C03E00008AD20002827BDFFD8AFB1001CAFB00018AFBF0024AFB20020008080211080000500A088218C8300342402000110620007000000008FBF00248FB293
S3FF4001221600208FB1001C8FB0001803E0000827BD002840126000000000002402FFFE0242102440826000000000003C0200038CA300103442BEE0006218241460000F2402000140026000000000002403FFFE00431024324400010044102540826000000000008FBF00248FB200208FB1001C8FB0001803E0000827BD0028AC8200300C005ED02406000102002021022028210C00473C27A60010080048960000000000000000000000000000000027BDFFE0AFBF001C0C00457C27A50010004020218FA200100000000014400008000000000C005F30000000003C0340038C622314000000002442FFFFAC6223148FBF001C0000000003E0000827BD00208B
S3FF400123108C82001027BDFFE030420001AFB20018AFB10014AFB00010AFBF001C0080802100A090211040000800C088218FBF001C000010218FB200188FB100148FB0001003E0000827BD00200C0049900000000002402821022030210C005FB0020020210C005E28020020210C005F48020020210C004C94020020213C0240038C4323D4000000001203000800000000240200018FBF001C8FB200188FB100148FB0001003E0000827BD00200C004F0B260400D0080048E82402000100000000000000003C024003000539028C4922C030E7FFFF340680000005188030A8000F0005110000431023010640073C03400300E6300730C6FFFF3108FFFF000749
S3FF4001240A38402463244001224821006718210008102700063827A482009AAC89008CAC830090A4870098AC850014A486009403E00008A4880096008038218C86008C40036000000000002402FFFE006210244082600000000000306800018C820010000000001440002B00A210258CC300008CC20008000000001062002FAC8500108C8300008C82000400000000AC430000AC62000440026000000000002403FFFE0043102400481025408260000000000040066000000000002402FFFE00C2102440826000000000003C0840038D0223A00000000010E2002D3C0240033C0240038C4323D40000000010E300252403000140026000000000002403FFFE7D
S3FF400125040043102430C40001004410254082600003E0000800000000AC82001040026000000000002403FFFE00431024004810254082600003E00008000000008C8300909484009A9462000024C50004004410243044FFFFA4620000ACC50000ACC600081480FFCDACC000043C044003948323C894E20098000000000043102408004927A48223C83C0240030800493EA04323E4944323C83C0240033063FFFF2C6401008C4922C01480001B3C0540030003120224A5EE8000A21021904400003C03400324632440000410400043102194420000000000002C430100106000130000000000A210219043000000000000246300080004110000621021000212
S3FF400125FE19000002108000621823012318218C62000008004939AD0223A024A5EE8000A310219043000008004970246400080002120200A21021904300000800497E00041100008038218C86008C40086000000000002402FFFE0102102440826000000000008C83001000000000346200041460000BAC8200108CC300008CC20008000000001062001024C500048C8300048C82000000000000AC620000AC43000440026000000000002403FFFE004310243104000100441025408260000000000003E00008000000008C8300909484009A9462000000000000004410243044FFFFA4620000ACC50000ACC600081480FFECACC000043C02400394E300985D
S3FF400126F8944423C80000000000641824080049A7A44323C8000000003C0240038C43150027BDFFE000A3102BAFB10018AFB00014AFBF001C00A080211040000200808821006080213C0240038C4323AC000000008C6200200000000010400014000000000040F8090200202110400008000000008FBF001CAE2200CC020010218FB100188FB0001403E0000827BD00208FBF001C00008021AE2200CC020010218FB100188FB0001403E0000827BD0020261000080C004E9802002021080049D8000000000000000000000000908200C0000000001040000A3C0240038C4323AC000000008C7900240000000013200006000000008C8400C80320000800003C
S3FF400127F2000003E00008000000008C8400C808004E940000000000000000000000003C0240038C4723A03C0440033C02400324060003AC4624B43C0340033C024003248422E024E500D0A06023E408004ED4AC4723D40000000000000000000000008C82001027BDFFE830420001AFB00010AFBF00141040000C008080218FA20028AC86009CAC8200A8AC8500A00C005E28AC8700A40C005F48020020210C004CB402002021240200018FBF00148FB0001003E0000827BD00180000000000000000008038218C86008C40026000000000002403FFFE004318244083600000000000304800018C8200708C830010244200011460002BAC8200708CC4000058
S3FF400128EC8CC300082402000210830030ACE200108CE300008CE2000400000000AC430000AC62000440026000000000002403FFFE0043102400481025408260000000000040066000000000002402FFFE00C2102440826000000000003C0840038D0223A00000000010E2002E3C0240033C0240038C4323D40000000010E300262403000140026000000000002403FFFE0043102430C40001004410254082600003E000080000000034620002AC82001040026000000000002403FFFE00431024004810254082600003E00008000000008CE3009094E4009A9462000024C50004004410243044FFFFA4620000ACC50000ACC600081480FFCCACC000043C04F7
S3FF400129E64003948323C894E20098000000000043102408004A44A48223C83C02400308004A5BA04323E4944323C83C0240033063FFFF2C6401008C4922C01480001B3C0540030003120224A5EE8000A21021904400003C03400324632440000410400043102194420000000000002C430100106000130000000000A210219043000000000000246300080004110000621021000219000002108000621823012318218C62000008004A56AD0223A024A5EE8000A310219043000008004A8E246400080002120200A210219043000008004A9C00041100000000000000000027BDFFE83C024003AFB000108C5023D4AFBF001492030076000000001060000DB4
S3FF40012AE0000000008E0200100000000014400009000000008E03007C00000000106000052C620003144000122402000310620005000000008FBF00148FB0001003E0000827BD00188E020078000000002442FFFF1440FFF8AE0200788E190080020020218FBF00148FB000100320000827BD00188E020078000000002442FFFF1C40FFEDAE0200780C005FD8000000003C0240038C4322C408004AC5AE030078000000003C0240038C4523D4000000008CA6008C40036000000000002402FFFE006210244082600000000000306700018CC300008CC20008000000001062002A24C200048CA400008CA3000400000000AC640000AC830004ACA200008CC2C7
S3FF40012BDA0008ACC50008ACA20004AC45000040026000000000002403FFFE0043102400471025408260000000000040076000000000002402FFFE00E2102440826000000000003C0440038C8223A00000000010A2001E00000000240300013C024003A04323E430E7000140026000000000002403FFFE0043102400E21025408260000000000003E00008000000003C0240038C4323A00000000010A3FFF3240300013C024003A04323E440026000000000002403FFFE0043102400E21025408260000000000003E00008000000008CC2000008004B0CAC8223A08CA300048C8200048CA50000006218218C8700003C023B9A3448CA0000E538210068102B41
S3FF40012CD400603021AC8700001440000BAC8300043C02C4653449360000C9102124E700010048182B00403021AC820004AC8700001060FFF924A5000103E0000800A010210000000000000000000000008CA800003C023B9A344BCA00010B00188CA3000427BDFFD800032FC3AFB2001C00C09021AFB300208C8A000400E09821AFBF0024AFB10018AFB000148C84000000004812012318210069102B00004010010528210045302100C310251040004300603821008B0018000A27C300001812006A40210103502B00001010000818800044202101445021000A28800008178200452825000821C000034EC20005114000831823012210250083202B004539
S3FF40012DCE10230068402100441023004A10210103182B0062182100082F8200031080000820800104202100A21025006218210088402B0103402100044F82000810800004288001221025008528210102402100A4202B00882021000516C200042140004420250C00A59C00052940004080210200202100602821240703E8000030210C00A59C00608821AE4300000220282102002021240703E80C00A710000030218FBF0024AE6300008FB2001C8FB300208FB100188FB0001403E0000827BD00288FBF0024AE4000008FB10018AE6000008FB2001C8FB300208FB0001403E0000827BD00288CA700048C8800040000000000E8102A144000083C033B9A28
S3FF40012EC88C8300008CA2000000E8202300431023ACC4000403E00008ACC200008CA200008C8400003463CA0000E318212442FFFF0044102300681823ACC3000403E00008ACC20000000000003C0240033C074003244224C43C084003ACE224C03C02400327BDFFD824E324C0250623182442231CAFB30020AFB10018AFBF0024AFB2001CAFB0001400A08821AC630008AD022318ACC6000800809821AC60000410A00017ACC0000400041080000481000202802302048021001080800C004E9C020020210040202102003021000028210C00703800409021126000090000802102402021022028210C00606C261000010213102B265200341440FFF92631AF
S3FF40012FC200208FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD002827BDFFE03C024003AFB000103C0340038C5024C0AFB20018247224C4AFB10014AFBF001C1212000B008088218E0200280000000010400003022020210040F809000000008E100000000000001612FFF7000000008FBF001C8FB200188FB100148FB0001003E0000827BD00203C02400327BDFFE0244224C0AFB000108C500008AFB20018AFB10014AFBF001C004090211202000B008088218E02002C0000000010400003022020210040F809000000008E100004000000001612FFF7000000008FBF001C8FB200188FB100148FB0001003E0000827BD00203C024003FF
S3FF400130BC27BDFFD8244224C0AFB000108C500008AFB40020AFB3001CAFB20018AFB10014AFBF0024004098210080A02100C090211202000C30B100FF8E020030028020210220282110400003024030210040F809000000008E100004000000001613FFF6000000008FBF00248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD002827BDFFD83C024003AFB000143C0340038C5024C0AFB2001C247224C4AFB10018AFBF0024AFB300201212000F008088213C1340038E0200140000000010400006022028218E6423D40040F8090000000010400006000000008E100000000000001612FFF400000000240200018FBF00248FB300208FB215
S3FF400131B6001C8FB100188FB0001403E0000827BD002800000000000000003C02400327BDFFD8244224C0AFB000148C500008AFB2001CAFB10018AFBF0024AFB30020004090211202000D008088213C1340038E0200200000000010400004022028218E6423D40040F809000000008E100004000000001612FFF6000000008FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD00280000000027BDFFD83C024003AFB000143C0340038C5024C0AFB2001C247224C4AFB10018AFBF0024AFB300201212000D008088213C1340038E02001C0000000010400004022028218E6423D40040F809000000008E100000000000001612FFF60000000088
S3FF400132B08FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD00280000000027BDFFD83C024003AFB000143C0340038C5024C0AFB2001C247224C4AFB10018AFBF0024AFB300201212000D008088213C1340038E0200180000000010400004022028218E6423D40040F809000000008E100000000000001612FFF6000000008FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD00280000000027BDFFD83C024003AFB000143C0340038C502318AFB300202473231CAFB2001CAFB10018AFBF0024008090211213000900A088218E020008024020210040F809022028218E100000000000001613FFF9000000008FBF00248FB37E
S3FF400133AA00208FB2001C8FB100188FB0001403E0000827BD002827BDFFD0AFB2001CAFB00014AFBF002CAFB50028AFB40024AFB30020AFB100180080902100C0802140036000000000002402FFFE006210244082600000000000306400018E43000026530004107300260000000014A000342402000110C00022000000008C7100100000000000D1102B144000342415000108004D172414FFFE12000019000000008C710010000000000211102B1440002C02301023AC7500104002600000000000005410240082102540826000000000000C004E3C024020214003600000000000007410244082600000000000306400018E420000021180231662FFE7C2
S3FF400134A40040182140026000000000002403FFFE004310240082102540826000000000008FBF002C8FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD003014A2FFEF000000008C620010000000000046102108004D2AAC6200100230102308004D2AAC6200103C02400300A048218C4A23B040036000000000002402FFFE006210244082600000000000306B00018CA20008000000001440004E3C0E40038DC324603C0C40032463000124020001ACA20008ADC324602408FFFE240D0001018078218D26000C8C85000010C0004A3C0240038CA2000000000000104000463C0240038CA700100000000000C7102B1440005900E6E3
S3FF4001359E1023400260000000000000481024316300010043102540826000000000004003600000000000006810244082600000000000306300018D22000800000000144D004A00C7302308004D97000000008CA5000010C0002A006058218CA2000000000000104000273C0240038CA700100000000000C7102B1440003A00E610234002600000000000004810240043102540826000000000004003600000000000006810244082600000000000306300018D22000800000000144D002C00C730238D8223D0000000000142102B1040FFE000000000ADEA23D008004D5B0060582140026000000000002403FFFE00431024004B10254082600003E0000862
S3FF40013698000000003C0240038C4324648CA40004AD230014AD26001024020002AD8A23D0AD2200088DC224608C8500002442FFFFAC890000AD240004AD250000ACA90004ADC2246040036000000000002404FFFE0064182431620001004310254082600003E000080000000008004DA7ACA20010AD8A23D08DC22460006058212442FFFFADC2246040036000000000002404FFFE0064182431620001004310254082600003E00008000000003C0240033C0640033C034003244223F8AC6024603C0740033C034003ACC223F43C02400324C423F424E523E8AC6023D0244223EC3C034003AC840008AC602464ACE223E8ACA50008AC80000403E00008ACA027
S3FF4001379200040000000000000000000000000080382140086000000000002402FFFE0102102440826000000000008C8500082402000110A200390000000014A0000E3C0240038C43246400000000ACE3001840026000000000002403FFFE004310243104000100441025408260000000000003E0000800A010212CA200041040FFF13C0240038C860000AC8000088CC2000000000000104000073C0240038CC200108C8300100000000000431021ACC200103C0240038C4324600000000010600005000000003C0240038C4423B03C034003AC6423D08CE2000400000000AC460000ACC200043C0240038C43246400000000ACE30018400260000000000068
S3FF4001388C2403FFFE004310243104000100441025408260000000000003E0000800A010213C0240038C432464AC800008ACE3001840026000000000002403FFFE004310243104000100441025408260000000000003E0000800A0102100000000000000000000000027BDFFD0AFB30020AFBF002CAFB50028AFB40024AFB2001CAFB10018AFB000140080982140036000000000002402FFFE006210244082600000000000307100018C830000249200041072002F000000008C620010000000001440003B006080212414FFFE08004E65241500024002600000000000005418244083600000000000305100018E620000000000001242001E004080218C4298
S3FF400139860010000000001440001A000000000C004DE8020020214003600000000000007418240223182540836000000000001455FFE9000000008E0500248E02001C8E0400200040F809000000004002600000000000005418244083600000000000305100018E620000000000001642FFE40040802140026000000000002403FFFE004310240222102540826000000000008FBF002C8FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD00302442FFFF1040FFC4AC62001008004E7E0000000000000000008028213C04400308005D8824842338008028213C04400308005D3C24842338008028213C04400327BDFFE8AFBF001400
S3FF40013A800C005D3C2484233810400005240500018FBF00140000000003E0000827BD0018000020210C003F782406000427BDFFE0AFB10018AFB00014AFBF001C008080211080001700A0882130820007144000143C0240038C4323AC00000000906500280000000014A00012000028213C0440032484233802002821022030210C003EE0240700081040000E000020218FBF001C8FB100188FB0001403E0000827BD002000002021240500010C003F78240600020C0070380220302108004EBC3C044003240500010C003F7824060003000000004008600024090001AC88002C01204827010940244088600000000000AC9F0028AC9D0020AC9E0024AC9058
S3FF40013B7A0000AC910004AC920008AC93000CAC940010AC950014AC960018AC97001C3C084003250820A08D0900000000000011200005AD000000000000008D28009410000003000000003C084001250813D0AC8800308CBF00288CBD00208CBE00248CB000008CB100048CB200088CB3000C8CB400108CB500148CB600188CB7001C8CA8002C3C0A2000354AFF00354A0015010A40244009600001405027012A482401284825408960000000000003E00008000000000080282108004EF3000000003C1A4001275A3C48034000080000000023BDFEBCAFBF007CAFA20008AFA3000CAFA40010AFA50014AFA60018AFA7001CAFA80020AFA90024AFAA0028A7
S3FF40013C74AFAB002CAFAC0030AFAD0034AFAE0038AFAF003C00004012AFB80060AFA80084AFB9006400004010AFBC0070AFA80088AFBE0078AFA100044008600040097000AFA80080AFA9009440086800000000003109003C11200023AFA80090AFBD0074AFB00040AFB10044AFB20048AFB3004CAFB40050AFB50054AFB60058AFB7005C4008300040094000AFA80140AFA9008C03A020210C00154D000000008FA800943C09400125293EC8010950261540000325080004AFA80094000000008FB000408FB100448FB200488FB3004C8FB400508FB500548FB600588FB7005C08004F9500000000400960003108FF00010940241100003B000000003C089C
S3FF40013D6E40038D0823B000000000210800013C014003AC2823B03C0940038D29231400000000212900013C014003AC29231403A020210C00AEB7000000003C0A40038D4A23B000000000214AFFFF3C014003AC2A23B03C0940038D292314000000002129FFFF3C014003AC292314014940251500001D000000003C084003910823E43C094003912924680000000001094025110000150000000040086000240900010109402540886000000000003C084003250820A0AD1D00000C0044F4000000003C084003250820A0AD00000000000000400860002409000B012048270109402440886000000000008FB800848FA80020030000138FB800888FA9002485
S3FF40013E68030000118FAA00288FAB002C8FAC00308FAD00348FAE00388FAF003C8FB800608FB900648FBC00708FBE00788FBF007C8FA400108FA500148FA600188FA7001C8FA3000C8FA200088FBB00948FA1000423BD01440360000842000010000000000000000D0000000003E0000800000000000000000000000003E0000800000000308300FF40046000000000002402FFFE0082102440826000000000001060000C000312403042FC0030630001004318253C02FFFF344203FE0082102400621025408260000000000003E00008000000003C02FFFF344203FE3403FC010082102400621025408260000000000003E000080000000003E00008000082
S3FF40013F6200003C0340038C62239000042080004410218C430000AC45000003E00008ACC3000003E000080000000008004FE30000000027BDFFE8AFBF0014AFB0001040106000000000000C00156000000000020210248FBF00143210000100021242005010258FB0001003E0000827BD001827BDFFD8AFB000188C900000AFB20020AFB1001CAFBF002430B1FFFF0C0055B830D2FFFF004018219602003C0000000010430003000000001460001000000000A611003CA612003E27A400100C002380000028218FA2001000001821AE0200488FBF0024006010218FB200208FB1001C8FB0001803E0000827BD00280C006AC80000000024030001AC4300003B
S3FF4001405C0800500C2403FFFF00000000000000000000000027BDFFC8AFB50030AFB4002CAFB30028AFB20024AFBF0034AFB10020AFB0001C0080A02100A0902100C098211080006700E0A8218C910000240400010C0021CC24050060104000380040802102602821240600202444000C24020001A60200340C007954AE12004C3C0340038C641760000000008C820024000000000002102702A210240C0055B8AE0200300C0055B0A602003C27A40010000028210C002380A602003E8FA300102E420007AE030048AE03004014400026AE0300443C0440033C0640033C0740032484F0A024C6F10C24E7F0E80C005474240500748FA30048000000008C62A5
S3FF4001415600048C630000AE020054AE0300501220000C262400500C003C74020028218E82000CAE1100088C44002C000000008C8300000000000024630001AC830000AE0300388FBF0034020010218FB500308FB4002C8FB300288FB200248FB100208FB0001C03E0000827BD00383C034003001210802463F0F0006218218C640000000000000080000800000000AE000050AE000054AE000050AE000054AE00005808005059AE00005C8FA40048000000008C82000008005059AE0200508FA30048000000008C62000008005059AE0200502602005426030050AE020050AE03005808005059AE0000540800502A000088210000000000000000000000000C
S3FF400142508C8200008C83000C008030218C44004C8C65002C2C8200071040000B3C034003000410802463F120006218218C6400000000000000800008000000008CA2000800000000ACC2000403E00008000010218CA2000400000000ACC2000403E00008000010213C0240032442F230ACC2000403E00008000010213C0240032442F1B0ACC2000403E000080000102127BDFFE0AFBF001CAFB20018AFB10014AFB000108C9100000C0055B800A090210C0055B000408021004018219622003C000000001050001B001229809622003E000000001043000C024028218E2200300000000000A210248FBF001C00A210262C4200018FB200188FB100148FB000
S3FF4001434A001003E0000827BD00208E220030001228C000A210248FBF001C00A210262C4200018FB200188FB100148FB0001003E0000827BD00208E2200300000000000A210248FBF001C00A210262C4200018FB200188FB100148FB0001003E0000827BD00208C86000027BDFFE08CC3004C24020003AFB10018AFB00014AFBF001C008080211462001500A088218CC200500C005094AC820000020020210C0050B7022028211040000700000000000010218FBF001C8FB100188FB0001403E0000827BD00200C006AC8000000002403000DAC430000080050FE2402FFFF0C003A4C3C04ABCD27BDFFE0AFB00010008080218C840000240200048C83004C7C
S3FF40014444AFB20018AFBF001CAFB100141462003500A090218C820008000000001040003300000000AE0200008C8800502402002F8103000000000000106200072402005C106200063C024003106000040000382108005133010720213C0240038C431760240700018C6600208C6200148C6400188C65001CAE020000AE040004AE050008AE06000C01072021024028210C00514E02003021020020210C00509400408821020020210C0050B70240282110400008000000008FBF001C022010218FB200188FB100148FB0001003E0000827BD00200C006AC82411FFFF2403000D0800513EAC4300000C003A4C3C04ABCD0C003A4C3C04BAD027BDFFA0AFB029
S3FF4001453E00388CD00000AFBE0058AFB70054AFB60050AFB5004CAFB40048AFB30044AFB20040AFBF005CAFB1003C00C098210080A821AFA500640000902127B6001427B70010241E00032414000402B2202102C028210C0053B402E030218E640000004088218FA2001010800077000000001620001A024290218C83004C2402000114620064000000008C84005C0000000010800060000000008C8600208C8500188C8200248C83001C8FA400108CC70000AE650000024420238FA50064AE660008AE62000CAE63000402A4202100E0F80902603021080051BF004080218E02004C240300011043004300000000123E0009008080211234002E2402000288
S3FF40014638122200183C0340031634FFD1000000000800516D000000008C82004C00000000105E004F000000001054005C2403000114430055000000008E04005C000000001480FFD600000000020020210C00537002C028211040003D0040802108005162AE7000008C621760000000008C430014000000001064FFB6000000008E66000C000000008CC20018000000001044004F000000008C900008000000001600FFEF000000000C006AC82410FFFF080051BFAC5100000C006AC82410FFFF2403005BAC4300008FBF005C020010218FBE00588FB700548FB600508FB5004C8FB400488FB300448FB200408FB1003C8FB0003803E0000827BD00600260CE
S3FF4001473220210C0050B7240500011040000C000000008E6400000800518A000000000C005094026020218FA50064026020210C0050B7004080211440FFE4000000000C006AC82410FFFF2403000D080051BFAC4300000C006AC82410FFFF24030002080051BFAC430000026020210C0050EB000028218E7000000000000012000004240300018E02004C0800519A000000000C006AC82410FFFF24030014080051BFAC430000026020210C00510B00002821004080212403FFFF8E6200001203FFC324030001004080218E02004C0800519A000000008CC200108CC5000C8FA400108CC300148CC60008AE650004024420238C4700008FA50064AE66000090
S3FF4001482CAE63000C02A42021AE62000800E0F80902603021080051BF0040802127BDFFD0AFB50028AFB40024AFB30020AFB2001CAFB10018AFBF002CAFB000140080882100A0A8213C124003241300030800522524140004105400292442FFFD2C42000210400019000018218E4417608E3000009482002800000000244200013042FFFF2C43000610600022A48200288E02004C000000001453FFEF022020210C0050EB02A028210040182114600007000000008E02004C000000002442FFFD2C4200021440FFE9000018218E42176000000000A44000288FBF002C006010218FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD87
S3FF400149260030022020210C00510B02A0282108005235004018210C006AC8A48000282403005CAC430000080052402403FFFF27BDFFA0AFB1003C8CB10000AFBE0058AFB70054AFB60050AFB5004CAFB40048AFB30044AFBF005CAFB20040AFB0003800A0A0210080A821AFA600680000982127B6001427B70010241E000102B3202102C028210C0053B402E030218E8400008FB20010108000590040802114400012000000000C006AC82410FFFF24030011AC4300008FBF005C020010218FBE00588FB700548FB600508FB5004C8FB400488FB300448FB200408FB1003C8FB0003803E0000827BD00608E22004C00000000105E0047240200020272982166
S3FF40014A2012020029008088212E0200031440000B240300031203000D00000000240400041604FFD802B320210C006AC82410FFFF2403005B08005276AC4300001200FFDA02B320210800526A02C028218C82004C240400031044007A240300041043005A0280202112200060000000008E22004C00000000145E005C000000008E24005C000000001480005D00000000022020210C00537002C02821104000260040882108005268AE9100003C0340038C621760000000008C430014000000001064FFB0000000008E86000C000000008CC200180000000010440064000000008C910008000000001620FFEE000000000C006AC800000000AC500000080002
S3FF40014B1A52762410FFFF0C006AC82410FFFF2403000208005276AC430000028020210C0050B72405000110400024240200028E84000008005288027298218FA200108FA400680262102302A2102102B31821AC82000080620000000000001040000A2404002F2405005C10440003000000001445FFE50000000080620001000000001440FFF9246300010C00509402802021004080218E820000240300018C44004C0000000014830012028020210C0050B7240500031440FF82000000000C006AC82410FFFF2403000D08005276AC4300000C005212000028212404FFFF1044FF78004080218E910000080052A1000000000C006AC82410FFFF2403001469
S3FF40014C1408005276AC4300008C8600208C8500188C8200248C83001C8FA400108CC70004AE860008026420238FA60068AE850000AE82000CAE83000402A4202100E0F809028028210800527600408021028020210C00521200002821004080212402FFFF1202FF58000000008E910000080052A1000000008CC200108CC5000C8CC300148FA400108CC6000802642023AE8600008C4700048FA60068AE850004AE83000C02A42021AE82000800E0F8090280282108005276004080210000000003E0000800001021000000000000000027BDFFC88C82001C8C8300208C850024AFB000248C900018AFB30030AFB2002CAFA20014AFA30018AFA5001CAFBF0A
S3FF40014D0E0034AC800018AFB10028AFB0001027B2001024130001AFB000108E1100080C005094024020218E03004C0000000014730019260400548E0200500000000010440015000000001200000C000010218E02004C000000001453FFEF260200548E030050000000001062FFEB000000001460FFE900608021000010218FBF00348FB300308FB2002C8FB100288FB0002403E0000827BD00380C0020F8024020211040FFE902208021080053622402FFFF0000000027BDFFE0AFB10014AFB00010AFBF001CAFB20018008080211080002400A0882110A0001A3C05400324A5F1900C0077CC02202021144000083C0540038FBF001C020010218FB20018A3
S3FF40014E088FB100148FB0001003E0000827BD002024A5F1940C0077CC0220202114400019000000008E1000088FBF001C020010218FB200188FB100148FB0001003E0000827BD00208FBF001C00008021020010218FB200188FB100148FB0001003E0000827BD00203C0440033C0640033C0740032484F14024C6F19824E7FB800C0054742405002A8E12005026100054165000070220202108005393000000008E520000000000001250FFE7022020210C0077CC2645000C1440FFF9000000000800537F024080210000000027BDFFE8AFB00010AFBF0014808300002402002F1062003D00A080212402005C1062003A0000000010600042240A002FA0A376
S3FF40014F020000000018212409005C080053C7240800201068001DA0E2000024630001008310218042000002033821104A0007286500211049000500000000104000030000000014A0FFF300000000020320218082FFFF00000000144000113C054003ACC3000024A5D4900C0077CC02002021144000133C054003240200028FBF00148FB0001003E0000827BD00188FBF0014240200048FB0001003E0000827BD0018A080000024A5D490ACC300000C0077CC020020211040FFF1240200023C054003020020210C0077CC24A5D5DC1440000B00000000080053DF24020001A20300002403000124020001ACC300008FBF00148FB0001003E0000827BD00189A
S3FF40014FFC080053DF24020003A0A300000000182100001021080053FBACC30000000000000000000027BDFFD8AFB0001C8C900000AFB100208E020008AFBF002410400004008088210C005C9C02002021AE0000089602003427A400102442FFFFA60200340C002380000028218FA20010020020210C0055D6AE020048144000110000000096020034000000001440000D3C0240038C4417608E2300008C8200040000000010430015000000008E03004C2402000410620009000000000C002348020020218FBF0024000010218FB100208FB0001C03E0000827BD00288E040050000000001080FFF5000000000C002348000000000800542D00000000080013
S3FF400150F65429AC800004000000008C86000027BDFFE88CC3004C2402000410620028AFBF0014286200051040000C286200072402000210620024000000000C006AC8000000008FBF001424030086AC43000027BD001803E000082402FFFF1040FFF7000000008CC2005000000000ACA200208CC2003894C40034ACA200088CC30040A4A40010ACA3002494C2003C8CC30044A4A20012ACA3002C8CC200488CC3003094C4003E8FBF0014ACA20034ACA3000C00001021A4A4001403E0000827BD001808005459ACA000208CC200548CC30050ACA2000408005459ACA3000027BDFFE000C0182100A04021AFBF001C008030211060000B00E028213C0240032E
S3FF400151F02442F2B03C0440032484F2C001003821AFA200100C0027DAAFA300140C003A4C000020213C0240032443D4740800547D0060102100C03821080054740000302127BDFFE8AFB00010AFBF00140C00549C00A0802110400006020020218FBF00148C4200008FB0001003E0000827BD00188FBF00148FB000100800671027BD001827BDFFE0AFB00014008080218C840000AFB10018AFBF001C1080002400A088213C0540030C0077CC24A5F2F01040001200002021080054AF000000008E0200000000000010400013008010218E020004000000001451FFF92610000C2610FFF48FBF001C020010218FB100188FB0001403E0000827BD00208E0247
S3FF400152EA000C000000001040FFF72603000C02002021080054AF006080218FBF001C008080218FB100188FB0001403E0000827BD00208FBF001C00008021020010218FB100188FB0001403E0000827BD0020000000000000000027BDFFC0AFB200383C1240038E43176024020012AC620024AFBF003CAFB100340C0056A8AFB000303C0340038C62D38000000000104000403C0240038C43142827A400188C6500008C6600048C6700088C62000C0C0056B1AFA200102403FFFF1043003827B1001C8FA200188E4317608C4400248C4500188C46001C8C4700203C104003AC640020AC650014AC660018AC67001CA46000282604F2FC000028210220302118
S3FF400153E40C0022D0000038218E4317608FA500208FA600248FA400288FA2001C00003821AC640020AC650018AC66001CAC6200142604F2FC022030210C0022D0000028218FA4001C8E4317608FA500208FA600248FA20028AC6400043C044003AC650008AC620010AC66000C2484F3000C0056A4240501FF1440000D3C04ABCD8FBF003C8FB200388FB100348FB0003003E0000827BD00403C04ABCD0C003A4C348400013C04ABCD0C003A4C348400020C003A4C3484000300000000000000003C0340038C62142027BDFFE00082102BAFBF001CAFB1001810400029AFB000140004188000041100004310233C034003004410218C64218C0002108000822A
S3FF400154DE80218E03000C00000000306301001060001C000000008E020030000000008C4200040000000010400004000088210040F80902002021004088218E0200180000000010400007000000008C42001C0000000010400003000000000040F809260400100C005630020020218FBF001C022010218FB100188FB0001403E0000827BD00200C006AC82411FFFF2403000908005552AC4300000800552800A02021000000003C0240038C43142027BDFFD00083182BAFB10028AFBF002CAFB000241060002F00A088210004188000041100004310233C034003004410218C64218C00021080008280218E03000C00000000306301001060002200000000EE
S3FF400155D88E0500188E0400108E0200148E03001C8CA60010AFA40010AFA20014AFA3001C10C00024AFA5001800C0F80927A400102403000110430025000000008E02000C000000003042000410400014000000008E020030000000008C4200200000000010400014020020210040F809022028218FBF002C8FB100288FB0002403E0000827BD00300C006AC80000000024030009AC430000080055922402FFFF0C006AC80000000024030016AC430000080055922402FFFF0C006AC80000000024030086AC430000080055922402FFFF0C006AC80000000024030015AC430000080055922402FFFF000000003C0240038C431760000000009462003003E0FF
S3FF400156D200080000000000000000000000003C0240038C431760000000009462002E03E0000800000000000000000000000030830006240200061062001130820002144000030000182100041082304300013082000110400002308202003463400010400002308204003463000810400002000000003463020003E0000800601021080055C82403000227BDFFE0AFB100183C114003AFB00014008080218E24219400003021AFBF001C0C0036B8000028213C0340038C6614203C0240038C44218C10C0000C000018218C82000C2463000130420100104000050066282B8C820010000000001050000C0000000014A0FFF6248400348E2421940C0037D4C8
S3FF400157CC000080218FBF001C020010218FB100188FB0001403E0000827BD00208E2421940C0037D4241000018FBF001C020010218FB100188FB0001403E0000827BD002027BDFFE0AFB100183C114003AFB00014008080218E24219400003021AFBF001C0C0036B8000028213C0340038C6614203C0240038C44218C10C0000C000018218C82000C2463000130420100104000050066282B8C82001C000000001050000C0000000014A0FFF6248400348E2421940C0037D4000080218FBF001C020010218FB100188FB0001403E0000827BD00208E2421940C0037D4241000018FBF001C020010218FB100188FB0001403E0000827BD002027BDFFE0AFB19A
S3FF400158C600183C114003AFB00014008080218E24219400002821AFBF001C0C0036B8000030218E0400200000000010800003000000000C00367C000000008E03000C3C0540038CA621902402FEFF8E24219400621824AE03000CAE060028ACB021908FBF001C8FB100188FB00014080037D427BD002027BDFFD0AFB200283C1240038E442194AFB1002400002821000030213C114003AFBF002C0C0036B8AFB000208E242190000000001480000C3C024003000080218E4421940C0037D4000000008FBF002C020010218FB200288FB100248FB0002003E0000827BD00308C43218C3C02C4EC008318230003188334424EC5006200183C044C423484490097
S3FF400159C027A20018240500012406005400003821AFA20010000018120C0035EC006420251440FFE4240301008E302190000000008E020028AE000020AE000000AE000004AE000008AE000010AE000014AE000018AE00001CAE000024AE00002CAE000030AE000028AE03000CAE2221908FA200180800565EAE02002027BDFFE0AFB00014008080213C044003320500032484F340AFBF001C0C006704AFB100182405FFFC3C044003020528242484F3700C0066E0004088218FBF001C005110258FB100188FB0001403E0000827BD00200000000034A540000000382108002498000030213C0440033C02400324832A7424422A78AC822A74AC630008AC607D
S3FF40015ABA000403E000080000102127BDFFC0AFB60038AFB50034AFB40030AFB20028AFB10024AFBF003CAFB3002CAFB0002000A0A8210080B02100C090218FB4005010A000AA00E088212CC20002104000A7000000008CA2002400000000104000340000000010E00004240400640C00794C00E02021244400650C00244C00000000004080211040009F00409821AC52002812200054AE0200242442006400402021022028210C0077F0AE0200601280003127B100100280202124050007022030210C0022D0240700012403FFFF1043001C000000008FA20018000000008C4200100000000010400071000000000040F80902202021240300011043003CAF
S3FF40015BB43C0240030C006AC80000000024030014AC4300000C002348020020218E220008000000001440006700000000080057012402FFFF0C006AC80000982124030086AC4300000C002348026020212402FFFF8FBF003C8FB600388FB500348FB400308FB3002C8FB200288FB100248FB0002003E0000827BD0040AE000018AE00001CAE000020AE000008AE00000CAE000010AE000014000088218EA30024000000000060F80902002021104000343C0440038FA20018000000008C4200280000000010400003000000000040F809020020210C002348020020211620FFD02402FFFF0800570100000000080056D9AC4000603C0340038C442A74246360
S3FF40015CAE2A7810830039000000008FA500108C82001800000000144500070000000008005754000000008C820018000000001045001C000000008C840000000000001483FFF9000000008FA200188FA300148FA4001C8C460020AE050008AE03000CAE04001410C00014AE02001000C0F809020020211440FFA900000000080057130000000024842A740C003C740200282112C0000200000000AED0000008005701000010210C006AC80000000024030010080056F2AC4300000C006AC80000000024030086080056F2AC4300008C42001C000000001040FF97000000000040F80902202021080057012402FFFF8FA500100800573D000000000C006AC84C
S3FF40015DA80000000024030016AC430000080057012402FFFF0C006AC8000000002403000CAC430000080057012402FFFF000000000000000000000000240204B01082006F00000000288204B1144000192402008624024B001082006D0000000028824B0114400026240209603C0300013462C2001082005C000000003462C2010082102A1440003F340296003C0200033442840010820052000000003C02000734420800148200310000000003E00008240210041082005400000000288200871440001C24020032240200C81082003800000000288200C914400022240200962402012C1082003400000000240202581482001E0000000003E00008240202
S3FF40015EA200081082003D00000000288209611440002424020708240212C01082002D0000000024022580148200110000000003E000082402000D1082002800000000288200331440000C2402004B10820029000000002402006E148200050000000003E0000824020003108200180000000003E000082402FFFF1480FFFD0000000003E00008000010211082000E000000003402E1001482FFF60000000003E00008240210011482FFF20000000003E000082402000A03E000082402000603E000082402000703E000082402000F03E000082402000503E000082402000C03E000082402000103E000082402100303E000082402100203E000082402000221
S3FF40015F9C03E000082402000B03E000082402000903E000082402000403E000082402000E00000000008038213C04400327BDFFD824020014248426042405000424060002AFBF0024AFA20010AFA000140C004224AFA000188FBF00240000000003E0000827BD0028008038213C04400327BDFFD824020014248424D82405000424060008AFBF0024AFA20010AFA000140C004224AFA000188FBF00240000000003E0000827BD0028008038213C04400327BDFFD824020060248426442405000424060006AFBF0024AFA20010AFA000140C004224AFA000188FBF00240000000003E0000827BD0028008038213C04400327BDFFD82402008C248425402405B7
S3FF40016096000424060003AFBF0024AFA20010AFA000140C004224AFA000188FBF00240000000003E0000827BD0028008038213C04400327BDFFD824020088248426C42405000424060004AFBF0024AFA20010AFA000140C004224AFA000188FBF00240000000003E0000827BD0028008038213C04400327BDFFD824020014248426842405000424060005AFBF0024AFA20010AFA000140C004224AFA000188FBF00240000000003E0000827BD00283C0240038C591DB0000000001320000300000000032000080000000003E0000800000000008038213C0240033C0340033C04400327BDFFD8AC45253CAC6625C0248425C42402011C240500042406000111
S3FF40016190AFBF0024AFA20010AFA000140C004224AFA000183C0440038FBF00242484177008003B8827BD00280000000000000000008038213C04400327BDFFD824020014248425802405000424060007AFBF0024AFA20010AFA000140C004224AFA000188FBF00240000000003E0000827BD002827BDFFD800803821240200583C044003AFA2001024030001240200FF248429482405000324060008AFBF0024AFA300140C004224AFA200188FBF00240000000003E0000827BD0028000000000000000027BDFFD8008038212402002C3C044003AFA2001024030001240200FF248429082405000324060002AFBF0024AFA300140C004224AFA200188FBFB1
S3FF4001628A00240000000003E0000827BD0028000000000000000027BDFFD0AFB00020008080213C044003AFB20028AFB10024241200FF2411000102003821240200A4248428442405000324060005AFBF002CAFA20010AFB100140C004224AFB200183C0440030200382124020018248429C02405000324060004AFB10014AFB200180C004224AFA200108FBF002C8FB200288FB100248FB0002003E0000827BD0030000000000000000027BDFFD800803821240200783C044003AFA2001024030001240200FF248428842405000324060006AFBF0024AFA300140C004224AFA200188FBF00240000000003E0000827BD0028000000000000000027BDFFD806
S3FF40016384008038212402005C3C044003AFA2001024030001240200FF248428C4240500032406000AAFBF0024AFA300140C004224AFA200188FBF00240000000003E0000827BD0028000000000000000027BDFFD8008038212402005C3C044003AFA2001024030001240200FF24842704240500032406000BAFBF0024AFA300140C004224AFA200188FBF00240000000003E0000827BD002800000000000000003C02400327BDFFE82446F3A03C024003AFB00010AFBF00140080802124472A8024C801808CC200008CC300048CC400088CC5000C24C60010ACE20000ACE30004ACE40008ACE5000C14C8FFF624E700103C0440030C005AE024842C4C3C044C
S3FF4001647E40033C06100024842C0C34C68000240500010C0048582407000B3C0240033C03400324442C5C24632DD024820004AC820000AC800004AC8400082484000C1464FFFB248200041600000B3C0240033C0440038FBF001424832C0024422C048FB00010AC822C00AC630008AC60000403E0000827BD001800101100001020800C004E9C008220213C044003020030218FBF00148FB0001024842C00004028212407001408005CB427BD001827BDFFD0AFB100188C91010CAFBF002CAFB50028AFB40024AFB30020AFB2001C12200042AFB000143C1540032414FFFE2412001B2413002040036000000000000074102440826000000000003065000197
S3FF400165788EA32C4C8E2400C88E2200C400641825000210270062182410600029000000004002600000000000005410240045102540826000000000002410001B02002821022020210C0067D8000030210200282102202021261000011440FFE3240600010C0067D8000000001440FFDF000000001613FFF3020028212410000102002821022020210C0067D8000030210200282102202021261000011440FFD3240600010C0067D8000000001440FFCF000000001612FFF302002821080059580000000040026000000000002403FFFE0043102400A2102540826000000000008FBF002C8FB500288FB400248FB300208FB2001C8FB100188FB0001403E0A2
S3FF40016672000827BD003027BDFFE8AFBF00140C0000F424040001000000000000000027BDFFD800803821240200203C044003AFA2001024030001240200FF24842784240500032406000BAFBF0024AFA300140C004224AFA200188FBF00240000000003E0000827BD002800000000000000003C0240038C591DAC000000001320000300000000032000080000000003E00008000000003C02400327BDFFD8AC4529BC008038213C0340032402011C3C044003AC66290424842744AFA2001024030001240200FF2405000324060001AFBF0024AFA300140C004224AFA200183C0440030C006054248417A43C0440038FBF00242484179008003B8827BD0028C1
S3FF4001676C908200082403000330420007104300030000000003E00008000000008C840028080068AD0000000027BDFFD800A02021AFB30020AFB2001C8CB3010C00A09021AFBF0024AFB100180C006754AFB000140C006788024020218E500028080059F72671003C8C42002800000000AC5000000C004664022020211440FFFA000000008E63007C240200031062000902602021AE40010C8FBF00248FB300208FB2001C8FB100188FB0001408004E9427BD00280C004DE82664009CAE40010C026020218FBF00248FB300208FB2001C8FB100188FB0001408004E9427BD002827BDFFE0240400E4AFB10018AFB00014AFBF001C0C004E9800A088211040EF
S3FF400168660056004080213C0240032447F520AE30010C00E030210200502124E800308CC200008CC300048CC400088CC5000C24C60010AD420000AD430004AD440008AD45000C14C8FFF6254A00108CC200008CE300188CE4001C8CE500208CC800048CE9002C8CE600248CE70028AD420000AD480004AE030080AE040084AE050088AE06008CAE070090AE0900948E230014AE0000C88E270008240200FF0043102300072E0224060001260300DC260400D8AE02008030A5000724020003AE0300D8AE0400E0AE060038AE06007CAE0000D4AE0000CCAE0000D010A20015AE0000DC2402FFFFAE0200C42604003C00002821240610000C0048580000382145
S3FF400169608E2300083C0240018FBF001C24426A2CAE1100C0AE0200B8AE0300BCAE0000A4240200018FB100188FB0001403E0000827BD0020000716C21446FFEB2402FFFF3C0240038C4323D4000000008C64010C000000008C8200C408005A53AE0200C48FBF001C000010218FB100188FB0001403E0000827BD00208C82010C008030218C4400848CC5001C240200FF004438232403FFFFACC3007810A00006ACC700188CC200140000000000E2102B104000050000000000C0202100E028210800435C2406000103E000080000000027BDFFE0AFB100188CB1010CAFB0001426240090AFBF001C0C00602800A080211440000200403021240600018E22CA
S3FF40016A5A0098240300FF8E04001C00622823AE06007810800014AE0500188E0200140000000000A2102B14400010020020210C006028262400881440000200000000240200013C044003AE2200A82625009C8FBF001C8FB100188FB00014248423F408004D4427BD0020020020210C00435C2406000108005AA20000000000000000000000000000000027BDFFD800803821240200743C044003AFA2001024030001240200FF248428042405000324060009AFBF0024AFA300140C004224AFA200188FBF00240000000003E0000827BD0028000000000000000027BDFFD800803821240200683C044003AFA2001024030001240200FF248427C424050003EC
S3FF40016B5424060007AFBF0024AFA300140C004224AFA200188FBF00240000000003E0000827BD0028000000000000000027BDFFE810800007AFBF0014AC800000000010218FBF00140000000003E0000827BD00180C006AC80000000024030016AC43000008005AE52402FFFF00000000008038213C04400327BDFFD8240200602403000424842E5C240500022406000AAFBF0024AFA20010AFA300180C004224AFA000148FBF00240000000003E0000827BD0028000000000000000000000000008038213C04400327BDFFD82402001C2403000424842E9C2405000224060007AFBF0024AFA20010AFA300180C004224AFA000148FBF00240000000003E067
S3FF40016C4E000827BD00280000000000000000000000003C024003AC402DD003E000080000000003E00008000000000000000000000000008038213C04400327BDFFD8240200882403000424842DD42405000224060004AFBF0024AFA20010AFA300180C004224AFA000148FBF00240000000003E0000827BD0028000000000000000000000000008038213C04400327BDFFD8240200302403000424842EDC2405000224060005AFBF0024AFA20010AFA300180C004224AFA000148FBF00240000000003E0000827BD0028000000000000000000000000008038213C04400327BDFFD82402008C2403000424842F1C2405000224060008AFBF0024AFA20010AE
S3FF40016D48AFA300180C004224AFA000148FBF00240000000003E0000827BD0028000000000000000000000000008038213C04400327BDFFD8240200C02403000424842F5C2405000224060006AFBF0024AFA20010AFA300180C004224AFA000148FBF00240000000003E0000827BD0028000000000000000000000000008038213C04400327BDFFD82402003C2403000424842F9C2405000224060002AFBF0024AFA20010AFA300180C004224AFA000148FBF00243C0240033C034003AC402FE0AC602FDC03E0000827BD0028008038213C04400327BDFFD824020078240300042484223C2405000224060003AFBF0024AFA20010AFA300180C004224AFA097
S3FF40016E4200148FBF00240000000003E0000827BD002800000000000000000000000003E000080000000000000000000000008CA2010803E00008AC4000008C8601180000000010C0000A000000008CC200048CC400088C43000000000000ACC3000C8CC600000000000014C0FFF8AC4400008CA501180000000010A0000A000000008CA200048CA4000C8C43000000000000ACA300088CA500000000000014A0FFF8AC44000003E00008000000003C0240038C591554000000001320000300000000032000080000000003E0000800000000008038213C04400327BDFFD82402011C240300042484227C2405000224060001AFBF0024AFA20010AFA30018AB
S3FF40016F3C0C004224AFA000143C0440030C006054248417F43C0440038FBF0024248417E008003B8827BD002827BDFFD8AFB1001C8C910108AFBF0024AFB2002012200025AFB0001840046000000000002402FFFE0082102440826000000000008E320014AE20001440026000000000002403FFFE00431024308400010082202540846000000000001240001327B000108E22001C8E240010244200013405FFFF020030210C0068B4AE22001C8E23000C000000000060F809024020218E22001C8FA400102442FFFFAE22001C020030210C0068B43405FFFF8FBF00248FB200208FB1001C8FB0001803E0000827BD002827BDFFE0AFB1001800A088218CA5AB
S3FF400170360118AFBF001CAFB0001410A00006AE2001188CB000000C005C54022020211600FFFC020028218E2401080C004E94000000008FBF001CAE2001088FB000148FB1001803E0000827BD002027BDFFE0AFB000143C1040038E0223ACAFB100188C430040AFBF001C90640004000000001480001F00A088210C004E98240400201040001F004028218E0223AC240300018C440040A0A3000890820004AE200118AE250108ACA00000ACA0000CACA00010ACA00014ACA0001810400007ACA0001C000018212404004000A31021246300041464FFFDAC4000208FBF001C240200018FB100188FB0001403E0000827BD00200C004E98240400601440FFE337
S3FF40017130004028218FBF001C000010218FB100188FB0001403E0000827BD0020000000003C0240038C4323D427BDFFE8AFB00010AFBF001400A080218CA500101064000B000000008E04000C10A000030000000000A0F80900000000020020218FBF00148FB0001008004E9427BD00188E0200048E0300088C44000008005C5EAC4300003C02400303E00008AC4023D83C0240038C4323D8000000000083202503E00008AC4423D83C0340038C6223D8000420270082202403E00008AC6423D83C0240038C4323D8000000000083102403E000080002102B0000000000000000000000003C0340038C622E54000000000082102B1040000C3C0340038C678A
S3FF4001722A2E5800041140000418C00043102300E238218CF90000000000001320000500000000032000080000000003E000082402000A03E000080000102100000000000000000000000040056000000000002402FFFE00A2102440826000000000008C8300048C82000000000000AC620000AC43000440026000000000002403FFFE0043102430A5000100A22825408560000000000003E000080000000000000000000000000000000000E01021AC80000410C0000E0080382124C6FFFF00C0402108005CBD00A0182124C6FFFFAC670004ACE300000060382114C0FFFB00621821004800180000101200A2382124820004ACE2000003E00008AC87000822
S3FF400173240000000000000000000000003C02800000A040210080382110C20051ACA600083C027FFF3442FFFF10C20034000000008C8300502484005414830027000000000080182140046000000000002402FFFE0082102440826000000000008C6200048CE500488C46000024A30001AC480000AD020004ACE30048ACC800042CA90001AD06000040026000000000002403FFFE004310243084000100822025408460000000000011200013000000008CF90060000000001320000F000000008CE4006403200008000000008C630000000000001083FFDB000000008C6200080000000000C2102A1040FFF80000000008005CDA0000000003E000080000A3
S3FF4001741E000040046000000000002402FFFE00821024408260000000000024E20054ACA200008CE300488CE5005824620001ACE80058ACE20048AD0500042C690001ACA8000040026000000000002403FFFE0043102430840001008220254084600008005CF20000000040046000000000002402FFFE0082102440826000000000008CE500488CE6005024A3000124E20050AD020004ACE80050ACC80004ACE300482CA90001AD06000040026000000000002403FFFE0043102430840001008220254084600008005CF200000000000000000000000027BDFFD8AFB2001C008090218E46001400A020218E450010AFBF0024AFB30020AFB100180C003F3252
S3FF40017518AFB0001410400025004030218E5000080000000012500021000000008E020004000000000046102B104000310000000008005D59000088218E020004000000000046102B1040001E022098218E100008000000001650FFF82631000102209821000028218E420044000000000053102B1040000200000000AE5300448FBF002400A010218FB300208FB2001C8FB100188FB0001403E0000827BD00288FBF00240000282100A010218FB300208FB2001C8FB100188FB0001403E0000827BD0028020028210C003F46024020218E43004C8E420048246300010071182124420001AE420048AE43004C08005D5F260500080000882108005D7600008F
S3FF4001761298210000000000000000000000008C8600200000000000A6102B8C870024144000040080482100E5102B104000030000000003E00008000010218C83001024A4FFF81460000200A3001B0007000D00001010008240230106182B1460FFF50000000000E8102B1440FFF22405FFFE8D0400040000000000855824010B50210146102B1440FFEB0000000000EA102B1440FFE8000000008D43000400000000306200011040FFE3000000000147102B1040003100652824014518218C620004000000003842000130430001308200011440002B000000008D04000000000000010440230106102B1440FFD20000000000E8102B1440FFCF0000000041
S3FF4001770C8D02000400000000304200011040FFCA000000001060003C000000008D23003801651021004410218D47000C8D4600082463FFFF0102202134450001AD230038ACC7000CAC820000AD050004ACE600088D2200408D2400308D2300502442FFFF008B202124630001AD220040AD230050AD24003003E000082402000108005DB7000018211060000D3563000100AB10218D4600088D45000C0102182134440001AD060008AD05000CAC620000AD040004ACA8000808005DD7ACC8000CAD0300048D4200042403FFFE00431024AD420004AD4B00008D2200388D23003C8D240008244200010062182BAD040008AD09000CAD280008AC88000C1060FA
S3FF40017806FFD5AD22003808005DD7AD22003C0164202134820001AD0200048D4300042402FFFE00621824AD44000008005DD7AD43000400000000000000002402000210820012000000002C8200031440000924020001240200031082000A0000000024020004148200050000000003E0000824020008108200070000000003E000082402FFFF03E000082402000C03E000082402000A03E00008240200028C8200C48C8300C827BDFFE02442FFF800621821AFB200182402FFF88C9200B8AFB000100080802100621824908400AC8E0500B08E0600B43C024002AFB100142442A720325100FFAFBF001CA2040076AE05007CAE060080AE0300F4AE0200F880
S3FF40017900A200007512200011AE0300F00C001560000000003C0310003244000100112A403463030000832025004510248FBF001C00821025AE0200FC8FB200188FB100148FB0001003E0000827BD00200C001560000000003C031000346303018FBF001C00431025AE0200FC8FB200188FB100148FB0001003E0000827BD00200000000027BDFFE0AFBF001CAFB10018AFB0001440026000000000002403FFFE004318244083600000000000304500018C900000248200041202002F000000008E02000002008821AC8200008E030050AC4400042402000210620012AE00004440026000000000002403FFFE004310240045102540826000000000003C05FD
S3FF400179FA1003020020210C00440C34A5FFF88FBF001C022010218FB100188FB0001403E0000827BD002024020003AE02005040026000000000002403FFFE004310240045102540826000000000000C004DE8260400483C051003020020210C00440C34A5FFF88FBF001C022010218FB100188FB0001403E0000827BD002040026000000000002403FFFE0043102400451025408260000000000008005E8200008821000000000000000040026000000000002403FFFE004318244083600000000000304800018C8700302402000110E20004AC800030ACC8000003E0000800E0102124820004ACA200008C830008AC850008ACA30004ACA40044AC650000ED
S3FF40017AF440026000000000002403FFFE0043102400481025408260000000000003E0000800E0102100000000000000008C83003424020001106200030000000008006A0C0000000008005ED00000302127BDFFE8AFB00010AFBF001400A0802130C600FF40036000000000002402FFFE006210244082600000000000306900013C0200038CA300103442BEE0006218241060002A24A2003C8CA400388E0300048CA500001082003B000000008E0800408C870000ACA40004AC640000AC830004AC8500008E0300388E02004000000000106200062483003C24820038ACE20004AC870038AC880040AD03000014C0001E240200028E030050000000001062B1
S3FF40017BEE00282402000340026000000000002403FFFE004310240049102540826000000000003C051003020020218FBF00148FB0001034A5FFF80800440C27BD001840026000000000002403FFFE004310240049102540826000000000008FBF00148FB0001003E0000827BD001840026000000000002403FFFE004310240049102540826000000000008FBF00148FB0001003E0000827BD0018ACA3000408005EF7AC650000AE02005040026000000000002403FFFE004310240049102540826000000000000C004DE82604004808005F053C051003008028218C840044000000008C8600300000000010C000053C0240038C4323D40000000010A300048F
S3FF40017CE8240200038C82003C08005EC8ACA2003410C20006240300028C82003C00000000ACA2003403E00008AC83003003E00008000000000000000040076000000000002402FFFE00E2102440826000000000008C8600909483009694C200008C85008C00431025A4C200003C084003950623C89482009424A30004AC8300008CA30008004610253042FFFFACA40008A50223C8AC830004AC800010AC64000040026000000000002403FFFE0043102430E7000100E23825408760000000000040076000000000002402FFFE00E2102440826000000000003C024003944323C83C0240033063FFFF2C6401008C4622C0108000343C05400324A5EE8000A35F
S3FF40017DE210219043000000000000246400083C03400324632440000410400043102194420000000000002C430100106000210000000000A21021904300000000000024630008000411000062102100021900000210800062182300C318213C0240038C6400008C4223D43C03400310820007AC6423A0904200760000000010400003240300013C024003A04323E440026000000000002403FFFE0043102430E4000100441025408260000000000003E00008000000000002120200A210219043000008005F8A000411000003120224A5EE8000A210219044000008005F7D3C034003908200AC8C8300B08C8700B427BDFFE8A0820076AC83007CAC87008051
S3FF40017EDCAC8500A4AC8600A8AC80001CAC800070AFB00010AFBF00140C0048300080802114400005240200028E030050000000001062000F000000008E0500BC8E020014000000001045000602002021AE0500188FBF00148FB00010080048F427BD00188FBF00148FB0001003E0000827BD00180C004DE82604004808005FC500000000000000003C0240038C4523D4000000008CA6008C40036000000000002402FFFE006210244082600000000000306700018CC300008CC20008000000001062002824C200048CA400008CA3000400000000AC640000AC830004ACA200008CC20008ACC50008ACA20004AC45000040026000000000002403FFFE004340
S3FF40017FD6102400471025408260000000000040046000000000002402FFFE0082102440826000000000003C0740038CE223A00000000010A20014240300013C024003A04323E440026000000000002403FFFE0043102430840001004410254082600003E000080000000040026000000000002403FFFE00431024004710254082600003E00008000000008CC2000000000000ACE223A03C024003A04323E440026000000000002403FFFE0043102430840001004410254082600003E00008000000000000000000000000000000008C8600000000000010C00021240303E88C84000400000000146000020083001B0007000D3C0540038CA424B03C02000F03
S3FF400180D034424240000018120000000000000000148000020044001B0007000D000010120000000000000000148000020064001B0007000D00001812000000000000000000460018000010120062102114400002000000002402000103E00008000000008C840004000000001480FFDF0000000003E0000800001021000000000000000027BDFFE8AFB00010008080213C044003248424C0AFBF00140C003C74020028218E02002400000000104000083C044003AE020010260500088FBF00148FB000102484231808003C7427BD00188FBF00148FB0001003E0000827BD00180000000027BDFFE0AFB0001400A080218CA200008CA300048E06000C8CA5B4
S3FF400181CA00088E0700108E0800148E0900188E0A001CAFB10018AC820014AC85001C00808821AC830018AC860020AC870024AC880028AC89002CAC8A00303C044003248424C0AFBF001C0C003C74022028218E02001000000000104000093C044003AE220010262500088FBF001C8FB100188FB000142484231808003C7427BD00208FBF001C8FB100188FB0001403E0000827BD00200000000003E000080000102127BDFFE8AFBF00140C002348000000003C0340038C6220B08FBF00142442FFFFAC6220B003E0000827BD00183C0240038C451F7027BDFFE8AFBF00140C0021CC2404000110400006004020213C0340038C6220B00000000024420001D7
S3FF400182C4AC6220B08FBF00140080102103E0000827BD001827BDFFD8AFB10018AFB00014AFBF0024AFB30020AFB2001C008088211080005600A080218C83004C240200051462005A3C0240038C431F7000000000000320822482FFFF0045102B1040001F2483000100640018000018122462FFFF0045102B1440005900A41023148000020044001B0007000D8E230058000090100000801210C0002D00000000106000750000000000101080006280218E040000000000001080001D00121080008210218FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD00288E24005410C0003A000000001080000A0000000000101080008210218FBF5C
S3FF400183BE00248FB300208FB2001C8FB100188FB0001403E0000827BD00280C0060A5000000001040001300402021080060EDAE2200540C0060A5000000001040000D00402021AE02000000121080080060E100821021106000080000102100101080006210218C440000000000001480FFD500121080000010218FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD00283C0440033C0640033C0740032484F56024C6F65024E7F5A40C005474240503863C0440033C0640033C0740032484F56024C6F65024E7F5B00C0054742405038A1480FFC8000010210800610D000000002462000100440018000010122442FFFF0045102B1440FFDE9E
S3FF400184B800A31023148000020044001B0007000D8E23005C00001012000098100000000000000000148000020044001B0007000D000090100000801210C0001700000000106000220000000000101080006280218E030000000000001060002A0000000000121080006280218E030000000000001060001C00131080080060EF006210210C0060A5000000001040FFBB00401821080060DAAE2200581060FFB80000102100101080006210218C430000000000001060FFB100121080006210218C44000000131880080060EF008310210C0060A5000000001040FFA80040182108006140AE22005C0C0060A5000000001040FFA200401821AE020000001335
S3FF400185B21080080060EF006210210C0060A5000000001040FF9A0040182108006146AE02000027BDFFE8AFBF00140C0060B6000030218C4400000C00609AAC4000008FBF00142402000103E0000827BD001827BDFFD8AFB30020AFB2001CAFBF0024AFB10018AFB00014008098211080001B00A090218C84000018A0000E00808021000088218E0400000000000010800004000000000C00609A00000000AE000000263100010232102A1440FFF6261000048E6400000C00609A000000008FBF0024AE6000008FB2001C8FB300208FB100188FB0001403E0000827BD00283C0440033C0640033C0740032484F56024C6F6AC24E7F5D40C005474240501B1A8
S3FF400186AC27BDFFD0AFB60028AFBF002CAFB50024AFB40020AFB3001CAFB20018AFB10014AFB000101080006C0080B0218C83004C24020005146200703C1240038E421F708C830054000000001060000400029882248400540C006180026028218EC30058000000001060001A000000008E421F7000000000000210821040001200002021080061CE000080218EC3005800041080006220218C8300000000000010600003000000000C006180026028218E421F7026100001000210820202102B1440FFF20200202126C400580C006180026028218EC4005C0000000010800034000000008E421F7000000000000210821040002C000000008C91000000003A
S3FF400187A60000122000280000A8210000A0218E421F70000000000002108210400012000018210000802100031080022220218C8300000000000010600003000000000C006180026028218E421F7026100001000210820202102B1440FFF3020018218EC4005C00000000009420210C006180026028218E421F7026B500010002108202A2102B104000080015A0808EC4005C00000000009410218C510000000000001620FFDB0000000026C4005C0C006180026028218FBF002C000010218FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD00303C0440033C0640033C0740032484F56024C6F69824E7F5A40C00547438
S3FF400188A0240501EC3C0440033C0640033C0740032484F56024C6F69824E7F5B00C005474240501F027BDFFE8AFB00010AFBF00140C0055D600808021144000130000000096020034000000001440000F3C0240038C421760000000008C430004000000001070000E000000008E03004C2402000610620003000000000C0061AB020020210C002348020020218FBF0014000010218FB0001003E0000827BD001808006242AC40000427BDFFE0AFB000188C900000AFBF001C8E0200080000000010400004000000000C005C9C02002021AE0000089602003427A400102442FFFFA60200340C002380000028218FA20010020020210C006231AE0200488FBF06
S3FF4001899A001C8FB0001803E0000827BD00208C82000C27BDFFE830420200AFBF00148C83002C10400004000000008C62005000000000AC8200080C006231006020218FBF00140000102103E0000827BD001827BDFFE8AFBF001410800019AFB000108C83004C240200051462001D3C0640030C0060B624060001004080218C420000000000001040000600000000000010218FBF00148FB0001003E0000827BD00180C0060A500000000104000030000000008006289AE0200000800628A240200013C0440033C0640033C0740032484F56024C6F6CC24E7F5A40C005474240501693C0440033C0740032484F56024C6F6CC24E7F5B00C0054742405016D53
S3FF40018A9427BDFFD8AFB40020AFB3001CAFBF0024AFB20018AFB10014AFB00010008098211080005800A0A0218C83004C240200051462005C3C0240038C441F700000000000041882246200010043001800001012244200010000000000430018000010122442FFFF00000000004400180000101200A2102B1040003D000000008E630050000000000065102A1040003000001021148000020064001A0007000D0000901200000000000000001480000200A4001A0007000D000088120232102B1440002102408021080062DB026020210230102B1440001C026020210C00627A020028211040FFFA261000012610FFFF0212102B14400007020028210260A1
S3FF40018B8E20210C0061752610FFFF0212182B1060FFFB020028210C006AC8000000008FBF00242403001CAC4300008FB400202402FFFF8FB3001C8FB200188FB100148FB0001003E0000827BD0028AE740050000010218FBF00248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD00280C006AC80000000024030016AC430000080062F82402FFFF3C0440033C0640033C0740032484F56024C6F6E424E7F5A40C005474240501313C0440033C0640033C0740032484F56024C6F6E424E7F5B00C0054742405013527BDFFE0AFB000188C90002CAFBF001C8E020050000000000045102A1440000E00000000AE050050AC85000427A400109C
S3FF40018C880C002380000028218FA200108FBF001C00001821AE020040006010218FB0001803E0000827BD00200C0062A5020020218FBF001C00401821006010218FB0001803E0000827BD002027BDFFE0AFB000148C90002C240200068E03004CAFB10018AFBF001C1462000D008088218E0400508E230008000000000083102A1440001000000000006010218FBF001C8FB100188FB0001403E0000827BD00208C8500080C0062A50200202114400008000000008E0200508E23000808006343AE220004AE24000808006343008018210C006AC8000000002403001CAC430000080063442402FFFF27BDFFC0AFB70038AFB50030AFB30028AFB10020AFBFBB
S3FF40018D82003CAFB60034AFB4002CAFB20024AFB0001C0080A82100A0882100C098211080008900E0B8218C83004C240200051462007D0000000010C0008B0000000010E00074000000008C82005000E528210045102B144000543C1640038ED01F7000000000160000020230001A0007000D0000A01200008810162000380280902102E088210000A0218ED01F70000000000230102B144000120000000002A02021024028210C0060B600003021104000523C0440038C440000026028210C006F80020030218EC31F70023088230223182B02709821265200011060FFF00290A0211220000C27A400100240282102A020210C0060B6000030211040006B93
S3FF40018E7C026028218C4400000C006F80022030210291A02127A400100C002380000028218FA3001000000000AEA30040AEA300448FBF003C028010218FB700388FB600348FB500308FB4002C8FB300288FB200248FB100208FB0001C03E0000827BD004002A02021028028210C0060B60000302110400046004020210211802302F0102B14400013020030218C84000002602821009120210C006F80269200010270982102F08823080063820200A0210C0062A5000000001040FFAA000000000C006AC82414FFFF2403001C080063ABAC4300008C84000002E080210260282100912021020030210C006F80269200010270982102F0882308006382020069
S3FF40018F76A0213C0640033C0740032484F56024C6F67024E7F5E80C0054742405032E0C006AC82414FFFF24030016080063ABAC4300003C0440033C0640033C0740032484F56024C6F67024E7F5B00C005474240502E53C0440033C0640033C0740032484F56024C6F67024E7F5A40C005474240502E13C0440033C0640033C0740032484F56024C6F67024E7F5E00C005474240502ED3C0440033C0640033C0740032484F56024C6F67024E7F5E80C0054742405031A3C0440033C0640033C0740032484F56024C6F67024E7F5E80C0054742405034427BDFFE0AFB100188C91002C00A010218C850008AFB0001400C038210080802100403021AFBF001C46
S3FF400190700C00635B022020218E2300508FBF001CAE0300048FB100188FB0001403E0000827BD002027BDFFE0AFB10018008088218C84000CAFB0001430820204AFBF001C8E30002C10400005308202008E03004C240200061062000F308202001440000A000000008E02005000001821AE2200048FBF001C006010218FB100188FB0001403E0000827BD00208E02005008006435AE2200088E070050240200058E060054AE02004CAE000050AE000058AE00005C14E00008AE0000548E24000C00000000308202001040FFE7000000000800643E00000000020020210C00635B000028212403FFFF1043FFE2000000008E24000C0800644D3082020027BD29
S3FF4001916AFFC0AFB60034AFB30028AFBF003CAFB70038AFB50030AFB4002CAFB20024AFB10020AFB0001C0080B02100A040211080008800C098218C83004C000000002462FFFB2C4200021040008A0000000010C000900000000010E00078240200061062005700E510218C8600500000000000C2102B1440000200C5A02300E0A0213C1540038EB01F7000000000160000020110001A0007000D0000B812000090101240001602E0882102E0282102C020210C0060B6000030211040007E00402821021218230074102B14400052028080218CA500000260202100B228210C006F80020030210270982126F100010290A023020090218EB01F700000000035
S3FF400192640290102B144000110000000002C02021022028210C0060B60000302110400040026020218C4500000C006F80020030218EA31F700290A0230283182B02709821263100011060FFF1025090211280000B024080210220282102C020210C0060B6000030211040005C026020218C4500000C006F80028030210292802127A400100C002380000028218FA2001002003021AEC200408FBF003C00C010218FB700388FB600348FB500308FB4002C8FB300288FB200248FB100208FB0001C03E0000827BD00408C820050000000000045802300F0182B14600008000000008EC500540260202100A828210C006F8002003021080064B927A400108EC547
S3FF4001935E005400E080210260202100A828210C006F8002003021080064B927A400100800648E006080213C0440033C0640033C0740032484F56024C6F68424E7F5E80C005474240502A50C006AC80000000024030016AC430000080064BE2406FFFF3C0440033C0640033C0740032484F56024C6F68424E7F5A40C0054742405024A3C0440033C0640033C0740032484F56024C6F68424E7F5F40C0054742405024F3C0440033C0640033C0740032484F56024C6F68424E7F6400C005474240502583C0440033C0640033C0740032484F56024C6F68424E7F5E80C005474240502943C0440033C0640033C0740032484F56024C6F68424E7F5E80C0054743C
S3FF40019458240502B700A010218C8500088C84002C00C038210800645A0040302100000000000000000000000003E0000800A0102103E0000800001021008028213C04400327BDFFE8AFB00010AFBF00140C0067482484F78010400004004080210C006AC800000000AC5000008FBF00142402FFFF8FB0001003E0000827BD001827BDFFD88C82002CAFBF0024AFA60018AFA50014AFA400108C4500548C4400500C00695027A6001014400005000000008FBF00248FA2001C03E0000827BD00280C006524004020218FBF00240000000003E0000827BD00288C87000C8C82000827BDFFD08C83002CAFA6001CAFBF002CAFA20014AFA50018AFA70020AFA47A
S3FF400195520010AFA000248C6500548C6400500C00699827A6001014400005000000008FBF002C8FA2002403E0000827BD00300C006524004020218FBF002C0000000003E0000827BD00308C87000C8C82000827BDFFD08C83002CAFA6001CAFBF002CAFA20014AFA50018AFA70020AFA40010AFA000248C6500548C6400500C00698027A6001014400005000000008FBF002C8FA2002403E0000827BD00300C006524004020218FBF002C0000000003E0000827BD003027BDFFD88C82002CAFBF0024AFA40010AFA00014AFA000188C4500548C4400500C00693827A6001010400003000000000C006524004020218FBF00240000000003E0000827BD002883
S3FF4001964C8C82000C27BDFFD88C83002CAFBF0024AFA20014AFA70018AFA400108C6500548C6400500C00696827A6001010400003000000000C006524004020218FBF00240000000003E0000827BD002800000000000000008C82002C008028218C44004C24030001108300030000000003E000082402FFFFACA0000803E000080000102103E00008000010218C82000000A030218C430038ACA0003CACA30008ACA000408C43004094440034ACA30024A4A400108C4300449444003CACA3002CA4A400129444003E8C4500488C430030A4C40014ACC500340000202100002821ACC3000CACC50004ACC40000ACC5001CACC40018ACC000208C4400502442C9
S3FF40019746005410820005000018218C8400002463010C1482FFFDACC3002003E000080000102127BDFFE82CC60002AFBF001414C0000A008038210C006AC8000000008FBF0014240300162405FFFFAC43000027BD001803E0000800A010218C8300082402010C144000020062001B0007000D8FBF00140000282127BD0018000018120003108000032180004410210043102300021080ACE2000803E0000800A0102127BDFFD8AFB0001C8C900000AFB10020AFBF00248E0300502602005414620036008088218C82000C000000008C4300180000000012030036000000008E02005C0000000014400032000000008E020008000000001040000400000000F2
S3FF400198400C005C9C02002021AE0000089602003427A400102442FFFFA60200340C002380000028218FA20010020020210C0055D6AE020048144000140000102196020034000000001440000F3C0240038C4417608E2300008C820004000000001043001B000000000C002348020020218FBF0024000010218FB100208FB0001C03E0000827BD0028000010218FBF00248FB100208FB0001C03E0000827BD00280C006AC8000000002403005AAC430000080066322402FFFF0C006AC80000000024030010AC430000080066322402FFFF08006629AC80000427BDFEB88C82002CAFBE0140AFB60138AFBF0144AFB7013CAFB50134AFB40130AFB3012CAFB23F
S3FF4001993A0128AFB10124AFB00120AFA5014C8C52005024560054125600580080F0212402010C1440000200C2001B0007000D8C9500080000101200021880000221800064182100621823000318800075A0211A80004A00008821000098210800666E27B701102631010C0234102A8E520000104000350000000012560033000000000235102A1440FFF72650000CAFB100148E42003800000000AFA200102402010C020020210C00794CA7A200180200282127A4001C0C0077F0A7A2001A8FA2014C27A60010005328218CC200008CC40004A8A20000B8A200038CC300088CC2000CA8A40004B8A40007A8A30008B8A3000BA8A2000C24C60010B8A2000FFE
S3FF40019A3414D7FFF224A500108EE200008EE40004A8A20000B8A200038EE30008A8A40004B8A40007A8A30008B8A3000B8FC200082631010C2442010CAFC200080234102A8E5200001440FFCD2673010C8FBF0144026010218FBE01408FB7013C8FB601388FB501348FB401308FB3012C8FB201288FB101248FB0012003E0000827BD0148080066A0000098210000000027BDFFD8AFB0001C8C900000AFB10020AFBF00240C0055B800A08821004018219602003C00000000104300030000000014600015000000002403FE00022310241440001127A400108E020030000000000043102402221025AE0200300C002380000028218FA2001000001821AE02AA
S3FF40019B2E00488FBF0024006010218FB100208FB0001C03E0000827BD00280C006AC80000000024030001AC430000080066CC2403FFFF03E0000800001021000000000000000003E0000800001021000000000000000027BDFFD0AFB50028AFB40024AFB30020AFB2001CAFB10018AFB00014AFBF002C0080A82100A0A021241100010000902100008021080066F1241300201213000A00118840023410241040FFFC26100001022028210C00670402A02021024290251613FFF8001188408FBF002C024010218FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD003027BDFFE8AFBF00140C006714000000001040000200000000E1
S3FF40019C288C4200048FBF00140000000003E0000827BD0018000000003C02400303E00008244218300000000027BDFFE0AFB00014008080218C840000AFB10018AFBF001C1080002400A088213C0540030C0077CC24A5F2F0104000120000202108006727000000008E0200000000000010400013008010218E020008000000001451FFF92610000C2610FFF48FBF001C020010218FB100188FB0001403E0000827BD00208E02000C000000001040FFF72603000C0200202108006727006080218FBF001C008080218FB100188FB0001403E0000827BD00208FBF001C00008021020010218FB100188FB0001403E0000827BD0020000000000000000027BD9C
S3FF40019D22FFE8AFBF00140C00549C0000000010400002000000008C4200088FBF00140000000003E0000827BD00180000000027BDFFD8AFB2001C8C92010CAFB100188E4300D824020001265100DCAFBF0024AFB30020AFB000141071001FAE4200CC2413FFFE40036000000000000073102440826000000000008E300004000000008E0400008E02000400000000AC440000AC820004400260000000000000531024306300010062182540836000000000008E0200088E04000C0040F809000000000C004E94020020218E4300D8000000001471FFE4000000008FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD0028000000000000000094
S3FF40019E1C000000008C85000827BDFFC800051E023C024003AFB2001C306300072452290830A5FFFF2463000696440010AFB70030AFB50028AFB40024AFB30020AFBF0034AFB6002CAFB10018AFB000140005A080000398800000A821241700041080002B24100001241600018E42001C00101880004310218C430000000000001060001A26100001906200100000000010400016007388218C6500140000000010A00012000000008E22000000000000005410218C430000000000001060000B0060202100A0F809000000008E22000000000000005410218C4300000000000010600002000000000000B02196440010000000000090102B1040FFDC00000C
S3FF40019F16000016C0000326B5000116B7FFD5000000008FBF00348FB700308FB6002C8FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD003800000000000000000000000027BDFFC030C600FFAFB3003827B30018AFB1003000C038212411000102603021AFB20034AFB0002CAFBF003CAFB10010008090210C00681400A080211040001B00102080001019003C0240030064182324422A80006228218CA600080000000010D10012240300028E5100C48CA200048CA400000051102510830014AE4200C400C0F80902002021AE5100C4240200018FBF003C8FB300388FB200348FB100308FB0002C03E0000827BD00408FBF003CE7
S3FF4001A010000010218FB300388FB200348FB100308FB0002C03E0000827BD00408CA2000802002021026028210040F80900003021AE5100C4080067FC240200010000000027BDFFE000A0482193A500332523FFFF24020001AFB2001800624004AFBF001CAFB10014AFB000100080182100C0902114A0003730E700FF2405FFFF40116000000000002402FFFE02221024408260000000000010E00039000000003C0340038C622C4C0000000001021024004510241040004A00092100000918803C0240030083282324422A8000A210218C44000024030002148300433C02400324422C50004518218C6600002464000410C40041000080218CC2000000C0DC
S3FF4001A10A8021AC6200001082003CAC4300041200000F3C02400324422C043C034003AE02000024632C008E0500088E06000C8E0200108C640008AE420008AC700008AE450000AE040004AE460004AC9000000800686C240500018C8200C4000000000002282740116000000000002402FFFE02221024408260000000000014E0FFC9000000008C6400C8000000000104102400451024104000130008102700441024AC6200C82405000140026000000000002403FFFE00431024322400010044102540826000000000008FBF001C00A010218FB200188FB100148FB0001003E0000827BD00200800686C000028210C006A4C010020210800686C2405000180
S3FF4001A2040C006A4C01002021080068460000000000000000000000000000000027BDFFD8AFB00014008080218C840008AFB300203C134003AFBF0024AFB2001CAFB100180C00413C00A090218E6423CC0C003BB0004088213C0340038C6223140000000024420001AC622314AE120028022020210C004464020028213C044003020028210C004108248427448E6423CC0C003C64000000008FBF00248FB300208FB2001C8FB100188FB000140800456E27BD00283C024003008028218C4423D40800688800000000000000000000000027BDFFD0AFB60028AFB50024AFB40020AFBF002CAFB3001CAFB20018AFB10014AFB0001000C0A8210080B02110C04D
S3FF4001A2FE007300A0A0213C0240038C5223D400000000924300768E42007C2C7100018E5301081440004B00118A00927000080C004FE52E1000010010828002028025021180253282010010400005AEB00000001612023842000130420001A24200763282020010400009328200FF32C20200104000483C0240038C4422C424030001AE43007CAE440078328200FF1440003D00000000328204001040001D001612823842000192630008304200011062001900008021A262000840046000000000002402FFFE0082102440826000000000008E6200188E630014AE620014AE63001840026000000000002403FFFE0043102430840001008220254084600034
S3FF4001A3F8000000008E620014000000001440002E24020001000080213C0240038C4424B4240300031083001E00000000000010218FBF002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD0030927000080C004FE52E10000100108280020280253631020002118025328201001040FFBAAEB00000080068D4001612020C004FBA32C400FF080068E532820400080068E1AE40007C0C0069B00000000014400003000000001200FFDE000000000C0044F4000000000800690A00001021A242007508006904241000010800690A240200090000000000000000000000003C0340038C622E54000000000082102B1040CE
S3FF4001A4F2000C3C0340038C672E5800041140000418C00043102300E238218CF90008000000001320000500000000032000080000000003E000082402000A03E00008000010210000000000000000000000003C0340038C622E54000000000082102B1040000C3C0340038C672E5800041140000418C00043102300E238218CF90014000000001320000500000000032000080000000003E000082402000A03E00008000010210000000000000000000000003C0340038C622E54000000000082102B1040000C3C0340038C672E5800041140000418C00043102300E238218CF90004000000001320000500000000032000080000000003E000082402000A0F
S3FF4001A5EC03E00008000010210000000000000000000000003C0340038C622E54000000000082102B1040000C3C0340038C672E5800041140000418C00043102300E238218CF9000C000000001320000500000000032000080000000003E000082402000A03E00008000010210000000000000000000000003C0340038C622E54000000000082102B1040000C3C0340038C672E5800041140000418C00043102300E238218CF90010000000001320000500000000032000080000000003E000082402000A03E00008000010210000000000000000000000003C0240038C4423D4000000008C830010000000001460000B3C0240033C0240038C4323A000006E
S3FF4001A6E600001083000A00000000908200760000000010400006000000003C02400324030001A04323E403E000082402000103E00008000010210000000027BDFFE03C024003AFB100188C5123D4AFBF001CAFB000148E2400B80C004FBA000000003C034003807020C024020001022020210C004BF8A06220C00C00456E000000001200001E240200018E2300A00000000010620020000000001460000C240200028E23009C8E2400A80060F80900000000AE2200280C004C130220202100002021240500010C003F78240600061062001700000000240200031462FFF6000000008E23009C8E2400A88E2500A40060F80900000000080069E6AE22002846
S3FF4001A7E00C00B471000000008E2300A0240200011462FFE2000000008E23009C8E2400A40060F80900000000080069E6AE2200288E23009C8E2400A48E2500A80060F80900000000080069E6AE2200280000000027BDFFE8AFB00010AFBF001400A0802140036000000000002402FFFE006210244082600000000000306500013C0200038E0300103442BEE00062182410600017000000008E0200048E0300008E040050AC430000AC620004240200021082001AAE00004440026000000000002403FFFE004310240045102540826000000000003C051003020020218FBF00148FB0001034A5FFF80800440C27BD001840026000000000002403FFFE0043EF
S3FF4001A8DA10240045102540826000000000008FBF00148FB0001003E0000827BD001824020003AE02005040026000000000002403FFFE004310240045102540826000000000000C004DE82604004808006A2D3C0510030000000040056000000000002402FFFE00A2102440826000000000003C0340038C622C4C000420270082202414800006AC642C4C3C0340038C6223B8000000002442FFFFAC6223B840026000000000002403FFFE0043102430A4000100441025408260000000000003E00008000000000000000027BDFFE8AFBF00140C007587240400060C00252D24040001000000000000000000802821000030210000202108006A78000038217A
S3FF4001A9D400000000000000000000000027BDFFD8AFB000108F908018AFB400208E080148AFB3001CAFB20018AFB10014AFBF00240080882100A0A02100C090211100002D00E098218D03000400000000286200201040002B0000000012200013246200028D060004246400228D0501882402000124C3004200C2380400042080000318800104202100A728250103182124020002AC920000AC73000012220011AD05018800C0182124620002000210800102102124630001AC540000AD030004000010218FBF00248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD00288D02018C00C018210047102508006A9EAD02018C2608014C08000B
S3FF4001AACE6A86AE0801480C00244C240401901040000B004040218E020148AD000004AD020000AD000188AE080148AD00018C1220FFDE0000182108006A8D0000000008006AA52402FFFF0000000000000000000000008F82801403E00008000000000000000027BDFFE0AFB10014AFB00010AFBF001CAFB2001800A0802110A00039008088210C006C1A0000000012200005000000008E2200380000000010400039000000008602000C000000001040002B022020210C006B2802002821004090218E02002C0000000010400006000000008E05001C0040F8090220202104400036000000009602000C00000000304200801440002C000000008E05003032
S3FF4001ABC80000000010A000062602004010A20003000000000C00AFCC02202021AE0000308E0500440000000010A00004000000000C00AFCC02202021AE0000440C006C1CA600000C8FBF001C024010218FB200188FB100148FB0001003E0000827BD00200C006C1C000000008FBF001C00009021024010218FB200188FB100148FB0001003E0000827BD00200C006BD4022020218602000C000000001440FFC70220202108006B0A000000008E0500100C00AFCC0220202108006AF10000000008006AEC2412FFFF008028218F84801408006ACC000000000000000027BDFFD8AFB30020AFB2001CAFBF0024AFB10018AFB00014008098211080000500A01E
S3FF4001ACC290218C8200380000000010400058000000008643000C000000003062000814400032000000008E4200043463080018400060A643000C8E48002800000000110000213062100010400060000030218E5000509642000C000000003042000410400009000000008E4200048E4300300000000010600004020280238E42003C00000000020280238E45001C02602021020030210100F8090000382114500028000000009642000C8E4400103042F7FF3043FFFF30631000A642000CAE44000014600032AE4000048FBF002400001821006010218FB300208FB2001C8FB100188FB0001403E0000827BD00288E510010000000001220FFF43063000373
S3FF4001ADBC8E42000000000000005180231060001DAE51000000001021AE4200081A00FFEB022030218E4300248E45001C020038210060F80902602021022288211C40FFF7020280239642000C8FBF0024344200402403FFFFA642000C8FB30020006010218FB2001C8FB100188FB0001403E0000827BD00280C006BD40000000008006B35000000008E42001408006B76AE4200088FBF002400001821AE500050006010218FB300208FB2001C8FB100188FB0001403E0000827BD00288E42003C000000001C40FF9E0000000008006B62000000008E45001C026020210100F80924070001004080212402FFFF120200042402001D8E48002808006B450000F3
S3FF4001AEB600008E630000000000001462FFCF0000000008006B620000000010800004008028218F84801408006B28000000003C0540028F84801808006E3824A5ACA00000000000000000000000008F83801427BDFFE8AFB00010AFBF001410600007008080218C6200380000000014400003000000000C006BD4006020218FBF00148602000E8FB0001003E0000827BD00180000000000000000000000008C82003800000000144000410080682124020003ADA202E43C0240028C86000C8DA500088C8400042442B0B824030004ADA2003C3C0A4002240200083C0940023C0840023C074002254ADECC2529DE4C2508DDDC24E7DDD0A483000C240C0001A3
S3FF4001AFB0A4A2000C25AB02EC2402001224030002ADAC0038AC87002CAC800000AC800004AC800008A480000EAC800010AC800014AC800018AC84001CAC8A0020AC890024ADAB02E8ACA7002CA4AC000EAC880028ADA002E0ACA00000ACA00004ACA00008ACA00010ACA00014ACA00018ACA5001CACAA0020ACA90024ACA80028ACC00000ACC7002CA4C2000CA4C3000EACCA0020ACC90024ACC80028ACC00004ACC00008ACC00010ACC00014ACC00018ACC6001C03E000080000000003E000080000000003E000080000000003E000080000000003E000080000000003E000080000102103E00008000010213C0540028F84801408006E6F24A5B0903C0519
S3FF4001B0AA40028F84801408006E6F24A5B0883C05400208006E6F24A5AC8C3C0540028F84801808006E6F24A5AC8C000518C0000511400043102327BDFFE000451023AFB2001800029080AFB1001400A08821AFB00010AFBF001C0C00B0842645000C10400008004080212444000CAC510004AC400000AC440008024030210C007038000028218FBF001C020010218FB200188FB100148FB0001003E0000827BD002027BDFFE0AFB000148F908018AFB100188E020038AFBF001C1040002900808821261002E08E0200048E0400082443FFFF046100050000000008006C7C00000000046000192484005C8482000C000000001440FFFB2463FFFF2402FFFFAB
S3FF4001B1A424030001A482000EA483000CAC800000AC800008AC800004AC800010AC800014AC800018AC800030AC800034AC800044AC8000488FBF001C008010218FB100188FB0001403E0000827BD00208E02000000000000104000070220202108006C5B004080210C006BD40200202108006C5B261002E00C006C35240500041440FFF7AE0200002402000CAE22000008006C7600002021000000000000000027BDFFD0AFB2002400A0902100C0282127A60010AFB30028AFB10020AFBF002CAFB0001C0C00903C008098211440000A00408821000080218FBF002C020010218FB300288FB200248FB100208FB0001C03E0000827BD00300C006C520260DD
S3FF4001B29E20211040FFF5004080218FA6001002402821026020210C0026D0240701B6044000193C034002A602000E3C0240022442DECC2463DE4C3224FFFFAE020020AE0300243C0240023C0340022442DDDC2463DDD030840100A611000CAE020028AE03002C1080FFDDAE10001C0260202102002821000030210C006CF02407000208006C9E000000000C006C1A000000000C006C1CA600000C08006C9E00008021008010218F84801400A0302108006C900040282127BDFFE027A300280080102100A040218F848014AFA60028AFA7002C004028210100302100603821AFBF001C0C0079E7AFA300108FBF001C0000000003E0000827BD002027BDFFE0C1
S3FF4001B39827A2002CAFA7002C00403821AFBF001C0C0079E7AFA200108FBF001C0000000003E0000827BD002027BDFF78AFB70080AFB30070AFB2006CAFB00064AFBF0084AFB6007CAFB50078AFB40074AFB100680080982100A0802100C0B8211080000500E090218C8200380000000010400098000000009602000C24030108304201081043009A000000008E1400280000000012800113240200011242002B2402000212420011000000001240000F24020016AE6200002403FFFF8FBF0084006010218FB700808FB6007C8FB500788FB400748FB300708FB2006C8FB100688FB0006403E0000827BD00888E040010000088210000B021108000E202605D
S3FF4001B49220218604000C000000003083FFFF3062081A1440000730620400144000383C0240022442DDDC1282002234820800A602000C026020210C006B2802002821104000B602E0302108006D142403FFFF026020210C006B28020028219603000C0000000030621000104000E3306200048E11005014400064306200081040008A000000008E0200000000000010400086000000008E04001000000000004410230222882102F1B8210000902108006D23241600018605000E0000000004A0FFDC00000000026020210C00B01027A60010144000AA340380008FA2001C000000003042F000144300A5240304009602000C0000000034420400AE03004C27
S3FF4001B58CA602000C1640006C0260202112C0004802E0A8218E0500300000000010A000AA000000008E0700048E06003C9608000C8E0200388E040010022718210044102300C2302100621823310220001440000602A3102A144000040066102102A2102B1440005F02A310238E02004C8E05001C0002102302A2882402602021022030210280F809000038212403FFFF1043FFAB026020218E0200108E050030AE02000010A00007AE0000042602004010A20003000000000C00AFCC02602021AE0000309602000C02B188233042FFDF16200026A602000C08006D14000018210C006BD4000000009602000C24030108304201081443FF6800000000026052
S3FF4001B68620210C006B280200282108006D08000000008E0200048E0300300000000010600024022288238E02003C8E04001008006D4D022288239608000C000000003102100010400057026020218E0300508E0700048E0500300000000010A0005E006788238E06003C08006D6F02268823026020210C007648020028211440FF71026020218E030004000000000071102B1440FF6C007118238E0200000000000000511021AE030004AE02000008006D14000018218E04001008006D4E02F1B8218605000E0C00B01027A600101440FF5D026020218FA2003016C0FF9002E2A82108006DAF0000000000C2182300821021AE02000010A00007AE030004DC
S3FF4001B7802602004010A20003000000000C00AFCC02602021AE0000309602000C000018213042FFDF08006D14A602000C8E05001C024038210280F809026020212403FFFF1043FF23000000008E0500300000000010A000062602004010A20003000000000C00AFCC02602021AE0000309602000C8E0300103042F7DFAE030000A602000CAE00000408006D14000018218604000C08006D30348208000C006EEC0200282108006D25000000008E05001C000030210280F80924070001004018212402FFFF1062FF21026020219608000C08006DB5000000008E0700049608000C8E0200008E040010000000000044102300E2302108006D75022218232402C4
S3FF4001B87A001DAE62000008006D142403FFFF8E05001C02602021000030210280F80924070001004088212402FFFF1222FF0C000000009603000C08006D41306200040080102100A018218F84801400C038210040282108006CF00060302100000000000000000000000027BDFFC8AFB30020249302E0AFB70030AFB6002CAFBF0034AFB50028AFB40024AFB2001CAFB10018AFB000140080B0210C006C1A00A0B821126000262415FFFF0000A0218E7200048E7000081A40000F00000000000088218602000C0000000010400008263100018602000E020028211055000402C0202102E0F809000000000282A0251632FFF42610005C8E730000000000009E
S3FF4001B9741660FFEB000000000C006C1C000000008FBF0034028010218FB700308FB6002C8FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD003808006E5F0000A02127BDFFD0AFB3001C249302E0AFB60028AFBF002CAFB50024AFB40020AFB20018AFB10014AFB000100C006C1A00A0B021126000252415FFFF0000A0218E7200048E7000081A40000F00000000000088218602000C0000000010400008263100018602000E00000000105500040200202102C0F809000000000282A0251632FFF42610005C8E730000000000001660FFEB000000000C006C1C000000008FBF002C028010218FB600288FB500248FB400208FB3A7
S3FF4001BA6E001C8FB200188FB100148FB0001003E0000827BD003008006E940000A0210000000000E6001827BDFFC0AFB0002C27A2001024030001AFB30038AFB20034AFB10030AFBF003C00C0982100E0882100809021AFA5001000008012AFA20018AFA3001CAFB0001410800005AFB000208C8200380000000010400016000000008FA50050024020210C00911427A6001810400008000000008FA200200000000002021023166000020053001B0007000D000088128FBF003C022010218FB300388FB200348FB100308FB0002C03E0000827BD00400C006BD40000000008006EBB0000000027BDFFE00080102100A0182100C040218F848014AFA700102E
S3FF4001BB680040282100603021AFBF001C0C006EA4010038218FBF001C0000000003E0000827BD0020000000008F85801408006EE824A5007C000000000800730D24060001000000000000000084A6000C27BDFF8830C3FFFF30620002AFB30070AFB00064AFBF0074AFB2006CAFB1006800A08021144000370080982184A5000E0000000004A0002C306200800C00B01027A6001004400024340480008FA2001C000000003042F00038432000104400432C7200019602000C2411040034420800A602000C026020210C00B084022028211040002E004020219603000C3C024002346300802442B0B8AE62003CA603000CAE040010AE1100141240001BAE0455
S3FF4001BC6200008604000E0C00B0180000000010400016000000009602000C000000003442000108006F33A602000C8606000C0000000030C3FFFF3062008014400012000000002411040034C20800A602000C08006F0A0000902124A3004324020001ACA20014ACA30010ACA300008FBF00748FB300708FB2006C8FB100688FB0006403E0000827BD007808006F2A241100408604000C00000000308202001440FFF3260300433484000224020001AE020014A604000CAE03001008006F33AE0300003C0240028E0300282442DDDC1462FFBA240304009602000C0000000034420400A602000CAE03004C08006F0A241104002CC20004008018211440002061
S3FF4001BD5C00A0382100E310253042000310400012000000009088000090A70000000000001507001B0000000008006F6824C2FFFF9088000090A7000000000000150700142442FFFF248400011440FFF924A5000103E00008000010218C8300008CA2000000000000146200060000000024C6FFFC2CC20004248400041040FFF724A5000414C0FFE40000000008006F6B0000000003E000080107102300000000000000000000000000A4102530420003008060211440002F00A05821000651020080402130C6000F1140001100A03821014048218CE300048CE400088CE5000C8CE200002529FFFFAD020000AD030004AD040008AD05000C24E7001015202E
S3FF4001BE56FFF525080010000A11000162382101824021000648821120000D30C600030100282100E02021012018218C8200002463FFFFACA20000248400041460FFFB24A50004000910800102402100E2382110C000070000282100E51021904400000105182124A5000114A6FFFBA064000003E000080180102100A040210080382104C0002700C018213C0280003442000300C2302404C0001B000348831120000F000000000160282101802021012018212463FFFF88A2000098A2000324A50004A8820000B88200031460FFF92484000400091080016240210182382118C0FFE400002821010510219044000000E5182124A5000114A6FFFBA0640000AD
S3FF4001BF5003E000080180102124C6FFFF2402FFFC00C230251520FFE424C6000108006FCC000000003C0280003442000324C3000300C2302404C1FFDA0003488308006FD724C6FFFF00000000000000000000000000A4102B0080602100A058211040000F00C05021016A38210187102B1040000C2D42001011400007018A1821006A302324E7FFFF90E200002463FFFF1466FFFCA062000003E00008018010212D4200101040000B016C102510C0FFFA0000182190A2000024630001A082000024A500011466FFFB2484000103E0000801801021304200031440FFF40180402101603821014048218CE200002529FFF0AD0200008CE300042D240010AD033E
S3FF4001C04A00048CE2000800000000AD0200088CE3000C24E70010AD03000C1080FFF3250800102542FFF0000219023046000F24630001000319002CC200040163282114400012018348210120402100A0382100C020218CE200002484FFFC2C830004AD02000024E700041060FFFA2508000424C3FFFC000310822442000100021080012248213066000300A2282108006FFE01202021000000002CC20010008048211440002D008040213087000310E0000E2482000400052600004710230004260301201821A0640000246300011462FFFD000000000007102724C3FFFB24440005006230230124402130A500FF0100382110A0000500A018210005120087
S3FF4001C1440045102500021C0000621825000610C21040001C30C60007010020210040382124E7FFFFAC830000AC83000414E0FFFC24840008000210C00102382100E020212CC200041440000500804021ACE3000024E4000424C6FFFC0080402110C0000700000000000516000002160324C6FFFFA102000014C0FFFD2508000103E000080120102108007061010020218C85000027BDFFE02CA2003CAFB00018AFBF001C104000C6008080218C830004000000002C62003C104000B2006028218E030008000000002C6200181040009E006028218E0500100000000028A2000C104000892406000C8E0600140000000030C200031440003E2402006414408A
S3FF4001C23E000200C2001A0007000D000018101060003124C2076C8E04000C000000001C8000382403001D3C0240032449FAD02407FFFF240A000B240B0064240C0190080070AD24080001104800050060282100021080004910218C43000000000000008310211C400045AE02000C00A018218E0500100040202124A2FFFF1447FFF2AE02001000C0182124C6FFFF30C20003AE0600141440009AAE0A00101560000200CB001A0007000D00001010144000082405001D2462076B15800002004C001A0007000D000018101460008D00000000080070A32402000B24030190146000020043001A0007000D000020101080FFCA000000008E04000C00000000AC
S3FF4001C3381880FFCA2403001C3C0240032448FAD0240700012409000C240A0064240B019010A700140060102100051080004810218C420000000000000044102A104000100000000010A7001200051080004810218C42000024A5000100821023AE02000C10A90011AE05001014A7FFEF00402021006010210044102A1440FFF2000000008FBF001C8FB0001803E0000827BD0020006010210082102324A50001AE02000C14A9FFF1AE05001000C0182124C6000130C20003AE06001414400011AE0000101540000200CA001A0007000D00001010144000072462076D15600002004B001A0007000D0000181014600005000000008E04000C8E050010080063
S3FF4001C43270D62403001D8E04000C8E050010080070D62403001C0C0089B827A400108FA200108E0600148FA5001400C23021AE06001404A1FF72AE05001024A2000C24C3FFFFAE020010AE030014004028210800708C0060302127A400100C0089B8240600188FA200108E03000C8FA4001400621821AE03000C0481FF5AAE040008248200182463FFFFAE02000808007085AE03000C27A400100C0089B82406003C8FA200108E0300088FA4001400621821AE0300080481FF48AE0400042463FFFF2482003CAE02000408007082AE03000827A400100C0089B82406003C8FA200108E0300048FA4001400621821AE0300040481FF34AE0400002463FFFF75
S3FF4001C52C2482003CAE0200000800707DAE0300042405001C080070A32402000B27BDFFD8AFB0001400808021AFBF0024AFB30020AFB2001C0C009250AFB10018020020210C007074004098218E0500103C024003000520802442FAA0008220218E03000C8C8200002463FFFF28A500028E0C00008E0B00088E07000414A000B2006240218E09001400000000312200031040006324020064252227102C424E211040006AAE08001C292200471440006F240200462403004624060064240A019030620003144000992465076C14C000020066001A0007000D00001010144000072404016E1540000200AA001A0007000D000010101440008D000000002463B6
S3FF4001C62600010069102A1440FFEE010440212402000725030004144000020062001A0007000D000010100440007EAE020018000B1100000819C0000B32000008224000C23023008320230007118000061900000429000007388000A4282300661823004710233C044003006218218C8620D000051100006C1821004510238E11002010C0001A006290218E6200042524076C1444007A000000008E6300388E6700208E66001C006710230242202A8E65003C1080007F006510238E620000000000001040008D00C518230243102A1440000200008821008088218E020020240300010222102610430089000000002402000112220074000000008E62002035
S3FF4001C72000000000024210218FBF0024AE1100208FB300208FB2001C8FB100188FB0001403E0000827BD0028144000020122001A0007000D00001810106000482522076C25080001252227102C424E211440FF98AE08001C8FBF00242402FFFF8FB300208FB2001C8FB100188FB0001403E0000827BD00281122FFA824020007240200451122005B2403004524060064240A019030620003144000402465076C14C000020066001A0007000D00001010144000072404016E1540000200AA001A0007000D0000101014400034000000002463FFFF0123102A1440FFEE01044023312200031440004324020064144000020122001A0007000D000018101060C0
S3FF4001C81A00362522076C2402016E010240232402000725030004144000020062001A0007000D000010100441FF84AE0200182442000708007195AE020018246300012404016D0069102A1440FF61010440210800718E240200078E090014080071712522271024030190146000020043001A0007000D000020101480FF4C25222710080071DA250800010C007258000000001040FF9A24020001080071AF000000002463FFFF2404016D0123102A1440FFBA0104402308007200312200030242102A1440FF8E24020001080071B7000000008E62003C080071CA0242102124030190146000020043001A0007000D000020101080FFC62402016E2402016D3E
S3FF4001C9140800720A010240230243102A1440FF7524110001080071BF000000001620000200E51823000318238E0200000200202100431021AE0200000C00707402439021080071C5240200010000000027BDFFD8AFB00014AFBF002400808021AFB30020AFB2001C0C009250AFB10018004060212A0207B2144000882406019014C000020206001A0007000D2607F8932405FF9C2608F9BF240900642602F84E00021980000220C000832021008220212603F84F0004108000822021000318833C0240032452FB00AD900004320E00030180502100005821241F004A24110044240D00072413000124190002000078102DE200010000000014A0000200E549
S3FF4001CA0E001A0007000D000229800002110000A2C02300003812006718210064182114C000020106001A0007000D000040120000000000000000152000020209001A0007000D00684821000080108142000800000000105F005B00000000105100630000000011C0004A00000000030020218D46000C0000000028C2000214400067024440210100282101203821240400018CA20000248400010086182A00E238211460FFFB24A5000400D310230002308024E2000415A00002004D001A0007000D8D430014000020100064282304A00051000000008D43001001062021000310C0004310238C8600002442FFF9004520210086182A1460000900861023C9
S3FF4001CB0815A00002004D001B0007000D2484FFF900001012000218C000431023004420210087182100031240000319C00043102300022100008220238D4300208D45001800041100006518210044102300621821256B0001AD43001C1579FFBD254A001C8D82001C8D8300388FBF00240043102A24040001AD8200008FB30020008010218FB2001C8FB100188FB0001403E0000827BD00281200FFB6240400300800729F000000008FBF002400002021008010218FB300208FB2001C8FB100188FB0001403E0000827BD00288D44001411C0000B0000000015E0000D012410212882003C3843000101241021080072CB004318218D420014080072CB01221C
S3FF4001CC0218211200FFF52882003C080072FB3843000100001821080072CB00431821080072B824A5000701203821080072AF0000302127BDFFD0AFB50028AFB40024AFB30020AFB100180080A02100C0A821AFBF002CAFB2001CAFB000140C00925000A08821004098218E8300003C02000134425180144000020062001A0007000D000030100000381204C10010000628271440000200A2001B0007000D00C2302124E7FFFF00002812000511C000052240008220230004190000641823000311000043102300C2302100E538233C0200013442518000C2182A1460001124030E1000C230231440000200C2001B0007000D24E7000100002812000521C082
S3FF4001CCFC00051A40006418230003110000431023000221000044102300E538210046302124030E101460000200C3001A0007000D24E40004240200072405003C00E040210000301000001812AE23000800000000144000020082001A0007000D00002010AE2400180000000014A0000200C5001A0007000D00001010AE2200000000281204800046AE25000404E000483C0240033C0240032444FB60241007B2240601900800736A240700642610000132020003144000070000000014E000020207001A0007000D00001010144000062405000114C000020206001A0007000D000010102C45000100051080008210218C420000000000000102182A10608E
S3FF4001CDF6FFEB01024023010240210005110000052180008220233C0240032442FB002603F89400449021AE230014AE28001CAE2000108E440000000000000104102A1440000B250200010240182100002821010440238C64000424A500010104102A1040FFFB24630004AE2500102502000112A0002CAE22000CAE2000208FBF002C022010218FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD00302482000704E1FFBBAE2200183C0240032444FB60241007B224060190240700642610FFFF32020003144000070000000014E000020207001A0007000D00001010144000062405000114C000020206001A0007000D00001010C2
S3FF4001CEF02C45000100051080008210218C43000000000000010340210500FFEB0005110008007382000521800C0079CC000000003C0240038C4320D00000000010600013000000008E6200040000000010500005000000000C00725802002021104000882402FFFF8E620000000000001040007A000000008E8300008E62001C000000000062102A1040008800000000AE2000208E64002024020E10144000020082001A0007000D2403003C8E2600008E2800088E27000400002010000010120000000000000000146000020083001A0007000D01022023AE240008008040210000281000C5302328C2003C00001812AE26000000E338231440002EAE2743
S3FF4001CFEA000424E3000124C2FFC4AE220000AE2300040060382128E2003C1440004924E2FFC424880001AE220004AE2800082902001814400028000000008E2200188E23001C244200012463000128440007AE23001C14800002AE220018AE2000188E22000C8E240010244500012503FFE800041080AE23000802421021AE25000C8C420000000000000045182A1060000600A2102324830001AE22000C2402000C1062004AAE2300100C0079CE000000000800739C0000000004C1FFD828E2003C24E3FFFF24C2003CAE220000AE23000408007400006038210501FFF3000000008E22001C8E2300182442FFFF2463FFFFAE22001C0460003DAE230018FD
S3FF4001D0E48E22000C250300182442FFFFAE2300081440FFE6AE22000C8E220010000000002442FFFF04400035AE22001000021080024210218C4300000C0079CEAE23000C0800739C0000000004E1FFBB290200182488FFFF24E2003CAE22000408007406AE2800088E8300008E62001C000000000062102A1440000724020001AE2200208E64003C080073E224020E10080073E0AE2200208E620038000000000062102A1040FF7EAE2200208E64003C080073E224020E108E620038000000000062102A1440FFEE24020001080073E0AE2000208E220014AE20001024420001AE2200140C0079CEAE20001C0800739C000000002402000608007439AE2225
S3FF4001D1DE00188E220014000000002444FFFF308300032402000BAE2200101460000CAE24001424020064144000020082001A0007000D0000181010600005000000002403016E8E22001008007444AE23001C24030190146000020083001A0007000D000010102C420001080074882443016D0000000027BDFFE0AFA60028008030218F848014AFA7002CAFA5002427A200248C85000800403821AFBF001C0C0079E7AFA200108FBF001C0000000003E0000827BD002027BDFFE0AFA60028AFA7002C27A2002800A030218C85000800403821AFBF001C0C0079E7AFA200108FBF001C0000000003E0000827BD00200000000000000000008028218F848014B3
S3FF4001D2D8000000008C86000808007503000000008C86000808007503000000000000000000000000000000008F83801427BDFFE0AFB10018AFB00014AFBF001C008088211060000500A080218C6200380000000010400029000000008E020008000000002443FFFF0460000EAE0300088E02000000000000A05100008E0300008FBF001C24620001906300008FB10018AE020000006010218FB0001403E0000827BD00208E020018000000000062102A14400016022028218E02000000000000A05100008E0300002402000A906400000000000010820014246200018FBF001C00801821AE0200008FB10018006010218FB0001403E0000827BD00200C0006
S3FF4001D3D26BD400602021080074CC000000008F848014020030218FBF001C8FB100188FB00014080088F827BD00208F84801402003021080074FA2405000A27BDFFE0AFB20018AFB10014AFB00010AFBF001C0080882100A090211080000500C080218C820038000000001040002B000000008E020008000000002443FFFF0460000FAE0300088E02000000000000A05200008E0300008FBF001C24620001906300008FB20018AE0200008FB10014006010218FB0001003E0000827BD00208E020018000000000062102A14400017022020218E02000000000000A05200008E0300002402000A906400000000000010820016246200018FBF001C00801821F3
S3FF4001D4CCAE0200008FB20018006010218FB100148FB0001003E0000827BD00200C006BD400000000080075100000000002402821020030218FBF001C8FB200188FB100148FB00010080088F827BD00200220202102003021080075402405000A000000000000000027BDFFC0AFB000340080802100A02021AFB10038AFBF003C0C00794C00A088213C0340032463D640240700018E05000824480001AFA30024AFA7002827A3001C240700020200202127A60010AFB1001CAFA80018AFA30010AFA700140C009114AFA20020144000062402000A8FBF003C8FB100388FB0003403E0000827BD00408FBF003C2402FFFF8FB100388FB0003403E0000827BD48
S3FF4001D5C60040008028218F8480140800754C00000000000000000000000027BDFFE0AFBF001CAFB10018AFB0001400A088210C00B016008080210040282102002021022030218FBF001C8FB100188FB000140800B0DC27BD0020008028218F8480140800757800000000000000008F82801400000000AC4400AC03E00008AC4000A88F8780143C064C958CE500A834C67F2D00A600188CE200AC3C0458513484F42D000028120000000000000000004400180000201200A428210000000000460019000018122466000100C3202B00001010ACE600AC00A228213C027FFF008520213442FFFF0082102403E00008ACE400A800000000000000000000000011
S3FF4001D6C027BDFFD8AFB30020AFBF0024AFB2001CAFB10018AFB0001410800028008098218E7201480000000012400012000000008E420004000000002451FFFF062000092442000100021080024280218E020000000000000040F8092631FFFF0621FFFB2610FFFC8E520000000000001640FFF0000000008E79003C0000000013200008026020218FBF00248FB300208FB2001C8FB100188FB000140320000827BD00288FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD00288F938014080075B80000000027BDFFE0AFB1001800A088218CA50000AFB00014AFBF001C10A00003008080210C0075E20000000002002021022028218FBF8C
S3FF4001D7BA001C8FB100188FB000140800AFCC27BD00208F82801427BDFFD8AFB10018AFBF0024AFB30020AFB2001CAFB0001410820034008088218C83004C000000001060001400000000000090212413003C007210218C4500000000000010A00007000000008CB000000C00AFCC022020211600FFFC020028218E23004C265200041653FFF400721021006028210C00AFCC022020218E2500400000000010A00003000000000C00AFCC022020218E2501480000000010A00009000000002632014C10B20006000000008CB000000C00AFCC022020211650FFFC020028218E2500540000000010A00003000000000C00AFCC022020218E220038000000004A
S3FF4001D8B414400008000000008FBF00248FB300208FB2001C8FB100188FB0001403E0000827BD00288E22003C000000000040F809022020218E2502E00000000010A0FFF200000000022020218FBF00248FB300208FB2001C8FB100188FB00014080075E227BD0028000000000000000027BDFFE0AFB10018AFB00014AFBF001C008088211080000500A080218C820038000000001040004B000000008604000C000000003083FFFF306200201440003EAE0000043062000414400026306200101040006530620008144000520000000034820004A602000C8E0200100000000010400059022020219602000C00000000304200031440003D3C0540028E06BD
S3FF4001D9AE00108E0300208E05001C8E070014AE0600000060F80902202021004018219602000CAE0300043042DFFF000214000002140318600028A602000C000018218FBF001C006010218FB100188FB0001403E0000827BD00208E0500300000000010A0FFDE2602004010A20003000000000C00AFCC022020218E02003CAE0000301040FFD6AE0200048E0200388FBF001C00001821AE0200008FB10018006010218FB0001403E0000827BD00208FBF001C2403FFFF006010218FB100188FB0001403E0000827BD00200C006BD40000000008007653000000001460000A0000000034420020A602000C0800767B2403FFFF8F8480180C006E6F24A5DB24FC
S3FF4001DAA80800766B0000000034420040A602000CAE0000040800767B2403FFFF022020210C006B28020028211440FFE1000000009602000CAE0000083042FFF700022400A602000C0004240308007660AE0000180C006EEC0200282108007666000000009602000C2403000934420040AE230000A602000C0800767B2403FFFF9482000C2403000930420009104300030000102103E000080000000008006BB400000000000000000000000027BDFFE0AFA60028AFA7002C27A2002800A030218C85000400403821AFBF001C0C008398AFA200108FBF001C0000000003E0000827BD002027BDFFE0AFA60028008030218F848014AFA7002CAFA5002427A2CE
S3FF4001DBA200248C85000400403821AFBF001C0C008398AFA200108FBF001C0000000003E0000827BD002000000000000000002CA6000100063040080076F8240704008F83801427BDFFD8AFB30020AFB2001CAFB10018AFB00014AFBF00240080982100A0802100C090211060000500E088218C620038000000001040000C000000002E4200031440000D2405FFFF8FBF002400A010218FB300208FB2001C8FB100188FB0001403E0000827BD00280C006BD400602021080077092E4200030620FFF3000000008F8480140C006B28026028218663000CAE6000043062008014400033AE6000182402FF7C006210242403000212430035A662000C1200001159
S3FF4001DC9C00000000124000233C0240022402000112420018000000009663000C00000000306200081040000530620003104000320220202100002021AE6400080800770B000028211620000200000000241104000C00244C022020211040002C004080219662000C000000003442008008007728A662000C9662000C00000000344200011200001FA662000C00111023AE6200183C0240028F8380142442B0B8AC62003CAE700010AE7000000800772DAE7100148F8480148E6500100C00AFCC000000008663000C080077222402FF7C000028219662000C266400433442000224030001AE630014A662000CAE640010AE6000080800770BAE6400000800F5
S3FF4001DD967736AE640008000010210800774BAE6200180C00244C2404040014400003004080210800775B2405FFFF0800773F24110400000000000000000084A5000E0800555D0000000027BDFFE8AFB0001000A0802184A5000EAFBF00140C00B07D00000000004018212402FFFF1062000A000000009602000C8FBF001434421000A602000CAE030050006010218FB0001003E0000827BD00189602000C8FBF00143042EFFFA602000C006010218FB0001003E0000827BD001884A3000C27BDFFD830620100AFB30020AFB2001CAFB10018AFB00014AFBF002400A0802100C0982100E09021104000060080882184A5000E000030210C00B07D2407000275
S3FF4001DE908603000C2402EFFF006210248605000EA602000C0220202102603021024038218FBF00248FB300208FB2001C8FB100188FB000140800B0D827BD002827BDFFE8AFB0001000A0802184A5000EAFBF00140C00B0CD0000000004400009004018218E0200508FBF001400431021AE020050006010218FB0001003E0000827BD00189602000C8FBF00143042EFFFA602000C006010218FB0001003E0000827BD001800A4102530420001008038211440001300A0302190820000080077D524E700020060102190C30000104000150000000090E4FFFF144300120000000090C200011080000424C6000290E300001082FFF424E7000203E00008008262
S3FF4001DF8A102300003021008610219042000000A61821906300001040000324C600011043FFF90000000003E0000800431023000000000000000000A410253042000310400009008048210080182180A2000024A50001A06200001440FFFC2463000103E00008012010218CA700003C02FEFE3448FEFF0007202700E810213C0380800082202434638080008320241480000C0120302100602021ACC7000024A500048CA70000000000000007102700E8182100431024004410241040FFF724C60004080077F500C01821008028218F848014080078180000000027BDFFE0AFB000100080802100A02021AFBF001CAFB20018AFB100140C00794C00A09021A8
S3FF4001E08424510001020020210C00B08402202821104000050040802102402821022030210C006F80004020218FBF001C020010218FB200188FB100148FB0001003E0000827BD0020000000000000000027BDFFE82C820087AFBF001414400009008028210C0079D000A020211040010C000000008FBF00140000000003E0000827BD00183C0340030004108024630320006218218C6400000000000000800008000000003C0240030800783D2442FE303C0240030800783D244202743C0240030800783D244202A83C0240030800783D2442028C3C0240030800783D2442FFDC3C0240030800783D244202E83C0240030800783D2442FC483C02400308007E
S3FF4001E17E783D2442FC103C0240030800783D2442FD303C0240030800783D2442FE043C0240030800783D2442FD203C0240030800783D244202FC3C0240030800783D2442FD743C0240030800783D2442FEE43C0240030800783D244202503C0240030800783D244202383C0240030800783D244202243C0240030800783D244202003C0240030800783D244201E83C0240030800783D244201C83C0240030800783D244201A83C0240030800783D244201783C0240030800783D2442015C3C0240030800783D244202C43C0240030800783D244201443C0240030800783D244201283C0240030800783D244201143C0240030800783D244201043C02400318
S3FF4001E2780800783D244200E83C0240030800783D244200C03C0240030800783D244200803C0240030800783D244200603C0240030800783D244200383C0240030800783D244200103C0240030800783D244200043C0240030800783D2442FFF03C0240030800783D2442FFCC3C0240030800783D2442FFB83C0240030800783D2442FFA83C0240030800783D2442FF983C0240030800783D2442FF803C0240030800783D2442FF6C3C0240030800783D2442FF603C0240030800783D2442FF403C0240030800783D2442FF2C3C0240030800783D2442FF143C0240030800783D2442FF043C0240030800783D2442FEFC3C0240030800783D2442FED83C0218
S3FF4001E37240030800783D2442FEC43C0240030800783D2442FEA83C0240030800783D2442FE943C0240030800783D2442FE843C0240030800783D2442FE783C0240030800783D2442FE683C0240030800783D2442FE503C0240030800783D2442FE403C0240030800783D2442FE183C0240030800783D2442FDF43C0240030800783D2442FDE43C0240030800783D2442FDCC3C0240030800783D2442FDB83C0240030800783D2442FD983C0240030800783D2442FD603C0240030800783D2442FD503C0240030800783D2442FD103C0240030800783D2442FD003C0240030800783D2442FCEC3C0240030800783D2442FCE03C0240030800783D2442FCC819
S3FF4001E46C3C0240030800783D2442FCB03C0240030800783D2442FCA43C0240030800783D2442FC903C0240030800783D2442FC7C3C0240030800783D2442FC683C0240030800783D2442FC3C3C0240030800783D2442FC2C3C0240030800783D2442FBFC3C0240030800783D2442FBE83C0240030800783D2442FBCC3C0240030800783D2442FBC03C0240030800783D2442FBA83C0240030800783D2442FB983C0240030800783D2442FB703C0240030800783D2442FB8C3C0240030800783D2442D474000000002482000190830000000000001460FFFD2484000103E0000800821023000000002CC20004144000140080382130CA000300CA182390A275
S3FF4001E566000090A8000190A6000290A900032463FFFC24A5000410400021A0E2000011000021A0E8000110C00021A0E6000211200021A0E900031460FFF124E700040140302100E6302110E6001324E3000190A200000000000010400009A0E2000024A5000110C3000C0000000090A2000024A50001A06200001440FFFA2463000110C3000500000000A06000002463000114C3FFFD0000000003E00008008010212463000124E7FFFF2463000124E7FFFF2463000124E7FFFF006A18211060FFF624E8000431020003104000082C620010A10000002463FFFF250800011060FFEE310200031440FFFA2C62001014400010010028210060382124E7FFF0A4
S3FF4001E66024A500102CE20010ACA0FFF0ACA0FFF4ACA0FFF81040FFF9ACA0FFFC2463FFF00003110224420001000211003063000F010240212C6200081440000500602821AD000000AD0000042465FFF8250800082CA20004144000052CA20002AD00000024A5FFFC250800042CA200021440000400000000A500000024A5FFFE2508000210A0FFC600000000A100000003E00008008010210000000000000000000000003C0240038C431860000000000064182190620000000000003042000210400002000000002484FFE003E000080080102103E000080000000003E000080000000003E000080000102100000000000000008CC2000827BDFFE8AFB0BC
S3FF4001E75A0010AFBF00141440000600C080218FBF00148FB00010ACC0000403E0000827BD00180C009114000000008FBF0014AE000004AE0000088FB0001003E0000827BD001827BDFA58AFB60598AFB00580AFBF05A4AFBE05A0AFB7059CAFB50594AFB40590AFB3058CAFB20588AFB10584AFA505AC00C0802100E0B0210C009264AFA405A88C42000000000000AFA205508FA205A80000000010400005000000008C4200380000000010400226000000008FA305AC000000008464000C000000003083FFFF3062000810400529000000008FA505AC000000008CA200100000000010400523000000003063001A2402000A106201E527A60080AFA60578A0
S3FF4001E85402009821AFA6004CAFA00054AFA00050AFA00570AFA00574AFA00558AFA00548AFA00538AFA0054482630000000000001060017400C090212402002510620171000000000260802108007A2B2403002510430006000000002610000182020000000000001440FFFA021388231220001200000000AE5100048FA200508FA30054244200010071182128440008AFA30054AE53000010800191AFA20050265200088FA205580000000000511021AFA205588202000000000000104006572405002AA3A000288202000126100001AFB60528AFB00524AFA0055CAFA005542416FFFF2408006C24090068240A002B240B00208FA40524AFA20560248407
S3FF4001E94E0001AFA405248FA605600000000024C3FFE02C62005B1440000C000310808FA605600000000010C0063D24170001A3A60058A3A0002827BE0058AFB7053CAFA0054008007AA6AFA005343C03400324630590006210218C4300000000000000600008000000008FA6055C0000000034C60010AFA6055C8FA3055C0000000030620020144001CD2403FFF88FA5055C0000000030A20010104005490000A0218FA60528000000008CD5000024D1000424030001A3A0002806C000052402FF7F8FA5055C0000000000A22824AFA5055C029510251440035D2402000116C0035B000000001460046927BE00808FA5055C0000000030A2000110400005C5
S3FF4001EA480000B82124020030A3A2007F27BE007F2417000102F6102A10400002AFB7053CAFB6053CAFB10528AFB60540AFA0053483A200280000000010400005000000008FA2053C0000000024420001AFA2053C8FA3055C000000003063000210600005AFA305688FA4053C0000000024840002AFA4053C8FA5055C0000000030A5008414A0002FAFA505648FA605548FA2053C0000000000C280231A0000292A020011144006613C0240032451070C2413001008007AC427B6004C2610FFF02A0200111440001426520008AE5300048FA200508FA30054244200012463001028440008AFA30054AE5100001480FFF3AFA200508FA405A88FA505AC0C00FD
S3FF4001EB4279D402C03021144001072610FFF02A0200111040FFEE27B20080AE5000048FA200508FA30054244200010070182128440008AE510000AFA300541080045DAFA200502652000883A20028000000001040000D24020001AE4200048FA400508FA30054248400012463000127A2002828850008AE420000AFA3005410A003D8AFA40050265200088FA30568000000001060000D24020002AE4200048FA400508FA30054248400012463000227A2002C28850008AE420000AFA3005410A003D0AFA40050265200088FA40564240200801082034F000000008FA2054000000000005780231A0000292A020011144005503C024003245106FC241300105A
S3FF4001EC3C08007B1527B6004C2610FFF02A0200111440001426520008AE5300048FA200508FA30054244200012463001028440008AFA30054AE5100001480FFF3AFA200508FA405A88FA505AC0C0079D402C03021144000B62610FFF02A0200111040FFEE27B20080AE5000048FA200508FA30054244200010070182128440008AE510000AFA300541080038FAFA20050265200088FA3055C0000000030620100144002CC00000000AE5700048FA200508FA40054244200010097182128440008AE5E0000AFA300541080029DAFA20050264500088FA6055C0000000030C2000410400034000000008FA205548FA3053C00000000004380231A00002E2A023A
S3FF4001ED360011144006723C0240032451070C2412001008007B5827B3004C2610FFF02A0200111440001424A50008ACB200048FA200508FA30054244200012463001028440008AFA30054ACB100001480FFF3AFA200508FA405A88FA505AC0C0079D402603021144000732610FFF02A0200111040FFEE27A50080ACB000048FA200508FA40054244200010090202128430008ACB10000AFA4005414600008AFA200508FA405A88FA505AC0C0079D427A6004C14400060000000008FA400548FA3053C8FA50554000000000065102A104000020000000000A018218FA605580000000000C330211480004DAFA605588FA205340000000010400331AFA0005016
S3FF4001EE308FA405A80C00AFCC004028218FB605288FB3052427B2008082630000000000001460FE8E000000008262000008007A43026080218FA5055C0000000034A50010AFA5055C8FA6055C0000000030C2002014400096000000008FA4055C0000000030820010144003C130C20040144004C60000A0218FA3055C0000000030620200104003BA000000008FA405280000000090950003249100040000182108007A81A3A000288FA5055C0000000034A50010AFA5055C8FA6055C0000000030C200201440006F000000008FA4055C0000000030820010104003F130C200408FA50528000000008CA2000024B100040002A7C3068001C20040A8210800F2
S3FF4001EF2A7A81240300018FA405A88FA505AC0C0079D427A6004C1440001027B2008008007A3D000000008FA405A88FA505AC0C0079D427A6004C1040FFAF000000008FA305340000000010600004000000008FA405A80C00AFCC006028218FA405AC000000009482000C00000000304200401440000E000000008FBF05A48FA205588FBE05A08FB7059C8FB605988FB505948FB405908FB3058C8FB205888FB105848FB0058003E0000827BD05A82405FFFF08007BE8AFA505588FA305AC000000008462000E000000000440FE17000000002402FFFD9469000E8C6A001C8C6B00240082102427B100C08FA405A827A3011C240804000200302102C0382173
S3FF4001F02402202821A7A200CCA7A900CEAFAA00DCAFAB00E4AFA300D0AFA800D4AFA300C0AFA800C80C0079E7AFA000D804400006AFA205588FA405A80C006B2802202821144007552404FFFF97A200CC00000000304200401040FFC9000000008FA505AC0000000094A2000C000000003442004008007BE8A4A2000C8FA405A80C006BD40000000008007A02000000008FA3052800000000246200072403FFF8004310248C5400008C5500040681FF962451000808007D8C001530238FA3052800000000246200072403FFF8004310248C5500048C540000245100080000182108007A81A3A000288FA405280000000024820007004310248C5500048C54AE
S3FF4001F11E0000245100082403000108007A81A3A0002883A2002800000000144000D8000000008FA705288FA30524A3AB00288062000008007A51AFA705288FA4055C8FA70528348400018FA60524AFA4055C80C2000008007A51AFA705288FA305248FA705288062000008007A51AFA705288FA205288FA305288C4200002467000404400481AFA205548FA40524000000008082000008007A51AFA70528A3AA00288FA7052808007C69000000008FA705288FA2055C8FA3052434420004AFA2055C8062000008007A51AFA705288FA605248FA2052480C6000024420001AFA6056010C506F1AFA2052424C4FFD02C82000A1040058200003021000610C0DC
S3FF4001F218000618408FA605240062182180C6000000000000AFA605608FA20560006430218FA305242444FFD0246300012C82000A1440FFF2AFA3052404C1FDC000C0B02108007A552416FFFF8FA4055C8FA70528348400808FA60524AFA4055C80C2000008007A51AFA705288FA20560000018212444FFD08FA60524000310C080C600000003184000621821AFA605600083182124C4FFD08FA605242C82000A24C600011440FFF4AFA6052408007A55AFA305548FA3055C0000000030620008104002F12403FFF88FA405280000000024820007004310248C450004244600088C420000AFA50574AFA60528AFA205708FA405708FA505740C009838000031
S3FF4001F3120000104003FB000038218FA405708FA505740C00ACF8000030210440044E2402002D8FA605600000000028C200481440038D3C0240033C024003245E05448FA3055C2402FF7F0062182424170003AFA3055CAFA00540AFA0053408007A9EAFB7053C8FA40528241700018C82000024840004A3A00028A3A20058AFA4052827BE0058AFB7053CAFA0054008007AA6AFA005348FA2055C8FA70528344200088FA30524AFA2055C8062000008007A51AFA705288FA20528A3A000288C5E00002445000413C004CDAFA5052806C0009E03C02021000028210C0092E402C030211040000500000000005EB82302D7102A1040009800000000AFB6053C36
S3FF4001F40C02C0B821AFA0054008007A9EAFA005348FA4055C3C034003246305543082002010400029AFA305388FA505282403FFF824A20007004310248C5500048C540000245100088FA3055C0000000030620001104001E002951025104001DE240200308FA4056034630002AFA3055CA3A2002CA3A4002D2403000208007A81A3A000288FA4055C0000000034840020AFA4055C8FA705288FA605240000000080C2000008007A51AFA705283C0440032484EC68AFA405388FA4055C00000000308200201440FFD9000000008FA6055C0000000030C2001014400235000000008FA3055C0000000030620040144003370000A0218FA5055C0000000030A2B3
S3FF4001F50602001040022B000000008FA605280000000090D5000308007D1624D100048FA60528240200308CD50000A3A2002C8FA2055C240300783C044003A3A3002D344200022403007824840554AFA305600000A021AFA2055C24D1000424030002AFA4053808007A81A3A000288FA405240000000080820000000000001048037F248400018FA3055C8FA7052834630010AFA3055C08007A51AFA705288FA6055C0000000030C200201040022C30C200108FA205288FA405588C4300008FA50528000417C3AC620000AC6400048FB3052408007B9224B600048FA405240000000080820000000000001049035B248400018FA3055C8FA70528346300401E
S3FF4001F600AFA3055C08007A51AFA705288FA2055C8FA70528344200208FA30524AFA2055C8062000008007A51AFA7052800153023001420230006282B00852023008010212404002DA3A4002800C0A8210040A02108007A81240300010C00794C03C020210040B82106E1FF6AAFB7053CAFA0053CAFA0054008007A9EAFA005348FA3054400000000286200021440010224020001AE4200048FA300508FA20054246300012442000128640008AFA20054AE5E0000108001CEAFA300502645000824020001ACA200048FA300508FA20054246300018FA605502442000128640008AFA20054ACA60000108001B9AFA3005024B200088FA405708FA5057400006A
S3FF4001F6FA38210C00AC88000030211040018327C400018FA20544000000002445FFFFAE4500048FA300508FA20054246300010045102128650008AE440000AFA2005410A000E5AFA30050265200088FA405488FA50548AE4400048FA300508FA40054246300010085202127A2003C28650008AE420000AFA4005414A0FD65AFA300508FA405A88FA505AC0C0079D427A6004C1440FDF727A5008008007B4300000000106200F100000000146000AD2402000227BE0080001528C20014274000852025001430C232A5000727DEFFFF24A5003000C410250080A82100C0A0211440FFF5A3C500008FA6055C0000000030C20001104000982402003010A202F981
S3FF4001F7F40000000027DEFFFFA3C200008FA4057808007A97009EB8238FA4056000000000288200661440FF98000038218FA405708FA505740C00AC6000003021144000EE24020001AE4200048FA300508FA40054246300013C024003248400012442F0E828650008AE420000AFA4005410A001F3AFA30050264500088FA200308FA60544000000000046102A14400006240200018FA3055C00000000306200011040FD1E24020001ACA200048FA200508FA40054244200018FA605502483000128440008AFA30054ACA60000108002BEAFA2005024A500088FA20544000000002450FFFF1A00FD0D2A0200111440019C3C024003245106FC24120010080008
S3FF4001F8EE7E4227B3004C24A500082610FFF02A0200111440019400000000ACB200048FA200508FA30054244200012463001028440008AFA30054ACB100001480FFF2AFA200508FA405A88FA505AC0C0079D4026030211440FD8927A5008008007E3F2610FFF08FA505548FA6053C0000000000A680231A00FCAD2A020011144003963C024003245106FC2413001008007E6427B6004C2610FFF02A0200111440001426520008AE5300048FA200508FA30054244200012463001028440008AFA30054AE5100001480FFF3AFA200508FA405A88FA505AC0C0079D402C030211440FD672610FFF02A0200111040FFEE27B20080AE5000048FA200508FA30054E9
S3FF4001F9E8244200010070182128440008AE510000AFA3005410800103AFA2005008007B062652000827BE0080001431020015110200C0202100141F008FA605380062182532A2000F00C210219046000027DEFFFF008310250060A8210080A0211440FFF2A3C600008FA2057808007A97005EB8231062FFEC3C0340030C00794C246405700040B8210056102A10400002AFB7053CAFB6053C3C044003AFB10528AFB60540249E057008007A9EAFA005348FA4055C00000000308200011440FEFB24020001AE4200048FA300508FA20054246300012442000128640008AE5E0000AFA200541480FF1DAFA300508FA405A88FA505AC0C0079D427A6004C14408A
S3FF4001FAE2FD2127B2008008007DD1000000008FB605288FB3052408007B9227B200808FA405A88FA505AC0C0079D427A6004C1440FD1527B2008008007B33000000008FA405A88FA505AC0C0079D427A6004C1440FD0D27B2008008007AF2000000008FA405A88FA505AC0C0079D427A6004C1440FD0527B2008008007B02000000001680000427B000802EA2000A1440001526A2003002A02821028020212407000A0C00A71000003021246300302610FFFF02A02821028020212407000A000030210C00A59CA20300000040A0211680FFF10060A8212C62000A1040FFEF02A0282126A20030A202FFFF8FA50578261EFFFF08007A9700BEB82308007A9755
S3FF4001FBDC0000B8212403000208007A81A3A000288FA400300000000018800116000000008FA30544000000000083102A144000DE00000000AE4300048FA200508FA40054244200010083182128440008AE5E0000AFA300541080017EAFA20050264500088FA200308FA6054400000000004680231A00019B2A020011144001F73C024003245106FC2412001008007F2027B3004C24A500082610FFF02A020011144001EF00000000ACB200048FA200508FA30054244200012463001028440008AFA30054ACB100001480FFF2AFA200508FA405A88FA505AC0C0079D4026030211440FCAB27A5008008007F1D2610FFF08FA405A88FA505AC0C008954000077
S3FF4001FCD600001440FCBF2405FFFF8FA605AC0000000084C4000C08007A103083FFFF8FA405A88FA505AC0C0079D427A6004C1440FC9827B2008008007AE2000000008FA30544000000002470FFFF1A00FE882A020011144000403C024003245106FC2413001008007F5527B6004C265200082610FFF02A0200111440003800000000AE5300048FA200508FA30054244200012463001028440008AFA30054AE5100001480FFF2AFA200508FA405A88FA505AC0C0079D402C030211440FC7627B2008008007F522610FFF08FA505280000A0218CB5000024B100040000182108007A81A3A000288FA205280000A0218C55000008007D14245100048FA405A8C2
S3FF4001FDD08FA505AC0C0079D427A6004C1440FC6227B2008008007DBC000000008FA405A88FA505AC0C0079D427A6004C1440FC5A27A5008008007DB0240200018FA405A88FA505AC0C0079D427A6004C1440FC5227B2008008007B0600000000245106FCAE5000048FA200508FA30054244200010070182128440008AE510000AFA300541480FE3BAFA2005008007EB400000000144000C7000000008FA5055C0000000030A2004010400246000000008FA605288FA305588CC2000000000000A44300008FB3052408007B9224D600048FA3052800000000246200072403FFF8004310248C4400048C45000024420008AFA40574AFA5057008007CC1AFA2FD
S3FF4001FECA0528144000C6000000008FA4055C000000003082020010400222000000008FA505280000000080A2000324B100040002A7C30681FC0A0040A82108007D8C001530238FA3055C0000000030620040144000A1240300018FA5055C0000000030A2020010400208000000008FA605280000000090D5000324D100042403000108007A81A3A00028245106FCACB000048FA200508FA40054244200010090182128440008ACB10000AFA300541080FE00AFA2005008007B4324A50008AE4400048FA200508FA30054244200010064182128440008AFA30054AE5E000010800099AFA2005026450008240200018FB00030ACA200048FA200548FA30050DD
S3FF4001FFC42442000124630001AFA200548FA2055028640008ACA20000108001D4AFA3005024A700088FA300308FA405448FA6054400831023ACE200048FA400548FA20050008318232442000103D028210066182128440008ACE50000AFA300541080FDD5AFA2005008007B4324E500088FA405A88FA505AC0C0079D427A6004C1440FBC927A5008008007E1B00000000AE4200048FA300508FA40054246300013C024003248400012442F0E828650008AE420000AFA4005410A00074AFA30050264500088FA20030000000001440000A240200018FA305440000000014600006000000008FA4055C00000000308200011040FB1624020001ACA200048FA359
S3FF400200BE00508FA20054246300018FA605502442000128640008AFA20054ACA60000108001BBAFA3005024A500088FA2003000000000000280231A0000C12A020011144000DE3C024003245106FC241200100800804A27B3004C24A500082610FFF02A020011144000D600000000ACB200048FA200508FA30054244200012463001028440008AFA30054ACB100001480FFF2AFA200508FA405A88FA505AC0C0079D4026030211440FB8127A50080080080472610FFF008007B28245106FC08007CD4245E05488FA305288FA405588C62000000000000AC4400008FB3052408007B92247600048FA4052800000000949500022491000408007A81A3A00028BA
S3FF400201B88FA205280000000094550002245100040000182108007A81A3A000288FA40528000000009495000208007D14249100048FA305280000000084620002247100040002A7C30681FB4A0040A82108007D8C001530238FA405A88FA505AC0C0079D427A6004C1440FB5227A5008008007FED240200018FA405A88FA505AC0C0079D427A6004C1440FB4A27A5008008007F0F000000008FA405A88FA505AC0C0079D427A6004C1440FB4227A5008008008021000000008FA2005400000000144000030000000008007BE1AFA000508FA405A88FA505AC0C0079D427A6004C1440FB3B0000000008007BE1AFA000508FA405A88FA505AC0C0079D427A669
S3FF400202B2004C1440FB2C27A500808FA3055C00000000306200011040FA9024020001ACA200048FA200508FA40054244200018FA605502483000128440008AFA30054ACA600001080FD20AFA2005008007B4324A500088FA405708FA505740C0098480000000010400065240200618FA40560000000002882004814400130000000003C1E400327DE054C8FA5055C2402FF7F00A2282424170003AFA5055CAFA00540AFA0053408007A9EAFB7053C8FA6055C0000000034C602008FA70528AFA40524AFA6055C8082000008007A51AFA705288FA6055C0000000034C600208FA70528AFA40524AFA6055C8082000008007A51AFA705288FA605540000000066
S3FF400203AC0006302308007C73AFA605548FA405A88FA505AC0C0079D427A6004C1440FAE727A5008008007E32000000008FA3057808007A97007EB8238FA405A88FA505AC0C0079D427A6004C1440FADC27A500808FA205448FA60544ACA200048FA200508FA40054244200010086182128440008ACBE0000AFA300541080FCD4AFA2005008007B4324A50008245106FCACB000048FA200508FA40054244200010090182128440008ACB10000AFA300541080FF92AFA20050080080AF24A5000808007CCDA3A2002808007AD72451070C245106FCACB000048FA200508FA30054244200010070182128440008ACB10000AFA300541080FFD1AFA200500800E2
S3FF400204A680FF24A500088FA605600000000010C201572402004110C201B12402FFFF12C201AB240200678FA505600000000010A200052402004710A200030260F0210800813FAFA0053416C0FFFD0260F02124160001AFA005348FA6055C8FA2057034C6010004400193AFA6055C8FB7057400409821AFA0054C8FA505602402006110A200CE2402004110A200CC240200668FA605600000000010C201B82402004610C2019A2402006510C2022C2402004510C2000226D1000102C088212402000227A300308FA405A8AFA20010AFA3001827A2003427A300380260302102E03821AFA30020AFA2001C0C008A67AFB100148FA305600040F02124020067CF
S3FF400205A014620213240200478FA4055C00000000308200011440018D000000008FA3003800000000007E1823AFA305448FA605602402006710C200922402004710C20090240200468FA505600000000010A201BD28A2006614400019000000008FA300308FA605602402006610C201C6000000008FA60544000000000066102A1440019E0060B8218FA3055C0000000030620001144000320000000006E001C6AFB7053C8FA5054C0000000010A0007E2402002DA3A2002808007AA2AFA005408FA300308FA605602465FFFF2402006110C20183AFA500302402004110C20180000000008FA305600000000000031600000216030000182104A0019FA3A20D
S3FF4002069A003C2402002BA3A2003D28A2000A104000E627A6004B106001B92402003027A3003E27A4003F24A20030A062000027A2003C00821023AFA205488FA205448FA4054828430002106000060082B8218FA5055C0000000030A200011040FFD0000000000800818E26F7000108007B6B2451070C2EC20007144000393C1E40032417000627DE0568AFB7053CAFA0054008007AA6AFA005348FA405A88FA505AC0C0079D427A6004C1440FA0927A7008008007FFA000000008FA20528000000008C550000245100042403000108007A81A3A000288FA60528000000008CC2000024D100040002A7C30681F9E90040A82108007D8C001530238FA4055CA3
S3FF4002079400000000308202001040FE78000000008FA505288FA605588CA2000000000000A04600008FB3052408007B9224B6000408007E77245106FC8FA405A88FA505AC0C0079D427A6004C1440F9E227A500800800803A000000003C1E4003080080CE27DE055006C0016EAFB6053C3C1E400302C0B82127DE0568AFA0054008007AA6AFA0053408007A550000B0218FA30030000000002862FFFD1440007402C3102A144000722402006708008180AFA2056006E00003AFB7053C08007A9EAFA00540AFA0053C08007A9EAFA005400260202102E028210C00980427A60030004020213C024003244207208C4700048C4600000C00AB9400602821004076
S3FF4002088E8021006028210200202100003821000030210C00AC88006088211440000224020001AFA200308FA30560240200611062013A3C0540033C0440032484EC68AFA4053003C0982108008238AFB6052002E098213C024003244207288C4700048C460000022028210C00AB94020020210040802100602821020020210C000DD400608821004020210C000D9CAFA2052C0040302102202821020020210C00AB5600603821006088218FA4052C8FA305308FA5052000408021006410219043000024A5FFFF2406FFFFAFA505202677000110A60058A26300000220282102002021000038210C00AC88000030211440FFD83C024003AFA2056C8FA3056C81
S3FF40020988020020218C6707348C660730022028210C00AC6002E0802114400006000000008FA5052C0000000030A200011440004D000000008FA40520000000000480000B2482FFFF2403FFFE240400302442FFFFA2E400001443FFFD26F700018FA505200000000024A200010202B82102FEB82308008173AFB705448FA40560000000002484FFFE08008198AFA4056024020030A3A2002C24030078A3A3002D8FA3055C2AC200283463000210400058AFA3055C27BE00580800813FAFA0053400C020212407000A14E0000200A7001A0007000D2484FFFF00001812006028212863000A00001010244200301060FFF6A082000024A300302482FFFF000374
S3FF40020A821E0000031E030046102B104000E7A083FFFF00802821080082AA27A4003E80A3000024A5000100A6102BA08300001440FFFB24840001080081B327A2003C3C034003246307308C6700048C6600003C02400302202821020020210C00ACB0AFA2056C1840FFA7000000008FA60530AFB300388263000080C2000F000000001443000C24C4000F24050030A26500008FA30038000000002473FFFFAFB300388063FFFF80820000000000001043FFF7000000002402003910620092246200010002160000021603A262000002FEB82308008173AFB705448FA305703C0280002404002D006298268FB7057408008147AFA4054C0260F0212416000648
S3FF40020B7C0800813FAFA0053424020030A3A2002C08008288240300588FA405A80C00B08426C5000110400099AFA205340800813F0040F0212402000327A300308FA405A8AFA20010AFA3001827A2003427A300380260302102E03821AFA2001CAFA300200C008A67AFB600140040F02102C088218FA505602402004610A2001A03D180210260202102E02821000038210C00AC6000003021144000270200182108008171AFB000382402000327A300308FA405A8AFA20010AFA3001827A2003427A300380260302102E03821AFA2001CAFA300200C008A67AFB600140040F0210056802102C0882183C300002402003010620021026020218FA3003008000F
S3FF40020C7682FF020380218FA30560000000002462000F0002160000021603080081A5240300011860006224020002240200018FA405440800818E0044B8218FA40038000000000090102B1040FE410080182124030030A0830000248400010090102B1440FFFCAFA400380800817100801821240600660800817FAFA6056002E02821000038210C00AC88000030211040FFDB24020001005110230800831CAFA200302402002DA3A2003D080081A9000528231860000D0060B82116C00006246200018FA4055C00000000308200011040000E246200010056B82106E1FE3CAFB7053C08008190AFA0053C16C0003526D700028FA5055C0000000030A2000174
S3FF40020D7014400030000000002417000108008190AFB7053C8FA30530000000008062000A080082D3A2620000A3A2003E27A3003F080081B027A4004024A5055408008234AFA5053008008200AFA0053C08007C1BAFA405588FA30528000000008C7600000000000006C1F8F3246700048FA605242416FFFF80C2000008007A51AFA705281062FDED00000000080082FB000000000800815826D100018FA405AC000000009482000C000000003442004008007BE1A482000C0800832900431023080081B227A4003E06E1FE02AFB7053C08008190AFA0053C0080102100A018218F84801400C0382100402821080079E70060302127BDFD18AFBE02E0AFB651
S3FF40020E6A02D8AFB202C8AFB102C4AFB002C0AFBF02E4AFB702DCAFB502D4AFB402D0AFB302CC0080F02100A08021AFA702F400C09021AFA002AC00008821AFA002A8AFA002A43C164003824400000000000010800027AFA400188EC518600000000000A418219062000000000000304200081040002C265200018E040004000000001880001303C020218E0500008EC2186090A4000000000000004410219043000000000000306300081060FFE724A200018E040004000000002484FFFFAE020000263100011C80FFF0AE04000403C020210C007648020028211040FFEB0000000082440000000000001480FFDBAFA400188FBF02E48FA202AC8FBE02E08D
S3FF40020F648FB702DC8FB602D88FB502D48FB402D08FB302CC8FB202C88FB102C48FB002C003E0000827BD02E824020025108200220000A8218E020004000000001840000E03C020218E0500008243FFFF90A20000000000001443FFE724A300018E040004000000002482FFFFAE020004AE030000080083AC263100010C007648020028211040FFF0000000008FA402AC0000000010800006000000009602000C00000000304200401040FFD3000000002405FFFF080083D6AFA502AC8244000000009821240600682407006C308300FF2C62007B1440000E2652000100A41821906200000000000030420001104000023C0540023673000124A57D00240245
S3FF4002105E000AAFA502A42414000308008426AFA202A8000310803C03400324630740006210218C43000000000000006000080000000036730001241400028E040004000000001880028C03C0202132620040104000102E8200051040FF7E3C0340032463092C00141080006210218C43000000000000006000080000000003C020210C007648020028211440FFC100000000263100018E0500008EC2186090A4000000000000004410219043000000000000306300081060FFE82E8200058E040004000000002482FFFF1840FFECAE02000424A20001AE0200000800843C2631000126A2FFFF2C42015D1040020B26A7FEA316A0040E3677078027A201249F
S3FF40021158AFA202B000409821AFA0029CAFA00294AFA00298AFA0028C32E201001040001532E2001032E204001440034C240200652673FFFF826500000000000010A200092631FFFF2402004510A2000703C020212673FFFF0C00A17002003021826500002631FFFF03C020210C00A1700200302132E200101440FF3832E3060024020400106203BFA26000008FA4028C00000000148003A6000030218FA502B003C020210C00988C000030210040A02132E20001104003200060A8218FA302F4000000008C62000024730004AC550004AC5400008FA302ACAFB302F424630001080083ACAFA302AC26A2FFFF2C42015D1040010226B7FEA316A0033D36732B
S3FF400212520D8027A50124AFA502B000A0A021AFA002A0326201001040000A326200108FA302B0000000000074102B1440031D03C020218FA402B0000000001284FF32326200101040033703C020218FA302B08FA402A00223102300441021080083AC0282882116A00002326200012415FFFF104002AA32620010327300101660025EAFB302908FA402F4000000008C97000024840004AFA402F4000098213C1440038E0400008EC31860908700000000000000671821906200000000000030420008144000350000000012A00033000000008E8218C0000000001262FF30248300018E02000427A500182442FFFFAE02000400B31021AE03000027A4001CC3
S3FF4002134C0000282124060008A047010C0C0070382673000127A2001C03C0202102E0282127A60124026038210C00929CAFA200102403FFFF1043FF1A00000000144002312404FFFEAEE00000000020210C009254000000001440037F000000008FA20290023388211440000226B5FFFF26F70004000098218E040004000000001C80FFC903C020210C007648020028211040FFC5000000001660FF02000000008FA30290000000001460FEAF000000008FA402ACAEE0000024840001080083ACAFA402AC16A00002326200012415000110400102326200103277001016E000060000A0218FA402F4000000008C94000024840004AFA402F4000098213C05C9
S3FF4002144640038CA218C0000000001262FEE6240600088E0300008E02000490670000246400012442FFFF27A30018AE02000400731021AE0400000000282127A4001CA047010C0C0070382673000127A2001C03C020210280282127A60124026038210C00929CAFA200102403FFFF1043FECE00000000144000D62404FFFE16E0000200000000AE8000000233882116E0000226B5FFFF26940004000098218E04000400000000188000C203C0202116A0FFD53C05400316E0FE6D000000008FA502AC0000000024A50001080083ACAFA502AC16A00002326200102415FFFF1040001E27B70018000098218E0500000000000090A200000000000002E210217D
S3FF400215408043000C000000001060001024A200018E040004000000002483FFFF26730001AE02000012B30007AE0300041C60FFEF03C020210C007648020028211040FFEB00000000080083AC023388211260FE7202338821080083AC000000008FA502F4000000008CB30000000000000260A0218E0500000000000090A200000000000002E210218043000C000000001060001524A400018E020004000000002442FFFFAE02000490A3000026B5FFFFA2830000AE04000012A0000B269400018E020004000000001C40FFEA03C020210C007648020028211040FFE6000000001274FE7300000000029398231260FE4B00000000A28000008FA202F48FA356
S3FF4002163A02AC2442000424630001AFA202F408008561AFA302AC36730D802415015D27A40124AFA402B00080A021AFA002A08E0500000000000090A40000000000002482FFD5304200FF2C43004E1060FEF73C0340032463094000021080006210218C43000000000000006000080000000032620600240302001443FEEC2403FDFF026310243453050024020010AFA202A8A2840000269400018E040004000000002482FFFF1840003DAE02000424A20001AE02000026B5FFFF16A0FFDD326201000800849A000000008FA302A8000000002862000B1440FED52402F47F080085B2026298248FA302A800000000000310403C03400324630BB400431021AA
S3FF400217348442000000000000284300091460FEC8AFA202A82402F47F080085B2026298248FA302A800000000000310403C03400324630BB4004310218442000000000000AFA202A82402F47F080085B202629824326208001040FFCF000000008FA202A80000000014400005326204002403000836730200AFA302A832620400104001E62402FA7F080085B202629824326200801040FEA72403FF7F080085B20263982403C020210C007648020028211040FFC326B5FFFF26B500010800849A326201000C007648020028211040FF3C000000001260FF3C00000000080083FB000000001044FF320000000008008534023388211040028C0000A021080078
S3FF4002182E8616000000008E0200000000000000531021AE020000020028210C0076480293A0211440027702B3A8238E130004000000000275102A1440FFF303C020218E0200000275182300551021AE030004AE0200000295A021080083AC02918821367300013C0340032463828024040008AFA302A42414000308008426AFA402A88244000000000000108701C6000000000800840B3673000136730002824400000800840C308300FF3C05400324A582802402001036730220AFA502A42414000308008426AFA202A8024028210C0097C427A40024004090213673004008008426241400013C034003246382802404001036730200AFA302A424140003E8
S3FF4002192808008426AFA402A8824400000800840B36730002367300013C04400224847D002405000AAFA402A42414000308008426AFA502A83673000136730040080084260000A0210800842624140004367707802415015D27A50124AFA502B000A09821AFA0029CAFA00298AFA0028CAFA00294000030210000A0218E0500000000000090A40000000000002482FFD5304200FF2C43004F1460002B3C0340038FA40298000000001080000424C2FFFF2402FEFF02E2B82424C2FFFF2C420002144001C42682FFFF2C4200071040FDE032E201002A82000314400191240200031282FDDA329400FFAFB402880260A82126B5FFFF82A5000003C020210C000C
S3FF40021A22A170020030212683FFFF307400FF0014160000021603284200041040FFF626B5FFFF26B500018FA40288000000002482FFFC304200FF2624FFFF00021827026398210800845C0082882324630A7800021080006210218C4300000000000000600008000000003C05400324A582802402000AAFA502A42414000308008426AFA202A83C02400224427D00AFA202A42414000308008426AFA002A88244000000000000108601B2000000000800840B367300040C007648020028211040FD7332620040080083FB00000000001518C000151040004310212442FFD00044A821824400000800840C308300FF824400000800840B367300103262001042
S3FF40021B1C1440FCE432620008104001AC326200048FA302F4000000008C62000024630004AFA302F4080083ACA0510000168000152403000332E20700240307001443FF9A2402F87F02E2B82424140001A2640000267300018E040004263100012482FFFF18400010AE02000424A20001AE02000026B5FFFF16A0FF8300000000080086710000000012830003240200051682FF8600000000268200010002A600080086DA0014A60303C0202102002821AFA602B40C007648AFA702B88FA602B48FA702B81040FFEC26B5FFFF0800867126B50001240300071683FF7400000000080086DA24140008240200061682FF6F00000000080086DA2414000714C0B5
S3FF40021C1600132403000232E2070024030700104300C42402F87F240200011282FFDF240300041283FFDE268200010800867100000000080084BA27B700181044FDDB000000008EE40000080084E60000000014C3FFF224020001080086DA24060003028610211440FF522403FE7F080086DA02E3B82432E201001040FFFA028610218FA202982404FF7F2442000102E4B82410E0FFB2AFA2029824E7FFFF080086DC26B5000132E202001040FF412402FD7F8FA3029802E2B824080086DAAFA3029C32E200801040FF3A2402FF7F080086DA02E2B82432E20500240304001043000732E204001040FF32000000008FA20298000000001040FF3524C2FFFF6F
S3FF40021D1032E20200144000072403F87F8FA302988FA2029CAFB3029400621823AFA3028C2403F87F02E3102434570180080086DAAFA002982402000114C2FF1E00000000080086DA24060002240300021683FF1900000000080086DA241400031440002E000098218FA502F4000000008CB4000000000000028098218E0500008EC2186090A4000000000000004410219043000000000000306300081460001324A400018E020004000000002442FFFFAE02000490A3000026B5FFFFA2630000AE04000012A00009267300018E020004000000001C40FFE903C020210C007648020028211040FFE50000000002341023026288218FA202F4000000002442A5
S3FF40021E0A0004AFA202F4A26000008FA302AC0000000024630001080083ACAFA302AC8E0500008EC2186090A4000000000000004410219043000000000000306300081460FDCE24A200018E040004000000002483FFFF26730001AE02000012B3FDC7AE0300041C60FFEE03C020210C007648020028211040FFEA00000000080083AC0233882132E200021040001E006028218FA402F4000000008C82000024930004AC4300040800848AAC5400008FA302B0000000000073102B1040FC252673FFFF8265000003C020210C00A170020030218FA402B0000000000093182B1460FFF82673FFFF080083D6000000002694FFFF828500000C00A1700200302135
S3FF40021F04080084A1000000008FA202F4028020218C5700000C00984824530004144000B602A028210C00AD48028020210800848AAEE2000002E2B824080086DA24060001080085960000B82112E000030000000026F7FFFF26B500018FA402A02403FC7F2484000102639824080085B4AFA402A0A28000008FA302A48FA502B08FA702A80060F8090000302100401821326200201440001B3262000810400010326200048FA502F4000000008CA2000024A50004AFA502F4A04300008FA502AC0000000024A50001080084A7AFA502AC26520001824400000800840B367300021040000F326200018FA402F4000000008C82000024840004AFA402F40800AB
S3FF40021FFE87EFA44300008FA402F4000000008C82000024840004AFA402F4080087EFAC43000010400045326200028FA502F4000000008CA2000024A50004AFA502F4080087EFAC4300008FA302B0000000000073102B1040FBC12673FFFF8265000003C020210C00A170020030218FA502B00000000000B3182B1460FFF82673FFFF080083D6000000008FA2029403C02021244500010C009F402407000A8FA3028C00000000004330238FA4029427A202770082102B144000040000000027A50276AFA502948FA402943C0540030C00985424A507380800847C000000008FA502988FA3029C0000000000A310231040FC410002302308008829AFB3029480
S3FF400220F88FA502B00000000000B3102B1040FB942673FFFF8265000003C020210C00A170020030218FA202B0000000000053182B1460FFF82673FFFF080083D6000000001040FFB2000000003C0340038FA202A4246382801043003C03C020218FA502B08FA702A80C009E6800003021004020218FA502F4000000008CA2000024A50004AFA502F4AC430004080087EFAC4400000800865F0000382126520001824400000800840B367300081260FC912673FFFF27A501240800886E00B3A0212673FFFF9285000003C020210C00A170020030211660FFFA2694FFFF080084FA000000001040000C326200018FA402F4000000008C82000024840004AFA479
S3FF400221F202F4080083ACA45100000C009800000020210800848AAEE2000010400022326200028FA502F4000000008CA2000024A50004AFA502F4080083ACAC5100001680FD9400000000080083FB000000008FA502B08FA702A80C009FCC000030210800885A004020218FA202F402A030218C440000240500010C009103020038211040FB5E000000008FA302F48FA402AC246300042484000100518821AFA302F4080083ACAFA402AC1040000C000000008FA202F4000000008C430000001117C3AC620000AC7100048FA302F40000000024630004080083ACAFA302F48FA402F4000000008C82000024840004AFA402F4080083ACAC510000008010218F
S3FF400222EC00A018218F84801400C0382100402821080083980060302127BDFFD8AFB30020AFB2001CAFB10018AFB00014AFBF00240080802100A0882100C090211080000700E098218C8200380000000014400003000000000C006BD400000000020020210220282102403021026038218FBF00248FB300208FB2001C8FB100188FB000140800839827BD00288F83801427BDFFE0AFB20018AFB10014AFB00010AFBF001C0080802100A088211060000800C090218C6200380000000014400005020028210C006BD4006020218F8380140200282102203021024038218FBF001C8FB200188FB100148FB00010006020210800839827BD002027BDFFE0AFB2E0
S3FF400223E60018AFB10014AFB00010AFBF001C0080902100A088211080000500C080218C8200380000000010400036000000009602000C8E0300183042000810400029AE0300088E0300100000000010600026024020218E0400008E020014008318230062102A1040002B246500018E020008323100FF2442FFFFAE020008A09100008E030014248200011065000FAE0200009602000C0000000030420001144000082402000A8FBF001C022010218FB200188FB100148FB0001003E0000827BD00201622FFF800000000024020210C006B28020028211040FFF300000000080089222411FFFF024020210C0089540200282114400010000000008E0300101A
S3FF400224E00800890E000000000C006BD4000000000800890500000000024020210C006B28020028211440FFEE000000008E04000008008914240500019602000C2403000934420040A602000CAE430000080089222411FFFF008010218F84801400A03021080088F80040282100000000000000008F83801427BDFFE0AFB10018AFB00014AFBF001C008088211060000500A080218C6200380000000010400020000000008604000C000000003083FFFF3062000810400034008028218E040010000000001080002430620200306200011440000C306200021040001500001021AE0200081080001500000000000010218FBF001C8FB100188FB0001403E0AE
S3FF400225DA000827BD00208E020014AE000008000210231480FFF6AE02001808008986000000000C006BD40060202108008960000000008E02001408008970AE0200089602000C00000000304200801040FFE82402FFFF08008973000000001040000400000000306200801040FFD900000000022020210C006EEC020028219603000C8E0400100800896B30620001306200101040FFD82402FFFF3062000414400006000000008E04001034A20008A602000C080089683043FFFF8E0500300000000010A000072602004010A20004000000000C00AFCC022020218604000CAE0000302402FFDB008210248E04001000022C00A602000C00052C03AE00000484
S3FF400226D4080089A0AE0400000000000014C0000200A6001A0007000D000018100000381204A00006008010210460000B00000000AC43000403E00008AC4700001860FFFC000000000066182124E7FFFFAC43000403E00008AC4700000066182324E70001AC43000403E00008AC4700008CA600108C82001027BDFFC80046102AAFB6002CAFBF0034AFB70030AFB50028AFB40024AFB30020AFB2001CAFB10018AFB000140080B0211440008600A0602124C200030002108000A220218C83000402C210218C4B000424630001146000020163001B0007000D24B0001424D3FFFF2495000426D4001400009012164000410240B82102608821018028210C0074
S3FF400227CE938E02C020210440002F0280302126570001000038218E0300008CC200003065FFFF3044FFFF008520230087202100031C0200021402004310232610000400041C030043102102B0282BA4C20000A4C4000200023C0310A0FFEF24C60004266200040002108002C220218C830004000000001460001502E010210284102B10400010008018218C82000000000000104000092463FFFC2463000408008A25AED100108C6200000000000014400005000000002463FFFC0283102B1440FFF92631FFFFAED1001002E010218FBF00348FB700308FB6002C8FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD00380280482128
S3FF400228C80200502100003821000028218D4600008D23000030C2FFFF02420018000634023064FFFF00E4202100031C02254A000402AA402B0000101200A2102100022C02024600183042FFFF0082202300043C03A52400020000301200A6282130A2FFFF0062182300671821A523000000052C02252900041100FFE500033C031560FFA002608821266200040002108002C220210284182B1460000600000000080089F2AED300100284102B104000052673FFFF8C820000000000001040FFFA2484FFFCAED30010080089F20260882108008A26000010218C88004027BDFF58AFB3008CAFB20088AFB10084AFBF00A4AFBE00A0AFB7009CAFB60098AFB5AE
S3FF400229C20094AFB40090AFB00080AFA400A800E098218FB100C41100000C00C090218C82004401002821AD0200048C83004424020001006210040C009328AD0200088FA300A800000000AC6000400640013602408021AE2000003C037FF0020310241043011F02602821024020210000382100003021AFB3002C0C00AC88AFB2002814400019240200018FA300C08FA400C800000000108002A5AC6200008FA300C83C0240032442F0E9AC6200003C0340032463F0E88FBF00A4006010218FBE00A08FB7009C8FB600988FB500948FB400908FB3008C8FB200888FB100848FB0008003E0000827BD00A88FA400A827A2001C27A300180260382102403021E3
S3FF40022ABCAFA200100C009501AFA30014AFA2003800101502304407FF148001133C02000F8FA2001C8FB500180000000002A21821247104322A220021144002BB00111023246304120050100400731806004320250C000E102634FBCD00403021240400013C02FE1000463021AFA4003C3C02400300C020218C470C148C460C100C00AB56006028213C0440038C870C1C8C860C18006028210C00AB94004020213C0440038C870C248C860C20006028210C00AB760040202102802021006088210C000D9C004080213C0440038C870C2C8C860C28006028210C00AB94004020210060382102202821020020210C00AB76004030210040802100608821006074
S3FF40022BB628210C000DD402002021022028210200202100003821000030210C00ACF8AFA2003004400251000000008FA30030000000002C6200171440022C24040001AFA4004C26A2FFFF0054302304C0023D00000000AFA60044AFA0005C8FA40030000000000480023B000410238FA20044AFA4004000441021AFA20044AFA000588FA300B8000000002C62000A1040020C2411000128620006144000082C6200068FA400B8000088212484FFFCAFA400B88FA300B8000000002C6200061440025E000310802402FFFF24030001AFA20020AFA20050AFA300488FA400A82E8200181440000BAC800044240300040000202100031840246200140282102B04
S3FF40022CB01040FFFC248400018FA200A800000000AC4400448FB000208FA300A8000000008C6500440C0094D300602021AFA200708FA300708FA400A82E02000F10400098AC83004012200096000000008FA4003000000000188002DC3082000F3C034003000210C00004810324630CA000431021320400108C5300048C5200001480040A3C0240038FB7002C8FB60028241400021200000F3C02400324510D683202000110400008026028218E2700048E2600000C00AB9402402021006098210040902126940001001080431600FFF426310008026038210240302102E028210C000CF802C0202100609821004090218FA3004C00000000106000083C029A
S3FF40022DAA40038C470C348C460C30026028210C00ACF8024020210440049A000000008FA200208FBE0030AFA200540C000D9C028020210060282100402021026038210C00AB94024030213C0440038C870C448C860C40006028210C00AB7600402021006088218FA30054004080213C02FCC014600337005080213C0240038C470C4C8C460C48026028210C00AB56024020210040902102203821020030210060282102402021006098210C00ACB00200A0211C4003E23C028000028210260040302102203821026028210C00ACF80240202104410033000000000000F021AFA000348FA200BC8FB6007000021027AFA2003008008D0A0000A0218FA400C0D7
S3FF40022EA42402270F12600016AC8200003C02400324430BEC8FA200C8000000001040FEEC0000000080620003000000001040000224640003246400088FA200C808008A9DAC4400003C027FFF3442FFFF0242802424030001AE23000008008A86020090213C02000F3442FFFF020210241440FFE83C0240033C02400308008BAE24430BE03442FFFF3C033FF002421024004330252494FC01AFA0003C8FB5001808008ACA026018218FB3002C8FB200288FA3001C000000000460008F000000008FA40030000000002882000F1040008A3C02400324420CA0000418C0006218218FA200BC8C7500048C7400000440020D02A0382102803021026028210C0052
S3FF40022F9E0CF802402021006028210C000DD400402021004020210C000D9C0040B821006028210040202102A038210C00AB94028030210060382102602821024020210C00AB5600403021006028218FA300700040202126E20030A0620000247600018FA300202402000100A038211062003E008030213C1740038EE70C3C8EE60C380C00AB940000000000408021006028210200202100003821000030210C00AC8800608821104000442412000108008C2302A038213C02400324420C388C4700048C4600000C00AB940000000000408021006028210200202100003821000030210C00AC88006088211040003302A0382102803021022028210C000CF86A
S3FF4002309802002021006028210C000DD400402021004020210C000D9C0040B821006028210040202102A038210C00AB94028030210060382102202821020020210C00AB56004030210040202126E20030A2C2000000602821006038218FA300202652000126D600011472FFD40080302100E028210C00AB7600C020210040802102A028210280202100603821020030210C00ACF800608821044001F402A0282102802021022038210C00AC60020030211440000332E20001144001EC000000008FBE00308FA400A88FA500380C00932800000000A2C000008FA300C08FA400C827C2000110800004AC6200008FA200C800000000AC5600008FA30070080064
S3FF400231928A9D000000008FA4004800000000148000EE0000F0218FA200B88FB1005C8FB40058285500021220000E000000008FA40044000000001880000A0224102A1440016C008018218FA200448FA4005C0043102300832023AFA20044AFA4005C022388238FA200580000000018400019000000008FA3004800000000106002BA000000001A80000E03C028218FA400A80C009722028030218FA400A88FA60038004028210C0096380040F0218FA400A88FA500380C00932800408021AFB000388FA40058000000000094302314C00178000000008FA400A80C0096CA24050001AFA200348FA200400000000018400006000000008FA500348FA400A890
S3FF4002328C0C00972200403021AFA2003416A00128000080218FA2004000000000144001F300000000240200018FA4004400000000004410213043001F146000C1240200202402001C8FA300448FA4005C0062182100822021AFA30044AFA4005C022288218FA2005C0000000018400006000000008FA500388FA400A80C0095DA00403021AFA200388FA300440000000018600006000000008FA500348FA400A80C0095DA00603021AFA200348FA4004C00000000148001BA000000008FA3002000000000186001D7000000008FA2004800000000144000AA000000008FB6007008008CE3241000018FA500388FA400A82406000A0C0096D700003821AFA280
S3FF400233860038261000018FA400388FA500340C0089D0000000008FA30020245300300203102AA2D300001440FFF026D600010000A0218FA500388FA400A80C0095DA240600018FA50034004020210C00938EAFA20038184000EC0000000008008CFB240400390060B02182C2FFFF000000001444027326C3FFFF8FA20070000000001462FFF8240200318FA3007000000000A06200008FA400300000000024840001AFA400308FA500348FA400A80C0093280000000013C0FF46000000001280000600000000129E0004000000008FA400A80C009328028028218FA400A80C00932803C028218FBE003008008C5600000000AFA000B82403FFFF24040001EC
S3FF40023480AFA000BCAFA30020AFA30050AFA400482410FFFF8FA400A808008B32AC8000448FA200308FA5002C000218C03C02400324420CA0006218218C6700048C6600008FA400280C00ACF80000000004410005000000008FA30030000000002463FFFFAFA3003008008AFEAFA0004C3C02400308008A9D2443F0E800063023AFA6005C08008B04AFA000448FA3005CAFA0004000641823AFA3005C08008B0DAFA200588FA400300C000D9C000000000060282100402021022038210C00AC88020030211040FDA7000000008FA20030000000002442FFFF08008AF8AFA200308FA400B8000000002895000216A000BB000000008FA300208FA40058246607
S3FF4002357AFFFF0086102A144001EC000000000086A0238FA20020000000000440027A000000008FB1005C8FA300448FA400A800621821AFA300448FA3005C24050001006218210C0096CAAFA3005C08008C6E0040F0210043202328830005146002C02482FFFC08008CB40000000008008AC3005320043C03400324630BF0006218218C6400000000000000800008000000001A20000503C028218FA400A80C0095DA022030210040F021160001D70000000003C01021326300018FB6007003C0A021AFA300600040F021241500018FA400388FA500340C0089D0000000008FA40038028028210C00938E0040B8218FA400A88FA5003403C030210C00955C45
S3FF4002367400409021004080218C42000C00000000104000C626F300308FA400A80C0093280200282124110001064000AD0000000016400009000000008FA300B80000000014600005000000008FA4006000000000108000A3000000001E2001C024020039A2D300008FA200200000000012A2FF3526D600018FA500388FA400A82406000A0C0096D700003821129E00C1AFA200388FA400A8028028212406000A0C0096D7000038218FA400A803C028212406000A000038210C0096D70040A0210040F02108008D9126B500011660FED8000000003C02000F3442FFFF024210241440FED33C027FF0024210241040FED0000000008FA3005C8FA400442463B5
S3FF4002376E000124840001AFA3005CAFA4004408008CA82410000108008C76022018211440000724040030326200011440FF110000000008008DEB000000000060B02182C2FFFF000000001044FFFC26C3FFFF08008D0A000000008FA30020000000001C60FDF1000000008FA40020000000001480FDA83C0240038C470C4C8C460C4802A028210C00AB94028020210060282100402021026038210C00ACD4024030210441FD9C000000000000F021AFA000348FA3007024020031A06200008FA400302476000124840001AFA4003008008D0A0000A0218FA500388FA400A80C0097220000000008008C99AFA200388FA2003C00000000104001CC0000000086
S3FF400238688FB1005C8FB4005808008D68246204338FA200300000000000022023148001C93083000F8FB3002C8FB2002808008B672414000224020001AFA200488FA300308FA400BC0000000000641821247400011A800116AFA3005008008B23AFB4002008008E29AFA0004824040001AFA400488FA200BC000000001840010F240300010040A021AFA2002008008B23AFA2005008008E36AFA000488FBE003008008E44240400390060B02182C2FFFF000000001444000B26C3FFFF8FA20070000000001462FFF8240200308FA3007000000000A06200008FA3007027DE0001240200302442000108008C56A06200001A20000F026080218FA500388FA40D
S3FF4002396200A80C0095DA240600018FA50034004020210C00938EAFA20038184001C40000000024020039126201BE2402003926700001A2D0000008008D0A26D600018FA400380C00938E020028218FA400A8004088210C009328020028211620FF37000000008FA400B8000000001480FF33000000008FA20060000000001440FF2F24020039126201A7240200391A4000020000000026F30031A2D3000008008D0A26D600018FA400A8028028212406000A0C0096D7000038210040A0210040F02108008D9126B500018FA400388FA500340C00938E000000000441FE42000000008FA500388FA400A82406000A0C0096D700003821AFA200388FA200304D
S3FF40023A5C8FA300482442FFFF14600191AFA200308FA4005008008CD1AFA400208FA30034000000008C620010000000002442000300021080006210218C4400040C009334000000002403002008008CAD006210238FA400B800000000288200031440FE26000000001460FCF1240600058FA500348FA400A80C0096D7000038218FA40038004028210C00938EAFA200341C40FF4C0000000008008BA2000000008FA4004800000000108000BA3C0240038FA200543C0340032448FFFF3C02400324420CA0000840C0010240218D0700048D0600008C6507348C6407308FA300700C000CF8247600010060282102003021022038210C00AB5600402021026093
S3FF40023B562821024020210060A8210C000DD40040A021004020210C000D9C004080210060382102602821024020210C00AB56004030218FA400700040902126100030A090000002A028210280202100603821024030210C00ACB0006098211C40FD693C0240038C450C348C440C30026038210C00AB5602403021006028210040202102A038210C00ACF8028030210440FF4B240400398FA3005400000000286200021440FCD43C1740038EE40C3C8EF70C38AFA4007424110001AFB7007808008F0BAFA4007C8FA30054263100010223102A1040FCC8000000008FA7007402A02821028020210C00AB9402E030218FA600788FA7007C026028210240202168
S3FF40023C500060A8210C00AB940040A0210040902100602821024020210C000DD400609821004020210C000D9C004080210060382102602821024020210C00AB56004030210040902126100030A2D00000006028210240202102A0382102803021006098210C00ACF826D600010440FD273C0240038C450C348C440C30026038210C00AB5602403021006028210040202102A038210C00ACF8028030210441FFCB2404003908008E44000000008FA500388FA600588FA400A80C0097220000000008008C99AFA200380280802108008D25AFB40020AFA300BCAFA30020AFA3005008008D25241000018FA300588FA4004000C310230062182100822021AFA3BF
S3FF40023D4A0058AFA4004008008D630000A0218C470D8C8C460D888FA5002C8FA400280C000CF83210000F0060B8210040B02108008B50241400038FC500048FA400A80C0094D3000000008FC6001027C5000C24C600022444000C000630800C006F80004080218FA400A8020028210C0095DA2406000108008D8C326300012442000108008D0AA0620000126200AB26620001A2C2000008008D0A26D6000108008E05AFBE00308FA40054000000002495FFFF24420CA0001518C0006218218C6500048C640000020030210C00AB94022038210260282102402021AFA3006C0C000DD4AFA20068004020210C000D9C0040802100603821026028210240202176
S3FF40023E440C00AB5600403021004090218FA2007026100030A0500000006098218FA30054245600012402000110620020000000008FA400708FA2005402C088210082A0213C03400324630C388C6700048C660000026028210C00AB94024020210040902100602821024020210C000DD400609821004020210C000D9C00408021006038210260282102402021004030210C00AB5626100030A230000026310001006098211634FFE70040902102D5B0213C1040038E0707348E0607308FA5006C8FA400680C00AB76000000000060282100402021026038210C00ACF8024030210440FE7B240400398E0507348E0407308FA7006C8FA600680C00AB56000072
S3FF40023F3E00000060282100402021026038210C00ACB0024030211840FBFC2404003008008FDA000000000060B02182C2FFFF000000001044FFFC26C3FFFF08008C56000000008FA3005C8FA400200000102108008D68006488238FA30018240200368FB1005C8FB4005808008D68004310233C02400324420CA0000318C0006218218C6700048C660000000481038FA5002C8FA400280C00AB9400000000006098211200003C004090213C02400324510D68241400023202000110400008026028218E2700048E2600000C00AB9402402021006098210040902126940001001080431600FFF42631000808008B67000000008FA40020000000001880FB6414
S3FF40024038000000008FA20050000000001840FBC03C1740038EE70C3C8EE60C38024020210C00AB9402602821006098218FA400508FA300300040902126940001247EFFFF08008B75AFA4005424020039A2C2000008008CF826D600011440FE40326200011440FE3B24020039A2D0000008008D0A26D600018FA400A803C028212406000A0C0096D7000038210040F0218FA2005008008CD1AFA2002008008B6724140002240200041082FC832482001C08008CB4000000000000000080A30000240200721062001E240200771062001824020061106200052402001600003821AC82000003E0000800E0102124070108240300012404020880A200010000DA
S3FF400241320000104000072408002B104800122402FFE380A20002000000001048000D0000000000641025ACC2000003E0000800E0102124070008240300010800904B2404060024070004000018210800904B000020212402FFE300E2102424030002344700100064102508009057ACC2000000E6001827BDFFC8AFB50024AFBE0030AFB7002CAFB20018AFB10014AFBF0034AFB60028AFB40020AFB3001CAFB00010AFA600400000A81200E0B82100A088218FB2004812A000370080F02110800005000000008C8200380000000010400069000000008E500004000000000600005D000000009642000C00000000304200021440002A022098210800908EEF
S3FF4002422C02A088218E500004000000000211102B0260202110400068020030218E4500000C006F80027098218E43000003C0202100701821AE430000024028210C007648023088231040FFEF02B110238FA3004000000000146000020043001B0007000D0000B8128FBF003402E010218FBE00308FB7002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD0038080090A40000B82102B0102B104000020000000002A080218E450000022020210C006F80020030218E5600008E4200048E45003002D0B02100501023AE420004AE5600000230A02110A0001902B098231260FFDE2642004010A20004000000000C0052
S3FF40024326AFCC03C020218E560000AE4000308E5100108E500014AE540000AE540010AE53001403C020210C007648024028218E430004AE510010AE5000140283A021AE5600000263982314400015AE4000041660FFEF00000000080090A4000000009642000CAE40000430420002000080211040FFA402209821080090B402B0102B0C006BD4000000008E500004000000000601FF9700000000080090E1000000008FA3004002B31023146000020043001B0007000D0000B812080090A4000000008E4500000C006F80022030218E4300048E4200000071182300511021AE420000080090A4AE43000427BDFFE00080102100A0182100C040218F8480144F
S3FF40024420AFA700100040282100603021AFBF001C0C009068010038218FBF001C0000000003E0000827BD002000000000000000008CC2000827BDFFC8AFBE0030AFB40020AFBF0034AFB7002CAFB60028AFB50024AFB3001CAFB20018AFB10014AFB0001000C0F021AFA400381040002300A0A02194A7000C0000000030E200081040002C000000008CA20010000000001040002830E200028FD500001040002F0000802100008821022030218FA40038120000792E0204018E85001C1440000202003821240704008E830024000000000060F8090000000000401821020280231840007D022288218FC2000800000000004310231440FFECAFC200080000A5
S3FF4002451A18218FBF0034006010218FBE00308FB7002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD00388FA400380C00895402802821144000EF240300099687000C8FD5000030E200021440FFD30000802130E200011440006200009021000088212417FB7F122000450000000030E202008E900008104000890230102B1440002A30E2048010400029000000008E8200148E840000000218408E850010006218210085B023000317C20043102126C4000100029843009120210264102B1040000302603021008098210080302130E2040010400032000000008FA400380C00B08400C02821104000360040802141
S3FF400246148E850010004020210C006F8002C030219683000C000000000077182434630080A683000C0276182302161021AE820000AE830008AE900010AE930014022080218E840000020030210C006FE8024028218E8300088E8200000070182300501021AE830008AE820000022080218FC2000800000000005010231040FFA2AFC20008023088239687000C1620FFBD025090218EB200008EB100040800916326B500088EB100008EB000040800913126B500088FA400380C00B0D4000000001440FFD9004080218E8500108FA400380C00AFCC000000008FA300382402000CAC6200009682000C2403FFFF3442004008009147A682000C0000B021000073
S3FF4002470EB82100009821124000260000000012E0005B02C020210253102B1040000202608821024088218E8400008E8200108E8600080044102B8E870014104000050227102A00E680210211102A144000540227102A1440002E02C028218E8300248E85001C8FA400380060F80902C030211840FFDD00408021027098231260002F000000008FC2000800000000005010231040FF5EAFC20008025090231640FFDC02D0B0218EB600008EB200040000B821080091C526B500088E8400008E820010000000000044102B104000030211102B14400040024028218E870014000000000227102B1440001C024028218E8300248E85001C8FA400380060F80951
S3FF40024808024030211C40FF9C00408021080091BD000000000C006FE8022030218E8300088E82000002208021007118230051102102709823AE8300081660FFD3AE8200008FA400380C006B28028028211440FFA70000B821080091E4000000000C006FE8022030218E8300088E8200000071182300511021AE830008AE820000080091A0022080212405000A0C0092E4024030211040001D2442000100569823080091C92417000102C028210C006FE8020030218E8300008FA4003800701821AE8300000C006B28028028211040FFAD02709823080091BD000000000C006FE8020030218E8300008FA4003800701821AE8300000C006B2802802821104097
S3FF40024902FF5F00000000080091BD0000000026530001080091C9241700019682000C0000000034420040A682000C8FA2003800000000AC430000080091472403FFFF3C02400303E0000824421880000000002C82010010400008000000003C0240038C43186000000000006418219062000003E000083042000803E00008000010213C0340038C620C9003E00008000000003C02400303E0000824420C603C02400303E0000824420C6027BDFFD8AFB30020AFB2001CAFB00014AFBF0024AFB1001800C080210080902110C0001100A098213C11400300C020210C0077CC2625E1981440001400000000AE500034AE5300302622E1988FBF00248FB3002079
S3FF400249FC8FB2001C8FB100188FB0001403E0000827BD00288FBF00243C0240032442E1988FB300208FB2001C8FB100188FB0001403E0000827BD00283C05400324A5D4740C0077CC020020211040FFE8000010210800927D00000000008010218F84801400A030210800926A00402821000000000000000027BDFFD8AFB10020AFB0001CAFBF00248FB0003810C00015008088210C0092D0AFB00010004018212402FFFF10620006006010218FBF00248FB100208FB0001C03E0000827BD00288FBF00242402008AAE000000AE2200008FB0001C2402FFFF8FB1002003E0000827BD00283C06400324C6D47400002821240700010C0092D0AFB000100800D0
S3FF40024AF692A60040182127BDFFE00080102100A0182100C040218F848014AFA700100040282100603021AFBF001C0C00929C010038218FBF001C0000000003E0000827BD0020000000000000000010A0000627BDFFF814C00006000000000000102103E0000827BD000810C0FFFC03A0282110E000070000000090C2000027BD0008ACA2000090C3000003E000080003102B080092D52402FFFE000000002CC20004008048211440003830A500FF312200031040000F0000382190820000000000001045003524C6FFFF080092F50000000090820000000000001045002F24C6FFFF14C0FFFB2484000103E0000800001021000018212408000400071200F7
S3FF40024BF0246300011468FFFD004538213C02FEFE3C03808001202021344AFEFF346980808C82000024C6FFFC00E2102600021827004A10210043102400491024104000112CC80004908200000000000010450015248300019082000100000000104500120000000090820002000000001045000E2483000290820003000000001045000A248300031100FFE62484000414C0FFCB00000000080092F70000000003E00008008010210080182103E000080060102110A00009000000008CA200048C83004C00021080006218218C64000000000000ACA40000AC65000003E00008000000003C02FFFF008210241040001A00000000000018213C02FF0000825D
S3FF40024CEA1024144000033C02F000246300080004220000821024144000033C02C0002463000400042100008210241440000300000000246300020004208004800005000000003C02400000821024104000062463000103E00008006010210004240008009339240300102403002003E00008006010218C83000000000000306200071040000C3062FFFF3062000114400027000028213062000214400029000000000003108224050002AC82000003E0000800A010211040001A0000000000002821306200FF144000043062000F24A5000800031A023062000F144000043062000324A500040003190230620003144000043062000124A5000200031882E4
S3FF40024DE4306200011440000400000000000318421060000924A50001AC83000003E0000800A0102100031C020800936A2405001003E0000800A010212405002003E0000800A0102100031042AC82000008009385240500018C8200108CA600100000000000464023150000110000000024C200040002108000A21821008210212442000424630004248400142442FFFC2463FFFC8C4700008C6500000000000014E500050082302B14C0FFF80000000003E000080100102100E5102B1440000300000000080093A424080001080093A42408FFFF3C027FF0008220243C03FCC0008320211880000500000000000028210080102103E0000800A018210004F9
S3FF40024EDE102300022503288300141460000A3C0200082483FFEC2862001F144000080000000024050001000020210080102103E0000800A01821080093B300822007000318272402000100622804080093C2000020218C82001027BDFFD82442000400021080AFB1001800828821AFB300208E330000AFB2001C2492001402602021AFB00014AFBF00240C00933400A0802100403021240200200046102328C3000B10600017AE0200002402000B0251182B10600040004620238E22FFFC000000000082280624C2001500531004009320063C033FF08FBF00240083182500A228258FB30020006010218FB2001C00A018218FB100188FB0001403E00008B0
S3FF40024FD827BD00280251102B1440001B0000000024C6FFF510C0001D00002821240200200251182B10600026004638238E22FFFC0000000000E2400600D318043C023FF00062182500C5200400E510068FBF00240062182501042825006010218FB3002000A018218FB2001C8FB100188FB0001403E0000827BD00282631FFFC24C6FFF58E25000014C0FFE6240200203C023FF08FBF002402621825006010218FB3002000A018218FB2001C8FB100188FB0001403E0000827BD0028080093E800002821080094040000402127BDFFD0AFB0001C00A0802127A50010AFBF002CAFB30028AFB20024AFB100200C0093CC008088210200202127A50014006002
S3FF400250D298210C0093CC0040902100603821004030218E2300108E0200108FA40014006218238FA200100003194000441023004310211840000F000000000002150000529021024020210C000CF8026028218FBF002C00402021008010218FB300288FB200248FB100208FB0001C03E0000827BD0030000215000800944500C2302327BDFFE028820018AFB00010AFBF001CAFB30018AFB2001414400018008080213C0240033C0340038C490C348C480C308C730C3C8C720C380120282101002021026038210C00AB94024030212610FFFF006048211E00FFF8004040218FBF001C01001021012018218FB300188FB200148FB0001003E0000827BD0020E9
S3FF400251CC3C02400324420CA0000418C0006218218C6800008C6900048FBF001C01001021012018218FB300188FB200148FB0001003E0000827BD00208CC2001024A5FFFF244200040002108000C0482100C210210005294324A5000124460004252700140005288000E6102B1040001300854021008028218CE2000024E7000400E6182BACA200001460FFFB24A5000400C910232442FFEB000210822442000100021080008220210088102B1040000600000000AC800000248400040088102B1440FFFC0000000003E00008000000008C83001000803821000521430064102A104000150083102A0060302124C200040002108000E2182124E400142462DD
S3FF400252C600040082102B1440000600001021080094D1000000000083102B104000172463FFFC8C620000000000001040FFFA0000000003E00008240200011040FFEC0080302130A5001F10A0FFE9248200040002108000E21021008030218C4400040000000000A4180600A318041464FFF100000000080094AE24C200040000102103E00008000000008C83004C27BDFFE0AFB10014AFB00010AFBF001CAFB20018008080211060001300A0882100111080006220218C8300000000000010600015240200018C62000000000000AC820000AC600010AC60000C8FBF001C006010218FB200188FB100148FB0001003E0000827BD0020240500040C00AFC862
S3FF400253C024060010004018211440FFE9AE02004C080094E700000000022290042646000502002021000630800C00AFC8240500011040FFEA00401821AC510004080094E5AC52000827BDFFD024050001AFB30028AFB20024AFB10020AFB0001CAFBF002C00C080210C0094D300E09821004088213C02000F001018403442FFFF020280240003954212400004AFB000143C02001002021025AFA200141260001F27A400100C009357AFB3001014400038004028218FA2001000000000AE2200148FA20014000000000002802B26100001AE2200181240001AAE3000102642FBCD8FA4004000451021AC820000240300358FA200448FBF002C00651823AC4363
S3FF400254BA00008FB30028022010218FB200248FB100208FB0001C03E0000827BD00300C00935727A400148FA3001424040001AE230014AE240010244500201640FFE8241000012602FFFF00021080022210218C4400148FA2004024A3FBCE0C009334AC430000001019408FA400448FBF002C006218238FB30028022010218FB200248FB100208FB0001CAC83000003E0000827BD00308FA200148FA4001000051823006218040064182500A21006AE2300140800951FAFA200148CC300108CA2001027BDFFD8AFB3002000439823AFB2001CAFB00014AFBF0024AFB1001800A080211260004D00C090210660006C024010210000982124B100148E050004B2
S3FF400255B40C0094D300000000004060218E0A00108E420010254300042442000400031880000210800203182102421021AD93000C02204021246D0004244B00042646001425870014000048218D0300008CC400003065FFFF3082FFFF00A2282300A928210004240200031C020064182324C60004000514030062182100CB202BA4E30000A4E500022508000424E700041480FFEE00034C03010D102B1040000E000000008D020000250800043044FFFF012420210002140200041C0300621821010D282BA4E30000A4E4000200034C0314A0FFF424E700048CE2FFFC000000001440000624E3FFFC2463FFFC8C620000000000001040FFFC254AFFFF8FBF2D
S3FF400256AE0024018010218FB300208FB2001C8FB100188FB00014AD8A001003E0000827BD0028246200040002108000C2182100A21021244200042463000424B100142442FFFC2463FFFC8C4700008C6600000000000014E600110222282B14A0FFF92442FFFC0C0094D3000028218FBF00240040602124020001AD8200108FB30020018010218FB2001C8FB100188FB00014AD80001403E0000827BD002800E6102B1040FF98024010212413000102009021245100140800956C004080218CA2001027BDFFD8AFB3001CAFB0001000C0982100068143244200018CA60008AFB100140050882100D1182AAFB40020AFB20018AFBF002400A090218CA500045D
S3FF400257A8106000050080A0210006304000D1102A1440FFFD24A500010C0094D302802021004048211A00000B2445001400001821246300010070102AACA000001440FFFC24A50004260200040002108001221021244500048E4200103266001F2442000400021080024210212447000410C00024264400142402002000464023000018218C8200000000000000C2100400621025ACA200008C830000248400040087102B24A500041440FFF60103180610600002ACA30000263100018E4200048E83004C00021080006218218C6400008FBF00242622FFFFAE440000AD220010AC720000012010218FB400208FB3001C8FB200188FB100148FB0001003E00C
S3FF400258A2000827BD00288C820000248400040087182BACA200001060FFE924A500048C820000248400040087182BACA200001460FFF524A50004080096180000000027BDFFD8AFB3001CAFB200188CD300108CB20010AFB400200253102AAFB10014AFBF0024AFB0001000A088211440008300C0A0210240102102609021004098218E220008025380210050102A8E250004104000020000000024A500010C0094D3000000000040C021260200040002108003021021244F000427040014008F102B1040000600801821AC60000024630004006F102B1440FFFC00000000264200040002108002821021266300040003188024520004268C001402231821BB
S3FF4002599C0192102B246D00041040004426310014008070218D82000000000000304AFFFF1140001C01C0382102204021000048218D0300008CE400003062FFFF004A001800031C023085FFFF0004240225080004010D302B000010120045102100491021006A001800022C02A4E20002000018120064182100651821A4E3000000034C0214C0FFEB24E70004ACE900008D82000000000000000254021140001C01C040218DC700000220482100E03021000058218D24000000061C023082FFFF0142001800042402A507000225290004012D282B00001012016210210043102101440018A5020000250800048D0600000002140230C3FFFF0000201200832D
S3FF40025A9620210082382114A0FFEB00075C02AD070000258C00040192102B1440FFBF25CE00041A00000E000000008DE2FFFC000000001040000725E3FFFC080096BD000000008C6200000000000014400004000000002610FFFF1600FFFA2463FFFC8FBF0024AF100010030010218FB400208FB3001C8FB200188FB100148FB0001003E0000827BD002800A0A0210800964800C0882127BDFFE8AFB0001000A08021AFBF00140C0094D3240500018FBF001424030001AC500014AC4300108FB0001003E0000827BD001827BDFFD8AFB200188CB20010AFB40020AFB3001CAFB10014AFBF002400E08821AFB0001000A098210080A02100C0482124A70014B8
S3FF40025B90000040218CE500002508000130A3FFFF0123001800052C020112302A000018120223182100032402012500183063FFFF00002812008520210004140000431021ACE2000000048C0214C0FFEE24E700041220000C000000008E620008000000000242102A104000100280202126420004000210800262102126430001AC510004AE6300108FBF0024026010218FB400208FB3001C8FB200188FB100148FB0001003E0000827BD00288E6500040C0094D324A500018E6600102665000C24C600022444000C000630800C006F80004080218E6300048E82004C00031880004310218C44000000000000AE640000AC530000080096FF0200982127BD3D
S3FF40025C8AFFD830C30003AFB30020AFB2001CAFB00014AFBF0024AFB1001800C08021008098211460003600A090210010888312200024000000008E700048000000001200003900000000322200011440000C00000000001188431220001A000000008E020000000000001040001E0200302100408021322200011040FFF60000000002402821020030210C0096380260202112400009004028218E4200048E63004C00021080006218218C64000000000000AE440000AC720000001188431620FFE800A090218FBF0024024010218FB300208FB2001C8FB100188FB0001403E0000827BD0028020028210C00963802602021AE020000AC4000000800973F00
S3FF40025D84004080212463FFFF3C02400324420DB800031880006218218C6600000C0096D7000038210800972D00409021026020210C0096CA24050271AE6200480040802108009734AC40000024E2000824030009146000020043001A0007000D27BDFFD0AFB3002000E09821AFB40024AFB2001CAFB10018AFBF002CAFB50028AFB000140080902100A088210000381228E200021440003A00C0A0210000282124030001000318400067102A1440FFFD24A500010C0094D3024020218FA3004000402821240400012A82000AACA3001414400028ACA40010263500092410000902301021804700000240202124E7FFD00C0096D72406000A261000010040A8
S3FF40025E7E28210214102A1440FFF70230102102B410212451FFF8028080210213102A1040000B00000000822700000240202124E7FFD00C0096D72406000A26100001004028210213102A1440FFF7263100018FBF002C00A010218FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD00302631000A080097A6241000090800978D00002821000000000000000090A700002402005E10E2002124A800010000482100002821000018212406010000831021246300011466FFFDA045000010E00014240A002D2402000100494823240B005D00871021A04900000100302190C2000000000000104A001224C80001104B0004000000002E
S3FF40025F78144000040000000000C0402103E0000801001021080097D5004038212508FFFF03E000080100102190A7000124A8000224090001080097CA2405000190C500010000000010AB000B00A7102A14400009000000000087182124E7000100E5102AA06900011440FFFC24630001080097D824C60002080097D52407002D00000000000000000000000003E000083C027FC0000000000000000027BDFFE03C027FFFAFB100183451FFFF009150243C027FF00142102AAFB00014AFBF001C00A04821008040210080382100C0802110400012ACC00000014510251040000F3C0200100142102A144000133C024003000030213C02800F3442FFFF3C0382
S3FF400260723FE000E210240043102524C3FC02000A350300661821AE030000004040218FBF001C01001021012018218FB100188FB0001403E0000827BD00208C470DD48C460DD00C00AB9400000000004040212402FFCA0060482101003821AE020000011150240800981A2406FFCA00000000000530233C027FFF00C530253442FFFF00441024000637C200C230253C037FF0006618230003102300431025000217C303E00008244200010000000000000000000518233C027FFF006518253442FFFF0044102400031FC2006218253C027FF00043102303E00008000217C20000000027BDFF880080402127A90080240202088F8480143C037FFF3463FFFF3D
S3FF4002616CAFA60080AFA70084A7A2002000A030212402FFFF27A5001401203821AFBF0074AFA30028AFA3001CAFA80024A7A20022AFA800140C0079E7AFA900108FA3001400000000A06000008FBF00740000000003E0000827BD007827BDFF8827A90084240202083C037FFF00A040213463FFFFAFA70084A7A2002027A500142402FFFF01203821AFBF0074AFA30028AFA3001CAFA80024A7A20022AFA800140C0079E7AFA900108FA3001400000000A06000008FBF00740000000003E0000827BD00780000000027BDFF483C024003AFB00090AFA400B8AFBF00B4AFBE00B0AFB700ACAFB600A8AFB500A4AFB400A0AFB3009CAFB20098AFB1009400A051
S3FF400262668021AFA600C0AFA0003CAFA00038AFA5002024440DF08FA900200000000091230000000000002C62002E1440004D00031080AFA0005881230000240200301062007D00007821812700000000000028E20030144004A70120B02128E2003A104004AA012030210000402100009821080098C5000090210013104000431021004710212453FFD024C60001AFA6002080C700000000000028E20030144000142508000128E2003A1040007C0100A821290200091440FFF0001318C0290200101040FFF1001218C00012104024C6000100431021AFA600200047102180C700002452FFD028E200301040FFEE250800010100A8212402002E14E202DFF8
S3FF4002636024C40001AFA4002080C30001110002E824020030006038210240202102A03021000060210000502124EBFFD02D62000A104002FB00C040218FA90020254A0001008090211560047A24020001010030210240202125220001AFA2002081270001080098E324EBFFD0008210218C4300000000000000600008000000000100A82116A0007400000000154000720000000015E0007000000000AFB00020AFA000588FA500C00000000010A00004000000008FA2002000000000ACA200008FA600580000000014C000323C0280008FA5003C8FA400388FBF00B40080102100A018218FBE00B08FB700AC8FB600A88FB500A48FB400A08FB3009C8FB264
S3FF4002645A00988FB100948FB0009003E0000827BD00B824020001AFA2005825230001AFA3002081220001000000001040FFDC0060482181230000240200301462FF85000078218123000124020058106202FF24020078106202FD2403003025290001AFA9002081220000000000001043FFFB000000001040FFCC00000000080098AB240F00010800991DAFA00058252200010800989FAFA200208FA300388FA5003C0800990D006220260000682100006021000050212402006510E2FFB202A030210100A8212402004510E2FFAF0000102116A00065000000001540FFB30000000015E0FFB10000000015A0FFAD2402004E10E2047428E2004F1040046EF1
S3FF40026554240200692402004914E2FFA6000000003C0240038FA4002024450DD880A600000000000010C004AD24A5000124840001808300000000000028620041144000042862005B1040000200000000246300201066FFF200000000080098FFAFB000208FB000202402002B26040001AFA40020820300010000000010620265000070212402002D1062026700000000006038212462FFD02C42000A10400238000000002402003014E2000A000000008FA900200000000025290001AFA90020812700000000000010E2FFFC252900012529FFFF24E2FFCF2C4200091040FFBE24E9FFD08FAB00200000000025680001AFA80020816700010000000028E200
S3FF4002664E00301040000C010B1023080099A62842000925080001AFA8002024E5FFD081070000000910400043102128E400301480000400A2482128E2003A1440FFF5000918C0010B1023284200091040000524024E1F29224E201040000224024E1F0120102111C0FF9D0000000012A0FF9D00021023004C102314C001F8AFA2005002A0B8212AA200111440000202A0A021241400100C000E1002602021004020212A82000A00602821AFA3003C14400015AFA400382682FFF73C03400324630CA0000210C0004310218C4700048C4600000C00AB940000000002402021006088210C000E10004080210060382102202821020020210C00AB76004030212F
S3FF40026748AFA3003CAFA200382AA2001010400016000000008FA40050000000001080FF2600000000188003CE28820017104003A62403000F3C024003000418C024420CA0006218218FA5003C8FA400388C6700048C6600000C00AB9400000000AFA3003C08009900AFA200388FA3005002B41023004380211A0002F53203000F1060000E2402FFF03C02400324420CA0000318C0006218218FA5003C8FA400388C6700048C6600000C00AB9400000000AFA3003CAFA200382402FFF002021824146001E128620135AFA0005C8FA400B802C0282102E0302102A038210C009773AFB30010AFA200543C0240038C420C303C034003AFA200703C0440033C05F5
S3FF4002684240033C0240038FA600548C630C348C8407308CA507348FA700708C420F0424C6000CAFA30074AFA40068AFA5006CAFA20064AFA60060AFA40078AFA5007CAFA70080AFA30084AFA70088AFA3008C8FA200548FA400B88C4500040C0094D3000000008FA300548FA500608C6600102444000C24C60002000630800C006F800040B8218FA7003C8FA600388FA400B827A5001827A2001CAFA500100C009501AFA200148FA400B8240500010C0096CAAFA200248FA3005000000000046000F70040B021006038210060A02100002021000040218FA2001800000000044000ED00000000008220218FA6005C8FA5001C00461823006510212842FC03C0
S3FF4002693C104000AD24020036246604338FA3005C00C4882100E31021004690210251102A1040000202201821024018210083102A10400002000000000080182118600004008098210083982302238823024390231100000E010030218FA400B80C00972202C028218FA400B88FA60024004028210C0096380040B0218FA400B88FA500240C00932800408021AFB000241A200006000000008FA500248FA400B80C0095DA02203021AFA200241280000502E028218FA400B80C009722028030210040B8211A40000502E028218FA400B80C0095DA024030210040B8211A60000502C028218FA400B80C0095DA026030210040B0218FA500248FA400B80C008C
S3FF40026A36955C02E030218C5E000C00402021AC40000C02C028210C00938E0040A821044001E8000000001040022D02A020210C00942802C02821004080213C02400324420EF08C4700048C46000000602821020020210C00AD20006088211C40005A0220282113C00096000000008FA200808FA300848FB20038AFA30034AFA2003000608821004080213C147FF0025498243C027FE01262005C3C02FCB08FA4005C00000000108000203C0206A0344200010262102B1040001C3C02400324420F088C4700048C460000022028210C00AD20020020211C40000F022028210C00A57802002021144000F8000000008FA200888FA3008C004080210060882166
S3FF40026B3013C000EF3C0280000200102102201821AFA30034AFA200308FA200303C0306B00043102100531023AFA200308FA5003C8FA400380C0093AD000000008FA700348FA60030006028210C00AB94004020218FA5003C8FA40038006038210C00AB7600403021AFA3003CAFA200388FA3005C8FB20038146000043C027FF00242102412620067000000008FA500248FA400B80C009328000000008FA400B80C00932802E028218FA400B80C00932802C028218FA400B80C00932802A0282108009A240000000008009A52004530238FA600688FA7006C0C00AB94020020210060882113C0004C00408021020010218FB200383C147FF0AFA2003002543F
S3FF40026C2A98243C027FE01662FFA7AFA300343C02FCB0024210218FA60038AFA200388FA7003C8FA5003C8FA40038AFA700440C0093ADAFA600408FA700348FA60030006028210C00AB94004020218FA400388FA5003C006038210C00AB7600403021AFA200388FA40038AFA3003C009410243C037CA00043102B1440007E3C0203503C027FEF8FA300403442FFFF1062014627A200403C027FEF3442FFFF2403FFFFAFA2003808009AEEAFA3003C08009A4A00E238238FA4005000003821000440230100202108009A450000A0218FA3003C000000001060004E3C02000F240200018FA4003810620068000000003C07400324E70EF88CE600008FA20070CD
S3FF40026D248FA300748CE70004AFA60030AFA70034008090210060882108009AAF004080213C02800008009B0702021026022028210C000DD4020020210C000D9C004020210060382102202821020020210C00AB56004030210060882117C0000A004080218FA2003C00000000144000073C0240033C02000F3442FFFF02421024104000B63C0240033C02400324420F108C4700048C460000022028210C00ACF802002021044000093C03400324630F188C6700048C660000022028210C00ACB0020020211840FF74000000008FA500248FA400B80C009328000000008FA400B80C00932802E028218FA400B80C00932802C028218FA400B88FA500540C00D2
S3FF40026E1E9328000000008FA400B80C00932802A0282108009900000000008FB200383442FFFF024210241440FFB3024020213C0240038C470C348C460C30022028210C00ACF802002021044001AC3C0340038C6707348C660730022028210C00AB9402002021004080213C0280000202102600608821AFA3003408009AAFAFA200300082102108009AE7AFA20038080099B400C0B8211480FF993C0740038FA700B824020022ACE20000AFA0003C08009B7BAFA00038AFB000200800994A0000102102A03021000068210000602108009947000050210202102608009AD0022018210C000E10004020210060882108009ACC004080211462022B2402003001
S3FF40026F18008048210000502125290001AFA9002081230000000000001062FFFB254A0001006038212462FFCF2C4200091040004A240D00018FB6002001406021246BFFD002C04821080098E9240A000124820001AFA20020808700010800997A24E2FFD008009BD9240E00010080902108009943240D00011040016B000381032A0200021440023D3C02400324540D6802808821000090213202000110400009000000008FA5003C8FA400388E2700048E2600000C00AB9400000000AFA3003CAFA20038001080432A020002265200011040FFF1263100088FA300383C04FCB000641821001210C002821021AFA300388FA400388FA5003C8C4700048C46A1
S3FF4002701200000C00AB9400000000AFA200388FA40038AFA3003C3C027CA03C037FF000831824344200010062102B1040013F3C027C90344200010062102B144001DF3C0203503C027FEF3442FFFF2403FFFFAFA20038AFA3003C08009A04AFA0005C0000A821080099430000602124420F208C4700048C460000006028210C00ACF8020020210441FEC80000000008009B7B000000008FA300583C1240038FA400B827A2002427A50020264618E427A70028AFA200100C00A25FAFA30014305100071220FCCB00409821240200061222FCC6000000008FA600240000000010C000092E2200078E4518E40C00948127A400488FA400B88FA500240C009328C0
S3FF4002710C000000002E2200078FA500281040000F326200083C0340030011108024630EA8006218218C6400000000000000800008000000003C027FFF3442FFFF2403FFFFAFA20038AFA3003C326200081040FCA93C0380008FA20038000000000043102508009900AFA200383C027FF0AFA2003808009C55AFA0003CAFA0003C08009C55AFA000388FA200488FA3004CAFA2003C08009C55AFA300383C02FFEF8FA3004C3442FFFF24A4043300621824000425008FA2004800832025AFA2003C08009C55AFA400388C4400042403FFFF1483FEB93C027FEF8FA400B824020022AC820000AFB4003808009B7BAFA0003C17C00060000000008FA2003C00001B
S3FF4002720600001440005C3C02000F8FA400383442FFFF00821024144000573C037FF03C0206B000831824344200010062182B14600051000000008EA200140000000014400006000000008EA20010000000002842000214400048000000008FA400B802A028210C0095DA240600010040202102C028210C00938E0040A8211840003E000000008FA400388FA5005C0000000010A001523C037FF03C0206B000831824344200010062102B1040014B3C020370344200010062102B1440FEFE3C023950AFA20040AFA000448FA5003C8FA400388FA700448FA600400C00AB9400000000AFA200388FA20038000000001440FEBEAFA3003C8FA2003C00000000EC
S3FF400273001440FEBA240200228FA400B808009B7BAC82000013C000D93C02000F8FA600383442FFFF00C2182410620062000000008FA5003C0000000030A200011040000F0000000013C00109000000008FB1003C8FB00038022028210C0093AD020020210060382102202821020020210C00AB7600403021AFA3003CAFA200388FA3005C000000001460FFCF3C02395008009B7B000000001200FD1D001080233203000F1060000C3C02400324420CA0000318C0006218218FA5003C8FA400388C6700048C6600000C000CF800000000AFA3003CAFA20038001081031200FD0C2A0200201040002E320200101040012C2405006AAFA5005C1A0000103C023F
S3FF400273FA400324510EC83202000110400009000000008FA5003C8FA400388E2700048E2600000C00AB9400000000AFA3003CAFA20038001080431600FFF3263100088FA6005C0000000010C0000F2403006B8FA50038000000000005104000021542006220231880000828820020144001202402FFFF2882003514400122AFA0003C3C020370AFA200388FA5003C8FA40038000038210C00AC88000030211440FCDE000000008FA300B824020022AC620000AFA0003C08009900AFA000388FA4005C8FA5003C1080000D2402FFFF3C037FF03C0206A000C31824344200010062102B104000062402FFFF000315022403006B006218232404FFFF00641004C6
S3FF400274F414A2FF9130A200013C027FF000C210243C03001000431021AFA2003808009CDFAFA0003C8FA3007C8FA20078006088218FA30064004080213C02BFE0AFA3003408009AAFAFA200308FA700B8240200223C037FF0ACE20000AFA3003808009900AFA0003C01203021000040210000A82100009821080098D600009021000068210000402100006021000050210000982100009021080099430000A82111420015018A6021250500010148202108009D6F00A03021001310400043982124C6000110C4000B2542FFFE24C2FFFF284200091440FFF8001318C028C200111040FFF7001218C00012104008009D6C0043902100A240212902000902404A
S3FF400275EE20211040003E25060001001318C00013104000431021004B9821080098ED00005021007588238FA50050262200160045102A1440FC633C10400326100CA0001110C0005010218FA5003C8FA400388C4700048C4600000C00AB94000000008FA600500060282100D12023000420C0009020218C8700048C8600000C00AB9400402021AFA3003C08009900AFA200388FA400383442FFFF008210241440FF29000000008FA5003C0000000014A0FF2830A2000108009CA3000000008FA700500000000028E2FFEA1440FC3E3C024003000718C024420CA0004310238FA5003C8FA400388C4700048C4600000C000CF800000000AFA3003C08009900FA
S3FF400276E8AFA2003828C2001110400004001218C00012104000431021004B2021080098ED0000502110E2FB952402006E14E2FB38000000003C0240038FA5002024440DE4808600000000000010C000352484000124A5000180A300000000000028620041144000042862005B1040000200000000246300201066FFF200000000080098FFAFB000208FB1003C8FB00038022028210C0093AD020020210060382102202821020020210C00AB560040302100602821004020210000382100003021AFA3003C0C00AC88AFA200381440FEF20000000008009BAE000000000060382108009BCF0000502100821021AFA2003808009A04AFA0005C3C037FF000839E
S3FF400277E218243C02000F3C04FFF03442FFFF00641821006218252402FFFFAFA3003808009CDFAFA2003C24A20001AFA2002080A3000124020028106200253C0540033C027FF8AFA2003808009900AFA0003C3C024003AFA4002024450DDC0080382180A600000000000010C0001624A5000124840001808300000000000028620041144000042862005B1040000200000000246300201066FFF224E20001AFA200203C027FF0AFA2003808009900AFA0003C24540D6808009BFB0000902108009CFDAFA0005C2482000108009E20AFA2002024A518D027A400200C00A49027A60048240300051443FFD73C027FF88FA3004C3C027FF0006218258FA2004885
S3FF400278DCAFA3003808009900AFA2003C8FA3003C008210040062182408009D20AFA3003C2402FFFF0082100400A2102408009D20AFA20038008010218F84801427BDFFE000A03021AFB10018AFB00014AFBF001C0C00988C004028210040802100602821020020210C0098480060882114400008022028210C00AD48020020218FBF001C8FB100188FB0001403E0000827BD00208FBF001C8FB100188FB00014000020210800980027BD0020008010218F84801400A030210800988C00402821000000000000000027BDFFC03C024003AFB700348C571860AFB60030AFB1001CAFBF003CAFBE0038AFB5002CAFB40028AFB30024AFB20020AFB00018AFA576
S3FF400279D60044AFA40040AFA6004800E0B02100A08821823000000000000002F018219062000000000000304200081440FFF9263100012402002D120200A62402002B120200820000F02112C0006F240200302402001012C2006C2402003002C09821001697C317C000730000A8213C147FFF2415FFFF3694FFFF02A0282102802021026038210C00A710024030210280202102A0282102603821024030210C00A59CAFA300100040682102F0102190440000006078213083000400005821000050210000602110600028240EFFFF2609FFD00136102A1040002E00000000118E001A01AA102B1440005700000000114D005301EB102B114D00660153001895
S3FF40027AD0000947C3240C0001000020120000000000000000024B001800002812008520210000000001730019000018120123282100A0582100001010008210210102402100A9202B0088202100805021823000000000000002F010219044000000000000308300041460FFDA26310001308200031040000830820001144000442402003724020057020248230136102A1440FFD400000000058000540000000017C00049000B302301602821014020218FA200480000000010400007000000001180003E000000002622FFFF8FA3004800000000AC6200008FBF003C0080102100A018218FBE00388FB700348FB600308FB5002C8FB400288FB300248FB23F
S3FF40027BCA00208FB1001C8FB0001803E0000827BD0040120200132402007816C0FF92240200301202003B241600082416000A2413000A13C0FF90000090210000A82108009E933C1480001040FFAD0000000008009EC7240CFFFF8230000008009E8726310001822300000000000010620003240200581462FFE9000000008230000124160010263100022413001008009E8E0000902108009ED602024823156FFF9A000000008FA30010000000000069102A1040FF96000947C308009EC7240CFFFF8FA2004408009EE6000000000006282B000A20230085202308009EDF00C0282182300000241E000108009E872631000117C0000B000000003C047FFF3D
S3FF40027CC42405FFFF3484FFFF8FA300402402002208009EDFAC6200002413000808009E8E000090210000282108009F333C0480000000000000000000000000003C02400327BDFFF88C4F1860AFB0000400A0502100808021814900000000000001E918219062000000000000304200081440FFF9254A00012402002D112200632402002B1122004D0000C82110E00040240200302402001010E2003D2402003000E07021172000033C0280003C027FFF3442FFFF15C00002004E001B0007000D0000582100006021000020100000681208009F762418FFFF2523FFD00067102A1040001C000000001198000901AB102B1440004200000000116D003E008396
S3FF40027DBE102A016E0018240C0001000010120062582181490000254A000101E910219048000000000000310300041460FFEB310200031040000831020001144000322402003724020057012218230067102A1440FFE600000000058000310000000017200002000B18230160182110C000060060102111800002000000002545FFFFACC50000006010218FB0000403E0000827BD00081122000D2402007814E0FFC12402003011220024240700082407000A1320FFBF240E000A08009F5D3C0280008149000008009F53254A0001814300000000000010620003240200581462FFEF000000008149000124070010254A000208009F59240E00101040FFC37A
S3FF40027EB8016E001808009F74240CFFFF08009F8201221823814900002419000108009F53254A0001132000073C027FFF240200223C03800008009F8AAE02000008009F59240E00083443FFFF2402002208009F8AAE0200000080102100A018218F84801400C038210040282108009F4000603021000000000000000027BDFFC83C024003AFB7002C8C571860AFB60028AFB10014AFBF0034AFBE0030AFB50024AFB40020AFB3001CAFB20018AFB00010AFA5003CAFA40038AFA6004000E0B02100A08821823000000000000002F018219062000000000000304200081440FFF9263100012402002D120200AB2402002B120200840000F02112C0006F2402CA
S3FF40027FB200302402001012C2006C24020030001697C32405FFFF2404FFFF02C038210C00A59C024030212405FFFF2404FFFF02C03821024030210060A8210C00A7100040A02102C098210060782102F010219044000000005821308300040000502100006021240EFFFF028068211060002802A0C0212609FFD00136102A1040002E00000000118E001A028A102B1440005C00000000114D005802AB102B114D006F01530018000947C3240C0001000020120000000000000000024B001800002812008520210000000001730019000018120123282100A0582100001010008210210102402100A9202B0088202100805021823000000000000002F0102148
S3FF400280AC9044000000000000308300041460FFDA263100013082000310400008308200011440004D2402003724020057020248230136102A1440FFD4000000000580004F2402002213C00006000B3023000A20230006282B0085202300C05821008050218FA2004000000000104000070000000011800048000000002625FFFF8FA3004000000000AC6500008FBF003401401021016018218FBE00308FB7002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD0038120200152402007816C0FF922402003012020037000000003C1599993C1419992416000A2413000A0000902136B599993694999908009FFF240F36
S3FF400281A600051040FFA8000000000800A028240CFFFF8230000008009FEB26310001822300000000000010620003240200581462FFE7000000003C140FFF82300001241600102631000224130010000090212415FFFF3694FFFF08009FFF240F000F0800A037020248231578FF910000000001E9102A1040FF8F000947C30800A028240CFFFF8FA3003800000000AC620000240BFFFF0800A043240AFFFF8FA5003C0800A04A0000000082300000241E000108009FEB263100013C141FFF2416000824130008000090212415FFFF3694FFFF08009FFF240F0007000000003C02400327BDFFF88C4F1860AFB0000400A0482100808021812A00000000000099
S3FF400282A001EA18219062000000000000304200081440FFF9252900012402002D114200662402002B1142004A0000202110E0003D240200302402001010E2003A240200302402FFFF14E000020047001B0007000D00E0C0210000C8100000681200005821000060210800A0D3240EFFFF2543FFD00067102A1040001C00000000118E000901AB102B1440004500000000116D00410323102A01780018240C00010000101200625821812A00002529000101EA10219048000000000000310300041460FFEB310200031040000831020001144000352402003724020057014218230067102A1440FFE60000000005800030240200221080000200000000000BCE
S3FF4002839A582310C000060160102111800002000000002525FFFFACC50000016010218FB0000403E0000827BD00081142000D2402007814E0FFC424020030114200243C021999344D99992407000A2418000A0800A0BF24190005812A00000800A0B325290001812300000000000010620003240200581462FFEF000000003C020FFF812A0001344DFFFF2529000224070010241800100800A0BF2419000F1040FFC0017800180800A0D1240CFFFF0800A0DF01421823AE0200000800A0E7240BFFFF812A0000240400010800A0B3252900013C021FFF344DFFFF24070008241800080800A0BF241900070080102100A018218F84801400C038210040282126
S3FF400284940800A0A0006030210000000027BDFFD8AFB3001C00A098218CA5003026620040AFBF0024AFB40020AFB20018AFB1001410A20024AFB000108E720034000000000012A0400C00B0D40280302110400013004088210052802102403021020020210C006F80004028218FBF002400002821AE740034AE700000AE71003000A010218FB400208FB3001C8FB200188FB100148FB0001003E0000827BD00288FBF00242405FFFF00A010218FB400208FB3001C8FB200188FB100148FB0001003E0000827BD00280C00B084240504001040FFF30040302192650042244403FD24020400AE620034AE660030A08500029263004100002821A0830001926217
S3FF4002858E004000000000A0C203FD8FBF0024AE64000000A010218FB400208FB3001C8FB200188FB100148FB0001003E0000827BD002827BDFFD82402FFFFAFB30020AFB10018AFB00014AFBF0024AFB2001C00A0882100C0802110A200240080982110800005000000008C8200380000000010400026000000009602000C000000003042FFDF00021400000214033044FFFF30830004A602000C10600041004028218E020030000000001040001C323200FF8E0200048E030034000000000043102A1040004C000000008E030000024088212462FFFFAE020000A072FFFF8E0200040000000024420001AE0200048FBF0024022010218FB300208FB2001C6D
S3FF400286888FB100188FB0001403E0000827BD00280C006BD4000000000800A181000000008E020010000000001040000F000000008E060000000000000046102B1040000B0000000090D1FFFF000000001632000724C3FFFF8E020004AE030000244200010800A19EAE0200048E0600008E030004240200012604004026050042AE02000424020003AE03003CAE060038AE040030AE020034AE050000A21200420800A19E024088213082001010400018308200081440000334A200040800A18BA602000C026020210C006B28020028211440000F000000009602000CAE0000083042FFF700402821A602000C34A20004AE0000180800A18BA602000C02609C
S3FF4002878220210C00A128020028211040FFB1000000000800A19E2411FFFF008010218F84801400A030210800A170004028213C0240033C03400324460F3824672FE4240500302404001000E5102190C5000124830001A044000024C6000114A0FFFA306400FF3C02400324460F30240500612404001A00E5102190C5000124830001A044000024C6000114A0FFFA306400FF3C02400324460F28240500412404001A00E5102190C5000124830001A044000024C6000114A0FFFA306400FF03E00008000000008C8300100080502100052143254B00140083102A104000210160382124630004248200040003188000021080014318210142102130A5001FC8
S3FF4002887C2468000414A0001E244C00040188102B10400014018020218C820000248400040088182BACE200001460FFFB24E70004000C1027004810210002108224420005000210800142102124420004004B10230002108310400008AD42001003E000080000000001601021004B1023000210831440FFFAAD42001003E00008AD400014244600088C4200042403002000C8202B006548231080001800A218068CC20000000000000122100400621025ACE200008CC3000024C6000400C8102B24E700041440FFF600A31806010C10232442FFFB000210822442000500021080014210212447000400E010211060FFDFACE300000800A23924E2000408003D
S3FF40028976A2590160102127BDFFC83C024003AFBE0030AFB7002CAFB3001CAFB20018AFBF0034AFB60028AFB50024AFB40020AFB10014AFB0001024522FE4924300300080F02100A0982100C0B821106000CAAFA700448E63000024020030906400020000000014820119247000022462000300004821240300309044000000408021252900011083FFFC24420001024410219043000000000000106000332402002E920500000200202100B2102190420000000030211040000B008088212484000190850000000000000245102190430000000000001460FFFA248400012484FFFF00808821000050212402002E10A200BD000000009085000010C000F677
S3FF40028A7000D110230002A08000A02021240200501082001D00000000240200701082001A0220382111400049AE6700001520000200008021241000068FBF0034020010218FBE00308FB7002C8FB600288FB500248FB400208FB3001C8FB200188FB100148FB0001003E0000827BD0038108200A3240200509204000002008821240A00011482FFE50000A021922300012402002B106200C1262500012402002D106200BA240B0001000058210243102190440000000000001080FFDB022038212882001A1040FFD82488FFF090A200010000000000521021904600000000000010C0001424A7000128C2001A1440000724E7000124E7FFFF0800A2E90100E0
S3FF40028B6A10211060000D0100102124E7000190E30000000828C00243182124C4FFF000081040906600000045102128C3001A14C0FFF400824021010010211160000200000000000810230282A0211540FFB9AE6700002622FFFF005020232883000814600146000000000000282100042043288200081040FFFD24A500010C0094D303C02021004098210211102B10400138267500140220382102A0402100002821000020212409002E0800A311240A002010AA002D000000000242182190620000000000003042000F00A21004008220250207102B1040000A00C0282124E7FFFF90E20000000000001449FFF124A6000400A030210207102B1440FFF838
S3FF40028C6400C02821251000040215802300108083AE7000100C009334AD040000001081408EF20000020228230245102A1440005F00B2102A1440004F02458023000088218EE20008000000000054102A1040001203C020210C009328026028218FA20048241000A30800A2AAAC400000AD04000090E200002508000400002821240600040800A308000020210C00A1EC000000000800A272000000008EE30004000000000283102A10400022241000010074B02302D2102A14400074240200028EE4000C00000000108200C02402000310820113240200011082010503C020210C009328026028218FA40048241000500800A2AAAC80000010C000E600D13B
S3FF40028D5E1023908500000800A29E0002A08092040001000000000092102190430000000000001460004726110001240A00010800A29F0000A0211220000B240200028EE3000C00000000106200E724020001240200031062007024020001106200A932220002361000108FA400488FA20044AC9300000800A2AAAC54000003C02021026028210C0095DA02003021004098210290A0230800A3282455001424A5000190A300000800A2C7024310210800A37E0000582100B28023026020210C0094A6020028211440000C2403000100008821026020210C00A211020028210800A3290290A0210800A2800000482100A020210800A29F0000A0212605FFFF04
S3FF40028E58000511432442000400021080026210218C44000400A31804006418241060FFED2411000128A200021440009A026020210C0094A62605FFFE10400096000000000800A38B24110003240200301482002A000000000220202124840001908500000000000010A2FFFC00A0302102451021904300000000000014600021240A00010220302100808021008088210800A297240900011220001226D0FFFF24110001001011430002108002A210218C4400002403000102031804006418241060000202C02821363100020C00A21102602021025690238EF400040800A365241000021A00FFEF026020210C0094A6020028210800A3BE004088210080DB
S3FF40028F523021022020210246102100C028219042000002203021008080210800A28A240900018FA2004C000000001040FF90000000008E76001002A0182126C200040002108002621021244400042405FFFF8C620000000000001445008D24420001AC600000246300040064102B1440FFF8000000008E6200080000000002C2102A1040008502C02021026088212482000400021080022210212484000124030001AC430004AE240010022098212402000212020065000000008E6200100000000002C2102A144000263250001F1600001A26C2FFFF0800A371241000218FA4004C000000001480FF4203C020218FA4004424020001AC8300008FA3004867
S3FF4002904CAEA20000AC730000AE6200100800A2AA241000621040FF57000000008EA200000000000002221025304200011440FFC2000000000800A3713610001000021080026210218C4400140C0093340000000024030020007018230043102A1040FF4624100021026020210C00A211240500018EE20008269400010054102A1440FEFB03C020210800A3712410002102A040210800A31A000020210800A2F9000028210800A38B2411000290850001000000000245102190430000000000001060004824910001022020212484000190850000000000000245102190430000000000001460FFFA248400012484FFFF022030210800A29B008088218FA38E
S3FF40029146004C0800A3DF0043102316D2FEFB000000002A4200021440FFB72645FFFF0C0094A6026020211040FEF403C020218EE300040800A40F000000008FA2004C000000001040FEED03C020210800A40F000000008EE20000000000002442FFFF10520003001211430800A371241000222442000400021080026210218C4400042403000102431804006418241060FFF6000000000800A371241000210800A3FFAC6200008E65000403C020210C0094D324A500018E6600102444000C24C60002000630802665000C0C006F800040882103C020210C009328026028218E2400100800A3F8248200040800A29B02203021000000000000000000000000CC
S3FF4002924027BDFFD83C024003AFB30020AFB2001CAFB10018AFB00014AFBF002424522FE4924300300080982100A080211060008B00C088218E0300000000000000031143000210803065001F10A000020222102124420004244EFFFC8E690000AC40FFFC01C0402101C06821000050210000782100003021241000082418002025290001912400000000000010800025000000000244102190430000000000001460004C2C8200211040006201EA102A1040FFF3010D102B104000130228102B28C20008104000100228102B02061023000260808D070000030C58230100302124C600048CC2000000CD202B0162180400E3182501823806ACC3FFFC1480CD
S3FF4002933AFFF8ACC700000228102B14400044000000002529000191240000000000001480FFDD240600081140004601003821010D102B104000050228102B28C2000814400053240200080228102B10400062022020218CE2000024E7000401C7182BAC8200001060FFFB24840004AC8000002484000401C4102B1040FFFC000000008DC20000000000001440000B00000000122E005901C018210800A4F82463FFFC122300552463FFFC8C620000000000001040FFFB000000008FBF0024240200058FB300208FB2001C8FB100188FB0001403E0000827BD002824C6000128C2000910400008254A00018D02000000000000000211003063000F00431025B5
S3FF400294340800A4AFAD0200000228102B1040FF9E000010212508FFFCAD0000000800A50A240600012508FFFCAD00000001006821014078210800A4AF00003021240200291082000D000000008FBF0024240200048FB300208FB2001C8FB100188FB0001403E0000827BD00280C00A1EC000000000800A49D000000001140FFF325220001AE6200001540FFAB010038210800A51F0000000000461023000258808D09000024020020004B50230100302124C600048CC2000000CD202B014218040123182501624806ACC3FFFC1480FFF8ACC900000228102B1440FFA00220202110A0FFA9000510238DC400002403FFFF00431806006410240800A4F0ADC20D
S3FF4002952E00008FBF002424020001AE2200008FB30020240200058FB2001C8FB100188FB0001403E0000827BD0028000000000000000027BDFFE0AFB000143C1040038E050F44AFB10018AFBF001C0C00A9BC0080882104410008000000000C00AA0C022020218FBF001C8FB100188FB0001403E0000827BD00208E050F440C00A918022020210C00AA0C004020218FBF001C3C038000004310218FB100188FB0001403E0000827BD002000000000000000000000000027BDFFE0AFB200183C1240038E470F4C8E460F48AFB10014AFB00010AFBF001C00A088210C00ACD40080802104410009022028210C000DD4020020218FBF001C8FB200188FB100142E
S3FF400296288FB0001003E0000827BD00208E470F4C8E460F480C00AB5602002021006028210C000DD4004020218FBF001C3C038000004310218FB200188FB100148FB0001003E0000827BD002000A0682100E058210080502100E0482114C0004E00A060210087102B1040006D3C02000100E2102B104000C43C0201002CE201001440015E0000102124020008240600183C034003004B10062463D97000431021904400000000000000C4302310C000060006102300CA1804004D10060043502500CD600400CB48040009340214C000020146001B0007000D3128FFFF000C2402000018120060382100001010000214000044182500E800180000201200643A
S3FF40029722102B1040000900641023006918210069102B1440000424E7FFFF0064102B14400139000000000064102314C000020046001B0007000D3185FFFF000020120000181000031C000065182500880018000030120066102B1040000A00071400006918210069102B144000052484FFFF0066102B10400002000000002484FFFF0007140000822825000020210080102100A0182103E00008000000000086102B1440001A000000003C02000100C2102B1440006C2CC201003C02010000C2102B144001022402001024020018240500083C034003004610062463D97000431021904400000000000000A460231580006F2402002000CA102B1440006A63
S3FF4002981C0000202101AB102B104000032405000100002021000028210080102100A0182103E000080000000014E000080122102B2402000114E000020047001B0007000D000048123C0200010122102B1440004B2D2201003C0201000122102B144000E12402001024020018240600083C034003004910062463D97000431021904400000000000000C458231560008E240200200149282300094402312EFFFF240700011500000200A8001B0007000D000C24020000181200605021000010100002140000441825014E0018000020120064102B1040000900641023006918210069102B14400004254AFFFF0064102B144000CA00000000006410231500BF
S3FF4002991600020048001B0007000D3185FFFF000020120000181000031C0000651825008E0018000030120066102B1040000A000A1400006918210069102B144000052484FFFF0066102B10400002000000002484FFFF000A14000082282500E020210080102100A0182103E00008000000001440009B00000000240200080800A5FC240500181440009E00000000240200080800A6222406001800E2102B1440009500000000240200180800A5AD240600080800A60D24050001004C102301862804004B180600654825004A200600094402150000020088001B0007000D312EFFFF018A1804004D100600435025000A3402000038120000281000052C006B
S3FF40029A1000A6282500EE00180000181200A3102B1040000B00A3102300A9282100A9102B1440000624E7FFFF00A3102B1040000400A3102324E7FFFF00A9282100A31023150000020048001B0007000D3145FFFF000020120000181000031C0000651825008E0018000028120065102B1040000B00071400006918210069102B144000062484FFFF0065102B1040000400071400006918212484FFFF000714000065282300824025018B1804010300190000181000A3102B144000460000000010A3003F00000000010028210800A60D0000202101694804004B1023004A180600094402150000020068001B0007000D312EFFFF016A2004004D10060044A5
S3FF40029B0A6025000C3402000038120000281000052C0000C5302500EE00180000181200C3102B1040000A00E0502100C9302100C9102B1440000624EAFFFF00C3102B1040000400C31023254AFFFF00C9302100C31023150000020048001B0007000D3185FFFF00002012008038210000181000031C0000651825008E0018000020120064102B1040000B000A1400006918210069102B1440000624E7FFFF0064102B10400004000A140024E7FFFF00691821000A1400016D6004006428230800A62F00E23825018D1004000018120043102B1040FFBE000000002505FFFF0800A60D000020210800A5FC24050010000010210800A5FC240500200800A622CD
S3FF40029C0424060010240200100800A5AD24060010000010210800A622240600200800A5AD2406002024E7FFFF0800A5D200691821254AFFFF0800A6440069182100A0582100E0402100E0482100A0682114C00042008050210087102B104000633C02000100E2102B104000C13C0201002CE20100144001650000102124020008240500183C034003004810062463D97000431021904400000000000000A41023144000FE004070210000702100093C0214E000020147001B0007000D3126FFFF000D24020000181200001010000214000044202500660018000028120085182B14E000020147001B0007000D1060000900851823008920210089102B1440F3
S3FF40029CFE0005008518230085102B10400002008920210085182314E000020067001B0007000D31A5FFFF00002012000010100002140000452825008600180000301200A6202B14E000020067001B0007000D1080007600A610230800A7C200A928210086102B14400076008028213C02000100C2102B144000752CC201003C02010000C2102B144001182402001024020018240500083C034003004610062463D97000431021904400000000000000A46023158000762402002000CA102B14400004016820230168102B1440000601402821014618230164102B00625023008068210140282101A0182103E0000800A0102114E000080122102B2402000194
S3FF40029DF814E000020047001B0007000D000048123C0200010122102B144000522D2201003C0201000122102B144000F82402001024020018240500083C034003004910062463D97000431021904400000000000000A460231580009A240200200149282300094402312FFFFF000070211500000200A8001B0007000D000D240200001812000010100002140000442025006F0018000030120086182B1500000200A8001B0007000D1060000900861823008920210089102B14400005008618230086102B144000D60000000000861823150000020068001B0007000D31A5FFFF00002012000010100002140000452825008F00180000301200A6202B150057
S3FF40029EF200020068001B0007000D1080000A00A6102300A9282100A9102B1440000600A6102300A6102B104000020000000000A9282100A6102301C218060000282100A0102103E00008000000000160182103E0000800A01021144000A300000000240200080800A76424050018144000A600000000240200080800A78C2405001800E2102B1440009D00000000240200180800A72124050008004C70230186180401C810060043682501CA2006000D4C02152000020089001B0007000D31AFFFFF01CB1006018A180400435025000A34020188C004000038120000281000052C0000A6282500EF00180000181200A3102B1040000A018B580400AD282170
S3FF40029FEC00AD102B1440000624E7FFFF00A3102B1040000400A3102324E7FFFF00AD282100A31023152000020049001B0007000D3145FFFF000020120000181000031C0000651825008F0018000028120065102B1040000B00071400006D1821006D102B144000062484FFFF0065102B10400004000714002484FFFF006D1821000714000082102500652823005800190000201000A4182B00004012146000460118102310A40063000000000800A86D00A420230002102301CA1804004B10060043502501C848040800A72B01CB680401894804004C1023004A2806000944021500000200A8001B0007000D312FFFFF018A1804004B100600435025000A22
S3FF4002A0E6340200003812000020100004240000C4182500EF0018000038120067102B1500000200A8001B0007000D1040000801807021006918210069102B144000040067102B10400002000000000069182100671823150000020068001B0007000D3145FFFF00002012000010100002140000452825008F00180000301200A6202B150000020068001B0007000D10800008018B680400A9282100A9102B1440000400A6102B104000020000000000A928210800A79900A6282301181023008D18230102202B0064182300A3202300404021016810230162182B008318230182100601C32004018328060044182503E0000800A01021000010210800A76442
S3FF4002A1E0240500200800A76424050010240200100800A72124050010000010210800A78C240500200800A78C240500100800A721240500200800A7B0008920210168102B1440FFDE000000000800A86D000020218C870000000000002CE2000214400044008040218CA30000000000002C62000214400041000000002402000410E20041000000001062003C0000000024020002106200460000000010E20037000000008C8A00088CA400088D0B000C014418238CA9000C0460006A0060382128E2002010400049008A102A186000572402000100E210042442FFFF004910240002102B00E91806004348258D0400048CA200040000000010820055012B63
S3FF4002A2DA10211080000201691023012B10230440005700000000ACCA0008ACC2000CACC000048CC5000C3C033FFF3464FFFF24A2FFFF0044102B1040000B00A01821008038218CC40008000518402462FFFF2484FFFF0047102B00602821ACC3000C1440FFF9ACC400082402000304600024ACC2000000C0402103E000080100102100A0402103E00008010010211467FFFA000000008CA300048C820004000000001043FFF5000000003C0240030800A8D424480F6014E3FFF0000000008C8200048C8300088C84000CACC20004ACC70000ACC30008ACC4000C8D0300048CA2000400C04021004310240800A8D4ACC200041040000C000000000800A8B207
S3FF4002A3D4000048218CC2000800032042306300010064182524420001ACC3000CACC200080800A8D400C04021008050210800A8B2000058211060FFAF00E210042442FFFF004B10240002102B00EB1806004358250800A8B201475021ACC40004ACCA0008ACC2000C0800A8D0004018210800A8A7000338230002182324020001ACC20004ACCA00080800A8BFACC3000C27BDFFA8AFB1005027B10018AFB0004CAFA4001027B00028AFA5001427A40010AFBF00540C00ADC80220282127A400140C00ADC8020028218FA2002C022020210200282127A60038384200010C00A88CAFA2002C0C00AD64004020218FBF00548FB100508FB0004C03E0000827BD6F
S3FF4002A4CE005827BDFFA8AFB1005027B10018AFB0004CAFA4001027B00028AFA5001427A40010AFBF00540C00ADC80220282127A400140C00ADC80200282102202021020028210C00A88C27A600380C00AD64004020218FBF00548FB100508FB0004C03E0000827BD005800000000000000000000000027BDFFB8AFB1004027B10018AFB0003CAFA40010AFA5001427A4001002202821AFBF00440C00ADC827B0002827A400140C00ADC8020028218FA40018000000002C82000214400039000000008FA50028000000002CA2000214400042240600048FA2001C8FA3002C00000000004310261086002CAFA2001C24020002108200290000000010A6003360
S3FF4002A5C80000000010A2003C000000008FA300208FA500248FA700348FA2003000A7202B0062102310800004AFA200202442FFFFAFA2002000052840000030213C044000000018212408001F00A7102B144000032463000100C4302500A72823000420421468FFF90005284030C3007F240200401062002430C20080AFA60024022020210C00AD64000000008FBF00448FB100408FB0003C03E0000827BD0048108500093C024003022020210C00AD64000000008FBF00448FB100408FB0003C03E0000827BD00480800A99C24440F60AFA00024AFA000200800A99C022020210C00AD64020020218FBF00448FB100408FB0003C03E0000827BD0048AFA6E9
S3FF4002A6C200180800A99C022020211440FFDC0000000010A0FFDA24C300402402FF8000623024AFA600240800A9920220202127BDFFB8AFB1004027B10018AFB0003CAFA40010AFA5001427A4001002202821AFBF00440C00ADC827B0002827A400140C00ADC8020028218FA20018000000002C42000210400007000000002402FFFF8FBF00448FB100408FB0003C03E0000827BD00488FA20028000000002C4200021440FFF6022020210C00ADFC020028210800A9D000000000000000000000000027BDFFD024020003AFB10024AFBF002CAFB20028AFB00020AFA200101480000C00048FC224020002AFA2001027A400100C00AD64AFB100148FBF002CEC
S3FF4002A7BC8FB200288FB100248FB0002003E0000827BD00301620000E3C028000008080212412001E02002021AFB200180C000E5CAFB0001C2442FFFF1840FFED0242182300501004AFA2001C0800A9EBAFA300181482FFF3000480233C0240038C420F500800A9EE0000000000000000000000000000000027BDFFD0AFA4001027A50014AFBF002C0C00ADC827A400108FA3001424020002106200122C620002144000102402000410620013000000008FA3001C000000000460000A2862001F1040000D2402001E004310238FA400188FA3002010800004004310060800AA2800021023000010218FBF002C0000000003E0000827BD00308FA20018000009
S3FF4002A8B60000144000053C027FFF8FBF002C3442FFFF03E0000827BD00308FBF002C3C02800003E0000827BD00308C87000027BDFFB02CE20002AFBE0048AFB30034AFB20030AFBF004CAFB70044AFB60040AFB5003CAFB40038AFB1002CAFB000280080902100A0F0211440008400C098218CA30000000000002C6200021440008C2402000410E2008C000000001062008824020002106200910000000010E20084000000008C8800088CA400088CB50014010418238CB400108E5700148E560010046000D10060282128A20040104000960088102A1860009D30A20020104000D5000518272402000100A2300400B42806AFA5001CAFA000180000182114
S3FF4002A9B02464FFFF0083102B24C3FFFF004310210054802400958824022028210200202100003821000030210C000F74AFA80020240300018FA80020104300030000000024110001000080218FA200188FA3001C0202A0250223A8258E4500048FC200040000000010A2009F02B7202110A0009902F5202302B720230296182302A4102B00621023044000A300042823AE680008AE620010AE640014AE6000048E6600148E67001024C5FFFF00A6102B24E3FFFF004318213C0410000064202B00E048211080001E00C040213C020FFF3442FFFF106200A43C020FFF8E680008344BFFFF3C0A100000062840000617C2000720400082202524A9FFFF2482FC
S3FF4002AAAAFFFF0125182B006218212508FFFF006A102B00A0302100803821AE640010AE65001410400005AE680008146BFFEF2D22FFFF1440FFEE0006284000E0482100C040213C022000240300030122102B1440000CAE6300008E650008000917C0000818420043182531040001008320250009104224A50001AE620010AE640014AE650008026090218FBF004C024010218FBE00488FB700448FB600408FB5003C8FB400388FB300348FB200308FB1002C8FB0002803E0000827BD00500800AACC03C090211467FFF0000000008CA300048C820004000000001043FFEB3C0240030800AACC2452D95014E3FFE7000000008C8200048C8300088E450010AA
S3FF4002ABA48E4600148C84000CAE620004AE670000AE630008AE64000CAE650010AE6600148E4300048FC2000402609021004310240800AACCAE62000410400004000000000000A8210800AA820000A021008040210000B8210800AA820000B0211060FF810000000010400047010540212402000100A2300400B62806AFA50014AFA00010000018212464FFFF0083102B24C3FFFF004310210056802400978824022028210200202100003821000030210C000F74AFA80020240300018FA80020104300030000000024110001000080218FA200108FA300140202B0250800AA820223B82502D4182302E4102B0800AA8D00621023029618210095102B004376
S3FF4002AC9E1021AE680008AE650004AE620010AE640014004048210800AABB008040210800AA5F00032823000220230005102B0082202324030001AE630004AE680008AE6400100800AA93AE650014001410400062100400B5180600431825AFA3001C2403000100A3180400B42806AFA500180800AA6C000030212CA2FFFF1040FF743C020FFF0800AAA20000000000051827001610400062100400B7180600431825AFA300142403000100A3180400B62806AFA500100800AB0A0000302127BDFF88AFB1007027B10020AFB0006CAFA5001427B00038AFA400100220282127A40010AFBF0074AFA7001C0C000F30AFA6001827A400180C000F300200282116
S3FF4002AD988FA2003C27A600500200282102202021384200010C00AA38AFA2003C0C000E88004020218FBF00740040302100C010218FB100708FB0006C03E0000827BD007827BDFF88AFB1007027B10020AFB0006CAFA5001427B00038AFA400100220282127A40010AFBF0074AFA7001C0C000F30AFA6001827A400180C000F300200282127A60050022020210C00AA38020028210C000E88004020218FBF00740040302100C010218FB100708FB0006C03E0000827BD00780000000027BDFF88AFB0006C27B00020AFB10070AFA50014AFA400100200282127A4001027B10038AFBF0074AFA7001C0C000F30AFA6001827A400180C000F30022028218FA308
S3FF4002AE920020000000002C62000214400073000000008FA40038000000002C8200021440007F2402000410620069000000001082007924020002106200680000000010820077000000008FA400348FA2004C8FAC0048008200198FB000300000581200005010000000000000000001840019000030100000381200000000000000000202001900001812006740210103202B0000101000462821008548210126102B1440008500007821112600810107102B0000782100007021010A4021010A102B104000060160682125E20001004F182B006E18210040782100607021020C00198FA300408FA200288FB1002400431021244A00043C022000AFAA00585F
S3FF4002AF8C8FB0003C00003812012720210089182B00003010008F282100661821006E182100A4202B0083302100C2102B1040004D3C0F80003C02100000C2102B1040001230A300FF8FA400583C0A100000051FC20006104000621025000D3FC200084840004A182B000D6840000528402484FFFF0500004E004030211460FFF400E94025AFA4005830A300FF240200801062004D30A20100023010260002102BAFA2005427A4005024020003AFA60060AFA500640C000E88AFA200508FBF007400402021008010218FB100708FB0006C03E0000827BD007824020002108200203C0240038FA200248FA3003C02002021004310260002102BAFA200240C0023
S3FF4002B0860E88000000008FBF007400402021008010218FB100708FB0006C03E0000827BD00781062000F3C0240038FA3003C8FA2002402202021004310260002102B0C000E88AFA2003C8FBF007400402021008010218FB100708FB0006C03E0000827BD00780800AC212444D9503C0E2000000627C0000518420006304230A20001000D60420008584200CE482B00083FC00083282510400003254A000100EC6825016F40251120FFF3000627C00800ABF0AFAA00580800AC0134A500011040FF7F000078210800ABD2240E00011440FFB402301026010D10251040FFB10230102624A200800045182B2404FF00006630210800AC080044282400000000B4
S3FF4002B18027BDFFA0AFB1005827B10020AFB00054AFA50014AFA400100220282127A4001027B00038AFBF005CAFA7001C0C000F30AFA6001827A400180C000F30020028218FA20020000000002C4200021440000D000000008FA20038000000002C42000214400008022020210C00AE50020028218FBF005C8FB100588FB0005403E0000827BD00608FBF005C240200018FB100588FB0005403E0000827BD00600000000027BDFFA0AFB1005827B10020AFB00054AFA50014AFA400100220282127A4001027B00038AFBF005CAFA7001C0C000F30AFA6001827A400180C000F30020028218FA20020000000002C4200021440000D000000008FA200380000DE
S3FF4002B27A00002C42000214400008022020210C00AE50020028218FBF005C8FB100588FB0005403E0000827BD00608FBF005C240200018FB100588FB0005403E0000827BD00600000000027BDFFA0AFB1005827B10020AFB00054AFA50014AFA400100220282127A4001027B00038AFBF005CAFA7001C0C000F30AFA6001827A400180C000F30020028218FA20020000000002C42000210400007000000002402FFFF8FBF005C8FB100588FB0005403E0000827BD00608FA20038000000002C4200021440FFF6022020210C00AE50020028210800ACC60000000027BDFFA0AFB1005827B10020AFB00054AFA50014AFA400100220282127A4001027B00038D2
S3FF4002B374AFBF005CAFA7001C0C000F30AFA6001827A400180C000F30020028218FA20020000000002C42000210400007000000002402FFFF8FBF005C8FB100588FB0005403E0000827BD00608FA20038000000002C4200021440FFF6022020210C00AE50020028210800ACEA0000000027BDFFA0AFB1005827B10020AFB00054AFA50014AFA400100220282127A4001027B00038AFBF005CAFA7001C0C000F30AFA6001827A400180C000F30020028218FA20020000000002C4200021440000D000000008FA20038000000002C42000214400008022020210C00AE50020028218FBF005C8FB100588FB0005403E0000827BD00608FBF005C240200018FB1DB
S3FF4002B46E00588FB0005403E0000827BD00600000000027BDFFA0AFB1005827B10020AFB00054AFA50014AFA400100220282127A4001027B00038AFBF005CAFA7001C0C000F30AFA6001827A400180C000F30020028218FA20020000000002C4200021440000D000000008FA20038000000002C42000214400008022020210C00AE50020028218FBF005C8FB100588FB0005403E0000827BD00608FBF005C240200018FB100588FB0005403E0000827BD00600000000027BDFFC8AFA50014AFA4001027A50018AFBF00340C000F3027A400108FA4002C3C033FFF8FA200283463FFFF008318240002108000042782106000020044382534E700018FA400186D
S3FF4002B5688FA5001C8FA600200C00AE44000000008FBF00340000000003E0000827BD003800000000000000008C8300008C85000C2C6200028C8600041440000C3C02000F24020004106200130000000024020002106200030000182114A0001200000000000617C003E00008006210253442FFFF3C03007F00A210253463FFFF004310243C047F8000441825000617C003E00008006210253C037F80000617C003E00008006210258C840008000000002882FF821440001B288200801040FFF630A3007F240200401062000E2484007F24A5003F04A00010000000003C02007F000519C23442FFFF308400FF00621824000425C000831825000617C003E074
S3FF4002B66200080062102530A200801040FFF2000000000800AD8E24A50040000528420800AD90248400012402FF82004420232883001A1060001A0000000024020001008210042442FFFF004510240002102B00851806004318253064007F24020040148200123C024000306200801040000200000000246300403C0240000062102B38450001000319C23C02007F3442FFFF0062102400051DC00800AD7200621825000028210800ADBA000018212463003F0062102B384500010800ADBA000319C28C83000000000000000315C2304600FF3C02007F000327C23442FFFFACA4000414C00013006220241080000E240300032402FF82ACA30000ACA2000815
S3FF4002B75C000419C03C0640002404FF82000318400066102B1440FFFD2484FFFFACA3000C03E00008ACA400082402000203E00008ACA20000240200FF10C20009000411C03C0340000043102524C4FF81ACA2000C24020003ACA4000803E00008ACA20000108000073C020010008210241440000724020001ACA2000003E00008ACA4000C2402000403E00008ACA200000800ADF5ACA000008C830000000000002C62000214400016000000008CA60000000000002CC20002144000110000000024020004106200100000000010C2001824020002106200140000000010C2000C000000008C8300048CA2000400000000106200150000000014600009000064
S3FF4002B856000003E000082402000110C30025000000008C820004000000001040FFF90000000003E000082402FFFF10C3001B000000008CA20004000000001040FFF9000000000800AE16000000008C8700088CA600080000000000C7102A1440FFE700E6102A14400009000000008C86000C8CA4000C000000000086102B1440FFDF00C4102B10400005000000001060FFE5000000000800AE160000000003E00008000010218CA300048C82000403E0000800621023000000000000000027BDFFD8AFA4001027A40010AFBF0024AFA50014AFA600180C00AD64AFA7001C8FBF00240000000003E0000827BD00288C830000000000002C62000214400016F9
S3FF4002B950000000008CA60000000000002CC20002144000110000000024020004106200100000000010C2001824020002106200140000000010C2000C000000008C8300048CA20004000000001062001500000000146000090000000003E000082402000110C30027000000008C820004000000001040FFF90000000003E000082402FFFF10C3001D000000008CA20004000000001040FFF9000000000800AE6A000000008C8700088CA600080000000000C7102A1440FFE700E6102A14400018000000008C8700108CA600108C88001400C7102B8CA400141440FFDE0000000010E600130088102B00E6102B1440000C0000000010C700070000000003E096
S3FF4002BA4A0008000010218CA300048C82000403E00008006210230104102B1040FFF8000000001060FFD6000000000800AE6A000000001040FFEE00E6102B1060FFC8000000000800AE720000000000000000000000000000000027BDFFE0AFBF001C008028214007600000000000400668000000000040027000000000003C04400324840F700C0027DAAFA200100C003A4C2404000127BDFFE0AFB10014AFBF001CAFB20018AFB000100080882140026000000000004003680000000000004310243042FF0000021202304300801060001E305200FF3C02A0003442001C8C5000000000000032030001AC5000001060000B320200043C0240038C432390D0
S3FF4002BB44000000008C6200A800000000104000E02404002A0040F80902202821320200041040000B001280403C0240038C432390000000008C6200AC00000000104000E02404002B0040F8090220282100128040320200801040003E3C03A0058C62000000000000304200101040000B3C02A0053C0240038C432390000000008C62009C00000000104000CA240400270040F809022028213C02A005344200088C43000000000000306300101060000B3C02A0013C0240038C432390000000008C62009C00000000104000B6240400270040F809022028213C02A001344202048C43000000000000306303001060000B3C02A0013C0240038C4323900000AA
S3FF4002BC3E00008C6200A00000000010400092240400280040F809022028213C02A001344203048C4300000000000030630300106000093C0240038C432390000000008C6200A40000000010400087240400290040F809022028210010804032020080104000093C0240038C432390000000008C6200980000000010400073240400260040F809022028210010804032020080104000093C0240038C432390000000008C6200940000000010400063240400250040F8090220282100108040320200801040001F3C02A001344200048C43000000000000306303001060000B3C02A0013C0240038C432390000000008C62008C000000001040006424040023FD
S3FF4002BD380040F809022028213C02A001344201048C4300000000000030630300106000093C0240038C432390000000008C6200900000000010400051240400240040F809022028210010804032020080104000093C0240038C432390000000008C6200880000000010400031240400220040F8090220282100108040320200801040000B001010403C0240038C432390000000008C6200840000000010400020240400210040F8090220282100101040304200801040000E3C0240038C432390000000008C790080000000001320000E24040020022028218FBF001C8FB200188FB100148FB000100320000827BD00208FBF001C8FB200188FB100148FB0CE
S3FF4002BE32001003E0000827BD00208FBF001C8FB200188FB100148FB000100800AEA827BD00200C00AEA8240400210800AF79001010400C00AEA8240400220800AF6C001080400C00AEA8240400250800AF3E001080400C00AEA8240400260800AF32001080400C00AEA8240400280800AF173C02A0010C00AEA8240400290800AF26001080400C00AEA8240400240800AF60001080400C00AEA8240400230800AF513C02A0010C00AEA82404002A0800AED9320200040C00AEA8240400270800AF073C02A0010C00AEA8240400270800AEF73C02A0050C00AEA82404002B0800AEE50012804000000000000000000000000000A02021080021CC00C028215D
S3FF4002BF2C000000000800234800A02021000000000000000027BDFFE0AFB10018AFBF001CAFB0001410A0003600A088213C0340038C621420000000000082102B104000210004188000041100004310233C034003004410218C64218C00021080008280218E03000C000000003063010010600015000000008E0200300000000010400011000000008C420018000000001040001700A02021240600500C007038000028218E030030260400108C790018022028218FBF001C8FB100188FB000140320000827BD00200C006AC80000000024030009AC4300008FBF001C2402FFFF8FB100188FB0001403E0000827BD00200C006AC8000000002403008608001B
S3FF4002C026B000AC4300000C006AC8000000002403000E0800B000AC43000000A020210800AFD000C028210000000003E000082402000103E000082402000127BDFF98AFBF00640C00AFD027A5001004400008000010218FA2001C8FBF00643042F000384220002C42000103E0000827BD00688FBF00640000000003E0000827BD00680000000000000000000000003C0240038C43142027BDFFE00083182BAFBF001CAFB100181060003EAFB000140004188000041100004310233C034003004410218C64218C00021080008280218E03000C000000003063010010600031000000008E030030000000008C6200140000000010400031240200018E1100084B
S3FF4002C12010C200252402000210C200130000000014C0001600000000AE0500088C630014000000000060F80902002021004018212402FFFF1462000200000000AE1100088FBF001C006010218FB100188FB0001403E0000827BD00208E0200040000000000A210210800B04FAE0200080C006AC800000000240300168FBF001CAC4300002403FFFF006010218FB100188FB0001403E0000827BD002000B110210800B04FAE0200080C006AC80000000024030009AC4300000800B0582403FFFF0C006AC80000000024030086AC4300000800B0582403FFFF00A0202100C028210800B02C00E030210000000000000000000000000800244C00A02021000038
S3FF4002C21A0000000000003C0240038C43142027BDFFE80083182BAFBF00141060002DAFB000100004188000041100004310233C034003004410218C64218C00021080008280218E03000C0000000030620100104000200000000010A000240000000010C000163062000210400020000000008E020030000000008C4200080000000010400020000000000040F8090200202118400005004018218E0200080000000000431021AE0200088FBF0014006010218FB0001003E0000827BD00188FBF001400001821006010218FB0001003E0000827BD00180C006AC80000000024030009AC4300000800B0B02403FFFF0C006AC80000000024030016AC4300006E
S3FF4002C3140800B0B02403FFFF0C006AC80000000024030086AC4300000800B0B02403FFFF00A0202100C028210800B08800E0302100000000000000000000000000A020210800B0E000C028210000000000A0202100C028210800B13800E0302100A0202100C028210800B1800000302127BDFFD03C024003AFB30028245322008E6300103C0240038C4624B42463000124020003AFB20024AFB0001CAFBF002CAFB10020AE6300100080802110C2001C00A090211200001600000000124000253C114003262421A8020028210C00B34427A6001010400023262421A8020028210C00B3600240302110400023000000008FBF002C020010218FB300288FB20C
S3FF4002C40E00248FB100208FB0001C03E0000827BD00300C00244C024020210800B100004080213C0240038C43231400000000106000033C0240030800B100000080218C4323B0000000001060FFDB000000000800B100000080210C002348020020210800B100000080210C006AC800008021240300160800B100AC4300000C00244C02402021004088218E620004000000002442FFFF1220FFE8AE6200048FA30010000000000072102B10400002024020210060202100803021020028210C006F80022020210C002348020020210800B100022080213C0240038C43142027BDFFE80083182BAFBF00141060002DAFB0001000041880000411000043102336
S3FF4002C5083C034003004410218C64218C00021080008280218E03000C0000000030620100104000200000000010A000240000000010C000163062000410400020000000008E020030000000008C42000C0000000010400020000000000040F8090200202118400005004018218E0200080000000000431021AE0200088FBF0014006010218FB0001003E0000827BD00188FBF001400001821006010218FB0001003E0000827BD00180C006AC80000000024030009AC4300000800B1602403FFFF0C006AC80000000024030016AC4300000800B1602403FFFF0C006AC80000000024030086AC4300000800B1602403FFFF00000000000000000000000027BD56
S3FF4002C602FFC0AFB2002CAFB10028AFB00024AFBF003C00808021AFB50038AFB40034AFB3003000A088210C00B01400C09021145000D300000000122000D7000000002625FFFF2CA20020104000D30011A0803C0240030011990024552A800274182302A318218C620008240400011044005300001021240200081222004B24020004122200492402000B1222004700A48004AFA40014124000B2AFB100108E42000000000000AFA200183C0340038C6223140000000024420001AC6223143C0240038C4423D4000000008C83010C000000008C6200C40000000000021027020210241440001F3C0240033C03400324482C0C24632C3C8D0500002507000405
S3FF4002C6FC10A7004E000000008CA2003000000000020210248CA6010C1040000C00A020210800B1D9240200018CA500000000000010A70042000000008CA200308CA6010C020210241440000700A020218CC200C40000000000021027020210241040FFF20000000024020001A0820075022028210C00B29027A600101440002C020020210C00B2740274882302B110218C44000024030002108300133C0440030C00456E000000000800B1EF000010210C00B33C00000000004020210C00B2F0022028218FBF003C8FB500388FB400348FB300308FB2002C8FB100288FB0002403E0000827BD00400C003C8C24842C0010400071004028218FA400188FA3EB
S3FF4002C7F600148FA20010ACA400103C04400324842C50ACA20008ACA3000C0C003C74009120210C00456E000000000800B1EF000010210C00456E000000000800B1EF000010212508000C1503FFAD3C024003904315043C024003246900013C034003244B22D4246322E0000020213C0D10008D6200000000000010400035012030218C420004000000001040003100000000944A00108C42001C1140002D00000000004040218C4500040000000010A00024240700018CA60014000000000126102B1440001E000000008CA2010C000000001040001A000000008C4200C40000000000021027020210241040001400C9102B14400009000000008C82001009
S3FF4002C8F0000000001040000E000000008CAC00100000000015800018004D102424E700010147102B00A020211440000A250800048D0500040000000014A0FFDF00C048210120302124E700010147102B1040FFF825080004256B0004146BFFC600C048211480FF84240200010800B1DF020020210800B1AAAFA000181440FFF1018D10241440FFE6000000000800B24D012030210C006AC80000000024030003AC4300000800B1EF2402FFFF0C006AC80000000024030016AC4300000800B1EF2402FFFF0C006AC8000000002403000BAC4300000800B1EF2402FFFF00000000000000000080382140066000000000002402FFFE00C210244082600000008F
S3FF4002C9EA00003C0540038CA42C4C00000000148000053C0340038C6223B80000000024420001AC6223B800E41025ACA22C4C40026000000000002403FFFE0043102430C4000100441025408260000000000003E00008000000008C8700103C0A100027BDFFE835428000AFB0001024A3FFFF008080212409000100E22024AFBF00148E08010C10820029006918048D0200C40000000000021027006210241040001E00EA102410400012A20900752402000430E3000810600018AE0200348E030050240200021062003F000000003C051003020020210C00440C34A5FFF88FBF0014000010218FB0001003E0000827BD001814E000093C0240038C4323B084
S3FF4002CAE400000000106000053C0240038C4323D400000000120300253C024003000010218FBF00148FB0001003E0000827BD00188E0200300000000000621024104000130000000024020004AE0200348E07002810C00019240200018CC200088CC300008CC40004ACE20008ACE30000ACE400040C004830020020218FBF0014240200018FB0001003E0000827BD00188D0200C40000000000021027006210241440FFE9000010210800B2C100000000A04924680800B2C100001021ACE50000ACE200040800B2D5ACE000080C004DE8260400480800B2AE3C0510030000000027BDFFD0AFB1002000A08821AFBF002CAFB30028AFB20024AFB0001C122052
S3FF4002CBDE0035008028212633FFFF2E620020104000313C044003248427440C0041FC27A60010004080218FA20010000000001440002F00112080001119003C0240030064182324422A80006218218C640008241200018E05010C10920013027218048CA200C80000000000431025ACA200C802002021022028210C00B290000030213C0340038C6223B00000000010400006A21200753C0240038C4323D4000000001203000B3C0240030C00456E00000000000010218FBF002C8FB300288FB200248FB100208FB0001C03E0000827BD00300800B321A05224680C006AC80000000024030016AC4300000800B3242402FFFF0C006AC80000000024030003D7
S3FF4002CCD8AC4300000800B3242402FFFF0000000000000000000000003C0240038C4323D4000000008C62000803E0000800000000000000000000000027BDFFD8AFB300203C134003AFB2001C008090218E6423CCAFB10018AFB0001400C08821AFBF00240C003BB000A0802102402021020028210C00B420022030218E6423CC0C003C64004080218FBF0024020010218FB300208FB2001C8FB100188FB0001403E0000827BD00280000000027BDFFC8AFB300303C134003AFB2002C008090218E6423CCAFB10028AFB0002400C08821AFBF00340C003BB000A0802102402021020028210220302127A7001827A2001C0C00B380AFA200108E6423CC0C009A
S3FF4002CDD23C64004080218FBF00342E0200018FB300308FB2002C8FB100288FB0002403E0000827BD0038000000000000000027BDFFD0AFB400248FB400408C8C00148C8B0010ACE00000AE8000008C820010AFB100181440000200A2001B0007000D0080882124A3FFF88E290020AFB00014AFBF002CAFB50028AFB30020AFB2001C8E28002400002010006480230209102B14400005240300020110102B1040000C2404FFFE240300028FBF002C006010218FB500288FB400248FB300208FB2001C8FB100188FB0001403E0000827BD00308E0D00040000000001A49824021350210149102B1440FFF024030002010A102B1440FFED000000008D43000476
S3FF4002CECC00000000306200011040FFE70000000000644824110A0051014970218DC20004000000003048000101451023244200040046182BACE200001060001431B50001150000100000000000C230231560000200CB001B0007000D0000381010E0000400CC102B00CB10210047302300CC102B1440002D000000000126102B1040002C000000000800B39E240300010046102315600002004B001B0007000D00001810004390231240001B02722023008C102B104000040184102302429023124000150082202115000027024C102B02491821009510253465000102042021AE020004ADC30000AC8500048E2200308D45000C8D46000800521021246318
S3FF4002CFC6FFFCAE220030AC860008AC85000CAE830000ACA40008ACC4000C8E22005400001821244200010800B39EAE2200540800B3D101803021014028210C003F46022020210053102100551025AE0200048E220040000000002442FFFF0800B3F8AE2200400800B3BD240800011440FFEB009510250204282136430001AE020004ACA300048E2200408E230050244200012463FFFFAE230050AE22004024A500080C005D88022020212643FFFC0800B3F8AE83000000000000000000008C8700208C88002400A7102B14400004000000000105102B104000030000000003E00008000010218C83001024A4FFF81460000200A3001B0007000D0000101049
S3FF4002D0C0008220230087182B1460FFF5000000000104102B1440FFF22403FFFE8C8200040000000000431024008220210087182B1460FFEB000000000104102B1440FFE8000000008C82000400000000304200011040FFE3000000000085102324420004ACC2000003E0000824020001000000003C0240038C44100027BDFFE02403FFFFAFBF001CAFB1001810830009AFB00014245010002411FFFF0080F8092610FFFC8E040000000000001491FFFB000000008FBF001C8FB100188FB0001403E0000827BD00200000000000000000000000000000000C000000000100017C1F0C1D000000000C0000001440029670000005D00000000C000000244002CD
S36F4002D1BA9C40000005F00000000027BDFFE0AFBF001404110001000000000C0000DA0000000004110001000000000C00B44C000000008FBF001427BD002003E000080000000027BDFFE0AFBF001404110001000000000C0000A8000000008FBF001427BD002003E0000800000000DE
S3FF4002D2305365742063757272656E742074696D6520616E6420646174652100004461746500000000596561722020203A2000000025754C004D6F6E746820203A20000000446179202020203A2000000054696D6500000000486F75722020203A200000004D696E757465203A200000005365636F6E64203A20000000496E76616C696420646174652E2054727920616761696E2E000000000A4F4B3F205B792F6E5D3A20000000002573000073656C3D25640A000A0A2A2A2A2053414D504C452053494E474C452050524F434553534F52204150504C49434154494F4E202A2A2A0000004372656174696E6720616E64207374617274696E6720616E2061A1
S3FF4002D32A70706C69636174696F6E207461736B00000043616E277420637265617465207461736B3A20257300000043616E2774207374617274207461736B3A20257300000000000000004002E730000000010000000000000000000000010000000000000000000000007274656D735F696E746572727570745F636174636828293A204572726F7220253038580A000000004170706C69636174696F6E207461736B2077617320696E766F6B6564207769746820617267756D656E742028307825782920616E6420686173206964206F6620307825780A0000007274656D735F636C6F636B5F67657428293A204572726F7220253038580A00002F646576BF
S3FF4002D4242F70736175783000772B00004572726F72206F70656E696E67202F6465762F74747953300A000000534452414D204D656D6F727920546573740A0000546573742073697A65202564206B427974650A0A000000005A65726F697A65204D656D6F727920286D656D736574292E2E2E0000646F6E652028252E3266204D427974652F73290A000000005A65726F697A65204D656D6F72792028382D42697420616363657373292E2E2E000000005A65726F697A65204D656D6F7279202831362D42697420616363657373292E2E2E0000005A65726F697A65204D656D6F7279202833322D42697420616363657373292E2E2E000000577269746520AB
S3FF4002D51E28382D42697420616363657373292E2E2E005665726966792028382D42697420616363657373292E2E2E000000006661696C65640D0A000000007061737365642028252E3266204D427974652F73290A00005772697465202831362D42697420616363657373292E2E2E00000000566572696679202831362D42697420616363657373292E2E2E0000005772697465202833322D42697420616363657373292E2E2E00000000566572696679202833322D42697420616363657373292E2E2E0000004D656D63707928292054657374200A00436F7079696E67202564206B42797465732E2E2E000000004D656D6D6F766528292054657374200AFE
S3FF4002D618000000004D6F76696E67202564206B42797465732E2E2E00536D616C6C206461746120746573740D0A000000426F6F7420636F64652072656164200A0000000056657269667920426F6F7420636F64652E2E2E007061737365640D0A000000004170706C69636174696F6E207461736B2077617320696E766F6B6564207769746820617267756D656E74202825642920616E6420686173206964206F6620307825780A0025640000253032643A253032643A25303264202020253032642F253032642F253034640A00000000547279696E6720746F2072657374617274207461736B203078253038782E2E0073756363657373006661696C656454
S3FF4002D7120000547279696E6720746F2073757370656E64207461736B203078253038782E2E00496E746572727570742025640A0000000000000000000000000000000C45172614EE2641095018780D370AEB01201065069D26D113F120111D4611F00C060668188E082926861F62203D10731B9B265D12C819710B0702981BB520FE03BB0246090D09E724C005041FAF1D1A0B19010E0792145B022B25AC1855131F13420EEB192A226A261C19C10D7605041D8C20291EBB207C149707E3039216101625092A015C17D8153819F8085524901C5C09BB101F0E8C16EE029418AB16F91D4005F023F9188A242603950600110F22DD234C000B0CE90BEE227439
S3FF4002D80C1239085A1032252F1037064910EA165F016D1DAB23EB0C14074506CA078C17E5245E13FE15681D16094B259B135C1CB722991498131B08E70EEA0BC325130BA70E590E280FE119F3035C085B13520F7009A91C161B6D1F3203AF1B731B8D240106E224651A600F061D3921131A26020107D016310A9A148F15E80ADA168B0D631692258906C80E852211124C0FFA04C8253E0BC6199516DD1BC103180AEC22DD22DB152C07CB17E0050A0894036001580717265518991D35051D2585074E1C2B0DAB270F20B42634138304231C950CD117D00C714170000000000000313131313838363A363A3F3F4141464648484D4D4F4F3535353537373939A1
S3FF4002D90640403E3E3E424242474749494B4B0000000043403D3A3A4340403D3D403D3A43403D3A43403D3A433533312F3531332F353133312F33312F3533312F353300000000C1E000000000000000000000000000000000000000000000000000000000000000000000000000000001020203030303040404040404040405050505050505050505050505050505060606060606060606060606060606060606060606060606060606060606060607070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707080808080808080808080808080808085C
S3FF4002DA00080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808085254454D53000000626F6F74636172643A20576F726B20737061636520746F2062696720666F7220776F726B2061726561210A00626F6F74636172643A2043616E6E6F7420696E697469616C697A652043206C696272617279210A000A2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0000006D696E6F72202020202070
S3FF4002DAFA2020202020203D2025640A00000063636F756E74202020202020202020203D2025640A00000063696E646578202020202020202020203D2025640A0000006C6F77776174657220202020202020203D2025640A000000686967687761746572202020202020203D2025640A000000726177496E42756644726F70706564203D2025640A000000726177496E4275662E53697A652020203D2025640A000000726177496E4275662E486561642020203D2025640A000000726177496E4275662E5461696C2020203D2025640A0000007261774F75744275662E53697A6520203D2025640A0000007261774F75744275662E4865616420203D20256477
S3FF4002DBF40A0000007261774F75744275662E5461696C20203D2025640A000000636F6E736F6C655F636F6E74726F6C28293A206D696E6F723D25642C20617267733D25730A000000505332204D6F7573652072656769737465720A00505332204D6F75736520756E72656769737465720A0000002F6465762F747479533000002F6465762F747479533100002F6465762F707361757831002F6465762F636F6E736F6C65000000002F6465762F6D6F75736500000000000000000000000000004000456C0000000040005DF440005D04400045140000000000000000000000004000456C0000000040005DF440005D044000451400000000000000000000D0
S3FF4002DCEE000040004840400048F440004870400048B0400048080000000000000000000000005549445F51756575653A206572726F72206F70656E2071756575653A2025640A000000004465766963653A202F6465762F6D6F757365202D2D206D6F75736520747970652069733A2025730A00000000707332006B62643A206D73673A206B6579636F64653D25582C206D6F643D25580A0000002F6465762F727463000000004002DF204002DF244002DF304002DF3C4002DF484002DF584002DF684002DF804002DF904002DF984002DFA44002DFBC4002DFD44002DFE04002DFE84002E00C4002E01C4002E0284002E0344002E0404002E04C4002E0585F
S3FF4002DDE84002E0644002E0704002E0784002E0844002E0904002E09C4002E0A84002E0B44002E0C04002E0CC0000001F4002E0EC000000024002E0F4000000034002E0FC000000044002E104000000054002E10C000000064002E114000000074002E11C000000084002E124000000094002E12C0000000A4002E1340000000B4002E13C0000000C4002E1440000000D4002E14C0000000E4002E1540000000F4002E15C000000184002E164000000214002E16C000000224002E1740000001C4002E17C0000001E4002E184000000014002E18C000000254002E194FFFFFFFF00000000000000000000000020202025730000002020253038582563000050
S3FF4002DEE20000556E68616E646C656420657863657074696F6E2025640A0073723A20307825303878202063617573653A20307825303878202D2D3E2025730A000000496E7400544C42204D6F647300000000544C42204C6F616400000000544C422053746F726500000041646472657373204C6F616400000000416464726573732053746F7265000000496E737472756374696F6E20427573204572726F720000004461746120427573204572726F72000053797363616C6C00427265616B706F696E740000526573657276656420496E737472756374696F6E00000000436F70726F636573736F7220556E75736561626C650000004F766572666C6F77C7
S3FF4002DFDC000000005472617000000000496E737472756374696F6E205669727475616C20436F686572656E6379204572726F7200465020457863657074696F6E00000000526573657276656420313600526573657276656420313700526573657276656420313800526573657276656420313900526573657276656420323000526573657276656420323100526573657276656420323200576174636800000052657365727665642032340052657365727665642032350052657365727665642032360052657365727665642032370052657365727665642032380052657365727665642032390052657365727665642033300044617461205669727475E8
S3FF4002E0D6616C20436F686572656E6379204572726F7200000000525F524100000000525F563000000000525F563100000000525F413000000000525F413100000000525F413200000000525F413300000000525F543000000000525F543100000000525F543200000000525F543300000000525F543400000000525F543500000000525F543600000000525F543700000000525F543800000000525F4D444C4F0000525F4D4448490000525F475000000000525F465000000000525F415400000000525F455043000000636F6E736F6C655F726561645F696E74657272757074282564293A204C6F737420256420636861726163746572730A0055415254C2
S3FF4002E1D025645F6973723A204C6F737420256420636861726163746572730A005053325F636D64282564293A206E6F2041434B2072656365697665642E20526573756C74203D20253038580A000000005053325F696E697428256429202D20496E697469616C697A652E2E2E200000005265736574206572726F7220253038580A000000424154206572726F7220253038580A00537563636573730A000000005053325F696E697428256429202D204B6579626F6172642064657465637465640A000000476574204465766963652D4944206572726F7220253038580A0000005053325F696E697428256429202D204465766963652D49443A2025303258A5
S3FF4002E2CA253032580A00312E20476574205363616E20636F6465206572726F7220253038580A00000000322E20476574205363616E20636F6465206572726F7220253038580A000000005053325F696E697428256429202D2043757272656E74207363616E20636F646520736574203D2025640A00005053325F696E697428256429202D20536574207363616E20636F646520736574203D20320A000000312E20536574205363616E20636F6465206572726F7220253038580A00000000322E20536574205363616E20636F6465206572726F7220253038580A00000000312E204C4544206572726F7220253038580A0000322E204C4544206572726F7255
S3FF4002E3C420253038580A00005053325F696E697428256429202D204D6F757365206465766963652064657465637465640A0000005053325F696E697428256429202D204465766963652D49443A20253032580A005053325F696E697428256429202D20456E61626C652073747265616D206D6F64652E2E2E00000000000000001C614161326242622163436323644464246545802B6646663467476733684868436949693B6A4A6A426B4B6B4B6C4C6C3A6D4DB5316E4E6E446F4F6F4D705070157151402D7252721B7353732C7454743C7555752A7656761D775777227858781A795979357A5A7A163121311E3222322633A733253424342E352535363682
S3FF4002E4BE26363D372F7B3E38285B4639295D45303D7D4EDF3F5C29202020412C3B2C492E3A2E4A2D5F2D52E4C4E44CF6D6F654FCDCFC5A0A0A0A5B2B2A7E5D2327230E5EB05E613C3E7C6608080800000000000000004CBEBC203F00000030782530386C7820202534730000000030782530386C782020494E5452000000202530313070202D202530313070202530313070202025386C64202020000000556E617661696C61626C650A0000000025386C640A000000537461636B207573616765206279207468726561640A00002020202049442020202020204E414D45202020204C4F572020202020202020202048494748202020202043555252454E33
S3FF4002E5B8542020202020415641494C41424C452020202020555345440A000000424C4F574E20535441434B212121204F6666656E64696E67207461736B2830782570293A2069643D30782530386C783B206E616D653D30782530386C780000000A2020737461636B20636F766572732072616E67652030782570202D203078257020282564206279746573290A000000202044616D61676564207061747465726E20626567696E732061742030782530386C7820616E64206973202564206279746573206C6F6E670A000000435055205573616765206279207468726561640A20202049442020202020202020202020204E414D45202020202020202020BD
S3FF4002E6B25345434F4E445320202050455243454E540A0000000030782530386C78202020252D313273202020000025336C642E2530366C64202025336C642E2530336C640A0054696D652073696E6365206C6173742043505520557361676520726573657420256C642E2530366C64207365636F6E64730A00000000000000000000400145384001495440008050400083E0400082704000813040013FD040014CD04000822040007EF0400084F040014CE04000856040014848400083304000829020287374617475733A2025732900000020286572726E6F3A20257329000000002028756E6B6E6F776E206572726E6F3D25642900666174616C2065721F
S3FF4002E7AC726F722C2065786974696E6700000000666174616C206572726F722C2061626F7274696E670000007375636365737366756C20636F6D706C6574696F6E00000072657475726E65642066726F6D20612074687265616400006D756C746970726F63657373696E67206E6F7420636F6E666967757265640000696E76616C6964206F626A656374206E616D6500696E76616C6964206F626A656374206964000000746F6F206D616E790000000074696D6564206F75742077616974696E670000006F626A6563742064656C65746564207768696C652077616974696E67000000007370656369666965642073697A652077617320696E76616C69646F
S3FF4002E8A60000616464726573732073706563696669656420697320696E76616C6964000000006E756D6265722077617320696E76616C696400006974656D20686173206E6F74206265656E20696E697469616C697A65640000007265736F7572636573207374696C6C206F75747374616E64696E670072657175657374206E6F742073617469736669656400000074687265616420697320696E2077726F6E672073746174650000000074687265616420616C726561647920696E20737461746500696C6C6567616C206F6E2063616C6C696E6720746872656164000000696C6C6567616C20666F722072656D6F7465206F626A65637400000063616C6C17
S3FF4002E9A065642066726F6D2077726F6E6720656E7669726F6E6D656E74000000696E76616C696420746872656164207072696F7269747900696E76616C696420646174652F74696D65000000696E76616C6964206E6F646520696400646972656374697665206E6F7420636F6E66696775726564000000006E6F74206F776E6572206F66207265736F75726365000000646972656374697665206E6F7420696D706C656D656E7465640000005254454D5320696E636F6E73697374656E637920646574656374656400000000636F756C64206E6F742067657420656E6F756768206D656D6F72790064726976657220494F206572726F7200696E7465726ECA
S3FF4002EA9A616C206D756C746970726F63657373696E67206F6E6C790000000000000000000000000000004002E7D400000000000000004002E7EC00000001000000004002E80400000002000000004002E82400000003000000004002E83800000004000000004002E84C00000005000000004002E85800000006000000004002E86C00000007000000004002E88C00000008000000004002E8A800000009000000004002E8C80000000A000000004002E8DC0000000B000000004002E8FC0000000C000000004002E9180000000D000000004002E9300000000E000000004002E94C0000000F000000004002E96400000010000000004002E98000000011F7
S3FF4002EB94000000004002E99C00000012000000004002E9BC00000013000000004002E9D400000014000000004002E9E800000015000000004002E9F800000016000000004002EA1400000017000000004002EA2C00000018000000004002EA4800000019000000004002EA680000001A000000004002EA840000001B000000004002EA940111111100000000000000000000000000000000000000000000000050726F6772616D20686561703A2066726565206F662062616420706F696E746572202570202D2D2072616E6765202570202D202570200A0030313233343536373839414243444546000000000000000040009DB040009C4C40009C4C40004C
S3FF4002EC8E9C4C40009C4C40009DB040009C4C40009C4C40009C4C40009C4C40009C4C40009C7840009C4C40009C4C40009C4C40009C4C40009C4C40009DF040009C4C40009C4C40009F5C40009C4C40009C4C40009C4C40009C4C40009C4C40009C4C40009C4C40009C4C40009C4C40009C4C40009EA840009DB040009C4C40009C4C40009C4C40009C4C40009DB040009C4C40009C4C40009C4C40009C4C40009C4C40009C7840009F5C40009C4C40009C4C40009DFC40009C4C40009DF040009C4C40009C4C40009F5C0000000000000000000000000D000000202020202020202000000000080000000820080000000000000000004000C9B84000C9A4E8
S3FF4002ED884000C9844000C9644000C95000000000000000000000000000000000001F003B005A0078009700B500D400F301110130014E00000000001F003C005B0079009800B600D500F401120131014F0000016E02DB044800000000000000000000001F0000001C0000001F0000001E0000001F0000001E0000001F0000001F0000001E0000001F0000001E0000001F000000000000001F0000001D0000001F0000001E0000001F0000001E0000001F0000001F0000001E0000001F0000001E0000001F0000000000000000000000000000000D0000000D00000017000000070000000600000013000000000000000D000000070000000600000019070745
S3FF4002EE82060605050505040404040404040403030303030303030303030303030303020202020202020202020202020202020202020202020202020202020202020201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005E
S3FF4002EF7C00000000434F505952494748542028632920313938392D323030382E0A4F6E2D4C696E65204170706C69636174696F6E7320526573656172636820436F72706F726174696F6E20284F4152292E0A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000009000000040000001500000000000000000000000049444C4500000000000000000000000000000005000053
S3FF4002F07600060000000700000020000000FF000000020000000100000002000000030000000400000005000000062E2E2F2E2E2F2E2E2F2E2E2F2E2E2F2E2E2F7274656D732F632F7372632F2E2E2F2E2E2F6370756B69742F6C696266732F7372632F696D66732F696D66735F63726561742E63000030000000000000004001412C400142244001414C40014210400141FC400141E8400141E0494D46535F6372656174655F6E6F646500000000400142984001428C400142C8400142B4400142B4400142A0400142A0000000002E2E2F2E2E2F2E2E2F2E2E2F2E2E2F2E2E2F7274656D732F632F7372632F2E2E2F2E2E2F6370756B69742F6C696266736F
S3FF4002F1702F7372632F696D66732F696D66735F6765746368696C642E63000000000000002E0000002E2E0000494D46535F66696E645F6D617463685F696E5F64697200004001964C40019604400195984001952C400194D4400194804001510040019AC04001948800000000000000000000000000000000400150200000000000000000400196A0400196CC40019914000000000000000040019768400196D440019AC000000000000000000000000040019B7040019B60400197E400000000000000000000000000000000000000000000000000000000000000004001510000000000000000000000000000000000000000000000000040015020000041
S3FF4002F26A00000000000040019094400189A84001945C400190484001826040018CD04001510040019AC040018C580000000040019B7040019B7040019B604001894400000000000000002C2066756E6374696F6E3A2000000000617373657274696F6E2022257322206661696C65643A2066696C6520222573222C206C696E65202564257325730A00002864656661756C74290000002F0000002F6465760000000052454144000000005752495445000000524541442F575249544500004E4F4E424C4F434B00000000415050454E44000043524541544500004002F30800000002000000004002F31000000004000000014002F31800000006000000022B
S3FF4002F3640000000000000000000000004002F32400000001000040004002F33000000200000000084002F338000004000000020000000000000000000000000000000000FFFFFFFF0000000100000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF400137
S3FF4002F45E667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF4001667800000000FFFFFFFF400166780000000100000000000000000000000000000001000000010000000200000000000000000000000000000000000000000000000100000001D7
S3FF4002F55800000000000000002E2E2F2E2E2F2E2E2F2E2E2F2E2E2F2E2E2F7274656D732F632F7372632F2E2E2F2E2E2F6370756B69742F6C696266732F7372632F696D66732F6D656D66696C652E63007468655F6A6E6F64650000007468655F6A6E6F64652D3E74797065203D3D20494D46535F4D454D4F52595F46494C4500626C6F636B5F7461626C6500736F757263650000626C6F636B5F7074720000007468655F6A6E6F64652D3E74797065203D3D20494D46535F4D454D4F52595F46494C45207C7C207468655F6A6E6F64652D3E74797065203D3D20494D46535F4C494E4541525F46494C45000064657374000000000000000000000000494DA9
S3FF4002F65246535F6D656D66696C655F6765745F626C6F636B5F706F696E7465720000494D46535F6D656D66696C655F77726974650000494D46535F6D656D66696C655F72656164000000494D46535F6D656D66696C655F72656D6F7665006D656D66696C655F667265655F626C6F636B735F696E5F7461626C6500000000494D46535F6D656D66696C655F616464626C6F636B000000494D46535F6D656D66696C655F657874656E640000000000000000004F4B00004255535900000000494E56414C4944204E414D45000000004E4F5420494D504C454D454E5445440054494D454F5554004E4F204D454D4F52590000004E4F204445564943450000003B
S3FF4002F74C494E56414C4944204E554D42455200004E4F54205245534F55524345204F574E45520000494F204552524F5200000000000000004002F70000000000000000004002F7040000000C000000104002F70C00000003000000164002F71C00000018000000584002F72C00000006000000744002F7340000001A0000000C4002F7400000000D000000134002F74C0000000A000000094002F75C00000017000000014002F7700000001B00000005000000000000000000000000000000000000000000000000002020202020202020202828282828202020202020202020202020202020202020881010101010101010101010101010100404040404A3
S3FF4002F84604040404041010101010101041414141414101010101010101010101010101010101010101011010101010104242424242420202020202020202020202020202020202020202101010102000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EE
S3FF4002F940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020282828282820202020202020202020202020202020202088101010101010101010101010101010040404040404040404041010101010101041414141414101010101010101010101010101010101010101011010101010104242424242420202020202020202020202020202020202020202101010102000000000000000000000000000000000000000000000000000000000000000000000000000003F
S3FF4002FA3A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001F0000003B0000005A0000007800000097000000B5000000D4000000F300000111000001300000014E0000001F0000001C0000001F0000001E0000001F0000001E0000001F0000001F0000001E0000001F0000001E0000001F0000001F0000001C0000001F0000001E0000001F0000001E0000001F0000001F0000001E0000001F0000001E0000001F0000001FC0
S3FF4002FB340000001D0000001F0000001E0000001F0000001E0000001F0000001F0000001E0000001F0000001E0000001F0000016D0000016E00000000000000004E6F20737563682066696C65206F72206469726563746F72790000004E6F74206F776E65720000004E6F20737563682070726F6365737300496E7465727275707465642073797374656D2063616C6C00492F4F206572726F720000004E6F207375636820646576696365206F722061646472657373000000417267206C69737420746F6F206C6F6E670000004578656320666F726D6174206572726F72000000536F636B657420616C726561647920636F6E6E656374656400000000426112
S3FF4002FC2E642066696C65206E756D626572004E6F206368696C6472656E0044657374696E6174696F6E2061646472657373207265717569726564000000004E6F206D6F72652070726F6365737365730000004E6F7420656E6F756768207370616365000000005065726D697373696F6E2064656E696564000000426164206164647265737300426C6F636B20646576696365207265717569726564000000446576696365206F72207265736F7572636520627573790046696C65206578697374730043726F73732D646576696365206C696E6B0000004E6F20737563682064657669636500004E6F742061206469726563746F727900486F73742069732061
S3FF4002FD28646F776E00000000436F6E6E656374696F6E20616C726561647920696E2070726F6772657373000049732061206469726563746F72790000496E76616C696420617267756D656E74000000004E6574776F726B20696E74657266616365206973206E6F7420636F6E6669677572656400546F6F206D616E79206F70656E2066696C657320696E2073797374656D000000546F6F206D616E79206F70656E2066696C6573004E6F74206120636861726163746572206465766963650000546578742066696C652062757379000046696C6520746F6F206C617267650000486F737420697320756E726561636861626C65004E6F207370616365206C68
S3FF4002FE22656674206F6E20646576696365004E6F7420737570706F72746564000000496C6C6567616C207365656B00000000526561642D6F6E6C792066696C652073797374656D000000546F6F206D616E79206C696E6B73000042726F6B656E2070697065004D61746820617267756D656E74000000526573756C7420746F6F206C61726765000000004E6F206D657373616765206F662064657369726564207479706500004964656E7469666965722072656D6F7665640000446561646C6F636B000000004E6574776F726B20697320756E726561636861626C6500004E6F206C6F636B004E6F7420612073747265616D0000000053747265616D20696B
S3FF4002FF1C6F63746C2074696D656F7574000000004E6F2073747265616D207265736F7572636573004D616368696E65206973206E6F74206F6E20746865206E6574776F726B0000004E6F207061636B61676500005265736F757263652069732072656D6F746500005669727475616C206369726375697420697320676F6E6500416476657274697365206572726F720053726D6F756E74206572726F72000000436F6D6D756E69636174696F6E206572726F720050726F746F636F6C206572726F720000556E6B6E6F776E2070726F746F636F6C000000004D756C7469686F7020617474656D707465640000426164206D6573736167650043616E6E6F74CA
S3FF40030016206163636573732061206E656564656420736861726564206C696272617279000000416363657373696E67206120636F7272757074656420736861726564206C696272617279000000002E6C69622073656374696F6E20696E20612E6F757420636F7272757074656400417474656D7074696E6720746F206C696E6B20696E206D6F726520736861726564206C6962726172696573207468616E2073797374656D206C696D697400000043616E6E6F742065786563206120736861726564206C696272617279206469726563746C7900000046756E6374696F6E206E6F7420696D706C656D656E746564000000004E6F206D6F72652066696C65B3
S3FF40030110730000004469726563746F7279206E6F7420656D7074790046696C65206F722070617468206E616D6520746F6F206C6F6E670000546F6F206D616E792073796D626F6C6963206C696E6B73004E6F2062756666657220737061636520617661696C61626C65000000416464726573732066616D696C79206E6F7420737570706F727465642062792070726F746F636F6C2066616D696C790050726F746F636F6C2077726F6E67207479706520666F7220736F636B65740000536F636B6574206F7065726174696F6E206F6E206E6F6E2D736F636B6574000050726F746F636F6C206E6F7420617661696C61626C65000043616E27742073656E6453
S3FF4003020A20616674657220736F636B65742073687574646F776E00000000436F6E6E656374696F6E207265667573656400004164647265737320616C726561647920696E207573650000536F6674776172652063617573656420636F6E6E656374696F6E2061626F727400000000536F636B6574206973206E6F7420636F6E6E656374656400536F636B65742074797065206E6F7420737570706F72746564000000536F636B657420697320616C726561647920636F6E6E6563746564004F7065726174696F6E206E6F7420737570706F72746564206F6E20736F636B65740000004D65737361676520746F6F206C6F6E6700000000436F6E6E65637469DB
S3FF400303046F6E2074696D6564206F7574000000000000000000000000000000004001E0E44001E5144001E5084001E4FC4001E4F04001E4E44001E4D84001E4CC4001E4C04001E4B44001E4A84001E49C4001E4904001E4844001E4784001E46C4001E4604001E4544001E4484001E43C4001E4304001E4244001E4184001E40C4001E4004001E3F44001E3E84001E3DC4001E3D04001E3C44001E3B84001E3AC4001E3A04001E3944001E3884001E37C4001E3704001E0E44001E0E44001E0E44001E0E44001E0E44001E0E44001E0E44001E0E44001E3644001E3584001E0E44001E0E44001E0E44001E0E44001E0E44001E0E44001E0E44001E0E4400122
S3FF400303FEE0E44001E0E44001E0E44001E0E44001E0E44001E34C4001E0E44001E3404001E3344001E3284001E31C4001E3104001E3044001E2F84001E2EC4001E2E04001E2D44001E0E44001E0E44001E2C84001E0E44001E0E44001E2BC4001E0E44001E0E44001E0E44001E0E44001E0E44001E2B04001E2A44001E2984001E28C4001E2804001E2744001E2684001E25C4001E2504001E2444001E0E44001E0E44001E2384001E0E44001E0E44001E0E44001E0E44001E0E44001E0E44001E0E44001E0E44001E0E44001E22C4001E2204001E2144001E2084001E1FC4001E1F04001E1E44001E1D84001E1CC4001E1C04001E1B44001E1A84001E19CAA
S3FF400304F84001E1904001E1844001E1784001E16C4001E1604001E1544001E1484001E0E44001E0E44001E13C4001E1304001E0E44001E0E44001E0E44001E0E44001E0E44001E12400000000474D5400696E6600494E46006E616E004E414E003031323334353637383961626364656600000000286E756C6C29000062756720696E2076667072696E74663A206261642062617365000000000000004001F1304001E96C4001E96C4001F1584001E96C4001E96C4001E96C4001F1784001E96C4001E96C4001F18C4001F1B84001E96C4001F1C84001F1E84001E96C4001F2604001F2804001F2804001F2804001F2804001F2804001F2804001F2804001EB
S3FF400305F2F2804001F2804001E96C4001E96C4001E96C4001E96C4001E96C4001E96C4001E96C4001F2C84001E96C4001F3744001EED44001F2C84001F2C84001F2C84001E96C4001E96C4001E96C4001E96C4001F3A44001E96C4001E96C4001EE644001E96C4001E96C4001E96C4001F3C44001E96C4001E9B44001E96C4001E96C4001F4B44001E96C4001E96C4001E96C4001E96C4001E96C4001E96C4001E96C4001E96C4001F2C84001E96C4001F3744001EEE44001F2C84001F2C84001F2C84001F5DC4001EEE44001F60C4001E96C4001F5704001E96C4001F5A04001EE744001F5244001F48C4001E96C4001F3C44001F1784001E9C44001E96CB1
S3FF400306EC4001E96C4001F41C4001E96C4001F1783030303030303030303030303030303020202020202020202020202020202020000000003FC000000000000040300000000000003FE000000000000065256C6400000000400210104002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002103C40020F984002103C4002103C4002103C40028D
S3FF400307E6103C40021B0C4002103C4002103C4002103C4002103C4002103C40021AEC40021AEC40021AEC40021AEC40021AEC40021AEC40021AEC40021AEC40021AEC40021AEC4002103C4002103C4002103C4002103C4002103C4002103C4002103C4002196C4002103C4002195C4002193C4002196C4002196C4002196C4002103C4002103C4002103C4002103C400219304002103C4002103C4002188C4002103C4002103C4002103C400210904002103C4002103C4002103C4002103C400219104002103C4002103C400218F44002103C4002103C4002103C4002103C4002103C4002196C4002103C40021960400219404002196C4002196C4002196C87
S3FF400308E040021ABC40021AA4400218C44002103C400218AC4002103C40021B1840021890400218D44002103C4002103C40021094400218C840021A884002103C4002103C400219104002103C400218C84002140C40021514400212B44002123C4002113C400217C040021264400217C0400212644002126440021784400217544002175440021754400217544002175440021754400217544002171C4002171C4002126440021264400212644002126440021264400212644002126440021700400217004002170040021700400217004002170040021264400212644002126440021264400212644002126440021264400212644002126440021264400251
S3FF400309DA1264400212644002126440021264400212644002126440021264400216A840021264400212644002126440021264400212644002126440021264400212644002170040021700400217004002170040021700400217004002126440021264400212644002126440021264400212644002126440021264400212644002126440021264400212644002126440021264400212644002126440021264400216A840021CD4400219C440021CD440021CB8400219C440021C8840021C7440021C7440021C7440021C7440021C7440021C7440021C7440021C7440021C74400219C4400219C4400219C4400219C4400219C4400219C4400219C440021D448A
S3FF40030AD4400219C4400219C4400219C440021CE840021D58400219C4400219C440021B48400219C4400219C4400219C4400219C440021C14400219C4400219C4400219C4400219C4400219C440021C00400219C4400219C4400219C4400219C440021BEC400219C4400219C4400219C4400219C4400219C4400219C4400219C440021D44400219C4400219C4400219C440021CE840021D58400219C4400219C440021B48400219C4400219C4400219C4400219C440021C14400219C4400219C4400219C4400219C4400219C440021C00400219C4400219C4400219C4400219C440021BEC000A000100020003000400050006000700080009000A000B000C39
S3FF40030BCE000D000E000F001000000000000000000000496E66696E697479000000004E614E004002347840023478400238F8400238C8400238D04002389C00000000000000003FF80000000000003FD287A7636F43613FC68A288B60C8B33FD34413509F79FB3FF00000000000004024000000000000401C000000000000401400000000000049534F2D383835392D310000000000004002D5DC4002D4744002D4744002D4744002D4744002D4744002D4744002D4744002D4744002D4747F7F7F7F7F7F7F7F40030C500000000000000000000000003FF000000000000040240000000000004059000000000000408F40000000000040C3880000000000DD
S3FF40030CC840F86A0000000000412E848000000000416312D0000000004197D7840000000041CDCD65000000004202A05F2000000042374876E8000000426D1A94A200000042A2309CE540000042D6BCC41E900000430C6BF5263400004341C37937E080004376345785D8A00043ABC16D674EC80043E158E460913D004415AF1D78B58C40444B1AE4D6E2EF504480F0CF064DD59244B52D02C7E14AF644EA784379D99DB44341C37937E080004693B8B5B5056E174D384F03E93FF9F55A827748F9301D3275154FDD7F73BF3C3C9CD2B297D889BC3949F623D5A8A73332A50FFD44F4A73D255BBA08CF8C979D0AC8062864AC6F4300000005000000190000CB
S3FF40030DC2007D00000000000000000000000043500000000000006E660000696E697479000000616E00000000000000000000400263F84002629840026298400262984002629840026298400262984002629840026298400264E4400264E4400264E4400264E4400264E4400262984002629840026298400262984002629840026298400262984002629840026298400262984002629840026298400262984002629840026298400262984002629840026298400264E440026298400262984002629840026298400262984002629840026298400262984002629840026298400264DC400262984002646C40027184400271A44002719040027174400271400A
S3FF40030EBC400271A440027184000000003C9CD2B297D889BC3949F623D5A8A73332A50FFD44F4A73D255BBA08CF8C979D0E18062864AC6F434000000000000000BFF0000000000000BFE000000000000041DFFFFFFFC000003FDFFFFF94A035953FE0000035AFE5353FCFFFFF94A03595414243444546000061626364656600003031323334353637383900004F00000041E0000000000000CF000000000000000000000000000000000000000000000000000000000000000A0A556E68616E646C65642069737220657863657074696F6E3A20766563746F72203078253032782C206361757365203078253038582C207372203078253038582C2065706377
S32740030FB6203078253038580A0000B000015E00000000000000000000000000000000400399002E
S31940031000FFFFFFFF00000000FFFFFFFF00000000000000009B
S3FF40031020000000004003130C40031368400313C40000000000000000000000000000000000000000000000000000000000000000000000004002E198000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001330EABCD1234E66DDEEC0005000B0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006B
S3FF4003111A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092
S3FF400312140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097
S3FF4003130E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C
S3FF4003140800000000000000000000000000000000000000000000000000000008000000804002D37055493120000020000000000100000000400005D00000010000000000400045B4400044B8400044B0400044A8400044A0400043E4400042640000000000000000000000000000000000000000400050900000000000000000000000000000000000000000400096180000000000000000400095000000000000000000000000000000000040007C1800000000000000000000000040007B6040007718000000000000000000000014010000000000000000000016000000000000000000000000000000000000000000000000000000014003142C0000D8
S3FF400315022000FF000000000000000043496800000000000003E80000000A40013F8C00002000000020000000000000000000000000000000000300000003400314480000000240031490400314D040031D5040031D844000E3400000000000000000000001900000012C00000001FFFFFFF6FFFFFFF90000051000000024000000FF00000009000080000000000000000000FFFFFFFF000000000000000000000000A0010004A0010000A001000800000000A0010104A0010100A001010800000001A0010204A00102000000000000000000A0010304A001030000000001000000004002DC6400000000400316744003169400000000000000004002DC70FE
S3FF400315FC000000004003167C4003169C00000000000000004002D4200000000040031684400316A400000000000000004002DC7C000000004003168C400316A400000000000000004002DC8800000000000000000000000000000000000000004002DC980000000000000000000000000000000000000000400042D000000001400315A000000001400315B000000002400315C000000002400315D000000001400315A000000001400315B000000003400316B40000000000000000A0030000A0030004A0030010A0030008A003000CA0030014A0030018A003001C00000000000000000000000040006CC040006D7C40006CD04002DD84000000024003CF
S3FF400316F616E040006CC80000000000000000A000000800000000000000000000000100000000000000000000000000000008000001000000008000000040610000000000000000000000000000000000000000000008000000050000000D0000000D00000007000000060000000040032A340000000000000000000000000000000000000000000000004001614000000000000000000000000000000000000000000000000000000000400166E04001652800000000000000000000000000000000000000004001684800000000000000004001679400000000000000004001676C00000000000000000000000000000000000000000000000040016EEC8C
S3FF400317F040016F640000000000000000000000000000000040016E7C4001708040016E7040016E704001702840016E7C00000000000000000000000000000000000000003C6173736F636E616D656261642E633A203A20424144204E414D453E00000000000000000000000000000000000000004002F9940000000000000000000000004003054040030540000000000000000000000001000000004A0000000000000000000000000000000000000000000000000000004A0000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000034FFFFFBCE000003CB000000010000000000000035FFFFA7
S3FF400318EAFBCE000003CB000000010000000000000000000000000000002C000000000000000000000000000000004003102040031020000000000000000040031C0C40031C6840031CC40000000000000000000000000000000000000000000000000000000000000000000000004002E198000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001330EABCD1234E66DDEEC0005000B000000000000D4
S3FF400319E400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0
S3FF40031ADE00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C5
S3FF40031BD800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CA
S35340031CD20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007B
S70540000204B4
+471
View File
@@ -0,0 +1,471 @@
/*
* IOCCC Raytracer by Anders Gavare.
*
* The raytracer was one of the winners of the 17th IOCCC.
*
* NOTE: This is the UNOBFUSCATED version of the raytracer I used
* during development, not the actual entry sent to the contest.
*
*
* How to build:
* cc r3.c -o r3 (plus optimization flags)
*
* How to run:
* ./r3 > ray.ppm
* or
* ./r3 | xv -
*/
#include "system.h"
uint32_t *pP;
extern uint64_t *pPixelBuf;
extern uint32_t screen_nx;
extern uint32_t screen_ny;
#define X_OFF (screen_nx-xsize)
#define Y_OFF 0
xsize = 400;
ysize = 300;
An = 1;
camera_X = 0;
camera_Y = -10;
camera_Z = -7;
scale = 1296;
RootOfScale = 36;
maxcolor = 255;
MaxDepth=9;
_=1<<15;
/*
double sphere_x[44] = {
-15,-15,-15,-15, // I
-8,-8,-10,-6,-10,-6, // O
-1,-1, 1,1, // C
6, 6, 8,8, // C
13,13,15,15, // C
-11,-11,-11,-11,-9,-9,-7,-7, // r
0,0,-2,-2,-2,2,2,2, // a
7,7,9,9,11,11, // y
};
double sphere_z[44] = {
3,0,-3,-6, // I
-6, 3,0,0,-3,-3, // O
0,-3,-6, 3, // C
0,-3,-6, 3, // C
0,-3,-6, 3, // C
-11,-13,-15,-17,-11,-15,-13,-17, // r
-11,-15,-13,-15,-17,-13,-15,-17, // a
-11,-13,-15,-17,-11,-13, // y
};
*/
/* Common return variable: */
return_var;
return_var2;
return_var3;
return_var4;
get_sphere_coordinates(b)
{
return_var = "1111886:6:??AAFFHHMMOO55557799@@>>>BBBGGIIKK"[b]-64;
return_var3 = "C@=::C@@==@=:C@=:C@=:C531/513/5131/31/531/53"[b]-64;
/* return_var = sphere_x[b]; */
return_var2 = b<22? 9 : 0;
/* return_var3 = sphere_z[b]; */
return_var4 = 2;
}
/* sqroot(x) returns the square root of x in return_var */
sqroot_sub(x, mask, guess)
{
mask?
(
guess ^= mask,
guess*guess > x ?
( guess ^= mask )
:
0,
sqroot_sub(x, mask/2, guess)
)
:
( return_var = guess );
}
sqroot(x)
{
sqroot_sub(x, _, 0);
}
/*
* hit_sphere():
*
* returns where on a sphere we hit
* Returns distance in hit_sphere_q. (Negative return
* value if we didn't hit anything.)
*/
hit_sphere_q;
hit_sphere(objnr, x, y, z,
dx, dy, dz,
a, b)
{
get_sphere_coordinates(objnr);
x -= return_var*scale;
y -= return_var2*scale;
z -= return_var3*scale;
/*
* Solve the following equation:
*
* q^2 (dx^2+dy^2+dz^2) + q * 2(x*dx+y*dy+z*dz)
* + x^2+y^2+z^2 - r^2 = 0
*
* We assume that |dx,dy,dz| is 1.
*
* q^2 + a q + b = 0
*
* The solution is (of course)
*
* q = -a/2 +- sqrt(a^2/4 - b)
*/
b = x*x/scale+y*y/scale+z*z/scale-return_var4*return_var4*scale;
/* a = 2*(...), and then divide by -2 */
a = -x*dx/scale-y*dy/scale-z*dz/scale;
hit_sphere_q =
(
(b = a*a/scale - b) >= 0 ?
(
/* b = scale*sqrt((double)b/(double)scale), */
/* sqroot(b*scale), */
/* sqroot_sub(b, _, 0),
b = return_var * RootOfScale,
*/
sqroot_sub(b*scale, _, 0),
b = return_var,
/*
* Return the lowest q (a+b or a-b) which is more
* than 0. Return negative if neither
* a+b or a-b is more than 0.
*/
a + (a>b? -b : b)
)
:
-1.0
);
}
/*
* find_closest():
*
* find_closest() scans objects and returns an index
* to the object which was closest (has the lowest 'q').
* x,y,z,dx,dy,dz are scaled.
* find_closest_i is the index number of the found object,
* -1 if none was found. find_closest_q is the distance
* (scaled).
*/
find_closest_i; /* index ("sphere number") */
find_closest_q; /* distance (scaled) */
find_closest(objnr, x, y, z,
dx, dy, dz, notindex)
{
/* Initialize find_closest_i on first call: */
find_closest_i =
!objnr ? -1 : find_closest_i;
objnr < 44 ?
(
hit_sphere(objnr, x,y,z, dx,dy,dz, 0,0),
(hit_sphere_q > 0 && objnr!=notindex &&
(hit_sphere_q<find_closest_q || find_closest_i<0)) ?
(
find_closest_q = hit_sphere_q,
find_closest_i = objnr
) : 0,
find_closest(objnr+1, x,y,z,dx,dy,dz, notindex)
)
: 0;
}
/*
* trace_ray():
*
* Traces one ray. orig_xyz and dir_xyz are scaled.
* Return value in trace_ray_R, G, and B.
*/
trace_ray_R;
trace_ray_G;
trace_ray_B;
nX;
nY;
nZ; /* tmp normal, and tmp
sphere_light calculation */
trace_ray(orig_x, orig_y, orig_z,
dir_x, dir_y, dir_z,
depth, notindex,
tmpcol, closest_i_saved)
{
/*
* "Scan" through the list of all objects
* to see which one is closest:
*/
find_closest(0, orig_x, orig_y, orig_z,
dir_x, dir_y, dir_z, notindex);
depth>0 && find_closest_i >= 0?
(
/* find_closest_i and _q are the object
number and distance of the object we
hit. */
orig_x += dir_x*find_closest_q/scale,
orig_y += dir_y*find_closest_q/scale,
orig_z += dir_z*find_closest_q/scale,
/*
* Calculate color (diffuse light):
* (Note: use nZ as a temp variable while
* calculating nY)
*/
get_sphere_coordinates(find_closest_i),
nX = orig_x - return_var*scale,
nY = orig_y - return_var2*scale,
nZ = orig_z - return_var3*scale,
tmpcol = (-2*nX -2*nY + nZ) / 3, /* sqrt(9), */
/* Set return_var to the length of the normal
vector (in this case the sphere radius) */
/* return_var = sqrt(nX*nX + nY*nY +nZ*nZ), */
sqroot(nX*nX + nY*nY +nZ*nZ),
// return_var = return_var4*scale,
/* divide by return_var to get the color */
// tmpcol = return_var!=0? tmpcol*scale/return_var : 0,
tmpcol /= return_var4,
/* color is now -1..1 */
tmpcol *= tmpcol, /* square the color 1..-1 => 1..1 */
tmpcol *= 200,
tmpcol /= (scale*scale),
/* tmpcol += 5, */
closest_i_saved = find_closest_i,
/* Mirror: out = in - 2*(-normal)*cos v
where v is the angle between in and
-normal */
/* -normal: (normalized to len=1.0) */
/* return_var = sqrt(nX*nX + nY*nY + nZ*nZ), */
return_var!=0?
(
nX = -nX * scale / return_var,
nY = -nY * scale / return_var,
nZ = -nZ * scale / return_var
) : 0,
/* use return_var as a temp variable,
calculate cosinus between the vectors */
return_var = (dir_x*nX + dir_y*nY + dir_z*nZ)/scale,
/*
dir_x -= 2 * nX * return_var / scale,
dir_y -= 2 * nY * return_var / scale,
dir_z -= 2 * nZ * return_var / scale,
*/
dir_x -= nX * return_var / (scale/2),
dir_y -= nY * return_var / (scale/2),
dir_z -= nZ * return_var / (scale/2),
trace_ray(orig_x, orig_y, orig_z,
dir_x, dir_y, dir_z,
depth-1, find_closest_i, 0,0),
trace_ray_R /= 2,
trace_ray_G /= 2,
trace_ray_B /= 2,
/*
closest_i_saved &= 7,
!closest_i_saved? (closest_i_saved++) : 0,
*/
/*
closest_i_saved = closest_i_saved<4? closest_i_saved+1 : 7,
*/
/*
tvinga gråskalor: closest_i_saved = 7,
*/
closest_i_saved = closest_i_saved<22? 7 :
(
closest_i_saved<30 ? 1 :
(
closest_i_saved<38 ? 2 :
(
closest_i_saved<44 ? 4 :
(
closest_i_saved == 44 ? 6 :
3
)
)
)
),
trace_ray_R += closest_i_saved & 1 ? tmpcol : 0,
trace_ray_G += closest_i_saved & 2 ? tmpcol : 0,
trace_ray_B += closest_i_saved & 4 ? tmpcol : 0
)
:
(
/* If we didn't hit anything, set the color anyway: */
depth==MaxDepth? /* True if this is a ray originating
from the camera */
(
orig_z += 2,
dir_z = orig_z > 0? orig_z / 8 : orig_z / 20
)
: 0,
/*
* Colors according to Horizon_1 in gimp:
* At top of sky: 13,92,146 (light blue)
* At bottom sky: 255,255,255 (white)
* Top of ground: 213,168,111 (light brown)
* Bottom of ground: 103, 55, 26 (brown)
*/
dir_z > 0?
(
trace_ray_B = dir_z * dir_z / scale,
trace_ray_R = 255 - 250 * trace_ray_B / scale,
trace_ray_G = 255 - 150 * trace_ray_B / scale,
trace_ray_B = 255 - 100 * trace_ray_B / scale
)
:
(
trace_ray_B = dir_z * dir_z / scale,
trace_ray_B < scale/5?
(
trace_ray_R = 255 - 210 * trace_ray_B / scale,
trace_ray_G = 255 - 435 * trace_ray_B / scale,
trace_ray_B = 255 - 720 * trace_ray_B / scale
)
:
(
trace_ray_B -= scale/5,
trace_ray_R = 213 - 110 * trace_ray_B / scale,
trace_ray_G = 168 - 113 * trace_ray_B / scale,
trace_ray_B = 111 - 85 * trace_ray_B / scale
)
),
depth!=MaxDepth?
(
trace_ray_R /= 2,
trace_ray_G /= 2,
trace_ray_B /= 2
)
: 0
);
trace_ray_R = trace_ray_R<0? 0 : trace_ray_R>maxcolor? maxcolor: trace_ray_R;
trace_ray_G = trace_ray_G<0? 0 : trace_ray_G>maxcolor? maxcolor : trace_ray_G;
trace_ray_B = trace_ray_B<0? 0 : trace_ray_B>maxcolor? maxcolor : trace_ray_B;
}
/*
* do_pixels_in_line():
*
* the horizontal "for loop"
*/
int RED; int GREEN; int BLUE;
dpil_helper(x,y, a,b)
{
trace_ray(
scale*camera_X + scale*40*(An*x+a)/xsize/An - scale*20,
scale*camera_Y,
scale*camera_Z - scale*30*(An*y+b)/ysize/An + scale*15,
0, scale, 0, MaxDepth, -1, 0,0);
RED += trace_ray_R;
GREEN += trace_ray_G;
BLUE += trace_ray_B;
++a<An?
dpil_helper(x,y,a,b)
: (
++b<An?
dpil_helper(x,y,0,b)
: 0
);
}
do_pixels_in_line(x, y)
{
RED = GREEN = BLUE = 0;
dpil_helper(x,y,0,0);
x < xsize ?
(
/* output the pixel to stdout, */
#ifndef JMIPS_VGA
printf("%c%c%c", RED/An/An, GREEN/An/An, BLUE/An/An),
#else
pP[(x+X_OFF)+screen_nx*(y+Y_OFF)] = (RED/An/An & 0xFF) | ((GREEN/An/An & 0xFF) << 8) | ((BLUE/An/An & 0xFF) << 16),
#endif
/* and then do the next pixel in this line: */
do_pixels_in_line(x+1, y)
) : 0;
}
/*
* do_line():
*
* the vertical "for loop"
*/
do_line(y)
{
/* Do all lines: */
do_pixels_in_line(0, --y? do_line(y),y:y);
}
void raytrace(void)
{
#ifdef JMIPS_VGA
int iii, jjj;
xsize = screen_nx/2;
ysize = 3*xsize/4;
pP = (uint32_t*)pPixelBuf;
for (jjj=0; jjj < ysize; jjj++)
for (iii=0; iii < xsize; iii++)
pP[(iii+X_OFF)+screen_nx*(jjj+Y_OFF)] = 0;
#else
/* Output PPM file header ... */
printf("P6\n%i %i\n255\n", xsize, ysize);
#endif
/* and do all lines: */
do_line(ysize);
}
+63
View File
@@ -0,0 +1,63 @@
/* system.h
*
* This include file contains information that is included in every
* function in the test set.
*
* COPYRIGHT (c) 1989-1999.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* $Id: system.h,v 1.13 2004/04/01 15:16:23 ralf Exp $
*/
#include <rtems.h>
/* functions */
rtems_task Init(
rtems_task_argument argument
);
rtems_task Application_task1(
rtems_task_argument argument
);
rtems_task Application_task2(
rtems_task_argument argument
);
rtems_task Application_task3(
rtems_task_argument argument
);
rtems_task Application_task4(
rtems_task_argument argument
);
/* configuration information */
#include <bsp.h> /* for device driver prototypes */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
#define CONFIGURE_MAXIMUM_TASKS 20
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
#define CONFIGURE_TICKS_PER_TIMESLICE 10
#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS 3
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 8
#define STACK_CHECKER_ON 1
#define CONFIGURE_EXTRA_TASK_STACKS (512 * RTEMS_MINIMUM_STACK_SIZE)
#include <rtems/confdefs.h>
/* end of include file */
+33
View File
@@ -0,0 +1,33 @@
#
# Makefile
#
#
# RTEMS_MAKEFILE_PATH is typically set in an environment variable
#
EXEC=emactest.exe
PGM=${ARCH}/$(EXEC)
# optional managers required
MANAGERS=all
# C source names
CSRCS = init.c emac_app.c
COBJS_ = $(CSRCS:.c=.o)
COBJS = $(COBJS_:%=${ARCH}/%)
include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
include $(RTEMS_CUSTOM)
include $(PROJECT_ROOT)/make/leaf.cfg
CPU_CFLAGS += -Wl,--defsym -Wl,_HeapSize=0x80000 -lc
OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)
all: ${ARCH} $(PGM)
$(PGM): $(OBJS)
$(make-exe)
+15
View File
@@ -0,0 +1,15 @@
#
# $Id: README,v 1.1 2003/04/29 02:04:26 ralf Exp $
#
This is an example user application using pppd. It is built using
the RTEMS application Makefiles. The file Makefile-user should
be renamed to Makefile or the -f option given to make. The file
is renamed to avoid bootstrap -c removing it.
The files ppp.conf and pppd.options are sample configuration files
that have successfully used to make ppp connections over a null
modem serial cable to a UNIX box. Please review the man pages
for either the ppp or pppd applications to ensure they are configured
correctly.
+29
View File
@@ -0,0 +1,29 @@
#include <stdio.h>
#include "system.h"
#include "rtems/shell.h"
#include <bsp.h>
int emac_app_initialize(void)
{
rtems_status_code status = 0;
// rtems_name taskName;
// rtems_id tid;
printf(" =========================\n");
printf(" starting shell\n");
printf(" =========================\n");
rtems_shell_init
(
"SHLL", /* task_name */
RTEMS_MINIMUM_STACK_SIZE * 4, /* task_stacksize */
100, /* task_priority */
"/dev/console", /* devname */
0, /* forever */
1 /* wait */
);
printf(" =========================\n");
return status;
}
File diff suppressed because it is too large Load Diff
+68
View File
@@ -0,0 +1,68 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <rtems/rtems_bsdnet.h>
char *Errors[] = {
"RTEMS_SUCCESSFUL", /* successful completion */
"RTEMS_TASK_EXITTED", /* returned from a task */
"RTEMS_MP_NOT_CONFIGURED", /* multiprocessing not configured */
"RTEMS_INVALID_NAME", /* invalid object name */
"RTEMS_INVALID_ID", /* invalid object id */
"RTEMS_TOO_MANY", /* too many */
"RTEMS_TIMEOUT", /* timed out waiting */
"RTEMS_OBJECT_WAS_DELETED", /* object was deleted while waiting */
"RTEMS_INVALID_SIZE", /* specified size was invalid */
"RTEMS_INVALID_ADDRESS", /* address specified is invalid */
"RTEMS_INVALID_NUMBER", /* number was invalid */
"RTEMS_NOT_DEFINED", /* item has not been initialized */
"RTEMS_RESOURCE_IN_USE", /* resources still outstanding */
"RTEMS_UNSATISFIED", /* request not satisfied */
"RTEMS_INCORRECT_STATE", /* task is in wrong state */
"RTEMS_ALREADY_SUSPENDED", /* task already in state */
"RTEMS_ILLEGAL_ON_SELF", /* illegal operation on calling task */
"RTEMS_ILLEGAL_ON_REMOTE_OBJECT", /* illegal operation for remote object */
"RTEMS_CALLED_FROM_ISR", /* called from ISR */
"RTEMS_INVALID_PRIORITY", /* invalid task priority */
"RTEMS_INVALID_CLOCK", /* invalid date/time */
"RTEMS_INVALID_NODE", /* invalid node id */
"RTEMS_NOT_OWNER_OF_RESOURCE", /* not owner of resource */
"RTEMS_NOT_CONFIGURED", /* directive not configured */
"RTEMS_NOT_IMPLEMENTED" /* directive not implemented */
};
User_extensions_routine Fatal_extension
(
Internal_errors_Source the_source,
bool is_internal,
uint32_t the_error
)
{
printk("\nFatal error: %s (%d). Internal = %d, Source = %d\n", Errors[the_error], the_error, is_internal, the_source);
}
#define CONFIGURE_INIT
#include "system.h"
#include "netconfig.h"
extern int emac_app_initialize(void);
rtems_task Init(rtems_task_argument argument)
{
/* initialize network */
rtems_bsdnet_initialize_network();
emac_app_initialize();
rtems_task_delete(RTEMS_SELF);
}
#define CONFIGURE_SHELL_COMMANDS_INIT
#define CONFIGURE_SHELL_COMMANDS_ALL
#define CONFIGURE_SHELL_MOUNT_MSDOS
#define CONFIGURE_SHELL_COMMANDS_ALL_NETWORKING
#include <rtems/shellconfig.h>
+42
View File
@@ -0,0 +1,42 @@
#ifndef NETCONFIG_H_
#define NETCONFIG_H_
#define RTEMS_USE_BOOTP
#include <bsp.h>
#include "rtems/dhcp.h"
/* external function prototypes */
extern int rtems_emac_driver_attach(struct rtems_bsdnet_ifconfig *config, int attaching);
uint8_t this_hwaddr[] = {0x00,0x00,0x31,0x10,0x19,0x70};
char this_hostname[] = "mips-ml402";
/* Default network interface */
static struct rtems_bsdnet_ifconfig netdriver_config = {
"eth0", /* name */
rtems_emac_driver_attach, /* attach function */
NULL, /* No more interfaces */
NULL, /* IP address */
NULL, /* IP net mask */
this_hwaddr, /* Driver supplies hardware address */
0 /* Use default driver parameters */
};
/* Network configuration */
struct rtems_bsdnet_config rtems_bsdnet_config = {
&netdriver_config,
rtems_bsdnet_do_dhcp,
0, /* Default network task priority */
(256*1024), /* Default mbuf capacity */
(512*1024), /* Default mbuf cluster capacity */
this_hostname, /* Host name */
0, /* Domain name */
0, /* Gateway */
0, /* Log host */
{ 0 }, /* Name server(s) */
{ 0 }, /* NTP server(s) */
};
#endif
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+59
View File
@@ -0,0 +1,59 @@
#ifndef SYSTEM_H
#define SYSTEM_H
#include <rtems.h>
/* functions */
extern rtems_task Init(rtems_task_argument argument);
#include <bsp.h>
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
#define CONFIGURE_TICKS_PER_TIMESLICE 10
#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS 3
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 8
#define STACK_CHECKER_ON 1
#define CONFIGURE_MAXIMUM_SEMAPHORES 20
#define CONFIGURE_MAXIMUM_TASKS 20
#define CONFIGURE_INIT_TASK_PRIORITY 120
#define CONFIGURE_INIT_TASK_INITIAL_MODES (RTEMS_PREEMPT | \
RTEMS_NO_TIMESLICE | \
RTEMS_NO_ASR | \
RTEMS_INTERRUPT_LEVEL(0))
#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
#define CONFIGURE_MALLOC_STATISTICS
extern rtems_extensions_table initial_extensions;
#define CONFIGURE_INITIAL_EXTENSIONS \
{ \
NULL, /* create */ \
NULL, /* start */ \
NULL, /* restart */ \
NULL, /* delete */ \
NULL, /* switch */ \
NULL, /* begin */ \
NULL, /* exitted */ \
Fatal_extension /* fatal */ \
}
#define CONFIGURE_MINIMUM_TASK_STACK_SIZE 8192
#include <rtems/confdefs.h>
#endif
+33
View File
@@ -0,0 +1,33 @@
#
# Makefile
#
#
# RTEMS_MAKEFILE_PATH is typically set in an environment variable
#
PGM=${ARCH}/fileio.exe
# optional managers required
MANAGERS=all
# C source names
CSRCS = init.c ping.c
COBJS = $(CSRCS:%.c=${ARCH}/%.o)
include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
include $(RTEMS_CUSTOM)
include $(PROJECT_ROOT)/make/leaf.cfg
CPU_CFLAGS += -lm -lc
CFLAGS += -DUSE_FTPD -I../lua-5.1.4/etc -I../lua-5.1.4/src -B/opt/rtems-4.9/mips-rtems/j3ksys/lib/lua
LD_LIBS += -lftpd -lsocket -lmime
LINK_LIBS += -lm
OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)
all: ${ARCH} $(PGM)
$(PGM): $(OBJS)
$(make-exe)
+5
View File
@@ -0,0 +1,5 @@
-- the first program in every language
require "jens"
print "Hallo"
jens.mimi()
@@ -0,0 +1,89 @@
This directory contains code that is more useful than the
samples. This code *is* supported.
tftp.lua -- Trivial FTP client
This module implements file retrieval by the TFTP protocol.
Its main use was to test the UDP code, but since someone
found it usefull, I turned it into a module that is almost
official (no uploads, yet).
dict.lua -- Dict client
The dict.lua module started with a cool simple client
for the DICT protocol, written by Luiz Henrique Figueiredo.
This new version has been converted into a library, similar
to the HTTP and FTP libraries, that can be used from within
any luasocket application. Take a look on the source code
and you will be able to figure out how to use it.
lp.lua -- LPD client library
The lp.lua module implements the client part of the Line
Printer Daemon protocol, used to print files on Unix
machines. It is courtesy of David Burgess! See the source
code and the lpr.lua in the examples directory.
b64.lua
qp.lua
eol.lua
These are tiny programs that perform Base64,
Quoted-Printable and end-of-line marker conversions.
get.lua -- file retriever
This little program is a client that uses the FTP and
HTTP code to implement a command line file graber. Just
run
lua get.lua <remote-file> [<local-file>]
to download a remote file (either ftp:// or http://) to
the specified local file. The program also prints the
download throughput, elapsed time, bytes already downloaded
etc during download.
check-memory.lua -- checks memory consumption
This is just to see how much memory each module uses.
dispatch.lua -- coroutine based dispatcher
This is a first try at a coroutine based non-blocking
dispatcher for LuaSocket. Take a look at 'check-links.lua'
and at 'forward.lua' to see how to use it.
check-links.lua -- HTML link checker program
This little program scans a HTML file and checks for broken
links. It is similar to check-links.pl by Jamie Zawinski,
but uses all facilities of the LuaSocket library and the Lua
language. It has not been thoroughly tested, but it should
work. Just run
lua check-links.lua [-n] {<url>} > output
and open the result to see a list of broken links. Make sure
you check the '-n' switch. It runs in non-blocking mode,
using coroutines, and is MUCH faster!
forward.lua -- coroutine based forward server
This is a forward server that can accept several connections
and transfers simultaneously using non-blocking I/O and the
coroutine-based dispatcher. You can run, for example
lua forward.lua 8080:proxy.com:3128
to redirect all local conections to port 8080 to the host
'proxy.com' at port 3128.
unix.c and unix.h
This is an implementation of Unix local domain sockets and
demonstrates how to extend LuaSocket with a new type of
transport. It has been tested on Linux and on Mac OS X.
Good luck,
Diego.
@@ -0,0 +1,20 @@
-----------------------------------------------------------------------------
-- Little program to convert to and from Base64
-- LuaSocket sample files
-- Author: Diego Nehab
-- RCS ID: $Id: b64.lua,v 1.8 2004/06/16 04:28:21 diego Exp $
-----------------------------------------------------------------------------
local ltn12 = require("ltn12")
local mime = require("mime")
local source = ltn12.source.file(io.stdin)
local sink = ltn12.sink.file(io.stdout)
local convert
if arg and arg[1] == '-d' then
convert = mime.decode("base64")
else
local base64 = mime.encode("base64")
local wrap = mime.wrap()
convert = ltn12.filter.chain(base64, wrap)
end
sink = ltn12.sink.chain(convert, sink)
ltn12.pump.all(source, sink)
@@ -0,0 +1,112 @@
-----------------------------------------------------------------------------
-- Little program that checks links in HTML files, using coroutines and
-- non-blocking I/O via the dispatcher module.
-- LuaSocket sample files
-- Author: Diego Nehab
-- RCS ID: $$
-----------------------------------------------------------------------------
local url = require("socket.url")
local dispatch = require("dispatch")
local http = require("socket.http")
dispatch.TIMEOUT = 10
-- make sure the user knows how to invoke us
arg = arg or {}
if table.getn(arg) < 1 then
print("Usage:\n luasocket check-links.lua [-n] {<url>}")
exit()
end
-- '-n' means we are running in non-blocking mode
if arg[1] == "-n" then
-- if non-blocking I/O was requested, use real dispatcher interface
table.remove(arg, 1)
handler = dispatch.newhandler("coroutine")
else
-- if using blocking I/O, use fake dispatcher interface
handler = dispatch.newhandler("sequential")
end
local nthreads = 0
-- get the status of a URL using the dispatcher
function getstatus(link)
local parsed = url.parse(link, {scheme = "file"})
if parsed.scheme == "http" then
nthreads = nthreads + 1
handler:start(function()
local r, c, h, s = http.request{
method = "HEAD",
url = link,
create = handler.tcp
}
if r and c == 200 then io.write('\t', link, '\n')
else io.write('\t', link, ': ', tostring(c), '\n') end
nthreads = nthreads - 1
end)
end
end
function readfile(path)
path = url.unescape(path)
local file, error = io.open(path, "r")
if file then
local body = file:read("*a")
file:close()
return body
else return nil, error end
end
function load(u)
local parsed = url.parse(u, { scheme = "file" })
local body, headers, code, error
local base = u
if parsed.scheme == "http" then
body, code, headers = http.request(u)
if code == 200 then
-- if there was a redirect, update base to reflect it
base = headers.location or base
end
if not body then
error = code
end
elseif parsed.scheme == "file" then
body, error = readfile(parsed.path)
else error = string.format("unhandled scheme '%s'", parsed.scheme) end
return base, body, error
end
function getlinks(body, base)
-- get rid of comments
body = string.gsub(body, "%<%!%-%-.-%-%-%>", "")
local links = {}
-- extract links
body = string.gsub(body, '[Hh][Rr][Ee][Ff]%s*=%s*"([^"]*)"', function(href)
table.insert(links, url.absolute(base, href))
end)
body = string.gsub(body, "[Hh][Rr][Ee][Ff]%s*=%s*'([^']*)'", function(href)
table.insert(links, url.absolute(base, href))
end)
string.gsub(body, "[Hh][Rr][Ee][Ff]%s*=%s*(.-)>", function(href)
table.insert(links, url.absolute(base, href))
end)
return links
end
function checklinks(address)
local base, body, error = load(address)
if not body then print(error) return end
print("Checking ", base)
local links = getlinks(body, base)
for _, link in ipairs(links) do
getstatus(link)
end
end
for _, address in ipairs(arg) do
checklinks(url.absolute("file:", address))
end
while nthreads > 0 do
handler:step()
end
@@ -0,0 +1,17 @@
function load(s)
collectgarbage()
local a = gcinfo()
_G[s] = require(s)
collectgarbage()
local b = gcinfo()
print(s .. ":\t " .. (b-a) .. "k")
end
load("socket.url")
load("ltn12")
load("socket")
load("mime")
load("socket.tp")
load("socket.smtp")
load("socket.http")
load("socket.ftp")
@@ -0,0 +1,152 @@
-----------------------------------------------------------------------------
-- Little program to download DICT word definitions
-- LuaSocket sample files
-- Author: Diego Nehab
-- RCS ID: $Id: dict.lua,v 1.22 2005/11/22 08:33:29 diego Exp $
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Load required modules
-----------------------------------------------------------------------------
local base = _G
local string = require("string")
local table = require("table")
local socket = require("socket")
local url = require("socket.url")
local tp = require("socket.tp")
module("socket.dict")
-----------------------------------------------------------------------------
-- Globals
-----------------------------------------------------------------------------
HOST = "dict.org"
PORT = 2628
TIMEOUT = 10
-----------------------------------------------------------------------------
-- Low-level dict API
-----------------------------------------------------------------------------
local metat = { __index = {} }
function open(host, port)
local tp = socket.try(tp.connect(host or HOST, port or PORT, TIMEOUT))
return base.setmetatable({tp = tp}, metat)
end
function metat.__index:greet()
return socket.try(self.tp:check(220))
end
function metat.__index:check(ok)
local code, status = socket.try(self.tp:check(ok))
return code,
base.tonumber(socket.skip(2, string.find(status, "^%d%d%d (%d*)")))
end
function metat.__index:getdef()
local line = socket.try(self.tp:receive())
local def = {}
while line ~= "." do
table.insert(def, line)
line = socket.try(self.tp:receive())
end
return table.concat(def, "\n")
end
function metat.__index:define(database, word)
database = database or "!"
socket.try(self.tp:command("DEFINE", database .. " " .. word))
local code, count = self:check(150)
local defs = {}
for i = 1, count do
self:check(151)
table.insert(defs, self:getdef())
end
self:check(250)
return defs
end
function metat.__index:match(database, strat, word)
database = database or "!"
strat = strat or "."
socket.try(self.tp:command("MATCH", database .." ".. strat .." ".. word))
self:check(152)
local mat = {}
local line = socket.try(self.tp:receive())
while line ~= '.' do
database, word = socket.skip(2, string.find(line, "(%S+) (.*)"))
if not mat[database] then mat[database] = {} end
table.insert(mat[database], word)
line = socket.try(self.tp:receive())
end
self:check(250)
return mat
end
function metat.__index:quit()
self.tp:command("QUIT")
return self:check(221)
end
function metat.__index:close()
return self.tp:close()
end
-----------------------------------------------------------------------------
-- High-level dict API
-----------------------------------------------------------------------------
local default = {
scheme = "dict",
host = "dict.org"
}
local function there(f)
if f == "" then return nil
else return f end
end
local function parse(u)
local t = socket.try(url.parse(u, default))
socket.try(t.scheme == "dict", "invalid scheme '" .. t.scheme .. "'")
socket.try(t.path, "invalid path in url")
local cmd, arg = socket.skip(2, string.find(t.path, "^/(.)(.*)$"))
socket.try(cmd == "d" or cmd == "m", "<command> should be 'm' or 'd'")
socket.try(arg and arg ~= "", "need at least <word> in URL")
t.command, t.argument = cmd, arg
arg = string.gsub(arg, "^:([^:]+)", function(f) t.word = f end)
socket.try(t.word, "need at least <word> in URL")
arg = string.gsub(arg, "^:([^:]*)", function(f) t.database = there(f) end)
if cmd == "m" then
arg = string.gsub(arg, "^:([^:]*)", function(f) t.strat = there(f) end)
end
string.gsub(arg, ":([^:]*)$", function(f) t.n = base.tonumber(f) end)
return t
end
local function tget(gett)
local con = open(gett.host, gett.port)
con:greet()
if gett.command == "d" then
local def = con:define(gett.database, gett.word)
con:quit()
con:close()
if gett.n then return def[gett.n]
else return def end
elseif gett.command == "m" then
local mat = con:match(gett.database, gett.strat, gett.word)
con:quit()
con:close()
return mat
else return nil, "invalid command" end
end
local function sget(u)
local gett = parse(u)
return tget(gett)
end
get = socket.protect(function(gett)
if base.type(gett) == "string" then return sget(gett)
else return tget(gett) end
end)
@@ -0,0 +1,302 @@
-----------------------------------------------------------------------------
-- A hacked dispatcher module
-- LuaSocket sample files
-- Author: Diego Nehab
-- RCS ID: $$
-----------------------------------------------------------------------------
local base = _G
local table = require("table")
local socket = require("socket")
local coroutine = require("coroutine")
module("dispatch")
-- if too much time goes by without any activity in one of our sockets, we
-- just kill it
TIMEOUT = 60
-----------------------------------------------------------------------------
-- We implement 3 types of dispatchers:
-- sequential
-- coroutine
-- threaded
-- The user can choose whatever one is needed
-----------------------------------------------------------------------------
local handlert = {}
-- default handler is coroutine
function newhandler(mode)
mode = mode or "coroutine"
return handlert[mode]()
end
local function seqstart(self, func)
return func()
end
-- sequential handler simply calls the functions and doesn't wrap I/O
function handlert.sequential()
return {
tcp = socket.tcp,
start = seqstart
}
end
-----------------------------------------------------------------------------
-- Mega hack. Don't try to do this at home.
-----------------------------------------------------------------------------
-- we can't yield across calls to protect, so we rewrite it with coxpcall
-- make sure you don't require any module that uses socket.protect before
-- loading our hack
function socket.protect(f)
return function(...)
local co = coroutine.create(f)
while true do
local results = {coroutine.resume(co, base.unpack(arg))}
local status = table.remove(results, 1)
if not status then
if type(results[1]) == 'table' then
return nil, results[1][1]
else base.error(results[1]) end
end
if coroutine.status(co) == "suspended" then
arg = {coroutine.yield(base.unpack(results))}
else
return base.unpack(results)
end
end
end
end
-----------------------------------------------------------------------------
-- Simple set data structure. O(1) everything.
-----------------------------------------------------------------------------
local function newset()
local reverse = {}
local set = {}
return base.setmetatable(set, {__index = {
insert = function(set, value)
if not reverse[value] then
table.insert(set, value)
reverse[value] = table.getn(set)
end
end,
remove = function(set, value)
local index = reverse[value]
if index then
reverse[value] = nil
local top = table.remove(set)
if top ~= value then
reverse[top] = index
set[index] = top
end
end
end
}})
end
-----------------------------------------------------------------------------
-- socket.tcp() wrapper for the coroutine dispatcher
-----------------------------------------------------------------------------
local function cowrap(dispatcher, tcp, error)
if not tcp then return nil, error end
-- put it in non-blocking mode right away
tcp:settimeout(0)
-- metatable for wrap produces new methods on demand for those that we
-- don't override explicitly.
local metat = { __index = function(table, key)
table[key] = function(...)
arg[1] = tcp
return tcp[key](base.unpack(arg))
end
return table[key]
end}
-- does our user want to do his own non-blocking I/O?
local zero = false
-- create a wrap object that will behave just like a real socket object
local wrap = { }
-- we ignore settimeout to preserve our 0 timeout, but record whether
-- the user wants to do his own non-blocking I/O
function wrap:settimeout(value, mode)
if value == 0 then zero = true
else zero = false end
return 1
end
-- send in non-blocking mode and yield on timeout
function wrap:send(data, first, last)
first = (first or 1) - 1
local result, error
while true do
-- return control to dispatcher and tell it we want to send
-- if upon return the dispatcher tells us we timed out,
-- return an error to whoever called us
if coroutine.yield(dispatcher.sending, tcp) == "timeout" then
return nil, "timeout"
end
-- try sending
result, error, first = tcp:send(data, first+1, last)
-- if we are done, or there was an unexpected error,
-- break away from loop
if error ~= "timeout" then return result, error, first end
end
end
-- receive in non-blocking mode and yield on timeout
-- or simply return partial read, if user requested timeout = 0
function wrap:receive(pattern, partial)
local error = "timeout"
local value
while true do
-- return control to dispatcher and tell it we want to receive
-- if upon return the dispatcher tells us we timed out,
-- return an error to whoever called us
if coroutine.yield(dispatcher.receiving, tcp) == "timeout" then
return nil, "timeout"
end
-- try receiving
value, error, partial = tcp:receive(pattern, partial)
-- if we are done, or there was an unexpected error,
-- break away from loop. also, if the user requested
-- zero timeout, return all we got
if (error ~= "timeout") or zero then
return value, error, partial
end
end
end
-- connect in non-blocking mode and yield on timeout
function wrap:connect(host, port)
local result, error = tcp:connect(host, port)
if error == "timeout" then
-- return control to dispatcher. we will be writable when
-- connection succeeds.
-- if upon return the dispatcher tells us we have a
-- timeout, just abort
if coroutine.yield(dispatcher.sending, tcp) == "timeout" then
return nil, "timeout"
end
-- when we come back, check if connection was successful
result, error = tcp:connect(host, port)
if result or error == "already connected" then return 1
else return nil, "non-blocking connect failed" end
else return result, error end
end
-- accept in non-blocking mode and yield on timeout
function wrap:accept()
while 1 do
-- return control to dispatcher. we will be readable when a
-- connection arrives.
-- if upon return the dispatcher tells us we have a
-- timeout, just abort
if coroutine.yield(dispatcher.receiving, tcp) == "timeout" then
return nil, "timeout"
end
local client, error = tcp:accept()
if error ~= "timeout" then
return cowrap(dispatcher, client, error)
end
end
end
-- remove cortn from context
function wrap:close()
dispatcher.stamp[tcp] = nil
dispatcher.sending.set:remove(tcp)
dispatcher.sending.cortn[tcp] = nil
dispatcher.receiving.set:remove(tcp)
dispatcher.receiving.cortn[tcp] = nil
return tcp:close()
end
return base.setmetatable(wrap, metat)
end
-----------------------------------------------------------------------------
-- Our coroutine dispatcher
-----------------------------------------------------------------------------
local cometat = { __index = {} }
function schedule(cortn, status, operation, tcp)
if status then
if cortn and operation then
operation.set:insert(tcp)
operation.cortn[tcp] = cortn
operation.stamp[tcp] = socket.gettime()
end
else base.error(operation) end
end
function kick(operation, tcp)
operation.cortn[tcp] = nil
operation.set:remove(tcp)
end
function wakeup(operation, tcp)
local cortn = operation.cortn[tcp]
-- if cortn is still valid, wake it up
if cortn then
kick(operation, tcp)
return cortn, coroutine.resume(cortn)
-- othrewise, just get scheduler not to do anything
else
return nil, true
end
end
function abort(operation, tcp)
local cortn = operation.cortn[tcp]
if cortn then
kick(operation, tcp)
coroutine.resume(cortn, "timeout")
end
end
-- step through all active cortns
function cometat.__index:step()
-- check which sockets are interesting and act on them
local readable, writable = socket.select(self.receiving.set,
self.sending.set, 1)
-- for all readable connections, resume their cortns and reschedule
-- when they yield back to us
for _, tcp in base.ipairs(readable) do
schedule(wakeup(self.receiving, tcp))
end
-- for all writable connections, do the same
for _, tcp in base.ipairs(writable) do
schedule(wakeup(self.sending, tcp))
end
-- politely ask replacement I/O functions in idle cortns to
-- return reporting a timeout
local now = socket.gettime()
for tcp, stamp in base.pairs(self.stamp) do
if tcp.class == "tcp{client}" and now - stamp > TIMEOUT then
abort(self.sending, tcp)
abort(self.receiving, tcp)
end
end
end
function cometat.__index:start(func)
local cortn = coroutine.create(func)
schedule(cortn, coroutine.resume(cortn))
end
function handlert.coroutine()
local stamp = {}
local dispatcher = {
stamp = stamp,
sending = {
name = "sending",
set = newset(),
cortn = {},
stamp = stamp
},
receiving = {
name = "receiving",
set = newset(),
cortn = {},
stamp = stamp
},
}
function dispatcher.tcp()
return cowrap(dispatcher, socket.tcp())
end
return base.setmetatable(dispatcher, cometat)
end
@@ -0,0 +1,14 @@
-----------------------------------------------------------------------------
-- Little program to adjust end of line markers.
-- LuaSocket sample files
-- Author: Diego Nehab
-- RCS ID: $Id: eol.lua,v 1.8 2005/11/22 08:33:29 diego Exp $
-----------------------------------------------------------------------------
local mime = require("mime")
local ltn12 = require("ltn12")
local marker = '\n'
if arg and arg[1] == '-d' then marker = '\r\n' end
local filter = mime.normalize(marker)
local source = ltn12.source.chain(ltn12.source.file(io.stdin), filter)
local sink = ltn12.sink.file(io.stdout)
ltn12.pump.all(source, sink)
@@ -0,0 +1,65 @@
-- load our favourite library
local dispatch = require("dispatch")
local handler = dispatch.newhandler()
-- make sure the user knows how to invoke us
if table.getn(arg) < 1 then
print("Usage")
print(" lua forward.lua <iport:ohost:oport> ...")
os.exit(1)
end
-- function to move data from one socket to the other
local function move(foo, bar)
local live
while 1 do
local data, error, partial = foo:receive(2048)
live = data or error == "timeout"
data = data or partial
local result, error = bar:send(data)
if not live or not result then
foo:close()
bar:close()
break
end
end
end
-- for each tunnel, start a new server
for i, v in ipairs(arg) do
-- capture forwarding parameters
local _, _, iport, ohost, oport = string.find(v, "([^:]+):([^:]+):([^:]+)")
assert(iport, "invalid arguments")
-- create our server socket
local server = assert(handler.tcp())
assert(server:setoption("reuseaddr", true))
assert(server:bind("*", iport))
assert(server:listen(32))
-- handler for the server object loops accepting new connections
handler:start(function()
while 1 do
local client = assert(server:accept())
assert(client:settimeout(0))
-- for each new connection, start a new client handler
handler:start(function()
-- handler tries to connect to peer
local peer = assert(handler.tcp())
assert(peer:settimeout(0))
assert(peer:connect(ohost, oport))
-- if sucessful, starts a new handler to send data from
-- client to peer
handler:start(function()
move(client, peer)
end)
-- afte starting new handler, enter in loop sending data from
-- peer to client
move(peer, client)
end)
end
end)
end
-- simply loop stepping the server
while 1 do
handler:step()
end
@@ -0,0 +1,142 @@
-----------------------------------------------------------------------------
-- Little program to download files from URLs
-- LuaSocket sample files
-- Author: Diego Nehab
-- RCS ID: $Id: get.lua,v 1.25 2007/03/12 04:08:40 diego Exp $
-----------------------------------------------------------------------------
local socket = require("socket")
local http = require("socket.http")
local ftp = require("socket.ftp")
local url = require("socket.url")
local ltn12 = require("ltn12")
-- formats a number of seconds into human readable form
function nicetime(s)
local l = "s"
if s > 60 then
s = s / 60
l = "m"
if s > 60 then
s = s / 60
l = "h"
if s > 24 then
s = s / 24
l = "d" -- hmmm
end
end
end
if l == "s" then return string.format("%5.0f%s", s, l)
else return string.format("%5.2f%s", s, l) end
end
-- formats a number of bytes into human readable form
function nicesize(b)
local l = "B"
if b > 1024 then
b = b / 1024
l = "KB"
if b > 1024 then
b = b / 1024
l = "MB"
if b > 1024 then
b = b / 1024
l = "GB" -- hmmm
end
end
end
return string.format("%7.2f%2s", b, l)
end
-- returns a string with the current state of the download
local remaining_s = "%s received, %s/s throughput, %2.0f%% done, %s remaining"
local elapsed_s = "%s received, %s/s throughput, %s elapsed "
function gauge(got, delta, size)
local rate = got / delta
if size and size >= 1 then
return string.format(remaining_s, nicesize(got), nicesize(rate),
100*got/size, nicetime((size-got)/rate))
else
return string.format(elapsed_s, nicesize(got),
nicesize(rate), nicetime(delta))
end
end
-- creates a new instance of a receive_cb that saves to disk
-- kind of copied from luasocket's manual callback examples
function stats(size)
local start = socket.gettime()
local last = start
local got = 0
return function(chunk)
-- elapsed time since start
local current = socket.gettime()
if chunk then
-- total bytes received
got = got + string.len(chunk)
-- not enough time for estimate
if current - last > 1 then
io.stderr:write("\r", gauge(got, current - start, size))
io.stderr:flush()
last = current
end
else
-- close up
io.stderr:write("\r", gauge(got, current - start), "\n")
end
return chunk
end
end
-- determines the size of a http file
function gethttpsize(u)
local r, c, h = http.request {method = "HEAD", url = u}
if c == 200 then
return tonumber(h["content-length"])
end
end
-- downloads a file using the http protocol
function getbyhttp(u, file)
local save = ltn12.sink.file(file or io.stdout)
-- only print feedback if output is not stdout
if file then save = ltn12.sink.chain(stats(gethttpsize(u)), save) end
local r, c, h, s = http.request {url = u, sink = save }
if c ~= 200 then io.stderr:write(s or c, "\n") end
end
-- downloads a file using the ftp protocol
function getbyftp(u, file)
local save = ltn12.sink.file(file or io.stdout)
-- only print feedback if output is not stdout
-- and we don't know how big the file is
if file then save = ltn12.sink.chain(stats(), save) end
local gett = url.parse(u)
gett.sink = save
gett.type = "i"
local ret, err = ftp.get(gett)
if err then print(err) end
end
-- determines the scheme
function getscheme(u)
-- this is an heuristic to solve a common invalid url poblem
if not string.find(u, "//") then u = "//" .. u end
local parsed = url.parse(u, {scheme = "http"})
return parsed.scheme
end
-- gets a file either by http or ftp, saving as <name>
function get(u, name)
local fout = name and io.open(name, "wb")
local scheme = getscheme(u)
if scheme == "ftp" then getbyftp(u, fout)
elseif scheme == "http" then getbyhttp(u, fout)
else print("unknown scheme" .. scheme) end
end
-- main program
arg = arg or {}
if table.getn(arg) < 1 then
io.write("Usage:\n lua get.lua <remote-url> [<local-file>]\n")
os.exit(1)
else get(arg[1], arg[2]) end
@@ -0,0 +1,324 @@
-----------------------------------------------------------------------------
-- LPD support for the Lua language
-- LuaSocket toolkit.
-- Author: David Burgess
-- Modified by Diego Nehab, but David is in charge
-- RCS ID: $Id: lp.lua,v 1.14 2005/11/21 07:04:44 diego Exp $
-----------------------------------------------------------------------------
--[[
if you have any questions: RFC 1179
]]
-- make sure LuaSocket is loaded
local io = require("io")
local base = _G
local os = require("os")
local math = require("math")
local string = require("string")
local socket = require("socket")
local ltn12 = require("ltn12")
module("socket.lp")
-- default port
PORT = 515
SERVER = os.getenv("SERVER_NAME") or os.getenv("COMPUTERNAME") or "localhost"
PRINTER = os.getenv("PRINTER") or "printer"
local function connect(localhost, option)
local host = option.host or SERVER
local port = option.port or PORT
local skt
local try = socket.newtry(function() if skt then skt:close() end end)
if option.localbind then
-- bind to a local port (if we can)
local localport = 721
local done, err
repeat
skt = socket.try(socket.tcp())
try(skt:settimeout(30))
done, err = skt:bind(localhost, localport)
if not done then
localport = localport + 1
skt:close()
skt = nil
else break end
until localport > 731
socket.try(skt, err)
else skt = socket.try(socket.tcp()) end
try(skt:connect(host, port))
return { skt = skt, try = try }
end
--[[
RFC 1179
5.3 03 - Send queue state (short)
+----+-------+----+------+----+
| 03 | Queue | SP | List | LF |
+----+-------+----+------+----+
Command code - 3
Operand 1 - Printer queue name
Other operands - User names or job numbers
If the user names or job numbers or both are supplied then only those
jobs for those users or with those numbers will be sent.
The response is an ASCII stream which describes the printer queue.
The stream continues until the connection closes. Ends of lines are
indicated with ASCII LF control characters. The lines may also
contain ASCII HT control characters.
5.4 04 - Send queue state (long)
+----+-------+----+------+----+
| 04 | Queue | SP | List | LF |
+----+-------+----+------+----+
Command code - 4
Operand 1 - Printer queue name
Other operands - User names or job numbers
If the user names or job numbers or both are supplied then only those
jobs for those users or with those numbers will be sent.
The response is an ASCII stream which describes the printer queue.
The stream continues until the connection closes. Ends of lines are
indicated with ASCII LF control characters. The lines may also
contain ASCII HT control characters.
]]
-- gets server acknowledement
local function recv_ack(con)
local ack = con.skt:receive(1)
con.try(string.char(0) == ack, "failed to receive server acknowledgement")
end
-- sends client acknowledement
local function send_ack(con)
local sent = con.skt:send(string.char(0))
con.try(sent == 1, "failed to send acknowledgement")
end
-- sends queue request
-- 5.2 02 - Receive a printer job
--
-- +----+-------+----+
-- | 02 | Queue | LF |
-- +----+-------+----+
-- Command code - 2
-- Operand - Printer queue name
--
-- Receiving a job is controlled by a second level of commands. The
-- daemon is given commands by sending them over the same connection.
-- The commands are described in the next section (6).
--
-- After this command is sent, the client must read an acknowledgement
-- octet from the daemon. A positive acknowledgement is an octet of
-- zero bits. A negative acknowledgement is an octet of any other
-- pattern.
local function send_queue(con, queue)
queue = queue or PRINTER
local str = string.format("\2%s\10", queue)
local sent = con.skt:send(str)
con.try(sent == string.len(str), "failed to send print request")
recv_ack(con)
end
-- sends control file
-- 6.2 02 - Receive control file
--
-- +----+-------+----+------+----+
-- | 02 | Count | SP | Name | LF |
-- +----+-------+----+------+----+
-- Command code - 2
-- Operand 1 - Number of bytes in control file
-- Operand 2 - Name of control file
--
-- The control file must be an ASCII stream with the ends of lines
-- indicated by ASCII LF. The total number of bytes in the stream is
-- sent as the first operand. The name of the control file is sent as
-- the second. It should start with ASCII "cfA", followed by a three
-- digit job number, followed by the host name which has constructed the
-- control file. Acknowledgement processing must occur as usual after
-- the command is sent.
--
-- The next "Operand 1" octets over the same TCP connection are the
-- intended contents of the control file. Once all of the contents have
-- been delivered, an octet of zero bits is sent as an indication that
-- the file being sent is complete. A second level of acknowledgement
-- processing must occur at this point.
-- sends data file
-- 6.3 03 - Receive data file
--
-- +----+-------+----+------+----+
-- | 03 | Count | SP | Name | LF |
-- +----+-------+----+------+----+
-- Command code - 3
-- Operand 1 - Number of bytes in data file
-- Operand 2 - Name of data file
--
-- The data file may contain any 8 bit values at all. The total number
-- of bytes in the stream may be sent as the first operand, otherwise
-- the field should be cleared to 0. The name of the data file should
-- start with ASCII "dfA". This should be followed by a three digit job
-- number. The job number should be followed by the host name which has
-- constructed the data file. Interpretation of the contents of the
-- data file is determined by the contents of the corresponding control
-- file. If a data file length has been specified, the next "Operand 1"
-- octets over the same TCP connection are the intended contents of the
-- data file. In this case, once all of the contents have been
-- delivered, an octet of zero bits is sent as an indication that the
-- file being sent is complete. A second level of acknowledgement
-- processing must occur at this point.
local function send_hdr(con, control)
local sent = con.skt:send(control)
con.try(sent and sent >= 1 , "failed to send header file")
recv_ack(con)
end
local function send_control(con, control)
local sent = con.skt:send(control)
con.try(sent and sent >= 1, "failed to send control file")
send_ack(con)
end
local function send_data(con,fh,size)
local buf
while size > 0 do
buf,message = fh:read(8192)
if buf then
st = con.try(con.skt:send(buf))
size = size - st
else
con.try(size == 0, "file size mismatch")
end
end
recv_ack(con) -- note the double acknowledgement
send_ack(con)
recv_ack(con)
return size
end
--[[
local control_dflt = {
"H"..string.sub(socket.hostname,1,31).."\10", -- host
"C"..string.sub(socket.hostname,1,31).."\10", -- class
"J"..string.sub(filename,1,99).."\10", -- jobname
"L"..string.sub(user,1,31).."\10", -- print banner page
"I"..tonumber(indent).."\10", -- indent column count ('f' only)
"M"..string.sub(mail,1,128).."\10", -- mail when printed user@host
"N"..string.sub(filename,1,131).."\10", -- name of source file
"P"..string.sub(user,1,31).."\10", -- user name
"T"..string.sub(title,1,79).."\10", -- title for banner ('p' only)
"W"..tonumber(width or 132).."\10", -- width of print f,l,p only
"f"..file.."\10", -- formatted print (remove control chars)
"l"..file.."\10", -- print
"o"..file.."\10", -- postscript
"p"..file.."\10", -- pr format - requires T, L
"r"..file.."\10", -- fortran format
"U"..file.."\10", -- Unlink (data file only)
}
]]
-- generate a varying job number
local seq = 0
local function newjob(connection)
seq = seq + 1
return math.floor(socket.gettime() * 1000 + seq)%1000
end
local format_codes = {
binary = 'l',
text = 'f',
ps = 'o',
pr = 'p',
fortran = 'r',
l = 'l',
r = 'r',
o = 'o',
p = 'p',
f = 'f'
}
-- lp.send{option}
-- requires option.file
send = socket.protect(function(option)
socket.try(option and base.type(option) == "table", "invalid options")
local file = option.file
socket.try(file, "invalid file name")
local fh = socket.try(io.open(file,"rb"))
local datafile_size = fh:seek("end") -- get total size
fh:seek("set") -- go back to start of file
local localhost = socket.dns.gethostname() or os.getenv("COMPUTERNAME")
or "localhost"
local con = connect(localhost, option)
-- format the control file
local jobno = newjob()
local localip = socket.dns.toip(localhost)
localhost = string.sub(localhost,1,31)
local user = string.sub(option.user or os.getenv("LPRUSER") or
os.getenv("USERNAME") or os.getenv("USER") or "anonymous", 1,31)
local lpfile = string.format("dfA%3.3d%-s", jobno, localhost);
local fmt = format_codes[option.format] or 'l'
local class = string.sub(option.class or localip or localhost,1,31)
local _,_,ctlfn = string.find(file,".*[%/%\\](.*)")
ctlfn = string.sub(ctlfn or file,1,131)
local cfile =
string.format("H%-s\nC%-s\nJ%-s\nP%-s\n%.1s%-s\nU%-s\nN%-s\n",
localhost,
class,
option.job or "LuaSocket",
user,
fmt, lpfile,
lpfile,
ctlfn); -- mandatory part of ctl file
if (option.banner) then cfile = cfile .. 'L'..user..'\10' end
if (option.indent) then cfile = cfile .. 'I'..base.tonumber(option.indent)..'\10' end
if (option.mail) then cfile = cfile .. 'M'..string.sub((option.mail),1,128)..'\10' end
if (fmt == 'p' and option.title) then cfile = cfile .. 'T'..string.sub((option.title),1,79)..'\10' end
if ((fmt == 'p' or fmt == 'l' or fmt == 'f') and option.width) then
cfile = cfile .. 'W'..base.tonumber(option,width)..'\10'
end
con.skt:settimeout(option.timeout or 65)
-- send the queue header
send_queue(con, option.queue)
-- send the control file header
local cfilecmd = string.format("\2%d cfA%3.3d%-s\n",string.len(cfile), jobno, localhost);
send_hdr(con,cfilecmd)
-- send the control file
send_control(con,cfile)
-- send the data file header
local dfilecmd = string.format("\3%d dfA%3.3d%-s\n",datafile_size, jobno, localhost);
send_hdr(con,dfilecmd)
-- send the data file
send_data(con,fh,datafile_size)
fh:close()
con.skt:close();
return jobno, datafile_size
end)
--
-- lp.query({host=,queue=printer|'*', format='l'|'s', list=})
--
query = socket.protect(function(p)
p = p or {}
local localhost = socket.dns.gethostname() or os.getenv("COMPUTERNAME")
or "localhost"
local con = connect(localhost,p)
local fmt
if string.sub(p.format or 's',1,1) == 's' then fmt = 3 else fmt = 4 end
con.try(con.skt:send(string.format("%c%s %s\n", fmt, p.queue or "*",
p.list or "")))
local data = con.try(con.skt:receive("*a"))
con.skt:close()
return data
end)
@@ -0,0 +1,24 @@
-----------------------------------------------------------------------------
-- Little program to convert to and from Quoted-Printable
-- LuaSocket sample files
-- Author: Diego Nehab
-- RCS ID: $Id: qp.lua,v 1.5 2004/06/17 21:46:22 diego Exp $
-----------------------------------------------------------------------------
local ltn12 = require("ltn12")
local mime = require("mime")
local convert
arg = arg or {}
local mode = arg and arg[1] or "-et"
if mode == "-et" then
local normalize = mime.normalize()
local qp = mime.encode("quoted-printable")
local wrap = mime.wrap("quoted-printable")
convert = ltn12.filter.chain(normalize, qp, wrap)
elseif mode == "-eb" then
local qp = mime.encode("quoted-printable", "binary")
local wrap = mime.wrap("quoted-printable")
convert = ltn12.filter.chain(qp, wrap)
else convert = mime.decode("quoted-printable") end
local source = ltn12.source.chain(ltn12.source.file(io.stdin), convert)
local sink = ltn12.sink.file(io.stdout)
ltn12.pump.all(source, sink)
@@ -0,0 +1,155 @@
-----------------------------------------------------------------------------
-- TFTP support for the Lua language
-- LuaSocket toolkit.
-- Author: Diego Nehab
-- RCS ID: $Id: tftp.lua,v 1.16 2005/11/22 08:33:29 diego Exp $
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Load required files
-----------------------------------------------------------------------------
local base = _G
local table = require("table")
local math = require("math")
local string = require("string")
local socket = require("socket")
local ltn12 = require("ltn12")
local url = require("socket.url")
module("socket.tftp")
-----------------------------------------------------------------------------
-- Program constants
-----------------------------------------------------------------------------
local char = string.char
local byte = string.byte
PORT = 69
local OP_RRQ = 1
local OP_WRQ = 2
local OP_DATA = 3
local OP_ACK = 4
local OP_ERROR = 5
local OP_INV = {"RRQ", "WRQ", "DATA", "ACK", "ERROR"}
-----------------------------------------------------------------------------
-- Packet creation functions
-----------------------------------------------------------------------------
local function RRQ(source, mode)
return char(0, OP_RRQ) .. source .. char(0) .. mode .. char(0)
end
local function WRQ(source, mode)
return char(0, OP_RRQ) .. source .. char(0) .. mode .. char(0)
end
local function ACK(block)
local low, high
low = math.mod(block, 256)
high = (block - low)/256
return char(0, OP_ACK, high, low)
end
local function get_OP(dgram)
local op = byte(dgram, 1)*256 + byte(dgram, 2)
return op
end
-----------------------------------------------------------------------------
-- Packet analysis functions
-----------------------------------------------------------------------------
local function split_DATA(dgram)
local block = byte(dgram, 3)*256 + byte(dgram, 4)
local data = string.sub(dgram, 5)
return block, data
end
local function get_ERROR(dgram)
local code = byte(dgram, 3)*256 + byte(dgram, 4)
local msg
_,_, msg = string.find(dgram, "(.*)\000", 5)
return string.format("error code %d: %s", code, msg)
end
-----------------------------------------------------------------------------
-- The real work
-----------------------------------------------------------------------------
local function tget(gett)
local retries, dgram, sent, datahost, dataport, code
local last = 0
socket.try(gett.host, "missing host")
local con = socket.try(socket.udp())
local try = socket.newtry(function() con:close() end)
-- convert from name to ip if needed
gett.host = try(socket.dns.toip(gett.host))
con:settimeout(1)
-- first packet gives data host/port to be used for data transfers
local path = string.gsub(gett.path or "", "^/", "")
path = url.unescape(path)
retries = 0
repeat
sent = try(con:sendto(RRQ(path, "octet"), gett.host, gett.port))
dgram, datahost, dataport = con:receivefrom()
retries = retries + 1
until dgram or datahost ~= "timeout" or retries > 5
try(dgram, datahost)
-- associate socket with data host/port
try(con:setpeername(datahost, dataport))
-- default sink
local sink = gett.sink or ltn12.sink.null()
-- process all data packets
while 1 do
-- decode packet
code = get_OP(dgram)
try(code ~= OP_ERROR, get_ERROR(dgram))
try(code == OP_DATA, "unhandled opcode " .. code)
-- get data packet parts
local block, data = split_DATA(dgram)
-- if not repeated, write
if block == last+1 then
try(sink(data))
last = block
end
-- last packet brings less than 512 bytes of data
if string.len(data) < 512 then
try(con:send(ACK(block)))
try(con:close())
try(sink(nil))
return 1
end
-- get the next packet
retries = 0
repeat
sent = try(con:send(ACK(last)))
dgram, err = con:receive()
retries = retries + 1
until dgram or err ~= "timeout" or retries > 5
try(dgram, err)
end
end
local default = {
port = PORT,
path ="/",
scheme = "tftp"
}
local function parse(u)
local t = socket.try(url.parse(u, default))
socket.try(t.scheme == "tftp", "invalid scheme '" .. t.scheme .. "'")
socket.try(t.host, "invalid host")
return t
end
local function sget(u)
local gett = parse(u)
local t = {}
gett.sink = ltn12.sink.table(t)
tget(gett)
return table.concat(t)
end
get = socket.protect(function(gett)
if base.type(gett) == "string" then return sget(gett)
else return tget(gett) end
end)
@@ -0,0 +1,50 @@
This directory contains some sample programs using
LuaSocket. This code is not supported.
listener.lua -- socket to stdout
talker.lua -- stdin to socket
listener.lua and talker.lua are about the simplest
applications you can write using LuaSocket. Run
'lua listener.lua' and 'lua talker.lua'
on different terminals. Whatever you type on talk.lua will
be printed by listen.lua.
lpr.lua -- lpr client
This is a cool program written by David Burgess to print
files using the Line Printer Daemon protocol, widely used in
Unix machines. It uses the lp.lua implementation, in the
etc directory. Just run 'lua lpr.lua <filename>
queue=<printername>' and the file will print!
cddb.lua -- CDDB client
This is the first try on a simple CDDB client. Not really
useful, but one day it might become a module.
daytimeclnt.lua -- day time client
Just run the program to retrieve the hour and date in
readable form from any server running an UDP daytime daemon.
echoclnt.lua -- UDP echo client
echosrvr.lua -- UDP echo server
These are a UDP echo client/server pair. They work with
other client and servers as well.
tinyirc.lua -- irc like broadcast server
This is a simple server that waits simultaneously on two
server sockets for telnet connections. Everything it
receives from the telnet clients is broadcasted to every
other connected client. It tests the select function and
shows how to create a simple server whith LuaSocket. Just
run tinyirc.lua and then open as many telnet connections
as you want to ports 8080 and 8081.
Good luck,
Diego.
@@ -0,0 +1,46 @@
local socket = require("socket")
local http = require("socket.http")
if not arg or not arg[1] or not arg[2] then
print("luasocket cddb.lua <category> <disc-id> [<server>]")
os.exit(1)
end
local server = arg[3] or "http://freedb.freedb.org/~cddb/cddb.cgi"
function parse(body)
local lines = string.gfind(body, "(.-)\r\n")
local status = lines()
local code, message = socket.skip(2, string.find(status, "(%d%d%d) (.*)"))
if tonumber(code) ~= 210 then
return nil, code, message
end
local data = {}
for l in lines do
local c = string.sub(l, 1, 1)
if c ~= '#' and c ~= '.' then
local key, value = socket.skip(2, string.find(l, "(.-)=(.*)"))
value = string.gsub(value, "\\n", "\n")
value = string.gsub(value, "\\\\", "\\")
value = string.gsub(value, "\\t", "\t")
data[key] = value
end
end
return data, code, message
end
local host = socket.dns.gethostname()
local query = "%s?cmd=cddb+read+%s+%s&hello=LuaSocket+%s+LuaSocket+2.0&proto=6"
local url = string.format(query, server, arg[1], arg[2], host)
local body, headers, code = http.get(url)
if code == 200 then
local data, code, error = parse(body)
if not data then
print(error or code)
else
for i,v in pairs(data) do
io.write(i, ': ', v, '\n')
end
end
else print(error) end
@@ -0,0 +1,23 @@
-----------------------------------------------------------------------------
-- UDP sample: daytime protocol client
-- LuaSocket sample files
-- Author: Diego Nehab
-- RCS ID: $Id: daytimeclnt.lua,v 1.11 2004/06/21 06:07:57 diego Exp $
-----------------------------------------------------------------------------
local socket = require"socket"
host = host or "127.0.0.1"
port = port or 13
if arg then
host = arg[1] or host
port = arg[2] or port
end
host = socket.dns.toip(host)
udp = socket.udp()
print("Using host '" ..host.. "' and port " ..port.. "...")
udp:setpeername(host, port)
udp:settimeout(3)
sent, err = udp:send("anything")
if err then print(err) os.exit() end
dgram, err = udp:receive()
if not dgram then print(err) os.exit() end
io.write(dgram)
@@ -0,0 +1,24 @@
-----------------------------------------------------------------------------
-- UDP sample: echo protocol client
-- LuaSocket sample files
-- Author: Diego Nehab
-- RCS ID: $Id: echoclnt.lua,v 1.10 2005/01/02 22:44:00 diego Exp $
-----------------------------------------------------------------------------
local socket = require("socket")
host = host or "localhost"
port = port or 7
if arg then
host = arg[1] or host
port = arg[2] or port
end
host = socket.dns.toip(host)
udp = assert(socket.udp())
assert(udp:setpeername(host, port))
print("Using remote host '" ..host.. "' and port " .. port .. "...")
while 1 do
line = io.read()
if not line or line == "" then os.exit() end
assert(udp:send(line))
dgram = assert(udp:receive())
print(dgram)
end
@@ -0,0 +1,29 @@
-----------------------------------------------------------------------------
-- UDP sample: echo protocol server
-- LuaSocket sample files
-- Author: Diego Nehab
-- RCS ID: $Id: echosrvr.lua,v 1.12 2005/11/22 08:33:29 diego Exp $
-----------------------------------------------------------------------------
local socket = require("socket")
host = host or "127.0.0.1"
port = port or 7
if arg then
host = arg[1] or host
port = arg[2] or port
end
print("Binding to host '" ..host.. "' and port " ..port.. "...")
udp = assert(socket.udp())
assert(udp:setsockname(host, port))
assert(udp:settimeout(5))
ip, port = udp:getsockname()
assert(ip, port)
print("Waiting packets on " .. ip .. ":" .. port .. "...")
while 1 do
dgram, ip, port = udp:receivefrom()
if dgram then
print("Echoing '" .. dgram .. "' to " .. ip .. ":" .. port)
udp:sendto(dgram, ip, port)
else
print(ip)
end
end
@@ -0,0 +1,26 @@
-----------------------------------------------------------------------------
-- TCP sample: Little program to dump lines received at a given port
-- LuaSocket sample files
-- Author: Diego Nehab
-- RCS ID: $Id: listener.lua,v 1.11 2005/01/02 22:44:00 diego Exp $
-----------------------------------------------------------------------------
local socket = require("socket")
host = host or "*"
port = port or 8080
if arg then
host = arg[1] or host
port = arg[2] or port
end
print("Binding to host '" ..host.. "' and port " ..port.. "...")
s = assert(socket.bind(host, port))
i, p = s:getsockname()
assert(i, p)
print("Waiting connection from talker on " .. i .. ":" .. p .. "...")
c = assert(s:accept())
print("Connected. Here is the stuff:")
l, e = c:receive()
while not e do
print(l)
l, e = c:receive()
end
print(e)
@@ -0,0 +1,51 @@
local lp = require("socket.lp")
local function usage()
print('\nUsage: lua lpr.lua [filename] [keyword=val...]\n')
print('Valid keywords are :')
print(
' host=remote host or IP address (default "localhost")\n' ..
' queue=remote queue or printer name (default "printer")\n' ..
' port=remote port number (default 515)\n' ..
' user=sending user name\n' ..
' format=["binary" | "text" | "ps" | "pr" | "fortran"] (default "binary")\n' ..
' banner=true|false\n' ..
' indent=number of columns to indent\n' ..
' mail=email of address to notify when print is complete\n' ..
' title=title to use for "pr" format\n' ..
' width=width for "text" or "pr" formats\n' ..
' class=\n' ..
' job=\n' ..
' name=\n' ..
' localbind=true|false\n'
)
return nil
end
if not arg or not arg[1] then
return usage()
end
do
local opt = {}
local pat = "[%s%c%p]*([%w]*)=([\"]?[%w%s_!@#$%%^&*()<>:;]+[\"]\?\.?)"
for i = 2, table.getn(arg), 1 do
string.gsub(arg[i], pat, function(name, value) opt[name] = value end)
end
if not arg[2] then
return usage()
end
if arg[1] ~= "query" then
opt.file = arg[1]
r,e=lp.send(opt)
io.stdout:write(tostring(r or e),'\n')
else
r,e=lp.query(opt)
io.stdout:write(tostring(r or e), '\n')
end
end
-- trivial tests
--lua lp.lua lp.lua queue=default host=localhost
--lua lp.lua lp.lua queue=default host=localhost format=binary localbind=1
--lua lp.lua query queue=default host=localhost
@@ -0,0 +1,21 @@
-----------------------------------------------------------------------------
-- TCP sample: Little program to send text lines to a given host/port
-- LuaSocket sample files
-- Author: Diego Nehab
-- RCS ID: $Id: talker.lua,v 1.9 2005/01/02 22:44:00 diego Exp $
-----------------------------------------------------------------------------
local socket = require("socket")
host = host or "localhost"
port = port or 8080
if arg then
host = arg[1] or host
port = arg[2] or port
end
print("Attempting connection to host '" ..host.. "' and port " ..port.. "...")
c = assert(socket.connect(host, port))
print("Connected! Please type stuff (empty line to stop):")
l = io.read()
while l and l ~= "" and not e do
assert(c:send(l .. "\n"))
l = io.read()
end
@@ -0,0 +1,90 @@
-----------------------------------------------------------------------------
-- Select sample: simple text line server
-- LuaSocket sample files.
-- Author: Diego Nehab
-- RCS ID: $Id: tinyirc.lua,v 1.14 2005/11/22 08:33:29 diego Exp $
-----------------------------------------------------------------------------
local socket = require("socket")
host = host or "*"
port1 = port1 or 8080
port2 = port2 or 8181
if arg then
host = arg[1] or host
port1 = arg[2] or port1
port2 = arg[3] or port2
end
server1 = assert(socket.bind(host, port1))
server2 = assert(socket.bind(host, port2))
server1:settimeout(1) -- make sure we don't block in accept
server2:settimeout(1)
io.write("Servers bound\n")
-- simple set implementation
-- the select function doesn't care about what is passed to it as long as
-- it behaves like a table
-- creates a new set data structure
function newset()
local reverse = {}
local set = {}
return setmetatable(set, {__index = {
insert = function(set, value)
if not reverse[value] then
table.insert(set, value)
reverse[value] = table.getn(set)
end
end,
remove = function(set, value)
local index = reverse[value]
if index then
reverse[value] = nil
local top = table.remove(set)
if top ~= value then
reverse[top] = index
set[index] = top
end
end
end
}})
end
set = newset()
io.write("Inserting servers in set\n")
set:insert(server1)
set:insert(server2)
while 1 do
local readable, _, error = socket.select(set, nil)
for _, input in ipairs(readable) do
-- is it a server socket?
if input == server1 or input == server2 then
io.write("Waiting for clients\n")
local new = input:accept()
if new then
new:settimeout(1)
io.write("Inserting client in set\n")
set:insert(new)
end
-- it is a client socket
else
local line, error = input:receive()
if error then
input:close()
io.write("Removing client from set\n")
set:remove(input)
else
io.write("Broadcasting line '", line, "'\n")
writable, error = socket.skip(1, socket.select(nil, set, 1))
if not error then
for __, output in ipairs(writable) do
if output ~= input then
output:send(line .. "\n")
end
end
else io.write("No client ready to receive!!!\n") end
end
end
end
end
@@ -0,0 +1,12 @@
This provides the automated test scripts used to make sure the library
is working properly.
The files provided are:
testsrvr.lua -- test server
testclnt.lua -- test client
To run these tests, just run lua on the server and then on the client.
Good luck,
Diego.
@@ -0,0 +1,713 @@
local socket = require"socket"
host = "mips-ml402"
port = "8383"
function pass(...)
local s = string.format(unpack(arg))
io.stderr:write(s, "\n")
end
function fail(...)
local s = string.format(unpack(arg))
io.stderr:write("ERROR: ", s, "!\n")
socket.core.sleep(3)
os.exit()
end
function warn(...)
local s = string.format(unpack(arg))
io.stderr:write("WARNING: ", s, "\n")
end
function remote(...)
local s = string.format(unpack(arg))
s = string.gsub(s, "\n", ";")
s = string.gsub(s, "%s+", " ")
s = string.gsub(s, "^%s*", "")
control:send(s .. "\n")
control:receive()
end
function test(test)
io.stderr:write("----------------------------------------------\n",
"testing: ", test, "\n",
"----------------------------------------------\n")
end
function check_timeout(tm, sl, elapsed, err, opp, mode, alldone)
if tm < sl then
if opp == "send" then
if not err then warn("must be buffered")
elseif err == "timeout" then pass("proper timeout")
else fail("unexpected error '%s'", err) end
else
if err ~= "timeout" then fail("should have timed out")
else pass("proper timeout") end
end
else
if mode == "total" then
if elapsed > tm then
if err ~= "timeout" then fail("should have timed out")
else pass("proper timeout") end
elseif elapsed < tm then
if err then fail(err)
else pass("ok") end
else
if alldone then
if err then fail("unexpected error '%s'", err)
else pass("ok") end
else
if err ~= "timeout" then fail(err)
else pass("proper timeoutk") end
end
end
else
if err then fail(err)
else pass("ok") end
end
end
end
if not socket.core._DEBUG then
fail("Please define LUASOCKET_DEBUG and recompile LuaSocket")
end
io.stderr:write("----------------------------------------------\n",
"LuaSocket Test Procedures\n",
"----------------------------------------------\n")
start = socket.gettime()
function reconnect()
io.stderr:write("attempting data connection... ")
if data then data:close() end
remote [[
if data then data:close() data = nil end
data = server:accept()
data:setoption("tcp-nodelay", true)
]]
data, err = socket.connect(host, port)
if not data then fail(err)
else pass("connected!") end
data:setoption("tcp-nodelay", true)
end
pass("attempting control connection...")
control, err = socket.connect(host, port)
if err then fail(err)
else pass("connected!") end
control:setoption("tcp-nodelay", true)
------------------------------------------------------------------------
function test_methods(sock, methods)
for _, v in pairs(methods) do
if type(sock[v]) ~= "function" then
fail(sock.class .. " method '" .. v .. "' not registered")
end
end
pass(sock.class .. " methods are ok")
end
------------------------------------------------------------------------
function test_mixed(len)
reconnect()
local inter = math.ceil(len/4)
local p1 = "unix " .. string.rep("x", inter) .. "line\n"
local p2 = "dos " .. string.rep("y", inter) .. "line\r\n"
local p3 = "raw " .. string.rep("z", inter) .. "bytes"
local p4 = "end" .. string.rep("w", inter) .. "bytes"
local bp1, bp2, bp3, bp4
remote (string.format("str = data:receive(%d)",
string.len(p1)+string.len(p2)+string.len(p3)+string.len(p4)))
sent, err = data:send(p1..p2..p3..p4)
if err then fail(err) end
remote "data:send(str); data:close()"
bp1, err = data:receive()
if err then fail(err) end
bp2, err = data:receive()
if err then fail(err) end
bp3, err = data:receive(string.len(p3))
if err then fail(err) end
bp4, err = data:receive("*a")
if err then fail(err) end
if bp1.."\n" == p1 and bp2.."\r\n" == p2 and bp3 == p3 and bp4 == p4 then
pass("patterns match")
else fail("patterns don't match") end
end
------------------------------------------------------------------------
function test_asciiline(len)
reconnect()
local str, str10, back, err
str = string.rep("x", math.mod(len, 10))
str10 = string.rep("aZb.c#dAe?", math.floor(len/10))
str = str .. str10
remote "str = data:receive()"
sent, err = data:send(str.."\n")
if err then fail(err) end
remote "data:send(str ..'\\n')"
back, err = data:receive()
if err then fail(err) end
if back == str then pass("lines match")
else fail("lines don't match") end
end
------------------------------------------------------------------------
function test_rawline(len)
reconnect()
local str, str10, back, err
str = string.rep(string.char(47), math.mod(len, 10))
str10 = string.rep(string.char(120,21,77,4,5,0,7,36,44,100),
math.floor(len/10))
str = str .. str10
remote "str = data:receive()"
sent, err = data:send(str.."\n")
if err then fail(err) end
remote "data:send(str..'\\n')"
back, err = data:receive()
if err then fail(err) end
if back == str then pass("lines match")
else fail("lines don't match") end
end
------------------------------------------------------------------------
function test_raw(len)
reconnect()
local half = math.floor(len/2)
local s1, s2, back, err
s1 = string.rep("x", half)
s2 = string.rep("y", len-half)
remote (string.format("str = data:receive(%d)", len))
sent, err = data:send(s1)
if err then fail(err) end
sent, err = data:send(s2)
if err then fail(err) end
remote "data:send(str)"
back, err = data:receive(len)
if err then fail(err) end
if back == s1..s2 then pass("blocks match")
else fail("blocks don't match") end
end
------------------------------------------------------------------------
function test_totaltimeoutreceive(len, tm, sl)
reconnect()
local str, err, partial
pass("%d bytes, %ds total timeout, %ds pause", len, tm, sl)
remote (string.format ([[
data:settimeout(%d)
str = string.rep('a', %d)
data:send(str)
print('server: sleeping for %ds')
socket.core.sleep(%d)
print('server: woke up')
data:send(str)
]], 2*tm, len, sl, sl))
data:settimeout(tm, "total")
local t = socket.gettime()
str, err, partial, elapsed = data:receive(2*len)
check_timeout(tm, sl, elapsed, err, "receive", "total",
string.len(str or partial) == 2*len)
end
------------------------------------------------------------------------
function test_totaltimeoutsend(len, tm, sl)
reconnect()
local str, err, total
pass("%d bytes, %ds total timeout, %ds pause", len, tm, sl)
remote (string.format ([[
data:settimeout(%d)
str = data:receive(%d)
print('server: sleeping for %ds')
socket.sleep(%d)
print('server: woke up')
str = data:receive(%d)
]], 2*tm, len, sl, sl, len))
data:settimeout(tm, "total")
str = string.rep("a", 2*len)
total, err, partial, elapsed = data:send(str)
check_timeout(tm, sl, elapsed, err, "send", "total",
total == 2*len)
end
------------------------------------------------------------------------
function test_blockingtimeoutreceive(len, tm, sl)
reconnect()
local str, err, partial
pass("%d bytes, %ds blocking timeout, %ds pause", len, tm, sl)
remote (string.format ([[
data:settimeout(%d)
str = string.rep('a', %d)
data:send(str)
print('server: sleeping for %ds')
socket.sleep(%d)
print('server: woke up')
data:send(str)
]], 2*tm, len, sl, sl))
data:settimeout(tm)
str, err, partial, elapsed = data:receive(2*len)
check_timeout(tm, sl, elapsed, err, "receive", "blocking",
string.len(str or partial) == 2*len)
end
------------------------------------------------------------------------
function test_blockingtimeoutsend(len, tm, sl)
reconnect()
local str, err, total
pass("%d bytes, %ds blocking timeout, %ds pause", len, tm, sl)
remote (string.format ([[
data:settimeout(%d)
str = data:receive(%d)
print('server: sleeping for %ds')
socket.sleep(%d)
print('server: woke up')
str = data:receive(%d)
]], 2*tm, len, sl, sl, len))
data:settimeout(tm)
str = string.rep("a", 2*len)
total, err, partial, elapsed = data:send(str)
check_timeout(tm, sl, elapsed, err, "send", "blocking",
total == 2*len)
end
------------------------------------------------------------------------
function empty_connect()
reconnect()
if data then data:close() data = nil end
remote [[
if data then data:close() data = nil end
data = server:accept()
]]
data, err = socket.connect("", port)
if not data then
pass("ok")
data = socket.connect(host, port)
else
pass("gethostbyname returns localhost on empty string...")
end
end
------------------------------------------------------------------------
function isclosed(c)
return c:getfd() == -1 or c:getfd() == (2^32-1)
end
function active_close()
reconnect()
if isclosed(data) then fail("should not be closed") end
data:close()
if not isclosed(data) then fail("should be closed") end
data = nil
local udp = socket.udp()
if isclosed(udp) then fail("should not be closed") end
udp:close()
if not isclosed(udp) then fail("should be closed") end
pass("ok")
end
------------------------------------------------------------------------
function test_closed()
local back, partial, err
local str = 'little string'
reconnect()
pass("trying read detection")
remote (string.format ([[
data:send('%s')
data:close()
data = nil
]], str))
-- try to get a line
back, err, partial = data:receive()
if not err then fail("should have gotten 'closed'.")
elseif err ~= "closed" then fail("got '"..err.."' instead of 'closed'.")
elseif str ~= partial then fail("didn't receive partial result.")
else pass("graceful 'closed' received") end
reconnect()
pass("trying write detection")
remote [[
data:close()
data = nil
]]
total, err, partial = data:send(string.rep("ugauga", 100000))
if not err then
pass("failed: output buffer is at least %d bytes long!", total)
elseif err ~= "closed" then
fail("got '"..err.."' instead of 'closed'.")
else
pass("graceful 'closed' received after %d bytes were sent", partial)
end
end
------------------------------------------------------------------------
function test_selectbugs()
local r, s, e = socket.select(nil, nil, 0.1)
assert(type(r) == "table" and type(s) == "table" and
(e == "timeout" or e == "error"))
pass("both nil: ok")
local udp = socket.udp()
udp:close()
r, s, e = socket.select({ udp }, { udp }, 0.1)
assert(type(r) == "table" and type(s) == "table" and
(e == "timeout" or e == "error"))
pass("closed sockets: ok")
e = pcall(socket.select, "wrong", 1, 0.1)
assert(e == false)
e = pcall(socket.select, {}, 1, 0.1)
assert(e == false)
pass("invalid input: ok")
end
------------------------------------------------------------------------
function accept_timeout()
io.stderr:write("accept with timeout (if it hangs, it failed): ")
local s, e = socket.bind("*", 0, 0)
assert(s, e)
local t = socket.gettime()
s:settimeout(1)
local c, e = s:accept()
assert(not c, "should not accept")
assert(e == "timeout", string.format("wrong error message (%s)", e))
t = socket.gettime() - t
assert(t < 2, string.format("took to long to give up (%gs)", t))
s:close()
pass("good")
end
------------------------------------------------------------------------
function connect_timeout()
io.stderr:write("connect with timeout (if it hangs, it failed!): ")
local t = socket.gettime()
local c, e = socket.tcp()
assert(c, e)
c:settimeout(0.1)
local t = socket.gettime()
local r, e = c:connect("10.0.0.1", 81)
print(r, e)
assert(not r, "should not connect")
assert(socket.gettime() - t < 2, "took too long to give up.")
c:close()
print("ok")
end
------------------------------------------------------------------------
function accept_errors()
io.stderr:write("not listening: ")
local d, e = socket.bind("*", 0)
assert(d, e);
local c, e = socket.tcp();
assert(c, e);
d:setfd(c:getfd())
d:settimeout(2)
local r, e = d:accept()
assert(not r and e)
print("ok: ", e)
io.stderr:write("not supported: ")
local c, e = socket.udp()
assert(c, e);
d:setfd(c:getfd())
local r, e = d:accept()
assert(not r and e)
print("ok: ", e)
end
------------------------------------------------------------------------
function connect_errors()
io.stderr:write("connection refused: ")
local c, e = socket.connect("localhost", 1);
assert(not c and e)
print("ok: ", e)
io.stderr:write("host not found: ")
local c, e = socket.connect("host.is.invalid", 1);
assert(not c and e, e)
print("ok: ", e)
end
------------------------------------------------------------------------
function rebind_test()
local c = socket.bind("localhost", 0)
local i, p = c:getsockname()
local s, e = socket.tcp()
assert(s, e)
s:setoption("reuseaddr", false)
r, e = s:bind("localhost", p)
assert(not r, "managed to rebind!")
assert(e)
print("ok: ", e)
end
------------------------------------------------------------------------
function getstats_test()
reconnect()
local t = 0
for i = 1, 25 do
local c = math.random(1, 100)
remote (string.format ([[
str = data:receive(%d)
data:send(str)
]], c))
data:send(string.rep("a", c))
data:receive(c)
t = t + c
local r, s, a = data:getstats()
assert(r == t, "received count failed" .. tostring(r)
.. "/" .. tostring(t))
assert(s == t, "sent count failed" .. tostring(s)
.. "/" .. tostring(t))
end
print("ok")
end
------------------------------------------------------------------------
function test_nonblocking(size)
reconnect()
print("Testing " .. 2*size .. " bytes")
remote(string.format([[
data:send(string.rep("a", %d))
socket.sleep(0.5)
data:send(string.rep("b", %d) .. "\n")
]], size, size))
local err = "timeout"
local part = ""
local str
data:settimeout(0)
while 1 do
str, err, part = data:receive("*l", part)
if err ~= "timeout" then break end
end
assert(str == (string.rep("a", size) .. string.rep("b", size)))
reconnect()
remote(string.format([[
str = data:receive(%d)
socket.sleep(0.5)
str = data:receive(2*%d, str)
data:send(str)
]], size, size))
data:settimeout(0)
local start = 0
while 1 do
ret, err, start = data:send(str, start+1)
if err ~= "timeout" then break end
end
data:send("\n")
data:settimeout(-1)
local back = data:receive(2*size)
assert(back == str, "'" .. back .. "' vs '" .. str .. "'")
print("ok")
end
------------------------------------------------------------------------
function test_readafterclose()
local back, partial, err
local str = 'little string'
reconnect()
pass("trying repeated '*a' pattern")
remote (string.format ([[
data:send('%s')
data:close()
data = nil
]], str))
back, err, partial = data:receive("*a")
assert(back == str, "unexpected data read")
back, err, partial = data:receive("*a")
assert(back == nil and err == "closed", "should have returned 'closed'")
print("ok")
reconnect()
pass("trying active close before '*a'")
remote (string.format ([[
data:close()
data = nil
]]))
data:close()
back, err, partial = data:receive("*a")
assert(back == nil and err == "closed", "should have returned 'closed'")
print("ok")
reconnect()
pass("trying active close before '*l'")
remote (string.format ([[
data:close()
data = nil
]]))
data:close()
back, err, partial = data:receive()
assert(back == nil and err == "closed", "should have returned 'closed'")
print("ok")
reconnect()
pass("trying active close before raw 1")
remote (string.format ([[
data:close()
data = nil
]]))
data:close()
back, err, partial = data:receive(1)
assert(back == nil and err == "closed", "should have returned 'closed'")
print("ok")
reconnect()
pass("trying active close before raw 0")
remote (string.format ([[
data:close()
data = nil
]]))
data:close()
back, err, partial = data:receive(0)
assert(back == nil and err == "closed", "should have returned 'closed'")
print("ok")
end
test("method registration")
test_methods(socket.tcp(), {
"accept",
"bind",
"close",
"connect",
"dirty",
"getfd",
"getpeername",
"getsockname",
"getstats",
"setstats",
"listen",
"receive",
"send",
"setfd",
"setoption",
"setpeername",
"setsockname",
"settimeout",
"shutdown",
})
test_methods(socket.udp(), {
"close",
"getpeername",
"dirty",
"getfd",
"getpeername",
"getsockname",
"receive",
"receivefrom",
"send",
"sendto",
"setfd",
"setoption",
"setpeername",
"setsockname",
"settimeout"
})
test("testing read after close")
test_readafterclose()
test("select function")
test_selectbugs()
test("connect function")
connect_timeout()
empty_connect()
connect_errors()
test("rebinding: ")
rebind_test()
test("active close: ")
active_close()
test("closed connection detection: ")
test_closed()
test("accept function: ")
accept_timeout()
accept_errors()
test("getstats test")
getstats_test()
test("character line")
test_asciiline(1)
test_asciiline(17)
test_asciiline(200)
test_asciiline(4091)
test_asciiline(80199)
test_asciiline(8000000)
test_asciiline(80199)
test_asciiline(4091)
test_asciiline(200)
test_asciiline(17)
test_asciiline(1)
test("mixed patterns")
test_mixed(1)
test_mixed(17)
test_mixed(200)
test_mixed(4091)
test_mixed(801990)
test_mixed(4091)
test_mixed(200)
test_mixed(17)
test_mixed(1)
test("binary line")
test_rawline(1)
test_rawline(17)
test_rawline(200)
test_rawline(4091)
test_rawline(80199)
test_rawline(8000000)
test_rawline(80199)
test_rawline(4091)
test_rawline(200)
test_rawline(17)
test_rawline(1)
test("raw transfer")
test_raw(1)
test_raw(17)
test_raw(200)
test_raw(4091)
test_raw(80199)
test_raw(8000000)
test_raw(80199)
test_raw(4091)
test_raw(200)
test_raw(17)
test_raw(1)
test("non-blocking transfer")
test_nonblocking(1)
test_nonblocking(17)
test_nonblocking(200)
test_nonblocking(4091)
test_nonblocking(80199)
test_nonblocking(800000)
test_nonblocking(80199)
test_nonblocking(4091)
test_nonblocking(200)
test_nonblocking(17)
test_nonblocking(1)
test("total timeout on send")
test_totaltimeoutsend(800091, 1, 3)
test_totaltimeoutsend(800091, 2, 3)
test_totaltimeoutsend(800091, 5, 2)
test_totaltimeoutsend(800091, 3, 1)
test("total timeout on receive")
test_totaltimeoutreceive(800091, 1, 3)
test_totaltimeoutreceive(800091, 2, 3)
test_totaltimeoutreceive(800091, 3, 2)
test_totaltimeoutreceive(800091, 3, 1)
test("blocking timeout on send")
test_blockingtimeoutsend(800091, 1, 3)
test_blockingtimeoutsend(800091, 2, 3)
test_blockingtimeoutsend(800091, 3, 2)
test_blockingtimeoutsend(800091, 3, 1)
test("blocking timeout on receive")
test_blockingtimeoutreceive(800091, 1, 3)
test_blockingtimeoutreceive(800091, 2, 3)
test_blockingtimeoutreceive(800091, 3, 2)
test_blockingtimeoutreceive(800091, 3, 1)
test(string.format("done in %.2fs", socket.gettime() - start))
@@ -0,0 +1,15 @@
socket = require("socket");
host = "mips-ml402";
port = "8383";
server = assert(socket.bind(host, port));
ack = "\n";
while 1 do
print("server: waiting for client connection...");
control = assert(server:accept());
while 1 do
command = assert(control:receive());
assert(control:send(ack));
print(command);
(loadstring(command))();
end
end
@@ -0,0 +1,37 @@
function readfile(name)
local f = io.open(name, "rb")
if not f then return nil end
local s = f:read("*a")
f:close()
return s
end
function similar(s1, s2)
return string.lower(string.gsub(s1 or "", "%s", "")) ==
string.lower(string.gsub(s2 or "", "%s", ""))
end
function fail(msg)
msg = msg or "failed"
error(msg, 2)
end
function compare(input, output)
local original = readfile(input)
local recovered = readfile(output)
if original ~= recovered then fail("comparison failed")
else print("ok") end
end
local G = _G
local set = rawset
local warn = print
local setglobal = function(table, key, value)
warn("changed " .. key)
set(table, key, value)
end
setmetatable(G, {
__newindex = setglobal
})
@@ -0,0 +1,26 @@
These are simple tests for Lua. Some of them contain useful code.
They are meant to be run to make sure Lua is built correctly and also
to be read, to see how Lua programs look.
Here is a one-line summary of each program:
bisect.lua bisection method for solving non-linear equations
cf.lua temperature conversion table (celsius to farenheit)
echo.lua echo command line arguments
env.lua environment variables as automatic global variables
factorial.lua factorial without recursion
fib.lua fibonacci function with cache
fibfor.lua fibonacci numbers with coroutines and generators
globals.lua report global variable usage
hello.lua the first program in every language
life.lua Conway's Game of Life
luac.lua bare-bones luac
printf.lua an implementation of printf
readonly.lua make global variables readonly
sieve.lua the sieve of of Eratosthenes programmed with coroutines
sort.lua two implementations of a sort function
table.lua make table, grouping all data for the same item
trace-calls.lua trace calls
trace-globals.lua trace assigments to global variables
xd.lua hex dump
@@ -0,0 +1,27 @@
-- bisection method for solving non-linear equations
delta=1e-6 -- tolerance
function bisect(f,a,b,fa,fb)
local c=(a+b)/2
io.write(n," c=",c," a=",a," b=",b,"\n")
if c==a or c==b or math.abs(a-b)<delta then return c,b-a end
n=n+1
local fc=f(c)
if fa*fc<0 then return bisect(f,a,c,fa,fc) else return bisect(f,c,b,fc,fb) end
end
-- find root of f in the inverval [a,b]. needs f(a)*f(b)<0
function solve(f,a,b)
n=0
local z,e=bisect(f,a,b,f(a),f(b))
io.write(string.format("after %d steps, root is %.17g with error %.1e, f=%.1e\n",n,z,e,f(z)))
end
-- our function
function f(x)
return x*x*x-x-1
end
-- find zero in [1,2]
solve(f,1,2)
@@ -0,0 +1,16 @@
-- temperature conversion table (celsius to farenheit)
for c0=-20,50-1,10 do
io.write("C ")
for c=c0,c0+10-1 do
io.write(string.format("%3.0f ",c))
end
io.write("\n")
io.write("F ")
for c=c0,c0+10-1 do
f=(9/5)*c+32
io.write(string.format("%3.0f ",f))
end
io.write("\n\n")
end
@@ -0,0 +1,7 @@
-- read environment variables as if they were global variables
local f=function (t,i) return os.getenv(i) end
setmetatable(getfenv(),{__index=f})
-- an example
print(a,USER,PATH)
@@ -0,0 +1,32 @@
-- function closures are powerful
-- traditional fixed-point operator from functional programming
Y = function (g)
local a = function (f) return f(f) end
return a(function (f)
return g(function (x)
local c=f(f)
return c(x)
end)
end)
end
-- factorial without recursion
F = function (f)
return function (n)
if n == 0 then return 1
else return n*f(n-1) end
end
end
factorial = Y(F) -- factorial is the fixed point of F
-- now test it
function test(x)
io.write(x,"! = ",factorial(x),"\n")
end
for n=0,16 do
test(n)
end
@@ -0,0 +1,40 @@
-- fibonacci function with cache
-- very inefficient fibonacci function
function fib(n)
N=N+1
if n<2 then
return n
else
return fib(n-1)+fib(n-2)
end
end
-- a general-purpose value cache
function cache(f)
local c={}
return function (x)
local y=c[x]
if not y then
y=f(x)
c[x]=y
end
return y
end
end
-- run and time it
function test(s,f)
N=0
local c=os.clock()
local v=f(n)
local t=os.clock()-c
print(s,n,v,t,N)
end
n=arg[1] or 24 -- for other values, do lua fib.lua XX
n=tonumber(n)
print("","n","value","time","evals")
test("plain",fib)
fib=cache(fib)
test("cached",fib)
@@ -0,0 +1,13 @@
-- example of for with generator functions
function generatefib (n)
return coroutine.wrap(function ()
local a,b = 1, 1
while a <= n do
coroutine.yield(a)
a, b = b, a+b
end
end)
end
for i in generatefib(1000) do print(i) end
@@ -0,0 +1,13 @@
-- reads luac listings and reports global variable usage
-- lines where a global is written to are marked with "*"
-- typical usage: luac -p -l file.lua | lua globals.lua | sort | lua table.lua
while 1 do
local s=io.read()
if s==nil then break end
local ok,_,l,op,g=string.find(s,"%[%-?(%d*)%]%s*([GS])ETGLOBAL.-;%s+(.*)$")
if ok then
if op=="S" then op="*" else op="" end
io.write(g,"\t",l,op,"\n")
end
end
@@ -0,0 +1,23 @@
-- globals.lua
-- show all global variables
local seen={}
function dump(t,i)
seen[t]=true
local s={}
local n=0
for k in pairs(t) do
n=n+1 s[n]=k
end
table.sort(s)
for k,v in ipairs(s) do
print(i,v)
v=t[v]
if type(v)=="table" and not seen[v] then
dump(v,i.."\t")
end
end
end
dump(_G,"")
@@ -0,0 +1,3 @@
-- the first program in every language
io.write("Hello world, from ",_VERSION,"!\n")
@@ -0,0 +1,111 @@
-- life.lua
-- original by Dave Bollinger <DBollinger@compuserve.com> posted to lua-l
-- modified to use ANSI terminal escape sequences
-- modified to use for instead of while
local write=io.write
ALIVE="¥" DEAD="þ"
ALIVE="O" DEAD="-"
function delay() -- NOTE: SYSTEM-DEPENDENT, adjust as necessary
for i=1,10000 do end
-- local i=os.clock()+1 while(os.clock()<i) do end
end
function ARRAY2D(w,h)
local t = {w=w,h=h}
for y=1,h do
t[y] = {}
for x=1,w do
t[y][x]=0
end
end
return t
end
_CELLS = {}
-- give birth to a "shape" within the cell array
function _CELLS:spawn(shape,left,top)
for y=0,shape.h-1 do
for x=0,shape.w-1 do
self[top+y][left+x] = shape[y*shape.w+x+1]
end
end
end
-- run the CA and produce the next generation
function _CELLS:evolve(next)
local ym1,y,yp1,yi=self.h-1,self.h,1,self.h
while yi > 0 do
local xm1,x,xp1,xi=self.w-1,self.w,1,self.w
while xi > 0 do
local sum = self[ym1][xm1] + self[ym1][x] + self[ym1][xp1] +
self[y][xm1] + self[y][xp1] +
self[yp1][xm1] + self[yp1][x] + self[yp1][xp1]
next[y][x] = ((sum==2) and self[y][x]) or ((sum==3) and 1) or 0
xm1,x,xp1,xi = x,xp1,xp1+1,xi-1
end
ym1,y,yp1,yi = y,yp1,yp1+1,yi-1
end
end
-- output the array to screen
function _CELLS:draw()
local out="" -- accumulate to reduce flicker
for y=1,self.h do
for x=1,self.w do
out=out..(((self[y][x]>0) and ALIVE) or DEAD)
end
out=out.."\n"
end
write(out)
end
-- constructor
function CELLS(w,h)
local c = ARRAY2D(w,h)
c.spawn = _CELLS.spawn
c.evolve = _CELLS.evolve
c.draw = _CELLS.draw
return c
end
--
-- shapes suitable for use with spawn() above
--
HEART = { 1,0,1,1,0,1,1,1,1; w=3,h=3 }
GLIDER = { 0,0,1,1,0,1,0,1,1; w=3,h=3 }
EXPLODE = { 0,1,0,1,1,1,1,0,1,0,1,0; w=3,h=4 }
FISH = { 0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,1,0,0,1,0; w=5,h=4 }
BUTTERFLY = { 1,0,0,0,1,0,1,1,1,0,1,0,0,0,1,1,0,1,0,1,1,0,0,0,1; w=5,h=5 }
-- the main routine
function LIFE(w,h)
-- create two arrays
local thisgen = CELLS(w,h)
local nextgen = CELLS(w,h)
-- create some life
-- about 1000 generations of fun, then a glider steady-state
thisgen:spawn(GLIDER,5,4)
thisgen:spawn(EXPLODE,25,10)
thisgen:spawn(FISH,4,12)
-- run until break
local gen=1
write("\027[2J") -- ANSI clear screen
while 1 do
thisgen:evolve(nextgen)
thisgen,nextgen = nextgen,thisgen
write("\027[H") -- ANSI home cursor
thisgen:draw()
write("Life - generation ",gen,"\n")
gen=gen+1
if gen>2000 then break end
--delay() -- no delay
end
end
LIFE(40,20)
@@ -0,0 +1,7 @@
-- bare-bones luac in Lua
-- usage: lua luac.lua file.lua
assert(arg[1]~=nil and arg[2]==nil,"usage: lua luac.lua file.lua")
f=assert(io.open("luac.out","wb"))
assert(f:write(string.dump(assert(loadfile(arg[1])))))
assert(f:close())
@@ -0,0 +1,47 @@
-- By Erik Wrenholt
local BAILOUT = 16
local MAX_ITERATIONS = 1000
function iterate(x,y)
local cr = y-0.5
local ci = x
local zi = 0.0
local zr = 0.0
local i = 0
while 1 do
i = i+1
local temp = zr * zi
local zr2 = zr*zr
local zi2 = zi*zi
zr = zr2-zi2+cr
zi = temp+temp+ci
if (zi2+zr2 > BAILOUT) then
return i
end
if (i > MAX_ITERATIONS) then
return 0
end
end
end
function mandelbrot()
local t = os.time()
for y = -39, 38 do
for x = -39, 38 do
if (iterate(x/40.0, y/40) == 0) then
io.write("*")
else
io.write(" ")
end
end
io.write("\n")
end
io.write(string.format("Time Elapsed %d\n", os.time() - t))
end
mandelbrot()
@@ -0,0 +1,11 @@
-- an example
socket = require("socket");
print("package.path:", package.path)
print("package.preload:", package.preload)
print("package.loaders:", package.loaders)
print("package.loaded:", package.loaded)
print("package.seeall:", package.seeall(package.preload))
server = assert(socket.bind("mips-ml402", "1234"));
print(server)
@@ -0,0 +1,7 @@
-- an implementation of printf
function printf(...)
io.write(string.format(...))
end
printf("Hello %s from %s on %s\n",os.getenv"USER" or "there",_VERSION,os.date())
@@ -0,0 +1,12 @@
-- make global variables readonly
local f=function (t,i) error("cannot redefine global variable `"..i.."'",2) end
local g={}
local G=getfenv()
setmetatable(g,{__index=G,__newindex=f})
setfenv(1,g)
-- an example
rawset(g,"x",3)
x=2
y=1 -- cannot redefine `y'
@@ -0,0 +1,29 @@
-- the sieve of of Eratosthenes programmed with coroutines
-- typical usage: lua -e N=1000 sieve.lua | column
-- generate all the numbers from 2 to n
function gen (n)
return coroutine.wrap(function ()
for i=2,n do coroutine.yield(i) end
end)
end
-- filter the numbers generated by `g', removing multiples of `p'
function filter (p, g)
return coroutine.wrap(function ()
while 1 do
local n = g()
if n == nil then return end
if math.mod(n, p) ~= 0 then coroutine.yield(n) end
end
end)
end
N=N or 1000 -- from command line
x = gen(N) -- generate primes up to N
while 1 do
local n = x() -- pick a number until done
if n == nil then break end
print(n) -- must be a prime number
x = filter(n, x) -- now remove its multiples
end
@@ -0,0 +1,66 @@
-- two implementations of a sort function
-- this is an example only. Lua has now a built-in function "sort"
-- extracted from Programming Pearls, page 110
function qsort(x,l,u,f)
if l<u then
local m=math.random(u-(l-1))+l-1 -- choose a random pivot in range l..u
x[l],x[m]=x[m],x[l] -- swap pivot to first position
local t=x[l] -- pivot value
m=l
local i=l+1
while i<=u do
-- invariant: x[l+1..m] < t <= x[m+1..i-1]
if f(x[i],t) then
m=m+1
x[m],x[i]=x[i],x[m] -- swap x[i] and x[m]
end
i=i+1
end
x[l],x[m]=x[m],x[l] -- swap pivot to a valid place
-- x[l+1..m-1] < x[m] <= x[m+1..u]
qsort(x,l,m-1,f)
qsort(x,m+1,u,f)
end
end
function selectionsort(x,n,f)
local i=1
while i<=n do
local m,j=i,i+1
while j<=n do
if f(x[j],x[m]) then m=j end
j=j+1
end
x[i],x[m]=x[m],x[i] -- swap x[i] and x[m]
i=i+1
end
end
function show(m,x)
io.write(m,"\n\t")
local i=1
while x[i] do
io.write(x[i])
i=i+1
if x[i] then io.write(",") end
end
io.write("\n")
end
function testsorts(x)
local n=1
while x[n] do n=n+1 end; n=n-1 -- count elements
show("original",x)
qsort(x,1,n,function (x,y) return x<y end)
show("after quicksort",x)
selectionsort(x,n,function (x,y) return x>y end)
show("after reverse selection sort",x)
qsort(x,1,n,function (x,y) return x<y end)
show("after quicksort again",x)
end
-- array to be sorted
x={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}
testsorts(x)
@@ -0,0 +1,12 @@
-- make table, grouping all data for the same item
-- input is 2 columns (item, data)
local A
while 1 do
local l=io.read()
if l==nil then break end
local _,_,a,b=string.find(l,'"?([_%w]+)"?%s*(.*)$')
if a~=A then A=a io.write("\n",a,":") end
io.write(" ",b)
end
io.write("\n")
@@ -0,0 +1,32 @@
-- trace calls
-- example: lua -ltrace-calls bisect.lua
local level=0
local function hook(event)
local t=debug.getinfo(3)
io.write(level," >>> ",string.rep(" ",level))
if t~=nil and t.currentline>=0 then io.write(t.short_src,":",t.currentline," ") end
t=debug.getinfo(2)
if event=="call" then
level=level+1
else
level=level-1 if level<0 then level=0 end
end
if t.what=="main" then
if event=="call" then
io.write("begin ",t.short_src)
else
io.write("end ",t.short_src)
end
elseif t.what=="Lua" then
-- table.foreach(t,print)
io.write(event," ",t.name or "(Lua)"," <",t.linedefined,":",t.short_src,">")
else
io.write(event," ",t.name or "(C)"," [",t.what,"] ")
end
io.write("\n")
end
debug.sethook(hook,"cr")
level=0
@@ -0,0 +1,38 @@
-- trace assigments to global variables
do
-- a tostring that quotes strings. note the use of the original tostring.
local _tostring=tostring
local tostring=function(a)
if type(a)=="string" then
return string.format("%q",a)
else
return _tostring(a)
end
end
local log=function (name,old,new)
local t=debug.getinfo(3,"Sl")
local line=t.currentline
io.write(t.short_src)
if line>=0 then io.write(":",line) end
io.write(": ",name," is now ",tostring(new)," (was ",tostring(old),")","\n")
end
local g={}
local set=function (t,name,value)
log(name,g[name],value)
g[name]=value
end
setmetatable(getfenv(),{__index=g,__newindex=set})
end
-- an example
a=1
b=2
a=10
b=20
b=nil
b=200
print(a,b,c)
@@ -0,0 +1,14 @@
-- hex dump
-- usage: lua xd.lua < file
local offset=0
while true do
local s=io.read(16)
if s==nil then return end
io.write(string.format("%08X ",offset))
string.gsub(s,"(.)",
function (c) io.write(string.format("%02X ",string.byte(c))) end)
io.write(string.rep(" ",3*(16-string.len(s))))
io.write(" ",string.gsub(s,"%c","."),"\n")
offset=offset+16
end
@@ -0,0 +1,5 @@
local base = _G
module("jens")
function mimi() base.print("Hello RTEMS-World!") end
@@ -0,0 +1,292 @@
-----------------------------------------------------------------------------
-- LTN12 - Filters, sources, sinks and pumps.
-- LuaSocket toolkit.
-- Author: Diego Nehab
-- RCS ID: $Id: ltn12.lua,v 1.31 2006/04/03 04:45:42 diego Exp $
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Declare module
-----------------------------------------------------------------------------
local string = require("string")
local table = require("table")
local base = _G
module("ltn12")
filter = {}
source = {}
sink = {}
pump = {}
-- 2048 seems to be better in windows...
BLOCKSIZE = 2048
_VERSION = "LTN12 1.0.1"
-----------------------------------------------------------------------------
-- Filter stuff
-----------------------------------------------------------------------------
-- returns a high level filter that cycles a low-level filter
function filter.cycle(low, ctx, extra)
base.assert(low)
return function(chunk)
local ret
ret, ctx = low(ctx, chunk, extra)
return ret
end
end
-- chains a bunch of filters together
-- (thanks to Wim Couwenberg)
function filter.chain(...)
local n = table.getn(arg)
local top, index = 1, 1
local retry = ""
return function(chunk)
retry = chunk and retry
while true do
if index == top then
chunk = arg[index](chunk)
if chunk == "" or top == n then return chunk
elseif chunk then index = index + 1
else
top = top+1
index = top
end
else
chunk = arg[index](chunk or "")
if chunk == "" then
index = index - 1
chunk = retry
elseif chunk then
if index == n then return chunk
else index = index + 1 end
else base.error("filter returned inappropriate nil") end
end
end
end
end
-----------------------------------------------------------------------------
-- Source stuff
-----------------------------------------------------------------------------
-- create an empty source
local function empty()
return nil
end
function source.empty()
return empty
end
-- returns a source that just outputs an error
function source.error(err)
return function()
return nil, err
end
end
-- creates a file source
function source.file(handle, io_err)
if handle then
return function()
local chunk = handle:read(BLOCKSIZE)
if not chunk then handle:close() end
return chunk
end
else return source.error(io_err or "unable to open file") end
end
-- turns a fancy source into a simple source
function source.simplify(src)
base.assert(src)
return function()
local chunk, err_or_new = src()
src = err_or_new or src
if not chunk then return nil, err_or_new
else return chunk end
end
end
-- creates string source
function source.string(s)
if s then
local i = 1
return function()
local chunk = string.sub(s, i, i+BLOCKSIZE-1)
i = i + BLOCKSIZE
if chunk ~= "" then return chunk
else return nil end
end
else return source.empty() end
end
-- creates rewindable source
function source.rewind(src)
base.assert(src)
local t = {}
return function(chunk)
if not chunk then
chunk = table.remove(t)
if not chunk then return src()
else return chunk end
else
table.insert(t, chunk)
end
end
end
function source.chain(src, f)
base.assert(src and f)
local last_in, last_out = "", ""
local state = "feeding"
local err
return function()
if not last_out then
base.error('source is empty!', 2)
end
while true do
if state == "feeding" then
last_in, err = src()
if err then return nil, err end
last_out = f(last_in)
if not last_out then
if last_in then
base.error('filter returned inappropriate nil')
else
return nil
end
elseif last_out ~= "" then
state = "eating"
if last_in then last_in = "" end
return last_out
end
else
last_out = f(last_in)
if last_out == "" then
if last_in == "" then
state = "feeding"
else
base.error('filter returned ""')
end
elseif not last_out then
if last_in then
base.error('filter returned inappropriate nil')
else
return nil
end
else
return last_out
end
end
end
end
end
-- creates a source that produces contents of several sources, one after the
-- other, as if they were concatenated
-- (thanks to Wim Couwenberg)
function source.cat(...)
local src = table.remove(arg, 1)
return function()
while src do
local chunk, err = src()
if chunk then return chunk end
if err then return nil, err end
src = table.remove(arg, 1)
end
end
end
-----------------------------------------------------------------------------
-- Sink stuff
-----------------------------------------------------------------------------
-- creates a sink that stores into a table
function sink.table(t)
t = t or {}
local f = function(chunk, err)
if chunk then table.insert(t, chunk) end
return 1
end
return f, t
end
-- turns a fancy sink into a simple sink
function sink.simplify(snk)
base.assert(snk)
return function(chunk, err)
local ret, err_or_new = snk(chunk, err)
if not ret then return nil, err_or_new end
snk = err_or_new or snk
return 1
end
end
-- creates a file sink
function sink.file(handle, io_err)
if handle then
return function(chunk, err)
if not chunk then
handle:close()
return 1
else return handle:write(chunk) end
end
else return sink.error(io_err or "unable to open file") end
end
-- creates a sink that discards data
local function null()
return 1
end
function sink.null()
return null
end
-- creates a sink that just returns an error
function sink.error(err)
return function()
return nil, err
end
end
-- chains a sink with a filter
function sink.chain(f, snk)
base.assert(f and snk)
return function(chunk, err)
if chunk ~= "" then
local filtered = f(chunk)
local done = chunk and ""
while true do
local ret, snkerr = snk(filtered, err)
if not ret then return nil, snkerr end
if filtered == done then return 1 end
filtered = f(done)
end
else return 1 end
end
end
-----------------------------------------------------------------------------
-- Pump stuff
-----------------------------------------------------------------------------
-- pumps one chunk from the source to the sink
function pump.step(src, snk)
local chunk, src_err = src()
local ret, snk_err = snk(chunk, src_err)
if chunk and ret then return 1
else return nil, src_err or snk_err end
end
-- pumps all data from a source to a sink, using a step function
function pump.all(src, snk, step)
base.assert(src and snk)
step = step or pump.step
while true do
local ret, err = step(src, snk)
if not ret then
if err then return nil, err
else return 1 end
end
end
end
@@ -0,0 +1,87 @@
-----------------------------------------------------------------------------
-- MIME support for the Lua language.
-- Author: Diego Nehab
-- Conforming to RFCs 2045-2049
-- RCS ID: $Id: mime.lua,v 1.29 2007/06/11 23:44:54 diego Exp $
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Declare module and import dependencies
-----------------------------------------------------------------------------
local base = _G
local ltn12 = require("ltn12")
local mime = require("mime.core")
local io = require("io")
local string = require("string")
module("mime")
-- encode, decode and wrap algorithm tables
encodet = {}
decodet = {}
wrapt = {}
-- creates a function that chooses a filter by name from a given table
local function choose(table)
return function(name, opt1, opt2)
if base.type(name) ~= "string" then
name, opt1, opt2 = "default", name, opt1
end
local f = table[name or "nil"]
if not f then
base.error("unknown key (" .. base.tostring(name) .. ")", 3)
else return f(opt1, opt2) end
end
end
-- define the encoding filters
encodet['base64'] = function()
return ltn12.filter.cycle(b64, "")
end
encodet['quoted-printable'] = function(mode)
return ltn12.filter.cycle(qp, "",
(mode == "binary") and "=0D=0A" or "\r\n")
end
-- define the decoding filters
decodet['base64'] = function()
return ltn12.filter.cycle(unb64, "")
end
decodet['quoted-printable'] = function()
return ltn12.filter.cycle(unqp, "")
end
local function format(chunk)
if chunk then
if chunk == "" then return "''"
else return string.len(chunk) end
else return "nil" end
end
-- define the line-wrap filters
wrapt['text'] = function(length)
length = length or 76
return ltn12.filter.cycle(wrp, length, length)
end
wrapt['base64'] = wrapt['text']
wrapt['default'] = wrapt['text']
wrapt['quoted-printable'] = function()
return ltn12.filter.cycle(qpwrp, 76, 76)
end
-- function that choose the encoding, decoding or wrap algorithm
encode = choose(encodet)
decode = choose(decodet)
wrap = choose(wrapt)
-- define the end-of-line normalization filter
function normalize(marker)
return ltn12.filter.cycle(eol, 0, marker)
end
-- high level stuffing filter
function stuff()
return ltn12.filter.cycle(dot, 2)
end
@@ -0,0 +1,133 @@
-----------------------------------------------------------------------------
-- LuaSocket helper module
-- Author: Diego Nehab
-- RCS ID: $Id: socket.lua,v 1.22 2005/11/22 08:33:29 diego Exp $
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Declare module and import dependencies
-----------------------------------------------------------------------------
local base = _G
local string = require("string")
local math = require("math")
local socket = require("socket.core")
module("socket")
-----------------------------------------------------------------------------
-- Exported auxiliar functions
-----------------------------------------------------------------------------
function connect(address, port, laddress, lport)
local sock, err = socket.tcp()
if not sock then return nil, err end
if laddress then
local res, err = sock:bind(laddress, lport, -1)
if not res then return nil, err end
end
local res, err = sock:connect(address, port)
if not res then return nil, err end
return sock
end
function bind(host, port, backlog)
local sock, err = socket.tcp()
if not sock then return nil, err end
sock:setoption("reuseaddr", true)
local res, err = sock:bind(host, port)
if not res then return nil, err end
res, err = sock:listen(backlog)
if not res then return nil, err end
return sock
end
try = socket.newtry()
function choose(table)
return function(name, opt1, opt2)
if base.type(name) ~= "string" then
name, opt1, opt2 = "default", name, opt1
end
local f = table[name or "nil"]
if not f then base.error("unknown key (".. base.tostring(name) ..")", 3)
else return f(opt1, opt2) end
end
end
-----------------------------------------------------------------------------
-- Socket sources and sinks, conforming to LTN12
-----------------------------------------------------------------------------
-- create namespaces inside LuaSocket namespace
sourcet = {}
sinkt = {}
BLOCKSIZE = 2048
sinkt["close-when-done"] = function(sock)
return base.setmetatable({
getfd = function() return sock:getfd() end,
dirty = function() return sock:dirty() end
}, {
__call = function(self, chunk, err)
if not chunk then
sock:close()
return 1
else return sock:send(chunk) end
end
})
end
sinkt["keep-open"] = function(sock)
return base.setmetatable({
getfd = function() return sock:getfd() end,
dirty = function() return sock:dirty() end
}, {
__call = function(self, chunk, err)
if chunk then return sock:send(chunk)
else return 1 end
end
})
end
sinkt["default"] = sinkt["keep-open"]
sink = choose(sinkt)
sourcet["by-length"] = function(sock, length)
return base.setmetatable({
getfd = function() return sock:getfd() end,
dirty = function() return sock:dirty() end
}, {
__call = function()
if length <= 0 then return nil end
local size = math.min(socket.BLOCKSIZE, length)
local chunk, err = sock:receive(size)
if err then return nil, err end
length = length - string.len(chunk)
return chunk
end
})
end
sourcet["until-closed"] = function(sock)
local done
return base.setmetatable({
getfd = function() return sock:getfd() end,
dirty = function() return sock:dirty() end
}, {
__call = function()
if done then return nil end
local chunk, err, partial = sock:receive(socket.BLOCKSIZE)
if not err then return chunk
elseif err == "closed" then
sock:close()
done = 1
return partial
else return nil, err end
end
})
end
sourcet["default"] = sourcet["until-closed"]
source = choose(sourcet)
@@ -0,0 +1,281 @@
-----------------------------------------------------------------------------
-- FTP support for the Lua language
-- LuaSocket toolkit.
-- Author: Diego Nehab
-- RCS ID: $Id: ftp.lua,v 1.45 2007/07/11 19:25:47 diego Exp $
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Declare module and import dependencies
-----------------------------------------------------------------------------
local base = _G
local table = require("table")
local string = require("string")
local math = require("math")
local socket = require("socket")
local url = require("socket.url")
local tp = require("socket.tp")
local ltn12 = require("ltn12")
module("socket.ftp")
-----------------------------------------------------------------------------
-- Program constants
-----------------------------------------------------------------------------
-- timeout in seconds before the program gives up on a connection
TIMEOUT = 60
-- default port for ftp service
PORT = 21
-- this is the default anonymous password. used when no password is
-- provided in url. should be changed to your e-mail.
USER = "ftp"
PASSWORD = "anonymous@anonymous.org"
-----------------------------------------------------------------------------
-- Low level FTP API
-----------------------------------------------------------------------------
local metat = { __index = {} }
function open(server, port, create)
local tp = socket.try(tp.connect(server, port or PORT, TIMEOUT, create))
local f = base.setmetatable({ tp = tp }, metat)
-- make sure everything gets closed in an exception
f.try = socket.newtry(function() f:close() end)
return f
end
function metat.__index:portconnect()
self.try(self.server:settimeout(TIMEOUT))
self.data = self.try(self.server:accept())
self.try(self.data:settimeout(TIMEOUT))
end
function metat.__index:pasvconnect()
self.data = self.try(socket.tcp())
self.try(self.data:settimeout(TIMEOUT))
self.try(self.data:connect(self.pasvt.ip, self.pasvt.port))
end
function metat.__index:login(user, password)
self.try(self.tp:command("user", user or USER))
local code, reply = self.try(self.tp:check{"2..", 331})
if code == 331 then
self.try(self.tp:command("pass", password or PASSWORD))
self.try(self.tp:check("2.."))
end
return 1
end
function metat.__index:pasv()
self.try(self.tp:command("pasv"))
local code, reply = self.try(self.tp:check("2.."))
local pattern = "(%d+)%D(%d+)%D(%d+)%D(%d+)%D(%d+)%D(%d+)"
local a, b, c, d, p1, p2 = socket.skip(2, string.find(reply, pattern))
self.try(a and b and c and d and p1 and p2, reply)
self.pasvt = {
ip = string.format("%d.%d.%d.%d", a, b, c, d),
port = p1*256 + p2
}
if self.server then
self.server:close()
self.server = nil
end
return self.pasvt.ip, self.pasvt.port
end
function metat.__index:port(ip, port)
self.pasvt = nil
if not ip then
ip, port = self.try(self.tp:getcontrol():getsockname())
self.server = self.try(socket.bind(ip, 0))
ip, port = self.try(self.server:getsockname())
self.try(self.server:settimeout(TIMEOUT))
end
local pl = math.mod(port, 256)
local ph = (port - pl)/256
local arg = string.gsub(string.format("%s,%d,%d", ip, ph, pl), "%.", ",")
self.try(self.tp:command("port", arg))
self.try(self.tp:check("2.."))
return 1
end
function metat.__index:send(sendt)
self.try(self.pasvt or self.server, "need port or pasv first")
-- if there is a pasvt table, we already sent a PASV command
-- we just get the data connection into self.data
if self.pasvt then self:pasvconnect() end
-- get the transfer argument and command
local argument = sendt.argument or
url.unescape(string.gsub(sendt.path or "", "^[/\\]", ""))
if argument == "" then argument = nil end
local command = sendt.command or "stor"
-- send the transfer command and check the reply
self.try(self.tp:command(command, argument))
local code, reply = self.try(self.tp:check{"2..", "1.."})
-- if there is not a a pasvt table, then there is a server
-- and we already sent a PORT command
if not self.pasvt then self:portconnect() end
-- get the sink, source and step for the transfer
local step = sendt.step or ltn12.pump.step
local readt = {self.tp.c}
local checkstep = function(src, snk)
-- check status in control connection while downloading
local readyt = socket.select(readt, nil, 0)
if readyt[tp] then code = self.try(self.tp:check("2..")) end
return step(src, snk)
end
local sink = socket.sink("close-when-done", self.data)
-- transfer all data and check error
self.try(ltn12.pump.all(sendt.source, sink, checkstep))
if string.find(code, "1..") then self.try(self.tp:check("2..")) end
-- done with data connection
self.data:close()
-- find out how many bytes were sent
local sent = socket.skip(1, self.data:getstats())
self.data = nil
return sent
end
function metat.__index:receive(recvt)
self.try(self.pasvt or self.server, "need port or pasv first")
if self.pasvt then self:pasvconnect() end
local argument = recvt.argument or
url.unescape(string.gsub(recvt.path or "", "^[/\\]", ""))
if argument == "" then argument = nil end
local command = recvt.command or "retr"
self.try(self.tp:command(command, argument))
local code = self.try(self.tp:check{"1..", "2.."})
if not self.pasvt then self:portconnect() end
local source = socket.source("until-closed", self.data)
local step = recvt.step or ltn12.pump.step
self.try(ltn12.pump.all(source, recvt.sink, step))
if string.find(code, "1..") then self.try(self.tp:check("2..")) end
self.data:close()
self.data = nil
return 1
end
function metat.__index:cwd(dir)
self.try(self.tp:command("cwd", dir))
self.try(self.tp:check(250))
return 1
end
function metat.__index:type(type)
self.try(self.tp:command("type", type))
self.try(self.tp:check(200))
return 1
end
function metat.__index:greet()
local code = self.try(self.tp:check{"1..", "2.."})
if string.find(code, "1..") then self.try(self.tp:check("2..")) end
return 1
end
function metat.__index:quit()
self.try(self.tp:command("quit"))
self.try(self.tp:check("2.."))
return 1
end
function metat.__index:close()
if self.data then self.data:close() end
if self.server then self.server:close() end
return self.tp:close()
end
-----------------------------------------------------------------------------
-- High level FTP API
-----------------------------------------------------------------------------
local function override(t)
if t.url then
local u = url.parse(t.url)
for i,v in base.pairs(t) do
u[i] = v
end
return u
else return t end
end
local function tput(putt)
putt = override(putt)
socket.try(putt.host, "missing hostname")
local f = open(putt.host, putt.port, putt.create)
f:greet()
f:login(putt.user, putt.password)
if putt.type then f:type(putt.type) end
f:pasv()
local sent = f:send(putt)
f:quit()
f:close()
return sent
end
local default = {
path = "/",
scheme = "ftp"
}
local function parse(u)
local t = socket.try(url.parse(u, default))
socket.try(t.scheme == "ftp", "wrong scheme '" .. t.scheme .. "'")
socket.try(t.host, "missing hostname")
local pat = "^type=(.)$"
if t.params then
t.type = socket.skip(2, string.find(t.params, pat))
socket.try(t.type == "a" or t.type == "i",
"invalid type '" .. t.type .. "'")
end
return t
end
local function sput(u, body)
local putt = parse(u)
putt.source = ltn12.source.string(body)
return tput(putt)
end
put = socket.protect(function(putt, body)
if base.type(putt) == "string" then return sput(putt, body)
else return tput(putt) end
end)
local function tget(gett)
gett = override(gett)
socket.try(gett.host, "missing hostname")
local f = open(gett.host, gett.port, gett.create)
f:greet()
f:login(gett.user, gett.password)
if gett.type then f:type(gett.type) end
f:pasv()
f:receive(gett)
f:quit()
return f:close()
end
local function sget(u)
local gett = parse(u)
local t = {}
gett.sink = ltn12.sink.table(t)
tget(gett)
return table.concat(t)
end
command = socket.protect(function(cmdt)
cmdt = override(cmdt)
socket.try(cmdt.host, "missing hostname")
socket.try(cmdt.command, "missing command")
local f = open(cmdt.host, cmdt.port, cmdt.create)
f:greet()
f:login(cmdt.user, cmdt.password)
f.try(f.tp:command(cmdt.command, cmdt.argument))
if cmdt.check then f.try(f.tp:check(cmdt.check)) end
f:quit()
return f:close()
end)
get = socket.protect(function(gett)
if base.type(gett) == "string" then return sget(gett)
else return tget(gett) end
end)
@@ -0,0 +1,350 @@
-----------------------------------------------------------------------------
-- HTTP/1.1 client support for the Lua language.
-- LuaSocket toolkit.
-- Author: Diego Nehab
-- RCS ID: $Id: http.lua,v 1.71 2007/10/13 23:55:20 diego Exp $
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Declare module and import dependencies
-------------------------------------------------------------------------------
local socket = require("socket")
local url = require("socket.url")
local ltn12 = require("ltn12")
local mime = require("mime")
local string = require("string")
local base = _G
local table = require("table")
module("socket.http")
-----------------------------------------------------------------------------
-- Program constants
-----------------------------------------------------------------------------
-- connection timeout in seconds
TIMEOUT = 60
-- default port for document retrieval
PORT = 80
-- user agent field sent in request
USERAGENT = socket._VERSION
-----------------------------------------------------------------------------
-- Reads MIME headers from a connection, unfolding where needed
-----------------------------------------------------------------------------
local function receiveheaders(sock, headers)
local line, name, value, err
headers = headers or {}
-- get first line
line, err = sock:receive()
if err then return nil, err end
-- headers go until a blank line is found
while line ~= "" do
-- get field-name and value
name, value = socket.skip(2, string.find(line, "^(.-):%s*(.*)"))
if not (name and value) then return nil, "malformed reponse headers" end
name = string.lower(name)
-- get next line (value might be folded)
line, err = sock:receive()
if err then return nil, err end
-- unfold any folded values
while string.find(line, "^%s") do
value = value .. line
line = sock:receive()
if err then return nil, err end
end
-- save pair in table
if headers[name] then headers[name] = headers[name] .. ", " .. value
else headers[name] = value end
end
return headers
end
-----------------------------------------------------------------------------
-- Extra sources and sinks
-----------------------------------------------------------------------------
socket.sourcet["http-chunked"] = function(sock, headers)
return base.setmetatable({
getfd = function() return sock:getfd() end,
dirty = function() return sock:dirty() end
}, {
__call = function()
-- get chunk size, skip extention
local line, err = sock:receive()
if err then return nil, err end
local size = base.tonumber(string.gsub(line, ";.*", ""), 16)
if not size then return nil, "invalid chunk size" end
-- was it the last chunk?
if size > 0 then
-- if not, get chunk and skip terminating CRLF
local chunk, err, part = sock:receive(size)
if chunk then sock:receive() end
return chunk, err
else
-- if it was, read trailers into headers table
headers, err = receiveheaders(sock, headers)
if not headers then return nil, err end
end
end
})
end
socket.sinkt["http-chunked"] = function(sock)
return base.setmetatable({
getfd = function() return sock:getfd() end,
dirty = function() return sock:dirty() end
}, {
__call = function(self, chunk, err)
if not chunk then return sock:send("0\r\n\r\n") end
local size = string.format("%X\r\n", string.len(chunk))
return sock:send(size .. chunk .. "\r\n")
end
})
end
-----------------------------------------------------------------------------
-- Low level HTTP API
-----------------------------------------------------------------------------
local metat = { __index = {} }
function open(host, port, create)
-- create socket with user connect function, or with default
local c = socket.try((create or socket.tcp)())
local h = base.setmetatable({ c = c }, metat)
-- create finalized try
h.try = socket.newtry(function() h:close() end)
-- set timeout before connecting
h.try(c:settimeout(TIMEOUT))
h.try(c:connect(host, port or PORT))
-- here everything worked
return h
end
function metat.__index:sendrequestline(method, uri)
local reqline = string.format("%s %s HTTP/1.1\r\n", method or "GET", uri)
return self.try(self.c:send(reqline))
end
function metat.__index:sendheaders(headers)
local h = "\r\n"
for i, v in base.pairs(headers) do
h = i .. ": " .. v .. "\r\n" .. h
end
self.try(self.c:send(h))
return 1
end
function metat.__index:sendbody(headers, source, step)
source = source or ltn12.source.empty()
step = step or ltn12.pump.step
-- if we don't know the size in advance, send chunked and hope for the best
local mode = "http-chunked"
if headers["content-length"] then mode = "keep-open" end
return self.try(ltn12.pump.all(source, socket.sink(mode, self.c), step))
end
function metat.__index:receivestatusline()
local status = self.try(self.c:receive(5))
-- identify HTTP/0.9 responses, which do not contain a status line
-- this is just a heuristic, but is what the RFC recommends
if status ~= "HTTP/" then return nil, status end
-- otherwise proceed reading a status line
status = self.try(self.c:receive("*l", status))
local code = socket.skip(2, string.find(status, "HTTP/%d*%.%d* (%d%d%d)"))
return self.try(base.tonumber(code), status)
end
function metat.__index:receiveheaders()
return self.try(receiveheaders(self.c))
end
function metat.__index:receivebody(headers, sink, step)
sink = sink or ltn12.sink.null()
step = step or ltn12.pump.step
local length = base.tonumber(headers["content-length"])
local t = headers["transfer-encoding"] -- shortcut
local mode = "default" -- connection close
if t and t ~= "identity" then mode = "http-chunked"
elseif base.tonumber(headers["content-length"]) then mode = "by-length" end
return self.try(ltn12.pump.all(socket.source(mode, self.c, length),
sink, step))
end
function metat.__index:receive09body(status, sink, step)
local source = ltn12.source.rewind(socket.source("until-closed", self.c))
source(status)
return self.try(ltn12.pump.all(source, sink, step))
end
function metat.__index:close()
return self.c:close()
end
-----------------------------------------------------------------------------
-- High level HTTP API
-----------------------------------------------------------------------------
local function adjusturi(reqt)
local u = reqt
-- if there is a proxy, we need the full url. otherwise, just a part.
if not reqt.proxy and not PROXY then
u = {
path = socket.try(reqt.path, "invalid path 'nil'"),
params = reqt.params,
query = reqt.query,
fragment = reqt.fragment
}
end
return url.build(u)
end
local function adjustproxy(reqt)
local proxy = reqt.proxy or PROXY
if proxy then
proxy = url.parse(proxy)
return proxy.host, proxy.port or 3128
else
return reqt.host, reqt.port
end
end
local function adjustheaders(reqt)
-- default headers
local lower = {
["user-agent"] = USERAGENT,
["host"] = reqt.host,
["connection"] = "close, TE",
["te"] = "trailers"
}
-- if we have authentication information, pass it along
if reqt.user and reqt.password then
lower["authorization"] =
"Basic " .. (mime.b64(reqt.user .. ":" .. reqt.password))
end
-- override with user headers
for i,v in base.pairs(reqt.headers or lower) do
lower[string.lower(i)] = v
end
return lower
end
-- default url parts
local default = {
host = "",
port = PORT,
path ="/",
scheme = "http"
}
local function adjustrequest(reqt)
-- parse url if provided
local nreqt = reqt.url and url.parse(reqt.url, default) or {}
-- explicit components override url
for i,v in base.pairs(reqt) do nreqt[i] = v end
if nreqt.port == "" then nreqt.port = 80 end
socket.try(nreqt.host and nreqt.host ~= "",
"invalid host '" .. base.tostring(nreqt.host) .. "'")
-- compute uri if user hasn't overriden
nreqt.uri = reqt.uri or adjusturi(nreqt)
-- ajust host and port if there is a proxy
nreqt.host, nreqt.port = adjustproxy(nreqt)
-- adjust headers in request
nreqt.headers = adjustheaders(nreqt)
return nreqt
end
local function shouldredirect(reqt, code, headers)
return headers.location and
string.gsub(headers.location, "%s", "") ~= "" and
(reqt.redirect ~= false) and
(code == 301 or code == 302) and
(not reqt.method or reqt.method == "GET" or reqt.method == "HEAD")
and (not reqt.nredirects or reqt.nredirects < 5)
end
local function shouldreceivebody(reqt, code)
if reqt.method == "HEAD" then return nil end
if code == 204 or code == 304 then return nil end
if code >= 100 and code < 200 then return nil end
return 1
end
-- forward declarations
local trequest, tredirect
function tredirect(reqt, location)
local result, code, headers, status = trequest {
-- the RFC says the redirect URL has to be absolute, but some
-- servers do not respect that
url = url.absolute(reqt.url, location),
source = reqt.source,
sink = reqt.sink,
headers = reqt.headers,
proxy = reqt.proxy,
nredirects = (reqt.nredirects or 0) + 1,
create = reqt.create
}
-- pass location header back as a hint we redirected
headers = headers or {}
headers.location = headers.location or location
return result, code, headers, status
end
function trequest(reqt)
-- we loop until we get what we want, or
-- until we are sure there is no way to get it
local nreqt = adjustrequest(reqt)
local h = open(nreqt.host, nreqt.port, nreqt.create)
-- send request line and headers
h:sendrequestline(nreqt.method, nreqt.uri)
h:sendheaders(nreqt.headers)
-- if there is a body, send it
if nreqt.source then
h:sendbody(nreqt.headers, nreqt.source, nreqt.step)
end
local code, status = h:receivestatusline()
-- if it is an HTTP/0.9 server, simply get the body and we are done
if not code then
h:receive09body(status, nreqt.sink, nreqt.step)
return 1, 200
end
local headers
-- ignore any 100-continue messages
while code == 100 do
headers = h:receiveheaders()
code, status = h:receivestatusline()
end
headers = h:receiveheaders()
-- at this point we should have a honest reply from the server
-- we can't redirect if we already used the source, so we report the error
if shouldredirect(nreqt, code, headers) and not nreqt.source then
h:close()
return tredirect(reqt, headers.location)
end
-- here we are finally done
if shouldreceivebody(nreqt, code) then
h:receivebody(headers, nreqt.sink, nreqt.step)
end
h:close()
return 1, code, headers, status
end
local function srequest(u, b)
local t = {}
local reqt = {
url = u,
sink = ltn12.sink.table(t)
}
if b then
reqt.source = ltn12.source.string(b)
reqt.headers = {
["content-length"] = string.len(b),
["content-type"] = "application/x-www-form-urlencoded"
}
reqt.method = "POST"
end
local code, headers, status = socket.skip(1, trequest(reqt))
return table.concat(t), code, headers, status
end
request = socket.protect(function(reqt, body)
if base.type(reqt) == "string" then return srequest(reqt, body)
else return trequest(reqt) end
end)
@@ -0,0 +1,251 @@
-----------------------------------------------------------------------------
-- SMTP client support for the Lua language.
-- LuaSocket toolkit.
-- Author: Diego Nehab
-- RCS ID: $Id: smtp.lua,v 1.46 2007/03/12 04:08:40 diego Exp $
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Declare module and import dependencies
-----------------------------------------------------------------------------
local base = _G
local coroutine = require("coroutine")
local string = require("string")
local math = require("math")
local os = require("os")
local socket = require("socket")
local tp = require("socket.tp")
local ltn12 = require("ltn12")
local mime = require("mime")
module("socket.smtp")
-----------------------------------------------------------------------------
-- Program constants
-----------------------------------------------------------------------------
-- timeout for connection
TIMEOUT = 60
-- default server used to send e-mails
SERVER = "localhost"
-- default port
PORT = 25
-- domain used in HELO command and default sendmail
-- If we are under a CGI, try to get from environment
DOMAIN = os.getenv("SERVER_NAME") or "localhost"
-- default time zone (means we don't know)
ZONE = "-0000"
---------------------------------------------------------------------------
-- Low level SMTP API
-----------------------------------------------------------------------------
local metat = { __index = {} }
function metat.__index:greet(domain)
self.try(self.tp:check("2.."))
self.try(self.tp:command("EHLO", domain or DOMAIN))
return socket.skip(1, self.try(self.tp:check("2..")))
end
function metat.__index:mail(from)
self.try(self.tp:command("MAIL", "FROM:" .. from))
return self.try(self.tp:check("2.."))
end
function metat.__index:rcpt(to)
self.try(self.tp:command("RCPT", "TO:" .. to))
return self.try(self.tp:check("2.."))
end
function metat.__index:data(src, step)
self.try(self.tp:command("DATA"))
self.try(self.tp:check("3.."))
self.try(self.tp:source(src, step))
self.try(self.tp:send("\r\n.\r\n"))
return self.try(self.tp:check("2.."))
end
function metat.__index:quit()
self.try(self.tp:command("QUIT"))
return self.try(self.tp:check("2.."))
end
function metat.__index:close()
return self.tp:close()
end
function metat.__index:login(user, password)
self.try(self.tp:command("AUTH", "LOGIN"))
self.try(self.tp:check("3.."))
self.try(self.tp:command(mime.b64(user)))
self.try(self.tp:check("3.."))
self.try(self.tp:command(mime.b64(password)))
return self.try(self.tp:check("2.."))
end
function metat.__index:plain(user, password)
local auth = "PLAIN " .. mime.b64("\0" .. user .. "\0" .. password)
self.try(self.tp:command("AUTH", auth))
return self.try(self.tp:check("2.."))
end
function metat.__index:auth(user, password, ext)
if not user or not password then return 1 end
if string.find(ext, "AUTH[^\n]+LOGIN") then
return self:login(user, password)
elseif string.find(ext, "AUTH[^\n]+PLAIN") then
return self:plain(user, password)
else
self.try(nil, "authentication not supported")
end
end
-- send message or throw an exception
function metat.__index:send(mailt)
self:mail(mailt.from)
if base.type(mailt.rcpt) == "table" then
for i,v in base.ipairs(mailt.rcpt) do
self:rcpt(v)
end
else
self:rcpt(mailt.rcpt)
end
self:data(ltn12.source.chain(mailt.source, mime.stuff()), mailt.step)
end
function open(server, port, create)
local tp = socket.try(tp.connect(server or SERVER, port or PORT,
TIMEOUT, create))
local s = base.setmetatable({tp = tp}, metat)
-- make sure tp is closed if we get an exception
s.try = socket.newtry(function()
s:close()
end)
return s
end
-- convert headers to lowercase
local function lower_headers(headers)
local lower = {}
for i,v in base.pairs(headers or lower) do
lower[string.lower(i)] = v
end
return lower
end
---------------------------------------------------------------------------
-- Multipart message source
-----------------------------------------------------------------------------
-- returns a hopefully unique mime boundary
local seqno = 0
local function newboundary()
seqno = seqno + 1
return string.format('%s%05d==%05u', os.date('%d%m%Y%H%M%S'),
math.random(0, 99999), seqno)
end
-- send_message forward declaration
local send_message
-- yield the headers all at once, it's faster
local function send_headers(headers)
local h = "\r\n"
for i,v in base.pairs(headers) do
h = i .. ': ' .. v .. "\r\n" .. h
end
coroutine.yield(h)
end
-- yield multipart message body from a multipart message table
local function send_multipart(mesgt)
-- make sure we have our boundary and send headers
local bd = newboundary()
local headers = lower_headers(mesgt.headers or {})
headers['content-type'] = headers['content-type'] or 'multipart/mixed'
headers['content-type'] = headers['content-type'] ..
'; boundary="' .. bd .. '"'
send_headers(headers)
-- send preamble
if mesgt.body.preamble then
coroutine.yield(mesgt.body.preamble)
coroutine.yield("\r\n")
end
-- send each part separated by a boundary
for i, m in base.ipairs(mesgt.body) do
coroutine.yield("\r\n--" .. bd .. "\r\n")
send_message(m)
end
-- send last boundary
coroutine.yield("\r\n--" .. bd .. "--\r\n\r\n")
-- send epilogue
if mesgt.body.epilogue then
coroutine.yield(mesgt.body.epilogue)
coroutine.yield("\r\n")
end
end
-- yield message body from a source
local function send_source(mesgt)
-- make sure we have a content-type
local headers = lower_headers(mesgt.headers or {})
headers['content-type'] = headers['content-type'] or
'text/plain; charset="iso-8859-1"'
send_headers(headers)
-- send body from source
while true do
local chunk, err = mesgt.body()
if err then coroutine.yield(nil, err)
elseif chunk then coroutine.yield(chunk)
else break end
end
end
-- yield message body from a string
local function send_string(mesgt)
-- make sure we have a content-type
local headers = lower_headers(mesgt.headers or {})
headers['content-type'] = headers['content-type'] or
'text/plain; charset="iso-8859-1"'
send_headers(headers)
-- send body from string
coroutine.yield(mesgt.body)
end
-- message source
function send_message(mesgt)
if base.type(mesgt.body) == "table" then send_multipart(mesgt)
elseif base.type(mesgt.body) == "function" then send_source(mesgt)
else send_string(mesgt) end
end
-- set defaul headers
local function adjust_headers(mesgt)
local lower = lower_headers(mesgt.headers)
lower["date"] = lower["date"] or
os.date("!%a, %d %b %Y %H:%M:%S ") .. (mesgt.zone or ZONE)
lower["x-mailer"] = lower["x-mailer"] or socket._VERSION
-- this can't be overriden
lower["mime-version"] = "1.0"
return lower
end
function message(mesgt)
mesgt.headers = adjust_headers(mesgt)
-- create and return message source
local co = coroutine.create(function() send_message(mesgt) end)
return function()
local ret, a, b = coroutine.resume(co)
if ret then return a, b
else return nil, a end
end
end
---------------------------------------------------------------------------
-- High level SMTP API
-----------------------------------------------------------------------------
send = socket.protect(function(mailt)
local s = open(mailt.server, mailt.port, mailt.create)
local ext = s:greet(mailt.domain)
s:auth(mailt.user, mailt.password, ext)
s:send(mailt)
s:quit()
return s:close()
end)
@@ -0,0 +1,123 @@
-----------------------------------------------------------------------------
-- Unified SMTP/FTP subsystem
-- LuaSocket toolkit.
-- Author: Diego Nehab
-- RCS ID: $Id: tp.lua,v 1.22 2006/03/14 09:04:15 diego Exp $
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Declare module and import dependencies
-----------------------------------------------------------------------------
local base = _G
local string = require("string")
local socket = require("socket")
local ltn12 = require("ltn12")
module("socket.tp")
-----------------------------------------------------------------------------
-- Program constants
-----------------------------------------------------------------------------
TIMEOUT = 60
-----------------------------------------------------------------------------
-- Implementation
-----------------------------------------------------------------------------
-- gets server reply (works for SMTP and FTP)
local function get_reply(c)
local code, current, sep
local line, err = c:receive()
local reply = line
if err then return nil, err end
code, sep = socket.skip(2, string.find(line, "^(%d%d%d)(.?)"))
if not code then return nil, "invalid server reply" end
if sep == "-" then -- reply is multiline
repeat
line, err = c:receive()
if err then return nil, err end
current, sep = socket.skip(2, string.find(line, "^(%d%d%d)(.?)"))
reply = reply .. "\n" .. line
-- reply ends with same code
until code == current and sep == " "
end
return code, reply
end
-- metatable for sock object
local metat = { __index = {} }
function metat.__index:check(ok)
local code, reply = get_reply(self.c)
if not code then return nil, reply end
if base.type(ok) ~= "function" then
if base.type(ok) == "table" then
for i, v in base.ipairs(ok) do
if string.find(code, v) then
return base.tonumber(code), reply
end
end
return nil, reply
else
if string.find(code, ok) then return base.tonumber(code), reply
else return nil, reply end
end
else return ok(base.tonumber(code), reply) end
end
function metat.__index:command(cmd, arg)
if arg then
return self.c:send(cmd .. " " .. arg.. "\r\n")
else
return self.c:send(cmd .. "\r\n")
end
end
function metat.__index:sink(snk, pat)
local chunk, err = c:receive(pat)
return snk(chunk, err)
end
function metat.__index:send(data)
return self.c:send(data)
end
function metat.__index:receive(pat)
return self.c:receive(pat)
end
function metat.__index:getfd()
return self.c:getfd()
end
function metat.__index:dirty()
return self.c:dirty()
end
function metat.__index:getcontrol()
return self.c
end
function metat.__index:source(source, step)
local sink = socket.sink("keep-open", self.c)
local ret, err = ltn12.pump.all(source, sink, step or ltn12.pump.step)
return ret, err
end
-- closes the underlying c
function metat.__index:close()
self.c:close()
return 1
end
-- connect with server and return c object
function connect(host, port, timeout, create)
local c, e = (create or socket.tcp)()
if not c then return nil, e end
c:settimeout(timeout or TIMEOUT)
local r, e = c:connect(host, port)
if not r then
c:close()
return nil, e
end
return base.setmetatable({c = c}, metat)
end
@@ -0,0 +1,297 @@
-----------------------------------------------------------------------------
-- URI parsing, composition and relative URL resolution
-- LuaSocket toolkit.
-- Author: Diego Nehab
-- RCS ID: $Id: url.lua,v 1.38 2006/04/03 04:45:42 diego Exp $
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Declare module
-----------------------------------------------------------------------------
local string = require("string")
local base = _G
local table = require("table")
module("socket.url")
-----------------------------------------------------------------------------
-- Module version
-----------------------------------------------------------------------------
_VERSION = "URL 1.0.1"
-----------------------------------------------------------------------------
-- Encodes a string into its escaped hexadecimal representation
-- Input
-- s: binary string to be encoded
-- Returns
-- escaped representation of string binary
-----------------------------------------------------------------------------
function escape(s)
return string.gsub(s, "([^A-Za-z0-9_])", function(c)
return string.format("%%%02x", string.byte(c))
end)
end
-----------------------------------------------------------------------------
-- Protects a path segment, to prevent it from interfering with the
-- url parsing.
-- Input
-- s: binary string to be encoded
-- Returns
-- escaped representation of string binary
-----------------------------------------------------------------------------
local function make_set(t)
local s = {}
for i,v in base.ipairs(t) do
s[t[i]] = 1
end
return s
end
-- these are allowed withing a path segment, along with alphanum
-- other characters must be escaped
local segment_set = make_set {
"-", "_", ".", "!", "~", "*", "'", "(",
")", ":", "@", "&", "=", "+", "$", ",",
}
local function protect_segment(s)
return string.gsub(s, "([^A-Za-z0-9_])", function (c)
if segment_set[c] then return c
else return string.format("%%%02x", string.byte(c)) end
end)
end
-----------------------------------------------------------------------------
-- Encodes a string into its escaped hexadecimal representation
-- Input
-- s: binary string to be encoded
-- Returns
-- escaped representation of string binary
-----------------------------------------------------------------------------
function unescape(s)
return string.gsub(s, "%%(%x%x)", function(hex)
return string.char(base.tonumber(hex, 16))
end)
end
-----------------------------------------------------------------------------
-- Builds a path from a base path and a relative path
-- Input
-- base_path
-- relative_path
-- Returns
-- corresponding absolute path
-----------------------------------------------------------------------------
local function absolute_path(base_path, relative_path)
if string.sub(relative_path, 1, 1) == "/" then return relative_path end
local path = string.gsub(base_path, "[^/]*$", "")
path = path .. relative_path
path = string.gsub(path, "([^/]*%./)", function (s)
if s ~= "./" then return s else return "" end
end)
path = string.gsub(path, "/%.$", "/")
local reduced
while reduced ~= path do
reduced = path
path = string.gsub(reduced, "([^/]*/%.%./)", function (s)
if s ~= "../../" then return "" else return s end
end)
end
path = string.gsub(reduced, "([^/]*/%.%.)$", function (s)
if s ~= "../.." then return "" else return s end
end)
return path
end
-----------------------------------------------------------------------------
-- Parses a url and returns a table with all its parts according to RFC 2396
-- The following grammar describes the names given to the URL parts
-- <url> ::= <scheme>://<authority>/<path>;<params>?<query>#<fragment>
-- <authority> ::= <userinfo>@<host>:<port>
-- <userinfo> ::= <user>[:<password>]
-- <path> :: = {<segment>/}<segment>
-- Input
-- url: uniform resource locator of request
-- default: table with default values for each field
-- Returns
-- table with the following fields, where RFC naming conventions have
-- been preserved:
-- scheme, authority, userinfo, user, password, host, port,
-- path, params, query, fragment
-- Obs:
-- the leading '/' in {/<path>} is considered part of <path>
-----------------------------------------------------------------------------
function parse(url, default)
-- initialize default parameters
local parsed = {}
for i,v in base.pairs(default or parsed) do parsed[i] = v end
-- empty url is parsed to nil
if not url or url == "" then return nil, "invalid url" end
-- remove whitespace
-- url = string.gsub(url, "%s", "")
-- get fragment
url = string.gsub(url, "#(.*)$", function(f)
parsed.fragment = f
return ""
end)
-- get scheme
url = string.gsub(url, "^([%w][%w%+%-%.]*)%:",
function(s) parsed.scheme = s; return "" end)
-- get authority
url = string.gsub(url, "^//([^/]*)", function(n)
parsed.authority = n
return ""
end)
-- get query stringing
url = string.gsub(url, "%?(.*)", function(q)
parsed.query = q
return ""
end)
-- get params
url = string.gsub(url, "%;(.*)", function(p)
parsed.params = p
return ""
end)
-- path is whatever was left
if url ~= "" then parsed.path = url end
local authority = parsed.authority
if not authority then return parsed end
authority = string.gsub(authority,"^([^@]*)@",
function(u) parsed.userinfo = u; return "" end)
authority = string.gsub(authority, ":([^:]*)$",
function(p) parsed.port = p; return "" end)
if authority ~= "" then parsed.host = authority end
local userinfo = parsed.userinfo
if not userinfo then return parsed end
userinfo = string.gsub(userinfo, ":([^:]*)$",
function(p) parsed.password = p; return "" end)
parsed.user = userinfo
return parsed
end
-----------------------------------------------------------------------------
-- Rebuilds a parsed URL from its components.
-- Components are protected if any reserved or unallowed characters are found
-- Input
-- parsed: parsed URL, as returned by parse
-- Returns
-- a stringing with the corresponding URL
-----------------------------------------------------------------------------
function build(parsed)
local ppath = parse_path(parsed.path or "")
local url = build_path(ppath)
if parsed.params then url = url .. ";" .. parsed.params end
if parsed.query then url = url .. "?" .. parsed.query end
local authority = parsed.authority
if parsed.host then
authority = parsed.host
if parsed.port then authority = authority .. ":" .. parsed.port end
local userinfo = parsed.userinfo
if parsed.user then
userinfo = parsed.user
if parsed.password then
userinfo = userinfo .. ":" .. parsed.password
end
end
if userinfo then authority = userinfo .. "@" .. authority end
end
if authority then url = "//" .. authority .. url end
if parsed.scheme then url = parsed.scheme .. ":" .. url end
if parsed.fragment then url = url .. "#" .. parsed.fragment end
-- url = string.gsub(url, "%s", "")
return url
end
-----------------------------------------------------------------------------
-- Builds a absolute URL from a base and a relative URL according to RFC 2396
-- Input
-- base_url
-- relative_url
-- Returns
-- corresponding absolute url
-----------------------------------------------------------------------------
function absolute(base_url, relative_url)
if base.type(base_url) == "table" then
base_parsed = base_url
base_url = build(base_parsed)
else
base_parsed = parse(base_url)
end
local relative_parsed = parse(relative_url)
if not base_parsed then return relative_url
elseif not relative_parsed then return base_url
elseif relative_parsed.scheme then return relative_url
else
relative_parsed.scheme = base_parsed.scheme
if not relative_parsed.authority then
relative_parsed.authority = base_parsed.authority
if not relative_parsed.path then
relative_parsed.path = base_parsed.path
if not relative_parsed.params then
relative_parsed.params = base_parsed.params
if not relative_parsed.query then
relative_parsed.query = base_parsed.query
end
end
else
relative_parsed.path = absolute_path(base_parsed.path or "",
relative_parsed.path)
end
end
return build(relative_parsed)
end
end
-----------------------------------------------------------------------------
-- Breaks a path into its segments, unescaping the segments
-- Input
-- path
-- Returns
-- segment: a table with one entry per segment
-----------------------------------------------------------------------------
function parse_path(path)
local parsed = {}
path = path or ""
--path = string.gsub(path, "%s", "")
string.gsub(path, "([^/]+)", function (s) table.insert(parsed, s) end)
for i = 1, table.getn(parsed) do
parsed[i] = unescape(parsed[i])
end
if string.sub(path, 1, 1) == "/" then parsed.is_absolute = 1 end
if string.sub(path, -1, -1) == "/" then parsed.is_directory = 1 end
return parsed
end
-----------------------------------------------------------------------------
-- Builds a path component from its segments, escaping protected characters.
-- Input
-- parsed: path segments
-- unsafe: if true, segments are not protected before path is built
-- Returns
-- path: corresponding path stringing
-----------------------------------------------------------------------------
function build_path(parsed, unsafe)
local path = ""
local n = table.getn(parsed)
if unsafe then
for i = 1, n-1 do
path = path .. parsed[i]
path = path .. "/"
end
if n > 0 then
path = path .. parsed[n]
if parsed.is_directory then path = path .. "/" end
end
else
for i = 1, n-1 do
path = path .. protect_segment(parsed[i])
path = path .. "/"
end
if n > 0 then
path = path .. protect_segment(parsed[n])
if parsed.is_directory then path = path .. "/" end
end
end
if parsed.is_absolute then path = "/" .. path end
return path
end
File diff suppressed because it is too large Load Diff
+74
View File
@@ -0,0 +1,74 @@
#ifndef _RTEMS_NETWORKCONFIG_H_
#define _RTEMS_NETWORKCONFIG_H_
/* #define RTEMS_USE_BOOTP */
#include <bsp.h>
#include "rtems/dhcp.h"
/* external function prototypes */
extern int rtems_emac_driver_attach(struct rtems_bsdnet_ifconfig *config, int attaching);
uint8_t this_hwaddr[] = {0x00,0x00,0x31,0x10,0x19,0x70};
char this_hostname[] = "mips-ml402";
extern void rtems_bsdnet_loopattach();
/* Ethernet network interface */
static struct rtems_bsdnet_ifconfig ethernet_config = {
"eth0", /* name */
rtems_emac_driver_attach, /* attach function */
NULL, /* No more interfaces */
NULL, /* IP address */
NULL, /* IP net mask */
this_hwaddr, /* Driver supplies hardware address */
0 /* Use default driver parameters */
};
/* Local network interface */
static struct rtems_bsdnet_ifconfig if_config = {
"lo0", /* name */
(int (*)(struct rtems_bsdnet_ifconfig *, int))rtems_bsdnet_loopattach, /* attach function */
&ethernet_config, /* link to next interface */
"127.0.0.1", /* IP address */
"255.0.0.0", /* IP net mask */
};
/* Network configuration */
struct rtems_bsdnet_config rtems_bsdnet_config = {
&if_config,
rtems_bsdnet_do_dhcp,
0, /* Default network task priority */
(256*1024), /* Default mbuf capacity */
(512*1024), /* Default mbuf cluster capacity */
this_hostname, /* Host name */
0, /* Domain name */
0, /* Gateway */
0, /* Log host */
{ 0 }, /* Name server(s) */
{ "192.53.103.108", "192.53.103.104", "0.de.pool.ntp.org", "1.de.pool.ntp.org", "2.de.pool.ntp.org", "3.de.pool.ntp.org" }, /* NTP server(s) */
};
/*
* For TFTP test application
*/
#if (defined (RTEMS_USE_BOOTP))
#define RTEMS_TFTP_TEST_HOST_NAME "BOOTP_HOST"
#define RTEMS_TFTP_TEST_FILE_NAME "BOOTP_FILE"
#else
#define RTEMS_TFTP_TEST_HOST_NAME "XXX.YYY.ZZZ.XYZ"
#define RTEMS_TFTP_TEST_FILE_NAME "tftptest"
#endif
/*
* For NFS test application
*
* NFS server/path to mount and a directory to ls once mounted
*/
#define RTEMS_NFS_SERVER "192.168.1.210"
#define RTEMS_NFS_SERVER_PATH "/home"
#define RTEMS_NFS_LS_PATH "/mnt/nfstest"
#endif /* _RTEMS_NETWORKCONFIG_H_ */
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1
View File
@@ -0,0 +1 @@
/scripts/js #! joel date echo Script successfully ran date stackuse
+134
View File
@@ -0,0 +1,134 @@
/* system.h
*
* This include file contains information that is included in every
* function in the test set.
*
* COPYRIGHT (c) 1989-2008.
* On-Line Applications Research Corporation (OAR).
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*
* system.h,v 1.13 2000/06/12 15:00:12 joel Exp
*/
#include <rtems.h>
#include <fb.h>
/* functions */
rtems_task Init(
rtems_task_argument argument
);
/* global variables */
/* configuration information */
#include <bsp.h> /* for device driver prototypes */
#ifdef RTEMS_BSP_HAS_IDE_DRIVER
#include <libchip/ata.h> /* for ata driver prototype */
#include <libchip/ide_ctrl.h> /* for general ide driver prototype */
#endif
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#ifdef RTEMS_BSP_HAS_IDE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
#endif
#define CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
/*
* XXX: these values are higher than needed...
*/
/*#define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(5)*/
#define CONFIGURE_MAXIMUM_TASKS 20
#define CONFIGURE_MAXIMUM_SEMAPHORES 20
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 20
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 20
#define STACK_CHECKER_ON
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE)
#define CONFIGURE_MALLOC_STATISTICS
#define CONFIGURE_MAXIMUM_DRIVERS 8
#define CONFIGURE_MAXIMUM_TIMERS 8
#define CONFIGURE_MAXIMUM_POSIX_THREADS 4
#define CONFIGURE_MAXIMUM_POSIX_TIMERS 4
#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 2
#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 2
#define CONFIGURE_APPLICATION_EXTRA_DRIVERS FB_DRIVER_TABLE_ENTRY
#include <rtems/confdefs.h>
/*
* Handy macros and static inline functions
*/
/*
* Macro to hide the ugliness of printing the time.
*/
#define print_time(_s1, _tb, _s2) \
do { \
printf( "%s%02d:%02d:%02d %02d/%02d/%04d%s", \
_s1, (_tb)->hour, (_tb)->minute, (_tb)->second, \
(_tb)->month, (_tb)->day, (_tb)->year, _s2 ); \
fflush(stdout); \
} while ( 0 )
/*
* Macro to print an task name that is composed of ASCII characters.
*
*/
#define put_name( _name, _crlf ) \
do { \
uint32_t c0, c1, c2, c3; \
\
c0 = ((_name) >> 24) & 0xff; \
c1 = ((_name) >> 16) & 0xff; \
c2 = ((_name) >> 8) & 0xff; \
c3 = (_name) & 0xff; \
putchar( (char)c0 ); \
if ( c1 ) putchar( (char)c1 ); \
if ( c2 ) putchar( (char)c2 ); \
if ( c3 ) putchar( (char)c3 ); \
if ( (_crlf) ) \
putchar( '\n' ); \
} while (0)
/*
* static inline routine to make obtaining ticks per second easier.
*/
static inline uint32_t get_ticks_per_second( void )
{
rtems_interval ticks_per_second;
(void) rtems_clock_get( RTEMS_CLOCK_GET_TICKS_PER_SECOND, &ticks_per_second ); return ticks_per_second;
}
/*
* This allows us to view the "Test_task" instantiations as a set
* of numbered tasks by eliminating the number of application
* tasks created.
*
* In reality, this is too complex for the purposes of this
* example. It would have been easier to pass a task argument. :)
* But it shows how rtems_id's can sometimes be used.
*/
#define task_number( tid ) \
( rtems_object_id_get_index( tid ) - \
rtems_configuration_get_rtems_api_configuration()-> \
number_of_initialization_tasks )
/* end of include file */
+33
View File
@@ -0,0 +1,33 @@
#
# Makefile
#
#
# RTEMS_MAKEFILE_PATH is typically set in an environment variable
#
EXEC=loopback.exe
PGM=${ARCH}/$(EXEC)
# optional managers required
MANAGERS=all
# C source names
CSRCS = init.c
COBJS_ = $(CSRCS:.c=.o)
COBJS = $(COBJS_:%=${ARCH}/%)
include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
include $(RTEMS_CUSTOM)
include $(PROJECT_ROOT)/make/leaf.cfg
CPU_CFLAGS += -lc
OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)
all: ${ARCH} $(PGM)
$(PGM): $(OBJS)
$(make-exe)
+65
View File
@@ -0,0 +1,65 @@
#
# $Id: README,v 1.1 2003/01/27 23:30:53 joel Exp $
#
Simple test of kernel network code.
Requires no network hardware since only the loopback network address is used.
Output should look like:
========================================================================
"Network" initializing!
"Network" initialized!
Try running client with no server present.
Should fail with `connection refused'.
Connect to server.
Can't connect to server: Connection refused
Client closing connection.
Start server.
Try running client with server present.
Create socket.
Connect to server.
Bind socket.
Can't connect to server: Connection refused
Client closing connection.
Client task terminating.
Try running two clients.
Connect to server.
Connect to server.
ACCEPTED:7F000001
ACCEPTED:7F000001
Write 22-byte message to server.
Write 22-byte message to server.
Read 43 from server: Server received 22 (Hi there, server (2).)
Read 43 from server: Server received 22 (Hi there, server (3).)
Client closing connection.
Client task terminating.
Worker task terminating.
Client closing connection.
Client task terminating.
Worker task terminating.
Try running three clients.
Connect to server.
Connect to server.
Connect to server.
ACCEPTED:7F000001
ACCEPTED:7F000001
ACCEPTED:7F000001
Write 22-byte message to server.
Write 22-byte message to server.
Write 22-byte message to server.
Read 43 from server: Server received 22 (Hi there, server (4).)
Read 43 from server: Server received 22 (Hi there, server (5).)
Read 43 from server: Server received 22 (Hi there, server (6).)
Client closing connection.
Client task terminating.
Worker task terminating.
Client closing connection.
Client task terminating.
Worker task terminating.
Client closing connection.
Client task terminating.
Worker task terminating.
+275
View File
@@ -0,0 +1,275 @@
/*
* $Id: init.c,v 1.6 2007/04/05 15:22:58 joel Exp $
*/
#include <bsp.h>
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_EXECUTIVE_RAM_SIZE (512*1024)
#define CONFIGURE_MAXIMUM_SEMAPHORES 20
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 20
#define CONFIGURE_MAXIMUM_TASKS 20
#define CONFIGURE_MICROSECONDS_PER_TICK 1000
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 50
#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
#define CONFIGURE_INIT_TASK_STACK_SIZE (10*1024)
#define CONFIGURE_INIT_TASK_PRIORITY 50
#define CONFIGURE_INIT_TASK_INITIAL_MODES (RTEMS_PREEMPT | \
RTEMS_NO_TIMESLICE | \
RTEMS_NO_ASR | \
RTEMS_INTERRUPT_LEVEL(0))
#define CONFIGURE_INIT
rtems_task Init(rtems_task_argument argument);
#include <rtems/confdefs.h>
#include <rtems/rtems_bsdnet.h>
#include <rtems/error.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
/*
* Network configuration
*/
extern void rtems_bsdnet_loopattach();
static struct rtems_bsdnet_ifconfig loopback_config = {
"lo0", /* name */
(int (*)(struct rtems_bsdnet_ifconfig *, int))rtems_bsdnet_loopattach, /* attach function */
NULL, /* link to next interface */
"127.0.0.1", /* IP address */
"255.0.0.0", /* IP net mask */
};
struct rtems_bsdnet_config rtems_bsdnet_config = {
&loopback_config, /* Network interface */
NULL, /* Use fixed network configuration */
0, /* Default network task priority */
0, /* Default mbuf capacity */
0, /* Default mbuf cluster capacity */
"testSystem", /* Host name */
"nowhere.com", /* Domain name */
"127.0.0.1", /* Gateway */
"127.0.0.1", /* Log host */
{"127.0.0.1" }, /* Name server(s) */
{"127.0.0.1" }, /* NTP server(s) */
};
/*
* Thread-safe output routines
*/
static rtems_id printMutex;
static void printSafe(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
rtems_semaphore_obtain(printMutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
vprintf(fmt, args);
rtems_semaphore_release(printMutex);
va_end(args);
}
#define printf printSafe
/*
* Spawn a task
*/
static void spawnTask(rtems_task_entry entryPoint, rtems_task_priority priority, rtems_task_argument arg)
{
rtems_status_code sc;
rtems_id tid;
sc = rtems_task_create(rtems_build_name('t','a','s','k'),
priority,
RTEMS_MINIMUM_STACK_SIZE+(8*1024),
RTEMS_PREEMPT|RTEMS_TIMESLICE|RTEMS_NO_ASR|RTEMS_INTERRUPT_LEVEL(0),
/*RTEMS_FLOATING_POINT|*/RTEMS_LOCAL,
&tid);
if (sc != RTEMS_SUCCESSFUL)
rtems_panic("Can't create task: %s", rtems_status_text(sc));
sc = rtems_task_start(tid, entryPoint, arg);
if (sc != RTEMS_SUCCESSFUL)
rtems_panic("Can't start task: %s", rtems_status_text(sc));
}
/*
* Server subtask
*/
static rtems_task workerTask(rtems_task_argument arg)
{
int s = arg;
char msg[80];
char reply[100];
int i;
for (;;) {
if ((i = read(s, msg, sizeof msg)) < 0) {
printf("Server couldn't read message from client: %s\n", strerror(errno));
break;
}
if (i == 0)
break;
rtems_task_wake_after(20); /* Simulate some processing delay */
i = sprintf(reply, "Server received %d (%s)", i, msg);
if ((i = write(s, reply, i+1)) < 0) {
printf("Server couldn't write message to client: %s\n", strerror(errno));
break;
}
}
if (close(s) < 0)
printf("Can't close worker task socket: %s\n", strerror(errno));
printf("Worker task terminating.\n");
rtems_task_delete(RTEMS_SELF);
}
/*
* Server Task
*/
static rtems_task serverTask(rtems_task_argument arg)
{
int s, s1;
socklen_t addrlen;
struct sockaddr_in myAddr, farAddr;
rtems_task_priority myPriority;
printf("Create socket.\n");
s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 0)
rtems_panic("Can't create socket: %s\n", strerror(errno));
memset(&myAddr, 0, sizeof myAddr);
myAddr.sin_family = AF_INET;
myAddr.sin_port = htons(1234);
myAddr.sin_addr.s_addr = htonl(INADDR_ANY);
printf("Bind socket.\n");
if (bind(s, (struct sockaddr *)&myAddr, sizeof myAddr) < 0)
rtems_panic("Can't bind socket: %s\n", strerror(errno));
if (listen(s, 5) < 0)
printf("Can't listen on socket: %s\n", strerror(errno));
rtems_task_set_priority(RTEMS_SELF, RTEMS_CURRENT_PRIORITY, &myPriority);
for(;;) {
addrlen = sizeof farAddr;
s1 = accept(s, (struct sockaddr *)&farAddr, &addrlen);
if (s1 < 0)
rtems_panic("Can't accept connection: %s", strerror(errno));
else
printf("ACCEPTED:%lX\n", ntohl(farAddr.sin_addr.s_addr));
spawnTask(workerTask, myPriority, s1);
}
}
/*
* The real part of the client
*/
static rtems_task clientWorker(int arg)
{
int s;
struct sockaddr_in myAddr, farAddr;
char cbuf[50];
int i;
s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 0) {
printf("Can't create client socket: %s\n", strerror(errno));
return;
}
memset(&myAddr, 0, sizeof myAddr);
myAddr.sin_family = AF_INET;
myAddr.sin_port = htons(0);
myAddr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(s, (struct sockaddr *)&myAddr, sizeof myAddr) < 0) {
printf("Can't bind socket: %s\n", strerror(errno));
goto close;
}
memset(&farAddr, 0, sizeof farAddr);
farAddr.sin_family = AF_INET;
farAddr.sin_port = htons(1234);
farAddr.sin_addr.s_addr = htonl(INADDR_ANY);
printf("Connect to server.\n");
if (connect(s, (struct sockaddr *)&farAddr, sizeof farAddr) < 0) {
printf("Can't connect to server: %s\n", strerror(errno));
goto close;
}
rtems_task_wake_after(20); /* Simulate client delay */
i = sprintf(cbuf, "Hi there, server (%d).", arg);
i++; /* Send the '\0', too */
printf("Write %d-byte message to server.\n", i);
if (write(s, cbuf, i) < 0) {
printf("Can't write to server: %s\n", strerror(errno));
goto close;
}
if ((i = read(s, cbuf, sizeof cbuf)) < 0) {
printf("Can't read from server: %s\n", strerror(errno));
goto close;
}
printf("Read %d from server: %.*s\n", i, i, cbuf);
rtems_task_wake_after(20); /* Simulate client delay */
close:
printf("Client closing connection.\n");
if (close(s) < 0)
printf("Can't close client task socket: %s\n", strerror(errno));
}
/*
* Client Task
*/
static rtems_task clientTask(rtems_task_argument arg)
{
clientWorker(arg);
printf("Client task terminating.\n");
rtems_task_delete( RTEMS_SELF );
}
/*
* RTEMS Startup Task
*/
rtems_task
Init (rtems_task_argument ignored)
{
rtems_status_code sc;
sc = rtems_semaphore_create(rtems_build_name('P','m','t','x'),
1,
RTEMS_PRIORITY|RTEMS_BINARY_SEMAPHORE|RTEMS_INHERIT_PRIORITY|
RTEMS_NO_PRIORITY_CEILING|RTEMS_LOCAL,
0,
&printMutex);
if (sc != RTEMS_SUCCESSFUL)
rtems_panic("Can't create printf mutex:", rtems_status_text(sc));
printf("\"Network\" initializing!\n");
rtems_bsdnet_initialize_network();
printf("\"Network\" initialized!\n");
printf("Try running client with no server present.\n");
printf("Should fail with `connection refused'.\n");
clientWorker(0);
printf("\nStart server.\n");
spawnTask(serverTask, 150, 0);
printf("\nTry running client with server present.\n");
spawnTask(clientTask, 120, 1);
rtems_task_wake_after(500);
printf("\nTry running two clients.\n");
spawnTask(clientTask, 120, 2);
spawnTask(clientTask, 120, 3);
rtems_task_wake_after(500);
printf("\nTry running three clients.\n");
spawnTask(clientTask, 120, 4);
spawnTask(clientTask, 120, 5);
spawnTask(clientTask, 120, 6);
rtems_task_wake_after(500);
puts( "*** END OF LOOPBACK TEST ***" );
exit( 0 );
}
+56
View File
@@ -0,0 +1,56 @@
"Network" initializing!
"Network" initialized!
Try running client with no server present.
Should fail with `connection refused'.
Connect to server.
Can't connect to server: Connection refused
Client closing connection.
Start server.
Try running client with server present.
Create socket.
Connect to server.
Bind socket.
Can't connect to server: Connection refused
Client closing connection.
Client task terminating.
Try running two clients.
Connect to server.
Connect to server.
ACCEPTED:7F000001
ACCEPTED:7F000001
Write 22-byte message to server.
Write 22-byte message to server.
Read 43 from server: Server received 22 (Hi there, server (2).)
Read 43 from server: Server received 22 (Hi there, server (3).)
Client closing connection.
Client task terminating.
Worker task terminating.
Client closing connection.
Client task terminating.
Worker task terminating.
Try running three clients.
Connect to server.
Connect to server.
Connect to server.
ACCEPTED:7F000001
ACCEPTED:7F000001
ACCEPTED:7F000001
Write 22-byte message to server.
Write 22-byte message to server.
Write 22-byte message to server.
Read 43 from server: Server received 22 (Hi there, server (4).)
Read 43 from server: Server received 22 (Hi there, server (5).)
Read 43 from server: Server received 22 (Hi there, server (6).)
Client closing connection.
Client task terminating.
Worker task terminating.
Client closing connection.
Client task terminating.
Worker task terminating.
Client closing connection.
Client task terminating.
Worker task terminating.
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+34
View File
@@ -0,0 +1,34 @@
Lua License
-----------
Lua is licensed under the terms of the MIT license reproduced below.
This means that Lua is free software and can be used for both academic
and commercial purposes at absolutely no cost.
For details and rationale, see http://www.lua.org/license.html .
===============================================================================
Copyright (C) 1994-2008 Lua.org, PUC-Rio.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
===============================================================================
(end of COPYRIGHT)
+183
View File
@@ -0,0 +1,183 @@
HISTORY for Lua 5.1
* Changes from version 5.0 to 5.1
-------------------------------
Language:
+ new module system.
+ new semantics for control variables of fors.
+ new semantics for setn/getn.
+ new syntax/semantics for varargs.
+ new long strings and comments.
+ new `mod' operator (`%')
+ new length operator #t
+ metatables for all types
API:
+ new functions: lua_createtable, lua_get(set)field, lua_push(to)integer.
+ user supplies memory allocator (lua_open becomes lua_newstate).
+ luaopen_* functions must be called through Lua.
Implementation:
+ new configuration scheme via luaconf.h.
+ incremental garbage collection.
+ better handling of end-of-line in the lexer.
+ fully reentrant parser (new Lua function `load')
+ better support for 64-bit machines.
+ native loadlib support for Mac OS X.
+ standard distribution in only one library (lualib.a merged into lua.a)
* Changes from version 4.0 to 5.0
-------------------------------
Language:
+ lexical scoping.
+ Lua coroutines.
+ standard libraries now packaged in tables.
+ tags replaced by metatables and tag methods replaced by metamethods,
stored in metatables.
+ proper tail calls.
+ each function can have its own global table, which can be shared.
+ new __newindex metamethod, called when we insert a new key into a table.
+ new block comments: --[[ ... ]].
+ new generic for.
+ new weak tables.
+ new boolean type.
+ new syntax "local function".
+ (f()) returns the first value returned by f.
+ {f()} fills a table with all values returned by f.
+ \n ignored in [[\n .
+ fixed and-or priorities.
+ more general syntax for function definition (e.g. function a.x.y:f()...end).
+ more general syntax for function calls (e.g. (print or write)(9)).
+ new functions (time/date, tmpfile, unpack, require, load*, etc.).
API:
+ chunks are loaded by using lua_load; new luaL_loadfile and luaL_loadbuffer.
+ introduced lightweight userdata, a simple "void*" without a metatable.
+ new error handling protocol: the core no longer prints error messages;
all errors are reported to the caller on the stack.
+ new lua_atpanic for host cleanup.
+ new, signal-safe, hook scheme.
Implementation:
+ new license: MIT.
+ new, faster, register-based virtual machine.
+ support for external multithreading and coroutines.
+ new and consistent error message format.
+ the core no longer needs "stdio.h" for anything (except for a single
use of sprintf to convert numbers to strings).
+ lua.c now runs the environment variable LUA_INIT, if present. It can
be "@filename", to run a file, or the chunk itself.
+ support for user extensions in lua.c.
sample implementation given for command line editing.
+ new dynamic loading library, active by default on several platforms.
+ safe garbage-collector metamethods.
+ precompiled bytecodes checked for integrity (secure binary dostring).
+ strings are fully aligned.
+ position capture in string.find.
+ read('*l') can read lines with embedded zeros.
* Changes from version 3.2 to 4.0
-------------------------------
Language:
+ new "break" and "for" statements (both numerical and for tables).
+ uniform treatment of globals: globals are now stored in a Lua table.
+ improved error messages.
+ no more '$debug': full speed *and* full debug information.
+ new read form: read(N) for next N bytes.
+ general read patterns now deprecated.
(still available with -DCOMPAT_READPATTERNS.)
+ all return values are passed as arguments for the last function
(old semantics still available with -DLUA_COMPAT_ARGRET)
+ garbage collection tag methods for tables now deprecated.
+ there is now only one tag method for order.
API:
+ New API: fully re-entrant, simpler, and more efficient.
+ New debug API.
Implementation:
+ faster than ever: cleaner virtual machine and new hashing algorithm.
+ non-recursive garbage-collector algorithm.
+ reduced memory usage for programs with many strings.
+ improved treatment for memory allocation errors.
+ improved support for 16-bit machines (we hope).
+ code now compiles unmodified as both ANSI C and C++.
+ numbers in bases other than 10 are converted using strtoul.
+ new -f option in Lua to support #! scripts.
+ luac can now combine text and binaries.
* Changes from version 3.1 to 3.2
-------------------------------
+ redirected all output in Lua's core to _ERRORMESSAGE and _ALERT.
+ increased limit on the number of constants and globals per function
(from 2^16 to 2^24).
+ debugging info (lua_debug and hooks) moved into lua_state and new API
functions provided to get and set this info.
+ new debug lib gives full debugging access within Lua.
+ new table functions "foreachi", "sort", "tinsert", "tremove", "getn".
+ new io functions "flush", "seek".
* Changes from version 3.0 to 3.1
-------------------------------
+ NEW FEATURE: anonymous functions with closures (via "upvalues").
+ new syntax:
- local variables in chunks.
- better scope control with DO block END.
- constructors can now be also written: { record-part; list-part }.
- more general syntax for function calls and lvalues, e.g.:
f(x).y=1
o:f(x,y):g(z)
f"string" is sugar for f("string")
+ strings may now contain arbitrary binary data (e.g., embedded zeros).
+ major code re-organization and clean-up; reduced module interdependecies.
+ no arbitrary limits on the total number of constants and globals.
+ support for multiple global contexts.
+ better syntax error messages.
+ new traversal functions "foreach" and "foreachvar".
+ the default for numbers is now double.
changing it to use floats or longs is easy.
+ complete debug information stored in pre-compiled chunks.
+ sample interpreter now prompts user when run interactively, and also
handles control-C interruptions gracefully.
* Changes from version 2.5 to 3.0
-------------------------------
+ NEW CONCEPT: "tag methods".
Tag methods replace fallbacks as the meta-mechanism for extending the
semantics of Lua. Whereas fallbacks had a global nature, tag methods
work on objects having the same tag (e.g., groups of tables).
Existing code that uses fallbacks should work without change.
+ new, general syntax for constructors {[exp] = exp, ... }.
+ support for handling variable number of arguments in functions (varargs).
+ support for conditional compilation ($if ... $else ... $end).
+ cleaner semantics in API simplifies host code.
+ better support for writing libraries (auxlib.h).
+ better type checking and error messages in the standard library.
+ luac can now also undump.
* Changes from version 2.4 to 2.5
-------------------------------
+ io and string libraries are now based on pattern matching;
the old libraries are still available for compatibility
+ dofile and dostring can now return values (via return statement)
+ better support for 16- and 64-bit machines
+ expanded documentation, with more examples
* Changes from version 2.2 to 2.4
-------------------------------
+ external compiler creates portable binary files that can be loaded faster
+ interface for debugging and profiling
+ new "getglobal" fallback
+ new functions for handling references to Lua objects
+ new functions in standard lib
+ only one copy of each string is stored
+ expanded documentation, with more examples
* Changes from version 2.1 to 2.2
-------------------------------
+ functions now may be declared with any "lvalue" as a name
+ garbage collection of functions
+ support for pipes
* Changes from version 1.1 to 2.1
-------------------------------
+ object-oriented support
+ fallbacks
+ simplified syntax for tables
+ many internal improvements
(end of HISTORY)
+99
View File
@@ -0,0 +1,99 @@
INSTALL for Lua 5.1
* Building Lua
------------
Lua is built in the src directory, but the build process can be
controlled from the top-level Makefile.
Building Lua on Unix systems should be very easy. First do "make" and
see if your platform is listed. If so, just do "make xxx", where xxx
is your platform name. The platforms currently supported are:
aix ansi bsd freebsd generic linux macosx mingw posix solaris
If your platform is not listed, try the closest one or posix, generic,
ansi, in this order.
See below for customization instructions and for instructions on how
to build with other Windows compilers.
If you want to check that Lua has been built correctly, do "make test"
after building Lua. Also, have a look at the example programs in test.
* Installing Lua
--------------
Once you have built Lua, you may want to install it in an official
place in your system. In this case, do "make install". The official
place and the way to install files are defined in Makefile. You must
have the right permissions to install files.
If you want to build and install Lua in one step, do "make xxx install",
where xxx is your platform name.
If you want to install Lua locally, then do "make local". This will
create directories bin, include, lib, man, and install Lua there as
follows:
bin: lua luac
include: lua.h luaconf.h lualib.h lauxlib.h lua.hpp
lib: liblua.a
man/man1: lua.1 luac.1
These are the only directories you need for development.
There are man pages for lua and luac, in both nroff and html, and a
reference manual in html in doc, some sample code in test, and some
useful stuff in etc. You don't need these directories for development.
If you want to install Lua locally, but in some other directory, do
"make install INSTALL_TOP=xxx", where xxx is your chosen directory.
See below for instructions for Windows and other systems.
* Customization
-------------
Three things can be customized by editing a file:
- Where and how to install Lua -- edit Makefile.
- How to build Lua -- edit src/Makefile.
- Lua features -- edit src/luaconf.h.
You don't actually need to edit the Makefiles because you may set the
relevant variables when invoking make.
On the other hand, if you need to select some Lua features, you'll need
to edit src/luaconf.h. The edited file will be the one installed, and
it will be used by any Lua clients that you build, to ensure consistency.
We strongly recommend that you enable dynamic loading. This is done
automatically for all platforms listed above that have this feature
(and also Windows). See src/luaconf.h and also src/Makefile.
* Building Lua on Windows and other systems
-----------------------------------------
If you're not using the usual Unix tools, then the instructions for
building Lua depend on the compiler you use. You'll need to create
projects (or whatever your compiler uses) for building the library,
the interpreter, and the compiler, as follows:
library: lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c
lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c
ltable.c ltm.c lundump.c lvm.c lzio.c
lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c
ltablib.c lstrlib.c loadlib.c linit.c
interpreter: library, lua.c
compiler: library, luac.c print.c
If you use Visual Studio .NET, you can use etc/luavs.bat in its
"Command Prompt".
If all you want is to build the Lua interpreter, you may put all .c files
in a single project, except for luac.c and print.c. Or just use etc/all.c.
To use Lua as a library in your own programs, you'll need to know how to
create and use libraries with your compiler.
As mentioned above, you may edit luaconf.h to select some features before
building Lua.
(end of INSTALL)
+128
View File
@@ -0,0 +1,128 @@
# makefile for installing Lua
# see INSTALL for installation instructions
# see src/Makefile and src/luaconf.h for further customization
# == CHANGE THE SETTINGS BELOW TO SUIT YOUR ENVIRONMENT =======================
# Your platform. See PLATS for possible values.
PLAT= none
# Where to install. The installation starts in the src and doc directories,
# so take care if INSTALL_TOP is not an absolute path.
INSTALL_TOP= /usr/local
INSTALL_BIN= $(INSTALL_TOP)/bin
INSTALL_INC= $(INSTALL_TOP)/include
INSTALL_LIB= $(INSTALL_TOP)/lib
INSTALL_MAN= $(INSTALL_TOP)/man/man1
#
# You probably want to make INSTALL_LMOD and INSTALL_CMOD consistent with
# LUA_ROOT, LUA_LDIR, and LUA_CDIR in luaconf.h (and also with etc/lua.pc).
INSTALL_LMOD= $(INSTALL_TOP)/share/lua/$V
INSTALL_CMOD= $(INSTALL_TOP)/lib/lua/$V
# How to install. If your install program does not support "-p", then you
# may have to run ranlib on the installed liblua.a (do "make ranlib").
INSTALL= install -p
INSTALL_EXEC= $(INSTALL) -m 0755
INSTALL_DATA= $(INSTALL) -m 0644
#
# If you don't have install you can use cp instead.
# INSTALL= cp -p
# INSTALL_EXEC= $(INSTALL)
# INSTALL_DATA= $(INSTALL)
# Utilities.
MKDIR= mkdir -p
RANLIB= ranlib
# == END OF USER SETTINGS. NO NEED TO CHANGE ANYTHING BELOW THIS LINE =========
# Convenience platforms targets.
PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris
# What to install.
TO_BIN= lua luac
TO_INC= lua.h luaconf.h lualib.h lauxlib.h ../etc/lua.hpp
TO_LIB= liblua.a
TO_MAN= lua.1 luac.1
# Lua version and release.
V= 5.1
R= 5.1.4
all: $(PLAT)
$(PLATS) clean:
cd src && $(MAKE) $@
test: dummy
src/lua test/hello.lua
install: dummy
cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD)
cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN)
cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC)
cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB)
cd doc && $(INSTALL_DATA) $(TO_MAN) $(INSTALL_MAN)
ranlib:
cd src && cd $(INSTALL_LIB) && $(RANLIB) $(TO_LIB)
local:
$(MAKE) install INSTALL_TOP=..
none:
@echo "Please do"
@echo " make PLATFORM"
@echo "where PLATFORM is one of these:"
@echo " $(PLATS)"
@echo "See INSTALL for complete instructions."
# make may get confused with test/ and INSTALL in a case-insensitive OS
dummy:
# echo config parameters
echo:
@echo ""
@echo "These are the parameters currently set in src/Makefile to build Lua $R:"
@echo ""
@cd src && $(MAKE) -s echo
@echo ""
@echo "These are the parameters currently set in Makefile to install Lua $R:"
@echo ""
@echo "PLAT = $(PLAT)"
@echo "INSTALL_TOP = $(INSTALL_TOP)"
@echo "INSTALL_BIN = $(INSTALL_BIN)"
@echo "INSTALL_INC = $(INSTALL_INC)"
@echo "INSTALL_LIB = $(INSTALL_LIB)"
@echo "INSTALL_MAN = $(INSTALL_MAN)"
@echo "INSTALL_LMOD = $(INSTALL_LMOD)"
@echo "INSTALL_CMOD = $(INSTALL_CMOD)"
@echo "INSTALL_EXEC = $(INSTALL_EXEC)"
@echo "INSTALL_DATA = $(INSTALL_DATA)"
@echo ""
@echo "See also src/luaconf.h ."
@echo ""
# echo private config parameters
pecho:
@echo "V = $(V)"
@echo "R = $(R)"
@echo "TO_BIN = $(TO_BIN)"
@echo "TO_INC = $(TO_INC)"
@echo "TO_LIB = $(TO_LIB)"
@echo "TO_MAN = $(TO_MAN)"
# echo config parameters as Lua code
# uncomment the last sed expression if you want nil instead of empty strings
lecho:
@echo "-- installation parameters for Lua $R"
@echo "VERSION = '$V'"
@echo "RELEASE = '$R'"
@$(MAKE) echo | grep = | sed -e 's/= /= "/' -e 's/$$/"/' #-e 's/""/nil/'
@echo "-- EOF"
# list targets that do not create files (but not all makes understand .PHONY)
.PHONY: all $(PLATS) clean test install local none dummy echo pecho lecho
# (end of Makefile)
+37
View File
@@ -0,0 +1,37 @@
README for Lua 5.1
See INSTALL for installation instructions.
See HISTORY for a summary of changes since the last released version.
* What is Lua?
------------
Lua is a powerful, light-weight programming language designed for extending
applications. Lua is also frequently used as a general-purpose, stand-alone
language. Lua is free software.
For complete information, visit Lua's web site at http://www.lua.org/ .
For an executive summary, see http://www.lua.org/about.html .
Lua has been used in many different projects around the world.
For a short list, see http://www.lua.org/uses.html .
* Availability
------------
Lua is freely available for both academic and commercial purposes.
See COPYRIGHT and http://www.lua.org/license.html for details.
Lua can be downloaded at http://www.lua.org/download.html .
* Installation
------------
Lua is implemented in pure ANSI C, and compiles unmodified in all known
platforms that have an ANSI C compiler. In most Unix-like platforms, simply
do "make" with a suitable target. See INSTALL for detailed instructions.
* Origin
------
Lua is developed at Lua.org, a laboratory of the Department of Computer
Science of PUC-Rio (the Pontifical Catholic University of Rio de Janeiro
in Brazil).
For more information about the authors, see http://www.lua.org/authors.html .
(end of README)

Some files were not shown because too many files have changed in this diff Show More