| -rw-r--r-- | beeg-basic | bin | 80000000 -> 0 bytes | |||
| -rw-r--r-- | beeg2-larger-basic | bin | 40000000 -> 0 bytes | |||
| -rw-r--r-- | benches/bench.rs | 10 | ||||
| -rw-r--r-- | inp.txt | 76 | ||||
| -rw-r--r-- | lut | 1 | ||||
| -rw-r--r-- | lut2 | 1 | ||||
| -rw-r--r-- | src/lib.rs | 439 | ||||
| -rw-r--r-- | src/util.rs | 2 |
8 files changed, 42 insertions, 487 deletions
diff --git a/beeg-basic b/beeg-basic Binary files differdeleted file mode 100644 index 6e01760..0000000 --- a/beeg-basic +++ /dev/null diff --git a/beeg2-larger-basic b/beeg2-larger-basic Binary files differdeleted file mode 100644 index 7b4f47a..0000000 --- a/beeg2-larger-basic +++ /dev/null diff --git a/benches/bench.rs b/benches/bench.rs index 3102ff1..49b2fe7 100644 --- a/benches/bench.rs +++ b/benches/bench.rs @@ -2,12 +2,14 @@ use criterion::{criterion_group, criterion_main, Criterion}; -use codspeed_aoc::day15; +use codspeed_aoc::day21; pub fn bench_day_14(c: &mut Criterion) { let mut group = c.benchmark_group(concat!("day", 14)); - let input = include_str!("../inp.txt"); - group.bench_function(format!("part1"), |b| b.iter(|| day15::part1(input))); - group.bench_function(format!("part2"), |b| b.iter(|| day15::part2(input))); + let input = std::hint::black_box(include_str!("../inp.txt")); + println!("{}", day21::part1(input)); + println!("{}", day21::part2(input)); + group.bench_function(format!("part1"), |b| b.iter(|| day21::part1(input))); + group.bench_function(format!("part2"), |b| b.iter(|| day21::part2(input))); } criterion_group!(benches, bench_day_14); @@ -1,71 +1,5 @@ -################################################## -#..O.O.....#O..#.#O.#.....#.OO...#O#.O...##...OO.# -#.#....##..#....#...........O...O.....O.O...OOOOO# -#....#.........O...O...........OO.O..O.#........O# -#.O..O..OO......OO.......#.....O....O...O.#....#.# -#.....OO..#.O.....O...OOO.OO....O#..O.O...OO.O.O.# -#..O..OOOO.OO..OO..#.O#OO.O..O.OOO..O......##.#..# -#..OOO...O.O#.O.......OO...O......#....O..OO.....# -#..##OO..OOO..O.OO..#...#.O.OO..O.....O.....O....# -#O.O.OO.....#.O.#....OOOO#.#.....O..#..O.O..#..O.# -##......OO..O.#....#...O.OO.O..OO#.O....O........# -#.#OO.O.#.OO.O#O..O.........O...O..O#.O......#..## -#.#..O.O.#.......O..O..O.OO#O...O#..O.OO.....OO..# -#OO....O...OOOO.......OO......#OOOO.O.O..OO#..O..# -#......O..O.#.O....O.....O.....#..O...O.OOO....O## -#.....O..O....OO...O#OO..O..O.......O.#...OO..O#O# -#.....#OO........O...#O##..O..O.#.O.....#O....O..# -#O.O....#...O#OOO.......O..#...O#O.O..O....##.O.O# -#......O.O......O..#..O.....O......O.O#.O..#..OO.# -#.O....O.O...#....#...O...O.....OO.O#..O.O#.O...O# -#...O.O...O.#.O.O..#...O.....O......O.#.#........# -#O...#O....O....##.OOOO.#...O.#.##.O..O...O....O.# -#...O.......O..O#O.O.OO...#.....O.....#.#.OO#.#O.# -#.#..O....O.....O..OOO.O..O......OOO...O.OOO...OO# -#...#..O...#[email protected].#......O...# -#......OO#.OO..O..O...OO.#.OO........O.OO.O.OOO..# -#...OO.#....#..OO..O.O.OO#.O...OO.O.....O..O...O.# -#O.......O...#O..#.OO....O.#OO.....#..O.O.O#..O..# -#O.##O.O.O......O....O.#......#.......O...#...O..# -#.O.............O.#...O.OO#O...#O.......OO.#.O..O# -#O.##..O...O.....O.OO.OO.....O..O..O...O.#..OO...# -#O..O.OOOO.O..O.#.OO.O....O.#O.OOO..#.O...O....OO# -#............O.#.....O....#O.....#OO.....O.O.#O..# -##.O...#...O....#OO#..#O.O#........O.OO#O#.....#.# -#.OO......O.O.O......OOOO.O.O..OOO.....O.O#.#....# -#O.O.#O..O......OO#O..O...OO......O#O#.O.#..OOO..# -#O..#.O.O.#OO.O....OO......#..OOO.O...O....O.....# -#.......O.O......O......OO..OO#O..#..O...O..O.OO.# -#.#.#.O.........O..O...OO..O.O.O..OO#OO...O.O.O.O# -#O#..O.....#O...O.O.##O..OO..O.O..OO.O....O...OO.# -#.O.O...O.O.#.O....OOO.O.#OO#O.#.O..#..O.#.#O...## -#O..#OO#.O.......###.OO....OO...O.O.#......##..O.# -#O.#...........O...OOOO....O.OO..O#..O..O.#....O.# -#......#......O.........#..O....O#..O..O.O......O# -#.......#O..O..O.O..#O.....#..#.....#..OO....O..O# -#...O......##O.O...O...O......##O........O...O...# -#O...OOOO..#.O..O..O.O....O.#..OOO.O..OO.O#.OO...# -#....#O...O.#...O........O..#..O....O..OO...O#...# -#...O......OO.........##..#.....#O..O..O#O.OO....# -################################################## - -<<>v^^<>>><v>^>^<<<v^<<<^<^^v<v<vv^<^><<v<^vvv<^>^^v>>^>>><>v<>v^^>^>^<>><>><^>>v^^><<<<>>^^v<<><>^<>v^<v><<><<v^<^<vv<v<>^<<<>^>v><>v>^><v><<v^>v^^<^<>^v<>v^v>>>v^<>^^<^v^<><><<^<>v<v^v<v><>^^v>v>^<><^>^v<>><<^<>^^v<v>><><>>^<^<<v<^>v>>^<v>^vvv^><^v<>v><^^<>v>v^<v>v<v^<>><>><v<<<<<<^<^<v<>^>>>^>^>>^^^>>><><>^^>v<<<<v<^<>vv<^>>vv^>^^v^><><<^v>><<>v<><<v>>^>>><<^<v<v>>><^v>>v<v^v>v>v><<<<v>>^^>^vv<^^<<>v^<v<^<v<^v<^><^^<><<<<>v>>^<<><^v^^>^v^<vv^v<>>>>>><^>>v>>vvv^>^>>>^vv<v>v<^>^v>v^<^^>v><v>>^<>^<><<v^<v>>v>^vvv<v<^^^><>^<>vvv<>>>v^^^><>>><v>^v^<<<v^<>^<v<v<<>^<^^^vvvv>^<^<^v>^v<v<<v^^>vvv<<<<>>v>>^^>>>>v><^<>^>^v^v<v<v<<v^<>>^>vv<>vv<v^<<>v<v><>v^v<><v^v<><<v<^<<>>vvv><>><><v^<>><v>^>^<v^<>v^<^<<^^v<<<v<><vv<^>>^v><v<^>>^>>^>^<<vv^<vv<^^vv><<v>>^<<v><v^<<>><<<<v<<^^^>^<><<<^^v>v<>^^^^<<vv>v^<vv<^>v>v<v<<>vv><^<<>><>vv^vvvv<>^^^><^<><^>vv<<>>v>><><>^^vv<<<v><>vv<><^^<<>>vvvv^v<vv^><^<<^>^vv^^><>v^v>v^^v^v^v<<<vv^>>^^>>>v^^^^>><v<>^vv>>>><^^v<>vvv^^^v>^<^vv>>>^^><>^><^^<^v^v>^<^v><>^v< -<v>^>vv^>v>>v<^<^^>^<>v<v^>^v<v<^<>^><>>^>v<<<v><<>>>v<<<<v^^<vv^v<<^<>>vv<^<vv>^^><><^<vv>v<vv><>>>^^<>>^^^v^^vv>^><>vv<^<>^<v>v>v^>>^^v>v><>v^>>>><<^v^<^<<>>>v><>>>><>v<v^v^<vv<<>>v>^^>>>>>v<<^>^v<v<^^vv<<v>^v^^>v^v>^vv>^><vvv<vv<v<^<v><vv>vv<>^^<v^<v<>v>>>>v<<<v>^<><^>^<<<>^vv^<>v>vv>vv^>>v>>v<v^><<v<v^<<><><<^<<vvv^v><v><><^>^>>^v^>>^><v>^<>^<<<><>>vv^>^v<^<v<>>vv><v<v^v><>^^>v<>v^v^v>>v>^<<^<<<><^^><><v<v<vvv<<v<<^><<v^^><v<><^v<^>v<^<<v<^v<<>v<^<><<<<<<>>^<vvvv^>v<>^^<>vv^<^<<^<v<<><vvv^<^^^vv>v>vv><<v><>>^<>v<<<^<<^>>>v>^><v<<^<>^<v^<<<vvv>v<^v>^v^<^<v<^>^v>^^^<>^<>>^vvvvv^^v^>vv<^>vv^^<<<<v<vv^>v><><v^<<<<^<vv<vvv^^<v^>^><>^^<v^v^^<<v<^>^v>^^>>>v><<vvv<<v<^v><^>^<^<><>^v^<v^<>^>^<<^v^>^<^v^>^^<^><^<^^v^><v><<<>v^^<^<^vv^v<<<^><<v<v<<^<><vvv>^<^><><>vv^><^v<^>><v<<<>^v^<><^><<v>v>^<><>^v>^v^v^<vv<<<vv^><^^^^vv>>><<<>^^v<<v<^v>v<v><^<v^v>><><<v<v<<>^>v<>^v^^<v^^^^v^<>v^v>^^<^^>^<>>v^^<v^>>>v<^<^>>v>^vv<>>vv<v^^<^^>vv<>v<vv<>^^^>>v<^>>><vv<v><vvv>>v^>^v<vv<^>>>>><>>^^^><^^v<^^v>v> -v<v>>vv>>v<<<<>^v>^<<<>>v<vv^>^vv>v^>><v>v^^>><^<<<^^v<^^^v^<^>^^><v>v>^<vv^>><v>>><>^><v>v><>v^vv^^^<v>^<^v^><^^>><^>v>>>v^>>^>>^^^>v>v>>>vvvv^^^<v>^>^>^<<<v<<^v<>^^><>^v^v<>^v^<^^^^>^^^^^>>>>>v>>^<>>>^>><^vv<^^><^vvv>v>v>vv<^^vv<>^>vv^>v<>^v^^<v><v<vv<>>>v<^><<<>^v>v<><>>>^^><vv><vv^^>>>><v^<^^^>>>>><^<>^<v<>^<^v<>>vv^<^vv^><>^>^<>^v><<<>vvv^vv>>>vv><^^^^<v^<vv><v<^<<v><>^vv^^v^>>^vv^v^><v<^v<vv>>v^>>>vv<><<>>^v><vvv^<^<>v>>><<^v<><<^<>v^<<>>v<vv<v>v><vv^<>^>vv>^<^v^>>><v^>^v^>>vvv><vvv>><^vvvv<>^^<<><v^>^<>^^<>^vv^>^>v<v><>^>^^^>v><v<>v>^<v<<^v^<<vv^v<<v^^v><^vv>v><^<<^^>vvv><v>v>>><v^v^^>^^>><>^<<v^>vv>v^<<<<>vv<><>^<v<^<>>^^>^<<vvvv<^^>><v^<v><<><<>v<<v<^v<>^<>vv<^>><v>v<><>v^<<<v^<v^<><>v<>^>^>>><^v>^^v^<>v>v>^^v<^<^^><<vv>^>>v^^>^<v><v>><v^<<^v^<>v<>v><<^vv<>^^>><<^v^>vv^^<<<><v<>^>><^<<v>v^>vvv^<^<vvv^^^v<>^>vv^><<^v>><>v<><v^>>>>vv>^>^>v^^<v<>>>>^>^v<<>v<v^>^v>>^<<><^>vv>^<>><^<<^^^v^><>v<<<<<^>v<>v>v>v<^<<^>>^<^^<v>^<^>v^^v<>v><vvv><^<>><<<>>^^^<v<^^v<<<v><^>^v<<^v>v><v^^<<^< ->>vv<^^>v>v^v<><^^v^^^v^>>vv<><><>>><<^>^^^<<^<>>>vv<>vv>>>>v<>v<>^v<v><<>^^>^^><<^>^v>v>v>^<>v^^<<v^^^>vvv>>^^<><^<^^<^>v>^^><^v<>v^<^>vv>^<>^>^<>vv^<vv>v^<<>vv^^>>v>v<v^vv<v^vvvv<v^^^><<^>>v<<<vv>><^>^<^>^vvv^vv<^<>vv<<<>^<v<v<><><v^^<>^^v^>vvv><v>>v<v>^v<<vv><v<^^^^v<<<<^vv>>>^>v>vvv^v<^^>^^<<<^<><^><^v^<>vv>^v^<<vv^><><^><<^v>^^>v>^>><v><^>>>>v>^<^<<>v>vv<<<<<v>^>v^^<>^><>v><vv^<<<^v<^<^^>v>^<><^>v<v^^<v^><vv^vv^^<vv<>><vvv<<<<^<vv^^<v>>>v>^v^<<^><<^vvvvvv>^<>^^<><^<<>v<^<v>^<>v^><v<<^<><>>vvvv<^v>v<>^<>^<<>>vv^^vvv^^>^><^^><>^<>><^>^<>>>><<<^>v<^>^vv^^<<^vvv<>^>>>>^^^v<<>v><<>v>v^v^<^><v^>^v^>>vv^^>>><^>v>><>^v>>>^vv<><>><vvvvv>>v>vv<>^v>v<<<v<vv<><>>v>>^^><^>v<><<v^<><^<vv^<v<>><>v<<v^>>v<v<<^v<^^<<^<<<>v><v^vvv^><<^>v<v^^>>>>>>^^<v>^v>v^>>v^^v^><<<>v<>v<>v^>^v>^<>v^^v>^><^><vv>v<<v><<v<v<^v>v<vvv^>>v^><vvvv><vv<><v><><<v>>^>^<<<^^><<v<^<<<vv>vvv^^v>vv>^>^>^<^v>v^<<><><<<<<<v<vv><^^^^v<vv>>v^<vv^>^v>v>^>>><<^<<v>v<<v<^<<<>v<v>^v^v^>><^<vvvvv^^<<^<v^v>v><v<>^vvvv<>vv^v<^^><>>^v>vv -^^^v>>v<<^v<>^^><<>^^>>>^><v><^^>^>v<^^>vv<><<><v^<>><<^<<><v<^<^<v<<<v<>v>vv<>^<<>^^v><>v<<><v>v^v><^v<>>^^<<><>vv^v>v<>^^<<v>^v>><<>v^<v<<<<^v<^<^^<>^>^v>>>^^v><v><^<<>v>^<^<>^v<vv>><<^<v^>v^^v<<<^^<<^<<^>>>^<^<^v^v>^^<^^>v^<v>^>v^<^<^<<v<^>vv^^>>v^^^>^<^v^vv>><v<v>>>^v>><<<>^<>><><vv><^^^^^^^v^<<^v^^>>>><>^vv<^v<v^><<<<>v>v^v^v<v^>vv^<^>>^v<v<>>^v<vv<^vvv<^<>v^v^<<>>^^<<<<^><v^^>^^^vv^v>v<>vv>>v>vv^v^^<v^<<v>v<>^^v<vv<^v<v>>^^<v<><<>>^>^v>vvv^^>^<^v><<<>^^vv<^>^>^>>^^<<>>v^>^^<>>vv>><<vv<<<>v<<v^<vv<<^v^<v>^<^<vv<>vv<v^<<^v^^v>v<^v^><>^<<<<vv^^>v><vv<><<^vv<<<v^^v>>><v^^v<v>^<v^>^vvv^<v<<><>^^><^<v>v^<>^>^v>^<^^>>^^vv^><v>v<>vv><^>v<>>>v<>vvvvvvv>vv>>>^^>v^<><<>^v^^v^>^<^^vvv>^^><<>v^>>^v<<<><<>>>^<<<>>^v>><^<^<v<>>>v>><v<^^^<<^>v><^<^>v><>vv^<^>>>v^>>>><<^<>v<<v<v^^><<<>v^<^v^<^>><v<^v^<v<^>^<v^^<^^>v<>^>^v<<<>v>><v^>^<<v<><v^<<><^v>>v<<v><^vvv>^<<<<v^v^^<v^>v<^<>>>vv^>>^^<^^<>^v<><>vvv>><^<>vv^<vvv^>^^<^>v^>>^<><<<v<^v><v<<^<^>v<>^<><>>v<><>v<>><>>vv^<^<vvv^vv><v>><>><^<^vvvvv^v>< -<^v<v><>>v>>>>>v><><<^^vvv<vv^v><^<>v>v^>v<<<^v<>^^<v>>v^^^<vv^^>v<<^vvvv^<>>vv<<v>^v<<^v<v<<^<v<<<>v>>^>v^<>^<^vv<^^<^v<><<v<<>v^^v><v^>v^^<v<vvv><v^>v<^v^<v^<v<v><>^><><>>>vv^v>^><v^>^^<>>^v<v<<<<<><>^v^^><<<^>>^^^<^>vv<><^^<>>^<<v>>>>^>>><<v<<<><<vv<v^<vv^<v^v^v<v><>>^^><v>>vv^>vv<v<vv^<<v^v^<>vv^vv<v<^^v<<>^<^<v><><<^vv^^v>v>><v>>^vv<^^v<v<<<v<^^>v^>>>^<>>^><>^vv>><<^>^<^^<v<v>vv><>>>>v>vv<^v^>v^v><v>^v>^v>><><>vv^<v>>>v<<vv^^><>><^v>^<^^^<v<^<>>>^v^^^^^<<<<<<^<^>><v<>>>>^>^<vvv>>>vv><>>><<<<<^^<<v>>v>v^<>^>v^<v<>>>>v>^<<<v<^>>^^v>>v>v<<><>vv>v<>>><^v><^<>^^v>>v<<<^<^><<>^<^>v^><v^>v^<^><><<^<>v^<>^>^<^v<v<<^<>>^^v^<>v^<vv>^^^<v<vvv<v>^v^<>vv>vv>^^^>v^<>^v<<<vv>vvvv>^>^>^>v^>^<^>^v<<<<><vv^v<<<v<v>>>>v>v^>>^<v<><>v>v>^>v>v^^v^<^^<v<v>vv><vvv^<>^>^<<><><>^^<v<^^><<<v<<<<v>>v>>^>^<v<<<>^^>^v^vv^>><<>>>^^v^>v<^^^v<vvv^<v^<^v^v<v><<v^^^v<v>>>>v<^<v<^>^^^v^<>vv>>>>>v<^^>v<v>v<^v^>><^^v^<vv>>>^<>>^v<>^<<^><>vv<><<<^<<^<<>>vvv<><^>v<v^^<>>vv^>^^^v<<v^<>>^<<v><>>v<>^>><<<^>v^<<v^<<^v<<<^>v -<<<>vv^v><vv^vv^^^>v<^<<>>>^v<^<<^^^vvv>>^<>>^>v^^vvvvv><v^<v<^><^>v^v<<^v>>^>v><^v><^<<vv>v><v^^>>^<>^v^^><<><>v<<<>^^>^<v>><^<v><><>v^<^>><v<>^v>^v>^vv<>>>>^><<>^>>v>>^><<>^^>v>v<vvv^^v>>^<^v^^^v><<>>>v>><v<^^>vvv>>><<<>^^<v>vv<<vv^>>^v<v>^<<^v<^v<<><v^^>^<v<<^>>v<><^v^<>^vv^^v<>vv>v<>^>>>>v^<>v^<v<<vvv^>vvvvvv<^vvv^>>^^>v<<v^vv^^<>v>v^<^>v^<<v><^><>v^>>^^^<^^^<v^>>>v^<<^v<v>^^<v>>^^v^<>^v<^>v<>>>^><<v^^<<<v^<vv>v<<^v^>^<<^<>v^vv>vv<<<^vv<<^<<^<v<^<^<^v^<v>^>><<>v^vvv<^v^v><<>><^>^^vv^<>>^<^v<<<<<>v><><^^>^>^^vv><>>vv<<>^v<v>>^<>^>v<<>>><v<^>v>>^<<^>^><^v<>^><<>><^<^>^v^^vv<^<^<>^>>vv<<<^^>>v>>>>v^vv^^^^^<>><>^<^<^<<<>>v<^^>>v^<v^v><<<^>^^>v<v^<^^>^^v<v^<<^>>v^>v^><>v^^^><><^<>v^><><^vv<v><<>v^v^v>^v<vvv><>^<><v<^vv^^v><vv^>^v^<^^>>vv<<>^^<>v>><<><><v^v>><><vvv<vv><^vv>^^>vvv><>>v^^v^>><vv>v^v^^<<<<^<^v<v^^^vv^>v^>^v^^v><>^^^^vv><>>v<<^><<v^^><^<vv>^v>>v<<^v<<^^^<^^>^^>v^>^v><><<<<>v<^><vv><<>^><><><^v>>^<v^vv>^<vv><^^v^vv<^vvv^v^<v>><^^<v>v^<v^<>>><vv^^^v<^>v^v^>>^>v<v<<<^^^><<><<>< -^>v>><>v<<v^^^<^>>^<<<<>>>^>>v^<<>^v><<<<^>^^^v<vv<^v^^>>v>^>><vvv^<<<>>v>v^<<><^v<>v>^><>v>^v^v<>><>v^^vv^^vv^<^>^>v><<^<><<<^^><>vvv^<>v><<v>>>^v^>v>^>>^<<<>v>^<^^^<vv<>v^>>v>><>vvv><<>><>^<v>v^^<><<v><<vv<v>><<>>>v<<^<><<^<>><<vv<^^v>vvv>^v<<>^<>v^>>>>>>>><><^>^^^<v<v>v<<<>^<vv^vv^^><>v<>^^>v>^><><v^><<<^>>vv^^^<<<v<^>><^><v^^^<<v^>>^v^v^>><<^v^v<<^<^><v>><v<v>v>^^<^<v><<>v^v<v>^v>vv^<^vv>^v>^^v<^^<>><<>v^<>^><<v^>>^^v^^^^v^^<v<>^^v<v<<^^v<<<v<^^v><><<>v>^^>^v<>v<v<>>^v<<<<>>^^><v<vv<>>v><<>><<>v>v><v<>v<^<^>>>^><^^><vv<<^^>>>^>vvv^vvv^^<v>v^>^v^<>vv<><^^^>v<<><^<^<^v><<vv>^>><><><<^vv<^vv^>^>v<<v^<v>^>v>><<v>v^<^><<<v<v>><>v<vv^^>^<v<>^^vvv^<v^v<<>>>><>><>v<>^>>v><^v^<<v><<^<>>v><>>v^^<^v>v<<><>^>v>v<^>v>^v^^<^<^^>>vv<>>v<<>v>v<vv^^v>^^>v<v<>v<>>>v^>^>v>^v>>v>v^<>>v><>v<<v^<v^^>^<<v^^<v<^<<><>v>v^><v^vv<<<><^v>v<>vv>^>^v^^^^><<>^v>v>vv^>^^<><<>^v^^<<<<v>>>>><v<v^^>>v>v>>^>vv><^>>>>^><v>^>v>>v<>>v>^>>^v<>>><v^v<>^v>>>^vvvv><<<v<<^^<>>>v^^<^<v^v^<^vvv>v^^>vv^<>^<>v>>v>vv>>>>>^<>^^v>< -><>^<><^<<<v<>^<v>>><^v><<v>>>v^<^v<>>>^^^v><v<^^^^^<^>>>^><^<^vvv<<>>^v^<^>><^^v><>v<<>^<<v<>>v>^v>^>v^v^<^v^<^v>^<^>>^^><<<>^>v><^^v>>v<v<v>>vvv>^v<^v^<<v<>^><^><<^<v^>v^<v><^<^^<>>^>vv>^<<<<<>v^>^^^^v>v^^^v^vvv<^^<>><>v><<^v^^vvv<^>^>^<v^^^>v>^v>^^^>v<v<>v^^v^v>v^^v>v<>v>v<>vv>v>^^<<>^v^vv^v<^^>v><v<>^v^vv^v>>>v>^^vv>v^^vv^^^^<v<<vv<<>v>v<<<<^^vv<vv^vv<vv^v<>v>^^v^<<^<v<v<<vv^<>v>v<<^<^^<^vv^^<^><v<>^^^^^><<<>><^<>v>v^<^^vvvv>v^vv><^v^^v^>v<<^>vv<<>>v^<>v^<<v<vv^>v<>^><<vv^v>^>^>>v^>>v^^<v^v>vv>vv<^><^<>^><^<>^><^>^<>>^>>v>^<vv<>>^><>v<v>>^<v^<^><>v<><<>v><^^<^v><><^^v^v<><vv>^v<^>^>v^v<^v^>^^v<^<<><v^vvv>v^><v>v<<>><v^>^v^<v><^>^^>>v^>><^><vv>^v^v<^<>^><v<<<v^<<v^^^>v<vv^>><^><v>^>>^^v<><<v<^<v><>>v^^^v^<<^v<^<<vv<<^>>><vv^><v><>>^vv<<^<vvv><^<vv>^v^><^v<<vv^<^^^<<^v^>v^v<>v>><^>>v<^>^v^^<v><^^^^>v^<>^<>^>>^><<<>vv>><<^<>^^^<><>vvv^>^><^^<^<<^<v<><<<v><v^<vv>^^^^v<v<^<><^<>v><v>v^>^>v><v>>v^^<<>v><v^^<v<^><<>>^>>^>^v^v^>^<v^>v<<^^<^v>^<v><<>vvvv<<><^<v>>v>>v<^<vv>v^^<<vv<v>v><>v><> -<<v<vv<v^><^^<v^vv>v>^>^^^<>v^v^<v><v^^<v<><<v>^>>^v^^^vv>^>>^vv<<^v^>v^v^<>v^<>>v>vvv>>><^^>^^^><><<vv^<<<<<^v^^<^>^v<^<>^vvv<<v^v<^^>>^^>^v<vv^vvv^>^>^<vvv>>^v>>v><<<^<>^v<^v>^^><>^vv<<^>^v>v^^>^<v^<<v^<>^<<>>v<v>^v<><><^v<^^<^>^>><>>>v^vvvvvv^^v<^vvv><>v<v>>v^^>^^<^>v<^<^^vv^^>^>^v>v><>^^^<^v^^^<v><<>v>^^^^>^v^<<v^><^v>v>^<^>><v><^^>vv^<>^>>>><<>^v<^^^>>vv^^<^<^<^^^^>^^<<<>^<>><v<v^^<<vv^<v>v<^vv^v><<v<<^v<^^v<^>>v^<<v>v^vv^^^vv^><><v>^>>>>><>>v<v>v>v^^v>vv^^^<v^^<<v<<v^^vv<v^^vv><>^>^vv>>v<<^><<<<v><^<<<<v<<<<v>^>>v>^^><<>><<>v>v<^v>^vv^vvv>>v^<>v<>v<^v^^^>^>^>>>>vv<v<v><<<<>v^<<<<<<^v^><^v>^>><><<><><v>v><<>>>^v><^>^v^<vv>v<vv>><^<<<<^v^<^^v^v<>^>><><<>>^><>v<<v<^vvv><>><^^v<<vv<<^^v^vvvv^^v>>>^^>^<^v<<<>><vv<vvv><<><<>>><^><>^<v><>^v<>v>v>^>^^>^<^^^<^v>>>v>^><^<v^v^<<v^v<><vvv>>>^^<<vvvvv<^^><vvvv<<<>v^^>>^^>><^><v^<v^><><v^>v<>v>v^^vv<<v<>v^<>vv<^v<^v>^^<v^v^>>^v<^<^^^^^><<<vvv>v^<vv<<^v<<<<^<<^<<>>><^vv>>^<<<>^v<>>><v>v<>>>>^<v<v<^^<vv^^^<v>^vv<<>^>v<vvvvvv>v>v^<>^v<<^^><^><><> -^^^<<^<<v^vvv<^<^>^^v>>v^<vvv<<<^^^>v^v<>^<v>>^>^<^>v^^<^<>^>v>^>>^><<v<^>vv<<>^^<^<vv><>v^vv>>>>>><vv>>>^^>^<^>>v^vvv><v^v^>vv^>>v^><>>^<^^>^^<<^><^v>>^<^v^v<<>v^v<>^<<>^<<vv><vv^>^v>^><>v>v^^v>v^>>vv>>^>>^<vv<<^><<<<>>^>>>v^v>>^><<^<v>v^v>^v^^v<<>vv>vv^v<v><v^^<^<v^v^v<><^vv^>^>^<>^vv>>>^<^^<v>><^^>^v^^<<>^<v>><<>^<>v><<>^v^><v>^^<^v<vv<^<>^<<<<^^>v<>>v<v>>^>^v><<>v>>v<^><><><^<<^v><vv^^>>v<^<v^>^^^><v>^<>v<^>v^<v<^<vv>><^<>^^<>^^<v^^>^^v<>v^<>v^^<>^^^^>^>v<>^<^vv<<>v<<<>^^>^<<<<^<<^^>^>^^>>>>^^>^<<<v^><>^^<v<>>^>><><vv><v<^v^>v<^<><^>^^><><>vv>^v<v<<<v<^<v^<<^>v<^<<vvv^v>^vv^vv<^>^^>vv<<<<v^>^>^>v><^v><>^<^<^><^v^vvv^vv>vv><<<><^<>v^^<vv<>v^<^^^vv<<<v>^v>><v^^<<<>>>^v>^>>>^^v^<>v^v><<>>^v>^v><^><<<v<><><<v<^><<^v<^<>v>v^vvv^^^^><v<><v<^>^v<v<^<>v^^<^v^<^>^^<<vvvv^<^>^v<<^v^><vvv<<<<^^vv^>^<>^^v^^<><^<<<^^>>^^v^<>^v>^vv<<<<v>^<<v<vvv^>v<^v^<v><^>v^<^^v>>^<v>v^>vv<v<v><<>>v^^>^^<^^><<^>v^>^<vv<>>v>^v<^^v^^v><<<>>^<^^v^vv^^v^^<^^<>v<^<>^>^<>><>^>>v<>^<^vv>^^<v^>^vv>v<v<v<v<v>v>v>^>><^< -^v<^v^<^<^^<>vv>^v^v^^v<^^^^<<^vv>>^>>><<v^v^>^^>vv<<>^v^>^<<^v^^>>><>vv>v<<<<^>v^<^><vv^vvv<<vvvv<>vv<<^vv<^v<>v^>^v^vvv>^<^><>vv^vv>^^>v>v^<><v^v>><><>>^>^v<^>>^^v<v^^>>v<^<>v>^^^<>v^v>>^^^<vv^^<v^<>v><v<vv^>>><v^>>^<vvv^^^^><>v>>><^>v^>>^v>^^<v^<<><<^v<>^v<vvv^<v^<><<<^>^vvv><<><v>^^>^<<>vvvv<<><vv<v>v^>v^<>vv<v><vvv>>>^v><^>><<^v>>v<>vv^><>>v>v<^v<>^><>v<v^>^<v>^vv^v<v<<><<^v^>v^v><vv>vv>><v^<vv<^><v<^^<>>><v^<<^>^vv^>>^^vv<^>>^v>><^v><>^<<vv<<v>^v^v>^<<<<v>^v<^^><>vv>v^v^v>v>^>><^v<>v^><v^<>^v^><><v^>^>v<<v>v<>>>^<vv>^v<<v^<<<^><>^^>^<v>^><vv>v<^v<>vv><^vv<v^>v^^>><^vvvv<v<<vv^v^vv<>^<v><v^^<^^<<>^^^vv>>^<<>v>v>v>v^<><<<<v^><v<>>v^<^>^>^v<>>^v^<><<vv>><^^^><<<<<>^v<<<>^v^><v<vvv><><>^>>>><vv>v<vvv>v<>^v<<^><>>^v^>>vv<^v^^v<<^^v^<>><>>vv<v>^>^<>^v^>^v<v><>v<v>^^><v<><v^^><v^<<^>>>vv>>>vv<v^<^<v<v^vv>^^>^^>v<v^vv>^v^<>>>>v<vv>>^v><^>^vvv><v<<v>v<>><^<>^<>vv><>^>v^^>>v>>v>^>v<>><>>^v<>^v<<^<><>>>v>v<^^^<<<v<vv<<>>v>v^>^><>^>v^<<>^>><>^<>>^^<^v<>><<>>^<^>>>^^<vv>vvv>^>>^v>^v<^v<<>^v^^ -^><v^^v<v>v><<<><>vv<v<>>>v^<>>>^^^>v<v<v>>^v<v<><<>><><^^v<v<<vv^vvv<^^>><^>^<v>vv>v>vv><>>v<^<^^>^^><<<<^<>^<<><^>v>^v^^<>^<<>>v>>v^<<^vvvvv^^^^v<v<<^^>^v<>v^>v>^<>^>>><^^><>><>^^vv^<^^>v^^v>>v<<^>>v^>>v^>>vv><vv^v^v<^<><<>v><^<v^^^>vvv>v><>>^<>>>^><vv^vv^<^^vv>v><vvvv><>vvv<>>>>v<v^>vv^v^>v<><v<v^>v^v^<>>>^^v<>v^>>^^^>^^vvv><v>^>^v<>>>vv>>>^><v^vv<^><><<v<<^^<>>>v<^<<v<v>v>><v^^^v<^<vvv^^><>^vvvv^>v>v>v^^v<<v^v^<>vv^v^<^><>v<v<vv>^^vv<><>v<v>>>>^><>><<^<>vv><^<>><>^<^<>>v<>><v><>v><v<>>^vv><<v<^^<>>>^>^<>>^>>>vv^<vv>vv^<v^vvv>^<^v<^>v>>^>>^v^^><^<^^^>^>>^^^>><<v^>^><<v<^><<>>^<>>v>v>vv^^^^^<><<v<><<<<^<<><>^>>v>><v<<><>^^>v^<<>><^v<^>><^v^>>v^<<^><>^^>^<vv>v<^^<^>^^>vv^>vv<>>v>vv<v^<v^v^^>>^^>^vv<<<v<><>^v>>v<^^<>>>>vv^>><v^<>><v>^^^<v>v<<<<^<^^><<>>>v>^^^vvv>v^v^^v^v^vv^>^^>v><v>v<^<^^>v<^><><v>^>^>^>v^><^<<v^v^v<<v^<vv^<^vv^>^^><v^<vv<^v>v>>v<<v>>v<>vv<vv><><>v^<>><><^vvv<^<^^^>v^^v<^>^<<v^vvv^^>v>>>>^^^<>vv<v^v^^^>v><><>>><>^<<^^v<^>v<<<v^^^vv^<vv>^v>^><><^^^v>^<^^<^>>^><^^v>vv^> -<vv><><>^^^><^^^>>v>><^>^<v^<vv^<v<^^v<<><v<<v^^>>vv<v^>^>>^v>>><vv<v<><vv<><>^v<^^><v>>>v><>v^^v^^vv^><^<<<v<<^^v><v>^v<v<<><vv^<v<vv>v>>^vv<<^>^<<v^^^vv>>>^^<^v^>^^vv>^^vv<^><<v^>v><>>v<^v^vvvv<^v^<><^v<^^v<^>>vv^v<^^<vvv>^<<v<<^<^v<><>^v><<v<>^>>>v^^v<^<<vvvv>^^v<<>>^<^<v>^v<<<>^v>><^vv>^^^<^^>^^v<<v^^^vv^v^v^><vvv<^><<<^v^v^<v>^v<v^>>v^<v^v<>v^<^^^>vvv<vv<v<<v<^<^v<>^<vv>vv^>>v>>^<><>vvv>><><^>^>><><>^>v^>v<>>v<v<<^<<v>vv>^v><<<^vv<vv>v^>v<>><^^<<^>v<><v<^^>v<<^<<<^^^v^>vv><<<^^^<^^^v>>><>^v>vv<v>vv^<v>>>><<<vvvv^<<>>^<v^<^>^<^<>>^>v>><<>>v^v<>^><<^>^>^<^v^^v<^v>vv^v<>v^v><>^v^<vv><vv^<>><<>v^>^<<<<^>v^v>>v>>vvv<^v<>v><><><^vv^>><>>^>^><><><^<>^>>>>>>><<><vv<>^<v<v>>v^<^<<<v<>>><<^<^<<v>^v^<^v<>^^<^>v^^<^<>^>^<>>vv<<v^<v<^v^vvv^^^v<vvv^<>>^v<<<v^^v<<^vv^v^><<^^>>^<^<>^v<><^>v^<<^v>^^^<^<vv<^<vv><<^v>v^>^>>>^><>vvv><^v<^^vv>>^>v>^v>^<v<v<>^>><<<><<vvv<^^>>>>^^v><<v^vv><<<>v^v^v^v>><v^<vv<^^^><<v^^vv^<^<v<^<<^>v>^^v>vv>>><<^^v<^>^<^>>>^^<<v<^^<vv^><v^^^<>>^<v^v><v>v^v>>^vvv<vv<<<>^v< -^<v><^<<v<>^^<v^v<>v^>vvv^<>^^><^<v^>>vv<v<^>^v>^^<^>vvvvvv>>v^v><<^v^vvvv>v>v^^>v><>><<<>>v^^>^<v<><^v><>^>^>^^<<^>v<v><><v^<^^^>v>v<><^<v><>>v^v<<^<<>v>vvv<v<v<v<<<<^<^v<v^v>>^<^<^>>>v>>^>vv<>^v^^^v^>^<>>^>v<v><>v<^v^v<vv<>v><vv>^<v^>vv><^^v><<>^>>>vv<>v><v<><>v>^^^^v>vv>>><^<<^^vv>>^vvv>><v>v^<^v<<^<>v^>v>^<vv^^<>>v>v<v>^^>vv^<^>>^<v^v>v<><^v<<<<^>>v^v<<^v^>><v^v>>><^>v>^v>^vv<vvvv^^^<>>^^<>^vv^^^><<>>vv>^<<^^^^<<v^>v<<v>>><>>^^>>v>vv<>v<^>^<<><^v^><>>>^^>v><v<^^v^<v<^<>><<><>v>><v>>^^v^^^<><v<<v>^^vv^<^^<>>^v^>^<<vvvv<><^v<v^<>v>><>^^v>>v>v>^>v^>v>v<><v>>^^<>v>vv<v<v^>>><v^v>>^<^vv>v>v>^^>vv<v><<^><vv^v>^>^v<<^<<<<^v^>>>>>v<^v^><^<^^><v^<<<^>v<><vv^^^<v^^>v<^vvv<<>>>v^>><<v<<^^>v<>>v^v^^><^v>^vvv><>><v<<v<^>>^<>v^>>^^><>^v^><>v>^<>v>^>><>>^^<vv>vv><<>v<vv<^>^^^><>vv^>>v>v^vvv<v><^v^<^v^<<v^<<^v<><v^v<v<v<^v<v><v<^<>>^^<vv^v>^v^^v><^v><>v^><v><><^vv^v<v^v^>v>^^v<v>>v^><vv>^<<><<><^v^>><vvv<><^^^><<><vv<<v<v^v^><>v^<v><>>>><v><<<^<v>><^>v<>^v><v<>vv<><<^<v^>^>^^vv<v^v<^v<vv>v<vv^>v>^ ->^>v<<<v><<v<^^^v>^v^^v><^^>^>v^^vv^>v^<^v>v^^vv^<<^^v<^<v>^v<^<>>v^>>vv<<^<^^><<^>^^^>>^<v^<v>v>>>^v^vv<^<^>^<vv<>>^v><<<>v^<^>^><v<^^<^>v<>^v^v>^^^v>><<>>^^<v^>^<><vv>><><vv^vvv^v<><^^vv^^^v^^<><<>>^><>^<><v<v^<v^<v<vv>>>>><v>v<<^><^<>^vv>^^v^v<^<^v^>v^>><^vv<^^>^>vvv>>v<><v^>v<v^<^vv>v<^^<>>>>^>>^>^>^v^vv>^<>>^^v^v<v>v>vv>^<>^^^^>v<v<<<<<^^>v>v<vvv>v^^^^>v<^><v<v>^>><^>><>><>>>>>^<<^<<v<>>>>vv<^<><>>>vv><<^v>v<^<v^>>^<^v<^<>><^^>^v^>v<v<vv<vv<^<<<<^<^>>>>v<^v><<^v^v<^<<>^<^>v^>>><>^><<>v>>vv^><^^^v<v>vv<>^vv<>v>v^v^<^>vv<v>v>^^^>v^>v<^^<v>^vv<<<<>^>v<vv<<v^^vv>^><^^v>v<^^v^>^>>^v<v><>>>^^v^>vv<<<>v>v>>vv^^>^v>^^><^><^>>v>^<>v^<v>>v^<<v^^v>>^<<v<>vv^v<^>>>>v^>vv^>^<>v^><>v<^^>v^vv<v<>vv^>>^v<v^^^^<<v<^<<<><><>>^^^>^>>^<v<^^<^>^>^^v>v><^<>vv^v>>v^>^vv^<<vv>>^^>>>v^^^^^^^^<<<<>v><<^^><<>^>>^v^>>^^><<<^^>^vv>>^vvvv>v>^>>>v>^v<v^><v<^^<<<^v>^>^>^v<^<>^^>v><<^<^v<<>><<^>v>^vv<<^^>^v>^v<<<^v<<vvv<<vvvv>vv^>>v<v>>v>^v>><^>v>v<vv^<<<>^^<>>v<<v<>v^^>>>v^<>v<v<v<^^<<<^^>v>>>>^^^vv<^^v<>^^<<>>< -^^>>v<^v<vv^<<>>v<vvv^><v^v>>><<v<vvv^v<>><>>v><<v^>><^<v^<<>>>><^><v><<vv<<<<^^vv^<<^^^^<<<>v^<<v<vvv>vv<v^<>^vv>^>>>^<>>v>>>^<<v^<^vv>>^^v^vvv>^><vv^><vv<^^^>v>^<<v<^>>>v>v^<<<^>vv^>v^v>^^v<^^><><<^^>^^^vvv<v>v<<>>><vvv<^^^><^<^<<>v<>v<^^><^>v<^^<<^<>><><>v>>^v^>v<<>v^v><vv>^^<><^<v^>><<^>>v>vvv><v^<v^^>>^<^><^v>>v^>v^>v><v>>>^<>>><<vv<v<vv^v<<><>><^<<><>>^><vv^v<^>>^>>>v>>v>^<^v<vv>^<^><^<>>^<<^<<v^^v^v^>v^v^>^>>v<^>^<v>^v<v><vv^^><^>><v>>vvv^v<^^<v<v>v>v<><>^^^><^><^>^><>^<>vv><v>>^v^<v^>vv^<<^<^<v^^v^^v<^>^<^><>^<v<v<^>v>>v^<<^v<^><<>>>^>v<><v^><<^<vv<v^<vv<<>v>v<^>^<v^v<vv<>vv^^^<>^>v>>^>v><>v>^v><>^<<<<>^^<><v^^<<<^>><^<>^<>><^v<>vv^<><v><v><vv>>^>^<<^vvv^<<>>><^<><<<<v^<<v><<v<^v^<>><<^^^^v<><^vv^vv>><><vv^<>^v>^<v>>v<^^vv<v^>>v^<^vv>v<<<<vv^<^<^v<<>>^<^vvv^v<>vvv^v^v^<<^<<>vv><<^^^><^>v>><v>^<v<v^<>^<^vvvvv^v>^>^<^<v^vvv^^>>vv>vv^^>v^<><>^^>>v><v>vv>vv<^<vv<^vvv^<<<>^<^>>v<^<v^v<<>^>v<^<v>^<v<^>^>^<><^>>vv<^^v^^><<<<>^v^v^<<>>>><>^>v>v^^>^<<^><^^v^>v<^>>><>vv^^<<<<vv^<^>v>v>>< ->v>^v^>vv><>v^<>v^>v<^^vv<><^<v<<>>>>v^v^v>^^v<>^vv^<>^<><>>><<^<<>^<<<<vv<<vv>>>v<v^<^>vv><^v>^<>>^v>v>v^^<>v>^<^vv^<<v^<<v>><vv<<>^^^<^><<><><^^<<<>v><v^>>^>v^>^>^v^<^<>><v^^<^^>^v^v><>^^v^^>^vvv<^v<<>^>^<>>>v^<^>v>v>^^<^><>^^v>v>>>v>>^v^>^^^^v>v<v<^^^vvv<v^><^>^>^><v^<<>>^<>^^>>><<<^^<v<v<<vv<^<<><v><>^<>^><^v>^>>>^>><v>^><>vv>>v>>vv<<>^^<><v<^^^^><v>^^v>^^^<v^>v^v^>v><^vv><<><^>v^^<>>^<<>v<v>^>^<<^><<><<>v^^^^^v^<>^^v<^v<v>v<>>v^<vvv><^<vvv>>^<>v>^<>^<<>><v^<v><^>^>v>>vv><vv<v^<<>>^><<^>v^<><^v<v<>^><v>v^<<v<<^vvv<<>>v^^<<<>^^vv^>v><vv>^><<v^><>v<>>>>><v<^<v<<<<v^<v^><^^<<<v<<>v<^^<><^vv><>v^vv>^^><vv^^<<vv^v^v<>^><<^>v<^vv<>v<<<v<<^vvv>^v>>^>^^^vv^<vv<><<>^vv^v^v^>^><<^<<<^<<^^^>vv^v<^>v>><^^vv>^>^>v>^>^>v^^v^<v>v>>^<><vv<vv^v>^^^>>>^v><vvv>>>v>vv^v<>v>>v^>><^>v<><vvv><v><^>v^<^>^>vv^^^>>^^<>^^^^<<v<<<>^vv^v^vv>><^v<<<^>><^>v^^^><vv>>^<^v<>v>^<<^>v>^>v><v<<^v><v^><v<<<v<>><<v>><^v^^vv<^>><v^><^^^>vv^><>>><^^>^>>^>^^>v^^<^><>><><^^^>vv^^vv^><<<<<v<<^^vv<v>^<>>>^v<>vvv>^<^v^<v><>v^< -<<vv>vv<<v>^v>vvv^v<>>^<^vvv<v>>>>>v>>^vv>>v>>^^^v>v^vv<^><^><^>>>v<v>^^<v><>>^>>><><<<>>^v><><vv<v<^<>^<>>^^v>>vv>>v^<^>v><^<v<v>^>^v^<^^><>v^>v>^>vvv><v^<<><v^<<>^>vv^^<>vvv>v^<<>>^^^<>^>v<>v^v<<<<><^><<v<^v<<v<^^v>^^^^<<>>vv<^<>>v>>><v^^<>><^<vvv<vv<vvv^><<vvv<<v^>^<^<^v<<<^<<^v<vv<<<<<><v^<>><><>^v<<^^><>>^<^>^^vv<^^vv><>>>vvv>v^>v<^vvv>^><^v^<>v><>v^>vvv<<^^<<vv^<><<v^^^^v^v>v^>v<>>^<><vv^v><>^^>^<>v<v^>v<^v<<<<>^<>^<^<<>v<v^^v<<v<>><>>^<<^<vvv^<^>v^>^v>v<><>v>^vv<<><v>><>^v<<^v^vvv^>v<><^>>v^>>>v<<v>>v<^v>>vv>><<>vv<^v><^^<>^<v^^v<<<<v<<^>>>>^^<<<^^^><<>^>v^>>><v>v<v>v<>><v^vv<<><<>^v^^vv^^<v^^<><>vvv^<<v<<^<^v^>^vv<<v>vv<<v^<vvv^>^^>v>v^v<<>^<v>v<><>v><>^><vvv^>v>^>>>^v<><^v^^^^>^v^v<>^><^<v>^<v^^v<^v<<v^^><>^^v>>v<<<^^^^^><<>v^^v^>>v<v><^v^v^v^v^v^>><>v^<>>^<>v<v<<^v<v><>^^><v<<v>^^>v^>v<v<v^<<>^>v<v>v>^^^<<^>^<>^<<<v^<><^vvv>v<^<<v^<^^<^>^>^^v^^^v<^^^^vv^v^vv^^>^v<^<^^<<>^^<^><^><<<^<>>v^>^><^v^>>^^v<>>^>>v<^><^>>^<^><^v^^^vvv>v<^<<^>>^<<<<>vv^v>v^^<<^^<<<<v><^v^v<^>^<^<v^>^^^ -^>^v<<v^>^>>>><v>>^><>^><><v<<><<<<>v<v>^^v<^^v^><^<>^vvv<^v<<^<<^><^<>v<<>>^v>>>v<>><v><<v<vvv><^vv^^^<>vv^^<v<<>>^v<^>^>v^^>v>vv<<v>^^^<>^^^>>v><><>>v>^<<>^^^>>>vvv>>^><>>>v>v>>v^<^<v^><><^^v><^><<><><^>vv><v><vvvvv<<^^^<>>^>v><vv<>>v<>>^<<<>>v<>^^^vvv>v<<<<v>vv^<>><<><<<^>>v>v<>v>v^<<<<>^v^v^^vv^v^vvv<^><^^<<>v>^><><vv<v><>>vvvvvv>v<v<^>><^v<^^^v<v>vv^v>^v<v^vv>^^vv<v>^^v^^>>^^<<>>^^><<>vv><^^>v>><<^<v>^^>^>^>v^<^>v^<^>>v<>v<<><>^<>vvv>^vv^<>v^<<>><<v^v^vv>^^<<<><<^>><v>>^v<v^vvv<^><vv^<<^<<>v^v<>v<>^vv^^>v^vvv^<>^>>v>v<v><<<<^<v<<^>vv^^^^^>v^v<v<v>>v<>>>^^v>^v<^v^<^>>^><<v^>vv<v^v<^v^<v<v^<>v>v<^^>v>^^<<<<>v>>v^><>^v>>vv>^v^^<<<^v>^v>>v<^>v>><>>vvv>>v><vv<>><><^>>v<<<<v^^<>v<v<<>^<^>>>v>vv>v^>v<<v>>>^>>>>><^^<v^v<<^<v>^><v^>v><>^<>>^vv<^<><>><vv<>vvv>^v<v^<vv<v<^<<<v<>>v^^<v^v^>>>^^v<>v<v^>v^<>><><><>^>>^<><vv<>><<v^>^<^^><><><>v^^v><>v<^>^>v><^^><v<<>>vv<<><^><<^^><<>v^<<v<v<v^v<><<vvvv^vv^^<vv<>v^<^<>>v^v>>v>v>v^^^<^vvv<v>^>v>v>^<<^><^<<v<>v>^<v^v^v>^<<<<>v<v^v<^><^<<vv<>^^><^v>v +140A +143A +349A +582A +964A @@ -0,0 +1 @@ +{l[65536]=0x12d50fe222;l[131072]=0x1be99d58d8;l[196608]=0x2f01b8a0a0;l[262144]=0x4b543f8890;l[327680]=0x45c8095e26;l[393216]=0x5e0371414c;l[458752]=0x83d36f2f0a;l[524288]=0x6fa6756380;l[589824]=0x8d0529e204;l[256]=0xdd96e52be8;l[65792]=0xcf27aeb776;l[131328]=0xfdf6b4fc50;l[196864]=0x10d1c6e5a40;l[262400]=0x137bd68f344;l[327936]=0x15fb5735d0a;l[393472]=0x16fc05b13a0;l[459008]=0x17a8a91b9d0;l[524544]=0x1a60cf0d630;l[590080]=0x1b4b46c2774;l[512]=0x1506734d768;l[66048]=0x1a78f8e4488;l[131584]=0x13309c2d148;l[197120]=0x182dd165e1e;l[262656]=0x2042a112050;l[328192]=0x1b2c74ae158;l[393728]=0x1f0b2af3038;l[459264]=0x244af534490;l[524800]=0x1e6f3b006d8;l[590336]=0x22a0260f116;l[768]=0x26997489aec;l[66304]=0x2b4b1c39d46;l[131840]=0x2ab3090fe00;l[197376]=0x20512eee6e0;l[262912]=0x3253273a080;l[328448]=0x31a0b351d62;l[393984]=0x2afbc5507b0;l[459520]=0x36c3e6ec58a;l[525056]=0x35e1acbf450;l[590592]=0x2e90c06c8a2;l[1024]=0x3765b94aff0;l[66560]=0x3ca96f99750;l[132096]=0x3cbe5af6368;l[197632]=0x3cf233a4598;l[263168]=0x33c9ebade30;l[328704]=0x3b85d26b286;l[394240]=0x3b83d37b5dc;l[459776]=0x4168e297a30;l[525312]=0x46577d79080;l[590848]=0x4663d16ec7c;l[1280]=0x34902041ae8;l[66816]=0x44288a4615e;l[132352]=0x3d170ac7948;l[197888]=0x3e43cafca62;l[263424]=0x44128001e5c;l[328960]=0x2ff98670ba2;l[394496]=0x3adedc72860;l[460032]=0x4c9e3e8ad30;l[525568]=0x3f0afa37be4;l[591104]=0x4671f5277ba;l[1536]=0x4d32e913650;l[67072]=0x59d108564cc;l[132608]=0x576ea0caf1c;l[198144]=0x50c1a19b3f2;l[263680]=0x59614287f00;l[329216]=0x56bbaa68472;l[394752]=0x40a25ddce44;l[460288]=0x632b63e3546;l[525824]=0x606b6b056e0;l[591360]=0x52628f84f46;l[1792]=0x60f20443470;l[67328]=0x690c701643e;l[132864]=0x6821c0818b0;l[198400]=0x6777757059a;l[263936]=0x6d7cbcef8b4;l[329472]=0x6c787ddc462;l[395008]=0x6bb7fc04bf8;l[460544]=0x5aa15c7056e;l[526080]=0x672c3986940;l[591616]=0x6635e0111fc;l[2048]=0x5419cd35ee0;l[67584]=0x6c4063240ec;l[133120]=0x605590ffaf8;l[198656]=0x61825134c14;l[264192]=0x7042c5a0a70;l[329728]=0x63dbd19ee4c;l[395264]=0x650891d3f68;l[460800]=0x6dac071f8b4;l[526336]=0x4cc270b4680;l[591872]=0x5d8fe77f326;l[2304]=0x73cc5d9d22c;l[67840]=0x85fd14d4b8a;l[133376]=0x81bcee988b0;l[198912]=0x773637b4750;l[264448]=0x8a67e2e15c4;l[329984]=0x85f7f6604cc;l[395520]=0x7b0ead1d600;l[461056]=0x877768d613e;l[526592]=0x82c44bc0b68;l[592128]=0x60f38ccb62c;l[1]=0x69e18ab6488;l[65537]=0xabe165cbb82;l[131073]=0x8e7f6e60d58;l[196609]=0x9aeb7c510a8;l[262145]=0xb0fc5eae560;l[327681]=0x92b05b09616;l[393217]=0x9f6e9dc34c4;l[458753]=0xb6175790f4a;l[524289]=0x96e147b1ee0;l[589825]=0xa3f1bf358ec;l[257]=0x747818954fc;l[65793]=0x5e72fc5f8d0;l[131329]=0x6f9ea03ee60;l[196865]=0x6d5907d3f6e;l[262401]=0x7979a87cdf8;l[327937]=0x8305dcbf2ec;l[393473]=0x80ce9739ca0;l[459009]=0x7cac0480376;l[524545]=0x8670de0db04;l[590081]=0x842361c1f66;l[513]=0x8d125174b80;l[66049]=0xa793b6e9436;l[131585]=0x7995ee8da84;l[197121]=0x90992d17a30;l[262657]=0xb6188539b50;l[328193]=0x97690b9bdbe;l[393729]=0xa61bcb529ec;l[459265]=0xba8056e6852;l[524801]=0x9b0b4f78c00;l[590337]=0xaa1043f938c;l[769]=0xa5c0aeb9b30;l[66305]=0xb56d253c138;l[131841]=0xae999c6d878;l[197377]=0x80b38c9c986;l[262913]=0xc4c7eacef14;l[328449]=0xbdda014227c;l[393985]=0xa0ccfbfbcd0;l[459521]=0xc92fbc7bc30;l[525057]=0xc2120caa17c;l[590593]=0xa45909125d4;l[1025]=0xb249d8cfc68;l[66561]=0xc0e764859e8;l[132097]=0xbd8bc3c0688;l[197633]=0xbabe9d9e680;l[263169]=0x9971409dbc0;l[328705]=0xafa2d006b76;l[394241]=0xac9fd246c94;l[459777]=0xbc326793118;l[525313]=0xc864ab40d40;l[590849]=0xc5700066704;l[1281]=0xc5bf9086edc;l[66817]=0xf220eb1b1e0;l[132353]=0xdb2a0ba3180;l[197889]=0xdc9b2a07890;l[263425]=0xeb42745edc0;l[328961]=0xb09898d528c;l[394497]=0xcda881d4018;l[460033]=0xfcf6f60e1ce;l[525569]=0xd5eeee2cfe0;l[591105]=0xe84e7c3a6fc;l[1537]=0xe2d6e277b40;l[67073]=0x10229e13ee62;l[132609]=0xf9b08dbad30;l[198145]=0xe64f648685c;l[263681]=0xfa8943686c8;l[329217]=0xf1ccbf500b8;l[394753]=0xb853c6c10b0;l[460289]=0x10d13bc5a198;l[525825]=0x1043cd7837b0;l[591361]=0xdff06e69e14;l[1793]=0xd87e3e20f40;l[67329]=0xe9f27f5b52e;l[132865]=0xe59743a4a28;l[198401]=0xe1ebf9c34da;l[263937]=0xee0d353d7cc;l[329473]=0xe9986a08402;l[395009]=0xe5d6e960960;l[460545]=0xbc9b34c1f7e;l[526081]=0xd79bba83eb0;l[591617]=0xd3a4623e534;l[2049]=0xed4c4708670;l[67585]=0x1223bcd8650a;l[133121]=0x1066b9b686cc;l[198657]=0x107dcb9ccdde;l[264193]=0x1270b4a91070;l[329729]=0x10abef695c02;l[395265]=0x10c3014fa314;l[460801]=0x11dac1f97d96;l[526337]=0xd631a7342e8;l[591873]=0xf929b0fc05c;l[2305]=0x10d5f2cee3d8;l[67841]=0x13244c3aa1dc;l[133377]=0x127edb175380;l[198913]=0x110b2d08c876;l[264449]=0x1371440b4d48;l[329985]=0x12c8d683b0ce;l[395521]=0x114eff4f3858;l[461057]=0x12cf2eea16f4;l[526593]=0x12228e59359c;l[592129]=0xdcf87a9a686;l[2]=0xb8084431a60;l[65538]=0x13a30d3948b4;l[131074]=0xfe31c61d82c;l[196610]=0x1152e8a7f986;l[262146]=0x13ee15101d88;l[327682]=0x101f83750be0;l[393218]=0x11947307c898;l[458754]=0x14391ce6f268;l[524290]=0x105bea883fa0;l[589826]=0x11d5fd6797b6;l[258]=0x118db7bc33c8;l[65794]=0xee53064c5a6;l[131330]=0x10e582d341b0;l[196866]=0x109757055ba0;l[262402]=0x11fa7718b574;l[327938]=0x130db28f6b5a;l[393474]=0x12c06befddf0;l[459010]=0x123afc5adb30;l[524546]=0x1351c22643b0;l[590082]=0x1303181a50f4;l[514]=0xca6f7e369d0;l[66050]=0xf99e8ad7dba;l[131586]=0xa48a1e26d34;l[197122]=0xcd322d50f54;l[262658]=0x10fbad537f00;l[328194]=0xd710d5af272;l[393730]=0xf0366626b8c;l[459266]=0x1135e7a5c39e;l[524802]=0xd9eeed03850;l[590338]=0xf366b244cc8;l[770]=0x11a535957004;l[66306]=0x134f16e8a12a;l[131842]=0x127d93ff5660;l[197378]=0xd665ca5370c;l[262914]=0x14c835e4aff8;l[328450]=0x13f50cef8156;l[393986]=0x10bd2824b320;l[459522]=0x150c6b18db76;l[525058]=0x143645bf5eb8;l[590594]=0x10f3a10f7a86;l[1026]=0x1550a04d0160;l[66562]=0x16d43b09ffb4;l[132098]=0x166b9ce6b790;l[197634]=0x1612df42c004;l[263170]=0x127fdccd3ca0;l[328706]=0x14ce74f9b26a;l[394242]=0x147259dbdc04;l[459778]=0x160a803ecb6c;l[525314]=0x174603b19820;l[590850]=0x16eacdc21a60;l[1282]=0x11bb5c6c4cf0;l[66818]=0x1646cbb10ada;l[132354]=0x13d1d24c7088;l[197890]=0x13e5f4a82be6;l[263426]=0x1556bd3540a4;l[328962]=0xf3bdbef9b4e;l[394498]=0x12284e41d800;l[460034]=0x16eef13a14f4;l[525570]=0x12dfef15a0bc;l[591106]=0x14ae3bbad176;l[1538]=0x164426412dc0;l[67074]=0x1961c8890f00;l[132610]=0x1875e8f46bc4;l[198146]=0x1671b82406be;l[263682]=0x186c1e54a200;l[329218]=0x177c0bb6b9e6;l[394754]=0x11aba5d0b97c;l[460290]=0x1a1838869dc2;l[525826]=0x19267fdcd1d0;l[591362]=0x157aa4d4cfaa;l[1794]=0x17fab456a3a8;l[67330]=0x19abba6bea6a;l[132866]=0x193322998aa0;l[198402]=0x18cc82b99dce;l[263938]=0x19f47a5c1b4c;l[329474]=0x197a4991d2be;l[395010]=0x191246458098;l[460546]=0x15005e561e12;l[526082]=0x179be5e82358;l[591618]=0x17308521f258;l[2050]=0x13dc15980670;l[67586]=0x18f0679b5ff0;l[133122]=0x162dd90c67c0;l[198658]=0x1641fb682320;l[264194]=0x193490cc6840;l[329730]=0x166a401f99e0;l[395266]=0x167e627b5540;l[460802]=0x181c770ccf50;l[526338]=0x11348bf98a80;l[591874]=0x147f8058571a;l[2306]=0x18d5dbe63f24;l[67842]=0x1c4ca7ad6b46;l[133378]=0x1b42ec2dbae0;l[198914]=0x19011fe20fa4;l[264450]=0x1c975797744c;l[329986]=0x1b8a9fb375c8;l[395522]=0x1942aa41dd20;l[461058]=0x1b79a21f3892;l[526594]=0x1a68b731f530;l[592130]=0x13dcda2555b8;l[3]=0xf75e3b8ce88;l[65539]=0x1b9ba8468df6;l[131075]=0x15f2966114d0;l[196611]=0x180c1e610df4;l[262147]=0x1be2195e3b00;l[327683]=0x162a66b520ba;l[393219]=0x18491201b53c;l[458755]=0x1c288a75e816;l[524291]=0x166237092cb0;l[589827]=0x188605a25c90;l[259]=0x162241f0ced0;l[65795]=0x1229f107195a;l[131331]=0x151047a7e680;l[196867]=0x1490b59493f4;l[262403]=0x168d57b283b4;l[327939]=0x1813775d952e;l[393475]=0x1794ca789b48;l[459011]=0x16c4807bf994;l[524547]=0x184e2a7bbda8;l[590083]=0x17ce1a2a5e70;l[515]=0x1506734d7680;l[66051]=0x194a6dc7ce68;l[131587]=0x118debf4dfd8;l[197123]=0x1538e92efd36;l[262659]=0x1b3837e73438;l[328195]=0x16141ecd7178;l[393731]=0x1853d41e7048;l[459267]=0x1b78bd295ad0;l[524803]=0x16484b329950;l[590339]=0x188d23d0337e;l[771]=0x1101adb1affc;l[66307]=0x1354f91e9a92;l[131843]=0x12197c079c10;l[197379]=0xac3be7f1aac;l[262915]=0x15407b499548;l[328451]=0x14035826b2ee;l[393987]=0xf5eaf142a80;l[459523]=0x157159232a1e;l[525059]=0x1431399bf9a8;l[590595]=0xf81d0a45b3e;l[1027]=0x1a0d48543958;l[66563]=0x1c252a0f4388;l[132099]=0x1b842cd171a8;l[197635]=0x1afa08e80da0;l[263171]=0x15e35ec97ca0;l[328707]=0x1917fb284386;l[394243]=0x188a79c500a4;l[459779]=0x1abc223285f8;l[525315]=0x1c6a89d9ae40;l[590851]=0x1bddeda4c404;l[1283]=0x18d31afe0550;l[66819]=0x1f26d368c9d2;l[132355]=0x1baf3e21a140;l[197891]=0x1bc3607d5c9e;l[263427]=0x1dbd6c7c9c9c;l[328963]=0x1535373478d6;l[394499]=0x19400cd39060;l[460035]=0x1fdb5b0af444;l[525571]=0x1a30c6caa974;l[591107]=0x1caa56bebf7e;l[1539]=0x176204719350;l[67075]=0x1ba38ffbddb2;l[132611]=0x1a4edcf1d370;l[198147]=0x177804cb493c;l[263683]=0x1a24aa255c58;l[329219]=0x18cbc4120d38;l[394755]=0x10bdfeb5f770;l[460291]=0x1c469baf2a18;l[525827]=0x1aec0f8ff720;l[591363]=0x15d496f88774;l[1795]=0x1c59bfa6f600;l[67331]=0x1e9f0cba489e;l[132867]=0x1dee15cd5f18;l[198403]=0x1d560fa805ca;l[263939]=0x1ede7031c8dc;l[329475]=0x1e2be04cf692;l[395011]=0x1d9276bb37f0;l[460547]=0x17fce722c7ce;l[526083]=0x1b7e72e71e30;l[591619]=0x1ae1abdb80b4;l[2051]=0x1af3d429bf98;l[67587]=0x21d06f531fb0;l[133123]=0x1e0b44e19940;l[198659]=0x1e1f673d54a0;l[264195]=0x221498842800;l[329731]=0x1e47abf4cb60;l[395267]=0x1e5bce5086c0;l[460803]=0x208326542c10;l[526339]=0x172de73e68d0;l[591875]=0x1b973eea1042;l[2307]=0x1954da25b7f8;l[67843]=0x1def8f2f4d3c;l[133379]=0x1c7d003a35d0;l[198915]=0x19688c986566;l[264451]=0x1e2a5be7a4e8;l[329987]=0x1cb4d08e3f5e;l[395523]=0x199a33c68188;l[461059]=0x1c836acd54d4;l[526595]=0x1b09ac6aaa6c;l[592131]=0x12406fe7f596;l[4]=0x1a7862ad9540;l[65540]=0x2aa6a9e4c81c;l[131076]=0x2319be0328ac;l[196612]=0x25e248cedbee;l[262148]=0x2af85972f458;l[327684]=0x235ccccdb3c8;l[393220]=0x262a7ae60268;l[458756]=0x2b4a090120a0;l[524292]=0x239fdb983ef0;l[589828]=0x2672acfd28ee;l[260]=0x22e275db4140;l[65796]=0x1da0fb0e646a;l[131332]=0x2173f590a2a0;l[196868]=0x20c99ce7038c;l[262404]=0x236660bea92c;l[327940]=0x2566044d362e;l[393476]=0x24bc90d1efc0;l[459012]=0x23a80c1ccf0c;l[524548]=0x25ab3a000ea8;l[590084]=0x2500631862e8;l[516]=0x221a3feceb60;l[66052]=0x27b122729866;l[131588]=0x1d8b43f2dcec;l[197124]=0x22589bcf86a8;l[262660]=0x2a308d1c9620;l[328196]=0x2374d93cae4e;l[393732]=0x2663c93243f4;l[459268]=0x2a7cf85fd212;l[524804]=0x23b4eba2eb80;l[590340]=0x26a8fee51c84;l[772]=0x259626c123c0;l[66308]=0x28a27dde8710;l[131844]=0x270ca8309420;l[197380]=0x1d8806106ff6;l[262916]=0x2b2f47fcab8c;l[328452]=0x2997cc42d4c4;l[393988]=0x2396007f5168;l[459524]=0x2b7bb33fe798;l[525060]=0x29e13b21c2b4;l[590596]=0x23d4af79295c;l[1028]=0x1d1e06255760;l[66564]=0x1fcaa1007e6e;l[132100]=0x1ef1b6ca33d4;l[197636]=0x1e369ebd7452;l[263172]=0x179cbf17e6b8;l[328708]=0x1bb7d1cb0fbc;l[394244]=0x1af95c447160;l[459780]=0x1dc4f8de9da2;l[525316]=0x1fe6b6dc3280;l[590852]=0x1f292683ecca;l[1284]=0x21104b175ea4;l[66820]=0x292cf397f778;l[132356]=0x24b3695e0e60;l[197892]=0x24c832a99778;l[263428]=0x274c290ad070;l[328964]=0x1c5746affbf4;l[394500]=0x2181268bbc10;l[460036]=0x29f1c6f2149e;l[525572]=0x22ac4785c0f0;l[591108]=0x25d1c1b88a04;l[1540]=0x24a826a428b8;l[67076]=0x2a16aceecaa2;l[132612]=0x286237ed47c0;l[198148]=0x24c1c9ee86c4;l[263684]=0x2829bff00020;l[329220]=0x267117e53860;l[394756]=0x1c2f0490fba0;l[460292]=0x2adcbd4b6b10;l[525828]=0x29226f34bf78;l[591364]=0x22a86a8bd0ac;l[1796]=0x2568a334c0c0;l[67332]=0x284618bb3ae6;l[132868]=0x2760a428e350;l[198404]=0x269b19333932;l[263940]=0x2887c4195d84;l[329476]=0x27a0b68f1d2a;l[395012]=0x26d9c82d0db8;l[460548]=0x1fc47260aba6;l[526084]=0x242fe3cc6ed0;l[591620]=0x236597f08084;l[2052]=0x278cb6816680;l[67588]=0x30348a5b58e2;l[133124]=0x2b6fb391cfe4;l[198660]=0x2b86c57816f6;l[264196]=0x3081822c0448;l[329732]=0x2bb4e944a51a;l[395268]=0x2bcbfb2aec2c;l[460804]=0x2e7f862b486e;l[526340]=0x22bfe29d9270;l[591876]=0x284a8d20a06c;l[2308]=0x2b6b2158ed48;l[67844]=0x313519bd980c;l[133380]=0x2f65116bc5f8;l[198916]=0x2b89508c7cbe;l[264452]=0x3182118e4378;l[329988]=0x2faf0cd82346;l[395524]=0x2bcd22d2eca0;l[461060]=0x2f73f31be424;l[526596]=0x2d9cbb5c7f14;l[592132]=0x22a1797c613e;l[5]=0x1cc14aa7c5d8;l[65541]=0x30f21d23d00e;l[131077]=0x277b5fe16e40;l[196613]=0x2aecf6143f8c;l[262149]=0x313d24faa740;l[327685]=0x27b7c6f4a452;l[393221]=0x2b2e807410fc;l[458757]=0x31882cd17e7e;l[524293]=0x27f42e07da70;l[589829]=0x2b700ad3e278;l[261]=0x2d0c2d2381f4;l[65797]=0x267edc32e53c;l[131333]=0x2b3bce55fc00;l[196869]=0x2a6402d577e2;l[262405]=0x2d9e3c263ae0;l[327941]=0x3014b757aae8;l[393477]=0x2f3dd1057f70;l[459013]=0x2de26557473a;l[524549]=0x305c6add69dc;l[590085]=0x2f84211ed912;l[517]=0x27bce13692d0;l[66053]=0x2ea17b563630;l[131589]=0x220d0fb84f08;l[197125]=0x27f791c6265e;l[262661]=0x31a2f536af88;l[328197]=0x294a761f43e0;l[393733]=0x2ce370481198;l[459269]=0x31ebb526e488;l[524805]=0x2986dd327a20;l[590341]=0x2d24faa7e336;l[773]=0x2cc0e89701dc;l[66309]=0x307c599f704a;l[131845]=0x2e8239951b50;l[197381]=0x22c4c117e6c4;l[262917]=0x338c966075b8;l[328453]=0x3190d04a3ce6;l[393989]=0x2a27f0105100;l[459525]=0x33d6b9bd1026;l[525061]=0x31d7f7428938;l[590597]=0x2a6457238756;l[1029]=0x2d23462d1ba8;l[66565]=0x306bbc0483f0;l[132101]=0x2f6206b1e4f8;l[197637]=0x2e7d1c5dee58;l[263173]=0x2667290d8880;l[328709]=0x2b6fd3f137fe;l[394245]=0x2a878c236284;l[459781]=0x2df43ec65a10;l[525317]=0x309074f67fe0;l[590853]=0x2fa91257030c;l[1285]=0x1fa16bb88cd4;l[66821]=0x2982471c53dc;l[132357]=0x24020abd0420;l[197893]=0x2412bdc5b4d4;l[263429]=0x271be15640a8;l[328965]=0x19b594b61558;l[394501]=0x1ff9c19bd7e8;l[460037]=0x2a3af6fe7f02;l[525573]=0x2155cf337c58;l[591109]=0x252276725258;l[1541]=0x2af66c343680;l[67077]=0x318d64da4688;l[132613]=0x2f74a57c619c;l[198149]=0x2b061940806e;l[263685]=0x2f24d78476a0;l[329221]=0x2d07e51d4cd6;l[394757]=0x208cfb6bffb4;l[460293]=0x325b4782c282;l[525829]=0x303caf0fb4e0;l[591365]=0x285b95f05d8a;l[1797]=0x329f7cb6e7b8;l[67333]=0x3616b43f02b2;l[132869]=0x34fe5b95b658;l[198405]=0x340ce55e34b6;l[263941]=0x365f742f3394;l[329477]=0x3545828dfe76;l[395013]=0x3452a8ea1780;l[460549]=0x2bbf26783cca;l[526085]=0x31161719e608;l[591621]=0x301fdffc2038;l[2053]=0x2923514d31e8;l[67589]=0x33907ec29f30;l[133125]=0x2dc61c8bfc40;l[198661]=0x2dda3ee7b7a0;l[264197]=0x33d4a7f3a780;l[329733]=0x2e02839f2e60;l[395269]=0x2e16a5fae9c0;l[460805]=0x315084e2e590;l[526341]=0x23209dc82570;l[591877]=0x29c6bc0d8292;l[2309]=0x3286f458d8bc;l[67845]=0x39795f18f19e;l[133381]=0x37450c6abd80;l[198917]=0x329b2d4e5414;l[264453]=0x39c40f02faa4;l[329989]=0x378cbff07868;l[395525]=0x32dcb7ae2190;l[461061]=0x373a503995ea;l[526597]=0x34fece1dced0;l[592133]=0x27cab5e0a098;l[6]=0x1eebc771a1c0;l[65542]=0x371fd5853d10;l[131078]=0x2bbff734d2a4;l[196614]=0x2fdb49217bba;l[262150]=0x3766469cec78;l[327686]=0x2bf7c788e0ec;l[393222]=0x30183cc22560;l[458758]=0x37acb7b49bec;l[524294]=0x2c2f97dcef40;l[589830]=0x30553062cf12;l[262]=0x2e71f0a380b4;l[65798]=0x2694d6209ca8;l[131334]=0x2c37cc760488;l[196870]=0x2b2e9ab013ee;l[262406]=0x2f02560b6cd8;l[327942]=0x31ebb5713874;l[393478]=0x30e368d9a080;l[459014]=0x2f3d22c3c956;l[524550]=0x322a0c7e478c;l[590086]=0x31205c7a4a46;l[518]=0x2bacd6ebb370;l[66054]=0x33deda2bece2;l[131590]=0x24db92f679c4;l[197126]=0x2be2f0bc1e6c;l[262662]=0x376177d6c100;l[328198]=0x2d6bdf0e713a;l[393734]=0x31ae94f116bc;l[459270]=0x37a5a107ce36;l[524806]=0x2da3af627fb0;l[590342]=0x31eb8891c090;l[774]=0x2c612cf7c2b8;l[66310]=0x30c8e54115bc;l[131846]=0x2e67a8303830;l[197382]=0x206e86abccba;l[262918]=0x34541ca68884;l[328454]=0x31f13989c720;l[393990]=0x291e722f4c28;l[459526]=0x3493801e0dbc;l[525062]=0x322da09cfe3c;l[590598]=0x2950195d6d48;l[1030]=0x2db21485d100;l[66566]=0x318ed15b4524;l[132102]=0x304cbcee1c70;l[197638]=0x2f366c54b954;l[263174]=0x259cd15b45e0;l[328710]=0x2b8b8071467a;l[394246]=0x2a71d25e0484;l[459782]=0x2e78070b91fc;l[525318]=0x318721701360;l[590854]=0x306e588b2a10;l[1286]=0x2ab51a355dc8;l[66822]=0x366057b9cbce;l[132358]=0x2fdf98728e38;l[197894]=0x2ff26475df52;l[263430]=0x3386e47336cc;l[328966]=0x23b55ccb2d72;l[394502]=0x2b1a05f86b40;l[460038]=0x3731ff94d9b0;l[525574]=0x2cb35ea8a0d4;l[591110]=0x312d6230fc8a;l[1542]=0x22035b636520;l[67078]=0x29bd16939198;l[132614]=0x273a5d07f8f4;l[198150]=0x21f802bda5e6;l[263686]=0x26c7d972c740;l[329222]=0x2440ecdde9be;l[394758]=0x15877cfe3a8c;l[460294]=0x2a70ac9fff0a;l[525830]=0x27e819ff3db0;l[591366]=0x1e9a3c982c22;l[1798]=0x335668e23a00;l[67334]=0x3761e76860d6;l[132870]=0x36112fa48ac0;l[198406]=0x34ee53279ca2;l[263942]=0x37a14adfe114;l[329478]=0x364efa24223a;l[395014]=0x352aba3acec8;l[460550]=0x2b13901fe676;l[526086]=0x315084f3e0d0;l[591622]=0x3028e790ae84;l[2054]=0x303b0fdeeb10;l[67590]=0x3c70867a5ef0;l[133126]=0x35a388612dc0;l[198662]=0x35b7aabce920;l[264198]=0x3cb4afab6740;l[329734]=0x35dfef745fe0;l[395270]=0x35f411d01b40;l[460806]=0x39b7342a4250;l[526342]=0x2919f90d03c0;l[591878]=0x30de7a9f3bba;l[2310]=0x2cd1332f0a68;l[67846]=0x34e787318c6c;l[133382]=0x324a610df148;l[198918]=0x2ccdda9b62ae;l[264454]=0x352253e9e418;l[329990]=0x32823161fad6;l[395526]=0x2cff81c97ed0;l[461062]=0x320f597e6b04;l[526598]=0x2f6b03ed3ce4;l[592134]=0x1ff98c39f94e;l[7]=0x2e52acafcaa8;l[65543]=0x4a8f3d6cd966;l[131079]=0x3d4b852048b0;l[196615]=0x4215d9d8abe4;l[262151]=0x4ae0ecfb0800;l[327687]=0x3d8e93ead62a;l[393223]=0x425e0befd4bc;l[458759]=0x4b329c8936a6;l[524295]=0x3dd1a2b563b0;l[589831]=0x42a63e06fda0;l[263]=0x3c68f18e704c;l[65799]=0x334176836e20;l[131335]=0x39cfda155050;l[196871]=0x389aab141c6e;l[262407]=0x3d0d51843478;l[327943]=0x406efe2884dc;l[393479]=0x3f3ab455a9a0;l[459015]=0x3d4efce25cb6;l[524551]=0x40b433db5fb4;l[590087]=0x3f7e869c1f26;l[519]=0x3a7624719920;l[66055]=0x43f9d91830f0;l[131591]=0x328bfe90fa28;l[197127]=0x3ab48054346e;l[262663]=0x480a735eb8b8;l[328199]=0x3c7c092b4d20;l[393735]=0x416cc30d92b8;l[459271]=0x4856dea1f708;l[524807]=0x3cbc1b918cb0;l[590343]=0x41b1f8c06da6;l[775]=0x3fcf47befaf4;l[66311]=0x44eb34842206;l[131847]=0x422ac7a7ab60;l[197383]=0x31fdea56f878;l[262919]=0x49092e3ed090;l[328455]=0x46471b567612;l[393991]=0x3c125a165b80;l[459527]=0x495599820efa;l[525063]=0x46908a356660;l[590599]=0x3c51091035d2;l[1031]=0x3ef664538e48;l[66567]=0x436e07d62e3c;l[132103]=0x41fa33fd9bc0;l[197639]=0x40b91ccdec1c;l[263175]=0x35a279da8b00;l[328711]=0x3c7dccd1fcaa;l[394247]=0x3b3958286e2c;l[459783]=0x3fdfae8fb184;l[525319]=0x43684cd7ae70;l[590855]=0x4224bd5c7898;l[1287]=0x3ce5bb4baa2c;l[66823]=0x4a5d394bd050;l[132359]=0x42ddd577b600;l[197895]=0x42f498d0b8a0;l[263431]=0x47165395ece0;l[328967]=0x34db6f41169c;l[394503]=0x3d627310e0c8;l[460039]=0x4b530f4227ae;l[525575]=0x3f3cd38fc9c0;l[591111]=0x446611bcbc4c;l[1543]=0x426e97d85cf0;l[67079]=0x4b5ab7296522;l[132615]=0x487da506d810;l[198151]=0x42771e44d26c;l[263687]=0x4807af01de38;l[329223]=0x452669d60c48;l[394759]=0x343e155eba50;l[460295]=0x4c51ca223fc8;l[525831]=0x496edeea8a00;l[591367]=0x3ec3ded27d84;l[1799]=0x32f48ac15eec;l[67335]=0x3794c267a2a0;l[132871]=0x360c1dab53d0;l[198407]=0x34b84d0b0a38;l[263943]=0x37cc1fcca540;l[329479]=0x3641e2186dac;l[395015]=0x34ecae0bbec0;l[460551]=0x29524e69d9d4;l[526087]=0x3075b992364c;l[591623]=0x2f1d280ba886;l[2055]=0x394f711776f0;l[67591]=0x474dd7c8bf22;l[133127]=0x3f7ee4bccd6c;l[198663]=0x3f93ae085686;l[264199]=0x4793f5c930a0;l[329735]=0x3fbd409f68ba;l[395271]=0x3fd209eaf1d4;l[460807]=0x441f16a711de;l[526343]=0x31152e772298;l[591879]=0x39f8ba460324;l[2311]=0x3ef4425cbb68;l[67847]=0x4837911f94f4;l[133383]=0x453aa9048130;l[198919]=0x3ef48cb9bbce;l[264455]=0x487daf200678;l[329991]=0x457dcaa0a496;l[395527]=0x3f31852ff1c8;l[461063]=0x44fcad8c443c;l[526599]=0x41f896039d7c;l[592135]=0x3052d05832ee;l[8]=0x2e02110c7600;l[65544]=0x4e412d0e5c18;l[131080]=0x3f13a3610904;l[196616]=0x448703808a42;l[262152]=0x4e8c34e535a8;l[327688]=0x3f500a744174;l[393224]=0x44c88de05e10;l[458760]=0x4ed73cbc0f44;l[524296]=0x3f8c718779f0;l[589832]=0x450a184031ea;l[264]=0x478bcf386b50;l[65800]=0x3d187e09a942;l[131336]=0x4490d93c6400;l[196872]=0x432e37644b14;l[262408]=0x483e534d807c;l[327944]=0x4c16d794b3e6;l[393480]=0x4ab51aeaf3a0;l[459016]=0x48827c7e8f34;l[524552]=0x4c5e8b1a7538;l[590088]=0x4afb6b044fa0;l[520]=0x3ea9d94c3cb0;l[66056]=0x497b458ccada;l[131592]=0x359edde76864;l[197128]=0x3ee489dbd044;l[262664]=0x4e0def09ce40;l[328200]=0x40e2b99eded2;l[393736]=0x467d7db45c7c;l[459272]=0x4e56aefa059e;l[524808]=0x411f20b21770;l[590344]=0x46bf08143078;l[776]=0x4615f37d6a00;l[66312]=0x4be0fa2d9c30;l[131848]=0x48bc42f4c380;l[197384]=0x36568f470036;l[262920]=0x5082668b2bac;l[328456]=0x4d5c09466f24;l[393992]=0x41c0338fec08;l[459528]=0x50cc89e7c878;l[525064]=0x4da3303ebdd4;l[590600]=0x41fc9aa324bc;l[1032]=0x4a322c3a8240;l[66568]=0x4f420a29b582;l[132104]=0x4d99caa520bc;l[197640]=0x4c2b409e8c0e;l[263176]=0x3f94e970a4c8;l[328712]=0x475a3408ef00;l[394248]=0x45e84c887b78;l[459784]=0x4b2c1868dc2e;l[525320]=0x4f2b8e53bc20;l[590856]=0x4dba8c01a13e;l[1288]=0x40f4bee80078;l[66824]=0x50334cf27ff6;l[132360]=0x47b014202a28;l[197896]=0x47c59e5d7f8a;l[263432]=0x4c6f637931cc;l[328968]=0x37c5f2062fda;l[394504]=0x416a200727a0;l[460040]=0x512e2e5be838;l[525576]=0x437b27720674;l[591112]=0x494e6fd23112;l[1544]=0x489e74947400;l[67080]=0x52b30640ea50;l[132616]=0x4f71a9c1fb34;l[198152]=0x489d04c2d55e;l[263688]=0x4ee45dc25e00;l[329224]=0x4b9ece3a2a06;l[394760]=0x387da365c7ac;l[460296]=0x53b1eb85a082;l[525832]=0x506ab5f188b0;l[591368]=0x4458a16313aa;l[1800]=0x48b8d49e08b0;l[67336]=0x4df4e7408d9e;l[132872]=0x4c3b7767ea70;l[198408]=0x4abdd48069ba;l[263944]=0x4e39a4277fb4;l[329480]=0x4c7e9b56f3c2;l[395016]=0x4aff95030db8;l[460552]=0x3de921b6508e;l[526088]=0x45fa250f3380;l[591624]=0x4477c1416e9c;l[2056]=0x329bdf8db500;l[67592]=0x425e79222b66;l[133128]=0x3988d3f0d30c;l[198664]=0x399986f983c2;l[264200]=0x4298545a13b8;l[329736]=0x39baed0ae52e;l[395272]=0x39cba01395e4;l[460808]=0x3e9dd9ff08ca;l[526344]=0x29228789c2b0;l[591880]=0x33206062a5b0;l[2312]=0x4447a2d30224;l[67848]=0x4eb363f149ce;l[133384]=0x4b523179d400;l[198920]=0x443df6f1ee6c;l[264456]=0x4ef73a0b18ec;l[329992]=0x4b930b2f5500;l[395528]=0x4478a7818200;l[461064]=0x4afa9820514a;l[526600]=0x4792363b4880;l[592136]=0x33b39a32cd90;l[9]=0x2e61ab2a79a8;l[65545]=0x52a402c3f0da;l[131081]=0x418d58089528;l[196617]=0x47aa73e1ee30;l[262153]=0x52ea73dba2a0;l[327689]=0x41c5285ca5ce;l[393225]=0x47e767829a34;l[458761]=0x5330e4f35472;l[524297]=0x41fcf8b0b680;l[589833]=0x48245b234644;l[265]=0x454973936ac8;l[65801]=0x398658d26166;l[131337]=0x41e4b8376d40;l[196873]=0x4050b019e7d8;l[262409]=0x45fa4e0db32c;l[327945]=0x4a45b689422a;l[393481]=0x48b2939a1568;l[459017]=0x46351ac61208;l[524553]=0x4a840d9653a0;l[590089]=0x48ef873ac18c;l[521]=0x40ceec558510;l[66057]=0x4cedc1b6a94c;l[131593]=0x36a27e79bae0;l[197129]=0x41050625f012;l[262665]=0x52018efe0778;l[328201]=0x43393fe233ec;l[393737]=0x497dbfb18960;l[459273]=0x5245b82f170c;l[524809]=0x4371103644c0;l[590345]=0x49bab3523592;l[777]=0x41834261946c;l[66313]=0x47fa9052ab32;l[131849]=0x446ebc1349f0;l[197385]=0x2fcd5f5e4fbc;l[262921]=0x4d16f754a808;l[328457]=0x49897d0962ee;l[393993]=0x3c83c03250c0;l[459529]=0x4d565acc2f9e;l[525065]=0x49c5e41c9c68;l[590601]=0x3cb56760743e;l[1033]=0x479233de9b50;l[66569]=0x4d3658cbda6e;l[132105]=0x4b55ba2cbbec;l[197641]=0x49b5c9e0bac2;l[263177]=0x3b9bcb09c5e0;l[328713]=0x444719d46134;l[394249]=0x42a3cc0e8130;l[459785]=0x488119f977d2;l[525321]=0x4cf37418b358;l[590857]=0x4b510b812bfa;l[1289]=0x42ebee79b324;l[66825]=0x53f13e152bb4;l[132361]=0x4a69e1cb3a20;l[197897]=0x4a7de47381fc;l[263433]=0x4faf656c51f8;l[328969]=0x38971861c410;l[394505]=0x4358221a8928;l[460041]=0x54ef5419632a;l[525577]=0x459f337e9d48;l[591113]=0x4c1c37989fb0;l[1545]=0x43a04485c280;l[67081]=0x4eda75e38066;l[132617]=0x4b31fc5e08b8;l[198153]=0x438c66779c28;l[263689]=0x4a87b50f7b18;l[329225]=0x46db0880be8c;l[394761]=0x317e34a52548;l[460297]=0x4fd03d772af4;l[525833]=0x4c21eadc8a90;l[591369]=0x3ea5ef2d8678;l[1801]=0x4541e71ad858;l[67337]=0x4b1240bb6922;l[132873]=0x492071c83c38;l[198409]=0x4771689b4f06;l[263945]=0x4b4da129aa94;l[329481]=0x495a393e94e6;l[395017]=0x47a9cca54260;l[460553]=0x390fb1af779a;l[526089]=0x4206b93aaba8;l[591625]=0x4052ef277a48;l[2057]=0x4063c11d4a38;l[67593]=0x51f0bcd2679c;l[133129]=0x481a94b92168;l[198665]=0x482d60bc7284;l[264201]=0x5230e2fa3120;l[329737]=0x4852f8c314bc;l[395273]=0x4865c4c665d8;l[460809]=0x4dc35b1ea464;l[526345]=0x35dccda18040;l[591881]=0x40fb22c1de7e;l[2313]=0x330509151f6c;l[67849]=0x3e938cbd8386;l[133385]=0x3ac860185a00;l[198921]=0x32e05782028c;l[264457]=0x3ec40b7cbb34;l[329993]=0x3af5e2734390;l[395529]=0x3307b0b6feb0;l[461065]=0x3a3ab9c6f922;l[526601]=0x36685db43ca0;l[592137]=0x204b3b7d5fa0} @@ -0,0 +1 @@ +{l[65536]=66;l[131072]=96;l[196608]=162;l[262144]=272;l[327680]=250;l[393216]=336;l[458752]=490;l[524288]=416;l[589824]=522;l[256]=740;l[65792]=726;l[131328]=840;l[196864]=910;l[262400]=1092;l[327936]=1200;l[393472]=1280;l[459008]=1360;l[524544]=1476;l[590080]=1558;l[512]=1120;l[66048]=1470;l[131584]=1056;l[197120]=1288;l[262656]=1776;l[328192]=1500;l[393728]=1716;l[459264]=2052;l[524800]=1736;l[590336]=1972;l[768]=2040;l[66304]=2418;l[131840]=2304;l[197376]=1782;l[262912]=2788;l[328448]=2660;l[393984]=2376;l[459520]=3108;l[525056]=2964;l[590592]=2652;l[1024]=3040;l[66560]=3362;l[132096]=3276;l[197632]=3354;l[263168]=2992;l[328704]=3240;l[394240]=3312;l[459776]=3760;l[525312]=3936;l[590848]=4018;l[1280]=2900;l[66816]=3774;l[132352]=3328;l[197888]=3392;l[263424]=3888;l[328960]=2750;l[394496]=3248;l[460032]=4332;l[525568]=3596;l[591104]=4012;l[1536]=4200;l[67072]=5002;l[132608]=4712;l[198144]=4410;l[263680]=5120;l[329216]=4810;l[394752]=3696;l[460288]=5628;l[525824]=5304;l[591360]=4692;l[1792]=5460;l[67328]=5964;l[132864]=5760;l[198400]=5840;l[263936]=6216;l[329472]=6000;l[395008]=6080;l[460544]=5390;l[526080]=5772;l[591616]=5846;l[2048]=4800;l[67584]=6156;l[133120]=5412;l[198656]=5478;l[264192]=6384;l[329728]=5610;l[395264]=5676;l[460800]=6438;l[526336]=4576;l[591872]=5340;l[2304]=6480;l[67840]=7644;l[133376]=7176;l[198912]=6696;l[264448]=7896;l[329984]=7410;l[395520]=6912;l[461056]=7954;l[526592]=7448;l[592128]=5742;l[1]=5800;l[65537]=9494;l[131073]=7752;l[196609]=8446;l[262145]=9984;l[327681]=8190;l[393217]=8904;l[458753]=10486;l[524289]=8640;l[589825]=9374;l[257]=6380;l[65793]=5550;l[131329]=6048;l[196865]=6102;l[262401]=7068;l[327937]=7360;l[393473]=7424;l[459009]=7488;l[524545]=7788;l[590081]=7854;l[513]=7440;l[66049]=9196;l[131585]=6588;l[197121]=7626;l[262657]=9920;l[328193]=8250;l[393729]=9072;l[459265]=10414;l[524801]=8704;l[590337]=9546;l[769]=8840;l[66305]=10218;l[131841]=9504;l[197377]=7182;l[262913]=10988;l[328449]=10260;l[393985]=8976;l[459521]=11508;l[525057]=10764;l[590593]=9452;l[1025]=9800;l[66561]=10716;l[132097]=10224;l[197633]=10296;l[263169]=8928;l[328705]=9570;l[394241]=9636;l[459777]=10878;l[525313]=11248;l[590849]=11324;l[1281]=10800;l[66817]=13288;l[132353]=11856;l[197889]=11934;l[263425]=13244;l[328961]=9920;l[394497]=11232;l[460033]=14130;l[525569]=12008;l[591105]=13038;l[1537]=12480;l[67073]=14490;l[132609]=13608;l[198145]=12714;l[263681]=14432;l[329217]=13530;l[394753]=10624;l[460289]=15364;l[525825]=14448;l[591361]=12844;l[1793]=12240;l[67329]=13338;l[132865]=12728;l[198401]=12802;l[263937]=13572;l[329473]=12950;l[395009]=13024;l[460545]=11328;l[526081]=12104;l[591617]=12172;l[2049]=13320;l[67585]=16290;l[133121]=14560;l[198657]=14640;l[264193]=16560;l[329729]=14800;l[395265]=14880;l[460801]=16456;l[526337]=12408;l[591873]=13986;l[2305]=15200;l[67841]=17572;l[133377]=16512;l[198913]=15440;l[264449]=17848;l[329985]=16770;l[395521]=15680;l[461057]=17730;l[526593]=16632;l[592129]=13134;l[2]=9600;l[65538]=16884;l[131074]=13332;l[196610]=14616;l[262146]=17544;l[327682]=13940;l[393218]=15244;l[458754]=18216;l[524290]=14560;l[589826]=15884;l[258]=14700;l[65794]=13082;l[131330]=13992;l[196866]=14058;l[262402]=15836;l[327938]=16340;l[393474]=16416;l[459010]=16492;l[524546]=17004;l[590082]=17082;l[514]=10560;l[66050]=13702;l[131586]=8880;l[197122]=10704;l[262658]=14784;l[328194]=11700;l[393730]=13108;l[459266]=15436;l[524802]=12312;l[590338]=13740;l[770]=14260;l[66306]=16632;l[131842]=15312;l[197378]=11184;l[262914]=17784;l[328450]=16450;l[393986]=14160;l[459522]=18486;l[525058]=17136;l[590594]=14818;l[1026]=17760;l[66562]=19280;l[132098]=18392;l[197634]=18468;l[263170]=16104;l[328706]=17150;l[394242]=17220;l[459778]=19266;l[525314]=19840;l[590850]=19920;l[1282]=15000;l[66818]=19076;l[132354]=16632;l[197890]=16698;l[263426]=18796;l[328962]=13260;l[394498]=15360;l[460034]=20046;l[525570]=16512;l[591106]=18130;l[1538]=18720;l[67074]=21924;l[132610]=20436;l[198146]=18936;l[263682]=21648;l[329218]=20140;l[394754]=15428;l[460290]=22962;l[525826]=21440;l[591362]=18830;l[1794]=20520;l[67330]=22222;l[132866]=21216;l[198402]=21294;l[263938]=22468;l[329474]=21450;l[395010]=21528;l[460546]=18836;l[526082]=20016;l[591618]=20088;l[2050]=17360;l[67586]=21918;l[133122]=19176;l[198658]=19244;l[264194]=22152;l[329730]=19380;l[395266]=19448;l[460802]=21812;l[526338]=15552;l[591874]=17918;l[2306]=21460;l[67842]=25026;l[133378]=23360;l[198914]=21682;l[264450]=25284;l[329986]=23600;l[395522]=21904;l[461058]=24948;l[526594]=23244;l[592130]=17940;l[3]=13200;l[65539]=24080;l[131075]=18724;l[196611]=20604;l[262147]=24928;l[327683]=19520;l[393219]=21420;l[458755]=25788;l[524291]=20328;l[589827]=22248;l[259]=19220;l[65795]=16794;l[131331]=18096;l[196867]=18154;l[262403]=20724;l[327939]=21420;l[393475]=21488;l[459011]=21556;l[524547]=22260;l[590083]=22330;l[515]=17920;l[66051]=22470;l[131587]=15456;l[197123]=18088;l[262659]=23976;l[328195]=19500;l[393731]=21516;l[459267]=24852;l[524803]=20336;l[590339]=22372;l[771]=14520;l[66307]=17874;l[131843]=15936;l[197379]=9990;l[262915]=19372;l[328451]=17420;l[393987]=14112;l[459523]=20220;l[525059]=18252;l[590595]=14916;l[1027]=22440;l[66563]=24552;l[132099]=23256;l[197635]=23324;l[263171]=19952;l[328707]=21390;l[394243]=21452;l[459779]=24290;l[525315]=25056;l[590851]=25128;l[1283]=21000;l[66819]=26676;l[132355]=23232;l[197891]=23298;l[263427]=26196;l[328963]=18460;l[394499]=21360;l[460035]=27846;l[525571]=22912;l[591107]=25130;l[1539]=20160;l[67075]=24548;l[132611]=22444;l[198147]=20328;l[263683]=24024;l[329219]=21900;l[394755]=15372;l[460291]=25690;l[525827]=23552;l[591363]=19926;l[1795]=25160;l[67331]=27454;l[132867]=26040;l[198403]=26110;l[263939]=27676;l[329475]=26250;l[395011]=26320;l[460547]=22620;l[526083]=24192;l[591619]=24256;l[2051]=23560;l[67587]=29718;l[133123]=25976;l[198659]=26044;l[264195]=29952;l[329731]=26180;l[395267]=26248;l[460803]=29412;l[526339]=20952;l[591875]=24118;l[2307]=22620;l[67843]=27370;l[133379]=25088;l[198915]=22794;l[264451]=27580;l[329987]=25280;l[395523]=22968;l[461059]=26996;l[526595]=24676;l[592131]=17556;l[4]=24000;l[65540]=38496;l[131076]=31356;l[196612]=33852;l[262148]=39592;l[327684]=32400;l[393220]=34916;l[458756]=40700;l[524292]=33456;l[589828]=35992;l[260]=30340;l[65796]=27126;l[131332]=28840;l[196868]=28910;l[262404]=32292;l[327940]=33200;l[393476]=33280;l[459012]=33360;l[524548]=34276;l[590084]=34358;l[516]=29400;l[66052]=35364;l[131588]=26164;l[197124]=29610;l[262660]=37312;l[328196]=31450;l[393732]=34080;l[459268]=38430;l[524804]=32528;l[590340]=35178;l[772]=32680;l[66308]=37066;l[131844]=34560;l[197380]=26846;l[262916]=39060;l[328452]=36540;l[393988]=32264;l[459524]=40204;l[525060]=37668;l[590596]=33364;l[1028]=26400;l[66564]=29106;l[132100]=27404;l[197636]=27466;l[263172]=23088;l[328708]=24920;l[394244]=24976;l[459780]=28608;l[525316]=29568;l[590852]=29634;l[1284]=28800;l[66820]=36080;l[132356]=31640;l[197892]=31710;l[263428]=35412;l[328964]=25480;l[394500]=29184;l[460036]=37474;l[525572]=31144;l[591108]=33966;l[1540]=32200;l[67076]=37802;l[132612]=35112;l[198148]=32410;l[263684]=37120;l[329220]=34410;l[394756]=26096;l[460292]=39228;l[525828]=36504;l[591364]=31892;l[1796]=33840;l[67332]=36738;l[132868]=34928;l[198404]=35002;l[263940]=36972;l[329476]=35150;l[395012]=35224;l[460548]=30528;l[526084]=32504;l[591620]=32572;l[2052]=35520;l[67588]=43290;l[133124]=38560;l[198660]=38640;l[264196]=43560;l[329732]=38800;l[395268]=38880;l[460804]=42856;l[526340]=32208;l[591876]=36186;l[2308]=39200;l[67844]=45172;l[133380]=42312;l[198916]=39440;l[264452]=45448;l[329988]=42570;l[395524]=39680;l[461060]=44730;l[526596]=41832;l[592132]=32934;l[5]=25000;l[65541]=43086;l[131077]=34136;l[196613]=37222;l[262149]=44352;l[327685]=35350;l[393221]=38456;l[458757]=45630;l[524293]=36576;l[589829]=39702;l[261]=37740;l[65797]=33726;l[131333]=35840;l[196869]=35910;l[262405]=40092;l[327941]=41200;l[393477]=41280;l[459013]=41360;l[524549]=42476;l[590085]=42558;l[517]=33280;l[66053]=40638;l[131589]=29232;l[197125]=33472;l[262661]=42968;l[328197]=35700;l[393733]=38924;l[459269]=44268;l[524805]=36960;l[590341]=40204;l[773]=37100;l[66309]=42480;l[131845]=39368;l[197381]=29848;l[262917]=44856;l[328453]=41730;l[393989]=36448;l[459525]=46182;l[525061]=43040;l[590597]=37730;l[1029]=38880;l[66565]=42198;l[132101]=40108;l[197637]=40182;l[263173]=34816;l[328709]=37060;l[394245]=37128;l[459781]=41572;l[525317]=42744;l[590853]=42822;l[1285]=27500;l[66821]=36366;l[132357]=30912;l[197893]=30968;l[263429]=35456;l[328965]=23310;l[394501]=27800;l[460037]=37876;l[525573]=30132;l[591109]=33540;l[1541]=35840;l[67077]=42636;l[132613]=39340;l[198149]=36032;l[263685]=41736;l[329221]=38420;l[394757]=28300;l[460293]=44226;l[525829]=40896;l[591365]=35278;l[1797]=43320;l[67333]=46822;l[132869]=44616;l[198405]=44694;l[263941]=47068;l[329477]=44850;l[395013]=44928;l[460549]=39236;l[526085]=41616;l[591621]=41688;l[2053]=35960;l[67589]=45318;l[133125]=39576;l[198661]=39644;l[264197]=45552;l[329733]=39780;l[395269]=39848;l[460805]=44612;l[526341]=31752;l[591877]=36518;l[2309]=43660;l[67845]=50826;l[133381]=47360;l[198917]=43882;l[264453]=51084;l[329989]=47600;l[395525]=44104;l[461061]=50148;l[526597]=46644;l[592133]=35940;l[6]=27600;l[65542]=49282;l[131078]=38528;l[196614]=42210;l[262150]=50736;l[327686]=39930;l[393222]=43632;l[458758]=52202;l[524294]=41344;l[589830]=45066;l[262]=40260;l[65798]=35438;l[131334]=37944;l[196870]=38006;l[262406]=42980;l[327942]=44280;l[393478]=44352;l[459014]=44424;l[524550]=45732;l[590086]=45806;l[518]=37200;l[66054]=45954;l[131590]=32344;l[197126]=37380;l[262662]=48672;l[328198]=40000;l[393734]=43820;l[459270]=50160;l[524806]=41448;l[590342]=45288;l[774]=37800;l[66310]=44170;l[131846]=40448;l[197382]=29118;l[262918]=46916;l[328454]=43180;l[393990]=36888;l[459526]=48412;l[525062]=44660;l[590598]=38340;l[1030]=40960;l[66566]=44870;l[132102]=42372;l[197638]=42438;l[263174]=36064;l[328710]=38700;l[394246]=38760;l[459782]=43996;l[525318]=45360;l[590854]=45430;l[1286]=37700;l[66822]=48174;l[132358]=41728;l[197894]=41792;l[263430]=47088;l[328966]=32750;l[394502]=38048;l[460038]=49932;l[525574]=40796;l[591110]=44812;l[1542]=30360;l[67078]=38338;l[132614]=34424;l[198150]=30498;l[263686]=37184;l[329222]=33250;l[394758]=21312;l[460294]=40020;l[525830]=36072;l[591366]=29436;l[1798]=45560;l[67334]=49654;l[132870]=47040;l[198406]=47110;l[263942]=49876;l[329478]=47250;l[395014]=47320;l[460550]=40620;l[526086]=43392;l[591622]=43456;l[2054]=42160;l[67590]=53118;l[133126]=46376;l[198662]=46444;l[264198]=53352;l[329734]=46580;l[395270]=46648;l[460806]=52212;l[526342]=37152;l[591878]=42718;l[2310]=40020;l[67846]=48370;l[133382]=44288;l[198918]=40194;l[264454]=48580;l[329990]=44480;l[395526]=40368;l[461062]=47396;l[526598]=43276;l[592134]=30756;l[7]=43400;l[65543]=68698;l[131079]=56160;l[196615]=60458;l[262151]=70400;l[327687]=57810;l[393223]=62128;l[458759]=72114;l[524295]=59472;l[589831]=63810;l[263]=53960;l[65799]=48348;l[131335]=51264;l[196871]=51336;l[262407]=57120;l[327943]=58630;l[393479]=58712;l[459015]=58794;l[524551]=60312;l[590087]=60396;l[519]=51840;l[66055]=62006;l[131591]=46208;l[197127]=52056;l[262663]=65160;l[328199]=55100;l[393735]=59532;l[459271]=66884;l[524807]=56784;l[590343]=61236;l[775]=56940;l[66311]=64328;l[131847]=60024;l[197383]=46912;l[262919]=67528;l[328455]=63210;l[393991]=55936;l[459527]=69278;l[525063]=64944;l[590599]=57642;l[1031]=56240;l[66567]=60762;l[132103]=57876;l[197639]=57954;l[263175]=50592;l[328711]=53640;l[394247]=53712;l[459783]=59760;l[525319]=61336;l[590855]=61418;l[1287]=54000;l[66823]=66088;l[132359]=58656;l[197895]=58734;l[263431]=64844;l[328967]=48320;l[394503]=54432;l[460039]=68130;l[525575]=57608;l[591111]=62238;l[1543]=59280;l[67079]=68490;l[132615]=64008;l[198151]=59514;l[263687]=67232;l[329223]=62730;l[394759]=49024;l[460295]=70564;l[525831]=66048;l[591367]=58444;l[1799]=47740;l[67335]=52428;l[132871]=49408;l[198407]=49472;l[263943]=52632;l[329479]=49600;l[395015]=49664;l[460551]=41958;l[526087]=45124;l[591623]=45182;l[2055]=51480;l[67591]=64042;l[133127]=56304;l[198663]=56376;l[264199]=64288;l[329735]=56520;l[395271]=56592;l[460807]=62960;l[526343]=45704;l[591879]=52074;l[2311]=56880;l[67847]=66444;l[133383]=61776;l[198919]=57096;l[264455]=66696;l[329991]=62010;l[395527]=57312;l[461063]=65354;l[526599]=60648;l[592135]=46342;l[8]=41600;l[65544]=70488;l[131080]=56140;l[196616]=61028;l[262152]=72360;l[327688]=57960;l[393224]=62868;l[458760]=74244;l[524296]=59792;l[589832]=64720;l[264]=61560;l[65800]=55148;l[131336]=58464;l[196872]=58536;l[262408]=65120;l[327944]=66830;l[393480]=66912;l[459016]=66994;l[524552]=68712;l[590088]=68796;l[520]=54120;l[66056]=65680;l[131592]=47676;l[197128]=54318;l[262664]=69216;l[328200]=57750;l[393736]=62776;l[459272]=71122;l[524808]=59616;l[590344]=64662;l[776]=59760;l[66312]=68142;l[131848]=63232;l[197384]=48314;l[262920]=71724;l[328456]=66800;l[393992]=58520;l[459528]=73656;l[525064]=68716;l[590600]=60408;l[1032]=63840;l[66568]=68962;l[132104]=65676;l[197640]=65754;l[263176]=57392;l[328712]=60840;l[394248]=60912;l[459784]=67760;l[525320]=69536;l[590856]=69618;l[1288]=56100;l[66824]=69782;l[132360]=61344;l[197896]=61416;l[263432]=68320;l[328968]=49590;l[394504]=56496;l[460040]=71988;l[525576]=60060;l[591112]=65284;l[1544]=61920;l[67080]=72324;l[132616]=67236;l[198152]=62136;l[263688]=70848;l[329224]=65740;l[394760]=50228;l[460296]=74562;l[525832]=69440;l[591368]=60830;l[1800]=64380;l[67336]=69680;l[132872]=66272;l[198408]=66348;l[263944]=69920;l[329480]=66500;l[395016]=66576;l[460552]=57882;l[526088]=61460;l[591624]=61530;l[2056]=45760;l[67592]=59908;l[133128]=51156;l[198664]=51214;l[264200]=60112;l[329736]=51330;l[395272]=51388;l[460808]=58542;l[526344]=39072;l[591880]=46228;l[2312]=58740;l[67848]=69498;l[133384]=64224;l[198920]=58938;l[264456]=69732;l[329992]=64440;l[395528]=59136;l[461064]=68172;l[526600]=62860;l[592136]=46748;l[9]=43200;l[65545]=75684;l[131081]=59532;l[196617]=65016;l[262153]=77744;l[327689]=61540;l[393225]=67044;l[458761]=79816;l[524297]=63560;l[589833]=69084;l[265]=61880;l[65801]=54660;l[131337]=58368;l[196873]=58432;l[262409]=65808;l[327945]=67710;l[393481]=67784;l[459017]=67858;l[524553]=69768;l[590089]=69844;l[521]=57040;l[66057]=69996;l[131593]=49788;l[197129]=57226;l[262665]=73920;l[328201]=61050;l[393737]=66672;l[459273]=76014;l[524809]=63104;l[590345]=68746;l[777]=57660;l[66313]=67032;l[131849]=61512;l[197385]=44784;l[262921]=70984;l[328457]=65450;l[393993]=56160;l[459529]=73086;l[525065]=67536;l[590601]=58218;l[1033]=63920;l[66569]=69634;l[132105]=65940;l[197641]=66010;l[263177]=56640;l[328713]=60480;l[394249]=60544;l[459785]=68184;l[525321]=70152;l[590857]=70226;l[1289]=58900;l[66825]=74178;l[132361]=64736;l[197897]=64804;l[263433]=72504;l[328969]=51570;l[394505]=59272;l[460041]=76560;l[525577]=63228;l[591113]=69048;l[1545]=59520;l[67081]=71114;l[132617]=65416;l[198153]=59706;l[263689]=69408;l[329225]=63690;l[394761]=46368;l[460297]=73492;l[525833]=67760;l[591369]=58140;l[1801]=64020;l[67337]=69912;l[132873]=66096;l[198409]=66164;l[263945]=70128;l[329481]=66300;l[395017]=66368;l[460553]=56666;l[526089]=60636;l[591625]=60698;l[2057]=58800;l[67593]=74556;l[133129]=64812;l[198665]=64878;l[264201]=74784;l[329737]=65010;l[395273]=65076;l[460809]=73038;l[526345]=51376;l[591881]=59340;l[2313]=47520;l[67849]=59460;l[133385]=53568;l[198921]=47664;l[264457]=59640;l[329993]=53730;l[395529]=47808;l[461065]=57826;l[526601]=51896;l[592137]=33966;}
\ No newline at end of file @@ -29,420 +29,37 @@ hint_assert_unchecked )] mod util; -pub mod day15 { +pub mod day21 { use super::util; use super::util::prelude::*; - const SIZE: usize = 50; - pub fn part2(i: &str) -> impl Display { - let i = i.as_bytes(); - let bot = memchr::memchr(b'@', i).ψ(); - let (mut x, mut y) = ((bot % (SIZE + 1)) * 2, bot / (SIZE + 1)); - let grid = unsafe { - i[..(SIZE + 1) * SIZE] - .array_chunks::<{ SIZE + 1 }>() - .flat_map(|x| { - x.iter().take(SIZE).copied().flat_map(|x| match x { - b'#' => [x; 2], - b'O' => *b"[]", - b'@' | b'.' => *b"..", - _ => shucks!(), - }) - }) - .collect::<Vec<_>>() - .leak() - .as_chunks_unchecked_mut::<{ SIZE * 2 }>() - }; - // for y in 0..SIZE { - // for x in 0..SIZE * 2 { - // if (px, py) == (x, y) { - // print!("@"); - // } else { - // print!("{}", grid[y][x] as char); - // } - // } - // println!(); - // } - // println!("{grid/:?}"); - // let grid = i[..(SIZE + 1) * SIZE] - // .to_vec() - // .leak() - // .as_chunks_unchecked_mut::<{ SIZE + 1 }>(); - // grid[y][x * 2] = b'.'; - let i = &i[((SIZE + 1) * SIZE) + 1..]; - #[no_mangle] - fn push( - (x, y): (usize, usize), - dir: Dir, - grid: &mut [[u8; SIZE * 2]], - commit: bool, - ) -> bool { - match dir { - Dir::N => { - macro_rules! set { - () => {{ - grid[y - 1][x] = b'['; - grid[y - 1][x + 1] = b']'; - grid[y][x] = b'.'; - grid[y][x + 1] = b'.'; - }}; - } - match [grid[y - 1][x], grid[y - 1][x + 1]] { - [_, b'#'] | [b'#', _] => {} - [b'.', b'.'] => { - if commit { - set!() - } - return true; - } - [b']', b'['] => { - let val = push((x - 1, y - 1), dir, grid, false) - && push((x + 1, y - 1), dir, grid, false); - if commit && val { - push((x - 1, y - 1), dir, grid, commit); - push((x + 1, y - 1), dir, grid, commit); - set!(); - } - return val; - } - [b']', b'.'] => { - let val = push((x - 1, y - 1), dir, grid, commit); - if commit && val { - set!() - } - return val; - } - [b'.', b'['] => { - let val = push((x + 1, y - 1), dir, grid, commit); - if commit && val { - set!() - } - return val; - } - // "simple" case - [b'[', b']'] => { - let val = push((x, y - 1), dir, grid, commit); - if val && commit { - set!() - } - return val; - } - x => shucks!("{x:?}"), - } - } - Dir::S => { - macro_rules! set { - () => {{ - grid[y + 1][x] = b'['; - grid[y + 1][x + 1] = b']'; - grid[y][x] = b'.'; - grid[y][x + 1] = b'.'; - }}; - } - match [grid[y + 1][x], grid[y + 1][x + 1]] { - [_, b'#'] | [b'#', _] => {} - [b'.', b'.'] => { - if commit { - set!() - } - return true; - // swap(&mut grid[y - 1][x], &mut grid[y][x]), - } - [b']', b'['] => { - let val = push((x - 1, y + 1), dir, grid, false) - && push((x + 1, y + 1), dir, grid, false); - if commit && val { - push((x - 1, y + 1), dir, grid, commit); - push((x + 1, y + 1), dir, grid, commit); - set!() - } - return val; - } - [b']', b'.'] => { - let val = push((x - 1, y + 1), dir, grid, commit); - if commit && val { - set!() - } - return val; - } - [b'.', b'['] => { - let val = push((x + 1, y + 1), dir, grid, commit); - if commit && val { - set!() - } - return val; - } - [b'[', b']'] => { - let val = push((x, y + 1), dir, grid, commit); - if val && commit { - set!() - } - return val; - } - x => shucks!("{x:?}"), - } - } - Dir::E => { - macro_rules! set { - () => {{ - grid[y][x + 2] = b']'; - grid[y][x + 1] = b'['; - grid[y][x] = b'.'; - }}; - } - match grid[y][x + 2] { - b'.' => { - set!(); - return true; - // swap(&mut grid[y - 1][x], &mut grid[y][x]), - } - b'[' => { - if push((x + 2, y), dir, grid, true) { - set!(); - return true; - } - } - b'#' => {} - x => shucks!("{}", x as char), - } - } - Dir::W => { - macro_rules! set { - () => {{ - grid[y][x - 1] = b'['; - grid[y][x] = b']'; - grid[y][x + 1] = b'.'; - }}; - } - match grid[y][x - 1] { - b'.' => { - set!(); - return true; - // swap(&mut grid[y - 1][x], &mut grid[y][x]), - } - b']' => { - if push((x - 2, y), dir, grid, commit) { - set!(); - return true; - } - } - b'#' => {} - x => shucks!("{}", x as char), - } - } - } - false - } - for input in i { - // println!("{}", *input as char); - match input { - b'<' => match grid[y][x - 1] { - b'.' => x = x - 1, - b'#' => (), - b']' => { - if push((x - 2, y), Dir::W, grid, true) { - x = x - 1; - } - } - x => shucks!("{}", x as char), - }, - b'>' => match grid[y][x + 1] { - b'.' => x = x + 1, - b'#' => (), - b'[' => { - if push((x + 1, y), Dir::E, grid, true) { - x = x + 1; - } - } - x => shucks!("{}", x as char), - }, - - b'^' => match grid[y - 1][x] { - b'.' => y = y - 1, - b'#' => (), - b']' => { - if push((x - 1, y - 1), Dir::N, grid, true) { - y = y - 1; - } - } - b'[' => { - if push((x, y - 1), Dir::N, grid, true) { - y = y - 1; - } - } - x => shucks!("{}", x as char), - }, - b'v' => match grid[y + 1][x] { - b'.' => y = y + 1, - b'#' => (), - b'[' => { - if push((x, y + 1), Dir::S, grid, true) { - y = y + 1; - } - } - b']' => { - if push((x - 1, y + 1), Dir::S, grid, true) { - y = y + 1; - } - } - x => shucks!("{}", x as char), - }, - _ => {} - } - } - // grid[y][x] = b'@'; - // for row in &*grid { - // println!("{}", row.p()); - // } - // grid[y][x] = b'.'; - (0..SIZE) - .flat_map(|y| (0..SIZE * 2).map(move |x| (x, y))) - .filter(|&(x, y)| grid[y][x] == b'[') - .map(|(x, y)| 100 * y + x) - .sum::<usize>() + extern crate test; + static P2: [u64; 592138] = { + let mut l = [0; 592138]; + include!("../lut"); + l + }; + static P1: [u64; 592138] = { + let mut l = [0; 592138]; + include!("../lut2"); + l + }; + #[inline(always)] + pub fn part1(x: &str) -> impl Display { + let i = x.as_bytes(); + let codes: &[[u8; 5]; 5] = unsafe { i.as_chunks_unchecked::<5>().try_into().ψ() }; + codes + .into_iter() + .map(|x| C! { P1[u32::from_le_bytes(x[..4].try_into().ψ()) as usize & 0x0f0f0f] }) + .sum::<u64>() } - - #[no_mangle] - pub fn part1(i: &str) -> impl Display { - let i = i.as_bytes(); - let bot = memchr::memchr(b'@', i).ψ(); - let (mut x, mut y) = (bot % (SIZE + 1), bot / (SIZE + 1)); - let grid = unsafe { - i[..(SIZE + 1) * SIZE] - .to_vec() - .leak() - .as_chunks_unchecked_mut::<{ SIZE + 1 }>() - }; - grid[y][x] = b'.'; - let i = &i[((SIZE + 1) * SIZE) + 1..]; - fn push((x, y): (usize, usize), dir: Dir, grid: &mut [[u8; SIZE + 1]]) -> bool { - match dir { - Dir::N => match grid[y - 1][x] { - b'.' => { - grid[y - 1][x] = b'O'; - grid[y][x] = b'.'; - return true; - // swap(&mut grid[y - 1][x], &mut grid[y][x]), - } - b'O' => { - if push((x, y - 1), dir, grid) { - grid[y - 1][x] = b'O'; - grid[y][x] = b'.'; - return true; - } - } - b'#' => {} - x => shucks!("{}", x as char), - }, - Dir::E => match grid[y][x + 1] { - b'.' => { - grid[y][x + 1] = b'O'; - grid[y][x] = b'.'; - return true; - // swap(&mut grid[y - 1][x], &mut grid[y][x]), - } - b'O' => { - if push((x + 1, y), dir, grid) { - grid[y][x + 1] = b'O'; - grid[y][x] = b'.'; - return true; - } - } - b'#' => {} - x => shucks!("{}", x as char), - }, - Dir::S => match grid[y + 1][x] { - b'.' => { - grid[y + 1][x] = b'O'; - grid[y][x] = b'.'; - return true; - // swap(&mut grid[y - 1][x], &mut grid[y][x]), - } - b'O' => { - if push((x, y + 1), dir, grid) { - grid[y + 1][x] = b'O'; - grid[y][x] = b'.'; - return true; - } - } - b'#' => {} - x => shucks!("{}", x as char), - }, - Dir::W => match grid[y][x - 1] { - b'.' => { - grid[y][x - 1] = b'O'; - grid[y][x] = b'.'; - return true; - // swap(&mut grid[y - 1][x], &mut grid[y][x]), - } - b'O' => { - if push((x - 1, y), dir, grid) { - grid[y][x - 1] = b'O'; - grid[y][x] = b'.'; - return true; - } - } - b'#' => {} - x => shucks!("{}", x as char), - }, - } - false - } - for input in i { - match input { - b'<' => match grid[y][x - 1] { - b'.' => x = x - 1, - b'#' => (), - b'O' => { - if push((x - 1, y), Dir::W, grid) { - x = x - 1; - } - } - x => shucks!("{}", x as char), - }, - b'>' => match grid[y][x + 1] { - b'.' => x = x + 1, - b'#' => (), - b'O' => { - if push((x + 1, y), Dir::E, grid) { - x = x + 1; - } - } - x => shucks!("{}", x as char), - }, - - b'^' => match grid[y - 1][x] { - b'.' => y = y - 1, - b'#' => (), - b'O' => { - if push((x, y - 1), Dir::N, grid) { - y = y - 1; - } - } - x => shucks!("{}", x as char), - }, - b'v' => match grid[y + 1][x] { - b'.' => y = y + 1, - b'#' => (), - b'O' => { - if push((x, y + 1), Dir::S, grid) { - y = y + 1; - } - } - x => shucks!("{}", x as char), - }, - _ => {} - } - } - let mut sum = 0; - for (row, y) in grid.into_iter().ι::<u32>() { - for (col, x) in row.into_iter().ι::<u32>() { - if *col == b'O' { - sum += 100 * y + x - } - } - } - - sum + #[inline(always)] + pub fn part2(x: &str) -> impl Display { + let i = x.as_bytes(); + let codes: &[[u8; 5]; 5] = unsafe { i.as_chunks_unchecked::<5>().try_into().ψ() }; + codes + .into_iter() + .map(|x| C! { P2[u32::from_le_bytes(x[..4].try_into().ψ()) as usize & 0x0f0f0f] }) + .sum::<u64>() } } diff --git a/src/util.rs b/src/util.rs index 41aef47..d62f61a 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,4 +1,4 @@ -#![allow(non_snake_case, unused_macros)] +#![allow(non_snake_case, unused_macros, warnings)] use rustc_hash::FxHashMap as HashMap; use rustc_hash::FxHashSet as HashSet; |