summaryrefslogtreecommitdiff
path: root/2016
diff options
context:
space:
mode:
authorJustin Wernick <justin@worthe-it.co.za>2022-04-19 20:22:56 +0200
committerJustin Wernick <justin@worthe-it.co.za>2022-04-19 20:23:15 +0200
commit174772b5b8d9f5bf5e3c8e8152adfd89f0e83f6b (patch)
treea003b748ee939b30a2bcd3caf2378228baa304c1 /2016
parentfd75b3fb95ad049b0025cb8fc0b3459b8f872d61 (diff)
Refile for merging repos
Diffstat (limited to '2016')
-rw-r--r--2016/.gitignore1
-rw-r--r--2016/aoc1/Cargo.lock4
-rw-r--r--2016/aoc1/Cargo.toml6
-rw-r--r--2016/aoc1/input.txt1
-rw-r--r--2016/aoc1/src/main.rs98
-rw-r--r--2016/aoc10/Cargo.lock98
-rw-r--r--2016/aoc10/Cargo.toml7
-rw-r--r--2016/aoc10/input.txt231
-rw-r--r--2016/aoc10/src/main.rs155
-rw-r--r--2016/aoc11/Cargo.lock4
-rw-r--r--2016/aoc11/Cargo.toml7
-rw-r--r--2016/aoc11/input.txt4
-rw-r--r--2016/aoc11/src/main.rs166
-rw-r--r--2016/aoc12/Cargo.lock98
-rw-r--r--2016/aoc12/Cargo.toml7
-rw-r--r--2016/aoc12/input.txt23
-rw-r--r--2016/aoc12/src/main.rs136
-rw-r--r--2016/aoc13/Cargo.lock98
-rw-r--r--2016/aoc13/Cargo.toml7
-rw-r--r--2016/aoc13/src/main.rs64
-rw-r--r--2016/aoc14/Cargo.lock14
-rw-r--r--2016/aoc14/Cargo.toml7
-rw-r--r--2016/aoc14/src/main.rs84
-rw-r--r--2016/aoc15/Cargo.lock98
-rw-r--r--2016/aoc15/Cargo.toml7
-rw-r--r--2016/aoc15/input.txt7
-rw-r--r--2016/aoc15/src/main.rs35
-rw-r--r--2016/aoc16/Cargo.lock4
-rw-r--r--2016/aoc16/Cargo.toml6
-rw-r--r--2016/aoc16/src/main.rs68
-rw-r--r--2016/aoc17/Cargo.lock14
-rw-r--r--2016/aoc17/Cargo.toml7
-rw-r--r--2016/aoc17/src/main.rs98
-rw-r--r--2016/aoc18/Cargo.lock4
-rw-r--r--2016/aoc18/Cargo.toml6
-rw-r--r--2016/aoc18/src/main.rs20
-rw-r--r--2016/aoc19/Cargo.lock4
-rw-r--r--2016/aoc19/Cargo.toml6
-rw-r--r--2016/aoc19/src/main.rs42
-rw-r--r--2016/aoc2/Cargo.lock4
-rw-r--r--2016/aoc2/Cargo.toml6
-rw-r--r--2016/aoc2/input.txt5
-rw-r--r--2016/aoc2/src/main.rs61
-rw-r--r--2016/aoc20/Cargo.lock4
-rw-r--r--2016/aoc20/Cargo.toml6
-rw-r--r--2016/aoc20/input.txt1104
-rw-r--r--2016/aoc20/src/main.rs114
-rw-r--r--2016/aoc21/Cargo.lock98
-rw-r--r--2016/aoc21/Cargo.toml7
-rw-r--r--2016/aoc21/input.txt100
-rw-r--r--2016/aoc21/src/main.rs233
-rw-r--r--2016/aoc22/Cargo.lock98
-rw-r--r--2016/aoc22/Cargo.toml7
-rw-r--r--2016/aoc22/input.txt1017
-rw-r--r--2016/aoc22/src/main.rs198
-rw-r--r--2016/aoc23/Cargo.lock98
-rw-r--r--2016/aoc23/Cargo.toml7
-rw-r--r--2016/aoc23/input.txt26
-rw-r--r--2016/aoc23/src/main.rs247
-rw-r--r--2016/aoc24/Cargo.lock4
-rw-r--r--2016/aoc24/Cargo.toml6
-rw-r--r--2016/aoc24/input.txt39
-rw-r--r--2016/aoc24/src/main.rs135
-rw-r--r--2016/aoc25/Cargo.lock98
-rw-r--r--2016/aoc25/Cargo.toml7
-rw-r--r--2016/aoc25/input.txt30
-rw-r--r--2016/aoc25/src/main.rs284
-rw-r--r--2016/aoc3/Cargo.lock4
-rw-r--r--2016/aoc3/Cargo.toml6
-rw-r--r--2016/aoc3/input.txt1734
-rw-r--r--2016/aoc3/src/main.rs64
-rw-r--r--2016/aoc4/Cargo.lock4
-rw-r--r--2016/aoc4/Cargo.toml6
-rw-r--r--2016/aoc4/input.txt1091
-rw-r--r--2016/aoc4/src/main.rs83
-rw-r--r--2016/aoc5/Cargo.lock12
-rw-r--r--2016/aoc5/Cargo.toml7
-rw-r--r--2016/aoc5/src/main.rs49
-rw-r--r--2016/aoc6/Cargo.lock4
-rw-r--r--2016/aoc6/Cargo.toml6
-rw-r--r--2016/aoc6/input.txt624
-rw-r--r--2016/aoc6/src/main.rs27
-rw-r--r--2016/aoc6/test_input.txt16
-rw-r--r--2016/aoc7/Cargo.lock4
-rw-r--r--2016/aoc7/Cargo.toml6
-rw-r--r--2016/aoc7/input.txt2000
-rw-r--r--2016/aoc7/src/main.rs95
-rw-r--r--2016/aoc7/test_input.txt4
-rw-r--r--2016/aoc8/Cargo.lock98
-rw-r--r--2016/aoc8/Cargo.toml7
-rw-r--r--2016/aoc8/input.txt194
-rw-r--r--2016/aoc8/src/main.rs117
-rw-r--r--2016/aoc9/Cargo.lock98
-rw-r--r--2016/aoc9/Cargo.toml7
-rw-r--r--2016/aoc9/input.txt1
-rw-r--r--2016/aoc9/src/main.rs143
96 files changed, 12300 insertions, 0 deletions
diff --git a/2016/.gitignore b/2016/.gitignore
new file mode 100644
index 0000000..9f97022
--- /dev/null
+++ b/2016/.gitignore
@@ -0,0 +1 @@
+target/ \ No newline at end of file
diff --git a/2016/aoc1/Cargo.lock b/2016/aoc1/Cargo.lock
new file mode 100644
index 0000000..b771521
--- /dev/null
+++ b/2016/aoc1/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc1"
+version = "0.1.0"
+
diff --git a/2016/aoc1/Cargo.toml b/2016/aoc1/Cargo.toml
new file mode 100644
index 0000000..096aad6
--- /dev/null
+++ b/2016/aoc1/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc1"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
diff --git a/2016/aoc1/input.txt b/2016/aoc1/input.txt
new file mode 100644
index 0000000..456904d
--- /dev/null
+++ b/2016/aoc1/input.txt
@@ -0,0 +1 @@
+R4, R5, L5, L5, L3, R2, R1, R1, L5, R5, R2, L1, L3, L4, R3, L1, L1, R2, R3, R3, R1, L3, L5, R3, R1, L1, R1, R2, L1, L4, L5, R4, R2, L192, R5, L2, R53, R1, L5, R73, R5, L5, R186, L3, L2, R1, R3, L3, L3, R1, L4, L2, R3, L5, R4, R3, R1, L1, R5, R2, R1, R1, R1, R3, R2, L1, R5, R1, L5, R2, L2, L4, R3, L1, R4, L5, R4, R3, L5, L3, R4, R2, L5, L5, R2, R3, R5, R4, R2, R1, L1, L5, L2, L3, L4, L5, L4, L5, L1, R3, R4, R5, R3, L5, L4, L3, L1, L4, R2, R5, R5, R4, L2, L4, R3, R1, L2, R5, L5, R1, R1, L1, L5, L5, L2, L1, R5, R2, L4, L1, R4, R3, L3, R1, R5, L1, L4, R2, L3, R5, R3, R1, L3
diff --git a/2016/aoc1/src/main.rs b/2016/aoc1/src/main.rs
new file mode 100644
index 0000000..e9b4138
--- /dev/null
+++ b/2016/aoc1/src/main.rs
@@ -0,0 +1,98 @@
+use std::io::Read;
+use std::fs::File;
+
+#[derive(Clone, Copy, Debug)]
+enum Direction {
+ Up,
+ Left,
+ Down,
+ Right
+}
+
+impl Direction {
+ fn turn_right(self) -> Direction {
+ match self {
+ Direction::Up => Direction::Right,
+ Direction::Right => Direction::Down,
+ Direction::Down => Direction::Left,
+ Direction::Left => Direction::Up
+ }
+ }
+ fn turn_left(self) -> Direction {
+ //not an ambiturner
+ self.turn_right().turn_right().turn_right()
+ }
+
+ fn as_vector(self, dist: i32) -> (i32,i32) {
+ match self {
+ Direction::Up => (0, -dist),
+ Direction::Right => (dist, 0),
+ Direction::Down => (0, dist),
+ Direction::Left => (-dist, 0)
+ }
+ }
+}
+
+fn main() {
+ let content = read_file().expect("Failed to read file");
+ let (_, dist_x, dist_y) = first_repeated_dest(content);
+ println!("Total: ({}, {})", dist_x, dist_y);
+ println!("Net: {}", dist_x+dist_y);
+}
+
+fn net_distance(content: String) -> (Direction, i32, i32) {
+ content.trim().split(", ")
+ .map(|action|
+ (
+ action.chars().nth(0).unwrap(),
+ action.chars().skip(1).collect::<String>().parse::<i32>().unwrap()
+ ))
+ .fold((Direction::Up, 0,0), |(facing, acc_x, acc_y), (dir, dist)| {
+ let new_facing = match dir {
+ 'R' => facing.turn_right(),
+ 'L' => facing.turn_left(),
+ _ => panic!("bad input")
+ };
+
+ let (new_x, new_y) = new_facing.as_vector(dist);
+ (new_facing, acc_x+new_x, acc_y+new_y)
+ })
+}
+
+fn first_repeated_dest(content: String) -> (Direction, i32, i32) {
+ let mut stops: Vec<(i32, i32)> = Vec::new();
+ let actions = content.trim().split(", ")
+ .map(|action|
+ (
+ action.chars().nth(0).unwrap(),
+ action.chars().skip(1).collect::<String>().parse::<i32>().unwrap()
+ ));
+ let mut current_facing = Direction::Up;
+ let (mut acc_x, mut acc_y) = (0, 0);
+ for (dir, dist) in actions {
+ current_facing = match dir {
+ 'R' => current_facing.turn_right(),
+ 'L' => current_facing.turn_left(),
+ _ => panic!("bad input")
+ };
+
+ for _ in 0..dist {
+ let (new_x, new_y) = current_facing.as_vector(1);
+ acc_x += new_x;
+ acc_y += new_y;
+
+ if stops.iter().any(|&(x, y)| x==acc_x && y==acc_y) {
+ return (current_facing, acc_x, acc_y);
+ }
+ stops.push((acc_x, acc_y));
+ }
+ }
+ (current_facing, acc_x, acc_y)
+}
+
+fn read_file() -> Result<String, String> {
+ let mut file = try!(File::open("input.txt").map_err(|e| e.to_string()));
+ let mut content = String::new();
+ try!(file.read_to_string(&mut content).map_err(|e| e.to_string()));
+ Ok(content)
+}
diff --git a/2016/aoc10/Cargo.lock b/2016/aoc10/Cargo.lock
new file mode 100644
index 0000000..f8f7189
--- /dev/null
+++ b/2016/aoc10/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc10"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc10/Cargo.toml b/2016/aoc10/Cargo.toml
new file mode 100644
index 0000000..d6abdaf
--- /dev/null
+++ b/2016/aoc10/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc10"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc10/input.txt b/2016/aoc10/input.txt
new file mode 100644
index 0000000..aeda3b5
--- /dev/null
+++ b/2016/aoc10/input.txt
@@ -0,0 +1,231 @@
+bot 59 gives low to bot 176 and high to bot 120
+bot 92 gives low to bot 42 and high to bot 187
+value 31 goes to bot 114
+bot 182 gives low to bot 49 and high to bot 176
+bot 17 gives low to bot 181 and high to bot 162
+bot 36 gives low to bot 118 and high to bot 121
+bot 118 gives low to bot 164 and high to bot 55
+bot 172 gives low to bot 79 and high to bot 123
+bot 51 gives low to bot 60 and high to bot 31
+bot 48 gives low to bot 107 and high to bot 58
+bot 142 gives low to output 6 and high to bot 35
+bot 133 gives low to output 4 and high to bot 47
+bot 134 gives low to bot 122 and high to bot 66
+bot 106 gives low to bot 155 and high to bot 99
+bot 77 gives low to bot 93 and high to bot 84
+bot 9 gives low to bot 173 and high to bot 197
+bot 64 gives low to bot 123 and high to bot 48
+bot 177 gives low to bot 21 and high to bot 132
+bot 94 gives low to bot 6 and high to bot 25
+bot 126 gives low to bot 193 and high to bot 56
+bot 74 gives low to bot 187 and high to bot 125
+bot 80 gives low to bot 41 and high to bot 191
+bot 62 gives low to bot 157 and high to bot 138
+bot 66 gives low to bot 1 and high to bot 209
+bot 90 gives low to bot 104 and high to bot 34
+bot 68 gives low to bot 23 and high to bot 87
+bot 121 gives low to bot 55 and high to bot 126
+bot 122 gives low to bot 137 and high to bot 1
+bot 209 gives low to bot 168 and high to bot 26
+bot 141 gives low to bot 170 and high to bot 6
+bot 149 gives low to bot 62 and high to bot 13
+bot 120 gives low to bot 179 and high to bot 71
+bot 160 gives low to bot 194 and high to bot 151
+bot 86 gives low to bot 96 and high to bot 106
+value 13 goes to bot 9
+bot 180 gives low to bot 189 and high to bot 27
+value 67 goes to bot 88
+bot 169 gives low to bot 99 and high to bot 159
+bot 56 gives low to bot 98 and high to bot 147
+bot 197 gives low to bot 174 and high to bot 81
+bot 57 gives low to bot 113 and high to bot 179
+bot 39 gives low to bot 115 and high to bot 3
+bot 79 gives low to bot 22 and high to bot 40
+bot 161 gives low to output 14 and high to bot 185
+bot 21 gives low to bot 114 and high to bot 119
+bot 136 gives low to bot 28 and high to bot 158
+bot 105 gives low to bot 89 and high to bot 19
+bot 168 gives low to bot 126 and high to bot 26
+bot 193 gives low to bot 64 and high to bot 98
+bot 186 gives low to bot 86 and high to bot 178
+value 11 goes to bot 165
+bot 33 gives low to bot 116 and high to bot 150
+bot 32 gives low to bot 154 and high to bot 206
+bot 166 gives low to bot 33 and high to bot 139
+value 7 goes to bot 63
+bot 203 gives low to bot 172 and high to bot 64
+bot 200 gives low to bot 94 and high to bot 25
+value 43 goes to bot 76
+bot 145 gives low to bot 103 and high to bot 128
+bot 119 gives low to bot 186 and high to bot 97
+bot 12 gives low to bot 31 and high to bot 4
+bot 23 gives low to bot 198 and high to bot 171
+bot 34 gives low to bot 10 and high to bot 20
+bot 198 gives low to bot 43 and high to bot 17
+bot 50 gives low to output 1 and high to bot 127
+bot 155 gives low to bot 191 and high to bot 32
+bot 206 gives low to bot 12 and high to bot 43
+bot 96 gives low to bot 80 and high to bot 155
+bot 93 gives low to bot 44 and high to bot 70
+bot 24 gives low to bot 85 and high to bot 83
+bot 30 gives low to bot 159 and high to bot 68
+bot 55 gives low to bot 203 and high to bot 193
+bot 199 gives low to bot 68 and high to bot 135
+bot 170 gives low to bot 97 and high to bot 5
+bot 65 gives low to bot 152 and high to bot 194
+bot 43 gives low to bot 4 and high to bot 181
+bot 113 gives low to output 9 and high to bot 161
+bot 81 gives low to bot 141 and high to bot 94
+value 29 goes to bot 7
+bot 46 gives low to bot 175 and high to bot 195
+value 47 goes to bot 21
+value 23 goes to bot 42
+bot 13 gives low to bot 138 and high to bot 61
+bot 135 gives low to bot 87 and high to bot 111
+bot 194 gives low to bot 190 and high to bot 82
+value 73 goes to bot 109
+bot 154 gives low to bot 51 and high to bot 12
+bot 1 gives low to bot 18 and high to bot 209
+bot 98 gives low to bot 48 and high to bot 45
+bot 147 gives low to bot 45 and high to bot 95
+bot 47 gives low to output 19 and high to bot 152
+bot 26 gives low to bot 56 and high to bot 147
+bot 179 gives low to bot 161 and high to bot 71
+bot 148 gives low to bot 204 and high to bot 137
+bot 5 gives low to bot 67 and high to bot 85
+bot 174 gives low to bot 132 and high to bot 141
+bot 8 gives low to bot 13 and high to bot 75
+bot 82 gives low to bot 146 and high to bot 22
+bot 123 gives low to bot 40 and high to bot 107
+bot 99 gives low to bot 32 and high to bot 201
+bot 41 gives low to bot 196 and high to bot 192
+bot 139 gives low to bot 150 and high to bot 153
+bot 11 gives low to output 16 and high to bot 113
+bot 72 gives low to bot 65 and high to bot 160
+bot 195 gives low to bot 133 and high to bot 183
+bot 54 gives low to output 12 and high to output 10
+bot 158 gives low to bot 102 and high to bot 110
+bot 112 gives low to bot 19 and high to bot 118
+bot 31 gives low to bot 208 and high to bot 143
+bot 167 gives low to bot 7 and high to bot 96
+bot 63 gives low to bot 92 and high to bot 74
+bot 116 gives low to bot 20 and high to bot 131
+bot 184 gives low to bot 39 and high to bot 3
+bot 162 gives low to bot 205 and high to bot 39
+bot 108 gives low to output 11 and high to bot 175
+value 53 goes to bot 207
+bot 111 gives low to bot 202 and high to bot 184
+bot 25 gives low to bot 24 and high to bot 83
+value 71 goes to bot 77
+bot 69 gives low to bot 142 and high to bot 0
+bot 146 gives low to output 13 and high to bot 53
+bot 7 gives low to bot 76 and high to bot 80
+bot 131 gives low to bot 73 and high to bot 204
+bot 102 gives low to bot 195 and high to bot 117
+bot 76 gives low to bot 165 and high to bot 41
+bot 153 gives low to bot 148 and high to bot 122
+bot 208 gives low to bot 90 and high to bot 163
+bot 70 gives low to bot 144 and high to bot 78
+bot 125 gives low to bot 8 and high to bot 156
+bot 83 gives low to bot 199 and high to bot 135
+bot 75 gives low to bot 61 and high to bot 104
+bot 67 gives low to bot 169 and high to bot 30
+bot 14 gives low to bot 81 and high to bot 200
+bot 159 gives low to bot 201 and high to bot 23
+value 3 goes to bot 93
+bot 110 gives low to bot 117 and high to bot 89
+bot 128 gives low to bot 129 and high to bot 182
+bot 87 gives low to bot 171 and high to bot 111
+bot 45 gives low to bot 58 and high to bot 95
+bot 4 gives low to bot 143 and high to bot 166
+bot 60 gives low to bot 156 and high to bot 208
+bot 27 gives low to bot 108 and high to bot 46
+bot 42 gives low to bot 207 and high to bot 149
+bot 117 gives low to bot 183 and high to bot 72
+bot 115 gives low to bot 153 and high to bot 134
+bot 140 gives low to bot 125 and high to bot 60
+bot 173 gives low to bot 177 and high to bot 174
+bot 138 gives low to bot 180 and high to bot 52
+bot 100 gives low to bot 38 and high to bot 59
+value 41 goes to bot 173
+value 59 goes to bot 177
+bot 165 gives low to bot 63 and high to bot 196
+bot 84 gives low to bot 70 and high to bot 78
+bot 2 gives low to bot 160 and high to bot 91
+value 61 goes to bot 29
+bot 114 gives low to bot 109 and high to bot 186
+bot 205 gives low to bot 139 and high to bot 115
+bot 175 gives low to output 17 and high to bot 133
+bot 176 gives low to bot 57 and high to bot 120
+bot 107 gives low to bot 124 and high to bot 15
+bot 52 gives low to bot 27 and high to bot 28
+bot 103 gives low to bot 50 and high to bot 129
+bot 150 gives low to bot 131 and high to bot 148
+bot 16 gives low to output 20 and high to bot 189
+bot 190 gives low to output 18 and high to bot 146
+bot 157 gives low to bot 16 and high to bot 180
+bot 10 gives low to bot 158 and high to bot 130
+bot 202 gives low to bot 162 and high to bot 184
+bot 88 gives low to bot 77 and high to bot 84
+bot 188 gives low to bot 128 and high to bot 38
+bot 58 gives low to bot 15 and high to bot 101
+bot 171 gives low to bot 17 and high to bot 202
+bot 97 gives low to bot 178 and high to bot 67
+bot 163 gives low to bot 34 and high to bot 116
+bot 124 gives low to bot 0 and high to bot 145
+bot 71 gives low to bot 185 and high to bot 54
+bot 78 gives low to bot 14 and high to bot 200
+bot 101 gives low to bot 188 and high to bot 100
+bot 189 gives low to output 7 and high to bot 108
+bot 95 gives low to bot 101 and high to bot 100
+bot 0 gives low to bot 35 and high to bot 103
+bot 207 gives low to bot 37 and high to bot 62
+bot 49 gives low to bot 11 and high to bot 57
+bot 85 gives low to bot 30 and high to bot 199
+bot 89 gives low to bot 72 and high to bot 2
+bot 3 gives low to bot 134 and high to bot 66
+bot 181 gives low to bot 166 and high to bot 205
+bot 91 gives low to bot 151 and high to bot 172
+value 17 goes to bot 167
+bot 20 gives low to bot 130 and high to bot 73
+bot 196 gives low to bot 74 and high to bot 140
+bot 18 gives low to bot 121 and high to bot 168
+bot 185 gives low to output 15 and high to bot 54
+bot 178 gives low to bot 106 and high to bot 169
+bot 129 gives low to bot 127 and high to bot 49
+bot 19 gives low to bot 2 and high to bot 164
+bot 15 gives low to bot 145 and high to bot 188
+bot 144 gives low to bot 197 and high to bot 14
+bot 201 gives low to bot 206 and high to bot 198
+bot 164 gives low to bot 91 and high to bot 203
+bot 73 gives low to bot 105 and high to bot 112
+bot 191 gives low to bot 192 and high to bot 154
+bot 109 gives low to bot 167 and high to bot 86
+bot 151 gives low to bot 82 and high to bot 79
+bot 53 gives low to output 2 and high to bot 142
+bot 37 gives low to bot 29 and high to bot 157
+value 2 goes to bot 44
+bot 204 gives low to bot 112 and high to bot 36
+bot 40 gives low to bot 69 and high to bot 124
+bot 22 gives low to bot 53 and high to bot 69
+bot 104 gives low to bot 136 and high to bot 10
+value 19 goes to bot 88
+bot 127 gives low to output 5 and high to bot 11
+bot 183 gives low to bot 47 and high to bot 65
+bot 192 gives low to bot 140 and high to bot 51
+bot 38 gives low to bot 182 and high to bot 59
+bot 61 gives low to bot 52 and high to bot 136
+bot 156 gives low to bot 75 and high to bot 90
+value 37 goes to bot 37
+bot 28 gives low to bot 46 and high to bot 102
+bot 187 gives low to bot 149 and high to bot 8
+bot 132 gives low to bot 119 and high to bot 170
+bot 44 gives low to bot 9 and high to bot 144
+bot 29 gives low to output 0 and high to bot 16
+bot 6 gives low to bot 5 and high to bot 24
+bot 137 gives low to bot 36 and high to bot 18
+bot 130 gives low to bot 110 and high to bot 105
+value 5 goes to bot 92
+bot 35 gives low to output 3 and high to bot 50
+bot 152 gives low to output 8 and high to bot 190
+bot 143 gives low to bot 163 and high to bot 33
diff --git a/2016/aoc10/src/main.rs b/2016/aoc10/src/main.rs
new file mode 100644
index 0000000..c2c18be
--- /dev/null
+++ b/2016/aoc10/src/main.rs
@@ -0,0 +1,155 @@
+extern crate regex;
+use regex::Regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::cmp;
+
+#[derive(Debug, Clone)]
+struct Bot {
+ low: Option<i32>,
+ high: Option<i32>,
+ low_dest: Option<Dest>,
+ high_dest: Option<Dest>
+}
+
+#[derive(Debug, Clone)]
+enum Dest {
+ Bot(usize),
+ Output(usize)
+}
+
+impl Bot {
+ fn new() -> Bot {
+ Bot {low: None, high: None, low_dest: None, high_dest: None}
+ }
+
+ fn add_input(&mut self, input: i32) {
+ if self.low.is_none() {
+ self.low = Some(input);
+ }
+ else {
+ let other = self.low.unwrap(); //already handled none case
+ self.low = Some(cmp::min(input,other));
+ self.high = Some(cmp::max(input,other));
+ }
+ }
+ fn ready(&self) -> bool {
+ self.low.is_some() && self.high.is_some() &&
+ self.low_dest.is_some() && self.high_dest.is_some()
+ }
+ fn clear(&mut self) {
+ self.low = None;
+ self.high = None;
+ }
+}
+
+
+fn main() {
+ let mut bots = build_bots_graph();
+ let outputs = find_outputs(&mut bots);
+ println!("Outputs {:?}", outputs);
+}
+
+fn find_outputs(bots: &mut Vec<Bot>) -> Vec<i32> {
+ let mut output = Vec::new();
+
+ let mut is_stable = false;
+ while !is_stable {
+ is_stable = true;
+
+ for i in 0..bots.len() {
+ if bots[i].ready() {
+ is_stable = false;
+
+ let low = bots[i].low.unwrap();
+ let high = bots[i].high.unwrap();
+ bots[i].clear();
+
+ match bots[i].low_dest {
+ Some(Dest::Bot(j)) => {
+ bots[j].add_input(low);
+ },
+ Some(Dest::Output(j)) => {
+ check_add_output(&mut output, j);
+ output[j] = low;
+ },
+ _ => {}
+ };
+ match bots[i].high_dest {
+ Some(Dest::Bot(j)) => {
+ bots[j].add_input(high);
+ },
+ Some(Dest::Output(j)) => {
+ check_add_output(&mut output, j);
+ output[j] = high;
+ },
+ _ => {}
+ };
+ }
+ }
+ }
+
+ output
+}
+
+fn build_bots_graph() -> Vec<Bot> {
+ let lines = read_file();
+ let mut bots = Vec::new();
+
+ let value_regex = Regex::new(r"^value (\d+) goes to bot (\d+)$").unwrap();
+ let give_regex = Regex::new(r"^bot (\d+) gives low to (output|bot) (\d+) and high to (output|bot) (\d+)$").unwrap();
+
+ for line in lines {
+ if value_regex.is_match(line.as_ref()) {
+ let cap = value_regex.captures(line.as_ref()).unwrap();
+ let value = cap.at(1).unwrap().parse().unwrap();
+ let bot_index = cap.at(2).unwrap().parse().unwrap();
+ check_add_bot(&mut bots, bot_index);
+ bots[bot_index].add_input(value);
+ }
+ else if give_regex.is_match(line.as_ref()) {
+ let cap = give_regex.captures(line.as_ref()).unwrap();
+ let give_bot_index = cap.at(1).unwrap().parse().unwrap();
+ let low_is_to_output = cap.at(2).unwrap() == "output";
+ let low_dest = cap.at(3).unwrap().parse().unwrap();
+ let high_is_to_output = cap.at(4).unwrap() == "output";
+ let high_dest = cap.at(5).unwrap().parse().unwrap();
+
+ check_add_bot(&mut bots, give_bot_index);
+ bots[give_bot_index].low_dest = if low_is_to_output {
+ Some(Dest::Output(low_dest))
+ } else {
+ Some(Dest::Bot(low_dest))
+ };
+ bots[give_bot_index].high_dest = if high_is_to_output {
+ Some(Dest::Output(high_dest))
+ } else {
+ Some(Dest::Bot(high_dest))
+ };
+ }
+ }
+
+ bots
+}
+
+fn check_add_bot(bots: &mut Vec<Bot>, index: usize) {
+ while index >= bots.len() {
+ bots.push(Bot::new());
+ }
+}
+
+fn check_add_output(outputs: &mut Vec<i32>, index: usize) {
+ while index >= outputs.len() {
+ outputs.push(0);
+ }
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
diff --git a/2016/aoc11/Cargo.lock b/2016/aoc11/Cargo.lock
new file mode 100644
index 0000000..b423029
--- /dev/null
+++ b/2016/aoc11/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc11"
+version = "0.1.0"
+
diff --git a/2016/aoc11/Cargo.toml b/2016/aoc11/Cargo.toml
new file mode 100644
index 0000000..e0b3f68
--- /dev/null
+++ b/2016/aoc11/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc11"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
+
diff --git a/2016/aoc11/input.txt b/2016/aoc11/input.txt
new file mode 100644
index 0000000..d453804
--- /dev/null
+++ b/2016/aoc11/input.txt
@@ -0,0 +1,4 @@
+The first floor contains a strontium generator, a strontium-compatible microchip, a plutonium generator, and a plutonium-compatible microchip.
+The second floor contains a thulium generator, a ruthenium generator, a ruthenium-compatible microchip, a curium generator, and a curium-compatible microchip.
+The third floor contains a thulium-compatible microchip.
+The fourth floor contains nothing relevant.
diff --git a/2016/aoc11/src/main.rs b/2016/aoc11/src/main.rs
new file mode 100644
index 0000000..39a6e2f
--- /dev/null
+++ b/2016/aoc11/src/main.rs
@@ -0,0 +1,166 @@
+
+use std::collections::HashMap;
+
+//const MICROS: usize = 2; //example
+const MICROS: usize = 7;
+
+#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
+struct State {
+ microchips: [[bool; MICROS]; 4],
+ generators: [[bool; MICROS]; 4],
+ elevator: usize
+}
+
+impl State {
+ fn is_final(&self) -> bool {
+ let floor = 3;
+
+ for i in 0..MICROS {
+ if !self.microchips[floor][i] || !self.generators[floor][i] {
+ return false;
+ }
+ }
+ true
+ }
+
+ fn is_safe(&self) -> bool {
+ for floor in 0..4 {
+ for i in 0..MICROS {
+ for j in 0..MICROS {
+ //need to be on same floor, if any other micro is there
+ if self.generators[floor][j] && !self.generators[floor][i] && self.microchips[floor][i] {
+ return false;
+ }
+ }
+ }
+ }
+ true
+ }
+
+ fn valid_moves(&self) -> Vec<State> {
+ let mut moves = Vec::new();
+
+ let mut new_floors = Vec::new();
+ if self.elevator > 0 {
+ new_floors.push(self.elevator-1);
+ }
+ if self.elevator < 3 {
+ new_floors.push(self.elevator+1);
+ }
+ for &new_floor in new_floors.iter() {
+
+ //items to take can be: one micro, one generator, two micros, two generator, one of each
+
+ //one micro
+ for i in 0..MICROS {
+ if self.microchips[self.elevator][i] {
+ moves.push(self.move_micro(i, self.elevator, new_floor));
+ }
+ }
+ //one generator
+ for i in 0..MICROS {
+ if self.generators[self.elevator][i] {
+ moves.push(self.move_generator(i, self.elevator, new_floor));
+ }
+ }
+ //two micros
+ for i in 0..MICROS {
+ for j in i+1..MICROS {
+ if self.microchips[self.elevator][i] && self.microchips[self.elevator][j] {
+ moves.push(self.move_micro(i, self.elevator, new_floor).move_micro(j, self.elevator, new_floor));
+ }
+ }
+ }
+ //two generators
+ for i in 0..MICROS {
+ for j in i+1..MICROS {
+ if self.generators[self.elevator][i] && self.generators[self.elevator][j] {
+ moves.push(self.move_generator(i, self.elevator, new_floor).move_generator(j, self.elevator, new_floor));
+ }
+ }
+ }
+ //one of each
+ for i in 0..MICROS {
+ for j in 0..MICROS {
+ if self.microchips[self.elevator][i] && self.generators[self.elevator][j] {
+ moves.push(self.move_micro(i, self.elevator, new_floor).move_generator(j, self.elevator, new_floor));
+ }
+ }
+ }
+ }
+
+ moves.iter().filter(|x| x.is_safe()).cloned().collect()
+ }
+
+ fn move_micro(&self, micro: usize, floor: usize, new_floor: usize) -> State {
+ let mut new_state = self.clone();
+ new_state.microchips[floor][micro] = false;
+ new_state.microchips[new_floor][micro] = true;
+ new_state.elevator = new_floor;
+ new_state
+ }
+ fn move_generator(&self, gen: usize, floor: usize, new_floor: usize) -> State {
+ let mut new_state = self.clone();
+ new_state.generators[floor][gen] = false;
+ new_state.generators[new_floor][gen] = true;
+ new_state.elevator = new_floor;
+ new_state
+ }
+}
+
+fn main() {
+ //Stronium, plutonium, thulium, ruthenium, curium, electrium, dilithium
+ let initial = State {
+ microchips:
+ [[true, true, false, false, false, true, true],
+ [false, false, false, true, true, false, false],
+ [false, false, true, false, false, false, false],
+ [false, false, false, false, false, false, false]],
+ generators:
+ [[true, true, false, false, false, true, true],
+ [false, false, true, true, true, false, false],
+ [false, false, false, false, false, false, false],
+ [false, false, false, false, false, false, false]],
+ elevator: 0
+ };
+
+ /*
+ //example
+ let initial = State {
+ microchips:
+ [[true, true],
+ [false, false],
+ [false, false],
+ [false, false]],
+ generators:
+ [[false, false],
+ [true, false],
+ [false, true],
+ [false, false]],
+ elevator: 0
+ };
+ */
+
+ let mut states: HashMap<State, u32> = HashMap::new();
+ states.insert(initial, 0);
+
+ let mut moves = 0;
+ loop {
+ if states.iter().any(|(state, _)| state.is_final()) {
+ break;
+ }
+
+ let new_states: Vec<State> = states.iter().filter(|&(_, &x)| x == moves).flat_map(|(state, _)| state.valid_moves()).collect();
+
+ moves += 1;
+
+ for state in new_states {
+ if !states.contains_key(&state) {
+ states.insert(state, moves);
+ }
+ }
+ }
+
+
+ println!("Moves required: {}", moves);
+}
diff --git a/2016/aoc12/Cargo.lock b/2016/aoc12/Cargo.lock
new file mode 100644
index 0000000..24237f4
--- /dev/null
+++ b/2016/aoc12/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc12"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc12/Cargo.toml b/2016/aoc12/Cargo.toml
new file mode 100644
index 0000000..f224921
--- /dev/null
+++ b/2016/aoc12/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc12"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc12/input.txt b/2016/aoc12/input.txt
new file mode 100644
index 0000000..bb2a2ff
--- /dev/null
+++ b/2016/aoc12/input.txt
@@ -0,0 +1,23 @@
+cpy 1 a
+cpy 1 b
+cpy 26 d
+jnz c 2
+jnz 1 5
+cpy 7 c
+inc d
+dec c
+jnz c -2
+cpy a c
+inc a
+dec b
+jnz b -2
+cpy c b
+dec d
+jnz d -6
+cpy 17 c
+cpy 18 d
+inc a
+dec d
+jnz d -2
+dec c
+jnz c -5
diff --git a/2016/aoc12/src/main.rs b/2016/aoc12/src/main.rs
new file mode 100644
index 0000000..2356402
--- /dev/null
+++ b/2016/aoc12/src/main.rs
@@ -0,0 +1,136 @@
+extern crate regex;
+use regex::Regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+enum Instruction {
+ CpyLit(i32, usize),
+ CpyReg(usize, usize),
+ Inc(usize),
+ Dec(usize),
+ Jnz(usize, i32),
+ Jmp(i32),
+ Noop
+}
+
+impl Instruction {
+ fn parse(line: &str) -> Instruction {
+ let cpy_lit: Regex = Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap();
+ let cpy_reg = Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap();
+ let inc = Regex::new(r"inc (a|b|c|d)").unwrap();
+ let dec = Regex::new(r"dec (a|b|c|d)").unwrap();
+ let jnz_lit = Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap();
+ let jnz_reg = Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap();
+
+ let cpy_lit_match = cpy_lit.captures(line);
+ let cpy_reg_match = cpy_reg.captures(line);
+ let inc_match = inc.captures(line);
+ let dec_match = dec.captures(line);
+ let jnz_lit_match = jnz_lit.captures(line);
+ let jnz_reg_match = jnz_reg.captures(line);
+
+ if cpy_lit_match.is_some() {
+ let cap = cpy_lit_match.unwrap();
+ let src: i32 = cap.at(1).unwrap().parse().unwrap();
+ let dest = to_register_index(cap.at(2).unwrap());
+ Instruction::CpyLit(src, dest)
+ }
+ else if cpy_reg_match.is_some() {
+ let cap = cpy_reg_match.unwrap();
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = to_register_index(cap.at(2).unwrap());
+ Instruction::CpyReg(src, dest)
+ }
+ else if inc_match.is_some() {
+ let cap = inc_match.unwrap();
+ let dest = to_register_index(cap.at(1).unwrap());
+ Instruction::Inc(dest)
+ }
+ else if dec_match.is_some() {
+ let cap = dec_match.unwrap();
+ let dest = to_register_index(cap.at(1).unwrap());
+ Instruction::Dec(dest)
+ }
+ else if jnz_lit_match.is_some() {
+ let cap = jnz_lit_match.unwrap();
+ let condition: i32 = cap.at(1).unwrap().parse().unwrap();
+ let offset: i32 = cap.at(2).unwrap().parse().unwrap();
+ if condition != 0 {
+ Instruction::Jmp(offset)
+ }
+ else {
+ Instruction::Noop
+ }
+ }
+ else if jnz_reg_match.is_some() {
+ let cap = jnz_reg_match.unwrap();
+ let condition = to_register_index(cap.at(1).unwrap());
+ let offset: i32 = cap.at(2).unwrap().parse().unwrap();
+ Instruction::Jnz(condition, offset)
+ }
+ else {
+ panic!("Invalid instruction line")
+ }
+ }
+}
+
+fn main() {
+ let program = read_file();
+
+ let mut registers: [i32; 4] = [0, 0, 1, 0];
+ let mut pc: usize = 0;
+
+ while pc < program.len() {
+ let mut pc_next: usize = pc+1;
+
+ match program[pc] {
+ Instruction::CpyLit(src, dest) => {
+ registers[dest] = src;
+ },
+ Instruction::CpyReg(src, dest) => {
+ registers[dest] = registers[src];
+ },
+ Instruction::Inc(dest) => {
+ registers[dest] += 1;
+ },
+ Instruction::Dec(dest) => {
+ registers[dest] -= 1;
+ },
+ Instruction::Jnz(condition, offset) => {
+ if registers[condition] != 0 {
+ pc_next = (pc as i32 + offset) as usize;
+ }
+ },
+ Instruction::Jmp(offset) => {
+ pc_next = (pc as i32 + offset) as usize
+ },
+ Instruction::Noop => {}
+ }
+
+ pc = pc_next;
+ }
+
+ println!("a: {}, b: {}, c: {}, d: {}", registers[0], registers[1], registers[2], registers[3]);
+
+}
+
+fn to_register_index(name: &str) -> usize {
+ match name {
+ "a" => 0,
+ "b" => 1,
+ "c" => 2,
+ "d" => 3,
+ _ => panic!("Invalid register provided")
+ }
+}
+
+fn read_file() -> Vec<Instruction> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap())
+ .filter(|line| line.len() > 0)
+ .map(|line| Instruction::parse(line.trim()))
+ .collect()
+}
diff --git a/2016/aoc13/Cargo.lock b/2016/aoc13/Cargo.lock
new file mode 100644
index 0000000..d60f2c7
--- /dev/null
+++ b/2016/aoc13/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc13"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc13/Cargo.toml b/2016/aoc13/Cargo.toml
new file mode 100644
index 0000000..347a1a4
--- /dev/null
+++ b/2016/aoc13/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc13"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc13/src/main.rs b/2016/aoc13/src/main.rs
new file mode 100644
index 0000000..2c0e70e
--- /dev/null
+++ b/2016/aoc13/src/main.rs
@@ -0,0 +1,64 @@
+extern crate regex;
+use regex::Regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::collections::HashMap;
+
+fn main() {
+ //let target = (7, 4);
+ let target = (31,39);
+
+ let mut states: HashMap<(i32, i32), u32> = HashMap::new();
+ states.insert((1, 1), 0);
+ let mut moves = 0;
+ while moves < 50 {
+/* if states.iter().any(|(&state, _)| state == target) {
+ break;
+ }
+*/
+ let new_states: Vec<(i32, i32)> = states.iter().filter(|&(_, &x)| x == moves).flat_map(|(state, _)| available_steps(state)).collect();
+
+ moves += 1;
+
+ for state in new_states {
+ if !states.contains_key(&state) {
+ states.insert(state, moves);
+ }
+ }
+ }
+
+ println!("Moves required: {}", moves);
+ println!("Possible destinations: {}", states.iter().count());
+}
+
+
+fn available_steps(current: &(i32, i32)) -> Vec<(i32, i32)> {
+ let &(x0, y0) = current;
+ let mut results = Vec::new();
+ for &(x, y) in [(x0-1, y0), (x0+1, y0), (x0, y0-1), (x0, y0+1)].iter() {
+ if x >= 0 && y >= 0 && !is_wall(x, y) {
+ results.push((x, y));
+ }
+ }
+ results
+}
+
+fn print_map() {
+ for y in 0..10 {
+ for x in 0..10 {
+ print!("{}", if is_wall(x, y) {'#'} else {'.'});
+ }
+ println!("");
+ }
+}
+
+fn is_wall(x: i32, y: i32) -> bool {
+// let favourite_number = 10;
+ let favourite_number = 1352;
+ let funny_num = x*x + 3*x + 2*x*y + y + y*y + favourite_number;
+ let bin = format!("{:b}", funny_num);
+ let number_of_ones = bin.chars().filter(|&c| c == '1').count();
+ number_of_ones % 2 == 1
+}
diff --git a/2016/aoc14/Cargo.lock b/2016/aoc14/Cargo.lock
new file mode 100644
index 0000000..a889c91
--- /dev/null
+++ b/2016/aoc14/Cargo.lock
@@ -0,0 +1,14 @@
+[root]
+name = "aoc14"
+version = "0.1.0"
+dependencies = [
+ "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "md5"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7df230903ccdffd6b3b4ec21624498ea64c912ce50297846907f0b8e1bb249dd"
diff --git a/2016/aoc14/Cargo.toml b/2016/aoc14/Cargo.toml
new file mode 100644
index 0000000..eb3f92d
--- /dev/null
+++ b/2016/aoc14/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc14"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+md5 = "^0.2" \ No newline at end of file
diff --git a/2016/aoc14/src/main.rs b/2016/aoc14/src/main.rs
new file mode 100644
index 0000000..d9410ce
--- /dev/null
+++ b/2016/aoc14/src/main.rs
@@ -0,0 +1,84 @@
+extern crate md5;
+
+use std::collections::HashMap;
+
+fn main() {
+// let input = "abc";
+ let input = "yjdafjpo";
+ let mut index = 0;
+ let mut results_found = 0;
+
+ let mut hash_memo = HashMap::new();
+ while results_found < 64 {
+ let hash = stretched_hash(format!("{}{}", input, index), &mut hash_memo);
+
+ let threes = find_concurrent_symbols(&hash, 3, true);
+ if threes.len() > 0 {
+// println!("Found three at {} -> {}", index, hash);
+ for i in 1..1001 {
+ let hash = stretched_hash(format!("{}{}", input, index+i), &mut hash_memo);
+ let fives = find_concurrent_symbols(&hash, 5, false);
+ if fives.iter().any(|c| threes.contains(c)) {
+ results_found += 1;
+// println!("Five found at {} -> {}", index+i, hash);
+ println!("Found hash {} at index {}", results_found, index);
+ break;
+ }
+ }
+ }
+ index += 1;
+ }
+
+}
+
+fn find_concurrent_symbols(hash: &String, count: u8, exit_early: bool) -> Vec<char> {
+ let mut last_symbol = None;
+ let mut last_symbol_run = 0;
+ let mut matches = Vec::new();
+ for c in hash.chars() {
+ let symbol_matches = match last_symbol {
+ Some(s) => s == c,
+ None => false
+ };
+
+ if symbol_matches {
+ last_symbol_run += 1;
+ if last_symbol_run >= count && !matches.contains(&c) {
+ matches.push(c);
+ if exit_early {
+ break;
+ }
+ }
+ } else {
+ last_symbol = Some(c);
+ last_symbol_run = 1;
+ }
+ }
+
+ matches
+}
+
+fn hash_to_string(hash: &[u8; 16]) -> String {
+ let mut result = String::with_capacity(32);
+
+ for &byte in hash.iter() {
+ result.push_str(format!("{:02x}", byte).as_ref());
+ }
+ result
+}
+
+fn stretched_hash(input: String, memo: &mut HashMap<String, String>) -> String {
+ memo.entry(input.clone()).or_insert_with(|| {
+ let mut result = input;
+ for _ in 0..2017 {
+ result = string_hash(result);
+ }
+ result
+ }).clone()
+}
+
+fn string_hash(input: String) -> String {
+ let bytes_to_hash = input.into_bytes();
+ let hash = md5::compute(bytes_to_hash.as_slice());
+ hash_to_string(&hash)
+}
diff --git a/2016/aoc15/Cargo.lock b/2016/aoc15/Cargo.lock
new file mode 100644
index 0000000..38f1d9c
--- /dev/null
+++ b/2016/aoc15/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc15"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc15/Cargo.toml b/2016/aoc15/Cargo.toml
new file mode 100644
index 0000000..eb75c1d
--- /dev/null
+++ b/2016/aoc15/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc15"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc15/input.txt b/2016/aoc15/input.txt
new file mode 100644
index 0000000..c4cf544
--- /dev/null
+++ b/2016/aoc15/input.txt
@@ -0,0 +1,7 @@
+Disc #1 has 17 positions; at time=0, it is at position 5.
+Disc #2 has 19 positions; at time=0, it is at position 8.
+Disc #3 has 7 positions; at time=0, it is at position 1.
+Disc #4 has 13 positions; at time=0, it is at position 7.
+Disc #5 has 5 positions; at time=0, it is at position 1.
+Disc #6 has 3 positions; at time=0, it is at position 0.
+Disc #7 has 11 positions; at time=0, it is at position 0.
diff --git a/2016/aoc15/src/main.rs b/2016/aoc15/src/main.rs
new file mode 100644
index 0000000..a7f0f64
--- /dev/null
+++ b/2016/aoc15/src/main.rs
@@ -0,0 +1,35 @@
+extern crate regex;
+
+use regex::Regex;
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+
+fn main() {
+ let gears = read_file();
+ let pass = (0..).find(|&i| can_pass(&gears, i)).expect("Reached end of infinite range without finding output");
+ println!("First pass at t={}", pass);
+}
+
+fn can_pass(gears: &Vec<(i32, i32, i32)>, time: i32) -> bool {
+ gears.iter().all(|&(time_offset, init_pos, gear_size)| (init_pos + time_offset + time) % gear_size == 0)
+}
+
+fn read_file() -> Vec<(i32, i32, i32)> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ let line_regex = Regex::new(r"Disc #(\d+) has (\d+) positions; at time=0, it is at position (\d+).").unwrap();
+ file.lines()
+ .filter_map(|line| {
+ line_regex.captures(line.unwrap().as_ref()).and_then(|cap| {
+ let time_offset = cap.at(1).and_then(|s| s.parse::<i32>().ok());
+ let init_pos = cap.at(3).and_then(|s| s.parse::<i32>().ok());
+ let gear_size = cap.at(2).and_then(|s| s.parse::<i32>().ok());
+ match (time_offset, init_pos, gear_size) {
+ (Some(a), Some(b), Some(c)) => Some((a,b,c)),
+ _ => None
+ }
+ })
+ })
+ .collect()
+}
diff --git a/2016/aoc16/Cargo.lock b/2016/aoc16/Cargo.lock
new file mode 100644
index 0000000..af71beb
--- /dev/null
+++ b/2016/aoc16/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc16"
+version = "0.1.0"
+
diff --git a/2016/aoc16/Cargo.toml b/2016/aoc16/Cargo.toml
new file mode 100644
index 0000000..3e56892
--- /dev/null
+++ b/2016/aoc16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc16"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc16/src/main.rs b/2016/aoc16/src/main.rs
new file mode 100644
index 0000000..c5ecd10
--- /dev/null
+++ b/2016/aoc16/src/main.rs
@@ -0,0 +1,68 @@
+fn main() {
+ let data = initial();
+ let expanded = expand_to_size(data, 35651584);
+ let check = checksum(expanded);
+ print(&check);
+}
+
+fn initial() -> Vec<bool> {
+ to_bit_vec("10001001100000001")
+}
+
+fn to_bit_vec(input: &str) -> Vec<bool> {
+ input.chars().map(|c| c == '1').collect()
+}
+
+fn expand(a: Vec<bool>) -> Vec<bool> {
+ let mut b = a.clone();
+ b.reverse();
+ b = b.iter().map(|x| !x).collect();
+
+ let mut out = a.clone();
+ out.push(false);
+ out.append(&mut b);
+ out
+}
+
+fn expand_to_size(init: Vec<bool>, size: usize) -> Vec<bool> {
+ let mut out = init.clone();
+ while out.len() < size {
+ out = expand(out);
+ }
+ out.truncate(size);
+ out
+}
+
+fn checksum(data: Vec<bool>) -> Vec<bool> {
+ let mut check: Vec<bool> = data.chunks(2).map(|x| x[0] == x[1]).collect();
+ if check.len() % 2 == 0 {
+ check = checksum(check);
+ }
+ check
+}
+
+fn print(data: &Vec<bool>) {
+ for &bit in data {
+ print!("{}", if bit {'1'} else {'0'});
+ }
+ println!("");
+}
+
+#[test]
+fn test_expand() {
+ assert_eq!(expand(to_bit_vec("1")), to_bit_vec("100"));
+ assert_eq!(expand(to_bit_vec("0")), to_bit_vec("001"));
+ assert_eq!(expand(to_bit_vec("11111")), to_bit_vec("11111000000"));
+ assert_eq!(expand(to_bit_vec("111100001010")), to_bit_vec("1111000010100101011110000"));
+}
+
+#[test]
+fn test_expand_to_size() {
+ assert_eq!(expand_to_size(to_bit_vec("10000"), 20), to_bit_vec("10000011110010000111"));
+}
+
+#[test]
+fn test_checksum() {
+ assert_eq!(checksum(to_bit_vec("10000011110010000111")), to_bit_vec("01100"));
+}
+
diff --git a/2016/aoc17/Cargo.lock b/2016/aoc17/Cargo.lock
new file mode 100644
index 0000000..488e59b
--- /dev/null
+++ b/2016/aoc17/Cargo.lock
@@ -0,0 +1,14 @@
+[root]
+name = "aoc17"
+version = "0.1.0"
+dependencies = [
+ "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "md5"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7df230903ccdffd6b3b4ec21624498ea64c912ce50297846907f0b8e1bb249dd"
diff --git a/2016/aoc17/Cargo.toml b/2016/aoc17/Cargo.toml
new file mode 100644
index 0000000..88c211c
--- /dev/null
+++ b/2016/aoc17/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc17"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
+md5 = "^0.2" \ No newline at end of file
diff --git a/2016/aoc17/src/main.rs b/2016/aoc17/src/main.rs
new file mode 100644
index 0000000..77fdf2e
--- /dev/null
+++ b/2016/aoc17/src/main.rs
@@ -0,0 +1,98 @@
+extern crate md5;
+
+#[derive(Clone)]
+struct State {
+ input: String,
+ path: String,
+ x: i8,
+ y: i8
+}
+
+impl State {
+ fn open_directions(&self) -> Vec<(char, i8, i8)> {
+ let hash_input = format!("{}{}", self.input, self.path);
+ let hash = md5::compute(hash_input.into_bytes().as_slice());
+
+ let mut results = Vec::new();
+ if hash[0]/16 > 10 && self.y > 0 {
+ results.push(('U', 0, -1));
+ }
+ if hash[0]%16 > 10 && self.y < 3 {
+ results.push(('D', 0, 1));
+ }
+ if hash[1]/16 > 10 && self.x > 0 {
+ results.push(('L', -1, 0));
+ }
+ if hash[1]%16 > 10 && self.x < 3 {
+ results.push(('R', 1, 0));
+ }
+
+ results
+ }
+
+ fn next_states(&self) -> Vec<State> {
+ self.open_directions().iter()
+ .map(|&(dir, dx, dy)| State {
+ input: self.input.clone(),
+ path: {
+ let mut p = self.path.clone();
+ p.push(dir);
+ p
+ },
+ x: self.x + dx,
+ y: self.y + dy
+ }).collect()
+ }
+
+ fn is_final(&self) -> bool {
+ self.x == 3 && self.y == 3
+ }
+}
+
+fn main() {
+ let initial = State {
+ input: "lpvhkcbi".to_string(),
+ path: String::new(),
+ x: 0,
+ y: 0
+ };
+
+ let final_state = find_final_state(initial.clone());
+ let longest_path = find_longest_path(initial);
+
+ println!("Final State Path: {}", final_state.path);
+ println!("Longest Path: {}", longest_path);
+}
+
+fn find_final_state(initial: State) -> State {
+ let mut states = vec!(initial);
+
+ loop {
+ match states.iter().find(|s| s.is_final()) {
+ Some(final_state) => {return final_state.clone();},
+ None => {}
+ };
+
+ states = states.iter().flat_map(|s| s.next_states()).collect();
+ }
+}
+
+fn find_longest_path(initial: State) -> u32 {
+ let mut states = vec!(initial);
+ let mut current_longest = 0;
+
+ while states.len() > 0 {
+
+ match states.iter().find(|s| s.is_final()) {
+ Some(final_state) => {current_longest = final_state.path.len() as u32;},
+ None => {}
+ };
+
+ states = states.iter()
+ .filter(|s| !s.is_final())
+ .flat_map(|s| s.next_states())
+ .collect();
+ }
+
+ current_longest
+}
diff --git a/2016/aoc18/Cargo.lock b/2016/aoc18/Cargo.lock
new file mode 100644
index 0000000..d26659d
--- /dev/null
+++ b/2016/aoc18/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc18"
+version = "0.1.0"
+
diff --git a/2016/aoc18/Cargo.toml b/2016/aoc18/Cargo.toml
new file mode 100644
index 0000000..5eadfea
--- /dev/null
+++ b/2016/aoc18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc18"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc18/src/main.rs b/2016/aoc18/src/main.rs
new file mode 100644
index 0000000..52ad7a9
--- /dev/null
+++ b/2016/aoc18/src/main.rs
@@ -0,0 +1,20 @@
+fn main() {
+ let init: Vec<char> = ".^^..^...^..^^.^^^.^^^.^^^^^^.^.^^^^.^^.^^^^^^.^...^......^...^^^..^^^.....^^^^^^^^^....^^...^^^^..^".chars().collect();
+
+ let mut map = Vec::new();
+ map.push(init);
+
+ for _ in 1..400000 {
+ let last = map.last().unwrap().clone();
+ let mut next = Vec::new();
+ for i in 0..last.len() {
+ let left = if i == 0 { '.' } else { last[i-1] };
+ let right = if i == last.len()-1 { '.' } else { last[i+1] };
+ next.push(if left == right { '.' } else { '^' });
+ }
+ map.push(next);
+ }
+
+ let safe_count = map.iter().map(|row| row.iter().filter(|&&c| c=='.').count() as u32).sum::<u32>();
+ println!("Safe tiles: {}", safe_count);
+}
diff --git a/2016/aoc19/Cargo.lock b/2016/aoc19/Cargo.lock
new file mode 100644
index 0000000..7dc8a26
--- /dev/null
+++ b/2016/aoc19/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc19"
+version = "0.1.0"
+
diff --git a/2016/aoc19/Cargo.toml b/2016/aoc19/Cargo.toml
new file mode 100644
index 0000000..17889e3
--- /dev/null
+++ b/2016/aoc19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc19"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc19/src/main.rs b/2016/aoc19/src/main.rs
new file mode 100644
index 0000000..1930d8d
--- /dev/null
+++ b/2016/aoc19/src/main.rs
@@ -0,0 +1,42 @@
+fn main() {
+ part1();
+ part2();
+}
+
+fn part1() {
+ let mut elves = (0..3017957).map(|i| i+1).collect::<Vec<_>>();
+
+ let mut eliminate_mod = 1;
+
+ while elves.len() > 1 {
+ let next_mod = if elves.len() % 2 == eliminate_mod { 0 } else { 1 };
+ elves = elves.iter()
+ .enumerate()
+ .filter(|&(i, _)| i % 2 != eliminate_mod)
+ .map(|(_, &e)| e)
+ .collect();
+ eliminate_mod = next_mod;
+ }
+
+ let elf = elves[0];
+ println!("Elf {} gets all the presents in part 1", elf);
+}
+
+fn part2() {
+ let mut elves = (0..3017957).map(|i| i+1).collect::<Vec<_>>();
+
+ let mut i = 0;
+ while elves.len() > 1 {
+ i = i % elves.len();
+ let to_eliminate = (i + elves.len() / 2) % elves.len();
+// println!("Elf {} is taking presents from elf {}", elves[i], elves[to_eliminate]);
+ elves.remove(to_eliminate);
+ if to_eliminate > i {
+ i += 1;
+ }
+ }
+
+ let elf = elves[0];
+ println!("Elf {} gets all the presents in part 2", elf);
+
+}
diff --git a/2016/aoc2/Cargo.lock b/2016/aoc2/Cargo.lock
new file mode 100644
index 0000000..b0dbf6e
--- /dev/null
+++ b/2016/aoc2/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc2"
+version = "0.1.0"
+
diff --git a/2016/aoc2/Cargo.toml b/2016/aoc2/Cargo.toml
new file mode 100644
index 0000000..e4dcc6f
--- /dev/null
+++ b/2016/aoc2/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc2"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
diff --git a/2016/aoc2/input.txt b/2016/aoc2/input.txt
new file mode 100644
index 0000000..ba5a73d
--- /dev/null
+++ b/2016/aoc2/input.txt
@@ -0,0 +1,5 @@
+RUDULRLLUULRURDDRRUDURULLLDRLRLUDDLUDUDDUDRRDUDULDUUULLRULLRLDDLDLDDRLRRRRUDLLDDUULDRLLUDDRRUURLULRRRDLLURRUUDURUDDURLUDDDLUDDUUDUURUDLRDRDRLRDRLDRUDRUUDLRDDRRURDDLRDDRRURDUDDLULLUDRURURRRLRRUDUULULULRRLDLUDUURRLLRUDLLDRDDLRRRULRUDLULDDLLLULDLRUDLLLLRDDLRDRLDRLLRDRRDLRDULULRLLLDRUDRRRUULRUULDRURLUDRURRDLLDLRDLDDDDRRLUDLRRLUUUURDRDDLRRURURRDUULLRLURLURUDDDRDURDUUDRLRLRRLDDLDLDLDDDUDDULURLDDLLRLRRDULUDDLULRLUDDLDLRULUUUDRLDRUDURLUDDRLLRUULDLRRRRDLLLLURULLRDRRUDLUULRRDLLRLRLUDLDDULLDLLRDLDLL
+LLUUUUUUDUDRLRDRDLDURRRLLRRLRURLLUURRLLUDUDLULUURUUURDLUDLDDLULLRDLRUULDLRDUDURLLDDUDUDULLUDDUULLLUULRRRLULRURRDLRUDUDDURRRDRUURDURLLULLRULLDRUULLURLDRDUUDDDDDDRRLDRLRRRLULDDUURRLLLLDRURLURDRDRDURUDUURRDUDUDRLLUUDDRLUDDDRDLDLRLDRURRDLLRULDRLLURURRLUULLRLRRURDDRDRUUURUURUUUDLLRRLUDRLDLRLURLDLUDDUDDDLDUDRRLDLRURULRLLRDUULURRRULDLLLRLDDDUURRRRDULLRURRLULULDLRRUDUDDLRUURDLDUDDUDRRDLRRRDUDUUUDLLDDDDLURLURRRUUULLLULRRLLLLLLULDUUDLRUDRRDLRDUUDUDLLRLDLLRUURDUUURUUUDDLLUUDLULDURLULULUUUDRUDULLURRULRULLRDLDDU
+RLUUURULLDLRLDUDRDURRDUURLLUDDDUULRRRLRLURDDRUULUDULDUUDDDDUDDDDRUDDLDUUDRUDLRRRLLRDDLLLRLLRUULRUULDDRURRLURRLRLULDDRRRDDURDDRDRDULRUDRUUDULRLLULDLRLLDRULRDDRRDDUDLRLLUDRDRRRLUDULRDLRDDURRUUDDRRUDURRUUUDDRRDUDURLUUDUDUURDDDLURLULLUULULURUDUUDRUDULLUUULURDLDUULLDDLLDULRLRLRDUUURUUDLRLDURUDRLDULLUDLDLLRDUURRDUDURLUUUDLLRRULRLULRLDLLURDURRULRLLRRDUDLLRDRRRRDLUUDRUUUDDLRLUDDDDDDRURRRUUURRDLLRURLDDLLDLRRLLLDRRULRRUDLDRDDRRLULURLLUURURURRRRUUUUURUDURLRLLLULULDLLDLRDRRULUDUDRDRRDRDRRDUDLLLRUDRUDDDULRULRRRDRLRUUUURUDURDUUULLULRUDDULDUUDLDURRD
+ULRULDDLDLULLLRRRLRUDDDDDLLDDUDLRRDULUUDRDLRRURDRRLUULRURUDRRULDLLLUDRUUDULULUDDRUDDDRDURRRDRDUUURLRDULUDRDRLDRUDDLLLDRRULUDLUDLDLLRRUDUULULDLDLLUURDLDDLLUUDURLURLLLDRDLDRRLRULUURRDRULRUUURULRRUDDDDLLDLDDLLRRLRRRRDUUDUDLDRDRRURDLRURULDLRDLLLLRUDRLLRDLRLRDURDRUDURRRLRDRDLLRLUDDDDRLRLLDUURRURLUURUULUDLUURDRRUDDLUDUDDDURRDRUDRLRULDULUUUUUUDDUDRUDUUURUDRRDLUDLUUDUULUDURDLDDDLLURRURUUDUDDRRDRLLULULDRLRURRDDDRDUUURDDDRULUDRDDLDURRLDDDLRRRLDDRDURULDLUDLLLURLURRLRRULDLLDDUDRRULDRRRRLURRUULRRRUDLURDLLDLLDULUUDRRLDLLLDRLRUDLUULDLDRUDUDURDRUDRDDDLRLULLUR
+LRLUUURRLRRRRRUURRLLULRLULLDLUDLUDRDDRLDLRLULLURDURLURDLLRLDUUDDURRRRLDLLRULLRLDLLUUDRLDDLLDRULDRLLRURDLRURRUDLULLRURDLURRURUDULLDRLLUUULUDRURRUUDUDULUUULRLDDULDRDLUDDUDDDLRURULLDLLLRLLUURDLRUDLLLLDLLRLRUUUDDRUUUUDLDLRDDURLDURUULLLUUDLLLLDULRRRLLDLDRRDRLUDRUDURLLUDLRLLUDUDRDDDRDLRDLRULUULDRLUDLRLDUURLRRLUDDDUUDDDUDRLDLDUDLURUULLDDDURUUULRLUDLDURUUDRDRURUDDUURDUUUDLLDLDLDURUURLLLLRURUURURULRULLRUDLRRUUUUUDRRLLRDDUURDRDRDDDUDRLURDRRRUDLLLDURDLUUDLLUDDULUUDLDUUULLDRDLRURUURRDURRDLURRRRLLUUULRDULDDLDUURRDLDLLULRRLLUDLDUDLUUL
diff --git a/2016/aoc2/src/main.rs b/2016/aoc2/src/main.rs
new file mode 100644
index 0000000..f4c3bfd
--- /dev/null
+++ b/2016/aoc2/src/main.rs
@@ -0,0 +1,61 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+fn main() {
+ let lines = read_file();
+ let mut current = 5;
+ for line in lines {
+ current = line.chars().fold(current, |current, dir| move_char_hex(current, dir));
+ println!("{:X}", current);
+ }
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
+
+
+//assume current in 1-9 range, and char is in UDLR
+fn move_char(current: i32, dir: char) -> i32 {
+ match dir {
+ 'U' => if current <= 3 { current } else { current - 3},
+ 'D' => if current >= 7 { current } else { current + 3},
+ 'L' => if current%3 == 1 { current } else { current - 1},
+ 'R' => if current%3 == 0 { current } else { current + 1},
+ _ => panic!("Bad direction character")
+ }
+}
+
+// 1
+// 2 3 4
+// 5 6 7 8 9
+// A B C
+// D
+fn move_char_hex(current: i32, dir: char) -> i32 {
+ match dir {
+ 'U' => match current {
+ 1|2|4|5|9 => current,
+ 3|13 => current - 2,
+ _ => current - 4
+ },
+ 'D' => match current {
+ 5|10|13|12|9 => current,
+ 1|11 => current + 1,
+ _ => current + 4
+ },
+ 'L' => match current {
+ 1|2|5|10|13 => current,
+ _ => current - 1
+ },
+ 'R' => match current {
+ 1|4|9|12|13 => current,
+ _ => current + 1
+ },
+ _ => panic!("Bad direction character")
+ }
+}
diff --git a/2016/aoc20/Cargo.lock b/2016/aoc20/Cargo.lock
new file mode 100644
index 0000000..26be916
--- /dev/null
+++ b/2016/aoc20/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc20"
+version = "0.1.0"
+
diff --git a/2016/aoc20/Cargo.toml b/2016/aoc20/Cargo.toml
new file mode 100644
index 0000000..4c1e873
--- /dev/null
+++ b/2016/aoc20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc20"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc20/input.txt b/2016/aoc20/input.txt
new file mode 100644
index 0000000..c3e912f
--- /dev/null
+++ b/2016/aoc20/input.txt
@@ -0,0 +1,1104 @@
+272152717-281364173
+480675455-489214207
+3562619188-3566180938
+474796666-476679929
+1859288016-1859426304
+3500809029-3520779986
+1711620671-1724624325
+376497036-379822744
+2334350029-2336872286
+2880314906-2881510051
+257912946-260566708
+2964360275-2973540924
+889696219-900080622
+2727172832-2737372242
+33674001-51133436
+2718782366-2736816045
+41293631-52546854
+1064827080-1071610531
+1373807967-1374769067
+3261078460-3268114587
+1583129312-1602482863
+1605269651-1617971405
+365345542-377782493
+2858099254-2862714857
+1147380159-1156709753
+1087934555-1093750979
+998603437-1001868893
+234297440-245049936
+427084952-449321291
+3115490453-3126172818
+0-166475
+2859739533-2864404117
+2879116214-2888999956
+4166942312-4169074982
+2693533587-2694200673
+84162473-84534337
+2164071501-2168305216
+3745751095-3750043362
+2647427848-2647977897
+2028900925-2034847596
+876886411-878398110
+2589041333-2589873869
+876959837-878627172
+431139724-458304869
+1877994382-1887344924
+473575203-475773145
+252091135-257535969
+177110001-177143710
+2722497928-2723521816
+2208127-2536514
+1748077674-1751224226
+2362936907-2381045647
+2020385448-2029519771
+3108825744-3123438032
+872292652-885764819
+305053947-314709696
+2717924562-2718755692
+48149217-51160833
+2149726170-2150134226
+1729844094-1745733187
+1375741284-1378782323
+3744515388-3761146958
+78523085-78634151
+1634372345-1650424418
+3199349237-3209140394
+2011853949-2039316392
+769580925-794759455
+3841896290-3862358298
+3360393034-3379747723
+1120644472-1134516526
+815948131-837832345
+1590411139-1596337230
+2894381219-2935549329
+3688775236-3725245783
+963257634-966114246
+3566641344-3578334024
+1402589368-1434296916
+2742164387-2746045182
+3336884060-3357139723
+1529922302-1532912060
+812048355-820600359
+3535903629-3546917858
+3793132304-3794479774
+2441870431-2446591046
+790688046-795287265
+1094905232-1100177740
+2745878705-2749992348
+119256353-127273572
+3046258846-3057351205
+1754142948-1755600336
+1439035504-1441512409
+2099760008-2108426979
+2336936249-2337901885
+886155227-897744302
+278389264-304413122
+2261948686-2274345666
+3650645303-3661861270
+574462284-588550773
+1759196520-1782105094
+965026392-968307163
+2946755906-2963417308
+1766330775-1797112785
+1200115116-1225710522
+2080628180-2093783866
+2259186780-2265576012
+3422484974-3431403368
+2617357126-2619542029
+3535424340-3544236729
+1159703397-1178419333
+3695852451-3731387995
+2624409231-2626475102
+2462304649-2486546066
+1991659530-1991878310
+3675781139-3676295005
+3077370804-3098240471
+2410139047-2412323245
+1441379095-1464833739
+4254940654-4257828865
+3134602505-3135787446
+1531285367-1533939508
+1982248547-1989219645
+3717359312-3718050739
+1149793223-1159703395
+1718841131-1723739366
+1338353885-1363179561
+432322947-450369838
+3592044590-3598404106
+2783263665-2802135338
+2743201911-2758731127
+2940668500-2946140977
+3588363275-3594330069
+3675945049-3679197388
+154488705-187446525
+1653195306-1670854086
+2771303647-2772439896
+84146114-84264353
+1593778990-1622000763
+1580746474-1580917737
+801556682-801983712
+2268279290-2282899033
+3429390560-3432646573
+1355690206-1364432183
+3364827834-3370027309
+1343867080-1356033542
+2769747098-2802096717
+2451978746-2499145061
+3181481071-3202130015
+149287453-193454621
+2907925124-2933668261
+3525815495-3531996642
+892781900-902374081
+801983714-808209514
+1205516416-1207518863
+3475944050-3479276890
+1680662691-1693249318
+441188152-451875207
+3866263742-3869203885
+872306827-886155226
+3641638239-3656867109
+1292372277-1314188693
+1062559245-1064950825
+2334198700-2335529918
+1122962410-1136372412
+623323144-625918342
+2425193847-2429793856
+373315052-379611660
+2418007458-2424289401
+2149571480-2150070836
+1991878311-1994706041
+3043381174-3046887777
+497434379-500148281
+1825422529-1838184381
+137450473-139095016
+248808686-249748629
+1989969134-1990676913
+960553017-960915199
+2336374612-2337150925
+3369599561-3390928276
+113852260-145672651
+2986681144-2989530365
+3856382204-3873203604
+1657674792-1663548211
+2650185850-2651060935
+1647983099-1662799191
+1082357088-1112329267
+3793767754-3794336046
+3705877748-3728561957
+2769813898-2772369413
+3794164058-3801441915
+623200755-625407322
+1241966895-1253020214
+450369839-463131291
+2717038617-2723107862
+961267447-962353699
+193454623-196340979
+4253667440-4261704870
+3269563154-3275293388
+1505893371-1506880655
+3873203606-3889412741
+443548825-444733658
+3045753812-3049382630
+732764611-733035245
+961034623-961300670
+1373470559-1373526698
+2860192109-2867276065
+3312623058-3313008029
+3942424007-3951811891
+1197857710-1214225356
+458105388-462489469
+4259123154-4263336824
+960863927-961733781
+44819071-52470556
+957158383-958041099
+2543986743-2554322396
+339721933-346413740
+1010736956-1030771663
+4288781458-4289261456
+3687051286-3722932714
+2420813443-2424860115
+1989395087-1989698527
+3473694511-3476125935
+2408526816-2412196386
+1989398215-1991201331
+1526350090-1542206580
+2394556084-2399639414
+3510330656-3522250181
+137874061-144376880
+4167095310-4177987517
+2785359721-2785427263
+15024863-23531388
+1625174667-1658679299
+974122151-995631685
+1540947566-1554930456
+2424921025-2429636819
+1993822183-1994839237
+1094823818-1097108689
+69796587-71291314
+37126017-49427721
+3793022166-3794100162
+908189684-911496714
+2911211968-2917349047
+1227212686-1234159311
+3776286544-3783635666
+3531996644-3536250992
+3396302214-3406687062
+1476456536-1478818018
+2443497737-2447228620
+962292354-965288690
+1833703443-1843811212
+998277195-1000562480
+883225973-896212798
+2202815121-2215802598
+3557733372-3563107357
+2648035823-2649474134
+2723831559-2734044916
+1714279973-1738575730
+110217-574651
+1398965758-1409470798
+2330603686-2335139291
+1506286657-1511280423
+3365567975-3371386015
+466326205-480223737
+1989219647-1989438488
+3008188882-3010347685
+1070925288-1071665482
+2111554226-2123836945
+2137226110-2138852181
+1081261041-1091870264
+1081552237-1090538414
+2000657198-2037677988
+2718009384-2720142472
+925940762-939052067
+4179143261-4191765704
+3426378774-3430410036
+3676393933-3680167774
+3271833171-3277125583
+274414401-283893852
+3124560226-3128380638
+1208163309-1215074110
+2465798305-2494706753
+3050317115-3058897888
+1302678331-1315210828
+1751224227-1758206846
+931444766-948598982
+151669773-180559543
+255864690-255985990
+1556987318-1563743144
+16294070-23923782
+1415762720-1421421169
+3853344243-3864268114
+1280237454-1286328218
+2944350248-2976813361
+2187770126-2203436268
+3505239916-3517301515
+3232015564-3235367871
+2146211145-2166090499
+910952647-911877073
+1579658725-1581392690
+1237242317-1258610777
+2589766513-2598433041
+3449310840-3449858133
+745819525-755688297
+3776094116-3783478049
+2108426981-2124149170
+3449389881-3462604413
+2301503968-2324628965
+1005263513-1027181473
+1952664131-1969650551
+1285113553-1288652959
+3896408883-3908694324
+1920600328-1921999554
+1025403493-1031247416
+3905769594-3930128244
+1031247417-1047578444
+3885007170-3895219247
+3598377658-3599404192
+1697890477-1697912613
+954538505-957768997
+2816494072-2842728200
+492165035-498202012
+3137181704-3152588209
+1755735260-1759196518
+1371495492-1371550991
+2501923864-2514064340
+305959083-311818120
+4250019192-4275532230
+114168261-116414851
+2447228622-2451978745
+766211517-801556681
+3376445798-3394303381
+3501155911-3526104374
+2548986102-2564634962
+3263667615-3270390046
+1807095399-1824137700
+856041972-859823687
+3887315148-3892355947
+1030764665-1045428052
+638833662-640333593
+2121184882-2129744090
+2881011537-2885878144
+3588560066-3597713320
+3124980377-3134500989
+489214209-512240639
+3760702359-3764383643
+1090166392-1096894006
+917419134-922706929
+1296067761-1309424658
+689572986-696039127
+2660085630-2660431880
+680230992-716886780
+1592087783-1598197492
+1530767294-1575862739
+2082087967-2085220519
+2424541691-2426736024
+113504564-116385542
+1916132714-1932780572
+503684477-512284558
+2615977363-2622859043
+4035141786-4047227590
+1663548212-1680662689
+3047614614-3051657189
+2634680042-2641014306
+2583260376-2591896929
+2645275066-2647436256
+64047546-86026817
+1071039399-1072162085
+2594771897-2599508024
+83962861-84534191
+902374083-941216585
+2586806577-2599448524
+1274245593-1274516893
+4031038177-4040911753
+983068813-998624841
+534906133-573925401
+3329216543-3336884059
+4125892395-4138236492
+3807924665-3812644495
+1774911-2450996
+446418646-455236779
+2877486448-2884177700
+1373832888-1373901196
+370639181-384962937
+12016954-19316517
+3134500991-3134627688
+1373501126-1373590483
+1777703220-1777741597
+3743473590-3769013947
+2353521003-2362936906
+2468617254-2477279185
+78550601-78698869
+1273031112-1274488766
+968052409-969178069
+3907082563-3913084150
+3322437732-3338709909
+970661335-978617986
+2985507999-2990149897
+1499815926-1518480568
+2047086312-2056763544
+3154050192-3178489168
+1544927329-1559460655
+614918489-621719308
+3733606954-3743473589
+1499734003-1505336823
+1765493480-1780907733
+1112329269-1144192156
+1908189573-1916132712
+2978158245-2980295974
+854842773-855564041
+3851762797-3856667050
+2987912828-2988480807
+3845355673-3864117699
+2372563028-2379155071
+4164107384-4175248779
+206495443-209268583
+2893360924-2906330615
+1374122783-1374244946
+1315210829-1323332739
+2819221138-2820241142
+2987725800-2988399994
+3420480297-3426061444
+1745733189-1750260936
+2771579434-2772910814
+1721651362-1731098010
+1200223043-1222602885
+3431337889-3434193062
+2412323247-2441870430
+3756861847-3771488683
+853629069-857835277
+3744664061-3763198907
+1371491558-1371529465
+1932780573-1939156498
+3661861272-3662675926
+2648267077-2650619730
+3366486664-3371903512
+1268371412-1276470615
+2691106038-2691272785
+3227264064-3240740070
+1906133184-1910990608
+3853470102-3865286420
+2646285040-2646358000
+2196926231-2206264598
+4257710901-4257836607
+242078367-255972629
+4198987003-4201086361
+1240990629-1248211769
+2749992349-2760767131
+2787866331-2806708160
+809302575-853629067
+3032053776-3036049062
+2943717702-2946230991
+4288724821-4289568650
+3215397670-3224618461
+1858955725-1859353621
+2083864513-2101037055
+694973182-718973623
+4168983031-4174451494
+2807055496-2816494071
+1055347167-1064190974
+3424907263-3427071583
+859417782-872292650
+1467661058-1474811610
+2393002352-2403005964
+4197417217-4208856131
+3370246481-3375696999
+1373468974-1373569404
+2905152772-2910933373
+1980855826-1983920990
+732863279-733152241
+4285742284-4286129026
+1614476697-1614835826
+2635427600-2644232203
+1470741851-1479153638
+2944130276-2951908714
+4291064131-4293894991
+1990921080-1991701381
+4227850767-4244632336
+1807565528-1814396331
+2361860677-2376637038
+2943119919-2945768965
+2172859679-2221926662
+249198701-250135569
+2652844144-2657371637
+1885639221-1900413603
+1509729634-1512261818
+3004310417-3011080364
+1694482383-1697891607
+4177987519-4212820708
+4161048921-4161074968
+476220543-480675454
+2588894890-2592105515
+2757311298-2758434349
+4050934926-4082396822
+2034604741-2043305856
+2331464398-2333528059
+1066956928-1067355622
+2646313639-2648035821
+2066636902-2067863299
+2332503976-2334659414
+3180110462-3204410296
+577236362-586064251
+256418607-258764997
+2233705634-2248146735
+3716569187-3719939659
+1386717710-1439035502
+1859175593-1859580659
+3708021302-3722129580
+3976120818-4005662251
+304413124-306709976
+1395309937-1427985546
+4226665082-4232713677
+4212820709-4214429692
+1693249319-1711620669
+2499145063-2503398930
+3721989699-3733606952
+1717757397-1721218576
+1127769041-1132781724
+3644972707-3646872069
+2077152015-2084609524
+1990599678-1991511335
+2335139292-2353521001
+4088569210-4091483373
+1642017342-1657864055
+2588719725-2589121881
+2903005844-2913683635
+194715771-196440167
+3963719430-3974518407
+4288320832-4289172749
+3151726457-3165427383
+23507982-23800784
+2895160172-2940456225
+1001177233-1005263511
+43609109-48863103
+1144192157-1157514424
+734439882-765944362
+695965351-719454865
+856803507-869754401
+1890217805-1904089509
+3300131715-3305283163
+1529237006-1529595328
+2753090359-2757523819
+828668586-831203389
+3427619213-3428732628
+2967859507-2976560941
+2329569453-2332265395
+2239885549-2252296728
+1293808207-1320485733
+2604175022-2624108715
+2697882453-2723829703
+2463205201-2470677980
+3888353469-3890883045
+400102191-427084950
+4150245199-4164107383
+1395492363-1406000929
+3675122217-3676808853
+116414852-148746047
+787563761-789069064
+3197100188-3202418404
+1373782716-1373895006
+2617111647-2617819575
+2550216289-2557881293
+1851804917-1852370216
+2617793199-2618721355
+1939113565-1942772474
+1066259539-1066964651
+2536515-2749485
+3851513911-3872830251
+3315330215-3350319238
+1372313956-1373952939
+270099979-278389263
+2861061889-2874958905
+2982764434-2982918860
+1225710523-1232594859
+3080849793-3087237669
+2168507276-2172859677
+2554045929-2558669015
+2715737041-2742164385
+2564405335-2570912208
+3111405671-3131810967
+1881537985-1906133183
+2327518639-2329278606
+1695964017-1700687554
+2325334299-2328665915
+2329084251-2329569451
+2526389631-2574332443
+2716903062-2718451591
+177141073-177775415
+177103338-177124151
+1072162087-1081552236
+3178535948-3199349236
+2293206667-2314675667
+1889288474-1903754822
+4251848410-4278329656
+697896245-706915923
+1811201479-1827334058
+102113146-112076690
+2390223078-2399260655
+829332527-848880205
+3861878449-3866482364
+1213011864-1220748067
+3580711167-3587101215
+1286680169-1311818230
+3608853495-3610981230
+1511277091-1513257838
+3450147668-3459285977
+2780989504-2803855679
+3882846313-3888163900
+941216586-953952178
+2983401144-2988059936
+2624108716-2624926759
+3402309579-3420480295
+3312749262-3314042171
+3399699391-3418732708
+4105670961-4129433645
+4257493527-4284962279
+23923784-47709067
+953952180-957049748
+2876724088-2878697891
+2416003985-2423463911
+740946393-742024905
+1380318986-1386717709
+2026496387-2041982393
+3072950856-3095969673
+196440168-234297438
+3324520138-3350841770
+1184551931-1197857708
+3723507322-3732029196
+1781641387-1785877866
+2407131596-2409544298
+5689429-5741644
+1739110416-1741141505
+2548794765-2558310137
+808209515-836691306
+2657455751-2663837619
+790539346-793059170
+568516293-569131984
+3321930331-3346790026
+472011317-479941460
+857857646-863011064
+4168502125-4170164107
+588550774-597747807
+1637815642-1662350209
+2460793334-2466026338
+958041100-970661333
+2139217624-2146211143
+2539598-2830629
+1266192646-1268371411
+1323332741-1335959162
+1439736912-1446610546
+4061001198-4065392221
+2524105557-2526389630
+2222452808-2225462596
+1388815777-1397555491
+3612936376-3650645302
+3045926276-3065706826
+3574212945-3575594696
+2827277916-2836024368
+1991475869-1991926125
+3505806023-3528702608
+2414724634-2430851599
+3021588078-3028285988
+2574332445-2592271496
+2057264136-2059202053
+3244432520-3248685694
+1712738962-1729844093
+56528833-64047545
+2971719660-2977620581
+3605787690-3611524810
+3851574035-3854062441
+1235784822-1266192644
+3006793176-3021032700
+3900016789-3922138525
+1234159313-1235784821
+455883118-466326203
+1053312381-1063953379
+2820222101-2821175967
+2502044549-2506260381
+568736374-569251939
+1578664897-1579658724
+344106424-350103368
+1590175536-1595299212
+2273779785-2277363906
+3984562197-4010152611
+45721618-54860968
+3394303383-3402309578
+1511624839-1512608254
+3884829071-3890292172
+2038966626-2047086310
+4103290900-4119641469
+3357139725-3360393033
+2780813493-2807055494
+2225462598-2252329658
+2592271497-2604175020
+1049541136-1055392314
+1533973152-1578664895
+3209140396-3244432519
+3135787447-3178535946
+1873694527-1911946735
+3716488307-3717917511
+1863079077-1868159650
+1852620713-1869463034
+2340761-6722844
+4010806326-4011637774
+2335714002-2344955062
+2503398931-2516105578
+4096488349-4097750835
+495702052-499886980
+2633949022-2643879390
+2230563996-2248676097
+1992368509-1995459736
+725466259-734439880
+3284564906-3289305182
+3006621951-3015555807
+2221926663-2224742001
+1807424325-1816026389
+1876686839-1880758503
+2691158517-2691387740
+3757816372-3758051212
+2956964132-2972741344
+2636000153-2638744402
+678819639-679798433
+250063049-250516719
+3855876124-3866454360
+3312438883-3313193146
+82686086-84339480
+1092916631-1107918456
+1843811214-1852620712
+3809172487-3830073502
+2616993454-2620553751
+2682855477-2715737040
+3863648987-3866503080
+1271724277-1275741880
+2384026814-2393286163
+2957501262-2965749150
+4213745292-4214551645
+2556715457-2565699508
+2263615-2555032
+2510926180-2524105555
+2198333368-2201790504
+983311745-991202543
+326387197-344106423
+3087807140-3088895982
+86026819-109305037
+2504533668-2507452669
+1371550992-1377668791
+1656901715-1676675657
+130445224-140364961
+875328099-885585914
+2299489843-2306253705
+3450835271-3481339653
+4014358521-4031038176
+2340311395-2351064022
+2883149064-2887845481
+2259592077-2278614136
+3810542228-3827200634
+3056035363-3068664010
+722584522-723699159
+1735688023-1740818227
+3537763412-3542953759
+2366293314-2375211143
+1411814377-1424672790
+3100999210-3102484531
+4284962281-4294967295
+1446610547-1465468961
+2874958907-2877486447
+1765556195-1793446949
+4218980804-4226442852
+494048500-497170493
+360027343-374159699
+2651399811-2665409613
+1047578446-1052368079
+2362920294-2374232484
+2570748019-2571266639
+3256410480-3277105765
+3771488685-3794388011
+722551086-722999678
+741060508-762846249
+1479919768-1481248209
+614971153-617471673
+2982621961-2982812184
+2087732105-2106406062
+2302394373-2326071906
+886110869-893987869
+864175670-867272025
+2119076394-2126808897
+1051546928-1062419089
+678814708-679604844
+2168305217-2172141567
+2943803911-2945854166
+321232218-329790306
+391378250-412099930
+539629846-568721146
+3794388012-3806424827
+2894304683-2915255653
+856495621-857857645
+2743551156-2751996369
+1024955451-1026100964
+177078688-177123406
+4018256524-4039886263
+3945209398-3956309725
+2364930647-2378530823
+1006976522-1021887240
+3757741995-3757947507
+1421470109-1432888460
+3160832331-3169658872
+177045468-177087638
+1090463009-1104430857
+1274373481-1274578120
+2626475104-2640453818
+3284290551-3288427229
+1981618690-1984277097
+1186456381-1195032668
+5052363-7502553
+1509795877-1512150519
+3579924616-3582548171
+4121363479-4137513284
+1488580398-1503472581
+2423275742-2439608584
+2138662322-2138915998
+1382223606-1410305514
+3832391075-3853706505
+1614422103-1614651523
+3369142704-3373032779
+719454867-725466258
+2084732810-2095200322
+1442897307-1457439380
+2112887248-2129529980
+4023595164-4025287662
+611715160-617013605
+778751841-791194910
+3293566719-3305859750
+1772772441-1797304174
+1589764874-1592539287
+1373791581-1374176540
+1590792815-1594025491
+1981551967-1982435626
+1520347646-1542585100
+3099494317-3115490452
+3098240473-3103804691
+3264851832-3269554326
+766110784-766211515
+2019539430-2044044979
+3266317108-3273234008
+1274283817-1274437178
+2650371073-2672921107
+2672921108-2679629874
+2673449969-2682855475
+765944363-766205817
+3853706506-3859959741
+1508362252-1513253382
+876916046-879636492
+3809955806-3810745183
+1274121584-1274542630
+3157351170-3166046719
+1053524276-1064827079
+3791652757-3800601148
+2842728202-2853639142
+3571512615-3579166854
+679353613-679923926
+3809191752-3810740480
+2817388396-2819591739
+2852317315-2861061888
+4256942395-4260208971
+3501898903-3512880687
+3882475326-3886137014
+1966578885-1968167855
+410700018-415718837
+3806424829-3821851233
+1518480570-1533973151
+3147464447-3158958125
+197786374-207567591
+3535028299-3539195436
+4184714120-4186894005
+448892515-456388417
+671686622-678352726
+1360272787-1363580702
+2164873145-2165892440
+3361616306-3375689123
+3091164847-3093370647
+3297273994-3311056250
+398273343-404652855
+1782105095-1803766701
+1484145894-1503189992
+2160023298-2160172849
+2919583395-2932229908
+2812705686-2830443941
+2855216236-2865262494
+148746049-149287452
+589888575-595456264
+314410823-316970816
+2060986022-2063938184
+1803766703-1825422528
+2128237894-2139217623
+4248957737-4257018408
+3561933398-3574109426
+1614389854-1614749576
+468854062-476024564
+436179755-463764255
+589811734-589875676
+673967863-678814706
+979844884-993353080
+1945908845-1980551520
+1990017551-1992668548
+1252508632-1256783095
+2946230992-2982621959
+3954810178-3972017471
+3396778325-3399315311
+3331661742-3344656790
+3072306192-3077370803
+4093061872-4094625093
+2876543933-2878230248
+2854310965-2859128779
+4193316980-4200095285
+730205666-732782756
+3676211467-3676732582
+666890880-674578243
+1371568734-1380318984
+4184744194-4187112660
+1481248211-1499734002
+3379867668-3385527932
+1622428665-1625174665
+3671900758-3678171048
+3705951043-3716692751
+1465468963-1479919767
+1580610051-1583129310
+350103370-365345541
+3900102077-3919890024
+2940456227-2945966226
+3248685696-3284290550
+544295457-564157394
+4016705659-4021147057
+791731732-797225629
+1165689597-1184551930
+3289305184-3312438882
+4097750837-4102130426
+4055841302-4077041304
+3441155355-3450835270
+3314042173-3333554945
+597747809-623200754
+356234097-366220597
+2381045649-2408455595
+4047227592-4049208360
+4092327831-4093008849
+3986217544-4010716485
+3587101217-3589409982
+3939796675-3976120816
+1335959163-1365648715
+3809562980-3810806981
+1374160507-1375189297
+1229723962-1229853859
+2978027850-2978555872
+1081232290-1096685438
+3431403369-3441155353
+3058481098-3072306190
+3615995822-3647806423
+626772256-671686621
+1922970278-1932303880
+687812741-696977728
+3664395391-3676520369
+2073554869-2099760007
+512240640-534906131
+47709068-56528831
+255985991-270099977
+3481339655-3501155910
+2238475796-2249793376
+3866035083-3867269474
+4093117795-4094756619
+4285929403-4287400825
+702714634-707275982
+3036049064-3058481097
+1027080396-1032733050
+113815262-115324511
+2256577067-2275122653
+1990217023-1991256560
+109305038-113504562
+978617987-1000518126
+4057509129-4071389442
+3739975721-3747173973
+320182613-320260227
+1770166-1994691
+291087466-296873313
+4086243810-4096488348
+1276470617-1302918078
+4009439486-4012738003
+4229206868-4234285011
+50143427-53071093
+404422891-410359316
+4161013486-4161053283
+911138009-929609461
+689609396-696731723
+2252329659-2256577065
+613133080-613942155
+4795688-12016953
+641672798-650081964
+389776265-420161914
+3625922134-3642274972
+1846384495-1862435820
+2275122654-2286941521
+4005662252-4011759888
+1579087992-1581111352
+574652-1770165
+1442180635-1450176908
+2760767133-2771395260
+1928232572-1932533591
+102995855-104909244
+4049179426-4050691624
+2830630-3651339
+3552827772-3568200782
+2149613227-2163021264
+1355394428-1371491556
+1697279405-1703102679
+2056763545-2073554867
+3935325191-3944187216
+3553082925-3579924615
+471239627-477134321
+3651340-4795687
+336457769-347991249
+93183635-111293337
+2192128388-2196145589
+2584811687-2598361179
+2772743660-2798530311
+966574237-968633571
+4234775226-4245296919
+3662498499-3663349534
+1373549652-1374239894
+58302860-63670232
+1942772476-1980855825
+3367790115-3376760130
+153092723-163571711
+729975675-730335988
+2192513622-2204700032
+809609217-841628900
+1180032684-1187000735
+1179227554-1195640753
+4232727143-4234293540
+1127122996-1154171178
+314709697-321232216
+324796849-347951368
+1095126621-1109642108
+384962939-400102190
+363929652-366175319
+3821851234-3832391073
+338713138-348077886
+817486506-837487497
+1051940232-1067333023
+19243172-19587047
+257512323-261464746
+1753791137-1753975241
+202493249-230688701
+1579363284-1580767164
+2763246325-2780813492
+2242297310-2249800231
+1995459738-2019539429
+573925402-574462282
+3673851405-3681451655
+3423327301-3428356692
+3681451657-3695852450
+3717161710-3718982299
+2043127586-2043244031
+2888999958-2894304682
+2061236903-2067109739
+2643879391-2646512593
+1139540259-1146292375
+3544236730-3552827770
+2287385837-2325334298
+3598404107-3612936374
+3623885184-3631095478
+1752497514-1756572770
+2817718245-2824409717
+679569338-680230991
+4102130427-4150245197
+1869463036-1881600179
+286732642-289325518
+2995454654-3032053775
+1274816430-1274830828
+4008677258-4014358519
+248491486-248842325
+1622000764-1625125474
+1165689487-1187305806
+3937241402-3968405869
+4050691625-4086243808
+3663349535-3676933438
+2982918861-2995454652
+1372603515-1379417540
+2408455596-2411739453
+201820937-227275418
+1753934804-1754073983
+2280075243-2287385835
+2905919817-2917493149
+2757562598-2759204124
+1444583282-1458937548
+1699259773-1707790200
+1579284365-1579540410
+624710045-626772254
+2971742099-2980188298
+3895219248-3896408881
+1637216769-1663878490
+1606776283-1612157133
+1527331165-1569579671
+1468822607-1477434547
+3930477156-3939796674
+4214551647-4234775225
+1469208064-1469259449
+4245296921-4257493526
+3930128245-3930477154
diff --git a/2016/aoc20/src/main.rs b/2016/aoc20/src/main.rs
new file mode 100644
index 0000000..ee14583
--- /dev/null
+++ b/2016/aoc20/src/main.rs
@@ -0,0 +1,114 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::u32;
+
+#[derive(Debug)]
+struct IpRange {
+ start: u32,
+ end: u32
+}
+
+impl IpRange {
+ fn new(start: u32, end: u32) -> IpRange {
+ IpRange {
+ start: start,
+ end: end
+ }
+ }
+
+ fn contains(&self, other: u32) -> bool {
+ self.start <= other && other <= self.end
+ }
+
+ fn try_combine(&self, other: &IpRange) -> Option<IpRange> {
+ if self.contains(other.start) && self.contains(other.end) {
+ Some(IpRange::new(self.start, self.end))
+ }
+ else if other.contains(self.start) && other.contains(self.end) {
+ Some(IpRange::new(other.start, other.end))
+ }
+ else if self.contains(other.start) && other.contains(self.end) {
+ Some(IpRange::new(self.start, other.end))
+ }
+ else if other.contains(self.start) && self.contains(other.end) {
+ Some(IpRange::new(other.start, self.end))
+ }
+ else {
+ None
+ }
+ }
+}
+
+fn main() {
+ let mut ranges = read_file();
+ optimize_ranges(&mut ranges);
+
+ let mut allowed = Vec::new();
+
+ // current will be in the u32 range while it's in the loop, but
+ // needs to be a u64 to pass u32::MAX. Otherwise it will just
+ // overflow and run forever.
+ let mut current: u64 = 0;
+ while current <= u32::MAX as u64 {
+ match ranges.iter().find(|range| range.contains(current as u32)) {
+ Some(blacklisting_range) => {
+ current = blacklisting_range.end as u64 + 1;
+ },
+ None => {
+ allowed.push(current as u32);
+ current += 1;
+ }
+ }
+ }
+
+ let min_not_in_range = allowed[0];
+ let allowed_count = allowed.len();
+
+ println!("Min not in any range: {}", min_not_in_range);
+ println!("Allowed count: {}", allowed_count);
+}
+
+fn read_file() -> Vec<IpRange> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .filter_map(|line| {
+ let line = line.unwrap();
+ let mut split = line.split('-');
+ let start = split.next();
+ let end = split.next();
+ match (start, end) {
+ (Some(start), Some(end)) => Some(IpRange {
+ start: start.parse().unwrap(),
+ end: end.parse().unwrap()
+ }),
+ _ => None
+ }
+ })
+ .collect()
+}
+
+fn optimize_ranges(ranges: &mut Vec<IpRange>) {
+ let mut before_count = ranges.len();
+ let mut after_count = 0;
+ while before_count != after_count {
+ before_count = ranges.len();
+ ranges.sort_by_key(|r| r.start);
+
+ let mut i = 0;
+ while i < ranges.len()-1 {
+ match ranges[i].try_combine(&ranges[i+1]) {
+ Some(combined) => {
+ ranges[i] = combined;
+ ranges.remove(i+1);
+ },
+ None => {}
+ }
+ i += 1;
+ }
+
+ after_count = ranges.len();
+
+ println!("Number of ranges {} => {}", before_count, after_count);
+ }
+}
diff --git a/2016/aoc21/Cargo.lock b/2016/aoc21/Cargo.lock
new file mode 100644
index 0000000..9a1075b
--- /dev/null
+++ b/2016/aoc21/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc21"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc21/Cargo.toml b/2016/aoc21/Cargo.toml
new file mode 100644
index 0000000..bc0d468
--- /dev/null
+++ b/2016/aoc21/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc21"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc21/input.txt b/2016/aoc21/input.txt
new file mode 100644
index 0000000..ebd7d52
--- /dev/null
+++ b/2016/aoc21/input.txt
@@ -0,0 +1,100 @@
+rotate based on position of letter d
+move position 1 to position 6
+swap position 3 with position 6
+rotate based on position of letter c
+swap position 0 with position 1
+rotate right 5 steps
+rotate left 3 steps
+rotate based on position of letter b
+swap position 0 with position 2
+rotate based on position of letter g
+rotate left 0 steps
+reverse positions 0 through 3
+rotate based on position of letter a
+rotate based on position of letter h
+rotate based on position of letter a
+rotate based on position of letter g
+rotate left 5 steps
+move position 3 to position 7
+rotate right 5 steps
+rotate based on position of letter f
+rotate right 7 steps
+rotate based on position of letter a
+rotate right 6 steps
+rotate based on position of letter a
+swap letter c with letter f
+reverse positions 2 through 6
+rotate left 1 step
+reverse positions 3 through 5
+rotate based on position of letter f
+swap position 6 with position 5
+swap letter h with letter e
+move position 1 to position 3
+swap letter c with letter h
+reverse positions 4 through 7
+swap letter f with letter h
+rotate based on position of letter f
+rotate based on position of letter g
+reverse positions 3 through 4
+rotate left 7 steps
+swap letter h with letter a
+rotate based on position of letter e
+rotate based on position of letter f
+rotate based on position of letter g
+move position 5 to position 0
+rotate based on position of letter c
+reverse positions 3 through 6
+rotate right 4 steps
+move position 1 to position 2
+reverse positions 3 through 6
+swap letter g with letter a
+rotate based on position of letter d
+rotate based on position of letter a
+swap position 0 with position 7
+rotate left 7 steps
+rotate right 2 steps
+rotate right 6 steps
+rotate based on position of letter b
+rotate right 2 steps
+swap position 7 with position 4
+rotate left 4 steps
+rotate left 3 steps
+swap position 2 with position 7
+move position 5 to position 4
+rotate right 3 steps
+rotate based on position of letter g
+move position 1 to position 2
+swap position 7 with position 0
+move position 4 to position 6
+move position 3 to position 0
+rotate based on position of letter f
+swap letter g with letter d
+swap position 1 with position 5
+reverse positions 0 through 2
+swap position 7 with position 3
+rotate based on position of letter g
+swap letter c with letter a
+rotate based on position of letter g
+reverse positions 3 through 5
+move position 6 to position 3
+swap letter b with letter e
+reverse positions 5 through 6
+move position 6 to position 7
+swap letter a with letter e
+swap position 6 with position 2
+move position 4 to position 5
+rotate left 5 steps
+swap letter a with letter d
+swap letter e with letter g
+swap position 3 with position 7
+reverse positions 0 through 5
+swap position 5 with position 7
+swap position 1 with position 7
+swap position 1 with position 7
+rotate right 7 steps
+swap letter f with letter a
+reverse positions 0 through 7
+rotate based on position of letter d
+reverse positions 2 through 4
+swap position 7 with position 1
+swap letter a with letter h
diff --git a/2016/aoc21/src/main.rs b/2016/aoc21/src/main.rs
new file mode 100644
index 0000000..1366f1e
--- /dev/null
+++ b/2016/aoc21/src/main.rs
@@ -0,0 +1,233 @@
+extern crate regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::collections::VecDeque;
+
+use regex::Regex;
+
+fn main() {
+ let password = "abcdefgh".to_string();
+ let program = read_file();
+ let scrambled = scramble_password(password, &program);
+ println!("Scrambled password is {}", scrambled);
+ let unscrambled = unscramble_password(scrambled, &program);
+ println!("Which unscrambles to {}", unscrambled);
+
+ let other_scrambled = "fbgdceah".to_string();
+ let other_unscrambled = unscramble_password(other_scrambled, &program);
+
+ println!("Decrypted easter bunny password is {}", other_unscrambled);
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
+
+fn scramble_password(password: String, program: &Vec<String>) -> String {
+ let mut pass = password.chars().collect::<VecDeque<_>>();
+
+ let instructions = scramble_instruction_set();
+
+ for line in program {
+ for &(ref reg, ref func) in &instructions {
+ let captures = reg.captures(line.as_ref());
+ if captures.is_some() {
+ func(&mut pass, captures.unwrap());
+ }
+ }
+ }
+
+ pass.iter().cloned().collect()
+}
+
+fn unscramble_password(password: String, program: &Vec<String>) -> String {
+ let mut pass = password.chars().collect::<VecDeque<_>>();
+
+ let instructions = unscramble_instruction_set();
+
+ let mut backwards_program = program.clone();
+ backwards_program.reverse();
+ for line in backwards_program {
+ for &(ref reg, ref func) in &instructions {
+ let captures = reg.captures(line.as_ref());
+ if captures.is_some() {
+ func(&mut pass, captures.unwrap());
+ }
+ }
+ }
+
+ pass.iter().cloned().collect()
+}
+
+fn scramble_instruction_set() -> Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> {
+ let mut instructions : Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> = Vec::new();
+ instructions.push((Regex::new(r"swap position (\d+) with position (\d+)").unwrap(), swap_pos));
+ instructions.push((Regex::new(r"swap letter ([a-z]) with letter ([a-z])").unwrap(), swap_let));
+ instructions.push((Regex::new(r"rotate left (\d+) step").unwrap(), rotate_left));
+ instructions.push((Regex::new(r"rotate right (\d+) step").unwrap(), rotate_right));
+ instructions.push((Regex::new(r"rotate based on position of letter ([a-z])").unwrap(), rotate_pos));
+ instructions.push((Regex::new(r"reverse positions (\d+) through (\d+)").unwrap(), reverse_sub));
+ instructions.push((Regex::new(r"move position (\d+) to position (\d+)").unwrap(), move_pos));
+
+ instructions
+}
+
+fn unscramble_instruction_set() -> Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> {
+ let mut instructions : Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> = Vec::new();
+ instructions.push((Regex::new(r"swap position (\d+) with position (\d+)").unwrap(), swap_pos));
+ instructions.push((Regex::new(r"swap letter ([a-z]) with letter ([a-z])").unwrap(), swap_let));
+ instructions.push((Regex::new(r"rotate left (\d+) step").unwrap(), rotate_right));
+ instructions.push((Regex::new(r"rotate right (\d+) step").unwrap(), rotate_left));
+ instructions.push((Regex::new(r"rotate based on position of letter ([a-z])").unwrap(), undo_rotate_pos));
+ instructions.push((Regex::new(r"reverse positions (\d+) through (\d+)").unwrap(), reverse_sub));
+ instructions.push((Regex::new(r"move position (\d+) to position (\d+)").unwrap(), undo_move_pos));
+
+ instructions
+}
+
+fn swap_pos(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let src = cap.at(1).unwrap().parse::<usize>().unwrap();
+ let dest = cap.at(2).unwrap().parse::<usize>().unwrap();
+ pass.swap(src, dest);
+}
+
+fn swap_let(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let src = cap.at(1).unwrap().chars().next().unwrap();
+ let dest = cap.at(2).unwrap().chars().next().unwrap();
+ let src_position = pass.iter().position(|&c| c == src);
+ let dest_position = pass.iter().position(|&c| c == dest);
+ match (src_position, dest_position) {
+ (Some(src_pos), Some(dest_pos)) => {
+ pass.swap(src_pos, dest_pos);
+ },
+ _ => {}
+ };
+}
+
+fn rotate_left(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let steps = cap.at(1).unwrap().parse::<usize>().unwrap();
+ for _ in 0..steps {
+ let c = pass.pop_front().unwrap();
+ pass.push_back(c);
+ }
+}
+
+fn rotate_right(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let steps = cap.at(1).unwrap().parse::<usize>().unwrap();
+ for _ in 0..steps {
+ let c = pass.pop_back().unwrap();
+ pass.push_front(c);
+ }
+}
+
+fn rotate_pos(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let letter = cap.at(1).unwrap().chars().next().unwrap();
+ let pos = pass.iter().position(|&c| c == letter).unwrap();
+ let steps = 1 + pos + if pos >=4 { 1 } else { 0 };
+ for _ in 0..steps {
+ let c = pass.pop_back().unwrap();
+ pass.push_front(c);
+ }
+}
+
+fn move_pos(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let src = cap.at(1).unwrap().parse::<usize>().unwrap();
+ let dest = cap.at(2).unwrap().parse::<usize>().unwrap();
+ let c = pass.remove(src).unwrap();
+ pass.insert(dest, c);
+}
+
+fn reverse_sub(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let mut start = cap.at(1).unwrap().parse::<usize>().unwrap();
+ let mut end = cap.at(2).unwrap().parse::<usize>().unwrap();
+ while start < end {
+ pass.swap(start, end);
+ start += 1;
+ end -= 1;
+ }
+}
+
+fn undo_rotate_pos(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let letter = cap.at(1).unwrap().chars().next().unwrap();
+ let dest_pos = pass.iter().position(|&c| c == letter).unwrap();
+ let mut pos = dest_pos;
+
+ loop {
+ let c = pass.pop_front().unwrap();
+ pass.push_back(c);
+ pos -= 1;
+ let steps = 1 + pos + if pos >=4 { 1 } else { 0 };
+ if (pos + steps) % pass.len() == dest_pos {
+ break;
+ }
+ }
+}
+
+fn undo_move_pos(pass: &mut VecDeque<char>, cap: regex::Captures) {
+ let src = cap.at(1).unwrap().parse::<usize>().unwrap();
+ let dest = cap.at(2).unwrap().parse::<usize>().unwrap();
+ let c = pass.remove(dest).unwrap();
+ pass.insert(src, c);
+}
+
+#[test]
+fn swap_pos_example() {
+ let instructions = vec!("swap position 4 with position 0".to_string());
+ let password = "abcde".to_string();
+ assert_eq!("ebcda".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn swap_let_example() {
+ let instructions = vec!("swap letter d with letter b".to_string());
+ let password = "ebcda".to_string();
+ assert_eq!("edcba".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn reverse_example() {
+ let instructions = vec!("reverse positions 0 through 4".to_string());
+ let password = "edcba".to_string();
+ assert_eq!("abcde".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn rotate_left_example() {
+ let instructions = vec!("rotate left 1 step".to_string());
+ let password = "abcde".to_string();
+ assert_eq!("bcdea".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn move_example() {
+ let instructions = vec!("move position 3 to position 0".to_string());
+ let password = "bdeac".to_string();
+ assert_eq!("abdec".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn rotate_pos_example_1() {
+ let instructions = vec!("rotate based on position of letter b".to_string());
+ let password = "abdec".to_string();
+ assert_eq!("ecabd".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn rotate_pos_example_2() {
+ let instructions = vec!("rotate based on position of letter d".to_string());
+ let password = "ecabd".to_string();
+ assert_eq!("decab".to_string(), scramble_password(password, instructions));
+}
+
+#[test]
+fn rotate_right_example() {
+ let instructions = vec!("rotate right 2 steps".to_string());
+ let password = "decab".to_string();
+ assert_eq!("abdec".to_string(), scramble_password(password, instructions));
+}
diff --git a/2016/aoc22/Cargo.lock b/2016/aoc22/Cargo.lock
new file mode 100644
index 0000000..81a7213
--- /dev/null
+++ b/2016/aoc22/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc22"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc22/Cargo.toml b/2016/aoc22/Cargo.toml
new file mode 100644
index 0000000..074ccd5
--- /dev/null
+++ b/2016/aoc22/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc22"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc22/input.txt b/2016/aoc22/input.txt
new file mode 100644
index 0000000..08e9843
--- /dev/null
+++ b/2016/aoc22/input.txt
@@ -0,0 +1,1017 @@
+root@ebhq-gridcenter# df -h
+Filesystem Size Used Avail Use%
+/dev/grid/node-x0-y0 89T 65T 24T 73%
+/dev/grid/node-x0-y1 92T 64T 28T 69%
+/dev/grid/node-x0-y2 85T 70T 15T 82%
+/dev/grid/node-x0-y3 90T 64T 26T 71%
+/dev/grid/node-x0-y4 86T 72T 14T 83%
+/dev/grid/node-x0-y5 90T 68T 22T 75%
+/dev/grid/node-x0-y6 94T 64T 30T 68%
+/dev/grid/node-x0-y7 87T 72T 15T 82%
+/dev/grid/node-x0-y8 90T 65T 25T 72%
+/dev/grid/node-x0-y9 90T 65T 25T 72%
+/dev/grid/node-x0-y10 89T 66T 23T 74%
+/dev/grid/node-x0-y11 94T 70T 24T 74%
+/dev/grid/node-x0-y12 90T 65T 25T 72%
+/dev/grid/node-x0-y13 91T 72T 19T 79%
+/dev/grid/node-x0-y14 85T 70T 15T 82%
+/dev/grid/node-x0-y15 89T 70T 19T 78%
+/dev/grid/node-x0-y16 90T 66T 24T 73%
+/dev/grid/node-x0-y17 86T 64T 22T 74%
+/dev/grid/node-x0-y18 88T 65T 23T 73%
+/dev/grid/node-x0-y19 85T 68T 17T 80%
+/dev/grid/node-x0-y20 93T 70T 23T 75%
+/dev/grid/node-x0-y21 89T 64T 25T 71%
+/dev/grid/node-x0-y22 87T 67T 20T 77%
+/dev/grid/node-x0-y23 90T 73T 17T 81%
+/dev/grid/node-x0-y24 92T 68T 24T 73%
+/dev/grid/node-x0-y25 88T 69T 19T 78%
+/dev/grid/node-x0-y26 88T 69T 19T 78%
+/dev/grid/node-x0-y27 86T 72T 14T 83%
+/dev/grid/node-x0-y28 92T 71T 21T 77%
+/dev/grid/node-x1-y0 89T 73T 16T 82%
+/dev/grid/node-x1-y1 89T 68T 21T 76%
+/dev/grid/node-x1-y2 94T 70T 24T 74%
+/dev/grid/node-x1-y3 90T 68T 22T 75%
+/dev/grid/node-x1-y4 89T 67T 22T 75%
+/dev/grid/node-x1-y5 90T 70T 20T 77%
+/dev/grid/node-x1-y6 92T 71T 21T 77%
+/dev/grid/node-x1-y7 92T 71T 21T 77%
+/dev/grid/node-x1-y8 86T 73T 13T 84%
+/dev/grid/node-x1-y9 87T 69T 18T 79%
+/dev/grid/node-x1-y10 87T 66T 21T 75%
+/dev/grid/node-x1-y11 85T 72T 13T 84%
+/dev/grid/node-x1-y12 90T 69T 21T 76%
+/dev/grid/node-x1-y13 89T 67T 22T 75%
+/dev/grid/node-x1-y14 90T 65T 25T 72%
+/dev/grid/node-x1-y15 94T 65T 29T 69%
+/dev/grid/node-x1-y16 85T 70T 15T 82%
+/dev/grid/node-x1-y17 93T 64T 29T 68%
+/dev/grid/node-x1-y18 87T 68T 19T 78%
+/dev/grid/node-x1-y19 85T 66T 19T 77%
+/dev/grid/node-x1-y20 90T 72T 18T 80%
+/dev/grid/node-x1-y21 89T 73T 16T 82%
+/dev/grid/node-x1-y22 90T 65T 25T 72%
+/dev/grid/node-x1-y23 91T 72T 19T 79%
+/dev/grid/node-x1-y24 87T 70T 17T 80%
+/dev/grid/node-x1-y25 91T 64T 27T 70%
+/dev/grid/node-x1-y26 90T 64T 26T 71%
+/dev/grid/node-x1-y27 93T 69T 24T 74%
+/dev/grid/node-x1-y28 89T 65T 24T 73%
+/dev/grid/node-x2-y0 89T 72T 17T 80%
+/dev/grid/node-x2-y1 92T 69T 23T 75%
+/dev/grid/node-x2-y2 91T 65T 26T 71%
+/dev/grid/node-x2-y3 86T 73T 13T 84%
+/dev/grid/node-x2-y4 90T 69T 21T 76%
+/dev/grid/node-x2-y5 86T 68T 18T 79%
+/dev/grid/node-x2-y6 91T 70T 21T 76%
+/dev/grid/node-x2-y7 86T 64T 22T 74%
+/dev/grid/node-x2-y8 88T 65T 23T 73%
+/dev/grid/node-x2-y9 94T 73T 21T 77%
+/dev/grid/node-x2-y10 89T 71T 18T 79%
+/dev/grid/node-x2-y11 88T 64T 24T 72%
+/dev/grid/node-x2-y12 92T 71T 21T 77%
+/dev/grid/node-x2-y13 86T 69T 17T 80%
+/dev/grid/node-x2-y14 87T 69T 18T 79%
+/dev/grid/node-x2-y15 93T 71T 22T 76%
+/dev/grid/node-x2-y16 91T 65T 26T 71%
+/dev/grid/node-x2-y17 93T 65T 28T 69%
+/dev/grid/node-x2-y18 86T 69T 17T 80%
+/dev/grid/node-x2-y19 87T 69T 18T 79%
+/dev/grid/node-x2-y20 86T 72T 14T 83%
+/dev/grid/node-x2-y21 86T 73T 13T 84%
+/dev/grid/node-x2-y22 505T 499T 6T 98%
+/dev/grid/node-x2-y23 89T 65T 24T 73%
+/dev/grid/node-x2-y24 92T 64T 28T 69%
+/dev/grid/node-x2-y25 94T 64T 30T 68%
+/dev/grid/node-x2-y26 87T 73T 14T 83%
+/dev/grid/node-x2-y27 87T 69T 18T 79%
+/dev/grid/node-x2-y28 94T 71T 23T 75%
+/dev/grid/node-x3-y0 88T 66T 22T 75%
+/dev/grid/node-x3-y1 91T 69T 22T 75%
+/dev/grid/node-x3-y2 91T 69T 22T 75%
+/dev/grid/node-x3-y3 86T 67T 19T 77%
+/dev/grid/node-x3-y4 90T 64T 26T 71%
+/dev/grid/node-x3-y5 89T 72T 17T 80%
+/dev/grid/node-x3-y6 87T 66T 21T 75%
+/dev/grid/node-x3-y7 90T 68T 22T 75%
+/dev/grid/node-x3-y8 91T 66T 25T 72%
+/dev/grid/node-x3-y9 89T 64T 25T 71%
+/dev/grid/node-x3-y10 92T 67T 25T 72%
+/dev/grid/node-x3-y11 86T 64T 22T 74%
+/dev/grid/node-x3-y12 94T 65T 29T 69%
+/dev/grid/node-x3-y13 91T 70T 21T 76%
+/dev/grid/node-x3-y14 89T 72T 17T 80%
+/dev/grid/node-x3-y15 89T 64T 25T 71%
+/dev/grid/node-x3-y16 85T 73T 12T 85%
+/dev/grid/node-x3-y17 89T 65T 24T 73%
+/dev/grid/node-x3-y18 88T 71T 17T 80%
+/dev/grid/node-x3-y19 89T 69T 20T 77%
+/dev/grid/node-x3-y20 91T 68T 23T 74%
+/dev/grid/node-x3-y21 90T 72T 18T 80%
+/dev/grid/node-x3-y22 505T 498T 7T 98%
+/dev/grid/node-x3-y23 85T 65T 20T 76%
+/dev/grid/node-x3-y24 94T 72T 22T 76%
+/dev/grid/node-x3-y25 90T 68T 22T 75%
+/dev/grid/node-x3-y26 90T 65T 25T 72%
+/dev/grid/node-x3-y27 87T 66T 21T 75%
+/dev/grid/node-x3-y28 90T 66T 24T 73%
+/dev/grid/node-x4-y0 86T 67T 19T 77%
+/dev/grid/node-x4-y1 92T 67T 25T 72%
+/dev/grid/node-x4-y2 91T 71T 20T 78%
+/dev/grid/node-x4-y3 94T 69T 25T 73%
+/dev/grid/node-x4-y4 90T 64T 26T 71%
+/dev/grid/node-x4-y5 93T 70T 23T 75%
+/dev/grid/node-x4-y6 93T 67T 26T 72%
+/dev/grid/node-x4-y7 91T 71T 20T 78%
+/dev/grid/node-x4-y8 90T 70T 20T 77%
+/dev/grid/node-x4-y9 89T 66T 23T 74%
+/dev/grid/node-x4-y10 94T 64T 30T 68%
+/dev/grid/node-x4-y11 94T 70T 24T 74%
+/dev/grid/node-x4-y12 89T 69T 20T 77%
+/dev/grid/node-x4-y13 90T 72T 18T 80%
+/dev/grid/node-x4-y14 88T 69T 19T 78%
+/dev/grid/node-x4-y15 85T 64T 21T 75%
+/dev/grid/node-x4-y16 86T 71T 15T 82%
+/dev/grid/node-x4-y17 90T 65T 25T 72%
+/dev/grid/node-x4-y18 88T 65T 23T 73%
+/dev/grid/node-x4-y19 91T 71T 20T 78%
+/dev/grid/node-x4-y20 94T 71T 23T 75%
+/dev/grid/node-x4-y21 91T 65T 26T 71%
+/dev/grid/node-x4-y22 510T 491T 19T 96%
+/dev/grid/node-x4-y23 86T 72T 14T 83%
+/dev/grid/node-x4-y24 91T 69T 22T 75%
+/dev/grid/node-x4-y25 93T 64T 29T 68%
+/dev/grid/node-x4-y26 92T 65T 27T 70%
+/dev/grid/node-x4-y27 91T 67T 24T 73%
+/dev/grid/node-x4-y28 93T 66T 27T 70%
+/dev/grid/node-x5-y0 85T 70T 15T 82%
+/dev/grid/node-x5-y1 90T 71T 19T 78%
+/dev/grid/node-x5-y2 94T 68T 26T 72%
+/dev/grid/node-x5-y3 88T 73T 15T 82%
+/dev/grid/node-x5-y4 85T 71T 14T 83%
+/dev/grid/node-x5-y5 92T 67T 25T 72%
+/dev/grid/node-x5-y6 92T 68T 24T 73%
+/dev/grid/node-x5-y7 86T 69T 17T 80%
+/dev/grid/node-x5-y8 90T 64T 26T 71%
+/dev/grid/node-x5-y9 88T 71T 17T 80%
+/dev/grid/node-x5-y10 91T 65T 26T 71%
+/dev/grid/node-x5-y11 92T 65T 27T 70%
+/dev/grid/node-x5-y12 87T 66T 21T 75%
+/dev/grid/node-x5-y13 87T 71T 16T 81%
+/dev/grid/node-x5-y14 90T 67T 23T 74%
+/dev/grid/node-x5-y15 92T 70T 22T 76%
+/dev/grid/node-x5-y16 94T 66T 28T 70%
+/dev/grid/node-x5-y17 88T 68T 20T 77%
+/dev/grid/node-x5-y18 86T 69T 17T 80%
+/dev/grid/node-x5-y19 94T 66T 28T 70%
+/dev/grid/node-x5-y20 90T 69T 21T 76%
+/dev/grid/node-x5-y21 88T 71T 17T 80%
+/dev/grid/node-x5-y22 509T 496T 13T 97%
+/dev/grid/node-x5-y23 87T 67T 20T 77%
+/dev/grid/node-x5-y24 91T 64T 27T 70%
+/dev/grid/node-x5-y25 93T 69T 24T 74%
+/dev/grid/node-x5-y26 93T 73T 20T 78%
+/dev/grid/node-x5-y27 88T 70T 18T 79%
+/dev/grid/node-x5-y28 87T 73T 14T 83%
+/dev/grid/node-x6-y0 87T 65T 22T 74%
+/dev/grid/node-x6-y1 85T 64T 21T 75%
+/dev/grid/node-x6-y2 91T 72T 19T 79%
+/dev/grid/node-x6-y3 90T 64T 26T 71%
+/dev/grid/node-x6-y4 93T 66T 27T 70%
+/dev/grid/node-x6-y5 93T 67T 26T 72%
+/dev/grid/node-x6-y6 89T 64T 25T 71%
+/dev/grid/node-x6-y7 89T 64T 25T 71%
+/dev/grid/node-x6-y8 86T 72T 14T 83%
+/dev/grid/node-x6-y9 87T 68T 19T 78%
+/dev/grid/node-x6-y10 94T 73T 21T 77%
+/dev/grid/node-x6-y11 88T 65T 23T 73%
+/dev/grid/node-x6-y12 88T 70T 18T 79%
+/dev/grid/node-x6-y13 93T 66T 27T 70%
+/dev/grid/node-x6-y14 87T 68T 19T 78%
+/dev/grid/node-x6-y15 87T 68T 19T 78%
+/dev/grid/node-x6-y16 87T 73T 14T 83%
+/dev/grid/node-x6-y17 87T 70T 17T 80%
+/dev/grid/node-x6-y18 87T 69T 18T 79%
+/dev/grid/node-x6-y19 85T 67T 18T 78%
+/dev/grid/node-x6-y20 91T 71T 20T 78%
+/dev/grid/node-x6-y21 86T 72T 14T 83%
+/dev/grid/node-x6-y22 503T 497T 6T 98%
+/dev/grid/node-x6-y23 93T 72T 21T 77%
+/dev/grid/node-x6-y24 91T 72T 19T 79%
+/dev/grid/node-x6-y25 85T 67T 18T 78%
+/dev/grid/node-x6-y26 86T 65T 21T 75%
+/dev/grid/node-x6-y27 92T 67T 25T 72%
+/dev/grid/node-x6-y28 87T 72T 15T 82%
+/dev/grid/node-x7-y0 88T 67T 21T 76%
+/dev/grid/node-x7-y1 85T 64T 21T 75%
+/dev/grid/node-x7-y2 90T 67T 23T 74%
+/dev/grid/node-x7-y3 87T 65T 22T 74%
+/dev/grid/node-x7-y4 92T 70T 22T 76%
+/dev/grid/node-x7-y5 89T 67T 22T 75%
+/dev/grid/node-x7-y6 90T 65T 25T 72%
+/dev/grid/node-x7-y7 88T 66T 22T 75%
+/dev/grid/node-x7-y8 88T 65T 23T 73%
+/dev/grid/node-x7-y9 93T 72T 21T 77%
+/dev/grid/node-x7-y10 91T 70T 21T 76%
+/dev/grid/node-x7-y11 90T 70T 20T 77%
+/dev/grid/node-x7-y12 89T 68T 21T 76%
+/dev/grid/node-x7-y13 91T 65T 26T 71%
+/dev/grid/node-x7-y14 90T 65T 25T 72%
+/dev/grid/node-x7-y15 85T 65T 20T 76%
+/dev/grid/node-x7-y16 91T 65T 26T 71%
+/dev/grid/node-x7-y17 89T 72T 17T 80%
+/dev/grid/node-x7-y18 88T 65T 23T 73%
+/dev/grid/node-x7-y19 94T 72T 22T 76%
+/dev/grid/node-x7-y20 85T 73T 12T 85%
+/dev/grid/node-x7-y21 85T 68T 17T 80%
+/dev/grid/node-x7-y22 507T 497T 10T 98%
+/dev/grid/node-x7-y23 91T 69T 22T 75%
+/dev/grid/node-x7-y24 93T 68T 25T 73%
+/dev/grid/node-x7-y25 90T 72T 18T 80%
+/dev/grid/node-x7-y26 91T 70T 21T 76%
+/dev/grid/node-x7-y27 93T 65T 28T 69%
+/dev/grid/node-x7-y28 91T 64T 27T 70%
+/dev/grid/node-x8-y0 86T 71T 15T 82%
+/dev/grid/node-x8-y1 88T 69T 19T 78%
+/dev/grid/node-x8-y2 90T 64T 26T 71%
+/dev/grid/node-x8-y3 92T 67T 25T 72%
+/dev/grid/node-x8-y4 86T 71T 15T 82%
+/dev/grid/node-x8-y5 88T 68T 20T 77%
+/dev/grid/node-x8-y6 90T 71T 19T 78%
+/dev/grid/node-x8-y7 86T 70T 16T 81%
+/dev/grid/node-x8-y8 87T 72T 15T 82%
+/dev/grid/node-x8-y9 93T 67T 26T 72%
+/dev/grid/node-x8-y10 93T 65T 28T 69%
+/dev/grid/node-x8-y11 94T 66T 28T 70%
+/dev/grid/node-x8-y12 92T 70T 22T 76%
+/dev/grid/node-x8-y13 91T 68T 23T 74%
+/dev/grid/node-x8-y14 93T 72T 21T 77%
+/dev/grid/node-x8-y15 90T 71T 19T 78%
+/dev/grid/node-x8-y16 87T 73T 14T 83%
+/dev/grid/node-x8-y17 86T 73T 13T 84%
+/dev/grid/node-x8-y18 89T 68T 21T 76%
+/dev/grid/node-x8-y19 88T 67T 21T 76%
+/dev/grid/node-x8-y20 87T 64T 23T 73%
+/dev/grid/node-x8-y21 90T 71T 19T 78%
+/dev/grid/node-x8-y22 505T 497T 8T 98%
+/dev/grid/node-x8-y23 92T 72T 20T 78%
+/dev/grid/node-x8-y24 86T 70T 16T 81%
+/dev/grid/node-x8-y25 92T 69T 23T 75%
+/dev/grid/node-x8-y26 93T 71T 22T 76%
+/dev/grid/node-x8-y27 91T 70T 21T 76%
+/dev/grid/node-x8-y28 92T 0T 92T 0%
+/dev/grid/node-x9-y0 87T 69T 18T 79%
+/dev/grid/node-x9-y1 90T 69T 21T 76%
+/dev/grid/node-x9-y2 91T 69T 22T 75%
+/dev/grid/node-x9-y3 92T 71T 21T 77%
+/dev/grid/node-x9-y4 91T 66T 25T 72%
+/dev/grid/node-x9-y5 92T 65T 27T 70%
+/dev/grid/node-x9-y6 87T 71T 16T 81%
+/dev/grid/node-x9-y7 88T 68T 20T 77%
+/dev/grid/node-x9-y8 85T 67T 18T 78%
+/dev/grid/node-x9-y9 86T 65T 21T 75%
+/dev/grid/node-x9-y10 88T 64T 24T 72%
+/dev/grid/node-x9-y11 90T 70T 20T 77%
+/dev/grid/node-x9-y12 88T 64T 24T 72%
+/dev/grid/node-x9-y13 85T 69T 16T 81%
+/dev/grid/node-x9-y14 85T 71T 14T 83%
+/dev/grid/node-x9-y15 92T 70T 22T 76%
+/dev/grid/node-x9-y16 92T 65T 27T 70%
+/dev/grid/node-x9-y17 89T 66T 23T 74%
+/dev/grid/node-x9-y18 85T 69T 16T 81%
+/dev/grid/node-x9-y19 94T 69T 25T 73%
+/dev/grid/node-x9-y20 92T 66T 26T 71%
+/dev/grid/node-x9-y21 88T 70T 18T 79%
+/dev/grid/node-x9-y22 507T 498T 9T 98%
+/dev/grid/node-x9-y23 86T 68T 18T 79%
+/dev/grid/node-x9-y24 90T 69T 21T 76%
+/dev/grid/node-x9-y25 87T 65T 22T 74%
+/dev/grid/node-x9-y26 86T 71T 15T 82%
+/dev/grid/node-x9-y27 85T 65T 20T 76%
+/dev/grid/node-x9-y28 87T 70T 17T 80%
+/dev/grid/node-x10-y0 91T 64T 27T 70%
+/dev/grid/node-x10-y1 92T 65T 27T 70%
+/dev/grid/node-x10-y2 89T 66T 23T 74%
+/dev/grid/node-x10-y3 94T 64T 30T 68%
+/dev/grid/node-x10-y4 92T 69T 23T 75%
+/dev/grid/node-x10-y5 91T 64T 27T 70%
+/dev/grid/node-x10-y6 86T 72T 14T 83%
+/dev/grid/node-x10-y7 87T 66T 21T 75%
+/dev/grid/node-x10-y8 90T 73T 17T 81%
+/dev/grid/node-x10-y9 91T 73T 18T 80%
+/dev/grid/node-x10-y10 94T 71T 23T 75%
+/dev/grid/node-x10-y11 94T 71T 23T 75%
+/dev/grid/node-x10-y12 92T 67T 25T 72%
+/dev/grid/node-x10-y13 92T 66T 26T 71%
+/dev/grid/node-x10-y14 86T 66T 20T 76%
+/dev/grid/node-x10-y15 93T 73T 20T 78%
+/dev/grid/node-x10-y16 92T 66T 26T 71%
+/dev/grid/node-x10-y17 92T 71T 21T 77%
+/dev/grid/node-x10-y18 86T 65T 21T 75%
+/dev/grid/node-x10-y19 92T 68T 24T 73%
+/dev/grid/node-x10-y20 87T 66T 21T 75%
+/dev/grid/node-x10-y21 90T 65T 25T 72%
+/dev/grid/node-x10-y22 501T 494T 7T 98%
+/dev/grid/node-x10-y23 87T 66T 21T 75%
+/dev/grid/node-x10-y24 85T 69T 16T 81%
+/dev/grid/node-x10-y25 90T 72T 18T 80%
+/dev/grid/node-x10-y26 94T 69T 25T 73%
+/dev/grid/node-x10-y27 86T 69T 17T 80%
+/dev/grid/node-x10-y28 90T 68T 22T 75%
+/dev/grid/node-x11-y0 90T 65T 25T 72%
+/dev/grid/node-x11-y1 90T 70T 20T 77%
+/dev/grid/node-x11-y2 94T 69T 25T 73%
+/dev/grid/node-x11-y3 92T 72T 20T 78%
+/dev/grid/node-x11-y4 93T 67T 26T 72%
+/dev/grid/node-x11-y5 89T 70T 19T 78%
+/dev/grid/node-x11-y6 87T 66T 21T 75%
+/dev/grid/node-x11-y7 92T 70T 22T 76%
+/dev/grid/node-x11-y8 93T 71T 22T 76%
+/dev/grid/node-x11-y9 93T 68T 25T 73%
+/dev/grid/node-x11-y10 85T 65T 20T 76%
+/dev/grid/node-x11-y11 90T 72T 18T 80%
+/dev/grid/node-x11-y12 89T 65T 24T 73%
+/dev/grid/node-x11-y13 86T 69T 17T 80%
+/dev/grid/node-x11-y14 93T 73T 20T 78%
+/dev/grid/node-x11-y15 93T 68T 25T 73%
+/dev/grid/node-x11-y16 92T 72T 20T 78%
+/dev/grid/node-x11-y17 85T 71T 14T 83%
+/dev/grid/node-x11-y18 90T 68T 22T 75%
+/dev/grid/node-x11-y19 90T 69T 21T 76%
+/dev/grid/node-x11-y20 85T 73T 12T 85%
+/dev/grid/node-x11-y21 93T 68T 25T 73%
+/dev/grid/node-x11-y22 504T 491T 13T 97%
+/dev/grid/node-x11-y23 87T 69T 18T 79%
+/dev/grid/node-x11-y24 88T 65T 23T 73%
+/dev/grid/node-x11-y25 94T 67T 27T 71%
+/dev/grid/node-x11-y26 92T 73T 19T 79%
+/dev/grid/node-x11-y27 87T 64T 23T 73%
+/dev/grid/node-x11-y28 89T 70T 19T 78%
+/dev/grid/node-x12-y0 88T 73T 15T 82%
+/dev/grid/node-x12-y1 90T 68T 22T 75%
+/dev/grid/node-x12-y2 85T 65T 20T 76%
+/dev/grid/node-x12-y3 94T 71T 23T 75%
+/dev/grid/node-x12-y4 86T 68T 18T 79%
+/dev/grid/node-x12-y5 89T 67T 22T 75%
+/dev/grid/node-x12-y6 89T 71T 18T 79%
+/dev/grid/node-x12-y7 85T 68T 17T 80%
+/dev/grid/node-x12-y8 94T 68T 26T 72%
+/dev/grid/node-x12-y9 91T 71T 20T 78%
+/dev/grid/node-x12-y10 91T 65T 26T 71%
+/dev/grid/node-x12-y11 91T 71T 20T 78%
+/dev/grid/node-x12-y12 85T 65T 20T 76%
+/dev/grid/node-x12-y13 89T 71T 18T 79%
+/dev/grid/node-x12-y14 85T 70T 15T 82%
+/dev/grid/node-x12-y15 92T 73T 19T 79%
+/dev/grid/node-x12-y16 94T 66T 28T 70%
+/dev/grid/node-x12-y17 90T 72T 18T 80%
+/dev/grid/node-x12-y18 90T 64T 26T 71%
+/dev/grid/node-x12-y19 87T 72T 15T 82%
+/dev/grid/node-x12-y20 89T 70T 19T 78%
+/dev/grid/node-x12-y21 90T 66T 24T 73%
+/dev/grid/node-x12-y22 506T 497T 9T 98%
+/dev/grid/node-x12-y23 90T 67T 23T 74%
+/dev/grid/node-x12-y24 85T 67T 18T 78%
+/dev/grid/node-x12-y25 85T 72T 13T 84%
+/dev/grid/node-x12-y26 94T 71T 23T 75%
+/dev/grid/node-x12-y27 92T 64T 28T 69%
+/dev/grid/node-x12-y28 90T 65T 25T 72%
+/dev/grid/node-x13-y0 85T 72T 13T 84%
+/dev/grid/node-x13-y1 93T 67T 26T 72%
+/dev/grid/node-x13-y2 94T 64T 30T 68%
+/dev/grid/node-x13-y3 85T 71T 14T 83%
+/dev/grid/node-x13-y4 93T 71T 22T 76%
+/dev/grid/node-x13-y5 85T 67T 18T 78%
+/dev/grid/node-x13-y6 91T 68T 23T 74%
+/dev/grid/node-x13-y7 92T 66T 26T 71%
+/dev/grid/node-x13-y8 88T 66T 22T 75%
+/dev/grid/node-x13-y9 91T 72T 19T 79%
+/dev/grid/node-x13-y10 89T 72T 17T 80%
+/dev/grid/node-x13-y11 90T 68T 22T 75%
+/dev/grid/node-x13-y12 89T 65T 24T 73%
+/dev/grid/node-x13-y13 90T 69T 21T 76%
+/dev/grid/node-x13-y14 86T 64T 22T 74%
+/dev/grid/node-x13-y15 91T 65T 26T 71%
+/dev/grid/node-x13-y16 86T 72T 14T 83%
+/dev/grid/node-x13-y17 85T 71T 14T 83%
+/dev/grid/node-x13-y18 85T 68T 17T 80%
+/dev/grid/node-x13-y19 91T 69T 22T 75%
+/dev/grid/node-x13-y20 87T 70T 17T 80%
+/dev/grid/node-x13-y21 94T 65T 29T 69%
+/dev/grid/node-x13-y22 503T 492T 11T 97%
+/dev/grid/node-x13-y23 91T 70T 21T 76%
+/dev/grid/node-x13-y24 91T 66T 25T 72%
+/dev/grid/node-x13-y25 88T 64T 24T 72%
+/dev/grid/node-x13-y26 87T 70T 17T 80%
+/dev/grid/node-x13-y27 91T 66T 25T 72%
+/dev/grid/node-x13-y28 86T 68T 18T 79%
+/dev/grid/node-x14-y0 85T 67T 18T 78%
+/dev/grid/node-x14-y1 87T 70T 17T 80%
+/dev/grid/node-x14-y2 92T 67T 25T 72%
+/dev/grid/node-x14-y3 87T 64T 23T 73%
+/dev/grid/node-x14-y4 92T 73T 19T 79%
+/dev/grid/node-x14-y5 86T 66T 20T 76%
+/dev/grid/node-x14-y6 89T 69T 20T 77%
+/dev/grid/node-x14-y7 89T 67T 22T 75%
+/dev/grid/node-x14-y8 89T 70T 19T 78%
+/dev/grid/node-x14-y9 91T 70T 21T 76%
+/dev/grid/node-x14-y10 87T 70T 17T 80%
+/dev/grid/node-x14-y11 86T 66T 20T 76%
+/dev/grid/node-x14-y12 92T 67T 25T 72%
+/dev/grid/node-x14-y13 87T 68T 19T 78%
+/dev/grid/node-x14-y14 94T 65T 29T 69%
+/dev/grid/node-x14-y15 93T 68T 25T 73%
+/dev/grid/node-x14-y16 87T 66T 21T 75%
+/dev/grid/node-x14-y17 90T 70T 20T 77%
+/dev/grid/node-x14-y18 90T 66T 24T 73%
+/dev/grid/node-x14-y19 89T 71T 18T 79%
+/dev/grid/node-x14-y20 85T 72T 13T 84%
+/dev/grid/node-x14-y21 90T 66T 24T 73%
+/dev/grid/node-x14-y22 504T 491T 13T 97%
+/dev/grid/node-x14-y23 90T 71T 19T 78%
+/dev/grid/node-x14-y24 94T 68T 26T 72%
+/dev/grid/node-x14-y25 91T 73T 18T 80%
+/dev/grid/node-x14-y26 88T 68T 20T 77%
+/dev/grid/node-x14-y27 86T 66T 20T 76%
+/dev/grid/node-x14-y28 92T 70T 22T 76%
+/dev/grid/node-x15-y0 91T 73T 18T 80%
+/dev/grid/node-x15-y1 85T 65T 20T 76%
+/dev/grid/node-x15-y2 88T 67T 21T 76%
+/dev/grid/node-x15-y3 91T 66T 25T 72%
+/dev/grid/node-x15-y4 92T 65T 27T 70%
+/dev/grid/node-x15-y5 94T 66T 28T 70%
+/dev/grid/node-x15-y6 90T 67T 23T 74%
+/dev/grid/node-x15-y7 91T 72T 19T 79%
+/dev/grid/node-x15-y8 88T 65T 23T 73%
+/dev/grid/node-x15-y9 90T 66T 24T 73%
+/dev/grid/node-x15-y10 86T 69T 17T 80%
+/dev/grid/node-x15-y11 89T 67T 22T 75%
+/dev/grid/node-x15-y12 86T 67T 19T 77%
+/dev/grid/node-x15-y13 85T 65T 20T 76%
+/dev/grid/node-x15-y14 92T 68T 24T 73%
+/dev/grid/node-x15-y15 85T 73T 12T 85%
+/dev/grid/node-x15-y16 86T 65T 21T 75%
+/dev/grid/node-x15-y17 92T 69T 23T 75%
+/dev/grid/node-x15-y18 87T 72T 15T 82%
+/dev/grid/node-x15-y19 92T 64T 28T 69%
+/dev/grid/node-x15-y20 92T 71T 21T 77%
+/dev/grid/node-x15-y21 86T 71T 15T 82%
+/dev/grid/node-x15-y22 501T 494T 7T 98%
+/dev/grid/node-x15-y23 93T 65T 28T 69%
+/dev/grid/node-x15-y24 85T 71T 14T 83%
+/dev/grid/node-x15-y25 90T 66T 24T 73%
+/dev/grid/node-x15-y26 87T 67T 20T 77%
+/dev/grid/node-x15-y27 90T 70T 20T 77%
+/dev/grid/node-x15-y28 89T 71T 18T 79%
+/dev/grid/node-x16-y0 91T 72T 19T 79%
+/dev/grid/node-x16-y1 91T 65T 26T 71%
+/dev/grid/node-x16-y2 90T 64T 26T 71%
+/dev/grid/node-x16-y3 87T 67T 20T 77%
+/dev/grid/node-x16-y4 86T 66T 20T 76%
+/dev/grid/node-x16-y5 88T 73T 15T 82%
+/dev/grid/node-x16-y6 85T 68T 17T 80%
+/dev/grid/node-x16-y7 86T 66T 20T 76%
+/dev/grid/node-x16-y8 91T 69T 22T 75%
+/dev/grid/node-x16-y9 87T 66T 21T 75%
+/dev/grid/node-x16-y10 86T 72T 14T 83%
+/dev/grid/node-x16-y11 90T 66T 24T 73%
+/dev/grid/node-x16-y12 85T 72T 13T 84%
+/dev/grid/node-x16-y13 88T 71T 17T 80%
+/dev/grid/node-x16-y14 90T 70T 20T 77%
+/dev/grid/node-x16-y15 91T 71T 20T 78%
+/dev/grid/node-x16-y16 86T 70T 16T 81%
+/dev/grid/node-x16-y17 86T 73T 13T 84%
+/dev/grid/node-x16-y18 88T 66T 22T 75%
+/dev/grid/node-x16-y19 92T 67T 25T 72%
+/dev/grid/node-x16-y20 92T 73T 19T 79%
+/dev/grid/node-x16-y21 94T 71T 23T 75%
+/dev/grid/node-x16-y22 507T 498T 9T 98%
+/dev/grid/node-x16-y23 92T 72T 20T 78%
+/dev/grid/node-x16-y24 85T 72T 13T 84%
+/dev/grid/node-x16-y25 88T 66T 22T 75%
+/dev/grid/node-x16-y26 92T 67T 25T 72%
+/dev/grid/node-x16-y27 94T 64T 30T 68%
+/dev/grid/node-x16-y28 86T 66T 20T 76%
+/dev/grid/node-x17-y0 88T 65T 23T 73%
+/dev/grid/node-x17-y1 85T 66T 19T 77%
+/dev/grid/node-x17-y2 88T 70T 18T 79%
+/dev/grid/node-x17-y3 89T 68T 21T 76%
+/dev/grid/node-x17-y4 89T 68T 21T 76%
+/dev/grid/node-x17-y5 94T 69T 25T 73%
+/dev/grid/node-x17-y6 85T 66T 19T 77%
+/dev/grid/node-x17-y7 93T 67T 26T 72%
+/dev/grid/node-x17-y8 87T 67T 20T 77%
+/dev/grid/node-x17-y9 94T 67T 27T 71%
+/dev/grid/node-x17-y10 92T 64T 28T 69%
+/dev/grid/node-x17-y11 94T 68T 26T 72%
+/dev/grid/node-x17-y12 85T 66T 19T 77%
+/dev/grid/node-x17-y13 87T 68T 19T 78%
+/dev/grid/node-x17-y14 89T 65T 24T 73%
+/dev/grid/node-x17-y15 94T 69T 25T 73%
+/dev/grid/node-x17-y16 90T 69T 21T 76%
+/dev/grid/node-x17-y17 85T 66T 19T 77%
+/dev/grid/node-x17-y18 91T 68T 23T 74%
+/dev/grid/node-x17-y19 89T 73T 16T 82%
+/dev/grid/node-x17-y20 94T 66T 28T 70%
+/dev/grid/node-x17-y21 91T 68T 23T 74%
+/dev/grid/node-x17-y22 509T 499T 10T 98%
+/dev/grid/node-x17-y23 89T 69T 20T 77%
+/dev/grid/node-x17-y24 91T 64T 27T 70%
+/dev/grid/node-x17-y25 89T 66T 23T 74%
+/dev/grid/node-x17-y26 91T 72T 19T 79%
+/dev/grid/node-x17-y27 93T 69T 24T 74%
+/dev/grid/node-x17-y28 87T 73T 14T 83%
+/dev/grid/node-x18-y0 85T 69T 16T 81%
+/dev/grid/node-x18-y1 90T 65T 25T 72%
+/dev/grid/node-x18-y2 85T 69T 16T 81%
+/dev/grid/node-x18-y3 89T 66T 23T 74%
+/dev/grid/node-x18-y4 88T 69T 19T 78%
+/dev/grid/node-x18-y5 90T 70T 20T 77%
+/dev/grid/node-x18-y6 90T 69T 21T 76%
+/dev/grid/node-x18-y7 92T 67T 25T 72%
+/dev/grid/node-x18-y8 85T 64T 21T 75%
+/dev/grid/node-x18-y9 86T 68T 18T 79%
+/dev/grid/node-x18-y10 89T 66T 23T 74%
+/dev/grid/node-x18-y11 87T 70T 17T 80%
+/dev/grid/node-x18-y12 93T 68T 25T 73%
+/dev/grid/node-x18-y13 89T 67T 22T 75%
+/dev/grid/node-x18-y14 91T 66T 25T 72%
+/dev/grid/node-x18-y15 91T 65T 26T 71%
+/dev/grid/node-x18-y16 90T 66T 24T 73%
+/dev/grid/node-x18-y17 85T 69T 16T 81%
+/dev/grid/node-x18-y18 93T 70T 23T 75%
+/dev/grid/node-x18-y19 93T 64T 29T 68%
+/dev/grid/node-x18-y20 87T 70T 17T 80%
+/dev/grid/node-x18-y21 87T 73T 14T 83%
+/dev/grid/node-x18-y22 503T 498T 5T 99%
+/dev/grid/node-x18-y23 92T 68T 24T 73%
+/dev/grid/node-x18-y24 88T 68T 20T 77%
+/dev/grid/node-x18-y25 94T 64T 30T 68%
+/dev/grid/node-x18-y26 93T 66T 27T 70%
+/dev/grid/node-x18-y27 90T 67T 23T 74%
+/dev/grid/node-x18-y28 89T 67T 22T 75%
+/dev/grid/node-x19-y0 91T 67T 24T 73%
+/dev/grid/node-x19-y1 87T 64T 23T 73%
+/dev/grid/node-x19-y2 94T 64T 30T 68%
+/dev/grid/node-x19-y3 90T 71T 19T 78%
+/dev/grid/node-x19-y4 88T 66T 22T 75%
+/dev/grid/node-x19-y5 93T 69T 24T 74%
+/dev/grid/node-x19-y6 89T 73T 16T 82%
+/dev/grid/node-x19-y7 91T 68T 23T 74%
+/dev/grid/node-x19-y8 89T 67T 22T 75%
+/dev/grid/node-x19-y9 90T 72T 18T 80%
+/dev/grid/node-x19-y10 93T 73T 20T 78%
+/dev/grid/node-x19-y11 88T 70T 18T 79%
+/dev/grid/node-x19-y12 89T 67T 22T 75%
+/dev/grid/node-x19-y13 91T 65T 26T 71%
+/dev/grid/node-x19-y14 92T 67T 25T 72%
+/dev/grid/node-x19-y15 88T 69T 19T 78%
+/dev/grid/node-x19-y16 93T 72T 21T 77%
+/dev/grid/node-x19-y17 88T 64T 24T 72%
+/dev/grid/node-x19-y18 88T 67T 21T 76%
+/dev/grid/node-x19-y19 85T 65T 20T 76%
+/dev/grid/node-x19-y20 90T 68T 22T 75%
+/dev/grid/node-x19-y21 88T 65T 23T 73%
+/dev/grid/node-x19-y22 508T 498T 10T 98%
+/dev/grid/node-x19-y23 93T 65T 28T 69%
+/dev/grid/node-x19-y24 85T 67T 18T 78%
+/dev/grid/node-x19-y25 92T 65T 27T 70%
+/dev/grid/node-x19-y26 92T 67T 25T 72%
+/dev/grid/node-x19-y27 91T 65T 26T 71%
+/dev/grid/node-x19-y28 91T 73T 18T 80%
+/dev/grid/node-x20-y0 86T 64T 22T 74%
+/dev/grid/node-x20-y1 89T 68T 21T 76%
+/dev/grid/node-x20-y2 92T 71T 21T 77%
+/dev/grid/node-x20-y3 86T 68T 18T 79%
+/dev/grid/node-x20-y4 86T 66T 20T 76%
+/dev/grid/node-x20-y5 94T 66T 28T 70%
+/dev/grid/node-x20-y6 91T 73T 18T 80%
+/dev/grid/node-x20-y7 87T 68T 19T 78%
+/dev/grid/node-x20-y8 94T 66T 28T 70%
+/dev/grid/node-x20-y9 89T 64T 25T 71%
+/dev/grid/node-x20-y10 92T 68T 24T 73%
+/dev/grid/node-x20-y11 94T 66T 28T 70%
+/dev/grid/node-x20-y12 88T 73T 15T 82%
+/dev/grid/node-x20-y13 91T 67T 24T 73%
+/dev/grid/node-x20-y14 93T 66T 27T 70%
+/dev/grid/node-x20-y15 88T 72T 16T 81%
+/dev/grid/node-x20-y16 93T 68T 25T 73%
+/dev/grid/node-x20-y17 91T 68T 23T 74%
+/dev/grid/node-x20-y18 87T 73T 14T 83%
+/dev/grid/node-x20-y19 94T 70T 24T 74%
+/dev/grid/node-x20-y20 88T 67T 21T 76%
+/dev/grid/node-x20-y21 88T 68T 20T 77%
+/dev/grid/node-x20-y22 503T 499T 4T 99%
+/dev/grid/node-x20-y23 88T 67T 21T 76%
+/dev/grid/node-x20-y24 92T 68T 24T 73%
+/dev/grid/node-x20-y25 85T 69T 16T 81%
+/dev/grid/node-x20-y26 87T 70T 17T 80%
+/dev/grid/node-x20-y27 86T 70T 16T 81%
+/dev/grid/node-x20-y28 93T 65T 28T 69%
+/dev/grid/node-x21-y0 90T 67T 23T 74%
+/dev/grid/node-x21-y1 85T 66T 19T 77%
+/dev/grid/node-x21-y2 93T 73T 20T 78%
+/dev/grid/node-x21-y3 88T 71T 17T 80%
+/dev/grid/node-x21-y4 94T 71T 23T 75%
+/dev/grid/node-x21-y5 92T 69T 23T 75%
+/dev/grid/node-x21-y6 94T 66T 28T 70%
+/dev/grid/node-x21-y7 94T 65T 29T 69%
+/dev/grid/node-x21-y8 85T 71T 14T 83%
+/dev/grid/node-x21-y9 87T 69T 18T 79%
+/dev/grid/node-x21-y10 86T 68T 18T 79%
+/dev/grid/node-x21-y11 92T 68T 24T 73%
+/dev/grid/node-x21-y12 89T 68T 21T 76%
+/dev/grid/node-x21-y13 88T 73T 15T 82%
+/dev/grid/node-x21-y14 86T 67T 19T 77%
+/dev/grid/node-x21-y15 87T 72T 15T 82%
+/dev/grid/node-x21-y16 87T 70T 17T 80%
+/dev/grid/node-x21-y17 87T 71T 16T 81%
+/dev/grid/node-x21-y18 88T 72T 16T 81%
+/dev/grid/node-x21-y19 93T 65T 28T 69%
+/dev/grid/node-x21-y20 92T 70T 22T 76%
+/dev/grid/node-x21-y21 91T 70T 21T 76%
+/dev/grid/node-x21-y22 510T 493T 17T 96%
+/dev/grid/node-x21-y23 89T 69T 20T 77%
+/dev/grid/node-x21-y24 94T 72T 22T 76%
+/dev/grid/node-x21-y25 91T 70T 21T 76%
+/dev/grid/node-x21-y26 89T 65T 24T 73%
+/dev/grid/node-x21-y27 85T 72T 13T 84%
+/dev/grid/node-x21-y28 93T 72T 21T 77%
+/dev/grid/node-x22-y0 89T 67T 22T 75%
+/dev/grid/node-x22-y1 85T 65T 20T 76%
+/dev/grid/node-x22-y2 93T 64T 29T 68%
+/dev/grid/node-x22-y3 93T 71T 22T 76%
+/dev/grid/node-x22-y4 85T 65T 20T 76%
+/dev/grid/node-x22-y5 85T 67T 18T 78%
+/dev/grid/node-x22-y6 90T 64T 26T 71%
+/dev/grid/node-x22-y7 87T 69T 18T 79%
+/dev/grid/node-x22-y8 94T 72T 22T 76%
+/dev/grid/node-x22-y9 87T 71T 16T 81%
+/dev/grid/node-x22-y10 87T 65T 22T 74%
+/dev/grid/node-x22-y11 93T 72T 21T 77%
+/dev/grid/node-x22-y12 86T 72T 14T 83%
+/dev/grid/node-x22-y13 89T 66T 23T 74%
+/dev/grid/node-x22-y14 90T 67T 23T 74%
+/dev/grid/node-x22-y15 92T 70T 22T 76%
+/dev/grid/node-x22-y16 92T 66T 26T 71%
+/dev/grid/node-x22-y17 91T 66T 25T 72%
+/dev/grid/node-x22-y18 91T 68T 23T 74%
+/dev/grid/node-x22-y19 88T 71T 17T 80%
+/dev/grid/node-x22-y20 90T 69T 21T 76%
+/dev/grid/node-x22-y21 90T 68T 22T 75%
+/dev/grid/node-x22-y22 502T 490T 12T 97%
+/dev/grid/node-x22-y23 91T 67T 24T 73%
+/dev/grid/node-x22-y24 93T 71T 22T 76%
+/dev/grid/node-x22-y25 92T 65T 27T 70%
+/dev/grid/node-x22-y26 93T 69T 24T 74%
+/dev/grid/node-x22-y27 85T 72T 13T 84%
+/dev/grid/node-x22-y28 93T 64T 29T 68%
+/dev/grid/node-x23-y0 92T 73T 19T 79%
+/dev/grid/node-x23-y1 90T 64T 26T 71%
+/dev/grid/node-x23-y2 93T 65T 28T 69%
+/dev/grid/node-x23-y3 88T 72T 16T 81%
+/dev/grid/node-x23-y4 92T 70T 22T 76%
+/dev/grid/node-x23-y5 90T 66T 24T 73%
+/dev/grid/node-x23-y6 86T 66T 20T 76%
+/dev/grid/node-x23-y7 89T 71T 18T 79%
+/dev/grid/node-x23-y8 89T 64T 25T 71%
+/dev/grid/node-x23-y9 90T 64T 26T 71%
+/dev/grid/node-x23-y10 94T 70T 24T 74%
+/dev/grid/node-x23-y11 85T 64T 21T 75%
+/dev/grid/node-x23-y12 86T 66T 20T 76%
+/dev/grid/node-x23-y13 86T 64T 22T 74%
+/dev/grid/node-x23-y14 92T 68T 24T 73%
+/dev/grid/node-x23-y15 94T 70T 24T 74%
+/dev/grid/node-x23-y16 91T 69T 22T 75%
+/dev/grid/node-x23-y17 93T 70T 23T 75%
+/dev/grid/node-x23-y18 87T 65T 22T 74%
+/dev/grid/node-x23-y19 86T 64T 22T 74%
+/dev/grid/node-x23-y20 94T 66T 28T 70%
+/dev/grid/node-x23-y21 92T 64T 28T 69%
+/dev/grid/node-x23-y22 507T 491T 16T 96%
+/dev/grid/node-x23-y23 88T 73T 15T 82%
+/dev/grid/node-x23-y24 87T 69T 18T 79%
+/dev/grid/node-x23-y25 91T 71T 20T 78%
+/dev/grid/node-x23-y26 90T 71T 19T 78%
+/dev/grid/node-x23-y27 87T 70T 17T 80%
+/dev/grid/node-x23-y28 91T 70T 21T 76%
+/dev/grid/node-x24-y0 86T 67T 19T 77%
+/dev/grid/node-x24-y1 94T 67T 27T 71%
+/dev/grid/node-x24-y2 89T 71T 18T 79%
+/dev/grid/node-x24-y3 86T 67T 19T 77%
+/dev/grid/node-x24-y4 87T 73T 14T 83%
+/dev/grid/node-x24-y5 86T 64T 22T 74%
+/dev/grid/node-x24-y6 92T 68T 24T 73%
+/dev/grid/node-x24-y7 85T 68T 17T 80%
+/dev/grid/node-x24-y8 86T 65T 21T 75%
+/dev/grid/node-x24-y9 87T 73T 14T 83%
+/dev/grid/node-x24-y10 91T 68T 23T 74%
+/dev/grid/node-x24-y11 94T 67T 27T 71%
+/dev/grid/node-x24-y12 94T 67T 27T 71%
+/dev/grid/node-x24-y13 88T 71T 17T 80%
+/dev/grid/node-x24-y14 91T 70T 21T 76%
+/dev/grid/node-x24-y15 89T 72T 17T 80%
+/dev/grid/node-x24-y16 92T 69T 23T 75%
+/dev/grid/node-x24-y17 87T 70T 17T 80%
+/dev/grid/node-x24-y18 94T 69T 25T 73%
+/dev/grid/node-x24-y19 91T 66T 25T 72%
+/dev/grid/node-x24-y20 90T 64T 26T 71%
+/dev/grid/node-x24-y21 86T 65T 21T 75%
+/dev/grid/node-x24-y22 508T 494T 14T 97%
+/dev/grid/node-x24-y23 89T 72T 17T 80%
+/dev/grid/node-x24-y24 94T 66T 28T 70%
+/dev/grid/node-x24-y25 88T 64T 24T 72%
+/dev/grid/node-x24-y26 86T 64T 22T 74%
+/dev/grid/node-x24-y27 92T 65T 27T 70%
+/dev/grid/node-x24-y28 89T 72T 17T 80%
+/dev/grid/node-x25-y0 93T 70T 23T 75%
+/dev/grid/node-x25-y1 91T 73T 18T 80%
+/dev/grid/node-x25-y2 89T 65T 24T 73%
+/dev/grid/node-x25-y3 86T 69T 17T 80%
+/dev/grid/node-x25-y4 90T 70T 20T 77%
+/dev/grid/node-x25-y5 89T 65T 24T 73%
+/dev/grid/node-x25-y6 92T 71T 21T 77%
+/dev/grid/node-x25-y7 91T 65T 26T 71%
+/dev/grid/node-x25-y8 91T 67T 24T 73%
+/dev/grid/node-x25-y9 94T 73T 21T 77%
+/dev/grid/node-x25-y10 94T 73T 21T 77%
+/dev/grid/node-x25-y11 91T 70T 21T 76%
+/dev/grid/node-x25-y12 91T 71T 20T 78%
+/dev/grid/node-x25-y13 86T 67T 19T 77%
+/dev/grid/node-x25-y14 88T 67T 21T 76%
+/dev/grid/node-x25-y15 90T 67T 23T 74%
+/dev/grid/node-x25-y16 92T 64T 28T 69%
+/dev/grid/node-x25-y17 94T 68T 26T 72%
+/dev/grid/node-x25-y18 87T 73T 14T 83%
+/dev/grid/node-x25-y19 86T 73T 13T 84%
+/dev/grid/node-x25-y20 92T 72T 20T 78%
+/dev/grid/node-x25-y21 93T 73T 20T 78%
+/dev/grid/node-x25-y22 504T 491T 13T 97%
+/dev/grid/node-x25-y23 91T 72T 19T 79%
+/dev/grid/node-x25-y24 85T 70T 15T 82%
+/dev/grid/node-x25-y25 85T 73T 12T 85%
+/dev/grid/node-x25-y26 85T 67T 18T 78%
+/dev/grid/node-x25-y27 89T 69T 20T 77%
+/dev/grid/node-x25-y28 86T 66T 20T 76%
+/dev/grid/node-x26-y0 91T 72T 19T 79%
+/dev/grid/node-x26-y1 86T 68T 18T 79%
+/dev/grid/node-x26-y2 88T 70T 18T 79%
+/dev/grid/node-x26-y3 88T 66T 22T 75%
+/dev/grid/node-x26-y4 85T 71T 14T 83%
+/dev/grid/node-x26-y5 90T 66T 24T 73%
+/dev/grid/node-x26-y6 90T 66T 24T 73%
+/dev/grid/node-x26-y7 89T 73T 16T 82%
+/dev/grid/node-x26-y8 85T 65T 20T 76%
+/dev/grid/node-x26-y9 90T 72T 18T 80%
+/dev/grid/node-x26-y10 86T 64T 22T 74%
+/dev/grid/node-x26-y11 90T 64T 26T 71%
+/dev/grid/node-x26-y12 92T 73T 19T 79%
+/dev/grid/node-x26-y13 85T 72T 13T 84%
+/dev/grid/node-x26-y14 91T 73T 18T 80%
+/dev/grid/node-x26-y15 92T 69T 23T 75%
+/dev/grid/node-x26-y16 90T 72T 18T 80%
+/dev/grid/node-x26-y17 90T 68T 22T 75%
+/dev/grid/node-x26-y18 90T 73T 17T 81%
+/dev/grid/node-x26-y19 94T 64T 30T 68%
+/dev/grid/node-x26-y20 86T 73T 13T 84%
+/dev/grid/node-x26-y21 86T 66T 20T 76%
+/dev/grid/node-x26-y22 510T 491T 19T 96%
+/dev/grid/node-x26-y23 87T 66T 21T 75%
+/dev/grid/node-x26-y24 91T 64T 27T 70%
+/dev/grid/node-x26-y25 94T 66T 28T 70%
+/dev/grid/node-x26-y26 85T 68T 17T 80%
+/dev/grid/node-x26-y27 85T 71T 14T 83%
+/dev/grid/node-x26-y28 94T 64T 30T 68%
+/dev/grid/node-x27-y0 88T 73T 15T 82%
+/dev/grid/node-x27-y1 94T 67T 27T 71%
+/dev/grid/node-x27-y2 90T 73T 17T 81%
+/dev/grid/node-x27-y3 93T 71T 22T 76%
+/dev/grid/node-x27-y4 89T 70T 19T 78%
+/dev/grid/node-x27-y5 90T 66T 24T 73%
+/dev/grid/node-x27-y6 87T 73T 14T 83%
+/dev/grid/node-x27-y7 87T 66T 21T 75%
+/dev/grid/node-x27-y8 86T 69T 17T 80%
+/dev/grid/node-x27-y9 88T 73T 15T 82%
+/dev/grid/node-x27-y10 92T 64T 28T 69%
+/dev/grid/node-x27-y11 87T 69T 18T 79%
+/dev/grid/node-x27-y12 91T 64T 27T 70%
+/dev/grid/node-x27-y13 94T 68T 26T 72%
+/dev/grid/node-x27-y14 89T 68T 21T 76%
+/dev/grid/node-x27-y15 87T 67T 20T 77%
+/dev/grid/node-x27-y16 90T 72T 18T 80%
+/dev/grid/node-x27-y17 94T 65T 29T 69%
+/dev/grid/node-x27-y18 90T 72T 18T 80%
+/dev/grid/node-x27-y19 88T 73T 15T 82%
+/dev/grid/node-x27-y20 88T 71T 17T 80%
+/dev/grid/node-x27-y21 88T 64T 24T 72%
+/dev/grid/node-x27-y22 504T 490T 14T 97%
+/dev/grid/node-x27-y23 93T 66T 27T 70%
+/dev/grid/node-x27-y24 85T 67T 18T 78%
+/dev/grid/node-x27-y25 94T 64T 30T 68%
+/dev/grid/node-x27-y26 85T 72T 13T 84%
+/dev/grid/node-x27-y27 85T 73T 12T 85%
+/dev/grid/node-x27-y28 89T 70T 19T 78%
+/dev/grid/node-x28-y0 93T 66T 27T 70%
+/dev/grid/node-x28-y1 86T 71T 15T 82%
+/dev/grid/node-x28-y2 94T 73T 21T 77%
+/dev/grid/node-x28-y3 91T 72T 19T 79%
+/dev/grid/node-x28-y4 87T 69T 18T 79%
+/dev/grid/node-x28-y5 85T 70T 15T 82%
+/dev/grid/node-x28-y6 85T 72T 13T 84%
+/dev/grid/node-x28-y7 89T 72T 17T 80%
+/dev/grid/node-x28-y8 90T 73T 17T 81%
+/dev/grid/node-x28-y9 94T 64T 30T 68%
+/dev/grid/node-x28-y10 85T 73T 12T 85%
+/dev/grid/node-x28-y11 89T 70T 19T 78%
+/dev/grid/node-x28-y12 94T 67T 27T 71%
+/dev/grid/node-x28-y13 87T 68T 19T 78%
+/dev/grid/node-x28-y14 94T 72T 22T 76%
+/dev/grid/node-x28-y15 92T 66T 26T 71%
+/dev/grid/node-x28-y16 91T 64T 27T 70%
+/dev/grid/node-x28-y17 86T 69T 17T 80%
+/dev/grid/node-x28-y18 88T 69T 19T 78%
+/dev/grid/node-x28-y19 90T 70T 20T 77%
+/dev/grid/node-x28-y20 89T 69T 20T 77%
+/dev/grid/node-x28-y21 90T 67T 23T 74%
+/dev/grid/node-x28-y22 506T 491T 15T 97%
+/dev/grid/node-x28-y23 89T 70T 19T 78%
+/dev/grid/node-x28-y24 90T 73T 17T 81%
+/dev/grid/node-x28-y25 86T 65T 21T 75%
+/dev/grid/node-x28-y26 93T 73T 20T 78%
+/dev/grid/node-x28-y27 88T 69T 19T 78%
+/dev/grid/node-x28-y28 92T 68T 24T 73%
+/dev/grid/node-x29-y0 88T 70T 18T 79%
+/dev/grid/node-x29-y1 89T 68T 21T 76%
+/dev/grid/node-x29-y2 85T 73T 12T 85%
+/dev/grid/node-x29-y3 89T 73T 16T 82%
+/dev/grid/node-x29-y4 86T 68T 18T 79%
+/dev/grid/node-x29-y5 91T 70T 21T 76%
+/dev/grid/node-x29-y6 86T 70T 16T 81%
+/dev/grid/node-x29-y7 86T 64T 22T 74%
+/dev/grid/node-x29-y8 90T 73T 17T 81%
+/dev/grid/node-x29-y9 92T 65T 27T 70%
+/dev/grid/node-x29-y10 89T 72T 17T 80%
+/dev/grid/node-x29-y11 85T 66T 19T 77%
+/dev/grid/node-x29-y12 89T 73T 16T 82%
+/dev/grid/node-x29-y13 90T 72T 18T 80%
+/dev/grid/node-x29-y14 86T 69T 17T 80%
+/dev/grid/node-x29-y15 85T 64T 21T 75%
+/dev/grid/node-x29-y16 88T 69T 19T 78%
+/dev/grid/node-x29-y17 92T 64T 28T 69%
+/dev/grid/node-x29-y18 86T 65T 21T 75%
+/dev/grid/node-x29-y19 92T 70T 22T 76%
+/dev/grid/node-x29-y20 94T 64T 30T 68%
+/dev/grid/node-x29-y21 87T 64T 23T 73%
+/dev/grid/node-x29-y22 509T 497T 12T 97%
+/dev/grid/node-x29-y23 91T 67T 24T 73%
+/dev/grid/node-x29-y24 90T 67T 23T 74%
+/dev/grid/node-x29-y25 86T 65T 21T 75%
+/dev/grid/node-x29-y26 94T 68T 26T 72%
+/dev/grid/node-x29-y27 89T 69T 20T 77%
+/dev/grid/node-x29-y28 87T 71T 16T 81%
+/dev/grid/node-x30-y0 92T 64T 28T 69%
+/dev/grid/node-x30-y1 93T 67T 26T 72%
+/dev/grid/node-x30-y2 93T 66T 27T 70%
+/dev/grid/node-x30-y3 93T 67T 26T 72%
+/dev/grid/node-x30-y4 86T 70T 16T 81%
+/dev/grid/node-x30-y5 91T 67T 24T 73%
+/dev/grid/node-x30-y6 89T 66T 23T 74%
+/dev/grid/node-x30-y7 89T 72T 17T 80%
+/dev/grid/node-x30-y8 93T 69T 24T 74%
+/dev/grid/node-x30-y9 94T 68T 26T 72%
+/dev/grid/node-x30-y10 89T 69T 20T 77%
+/dev/grid/node-x30-y11 94T 64T 30T 68%
+/dev/grid/node-x30-y12 93T 65T 28T 69%
+/dev/grid/node-x30-y13 85T 72T 13T 84%
+/dev/grid/node-x30-y14 88T 68T 20T 77%
+/dev/grid/node-x30-y15 94T 64T 30T 68%
+/dev/grid/node-x30-y16 92T 73T 19T 79%
+/dev/grid/node-x30-y17 92T 73T 19T 79%
+/dev/grid/node-x30-y18 87T 68T 19T 78%
+/dev/grid/node-x30-y19 93T 64T 29T 68%
+/dev/grid/node-x30-y20 94T 67T 27T 71%
+/dev/grid/node-x30-y21 89T 67T 22T 75%
+/dev/grid/node-x30-y22 507T 491T 16T 96%
+/dev/grid/node-x30-y23 91T 64T 27T 70%
+/dev/grid/node-x30-y24 87T 65T 22T 74%
+/dev/grid/node-x30-y25 85T 65T 20T 76%
+/dev/grid/node-x30-y26 91T 68T 23T 74%
+/dev/grid/node-x30-y27 90T 67T 23T 74%
+/dev/grid/node-x30-y28 94T 66T 28T 70%
+/dev/grid/node-x31-y0 92T 67T 25T 72%
+/dev/grid/node-x31-y1 93T 68T 25T 73%
+/dev/grid/node-x31-y2 92T 66T 26T 71%
+/dev/grid/node-x31-y3 89T 64T 25T 71%
+/dev/grid/node-x31-y4 90T 71T 19T 78%
+/dev/grid/node-x31-y5 89T 68T 21T 76%
+/dev/grid/node-x31-y6 85T 72T 13T 84%
+/dev/grid/node-x31-y7 88T 65T 23T 73%
+/dev/grid/node-x31-y8 86T 66T 20T 76%
+/dev/grid/node-x31-y9 90T 72T 18T 80%
+/dev/grid/node-x31-y10 86T 67T 19T 77%
+/dev/grid/node-x31-y11 89T 72T 17T 80%
+/dev/grid/node-x31-y12 90T 73T 17T 81%
+/dev/grid/node-x31-y13 91T 70T 21T 76%
+/dev/grid/node-x31-y14 94T 67T 27T 71%
+/dev/grid/node-x31-y15 94T 73T 21T 77%
+/dev/grid/node-x31-y16 86T 71T 15T 82%
+/dev/grid/node-x31-y17 86T 73T 13T 84%
+/dev/grid/node-x31-y18 89T 65T 24T 73%
+/dev/grid/node-x31-y19 86T 72T 14T 83%
+/dev/grid/node-x31-y20 88T 64T 24T 72%
+/dev/grid/node-x31-y21 90T 64T 26T 71%
+/dev/grid/node-x31-y22 505T 496T 9T 98%
+/dev/grid/node-x31-y23 90T 73T 17T 81%
+/dev/grid/node-x31-y24 91T 73T 18T 80%
+/dev/grid/node-x31-y25 94T 69T 25T 73%
+/dev/grid/node-x31-y26 92T 64T 28T 69%
+/dev/grid/node-x31-y27 91T 66T 25T 72%
+/dev/grid/node-x31-y28 85T 65T 20T 76%
+/dev/grid/node-x32-y0 85T 69T 16T 81%
+/dev/grid/node-x32-y1 93T 67T 26T 72%
+/dev/grid/node-x32-y2 93T 73T 20T 78%
+/dev/grid/node-x32-y3 94T 71T 23T 75%
+/dev/grid/node-x32-y4 90T 70T 20T 77%
+/dev/grid/node-x32-y5 92T 68T 24T 73%
+/dev/grid/node-x32-y6 94T 64T 30T 68%
+/dev/grid/node-x32-y7 86T 72T 14T 83%
+/dev/grid/node-x32-y8 85T 73T 12T 85%
+/dev/grid/node-x32-y9 89T 69T 20T 77%
+/dev/grid/node-x32-y10 89T 73T 16T 82%
+/dev/grid/node-x32-y11 87T 65T 22T 74%
+/dev/grid/node-x32-y12 94T 67T 27T 71%
+/dev/grid/node-x32-y13 93T 67T 26T 72%
+/dev/grid/node-x32-y14 93T 66T 27T 70%
+/dev/grid/node-x32-y15 86T 72T 14T 83%
+/dev/grid/node-x32-y16 89T 69T 20T 77%
+/dev/grid/node-x32-y17 93T 67T 26T 72%
+/dev/grid/node-x32-y18 87T 64T 23T 73%
+/dev/grid/node-x32-y19 85T 69T 16T 81%
+/dev/grid/node-x32-y20 85T 69T 16T 81%
+/dev/grid/node-x32-y21 91T 65T 26T 71%
+/dev/grid/node-x32-y22 503T 491T 12T 97%
+/dev/grid/node-x32-y23 94T 71T 23T 75%
+/dev/grid/node-x32-y24 87T 64T 23T 73%
+/dev/grid/node-x32-y25 91T 73T 18T 80%
+/dev/grid/node-x32-y26 93T 67T 26T 72%
+/dev/grid/node-x32-y27 86T 71T 15T 82%
+/dev/grid/node-x32-y28 91T 64T 27T 70%
+/dev/grid/node-x33-y0 86T 73T 13T 84%
+/dev/grid/node-x33-y1 88T 71T 17T 80%
+/dev/grid/node-x33-y2 90T 66T 24T 73%
+/dev/grid/node-x33-y3 85T 64T 21T 75%
+/dev/grid/node-x33-y4 87T 66T 21T 75%
+/dev/grid/node-x33-y5 91T 68T 23T 74%
+/dev/grid/node-x33-y6 93T 68T 25T 73%
+/dev/grid/node-x33-y7 92T 70T 22T 76%
+/dev/grid/node-x33-y8 91T 64T 27T 70%
+/dev/grid/node-x33-y9 85T 72T 13T 84%
+/dev/grid/node-x33-y10 89T 65T 24T 73%
+/dev/grid/node-x33-y11 91T 66T 25T 72%
+/dev/grid/node-x33-y12 87T 68T 19T 78%
+/dev/grid/node-x33-y13 89T 70T 19T 78%
+/dev/grid/node-x33-y14 86T 68T 18T 79%
+/dev/grid/node-x33-y15 85T 69T 16T 81%
+/dev/grid/node-x33-y16 94T 66T 28T 70%
+/dev/grid/node-x33-y17 92T 68T 24T 73%
+/dev/grid/node-x33-y18 88T 72T 16T 81%
+/dev/grid/node-x33-y19 90T 73T 17T 81%
+/dev/grid/node-x33-y20 89T 64T 25T 71%
+/dev/grid/node-x33-y21 92T 71T 21T 77%
+/dev/grid/node-x33-y22 502T 497T 5T 99%
+/dev/grid/node-x33-y23 94T 67T 27T 71%
+/dev/grid/node-x33-y24 93T 64T 29T 68%
+/dev/grid/node-x33-y25 90T 66T 24T 73%
+/dev/grid/node-x33-y26 87T 72T 15T 82%
+/dev/grid/node-x33-y27 85T 73T 12T 85%
+/dev/grid/node-x33-y28 86T 72T 14T 83%
+/dev/grid/node-x34-y0 89T 66T 23T 74%
+/dev/grid/node-x34-y1 94T 64T 30T 68%
+/dev/grid/node-x34-y2 92T 69T 23T 75%
+/dev/grid/node-x34-y3 93T 70T 23T 75%
+/dev/grid/node-x34-y4 88T 64T 24T 72%
+/dev/grid/node-x34-y5 94T 67T 27T 71%
+/dev/grid/node-x34-y6 89T 68T 21T 76%
+/dev/grid/node-x34-y7 94T 71T 23T 75%
+/dev/grid/node-x34-y8 88T 69T 19T 78%
+/dev/grid/node-x34-y9 89T 72T 17T 80%
+/dev/grid/node-x34-y10 90T 69T 21T 76%
+/dev/grid/node-x34-y11 91T 65T 26T 71%
+/dev/grid/node-x34-y12 88T 69T 19T 78%
+/dev/grid/node-x34-y13 90T 69T 21T 76%
+/dev/grid/node-x34-y14 92T 66T 26T 71%
+/dev/grid/node-x34-y15 94T 70T 24T 74%
+/dev/grid/node-x34-y16 87T 69T 18T 79%
+/dev/grid/node-x34-y17 86T 67T 19T 77%
+/dev/grid/node-x34-y18 94T 66T 28T 70%
+/dev/grid/node-x34-y19 94T 69T 25T 73%
+/dev/grid/node-x34-y20 91T 67T 24T 73%
+/dev/grid/node-x34-y21 87T 72T 15T 82%
+/dev/grid/node-x34-y22 501T 495T 6T 98%
+/dev/grid/node-x34-y23 93T 71T 22T 76%
+/dev/grid/node-x34-y24 92T 73T 19T 79%
+/dev/grid/node-x34-y25 90T 73T 17T 81%
+/dev/grid/node-x34-y26 89T 69T 20T 77%
+/dev/grid/node-x34-y27 89T 72T 17T 80%
+/dev/grid/node-x34-y28 87T 66T 21T 75%
diff --git a/2016/aoc22/src/main.rs b/2016/aoc22/src/main.rs
new file mode 100644
index 0000000..bd374d5
--- /dev/null
+++ b/2016/aoc22/src/main.rs
@@ -0,0 +1,198 @@
+extern crate regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::collections::HashMap;
+use std::collections::HashSet;
+
+use regex::Regex;
+
+use std::str::FromStr;
+
+#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
+struct Node {
+ x: i8,
+ y: i8,
+ size: i16,
+ used: i16,
+ avail: i16,
+ blocker: bool
+}
+
+impl FromStr for Node {
+ type Err = String;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ let reg = Regex::new(r"/dev/grid/node-x(\d+)-y(\d+) +(\d+)T +(\d+)T +(\d+)T +(\d+)%").unwrap();
+ let cap = match reg.captures(s) {
+ Some(cap) => cap,
+ None => return Err("Does not match regex".to_string())
+ };
+ Ok(Node {
+ x: cap.at(1).unwrap().parse().unwrap(),
+ y: cap.at(2).unwrap().parse().unwrap(),
+ size: cap.at(3).unwrap().parse().unwrap(),
+ used: cap.at(4).unwrap().parse().unwrap(),
+ avail: cap.at(5).unwrap().parse().unwrap(),
+ blocker: false
+ })
+ }
+}
+
+impl Node {
+ fn is_viable_pair(&self, other: &Node) -> bool {
+ (self.x != other.x || self.y != other.y) && self.used > 0 && self.used <= other.avail
+ }
+
+ fn recalculate_avail(&mut self) {
+ self.avail = self.size - self.used;
+ debug_assert!(self.avail >= 0);
+ debug_assert!(self.used >= 0);
+ }
+}
+
+#[derive(Clone, Hash, PartialEq, Eq)]
+struct Grid {
+ nodes: Vec<Vec<Node>>,
+ goal_x: i8,
+ goal_y: i8
+}
+
+impl Grid {
+ fn new(nodes: Vec<Node>) -> Grid {
+ let mut grid_nodes = Vec::new();
+ let mut next_col = Vec::new();
+
+ let mut current_x = 0;
+
+ for node in nodes {
+ if current_x != node.x {
+ grid_nodes.push(next_col);
+ next_col = Vec::new();
+ current_x += 1;
+ }
+
+ next_col.push(node);
+ }
+ grid_nodes.push(next_col);
+ grid_nodes = Grid::normalize(grid_nodes);
+
+ Grid {
+ nodes: grid_nodes,
+ goal_x: current_x,
+ goal_y: 0
+ }
+ }
+
+ fn normalize(mut nodes: Vec<Vec<Node>>) -> Vec<Vec<Node>> {
+ for x in 0..nodes.len() {
+ for y in 0..nodes[x].len() {
+ nodes[x][y].size = ((nodes[x][y].size + 50)/100) * 100;
+ nodes[x][y].used = ((nodes[x][y].used + 50)/100) * 100;
+ nodes[x][y].avail = ((nodes[x][y].avail + 50)/100) * 100;
+ }
+ }
+ nodes
+ }
+
+ fn is_final(&self) -> bool {
+ self.goal_x == 0 && self.goal_y == 0
+ }
+
+ fn make_move(&self, x: i8, y: i8, dx: i8, dy: i8) -> Option<Grid> {
+ if x+dx < 0 || x+dx >= self.nodes.len() as i8 || y+dy < 0 || y+dy >= self.nodes[x as usize].len() as i8 {
+ return None;
+ }
+ if !self.nodes[x as usize][y as usize].is_viable_pair(&self.nodes[(x+dx) as usize][(y+dy) as usize]) {
+ return None;
+ }
+
+ let mut new_grid = self.clone();
+ new_grid.nodes[(x+dx) as usize][(y+dy) as usize].used += new_grid.nodes[x as usize][y as usize].used;
+ new_grid.nodes[(x+dx) as usize][(y+dy) as usize].recalculate_avail();
+ new_grid.nodes[x as usize][y as usize].used = 0;
+ new_grid.nodes[x as usize][y as usize].recalculate_avail();
+
+ if new_grid.goal_x == x && new_grid.goal_y == y {
+ new_grid.goal_x = x+dx;
+ new_grid.goal_y = y+dy;
+ }
+
+ Some(new_grid)
+ }
+
+ fn available_moves(&self) -> Vec<Grid> {
+ let mut moves = Vec::with_capacity(4);
+
+ for x in 0..self.nodes.len() as i8 {
+ for y in 0..self.nodes[x as usize].len() as i8 {
+ match self.make_move(x, y, -1, 0) {
+ Some(grid) => { moves.push(grid); },
+ None => {}
+ };
+ match self.make_move(x, y, 0, -1) {
+ Some(grid) => { moves.push(grid); },
+ None => {}
+ };
+ match self.make_move(x, y, 1, 0) {
+ Some(grid) => { moves.push(grid); },
+ None => {}
+ };
+ match self.make_move(x, y, 0, 1) {
+ Some(grid) => { moves.push(grid); },
+ None => {}
+ };
+ }
+ }
+
+ moves
+ }
+}
+
+
+fn main() {
+ let nodes = read_input();
+
+ let initial = Grid::new(nodes);
+ println!("Initial grid has {} possible moves", initial.available_moves().len());
+
+ let mut explored: HashSet<Grid> = HashSet::new();
+ let mut frontier: HashMap<Grid, u32> = HashMap::new();
+ frontier.insert(initial, 0);
+ let mut found_final = false;
+
+ while !found_final {
+ let (best_frontier, moves) = find_best_frontiers(&frontier);
+
+ let new_states = best_frontier.available_moves();
+ found_final = new_states.iter().any(|ref s| s.is_final());
+
+ for state in new_states {
+ if !(explored.contains(&state) || frontier.contains_key(&state)) {
+ frontier.insert(state, moves+1);
+ }
+ }
+
+ frontier.remove(&best_frontier);
+ explored.insert(best_frontier);
+ }
+
+ let (final_frontier, moves) = frontier.iter().find(|&(s, _)| s.is_final()).unwrap();
+ println!("It took {} moves to get the data", moves);
+}
+
+fn read_input() -> Vec<Node> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+
+ file.lines()
+ .skip(2)
+ .filter_map(|line| Node::from_str(line.unwrap().as_ref()).ok())
+ .collect()
+}
+
+fn find_best_frontiers(frontier: &HashMap<Grid, u32>) -> (Grid, u32) {
+ frontier.iter().min_by_key(|&(ref grid, &moves)| {
+ grid.goal_x as u32 + grid.goal_y as u32 + moves
+ }).map(|(&ref grid, &moves)| (grid.clone(), moves.clone())).unwrap()
+}
diff --git a/2016/aoc23/Cargo.lock b/2016/aoc23/Cargo.lock
new file mode 100644
index 0000000..c6ab041
--- /dev/null
+++ b/2016/aoc23/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc23"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc23/Cargo.toml b/2016/aoc23/Cargo.toml
new file mode 100644
index 0000000..39fd06e
--- /dev/null
+++ b/2016/aoc23/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc23"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc23/input.txt b/2016/aoc23/input.txt
new file mode 100644
index 0000000..3ff0460
--- /dev/null
+++ b/2016/aoc23/input.txt
@@ -0,0 +1,26 @@
+cpy a b
+dec b
+cpy a d
+cpy 0 a
+cpy b c
+inc a
+dec c
+jnz c -2
+dec d
+jnz d -5
+dec b
+cpy b c
+cpy c d
+dec d
+inc c
+jnz d -2
+tgl c
+cpy -16 c
+jnz 1 c
+cpy 90 c
+jnz 90 d
+inc a
+inc d
+jnz d -2
+inc c
+jnz c -5
diff --git a/2016/aoc23/src/main.rs b/2016/aoc23/src/main.rs
new file mode 100644
index 0000000..a12fa18
--- /dev/null
+++ b/2016/aoc23/src/main.rs
@@ -0,0 +1,247 @@
+extern crate regex;
+use regex::Regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+enum Instruction {
+ Inc(usize),
+ Dec(usize),
+
+ TglLit(i32),
+ TglReg(usize),
+
+ CpyLitReg(i32, usize),
+ CpyRegReg(usize, usize),
+ CpyLitLit(i32, i32),
+ CpyRegLit(usize, i32),
+
+ JnzLitLit(i32, i32),
+ JnzRegLit(usize, i32),
+ JnzLitReg(i32, usize),
+ JnzRegReg(usize, usize),
+
+ Noop
+}
+
+impl Instruction {
+ fn parse(line: &str) -> Instruction {
+ match Regex::new(r"inc (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::Inc(reg);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"dec (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::Dec(reg);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"tgl (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::TglReg(reg);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"tgl ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let lit = cap.at(1).unwrap().parse().unwrap();
+ return Instruction::TglLit(lit);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::CpyLitReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::CpyRegReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"cpy ([-\d]+) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::CpyLitLit(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"cpy (a|b|c|d) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::CpyRegReg(src, dest);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"jnz ([-\d]+) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::JnzLitReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"jnz (a|b|c|d) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::JnzRegReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::JnzLitLit(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::JnzRegLit(src, dest);
+ },
+ _ => {}
+ }
+
+ panic!("Invalid instruction line");
+ }
+
+ fn toggle(&self) -> Self {
+ match *self {
+ Instruction::Inc(a) => Instruction::Dec(a),
+ Instruction::Dec(a) => Instruction::Inc(a),
+
+ Instruction::TglLit(_) => Instruction::Noop,
+ Instruction::TglReg(a) => Instruction::Inc(a),
+
+ Instruction::CpyLitReg(a, b) => Instruction::JnzLitReg(a, b),
+ Instruction::CpyRegReg(a, b) => Instruction::JnzRegReg(a, b),
+ Instruction::CpyLitLit(a, b) => Instruction::JnzLitLit(a, b),
+ Instruction::CpyRegLit(a, b) => Instruction::JnzRegLit(a, b),
+
+ Instruction::JnzLitLit(a, b) => Instruction::CpyLitLit(a, b),
+ Instruction::JnzRegLit(a, b) => Instruction::CpyRegLit(a, b),
+ Instruction::JnzLitReg(a, b) => Instruction::CpyLitReg(a, b),
+ Instruction::JnzRegReg(a, b) => Instruction::CpyRegReg(a, b),
+ Instruction::Noop => Instruction::Noop
+ }
+ }
+}
+
+fn main() {
+ let mut program = read_file();
+
+ let mut registers: [i32; 4] = [12, 0, 0, 0];
+ let mut pc: usize = 0;
+
+ while pc < program.len() {
+ let mut pc_next: usize = pc+1;
+
+ match program[pc] {
+ Instruction::Inc(dest) => {
+ registers[dest] += 1;
+ },
+ Instruction::Dec(dest) => {
+ registers[dest] -= 1;
+ },
+
+ Instruction::TglReg(offset) => {
+ let line_to_toggle = (pc as i32 + registers[offset]) as usize;
+ if line_to_toggle > 0 && line_to_toggle < program.len() {
+ program[line_to_toggle] = program[line_to_toggle].toggle();
+ }
+ },
+ Instruction::TglLit(offset) => {
+ let line_to_toggle = (pc as i32 + offset) as usize;
+ if line_to_toggle > 0 && line_to_toggle < program.len() {
+ program[line_to_toggle] = program[line_to_toggle].toggle();
+ }
+ },
+
+ Instruction::CpyLitReg(src, dest) => {
+ registers[dest] = src;
+ },
+ Instruction::CpyRegReg(src, dest) => {
+ registers[dest] = registers[src];
+ },
+ Instruction::CpyLitLit(_, _) | Instruction::CpyRegLit(_, _) => {},
+
+ Instruction::JnzRegLit(condition, offset) => {
+ if registers[condition] != 0 {
+ pc_next = (pc as i32 + offset) as usize;
+ }
+ },
+ Instruction::JnzLitLit(condition, offset) => {
+ if condition != 0 {
+ pc_next = (pc as i32 + offset) as usize;
+ }
+ },
+ Instruction::JnzRegReg(condition, offset) => {
+ if registers[condition] != 0 {
+ pc_next = (pc as i32 + registers[offset]) as usize;
+ }
+ },
+ Instruction::JnzLitReg(condition, offset) => {
+ if condition != 0 {
+ pc_next = (pc as i32 + registers[offset]) as usize;
+ }
+ },
+ Instruction::Noop => {}
+ }
+
+ pc = pc_next;
+ }
+
+ println!("a: {}, b: {}, c: {}, d: {}", registers[0], registers[1], registers[2], registers[3]);
+
+}
+
+fn to_register_index(name: &str) -> usize {
+ match name {
+ "a" => 0,
+ "b" => 1,
+ "c" => 2,
+ "d" => 3,
+ _ => panic!("Invalid register provided")
+ }
+}
+
+fn read_file() -> Vec<Instruction> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap())
+ .filter(|line| line.len() > 0)
+ .map(|line| Instruction::parse(line.trim()))
+ .collect()
+}
diff --git a/2016/aoc24/Cargo.lock b/2016/aoc24/Cargo.lock
new file mode 100644
index 0000000..d8b394a
--- /dev/null
+++ b/2016/aoc24/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc24"
+version = "0.1.0"
+
diff --git a/2016/aoc24/Cargo.toml b/2016/aoc24/Cargo.toml
new file mode 100644
index 0000000..26becbd
--- /dev/null
+++ b/2016/aoc24/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc24"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc24/input.txt b/2016/aoc24/input.txt
new file mode 100644
index 0000000..cc45a4f
--- /dev/null
+++ b/2016/aoc24/input.txt
@@ -0,0 +1,39 @@
+#######################################################################################################################################################################################
+#...........#.....#...........#.#.......#.....#.#...............#.....#.....#.......#.......#.......#.....................#.........#.....#...#3......#...#.#.............#.......#...#
+#####.#.#.###.###.#####.#.#####.#.###.###.###.#.#.#.#.#.#.###.#.###.###.###.#.#######.#.#.#.###.###.#.#.#.#####.#.#.#####.###.#.#######.#############.#.#.#.#.#.#.###.#.#.#.#.###.#.#.#
+#...#.#.#.#.....#.#...#...#.....#.....#.#...#.........#.....................#.....#...#...#.......#.....#.#.........#.#.#.#.#.......................#...#...#.#.#.#.....#.#.........#.#
+#.#.#.#.#.#####.#.#.#.#.#.#.#.#.###.#.#.###.#.#.#.#.#.#########.#.###.###.#.#.###.###.#.#.#.#.###.#.#.#.#.#.#.#####.#.#.###.###.#######.#.#.#.###.#.###.#.#.#####.#####.#.#.###.#.#.#.#
+#.#.#...#.....#.#.....#...#.#...#.#...#.......#...........#...#...#...#.#.....#.#...#...........#.#.......#...#...#.#.........#...#.......#.#...#.....#...#.......#.#.#.............#.#
+#.#######.#.#.###.#.#.#####.#.#.#.#.###.#####.#.#.###.#.#.#.#.#.#.#.#.#.#.###.#.#.#.###.#######.#######.#.#.###.#.#.#.#.#.#.###.#.#.#.#.#.###.#.#####.#.#.#.#.#.#.#.#.#.###.#.#####.#.#
+#.#...#.....#.......#.......#.#.......#...#.#.....#.#.#.#.#.#.......#...#.....#.#.#.#.#.........#...#...#...#.......#...#...#.....#.....#...#.........#...#.#...#...#...#.........#.#.#
+#.#.#.#.###.###.#.#.#.###.###.#.#.###.#.#.#.#####.#.###.#.#####.#####.###.#.#.#.#.###.#.#.#.###.###.#.#.#.#.#.#####.#.###.#.#.###.#.#.#.#.###.###.#######.#.###.###.#.#######.#.#.#.#.#
+#.#...#...#...............#...#...#...#.#.........#.#...#...#.#...#.#.....#...#.#...#.#.#...#.#.#.#.#.....#...#...#.......#.#...#.........#.#.....#.#...#.....#.#...#.#2#.....#.......#
+#.#.#####.#########.#.###.#.#####.#.#.#.#######.#.###.#.#.#.#.###.#.#.###.#.###.#.#.#.#.#.###.###.#.#.#######.#.###.#.#.#.#.#.#.#.#####.###.#.###.#.#####.#.#.###.#.#.#.###.#.###.###.#
+#...#...........#.....#.......#...#0..........#...#.....#.#...#.#...#.#.#...#.#.......#.........#...#.#...#.#.#.......#...#.#.........#.#.....................#.#.#.#.....#.#.....#...#
+#.###.#.#.#.#.#.###.#.#.#.#.#.###.#.#.###.#.#.#.###.###.#.#####.#.#.#.#.###.#.#.###.#.#.###.###.#.#####.#.#.#.###.#.#######.#######.#.#.#.###.#.#.#.#.#.#######.#.#.#####.#.###.###.#.#
+#...#...#...#.#...........#...#.#.....#...#...#.....#.#.............#...#.........#...#.....#...#.......#...#.#.............#.........#...#.#.....#.#.........#.............#...#.....#
+#.#.#.###.#.###.#.#.#.###.#.###.#######.#.#.###.#.#.#.#.###.#.###.#.#.#.#.#####.#.#.#.#####.#.#####.#.#.#.#.###.###.#.###.###.###.#.#.#.###.#.#.###.#.#.###.#########.#####.#.#.#.#####
+#.#...#.#.......#...#.....#.....#...#...#.....#...#...#.........#.....#.#.........#.....#.....#.........#...#.#.....#.#...#...#.#.#...#.#...#.........#.#...#.........#.#.......#.....#
+#.#####.#.###.#.#.#.###.#.#.#.#.#.#.###.#.#.#.###.###.#.###.#.###.#.#.#.###.#.#####.###.#.#.#.#.#.#####.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.###.#.#.#
+#.....#...#...........#...#...........#.#.....#...#.....#...#.#.#.#...#.....#...#...#...............#...#.........#...#.....#...#.#...#.#...#.....#.....#.....#...#.#...#...#.#.......#
+###.###.#.#.#####.###.#####.#.###.#.#.#####.#.###.#.###.#.###.#.#.#.#.###.#.###.#.#.#.#.###.#.###.#.#.#.#.#.#.###.#.#.#.###.###.#.#.###.#########.#.#####.###########.#.###.###.#####.#
+#...#1#...#...#.......#...#...#.#...#...#...........#.#.......#.......#.#.........#.#...#...#...............#...#.....#.#...#.#.....#.........#...#.....#.#...#...#.....#.#.#.#...#...#
+#.###.###.#.#.#.#####.#.#.#.#.#.#.#####.#####.#.#####.#.#.#.#.###.#.#.#.###.#.###.#.###.#.#.#####.#.#.#####.#.#.###.#.###.#.#.#.#.#.#.#####.#.#.#.#.###.#.#.###.#.#.#.#.#.#.#.###.#.#.#
+#.....#.#.#.#.........#.#.#.....#.....#...#.....#...#.............#...#...#.....#...#.......#.......#.#.....#...#...#.#...#.....#.#...#.....#.#.#.#.#.#.#.......#...........#.#5#.....#
+#.###.#.#.###.###.###.#.#####.#.#.###.###.#.###.#############.#######.#.###.#.###.#.#####.#.#.#.#####.#.#.#####.#.#.#.#.#.#######.#.#.###########.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.###.#
+#.....#...#...................#.......#...#...#.#.....#.............#.....#...#.....#.......#.#.#.........#.........#.......#.......#...#.........#.#...#...#.....#.#.....#...#...#.#.#
+#.###.###.###########.###.#####.#####.###.#.#.#.#.#.#.###.#.###.#.#######.#.#.#.#.#.#.###.#.#.#####.#.#.#.#######.#.###.#.#.###.#.#.#.###.#####.#####.#.#.#.#.###.#.###.###########.#.#
+#.#.#.#...#...#.....#.....#.#.......#.....#.....#...........#.#...#.........#.#.#.#.....#.#.#...........#...#...#...#.......#...#.........#.....#.....#.....#.......#...#...#.#...#...#
+#.#.#.#.#.#########.#.#.###.#.#.###.###.#.#.#.###.#####.#.#.#.#.#.#.#######.#.#.#######.#.###.#.###.###.#.###.#.#.#.#######.#######.#.#.#.#####.#.###.#.#####.#.###.#.#.###.#.#######.#
+#.#...#...#.#...................#.#...#.#...#.......#.#...#.#...#.#.#.....#.#...#...#...#.#.............#.....#...........#.........#...#.#.#.....#.......#.......#.....#...#.#...#...#
+###.#.#.#.#.#.#.###.#.###.#####.#.#####.#.#.###.#.#.#.#####.#.###.#####.#.#.#.#.#.#.#.###.#.#.#####.###.#.###.#####.#.#.#.#####.###.#.#.#.#.#.#######.###.#.#.#########.###.#.#######.#
+#.....#...................#...#.#...#...#...........#.#.......#.#.....#.#.....#...........#.....#.........#.#...........#...#.....#...#.....#.............#.#.#.........#.#.#.#.......#
+#.#.#.#.#.###.#.#.#.#.#########.###.#.#.#.#########.#.#.#.#.#.#.###########.#.#.###.###.###.#.#.#.#.#.###.#.###.#.###.#.###.###.#.###.#.#.#####.#.#.#######.#.#.###.###.#.#.#.###.#####
+#...#.#.#....7#.#...#.#.........#.....#...#.#.......#.....#...........#.#...#.......#.#...#.#...#...........#...#.#...#.....#...#.#.#...........#...#.#...#...#4....#...#...#...#.....#
+###.#.#.###.#####.#.#.#.#.#.#.#.#.#.#.###.#.###.#.###.#######.#.#.###.#.#####.#.#####.###.#.###.#.#.#.#.#####.###.#.###.#.#.#.#.###.#.#.###.#.#.###.#.###.#########.#.###.#.#.#.#.#.#.#
+#.....#.#.#.......#.#.#.......#.#.#.............#...#.........#.......#.#.#...........#.....#.....#...#...#.#.....#...#.....#.#.#...#...#...#.....#...#...#.#...#...#.#.#.....#...#.#.#
+#.###.#.#.#########.#.#.#.#######.#.#.#.#.###.###.#####.#.#.#.#.#.###.#.#.#.#.#####.#.#.###.#.#.#.#.###.###.###.#.#.#######.#.#.###.#####.#.#.###.#.#.#####.###.#.#.###.#.#########.###
+#.......#...#...#...#...#.#...#...#.#.#...#.#...........#.........#...#.#.#.#.....#...#.....#.#.....#...#...#...#.#.#.#...#...#.#...#.....#...........#.#.........#.....#.#.#...#.....#
+#####.###.#####.#.#####.#######.#.#.#.###.#.#######.###.#####.###.#.#.#.#.#.#####.#####.###.###.###.#.#.###.#.#.#.###.#.#.###.#.#.#####.#.###.#.#.#.###.#.#.#.#.#.###.###.#.#.###.#.#.#
+#.....#.#.#.......#...#.#.#.....#.........#...#.....#6......#...#.#...........#.......#.............#...#...#...#...#.#...#...#...#.....#.........#.#...#.....#.#.#.......#...#.#.#...#
+#######################################################################################################################################################################################
diff --git a/2016/aoc24/src/main.rs b/2016/aoc24/src/main.rs
new file mode 100644
index 0000000..c4d620e
--- /dev/null
+++ b/2016/aoc24/src/main.rs
@@ -0,0 +1,135 @@
+use std::io::BufReader;
+use std::io::BufRead;
+use std::fs::File;
+use std::collections::HashMap;
+
+struct Map {
+ walls: Vec<Vec<bool>>,
+ destinations: Vec<(usize, usize)>,
+ start: (usize, usize)
+}
+
+impl Map {
+ fn new(input: &[String]) -> Map {
+ let mut walls = Vec::with_capacity(input.len());
+ let mut start = (0, 0);
+ let mut destinations = Vec::new();
+
+ let mut y = 0;
+
+ for line in input {
+ let mut x = 0;
+ let mut wall_row = Vec::with_capacity(line.len());
+ for c in line.chars() {
+ wall_row.push(c == '#');
+ if c == '0' {
+ start = (y, x);
+ }
+ else if c.is_numeric() {
+ destinations.push((y, x));
+ }
+
+ x += 1;
+ }
+
+ walls.push(wall_row);
+ y += 1;
+ }
+
+ Map {
+ walls: walls,
+ destinations: destinations,
+ start: start
+ }
+ }
+
+ fn is_valid_position(&self, y: i32, x: i32) -> bool {
+ y > 0 &&
+ x > 0 &&
+ (y as usize) < self.walls.len() &&
+ (x as usize) < self.walls[y as usize].len() &&
+ !self.walls[y as usize][x as usize]
+ }
+}
+
+#[derive(Clone, Hash, PartialEq, Eq)]
+struct State {
+ robot_location: (usize, usize),
+ destinations_hit: Vec<bool>
+}
+
+impl State {
+ fn new(map: &Map) -> State {
+ State {
+ robot_location: map.start,
+ destinations_hit: map.destinations.iter().map(|_| false).collect()
+ }
+ }
+
+ fn next_state(&self, movement: (i32, i32), map: &Map) -> Option<State> {
+ let (y, x) = self.robot_location;
+ let (dy, dx) = movement;
+ let y2 = y as i32 + dy;
+ let x2 = x as i32 + dx;
+
+ if !map.is_valid_position(y2, x2) {
+ return None;
+ }
+
+ let y2 = y2 as usize;
+ let x2 = x2 as usize;
+
+ Some(State {
+ robot_location: (y2, x2),
+ destinations_hit: self.destinations_hit.iter()
+ .zip(map.destinations.iter())
+ .map(|(&hit, &(dest_y, dest_x))| hit || (dest_y == y2 && dest_x == x2))
+ .collect()
+ })
+ }
+
+ fn next_states(&self, map: &Map) -> Vec<State> {
+ [(-1, 0), (1, 0), (0, -1), (0, 1)].iter()
+ .filter_map(|&movement| self.next_state(movement, &map))
+ .collect()
+ }
+
+ fn is_complete(&self, map: &Map) -> bool {
+ self.destinations_hit.iter().all(|&x| x) && self.robot_location == map.start
+ }
+}
+
+fn main() {
+ let map = Map::new(&read_file());
+ let initial = State::new(&map);
+
+ let mut states = HashMap::new();
+ states.insert(initial, 0);
+
+ let mut moves = 0;
+
+ while !states.iter().any(|(&ref s, _)| s.is_complete(&map)) {
+ let new_states = states.iter()
+ .filter(|&(_, &m)| m == moves)
+ .flat_map(|(&ref s, _)| s.next_states(&map))
+ .collect::<Vec<_>>();
+
+ moves += 1;
+
+ for state in new_states {
+ if !states.contains_key(&state) {
+ states.insert(state, moves);
+ }
+ }
+ }
+
+ println!("Final state found in {} moves", moves);
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
diff --git a/2016/aoc25/Cargo.lock b/2016/aoc25/Cargo.lock
new file mode 100644
index 0000000..c4553c9
--- /dev/null
+++ b/2016/aoc25/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc25"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc25/Cargo.toml b/2016/aoc25/Cargo.toml
new file mode 100644
index 0000000..aa84af4
--- /dev/null
+++ b/2016/aoc25/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc25"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc25/input.txt b/2016/aoc25/input.txt
new file mode 100644
index 0000000..a9734a4
--- /dev/null
+++ b/2016/aoc25/input.txt
@@ -0,0 +1,30 @@
+cpy a d
+cpy 7 c
+cpy 362 b
+inc d
+dec b
+jnz b -2
+dec c
+jnz c -5
+cpy d a
+jnz 0 0
+cpy a b
+cpy 0 a
+cpy 2 c
+jnz b 2
+jnz 1 6
+dec b
+dec c
+jnz c -4
+inc a
+jnz 1 -7
+cpy 2 b
+jnz c 2
+jnz 1 4
+dec b
+dec c
+jnz 1 -4
+jnz 0 0
+out b
+jnz a -19
+jnz 1 -21
diff --git a/2016/aoc25/src/main.rs b/2016/aoc25/src/main.rs
new file mode 100644
index 0000000..7db2ce5
--- /dev/null
+++ b/2016/aoc25/src/main.rs
@@ -0,0 +1,284 @@
+extern crate regex;
+use regex::Regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+enum Instruction {
+ Inc(usize),
+ Dec(usize),
+
+ TglLit(i32),
+ TglReg(usize),
+
+ OutLit(i32),
+ OutReg(usize),
+
+ CpyLitReg(i32, usize),
+ CpyRegReg(usize, usize),
+ CpyLitLit(i32, i32),
+ CpyRegLit(usize, i32),
+
+ JnzLitLit(i32, i32),
+ JnzRegLit(usize, i32),
+ JnzLitReg(i32, usize),
+ JnzRegReg(usize, usize),
+
+ Noop
+}
+
+impl Instruction {
+ fn parse(line: &str) -> Instruction {
+ match Regex::new(r"inc (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::Inc(reg);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"dec (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::Dec(reg);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"tgl (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::TglReg(reg);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"tgl ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let lit = cap.at(1).unwrap().parse().unwrap();
+ return Instruction::TglLit(lit);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"out (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let reg = to_register_index(cap.at(1).unwrap());
+ return Instruction::OutReg(reg);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"out ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let lit = cap.at(1).unwrap().parse().unwrap();
+ return Instruction::OutLit(lit);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::CpyLitReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::CpyRegReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"cpy ([-\d]+) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::CpyLitLit(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"cpy (a|b|c|d) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::CpyRegReg(src, dest);
+ },
+ _ => {}
+ }
+
+
+ match Regex::new(r"jnz ([-\d]+) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::JnzLitReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"jnz (a|b|c|d) (a|b|c|d)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = to_register_index(cap.at(2).unwrap());
+ return Instruction::JnzRegReg(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = cap.at(1).unwrap().parse().unwrap();
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::JnzLitLit(src, dest);
+ },
+ _ => {}
+ }
+
+ match Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap().captures(line) {
+ Some(cap) => {
+ let src = to_register_index(cap.at(1).unwrap());
+ let dest = cap.at(2).unwrap().parse().unwrap();
+ return Instruction::JnzRegLit(src, dest);
+ },
+ _ => {}
+ }
+
+ panic!("Invalid instruction line");
+ }
+
+ fn toggle(&self) -> Self {
+ match *self {
+ Instruction::Inc(a) => Instruction::Dec(a),
+ Instruction::Dec(a) => Instruction::Inc(a),
+
+ Instruction::TglLit(_) => Instruction::Noop,
+ Instruction::TglReg(a) => Instruction::Inc(a),
+
+ Instruction::OutLit(_) => Instruction::Noop,
+ Instruction::OutReg(a) => Instruction::Inc(a),
+
+ Instruction::CpyLitReg(a, b) => Instruction::JnzLitReg(a, b),
+ Instruction::CpyRegReg(a, b) => Instruction::JnzRegReg(a, b),
+ Instruction::CpyLitLit(a, b) => Instruction::JnzLitLit(a, b),
+ Instruction::CpyRegLit(a, b) => Instruction::JnzRegLit(a, b),
+
+ Instruction::JnzLitLit(a, b) => Instruction::CpyLitLit(a, b),
+ Instruction::JnzRegLit(a, b) => Instruction::CpyRegLit(a, b),
+ Instruction::JnzLitReg(a, b) => Instruction::CpyLitReg(a, b),
+ Instruction::JnzRegReg(a, b) => Instruction::CpyRegReg(a, b),
+ Instruction::Noop => Instruction::Noop
+ }
+ }
+}
+
+fn main() {
+ let expected_output = vec!(0, 1, 0, 1, 0, 1, 0, 1, 0, 1);
+ let min_input = (0..).find(|&i| run_program(i) == expected_output).unwrap();
+ println!("{}", min_input);
+}
+
+
+fn run_program(input: i32) -> Vec<i32> {
+ let mut transmission = Vec::new();
+ let mut program = read_file();
+
+ let mut registers: [i32; 4] = [input, 0, 0, 0];
+ let mut pc: usize = 0;
+
+ while pc < program.len() && transmission.len() < 10 {
+ let mut pc_next: usize = pc+1;
+
+ match program[pc] {
+ Instruction::Inc(dest) => {
+ registers[dest] += 1;
+ },
+ Instruction::Dec(dest) => {
+ registers[dest] -= 1;
+ },
+
+ Instruction::TglReg(offset) => {
+ let line_to_toggle = (pc as i32 + registers[offset]) as usize;
+ if line_to_toggle > 0 && line_to_toggle < program.len() {
+ program[line_to_toggle] = program[line_to_toggle].toggle();
+ }
+ },
+ Instruction::TglLit(offset) => {
+ let line_to_toggle = (pc as i32 + offset) as usize;
+ if line_to_toggle > 0 && line_to_toggle < program.len() {
+ program[line_to_toggle] = program[line_to_toggle].toggle();
+ }
+ },
+
+ Instruction::OutReg(output) => {
+ transmission.push(registers[output]);
+ },
+ Instruction::OutLit(output) => {
+ transmission.push(output);
+ },
+
+ Instruction::CpyLitReg(src, dest) => {
+ registers[dest] = src;
+ },
+ Instruction::CpyRegReg(src, dest) => {
+ registers[dest] = registers[src];
+ },
+ Instruction::CpyLitLit(_, _) | Instruction::CpyRegLit(_, _) => {},
+
+ Instruction::JnzRegLit(condition, offset) => {
+ if registers[condition] != 0 {
+ pc_next = (pc as i32 + offset) as usize;
+ }
+ },
+ Instruction::JnzLitLit(condition, offset) => {
+ if condition != 0 {
+ pc_next = (pc as i32 + offset) as usize;
+ }
+ },
+ Instruction::JnzRegReg(condition, offset) => {
+ if registers[condition] != 0 {
+ pc_next = (pc as i32 + registers[offset]) as usize;
+ }
+ },
+ Instruction::JnzLitReg(condition, offset) => {
+ if condition != 0 {
+ pc_next = (pc as i32 + registers[offset]) as usize;
+ }
+ },
+ Instruction::Noop => {}
+ }
+
+ pc = pc_next;
+ }
+
+ transmission
+}
+
+fn to_register_index(name: &str) -> usize {
+ match name {
+ "a" => 0,
+ "b" => 1,
+ "c" => 2,
+ "d" => 3,
+ _ => panic!("Invalid register provided")
+ }
+}
+
+fn read_file() -> Vec<Instruction> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap())
+ .filter(|line| line.len() > 0)
+ .map(|line| Instruction::parse(line.trim()))
+ .collect()
+}
diff --git a/2016/aoc3/Cargo.lock b/2016/aoc3/Cargo.lock
new file mode 100644
index 0000000..f581b3c
--- /dev/null
+++ b/2016/aoc3/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc3"
+version = "0.1.0"
+
diff --git a/2016/aoc3/Cargo.toml b/2016/aoc3/Cargo.toml
new file mode 100644
index 0000000..c8a1b62
--- /dev/null
+++ b/2016/aoc3/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc3"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc3/input.txt b/2016/aoc3/input.txt
new file mode 100644
index 0000000..1458df8
--- /dev/null
+++ b/2016/aoc3/input.txt
@@ -0,0 +1,1734 @@
+ 330 143 338
+ 769 547 83
+ 930 625 317
+ 669 866 147
+ 15 881 210
+ 662 15 70
+ 273 277 707
+ 50 592 770
+ 280 313 407
+ 642 487 372
+ 94 619 295
+ 734 243 141
+ 220 141 515
+ 198 824 745
+ 210 787 964
+ 213 627 601
+ 918 4 447
+ 805 630 802
+ 711 237 987
+ 938 552 388
+ 643 405 779
+ 803 747 525
+ 917 832 631
+ 899 292 843
+ 81 206 445
+ 141 874 465
+ 177 974 54
+ 520 725 814
+ 271 958 554
+ 779 579 264
+ 358 18 257
+ 978 77 270
+ 984 88 131
+ 475 702 940
+ 183 756 160
+ 383 941 820
+ 806 142 646
+ 793 275 804
+ 53 272 368
+ 942 821 785
+ 863 830 902
+ 219 52 199
+ 473 479 351
+ 860 522 361
+ 890 240 216
+ 94 756 407
+ 310 189 468
+ 234 909 178
+ 889 667 756
+ 429 485 730
+ 825 405 30
+ 943 806 253
+ 98 455 365
+ 998 454 290
+ 971 576 223
+ 64 429 273
+ 945 779 63
+ 352 960 59
+ 672 948 577
+ 782 43 567
+ 460 315 719
+ 825 604 183
+ 453 442 788
+ 694 632 334
+ 569 619 317
+ 337 49 17
+ 878 468 660
+ 393 598 717
+ 550 827 159
+ 540 362 346
+ 66 713 380
+ 491 477 44
+ 411 114 320
+ 554 96 250
+ 306 67 196
+ 769 553 333
+ 762 436 382
+ 278 322 153
+ 894 603 334
+ 539 441 844
+ 486 162 927
+ 197 9 218
+ 94 221 804
+ 250 220 913
+ 557 626 486
+ 562 705 630
+ 968 922 285
+ 518 36 468
+ 18 608 83
+ 512 611 530
+ 534 37 65
+ 621 136 90
+ 239 113 139
+ 371 640 956
+ 629 54 959
+ 531 620 338
+ 682 499 810
+ 798 170 968
+ 187 640 645
+ 660 535 332
+ 663 530 314
+ 64 26 65
+ 55 285 488
+ 620 288 52
+ 642 474 450
+ 455 9 962
+ 51 760 489
+ 426 760 833
+ 304 783 772
+ 498 765 695
+ 635 53 126
+ 44 430 774
+ 979 943 838
+ 962 892 64
+ 494 709 614
+ 7 695 120
+ 503 114 606
+ 362 340 689
+ 509 367 389
+ 673 410 664
+ 773 262 558
+ 897 958 245
+ 140 773 483
+ 965 468 584
+ 546 209 668
+ 856 381 184
+ 274 237 762
+ 888 677 906
+ 871 516 405
+ 102 529 912
+ 285 724 885
+ 352 501 53
+ 774 139 245
+ 380 309 594
+ 813 185 765
+ 530 645 965
+ 958 618 120
+ 851 202 957
+ 737 476 131
+ 595 546 108
+ 716 113 66
+ 327 215 318
+ 397 343 390
+ 351 143 103
+ 138 91 31
+ 108 224 919
+ 230 276 896
+ 426 975 177
+ 327 975 918
+ 238 365 764
+ 328 799 775
+ 590 906 967
+ 578 460 338
+ 507 619 647
+ 711 617 867
+ 933 478 734
+ 820 760 721
+ 199 711 824
+ 983 214 228
+ 382 150 648
+ 415 782 242
+ 615 754 445
+ 693 689 590
+ 382 784 482
+ 997 181 322
+ 682 241 172
+ 587 302 252
+ 184 135 254
+ 574 104 549
+ 88 738 796
+ 486 715 861
+ 62 491 815
+ 463 434 569
+ 519 622 310
+ 199 443 782
+ 572 657 85
+ 763 517 844
+ 750 175 835
+ 228 269 710
+ 611 316 551
+ 883 546 296
+ 169 693 18
+ 992 743 316
+ 263 529 529
+ 705 570 4
+ 918 706 527
+ 609 285 971
+ 260 533 112
+ 711 486 904
+ 820 40 472
+ 997 301 129
+ 257 288 343
+ 635 439 375
+ 560 381 417
+ 773 105 145
+ 58 963 267
+ 976 742 424
+ 994 441 384
+ 389 770 514
+ 782 463 335
+ 919 727 276
+ 780 794 372
+ 326 180 590
+ 918 946 257
+ 889 842 181
+ 507 61 464
+ 762 835 443
+ 827 607 982
+ 174 875 544
+ 934 885 589
+ 32 343 757
+ 987 826 257
+ 981 782 844
+ 446 291 397
+ 443 800 421
+ 165 668 539
+ 410 373 487
+ 422 803 881
+ 546 998 953
+ 291 607 160
+ 919 894 62
+ 842 718 117
+ 110 816 582
+ 470 836 596
+ 575 687 35
+ 37 835 374
+ 90 954 354
+ 101 141 407
+ 174 398 499
+ 173 737 964
+ 4 365 950
+ 946 616 634
+ 906 904 619
+ 40 789 16
+ 788 769 76
+ 737 867 88
+ 565 812 31
+ 508 380 201
+ 34 935 339
+ 500 862 326
+ 431 181 475
+ 403 346 585
+ 88 530 708
+ 731 137 781
+ 715 563 272
+ 817 659 932
+ 396 368 360
+ 162 683 376
+ 278 620 39
+ 525 910 371
+ 688 524 149
+ 488 998 279
+ 286 392 523
+ 325 144 406
+ 79 532 419
+ 540 460 465
+ 222 832 416
+ 517 507 46
+ 87 744 183
+ 382 819 701
+ 306 763 647
+ 744 74 913
+ 62 813 849
+ 691 874 775
+ 291 422 314
+ 432 630 809
+ 611 510 566
+ 583 745 289
+ 397 19 727
+ 188 766 442
+ 96 108 329
+ 963 719 598
+ 963 764 469
+ 444 636 731
+ 792 636 422
+ 993 1 416
+ 518 300 532
+ 298 312 736
+ 316 111 463
+ 825 569 35
+ 858 591 584
+ 809 84 607
+ 681 610 740
+ 383 279 210
+ 851 733 615
+ 287 959 160
+ 856 851 171
+ 606 115 211
+ 310 541 845
+ 506 119 319
+ 665 471 562
+ 382 885 798
+ 440 29 595
+ 113 903 475
+ 257 773 846
+ 306 741 776
+ 97 804 76
+ 489 332 423
+ 466 632 613
+ 86 739 481
+ 199 846 712
+ 62 282 809
+ 155 681 142
+ 705 525 270
+ 159 800 117
+ 612 664 316
+ 505 616 837
+ 578 839 770
+ 942 535 122
+ 542 781 512
+ 552 22 475
+ 760 791 97
+ 432 626 837
+ 26 616 336
+ 412 316 702
+ 108 232 242
+ 158 311 449
+ 60 141 325
+ 58 1 714
+ 532 977 123
+ 531 978 598
+ 679 899 57
+ 645 523 54
+ 167 892 14
+ 164 574 492
+ 105 37 491
+ 132 555 485
+ 600 879 508
+ 608 843 222
+ 270 255 398
+ 232 960 281
+ 241 995 436
+ 113 674 411
+ 381 567 5
+ 697 450 966
+ 726 857 969
+ 722 686 965
+ 543 20 453
+ 955 689 554
+ 858 161 923
+ 140 979 953
+ 786 836 237
+ 200 322 875
+ 311 623 398
+ 510 814 945
+ 67 387 825
+ 621 620 740
+ 630 842 163
+ 545 75 373
+ 506 531 501
+ 301 571 357
+ 746 491 253
+ 37 29 748
+ 769 507 754
+ 69 886 861
+ 423 629 856
+ 380 723 83
+ 875 647 657
+ 144 696 580
+ 896 49 629
+ 275 598 374
+ 118 636 279
+ 277 80 529
+ 623 130 493
+ 368 712 621
+ 833 730 512
+ 59 767 829
+ 105 933 731
+ 54 240 108
+ 803 235 992
+ 837 726 881
+ 426 855 450
+ 636 730 731
+ 840 561 977
+ 996 229 670
+ 508 234 186
+ 529 108 917
+ 373 337 795
+ 681 35 565
+ 790 251 152
+ 301 235 599
+ 875 416 653
+ 277 338 990
+ 800 207 595
+ 954 650 896
+ 931 667 706
+ 84 851 822
+ 254 778 816
+ 316 141 732
+ 233 759 239
+ 546 473 315
+ 69 15 96
+ 513 470 320
+ 460 188 729
+ 429 950 288
+ 709 807 790
+ 456 161 570
+ 269 718 339
+ 213 628 602
+ 155 367 686
+ 176 418 568
+ 66 251 723
+ 959 696 536
+ 794 279 885
+ 315 527 993
+ 603 853 868
+ 727 747 994
+ 411 287 193
+ 528 763 559
+ 803 149 739
+ 542 883 696
+ 275 676 183
+ 411 317 161
+ 349 875 35
+ 39 729 221
+ 256 831 216
+ 247 238 176
+ 399 59 306
+ 409 445 550
+ 9 387 253
+ 613 204 474
+ 81 868 944
+ 589 912 735
+ 319 264 83
+ 984 704 614
+ 778 614 532
+ 699 762 556
+ 680 250 507
+ 504 581 647
+ 160 351 295
+ 513 739 413
+ 651 915 651
+ 878 218 499
+ 872 990 503
+ 38 886 12
+ 218 201 415
+ 240 250 504
+ 265 448 382
+ 402 876 126
+ 488 950 649
+ 189 210 597
+ 24 850 758
+ 30 451 347
+ 5 437 723
+ 634 310 546
+ 801 179 411
+ 679 338 852
+ 385 32 933
+ 406 531 554
+ 88 516 871
+ 860 486 834
+ 467 535 849
+ 419 820 785
+ 206 649 526
+ 244 499 714
+ 80 774 678
+ 336 149 612
+ 310 175 656
+ 150 221 791
+ 159 806 701
+ 336 465 530
+ 376 819 272
+ 533 472 421
+ 82 124 909
+ 523 561 539
+ 844 811 576
+ 439 612 587
+ 782 457 686
+ 152 51 837
+ 413 573 855
+ 403 608 26
+ 893 819 910
+ 361 499 657
+ 677 937 617
+ 428 6 343
+ 310 38 431
+ 474 35 420
+ 574 256 221
+ 700 907 515
+ 149 685 478
+ 206 325 720
+ 114 51 67
+ 320 338 686
+ 293 59 527
+ 147 756 986
+ 250 697 573
+ 968 194 545
+ 542 480 72
+ 454 574 619
+ 473 55 592
+ 475 339 889
+ 884 313 993
+ 125 127 742
+ 591 514 585
+ 543 583 282
+ 264 580 390
+ 839 487 781
+ 902 664 868
+ 334 459 819
+ 107 20 211
+ 368 479 775
+ 683 691 273
+ 681 336 630
+ 22 978 536
+ 926 828 708
+ 210 319 723
+ 787 689 866
+ 854 633 856
+ 960 494 866
+ 122 687 596
+ 918 705 539
+ 84 564 791
+ 876 138 949
+ 836 1 500
+ 718 308 466
+ 228 311 271
+ 421 998 433
+ 622 772 174
+ 875 720 432
+ 680 687 509
+ 215 95 623
+ 674 732 166
+ 198 174 645
+ 721 839 390
+ 617 896 448
+ 73 331 155
+ 789 134 431
+ 853 376 400
+ 82 862 411
+ 779 362 70
+ 750 777 349
+ 674 604 224
+ 812 731 446
+ 280 546 336
+ 922 781 619
+ 196 892 876
+ 941 361 479
+ 344 988 873
+ 499 92 795
+ 287 913 546
+ 625 167 604
+ 617 1 399
+ 154 166 720
+ 328 323 111
+ 713 619 530
+ 606 756 580
+ 194 247 935
+ 149 65 64
+ 55 287 902
+ 870 866 127
+ 478 679 587
+ 900 459 565
+ 563 787 743
+ 962 798 769
+ 669 39 525
+ 745 691 317
+ 484 123 93
+ 500 598 348
+ 159 535 681
+ 618 176 877
+ 723 373 464
+ 304 184 131
+ 542 209 654
+ 716 47 647
+ 976 537 771
+ 914 606 568
+ 241 250 481
+ 616 640 660
+ 744 187 843
+ 303 617 927
+ 369 525 773
+ 754 697 360
+ 595 560 605
+ 562 589 610
+ 799 497 655
+ 823 553 532
+ 937 502 449
+ 976 941 158
+ 194 720 347
+ 474 694 822
+ 528 184 272
+ 922 698 568
+ 415 889 638
+ 169 822 65
+ 547 281 663
+ 582 167 110
+ 365 56 914
+ 431 162 923
+ 473 812 578
+ 572 890 386
+ 164 119 308
+ 604 946 496
+ 327 142 72
+ 641 916 472
+ 743 663 228
+ 107 446 345
+ 823 486 152
+ 997 47 968
+ 565 155 631
+ 438 205 416
+ 271 163 875
+ 123 393 111
+ 169 412 854
+ 615 683 659
+ 592 362 9
+ 99 895 668
+ 834 205 172
+ 359 355 550
+ 499 149 389
+ 755 298 916
+ 475 706 807
+ 829 425 118
+ 43 527 479
+ 159 473 874
+ 151 326 992
+ 970 660 509
+ 837 930 35
+ 164 345 506
+ 209 879 487
+ 97 157 503
+ 289 755 793
+ 624 897 293
+ 382 134 451
+ 257 917 339
+ 110 168 85
+ 470 583 139
+ 486 613 120
+ 584 747 795
+ 959 699 339
+ 866 384 672
+ 157 639 464
+ 939 485 409
+ 947 441 131
+ 179 953 581
+ 735 587 605
+ 834 582 36
+ 304 422 707
+ 195 348 347
+ 163 521 486
+ 948 471 675
+ 915 453 406
+ 40 345 635
+ 81 124 115
+ 127 105 127
+ 50 32 10
+ 221 399 397
+ 487 676 412
+ 574 607 450
+ 268 625 323
+ 843 858 145
+ 706 286 218
+ 822 168 254
+ 950 708 944
+ 572 640 775
+ 958 563 909
+ 996 154 918
+ 378 626 564
+ 335 823 339
+ 499 810 270
+ 294 22 98
+ 987 959 591
+ 101 899 442
+ 931 409 576
+ 542 102 655
+ 404 980 398
+ 759 990 381
+ 692 990 750
+ 752 93 149
+ 278 973 883
+ 621 459 232
+ 398 261 626
+ 221 212 744
+ 790 241 352
+ 802 218 317
+ 443 294 244
+ 393 131 941
+ 466 378 885
+ 516 419 240
+ 799 748 407
+ 468 502 386
+ 829 329 766
+ 432 376 408
+ 681 88 198
+ 553 351 489
+ 234 717 59
+ 332 525 675
+ 437 691 723
+ 441 834 433
+ 616 144 274
+ 966 911 650
+ 254 274 782
+ 346 714 856
+ 330 696 171
+ 394 407 298
+ 897 553 867
+ 755 503 956
+ 253 840 382
+ 923 195 262
+ 918 735 483
+ 55 703 227
+ 768 759 225
+ 825 238 14
+ 7 479 978
+ 211 603 957
+ 216 866 94
+ 112 698 60
+ 847 631 307
+ 940 164 253
+ 406 133 14
+ 380 816 425
+ 147 873 429
+ 698 987 98
+ 534 823 691
+ 197 690 754
+ 979 39 468
+ 928 73 531
+ 119 66 920
+ 982 810 569
+ 476 534 397
+ 931 366 182
+ 783 104 732
+ 131 32 619
+ 784 136 530
+ 16 933 484
+ 995 987 739
+ 985 88 977
+ 43 919 914
+ 540 399 915
+ 566 859 257
+ 639 419 73
+ 727 118 865
+ 477 370 834
+ 293 434 155
+ 422 557 603
+ 203 243 754
+ 373 15 748
+ 466 574 807
+ 282 576 70
+ 275 365 608
+ 987 644 648
+ 711 629 717
+ 420 410 696
+ 252 417 874
+ 642 26 202
+ 223 23 531
+ 545 580 675
+ 565 600 521
+ 130 745 142
+ 264 377 397
+ 300 618 253
+ 683 331 279
+ 440 826 275
+ 835 785 266
+ 592 264 590
+ 257 255 173
+ 532 23 620
+ 571 749 434
+ 988 552 492
+ 566 766 234
+ 617 818 776
+ 45 113 882
+ 579 793 114
+ 971 243 608
+ 979 241 241
+ 130 83 634
+ 91 361 5
+ 311 107 501
+ 377 388 496
+ 727 849 317
+ 323 702 256
+ 804 254 189
+ 70 11 246
+ 752 425 785
+ 799 413 882
+ 917 133 695
+ 959 49 902
+ 420 121 412
+ 177 170 158
+ 828 734 135
+ 880 875 75
+ 824 556 960
+ 857 689 960
+ 74 951 2
+ 246 687 756
+ 311 93 487
+ 209 626 886
+ 17 545 566
+ 963 252 283
+ 947 493 805
+ 185 493 462
+ 728 365 885
+ 808 214 528
+ 582 780 100
+ 30 254 654
+ 596 706 553
+ 713 968 803
+ 123 270 839
+ 792 778 475
+ 442 95 682
+ 931 212 678
+ 781 140 439
+ 651 645 978
+ 137 829 286
+ 593 503 895
+ 642 215 144
+ 687 122 934
+ 84 240 919
+ 656 515 774
+ 51 799 273
+ 636 324 924
+ 213 161 309
+ 509 157 458
+ 582 1 727
+ 716 269 819
+ 978 343 303
+ 828 264 708
+ 108 620 190
+ 12 12 634
+ 103 615 579
+ 364 286 660
+ 809 714 656
+ 729 504 10
+ 994 366 341
+ 433 796 77
+ 663 462 353
+ 776 687 758
+ 751 495 651
+ 33 751 753
+ 349 919 228
+ 204 799 584
+ 335 156 563
+ 725 191 535
+ 731 676 524
+ 455 571 10
+ 899 379 689
+ 773 641 812
+ 324 761 421
+ 354 557 897
+ 571 740 161
+ 407 271 856
+ 886 393 428
+ 286 870 218
+ 950 819 347
+ 331 847 858
+ 498 471 689
+ 357 378 775
+ 890 503 514
+ 201 863 428
+ 721 737 796
+ 636 178 974
+ 14 387 936
+ 622 424 144
+ 82 201 727
+ 127 164 779
+ 173 319 326
+ 195 748 641
+ 469 512 510
+ 626 949 405
+ 552 542 251
+ 192 204 382
+ 655 558 631
+ 970 519 3
+ 918 701 399
+ 56 543 403
+ 524 848 641
+ 620 431 539
+ 604 473 824
+ 369 105 464
+ 575 957 429
+ 859 978 199
+ 712 381 199
+ 941 305 738
+ 892 663 937
+ 653 963 365
+ 70 331 508
+ 620 923 682
+ 739 122 350
+ 288 418 768
+ 733 326 520
+ 694 472 793
+ 725 415 739
+ 895 398 201
+ 500 157 168
+ 727 814 354
+ 807 726 340
+ 431 329 212
+ 635 374 403
+ 677 78 347
+ 386 559 505
+ 385 361 161
+ 262 494 621
+ 481 237 767
+ 318 966 640
+ 723 732 546
+ 911 652 823
+ 958 502 677
+ 718 258 834
+ 98 666 506
+ 929 41 933
+ 869 637 605
+ 585 156 335
+ 490 316 149
+ 436 339 323
+ 596 948 224
+ 275 433 241
+ 545 890 155
+ 601 413 676
+ 893 401 673
+ 694 171 403
+ 211 110 482
+ 267 61 541
+ 206 124 256
+ 189 353 308
+ 351 880 70
+ 237 677 380
+ 759 754 388
+ 465 99 862
+ 852 787 925
+ 758 890 804
+ 252 817 784
+ 773 129 860
+ 954 102 872
+ 743 396 730
+ 500 304 173
+ 492 399 527
+ 413 465 813
+ 670 837 933
+ 897 424 430
+ 782 404 14
+ 151 24 418
+ 897 260 306
+ 811 287 386
+ 440 93 449
+ 229 185 582
+ 136 63 678
+ 211 250 940
+ 184 400 209
+ 122 383 238
+ 143 386 111
+ 320 194 415
+ 925 790 501
+ 924 596 614
+ 606 733 277
+ 886 116 194
+ 278 627 189
+ 225 536 981
+ 487 538 584
+ 539 2 793
+ 219 456 57
+ 341 424 941
+ 199 482 921
+ 231 241 588
+ 711 740 334
+ 596 554 323
+ 917 164 629
+ 19 138 756
+ 939 70 225
+ 536 432 401
+ 137 614 14
+ 593 818 402
+ 871 280 515
+ 268 259 326
+ 900 97 376
+ 68 699 461
+ 546 810 400
+ 540 697 676
+ 591 125 751
+ 159 719 919
+ 605 763 898
+ 171 845 459
+ 115 289 376
+ 265 636 317
+ 646 225 84
+ 663 755 89
+ 192 828 12
+ 316 523 822
+ 310 933 784
+ 44 721 873
+ 893 873 461
+ 898 15 548
+ 96 861 726
+ 9 837 398
+ 238 404 29
+ 227 845 428
+ 770 764 472
+ 960 747 784
+ 990 281 811
+ 59 597 111
+ 930 799 729
+ 930 882 758
+ 459 961 116
+ 484 83 914
+ 83 969 994
+ 828 423 132
+ 346 541 246
+ 783 484 303
+ 983 7 921
+ 216 208 905
+ 802 216 54
+ 6 121 306
+ 609 36 749
+ 608 84 626
+ 97 705 89
+ 200 688 878
+ 242 314 802
+ 294 66 338
+ 768 417 272
+ 785 351 266
+ 58 505 668
+ 791 291 679
+ 783 694 43
+ 794 468 355
+ 777 796 171
+ 378 784 426
+ 224 510 840
+ 557 606 708
+ 513 127 189
+ 231 976 517
+ 772 37 433
+ 684 973 324
+ 70 661 83
+ 914 136 702
+ 917 630 710
+ 826 894 84
+ 373 416 248
+ 551 924 226
+ 357 646 374
+ 890 491 246
+ 938 293 519
+ 66 42 704
+ 537 60 374
+ 508 56 405
+ 437 751 653
+ 681 718 160
+ 683 293 800
+ 569 288 878
+ 692 206 611
+ 173 157 399
+ 201 492 645
+ 98 132 329
+ 234 612 711
+ 296 54 975
+ 651 219 923
+ 527 177 138
+ 585 598 302
+ 552 653 474
+ 54 288 358
+ 828 631 279
+ 854 642 746
+ 80 52 645
+ 386 346 181
+ 488 7 569
+ 168 351 533
+ 906 186 681
+ 833 404 191
+ 863 297 526
+ 451 555 808
+ 336 544 155
+ 253 211 838
+ 759 819 238
+ 921 343 761
+ 264 632 690
+ 165 424 159
+ 121 481 361
+ 181 409 439
+ 94 972 995
+ 696 904 722
+ 613 238 422
+ 190 281 334
+ 385 127 129
+ 300 364 234
+ 479 768 937
+ 883 654 35
+ 979 679 959
+ 244 51 788
+ 275 613 804
+ 143 575 210
+ 160 168 608
+ 330 471 651
+ 407 594 410
+ 723 576 943
+ 268 912 361
+ 692 442 760
+ 443 288 20
+ 382 610 556
+ 62 694 568
+ 322 257 214
+ 253 458 861
+ 260 213 829
+ 37 137 420
+ 668 220 104
+ 673 150 435
+ 551 466 897
+ 390 729 999
+ 423 963 763
+ 837 36 295
+ 854 726 495
+ 16 728 389
+ 735 246 510
+ 218 136 617
+ 604 197 140
+ 113 355 499
+ 631 902 488
+ 689 898 212
+ 780 826 901
+ 556 205 657
+ 855 661 288
+ 141 34 480
+ 27 23 194
+ 115 53 393
+ 333 287 700
+ 68 300 671
+ 394 589 28
+ 572 248 771
+ 454 118 797
+ 526 141 300
+ 785 377 504
+ 886 723 105
+ 541 712 470
+ 156 128 932
+ 479 85 989
+ 381 207 162
+ 813 839 544
+ 143 783 541
+ 916 361 24
+ 878 133 886
+ 986 750 335
+ 122 643 864
+ 395 460 591
+ 387 896 627
+ 117 455 109
+ 2 14 569
+ 873 364 215
+ 875 350 554
+ 70 878 940
+ 234 846 82
+ 256 279 901
+ 693 990 473
+ 951 866 824
+ 923 408 891
+ 36 5 531
+ 954 654 266
+ 921 652 434
+ 561 701 427
+ 232 764 365
+ 330 331 73
+ 46 813 6
+ 380 698 297
+ 396 221 289
+ 135 867 633
+ 814 649 286
+ 797 918 827
+ 705 58 338
+ 6 305 310
+ 701 352 28
+ 903 97 825
+ 693 126 794
+ 438 144 592
+ 367 932 400
+ 320 820 264
+ 687 210 652
+ 682 84 566
+ 671 604 816
+ 529 646 267
+ 795 654 114
+ 955 426 118
+ 249 759 102
+ 343 581 267
+ 341 619 107
+ 479 57 341
+ 683 32 870
+ 630 609 210
+ 361 643 803
+ 506 856 406
+ 580 562 359
+ 312 433 154
+ 750 379 920
+ 448 520 312
+ 733 259 899
+ 33 786 319
+ 579 669 90
+ 595 769 242
+ 160 985 236
+ 654 903 946
+ 635 99 802
+ 75 158 437
+ 467 382 289
+ 406 542 548
+ 684 417 794
+ 729 105 122
+ 44 485 689
+ 737 15 713
+ 970 391 17
+ 373 384 729
+ 336 1 118
+ 814 807 759
+ 965 808 828
+ 179 181 834
+ 242 94 838
+ 188 183 82
+ 691 402 618
+ 984 43 561
+ 330 447 872
+ 553 581 30
+ 884 393 836
+ 431 298 837
+ 278 389 690
+ 976 587 803
+ 722 220 538
+ 548 208 107
+ 629 414 729
+ 543 584 672
+ 512 431 954
+ 475 367 959
+ 226 306 9
+ 824 774 668
+ 188 22 870
+ 722 764 300
+ 647 803 256
+ 410 972 21
+ 436 536 278
+ 995 577 453
+ 670 439 224
+ 434 488 572
+ 82 317 498
+ 559 823 662
+ 499 614 196
+ 944 14 432
+ 618 866 652
+ 467 872 289
+ 471 722 189
+ 923 756 17
+ 790 409 195
+ 511 500 545
+ 667 283 758
+ 271 373 283
+ 573 686 490
+ 659 706 560
+ 770 247 633
+ 424 169 895
+ 47 349 411
+ 380 235 805
+ 384 546 148
+ 747 870 831
+ 754 421 910
+ 937 15 433
+ 188 760 806
+ 872 748 418
+ 718 556 510
+ 165 590 486
+ 798 40 177
+ 349 923 530
+ 795 690 746
+ 550 671 360
+ 824 442 775
+ 331 686 152
+ 570 270 926
+ 860 64 383
+ 408 464 170
+ 758 440 349
+ 773 434 699
+ 780 563 352
+ 18 644 621
+ 432 663 188
+ 420 887 956
+ 237 586 788
+ 319 526 586
+ 544 647 115
+ 628 235 511
+ 666 408 33
+ 670 459 697
+ 48 189 692
+ 837 708 428
+ 462 652 632
+ 426 106 457
+ 730 744 195
+ 700 816 769
+ 383 480 923
+ 601 612 910
+ 559 953 779
+ 533 937 240
+ 464 123 344
+ 579 82 76
+ 179 188 373
+ 1 641 56
+ 688 698 50
+ 688 160 4
+ 790 364 767
+ 202 70 137
+ 914 420 674
+ 961 657 851
+ 578 708 875
+ 503 94 776
+ 221 143 356
+ 34 126 403
+ 234 31 78
+ 721 949 330
+ 675 191 460
+ 80 957 651
+ 690 580 824
+ 461 73 802
+ 725 606 51
+ 183 857 521
+ 708 800 482
+ 644 111 37
+ 769 778 869
+ 883 693 909
+ 549 714 43
+ 273 246 599
+ 637 309 675
+ 451 195 552
+ 681 408 126
+ 422 465 52
+ 743 235 144
+ 248 586 312
+ 42 398 313
+ 222 335 21
+ 528 312 738
+ 856 312 132
+ 915 79 610
+ 550 605 186
+ 566 815 698
+ 127 250 717
+ 532 129 775
+ 604 132 549
+ 134 44 247
+ 521 815 470
+ 370 853 515
+ 795 187 851
+ 963 295 50
+ 757 228 169
+ 706 303 120
+ 416 133 309
+ 956 63 11
+ 751 162 301
+ 387 632 29
+ 257 383 994
+ 215 247 994
+ 529 606 963
+ 770 305 756
+ 721 791 971
+ 558 531 675
+ 253 477 918
+ 470 52 615
+ 256 335 24
+ 301 523 651
+ 316 702 637
+ 321 721 32
+ 591 730 179
+ 341 364 146
+ 673 120 501
+ 31 183 207
+ 641 116 463
+ 221 54 775
+ 262 458 669
+ 139 486 904
+ 736 260 139
+ 406 359 663
+ 434 563 753
+ 981 6 215
+ 423 320 358
+ 719 319 415
+ 315 375 320
+ 7 637 423
+ 314 365 175
+ 199 687 754
+ 174 546 1
+ 29 526 754
+ 153 402 251
+ 787 565 919
+ 820 239 876
+ 994 614 47
+ 958 816 288
+ 244 750 275
+ 248 890 694
+ 628 194 414
+ 774 958 466
+ 181 34 442
+ 569 371 939
+ 500 347 740
+ 745 123 467
+ 614 662 119
+ 201 690 352
+ 596 974 215
+ 508 921 240
+ 405 947 317
+ 402 372 733
+ 298 41 357
+ 135 339 759
+ 544 683 690
+ 584 1 893
+ 215 680 501
+ 191 453 649
+ 952 84 727
+ 815 494 293
+ 163 168 46
+ 136 119 441
+ 185 112 474
+ 877 830 354
+ 497 242 226
+ 484 714 178
+ 854 570 402
+ 873 120 432
+ 30 613 50
+ 365 529 624
+ 969 332 586
+ 636 617 153
+ 588 669 314
+ 12 52 628
+ 584 704 642
+ 95 199 69
+ 979 486 705
+ 953 391 698
+ 698 471 333
+ 302 466 64
+ 678 19 376
+ 353 860 905
+ 236 113 797
+ 400 879 962
+ 341 805 493
+ 661 506 196
+ 736 357 644
+ 943 352 365
+ 484 756 282
+ 491 943 262
+ 765 494 729
+ 321 208 986
+ 621 346 290
+ 258 706 386
+ 179 452 276
+ 433 583 153
+ 708 2 212
+ 193 151 320
+ 647 149 299
+ 335 951 831
+ 661 787 792
+ 818 742 477
+ 799 964 157
+ 726 780 172
+ 740 225 24
+ 428 39 263
+ 388 901 506
+ 97 940 413
+ 41 454 826
+ 324 453 443
+ 346 76 938
+ 463 595 751
+ 854 948 454
+ 451 902 507
+ 722 961 130
+ 695 529 425
+ 59 591 467
+ 559 623 222
+ 991 194 196
+ 749 793 245
+ 474 327 247
+ 346 2 277
+ 643 328 135
+ 785 264 751
+ 35 537 887
+ 811 584 685
+ 475 903 748
+ 471 115 698
+ 7 945 449
+ 464 880 227
+ 287 868 878
+ 564 11 850
+ 221 623 475
+ 314 325 553
+ 209 865 621
+ 39 655 236
+ 95 296 235
+ 124 920 21
+ 439 473 902
+ 334 375 792
+ 315 116 768
+ 267 736 95
+ 703 606 595
+ 505 886 514
+ 114 168 52
+ 301 584 495
+ 200 709 527
+ 164 422 554
+ 246 546 460
+ 377 141 223
+ 286 323 354
+ 810 240 90
+ 920 450 425
+ 277 8 570
+ 28 649 50
+ 295 650 534
+ 690 187 665
+ 674 184 483
+ 68 139 376
+ 570 430 500
+ 590 422 543
+ 304 68 43
+ 422 666 163
+ 501 375 696
+ 81 621 813
+ 19 981 945
+ 410 83 941
+ 427 945 25
+ 283 408 825
+ 281 648 635
+ 294 678 615
+ 113 936 500
+ 554 772 314
+ 502 642 624
+ 262 318 699
+ 88 526 817
+ 242 468 161
+ 820 179 253
+ 580 62 531
+ 343 183 422
+ 430 161 485
+ 26 127 435
+ 442 32 517
+ 491 243 544
+ 552 680 310
+ 131 489 457
+ 697 162 526
+ 897 838 305
+ 695 748 335
+ 753 936 24
+ 46 681 637
+ 745 808 617
+ 318 251 171
+ 49 39 855
+ 359 284 725
+ 221 837 145
+ 581 821 444
+ 573 267 318
+ 706 969 583
+ 722 912 586
+ 680 86 869
+ 833 546 97
+ 865 507 481
+ 938 104 386
+ 941 217 265
+ 360 53 607
+ 634 197 476
+ 787 659 444
+ 368 163 783
+ 493 738 345
+ 182 539 52
+ 764 827 612
+ 699 493 663
+ 914 384 17
+ 495 546 260
+ 739 461 275
+ 386 91 394
+ 804 506 198
+ 780 421 269
+ 109 669 193
+ 457 298 349
+ 560 800 331
+ 282 153 637
+ 160 254 807
+ 434 204 476
+ 717 759 737
+ 629 785 65
+ 347 614 790
+ 270 663 647
+ 188 271 528
+ 277 929 591
+ 853 744 589
+ 704 881 761
+ 573 714 627
+ 541 689 287
+ 540 301 187
+ 670 397 368
+ 867 8 698
+ 869 146 802
+ 10 137 104
+ 164 575 450
+ 507 233 466
+ 548 425 46
+ 435 824 78
+ 334 951 34
+ 646 551 99
+ 60 829 569
+ 501 866 382
+ 440 327 222
+ 744 132 333
+ 800 983 126
+ 887 866 451
+ 28 599 39
+ 833 129 307
+ 804 519 319
+ 510 746 821
+ 639 209 561
+ 197 649 333
+ 638 644 361
+ 754 474 366
+ 193 219 106
+ 843 536 331
+ 483 634 611
+ 367 195 592
+ 753 71 115
+ 934 42 83
+ 337 75 85
+ 475 304 169
+ 672 143 211
+ 360 406 74
+ 370 119 111
+ 351 955 696
+ 543 849 785
+ 375 576 836
+ 288 316 239
+ 512 273 786
+ 721 407 82
+ 998 634 292
+ 449 399 284
+ 540 316 693
+ 430 68 984
+ 146 376 482
+ 785 134 643
+ 157 509 441
+ 808 615 552
+ 920 564 452
+ 407 341 441
+ 990 778 211
+ 822 325 925
+ 368 206 876
+ 491 153 126
+ 11 373 546
+ 854 752 143
+ 843 773 660
+ 777 472 964
+ 359 708 889
+ 575 941 882
+ 945 22 152
+ 968 237 115
+ 30 238 110
+ 101 504 412
+ 119 646 719
+ 28 190 336
+ 890 301 712
+ 11 657 782
+ 885 465 361
+ 424 669 645
+ 528 654 194
+ 894 252 667
+ 516 299 998
+ 370 837 976
+ 305 651 194
+ 701 447 175
+ 470 234 929
+ 752 606 965
+ 568 370 322
+ 226 592 281
+ 553 801 330
+ 576 228 623
+ 639 477 637
+ 252 664 998
+ 781 215 994
+ 446 698 25
+ 562 500 980
+ 702 444 299
+ 971 550 387
+ 754 562 439
+ 347 896 716
+ 242 861 596
+ 588 829 323
+ 464 211 949
+ 481 192 47
+ 598 98 963
+ 932 960 32
+ 933 482 893
+ 15 989 888
+ 866 735 629
+ 636 513 470
+ 280 528 944
+ 531 66 867
+ 284 735 865
+ 778 743 3
+ 458 131 262
+ 772 273 255
+ 942 278 50
+ 269 151 917
+ 502 4 883
+ 538 155 68
+ 929 850 21
+ 126 759 729
+ 869 689 711
+ 180 359 855
+ 299 68 975
+ 210 371 205
+ 477 183 827
+ 922 50 841
+ 665 154 312
+ 379 848 486
+ 450 835 743
+ 69 161 515
+ 680 535 83
+ 692 779 352
+ 818 554 389
+ 781 89 538
+ 746 218 209
+ 292 201 652
+ 417 375 393
+ 916 962 644
+ 518 923 561
+ 915 469 386
+ 142 460 454
+ 947 392 89
+ 144 840 866
+ 205 465 967
+ 209 657 650
+ 891 322 207
+ 800 522 907
+ 516 498 994
+ 185 806 804
+ 179 393 137
+ 316 765 892
+ 850 756 123
+ 494 783 627
+ 832 53 659
+ 93 949 602
+ 666 954 516
+ 592 11 210
+ 223 4 389
+ 221 280 388
+ 100 279 50
+ 380 589 345
+ 385 238 382
+ 205 506 359
+ 98 280 652
+ 396 371 290
+ 314 477 454
+ 368 692 564
+ 48 263 586
+ 356 902 922
diff --git a/2016/aoc3/src/main.rs b/2016/aoc3/src/main.rs
new file mode 100644
index 0000000..678933f
--- /dev/null
+++ b/2016/aoc3/src/main.rs
@@ -0,0 +1,64 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+
+struct Triangle {
+ l1: i32,
+ l2: i32,
+ l3: i32
+}
+
+impl Triangle {
+ fn is_valid(&self) -> bool {
+ (self.l1 + self.l2) > self.l3 &&
+ (self.l2 + self.l3) > self.l1 &&
+ (self.l3 + self.l1) > self.l2
+
+ }
+}
+
+fn main() {
+ let len = read_file().iter().filter(|tri| tri.is_valid()).count();
+ println!("{} valid triangles", len);
+}
+
+fn read_file() -> Vec<Triangle> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ let mut lines = file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .peekable();
+
+ let mut results = Vec::new();
+ while lines.peek().is_some() {
+ let (t11, t21, t31) = parse_line(lines.next().unwrap());
+ let (t12, t22, t32) = parse_line(lines.next().unwrap());
+ let (t13, t23, t33) = parse_line(lines.next().unwrap());
+
+ results.push(Triangle {
+ l1: t11,
+ l2: t12,
+ l3: t13
+ });
+ results.push(Triangle {
+ l1: t21,
+ l2: t22,
+ l3: t23
+ });
+ results.push(Triangle {
+ l1: t31,
+ l2: t32,
+ l3: t33
+ });
+ }
+ results
+}
+
+fn parse_line(line: String) -> (i32, i32, i32) {
+ let mut separated = line.split_whitespace();
+ (separated.next().unwrap().trim().parse().unwrap(),
+ separated.next().unwrap().trim().parse().unwrap(),
+ separated.next().unwrap().trim().parse().unwrap())
+}
+
diff --git a/2016/aoc4/Cargo.lock b/2016/aoc4/Cargo.lock
new file mode 100644
index 0000000..df3af88
--- /dev/null
+++ b/2016/aoc4/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc4"
+version = "0.1.0"
+
diff --git a/2016/aoc4/Cargo.toml b/2016/aoc4/Cargo.toml
new file mode 100644
index 0000000..7d02c6d
--- /dev/null
+++ b/2016/aoc4/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc4"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc4/input.txt b/2016/aoc4/input.txt
new file mode 100644
index 0000000..c23ffc2
--- /dev/null
+++ b/2016/aoc4/input.txt
@@ -0,0 +1,1091 @@
+gbc-frperg-pubpbyngr-znantrzrag-377[rgbnp]
+nij-mywlyn-wlsiayhcw-jfumncw-alumm-mbcjjcha-422[mcjwa]
+pualyuhapvuhs-ibuuf-zhslz-227[uhalp]
+xlrypetn-prr-lylwjdtd-665[dzoya]
+zilqwikbqdm-rmttgjmiv-mvoqvmmzqvo-278[mqvio]
+rgllk-bxmefuo-sdmee-geqd-fqefuzs-274[efdgl]
+ugfkmewj-yjsvw-wyy-lwuzfgdgyq-814[wygfj]
+lnkfaypeha-xwogap-bejwjyejc-524[uqzms]
+laffe-sorozgxe-mxgjk-jek-xkykgxin-254[kxegf]
+ytu-xjhwjy-hfsid-htfynsl-qtlnxynhx-411[hyntx]
+vetllbybxw-xzz-mktbgbgz-709[kblty]
+ixeumktoi-kmm-giwaoyozout-176[oimkt]
+frqvxphu-judgh-udpsdjlqj-udeelw-uhvhdufk-647[ntbsq]
+ixccb-hjj-uhvhdufk-725[hcjub]
+sehheiylu-isqludwuh-xkdj-qsgkyiyjyed-634[ydehi]
+yhwooebeaz-acc-ajcejaanejc-316[acejo]
+qyujihctyx-vumeyn-zchuhwcha-318[hcuya]
+xtwtelcj-rclop-clmmte-nzyeltyxpye-171[eltcy]
+pinovwgz-mvwwdo-yzkgjthzio-941[owzgi]
+htwwtxnaj-xhfajsljw-mzsy-hzxytrjw-xjwanhj-229[jwhxa]
+amlqskcp-epybc-cee-pcyaosgqgrgml-652[cegpa]
+fab-eqodqf-omzpk-emxqe-560[eqfmo]
+bnmrtldq-fqzcd-idkkxadzm-qdrdzqbg-365[dqzbk]
+ovbunmneqbhf-wryylorna-qrirybczrag-559[rbnya]
+ynukcajey-xwogap-iwjwcaiajp-966[jydme]
+dkqjcbctfqwu-uecxgpigt-jwpv-fgrctvogpv-128[cgptv]
+ugfkmewj-yjsvw-tmffq-vwhdgqewfl-606[zfmlc]
+htqtwkzq-idj-ijxnls-723[rwmzt]
+kgjgrypw-epybc-aylbw-amyrgle-amlryglkclr-184[lygra]
+jxdkbqfz-yrkkv-bkdfkbbofkd-705[csxut]
+ujqgywfau-uzgugdslw-sfsdqkak-684[duboh]
+rwcnawjcrxwju-mhn-nwprwnnarwp-823[wnrac]
+eqttqukxg-rncuvke-itcuu-ujkrrkpi-102[ukrtc]
+jvuzbtly-nyhkl-ibuuf-dvyrzovw-201[uvybl]
+tvsnigxmpi-fewoix-wxsveki-750[ixesv]
+rtqlgevkng-ejqeqncvg-ncdqtcvqta-336[prlxq]
+wfummczcyx-luvvcn-nywbhifias-864[cfimn]
+irdgrxzex-vxx-nfibjyfg-763[xfgir]
+buzahisl-ipvohghykvbz-qlssfilhu-klclsvwtlua-591[moyzp]
+dpotvnfs-hsbef-sbnqbhjoh-fhh-nbobhfnfou-831[vbmns]
+owshgfarwv-lgh-kwujwl-usfvq-ghwjslagfk-164[wgfhl]
+yuxufmdk-sdmpq-bxmefuo-sdmee-dqeqmdot-222[dmequ]
+clotzlnetgp-clmmte-opawzjxpye-873[elptc]
+mfklstdw-usfvq-kwjnauwk-268[kwfsu]
+vhglnfxk-zktwx-unggr-xgzbgxxkbgz-839[gxkzb]
+yrwxefpi-tpewxmg-kveww-ywiv-xiwxmrk-932[pxhgu]
+shmml-cynfgvp-tenff-qrfvta-143[fmntv]
+zhdsrqlchg-sodvwlf-judvv-uhdftxlvlwlrq-855[ldvhf]
+kfg-jvtivk-sleep-uvjzxe-711[evjkf]
+molgbzqfib-yxphbq-obpbxoze-757[bopqx]
+qfmcusbwq-qobrm-qcohwbu-fsoqeiwgwhwcb-168[qwbco]
+sbejpbdujwf-gmpxfs-tupsbhf-623[bfpsj]
+jsehsyafy-hdsklau-yjskk-ksdwk-242[ksyad]
+rwcnawjcrxwju-ljwmh-bcxajpn-823[jwcan]
+excdklvo-oqq-oxqsxoobsxq-874[oqxsb]
+buzahisl-jhukf-jvhapun-klwsvftlua-565[uahlf]
+gpbepvxcv-snt-steadnbtci-453[tbcen]
+wyvqljapsl-ihzrla-zlycpjlz-149[lzajp]
+amlqskcp-epybc-cee-kylyeckclr-938[cekly]
+jchipqat-qphzti-advxhixrh-895[hiapq]
+tinnm-qvcqczohs-qighcasf-gsfjwqs-818[jfuek]
+qyujihctyx-mwupyhayl-bohn-wihnuchgyhn-890[hynuc]
+wlqqp-nvrgfezqvu-irsszk-ivjvrity-607[viqrs]
+molgbzqfib-avb-cfkxkzfkd-315[bfkza]
+luxciuwncpy-wuhxs-womnigyl-mylpcwy-266[ylhtr]
+ugdgjxmd-bwddqtwsf-ugflsafewfl-762[qdtes]
+fmsledevhsyw-nippcfier-eguymwmxmsr-438[vmsip]
+xekdwvwnzkqo-xwogap-ajcejaanejc-706[aejwc]
+wfummczcyx-yaa-fiacmncwm-136[bxsio]
+rdadguja-tvv-ldgzhwde-375[dagve]
+wsvsdkbi-qbkno-oqq-domrxyvyqi-718[qobdi]
+oaxadrgx-qss-oazfmuzyqzf-300[mfedb]
+hqfxxnknji-uqfxynh-lwfxx-xfqjx-125[zkwtx]
+gpbepvxcv-qphzti-rdcipxcbtci-947[cpibt]
+etyyx-bzmcx-bnzshmf-qdrdzqbg-443[btyez]
+htqtwkzq-gzssd-qfgtwfytwd-541[ogntm]
+uiovmbqk-kpwkwtibm-mvoqvmmzqvo-798[awevt]
+zotts-vumeyn-xypyfijgyhn-448[qasni]
+zovldbkfz-pzxsbkdbo-erkq-xznrfpfqflk-367[eunpo]
+htwwtxnaj-gntmfefwitzx-hfsid-htfynsl-zxjw-yjxynsl-255[tfnwx]
+vhglnfxk-zktwx-vahvhetmx-labiibgz-839[hvxab]
+htqtwkzq-idj-wjhjnansl-983[rmtzn]
+irgyyolokj-vrgyzoi-mxgyy-aykx-zkyzotm-358[yogkz]
+ktfitzbgz-lvtoxgzxk-angm-wxitkmfxgm-943[vxmua]
+uwtojhynqj-hmthtqfyj-jslnsjjwnsl-879[jhnst]
+mrxivrexmsrep-gerhc-gsexmrk-hiwmkr-100[yzpuo]
+hdgdovmt-bmvyz-ezggtwzvi-adivixdib-707[divgz]
+lqwhuqdwlrqdo-iorzhu-ghvljq-959[qhldo]
+vhkkhlbox-wrx-inkvatlbgz-397[kbhlv]
+tyepcyletzylw-awldetn-rcldd-dezclrp-795[ldect]
+sedikcuh-whqtu-uww-tufqhjcudj-946[uhwcd]
+lsyrkjkbnyec-zvkcdsm-qbkcc-myxdksxwoxd-848[kcdsx]
+fnjyxwrinm-lqxlxujcn-mnyjacvnwc-355[ncjxl]
+gpbepvxcv-tvv-rdcipxcbtci-141[cvpbi]
+xgsvgmotm-hgyqkz-ykxboiky-124[gkymo]
+udskkaxawv-usfvq-esjcwlafy-814[uidxk]
+fydelmwp-nlyoj-opalcexpye-899[elpyo]
+aczupnetwp-qwzhpc-afcnsldtyr-717[cpant]
+bknsykmdsfo-nio-yzobkdsyxc-926[kosyb]
+xjmmjndqz-xcjxjgvoz-mzvxlpdndodji-343[fqvmn]
+amjmpdsj-qaytclecp-fslr-bcqgel-782[claej]
+fnjyxwrinm-ouxfna-anjlzdrbrcrxw-719[nrxaf]
+qcbgiasf-ufors-pogysh-zcuwghwqg-168[gscfh]
+kmjezxodgz-wpiit-mzxzdqdib-109[aypcu]
+ckgvutofkj-xghhoz-uvkxgzouty-696[ajsic]
+lsyrkjkbnyec-mkxni-cdybkqo-510[kybcn]
+tipfxvezt-gcrjkzt-xirjj-jvimztvj-919[pofxi]
+pbybeshy-cynfgvp-tenff-svanapvat-403[afnpv]
+cjpibabsepvt-cvooz-usbjojoh-155[objcp]
+jvyyvzpcl-lnn-ayhpupun-929[npylu]
+wsvsdkbi-qbkno-zvkcdsm-qbkcc-oxqsxoobsxq-276[sbkoq]
+ugdgjxmd-usfvq-ugslafy-ugflsafewfl-918[xbmpo]
+nwlddtqtpo-ojp-xlcvpetyr-639[ptdlo]
+nzcczdtgp-prr-opdtry-587[wsiym]
+ynssr-yehpxk-wxlbzg-111[plhnx]
+xjmmjndqz-xcjxjgvoz-xjiovdihzio-967[jxioz]
+enqvbnpgvir-pubpbyngr-znexrgvat-585[qtsjn]
+gvcskirmg-qekrixmg-ikk-xvemrmrk-126[kmrgi]
+gpbepvxcv-uadltg-ejgrwphxcv-921[gpvce]
+kmjezxodgz-nxvqzibzm-cpio-adivixdib-941[izdxb]
+hcd-gsqfsh-xszzmpsob-sbuwbssfwbu-428[sbfhu]
+nwlddtqtpo-upwwjmply-dpcgtnpd-119[pdtwl]
+mbggf-msvdly-zlycpjlz-929[aonev]
+lhkhszqx-fqzcd-qzaahs-btrsnldq-rdquhbd-443[qdhsz]
+luxciuwncpy-xsy-uwkocmcncih-500[cuinw]
+qvbmzvibqwvit-kpwkwtibm-zmkmqdqvo-564[mqvbi]
+tvsnigxmpi-jpsaiv-irkmriivmrk-568[yileu]
+vxupkizork-kmm-lotgtiotm-748[xymrs]
+gpewwmjmih-gerhc-hiwmkr-152[lostk]
+ibghopzs-gqojsbusf-vibh-rsgwub-818[bsghi]
+guahyncw-luvvcn-wihnuchgyhn-552[hncug]
+iruzfrtkzmv-treup-tfrkzex-ivjvrity-373[rtivz]
+dsxxw-cee-ylyjwqgq-704[eqwxy]
+lhkhszqx-fqzcd-eknvdq-lzmzfdldms-911[dzlqf]
+oxmeeuruqp-omzpk-oamfuzs-emxqe-248[emoup]
+dyz-combod-mkxni-mykdsxq-vklybkdybi-848[dkybm]
+bpvctixr-qphzti-ldgzhwde-999[abmop]
+kwvacumz-ozilm-jiasmb-mvoqvmmzqvo-824[tnqvi]
+njmjubsz-hsbef-kfmmzcfbo-nbobhfnfou-389[luxhg]
+hwbba-fag-tgceswkukvkqp-622[kabgw]
+nchhg-jiasmb-lmxizbumvb-382[bmhia]
+ymszqfuo-dmnnuf-emxqe-170[syxpj]
+ymszqfuo-qss-abqdmfuaze-144[qsafm]
+tcfkqcevkxg-hwbba-hnqygt-vtckpkpi-440[kctbg]
+zloolpfsb-gbiivybxk-rpbo-qbpqfkd-705[bopfi]
+slqryzjc-pyzzgr-rpyglgle-288[uanmz]
+iutyaskx-mxgjk-inuiurgzk-rumoyzoiy-696[klmzy]
+dpssptjwf-cvooz-efqmpznfou-311[fopsz]
+dsxxw-cee-dglylagle-756[eldgx]
+nwlddtqtpo-upwwjmply-xlcvpetyr-223[pltwd]
+jvuzbtly-nyhkl-lnn-lunpullypun-201[tqlba]
+uiovmbqk-kivlg-bmkpvwtwog-720[kpvsu]
+nchhg-xtiabqk-oziaa-zmamizkp-850[aizhk]
+molgbzqfib-zixppfcfba-gbiivybxk-pqloxdb-237[igmjz]
+jyfvnlupj-jhukf-jvhapun-yljlpcpun-539[dmnws]
+hqtyeqsjylu-sqdto-tufqhjcudj-712[cnysz]
+gsvvswmzi-gerhc-gsrxemrqirx-100[dlypm]
+ktwbhtvmbox-xzz-vhgmtbgfxgm-709[bgmtx]
+hjgbwuladw-uzgugdslw-vwhsjlewfl-580[wlgud]
+njmjubsz-hsbef-kfmmzcfbo-efqmpznfou-181[subnv]
+bnknqetk-bzmcx-zbpthrhshnm-417[bhnkm]
+gspsvjyp-fyrrc-jmrergmrk-126[rgjmp]
+bjfutsneji-gntmfefwitzx-kqtbjw-fhvznxnynts-307[ntfjb]
+sedikcuh-whqtu-rqiauj-tuiywd-270[gipnv]
+hjgbwuladw-bwddqtwsf-jwsuimakalagf-294[wadbf]
+encuukhkgf-uecxgpigt-jwpv-rwtejcukpi-986[ucegk]
+nzydfxpc-rclop-nlyoj-nzletyr-zapcletzyd-847[lyzcn]
+eqpuwogt-itcfg-lgnnadgcp-tgceswkukvkqp-518[gckpt]
+nzwzcqfw-mldvpe-afcnsldtyr-171[cdfln]
+ide-htrgti-snt-advxhixrh-401[hitdr]
+fmsledevhsyw-gerhc-gsexmrk-erepcwmw-776[emrsw]
+jvyyvzpcl-yhiipa-aljouvsvnf-201[vyaij]
+chnylhuncihuf-zfiqyl-mniluay-656[hilnu]
+udskkaxawv-xdgowj-klgjsyw-346[eruiv]
+pbeebfvir-sybjre-qrcnegzrag-585[erbga]
+aoubshwq-qobrm-obozmgwg-948[obgmq]
+jvsvymbs-ibuuf-huhsfzpz-747[subfh]
+qvbmzvibqwvit-jiasmb-ikycqaqbqwv-928[qbiva]
+zuv-ykixkz-kmm-jkyomt-748[kmyzi]
+slqryzjc-zsllw-amlryglkclr-808[lrcsy]
+enzcntvat-enoovg-ybtvfgvpf-273[vntef]
+iqmbazulqp-dmnnuf-oazfmuzyqzf-664[zfmqu]
+yaxsnlcrun-ouxfna-uxprbcrlb-537[nruxa]
+ovbunmneqbhf-cynfgvp-tenff-ratvarrevat-351[uakpm]
+qzchnzbshud-idkkxadzm-rghoohmf-885[hdzkm]
+fodvvlilhg-sodvwlf-judvv-fxvwrphu-vhuylfh-101[vfhld]
+qvbmzvibqwvit-kpwkwtibm-apqxxqvo-798[qvbiw]
+aoubshwq-pwcvonofrcig-rms-aofyshwbu-688[oswab]
+hwbba-gii-fgrnqaogpv-882[gabif]
+pkl-oaynap-acc-pnwejejc-186[acpej]
+ltpedcxots-qphzti-ejgrwphxcv-323[ptceh]
+mybbycsfo-nio-nofovyzwoxd-250[stdkc]
+bgmxkgtmbhgte-ietlmbv-zktll-inkvatlbgz-397[ptrnf]
+dpotvnfs-hsbef-dipdpmbuf-qvsdibtjoh-545[dbfps]
+fmsledevhsyw-veqtekmrk-tpewxmg-kveww-hitevxqirx-568[evwkm]
+ykjoqian-cnwza-ywjzu-ykwpejc-wymqeoepekj-628[hmfzu]
+wihmogyl-aluxy-vumeyn-jolwbumcha-240[lmuya]
+yuxufmdk-sdmpq-eomhqzsqd-tgzf-emxqe-664[mqdef]
+wifilzof-vumeyn-guhuaygyhn-864[uyfgh]
+hplazytkpo-nlyoj-cpdplcns-457[plcno]
+vhglnfxk-zktwx-utldxm-hixktmbhgl-917[tursp]
+jxdkbqfz-zxkav-zlxqfkd-pxibp-133[xkzbd]
+mfklstdw-xdgowj-jwuwanafy-554[wadfj]
+eqttqukxg-tcddkv-vtckpkpi-596[ampxv]
+tpspahyf-nyhkl-jovjvshal-mpuhujpun-591[fkeyj]
+vqr-ugetgv-ecpfa-eqcvkpi-ujkrrkpi-414[ekprv]
+mvkccspson-bkllsd-nozvyiwoxd-952[oscdk]
+ugjjgkanw-ugfkmewj-yjsvw-bwddqtwsf-kwjnauwk-528[nkliy]
+wkqxodsm-lexxi-myxdksxwoxd-848[xdkmo]
+tfiifjzmv-tyftfcrkv-jyzggzex-841[unmyd]
+wdjcvuvmyjpn-rzvkjiduzy-mvwwdo-adivixdib-421[dvijw]
+xzwrmkbqtm-jcvvg-amzdqkma-226[uonyt]
+tvsnigxmpi-mrxivrexmsrep-veffmx-xvemrmrk-308[mrxev]
+iehepwnu-cnwza-nwxxep-owhao-420[wenah]
+fubrjhqlf-edvnhw-wudlqlqj-725[lqdfh]
+wfummczcyx-wuhxs-mniluay-370[cbijt]
+jchipqat-eaphixr-vgphh-sthxvc-895[hpaci]
+pelbtravp-ohaal-hfre-grfgvat-169[arefg]
+jshzzpmplk-jhukf-aljouvsvnf-279[jfhkl]
+hwbba-ejqeqncvg-ocpcigogpv-128[cgbeo]
+fnjyxwrinm-ajkkrc-cajrwrwp-745[rjwac]
+mhi-lxvkxm-utldxm-tgterlbl-267[lmtxb]
+jxdkbqfz-bdd-pqloxdb-237[dbqxf]
+qfkkj-nzydfxpc-rclop-clmmte-xlylrpxpye-197[vzyuc]
+bxaxipgn-vgpst-qxdwpopgsdjh-ytaanqtpc-hwxeexcv-687[csdop]
+rdggdhxkt-eaphixr-vgphh-itrwcdadvn-245[dhgra]
+qlm-pbzobq-zxkav-zlxqfkd-obzbfsfkd-471[bzfkq]
+ajyqqgdgcb-qaytclecp-fslr-sqcp-rcqrgle-106[cqglr]
+zgmfyxypbmsq-aylbw-amyrgle-qfgnngle-704[jmbna]
+pkl-oaynap-acc-zalhkuiajp-654[apckl]
+bqxnfdmhb-okzrshb-fqzrr-btrsnldq-rdquhbd-599[nszgr]
+mybbycsfo-mkxni-mykdsxq-cobfsmoc-302[mbcos]
+ujoon-eaphixr-vgphh-ldgzhwde-141[hdego]
+iuxxuyobk-hatte-lotgtiotm-852[toiux]
+muqfedyput-rkddo-huqsgkyiyjyed-608[dyuek]
+mrxivrexmsrep-ikk-irkmriivmrk-230[rikme]
+htqtwkzq-wfggny-ywfnsnsl-749[nwfgq]
+sno-rdbqds-idkkxadzm-trdq-sdrshmf-599[dsrkm]
+apuut-wpiit-gvwjmvojmt-369[tijmp]
+molgbzqfib-yxphbq-tlohpelm-133[blhmo]
+ugdgjxmd-wyy-hmjuzskafy-866[ydgjm]
+slqryzjc-hcjjwzcyl-dglylagle-860[lcjyg]
+ktwbhtvmbox-wrx-etuhktmhkr-241[psbxd]
+oaddaeuhq-otaoaxmfq-ruzmzouzs-950[aouzd]
+ugfkmewj-yjsvw-tmffq-klgjsyw-528[sqogh]
+vrurcjah-pajmn-ajvyjprwp-ljwmh-anlnrerwp-433[jkstx]
+fab-eqodqf-vqxxknqmz-ymdwqfuzs-586[qfdmx]
+tpspahyf-nyhkl-kfl-klwhyatlua-123[lahky]
+zntargvp-enoovg-znexrgvat-195[gnvae]
+dkqjcbctfqwu-uecxgpigt-jwpv-ugtxkegu-934[gucte]
+owshgfarwv-xdgowj-jwkwsjuz-320[wjgos]
+gifavtkzcv-treup-jyzggzex-659[gzetv]
+bjfutsneji-gfxpjy-tujwfyntsx-203[jftns]
+pxtihgbsxw-ietlmbv-zktll-ybgtgvbgz-371[bgtli]
+crwwv-zxkav-pefmmfkd-367[fkmvw]
+sbqiiyvyut-fbqijys-whqii-tulubefcudj-998[xytos]
+gvcskirmg-gsvvswmzi-fewoix-pskmwxmgw-230[gmswi]
+eqttqukxg-ejqeqncvg-octmgvkpi-232[qegtc]
+lqwhuqdwlrqdo-fdqgb-zrunvkrs-439[qdrlu]
+tinnm-gqojsbusf-vibh-gozsg-480[gsbin]
+lujbbrornm-ljwmh-orwjwlrwp-849[rwjlb]
+jef-iushuj-rkddo-efuhqjyedi-868[dejuf]
+szfyrqriuflj-treup-jrcvj-971[slkjz]
+ltpedcxots-rpcsn-itrwcdadvn-921[cdtnp]
+ohmnuvfy-xsy-jolwbumcha-968[hmouy]
+gntmfefwitzx-wfintfhynaj-uqfxynh-lwfxx-wjhjnansl-905[fnwxh]
+xcitgcpixdcpa-tvv-hwxeexcv-271[cxvei]
+jyfvnlupj-qlssfilhu-ayhpupun-227[zbydk]
+wdjcvuvmyjpn-zbb-vxlpdndodji-291[djvbn]
+wfummczcyx-dyffsvyuh-xymcah-630[ycfmh]
+cebwrpgvyr-wryylorna-phfgbzre-freivpr-897[opgba]
+cjpibabsepvt-tdbwfohfs-ivou-fohjoffsjoh-363[fobhj]
+zekvierkzferc-jtrmvexvi-ylek-wzeretzex-425[erzkv]
+sgmtkzoi-pkrrehkgt-ygrky-228[kgrty]
+iruzfrtkzmv-jtrmvexvi-ylek-jkfirxv-971[nvfye]
+dfcxsqhwzs-pogysh-obozmgwg-870[goshw]
+yuxufmdk-sdmpq-vqxxknqmz-bgdotmeuzs-326[tidcv]
+iuxxuyobk-igtje-ygrky-878[mflrz]
+laffe-igtje-vaxingyotm-800[aefgi]
+tpspahyf-nyhkl-wshzapj-nyhzz-zhslz-643[hzpsy]
+diozmivodjivg-xviyt-ozxcijgjbt-473[cmtlp]
+pyknyegle-njyqrga-epyqq-pcyaosgqgrgml-314[gyqep]
+bwx-amkzmb-zijjqb-tijwzibwzg-824[egorq]
+drxevkzt-vxx-uvjzxe-581[xvezd]
+ktfitzbgz-cxeeruxtg-wxitkmfxgm-761[txgef]
+htsxzrjw-lwfij-wfggny-ywfnsnsl-801[cjidb]
+oxmeeuruqp-nmewqf-pqeusz-742[eqump]
+hqfxxnknji-kzeed-ojqqdgjfs-jslnsjjwnsl-671[jnsqd]
+pbybeshy-rtt-phfgbzre-freivpr-221[rbepf]
+pdjqhwlf-edvnhw-xvhu-whvwlqj-231[hwvdj]
+gcfcnuls-aluxy-vumeyn-lywycpcha-188[cylua]
+plolwdub-judgh-edvnhw-pdqdjhphqw-699[dhpwj]
+udpsdjlqj-hjj-pdqdjhphqw-751[jdhpq]
+amjmpdsj-pyzzgr-qyjcq-886[jmpqy]
+lahxpnwrl-ljwmh-bqryyrwp-667[tifxe]
+drxevkzt-avccpsvre-uvgcfpdvek-191[vcedk]
+xzwrmkbqtm-rmttgjmiv-apqxxqvo-928[lmkgz]
+eqnqthwn-tcddkv-fgrctvogpv-648[tvcdg]
+bjfutsneji-ojqqdgjfs-ijajqturjsy-515[jqsfi]
+sebehvkb-hqrryj-ixyffydw-166[siyrz]
+zlkprjbo-doxab-mixpqfz-doxpp-jxohbqfkd-783[yjhzq]
+eza-dpncpe-nsznzwlep-opdtry-821[sdeti]
+tbxmlkfwba-yxphbq-xkxivpfp-523[slfmk]
+ucynmlgxcb-hcjjwzcyl-umpiqfmn-548[cmjln]
+lxwbdvna-pajmn-bljenwpna-qdwc-dbna-cnbcrwp-199[nabwc]
+eadalsjq-yjsvw-wyy-jwsuimakalagf-892[ajswy]
+fruurvlyh-mhoobehdq-zrunvkrs-907[rhuov]
+sbqiiyvyut-vbemuh-sedjqydcudj-686[ltadr]
+fkqbokxqflkxi-avb-lmboxqflkp-991[kbflq]
+lhkhszqx-fqzcd-atmmx-kzanqzsnqx-677[qzxah]
+cebwrpgvyr-hafgnoyr-cynfgvp-tenff-qrcnegzrag-793[rxmql]
+ajmrxjlcren-cxy-bnlanc-ouxfna-lxwcjrwvnwc-927[cnxaj]
+hqtyeqsjylu-isqludwuh-xkdj-tulubefcudj-244[udjlq]
+vdzonmhydc-azrjds-cdudknoldms-157[lzowh]
+uwtojhynqj-kqtbjw-zxjw-yjxynsl-333[grmkp]
+myxcewob-qbkno-oqq-ecob-docdsxq-614[oqbcd]
+rkpqxyib-gbiivybxk-abpfdk-419[bikpx]
+zlilocri-zelzlixqb-qbzeklildv-497[ucyzj]
+pinovwgz-xviyt-vivgtndn-499[vingt]
+gcfcnuls-aluxy-luvvcn-xymcah-318[cluan]
+sebehvkb-fbqijys-whqii-husuylydw-400[bhisy]
+rdchjbtg-vgpst-eaphixr-vgphh-rjhidbtg-htgkxrt-323[hgtrp]
+pualyuhapvuhs-jshzzpmplk-wshzapj-nyhzz-zlycpjlz-175[zphla]
+atyzghrk-sgmtkzoi-hgyqkz-yzuxgmk-228[gkzyh]
+ohmnuvfy-mwupyhayl-bohn-yhachyylcha-630[hyacl]
+oxjmxdfkd-avb-pqloxdb-211[dxboa]
+iqmbazulqp-bdavqofuxq-omzpk-ruzmzouzs-482[zqumo]
+zsxyfgqj-gzssd-wjxjfwhm-619[jsfgw]
+qvbmzvibqwvit-jcvvg-abwziom-512[tcrkb]
+xgjougizobk-lruckx-aykx-zkyzotm-826[koxzg]
+bkzrrhehdc-rbzudmfdq-gtms-zmzkxrhr-755[rzdhm]
+myxcewob-qbkno-cmkfoxqob-rexd-zebmrkcsxq-302[syrvm]
+zekvierkzferc-treup-tfrkzex-uvgrikdvek-867[ekrvz]
+cvabijtm-lgm-bziqvqvo-330[vbimq]
+vhglnfxk-zktwx-ktuubm-vhgmtbgfxgm-553[gkmtx]
+xst-wigvix-fyrrc-vieguymwmxmsr-490[yentm]
+ktfitzbgz-fbebmtkr-zktwx-xzz-lmhktzx-111[ztkbx]
+vdzonmhydc-eknvdq-sqzhmhmf-963[xacdu]
+dmpuamofuhq-otaoaxmfq-efadmsq-742[amfoq]
+htqtwkzq-gfxpjy-wjxjfwhm-827[fnred]
+sbnqbhjoh-xfbqpojafe-cbtlfu-dpoubjonfou-311[kezry]
+qyujihctyx-vumeyn-lywycpcha-604[ychua]
+ide-htrgti-tvv-uxcpcrxcv-973[ctvir]
+bxaxipgn-vgpst-snt-gtprfjxhxixdc-791[xgpti]
+nbhofujd-dipdpmbuf-dvtupnfs-tfswjdf-363[dfpub]
+apuut-nxvqzibzm-cpio-mznzvmxc-291[zmcin]
+uzfqdzmfuazmx-otaoaxmfq-pqhqxabyqzf-768[pzmry]
+tpspahyf-nyhkl-ibuuf-klwhyatlua-253[xkrsz]
+iqmbazulqp-vqxxknqmz-efadmsq-950[jrnox]
+bpvctixr-rpcsn-igpxcxcv-375[cpxir]
+ytu-xjhwjy-uqfxynh-lwfxx-yjhmstqtld-489[xyhjt]
+qvbmzvibqwvit-ntwemz-kwvbiqvumvb-720[vbimq]
+mhi-lxvkxm-ietlmbv-zktll-vnlmhfxk-lxkobvx-553[eusnm]
+tpspahyf-nyhkl-jhukf-wbyjohzpun-487[hpyfj]
+avw-zljyla-qlssfilhu-zlycpjlz-929[lzajs]
+sawlkjevaz-xwogap-skngodkl-290[akglo]
+xgjougizobk-laffe-lruckx-gtgreyoy-774[goefk]
+aoubshwq-qobrm-qcohwbu-qighcasf-gsfjwqs-948[qsbho]
+wifilzof-vumeyn-lyuwkocmcncih-968[avixc]
+uiovmbqk-xtiabqk-oziaa-mvoqvmmzqvo-382[moqva]
+sawlkjevaz-oywrajcan-dqjp-lqnydwoejc-342[ajwcd]
+kfg-jvtivk-jtrmvexvi-ylek-rercpjzj-529[jvekr]
+houngfgxjuay-igtje-giwaoyozout-228[gouai]
+gcfcnuls-aluxy-mwupyhayl-bohn-ijyluncihm-916[tacdb]
+cjpibabsepvt-cvooz-ufdiopmphz-155[pobci]
+iuxxuyobk-igtje-sgtgmksktz-878[uwcvx]
+thnulapj-ibuuf-ylzlhyjo-305[sfdnr]
+xzwrmkbqtm-rmttgjmiv-zmamizkp-434[ifpry]
+yhwooebeaz-zua-yqopkian-oanreya-680[aoeyn]
+tfcfiwlc-wcfnvi-wzeretzex-243[cefwi]
+guahyncw-xsy-uwkocmcncih-864[qsmtb]
+ovbunmneqbhf-rtt-qrfvta-689[zymsd]
+rgllk-eomhqzsqd-tgzf-ymdwqfuzs-638[qzdfg]
+ryexqpqhteki-sqdto-seqjydw-skijecuh-iuhlysu-946[eqshi]
+avw-zljyla-qlssfilhu-mpuhujpun-383[luahj]
+pynffvsvrq-onfxrg-znantrzrag-143[nrfag]
+ikhcxvmbex-xzz-phkdlahi-839[cstrx]
+mvhkvbdib-wvnfzo-zibdizzmdib-187[bizdv]
+ipvohghykvbz-wshzapj-nyhzz-huhsfzpz-747[hzpsv]
+htqtwkzq-hmthtqfyj-ijuqtdrjsy-151[tqhjy]
+xzz-ftgtzxfxgm-865[tupfq]
+jyfvnlupj-jhukf-klwhyatlua-747[jydsc]
+mbiyqoxsm-mkxni-kxkvicsc-510[ikmxc]
+bgmxkgtmbhgte-ietlmbv-zktll-labiibgz-163[bglti]
+vdzonmhydc-bqxnfdmhb-rbzudmfdq-gtms-lzmzfdldms-469[arkps]
+forwcoqhwjs-gqojsbusf-vibh-rsgwub-688[dgqsb]
+qcffcgwjs-pogysh-qcbhowbasbh-688[bchsf]
+apuut-xviyt-yzqzgjkhzio-317[zituy]
+ide-htrgti-qjccn-jhtg-ithixcv-479[itchg]
+kgjgrypw-epybc-hcjjwzcyl-cleglccpgle-262[qphrv]
+atyzghrk-lruckx-jkvruesktz-384[krtuz]
+hqtyeqsjylu-rqiauj-vydqdsydw-998[gqeba]
+uwtojhynqj-gfxpjy-qfgtwfytwd-177[fjtwy]
+nglmtuex-xzz-ftgtzxfxgm-839[xgtzf]
+ncjzrpytn-clmmte-epnsyzwzrj-951[yqksh]
+gntmfefwitzx-gzssd-htsyfnsrjsy-333[cngmk]
+qcbgiasf-ufors-qvcqczohs-hfowbwbu-168[bcfoq]
+wlqqp-gcrjkzt-xirjj-dribvkzex-529[ycrxs]
+drxevkzt-irdgrxzex-jtrmvexvi-ylek-glityrjzex-321[erxit]
+ovbunmneqbhf-qlr-znexrgvat-559[nbeqr]
+bwx-amkzmb-jiasmb-camz-bmabqvo-512[bmazc]
+vcibutulxiom-vohhs-womnigyl-mylpcwy-838[fczlm]
+fmsledevhsyw-ikk-hitpscqirx-230[owjnv]
+ykhknbqh-ywjzu-ykwpejc-odellejc-940[xguqm]
+nsyjwsfyntsfq-gzssd-uzwhmfxnsl-203[sfnwy]
+mtzslklcozfd-clmmte-nzyeltyxpye-301[tmlui]
+dsxxw-cee-kypicrgle-106[ecxdg]
+ujqgywfau-aflwjfslagfsd-tskcwl-ghwjslagfk-476[fagls]
+nchhg-jcvvg-mvoqvmmzqvo-642[vmcgh]
+cjpibabsepvt-tdbwfohfs-ivou-efqmpznfou-831[mvwiq]
+votubcmf-njmjubsz-hsbef-dboez-dpbujoh-fohjoffsjoh-129[izchs]
+njmjubsz-hsbef-fhh-nbobhfnfou-337[unims]
+iwcjapey-lhwopey-cnwoo-hkceopeyo-576[oecpw]
+ydjuhdqjyedqb-fbqijys-whqii-efuhqjyedi-322[qdijy]
+bknsykmdsfo-lkcuod-mecdywob-cobfsmo-250[obcdk]
+sbqiiyvyut-zubboruqd-cqdqwucudj-530[uqbdc]
+etaqigpke-dcumgv-vgejpqnqia-960[egqai]
+ykjoqian-cnwza-nwxxep-paydjkhkcu-134[pcdmt]
+iehepwnu-cnwza-lhwopey-cnwoo-nawymqeoepekj-108[ewnop]
+vagreangvbany-rtt-phfgbzre-freivpr-221[raegv]
+surmhfwloh-sodvwlf-judvv-xvhu-whvwlqj-595[vhwlu]
+qekrixmg-ikk-gywxsqiv-wivzmgi-256[jsykh]
+sno-rdbqds-bgnbnkzsd-otqbgzrhmf-495[rypqa]
+guahyncw-vohhs-nywbhifias-214[hains]
+sno-rdbqds-atmmx-bnmszhmldms-365[posvl]
+zovldbkfz-zxkav-zlxqfkd-zlkqxfkjbkq-575[zrqmk]
+ykhknbqh-zua-owhao-888[hakob]
+xmrrq-vqw-ugflsafewfl-372[isvjx]
+wdjcvuvmyjpn-wpiit-vxlpdndodji-395[cvdlm]
+wyvqljapsl-ihzrla-zopwwpun-123[lpwaz]
+kdijqrbu-tou-husuylydw-816[uvcwx]
+fhezusjybu-fbqijys-whqii-husuylydw-764[uyhis]
+jyfvnlupj-kfl-mpuhujpun-773[ujpfl]
+hafgnoyr-pubpbyngr-nanylfvf-715[nkyzs]
+jfifqxov-doxab-oxyyfq-absbilmjbkq-341[qmgrk]
+nij-mywlyn-wuhxs-wiuncha-uwkocmcncih-188[cnwhi]
+amjmpdsj-afmamjyrc-ylyjwqgq-470[jmayq]
+rdggdhxkt-eaphixr-vgphh-jhtg-ithixcv-921[yvuxl]
+ucynmlgxcb-qaytclecp-fslr-dglylagle-184[tudeg]
+dpmpsgvm-tdbwfohfs-ivou-sfdfjwjoh-363[qhgxy]
+bqvvu-ykhknbqh-fahhuxawj-wymqeoepekj-498[hekqa]
+qczcftiz-xszzmpsob-sbuwbssfwbu-818[sbzcf]
+aietsrmdih-hci-wlmttmrk-360[imthr]
+xst-wigvix-ikk-qevoixmrk-256[ikxve]
+nzydfxpc-rclop-nzwzcqfw-mfyyj-opalcexpye-405[cpyfz]
+frqvxphu-judgh-udeelw-uhdftxlvlwlrq-933[ludhe]
+jsehsyafy-jsttal-hmjuzskafy-892[sajyf]
+zbytomdsvo-mrymyvkdo-vyqscdsmc-276[mydos]
+tcorcikpi-ecpfa-eqcvkpi-fgxgnqrogpv-934[jziot]
+ytu-xjhwjy-hfsid-wjxjfwhm-905[jhwfx]
+hjgbwuladw-tmffq-suimakalagf-554[afglm]
+pyknyegle-zsllw-nspafyqgle-730[leygn]
+gifavtkzcv-avccpsvre-uvjzxe-607[zhayg]
+bpvctixr-snt-tcvxcttgxcv-973[vrteq]
+wyvqljapsl-jovjvshal-zlycpjlz-175[nrwfe]
+kwzzwaqdm-lgm-aitma-122[amwzd]
+iqmbazulqp-dmnnuf-qzsuzqqduzs-690[qhzsm]
+udskkaxawv-xdgowj-xafsfuafy-138[nailf]
+ipvohghykvbz-wshzapj-nyhzz-yljlpcpun-929[lwyvn]
+forwcoqhwjs-foppwh-hsqvbczcum-636[chowf]
+pualyuhapvuhs-msvdly-svnpzapjz-903[pasuv]
+xgjougizobk-vrgyzoi-mxgyy-xkykgxin-436[tjykb]
+sedikcuh-whqtu-rkddo-cqdqwucudj-348[brlqi]
+elrkdcdugrxv-fdqgb-uhfhlylqj-465[dlfgh]
+mhi-lxvkxm-lvtoxgzxk-angm-ltexl-917[xlmgk]
+bqvvu-fahhuxawj-yqopkian-oanreya-212[cpdwf]
+buzahisl-jhukf-thyrlapun-903[hualb]
+rgllk-oaxadrgx-nmewqf-pqbxakyqzf-690[aqxfg]
+iuruxlar-irgyyolokj-jek-ynovvotm-488[ohpdn]
+xmtjbzidx-nxvqzibzm-cpio-yzkgjthzio-811[zixbj]
+xmrrq-ugfkmewj-yjsvw-usfvq-ugslafy-ghwjslagfk-866[fgsju]
+yhtwhnpun-wshzapj-nyhzz-vwlyhapvuz-851[hznpw]
+zgmfyxypbmsq-zyqicr-kypicrgle-340[ycgim]
+uwtojhynqj-hfsid-htfynsl-wjfhvznxnynts-489[nhfjs]
+fab-eqodqf-dmnnuf-bgdotmeuzs-196[dfbem]
+wifilzof-wuhxs-wiuncha-lyuwkocmcncih-578[ciwhu]
+gspsvjyp-veffmx-pefsvexsvc-516[svefp]
+yknnkoera-xwogap-bejwjyejc-732[ejakn]
+nsyjwsfyntsfq-gfxpjy-knsfshnsl-333[sfnyj]
+fodvvlilhg-gbh-ghvljq-595[vgprj]
+nuatmlmdpage-bxmefuo-sdmee-emxqe-482[emadu]
+jvyyvzpcl-msvdly-vwlyhapvuz-903[vylpz]
+fruurvlyh-iorzhu-vdohv-517[hruvo]
+houngfgxjuay-hgyqkz-ykxboiky-618[ygkho]
+gsrwyqiv-kvehi-gerhc-gsexmrk-xiglrspskc-750[grsei]
+pualyuhapvuhs-qlssfilhu-zhslz-799[hlsua]
+nwlddtqtpo-nlyoj-nzletyr-opdtry-119[tdlno]
+fydelmwp-prr-nfdezxpc-dpcgtnp-535[pdcef]
+qmpmxevc-kvehi-jpsaiv-hizipstqirx-672[ipveh]
+nzwzcqfw-nlyoj-nzletyr-opawzjxpye-587[znwye]
+bpvctixr-rwdrdapit-hpath-973[prtad]
+gzefmnxq-omzpk-oazfmuzyqzf-430[zfmoq]
+wpuvcdng-hnqygt-vgejpqnqia-102[tmdxr]
+aoubshwq-foppwh-igsf-hsghwbu-610[tsrzk]
+wihmogyl-aluxy-mwupyhayl-bohn-mbcjjcha-422[vuypz]
+cqwdujys-uww-sedjqydcudj-478[djuwc]
+votubcmf-tdbwfohfs-ivou-sfbdrvjtjujpo-883[fobjt]
+gpbepvxcv-ytaanqtpc-apqdgpidgn-427[pagcd]
+bnknqetk-eknvdq-qdrdzqbg-885[qdknb]
+uwtojhynqj-wfruflnsl-hfsid-wjxjfwhm-541[fjwhl]
+zhdsrqlchg-fodvvlilhg-gbh-frqwdlqphqw-361[hlqdg]
+cvabijtm-jcvvg-lmxizbumvb-174[vbmci]
+fruurvlyh-fdqgb-ghsorbphqw-205[hrbfg]
+pualyuhapvuhs-msvdly-thyrlapun-279[uahlp]
+iehepwnu-cnwza-ydkykhwpa-ajcejaanejc-212[oqwrn]
+bqvvu-xwogap-yqopkian-oanreya-680[ckqtm]
+ktwbhtvmbox-vahvhetmx-mxvaghehzr-917[hvmtx]
+uzfqdzmfuazmx-omzpk-oamfuzs-fqotzaxask-274[mnilo]
+gntmfefwitzx-idj-rfsfljrjsy-931[fjirs]
+tcrjjzwzvu-tfiifjzmv-tyftfcrkv-vexzevvizex-399[vzfte]
+oaddaeuhq-vqxxknqmz-qzsuzqqduzs-404[qzdua]
+sorozgxe-mxgjk-yigbktmkx-natz-zxgototm-514[hejid]
+eadalsjq-yjsvw-ujqgywfau-tskcwl-kwjnauwk-554[wajks]
+lxuxaodu-rwcnawjcrxwju-ljwmh-fxatbqxy-693[xwaju]
+plolwdub-judgh-fdqgb-frdwlqj-vdohv-153[dlbfg]
+kdijqrbu-jef-iushuj-sqdto-seqjydw-kiuh-juijydw-218[iqtvx]
+tfejldvi-xiruv-tfcfiwlc-srjbvk-jyzggzex-243[fijvc]
+jchipqat-ltpedcxots-uadltg-tcvxcttgxcv-609[ezynj]
+ryexqpqhteki-sxesebqju-udwyduuhydw-816[eudqy]
+iuxxuyobk-xgjougizobk-hatte-sgtgmksktz-436[pwdlc]
+gcfcnuls-aluxy-wuhxs-wiuncha-guleyncha-136[ucahl]
+ugfkmewj-yjsvw-usfvq-ugslafy-mkwj-lwklafy-476[ohqre]
+laffe-vxupkizork-vrgyzoi-mxgyy-uvkxgzouty-488[awgqz]
+eqttqukxg-hnqygt-rwtejcukpi-570[tqegk]
+yuxufmdk-sdmpq-ngzzk-ruzmzouzs-534[zumdk]
+ktwbhtvmbox-ietlmbv-zktll-kxtvjnblbmbhg-553[btlkm]
+qxdwpopgsdjh-eaphixr-vgphh-prfjxhxixdc-999[hpxdg]
+bnmrtldq-fqzcd-oqnidbshkd-qzaahs-cdoknxldms-703[lxvwe]
+gokzyxsjon-nio-gybucryz-172[oygnz]
+cqwdujys-uww-cqhaujydw-660[wucdj]
+mbggf-pualyuhapvuhs-msvdly-aljouvsvnf-123[ngwhl]
+crwwv-oxaflxzqfsb-zelzlixqb-ixyloxqlov-913[lxoqz]
+qlm-pbzobq-ciltbo-abmxoqjbkq-861[bqolm]
+oqnidbshkd-dff-rghoohmf-313[dfhob]
+lzfmdshb-eknvdq-cdudknoldms-937[dklmn]
+wsvsdkbi-qbkno-nio-ecob-docdsxq-614[jsetb]
+zlilocri-zxkav-zlxqfkd-qoxfkfkd-835[kflxz]
+wlqqp-upv-vexzevvizex-165[vepqx]
+vcibutulxiom-vumeyn-womnigyl-mylpcwy-838[myilu]
+pelbtravp-cynfgvp-tenff-svanapvat-663[kzmfp]
+xgvnndadzy-wpiit-jkzmvodjin-421[dinjv]
+foadouwbu-pogysh-fsqswjwbu-480[osuwb]
+yrwxefpi-hci-wxsveki-308[iewxc]
+tmrszakd-azrjds-otqbgzrhmf-105[rzadm]
+sbnqbhjoh-dboez-dpbujoh-usbjojoh-155[bohjd]
+eqnqthwn-gii-fgrctvogpv-908[ginqt]
+uiovmbqk-jcvvg-amzdqkma-356[mvakq]
+sbejpbdujwf-gmpxfs-pqfsbujpot-857[pbfjs]
+ide-htrgti-ytaanqtpc-stepgibtci-531[mnyed]
+aietsrmdih-glsgspexi-gywxsqiv-wivzmgi-230[igsem]
+htqtwkzq-xhfajsljw-mzsy-zxjw-yjxynsl-931[cmkfr]
+ckgvutofkj-xgjougizobk-yigbktmkx-natz-lotgtiotm-436[tgkoi]
+nwlddtqtpo-upwwjmply-fdpc-epdetyr-509[pdtwe]
+irdgrxzex-sleep-jyzggzex-373[tvnma]
+crwwv-zxkav-qoxfkfkd-939[lyjmh]
+ejpanjwpekjwh-nwzekwypera-oywrajcan-dqjp-nawymqeoepekj-368[zmuyt]
+lzfmdshb-rbzudmfdq-gtms-knfhrshbr-495[bdfhm]
+nchhg-rmttgjmiv-uizsmbqvo-252[mghit]
+amjmpdsj-aylbw-rpyglgle-626[lagjm]
+dfcxsqhwzs-pogysh-qighcasf-gsfjwqs-220[sfghq]
+xjgjmapg-nxvqzibzm-cpio-nojmvbz-707[jmzbg]
+zntargvp-enoovg-qrirybczrag-663[scjtg]
+bkzrrhehdc-qzaahs-qdzbpthrhshnm-391[zjbto]
+hafgnoyr-wryylorna-erprvivat-429[rayno]
+apwmeclga-afmamjyrc-rpyglgle-262[aglmc]
+jsvagsulanw-jsttal-hmjuzskafy-606[asjlt]
+bnknqetk-lhkhszqx-fqzcd-cxd-zmzkxrhr-651[kzhqx]
+ykhknbqh-nwxxep-nayaerejc-966[enahk]
+vrurcjah-pajmn-kdwwh-cajrwrwp-667[rwajc]
+vhehkyne-utldxm-vhgmtbgfxgm-891[ghmet]
+zotts-dyffsvyuh-xymcah-812[yfhst]
+vhglnfxk-zktwx-vtgwr-vnlmhfxk-lxkobvx-319[gvnom]
+ajvyjprwp-mhn-nwprwnnarwp-563[npwra]
+guahyncw-chnylhuncihuf-jfumncw-alumm-guleyncha-110[zjirh]
+hwdtljsnh-jll-xfqjx-801[jlhxd]
+xjgjmapg-mvwwdo-xjiovdihzio-525[ijodg]
+pybgmyargtc-zgmfyxypbmsq-zsllw-asqrmkcp-qcptgac-262[cgmpy]
+aflwjfslagfsd-hdsklau-yjskk-esfsywewfl-528[sflak]
+lugjuacha-dyffsvyuh-xypyfijgyhn-708[yfhua]
+lxaaxbren-mhn-cnlqwxuxph-823[nzsvm]
+sehheiylu-tou-cqdqwucudj-738[xciqn]
+slqryzjc-djmucp-qrmpyec-808[sznhq]
+ykjoqian-cnwza-bhksan-opknwca-264[ankco]
+pualyuhapvuhs-lnn-bzly-alzapun-721[auzfj]
+tfiifjzmv-wcfnvi-jkfirxv-997[fivjc]
+lsyrkjkbnyec-mkxni-mykdsxq-vyqscdsmc-562[ksycm]
+fnjyxwrinm-lujbbrornm-ajkkrc-nwprwnnarwp-927[zmyco]
+pyknyegle-amlqskcp-epybc-hcjjwzcyl-qcptgacq-860[cpyel]
+rzvkjiduzy-ezggtwzvi-kpmxcvndib-811[zivdg]
+wyvqljapsl-yhiipa-bzly-alzapun-773[alpyi]
+joufsobujpobm-dipdpmbuf-bdrvjtjujpo-415[gvkud]
+zloolpfsb-zxkav-zlxqfkd-lmboxqflkp-393[lfkox]
+zilqwikbqdm-jcvvg-kwvbiqvumvb-174[vbiqk]
+kzeed-wfggny-xmnuunsl-853[negud]
+ftzgxmbv-xzz-phkdlahi-657[grbhi]
+bnqqnrhud-bzmcx-sqzhmhmf-131[hmqbn]
+zntargvp-pnaql-pbngvat-nanylfvf-169[napvf]
+jxdkbqfz-pzxsbkdbo-erkq-absbilmjbkq-315[uzmcf]
+jshzzpmplk-buzahisl-kfl-klzpnu-695[lzkph]
+pualyuhapvuhs-msvdly-jbzavtly-zlycpjl-825[lyapu]
+lujbbrornm-ouxfna-xynajcrxwb-667[bnrxa]
+dmpuamofuhq-nmewqf-pqhqxabyqzf-482[lndmj]
+cvabijtm-moo-zmikycqaqbqwv-148[mqabc]
+wyvqljapsl-msvdly-zlycpjlz-435[lyjps]
+fmsledevhsyw-ikk-gywxsqiv-wivzmgi-204[isvwe]
+ide-htrgti-snt-sthxvc-297[tyvnc]
+guahyncw-luvvcn-qilembij-292[tcrsd]
+udskkaxawv-wyy-kwjnauwk-710[kwauy]
+aczupnetwp-clmmte-dezclrp-379[ynpmz]
+ikhcxvmbex-ietlmbv-zktll-vnlmhfxk-lxkobvx-449[lxkvb]
+rzvkjiduzy-xcjxjgvoz-rjmfncjk-707[tmnki]
+enzcntvat-cynfgvp-tenff-ynobengbel-923[neftb]
+vkrhzxgbv-bgmxkgtmbhgte-lvtoxgzxk-angm-kxtvjnblbmbhg-111[iwvbg]
+esyfwlau-tskcwl-jwsuimakalagf-398[ywmzb]
+lhkhszqx-fqzcd-bzmcx-nodqzshnmr-287[zhqcd]
+nzwzcqfw-ojp-dstaatyr-977[dsznk]
+qfkkj-xlrypetn-nlyoj-xlcvpetyr-691[lczde]
+wifilzof-luvvcn-nywbhifias-552[sxghy]
+nchhg-kivlg-zmamizkp-928[ghikm]
+tipfxvezt-tcrjjzwzvu-upv-kirzezex-295[zetvi]
+gsvvswmzi-tpewxmg-kveww-gsrxemrqirx-698[wegmr]
+pynffvsvrq-sybjre-ernpdhvfvgvba-663[epsqt]
+sedikcuh-whqtu-vbemuh-udwyduuhydw-894[udhwe]
+tmrszakd-bzmcx-rsnqzfd-183[zdmrs]
+zilqwikbqdm-jcvvg-wxmzibqwva-798[iqvwb]
+lejkrscv-jtrmvexvi-ylek-nfibjyfg-815[ejvfi]
+zsxyfgqj-jll-qtlnxynhx-151[lxjnq]
+gbc-frperg-onfxrg-qrirybczrag-923[rgbcf]
+xjgjmapg-kgvnodx-bmvnn-nvgzn-343[ngvjm]
+dmybmsuzs-ngzzk-mocgueufuaz-534[uzmgs]
+dmpuamofuhq-omzpk-oamfuzs-pqbxakyqzf-482[mafop]
+fbebmtkr-zktwx-unggr-ehzblmbvl-787[begkl]
+zntargvp-enoovg-ybtvfgvpf-481[vgfno]
+fubrjhqlf-gbh-vhuylfhv-933[hfblu]
+fruurvlyh-fdqgb-frdwlqj-whfkqrorjb-569[tmdlw]
+ixccb-udeelw-ghvljq-335[nibrq]
+tcorcikpi-dwppa-fgukip-570[qnzgc]
+ibghopzs-pibbm-rsdzcmasbh-428[bshim]
+apuut-wpiit-nzmqdxzn-889[inptu]
+qzoggwtwsr-pibbm-igsf-hsghwbu-246[gbswh]
+atyzghrk-yigbktmkx-natz-uvkxgzouty-488[pxeoy]
+mbiyqoxsm-mkxni-bokmaescsdsyx-796[erynw]
+qxdwpopgsdjh-uadltg-itrwcdadvn-401[mzukc]
+tinnm-rms-kcfygvcd-688[cmndf]
+crwwv-mixpqfz-doxpp-xkxivpfp-107[tpawu]
+qxdwpopgsdjh-qphzti-itrwcdadvn-999[lenub]
+jqwpihizlwca-lgm-abwziom-538[iwalm]
+votubcmf-dboez-dpbujoh-gjobodjoh-909[szlxy]
+nwzekwypera-oywrajcan-dqjp-iwjwcaiajp-446[awjpc]
+lxuxaodu-vrurcjah-pajmn-ljwmh-cnlqwxuxph-329[uxahj]
+gvaaz-ezf-efwfmpqnfou-779[scdpt]
+jsvagsulanw-hdsklau-yjskk-vwhdgqewfl-190[saklw]
+yrwxefpi-fewoix-irkmriivmrk-828[irefk]
+jrncbavmrq-rtt-fgbentr-819[rtbna]
+tpspahyf-nyhkl-msvdly-klwsvftlua-409[lsyaf]
+veqtekmrk-tpewxmg-kveww-qerekiqirx-100[szdiy]
+ykhknbqh-ydkykhwpa-hkceopeyo-108[khyeo]
+gifavtkzcv-treup-tfrkzex-dribvkzex-503[ekrtv]
+hafgnoyr-pubpbyngr-bcrengvbaf-351[bgnra]
+ide-htrgti-gpqqxi-gtprfjxhxixdc-999[ixgtd]
+yhtwhnpun-ipvohghykvbz-wshzapj-nyhzz-zavyhnl-617[hznyp]
+enqvbnpgvir-pynffvsvrq-rtt-erprvivat-559[vrnpt]
+jxdkbqfz-yrkkv-pxibp-159[kbpxd]
+etyyx-rbzudmfdq-gtms-rdquhbdr-833[drbmq]
+owshgfarwv-udskkaxawv-hdsklau-yjskk-ogjckzgh-398[kasgh]
+xst-wigvix-gerhc-irkmriivmrk-828[ilntc]
+ugfkmewj-yjsvw-wyy-klgjsyw-684[wyjgk]
+zloolpfsb-mixpqfz-doxpp-pbosfzbp-211[topig]
+fruurvlyh-vfdyhqjhu-kxqw-orjlvwlfv-569[vfhlr]
+xst-wigvix-fyrrc-vigimzmrk-516[irgmv]
+rnqnyfwd-lwfij-wfggny-wjxjfwhm-281[wfjng]
+rdchjbtg-vgpst-ytaanqtpc-sthxvc-557[tcagh]
+fubrjhqlf-fdqgb-frdwlqj-dftxlvlwlrq-465[flqdr]
+qlm-pbzobq-pzxsbkdbo-erkq-xznrfpfqflk-679[bqfkp]
+ltpedcxots-rpcsn-bpcpvtbtci-921[dtejs]
+froruixo-edvnhw-ghsorbphqw-231[horwb]
+bjfutsneji-hmthtqfyj-fsfqdxnx-333[fjthn]
+yhtwhnpun-lnn-zavyhnl-669[wpsgy]
+dmpuamofuhq-ngzzk-xmnadmfadk-742[madfk]
+ejpanjwpekjwh-ywjzu-oanreyao-498[yzjwm]
+eza-dpncpe-qwzhpc-afcnsldtyr-353[ivxnu]
+qekrixmg-nippcfier-gywxsqiv-wivzmgi-464[yxkwm]
+avw-zljyla-ibuuf-ylzlhyjo-383[lyaju]
+lqwhuqdwlrqdo-mhoobehdq-rshudwlrqv-621[qdhlo]
+qvbmzvibqwvit-jcvvg-apqxxqvo-200[vqbix]
+ugjjgkanw-esyfwlau-jsttal-ugflsafewfl-164[fgcep]
+shoewudys-isqludwuh-xkdj-ijehqwu-504[stjyd]
+luxciuwncpy-vohhs-yhachyylcha-214[hcyal]
+gifavtkzcv-sleep-ivjvrity-685[vieta]
+rzvkjiduzy-xviyt-yzqzgjkhzio-161[ziyjk]
+iehepwnu-cnwza-ykjoqian-cnwza-ywjzu-ykwpejc-iwjwcaiajp-316[wajci]
+sorozgxe-mxgjk-jek-vaxingyotm-956[goxej]
+dmpuamofuhq-dmnnuf-dqmocgueufuaz-560[umdfa]
+hjgbwuladw-kusnwfywj-zmfl-ugflsafewfl-450[aezbn]
+esyfwlau-usfvq-ugslafy-ghwjslagfk-294[fsagl]
+shmml-sybjre-erfrnepu-195[ngkjp]
+jlidywncfy-ohmnuvfy-wuhxs-wiuncha-ijyluncihm-240[xtjsm]
+ixeumktoi-lruckx-aykx-zkyzotm-436[kximo]
+nzydfxpc-rclop-upwwjmply-xlylrpxpye-535[plyxc]
+fodvvlilhg-sodvwlf-judvv-pdunhwlqj-725[krngz]
+xjmmjndqz-ezggtwzvi-adivixdib-733[idzgj]
+pbybeshy-pnaql-pbngvat-znantrzrag-533[anbpg]
+fnjyxwrinm-ljwmh-lxjcrwp-bqryyrwp-329[rwjyl]
+lhkhszqx-fqzcd-okzrshb-fqzrr-cdoknxldms-391[zdhkq]
+pynffvsvrq-ohaal-znantrzrag-637[anrfv]
+hafgnoyr-sybjre-genvavat-767[ngacu]
+lhkhszqx-fqzcd-bgnbnkzsd-lzmzfdldms-443[ynael]
+lugjuacha-wbiwifuny-mufym-786[uafim]
+vkrhzxgbv-xzz-ftgtzxfxgm-995[xzgft]
+uzfqdzmfuazmx-rxaiqd-emxqe-170[mqxza]
+ajvyjprwp-snuuhknjw-anlnrerwp-771[njprw]
+zuv-ykixkz-igtje-iugzotm-zxgototm-930[lifhb]
+mfklstdw-wyy-ksdwk-294[kwdsy]
+kyelcrga-slqryzjc-hcjjwzcyl-qrmpyec-990[kypqm]
+vkppo-sxesebqju-tulubefcudj-400[uebjp]
+ynukcajey-xqjju-lqnydwoejc-394[jycen]
+qzlozfhmf-qzchnzbshud-qzaahs-qdzbpthrhshnm-287[hzqsa]
+kmjezxodgz-mvwwdo-ncdkkdib-109[dkmow]
+oazegyqd-sdmpq-ngzzk-bgdotmeuzs-482[zdgem]
+qfkkj-mldvpe-cpdplcns-561[pcdkl]
+hvbizodx-ezggtwzvi-xjiovdihzio-577[voqzy]
+iuxxuyobk-inuiurgzk-xkikobotm-722[ikuox]
+jyddc-gsvvswmzi-jpsaiv-jmrergmrk-958[cpedy]
+vhkkhlbox-unggr-hixktmbhgl-449[hgkbl]
+clotzlnetgp-nsznzwlep-dpcgtnpd-145[tehzy]
+plolwdub-judgh-hjj-dqdobvlv-543[zkryh]
+ajmrxjlcren-ouxfna-ydalqjbrwp-355[ajrln]
+uqtqbizg-ozilm-lgm-amzdqkma-304[mqzag]
+lnkfaypeha-zua-lqnydwoejc-914[aelny]
+ibghopzs-pwcvonofrcig-qobrm-aobousasbh-844[obsac]
+ocipgvke-eqpuwogt-itcfg-tcddkv-gpikpggtkpi-804[salbg]
+ajmrxjlcren-lqxlxujcn-uxprbcrlb-823[lrxcj]
+rgndvtcxr-ytaanqtpc-sthxvc-843[tcanr]
+hqcfqwydw-sxesebqju-qdqboiyi-894[qbdei]
+tbxmlkfwba-gbiivybxk-qbzeklildv-757[biklv]
+vetllbybxw-utldxm-vhgmtbgfxgm-735[bglmt]
+mfklstdw-hdsklau-yjskk-vwhsjlewfl-528[xyuts]
+pxtihgbsxw-vtgwr-nlxk-mxlmbgz-657[xgblm]
+bnmrtldq-fqzcd-dff-lzqjdshmf-677[szdpt]
+xekdwvwnzkqo-sawlkjevaz-fahhuxawj-nayaerejc-654[zdeyh]
+gzefmnxq-bxmefuo-sdmee-xmnadmfadk-170[medfx]
+gpsxdprixkt-eaphixr-vgphh-rjhidbtg-htgkxrt-115[hgprt]
+eza-dpncpe-hplazytkpo-awldetn-rcldd-xlcvpetyr-535[tnpmg]
+bnmrtldq-fqzcd-eknvdq-sdbgmnknfx-781[dnqbf]
+nzcczdtgp-dnlgpyrpc-sfye-opgpwzaxpye-899[pcgyz]
+nwzekwypera-ydkykhwpa-odellejc-992[pwqrh]
+oknkvcta-itcfg-gii-wugt-vguvkpi-154[giktv]
+tcrjjzwzvu-upv-kvtyefcfxp-373[vcfjp]
+xst-wigvix-ikk-stivexmsrw-230[isxkt]
+fkqbokxqflkxi-zelzlixqb-qoxfkfkd-705[mntlq]
+qlm-pbzobq-yxphbq-zrpqljbo-pbosfzb-237[bpqoz]
+drxevkzt-avccpsvre-wzeretzex-269[ervzc]
+ksodcbwnsr-pogysh-oqeiwgwhwcb-480[mxdsl]
+tyepcyletzylw-qwzhpc-xlylrpxpye-613[tvcgy]
+rnqnyfwd-lwfij-hmthtqfyj-qtlnxynhx-437[ukdrt]
+oxjmxdfkd-jfifqxov-doxab-yxphbq-ixyloxqlov-393[xodfq]
+tcorcikpi-ejqeqncvg-fgrnqaogpv-804[cgqei]
+hqtyeqsjylu-zubboruqd-qsgkyiyjyed-712[yqubd]
+hvbizodx-ezggtwzvi-gjbdnodxn-967[dgzbi]
+zntargvp-enoovg-fgbentr-923[gneor]
+mvydjvxodqz-wvnfzo-hvmfzodib-447[zfpes]
+emixwvqhml-zijjqb-lmdmtwxumvb-148[mbijl]
+frqvxphu-judgh-gbh-whfkqrorjb-179[jwmgn]
+kyelcrga-njyqrga-epyqq-dglylagle-782[glyae]
+npmhcargjc-pyzzgr-bctcjmnkclr-522[crgjm]
+pxtihgbsxw-xzz-tvjnblbmbhg-943[bxght]
+oknkvcta-itcfg-hnqygt-qrgtcvkqpu-206[tcgkq]
+amlqskcp-epybc-zyqicr-sqcp-rcqrgle-522[bnemi]
+enqvbnpgvir-pnaql-fuvccvat-299[vnacp]
+xlrypetn-mldvpe-cpnptgtyr-509[nugrq]
+mbggf-qlssfilhu-klclsvwtlua-383[lsfgu]
+wlsiayhcw-wuhxs-wiuncha-mniluay-656[wahiu]
+gvaaz-cbtlfu-efqmpznfou-415[byzhx]
+rzvkjiduzy-nxvqzibzm-cpio-hvivbzhzio-343[zivbh]
+bqxnfdmhb-dff-otqbgzrhmf-781[fbdhm]
+wihmogyl-aluxy-wuhxs-wiuncha-lyuwkocmcncih-838[chuwi]
+enzcntvat-onfxrg-hfre-grfgvat-689[nkvyi]
+xgjougizobk-igtje-iugzotm-ygrky-540[giojk]
+mbggf-kfl-aljouvsvnf-773[fglva]
+qzoggwtwsr-xszzmpsob-sbuwbssfwbu-662[sbwzg]
+wsvsdkbi-qbkno-mkxni-mykdsxq-nofovyzwoxd-744[kodns]
+tpspahyf-nyhkl-lnn-klzpnu-721[nlphk]
+pejji-nio-bomosfsxq-380[oijsb]
+amlqskcp-epybc-cee-nspafyqgle-132[dsayt]
+luxciuwncpy-xsy-lyuwkocmcncih-240[cuyil]
+irdgrxzex-gcrjkzt-xirjj-vexzevvizex-165[xerzi]
+lxaaxbren-snuuhknjw-ujkxajcxah-381[axjnu]
+ktfitzbgz-ynssr-xzz-wxiehrfxgm-839[sjagq]
+hafgnoyr-enzcntvat-pnaql-pbngvat-genvavat-975[antvg]
+dfcxsqhwzs-qobrm-fsqswjwbu-896[sqwbf]
+zsxyfgqj-xhfajsljw-mzsy-xytwflj-619[jfsxy]
+yhwooebeaz-ywjzu-ykwpejc-hkceopeyo-706[eoywc]
+mvydjvxodqz-wpiit-kpmxcvndib-863[yrjnz]
+otzkxtgzoutgr-igtje-iugzotm-iutzgotsktz-332[tgzoi]
+pdjqhwlf-sodvwlf-judvv-vdohv-855[vdfhj]
+gpewwmjmih-fyrrc-gywxsqiv-wivzmgi-724[iwgmr]
+oqnidbshkd-idkkxadzm-rsnqzfd-391[lpscd]
+rgndvtcxr-hrpktcvtg-wjci-uxcpcrxcv-765[crtvx]
+esyfwlau-tmffq-xafsfuafy-970[fasuy]
+gvaaz-dipdpmbuf-efqbsunfou-545[zmynh]
+zsxyfgqj-wfggny-uzwhmfxnsl-463[cvqjn]
+oazegyqd-sdmpq-ngzzk-emxqe-430[flhis]
+jvuzbtly-nyhkl-zjhclunly-obua-zlycpjlz-643[ueimk]
+surmhfwloh-vfdyhqjhu-kxqw-ghsorbphqw-205[hqwfo]
+pualyuhapvuhs-zjhclunly-obua-thuhnltlua-825[ficqs]
+wbhsfbohwcboz-rms-oqeiwgwhwcb-194[wbhoc]
+gpsxdprixkt-ytaanqtpc-bpcpvtbtci-635[qkzhc]
+rnqnyfwd-lwfij-xhfajsljw-mzsy-qfgtwfytwd-931[fwjyd]
+ubhatstkwhnl-ktuubm-vnlmhfxk-lxkobvx-787[gtsqv]
+lqwhuqdwlrqdo-udeelw-dftxlvlwlrq-413[ldqwe]
+kloqemlib-lygbzq-pqloxdb-991[lbqod]
+veqtekmrk-tpewxmg-kveww-hiwmkr-282[ekwmr]
+rflsjynh-ytu-xjhwjy-jll-knsfshnsl-333[jlshn]
+bknsykmdsfo-pvygob-domrxyvyqi-432[yobdk]
+mybbycsfo-bkllsd-kxkvicsc-822[yzxcq]
+zixppfcfba-yxphbq-absbilmjbkq-991[gbhts]
+udskkaxawv-uzgugdslw-klgjsyw-684[gksuw]
+clxalrtyr-mfyyj-qtylyntyr-665[ylrta]
+uiovmbqk-jiasmb-lmaqov-694[mabio]
+xmtjbzidx-mvwwdo-zibdizzmdib-161[dizbm]
+wyvqljapsl-jovjvshal-bzly-alzapun-643[lajvp]
+zlilocri-zxkav-mrozexpfkd-445[rifng]
+pinovwgz-zbb-hvmfzodib-811[bziov]
+rtqlgevkng-dwppa-vgejpqnqia-284[gpqae]
+vrurcjah-pajmn-ljwmh-jlzdrbrcrxw-667[lmdrk]
+jlidywncfy-dyffsvyuh-ijyluncihm-838[yficd]
+cebwrpgvyr-sybjre-qrirybczrag-741[tsrqd]
+pbafhzre-tenqr-onfxrg-grpuabybtl-949[rbaef]
+lahxpnwrl-ljwmh-lxjcrwp-nwprwnnarwp-433[seonp]
+iuxxuyobk-igtje-iugzotm-iutzgotsktz-644[tiugo]
+qfkkj-prr-fdpc-epdetyr-951[prdef]
+nchhg-akidmvomz-pcvb-nqvivkqvo-954[osgtz]
+htwwtxnaj-gzssd-ijufwyrjsy-385[jswty]
+myxcewob-qbkno-mrymyvkdo-bokmaescsdsyx-328[sezot]
+rzvkjiduzy-mvwwdo-ncdkkdib-499[mfyze]
+emixwvqhml-lgm-uizsmbqvo-798[milqv]
+xmtjbzidx-wvnfzo-vivgtndn-941[nvdit]
+bknsykmdsfo-zvkcdsm-qbkcc-cobfsmoc-198[cksbm]
+gsrwyqiv-kvehi-fyrrc-jmrergmrk-906[regik]
+bqvvu-oywrajcan-dqjp-nawymqeoepekj-524[aejqn]
+upq-tfdsfu-sbccju-bobmztjt-883[btucf]
+surmhfwloh-fruurvlyh-mhoobehdq-orjlvwlfv-933[zymnj]
+wkqxodsm-tovvilokx-gybucryz-588[okvxy]
+nchhg-ntwemz-twoqabqka-902[ahnqt]
+iqmbazulqp-rgllk-rxaiqd-fqotzaxask-950[dtanc]
+ejpanjwpekjwh-nwxxep-bejwjyejc-732[jewpn]
+ajmrxjlcren-fnjyxwrinm-lqxlxujcn-vjwjpnvnwc-329[yhgwz]
+qcbgiasf-ufors-qvcqczohs-aofyshwbu-532[scfoq]
+jsehsyafy-vqw-ugflsafewfl-970[mfzcn]
+fab-eqodqf-qss-geqd-fqefuzs-560[qfesd]
+jef-iushuj-uww-sedjqydcudj-322[qyadz]
+kfg-jvtivk-jtrmvexvi-ylek-ivtvzmzex-347[wmlfu]
+pxtihgbsxw-ietlmbv-zktll-wxiehrfxgm-371[xiltb]
+wfintfhynaj-hmthtqfyj-jslnsjjwnsl-463[jnfhs]
+forwcoqhwjs-foppwh-kcfygvcd-480[cfowh]
+kzgwomvqk-rmttgjmiv-camz-bmabqvo-616[mvabg]
+pybgmyargtc-aylbw-amyrgle-nspafyqgle-392[yaglb]
+jyfvnlupj-ihzrla-lunpullypun-149[lytps]
+dpmpsgvm-cbtlfu-xpsltipq-467[plmst]
+oxaflxzqfsb-avb-zrpqljbo-pbosfzb-965[bfoza]
+amlqskcp-epybc-afmamjyrc-bctcjmnkclr-392[cmabj]
+encuukhkgf-tcddkv-yqtmujqr-362[kucdq]
+lqwhuqdwlrqdo-edvnhw-hqjlqhhulqj-595[sywmh]
+njmjubsz-hsbef-qspkfdujmf-cbtlfu-vtfs-uftujoh-857[fujsb]
+dsxxw-djmucp-umpiqfmn-340[mdpux]
+aflwjfslagfsd-hdsklau-yjskk-dstgjslgjq-736[sjlad]
+ynukcajey-ywjzu-iwjwcaiajp-758[sthmn]
+froruixo-lqwhuqdwlrqdo-fdqgb-uhdftxlvlwlrq-621[gtcry]
+chnylhuncihuf-jfumncw-alumm-mylpcwym-526[tyodr]
+ujoon-qphzti-uxcpcrxcv-817[copux]
+bkwzkqsxq-cmkfoxqob-rexd-ckvoc-666[kcoqx]
+pelbtravp-enqvbnpgvir-qlr-qrfvta-403[wqynx]
+yhtwhnpun-ibuuf-thuhnltlua-643[trfed]
+willimcpy-yaa-wihnuchgyhn-344[hiyac]
+thnulapj-jovjvshal-mpuhujpun-799[juhpa]
+nzcczdtgp-mldvpe-lnbftdtetzy-821[qvnmi]
+qzlozfhmf-idkkxadzm-btrsnldq-rdquhbd-209[dqzbf]
+ajvyjprwp-ouxfna-vjwjpnvnwc-407[jnpvw]
+hcd-gsqfsh-dzoghwq-ufogg-zcuwghwqg-688[nwgox]
+jrncbavmrq-qlr-genvavat-169[arvnq]
+crwwv-yrkkv-jxkxdbjbkq-653[ylpzs]
+pejji-tovvilokx-vyqscdsmc-146[vcijo]
+ikhcxvmbex-lvtoxgzxk-angm-inkvatlbgz-189[xgkva]
+jyddc-wgezirkiv-lyrx-xiglrspskc-620[ircdg]
+ajyqqgdgcb-aylbw-amyrgle-rpyglgle-210[glyab]
+mhi-lxvkxm-yehpxk-kxvxbobgz-319[lcest]
+rkpqxyib-gbiivybxk-lmboxqflkp-211[vustn]
+jchipqat-rdadguja-hrpktcvtg-wjci-tcvxcttgxcv-999[ctagj]
+ovbunmneqbhf-fpniratre-uhag-grpuabybtl-949[banru]
+nchhg-xtiabqk-oziaa-abwziom-174[aibho]
+dwbcjkun-ljwmh-ydalqjbrwp-303[jwbdl]
+lxuxaodu-krxqjijamxdb-bljenwpna-qdwc-bnaerlnb-563[ycjlt]
+yhkpvhjapcl-wshzapj-nyhzz-shivyhavyf-461[hyapv]
+udglrdfwlyh-mhoobehdq-wudlqlqj-959[dlhqo]
+myxcewob-qbkno-lsyrkjkbnyec-lexxi-cdybkqo-588[nfdem]
+fnjyxwrinm-ljwmh-lxwcjrwvnwc-459[wjncl]
+udpsdjlqj-udeelw-ghvljq-491[djleq]
+zloolpfsb-yrkkv-mrozexpfkd-783[koflp]
+drxevkzt-jtrmvexvi-ylek-ivrthlzjzkzfe-997[evzkr]
+ykjoqian-cnwza-ywjzu-ykwpejc-opknwca-264[wacjk]
+xekdwvwnzkqo-zua-zalwnpiajp-992[awzkn]
+fydelmwp-aczupnetwp-prr-cplnbftdtetzy-847[ptecd]
+lxwbdvna-pajmn-ouxfna-anjlzdrbrcrxw-563[anrxb]
+xfbqpojafe-gmpxfs-tbmft-545[rgdzm]
+kzeed-ojqqdgjfs-ijuqtdrjsy-411[jdqes]
+ktiaaqnqml-ntwemz-uizsmbqvo-642[azvew]
+udpsdjlqj-gbh-whfkqrorjb-725[rnqmt]
+lahxpnwrl-ouxfna-ydalqjbrwp-745[alnpr]
+dsxxw-bwc-mncpyrgmlq-548[cmwxb]
+joufsobujpobm-gvaaz-qmbtujd-hsbtt-fohjoffsjoh-727[ojbfh]
+laffe-jek-ynovvotm-670[efova]
+nzcczdtgp-ojp-xlcvpetyr-353[nvmak]
+kgjgrypw-epybc-djmucp-qyjcq-496[sqhmg]
+ykjoqian-cnwza-ywjzu-klanwpekjo-680[ajknw]
+nbhofujd-dipdpmbuf-efqbsunfou-415[fubdn]
+oaddaeuhq-ngzzk-fqotzaxask-144[hbxcm]
+lujbbrornm-vjpwncrl-snuuhknjw-ldbcxvna-bnaerln-459[nblrj]
+xgvnndadzy-wvnfzo-yzkvmohzio-135[znovd]
+jchipqat-tvv-jhtg-ithixcv-271[ymstr]
+xtwtelcj-rclop-nlyoj-dstaatyr-431[ntags]
+iutyaskx-mxgjk-jek-xkykgxin-618[kxgij]
+pxtihgbsxw-ktwbhtvmbox-cxeeruxtg-tgterlbl-943[txbeg]
+xfbqpojafe-dboez-dpbujoh-mbcpsbupsz-441[bpode]
+qfkkj-mfyyj-opalcexpye-613[yefjk]
+ejpanjwpekjwh-lhwopey-cnwoo-nawymqeoepekj-836[ewjop]
+qjopwxha-xqjju-odellejc-732[jeloq]
+bnknqetk-atmmx-lzmzfdldms-261[mdkln]
+xgsvgmotm-pkrrehkgt-sgtgmksktz-332[gktms]
+ryexqpqhteki-vbemuh-huqsgkyiyjyed-244[tjsqx]
+xjinphzm-bmvyz-ytz-yzkvmohzio-239[oznyv]
+eqttqukxg-rncuvke-itcuu-cpcnauku-180[jztvf]
+xgjougizobk-xghhoz-ygrky-696[gohkx]
+mtzslklcozfd-nsznzwlep-opgpwzaxpye-769[zplen]
+kgjgrypw-epybc-pyzzgr-jmegqrgaq-626[gprye]
+jlidywncfy-wbiwifuny-mniluay-396[iynwf]
+myvybpev-mkxni-mykdsxq-psxkxmsxq-536[rxnml]
+ibghopzs-qobrm-rsdzcmasbh-246[bshmo]
+jyfvnlupj-wshzapj-nyhzz-klwsvftlua-201[jlzaf]
+dzczkrip-xiruv-avccpsvre-cfxzjkztj-113[czrvi]
+dmbttjgjfe-dboez-dpbujoh-nbslfujoh-493[bjdoe]
+kfg-jvtivk-gifavtkzcv-srjbvk-jvimztvj-347[aymns]
+ktwbhtvmbox-vetllbybxw-ietlmbv-zktll-wxlbzg-241[bltvw]
+tmrszakd-cxd-qdrdzqbg-417[dqrza]
+nzydfxpc-rclop-nsznzwlep-nfdezxpc-dpcgtnp-899[ynbfk]
+fruurvlyh-mhoobehdq-rshudwlrqv-491[hrudl]
+odkasqzuo-pkq-emxqe-144[qekoa]
+hwbba-dcumgv-vtckpkpi-180[bckpv]
+lsyrkjkbnyec-cmkfoxqob-rexd-wkbuodsxq-718[yfzcq]
+xgvnndadzy-kgvnodx-bmvnn-xjiovdihzio-395[ndvio]
+willimcpy-vumeyn-omyl-nymncha-890[nmyux]
+mbggf-zjhclunly-obua-yljlpcpun-487[lubcg]
+ryexqpqhteki-sqdto-tuiywd-608[xhjzp]
+egdytrixat-gpqqxi-prfjxhxixdc-193[xidgp]
+nbhofujd-dszphfojd-cbtlfu-sftfbsdi-909[fdbsh]
+rflsjynh-gfxpjy-htsyfnsrjsy-489[istpm]
+vkrhzxgbv-vetllbybxw-ietlmbv-zktll-phkdlahi-189[lbvhk]
+lujbbrornm-ouxfna-uxprbcrlb-459[ozvca]
+pbafhzre-tenqr-fpniratre-uhag-erprvivat-117[raept]
+xgvnndadzy-xjmmjndqz-ytz-nvgzn-577[nzdgj]
+houngfgxjuay-pkrrehkgt-jkyomt-618[dltyf]
+bjfutsneji-hmthtqfyj-jslnsjjwnsl-411[jsntf]
+sgmtkzoi-lruckx-rghuxgzuxe-774[guxkr]
+nuatmlmdpage-nmewqf-abqdmfuaze-326[zbewa]
+dsxxw-zsllw-qyjcq-912[lqswx]
+cvabijtm-kivlg-kwibqvo-aitma-226[mvuhw]
+yuxufmdk-sdmpq-qss-bgdotmeuzs-768[sdmuq]
+qspkfdujmf-fhh-usbjojoh-597[elvgu]
+htqtwkzq-gfxpjy-hzxytrjw-xjwanhj-359[jpytc]
+gbc-frperg-pnaql-pbngvat-grpuabybtl-169[bgpar]
+yhkpvhjapcl-qlssfilhu-klclsvwtlua-123[lhsac]
+nglmtuex-vtgwr-vhtmbgz-ftkdxmbgz-813[emnca]
+atyzghrk-lruckx-ygrky-592[kryga]
+dkqjcbctfqwu-tcddkv-tgegkxkpi-362[kcdtg]
+sawlkjevaz-bhksan-lqnydwoejc-914[aejkl]
+kdijqrbu-uww-ijehqwu-712[uwijq]
+rwcnawjcrxwju-snuuhknjw-mnbrpw-121[wnjru]
+vrurcjah-pajmn-mhn-bcxajpn-225[ajnch]
+clotzlnetgp-mldvpe-cpdplcns-353[lpcde]
+wihmogyl-aluxy-dyffsvyuh-womnigyl-mylpcwy-682[khzto]
+qcbgiasf-ufors-dzoghwq-ufogg-kcfygvcd-428[mselb]
+kwtwznct-ktiaaqnqml-akidmvomz-pcvb-bmkpvwtwog-824[kmtwa]
+crwwv-oxyyfq-pqloxdb-289[oqwxy]
+iutyaskx-mxgjk-ckgvutofkj-lruckx-jkvgxzsktz-852[kxgjt]
+irgyyolokj-yigbktmkx-natz-giwaoyozout-930[oygik]
+yhtwhnpun-buzahisl-jhukf-jvhapun-mpuhujpun-565[uhnpj]
+fbebmtkr-zktwx-ktuubm-ybgtgvbgz-761[ifsyt]
+lejkrscv-avccpsvre-dribvkzex-165[vcerk]
+avw-zljyla-yhiipa-jvuahputlua-617[aluhi]
+xjmmjndqz-wpiit-xjiovdihzio-889[ijdmo]
+pbybeshy-fpniratre-uhag-jbexfubc-819[snuje]
+ktwbhtvmbox-vtgwr-phkdlahi-683[htbkv]
+avw-zljyla-wshzapj-nyhzz-ylzlhyjo-409[zlyah]
+tcrjjzwzvu-treup-tfrkzex-drerxvdvek-633[retvz]
+zlkprjbo-doxab-ciltbo-qoxfkfkd-627[nmwxj]
+vkrhzxgbv-lvtoxgzxk-angm-labiibgz-995[gbvxz]
+gpbepvxcv-hrpktcvtg-wjci-sthxvc-609[cvptg]
+hwbba-gii-fgrctvogpv-804[gbiva]
+nwlddtqtpo-nsznzwlep-dstaatyr-275[tdnal]
+ovbunmneqbhf-fpniratre-uhag-hfre-grfgvat-637[fraeg]
+pkl-oaynap-fahhuxawj-nayaerejc-888[mnchz]
+etaqigpke-hnqygt-qrgtcvkqpu-752[antmz]
+lugjuacha-wuhxs-ijyluncihm-214[hfsun]
+zloolpfsb-zxkav-abpfdk-341[abfkl]
+bknsykmdsfo-mkxni-mykdsxq-bokmaescsdsyx-822[skmdx]
+xjgjmapg-zbb-hvivbzhzio-499[bzghi]
+amjmpdsj-ajyqqgdgcb-qaytclecp-fslr-qrmpyec-652[smgnt]
+qczcftiz-dzoghwq-ufogg-rsgwub-714[gzcfo]
+gokzyxsjon-wsvsdkbi-qbkno-nio-myxdksxwoxd-900[oksxd]
+ktfitzbgz-vtgwr-vhtmbgz-lxkobvxl-969[tbgvz]
+hqtyeqsjylu-uww-efuhqjyedi-270[dytgj]
+ovbunmneqbhf-pnaql-pbngvat-freivprf-845[nbfpv]
+kzgwomvqk-akidmvomz-pcvb-aitma-902[makvi]
+sedikcuh-whqtu-zubboruqd-bqrehqjeho-790[hqube]
+kwvacumz-ozilm-jcvvg-lmaqov-382[vmacl]
+rgndvtcxr-qjccn-prfjxhxixdc-661[cxrdj]
+tbxmlkfwba-oxyyfq-tlohpelm-523[uhvaf]
+iuxxuyobk-inuiurgzk-vaxingyotm-514[iuxgk]
+odkasqzuo-omzpk-oamfuzs-ymzmsqyqzf-170[zmoqs]
+ktwbhtvmbox-unggr-lxkobvxl-527[bxgkl]
+ynssr-vtgwr-mxvaghehzr-423[rghsv]
+sgmtkzoi-kmm-lotgtiotm-670[mtogi]
+ugdgjxmd-vqw-kwjnauwk-944[wdgjk]
+rdggdhxkt-jchipqat-snt-gthtpgrw-713[tghdp]
+zvyvgnel-tenqr-wryylorna-npdhvfvgvba-663[vnrya]
+jsvagsulanw-usfvq-ugslafy-esjcwlafy-762[fygle]
+zsxyfgqj-wfggny-hzxytrjw-xjwanhj-931[jgwxy]
+wkqxodsm-tovvilokx-dbksxsxq-822[cpsgv]
+mbiyqoxsm-tovvilokx-yzobkdsyxc-458[oxybi]
+lzfmdshb-bzmcx-bnzshmf-vnqjrgno-261[ujfyc]
+oknkvcta-itcfg-dcumgv-hkpcpekpi-258[ckpgi]
+iuxxuyobk-inuiurgzk-sgtgmksktz-202[ztjvk]
+hjgbwuladw-hdsklau-yjskk-ljsafafy-372[mvkts]
+rdadguja-eaphixr-vgphh-tcvxcttgxcv-739[acght]
+nsyjwsfyntsfq-idj-xmnuunsl-983[nsfju]
+gifavtkzcv-wcfnvi-rthlzjzkzfe-971[zfvci]
+qvbmzvibqwvit-jiasmb-zmamizkp-278[imbvz]
+houngfgxjuay-ckgvutofkj-yigbktmkx-natz-ykxboiky-930[kgyot]
+guahyncw-wuhxs-lyuwkocmcncih-500[chuwn]
+gpbepvxcv-ytaanqtpc-bpgztixcv-479[pctva]
+ksodcbwnsr-pogysh-gsfjwqsg-584[sgowb]
+dmybmsuzs-pkq-mzmxkeue-612[meksu]
+xmtjbzidx-xviyt-vxlpdndodji-577[dxijt]
+dpmpsgvm-kfmmzcfbo-bobmztjt-701[mbfop]
+oxjmxdfkd-pzxsbkdbo-erkq-xznrfpfqflk-627[jhlvw]
+npmhcargjc-aylbw-amyrgle-pcacgtgle-652[acgle]
+votubcmf-fhh-tfswjdft-701[fthbc]
+gzefmnxq-dmnnuf-geqd-fqefuzs-482[fenqd]
+dmpuamofuhq-oazegyqd-sdmpq-eomhqzsqd-tgzf-emxqe-378[mctsn]
+gzefmnxq-dmnnuf-etubbuzs-508[nubef]
+bwx-amkzmb-ntwemz-ivitgaqa-902[noeig]
+rdchjbtg-vgpst-qphzti-pcpanhxh-635[hptcg]
+qzchnzbshud-atmmx-sqzhmhmf-131[hmzqs]
+tipfxvezt-treup-tfrkzex-cfxzjkztj-633[tzefx]
+mvhkvbdib-wpiit-vivgtndn-603[ivbdn]
+hqfxxnknji-ojqqdgjfs-htsyfnsrjsy-957[bdtai]
+clxalrtyr-clmmte-dezclrp-275[lcrem]
+fubrjhqlf-udpsdjlqj-udeelw-ghyhorsphqw-387[hdjlq]
+qzoggwtwsr-dzoghwq-ufogg-hsqvbczcum-792[goqwz]
+nvrgfezqvu-sleep-ivtvzmzex-113[evzfg]
+fruurvlyh-iorzhu-orjlvwlfv-881[jcdtf]
+myxcewob-qbkno-mkxni-mykdsxq-nozvyiwoxd-900[oxkmn]
+wyvqljapsl-jhukf-jvhapun-aljouvsvnf-955[jvalu]
+tpspahyf-nyhkl-jhukf-zhslz-643[pytob]
+kgjgrypw-epybc-rmn-qcapcr-qaytclecp-fslr-nspafyqgle-938[mxunk]
+yknnkoera-zua-klanwpekjo-446[dphwe]
+kzgwomvqk-xtiabqk-oziaa-bziqvqvo-278[qaiko]
+iruzfrtkzmv-wcfnvi-rercpjzj-555[rzcfi]
+diozmivodjivg-apuut-nxvqzibzm-cpio-yzkvmohzio-447[iozvm]
+fydelmwp-ojp-nzyeltyxpye-405[nyzmg]
+ktiaaqnqml-ziuxioqvo-kivlg-kwibqvo-zmikycqaqbqwv-564[qikva]
+xst-wigvix-ikk-vieguymwmxmsr-724[imxgk]
+jfifqxov-doxab-ciltbo-jxohbqfkd-965[obfxd]
+rdggdhxkt-hrpktcvtg-wjci-rdcipxcbtci-531[ctdgi]
+awzwhofm-ufors-qobrm-qcohwbu-oqeiwgwhwcb-896[mkvzu]
+vagreangvbany-fpniratre-uhag-qrcnegzrag-689[xfuaz]
+vjpwncrl-lqxlxujcn-jlzdrbrcrxw-693[lrcjx]
+ibghopzs-dzoghwq-ufogg-rsdzcmasbh-948[ghosz]
+ynssr-vhglnfxk-zktwx-ietlmbv-zktll-phkdlahi-917[lkhti]
+tfcfiwlc-treup-tfrkzex-dribvkzex-685[efrtc]
+frqvxphu-judgh-fkrfrodwh-hqjlqhhulqj-803[wjnmk]
+vhkkhlbox-xzz-kxtvjnblbmbhg-631[bhkxl]
+ltpedcxots-snt-stepgibtci-297[tscei]
+nzwzcqfw-nlyoj-xlylrpxpye-275[lynpw]
+ejpanjwpekjwh-nwilwcejc-zua-hkceopeyo-498[ypoze]
+sno-rdbqds-azrjds-rghoohmf-859[dorsh]
+qzoggwtwsr-suu-qcbhowbasbh-480[bswgh]
+gvcskirmg-ikk-gywxsqiv-wivzmgi-698[rmvil]
+ktwbhtvmbox-ftzgxmbv-vtgwr-ftkdxmbgz-163[tbgmv]
+oxmeeuruqp-omzpk-oamfuzs-efadmsq-716[meoua]
+xjinphzm-bmvyz-hvbizodx-xviyt-xjvodib-ozxcijgjbt-343[ixbjv]
+jyfvnlupj-ibuuf-svnpzapjz-851[gmsnf]
diff --git a/2016/aoc4/src/main.rs b/2016/aoc4/src/main.rs
new file mode 100644
index 0000000..ea1edd8
--- /dev/null
+++ b/2016/aoc4/src/main.rs
@@ -0,0 +1,83 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::collections::BTreeMap;
+
+#[derive(Debug)]
+struct Room {
+ encrypted_name: String,
+ sector_id: u32,
+ checksum: String
+}
+
+impl Room {
+ fn new(line: String) -> Room {
+ let name_length = line.find(char::is_numeric).unwrap();
+ let (name, sector_and_check) = line.split_at(name_length);
+ let (sector, check) = sector_and_check.split_at(sector_and_check.len()-7);
+
+ Room {
+ encrypted_name: name.trim_matches('-').to_string(),
+ sector_id: sector.parse().unwrap(),
+ checksum: check.trim_matches(|c| c=='[' || c==']').to_string()
+ }
+ }
+
+ fn is_valid(&self) -> bool {
+ let mut char_counts: BTreeMap<char, i32> = BTreeMap::new();
+ let chars = self.encrypted_name.chars()
+ .filter(|&c| c != '-');
+ for c in chars {
+ *char_counts.entry(c).or_insert(0) += 1;
+ }
+
+ let mut vec_char_counts = char_counts.iter().collect::<Vec<_>>();
+ vec_char_counts.sort_by_key(|&(_, &value)| -value);
+ let expected_checksum = vec_char_counts
+ .iter()
+ .take(5)
+ .map(|&(&key, _)| key)
+ .collect::<String>();
+
+ expected_checksum == self.checksum
+ }
+
+ fn decrypt_name(&self) -> String {
+ self.encrypted_name.chars().map(|c| {
+ if c == '-' {
+ ' '
+ } else {
+ let current_digit = c as u8 - 'a' as u8;
+ let new_digit = ((current_digit as u32 + self.sector_id) % 26) as u8;
+ (new_digit + 'a' as u8) as char
+ }
+ }).collect()
+ }
+}
+
+fn main() {
+ let rooms = read_file();
+ let valid_rooms = rooms.iter()
+ .filter(|r| r.is_valid())
+ .collect::<Vec<_>>();
+ let sector_sum: u32 = valid_rooms.iter()
+ .map(|r| r.sector_id)
+ .sum();
+
+ println!("Sector sum {}", sector_sum);
+
+ let north_poles = rooms.iter()
+ .filter(|r| r.decrypt_name().contains("north"))
+ .inspect(|r| println!("{} {}", r.decrypt_name(), r.sector_id))
+ .collect::<Vec<_>>();
+ println!("{:?}", north_poles);
+}
+
+fn read_file() -> Vec<Room> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .map(Room::new)
+ .collect()
+}
diff --git a/2016/aoc5/Cargo.lock b/2016/aoc5/Cargo.lock
new file mode 100644
index 0000000..6d0e69c
--- /dev/null
+++ b/2016/aoc5/Cargo.lock
@@ -0,0 +1,12 @@
+[root]
+name = "aoc5"
+version = "0.1.0"
+dependencies = [
+ "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "md5"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
diff --git a/2016/aoc5/Cargo.toml b/2016/aoc5/Cargo.toml
new file mode 100644
index 0000000..cc09c3c
--- /dev/null
+++ b/2016/aoc5/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc5"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+md5 = "^0.2" \ No newline at end of file
diff --git a/2016/aoc5/src/main.rs b/2016/aoc5/src/main.rs
new file mode 100644
index 0000000..31bef5e
--- /dev/null
+++ b/2016/aoc5/src/main.rs
@@ -0,0 +1,49 @@
+extern crate md5;
+
+fn main() {
+ let room = "reyedfim";
+
+ let mut i = 0;
+ let mut found_bytes = 0;
+
+ let mut code: [Option<u8>; 8] = [None;8];
+
+ println!("Cracking the passwordz");
+ print_code(&code);
+
+ while found_bytes < 8 {
+ let room_string = format!("{}{}", room, i);
+ let room_bytes = room_string.into_bytes();
+ let hash = md5::compute(room_bytes.as_slice());
+ if match_hash(hash) {
+ let position = hash[2];
+ let value = hash[3] / 16;
+ if code[position as usize].is_none() {
+ code[position as usize] = Some(value);
+ print_code(&code);
+ found_bytes += 1;
+ }
+ }
+
+ i+=1;
+ }
+
+ println!("Password found!");
+}
+
+fn match_hash(hash: [u8; 16]) -> bool {
+ hash[0] == 0 &&
+ hash[1] == 0 &&
+ hash[2] < 8
+}
+
+fn print_code(code: &[Option<u8>; 8]) {
+ println!("");
+ for &byte in code.iter() {
+ match byte {
+ None => {print!("-");},
+ Some(x) => {print!("{:x}", x);}
+ }
+ }
+ println!("");
+}
diff --git a/2016/aoc6/Cargo.lock b/2016/aoc6/Cargo.lock
new file mode 100644
index 0000000..f61aebf
--- /dev/null
+++ b/2016/aoc6/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc6"
+version = "0.1.0"
+
diff --git a/2016/aoc6/Cargo.toml b/2016/aoc6/Cargo.toml
new file mode 100644
index 0000000..22fc24a
--- /dev/null
+++ b/2016/aoc6/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc6"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
diff --git a/2016/aoc6/input.txt b/2016/aoc6/input.txt
new file mode 100644
index 0000000..6caf81a
--- /dev/null
+++ b/2016/aoc6/input.txt
@@ -0,0 +1,624 @@
+iyeajeby
+qengiuoe
+wxzardgo
+jciguemn
+zcampkps
+kiqjpjqb
+knwhoxlw
+iaxxpjhe
+kgrgaixi
+lciydajs
+svugtdwe
+nwailbqu
+cbkwwxvt
+lqjyrawh
+jylmtlzk
+firecpyg
+xegtcvvx
+jllqqzeq
+hggmnxlc
+pdmfuqlx
+hnbksbkl
+pmjmiqti
+gpmuvcsh
+tspnxvnm
+hghwizhe
+sgokeybb
+jtphckcv
+usypmmzq
+irlfaboj
+prgiqvil
+nfqegpjd
+aivwwkix
+xeljyzjv
+mrdpqlzc
+metcvpvd
+ifizfkgl
+uznvqiqw
+uzylkeui
+obmqhlan
+vaoivkeq
+wvlbwfaf
+ntbgtbpz
+lbuieiea
+rljyfeop
+rynkdwiq
+hyqpjwzl
+supxlsql
+bntmjboc
+qntfhain
+xxtjctjz
+qppakrbj
+ptnnwmlg
+pucuqrpi
+ensluhxm
+wtnabsej
+hvnozkvx
+dhxgysdk
+qdizyrkg
+vtuyxjky
+lxwcyfxr
+xoyphxmb
+ltylucct
+oaawvjfa
+qbjmdcap
+raqhkkbe
+uqtxpvhj
+pddzoucq
+axfbgpvj
+eohksqcm
+jtmmkovb
+paronxgv
+gtxnqybz
+qfsobvxz
+ywrnogwz
+ytdvpmzv
+daeappko
+zgjdatzf
+psrfofvi
+uobknckb
+rvndwdgs
+oedojfqv
+shxmutcm
+nigdxgrz
+ngwvdair
+wexxkvwn
+oqmrjlcr
+vcbmxvyb
+ekdfdzch
+klphcryl
+bbtobqqo
+wupuvqio
+hwiufjpk
+rckjewzp
+vhgzdtil
+qrvqytfe
+opolrgwi
+nektqhbg
+ynubobwy
+cqnysvzf
+muqrlihy
+ncbeeuur
+hxsvpoug
+kacsofnk
+vztkoicu
+smxiuykn
+sgnmdqmw
+sfsxxnds
+iwquujxr
+fwssfvfw
+qyoswzsm
+kvfvizgu
+fmewmudq
+mvtekgjn
+kkffshrt
+jzbkyxzf
+beszoylz
+lnhmbwae
+tijfkcrt
+culovluh
+jrgtbxma
+yqtlarnm
+rdlxlplt
+vzgphnpi
+igpbfrrd
+yqdgvyke
+juhzerjo
+kfwlvhag
+ysznuuey
+turxgyik
+iqgcxxpa
+tjrmtkjk
+ywfcwvqp
+ozmguljj
+maxegnqi
+vavydxwd
+dhlckjra
+omvdoafe
+rvzejiol
+rsnpjser
+nejognkt
+agkavzki
+uzskztny
+knvzbkff
+iiuhrzsp
+amxryjhv
+yqxdgdaj
+tpvellfc
+dqutbibf
+fbbrpcbg
+shxlcvmc
+ociooedg
+nedlhmfo
+ohdxifnx
+mqhbpyed
+tauomzjy
+bkooiesi
+xtukgdec
+mygazipf
+wkvecylo
+tlejwzcj
+rcpygkbi
+uihidqdr
+lxwthely
+ywyoahob
+zwjrveex
+eqahofbx
+mvipdaql
+zccdioga
+gttnacns
+urajevul
+uhsdjkhm
+cjbpznua
+tyfvodhw
+feadmwyl
+cjmccfcy
+uawxsuyy
+xzzidfrj
+slhgapvb
+tbdwntwx
+bvspfozq
+pkkwgooy
+frnhifax
+sxfkbojn
+ffnzlqda
+pbtbewtm
+mivpqcyc
+gztezasy
+jlfdrmou
+xjmazeef
+lgcaevtl
+piidoxbi
+iczlosyt
+egszahwu
+cmbybzvi
+orczduhd
+hzorfhdv
+yptggtmu
+yfsmednv
+ajawzgpp
+niicgavl
+mmdpsogr
+wkufsuct
+yboinvnc
+lmwbrqmb
+rrsfhics
+xguvmcmi
+yldifule
+laycxgaf
+jtnizmxf
+qrbpqznc
+cpplgbsm
+xzkwttnj
+axjxusuh
+nthcjcqn
+zjkdjlcz
+uulqjmfq
+djqlzrcb
+ftxhzuoq
+bfrzrdtn
+fvovpzts
+tloyyqoa
+spupkgwb
+ishhbwok
+spyfzbsj
+bvvnfnxx
+iuectyxc
+xbbjridq
+drzfvsrw
+gokuvwjf
+hhkmgqxf
+epijynaj
+bfxdnibq
+pjoovmhf
+izbgldjr
+rvxrhjxa
+blhhorwy
+xwmobyph
+pfoimsbl
+gprwonid
+hfwmazfu
+dudhehvt
+nbekhgbg
+qbwklpvg
+yemjyobm
+vmocaztb
+xkwklord
+tjooucsf
+qowresxh
+cxeapuvv
+zmlzqivx
+fryanflf
+kxcrserx
+jtoqtooo
+axrtkjyo
+fwwzdsbx
+pyphszfp
+ekdcnrgx
+zyrhxcvc
+blcqplmo
+wnsiistm
+slavtfip
+sixawglm
+sxpjnpsa
+sfwmudzt
+kcpetkcw
+iqfufsws
+wdfbgvol
+muvtnxzg
+otgycshn
+gddbabma
+swksjxjx
+hnfcsnir
+tmcnycfi
+lpvuwehn
+htyogany
+rggezmhh
+guzhwmss
+zoqiscdy
+dqbtvyrb
+wfnymsai
+klfpdgvn
+ihqjdope
+dudllmty
+gpbkmwtd
+tjmtvjpk
+sjnkfrsk
+bgruelqs
+repdjhre
+flxjlvah
+lkpnbajp
+rmkqdjpx
+enimddcn
+nzowveei
+cohzzkee
+sxfvyqwi
+vlztaixp
+xgkrlsyh
+eaurshic
+kifvzhsv
+dxfsexup
+fyqqbzgm
+bnxsgjxg
+ndbbkscp
+xyjhzqel
+eyanetmo
+quakpmsr
+kqfeprrb
+hhsvwyse
+jjvjivng
+zkeiinwn
+adibxest
+zjzrkmxr
+kceozeud
+iknfusda
+gqmuepbo
+ccwltods
+smaurfwy
+yojrrudk
+akygvwyf
+dermnpvn
+bvfvjskb
+pcohqoyu
+odyqfyhy
+nqgepwqo
+zijtbqgd
+czfgqsmr
+fkgeoorf
+udvncboo
+dwxgrgck
+vqhthccp
+gvkfkpwr
+pquhsiha
+hlpqfrpz
+aeirprab
+bouoglph
+zwyimnhu
+zpculwdn
+mokpnpeq
+hfgfjamc
+osgncdnf
+ejfjqwql
+tovcchzu
+wwmburym
+mdonvwnw
+wxjysrlt
+cjrqrnqv
+okzeilge
+egunoujn
+dlbaqemd
+qrdyabya
+vaaxguwe
+hjqwytxz
+xtvmgdaq
+noijjgft
+xgysigmw
+urbsmwdk
+bjnerghw
+aspvghjp
+hgciumho
+ivjihqed
+wtvkobuw
+zhtyhllg
+jlxjwjui
+xkmxhoek
+rydzmqip
+ydonbzvk
+byeoptyo
+gpnnqxrb
+hyzplaie
+tbedyaph
+zgqhqnmg
+tdepvaex
+wytwmgkr
+qsmuyzys
+fijlauqj
+wyqylgam
+lbwxnluj
+nmecxavu
+ofktnhfb
+lhjgzkjr
+ucctfetk
+mggvgkmu
+yzmnbbhe
+kcnqhuam
+rxiwfblx
+vfufzjou
+cpynrovg
+qdwshnpi
+pcrxywto
+ozhzwpwa
+zroxmvfr
+fpipfjvu
+leyiafxs
+oacgxszs
+voebeyvn
+ixkqabkl
+lqabfhtd
+oewbtlgc
+vdlaniii
+tabtkolp
+xufkdmem
+niofeqxn
+innfbedm
+zahlnzhd
+whmqyffv
+fhjascxd
+wnsktsdi
+ucdgnvkf
+fmpxuyml
+pnvuhmup
+wohfuyto
+wthjmlzx
+tkcdmttv
+ubyrests
+mkrplnes
+mglepvyl
+shqafjly
+gbpaitlu
+cesjmugk
+qnqmvnks
+kbvvlltq
+luvgtdmv
+rrrhawdz
+dthrxkth
+bglwrdgk
+apqxickb
+vnzwzjba
+reiafjdt
+qfcunhks
+dwmhshtd
+rwtwnxxu
+gjgdhwtr
+dhrwidzp
+manohccv
+jvccmlat
+txhfklix
+nczocnew
+gxlpkgqr
+vsrtxogh
+ixhtcwaz
+qfapctcq
+glvtpiug
+jnuecngg
+bktbndyg
+ceboexzj
+lsjakjjw
+oemmiqvu
+zqscwlay
+hqedlpzb
+hsrztfxj
+fjpwidgw
+abrsenrv
+qseoiuyj
+jtjtqxgr
+esczykzc
+mazmziim
+szzwzfuq
+zbcfhaiz
+uqsnjwus
+vwzqohsu
+yylbjhnl
+chqdcblk
+vporypnv
+vfhdofdx
+eztmaogh
+wlzjsgbw
+dqutunrc
+gwtpdvpm
+ywxghnkc
+alacomlw
+jfuygdcy
+zkoeauig
+abufqquo
+ncilvdgq
+guinnabe
+pdwybure
+jocsrmfp
+acwncthl
+cdnaffnn
+zyqbszzz
+azhxybig
+hibjuhsw
+tvckjxuf
+vklsqbos
+efzukhlt
+kjaqqofz
+esxcyrxt
+yocrwucn
+iodafafm
+oiakmvtb
+dmbgtcpj
+qnzrryot
+ufcbptbz
+veprgqre
+umsltfes
+bvvqhcmz
+rucsowjt
+kkbgkrxe
+fksibbfh
+tyckeiqo
+gfqurpyl
+raljmvsf
+chednohc
+gowzqrfm
+ypktqcvb
+fgiusizq
+jvdsmnhu
+esfuxpra
+uraiwlfz
+vpkulaao
+erkvbjrj
+mrhjjist
+xmpayrdq
+biqwpkrm
+lrlhkljw
+rbaglxsu
+kryywepc
+mrydxkuv
+obksnkir
+jogxscwa
+pxkzdamo
+wcywigdv
+acqicmyz
+xiqhgpik
+izubxapc
+yrzfptzd
+qmyltgkw
+dwedcarp
+oouewlrv
+izelyufn
+ehdstcah
+nylqvqtd
+ywxjkxnx
+sstceepq
+bjihzptq
+nvawrewu
+plftxhsh
+eyuzdika
+gjdyaoek
+euqeablj
+zhgjzdki
+lyygbhly
+joscwikc
+cbqczxbu
+xnhptyqu
+txvltmyh
+kwtaueat
+btpbbibj
+ueytsouw
+kfmmcyqk
+fwflotzv
+ouwyewua
+hslsjpur
+jdgrtwme
+lgelctfc
+nlxyvkgh
+xpeslfje
+adcifgwz
+gquvwdeb
+rkmzqard
+lvzehstp
+cijqaygt
+dwfzsddm
+vmwqrrsy
+aotsaqoj
+irjumknp
+altzbfjo
+hubsrgdb
+nudnkfof
+bvhvcltf
+xupumtmg
+kjfxunyd
+pjwhyeuz
+zmnxkepw
+mpzvjjni
+cskxvphp
+dykbldmb
+ymmsshaj
+gdsvrycq
+ehdvpiqy
+engermzp
+tmexxgkw
+acjslpiv
+qprqqyqf
+fbictbjs
+llaeirez
+uxoofxnc
+ukgpjtlz
+tpxwxzpu
+cuzgcjgd
+jnzxfqww
+wemyhsbv
+aslnwaqg
+aibaikgt
+hglojgqv
+larqrtka
+ozlrwpna
+pzxsdrjh
+vsnuuusj
+jswkkvun
+darbbbhk
+woeihkoh
+xdsunolx
+ymvbtrxg
+mtodxqik
+fxkcdfwq
+koivubnr
+gitldbqs
+bsjymzpd
+whaluyys
+rvaftjox
+qhinxcid
+snpkwuko
+mdgvstoq
+zzytixxc
+qsgrlmdn
+ddjqxeaw
+uilqxznh
+chazpmyk
+iivrixot
+casfxwwa
+mvjdazsr
+dnmivmal
+eayyeyfh
diff --git a/2016/aoc6/src/main.rs b/2016/aoc6/src/main.rs
new file mode 100644
index 0000000..45ae3b1
--- /dev/null
+++ b/2016/aoc6/src/main.rs
@@ -0,0 +1,27 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+use std::collections::HashMap;
+
+fn main() {
+ let lines = read_file();
+ let answer_width = lines[0].len();
+ for i in 0..answer_width {
+ let line = lines.iter().map(|line| line.chars().nth(i).unwrap()).collect::<Vec<_>>();
+
+ let mut char_counts = HashMap::new();
+ for character in line {
+ *char_counts.entry(character).or_insert(0) += 1;
+ }
+ let (character, _) = char_counts.iter().min_by_key(|&(_, &count)| count).unwrap();
+ println!("{}", character);
+ }
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("test_input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
diff --git a/2016/aoc6/test_input.txt b/2016/aoc6/test_input.txt
new file mode 100644
index 0000000..32ba518
--- /dev/null
+++ b/2016/aoc6/test_input.txt
@@ -0,0 +1,16 @@
+eedadn
+drvtee
+eandsr
+raavrd
+atevrs
+tsrnev
+sdttsa
+rasrtv
+nssdts
+ntnada
+svetve
+tesnvt
+vntsnd
+vrdear
+dvrsen
+enarar
diff --git a/2016/aoc7/Cargo.lock b/2016/aoc7/Cargo.lock
new file mode 100644
index 0000000..58e04ee
--- /dev/null
+++ b/2016/aoc7/Cargo.lock
@@ -0,0 +1,4 @@
+[root]
+name = "aoc7"
+version = "0.1.0"
+
diff --git a/2016/aoc7/Cargo.toml b/2016/aoc7/Cargo.toml
new file mode 100644
index 0000000..1b18be9
--- /dev/null
+++ b/2016/aoc7/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aoc7"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@gmail.com>"]
+
+[dependencies]
diff --git a/2016/aoc7/input.txt b/2016/aoc7/input.txt
new file mode 100644
index 0000000..d50f36c
--- /dev/null
+++ b/2016/aoc7/input.txt
@@ -0,0 +1,2000 @@
+wysextplwqpvipxdv[srzvtwbfzqtspxnethm]syqbzgtboxxzpwr[kljvjjkjyojzrstfgrw]obdhcczonzvbfby[svotajtpttohxsh]cooktbyumlpxostt
+emzopymywhhxulxuctj[dwwvkzhoigmbmnf]nxgbgfwqvrypqxppyq[qozsihnhpztcrpbdc]rnhnakmrdcowatw[rhvchmzmyfxlolwe]uysecbspabtauvmixa
+bqooxxweoytjghrqn[hkwwukixothfyglw]kpasnmikmbzcbfi[vlnyszifsaaicagxtqf]ucdyxasusefuuxlx
+rxpusykufgqujfe[rypwoorxdemxffui]cvvcufcqmxoxcphp[witynplrfvquduiot]vcysdcsowcxhphp[gctucefriclxaonpwe]jdprpdvpeumrhokrcjt
+iungssgfnnjlgdferc[xfffplonmzjmxkinhl]dehxdielvncdawomqk[teizynepguvtgofr]fjazkxesmlwryphifh[ppjfvfefqhmuqtdp]luopramrehtriilwlou
+mqxqhcpalwycdxw[fkwhjscfmgywhtvdb]khadwvhkxygtxqx
+ihekzgbwpjxgbau[eqpvqxncntbtsqn]mbtbcujdkbrhxdu
+izikobnovmjzngo[ombcpcvshnedtndu]lnnmdkuapgnxpgyxcmg[bgnxdzmiolfvvaizu]tcvnrfufuvhgmlxcm
+yhrowrreplrrsbupeor[nchtznfzbzwnogh]rynudxihckzattbz[dshxeaqusdlhydtm]rvqzuffgqtysfzxp
+unfjgussbjxzlhopoqg[ppdnqkiuooukdmbqlo]flfiieiitmettblfln
+hgtbgxarmgbxqrhghxb[hflfvoetxfisqsj]syhkugztqkywetyhad[fmptjuaqittvvyooda]cjkxbnylglnlfleelzu
+npxhwtitqnddkwg[gmzggwnvygsroeaadtc]gudnfyefqbbgyspdxjw[ilthbdqubqnveowv]xitfldhfjyjsomygjg[knmrlvoiqyytigytlum]dlfpsnyzmhkmeevfwsf
+wjzwftiuixvwyzmgoe[jbfghrqhyywwhlu]wcijbojvlgjjdtowzpv[lgfvxfdusgxddsppbxb]pagicuiuerzeydww[wlpjklgzyilrifonz]gdicckmxibtwwoesaxf
+eilrieezaciolhnhrc[hcisnfomqiiaculxfv]bfyxxhgrakqogthzft
+xijomgpzpilomlpy[sfgwaovcybyhoogrxsv]ufncwrahejwlhyvz
+nojlhdpfkjbhahgqo[lqrkjabuijutlcbq]caszlkvkofxjyqzsttc[isqicyomykudneq]izuzehgtmwnnvfrlrja
+qwfvuzrogqzvnhyqdv[qhnjhafmrtghosbmskc]msmwswtgzlpmtmzne[kovzhefjqtqadhj]myqisirynftmtzvxvvz
+frfongnaecavmrhj[uuptwvcqozxnglsd]kwpovfwuhmqjkog[phtrgysxaltvbohmv]abhuahonmbhsmfglltm
+wdqcwcbtpexduecepe[zwrcpctlwglgfpappb]zdadimzdcpxhxwde[yquulvwgyyzwcfsvkdt]thgziwclyxxfyjpbpc[ypkjfrfkxlkavboh]hxylcecamgezuoljh
+yqxkafpkuuxfafe[zehlwtvpprtiqbl]qswqigaeaneovxm[bqoieihtxarwyrqegb]yzdopgmqklqaizxjm[jhrsftklywefyevvha]xuvydwcntczjvuduj
+judhawjtmpsxfocai[qghshlgvbitxevt]xehceioknrewezihnb[jvrzemakemtgmqiqmvj]wewpjflvqmottqx
+uhokpvanmvdobqitn[eosarcmqnukoczgz]rmoowtgbbyimkptlxdu[rqhewmnpypqpyosgehz]nqdwglwscsizxey
+sbnojmynueuyyutr[oonxqrbbjxwvwafad]krqlneuehyrghmkrq[khsckkfwowubtglegu]xweufrmlufamzbcedk
+nmgjmbwyrvcbthw[ogtvotifzugvvrsfe]jucqbvfqclkuxzumoed
+uaokpcytcrfpitfursj[lweyfahryjfprulw]dsdutsxdtugaced
+ahshwqihivxlgsj[ldnmuwbrmoxtypqluyz]intafryfavcnotgxu[xjggdyvoarfajgp]zhfgnytzjhuyheqdy[yeynlfshsyrhjxrzguu]onvyhjfwooikmmqzwgc
+djkgxfnfojgjpxec[ngwqajfbywoxlbm]oqdqigzeqadgqjt[tvojayieruftbjokeeq]gxwtruomnhorqqrpzt[bxppvnbiwhkhdka]rhpffqekyrcgwqmoi
+aasbwiocfkaahrjwerr[dvlemehlhfzxnzymqn]okxibfrlswfvmreuf
+rwcjoknjvyufkrp[hsqrwhdlwrtlthp]ijezyezjdrhzgltliq
+azawpddzkqbosmltyxt[zoaaqnowmmwkmfkq]lgusvzwnimvgagupkt[scbjhqdftzssbvnvff]coiaslgcrwvyioxx[jouvwdiwvbsembzf]popmlnhjkoaeahcny
+snucfdhspcbcsgjnmcc[qbicureolmbzhsy]cuabqhzbcbkezsumkq[cnggwqizurflommitua]ajtxxkqwqynnwroi
+bsxzwpiauwlqelesq[uqfdggoirtlucvedpl]asacxftfqfswiapmj[nqohanbbzodfgkxihtt]lhshhkgjvjkumja
+beewgulkwnmwxenstrz[vybrrqhcdpkhfnshccv]xdfvqzdslwosulzatc[kuknmynmjntvtyduwlh]trfvychdobyghnrxrfy
+oxrwmqpvxntdkohmxb[wugyubwxumwnxlk]jidpzvtbomuymyf
+pqzbwlnmvtytsfre[pmtmcnxkylmqaeb]alfdaofnqpohulpmfoj
+qopdwichdepaubxxeu[ifjozmlqttahyugyt]mfmlwxifscsnuom[kiyjlqqxunsxfmht]icofrxpdpsktwiifyb[hetijegmockkyjhhc]aarioqngqmdpkti
+klumchkwczxuuekdb[nlalmjunselydybqxdj]alagfcxocldfyzdnzd[abfnqrgrxbscagj]cohrecgrcaxljkz
+djydzyiyydcneoubp[gorqzujuwkjsqhelfrp]pvtvbhztirfzmwcopfv[wfjumxbfvvgvzltlcf]ergdkkakrtfzcxmqcc[vwnkrxhayzbvbauvn]yjoqveipzibbmjq
+qbdruhoywfjhaljfkoy[tznfejprrnzrrewdx]jziputgqfcqtbhvhlnw[ikahxtlheeunzrdq]tmoanjmpioumvpcu[tnmcvxkewovprxgzd]trnmnhdvtsisiujqjk
+llojixxpxtvcwxaxp[rurmhymwuztchngs]weaefxdkjmofeydvfy[hmbracjdcwxfeva]jkiybiomykfexjlyg[pgrlrqgoxqqtoio]rdynpcndtqarmkagbw
+kislmybuoblnpsc[dvsrnwlsvxxmzuu]jakczftcvijbavhjgb[osdyplcgliragfnpezx]kihkywmwgbkjtgxn[tdsgdadcvcaxfrbur]lzyjmrjqztybfdmm
+orfngwdzlrucbkbqd[ibvlkwlnnzwkhnoad]brstantuaxwkibofh
+vuumejklanuomqqdbva[mwjzrpargsphzkkhaaz]lkkewmbrvuczyyu[ebpoqgoifelelzzhd]biflvclnnimuojihdmn[llrnjdgzagktjrys]edtbmzmcbthpixhwwyz
+ftaciyszakisxhzjhbo[khfshezpopvjaki]pdnnsqmgpgatvubllrr[ovjrouomglbpgvtya]ifwcvhascqptbvbums[cfpimraygtnuimiup]zeykmilehidtlstjux
+nzgbxxiimmzsvhe[ixypsgextxvdckbjelq]jpklrvkhgzprfrsv
+mpdlsziccgzmvorvm[vhxbfkwfwbxqbvxp]zbsxgodzhgmrhrprpu[pvawdsvqybgdncgxido]zuhyfbmmhzegohu
+rdkteyoeleyhxdlfa[nrrzftpiqatsnnnsd]qwelhxwbpuwjmrjxmgq
+vpdhtcgjpkrqmrt[gozqldncggxpvou]zedtarenbxskusqk[mwpmzpwraryuqqmdhrd]eoculislafmbqzy[okpddsvrtyrkbjtihhb]dvuadhnaxkfewhnksl
+ivjfulhqfbdqiprzbbe[ezhkhqxcviwxbwmlnbb]ttekmmdrphuteslzwcj[iocuduwexawydww]qmrfnnedqtqezclpuq
+tksplumjkpsjjorux[dpffmbayilzuszc]rsiowigabmredkfv[aurieaasmsrxufpo]lbwvhcrjfgomkff
+uwuobjzxkgeugrivc[biktdwykzondbwiko]nnrtnqzhdhdwzkau
+cjjawanjvbxvmvdmtu[kubvvkuoynaawzowphv]ssijoohfemyhrde
+qlykdpnioshrexuw[tjwoswemjxylnqupgv]ymovhecbliuuzhjwu[ghxibaaourtzzogrynv]hmlndovkousrtbomlnz[nzkdpmqrqovnvskh]vdvntntzrqrhvcaxdov
+tdhrefyrccgkdquxz[jqeprpsvvkmmldlwyq]lwhnimtgegsziejeh[gyefzqbmfnhzgtq]fmbcvbjtsriuicde[sbkkbqwzlluccpa]nwxmuolcbhtwcllmz
+cakfzlwlaxgrzjpgck[toihlzbehdzesbt]azrsizelgzczqxwejb[ypecquckfavmixeyjgr]njiyddhuwlwogbnpt
+jadaohixgxzjcopk[wopcnehanaabtklxnez]jgvumwvmixxxwaolxb[lrhmslkbmylyvlkx]tatmsbtlbcutcydlrf
+gelrpwfiyiszejt[skpclwjhzgwvfbbd]ibwzelwwhvudmvoe[gpdveubkzkkxvtjn]khmkjslnkdlmefcx[fcwhuyiyvnjgfcva]qjcfuqxwmkyvvzuj
+pbejigkioxtdjjzbl[uihultqxejdyegacm]fitsnuitopdzrxskz[shbzwyodcotpvoixoz]qrhuyetkmnnljfqt
+yohbaryhrhuobkf[fmfsylvacrgvpnlqdb]iucbpagpbziaqae[lfcjrlbgxiytord]mhjlzecyrqcpbxsaq
+vguohtnahunrvrfv[lwbganvrrgnasnkqjz]yuoncrmethwiglfiy
+pljibizefgbrfauieem[yadmbpkftrtwjrize]fuzpxdpomsdxfocc[lvoahklovaxtucrpwhj]newpgoizivpqkpo[uloztzclhwixtcjhyon]qyzzqoyirejavchy
+plinqqpqghkeuipqppp[rndecheohrsftgvku]ogsyvyxuetmdomwdmx[lumcfskwppjacuddm]uptsydogwyqaupdft
+ewvtreckmjqvkvwgtz[leisttvtmrxnzjv]bfzzponjsjmepqjfs[knbonuuuhvtvteiov]vaejlijsnrpqppo[hvwwdxernqcxtxe]ssznbkhfmchmjjiahkk
+rrofpphpfkeeqlxcev[ierkxtuduxxxbilmg]vmipzdomogxwiazla
+uqmllifxqxwcskoj[lwrjkmxgwxwvkqrsajx]wpbkbsohlaeskzbv[boyvlwxpqpppcknocv]pgsvgtugmxmoexrvpkk
+zupunwchccxqggie[sdcdhzciymhppyaaaib]izbizcvzvbcnofmqt[lvvxmcmydxruvudsar]gnspfiadqokusllygyw[wbcpnuppeugrqobtnu]mcvfhylypayxquurcv
+ngscsmmvttxjxoaniu[wsfnnfnkwmjxjql]ijtqswaevexzcmgime
+hkmykmrremccqxvfdps[izfaeewfadfhuwwd]yffzgiqtmayebphb
+znzxjrdnxhfydrhr[kwafvmygvlylite]hmskvvpqyoblrygj
+gkxzweijinwxyajq[jzljdfxlossksqa]octzjmrvxkumtpn[jypbqguwpybykguwn]ngriygtjydfznsf[cpwtojpifkhwtfknjsg]zahxvqxjtoutvvsphh
+kmvndjahzayidho[fitbtgfncjvmbyrbvnf]fodwrbklqhxpsrqwh[ccwvgmocbtbqvwzu]uuidhylekzxzvmce[qbhkjfhnczasecv]ctsfirxwjfvrmayoeb
+oktwbkikybfwojcweal[pnhqkawxmfxggabhgpa]kdjghdalrpgsdhqj[bxjcqdytenfjirvb]odnhihekqyskaoedyor[pqsixozypkjdnnntbng]negjtmkqfykrjgewt
+hriyrcurqmacydyay[gfblxaovvngyesfa]tmftedgxujvmjze[knivpbneiuxdsowcxdt]zzncnfcouzoppog
+edabqgdgbyjqkzjvzhr[rdejmmymhnvfrqvf]zknrxaqjohlncvwc[lcpuoqnkvwgjycfm]ohuebodqzydltckrsb
+rxcyawcfxcjtdshxg[zvggbsrobekoxidyx]zdpvqowndwgdubbhst
+qngajrgvzuafovkr[kracjvrryquumqerjev]mqddkdpqmfgexahczm[psmbzonkrrtlqdpgqci]obiynfssuwhprevmzm
+dihkldbnjicztjfrvga[qtlevmacqkefjomc]opjaojctoraohocxaca[ojldoulpocpcpexnyx]qnouppkcuggjmod[oeiywfzmbjrhtxz]mvhoarchbrpndgwhxga
+qyncschbsnqwgvfu[cscsfdcfbfqiwgwqi]pqzbontuospgycwzqn
+lwvovybfksidtajq[vrtqmrxzouplnjogzk]gailtfjtszlxzwhbs[bgqzyhgudphwgufmg]levofhjnxjqhkcy[wbffnapyutukiavenm]olkwwlrbbobqudwvnur
+yeqiptxuczuxzeatp[upzutosphyfhuho]jehejxjvfpqeifogn[odhltqvdcwwmshl]coezfdamogigspon[syppfhysfwfkisltwr]ihkaelrbcelykby
+nmciqyaovpdwzldwt[zoaowvxkrpfuwnyepcb]yhqlmmrxxvguuajawb[rmilfmqzokaeabc]yhmswnsiyrepbudi
+pifzooabiqmuicfqi[tvaqijdwxsbamxzg]zncutzbfmraagej
+jpgkrbovswsjnbcj[bjybzimnzszdkqj]mvwmgdithrxecpselt[kghbhnctqnhhxxhdro]drttsuyvtuuygdtfaf[zohajxyfyjnqrigq]gadarjzfafqxsjxk
+wivyofwdmipecdxuqu[trccnlbsvfbagstm]xajuejldffxzxfygsg
+qsuxdmtfgpmlgkh[gisuuzaglpmbmydtt]qzyfvzryxepjmnr[mgsjrbmtxxzkadomelm]fqzjahepxspwkwpwd
+pncauthrouncvjkrik[cyiovjnoesdgpeyjpvd]ajhonypsbifeghxi[wmudcxwbewumjbegnh]qetzbstgmzfruzxqln
+qmkcddrhexvtylukq[nwrryzbnjnhvvgm]edxlyprwzzhgfmhz
+iuonniejtavofqdqsln[ynjrsfsqrdsgydhpdvh]xvqtjledtcgkjkealws
+fhbxdtddlvkjrmjyae[nwwjmjvxtabdwdezfdy]iwnsmstiulolahbxka[lqrxlwifzndbeid]jilfjomwrbjeniwybv
+iptzrdexpfzabqcqkm[kvaxgarrbrobtmu]fqaedifschjkoepn[widcirixuswhcvcqywp]kpkxphryiwwnkmb
+zbeoanntetxhvigve[fhwvhghpujcldib]ncrcyvevibooqesy[ougjirkquasabeqad]ydufeicmimcwgtbg
+jaocnzcwgxknexaf[cqykwbyvxtcwnurw]udxjnumyhelfogapi
+sduqgjoijyfrcnfencj[uxuiwklsiuqwjjrzcfn]epnvqcjspwopyffl[mwghrhtfclodjan]ghamugnhrrzjwmnc
+woygyvtrlmjzaeteuj[vvvfohavzuuzyzgu]xjjcxhosambmkixiie[lqholbwbktlvdljmapw]diufpkdnjmjnmyc[ehjexwagbmezmpj]czhwzecixzxfykaiafj
+nkijgkhyilzqvtgj[llydwhyhnhpcracxxd]zgtsspcwpyujndbxvp
+nawnrsgxqpctinyek[ieguugfkwujnymij]rfmqypeekkdsttdw[rfuanabgfjgctueaaqo]vranbomhrynvjyywmh[zjncmschlfmkvhd]gfeoftxsawcgrzvrlx
+jgazasxbickiiiz[duuskjowanfmieegl]cwgdwtrzpbfemqitbhb
+lahkgoaoeofjlocsei[bwxyguvgmenwnpwlp]jigdlgdjptkimoyipa[zlcyjbqohvmlxgxp]bmovqedgchicusqzq
+jhkxinkbwhpddvjzgod[fypyyhptvewejlbwdmx]teagznqhjydanxxi[wkppnjsyzhwshtpo]piaqxcwqolwklwzsfkg
+sjedigezzdkqlxlcnr[xanehtpradlngiob]uonmjrieoycpthh[wnsqwfubwxkqhlflzv]smrebfwpnhskzlknva[pylbyttmhyggonlk]dwqkzjmatybpmgeb
+ktfcuvnwueamlwvgwmq[czcgevditrtvddgfh]djmmelqewdnzrlqliz[fkpieaipgyxnkmjp]rdpkfzvqpfpvczv
+tixjemagwmynkihelk[bnwfmkugsnivgdmvskc]nlasqrjqrlorszi[kbatouwdhejxchpdhd]etmbkytyrpnrpgqvel[xahfkfjmsqjycaq]mispsimhcckrhqvek
+abudxncgozbrbnx[fllpjgocynbuyawgs]hiphrvpugpfnnppn[jhmlgjsufflkdgw]ldmdclrkorzjtbjqcrn
+aljahmvdrraiavzv[tevjntkppnjqwovvuuh]ozmgagxzixxyzuy[zgefziawisowuyqra]nrqmsbwgqbfrxqvzu[zvzglmnjmjpmditiodb]odzbozesvocemfyis
+zgdukwtswaosbrossf[ugdnezayjnbjuhpeh]knkvomcsgfptssifni[votpmaaohcyofgdz]skbvfugaaxutcmrmsc
+ywiphurgqcvybiakgok[cscyksufsduegggw]rtvvvokrvwmwsvmk[oqvdxhoqfsfdwwm]sbzajtnbxzkyiwrj
+nxrvrsbjsrysysvftoo[qowwnvlezexjyynm]nknzluizyzjpbzpevb[adkqviapkjbmknchtb]xsgtthuifmsqidyh
+ejrplkjjbnjjouesaph[bdtybzkfyictcjuagr]ivtcttyunertnzgmpqv[roikukeznmtkqomqbk]lsxzsjrnsrdlxevj
+qgcebktqtyjjwsav[naozjsnqufkkgkp]evimphuulhzflub[weanrdvlsmmypnh]rojhwlyxtszxsjiuai
+zludmyuqlfpefvxcm[hejpyhwaqdndtwslan]ldtxkxxtegoqpntsnwg[olhtlkpvkdgkkxkisp]hursraavetjgloks
+rosuljoqspxeovaqr[ocjdnpuzmwioylt]txylrlsndrifxiuxuyg[jnubpcjyfzhiwul]pdtcjcrkpmzlayzcty[gasynfnouxnvrplkym]naxwpqsxlsbvyuavty
+oxbyqbqmpckkdpfjtr[ggnmfcjtyfspqrqkg]tzapjijawrabozckadp[varichgjrivmseddxv]admqmnzxzqcbapdquwd
+jvhvqxvhqfxnjzmv[hwfwxvwhxorzqizc]rpjpwggqxqkaznkuqn
+yrsucbqcfaukancrr[nabtowgijsnzryuvbiv]sfpffzxrftnrkjx[qfyfsbkyhetcedf]xdykjbymrqgheanxx[oxchcwrkbqvvfeyi]bztjlknshikocxztjm
+iniqqqqprdeznwhr[arooglolfjgprfrbhbm]sczcmpftuhbaagwgedq[yutgzaqyxntjxoglmb]vswbhlspwfulowkif
+bjcjrdzwhmssgoinrcj[jobrpyapaxkasve]hzacshssrxkdtrlqhr[yygotqrmvhiqjrja]ljwfwudymzkpczysknf
+lrnqnaxtavkhwfebb[vwyqnqkveujnlzv]coizhrfmviizxgz[zklqinvtnwtajyjx]nxvpznyebozrosfgh
+ccjjszgrbozbpopagns[abiuzirqfzactus]eemrbqrkhhppvan
+xeaifcibybamzzzic[ymvsqllvremyfify]ftgmrkhzswdpbmukcdv[fbyevcnnwtnodgxy]slfjznnldyuvair
+ajmeryqwfhniqenmi[bdzlgljpkkgsvpjcy]hqzxecqxmneterlqizz[pzrbbprbhujzpcxhjmh]lvrckyomhvidbiapikk[cyyapugbrwlubpmn]toodggarcneobyz
+lehpdvqjccdfpzpo[ssunfejvfxwzlzqy]dvhwfrwiipveqpb
+ijmthhifxtkoubt[jcgoxkntpnxkmdp]rzsfekfmamzddgm[szvzrwthulqzcorhnk]lmgsxsjjcagkaysalnj
+qmfgzmmoylbruqxoh[uoyinkzbglorxud]frtffuhkchkrwbxfx[urlwigeirzobvhir]pqrqujuwxueommaj
+tzjhaiqumjufkzcvphi[lhfohqxxuoqybomckm]qjhpjkjljzekboyc[gvzfehzyrfaarfklybg]fhurcpaukztwesz[lhvnhfgpmunjukye]mdzcvgeehmchcqe
+cbyyjbdwzgdhveyw[ockkdpwglixvbom]ozezplbkvaulagw[vmzfmqxplwaqjrf]upytqbnzjrclzfvti[hztxfkqwcuypqyhsfa]sfwcfhrnccesyncbg
+zaclpaavkxbpjxse[dmuzswkobdcfmrejhaj]eqdwvpiphijpwrvg
+yvectfptgdasqxi[rmpaospaiqhwpjwdru]ollajqbxmfnqmqrdce[jqixwgznolbepskpm]pmyfsrnbdcqdrhplko[pzblovbmbnbwjzsxrk]hgwpjhgshxoozdu
+gpnplfnpnmdlhehgazx[gkgcsjdcfnxytzp]wamlpixcrqvbtseb[ijaxccauotewzkgu]usgmgqmezufmgqjslbu
+jgtqghpjnbjkmajymfw[isxpkhlvtuyqpscvm]czbrsyeqmjnksov
+fjsepwfaxbbsdxlcz[efiljmecvcsybpj]fsvcvvewoepnvqz
+nxzdtgomsakdhwefrn[cobjsrlxnkxvmhk]wkfnuypvsigzcnswufj[ttmtjfkbnhmmdebtr]ffumzvnvgitjccgz[offnegtizuxhpqmic]lbhljegbjmldqbzryis
+gnnsvlcqoatssjuijb[eaodophfeufuvdodj]jplhbuvzqfgvrqbuy[ezxxqanlgnxdkohew]vsukbzhjshwmmqdkzdh
+shfhzsmqdeibrwgyr[slyyksjeywcnuaocadr]kdwnsokrwkajgnwi[zsfujtkhknplyieg]kijuvumdqvjyjpbhl[qyrlzloooajylfrsfk]gwqdkfpitiitrednt
+zhmwbilhpywvxrza[tgnybotdqixzolvn]ptxzyjbayyevmcqua[hcmgjpycosutmqbtkf]tboiprpyhwgjceu
+ejuvrirctrlirihunm[nfjigabdmqnkfoauuyg]rfwcumqndfgotyx
+cxkwlruaswigkrtxxch[fjsovwltjonhegm]zkfawxnzxlkaqawq[rgfftbipxlmelfnpf]qhhslyyiluvowxz[bgxutaxmhxyxxdob]hzthuaqpiyeomlgqqcn
+qyzwezoszvwrwiilglw[opryawlpulfkpkmuave]taxeqyunnihulfp[vzxzosekvamoofva]bbtonpohbgdwfmt[xwzkmwrwruatcdqrj]enrapbeqoxrufgp
+lowqonzaekybouni[uehkpbaxwfixuwlj]ionorsihznoszwzyq[cnatlobscugfpvpbw]lnsmgieepzvmhvbz[lsjebmtctttclkxqok]jwevnfmcrtmgjyniiuf
+ltxumfyzdinfqrlf[jyiwmlpqkbnbgmu]bnicegkghtwivvyozea[qhgoiugrookfmdsln]fpokyqsoknuahpmutnm[smzqellevlxgdbbet]vsadiuyglyyuccgkrz
+fvhanaukvcjdkhsydnz[pbjsoundyybhvaqglj]esjjvkdvjmgmlox
+hcckhzdfmmvnsmuzjg[uuajvdzksgilxpjmnv]opbmjvfljnqzxkql[pgdelzddxqrfdoqnit]hqrrfnwrokufpybg
+ovtjlczqesucgox[kiqphngcbakoelqncyi]jhrwrpwdjxbhnqp[kqvqdyokyuxulxidc]qumskxudarjyagegy
+mxrxpfkynragapzrmdv[rdhsbrxgeywqbqh]rpoerdiwdisciarhl
+ejbdfeqrdsrijztlibc[beglofnxveiorftulay]jslqibpnunabgqmi
+uplsbqledimexhzwnkk[sfreaeitecravsu]exfxqlrumxaeasi
+gicahlhkuxbhppe[cypyeqpzkrggfqrielv]pkuwwtbezndgtqhbz[ojnnxanlkamvmpqfj]eozgnkxtbtyecuhs
+jtzwiyeueztuiwysyv[awibgssyyssrnuxrvuw]mmyvqfgaaraahzzen[rhscfvdrvagricw]qsqbnurcszgekmp
+dxkeveuauhblqnq[oksqvawybtejxmdw]jrbwmyxdggncxitwcms[fvhnmupxnynxmprs]odbifiqqxskxaqn[xwdwagplcltcepjmtf]zsfevibkmzwtzoq
+kflcnlkdujmtiug[rwydvjaazfgmfcn]qolbbuxzxhoizfqcwn[tprjkbylcrlvmbggae]pjwhgcmgxzhxbxdceme
+donbjfkqtygixfpaa[lhfcyuzcmsgixjbr]njvgmbwgzimrtpdmvf[eonodblqfpgtmex]rkakjzfmuyeajvhs[lmgtvenasnqbyby]jdbxoeqnwoednoncq
+laiyueskjnlltkwm[lzrgjwrjchpmnais]pqltpskalrwtmtagvm[luctnpiuqvulmtmw]awlqbuutunlbpusn[hdetxhrtzhkyfktmfn]qpmezabxzrtquidbjc
+hritvdzjxipitctgoex[jtbjcyaysbefjme]ebbcyqglydfhqjfa[uwuwqhwanfydpxqk]enevryjyzduawrfc
+axxprqpxpifqnwte[qwkkhbywyixngun]ufwcbmerbqiblbdmn[mguzyerbfhpqnybh]gscgmmckgfxvvwgxxm[gfjzckcxdowpwmhmg]hjblyfatzhxjyvlccb
+qzzkrqfnnzvgfmrpjr[sktcrqxcctcduir]vmhsrsedrxpnrugm
+mpxgzowtjabzwfcbeg[olgfqepvinejmstbrj]fnqxcfzuxojvkscyk[pxbyuusrrbjwrygkxm]wiojjquwvhineivnkys
+vqcisychxuswbqlzdkj[jetvpggxtqqguuh]tyllnzfyfphoudijzj[xlnznxybxscqjktjn]oysyrlqascsqbclsb[rzhxpwwrjwakoldm]mrwzibdjlhsdsbew
+rttdskfweqmkjolrgsd[gmdwcimmgetwiprem]wkyklvpjyhpzvmsh[zftyxsrvhnioomw]mrvoyvyyrlguwedz[xyrajtcatyabfqigup]srjmohoxwdybksfv
+xzeexlrzdznmhbph[vobtfjuyowqppxw]mjxwhgwveozusndvi[jthhtubbkbmdiepfh]gtedeqwesiwzlrfny[tppxuofhnwwkbkysg]aygwlnvczaarhfgkw
+zxirxtzlqkptwqd[vwdzostlmrbjclfj]aluxqfcdbjwbeerhr[nsjcafnammlxjafrzaa]kipaqywrtrpkbcdtnyi
+vovbpdgnfhmeuadh[bcgvleartfaspvvjjz]ajyzrbirtimuifvs[lykguucpvkxuupcbims]qplsipqneiycefb
+alqzdecagmvodcigcd[atmngaijkfehfbc]cprsiaclouvtbpaab[lfrxlrzuuooqdtfirbj]olcjwtrkndcvykp[lelvgglysdxycvk]uyakjndqzxtzmxs
+syngsortxjqcdwcz[qkiseyvolwhibxdg]ucuxqdozkfgaxqwovk[eqeessuwvcayhpc]wkhzcbkxgakgxnmho
+bhtxesznfkwqbodb[ptpuhbdsvbcjpmnsl]oohvgktjsjwxqgyxov
+udnbbnkojrdevgujkg[cramyjeuckywtuw]qtldussgogyblkm[yuwacyafnikvgbibmwn]xvsgxmywenrmhdctxg
+uzqtkzkmmeuttwyklv[rgnrxkbavqabukxvnp]whhgpmwocfmplba
+kvbjvjxyqiqitikvm[vkzunkivwcpvxng]totvodotoqiqokouz[luzygityrnpuiih]eadddxqveeuujmvnek[nyxhwlkatungkgm]bdhobvhktlnfpjelr
+inmnseeoqimzjwzhltk[ntwlsdvvybtdoqciu]jaurhomtnyudxxmslj[wqygsctddywlbxg]apsdlaftsghmhtj
+pxieimaprtbntgvm[xuvwwsinhwjjapu]taeomoijctvzyeijfr[gitzztxejfefzvepf]udobxonjlqagrkpaehc[fkqjhfjicleroxp]hxpzoklhbgtngtagcz
+lqmoxvnknpqzcgs[zktsmqcgzqjponj]wfhhzvqiqkxfwrrw[actbxtcdlogatfkprc]tvzphmtxfrptzlopv
+czdnqiwqhighizbmivy[tptpsvsahslbsovazkk]ycppvkqvuggebgxibe[qutumfpnpzjkgqyfkok]ixywxvmvliftixfie[qipgniycxomhgmwje]vnhxbcnofkcnzep
+igvdicnzsefxlgk[dzppkxdievabwyh]fvyywjzcyfcqahv
+bjzwblslduiolbezybz[flvsgshhznvzmrxo]lottitaizuksqfihn[kgsgzawzjlqjsep]ihadewtrfpsudggga[oecgswhnbhslysd]flpdpxndzacxeskzmn
+syxfjuakhrnntipfpb[xmntswflflstndkv]lityfpfignnxsyirja
+unggjaqgvzrckyqx[llllagrmuioghea]qafuiwqpxcljhvf[tevtmuvcyqqrzvrduc]kqnaadyfxfyyzjuco
+cpjvjnocqphsagdizq[rzfbvtnodwqrqprvqh]rnlzshtjhrevjgdu[lbozqegfwoaikxbnt]cqmzymvkummuzjfx[vtknqltevighwfdnjv]djhfeemiljlvkgqkpp
+adbbbgxmiqomckxesb[dmwxvrammletdiim]eiozjsockohijbiinia[zyjjubdniurametk]ajivyylxbhvkktrzdg[byxiykqfbvpfdzdv]zborzsvqimrhyoyhevj
+frshflyhzegyezg[xxaoqtzxuqbamukfxed]klyullmlailfvcz[boefzsdpblwpbna]dbnxivwobykcfwogv
+xxycwortiwhndrvlr[mspdwmhyqdwtctlyek]qnzfcwwvvlfsael
+fnekkofpuwhttni[mlwvhzrwfdtfnvof]gtlyjqokjymvtkiqdl[gdjobagxsuhudnoi]jgcgyusdyyocqwwtatk[rjujihcuqgdpcbdnkco]iewvagokrzdhhhskv
+dfadfbjefyinccgzt[gzoojtdlvqysetfihg]nlsriqansooflahzhoa[vlzwtzgipbaxudxg]htykxxpfmhigbdqsu[pzipnakgdfpajkbqowq]zrwedqiuobogirulfwm
+wevlduhhsouwlqxdcfc[bxcvjwespxdkulgun]hfuhwpzgdgqsujeex
+zweayhrezaoqibgvc[sosownrvumzvynfpvr]lzubqqqepwraqqdxxy[bniazltbdanpnjjjuox]tulybfbbzeiyidrv[zbebbcdzpcvegcms]jdfofmnlgwrnvann
+gkmbgzvludgmjgnrkck[ijywdgxetrginhtaa]yiokddkvhxebbuyrwoy[erhxxldeegvsebr]ujqickibpbjpizhbjw[mtzvltxionpxygo]mbcgbublhkajfdfvf
+ddjzsqkoizakmeifr[sigtlzmyyrflvjowj]dyqyfvpkhdulwuj
+jivforicorwbkmccpgj[oviyldmrjjzbojbs]wpztdiwcdrwttmfdw[jgylosmbgxlrogsa]htkvwsfczzoascpunqr[uemtqxhcvvphnvktio]xkghvnicljrlndjtsv
+zkzjccnvukaraob[asytykcstvxtkvermx]lqgjlittfqpyxcq[dwyrqfxmwryvxjzr]edufjnmxhzxokjgphk[ucthvgtgfpzxikmnjv]yqumujliwpjujnymcen
+bhbndmsnnbhspzjby[llodpdecwrlspsbhbhm]zqulqmxwcerescalp
+ozkoqhvatxmivox[qffeloluwcgsimvcrnu]pweywrdkmtqjiflvcm
+rznstgdzevfsthcc[jpgjzgeibmumtatu]asgwjccfkwzaigwp[soegoylmysqcequdsw]pennknxcwwasonjz
+afniplpdesiwqvdioov[xfkwuijxjgtqbhqow]idmgzrcmwzmrfbsubkz[mjwyiznfpjztbfervj]cythmqghdkjcfrt[ekhpwckuwduoexycc]htaeivvotvlstvsrpj
+gecbcvpiswzjjeiriav[ivbfdesbkamvngogjb]xphdszgbcburesbfi
+uldzgctwccgqdbxrmpo[guiftcqomdqlqua]dmxluytucnlndazic[mhmdapmemlrwmvdzwkn]oqyvwmhlabcwxpzioz
+mganrfqbsckpjsnvlh[vlwmfxhxlnnpsghrhmr]eqyrkxjcwpkahqpxeqr
+wpbzefalgkbnrke[qruzjqtrkbzsvfgwz]vahtniazgsicquatrg[zzslttuxbwolldy]cuejnzjsuwgkobp[yspyowiamjpzcaqwb]vhakhmjrncjoroe
+ycxznczxbzrprsiw[oggkqxyiyvsrmxck]asjjivqayantzzfysr
+ewbllymppqrdnaeni[qkytupytcgsftpprv]jfepwibznfbypfnf[lrparpwtkrzlxwep]vdsywhvslycyohef[lxhwibvmyypfrkdsley]kookbjfsapqphmywuu
+cfpbgrwdsnrgddzzh[vbqzujunswprxyxnk]efqzsevzxurynhnm[cyctdnsmqdssnmzyrg]vvswrmqzxnrbkhunu[homwjhndwctdbecwh]cdvggafdchgeuqy
+lihwrhvzkhbrgct[hmwzxlaycaimxchybqf]ruvcpltuinwybvv[xjbzxcihznlkorih]zxnxeqobqveujyrdnur[ijhueqaqprdlrdcjsh]blwxhcuajnskuntgo
+iroxkwgrjpzdodvmohd[wexdltrhssaqwqnh]ynvmdpomrekdsfrjccp
+gfusgnroizvfwwcsc[jgvlrznerrnjretc]dcbnruamgkyrowpglv[tbusonvwwycqtfk]oqngfriboradzof[yosalcuxlovxpjnoss]teunwgykswgulguic
+bsjpzlhhqvnghwnp[gakhkxegeohljlwz]hfhculyhgdwcflbdt
+ataqyejfhrpvpagptx[ufqdptheyevtxqjuqsm]tekvtwjvapcyamluzbn[xxktujajfnprffsvfkc]espinhantulzwpqug[pamkrynxvlrwccp]bgzabgrubbhhwwanvf
+qkyfobviahzasbi[dqhxzkbapqmrubogqg]aenfdyclijdpkeqzc[fbetcpbytjywomh]mqzvwjmgiexjfehor[ntwcsnflvlaxmfqh]uvubufoducqwacwio
+zvygygjncwkyceve[knrtgwmfgpjlqdzusvb]denyidxiinzvmhkeads[nuqpppqdsbypxncb]pzqujhpprhbxvnuzis[zxyppxjfqtzdplvbegi]imswdcvwdghzhmyyoci
+mpiwlfpsupluuwzyqte[mtyfeccxfpcorktwam]jtmnexxnxsdutfve[ktzdkimtvwbcjrr]crdupwumoriklqckirt
+clubjinwpyiguop[xummstkqfygcnsu]rektotfjzzguums[hcxlqatyhaqponifaa]vdzuiclpdtepfqmbdiw
+sswrlfxpvbjntaovr[cajokjrogvtnguj]jsyxzvoomnfbtcc[lgpureoznbgrfwv]rbrwjeeiqshuvkwub[gzvyjbprnocmpkyk]gzibarcxnwnvuymlxpn
+wpdzryxwfahiwguwvtz[epyjrrvvjpkuogtflte]shadblrllcaigwocsw
+osmgewmpcqugjqyddn[omtivijufzacwctoaf]rvlwqcfmfuazwlas[wbpvzrbsnzqnhygpexe]vxvfjrrcjutfivtxb
+unyfptkouxbhwwur[atheuhcficbccfur]djycwrtnlttopnjcm[pyocjfcogkyoogo]uoogeqkztdvsgdj
+gdmorpdnzddjtbzo[hxulwsrafnvyxokoe]flzcmbhukjwjfnxsq[bzqqvrmxihbugam]kwwzidcxteeodrcekl[vtjszsdbmsxqouutvkt]whnkvoierxzhehwcjh
+laswazcejcxyzcocca[utnlyecffzypkiocowm]nievutnusvrsixk
+xlcgrfodctfmyxvsms[bgnofwciyllnekkiqf]knqjmtgrurhsjrwahoz
+enrcvyphrazilaqswz[gdxchlzickidnqfeo]wmadrvyuoczftbdbbij[jxlyycfmgmbujmas]gsreebayzepseakylr
+zeenyzzskgvaysxe[drhsgkqipilrdmcl]xyhouejaqgfdhoshp
+sclmsgjqcijlilhtyn[tyxuebqjqjqdnzg]rfeqmnwynyzfwsfq[jnrjwlqvcnvziqjqnz]zjyeqebxncecsykm[jizuywrcdskgjpv]nkogvpblfiwwnynxf
+rkklgzusmfikiyxsk[zfcqvybbvwxwxlosyhk]pbcybycsiegagdr[jfrnxtonuvihkiueuhz]xlfvapkzcpysqoi
+nllzirippgseojljl[oahmzicssbyckdhyb]qqaeuleefpxlwfl[orimgxtsfwsplrbuppt]eyzeliykpnmmklg
+sypyjddvabqnknl[zfoknkriiqmevubru]rcxkbkzngjzzcchl
+uveautnfudowpkocevc[xqckexnnmsrzxwrgnwo]fbrkssqktfmvbebfs[jmkkvbmhembpojk]vrixaskbnwyzibmtux[evdzaxyibnensgkua]djjjewnszeukvelm
+xcidhycxopgdfgzxp[wcybbxckgqmwttrrvq]zjynrtlsoibooaiqg[zzsjshnyyytzmrcskh]lnvmmzokrgnyqfvsi[kjpgxjqiyimfzec]bpdjsrxzsbwigarmwi
+zytphsjaeavezjmtjf[ocfrxoepijrllfc]gsnkhdomwvsrvmctk
+hjrxkkrrutrkmsiax[zwsclcwdqaukxxwmbgk]jjvxzyshctodfeeonp[eklzpyupurxmcvgndo]neaovsspupkhdclbo
+agrgepnpjdjmmzxtoz[yptupgqukzyiwko]zegusqzhdpylmvhgh[ftclkimlyjeiqxymyc]qplgypcugeybdlznf
+clmaojwiieaxtkf[hybxxzkuvyvljxs]nqyvgwkyfgwgpvjix[ffrpmlqwqbfqfpyn]wewixukrkkavdgpr[zabgeqjcvdsvydus]crgezocdrhjcufljyf
+xwekgqqxadszfqxp[xgftweqykbpaqymyaev]aawdhgjkmwqayhfuja
+tynmzjhrddacgjexrr[kgxebvnmaazmffon]qercmbticxiauyauxmp
+ueswrzmngurxaqja[yzlfxoaxangzjbyqm]zrwxnhpmqiespczu
+caxoesrhrghfcyunxkf[lmalmkbhrhijrvmafw]sdbhqytqtaviurkzi[ozohqgqrkgcbhet]wgwgtjtcfcqzvymnp[zxuhhoxlpsgrfcrejmn]hkopyalfpjzbptgetj
+osmyszkhkpaedzdy[xfincacxeotivra]lksiavomozgiywoxrdu
+fzbuakjjvpyjimycrt[vvbkutdqqtyjgqz]rxzeygtijyrfiqm[qxcgvagpoqyoxhziej]tfoadqfiddsurhergel[sxqvskkcvlkpavpls]ivztxqjuntogjxx
+hphqkgxgqhazalmlqoe[ovhvftdmpwudzdicfkc]tdfnmaosfddlzbhv[obkkfppmoqirgmih]xrsrqaohawnwlxpvq[btfonxzgatdqmohserb]bukakcwcagvcuuwvhtw
+cknwenzzehwdrlje[sctyfugmaxgbetxzf]fcsbyyqvoowzutlge
+gpjdtjgclynikoh[vicphcxycqsiiiglrsw]bcjlerxdimzupbpnw[waevcaeooffjikclq]nhajkvqepdnzgiijfrm[lvmtxqhswljuvux]rnmiklyolpctfrfgxs
+weolymxfeyqemlpxulo[ifjuypsxwrwczhpsw]hziolxpchkfouvegj[svfsshaljdhmwcmu]zqbrupsvenlvvfiuhf
+mxvfnwvzsyldqyi[bvfuwmmrksbxbzcmzrz]wktcxsiresexdodbtl[hijoaneecbrhpmaa]xajfvvnvwcocpcbrhbc
+pboivziugjszfopvkwa[kdcvzroeislbcymt]plydaqvkrjbbtlutgvv
+dtzdswmudibubrthcxc[vgmrnyfsqtutxfq]xwbupswdznzazrecwr[ijppmhwabxmhfgcqu]rwvltmqsymbydmqfnzp
+agaxfzobcsjhyutfk[ftmcykjveqrlmvizdt]agbgsgsmhehzvoy
+fbgqlgcyjmcjajxgq[xrxyfyshmvxgquv]ubfzmnkgipmqeucbk[ebcveyedtkxwqcni]dvujsyfjdfowgxfh[oubuurnpwusoxrx]bzxtjgpylljsuruwlq
+nbctombtbcumuwmay[pryqddzmpxgkjlz]bwwebcrzdpkqlex
+pvwqgvrjhkhjycm[luquegjefcvhweovots]vddsjvlawwxvkcepqx[xkomwqdwvymcgtgxky]tmjyqmzqxuhzxjekwpw[jdszwjkhkxkkpjjwkvh]jnlsvhnyijndbcavtlh
+ccitzedsdvzmktzl[qjtmlhlgdmhomythbe]skkosmhqaqyxvrpwyvi[toqfnarddgzlwhipiqf]vlallikphqpggunc
+aapudqmdqsoadhf[bptieajhwtguxpprkdn]fiopmsokjtonmei[rdcwfyvsmtkqwtpzwcg]pmgiakezkvhfiqxw[bmglrvzatxatgooc]jdkxirlaztzghpcgiot
+csxohvjhmjbjmsw[zgvrfjdvjkjrrsc]wbnhtwfofrquxtzynmy[smcwkfovyaozfhhf]yfribcdfykfzsig
+mzvhznqsykmcdgkphhu[cmmcxolosuhnkmuwhf]gkzgbqwzbzzurzehdm
+yecvknvwvjguxlytj[pncdvmrcqcjmsyix]nvosjrornnfgznaby[tzuoscqaarhjnslab]whvfxspoocikxfkyj
+guaouikkjfrtolsug[tzdjiielpgytyhis]gwwwtmdeetytmerjk[sorwxqfcsuhbvecom]wmfmxfovbdjhajcaxyx
+ouvjolrkjyetsqlo[vnadgdxvtdkqlgi]pivwtbhwibflcoh
+puboxtiwmmabyqgn[zhxzdcswdaavgdaly]ksukgpnictzfxxsuqsk[feoibpurptzvrqy]tytogwcrtiofplr
+pyeiwajmvimttmi[pkvpbhnufrwpwdwy]dwdpuymdrskpgfwp
+uwctwjpjojxatnyjwm[utlxyebxsfrddigrjh]rwepcpjgrqeafmr
+mcibrhjsqyketegjx[wjiejdvcjjaijnmoy]lsjoughndzzedmblz[ovdcmldcmntnxwk]gtjntfaikfbfhuercc
+xkcadobnrwjczwpo[izovquqhogzhtajgcfu]feiizljlnxughttxhy
+zovyoejioovblepnri[wpjrezfxmhepyyhi]lissctcyvfbtuklymtd[vtakkwrsocdxmyqjkl]idfjftptuoiheqi
+fjylzurwqfvphvctbn[wtraagycimmpycsbtw]zdolnnawyfkozoduzht[wqccswxyzozewtayycz]zngifgtxacyrwiacyd
+mkdselqpwqchnwxgydj[orjtmojhzkuxfbpmxa]udrbphkhzchgiyq[ckkhkoltyjlfzrro]kdyudnkzdsjpvonrw
+bpjaenogjpzaxxkejpa[jqgajznyesxfcdhph]euziwygknckkkkunxux
+btjnlodtnbaubkvb[topsbnzgxbfanulah]uksjmxxfwfzxqfcij
+zkfnmdwdaviehibtjy[adnmoctsyzhtangoxtk]rjydanokxyuxajmnx[rbamopbudxevhpoezc]mzurnxtacbelmitu[oidbxqghkpqjzyqrrox]ezgwbeyokfmjwblqq
+nwefqukauecrgki[ofkmtkzupjriwlml]diautbiayphukxvmhlo[iggbxeudmmbkayonzyc]hkijrjxiffmncybco
+ytgimnonvbqexhbabc[jbkbctatpdataxjqtee]bxzwvqoqyazdgoy
+bjztbbhxzzuannkyvet[mngxjhitobvkzvls]abhmarswjsswftn[ihxeotxkwnknkbmkvjs]iovgdoevhkarwuraoef[wvsvcnptmpcktslrn]ldjniscnknkjaheayp
+avmlgtbubxrilqdbvd[eqaifmlaniocwybqh]juzknvgrahckcrhagh
+dyvzlyoefrbtxizlod[ussgexxviaibhrkb]tcgkgkyckgkyewp
+jvrsopjyjarbkenouax[gwyjvegfpwvjsdl]crgcqjzhywhasbuzdji[wqqiwpzcllmnopvbf]hpirheoriudpernd
+cpykkvqvowwhoiys[yjoethxfromctdkog]cvlcjvgbugyqvqxjbc[ipyvfwhqyocrksd]dsvipsvdgzruhsli
+gsyxcrknbxxyhvnss[zymlfgpcupgtzycu]sjucevsghhzpuqe[qldvqrwjankaiexmj]cacvncnvtlbnxfybngh
+ndbxeywazfrnghgdjog[vncdnjelecbwcnuecit]obhfqkcyucffwbhk[wiboksymurccujv]kxhiktclvdsgbxt
+ieqiuumamwhkexjene[tubauuniiqmzdntax]kxiqlujdvpjqqrtkiy[ubnpvsfjutgvfhpe]fnwawoyfoqqdgyr
+lromgmscqlmoqtqrr[wbndhgvivyrvevwpbd]fjvqzyqdkqfpica[isfiiygygruduhleff]lbfsdwsbvndxjord[zmgvcnxjevefjnqx]izvrxpsfekwsaxhzg
+vfqitwljrqvsyilpb[ugzycuwrexfoavmalm]dshatbrosrihtwpf
+hduooarqszvabcwukj[ajuwsrthbgchctbyuyj]tpzioxoqtyfuwtdccn[jisrxrmnmzhnhotwra]swseywswdlsbzzqqlv
+aarocdgubnvehgg[xvfugpdczaccgttycv]nhzocbyrdhlppydelyq[uloucbldnjeulomssv]ayxgxkrslthaspz
+dhyljzgyamlcdmmz[zdkwfrroodcyfnfie]zkwhzngaidridcagekh[emzeeodcnuvzddnbm]vtwokrqakoovvcdisvm[nzdlsyrpcsicoedyx]rrnfnhgpaeqtlxv
+nxybztwairyftfvig[syeyundkruexgbwyvz]pspeqstftxbbaevhql
+sbbhfvvgyscleyxzki[hgjoiilqwuiiogtt]sblfjsptehcxdilpgw
+fmynycbkkkiwjllu[iolpwypqrdrnkitax]fwfzssjntanttkkboq[afgwfwvsudpprmpne]fbzhbkoxpxavaskchfq
+jcyrspmtzwxqtomkqab[xqivjfrwadfvtfmp]fxkhdbiczckphwhil[ztemqpsvuwhwhfdfip]zxqetcaulofvxrsak
+ozgxtokkrotpphxsnt[txgvekxlxkhufcwi]hspcyxwyijgjaqsyfw[bcjgsvsfzmvjklh]bxjmkqkynrusvvq
+wofaptbytcugaluqc[qdgdqupqigweysdhq]saaeqyqazqqaunofl[iorcsdtwdhfmajh]owdrcjffsvszwflax
+icrmudvzysqefbfgpae[uypfoutavxnzfpcfafy]moghronhxpgorkpypoi[ayrgvytktzzwtfuvfxm]ktoiazynmsksawusbsv[vypyasahxszocsfrcx]wyodebbscuterfrji
+otrgqclsvnjpznt[dwzibvrmtngomacr]xtqtbpxdtejwbstddr
+csiarmhcmunsjogtwp[nborrnynefhrgwy]lvsacfkgakkbjyny
+ijejwezkizvuswn[zfkgmewadvwroqibng]kqhmbrdzuvhcwkwxfwe[mgopomvjdemllzygc]ivzzvgcwpmgjewb
+jznavprnlcygwvvj[eobpbcbuqceogtei]jilcppgbqnzzjrjjjx[xurpitsmdxtiihb]pkwkdkckicticboagma
+hrarppjudvbccxdepdg[ksabupqjypyrwctd]jzmkavpyparwxrivfq
+kjtgdhvqyzisomc[koywiyiymrrjpbqno]vbbusjzesxjpwkrh[zfalkzmohlxcdykl]hdctcfabyzteadzofca[vlbsevgalpsvreryxda]oocgdkoeoxgepsikokz
+nckfsyxjdgmgcdyqoaz[cegnbhaksrdfaokttjc]rmfzhgwbszywwzbzpe[nofsbyxiguiaxju]vjjitkzyrugozdspwjy[gwkdakutwllydivtnns]gswugowdiouemkrf
+evjgxyciglvcnkjdep[ixmlhpvkldxvcerjb]eqpkpmyqvctcepuljz[aylvsdrrbajlptvfeo]nqmtctitzqxeluw[pkylojlgnaunmolry]patyaqnazqoykcls
+yklraufwcbbewrzdnl[dfsdynavgwiwbkmmpo]atqaaprzieowbqafr[udtaocwgbvqqztkykeh]eyzakgtvzrmejksf
+gplhegstsxbqvxtnp[sheoxtsrbdxposgmtx]fazbemqbzmssyce
+ulhekckzsguaeuectg[msnwinlfedcaqdyb]przurxwotscdzgtcjv[sbqdcqeculwutvfecqm]mjosilvbpgaawll
+bjohxvdcujujaoxe[buibijjxplrerpiphn]eorjpmrcugznwsi
+yflomjbhtnsgkkx[hhpskaiqhzlmbnpv]lgsdbeankbosyptonh[vxodyzameaaajwc]nwpmycktztqrgmxgbg
+eajkclofrzpwbscfuwv[vgcyrfqnycmarafkjc]yfrtobkpkwlmgyckhmt
+czamuejkegyxhetxmou[edrrdhmhhtxvpoxvx]wbzihlibvexqyvclzml[dnzwkagaeyicaojzg]wkireqqnngbfxsygz
+kwbjoaorrluxekext[ffjrmxvgeqyaoartr]pwxypyiquumrhbz
+pyxpvbqfwlpnawrygi[dtqrrjolckhpczlk]mtknbyltlictunxq
+cgwtgnafiflwgoims[qdbdbgkqhmtkzmmyuke]cuhipgoscmxtoihh[ieqobhwtcxsehgils]pmtyremzeqhcuinxs
+lmcuchgkedjkgbvxjdw[jxqmqodwyieikurcwf]mkfmofgbnxsmluu[rymmyeyhyncfnzobk]jnwjbmejttstvhumye
+qsuhfviyinfcwufzu[pqmeenwhbstgguzs]ypqszcvmaxfqwqcvqro[xiofditiroisnpbx]vhftrwgnrxoxciva[esrtbbadduxicftf]vcslxziacmscxaxvnbs
+bbfcqaoedfdwphomkh[jnslunmdmvkiyup]gfnnjqweocbybtjdtn
+srjpaxfvehavomsjq[nqqcwddbzqvxdacdep]hhpbhajjqaazpqyo[fclqwfkctufgmkqm]pzkwekfirzlcgduifqu
+kfmoszcssmucztdn[tllxhkubjuqjmgfeqw]djyeyajqakxkoxpk
+peeaqxjifuloiujd[tgplullzdgeqjononx]lsmrbynngeveozz
+chytpljkoqzhxfu[izwdbatnmmzzttst]pkfsahxrlgxedvsev[rcxdfirqmtavigilk]lvrudkskrxxyulbjbe
+iatlnhdapqsyskgstls[nqzlofurrzibukxddw]yxdwqadthjynwvatmp[bdkndmhtngzerzwqgmx]iclavwyossjrhtoqf
+vvanifuojsytdel[dmqjrwfgjqrcyazxa]mivahklphnoapabp[tlwiiuvxlonsucr]fccfhxkvvqeqvclcnr[rankwbxciojgzdhuuu]eycbcqhnkawkwmkxb
+kyqnkbwfvcarqcrcfua[toxpqnxiuyvfjlekjk]hfponcmqqsfdzqtlgm
+ksrmipfvtrgwofiqxx[dxncthyfpoivapdpf]tzlnjrfggtbgdxec[tmlpzqicqjfhxwjcigo]uzmkhvbltpwdbpxzfpi[yfkkmkzokekiidxpugj]jbmagsjlfozkajt
+xhrfhwrsgduyobjodd[pazkwxnflbwbpwxych]yvasgopohztnfcsbc[dohwmwtdklyjkbaqe]cttccmlckzlioizfufc
+lygkfdlnlrukwjskxqp[tcskymqclunvdqywv]rhxfxbjftjxdepuwax[eoqchqlngjnnshc]gvjhyrvjgueweik
+cehpocjxzxkpnxglhzc[ltjmejyuouzkisdnlah]ytzdlqcewgwzxdz[hcupzenhdmtvigdodq]oivalfgkscgnaxih[opciwwcvzkrsehcznh]iveqylobdjvqqrbb
+ofluwuxajcsnkanvg[vwpsezopzkpvhlobfos]gmnrtcprhthefopis[yvcgpesbspnlbvdcdj]unooggcrpjinkxmqsg[stfmzxmnwkyujhwqilj]editpyjnpwaefawwq
+cdneyarppztbtwsaqy[euyswrwxaaolxkzgcx]cqqabzealhvuwzo[hvnmwoqlzyjguvyy]goqjeapcwghvfszwsc
+hohlnwotueozwhyfgg[bdiawrubvrnulfemv]yohmiujjdfjexybb[uyyzvnainybidqfmll]pyybgwdxcdqdgjp[qpowhiuynwospqdgui]lqdoiaufqbqljkvhgjj
+tirxyuvikznzsavp[omifkdfvljmhlrk]ouzmaxynnznyhfrud
+iyoipjyrywuhpipcx[zkrusibgupcteuls]rkwpwfppboaxzgkbwuh
+yebynyhsovfufkhwoel[rqgwgiuuztoboxqo]tbcahalhrqzpqxhud
+mxvixuvpntcsxjzvpy[jnjtyjwuivtsxlko]zugkjugtwymssxd
+ddxewdmzqrmjcdx[tehlbyapxxetbkp]lkfkrutmzvjsvynmt[aryjfitktobzfnhcxu]rrbqdbzhgjwwnfpkxbx[ggbsnbwuwlduhlfp]bdniebubtcxsubscaad
+osbvoidqyhsnydypy[virseojzmlplzxfwcdk]qyyespqaegmtzgckltr[kjowbsggjlyrbtcxj]poychjfbatvhkrs
+rlvvjqnaiasedvpjbr[fufrhampzwdniipjc]oqjmidcyiekvayqfl
+hvtczuskhiykvchxno[benlaiuubpaghzlwbf]tarjrksfzvilwquxj[wehwbwsxfuaptyty]gvvlkkyayfstbcut[hxnojqaxevtbvmaz]jnhvumhqfgkaqhumxt
+thxtkuentusmryim[hzgibspwboqacdlwc]clsunqcnrlgldjbsvz[scnclutgijjilirutnn]izdwhvipobyzirg[hliollkyedcuomrwyyq]dpibjmbezvzyspmkgwj
+apezafwfsqifmip[kuxynugvrndkdifwhd]pixpqmsbuqspsdpqnzw[qfiqdwcdzbtidgm]otzbkrciacwchdnqa[kiblvlkmtkqjzyyv]hnucmptrhrodosk
+nuiovzzixafjgvl[slswktlejrrsmxujjrk]cjassomselslooj
+vnlustrakmrdrkjwju[nnlzyowyjshralbkgo]jpwjwpehndfweegrnq
+hdiueeojljpcqrdkdfk[aseznfnjilqktdx]fubppvpqwksxeiwpm
+kjlbdmnhtzcagcpc[wybonbamfkugypt]gnjrawnjietdzhaf
+ufmoyzcmcxoqqpsg[hkdzmupftmazbrhul]mypsxfpshzcirslsq[rumehwhrobhrjstjd]tcdatsxbxwzxseileyd[iwyafcoefsrbynl]vedzteatonqliwgyj
+wtmyhvmsfoxphqrusjw[ozpswsyjxemnczhga]xeplvzvjzdgqspqjv
+wxyocgbulqhbzyekcln[dijevkhdfkfwmppnert]uuxxnhhkbmcegbtugap
+ijgtsfvyzgrzjonlq[bxxhmrfelsyxkyxrex]pimhbbzahddhwrhudyo
+ydjcoqvktwdjucx[riqvhezqqrwpizvn]pptmsnmubbjzwozxy[rbzbtfnnkeyuvjqhjhu]hnqyyqccouflfzmk
+dordtdxwtwahcjcb[gumvtsackxhwojebt]gdzjirhxegmrgishf[ueivwcnfptgagdj]kzqyptwgfykrxqsc
+yovgolzpfuxumuusnu[yzmsckgxuxbcfhpovdi]ydcgpjfgjgstljbkc[jnxpktvohnxeoett]wijsttknnkaxhyx
+xaajqzktqfslihurb[ssufsbsajcwrysbaweg]odddpcsenmcxilrkp
+lhkzyewhnntocluc[witlpxxovbpaeue]zokmfkrsuzblnubzq[qbubewghnsjcnbku]xicstwzulnzadvwgv
+pzuhirxrvaghkajqsg[edyrpkukyvidoqbabcu]vfqcnorzlzxypla
+xythdypgcqkccfv[zrbuwbhkohddkmbj]dbkreagpyprchmoktz[mehstplzokdjkasge]bypysrypwfqaupkwmad[ywkktyjruqqoexms]xdvcvnaeuiwdtcjcwg
+ebmymncvgrkqlusommh[wtkwqtpboedpdwaxoxv]iezxkyrvialjrev
+njvacohjeagiztos[afpmzgmxbvpzrkpikb]cxbsozlksnpvdxh
+wnpqmnhzhaclqkn[neseqjerkxmpddehzpv]buwoodytrhkaffpb[zpqzycmuzkevvyl]iqdqjuqnmddqdmktojn[ocbknhhzdyzcpzi]srfnmfblqrqzwtusu
+paxcryjinpwgadnzgdn[pedljgwehinbuvueies]wykembvekyliivgd[mjonnndjrswlfvlo]vuanwryeqmmovavhf[pouuyesundysqaxzciv]itixbjpcioinvfkh
+vmlgtgupmvpnwkh[cpuwomxbeionmrkx]zwjdjcytxjxbzltbp
+gxbttoltnwfholw[srbxnbzsdlwegml]ufeghhwivplxych[kesniuppshrvbic]ongllrrsyzxurhxc[ucssycrhethdlhyzd]jvhniomjxluggwtcv
+kpwrbbrusxmusejnwz[wbgriazubzccotlcdbh]dxnvqwslhdxbbufe[pobrzwumffnjxfghv]qplrnuqjguonrpmpv[xxwugdzbckpvhhr]vbrmirtrwprtqli
+mlonozngubrbmumjxb[vzvxodkubovdionkb]uidfhtqhxxsetsnvy[spdgbqevotzyzhtyy]mjvctpqrtpxrbqeckq
+wftjnmpwffdunhwr[nzepzikompkwgje]rahnwuphbxpmwmtwboe[wcwxzwqppyaeihnxrvi]wozbvaemreqcvsoafr
+lmfgslqcwpzvgxgmgty[ihjhsbvhdnsbkroszc]scwicucudbqrvtygt[iomkilvjwsofqnjqtd]amzyfxiaogrsdikrgye
+fcjsdhrxjiuugivwyk[kazerfwbmgeiituwksg]nalxpcedxoajytfpg[lldrwcgzwhmukpmsvot]yzsnbooxncfhjdqi
+ljjwrowxmpvvwvsit[lhezgrfdcwohtllany]huqtnutwnuamaahpwa[ezoifbtagkrzzjybsf]fehkkskjziztlravf
+qggqdwibskgshrkyc[bcqhsghufawaskgezjl]tikipezkvitcxtefpg[rwvlyjcgevwbikop]ygxubvtkciptbhi
+gmlqugapdwdohic[fbxygwjlnwqygmnxma]sgnfeprkyxrzspd
+gtokbujgojpkdtrvt[hxtbjjffjwxnpco]vaxogwcclwrodfdxlfp[hihtvdymxjotbfuyfr]muubeuzwzbdsydkkss
+rpqdqfjuutdfbaarkgb[nihwtvhhcmxwbgr]evovoyejllhtmpv[qvkudqduftuvccmeby]caeupguvwobwkccojl
+gxqxcqpcbqmscefvj[jodkjejtlvhhyrw]ciduukfamepbpemyol[uchoefnuqlolilidyp]rsjsqlxmjccoipqueq[qlxonqxtccxuwcnrizs]plzdntlmgcnrwawrxdm
+jvbbytsctqrwjrdr[xtqorzwdmhunrtevfb]qqxbyumulbmrsbhtx
+yoenmlwliczccpkolc[xsolpcnqbbkrani]tzczkjomtarfeqiq
+ogxowfxoqczptla[ayzmunzjrhsyyit]ckixtyzdkicgemx[hhubqmeqeenjuwuclx]zjhusfgvemklroia
+wtnnwdcuqnxduod[nugtcdeviqkajsqxgvh]ujsnisiydziqndzgtn
+eylerocwshewgerk[szefiobgoejulsas]jxmoefzlxhchgmspo
+nnwqedoiuhqmmbqewzx[ocxrbmgeqxsjeorfrde]agqexvigcnntkdck[vopzcxqdokfydsh]aajrpilxdhftxbprqn
+gieaqwfwcaktnyrak[ckstsfspnaxvkkecu]nywzcpsrpeypytm
+nlsmbjepecyztmhys[yseyspewhduijglnxs]nmttyybnzhxcbuvcm
+gzimfexrobypudb[fmrtikpcalnxzjco]qbxokzuhvtgzerkwgig[otsumbzbiecnrsfvgox]pnbeigikjxbnesh[ifovbpoycogawpmbtuj]qjoaetsrenrirpvb
+ybjllzyznkniidrl[txlisrbknkopgbgutv]rspeuydexyushei
+nnigaodunsopocfqf[fdkbcjzyxamtnwn]obloxevzqyrmswtc[jkuniykbwsytpivsh]ceuzwuogyqxferdic
+gyuypjyncazpjtbni[aietrzglhhgxscvnwvu]ccqmabbzdawwoctwywe[fassebimijhpenb]bwqtcbfdilruikksetv
+ldxvntffkplnjgt[lhwtwwfoyuoumxngqbp]eyoreivfgqwyfet[ylipomgffukvmjynvu]npvyofzmqlyboidqya
+tpnxkxbhphxzetonae[sugfadsgjpdwxup]jainzhhwfvgcljydo
+uzllwzqtwsmvdpoivdm[geidfnypnnnszjjgc]vtwpieaxgzxbslxld
+lzeizipamzynfflhuhz[qzwbfnjeulpgjjn]aapdqkjbpljvnvt[qhauhykubojxcoyuglc]tkflnjrdtjgwilk[aorfkrzlpuhgozwyhj]kmbwxqqwfjxawbj
+ivqhauvcbmbzijrl[lbsmgujvpbayaoy]kteathfvlzvbfzdgw[xkpwoqzbkbdgrsjzn]hnihhzpetldtahy[ocottuvddcefplijb]vfolexdinkkgmcdwfyc
+vqblvnbutgxixnfcwc[kphevjpgctxpkavh]riyfeqvpyvgckaselrb[ryoltaxliqsnlqdagr]shrflexwtlaivfow
+lreoiyjedxzdyhdnlde[levshlupfrkvdfdeav]ehfmfwbetbsduiudzr[uoxbgzrwlqkbkcwo]wjlwlixknhzeuyw
+abnhwwybagtjfrh[jaoeeifkdmlksncnjp]rulgazssxsmrrwe[hisspgixyvssxiumqtj]ohkxzqzkfnkvvgvrhgf
+drtqdxxqsrkujjyyb[jxitdcumljupwcmxx]kmzgykavruhbplvjjp[tjxjcibazngasivc]iuhgnmtzaozykgtedes[pproeupegraihkv]vuptfrfnrwopiczzkos
+kbkxcesohyjlgyynpwe[bkintqjcoqshvve]torkeaaagbkbxosriuc
+qklkbdielutwmtwkgz[dtruujvmzvmannceu]xmrwrcevkgapcagtuof[ebouhjnkpgmqairnh]trgbvkjhgjvqmceu
+xcoycanpxtathanw[xdfzqcekyrgixxcc]zpbmkgrykuvlldgzh[zltkqabodeywxhtyfkc]jzetstuqnplogpkjyx
+pirttznzezsktas[ogefjszaezeqipdhy]tfzgyjkulhtyuhnvf
+kxyvrtcpdqieyro[wnvmnmiobotxsispv]qyvdfrfhxkjuqwdtw[qolhrtzasgthtplihxg]gfjpittpnbsymvnotyj[znwgxnufnotguzwgwxd]rdmgzgfprxmavttnoz
+mubjhrjxqggcrus[ammffdekmguajiq]wvtsxaabnjzbekpx[thnwbdcskocytas]yimpbasvxqiylaqn[mrrzwqztanrkdqwvw]uvtlhtffzkcautuvm
+xbnvzradisweizc[ogurjxmpvzglqbgjlpc]hhujtmvfmcqqcukjvjp[wgkwvyjkwkufvventj]ehdkswmxyekfimbk[ovbdceenqmnrjeqvf]oqvujeqvjlplnzgi
+ggbrbreeteveahudoxy[wuvddvvvugkdows]ftzrwbghewsdfqaigt
+shelsgoglooyenhx[lylymuuhrtnflwww]muaexmsuihzdiyly
+slmxqaktxwfpfgrqv[ekjhbymdpfpiqvm]zybjhwobkrylohor[xflqcdxcgvqpzzdd]txshvtkbijbkbnsh
+bpocmihqoplucwnvyb[scxgrmfmuycybgura]yupkvewviiggoszst[suowhbqfktiboyik]hqqmqjvjczoxgeoqof
+elmexemdeoaajpjhu[kilercdwmwidrkpx]pvyefsmytxvaxuzsq[xyyhrtmwtglmcqik]spnsavadaexrodemqbq[wzzqmadwqbqbuvdxpmv]tuvloljoyhrqccyd
+rzngofliosgytzkunp[cyjzxhswcqeeqhmkjn]ymhsqcfuowylqtjrb[pwocjlxtfqsmelq]ezhrwjlzjtsdqorfsn[iekekpprqmwpdyl]aduyoxkvlkxejyjnqdz
+yhwdblscdqhpdbthaac[xadcyjrkldvjlntkxl]tcohssfmczzbomezqdr[wspvzvkctwmmhfujxm]fgxpvtsninxayplzlas[poflalkhzwwqwotgldo]mihbeaapilajefhlxs
+xgwckmpjphdwvzujv[svfqqafftzlgoifup]pezixwriwatkcez
+mfgtxxoygegwmitbzkt[qxivglwljmpsfzn]mfvhkhhddithgxaokf
+npkhgeapbthebsqk[bwoqhnxqzhkkwcm]alwpwqgoitrupvsz[yqvcrithxqfdgzux]adoiatxqsplvllzivzb[fcfyicpoiqaagrb]lummgoxyspqibxaq
+vikqemveklzlaqdxvev[tsqfmvvhysvdmlspknc]ejryfsjgnpmxcvks[ecwobztvirmokwcf]siwzbkgxlniwnmhzyhd
+ltlhegkfxhbndmfcpo[pmcjzvzmerxvsdo]dijdhpewjuwnatewmg[ylninmvyjhiqvicagy]cqrtolyldnbzfufnju
+mxsbpkqgsuhpvsrwzdl[dlrlhbdjvmrjwwthq]rqowmkoukgclzrfh[djjugwzxaaqtqavlo]gdzvdzibnckhkqb[xvfheuckvskmouv]uwrmeqlloqbtbfc
+emfplgnlzranlwxnk[ubuhxoejgoxfciarjtr]uzcfagjxdfnewbxxcb
+tlkmvlcqcbaqozlwn[lbupwjeefgtoovnrkkh]sdzgkexzxzcpdjgaid[qisspueisheejzkfxdi]inhxlauecmmkpenqqf
+fdtrgsgechhugwnidpi[dtwwiqlxgtadmnrtej]hdgoyjhlzdrcjzvl
+mtglmkersierfaishps[gilijizfqdzqihkbsd]ieqqthavsiqbkxvrmll[oxznuqiocyxjzymxm]epuxtetrnfrzrlqd[gooprerdkioisowygrb]zzowrurkwngpvvh
+tznoyelqlffpalatbs[cmtlsjviihyavtxz]lphzihbzjykeuhuzpg[xqfwolpahmfquhuh]rpqawvkxodxmvfhswz
+ybityzvtpsfbovx[yrggwxpkqjtzdvkr]gphdlfythiokoitpcjx[wmfvcehazqfxesy]utjcvxaybxcikaqgrx
+olqndwuwjvfqhxt[qfgqmmyeowawqckfh]ngkiagyxtqpdwbrwlm
+ukuozdurxxrvljkoi[eysjyckwyiyuopa]fconkkukvvmgnvyn[nwkqsifcwlzjurruho]ryslsdfmhgesmdf
+tlchnjfxtkubrlta[rsqsxplnikmqxsyhyoq]xcytyjjduledlzhuh[qudvljyfmodytzaw]hspqkfbkjtsvcwpl[ptfjakjrpvqcqcuhmf]inxwobxnnzfirnvgmmr
+gaviilzxljsozua[vmqvdrqoqnztbdmzstt]ufxaggbphqyxgnpcgzm[zglcpiqjhahiqcb]tsiqxcvrwvqistphkj[ebajnjrqotekcerg]kciocwshxzksmunx
+cgpgikxsukwvmwi[janhpuvmccsdahfk]rrmkjehchkefwnz[plbujeqhgjvljzkwg]ttwfjicxkkofysgob
+girkwjuugyxtovkjr[htizrvsispydidi]wqdtgvsfnuisigmalai
+ajbikjzwulcmizeoasw[pkkgiucjnrubiwqoll]gscdqocmpsuvfznqhah[rztusgyvsxaeqfmesh]rarydwrmadghrjtx
+hxpxckfcwipinrxk[morfsambyhipqzwl]wzgttlcuikfpvywm[cyebxypkgvxhope]dqazfmcgyppybetn
+nrisbenoupwrstlxy[uewucgmzkoyulfbt]bbvorytlrgqknqz[zwseofceynlohaooxzm]hfzyxxxfpjmubbjysld[tetgwcwvhctlndovx]jxflzwtuhkltaqmnuh
+nmyrirhwawjtgcgma[ilkcycomeqvcsuwmmq]iridicawanwkaeumbvz
+sunhpdrgrjztzvkxnl[mtztitboyfmtysqeqzl]unugkiwrweincocilom
+jhoqhwlkzccmtrlrs[tazackiqztlndogrmgz]zsfezvlpuzwmfwee[vcfxoionmgpezbalm]ujdbonopokhkgynmhp[pcdhdmwegmihhkh]dgjjkcyuetspltxpl
+siocivjbvwhltkyk[imgupkeeknlltlk]qxfcqnjbjtenubcjasr
+hswgnfwswhyngohhyvo[vamsrkcpvakzvbsvls]ehqrevmxiccgfsq[pffckymkoredwdpcmx]vjdjsrqxttbfjqf
+qemtumhnmgkgfzfzqho[wfluvctfqhrwznyzfsa]zriirahfdpleznfto[dugecvltxsfumxvjaah]lvudvknmsbudzxoadg
+mvrjzvsrconakgifqj[ehgbxxxhfqcigyhuyya]eqofdufzntqtsjukffc[hbzrfurkracnfeig]zmahsqiqbinnlhnvrz[qdajsuhymeavrqpdoy]nspfggpgnwnalzuk
+sejkhhjswpiqukaddwc[vwdsuuxtfaxqbrcne]njkrzolxoqpmmua
+fumcwsiexfoqklovype[bzxfxytncrmwtfrojv]bfvsmplxarmselz[nrnsymdrakyaqzwivoe]fpvboftrzvkemjgqt[akiqkjrmnvhucjcxk]ynityzhxqopnjpslhg
+msoqujlsilpcgchprz[gqdevmuryxipqcgfdwz]wxjkmuhjootmigfietn[flfcoqhksuopnwk]cewizdzpgetongprkb[pqizytyliwhnetg]uknrvmoahsbicmeg
+evyofxtcsyfbjtbml[wjqpsedellhzgmvk]emdpcwxuuaccubksbqb[krehpfhgyibfxepo]imvfvflnagwulpcp[cldtyjrcehkgtfyxnws]gaicllkdzufdmja
+plinmvdjkaswskiw[zejltttlwtcetjb]uqkwaifdtedvcmiqcs[smlzeqfmbhssmvvmvh]lgypwtxchfxksqgmeb[fqygohnnxmmvazctrl]rwbjopgpdkeejeb
+hgxczafqluesrmrtuc[jkowxyxlufhgbmk]zbiycjiafsngeoz[mltnmcbnsrmdjini]wtokbcbelvzibjncpat[dmjqentqrspifbnind]drpbucndawosqjk
+hqaysnyyigyfvzsm[vrqjwqmhiywsbblfrq]wseacbmleqwlaci[eisrrgcmewmlsqkremg]hfqkdkghomzddiaeq
+qrcyyzpfuupvipsuor[ujvnwghyvsujblbiwy]uofftaesrxvghupknr[divaemcywwpnkeejjo]dmgdiifbkggxpzmfy
+qjttccgwnqwdehsoz[dfbrkdapobhqvzom]hqtnzkmtiunvomn
+irxyxnmdlzgxmpg[ityfjgihvzrylygz]qollizryghyxjglce
+bnibapdblbaoehfbvin[kmummoqopswsmvtgiz]isaumuoiybqckfvkhx
+waimkuqinxbmazab[foxenwzsxkkupwo]yjelgjycvabztzb
+exxvbdzpyswekjnfmef[tjmrddaazxyynamc]nambmdtnmfhtkiyqqct[patbobzwiwlidazpoc]nzbneeilwcjqnxqwh
+obtckokgcgcwbtyww[gxpfdpaggfbadjvdo]trethfifqwrfexv[uiucztyublzgcky]msapdqrbpbwxkoeuidi
+yfhewfkbdwvgwvmhqbd[fqginmtqmkcubfvci]aidxbpzcktshamejexi
+jjjryxfwjklxrkhhcxu[gwwrmyzrpjmjtmfl]fvjaxkdviibxaodo[csagiwfbhogtnpixzc]miorozrdmimmefh
+tzpxkatetacnqzombnn[bwzhrlkgwcolxczvcbg]rplchqjvjthsortjqb[oyqjdlyeyqhqtrfbfh]munhcovgrhuwhvkjzja
+slrtmwlceytivwzb[xapqxilotekdngaekz]rzohiqiljdhennylmk[whtwrgrfpxkgqrs]rtlehyggcuplhrfwsvs
+vjregfcqrdxbfntljq[xpfnzsjsmphfbppf]kwfjfcrvygtqwtdgh
+mnrnbytuhhsxrzgz[nzdxekogduhxbpipobg]ydgjseiypncodnm[oylueeldnmgcwmqhq]svqllgtwmhshzqaxf
+xhcxtoxuqumfxatsl[qlkqdcziwtbclcph]ysfpbfueqmlluib[jjvxhqopyhgxgvb]flovcgpyjyubpbdmp
+nvpcfbzmykatqdpgpv[eywcemzcjnlhwhfbjv]gcnnnrxczlzbtufuie
+rhikymyqgbqbwgw[eeitheuwdamcndqibp]aiikebogsqexfbob[tcsuzyilztxrrqa]wutfkolihzuhbvptoqn
+kokyhjebbwniohsgrbr[ggsocxmupmielega]esekvzvbajssesin[ipwqyvkwospydzpmk]byhqabwpjuihcpgipx
+pizgcsuyqldtehjc[utwlsnwndcjqnndpppe]qxzxhkayzcicvstxiws[tjqhoiifvxdzdkigtb]zjquhrplvjxruwjpyl
+oadivwkprasfyitu[yygivqpjckczybxrq]bezhtnyscekflpszt[eqvoapqpfnmwddehqbe]mnkqjstlvogsipe[vmcrcaytblgxyarcrx]nwvjubzclcaxtdmgl
+gimpphsdpyklrcsbk[qphbkjzijutqysed]fpokchopspibqiyyb[owxliqxhpvjjqjzvs]ttjeutzqspjqklxsx[nvxybvsgtxxwagkvg]pximctvjdqxbodwbid
+xmgqacsovxksrfnypy[jjybvmwissplkcttnp]ksakyoqvswnbrezeze
+xoxquvrpgiiopvepjd[xakbfdhgtdrxixz]uuidqssmeiardumqppv[ewdkbrnwbodzzyb]kuyvmhqxititvvmf
+ujuuypsguepvtqiurq[psgjujogkcbqrtrr]ckjvvhzookepzzwyuye
+lwnhrcbjrjqarzdx[jezkqlffqqbioajjbnl]zssjjsdouwbegdbnxx
+jghqoqlqghfqdfh[jswcksaiwouxhnssqin]kqcasjkrnihqmenbqbh[mgpmbwkzuduzsmnjb]dxsvhizedmabyjo[rbupdqkkgeihkywitk]pcgvmkrlpkbqfhune
+eopvqwwlvntomltpv[bwkbunwyjojuxoteyua]arbceqrmsflnytkl
+rcgjbumerakfnebou[qimexcxydncncunkhv]frixowswdjgqndoos[zkjdmnsofgvagtnlyph]efpdksfvricswsrn[vxscblhqnzquxmxw]dxnstwznvmwyawith
+zjddycxtbubaliviw[cwmjgucnnrbsybtpxu]zhmadkawbwtdlnjwb[qovxqaebehomoacpxyw]qctfbtyvbabebup[bwqjuutjmbgfdznqfa]jzitebxzsshsmoge
+hogrxyrrvjayayny[kdweaxnjncgvxhpud]orhfjkslldcjiokooob
+jdduztuhjzvbooejd[mcudzrhxonujxksbibe]ybhfelrayyxuuhuwmyx[lgshxdlzxbzcwhuru]zdkvnjkyhausdby
+xsuzxmrqkqtxmchz[dmgddhaltnlpfzkf]dexcfjfqdnajuzccluj
+ezpxycrcxzxycllpyc[stdgybwrxfzewkqqvzx]sxivpekfrrrqlfhg[nolxlfvwwqvkhou]psuyhkfiyohkogwfmt[zxwiqmslanvyrquhqa]fereljocexswrvs
+aeogravcbprgitmqedh[yjqbxvjwrcrbyneghi]lugbamrjgzqaixjxpa[zpvvfxavievwanxkedz]zksdwfkwtrmtaoy
+mvchajtfbplmslzxhk[pmkjinpckdvwjliz]lwigecrikkyoijkeow
+fnwfspmlakldfdhc[ujbeoudcbtqjmjy]tgitkdutjdhlrkwbts[upqsuxqtzrmwgmbjqyx]ayaivsgiqcuzizeau[fiqnymhyqjapvri]eioouxtbfwduighy
+dcuvsezsqwjnsvlqzah[jjzbyxctqhdxfuqer]wztjqxgjynojjur[zkiosthyfrroydaykyc]ocihuyyzvwdoixygzk[psaghlhtqoptvsldbdi]zxqwrhusqligxnoa
+tjzqnocojjzktgk[omlfecncaondrqrvwyw]dxwuwvsdiehvzqmafo[ihbhwnmxkbkypmum]enkexramnrjguwuxq
+ftdnelzrwzvxobrhjtb[kwnjqdhwztogpvvt]frxznutubezaczhwucd
+wtvnfoqoqvuioaotdqv[qwzmcsqjvpkrudkdu]vdcgzytjsihjytaunui[vxnbnlwvtribvbzv]lclrytcczbraubnr[fptsjqwofyngtnurf]izhrnmwjxwvsdcfai
+nqmhpgsurlnnjikyotm[nxxdysiylpgivpuc]uofofpqgcbojfofja[gmborbfjvlfokmkjlx]yptrgkpiarzgsgl
+polwihnjvtlojae[iyjbafwjoxqcjbwn]ecidvqragdcuotbw[ununcsfdoxstecbass]knnitckftuczdpblih[wylrqjxehihxfvzjn]lpjuibfkwrcmcijkho
+gsvfujdbedschya[owwscbzhfkkymsfy]bbxedxnzigfiogb[sebiwzxbshqohku]wqmnnhmldplmhwnngu
+cvgevjryjbmodqfw[jskismdjblbsjgmhilp]xhjlblnepxqayxpw[pmifrcxnxmadetumwm]lvjmmbceghwqdmk
+jgssirdflqhglgopgx[epcwzeqqkidejdrw]mjnozbbmubmqooiqr[wacqyepsgljjipi]vowguayfwcghbghhoyp
+tfkqxobejvvmglhqrgw[ddleaoforgpypavf]flnaiggwuxdbldb[rqqrjlzosctaouurtsr]bduvfxlomgfdwhxj
+iwhaxbggngkgdfi[xklwprhyorwyfcyo]lbrfcbprxedylzpfjk
+ixorpegqzuxidsasn[pwuwcywpavudpbkmdrk]stfjklbehmjdobcr[ziugachuezezjsw]dzwuijfiexsbbxjcga
+lcstmefgsfxelap[iaroxcldkoxjprhpni]erzoueqtwtyftuvz
+gsnvneyjuacyhipd[aglvnvpawajzbbgk]ptnrpilavksgzjyyo
+frxawoaynynrnxzk[agbtdjypjtpqskh]ljshzsnnynqotgog[ckariglbjzvbcedrap]sqdkygpetxuwfnk
+nuxleplcklptuce[fxsyqwfblquzwqjw]ndnvzriqecbqphdoc[pmvfypuinsxgglg]vcgzvoddzudwrapmyh[laengialdtihgzitt]ktbypjipfpnczyqw
+snghsdifwlabsbpzw[xgnrqjnhwdqkbhowzaz]cygljjwohwpzvxuaw
+hhxorrjxjnhcavt[lkeigkktbiaquqqh]ernbnsmtunqyccft[jiespyeonlsjliwt]vbhzvdhvvgsdgijg[lkxvfabwpujiaeaidj]dkilxjpizbzeqxkzt
+ukgapmfifvftpexnr[jydugqlbqyhvbsmoxd]kwvttiyqdmyaxidts[lqfofueuycoihkxig]vqbdiqazwnqetguq[fxhgbqqsilfcaflj]oissblxkisbkmolspwp
+hanudfleaqpnnykwfu[kllfsqanmahiwkqz]mkyztkpwilxirukacz[vnwdxbzbjrcvmmbx]lsjlgrnzdilnkxp[hhepketmdumjgjjsu]zrgaagprkrmgggpk
+qcaodhkekjwrjeu[bvbkikapkhneodeaqox]xxshbrfdxgvyabbuj[nnyshhdaogsermyisk]ieutdajlitenkmoh
+ryfcblckaejcahgy[kymhoizkyffsxybzdta]olmhiudvbcfbkjb
+jryuwyprwczmcczi[vtijzvfbpssohcdgv]qizkalsooznmasljh[sdvwxkvydoikgjtomxh]ixzqpazdakfwczn[tyjorxvairghzrqi]aunhzwxnkjqryibre
+mlcynvuzmmcgoqkft[fkeqzbjanvjoieooecy]muvosxtjytdkhuh[gsdxscdehocmajsnhn]kvqitwpizpjwzmeb[kpnyyoozocsxurfl]obfvxcgoavxoiyy
+tunaljqogcgofeh[ivxhcnvflsbnmktk]akwwtuwpdpbnesmrklw
+hicudrdjoglrnongron[mxaxjxojmjgutxg]tbetamqqcheyjbpa[itozzzbcpnyerpth]brqcvektqfaxazdfivl
+pdyuonakwvugssuduom[swhnhhzcbkrrpovuomy]ecfconssgftuhtwswfd[mjdgnwmncbjoxlinm]oklhmwptexymbgyfdaa
+hcxljuahgmiolty[kulhszpqyvsurma]xwknankkjfsieauadw[anajqqpwdkodeaagy]iupvtabiqsykmohiisl
+qruhviuomiixcoarv[idffbgdhamsshlinl]ygsinapdnmzvgit[xinvdhbqhbvqrjx]zdamlvlunjkkhof
+zyeynxvzdmmiybab[vhgjepcwqjbolwnft]aopzcryhnpswgmds[yynbcrcgegnrpsk]munxtddzxyvzwwcosq[igdwjifdopnhwzv]oyebiutkmraayzr
+onkgxvprjaynfipxeum[jjwmjcepwxbleahq]ofvhiwoyxmfnjbn
+jdwjapulavrgiviora[vnwjfwpsfcdkhamtg]jqcgsuleganytwsm[qajmdsarjnocjpq]lxpalpkeehxjdslu
+mzyzoemluwoovah[bydwxptnmzqxdqfgdgk]hekhqzpgilidwvpey[ouhnrujqyhnlilh]qjarvqynycolakyiu[wzeffbptmwixrmr]bowqsnjgurjpkuc
+jawvxlepzelbjymcke[atwksupwtnjjnkwe]xqqcmguandaqptp[yqsfhnssllituzzwa]xbgaqeuqtnclehgr
+xumjolgnaowjdoq[obqxrncwytcvrsa]tivvsxdntkrivblx[nfiworqsxjvwyki]nxnpoipcjqeeukx
+svkoyidvkhkvock[htgrjltotuunrwka]uqyezwkltzsjtaysa[tqaaskeswcllblpnozj]yizblbkqgvblvqghvk
+lfqasqaubbgirmw[xxpjcwlwjsklklgyrk]fwckfwwekdgcesswh[xkcxlxtanadezjpva]naodeooepetabkh
+mtbhzeufmgeskqsp[deibjhufkntahso]oxebgcgzvpudozi
+epuzizxnxpmgjkabqfb[fmteazugbgjgozgsmhl]conlsruhnwdekaxf[zimnpzazgotaghhaq]gmkwnkivobskmeafcck
+epbvuluuhaazalp[dtsthsijbzgbvwzwgpo]blfatalfityajcpmyc[bbypikyeizyfntdt]tcnzahhiwutntyt
+vailqzvutssuxjy[llxrpxlpcojwmab]kqpqrpogogkpefajeuj[afzpfhjmpnestctyqz]mdggrbuuglbmweujgxl[qhheeepqrcbdfhlxoo]lxvrdwpugjperwt
+roreocnumcerxnrhr[ricaoyebqjpgzazssc]xzuqnzfgbrcvfnmpcgs
+uludakjsmsamkpmy[ropmbbvjvupftps]swngrcigiqzdkie[hjhbsazzxdxrseczxyi]pjymgjgdksaalxbav
+ftvggoxgdteaxbrq[tifvvmwnraoiprgs]xopjvpddfjnbmcuxpu
+buzursiffpqcwnlsl[plvkitdlxiyiotdk]anlvhgektgbpslsiai[gdgwwvjcdnywwguf]bydbjfxclhxyfgruke
+indbphvhghzxsuy[izgrijghgwhcooc]gkaqbcpwwiyfwmv[xxlzhbqmxquoawq]gbazvlthqbviupchz
+qofufmkbljfygwxym[egvtczslvioufuzsyk]uscakosnjpjbcrggach[gnyghyvmgirmwolh]rotkdpwevcsipnxjokp
+jwaktcuuojllglwmr[dfntqdtznawzmzgwbj]gjykvnqmtzelkaus[eghpxrcnnhijhev]osfvouazhsijprtbtnm
+rqrtzzgqsnzzfntl[mrleyuyknyxyjhoibf]mwxfdxpeiyuhjcbdyi
+xgqwglrrdtupbjlmy[ayygnszmebgddghqg]hslqxsvijohmvklknkz
+sfqhncgimlzgjqs[vsudwekhrjuwjgig]fwkpceyrznigiwq
+bellebgmjpcruwv[njhctgeptjieourukf]sgybshminsxktqlfxr
+mpwnzwvblaseycnljze[qhrfygccokretvo]ydomrtoamoecceekrr[lgslvkhwnmsovxvhqhs]cbyuvbrusqqpvkmlhm[wrvxwjyyzsvxvxwpdq]amynjoncmemftlnqa
+iniemtnmqwdmxvpicqn[drdrbflsylzhzltq]orjcjdsbzijkfwhdhz[mrfovzdsugacpyvlaj]azjikxjuaszxpapss
+ynnxsnsrjdaqbbaa[lyifxbzcyzenzpzzulj]xejnjfbuykeojbeatvf[uhpeylmwgllqxtj]hirppxrtcuybulsuek[tzbdcyvsbmqtrzbakxj]kzpsdszfyuvgbtlksus
+ujrrrtdxpyhlpcyxs[molsrkbbxoexpbqhnhx]aesumqacmujuchpxv[jlwaktyumxuiyvt]mmwjujsvuvxsxxmsfr
+uehksybnnztmczl[suqgywouppzavyoi]zbndcbjuexdgscb[cliuxzpullifofbhgy]kupndcjvxqiavpk[hqgafivwddbbepkvjj]lrqalseezuhjjbkese
+djidmbcuqbjpfolm[cbbrttiwmetodejw]ghgnojuvsogrchwfp[qpikwfkqkfphshxbmxm]gsinzrkbzacyutlxso
+nvvjtnsnglopvcmna[opnjujeqmpgipfm]rudoacagklnjajjye[fqrtapichjqkhhf]zpkowfxfuoecvzq[juwjiqcolafbxzsw]fogkbzmrovqvbxbxeb
+ixciqkqggdxskbso[wkjptmoonusnkzyadmx]tvbhebhhaqhopjbjqht
+gepgaafxcogfkyecgs[jdqmpkhjkqefzkwxglq]zfpkqukaelflilmzwph[fndatrnmtrwgbwpj]bndevgsiouveums[fqxvkjthzmyryobt]ywgqodizmhsymako
+gjlyyrwgrugaulnj[zwsmlmyahggpvugef]ppqrrbxasqowhwz[ngwudjmonpelxhubwnj]ucfcaicagnbvlboiwky
+lfckmicaonarlbnu[qnigowwaziwjlmf]ihypnqqozcilwpm
+xmtcgkcyfjppjwaa[jlzhrxmfyfjfmadttpo]vucnncbadihuewzn
+sviknjiphswrawyskzz[vlsdhjduekvalqgwy]qlvefwhnwmxrzgxq[dwnapnjsuiowoqjts]pnepuekbrlbsswijr
+fknvwkusyvzledp[qzplkidoxmvxrxcfs]jxdhirqylkerndfd[vlqmngoqxsbmljcle]rtwemwvqkpfwfri
+cujhxofpcjpskrgn[jxxgrxhgnutgsusruvy]dewdqleqewbqftd[nfjzhgvvqummwzhyd]yrccepfnpbehqei
+dmfygizbsbrtgnzam[xdnnacheufcqahvx]rxtljkenkwxgkhrwos[xnxicyqemngzgjp]slcfzksterjpmiz[okdqdoipoqwcoyfyamu]cmoedniphnfddoywbne
+oafdrqypmxjzxbxutj[yzlsdipaswmgyay]xwllqynhfregxpwc[tjgxnibylfayarir]phswgvlkkfjjetrhdl[pkcutagssxligtwbd]xrvonaibaytcqnhgc
+ivalpefzoxwoqycavx[wnrysytaesivblx]dblopqsupplgoom[vxtobrfntcvixltcb]kzktacrarmtwuhkcoin[eviwodeyddmsfkvhzue]drtrnlgrndrxgcp
+aygkprnkwdzydlmww[firwrjxyrnqlvycccg]lcqurfdlcrvbzctz[cxzfxjybrqysasrppqr]domoafryutthljppcg
+uowwwiqusrqkpamdm[cppbcnmcxpecyoey]ndmdrcadjoukusxjfl
+mueapqgbxuyuttzaw[eojhbogjbfdbhyqjp]sxsjeclolvcjexxvxij[zugkiortijshaocu]mfayspauxoxdwkbj
+swusnwjcduzzhsjhykq[jhweoafdbntsmxcg]fwqrvlhlltfeygpcnyi[wzibgavydimypgdao]ocomuevbncyimhlbppq
+vzatvkicsxcmgcx[lembxneuonlldqupk]svfxiuungebjjgfre[ijwzrpepzkmvdwrjck]bhjiggmcfirhzyjljkd
+nlauzkixeqoldqwd[dwvmcwkqnwjlzqscj]hnnwnarbtuijzys[umpmhpnsrbypmpulhf]nijrnkqfvbyjfvgseaw
+gefcvkqyyecmnorr[unfzknqltdwwrejeix]quyfoemcjnbrarjuowo[znhhaogjluucobyvq]nozfnuqwkqrcbtwujxt
+keerveohuokinft[vtganysszjzosaco]ufsxvtiyupbeddibmt[wrlgimiwaspamrdp]wdjcaxuqikgauum[jpwldupwbuuufjnx]tumqrmftbkrmohls
+rtgtdqksqxgvgxadbjy[uclopjtrzpccvdpjq]hiqaonacbzvgvigg[dirbsktzndttpzmtznz]laimumxqrcnhoitaokp
+iqthbpkfocdhsvzje[jbxkmkvmrbnqjwlp]kycbbizaasoayspojv[iojspytksdfugqsqhvf]dlkjrsotrfugfft[zuzflpijcwgbioujw]tgyhlfclaxcsjnavdkh
+lmekqqiuknygtdo[ramnjnqzfihksfpoqsv]jhhvgphkjifxgap[dmpwxrhmhkwfsfgtn]mfzdjfhxmkrascd
+fywgfyehgheiqhbayw[ntuqlvjvldeyzokdepc]jrqpaluvezoujks[ijkurhccihukzuis]cljvkxweuvldevt
+udnphzgdlussuatatj[phfqqkmuhvlehlo]cyvspnwlrcmatbwoua
+lozehtimrottjudo[krocuifdrqwhsmm]uhauuuzfssimtfl[lyshrfrnvlueierymi]xogtepsflxfwcpau[nurlztguypvwjvoldsn]yxwnuqtvewgmlbfj
+qkioxzfrxxwbcddg[iecvjowpxnrevqrhl]qxpciafqndxasahsvoo[adfpiuoapzqsasajd]lduzndmefgsvzzdpmcg
+klfxwvnampkmmqjmfc[pcaeswcdleyweirmxpv]jnwkgamdjeoakjcnuep[hjwzdndjlvqfzkarwk]ewwgtcnyjuczgmyif[eaaehzgwbkdfbcgbz]eeioocxrjsulyuj
+eptlgbashiewmonaaal[ohtsrundioavfrouii]aydjhcanascnanbfzvd
+ikhfkzncdqyitenbg[ldqqsrhumdmiraztslw]aydpjfypxqllkevec[aponlfgxnzgcaddwt]yxlzqyhbilnsgjen[dwdrsgergyrzumtlpvd]srlqivkdhbdbevnq
+xpjwxwgiyzqfwajto[msisxrvzebbtxiv]zkuujbuznilsymuuxq
+vkmqsygowhcqzdxlslt[fnaztaplxaputnm]ykkslsosxwczlrwbpmc[orlhcrbdjuujhaj]odtfvozkxuwqdpsm
+qqxdpjpmujaveczctbz[gulkmdfhbgvyxuyd]jtxafmzqwqxauaxjt[jgfnrwhgdtkwdfgt]unidfciwdvpazpgfa
+lfcczmpjpqgqonvcvb[iflurylkaiuflxp]dbepqquyeagxsmrhbwr[vjjohmujkozstni]suvejhnfwknjusxgxwr[wkjnfmxxzwulujmw]qyawlzkyazbwftlw
+uwmrxdaxrlsvujdjrm[dmdnqcmdmnmnhhwicwk]uowycyvqvjwrjgtpfqu
+zbxlifyzwnwujvs[pyyyjxylpmpwgbh]iutvnonqqqtbxisfopf[qevehnvgqgkyfuqr]mqrcuibiihlwdrzd
+rxlnsbgsuofdjgifrnu[eougczwqhpbyqjpo]rokdsivylwcqepdyhfp
+yhzwpokjwnqbwtsxuh[ekjrlmzyakgkzlemnxp]gbktdprzdyhcifmigxt
+ewjfrgfxriqmbvczdtw[wlbdrngfgnwdvkt]vxgbaaggmwndxlms[vupgwxfgfpxtnen]kfeekrdualqqnril
+awkkejmtiopfrqfasgn[alciuobkmtbxngulv]qlowmadlrlapsquuhw[hhtlyfkusvlwunbbjod]seacetmksrrodjqdffk[aunntgaemlyoabfgpf]yrlrzbdjfejbmskdtrz
+uegpnmuaxvvpcsuzi[pxcbpsgaecuqyhvov]oiyjoyraxkymelqg
+ffpelsnrffyfzzfdb[ymtulkndbgguyivf]uauzvyseztbkdvxow
+omolchhfvuuzzbodx[zhvhxrqwbdhfwlnn]wyyrsjfjsfyafjfpoe
+puihcjkezjyjjfl[cornhtqjyqlebvqyl]dbemzlxolqxpzoi[qeihkchqoewcabbwog]rlfloutfwlcjywygd[glqjydslofkcstjxd]oxcycaaadlnxfkl
+hbxhlyelfyszkzyc[cdxcsyocdiifefpytl]wxefesokgwwvcrp
+vdqcqggyjstyefs[yiskvcmdlbyuwzdom]cwmntthjhfyzlus[dpoubuwkbwrkpfvlgf]zryvvtowakcyclcg
+kcpbllbamycbuynia[duyxsbzyzibjwejygq]mszplxmgtkqorlklg[kkbpzdcqtwkteqfpm]nvgoipyzmaxtizqkxk[dkjpvseaxvosmsh]ourguqaabxzzovsn
+ovojqexhiiwdqunfvpy[ijzonrwpmtbftrqgs]zkmuxgcckijagmj[oygvczrrilsowmxrcwq]jpwamodaidqrzmal[yglvklzzljuqykuxte]cifhyowckekufubnmu
+hqsemgdtjpiikngtrd[bqryvzqcejlkziqbeg]gycysifcawyjyeu
+tgdpvbxtvxlyqvouu[xqefdugumgqctwvihz]yxymyatxjpknmpb
+mghmbjssqzjlzlg[kilmyfmenoqjnmwg]hzuujufmwyperhvdl
+ieqarqlveeycgazb[azjmtbkbixtazbcv]xroiknhtlbefpgh[xnhgnpluemfqqkxg]okbkpxswfoikufwzazc
+phtjaokeiocojxb[snjwozbjnpwckhr]cjwsbiopkgqjjaz[rxkobmvupvjvobifvx]edubeedqalxklpb[nyfuqcxwtynmofmfg]zwdaaonmcoczxvfr
+fddrwtloipcoigpruvm[nmnolrurottdlkhfwzy]dzztqofiytbyhhzwsy[ovdmmhigvmzuuji]jirdnbaefkkdpgi[orlijsvzupzadsvi]mnmwussnnikjigkkr
+gspafobrohvirgeaxdq[igehxnlnjtwfcuc]aeibhshuiyekgcymyty[xhoayxpksnfvdzjwh]ktkoteqwnsouvwcftyu[eqfnhshsnakdnxwonzz]wwfzvzaupuirropirue
+bpyvotpfgrefzidpn[pyvnycicdpcutcayrv]twcjgpggepbtnute[fdumsgxervdixwv]ydccutccndbxxfjrxh
+okzxxrtdrfviychsj[ymguzlptohblvsj]ofquaojgbjuxhkrm[ingfugdcfpjtyoj]xwplthdujgksrosmv
+jbwwuuqkuwrrzxmuwh[hxqptnyqwndsntckqex]mgmaotcyybmuihu
+rojskmdnydeouqz[cdmuavkcabowcozhe]znwaohorcanpbyhjii[gkpcxjhxnhligil]qbzwurxyzdakgsnwvh[ettfivzqkrrenpxmsj]dfbcrgpjbivcpcpcoqr
+iztjhisgpskdgwxwfdq[avnaibsrkfmlavnyuce]innbnunmtkplvdhq[lxexsvmjqjzpswjyrju]adcnelughetzceb[cmafkyaouzplrel]iqhabfxgwxdrqojp
+mcxijhkidamijcggv[buvpvujncpcwxvvt]xortwrcnebozerevim[ylisqiexudovelmczm]sophxrbvffupehspu
+tdbjhtyvoiflmgdt[lbwyayxikccooiw]rbhpfinzxpaayibe[twvandevzmehmiiot]npuymvedotdclzovsq
+jtfyyycvwwukxvfbpq[acoshjowooeituuy]xicaiqqcrtpkwtu[lnnokqhsagantfsyl]kchtjwkppjyxtwjh
+vfzsxxvmxhdpjrlm[wpzhdncopnapfijmlcr]lqhsravxxgptgjs[wwyuluteptkhznh]tthklcbbtbvhauug[nfplnscrhldnwtdyzqe]ockiyqmpnksijbf
+dlnpcnognelscok[ibbeqsbqltfskgcgqb]htrpytqxmucqlnane[vtltdgsfjrwohtc]sbykausqnffmqkv
+kxnaikbdqxcponrlivi[pxltpufeegjrawwanax]apuwyiawecyuqhgjc[vtenugjmwgebqzdt]jpstgvxeivppyaqwdbh
+bjnvrqvazthxmzqe[vhhndcvzvvtdjpu]xvyoyqrjtbnonsstb
+rglwwateiuipzihomf[rvlceqfsjsdeajp]umwquiuviykogvs[nyxtxtkhyplexemcvjk]kgqhfvraxxybvapgs
+jfhopiiqntjmgdsj[lrijxadhlagitvp]uiwltkpdmqcvklmj[celhtexfpelokeyl]jucghcilfpxmuhsxlj[lnzbuosgycapkcujcsq]uipyywsuzrkxcxma
+zbczjtvnmirbqohanm[bssrqrthbgrtjlfdeyh]sajloorydqhdlpfx[twqasimfthlutzbvc]xdyjyaewqxknvdz[exppwmacezbuavlhe]cldjcsqujgldchzigys
+xvhlvnfixnvekmxfzr[mnmpxowwvahbtuiltn]facqroxwyyelgbeupk[liawlvgwyfizmas]yxgndlsxircarikrb
+yjisbltbmhloiojwzy[uiqmflerfnevkzvnfmy]kecwgynuudxejjvth[joscliommzmbkqcqa]pwypdesmkawikue
+hsiwncahwnipmmjwspf[icngtprynzjdnsgmh]htclvcobutyrczggpic[saypixczichbjeve]jmpwkwrnvhjcpglrul
+aagdbakqyfriiolq[cjlhszgovtyhykgikl]excahvgfswdnpezh[typkmvlnkgjkmherbx]zuhrtvvwvcvhuzalde
+qdunnnxbbpkljlj[opuhjxcwbtvnyzd]gqsaxqcmgmnagnim[sbbkqokcljlriqvwlj]vvgscumyxkrpmyrwz
+drtuyztubzingcdvpy[ichljckfcgomhcfah]wpkgosokfjvzabii[gufmzunfeecjsbgg]pbtuedlavgbxdqq[vbbhreveuzdzbjygt]kglhdfghynsujkvnug
+iccedgowicdllievwww[jrxauxixbmexkgfvvz]fysjaucelduzrxp[kubsdwfsoejcskemvl]wszejdloyalatpjq
+oujirnbrjgnlqaksps[lphfkzalpspyhuxf]kuscphbgysuwhwyhot
+vwpxodocwmfhzkhyf[srbxugrfpcalangfdj]bopxssvinpngkthdqyw[vkkyaqsjhizvounptrb]iiwhyeuatcqnojoidrn[xiuphhwusooiewosd]gggtfejwtpburzqyr
+ysoiymdfphxmwlmlbm[nudcbwwqdfabqxc]adsnqcsxmpxwrhdwp[kullnmgtapmantsqr]ykmzsizznrmofzmy[cxnrxafdhfprlarkd]pffnyurmoaxrpvd
+pouuuowcgcsgvuznt[wvbnsxurcwwxhkpdg]oncpjgpynhzxyvi
+vlyfxbogdlwgzbuy[bkgdkemihxctcppam]ckevcpesenqjadifwz[smxfhxaidkueomhxyc]qwokiceophbpdyjovvy[tmzeqvagzhvviakrh]hionrvofdutctqdb
+upsxlrmcnqiikdzhlcy[hehttqfmtzwgrmxfo]irippmddtqadjgytw[zkxutgforgpenbx]coziqjvbhjetosrtek
+oewwtzgqsoedpidbn[rjmmegjghjfposhp]tgddsmuqxnvfpopcg[iwwvjgzvbmkhcmlhm]teygdquxhyhkrtiyjse[sknqnxtiutqtavvf]bcqiwxuliuhpeto
+pdejprrltzgdddqhod[jgwgzdgvdopqgknwbqt]jaxeauvefzuvvgxlid[fpahofmhzzirjuw]enbiyknxsjhuxzx[bicvtjwkkhelcgebywj]ldvpqmpgzvihjkejl
+oazlgrzhvtekbje[rcnbajbbtikrfapsnuh]gtddpwaqibjnpmfhp[zxarpxagmnzespusnm]svtfacsjwezouqnyfa[ujbucyylrrvuijybde]bgumlrbysgompdeo
+eyescsulrvrxyngf[wpzojptmtmqywwvdz]oicscctycvplkhsb
+ecwhdlfufxxytti[tjpmriwkymqufurtux]kvcdcihmfxydmxb
+tmlzauuiszcwimcvli[vnvyjnebqbpoaotvcre]eupqvhojcmoweveps[cmjkegzrkspdwmdyuo]rjcxvzssaopikbi
+wmgjjrccewrspnkcdg[kqagiunuhskruqpsmql]histajgekuklfzmu[caldsteatfkgwqogjb]hwweftyntccwfmw
+lvwovmvymkxwcvuvuov[sxedhxpfwkndxgtwn]jnpctsvjkqsybbfy[coophwmyxhbhjjzvf]applfppvbrejnvz[ipytgyblyicrnet]ogktxhleyrrhjwqqt
+xuiednrxcdyejmgcsg[mlmhqtzingaekkj]xmvjiydsuffmteb
+zyweldtmlathqbd[zsskrkndiopdfqocigx]mpflfwtncuwjcnnvhf
+chmlgfccuyimavif[kpgcuavqzwvekmahgxu]zrrkiipozbierayt[ooxqyjdkmmuaonht]qhifgfwmnavhlgnz[cnbosuyqrbqiuye]ksvsrroennhnxup
+agxsrnpuwtpthaijwgi[fhyxwctpsxqkkypdfie]craulpcmyeifxluxu[yypagmcumxjcraxnvpz]zdgmbgteapcjwwzaive[rowspqgmcvqudjxm]qydbkwdeuraznvzzno
+rhlhblmxdccpvudu[jhbawwnkolhlfssiw]rahopqrzbhdivhkrl[sdyjjbmlxlpcfabw]olocfasvuwqfxbbynn
+xzbhnrzyvfvbrodi[kikpaqjccdhwfmjps]tqeliktvbjjnbpxwtq[jqjvumyqcjodqippp]ufaxyqyvdhjxccwbsfe[pxiqyqpvccnocmbinr]fqjralzkdemnowygd
+lvbihonzfclpqyijtk[tzokuoeriylwwjahfud]vqbyrpbchllhsmeodxl[ktbdicmiebbpuxnyi]guxcypoxyjhshqgshs
+nnmyoxtukxhrsgt[ecovrntpmkcaekonw]ncfzdxdlawbwtxqpkik[fkkkkxidubuatpihcnc]wqxmtvyakouvijt[tjvyhgempiufanh]bcibhdmbmbmmbyyi
+jjyiltmpfvlkclthbz[icijdepekvlffegr]xnmbqmdiaskvieeudt[clfecicrgtuxodur]kqcqrnvwfdhpibndt[xsieatgypudmiedmfo]eqaouqptjuohpzbxml
+waqqyhmfacfjbfasug[mbghdrtwrqihjje]jczikhpsasvutpmb[obwkagptmpwgjbhev]ozwfarybcfhihoku
+tocybmyipesjprx[jdsdjyflopvltwsccxe]esswfgrsjawbduxuu
+qwdwzgezyklxtmnd[uikylllxmtfhnwh]dmozabuomdvhcoz
+tffooggeeufibvgyy[walfmmmfaegxaua]woxfjealuwsjajkk
+aipayrjoievpqkqcb[pcnirwsnebqijke]ocpwinpdigoxudcksgx[vvuxytomiqmmacndtk]lkwmarnwqvzulsxofid
+jwrefdombiesxvvap[fwhhajyhfaqzgym]gersxvbwsbqezoxcg[iaetgujgempehiaxx]llbgjukufbvdfxvjs
+hexdafengwxaarjkqhe[brxnqkfcyltwlxc]tfqwhqspdfcgajfzlak[shtfaywffbchkkk]txpanajvkwazozn[jzfxmgozivlbctstlz]paxycypplmjazycksx
+rwttdrhdouzvmhalwc[ozryzmmhwztywhuif]favxmwzmgawjdmcho
+sndufqsbyhdkyathrxm[spluzodshkuiqhrm]gwctupgaumdalep[urynlbtsukjumpcrgar]mvgkstgtaxmtiufho
+miypgghnpfhpcndife[uogotzsxnulstsucja]wrdogybnlkagqdtv[uerlwvvqvxrvtsaycg]bxpngxvmakjdvvdqfed
+hgcyvldphesdmdma[inomdckqkhupvxmc]avlnivtukipmdmts
+vgjaofvwaodncajhg[wmqzkrqiwbxdfsgdc]uzsywyzfptypsbto[lwfowjvhczggllfrw]nwchgcixmkxheceuq[eanuozoreimfpjooin]btyiwwfizhdbpfazpjx
+ldsqkerydfisskoimys[ltqspskmalvyujfyrqt]dtyknopltmnvdtc
+ekrdpdzvkoxfkjfpx[dpskecmtgjtwkhi]nidanbsojuexjgife[pgpitenqczwzafdad]mfcmnjodtkvhbknfto[uutgojscjiffmofegr]rwirhlyejxezndbs
+mhsngxyweukngbybc[uiapxfrpfptauhiw]ruywrhlzekcudjgkw
+urxtzdmrfedalnuuha[ioeyevidklsxpqkaahw]jhcrcdzwljhnudk[dfvcwbualikbxihqg]rhhwlhcfpbkexewpgn[gkgaygbsxboxypxbq]trsaulacafchpndootk
+jmlhqgixgtfbcxyt[vhwpsfjufpbampqyqa]wwzszedhhdmztex
+exilqpohtavxypsco[wtjdsrkpmulcraoaooz]ozlzxumlxhyyvcg[btpzjjbgjlydtfq]suniwwnwobellpbwd
+glgwpqmljnfxjwsgae[hdnpgizkkafrkqfalpg]pskoghwqhabbrazqtgu[howksatecaqyemgxpye]bvrcfhawviubspmkeon[qciouynjddffdlp]kruofqzvhiaqbtm
+ekyqqslkiuaxpucbsj[nsltoiyaeyfkygmtaul]eryfelvxmeekndddu[waprjreciavpzzsj]cppczdrntzrrqpk
+draegnpszalplun[jwpjzjfpanpyqcxnu]lddilnitonnehft
+afwslsdmylslwvekv[ngnsirjimcteduhmbia]utirtwchbjinjtkp[xtdywavaenpcexfi]fsxuipobvivhpowgioh
+zpjzyqnadncjcbgulq[wtwvealiuqmxtmgbsu]wyjqglyafposcrwxue[xqmgfmbrcdcjfmazd]hjcjhoqisrvxdtiefm
+nlchdiedtvmvrwq[aeqiwviurvdlsaxzdy]vrjrsalrqznvzhwxpjv[ghsoysknlxlzbqjv]cwklpwafgddnupknr
+zxqjiqwrswpnotkjm[vdlwfpqexfvgzxjbsdl]avnrytuqubaojek
+oklkhatqbeccsctaq[jfvcdwlampkhgkjw]hwnefdbhaixemttbk[xbnquvzqozdzbntm]rpyliiqlbmravsu
+dazldpxyqjgbihafnl[udnqydjynzfllmxayne]oasevmgbxuvgxtmurus[alpxiujmrobllilgb]rrgekfumvabcjzmh
+zoojpgbyojsophrflji[bobvppelwuyynrwinzj]kfsldwgeqtbvtsfy[icdvpxikjxhdaipte]kxyxztmtqiksvidn
+ensxpontjxipkckasr[bdikuxubzmiuhsb]rffefjgowtxzjltz
+suqgbqjkbymetile[jmgtojqeprpffkogv]pnffnorgbyrwddlm[pozvbivhruebmmjwogs]fuleotnbbnpuqre
+yjwcijeeaqhjdmu[emqntgsefvphvpc]hddshsiudkvrzghal[aieudiuufjmtihwli]bbytteummcluoygddky[fbkfhkdwubnigzvl]phfapgcqrshmwis
+fbqpgkdmhvtjmkepui[harjpumdzotcylumk]fglgadntxizpjsy
+iforzbbzeepoddbalyb[cutsqxklmoljnexuaxo]ajmokylzrakmmlxcub[rximbemhrndnogfzf]pokqtdgeipqlswvrim
+umtkjkgoyutnxym[nizqgpcfftiydbqutr]rzgvklegcqnetqkg
+zdykayyaybkihcyc[qgmrngcbixqqdbvx]hcicjeavoycywax[bkjnxvfknauougpe]xjfsxnxlgixldzb[thjemtygmoazibfsar]qzdtbduakjdqteckq
+dwwceyrsaqrhiadehmw[bushvhvxdeznysxjr]hnrekmeoxifqrsq[ynfaykimagehxbcxhka]ucdpjqxgcyyhvhobmdj[ywcjwcveqtzgqkzx]poruhxqfxuyhgqog
+mcxpgupgbiznbdjjfzn[nxackwalqammtynl]qnrwciginnlyfxiyiv[hvovgilkgigolcolf]fyqfptzmgmzbgkh
+kwzvwimdnfngglsqk[tvhytletnpwmogdq]zjndivdpftqyecxhnyi[iiqioqsyphxjxdy]diyppzzxximnlgyhzh[ylyboefbsjwjkkxbar]fuvxtvpoyomnkwjwsg
+vlcyiigmifwxnvcdw[enlnmvlfghlbwib]lwsaxkcpgluzkmx[kglnyaprvaagswvfg]vvdeqkfdrjeqhfp[fcqxurkfmmorcenve]copdpqayaaolcox
+rxjfsazvypysbra[pwnsoibariykvjgubu]nyuqsygdavnxfakwlm
+kkgyhdbiwyexyhxgd[aigctwltgdrvyxbs]xypkkzuhuzpxygupvcz[lwjjxozwzniiywpv]koyfescfdlnyzhcgxin
+cmgqspcojjombguppb[atincfnafdmbhtgzk]bidgxkkmgvgbeilvk
+fphcdhkhetqucchmtm[ieoeogxnvdaxsayhc]xeigwycormzmwgf[cllkxjnlkjdinvouy]ammsmdyoyvlpldkgy
+pjewtnwxajalxzrw[sreuxtjgiwxqmsfkj]nghqriebzmyhgcgoks
+trtaefztlkjjzbxpip[fgpnmiewbmzvqfxoikc]wpemgpznkrerwlgr[ptjdchwakbcdmrjwxnf]unaxvqinaglgfeoi[ekfifzrybpfkjiehpsi]bxkuqrbzgfctzult
+oyuobptvcbpmiiw[fhefjfnvmrpohae]uykwxrtssawavbuk[cyabwfmaxwqgmudcmpx]vahdtwpzvebiypwjvq[twtyrryywtwsckmff]vkmzcehpgydnorxo
+dbgblaadftjartioq[avryclynyjmceujmy]nsqtusikmlamzfht[qmvmgeprwbsokvbzmmc]ddeuxmektypsukme[gqzmpenqiqlihjqoceh]fmsjcayltvsxycmzv
+ixacedvqlzvneoqus[zmgeugtrxuidpdtzzn]besixpupznfgvqelwxq
+ausrpqkpblrplbq[pzqlirofwbtvjvoua]yljvwgnjvjehsyjd
+dmreexcoqmzxelfjeib[zaghgfbihozktuebhb]vdwkqxzetddhhbhhyd[smjdjtmnswvdeuyt]noyncdtfrtokngqld
+akpixaofgmscjdmr[oiothmxmcgwvxmx]yjiwdlhqlrqerce
+deyrfnzcctnmwjagql[qgcmtvfvpvvdminuwa]tynjoikfebqrxgvyehu[qhyenmsqmxshkvcmohh]llpblusdcqfywcdq[ikngnvowhnvaiwno]ixndafincaxkyqwimq
+rjcoodvjnnbhxnlo[spesoflcmfcoifzosgs]qauqixapgyfzvtjbpee[zzxomezynqnoeue]xpiblpyghkxfueapcm[qotnfesblvvyrnsu]keguppozqkwfxlf
+jgrowursqweqfwxbg[rfyvmzbkacqjzooslnr]znoeuzryfguydetugz[ssotfccqiuilzfuexd]zqatqqmmdnuiicv[mkijjomihqrtuiuobl]erhrjzotwvvpqek
+unyrjnckltxyfxyj[vdlbfpobsnokudzqab]dhhsatcnsuifpwsqe
+iscfknfmwdnipkvxcma[shkdzhzbrpdpacel]nrbkhvxfyoslwfhkldm
+poxfvymkfzuhovx[wyjhfwnozjdghzuenkx]tpldycstgwuagjrz
+taqbysrkuxvxncweld[vquzvmysufavywl]irixymrfapfwvnorzx[wznvlqeltnvzjhd]wgpdkhhoypflubfznpa
+veeytotjubsezxvh[mlbakwdftkyfbpid]qehdyxzxctrdvvmpil[cfnhvbvjkuqwyzgie]wxbvbxibaqoefhzkimu[vcdhqkaxllbdmbuxowp]ifrawmsqulaizxxqytk
+pbwglxgdiijskqrksnc[xryasmfvaqakaovslr]wslyywaninmrddik[uhieoolqnqxdmmltpyp]sgjoghttawugzcwzstd[zwhohshbhultyyoti]anvjcthgqapmftxhe
+wmqxexytqfmdfgzkw[gbjexhyoufthdghiibi]ejhfohkfsaixzvtx
+msrjuadzrxxolmxfxq[slurgkvzzfgqpnwdhxg]mhvtwtqplrxzvrmwtw
+vzrfylnagvwqrbukxkt[wofldsbvtgzqsfxbl]scrfvyjrwyqmrsbot[bngltozaybaghfij]msdphikahbxebdar
+cqpwfhfmgioybwsq[judebliwtcirgrtjcs]zrprctntnwcrszilkws[qwoaitshrtavmpse]zubuyfygpgdycnytnt[ctkvsrkjluwdqeeyku]ksncsilzwvkwtmn
+lwtwlwmtqtjqiym[nxfgdevoxcdimcnb]koarjfajilpityyhmbc[emidtlwzhvfmrpqbhik]gsefmkukbjyhgdclj
+fesirdkrgznhplitqo[erpgpujpndzzaho]wqzethjbporhxokift[rwelvzaswcwwstny]xgqpqjlcukivddrlv
+zozyeoozrjrbdccroq[pffesupjavtnanbmhae]gatiaxphiwsrnnwloj[viampjpkjyrhypjmto]vsqwksazgcaggsv
+fycnqvxfihmjnkjogf[jjxnxjolrlkbcqp]pdqtmmxyrfzpbbdm[fdaejpjrasjphazkc]hntqbpjeliiqmtne
+yeounyqfhbnbmjc[mzbietsligfkult]bywnnvpavyhinsm[xuwaqmeiaffetkpkvoq]ufmjhazqnhdmqyecja[ztqflfgjsoqybaf]pjnbnrsnmfrgqamxb
+ycyxnmxnttqiqnsnmi[wkrtuoeddszbizysqv]yzbksxesoscmlzquqfp[unqyazgxjzdgvhjylfd]kunijisskcelgtxzp[ciyxcpyyefoyhqm]eoqszchkgdhttjn
+evecetgcdniectsnadi[skxzpvvuabkudplm]zqykqoduyjvgssjin[uyojccqmnfbztpdnwvs]uzysyjyjvowlsvpqa
+cqkietrmjexdkqb[rhubbesuoeclwmtakqe]ivdnvnndssfznwmhbrk[zmjmfprnnowiedabycu]rmgmbgvihdcuzarhbum
+zdhjklxbktkqeglhts[iqagcckadjftptawh]ezdtjbiebkjvivekdzt[gwehifbjyqnazsgzziv]fhdnwvcwnamqdaeb[rgxvlygqlocpfgqfpd]kkssrbltmsamrpiedjw
+jlttcsywphepmcike[kufzshdcbvfvkwsahfu]ioqzvlzvjqnavymv
+cfyvaasepjmgtofy[hhoqwyrkhuweoetwtir]fvpxylsiwyinialjsg[hqahlwsskotrjlid]azfumcjerwanpukap[iqjcxdwtvmvjkoukcvq]koeodiiywozmrtktxur
+llaevsbyxpkahrii[dxfpfzvxwpzedtvhtlx]corhjnbybhlahvogj[aeukoetmokgjlswve]iwamrxgeszbcnzsxy
+abxkqpiyavrfgxjbmx[uqzsbujxbmrjyxf]dsiktkwxjovhabuir[baqaipezkcvfjyqc]svvyuknankhxlttwng[kwsoccnvjnctnxa]zgnsnelphgyhfolihu
+oquaqiwlkhwwfxnox[rifozvbwcclekccqk]mmmgicxioqwhlvjpsu[tndpmsoarmdojex]spywovxndxncbpshb[rgceaghxxvddklc]osijkijuctxjhtbv
+ewucowyzjaqacfu[hruhcyudsttblexjwy]mjxsgzalkyasstkuzi[drnyfhqgaemafei]uuimofkacnittaoorr
+nyzetoiyaqbsxum[jowknmpjwqdutjlfwo]oalwqxqoyovfjriwb[lvwabzjorjiiemeaacg]znsbvpusrratzywwwyk
+lsjzqfxbbuihsdx[akccvjqdtzmxywakf]fkxrqzurzmqusrx[wmkamfvugczykevpq]avcvjbiwezkocfvo
+ohoszcqvqivamuaisf[lyyacjpyelrsgafmyl]icwpankirjvekeg
+kruylpszzrkzbfxbmk[thxwtofeyjsijenmom]gjblnnkhejpqdomos[xjfzkxpgfltzzfdby]fnbkcvyhwtwmvpykj
+dtqrdvxfjedeydhdsz[depsrsktdbsiwudc]unbdedwnchjgetnwf[bhojevqkvcgacid]jmyzzhyslvuhnaizc
+dwlyvffagjfzbevant[baalozybgljljwj]jomnxqrlanqrkcjds
+kjdsccouzjkqxgicub[ghhfptkxbsgatseoxgz]jiqgnfilkycyuvlwbid
+sxbgpazgvlipytzq[fixpxpdcuetwlqprcs]qcvdieujpvhwveur
+gerfcffcrfrwvsjw[ypgmjuvhhzvvavtyulf]cjhqxizulglhcvy[mpjpctaxpnlrfhalp]wmhafecpyzjuagisv[aumyqoujcjkxusu]skhuivrgveucfrfzb
+rqkibcopsltsjwq[gmnenbrlgqtvqflnt]xuczjcgsxmtbmeaysdk[rkjjglznqblxednxx]npiikosjigixuvlnzes[vqdtacxnqagckmz]bnrzgyqhejnbmtqa
+ekzqugvzksupljx[hsjwrqxwwgcdhqhhzo]cqnomxxbemqmhqnnw[udcfrvgkcibabyssusn]zfuxkqiwlbbhssd[pfvscossyfdhjyed]zlwsqyhygkdgfah
+uhfxysjbqxaerhsanh[zyuotxgmbwkahzyevkq]dricwyfpfffhxncjn
+cmccqegbarzixhqucrl[ztgvmqmqpjtfgfuqjjj]ubawaltzbmhdhqioav[sszfycahkeptflx]otogjwoazgidspib
+fgfdvktoaiucefhets[qwjumhonvmtimauqsy]zkzorsvmedrlycqel[caaejbjnvlaqlqonk]ndndrqbsaaweqoyi[ovnpneqkmsbqsav]cepurdlgjkedaaeo
+nfhaistnlhzethu[gyozecvbgbkutaiuiiy]vbmcwkesewbbcdvw[zxgnhhbnldllaacb]kbtgbqxtmqtatjc
+nuxiknpvosedexey[gfixiukjvovooybkr]nkprytbsajposdjcv[ahjzndfqmisqonz]kzybggzczcwhlnrerfd
+puxghpwmypdrhykyd[xioiypketoaohdxa]lybkoxvoraessmzzztd
+qwlzyfwnqvxylbttyy[idtjcszoblpujfkf]nbwtcwowujbgzsz[mqckgqkhmbzpwtuekcf]xyquvnuptbiwlqdn[gwgdvbsouphvvovkg]buqxksahwsgvruovojo
+nvjqtzkgoenxnismrq[mxybkgtvioipfjecdma]wtgqwbkpqfepskvvay[qqxflmtbhprambdu]iqtqqujmqrlzpdwbljh[cmdesejkyvjzwhevg]qkclggetgpamrach
+ntxnwuudhhghcgd[rlyqxrlsbpsdrdlls]qfzxlyrfjeshhmsyz
+rxgpjhpklloihtpptpy[pcbbsflfkrknahkeq]uljnjuavjkhklwwcm
+byxqwjjdyqqsdnt[nkxqnfrxqqjtwsnpj]xstdzfnmxpkyszg[yswyxmgmqsrvaxdkx]sjfpeyrrswxgeflbncz[likexnumjhlodzimm]crnvrjyaumqgmjmy
+skwhvjyhmosrbbziiaw[dbztswjofjvkcbjtapg]yrzwevkwnjjefwzl[ifwifdeiaqpvuyiidrz]kqnqtbvgpxkejxvf[ubyvhimnnmhkbbnbu]zsqpbztopdvjzbpj
+jttcdvuuyawsjnode[ahfzcsoxjswcdysclk]ubdipqyzzhafcdusjuf[wtsiychncfnaztdn]teqnxwryvsfwqbbw
+gsoacpemvpypmizazb[rzluiccnkviutvg]bxmhsnyomypyueyhqbo[mzxxtfjifzluckdypta]qlirsetsxpkgewemam
+cdqotetervrpkaiz[tohfcmgrtozdfduhk]mlgpfaviqgvzicff[snphhquukvzrgqynfqi]eredworrsugqqqowk[fvcdlekaqtuqhhchh]hhrerrbpzzarqnxiwwk
+eitniklfnvnilfttm[qduauheufxnjowyar]oxizltxvldookdlomn[igmwlbhxgszcvhshy]knibbdqqnftzglqjodl
+ibypwndwhrbzbowoa[wyrgxqcbqoqayqkf]rlnhzutwptjhfwrsme[cfpmzztsrhtdcgy]tdvricsznenkyphwzt
+orvqewlxihoswvwlx[ifiaqweqqmaeasrkvxt]icmqkogypgrbjoij[qnkooyxicmbjhormbu]wkpucublpyqfkpjewzd
+lzshelyjacfkrkykwe[jehbtylsskmnxigkrh]wgnozoomyzpbyrytrme[uwcvshtsdstibykyrnm]nykxibwjjcaacgg
+fgdrabfqaogxyvpqfgs[bandjgjgkuuuxfuh]wwxxsusuuiezkvojziu[jsprwhpeictwield]tbpmjxfilclfrqx[zdmxvurgzzrompujt]ausuaokslerjqiveplk
+jyhxxfrgrdjjsorsgu[uxzaififwgjnklvj]uehxdiantcneqrxeqi[nigrgktauzcpyazs]fjyinlukaspltshmhlh[mfvrnccglqfrdbk]qrmbqjtcccjrsrdmgs
+nltgngsggdruwrahzhq[gvjujsgoyasfqql]btwmnkkccdcvuyniu[tsqzwyypufxxjhd]dvqickfwnoqtrhokrud[qjhdfcdcsfvdgkotq]hndylujuuecvakzmrp
+xyvhcwkqkedbjzarfht[njkseezhzjrbujcdjs]obghjeljjsjksswil[mhfukqardbaypasf]wjcerxswmwvghjortxs[ghqmhxisgehdsyb]ysvgpyswsdfkomanrtp
+wdwmhahsrdjogceb[jdwdpxaeemsjficjz]qqysutatflhmanx
+cpctsiwpwyifqkk[eebyeqlgxyvaskcoda]sjayfoyavfkaydph[aztkadhyekpqtys]jwzqgyewxxkbisw[gvlxjstngthhsjeybv]ponztgpuhfsndjb
+fawvrgcdqdidogtfu[yidikecuyabulhiia]fxfmgcpdbdzdsfkm
+yjateqpywpcjcbo[xddnertejcjeedjulw]humaqnneeeynnpp
+jutrwhvpaknrwoxp[ajhencapzncoyszy]qyhbpivdpqjeebsirf[lbsqceuykthorgpk]olrdkqyikfzrdzi[bmqrmgcmvqcgaxosaho]dkejbjzuzvyypxz
+rhsdxnktvyiully[nciwcjzdccerinfkgi]czljhsizretcfuea[gudarsiefwzfdvfqsip]tedaanrqtnfjdvgm
+grkgawgbvajxlbmbgwm[dpfpvpbrcwxethiu]rpfkykrvmatjwkd
+daemahshxyowxgjuio[dwhknewdrwoxbgk]vggqgdzpypjshps[arwnnbysrmyfijttrh]mwuwdtpqmiqgfkntqm
+ljpbbzgdgfqmvis[zqmfyouebpfvuscncay]omiockdgdxibtmyfwsk
+pirgefjkoicryrcgu[qxkwrjfuhqmjzzmbc]jrofqkmdftjbupytg[mywqavlapyesbfea]trqscgjokafiarh
+qsycbrrefosycpzj[guklennkilcmomyngzq]numvvwtbyvtfarlt[frfzzodqottlwzj]qumundqekohrpin[rsxaymghybsvzymhac]wkmbavpbqtoewxruut
+erpqoualxstxkzkwgf[spsetkclioxmkpobkij]mocioemqrazrpexy
+ryeoamcyfewnjlbdfsu[mmelohdonphatmxblhd]wgkjtelxmbwunvaxfne[xgohvvrmkweaabsd]dkukcrasqoceqjyehjs
+zkmkqzphahjdzwot[objfpvwrjdcdxinuvi]goabmmhuvavbjgebdow[jbqupsngpnuoubvn]xofdcclnjyfofxnzyvk[mkmshdjabucvgpkteh]kqxuwhyogoxhgwqyyvf
+yqlzjzpztzgtpomj[qcmfrvyamtxxtcv]hupfwqhpdvdwfvu[edoxxlncqxfxpsls]iyflxxkaztzxodxfd[xavxxfdkzquifiwuu]bkjzjuxybfdjcqw
+gspnkpswktczjhi[pkpwicpaszrfnsa]reqjlqsucfsixykwmg[matrmmvriujnldbcuaf]lckpqdyikkaprdje
+pbkxtroofyztckqg[arrmawhzlhytfodqb]pirguzqkvbgxznqnn
+mmybfuxiqgljxdih[dzgfakmxryeoylimdqp]vizjwwrhnihcakb[njplrxabbturflf]qclfldtmazmigmd
+exhynsvqvhtzexfjt[rdzxptfigworypkcz]disdlwcxksxjghkkbqe[ktpysvjomszwxdmqdv]cmwenbksdvfihvxvz[vrxbmhxkfjwgktuy]xpyefktsqohxwkaowk
+iiuuszfrkqjprgoumy[svdcdtozwwtofuizxg]gkenicdslqaemvwlov
+mldgparlhmdhgvz[bexmggptmuvhkjj]hfnccpxdkireolxpe
+tzyrycryhzonuxekwt[cvskbxzwbuotnsu]pvybsdovxceqjfmo[oxjqmhruryormwvgkc]kiygcylmgxdjubtefiw
+egklopkulrxyltcpbnu[nmbkrgnsjyfjugcx]bufmkakubfrwnwai[pprytunilpvguaen]bceequilwywvtvmshg[aszamqynotadciwdwzk]uivoeunohsbulzpxko
+ubhofoouxcmdsqqkjbv[fdvdmyjaukqeuaassk]tjajanohfobuhgih[dfscfkxpzwoqobajau]aspwsctdasjdjnqbmt
+urlkduvyyyatpkb[zrolecowduswyfn]bgkveercmmeecop
+aitmhwttzyrqwwk[lxntglszzkyjrqogob]exmxyvhwwcopudfekgu[fzxdevariaovvyuof]almvqtftjsdqkevnw
+ftftrmapzrqqyql[fmxcumhriyippgxmy]igyxwlfgcjfwwwgpy
+ftkqjwepfbngstefaji[ekaiaqtwacopwxfcf]deswaixrljslcqc[nqwlvvuuziefvrd]pgfvwqsqxeqamxsjjw[zispeamntwboenxygcp]cwdhurmclfnjjjwjygh
+fixhqdsaxorgfndumt[ccglwvkrpbwideuhvx]fgsxflvifyrzlznwvp[lmebhuhqemgwxpuvb]psfuyywbujlpwcekwz
+otmnqzcbakdxosl[skiwodrlvhfjsuqfsma]wtyrxmotiqdinxmrbe[lhgprkzlguroolg]kjgvxaekydqxdepu[mvffwznlsunzhxknier]irzzbykjkzjdoybqg
+aauhucqygvsgwdaqfa[leenmhlorfgbyorrd]soryphiyiqsoydfkwzw
+aggwrqdafwtwwqjr[eafpfpxygvnfblxikwm]mlgoiwxfigmduubsr
+rglpanreckskdaojotf[yuywsgztcjzyrfqawj]wzwtndwugnelcmxpyme[uwcqyuebxpprisdls]kjisjtwisxawsufrd
+uqeuvhdoyujlazejbix[wtdxrqucvkbkavrvor]fclqcjvpxqgnkkhi
+mgpszcffmfxeacayj[eorkhzrwqvxkrnessk]wykadaapxxqmohwriin[iwfmoieivcljpem]bxhutydaznvlbuu
+vkvvkjckohpxkolpff[pepxkcsneexhhlsjs]mffyiopxkqdnwlg[qmkttuxyhvemywmu]puqepezxejnldtlf
+fkyblzyluhloblrlj[uuznhpsjgbnzghjczsq]ekddnoeylbefgmpwjp[gbfxttshaolcvhfsl]iygnwnznafbluanu[mnylijsqhwlhhbq]ultecropzmivwizl
+rwpypdkhndrotod[rganbztsadndbxr]dorwmwqoeppdpoyz[sefhqmaxuxqwjpgaofp]kerdiohsaddctmnj
+hlzqtzrmmgkudvsaxn[wnujyposfazclkutfq]yugpiuxxydkbjtqd[bxeuhvpdnzqzvrtynq]nqcwrvbzjijfjkmq[gviaheipjpncyxq]thgypvingfouyrdexu
+abnhtjtbkrvmukjsbi[yivolobglxbtivbmlxe]gpoearvtfhhjjxedpq
+uiubiwrlfkwrsnewvwz[xymjmptyaoiartx]lkyzzzynibifaahjewx[ijvyqumtxyumrnpyfz]hddwfrbrgifyegaji[tguxrbbrdvhmssvbopf]ykkkdwtdtlajkmbgnww
+omqzieitwyasnbuae[citxwhjdkqyzmfotup]enzrramzittuhgjcv[fierpodjceckpxwoiav]edtoxignggotlwka[sbjkaiypsozrukh]hdwihijpdemzcdvlsz
+rummzhhnmypaltcxrja[nbcaecgbuslkyfar]hhfbjgrmbmjexlllok[swzivorldyknmqbnmtp]yjimyhqwgrgdphl
+mvpjigwjeejzhnr[zmxoaofpatkxkbecaq]szixqtsjizfgvfioq
+umnruavumjfrbywaswu[aeypnvqccjmqfflsyyn]anbehjastasljxkg[kwsjaebdtuslcbae]corzitvsrhthwmjsny[gzojgomcsqjubqrwor]tcektreziofkfzlyp
+atrjsjmfiyyhjjpcq[aygsawvwkgmvjly]nvxcabdkjbowvfiuqim[nxwlnfgnkfmmrdqwva]bjqsncyahbgqgcck[kudkiazyfbbvwvae]egtutxkpkpibqcxd
+yyxasjrusephnhgz[tbgueaajlxklmqfzfxx]rbirjquhusiueda[wwyfqgowviapcam]iwwwfcjtyuokivtkaet[ojcechttmtwizhjzb]ilybbjncssrsdpyvun
+ouzhmpmtsxtbpgxd[xkpvjnalwhbhiwl]dohtpyllehgsmfqwio[pswfztwnlizwbhbopug]znhnnlkxrlsswkgrb
+wdfqtfgtawjujjnipv[ffiedysbmudjwegxa]uixjrzxqsqknbro[uijbgaxqvjeiaddellx]golimewbjgojubbk[cmkrjtwjwjndagjoidq]kuaetseghitsonmjxez
+hinvjpjfkrcfikcsnk[neznqyunxrviafftsv]xxzaxudvxzpzayzu[igikyqxlllewgxp]bbrmixylwkvzstannjk
+jnfqvpcsjlhmsgttoo[keugkkuywiztndixql]fwcomunksourfiufwgf[vwalfwhhknnkmlelb]lxwrjniskrxyxxfgbj
+hmxhwwoaovcmrsjng[caxzefbacuvtevwsn]lgybmbmfeizwrbfrzuc[usgudhgiwtuirjfkpz]dmohwrrvvujowdchnh
+suctmalsyteahln[iwbpvohjintrccllib]zdppjeyrkkjlwgfp
+hmnzkxvelkvxzminaj[llmbrsvokhyfowaimt]otgsfjkhormfnubhirp[cbycbwoqvdgyvbnmkz]gnnjznpxfxwfvaoc
+jniltxvpjudmaao[ukqflhglxrfpfjg]djvtunwwabljjdirgrj[zkfyhzxkarvjfrbzbhx]zrrzbzubefvchvrpftc
+lyqyzdgisrvolizgkvq[fcdlhezvozbrglr]lcuqsfwchyucocowuz[acdcsqmgffussoy]jlnuxatzdobackkwgwp
+gwcvsoqytskjaqo[rfzimztlooyjbodjcud]ewbpnbzdilxvjmwy[ugoqefqofiwkgnv]pugnbbxqbmpephsby
+bbzqqwyepafkukwqjbb[sprroemdjetnbhdu]donxkujxpajsakirfap[ybomycmhvmvslykfxuo]auqvkrofncqftmjshtz
+qbxmiueonhzkluju[yocqzkbdskeisgvm]kaasgmyupwosdzbumq[lkqmadnwplwlawznb]zxldpcgbouydtatpo[dqdshurolnithdof]sscgvlgvpgthgkhtszr
+uzcvcnjawdeonomhoh[lnckzlsxtxekacx]ogcbcsdksosgbdlrexd
+kiiixiatixklryllfyd[bdtcggfxvupbohvclg]rxwnmgvwphunygx[jisbxeqdcnocecrtabk]cpbsvzurbvmtwucvhk[hlrjqjldshzvbrn]wlmkcxbepdkwafeovn
+xavkcpvzdiowrpduy[lujfjaxzrmxxcnxfrlb]szegppqkdzrwkokbi
+ojlbyagshifmlrv[qexvdlykxlebrlrjkg]lvdobhyszjfkocbmt[uorpnorysdsqycpdoje]tknlzfganuxeulzv[amollnzxactinrv]unmkoyxobuuzfwduxa
+pjhpwsfoiufywtd[pzudakbhkrvzepfl]cnmjmtmacyjulpcu[yvevxufpkzfrksn]qqdusuumfgtaemuscj
+ffnxshbygoxcatgz[byegatenneixbjbrri]xrxazipjarxrrjj[ilvdkjlixdbdieycbvz]lvngjqnhjjhlvki
+maocxpwqvhfgoaoy[jthtqiiuukttxhh]qpvgjokizpojnsvgg
+vstmpuwjzkvzxakgreh[vwxiygqjyyvmgvjdhz]yanevbmxttonaonlgeq[rskehprefzmdfujh]kddqkrshtgymbyf[tdciwdrqgnrwygvlqwy]mwyxsmscrhxowaezs
+lpetegprilvnporglm[efutqcurzhuymzl]vpuzirgjkjkqmpglqoc[ynrhizbevmuobpyduap]joqowueodytoothjk
+uovjoxozjbjgjoedh[hdufcoupnwyqzqsdz]bfkcibjpdceeawfsxnb[pmfdhpjltsthickltq]wnvrznraeqgmhfh[zqsykjfanpwhdbm]oltzbvppyqrhmom
+cuptpflteqvnaexzwj[sokwgqieratedygx]tlgoqkfvmifmdguz[kfiwutninqxzwie]dulfdtlbltfjevgp[oftsoxfpwolpbvflmvk]xfbcennewbsxcgin
+xoajbdvgnaxyewthsyy[gbvxbmhptnkenvoef]iyxfsrwruprnhml[pwrbjucvopfozdjlg]ntsdilgkqjkwifjcmqq[gqtizyvtmqydqdemxx]llggegbgpbiebcsg
+osoqemdejeowlmtbr[gvnuwetgdhuzlfoyp]ynbzmlvpoydjaix
+xmtosmglxiswygqd[djjpcftewakmxhe]cxrcujdbpfpmpqaqp
+kmffzaniobvxkqobrz[xemvsxzxpikkgnz]coopvxaqcwwvcpzzbwc[frbwadxyrqsjmeb]solyurryfbhunkug
+syuvjlrlrotbcxtmqlh[plnbhkottpkhbgrmmc]tpkceggxjkkshgovp
+xypvptyubhdywjddc[dkdpirtrddhczvbi]gppnmtijmtndwsd[jctdyzyrapkwpsudre]ofnnmlflpjenwqme[wjlbkjvlxuwubdkskq]zmhodofehapyshkw
+zyfesoxeyyvugukolxq[sduqoqepedvxiaojef]ujbihfjhwwrxjbmjzwo[fjbbqkruyeexkrk]fyjhwioedesstjkw[nyhqlxexvrlglwcqbi]zgxdbhdcqgccgodx
+kbgeflyhriyaitjdw[gkmsfhbeeftzvlkkxd]leroadltgqyqepa[apzlemfdxyxhyqy]bifkxoyxysldsif[bypdkygwlqgxlhmay]odffxnaayhgxkyjsyg
+etnylemzuybethsak[rbqwbwcpspvwcnrtiaa]cxdlfpvaizzsiqy[cofixscwpmoaptvu]tuvmcbkoqlfljpc
+nafgslpawkgystrbu[lholsrbjchktftlct]cwxorzjqzuibydw[wolwkkqcflunakpsf]ftfjgybmpgmpzjpxok[omccjdarvniomtniw]vmtkovkvuahhcgj
+arfxtgjhwjbqqpn[ozbglzichfmhnsrmc]sxwomutyoliqdfrziy
+yrfbyqpslcykicx[uoxnsxbpkzuarrmhesg]ohscdwcojgysjov[epkotielizvhfbauf]kdichwakhcwuitdohe
+lxdfxhtcxpaqfgud[kietvvqhjbhmbdjh]rnnxrywwubyivxj
+wwqhnufhgdpwnidwe[trkijfvlemsenfvm]hwhzclbeilbbpmbdgvy[kcqrejunfyofjviz]ymhbanffstqwvlkczn
+bemjirozvmspfrojywv[gnkvjdexdgqeqvom]akfgpxfgjwsymkegz[yrbmhgnacpufxmilwbe]taxwtqhrfqehzvndlix[ndjuozknfyplqafyu]bwogrlytfyopgayph
+tzrwkqaembipwoyysy[zmjpcdqtbucakwta]eelwgobyifozmawhaeu
+pxpftlpvkjcwicy[ordfpujlgwgxccjcvc]ghrlgcktvifkicv[kteuygrgxnqbaagldhw]elebyndnyuknsxwsz
+eoayeeinavevnkocsh[wlhcijujotnsmyfwrg]nsghlrcpvhazacbriwy
+myqilamxvrkimzrypsq[dritxccifmrgnynl]ahpnxwgmmlcrmtujqv
+prjupstfryhiyxjr[nznibizpdpgsxozff]omzpiwgyqqytncz[ixhfkzmhfpctiaflrsg]fkxetrnjkjhwmbcs[mgfwcdxioxwsbpbxg]pnmcyowtigkikfbqem
+obihtythngvjelm[flrqufrqlvaamtlt]gbuppvlrpotvhgoivu
+wdovdejwygfyguc[acoacyczfmzugdiwfy]hbboqkjmpktiqigkaxi[eirojscvpewshvdslgs]oloathxikscihfpy[vbwlxhdnmpcvhrdwm]zxwsxrhoksbgnyva
+vuaiucuvucxmowfvdc[pkwwdrystnkynnfonv]bkguisxgqtsizbdpon
+nhegyhsxwcesxgagl[jsdkwvzzfvxuxsmkans]cwhuierxyqjmueehii
+nmtqqwclrkwlikw[drthkxkyfxqugph]bbneldbvtittaydbgag[vviulwoviezlxte]oqzoapkqstfdxbxm[bmhsjxwoxtflbqeo]hnsldpfruxcdnvz
+xrkijlvluezxevaye[erofwbtsylzfvyrersj]bkvnbppereymraau
+jamtmykfjuhzndgnzrj[ezhkpcujzmcdkkjjfbm]yojgtkoobnwvgendjt[jkeeulmfzdbfwnohfaf]cudgyvipscncfbvmlh[kxikmcqmpounqkwjhg]emsdqszhrpxpwcwb
+yywwadanokysrfh[btwstuwbsdiotcudf]qrsrtonegzitpgnzsvd
+hrhfutggyymxzgyj[agqctqvhyfytwsdmzf]ozyonngtqdoaagdl[uuykvsdfqdknray]shhtieifkqfewhopney[ydgftitgfmfdqwh]dfxovuekyvtaddh
+dbsuuitjdsiymhek[jgxxnjjzwgwirdlgwg]xwlvqyufgiwbwyfhqn[yywjhwiwijsuhlarpxv]zmpooqvlrrnwdfhsheg[piwaxxvwgzbbruij]izqwldwwjvrxmzuj
+nuxzejoidicdupcgdum[nelehvehbccqmwnla]bhazpsnmekeqkvr
+evnsveqnndjyarol[tgeuojqlculphzfva]rilaooxfpwyreyh
+hhwvcwpwgzktzotcrx[khmiivstojdaciyzb]xwaeqbqyqwqltdx[rgwirleearklteybyx]ckiyopbgfygyvui
+zpfozblbuwkdkkfsuft[lccwcopfworwnry]srwrcwdkalvsnsu[jmgukelsagifrhkxqma]wtrtztsztpnryaqw
+iszcbgumuoarzlkblr[xphrddxkyclfvnapk]rzryxqdnmxplfiu[plghrphjxgqlxtp]cxpvhwxkzkeczxcenm
+aezqpvhdbflknptrc[zykqxuzbatudehe]lugjrgmxtqlxrvt
+jsejnywikaohtarsxmp[whmztgiaadmiarwlbj]yjrgwesrymvzhlades
+cxmorkzlibiuyjgs[nyierakbbzkhvyizl]hmtqhrxddgdwmoayyse[ldupkxzsfkmnsfdnzsl]sfpntvoniewgfnyfw
+rtlhvogqfabwioi[mloxkofbaemaxcfzdo]ofeukqafbxivgvygl
+rjnyhsocogdwhswqonr[jrwafksjhfamqvfjk]seiscoezqmbopqryc
+txdcwwtcedbymvxy[dbhxqovjeifzsuvm]alhqphxcmfmodeb[zdzxpgxeezjaeichq]ggadublqxpfyoyc
+rvoblfajodmlbftahtv[dgglfidheitvcqob]uzvojeukksuthhlpyoc[ovnskmuaaxulloi]wqhxsjbtaqbgjpbw[ohmzmzpqzevicbzmtk]yjrbmkldmwmmcndia
+rnsgsacbysmwnhlqjps[hmjfyywxcpxwsicxit]rnikgavmgagtsoqjnfp[qvcofkevjqjqhiqhzek]vlhfbggnwqwohspyig[ibsdkevufgsnowonkj]ufazmdkexffmxxfwf
+qkcfiavyhcmknbqcjtq[lknppgsvbdvpftnzcgo]qswbyhtruabsyhvz[ilrimrzzjctbbwhc]knpudsvkdphxsuevep
+wmeryhgvkftqiyctbt[terkorqjaagtbsp]hilrpcfcjsyguukcehn[scmgvajuiuybvzt]enjhgqtdjabbkgh
+kvczijzgmasricwj[xhgvyfhnaxeugzje]xwcxqjegagsjbvnuskc[iiokktbsnmwxknkqch]vtuobocpydqweamu[jgmazxfjiryndgtcqjx]pykbsnsoxbfgacvgpz
+guthejosohmrswzgk[uqthzxkpgxlcmqyop]fxedavqwkrmzbfr[itsvdugwjezrjtgqmua]yotsdzczslbvzatsom
+lyltslrourlevnxw[dtiihjdbejwusjmfap]hdmttxgttdqytvdfpp[qhdrjcwprncegzdfl]iinunfljrfhgifws[fvjgcqtqgxqtgca]bzlvdtdsxgrtzuvh
+ndwwncgabwoynmn[zbxvlpndrsbczbklwrb]bkcrlonwivcipxe[eoliublkzenpeyxfk]voydcapbmbsiuvqfywt[mmiirgxvnbpnkyjh]pgkocrralcozybthp
+lvrcxgzomstmslr[vczvuydqcmhfmlt]gmogxiffrfsazqbh[yvnoqlavmbnattcrgd]tsbkxinrrbbxypwnafo[pgtfpwnnlxibpjchgd]hznabthirzxjipjd
+jtczttrstcpmsko[mabkmpwpcytkqdmhjc]jntwxslpyrkrehj[cqbvlkhugmarodmoqeo]weaiacdfakrkuizqw[uiwkgtbzmmffxrhtn]lhygapgcdaszgoyy
+ahnbwmiwwwivkykv[pcsiuyrowqrqfxcvw]mgksjiinoudrumr[ocwtmprzvamougd]lvqqlgaftlflllvqo[akvkgazplkkvqshgbk]zvyvtmxkttxnxxdy
+tsbifacnljabpczi[cmmjarpfeeyoeplv]zsjcjdfidfjvcgdd
+vaviqqmsbqellpw[xjjzxupmjbkyuzq]putpqaavecqypslf[nkyslewbmmsxvdy]maszkbnmujztqfbzq[hjwtywxdrybhcvplncc]bvgsnjtjidiuvggo
+jhejwzckrrrzcjgs[vjkxxdonhncwkykwi]kyuvbdlmkffyzept[jloktbqtmtczmjbdord]uzggzgltjzngpsboyxy
+rkrntmebnqrkoboby[gujdrcqoqatyewm]qhrzxubcwkrkqibjwl[hvnezryivakciaoukrd]teefauinxaijxil
+zkuajphbyhsxocacplf[tqkosililhbxgsgp]xttqprajeocotwoixkw[hdmduoyjxcizwpa]cihkdwlaxhjzpjw
+xzcmplyeabfrcpfr[qhfkyjzmivvhbqeblph]bkwydbvhtutbtytnrx[oslchcvrlcxmsnbqoq]zkggbeglckihzjuq[lxywqhpuarhpasbul]vqmgizoanebmehzfwyt
+bjrvsfwownhpxsowafm[dtmxsbtquavgypbizrj]boqoiajglkefiwaj[ycjpupieshgdmbwp]riufwociykhnwdsci
+urcrpmkeszzuctovhqu[vsutbxseevalnah]rwrptzraxwhuskb[inpentirbmcxdvof]nvtxiwtlkeknxfl[rddddhtpudrgpjafk]cojkmbekefbmuwev
+djavlwoikblvsufxrb[suujlpxslswxgfmrjj]drrpikhibuvwdlhvt[iopyjysnsjpyyxngdfq]sijwvhrwtourowgv
+kitztjpylzlaposkaun[szjrduixywmdpxbl]kaltysqcxzjrengtkwv[jhsqhlzxzayxdbebu]apyxjlaydhhokxacq
+kvzdgclklqsndxdo[kudsmgggtnwtxdnrev]quljmegosayhdwum[kklkxlmmmtjcretlyx]dtsexdvvjndpxtggjlw[mpcaczddrmktrpgngw]usxsptmzgzqhjaycg
+oxvlhxlmhhyqgwlao[wiqlkdwjluvqwgqp]sbjmqvssbwefsvq[ocwwdefylfgvgsygfbr]fbtqyawdbswjpux[loeconwsbvgbccoz]cdotdnnkzyaupynuk
+ykozujsmdopwobif[xaupavllckswbcyszd]jqdeagvmvsxpumvmu
+naxhmkdggymqhjcycw[xkhrapbevbaiwzdn]etnivyebbwvqarn[dnskxishknmcidwv]uctdvqkipycyzhgcp
+uktvpthtrtlgmwofun[rmevlwmmvzucsuxqx]zokkayofazorjdec[ickalywptsyxrttbynx]olddxeqctucllsvrvhn[pxfftvrdqdglkvll]xymmmimcqskfozlkyos
+rlqkqjeaqkqkdsfb[igleoesoxntrdwsyoz]ujmbnjtysangjwpsod[nniriilejnvzrrnn]mbqjytlwauzscjj
+egnnnubdxhgpiypsha[byoisscizhhpsjy]hmtbmbgshscaxadry
+qjafhagbtdpvszwlpz[ipehjbasniypubhfb]hreoxsqzigscxhnaf[rntqxzmxfxdldnpxqb]jriknndggvtkifa[kavxsbypdwmsildd]uisivvrtykssbvmsm
+rwxhzignxkrqeuy[memzudqlzcfrgudefyh]pyoldsepksbcbthfdcw
+jhgyboztenuwlqu[zjsmipieimgaypipjm]jbjlglomhxosmwypq[lvpsqwjvzepgvzbfs]ergqdyrvicbsgxg[ugcuougnecjcrpav]pzgpppoonvamxhkbg
+mdmifuoicysmavfkvtr[rdcuzujskhncvsy]ypspsiiizkvopyb
+tlwbtllklxrkyivnnuw[zqphdjfrntryqssd]uuefrmazhsiqdbodatx[zdptibmcvohmnwrv]jofpqdvwggfsdkz
+rkgfksxcpqkspdsx[zubzkcjhpvtdvow]bkbmwwrfqtmaosodlhx[shxfozufozglsgfj]tbtwcavcbvhjourcvu
+ayayqmsdvbzfnut[nzwcajbcbcduifari]eazisrtfqhzophb[zkgweftquububoothq]lrpktclkzizrutnybq[guuneltajlsxbbx]rrakswukxamcewdy
+dtuezfpubkdvxojau[ipzyfbjcwxazbqeslhs]nelubzldtozljzyj[uqkgjszhpokhonrpg]pgaebrtqevqblaxqa
+bbduqlqjpilanyikfb[iwngaxahwxongrgf]krgrarolzgmzdtj[mbsttcbkbedkcmbl]whecpxbvhuemjloxkcq[lrtaeothcehqsmbes]chuesxuwklohzrvgjkh
+sextateheibnehs[ccvuuyctlffatnmhie]xdrwtaeangizfxkt
+nayfogrvrhhvdfqf[upaiyvrvkcygazw]wtsawgmklbrjjhc
+qumnikpzpmsjvfiwapn[fdqlumgxklzlxcm]dczsgahneieodmhgvgt[babaxdoljtacfza]teoddbtcemfketpp[vazvzbcnqacbwcx]fulxjfohtywgtagn
+crcyymrdfaawflxfmfg[ovbkvuhdrxdbhmyphao]myqpzivnpjyjkogknqz
+xfkrzuoeclfphdae[wfuevmepzjjuzlbc]icytgjlzxvnjgugxyv[ppqszfvkmppjvktn]cifddqrtlcodiincw
+gobxpjjturfsgzell[rfhdgfzwpfoztzgcn]eworfqsmysqolgq
+laagoxczwfikjawci[sljddbmwqdnwxlkhdi]hwmoerlalfpjshedio
+wyomncmyxejknhswjv[awtbfqiarnoabkab]nitvsmoxyfdhpcdiee[sipoxhfskauxfskix]nktheznrekmrrxl[gwpmodgajfihlnad]pereyxjrernitwktv
+xxkbizhzxvqxbecadt[omafffruievwfqocujp]zpuotjhjwsdbsxteza[otcdtybhkqhjhvjjz]zjrkvtevohcfvlvq[yjdkpxspyojxstjkv]fbccdkbjrebcrxyrg
+zrctbusxagvjendfdf[szvxchrhjussntb]mzhzysbvlwwflpx[heijmktbzrbgqsklhcu]ygpkfilealopaixduvm[rakktnzhooijvydazhb]msnpudxdeaujqysbje
+xoemgrrmqqtfwtnwnyt[jextspoeediexugdgc]foyqnwnwstrguzk
+siuojescxsrrhvgpeoh[dnizqgnuprmevtqws]jtrkiydptijrwewcqz[zkvjwozfadmizvhfdk]kamauddrolxbdrn[yzfffqfeadlyfje]qanqnshkelszldi
+wdiojuevpybfvdp[zxyrygvkvufixzdwds]tgjzjufuuwenexe[outgdpnnysadoyeon]hvelposyxhlvfmdi[gazrxuhxrfxofsrxq]wpkujtixgvfrdgg
+pufjsqcfddyeghd[iylozggwqlqevyb]cbkdjgvbrpmrwrsgn[nuinkqeqchwluhwye]baetibebzmndgrulqdo
+rwwiamjdgdfsttq[xnsuyncklmryvumrii]qtcphhihqqqqtntvoev
+bwhfulscfcqggdswt[ostyvvcpdoyzvuhodeg]ekpjrxajoziohdvkfco[tbbppuyifwtcgvci]lwjfhfqfmclrhdhplbs[pplppkgrmykhtfnq]sfvskkgimpacxfam
+jripvodavtgdgkv[isotocixmxjmcldpx]oaptjpebswetmacnf[zdlipacteuduvqdhcfg]chciftufaejhxkmpozz[cmnwvdkbsczhekzwi]ovnjvgsuxmszncr
+ylpnqmqhlnmuxei[cyqofexibcjwunyl]ettxreudzmlhgtha
+dhmperfgtcbqlipcjbr[gkmgkletrzhoyhfcwb]psllsosgwjmtrvfanv[fimdtpgcoolukvvpu]ccqgkaqltrreqchxpbf
+huvrdvtjmncbokh[mxnsccgwblyahbdao]mpscnoohrsqideuhf
+pfvpbqmyapypiubxmt[kjfhekecjzzqftpj]sybxxlmvzhloooom
+iicuihjkntpnytg[xpzlplwvgwmzazj]dfiftbbvxbztjpx[patfyqrujpvwbsl]mxgsntaernztshbi[nfwhtuuwhgsljivcrws]iwzqwnbjapcfujz
+fdiifotbpdpfvedsfn[ptkzrnhuybmhzkh]rmxekkyxbqxmxccc[icwqbjmjtakfsqbd]euycnuevdyommhq[dqfyackkxmvbehucn]aabiiukaxiowhbtbwpj
+ofaeegcqivqrmtz[nyotqurllbitpijzdz]pdlsomnmdsbfhdzdh
+yxihvlkrcvzxhlmzm[asvxysmyxovvxdvv]rrwmvextlthjopu[nuaoossiaxivwwxwpa]xgaovndeadfyofish[dpdhiwlsvntqxypdpy]ddmbndbjtnpazhj
+kfqeicvkuvmsljtsez[vplnucnqgngsbfv]ycjwthuykmlfejqepad[ngklfmgvredrinryy]snsxjeqdinbbapwuno
+yznxssrnyacwtxlfbab[mpjvrwoguxgvcbtbmdv]uflsilwcemofepjghvh[cpprubjartjbnrdo]pocdfdephebcdavrxpo
+xkiccyvosgzxwtuck[oqqbviclakixdgc]kteovpyjbcejxui[mzuzcghrxtkssnrsqy]hcdpzjidycnlowgvaxo[iawhkiyhbswqsibqp]ltyzmuplqyoivgmzfa
+qllumnywkyqjpfv[lgkmvmbdwnkhlhqfse]lroouhapmomchyeghsp
+egmftdtwkpmhdpda[jlxrjvldyikwjlcwx]inqnhjexcxubtzbx[nxiniqbbzoedxkyc]siepprpdulpnkrussom[srrupzubqhkmccxcnas]qylljcyzwypwzumem
+ikjwnxkhkzqmppk[tzaysscnyqriqxcg]miabsouchfluijdwa[cmxeoduyguwjxqcj]ilprgkdcvvopotdzzon
+cauxikrtpgqgwydmagf[nrnvqarumgmthrf]xyyopmoyoampemafwe[jwjgmglxphjkvfg]oxltiecspkarhualt
+pjzcgmqitucfyph[cxxlbsznvwpxvzghv]woqulnjvvfjvjzy[wgxczusgzxnpkakki]fvtepvwjkaozguggqk
+fgwvbbyiyljwmkgcmic[gnohlyijeqfjldrpqey]qbdzxnxuiprcwjsn[ogtlzpxxzbtgfbjx]wxgaduaiyihyumprhe
+mgemsvccgqreluv[qrlpjfkdoinuyou]ovkiqoqefrjmrzgb[fzmqpuzoufcybpucq]aaftwlldjkholezzpk
+vxfsphugegtougthxk[lkvniyzlltosedmpgr]tomgbtfosxegecoqtn[mvptnxvxddkaqnjvnue]kclnhnpveadosfktw
+ltlrncoqeeupwtoxv[yoosiulyjjmwacymwfk]vdgfdfcjubkcbhiixv
+ediaeekjpbzidrfpu[rowhynyrchamhzrp]wetzubsftjwuksnd[yqbtzngplxcqkyxf]blzuvnektffqbkf[egmvyplsbysvfjjkr]ikrllifuchlkthknpqb
+ohspsyvzulzfsgghvbu[tvtbzqptcpguecpgb]zyadwosbwchbgrkypj[cphkhvagaasozym]tvgkhkooyejddnhv
+uxtuhgkkulhrvowswt[etzltbttiofnkeyh]gsgnleidfbomktjtbrq
+owccdxohulgarvvxx[pbbuwbbkrgqlhxa]lqbqozlyegslpxvr[arduobjtbducuoiwykm]tfziqcucaqjcfrc
+foxbwdzngattycaunku[lnkqgrufdcqreruqp]otrfaarzydubngucw[hhaqnaieublicggcep]jjvurleoxyatgtlexjd
+bxercunxdkmyxoo[zuvlzxstpwfmbnv]laszhsamraptopjmfx[syvqwydkiawwwpb]dyrhipcnwwbhmcotha
+mrcbhykyikojmqmxr[gijdvcjehxyzlpxms]bkzqdkykgcvrlbdcpck
+dqdrhkhanojahvaof[msammceatlnnwypjnk]yxkhkmiroydwvls[bgxvfxasrtzmiqpueoy]esjxrbelpjsvdcdx
+tuxcluskqsebpcm[xplkqkfmkdsjlgnome]qkweswhvzqmpkujows
+nbpwnioczrkicxddphr[zmtlntcztddnmcl]gjultcfncpmekcsosbn[pzwvjmfvfkanhxbhcy]kafsqjaraeicizjy
+drcviwihoplftyb[xykuycwejtdqehmuf]kfmgemdaoetwhczw
+iuqdiepdheskvvgvix[ayfqccpnsyzawotpt]xjmljfmrhvqedfsrdg[rvdqhetiopoykpopol]lnqyxioswrssucownvu
+umqpsyqwafisrktta[eqncbzzavysoixd]wdtnkvsvsfcvfks[opjoivoqobrzeepln]ziqmbmxwsppwzfro[mkhssttidvdgsvstov]akkdvcsjflhxllpblu
+qjlmfjwtglolrdxvqk[yufnmwyfhjrqzrxrddv]pzcaaeoitighunvg[eamjujwzolooemhj]mxbnbjvuikcycvnfuh
+zykdcejnrxpiimmbf[ofuzkgknvcexqzxpu]ketlytmhcmzvwtssaq[pgruobcnyaqmyjvospf]jkkvdoervshvgeqwj[fiexihxudpdrzdwp]pzmgprenvskgbgupy
+edesihewpfcjzkjhhk[ydoqcgosoyuebpoib]oaxftiagsynwawlukdo[pobikbzlxzzatth]tzvwglytrgbmlsdikum
+rvdcduthikkjrfx[oxwihjkewocfvjpq]wtpoobflhevxjuwnqr[ltfcdcjnkkfetnor]obpzfslqfunurzhpr
+ihikssgoutovoropq[nitrordhoxvqfbjfc]lxnjmoufkqnxizdcthn
+nsnkrlllkoyukbkwikp[anhzfrtqwndvwcndm]xyvidixcvjwqwxbsctb[awnmlqopvrjxyvjlbn]ldmgegtwfkvwjurzk
+dvjmhdavqxdhnbglm[qopsknwswyqoqccp]jycpmzubidfbwsskm
+dstxfmmohcyoivxmci[prdroxyvxqzdrdsu]qzczowwyxtufoewluu[ywzeufezgbazekly]tiifyttcldlhravctc
+anocufhbdffrnyhxt[sopxugpfxbbjlsgtdc]nvnnbdsjqfevwbgbaif[ljuuwzmlrnpjvxgbp]hoeejpqdkbrafcmv
+mvoaumknaokkjrduxj[anhqilrxkkqawmtdwhd]zuugnxwinmpwchymrx[ftylpriufvgtanapyy]xnizqpmgcbbotfpru[ilovypboxtuyozqag]aldfcdeyubuntmvyv
+xlvezhyhuvbnhgezw[yvaxeeokyjwjgzr]hqtybqtojttsyhycsy
+bjcbsmjssbubqixiqmu[uzycqzxxixenmtvz]ykvtnssyurdixcswneu
+gwcwwzlhdufsjwaxal[howbmljowljdsvbm]jggvldehjwoafvshlw[bfevufuakhrccqcc]dfufvaxzavehxgwb
+xuigvxgnmagtmdke[nxkzzxieoqxbaei]nqnpncmtrsiytxhy[bqpabinchcjqcjy]ysktjdirrevjyqyc[rwtodjwpnppdvig]cxedadgimutpobykf
+daqanavryjmzxflo[vcpyomgckepdftz]tizgysgskfuntqedhp[bkasgyhpytrbqvgf]dtjwyykxvutfihl[dgidcqrglxeuqmjvryo]baclxsovuumhgjffx
+lpyeghloevhgthedzjl[schxctqynpinoswgvwv]jpuvctsvrdpdhwsh[xdjqrqfwodmrxta]cmeizobaqtszfini[ttbvcouiaworjdp]uwfkbkxwhrkeugsccp
+ctvifkpejmwnuapjpjh[glykzeqimofbvirvv]kbzjjjxmiasijhyak[ucyzsvtasjfewtbm]zbhktdmufikfwsiqyfz[kolsqantshbocapum]jvjtmsmzjvdyawlrrv
+zbxgniymzkidlugns[xsyjfooxpsbhtjvjp]lydpcozhcmkdiactgsu
+rzsziayhprsxlwr[szdcnmcdpqkwlmhqlp]uctizqyfzorwogahopa
+njpfvxluupsvtbenq[cgenluehtxacymtm]onnngstsltmtobh[jkjpmbsumgmtkbyg]uvsefrirmvsuiff
+qukyshliwhitgmyeb[eikuuslkfgergykosp]fthsbtteuspbrqpssb
+xpgwgflgtkmtzhw[prdmpsbkrcbmjfitdyn]kqiyknqfoudyfvdmlhz[zswwgwvjkyvrjlg]zzmkyxkalhbbgcouvog
+dgxbmggkttasrcjotn[hsfrmfxeeuvovzuij]lnbdybfhkdsrymhu
+ryjamwprtdolosp[nkucayakarxezyxpgkp]qnezibzbjadqvqzz[kehgcplpjdlitdsg]nagotxuswnxikkicoi[fbpbayqjockutfqu]gnylxqhcacwdrdhlp
+quayrjbyxiviwukq[mwkxplqhlociiriaaao]lswnrperjoqewphn[nmwqzenrjmgikodk]sagkvoqqoayykkzri[uyenuakxyohedlz]ffzfpyguqryzodjwqxj
+fkymdwjnylzqnxhl[lsrorhrzdxpfkmai]vfytomporosnlpzc[pwpodimqjyfmczra]nibuxkjazxghetmxe
+vlrxyrxugxmmxnr[gioetjknstpngomi]jgzsfyvgbteacpupi[aeyhvaqkilxenfy]ezhnkbgkqgbymgzolq[dkzztikgwfghpltsd]nrslpkmvahlvwfhavn
+xpjvbcihegkoyjg[ddyxkmnhpnucgbeu]xnvxewhefxmfesoqkfo
+qgavdsmekecmyuuxln[toczsvzymwfzzrxprb]igonrcvkpxvekefo[abktdknxsdmpionl]uhhlekwqmalhfauva
+uveiuvjjvxlrlyxpc[ucbsqehsihiilfmxz]nvhvrtaxdpiqpbuyj[rhtfedxbiqutzvaucj]dxtgbmuwqxxqpfbohfb
+qerjjnnafocowost[axrfofdityutyzgv]acicnljrpsxzlcg[dhslugmdfaxclhrdecs]ekxnsbqhlxcfuron
+jknvvunefcyqagtj[zhgsvdlsfrlcfyoqt]srtokcehvdjwwkcwczm
+wwwyfmlxivfqcmnwtw[kaeymickhvsdlqkfuqc]dyzktnegiqbohljysa[qmnzkoqxsgtpattmt]oxxczwgodhiecoyp[swszkqetvvgdctkhyxo]qrjhaothcmyajmpy
+oldhdgmnxrbjncj[kkrntxgkrpbrsyi]qjronlhwmcpdnpp[ksqudrshtdnenqxt]wzbkmgdhgylcfpberv[nyddphsypgzienevnmx]memczjhmgzeyjchv
+jxojiumgecewqlc[nmiruhzcybahusxwt]pqlrbrwjitwylvzx[rjwehkmounctpcecz]jbhagxjlhngeibhh
+lbpildbxlosyqfun[razlyptphvjizuyonoy]atrqbzjakphxrguvmbt[ybdqfljkspdlgisypun]xttstfdytowwtxytsn
+txrzvdxevhqzpkb[xbsfvyjkimceqeog]ilzhcjiezytvmdd[kuhqkwaweasjoae]fuyyczwcpbdblxtxjgt[ujdwvuypmibgdbdtkij]vhrvswtmxfqkwmtjjld
+zipaigqfaywgroxzyh[nfaubfwofvgmjrlxw]srjdkzejhrpctlhbevh
+mtshlkbkfdacuvtjkbk[qemjvtgzaxmgvojtfl]emvduvrdlxnwgqrquk
+nekajppmdnadytnn[ynkibteahksyzvpenmp]jqxybiytpkgzgws[whyeilzvjokewweunf]ndkfvbdnbdoszwfugue
+fwfviekoibnqhpis[esurgsppgqchztm]vaxsbcgtqipiemvreaw[ytkxlxyzfifrxgmbggv]tygxkuusmptxqyl[lpuxifizetrlbsefado]rbykxursrelvgiilrai
+xyniecftatconlmstl[rpmxaolsbezfwzof]zvcmwpmmcszbaimwhfj[hggnwfkyexqkdancmc]cakzrmvvnmyiyzbwx[eizlhdetlkmzlrob]elvcwtpqtdpqxwdgjd
+yfxqriltoucrnfnj[zlvarepakboasju]bhpvqvllpphryccbjz[gilhjdjlsinanvhhe]rkypfwnsrmshanawlb
+cffxddoarujtkpwt[vgtsjcyuqgpoklcem]enplegjrghgfkvaqhtc
+kybnjsgrfnckxytl[obtlaqusuhkyeswu]vhaghsusagftgzxz[ganwwupndegfgxbckde]ncgnimjtllrpmajya[dmzimljmhjkbyozpmk]ygyhjeeexzqadcdyhf
+icjonhtmvgnwowp[xdtgaeotcyiyzozqwd]wudhamantwimysgpu[wjeyfkqluqgmbspxi]piyixwwkfdbogwcmtac
+qextqvcvlshqhbunkg[ouypttbdsycmscqe]qpxtjvipjkrbasofu[lzonfnanpflaekzhl]xwwxnjgtmzxnhmq
+zbtonkedeacrlltqnl[qlssupkhjptzbbru]nroemsymerldlshy[anmlmugxtrgypsvkgs]wfagpjfzgqcdhslmlnf
+dpjpmruktkfkpurvcks[mcdigtlyilcdvykpng]wrbydnqwmaatgjpjnew
+nhcyufcfcqqsxef[msqbqdsheiodqzpkcv]qlownycyhpteerrdfid[geiuncokzuwybrefno]mgugljgzgtdvyhpflbk[kwgpiyryqpdmphcwk]rghcxpkbbmimkui
+yyutoljmokemaksyh[ofyxkifbjqhrdklh]ltfjtukyeekhbjd
+uolodqcxatkpbywxs[qdpmghhjdsvuolwk]qfvcnuajofrynqndg[cpojwkswcxdorxvknrg]hluvdzuqsjsvhnqd[coemqesbuoorqrcht]oymvojeakuzzydb
+qrghrzhmccfpfymd[ejpldprfcjwhfthnli]wayofelvbtvjfesq[crskpxtazgepeguyywt]hedblyskngtnxnchdz
+gvebyckhjgfmqrxmmd[eklljmmtwggtlqdq]hmxazjnitvfcjmlactd[qhlsytdoiaksvney]jsdeegafywarxlsnkl[ycoyqpbbwsanlnoes]mnfxjeakujicrhn
+ttowopleauigqfzpuws[rwaipjqlxeajbszmt]ewurrgikabumnsg[hqhoudrdngplyncdoq]jvazavwibnayzbkmei[yfeaerzswqrhjiiqbb]khsqzfojtdimvcgsxuv
+zysbeejbuanxhomwne[wzcjovlgygbogvj]wqqbmqmudmkidhnm
+hzetqrjsokpzsfe[sfvglwbyaoczjozubjo]fisxeqpvyscesgy
+txsslfbzdakhenov[pdzbirgfxvyufuz]mwbclrbkpszfpgbrhu[ozmwusngkhbkluzvgo]wuwvzagakqcmcrcq
+vxmeolvgvkzdbldvid[ebhmwbfcvzykllewj]ngsvjbjjbyyoybnai[vvhfsezmrbmdkoxbdmj]pxxmcprffpzqadbu
+kagnhnyzbognzsmifby[rujzhkfynwygbcpuoq]wfgodhqkdextspa
+meyjysyguijkyen[vjyhsmvoyoppjknvivn]yuyroikrroyknlkgfn
+yrbljqrlekktwvq[ubrwbmlwxxtxnwa]ekompfyzprhialu[rdglmpamldxxxsgpmwk]atazfgcgkzbjydvf[sjdezkpgsienutudx]zuxyrrwpglvstutp
+yqhreymyqostwga[wngmbpfomuxgcyqdl]jdkppprtdctuyaonlqz[dfpqdidzlofdishhmot]gnifxcpfecsxdincqib
+xdfslzwasuifmmi[lbvuxnulhamtgfyhwz]sarfovphjgpdckkrbgy
+bzkfxruybgbjsmeflp[ubqugccjulkryeh]yaldnucjnxhktrgf[jamlgglyzdlaidp]dsvhuxerhecwhjslfk[yibicfmmkiugttqi]byyytkpsforwainomd
+asxywcdszmdtdndivdg[qkyfhaxaietrign]sjpliketcpjxkwxaoo[vmjxfuqxqgscfpd]mnpdsyqpnhlksmrcpa
+gpgcqhpkdzpmjoxbjvk[stpachxjlsdooglph]jaaoaxtyaogvmuhl[yochbczehvuvauxj]zatcmyzbmktdoohzgx[cbwozqlvqfssqaagyf]dkeooopvydlsoakyc
+blfmanmskfsbhnj[qurkejaextecwkh]iekzoszfdtcjcvqf[cllmensfekeoduop]kpldtlzhhnyaweelg[duturhserahslsvavl]tlscacpaddzunyhknql
+fgtfcerscppphulhdpc[cjasnicuepcfcpwwq]ubfqrgkjexhpcpdh[fcuypvlkciryarmpsb]lkazlfdxilmfoccr
+jaytjcjzwzzrwrosfig[bjwjolqvmwjwehvkyqm]qdrcohrlcqldwsj
+darwjaqwucpzrgob[utcloaeoixtgcssljwg]daazkyzlexvrwrvcoho[hesdrjjliusilwgn]kflojebucroplzdkid[mxvmzdobkvksvvzg]mllhibzchrvzahrj
+umabodjruykdkzuebe[pdyqfuwbwbnhvbgh]mvwcfyrzvyzbwbhen
+uuvjgoiafuuacqj[ccihiuugtipqyyve]xmtwktbgcgwvwchsseg
+oldckvjhhtvodiljhx[nqcvjxjohtdbukds]qsspbsmfdcamiwwr
+dzilyknpfbgtdnvntf[fzelzighvnvvqypxz]ntthcasrqrblqsk
+hphpardvfoqnqncq[ppvkmutvbzybiwmmcuz]kgfwazxcanccijxdxr[kvvrehncwizamjfbv]ptzvpznypbvmrshiq
+iteoprxpltaartmz[mnybqocmkusetlywx]mxfikdltxvgvklaxzqt
+qxldpbwuuyarzvlokm[peamzjnqawztknvnssx]pjacikdaebekzndkqbs
+kswrzqhftfhqqgetg[bplpppimgpytieviwci]gfeqifrktgdqxzw[ylzjvdvhoocfxoijb]jhullyfbzrzbtiujxo
+jbyalllemspbiba[fihpzyuwtiisvalzl]egftfecpkrowpxz[fwyjugfywhzgpbgxam]iuwakremprjkdfqep[cwjewifgwauyxaqa]gfnznfakypqatvp
+gtdsifvoatfwztxsgmn[lrdwcnvmfiuzxuyad]alnsyodvmgpdxqk
+ffyhycigkhlyiopmdx[yuuvtuoepntnqhkof]atumrmkzfhinoqq
+wrkcbbifeyemfppiaga[msgxssztbxvmdii]ydxtnokgvpouvcuk
+xivexjhdjysgmklbjp[scteqtgrnyuxsonvbx]kzbopsageoqsymtcfo
+jtsjoerkjzurnysfnwe[jqglomdcjmtvcwvhir]rozwrmwjuehpapebmgz
+qnscyvubszfeloscaez[povhdeeifvqfpyd]hdpspdtgtqpklhwqjec[xtqeoudrdzirwfxrowf]dllykbtfgrdwdlchn[fsjzptvngbbulfkpkh]nvyonktuxkjzpsciihm
+jzrrmwegexitufpbx[orlvlpnnuklsapk]kpwkwfggbcxwdxvp
+hfvhjwieruryoqk[qrtlruplpqjtwpuhhoa]ddbsdfqczwrmnrpm[hjjqrsppkjnvxmjq]juvwgpsglqllqhrc
+wogxentwvncxpjbntf[lunrnlkbjpkqcxprp]yanygvijbyhhpohijj
+kjwqxolclqanoyfes[oeasucvzznhjxkzlqb]bbxecjmmedvyfzapfif
+hfdiajyktrmlfzfbv[vdnyppvsruscsgvji]opwnmoadgirnedufn
+mrkqlpkzkhbfncol[huvazflnaswuhnv]pznbrubmgazkzfvkltx
+lfqfiunlwragtrknwpx[quvtbwmfgutkzaeng]kcdzgwyybqugyfgf[mjngrfgzmtbehzxzsbg]zjvpmzakgijjfyz[ghpyxsxuycqgdipdua]bjqtbqlzwyinovhnmmu
+ayagxnelxjvkqkwhax[zlimrxwrtlqtkvdny]nosfkooohodpzjp[hsrgztcucnuagedqoz]aujduldshdugxgbszom
+wkeqhrtgnhyektefk[afuwzaqdvmzzzgnuvw]aaisrnfyhuifpglpgp
+kpqqecovarltptjfdf[fwpprvpqfsntlobpdm]dtnujgpbbrqwqdyzs
+alnyvjvicoigistbmh[ueworbfuagjnech]dpzdovbhhbguxpginqy
+eiumooyxoukvaqoiv[qrygigmnybosyay]byhcqoggajjtotnuw[wpgsucwktfgcuhhi]hwoelhsxarzriqxtwao[nvemgikmzntrcfr]uguazrjfisipwrhcbn
+ghierhnuwvmisxxa[cmfxbenynymgvcrr]oknavjpheqtlsvwabd[izrzgzwvdgymivghdpv]fbqrtbvhcjgvbkwjs[ivdprbnygkhgzgaym]ziwhfgnbawgtpmkswvu
+pqcsccgpceupnvtr[bzfagcvmbelgxyns]uxkvxgveigehxsugzj[oojovkdwhojqcbilwvh]xeamwxhelypwwefsabq
+iltmsmcvjnhczdxoti[umsmolikbpmqnsyah]tdtojhhqszysiqkfqr
+eubknijqrihrbulq[hfmdunzrzrgseunf]qgdasqmtmgoacfid[duazrfhejbzxepx]apwgpewymhnhxsrx[judrexlgitldqqlnrpb]ynfdtcugmjvpdajapon
+lqwdkmmktuhdbawow[lsrovmkjyktyduf]utmrjitsbijombwo[abvvufjkwoxsthzbao]wteqdxfhbqrakiqenh
+phudxliosbjdplwzx[wmreutzkdlbxfksjt]onwnwzbffksdsrrvxuy[fuklieqfenqwinbmf]ckltdwaxzrpebmksn
+mldqsgldkmerpwqlg[thmshstolghijyjy]xzhkcpjyjuydgxjm
+wpsseyevqcibokcb[hnqscfwtkqckqmao]jsnvfanwiodlasx
+pomqeoawmwhijaq[ejtmvzlmidqwcft]hkeetgkruqgmnpoi
+twkcrdetwuxaxucnjv[xffwyrqfcqouyxmkrro]ezewjlxapphabveea[jfyjgbpkflijwvreer]nesuewscsclvwiwkn[xxjkzrpeonyctow]yclvbgnwgcarcxos
+ugndgtdqyxtplkdz[worxgglrocgtypfvmb]lcziijmkjfdpghkjqfp[qomfivwilarizmq]dnglkuyyinegywu[batxtrembnirlwr]ovrphoeyxqnhcvmts
+zgtxjxnktlvldrxpul[rviiugbdqcysxijrc]kyktcnhhtompktirdjz[bkusovlvbbigibd]airrtdvywvomcfrhi[xgapjazusatwmnl]usdiffjsbadtdonojs
+mimjtxkzfsnijawjrey[appuokfywghecatbzwo]aovbqviminrwaszvo
+kcmrpjoggjmfzwezv[onaeglpwhoxczbw]totswqmklmzrwmxdf[befvnijunppmomoduhr]wydkdiejzzdppny
+fgpjujczabbtkxwvfd[cicmceziihzlkcwdwhr]sicifccwrljuhteondz[qwtxzkpzaspfynin]scyjunafukgggpc
+buyslulsiiwxkge[ypiuwaxgxsqpbqqx]dwsyrzemulupybvx
+telsdbhziecdqvmyprn[hqpxpfnttkmchynab]wvopujdicijhmttrn[orfuzixnlfdimtsc]jzvuxsquolwwtzr[dmiytgapehniwib]zylakfeifdzatmqpb
+klvmlkigwhcckkyx[qxriuexxfsmfcpgvlzb]ygklxunjumjcmoph[ychtcmyhbyipspnnsr]pjqqgfbcsqmmrxbtj
+ugulusabrxqyxbvv[atgfhjdhplritht]glsimouvohndboxh
+fatrlhuimyqjjobdq[xvvmkavirljwcgmkvx]kbesaoxeeabtywsxcwr[pmvliimbudlzabbz]vseagltcmulcdib
+vowrlwyrxwivzacnop[fegbzczrceczdasjr]orroaksljdcydlk[clwvvrdfhommqcn]yqigbtlwvklqxxiors[uliodgyotgxdymyi]lqverjsyuxifpjoru
+wevsnwwlgslgxsof[eyjhzwdmvusnuerbqmh]mjzmgpkhaatmwptbo
+hljbwkfykqbnpqhkfuv[uirnlrjpryuhtqztz]ackmzmullgwefgug
+lmumdzgnhyjajoazd[yksltxstrsvugowym]xcmwqzbluyzdlbpkfkj[sbnktloqdabygsmyp]pyavvgzsxokeecxh[xcoublhmghnexnts]sdbkqumfdezjvqp
+stnccrfzofqwbcafssa[toskkshmnjeywtuq]kbkyxwghqfgrtxs[myvqujeowntxqiekgxh]dplyqviwehtzoxrrix[covstbqzxjrditsf]qxyocadbpdqqqpadl
+evgjdjnbnzmbzjpbfm[cxhsxvxtdtdowbd]wceyuozkwdjdsrsarl
+rbnbqreygxxaufhws[alsptejilzoslxfj]xirgkoxgpdsolbhqiqb
+kpzbxjsrsdgzstpc[jnpsoqmjqnfzkfsgq]tunpisxseqxjtyfwij
+kegehkcwqdyujtyv[qfprszwdyjylowrl]yqhpsvfmcofhrfn
+usfdjspdmrsmwotku[phpquxkrbrefnesvoig]vbrbyhzjjueflzur
+ahcrumgrsucgvcvs[zgiwqzqxdocenumve]wwmkejymlaysmpr
+egorqvqrhdxdcwglb[pewidggmjfdwchmpuxq]vfpginbbwnzhzutt
+rbwgxniblxrzdux[ctmqwdtjnnoizpfxkb]cjalwfgvfvehdshc
+grpqqrkmvatjnpe[fpuzplowwtztimw]zsebojrxdfyouujqu[jieuliemrlsrrhaaral]vapfxmifbvtdzjpqfn
+kxqzgqwklgxylpccai[scugesodkfdyduxfgpq]qeoajrdmbkawsrcde[yhplavixoxekedvoq]oefgpvukotfhzxvdpt[vfffrlkuirbixakjbg]shhslgefljkjhdu
+xltaldprsvinvsgfg[korqzbyuimhrmxg]pamxettjpfchnwvxfb[secngupffbmiekzfewg]jzqfwquugmanazihei[ldhzfrgdbneaxjjndgg]toefzbwrdaiqssxrbqh
+qgiiylhrxzzvniaegfw[vfxiqmehxnnjheiszxb]txrwpqbqkdbnsvt[voiphlhjwxrkcyrarwt]lhlhcobxijaoosyx[dyqmagxqryuyfbat]oovkonlsaeiqnil
+cwxhidoqdhxragzpib[hjmpsaxbqpiwqhy]csdontizglsbbeh
+cvqlicsscacfmuugq[eejkmtnhdfogzpbhygc]hsqpgofmanfemhido
+tsbgyswofaablrj[kxsfwmoymlmvxujvqc]oiatufqeigamjtqj[lbnetvjnhlmvyjs]aeeetvtqgykzstpt
+zikurkodzkxzvjucknr[eeldigjdnjetqzwtl]itaxybvtwbhjdci[hbkvepoewuzexeg]ohfbodukqdlanpa[rlxoscpwxfbemxvye]ydahcjuodtvinta
+dkdquuhvndpmvudwjx[hofzlmhpteoarpre]sdvnkykpcblbaardmf[hdtnalxmijwrorx]ixsdqmnoqrieeqn[tvyurwrpjzolmoqn]odvpdodyhdjvcaqi
+leufyoljrgauyshjmdn[omwkxoqtffghqvn]iqpnagprpvmlsvo[glbhtzdectgrymdzxf]dwgpfoqsivjdvpiidzo[glnavlopicrpfkc]nnstfkiqjxccqrvmg
+jdpqymeesiieeeb[iwrygkpzdjttxuz]qqrbobabyedbigesuh[tmfkwpopdgcfuydhukb]mzldoxgjdeckpdvu[obojbnmmlhdwsman]nssaclvkjwmoozuissi
+upgpcxmqbimkrcvcmp[ivnacnyueiepraljdh]vfagabifynlpbjdc[dobimimkhmytben]pgasxhypmszdnvjwnwh[nvcvwfgrqenthqcqlw]cdvvgepmrqskpffhw
+fifgarfuqaoifkymgx[mvgawkhnxvgaqdmzat]fuemwmfadtlaxwyslr
+bcbtmtmkhecpaemtmec[apsgtrjqwqreuntmdyq]qecxvrivzvlkwwnzcfv
+vslhwcbtvnnkfge[zbotbapnldktkexac]ieekqwkifqtpzwsb[wjjwgvhvnqaqmrmath]aeauqxrfhwdlbsqx[ijqqcgxjzepgnbru]uycbebwrapkiobz
+fgfxlcgdrvbwkhf[gcdnlfdqppnocayj]kgluimmxtrnrkxxy[ebmozaizcvfxamjfgfl]zxjsthsrjazocerdybe[uiodgjwmepojoaswdqb]gsywzobidosuauosihp
+jocqkcfjxtprwzxcol[jomzitpuxjjstqj]jyaupzbknhzvwkwejgg[frkljzosjvpzzffe]najjqpukuhkyseux[obvojkkfdiawyysye]awwxmmkvzedenpagx
+wnjitpqtpbywfdfzqb[zsmozjfwpksophbzrp]ryxeuskjtgqxlkqinbl[jbenmfsdrvwdjfxhibx]vdwygykkkqqzoueisnu[xgnqjjcnbpugkeuaon]wvyttauvhjmdqcbmfqz
+cjikxgbzdupqnoq[khvayknbckfnohcbc]gjsqdwbzsjnwjblbe
+sknizlycschmfbcbo[glptboptcwtmwmyj]hmgkwtwaifrmzxhee[dxxxiulybtkhkstynq]mjntafrkgppmgisnz
+vbijkdmufqxhuinw[nqkbpwcxoozkrllibiu]maiisvopemncukdedg[flspngjuzwaveawgk]lqinchaieoizrwr[tuyuxyvxkesiktilna]rhyincnkvnnqejsoxp
+eehvafmuwihwbizcao[vnktgdjhjeatxeshjh]taoisnoyefbphntft[pfzlfnftyvfkkmau]gxmhcurnvyqxgffll
+ytdqzmfcxjezgvr[yttnwhebnitzkmpvg]gnxpxseopkiwdwq
+tiygnypqepfcbcqasq[qoiylamohtllezrd]hieijornlrltkvvf
+gcolxjnzzqtozkqlo[gwiytfqkewszkddc]mervsuxdbxtqkclwli[zamcpapgayrobsrnros]skfbjychckenvdnk[msqqgpdtgzpbdsflgo]hswedrxeichgpbkt
+aoyzbbkhsyzouhf[yuheesbhrurspvkoeoa]icwrvttxwvrjodooy[lclcdnulwihttoo]aheoekyzcrdbtnkdn
+epqxzqeqfqquuvaxut[rvniqevejzxwbgdj]mdozdllbtyxiessvou[ftmdtfmxjktmdjrp]rbdfhuqvdzpiyaw
+fvfozofyprhtptnvfvv[cvjusvxzqhknsrfuw]wwjlogceospgxpoq
+lboiooritgdlzti[dcvmycwryuiwrxuf]rgsvwmbouwqweusdsrb[ncalmljnmldxtgjyn]digztuhetumfrmzwg[jxhgzioinwtdfvsczf]ormtzakkenigohbn
+jjgkkenzhjxreujjury[oqbhgbvyvybhznj]lzzpsybrpvmfxftasjv[fajchcbbxzyjzdmzju]jbyovxsryhenhqd
+kimqpwhmrecjichuf[biclfkhxsptyasun]cykzrmdsfvyszfldtxb[foamaxeacbbfukrav]kpdkasbbrjuqndsjf
+ixiemjwdwfauydlzrf[ehczcannzlhrpuu]zgmsdfleegepchlbml[pxixfrfqusymnyad]wynixqpqilkigha[ujtjksmgswjsqlt]uabmyxgfqtqxbtggvoh
+vvxrjenkffmjasf[zxizrnxsywrjpbsy]danlwskfpxmwozazt
+hdbwqsphlabkzxxhrgo[erldraphnhaevid]ynkxoezwjpygvftw
+eynyhfzlfnvsrguftv[olhsgnhicqlhqcopiai]azubeqximmxxruopbcv
+ixkfvfumxiagjybsn[frwibevmaiibyzd]qzqfzepjziatdpyqmr[onsezbgebekxybzzqzw]yqotbtwhsuxraexdfes[sqyxxukeslhogqaftl]kpqsxbeawasfnbwm
+fbotlkdfsscgahhtbvr[qzlujuyglqbktek]fitzbfribrvygprgssx[ytfthkzieycghddhs]twelmrjujaidadamq
+nuxgihsikrkmrydy[awvlrjbdobngseyw]owlsggrmwypppcnkmws[ipqmpwdvbohtnbs]nutezdkbigrjnveau
+ftxpxuuvsdipzjvmy[zfrkyfvducmhwzfdxj]ycyrhdiyszpbldrqyqp[pdhfnaicafoldftflv]rskyllsuaaxidlokgxz
+gqnlikldqbizpsceti[skfmnlrtbwyqrwpi]ubwivkayvgbhnixj[kmlxwcfmudgamallj]tfwinixbevrrgzozw[iufudfqiwsyjcyqrs]ujixfobkouvxhmvcql
+iddngjedxnwlbcxhkw[yqwiebcdacegykn]saybhmmqxdoxrrzced[bqjiuuqpbxczshymt]qagtwkbyyslughgsxrd[wjjqtpphygirijzcnun]lvwqqctdkjvaatovttj
+qzarsgfojoaqkzb[jiuvvyihogymomqddqs]ekacrjmxsudjuvjd[dkfjwxmpbviqeuiotlu]tpmzbyfqhelgtpic[xcankncgcyaixxcuaj]jsieyimscyfvaeduf
+epqisdvjvcpyxcwxuu[hhdspwfhkosxunncv]iibgrkioklsoktfp[kjvjytinytggjurws]oekjstnakyoohller
+yidewjsqwykhvakby[ewhvuvpzmeexvwtd]mygypbsbaabkccvslri[dgaksoqgxghazflkn]kpdssbszxhpltdxht
+ijhcdyyvjscrvhh[fpobanqwzccnyev]vtvztxptbegfabvm
+fcicsnaoileyhlta[ivnthhpicibzhtyfaf]agaffazyjidivabel[zprfefitivfahmsx]jxfvpjrbftgokdclnw[vfmlrayxecyduau]dkuaarmbkuqqjuva
+wjhhegqxpegrypjlpvr[orhbboezmjncmclamy]pckznmicczddarise
+ccxnbhlsqrtqcbrczci[zwbnllwffvdsmmd]wdcyuartrmykqbvmlc
+shpzokvkrrpypaohp[cdbxbviwegleqizw]dcilynllhnasdzaku[brkdsnedgdlzlhxzlzg]ygvficcbzjonmzh
+vzdkvwtqbqsgxenb[dfrsswrrxxxlpxpgp]lheiqkpbahpgjtvax[lbfhfdztehvveioipoj]xkpbfwdxvkcndrbfgya[qvewltgemzljlokhjxi]bufpvhmvhrndnkmjsjr
+mynfnfbjlwljwoqbenl[wnuganfnmpqrgcdxvn]kpcfvfegyibrhoeouiv[tmquruuijoivdluhc]lnspgmbphvhxlcw[slrraibkhqkaupb]vxwczoqsrepmgzz
+eaeovlebqlahuiztd[dngzrklmortvzksk]atunvakfxeqeymw[huaccbfdtygotzubrj]poeblqeqsdqpcbqd
+gzbgdqlebuwepvx[qpajreszsyyluwi]hymkhgxqpabniqzells[zediljwkqfpvblioz]zguladbcmloyugl
+cvkyjumasouhugvvz[dtidgtxbbufhwyvob]pdmhzqubmdreglyy
+tcxjcacxysuimczi[uhflafmjntxmsaf]uexrhinqroupcbksrsj[nocrykejeuzzigkyqxx]crwdvpjofxynwft[fmxkcqrsrpdfxscabs]crbnlnzoihruuilu
+notkmxwmhfptgfpvntf[ucdfxyikwxtsumebhj]kjhhkgtruhuqzsl[nyiklbrbfvreipanby]flesvbofrdsclfvm[zghcpgxoauylwmlzfl]vwotzewzjzpyccl
+pjrbmasdillqwdkjfni[lalstrvjalnttmwr]xbezkjpklkrnlpzjjn[wbpwhbukoixcfsqnu]xknhkqjktuybkfnz
+ykvyxzavfcirelraq[itraxkxjwslzkxkigcm]ndbwcybrgayecrpjao
+jqwujyllrskoetkbz[akunxyvvaxrysiygb]ynqqotupdoqbfwncn[yyszfaxjmgqmwxrvdx]zeacfwrreohtnzvobhj
+fsfgewroujqwaek[mryrrkeqgtpibzn]vlmavzfvsadxbdiph[tdlovgncglhaoqafic]ziupjyryletstrull
+fosmjgkqrqvjjigrtf[ejrefcyognxkuvlwl]bzhpufedodqwsztzng[rgxidklqahcldewgfrl]eodokojqopkrrhfpmmf[yqwaeuztmjkelpwlj]zijgacsyrbtwkxh
+cehnutkhbzhfouyk[pdiacmcgcdpmsvgvkmp]uaslakppkycqbzn[ldbaomdftjcnpasl]fgdrrrzumavxzlojm[iyknsyaoypsbqicx]ggtbqnjftvmqkmiu
+nmezigjskmagkzcsyhb[rfrggycsxoxxnxrhyb]zjlrnpgxzgljzfw[ztdnrdocidkgbqmmqa]hnuqryossbzlfaivij[dkaufcpwgzsxztpqsk]tzkdznvnizjtbrnqosj
+zcdfhyoyrbwonet[otdhxcbmwxzgoyoo]kbkvqasgmhmuynqth
+wajbfmurouvueehl[dvyueqwzbqcpdvbjfr]vkujmhhlqbdaqcsvomz[wlekuxdiumhnwms]yzgtuwxfirpmllcek[tzipbxbzpxcvzxzmtr]tynktoelqfhedvavge
+hueffzriwkhilam[zheswsymmryugjawlxy]rptwswnecdpsdjujnt[rjyipvpqzbnvtugvi]xkicvyasotmrxvqj
+rqbhugeaozfjbqm[blpvbvcvrytbekhjfo]twsrzdeuojhqpaa
+fymuqqbklufqakg[wfsqzzrvdqcubxbdr]yzvdgnwitopzvtha[vhrdzzbmubhgovut]tfkcybfbdsxbxaxnmm[ruvfmuciecbfoxbummm]ysaeetmynjhyegk
+koqhuxoxhzmsycbr[vbpklymhqueodieomz]jmstuovitaskfbay[mpccjuzuqwkhvnzlbl]jvdqgfkbyzaaeaxjfcl
+sbryyigqipvwczxty[ypjxmlzyfjkfqxyxibv]ktqvnmbdtykqyiu
+vivvjcfrqdbkyopqjdd[wkpuxloudonlcsutb]wpcbavtlbxcojarsj[wxihbnghmpfppwqlykz]dpyadzmpvgwtjoiz[jgagjiqugqvjnehajcv]tvrrkzjwwxaswbaz
+tkpkdqijrxmpddkkau[yljmixrzauogowt]yngihfgazktusprrt[ggqtnksekzzypkpud]rxvvuhfakfcxjieaa[spuvyobjexcgobltmk]radfcjxnsgsntezrerl
+hywcvnclwvvcmkdk[teiryduhljxirhrjbt]brkfilaybgtdkdh[zjqmovlmzogwvfmmi]czmtshoirukgjgeug
+sdbxirgqauygushqq[itvwniqwuzmpzqbuug]dnrxseaisdgklwodsgq[euqpdyvpyncxocy]ggchswamymfpxaiap
+nzteyxnakzfebtcszx[uctynyhtavkzfcudvke]uasdfpeleelxacxq[kyqsinbcwbvlrmr]zelddmnaqlkhmbsw
+ttzhosgzkuxfwsy[carsvskefzrusoihqw]qiuobbcgndqqukuvbmp
+wihzjoazedelgsojb[ftgarhsuahimrocy]umttbzcrvgzroprh
+itojzylgycblvbao[xgmeltpmzvzvyfnso]kuohqnawebyjdrerwty[oslthgekjbgpsnkyk]jifnogopgpnkfdrwi
+nvyowfknauliiht[tskhxdgvaggvgsbk]blgylrovweecglu
+hvzpbfqqlwjennnj[vnmqrqlfiqeqdmg]hfofuvqicttlcxka[ievkgdwazpamrdzz]aoofvzixtqamcvhbh
+yuxckarjmwgyvqjl[nvlegkojdyybpty]hvkrieawbpkcjit[tewpyncidhvdtomjq]dtgggmzwogtyoxrepi
+jobfkxxyhcfvetxwuc[nreuagzglpniuwkvui]seztmibtqvrdepqyt[skrxasyhbotymilzgzr]jnhqwvcpirmpnltnyn
+hoqhdburqwecnzksmd[gnegphjoyuvflxlujbs]zhuvrcztcfgorbwuc[pjxxfqyqmnhyopaeh]ewbvxrexhvdawazw[kbngpgqwtgkzuwupwj]kmatbuqigzqrzmbq
+ltjrhusfbjbciixg[swlhqxnykjxumuifqdd]romkzpszqgaflgbjpsp[lbaqcvazaucueltnp]wovkfmiuwjdqxovf[vuundonjprqrxakp]wxeulnkckdufqjy
+xkdmgtutsfumpzteeh[yvkilakqbawvedm]dwwaexrzzsyjpzsn[pxitznlnnvnjyrs]kcnhpbkzicorrgncowu[ogyvmiykolbwdtv]vjaksxdrtpuuyykihe
+eyzjheolvkemumxpo[ipwxnrhyldvgewl]zbrzwobnthndxxvthe[gkfleabqwkpjxbtdlt]wywjazwwxwmuqkpwj[omgsyntzcnhjvsu]asknyjsgbofzyfte
+kxxpalmmgdqwahfxs[zwafxcjjypzibafhrag]qfnbakvxozjqgbnnizp[bqhtnoqzctknrmmh]zvmyctoitshakgx[dzatbhonulhknbio]eufzjykwmqoignzm
+beenkdmzqibirws[majntndkzawkbfpi]biygjiawnioazizbt[yonbljzgueyiuirtv]umjmhspfocrpobmrfu[dwegjekvrmgoaqc]dorpbifeqhmtglavx
+sstlfeielfmztngzpbl[alzfrbyqiqangbkwi]qcomrirvulgipuk[mdvsghpkpisxplgit]aykwuhadobubmrdtvvj[pqdycsmawculwsz]oemcgayshwppgbwanxk
+qwhfnqzudzysqxwebj[nhsrdvugubbtuuseux]etcjsefcsjblcjgshh
+cgagbjtoxvwwqonb[crbqhpfajsdwtudybm]dquyiuqtarcupaeujhk
+qjsqqlgdczcqarhftri[rchwsuodsdofjpd]mrpwnlqgetejijnwnr[lwusdojqkioapaxwc]ioumfyxtwspuyztz[dgncyjfldlapoasebgz]raelsaeajwuhnabrgw
+tihnitxxkxjvudnrj[neqbqspcfnldrna]qkkcggwjgejtbmggemx[ffhkzdeopnhrdfpbrfn]rucxwfyfiavskfahg
+zralvoiqdvpvjkkf[ttvdslqoxnlvnyyskq]joucwcxixdqsagu[tulodbmorpbjnzz]qkknyrgruwgrgupgb
+fgfaohmvjameqyl[riumppkgphbaziwbfcn]gspevtjsfjazlolblh[sueqarjummrmwdgzsr]szmltztnwpqshlr
+lgcudszwvsooaxhuz[wpnexmkikdsfquxleu]icefstmmxwsrzqoiki
+elrybwwbktbemldjqeu[moigtqyrbfwcdtjkm]cfquoomooaqrsuomty
+rihnsvwngkabincos[hrafbjoluwrkoaqb]genyvelnsrwqpljgdf[ytnarqybnwaeawssx]bdhppadoofmwwbcbl[acnqxbqukongbge]tptnvsrcborwgumweyb
+sesxnxaikeytqds[groytsrabjvakklwp]jzexhtzpseseauk[sdndnglavrmhzyjdh]mpsxlaxqnazayppc
+ozkfwwrdoftbpnqwa[mvzpilxwrdeszungggo]fbjxevczxrypzzegxmv[zvzaovlhirczrlwnvk]yulsjotokxaurjibuk[hygvqlsqfygujup]ijtuoskhnrvxmmnety
+ssoavardlqlejqfndz[emljlpogavcsyvavr]izdkqsihedwjaxva
+wixidnoyhmsiuzwbm[jgqpnkzbobknrufgif]yaarbsalkqgscyv
+hgcggfqnkhbjlhhipc[cgcrrzyspqlllhee]czfvtkjhfgnrwwua
+ggnsczivqxwhungxmb[foslhzlzqyhcwepvhga]qgqnwrpvfjilhnttbv[uhuhvuqwbxsjxqbmqfs]pvwkiufdudmyabq[ffqrrfjgkmegfls]pvuflwvnbnllckrmdas
+llelndaczjibswzoaen[dzvunuujhpmgqdyond]slkfwoyxpgohhelexsl[hvtucjohyvbuihbonup]mwatlwbwxntozpiymy
+epjldiafxyinaljee[zfgytlqlzoaauszrn]gvyukiahumemeqnsy
+vldhkwyfpfssriaiwe[yuluhcsjdkyumyhnd]wggzcfalpkmnsudzr[qisyeltbpzmkvqr]kmbnsrdjgspckgmwfj
+qkxpyonwbsteomlyhxz[wdkzqjywdsbiccr]ojkvswlubvbbskvnbdw[ejvtytntukhcuuad]hspfdjitkfetytyb[hlgziyjqrulvyaoco]rfhwusvjmkzkpmjvrm
+lnmjprwzvaboyyobux[lncninvpqfpuaswssjs]vodhkkndlvixtbsdfph[gdufsyhihlynxuluvx]oyczgnpmusuvligf[jqtdbytmuyavcyfaia]mcdloputyodiezffqpd
+awulgpuvbkountidkgx[rzatlqccygoyamniyaw]zmkfnkaiuzjgdsxd[dornnqierejrlxbitfn]qyhlxykziurpdxpz[fjaesxiowwxjvoxzq]oujzxyreqtbosriwkl
+hcycycsytqzpijy[pptcwgiggnlhewdwfa]aqrsokplrsmbzzovz
+szlezpesytqglub[hlmouktdjtcglvvb]wgcrjqyvabgnnirxs[cafdqrjgmugvsjarx]uomjcavfgggsyknjge[syhraisenfpvlekk]voyezwktjlqoirx
+ltjosfxwsqmgdrnpyav[revxajvfbpuqqscgxb]pnjpsoikmxwrpbk[frqghuqvbomoddukohb]egfbhndnpnlxjhyv
+ydyzmmgkrvbycjgeheq[xmrcsrshrtogjfez]vberqebkqhindvsj
+usczwnycqbxdrcfr[papmzhuxspnfexyr]pwsybmexcdgfztkc[jmiatnbqkxmarkaeer]whejsdpzzxkdxgwm
+vfiswfowhnwcuusmd[dhhjzfujepawktlh]quzyrwoerrtncnnxup[ekhrriqhoudhiwiju]exzcmnyrtbnxlchf
+fmobpaevmkephhfuu[pjbpnzxkqpvoafxj]ickqqwfifesukyx[uzfultsftvuzbipz]jgvjewotmlkzqhvvc[fhfgcekzgmgxosyuac]gwbmgqtvkhyqidnehhy
+zbwadipvxkyqwsaassl[wcojcviexybrfhdfc]euliyskdckqzozfnlpn[fsvqspcvigzxlzya]vzabwryzpqlmvns
+wavahkemgrtwnvbocse[hnzvxqcxzisfehcy]mqvssniqlwekgowu[cusnrkcbwuichekh]cfvncmjjykeaufknu
+wvtptjerlrfvtbywes[ciopqzpfjdoclfyxxqy]sleyhkequxorssls[weyxuuiigtkjsmnugij]onxiowvkwaaycpv
+csanwgypabdqhiinan[gujzhrxowlgejtk]mkczaemurigewvqw[lsqtuuxcsuphogl]acfqrkiewfykgnx
+ennvxqkaqdppzmj[litdmoukvydtepvji]hfuqcwyuufmxcxy[bilbdvnquchtcjquymu]yjndoqqpyzrjudd
+vhkrlicuffddtktngy[opctcwvtlypwglpaoi]iscxtzlmlkjdgty[xadnwdasnszzmwwid]uijlqxpfgkkcmwga[ykqorpoxpbjkepibk]dmuojdumobwfmkvqg
+wgcihfnjvadtczgqbj[psdtqjwifivgbhp]ocykhmjfvbppiltqpvv[ermpbuyieexqujuiji]vjioxemsjslsdxso[bmsocpaehaeadsaqzbm]hqlzlnedzwgbxbcacf
+reesvrozyerxeid[ymtiurpepvrvnkf]thobixnwiqrdkih[uipdwllkuudcydjinew]lzpxeltetaixzfjxvf[ewlhchkdiewigxy]wfeiqnngnifjzbpikb
+rxgukabwlgxzaxjxch[ljrblzdmvcwcxdoomq]ksidvuwcwvwlvrpe[yrnyjokakcbwdxh]nertnqwigrzbtdmj[gxbsdsdmishqjeswt]dsgnhlagonywspbr
+jjdfvvurvfljscocvr[ueywpzuumfihiocoe]lmcrxdlkqsouhpimc
+qgelmqtmcfsdugg[jpbrzcblivebxazpamj]jpkxrusyqkjnndao[nqcxhhmkpfgrcwhsoyr]wvigixehqklwvrscmz[xutrclaofzczcvfnxll]xsyxrvfnovmohxfbt
+aqhrsqbyxtxhsvmnz[pfpclhprjghikyngp]krgiznxuehpzeiy
+trqnrkulbvipvmj[mgsdnaqnayymjyp]otecdnzhhcufrly
+illmnsgqusbqybiso[fxddafnnoholnqjotb]uplvjosscbyhwmw[jsedsarqbralzbjmyq]sdwkyeychcdpqvfup
+zehmutjhkodiqpi[usuretqrbmggvlvr]dewkdjmtingkzuyq[pmmbbozcvplhejh]jzasjfqvsusgnkfegad
+ljpcpqtpcpcdttjo[qbmnhadshlheoavsbxi]wnwuahdcagpellgs
+ayqxaqtrqzbxyhu[wkplzaetynfxqzhtkco]jpgbztbvmojlflc[ojmgjvfxdvlyzih]levvkelkzftbzwzkow[fmszxqchzjhxtwfm]vihmoqcosarkzsad
+nigshquyfjlleujdtw[qmiqiabzqiqafambcv]ywbltgpjxcwlkyahg
+vmgyovkavazsxwed[anpflkjsqieufhscn]uizulvgasvsstuhfn[ygxgsfldybdnsleqy]tztuatotreocsrfevpy[yxqmsidajmknyrae]whoydkufyieuqhmqv
+jyhhfbftixtntuozgfl[ffrzhxpaezbspndbo]sbwvaoziercfpmeo[tzeluvflupgartnyjes]gqfmzvmpieczbjdsr[zeenwxfhhxbdgjkr]ojqxbcxciclzwthvqyv
+olhruodhjmaicslbgw[upvujuuazyolckot]gcwfjukdneuxqreeg[tnnnlficumlgwkdsxus]pxrxdntakudobpo
+vdowqzktnmpimsvok[gggjvxecgicglrkuvfb]xtsuhbzqpovnoqhnbs
+hxvziijhffbzjnjvgoc[sealjvjgnjnkzac]neuhdwcgtjcvpku
+qryaqhtnjvickffebwj[hcgzffksmwbqqdm]zrwihiolnfuqzqpkxn
+egbqexgeqnqsaxdi[xghkrttlbmkxgfj]rpulxldvweijplm[dldqxbqxenksncnwhxo]steqcncxfskqcfwfnbm
+dhusxmzjdacdrqor[tzblogyadgggzbi]vssexeogwduosdoeo[xexqnjrctzlbkfri]dqppelyoecnnacs
+tkrkjtgdhxdcyapamp[gvyyiztulksqxosp]voudpakpaphmrlebpj[vghkfcrqexfgoguvbxv]yronkwfpvrwilnuegkb
+yiuhvglusvqtzvngzuc[mfvcrgjuywuthtprxe]vjrrmtbyppmesvorp[ucqdvtwolrvpjyhiolf]eazedskopeknjcqx
+segabhonjryukdicj[zvjqilxyvwjnjgjvrnf]gxibvkxslgkpfdhsn[tlbwwiypungvwcvwngx]hhgglxqosunhdvgr[mrjgltlfxwsznpnmdox]bqsgftffsibfruyz
+hrtiuksavtjzekgf[vaagjkvweeznlshs]ntotbakgpxpcmqanhab[pqvkabybndisouur]cnjoxldhauoppnqqk
+yizxcouxlbjqbijqmj[kkqvlcusdkmkbmuia]pidiunjwlkapojzzmf
+dfzinzasgtnjdbdh[wyguangjweruyqm]jfpqpyqydvbdtgqpqt[eryvzkaxiahxekwbp]sywpjhgufixvhljk
+jkmabkiiltlvopaxec[utofhywhxjucodwke]dwxatuzwebnyulyt[iajptbioysozunsws]nmfnmtguoqipjmigsyn
+yxletutyrgisbrm[ljtuifjmgxupgerhuhb]wpqnfedngiollocqbfh
+zszqqoahkvdvpezddea[defewzqptytvhnpzcdu]cxuavzeyqysdynnr[gvmfnqnjwrjrjzphei]pelrqmmykeiamnh[jrjqavultdjecnghoc]ekxawogufyfdmltveqf
+morsvbgrpgqiqeplgg[giswwkjoxkgkbonav]lyhrrcwskwjjflawgs[ogjazoccoomohhalb]gjnkzumbxtojtud
+gtgotbovcctgtwwc[owthnyvlmcwnctlkilj]eytxalpmzywmwqc
+ikznlwbayqdbhusm[iqstwodfolztyldh]amvvpwqwlswcnut
+kumjpojktwxazwtg[idtisckrbetbaye]mgqtwjxlbdpadrnxg[eourfrbwgoeoqrlvhv]gegegzbxfyzpbij
+mxcepmkacvzxddcpnsf[jviddcgbglreegewbj]qmqdhescnuuswkhpvxn
+ltsouowwsvovkbie[huwwuaptbopxsixrb]skscogxrektbbmuwqu[niaczcnnxkymnnuu]sfczdkldegoynqw[mrjssleiutncang]jkfgyuzcaisvrjekiwe
+mfqowsxqmywlvauv[fziifhafjuiwdizvm]gmaxzryznwavsaxsv
+okmehkbnqsegqinj[dxddmmglnqftiunfuea]todmrlalqdfqfkbq[vrktligspzyclnfz]jwdvkpuvhpwffrnyxw
+mybozskxkccdsuuptc[mrlkqwbdhhktuxpzjxi]xrujoxxkxwqcthydsw
+jupphmpmynzxsfkr[xhvcemrobysjizesgs]ijjlrwbpchbbiblvr
+vpabzrcqfzsejjgln[segfzwfyprsfqskhop]gksthicdjyagobs
+tuhzaznrumhuwud[szqusyzaykegklbcdoo]prwjxzrwyrgcouehrg
+dfvbjgrshvnvfumqxh[tgnhpzveumwngrnoc]qpntyvcxxoofgsk[jibdpycgwklugip]mgkzhcifwyzxsbuwj
+mbdpghflpcondfk[ftzfdsbexmnznqqmfaa]xznzgqjdfkmjzvwni
+ojjaanxihagtezp[pxqpdgygyklexhrpc]lapqmhronwsmwbbf[rzuhtemugsniacn]apixdvsnjpsplmjwvn[iwdpiqgoztjamenyyw]zjyidlwjbvevovgf
+pijmbdkeyhcjzuwclu[onazufaoibbwzepmbr]jhjaqudvrdoqcvobs[lrwjikvojmgdtkwb]gfxgoeihxughdfbetm[yjhxesdcdudwszwv]hgfdxuejwfuedpdu
+hvdutkvozvxwpvx[beubpipzuwaclrev]lqeylkxqdqmcdqd[oivjrkpjzrjywzrxely]dcupjtbrltnguho
+esrepqjymnodspvjib[kwdoleplnoxmntjuip]lvrhqceegktadibgh[yfbqpomfldnbpxsaoan]cheitjzmqwdbilm
+oakpwuuoizfcsfo[csxawuixxvzzooah]dafrurtufjpuetnui
+jmmekugaastsvdn[qoasgnykbkodsgt]lmfvbqomdghvicry
+hqznrdvlwnamiushnou[iufqiqjtaiejfqwns]xsgjmqqsvbctpwqcgz[mvpdchozogazbfywqd]iqimztlwajwbxhr
+gkeetoqftvsdjhhghre[nspwxohslbgkpyyhdh]glknqkzyfmvjczau[zrzurqfppidpckhmxu]rtawnnjhyjnbvnt[deisyafkjnxtcjas]cshchafpoiqptus
+jpkjyjiucudsgjz[mppiltmurhwxvmv]sdhrapccelecuctxq[cnwlmuvyistotoykn]hjzxzneifkwmvumg
+uvzuxzcnipyfyuesvna[ckplomuathpfkndodxk]vrqhbliixmzbefuh
+ionmypunjczxhry[bvgmqzohimrjmijzkwz]qfzsokgukugmeso[uarvxrewouktpgnghtq]rsnccdtstsegeoudngq[hkvkymbbgdyncilyf]zteoiyacrtwykwzbxy
+jnyydhrsrkeujfvj[qmxzqkbwizhvcztzdqr]yllidgevuektldszzjy
+nuylrchiwpfvhdumyet[hfgfzmeldvotgtxqh]frzcopyhigfewcnb
+sdcvojpgatiidjvfy[zhvymqejqxllelyux]ektbysjcypxfjrsor[kgfvqbereoskymyfp]izmdymjhwwtelesjr
+xnelfgdpnrfhdombqq[oiidietkplqnygwsgo]jiltmfqqavrjrvyui
+zyuubhwaovcbnaxrmtv[yefoksxqkrkbmbm]ainfhyuonvdvcyegy[nntnxqkqdqattwt]tcrtyqjhokntxcb
+hxkbhdfwcraxhdcff[umxxccphsddzavdqn]zsmmtgneghqsrwfauw
+kbdughqnourxomuiab[xcjayouykostteh]enwbjtpxpyzaeuhuwb
+cpmzhwxdntahvhl[diddnwirsnqchwr]etsizyoarkawzrpfidi
+xrruvcmbmigmutacwc[owhorlqlgqujvhos]iddgaukpxlielcko[gawcwcvuviuohmda]bfdceclnseehdeyxv
+vlxaputciirctva[qgmwpinixdixaiut]kkoousbfcxganzcffg[cikwetvrztjgefpzsks]jrsyfxydznmupwapco[ooydsykpjwakdep]krlytknowykzzqaafou
+dnnvcszortmitfv[sbnurvnwxwmvbdpawa]ewayhapxdfxplpqudro
+fsiehjchtnyenvmjfw[obnlguwjqsgylwveak]hupypbuggmbkeqxt[ljxbmifxgorvriaj]tkttmzairwztsmn
+pnhgjwzyqnjrkkw[ofyifgmztnzelptkwho]cgnlnrfdgfgjvztpz[wemrlhyskboycpdbzr]azikmfaudvrdhvfvt[chxmcbgineaycjiwy]kjbfttnqgqhkefoolo
+khdlanelfapgxqpspe[alrgipfwfdyguqtk]coxffjtxpbqmxig
+sxobbewirkvducqxd[ubfbqjccnbtkwpbxqpg]hgsswdjiudnvmvijt
+jzbqaqfubdsfinobsdu[rojkizavtvueepedxw]lcsyjeoyieqjcim[nszibgczunpslecxo]louacmgeotayemh[zvpjwwpeyjjdhjc]jidkptxmhccryujojap
+rrofkfoljuossrced[ymvijcmdvrzhcyh]zegkwrmeneexpcnrh
+eniwjwjnmgyzescoz[semlscmtbagknxpbvte]ysqfgrshborwtgnwtr[bossxfqcyadppdflbr]pyiuttfsuegwjwcxzr[yaymomeitxwdfvsr]elhifdegwfstqyniqta
+xauanaojjnhdgcpuwwj[ccitjseyrwjqvaljv]ebbwxnquaqlhgqjsgwc[jybietxintbtpzncpw]wfkwxwffzxwqucjhyvs
+ipmxdranyxbmwlo[ueimjvadwbdjithwn]ifmvlcsneopyffsums[ejornegszbqxtosc]iucimozjnkqkeysden[vvtdfnvjnzqbxujml]klrpisgrmdbrqbupc
+evolkocwyejqtcazj[dzleqjleocyexjivik]zmvqrxiqhsjtoezm[sskndhlmxrucdyqvop]murrraduofedtltbtg[kuzqpodvwnewwqdil]otvalnjnbexltsbitwi
+ppqnetrairzkzlt[hyydyimhgzayzgnxqn]lwubwuvowsyovjjfgp[xbzmifaqcmpyuev]wtgcnccsysrfvbtb
+jpecpgdrvunkjfrp[eevsiosfybfgdgalp]veprfliqlxmoctjx[bcfelthvqqxthqwpuoz]beufleuquitnnsti[aslupsydyktxgqsolq]gctlsoauflrjprdn
+yekfawwakhkqvpqf[cvenkdpepuyimstwmnz]fphlenyhtsxxeyst[yohciybbsiokzajcwlz]vtqcjngqpamsvrchix
+ougrpfmoohiymnx[gorlgyciageugmcbony]ozmvirifntorlvzz[klsgbagukrnbyzsez]rdzhlkpoucggkcdqm
+gfhrcutoyproiww[nzgfaaccfrgdbcg]fcrtnobfhhyzmadxjv[vlbueztcxkkbufljse]gqpnxtlrrhclwuaj[sstrllihglystknh]alxmlywxfjwnynbwfk
+opeacxklhjwcefmwrwg[mzqwxyfltfqyepcgnym]cpziqpjettzcnktrqi[mbnwwhyxebbececc]tdkduejetkrqwoxrsoq[ncenzwgjnekbobv]yxhgzizqxwaihedda
+svatyxdgfofrrkiksjf[mxmrficzxfyykqekorr]qojleucutcqxqryi
+prrhfrigzcmemou[zkhokevqzcspzoyt]tytqcpuucppiwio[mogedxwsflwocpkdh]kkqnructlslbaked[sslztcwiwkudgtji]djssvabrpmygljeh
+btundrdlcsgtilltpue[jiunnaqqzfgxauqjes]wtdxsfqroorcghqk[qvyzuidvkzmomfi]cgckuokezrtxrgdlo
+tjcpdjzfllhwugiy[vxypwowarlatqjlwq]wnpwefpgpfcqqwwrsq
+zfduowqkrccccgggmbl[iwwfgrhmjxgljwqf]cminvjjyetivkvhvkdy[ismlcjjywxxvaehvhhm]eojlvocbfkftjkapzs
+hzkrcmpwhfnbwlisg[wxwoegwncugpcfwywxe]voktthitecybcfpnz
+dcsrtgkbstmkwlzy[pcnwmgmcmpsiyizqx]pzjcivraubvgbkdahk[yydvhvyumdzfmjuso]bfljbkwodikjenu[toxagxhnvgkwcivpcuc]sanysdrigussqum
+lpcxkqrspacyzrqhbhr[vdcbkamwyjnxpgjpm]afxbzzxzrtaacbypq[ftbpiplrdrreqesthw]tidlvfojrlctjkfel[iibzklhicpqjvzrnza]bmekkyjigxxtegqbait
+duchvjohwoouxgmmxds[qscgkenygikbdrsqc]iovrgoggtgiebylbu[iqqrytrhujzcywwq]ybgfnnhqwfpfios[dryqypecmskrqux]klqhpvydovzggsqo
+gwgojmuthbgcalzvdxh[njicnwbqdckxtyxkj]rwyptcssdkdqthiydea
+yokzqvwcycvjgouoyw[starlvyjnijeacjseo]iehvlergdbswibmzci[ppmriizuqubzfehcz]jartjkmqzngigjvl[izpxafhxdmckrcuufu]pvkldotwdzdluoubpnm
+rogyxrgfqivkovtna[xtahrogngfeygkasq]kpcpvtirxettedux[cdlnciogkcsaras]bupwazalrmfnjufn
+eaeubxmpmymzrfleut[eharpivgddyokps]wimaximeayrixnts[paysmyvjuzpjjqr]fcqykmkzbcbyrpy
+exvlqvnfmpkxfjwbhol[utjaefsandulqaw]xjrjchxifscadbld[ifrckhdhmptybkhrj]ykcqgygngiwzzyfnxg[plfhikkzndknbpdeeu]siwtfnlbcxuqkrhwj
+ljihefaqagbmffbcr[ccmafzhpsvluglwsgh]jioaeefkgujinzlgn
+rgysyaquiuyvtojxnaj[gcygzkwqdebiqsr]icaeuutjodsizqzfvj[qapmsqsaoniuinsz]ppgtfxsblzgtqtaiiey[xlkzyyvcgyhlmvnzrpr]htorgwwkbhasrsbvemq
+coiurrjhxxkcplh[nkusmllwtsuddqasyc]vyxzujqohjyctyv
+briulribegnliapcimw[rgawfayyoopbosvc]owgryasogyewgxchxgr
+smseegsurmfktgmefhw[paopyayrwykwdvcjjhp]byayaatpurrllyzd
+mvgbtjdigbhhywarz[pfrhqtizabthnqrvvw]azdztfkkfizbxsy[jozzjtzkscklmdt]ucnptpblgcgmkeojpl[nqsybfqdphdncqgigis]yecpixjgagdgkbz
+zyuzikehgrfaztne[oaxgeczbaafnottqg]kuuggppqtgrncptm[tcfnyqvqcijfcfdljh]pwntuaixpqfvyoatk[mowgvynrpbvmqlpucq]vgopzmyigjbqlismti
+ostutlkruoevsjr[qnvqsxlasjyrdyyz]klwvhuhmvgrlcdy[tycmevukacjlveu]mvxcfqojmrijbubfm[rbodtpwkkidfrnhayj]jsbgdcwbfdfflvupn
+eaiframmiukbcixxi[bmqaglfamrqoswuhme]lxvkwmzgauwmabu[kxusdngtifhpmplxl]sfccogjqnblrahch
+hcjmrcnzrhznwvtjby[lxmehjbnudevzmhx]ukfmdplzriyztnioty[lqjesrsxjozxcgfaknm]qifmjftfaswtrjblzf
+xmhpeigrzvrgknc[drornrcakzujdrsbrvj]czapwkwkwwnkwks
+sfdyqdpsfcxebamsf[vehdpjffaqhytqhhbi]urolmsuobvbecvcnv[toagfgryhwfgfwxmvs]btjwiwdrxnpzxlxdsdi
+gnjmrczrqiryaodop[etlqbnstgjysesf]ggmbohbzrtfbapbjg
+wwkqbdcmlkfwxwdu[firsfuftyxwxpcicu]cntzxuydyjkgkkfvdl
+cvcsgxflnidiwtvy[hhzzbmygwugzsfnus]evzlovhsgqumejki[btikqitubnwzkhfyhh]xwxvlgyojlmkwljv
+bzuxzgeuobcctajvva[lpqpidtuzmrrnnlgkqu]lhyxsevugkrdimm[umbmngadfcujqpqr]nizwephuepdykbgj[hfheiymxxfgyxyl]zlurubnhkwxdrwllatg
+gkwahvrljkerohucrty[lgxqhorgrscmkjqcziq]otxkbzuzncbznvr
+hpoehzfotnjpnhl[yrkyqbolznetbgxmy]fblwkhzfebmzavscyyl[lxvxgdkjvtoxjpu]oetusxkoxlpceierbt[faylwjcdxicxbqr]ledknznfnaiaovejww
+xifdyajgrrrhakdqhg[qtzmwfjraqbrwstiibr]juciognmzyafmai[lgbmgoxqtjngqpqkwt]zzkhrunuborvoajlvul
+ekecthrkwdbjhsy[klxbdnucasemwhlpjj]jbvenwrnvynlfyjybm[zgfxxurrduhtlmsbelf]lxuxlahnrqvjssffj[wzcpjiesgsbwbtnlrs]sofzsskbviyfvlo
+jscqvqqdwvkvrqcb[vzfqbgopfnjcekjs]dmspregwlklxptp[lsxjobfksvzwshdre]yqfwrvjrykinzeon
+rbtqjtepvufhwpjugj[vkdhjmfkeocnauedxp]vpoqmfpnmjdpcxw
+ihhaztfuasflyghkndl[vseslcbeufhmrpyfqb]mtcgpfjhjeowjpqc[cabeopcrmhjhudob]fgeutfapismkdwqxmal[wldzeajldxlxpwfrb]rvyuojjnauuitoofgcm
+ixrzwptyltfshve[xwlsfazypzeuauxpozt]nwfgkbpuxeauadrgbbm
+vppgbcdybisarvokztx[yuykfmzxbgfwzdohup]vlkdreyqjihmdksxih[iysfrpczrirzbeirih]czkbhrqlrovfkmlu
+iaatwbohmiosyiqfq[imajfecefyujhwg]aanaybxebrfpdfxxpgw
+qgomsuglksqobwhaq[fzcrputgufyvnesoqwe]ipziztlrfmlaizts[pulgtrdydqegbymu]pxcyeozdofdghkmst
+tlxidzqdeqchemiqdsm[hacfdsanbiffzhilct]jtclxgjapfmwhlkn[ieafoftblueqcped]lauckblqborgtjnj
+upkkaykvxwvkgwgztzp[jmotfixnvoqrpwsci]wszntutpsjljzmwqpgp[dbnlosuwazvekoplb]bmobthbbmitprffl[qkjfwmsronqjmylzcre]yaulmyfoixmkgjs
+zxxsmidmqxjigkbos[iwsufumylphrhyx]uqmpbcxmvhzuppxqopf[ykipifsdwkpzgmt]zzcwzmwugdzckey
+ciakjtvtrkgrxvp[yhxuyhyxwytquzxujw]lrxibndatfiqyltehl[nnadhofokmcutiyc]vosxtisllkweiaapagg[vwniutthbrvmqrvik]aixaxvddxrdnmmt
+mbjsskcvljlehsxc[cknzgxghehlmats]eqknrogpyfcmtfhso
+lcbrfrsccsbhyhurc[mheohludmokwwjx]bezowkrdzwhssgbvydq[kiwqvuebvywyegmdyy]ioskcrvqcagocnnh[zgttakbraxpcsqsc]hmmqufyflbmjlcciqvn
+ezmqplezxylckxcqjxn[pdzarngoyfbjgyxqxgt]yokricbfoocmehi[cffrwwrwhmilnyf]uaybztxphgccfuu
+xnjslvbmmapiwwpq[qmuxemavopeoiwnebts]xmrajpgpgeojtabumm[tbjjrgipnfzjafi]hcuirvleolclticur
+eltfnqblogwvtjgni[bjfxnnmgalahvpdtvku]eingohwswwabsbtb[nxsqsvleqobfpxlaxj]gfsbsvcbbnwtuktuw[wrgcswhmdtssvxobcu]wgsniklaxmadgnjd
+kxpuygixzfwrwzpzsbw[uqxqvvupyvvajkcysh]scshpiffohigsgm
+ovchugxbmthhhijq[fznmygfcqewzomfgbc]qczlousnoccgyrgs
+imtfinjttxvhtcll[xiqmbmrcqdxlvuf]pybqlwqezwrkvikns[usjydesemedszquseso]fhcgyicfbdrmgcnk
+aqnavkllyitzewgs[cbbqmbtgufuvcun]iugpkakfufksfitigk[lyqiierbjucxbvaux]szbwsttayzipkcdb
+yetucqvgffnvnxqx[pvgczfwkehnfqxawz]vfxegwcevafevvzx[ukcwxvnvfnqvxhfa]bdciuylrvfkmxyi
+yvachrqguvjhkrbe[rtlpuvvfdvmtqswiln]jcyqjdmtzndhrif
+rphybwiwiszwkkxm[waiaqtuthjgfgag]ttlnqhzfagaregyo
+unsmoewlzxuguuwu[dyqsnohyqcommmmov]jipyewobyjdzkgkgo[yphyanakgkgvybsx]pjtzynsvtltzzajc[iweuafprefmbuekk]rwelzzbkbqjwjrw
+kluxazqhqmcrvldfv[dbxzgwsfmxettwmgj]rgvfmxibxzbajitnud[vtlbsgrkhnfpmvvkp]pdycyraaqooszqa[eyliotjigekmtov]eiopplzmedvdvmwt
+mlozzkwmfcrdlvns[wsdduzxzfvlvldpjvgg]ywqncwocnslofij[sakivxaniergaouc]nzmhdlkxeiehdpuok[zfwtadjlizjcauurkq]vlvtdicnyhseqbeo
+ssfmkfdeguuaqdbyqub[nbobgowoboytefejnz]fplpuipnficejfsuid
+lljnuuistrsmsjazzy[vccsskujvdwxypuk]jhqjqhfatmuedugl[hufmsmgjutabctabusw]zcoiiovxkxtualjx[zdxdbmbibryrqaubxy]tyayojdxepcpmwi
+zursgksbdkuzemouhl[sekbvoxwlmumyrdh]yxafewnovnxivyp[ajjditfeeocipuvdl]ygsuxuhtqervumd
+suxzfxizhyzbovsz[dtamgkleqiesxemqkgl]vjuviztkxzchergyx[tvazaqnrstjbdts]wccoiceucunjiuus
+gongygcedfxwncy[lxtpoagiqvgiryasha]elmaiygycycdtsclhpf
+pkyqsmcicydbmdagw[ayulcaspxpbtnegeoou]welxvngiualigfefv[veqtcxgkgzveegxckee]djmbhovzjfexqaedywl[okzphpgdqtpicit]mistlyyaoyphetsxqxi
+uwrxhstckbebnlw[yhflbfhsqhshieo]dvmzzqknrjcnwixhgk[upxuqrlwzvvsgpa]bmnfpjynunfbwunupiv[mbcmrpoxtbzcbijmmu]icdxewwtwcibjotjf
+pscqchwjixrhpzprdla[nzfglspgwpsaiph]xtypkrtleiujsfmcso
+llcxlfghzjvyhgill[vtqyiyrwujkovfctkk]arbtetvtixtnyavydg[ozxyyroceqktxhpv]maekylkkwdbgwgug
+bzagcsgcadoffot[demvhzpdjthrniiuvj]nwwrkguuemsdtvspi[sququtlqggtpszucm]pqaqqxpssdgniycn[lkdwrbxkrkiqdxjc]bqngsdxlxxvxdvqww
+wijjgkptnkbnzpqr[zylewxhygsxcrlyi]nanyoaosbxahyvdsett[kojrflwbltrombqxo]lfdpaptujhwfgrrnf[slsmmogpspgpuwnce]sihedfdnqnejevnw
+nutyeltkszkulqpt[cpgdmqleitivdtr]veieyzmfjafragrcht[nzudyhtmpopacznkq]dmywgwmnrieiohcuf[ctbktcgxznhoqoxczzf]bqzffvqraxpjdcvt
+akgmlcznqnhncjknbp[bwdbsrdxqqmaavngjc]cwyygvcrkagmmrciout[nkpzkdmflljxczogs]mqkafcpxslquyrudeui[clvbdgnkrjdpptqwq]cyygmkgtftxvsbbbfgc
+fxlpnkdskynkosqpp[efnouhxslwitteqrtx]xjxojaxrbampbcknga[ugewjlmzbspxhtejamk]nrtflumsbbtkejw
+vzrzmtwbxwfhyjvcmft[wrdvmieyzckycagwma]izyptswwlzgivtgyfd[jaujtzdzregakjk]cjdnelesxnhmgkqsgs[tjcsmxghgtmstejjhb]tzqsgoiospxadncn
+okgjhnzaxrtektb[sleqpxoqckdrsiwi]jzthxxszazdahvhq[mgxzdqnfscpqdoykr]doyvhvnmbshvkcib[jtrsntjktunoxxn]rmejgievrkrxaziux
+fodknkictemsxiicght[tdltamcatgnknki]hzdspvkbgipuvnb
+xhhmaiussrmwaxcpoq[agyegtzmrcgdrqiiv]akuxocgoidnfmkffroz[lkkfnmgryejzyvjh]ozdzcbsfmllaiyclho[vseayejwmotjhccg]qfqchpalcnaweyo
+imdrphyleudnvhc[lzqochrdcjotjojk]cwsqzuwoflalwatlsd[ctefovkyinrjchrwdav]cmnbuqveexpaxmhi
+vckjhzrdtpyynzbdsad[ehjwlyfbffzszrx]aizjcopfbdgrrtei
+vfkpxnrqufijmniu[wnwtwpmgtjonykmcsp]mhehavmuivmxhdelxa[spyybveheykroybw]bfzudojcjhzckbac
+egipucceijeltfoz[jpyjfgsqdywwjillf]kltttxmvrepsures[asbzcnwdqvfkfkiqqs]usnadxpcdxpjnifm
+svsbijigntdtxph[fabzbljmijzwvjlac]kieomhcpodzimrmqoc[xusohhfobyruazi]wxkjzzpskukqjirtjc[iwqdjijjucrslihqpo]faezwwmpfpxenvp
+sbjgcnwomllqwavkviw[pxekvxjtjbgjuouft]puzjbrwmyzsxclgmqsb[vtpnaljnxkgwlryjo]lhqzwvnpkzsdndp
+fyfyvifiocceoozl[dmjxamblfosaizav]smoyhjbuffpgqdl
+tlbdacsdiavtwucvf[npepgjenhdkgfavbn]hvbffufjyehpsoa[xghicdcxptmipfxlz]lvducqyymcqkket
+nuystaihvpelybkvch[rlqyflvholahkcxw]gicdfjzhwwocfejthx[jpeuakotyanntiw]sfsavxuyyulvuluyur[asngaxekprpfzsvxx]rliayxmjvsrnizh
+axquvvjwulrntbzzf[fddxxjwbdaecbsderd]vjtqwpjlhbdhxjoh
+cgeyfvgczhhwbdz[kgsqgnalsysssiyhqp]wqzhbjvykeuyjxgfzgg[mqkzclianfnifjdql]vbeyhsxsfmoeanpnipa[sxmzlhgrezqxsxzzcku]gwmgkijugjwtutmgj
+nnjlbnnasmuhskqu[shbjjccjlumeuigoim]ndwzzmbtazttjpawtzl[cnkpifihvkmsallifij]ccpzfojfxszmytbd[jtcogseximfojmjm]bgdltwjrqciyqfifkh
+pkdqnzhjzcttkackdba[mucwutymaybynvttts]nndhioamrjejmibag[fndcrctykpehoglop]rgxjwrpzlqapjsv
+nccuyvrhzyszqnw[ogdgzsefffyfoenfh]jnqnhnyoyrcnrowjmpv[wmlihztaoyedgkg]vneeegnosrxphish[uwrmezbsmqbxjpx]jgfoinwzlhyixzjzv
+kriqecrnaeujvuzw[lruowheuwnintaqqxcl]kcopdidcqinihhmk
+vxkblgxcmztnphdzf[ysjhxgovujrpagndi]ezgjwgowcdkfcstfhr[hpxrabjwpymyaolp]itcthqpgksvedadl[stfrippovsfrwglisp]eodicmiszqhwnuymlgn
+jznqrbdgjcokdqdlser[xemhfhnwbftgxgjukrf]mhcovplrxcsixrh[xyswalpqqvgsvmqvx]kjeuyxksnmydfkakhq[zcaydzhceioawvrlsm]wzezpqlhvwcgzjzigtn
+vedqtirgwrgutas[eegbxmhgykfrwrwy]pzslegjrbmdmeub
+lespviexybwomljka[dxvrexedlclnaurw]wzevexsobirvepgpmt[rseoofjlimvxwro]cyojbkugwdzjlxsqd
+fsdyxosfmlqfwoqpy[mwypxaxulrbjsfi]ghywyebrmgjsrshgc[lggfwxlpovrwthxtlln]zmtqqhkwabuhvtnabwh
+smsgvpvsfaxhocsyz[hgbjpapisxsillo]qsgxbvoijxlwhxpt
+fyfpxellnptlqfxvdn[hpopfkwhgcbjoze]sopowsrtqgbpysjfz
+qenbpbnrikfrnwpq[nmkndzwogcgtzhm]zhuslfffixielmjaqpb[dtmldnpqizrcbxixto]wpspaoprebgbksq
+vhjgpbgdoeoljigkqde[aqojnqwgpiredyffb]vmlvnnohhbwzouwi[rldlmezoquqcodxghov]bhwnyaxsnyyihhgv[gjjezirrmfvkpvfayb]uaxxuikjcwppslge
+fnwyhfrnoxxjpubwe[rflutoqwauqbztk]tmbmyhpncgpkzcqvv[dgksjzbgbuzlozns]psdmkqjzxdwvllstru
+vnrsujzctbuqnbu[glgsyfmfeuoloohqp]ybhziayoqxsbopf[vtwnbpqxhgsfguztg]xhgvtoqwouusyahedc[zcchxnllferklyt]avgtwloloznygrb
+rojtxmpwxsledhm[xibuxgovbxiejlegyc]xihwoxmzghhwlsthiou[ywkngtjxrhhozglwo]zfncywcurhmsfxxqjbt
+vxoojfqikhnbnrh[trdtiatykaontxlv]xenfwokorxaeweoz[itbylohijtfjgdtmkvc]butficisomglwjzaa
+wkofaduihyxhiyrvjs[deskgjgenvxxxupntfl]ralmugesymrxreommk
+ozsnpcdvkykxguzltcp[caargzwxildtwswp]capkmhbfpfmdegigg[sigilgehfnfxlza]trtpmbccrrkpggioz
+pfuhqwjjgyzbbea[yexwnbudioaikfsqlca]vaobiurftgeglgrzl[thjpurqfzaezqxfajme]seuekovcvvtdmlixf[mknpvkntvdftjhhhfgh]dlgqajapwlgdjnwybp
+jbtzwsypehgrmzeg[gwskjuqbwedzxfcehr]xpkfcuejevonsinxs[upnrxgjqhohlyeyp]dsyhrudzqsibolxnvw
+skjjsxxumbobzsckqk[sqlnqpubrayffzs]hseibigmtjtcgbav[khvlknemnqiekxy]fkzvtfscvoatsfqrd
+dozlslrkuemgbykifp[bzvnluuiqdffwtf]tignkmwpnqrnmefaqm
+ppxwcouehvqfwoenqo[rzmtyyvedmojatvvq]efcstfsjslpqdzvhb[tvmkwnuxestqxfockv]oqskydohbmayshfcihw[pfyulawxqbaiehqvmwi]wluhmctgrkjxqtlmp
+uvqfjimhzqboivo[buuulgcbqgfsbup]wqnbktwxwslvceegi
+muiuadioyfirjks[xviqxaavhdxjkkccmrx]weauetgyttscsfwv[rzgaefcngzklpjqzgeh]jtnbnuuvbnbjhdqn[idjpczmrbomwipkv]vbgcjfvyvnxhdsmycx
+hmdflkjbenjynzdmeqj[ybyntwgyyptizunn]ctijqxbybwarmfzpit
+khhocslzxicmlxk[xssahaneujvceofaiyh]swrjwipkknbnrrrig
+dvjvkhnqyifqzse[myleyunwsupcnfagq]tmtuvqikqxzdskqcgxp[lblzunblboznidegkla]eaqhztxpgjuijohkdru
+mqcasrzjqmhwbhbuyc[wkfahpqjhtwuiybqae]yzfcavhtmzofqww[goqblpzkmfxynuzm]bysjxjeocperndv[uwpxvnpxqhfnaalchm]lyfynynkovtmfsi
+wnczxavmjnfgogv[oyjxcsvrrgtpkponga]gzhjlzgxxjkoklgm[hsrwppehbugkcap]zayfyoqorpxefqenxc[apojyrhryhfnmksa]uwnuxprqfxnkzkhnbji
+iylrycmvbhpowmdvwy[oepptahrmhsoiskeoq]vtqctnyinxvrvlpl
+iauhsxbjgxiebvfhbw[mnjywcztqiajiqxx]iikcygxzeprjwkoniqj[tqycczkvsvlsjetec]mwrnosvszjhmuoiyzxw[klgtgkaxohfaogm]fsxjsgwondgzpdrbbcl
+bfqtwsviccqwndca[juqvrcznrlghmsiz]yttbexwewvvoehurkrv[mkugsxdrbaktcqf]yrqebvyxlcqjwcewg
+ytoteijopgxfmiokatn[oppmfhkktlewhlq]erycfxfafsiicbtx
+xlwbkbenrohodfnmuv[zarnezgnivnmged]vyumskttvpderhzbimc[hvbbjegwdeeqtam]fopblbizbmbhzfsdnzm
+rgmnnwzikyanthhp[nvnhsgdymtjeqzurz]mbqxtvwhpggnbcq[apeorjqexywhszrno]qaxdcaysefnpyviduz
+vjaljdyyoihduumfo[bpufjkyqjvxoprdwrr]ccjbldnkbzezeznmkpu
+yhbnzbxqrvzrguxcbss[unzjeicvhgqtwek]obuccrvnajbvkcmkzh[futhsovnghajatalva]humwbgtpqzjgordah[kvxmlpebzsitmnjfnz]olxhcyqkvfkqdxdc
+gsojkejbnpgptcgeubr[lgjcwaotpdouravq]neezbmtkclvcvkqncw
+qqdvpngddzjwase[rtgandojrzcpohlpknx]qdnxpiawdlklkscmpa[qtpzakubrncjzbpr]efpxwdvobcigtpu
+boxlzukkqchmqrrpgk[ggylyipkjdmbjfp]dkckhhgapbgpmygpa[yfetxkcehafknkmk]acqmjcsvxzptstswuj[atrjixpyeqordilgj]eccoowxhivjiljegqm
+exjgzzncnnehrto[qnhzvdfprbarmtdpp]rcdxdswituqgnsix
+tokldrsfwqqhetyw[muqzhystnflncxm]pjpmtwcamluvvvdsu[mpfvycofrzebemw]mcyzcqfngdrjaioxzda
+pqhnhcbjoqjvgqh[vqkgnojpmbawemi]lampvrpcpvxludprfuj
+vbdpihaehliobsbciw[cpaudttavwxkfpg]aidtxeypckfsagubro[fpaiuhpggzpxsctw]danwtjnlhrbfipgfbq
+beoecqatqkztrbevt[bdqoxnitxmdqunizj]lgquhovsnjuxqaml[vyfylkbhnsdjoezm]ediekdjfsnsodqep
+cnaisicaronpqbihlv[ajfhzrpysjdkxqpql]dfznlmsbuozjlqvf
+jbgsemiqgxmtwmdulu[ulbyoughrbpthdlvmvm]dyrxsdesjjwwfmvmkf[gogkkkefuecieipe]nimswajpymtzyleew
+haavjxuwhbfxlhfx[rssbpwlffrpnsse]chremerememjcbfuv
+losdtsrwrdvwzbjf[daaxdqsorbsgznm]miovihloamfmovzruxk[horqrumrdnjorfw]shihudanlgqfzjf[kqkwshgnrpwudohanr]yohqqtcywhqawfhi
+trrbdodxpewxgcyryk[limhtndawxliixkkq]ivxmixrjddqlmounj[cfhqatncyqijnvjv]djqfccmuvdnsylo
+yfdgkwopvrudzsww[gnyyumqxrftncsfuaaw]zfiekmyvpseaugfwss[etzbbabtbkdtgbwf]djmbswwpvfsowmqdlw[lpbkaarutdlovoptrke]ukztythdiepqgemm
+huwfnhilneqaecp[hdcrdcipgcaxtbfouo]poacbxvuqwkcilkb[dnpryjlynwgzbrnbc]hxillsnqqraloociaqc[uoyktvkfxkdkdopnbk]qvjeuapououufksmwse
+lfbrqypxgthlyxqzywe[pcxfduxttmzaxtr]gidsxacxodigyok[qyaamzuhjqqnpdsii]apgfypwqjpygzmdtpj
+prkahitlcoynnubnri[rqthrhhudrvryoea]urkuwyabxskqbsyfgm[dyagznreglcdincwie]okvqdhlixssurnd
+qrwefbcelgjgpzoe[aedkjvzurwcrhdimb]eaxqgpvkewmjynmek[nmfyhryoglbtdgq]dfnecedmtcrkfyq[omndbxvzczgnojpl]trcocwxxczcxrvjjce
+pphzgbbfbqmhbysodv[znbyvvkjlacgjrwlnkr]iyjpdjsjryyqsoblbyf
+lziqyyfhruzfpwy[upekwttdqzjxspfzcmw]ptdaapvzenixlab[wvsdrswafuftmysocc]ykzygszayfmgenk[mylrsdifhepnnsst]tqrbrvifghuesad
+jwfyweiiqvjfkvp[gsmzrlbjdpgqtbjakw]oofharmppecdotcw[dencjxxfrzxbuku]ygflsusvcrcdznc[fmcercvqncnxcbbwcrn]lkxshvdqjairdnnpz
+mfspfyoqeyalvzx[zwdzwlsmnktynntn]eeogyyanaydeykwd
+gvwvweokjzagobku[ixdetnocslayahccde]juncfldivihwfpee[mcpxioooaydtjmojwm]satqvbxfkxhfdrgoin
+yncjgygznetzrrh[uzkbwhtbtkrcxcveik]gehtfqltpixmsuami[nqhxycgquaihujx]ndtusluyzjwufzdh[ppvannvzrnncxpcfbyy]kgitvwtucjasvtk
+feushnbxghbeqsu[utnmthhouoazgbym]jmplltesvrbrllei
+ijwbtaksbikedfm[gjckpcivddahwkp]kubvhiqvktkkijchj[qocdkdejflyyzwukfrh]qlnixtictiubnfhvv[ygbwjbjxtvfevjug]dclcjonutlwyqaxx
+vqtafpvexofwcfssx[zmlfsfqivipeumubau]moqspxvivckaesffn
+hphwnfopanasosexay[ddmqqktxkrurcry]slvhqigvbwonriydzb[ynanjunpszocqrjqm]fkdtvygiiddygcrg[jgumgpiumyhktlhoeom]dkvwoureblktplcjmi
+skxhzizzzfrfausiz[nakguftuobnmkoz]buzexokukfscgmmfru[jhpsafmtolwlhvkhs]hznyqntiienjmspy
+ccxuwxzdxtfwbpie[shhongtetcwukjbre]nufocpasneteinfkk
+apfhilvripbjswmig[tzmvefmwonqiqdyt]szdbbwkkgaqmjkhpuu
+gmqjznmtepctxpcfnx[eezqztmqxceenmds]avqugeuarwprizij[uumhklvgcrkfozd]goypuraafiwdcvq[zueuogjqbnsqmjfmxbn]ahgjvoxojaumver
+payebfjnonvscnr[nzubpmedfuvkiwqkycu]cvsjgdyfvzippxu[gmiawxppknjjmvm]spdngdktoclylmo
+ruhhexcfvomrhibmoux[cjkryzqtfkckieyzuu]vkwptpezjrouirxq[sggqhkgstdzqikfnxk]zxfgbatfizeivfkjbl
+qqizwnfaajabeuskjdu[szujizggsbdhvihk]wxjmzdiqugjylejfu[dfygnnvhbvghhyuzo]yeaepigfgdcxbav[schlmqwlcifeqjhixs]ifaxsbjyirgfmwkaott
+erxreojjauvvlbsxomv[xaneipervgreexmp]itfaxjxrwueyrynk
+lgzbkiqfbgvdnyt[milmskrelgdjggvtmsv]clolytrsgczyppvrhkf
+ryvrtxkdydhujxapwjw[ohgtjdaeifxzuhoqc]yflsxucxibqkcpft
+srtfcyyruyxzxum[ygeoeyfnlufgsjxjm]ifwimooynxbrsxmyk
+rqbnowuwuernuxpim[zzumupyxvnbnngmc]uwurpinkjmkckxx
+ikzheexqxrfttoy[uwegndkenfvosfpm]acomhjgdgbuelap
+srookpxqmghokjoegi[lhpppxjenrjqiri]mjlixhnrirctrsupv
+onuiajxptpjwixyvp[otlnjwravarqmepwyd]hmnvzsflzeyrlxgpwwh
+jmpskqdlbuorcpwpqj[sxwomhbdyomudfaisda]nvzxtvytsrqqxbsug
+lohoirsglnfzmslubqc[pxhygduybnlqemp]eulzazwozzqytmn[joeiaeuczyygjtg]tnowqyhlrtmumjyrkp[lidmrorxkpcajufzib]ixxyjcoocfdgzjbhhl
+tmixfdhagahaqeers[ruioctblczdbnusokt]orpjrznwojfxnheoqbj[gbgyexwumyintxi]tznnvbemvedlpriyu[ibseuzmfqmroeeawur]tkggtpbcgdthcpo
+psnbkiuzotsmeklinng[qhigmmuxrpjmhuhxt]urvnxarbhbsouap[chfgrdkbxmgqzdccv]lbopbgjsbykugbzfp
+qcneczsyljovqwlnjz[mntyylfgsuvpjdp]osrpdqguiouevrdq
+xvfraxzgsypwfmswwwu[oyrmndtdginkvlzdid]xgtwrddwmukzxypxl[mcjxgiimlmsnizirzt]gliezwdntsgoxznesl[vwypsvpvcaeyzivjo]zigujupypwjqljxaie
+xayweakpavlylgjl[hxjyhvqwnyixcesj]yuhyulfybuhvqiinlso[eyopyetglenvqzqhnqr]mqcovyockdqdqvfer
+sovuasutixukkuuxn[jlvxhosfgqjcxnlmxql]bekpnvhdbyhmmvdhplp[xohnfpbaeqpbfnfi]eobpufxrrjaajjd[snnfnhoikinfhioa]syhkocukumqrwcgw
+vhgyxqcvafubikvakos[jfivvuhbnehuqbeyu]dwezavodqhdmujzc[naepoqzmbtiraxhskf]bwuozbexnzmpukgu[zyzfttszjkatnovj]sgkrklrsnjzduvvjans
+yplxqjomjxguqxjjix[mvtzncrxfvzjofx]wlhvxxzsdcfptbse
+ddqjeqgctjkvwge[cbgnejudebflhpm]ryzxhqqixwsoztz[hxszfpgrjuxxipt]zuvvwbmdvqbqihy[gjfkxykdstapfhu]bzprrjdyjlljxnxb
+xbnilldcerusgpejs[pvldiyrckxtgoesbti]ljqvtntbhxrryxcka[gdqkfyumjhgbzzwlvfi]uekphsrzawxriyei
+egwrxuedgpcppavzt[mbblqsizmrxdwdrio]dzozhiodhtlvmrjcygh[gdzijmqhitlbhfw]ewvkussgmsnietkiv
+oraksmkemjiapbdvqxc[vvgximcdecwxmpbjsr]breycrlgdwgnbjy[oqqtlhrvdyqesttwieg]dksvmqwavamfdma[fndgywlwmsmaivduv]mfweojoshjwolwla
+pqpeytynxunxdfyxrmr[krtrvrufaemrmit]kcgnivmpvqoagjmharc[pvkuwynulvvuqkif]mvbbgwnmngtralbe
+nsacyqfpikkoqqxp[jdcdddcdcylpjiled]jstcntnjxszhichrkw[vzfusiwojvrjzhevjm]lywsheganczawtqb
+rtcpdankaboogxhbqj[vfamnogaxasxdiiizk]whpyanngpggqutan
+qlxjojmpesvehkggt[flysjbaoiorosmpzcl]wgpxurstlnopucd[ewkgadgmllrewtwse]icnqidtfsqjurnkw
+oifarludgzqkwtdm[jvoeypeqpfivakqyj]dtcboyxnhejlitz
+npkttburtggvbsfuiwo[wvklzpiffhreyxkz]uhuynxjezspazaudse
+etaapuxqbavybsp[mndpkefjvjupccx]pdcnnncxtrzfvlnmq[ioehzamymeougocos]hcuxkuwhwvjvysbwdo
+fjrsuygcrtpzjsw[rhfrgfnkhajlqtqdp]hftckgnarcgoyfkmimd[hkldanmovhazpcpwhl]qomxfqqhkcuqhibrl[tpbrlhcndgbxuuzdng]knqmgdkpbljyufzazki
+zydstadkygzvjmxdhu[qtgaglwyzqncfbds]dqwbpmopxmdtkkcj[dcakbjdwzlglkpndtb]nijwetvoulkydqukzn
+hbxhybosbnopyxpnnz[juewibpcgkchnerk]pvdtzqclnvdbmwjk[wmtpskdcqiiythces]kbhxnzcnjxhnkuxwft[yetvomdrmxarjwsumqv]pgumogczlkgoiyn
+zaeaejxwpzbqtjiutt[eqjjobopoyuoxymtvb]glxzffwpiwoqcciyul
+rqrvuzjvcgaancl[pmxugkapydtxezz]lihcobqbdqenjmxyn[aemdyhmkusmchckzqnp]tgiijsdtqtqomptveju[mvaiexukertbkyinjc]pjuulfqsxhbpdiy
+jjygzflwfyeiecuztx[yrziwmbdidxrjsouxen]bqkyguqcejsvrkn[hzipqxzodrnsozfmta]xvtakmgzpstbsivyt[ieiucrjmzeupsprslje]iquppghgxqhosvjzc
+dwprarljcykiecn[wvdjaraappnffzsih]difkjyzhcyzgzjl
+shsrycjlblbrcpv[drktygzuxbooshwhute]fanflcwacerdevozor[feybgvfyookhlsoivd]ixzfmefkgvcdnxqvy
+rgogoobzbggsbeynx[nlnbqvcwdyzkbaa]prjegdbkocptzducz[tjanhuiieffrdspjf]bhhziiqbzdlkdmj
+yslioeknctqgcwk[szhjocwzxxkbdoykvjj]aowmmepratdcjkgwjhe
+yrfhkqrnxzzyvrocav[rqyqhvtneezcivu]hunxsvslxgfzevsvvw[pyyclulboseqorxoihs]akjsixprdzbyqlbupi
+tcapvmyxklqgewra[pwxrpoxdptxemahbrot]ncwuxwfzukwcatres[ftlzvkapguezyhnsgl]ermejyvoisweiqvi[wynjqudtjghztati]vhpdjconbhhejafgfu
+qkqbjylknnexhcziot[lwjbulvorpdzrhddlm]mvvmstxnwigtstskoo
+wncbdjbvzjvrrunb[riirhteyuokxshfmxed]sdcpacarelkhxkt
+xxcromhxgxqeokih[xxcnkwhvsylkpfbsj]xipnqesaslmeqsnu[rmzahgumualwizqnf]mutxgygzbvgkimvab[jypnhvoztklxkxyzsr]qhuxxsuvigbloux
+yenrilcccypxerlso[dttyspegodnpefcpg]mdhfzxgyoxozmgi
+jndnuwbhvaciqduyfg[xoeqacufaixieedbtnz]mpkkivmhxwxujcn
+majifpotxhylyshir[mhcapgzvvwadphfid]rjaoxsvqlqyvqgtxte
+imhzefgngckhvgqcjr[zysfanhwbnqzysui]zgogpzkcgjeigcwpv[jtxumxvjpotihpmb]zuuueogbabahhwa
+ijrqngygldyukndxhqw[xlcwaqfuzjigxddxjn]mcuyklxezeidilnl[atvcyujrcexfnknulm]txxgigzthrbbqna
+dvhqjqbgudpghndlvu[drhjjaxeomuoxxnagyp]dbeymfmzzevjydlzk[gklvfdcdfmnfvfslpfn]kssctqoyxognwiem[aojhwzwnegpnydzywor]eyrhiouwbqfpeoto
+xznkczuhsgldtilz[fhdcsnfixqbysff]ppbqiltpbrlhjliz
+zkfgueqzataygeavus[nymgcgakmtuwnkidr]ypuhovawsbnmlmpo
+lnjbdjnhhqeifmi[diompfqeocwmuqi]kdawxfqtkschlgnh[fsmxaerroipesmywqa]vqpxljxwpzudocn[sffzifosvfuytvdzb]fjqfwikuqzhzuthxzq
+ecyyeabjhjrfbdqy[xpqhxzehjkjhotrdlk]ztrkutdijjkmgzkuci[hwdxdsprkacxjrjjtxw]fbhbrjzwubhgjdwvpjy[vppgvmthaqkgzrzva]xuhyvaytyufxrkgeb
+tbeqtxhfqbbdrvwn[juqpksgrfsbsqdx]znceqzwqsfrhavmetys[khetxkkpwfmkmlvc]hazxybkgkzrmbtqshz[yavtnkwhxppnqwzwj]hgabdrxubvyvgniz
+rwvvgwyfgincgkurooy[wxcmmmkqpmtghmmltt]kgtqowxiyjbepqnkiyu[iofgybnjrqtngltajvq]mxsbhbkhddqnfowxw[ptqpbwojwfhhqyv]ymflkhgfnlagbxddzr
+lybbfxollocxnfxfeba[tvjolzzkenoxfxqrocd]vkgswdtqpilvbixss
+yurvqideiuqwekwop[gxsoytqhoasfouiasm]fyhiugkvhkbcfcshkzb
+rurapcltqwutrslalpe[wsqprvdmmtohamza]xmkzqeajamyurualky
+buprncslromlgznqper[xjefyfgkufdkspph]wjncmqpgmnjzmjbqc[miovfouyxitayfs]gtrmwhvmgcliwegeg[owvnsvmazybubxfrp]cdjevcehzrminnc
+uxhqucibxiemlbtg[dyshtfhtlbjreji]ilgubuujgmytfxeqzrh[zahfdfyzbhexldxg]yohfxkodjqfdzqe
+kqcxiuftivavvdv[rbijqqjbhpdcrtpcy]dijrgcyuoqfzronrfps[knxiljzdtvauitad]hohafhoofjhhhppkr
+vbanudfbhmhpqsdpdgw[ksrnxrccuenustesws]bgiuwlkckvdplqygpi[ivyzkermofckkcotkj]mhjspcpkcwsbisbve[mlmgilflysuxqmzwp]afixxyabstclpunrya
+mnniaptautqeenvmog[wfqrhlcbcwqhwzj]ccouhkyhrvdcbilshrw
+zankwrrkgkejsfiwcox[gcxocohqugmgpfoea]cfpphqzxdllapiaxu[ckfcklaedfbhgino]pwdqreudlymfoif[nkaiutnpwnsfrbzqyuc]mscstkuwovgypqtta
+dhhvqxovlmkpzsg[loljkdtjkdhgawrpi]ggnnhvbpshpwoloac
+wjepglephkicsoti[lvcfarizbzsudio]httbqobbfjoomntye[rrlwtyngtpvffaanlpw]moqdodrnstpwmhjrw[ujoowvjwddvlqqbbzbt]alyeqayozgbhtpsni
+okuneqgdkcjggazki[ebqvcuzvuqlvptuoqf]wvcvzlzipmoamnvjt[dncwvnvagpitnxtjo]oadxpnnqonbrrarqn[ruogikvmdiporivvzm]vicubwgqcblvvop
+iqwlvhjhfrfeayiclzb[mkafugqikswvpqehb]ezlojhjvdoyzwmggb[mncadipbeamkzbndk]kpewfgsurwlikle
+ewpiriwkjrgicwzfxck[iazlrpnsiynlmfi]srfoarhvphakmcyke
+faalgogxxzuylnk[zsgporpeqifzknzz]mjkbrrvswlbgdwhmlgd[mxfiiekevaaosozya]klhonreqfikygbmf[hhgfoolpnquxfxoazy]vcxscuxdbvevulug
+curbpzpilaczuowrsi[wmyxdecknwrspllfhpl]quuvzoiqziuotvfl
+kugdhavlhuperwafe[ecuvibachziwzefzn]oyhrdjgmqqauqhhg
+kcbawjisdirrwzv[fugffzgwmricsypdz]bouoevvlaykmgve[glivzpgoripmcnqv]bsmuvtuxrrzjaxko
+oyaxoumybizeabdg[quusffkxbmxajbni]lxxqjhqcajdkqszr[cpgzcteolyloguchf]zxowxsyvudncstwk
+xmlnrjsanwjmizgawvk[wlyncljroxswzsmd]waxcvfcwftjxbqxpmvr[spiqjeqpfxanegjxf]sxzszkcgibvfkgtozy[nmhjzcaophbfpil]nrwfxurekvqndbzw
+xunbkhekkwyvgcerevv[bgjzbkihvzlnnpptr]huqryhbrkspzxusu[dmrytcqghtbbhhzu]lasujmpjaobcnfj[ebofoyovhhzsprycn]belltiuhimwgwqek
+ocgmydyjloxpbsyj[wuhymkumnwwcdprxc]ncmkmnedztlutaw
+lyuydomeinqxrex[gukhcsjakylfwqodm]hdghwpfhnwjtmafqt[lqwtforyrybxbbh]fgyfkgvzyooifxa[kgxkzeuijywgdhuryra]dohlilkbkqzjsbx
+zgckhhqwhgctoun[ajftizwahkaxzich]wacumictegcbysyn[zzxxwgjdzicxreegal]pwquqtaijwqpkistf[vbombdxhjxwlboqdbqh]hfyfujedxzoceqewhgt
+rcpaadoewdfxoksbiuf[cmcgotvayrjllxgtm]pmkfrygwrzuobudsah[gonfdimjagiyayni]ctrukcwixqczltol
+jrehwmakkkobozzwrn[beoievlwkmkusjzangv]djpjbtpjpdcjsmopzpw
+zsgrycgmryfdzqyfj[yipsuqvzrujoaqga]khjrvsadupzwwoasmp[bdpwsunstwzgzawlu]wxaqnorkgypawanoso[iknpjxzhmqermgl]zcsakkbrkkaimtnya
+uyuzptbpmmukyrpd[vmbrbmpgvxdxryzcpbb]ltybhrruutchwbuuicv
+ddaeptwdykjibuffjh[ufzsfgmcffyxyyywdu]vrdexhgwtdlczpc
+csivzntivihwomh[nprwknojctjnkov]uzridiquzokufgzgjs
+gcpleovxfcyyeme[crpzfylaxfpuecz]zoomnthfoptieor[ycybuegqfkhlupplwb]qjmvwbggqxwgeuneph
+vwqdvgzzotnnsydivip[ohjqzjuzxyncdbenf]suwfgrjkasvyhzbtfo[qfalzqxllbjohnzvgj]mtkkcwoapdjaysfyono[yqdgnieatutxldqyosk]debyxvqoatdeibyy
+lhljheobdtmdowhx[lrxkzhxzdjmemintrq]jecllyatwkrhfxru
+howoydpdchixptjqapd[nuwrazvltwkshpvlg]havqlubvtfkhsmxwxew
+uwapzmqskzwiiqx[xtyqrsajsrljaajwedl]dgcalrxxdsfhqfdie[svghimwbcbmxqtqhjn]akqfoppjhaadsdbela
+slbymelmqscfinxle[ahjtgvzldgftnkehsr]vaqtlbhritaotaxvhpg[chcyoduevjsyehz]jncoccdngssgteldzq
+mmkzxzkatapuuwwv[odomzyzveadmmicfb]eiptpqypfvfroxu[bxfgwaezkjrbpim]hvfvtenhpyqiohxj
+jetnikaiyuylckwz[vonvdfgbgfxrvjzluaj]zpmcyjvkwghaiuxic[irxghevzlcccxfcrf]xicbllnxpzlcmqbgm
+chvpdcrevaqnstnw[sofvzfabefeacnniokj]qdasdxrscvlmwcchq[kcpxsnydjsoviwwy]bkdprrvzdinwsfxkien
+cwoamgnaytsfeccbqb[vyysuocjjhfoixrtmpr]junwfwadfbyukyvnw[lcwtmcbwdkrqngvqi]vevlawxbwoqcibmtk
+seboazoqdqpckthgk[psehbzatcusxwqa]tiwgrqjikjzwabuufp
+ouwlbqhczqgbljktjy[bubtiannyvmvkekhwbg]xvrlrmkjwkhzjjlia
+vatnmtxixznyvdvt[ftzepafpamiqpjulci]izhqwdhnqpyppuqiv[mjqocpfxdfcgpgmk]yirocnwnrzchhvrbfb
+eehvjfqvnwplppeg[mntocrytmuzmuvc]zsfcohpjfqdrtfbbbh[bqhzekffwgpwsbxd]zlhxmhjluxrjmpwkyc[imisxjdmeqavdvztbd]tjlwasbwbrddpqpgwq
+ygjdaucrxaqjcjj[zaunyucvccyhgomr]ifczoiwclbaryopmfa[ihkdhvovnvujtbasuip]mabqxvuzswimbitoy
+shzlhbrvjjzpyxfqgus[ykurcdmtryyccnysxi]sypivgjjgkngrxs[rkavyufibjkqetgld]foqdqcpatgctaehxi[jpnwjyafgkdytef]apehakogeatmfyalzr
+kithfcpkwdhgqjohr[vvpujusooxkdrmbcoo]tuzaiinsycjujjuw[fqdhhizbifrkpjxgyb]rddsmqvmitgdywh
+gngbozbqsfrigmuq[euutspovzyvfbgp]gobfhihxxwpndpaggx
+dctfsuzvpvttqpgppw[dnilcstcsxxkvwdsu]zqzgahpihqrhohqdtst[eoaatnenejvvuloknf]xwneniznbkjolnouj[gslnbvbmlwerbwvdti]jovdchklafrsncadr
+mdgpetsnkaddebh[gypkuqwwtjrzrhi]eyfbmxbyafuenmjdfvs
+nmkfscflwwiyxhzgzw[cixmvcvloqdyuikk]jprtrqwqtbrnksnxh[tngpiloomzgdmpryl]gwvmzbcftuthxvyqutu
+zkpdrykxtfvqneh[pxvjsvutuauoeducg]iduhzedqopyfgxjwpl[tmzqjdffcpzytkg]zvwkvgwmfhbqklyvai[scusvxtyjacnqtkany]xqsylxxrbgvudrdxd
+dbgodepvweaspcsam[vnqcsulaljbjrygsgv]gmfdwebiufbqkaofraq[unbumchixaeviclyqbn]ekpfqosiklnpdjrjq[nlcbhutxymbumqmwh]svtcirskdgbhfjr
+wpvcqnrvyjvfkfpclz[wogcckufvzviggf]oulptksetgaaholu[dwwcwhkktrhgkahbs]sobrvezzrrzvlihicw
+xlcqxbbegaulczmzw[xcllvvmlrdiamavgvh]fgipexbodvwutyt[pwhoyusimtkyswrc]mxtrsgpuxsjcqmb
+euzbhyalpjhxfawzyj[kqcqpulvktfqwccr]etzsqjqzeosiarij[kinbhoflquwkkobs]jvcmusgezydgutda
+lpxgexsvlfylfjva[wnzhqafvnbcbcoy]wevgfhsjrkdgvnbta[mvmabgghwicirugb]ctcyjxzknsnpxixkc
+hkkbtbsnyzrlsuyhwov[iurtqidtzfwtfhiltt]wokyylscmppxsdqtnns[swtohjqkqnmzxon]mthgkxltaceszxm
+jernxnsovguhkpljxce[twgyaawrcpjpnxp]rvjtstsecwlieaeblp[tihicijqmcrggggrjo]igcnuyrhtaooygb[ntscsypsxaeatyj]aslpawlvpctyjzwxhw
+xoooyfocrwvsumzzywf[rdovvrfjqhtuiro]eudcowqfnmcvpkdpv[hdyyadaesuxiykkiztt]ykgxpvfilimofxfj[ittajdlxgptkzqt]djtaivnjndcktuvd
+usxiyxinxwkgmdmjlq[quaspjeawvvlagjmla]sucqobcfnryoftyttwk[knzzgsqjkwlybeebxrg]juprtecqapdfbkk
+jsbpwwkgsmydnreqkd[abmspggfxrehkgk]nzhjbpwxrvuwrsnilmj[qqtarhezcecijunbk]fzskmnquqoivtsaxym
+mgekjguhkwyfdcse[ydcdycgmcbzvpkesg]yuzqagwvmncdcia
+wrqntmycrllbddv[fzewvpbxklyccfkqsed]czcxxkwfeberluvi[iupovtrukptjstnkex]sukvpgublggqzbecwz[rabiytcgypowllw]dfitoowyhfxjteip
+wlqzetmtxlrkydh[dbgzuittqekewyc]vsrigjcntogidwtft[hscoyacwvjejmwxxv]vpljhuinywgbjnynxhj
+ydpusekwzovghcojdp[dqycroxflpnyqpnai]znbszhqqfkdbrwzrxr
+uzfunassiuljodnjr[tzrbcvrfieeocdcn]bmsircirorbtgydp[wcxinsnngyykaaavhk]xxqbherleuhjskfyu[wfklhczmivpuooytgz]fzxxivrumhumdcdt
+mshsdecfbmkjmbrx[fdhjzahrcoydrvqg]stkkbwrlhhnjzts
+nmbyxmysrbuejutpzn[ruyrvzgagqgybiqsn]atkbnawkdkildlbg[trjlpfbjomgxvvmzowo]gbmfxqgecnzrwowcm
+rtiylcxgfuqngjkyny[mgidqfnevlylaukbwts]vcejabirnbonrowlea[cancfhwbwdlklwo]ifsehqpalixvinbsr
+ifyzslyhrydfxbsb[nigcfrqizdtzetpncxt]svvmxecfemwefpgduln
+rtzslwquokcygmdws[wvblnifrxmomsmdwtx]scpjyfputxvatko[mffinnpsxezowdl]bsmsjqeowsoobewko
+zllghkuucklrmwy[ylrocgxqrlkdkotl]gmmdzctugnusdsrwwhq[cllevhgqwlszrhlbv]prpeirpbwoapvocm[urvubddgwfmmkoyu]ygmtwdiwvuepkcw
+hnqlptboqzzpksz[axumkjmbmyxfokki]oyassusfzvnzhlobbme[vbnbcjaiiuqptfyct]oagongosnahrlok
+vgsfvfwepwufvvqbo[pmdxwkxldxhlqlqrgp]nmkpknxluiphfrfxm
+qypkqkfcicanneyvvr[hrsgqfwjegdzfmyt]hmsppdjbdxxtagyhfkg[ranuabbxvhlszpmlmv]ajsbmdayixczrhy
+oykuwlbsupkaaaioxnb[cemxnilkmxflpnwp]vuvzxrfcfhqvmzlzl[hnvnqhipzparrqm]rjzhvguxrwhwyzc
+mdjjwbprbzhftjae[clpvjvsxatcbzsyybw]thsopmeuzvhcfppbha[hwbfzhbptymaaoywwiv]ybsfudfmveobwaqkul[argjxabjvcalkomgp]nogtearwoznoinj
+ngsqrfixojvtgzmfx[dlttfdsvjeppwweu]ydwjjxycbpopceaj[anlhiebedcpahqihhd]gtsexwhwnpmpqvdxa[qflvviiybebmusv]epuouytlbtacnsnz
+ouccxvpsqnmxezei[vmifqcpthebiklhid]tszxpvkgldobdjl
+pauvqtezlhvjejl[sczynxdhjpivcogula]llemqpnanorgnkmjl[xxtooqiwqkcbvmp]anafyzhbzdtpcxcad
+gngdmikcpsuduzdrd[fchropeunoqkngns]rfdquwdpxtlfxscvhzj
+otnuxdwoeqotcogo[jxyhojuczdysbfvp]upffjmvriabbalmlqmx
+xfjrywdooyrkvifzub[ygubulhifdmoytb]hjuvaxnchbmrptw[txcsgcehrbszmnzl]xlvcnwmeztfiyhlwtrj[twopxgslxaqihinrefq]tnbdtvwxxbichal
+bepzmphvahjuibuvg[zuoplvyeupxvzoprs]qgkpflfygaoxuriy[lgugebpiqnkxxqhz]kqhkfkyiqigodfq[hvaktogguzjumlga]gglqsklyzznufpg
+cnzflcqxgiepnsmpxt[hqbdhovnvyecljhzx]vawynjdylprjdky
+pxhlvphiiyocalr[dfhohrjqchpblygac]oqdjtliamyneclgc[pzanjswflkxxwvnzm]qbbuqtxwodofarbbl[kiqrgquowfurmiqlqy]kppecttggvnsuzaarwo
+dkzdgkqnfjkadwk[bjzvvzwnbuhkinvc]xhiswkplvojtzwwvyph[qroekqfwzfqeqcfns]kyijvgidcjeeenhgea
+mqoqfigmgtagmxjt[qojoaaqyptscsfmd]zkpsvrsxzwvllxqpi
+cdlfgkthideaizn[klvwdqakbyaunqfxt]egotktupevsisej[olkmccwoqyqzsnuv]szxkfqjshuwyqewmgm
+caanbkvopjahzmqch[wylutkdesribnllzbac]fjpryexeaxbopdjhhu
+avulisxpjwlldll[tueldewuwemaihrw]vjzctwcvzpyiihnlrzo[cjdkrvxhmsglzllbpl]gcsruqwlokbdtgucp[nxubgtwzjtwhtdvbjuq]dpghqlnwugoywuiqefv
+rcfjxvabpkgxhlvzf[ftlsstmreroxhmuw]gcacbophluxzofii[vkkogukgydicpvdqbzv]dvalzsrgykitiqy
+sufacmzxrfdwlivdngo[kthzrniwspkdawxz]rudbmasvirscdpkpr[pcielclbxsbfedr]pneagajkflznxdrkejk
+qtvidydakxhrbrli[arccjldfmvtskqtot]uxldrdgmtilrhob[mfqcpjzuqeibckk]tjubrbrdjdakrdud
+cbwxzgidmrnjqukyl[uhenxvxtomizedkxwt]pcpeskttqdttvibym[egwkoivkdehfrlzz]pjueedjamrhpsnuulj[ccamvzizqyunxwbojum]qguxpdkjsvkuxiskx
+ecwvkjdmndzmmivxnsa[unghjtnrlreamcw]fhxvfvlthzqifvftbo
+tfzpfvojlegclkt[kdwzmhrpxckfknvmdqu]gnpywcujxlgishx[mhxacejyvmcleasixmm]ggmuguvhesyqaijlv[fcyzsosernhgawagft]rmdvdnkuaworthwsoi
+adztzinzrvazerolcl[vypxttybduwxgrd]mggcsuuzlwiilaav
+qnamzrfomzqqhozg[zaoqvddnqodpztm]pqhditszsmuiakyelb[sfknkiilewablfnt]mdzzoowquvhayznyl
+ovvwrhkbkeqeatbcke[wtzdbpzbnlkuhwqwfz]tupytpbukmuqytc[fpyravdsbihddaubymf]pjiotvegpewlpke
+lubqiczycurwvqozz[khnsmjxfeogtewtodhj]xhqksdbozycjszipd[zeptjnsjluccoiuxm]bhvktxgvqjkufxhprr
+zflhauqmcaiwnqn[jhyeagjfxbgnzkdr]hdwykmzypixrdykd[zkqqugefunjmuhf]ykufgfmmeaapnag
+eqhnlafwpxhjtrif[ixkfnqexzmbmqencp]npxnxbzhuvwqnxn
+kokxqtbaemcjzlrioa[ujvykzotvzlrnfg]couurswwzchjzbxq[ympswhhwlvpohjg]wxcufycbxuvmrqekgq[wyljlkzgavafrvjuesw]dmgjejauotkmwgw
+mgxyddqzqmprxrdizf[clocszvenjingorxku]zsuqrmnlgyucrgboe[vpenwatmulopddv]expnuzinwtlihej
+xqhirwwuirdapgmyk[snyixpqruifdiqekwiv]zogryeticrubznbumf[yisxpgzptlkrmeevgqj]qrebxwojumgwfnf
+djlypifibwpydcxrd[swxgzdsqfgksqwxjxfk]kbpzzqheozbjjcdpor
+uueutycrzzvuhvniu[nqhaoxpjrlvrtbahncz]tmxvdfxvmctcfzoqiux[gevrghyecnzmkrujmeg]rcyqojjmpxkpeulzl
+quyrwpchownternlfj[qijougzkibnhwzvjk]lmrfvudpzxhshukhpn[jvvvelpjnyxpwvo]ztuckjcxyxjvqop
+ueyerkamylcyhgszgme[kpqbsxegdljldwjdxgp]afoamkxjljqzpmyef
+ryrrppctsvwsxjslb[sbmyepjknxewewrqfsa]gevwiiwpwstdkruplv[ilkxpskdrntqvofj]srpukrzanrqhkprnu[jlujnhxksrytsdazgyt]fcxyuaotwykaosgnvp
+yhjojsuhfhujvfk[nhdemperlpgxpud]pdvcrmhvfeudrea
+merahlzkjieamdkyky[yeygykydcucbambmtz]tbujyhneuvzacymtgrd
+sgvvjpfdcsriacwuyy[rqhuwizydqorikmqqlo]ozsalwkmuodygrh
+jfzfzodtrqrrwvlr[ukxwobjdyhtqrqr]qzmrpkkjzqibwekne
+xbmixvpzovpzydwprwt[qnquthrvjmqtpzb]utnmpbzmurlbpfuaqu
+fkfzgaotoffusnte[ajzqatzkpajlsge]hamnzapphynrppmzwm[teysbhjrdgatijve]aigpcjplbknziprba
+jfprgbpaubcukcmp[kddnrlcjywdjcud]nwzsudlamqhzrwlkh[fuavvscfxpynlxexr]szgousvpbqawlkpcd
+idlhdjsytmzcwcu[lgwbpjcyvpnecsqfhr]sjkxaancdmlpobiwjr[gzxmhvvugpuywst]oodlrjlodknfxde
+bplasvzaijndpfkr[wkvndyztlfkelwckt]kjkbnawptptvful[fmlqcligysmrzes]ujvljnzkznjvkgmsvqq[ezpnsnwrujkrbcmggsj]eghksoebyyfnptgqjul
+bjwqelavjebvqjroszz[jlfwuhjucugbvczdbil]xxuinqhddmsrpukke
+tgbvekwixowohur[hctpawxelfhbtmwc]axirbbtolsqjclqo[xcxiycbryxmpimq]kutifmilczlxebzxwjn
+dvxlbiymdfdrnnfp[nxrzuioymgfxqwxo]qhydikbrlhqldbq[heutjkmrstetknylg]grzklzcisupegmbg[mlvaswdotnzowpqw]inmxskvrovknbngkp
+rpoicdzdnkcxqtqule[gcxezbuirojvwliv]bmnlgvtpiyfhkukpj[gtqavwzdzdmqufnce]nwnlyciquxxcwpte
+ubleorakkrqlakyr[kqwacjjutlifarh]dgijscrhnsrsxqhogb
+niodmrcgcjrihildfw[pmtshihgrssakbouvf]otoaadrggvnzmetmyds
+jczcvqxamrdcpnjl[pitcvywsuryykynqxax]zmojzqezwxdnwrcuif
+nbmlxeosjvvtihmwt[acformsggoqxslahuma]nmezephkdzghfvhiqq[epizeyqkmseenueefiu]alkiffsdvovxmejkunk[hiwyudbbuondtsqjm]wjioowmqljplehwe
+hlcllqbyvenlzcfgz[tkddqsjxydctcrcuhq]lnqsaupwdmxeptzog
+rrkevyquvdogauq[lxscinoclyrawtkvr]mbiscfistpoutkc
+lwkkwxlifgwimrupndu[kglwcbuugjkujltz]rrgozebmyxigvxefa[hxbstqxfjnzvkco]rqpxaurnjtzymxkvtiv[fgbvzthgqifdqehisw]kwvdvfijmbimizl
+yejkpafozbchconq[chghchxxcybtarwkel]ensiprnejdyegqiiu
+gsclugkgowknjfkewxn[pgzgezavhgcfjpi]wttjlezzjwqyyzgzc
+ndgluxoxlnekaomi[hrrjyflrxyetpub]kwpcbjgszdjimqfgat[ofdwoxrgxjrbxhgep]rdaebrkfchddavjeqap
+vzlsrismjdiyfqzcieb[fylncgldcdlrqnbpw]hyrajwsfckxlkhcboe[rxqyolmmgairjktnk]xhrusylermeiiolade[ifiekphfwfzsnrb]szyunhntoeymkuhyvru
+ekgeyjojapzhzaxfzhw[nmmzpmouaheahibz]skhvrmqbvgkbismmmw[lpohwytpsrtegazzkwg]cvyqhgsyodcdoyandpp[rntevuwuoyqnhkmrr]szsrcjzpstfyvlf
+ioykyddusobfdscqkmy[pmuczfvmkjokvnoxrz]osyjyicdpcwzxvwfn[gimnsriontvxypcxnja]rgedrrsbgienkkwy
+oktebiadpwprzrv[wgprjpksbgdyqidklkf]xhhjmhfbhpszdqu[rxjenkcvcswchak]fxqrycgufsqtbxx[pyxvqyqnctpzpggzrq]mmncxhloifiifjpnitw
+xbqdzlpfxcznmczfqq[tpfsrcmbflynynshgt]whfhtgfqobzaolpx
+hfbetzccpyqauunfsq[ihzoakqpjosfmeff]xvgsqfzcgxtranek[zbtxsvwatcplcseik]vaidkyuhjnsgptupyxq[vprljemlqmphnaau]vfgliasxcpdyayvfddk
+jetotpxiincpkjxqmz[sfwjrlxbmpafwtjuy]rasahmylsaswogm
+ipseqmdzbeeqjsnvo[qxgatjiqzhwulhgkjm]syofcufklnbeobppx[lbmkistwoiolecjh]qpznlrllrkhxrnyvf[zbhzvyjqzywdpvh]thlrfwmziexkhxgp
+uqyiqoznpgsjaaftzq[bfmkexvilwsavbrnwo]pwdssrfyvkefanxnlfr
+yijgsezauqoevphn[qboayuokxuaztxd]peepgblucrlstsln[rnifdfjhxdmtfse]qvymgyfdvcpezxdgmen[qyorafkexhajsha]knaylffgeufjxogyel
+qlydmvzjoavamnvot[napvavoknajlvmdd]wbjkbdpjhuhxybgywu[umxthkfbtbevasmekcr]adnybcirbnsyplp
+qshfqvkxfhgsysl[tzlddkjozqzcpcnx]xjkhcdozufunylwdzs[smgwthhegrzgufktc]myfufzjuvrafwalrnn[jhsmzagnqmhzscu]dbqonhtmhhdshdyatcn
+tcdybubnklvamrjlxqo[naocexrxejgekonegma]hlejmizxmhxahxboitw[jteivhxwxftlyhl]kvhbakqlmukgslgvgx[aueqotadcogcmhqeeec]igrfisukejhgfmdvx
+jowozfzspexprygzplp[acahqiqszrcdhsylwwa]ppdmkmcrzpzbflgeld[etwowmhcqhkjkkipk]gnilcosjuukihcwyne
+ynmgkfpaiocmkybwkz[ztxveuhtztuioruvqbr]grhetxxldtoepqtm[yrucewbvzbphefuf]idcnnpztztemlywblpm[ltaesuehnzfrsflac]bbarkjzutumhskhf
+mckdhqphoehsqgjzpzi[eiretkkiklgmfvohgvs]fsaipzocdnrwworpfj
+hmdbweapvrpdkhqhr[xwpfkaaejitfikqgy]atylpiafldvqsunu[dwvoqhxryfpiegidm]dyvhcjqkgspgnpw[nkabxwemccqznbpdq]ripivpqpjrebswqspd
+xdjfwlhvdtcxqvfzrlh[kcjkplfasydesgzkkh]ilfrxwwjtpmshhcy[gsobusiljqgosoih]dgtehabeomwepoaaahd[gikvtnebxclexmsc]nkcvdazorstiymosjv
+fjjpjjjikuarjinig[ytnbvaleddhkesaoaut]eorhszwghtnmzbjipie[fuwkcamkegyilppagl]pipdvxwvkvvvanblh[ipiaupaojxfjukjgk]purmzuzammwgfyle
+qclqkkcoimixsiou[psabxyezhvejtdodz]ejzppqfiokslbdzoyo
+hrrdaecpdytoxkwdynw[vhgsgzqlqemkdkewg]yeqaoolmodchmigyxt[whflgmjarkpzbitpkl]jqjtyhnxkklkzoa
+jxdsjmkuplrowpkta[uzwnxgrrcieqvoz]vtwwzqgvdeornoqxmuw
+igfbnfbrrkfiyngqux[aajdqilzidsasrthcnc]xmkzmvqsexhkttcd
+bmcwxzeodkxlxclq[zvmqvljaabeakiei]xzujkuxdmumimotsaps[xuhocncyjxiyavon]hslcfclmfhfxxwwrln[dfmghezypyqxtwo]wxaxiadxkpvuwdl
+xifaalrmhugjejbl[ioovxgzfgpaqlyt]uayfrtjeutfeprmb[fknrvsrbeucxlyzauy]geowvgcfjnbglmrxp[ocnpvwnagqhgbcvoupp]inzfrbwlliwgcsqgzb
+wccriqkjssvswvpgx[apoeqvsvtniwgbt]wfrmnudgajwhkcy
+mbyargqesqkprhbtaqq[tpxvefsyzwxvshmict]dxpxmxcluamxmfq
+jfxpcnpdgytwhkfb[kdrqmtogtlmxqmv]auuyjbertdteoho[tdendgogvoevpnevzdx]eicpvtgotdkcgwbd[ygcvethlzayahhialf]kytibwtgzhuvvsjw
+wfdfxjuqfxjbnjpt[mmaupydmuixzfwebpjt]kssauqawybxkfmcu[juevujxyjrwzewzua]eladywlrkxglizgc
+qtkmarqccnxwoqr[vzmovjwxsbhtnmjhqjh]zycttmgyujdefxxfs[tsmxkcuqircrdwtsz]uhqtftqwcxreyvlvff[kwsyvatwweenxdvqum]sjmbfsnprqixqzx
+rantzkbrnpwuuvqbqn[qaudnwijvntnxlj]tfdbqbdepavxiewo
+xwjmsobvbyejpyjkrz[ozkgsxhxiyuejjr]etkvofiicvcusmmlg[rmkhfcaxfbdltnpwk]swklpvfmxmlfhls[iexmcqatbamzyvxft]djvoysjwetzhocdd
+iixngfiuncqysuzf[ehzeqdsqwwjrubb]udkdvfkdtxbddruub[hktknkxemrlnbxwz]qfejqmapclbzhhe
+pmviizplesuakfc[woqzewypfpcaiotx]xatiburufdzajqrv[ydsakwhemrgnxgqyli]isubtdzpkcgsoas
+xxsqvodorzrnrbzsvyu[apejbcvdjuyujpxewu]kfrcogbvnrkuykpgx
+nkvsmhvlyyweggw[yhcjceblmlzpgig]smpwtbqsnklgxxbssz[aiivebyzjnbelkphux]wnaojsgmpoiaykznpj
+xcllttmboowsgodsf[dfskztizatqovmat]gpzyyqjotpdkdemcjon
+drhgljhvyonmqzkr[ohxhjhvlrpodxwy]mrrhedvtgdxjhjv[golpxgauowhwdoov]rdmuwnfurqwssgth[atspndhxuuhzadog]qgdswxcwwahqnpx
+uvdajunzymasgjc[onqeemcifirbxli]mrmpwnqojidvwexxrjg[vbpwisdwqtiteawvdw]rpjzhfsfhrzukstel
+owbdsotbsjvrwvdb[fclwyuadozjjeyvkz]uzfygewxtlgjhmfpyfy[qlnlpqspocvcpqsa]fannkpftifaoeszzu[pvwpbdancbljmucxql]tlzusxlphovfyfflj
+mmtmuzzulxmgxsmf[djwlpuwrkdpcbvv]jomhrdgighcolvayu[vdxrekbfbxgdluj]mwkcqhjhlrehesmwft[pigmugayjtdhtpweyo]lemzwycbgzzhvin
+eferdgkfaasmkyi[nopnmqjuuhhkaclf]twwodgunizovyvydh
+baddrprmgewtmypxsp[yahwshbkzattrry]tjjmawkirxcxcpkbdr[kcptwlmozcgjszalueb]msxrkbrbcfnflgnqe[amwmeanfnbrpznz]jkkxzruebylcrqkvyvk
+kjagsescwfjkqrykx[sefltugsdwkybwj]jmebeveaticpwddxbk[ktfnvedmpvqufsi]zxjysrfpzfhngjci[yifiorzwyumqotxoch]afedqtkmzpfwnacb
+lelwtilhzhzslvzo[ehvnqsjxemjrcvbqyf]ovygwyyazlsulyzhjja
+gluywzrxutecuauqi[vyllygndlfkbmgaoefq]cyucodjkxwauafwfxw
+dflaghirjcyhylbcenw[dndkrtbxackpdcphny]pnhqmjxdzkjycmdo[fryelfouoaesejoq]tdhcacxuqwfspqevq
+yjnumjjyewzjnakmnhv[ulycnyiyvszhifgscjr]xheytyiiyilswfhqywd[jxrndqsxmwcrpwrfu]jquhfnyxudasmomnpx
+rspuvdkdzbrbajkj[dcfpcvzpbodrxtl]xbskonezgtixwjfsuq[gubkcjizpgfwqktcc]ddjzlszkolvwqsrnnc
+moobncjrmmfonnmp[lpbevkcuzvqguwzbzb]pacppeefawsktrydyqd[wayxdzsvisprqutg]dfysmjhwsvnavpixfl[aphusnjjnvygqikzbz]qmvbpeopziujlsmgx
+wfujisugotfsymh[juvkyhewsnpzualwau]ljyuwiidwytmvinw[qicxeddblcxrsdrp]khdooklzguadokmdbd
+wdzzexnylrbsniulyv[nbehnwkwkrrkbwirh]ymyaqhrhmbuolmtbz
+hsxsderrtdvolsms[yqxhutbtoodvausgm]eufwcczbwgvzxsti[gqewnssdahkfambauv]hrnsadgqtzcegnplnce[fwzpwvfptgbgaahdn]hlvjzdqpvjezifpbh
+gtnyrilnfgmslzfju[qwahfyniqetvzpb]txlwtncptwapogp
+xblzbbrwjoudimv[grtjaoaytdyffbl]jojuhhvrrgbymoptzi[rgpexwvtgbswbzp]ysyfhclvndltbnnzg
+ggtkfikxhhzevnhpkoj[egndynfnwwogwdttwg]gmdytpspodusstki[zokrsgoycmxdzrni]jjtmaoztqkdpsnty[ishkqeyrmckkbcug]jkkfuvenjvphkmbtk
+aprzrupkmqzdgncwuq[ototomaxhriosvx]zftevshbmxrjingy[vkrildlncmbvbfi]wsqygjuriitkbszg[ncmxdegpxcdvtgau]iauwjlqoidqpkzkeazx
+klbfjwxkpqniguvq[wymwprcxjujljrexcg]mtjifypvknsiogypja[tfbqvlowzqxqefia]azvpxtyghflrgdo
+xfiwnyfpxzaizzzhp[jsfakgounppfocql]gcgjvygypcgzvnu[qmwugdkvhxjknumcr]ftgvxsqochhihwnsb[acnafcpwduptldm]zcstejwdgasnvehwyot
+repltebkzsojvhxy[chzhbjyllumckfluof]lhdibxgatvxzzhzflz
+ilqmrorgodzrbfesczh[udnwlveyxsalbxf]pptfzbjvkxksoarpy[wffmfpwwxmuxfmrvmg]zatihmtjlhvjbzdwr
+gjqtwvpdnhhqqqvop[hafmfvvzhqrnugo]xgrpicypdmzyjodfv[vtykgzaxumptsclyf]medyaqnemgrawbizrdz[ykkktuzmryicpimqgdk]wyxwdmdtrxcpdqhsrli
+hjnariohxtbsthvcwj[jqplvjyvfwbbphien]yyogxtzdtzodxceve
+tqajsqqmgynvntqf[wkovdsdotmgxjmmgmoz]kyffakcqgknonqj[hvuefibelljpsvaa]santzrmyhmmfgsac[xevdggsuztwdjllvmod]osdymicaxgknwafiyhf
+xgangxswvkcjsek[jrvhyhmomvqblucr]mhakwjcqomofhbdt
+vuuruhdlaefeyjtemtn[rkewcsrolbjkvgnjur]ajuzfefffkgdtzfmfwu[ysqkcwziamybbcghjb]vnyxgeftjtrxeokaqk
+ytfkhfnkxsuuddh[uorumsswhfhyjhnoqe]mlmhytefajriiwzln[ivgrtejpggcetxry]gtwlsddrscrxepv
+zhsugwnutzaxunnfbj[oenidjfrxbnbnevjwo]wnscklrurlxquzhuwf[fswcwqtoexgrdguawj]knactvqybzyjdjdkdkd[hwncacnowaliolgzmlh]xcqfyvhkoaxjyrxggg
+vfcdutbbpmmhmpty[glvdyxliujvbdqr]jyavmvfrqjztetyn[rqngwyfxdxofvqwo]xqcpmtqhrkoctux
+zfeyzggpwatzvvr[mwnxvrajqdtijeqm]kyprmauvxauaeuntay[ivwbqplblehbbhi]xfasnjwliydlrcyk[jmalyrxoozbrang]lksylhfvgbezkcf
+trqdnrlvoqyqyvjt[ekkkwqklawagqqprz]zaojypuwvzdghwkye
+bmnmbsogxhtpved[zffxeokudzgkusvk]qcuxjdhqclszjnxdhd[rsjdhjczxtrghlxwh]vpekhuzoamazdzgufb[bgtmhavdkyhtwlwcqmk]qucpatddwrtjztpxvi
+hwqfyynrncmhcsmrlp[vlaqdzxwrpawflemknd]kmvyzqfvlouluxelul
+gnzpgjfxtsaiknapn[rganasfzfnrvxir]ooatokkxjxhzxlpmb
+mpedacmqtzqmwqyfz[dcofwyebgsvctomzomk]vpqmhpoitpubjorx[thmfofpuparhszqe]clvrtngjajielkxre[mfcjhfugpyymytri]moqcfkrpazshwvh
+fxskejrgulaixah[cwshxkapatrgudllubb]vgykjzaukwxoyeucosg
+mgfyakavdeymyzxwa[dsvhoxfiuxixxva]jsxfqsnjgroxbmpiilm[kxkakjvwgwflxnnu]denqicbsmzvgtcxm
+zfqnynrdbdtqblxnww[nzbnvcjtsxrdmasqtn]yoganlahispbjdyxqx[tuqafqcjrxnybeksh]imhkfmqdjiyfoqp[oennqnvdpveoija]vljstbhqatpwvkbg
+lpzjqfcipceweps[indnzphetquilkxnds]oxyivnjttcuectlyfy
+tfhhmfeomcdyuql[ioclczzniueodbtpbrp]wuiujzhxjbgdlqbm[iciypydykxiyqies]ptvkrvkragnibssly
+ybllxqqxzjlhskqi[ytsvahdhxgwnwql]pzfzcnbxiypkpytv
+cchwtoevekjgyqqs[kizgrwqwbhebxlscmj]tjbuacerkadppftxdpn
+nofeoaawaeoepwekxty[mgapdpmakihrfzlfvpf]huhzkicazfkvjhgdvsp[eqtuybajdgdthtz]opgdgjzkrfejgawxn[umbakkosxdtfwcfh]dhukvukdwsevvcmt
+nhzmrmtfyhjpvbsi[jghcdhdrxermnhnrg]sasarolrztffxrvh[tafrflhiydopcqrx]hbrwebrzutugjnj[ejqrvlcpqxtiuqho]xjgvbnuvoxjdcpx
+dkizkqalwbetbepak[detgokxgkgyhrqzzbqq]rmwrqwolneotsyvq[fpffqdefoxfczyfb]dxwsppdngvyskdpfnbc
+ygwbidlvlgwncfy[ouryypomwfwmnka]axlhgqfgvrfsmbs[zavmkhmkjzvpzlxpkag]bfewyvdthrjzmmjs
+jwyxcjasntveqmblff[mudhpflnaxhhrphuwy]yyvtbzbohccozqj
+ckfocickdlijiur[fejgtsphnigervnza]owlznrkbwqhkskgebbx[alnbdcgnktmjlnhig]dpfomgwzkqrpmicih[vovjambzftywljbxrgj]ihljubxxgrxrqpn
+pygdmdnnbvnjlkacjfz[xwefajgruywjhysd]soepimqfbbhekifv[frdrobvsbwwkcytfv]aszgyodinewnrfdhh[wztqipflzlrwmpxefga]bxviyixobyldmkln
+qujnmepaefnkxgrrg[yxdnlyihixwasibuy]qtmnryswxwzkuqw[ozuwcixlzlbiacytv]oylpudpmjaqgwfqvsb[wljtqzfawkmrnkgkvla]kgdvfppcbpyazklfdk
+ijkbhnjcxgsslwtkuca[pxpiyixylcuudtwbt]ooerzoxehuqynhzmhwn[ynmgxzstfawvqihdhoa]bdrhyquybjddpuroto[fhnnpsgnxlnoiiqcml]oaibnvvqupilprgcyiw
+dfqizqapoxvqvqixvm[mgrrcrzvjkncxlmq]xqcxnymsyxbtfebdgy[hfdfaxiuiexfdhy]flyhvoppwzigjxlytu
+qlakotkuqswwtqx[xnpcrmswyqolvyp]limmsdyvzescvvt[rrpvvituflyuhyhz]amdxfzneiggintiyzuv[cykruetmmqucsbwjrh]ymobjslroztxtla
+aiufklgicgwxdlaefc[ofaqlmhnwrwhjlleyt]dixgrgkhhbyopqkzmt[zhqupdyazgumcagdids]mxijcialempjslotrgr[lmwxkdqqijndgoiv]upioecwmfnndajajbxw
+oiwkroaymbjtugfvip[hyqrpfdrfjppatm]azycyfsttguvudeq[czujqevgflhvskaguy]llsuolaevinsabqpy[sivsqswxfxlanvod]sswhiwoaxhqsjnynidh
+qipfjqqbxflvnxgv[cnxuwbvnxndkoxcxjl]atoznchumwauytpqmgk
+doncjsebymuefbxj[itsfdedfjxzxgvj]wpxzcoaybnzzzxz[hfxwmqbaiyiajiorh]einnvliwbxhjzxx[rkeenlrteubkvgrpmms]qbrpoghwjttgawgstt
+tyiexegppbtbxzovpb[yljnqybbavpwbwmvg]unbjhlrkpjrqbxrtpof[bvbfvhvgtawgpydlnn]phdnwsbwbljkqchww[galszmgwroduckhyyqa]wgfbqlipsvntmnspge
+gmnkhnuwwojgyybh[ivxthnkhjaevliiberd]crpicsxuksahuebnk[vogumtrrqupdjhtvmi]pcezvomttzmdgtelfq
+kwvkuklbkgbxoyqo[cckuhlseweoukudp]kuvdtzbjeoormufjn
+ewqcguiyodbjoxu[qgqtmjabzxbzjua]twmhfdmuudjrqjpge[xexjbzjvrungbvvmry]yuazblohcojrddhfzg
+irustuljdmhlqrettvb[dgsukspodhlhcqabx]auntsiybdcfgxjmsiqy[oqscrcekuibymdwfcy]dmxibunjfmqjoeajyi
+ppvngsfdficcpbmbze[gcazeiyfowcmezww]wmphalytgunmpjqatau[qnhrljcdkikordx]yqrsgeczwcwjbqfhfw
+iniqgrqelaihnllono[cydssebiyefnljxfdh]ljpqnievldmltrpp
+jzjmjfifakcsixsg[zmgaofcvdvtziindqe]mzodtodhvkiluhuzf[gqjguyslrtqvcesa]gwzpfqfyfxnncsemb
+gdnmdicwnjwgpjqdw[odoslhoqgocoumxf]vodkzgngmshtzwjpgbn[rrhzqlqeixvxjbaldp]xsvbscotkujitex
+nnewsdtgggcgiawo[kmuweskiapswdskgosj]avjieesxujtqfwpuis[tvulfkzyslzakco]sjhbzevzvglgfreyc[wzxjjpsqmctkyoutau]isajcfzslakogyuevtj
+brresmfifuolfyc[hkeljqzezcsvzrcue]zswubkhczxziqxlty
+xzohgybxqdxdwxfbx[dqcorjuppxguxgps]gltuxzxhdjujuro
+hmyrpjbmwmyzijkbljp[ipbngzbreqoqcisbi]ctdmsssqkgrjxozcx[egmuzsmsaiodyyt]ugjpwtglzvshohbj
+snumfuurpriffdvj[ojmagqzaktihjmwriyv]rgnyhbobphsfqgh[azucllkylyxgrlom]vhtysupgjwbwndwrgfq
+pxjdxiuhqmvwufld[ktpvbdokrtdpxrekaf]mamfsijuemlsyio
+olcpnpmilbzxxvqsz[ervozeicgvqskuenz]gcxvfthottngwww
+hphpdxpbsbmzshrwmwt[sapciwpwuradyvko]dnrhabfjqorseajgr[abhgtcdijsqfndmney]mmsvtcxmoobkkaeevz
+rtvrohugqesutzky[sjsvmjhonskkqwhis]pqjtzpfnvwsigtme[ckthdaxpibfximcq]peoffhphnstzruuhze
+cazrddymetaqdtlwn[tqrvhfevxilaptinubr]opnhppmmbfscporp
+ctclntnozqwmiqz[qniikhszzxbcatctip]wpoexzkaxyealqhcg
+suxvexjrakvhziolw[pxjlsfocisjmwzl]smoqdqjoczuyiac[ojpwtuddbldiaruiamd]upfrpxzwnthfytv[xvfejrchuditjal]bxzvjvhoigqunomnikp
+vjuryymolbathzinp[xrcvcqvbklvqtjnpzh]wugebbnbnzzvdmpg[kzdlfbpqgvbiyqwitga]wztqfradlqinyzfzf[abgygmhhsksnvso]kntwamrohagtdrsm
+ernvshbquyjfymdthx[jjshkcpnxftyopjayzm]yidkdkommeyieirf[zxxkwqqlsgxpcdwlgq]zpjrhkyjkdkxoufwlx
+pnevxgcsnqcdezwf[mnftbwqkrfmwcgp]rkmeslzoffovqheq[vxdcnglifignqqx]xiofsoyrslgyfrxl
+bjehvbcqagyczepreos[swecagoxtwhtmzsjxt]ihbrujlisjdftzpfll
+bdczzogwjpcdwyq[jptlwjoskogbhfcdu]sbfatvcosbvikmvm[njvcfwokqbtynugffu]qwhsgaqfunpacmimzhp[mulicnvulazcycscjye]oycycatwylztksmrfh
+idpyubomejrcwurt[idytppqynyqvdajevmk]mykbzkihnmfcnfg[ghfxtsrfkqppejwgen]rsalcongusjamgcltti
+gutkiuskjqzvbau[vqhivilwddgfrckjc]gpkuhglnqnlzndpl[tywjgkqskbdlsvf]bkwvgkdcxvdlvplmza[yeqeuyzuoqbypnwg]wsqmblkggadabss
+zgirdbsohsmusxbiqm[xnuiyfzmegcwzuvery]mzjixtxtbdruckher[ylfmvkslkcukfdp]vdwcmqmrsnedjnvsomy[cmmaoebsohfrnqu]bzgstdhoneuzfdxl
+wimnreygvgbpvafqrn[froxfavuvgvwirr]avnmgyvkwfnwfgudiks
+edgbqmwalgtiurhmmg[vjzrrmbtvyyhwliye]mpykphdsaunzjkpam[qdcecrxescwvlxmpi]gkfipuqdcpcqodcptya[pmdbisdhifodialab]wjucsoipfxzkkzwm
+xmurhwryxntmdwwv[bveccegjmwnppgio]rbnnbsqzutgyoign
+koftdywagyijtsi[amffypsbtekqlbvlli]avskrcxhiysqqgjja[ixrtkpjnrhljddqzt]ekluhurkjnhlzaudnrj
+vqbrbgtnvazwyixug[yrmuvykapxyyqxus]ehhkvomrgnlsofbd[mgwdwrvjwhhuynogqv]nyjsgnomdxwabameuss
+upixiwerfsjxjvecmo[lhlmklygfmbxljvptf]qnlxnzoekmyoggtsmtm[wqvqbaemhanfxldq]msobqxpmwqyauii[khuvobspvluvghjhcjm]ysvqvfsfyanmyrbuxnw
+xeawztjrtohpimzkw[umvqxdfhsyyxsimzj]kyhlrkyxcnyupqmp
+hqzlqinkcowqqzp[vhdaljgjjfqhlrjj]gmsyhpvpblkaxiox[vhbjqxseofvbvzbshv]ecirxnvxadesrbvn
+puqpygmwhwskicogo[lbkrenbngbzoljzuoo]tndvmvztkssolnom
+dbswyuxfrnypetkm[lyuajkvfqzwpuon]oorgrpkhwwgtpzxc[guszbthjnajqffsofme]vcqjstfdtrxcuscz
+clhtmgyxqbrzeipksw[mwuhcxpahefneke]bssxlwoelrrgsqcicz[yyrkfjczqdsglltdjz]xscwwnkcwstkpxto
+ajsijhedwsivzvngsr[eqorzqparxhrbesw]lyvxgqgqguifrpuj
+sqtxgdsfkbhljmt[ndqljydrgqwwqjayc]lttwcrsejwxgxkuawgm[nefpbdmgtizfijyt]dcxacpeeyuzkemb[otnbznolvwiervj]hdcjffxyhtqdjmaipj
+kvohguactjmqrluci[tefqrqmjpzpsazfoe]ptxqfezuvtxphvy
+wmawphvozqxqtmq[qqtumumswsrpsnjug]wejsdbswswrjitmq
+pdzwixvmkxpsxygxmp[zfxeglxxoxtkkmshin]hxjmzexyabkviollfnk[nfitohyddbdfqekaty]poexvcemyssklhllw
+wyyiqymjavixnwcnxu[xnhhsqavbnggdqn]gymwgjatpsojwfj
+iqdkuwpqylmwhfvm[bjgqryooacvjmxtrq]dqhwmcafwgedohws[ucnjhrhnvekrgjefzxq]opvzmoismjdmsezvle
+ommglribbfvicgmugx[msedauwycskyoios]qrhxlnihnwmktihzp
+laphdvdlixghsmjpsq[blbjmefxvnjnxmmc]hnzsqzhaenlzcvoq[ppyribixnyeucvjlv]fdogfvnymyznuuxa[pelyyutyolblxzp]fqgcltvxupdobson
+apnimgsoqfmqlgmjsvm[rdpnruzylevyuir]wwfenkdjpmqnvyf
+ltskflhfhupifhf[gwtcqaatnfjdgywo]kvguorbhzxfqrhxnij
+kqaeviepbnrokflimj[zqzevrvhforlozy]orzvxhevxtzorkch
+uhsjyhwppwarmrfed[nsfzcvrwjhfuwjta]nlthyhmaeghygqdaxdj[esqbskelpkfswkvwmr]stzggiejdzkhohumob[snlnvsgiktqewvpxhm]ahojfbcfgxqmmml
+idlikoogcxqffrufcqi[vcuenzmwggmbsknfj]peoviabqngzwiqtvri
+rigldzvrvmsmyakcjb[wwsutfoucqlgorxnu]bcuixkbifegcmltqibo[szoqsqlnduhgvhlza]pcvurfgchanmngh[glpfevaugptbhqqrd]vpndxitsihovocvong
+jwfhrlvcglbtbdlix[vmhtfcvzlshpfcii]gosuawoykketkzdhw
+bexfthnhhppzzutg[ewpudndaewfnwaht]wlnqstzsulregcwgmzw[atroqzyofendnnp]idtypgwyeatycgpde
+ldhjuqeykeelckq[qrrabgedfafkzize]tfjpjpzsafansvygor[jpuzbjptblhydidkek]bbkncsznubtpoiahot
+mqqxpkguxlmvyyk[vnxxtwxblmjdxjkhecj]shwgynlewfeegfwo[dgybavttexfiaod]ruobjihpitxxfwx[frpidegurggjllhq]kcfnatekrezeqoqnpqn
+pfelcxohsnhpzjnrp[bmnzwycytvwquengc]weaysvdqdkhrprcpmw
+llmwiwxeyezezpt[densmtrbqpiuwryg]pbgadfldspoahjimq[ugideashgoighvpiwid]pdvxaqoufmuvtrgs
+ynviititdvccfewheh[phaubuotpzjwqfcrm]spytehersqqwhac
+ktjvhepsakhdtvgoq[bnejcglklonqxmygyn]kbywvhkayojcufnwr[ipiujgjwknxzefdphq]zcmnmxqhuhjwqiue[dueiqqteiuvgyggtc]rbsyqjqegupwxbazttv
+pgnoazapsklgvmejjr[hjzazneywdxkaki]gfwcgiyhuaovsye
+qorimqvzoheryivfi[usbcrrdgseveupnqadf]bvedishdaepjjnrgftc
+thxrgxhchpeczth[eneefpesxkgwuxpnyb]efgidnpfdesgcmkqllx[jglvknahzvxyegxxedi]cupoduyjkdpyajhirg
+ltabaysmmffenou[fiqduygbghbczdsjcs]drfpocohdrhunajvmu
+rklvlmyqqxbttuhuzos[bihsvfaluvhdwqwcz]gbrlkbxpivsdykcjx[qoudfwhqcnbrmru]npquvyoxliacxpr[txyzvzsszqedximgecr]srcqshisakuwljrulf
+oiiruuqsdsjguri[qfzwehlhoinyhjv]jwayjxoutcbbsxquluz[kbgrvqmxzsukught]bgspboampsgsivvuwe[swvxxnjbmcpffrayd]txmyfolzjpxdvqzdtq
+resryrrtzhhnpbdrw[hnirhiummudhyylnky]gmwqolwapineiokcl[iqptxfvtgabqyxex]npeatmzdsfknpajsub
+aqjfwyrtqtrhnxdmfq[xacmscejzrlppqhlziu]bxvptkrvkahygexqsub[vrzjqbhlpywxzenkod]lqvsohrjrymprniyn
+obdgtytdzpcbnelm[scsrytqyknxdmzugidh]fpbpxshhnyxedvvna[fgebgketwucucajqip]cdmbxelnfsomsguvxdu
+yuluzhzwsfvngixjn[gjmdiyftbqimhxiv]gxjmpelluljxmuhz
+icsqqjcnwckhskoc[rhanawaofgbzenhxtfl]vsvuwijhjnaurwlb
+zbqzykdfeunfcwslv[fnqtxugkwojhjjqg]vetgfnapdhvbdaiya
+uxpnaesrcrudsmuxvk[zmffkqaufmoxgoelq]jldwuldydprcfgod
+lcaqgsbmhyfmfszya[brvxpxjvmtrdkdmfm]cphjfsilvnsdqmpxob
+cwxycngzriigcet[xltlzayrmdowajvins]rbfmarruugyqhvegod[nbyobbfqprdigngp]nkrwqcyinzutnklqb[ajhqjuhqzahxzjbk]nfyrxcupuphkbxjqlai
+xqwbcunarmghbsosq[jrmjtqqlogscgojnldm]bnzhiagvdwgwhuawz[toxpipinabgmkbwhtd]uxpgoorspsohkmd[dtadhrgzvfownrufn]xslrmvbosoeoeaewnfr
+lllhkodepygrzesxp[zeohwydmclhucevd]hbnsvtijajahmkclbei[byxhckkvqixiwtg]ekezugmyyavcwxtilwt
+jtjbuoavqyjhlaw[vbjakzkppzloxxfx]vibdluddkdsdexqnwl[ofqpidngtagumrk]kfoqunkkvyoassxlgg[ngbosgdywnmslnszsa]hxpciqkkafpdgfki
+nenfymvefbgzvag[wiqscyftlldcvsnp]pchooarrvfpzhwvcjpl[wtitvzxuvfufwviff]opjkauasyyfyspzoufc[pelszbarccpqtxvawi]cmkfptidaetuqkwz
+hitjejomylbutupmkeu[qdzbydybpabfnlkwkv]bdlbevsgqmwnbolnhfi[qeujppfhpzjbtafrgl]zvirtzxdzoojcwfohx[ftgmwthtcanqrxzks]bsafidxuxypaueoxg
+gclocruwassudla[imoknvpznyxchnrvl]qgninncvnnwjovnm[jwqccerrryoiwsqf]chcucyiszjrnobxal
+wqlihvvkfdyrhbqu[vizkatngyvpxuwhsfr]mrxbfaovpijyrmtjxw[mrkexdpmoaarqfj]kmnbalnjnbjcsdulczi[rkidvuivyaequway]jmyicruofboygakaozg
+dvyalwumbdjeaocae[zonftyvegiqiquqac]osgmsdmqoclweiqi[xhgqrjylvorhpfkh]mmpkmrsideufseuyaj[ogtngcelyserepmqi]kjezmzobtremfefqz
+ewovyikmmawzzrf[hcnunsbuuzhvduvyo]pdkiewvktjzzpqwvpdw
+pwfklqtvnpsajdvtyoz[gntgytituioaybkpjqv]wteojggsgedrjqdi[xzvkngdojribistpis]xftjryqatcesygfzoa[zddmnkhceqxmznq]bssablulgiiovynaqrh
+ztqjirnmogqbcfifh[vyeztcrzfxnegdyeed]redtifioqpfzykudrih
+osawcjcmfchcpgyi[ffwhlengegnjvwqehkm]rvtkttwkeoefydz[cokaihziodpeurmbp]spjznidsrkpqhsoag[mautcyrrmxsnrlw]dastqkwpjbubonqagfx
+jctsgqoqjqtodkhvvuu[ylovawrcpwpnzkfp]xtjdibtsmpbidvvdh[mmaecjrzneokajhkzc]wbwaapxadknspjujtp
+izxxelepmvtrpcb[xwoxroumisiqgpqr]lvhyjhchdicledub
+lqvelunldllnngme[lomutagiggypbbw]hdubyftczrctokdhvbl[ymxlvpbfiojaausmi]uqvhoaigwswemktiu[iipvkifnptbwuax]nidlqwimfttkbnmms
+sewpymbrjgtmkqd[tldvdouashkzpbu]qjujogijyyqwbvzqe[xmhewesgbeyrqkbfj]heapyhfvnqovmlkz[sdffbynjptvodwocru]lwqkbkjseujzmqprv
+oegfarvdcswdpnss[xgbroqaseklyoxl]wticmsitljjhgos
+bfhlklvvprpfgxt[wczpqxciyyulsgf]fhlzqdaxyerlulakhbi[xgklnelwoygvyged]ynhbzkafydsmevse[dfcrqsfpouuvsycxi]otcdmymmlomedultqa
+pvyddrxqxuxvzfqfl[nipfbquzzbmecwuu]pxzmehysojqnpna
+vthwugdifklqusu[fmffwynjxyagyycbup]eaompujnjzaowbxmg
+djekvgwpzkgwzwardaq[sjycmrggjjtzpzoq]zgagtgosiowypvz
+bicemnivninwfubpi[enghcgyjwfuwqvfcrh]crycaojgzeqgyxdq[zxgbztjljhdhzpoy]ygxqydxramuikbawdoz
+wdigyfqqrkjeseda[yjezqvkmaqfkcxgu]dwpaveednjywzth
+vjeaiuwrhweqviyv[twssdwyckfswwqg]bujjzsuffbcddcqd
+ouivgjbmmsmiezanss[mltubwnsjkijprjae]dxjbngvqbuzmtnxj[actzjkmbxwewlhmpz]aeweucknsntthwwvkmk
+hqxgwpeaugpibuu[ftohsergcnnghmultwv]oobxyesnifpglsyumqx[wthgkfckhzdlzeh]tbvnqcewxwzutlf[dbsokgifbtstadxjlyv]hcagowbeupbbxvnnudp
+fpgthpsgglztrnrjvs[rznddjrlsjtdrnufotn]nfoxdbhyvovsaratt
+idauaxxyrjljwtqk[jtrvbiyczhqigjxfam]bsmzdrpeytyegsvitk
+poxzegvwjgitaomcy[eatpylidmcjifnbyt]pxsatbkkqdylippyjd[nuwjwmoghmaptwgm]tarinkguhfewrxedty
+whrppysnyuopewxlch[tqeujwwbfviqker]qvintkkgeyiysbl[zmhfxkhgptetdsq]jazfxamrhsjvlcwr[ybdhlaudcktfgpjajk]vnedwkbznnxoegxe
+wmgrbjddretekijeqaq[wxoqrjnhathlpva]nqrxdfrjrvsaxzgn[voeyknzetkswzmonnh]qexvtsdihbxdwzeympo[mplyvliqtgoezpr]bsjrjqbvgcrxwnpdqs
+txicytmsosvlzftbikp[hwjajoqvcmhmitvqnh]gndimhsqdssjugsp
+scuaijeujwpdvdlzf[byroacgumqpoawl]lofgfiiquoftdrrxnhb[vowfcxvalicqrtpvkga]vdehstpbvncodihewhv[tqrtdbglbqthqfjyu]loycwsbaxhkfanhnp
+qgexpbjlhcciuhouo[apvfnzznkuufvlo]njoupqjamycblyd[tbviqvflseyhhsmxz]lvpemusmcuajelt
+jvrllpusmfmsnwy[yqlfrmtxpvwcllrfev]hpuqtteqblrjbnkx[puadngfdbecfuhuvrqb]myxzjgttaacbhzlpipf[gcjfzcrweoksbywfdc]mnchtfuqvmltrxakz
+ywmkwcztiqykpmju[zmkryfneelvtwfnm]zhuiojbicjnfdmsdhi
+jhgrwzznkirrskfzfbl[ftjkmxrdyljxzov]wcszeohqiseprjde[ngrtygnnwfandfuvr]lqcatjwzlsbuqnzyhw[hdhijvlmfotjdaaivaf]glgrbynrgpcxjihg
+ujtcxpupjndfftyfay[wzspgaqtsinvgbd]oskncvkxhimahafzkp[tbtuibverwndjkyrbtb]vubbwzxvzotdhtvvx
+dgjxjkogwuxxgavcit[shbqapwgyduxmjdzs]sqmxfuntsqibnshlszq
+byysjubuacsviouubxd[idvdypsyblnsmvvv]llcmcxizvdvtmksphjf
+bfphxfyrcoddphmhwh[xvbfcujmhltkfiqaejg]wxxbzpwusjrylub[vcxoevvppeirkcl]bmsyjsnoixvozodjpm
+amhqkszrkzcvumwjbr[wgobbxkqavcfedi]blkqusznjzozcwyatzt
+chzanckbvfhvxoikx[jeyndyycqesiujnj]midrrqwphhqptlbgy[dcelctfpcmitlbrdu]wmrripumgjowiedxpcu
+rbpkmcggsbshhytszrb[rjftwgbycnmyxxockku]nrtwwneopxuypblr[hovauqqiboxesfrqqfx]ytyygtytusfdjwco
+ytuvowkwojtdqfjtmj[ssrmnlgjawuaqqrdpv]ugahrlchntdmkwkygr[ojlgerllesmyzdbnvc]zaztsxmsddgciyz[jdimgvtyvojseeavk]qvyupywbpmhgoppfwru
+eirfjumdodlaevcsigl[befivodoxdnhfmqwkxc]qjaeppumixfpezjf
+lqkzkupjsinhxws[oibgvhxxpewuebro]qbweuxvitezbungy[lapasshrjxcjgdooj]hmxejqpigbcprqregtu[pqqqhbjetacltithm]zhectfbzhtyyvkyazu
+ihfadsstuwooioj[dfqkggnfiplpdcsnmx]ylmhqzhlwtxaxhx[yyqzppjaxhmgnlll]orngviyezsyopwfxmhu[pucykxnzcwdwnjzruf]axfmqcflmrxdldubnca
+rsaoluhtqbbhahhk[ursokfyrzqvmjsq]xlniovtwozkeahaydy[nyualslnfurebmbnv]ehgueldltahorrpbbyr
+lviuzeeixehupjezj[gzwzktpbujzeyypbqyi]ecapnyxygcmgfhgmfav[qclblpzrkfredwm]wcdfuzpoxtmzkif[okgiecyymbnmziyyke]zflgxeqtxzeezvc
+wzpeboftsvuwnxel[hmqswpadnffutphylpg]hbapzwwtxulrfaenb[hgsimoxqivllbthuavr]jpxhxohhxhlhlfemuz
+xbojluzthxlygkyzkwr[hjnkqiofmyuospv]gaglxxtcdnnbfvjubea
+uxtugntiubziynpzbju[onxffxfoxibzzzd]wineojjetzitpemflx[jlncrpyrujpoxluwyc]fxvfnhyqsiwndzoh[lkwwatmiesspwcqulnc]cbimtxmazbbzlvjf
+bezefpkmcyawtdlbnmy[yxmpaexxuojocuutf]gybqtynhfakfryzyoot[rzddrwizmjilbaevypd]wjfzotxmdlvmjcklea
+psehcauaffyyegx[pwkfxlhukfaavgq]pprwkzrtyyghtmsciep[rbobphjpqsmeuvgrjt]vlobomuxuflrqfwjo[nijmtbnuuzplcprb]snfbebpcogbvkwf
+cwflkfoevdvovrmn[xfkkrwrohqcdsdyuomb]ohirkxwgudwyepwtvm[ootlpxttypewmdjq]snhujgngvmxwpmagis[fmbwhgzljomkrdcph]pvfendnvzctahabni
+eoczaktxgrdpwordn[rbhnrlgckthgxxuzu]htgvsgazuzqpkjoejg
+wwadqndhcahxivixrpr[byzxpjmhnwsplkf]zgwftzdjcyjhuefzynn[pvifqpqbtfpvxmhma]atwcwmmvncdisnmw
+cjbhnctazhwdvcvza[ydnxbdfkufaflga]tyxejwcbirwrznjbf[wmrholfqzuzmywhlx]yuglypghwrwzmduczd
+sucrzntdgccanozz[dbyodxkqvfamarbda]iwcomrnnifahrolyhj[lldsewtcmdwovjto]kxnjfljadgqmjmmr[jpceairekkatfdo]loulprskwdwpwupvlow
+rmkxvrnxpnlpgxk[ymfqtqhsulsvevgy]mwlnvrwgovdeimq
+cjytdtwgtpfaoqpo[ekwzzukvazymdgcjbax]qmhoxsmtmokxfyggfsl[ghoubcwbxpcflxaoiqr]mhzvuhnaesfygwphehq
+fjfuuxzzuifgatypkx[pqxsrnqgcfmmojf]drmywevzjvfsdwoe
+aaltjjojczwavnn[wsduayllqabakudvkzo]lnkpzrwwahybafhnmlt
+trzcoixqxcnlfmu[kxdaqkezsbtcrsel]aimhkjueidtzheak
+knsjvqpezxmhuhawprd[zfschikoyuarwrpvh]jnwcjfkahqerhof[eiezpktdgiogoghnyq]xumsccawinipdfbk
+qdxlgihyxpurnyesn[uoqazfufeeorudagpbq]doynfpdydwxymmbnh
+hhxsolxzfchrnjue[qibcadmwrkmkbeye]xydgasalivcqoag[oyblkffxdgogkbjkk]denthwhcbyimeeyyb
+oomceudfrpdpinwaw[umnoeimbzecoaprmqr]vnswrzldpdlfoaaaxv[ysmxmvvxuzozxtkar]eatvxgtbqcoquhhzzn
+mrgnhaqqyhhvdfoo[brbrzbaajkxnrbkpsx]qknvrvpfabkczng
+xtvcrctmszksrojch[bqfzfdhhsfkolghur]dwqpjaqisitqmhpnkxb[omfmirdtvkdoehc]dgogacudqnrtshre[nudirbvfeacxjhb]igdfrdrqycnowffn
+vrgmsmohxhgyybr[shaciuypkvkjaqoho]dlwfavdhohiruaef[iowdifdsyckgfaixzbi]rbkuyahekeohyxnyxmo
+giaemyheoijyiqs[dditjewdytotrevtph]nrcosaxnrsfnglxyrbh
+aqpquczuuqsqfmiynf[rytylbwxvhzymqtqal]olufblbfhnqfhbdpjc[njyewyvnezayxeqkooz]yawvjaofjaqcpsaqnlj
+ynntsleqhquylfosn[esbohqcciuuyintjnn]krtinqbvgjtfvdttys[cahezzmqcfayrtijrl]jlquffpwepfjhij[gsryvmkutwbfvekc]xwuhwthwkpiprtpn
+wcifpmwramdtgbyx[mnetsyvjbkzlemkkrj]ghtuuasxyhlhdiqi[oidnivyrbzficmrkxa]sshjteaabilnbbv
+jpzlvsyhfjewjsp[zaukqnrnkxuyblu]itarroefggdtpkwknhm
+nxdmkipobgdhcekuk[edajmdcmxhcxntroa]vgrzzrytukuxdetf
+elfvvedwjbltwcnsbat[wlyogdvixiwmkxvshnm]cwhhqukydgvfwzkw[hendekbuynbsgeza]unurlefaaduvvpbi[uriiixudeogykwckty]tilfmprasfargwjoeaz
+ehllosfwjnemfpzkjbh[paefpdhywomalbjjwco]jynaehuopnolwbg[cusfqbvxlvqtqbuxgyg]dnvunkjnzqnxcginfx
+jfdeexfzxrfxleh[xqkthmkzmmfbesrfa]ddwxrlspxpefvpkhiz
+fpexyleujiphzrejgu[rjjuimrbnfxihopoasz]xiovbrwkxkchdagu[rssesjbgdfwwomrpdxi]xurzdbytoxjkwyzl
+wtudecnnxchnjhuz[ntnjpmwnwqpqqkcevi]xibzynwnkahwfizkxni
+hxvhhsyrupdpvjymv[jgionvwaxuiemcdtvn]riesyfkfymxxite
+ndpfqkkiqgvdiciv[qwegblwhxefkszrc]ddticzcfwxoylaheuam[kyqomblpykgrsofpbz]woykqlgorinilldl
+lupajnaqxzgawmnb[zfmybtxebhkalxwfwyt]sknfwfxgdqpbnqebbt
+qkttfgfwmqxgpbcgqvg[zkftxwwbappqdllajhi]ducnsepawowmjggv[osygsyvnhlhkrzahzoa]iygudcaycsrtbkohbrd
+akdvrmxjbjaahjcfhz[nueiutbritxbampij]vjirxewhgmmwlora[uauyvvwvrfhbxituz]omfdcitqhjhentxgfu[fucgdtoxvryasxib]wyvdxqpofoszluslht
+eorazrawyakawjfxdtw[bpyrfrsjhfualcoyfjc]gfgrienuzeifrfvw
+mcfhxjmwxlcreeloqkj[xlhrkjackiehnqj]iubxmjyssnwjolapvs[tnxnpotyzdxhqamjfu]qakefkzqtcahednybux[tosvyefshtbgasbf]uimrnuvlevqylbpkq
+emyfqgrtebopsxa[qwacgpmlcpoitzmdq]weqwomfyfqhxmkjalw
+dgnbvzkwdnxzuduvdee[palmkulrnlnjdyeavyi]cjgsjpbxpairrderw[nnoxigqxpkjzjhfxgxx]xdyxrtslnpmmtpotla[undscmvmhuxzohsdg]ghxcwnjphcmvttna
+uppsitifhxdcjbn[yiqjsnlktwkbfyho]dpftntebjwcyuih[rrqikyarnxteelpkc]qbjeplbraadbjxoicjn
+mqjlmaekarsttdmnl[cwdajzaopmbrikcv]vfhztmfwqcwsbdnyebk[puetgqkczejvdjbfqc]hdkqfycmizzpuoxumm
+maldhmhtlcsjqyzrb[zjbfpjpvdszrqkpzf]xspijlrjyzjputpz[mcjmewdtmgfqutbah]hebhshxtiedpjpjngu
+hiqikcyyvddlcggnq[ehsopbptguatpmyb]wfayjslqiqivsbrhedh
+zriahyyoezygvjmepy[dujudufydhkqlbc]ndalzjrjswnjujfm
+silotorivixpdydnd[wtsojgrfgugwoyo]pfihyfhusblbdodtej[hfclibenimixyexhble]gaglopphfrhqxikvw
+ddejnfspvmvffpfyozn[odqqmwgalivbswfio]rbbkjhvnszgvfjtgog[fgvufpphptnjcmraha]adsajvzndnajmilk[ukslffqfzyvxyxy]njzcfhdqyrzzctmnxn
+ehdmevcrfoeejfedbnz[cidowzljgyawbjmtzun]mxyjuechgccpwlxj[ynbdkyqvibsfwekcjr]qjilshucvucbebxmeyu
+wfyklfdesrxsopcnj[otmmdkdasnvomdhef]lpbexhubcjmfwlt[maeuvtcgzoxemnreol]qbwqszxalocdbfbtge[wbvswinrpyzjbfrsr]tinsrsxtrfkizkeu
+grorjgszsijwlhxfrjv[hmjhqmbipfjguwkzebl]kgphtaonflqlgbyk[qxnjzdupbhhsevc]tyflwvcpxchibnttwsn[ukpfpknbyacpxmoxzmp]dxzkerytewihuptx
+csyjgthhgyhnjuxxg[sjqffhahrjyoqxncjcj]owwprabojlpraeyk
+ibcaffhxenjnmvrnog[shqpfncawueqmpyj]hawlfakyplonsim
+ftaeqqsyebdeveutf[tnifrefjkddtblslzwd]cbdooorsorxwxugrp
+ioigxerknwyrzoztkv[ffkgwjfeowgtoxnyt]zhkhaqrcdjsvxctdj[ebntbwbxzbbqrdasjz]solgzrowmzozovz
+jfmlobddfxzipyzyaj[qghvghaxzmuhrpifyf]idrqkcfvatwsyom[wncyawwmennmgio]luzaexvwjhxbryah
+pjcydgylusqdexbb[nsoyssffvolztzns]mntwrdacovyfxcqfn
+tagdiyuylrtvuyu[exjzdpmovyftjpxgj]vnswkkhaoldjfkwd
+atowdglgkmbnrvyt[uzgadzquqpggiapdznk]snpqanyoeufutazn
+nltynylwgqezegky[rawbwledrpbduldc]isupsldtvjtahlwjgz[upmovvichcymgwuoqrc]gyjptxtuaqcfixjuanz[cxzbiosnqkeaxlkrxh]yglfdtzazlkxgmrlel
+ezensxwulgqdgytdfo[ozlmpzteuyjqrxocn]crruxzecnvrcpjurn
+ycflwfbhueatnpimmkm[tbcsifgtkkwtxosxau]vsnyspuvhhfozxgjbbp[adcyzxtdknieifc]hjkfmbmxkrnksewsqjn
+gffllhgsmlpxkktcq[wjqwhqrwepermblfolw]wzgcjyrpisbwyhnz[yjvzaqjsmdgazjuep]gregropoulmnagcvx[gfjkkejnxmpfbtecy]ufbqwnifaugffsai
+xfrmlrlrhxsownybek[ryhsyltyflhjbmltndc]agtvigglsugquzbc
+rshzvotgovlabfxr[sbuytwdobnvpwcax]bynmysulnnjmhkf
+cevbpuyyvlutjcuutl[pfwloktlqbxfcogrc]dflejqcyvpasjowhsj[nscuwnjsrzehqamogtw]scemydqevrcuvhwxpe
+nsbvubuyjrzsalkdwz[fooatkopdyvkxjgfho]jwojdgxqtlzxgna[vmkwusptfjbgmhq]xkzpfgkklnxunma
+jovdewpqyfouyzpegwg[eigxaawljopqauy]cjvieeexlyiovsugif[wtkkpylnxtqrepkjei]jrdmibhhcftoeauh
+flpwanunpldmcnated[unzsihvveyitclcf]gqxlznjbnpmiojuunu[kxihijtbrbyhkzosvk]xoxdqctctmroxoppilv[equfcbnltdiwdmahu]sxfloedvbznwctnuqt
+wtktlikeigdndpyw[dspimpajtzfzmfya]rmmuigyferofztnuir
+thnfrvngjhjrwdatdc[vwmnddbpbakuapirel]qojpomziuupsfysyfng[gkgjyjoovotmjwwgvrq]xxfsycfupudisdbtk[hnieklknhbwcfka]qbanhtkdijnnfegs
+mazcgrfwolhhbtman[jokgcthhpopluovccrg]eybriinzdwjyfjes
+kwxxubruqgrsifrpuxe[pqjcuxzpykriher]rcjvrturrhxqhjndj[umqwgmhgidzakfnk]nzbbrgxxsmkxahvqzs[rnqcmdjyrldnzrr]nhztvrovbpifyxbcvti
+kgojbczgybkjpoz[nyemqsvkokdfxiata]lrstpiuovispfmuoi[jifgmwihkzirfnblzqu]dixnvdkqejtatylghtd
+owhhzrmvmuosrtiwaf[xvdujvnkkrunymvh]dihbvchdelxcqsmlxe
+atcmrejivvyxxbsexp[cjlvkmfgfjslzeno]liavdjycjpirlux
+snvgwihgkhrsgdzysbh[bbyzthwnbpquvtrmlc]cdwvzdogbisfoopk
+lccrydahkgmzirmjzfv[rkkdtcqmlfkxmke]xkercumbulkzrlgxng[deksxliclevazssc]yhidzcmnbvgacmdv[ucxflzawmxnmpxa]hrfaesdlnukcblbqlm
+jdajqnzqyhcomekhejp[tyrtsgspmlmrbkm]nyfcgbagjplztrigokr[ntzzerjwsgafymxw]ftckmtirxfdfcqpi[pulepgarnqxbvlqmvog]qashqfzwglljzexbnsv
+kjvalulqegxybfhx[djfulullrbsebeknl]bcxpgathyauumxcrsmk
+fihxcyovovcmukir[gucbridfutpdnto]abzjiaponkgoposvhw[vpqwcnzmovnwdwwo]zrkqlpnszeioesnhk
+nyvobmkhkbenucug[dwpifbppiwftzokarg]vxxalauqmooacfmdox[intaxgcpfajzdwmcsk]brknzsnhuukxjuv[fkheyxevpuphuflvzkk]levqirhqhynkthsef
+uwdcywcarjujlnh[qvtowczbkenlghcmara]kfhcbnrkorcoyhkww[mzzwrpwwkrnnfavjxk]hcjjzxeynegdpfwdw
+xtgkbqtzbeptcxndjxl[jzmbcxsmcrtjtqi]wnhqmctldgxjbrtio[brnnosnckhalqzqsyyv]uhungebnygpsmpzmj
+xrqpqqsqazzlqcdglgf[ziiwwokpqiinmqe]stagyposntgyxnh[ubxzaskwfzlfrmw]fimsoerydnghxlg
+bdqtpixvllcdhgfqby[xurgfxznrblksso]wgfyjdmpjqirhiqvgg[pbgnckfbdinlepkb]mqbqboepuqheaop
+xxlhstlmqypoyhb[czlhqkifhucxqanafx]jkaaxiwxrnneudczrtn
+jhcmhtveqenmeczz[rcpnnuwvwiyfjxo]bvtashqfjcnbrqy[ebgihcdcimvgdwochq]pmallgnuofajusz
+ltzknsdqzdmbpxipt[golssizcvkrcmquotrj]nqjkcgdagjqzvri[xzehrntfgcnmgrh]devpsfftuonmevocw
+wgklxpmeoznyxtukh[nevjkmpvlbaulxjieh]wopqaknwlwjquxt[mxzczmngcaxharjipt]tuvwngrmylububv[ryewaqhshtogggdvc]xpkbqydbwshscjcw
+uglrhqngbxqtqmdlyym[ihdwlwfqiwnigvyarcw]miyynkctggbwzfkq[rqycaudamvwoxju]mmnzentjyyddntnpgxf[qjryduwnivawjepknli]toodveiqtzjxjvq
+tkgmnxgifkqzuut[csyogdborjrnygg]rpcbucosajyyyelju[bbujqtlveymlqesvg]wvyfimibeynzhsotymx[tqxldisulrhuckef]kgqjgtaluastnwev
+qifwiunabpnzezlmhh[ffwsncvlqpulttkx]wlwdpgntblnoubom[fksogvukjlzupwetlef]cfszpnemoifasqw[ttmonrrbhknspuqx]htucxamhxsoigvt
+putioshxpafnkcwdejm[dellcuoevwyyhvwurpv]zezpevhlmpzbevln[rigyoryyhoxwlbg]zkdzexpizgsumkuiuy[hycpaavxiqnlngrc]gknnfredhsmpofldn
+eknxasjdtsksamfc[dhtgifeezlgfhlyvfdz]xfttcwzqucrtngdpcmf
+uyiazdptoxzxbzo[bmuglholukatdbf]ascjhcllcatoapyvn[isqfrvbbkzsxixjuqrq]ncwzqqgudgwrtxvzfe[spqvftdlddlfglgg]zrqbukmufumytpc
+czefxpifdsqjjkoxgj[klwshjzagbrgtpiht]xofokkhzlnjplefofcj[xodekgjbgraikdley]dgsrqzqxjxjqftn
+ertbujoaanuvqskr[hsgeexqdgsqfkiunhpa]orgvxylmsdlzeyjzf[mdkgzwdnvtyoogulx]nbapgjckrfxeniiqotx
+wgywdqnvxooqjsefac[qgpmwggewotnmloq]bqdvbzpvqwadroh[bvbsnhmdurzcubvsno]ndwqyjenerqdupuob
+patbwuitsfeqvswby[htsntyfmofqldcbwgv]zolnndvkaimzdmevb[feyvwvkelmujnppg]tjajsdtevgjukkgrwr
+hoznvyznwitnxlvu[kigfxgwcrdmfwgsqnf]lhiqoaqezmswakdcd[gxmjrmvoxkdfmgcpqnn]ditkwvolcazfuxzfroy[qqlbrrwfedrgtrgm]iysjaakrbnqicefqxsr
+ufrkrtywkhfhfah[vufpfwhtxzbdqnraz]kklboeggazttzui
+tplrraxhaaaoczdpg[vzbnososnioajien]dvdckrkfdetoofpi[bywkgphzoglisygthku]gxtnstjmffnepin[evccrlnwjthfxhhqzc]lisguwkfwswblzc
+lyluhnglmfippljtwww[wnkwnwwsasqbrnlo]nilnannzjbpgbjs
+iknqwrvlcztavivxmh[vtfyhjzauqbyjchjt]zxmasnczpxlusknrmtf[yvfnxlrwgfxkdlj]otlivjvbvilezalha
+xbrzzccetyjzrlt[buwwhcatpcchdvhel]wosdwuuzpekifdhhvpy[twwoaezcowxvioqsrrd]uuygkhojhlcofza
+wqeintsbeqzjpuvx[wqlcamjmpbtqqzjcy]czhyqcurqkfnnkoltja[lozjcddygpevnxebmqd]avwqdpfxcrcvmalaczo
+aecvebozlythtcfzt[uisdkrrjeboxpuclbg]sjxcgygpeuirukx[zeoyaxgdyzfkprewiyc]rdlnzpbwgztivpdon[sfcqbpfgffkchksmfjp]yfgrlxiixyurxupuoij
+vnglyokdpxlgphpw[bjnaqkjojazyryswr]bekdduuwrqabarzwzh
+fcggyliuipcvnimphib[adkvjaembjcqbcc]envpiocijefswhv
+pgraswoweceiftu[khhpmbjghxgmhsud]axqjkekmecwunefk[pvelpeorryjcstk]lruensapttjtyxnr
+jomdrazkwryxuyc[qolcqhwdidalguboza]fcofbrgowezhbyqckrw[wurpvelnhdewfoita]swxwyfynaymvrhleuj[icdlergnbqmowlxjl]vxcwgvrvpdejoybt
+axbedlkxkmbvwacv[uabrmhoepcgtsdmjjzy]iqqpitszpejeeophjmv
+gmltcuvpeuofwteput[eyxdpnceufobjelir]hvajyjjzgkyrtgvrfs
+sfyyzksaymsvykmr[xjewfmfhhbrmwzf]cbzjmltnzvcodwtytbz[ewgckbdvfnkkyxyj]dfcrjyoakdyggbsxm
+wxjalqmicwmwkzakcy[mothnmmvgypeacecvz]hbjasxlsbbgxpfdptk
+qtsgwqpihqjgmjadkjz[skpdhegagxxbmayy]eaojrccgpxovqpi[ixyljrfgswullqnbzdz]etvomvkwpzpxxcj
+mbnifyngahvfhtfhql[azcbyxkvcnoatuo]scgddcntikvavaseu
+uciiofzqjkhndnzx[hoyxdxfahorycpfcofk]epeazzccheaegyobu[sculkaizijfqcrpjl]nrvfdtpvgoqioomvmv[axmvmzytxnbfcsjf]fccriiwmdaveeyamwp
+sxizvuhprsyyxgfqgqx[zwszjxransryibshzw]ikquiagnkoqexlsqypb[zpuqrhaqvkuvhiqk]pvuqiqxpjtsyqgcyr
+svjudmyxlshxbbvawl[inswkufalzfwoumcv]hrobewddabqsiuej[ulhptknpxcwqxjxanjd]osfyeygptwfjmvrma[pnuynwtwuulsizw]srhurplerqabvouelhn
+islwmbcjeljkceppiw[whvcrbqzgtcfbcuv]tcyzkgyzdaekgnzzmz[ddefwmnklcddlhow]npzbtwmzmhjtzljnr
+lgdjrkugqewlqxvn[wtvrzflzauwcxkyp]qbswluceqlesdfwy[kbtmzcvoubbiqfc]honrvxwcqsgphvkt[djuuancygxacmka]knseftjiunzuxdi
+miapzpluxnmdfvi[edlbwflzitzghywio]vizzhfxgilwpwhr[ochurvodstmhiypp]rycvogpcnysngytixb[mqnrhpbvojfefcicx]zxqxoinunlkjvetkvrv
+spsecopdywuheqbnm[npwovcwlwooxqhyp]hkuizzsdvysvhvmlc
+oqchahhsrywoeteaeg[ucowjiwrzkfhyebbco]efxdrribepcvduwjgf[nvyogembujkkmcm]kmfrlcaeawrvofxrim[izjebqewubrbvguzk]ngmugyprdvrbqskn
+vwlikshqcpgxqvqshv[izqveivxdxgytqgdk]abnvmprwbvwmrwlkkp[iffpegqsxjwfyvixtwk]iseiapjkgnkcepr[gtfhysdedzxwrhcgt]ktaeihyqegeozdfuz
+aieqqwhwfwxpldni[huyxdcvpglqqkeyeia]teztoyeycqohfli[uqvfjzbsvttphqxsy]afsxoqbqvtxtgriuzjm[psumrbbtxdxlwpk]qwpuwevhjellemzp
+surpbndlvplunisu[alnojwsmgbtaomke]zjyikoebzazpwql[lkgsnxodocsrniokroa]mrcipdncevvazafvkb
+dkszjaqhbkyxwvwj[wykmzcvppharrax]pvrqzqhabqtuhrj[qfxnormttaxsldn]kxjwkrjwvbiutgnfnw[mbspfflblosguqzt]nifozavfsfkngds
+uwafdvptgkfikprb[xhmrwxqxnbkfpdz]efhnfwvovbvglrrt
+kozevksryerpsrgmub[dbtinyialvlkgilue]pyqdyodlttsnrsmfvca
+mgfmdcxibcgzhrfmm[mzvyabccrdzlaiij]arnetejwseofkwqvxi[fylixbrjhxdfhiewbnb]wvndnswxdnbcktp[tetomqdkfmcndddruy]biuxgrvctlbbrqmxjp
+snjnfgbtgpkouxlpd[vapbqurlxyrduxqy]meyhgdsbvkdadsfozf
+fgknedldithvaoxqpl[mihhhdrtpjmoridqamt]vfupazymsipoana[ngqkziyavxkyukp]qqysmfkyaxbuytr
+fugbgojgdeavlmrut[zpukymkjkapibmhg]mmdesmcwbhlfugkdiz
+lhhhlyioiiknkray[omilmxkodlmvzhkgbaf]cyftkgjpvjvdnortlj[ifljdtkgscmnmxsq]nxtettqnuaotfsh
+whayrxopbtvnpobokn[jfbobalkbfjxcsn]jjucgwedwbcfrdginaf[atdoatealbqhiks]alzapbxuvmivqfgpg[qhzdwsbvcbtlpchem]pxxskedydgisthkatn
+xzreuonsdqobzpxr[zamxighfvnaxqum]olbigclentyvugtuvg[ysrgcksohtkvcqmksqr]gnaqqezdmnfbbnir
+gmmabzkwsehkwjnevvd[uuzdntitdazeykwek]aebpajrwpyknqgx[kczhcuveeawmdiwljzl]ugwigmilwkczrcqnfo[piezzmfwnfdhnlbranp]qhremthdwdegacvptfe
+tcqhlxasqmbwzuiuirp[kfqoequocdsfwqt]ikhdkpkmeezfzfyyilf[lrorfowgsqkflwauhu]zshoiccvfwohudsmdcr[zohspdmqcdvgagdknr]zabaqgsmrwkrtcuyct
+fzanofpykognmio[ladtxyissyfrssobo]xqpwrgdmglgqhwawqok
+hynipihszohrqwaezga[iqtpgjpngbwhpailzg]wfgimkpjrjnkroueh
+lpmrkesaqdojkqrp[dcgsayoowgpiwam]arphrffqpcdntlxsza[ogneaqyckrvdcvqxbm]xlogrojsovrzfzjtjbd[qjoiyyatxkwsrvldp]gffgmieinxlfzpiej
+jaeayfunulncspts[stghconfjhkqkrxncwi]kcnaqhyukuirsaeebp[vynwfnoxxxbqztj]gddvegwjuryfnkgkpqq[jnhmbdpvsxreqhoek]pgpikslhvbnmbxbkbc
+lajiqiaxcxgpvsbu[bfetstragmoosbw]hzurjpxhecnadwosn[dquibbrojgurqiqd]aceccsnyrnfmcsd[quqxmzleqvspvsemjpn]noxrndgdrkffsdvh
+bytcvwxuavajevmde[nhmjatzolmbdfgogup]qpildujniqlnfbmuf[gxpgorlbxpqfsoreuey]hcfyjmkoywueuivrio
+amvudustnspjqsbpjp[wdudhbvvlgzbbbwlafg]kwpyjvuerzyzmzft
+vwpklmfpzssyoifbb[bwtpxodxedpdsvgu]azathmhdnqkhbmrdlxn
+iwzncixpjxypnmykke[wlhvfjbumhmtachoab]wtftbolwhpwnropnzv[zhfcmkbwizknymev]twrumqadwvsaciwbwoi[evodjtvrucrzgtwio]fmmbddkwwpaziycik
+dkodbaotlfdaphwzbcc[ldzeemqiovyqjgs]qxibabdusgaistkru[usglloxgycyynmp]aaocvclsocababbzxeg[liaacgfxytuqudp]jvvqsypuoduyhvraak
+bwzsacxgqkbjycgfw[dbnligvrmqscasutn]rbgybqqsgjvlonkut
diff --git a/2016/aoc7/src/main.rs b/2016/aoc7/src/main.rs
new file mode 100644
index 0000000..254f23d
--- /dev/null
+++ b/2016/aoc7/src/main.rs
@@ -0,0 +1,95 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+fn main() {
+ let lines = read_file();
+ let mut ssl_count = 0;
+ for line in lines {
+ let mut in_squares = false;
+ let mut char_buffer = [' '; 3];
+
+ let mut abas = Vec::new();
+ let mut babs = Vec::new();
+
+ let mut chars = line.chars();
+ char_buffer[0] = chars.next().unwrap();
+ char_buffer[1] = chars.next().unwrap();
+ char_buffer[2] = chars.next().unwrap();
+ if is_aba(char_buffer) {
+ if in_squares {
+ babs.push(char_buffer);
+ } else {
+ abas.push(char_buffer);
+ }
+ }
+
+ for c in chars {
+ match c {
+ '[' => {in_squares = true;},
+ ']' => {in_squares = false;},
+ _ => {}
+ }
+ char_buffer[0] = char_buffer[1];
+ char_buffer[1] = char_buffer[2];
+ char_buffer[2] = c;
+
+ if is_aba(char_buffer) {
+ if in_squares {
+ babs.push(char_buffer);
+ } else {
+ abas.push(char_buffer);
+ }
+ }
+ }
+
+ //println!("ABA {:?}", abas);
+ //println!("BAB {:?}", babs);
+
+ let mut is_ssl = false;
+ for aba in &abas {
+ for bab in &babs {
+ is_ssl = is_ssl || correspond(aba.clone(), bab.clone());
+ }
+ }
+
+ //println!("Is SSL? {}", is_ssl);
+
+ if is_ssl {
+ ssl_count += 1;
+ }
+ }
+ println!("SSL_count: {}", ssl_count);
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
+
+fn is_abba(char_buffer: [char; 4]) -> bool {
+ char_buffer[0] != char_buffer[1] &&
+ char_buffer[0] == char_buffer[3] &&
+ char_buffer[1] == char_buffer[2] &&
+ char_buffer[0] != ']' &&
+ char_buffer[1] != ']' &&
+ char_buffer[0] != '[' &&
+ char_buffer[1] != '['
+}
+
+fn is_aba(char_buffer: [char; 3]) -> bool {
+ char_buffer[0] != char_buffer[1] &&
+ char_buffer[0] == char_buffer[2] &&
+ char_buffer[0] != ']' &&
+ char_buffer[1] != ']' &&
+ char_buffer[0] != '[' &&
+ char_buffer[1] != '['
+}
+
+fn correspond(aba: [char; 3], bab: [char; 3]) -> bool {
+ //assumes both follow the aba pattern, so [0] == [2]
+ aba[0] == bab[1] && aba[1] == bab[0]
+}
diff --git a/2016/aoc7/test_input.txt b/2016/aoc7/test_input.txt
new file mode 100644
index 0000000..a675097
--- /dev/null
+++ b/2016/aoc7/test_input.txt
@@ -0,0 +1,4 @@
+aba[bab]xyz
+xyx[xyx]xyx
+aaa[kek]eke
+zazbz[bzb]cdb
diff --git a/2016/aoc8/Cargo.lock b/2016/aoc8/Cargo.lock
new file mode 100644
index 0000000..dd33856
--- /dev/null
+++ b/2016/aoc8/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc8"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc8/Cargo.toml b/2016/aoc8/Cargo.toml
new file mode 100644
index 0000000..c49deb6
--- /dev/null
+++ b/2016/aoc8/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc8"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc8/input.txt b/2016/aoc8/input.txt
new file mode 100644
index 0000000..d827762
--- /dev/null
+++ b/2016/aoc8/input.txt
@@ -0,0 +1,194 @@
+rect 1x1
+rotate row y=0 by 7
+rect 1x1
+rotate row y=0 by 5
+rect 1x1
+rotate row y=0 by 5
+rect 1x1
+rotate row y=0 by 2
+rect 1x1
+rotate row y=0 by 3
+rect 1x1
+rotate row y=0 by 5
+rect 1x1
+rotate row y=0 by 3
+rect 1x1
+rotate row y=0 by 2
+rect 1x1
+rotate row y=0 by 3
+rect 2x1
+rotate row y=0 by 7
+rect 6x1
+rotate row y=0 by 3
+rect 2x1
+rotate row y=0 by 2
+rect 1x2
+rotate row y=1 by 10
+rotate row y=0 by 3
+rotate column x=0 by 1
+rect 2x1
+rotate column x=20 by 1
+rotate column x=15 by 1
+rotate column x=5 by 1
+rotate row y=1 by 5
+rotate row y=0 by 2
+rect 1x2
+rotate row y=0 by 5
+rotate column x=0 by 1
+rect 4x1
+rotate row y=2 by 15
+rotate row y=0 by 5
+rotate column x=0 by 1
+rect 4x1
+rotate row y=2 by 5
+rotate row y=0 by 5
+rotate column x=0 by 1
+rect 4x1
+rotate row y=2 by 10
+rotate row y=0 by 10
+rotate column x=8 by 1
+rotate column x=5 by 1
+rotate column x=0 by 1
+rect 9x1
+rotate column x=27 by 1
+rotate row y=0 by 5
+rotate column x=0 by 1
+rect 4x1
+rotate column x=42 by 1
+rotate column x=40 by 1
+rotate column x=22 by 1
+rotate column x=17 by 1
+rotate column x=12 by 1
+rotate column x=7 by 1
+rotate column x=2 by 1
+rotate row y=3 by 10
+rotate row y=2 by 5
+rotate row y=1 by 3
+rotate row y=0 by 10
+rect 1x4
+rotate column x=37 by 2
+rotate row y=3 by 18
+rotate row y=2 by 30
+rotate row y=1 by 7
+rotate row y=0 by 2
+rotate column x=13 by 3
+rotate column x=12 by 1
+rotate column x=10 by 1
+rotate column x=7 by 1
+rotate column x=6 by 3
+rotate column x=5 by 1
+rotate column x=3 by 3
+rotate column x=2 by 1
+rotate column x=0 by 1
+rect 14x1
+rotate column x=38 by 3
+rotate row y=3 by 12
+rotate row y=2 by 10
+rotate row y=0 by 10
+rotate column x=7 by 1
+rotate column x=5 by 1
+rotate column x=2 by 1
+rotate column x=0 by 1
+rect 9x1
+rotate row y=4 by 20
+rotate row y=3 by 25
+rotate row y=2 by 10
+rotate row y=0 by 15
+rotate column x=12 by 1
+rotate column x=10 by 1
+rotate column x=8 by 3
+rotate column x=7 by 1
+rotate column x=5 by 1
+rotate column x=3 by 3
+rotate column x=2 by 1
+rotate column x=0 by 1
+rect 14x1
+rotate column x=34 by 1
+rotate row y=1 by 45
+rotate column x=47 by 1
+rotate column x=42 by 1
+rotate column x=19 by 1
+rotate column x=9 by 2
+rotate row y=4 by 7
+rotate row y=3 by 20
+rotate row y=0 by 7
+rotate column x=5 by 1
+rotate column x=3 by 1
+rotate column x=2 by 1
+rotate column x=0 by 1
+rect 6x1
+rotate row y=4 by 8
+rotate row y=3 by 5
+rotate row y=1 by 5
+rotate column x=5 by 1
+rotate column x=4 by 1
+rotate column x=3 by 2
+rotate column x=2 by 1
+rotate column x=1 by 3
+rotate column x=0 by 1
+rect 6x1
+rotate column x=36 by 3
+rotate column x=25 by 3
+rotate column x=18 by 3
+rotate column x=11 by 3
+rotate column x=3 by 4
+rotate row y=4 by 5
+rotate row y=3 by 5
+rotate row y=2 by 8
+rotate row y=1 by 8
+rotate row y=0 by 3
+rotate column x=3 by 4
+rotate column x=0 by 4
+rect 4x4
+rotate row y=4 by 10
+rotate row y=3 by 20
+rotate row y=1 by 10
+rotate row y=0 by 10
+rotate column x=8 by 1
+rotate column x=7 by 1
+rotate column x=6 by 1
+rotate column x=5 by 1
+rotate column x=3 by 1
+rotate column x=2 by 1
+rotate column x=1 by 1
+rotate column x=0 by 1
+rect 9x1
+rotate row y=0 by 40
+rotate column x=44 by 1
+rotate column x=35 by 5
+rotate column x=18 by 5
+rotate column x=15 by 3
+rotate column x=10 by 5
+rotate row y=5 by 15
+rotate row y=4 by 10
+rotate row y=3 by 40
+rotate row y=2 by 20
+rotate row y=1 by 45
+rotate row y=0 by 35
+rotate column x=48 by 1
+rotate column x=47 by 5
+rotate column x=46 by 5
+rotate column x=45 by 1
+rotate column x=43 by 1
+rotate column x=40 by 1
+rotate column x=38 by 2
+rotate column x=37 by 3
+rotate column x=36 by 2
+rotate column x=32 by 2
+rotate column x=31 by 2
+rotate column x=28 by 1
+rotate column x=23 by 3
+rotate column x=22 by 3
+rotate column x=21 by 5
+rotate column x=20 by 1
+rotate column x=18 by 1
+rotate column x=17 by 3
+rotate column x=13 by 1
+rotate column x=10 by 1
+rotate column x=8 by 1
+rotate column x=7 by 5
+rotate column x=6 by 5
+rotate column x=5 by 1
+rotate column x=3 by 5
+rotate column x=2 by 5
+rotate column x=1 by 5
diff --git a/2016/aoc8/src/main.rs b/2016/aoc8/src/main.rs
new file mode 100644
index 0000000..cb783ae
--- /dev/null
+++ b/2016/aoc8/src/main.rs
@@ -0,0 +1,117 @@
+extern crate regex;
+use regex::Regex;
+
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+
+struct Screen {
+ data: [[bool; 6]; 50]
+}
+
+impl Screen {
+ fn new() -> Screen {
+ Screen {
+ data: [[false; 6]; 50]
+ }
+ }
+
+ fn rect(&mut self, a: usize, b: usize) {
+ for x in 0..a {
+ for y in 0..b {
+ self.data[x][y] = true;
+ }
+ }
+ }
+
+ fn rotate_row(&mut self, y: usize, b: usize) {
+ let mut row_copy = [false; 50];
+ for x in 0..50 {
+ row_copy[x] = self.data[x][y];
+ }
+ for x in 0..50 {
+ self.data[x][y] = row_copy[(x+50-b)%50];
+ }
+ }
+
+ fn rotate_col(&mut self, x: usize, b: usize) {
+ let mut col_copy = [false; 6];
+ for y in 0..6 {
+ col_copy[y] = self.data[x][y];
+ }
+ for y in 0..6 {
+ self.data[x][y] = col_copy[(y+6-b)%6];
+ }
+ }
+
+ fn print(&self) {
+ for y in 0..6 {
+ for x in 0..50 {
+ print!("{}", if self.data[x][y] {'#'} else {'.'});
+ }
+ println!("");
+ }
+ }
+
+ fn count_on(&self) -> u32 {
+ let mut count = 0;
+ for y in 0..6 {
+ for x in 0..50 {
+ if self.data[x][y] {
+ count += 1;
+ }
+ }
+ }
+ count
+ }
+}
+
+
+fn main() {
+ let lines = read_file();
+ let mut screen = Screen::new();
+ for line in lines {
+ if line.starts_with("rect") {
+ //rect 3x4
+ let re = Regex::new(r"rect (\d+)x(\d+)").unwrap();
+ let cap = re.captures(line.as_ref()).unwrap();
+ println!("{} parsed as RECT. A={}, B={}",
+ line,
+ cap.at(1).unwrap_or(""), cap.at(2).unwrap_or(""));
+ screen.rect(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap());
+
+ }
+ else if line.starts_with("rotate row") {
+ //rotate row y=0 by 4
+ let re = Regex::new(r"rotate row y=(\d+) by (\d+)").unwrap();
+ let cap = re.captures(line.as_ref()).unwrap();
+ println!("{} parsed as ROTATE ROW. A={}, B={}",
+ line,
+ cap.at(1).unwrap_or(""), cap.at(2).unwrap_or(""));
+ screen.rotate_row(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap());
+ }
+ else if line.starts_with("rotate column") {
+ //rotate column x=1 by 1
+ let re = Regex::new(r"rotate column x=(\d+) by (\d+)").unwrap();
+ let cap = re.captures(line.as_ref()).unwrap();
+ println!("{} parsed as ROTATE COLUMN. A={}, B={}",
+ line,
+ cap.at(1).unwrap_or(""), cap.at(2).unwrap_or(""));
+ screen.rotate_col(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap());
+
+ }
+
+ screen.print();
+ }
+
+ println!("On: {}", screen.count_on());
+}
+
+fn read_file() -> Vec<String> {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .collect()
+}
diff --git a/2016/aoc9/Cargo.lock b/2016/aoc9/Cargo.lock
new file mode 100644
index 0000000..00bd2f7
--- /dev/null
+++ b/2016/aoc9/Cargo.lock
@@ -0,0 +1,98 @@
+[root]
+name = "aoc9"
+version = "0.1.0"
+dependencies = [
+ "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "memchr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex"
+version = "0.1.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "thread-id"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "utf8-ranges"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70"
+"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"
+"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"
+"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"
+"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"
+"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"
+"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
diff --git a/2016/aoc9/Cargo.toml b/2016/aoc9/Cargo.toml
new file mode 100644
index 0000000..de293f1
--- /dev/null
+++ b/2016/aoc9/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "aoc9"
+version = "0.1.0"
+authors = ["Justin Worthe <justin.worthe@entelect.co.za>"]
+
+[dependencies]
+regex = "0.1" \ No newline at end of file
diff --git a/2016/aoc9/input.txt b/2016/aoc9/input.txt
new file mode 100644
index 0000000..6692559
--- /dev/null
+++ b/2016/aoc9/input.txt
@@ -0,0 +1 @@
+(6x6)AFPLBX(2x3)ZE(53x13)(4x7)ZGQO(2x4)NJ(1x8)M(24x11)(18x7)HMLOASMJNGZHMCEVEX(11x2)(6x6)TRDPQX(157x12)(60x12)(2x3)SB(7x1)FBSAUFK(4x1)NMZK(10x2)RLIIHFEKRY(10x6)GMDUIQDOZJ(71x8)(1x11)N(19x5)EHNAZSRTFYXOZNFTOOQ(6x4)XKARLK(13x1)IRATYZQMJXHAH(4x8)VFUJ(8x6)AOOEHHBF(27x6)(11x9)(5x15)KTTHB(5x6)AELEZ(17x10)AOGNMNTGDJDYEMMEH(7x8)BOIOHRF(6x2)ZKXONV(172x8)(6x5)(1x8)V(17x6)WEVFHKUDETBOZVKIO(2x14)ZI(75x9)(5x5)EXKDZ(4x4)BOGK(10x5)SXYSSOACJR(3x15)FHO(24x10)YBZPMZIPUCEIYNGYAUPVFOKB(43x3)(13x2)MERJWKSXBIEKP(2x4)CR(4x5)DFDQ(2x15)ZM(89x5)(43x6)(16x8)RIGCVPPOSBRJSJCB(2x9)XI(1x11)M(2x8)QT(8x6)(3x8)XVC(20x15)SBWQFWQWPQHXZXDWSXIR(4393x15)(25x5)TEAACSAHWYWPYJZEPDIHUMIPB(1026x1)(1x7)K(768x7)(388x3)(113x9)(70x11)(12x10)HDEPKSMDLHAX(2x5)RU(29x13)BIOENKVYNENIFNCSWNZIJGCZXBUVF(3x1)JRO(30x2)(11x9)NCTAXULXPBY(1x5)K(2x7)WQ(76x10)(13x7)UDCLRUKNLOAEL(17x10)(11x8)TLRICJOXJPO(26x13)HBPYKHNJRGJHSXUFGJAAHODUDG(177x13)(58x14)(17x15)MWIVHZEKJKLDWPYEN(7x5)MLNEAXO(1x2)F(10x2)GMUPKWMFFU(51x13)(2x12)TG(29x1)CJZOBLWTYDISRYKVWHJKRDDNHSABE(3x5)VDV(36x7)(7x2)JOQSKQM(10x4)SSQKRCQCYQ(3x3)HRU(7x6)(2x7)CG(271x13)(14x12)TPDOYGCYWKAOQU(223x5)(15x1)WKAGRMIPECLUUPH(68x2)(10x15)VRFPOQRGAW(5x6)MEVXZ(11x13)INACCUVBTIP(1x12)M(10x5)ECIALUKBGQ(29x5)LDVPFVNKSBWVZCJUOLIJZHYNOXLHZ(42x9)(11x14)HKDQCRYGEWD(3x5)DDV(10x8)KRRTDJEMKB(39x8)(13x8)IWLYAVYPLTFBF(14x8)PMPTEZESXEQSYM(13x12)SYBXETSKQLUYU(12x5)(7x3)(2x4)FH(69x10)(63x7)(6x4)RVKPXJ(46x1)(19x14)YCVJOBRSCSVKJJWUBJI(4x6)VUOI(5x15)WIFPK(237x15)(230x7)(51x15)(45x5)(9x11)BUZLRCBIY(2x5)ZZ(8x6)DNEOUHUT(5x2)QFOTV(164x11)(30x14)YOCHTVEXSZYELWOMGCXOISALUWCWTJ(8x15)QIINZKAI(1x1)F(88x5)(8x1)SIZRWUDB(49x7)AWSFCZFEGKBUKONNMQQSIGHMKQFAMUEBLTQFGEZLMUTNWXOCH(1x12)T(8x7)ZOTXRWXA(7x15)HGGWNTM(1484x6)(691x6)(53x6)(2x14)IB(39x3)ASFVSLNNXYBFSSOPECXZOEVPRIGJCTMLWCFSVTZ(72x4)(66x1)(38x7)(17x7)DXTENHWTOXYZMQFLF(2x2)OG(3x6)ATG(16x1)IBSUFIGHTLDMGRZE(9x5)DKNZYEYGJ(288x11)(165x9)(16x4)MDBGELYWXPUTRCEZ(14x14)PHSIPUMMXOMBWF(57x9)(13x13)WIVFVHXPHBTWO(4x6)XSWT(9x5)CPSCDHORP(1x2)M(3x8)JJE(12x4)ZADOSQULBZRT(34x10)EUJRPXWESNMXYDAUHFPLCLOYZCUKOSDPTZ(108x12)(10x13)CJVGTNJFUE(37x10)LDQKJRVQQKTVRBMNRIFDMZBJOQZKJSBZPWWLQ(24x5)FXOCHIJNODJUEGYPZYTIADPF(11x4)FUNCENOZTTS(237x7)(106x6)(9x6)SBSWNIMDC(58x11)(6x8)VJZVTK(5x2)QRAXJ(3x2)KAC(9x11)EWJHYTQXW(9x2)TSWWFYDYC(21x2)EXPZWOLLWOALTQGUZXTUS(117x2)(6x8)TLGPET(3x7)GBW(39x6)(32x10)VGSULYHYHHFVDEIQYAXVUGNDVDCDGANM(46x13)(14x6)VYXTECTXLBJFWZ(12x6)IFRBYZIXFTOC(2x14)HF(14x7)(8x10)AFPWFLXJ(726x6)(160x5)(45x13)(1x4)K(8x2)(2x14)WF(19x11)EDIZTWWQBGFLFXEWHFA(17x10)WIGPDKRTBSOJTFXKY(15x2)ADLZSCNVATBMRBV(34x12)IVGRGESBMMRDBWKCIDCLYWVXANHCWQQEQL(15x12)WGFAYDKOFYOZWHU(464x6)(42x14)(35x12)(5x12)TVUTT(2x13)RK(2x10)RC(3x1)LXD(20x1)(14x6)OJOAQUIEOIUVXE(152x6)(16x1)IIDXUSCZEOEHDVIP(98x6)(18x4)AFGQQZEGERPRXYXDTI(15x13)UPZDHXFYQRGBNBZ(45x10)GEJVEKLGJBCATXONOSOJWLLZESRRGSLNTRDKDKJKNAOYC(20x4)SHUJGLTDVLVMUBGUYCCQ(202x2)(29x4)(23x9)ZNKNMTBUBYEMBVCDGNHMZRB(123x6)(8x8)QCPLTVYD(2x5)YQ(13x3)XFKTLSHCQAPID(30x1)DRTIAMQDRSIQQIZKAXMVZDLCRHYVWS(41x11)SLVGMXLAUIETLVILQABUODBTBFZZHOSFRUJKLQPSE(21x8)(4x9)EXQY(6x13)QAFDCI(4x10)XYII(15x5)VZTRXIMIYNGDQKZ(75x4)(6x11)RFOKPH(2x15)ZH(10x15)ZDWQPCMXCQ(32x7)DJRJDFDSGKZBQZMNIKCOLHWSLYCQXEKH(1x14)H(27x2)(21x3)GCUQEXKSVPNXNOTUOZBWR(1828x7)(1107x13)(550x1)(177x11)(30x15)(1x13)T(3x1)MTN(9x14)EDQQAMGTE(39x4)(14x2)NPINNXFQEZICDQ(13x3)QYHEGLYNFPMMQ(88x13)(22x13)GLVPCEBDDABCPDHXXXZDTT(1x3)A(1x3)J(40x14)LPRDKSIGCUXWPZIPZKUGMNGLLGQHFDNXLHRNVPEM(14x7)TPYKUDKFRLVPPF(135x10)(10x7)GWRRITBPFN(5x5)ECPKJ(50x6)(4x10)DORU(1x12)S(9x3)YQFICKCXH(7x3)ZJFMLPD(2x9)HK(3x7)HWQ(39x6)NPYOZFXSQJMVHMGSMHMKBOQLXAUVSZZRUGFOIUL(122x13)(7x5)WQPCNYP(35x14)(21x4)UIBUUSAWFXCJOAAOQYWKD(3x3)VKI(17x11)YCWPDYLDDKIDATXKY(38x4)(4x2)FPPY(16x8)ETEICDHDZBPINNTA(2x4)RR(66x3)(59x15)(9x10)WLRKNQFPX(4x3)OCJF(8x1)QSOOLMPP(4x6)DKRV(8x5)PBRRNJTD(377x10)(88x7)(81x11)(17x8)RPFNVFZNWFZCEDXYR(3x3)DMM(6x1)ZOBJHV(1x10)S(26x3)MLOILGCEQPKNQPYBABPWRMGTCU(13x2)KNRNZAANDYZVG(2x15)UR(1x5)Y(242x12)(144x11)(8x6)HUOOXYEN(35x2)HGPTAFHSMKKPDMGARWVNYVCJWMZETRIJNXM(4x4)TJDP(28x5)UKOZMKRXJLSBZJRRVABSWSIEIDMC(40x14)HCTILCVYQXWNUZHZAZGCXKXRZDHFNTKISPMUOLAD(8x6)(3x9)NXB(44x15)(3x13)GZF(9x7)XCHQMMOXC(2x8)EO(8x12)GTHAWKXZ(3x4)TFJ(12x7)JOAKSXHVNNNX(157x14)(150x8)(11x13)(5x15)GVWWA(125x1)(14x12)OALPJNHTLRQGRJ(24x15)EEWRKUJFKQFVCFVVGRNXRNMO(23x12)SWMZOIWGOVLKIRKBHSIAYFY(16x6)VQBYRVNJQKQZUXYC(15x8)SRQFUMLAWWDVVCY(166x3)(8x4)ROOZHNPS(1x5)G(140x3)(5x11)NNJCA(122x8)(12x10)ACNODOEIPNFS(36x7)(2x3)HI(9x12)WVTUTLVXH(1x14)L(1x11)R(28x13)TFKQTKVMFXBNHUCUGXXBKSPBSYOI(2x8)RL(13x5)(8x5)BMGHNIWS(80x2)(4x5)CLIN(64x13)(12x7)PUIYXOSOYXRH(23x9)(1x14)J(1x10)L(3x12)BRJ(11x3)(5x12)LIYCT(446x9)(1x14)A(128x1)(86x9)(15x1)XKXMQLFUXTGSIUI(36x8)UUZAZBICEWZOHBKMLKFMOPRGDNIIXYZIRYBO(16x10)(3x1)DCZ(2x10)RG(15x1)TVCSLSBSQOEZORE(9x12)(4x5)FOWX(67x7)(27x3)(20x11)QHEAAUEGZRHVTYXMHWGD(27x14)(1x6)C(14x15)EHUGFRTEFCLPYB(223x13)(192x1)(27x13)(8x1)ECDZKCJY(8x12)HNTSWDYP(14x1)SMPGAHCDMTHRPF(43x6)(2x9)QY(3x1)NGD(7x11)QBFWGLX(3x4)JCI(1x10)L(31x2)(3x10)NIH(16x2)SFTKKDPDSTPUVOQA(46x3)(1x11)N(19x13)RGTNKUTACWUHOBKHPAF(2x9)JH(1x5)D(18x5)ELEQYVKHCZWCPDKGET(4430x14)(6x6)SGLJXG(1303x14)(8x3)PBGTOJDF(472x9)(1x14)U(299x2)(71x12)(2x14)UZ(13x11)(7x13)OYMYFOR(22x12)MLXGMMRGPSASXFVDRWWYGU(9x5)(3x14)NFY(96x1)(22x8)XALEFGLORBLTMHIWSARRDS(24x12)(17x14)QARJVLVCJVIJEJOLE(8x13)(3x8)HPO(16x14)UMCNXKMHFCKLLSTQ(96x11)(3x8)IYF(82x5)(3x1)OBQ(30x14)UJYENTNVNGKUFYSGTPROKDUVXVAAAP(18x14)OFJNLBOUNGILMQMTBO(7x2)UJJJZAX(3x2)JTL(2x10)YM(112x1)(83x7)(50x6)(4x11)TSPK(2x2)AU(6x15)XSSYWL(3x12)DCS(6x13)OIDFMJ(1x14)N(13x12)EEZZPERSDPKOT(17x7)SBEJBRDQAVFLLCNUW(3x11)ZGN(25x3)(18x15)CSVBGEAPPCXHRXBYIK(1x4)M(664x4)(337x14)(99x5)(12x11)QQXQUTFBUNIV(7x7)ALTZFYQ(15x4)VBFROTJMHRPGBJW(40x12)(23x8)UTBYEFQMPFIEXVVLZXVDWWJ(6x2)BMJTZF(4x3)NRUY(6x12)TKXPAM(62x6)(3x15)RQS(1x5)K(41x8)(12x9)NJRYDQRLHCNB(17x7)AEPPXIYSGQCVSPVMF(135x14)(72x7)(2x9)FB(4x10)OGAV(26x6)QXHCWFQUDQKXVJJGIZDZLTBIKY(3x10)CXD(9x5)IDBZUGYPE(14x2)KYYCJLAYHWQQVD(30x13)(7x11)YXUUJZQ(11x3)YRHZXTLPZJF(311x14)(49x6)(42x12)BLCUHNHXNFKMUKOHBMVPXMURVUESFYMANQKXIQEVOG(79x1)(73x8)(5x3)JGNSI(20x11)DVUPOLXLRCUFVJYHXWJV(15x2)OPIKHDJPHQPXYYX(9x10)FWYSCUOMU(164x1)(91x13)(6x13)UPDAGP(14x5)LIKFHUVDMDQAAK(31x13)FEJFKXKSSAJYNJAKXKRQPUZMHNTBTGI(7x7)OLHMUKA(4x7)EGNE(59x12)(4x7)JSRJ(4x7)JCES(15x6)QTFXSXGYBARIWUP(8x6)LQDBINXU(1x12)H(127x1)(12x5)RHGPFMZRPSFB(4x11)URMZ(93x2)(87x7)(75x9)(11x14)NXGIGQVUUMV(1x6)N(38x3)IUHTFEASJJFMMTHJFEQAAYMSIUUGNMTUUQSOCN(2x7)CN(1x8)B(894x11)(876x12)(587x11)(2x10)BQ(178x12)(96x3)(14x14)BLIWCROJXSLVTK(8x15)KIYKJSRQ(54x15)KTAQJDJHFWAVGGYOZUWYLIBCBQIXHICNALPOGMROGJLDFEAYDTVTNR(2x6)NS(11x1)JKXMXJTBIDP(29x4)(7x13)EBVJEZD(10x3)XRDYMAZSBY(10x10)OIRMTHQLNG(132x2)(31x11)YAGJSHBUQNJREUVAPLXJGSPVFNQVGBD(54x12)(1x12)Y(5x6)UPPMP(9x7)HAVOGCOLF(10x6)TUKIFLCHLV(2x1)YJ(2x11)JJ(19x9)(1x5)M(8x4)UEZWDQZC(45x4)(39x9)(6x9)UWXBMZ(2x12)JJ(3x2)KDB(7x7)FLZMQSC(196x9)(26x7)YUUQIHKCXYRRGSMXGLWMSSAIAP(1x2)W(3x5)XGY(115x5)(8x13)YUGCSANY(10x12)ZVBPLBCJQK(9x7)RGODHRSNC(54x13)KFVTGSWIAKERKDISXRYZDZJEPXSKGAVZKGIKWRSSOTYSYRPEBHOWRC(4x5)PSBS(21x10)(5x7)PKBSK(6x1)CISVQM(241x6)(39x5)(32x14)XIRRYTZBERAKPMGIMOLYNEODGWELVAJP(113x15)(5x10)USAHI(2x13)ZP(88x4)(12x9)WBDEFGCZAMPM(8x11)DZMSAIVZ(3x15)XCK(23x5)LUKNXCCEPEPKSODMGEZJDYY(11x12)CJTACNNPKPZ(61x12)(3x7)YRN(30x7)GCJRMCZOJFMKFZJAJTZOMYXNWIFVSE(11x3)(5x13)BZFIF(2x2)GO(2x15)EM(18x10)YIGMSZEGBPPIMGKUHO(4x14)FUKK(1851x10)(164x11)(117x3)(109x10)(56x15)(3x13)MSN(11x15)VPUOKCEWGFX(7x7)UKXWCWX(2x11)QB(3x13)QFE(12x13)(7x1)WTMANLW(21x5)SDTRPSRMRYUZKIZIMCYLO(33x11)(16x4)(4x8)ASQN(1x10)M(6x1)(1x5)F(1006x3)(21x13)(15x4)WHEZYMBJXTBYCZG(462x9)(227x1)(33x11)(2x10)VR(11x8)PLIFVKRPUWO(3x1)WFI(53x4)(5x11)GUHAR(9x6)OTBCHHMTJ(4x7)JJQH(5x8)TTUUW(4x6)GRAX(1x10)I(27x14)(12x9)TPXYVLAYHHUB(4x3)WNYV(81x3)(20x3)YXDCPPYIDNNAQJMWXFFM(5x8)FZLRN(5x7)BKMSG(12x4)ZVRYPOOSYOMA(11x3)UGUWOKXVITR(220x15)(8x7)IRFZJLCM(34x4)(8x7)KIQHQWLZ(8x1)RTGQVPLE(3x8)RVU(60x14)(3x12)UJP(8x14)NYDICRGG(23x8)CHISDWBISOZYDWRNEBRWDSJ(3x6)EJG(14x12)PIWNBDAEREATVW(73x9)(14x3)IEPNRGKUCCEERW(4x7)FCWC(3x14)EXU(29x1)CDLSEHSCOEUZKWARMGBPXCHYMVQFP(188x3)(7x6)YNYVYUC(43x10)(15x11)YHQHLIEPOVAHHJQ(15x1)(2x12)EC(2x5)KR(113x1)(8x8)ZJHMLYAU(74x12)(5x3)CQZMJ(4x2)QGWN(3x9)LAE(7x1)OCFJMDJ(29x8)FIWUGBREHYRACQYOVVQJBDFHDGMEQ(13x4)GRPUVTXRVSHVM(1x5)F(307x3)(225x10)(47x6)(17x13)VURYAUGWWOIHHQJDD(8x3)WPVVCPUT(5x5)BFBOB(59x1)(8x3)UWPCOMZH(3x13)NRQ(4x13)WUJV(12x5)FUSBMTPOWDTX(3x12)RXT(45x8)(16x6)MTVMZPSDFMLDYLLD(16x14)JUHUHFNBYHGFWLVG(50x2)(2x9)GR(4x6)URSQ(27x10)LAGGDJBKBLVLPJVVDEZCXEJLFBJ(67x14)(7x15)OMHMPKM(2x7)BH(9x14)LDAFCOKEL(25x12)(5x1)QMTQH(1x15)I(2x15)RV(5x1)KKFYZ(639x15)(295x4)(8x10)SLSXUAJJ(160x7)(5x14)ICLSB(86x3)(6x7)CUYULZ(24x14)RZUPMSJMKASMGYUKSAZQKMBC(23x7)NINZWUFKIZZNKOZUAQOROBG(9x15)YJKHZIZFP(2x7)HC(30x5)(8x2)OBZCEUCF(10x10)LNGPRAITSF(8x11)(2x14)NG(106x14)(24x9)ACQDRKVEOEDULYMLYBGOMSIJ(19x2)UBUHEYIJEGFMCZSTDDO(35x4)HFNTQACPTELDNRWVUVKNKPBVIJMZWAZEOKS(5x3)RSIAK(330x8)(179x6)(34x8)(13x1)CCRZOVJLZOBBO(3x14)WPC(1x6)L(15x13)VAVFETWJRRFZFPE(11x13)VKJLGKAOCUC(92x12)(20x10)MRTDKUJPLGPXMTVLRSUF(2x6)QZ(11x15)MHFLVOFUNDC(25x11)SONLCWNGCZFGMSXYJXSFPVGVY(3x2)QRI(136x15)(45x13)(6x4)QQSQCM(1x9)U(7x4)VIDEIXN(10x3)WFRKVWNLJM(50x7)(13x4)OYFDFFFLITCIR(16x6)CIRLRKXBHVHNUPFZ(3x15)GRD(11x3)FMDUOABWGPB(5x15)EWSOH(3x4)JYH(338x8)(331x5)(324x1)(194x3)(2x4)ZF(48x12)(3x9)JVP(4x2)BWLT(24x15)KPNIHTTPTNNAHSSSDLAKDDNT(6x3)SZJQKG(64x15)(19x14)RSMBLFUAZBGBCJPQDES(5x11)KLUTW(1x9)J(5x13)UYNTL(5x8)NVICZ(43x11)(20x6)HURCGFJBVQOKDECLQELO(3x4)XID(4x9)WOCX(38x5)(2x8)KV(25x2)(18x13)SEYOWGYPRRKBHNVVGI(72x14)(18x10)RXBCYLJENTUPCKCIDO(22x8)(5x5)ZPUYC(7x9)LXRWCDN(2x3)XD(7x4)DEKJLWL(1794x8)(1786x4)(297x10)(289x14)(162x10)(78x9)(1x9)T(28x11)WCIFRVQWPNOEEBPKGYPFCOTNMRAP(12x7)IYTEKBFTEZIX(4x6)ALRX(5x2)QSCXQ(72x4)(25x8)OHCTVXZIEWNMEZBVFKTLIMGQW(4x13)XEBD(6x13)UZZITD(12x13)QPGHTTJTMMFJ(103x9)(24x4)FOJJCXKNPHEGIRYIFBLDVUES(66x14)(15x14)AJEUHOVVHZVHGAV(5x9)CVIBX(15x8)WIHEKYSJZCLABUK(8x5)UYQLGBEY(3x14)QAR(690x4)(14x3)KRIBLTDDRJSFGY(4x9)MMCG(338x15)(15x4)(4x3)VIER(1x7)J(76x14)(8x6)VNTBZCVR(47x6)(24x3)HDWQXSRQWIFPKUSRADRBXAPD(11x8)GSSDBTQZINR(5x3)TWHSS(74x2)(5x3)DMUEM(4x2)FLBE(48x14)(10x8)YLSBTQPTJJ(2x10)ZP(8x7)JFXOKRXJ(5x11)WDHLN(82x2)(7x12)IEXUOMG(8x11)PVPIWSQY(36x7)NXNEYNWWPODZRJBIQFLDLZVSEDRPRWZUUXQS(7x11)WWTZGJK(59x11)(52x11)(17x14)QMXUKMPFATJEJQASH(22x6)WEXAZYBXEIIIWKEYRNINYH(246x5)(7x14)XMWZOQI(225x13)(9x6)(4x4)RMSV(35x9)(12x15)FSEJCGTVXEUT(1x7)L(5x5)IALLO(83x2)(5x5)HEUVE(26x8)BGAOGWCKQJVESARPQNTDIKKOKN(34x12)DGCKPWQBLZNXDLLYIWKRAOVPCXIIEWLSMN(75x6)(6x6)RHDULO(16x11)CRXVYYDZXJFFSPOR(5x14)OXTUY(24x4)UHCHXFDOONZXAZTTBFSINOEG(55x14)(12x12)ZKOOCWQTVQUS(19x10)WNHJGQATSCBTMLIVOYB(5x1)ZHQEA(710x7)(2x14)FD(170x9)(162x11)(11x10)MJTMRWMKRNT(28x10)(21x14)MJZQATVTRTWDEQNSZOXKK(59x15)(1x10)K(16x6)AVTYFAJYHSKETUYI(1x15)M(4x15)CDYM(7x15)TGWTHWL(29x11)HWMXLXCZVSSUPDBTIXDEGPNJJZNGX(2x6)KM(487x11)(3x14)UIF(84x4)(5x14)MDENR(66x12)(12x11)WQEVOLYPOSEK(30x5)LKBXTFFEOHNEJHOHKMMUKSDISVVQZE(5x10)PFZCP(197x12)(24x15)JLPYUIJVFQRWOACTFMQPLYHI(55x3)(14x1)KUTCZEZNWSISPL(8x7)YNZXWQMY(6x1)EZVHCC(6x3)AEVYOO(2x6)DE(68x6)(13x3)KRBXMIIHZERUV(3x2)TLR(35x4)LWCSHQCLMZAPMNSXKWCGVGDTKWUQAIWWLWU(17x11)FWYFWEMLVLQQGCJLJ(176x8)(4x2)ICOL(63x7)(37x14)SQVVGHBVLPVSLAYFZBLEGOKEHFSXSVEJOSRXO(2x2)IF(6x10)APYCKZ(73x15)(20x3)EARRAATGOHPONSTXOUVI(20x4)GBRNRAGYDCTGEODHJDUB(1x2)Z(1x15)R(3x4)QBQ(1x2)M(7x6)KJQAHCJ(24x6)UHLVTEERAYIUBGMUKOJFHRUJ(36x7)(30x2)(1x14)H(17x1)BSZIJHGVILXXURQDI(18x12)PSFBREKMLZRFFFRLZG(236x1)(52x7)(2x12)WK(16x10)CRNLMDQWZECYSFOT(3x10)ISI(6x13)FPJKZE(7x9)XOCUXIU(125x5)(105x5)LPOXYLAWSIIRQDNUWVHOLUDYOZSCFNCORKVFMSYIMMNCMNSOUGJHSBYKITYGFWUYHBJCQELUIMYXAFRFIAOSXSOIMGYEPJFPWQXSZYCDD(8x8)ILXIPPGD(7x13)TYZVRQS(14x12)(3x3)WXE(1x9)Q(40x10)(34x7)(2x2)AZ(10x15)UPJJICKDLA(5x6)CHXZV(153x7)(13x8)LCBGVTVMPVNMJ(30x8)(6x8)KXMWXG(6x1)DJRTOU(2x15)FW(79x10)(13x9)RIFNFQDLAWBSQ(3x2)ERQ(19x1)TTHLBYCOPMTXIIDSBXX(9x14)SBPSPMMCK(7x8)MKNEMLA(6x11)YPDDWG(220x9)(65x3)(2x6)LT(13x3)XFOPJCJBLRXYH(8x5)BKPDBCLE(6x2)UNKPOA(9x15)THYQVMZUG(50x15)(9x11)AAXOWDYIN(12x14)IWTCMNVXNJAX(10x4)JPSIYYKGVJ(86x8)(29x10)ORMIZOTUMSVKNEJDCQDQHESLAQKOF(8x14)SHFMBHHV(1x9)L(14x2)QQHGYTMVZAZRDK(5x7)COVRS(51x2)(11x2)ZDTVQIWFFND(5x8)RQTFS(1x9)B(5x9)SINCP(3x3)ACU
diff --git a/2016/aoc9/src/main.rs b/2016/aoc9/src/main.rs
new file mode 100644
index 0000000..622819c
--- /dev/null
+++ b/2016/aoc9/src/main.rs
@@ -0,0 +1,143 @@
+use std::io::BufReader;
+use std::io::prelude::*;
+use std::fs::File;
+
+#[derive(Debug, Clone, Copy)]
+struct Marker {
+ take: usize,
+ repeat: usize
+}
+#[derive(Debug, Clone, Copy)]
+enum Token {
+ Marker(usize, Marker),
+ Literal(usize)
+}
+
+impl Token {
+ fn size(self) -> usize {
+ match self {
+ Token::Marker(x, _) => x,
+ Token::Literal(x) => x
+ }
+ }
+
+ fn is_marker(self) -> bool {
+ match self {
+ Token::Marker(_, _) => true,
+ Token::Literal(_) => false
+ }
+ }
+
+ fn unwrap_marker(self) -> Marker {
+ match self {
+ Token::Marker(_, marker) => marker,
+ Token::Literal(_) => panic!("Bad unwrap marker")
+ }
+ }
+}
+
+fn main() {
+ let mut tokens = parse(read_file());
+ tokens.reverse();
+ let mut length: u64 = 0;
+
+ while tokens.len() > 0 {
+ let next = tokens.pop().unwrap();
+
+ if next.is_marker() {
+ let marker = next.unwrap_marker();
+ let mut used_take = 0;
+
+ let mut tokens_to_repeat = Vec::new();
+ while used_take < marker.take {
+ let next_token = tokens.pop().unwrap();
+ if used_take + next_token.size() <= marker.take {
+ tokens_to_repeat.push(next_token);
+ }
+ else {
+ assert!(!next_token.is_marker());
+ //assume splits only happen on literals
+ tokens_to_repeat.push(Token::Literal(marker.take - used_take));
+ tokens.push(Token::Literal(next_token.size() - marker.take + used_take));
+ }
+ used_take += next_token.size();
+ }
+
+ tokens_to_repeat.reverse();
+ for _ in 0..marker.repeat {
+ for &token in &tokens_to_repeat {
+ tokens.push(token);
+ }
+ }
+ } else {
+ length += next.size() as u64;
+ }
+ }
+ println!("Length: {}", length);
+}
+
+fn parse(text: String) -> Vec<Token> {
+ let mut tokens = Vec::new();
+ let mut chars = text.chars();
+ let mut current_char = chars.next();
+ while current_char.is_some() {
+ let c = current_char.unwrap();
+ if c == '(' {
+ let mut char_count = 1;
+ let mut take_str = String::new();
+ let mut repeat_str = String::new();
+ loop {
+ let n = chars.next().unwrap();
+ char_count += 1;
+ if n == 'x' { break; }
+ take_str.push(n);
+ }
+ loop {
+ let n = chars.next().unwrap();
+ char_count += 1;
+ if n == ')' { break; }
+ repeat_str.push(n);
+ }
+
+ let take: usize = take_str.parse().expect(format!("Tried to parse take {}", take_str).as_ref());
+ let repeat: usize = repeat_str.parse().expect(format!("Tried to parse repeat {}", repeat_str).as_ref());
+ tokens.push(Token::Marker(char_count , Marker{take: take, repeat:repeat}));
+ } else {
+ assert!(c != '(' && c != ')');
+ tokens.push(Token::Literal(1));
+ }
+
+ current_char = chars.next();
+ }
+ collapse_literals(&mut tokens);
+
+ tokens
+}
+
+fn collapse_literals(tokens: &mut Vec<Token>) {
+ let mut i = 0;
+ while i < tokens.len()-1 {
+ match (tokens[i], tokens[i+1]) {
+ (Token::Literal(l1), Token::Literal(l2)) => {
+ tokens[i] = Token::Literal(l1+l2);
+ tokens.remove(i+1);
+ },
+ _ => {
+ i += 1;
+ }
+ }
+ }
+}
+
+fn read_file() -> String {
+ let file = BufReader::new(File::open("input.txt").unwrap());
+ file.lines()
+ .map(|line| line.unwrap().trim().to_string())
+ .filter(|line| line.len() > 0)
+ .next()
+ .unwrap()
+ .trim()
+ .to_string()
+
+// "(25x3)(3x3)ABC(2x3)XY(5x2)PQRSTX(18x9)(3x2)TWO(5x7)SEVEN".to_string()
+}