Add tests, Refactoring, Formatting

This commit is contained in:
Manuel 2023-07-25 22:00:00 +02:00
parent 3824fe27f1
commit d7a7a53537
Signed by: Manuel
GPG key ID: 4085037435E1F07A
4 changed files with 134 additions and 24 deletions

6
hsv.go
View file

@ -47,8 +47,7 @@ func main() {
func printPixel(x int, y int) { func printPixel(x int, y int) {
val := hsv.NewValidator(true) val := hsv.NewValidator(true)
val.Calculate(x, y) r, g, b := val.Calculate(x, y).GetRGB()
r, g, b := val.GetColor()
fmt.Printf("\nR: %d\nG: %d\nB: %d\nHEX: #%02X%02X%02X\n", r, g, b, r, g, b) fmt.Printf("\nR: %d\nG: %d\nB: %d\nHEX: #%02X%02X%02X\n", r, g, b, r, g, b)
} }
@ -66,8 +65,7 @@ func writePPM(path string, width int, height int, startx int, starty int) {
for y := startx; y < startx+height; y++ { for y := startx; y < startx+height; y++ {
for x := starty; x < starty+width; x++ { for x := starty; x < starty+width; x++ {
v := hsv.NewValidator(false) v := hsv.NewValidator(false)
v.Calculate(x, y) r, g, b := v.Calculate(x, y).GetRGB()
r, g, b := v.GetColor()
bw.WriteString(fmt.Sprintf("%d %d %d ", r, g, b)) bw.WriteString(fmt.Sprintf("%d %d %d ", r, g, b))
} }
bw.WriteString("\n") bw.WriteString("\n")

View file

@ -6,16 +6,16 @@ import (
type Validator struct { type Validator struct {
printMode bool printMode bool
r int r int
g int g int
b int b int
} }
func NewValidator(print bool) Validator { func NewValidator(print bool) Validator {
return Validator{print, 0, 0, 0} return Validator{print, 0, 0, 0}
} }
func (val *Validator) Calculate(x int, y int) { func (val *Validator) Calculate(x int, y int) *Validator {
val.print("x = %d", x) val.print("x = %d", x)
val.print("y = %d", y) val.print("y = %d", y)
var u int = x - 36 var u int = x - 36
@ -36,10 +36,13 @@ func (val *Validator) Calculate(x int, y int) {
val.print("⇒ v < 0 → %d ≮ 0", v) val.print("⇒ v < 0 → %d ≮ 0", v)
val.sectionD(x, y) val.sectionD(x, y)
} }
return val
} }
func (val *Validator) sectionB(u int, v int, h int) { func (val *Validator) sectionB(u int, v int, h int) {
val.print("=> Continuing to section B") val.print("=> Continuing to section B")
val.r = 420 val.r = 420
val.print("R = %d", val.r) val.print("R = %d", val.r)
val.b = 520 val.b = 520
@ -47,14 +50,14 @@ func (val *Validator) sectionB(u int, v int, h int) {
var t int = 5000 + 8*h var t int = 5000 + 8*h
val.print("t = 5000 + 8 ⋅ %d = 5000 + %d = %d", h, 8*h, t) val.print("t = 5000 + 8 ⋅ %d = 5000 + %d = %d", h, 8*h, t)
var p int = val.mod(t*u, 2) var p int = mod(t*u, 2)
val.print("p = (%d ⋅ %d) | 2 = %d | 2 = %d", t, u, t*u, p) val.print("p = (%d ⋅ %d) | 2 = %d | 2 = %d", t, u, t*u, p)
var q int = val.mod(t*v, 2) var q int = mod(t*v, 2)
val.print("q = (%d ⋅ %d) | 2 = %d | 2 = %d", t, v, t*v, q) val.print("q = (%d ⋅ %d) | 2 = %d | 2 = %d", t, v, t*v, q)
var s int = 2 * q var s int = 2 * q
val.print("s = 2 ⋅ %d = %d", q, s) val.print("s = 2 ⋅ %d = %d", q, s)
var w int = val.mod(1000+p-s, 2) + 8 var w int = mod(1000+p-s, 2) + 8
val.print("w = (1000 + %d - %d) | 2 + 8 = (1000 + %d) | 2 + 8 = %d | 2 + 8 = %d + 8 = %d", p, s, p-s, 1000+p-s, val.mod(1000+p-s, 2), w) val.print("w = (1000 + %d - %d) | 2 + 8 = (1000 + %d) | 2 + 8 = %d | 2 + 8 = %d + 8 = %d", p, s, p-s, 1000+p-s, mod(1000+p-s, 2), w)
if w > 0 { if w > 0 {
val.print("⇒ w > 0 → %d > 0", w) val.print("⇒ w > 0 → %d > 0", w)
val.r = val.r + w*w val.r = val.r + w*w
@ -62,24 +65,26 @@ func (val *Validator) sectionB(u int, v int, h int) {
} }
var o int = s + 2200 var o int = s + 2200
val.print("o = %d + 2200 = %d", s, o) val.print("o = %d + 2200 = %d", s, o)
val.r = val.mod(val.r*o, 4) val.r = mod(val.r*o, 4)
val.print("R → R ⋅ %d | 4 ⇒ R = %d", o, val.r) val.print("R → R ⋅ %d | 4 ⇒ R = %d", o, val.r)
val.b = val.mod(val.b*o, 4) val.b = mod(val.b*o, 4)
val.print("B → B ⋅ %d | 4 ⇒ B = %d", o, val.b) val.print("B → B ⋅ %d | 4 ⇒ B = %d", o, val.b)
if p > -q { if p > -q {
val.print("⇒ p > -q → %d > -%d", p, q) val.print("⇒ p > -q → %d > -%d", p, q)
w = val.mod(p+q, 1) w = mod(p+q, 1)
val.print(" w = (%d + %q) | 1 = %d | 1 = %d", p, q, p+q, w) val.print(" w = (%d + %q) | 1 = %d | 1 = %d", p, q, p+q, w)
val.r = val.r + w val.r = val.r + w
val.print(" R → R + %d ⇒ R = %d", w, val.r) val.print(" R → R + %d ⇒ R = %d", w, val.r)
val.b = val.b + w val.b = val.b + w
val.print(" B → B + %d ⇒ B = %d", w, val.b) val.print(" B → B + %d ⇒ B = %d", w, val.b)
} }
val.sectionE() val.sectionE()
} }
func (val *Validator) sectionC(u int, v int, h int) { func (val *Validator) sectionC(u int, v int, h int) {
val.print("=> Continuing to section C") val.print("=> Continuing to section C")
val.r = 150 + 2*v val.r = 150 + 2*v
val.print("R = 150 + 2 ⋅ %d = 150 + %d = %d", v, 2*v, val.r) val.print("R = 150 + 2 ⋅ %d = 150 + %d = %d", v, 2*v, val.r)
val.b = 50 val.b = 50
@ -90,15 +95,15 @@ func (val *Validator) sectionC(u int, v int, h int) {
val.print("c = 240 ⋅ (-%d) - %d = %d - %d = %d", v, p, 240*(-v), p, c) val.print("c = 240 ⋅ (-%d) - %d = %d - %d = %d", v, p, 240*(-v), p, c)
if c > 1200 { if c > 1200 {
val.print("⇒ c > 1200 → %d > 1200", c) val.print("⇒ c > 1200 → %d > 1200", c)
var o int = val.mod(6*c, 1) var o int = mod(6*c, 1)
val.print(" o = (6 ⋅ %d) | 1 = %d | 1 = %d", c, 6*c, o) val.print(" o = (6 ⋅ %d) | 1 = %d | 1 = %d", c, 6*c, o)
o = c * (1500 - o) o = c * (1500 - o)
val.print(" o → %d ⋅ (1500 - o) = %d", c, o) val.print(" o → %d ⋅ (1500 - o) = %d", c, o)
o = val.mod(o, 2) - 8360 o = mod(o, 2) - 8360
val.print(" o → o | 2 - 8360 = %d", o) val.print(" o → o | 2 - 8360 = %d", o)
val.r = val.mod(val.r*o, 3) val.r = mod(val.r*o, 3)
val.print(" R → R ⋅ %d | 3 ⇒ R = %d", o, val.r) val.print(" R → R ⋅ %d | 3 ⇒ R = %d", o, val.r)
val.b = val.mod(val.b*o, 3) val.b = mod(val.b*o, 3)
val.print(" B → B ⋅ %d | 3 ⇒ B = %d", o, val.b) val.print(" B → B ⋅ %d | 3 ⇒ B = %d", o, val.b)
} }
var r int = c + u*v var r int = c + u*v
@ -110,22 +115,26 @@ func (val *Validator) sectionC(u int, v int, h int) {
val.r = val.r + d val.r = val.r + d
val.print(" R → R + %d ⇒ R = %d", d, val.r) val.print(" R → R + %d ⇒ R = %d", d, val.r)
} }
val.sectionE() val.sectionE()
} }
func (val *Validator) sectionD(x int, y int) { func (val *Validator) sectionD(x int, y int) {
val.print("=> Continuing to section D") val.print("=> Continuing to section D")
var c int = x + 4*y var c int = x + 4*y
val.print("c = %d + 4 ⋅ %d = %d + %d = %d", x, y, x, 4*y, c) val.print("c = %d + 4 ⋅ %d = %d + %d = %d", x, y, x, 4*y, c)
val.r = 132 + c val.r = 132 + c
val.print("R = 132 + %d = %d", c, val.r) val.print("R = 132 + %d = %d", c, val.r)
val.b = 192 + c val.b = 192 + c
val.print("B = 192 + %d = %d", c, val.b) val.print("B = 192 + %d = %d", c, val.b)
val.sectionE() val.sectionE()
} }
func (val *Validator) sectionE() { func (val *Validator) sectionE() {
val.print("=> Continuing to section E") val.print("=> Continuing to section E")
if val.r > 255 { if val.r > 255 {
val.r = 255 val.r = 255
val.print("⇒ R > 255 → R = %d", val.r) val.print("⇒ R > 255 → R = %d", val.r)
@ -142,11 +151,11 @@ func (val *Validator) sectionE() {
val.b = 0 val.b = 0
val.print("⇒ B < 0 → B = %d", val.b) val.print("⇒ B < 0 → B = %d", val.b)
} }
val.g = val.mod(7*val.r+3*val.b, 1) val.g = mod(7*val.r+3*val.b, 1)
val.print("G = (7 + %d + 3 ⋅ %d) | 1 = (%d + %d) | 1 = %d | 1 = %d", val.r, val.b, 7+val.r, 3*val.b, 7*val.r+3*val.b, val.g) val.print("G = (7 + %d + 3 ⋅ %d) | 1 = (%d + %d) | 1 = %d | 1 = %d", val.r, val.b, 7+val.r, 3*val.b, 7*val.r+3*val.b, val.g)
} }
func (val *Validator) mod(left int, right int) int { func mod(left int, right int) int {
l := left l := left
if left < 0 { if left < 0 {
l = -left l = -left
@ -166,12 +175,12 @@ func (val *Validator) mod(left int, right int) int {
return r return r
} }
func (val *Validator) GetColor() (int, int, int) { func (val *Validator) GetRGB() (int, int, int) {
return val.r, val.g, val.b return val.r, val.g, val.b
} }
func (val *Validator) print(str string, args... any) { func (val *Validator) print(str string, args ...any) {
if val.printMode { if val.printMode {
fmt.Printf(str + "\n", args...) fmt.Printf(str+"\n", args...)
} }
} }

102
validator/validator_test.go Normal file
View file

@ -0,0 +1,102 @@
package validator
import (
"bufio"
"os"
"testing"
)
func TestCalculateInbound(t *testing.T) {
testPixel(t, 16, 12, 196, 214, 255)
testPixel(t, 14, 33, 120, 99, 50)
testPixel(t, 11, 11, 187, 205, 247)
testPixel(t, 7, 39, 255, 194, 50)
testPixel(t, 66, 26, 255, 194, 50)
testPixel(t, 27, 28, 95, 81, 47)
}
func TestCalculateOutbound(t *testing.T) {
testPixel(t, -20, 20, 255, 194, 50)
testPixel(t, 100, 100, 255, 194, 50)
testPixel(t, -100, 100, 255, 194, 50)
testPixel(t, -100, -100, 0, 0, 0)
testPixel(t, 100, -100, 0, 0, 0)
testPixel(t, 100, 10, 255, 255, 255)
}
func TestCalculateImage(t *testing.T) {
f, err := os.Open("./values.txt")
if err != nil {
t.Error("Test file does not exist or not readable")
}
defer f.Close()
br := bufio.NewScanner(f)
br.Split(bufio.ScanWords)
for y := 0; y < 40; y++ {
for x := 0; x < 71; x++ {
br.Scan()
expR := toInt(br.Bytes())
br.Scan()
expG := toInt(br.Bytes())
br.Scan()
expB := toInt(br.Bytes())
testPixel(t, x, y, expR, expG, expB)
}
}
}
func toInt(buf []byte) (n int) {
for _, v := range buf {
n = n*10 + int(v-'0')
}
return
}
func testPixel(t *testing.T, x int, y int, expR int, expG int, expB int) {
val := NewValidator(false)
r, g, b := val.Calculate(x, y).GetRGB()
t.Logf("Calculated (%d, %d)", x, y)
if r != expR {
t.Errorf("R = %d; want %d", r, expR)
}
if g != expG {
t.Errorf("G = %d; want %d", g, expG)
}
if b != expB {
t.Errorf("B = %d; want %d", b, expB)
}
}
func TestModFunction(t *testing.T) {
{
got := mod(100, 1)
if got != 10 {
t.Errorf("mod(100, 1) = 10; got %d", got)
}
}
{
got := mod(123456, 3)
if got != 123 {
t.Errorf("mod(123456, 3) = 123; got %d", got)
}
}
{
got := mod(5454, 2)
if got != 55 {
t.Errorf("mod(5454, 2) = 55; got %d", got)
}
}
{
got := mod(1234*555, 4) + 2
if got != 70 {
t.Errorf("mod(%d, 4) + 2 = 70; got %d", 1234*555, got)
}
}
{
got := mod(1234*556, 4) + 2
if got != 71 {
t.Errorf("mod(%d, 4) + 2 = 71; got %d", 1234*556, got)
}
}
}

1
validator/values.txt Normal file
View file

@ -0,0 +1 @@
132 150 192 133 151 193 134 152 194 135 153 195 136 154 196 137 155 197 138 156 198 139 157 199 140 158 200 141 159 201 142 160 202 143 161 203 144 162 204 145 163 205 146 164 206 147 165 207 148 166 208 149 167 209 150 168 210 151 169 211 152 170 212 153 171 213 154 172 214 155 173 215 156 174 216 157 175 217 158 176 218 159 177 219 160 178 220 161 179 221 162 180 222 163 181 223 164 182 224 165 183 225 166 184 226 167 185 227 168 186 228 169 187 229 170 188 230 171 189 231 172 190 232 173 191 233 174 192 234 175 193 235 176 194 236 177 195 237 178 196 238 179 197 239 180 198 240 181 199 241 182 200 242 183 201 243 184 202 244 185 203 245 186 204 246 187 205 247 188 206 248 189 207 249 190 208 250 191 209 251 192 210 252 193 211 253 194 212 254 195 213 255 196 214 255 197 214 255 198 215 255 199 216 255 200 217 255 201 217 255 202 218 255 136 154 196 137 155 197 138 156 198 139 157 199 140 158 200 141 159 201 142 160 202 143 161 203 144 162 204 145 163 205 146 164 206 147 165 207 148 166 208 149 167 209 150 168 210 151 169 211 152 170 212 153 171 213 154 172 214 155 173 215 156 174 216 157 175 217 158 176 218 159 177 219 160 178 220 161 179 221 162 180 222 163 181 223 164 182 224 165 183 225 166 184 226 167 185 227 168 186 228 169 187 229 170 188 230 171 189 231 172 190 232 173 191 233 174 192 234 175 193 235 176 194 236 177 195 237 178 196 238 179 197 239 180 198 240 181 199 241 182 200 242 183 201 243 184 202 244 185 203 245 186 204 246 187 205 247 188 206 248 189 207 249 190 208 250 191 209 251 192 210 252 193 211 253 194 212 254 195 213 255 196 214 255 197 214 255 198 215 255 199 216 255 200 217 255 201 217 255 202 218 255 203 219 255 204 219 255 205 220 255 206 221 255 140 158 200 141 159 201 142 160 202 143 161 203 144 162 204 145 163 205 146 164 206 147 165 207 148 166 208 149 167 209 150 168 210 151 169 211 152 170 212 153 171 213 154 172 214 155 173 215 156 174 216 157 175 217 158 176 218 159 177 219 160 178 220 161 179 221 162 180 222 163 181 223 164 182 224 165 183 225 166 184 226 167 185 227 168 186 228 169 187 229 170 188 230 171 189 231 172 190 232 173 191 233 174 192 234 175 193 235 176 194 236 177 195 237 178 196 238 179 197 239 180 198 240 181 199 241 182 200 242 183 201 243 184 202 244 185 203 245 186 204 246 187 205 247 188 206 248 189 207 249 190 208 250 191 209 251 192 210 252 193 211 253 194 212 254 195 213 255 196 214 255 197 214 255 198 215 255 199 216 255 200 217 255 201 217 255 202 218 255 203 219 255 204 219 255 205 220 255 206 221 255 207 221 255 208 222 255 209 223 255 210 224 255 144 162 204 145 163 205 146 164 206 147 165 207 148 166 208 149 167 209 150 168 210 151 169 211 152 170 212 153 171 213 154 172 214 155 173 215 156 174 216 157 175 217 158 176 218 159 177 219 160 178 220 161 179 221 162 180 222 163 181 223 164 182 224 165 183 225 166 184 226 167 185 227 168 186 228 169 187 229 170 188 230 171 189 231 172 190 232 173 191 233 174 192 234 175 193 235 176 194 236 177 195 237 178 196 238 179 197 239 180 198 240 181 199 241 182 200 242 183 201 243 184 202 244 185 203 245 186 204 246 187 205 247 188 206 248 189 207 249 190 208 250 191 209 251 192 210 252 193 211 253 194 212 254 195 213 255 196 214 255 197 214 255 198 215 255 199 216 255 200 217 255 201 217 255 202 218 255 203 219 255 204 219 255 205 220 255 206 221 255 207 221 255 208 222 255 209 223 255 210 224 255 211 224 255 212 225 255 213 226 255 214 226 255 148 166 208 149 167 209 150 168 210 151 169 211 152 170 212 153 171 213 154 172 214 155 173 215 156 174 216 157 175 217 158 176 218 159 177 219 160 178 220 161 179 221 162 180 222 163 181 223 164 182 224 165 183 225 166 184 226 167 185 227 168 186 228 169 187 229 170 188 230 171 189 231 172 190 232 173 191 233 174 192 234 175 193 235 176 194 236 177 195 237 178 196 238 179 197 239 180 198 240 181 199 241 182 200 242 255 255 255 255 255 255 255 255 255 186 204 246 187 205 247 188 206 248 189 207 249 190 208 250 191 209 251 192 210 252 193 211 253 194 212 254 195 213 255 196 214 255 197 214 255 198 215 255 199 216 255 200 217 255 201 217 255 202 218 255 203 219 255 204 219 255 205 220 255 206 221 255 207 221 255 208 222 255 209 223 255 210 224 255 211 224 255 212 225 255 213 226 255 214 226 255 215 227 255 216 228 255 217 228 255 218 229 255 152 170 212 153 171 213 154 172 214 155 173 215 156 174 216 157 175 217 158 176 218 159 177 219 160 178 220 161 179 221 162 180 222 163 181 223 164 182 224 165 183 225 166 184 226 167 185 227 168 186 228 169 187 229 170 188 230 171 189 231 172 190 232 173 191 233 174 192 234 175 193 235 176 194 236 177 195 237 178 196 238 179 197 239 180 198 240 181 199 241 182 200 242 216 228 255 221 231 255 227 235 255 232 239 255 238 243 255 245 248 255 252 253 255 255 255 255 255 255 255 255 255 255 255 255 255 194 212 254 195 213 255 196 214 255 197 214 255 198 215 255 199 216 255 200 217 255 201 217 255 202 218 255 203 219 255 204 219 255 205 220 255 206 221 255 207 221 255 208 222 255 209 223 255 210 224 255 211 224 255 212 225 255 213 226 255 214 226 255 215 227 255 216 228 255 217 228 255 218 229 255 219 230 255 220 231 255 221 231 255 222 232 255 156 174 216 157 175 217 158 176 218 159 177 219 160 178 220 161 179 221 162 180 222 163 181 223 164 182 224 165 183 225 166 184 226 167 185 227 168 186 228 169 187 229 170 188 230 171 189 231 172 190 232 173 191 233 174 192 234 175 193 235 176 194 236 177 195 237 178 196 238 179 197 239 180 198 240 181 199 241 182 200 242 183 201 243 184 202 244 191 202 229 196 207 234 200 211 238 206 217 243 212 223 248 218 229 254 226 235 255 232 239 255 240 245 255 248 250 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 200 217 255 201 217 255 202 218 255 203 219 255 204 219 255 205 220 255 206 221 255 207 221 255 208 222 255 209 223 255 210 224 255 211 224 255 212 225 255 213 226 255 214 226 255 215 227 255 216 228 255 217 228 255 218 229 255 219 230 255 220 231 255 221 231 255 222 232 255 223 233 255 224 233 255 225 234 255 226 235 255 160 178 220 161 179 221 162 180 222 163 181 223 164 182 224 165 183 225 166 184 226 167 185 227 168 186 228 169 187 229 170 188 230 171 189 231 172 190 232 173 191 233 174 192 234 175 193 235 176 194 236 177 195 237 178 196 238 179 197 239 180 198 240 181 199 241 182 200 242 183 201 243 184 202 244 185 203 245 186 204 246 187 205 247 172 183 209 177 188 213 181 192 217 187 198 222 193 203 227 199 209 231 207 216 237 213 222 243 222 230 249 228 236 255 239 244 255 250 252 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 205 220 255 206 221 255 207 221 255 208 222 255 209 223 255 210 224 255 211 224 255 212 225 255 213 226 255 214 226 255 215 227 255 216 228 255 217 228 255 218 229 255 219 230 255 220 231 255 221 231 255 222 232 255 223 233 255 224 233 255 225 234 255 226 235 255 227 235 255 228 236 255 229 237 255 230 238 255 164 182 224 165 183 225 166 184 226 167 185 227 168 186 228 169 187 229 170 188 230 171 189 231 172 190 232 173 191 233 174 192 234 175 193 235 176 194 236 177 195 237 178 196 238 179 197 239 180 198 240 181 199 241 182 200 242 183 201 243 184 202 244 185 203 245 186 204 246 187 205 247 188 206 248 189 207 249 190 208 250 154 164 188 158 169 193 164 174 198 169 179 202 176 185 207 184 192 212 188 196 216 197 205 222 205 212 227 211 218 233 222 227 239 233 237 245 239 243 251 253 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 210 224 255 211 224 255 212 225 255 213 226 255 214 226 255 215 227 255 216 228 255 217 228 255 218 229 255 219 230 255 220 231 255 221 231 255 222 232 255 223 233 255 224 233 255 225 234 255 226 235 255 227 235 255 228 236 255 229 237 255 230 238 255 231 238 255 232 239 255 233 240 255 234 240 255 168 186 228 169 187 229 170 188 230 171 189 231 172 190 232 173 191 233 174 192 234 175 193 235 176 194 236 177 195 237 178 196 238 179 197 239 180 198 240 181 199 241 182 200 242 183 201 243 184 202 244 185 203 245 186 204 246 187 205 247 188 206 248 189 207 249 190 208 250 191 209 251 192 210 252 193 211 253 141 151 175 140 150 173 146 156 178 153 162 183 160 168 188 168 175 192 173 180 197 181 187 202 191 196 208 196 201 212 207 210 218 213 216 224 224 226 231 231 233 237 243 243 243 251 251 251 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 215 227 255 216 228 255 217 228 255 218 229 255 219 230 255 220 231 255 221 231 255 222 232 255 223 233 255 224 233 255 225 234 255 226 235 255 227 235 255 228 236 255 229 237 255 230 238 255 231 238 255 232 239 255 233 240 255 234 240 255 235 241 255 236 242 255 237 242 255 238 243 255 172 190 232 173 191 233 174 192 234 175 193 235 176 194 236 177 195 237 178 196 238 179 197 239 180 198 240 181 199 241 182 200 242 183 201 243 184 202 244 185 203 245 186 204 246 187 205 247 188 206 248 189 207 249 190 208 250 191 209 251 192 210 252 193 211 253 194 212 254 195 213 255 196 214 255 136 146 168 136 145 167 137 146 166 138 146 165 143 151 169 151 158 175 159 165 179 168 173 184 173 178 189 182 186 194 194 196 199 198 200 204 210 210 210 217 217 217 229 227 223 236 234 229 250 246 236 255 252 244 255 254 252 255 255 255 255 255 255 255 255 255 255 255 255 220 231 255 221 231 255 222 232 255 223 233 255 224 233 255 225 234 255 226 235 255 227 235 255 228 236 255 229 237 255 230 238 255 231 238 255 232 239 255 233 240 255 234 240 255 235 241 255 236 242 255 237 242 255 238 243 255 239 244 255 240 245 255 241 245 255 242 246 255 176 194 236 177 195 237 178 196 238 179 197 239 180 198 240 181 199 241 182 200 242 183 201 243 184 202 244 185 203 245 186 204 246 187 205 247 188 206 248 189 207 249 190 208 250 191 209 251 192 210 252 193 211 253 194 212 254 195 213 255 196 214 255 197 214 255 198 215 255 199 216 255 131 140 162 131 140 161 132 140 159 133 141 158 135 142 157 137 143 157 147 152 162 151 156 166 161 164 172 170 172 176 175 177 181 186 186 186 192 192 192 203 201 197 209 207 203 222 218 209 229 225 216 243 237 222 250 244 230 255 250 238 255 252 246 255 255 255 255 255 255 255 255 255 255 255 255 225 234 255 226 235 255 227 235 255 228 236 255 229 237 255 230 238 255 231 238 255 232 239 255 233 240 255 234 240 255 235 241 255 236 242 255 237 242 255 238 243 255 239 244 255 240 245 255 241 245 255 242 246 255 243 247 255 244 247 255 245 248 255 246 249 255 180 198 240 181 199 241 182 200 242 183 201 243 184 202 244 185 203 245 186 204 246 187 205 247 188 206 248 189 207 249 190 208 250 191 209 251 192 210 252 193 211 253 194 212 254 195 213 255 196 214 255 197 214 255 198 215 255 199 216 255 200 217 255 201 217 255 202 218 255 203 219 255 127 135 155 129 136 153 130 137 152 133 138 151 132 138 151 135 140 150 139 142 149 149 151 155 154 156 159 164 164 164 175 173 169 180 178 174 192 188 179 197 193 184 210 204 191 216 210 196 230 222 202 236 228 209 252 241 216 255 246 224 255 248 232 255 251 240 255 253 249 255 255 255 255 255 255 229 237 255 230 238 255 231 238 255 232 239 255 233 240 255 234 240 255 235 241 255 236 242 255 237 242 255 238 243 255 239 244 255 240 245 255 241 245 255 242 246 255 243 247 255 244 247 255 245 248 255 246 249 255 247 249 255 248 250 255 249 251 255 250 252 255 184 202 244 185 203 245 186 204 246 187 205 247 188 206 248 189 207 249 190 208 250 191 209 251 192 210 252 193 211 253 194 212 254 195 213 255 196 214 255 197 214 255 198 215 255 199 216 255 200 217 255 201 217 255 202 218 255 203 219 255 204 219 255 205 220 255 206 221 255 123 131 149 124 131 147 125 131 146 128 133 146 131 135 145 134 137 144 134 137 144 138 140 143 142 142 142 153 151 147 159 157 153 170 166 158 174 170 162 186 180 167 191 185 172 205 197 179 210 202 184 224 214 190 231 221 196 246 233 203 254 241 211 255 244 218 255 247 227 255 249 236 255 252 245 255 255 255 255 255 255 234 240 255 235 241 255 236 242 255 237 242 255 238 243 255 239 244 255 240 245 255 241 245 255 242 246 255 243 247 255 244 247 255 245 248 255 246 249 255 247 249 255 248 250 255 249 251 255 250 252 255 251 252 255 252 253 255 253 254 255 254 254 255 188 206 248 189 207 249 190 208 250 191 209 251 192 210 252 193 211 253 194 212 254 195 213 255 196 214 255 197 214 255 198 215 255 199 216 255 200 217 255 201 217 255 202 218 255 203 219 255 204 219 255 205 220 255 206 221 255 207 221 255 208 222 255 209 223 255 210 224 255 119 126 141 120 126 141 123 128 140 125 129 139 129 132 138 133 135 138 137 137 137 137 137 137 142 141 137 148 144 136 153 149 141 164 159 146 169 164 151 182 175 157 187 180 162 199 189 167 205 195 172 219 207 178 226 214 185 241 226 191 248 233 198 255 240 206 255 242 213 255 245 222 255 248 232 255 251 242 255 254 251 238 243 255 239 244 255 240 245 255 241 245 255 242 246 255 243 247 255 244 247 255 245 248 255 246 249 255 247 249 255 248 250 255 249 251 255 250 252 255 251 252 255 252 253 255 253 254 255 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 192 210 252 193 211 253 194 212 254 195 213 255 196 214 255 197 214 255 198 215 255 199 216 255 200 217 255 201 217 255 202 218 255 203 219 255 204 219 255 205 220 255 206 221 255 207 221 255 208 222 255 209 223 255 210 224 255 211 224 255 212 225 255 213 226 255 214 226 255 118 123 134 121 125 134 124 127 133 128 130 133 127 129 132 132 132 132 137 135 131 142 139 131 142 139 131 148 143 131 148 143 130 159 152 135 164 157 140 177 167 145 182 172 150 195 183 156 201 189 161 214 200 167 220 206 173 236 219 179 252 232 186 255 237 194 255 239 201 255 241 209 255 244 218 255 247 227 255 250 237 242 246 255 243 247 255 244 247 255 245 248 255 246 249 255 247 249 255 248 250 255 249 251 255 250 252 255 251 252 255 252 253 255 253 254 255 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 196 214 255 197 214 255 198 215 255 199 216 255 200 217 255 201 217 255 202 218 255 203 219 255 204 219 255 205 220 255 206 221 255 207 221 255 208 222 255 209 223 255 210 224 255 211 224 255 212 225 255 213 226 255 214 226 255 215 227 255 216 228 255 217 228 255 218 229 255 115 119 128 118 121 127 122 124 127 127 127 127 131 130 126 131 130 126 136 133 126 142 137 125 142 137 125 148 141 125 148 141 125 155 146 125 160 151 130 172 161 135 177 166 140 190 177 145 196 183 151 210 194 156 225 206 162 231 212 168 247 225 175 255 233 182 255 235 189 255 238 197 255 240 205 255 243 214 255 246 224 246 249 255 247 249 255 248 250 255 249 251 255 250 252 255 251 252 255 252 253 255 253 254 255 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 200 217 255 201 217 255 202 218 255 203 219 255 204 219 255 205 220 255 206 221 255 207 221 255 208 222 255 209 223 255 210 224 255 211 224 255 212 225 255 213 226 255 214 226 255 215 227 255 216 228 255 217 228 255 218 229 255 219 230 255 220 231 255 221 231 255 109 113 121 113 115 121 116 118 121 121 121 121 125 124 120 131 128 120 130 127 120 136 131 120 142 135 120 142 135 120 148 140 120 148 140 120 155 145 120 163 150 120 168 155 125 181 166 130 186 171 135 200 182 140 206 188 146 220 199 151 226 205 157 242 218 163 249 225 170 255 232 177 255 234 184 255 236 193 255 239 201 255 242 210 255 245 220 251 252 255 252 253 255 253 254 255 254 254 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 204 219 255 205 220 255 206 221 255 207 221 255 208 222 255 209 223 255 210 224 255 211 224 255 212 225 255 213 226 255 214 226 255 215 227 255 216 228 255 217 228 255 218 229 255 219 230 255 220 231 255 221 231 255 222 232 255 223 233 255 224 233 255 225 234 255 110 111 114 114 114 114 119 118 114 119 118 114 124 121 114 130 125 114 136 129 114 136 129 114 142 134 114 142 134 114 149 139 114 149 139 114 156 143 114 164 149 114 164 149 114 177 160 119 182 165 124 195 175 129 201 181 135 215 193 140 221 199 146 237 212 152 243 218 158 255 228 165 255 230 172 255 233 180 255 235 188 255 238 197 255 240 206 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 108 108 108 112 111 108 117 114 108 123 119 108 123 119 108 128 122 108 135 127 109 135 127 109 142 132 109 142 132 109 149 137 109 156 142 109 156 142 109 164 148 109 164 148 109 172 153 109 177 158 114 191 169 119 196 174 124 210 186 130 216 192 136 231 204 141 247 217 148 253 223 153 255 227 160 255 229 168 255 231 176 255 234 184 255 237 194 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 110 107 101 115 111 102 121 115 102 127 120 102 127 120 103 134 125 103 134 125 103 141 130 103 141 130 103 148 135 104 156 140 104 156 140 104 164 146 104 164 146 104 172 152 104 172 152 104 185 162 109 190 167 114 205 179 119 210 184 124 225 197 130 240 209 136 246 215 143 255 223 149 255 225 156 255 228 164 255 230 171 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 112 107 94 112 107 95 119 112 96 125 116 96 125 117 97 132 122 97 133 122 97 140 127 98 147 132 98 147 132 98 155 138 98 155 138 98 163 144 99 163 144 99 171 149 99 171 149 98 180 155 98 184 160 103 199 172 109 203 176 114 218 188 119 232 200 125 247 212 131 253 218 137 255 222 144 255 224 151 255 226 158 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 108 102 87 110 103 88 116 108 89 122 112 90 123 113 90 130 118 91 137 123 91 138 124 92 145 129 92 146 130 93 154 136 93 154 136 93 162 141 93 162 141 93 170 147 93 170 147 93 178 153 93 177 152 93 190 162 97 205 174 103 210 179 108 224 191 114 238 202 119 254 216 126 255 218 132 255 220 138 255 222 145 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 104 97 80 111 102 81 112 103 82 119 108 83 126 113 84 127 114 85 134 119 85 135 120 86 143 126 86 144 127 87 151 132 87 152 133 87 159 137 87 159 137 87 167 143 87 167 143 87 175 149 87 174 148 87 182 153 86 196 165 92 208 174 96 213 180 102 227 191 107 241 203 113 255 214 119 255 216 125 255 218 132 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 106 96 74 113 102 75 115 103 76 122 109 77 123 110 78 131 115 79 132 116 80 139 121 80 140 122 81 148 128 81 148 128 81 156 134 81 156 134 81 163 138 81 163 138 81 171 144 81 178 149 81 177 148 80 184 153 80 197 163 85 211 175 90 214 178 95 227 189 100 240 200 106 254 212 113 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 100 90 67 107 95 68 109 97 69 117 103 70 124 108 71 126 110 72 133 115 73 135 117 74 142 122 74 143 123 75 150 128 75 151 128 75 158 133 75 158 133 75 165 138 75 165 138 75 172 143 74 179 148 74 177 146 73 183 150 72 196 160 77 208 170 82 220 180 88 232 191 94 244 201 100 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 100 88 61 108 94 62 110 96 63 117 101 64 119 103 65 127 109 66 128 110 67 136 115 67 136 116 68 144 121 68 144 121 68 151 126 69 151 126 68 158 131 68 165 136 68 164 135 67 170 139 67 176 143 66 181 146 65 178 144 64 189 153 69 201 163 75 211 172 81 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 51 255 194 51 255 194 50 255 194 50 99 86 54 106 91 55 109 93 57 116 99 58 118 100 59 126 106 60 127 107 60 134 112 61 135 113 61 142 118 61 143 119 62 149 123 61 149 123 61 154 126 61 160 130 60 159 129 60 163 132 59 168 135 58 172 138 57 175 139 55 185 148 61 255 194 50 255 194 50 255 194 51 255 194 51 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 251 191 50 230 176 50 211 163 50 194 151 50 179 140 50 169 134 51 156 125 51 146 117 50 135 109 49 126 102 47 121 99 46 114 93 44 95 81 47 103 87 49 105 89 50 113 94 51 115 96 52 117 98 53 124 103 53 124 103 54 131 108 54 137 112 54 137 112 54 143 116 54 148 120 53 146 118 53 151 121 52 155 124 51 158 126 50 161 127 49 163 128 47 255 192 44 255 192 46 255 193 47 255 193 49 255 194 50 255 194 51 255 194 51 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 240 183 50 209 161 50 180 141 50 153 122 50 128 105 50 128 105 50 128 105 50 128 105 50 128 105 50 130 106 51 130 106 51 128 105 50 125 102 49 121 99 47 117 96 46 111 91 44 105 86 41 98 80 38 93 76 36 89 74 40 96 80 42 99 82 43 102 85 44 108 89 45 110 91 45 116 95 46 122 99 46 123 100 46 128 103 46 127 103 46 132 106 45 135 108 45 139 111 44 141 112 43 137 109 42 138 109 40 255 189 36 255 190 38 255 191 41 255 192 44 255 192 46 255 193 47 255 193 49 255 194 50 255 194 51 255 194 51 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 231 177 50 194 151 50 159 126 50 126 103 50 126 103 50 126 103 50 126 103 50 126 103 50 126 103 50 126 103 50 126 103 50 126 103 50 127 104 50 128 105 51 126 103 50 123 101 49 120 98 47 113 93 45 107 88 43 101 83 40 93 76 37 87 71 35 79 65 31 73 60 29 79 65 33 86 70 34 89 73 35 96 78 36 97 79 37 103 83 37 104 84 38 109 88 38 109 88 38 113 90 37 116 92 37 119 94 36 116 92 35 117 92 34 117 92 33 217 161 29 255 188 31 255 189 35 255 190 37 255 191 40 255 191 43 255 192 45 255 193 47 255 193 49 255 194 50 255 194 51 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 229 175 50 188 147 50 149 119 50 124 102 50 124 102 50 124 102 50 124 102 50 124 102 50 124 102 50 124 102 50 124 102 50 124 102 50 124 102 50 124 102 50 124 102 50 125 103 51 125 103 51 123 101 50 119 98 48 115 94 46 108 89 44 102 84 41 95 78 38 87 71 35 80 66 32 72 59 29 65 53 26 59 49 24 53 43 21 72 58 26 75 61 27 80 64 28 81 65 28 86 69 28 90 71 28 90 71 28 93 74 28 95 75 28 92 73 27 92 72 26 78 61 21 123 93 24 170 127 26 220 163 29 255 188 32 255 189 35 255 190 38 255 191 41 255 192 44 255 192 46 255 193 48 255 194 50 255 194 51 255 194 51 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 222 170 50 179 140 50 138 112 50 122 100 50 122 100 50 122 100 50 122 100 50 122 100 50 122 100 50 122 100 50 122 100 50 122 100 50 122 100 50 122 100 50 122 100 50 122 100 50 122 100 50 124 102 51 124 102 51 122 100 50 118 97 48 112 92 46 107 88 44 101 83 42 94 78 39 87 72 36 79 65 32 72 59 30 66 54 27 60 49 24 53 44 22 48 40 20 44 36 18 41 34 17 39 32 16 61 48 19 62 49 19 64 51 19 39 32 16 41 34 17 44 36 18 48 40 20 69 55 22 117 89 24 166 124 27 217 161 30 255 188 32 255 189 36 255 190 39 255 191 42 255 192 44 255 192 46 255 193 48 255 194 50 255 194 51 255 194 51 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 161 128 50 120 99 50 120 99 50 120 99 50 120 99 50 120 99 50 120 99 50 120 99 50 120 99 50 120 99 50 120 99 50 120 99 50 120 99 50 120 99 50 120 99 50 120 99 50 120 99 50 121 100 51 121 100 51 120 99 50 119 98 50 115 95 48 111 92 46 104 86 43 98 81 41 93 77 39 85 70 36 80 66 33 72 59 30 66 55 28 62 51 26 57 47 24 54 44 22 49 41 21 47 39 20 47 39 20 46 38 19 47 39 20 47 39 20 49 41 21 54 44 22 57 47 24 103 80 26 150 113 28 201 150 30 255 188 33 255 189 36 255 190 39 255 191 41 255 191 43 255 192 46 255 193 48 255 194 50 255 194 50 255 194 51 255 194 51 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 134 109 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 118 98 50 119 98 50 120 99 51 119 99 51 116 96 49 114 94 48 110 91 47 106 88 45 101 84 43 95 79 40 90 74 38 85 70 36 80 66 34 76 63 32 71 59 30 68 56 29 66 55 28 64 53 27 62 51 26 61 51 26 62 51 26 64 53 27 66 55 28 84 68 29 128 99 30 176 133 32 225 168 34 255 189 36 255 190 38 255 191 40 255 191 43 255 192 45 255 193 47 255 193 48 255 193 49 255 194 51 255 194 51 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 141 114 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 116 96 50 117 97 50 118 98 51 117 97 50 115 96 50 113 94 49 109 90 47 107 89 46 102 85 44 99 82 43 95 79 41 92 76 39 89 74 39 86 71 37 84 70 36 82 68 36 81 67 35 82 68 35 81 67 35 107 86 36 148 114 36 191 145 37 237 178 39 255 190 39 255 191 41 255 191 43 255 192 44 255 192 46 255 193 47 255 193 49 255 194 50 255 194 50 255 194 51 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 182 142 50 147 118 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 114 95 50 116 97 51 116 97 51 115 96 50 114 95 50 112 93 49 110 91 48 108 90 47 106 88 46 105 87 46 102 85 45 101 84 44 100 83 44 132 106 44 168 131 44 204 156 44 244 184 44 255 192 44 255 192 45 255 192 46 255 192 46 255 193 47 255 193 48 255 193 49 255 194 50 255 194 50 255 194 51 255 194 51 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 224 172 50 193 150 50 164 130 50 137 111 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 112 93 50 113 94 51 114 95 51 114 95 51 138 112 51 164 130 50 193 150 50 224 172 50 255 194 50 255 194 50 255 193 49 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 51 255 194 51 255 194 51 255 194 51 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 254 193 50 231 177 50 210 162 50 191 149 50 174 137 50 159 126 50 146 117 50 135 110 50 126 103 50 119 98 50 114 95 50 111 93 50 110 92 50 111 93 50 114 95 50 119 98 50 126 103 50 135 110 50 146 117 50 159 126 50 174 137 50 191 149 50 210 162 50 231 177 50 254 193 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50 255 194 50