diff --git a/03/input-test.txt b/03/input-test.txt new file mode 100644 index 0000000..3755d52 --- /dev/null +++ b/03/input-test.txt @@ -0,0 +1,3 @@ +#1 @ 1,3: 4x4 +#2 @ 3,1: 4x4 +#3 @ 5,5: 2x2 diff --git a/03/input.txt b/03/input.txt new file mode 100644 index 0000000..5cf2c95 --- /dev/null +++ b/03/input.txt @@ -0,0 +1,1233 @@ +#1 @ 565,109: 14x24 +#2 @ 413,723: 16x28 +#3 @ 136,229: 27x11 +#4 @ 640,187: 10x17 +#5 @ 666,879: 15x23 +#6 @ 20,696: 19x12 +#7 @ 543,767: 19x26 +#8 @ 92,312: 17x19 +#9 @ 833,99: 21x17 +#10 @ 795,572: 26x21 +#11 @ 801,965: 12x21 +#12 @ 385,951: 10x7 +#13 @ 18,241: 10x13 +#14 @ 86,656: 24x12 +#15 @ 505,955: 11x10 +#16 @ 744,538: 25x20 +#17 @ 91,488: 21x10 +#18 @ 266,291: 11x20 +#19 @ 618,42: 24x16 +#20 @ 377,422: 19x26 +#21 @ 469,38: 17x28 +#22 @ 559,768: 29x10 +#23 @ 493,151: 28x24 +#24 @ 222,123: 21x16 +#25 @ 473,797: 15x17 +#26 @ 434,107: 14x26 +#27 @ 627,844: 25x13 +#28 @ 146,715: 10x10 +#29 @ 297,86: 20x19 +#30 @ 813,476: 15x27 +#31 @ 428,417: 28x17 +#32 @ 202,163: 13x29 +#33 @ 934,273: 13x20 +#34 @ 418,254: 28x26 +#35 @ 918,798: 12x27 +#36 @ 486,798: 13x10 +#37 @ 652,31: 12x16 +#38 @ 456,898: 21x23 +#39 @ 330,300: 10x27 +#40 @ 901,713: 24x29 +#41 @ 337,809: 18x25 +#42 @ 966,349: 13x26 +#43 @ 69,782: 17x15 +#44 @ 364,954: 14x15 +#45 @ 780,50: 13x13 +#46 @ 378,632: 14x16 +#47 @ 847,186: 29x12 +#48 @ 143,18: 11x17 +#49 @ 519,65: 22x13 +#50 @ 137,871: 19x17 +#51 @ 242,133: 20x10 +#52 @ 517,715: 17x25 +#53 @ 674,378: 12x26 +#54 @ 921,787: 28x14 +#55 @ 383,711: 14x17 +#56 @ 691,82: 12x25 +#57 @ 600,656: 25x16 +#58 @ 399,291: 24x16 +#59 @ 345,679: 19x13 +#60 @ 599,311: 14x10 +#61 @ 181,410: 27x27 +#62 @ 415,718: 24x16 +#63 @ 567,945: 27x13 +#64 @ 113,9: 17x21 +#65 @ 639,492: 20x25 +#66 @ 425,414: 12x14 +#67 @ 805,970: 3x6 +#68 @ 575,489: 22x13 +#69 @ 897,117: 16x13 +#70 @ 722,393: 29x25 +#71 @ 56,120: 11x18 +#72 @ 698,724: 19x26 +#73 @ 737,490: 26x28 +#74 @ 129,628: 10x23 +#75 @ 656,488: 22x16 +#76 @ 805,804: 12x15 +#77 @ 701,325: 29x19 +#78 @ 846,51: 21x18 +#79 @ 368,612: 23x10 +#80 @ 218,308: 12x19 +#81 @ 567,702: 10x14 +#82 @ 11,273: 21x17 +#83 @ 959,371: 10x21 +#84 @ 311,123: 26x17 +#85 @ 180,88: 20x12 +#86 @ 573,502: 18x19 +#87 @ 611,233: 24x23 +#88 @ 304,126: 10x27 +#89 @ 363,714: 29x28 +#90 @ 753,584: 15x15 +#91 @ 452,210: 25x22 +#92 @ 200,197: 14x24 +#93 @ 732,961: 11x12 +#94 @ 643,43: 18x13 +#95 @ 56,779: 14x16 +#96 @ 160,938: 28x17 +#97 @ 271,674: 15x11 +#98 @ 100,782: 16x12 +#99 @ 694,772: 19x19 +#100 @ 608,917: 15x25 +#101 @ 967,381: 11x10 +#102 @ 578,124: 29x19 +#103 @ 954,84: 12x14 +#104 @ 76,872: 13x4 +#105 @ 803,150: 20x20 +#106 @ 690,789: 20x23 +#107 @ 626,130: 27x20 +#108 @ 236,547: 20x4 +#109 @ 878,655: 27x18 +#110 @ 911,726: 28x12 +#111 @ 284,165: 11x23 +#112 @ 191,111: 29x11 +#113 @ 530,703: 12x21 +#114 @ 386,36: 25x23 +#115 @ 110,859: 25x15 +#116 @ 399,871: 26x19 +#117 @ 373,163: 14x25 +#118 @ 572,501: 13x21 +#119 @ 132,401: 22x22 +#120 @ 288,304: 24x18 +#121 @ 835,42: 23x26 +#122 @ 767,211: 14x27 +#123 @ 174,88: 26x14 +#124 @ 399,407: 12x18 +#125 @ 396,32: 20x22 +#126 @ 852,58: 17x20 +#127 @ 971,620: 21x29 +#128 @ 64,710: 26x27 +#129 @ 297,176: 22x19 +#130 @ 751,343: 29x20 +#131 @ 23,610: 25x17 +#132 @ 155,53: 25x21 +#133 @ 606,439: 19x10 +#134 @ 511,143: 21x28 +#135 @ 306,21: 11x18 +#136 @ 844,67: 25x12 +#137 @ 966,884: 26x19 +#138 @ 845,12: 16x29 +#139 @ 214,406: 22x28 +#140 @ 186,113: 25x22 +#141 @ 458,886: 21x26 +#142 @ 442,99: 10x27 +#143 @ 652,796: 27x26 +#144 @ 4,218: 14x10 +#145 @ 174,135: 18x28 +#146 @ 491,895: 28x10 +#147 @ 736,954: 18x25 +#148 @ 194,412: 26x14 +#149 @ 642,135: 27x19 +#150 @ 637,223: 11x13 +#151 @ 549,404: 16x24 +#152 @ 662,354: 17x28 +#153 @ 211,963: 25x28 +#154 @ 377,881: 26x17 +#155 @ 116,374: 27x20 +#156 @ 6,948: 13x18 +#157 @ 828,2: 25x22 +#158 @ 283,968: 16x29 +#159 @ 852,22: 27x23 +#160 @ 395,937: 29x29 +#161 @ 357,636: 27x11 +#162 @ 265,9: 15x29 +#163 @ 647,147: 20x11 +#164 @ 512,880: 12x29 +#165 @ 572,30: 18x21 +#166 @ 964,663: 17x25 +#167 @ 828,633: 15x17 +#168 @ 839,173: 12x17 +#169 @ 295,175: 14x14 +#170 @ 455,645: 16x22 +#171 @ 92,305: 11x10 +#172 @ 868,289: 29x28 +#173 @ 434,181: 17x14 +#174 @ 21,692: 22x10 +#175 @ 486,918: 18x11 +#176 @ 359,189: 29x26 +#177 @ 231,642: 10x17 +#178 @ 446,164: 26x19 +#179 @ 812,878: 13x19 +#180 @ 401,613: 18x24 +#181 @ 140,218: 29x16 +#182 @ 223,825: 13x16 +#183 @ 863,337: 21x16 +#184 @ 568,464: 25x10 +#185 @ 417,475: 19x14 +#186 @ 486,894: 29x18 +#187 @ 70,522: 22x19 +#188 @ 657,438: 10x14 +#189 @ 156,885: 29x15 +#190 @ 219,328: 20x24 +#191 @ 9,585: 10x26 +#192 @ 904,667: 17x12 +#193 @ 137,298: 26x18 +#194 @ 947,93: 28x22 +#195 @ 359,712: 15x18 +#196 @ 663,694: 22x12 +#197 @ 786,310: 28x13 +#198 @ 823,920: 22x22 +#199 @ 621,337: 12x24 +#200 @ 44,504: 14x15 +#201 @ 526,637: 14x26 +#202 @ 731,778: 23x17 +#203 @ 681,909: 18x11 +#204 @ 636,290: 12x19 +#205 @ 201,205: 14x18 +#206 @ 451,482: 16x20 +#207 @ 975,373: 16x20 +#208 @ 819,920: 16x18 +#209 @ 104,407: 13x15 +#210 @ 596,291: 15x25 +#211 @ 882,71: 24x29 +#212 @ 729,174: 18x19 +#213 @ 54,269: 3x14 +#214 @ 395,482: 29x15 +#215 @ 745,379: 26x10 +#216 @ 208,91: 21x21 +#217 @ 897,812: 16x26 +#218 @ 857,690: 13x11 +#219 @ 455,711: 20x13 +#220 @ 502,304: 17x24 +#221 @ 978,639: 11x11 +#222 @ 725,170: 24x17 +#223 @ 774,540: 14x26 +#224 @ 553,26: 20x20 +#225 @ 741,947: 16x22 +#226 @ 440,169: 13x19 +#227 @ 180,81: 27x20 +#228 @ 974,440: 11x22 +#229 @ 766,232: 25x11 +#230 @ 27,518: 19x19 +#231 @ 690,313: 18x27 +#232 @ 343,271: 19x21 +#233 @ 486,561: 21x27 +#234 @ 148,69: 19x23 +#235 @ 657,562: 27x12 +#236 @ 403,121: 28x28 +#237 @ 664,614: 22x27 +#238 @ 63,23: 26x27 +#239 @ 353,886: 26x13 +#240 @ 96,440: 13x27 +#241 @ 689,738: 3x4 +#242 @ 456,694: 18x23 +#243 @ 673,497: 28x12 +#244 @ 288,256: 26x24 +#245 @ 433,849: 12x16 +#246 @ 871,297: 20x21 +#247 @ 694,771: 8x6 +#248 @ 301,46: 23x20 +#249 @ 871,596: 28x26 +#250 @ 743,162: 15x18 +#251 @ 95,490: 10x16 +#252 @ 401,885: 17x24 +#253 @ 596,133: 24x21 +#254 @ 373,522: 15x16 +#255 @ 593,746: 12x16 +#256 @ 243,812: 21x13 +#257 @ 543,855: 22x25 +#258 @ 218,817: 20x26 +#259 @ 19,353: 16x26 +#260 @ 846,142: 23x20 +#261 @ 671,365: 12x22 +#262 @ 470,331: 20x22 +#263 @ 380,518: 12x28 +#264 @ 671,177: 29x29 +#265 @ 693,875: 18x23 +#266 @ 50,734: 22x18 +#267 @ 385,218: 15x11 +#268 @ 671,489: 10x28 +#269 @ 422,32: 16x22 +#270 @ 583,152: 27x27 +#271 @ 153,78: 26x20 +#272 @ 748,748: 13x11 +#273 @ 909,163: 24x19 +#274 @ 527,422: 10x26 +#275 @ 494,167: 24x21 +#276 @ 612,748: 21x25 +#277 @ 135,51: 18x29 +#278 @ 187,231: 25x28 +#279 @ 899,338: 11x16 +#280 @ 478,385: 10x11 +#281 @ 150,294: 28x17 +#282 @ 432,645: 27x23 +#283 @ 247,806: 11x13 +#284 @ 8,606: 28x12 +#285 @ 65,308: 23x20 +#286 @ 106,763: 17x22 +#287 @ 175,461: 12x23 +#288 @ 497,156: 12x19 +#289 @ 142,546: 16x12 +#290 @ 10,517: 13x18 +#291 @ 788,968: 26x13 +#292 @ 104,646: 20x19 +#293 @ 388,640: 20x12 +#294 @ 558,38: 12x25 +#295 @ 62,538: 18x11 +#296 @ 965,378: 21x29 +#297 @ 209,967: 17x25 +#298 @ 1,130: 27x14 +#299 @ 354,230: 25x26 +#300 @ 61,515: 16x21 +#301 @ 471,921: 18x28 +#302 @ 155,233: 14x20 +#303 @ 459,670: 27x18 +#304 @ 749,530: 11x27 +#305 @ 354,248: 15x10 +#306 @ 66,701: 27x16 +#307 @ 409,558: 29x17 +#308 @ 653,377: 22x25 +#309 @ 213,37: 27x14 +#310 @ 898,335: 19x15 +#311 @ 721,93: 12x17 +#312 @ 535,443: 15x18 +#313 @ 170,99: 24x10 +#314 @ 50,264: 14x25 +#315 @ 553,481: 27x25 +#316 @ 579,329: 25x24 +#317 @ 642,375: 15x11 +#318 @ 646,128: 20x28 +#319 @ 435,243: 19x24 +#320 @ 880,392: 21x16 +#321 @ 921,304: 21x15 +#322 @ 383,949: 15x15 +#323 @ 782,510: 14x29 +#324 @ 613,329: 23x26 +#325 @ 234,84: 27x13 +#326 @ 916,289: 13x24 +#327 @ 658,811: 28x27 +#328 @ 649,879: 15x12 +#329 @ 87,799: 12x11 +#330 @ 842,799: 19x21 +#331 @ 687,759: 19x28 +#332 @ 451,691: 27x16 +#333 @ 206,885: 23x13 +#334 @ 714,86: 26x16 +#335 @ 68,130: 29x16 +#336 @ 746,334: 22x16 +#337 @ 577,586: 25x18 +#338 @ 720,220: 15x15 +#339 @ 274,643: 14x24 +#340 @ 64,807: 23x24 +#341 @ 147,123: 16x14 +#342 @ 588,386: 12x17 +#343 @ 867,508: 20x21 +#344 @ 680,854: 10x25 +#345 @ 453,276: 19x15 +#346 @ 725,780: 26x14 +#347 @ 28,466: 14x16 +#348 @ 583,189: 26x20 +#349 @ 428,610: 25x28 +#350 @ 133,778: 24x14 +#351 @ 86,820: 15x5 +#352 @ 437,792: 29x25 +#353 @ 296,203: 3x3 +#354 @ 185,186: 27x23 +#355 @ 634,793: 20x24 +#356 @ 850,108: 29x24 +#357 @ 431,58: 24x29 +#358 @ 541,603: 24x29 +#359 @ 879,984: 12x14 +#360 @ 29,712: 14x26 +#361 @ 631,341: 18x22 +#362 @ 27,354: 4x5 +#363 @ 970,256: 21x13 +#364 @ 177,592: 22x15 +#365 @ 54,303: 17x19 +#366 @ 444,468: 14x17 +#367 @ 663,443: 21x14 +#368 @ 128,710: 12x27 +#369 @ 848,712: 23x20 +#370 @ 297,746: 29x26 +#371 @ 951,894: 17x14 +#372 @ 655,889: 20x14 +#373 @ 59,91: 10x25 +#374 @ 911,527: 11x22 +#375 @ 159,291: 18x19 +#376 @ 472,889: 18x22 +#377 @ 432,791: 20x16 +#378 @ 817,570: 13x29 +#379 @ 392,109: 19x28 +#380 @ 853,177: 11x16 +#381 @ 321,562: 25x25 +#382 @ 174,840: 20x24 +#383 @ 589,386: 11x23 +#384 @ 82,797: 23x25 +#385 @ 579,137: 14x29 +#386 @ 399,765: 25x20 +#387 @ 600,932: 25x21 +#388 @ 396,937: 22x26 +#389 @ 104,851: 28x11 +#390 @ 904,119: 26x18 +#391 @ 213,350: 17x19 +#392 @ 177,86: 17x26 +#393 @ 560,826: 17x26 +#394 @ 364,729: 28x16 +#395 @ 724,756: 25x27 +#396 @ 219,648: 17x17 +#397 @ 818,27: 12x25 +#398 @ 765,24: 24x16 +#399 @ 335,420: 27x19 +#400 @ 68,41: 24x10 +#401 @ 132,114: 23x15 +#402 @ 1,908: 20x28 +#403 @ 866,876: 24x18 +#404 @ 702,806: 28x29 +#405 @ 911,118: 27x20 +#406 @ 198,812: 22x20 +#407 @ 418,570: 16x28 +#408 @ 65,531: 10x15 +#409 @ 350,250: 18x13 +#410 @ 804,136: 14x17 +#411 @ 825,169: 16x20 +#412 @ 467,945: 22x19 +#413 @ 269,159: 21x22 +#414 @ 974,98: 17x29 +#415 @ 377,603: 13x10 +#416 @ 772,923: 19x15 +#417 @ 732,338: 22x22 +#418 @ 244,674: 22x20 +#419 @ 818,883: 24x10 +#420 @ 24,699: 20x27 +#421 @ 734,587: 25x20 +#422 @ 366,63: 10x26 +#423 @ 454,111: 29x24 +#424 @ 735,170: 20x19 +#425 @ 133,390: 23x22 +#426 @ 338,481: 27x23 +#427 @ 238,675: 26x16 +#428 @ 596,432: 10x14 +#429 @ 63,803: 20x25 +#430 @ 914,913: 17x16 +#431 @ 7,271: 16x28 +#432 @ 453,464: 10x17 +#433 @ 8,806: 16x10 +#434 @ 519,182: 11x27 +#435 @ 15,516: 13x27 +#436 @ 358,723: 23x29 +#437 @ 346,212: 27x14 +#438 @ 745,743: 21x29 +#439 @ 869,876: 20x27 +#440 @ 669,857: 23x18 +#441 @ 441,700: 15x26 +#442 @ 243,585: 13x27 +#443 @ 641,811: 25x22 +#444 @ 254,226: 22x10 +#445 @ 90,95: 27x15 +#446 @ 901,163: 27x28 +#447 @ 909,339: 18x26 +#448 @ 268,374: 13x10 +#449 @ 704,327: 18x14 +#450 @ 267,669: 11x19 +#451 @ 472,39: 13x17 +#452 @ 902,481: 27x10 +#453 @ 716,194: 14x15 +#454 @ 908,519: 20x18 +#455 @ 34,445: 10x27 +#456 @ 106,499: 25x28 +#457 @ 613,631: 23x15 +#458 @ 163,116: 18x16 +#459 @ 356,957: 27x13 +#460 @ 733,511: 13x21 +#461 @ 24,807: 10x24 +#462 @ 583,291: 18x12 +#463 @ 136,32: 27x19 +#464 @ 631,296: 29x10 +#465 @ 85,439: 25x29 +#466 @ 145,805: 11x15 +#467 @ 368,739: 26x11 +#468 @ 813,701: 17x17 +#469 @ 611,358: 26x29 +#470 @ 292,193: 24x18 +#471 @ 829,392: 9x7 +#472 @ 923,148: 10x20 +#473 @ 816,360: 24x12 +#474 @ 406,710: 25x28 +#475 @ 349,627: 10x26 +#476 @ 295,137: 14x25 +#477 @ 415,456: 21x10 +#478 @ 74,870: 18x11 +#479 @ 135,377: 28x29 +#480 @ 259,570: 16x23 +#481 @ 809,808: 23x27 +#482 @ 159,290: 10x25 +#483 @ 791,533: 20x27 +#484 @ 620,34: 17x12 +#485 @ 136,406: 12x22 +#486 @ 416,44: 17x28 +#487 @ 576,256: 26x17 +#488 @ 588,317: 29x11 +#489 @ 964,435: 21x18 +#490 @ 620,561: 20x23 +#491 @ 167,849: 23x17 +#492 @ 159,752: 25x16 +#493 @ 950,922: 26x28 +#494 @ 584,587: 14x18 +#495 @ 907,489: 11x18 +#496 @ 406,51: 10x29 +#497 @ 21,779: 15x12 +#498 @ 381,309: 10x27 +#499 @ 240,348: 20x19 +#500 @ 287,655: 29x13 +#501 @ 295,265: 18x14 +#502 @ 772,401: 11x14 +#503 @ 187,808: 14x20 +#504 @ 336,937: 21x18 +#505 @ 183,162: 13x24 +#506 @ 86,305: 21x10 +#507 @ 958,853: 17x23 +#508 @ 223,463: 23x28 +#509 @ 0,498: 29x11 +#510 @ 737,851: 28x26 +#511 @ 411,349: 22x19 +#512 @ 39,461: 19x28 +#513 @ 610,268: 10x21 +#514 @ 378,22: 18x20 +#515 @ 332,629: 18x17 +#516 @ 20,781: 12x17 +#517 @ 190,84: 6x4 +#518 @ 961,260: 27x17 +#519 @ 388,755: 10x16 +#520 @ 203,101: 15x16 +#521 @ 606,187: 17x23 +#522 @ 817,274: 29x10 +#523 @ 718,909: 24x11 +#524 @ 154,706: 26x26 +#525 @ 402,878: 20x13 +#526 @ 541,410: 13x10 +#527 @ 266,974: 14x16 +#528 @ 0,961: 15x18 +#529 @ 33,681: 24x17 +#530 @ 785,178: 27x11 +#531 @ 5,703: 28x24 +#532 @ 703,783: 12x10 +#533 @ 876,868: 24x13 +#534 @ 843,902: 21x26 +#535 @ 143,795: 24x29 +#536 @ 910,522: 27x15 +#537 @ 403,250: 27x27 +#538 @ 902,813: 24x26 +#539 @ 93,469: 25x12 +#540 @ 629,723: 23x27 +#541 @ 783,910: 29x13 +#542 @ 757,245: 17x21 +#543 @ 818,366: 14x14 +#544 @ 430,408: 25x13 +#545 @ 311,219: 23x15 +#546 @ 875,870: 29x11 +#547 @ 403,134: 28x11 +#548 @ 663,863: 24x11 +#549 @ 441,961: 15x20 +#550 @ 910,672: 11x19 +#551 @ 187,187: 27x22 +#552 @ 733,902: 15x15 +#553 @ 6,962: 18x26 +#554 @ 96,126: 11x11 +#555 @ 276,244: 24x23 +#556 @ 262,365: 23x13 +#557 @ 163,76: 27x18 +#558 @ 133,893: 26x11 +#559 @ 933,690: 15x13 +#560 @ 711,848: 24x29 +#561 @ 370,333: 26x11 +#562 @ 832,788: 28x20 +#563 @ 0,422: 10x25 +#564 @ 826,49: 24x27 +#565 @ 736,936: 18x26 +#566 @ 536,601: 24x10 +#567 @ 948,690: 28x29 +#568 @ 233,26: 19x15 +#569 @ 956,237: 23x11 +#570 @ 758,967: 26x26 +#571 @ 241,202: 15x21 +#572 @ 650,169: 10x26 +#573 @ 479,880: 23x23 +#574 @ 257,161: 15x28 +#575 @ 646,470: 22x21 +#576 @ 420,693: 26x25 +#577 @ 370,913: 12x21 +#578 @ 753,303: 24x27 +#579 @ 39,171: 13x21 +#580 @ 647,155: 29x23 +#581 @ 860,51: 13x26 +#582 @ 607,212: 19x23 +#583 @ 658,487: 24x15 +#584 @ 645,530: 17x14 +#585 @ 884,276: 29x19 +#586 @ 860,187: 23x16 +#587 @ 103,18: 10x13 +#588 @ 101,493: 28x18 +#589 @ 944,752: 29x21 +#590 @ 66,124: 12x13 +#591 @ 970,537: 20x16 +#592 @ 890,788: 19x27 +#593 @ 314,421: 14x17 +#594 @ 676,235: 25x18 +#595 @ 415,395: 27x23 +#596 @ 150,708: 22x10 +#597 @ 459,946: 18x11 +#598 @ 495,575: 13x21 +#599 @ 598,657: 16x23 +#600 @ 475,873: 19x25 +#601 @ 670,758: 20x14 +#602 @ 372,691: 20x20 +#603 @ 312,707: 14x12 +#604 @ 130,720: 6x12 +#605 @ 280,941: 14x28 +#606 @ 692,701: 14x24 +#607 @ 624,78: 19x11 +#608 @ 784,493: 23x20 +#609 @ 176,234: 17x16 +#610 @ 467,402: 24x19 +#611 @ 733,932: 11x10 +#612 @ 6,409: 13x28 +#613 @ 44,240: 17x22 +#614 @ 639,847: 22x19 +#615 @ 221,226: 18x12 +#616 @ 649,139: 26x24 +#617 @ 55,165: 24x21 +#618 @ 661,528: 18x20 +#619 @ 313,926: 26x19 +#620 @ 588,153: 24x14 +#621 @ 378,920: 14x15 +#622 @ 506,970: 28x17 +#623 @ 831,202: 20x16 +#624 @ 365,9: 14x27 +#625 @ 131,755: 24x27 +#626 @ 648,513: 27x22 +#627 @ 740,357: 26x28 +#628 @ 277,163: 28x21 +#629 @ 737,979: 27x20 +#630 @ 154,521: 23x27 +#631 @ 221,896: 12x24 +#632 @ 942,682: 14x23 +#633 @ 649,861: 22x16 +#634 @ 330,136: 19x22 +#635 @ 17,688: 19x10 +#636 @ 618,75: 14x20 +#637 @ 9,569: 14x22 +#638 @ 662,221: 21x19 +#639 @ 972,552: 20x20 +#640 @ 723,243: 17x18 +#641 @ 414,132: 13x10 +#642 @ 167,443: 15x22 +#643 @ 251,284: 19x20 +#644 @ 541,468: 18x22 +#645 @ 556,36: 27x23 +#646 @ 502,411: 26x14 +#647 @ 855,147: 22x28 +#648 @ 259,659: 20x14 +#649 @ 214,483: 26x15 +#650 @ 282,205: 27x26 +#651 @ 564,775: 13x19 +#652 @ 953,930: 18x14 +#653 @ 584,946: 12x26 +#654 @ 769,410: 11x17 +#655 @ 188,186: 28x12 +#656 @ 87,25: 19x15 +#657 @ 231,545: 29x13 +#658 @ 755,239: 20x24 +#659 @ 719,816: 12x10 +#660 @ 461,619: 13x24 +#661 @ 272,799: 18x23 +#662 @ 648,868: 23x15 +#663 @ 246,278: 23x25 +#664 @ 176,369: 12x20 +#665 @ 945,977: 22x19 +#666 @ 457,280: 13x17 +#667 @ 165,89: 18x28 +#668 @ 548,501: 22x12 +#669 @ 223,835: 18x27 +#670 @ 171,110: 13x28 +#671 @ 598,751: 24x22 +#672 @ 972,660: 23x29 +#673 @ 862,681: 15x18 +#674 @ 790,785: 23x24 +#675 @ 914,91: 13x23 +#676 @ 846,12: 24x20 +#677 @ 938,291: 16x26 +#678 @ 624,575: 21x21 +#679 @ 524,550: 22x16 +#680 @ 872,401: 28x19 +#681 @ 362,890: 11x14 +#682 @ 143,127: 22x22 +#683 @ 622,334: 25x13 +#684 @ 50,91: 22x20 +#685 @ 410,598: 15x27 +#686 @ 823,2: 17x29 +#687 @ 365,704: 15x24 +#688 @ 704,340: 17x21 +#689 @ 28,725: 19x17 +#690 @ 378,902: 18x20 +#691 @ 918,530: 25x24 +#692 @ 294,93: 22x15 +#693 @ 415,648: 22x23 +#694 @ 150,395: 16x13 +#695 @ 153,236: 21x17 +#696 @ 607,420: 27x28 +#697 @ 379,116: 21x11 +#698 @ 523,50: 13x21 +#699 @ 129,135: 26x14 +#700 @ 336,298: 22x19 +#701 @ 972,533: 14x23 +#702 @ 323,203: 28x22 +#703 @ 14,198: 17x24 +#704 @ 97,972: 13x14 +#705 @ 392,296: 14x28 +#706 @ 169,164: 24x21 +#707 @ 344,484: 7x12 +#708 @ 263,770: 13x27 +#709 @ 783,534: 16x14 +#710 @ 509,3: 17x22 +#711 @ 208,925: 25x21 +#712 @ 846,22: 15x20 +#713 @ 82,361: 20x15 +#714 @ 258,761: 23x23 +#715 @ 530,318: 29x11 +#716 @ 750,753: 14x17 +#717 @ 200,551: 18x29 +#718 @ 273,676: 9x6 +#719 @ 124,732: 18x20 +#720 @ 660,905: 13x10 +#721 @ 123,820: 12x15 +#722 @ 106,797: 11x14 +#723 @ 427,454: 23x24 +#724 @ 829,930: 10x18 +#725 @ 479,455: 25x12 +#726 @ 484,40: 15x21 +#727 @ 47,721: 10x20 +#728 @ 708,425: 17x20 +#729 @ 224,71: 25x28 +#730 @ 399,901: 21x15 +#731 @ 296,575: 20x19 +#732 @ 150,79: 25x19 +#733 @ 1,799: 28x11 +#734 @ 699,254: 14x25 +#735 @ 484,552: 24x17 +#736 @ 190,806: 14x16 +#737 @ 119,426: 15x17 +#738 @ 618,550: 25x19 +#739 @ 38,405: 29x22 +#740 @ 855,126: 11x29 +#741 @ 485,505: 19x26 +#742 @ 885,358: 12x27 +#743 @ 563,315: 28x17 +#744 @ 878,476: 15x18 +#745 @ 641,148: 25x19 +#746 @ 459,272: 24x24 +#747 @ 497,863: 21x23 +#748 @ 435,687: 13x14 +#749 @ 657,625: 23x11 +#750 @ 763,571: 15x26 +#751 @ 377,591: 14x11 +#752 @ 299,80: 23x17 +#753 @ 138,539: 12x12 +#754 @ 567,478: 23x21 +#755 @ 59,588: 6x4 +#756 @ 635,565: 23x28 +#757 @ 262,580: 21x12 +#758 @ 426,175: 21x23 +#759 @ 548,449: 21x20 +#760 @ 118,720: 22x18 +#761 @ 974,782: 15x10 +#762 @ 56,586: 17x11 +#763 @ 215,49: 12x16 +#764 @ 217,156: 6x3 +#765 @ 656,229: 23x14 +#766 @ 558,860: 25x12 +#767 @ 464,131: 26x10 +#768 @ 917,262: 26x16 +#769 @ 243,230: 14x27 +#770 @ 735,335: 10x27 +#771 @ 467,929: 20x27 +#772 @ 944,972: 16x16 +#773 @ 443,465: 16x14 +#774 @ 85,432: 20x14 +#775 @ 924,775: 12x16 +#776 @ 667,234: 11x19 +#777 @ 658,693: 14x20 +#778 @ 532,892: 23x29 +#779 @ 194,147: 28x24 +#780 @ 513,945: 15x23 +#781 @ 801,905: 12x17 +#782 @ 168,869: 19x24 +#783 @ 532,432: 22x12 +#784 @ 762,550: 27x11 +#785 @ 334,193: 16x14 +#786 @ 71,785: 10x7 +#787 @ 10,116: 11x21 +#788 @ 229,421: 11x15 +#789 @ 637,278: 17x22 +#790 @ 709,184: 28x29 +#791 @ 179,698: 12x26 +#792 @ 209,43: 24x12 +#793 @ 423,912: 26x27 +#794 @ 187,363: 17x10 +#795 @ 624,842: 22x12 +#796 @ 77,561: 19x23 +#797 @ 422,345: 28x13 +#798 @ 958,220: 21x21 +#799 @ 805,977: 17x18 +#800 @ 905,579: 16x12 +#801 @ 188,363: 10x21 +#802 @ 383,607: 21x22 +#803 @ 769,213: 4x13 +#804 @ 503,905: 19x23 +#805 @ 575,821: 16x19 +#806 @ 200,974: 27x25 +#807 @ 123,390: 27x29 +#808 @ 776,11: 22x26 +#809 @ 921,770: 16x27 +#810 @ 694,781: 13x20 +#811 @ 369,947: 13x19 +#812 @ 971,677: 16x11 +#813 @ 727,381: 3x11 +#814 @ 571,312: 21x12 +#815 @ 520,646: 18x29 +#816 @ 769,866: 7x9 +#817 @ 677,919: 27x12 +#818 @ 822,630: 20x14 +#819 @ 657,618: 15x11 +#820 @ 978,515: 18x27 +#821 @ 13,230: 21x20 +#822 @ 163,117: 21x18 +#823 @ 87,716: 23x11 +#824 @ 720,937: 22x12 +#825 @ 677,223: 20x20 +#826 @ 446,625: 20x24 +#827 @ 509,431: 23x20 +#828 @ 737,549: 13x19 +#829 @ 697,57: 13x25 +#830 @ 734,869: 13x23 +#831 @ 337,375: 12x22 +#832 @ 750,338: 10x6 +#833 @ 251,301: 18x18 +#834 @ 386,226: 12x13 +#835 @ 514,908: 22x24 +#836 @ 761,857: 19x24 +#837 @ 390,18: 8x8 +#838 @ 851,69: 14x17 +#839 @ 910,911: 18x12 +#840 @ 506,308: 4x14 +#841 @ 146,62: 27x12 +#842 @ 421,30: 11x19 +#843 @ 130,542: 24x24 +#844 @ 127,388: 14x26 +#845 @ 860,908: 24x23 +#846 @ 516,53: 15x14 +#847 @ 360,211: 15x23 +#848 @ 227,314: 29x29 +#849 @ 27,387: 29x20 +#850 @ 167,846: 25x21 +#851 @ 133,646: 16x15 +#852 @ 420,956: 18x19 +#853 @ 943,684: 13x25 +#854 @ 84,816: 22x13 +#855 @ 200,767: 28x10 +#856 @ 148,50: 22x22 +#857 @ 931,159: 20x20 +#858 @ 674,240: 18x25 +#859 @ 390,643: 18x18 +#860 @ 155,862: 17x24 +#861 @ 545,873: 29x29 +#862 @ 851,192: 26x26 +#863 @ 688,880: 26x16 +#864 @ 170,27: 16x24 +#865 @ 755,555: 10x12 +#866 @ 204,43: 26x22 +#867 @ 626,633: 14x14 +#868 @ 315,709: 7x7 +#869 @ 284,944: 11x23 +#870 @ 361,115: 25x20 +#871 @ 580,510: 22x13 +#872 @ 107,457: 27x25 +#873 @ 728,227: 17x12 +#874 @ 584,962: 18x19 +#875 @ 976,629: 15x16 +#876 @ 100,655: 10x14 +#877 @ 686,734: 10x15 +#878 @ 805,958: 19x26 +#879 @ 870,254: 15x22 +#880 @ 429,972: 16x13 +#881 @ 958,922: 15x14 +#882 @ 773,150: 25x29 +#883 @ 908,821: 19x24 +#884 @ 626,289: 17x23 +#885 @ 582,546: 27x14 +#886 @ 895,787: 29x16 +#887 @ 474,489: 12x28 +#888 @ 736,241: 15x13 +#889 @ 130,435: 25x14 +#890 @ 773,916: 18x15 +#891 @ 597,882: 16x13 +#892 @ 864,581: 18x18 +#893 @ 366,925: 24x29 +#894 @ 139,266: 14x25 +#895 @ 549,851: 25x12 +#896 @ 812,483: 17x19 +#897 @ 320,115: 14x12 +#898 @ 590,350: 11x25 +#899 @ 930,121: 25x10 +#900 @ 174,75: 23x17 +#901 @ 366,409: 28x14 +#902 @ 795,169: 28x19 +#903 @ 391,604: 26x18 +#904 @ 624,187: 28x23 +#905 @ 322,365: 10x14 +#906 @ 406,421: 15x12 +#907 @ 290,72: 27x16 +#908 @ 811,161: 12x13 +#909 @ 862,806: 15x12 +#910 @ 679,867: 17x12 +#911 @ 242,661: 28x20 +#912 @ 354,790: 17x18 +#913 @ 149,781: 17x20 +#914 @ 355,92: 13x28 +#915 @ 165,858: 26x24 +#916 @ 790,691: 26x27 +#917 @ 124,926: 20x22 +#918 @ 843,269: 14x15 +#919 @ 235,828: 15x24 +#920 @ 896,146: 15x21 +#921 @ 884,466: 26x19 +#922 @ 71,544: 22x29 +#923 @ 218,161: 10x29 +#924 @ 556,87: 24x27 +#925 @ 385,884: 23x11 +#926 @ 380,583: 18x17 +#927 @ 134,202: 28x18 +#928 @ 971,617: 11x12 +#929 @ 422,932: 11x12 +#930 @ 432,498: 29x11 +#931 @ 409,642: 17x26 +#932 @ 634,845: 20x22 +#933 @ 583,515: 5x4 +#934 @ 466,628: 23x10 +#935 @ 265,818: 17x16 +#936 @ 453,667: 18x12 +#937 @ 841,203: 11x24 +#938 @ 849,324: 20x27 +#939 @ 549,325: 18x14 +#940 @ 164,23: 20x10 +#941 @ 351,275: 5x6 +#942 @ 463,908: 17x16 +#943 @ 972,650: 18x21 +#944 @ 249,808: 5x3 +#945 @ 933,770: 14x18 +#946 @ 626,471: 10x25 +#947 @ 336,389: 27x12 +#948 @ 238,209: 8x4 +#949 @ 879,202: 23x13 +#950 @ 847,746: 27x16 +#951 @ 102,796: 14x27 +#952 @ 448,453: 11x19 +#953 @ 387,764: 23x14 +#954 @ 597,438: 24x25 +#955 @ 295,33: 15x20 +#956 @ 972,394: 11x14 +#957 @ 623,939: 19x29 +#958 @ 507,199: 17x21 +#959 @ 84,968: 28x22 +#960 @ 765,619: 23x11 +#961 @ 948,493: 25x12 +#962 @ 365,906: 14x13 +#963 @ 741,536: 25x14 +#964 @ 87,479: 10x10 +#965 @ 963,504: 14x29 +#966 @ 648,838: 19x20 +#967 @ 580,261: 16x21 +#968 @ 579,150: 24x15 +#969 @ 395,113: 13x21 +#970 @ 196,22: 14x25 +#971 @ 19,352: 18x18 +#972 @ 875,81: 13x20 +#973 @ 17,577: 25x18 +#974 @ 843,221: 10x27 +#975 @ 825,165: 23x11 +#976 @ 575,308: 13x10 +#977 @ 867,652: 15x12 +#978 @ 259,809: 19x20 +#979 @ 724,379: 13x17 +#980 @ 9,573: 13x15 +#981 @ 419,752: 25x21 +#982 @ 13,607: 29x23 +#983 @ 963,938: 14x14 +#984 @ 908,724: 15x23 +#985 @ 507,36: 28x20 +#986 @ 168,712: 26x16 +#987 @ 925,146: 21x19 +#988 @ 155,583: 27x23 +#989 @ 758,731: 12x17 +#990 @ 666,903: 14x28 +#991 @ 375,649: 16x18 +#992 @ 658,151: 21x13 +#993 @ 393,58: 24x16 +#994 @ 57,976: 10x13 +#995 @ 14,933: 10x13 +#996 @ 293,190: 12x24 +#997 @ 672,238: 16x19 +#998 @ 388,15: 13x18 +#999 @ 698,823: 25x18 +#1000 @ 405,345: 20x15 +#1001 @ 418,231: 20x11 +#1002 @ 203,886: 23x14 +#1003 @ 798,475: 12x26 +#1004 @ 836,184: 13x12 +#1005 @ 286,617: 22x27 +#1006 @ 422,210: 26x22 +#1007 @ 304,267: 3x7 +#1008 @ 483,170: 21x23 +#1009 @ 118,29: 14x15 +#1010 @ 559,371: 23x11 +#1011 @ 817,152: 10x23 +#1012 @ 111,826: 13x13 +#1013 @ 366,243: 12x12 +#1014 @ 329,549: 18x17 +#1015 @ 248,682: 10x11 +#1016 @ 416,375: 17x11 +#1017 @ 652,44: 20x21 +#1018 @ 628,971: 3x6 +#1019 @ 378,155: 17x10 +#1020 @ 616,460: 28x23 +#1021 @ 359,407: 10x22 +#1022 @ 840,907: 18x24 +#1023 @ 267,590: 16x13 +#1024 @ 623,367: 17x12 +#1025 @ 299,574: 28x28 +#1026 @ 189,368: 24x20 +#1027 @ 949,375: 22x21 +#1028 @ 382,946: 20x12 +#1029 @ 186,952: 15x26 +#1030 @ 562,698: 14x21 +#1031 @ 102,933: 28x19 +#1032 @ 731,351: 24x14 +#1033 @ 695,70: 18x12 +#1034 @ 313,307: 13x14 +#1035 @ 589,889: 20x12 +#1036 @ 937,167: 29x10 +#1037 @ 816,39: 12x11 +#1038 @ 383,882: 19x21 +#1039 @ 624,35: 24x24 +#1040 @ 47,172: 26x10 +#1041 @ 436,182: 27x12 +#1042 @ 786,610: 23x10 +#1043 @ 232,206: 27x12 +#1044 @ 66,782: 21x10 +#1045 @ 287,743: 26x23 +#1046 @ 448,693: 28x17 +#1047 @ 272,169: 18x27 +#1048 @ 11,593: 15x15 +#1049 @ 8,950: 6x11 +#1050 @ 546,125: 19x12 +#1051 @ 865,750: 15x16 +#1052 @ 354,207: 18x12 +#1053 @ 202,823: 18x10 +#1054 @ 570,369: 18x24 +#1055 @ 311,60: 11x29 +#1056 @ 626,969: 10x11 +#1057 @ 252,970: 23x19 +#1058 @ 118,116: 17x27 +#1059 @ 796,187: 21x22 +#1060 @ 277,572: 28x18 +#1061 @ 804,581: 22x17 +#1062 @ 728,417: 10x11 +#1063 @ 577,958: 23x10 +#1064 @ 874,299: 25x21 +#1065 @ 239,217: 26x14 +#1066 @ 196,781: 11x11 +#1067 @ 705,842: 24x11 +#1068 @ 251,757: 27x28 +#1069 @ 463,379: 22x15 +#1070 @ 457,265: 23x13 +#1071 @ 827,388: 26x28 +#1072 @ 410,372: 14x22 +#1073 @ 56,812: 22x15 +#1074 @ 839,14: 10x13 +#1075 @ 158,691: 23x25 +#1076 @ 771,577: 20x15 +#1077 @ 505,554: 17x27 +#1078 @ 484,506: 23x23 +#1079 @ 895,794: 28x27 +#1080 @ 228,565: 16x27 +#1081 @ 601,965: 27x25 +#1082 @ 947,171: 17x15 +#1083 @ 372,699: 11x23 +#1084 @ 360,51: 18x15 +#1085 @ 850,528: 29x25 +#1086 @ 299,220: 21x25 +#1087 @ 519,11: 19x29 +#1088 @ 711,787: 17x20 +#1089 @ 717,412: 16x23 +#1090 @ 645,855: 11x20 +#1091 @ 653,151: 15x21 +#1092 @ 579,531: 26x16 +#1093 @ 226,83: 17x27 +#1094 @ 852,712: 16x14 +#1095 @ 677,237: 27x25 +#1096 @ 340,657: 19x29 +#1097 @ 275,187: 28x25 +#1098 @ 98,407: 12x19 +#1099 @ 220,931: 25x24 +#1100 @ 957,368: 23x23 +#1101 @ 440,753: 27x12 +#1102 @ 472,217: 13x14 +#1103 @ 869,268: 16x21 +#1104 @ 637,578: 27x15 +#1105 @ 916,587: 29x20 +#1106 @ 58,315: 24x21 +#1107 @ 198,884: 10x22 +#1108 @ 458,399: 16x15 +#1109 @ 442,731: 10x14 +#1110 @ 602,239: 20x19 +#1111 @ 302,295: 16x19 +#1112 @ 380,822: 25x13 +#1113 @ 567,219: 15x24 +#1114 @ 795,302: 17x14 +#1115 @ 82,698: 20x28 +#1116 @ 617,834: 18x27 +#1117 @ 210,217: 25x24 +#1118 @ 665,521: 11x24 +#1119 @ 272,29: 14x20 +#1120 @ 147,266: 22x11 +#1121 @ 30,830: 20x24 +#1122 @ 597,194: 26x23 +#1123 @ 784,32: 24x22 +#1124 @ 95,97: 19x14 +#1125 @ 688,769: 19x18 +#1126 @ 60,977: 22x11 +#1127 @ 480,493: 28x19 +#1128 @ 357,723: 20x20 +#1129 @ 145,939: 29x19 +#1130 @ 427,255: 14x27 +#1131 @ 636,625: 27x13 +#1132 @ 109,645: 15x17 +#1133 @ 873,182: 21x25 +#1134 @ 676,504: 10x29 +#1135 @ 469,251: 10x20 +#1136 @ 312,635: 21x22 +#1137 @ 129,132: 15x12 +#1138 @ 176,767: 22x19 +#1139 @ 751,347: 18x15 +#1140 @ 316,287: 20x21 +#1141 @ 808,577: 25x12 +#1142 @ 940,272: 19x22 +#1143 @ 253,767: 4x5 +#1144 @ 504,414: 20x5 +#1145 @ 574,762: 11x19 +#1146 @ 430,726: 24x22 +#1147 @ 470,267: 15x20 +#1148 @ 822,951: 26x13 +#1149 @ 829,234: 25x17 +#1150 @ 324,375: 25x25 +#1151 @ 670,234: 11x12 +#1152 @ 859,138: 28x20 +#1153 @ 669,681: 12x17 +#1154 @ 901,338: 17x29 +#1155 @ 58,805: 21x27 +#1156 @ 868,353: 20x28 +#1157 @ 861,470: 28x27 +#1158 @ 700,78: 17x18 +#1159 @ 967,117: 20x11 +#1160 @ 395,130: 12x15 +#1161 @ 764,264: 28x18 +#1162 @ 327,115: 20x16 +#1163 @ 150,105: 26x10 +#1164 @ 894,132: 13x18 +#1165 @ 39,177: 19x16 +#1166 @ 437,857: 13x15 +#1167 @ 483,459: 9x3 +#1168 @ 554,473: 25x16 +#1169 @ 17,471: 24x24 +#1170 @ 472,60: 16x27 +#1171 @ 636,537: 17x29 +#1172 @ 408,327: 16x26 +#1173 @ 679,669: 25x20 +#1174 @ 374,878: 13x15 +#1175 @ 873,977: 14x10 +#1176 @ 439,181: 10x19 +#1177 @ 602,310: 25x27 +#1178 @ 275,803: 29x11 +#1179 @ 440,745: 18x26 +#1180 @ 161,72: 22x18 +#1181 @ 500,174: 12x16 +#1182 @ 644,224: 11x22 +#1183 @ 264,168: 15x20 +#1184 @ 859,804: 24x17 +#1185 @ 568,812: 23x11 +#1186 @ 201,779: 20x16 +#1187 @ 266,166: 13x13 +#1188 @ 204,153: 26x10 +#1189 @ 650,384: 12x27 +#1190 @ 28,489: 12x21 +#1191 @ 560,126: 27x15 +#1192 @ 736,763: 19x28 +#1193 @ 567,208: 26x14 +#1194 @ 517,972: 20x14 +#1195 @ 238,807: 23x13 +#1196 @ 249,360: 28x11 +#1197 @ 968,831: 26x27 +#1198 @ 366,27: 25x16 +#1199 @ 416,42: 28x20 +#1200 @ 810,806: 17x26 +#1201 @ 764,897: 15x21 +#1202 @ 30,339: 12x28 +#1203 @ 347,641: 29x10 +#1204 @ 333,805: 27x24 +#1205 @ 913,98: 12x16 +#1206 @ 481,344: 18x15 +#1207 @ 41,225: 15x27 +#1208 @ 224,109: 11x17 +#1209 @ 611,275: 21x14 +#1210 @ 340,814: 14x18 +#1211 @ 150,188: 29x20 +#1212 @ 749,324: 20x24 +#1213 @ 645,539: 13x27 +#1214 @ 768,364: 15x22 +#1215 @ 966,789: 14x21 +#1216 @ 372,27: 10x20 +#1217 @ 685,204: 19x27 +#1218 @ 667,533: 6x3 +#1219 @ 764,927: 27x23 +#1220 @ 389,103: 22x22 +#1221 @ 878,736: 28x19 +#1222 @ 529,565: 23x15 +#1223 @ 273,958: 12x26 +#1224 @ 422,44: 18x10 +#1225 @ 162,850: 19x24 +#1226 @ 856,461: 27x13 +#1227 @ 97,370: 16x11 +#1228 @ 392,822: 18x10 +#1229 @ 302,427: 24x15 +#1230 @ 500,890: 17x23 +#1231 @ 138,789: 20x14 +#1232 @ 217,776: 25x19 +#1233 @ 923,156: 16x21 diff --git a/03/part1.js b/03/part1.js new file mode 100644 index 0000000..a5e531a --- /dev/null +++ b/03/part1.js @@ -0,0 +1,18 @@ +var input = require("fs").readFileSync("input.txt").toString().split("\n").filter(a=>a); +var sqs = input.map((a)=>(a.match(/#\d+ @ (\d+),(\d+): (\d+)x(\d+)/)).map(a=>(parseInt(a))).filter(a=>(a>=0))); + +var xa = Math.min.apply(null, sqs.map(a=>(a[0]))); +var ya = Math.min.apply(null, sqs.map(a=>(a[1]))); +var xb = Math.max.apply(null, sqs.map(a=>(a[0]+a[2]))); +var yb = Math.max.apply(null, sqs.map(a=>(a[1]+a[3]))); + +var count = 0; +for(var x = xa; x <= xb; x++){ + for(var y = ya; y <= yb; y++){ + if(sqs.filter(a=>( (a[0] <= x) && ((a[0] + a[2]) > x) && (a[1] <= y) && ((a[1]) + a[3]) > y)).length >= 2){ + count++; + } + } +} + +console.log(count); diff --git a/03/part2.js b/03/part2.js new file mode 100644 index 0000000..a1630f5 --- /dev/null +++ b/03/part2.js @@ -0,0 +1,30 @@ +var input = require("fs").readFileSync("input.txt").toString().split("\n").filter(a=>a); +var sqs = input.map((a)=>(a.match(/#\d+ @ (\d+),(\d+): (\d+)x(\d+)/)).map(a=>(parseInt(a))).filter(a=>(a>=0))); + +function overlapa(a, b){ + xa1 = a[0] + xa2 = a[0] + a[2] - 1; + xb1 = b[0]; + xb2 = b[0] + b[2] - 1; + + ya1 = a[1] + ya2 = a[1] + a[3] - 1; + yb1 = b[1]; + yb2 = b[1] + b[3] - 1; + + return ( + (((xa1 >= xb1) && (xa1 <= xb2)) || ((xa2 >= xb1) && (xa2 <= xb2))) + && + (((ya1 >= yb1) && (ya1 <= yb2)) || ((ya2 >= yb1) && (ya2 <= yb2))) + ) +} + +function overlap(a,b){ + return overlapa(a,b) || overlapa(b,a); +} + +for(var i in sqs){ + if(sqs.filter(sq=>(overlap(sq, sqs[i]))).length == 1){ + console.log(i + 1); + } +} diff --git a/04/input-test.txt b/04/input-test.txt new file mode 100644 index 0000000..496d314 --- /dev/null +++ b/04/input-test.txt @@ -0,0 +1,17 @@ +[1518-11-01 00:00] Guard #10 begins shift +[1518-11-01 00:05] falls asleep +[1518-11-01 00:25] wakes up +[1518-11-01 00:30] falls asleep +[1518-11-01 00:55] wakes up +[1518-11-01 23:58] Guard #99 begins shift +[1518-11-02 00:40] falls asleep +[1518-11-02 00:50] wakes up +[1518-11-03 00:05] Guard #10 begins shift +[1518-11-03 00:24] falls asleep +[1518-11-03 00:29] wakes up +[1518-11-04 00:02] Guard #99 begins shift +[1518-11-04 00:36] falls asleep +[1518-11-04 00:46] wakes up +[1518-11-05 00:03] Guard #99 begins shift +[1518-11-05 00:45] falls asleep +[1518-11-05 00:55] wakes up diff --git a/04/input.txt b/04/input.txt new file mode 100644 index 0000000..2cb73d5 --- /dev/null +++ b/04/input.txt @@ -0,0 +1,1017 @@ +[1518-09-19 00:42] wakes up +[1518-08-06 00:16] wakes up +[1518-07-18 00:14] wakes up +[1518-03-23 00:19] falls asleep +[1518-10-12 23:58] Guard #421 begins shift +[1518-08-05 00:24] falls asleep +[1518-09-18 00:48] wakes up +[1518-08-03 00:57] wakes up +[1518-03-08 00:00] falls asleep +[1518-03-06 23:47] Guard #1009 begins shift +[1518-10-14 00:03] falls asleep +[1518-06-15 00:51] falls asleep +[1518-10-09 23:57] Guard #1667 begins shift +[1518-10-21 00:21] falls asleep +[1518-09-03 00:02] falls asleep +[1518-03-11 00:08] wakes up +[1518-08-13 00:10] falls asleep +[1518-08-25 00:11] falls asleep +[1518-08-18 00:14] falls asleep +[1518-10-05 00:51] wakes up +[1518-05-22 00:38] wakes up +[1518-11-01 00:54] wakes up +[1518-06-09 00:36] wakes up +[1518-10-30 23:56] Guard #3167 begins shift +[1518-04-05 00:03] falls asleep +[1518-09-26 00:51] wakes up +[1518-09-06 00:34] wakes up +[1518-11-21 00:27] wakes up +[1518-07-17 00:02] falls asleep +[1518-06-25 00:51] falls asleep +[1518-11-22 00:38] wakes up +[1518-10-14 00:10] wakes up +[1518-07-23 00:50] falls asleep +[1518-07-15 00:48] falls asleep +[1518-03-14 00:00] Guard #1163 begins shift +[1518-07-22 00:46] falls asleep +[1518-10-24 00:51] wakes up +[1518-09-27 23:58] Guard #277 begins shift +[1518-10-03 00:58] wakes up +[1518-11-07 23:59] Guard #683 begins shift +[1518-04-06 00:45] falls asleep +[1518-06-13 00:59] wakes up +[1518-11-13 00:55] falls asleep +[1518-09-27 00:01] falls asleep +[1518-07-24 00:51] wakes up +[1518-05-27 00:44] wakes up +[1518-07-26 00:55] wakes up +[1518-04-13 00:48] falls asleep +[1518-10-25 00:38] wakes up +[1518-10-07 00:24] falls asleep +[1518-08-27 00:00] Guard #1061 begins shift +[1518-04-03 23:54] Guard #109 begins shift +[1518-07-08 00:34] falls asleep +[1518-07-26 23:56] Guard #421 begins shift +[1518-11-19 00:00] Guard #863 begins shift +[1518-03-10 00:50] wakes up +[1518-08-01 00:35] falls asleep +[1518-10-13 00:18] wakes up +[1518-04-12 00:56] wakes up +[1518-06-17 00:39] falls asleep +[1518-06-29 00:49] wakes up +[1518-06-15 00:53] wakes up +[1518-09-28 00:50] falls asleep +[1518-05-25 00:03] Guard #421 begins shift +[1518-04-13 00:54] wakes up +[1518-05-19 00:27] falls asleep +[1518-09-22 00:17] falls asleep +[1518-09-02 23:52] Guard #509 begins shift +[1518-03-25 00:00] falls asleep +[1518-06-24 00:00] Guard #1777 begins shift +[1518-08-04 00:02] falls asleep +[1518-07-19 00:53] wakes up +[1518-09-05 23:46] Guard #1163 begins shift +[1518-07-16 00:55] wakes up +[1518-03-29 00:23] falls asleep +[1518-03-13 00:41] wakes up +[1518-10-28 00:46] wakes up +[1518-07-05 00:20] falls asleep +[1518-06-16 00:54] wakes up +[1518-06-19 23:58] Guard #1009 begins shift +[1518-10-27 00:53] falls asleep +[1518-10-15 00:06] falls asleep +[1518-04-01 00:45] wakes up +[1518-06-07 00:23] falls asleep +[1518-09-01 00:58] wakes up +[1518-06-01 00:23] wakes up +[1518-11-08 00:55] wakes up +[1518-09-19 00:49] falls asleep +[1518-07-19 00:49] falls asleep +[1518-06-02 00:40] wakes up +[1518-06-22 00:29] wakes up +[1518-11-16 23:52] Guard #1061 begins shift +[1518-07-25 00:45] wakes up +[1518-05-19 00:33] wakes up +[1518-11-12 00:45] wakes up +[1518-06-19 00:56] falls asleep +[1518-05-05 00:34] wakes up +[1518-05-13 00:00] Guard #2521 begins shift +[1518-06-21 00:02] Guard #1009 begins shift +[1518-09-17 00:46] wakes up +[1518-08-20 00:16] wakes up +[1518-03-25 00:55] wakes up +[1518-06-02 00:45] falls asleep +[1518-11-05 00:03] Guard #2539 begins shift +[1518-07-26 00:10] falls asleep +[1518-07-12 00:57] wakes up +[1518-06-13 00:40] wakes up +[1518-08-24 00:50] wakes up +[1518-03-06 00:32] falls asleep +[1518-06-28 00:50] wakes up +[1518-06-27 00:19] wakes up +[1518-11-20 00:21] falls asleep +[1518-03-13 00:10] falls asleep +[1518-06-02 00:05] falls asleep +[1518-09-05 00:21] falls asleep +[1518-09-02 00:02] Guard #109 begins shift +[1518-09-23 00:50] wakes up +[1518-08-04 00:58] wakes up +[1518-05-03 00:55] wakes up +[1518-04-24 00:13] falls asleep +[1518-09-01 00:57] falls asleep +[1518-03-19 23:59] Guard #3167 begins shift +[1518-05-28 00:22] falls asleep +[1518-11-14 00:33] wakes up +[1518-10-09 00:08] wakes up +[1518-08-10 00:38] wakes up +[1518-08-15 00:19] falls asleep +[1518-07-05 00:51] wakes up +[1518-10-20 00:56] wakes up +[1518-06-23 00:42] wakes up +[1518-05-05 00:19] falls asleep +[1518-05-15 00:45] wakes up +[1518-07-13 00:34] wakes up +[1518-04-12 23:58] Guard #2269 begins shift +[1518-08-19 00:09] falls asleep +[1518-04-21 00:33] falls asleep +[1518-08-20 00:43] wakes up +[1518-07-12 00:56] falls asleep +[1518-05-27 00:36] falls asleep +[1518-08-17 00:49] falls asleep +[1518-11-18 00:48] wakes up +[1518-08-05 00:10] wakes up +[1518-06-30 00:37] falls asleep +[1518-06-02 00:55] wakes up +[1518-09-06 00:05] falls asleep +[1518-08-09 00:00] Guard #3083 begins shift +[1518-06-24 23:59] Guard #1229 begins shift +[1518-09-28 00:58] wakes up +[1518-06-18 00:41] wakes up +[1518-05-23 00:03] Guard #1061 begins shift +[1518-06-23 00:30] wakes up +[1518-05-17 00:59] wakes up +[1518-07-18 00:00] Guard #1163 begins shift +[1518-06-27 00:59] wakes up +[1518-08-08 00:01] Guard #2521 begins shift +[1518-03-17 00:43] falls asleep +[1518-04-14 00:47] wakes up +[1518-05-23 23:53] Guard #701 begins shift +[1518-08-28 00:51] falls asleep +[1518-10-18 23:56] Guard #1667 begins shift +[1518-04-10 00:51] wakes up +[1518-10-22 00:15] falls asleep +[1518-07-01 00:57] wakes up +[1518-06-24 00:49] falls asleep +[1518-10-27 00:29] falls asleep +[1518-03-19 00:56] wakes up +[1518-06-05 00:00] Guard #1229 begins shift +[1518-09-13 00:04] Guard #179 begins shift +[1518-04-28 00:49] falls asleep +[1518-09-18 00:24] falls asleep +[1518-09-20 00:25] wakes up +[1518-08-05 00:56] wakes up +[1518-03-22 00:42] wakes up +[1518-08-11 00:28] falls asleep +[1518-07-02 00:27] falls asleep +[1518-05-06 00:52] wakes up +[1518-03-12 00:37] wakes up +[1518-07-17 00:16] falls asleep +[1518-03-29 00:54] wakes up +[1518-10-05 00:02] Guard #2539 begins shift +[1518-04-30 00:51] wakes up +[1518-07-10 00:25] wakes up +[1518-10-03 00:00] Guard #1061 begins shift +[1518-04-19 00:29] wakes up +[1518-05-18 23:58] Guard #1163 begins shift +[1518-10-29 00:12] falls asleep +[1518-09-18 00:36] wakes up +[1518-11-12 00:14] falls asleep +[1518-03-06 00:49] falls asleep +[1518-09-28 00:30] falls asleep +[1518-04-12 00:00] Guard #683 begins shift +[1518-03-11 00:23] wakes up +[1518-05-02 23:51] Guard #863 begins shift +[1518-10-18 00:27] falls asleep +[1518-08-05 23:52] Guard #3083 begins shift +[1518-07-10 23:56] Guard #421 begins shift +[1518-06-16 00:41] falls asleep +[1518-11-10 23:59] Guard #1229 begins shift +[1518-10-08 00:28] falls asleep +[1518-04-08 00:59] wakes up +[1518-07-03 00:02] Guard #701 begins shift +[1518-11-21 23:50] Guard #421 begins shift +[1518-11-19 00:52] wakes up +[1518-07-31 23:56] Guard #1009 begins shift +[1518-06-17 00:31] wakes up +[1518-06-24 00:42] wakes up +[1518-08-21 00:20] wakes up +[1518-09-07 00:02] Guard #863 begins shift +[1518-07-15 00:05] falls asleep +[1518-04-25 00:53] wakes up +[1518-08-06 00:01] falls asleep +[1518-03-25 23:50] Guard #1381 begins shift +[1518-03-26 23:56] Guard #3167 begins shift +[1518-03-04 23:58] Guard #683 begins shift +[1518-05-15 00:36] falls asleep +[1518-03-24 00:52] falls asleep +[1518-06-27 00:45] falls asleep +[1518-05-12 00:47] falls asleep +[1518-06-13 00:55] falls asleep +[1518-06-25 00:11] falls asleep +[1518-07-04 00:02] Guard #2521 begins shift +[1518-04-14 00:13] wakes up +[1518-11-19 00:50] falls asleep +[1518-05-07 00:19] wakes up +[1518-04-15 00:53] wakes up +[1518-04-28 00:27] falls asleep +[1518-11-13 00:12] wakes up +[1518-07-21 00:46] wakes up +[1518-05-01 23:58] Guard #683 begins shift +[1518-03-07 00:02] falls asleep +[1518-04-08 00:34] falls asleep +[1518-10-31 00:44] falls asleep +[1518-03-07 23:48] Guard #2269 begins shift +[1518-08-03 00:03] Guard #2539 begins shift +[1518-07-06 00:16] falls asleep +[1518-07-09 00:42] wakes up +[1518-09-04 00:11] falls asleep +[1518-04-20 23:59] Guard #683 begins shift +[1518-06-28 00:00] Guard #2539 begins shift +[1518-09-26 00:22] falls asleep +[1518-10-03 00:20] falls asleep +[1518-06-19 00:18] falls asleep +[1518-03-21 00:01] Guard #1381 begins shift +[1518-04-25 00:17] falls asleep +[1518-09-20 00:56] wakes up +[1518-11-02 00:02] Guard #683 begins shift +[1518-06-25 00:40] wakes up +[1518-04-13 00:38] falls asleep +[1518-03-18 00:33] falls asleep +[1518-04-17 00:22] falls asleep +[1518-06-12 00:28] falls asleep +[1518-10-26 00:00] Guard #179 begins shift +[1518-07-14 23:50] Guard #863 begins shift +[1518-04-15 00:22] falls asleep +[1518-05-29 00:19] falls asleep +[1518-11-21 00:24] falls asleep +[1518-10-29 23:59] Guard #421 begins shift +[1518-04-21 00:08] falls asleep +[1518-03-30 23:57] Guard #863 begins shift +[1518-03-05 00:34] falls asleep +[1518-08-28 00:46] wakes up +[1518-05-20 00:32] wakes up +[1518-03-03 00:00] Guard #2269 begins shift +[1518-11-05 00:27] falls asleep +[1518-07-22 00:50] wakes up +[1518-04-01 23:53] Guard #109 begins shift +[1518-05-28 00:53] wakes up +[1518-07-21 00:34] falls asleep +[1518-06-26 00:48] wakes up +[1518-03-10 23:49] Guard #863 begins shift +[1518-11-19 23:50] Guard #3167 begins shift +[1518-07-09 00:58] wakes up +[1518-10-20 00:03] Guard #1229 begins shift +[1518-06-30 00:42] wakes up +[1518-07-23 00:54] wakes up +[1518-04-06 00:49] falls asleep +[1518-04-14 00:00] Guard #1381 begins shift +[1518-05-26 00:00] Guard #277 begins shift +[1518-04-07 00:14] falls asleep +[1518-04-10 00:14] falls asleep +[1518-05-04 00:58] wakes up +[1518-07-14 00:08] falls asleep +[1518-07-27 00:54] wakes up +[1518-06-07 00:26] wakes up +[1518-11-17 00:40] wakes up +[1518-05-17 23:57] Guard #1381 begins shift +[1518-05-09 00:00] Guard #2539 begins shift +[1518-03-28 00:57] wakes up +[1518-04-10 00:49] falls asleep +[1518-05-26 00:35] falls asleep +[1518-06-29 00:40] falls asleep +[1518-06-20 00:10] falls asleep +[1518-11-04 00:38] falls asleep +[1518-06-30 00:29] wakes up +[1518-11-01 00:15] falls asleep +[1518-04-09 00:15] falls asleep +[1518-06-27 00:38] wakes up +[1518-04-18 00:07] falls asleep +[1518-10-25 00:09] falls asleep +[1518-10-17 00:21] wakes up +[1518-11-18 00:30] falls asleep +[1518-07-30 00:04] Guard #1777 begins shift +[1518-03-15 00:48] falls asleep +[1518-03-18 00:53] wakes up +[1518-11-03 00:07] wakes up +[1518-05-10 00:57] wakes up +[1518-04-10 00:33] wakes up +[1518-09-25 00:50] wakes up +[1518-06-21 00:52] falls asleep +[1518-04-21 00:48] wakes up +[1518-08-19 00:17] wakes up +[1518-08-20 00:35] falls asleep +[1518-08-26 00:00] Guard #3331 begins shift +[1518-07-10 00:00] falls asleep +[1518-03-30 00:22] falls asleep +[1518-06-03 23:56] Guard #863 begins shift +[1518-06-12 00:01] Guard #683 begins shift +[1518-04-30 00:02] Guard #1381 begins shift +[1518-11-13 00:11] falls asleep +[1518-09-23 00:00] Guard #3331 begins shift +[1518-11-04 00:57] wakes up +[1518-10-24 00:17] wakes up +[1518-04-11 00:04] Guard #277 begins shift +[1518-07-16 00:31] falls asleep +[1518-07-07 00:34] wakes up +[1518-04-24 00:59] wakes up +[1518-06-05 00:27] falls asleep +[1518-07-05 00:00] Guard #277 begins shift +[1518-05-02 00:31] falls asleep +[1518-04-05 00:33] falls asleep +[1518-06-07 00:33] falls asleep +[1518-07-14 00:56] wakes up +[1518-10-05 00:49] falls asleep +[1518-03-07 00:51] wakes up +[1518-05-22 00:18] falls asleep +[1518-03-17 00:29] wakes up +[1518-03-15 00:30] falls asleep +[1518-07-29 00:49] wakes up +[1518-08-24 23:59] Guard #3331 begins shift +[1518-10-04 00:56] wakes up +[1518-05-20 23:46] Guard #863 begins shift +[1518-05-14 00:14] falls asleep +[1518-10-24 00:34] falls asleep +[1518-03-10 00:44] falls asleep +[1518-09-07 00:28] wakes up +[1518-03-10 00:18] falls asleep +[1518-06-08 23:49] Guard #1061 begins shift +[1518-05-30 00:58] wakes up +[1518-10-12 00:55] wakes up +[1518-05-07 23:56] Guard #701 begins shift +[1518-11-12 00:58] wakes up +[1518-11-15 00:03] falls asleep +[1518-08-28 00:04] Guard #3167 begins shift +[1518-03-20 00:47] wakes up +[1518-03-26 00:45] falls asleep +[1518-04-14 00:26] falls asleep +[1518-06-01 00:00] Guard #1061 begins shift +[1518-04-27 00:32] wakes up +[1518-07-16 00:47] falls asleep +[1518-03-27 00:08] falls asleep +[1518-09-07 00:57] wakes up +[1518-05-25 00:11] falls asleep +[1518-07-27 23:59] Guard #863 begins shift +[1518-06-21 23:58] Guard #421 begins shift +[1518-09-12 00:55] wakes up +[1518-11-14 00:52] wakes up +[1518-08-19 00:32] falls asleep +[1518-04-30 23:46] Guard #109 begins shift +[1518-06-19 00:04] Guard #1163 begins shift +[1518-03-14 23:57] Guard #179 begins shift +[1518-11-17 00:59] wakes up +[1518-03-15 00:39] falls asleep +[1518-04-04 23:50] Guard #109 begins shift +[1518-07-31 00:36] wakes up +[1518-06-01 23:52] Guard #701 begins shift +[1518-09-07 00:11] falls asleep +[1518-09-24 00:21] falls asleep +[1518-11-23 00:00] Guard #2539 begins shift +[1518-07-23 00:23] wakes up +[1518-10-21 00:52] wakes up +[1518-03-13 00:00] Guard #3331 begins shift +[1518-11-15 00:52] wakes up +[1518-06-24 00:22] falls asleep +[1518-06-12 00:31] wakes up +[1518-08-09 00:06] falls asleep +[1518-10-22 00:43] wakes up +[1518-09-21 00:52] wakes up +[1518-10-13 23:47] Guard #179 begins shift +[1518-08-11 00:00] Guard #1009 begins shift +[1518-03-15 00:43] wakes up +[1518-07-06 00:35] wakes up +[1518-03-17 23:47] Guard #2269 begins shift +[1518-08-30 00:38] wakes up +[1518-09-09 23:56] Guard #3331 begins shift +[1518-11-06 00:02] Guard #2539 begins shift +[1518-04-17 23:56] Guard #509 begins shift +[1518-04-23 00:26] falls asleep +[1518-04-14 00:08] falls asleep +[1518-03-16 00:00] Guard #3083 begins shift +[1518-04-22 00:28] falls asleep +[1518-03-24 00:47] falls asleep +[1518-08-05 00:05] falls asleep +[1518-09-10 00:48] falls asleep +[1518-03-30 00:00] Guard #179 begins shift +[1518-04-07 23:58] Guard #3167 begins shift +[1518-08-29 00:17] wakes up +[1518-08-24 00:00] Guard #3083 begins shift +[1518-05-08 00:48] falls asleep +[1518-10-11 00:28] falls asleep +[1518-04-19 23:58] Guard #683 begins shift +[1518-08-10 00:34] falls asleep +[1518-08-14 00:24] falls asleep +[1518-04-16 00:02] Guard #2521 begins shift +[1518-06-18 00:02] Guard #179 begins shift +[1518-05-10 00:45] wakes up +[1518-04-07 00:00] Guard #1009 begins shift +[1518-06-19 00:58] wakes up +[1518-03-12 00:20] falls asleep +[1518-04-10 00:26] falls asleep +[1518-05-09 23:57] Guard #1061 begins shift +[1518-10-22 00:03] Guard #3331 begins shift +[1518-08-12 00:00] Guard #1009 begins shift +[1518-11-14 00:43] falls asleep +[1518-05-07 00:25] falls asleep +[1518-11-10 00:29] wakes up +[1518-09-27 00:31] wakes up +[1518-05-31 00:35] wakes up +[1518-10-26 00:30] falls asleep +[1518-03-24 00:37] wakes up +[1518-11-15 23:57] Guard #1163 begins shift +[1518-09-15 00:48] falls asleep +[1518-09-04 00:49] wakes up +[1518-09-05 00:00] Guard #1913 begins shift +[1518-07-06 00:25] falls asleep +[1518-10-31 00:50] wakes up +[1518-06-09 00:09] wakes up +[1518-05-15 23:57] Guard #1913 begins shift +[1518-08-16 00:00] falls asleep +[1518-10-24 00:13] falls asleep +[1518-04-25 00:03] Guard #1381 begins shift +[1518-11-02 00:10] falls asleep +[1518-03-26 00:57] wakes up +[1518-08-15 00:58] wakes up +[1518-09-30 00:04] Guard #683 begins shift +[1518-05-02 00:20] falls asleep +[1518-09-06 00:25] wakes up +[1518-05-29 00:14] falls asleep +[1518-04-27 00:11] falls asleep +[1518-09-25 00:00] Guard #2269 begins shift +[1518-09-21 00:51] falls asleep +[1518-08-12 00:54] falls asleep +[1518-06-23 00:55] wakes up +[1518-08-31 00:41] wakes up +[1518-05-04 00:38] falls asleep +[1518-03-26 00:00] falls asleep +[1518-11-16 00:15] wakes up +[1518-06-23 00:25] falls asleep +[1518-08-22 00:03] Guard #1061 begins shift +[1518-05-23 00:56] wakes up +[1518-03-22 00:20] wakes up +[1518-05-06 00:41] wakes up +[1518-04-01 00:31] falls asleep +[1518-07-14 00:37] wakes up +[1518-03-26 00:38] wakes up +[1518-09-18 00:33] falls asleep +[1518-09-26 23:51] Guard #3083 begins shift +[1518-03-15 00:35] wakes up +[1518-11-07 00:50] falls asleep +[1518-05-06 23:57] Guard #109 begins shift +[1518-09-20 00:19] falls asleep +[1518-06-14 00:49] wakes up +[1518-10-25 00:51] falls asleep +[1518-08-17 00:01] Guard #2539 begins shift +[1518-04-28 00:33] wakes up +[1518-08-01 00:46] wakes up +[1518-03-01 23:58] Guard #179 begins shift +[1518-10-16 23:47] Guard #109 begins shift +[1518-04-15 00:01] Guard #1381 begins shift +[1518-03-23 00:45] wakes up +[1518-09-10 00:50] wakes up +[1518-05-10 00:56] falls asleep +[1518-05-26 00:44] wakes up +[1518-03-12 00:01] Guard #1009 begins shift +[1518-04-10 00:19] wakes up +[1518-11-23 00:11] falls asleep +[1518-07-11 00:47] wakes up +[1518-09-18 00:43] falls asleep +[1518-03-21 00:32] wakes up +[1518-07-15 00:55] wakes up +[1518-10-09 00:04] falls asleep +[1518-05-14 00:53] falls asleep +[1518-09-18 00:25] wakes up +[1518-08-03 23:52] Guard #1229 begins shift +[1518-04-22 00:01] Guard #863 begins shift +[1518-09-22 00:03] Guard #2539 begins shift +[1518-03-11 00:53] wakes up +[1518-05-27 23:58] Guard #1913 begins shift +[1518-07-14 00:47] falls asleep +[1518-09-25 00:59] wakes up +[1518-06-20 00:55] wakes up +[1518-08-24 00:49] falls asleep +[1518-06-25 00:53] wakes up +[1518-08-28 00:54] wakes up +[1518-07-16 23:46] Guard #701 begins shift +[1518-05-31 00:14] falls asleep +[1518-03-11 00:43] falls asleep +[1518-11-03 00:14] falls asleep +[1518-11-23 00:50] wakes up +[1518-05-07 00:27] wakes up +[1518-04-18 00:41] falls asleep +[1518-05-21 00:53] wakes up +[1518-10-26 00:43] wakes up +[1518-06-17 00:17] falls asleep +[1518-03-22 00:10] falls asleep +[1518-03-14 00:39] falls asleep +[1518-03-31 00:36] wakes up +[1518-10-02 00:56] falls asleep +[1518-07-25 00:17] falls asleep +[1518-05-09 00:29] falls asleep +[1518-04-23 00:04] Guard #179 begins shift +[1518-05-16 23:46] Guard #1229 begins shift +[1518-08-02 00:00] falls asleep +[1518-05-26 00:20] wakes up +[1518-07-29 00:22] falls asleep +[1518-08-29 00:49] wakes up +[1518-08-04 23:46] Guard #701 begins shift +[1518-11-13 23:59] Guard #1229 begins shift +[1518-08-06 23:59] Guard #3083 begins shift +[1518-03-31 00:25] wakes up +[1518-09-17 23:58] Guard #109 begins shift +[1518-09-21 00:23] falls asleep +[1518-06-26 23:47] Guard #109 begins shift +[1518-08-14 00:39] wakes up +[1518-09-20 00:00] Guard #1163 begins shift +[1518-07-28 00:16] falls asleep +[1518-05-08 00:51] wakes up +[1518-06-22 00:47] falls asleep +[1518-10-06 23:59] Guard #179 begins shift +[1518-11-06 00:20] falls asleep +[1518-05-07 00:36] falls asleep +[1518-09-10 00:59] wakes up +[1518-06-22 00:23] falls asleep +[1518-03-04 00:15] falls asleep +[1518-10-23 00:42] falls asleep +[1518-09-17 00:00] Guard #2539 begins shift +[1518-09-22 00:48] wakes up +[1518-04-28 00:50] wakes up +[1518-06-04 00:54] wakes up +[1518-05-19 00:56] wakes up +[1518-09-30 00:24] falls asleep +[1518-05-02 00:41] wakes up +[1518-10-23 00:02] Guard #3083 begins shift +[1518-11-11 00:57] falls asleep +[1518-08-01 23:52] Guard #3167 begins shift +[1518-08-07 00:14] falls asleep +[1518-10-27 23:53] Guard #863 begins shift +[1518-03-30 00:57] wakes up +[1518-05-21 00:42] falls asleep +[1518-10-18 00:03] Guard #1061 begins shift +[1518-05-22 00:00] Guard #3083 begins shift +[1518-07-13 00:41] falls asleep +[1518-03-13 00:15] wakes up +[1518-03-02 00:27] falls asleep +[1518-04-11 00:06] falls asleep +[1518-07-13 00:29] falls asleep +[1518-05-11 00:02] Guard #1163 begins shift +[1518-09-09 00:54] falls asleep +[1518-10-23 23:57] Guard #1061 begins shift +[1518-04-06 00:59] wakes up +[1518-07-03 00:54] wakes up +[1518-06-25 00:22] falls asleep +[1518-07-06 23:57] Guard #1777 begins shift +[1518-07-23 00:15] falls asleep +[1518-10-07 00:33] wakes up +[1518-04-09 00:56] wakes up +[1518-07-30 00:25] falls asleep +[1518-06-04 00:19] falls asleep +[1518-06-23 00:53] falls asleep +[1518-08-22 00:41] wakes up +[1518-06-01 00:42] falls asleep +[1518-10-04 00:04] Guard #1777 begins shift +[1518-06-13 00:02] Guard #1229 begins shift +[1518-11-03 00:00] falls asleep +[1518-07-23 23:58] Guard #3167 begins shift +[1518-10-27 00:46] wakes up +[1518-04-26 00:03] Guard #2269 begins shift +[1518-07-08 00:36] wakes up +[1518-09-13 00:26] falls asleep +[1518-06-15 00:00] Guard #109 begins shift +[1518-10-25 00:54] wakes up +[1518-06-27 00:25] falls asleep +[1518-11-09 00:02] Guard #509 begins shift +[1518-03-24 23:49] Guard #1163 begins shift +[1518-10-11 00:56] wakes up +[1518-06-07 00:58] wakes up +[1518-10-06 00:00] Guard #1061 begins shift +[1518-04-29 00:29] falls asleep +[1518-03-03 23:56] Guard #1061 begins shift +[1518-07-01 23:57] Guard #1381 begins shift +[1518-03-05 23:58] Guard #1229 begins shift +[1518-04-06 00:46] wakes up +[1518-08-18 00:19] wakes up +[1518-05-29 00:15] wakes up +[1518-10-17 00:43] wakes up +[1518-07-29 00:00] Guard #1381 begins shift +[1518-03-31 00:45] falls asleep +[1518-05-26 00:11] falls asleep +[1518-03-07 00:57] wakes up +[1518-09-14 00:00] Guard #2521 begins shift +[1518-05-01 00:19] wakes up +[1518-10-02 00:57] wakes up +[1518-09-18 23:57] Guard #3167 begins shift +[1518-03-19 00:00] Guard #863 begins shift +[1518-03-07 00:55] falls asleep +[1518-09-23 00:18] falls asleep +[1518-04-20 00:26] wakes up +[1518-06-13 00:32] falls asleep +[1518-06-17 00:00] Guard #421 begins shift +[1518-10-16 00:02] falls asleep +[1518-08-14 23:57] Guard #179 begins shift +[1518-03-16 00:14] falls asleep +[1518-10-30 00:21] wakes up +[1518-04-30 00:17] falls asleep +[1518-11-07 00:17] falls asleep +[1518-05-06 00:00] Guard #1163 begins shift +[1518-05-21 00:03] falls asleep +[1518-09-06 00:28] falls asleep +[1518-06-28 00:48] falls asleep +[1518-09-20 00:47] falls asleep +[1518-07-12 00:53] wakes up +[1518-06-29 00:03] Guard #277 begins shift +[1518-05-17 00:44] wakes up +[1518-03-11 00:03] falls asleep +[1518-05-09 00:30] wakes up +[1518-10-11 00:36] falls asleep +[1518-11-11 00:58] wakes up +[1518-03-16 00:31] wakes up +[1518-11-10 00:01] Guard #179 begins shift +[1518-06-06 00:39] wakes up +[1518-03-31 00:58] wakes up +[1518-06-11 00:19] falls asleep +[1518-08-13 00:59] wakes up +[1518-10-25 00:04] Guard #2269 begins shift +[1518-09-24 00:38] wakes up +[1518-05-09 00:57] falls asleep +[1518-10-08 00:33] wakes up +[1518-11-12 00:49] falls asleep +[1518-06-13 23:58] Guard #179 begins shift +[1518-10-13 00:53] wakes up +[1518-05-16 00:59] wakes up +[1518-05-14 00:01] Guard #3167 begins shift +[1518-07-06 00:01] Guard #3167 begins shift +[1518-08-20 00:04] Guard #1381 begins shift +[1518-06-10 00:11] falls asleep +[1518-03-03 00:24] wakes up +[1518-07-22 23:59] Guard #863 begins shift +[1518-04-23 00:31] wakes up +[1518-07-08 00:00] Guard #1229 begins shift +[1518-09-10 00:40] wakes up +[1518-08-09 00:32] wakes up +[1518-07-12 00:45] falls asleep +[1518-10-29 00:39] wakes up +[1518-06-11 00:00] Guard #421 begins shift +[1518-07-07 00:16] falls asleep +[1518-07-30 00:52] wakes up +[1518-04-27 23:59] Guard #701 begins shift +[1518-08-26 00:59] wakes up +[1518-06-01 00:50] wakes up +[1518-03-10 00:01] Guard #3167 begins shift +[1518-05-05 00:02] Guard #109 begins shift +[1518-07-13 23:59] Guard #109 begins shift +[1518-03-18 00:10] wakes up +[1518-08-01 00:27] wakes up +[1518-10-12 00:14] falls asleep +[1518-05-17 00:53] falls asleep +[1518-06-09 00:05] falls asleep +[1518-10-11 00:33] wakes up +[1518-07-09 23:52] Guard #1061 begins shift +[1518-07-12 00:03] Guard #1061 begins shift +[1518-05-11 23:57] Guard #3167 begins shift +[1518-04-26 00:30] wakes up +[1518-09-07 00:52] falls asleep +[1518-07-22 00:00] Guard #277 begins shift +[1518-08-14 00:00] Guard #179 begins shift +[1518-05-09 00:48] falls asleep +[1518-09-21 00:41] wakes up +[1518-07-30 23:51] Guard #683 begins shift +[1518-04-27 00:57] wakes up +[1518-04-26 00:08] falls asleep +[1518-09-26 00:31] wakes up +[1518-07-12 00:27] wakes up +[1518-10-23 00:50] wakes up +[1518-10-28 00:05] falls asleep +[1518-09-13 00:40] wakes up +[1518-11-07 00:33] wakes up +[1518-03-24 00:00] Guard #1913 begins shift +[1518-04-15 00:40] wakes up +[1518-04-26 00:56] wakes up +[1518-09-24 00:00] Guard #421 begins shift +[1518-09-20 23:57] Guard #863 begins shift +[1518-03-22 00:02] Guard #1777 begins shift +[1518-09-10 00:54] falls asleep +[1518-11-17 00:05] falls asleep +[1518-06-22 00:48] wakes up +[1518-04-15 00:44] falls asleep +[1518-11-09 00:07] falls asleep +[1518-09-15 00:55] wakes up +[1518-09-25 00:56] falls asleep +[1518-10-01 23:57] Guard #1777 begins shift +[1518-04-28 23:47] Guard #2539 begins shift +[1518-03-06 00:59] wakes up +[1518-08-13 00:01] Guard #277 begins shift +[1518-11-08 00:27] falls asleep +[1518-07-13 00:00] Guard #179 begins shift +[1518-08-12 00:57] wakes up +[1518-04-13 00:39] wakes up +[1518-05-09 00:49] wakes up +[1518-07-19 00:25] falls asleep +[1518-08-22 00:24] falls asleep +[1518-03-17 00:11] falls asleep +[1518-03-31 00:21] falls asleep +[1518-08-15 23:49] Guard #109 begins shift +[1518-04-18 23:57] Guard #2269 begins shift +[1518-06-19 00:44] wakes up +[1518-10-15 23:47] Guard #179 begins shift +[1518-05-11 00:54] wakes up +[1518-09-14 23:56] Guard #1163 begins shift +[1518-05-06 00:13] falls asleep +[1518-10-11 00:04] Guard #3167 begins shift +[1518-05-19 00:45] falls asleep +[1518-05-04 00:01] Guard #683 begins shift +[1518-03-09 00:58] wakes up +[1518-04-26 00:37] falls asleep +[1518-07-16 00:03] Guard #109 begins shift +[1518-09-10 00:21] falls asleep +[1518-11-17 00:53] falls asleep +[1518-09-29 00:53] wakes up +[1518-10-08 23:50] Guard #3083 begins shift +[1518-05-14 23:58] Guard #2269 begins shift +[1518-03-22 00:27] falls asleep +[1518-09-28 00:45] wakes up +[1518-05-01 00:03] falls asleep +[1518-11-02 00:38] wakes up +[1518-08-30 00:10] falls asleep +[1518-05-19 23:56] Guard #1229 begins shift +[1518-10-13 00:43] falls asleep +[1518-10-14 00:30] falls asleep +[1518-09-19 00:54] wakes up +[1518-10-15 00:26] wakes up +[1518-03-18 00:25] falls asleep +[1518-05-04 00:10] falls asleep +[1518-08-03 00:37] falls asleep +[1518-05-10 00:19] falls asleep +[1518-11-04 00:00] Guard #863 begins shift +[1518-06-10 00:26] wakes up +[1518-10-17 00:02] falls asleep +[1518-03-31 23:56] Guard #1229 begins shift +[1518-05-06 00:59] wakes up +[1518-07-01 00:33] falls asleep +[1518-03-19 00:39] falls asleep +[1518-08-29 00:02] Guard #2539 begins shift +[1518-06-27 00:03] falls asleep +[1518-05-04 00:22] wakes up +[1518-08-17 00:27] wakes up +[1518-08-21 00:08] falls asleep +[1518-05-03 00:02] falls asleep +[1518-07-06 00:52] wakes up +[1518-04-17 00:18] wakes up +[1518-04-27 00:38] falls asleep +[1518-04-24 00:33] falls asleep +[1518-09-11 00:30] falls asleep +[1518-06-24 00:58] wakes up +[1518-04-03 00:01] Guard #1667 begins shift +[1518-03-26 00:46] wakes up +[1518-07-17 00:09] wakes up +[1518-08-02 00:55] wakes up +[1518-11-21 00:11] falls asleep +[1518-04-04 00:02] falls asleep +[1518-07-14 00:24] wakes up +[1518-10-27 00:57] wakes up +[1518-05-24 00:53] wakes up +[1518-11-02 23:53] Guard #3083 begins shift +[1518-11-22 00:05] falls asleep +[1518-07-25 00:03] Guard #509 begins shift +[1518-05-11 00:26] falls asleep +[1518-04-18 00:48] wakes up +[1518-05-30 00:23] falls asleep +[1518-06-11 00:40] wakes up +[1518-04-30 00:50] falls asleep +[1518-06-17 00:58] wakes up +[1518-03-11 00:15] falls asleep +[1518-06-09 00:27] falls asleep +[1518-11-10 00:13] falls asleep +[1518-10-06 00:48] falls asleep +[1518-04-29 00:58] wakes up +[1518-11-06 23:57] Guard #3083 begins shift +[1518-07-16 00:37] wakes up +[1518-07-25 23:57] Guard #2269 begins shift +[1518-09-29 00:03] falls asleep +[1518-03-14 00:58] wakes up +[1518-03-10 00:28] wakes up +[1518-07-06 00:45] falls asleep +[1518-03-02 00:32] wakes up +[1518-05-24 00:02] falls asleep +[1518-03-28 00:12] falls asleep +[1518-11-20 00:47] wakes up +[1518-11-18 00:51] falls asleep +[1518-07-06 00:22] wakes up +[1518-04-07 00:32] wakes up +[1518-06-18 00:19] falls asleep +[1518-11-17 23:56] Guard #2539 begins shift +[1518-09-03 00:40] wakes up +[1518-07-01 00:01] Guard #509 begins shift +[1518-09-19 00:23] falls asleep +[1518-05-21 00:10] wakes up +[1518-03-17 00:53] wakes up +[1518-06-25 00:14] wakes up +[1518-04-12 00:22] wakes up +[1518-04-21 00:19] wakes up +[1518-05-29 00:35] wakes up +[1518-08-16 00:47] wakes up +[1518-08-30 00:03] Guard #179 begins shift +[1518-09-01 00:00] falls asleep +[1518-08-17 00:54] wakes up +[1518-08-18 00:53] wakes up +[1518-04-24 00:28] wakes up +[1518-03-24 00:48] wakes up +[1518-05-02 00:24] wakes up +[1518-06-10 00:00] Guard #3331 begins shift +[1518-04-05 00:37] wakes up +[1518-10-06 00:55] wakes up +[1518-08-23 00:01] Guard #1667 begins shift +[1518-07-21 00:04] Guard #1009 begins shift +[1518-09-25 00:12] falls asleep +[1518-09-16 00:03] Guard #2539 begins shift +[1518-07-17 00:51] wakes up +[1518-03-20 00:13] falls asleep +[1518-05-06 00:56] falls asleep +[1518-11-20 00:09] wakes up +[1518-09-04 00:00] Guard #1913 begins shift +[1518-08-17 23:56] Guard #701 begins shift +[1518-11-03 00:27] wakes up +[1518-04-23 23:59] Guard #1381 begins shift +[1518-04-27 00:03] Guard #1381 begins shift +[1518-07-20 00:02] Guard #1667 begins shift +[1518-08-31 00:29] falls asleep +[1518-08-07 00:23] wakes up +[1518-10-01 00:38] wakes up +[1518-10-30 00:06] falls asleep +[1518-03-04 00:54] wakes up +[1518-05-27 00:04] Guard #3331 begins shift +[1518-03-24 00:59] wakes up +[1518-04-12 00:27] falls asleep +[1518-05-16 00:07] falls asleep +[1518-08-19 00:00] Guard #421 begins shift +[1518-03-27 23:58] Guard #1913 begins shift +[1518-05-23 00:08] falls asleep +[1518-04-19 00:26] falls asleep +[1518-09-09 00:02] Guard #863 begins shift +[1518-05-28 23:57] Guard #421 begins shift +[1518-10-15 00:00] Guard #3167 begins shift +[1518-11-21 00:03] Guard #3083 begins shift +[1518-04-04 00:32] wakes up +[1518-09-17 00:38] falls asleep +[1518-03-16 23:56] Guard #2539 begins shift +[1518-11-05 00:46] wakes up +[1518-09-28 23:52] Guard #109 begins shift +[1518-04-29 00:23] wakes up +[1518-07-28 00:57] falls asleep +[1518-09-30 00:46] wakes up +[1518-09-05 00:23] wakes up +[1518-06-06 00:22] falls asleep +[1518-08-30 23:57] Guard #1163 begins shift +[1518-03-03 00:23] falls asleep +[1518-08-05 00:51] falls asleep +[1518-07-03 00:38] falls asleep +[1518-04-29 00:00] falls asleep +[1518-06-21 00:54] wakes up +[1518-10-01 00:14] falls asleep +[1518-05-20 00:09] falls asleep +[1518-10-04 00:26] falls asleep +[1518-09-16 00:39] falls asleep +[1518-07-18 00:59] wakes up +[1518-04-22 00:53] wakes up +[1518-07-09 00:00] Guard #2269 begins shift +[1518-08-28 00:15] falls asleep +[1518-11-21 00:12] wakes up +[1518-03-28 23:56] Guard #1913 begins shift +[1518-06-23 00:38] falls asleep +[1518-06-02 23:58] Guard #1187 begins shift +[1518-08-25 00:13] wakes up +[1518-08-17 00:26] falls asleep +[1518-04-09 00:00] Guard #1913 begins shift +[1518-07-12 00:06] falls asleep +[1518-07-18 00:12] falls asleep +[1518-08-31 23:53] Guard #2539 begins shift +[1518-11-18 00:53] wakes up +[1518-06-25 23:49] Guard #509 begins shift +[1518-06-11 00:47] wakes up +[1518-05-25 00:34] wakes up +[1518-07-13 00:43] wakes up +[1518-09-08 00:00] Guard #1187 begins shift +[1518-07-24 00:10] falls asleep +[1518-08-01 00:09] falls asleep +[1518-04-05 23:57] Guard #1009 begins shift +[1518-09-02 00:19] falls asleep +[1518-03-22 23:57] Guard #3083 begins shift +[1518-05-31 00:03] Guard #683 begins shift +[1518-06-01 00:13] falls asleep +[1518-04-17 00:51] wakes up +[1518-03-18 00:05] falls asleep +[1518-05-07 00:16] falls asleep +[1518-08-29 00:06] falls asleep +[1518-03-31 00:33] falls asleep +[1518-10-17 00:38] falls asleep +[1518-03-13 00:40] falls asleep +[1518-09-11 00:46] wakes up +[1518-05-14 00:49] wakes up +[1518-05-17 00:04] falls asleep +[1518-10-14 00:41] wakes up +[1518-11-13 00:57] wakes up +[1518-10-12 00:01] Guard #1381 begins shift +[1518-09-09 00:56] wakes up +[1518-11-07 00:51] wakes up +[1518-09-26 00:43] falls asleep +[1518-04-02 00:02] falls asleep +[1518-03-18 00:29] wakes up +[1518-03-21 00:28] falls asleep +[1518-03-06 00:35] wakes up +[1518-03-08 00:48] wakes up +[1518-05-07 00:44] wakes up +[1518-08-20 23:58] Guard #179 begins shift +[1518-06-26 00:00] falls asleep +[1518-08-18 00:52] falls asleep +[1518-07-14 00:27] falls asleep +[1518-04-12 00:11] falls asleep +[1518-11-16 00:10] falls asleep +[1518-03-27 00:51] wakes up +[1518-03-24 00:31] falls asleep +[1518-06-22 23:59] Guard #509 begins shift +[1518-04-17 00:04] Guard #2269 begins shift +[1518-06-30 00:15] falls asleep +[1518-10-20 00:13] falls asleep +[1518-11-06 00:55] wakes up +[1518-10-21 00:03] Guard #1229 begins shift +[1518-03-15 00:52] wakes up +[1518-08-26 00:15] falls asleep +[1518-07-27 00:26] falls asleep +[1518-07-31 00:03] falls asleep +[1518-04-02 00:51] wakes up +[1518-07-02 00:45] wakes up +[1518-03-05 00:41] wakes up +[1518-08-29 00:36] falls asleep +[1518-04-18 00:31] wakes up +[1518-06-08 00:00] Guard #1187 begins shift +[1518-09-12 00:08] falls asleep +[1518-11-09 00:59] wakes up +[1518-10-27 00:02] Guard #421 begins shift +[1518-11-20 00:00] falls asleep +[1518-09-25 23:59] Guard #1777 begins shift +[1518-11-01 00:00] Guard #1913 begins shift +[1518-06-16 00:00] Guard #2539 begins shift +[1518-09-11 23:56] Guard #2539 begins shift +[1518-08-20 00:12] falls asleep +[1518-07-18 23:56] Guard #3083 begins shift +[1518-07-19 00:36] wakes up +[1518-06-14 00:14] falls asleep +[1518-06-05 00:41] wakes up +[1518-05-06 00:48] falls asleep +[1518-11-12 23:56] Guard #1777 begins shift +[1518-04-20 00:06] falls asleep +[1518-07-15 00:17] wakes up +[1518-06-29 23:58] Guard #1163 begins shift +[1518-08-27 00:48] falls asleep +[1518-09-16 00:59] wakes up +[1518-05-09 00:59] wakes up +[1518-05-29 23:57] Guard #863 begins shift +[1518-05-18 00:58] wakes up +[1518-10-01 00:02] Guard #179 begins shift +[1518-07-09 00:55] falls asleep +[1518-10-16 00:37] wakes up +[1518-03-08 23:59] Guard #3167 begins shift +[1518-07-28 00:59] wakes up +[1518-03-26 00:55] falls asleep +[1518-08-05 00:38] wakes up +[1518-04-11 00:58] wakes up +[1518-11-14 23:54] Guard #863 begins shift +[1518-06-05 23:59] Guard #277 begins shift +[1518-10-18 00:57] wakes up +[1518-08-11 00:40] wakes up +[1518-08-19 00:35] wakes up +[1518-06-06 23:56] Guard #179 begins shift +[1518-11-11 23:56] Guard #2269 begins shift +[1518-05-18 00:15] falls asleep +[1518-07-28 00:52] wakes up +[1518-07-09 00:25] falls asleep +[1518-03-09 00:21] falls asleep +[1518-09-02 00:37] wakes up +[1518-04-17 00:09] falls asleep +[1518-04-05 00:17] wakes up +[1518-05-12 00:56] wakes up +[1518-04-30 00:46] wakes up +[1518-07-18 00:57] falls asleep +[1518-07-11 00:37] falls asleep +[1518-10-13 00:12] falls asleep +[1518-04-09 23:59] Guard #1913 begins shift +[1518-08-10 00:04] Guard #421 begins shift +[1518-10-05 00:35] wakes up +[1518-08-27 00:54] wakes up +[1518-10-07 23:57] Guard #179 begins shift +[1518-10-05 00:23] falls asleep +[1518-06-11 00:45] falls asleep +[1518-09-01 00:51] wakes up +[1518-10-28 23:58] Guard #277 begins shift +[1518-09-11 00:03] Guard #179 begins shift +[1518-05-14 00:54] wakes up +[1518-11-14 00:23] falls asleep diff --git a/04/part1.js b/04/part1.js new file mode 100644 index 0000000..a1e5a63 --- /dev/null +++ b/04/part1.js @@ -0,0 +1,59 @@ +var input = require("fs").readFileSync("input.txt").toString().split("\n").filter(a=>a); +var timeline = []; +var events = input.sort((a,b)=>{ + var pa = a.match(/\[(\d+-\d+-\d+ (\d+):(\d+))\] (.*)/); + var pb = b.match(/\[(\d+-\d+-\d+ (\d+):(\d+))\] (.*)/); + return new Date(pa[1]).getTime() - new Date(pb[1]).getTime(); +}) + +console.log(events); + +var guards = []; +var lastGuard = -1; +for(var event of events){ + var p = event.match(/\[(\d+-\d+-\d+ (\d+):(\d+))\] (.*)/); + var time = (parseInt(p[2])*60) + parseInt(p[3]) + if(p[4].includes("begins shift")){ + lastGuard = parseInt(p[4].match(/\#(\d+)/)[1]); + } + else{ + if(!guards[lastGuard]){ + guards[lastGuard] = []; + } + guards[lastGuard].push(time); + } +} + +var guardLengths = guards.map(g=>{ + var total = 0; + for(var i = 0; i < g.length; i+=2){ + if(g[i+1]a)); +var bestGuard = guardLengths.indexOf(max); +console.log(bestGuard, guards[bestGuard]); + +var mins = []; +var times = guards[bestGuard]; +for(var i = 0; i < times.length; i+=2){ + for(var t = times[i]; t != times[i+1]; t=(t+1)%(24*60)){ + console.log(t); + if(!mins[t]){ + mins[t] = 0; + } + mins[t]++; + } +} +console.log(mins); +var bestMin = mins.indexOf(Math.max.apply(null, mins.filter(a=>a))) +console.log(Math.max.apply(null, mins.filter(a=>a))) +console.log(bestMin); +console.log(bestMin * bestGuard); diff --git a/04/part2.js b/04/part2.js new file mode 100644 index 0000000..83b9438 --- /dev/null +++ b/04/part2.js @@ -0,0 +1,46 @@ +var input = require("fs").readFileSync("input.txt").toString().split("\n").filter(a=>a); +var timeline = []; +var events = input.sort((a,b)=>{ + var pa = a.match(/\[(\d+-\d+-\d+ (\d+):(\d+))\] (.*)/); + var pb = b.match(/\[(\d+-\d+-\d+ (\d+):(\d+))\] (.*)/); + return new Date(pa[1]).getTime() - new Date(pb[1]).getTime(); +}) + +console.log(events); + +var guards = []; +var lastGuard = -1; +for(var event of events){ + var p = event.match(/\[(\d+-\d+-\d+ (\d+):(\d+))\] (.*)/); + var time = (parseInt(p[2])*60) + parseInt(p[3]) + if(p[4].includes("begins shift")){ + lastGuard = parseInt(p[4].match(/\#(\d+)/)[1]); + } + else{ + if(!guards[lastGuard]){ + guards[lastGuard] = []; + } + guards[lastGuard].push(time); + } +} + +var guardMins = guards.map(times=>{ + var mins = []; + for(var i = 0; i < times.length; i+=2){ + for(var t = times[i]; t != times[i+1]; t=(t+1)%(24*60)){ + console.log(t); + if(!mins[t]){ + mins[t] = 0; + } + mins[t]++; + } + } + return mins; +}); + +console.log(guards); +var mostInMin = Math.max.apply(null, guardMins.reduce((a,b)=>(a.concat(b))).filter(a=>a)); +console.log(mostInMin); +var bestGuard = guardMins.indexOf(guardMins.filter(a=>(a.indexOf(mostInMin) != -1))[0]); +var bestMin = guardMins[bestGuard].indexOf(mostInMin); +console.log(bestGuard, bestMin, bestGuard * bestMin); diff --git a/05/input.txt b/05/input.txt new file mode 100644 index 0000000..95e48bb --- /dev/null +++ b/05/input.txt @@ -0,0 +1 @@ +YyzZxXZzKwWAakTjVvZzJtIiFWwfnNMmirROooOpPbhHaABpPtkKEgGMsSbBmlLEeKkXxeUunNTcCWwZxXKUuYykzmGgWPplLDiIdOoklLvVCcEejYyJiIKkFfKaAiIwBbOoEeMyYFFfVqQvZzqwWQZzXhHxfwWuUmAwWaWwiIvVeEMsiIsSSMnNmPBbZaAzcfYsjJSyLlYIimRrMCSscvVgGDxXHhdJjCwWcBpPbyFdDMmBbxAHhpPkKmcCMaXCRrZUuSszmzJjUVvucfFCZcYVvysSGpOoPgTtCMoOPYyOOoPpoNnIEeiJjnkKNlLzkrRKZfkhHKFwWTtFnNffFzdDZyLnNwtTWlYPpnCCcFfcoOBbHhJlLuUFfjgGlLLbBgGofFOBbBAablaAzmMWsSwGgZvVjUuJMmJjgGjJNIwWiBbNnxqQXFkKrRfmMaAiIfItbBTNuUFfuUQqnfFkKTtpBbOSbqQBswPpWVvFfoOoUuPiZvVzhHgGeEBbFXxQzZqZIizTtQqGgSsVvhjbdDBCcFMmfJjuURrfFJHpsSFfsSCcIiAyYanNHpOofFPLlNnzZBbhExXiIFaArRrRcCYyhnNkKHflLgGemMckKWwghHQwhHSsWCcqSsGcqhHcEeCQKkoOCTtlLTtCSsAacYyYzTtpPUuZyKUQCrNnRcMmfFiIbRrBblLBqutTsSZNRrnzXxYyoOzZGgFSTtsfaQqAQqMmiILlQamMscCSAmMqkdDxXSsTFftXxCcpOdsSDOoDbvVuWoOeEwrsSRUGgbBSgGgGsbBBAaAayYdDTtjJSaPfFwWpAbVvBzZzZhHJFflLjsdaAecMmQqCFfEBAabEeRJyYkKZycvVCYtTzjrovSsVkQAaqKpHXxhHhCcPCxDqQdFfrsSRKkXsrnDdNbTtBRaiNnIAOoNnKkBCcdjJDbcCIiQqSpPyJVvjeEsMmSQqYwZzWcFfQKkKFftTkRrxXQqeEGlLgzpPXNnxZNnqjuyYUtTDdGgKkxXwAaZCcWwQqpMmPzfOoTtNnFfzZFFfZzOoLhAQqasSHlitTUukKIaAQqWbdDngGqQNBRlLNnHhHQqBbYOovVyXxUuhiIijJxXIiUnNuAaIoOFFffTsqQuUDdQqrRaPpASwWKkojJOtIFftTNnirBmPAarOoIzOfFsxXNnwWStgOoGRrMmmMTLlDOoEeaqQPpAgDdaDdAGWwtTkKdpLlPsfFSDdZzUuXxenIiOnpPNlUSsuLoOoWwNwWwWhHhRrHKMmyYnNvmMEeyEeZzYYyeEFfLlVfFkrDdYjJycCvVRUwWHhuFfUujJbBaaAXpuUkKPxLAaYylAaXQqxaqQCcSEesXxtTnNZNnzutMrRmTUyYLlxXpPjJiXlrRiILlLxIqQEFferuURoXxOBGgbiSSsmMxXsxXIZzvVylLMJjmcCNvVXAaxenNpPpMmPcCZiIDzyYZLlBbZiiXxIIZoOzzzZZbBBEePpYqVgGEevQmMpPeEUuyOJjmpPwWMofFzkXxKaADdlEeIiOKoOZzYyEJjDdeUucOoCwWjYyxXEeJQqTBbtVvPEeIaAiGeEaAOogiIppXYyXxZzxXxPpCbBicCaAIyYQqBfLPpZzbBqxXLlQxXVrRvlGgSnNsCcPpzZFucbBQqQqCTtqSsQUWNnLlyYJjMKkFIihHfEemwhPpHxXbnmMQqhlLjJjJHlLfFnNNMfFmKkiIOopHYvVyhbXxYdSsEeDgGPHQqKkKHZzhkMjSsJUbBgGPZzpXxPTtcCZxXzpkKwVvWTtdZzDpPuqFIiJjxBbXfdTtTtsSDzZHhWwMmKknNOoiIyYFYyOopcCYyOrRoCcQtTqqQSsPgGeEftcCTSXxcCsXxGOoivvqQNnLllLUuxXvVBYtTyRqQyYKkrbVvaOmoOhvVDdbLlBHhHmMrfpPFTtYyFfcFfCDdRDIigGmWwmJjMnNeERhHrMJjzZSsOogQqgGsSdDGJjWEefcCFwPpdPpDLxXOsSyYXxpuUPPpLlWwvGUfFuhXxZzhHWXxwEIiSseWEenNFfrRRdWwAaNcCbBnTDdRFoWwOdDNngGtDgGvVLlGBwWbhHkGDdgmMGSAaeEsghpPHKZzpPUuPpaAuUAaFKkXLlxMmCcfkKmxXCcMCccOIHhiWwhWwaAmMbBWkKrRtiIxXzZTqgtTGjJwuUjJWyuUYmMatTAnbBgGZzafFAnNgGyYFeEfXrRxogGBpCcPbPQqPPppeBbEpUVvEeXxzZTtNKkBbnddDlnNLDmMiUuILltTKzZNnksSIibBYyqQLJjHLlmRrBboOcYMbBMmeEaJjAmWuUwzZnNyeESNndmMhHWwXxMdDphHZPpzPCrRYGguUycNnZudDUzrRoOmYIiDnNdxXNnaLlAYysZeEzgGTtSTtyDMVvCcmEeIMYyRrLlMmgGmFfJjSoOmHuUhQjEeknNTMbBOomCctIitTJjWwzTTtGgtZhdFfDHpPFjUuJfSsRmMmbBMAaSkKHCchsFfpPxuUDdjJXFIiXxiCcIwWIissSSDZzZzeEIzZutTZqHhQSnNszQqlLWwEEedaQqAVvyPpyYkAhnNHadDbZzBKrwWRNnYDEedCcuUvTtVaAbBlJjjJVmMGgvfFUuLnNzZDJjRBbRJjrOfqQNnEeSsiZkKcgGCeQPpnNNnqEtTDdqQSLlsKkNYylLnmgGuUMsQKaAkqSwOoWwcAaGiXxIoOaAgSPdYyDqQpsJjTtoOLLgGpPllIiNHhMmAGgIioNwWngGWwShiQZzqtTIHsXxCBsSrRUubWwNPPpphvBbFfYyXxaAAagGAainNzoOQqtiITEDdeJzZjZOnNTtYcIrRCcUukHhKPpdVvZMTtmBbzEeCcszJkKjZlLDPpdmlLIigMmfFUukKJWwsSBbBsSDdSAaskKbIkKsSiBAlhHIiLFfIfiIFcCibICciwaMmAWBnNzZGaAgojAauUJOECcQsQWwdDAafFPpPsSPaAcCoOpKkXHhPpaAnNzZxFHhvVIioOmfDdFvFfVOoRGgDdhFPNnYypfOoYUuyiQpFmMfPqMmIpPdSsDegGOjJoDdnNsqoxXOwWSsWwQIidDRrenNraARyozZOsSuUiYtTqQiIyKQuUNdDnJjqmbBvVpkKPAaXxdfXxynNYkJjuUjJxXEdDuUUugGeqQwsDdEqQeSWzZdZzDdDiIEVAhjJmMQqHtTkKSslLagGvdMmYyDnNFMoYySsHSiIRrsBbhOmRrIidDdzGgZDaOouhHUCcdDyYjAaJAUZcSsEehHmMCczVvcCdDMmjgvVMlLmoOytTAQqaXfFIiikKdOSvVsoDIPKtRwWugGUPprLlTsMmSBuUbmMkDIijJLQqlddeEgGYLlymnNFEevFfVvVfSChBbHyYABbaPmMkKpcClpPGYutTIeEdDiXxUBbyPpqQYMIVvdgGDMGXxgMUudDCXxOoUucHhBJMFfmgGjbcvVQHhqMmCCcgVxXvmsSoGgOLNnlMBdDPpbnNlqQCcLUutTWeErRAaoHUdDuhoOOQqwVtTgGvFKkfGyYxXUugLlSskKZPprRjQqFWwfvXPpBbxqdDwrRWNMrRmGdDgMmiIEeRrhHZzfFLlIiBhHWHhwBbrRbZznNTGtTfFjJnNIXDdxXtRrTxiVvrdDiIvFfIialWwLTtGgJjAyYrRFfMHhPpmVRxodTtgGDOYyXyZzYDdYyQwWqnNkVvKZzaAvIKkVvFqQfwWVHhvisSWVvwuWwUuqQbBxfFXgxGtTgkKXwWYyvVvVEetTsBAaDdcCudxXDzdZzZzDZSJjlLQNnLlZztzZZzTrRqJjrvGWPbLlBeEpwsSEfdyYxXxpPXOoxXDiIGgFfsQqeESHmMLZzlIiLEkKkiIEeLtTeElLxrFfRwWEeXlKpHhsgGSOodDCMQqzqRbBFlLmMfTHheEgGtrRrRrQZmGcCgcGxXglLZznNyYOoQqBbYdDeESyYsOHlLhtTPpooODdcOJjqQoLuFLemMElQkKqfyYYXhHxyUROorSqQFaAanNWwxXpoOPFGWeEyQdrRIiXxDqYaAwglLHwWiWwIvpPuUSsVdMmDEeYuCcvVUuzZkKUAKAUuvVaOGgEeyNniIYOoMmRrhErReDdHpPoAkKTtmMazZxXFfpPpPkFfeIiEeSgGCmHhMDdkKVmqQzZeEAaYyIUulqQdDDdLujJUeESWYyVvwAasHHhmMKkJvVjOCcFOlLRronIiKrIiRkFfBZXxzbOoIiMXBGgCcbQqxKkCaApPrRQlLJjbBqtAwAabBouUFsSmMuUAaERrexXrRRXxsSrcCCSUqQuUhQqHurRsPkKpToOlLuUrRtPpvVAcCpPJjdSsnvVNDIvViOoayYHiITtlLHhcChdDrRQBbuUaAfFOhHfFKQqkuUwWfFoYHmMiFfIZzhyjJlLMmeBgKkqwWQGVvbZzeEVPpMznlLdDNZmGgZjeEJzEeLlauUADQnNqdsSyEeWnNxjJDdXOoIiwvVYgIiGKgwWbBaMmAmXxwWMGSaAUuKksMHPpwWyMVvSsmWwAaAmAaMKTtRraAaALlkMmqJVvjZzjJzZYywZdDzZzpPoLlxXstTSXCcVHhvKbBQPpEejJGzZgRAawWJjiOITEelLtRrODdHhPIiVvpvVdDUuHeEhvVCTtcCaAyYcRrDdzMdDiInZzwWaAfbCcvqQkKZzVcCQbBqdCxXTLlgrnNSsHhJjSsPdnNrNyRrYsSnVZnNzvRhHGgHhhlxCcXUXxEeAPpaeEuLkKMGDhHdDtTdgYybeEBrRBbfFmMdxXDiMmRaArGsMDdGXxQqgmCcsyYRrcCSaAxuUTILVlLvlQhHqiAHzZZzUutTyYGgvVPeEqQZVnNHhwWoDoOdxXwWjJPpXNnxOXxvziIxXaAZziINnmMEdDHquUhHYyQDdFfhTtaqQiIAkKGgCOTtvVocCIwjwWJrRWgGLlDylkKLrRZkKQLlzPIiJjDdBbpFjJfZqiIQfbTnNcCtjJuUMmFfBFCBbukKxXykKCrJjRXxoOvcCPpyYvpPkADdaxXSsNDdnKkcKkrfFRkkKBbWmMwrRKEQqeBbkKZzLlLHjJhyDEedVHhYybbBkxXZziIpPCcfDdeEFKWwBHhPpOomMhHLcCldDIYyRVvcgGoOkKqQNFfmjRrJyaAosSOVvYgGmJjMWkKWQqDQqyYcCTtWwdEeYyOOovVoHhWwgqLlQCmMFfcoOeEGqQHSsHbCcYyFDdUMmifFGRrOodDtPpTkKPpcQqyJMmjYCcCvVyyYYltTvVYGglLoOyLXxDdiIgGmPpoOMIjmlLMkKEzZeNnJPpihNiIArRanZzUusAUuaSqPpGgMmOPpTtoQaAdnZhHzNDQqCTtckMmLlExXxiIhHeEAMmtTaMqQLlYaAFGgxJjdDXfFawWlLAoOleELSIisXvVNGkwWKcCgiIGgWwXxunYySAasNNnUyYdDdPfFpBbCcDuEemkKzfFOoAarRmMFCXfaAFcnfDhHdKkfZzFFRrpmLlgnNqVvOotAaxXjJuZzUTQeKCaAbBbBUuQIpPRvVvoOKnNkPDdpNcCmdDVvMQaACPpaAcVvhHLlhEZzlLeHquTdDgDakKYbBuMmsuUOHXxxkKIsSLlRrzXxIivBboOVhHaTyYtjJAJiIaAIiLLpPbBxXGglmMqONDcmMPpCdZzbBPpnjMSsmJZomMyYOQqhzZfvYpPgGbBoOyFfZzzZQEkKeqHPAazbBgUuGDOodZfFyAnNaYYyEHhSseZVBbaAvvTtVgGdDLVvliIIiAaLYsScPfFFfKycCeEYXxeEkpuUCCcKuUkyYvVAYTtyFfawWjJydDXxLQqnNTlLoOoODHxZaAigpPGIewWlLEsSZOhHXxPpMrRmfFhOoHrRALlFfdmMDqvVfjUOouEeoAYMmyatThHOjJebvIiEeVZXxzBELlJLZzdDlbBcCFnNYyZcCkKtlLTrRxXBbzcqQQZcCOzZnNxSZzyCcYsIiIitTXJjbBbBSsozNlhIiHIibUulxXxXQqfFIxEeXTtiLBHhSszcPpeEmMJjuUpPNhHdQrRkOoKMLlZzlLhitOoTRODDduUdowWuUhQqjJTtHHSshrImqQUusSgGqAaQMJjnNHmklLKXxqfWzZwFUuDnXxNbrRsZzOLlFfoSsSXxXuNWjBEBYySOrCnNrRHhcOobdDBLZzMrMsSmvVJjbBShHblYyLBnNOZfFzzYgGyZJjUulLGpPGggobBYywPpJjzcdDCDdcyYCZqQHkzZxLlbDEeVvdGgBKrRNuFfUnkAtTaaYoQqOAabwWByJjABpPcrRmpPMCbOALlnphYNnyigOVvoCzWwZJjFyYfcaPpAYyMmAagadDsSBpvVPpPxLQqldDbBwPxXNwWhHnpWYdkloOYyLKMmnLlNtTiIkKfFwWSzQqZsgGWqCJyYjeHNPpUuMmhHHhWwkKVvQJRraAAOywTtWWwzcCZlLKkZsNNFfYynkKMRrmnbnNuFJjQcMsSmihHjJyYTrRAaWFRdDdDABbRyYWwFTtLBjJRrPpbQqlXxEefMmFfWwFwWfcCWwPhzZTtHBbXqfFkHQqhIiKtnNUuYAaPpPjJrJnNaEeAxszZQqSMvZzVlLmgdeEDmMEejFfRkKrDdYgGEvMmRrVvOoAaVeThHtdDuKkAatjBMqQMmrRmMmbdYyhHDUuISsiyAaYFsSeCdvVvVQlLRwoUuOWrDdOoDPpzZgmMXMduUvhUuHCctTZIrRNjJAaTtgSsGTtYVvysypPFfQqwTQqtWcrRjJKkYgUuGglLVvHhKwsxXlLSWwVvWjJQqMmOqQeggFfkuUGgKGsZvVzXHGwWzZglMmLnxXzColLxXhHKkmMIitRrbwWBTOiIkKvvVzUlLsGgCZpZIizsfFRjWwbrRBTZiIdYihkQqhBbHHhKgaAsRLlrKkSJkKRsSWvVHlLhfFIYynpPNQVvWwdDeEqpDdGgYAkKhHaBXCUrRucxnwWNgGYyiIzZCcfFRrNnRZIaAEetnNeEbBbBTPbBpeWwEeXHyYRLlrbQcNnCzZqpPOofhXZAycCYJgGVpPvxaACcXUZzubkYyAIqQiHhcCHfFWwqoOQSsqQWEevBbcCslhhHYAyYaoqQsSxvRKkwWSKksmMSwWGSsvVktrRTYyKoOmeEIiMgEeqsSIiVvpHhPKVvkQqQYcwWCErRQbBqaKkANIiIikKsBQqQqxXoObvfFwWcuqQqrRTtQUDdJjJHvVhEeoMmjEeJONNnnsxhWIiwHzZBdDUuCdIiDQqtpPTnNQoOoOlLJjqjxPpXdyYyGgYBUuuUgypkKPYSsiINxaAXnkGKkaAXejnSsUpqQWPpzbBOOWwnRroVvOVyOzZoYyVbFfBKHpFjMmAaRPprtvxXVzkKkKAaPoOxdDVpPMmvXLlIipNnMmpPHhuUOoctTCaAPVvPSsJjfFarRkFNFfnfGYyoOKkwQqoDddDDXxxXNPpeEXXvVtTxdYbBxXpaAQDdqPDIqQiIJFfoOyTtYrRnDdNMmUAaugGfuvVGrrRZGgzZzNnEquFgPpykKkKLlYoStKSsTtktTtTzZlLavVYyDdBbXlqQqPSxXsuyIioOgGYeuUVGgvtTJXpUuPkKKWwkAaxuJjzaAJrJjlCVvcCcMmYypCBbSswjJYyvVkuIiUOoKqPpQkKJjaEeAuzZUEyYeIidDWJjBbcaMhHmHdDuUIEeeQOoqkHSwOCcDduzsSZUdDiEeIyyYQqhiIHsSoJjfNJjOonFSHhgGsOnDdsoOhHsFLlPcCntTHjJxXdDQqvpPWXOoxtTCcOoUthHMWwviIjJNDdnsODdwjJxXEcCcCzZIiVoUueEoZYjJsSntTIiNykKzIeUuvVEboSsOBcyvWdDwCcuUmLleEMklpZzPLzZIOoQqfmexxXXuUjtTJTYyLFfmSMEelBbLGZEendmzZMhHqmMAsqQTtiISmMrpiIPRLUcCuVBbvHheEwOoHhAelXxLbOFIifVvLWwlnwWvVHLlhNnWAaxhHFdkKbBZzDfFsSFfXxQtTkuUxXLlbYyBBbzZirRGgjJmMrfAaiIOIMxgGvVMmUuTEetcCRrRrXDoOxXdDdMmBpPbqQmEeiQqiIPZNnzpqQICiIbAaRrEVwaAkKvDdkKVWfmMgmCckKSQiIoLlrRXxjJOqlzZLCHXxhDnNLsSEexXyfFYUuhHxXltTSdDsJXxjMdIiAuUKkKBbXxoOXxNjJhoOJjoOUuzuwuaPpAUsnroOXDrRQqdUtTXxZVvzxdDsSlKkWTtwLmdDWudDMmYyzZSBbTjJNndDCctAFGgDdnnNQqoNLlTnNAVvabLpPAyBbTtsSYaAvIQdDqMmfhHLgzlbBdDLnNZGcBzLnAFYycAaOoCGgSsytwWxwWXysCcRZwWGDdgVCvPpVCcAamCWwcRDJkKKksEeegaSgWwprRsSOTpPRzZBbPSsJjUGghrNtTaAmdDEeLzZwWNnLlqIicCwGgPpnoOXXxMmnFfqQmQVpljJLPiIHZxxXzAJjaZaAXzKtTXxkpLJjsjJmMihEekKVvrRHfFZzEedOfFlTtLlNnbBhHLTtDKkiSjjULlQRDJjhHsoRrOpuUFDKoqoMmaAOQOvyLlBbxXWpPwYVESseCDPptWCcRrRrwKBxXbQqkoTtOwWAapoTLlLsFfWwSmFfEeMSscUuuUxBvVNKkJPpEypPYqQtvVaFvVBbgrLgGlmmMMjJcCtTgLlrLlRGtwajJAIilLIWxPsSNnpIiFfCiIQmMqowSsVvWOsjvVJPaApVKQqkvzFfzZzZJCQqsinzZNtEeqJICBbfaAFCccUuQbBqqqQtTukKafFLBKPrRnSsbJTzAaXxQqAaCcNnVvNnCcUutTxXbJNnpPjBLlYybmAkKavVkwdrjmIiqxXdDQrRDddDrPpRVuaAiIfRrsSDdFjoOJpkGgYsStTyKGvVcnsbBqugGqQUpPOEeoOoOjJFfXxhMAampPuUcCAamIxeEXIiiurRJjUlgGpPfFAazVFkKslLSrMmckKCRshqWwQbBHjFepCnOoNrRDdysbBSVKvEOoeVffFfFBbFyCXBkKMmbHEezqPJjKkWwAaFUuunjEwWeRryghDdGdjbBJfFfFlLFfDrTtVZwWHBbCpPDdoAEeAaVvkMrHhRtpPVvTsYySmopPOoNnOdqoOQDUuwWkaAOMmMmoGgKwWMNnmeEVCcvFfKrRbBHnCcsemMEexIfYyFXsXhfFHxeAOAafwZzWMWQqwMKkmpTtEmaAoEeOMKtYyTtTVvkQqbBNAanQqHhWGgwaAQwZqQzWLleEDgpPtUuhHMQVvxcOveDbBFnxXNfdLlusSUNTgZzYyhnNfFrzZFJjaAgGnNGgZOoiIzLWcLPpnWwNldoODMmRruUyYdDuUCckKfCTtcoVvOFbBglLRrGzZlSQzYyaAanvUCvJjVNncXxCccCyYjJIztTYmMoOzZyRrCcfekVJtTUjvOjUuSsdRrrRhrhHKkXZQqmcCMtTOZzmaDdAHhMcCjoSJjsOeEwWJNfFfFoxXXxJjOMBWfFakKtTtTAdqQidleELKccCaACCwlLWwWcfFoOkoOKtTkXibghHfFTtJjjMmAaJsmMwWkKDdiQqbBGgwSsWgGlLlONnsLqjJrRyYQOjJOMmqrRQRWwEeNnjJAaeZyYrRzeQqNnkGgJjpPvVqgGQZwIixXZjNnJzWDdzxsSwWXScCRpnNHDEtTeoOdLeElLuZzUuUyYaAaRrALlrRoOlhvdDxCcXVpPJjXxwWSzQRrqFRrDNPpndrROofQMmcCqvVZfjJLlFzqUrRuGgUSscEeXTGdDvDdVgtFfBmMvPpMmVmPdDkKQqIioxXCQqtTYMzFfZxnvWwWwWwAsSXBBbFEeeEJjZvTvVtjkfFKJRQwgGxMmsJRcBbCXxXLlPIOoikKpNaAtTgGQFfqVrPpYPpDdnnOSdDsVOUudDHgfFiwWIiIOTtomMPLRrLldsTtFWHhwapvVDdrRPyDdYCcWYywEeKkwEfOZzeEBbsnNxruUyYkKIAagpUSsGmMsfVvFSVvgbBEltTfeEjJhsefLlRrXSseEicCSsFdDrRfvVyYdDdZzMmVSsiIvOoKSsyRrYiCcmAfFYgGgGgJBLdDuAaMdDmIieOHRrhcZBbzJEmMPpEkvVKrkzZKQmMqhozZOHLlNEAaDHtThEejvVJyIivYyjdDDdLkjYoOaAmODdeEofFOIJdGHhxXHhgyYazfFKUWwugGMmkYylQqazZvVyYHrXoBbdDqpqdDhyYHayjJdEeDYGUEeurYgGFOdDCZRTtQquxXUsEsjdDPLJYcCEOWsSFfTtoNncCOwoMLlmmMbBeyQqjlpiaXpdDPxVvvnNLmZzMtHiIeQqNTWwtBWwqQGgGbBgoOfFOobkCyYcsHhAaWKFpBAaGgxyYXvVLlbpPvjJKklaWwAFfDYydCcJLlvVvVFfCcrRmMpPkWjrPbZFfzJjRrpWwPBReErEeBbsSvVHCchBJqQzZYQqyjCUuWwRHhrZdDzFfcdLdCDdcDltlLcCFfZzIijJzZKzZuoOUZzkCaAcvVNnCcnNWSYyNnkRrKicdDCvxpAMmbBaPTtiIYjNnNEevVnlLJcCCTCMDdQBAaRCWwcroERrrJjRjGOoMmuUgVLlGgvJrUMjJmuGAaguUTNnKkHNNnGgEiIeXxRNeSsEHhkKvFPpfMmVNXxBNnKkbUuRLlfFcCHhJqvtwXIiBbrQtTjwWAcCaqQIznzZNnNocDUKkunNPpdRrDKAElLepPaXyoOHZpDdAaXZzMDrjdGgDJnpPYlhHLKzFNngDdGaAfnNZGTtxoPpHJjNlLrtTRkKnOmwTtOQMmRrqtTRhqRjHhiIsSvAaVOoaAPpfWwHPVvYNyYcnNCnqXxucCUaAZnQhXKlFfBZdDzdvVewMmXYaAybBxGdnoOhHoOcVvCHkSsfezZWwlLErRGesSDxXnNJyYSQqNnwEliIpXxKOoktqQbEtTeBTttTlLTZdDAaVMmvVvkqzZQKhHCcOsSAaawLyIinNKksMkKmBblLgwWGRrJjDdUeyYEAauvVPaLIuUdlJjMyIiyaAYYtTaAeEAaIiLlNnlwXbfbFhHxXxcCXrRRrfeibEeBfQTvfENsSCcXxVvLlbemMSMAiIpPWwzgGZaEeMRVvrwWmsiIAaAFtTLbWwtFzMmWXxAnfnYyLlNMBbmvVlLFSYrRytyBDndBKkSsODSyYFvzjkKDdJzMqCcpPZzQmnNZZfFTEeEerRixXIjTHPphtaAocpmMPqXbBQqXxTHwCcoOnNCJjzZxHhuWuUwUvVmAaoKhOoSsKsPpSNnwWkBbUurWwaAlyOoDUukGgVKRrlgGLXuAreERaUPpKYHhyIiwOLlbBlLLMmqQlvnNVLleEELpRNwgrOoYyOGbihTrRnNtnvJjUamMngIvHhgGXxkGgutTUKjbBAAaaSEdDPpDdqQluUxTFftLlXxrRDhHdeEWwSstToEeOeLlsSTGgBzZbyRrTtYtYyWZusSUCrkKISsiNnWJjtTgQJDYbByoOdjvVjiIJtpPTBmMXuQnNZztPpmaENtTGNngneACcKZFcCySBbsmgGYykzZKZzMxXauUAztrRIiTBbrRZbZVvJjgGWkMmKGgwqQmMgfJBbjkiITqQPufFUptCVvdqXjJrXuUNFKkwkKJRpPrTvVXxtrVvPpcPpcCQqiIlHhdFMmfrzyYZRDhJpxNnRkKLlrGgbBetQieuUEIBbgGqDexPpOoakKHwWXWXtxXoPJjphHfvVBbPcEQqPgzZNnmMGpJjepPcvzFjXxnJeZzEVNnAaaTtOoAmMvikKwWItsGgMuUUuZzIYRTtvCVjJtTvMgGmQHWMlLWcCZzwmMmfMuvdDYyVbGpUuIiPnNWwHqQMmeETthBwWbJjuQiVmMwpPjAahAaseESHIscKkpLlaOokKnNlLvVdDAyYALlRTtMmGBbgQOHnLlzZPpuDdEKkeaCcHYyZjYQqYyRrTyYHDhHdnYhHyPFfZcCzTeEftpPTtsSTFtEepkKECceNnlrRNnLNxaAuFfltZVbBvCGHhjJYysNnbBxXueKNnSsyYkGYmMQMCQknbBNDdEhEeoORJSsoBbZPhHwolBbLtTLlAaaAYyVvlNnMmQnNAmMFfKklLgnNimdFBiIxXnNLlquUXxJsSxXhjhqraANOGBgGcCdDbgfFrmxMEemXkKoOUhFfHukKOoHhBhHcCXeExTBeEpPDdbOGgKmfFJjQCTeEvVtcObBBbjvaAsLlQZzPuUDpJLljJQAajRkKoMIxXWwimolbdpPDPpkKetlLThdDvCooDdOFdDRrEhvVHgSdDPDyfFYmMoOkVvKxXdlLzZvVhHGXxgDrckbZqQNXBAaxVvXGtTgIBbhHiVqiIQBdDbpPJjrcCkCDDdjraPpCcgtTUBzALlFfRrAsSYyJrWlagXDdwWhIITWEecGbBmmMXnNsSpVpmHhMiDdDdQHhPktHZzDZzfnNtmMHwWygWwRrXxeImMiKkiUuFvVfUzZrRZzTtuIDpbBsuDdurRUxRmzkCcmCkrRKDXxOiIosxcCXauUAtOIXxHGTtHeEhgrRpAapgGOzkDdRroOKOVvtMLOoJnKkRzEeZrNIiZsMmSOogGzVvSsfGuULbBSnheNnPptpUEeuHhNYQqynaALlTWwtEewDdOoCqQKJjEepkKjJRUuJjMmrRDcCerRDEeyAaAEftTJaFfUuxQAYyROfXxPTtECcTHYyXiIxTtqIQKkKkzZdykKCokKViFfFfxXXonuDlLONNUuirRInAAaahHQYjbrRBJyHPphHBtTUrRuvVbNAPcCopPOdzZOVkKRrAqAjJaQPptwXTtrpIMQVJjfcCycheENULlvVaAuQvlmMfFqaPwWAapKksSlLAXxVrNlDujJAaUiIdkBbklLKiiUpPuKgeEdDehVvRzZvsoZzOnXLSsVvlxIOovONvVnsSoKXoKkOoVTxnmaAMhHNGtTaAVvIiargFfZzGmMaAgzGIiOGMxXmgOofFiyRrHhfRrpPcYPlbBbBLjsOoJRrjKkOAazLlPHhNOtTonEkKeXxjwgGWTJjlLWwUDlpkKPnIiNnHhwDdzMgnOowWBbnegGKkKxBQqbyHhDdYOvjJfpPLlMIaLlAiGgIirOpfFdXDdxDPpBbzqQZlvBbprmMSsRlLTfFtWDLvVOoFfwhJjBbxXyYWwHHhzVXxcxwWXbHhhyYIZlLzikKIhweEwBbRsUuOqQeEmMaAcfVvtpHhPTRrFfHhpCUusUuagGAWFLbBngGQzgGZZzqfHhUuaASsFsUmJjJFGgfaAAYyXxVwWvAaLPpZzlaARrfFNDdnoXogAaEvVdmsSmrRAaMjZzyoXxOYkUuPpANQpRrfFGgPHhLljJOnXxoiCcprRnNAaXxLZziIhuUFKkfcNnAogEeKktYbByWnfFNHNnrRtaATvVAaRvVrxzZBbXHkKnxXxXeEZzzpPayjJYtLlraeQqEwyYWnVAwWnNAaAoOBbaniIlBEQnNClfRStTsKFRdDBFMmoOMzZmRPDdirRIcCLzZmNxXcIeeEBbyLyZzYjJWwlosMGgdDaZvVwrmQcNFaJdDjUuAXxfqNjaiMpPqqJuAaZBlLvltTyYLVMmwVvWpPkKrRZzBufFBbUcCbZzvAsSlFfFZlWwWYyIZziPpVGUuyYgrRTywWbAaVvouXxSsUiIRtTVxKRrQqLUuvrnNmbqMcCmQaBbACcVJvZoOWAajxMQqYyBPpbjYvVHhcChKkOokIihHKHLlvlXxLVdDKfFIiGgIiTYyDrRaAbzZBSsDYyOHpszZWjJqWwCHhcQSuQqBkKUubEetTgiIrVUueEIuUivlGnNIJgGHshRnNMlLXgcBNnOokUuBbqmMBEvgGgSsRrBEJEejSCxAZzaXMHQYiIYoOgGtrRTAPubBURAaGgTYdDnwWIiEeSsAQqPpaNIiKRkiIVrRGxKBFgGqQHdNnDBLUvVjSsrRmxXlLNncBCcEebCxDdXMyXbZAXxAfiebBErRCcRrRbBxXBdDaAnkfvVFneWYywGGgGqCcQnfFUuGgXDmMnDELlBKkFfYdWwaToUtUDhHlqQMmeEIigGtaaEAtPWwmTtuUFfIipOoyAaGqQpPiXxhLlHWwIByYbZcCEeipPIhHEeJNRDjJfLlzQTfXWoKkOBOoBADdzIGmdDeDjBbwUuVmMvisjnNQqJGgOoSmebBivNBbdSskBbZsSNuUEcqQZTtzIqwWQQqsSxQvVVvmzUubHeVxDNzZOIiUWXxwhHOnNSMmZzyYBepEewsDWPyYpRrxXAaIRrZztTxvyYZmnSoOvVdDsPpNRnxmpPMmHAahKjkKJQVvpXCMmkKiIpbBrvVSvVnIyYomMOLRrliNWEewDOoAqQuUauUjJlaAMmLXxqQKkGkWwBblVfFqQvJjNGEejtTrfFTfFtTtbpPqqQORrawxTtXeEQquccEemznWwdDHkKjJQqhGgeNQqnomMmpPoOSsMyWwbBBbzZTpPHiJjHFKkIiAaiIRrdVvdsSPpLlZzEezZIBbiUPpEePzuUgoiIxLDdYyowJjDdBbiQJjSsKGzwLWsgGrLVvlwWrREelLPpWVKJjkvwsyYHOohEgnNjJAaqQGMmeSADhHdQqaDRUuHLrCcpgGPEexXcCcDoOlLfyRTtrsStyJjfOowWWMDkNYyPpsShHnwnmkXxKPpDEHYXFfJjwWxFfzZdDRWwYyiIrycfzZZZzzmMspPTLZUurcCRlLsBTtdFftTrRZpZzPpjJOKkoaMVeuUqNnktTKQKkHDpPdmcCBjVvShHRrNninPZzdDWwpWvVbBwsQcBNnbqvVQbBYyyYqiIlLUeKkGgxXxXjtTOozMmzUPpkwDRrdWLlkKyAvprRYTtGCatTAuoOAagGSXxzwKrfFkKRFYrNaPTJjpBLlMmZnDdNzyYbMpPvpyKkYnwWNmtTOFfXIYyyYlLWgGwVvEwWmMGoOYyBNrWwrUmMQbrGcKkrRLlgWFfBSsQqYbbaXBbxABCnNccCMCAwBbkcXVVYbIkKiyUurmYyDdXxnbmtTMBAafhHFNzhHRlhHLagUuGXEbBCceaxHhrRKGgkwJjAafFWZkKJNnJHHgxXRrzHcbBlotTcCOfsYyPxmGgjzZJieBymfFhpRenyYNjNqzBliIrayPtTpCcxXeAOomEeMohHOEQBayQLlQMmLavVRsQqgGSGgdWxXOeEThHttTSsAAzZqrqeEWDdWKxNeEJjnTsIgGyQtxFHNMmnCcAadDutTTaAtHhlnNsBbqCQqBeCcbVyYANBoQeEqoOyYgOxlLMmaAXFfzZZVnbBAuSKkuUKmMkbPpBykKyiyBuRdDtXXAXxhHaqxcCcKkCMmXlyYBNWgGvVdDvAaVjJKkrAaRgvmMGtiITUMmeEFsrRSqBBbsSburclLaMmKknNxVNDdyaoiIOxjJJjXbBhsSPxXxawkqserCpjCiIXxaAZzFSlLlzknoGgONKPZnNJjImMUspPRiIEeBRxxXckKCJuTtHyeiIEArRJjJhHqnLIiBbSlIidVhTrRrrgGRMmmGgNsPSTUmgGXxMSnNdDJTtwWCcgGPRlmgZhyYLlHArBbSdMgscCSKkGyjehbwRRrLPpAfFIioXtTEnbOoBhZzCVvcCfDdFVMxsSSaLlBbWwAzPjuhEBbeHiIUwWMxXWkdvZECXpPCcHhxyTtrnzZzZWVvOoWHhHhuUNTGOISsiIiooOMmAWpPUuUkRKkrKuTxXDFfOoLELleCsIieEOoDdVLzZXSUVvSstTDduKuUAmEqQBbSLhrRHvVlSUumsSGaDdCqzWwQqZWFQqIifGgqQzZbSsXgGPZzRqBbkKhHfwWqWwUNFgNLYyldDhUuHCBbQgGSsqlLPOoVIRiIrYVfBoSpVvPkKMmICchHSswWioJAZjJvwRrgqjJXwAaAajegGSsWwLxXlhLiyYcnVMxXwrjJOoNnxNRrAaOCcZzoIinpKkPHhpEhHnNuLDbBQSsAarRhHtLTuUlRbBjJuqHhsfGgFYWwyuGgWuFXAdUDdyyYMVZQqZzhHzYnuUNBbGyELRXbdDkKDbBdmMMvvVkKVVMtTtVviIWzjJUuCcYOowWqyYqKkQqQmIiRTtrAHiIhsMguUGpNntpyCTRrJjIeKktUCXxXxgJVdFWeELkMmKUogkKGuppFfEeQzCbdrtTMmHwBYybSsApmYyhHWwSEfFkUHXBbbBXPpVNIjjiIKkrlLjJNnrRRFjJfJsVvSJPpkKrpTtAlCVvrAQqiQwgiWwKzSaDfFdXcCxBboOvUuIfFiBboOVaAIUetIiTESljItHBbLqxkKXQLllLqMmXaUmxXeAaIiRrlNnJjrRcCGgLGHsSvRCciIxiIoOXyYPpUuRrLMmZDJTtUufeSsoOWwNoOPpPewdDsrvVHhzBbRIpAczzZAvGGggmbBGgsXBbawWllQPpnNYyLRrbsSMmqWwQAAQoOwBbKkHpgGPhyRrstTSzDHhSzZfkdDKsSQMyQqyQpPwWGIFCbBrRcPEvzfCEclLFJXULoaVlLMmxxfcocCRAJUunNKDEenNdkAplLzZonmWoOqnNQwEemIaSJyYcCgHhqgExyOopPOouTlljOozFiIMuUaAPpOcCkKAaotWmMPSDdpPunNnNKPpkVehlLHEvHhMLdDXIilGXxoIaAiACcBJipPIpeEWwsgGSfaACcOoFhkKFNnfkPDFfgsSEOMmsAdDanNXDXxYWhHXxuJjcraAeiVGeEfrgcCGXxXRAhwWrnNRIzZiZqprkuhBBbLlbHJjUdDHcsacdJWpPwjBbHhBJIiyRrMFfJlLjVvHGpQyVvqQkKbBJRFfrSiIFfhHFVAMxIbBNnEeiEOdJjwkmgkaBboOReExwWXwWJFKKWwkfsSaAiEeonRrOoadDuUSsBFfLwYfFfFcKsSkSsCqFsyYylrnrRvxXVMmNUudkKhHzZceTtFjZzlcChHcFymMYfCEIiAzowmZRhHwWDdgfhHwWOPKkKxpPSvQqUuXxVXHcqurvlLmMSjNnJWwyWpPwadtTXxDAIiDYwfRrjHmJjMbBYyjvnePpHuRlrmnNjgCcAyYvVyYpPrapwWaAPTaqryQaJjhHyidxYyxXnNoRCZzGlCODdDsqQnNBbMmSdofPmMNHaUkkKQqKEFVZFRKJjkLJjKxGTtgmiGYycMZzlwLUoOfFeeUNVvnbHhBTUuyYtGguxXZEnXDFMtODdoMCIKHufvDbCcaAmTHhngOuUjJqSLlsQUurRoLshjJzSbiIfDdFLvVQqlBgBAabyYkKPFOaAQmMOoqQMfWBbwkKFmMWwmeEXxqoRGgrOOIwnNpPqjJNnCLlvKkVrRblspPtWeEuUrRwXxzixyYNMmTCchqQIXOFXcCFNdAlzRrZPIirwWBbRSdDsdqQiblLBqDCcPpyYdFuJgtTXxRNcCnGgpJjsSPZlLGgGPpXxgGMmhCcRHhWiMmtIhWXxAxXONHhCcAzZaKVvmsSbBfdZcCXxxrOowWyzdDZYlvOgGoYyxZxTsSzZtYDcbZfFSmMoOcCVGyYbtzWxXwWSMMQqgqQedDxLlaMueEKjfEeZzFlhHUuLJFfeLOlyYTyfcCFIKEekQnjYmMyEOoWUSsofcOopRXllrRBZJjzVeEJZzjDdsSecCqvkKQqfzZKxXqQZzjZzfruzeGMZzdLnNaxXAlhAPphyVUuiQqnYsOAMmvVaLWwnjIiBboOVfpQlLqHwDdmsSJjaAJjJvVZkKDhHdHNiIxXcaglPkKBbhwJUTtujEeWwWaDdMKkyYvqFZzXxykKnzZNLIsSHUVHeEhGQqbcCBWMmeEwVvgbmcZMKkBLlIXeOorRNnaAZzExjJLlLlAafKktTatTXxBoOprHhfFYVtaARAHlLJjqEvJjiIGZgGzoLhHWwdeTJjYyteKJaqXxoOlLIEOZDzotTrQqqOPwrRWpjxXqQJKLzZcpPAXqQqyDvVUcCQuUhVpPlLqQwCOYHzcCfFYZSviDdonNOIbWWPldayYvhiIiIHyMmgkKlLGYTaRFfrAtOotTsgIfJGgFvptZzDXTEFfocqQKTwWtjNAXPpEexfFoqtTWOkudvjoeirqQRBkaAItTNmRvVQqgMmbmMBGqbBGLcCcipuPFoHIDdDkKljeWCWwcHjJPpquUfFQHhSTtwxXJaKkYUOUNIiJudcZaAzmgGidDZwrRWYhHpeEDdAxBbsSXarlgnpsszWwesIZIvVsFfOoSsSMjdDZHJjhzJUpdDedDlTtLiBbBbpPcYyGqoOULlGJjUMNrklLGoMmOBUtzZLlxlYyDDxXdtTNBbYywIJjiWiwyYwWWtTkkoPmMpQHMCPnNnAzjIqQkKMmxFEGgaoOXuUZvVzPYmMCEecmzWMYydXiqKGgkQYneErdNFFTdNyyYzZwWXxzWrcCdTWwytTBPcCaBVhvVHTtzZvbIPVvAaAkNnoESsRwshdbhHOWphsSHPVvWJjacCATFftpZtmMdDjNeLlEWJjdhkuUKvVCCtwJpVdDaWwVvpvdpPDmUpPAydDrRFeEtTlLsjJbvViIBFXeEvVuhgGtSkHmMtTwrRojBbJyAaaAXnuUaYiIKccHxPjJnqQQPNzRwRKkQqACdwoOUtkWaAwKTLlLlDdlZLRrClsXjkNnKECuwWUMTcCIpoOEmqfiLKIhZFMmTorRSRhHrsuVnNOsFOobBuUZznUpPgGuUHHmMaAoOeRrQCIivyYoOVKxdaJkjJjnNCcgIiGNaTlSPdDzZGgMmGgeEpTsHhJkDwCDrRkBaJjdDWwMXRAWEPccCCpeTtpPVvukZqQpaIirBLjzZHrRhQrXxrKkKqytDdYyvVAaSsoCfLuBzxwWXZGgPnEvaAVCoXtPmsXyESvMYjJjjzZamMoOVkSFOomhQsSzZfQnYyNtEcCTtyGkKKFfkLCBxOWwhiCxXMmccTtQqUurTEeXxgGgoOzSsLlFgydvVkDdWBJBbjLlbGgwZzSkKXpPWxXZMRHhDZlLuvVlgGLedJdDjkKLlDPTGuzgpFfPMDdRryAbBaYlLoORNrRiIZaZmMyRWwoOrExGgJrvafbfFELlIwWieNnkmMHhKPUNnJUuaHjWnNcCcUBtTOoyehGtTHaeclEewWwXgGlIMkKNNnnmhHjTgGnMBbiVlLAXhrVZkKrchHCEvVeRBbnjJqIFTDdUQqdJBblNiIeXajOxbBFfqfPXxcKJaaucdbwyYOaTFqmDdOoeoCHcVpUOfDPpiQjqfFqZfMmwWCPpfGObtTpPVJvzpVdDbBOyqgGEeEOovWkMmoGgOfHAeDHpPaAAAapPpaIiAhIQxXqNniWvFPZnVEeAatUlMmQqpnNMCesplvSjeOoJjLkKceXtTAVvygIiKAYkdcCDCMDhqdwWlLDqIiOoMhwiIbtkKiIvwKkWjJuUAyKjJjJRrMmVvhHsLXxlOuUHwHsSDZQqDdgGDyIiFQLlsowbmRMmrRSJjLlZHdLlDkzZKWwdJjdCcBbqCSqQsgGrRznuDdWcfLelAavVlNnXxVvWLlNDyYjcCUuJTyBRPObMmFfJjBJjxXQpYyNnWaAIfDpofpPFvVEeBqQblQXHJfGnsStfqPwKjJkhrgNjJfFeEIinNZYTtXCcyYWwCcqPpQqeXctMbUugJoOjuvVIlgdMXxOHhpHlLhgdDGTtvVqQUuBTtpiDTtFhmVguOTjYyHMBbyXZzMrvxXTbBtFfaAxuUXCFfMXRdDmzZSOAUufFsSpPoqrRHEZZnNzAIiauQDRPprdVVHyZlLbzZBNptTjuUJoOBfnNLBfFZnNmjJBaAbPqQnNyAzFUzOwLlgOguUzVkycCVMngzXmMxahHhHyNrRnAEVvXKFcCfyPEetTKvrRVsSmpWSswuPGgyYfYPpflDdIHzgGcCgAaGMpzPnNLjNuULlqQwWLWfIoBeHOnpZdDqYyWPdDKknbBjJGdAwjyYFNygiITdUNhHouJjCcuDGlLBbgdQZXxyYzwTcUmmyeEbBaAidDhPpeWpTtSOoHhFzRrZAlxXkSUuDGBRINmoOMYJjWMFLlZgRFfSXxPUmduUfFnRlAaLlLqbmMRGoTteEWFfOXxRroHKkXYyiIWSswAsUucJCwDJkFfcCKVTnNXUzZCcZLZtSEgGevVshXxHMmKNfLlWeXxEEeVvwQxXqdBxHQqhpXUuFibAQASmWvZDkOoyYErCbZkKzAagGKKkkgZbkCcKNnOofFAnTVjdDlAwkKvsPpUCcCgzkKZjJhTnNkKcCtTJTIhmMfFAaWLlwbOoCShHKkMdDZmmbBMKUBbRwWrCaAcJzuHhUdDlbuLlUeEBwaAWYCYVNnzLstmKkrXxUEKkeOolrReBXCxxcOoneENvVfeELllRrJkBkKWaAikfFVvJsoQqRpibCbrRBKVRZcvNJQYyqSsjxtWRHeMRrzDcCdxoOyXnNPeEOzZAhbBrRpxDdTtopAjNWwNgGSsnVJjvBbnQhHGMGAaonUuxqQRxvNGWwJjgRihHMKRrkmdQyYVcCvpPMmSskKbBbozZOBlvxXxiYkvVtPcIsSAiXupbBPUCaUoOuUHUumoniNqBdjziGgBfwpmNSsdIQjPbJjBpJxXgDqQVvmMzZzZHNnnVgGzGAnoTIDvyIiYTzlYcknNqfhVJjQgGdDxXIiuuvvKkXMKbmMipPLlpIosSTOIKQDFfEoDdOYtiIfhzZBoQsSNZzIMmjZzAUhApjpPNDdEeLxzZPpoGfFDUuwNnzJjZyLFJjfgGlPBrSUlLuXxvsSVlLMmHncBbGgjJCNhFfZJpvVjJUiqQkNoOZhHJrRpIKkcCTtXGRrIhHpuomMOdEeFfkKJeEPpQqjKwNnBdJTHVrjPwglLxXCpPnNWwoOnuPDwasnQqDiKHZzDEfFzZsSgGqxCGgMmxGgUuXxHhwZgGuUxVBbjgXYBVvbmGgbGqazZwKkmomoIWtHhjJZdbBDzyYADdRvFFfhKCccRrCobnmKtQjJzZqNZNnDdknUuEqptThKUuadDwWAfUVVvSTeXxxXxsSKkfFBRmIfqQFDBNnjTuUjJVxuNTwWTJjtzwWXxNtTXxvVhMybBYhpPgGHhdDnKuYEOoBeEAYTZTBbaOixloOEXHsSjxWwBXTeTtgfjtjJWwHhneeqQPoObwWoOGgcUogfFGkTgGtKcCCCsnNCyCcfADdnNqBbAZYhsSLhFlBUaAYBbYjZzJyLpPJjLrkFWwEexGgbBTtuUIiUunOgGockKblSjRrpPNnDdJsQjJyCcmEgRAaLlvjJLFfldpOVFbNuvXxFHKkmrxaaLkGnNZZfYEmIXxfpuUPPpmMcJxXZmHhRYPAmmdYiJjNnDdZHlLnNhueeEbZeEnNIixXRyYBbCfNdjPPpWrTWcuUEGgZQAaWBtvVTbqQdcCkmWDsBGgbOJjolLqQmMAayExXMmexVqIBbcCxeRrDtJjYmMyVvEUtTjnNJzZuehSCPpgihzZPpHoyYORKilLZSsuDdVvuOoQbfYOooOGUZqBbtVvdDTZzNNuUIXnmFqpUuPoOWafQNnqcCCQqEuBhPpXxYfuiIjJpiIOokRPprMQqRrkpTtgbBncCOAXxcCnZzAiEzEyijJihHIuMmEpPeMVHhJVvjEeLpGrRSysawteIOsikoEqQaAMbBSfNxaWiIwpPIfyYuWzZCJXCcdKQmMqMnNICYyYyKkAaHGGEenfFSMVUwWdWdcCEenTlSApfFpDdjJPWHhUuADFfuUjJdaZpIdvijDyErhZztThHHpsSPQOblLXcxImdHOxcCwBrRrQqBbRbBrAiInCcNHacCxXAYSsJBbRzoOKeDpPuBVvbKpPVmUxXxfFFfwnNIizZFdHaeyMzOAaGCcOouYyUmMrRowmmpIHhifsJTiIJqVvfFIiEerRjhWmMwHCGOZuulflAvVAarwtenTbjJBUuCfFctUrRUuzZafFvVBbzPdLwplLpUqyYvYottWXMfbaAmDfFwxXsSOrxHfFyDRzqeTtEQibkqQeAaOoCKlLlLwWHhkcEmnDhHMmdAtCcsTtSMwJJTtknRtOPpZKuWwUWDdhHgGeSpPseEECGgVPIioitaAsYypPdDSJjsYySCcdDAydoOspPgjBbxxUoOiMmITXFFqVqjiILaApPAijMTtmYfDeERVlXxKkLVvocaACkMUjBbEVvdDkeEKeQByXHKfDxXKDXujJuIibADdaLWwoOAawbcUKqQsNnZCiBVvhHOmMjJsprRZVXcVvBTJxMmLMSbESseBoOXYuIngEAzZayiIpPYeQJjLlqJsSkxavgGLqQldmglLIiGxXVifFLvQqvOokXzAbCcObdzvXGggkOoZRDUuBbaEBbxviqKpPkCcaIidDDnNdAaLUukpPSXYyxBCFfXQyYqdjeaAIHhiytThHlLrJIyWWtTCukeyYNnVvKkOvruseFmNzcFfCeEJqQPqOLQGfAJKxPPqFfWzzTIUsVQAaqrayrSsRofFrRGIostTqvpunyNIFhHfgVAaFqiIJjJnVxEeduaqKfFkajJkGBGgtKrRkNsSLEelNnYMOvVUVvuLlkKVYyEBbYyeyWwYNnHhqPwWXvVzAsWwUKBcAajJxbBXtjJeEgGMmNFfOoSoOsejDFySEeIcnnFnNTdDtyZzQOCcdtpTtwMdqQDTtXCvQOtTAfnWnNwoONGgkRrGgApcWTGgtjvVULLXFQqqEeBqTSsqgQTHMFUuOpwHgjJkKGSScCFJhGoOQqilyrRsFfRrUUEeFfuHbBJeBbEEEOLWwlUkKmUUuutwKsSMmSvRrHHhYyhouFfqWwVyktDGgCiIlNajJHangJjtTGXoxXOMrLlrPpRMJTtUEfFrYiiIuUkRPprKIPpZJfnFswUiIzqQPtWlLwrZnNYDEBbPpslLxFNnYIhHqQiysUumMqAasdoOWMkKcaAtTVLeEdVUGgKPDuUddSHNnhvbBshdCfkKxGhHBGNGgOoqrRfFbWflKPjJfQqbmSsWGhHsqzOaCpPuDdopPfwNWscCnPpAaKzZAIiJQSsQeNuKmMtTTbPpNhmJjLHmWazZIpVrRvPirJxXjROUuoBBbmGgMcGjgaDaCcJIiuUjRQBSAbskfgfIoSsgKUmeMmfXXdVvwWCbLrRlRpYyOgGjrRNyYZznAXruURgjNnBxpgGPvVdhqQHZpLsgIDbBdhHKLnXobNtiJjFknLUuFmZDylZLWfFLleEhycCltTLDrVdDpPoOLlbkKPpBnpSqLGwNQEevmeEFbHhBQPpffVvFUuFijjOUednPpNDEvrRbkjjDtzZHQCcaSDSGDmsHXMmslzZnbRAdDumdDhqRrVHHhXVTbaFosSeECJjcfFCkjJpPnQmMdlLCUXikuUjeEKkCswHfMnpWeKUzZdDAJIbvyYjgGxTtSmXUprnOKYyYTVRrsVJGXXwBHhbHRrxvqjMiImPDombBbZfYyyYyYhRrHFXxJRbXhHVHSsGghvDdVvxyYXxJZmMyXxYSsQqAjnNGbDGjMIitvVXxrcsgCdGbBqQrwWCcEoOdEeEeCeopPzZKSsiprYyxqPvoOEnJnPcxlLJHybkKthjFdwXhHWvlbJjYMLKyrmMVNquUSsQTnNtKkapQYyKPUyrRrRSsbBYjtigGeCzzFfRpAaTmMPppPUDKASkIjIqltxFtbMdBbsZuoOPcAFwNnWwRkaTEkDtwWTqIXKGtyCRrmzZXyYxDCcdeTBeEUfFIEeiCCaFBbcCrJYybwvVWGnihdBvWPMjUkKLluMmMmDdTKkWrcCKRryYlLBiRrkvVnNaFtubNNWwnyYGTpIiPGtjJpOoPYtbbgGwQqWBrXLlfFjJlYzBzZqGgBkKfFxzoOifrRJQBbBhyrRXxHhqiohcCfVIkvuKUQqZfFzCcueEdZAUypPUuYqQVYARTGbBsMGsSbmMUuBOKkEqRYypMzUTtjJHhhxNcMzZmdqcCRrXxQaADvVqQYYaBhCnHZzSsIiNqgttqhHQbZdXxWywcsszTRZZauUPbBiIXxpWQiJWLrbDrRJktwnNXSvyYpPhHqnNMmTBSwHhWfwTiItWzlLjMmhHiETRjsSJSsrGKuUxXOHhnFDkkuNXOLloxUukhiwSjJsGBdtBbTwCOzaApZRRGWwcbnNqdDfBfFuTtuhHLjSsJlrCBmyfFwpPdOffdPpDsSOcGPOXxopGgPpRjrwOoWffUuzcCoUmdEcDHunvjuUJTtTtmmMNOYvOLUHoiIlMmcKkiIkHUEEenNnrjPGtTMmOLCcdDdNmTJjrWwnHgGcCVvWwDXuIaAlLifuvVYvLehBXXXkRsyQknGRfFrqdIXxMNnBofhVZzVvxdLlUPpyLibskKPrsMkOClRBqjXxuJcCAonvVqQNnmEtJjTgYyGJFfCvLCcVrZzdqQfntpPaJndDNbhHBAZaFlqQKXxkbPbCNnIiIRriVvtnNTdkQqQqsfzZMmFEFffxRrbFCaOobUQAaqPVVcZzjGJBprzovAVvXyuEesuMjYESAashHtsSkKgZtyPFTtQfXxNLPGRDFHeEMmkCcRrTFfZgZPZzbBTtBfFlLlUjxYMgGBbmKiyYIOomJCcZzXeEveEgyVfFkkKKTCLltyiyyZBSIVymjbReHwLlQHhquUgGiCUvrRqQyYVjxsEeSWCjOoDdhYZzyHJDfgXPLlLTtMFlJqUMmIPpisAlnbBUufFIDdglogiIBbXxmdCBkVUuvRrkKgGTtvuknAicrmLlzZKoFftTFdyYwwXxWDHhBbhHdWDfNnKaAkOkMCcRClLIaNKUVBbRKkrKbcDMBlLbiIGYyOLGiNzsSDdZLaSgpPGuqQQaAjLfVvfFmlcCpxGpPFdcwXXxJvoJyYqQjOVKkucIWyYhELlrBJMYvisbddDDzYYIYKkTUuEectvYGViTtIxjHhMkyXJRruLbbhHBpzGzXxWwtpPOoSsKhfJjdrwWgplnFqQqfeEpYTKkmMHhzGTvVeyJmchHCUSULlbDdMmBYhrnNCcRHuUcCxaVOZTuUtRPYyaKkAlUuLbjgJCvvMmpuBOoDdAcfByBbYjLlJXfFFeSKKkDCcczZBpMmBLfAzaRrjATNFDcwWCfFRvqIibBVDdvQlHhVcjeMNOajZzUJQbrGdDgLcxXoKmSRpSeEBIlYuDOoXvHTtFuUEeObmiDQgNtTNnqQKIjJiWwqYSrKvVxxxXxZdDzKQqkCcbHElVyoOUFxXUxoNcjJCeTtESsnEeOdhqaYyAQNiIYyUuRtFfMnDlogeEaArRpJdiIDRaANSfFZzseuMmhKCLvQpPqVNnSsOhuloVcClLyonMVjJNUhdQqCeDMuOZFFSsRJQqrhHgCoFFoDvVrRWYyKkYOoMbcRUUbFQnNaAmMvVBCmMUugrrzuUPZocWDbgCBbcWzZIHKnUKKdfNHyYhouwWoOUaAkgtTteIjJGgJZFxXsbtQcCyYFfVsixXIxoOnIiNWTKfFUuyYfFjdBRlwjIqwWPpwPpAzzrtZSQqSCyYWYwDzBbbBTtBTTGQnFhNcHbhHfFAyyCnVvXHuZeEmPPprJjQDIidRrDCcjJdeocCgmSgcCtZzYyraywWvuUDduiIazvVDkUVKivFIiHORrBbIQYseOoESHZzbqjFjJaAXxIZXFfbqQNVvnQbZyKkLwWxRJjBTyTgtgnBUTfAKRrHhFfIbYywWkRwKktDlLFQTtqDVvbBdfdJyYmbBpwUuVbDHINgKfFkBhHUuZzjRfAccubOotEMBbcYTgGAXlLxagksSxiQdKetAKrixXIWPpgGfZzaCpUzbBSDmBTfXTLQiJiHhHMmhKsyYaNnVvkdutTTJjFftLlNndDtLlfBbFPrZZcEoOITJupkvVqHhPAnvROoYklmyBLVlLwxWtTDYeEyfJHTBYhjXCpNjnNeGgENeUuoOVdDpeEQXRPIkpPOPpEqQcpPtTDeSsRgQqYyDckKuUGdyYDSCMCceEmRTIimJgdBgJaPpzSsjoOBrjzBvVqjPpJQMOJjlLWwdpJGgQBgGbVXhWxhHxgaAjuUvSvVdDDNnoOdvtsOoSKmMkykoNRscyYCSPuxMUAdDausXJhsSHVPpBijaukEwPNmFhWScIihHeEewSsWEFUufJKIxunNcDqCcNRrKcOfAPpIiBtvxeEhvQHMUarBNLSxhSMdgCeEjJyYcsdsAqhTSsyYdJJmyYMKDdBVrRXFEefxuSsoJxXJIPpqfMVZzqnWglQsPNmMJjLlvRdFUuflLXxYCcvVMmHqFfEeQwlzLfzGLhHlgCcbPpQqBfFZFYLRrwWldzMJjflNCcNnKfITnBOYNnyxNlkiGSlPvVkKWwzhHbBDsSXbqQJGYyrRxIisSaJoUusSdDPrGMOomgTxXtBcDxxFEMuCckGlLOiFGFKSzZBaOosbsSqrASsdAGmMJgCJXxjbSNnsQqAwRrMmMhlMteETHuwWUnBfFtdDkUnEqqjQVvyYYWwycCqakNfFSkKwrRnWFOUcAoZQSdEeDzZgwMBFxXpkLFwBQvVngbgXFpPhHcDHSVHdDhsDDdpkWwrLlRdDuUuvDlvSsCmweEDSoOQMJDdXxDdjmBbSNSsiInfXQqXxrRtTZzKrRkSedXxVvaoOAyzRWwTplLZuWSwWfNFYyWuUwHhjzyReuiIjqQmgGMmCcRYymxNAhVvANnnLiIcdTKzZPpxXYvQUOVskVvWTMuoLlbBefFeedDEjXxhUZzuOouRyYuUWwrSSsYLIgHjcjJCfsUtTuPsSpshWOhHoPofmhtyYTtqGQtQYiIybQWwkKQyYSPpsTgeEpPGtqfxMeEmhHllLlueElLJwWAaVvwMmCPbKkBapPbBKFavVoqVcxYyVvmWbBPTDosPcCpSmMqRrYfBbNNCisYfdJEzZnTkKtTCbPpkuStVvTaZxJjfHhFjJxXpQvdDonAaNmynTbpMmPgKRvpPfOoFrVvRKkVrGvVgAQAUDAxXbBaXvNjGEegQfCcAavGinYIiNUPVQSOigOEecnNCYcCARvSuitZZwQpbBpFfLlXkpVvoOQqPKkjdDaFgqloiIQpjZUunMfEeESURxXVoMUumiIPpeELlEKUcuUrRwwYRrijWwRAaYEJDMmoOAaUusRrSsStyYjZFfzJTxcdDbsKlAQIKkVkKRrRrXeqQAdPprzKDdGxVZwWDBoBavVRrZxoOKVVlIvMDVAXKjGNiUyLlxsmXxlXjGgtbTtCxjJvzPPpBbSocIiCbIpeEPvVXxczSkuCrRYWwyBWGgtToOlzaAZEeJjBUQqUxvVdkdvVFpVvPkhxwWYbCcRrOzZoiIqxYyXazZAnNiIlLrRjJJuQqmKOvrRrsSdrOoTyYtRFyJIajJlJOoQvQWwZvVzffxtGgSsNQqnuXXZIidDzJGSZKkzDYMmyYaxXeERrTVvxXcCIqQoOOpvcevVyYbBENXxDdnhHwkzdDeEopPTrNKYPpyjjWBbKkmUuhiIHTaGgTtNMKBICcCpPcPpZrdYhVvFfXRouUWdMrRBFmFHhfxwTTOyVbBQuPPWlDpZAujJNETWRqQqQEeaLFNnrRLUUzPpogchWwxXEeHjWwJJQjqQtjoOSFPMMWMnNmOrRmNnMBbgAaoZjJmYEAhnNDfoOGgWLlSsXuMvkUdEkZrXxjxXyhagaAGRbWXohDMiXCxBoqReZzYdPpJIVLlDiPDdlLzwgGPwWazZfFsLtNkKDWwwDwWaAulLvsSnNmsNFfggtThVvtTcimkDXxxjcwUDdFiAXnLlFfFsQqmDdSsezqQZOKISoiETVvWAMmSYwWxXYyjJsUugmRcCrBbMPlEeCcAcCavmUIFfYnNuYyUeZeIaiINsSaoNGPKlLmKqQPUFyHbUeuUiIcIwIiWiFAwRruUdDMmhpPHwOoWQfMaAFfNLlxvVqQinGgnfFLlQzunDdBbNgIiyFBqUFfkKBbEeUFfzZcQqIiCSszIkBbrhIikKHIGPBovVObptAaTcsHTuwWUMmdEXiQvXYSqQdwwWMKDYywqzZzeEeCwtEeRwpJzXxZDnFcrfrRFfFzBEUzhVvHIyDDdMMGgagGQqpyvVrMzjOJjCRrcoCFiMeBbXxAayYyFzbnNBrWwRzgKlAAMFdDfXxmXRMhfXTtDdxVUnkKmMBfvoPhHGgDnNXxUuTsStDkKdSsVrvVGkKcCeMUucCYqvVLBCNXfMwWmKRfpPFlnzZNlyEeqQLluDdDvTPptVdbJjLLlfYyHRqQrRrlHfFyzUusSaQRraFYcVvtTSccsSoODdOuRrCbBBnNbBppAaPqQkKEENcCPpxXTJFGEtxbbBkdDKXJhAaxeLXvVnUufyYFNIoAVvtztyabaAeyUkLhAEeAatWwTaVjJUuBAatTbVvvjhHJHlrgGRNHWeIiZzEwmHnZtnUXvtSsEeJcCbdiMrbbEeBzRrZXEgGtKkFcCfsvuFUsSukHPQeNKznYyTkMNBFFfjJbBfOCSJjsckHfBbkKVrauPpUTwiaAdkKDOMOMmMWAQvVgBQpQqPqLcClMyxyYGgJjGTtJPpvXGgzWXUucXQTtedTrRthkIrRdNSAXxWIXxidpUNxXMGgSsmcGgGWpuUdDJRYyvhtjDiImMbWkjTtJMmDUzZPJjiDdgFfxihHPyYWBpPbwkKjznKIuvVPjiIzusjJSnNUsuURbpyYYWdgOPpXljJnJPaeiIEHuaJwWcsSCiFfnqKkOEebHLlpPFTyeJjdpLlSsPAqeEQsRrSvVtTalNnXxLqkiotOiPQKkqIBkmxVVUUZzqvHFQKCnNOoyLZtVCcsSdeEitOMmNNnagCcLlZJjeEnNvYyNhDdpPdDdtTGKkJbBjqVviDnMPWWwFfIiRrFrmdDMVvRbNnIZJDbQGZzWwgnINJjOMhDSPpsduAcxIaiiICpTqQKiIydDIXVLqDqeEQYyLlaANqQfFVvnhHkKkKIrGRrgnEeVaATrRtXrmMXNAaOgmaAHhJjgqJaqQPWwQqOXPHmMalmMLopyYxYXZmEhrKkwPpxXTXjJnVCzraAvkcaABeEIPWwrCcOSjVvMmKKkfFIwbrRVvKjLFCbBXcCXcxpPbELUuuRWwMTSlxXwWeEZbBvyxXcCcyLZjukNnMFfuUzaADFyYTtfdpPmscCcBmMyUuYHitjHhVvtHGgGcuSpPiIVWwWaCcVvLGgJvVvtNyYlLaUuRQqrCcwWBzGBcyYRiOoAayYEeIAjsSJXxaeEeOoKdzVwMsaqaBRJjrIlLfxPjJXbDFnkrRlHhLMmmMTUuzlzzZuxQuUqJjtvjdpPWlwWLKkcjCSaxhEeFfwoORrOgYypPrXxXxwWBsSQreENsSDHhbBMupsrGzfSsmwWVvYsmMSywynbBdDifFrbgdsGgKLafsJjPBbbAaBgGwEHXxILlaaAAYgGMyYMuCtWamMAqcKkCqQuUSszZUUOnuDkKtOoNnGYnfJjJWaDgWwxXYyNpkKwLllLQzPNoKkhEbOuUieEpPniINFjLlJtTwlPpnJlpZPmZhiEeLLliIFiIyFpnMmNUPMlLkEepYkxeaYIiAyYZGNmvYOoKvZGHmMhoqXJjxZztTQGWSsoZufZagGYpJfIIMmiiFjzZMzblFbSxAaXsTtuUyYPgGnXxpPIiuUMmySyYssSYlLzYRxJjpPXKkruUhvdDvqUNnLQqleEzvVeInKkNiFHhEefhIiQOaoszZoOMrvVxmcuUCcVbfFtbBFfzZTBvVRmkKxLlYylLYpafFAyYPmhaAJtoIiUBbGaAvjJMyYSsHfdIPbDbBdPomDGLiUEeSspPSsJjGBmxXTSIisCxRrEXxfFfFQxyKkbCcBGgzJjQqjTtJpPnbBGRHWpBbmgeEGMmMQFTNgFjhyYxXxqLfjJyYpPFOOoEegiIGPdFiwPqnJjNoprbGgYtVFfvdnjMmwWJwVJdJjDjvzZLjJLElLlFCwUNdDZcQDBTtbFfXiWwShHseEkKIxDpPhztTsHuUhrEeMBWtTOQqSuTtUqfYlLdzdxXkAaKhWhoSjgGJsSGgkYkKaVVvoOPpTQqBOoWHmCcbBQQHdDdmcKyazSsZkGwWYaxpPELYywWlCXxhHllLdXxDEuOoUJCcsYlLyVLPSEcmHhUEeuPabByYAVvXxLGgYyuTvHhNMmzpfXxVwHcCPaheEdEaOohFMgGmKwVeQYoHhvPZVjvBoxXgFcFzQQJRRrrxtAaIoOiXxnNRrTXqjJIzZoOzZtTdFouPvrRCcCuUhcOErRMQfUutAolLWYyBDrRCUAcCVvAjCckCgGpDdFXxVvfFGgQXoJAxEnLjDutfiYyqQQNznNXxvRyYHxavIAaZzoOmNFftJiLxWiIWWwwDhSsHdEeLCEAheEuUnNgQlLqHEYzZbuCPpwJhAjupAmMaBFAVRjgGXeYzAztaAeETnrRrxgGXzDdZHhmuUGZUgtpEYyUzdrmzwiIxsKuUDYGfZGkKtnnNNRpzZPUvVuCcCnNISsnNHomMXbokKOclgYeTmIiMqFOoqHMfsKvyYDdAJXbGgbBwWBxJnMmNymBbVQqbbPbBpBCcBYDdyseuUYxSARrBbaMlLpUuTxOcPDdpjJelLNZzpNnbUtTlRZzrFcgEEeeGEqQqQCceOLlrRTYoOQVvRpPrkRRqJlbRAPzKUFfwjoOzSsAaZJqQMmarxUoOuBeFfEUugGbmUueEIidDTOotAwWhHbmMKdcWdKnNjStPqQdDlPpQqZhHzCcLpsLtAnqQrRAaJsSTtKjAtTDXkcqEZzhhXxuNvzZVfSonNvhjiIJHUOeEtdGgDfbBDdzHipRrPklIFQMelLPitmcnNsSeEDdelLqQJxSLcyYoRrOlSszLfFLlDdTtziIZuWDcSrHhSsRsGgarWrJjZnpqNpXhsSCCTdDtnNkAayAtTNCcxoOdDYOWoOhyqQYVvyYKsTHKktTUNaAndAaDHvVlLhxfSfjJYasSBVaAvbuMVPRrAFsSLlYUuyfRrvPeEddDDRrPpjWgGUmMukKuUTccNnHzdDZfFDwnJTbqGgQBzPwZzwNnoBDHSWTtrEeVvCcRreOIeEiKapilLlLApbyYYttTxXDRwZzZjwWJLlYxEIieXKknDtffTteEnyfFYDpPpPRNCcnNlLyIxnNZzDKkmwZTtMiIioOIysuUSKkpdDuUjJBbUuxFfoOFfAefXiJZaNpIicmhMmzZbkKYyHXxhBqOKKaAIZzndLrRXTzZubgKRMmnFeEfuUmmMugxXgGuQOogqQCIEPumikKziStbBTwWTtZzEZSVvGghHmMwWSPNJjGLRcCPydDzIMjJCDUjCcEenupPxXouSsyNndvVDHhMeEmAjWsYyxXhmMXxwjwLlWJEJLbBdihGgOyYfPpHhrAaRxXpUPLlIDEeTtdClgQWNnwrMniKbKwWkIEOJVDOopPUKowQOxXanJkCOjJecCtxdTPVUuqNWwRrnQfXxfUuFjLlFiIiGSyjEeJcTtLlCOoxXYhRrpPUuQkKlLqHjJVkDdKADLpwwBVsKkzYyycCZjHhJhHNHhnhygGocGgWDqQdlLvHqtTuvVoOuUDWwddYQxaZzpRnNrABbFxXfaWwxeEXPClkoQRQqOZdzoeLlWwLliMmTtDdBbxXFIiaAfAaQAjBbkEESsDSslOgnNGgVeQFfhaBiIbpPreETZzvQqKkEeyhHQqRPbAOoFYOwWoyibmEezCRrMBzZlLvoOunExXePpNrRlLhilLHVvsShlYRrQqMmDdHhAafQVdDmAUukKeEHSsHaAhLCcRHWwhrlpLGAgGCEejJnhzVvjMWhPOopPFvJNloSyOoNMmIiQqIvYHaHwWtTDmgEZURFJhHFDdfVrRveEpPkxXFQqVQMmEBCccCPpbvbDddDLLxuUrPNngGNnsSlLCNnFOuVvweJNcCqiYtLDdolEkUmpPAXdXxDEGnNQqmmsXxwhEeHqgGQIiZgGNnTBgvWCcwszBCdyIiTvyYVtXOoaAzFcCHLGglhfXVLRJjvmMVXKkzKkDFSsSswWsSMkBwWbnHnNIeEiEeheEoafzkMmwWKZPWwpFwHiToOIwrkpPKDdVvHvViIgXxzHhgekKyYEiIGrGjPpUkKzZfQxXdNnDIDPcCvVnNvVpJjpLalLDBbnfxfouUxeEdDiTtBbHtnXIZPphHTSLBMmiMmITuUlLnNtcSspeEPpPSssSQqQhHCcWiooDdkKjJfoOpzPpZxeEZzrRXVvoJjmIiMOGstTOoZHSdDliIGNPptMLlBdVmMHhFwWTtaAwWGEegWwUhkicJjmTmfKkdxZzNwWezEEulWLvVJjmCgrRIUuaAMXWCcKkwkFfTtLlliIbBrbBfUuTtzvfeIiPdDpuAAahUunpFcLgCcoOcrONnOoYyXLUuZyYzOogGlDhHISsYRrAqYRsSLllLQAtANnRUVvucCaMfFJjmGZgGzJikKwWIMlyYLRLrBbtTUuUrRhENVJhCcJFgGoOcCWqQydYZzsVROtToUAaQCmMhRrxTzZtttTkKFfPpOoLlOoTsXkpSMmDdsoFyYGIoOirzMWOxXhqQHfFoOZhHalLNneLpKkPqQEeJfECDUuRLoOoOYUuSfQyNnBbBbZzZzWlbuUdDAWwNOUuFfIFlLKkKkkuUfLHhljfIiFHhrAGgAalLAhHaVvKGNnMKWrRDoeXmaqQvfrRwxXWsbBjWwXJjGPpgxYqeEPmWwMvfFVghmYjxXbaADyGgYKkTLltCYynNASSsCnNjJhrRKjJzZRPQzsSgGwWHarxRFLlEyXxYPtTpeahtTMmSsHsSAgvlLIEtTRKkGCcgCUwynNdZzxsSSOoYyozZQqeKIikGdoOlLpKhHHbBPjbhJjHaOgLxdGgUutuUNnTMmDxXlmwWYypPULlshHpFIiYyfgGXxwTmfZJCcLHhHhmMMmLtiIUVAavYbBXePpCcdDGQGfFjPpsAiMMNnXxNQqOPNEekKQqnayYqQjaffsScCWmSsMwFFroOOqQCFXXvAOaAlWWwwuxjcCYybBEeTtLlDdZqQVlLSsLlepAafpPppPzMmZPigqUuYYpPmqaAApPaFsTJjqQHhmMWwQqNngGENnetNndZuUsSYWszZcIiCSJjwtTIjJiWqnNLruURVvlQnNKXRrTtRrxkqVvaaKkBSsUubBlmMWwqLLiIPpIiAxSVaAvRWwrgGMVaZCawWsRrSPirpPOofFZRSWrRhHEpPpfFlLnQqSsWwEFjZzPpdzlysSnNYrVRrhgEFOonsSDdrRoONfMuAvVhHfFxdDQvqQVlifFMmIoOuUhTiJLsuIifFiaeEAZzAspPrRZkIGWqIOouUaRLlcLreERiIaPXxaAAaKkAaRTtireERnvxaAxhuKaAesNnAamoOMMPQqoOFfiIfFRrcCaERrrReQeEqkKWkKMmRXxrhRDBmdDdDDdMsSdDcZqrRPBbPpPUOulRpPrwfrRFfNnDvjGhHqQcuTEitoOcSyYsYPTNnPmDdJjSaMXtTxQyZwTsSvVRrDdmvmBWwxrleYgyvUumfFYrRRruDagGxtTiIfUwDdUSQUrZzLhHKkdDtlLlTvPpVwWzNnZtTqCIicdlUeKknNPnNcCXwEeWPpRWmvmMNCIlHSsEJjZzYyJWxRrQGWRrdDVzajtTIiOEeIBpcCXxfFLfFiIlPbQqCcsSiIhHCcuyYRrUiswWnNOFfwVvWbFvRrbMmdDFfXxBwWiIlLbBlLkKyiZzvpuUwWEsLhHlSecnGnNfnRrKkjJfFuQqQLlFQjJrOopFfTtxBwixXIQcAgMDdssiITaAteMakQqdDsxlvSclfSVvsFTyYiIteEUudttTjJZzwaTtpMmjJPaAgAvVatnwsSgGcCOosOlLoPpSwNHhLlRYXnNFfmMxcYyezVxUCcuXDKxXwNnvVcnNCdDmJBbpPpzZDdZgGDdPpCcsXRrmWwvSsSscHKpPkNelLJjPBGgbpaAYyPpaAxXxMrRoOmOadJjFfDlroWWSsGgwnNBfqQFZEeZzzZzHEVvFVvfTtnNJYTtmSUusVvDQqsBbRHhaBbzceECGMIiLrLlpSsKkjyYlLKkKkYysutpOoPsDdpSnSsMXoOmMxRbBtHvEOoeDLPpGgslQoOmMHhCcqNWjJwgGQjaxXYhUjXrbrGgSuizpsSzZZLsfcJPcREfFSQKBbWAXpVvHAYnvXACRuUUQxXIisSHhIifScxXCsxXvVuXxNngVGwnNtZRrzuPpUVNnvTnbLWNnwQxxTIkKirUbYKKkLlkqQFjJfIYjJxGgXYsUbBaDdSsNEeHhvdDzoGAazZObnNnBbaDdIiPpvgGBEbWwcRrdDQSLLlUKkUuhfXTqYVvimMSeEwJjWtUzZuXkkKwSshveEVHwsSwWQvsSVcAaUuGgCxXRjJQaqcCQIiKEenNkaSBbsIinNrRowwWzZDrAcQqWwCgGQqlqqYqQAbqeaNnbBEhHYeEARLTtbUuSsZEewWQBbnUsYySuJErPHmMTtMYbEnNnNIaAHhMQBbqXpSuUVvFLYyChiIMmZwWGhhjjzpPXfFAQAmMaqrRhHYsSAayxzfFZArZzKkeEZMRBbYcLlCbBBaARrbgGBdDyvvxCKWacJjHhmCcaAbBGgBWwvVmMyxdDXbHhYyGgWwwGCIiYyKkgRBquUPpulLJjRRaAnbhQqXxHgeNnncCxXRRrrJjNithHTxoFfpPMBbPVmPtVmoOlLMvpAnRyfkWZsUdDSskKBbcgPpFfyPVqQagGAMmaYWwKuBbZpPzZPpZaAzZzcCFfZJEuQqQCqKuCcfFUkSnzZNRrQqgGNVyNnYvIsJbMhYyGRrgzZKkaAvmAPAazDbPzZpSztTGJjgltDdSFXxChZzyYeYydMZzvVSsNWHhKdmwFFfYTqQoOFfzZmMYFEeQqRrdXxCQqYyRlpjEeVvJPhrKkdRSwBbkKeDqQdiIElLlWZZRrtTVvzbBaVvAgkqIWOlLlXdsJjSDDdOHhGZkCcKmMpbBxXuQqOoxXmAaAaMTLltDDrklLkKKRFffwWhIhtVVvvYOYyNbBQmMqnEoONZMCCUoOWqrRQANnXxoSsfFQBRJgnLZzrXxLlRKgXtEeTxlLdeEsRPncCNlLRrcfFxPkaAKWwlLRrqkMXqgGQSspPNrnXnNxCcrRvVNMzVPpXiwJjdSWUuPEAdhHDrrRRgGaGGgtTgGvVgbhHjHRruJjUhJsvVPhHpoyaAOoYmMuonaMmADdvVDCcddXvEhzZmMBZMqXypYyPyYYiChHexXnaIiAsSzcWwCKVvDAaRrtToOwWntTQmMqVIEMXxIWTtJdEMqQgiFfTtnNKkTtZXIisSxuUabcCbwxFtqZFdnNrnjiIzgFfONnoYMQqmZztTKkPvVMoOFPpfpTaeAVvbBqQDdAGgTLHZzhdupPTlnNLuWwWwKkOXxtaMmAADyeEbedoOLUulNdVvxNgdDgSspPegGEKfFkENeEKNbgGuDyKkYdUrrNnRIFaazDdBEeeExYrRJxXDbBdNnulbhlLjeEJgGqPZzpQfbkTtXgvxXKnNrkcCyDwWdtrpdaBbgGADVvWwaSlLYyshHyyqhmcWwsebBbyYmMGVebiIQCcKlLbCeEGxLlmrHaAShJoOjjigLbBfFeERGuUUsaqQAKkXxhGgHvSsdPpDVqHhEOzsSMHhmPpaHhAtTPpZNnohHemMQwSPCchoddtdDKkwWkUuKkKkEeyJmXJhHwzYOeEofwWFdDyVlGgrRLdDQqZRrzOqBbQogGjvDdBMEQqeuUKkREeVWwoOldDZzkLKkdDIilfFlLzZKkXTtzZLlRrsqQSiIvryoOJhHjYOPpiGcCgfFIBYtgGvwLzcCUufLdDaVRrrdDoOkKqIiQjJSssSRbYsSyzZzxXUjQkKgUuGQmTtzwWZMmtTIAmMwWJnQYvVynhHbNnBCBbqRrMHhvVRZzWzAdDmSXxFfOYEiCnMIIiilprTtvVQqfDdbrzZfDdkrFUuTtLcqenNbGgyYLQqNavNoOXAPpDdoOaxGgtTPpNncCvVSsXxBbARTAsSGYgGyIoOKkaAigrRrRZBbNhOhBbwTcCUuzwrRWZyYGQpPqWwmMOaCHlPNZznIOHhNKkPtTJjpzZZfFzoYyqvLlVnaUuAaIiKJBpPSsbDdMDDdWwPTtkKpeGNnDDRrddOxONfFnajMIiuSSstAhHahHTQqNsSWwlJEejeEBbZzfwYyAaQqMeEOseJjZzExXSoHhlLwRrWdDmSlLXxcPFvRrkKVVvnNCoSqLlNnlLQxZzLZzlXxXxXbBpzZHfFxKKkkXhlLPnNrhHWWNnxXFoOnNfHiBgGbHBCvnNpUEeaAuGrRgKkYmMyPKWwoqQOkSMjVvJnyuUYNnNmoOxXswWZBbSsWLllEeiIVvZzdhHwPVLmMPhHoRmLPtTzZpZzcCGjJgPplFMmVjJSswxUCcuXWzZyYoXlLkEFfGgZQqzKwWZzuUwWfFkaAGgeaAENcVvCNaAPpnwWNEvVfFMNeEnmxXeWwGmZWDdGgNLdcCsnNyYSdDBbutJOoIiRsSiIAarWwpZyYgGosSJjSJolLObZzBpyCFZzCczZYIogKkZdDmMDUudGRXxAjJgAaXtveEOxtTkVUuiNSVMmrHIiEGkRreEkKHhIIiITtBbKcVvCLnXxeERvQLVqnStQqcCTOhwWHotbBTsHiHhICYFOomzLlZMuUvqppTtPomMOPmjWwDjJdgDyFrRXxyYfyYYdGJENneiPsSRxWTZMmOaoOAozNCcnavoDGSsgqQpmVvMEeanhqQqnodUNOUHhdHhDmMQqxXuxIvOchqQHWwYzZDqQKkzUuZqKkiuBbUYyavVAGWwNnIigQhtepJjFUuozvVZFcCfrXUuxaqXGgAMmfFjUuvVFemcCcCMAFfakKaYdEdWPpLlojJOwJjrMmTtHhPkcxXWyYUuPTEcCHNDdZzsdDYyDJjdlLovVXgGEexwWOAaqQOosIwhFfaQqAeEEeHWiSAazZlUuUugBbFjlmTohHZoEePPkKhionhHNTNHFfhneEUuSOodcMKCchHZIiMrDdlLXxlLcCCcuUXBbSssDqQdrRSUSNnuUPdEGFpPfTwWtYhexXwWEleFfELTFdhTKsSpOoqIRrPvPxMGbBgVyYvktTOoKgoOpPCwgGtiNnWwiXxHcXxdDCJjxGALNndDwnfFNZrRzRQqKkTtjaaZzZbuGNnAyYVvUuRJduvVUDdIicTXxtKRuUveVvKkETtJjbxfFnNkKHhvVgGnzBvVKTFftUuhXxHxXCRdpPpPpsGBbePpfhHoUuONnOcUuVlLXxjJHJjTtEpPlLvVjJBLqQPpiIObUuEeBWwOsfFScYyCrsSHhsSsSJGZzgQpOZzodDiIPOyvVsSYTtoqqfFxXjPduwWUsSkmMGgKpqSVHhJoqsSMkoOvVowyYWtKbBkuUcmMXxRrpPCbvVDdMRrROWwoonRjCcJQPpHJZzKkBZzbXxHjQmszZSHhCAacoGgoAaoOcMmCHhOnNOMIifFbfDVvXxMuUaAIGgGAAaEeTtMmaqQIUuidDaqLOWpzOxXMmjNnbBrjBEeAaFfKkoHhkKOiIjgGJJjbIiJXxrRKkXxHeyYnNKqcmFfqyRrgMgGmEcChEeHUXxjJcCwWgHhGSgczTgKkKktTGVvvVcpPCLUrjJEeRdJjDTtdDXhtyJClLcGPpYygzYUueQqExXyhAUCcNhoqWwraKjJkhHOoiIZzlLPCSiJWvudDxXUSsIUujJYYyyqIiUUuYyfFQqgBUmIiFNnwhqLlRKkroOwWcpPVTyYLltrRryimQqSdVwSgGsYyyYJjWVeEvvKkDTkKvVNnSsjNJTtCZzcXxfZVCuUCpFJjOpPVvcCTyGgYojJcCRrOxRUubBQoOqrKkwyYxPpUuXqyYQnNiIcCxTtIihRrvVANnXEdzZTEXPjqQSsNIinHdkKwiIWDeEFfxXVvLAatTCRjGgWBOobFAaMkKrUuRmfqQfqBbQnxRlLtTxjbBBjJboIiOJQDccCYyEeKOoFTtGkOcComMKlLfxrRXFGCcgBbzBSsgHhVvGxXYXxflLWwzkMFfwWrGgRrnNRTqPpUxbqGdtTDUufFwHhRcqWwUuQzwQqEBbXWJjSswTKktLJHhjhHYyHEeIihFpPfeqQNnGgqQsJVSsiGKkuUNCQqcRrAuVNTtjnCcNjJJoOHCcXxOoIBgowWRpMmPGWxXnrPbBhHVvQvWVvUuwVcCqfFleodDWTfFyYtkxQqcCSsfFdDSskvKBoObDdUuoOtTddDAaNntOoTYLeERvgIGgiGVHkKKkVvWwaAkOMXovVdDOcWBdDbhtLloOLlxTtQZzCOagGPpAjjMmJaAJJjJVUuvtrROoXxOohHVfdDiIoOlLsdonNbZIigGpNnvVPwWzDNbBvMmVQKkqeESsdbjJYjPpJrRTskhkKHpPQqKTtxXviGbBbBgIVjJEetTuUqQLlzZNiIawEuxXEeUeZvgGVfNnTBBKkblAapEePzZaAfnNCbBWGgmMwzZcwWqlLvViIvXxnNVUUmMukrRKtsBbSTwdDWuqQQVeEvIiVvapPSKkUumsEBntToOLleFDdVpPtQqqOoFImMZRrEevSGgsVOozMmElLBKkFBNnxWLmZtTLlzQqCczZMfLlFaAyYSsmqQFwWfLDicfDdTtEeFClAplSsIiHhLSYyYPJjhHRrTtpmEFfeMCcmgGNnMzZbBlLbBlWgaAGAozsJjwWSqQPGgfFLeWsjIidcCEKkMAamMmgJjRrFKkhFfHKYyhNJoOXxmMUEeujKkTtOoEeDgmsSLlMSsIijJTtkKBbkCcpPVvvVUuJjUujJUuXxvaAVbBGgvVKXxkLlKNnWWwMmSsnNWwEjJWwDhHoObBtTOoBbbLWwYkKykxMmHDdqpPsSNJjzQOofMmFwQqWBoOsVvSYyCceEGVvgQqbyRrpXxIihmPNnqQmMoOpMFPpJrxXjKkJsSQqQRrHroWMoNiZzIVvyYnTxXthOXVvsSgkygGNREedmkKtTxwkKdDZOozWeEMmPzjJJjhTtgGYxXxhaAHkNnFfdKkCOZioPpLlhHOyYfFEerbBRUuJqBlLbRHhxCcWTVQMmJjjrnnYyrnhtRDdNnOoeOIibqWwmwWpPmMZzcAatwWqQBbcyXfFWwKkkKJjVIGCcgsWwwkKlCdDcLWwnNnoxXONTDfFKXxAyYhHWwamMktTHkFfKfFhjJbvVpRJAFfauUwQqKAaIiEewWjHxXjkrRaAKJryYRhLfFVPfkwocJjCcCOSVvKnEhEeTlHhVLlAIwWJSeSqQAaYyEezZrIicCzCcQqcokUuKfyLlRgCcaDdAAoqQOQPJjuUQOhBbHpjJPNzZnzsSNnyYgGZxpUuTtPRhAKkLMmZAXxtTDjiSsLlZLlzJZzAajwWooOJvVjMyFFRrxXffNnxXJKwWxGRrgkKXlvVJQSsqVYdkKeIinjJReOEeohHaCcLlWwAGVvKkwWgeuUjCoEUmMlEZzebJbHhBjjLlGFfxXyaXxMhHVvpcCRrPIgGPpkbBDsSWwccCCrfFRNnIRrVwWvxkKoPpOyrRYFEeZzECYycSHQqFLggGVvGdDjJLlrRevIiVuPzgbBGZGiRXapPAzZLlmMaAYySoCDdXxDSsdmEGgeMcVvsSFHherRWALlSsfmMqIiQRrrHhREuUeSDMmlaApIikKDdGfjMmJAakKUuFhoDdVvnNuUEPpeGgvzZxSsXqQWwoNHMmhKfFkhMmxXrRHNBEebQqyRhFmMfHvtuUOoTnwQGgiIqWvVxrrRVvEejSOoHhXfEeFNnvVWIimMqrVzfbxLlaVuURrNNnBoOoObcCdDHKkhXmycOLlHhdDCcpmMpPkKYyMzZDdbpPJhHSsdDjFWweEfGgjNnJxuUIiwWCuQFsSfJeEQnNqxnNXSsoOjZsxQqXJQqjZjJzPrsKGgEgGYyMqQQqPpmMmVvELlroWloOLwoAalKxXkSoYyLQqISNnWwjJMmHhuUGxXDdUuBIxkMmKPpPGgpUuEejJYhnNHyDIYiIbQqByyYDHMmYyZzhvVwbmCcnBbWwozYyxPpyCjJcYxXRHDJoVJwWuJjjvKAuUaEdDiIFZMmsSGgiXxZzuoOIicCVNAZEjJeNnqzZLlsIiFijJmMnNITtcCtTyaAYPpfLCFfwuXxUGgrRvVluYwWgGkKyUfRHGtGgnDdRrEVZzfFvVqgGjHhJZuUzQoYyRrUuCXqeEmTUutTGdeNIinrRXPwWpxEmMqWwTtesSeEPVOokMmKvmFUbBHhuOoyYCKkLvyYVlcWwGgnNoaeESfFsESxGqQgiQqEeXESNeErReEPphkwWLljJKaOcpPpbBcCPhEezvOoRuUgnosSONHGYdDJPpDdNUfrRpQMmZaAhTtxcYkvYcPEfJlLSfPNnphRwWrHviVEevIZLhGgHXVOQqovhHSxXstTxMHUucQqCOoJtYyTjolLQnGVvCdDcBVvbgmaMtTmAMQqNSNcPpMmCCqQaAEeDsSUudgGgoZBbzOPtTNnqQnNwNnWcCUqQvMsFBbfhHSJRDWlLKqQhHAFfpSsPaMAaFfRBlLbaArBOaAoZtFfCHhcpPjZzyYYLlLrRlyBkKpPNrRfUugwWGFhHJAarRjWwkUkKuKpkKkmMuUbhKKkLlkHRrpPvVpPNHhnVvaMKkmHhAdDlAqUuVqQvQUQiYyjQgGTILlSfEeFZzcZzjZjJBbSVvsScCqQnNgwWGcXwbBpPIiijkKORrjJoJRrRrWwlLlLWTAaRVvhHNnUMmurVvDdRGNnBJjEeWfFBbeEwiIbfATLljJhHtkKTiQqyYIwWaXxfFeEAJjGgeOoeoOhHiAaIEjYyNZznndDbjJNnXCJhHjltOsSKXxnVvVvaAhHRrjJVuUBbvqLlIiQNrZzRVvzZYyvHhesSEYyVQqTtkKHhtWwTJjkSseEwWPAayVvYTdMmcIxQdDqaAXVvidDNnkdBbfHheEENnlLeOLlDdrMmkKHpPUurqQRHhhBxXbRoPSdrqSwWsxXuzZJJlLvUzZuVsIlTtLRtTraeEUEeuAdDdoANnaGgLPpuQqUoOlwWZaAXxdDzDvJjTtVIQqSlnTtNoOPdDhhHZzfFWwxOogGvkKVXvRAaoOrdDAaNnmQiIdDlLqMlBSsbtTyYLqMNxNWkKQlgGLvVlMiIFvVfVviIAanqQxXcCRHukUuKUuSspVvzlXxTtdDLoOBbZlLfJEejqQsSrRFrtoPuUoObBGsAhHGEMmfjJFOoSCcqQjdqQWwrgvVSsGpPMcZzPpvzrtPpXxTSfFYkhHKTIZziCtTcTtYfaYyNuUuUNnZzbBlZfFbaAClFHSsQDdqhTtiDdUufqQFVhHaiQsSqHhIKkNniIlBtDcClGgLdANnCTtcanOgGBbNnNCcfasjJUuUwMWwnYyNXuZoXxOUuamFfMApEePuUeELlzxRNSnnNNWixXIUZOoHnkarhHRMmDmrRBVvbfFdkKRwAaWrcmwWMbOoGgvRrSzZspPoOvVCcVBArRaiIRrsYnNrRtvVTZkKzyqQcCMGXxFQquUTtvawWARreBtTyRrYcioWwvVFHNnEhHePpzZhnNdDzZkdDeEKiIxXyYRIFfrRKqfnNuUTxXLlNntXwXxNoBRrEaWHhDWwdWkKBPpbwhHlAaNnNnaQdDfFUSsgGuDNEezZzHhcCgmeSOoSssEskKjJYyMUulnNtMmElFfLMQskKSjJVvDdqFiYytTKVeESsYCOoyYsSiOOusSQqUcUuDdLlCSslLviIewWFfWGcCgVvSTMmYyJjtnNsoSzZYyHhPHoOhGzZwWfFgerREpVmKkTGguXxKkwtTVhNJgGjkKxXpfVbBvXrdDRrEeOoRxMkKFfmKkSAaXCcxozHhZOSNfexJjXiJsSjISTtsEioOIFYDMmwWGgdoWmMMmshKxTnNtXEmMGcCgSAaIiKuUkmMiIsCvVCBbccihgGAPLqDdsSZzQIiRVvjLlZYyUiIBbpsSPiIjaaAAxXEvVCcBbUpPdDpQLMmxAeMmMmiIEeQqDdtTCcVvuURriITOotETMOoWwmgGjJSsgGMmIvFfsSVisUuzgGZFJOojfDdCcyYOGnNfcChHUQzZeoSsORgUFjJYyjcCidxePlLEepdDEXyXkKxjJDBWwbxndbBbBOCcWdDCcvVZzhHoOmMMmmyYMZjTtJzgUtTbBLyYOofFlrXxxXoORCcuoOJjFfXAaxMmjBbJKFfUuNnAppqQZTJKCjkKaASsHcCCVvjIiJchQqsSJcdDkeEeEfHhPhkuUvDdbBdDtTMmYlLXxvrRzbBZoONokKoIiRgGgVUdDuLlvGdDrZGgwAaJBbjPuJHhjcCRrIiiINJEkUuKxXpPvRXxrVxgtTKNnMzZmGuUgvVPpGbDJaAcbXjJfFSGgzNnZFfLvVliIsSBbWwjyQqMmwWYCUuVBhHrRbTTtTtBbtSHhnzZZzGhHgMmeyIiIiknNVvKzZsSsMmEelLYyrLliIVXKkOWwYyyyYywWGgpCcPqtXxTQDdYhHQqOoBbHLWZCcHhzwSxXnNkPpLlKKkkKPppPVwCcWwbBKklLbdDQqzZBhgGlLayYdDRlLrmMKauUAgGRrBjHhPpazfaAFOoMNnLlmCcpPxoOaAHFAAaIMmiaFfBhiIiIMmiIZzxqQUuZzECclLKkSssSRWwrvVXxizZbBzrzZkKKoOkbfFvVyPuLlUgGPeSsHZzYyhEeEoOpwWdfFDfVvXxFaAxXiOoEMkKmiIkKjJtTPptTgIiGezZwrqQYypBbPAajGHGZzgOHzZlLhoINnygPpOoQgGqGDKwWkKkLlzeLlWwIOoiEDdNntXxbBMmJrMTtmSwWhHPzzZTtcbBaADdSuZAarkKRjJVcTtnaANZrRNnNIipPhxvVbBSEeGZzEoxVvtYyuUQqfFTXxEeXTtfFkSsGlLGgIiwYyWIiyagGAxxXEeXCYJjSbBGgyYnsSQqSwWLltTyYsiCczdvVDVDmDdxMMmmCcGdRGgZzHhrAaqDcHhtFfVvPRrqQpzZpzZFfPTETtfeCcZzvVBlLbhHEBbuUeElcCYyLJSsaACckKTBbUeEeEyjJJGSsbBKkXjKkRpySKksbBTpPQqDdGgQxeuUEpBbGgrarfwJWwjtWuUiIwAaDrRdIwBbMXxmWCiIbdEeDPpBZKaADdDdkSszqfAlLaTtUBScCKkzYFfoDyYiIdajbBqPpnhyYIigPEeOopqoOfgGFFfpPQxXGENnLluUUJYyjZzchHCucyYGgQZzoCcOhHLlMmaLlXxXxAeEwyYabBBbAcCwWgGDymMfcCuUFrRcCbBHhXbzciIChHWwZAkKGHhZzbBGISRrswWvVHPtTVvNatJjTRAarolLSsIiazZoOOogFZzfGAXKrRLlEeJjGghWJxvVXkGgYyKGgwoeEOWjyYzTuUkKtmMXxZIIiisRmyYHhTtTMmjiLlIJthyYHbBAalJMmbBjRrxQSsqXlLxmMIxkKXeAapPEfFKkWwoOiXAaReEuUOocvVCCctTqQzZjJvVosIzZNxXniIilVvLWqQcCwMkxXKJwWjhHmPpfFcwWRrRrkKRrCeGhHgEdDdDHhbBXxbEmMepPBqTKktQbqQqQBcCbeeEsSbtTOoJwKknZkKzTtUxYrRpPQqyBgzZGYynFfFAafCFfZwmMgdDuUGWUGgeEmGgmMMuLtmMTPpxXYpPycJjCnqCVvQaosSzzLlXhdtfFllRBIibmfFMdDOkKGgoLAvVallLrGNngYDdVjJXxvwiIjMiZzImvVRqQrJTtMmsSWywWzpWUuwhYycCWwjJeExXVFHhpPGghHWwHZYyzjJwWhHJjvVUJzZjuhCcHzodDaAifFLlSKksHOohmMIiIoOQlOojITtiPMmpwRrbCcHhBMmSsAaWfxXFbpPBZeEiXhZzoSLGgleEDfFdzPpmMkKQqZUXsSxyBWgGwbAxXIiYyXxOodMzZmLlGtUykKYnVWwrNneEiDdBJjbsRrSqKYyqQkcaAkEuUGBbDdMPNCxTtOWwocmMTtoOoOnsSNoODIidmMPplLfpPZFfRrXxMJjUiqTtQsSIQqnYyxfwWMmymXYyenNGgzZKGgHQqgbYGgyKkBTLeEltkKkKILlGghlLGgPpHufBZzlLhTtmxcCXGuUgMhZFIifzFfLrRlhHavVAtCcTRrwYySsjJiITtRrwLlMmTtMuUrqQvbBVRnCryYirRLvVAalvFmMfpPYMmlPmMpYyUuCKCcVvtTVEevlgGAahHLVCckdDKVcOoYiBbzZPVvpIUuUcaAsSHhqyYNUunzDdrDsSdRHhYyiaGgAIdDxXUuYCcdiIdDGjJgDTtdicCcLldDAaejxXcCYyFmMfQqeELleEFTfFtfcgGCJpJwWjevVEBIifFbuUoOHfPpkKFAZzahhHtThzbBZuwMmWUaYytYeEUZzuUXxTtuyTtaAAtTaXdDRrbBZzSgINnsxXYySmOoFQqHhDdnNmMsSfHQqQlLqMCcmoODloOjJLiIpDdtTfFtRLlrTbBzZWwRIimTaAUutMCcGgcFfLlDIidCpPGtQqTtChHGLlmMNnkKmMgIibjJkKBKHhkcVqQIiaAFfEeKzZkvIilnNcCaALcNndLlgGLlDSsocCUfFuOCSsWwhHcDBGlJjZzLgFnNaFfRrANgGKkJnNjmZCcNnSsFfyYIivvVwWVBJFSsfTtzZjxXbBbhHBGgkKbkKUGgShHvVsuQqiOoIZzkiOoIWwKIiUuSsotCzEeZUuctTSsTMmpyYPgGAaLliDdoIqzrRZQDdrWwqkpUuPSsxRIirhHOQqWQabvVBsSvVTtHhHoOkKhHhYhmjWRrwsSJkvvXxVPpEoOkKqfOoFcfOWdDgGKfFcCBbeyYEbBcCoOLlkxfFXaXxbBgGPpOoTcCcqQcCBiIbhHLlRrAMmaMNnqQtTmLlmnEeNiIYyLlyYQqwWQqlLCqQxXcFfYgGyUuNFfpVvvVPcdDnNCfaAfOoFNnTtsSGJjyYdDuUgohQqixXGgYJjyVEerRRrvuUiIbqZzQBgGMvEXxejJcqQsEayfFDIidhFRrftTIikXOqQoVwWjJvUuxWwhHYyKfJjmMAfsWqNnQCcevVEoOjJwmMlAaOoOtTLlPpowAaWqQJjAagGSsOoCOopjJPyuFfUGAagPelKUukhUucGgqnNQCTkcCuWwUsAaSKaFfAVvtdDcChHFegVRsUuVJKiIkIyYiYyfFWwjjdDJvVBRrbvslLSDdyYUbSmMwWGuUPpyLCFfclYByYbUImhHMiTTpPttVXlIijJMKkmLxLlpPtTsShGgHoOIigxfvpPVuFfUFnqQNBbXVBbdDUuTsSjOoPpJtCWwceJjaArRElLvCctnGgrRXxAaQqOofpPFXxZzQBJjbBbiIxbBJLlPpjXsSzZWsSwwWvVVJPpiPFfpIXxzGgCHEeNneEiILNnleeEzZzKkZWiIncCNwEhDdjJcComMOcmjYWwVvyJjsSJsSkKYHhyRrlLuOoUuUMHhGqQmNMMmxXeEzZaArRmnmimBlcCLjJbYyPgGpgGOoygwWbhHQqJjIiGgiIBRBbzZrTtvVLcuIizZvVUgGBbpKkPsMDpcFfCxYGUuJUSsDsSeEduZCzNuyYUnFfufeKEeFfTtZcCzFNnHKkUuwWhDZzWVAFhHzfFZfSsaCDpPNndcvrHhRwnNZCcibXheEiIMmHxBbrJjRBjJIVvSsSwcqQBbtTCWNnNnslLmMzhHZRrzQqnNYyMXxavpPVLcClAkIuiICcTtUMfFmYCcGvtTVSsgkKEqrLLgGeEllRAGggiIjJGbBaQHhKzZMEemkXxSiIiWwIENnPpRrtTWwbBhHKkLMmlpPiIPpLlHAaLlCDdcnxXcxXCNrMUUuJjGvVdDguUuMmfVvpUuUwQqWsSugqQGdtTDqeESqDdlLeRgkXxXoOxKGUuMmrPpapPbzZjvVjkYylyYLKXxwWJrRwWGMSDVvzcCyYZZzLlWwibBZyYzfFxXKkmMCNnHhofFOaHhOoOokKJjAyzZNhHnpWwPwWtTCcgYyGoVvCZHhzGgtpPTczZIAaqQVHLqQlZzgyYKkGKkkUuLlDdMmfsuxBbXeEUSFKnNnOonHhNccXxCVvrRSsVvGgORoOrafFRjJyYbBQqTtvVgGgGwWrnBbCXxvqQVAOoIinNwWaWFfNnIiLlzsSTtSsQqKkFfcGRrglLHKZzkTthCeEZbBnNAdphHPDuUaFfjJfFzisSSaAsIbBxXfFxXrRNSKksntTNTtkKnIsSFlaAHcChLCJjcwoOGgbBWeEPPpppPorreiIERAaeUiCcdIimdDvVMHhfrRrKrRsSMeEjJmjJUFUuBbMmfsfFSVeEvpPuhHgRPUuprGfFHhkKDGgdrOoRrRJqMoKkOuUHhBFfEQIiqCcebsfFMmEXxYyeACMmkKcaihIifFHsvVCMhiIPpETtekKoOFbBCcKYyaATtwWkfGgPploOuOBbNYyyYpwWPQlEeoIiOkKwWLLlmMwHTxXkUfFueEwWVNnJjFyYfvKWwOotoCcnNCgeEdvVIirTrJjRtRNnNFfnUuSsMmTfrTtMbBRrmkKvxKHhwWkIZzAqQaiFfXNnGxXZzIhQqRrHgGFpPfiEmMebgGjSsJBzStTsZmksSKMgzDdZSsVZzHhdDlLvHwRrWhVvNnEeuUzZHhdtTJjDVbyYBCcRrtpPAWwfeEiIeEgYyGFLlRrpPLlLladDCcsSDrRlLriIRYyrVaAuUzZvIiLlVvMHhmpPTtINndDiwHeDdEZRrzHKkhAajJgVohbBqQHlxXHhFfdSsVvHhtgGDrRQXxqdyYsmMSIiZzAaYrsSkKRAaFfJjyONnoQqoVvOpwAaWSkKsPTzfFNnZjZzJwWcofFuUOMmCXxMWZzzZwzZUuRrKkGFfgGgxnNIiRrXRrmMgGGgoKZzkyYZzAshHgGSVzvVnPHhaApNZLlQqALlarRUuxXgGFfqQRIicNlLnCWwrVAvVavlLViIvoOoaATttTOeEVIvqQcCVGRrQFgsSGfWlLwvVMmDdIifBPpbFfFqggGdiIvVjcuUCJDgQLlaABbeUGRrRrgBbuFfyUuoObBYuBbioOIUYCcDdoOFfypAakTtrRKAaZzPEeEIiTthaEezZAHmAqQcxXRdDrCEezZQqYyaKkhkfFuUnNKprRWVvwyoOukKLlIqnNOoQkKRriIihSsHGgUvAISsicCaVBWFfwPBgGbHKkhkyYKfFWaAlLcSsKkCOTtQqowsScNnheEeSFfjJxXPpoOYygGsEuUGgXxHqqQQJCcAaAbBaPCcAapDdPpwWjPRnNOaYfFyHhaAAHhjJoWwrRGgNEyYeXxoOngzZGmOgGfFofFMFlLfUuYyhHsSrFfYmMRrydJjDSsVSdDnNsWwoOvkxXqQMmetCcTEgQqGuSsUvVFfobBzZpPLZIiDdoOylLYuUDBEeDdISsdkKDibnkKNdbBbAaPpaASCycCYjJPVvpcjJzZsOhbBHorRAEeavVTfFFfdDotTOtBbzbBBblLxXYyHhsSGgXEvVexLlGYygSWwWwhBbHsSsqQYyXhHxJjTtcCJrRjoOGciICgyYMgGmMmMmywWWwlLYpPdnNSsYyyHYyhYFhHfsQOoqefErRrRiITtKkSdDJjLlBEebNnbBrRsSlTtLzDjJdEIiuUnqaAfFQXYcCyxYnxXKkHhzZLDdlEeRJjPpjJNnrpyIRrpMmObBoPPpgiIGeEzZiZzPpaAEeocAadDCOYRrnNJjEeyHhYPNqQkmgZzGzZqQgGWwMKARrFfnIiNiZzhTtvVHIyYkKAadsSoODAfnNObBohPpHIjEeJAcCaJjiwWFjJgGEPpeNzZnCdHTthDvVctTCFvVfaIiAaMmAozZQqAaTtOMmtTyYbSsYLHhleENnRryBcCXlLxYywWOgGjJolLlAawuUWLJfFqQSYXxyFfsyYNoOjpPJVqQxXvCUukKcvSAasVOoyYuUcCniLlOozZbBicCIIjNnVvDalLALjJloOdiIBbcRrkbQqBKyYxXQqOoVvgGBbuULlHhkkgYyGKTtsSuUUuTtKjJuULlUuWRrvVAQtTjJqJjaiIeEWwgGjJwEeJjHhzZrqQbWwJPpMmoOPpsSrdDRjBvVTtobDdBhHOpPbBCuUcvViHhIIinNAaZzLllLjJRTtUhHKbBkfFhHuELlrWwRulLQqgGUkDdKPYSsytTpeYyLyYloGgOTtXxHIihBvVbEomMgGZloOQcCqHhyCcUurReRrEDdYsSSAQoOkKqRrasbBuUoOLnYyFfNiAaVcCvDBbqFfQkaAKdiIuqQUwWhHdPpjJlAmMaLDdDxRroOXRmMTWwmCcMxgGXzZgGoOtWGgwJIijprnNMmRLlDkKdDdyYCfFczZFfsSKkZzaHhSWwtTZzTtsAfJvVaQqAWmMwjxXqQtTUuiIsSFtdDzJjZPpbYnNCcrRmMyoOBbBVvDgvuUVIiBbxXGuUEIieKBpPbCcpPkoOVtJjTCEecveCcIisSBbEPHhVvOopVvkFfKdpPLlcKkQqHhCYyTdDrRwbBLlEewWDQqdfFaAeEppPUuBbCcPoORyYrDsSyYdEePIiOopWAaqQvVUuEepPGqQFfgGgMTisRrYYyySsSIkKaqQAeExGgXtdXxExXeHhDhiIoOyOowWYfZzFymMYzlLSsZTthZRrzdDHOmMCcoHSsniIEeNAPwWpVXxvXRUurxUugGaURruSwWsMaAmPpAabgGfFFfUuDvVGgYyUuEedFfgvjHhJVGgZzwWZiIzcCBbpqQxXPGBbyjJxXYtTLlHhsShnpPNanNwWAGhHjJgHCHbsSBgGeEhatTYyDxXdUuSHXxiIesSEhseEDJjlLYgGMmyLJKkMmeEjlTtdZzosSOVpPvBbCcIiJjAcPpRrbuUzZvkAeEaBCkKFfXxRrcbKaAveEVFfVoOGgvVGIiVvFftTguUFfBraARLlbuUPqQpDdmYyXxMFjoOBOobxXnNtTRrJfdDkRrRutTUrHhKAWXxwDdaoQqYyJsSHhWLlwUujOWwHhISslLKkQPpyYqfFbBKkAaiGgKrRsSCckhHKkBbsAaSCcyYfAaVvIOeEOooWwgGvJjVEtTKkeHhxqQWwXiYyxXIKlSsLkMmhHuTtUXrRxOvVoSsqQinMmBiIbNOWQqwoAazZFKkGgIiwWEAOoaejJSsBdDuUJBRWwrZPpAbBVvqQaKkzBbvVCUuvVkKFfYwWyUunnNNMmTtXxCkKdDkKiIczCcMEemnxXNbBZvVTtTtKkoyYNnOFfjJiMmIPIiDduJjUpdpWwPDMmuUdDTtQqQvVqcgPCcpGTtiuUIcCUuJjxkKiIZMZtTzmzCdDfFcLlFfSslLbBMmcCEerRrryYSsRzcbBbBYyCQqxXZJjRbBNeEnuUDQqdoddDYyFpPfDRrWwOXgQIifCclLFqGCiIcmQqRrMnqQQHhqjDdpPNnFfJNZzOobPvJjVxXTtnNQZzsSxXCxJjnNXNoOncqCRrOojJpIlLbBIiWwQqHhZzTtgGOvVpPOjJoCcqQo diff --git a/05/part1.js b/05/part1.js new file mode 100644 index 0000000..c06937f --- /dev/null +++ b/05/part1.js @@ -0,0 +1,15 @@ +var input = require("fs").readFileSync("input.txt").toString(); +var replaced = input.split("").filter(a=>(a!="\n")).reduce((a,b)=>{ + var c = a.pop(); + if(c){ + if(!((b!=c) && (b.toLowerCase()==c.toLowerCase()))){ + a.push(c); + a.push(b); + } + } + else{ + a.push(b); + } + return a; +}, []).join(""); +console.log(replaced.length); diff --git a/05/part2.js b/05/part2.js new file mode 100644 index 0000000..b923f14 --- /dev/null +++ b/05/part2.js @@ -0,0 +1,21 @@ +var input = require("fs").readFileSync("input.txt").toString().replace("\n", ""); +replace = str=>(str.split("").filter(a=>(a!="\n")).reduce((a,b)=>{ + var c = a.pop(); + if(c){ + if(!((b!=c) && (b.toLowerCase()==c.toLowerCase()))){ + a.push(c); + a.push(b); + } + } + else{ + a.push(b); + } + return a; +}, []).join("")); + +var strs = []; +for(var i = 0; i < 26; i++){ + strs.push(input.split("").filter((a)=>(a.toLowerCase().charCodeAt(0) != (97 + i))).join("")); +} +var lengths = strs.map(a=>(replace(a))).map(a=>(a.length)); +console.log(Math.min.apply(null, lengths));