Project

General

Profile

Revision 1428

Added by Ryan Cahoon over 14 years ago

Add new bootloader prototype supporting wireless programming

View differences:

trunk/code/projects/libwireless/lib/xbee.c
340 340
{
341 341
	#ifndef ROBOT
342 342
	pthread_cancel(*xbee_listen_thread);
343
    pthread_join(*xbee_listen_thread, NULL);
343 344
	free(xbee_listen_thread);
344 345
	lockf(xbee_stream, F_ULOCK, 0);
345 346
	close(xbee_stream);
trunk/code/projects/colonet/server/vision/vision.c
84 84

  
85 85
  cvSmooth( image03, image03, CV_GAUSSIAN, 9, 9 ); // smooth it, otherwise a lot of false circles may be detected
86 86
  CvMemStorage* storage = cvCreateMemStorage(0);
87
  CvSeq* circles = cvHoughCircles( image03, storage, CV_HOUGH_GRADIENT, 1, 1, 100, 43 );
87
  CvSeq* circles = cvHoughCircles( image03, storage, CV_HOUGH_GRADIENT, 1, 50, 100, 43 );
88 88

  
89 89
  int i;
90 90
  for( i = 0; i < circles->total && count < 100; i++ )
trunk/code/projects/wireless_bootloader/downloader.c
1
#include <stdio.h>
2
#include <termios.h>
3
#include <fcntl.h>
4
#include <stdlib.h>
5
#include <unistd.h>
6
#include <sys/ioctl.h>
7

  
8
int setupSerial(int fd, int baud)
9
{
10
	struct termios options;
11

  
12
    /* set baud rate, etc. correctly */
13

  
14
	tcgetattr(fd, &options);
15
	cfsetispeed(&options, baud);
16
	cfsetospeed(&options, baud);
17
	options.c_iflag &= ~ICRNL;
18
	options.c_oflag &= ~OCRNL;
19
	options.c_cflag |= (CLOCAL | CREAD);
20
	options.c_cflag &= ~PARENB;
21
	options.c_cflag &= ~CSTOPB;
22
	options.c_cflag &= ~CSIZE;
23
	options.c_cflag |= CS8;
24
	options.c_lflag &= ~ICANON;
25
	options.c_cc[VMIN] = 1;
26
	options.c_cc[VTIME] = 50;
27

  
28
	if (tcsetattr(fd, TCSANOW, &options))
29
	{
30
		printf("Error setting attributes.\n");
31
		return -1;
32
	}
33

  
34
    return 0;
35
}
36

  
37
int initSerial(char* portName)
38
{
39
    /* open port for I/O */
40
    int fd = open(portName, O_RDWR | O_NOCTTY ); 
41
    if (fd <0)
42
    {
43
        perror(portName);
44
        return -1;
45
    }
46

  
47
    return fd;
48
}
49

  
50
int writeSerial(int h, const char buf[], int length)
51
{
52
    return write(h,buf,length);
53
}
54
int writeByte(int h, char buf)
55
{
56
    return writeSerial(h, &buf, 1);
57
}
58

  
59
int getAvailBytes(int h)
60
{
61
    int bytes;
62
    ioctl(h, FIONREAD, &bytes);
63
    return bytes;
64
}
65

  
66
int readSerial(int h, char buf[], int length)
67
{
68
    return read(h,buf,length);
69
}
70
int readByte(int h)
71
{
72
    char buf;
73
    if (readSerial(h, &buf, 1)<1)
74
        return -1;
75
    return buf;
76
}
77

  
78
void closeSerial(int h)
79
{
80
    close(h);
81
}
82

  
83
int wait_for_ok(int h)
84
{
85
    const char* s = "OK\r";
86
    const char* curr = s;
87
    int count = 0;
88
    while (curr - s < 3)
89
    {
90
        int c;
91
        while(!getAvailBytes(h))
92
        {
93
            if (count++ > 150) return 0;
94
            usleep(10000);
95
        }
96
        c = readByte(h);
97
        if (c>=0)
98
        {
99
            if (c == *curr) {
100
                curr++;
101
            } else {
102
                curr = s;
103
            }
104
        }
105
    }
106

  
107
    return 1;
108
}
109

  
110
int xbee_setup(int h, int robotNum)
111
{
112
    int _init = 0;
113

  
114
    char idstr[9] = "ATIDFF";
115
    setupSerial(h, B9600);
116

  
117
    writeSerial(h, "+++", 3);
118
    if (wait_for_ok(h))
119
    {
120
        printf("Initializing XBee\n");
121

  
122
        writeSerial(h, "ATCH0C\r", 7);
123
        wait_for_ok(h);
124

  
125
        idstr[6] = (robotNum / 10) + 0x30;
126
        idstr[7] = robotNum % 10 + 0x30;
127
        idstr[8] = '\r';
128
        writeSerial(h, idstr, 9);
129
        wait_for_ok(h);
130

  
131
        writeSerial(h, "ATDH0\r", 6);
132
        wait_for_ok(h);
133
        writeSerial(h, "ATDLFFFF\r", 9);
134
        wait_for_ok(h);
135
        writeSerial(h, "ATAP0\r", 6);
136
        wait_for_ok(h);
137
        writeSerial(h, "ATBD6\r", 6);
138
        wait_for_ok(h);
139
        writeSerial(h, "ATCN\r", 5);
140
        wait_for_ok(h);
141

  
142
        _init = 1;
143
    }
144

  
145
    setupSerial(h, B57600);
146

  
147
    if (!_init)
148
    {
149
        printf("Configuring XBee\n");
150

  
151
        writeSerial(h, "+++", 3);
152
        wait_for_ok(h);
153
        
154
        idstr[6] = (robotNum / 10) + 0x30;
155
        idstr[7] = robotNum % 10 + 0x30;
156
        idstr[8] = '\r';
157
        writeSerial(h, idstr, 9);
158
        wait_for_ok(h);
159

  
160
        writeSerial(h, "ATCN\r", 5);
161
        wait_for_ok(h);
162
    }
163

  
164
    return 0;
165
}
166

  
167
/* Take in an intel hex file and load it into a large array
168
 * This allows us to read sequential data from the large array without having to
169
 * worry about weird character line-feed breaks in the text/HEX file.
170
 * 
171
 * Takes: file name?
172
 * Returns: Big array
173
 * 
174
 * For ATmega168, we have to load 128 bytes at a time (program full page). Document: AVR095
175
 */
176

  
177
#define MEM_SIZE 131072
178

  
179
unsigned char intel_hex_array[MEM_SIZE];
180

  
181
unsigned int Hex_Convert(char str[3])
182
{
183
    unsigned int hex_num;
184
    char hstr[5] = { '0', 'x', 0, 0, 0 };
185
    hstr[2] = str[0];
186
    hstr[3] = str[1];
187
    sscanf(hstr, "%x", &hex_num);
188
    return hex_num;
189
}
190

  
191
int parse_file(char* file)
192
{
193
    int i;
194
    char buffer[3];
195
	
196
	/* Read in the HEX file - clean it up */
197
	FILE* fnum = fopen(file, "r");
198
    if (fnum == NULL)
199
        return 1;
200
	
201
	/* Pre-fill hex_array with 0xFF */
202
	for (i=0; i < MEM_SIZE; i++)
203
    {
204
		intel_hex_array[i] = 0xff;
205
	}
206
	
207
	/* Step through cleaned file and load file contents into large array
208
	 * Also convert from ASCII to binary */
209
	for(;;)
210
    {
211
        int Record_Length, Memory_Address_High, Memory_Address_Low, Memory_Address, End_Record;
212

  
213
        /* Peel off first character */
214
        int first = fgetc(fnum);
215

  
216
        /* Remove empty lines + lines not starting with a ":" */
217
        if (first == EOF) break;
218
		if (first != ':') continue;
219
		
220
		/* Peel off record length */
221
		Record_Length = Hex_Convert(fgets(buffer, 3, fnum));
222
		
223
		/* Get the memory address of this line */
224
		Memory_Address_High = Hex_Convert(fgets(buffer, 3, fnum));
225
		Memory_Address_Low = Hex_Convert(fgets(buffer, 3, fnum));
226
		Memory_Address = (Memory_Address_High << 8) + Memory_Address_Low;
227
		
228
		/*Divide Memory address by 2
229
		         If (Memory_Address_High Mod 2) <> 0 Then
230
		             Memory_Address_Low = Memory_Address_Low + 256
231
		         End If
232
		         Memory_Address_High = Memory_Address_High \ 2
233
		         Memory_Address_Low = Memory_Address_Low \ 2*/
234
		
235
		/* Peel off and check for end of file tage */
236
		End_Record = Hex_Convert(fgets(buffer, 3, fnum));
237
        if (End_Record == 04 ) continue;
238
		if (End_Record == 01) break;
239
		
240
		for (i=0; i < Record_Length; i++)
241
        {
242
			/* Pull out the byte and store it in the memory_address location of the intel_hex array */
243
			intel_hex_array[Memory_Address + i] = Hex_Convert(fgets(buffer, 3, fnum));
244
		}
245
		
246
	}
247

  
248
    fclose(fnum);
249
	
250
	return 0;
251
}
252

  
253

  
254
int download(int h, char *file)
255
{
256
	int j;
257
	
258
	int Memory_Address_High;
259
	int Memory_Address_Low;
260
	
261
	int Check_Sum;
262

  
263
    char buf;
264
	
265
	int last_memory_address;
266
	int current_memory_address;
267
	
268
	int page_size = 256; /* For ATmega168, we have to load 128 bytes at a time (program full page). Document: AVR095 */
269
	
270
	/* Take intel hex file and store it squentially into large array */
271
	if (parse_file(file))
272
    {
273
		fprintf(stderr, "Whoa - problem parsing file!\n");
274
		return -1;
275
	}
276

  
277
	printf("Waiting for target IC to broadcast\n");
278
	
279
	/* "Send the reset signal"; */
280

  
281
	while(!getAvailBytes(h))
282
    {
283
        usleep(1500000);
284
        writeByte(h, 6);
285
    }
286

  
287
	printf("Load Mode Notification Received\n");
288
	
289
	/* Find the last spot in the large hex_array */
290
	last_memory_address = MEM_SIZE - 1;
291
	while(last_memory_address > 0)
292
    {
293
		if (intel_hex_array[last_memory_address] != 255) break;
294
		last_memory_address--;
295
	}
296
	
297
	/* Start at beginning of large intel array */
298
	current_memory_address = 0;
299
	while (current_memory_address < last_memory_address)
300
    {
301
        while((buf = readByte(h))==-1)
302
            usleep(1000);
303

  
304
		if (buf == 'T') /* All is well */
305
        {
306
			/* Total_Code_Words = Total_Code_Words + (Record_Length / 2) */
307
        }
308
		else if (buf == 7)  /* Re-send line */
309
        {
310
            static int resend_count = 0;
311
			current_memory_address = current_memory_address - page_size;
312
            if (current_memory_address<0) current_memory_address=0;
313
            printf("\nResending: %d\n", ++resend_count);
314
			usleep(1000);
315
        }
316
		else
317
        {
318
			fprintf(stderr, "\nError : Incorrect response from target IC: %d. Programming is incomplete and will now halt.\n", buf);
319
			return -2;
320
		}
321
		
322
		/* Update progress */
323
		printf("\rLoaded %d code words", current_memory_address);
324
        fflush(stdout);
325
		
326
		/*=============================================*/
327
		/* Convert 16-bit current_memory_address into two 8-bit characters */
328
		Memory_Address_High = current_memory_address >> 8;
329
		Memory_Address_Low = current_memory_address & 0xff;
330
		
331
		/*=============================================*/
332
		/* Calculate current check_sum */
333
		Check_Sum = 0;
334
		Check_Sum += page_size >> 8;    /* page size high byte */
335
        Check_Sum += page_size & 0xff;  /* page size low byte */
336
		Check_Sum += Memory_Address_High; /* Convert high byte */
337
		Check_Sum += Memory_Address_Low; /* Convert low byte */
338
		
339
		for(j=0; j < page_size; j++)
340
        {
341
			Check_Sum += intel_hex_array[current_memory_address + j];
342
		}
343
		
344
		/* Now reduce check_sum to 8 bits */
345
		Check_Sum &= 0xff;
346
		/* Now take 2's compliment */
347
		Check_Sum = 256 - Check_Sum;
348
		
349
		/*=============================================*/
350
		/* Send the start character */
351
        writeByte(h, ':');
352
		
353
		/* Send the record length */
354
        writeByte(h, page_size & 0xff); /* low byte */
355
        writeByte(h, page_size >> 8);   /* high byte */
356
		
357
		/* Send this block's address */
358
        writeByte(h, Memory_Address_Low);
359
        writeByte(h, Memory_Address_High);
360

  
361
		/* Send this block's check sum */
362
        writeByte(h, Check_Sum);
363
		
364
		/* Send the block */
365
		for (j=0; j < page_size; j++)
366
        {
367
			writeByte(h, intel_hex_array[current_memory_address + j]);
368
		}
369
		/*=============================================*/
370

  
371
		current_memory_address += page_size;
372
	}
373
	
374
	/* Tell the target IC we are done transmitting data */
375
    writeByte(h, ':');
376
    writeByte(h, 'S');
377
    writeByte(h, 'S');
378
	
379
	printf("\nDownload Complete!\n");
380

  
381
    return 0;
382
}
383

  
384
int main(int argc, char* argv[])
385
{
386
    int h;
387

  
388
    printf("//=\\\\     _                          __               \n");
389
    printf("||  .    |_) _ |_  _  _  |    |_    /   _  |  _ __  \\/\n");
390
    printf("|| -A!   | \\(_)|_)(_)(_  | |_||_)   \\__(_) | (_)| | / \n");
391
    printf("                                                      \n");
392
    printf("                 Universal Programmer                 \n");
393
    printf("                                                      \n");
394

  
395
    switch(argc)
396
    {
397
    case 3:
398
        /* open port for I/O */
399
        h = initSerial(argv[1]);
400
        setupSerial(h, B57600);
401
    break;
402
    case 4:
403
        h = initSerial(argv[1]);
404
        xbee_setup(h, atoi(argv[3]));        
405
    break;
406
    default:
407
        printf("Usage: %s <port name> <hex file> [<robot ID>]\n", argv[0]);
408
        return -1;
409
    }
410

  
411
    int ret = download(h, argv[2]);
412

  
413
    closeSerial(h);
414

  
415
    return ret;
416
}
trunk/code/projects/wireless_bootloader/wireless_bootloader.c
1
/*
2
    adapted from "Wireless bootloader for the ATmega168 and XBee Series 1 modules"
3
    orginal code copyright 2009 Nathan Seidle, Spark Fun Electronics?
4

  
5
    Modifications for Colony Project, Robotics Club, Carngie Mellon University
6
    by Ryan Cahoon
7
*/
8

  
9
#include <avr/io.h>
10
#include <util/delay.h>
11
#include <avr/boot.h>
12

  
13
#define TRUE	0
14
#define FALSE	1
15

  
16
//Status LEDs
17
#define LED_DDR  DDRC
18
#define LED_PORT PORTC
19
#define LED_PIN  PINC
20
#define LED      (_BV(PINC1) | _BV(PINC5))
21

  
22
//Command Button
23
#define BLPORT   PORTG
24
#define BLDDR    DDRG
25
#define BLPIN    PING
26
#define BLPNUM   PING0
27

  
28
//Function prototypes
29
void setup_uart0(void);
30
void setup_uart1(void);
31
void putch0(char);
32
void putch1(char);
33
int getch0(void);
34
int getch1(void);
35
void flash_led(uint8_t);
36
void onboard_program_write(uint32_t page, uint8_t *buf);
37
int bootloader(int force);
38
int xbee_setup(int robotNum);
39
int xbee_reset(void);
40
int code_transfer(int (*getch)(void), void (*putch)(char));
41

  
42
int usb_send(char* buf, int size);
43

  
44
void (*main_start)(void) = 0x0000;
45

  
46
//Variables
47
uint8_t incoming_page_data[256];
48
uint8_t retransmit_flag = FALSE;
49

  
50
union page_address_union {
51
	uint16_t word;
52
	uint8_t  byte[2];
53
};
54
union page_address_union page_address;
55
union page_address_union page_length;
56

  
57
int main(void)
58
{
59
    return bootloader(0);
60
}
61

  
62
#define EEPROM_ROBOT_ID_ADDR 0x10
63
int eeprom_get_byte(unsigned int uiAddress, unsigned char *byte) {
64
    /* Wait for completion of previous write */
65
    while(EECR & (1<<EEWE));
66
    /* Set up address register */
67
    EEAR = uiAddress;
68
    /* Start eeprom read by writing EERE */
69
    EECR |= (1<<EERE);
70
    /* get data from data register */
71
    *byte=EEDR;
72
    
73
    return 0;
74
}
75
unsigned char get_robotid(void) {
76
    unsigned char c0, c1, c2;
77
    
78
    eeprom_get_byte(EEPROM_ROBOT_ID_ADDR, &c0);
79
    eeprom_get_byte(EEPROM_ROBOT_ID_ADDR+1, &c1);
80
    eeprom_get_byte(EEPROM_ROBOT_ID_ADDR+2, &c2);
81
    if(c0 == 'I' && c1 == 'D')
82
        return c2;
83
    else
84
        return 0xFF;
85
}
86

  
87
int bootloader(int force)
88
{
89
    int robotId;
90

  
91
    // check if button pressed
92
    int oldBLDDR = BLDDR;
93
    int oldBLPORT = BLPORT;
94
    BLDDR  &= ~(1<<BLPNUM);		// set as Input
95
	BLPORT |= (1<<BLPNUM);		// Enable pullup
96

  
97
    if ((BLPIN & (1<<BLPNUM)) && !force) {
98
		// jump to main app if pin is not grounded
99
		BLPORT = oldBLPORT;		// set to default
100
        BLDDR = oldBLDDR;
101
		main_start();			// Jump to application sector
102
	}
103

  
104
    //set LED pin as output
105
	LED_DDR |= 0x77;
106

  
107
    flash_led(1);
108

  
109
    robotId = get_robotid();
110

  
111
    setup_uart1();
112
    xbee_setup(robotId);
113
    setup_uart0();
114

  
115
	//turn on LED to signal entering of bootloader
116
	LED_PORT = ~LED;
117

  
118
	//Start bootloading process
119

  
120
	//Wait for the computer
121
	while(1)
122
    {
123
        // transfering over USB
124
        if (getch0()==6)
125
            code_transfer(getch0, putch0);
126
        // transfering over wireless
127
        if (getch1()==6)
128
            code_transfer(getch1, putch1);
129

  
130
        // Communication testing code:
131
        /*int ch0 = getch0();
132
        if (ch0 >= 0)
133
        {
134
            putch1(ch0);
135
            PORTC ^= 0x70;
136
        }
137
        int ch1 = getch1();
138
        if (ch1 >= 0)
139
        {
140
            putch0(ch1);
141
            PORTC ^= 0x07;
142
        }*/
143
    }
144

  
145
    return 0;
146
}
147

  
148
int code_transfer(int (*getch)(void), void (*putch)(char))
149
{
150
    uint8_t check_sum = 0;
151
	uint16_t i;
152

  
153
    retransmit_flag = FALSE;
154

  
155
    LED_PORT |= 0x77;
156
    LED_PORT &= 0x9A;
157

  
158
	while(1)
159
	{
160
        // Flash the orbs to show progress
161
        PORTC ^= 0x77;
162

  
163
		//Determine if the last received data was good or bad
164
        if (check_sum != 0) //If the check sum does not compute, tell computer to resend same line
165
RESTART:
166
            putch(7); //Tell the computer to retransmit the last page
167
        else            
168
            putch('T'); //Tell the computer that we are ready for the next line
169
        
170
        while(1) //Wait for the computer to initiate transfer
171
		{
172
			if (getch() == ':') break; //This is the "gimme the next chunk" command
173
			if (retransmit_flag == TRUE) goto RESTART;
174
		}
175

  
176
        //Get the length of this block
177
        page_length.byte[0] = getch(); if (retransmit_flag == TRUE) goto RESTART;
178
        page_length.byte[1] = getch(); if (retransmit_flag == TRUE) goto RESTART;
179

  
180
        if (page_length.byte[0] == 'S') //Check to see if we are done - this is the "all done" command
181
		{
182
            //Wait for any flash writes to complete
183
			boot_rww_enable ();
184

  
185
            // signal programming done
186
            LED_PORT |= 0x77;
187
            flash_led(1);
188

  
189
            // reset xbee
190
            xbee_reset();
191

  
192
            flash_led(2);
193

  
194
            // reset robot
195
			WDTCR &= 0xF8;
196
            WDTCR |= 0x08;
197
            while(1);
198
		}
199
	
200
		//Get the memory address at which to store this block of data
201
		page_address.byte[0] = getch(); if (retransmit_flag == TRUE) goto RESTART;
202
		page_address.byte[1] = getch(); if (retransmit_flag == TRUE) goto RESTART;
203

  
204
        check_sum = getch(); //Pick up the check sum for error dectection
205
		if (retransmit_flag == TRUE) goto RESTART;
206
		
207
		for(i = 0 ; i < page_length.word ; i++) //Read the program data
208
		{
209
            incoming_page_data[i] = getch();
210
			if (retransmit_flag == TRUE) goto RESTART;
211
		}
212
        
213
        //Calculate the checksum
214
		for(i = 0 ; i < page_length.word ; i++)
215
            check_sum += incoming_page_data[i];
216
        
217
        check_sum += page_length.byte[0];
218
        check_sum += page_length.byte[1];
219
        check_sum += page_address.byte[0];
220
        check_sum += page_address.byte[1];
221
		
222
        if(check_sum == 0) //If we have a good transmission, put it in ink
223
            onboard_program_write((uint32_t)page_address.word, incoming_page_data);
224
	}
225

  
226
    return 0;
227
}
228

  
229
void onboard_program_write(uint32_t page, uint8_t *buf)
230
{
231
	uint16_t i;
232

  
233
	boot_page_erase (page);
234
	boot_spm_busy_wait ();      // Wait until the memory is erased.
235

  
236
	for (i=0; i<SPM_PAGESIZE; i+=2)
237
	{
238
		// Set up little-endian word.
239

  
240
		uint16_t w = *buf++;
241
		w += (*buf++) << 8;
242
	
243
		boot_page_fill (page + i, w);
244
	}
245

  
246
	boot_page_write (page);     // Store buffer in flash page.
247
	boot_spm_busy_wait();       // Wait until the memory is written.
248
}
249

  
250
void flash_led(uint8_t count)
251
{
252
	uint8_t i;
253
	
254
	for (i = 0; i < count; ++i) {
255
		LED_PORT = ~LED;
256
		_delay_ms(100);
257
		LED_PORT = 0xff;
258
		_delay_ms(100);
259
	}
260
}
261

  
262
/**************************************************************************************/
263

  
264
#define MYUBRR (((((F_CPU * 10) / (8L * baud)) + 5) / 10) - 1)
265

  
266
#define MAX_CHARACTER_WAIT	15 
267
#define MAX_WAIT_IN_CYCLES ( ((MAX_CHARACTER_WAIT * 8) * F_CPU) / baud )
268

  
269
long baud = 9600;
270

  
271
void setup_uart0(void)
272
{
273
    //Setup USART baud rate
274
    UBRR0H = MYUBRR >> 8;
275
    UBRR0L = MYUBRR;
276
    UCSR0B = (1<<RXEN0)|(1<<TXEN0);
277
    UCSR0A |= _BV(U2X0);
278
}
279
void setup_uart1(void)
280
{
281
    //Setup USART baud rate
282
    UBRR1H = MYUBRR >> 8;
283
    UBRR1L = MYUBRR;
284
    UCSR1B = (1<<RXEN1)|(1<<TXEN1);
285
    UCSR1A |= _BV(U2X1);
286
}
287

  
288
void putch0(char ch)
289
{
290
    while (!(UCSR0A & _BV(UDRE0)));
291
    UDR0 = ch;
292
}
293
void putch1(char ch)
294
{
295
    while (!(UCSR1A & _BV(UDRE1)));
296
    UDR1 = ch;
297
}
298

  
299
int getch0(void)
300
{
301
    retransmit_flag = FALSE;
302

  
303
    uint32_t count = 0;
304
    while(!(UCSR0A & _BV(RXC0)))
305
    {
306
        count++;
307
        if (count > MAX_WAIT_IN_CYCLES)
308
        {
309
            retransmit_flag = TRUE;
310
            return -1;
311
        }
312
    }
313

  
314
    return UDR0;
315
}
316

  
317
int getch1(void)
318
{
319
    retransmit_flag = FALSE;
320

  
321
    uint32_t count = 0;
322
    while(!(UCSR1A & _BV(RXC1)))
323
    {
324
        count++;
325
        if (count > MAX_WAIT_IN_CYCLES)
326
        {
327
            retransmit_flag = TRUE;
328
            return -1;
329
        }
330
    }
331

  
332
    return UDR1;
333
}
334

  
335

  
336

  
337
int xbee_wait_for_ok(void)
338
{
339
    const char* s = "OK\r";
340
    const char* curr = s;
341
    while (curr - s < 3)
342
    {
343
        int c = getch1();
344
        if (c>=0)
345
        {
346
            if (c == *curr) {
347
                curr++;
348
            } else {
349
                curr = s;
350
            }
351
        }
352
    }
353

  
354
    return 0;
355
}
356

  
357
int xbee_send_command(const char* buf, int size)
358
{
359
    int i;
360
    for (i = 0; i < size; i++)
361
    {
362
        putch1(buf[i]);
363
    }
364

  
365
    xbee_wait_for_ok();
366

  
367
    return 0;
368
}
369

  
370
int usb_send(char* buf, int size)
371
{
372
    int i;
373
    for(i=0; i<size; i++)
374
        putch0(buf[i]);
375
    return 0;
376
}
377

  
378
int xbee_setup(int robotNum)
379
{
380
    char idstr[9] = "ATIDFF";
381

  
382
    xbee_send_command("+++", 3);
383
    xbee_send_command("ATCH0C\r", 7);
384

  
385
    idstr[6] = (robotNum / 10) + 0x30;
386
    idstr[7] = robotNum % 10 + 0x30;
387
    idstr[8] = '\r';
388
    xbee_send_command(idstr, 9);
389

  
390
    xbee_send_command("ATDH0\r", 6);
391
    xbee_send_command("ATDLFFFF\r", 9);
392
    xbee_send_command("ATAP0\r", 6);
393
    xbee_send_command("ATBD6\r", 6);
394
    xbee_send_command("ATCN\r", 5);
395

  
396
    baud = 57600;
397
    setup_uart1();
398

  
399
    return 0;
400
}
401

  
402
int xbee_reset(void)
403
{
404
    // command sequence guard time
405
    _delay_ms(1100);
406
    xbee_send_command("+++", 3);
407
    xbee_send_command("ATBD3\r", 6);
408
    xbee_send_command("ATFR\r", 5);
409
    // delay 150 ms to wait for reset
410
    _delay_ms(150);
411

  
412
    return 0;
413
}
trunk/code/projects/wireless_bootloader/original_dump.hex
1
:200000000C94C7000C94E6000C94E6000C94E6000C94E6000C94E6000C94E6000C94E600CF
2
:200020000C94E6000C94E6000C94E6000C94E6000C94E6000C94E6000C94E6000C94E60090
3
:200040000C94E6000C94E6000C94E6000C94E6000C94E6000C94E6000C94E6000C94E60070
4
:200060000C94E6000C94E6000C94E6000C94E6000C94E6000C94E6000C94E6000C94E60050
5
:200080000C94E6000C94E6000C94E6006E616E00696E660000407A10F35A00A0724E1809BC
6
:2000A0000010A5D4E80000E87648170000E40B54020000CA9A3B000000E1F505000080963D
7
:2000C0009800000040420F000000A08601000000102700000000E80300000000640000004A
8
:2000E00000000A00000000000100000000002C76D888DC674F0823DFC1DFAE59E1B1B796D1
9
:20010000E5E3E453C63AE651997696E8E6C28426EB898C9B62ED407C6FFCEFBC9C9F40F2A1
10
:20012000BAA56FA5F490055A2AF75C936B6CF9676DC11BFCE0E40D47FEF520E6B500D0ED5A
11
:20014000902E0300943577050080841E080000204E0A000000C80C333333330F986E1283AD
12
:200160001141EF8D2114893BE65516CFFEE6DB18D1844B381BF77C1D901DA4BBE4242032D8
13
:2001800084725E228100C9F124ECA1E53D2711241FBECFEFD0E1DEBFCDBF11E0A0E0B1E008
14
:2001A000E8E1FFE000E00BBF02C007900D92AA33B107D9F711E0AAE3B1E001C01D92AA3334
15
:2001C000B107E1F70E94EB010C948A070C9400002091370130913801442737FD4095542F56
16
:2001E00064E0220F331F441F551F6A95D1F760E074EB84EC94E00E9416072B5F3F4F4F4FA2
17
:200200005F4FCA01B9012AE030E040E050E00E941607C901DA010197A109B109292F3A2F20
18
:200220004B2F552747FD5A950196A11DB11D20939000815089B988E18AB9089520913701EA
19
:2002400030913801442737FD4095542FE4E0220F331F441F551FEA95D1F760E074EB84EC39
20
:2002600094E00E9416072B5F3F4F4F4F5F4FCA01B9012AE030E040E050E00E941607C9016F
21
:20028000DA010197A109B109292F3A2F4B2F552747FD5A950196A11DB11D2093980081505E
22
:2002A0008093990088E180939A0008955D9BFECF8CB90895982F80919B0085FFFCCF909353
23
:2002C0009C0008955F9903C02FEF3FEF03C08CB1282F30E0C901089580919B0087FD03C01D
24
:2002E0002FEF3FEF04C080919C00282F30E0C90108950CC080919B0087FF0CC020919C005C
25
:2003000030E0808190E02817390719F0E0E0F1E001C03196CF018050914003975CF380E001
26
:2003200090E00895AC0120E030E00CC0FA01E20FF31FE08180919B0085FFFCCFE0939C00BE
27
:200340002F5F3F4F261737078CF30CC080919B0087FF0CC020919C0030E0808190E02817B0
28
:20036000390719F0E0E0F1E001C03196CF018050914003975CF380E090E0089584E091E07F
29
:2003800063E070E00E94920188E091E067E070E00E94920180E191E069E070E00E94920150
30
:2003A0008AE191E066E070E00E94920181E291E069E070E00E9492018BE291E065E070E081
31
:2003C0000E94920181E391E065E070E00E94920180E090E0089584B3876784BB85B3876752
32
:2003E00085BB0E94E8000E941E010E94BE0185B38A7985BB30E727E05F9B0AC09CB1809156
33
:200400009B0085FFFCCF90939C0085B3832785BB80919B0087FFF0CF80919C005D9BFECFAE
34
:200420008CB985B3822785BBE7CFA1E1B0E0EBE1F2E00C9431073C017F876E876A01FC0178
35
:2004400017821682838181FD03C06FEF7FEF71C39E012F5F3F4F398B288BF3012381EE85E9
36
:20046000FF8523FD859123FF8191FF87EE87882309F45CC3853251F4EE85FF8523FD8591A3
37
:2004800023FF8191FF87EE87853229F490E0B3010E948C06E2CF982F10E0882499241032EE
38
:2004A000B0F49B3269F09C3228F4903251F0933271F40BC09D3239F0903349F4116028C03F
39
:2004C0001260146025C0186023C0106121C017FD2AC0892F80538A3078F416FF06C0FAE040
40
:2004E0009F9E902C1124980E13C03AE0839E802C1124880E10620CC09E3221F416FD16C394
41
:20050000106406C09C3611F4106802C0983659F4EE85FF8523FD959123FF9191FF87EE87F9
42
:20052000992309F0BCCF892F8554833020F4812F8061905E07C0892F8556833008F0A1C13D
43
:20054000812F8F7E86FD02C076E0972E6FE3F62EF822953619F4F0E4FF2A07C0963619F479
44
:2005600020E8F22A02C091109A94F7FE0BC03BE3391520F427E05CE3B52E0EC0B92CB39463
45
:2005800027E00AC047E0491528F427E0BB2447E0942E02C0292DBB24C60104969D878C878B
46
:2005A000F6016081718182819381AE014F5F5F4F0B2D0E949E056C010981202E332400FF37
47
:2005C00004C003FD02C01DE209C0F1FE02C01BE205C0F2FC02C010E001C010E2C1018C7049
48
:2005E0009070892BB9F1112311F483E001C084E0881510F088240AC0881AF3FC07C080E20F
49
:2006000090E0B3010E948C068A94C9F7112329F0812F90E0B3010E948C0623FE03C00CE877
50
:2006200010E00EC000E910E00BC0E114F10409F0805290E0B3010E948C060F5F1F4F05C0AA
51
:20064000EF2CFF24F0E1EF22FF24F8018491882361F714C1F7FE12C0BC0C24FE04C08A81F1
52
:20066000813309F4BA941B141CF0BB24B3942DC0F8E0FB1550F538E0B32E27C0F6FC25C049
53
:20068000892D90E08C159D054CF02CEFC2162FEFD20624F030E8F32A01C09A94992049F0A2
54
:2006A000E2E0F0E0EC0FFD1FE90DF11D80818033A1F3F7FE0AC0B92CB394892D90E0C81656
55
:2006C000D90614F0992401C09C18F7FC03C025E030E009C01C141D041CF021E030E003C040
56
:2006E00096012F5F3F4F112311F02F5F3F4F992029F0892D90E00196280F391F882D90E0B3
57
:200700002817390714F0882401C0821A4F2C5524C20189709070892B39F008C080E290E026
58
:20072000B3010E948C068A948820C1F7112329F0812F90E0B3010E948C0643FE07C008C02E
59
:2007400080E390E0B3010E948C068A948820C1F7F7FE46C08601D7FE02C000E010E0760100
60
:200760000894E11CF11CE01AF10A41E050E04C0F5D1FE40EF51E26014B185108892D90E0A8
61
:20078000AA24BB24A81AB90A5FEF0F3F150729F48EE290E0B3010E948C06C016D10634F0B9
62
:2007A000401651061CF4F701808101C080E3015010400894E11CF11C0A151B052CF090E04D
63
:2007C000B3010E948C06E0CF0C151D0539F49A81963318F4953311F424FE81E390E04BC054
64
:2007E0008A81813309F00F7E90E0B3010E948C069920A1F08EE290E0B3010E948C0612E058
65
:20080000E1E0F0E0EC0FFD1FE10FF11D1F5F808190E0B3010E948C069A9491F744FC03C0A2
66
:2008200085E690E002C085E490E0B3010E948C06D7FC05C0C114D10441F404FF06C0D094B6
67
:20084000C194D108D3948DE201C08BE290E0B3010E948C0680E305C08F5F26EF3FEFC20EE5
68
:20086000D31E3AE0C316D104BCF790E0B3010E948C06C601C096B3010E948C06CC84DD84FE
69
:2008800052C1933631F0933799F0933509F059C023C0F601808189835E010894A11CB11CC2
70
:2008A00022E030E0C20ED31E21E0E22EF12C12C0F601A080B18016FD03C06FEF7FEF02C0B9
71
:2008C000692D70E022E030E0C20ED31EC5010E9481067C011F7713C0F601A080B18016FD2F
72
:2008E00003C06FEF7FEF02C0692D70E022E030E0C20ED31EC5010E9476067C01106813FF03
73
:2009000007C01BC080E290E0B3010E948C068A94882D90E0E816F906A8F30FC0F50117FDC7
74
:20092000859117FF81915F0190E0B3010E948C0681108A940894E108F108E114F10471F742
75
:20094000F2C0943611F0993689F517FF08C0F601208131814281538184E090E00AC0F60179
76
:20096000808191819C01442737FD4095542F82E090E0C80ED91E9FE6F92EF12257FF09C053
77
:2009800050954095309521953F4F4F4F5F4F90E8F92ACA01B901AE014F5F5F4F2AE030E003
78
:2009A0000E94B806E82EE889EE1A41C0953721F41F7E2AE030E01CC0197F9F3661F090374E
79
:2009C00020F4983509F0B2C00FC0903739F0983709F0ACC004C028E030E00AC0106114FDB0
80
:2009E000146020E130E004C014FD166020E132E017FF08C0F601608171818281938144E031
81
:200A000050E008C0F60180819181BC0180E090E042E050E0C40ED51EAE014F5F5F4F0E9483
82
:200A2000B806E82E5889E51A8FE7F82EF122F6FE0BC08EEFF822E91438F4F4FE07C0F2FC2D
83
:200A400005C09FEEF92202C01E2D01C0192DF4FE0DC0FE01EE0DF11D8081803319F4E9EEB6
84
:200A6000FE2208C01F5FF2FE05C003C08F2D867809F01F5F0F2DF3FC14C0F0FE0FC018157E
85
:200A800010F09E2C0BC09E2C980C911A182D06C080E290E0B3010E948C061F5F1815C0F385
86
:200AA00004C0181510F4811A01C0882404FF0FC080E390E0B3010E948C0602FF1DC001FDD0
87
:200AC00003C088E790E00EC088E590E00BC0802F867891F001FF02C08BE201C080E2F7FC8B
88
:200AE0008DE290E0B3010E948C0606C080E390E0B3010E948C069A94E914C0F3EA94E1E091
89
:200B0000F0E0EC0FFD1FEE0DF11D808190E0B3010E948C06EE2091F706C080E290E0B301AA
90
:200B20000E948C068A948820C1F797CCF30166817781CB016196E2E10C944D07283008F003
91
:200B400027E03327DA01990F311D87FD916000966105710539F432602E5F3D9330E32A958E
92
:200B6000E1F708959F3F30F080387105610509F03C5F3C5F3D93913008F08068911DDF93AE
93
:200B8000CF931F930F93FF92EF92192F987F9695E92F96959695E90FFF27E251FF4F992736
94
:200BA0003327EE24FF24A701E70105900894079428F4360FE71EF81E491F511D660F771FED
95
:200BC000881F991F0694A1F70590079428F4E70EF81E491F561FC11D770F881F991F661F08
96
:200BE0000694A1F70590079428F4F80E491F561FC71FD11D880F991F661F771F0694A1F724
97
:200C00000590079420F4490F561FC71FD81F990F661F771F881F0694A9F784911095177001
98
:200C200041F0D695C79557954795F794E7941A95C1F7E4E9F0E068941590159135916591E7
99
:200C4000959105907FE27395E118F10A430B560BC90BD009C0F7E10CF11E431F561FC91FAE
100
:200C6000D01D7EF4703311F48A95E6CFE894015030F0080F0AF40027021708F4202F239554
101
:200C8000022F7A3328F079E37D932A95E9F710C07D932A9589F606949795679537951795FB
102
:200CA0001794E118F10A430B560BC90BD00998F023957E9173957A3308F070E37C932013A8
103
:200CC000B8F77E9170617D9330F0839571E37D9370E32A95E1F71124EF90FF900F911F915C
104
:200CE000CF91DF91992787FD90950895FC010590615070400110D8F7809590958E0F9F1FB6
105
:200D00000895FC016150704001900110D8F7809590958E0F9F1F08950F931F93CF93DF930D
106
:200D20008C01EB018B8181FF1BC082FF0DC02E813F818C819D812817390764F4E881F98131
107
:200D40000193F983E88306C0E885F985802F0995892B31F48E819F8101969F838E8302C086
108
:200D60000FEF1FEFC801DF91CF911F910F910895FA01AA27283051F1203181F1E8946F933A
109
:200D80006E7F6E5F7F4F8F4F9F4FAF4FB1E03ED0B4E03CD0670F781F891F9A1FA11D680F1F
110
:200DA000791F8A1F911DA11D6A0F711D811D911DA11D20D009F468943F912AE0269F1124B8
111
:200DC0003019305D3193DEF6CF010895462F4770405D4193B3E00FD0C9F7F6CF462F4F7070
112
:200DE000405D4A3318F0495D31FD4052419302D0A9F7EACFB4E0A69597958795779567954D
113
:200E0000BA95C9F700976105710508959B01AC010A2E06945795479537952795BA95C9F739
114
:200E2000620F731F841F951FA01D089597FB092E05260ED057FD04D04BD00AD0001C38F4C7
115
:200E400050954095309521953F4F4F4F5F4F0895F6F790958095709561957F4F8F4F9F4F2A
116
:200E600008952F923F924F925F926F927F928F929F92AF92BF92CF92DF92EF92FF920F93F5
117
:200E80001F93CF93DF93CDB7DEB7CA1BDB0B0FB6F894DEBF0FBECDBF09942A8839884888C1
118
:200EA0005F846E847D848C849B84AA84B984C884DF80EE80FD800C811B81AA81B981CE0FC1
119
:200EC000D11D0FB6F894DEBF0FBECDBFED010895A1E21A2EAA1BBB1BFD010DC0AA1FBB1F7E
120
:200EE000EE1FFF1FA217B307E407F50720F0A21BB30BE40BF50B661F771F881F991F1A94CB
121
:200F000069F760957095809590959B01AC01BD01CF010895F894FFCF4F4B0D002B2B2B0047
122
:200F20004154434830430D0041544944313230310D0041544448300D004154444C464646C9
123
:200F4000460D00415441430D004154434E0D00802500FFFFFFFFFFFFFFFFFFFFFFFFFFFF4E
124
:200F6000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF91
125
:200F8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF71
126
:200FA000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF51
127
:200FC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31
128
:200FE000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11
129
:2010000024FE04C08A81813309F4BA941B141CF0BB24B3942DC0F8E0FB1550F538E0B32E6C
130
:2010200027C0F6FC25C0892D90E08C159D054CF02CEFC2162FEFD20624F030E8F32A01C05A
131
:201040009A94992049F0E2E0F0E0EC0FFD1FE90DF11D80818033A1F3F7FE0AC0B92CB39490
132
:20106000892D90E0C816D90614F0992401C09C18F7FC03C025E030E009C01C141D041CF066
133
:2010800021E030E003C096012F5F3F4F112311F02F5F3F4F992029F0892D90E00196280FB2
134
:2010A000391F882D90E02817390714F0882401C0821A4F2C5524C20189709070892B39F09A
135
:2010C00008C080E290E0B3010E94680B8A948820C1F7112329F0812F90E0B3010E94680BF9
136
:2010E00043FE07C008C080E390E0B3010E94680B8A948820C1F7F7FE46C08601D7FE02C0ED
137
:2011000000E010E076010894E11CF11CE01AF10A41E050E04C0F5D1FE40EF51E26014B1836
138
:201120005108892D90E0AA24BB24A81AB90A5FEF0F3F150729F48EE290E0B3010E94680B80
139
:20114000C016D10634F0401651061CF4F701808101C080E3015010400894E11CF11C0A157E
140
:201160001B052CF090E0B3010E94680BE0CF0C151D0539F49A81963318F4953311F424FEFC
141
:2011800081E390E04BC08A81813309F00F7E90E0B3010E94680B9920A1F08EE290E0B30114
142
:2011A0000E94680B12E0E1E0F0E0EC0FFD1FE10FF11D1F5F808190E0B3010E94680B9A949C
143
:2011C00091F744FC03C085E690E002C085E490E0B3010E94680BD7FC05C0C114D10441F4CE
144
:2011E00004FF06C0D094C194D108D3948DE201C08BE290E0B3010E94680B80E305C08F5F41
145
:2012000026EF3FEFC20ED31E3AE0C316D104BCF790E0B3010E94680BC601C096B3010E94A3
146
:20122000680BCC84DD8452C1933631F0933799F0933509F059C023C0F601808189835E011A
147
:201240000894A11CB11C22E030E0C20ED31E21E0E22EF12C12C0F601A080B18016FD03C077
148
:201260006FEF7FEF02C0692D70E022E030E0C20ED31EC5010E945D0B7C011F7713C0F6017A
149
:20128000A080B18016FD03C06FEF7FEF02C0692D70E022E030E0C20ED31EC5010E94520B1B
150
:2012A0007C01106813FF07C01BC080E290E0B3010E94680B8A94882D90E0E816F906A8F30F
151
:2012C0000FC0F50117FD859117FF81915F0190E0B3010E94680B81108A940894E108F10831
152
:2012E000E114F10471F7F2C0943611F0993689F517FF08C0F601208131814281538184E0AF
153
:2013000090E00AC0F601808191819C01442737FD4095542F82E090E0C80ED91E9FE6F92EAA
154
:20132000F12257FF09C050954095309521953F4F4F4F5F4F90E8F92ACA01B901AE014F5FEF
155
:201340005F4F2AE030E00E94940BE82EE889EE1A41C0953721F41F7E2AE030E01CC0197FE8
156
:201360009F3661F0903720F4983509F0B2C00FC0903739F0983709F0ACC004C028E030E065
157
:201380000AC0106114FD146020E130E004C014FD166020E132E017FF08C0F6016081718176
158
:2013A0008281938144E050E008C0F60180819181BC0180E090E042E050E0C40ED51EAE019D
159
:2013C0004F5F5F4F0E94940BE82E5889E51A8FE7F82EF122F6FE0BC08EEFF822E91438F44C
160
:2013E000F4FE07C0F2FC05C09FEEF92202C01E2D01C0192DF4FE0DC0FE01EE0DF11D8081FD
161
:20140000803319F4E9EEFE2208C01F5FF2FE05C003C08F2D867809F01F5F0F2DF3FC14C027
162
:20142000F0FE0FC0181510F09E2C0BC09E2C980C911A182D06C080E290E0B3010E94680B6E
163
:201440001F5F1815C0F304C0181510F4811A01C0882404FF0FC080E390E0B3010E94680BC3
164
:2014600002FF1DC001FD03C088E790E00EC088E590E00BC0802F867891F001FF02C08BE21B
165
:2014800001C080E2F7FC8DE290E0B3010E94680B06C080E390E0B3010E94680B9A94E91401
166
:2014A000C0F3EA94E1E0F0E0EC0FFD1FEE0DF11D808190E0B3010E94680BEE2091F706C0B4
167
:2014C00080E290E0B3010E94680B8A948820C1F797CCF30166817781CB016196E2E10C9497
168
:2014E0003C0C283008F027E03327DA01990F311D87FD916000966105710539F432602E5FEF
169
:201500003D9330E32A95E1F708959F3F30F080387105610509F03C5F3C5F3D93913008F06A
170
:201520008068911DDF93CF931F930F93FF92EF92192F987F9695E92F96959695E90FFF27C5
171
:20154000E251FF4F99273327EE24FF24A701E70105900894079428F4360FE71EF81E491F7B
172
:20156000511D660F771F881F991F0694A1F70590079428F4E70EF81E491F561FC11D770FC9
173
:20158000881F991F661F0694A1F70590079428F4F80E491F561FC71FD11D880F991F661F5E
174
:2015A000771F0694A1F70590079420F4490F561FC71FD81F990F661F771F881F0694A9F7D1
175
:2015C00084911095177041F0D695C79557954795F794E7941A95C1F7E4E9F0E0689415905F
176
:2015E000159135916591959105907FE27395E118F10A430B560BC90BD009C0F7E10CF11E62
177
:20160000431F561FC91FD01D7EF4703311F48A95E6CFE894015030F0080F0AF400270217EE
178
:2016200008F4202F2395022F7A3328F079E37D932A95E9F710C07D932A9589F606949795C2
179
:201640006795379517951794E118F10A430B560BC90BD00998F023957E9173957A3308F01F
180
:2016600070E37C932013B8F77E9170617D9330F0839571E37D9370E32A95E1F71124EF90FC
181
:20168000FF900F911F91CF91DF91992787FD90950895FB01DC0102C005900D9241505040A5
182
:2016A000D8F70895FC010590615070400110D8F7809590958E0F9F1F0895FC01615070405B
183
:2016C00001900110D8F7809590958E0F9F1F08950F931F93CF93DF938C01EB018B8181FF3A
184
:2016E0001BC082FF0DC02E813F818C819D812817390764F4E881F9810193F983E88306C02C
185
:20170000E885F985802F0995892B31F48E819F8101969F838E8302C00FEF1FEFC801DF91B8
186
:20172000CF911F910F910895FA01AA27283051F1203181F1E8946F936E7F6E5F7F4F8F4F4F
187
:201740009F4FAF4FB1E03ED0B4E03CD0670F781F891F9A1FA11D680F791F8A1F911DA11D0E
188
:201760006A0F711D811D911DA11D20D009F468943F912AE0269F11243019305D3193DEF62D
189
:20178000CF010895462F4770405D4193B3E00FD0C9F7F6CF462F4F70405D4A3318F0495D4C
190
:2017A00031FD4052419302D0A9F7EACFB4E0A6959795879577956795BA95C9F7009761053F
191
:2017C000710508959B01AC010A2E06945795479537952795BA95C9F7620F731F841F951F22
192
:2017E000A01D089597FB092E07260AD077FD04D05ED006D000201AF4709561957F4F0895DF
193
:20180000F6F7909581959F4F089597FB092E05260ED057FD04D05FD00AD0001C38F45095E5
194
:201820004095309521953F4F4F4F5F4F0895F6F790958095709561957F4F8F4F9F4F089588
195
:201840002F923F924F925F926F927F928F929F92AF92BF92CF92DF92EF92FF920F931F93F6
196
:20186000CF93DF93CDB7DEB7CA1BDB0B0FB6F894DEBF0FBECDBF09942A88398848885F84A6
197
:201880006E847D848C849B84AA84B984C884DF80EE80FD800C811B81AA81B981CE0FD11DCC
198
:2018A0000FB6F894DEBF0FBECDBFED010895AA1BBB1B51E107C0AA1FBB1FA617B70710F0A4
199
:2018C000A61BB70B881F991F5A95A9F780959095BC01CD010895A1E21A2EAA1BBB1BFD01D1
200
:2018E0000DC0AA1FBB1FEE1FFF1FA217B307E407F50720F0A21BB30BE40BF50B661F771F5E
201
:20190000881F991F1A9469F760957095809590959B01AC01BD01CF010895F894FFCF4F4BBE
202
:201920000D002B2B2B004154434830430D0041544944313230310D0041544448300D0041E7
203
:2019400054444C464646460D00415441430D004154434E0D008025303132333435363738AC
204
:2019600039414243444546003030303030304348004944002B2B2B004F4B0D004154415013
205
:2019800020310D004154434E0D004D5900FFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFF22
206
:2019A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47
207
:2019C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27
208
:2019E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07
209
:201A0000808182608083EAE9F0E0808188618083EDE9F0E080818660808308955D9BFECF5E
210
:201A20008CB980E090E00895982F80919B0085FFFCCF90939C0080E090E00895FC0104C045
211
:201A40005D9BFECF8CB9319680818823C9F780E090E008955F9BFECF8CB190E008958091BA
212
:201A60009B0087FFFCCF80919C0090E00895FC015F9903C02FEF3FEF04C08CB1808320E0B8
213
:201A800030E0C9010895FC0180919B0087FD03C02FEF3FEF05C080919C00808320E030E00E
214
:201AA000C90108950F931F93DF93CF9300D000D000D0CDB7DEB79C01DE011196EAE4F4E049
215
:201AC00086E001900D928150E1F737FF07C05D9BFECF8DE28CB9309521953F4F46E08E0193
216
:201AE0000F5F1F4F4150F801E40FF11DC9016AE070E00E942217805D8083C9016AE070E0FC
217
:201B00000E9422179B016115710561F709C0FC01E40FF11DE0815D9BFECFECB94F5F02C008
218
:201B2000CE010196463098F380E090E026960FB6F894DEBF0FBECDBFCF91DF911F910F914B
219
:201B40000895803110F08FE30895E82FF0E0E75CFB4F808108959C01E32FE295EF70F0E0C1
220
:201B6000E75CFB4FE0815D9BFECFECB95D9BFECFE32FF0E0EF70F070E75CFB4F80818CB9D4
221
:201B80005D9BFECFF90184E0F695E7958A95E1F7F0E0EF70F070E75CFB4F80818CB95D9BCA
222
:201BA000FECFE22FF0E0EF70F070E75CFB4F80818CB90895E82FE295EF70F0E0E75CFB4FFE
223
:201BC000E0815D9BFECFECB95D9BFECFE82FF0E0EF70F070E75CFB4F80818CB90895EF92DE
224
:201BE000FF920F931F93DF93CF930F92CDB7DEB78C017E010894E11CF11C05C05D9BFECF36
225
:201C00008CB90F5F1F4FC701B80141E050E00E9463148981882391F70F90CF91DF911F915C
226
:201C20000F91FF90EF90089520E436E004C0F9013197F1F7019718161906CCF308951092EE
227
:201C4000890010928800EAE8F0E020812860208320812260208324E234EF30938700209377
228
:201C60008600EDE7F0E020812061208370938E0560938D059093510480935004089520912D
229
:201C80008B0530918C05C901089510928C0510928B0508951F920F920FB60F920BB60F92DF
230
:201CA00011242F933F934F935F936F937F938F939F93AF93BF93EF93FF9320918905309177
231
:201CC0008A05809150049091510428173907A1F480918B0590918C05019690938C058093D5
232
:201CE0008B05E0918D05F0918E05309709F0099510928A05109289058091890590918A052F
233
:201D0000019690938A0580938905FF91EF91BF91AF919F918F917F916F915F914F913F9139
234
:201D20002F910F900BBE0F900FBE0F901F901895AC01E1E7F6E0128211821082339686E0E1
235
:201D4000E239F807C1F717B887B1816687B916B886B18F6886B9809164008C61809364006F
236
:201D600080916500837E8093650021E030E03093920520939105452B31F0369A3093900507
237
:201D800020938F0508951092900510928F050895009719F420E030E00BC00197FC01EE0F44
238
:201DA000FF1FE80FF91FEF58F94F8081282F30E0C9010895009719F420E030E00AC0019782
239
:201DC000FC01EE0FFF1FE80FF91FEF58F94F21813281C9010895369A81E090E09093900538
240
:201DE00080938F0508951092900510928F0508959C013699FECF2730310524F4822F805A2C
241
:201E000087B914C087E687B9C901089720916500382F3470237E322B8370907043E0880FCC
242
:201E2000991F4A95E1F7382B30936500369A3699FECF85B190E008959C013699FECF273069
243
:201E4000310524F4822F805A87B914C087E687B9C901089720916500382F3470237E322B60
244
:201E60008370907073E0880F991F7A95E1F7382B30936500369A3699FECF24B185B130E0D4
245
:201E800066E0359527956A95E1F790E0880F991F880F991F282B392BC901089580918C06D0
246
:201EA00090E00895E5E6F0E02081382F3470237E322B83709070A3E0880F991FAA95E1F7F4
247
:201EC000382B308308951F920F920FB60F920BB60F9211242F933F934F935F936F937F9384
248
:201EE0008F939F93EF93FF9387B18823F9F024B145B180919105909192050197FC01EE0FF2
249
:201F0000FF1FE80FF91FEF58F94F30E066E0359527956A95E1F7842F90E0880F991F880F49
250
:201F2000991F282B392B32832183408360918F05709190056115710539F480919305909118
251
:201F40009405892B09F449C0709394056093930540919105509192054630510571F487E68A
252
:201F600087B980916500837E8093650088E090E090939205809391052DC04B30510541F404
253
:201F800081E090E0909392058093910581E60CC09A012F5F3F4F3093920520939105273029
254
:201FA000310524F4822F806687B914C087E687B9CA01079720916500382F3470237E322BF3
255
:201FC0008370907023E0880F991F2A95E1F7382B30936500672B09F0369AFF91EF919F91FF
256
:201FE0008F917F916F915F914F913F912F910F900BBE0F900FBE0F901F901895FC01EE0F88
257
:20200000FF1FEA56FA4F808191810895E6E9F5E020E030E08FEF90E06FEF7FEF4081518168
258
:202020004817590710F4CA01B9012F5F3F4F32962031310599F7883C910514F06FEF7FEF33
259
:20204000CB01089580919505882319F0813071F407C08AE290E060E070E00E94B11208956D
260
:202060008BE290E060E070E00E94B112089580919505882319F0813071F407C08AE290E0D9
261
:2020800061E070E00E94B11208958BE290E061E070E00E94B1120895EF92FF920F931F93D7
262
:2020A000CF93DF937C01809195058130E1F400E110E0C0E0D0E8BE016E217F2188E090E0AF
263
:2020C0000E94B11289E090E061E070E00E94B11289E090E060E070E00E94B112D695C79537
264
:2020E0000150104041F7DF91CF911F910F91FF90EF9008958093950580919505882321F028
265
:20210000813009F044C01DC08CE290E09093B7058093B6058BE290E09093B9058093B8051B
266
:202120008FE290E09093BB058093BA058EE290E09093BD058093BC051092BF051092BE05A5
267
:2021400008958AE290E060E070E00E94B1128DE290E09093B7058093B6058CE290E0909384
268
:20216000B9058093B8058FE290E09093BB058093BA058EE290E09093BD058093BC058FEF24
269
:202180009FEF0E944C101092BF051092BE050895CF92DF92EF92FF921F93CF93DF936C0174
270
:2021A0000E94F30E36E9E32E35E0F32EC0E0D0E0C0FE57C0EC2F80919505882321F4FE016C
271
:2021C000EE5AFB4FE0811E2FE3FF07C08091BC059091BD0561E070E006C08091BC05909117
272
:2021E000BD0560E070E00E94B11212FF07C08091BA059091BB0561E070E006C08091BA0578
273
:202200009091BB0560E070E00E94B11211FF07C08091B8059091B90561E070E006C08091FC
274
:20222000B8059091B90560E070E00E94B11210FF07C08091B6059091B70561E070E006C037
275
:202240008091B6059091B70560E070E00E94B1128091BE059091BF050E94F80EF701918373
276
:202260008083219682E090E0E80EF91EC031D10519F0D594C7949CCF0E94EB0EDF91CF915B
277
:202280001F91FF90EF90DF90CF9008958FEF9FEF0E94C810E6E9F5E020E030E08FEF90E0ED
278
:2022A0006FEF7FEF408151814817590710F4CA01B9012F5F3F4F32962031310599F7883CB8
279
:2022C000910514F06FEF7FEFCB01089508959CE195BDBF9A83BD08959C0140E050E064E25A
280
:2022E00074EF80E090E00E9435172150304037FF02C020E030E08CE185BDBF9A2F3F310528
281
:2023000019F014F02FEF30E023BD089585B5887F85BDC69808950F931F938C01CB010E9438
282
:202320006C11C8010E94140E85B5887F85BDC6981F910F910895AC01477050709C0183E0A1
283
:20234000359527958A95E1F72430310509F444C02530310554F42230310511F1233031058F
284
:202360006CF52130310561F40EC02630310509F44FC026303105F4F12730310509F461C09E
285
:202380002FEF3FEF77C08AB3042E02C0220F331F0A94E2F7922F909598239ABB89B361C03C
286
:2023A00087B321E030E0042E02C0220F331F0A94E2F72095282327BB86B353C084B321E07E
287
:2023C00030E0042E02C0220F331F0A94E2F72095282324BB83B345C081B321E030E0042E6E
288
:2023E00002C0220F331F0A94E2F72095282321BB80B337C082B121E030E0042E02C0220FB2
289
:20240000331F0A94E2F72095282322B981B129C04430510534F084B7806884BF84B7806886
290
:2024200084BF8091610021E030E0042E02C0220F331F0A94E2F7209528232093610080B1A3
291
:2024400010C08091640021E030E0042E02C0220F331F0A94E2F72095282320936400809110
292
:202460006300282F30E002C0359527954A95E2F721703070C9010895AC01477050709C0139
293
:2024800093E0359527959A95E1F724303105C9F1253031055CF422303105E9F02330310533
294
:2024A0002CF52130310509F05BC00CC02630310509F43DC0263031057CF12730310509F08F
295
:2024C0004FC042C08BB302C0220F331F4A95E2F7822B8BBB089528B381E090E002C0880F1B
296
:2024E000991F4A95E2F7282B28BB089525B381E090E002C0880F991F4A95E2F7282B25BBF4
297
:20250000089522B381E090E002C0880F991F4A95E2F7282B22BB089523B181E090E002C07B
298
:20252000880F991F4A95E2F7282B23B908952091620081E090E002C0880F991F4A95E2F71B
299
:20254000282B2093620008952091650081E090E002C0880F991F4A95E2F7282B209365005B
300
:202560000895AC01477050709C0153E0359527955A95E1F7672B09F088C02430310509F423
301
:2025800044C0253031055CF42230310511F1233031056CF52130310509F0FEC00DC0263087
302
:2025A000310509F44EC0263031050CF43CC02730310509F0F1C056C08AB302C0220F331F83
303
:2025C0004A95E2F7822B8ABB8BB3209528232BBB089587B321E030E002C0220F331F4A9521
304
:2025E000E2F7822B87BB88B32095282386C084B321E030E002C0220F331F4A95E2F7822BA0
305
:2026000084BB85B32095282386C081B321E030E002C0220F331F4A95E2F7822B81BB82B39D
306
:202620002095282386C082B121E030E002C0220F331F4A95E2F7822B82B983B120952823F7
307
:2026400086C08091610021E030E002C0220F331F4A95E2F7822B809361008091620020956B
308
:20266000282386C08091640021E030E002C0220F331F4A95E2F7822B8093640080916500AC
309
:20268000209528232093650008952430310509F444C0253031055CF42230310511F1233042
310
:2026A00031056CF52130310509F076C00DC02630310509F44EC0263031050CF43CC027308A
311
:2026C000310509F069C057C08AB302C0220F331F4A95E2F7922F822B8ABB8BB3982B9BBB47
312
:2026E000089587B321E030E002C0220F331F4A95E2F7822B87BB88B3282B28BB089584B3C1
313
:2027000021E030E002C0220F331F4A95E2F7822B84BB85B3282B25BB089581B321E030E072
314
:2027200002C0220F331F4A95E2F7822B81BB82B3282B22BB089582B121E030E002C0220F7A
315
:20274000331F4A95E2F7822B82B983B1282B23B908958091610021E030E002C0220F331FBF
316
:202760004A95E2F7822B8093610080916200282B2093620008958091640021E030E002C0C0
317
:20278000220F331F4A95E2F7822B8093640080916500282B209365000895E4E6F0E08081C1
318
:2027A0008E7F8083E5E6F0E08081816080832091630030E02095309521703070C901089553
319
:2027C000809164008E7F80936400809165008160809365008091630080FF03C020E030E06B
320
:2027E00010C0809164008E7F80936400809165008160809365008091630080FFF2CF21E08C
321
:2028000030E0C9010895E4E6F0E080818D7F8083E5E6F0E08081826080832091630030E0F2
322
:20282000369527952095309521703070C9010895809164008D7F80936400809165008260AF
323
:20284000809365008091630081FF03C020E030E010C0809164008D7F8093640080916500FB
324
:202860008260809365008091630081FFF2CF21E030E0C901089504C08FE090E00E94140E6A
325
:20288000809164008D7F80936400809165008260809365008091630081FDEECF089504C060
326
:2028A0008FE090E00E94140E809164008E7F80936400809165008160809365008091630039
327
:2028C00080FDEECF0895FB01DC0102C005900D9241505040D8F70895A0E0B0E0E2E7F4E117
328
:2028E0000C949617FE013596619171918091940690919506AF010E94A5142096E2E00C9443
329
:20290000B217AEE0B0E0E7E8F4E10C9494170D891E8986E08C831A8309838FEF9FE79E83E1
330
:202920008D839E01275E3F4FCE0101966F89788DA9010E94A5142F813885020F131FF801C4
331
:2029400010822E96E4E00C94B017ABE0B0E0EBEAF4E10C9486173C012B015A01FC0117829A
332
:202960001682838181FD03C06FEF7FEFC6C19AE0892E1E010894211C311CF3012381F20126
333
:2029800023FD859123FF81912F01882309F4B2C1853239F423FD859123FF81912F0185324D
334
:2029A00029F490E0B3010E949816E7CF982FFF24EE249924FFE1FF15D0F09B3269F09C326F
335
:2029C00028F4903259F0933291F40EC09D3249F0903369F441E024C052E0F52A84E0F82AB4
336
:2029E00028C098E0F92A25C0E0E1FE2A22C0F7FC29C0892F80538A3070F4F6FE05C0989C32
337
:202A0000902C1124980E15C0E89CE02C1124E80EF0E2FF2A0EC09E3229F4F6FC6BC140E497
338
:202A2000F42A07C09C3619F450E8F52A02C0983649F4F20123FD959123FF91912F01992345
339
:202A400009F0B8CF892F8554833018F08052833038F444E050E0A40EB51E5FE359830FC033
340
:202A6000933631F0933779F0933509F056C020C0F5018081898342E050E0A40EB51E610146
341
:202A800001E010E012C0F501C080D180F6FC03C06FEF7FEF02C0692D70E042E050E0A40EDF
342
:202AA000B51EC6010E948D168C015FE7F52214C0F501C080D180F6FC03C06FEF7FEF02C0AF
343
:202AC000692D70E042E050E0A40EB51EC6010E9482168C0150E8F52AF3FE07C01AC080E260
344
:202AE00090E0B3010E949816EA948E2D90E008171907A8F30EC0F601F7FC8591F7FE81910A
345
:202B00006F0190E0B3010E949816E110EA94015010400115110579F7EAC0943611F09936E1
346
:202B200069F5F7FE08C0F501208131814281538184E090E00AC0F501808191819C014427EB
347
:202B400037FD4095542F82E090E0A80EB91E9FE6F92257FF09C050954095309521953F4F08
348
:202B60004F4F5F4FE0E8FE2ACA01B901A1012AE030E00E94C416D82ED21840C0953729F483
349
:202B80001F2D1F7E2AE030E01DC01F2D197F9F3661F0903720F4983509F0ACC00FC09037A8
350
:202BA00039F0983709F0A6C004C028E030E00AC0106114FD146020E130E004C014FD1660C6
351
:202BC00020E132E017FF08C0F501608171818281938144E050E008C0F50180819181BC0142
352
:202BE00080E090E042E050E0A40EB51EA1010E94C416D82ED2188FE7F82EF122F6FE0BC0B2
353
:202C00005EEFF522D91438F4F4FE07C0F2FC05C08FEEF82202C01D2D01C0192DF4FE0DC062
354
:202C2000FE01ED0DF11D8081803319F499EEF92208C01F5FF2FE05C003C08F2D867809F0B9
355
:202C40001F5F0F2DF3FC14C0F0FE0FC01E1510F09D2C0BC09D2C9E0C911A1E2D06C080E2E2
356
:202C600090E0B3010E9498161F5F1E15C0F304C01E1510F4E11A01C0EE2404FF0FC080E37E
357
:202C800090E0B3010E94981602FF1DC001FD03C088E790E00EC088E590E00BC0802F86781F
358
:202CA00091F001FF02C08BE201C080E2F7FC8DE290E0B3010E94981606C080E390E0B3011E
359
:202CC0000E9498169A94D914C0F3DA94F101ED0DF11D808190E0B3010E949816DD20A9F75C
360
:202CE00006C080E290E0B3010E949816EA94EE20C1F743CEF30166817781CB012B96E2E1C0
361
:202D00000C94A217FC010590615070400110D8F7809590958E0F9F1F0895FC0161507040F7
362
:202D200001900110D8F7809590958E0F9F1F08950F931F93CF93DF938C01EB018B8181FFC3
363
:202D40001BC082FF0DC02E813F818C819D812817390764F4E881F9810193F983E88306C0B5
364
:202D6000E885F985802F0995892B31F48E819F8101969F838E8302C00FEF1FEFC801DF9142
365
:202D8000CF911F910F910895FA01AA27283051F1203181F1E8946F936E7F6E5F7F4F8F4FD9
366
:202DA0009F4FAF4FB1E03ED0B4E03CD0670F781F891F9A1FA11D680F791F8A1F911DA11D98
367
:202DC0006A0F711D811D911DA11D20D009F468943F912AE0269F11243019305D3193DEF6B7
368
:202DE000CF010895462F4770405D4193B3E00FD0C9F7F6CF462F4F70405D4A3318F0495DD6
369
:202E000031FD4052419302D0A9F7EACFB4E0A6959795879577956795BA95C9F700976105C8
370
:202E2000710508959B01AC010A2E06945795479537952795BA95C9F7620F731F841F951FAB
371
:202E4000A01D089597FB092E07260AD077FD04D027D006D000201AF4709561957F4F08959F
372
:202E6000F6F7909581959F4F089597FB092E05260ED057FD04D028D00AD0001C38F45095A6
373
:202E80004095309521953F4F4F4F5F4F0895F6F790958095709561957F4F8F4F9F4F089512
374
:202EA000AA1BBB1B51E107C0AA1FBB1FA617B70710F0A61BB70B881F991F5A95A9F78095DA
375
:202EC0009095BC01CD010895A1E21A2EAA1BBB1BFD010DC0AA1FBB1FEE1FFF1FA217B30733
376
:202EE000E407F50720F0A21BB30BE40BF50B661F771F881F991F1A9469F7609570958095DA
377
:202F000090959B01AC01BD01CF0108952F923F924F925F926F927F928F929F92AF92BF92BE
378
:202F2000CF92DF92EF92FF920F931F93CF93DF93CDB7DEB7CA1BDB0B0FB6F894DEBF0FBEE6
379
:202F4000CDBF09942A88398848885F846E847D848C849B84AA84B984C884DF80EE80FD80FF
380
:202F60000C811B81AA81B981CE0FD11D0FB6F894DEBF0FBECDBFED010895F894FFCF696EF5
381
:202F8000697469616C697A65640D0A0073656E7420000D0A0025643A2025642000000102DB
382
:202FA000030405060708090A0B0C0D0E0F0030782532580A002563256325640A004348000D
383
:202FC0004944002B2B2B004F4B0D004154415020310D004154434E0D004D5900FFFFFFFFE3
384
:202FE000303030303030000000000000005F00000007000700147F147F14242A7F2A1223DE
385
:203000001308646236495522500005030000001C2241000041221C0014083E081408083EBF
386
:20302000080800005030001010101010006060000020100804023E5149453E00427F400056
387
:2030400042615149462141454B311814127F1027454545393C4A4949300171090503364984
388
:20306000494936064949291E00363600000056360000081422410014141414140041221457
389
:20308000080201510906324959513E7E1111117E7F494949363E414141227F4141221C7FC2
390
:2030A000494949417F090909013E4149497A7F0808087F00417F41002040413F017F08143B
391
:2030C00022417F404040407F020C027F7F0408107F3E4141413E7F090909063E4151215EB8
392
:2030E0007F09192946464949493101017F01013F4040403F1F2040201F3F4038403F631442
393
:2031000008146307087008076151494543007F41410002040810200041417F0004020102D6
394
:20312000044040404040000102040020545454787F484444383844444420384444487F3846
395
:2031400054545418087E0901020C5252523E7F0804047800447D40002040443D007F1028E9
396
:20316000440000417F40007C041804787C0804047838444444387C14141408081414187C33
397
:203180007C080404084854545420043F4440203C4040207C1C2040201C3C4030403C4428AC
398
:2031A0001028440C5050503C4464544C44000836414100007F0000414136080002010102CA
399
:2031C00001552A552A550102041020400140064D065A0620031703EF02CA02A9028B026F89
400
:2031E0000255023E02280213020002EE01DE01CE01BF01B201A50198018D01820177016DB0
401
:203200000164015B0152014A0142013B0133012D01260120011A0114010E0109010401FFD8
402
:2032200000FA00F500F100ED00E800E400E000DD00D900D500D200CF00CB00C800C500C2CF
403
:2032400000BF00BD00BA00B700B500B200B000AD00AB00A900A600A400A200A0009E009CA3
404
:20326000009A009800970095009300910090008E008C008B00890088008600850083008276
405
:203280000081007F007E007D007C007A007900780077007600750073007200710070006FB5
406
:2032A000006E006D006C006B006A00690069006800670066006500303132333435363738B2
407
:2032C000394142434445460030303030303020000706050E010403020F000D080C0B090A68
408
:2032E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE
409
:20330000F6FC03C06FEF7FEF02C0692D70E042E050E0A40EB51EC6010E94C71A8C015FE790
410
:20332000F52214C0F501C080D180F6FC03C06FEF7FEF02C0692D70E042E050E0A40EB51E1B
411
:20334000C6010E94BC1A8C0150E8F52AF3FE07C01AC080E290E0B3010E94D21AEA948E2D6B
412
:2033600090E008171907A8F30EC0F601F7FC8591F7FE81916F0190E0B3010E94D21AE1101B
413
:20338000EA94015010400115110579F7EAC0943611F0993669F5F7FE08C0F50120813181CA
414
:2033A0004281538184E090E00AC0F501808191819C01442737FD4095542F82E090E0A80EB3
415
:2033C000B91E9FE6F92257FF09C050954095309521953F4F4F4F5F4FE0E8FE2ACA01B901D3
416
:2033E000A1012AE030E00E94FE1AD82ED21840C0953729F41F2D1F7E2AE030E01DC01F2D52
417
:20340000197F9F3661F0903720F4983509F0ACC00FC0903739F0983709F0A6C004C028E028
418
:2034200030E00AC0106114FD146020E130E004C014FD166020E132E017FF08C0F501608198
419
:2034400071818281938144E050E008C0F50180819181BC0180E090E042E050E0A40EB51EDA
420
:20346000A1010E94FE1AD82ED2188FE7F82EF122F6FE0BC05EEFF522D91438F4F4FE07C05C
421
:20348000F2FC05C08FEEF82202C01D2D01C0192DF4FE0DC0FE01ED0DF11D8081803319F448
422
:2034A00099EEF92208C01F5FF2FE05C003C08F2D867809F01F5F0F2DF3FC14C0F0FE0FC0BF
423
:2034C0001E1510F09D2C0BC09D2C9E0C911A1E2D06C080E290E0B3010E94D21A1F5F1E1531
424
:2034E000C0F304C01E1510F4E11A01C0EE2404FF0FC080E390E0B3010E94D21A02FF1DC08B
425
:2035000001FD03C088E790E00EC088E590E00BC0802F867891F001FF02C08BE201C080E215
426
:20352000F7FC8DE290E0B3010E94D21A06C080E390E0B3010E94D21A9A94D914C0F3DA9460
427
:20354000F101ED0DF11D808190E0B3010E94D21ADD20A9F706C080E290E0B3010E94D21A47
428
:20356000EA94EE20C1F743CEF30166817781CB012B96E2E10C94FB1BFC010590615070402A
429
:203580000110D8F7809590958E0F9F1F0895FC016150704001900110D8F7809590958E0F73
430
:2035A0009F1F08950F931F93CF93DF938C01EB018B8181FF1BC082FF0DC02E813F818C81DE
431
:2035C0009D812817390764F4E881F9810193F983E88306C0E885F985802F0995892B31F4C1
432
:2035E0008E819F8101969F838E8302C00FEF1FEFC801DF91CF911F910F910895FA01AA27B2
433
:20360000283051F1203181F1E8946F936E7F6E5F7F4F8F4F9F4FAF4FB1E03ED0B4E03CD03E
434
:20362000670F781F891F9A1FA11D680F791F8A1F911DA11D6A0F711D811D911DA11D20D039
435
:2036400009F468943F912AE0269F11243019305D3193DEF6CF010895462F4770405D419325
436
:20366000B3E00FD0C9F7F6CF462F4F70405D4A3318F0495D31FD4052419302D0A9F7EACF98
437
:20368000B4E0A6959795879577956795BA95C9F700976105710508959B01AC010A2E0694D1
438
:2036A0005795479537952795BA95C9F7620F731F841F951FA01D089597FB092E07260AD027
439
:2036C00077FD04D027D006D000201AF4709561957F4F0895F6F7909581959F4F089597FBFC
440
:2036E000092E05260ED057FD04D028D00AD0001C38F450954095309521953F4F4F4F5F4F39
441
:203700000895F6F790958095709561957F4F8F4F9F4F0895AA1BBB1B51E107C0AA1FBB1F7C
442
:20372000A617B70710F0A61BB70B881F991F5A95A9F780959095BC01CD010895A1E21A2E70
443
:20374000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FA217B307E407F50720F0A21BB30BE40B61
444
:20376000F50B661F771F881F991F1A9469F760957095809590959B01AC01BD01CF01089519
445
:20378000629FD001739FF001829FE00DF11D649FE00DF11D929FF00D839FF00D749FF00DDD
446
:2037A000659FF00D9927729FB00DE11DF91F639FB00DE11DF91FBD01CF01112408952F926E
447
:2037C0003F924F925F926F927F928F929F92AF92BF92CF92DF92EF92FF920F931F93CF93B6
448
:2037E000DF93CDB7DEB7CA1BDB0B0FB6F894DEBF0FBECDBF09942A88398848885F846E8477
449
:203800007D848C849B84AA84B984C884DF80EE80FD800C811B81AA81B981CE0FD11D0FB659
450
:20382000F894DEBF0FBECDBFED010895F894FFCF447261676F6E666C7920696E69746961DD
451
:203840006C697A65642E0A00576972656C65737320696E697469616C697A65642E0A005785
452
:203860006972656C657373206368616E6E656C207365742E0A00546F6B656E2072696E67E3
453
:2038800020696E697469616C697A65642E0A00546F6B656E2072696E67206A6F696E6564D0
454
:2038A0002E0A0030782532580A002563256325640A00BC0AA70ACB0B0200B3054A02C303B3
455
:2038C0004902FFFFFFFFFFFFFFFFFFFF4348004944002B2B2B004F4B0D00415441502031F0
456
:2038E0000D004154434E0D004D5900FFFFFFFF0706050E010403020F000D080C0B090A303E
457
:203900003030303030000000000000005F00000007000700147F147F14242A7F2A122313D1
458
:2039200008646236495522500005030000001C2241000041221C0014083E081408083E08A1
459
:203940000800005030001010101010006060000020100804023E5149453E00427F400042F3
460
:20396000615149462141454B311814127F1027454545393C4A494930017109050336494954
461
:203980004936064949291E003636000000563600000814224100141414141400412214086F
462
:2039A0000201510906324959513E7E1111117E7F494949363E414141227F4141221C7F4958
463
:2039C0004949417F090909013E4149497A7F0808087F00417F41002040413F017F08142239
464
:2039E000417F404040407F020C027F7F0408107F3E4141413E7F090909063E4151215E7F32
465
:203A000009192946464949493101017F01013F4040403F1F2040201F3F4038403F6314088F
466
:203A2000146307087008076151494543007F41410002040810200041417F000402010204B1
467
:203A40004040404040000102040020545454787F484444383844444420384444487F3854CD
468
:203A6000545418087E0901020C5252523E7F0804047800447D40002040443D007F102844D0
469
:203A80000000417F40007C041804787C0804047838444444387C14141408081414187C7CD2
470
:203AA000080404084854545420043F4440203C4040207C1C2040201C3C4030403C442810EF
471
:203AC00028440C5050503C4464544C44000836414100007F000041413608000201010201B0
472
:203AE000552A552A5501020410204001B007BD07CA0720031703EF02CA02A9028B026F020C
473
:203B000055023E02280213020002EE01DE01CE01BF01B201A50198018D01820177016D0187
474
:203B200064015B0152014A0142013B0133012D01260120011A0114010E0109010401FF00B0
475
:203B4000FA00F500F100ED00E800E400E000DD00D900D500D200CF00CB00C800C500C200A6
476
:203B6000BF00BD00BA00B700B500B200B000AD00AB00A900A600A400A200A0009E009C007A
477
:203B80009A009800970095009300910090008E008C008B008900880086008500830082004D
478
:203BA00081007F007E007D007C007A007900780077007600750073007200710070006F008C
479
:203BC0006E006D006C006B006A006900690068006700660065003031323334353637383950
480
:203BE0004142434445460030303030303020000100000000FFFFFFFFFFFFFFFFFFFFFFFFFB
481
:203C0000309719F09383828304C09093710C8093700CFE0133C06817790738F441155105FD
482
:203C200019F08417950708F4AC01FE018A819B819C01E9012097E9F641155105A1F1CA014F
483
:203C4000861B970B049708F4BA01E0E0F0E029C08D919C91119784179507F1F46417750750
484
:203C600079F4ED018A819B81309719F09383828304C09093710C8093700CFD0132964CC012
485
:203C8000CA01861B970BFD01E80FF91F6193719302978D939C9340C0FD01828193819C0177
486
:203CA000D9011097A9F680916E0C90916F0C892B41F48091AC089091AD0890936F0C809388
487
:203CC0006E0C4091AE085091AF084115510541F44DB75EB78091AA089091AB08481B590BF3
488
:203CE00020916E0C30916F0CCA01821B930B8617970780F0AB014E5F5F4F8417950750F02E
489
:203D0000420F531F50936F0C40936E0CF9016193719302C0E0E0F0E0CF01DF91CF910895B4
490
:203D2000CF93DF93009709F44EC0EC0122971B821A82A091700CB091710C109701F140E00A
491
:203D400050E0AC17BD0700F1BB83AA83FE0121913191E20FF31FAE17BF0771F48D919C919F
492
:203D60001197280F391F2E5F3F4F39832883FD01828193819B838A834115510569F4D093DE
493
:203D8000710CC093700C1FC0FD0182819381AD01009711F0DC01D5CFFA01D383C2832191D4
494
:203DA0003191E20FF31FCE17DF0769F488819981280F391F2E5F3F4FFA01318320838A81EC
495
:203DC0009B8193838283DF91CF910895A0E0B0E0ECEEFEE10C94F723EC01A880B980CA8024
496
:203DE000DB80A114B104C104D10441F484E2A82E89EDB82E8BE5C82E87E0D82EC601B50147
497
:203E00002DE133EF41E050E00E947F2327EA31E440E050E00E94D0237B018C01C601B5014C
498
:203E20002DE133EF41E050E00E947F23CA01B9012CEE34EF4FEF5FEF0E94D0236E0D7F1DC3
499
:203E4000801F911F97FF04C06150704080409048688379838A839B839B013F77C901CDB70E
500
:203E6000DEB7EAE00C9413240E94E61E089580EB98E00E94E61E0895A0E0B0E08093B008C8
501
:203E80009093B108A093B208B093B3080895FB01DC0102C005900D9241505040D8F7089562
502
:203EA000A0E0B0E0E6E5FFE10C94FF23FE013596619171918091740C9091750CAF010E9442
503
:203EC000651F2096E2E00C941B24ABE0B0E0EBE6FFE10C94EF233C012B015A01FC0117822F
504
:203EE0001682838181FD03C06FEF7FEFC6C19AE0892E1E010894211C311CF3012381F20191
505
:203F000023FD859123FF81912F01882309F4B2C1853239F423FD859123FF81912F018532B7
506
:203F200029F490E0B3010E945821E7CF982FFF24EE249924FFE1FF15D0F09B3269F09C320E
507
:203F400028F4903259F0933291F40EC09D3249F0903369F441E024C052E0F52A84E0F82A1E
508
:203F600028C098E0F92A25C0E0E1FE2A22C0F7FC29C0892F80538A3070F4F6FE05C0989C9C
509
:203F8000902C1124980E15C0E89CE02C1124E80EF0E2FF2A0EC09E3229F4F6FC6BC140E402
510
:203FA000F42A07C09C3619F450E8F52A02C0983649F4F20123FD959123FF91912F019923B0
511
:203FC00009F0B8CF892F8554833018F08052833038F444E050E0A40EB51E5FE359830FC09E
512
:203FE000933631F0933779F0933509F056C020C0F5018081898342E050E0A40EB51E6101B1
513
:2040000001E010E012C0F501C080D180F6FC03C06FEF7FEF02C0692D70E042E050E0A40E49
514
:20402000B51EC6010E944D218C015FE7F52214C0F501C080D180F6FC03C06FEF7FEF02C04E
515
:20404000692D70E042E050E0A40EB51EC6010E9442218C0150E8F52AF3FE07C01AC080E2FF
516
:2040600090E0B3010E945821EA948E2D90E008171907A8F30EC0F601F7FC8591F7FE8191A9
517
:204080006F0190E0B3010E945821E110EA94015010400115110579F7EAC0943611F0993681
518
:2040A00069F5F7FE08C0F501208131814281538184E090E00AC0F501808191819C01442756
519
:2040C00037FD4095542F82E090E0A80EB91E9FE6F92257FF09C050954095309521953F4F73
520
:2040E0004F4F5F4FE0E8FE2ACA01B901A1012AE030E00E948421D82ED21840C0953729F423
521
:204100001F2D1F7E2AE030E01DC01F2D197F9F3661F0903720F4983509F0ACC00FC0903712
522
:2041200039F0983709F0A6C004C028E030E00AC0106114FD146020E130E004C014FD166030
523
:2041400020E132E017FF08C0F501608171818281938144E050E008C0F50180819181BC01AC
524
:2041600080E090E042E050E0A40EB51EA1010E948421D82ED2188FE7F82EF122F6FE0BC051
525
:204180005EEFF522D91438F4F4FE07C0F2FC05C08FEEF82202C01D2D01C0192DF4FE0DC0CD
526
:2041A000FE01ED0DF11D8081803319F499EEF92208C01F5FF2FE05C003C08F2D867809F024
527
:2041C0001F5F0F2DF3FC14C0F0FE0FC01E1510F09D2C0BC09D2C9E0C911A1E2D06C080E24D
528
:2041E00090E0B3010E9458211F5F1E15C0F304C01E1510F4E11A01C0EE2404FF0FC080E31E
529
:2042000090E0B3010E94582102FF1DC001FD03C088E790E00EC088E590E00BC0802F8678BE
530
:2042200091F001FF02C08BE201C080E2F7FC8DE290E0B3010E94582106C080E390E0B301BD
531
:204240000E9458219A94D914C0F3DA94F101ED0DF11D808190E0B3010E945821DD20A9F730
532
:2042600006C080E290E0B3010E945821EA94EE20C1F743CEF30166817781CB012B96E2E15F
533
:204280000C940B24FC010590615070400110D8F7809590958E0F9F1F0895FC0161507040EC
534
:2042A00001900110D8F7809590958E0F9F1F08950F931F93CF93DF938C01EB018B8181FF2E
535
:2042C0001BC082FF0DC02E813F818C819D812817390764F4E881F9810193F983E88306C020
536
:2042E000E885F985802F0995892B31F48E819F8101969F838E8302C00FEF1FEFC801DF91AD
537
:20430000CF911F910F910895FA01AA27283051F1203181F1E8946F936E7F6E5F7F4F8F4F43
538
:204320009F4FAF4FB1E03ED0B4E03CD0670F781F891F9A1FA11D680F791F8A1F911DA11D02
539
:204340006A0F711D811D911DA11D20D009F468943F912AE0269F11243019305D3193DEF621
540
:20436000CF010895462F4770405D4193B3E00FD0C9F7F6CF462F4F70405D4A3318F0495D40
541
:2043800031FD4052419302D0A9F7EACFB4E0A6959795879577956795BA95C9F70097610533
542
:2043A000710508959B01AC010A2E06945795479537952795BA95C9F7620F731F841F951F16
543
:2043C000A01D08950CD0EBC0E3D040F0DAD030F021F45F3F19F0CCC0511115C1CFC0F0D080
544
:2043E00098F39923C9F35523B1F3951B550BBB27AA2762177307840738F09F5F5F4F220F58
545
:20440000331F441FAA1FA9F333D00E2E3AF0E0E830D091505040E695001CCAF729D0FE2F62
546
:2044200027D0660F771F881FBB1F261737074807AB07B0E809F0BB0B802DBF01FF279358A8
547
:204440005F4F2AF09E3F510568F092C0DCC05F3FECF3983EDCF3869577956795B795F795FE
548
:204460009F5FC9F7880F911D9695879597F90895E1E0660F771F881FBB1F621773078407FA
549
:20448000BA0720F0621B730B840BBA0BEE1F88F7E095089504D06894B111B5C0089598D052
550
:2044A00088F09F5790F0B92F9927B751A0F0D1F0660F771F881F991F1AF0BA95C9F712C0B8
551
:2044C000B13081F09FD0B1E008959CC0672F782F8827B85F39F0B93FCCF38695779567958B
552
:2044E000B395D9F73EF490958095709561957F4F8F4F9F4F0895E89409C097FB3EF49095D8
553
:204500008095709561957F4F8F4F9F4F9923A9F0F92F96E9BB279395F6958795779567953C
554
:20452000B795F111F8CFFAF4BB0F11F460FF1BC06F5F7F4F8F4F9F4F16C0882311F096E906
555
:2045400011C0772321F09EE8872F762F05C0662371F096E8862F70E060E02AF09A95660FCE
556
:20456000771F881FDAF7880F9695879597F9089597F99F6780E870E060E008959FEF80ECFD
557
:20458000089500240A941616170618060906089500240A9412161306140605060895092EAD
558
:2045A0000394000C11F4882352F0BB0F40F4BF2B11F460FF04C06F5F7F4F8F4F9F4F089551
559
:2045C00057FD9058440F551F59F05F3F71F04795880F97FB991F61F09F3F79F08795089582
560
:2045E000121613061406551FF2CF4695F1DF08C0161617061806991FF1CF869571056105E2
561
:2046000008940895E894BB2766277727CB0197F908950BD0C4CFB5DF28F0BADF18F095236C
562
:2046200009F0A6CFABCF1124EECFCADFA0F3959FD1F3950F50E0551F629FF001729FBB273F
563
:20464000F00DB11D639FAA27F00DB11DAA1F649F6627B00DA11D661F829F2227B00DA11DB3
564
:20466000621F739FB00DA11D621F839FA00D611D221F749F3327A00D611D231F849F600DB3
565
:20468000211D822F762F6A2F11249F5750408AF0E1F088234AF0EE0FFF1FBB1F661F771FF2
566
:2046A000881F91505040A9F79E3F510570F060CFAACF5F3FECF3983EDCF3869577956795C2
567
:2046C000B795F795E7959F5FC1F7FE2B880F911D9695879597F9089597FB092E07260AD01E
568
:2046E00077FD04D027D006D000201AF4709561957F4F0895F6F7909581959F4F089597FBCC
569
:20470000092E05260ED057FD04D028D00AD0001C38F450954095309521953F4F4F4F5F4F08
570
:204720000895F6F790958095709561957F4F8F4F9F4F0895AA1BBB1B51E107C0AA1FBB1F4C
571
:20474000A617B70710F0A61BB70B881F991F5A95A9F780959095BC01CD010895A1E21A2E40
572
:20476000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FA217B307E407F50720F0A21BB30BE40B31
573
:20478000F50B661F771F881F991F1A9469F760957095809590959B01AC01BD01CF010895E9
574
:2047A000629FD001739FF001829FE00DF11D649FE00DF11D929FF00D839FF00D749FF00DAD
575
:2047C000659FF00D9927729FB00DE11DF91F639FB00DE11DF91FBD01CF01112408952F923E
576
:2047E0003F924F925F926F927F928F929F92AF92BF92CF92DF92EF92FF920F931F93CF9386
577
:20480000DF93CDB7DEB7CA1BDB0B0FB6F894DEBF0FBECDBF09942A88398848885F846E8446
578
:204820007D848C849B84AA84B984C884DF80EE80FD800C811B81AA81B981CE0FD11D0FB629
579
:20484000F894DEBF0FBECDBFED010895F894FFCF757362207475726E6564206F6E0D0A00E1
580
:2048600072616E676566696E6465727320696E697469616C697A65640D0A000D0A0A000D45
581
:204880000A00706F727423207C0976616C75650D0A0009004572726F722072656164696EA7
582
:2048A0006720696E7469616C2076616C7565212072657475726E20636F64653A2000206439
583
:2048C0006174613A20000D0A0064617461207761733A20004572726F722077726974696E0B
584
:2048E000672064617461212072657475726E20636F64653A200077726F7465203132330DAD
585
:204900000A004572726F722072656164696E67207365636F6E642076616C75652120726598
586
:204920007475726E20636F64653A20006461746120777269746520616E642072652D726566
587
:20494000616420776F726B6564210D0A00646174612072652D726561642072657475726E94
588
:20496000656420302062757420646174612077617320004572726F722077726974696E6740
589
:20498000206461746120746865207365636F6E642074696D65212072657475726E20636FBE
590
:2049A00064653A200072652D77726F7465206F726967696E616C20646174613A2000456E63
591
:2049C000636F6465722076616C75657320286C6566742C207269676874293A20002C2000EE
592
:2049E0000A0D00757362207475726E6564206F6E0A006C6364207475726E6564206F6E0AB1
593
:204A0000006C63642073637265656E20636C65617265640A00746869732069732061207400
594
:204A20006573742C2061207265616C6C79206C6F6E67207465737400746869732069732050
595
:204A40006120746573742C2061207265616C6C79206C6F6E6720746573742E207468697309
596
:204A6000206973206120746573742C2061207265616C6C79206C6F6E67207465737400745F
597
:204A80006573742077726974696E6720737472696E6720746F206C63643A20277468697360
598
:204AA000206973206120746573742C2061207265616C6C79206C6F6E672074657374270A62
599
:204AC00000757362207475726E6564206F6E0A00757362207475726E6564206F6E0A00755B
600
:204AE0007362207475726E6564206F6E0D0A0072616E676566696E64657273207475726E3A
601
:204B00006564206F6E0D0A0009496E206D6D3D000D0A00757362207475726E6564206F6EB1
602
:204B20000D0A00776972656C657373207475726E6564206F6E0D0A00746F6B656E2072690E
603
:204B40006E67206A6F696E65640D0A000D0A6E756D626572206F6620726F626F74732069F9
604
:204B60006E20746F6B656E2072696E673A000D0A6E756D626572206F6620726F626F74732E
605
:204B800020696E206D61747269783A000D0A4E6F20424F4D207461626C6520617661696C08
606
:204BA00061626C652E000D0A424F4D207461626C653A20282A20696E646963617465732076
607
:204BC0007468697320726F626F7429000D0A73205C206400097C002A000D0A00307825325F
608
:204BE000580A002563256325640A007374617274696E6720776C5F696E697428290A00646F
609
:204C00006F6E652073657474696E67207061636B65742067726F7570730A00786265655FCF
610
:204C20006C69625F696E697428292072657475726E656420737563636573730A00CD0EB89A
611
:204C40000EDB0F02007008070580060605FFFFFFFFFFFFFFFFFFFF434800494400456E7410
612
:204C60006572696E6720636F6D6D616E64206D6F64652E0A002B2B2B004F4B0D00476574DB
613
:204C800074696E672041544D5920616464726573732E0A00476F742041544D5920616464FB
614
:204CA000726573732E0A00456E746572656420636F6D6D616E64206D6F64652E0A004154A7
615
:204CC000415020310D00456E746572656420617069206D6F64652E0A004154434E0D004C48
616
:204CE00065667420636F6D6D616E64206D6F64652E0A004D5900FFFFFFFF0706050E0104B2
617
:204D000003020F000D080C0B090A303030303030000000000000005F00000007000700149F
618
:204D20007F147F14242A7F2A12231308646236495522500005030000001C22410000412210
619
:204D40001C0014083E081408083E0808000050300010101010100060600000201008040295
620
:204D60003E5149453E00427F400042615149462141454B311814127F1027454545393C4AAF
621
:204D800049493001710905033649494936064949291E003636000000563600000814224131
622
:204DA00000141414141400412214080201510906324959513E7E1111117E7F494949363E4D
623
:204DC000414141227F4141221C7F494949417F090909013E4149497A7F0808087F00417F18
624
:204DE00041002040413F017F081422417F404040407F020C027F7F0408107F3E4141413EAD
625
:204E00007F090909063E4151215E7F09192946464949493101017F01013F4040403F1F2041
626
:204E200040201F3F4038403F631408146307087008076151494543007F4141000204081097
627
:204E4000200041417F0004020102044040404040000102040020545454787F48444438388A
628
:204E600044444420384444487F3854545418087E0901020C5252523E7F0804047800447DD9
629
:204E800040002040443D007F1028440000417F40007C041804787C080404783844444438A2
630
:204EA0007C14141408081414187C7C080404084854545420043F4440203C4040207C1C20FB
631
:204EC00040201C3C4030403C44281028440C5050503C4464544C44000836414100007F0043
632
:204EE0000041413608000201010201552A552A55010204102040013D0C4A0C570C200317E4
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff