orpheus' hacky guide to writing a programming language

chapters

Orpheus finds an easel in the mail

Orpheus writes a lexer

Orpheus writes a parser

Orpheus writes an interpreter

Orpheus decodes the program, and extras

Hack Club is running a programming language jam from June 08 - 29, where you'll get to hack on and ship a programming language in the span of three weeks and possibly win a chance to get a signed copy of Crafting Interpreters. Sign up here before June 07!

High schooler? Get stickers!

Orpheus finds an easel in the mail

It's a normal Saturday for Orpheus the dinosaur. Or rather, not normal. This is the first Saturday in a while where she can lie in bed alone, look out the window, and daydream about whatever she wants to. No tea parties to go to, no meetings, no nothing. She can just lie in bed and think about pancakes for breakfast, lunch, and dinner.

What a perfect day. You know what would be even more perfect? Actual pancakes. Blueberry pancakes, chocolate pancakes, banana pancakes. That means she has got to get out of bed and check if she has those ingredients. She rolls over and out of bed and into the kitchen.

When she gets to the kitchen, there's a knock on the door. Now, Orpheus' house is laid out in such a way that the front door leads to the kitchen. Or rather, the kitchen leads to the front door. (The magic of perspective.)

Perfect timing!, she thinks. Almost like someone knows what I'm doing at the current moment.

The doorbell rings insistently again. Orpheus runs stomps her way over to the door and opens it, but no one's there! She looks around. Nobody's around. It's kind of a dull and gray day outside, honestly, although the rain is making nice pitter-patter sounds on the porch screens.

She looks down. There's a box at her feet. Ooh. Could it be fan mail? She bends down to pick it up.

Orpheus gets mail

She rips apart the box with her claws, and three things fall out: a keyboard sort of thing with a very small screen (a computer??), a grid-like boxy sort of contraption (something like this. Orpheus and I couldn't come up with a better description when we were arguing over the sequence of events), and a nice, fancy piece of paper that Orpheus can't help but put her nose up to. It smells good. Like paper, you know?

Orpheus reads the letter.


I hope this letter finds you well. Maybe on a cozy rainy Saturday morning. In the confines of this package (there is only so much you can fit inside a decent package when you are trying to adhere to USPS shipping guidelines while also trying to be budget-friendly), there are two things: a computer unlike anything you normally use, for interfacing with the second thing, an easel.

The easel is a blank, sad thing right now. You need to paint it. Now, you can't paint it with any normal paint and brush. What, do you think this is, that one boy with that one purple crayon that he can just make random shite come to life with by scribbling?

No, you must talk to it.

Clear
Run
Output will show up here.

I know you've wanted to be an artist. And now you have a chance to be a special one. An artist who can also perform magic! Figure out how to talk to the easel with the computer I have provided, and you can do both. Hint: you need to write a programming language. The one I have included is called Easel, and is a good starting point.

There is much you'll learn along the way. You might even find that there's a surprise or two, too. (See what I did there? Punny. Yes, I am quite a humorous person. It is something I pride myself on. Quite masterful at pranks, too.)

You'll probably go back to cooking pancakes or something. There are many reasons to do this, though, and here I'll rank them in alphabetical order:

  1. It will be lots of fun.
  2. You will believe in yourself more.
  3. Learn much, you will. (Sorry. I've been watching Star Wars.)

Signed, your mysterious sender

P.S. I know that you would like to know who I am because who doesn't? So let's strike a compromise. Once you figure out how to paint this easel, you'll be able to run this:

prepare rows as 64
prepare cols as 64

sketch color needs (r, g, b) {
  finished prep Color(r: r, g: g, b: b)
}

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

sketch draw {
  loop x through (0, rows) {
    loop y through (0, cols) {
      prepare color as me.get(x * rows + y)
      Canvas.fill(x, y, color)
    }
  }
}

draw()

And figure out who I am.


Orpheus is slightly taken aback. Erm, crepey. Sorry, creepy. Her stomach rumbles. Sorry. Just a little bit hungry. How does this mysterious sender know everything that is happening, in real time? Guess the only way to find out is to write that programming language.

Hm. Orpheus could go cook pancakes, or she could figure out this easel and who in the hecktie-neckties this mysterious person is. Or she could do both.

She's never written a programming language before, but then, I presume you haven't, either. This is an invitation for you to join Orpheus' pancake party.

Go cook your pancakes! We'll be back in half an hour.

Pancakes
Blueberry pancakes
Chocolate pancakes
Banana pancakes
  • 1 cup all-purpose flour
  • 2 tablespoons sugar
  • 1 tablespoon baking powder
  • 1/2 teaspoon salt
  • 1 cup milk
  • 2 tablespoons unsalted butter, melted
  • 1 large egg
  • 1 teaspoon vanilla extract
  • 1 cup fresh blueberries

Instructions:

  1. Preheat a non-stick skillet or griddle over medium heat.
  2. In a large bowl, whisk together the flour, sugar, baking powder, and salt.
  3. In another bowl, whisk together the milk, melted butter, egg, and vanilla extract.
  4. Pour the wet ingredients into the dry ingredients and stir until just combined. Be careful not to overmix; the batter should be slightly lumpy.
  5. Gently fold in the fresh blueberries.
  6. Lightly grease the skillet or griddle with butter or cooking spray.
  7. For each pancake, pour about 1/4 cup of batter onto the skillet or griddle.
  8. Cook until bubbles form on the surface of the pancake and the edges look set, about 2-3 minutes.
  9. Flip the pancake and cook until golden brown on the other side, about 1-2 minutes more.
  10. Repeat with the remaining batter, greasing the skillet or griddle as needed.
  11. Serve warm with additional fresh blueberries and maple syrup.

Easel, the programming language

Ok. Now that we both have a steaming pile of pancakes, let's take a look at Easel:

prepare rows as 64
prepare cols as 64

brush Cell has { x, y, live }

~ Exercise: try setting a custom pattern instead of randomness!
sketch seed {
  prepare cells as []
  loop x through (0, rows) {
    loop y through (0, cols) {
      prepare live as false
      prepare chance as random(0, 100)
      if (chance < 10) {
        prepare live as true
      }
      cells.add(prep Cell(x: x, y: y, live: live))
    }
  }
  finished cells
}

prepare cells as seed()

sketch getNeighbors needs (cells, index) {
  ~ Get neighbors around a cell
  prepare neighbors as []

  ~ Populate neighbors
  if (index - rows - 1 > 0) {
    neighbors.add(cells[index - rows - 1])
  } 
  if (index - rows > 0) {
    neighbors.add(cells[index - rows])
  }
  if (index - rows + 1 > 0) {
    neighbors.add(cells[index - rows + 1])
  }
  if (index > 0) {
    neighbors.add(cells[index - 1])
  }
  if (index < cells.length - 1) {
    neighbors.add(cells[index + 1])
  }
  if (index + rows - 1 < cells.length - 1) {
    neighbors.add(cells[index + rows - 1])
  }
  if (index + rows < cells.length - 1) {
    neighbors.add(cells[index + rows])
  }
  if (index + rows + 1 < cells.length - 1) {
    neighbors.add(cells[index + rows + 1])
  }

  prepare alive as []
  loop i through (0, neighbors.length) {
    if (neighbors[i].live) {
      alive.add(neighbors[i])
    }
  }
  finished alive
}

sketch painting {
  ~ This loop runs every iteration and must be in every program
  loop i through (0, cells.length) {
    prepare cell as cells[i]
    prepare neighbors as getNeighbors(cells, i)
    if (cell.live) {
      if (neighbors.length < 2 || neighbors.length > 3) {
        ~ Any live cell with fewer than two neighbors dies, as if by underpopulation
        ~ Any live cell with more than three live neighbors dies, as if by overpopulation
        prepare cell.live as false
      } elif (!cell.live && neighbors.length == 3) {
        ~ Any dead cell with exactly three live neighbors becomes a live cell, as if by reproduction
        prepare cell.live as true
      }
    } else {
      if (neighbors.length == 3) {
        ~ Any dead cell with exactly three live neighbors becomes a live cell, as if by reproduction
        prepare cell.live as true
      }
    }

    if (cell.live) {
      ~ Now draw the cell if it's alive!
      prepare color as prep Color(r: 255, g: 0, b: 0)
      Canvas.fill(cell.x, cell.y, color)
    } else {
      ~ If it's dead, turn the cell off
      Canvas.erase(cell.x, cell.y)
    }
  }
}

I bet you can already start to see the different features Easel has. Orpheus can, although it's ended up in a lot of dripping syrup over the letter.

Variables

Variables are created with the prepare keyword and as keywords, like prepare [name] as [value]. We can have strings, numbers, booleans, or arrays.

Comments

Comments are dictated by the tilde symbol. Me and Orpheus have decided that it looks pretty similar to her eyebrows when she's surprised by something, and comments help you when you're surprised by a piece of code, so we've decided that it's a pretty effective way of annotating our comments.

Structs

Structs are basically maps/objects/dicts/whatever you want to call them with a predefined list of keys. Defining a struct looks something like brush Cell has { x, y, live }. Creating a struct looks something like prep Cell(x: 1, y: 1, live: false). Get it? You're prepping a brush. Hehe.

Functions

We call functions sketches so we define them with the sketch keyword. If a function takes in parameters, you'll need to use the needs keyword before defining those.

Loops and if-else statements

These are pretty obvious.

sketch includes needs (array, value) {
  loop i through (0, array.length) {
    if (array[i] == value) {
      finished true
    }
  }

  finished false
}

prepare test as ["hello", "world", "fox"]

if (!(false && includes(test, "foxes"))) {
  ink("NOT (false AND includes foxes in test) evaluates to true")
}

Easel also has support for the usual operators: AND &&, OR ||, and NOT !.

Setup

Orpheus wipes her mouth with her hands and pushes her plate aside. Let's start doing this! We're going to make sure we have the basics first. It's like building Lego, really. The first step is to open dat terminal and start a new project:

mkdir easel
cd easel
npm init -y

Of course, if you're on a Chromebook or some device of that sort, and you've been following along with our built-in editor, you won't be able to follow this step or the following ones. Just skip down to writing the actual code.

Open up the package.json that's been created, and add this extra line that'll let us use the modern import syntax.

{
  // ...
  "type": "module"
}

Next, let's start writing some code! Here's some boilerplate code to go inside easel.js:

import fs from 'fs'

const readFile = location =>
  new Promise((resolve, reject) =>
    fs.readFile(location, 'utf-8', (err, data) => {
      if (err) return reject(err)
      resolve(data.toString())
    })
  )

const writeFile = (location, data) =>
  new Promise((resolve, reject) =>
    fs.writeFile(location, data, err => {
      if (err) return reject(err)
      resolve()
    })
  )

;(async () => {
  let argv = process.argv.slice(2)
  const debug = argv.find(cmd => cmd === '--dbg') ? true : false
  argv = argv.filter(arg => arg !== '--dbg')

  const location = argv[0]
  if (location) {
    const program = await readFile(location)
    console.log(program)
  } else {
    // Interactive REPL time!
  }
})()

Let's also get some error handling in there. It'll be useful later on for checking if errors are being thrown by our programming language or by JavaScript. Create a new file named stdlib.js and throw this in there:

export class EaselError extends Error {
  constructor(msg) {
    super()
    this.message = msg
  }

  toString() {
    return this.message
  }
}

You can run node easel.js test.easel now and it's rather boring. We could probably spruce it up a bit by writing that programming language. Let's get a-moving!