-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathplanner.py
548 lines (428 loc) · 63.6 KB
/
planner.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
import numpy as np
import cv2
from AITools import MemoryHooker
import time
import pickle
import os
speed_x = 1
offset_x = 0
video_points = 3500
video_dist = 350
cp_file = "checkpoint.pkl"
cp_freq = 50 #save frequency
pid = 0x47E8
address = 0x09003FB8
fps = 60
## Flying: 270-430 (778-1240)
user_inputs = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
user_enable = [[738, 1225]]
data = "1300 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 3 52 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 13 3 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1424 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1424 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1424 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 37 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1664 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1664 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1664 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1824 -1825 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1824 -1825 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1824 -1825 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1888 -1889 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1888 -1889 5 0 0 0 0 0 0 0 0 0 0 0 0 0 -1888 -1889 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1952 -1953 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1952 -1953 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1952 -1953 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2032 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2032 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2032 47 4 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2096 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2096 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2096 0 47 4 0 0 0 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2160 0 0 47 4 0 0 0 0 0 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2224 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2224 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2224 0 0 0 47 4 0 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2288 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2288 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2288 0 0 0 0 47 4 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2352 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2352 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2352 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 18 0 0 0 0 0 0 0 0 0 0 24 -2436 -2436 -2436 34 19 0 0 0 0 0 0 0 0 0 0 36 -2452 -2452 -2452 31 33 0 0 0 0 0 0 0 0 0 0 -2448 -2452 -2452 -2452 -2452 -2453 0 0 0 0 0 0 0 0 0 0 -2448 -2484 -2484 -2484 31 -2453 0 0 0 0 0 0 0 0 0 0 -2448 -2484 -2484 -2484 -2484 -2453 62 0 0 0 0 0 0 0 0 0 36 -2516 -2516 -2516 31 33 -2502 41 0 0 0 0 0 0 0 0 -2512 -2516 -2516 -2516 -2516 -2517 62 -2519 0 0 0 0 0 0 0 0 -2512 -2548 -2548 -2548 31 -2517 -2534 0 0 0 0 0 0 0 0 0 -2512 -2548 -2548 -2548 -2548 -2517 0 0 0 0 0 0 0 0 0 0 36 -2580 -2580 -2580 31 20 0 0 0 0 0 0 0 0 0 0 -2576 -2580 -2580 -2580 -2580 33 0 0 0 0 0 0 0 0 0 0 -2576 -2612 -2612 -2612 31 -2597 0 0 0 0 0 0 0 0 0 0 -2576 -2612 -2612 -2612 -2612 -2597 62 0 0 0 0 0 0 0 0 0 36 -2644 -2644 -2644 31 -2597 -2630 41 0 0 0 0 0 0 0 0 -2640 -2644 -2644 -2644 -2644 33 62 -2647 0 0 0 0 0 0 0 0 -2640 -2676 -2676 -2676 31 -2661 -2662 0 0 0 0 0 0 0 0 0 -2640 -2676 -2676 -2676 -2676 -2661 0 0 0 0 0 0 0 0 0 0 25 -2708 -2708 -2708 31 -2661 0 0 0 0 0 0 0 0 0 0 25 -2708 -2708 -2708 -2708 20 0 0 0 0 0 0 0 0 0 0 26 -2740 -2740 -2740 35 21 0 0 0 0 0 0 0 0 0 0 24 22 22 22 19 0 0 0 0 0 0 0 0 0 0 0 36 40 -2771 30 20 0 0 0 0 0 0 0 0 0 0 0 -2768 -2769 -2771 -2771 20 0 0 0 0 0 0 0 0 0 0 0 -2768 -2769 -2803 30 20 0 41 62 0 0 0 0 0 0 0 0 -2768 -2769 -2803 -2803 20 0 -2806 -2807 0 0 0 0 0 0 0 0 36 40 -2835 30 20 0 41 62 0 0 0 0 0 0 0 0 -2832 -2833 -2835 -2835 20 0 -2838 -2839 0 0 0 0 0 0 0 0 -2832 -2833 -2867 30 20 0 0 0 0 0 0 0 0 0 0 0 -2832 -2833 -2867 -2867 20 0 0 0 0 0 0 0 0 0 0 0 25 23 23 23 21 0 0 0 0 0 0 0 0 0 0 0 24 -2916 -2916 -2916 34 19 0 0 0 0 0 0 0 0 0 0 25 -2932 -2932 -2932 31 20 0 0 0 0 0 0 0 0 0 0 25 -2932 -2932 -2932 -2932 20 0 0 0 0 0 0 0 0 0 0 25 -2964 -2964 -2964 29 20 0 0 0 0 0 0 0 0 0 0 26 -2980 -2980 -2980 35 21 5 0 0 0 0 0 0 0 0 0 24 22 22 19 5 0 0 0 0 0 0 0 0 0 0 0 36 -3010 30 20 0 0 0 0 0 0 0 0 0 0 0 0 -3008 -3010 -3010 20 0 0 0 0 0 0 0 0 0 0 0 0 -3008 -3042 30 20 0 0 0 0 0 0 0 0 0 0 0 0 -3008 -3042 -3042 20 0 0 0 0 0 0 0 0 0 0 0 0 26 23 23 21 0 0 0 0 0 0 0 0 0 0 0 0 58 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 -3088 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 -3088 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 -3088 0 0 18 0 0 0 0 0 0 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3152 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3152 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0 -3152 0 0 -3187 0 0 0 0 0 0 0 0 0 0 0 0 58 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0 -3216 0 0 -3219 5 0 0 0 0 0 0 0 0 0 0 0 -3216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3216 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 61 0 -3266 0 0 0 0 0 0 0 0 0 0 0 0 0 -3280 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 -3280 0 -3298 0 0 0 0 0 0 0 0 0 0 0 0 0 -3280 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 59 0 -3330 0 0 0 0 0 0 0 0 0 0 0 0 0 -3344 0 4 5 0 0 0 0 0 0 0 0 0 0 0 0 -3344 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3344 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 -3393 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3408 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3408 -3425 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3408 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3472 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3472 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3472 47 4 0 0 0 0 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3536 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3536 0 47 4 0 0 0 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3600 0 0 47 4 0 0 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3664 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3664 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3664 0 0 0 47 4 0 0 0 0 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3728 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3728 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3728 0 0 0 0 47 4 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -3792 0 0 16 52 0 0 0 0 0 0 0 0 0 0 0 -3792 0 0 37 0 0 0 0 0 0 0 0 0 0 0 0 -3792 0 0 -3827 0 0 0 4 5 0 0 0 0 0 0 0 58 0 0 -3827 0 0 0 0 0 0 0 0 0 0 0 0 -3856 0 0 -3827 0 0 0 0 0 0 0 0 0 0 0 0 -3856 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 -3856 0 0 18 0 0 0 0 0 0 0 0 0 0 0 0 24 22 22 19 0 0 0 24 -3931 -3931 -3931 34 -3935 -3935 -3935 34 36 -3938 64 33 0 0 0 36 -3947 -3947 -3947 65 -3951 -3951 -3951 65 -3936 -3938 -3938 -3939 0 0 0 -3943 -3947 -3947 -3947 -3947 -3951 -3951 -3951 -3951 -3936 -3938 -3938 -3939 0 0 0 -3943 -3947 -3947 -3947 -3947 -3951 -3951 -3951 -3951 -3936 -3938 -3938 -3939 0 0 0 -3943 -3947 -3947 -3947 -3947 -3951 -3951 -3951 -3951 36 -4002 64 33 0 0 0 26 -4011 -4011 -4011 35 -4015 -4015 -4015 35 -4000 -4002 -4002 -4003 0 0 24 -4026 -4026 -4026 34 -4030 -4030 -4030 34 0 -4000 -4002 -4002 -4003 0 0 36 -4042 -4042 -4042 65 -4046 -4046 -4046 65 0 -4000 -4002 -4002 -4003 0 0 -4038 -4042 -4042 -4042 -4042 -4046 -4046 -4046 -4046 0 36 -4066 64 33 0 0 -4038 -4042 -4042 -4042 -4042 -4046 -4046 -4046 -4046 0 -4064 -4066 -4066 -4067 0 0 -4038 -4042 -4042 -4042 -4042 -4046 -4046 -4046 -4046 0 -4064 -4066 -4066 -4067 0 0 36 -4106 -4106 -4106 65 -4110 -4110 -4110 65 0 -4064 -4066 -4066 -4067 0 0 -4102 -4106 -4106 -4106 -4106 -4110 -4110 -4110 -4110 0 36 -4130 64 33 0 0 -4102 -4106 -4106 -4106 -4106 -4110 -4110 -4110 -4110 0 -4128 -4130 -4130 -4131 0 0 -4102 -4106 -4106 -4106 -4106 -4110 -4110 -4110 -4110 0 -4128 -4130 -4130 -4131 0 0 26 -4170 -4170 -4170 35 -4174 -4174 -4174 35 0 -4128 -4130 -4130 -4131 0 0 0 24 -4187 -4187 -4187 34 0 0 0 0 36 -4194 64 33 0 0 0 25 -4203 -4203 -4203 29 0 0 0 0 -4192 -4194 -4194 -4195 0 0 0 36 -4219 -4219 -4219 31 0 0 0 0 -4192 -4194 -4194 -4195 0 0 0 -4215 -4219 -4219 -4219 -4219 0 0 0 0 -4192 -4194 -4194 -4195 0 0 0 -4215 -4251 -4251 -4251 31 0 0 0 0 25 27 27 20 0 0 0 -4215 -4251 -4251 -4251 -4251 0 0 0 0 26 23 23 21 -4278 -4278 32 26 -4283 -4283 -4283 35 0 0 0 0 0 0 0 0 -4278 -4278 -4278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 15 14 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 52 0 0 0 0 0 0 42 7 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 -5040 0 0 0 0 0 0 0 0 -5049 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 -5072 0 0 0 0 0 0 0 0 -5081 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 -5104 0 0 0 0 0 0 0 0 -5113 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 -5136 0 0 0 0 0 0 0 0 -5145 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 -5168 0 0 0 0 0 0 0 0 -5177 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 -5200 0 0 0 0 0 0 0 0 -5209 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 -5232 0 0 0 0 0 0 0 0 -5241 0 0 0 0 0 0 7 52 0 0 0 0 0 0 42 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 13 52 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5520 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5552 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 15 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5721 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5753 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5856 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5888 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 13 52 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5952 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -5984 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 14 13 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6201 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6233 0 0 0 0 0 0 0 0 0 0 0 42 15 14 14 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6281 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6313 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6345 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6377 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6409 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6441 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 24 22 19 0 0 0 0 24 22 19 0 0 0 0 0 0 36 40 33 0 0 0 0 36 40 33 0 0 0 0 0 0 -6496 -6497 -6498 0 0 0 0 -6503 -6504 -6505 0 0 0 0 0 0 -6496 -6497 -6498 0 0 0 0 -6503 -6504 -6505 0 0 0 0 0 0 -6496 -6497 -6498 0 0 0 0 -6503 -6504 -6505 0 0 0 0 0 0 36 40 33 0 0 0 0 36 40 33 0 0 0 0 0 0 -6560 -6561 -6562 0 0 0 0 -6567 -6568 -6569 0 0 0 0 0 0 -6560 -6561 -6562 0 0 0 0 -6567 -6568 -6569 0 0 0 0 0 0 -6560 -6561 -6562 0 0 0 0 -6567 -6568 -6569 0 0 0 0 0 0 36 40 33 0 0 0 0 36 40 33 0 0 0 0 0 0 -6624 -6625 -6626 0 0 0 0 -6631 -6632 -6633 0 0 0 0 0 0 -6624 -6625 -6626 0 0 0 0 -6631 -6632 -6633 0 0 0 0 0 0 -6624 -6625 -6626 0 0 0 0 -6631 -6632 -6633 0 0 0 0 0 0 36 40 33 0 0 0 0 36 40 33 0 0 0 0 0 0 -6688 -6689 -6690 0 0 0 0 -6695 -6696 -6697 0 0 0 0 0 0 -6688 -6689 -6690 0 0 0 0 -6695 -6696 -6697 0 0 0 0 0 0 -6688 -6689 -6690 0 0 0 0 -6695 -6696 -6697 0 0 0 0 0 0 26 23 21 -6757 -6757 32 0 26 23 21 0 0 0 0 0 0 24 19 0 -6757 -6757 -6757 0 0 0 0 0 0 0 0 0 0 36 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6784 -6785 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6784 -6785 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6784 -6785 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 33 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6848 -6849 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6848 -6849 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -6848 -6849 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 21 52 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 14 13 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 14 14 13 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 -7138 67 15 13 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 19 -7203 67 15 13 0 0 63 66 57 0 0 0 0 0 36 33 -7219 68 0 0 0 0 -7208 -7209 -7210 0 0 0 0 0 -7216 -7217 -7219 -7219 0 0 0 0 38 3 -7210 0 0 0 0 0 -7216 -7217 0 0 0 0 0 0 0 0 -7210 0 0 0 0 0 -7216 -7217 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 21 52 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 14 13 52 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 14 14 13 52 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 14 14 14 13 52 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 -7572 -7572 -7572 39 13 52 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 14 -7637 -7637 -7637 39 13 52 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 14 14 -7702 -7702 -7702 39 13 52 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 14 14 14 -7767 -7767 -7767 39 13 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -7815 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -7862 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -7909 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8004 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 22 19 66 0 0 0 0 0 0 0 0 0 0 0 0 25 27 20 -8051 0 0 0 0 0 0 0 0 0 0 0 0 26 23 21 3 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 19 66 0 0 0 0 0 0 0 0 0 0 0 0 0 25 20 -8146 0 0 0 0 0 0 0 0 0 0 0 0 0 25 20 66 0 0 0 0 0 0 0 0 0 0 0 0 0 26 21 -8178 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8208 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 -8208 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8208 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8384 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8432 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8432 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8432 -8465 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8512 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8560 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8560 -8593 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8624 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8624 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 -8624 0 -8658 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8704 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8752 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 63 66 57 0 0 0 0 0 0 0 0 0 -8864 0 0 0 -8868 -8869 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8870 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 63 66 57 0 0 0 0 0 0 0 0 0 -8976 0 0 0 -8980 -8981 -8982 0 0 0 0 0 0 0 0 0 5 0 0 0 38 3 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -8982 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 38 3 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -9126 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -9126 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -9126 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 38 3 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -9238 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -9238 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -9238 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -9408 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 3 52 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 13 3 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 14 13 3 52 0 0 0 0 0 0 0 0 0 0 0 58 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 -9648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -9648 0 4 52 0 0 0 0 0 0 0 0 0 0 0 0 -9648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 4 52 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -9840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 66 57 0 0 0 0 0 0 0 0 0 0 0 0 0 -9969 -9970 -9971 0 0 0 0 0 0 0 0 0 0 0 0 0 63 66 -9971 0 0 0 0 0 0 0 0 0 0 0 0 0 -10001 -10002 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10288 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10400 47 4 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10464 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10464 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10464 0 47 4 0 0 0 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10528 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10528 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10528 0 0 47 4 0 0 0 0 0 0 0 0 0 0 0 58 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 -10592 0 0 0 -10596 0 0 0 0 0 0 0 0 0 0 0 -10592 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10592 0 0 3 0 0 3 57 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 -10647 0 0 0 0 0 0 0 0 -10656 0 3 0 0 3 57 -10647 0 0 0 0 0 0 0 0 -10656 0 0 0 0 0 -10678 -10647 0 0 0 0 0 0 0 0 -10656 3 0 0 3 57 -10678 0 0 0 0 0 0 0 0 0 9 0 0 0 0 -10709 -10678 0 0 0 0 0 0 0 0 0 3 0 0 3 6 -10709 0 -10744 68 0 0 0 0 0 0 0 59 0 0 0 0 -10709 0 -10744 -10744 0 0 0 0 0 0 0 -10752 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10752 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10752 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10816 4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 -10816 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10816 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10880 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 58 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 -10944 0 -10946 0 0 0 0 0 0 0 0 0 0 0 0 0 -10944 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -10944 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11040 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11072 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 38 66 57 0 0 0 0 0 0 0 0 0 0 -11200 0 0 38 -11204 -11205 0 0 0 0 0 0 0 0 0 0 5 0 0 38 3 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11392 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11409 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 -11409 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 -11409 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11505 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 -11505 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 -11505 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 41 57 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11600 -11601 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 -11601 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11632 -11601 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11664 -11665 57 0 0 0 0 0 0 0 0 0 0 0 0 0 -11664 0 -11682 0 0 0 0 0 0 0 0 0 0 0 0 0 -11664 0 -11682 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 -11682 0 0 0 0 0 0 0 0 0 0 0 0 0 -11728 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11728 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11728 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11792 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11840 4 52 0 0 0 0 0 0 0 0 0 0 0 0 0 -11840 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 -11904 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11904 41 52 0 0 0 0 0 0 0 0 0 0 0 0 0 -11904 -11937 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11968 -11969 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11968 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -11968 4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12032 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12032 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12032 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12096 0 4 52 0 0 0 0 0 0 0 0 0 0 0 0 -12096 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 -12096 0 4 5 0 0 0 0 0 0 0 0 0 0 0 0 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12160 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12160 -12177 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12160 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 -12245 -12245 32 3 3 3 3 0 0 0 0 0 0 52 0 0 -12245 -12245 -12245 0 0 42 0 0 0 0 0 0 0 52 0 0 0 0 0 0 0 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 52 0 0 0 0 0 0 42 3 0 0 0 0 0 0 36 3 0 0 0 0 0 0 3 33 0 0 0 0 0 0 -12480 33 66 0 0 0 0 66 36 -12489 0 0 0 0 0 0 -12480 -12497 -12498 0 0 0 0 -12503 -12504 -12489 0 0 0 0 0 0 -12480 -12497 66 0 0 0 0 66 -12504 -12489 0 0 0 0 0 0 36 -12497 -12530 0 0 0 0 -12535 -12504 33 0 0 0 0 0 0 -12544 0 66 0 0 0 0 66 0 -12553 0 0 0 0 0 0 -12544 0 -12562 0 0 0 0 -12567 0 -12553 0 0 0 0 0 0 -12544 3 0 0 0 0 0 0 3 -12553 0 0 0 0 0 0 3 52 0 0 0 0 0 0 42 3 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12624 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 -12624 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12624 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 -12688 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 -12688 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12688 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 52 0 0 0 0 0 0 42 3 0 0 0 0 0 0 36 3 0 0 0 0 0 0 3 33 0 0 0 0 0 0 -12768 33 66 0 0 0 0 66 36 -12777 0 0 0 0 0 0 -12768 -12785 -12786 0 0 0 0 -12791 -12792 -12777 0 0 0 0 0 0 -12768 -12785 66 0 0 0 0 66 -12792 -12777 0 0 0 0 0 0 36 -12785 -12818 0 0 0 0 -12823 -12792 33 0 0 0 0 0 0 -12832 0 66 0 0 0 0 66 0 -12841 0 0 0 0 0 0 -12832 0 -12850 0 0 0 0 -12855 0 -12841 0 0 0 0 0 0 -12832 3 0 0 0 0 0 0 3 -12841 0 0 0 0 0 0 3 52 0 0 0 0 0 0 42 3 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12912 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 -12912 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -12912 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 5 0 0 0 0 0 0 0 38 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 -13008 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13008 0 0 66 0 0 0 0 0 0 0 0 0 0 0 0 -13008 0 0 -13043 0 0 0 0 0 38 0 0 0 0 0 0 60 0 38 66 0 0 0 0 0 0 0 0 0 0 0 0 -13072 0 0 -13075 0 0 0 0 0 0 0 0 0 0 0 0 -13072 -13106 68 66 0 0 0 0 0 0 0 0 0 0 0 0 -13072 -13106 -13106 -13107 0 0 0 0 0 0 0 0 0 0 0 0 11 0 38 3 0 0 0 0 0 38 0 0 0 0 0 0 58 0 38 3 0 0 0 0 0 38 0 0 0 0 0 0 -13152 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13152 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13152 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 0 0 0 0 0 66 3 3 3 0 0 0 0 0 0 -13232 0 0 0 0 0 -13238 0 0 0 0 0 0 0 0 0 -13232 0 0 0 0 0 3 3 3 3 0 0 0 0 0 0 -13232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13296 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13296 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13296 0 0 0 0 0 0 0 0 38 0 0 0 0 0 0 58 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13360 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13360 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 -13360 0 0 0 0 0 0 0 0 -13401 0 0 0 0 0 0 59 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13424 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13424 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -13424 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 62 0 0 0 0 0 0 63 66 0 0 0 0 0 0 -13488 -13489 0 0 0 0 0 0 -13496 -13497 0 0 0 0 0 0 66 62 0 0 0 0 0 0 63 66 0 0 0 0 0 0 -13520 -13521 0 0 0 0 0 0 -13528 -13529 0 0 0 0 0 0 66 62 0 0 0 0 0 0 63 66 0 0 0 0 0 0 -13552 -13553 0 0 0 0 0 0 -13560 -13561 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 66 62 0 0 0 0 63 66 3 0 0 0 0 0 0 0 -13697 -13698 0 0 0 0 -13703 -13704 0 0 0 0 0 0 0 0 66 62 0 0 0 0 63 66 0 0 0 0 0 0 0 0 -13729 -13730 0 0 0 0 -13735 -13736 0 0 0 0 0 0 0 0 66 62 0 0 0 0 63 66 0 0 0 0 0 0 0 3 -13761 -13762 0 0 0 0 -13767 -13768 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 42 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 42 0 0 0 0 0 0 3 3 66 0 0 0 0 66 3 3 0 0 0 0 0 0 0 0 -13906 0 0 0 0 -13911 0 0 0 0 0 0 0 0 0 0 66 0 0 0 0 66 0 0 0 0 0 0 0 0 0 0 -13938 0 0 0 0 -13943 0 0 0 0 0 0 0 0 0 0 66 0 0 0 0 66 0 0 0 0 0 0 0 0 0 0 -13970 0 0 0 0 -13975 0 0 0 0 0 0 0 0 0 0 66 0 0 0 0 66 0 0 0 0 0 0 0 0 0 0 -14002 0 0 0 0 -14007 0 0 0 0 0 0 0 0 0 0 66 0 0 0 0 66 0 0 0 0 0 0 0 0 0 0 -14034 0 0 0 0 -14039 0 0 0 0 0 0 0 0 0 0 66 0 0 0 0 66 0 0 0 0 0 0 0 0 3 3 -14066 0 0 0 0 -14071 3 3 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 42 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 42 0 0 0 0 0 0 52 0 0 0 0 0 0 0 0 42 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"
data = data.split(" ")
width = int(data[0])
height = int(data[1])
map = [data[-1]] + data[2:-1]
for i in range(len(map)):
map[i] = int(map[i])
if map[i] < 0:
map[i] = map[-map[i]]
## Convert to numpy
map = np.array(map, dtype=np.int32).reshape((width, height)).T
## Change all tiles to standardized form:
## 0 = Empty
## 1 = Block
##-1 = Danger
##-2 = Coin
##-3 = Portal
##-4 = Super Jump
map[(map==3)
|(map==4)
|(map==7)
|((map>=13)&(map<=31))
|((map>=33)&(map<=37))
|((map>=39)&(map<=41))
|((map>=64)&(map<=66))] = 1
map[(map==38)
|((map>=42)&(map<=57))
|(map==67)] = 0
map[(map==5)
|(map==6)
|((map>=9)&(map<=12))
|(map==38)
|((map>=58)&(map<=63))] = -1
# Coin
map[(map==68)] = -2
# Portal
map[(map==32)] = -3
# Super Jump
map[(map>=69)&(map<=78)] = -4
# Crop it till the first portal
#map = map[:,0:500]
# Pad it out to give each cell 26x26 pixels
map = np.repeat(map, 26, axis=0)
map_original = np.repeat(map, 26, axis=1)
## Get one in every 9 pixels (that's our horizontal move speed)
map = map_original[:,offset_x:-1:speed_x]
def isSolid(map, x,y,dx,dy, mode=1):
x_map = x*speed_x + dx
y_map = y + dy
if y_map < 0:
return True
if mode == 2 and y_map > 26*10:
return True
elif map_original[int(y_map), x_map] == 1:
return True
return False
def isJump(i):
return i==1
def evaluateInput(input, map):
y = 0
sy = 0
jump = 0
y_prev = 0
dead = 0
coins = 0
jump_count = 0
mode = 1
map_img = np.array((map - map.min()) / (map.max() - map.min()) * 255, np.uint8)
map_img = cv2.cvtColor(map_img, cv2.COLOR_GRAY2BGR)
"""
map_img = np.flip(map_img, axis=0)
map_out = np.zeros(shape=map_img.shape, dtype=np.uint8)
for i in range((map_img.shape[1]-13)//9):
map_out[:,i*2] = map_img[:,i*9+13]
cv2.imshow("test",map_out)
cv2.waitKey()
"""
## Draw inputs
border = 30
map_img = cv2.copyMakeBorder(map_img, top=border, bottom=0, left=0, right=0, borderType=cv2.BORDER_CONSTANT,
value=[0, 0, 0])
for i in range(len(input)):
if isJump(input[i]):
map_img[0:border, i] = [255, 255, 0]
## Simulate inputs
dt_since_mode_change = 0
for i in range(1, len(input)):
dt_since_mode_change += 1
tile = map[int(y), i - 1]
y_prev = int(y)
override = False
for e in user_enable:
if i >= e[0] and i <= e[1]:
override = True
break
if override:
continue
if mode == 1:
## Cube mode
if tile == -3 and dt_since_mode_change > 10:
## Hit the portal
mode = 2
dt_since_mode_change = 0
if tile == -4:
## Super jump
sy = 20
jump = 2000
## TODO: Air Jump
## TODO: Bounce jump
if isSolid(map, i,y,13,0) or isSolid(map, i,y,13,20):
if y%26 > 14:
ny = (np.floor(y/26)+1)*26
if isSolid(map, i, ny, 13, 0) or isSolid(map, i, ny, 13, 20):
dead = 1
break
else:
y = ny - sy + 3
else:
dead = 1
break
if jump <= 2:
if input[i]:
jump = 501
sy = 23
if jump < 2000:
if sy < 4:
sy -= 2.25
else:
sy -= 4
else:
if jump < 2009:
if sy < 39:
sy += 3
else:
sy = 18
jump = 1000
y += sy
if sy > 0:
if isSolid(map, i,y,-12,20) or isSolid(map, i,y,12,20):
dead = 1
break
jump += 1
else:
fixed_height = False
while isSolid(map, i, y, -12, 0) or isSolid(map, i, y, 12, 0):
y = (np.floor(y/26)+1)*26
fixed_height = True
if fixed_height:
sy = 0
jump = 0
else:
jump += 1
elif mode == 2:
## Fly
if map[int(y), i] == -2 and dt_since_mode_change > 10:
## Hit the portal
mode = 1
dt_since_mode_change = 0
"""
if isSolid(map,i,y,13,1, mode=2) or isSolid(map,i,y,-13,24, mode=2):
dead = 1
break
if input[i]==1:
sy += 1.2
if sy > 9:
sy = 9
else:
sy -= 1
if sy < -9:
sy = -9
y += sy
if isSolid(map,i,y,-12,13, mode=2) or isSolid(map,i,y,12,13, mode=2):
dead = 1
break
if sy>0:
fixed_height = False
while isSolid(map,i, y, -12, 25, mode=2) or isSolid(map, i, y, 12, 25, mode=2):
y = (np.floor((y+25)/26)-1)*26
fixed_height = True
if y < 0:
dead = 1
break
if dead:
break
if fixed_height:
sy *= 0.5
else:
fixed_height = False
while isSolid(map, i, y, -12, 0, mode=2) or isSolid(map, i, y, 12, 0, mode=2):
y = (np.floor(y/26) + 1) * 26
fixed_height = True
if y > 800:
dead = 1
break
if dead:
break
if fixed_height:
sy *= 0.5
"""
#if (int(y) >= height * 26) or (map[int(y), i] == -1):
# dead = 1
#elif (i == len(input) - 1) or (map[int(y), i + 1] == 1):
# dead = 1
if tile == -1:
dead = 1
if i > 0:
map_img = cv2.line(map_img, (i - 1, y_prev + border), (i, int(y) + border), [0, 0, 255], thickness=2)
if dead:
break
score = (i*speed_x)//26 + 25*coins# - jump_count
#max_map_img = np.flip(map_img, axis=0)
#cv2.imshow("Trajectory", max_map_img)
#cv2.waitKey(1)
return i, score, map_img
def playGame(input):
hook = MemoryHooker.MemoryHooker(pid)
keyboard = MemoryHooker.Keyboard()
## Unpause
keyboard.pressKey(0x19) #P
time.sleep(2/fps)
keyboard.releaseKey(0x19)
while 1:
value = hook.readInt32(address)
x = (value - 6) // 8
i = ((x - offset_x) // speed_x)+2 ## Small adjustment because the map is shifted for some reason in-game
if (i >= len(input)):
## Dead
keyboard.releaseKey(0x11) # Release W
break
else:
#print(value, x, i, input[i])
jump = input[i]
for e in user_enable:
if i>=e[0] and i<=e[1]:
jump = user_inputs[i]
break
if jump:
keyboard.pressKey(0x11) # Press W
else:
keyboard.releaseKey(0x11) # Release W
##hook.sendKeys("w")
time.sleep(1 / fps)
count = 0
while 1:
value = hook.readInt32(address)
x = (value - 6) // 8
i = (x - offset_x) // speed_x
if (i < len(input)):
## Respawned
count += 1
if count > 4:
break
time.sleep(1 / fps)
## Pause
keyboard.pressKey(0x19) # P
time.sleep(2 / fps)
keyboard.releaseKey(0x19)
hook.close()
import random
from deap import base, creator, tools
n_genes = map.shape[1]
n_individuals = 50
n_parents = 3 #int(n_individuals*0.05)
frames_lookback_mutate = 50 #How many frames to look back for mutation
frames_lookforward_mutate = 0 #How many frames to look back for mutation
p_jump = 0.05 #Initial probability of each gene signalling jump
p_mutate = 0.8 # Probability of mutating at all after evaluation
p_gene_mutate = 0.1 #Probability of a single gene flipping
p_cross = 0.0 #Probability two creatures are crossed
def mutate(individual, indpb):
"""Flip the value of the attributes of the input individual and return the
mutant. The *individual* is expected to be a :term:`sequence` and the values of the
attributes shall stay valid after the ``not`` operator is called on them.
The *indpb* argument is the probability of each attribute to be
flipped. This mutation is usually applied on boolean individuals.
:param individual: Individual to be mutated.
:param indpb: Independent probability for each attribute to be flipped.
:returns: A tuple of one individual.
This function uses the :func:`~random.random` function from the python base
:mod:`random` module.
"""
## Only mutate the last "lookback" number of genes and the next "frames_lookforward_mutate" genes
max_idx = int(individual.fitness.values[1]+frames_lookforward_mutate)
min_idx = max(0, max_idx-frames_lookback_mutate)
for i in range(min_idx, max_idx):
if random.random() < indpb:
individual[i] = type(individual[i])(not individual[i])
return individual,
def randGene():
if random.random() <= p_jump:
return 1
return 0
creator.create("FitnessMax", base.Fitness, weights=(1,1))
creator.create("Individual", list, fitness=creator.FitnessMax)
toolbox = base.Toolbox()
#toolbox.register("attr_bool", random.randint, 0, 1)
toolbox.register("attr_bool", randGene)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_bool, n_genes)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
toolbox.register("evaluate", evaluateInput)
toolbox.register("mate", tools.cxTwoPoint)
#toolbox.register("mutate", tools.mutFlipBit, indpb=p_gene_mutate)
toolbox.register("mutate", mutate, indpb=p_gene_mutate)
toolbox.register("select", tools.selTournament, tournsize=n_parents)
def main(cp_file):
random.seed(8)
if os.path.isfile(cp_file):
with open(cp_file, "rb") as f:
cp = pickle.load(f)
pop = cp["population"]
g = cp["generation"]
diff = map.shape[1]-len(pop[0])
if diff>0:
diff = list(np.zeros((diff)))
for i in pop:
i.extend(diff)
else:
pop = toolbox.population(n=n_individuals)
g = 0
print("Start of evolution")
# Evaluate the entire population
for ind in pop:
xpos, score, map_img = toolbox.evaluate(ind, map)
ind.fitness.values = (score, xpos)
print(" Evaluated %i individuals" % len(pop))
# Extracting all the fitnesses of
fits = [ind.fitness.values[0] for ind in pop]
# Variable keeping track of the number of generations
prev_max_score = 0
prev_max_dist = 0
# Begin the evolution
while g < 1000: #and max(fits) < 960
# A new generation
g = g + 1
print("-- Generation %i --" % g)
# Select the next generation individuals
offspring_temp = toolbox.select(pop, len(pop))
# Clone the selected individuals
offspring = []
for o in offspring_temp:
offspring.append(toolbox.clone(o))
# Apply crossover and mutation on the offspring
for child1, child2 in zip(offspring[::2], offspring[1::2]):
if random.random() < p_cross:
toolbox.mate(child1, child2)
# fitness values of the children
# must be recalculated later
#del child1.fitness.values
#del child2.fitness.values
for mutant in offspring:
if random.random() < p_mutate:
toolbox.mutate(mutant)
del mutant.fitness.values
# Evaluate the individuals with an invalid fitness
max_score = -np.inf
max_map_img = None
max_ind = None
invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
for ind in invalid_ind:
xpos, score, map_img = toolbox.evaluate(ind, map)
ind.fitness.values = (score, xpos)
if score > max_score:
max_score = score
max_dist = ((xpos*9)+13)//26
max_map_img = map_img
max_ind = ind
print(" Evaluated %i individuals" % len(invalid_ind))
# The population is entirely replaced by the offspring
pop[:] = offspring
# Gather all the fitnesses in one list and print the stats
fits = [ind.fitness.values[0] for ind in pop]
length = len(pop)
mean = sum(fits) / length
sum2 = sum(x * x for x in fits)
std = abs(sum2 / length - mean ** 2) ** 0.5
print(" Min %s" % min(fits))
print(" Max %s" % max(fits))
print(" Avg %s" % mean)
print(" Std %s" % std)
## Create a checkpoint
if g%cp_freq == 0:
cp = dict(population=pop, generation=g)
with open(cp_file, "wb") as f:
pickle.dump(cp, f)
## Let's see our progress
print(max_ind)
max_map_img = np.flip(max_map_img, axis=0)
max_map_img = max_map_img.astype(np.uint8)
max_map_img = cv2.putText(max_map_img, "Generation %4d" % g, (20, 40), cv2.FONT_HERSHEY_DUPLEX, 1.0, (0, 0, 0),
lineType=cv2.LINE_AA, bottomLeftOrigin=False)
max_map_img = cv2.putText(max_map_img, "Fitness: %4d" % max_score, (20, 70), cv2.FONT_HERSHEY_DUPLEX, 1.0, (0, 0, 0),
lineType=cv2.LINE_AA, bottomLeftOrigin=False)
max_map_img = cv2.putText(max_map_img, "Distance: %4d" % max_dist, (20, 100), cv2.FONT_HERSHEY_DUPLEX, 1.0,
(0, 0, 0),
lineType=cv2.LINE_AA, bottomLeftOrigin=False)
cv2.imshow("Best trajectory", max_map_img)
cv2.moveWindow("Best trajectory", 0, 0)
cv2.waitKey(1)
#if max_score >= prev_max_score + video_points:
if max_dist >= prev_max_dist + video_dist:
prev_max_score = max_score
prev_max_dist = max_dist
playGame(max_ind)
if max_ind.fitness.values[1] >= map.shape[1]:
break
print("-- End of (successful) evolution --")
best_ind = tools.selBest(pop, 1)[0]
print("Best individual is %s, %s" % (best_ind, best_ind.fitness.values))
if __name__ == "__main__":
main(cp_file)